ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDBiZjMxZWEuLjc4NzU2NGIgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMzM4Miw3ICszMzgyLDcgQEAKIAogTjogR2VlcnQgVXl0dGVyaG9ldmVuCiBFOiBnZWVydEBsaW51eC1tNjhrLm9yZwotVzogaHR0cDovL2hvbWUudHZkLmJlL2NyMjY4NjQvCitXOiBodHRwOi8vdXNlcnMudGVsZW5ldC5iZS9nZWVydHUvCiBQOiAxMDI0Lzg2MjY3OEE2IEM1MUQgMzYxQyAwQkQxIDRDOTAgQjI3NSAgQzU1MyA2RUVBIDExQkEgODYyNiA3OEE2CiBEOiBtNjhrL0FtaWdhIGFuZCBQUEMvQ0hSUCBMb25ndHJhaWwgY29vcmRpbmF0b3IKIEQ6IEZyYW1lIGJ1ZmZlciBkZXZpY2UgYW5kIFhGNjhfRkJEZXYgbWFpbnRhaW5lcgpAQCAtMzM5Miw4ICszMzkyLDggQEAKIEQ6IEF0YXJpIEZhbGNvbiBjaGlwc2V0IElERQogRDogQW1pZ2EgR2F5bGUgY2hpcHNldCBJREUKIEQ6IG1pcHNlbCBORUMgRERCIFZyYy01MDc0Ci1TOiBFbWllbCBWbGllYmVyZ2hsYWFuIDJBLzIxCi1TOiBCLTMwMTAgS2Vzc2VsLUxvCitTOiBIYXRlcmJlZWtzdHJhYXQgNTVCCitTOiBCLTMyMDAgQWFyc2Nob3QKIFM6IEJlbGdpdW0KIAogTjogQ2hyaXMgVmFuY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKaW5kZXggZWU0YmI3My4uMTBiZjRkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKQEAgLTE5NCw3ICsxOTQsNyBAQAogRmluYWxseSwgaWYgeW91ciBkZXZpY2UgY2FuIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzIG9mCiBhZGRyZXNzIGR1cmluZyBQQ0kgYnVzIG1hc3RlcmluZyB5b3UgbWlnaHQgZG8gc29tZXRoaW5nIGxpa2U6CiAKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCAweDAwZmZmZmZmKSkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8yNEJJVF9NQVNLKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAibXlkZXY6IDI0LWJpdCBETUEgYWRkcmVzc2luZyBub3QgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwpAQCAtMjEyLDcgKzIxMiw3IEBACiBmdW5jdGlvbnMpIGFuZCB0aGUgdmFyaW91cyBkaWZmZXJlbnQgZnVuY3Rpb25zIGhhdmUgX2RpZmZlcmVudF8KIERNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zLCB5b3UgbWF5IHdpc2ggdG8gcHJvYmUgZWFjaCBtYXNrIGFuZAogb25seSBwcm92aWRlIHRoZSBmdW5jdGlvbmFsaXR5IHdoaWNoIHRoZSBtYWNoaW5lIGNhbiBoYW5kbGUuICBJdAotaXMgaW1wb3J0YW50IHRoYXQgdGhlIGxhc3QgY2FsbCB0byBwY2lfc2V0X2RtYV9tYXNrKCkgYmUgZm9yIHRoZSAKK2lzIGltcG9ydGFudCB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gcGNpX3NldF9kbWFfbWFzaygpIGJlIGZvciB0aGUKIG1vc3Qgc3BlY2lmaWMgbWFzay4KIAogSGVyZSBpcyBwc2V1ZG8tY29kZSBzaG93aW5nIGhvdyB0aGlzIG1pZ2h0IGJlIGRvbmU6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKaW5kZXggNWJjYmI2ZS4uZjg2OWIwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbApAQCAtNzA1LDcgKzcwNSw3IEBACiAKIAk8c2VjdDE+PHRpdGxlPmF0YV9zY3NpX2Vycm9yKCk8L3RpdGxlPgogCTxwYXJhPgotCWF0YV9zY3NpX2Vycm9yKCkgaXMgdGhlIGN1cnJlbnQgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQorCWF0YV9zY3NpX2Vycm9yKCkgaXMgdGhlIGN1cnJlbnQgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCiAJZm9yIGxpYmF0YS4gIEFzIGRpc2N1c3NlZCBhYm92ZSwgdGhpcyB3aWxsIGJlIGVudGVyZWQgaW4gdHdvCiAJY2FzZXMgLSB0aW1lb3V0IGFuZCBBVEFQSSBlcnJvciBjb21wbGV0aW9uLiAgVGhpcyBmdW5jdGlvbgogCWNhbGxzIGxvdyBsZXZlbCBsaWJhdGEgZHJpdmVyJ3MgZW5nX3RpbWVvdXQoKSBjYWxsYmFjaywgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggNTlkMGM3NC4uMjkzZmVkMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNzEsMTQgKzcxLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CXJlbW92ZSBFWFBPUlRfU1lNQk9MKHBhbmljX3RpbWVvdXQpCi1XaGVuOglBcHJpbCAyMDA2Ci1GaWxlczoJa2VybmVsL3BhbmljLmMKLVdoeToJTm8gbW9kdWxhciB1c2FnZSBpbiB0aGUga2VybmVsLgotV2hvOglBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglyZW1vdmUgRVhQT1JUX1NZTUJPTChpbnNlcnRfcmVzb3VyY2UpCiBXaGVuOglBcHJpbCAyMDA2CiBGaWxlczoJa2VybmVsL3Jlc291cmNlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAppbmRleCBhZGFhODk5Li4zYTJlNTUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC02OTQsNyArNjk0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBkZXNjcmliZXMgaG93IHRoZSBWRlMgY2FuIG1hbmlwdWxhdGUgYW4gb3BlbiBmaWxlLiBBcyBvZiBrZXJuZWwKLTIuNi4xMywgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgorMi42LjE3LCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6CiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgewogCWxvZmZfdCAoKmxsc2VlaykgKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKQEAgLTcyMyw2ICs3MjMsMTAgQEAKIAlpbnQgKCpjaGVja19mbGFncykoaW50KTsKIAlpbnQgKCpkaXJfbm90aWZ5KShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCWludCAoKmZsb2NrKSAoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworCXNzaXplX3QgKCpzcGxpY2Vfd3JpdGUpKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCAKK2ludCk7CisJc3NpemVfdCAoKnNwbGljZV9yZWFkKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgIAoraW50KTsKIH07CiAKIEFnYWluLCBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcwpAQCAtNzkwLDYgKzc5NCwxMiBAQAogCiAgIGZsb2NrOiBjYWxsZWQgYnkgdGhlIGZsb2NrKDIpIHN5c3RlbSBjYWxsCiAKKyAgc3BsaWNlX3dyaXRlOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGEgcGlwZSB0byBhIGZpbGUuIFRoaXMKKwkJbWV0aG9kIGlzIHVzZWQgYnkgdGhlIHNwbGljZSgyKSBzeXN0ZW0gY2FsbAorCisgIHNwbGljZV9yZWFkOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGZpbGUgdG8gYSBwaXBlLiBUaGlzCisJICAgICAgIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBzcGxpY2UoMikgc3lzdGVtIGNhbGwKKwogTm90ZSB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBzcGVjaWZpYwogZmlsZXN5c3RlbSBpbiB3aGljaCB0aGUgaW5vZGUgcmVzaWRlcy4gV2hlbiBvcGVuaW5nIGEgZGV2aWNlIG5vZGUKIChjaGFyYWN0ZXIgb3IgYmxvY2sgc3BlY2lhbCkgbW9zdCBmaWxlc3lzdGVtcyB3aWxsIGNhbGwgc3BlY2lhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0IGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTY0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmdpZ2FzZXQKQEAgLTAsMCArMSwyODYgQEAKK0dpZ2FTZXQgMzA3eCBEZXZpY2UgRHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgIFJlcXVpcmVtZW50cworICAgICAtLS0tLS0tLS0tLS0KKzEuMS4gSGFyZHdhcmUKKyAgICAgLS0tLS0tLS0KKyAgICAgVGhpcyByZWxlYXNlIHN1cHBvcnRzIHRoZSBjb25uZWN0aW9uIG9mIHRoZSBHaWdhc2V0IDMwN3gvNDE3eCBmYW1pbHkgb2YKKyAgICAgSVNETiBERUNUIGJhc2VzIHZpYSBHaWdhc2V0IE0xMDEgRGF0YSwgR2lnYXNldCBNMTA1IERhdGEgb3IgZGlyZWN0IFVTQgorICAgICBjb25uZWN0aW9uLiBUaGUgZm9sbG93aW5nIGRldmljZXMgYXJlIHJlcG9ydGVkIHRvIGJlIGNvbXBhdGlibGU6CisgICAgIDMwN3gvNDE3eDoKKyAgICAgICAgR2lnYXNldCBTWDI1NWlzZG4KKyAgICAgICAgR2lnYXNldCBTWDM1M2lzZG4KKyAgICAgICAgU2ludXMgNDUgW0FCXSBpc2RuIChEZXV0c2NoZSBUZWxla29tKQorICAgICAgICBTaW51cyA3MjFYL1hBCisgICAgICAgIFZveCBDaGljYWdvIDM5MCBJU0ROIChLUE4gVGVsZWNvbSkKKyAgICAgTTEwMToKKyAgICAgICAgU2ludXMgNDUgRGF0YSAxIChUZWxla29tKQorICAgICBNMTA1OgorICAgICAgICBHaWdhc2V0IFVTQiBBZGFwdGVyIERFQ1QKKyAgICAgICAgU2ludXMgNDUgRGF0YSAyIChUZWxla29tKQorICAgICAgICBTaW51cyA3MjEgZGF0YQorICAgICAgICBDaGljYWdvIDM5MCBVU0IgKEtQTikKKyAgICAgU2VlIGFsc28gaHR0cDovL3d3dy5lcmJ6ZS5pbmZvL3NpbnVzX2dpZ2FzZXQuaHRtIGFuZAorICAgICAgICAgICAgICBodHRwOi8vZ2lnYXNldDMwN3guc291cmNlZm9yZ2UubmV0LworCisgICAgIFdlIGhhZCBhbHNvIHJlcG9ydHMgZnJvbSB1c2VycyBvZiBHaWdhc2V0IE0xMDUgd2hvIGNvdWxkIHVzZSB0aGUgZHJpdmVycworICAgICB3aXRoIFNYIDEwMCBhbmQgQ1ggMTAwIElTRE4gYmFzZXMgKG9ubHkgaW4gdW5pbW9kZW0gbW9kZSwgc2VlIHNlY3Rpb24gMi40LikKKyAgICAgSWYgeW91IGhhdmUgYW5vdGhlciBkZXZpY2UgdGhhdCB3b3JrcyB3aXRoIG91ciBkcml2ZXIsIHBsZWFzZSBsZXQgdXMga25vdy4KKyAgICAgRm9yIGV4YW1wbGUsIEdpZ2FzZXQgU1gyMDVpc2RuL1NpbnVzIDcyMSBYIFNFIGFuZCBHaWdhc2V0IFNYMzAzaXNkbiBiYXNlcworICAgICBhcmUganVzdCB2ZXJzaW9ucyB3aXRob3V0IGFuc3dlcmluZyBtYWNoaW5lIG9mIG1vZGVscyBrbm93biB0byB3b3JrLCBzbworICAgICB0aGV5IHNob3VsZCB3b3JrIGp1c3QgYXMgd2VsbDsgYnV0IHNvIGZhciB3ZSBhcmUgbGFja2luZyBwb3NpdGl2ZSByZXBvcnRzCisgICAgIG9uIHRoZXNlLgorCisgICAgIENoYW5jZXMgb2YgZ2V0dGluZyBhbiBVU0IgZGV2aWNlIHRvIHdvcmsgYXJlIGdvb2QgaWYgdGhlIG91dHB1dCBvZgorICAgICAgICBsc3VzYgorICAgICBhdCB0aGUgY29tbWFuZCBsaW5lIGNvbnRhaW5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICBJRCAwNjgxOjAwMDEKKyAgICAgICAgSUQgMDY4MTowMDAyCisgICAgICAgIElEIDA2ODE6MDAwOQorICAgICAgICBJRCAwNjgxOjAwMjEKKyAgICAgICAgSUQgMDY4MTowMDIyCisKKzEuMi4gU29mdHdhcmUKKyAgICAgLS0tLS0tLS0KKyAgICAgVGhlIGRyaXZlciB3b3JrcyB3aXRoIElTRE40bGludXggYW5kIHNvIGNhbiBiZSB1c2VkIHdpdGggYW55IHNvZnR3YXJlCisgICAgIHdoaWNoIGlzIGFibGUgdG8gdXNlIElTRE40bGludXggZm9yIElTRE4gY29ubmVjdGlvbnMgKHZvaWNlIG9yIGRhdGEpLgorICAgICBDQVBJNExpbnV4IHN1cHBvcnQgaXMgcGxhbm5lZCBidXQgbm90IHlldCBhdmFpbGFibGUuCisKKyAgICAgVGhlcmUgYXJlIHNvbWUgdXNlciBzcGFjZSB0b29scyBhdmFpbGFibGUgYXQKKyAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9naWdhc2V0MzA3eC8KKyAgICAgd2hpY2ggcHJvdmlkZSBhY2Nlc3MgdG8gYWRkaXRpb25hbCBkZXZpY2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGxpa2UgU01TLAorICAgICBwaG9uZWJvb2sgb3IgY2FsbCBqb3VybmFsLgorCisKKzIuICAgSG93IHRvIHVzZSB0aGUgZHJpdmVyCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMi4xLiBNb2R1bGVzCisgICAgIC0tLS0tLS0KKyAgICAgVG8gZ2V0IHRoZSBkZXZpY2Ugd29ya2luZywgeW91IGhhdmUgdG8gbG9hZCB0aGUgcHJvcGVyIGtlcm5lbCBtb2R1bGUuIFlvdQorICAgICBjYW4gZG8gdGhpcyB1c2luZworICAgICAgICAgbW9kcHJvYmUgbW9kdWxlbmFtZQorICAgICB3aGVyZSBtb2R1bGVuYW1lIGlzIHVzYl9naWdhc2V0IChNMTA1KSBvciBiYXNfZ2lnYXNldCAoZGlyZWN0IFVTQgorICAgICBjb25uZWN0aW9uIHRvIHRoZSBiYXNlKS4KKworMi4yLiBEZXZpY2Ugbm9kZXMgZm9yIHVzZXIgc3BhY2UgcHJvZ3JhbXMKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIFRoZSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdXNlciBzcGFjZSAoZWcuIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzCisgICAgIG1lbnRpb25lZCBpbiAxLjIuKSB0aHJvdWdoIHRoZSBkZXZpY2Ugbm9kZXM6CisKKyAgICAgLSAvZGV2L3R0eUdVMCBmb3IgTTEwNSAoVVNCIGRhdGEgYm94ZXMpCisgICAgIC0gL2Rldi90dHlHQjAgZm9yIHRoZSBiYXNlIGRyaXZlciAoZGlyZWN0IFVTQiBjb25uZWN0aW9uKQorCisgICAgIFlvdSBjYW4gYWxzbyBzZWxlY3QgYSAiZGVmYXVsdCBkZXZpY2UiIHdoaWNoIGlzIHVzZWQgYnkgdGhlIGZyb250ZW5kcyB3aGVuCisgICAgIG5vIGRldmljZSBub2RlIGlzIGdpdmVuIGFzIHBhcmFtZXRlciwgYnkgY3JlYXRpbmcgYSBzeW1saW5rIC9kZXYvdHR5RyB0bworICAgICBvbmUgb2YgdGhlbSwgZWcuOgorCisgICAgICAgIGxuIC1zIC9kZXYvdHR5R0IwIC9kZXYvdHR5RworCisyLjMuIElTRE40bGludXgKKyAgICAgLS0tLS0tLS0tLQorICAgICBUaGlzIGlzIHRoZSAibm9ybWFsIiBtb2RlIG9mIG9wZXJhdGlvbi4gQWZ0ZXIgbG9hZGluZyB0aGUgbW9kdWxlIHlvdSBjYW4KKyAgICAgc2V0IHVwIHRoZSBJU0ROIHN5c3RlbSBqdXN0IGFzIHlvdSdkIGRvIHdpdGggYW55IElTRE4gY2FyZC4KKyAgICAgWW91ciBkaXN0cmlidXRpb24gc2hvdWxkIHByb3ZpZGUgc29tZSBjb25maWd1cmF0aW9uIHV0aWxpdHkuCisgICAgIElmIG5vdCwgeW91IGNhbiB1c2Ugc29tZSBIT1dUT3MgbGlrZQorICAgICAgICAgaHR0cDovL3d3dy5saW51eGhhdmVuLmRlL2RsaHAvSE9XVE8vREUtSVNETi1IT1dUTy01Lmh0bWwKKyAgICAgSWYgdGhpcyBkb2Vzbid0IHdvcmssIGJlY2F1c2UgeW91IGhhdmUgc29tZSByZWNlbnQgZGV2aWNlIGxpa2UgU1gxMDAgd2hlcmUKKyAgICAgZGVidWcgb3V0cHV0IChzZWUgc2VjdGlvbiAzLjIuKSBzaG93cyBzb21ldGhpbmcgbGlrZSB0aGlzIHdoZW4gZGlhbGluZworICAgICAgICAgQ01EIFJlY2VpdmVkOiBFUlJPUgorICAgICAgICAgQXZhaWxhYmxlIFBhcmFtczogMAorICAgICAgICAgQ29ubmVjdGlvbiBTdGF0ZTogMCwgUmVzcG9uc2U6IC0xCisgICAgICAgICBnaWdhc2V0X3Byb2Nlc3NfcmVzcG9uc2U6IHJlc3BfY29kZSAtMSBpbiBDb25TdGF0ZSAwICEKKyAgICAgICAgIFRpbWVvdXQgb2NjdXJyZWQKKyAgICAgeW91IG1pZ2h0IG5lZWQgdG8gdXNlIHVuaW1vZGVtIG1vZGU6CisKKzIuNC4gVW5pbW9kZW0gbW9kZQorICAgICAtLS0tLS0tLS0tLS0tCisgICAgIFRoaXMgaXMgbmVlZGVkIGZvciBzb21lIGRldmljZXMgW2UuZy4gU1gxMDBdIGFzIHRoZXkgaGF2ZSBwcm9ibGVtcyB3aXRoCisgICAgIHRoZSAibm9ybWFsIiBjb21tYW5kcy4KKworICAgICBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNvbW1hbmQgbGluZSB0b29sIGdpZ2Fjb250ciwgeW91IGNhbiBlbnRlcgorICAgICB1bmltb2RlbSBtb2RlIHVzaW5nCisgICAgICAgICBnaWdhY29udHIgLS1tb2RlIHVuaW1vZGVtCisgICAgIFlvdSBjYW4gc3dpdGNoIGJhY2sgdXNpbmcKKyAgICAgICAgIGdpZ2Fjb250ciAtLW1vZGUgaXNkbgorCisgICAgIFlvdSBjYW4gYWxzbyBsb2FkIHRoZSBkcml2ZXIgdXNpbmcgZS5nLgorICAgICAgICAgbW9kcHJvYmUgdXNiX2dpZ2FzZXQgc3RhcnRtb2RlPTAKKyAgICAgdG8gcHJldmVudCB0aGUgZHJpdmVyIGZyb20gc3RhcnRpbmcgaW4gImlzZG40bGludXggbW9kZSIuCisKKyAgICAgSW4gdGhpcyBtb2RlIHRoZSBkZXZpY2Ugd29ya3MgbGlrZSBhIG1vZGVtIGNvbm5lY3RlZCB0byBhIHNlcmlhbCBwb3J0CisgICAgICh0aGUgL2Rldi90dHlHVTAsIC4uLiBtZW50aW9uZWQgYWJvdmUpIHdoaWNoIHVuZGVyc3RhbmRzIHRoZSBjb21tYW5kcworICAgICAgICAgQVRaICAgICAgICAgICAgICAgICBpbml0LCByZXNldAorICAgICAgICAgICAgID0+IE9LIG9yIEVSUk9SCisgICAgICAgICBBVEQKKyAgICAgICAgIEFURFQgICAgICAgICAgICAgICAgZGlhbAorICAgICAgICAgICAgID0+IE9LLCBDT05ORUNULAorICAgICAgICAgICAgICAgIEJVU1ksCisgICAgICAgICAgICAgICAgTk8gRElBTCBUT05FLAorICAgICAgICAgICAgICAgIE5PIENBUlJJRVIsCisgICAgICAgICAgICAgICAgTk8gQU5TV0VSCisgICAgICAgICA8cGF1c2U+KysrPHBhdXNlPiAgIGNoYW5nZSB0byBjb21tYW5kIG1vZGUgd2hlbiBjb25uZWN0ZWQKKyAgICAgICAgIEFUSCAgICAgICAgICAgICAgICAgaGFuZ3VwCisKKyAgICAgWW91IGNhbiB1c2Ugc29tZSBjb25maWd1cmF0aW9uIHRvb2wgb2YgeW91ciBkaXN0cmlidXRpb24gdG8gY29uZmlndXJlIHRoaXMKKyAgICAgIm1vZGVtIiBvciBjb25maWd1cmUgcHBwZC93dmRpYWwgbWFudWFsbHkuIFRoZXJlIGFyZSBzb21lIGV4YW1wbGUgcHBwCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNoYXQgc2NyaXB0cyBpbiB0aGUgZ2lnYXNldC1WRVJTSU9OL3BwcCBkaXJlY3RvcnkuCisgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlIFVTQiBkcml2ZXJzIGFyZSBub3QgYWJsZSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZQorICAgICBjb250cm9sIGxpbmVzICh0aGUgTTEwNSBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHNvbWUgdW5kb2N1bWVudGVkCisgICAgIGNvbnRyb2wgcmVxdWVzdHMsIGlmIHlvdSByZWFsbHkgbmVlZCB0aGUgY29udHJvbCBsaW5lcywgdGhvdWdoKS4gVGhpcyBtZWFucworICAgICB5b3UgbXVzdCB1c2UgIlN0dXBpZCBNb2RlIiBpZiB5b3UgYXJlIHVzaW5nIHd2ZGlhbCBvciB5b3Ugc2hvdWxkIHVzZSB0aGUKKyAgICAgbm9jcnRzY3RzIG9wdGlvbiBvZiBwcHBkLgorICAgICBZb3UgbXVzdCBhbHNvIGFzc3VyZSB0aGF0IHRoZSBwcHBfYXN5bmMgbW9kdWxlIGlzIGxvYWRlZCB3aXRoIHRoZSBwYXJhbWV0ZXIKKyAgICAgZmxhZ190aW1lPTAuIFlvdSBjYW4gZG8gdGhpcyBlLmcuIGJ5IGFkZGluZyBhIGxpbmUgbGlrZQorCisgICAgICAgIG9wdGlvbnMgcHBwX2FzeW5jIGZsYWdfdGltZT0wCisKKyAgICAgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mLiBJZiB5b3VyIGRpc3RyaWJ1dGlvbiBoYXMgc29tZSBsb2NhbCBtb2R1bGUKKyAgICAgY29uZmlndXJhdGlvbiBmaWxlIGxpa2UgL2V0Yy9tb2Rwcm9iZS5jb25mLmxvY2FsLAorICAgICB1c2luZyB0aGF0IHNob3VsZCBiZSBwcmVmZXJyZWQuCisKKzIuNS4gQ2FsbC1JRCAoQ0lEKSBtb2RlCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBDYWxsLUlEcyBhcmUgbnVtYmVycyB1c2VkIHRvIHRhZyBjb21tYW5kcyB0bywgYW5kIHJlc3BvbnNlcyBmcm9tLCB0aGUKKyAgICAgR2lnYXNldCBiYXNlIGluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIHNpbXVsdGFuZW91cyBoYW5kbGluZyBvZiBtdWx0aXBsZQorICAgICBJU0ROIGNhbGxzLiBUaGVpciB1c2UgY2FuIGJlIGVuYWJsZWQgKCJDSUQgbW9kZSIpIG9yIGRpc2FibGVkICgiVW5pbW9kZW0KKyAgICAgbW9kZSIpLiBXaXRob3V0IENhbGwtSURzIChpbiBVbmltb2RlbSBtb2RlKSwgb25seSBhIHZlcnkgbGltaXRlZCBzZXQgb2YKKyAgICAgZnVuY3Rpb25zIGlzIGF2YWlsYWJsZS4gSXQgYWxsb3dzIG91dGdvaW5nIGRhdGEgY29ubmVjdGlvbnMgb25seSwgYnV0CisgICAgIGRvZXMgbm90IHNpZ25hbCBpbmNvbWluZyBjYWxscyBvciBvdGhlciBiYXNlIGV2ZW50cy4KKworICAgICBERUNUIGNvcmRsZXNzIGRhdGEgZGV2aWNlcyAoTTEweCkgcGVybWFuZW50bHkgb2NjdXB5IHRoZSBjb3JkbGVzcworICAgICBjb25uZWN0aW9uIHRvIHRoZSBiYXNlIHdoaWxlIENhbGwtSURzIGFyZSBhY3RpdmF0ZWQuIEFzIHRoZSBHaWdhc2V0CisgICAgIGJhc2VzIG9ubHkgc3VwcG9ydCBvbmUgREVDVCBkYXRhIGNvbm5lY3Rpb24gYXQgYSB0aW1lLCB0aGlzIHByZXZlbnRzCisgICAgIG90aGVyIERFQ1QgY29yZGxlc3MgZGF0YSBkZXZpY2VzIGZyb20gYWNjZXNzaW5nIHRoZSBiYXNlLgorCisgICAgIER1cmluZyBhY3RpdmUgb3BlcmF0aW9uLCB0aGUgZHJpdmVyIHN3aXRjaGVzIHRvIHRoZSBuZWNlc3NhcnkgbW9kZQorICAgICBhdXRvbWF0aWNhbGx5LiBIb3dldmVyLCBmb3IgdGhlIHJlYXNvbnMgYWJvdmUsIHRoZSBtb2RlIGNob3NlbiB3aGVuCisgICAgIHRoZSBkZXZpY2UgaXMgbm90IGluIHVzZSAoaWRsZSkgY2FuIGJlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLgorICAgICAtIElmIHlvdSB3YW50IHRvIHJlY2VpdmUgaW5jb21pbmcgY2FsbHMsIHlvdSBjYW4gdXNlIHRoZSBkZWZhdWx0CisgICAgICAgc2V0dGluZ3MgKENJRCBtb2RlKS4KKyAgICAgLSBJZiB5b3UgaGF2ZSBzZXZlcmFsIERFQ1QgZGF0YSBkZXZpY2VzIChNMTB4KSB3aGljaCB5b3Ugd2FudCB0byB1c2UKKyAgICAgICBpbiB0dXJuLCBzZWxlY3QgVW5pbW9kZW0gbW9kZSBieSBwYXNzaW5nIHRoZSBwYXJhbWV0ZXIgImNpZG1vZGU9MCIgdG8KKyAgICAgICB0aGUgZHJpdmVyICgibW9kcHJvYmUgdXNiX2dpZ2FzZXQgY2lkbW9kZT0wIiBvciBtb2Rwcm9iZS5jb25mKS4KKworICAgICBJZiB5b3Ugd2FudCBib3RoIG9mIHRoZXNlIGF0IG9uY2UsIHlvdSBhcmUgb3V0IG9mIGx1Y2suCisKKyAgICAgWW91IGNhbiBhbHNvIHVzZSAvc3lzL21vZHVsZS88bmFtZT4vcGFyYW1ldGVycy9jaWRtb2RlIGZvciBjaGFuZ2luZworICAgICB0aGUgQ0lEIG1vZGUgc2V0dGluZyAoPG5hbWU+IGlzIHVzYl9naWdhc2V0IG9yIGJhc19naWdhc2V0KS4KKworCiszLiAgIFRyb3VibGVzaG9vdGluZworICAgICAtLS0tLS0tLS0tLS0tLS0KKzMuMS4gU29sdXRpb25zIHRvIGZyZXF1ZW50bHkgcmVwb3J0ZWQgcHJvYmxlbXMKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgUHJvYmxlbToKKyAgICAgICAgWW91IGhhdmUgYSBzbG93IHByb3ZpZGVyIGFuZCBpc2RuNGxpbnV4IGdpdmVzIHVwIGRpYWxpbmcgdG9vIGVhcmx5LgorICAgICBTb2x1dGlvbjoKKyAgICAgICAgTG9hZCB0aGUgaXNkbiBtb2R1bGUgdXNpbmcgdGhlIGRpYWx0aW1lb3V0IG9wdGlvbi4gWW91IGNhbiBkbyB0aGlzIGUuZy4KKyAgICAgICAgYnkgYWRkaW5nIGEgbGluZSBsaWtlCisKKyAgICAgICAgICAgb3B0aW9ucyBpc2RuIGRpYWx0aW1lb3V0PTE1CisKKyAgICAgICAgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mLiBJZiB5b3VyIGRpc3RyaWJ1dGlvbiBoYXMgc29tZSBsb2NhbCBtb2R1bGUKKyAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGxpa2UgL2V0Yy9tb2Rwcm9iZS5jb25mLmxvY2FsLAorICAgICAgICB1c2luZyB0aGF0IHNob3VsZCBiZSBwcmVmZXJyZWQuCisKKyAgICAgUHJvYmxlbToKKyAgICAgICAgWW91ciBpc2RuIHNjcmlwdCBhYm9ydHMgd2l0aCBhIG1lc3NhZ2UgYWJvdXQgaXNkbmxvZy4KKyAgICAgU29sdXRpb246CisgICAgICAgIFRyeSBkZWFjdGl2YXRpbmcgKG9yIGNvbW1lbnRpbmcgb3V0KSBpc2RubG9nLiBUaGlzIGRyaXZlciBkb2VzIG5vdAorICAgICAgICBzdXBwb3J0IGl0LgorCisgICAgIFByb2JsZW06CisgICAgICAgIFlvdSBoYXZlIHR3byBvciBtb3JlIERFQ1QgZGF0YSBhZGFwdGVycyAoTTEwMS9NMTA1KSBhbmQgb25seSB0aGUKKyAgICAgICAgZmlyc3Qgb25lIHlvdSB0dXJuIG9uIHdvcmtzLgorICAgICBTb2x1dGlvbjoKKyAgICAgICAgU2VsZWN0IFVuaW1vZGVtIG1vZGUgZm9yIGFsbCBERUNUIGRhdGEgYWRhcHRlcnMuIChzZWUgc2VjdGlvbiAyLjQuKQorCiszLjIuIFRlbGxpbmcgdGhlIGRyaXZlciB0byBwcm92aWRlIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBCdWlsZGluZyB0aGUgZHJpdmVyIHdpdGggdGhlICJHaWdhc2V0IGRlYnVnZ2luZyIga2VybmVsIGNvbmZpZ3VyYXRpb24KKyAgICAgb3B0aW9uIChDT05GSUdfR0lHQVNFVF9ERUJVRykgZ2l2ZXMgaXQgdGhlIGFiaWxpdHkgdG8gcHJvZHVjZSBhZGRpdGlvbmFsCisgICAgIGluZm9ybWF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCisgICAgIFlvdSBjYW4gY29udHJvbCB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0aGUgZHJpdmVyIHByb2R1Y2VzIGJ5CisgICAgIHdyaXRpbmcgYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG8gL3N5cy9tb2R1bGUvZ2lnYXNldC9wYXJhbWV0ZXJzL2RlYnVnLCBlLmcuCisgICAgICAgIGVjaG8gMCA+IC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZworICAgICBzd2l0Y2hlcyBvZmYgZGVidWdnaW5nIG91dHB1dCBjb21wbGV0ZWx5LAorICAgICAgICBlY2hvIDB4MTBhMDIwID4gL3N5cy9tb2R1bGUvZ2lnYXNldC9wYXJhbWV0ZXJzL2RlYnVnCisgICAgIGVuYWJsZXMgdGhlIHN0YW5kYXJkIHNldCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IG1lc3NhZ2VzLiBUaGVzZSB2YWx1ZXMgYXJlCisgICAgIGJpdCBwYXR0ZXJucyB3aGVyZSBldmVyeSBiaXQgY29udHJvbHMgYSBjZXJ0YWluIHR5cGUgb2YgZGVidWdnaW5nIG91dHB1dC4KKyAgICAgU2VlIHRoZSBjb25zdGFudHMgREVCVUdfKiBpbiB0aGUgc291cmNlIGZpbGUgZ2lnYXNldC5oIGZvciBkZXRhaWxzLgorCisgICAgIFRoZSBpbml0aWFsIHZhbHVlIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGRlYnVnIHBhcmFtZXRlciB3aGVuIGxvYWRpbmcgdGhlCisgICAgIG1vZHVsZSAiZ2lnYXNldCIsIGUuZy4gYnkgYWRkaW5nIGEgbGluZQorICAgICAgICBvcHRpb25zIGdpZ2FzZXQgZGVidWc9MAorICAgICB0byAvZXRjL21vZHByb2JlLmNvbmYsIC4uLgorCisgICAgIEdlbmVyYXRlZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kCisgICAgIC0gYXMgb3V0cHV0IG9mIHRoZSBjb21tYW5kCisgICAgICAgICBkbWVzZworICAgICAtIGluIHN5c3RlbSBsb2cgZmlsZXMgd3JpdHRlbiBieSB5b3VyIHN5c2xvZyBkYWVtb24sIHVzdWFsbHkKKyAgICAgICBpbiAvdmFyL2xvZy8sIGUuZy4gL3Zhci9sb2cvbWVzc2FnZXMuCisKKzMuMy4gUmVwb3J0aW5nIHByb2JsZW1zIGFuZCBidWdzCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBJZiB5b3UgY2FuJ3Qgc29sdmUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyIG9uIHlvdXIgb3duLCBmZWVsIGZyZWUgdG8KKyAgICAgdXNlIG9uZSBvZiB0aGUgZm9ydW1zLCBidWcgdHJhY2tlcnMsIG9yIG1haWxpbmcgbGlzdHMgb24KKyAgICAgICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2lnYXNldDMwN3gKKyAgICAgb3Igd3JpdGUgYW4gZWxlY3Ryb25pYyBtYWlsIHRvIHRoZSBtYWludGFpbmVycy4KKworICAgICBUcnkgdG8gcHJvdmlkZSBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlLCBzdWNoIGFzCisgICAgIC0gZGlzdHJpYnV0aW9uCisgICAgIC0ga2VybmVsIHZlcnNpb24gKHVuYW1lIC1yKQorICAgICAtIGdjYyB2ZXJzaW9uIChnY2MgLS12ZXJzaW9uKQorICAgICAtIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSAodW5hbWUgLW0sIC4uLikKKyAgICAgLSB0eXBlIGFuZCBmaXJtd2FyZSB2ZXJzaW9uIG9mIHlvdXIgZGV2aWNlIChiYXNlIGFuZCB3aXJlbGVzcyBtb2R1bGUsCisgICAgICAgaWYgYW55KQorICAgICAtIG91dHB1dCBvZiAibHN1c2IgLXYiIChpZiB1c2luZyBhbiBVU0IgZGV2aWNlKQorICAgICAtIGVycm9yIG1lc3NhZ2VzCisgICAgIC0gcmVsZXZhbnQgc3lzdGVtIGxvZyBtZXNzYWdlcyAoaXQgd291bGQgaGVscCBpZiB5b3UgYWN0aXZhdGUgZGVidWcKKyAgICAgICBvdXRwdXQgYXMgZGVzY3JpYmVkIGluIDMuMi4pCisKKyAgICAgRm9yIGhlbHAgd2l0aCBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gcHJvYmxlbXMgbm90IHNwZWNpZmljIHRvIG91ciBkcml2ZXIsCisgICAgIHN1Y2ggYXMgaXNkbjRsaW51eCBhbmQgbmV0d29yayBjb25maWd1cmF0aW9uIGlzc3VlcywgcGxlYXNlIHJlZmVyIHRvIHRoZQorICAgICBhcHByb3ByaWF0ZSBmb3J1bXMgYW5kIG5ld3Nncm91cHMuCisKKzMuNC4gUmVwb3J0aW5nIHByb2JsZW0gc29sdXRpb25zCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBJZiB5b3Ugc29sdmVkIGEgcHJvYmxlbSB3aXRoIG91ciBkcml2ZXJzLCB3cm90ZSBzdGFydHVwIHNjcmlwdHMgZm9yIHlvdXIKKyAgICAgZGlzdHJpYnV0aW9uLCAuLi4gZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgKHVzaW5nIG9uZSBvZiB0aGUgcGxhY2VzCisgICAgIG1lbnRpb25lZCBpbiAzLjMuKS4gV2UnZCBsaWtlIHRvIGFkZCBzY3JpcHRzLCBoaW50cywgZG9jdW1lbnRhdGlvbgorICAgICB0byB0aGUgZHJpdmVyIGFuZC9vciB0aGUgcHJvamVjdCB3ZWIgcGFnZS4KKworCis0LiAgIExpbmtzLCBvdGhlciBzb2Z0d2FyZQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgLSBTb3VyY2Vmb3JnZSBwcm9qZWN0IGRldmVsb3BpbmcgdGhpcyBkcml2ZXIgYW5kIGFzc29jaWF0ZWQgdG9vbHMKKyAgICAgICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2lnYXNldDMwN3gKKyAgICAgLSBZYWhvbyEgR3JvdXAgb24gdGhlIFNpZW1lbnMgR2lnYXNldCBmYW1pbHkgb2YgZGV2aWNlcworICAgICAgICAgaHR0cDovL2RlLmdyb3Vwcy55YWhvby5jb20vZ3JvdXAvU2llbWVucy1HaWdhc2V0CisgICAgIC0gU2llbWVucyBHaWdhc2V0L1QtU2ludXMgY29tcGF0aWJpbGl0eSB0YWJsZQorICAgICAgICAgaHR0cDovL3d3dy5lcmJ6ZS5pbmZvL3NpbnVzX2dpZ2FzZXQuaHRtCisKKworNS4gICBDcmVkaXRzCisgICAgIC0tLS0tLS0KKyAgICAgVGhhbmtzIHRvCisKKyAgICAgS2Fyc3RlbiBLZWlsCisgICAgICAgIGZvciBoaXMgaGVscCB3aXRoIGlzZG40bGludXgKKyAgICAgRGV0aSBGbGllZ2wKKyAgICAgICAgZm9yIGhpcyBiYXNlIGRyaXZlciBjb2RlCisgICAgIERlbm5pcyBEaWV0cmljaAorICAgICAgICBmb3IgaGlzIGtlcm5lbCAyLjYgcGF0Y2hlcworICAgICBBbmRyZWFzIFJ1bW1lbAorICAgICAgICBmb3IgaGlzIHdvcmsgYW5kIGxvZ3MgdG8gZ2V0IHVuaW1vZGVtIG1vZGUgd29ya2luZworICAgICBBbmRyZWFzIERlZ2VydAorICAgICAgICBmb3IgaGlzIGxvZ3MgYW5kIHBhdGNoZXMgdG8gZ2V0IGN4IDEwMCB3b3JraW5nCisgICAgIERpZXRyaWNoIEZlaXN0CisgICAgICAgIGZvciBoaXMgZ2VuZXJvdXMgZG9uYXRpb24gb2Ygb25lIE0xMDUgYW5kIHR3byBNMTAxIGNvcmRsZXNzIGFkYXB0ZXJzCisgICAgIENocmlzdG9waCBTY2h3ZWVycworICAgICAgICBmb3IgaGlzIGdlbmVyb3VzIGRvbmF0aW9uIG9mIGEgTTM0IGRldmljZQorCisgICAgIGFuZCBhbGwgdGhlIG90aGVyIHBlb3BsZSB3aG8gc2VudCBsb2dzIGFuZCBvdGhlciBpbmZvcm1hdGlvbi4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dAppbmRleCBmY2NjZjI0Li42MWZjMDc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dApAQCAtNDQsNyArNDQsNyBAQAogb2YgbW9kdWxlcy4gVGhlIGF1dGhvciBvZiBhbiBleHRlcm5hbCBtb2R1bGVzIHNob3VsZCBzdXBwbHkKIGEgbWFrZWZpbGUgdGhhdCBoaWRlcyBtb3N0IG9mIHRoZSBjb21wbGV4aXR5IHNvIG9uZSBvbmx5IGhhcyB0byB0eXBlCiAnbWFrZScgdG8gYnVpbGQgdGhlIG1vZHVsZS4gQSBjb21wbGV0ZSBleGFtcGxlIHdpbGwgYmUgcHJlc2VudCBpbgotY2hhcHRlciCkLiBDcmVhdGluZyBhIGtidWlsZCBmaWxlIGZvciBhbiBleHRlcm5hbCBtb2R1bGUiLgorY2hhcHRlciA0LCAiQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlIi4KIAogCiA9PT0gMi4gSG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQKaW5kZXggYjE4ZTIxNi4uNTY5NmU4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQKQEAgLTkxOSwxMSArOTE5LDExIEBACiAgICAgaW50IHNldHRsZV90aW1lID0gNjA7CiAKICAgICAvKiBQYXJzZSB0aGUgc2ltcGxlIGNvbW1hbmQtbGluZSAqLwotICAgIGlmIChhYyA9PSAyKQotCWRpc2sgPSBhdlsxXTsKLSAgICBlbHNlIGlmIChhYyA9PSA0KSB7Ci0Jc2V0dGxlX3RpbWUgPSBhdG9pKGF2WzJdKTsKLQlkaXNrID0gYXZbM107CisgICAgaWYgKGFyZ2MgPT0gMikKKwlkaXNrID0gYXJndlsxXTsKKyAgICBlbHNlIGlmIChhcmdjID09IDQpIHsKKwlzZXR0bGVfdGltZSA9IGF0b2koYXJndlsyXSk7CisJZGlzayA9IGFyZ3ZbM107CiAgICAgfSBlbHNlCiAJdXNhZ2UoKTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IGY4NTUwMzEuLjkyZjAwNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTYxMCw2ICs2MTAsNyBAQAogCiAJQ1BVIDEJCQlDUFUgMgogCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJCXsgQiA9IDc7IFggPSA5OyBZID0gODsgQyA9ICZZIH0KIAlTVE9SRSBBID0gMQogCVNUT1JFIEIgPSAyCiAJPHdyaXRlIGJhcnJpZXI+CkBAIC02NTEsNyArNjUyLDIwIEBACiAod2hpY2ggd291bGQgYmUgQikgY29taW5nIGFmdGVyIHRoZSB0aGUgTE9BRCBvZiBDLgogCiBJZiwgaG93ZXZlciwgYSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciB3ZXJlIHRvIGJlIHBsYWNlZCBiZXR3ZWVuIHRoZSBsb2FkIG9mIEMKLWFuZCB0aGUgbG9hZCBvZiAqQyAoaWU6IEIpIG9uIENQVSAyLCB0aGVuIHRoZSBmb2xsb3dpbmcgd2lsbCBvY2N1cjoKK2FuZCB0aGUgbG9hZCBvZiAqQyAoaWU6IEIpIG9uIENQVSAyOgorCisJQ1BVIDEJCQlDUFUgMgorCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJCXsgQiA9IDc7IFggPSA5OyBZID0gODsgQyA9ICZZIH0KKwlTVE9SRSBBID0gMQorCVNUT1JFIEIgPSAyCisJPHdyaXRlIGJhcnJpZXI+CisJU1RPUkUgQyA9ICZCCQlMT0FEIFgKKwlTVE9SRSBEID0gNAkJTE9BRCBDIChnZXRzICZCKQorCQkJCTxkYXRhIGRlcGVuZGVuY3kgYmFycmllcj4KKwkJCQlMT0FEICpDIChyZWFkcyBCKQorCit0aGVuIHRoZSBmb2xsb3dpbmcgd2lsbCBvY2N1cjoKIAogCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgICAgICA6ICAgICAgIDoKIAl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0rCkBAIC04MjksOCArODQzLDggQEAKICAoKikgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CiAKICAgICAgVGhlc2UgYXJlIGZvciB1c2Ugd2l0aCBhdG9taWMgYWRkLCBzdWJ0cmFjdCwgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQKLSAgICAgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nLiAgVGhlc2UgZnVuY3Rpb25zCi0gICAgIGRvIG5vdCBpbXBseSBtZW1vcnkgYmFycmllcnMuCisgICAgIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHJldHVybiBhIHZhbHVlLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCBmb3IgcmVmZXJlbmNlCisgICAgIGNvdW50aW5nLiAgVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBpbXBseSBtZW1vcnkgYmFycmllcnMuCiAKICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgYSBwaWVjZSBvZiBjb2RlIHRoYXQgbWFya3MgYW4gb2JqZWN0IGFzIGJlaW5nIGRlYWQKICAgICAgYW5kIHRoZW4gZGVjcmVtZW50cyB0aGUgb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50OgpAQCAtMTI2MywxNSArMTI3NywxNyBAQAogQVRPTUlDIE9QRVJBVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLVRob3VnaCB0aGV5IGFyZSB0ZWNobmljYWxseSBpbnRlcnByb2Nlc3NvciBpbnRlcmFjdGlvbiBjb25zaWRlcmF0aW9ucywgYXRvbWljCi1vcGVyYXRpb25zIGFyZSBub3RlZCBzcGVjaWFsbHkgYXMgdGhleSBkbyBfbm90XyBnZW5lcmFsbHkgaW1wbHkgbWVtb3J5Ci1iYXJyaWVycy4gIFRoZSBwb3NzaWJsZSBvZmZlbmRlcnMgaW5jbHVkZToKK1doaWxzdCB0aGV5IGFyZSB0ZWNobmljYWxseSBpbnRlcnByb2Nlc3NvciBpbnRlcmFjdGlvbiBjb25zaWRlcmF0aW9ucywgYXRvbWljCitvcGVyYXRpb25zIGFyZSBub3RlZCBzcGVjaWFsbHkgYXMgc29tZSBvZiB0aGVtIGltcGx5IGZ1bGwgbWVtb3J5IGJhcnJpZXJzIGFuZAorc29tZSBkb24ndCwgYnV0IHRoZXkncmUgdmVyeSBoZWF2aWx5IHJlbGllZCBvbiBhcyBhIGdyb3VwIHRocm91Z2hvdXQgdGhlCitrZXJuZWwuCisKK0FueSBhdG9taWMgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgc29tZSBzdGF0ZSBpbiBtZW1vcnkgYW5kIHJldHVybnMgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBzdGF0ZSAob2xkIG9yIG5ldykgaW1wbGllcyBhbiBTTVAtY29uZGl0aW9uYWwgZ2VuZXJhbCBtZW1vcnkgYmFycmllcgorKHNtcF9tYigpKSBvbiBlYWNoIHNpZGUgb2YgdGhlIGFjdHVhbCBvcGVyYXRpb24uICBUaGVzZSBpbmNsdWRlOgogCiAJeGNoZygpOwogCWNtcHhjaGcoKTsKLQl0ZXN0X2FuZF9zZXRfYml0KCk7Ci0JdGVzdF9hbmRfY2xlYXJfYml0KCk7Ci0JdGVzdF9hbmRfY2hhbmdlX2JpdCgpOwogCWF0b21pY19jbXB4Y2hnKCk7CiAJYXRvbWljX2luY19yZXR1cm4oKTsKIAlhdG9taWNfZGVjX3JldHVybigpOwpAQCAtMTI4MiwyMSArMTI5OCwzMSBAQAogCWF0b21pY19zdWJfYW5kX3Rlc3QoKTsKIAlhdG9taWNfYWRkX25lZ2F0aXZlKCk7CiAJYXRvbWljX2FkZF91bmxlc3MoKTsKKwl0ZXN0X2FuZF9zZXRfYml0KCk7CisJdGVzdF9hbmRfY2xlYXJfYml0KCk7CisJdGVzdF9hbmRfY2hhbmdlX2JpdCgpOwogCi1UaGVzZSBtYXkgYmUgdXNlZCBmb3Igc3VjaCB0aGluZ3MgYXMgaW1wbGVtZW50aW5nIExPQ0sgb3BlcmF0aW9ucyBvciBjb250cm9sbGluZwotdGhlIGxpZmV0aW1lIG9mIG9iamVjdHMgYnkgZGVjcmVhc2luZyB0aGVpciByZWZlcmVuY2UgY291bnRzLiAgSW4gc3VjaCBjYXNlcwotdGhleSBuZWVkIHByZWNlZGluZyBtZW1vcnkgYmFycmllcnMuCitUaGVzZSBhcmUgdXNlZCBmb3Igc3VjaCB0aGluZ3MgYXMgaW1wbGVtZW50aW5nIExPQ0stY2xhc3MgYW5kIFVOTE9DSy1jbGFzcworb3BlcmF0aW9ucyBhbmQgYWRqdXN0aW5nIHJlZmVyZW5jZSBjb3VudGVycyB0b3dhcmRzIG9iamVjdCBkZXN0cnVjdGlvbiwgYW5kIGFzCitzdWNoIHRoZSBpbXBsaWNpdCBtZW1vcnkgYmFycmllciBlZmZlY3RzIGFyZSBuZWNlc3NhcnkuCiAKLVRoZSBmb2xsb3dpbmcgbWF5IGFsc28gYmUgcG9zc2libGUgb2ZmZW5kZXJzIGFzIHRoZXkgbWF5IGJlIHVzZWQgYXMgVU5MT0NLCi1vcGVyYXRpb25zLgogCitUaGUgZm9sbG93aW5nIG9wZXJhdGlvbiBhcmUgcG90ZW50aWFsIHByb2JsZW1zIGFzIHRoZXkgZG8gX25vdF8gaW1wbHkgbWVtb3J5CitiYXJyaWVycywgYnV0IG1pZ2h0IGJlIHVzZWQgZm9yIGltcGxlbWVudGluZyBzdWNoIHRoaW5ncyBhcyBVTkxPQ0stY2xhc3MKK29wZXJhdGlvbnM6CisKKwlhdG9taWNfc2V0KCk7CiAJc2V0X2JpdCgpOwogCWNsZWFyX2JpdCgpOwogCWNoYW5nZV9iaXQoKTsKLQlhdG9taWNfc2V0KCk7CisKK1dpdGggdGhlc2UgdGhlIGFwcHJvcHJpYXRlIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVyIHNob3VsZCBiZSB1c2VkIGlmIG5lY2Vzc2FyeQorKHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGZvciBpbnN0YW5jZSkuCiAKIAotVGhlIGZvbGxvd2luZyBhcmUgYSBsaXR0bGUgdHJpY2t5OgorVGhlIGZvbGxvd2luZyBhbHNvIGRvIF9ub3RfIGltcGx5IG1lbW9yeSBiYXJyaWVycywgYW5kIHNvIG1heSByZXF1aXJlIGV4cGxpY2l0CittZW1vcnkgYmFycmllcnMgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzIChzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgZm9yCitpbnN0YW5jZSkpOgogCiAJYXRvbWljX2FkZCgpOwogCWF0b21pY19zdWIoKTsKQEAgLTEzMTcsMTAgKzEzNDMsMTIgQEAKIAogCiBCYXNpY2FsbHksIGVhY2ggdXNhZ2UgY2FzZSBoYXMgdG8gYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgYXMgdG8gd2hldGhlciBtZW1vcnkKLWJhcnJpZXJzIGFyZSBuZWVkZWQgb3Igbm90LiAgVGhlIHNpbXBsZXN0IHJ1bGUgaXMgcHJvYmFibHk6IGlmIHRoZSBhdG9taWMKLW9wZXJhdGlvbiBpcyBwcm90ZWN0ZWQgYnkgYSBsb2NrLCB0aGVuIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBiYXJyaWVyIHVubGVzcwotdGhlcmUncyBhbm90aGVyIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gd2l0aCByZXNwZWN0IHRvIHdoaWNoIGFuCi1vcmRlcmluZyBtdXN0IGJlIG1haW50YWluZWQuCitiYXJyaWVycyBhcmUgbmVlZGVkIG9yIG5vdC4KKworWyFdIE5vdGUgdGhhdCBzcGVjaWFsIG1lbW9yeSBiYXJyaWVyIHByaW1pdGl2ZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlc2UKK3NpdHVhdGlvbnMgYmVjYXVzZSBvbiBzb21lIENQVXMgdGhlIGF0b21pYyBpbnN0cnVjdGlvbnMgdXNlZCBpbXBseSBmdWxsIG1lbW9yeQorYmFycmllcnMsIGFuZCBzbyBiYXJyaWVyIGluc3RydWN0aW9ucyBhcmUgc3VwZXJmbHVvdXMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVtLAorYW5kIGluIHN1Y2ggY2FzZXMgdGhlIHNwZWNpYWwgYmFycmllciBwcmltaXRpdmVzIHdpbGwgYmUgbm8tb3BzLgogCiBTZWUgRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dCBiL0RvY3VtZW50YXRpb24vbXRyci50eHQKaW5kZXggYjc4YWYxYy4uYzM5YWMzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL210cnIudHh0CkBAIC0xMzgsMTkgKzEzOCwyOSBAQAogCiAqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jZGVmaW5lIE1UUlJfTkVFRF9TVFJJTkdTCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KIAogI2RlZmluZSBUUlVFIDEKICNkZWZpbmUgRkFMU0UgMAogI2RlZmluZSBFUlJTVFJJTkcgc3RyZXJyb3IgKGVycm5vKQogCitzdGF0aWMgY2hhciAqbXRycl9zdHJpbmdzW01UUlJfTlVNX1RZUEVTXSA9Cit7CisgICAgInVuY2FjaGFibGUiLCAgICAgICAgICAgICAgIC8qIDAgKi8KKyAgICAid3JpdGUtY29tYmluaW5nIiwgICAgICAgICAgLyogMSAqLworICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KKyAgICAid3JpdGUtdGhyb3VnaCIsICAgICAgICAgICAgLyogNCAqLworICAgICJ3cml0ZS1wcm90ZWN0IiwgICAgICAgICAgICAvKiA1ICovCisgICAgIndyaXRlLWJhY2siLCAgICAgICAgICAgICAgIC8qIDYgKi8KK307CiAKIGludCBtYWluICgpCiB7CkBAIC0yMzIsMTMgKzI0MiwyMiBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLSNkZWZpbmUgTVRSUl9ORUVEX1NUUklOR1MKICNpbmNsdWRlIDxhc20vbXRyci5oPgogCiAjZGVmaW5lIFRSVUUgMQogI2RlZmluZSBGQUxTRSAwCiAjZGVmaW5lIEVSUlNUUklORyBzdHJlcnJvciAoZXJybm8pCiAKK3N0YXRpYyBjaGFyICptdHJyX3N0cmluZ3NbTVRSUl9OVU1fVFlQRVNdID0KK3sKKyAgICAidW5jYWNoYWJsZSIsICAgICAgICAgICAgICAgLyogMCAqLworICAgICJ3cml0ZS1jb21iaW5pbmciLCAgICAgICAgICAvKiAxICovCisgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgKi8KKyAgICAiPyIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMyAqLworICAgICJ3cml0ZS10aHJvdWdoIiwgICAgICAgICAgICAvKiA0ICovCisgICAgIndyaXRlLXByb3RlY3QiLCAgICAgICAgICAgIC8qIDUgKi8KKyAgICAid3JpdGUtYmFjayIsICAgICAgICAgICAgICAgLyogNiAqLworfTsKIAogaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dAppbmRleCAzMzFhZmQ3Li5jZTc2N2I5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0CkBAIC0xOSw5ICsxOSw5IEBACiAJWzItMS0xXSBPdmVydmlldwogCVsyLTEtMl0gRmxvdyBvZiBzY21kcyB0aHJvdWdoIEVICiAJWzItMS0zXSBGbG93IG9mIGNvbnRyb2wKLSAgICBbMi0yXSBFSCB0aHJvdWdoIGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkKLQlbMi0yLTFdIFByZSBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucwotCVsyLTItMl0gUG9zdCBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucworICAgIFsyLTJdIEVIIHRocm91Z2ggdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCisJWzItMi0xXSBQcmUgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucworCVsyLTItMl0gUG9zdCB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCiAJWzItMi0zXSBUaGluZ3MgdG8gY29uc2lkZXIKIAogCkBAIC00MTMsOSArNDEzLDkgQEAKIAkgICAgbGF5ZXIgb2YgZmFpbHVyZSBvZiB0aGUgc2NtZHMuCiAKIAotWzItMl0gRUggdGhyb3VnaCBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCitbMi0yXSBFSCB0aHJvdWdoIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQogCi0gaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBpcyBpbnZva2VkIGluIHRoZSBwbGFjZSBvZgorIHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBpcyBpbnZva2VkIGluIHRoZSBwbGFjZSBvZgogc2NzaV91bmphbV9ob3N0KCkgYW5kIGl0IGlzIHJlc3BvbnNpYmxlIGZvciB3aG9sZSByZWNvdmVyeSBwcm9jZXNzLgogT24gY29tcGxldGlvbiwgdGhlIGhhbmRsZXIgc2hvdWxkIGhhdmUgbWFkZSBsb3dlciBsYXllcnMgZm9yZ2V0IGFib3V0CiBhbGwgZmFpbGVkIHNjbWRzIGFuZCBlaXRoZXIgcmVhZHkgZm9yIG5ldyBjb21tYW5kcyBvciBvZmZsaW5lLiAgQWxzbywKQEAgLTQyNCw3ICs0MjQsNyBAQAogZXhjZXB0IGZvciAjMSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVoX3N0cmF0ZWd5X2hhbmRsZXIoKS4KIAogCi1bMi0yLTFdIFByZSBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucworWzItMi0xXSBQcmUgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucwogCiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlIG9uIGVudHJ5IHRvIHRoZSBoYW5kbGVyLgogCkBAIC00MzcsNyArNDM3LDcgQEAKICAtIHNob3N0LT5ob3N0X2ZhaWxlZCA9PSBzaG9zdC0+aG9zdF9idXN5CiAKIAotWzItMi0yXSBQb3N0IGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCitbMi0yLTJdIFBvc3QgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIFNDU0kgbWlkbGF5ZXIgY29uZGl0aW9ucwogCiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYmUgdHJ1ZSBvbiBleGl0IGZyb20gdGhlIGhhbmRsZXIuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dAppbmRleCA4YmJhZTNlLi43NWE1MzVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CkBAIC04MDQsNyArODA0LDYgQEAKICAgIGVoX2J1c19yZXNldF9oYW5kbGVyIC0gaXNzdWUgU0NTSSBidXMgcmVzZXQKICAgIGVoX2RldmljZV9yZXNldF9oYW5kbGVyIC0gaXNzdWUgU0NTSSBkZXZpY2UgcmVzZXQKICAgIGVoX2hvc3RfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGhvc3QgKGhvc3QgYnVzIGFkYXB0ZXIpCi0gICBlaF9zdHJhdGVneV9oYW5kbGVyIC0gZHJpdmVyIHN1cHBsaWVkIGFsdGVybmF0ZSB0byBzY3NpX3VuamFtX2hvc3QoKQogICAgaW5mbyAtIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dCBnaXZlbiBob3N0CiAgICBpb2N0bCAtIGRyaXZlciBjYW4gcmVzcG9uZCB0byBpb2N0bHMKICAgIHByb2NfaW5mbyAtIHN1cHBvcnRzIC9wcm9jL3Njc2kve2RyaXZlcl9uYW1lfS97aG9zdF9ub30KQEAgLTk3MCwyNCArOTY5LDYgQEAKIAogCiAvKioKLSAqICAgICAgZWhfc3RyYXRlZ3lfaGFuZGxlciAtIGRyaXZlciBzdXBwbGllZCBhbHRlcm5hdGUgdG8gc2NzaV91bmphbV9ob3N0KCkKLSAqICAgICAgQHNocDogaG9zdCBvbiB3aGljaCBlcnJvciBoYXMgb2NjdXJyZWQKLSAqCi0gKiAgICAgIFJldHVybnMgVFJVRSBpZiBob3N0IHVuamFtbWVkLCBlbHNlIEZBTFNFLgotICoKLSAqICAgICAgTG9ja3M6IG5vbmUKLSAqCi0gKiAgICAgIENhbGxpbmcgY29udGV4dDoga2VybmVsIHRocmVhZAotICoKLSAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX2VoIHRocmVhZC4gTExEIHN1cHBsaWVkIGFsdGVybmF0ZSB0byAKLSAqICAgICAgc2NzaV91bmphbV9ob3N0KCkgZm91bmQgaW4gc2NzaV9lcnJvci5jCi0gKgotICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAotICoqLwotICAgICBpbnQgZWhfc3RyYXRlZ3lfaGFuZGxlcihzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hwKQotCi0KLS8qKgogICogICAgICBpbmZvIC0gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGhvc3Q6IGRyaXZlciBuYW1lIHBsdXMgZGF0YQogICogICAgICAgICAgICAgdG8gZGlzdGluZ3Vpc2ggZ2l2ZW4gaG9zdAogICogICAgICBAc2hwOiBob3N0IHRvIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCmluZGV4IDZmZWVmOWUuLjY4ZWVlYmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKQEAgLTExMjMsOCArMTEyMyw4IEBACiAgICAgICAgICAgaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgIC8qIGNoZWNrIFBDSSBhdmFpbGFiaWxpdHkgKDI4Yml0IERNQSkgKi8KLSAgICAgICAgICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAotICAgICAgICAgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDApIHsKKyAgICAgICAgICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKyAgICAgICAgICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgewogICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOwogICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOwpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKICAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgUENJIHJlc291cmNlcyBpcyBkb25lIGluIHRoZQogICAgICAgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgYW5kIHVzdWFsbHkgYW4gZXh0cmEKICAgICAgIDxmdW5jdGlvbj54eHhfY3JlYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyB3cml0dGVuIGZvciB0aGlzCi0gICAgICBwdXJwb3NlLiAKKyAgICAgIHB1cnBvc2UuCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtMTIyNSw3ICsxMjI1LDcgQEAKICAgICAgIGFsbG9jYXRpbmcgcmVzb3VyY2VzLiBBbHNvLCB5b3UgbmVlZCB0byBzZXQgdGhlIHByb3BlciBQQ0kgRE1BCiAgICAgICBtYXNrIHRvIGxpbWl0IHRoZSBhY2Nlc3NlZCBpL28gcmFuZ2UuIEluIHNvbWUgY2FzZXMsIHlvdSBtaWdodAogICAgICAgbmVlZCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfc2V0X21hc3RlcigpPC9mdW5jdGlvbj4gZnVuY3Rpb24sCi0gICAgICB0b28uIAorICAgICAgdG9vLgogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KQEAgLTEyMzYsOCArMTIzNiw4IEBACiA8IVtDREFUQVsKICAgaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDAgfHwKLSAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCkgeworICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKyAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDApIHsKICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7CiAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKQEAgLTEyNTYsMTMgKzEyNTYsMTMgQEAKICAgICAgIGZ1bmN0aW9ucy4gVW5saWtlIEFMU0EgdmVyLjAuNS54LiwgdGhlcmUgYXJlIG5vIGhlbHBlcnMgZm9yCiAgICAgICB0aGF0LiBBbmQgdGhlc2UgcmVzb3VyY2VzIG11c3QgYmUgcmVsZWFzZWQgaW4gdGhlIGRlc3RydWN0b3IKICAgICAgIGZ1bmN0aW9uIChzZWUgYmVsb3cpLiBBbHNvLCBvbiBBTFNBIDAuOS54LCB5b3UgZG9uJ3QgbmVlZCB0bwotICAgICAgYWxsb2NhdGUgKHBzZXVkby0pRE1BIGZvciBQQ0kgbGlrZSBBTFNBIDAuNS54LiAKKyAgICAgIGFsbG9jYXRlIChwc2V1ZG8tKURNQSBmb3IgUENJIGxpa2UgQUxTQSAwLjUueC4KICAgICAgIDwvcGFyYT4KIAogICAgICAgPHBhcmE+CiAgICAgICAgIE5vdyBhc3N1bWUgdGhhdCB0aGlzIFBDSSBkZXZpY2UgaGFzIGFuIEkvTyBwb3J0IHdpdGggOCBieXRlcwogICAgICAgICBhbmQgYW4gaW50ZXJydXB0LiBUaGVuIHN0cnVjdCA8c3RydWN0bmFtZT5teWNoaXA8L3N0cnVjdG5hbWU+IHdpbGwgaGF2ZSB0aGUKLSAgICAgICAgZm9sbG93aW5nIGZpZWxkczogCisgICAgICAgIGZvbGxvd2luZyBmaWVsZHM6CiAKICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CmluZGV4IDFhZDlhZjEuLjI4MDNmNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CkBAIC0yNyw3ICsyNyw3IEBACiB0aGUgY29uZmlndXJlZCBodWdlcGFnZSBzaXplIC0gdGhpcyBpcyBuZWVkZWQgZm9yIGdlbmVyYXRpbmcgdGhlIHByb3BlcgogYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlIGFib3ZlIHN5c3RlbSBjYWxscy4KIAotVGhlIG91dHB1dCBvZiAiY2F0IC9wcm9jL21lbWluZm8iIHdpbGwgaGF2ZSBvdXRwdXQgbGlrZToKK1RoZSBvdXRwdXQgb2YgImNhdCAvcHJvYy9tZW1pbmZvIiB3aWxsIGhhdmUgbGluZXMgbGlrZToKIAogLi4uLi4KIEh1Z2VQYWdlc19Ub3RhbDogeHh4CkBAIC00MiwxMSArNDIsMTEgQEAKIHByZS1jb25maWd1cmVkKSBodWdlcGFnZXMuCiBUaGUgYWxsb2NhdGlvbiAob3IgZGVhbGxvY2F0aW9uKSBvZiBodWdldGxiIHBhZ2VzIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgYXJlCiBlbm91Z2ggcGh5c2ljYWxseSBjb250aWd1b3VzIGZyZWUgcGFnZXMgaW4gc3lzdGVtIChmcmVlaW5nIG9mIGh1Z2VwYWdlcyBpcwotcG9zc2libGUgb25seSBpZiB0aGVyZSBhcmUgZW5vdWdoIGh1Z2V0bGIgcGFnZXMgZnJlZSB0aGF0IGNhbiBiZSB0cmFuc2ZlcmVkCitwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZSBlbm91Z2ggaHVnZXRsYiBwYWdlcyBmcmVlIHRoYXQgY2FuIGJlIHRyYW5zZmVycmVkCiBiYWNrIHRvIHJlZ3VsYXIgbWVtb3J5IHBvb2wpLgogCi1QYWdlcyB0aGF0IGFyZSB1c2VkIGFzIGh1Z2V0bGIgcGFnZXMgYXJlIHJlc2VydmVkIGluc2lkZSB0aGUga2VybmVsIGFuZCBjYW4KLW5vdCBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KK1BhZ2VzIHRoYXQgYXJlIHVzZWQgYXMgaHVnZXRsYiBwYWdlcyBhcmUgcmVzZXJ2ZWQgaW5zaWRlIHRoZSBrZXJuZWwgYW5kIGNhbm5vdAorYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCiAKIE9uY2UgdGhlIGtlcm5lbCB3aXRoIEh1Z2V0bGIgcGFnZSBzdXBwb3J0IGlzIGJ1aWx0IGFuZCBydW5uaW5nLCBhIHVzZXIgY2FuCiB1c2UgZWl0aGVyIHRoZSBtbWFwIHN5c3RlbSBjYWxsIG9yIHNoYXJlZCBtZW1vcnkgc3lzdGVtIGNhbGxzIHRvIHN0YXJ0IHVzaW5nCkBAIC02MCw3ICs2MCw3IEBACiBUaGlzIGNvbW1hbmQgd2lsbCB0cnkgdG8gY29uZmlndXJlIDIwIGh1Z2VwYWdlcyBpbiB0aGUgc3lzdGVtLiAgVGhlIHN1Y2Nlc3MKIG9yIGZhaWx1cmUgb2YgYWxsb2NhdGlvbiBkZXBlbmRzIG9uIHRoZSBhbW91bnQgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzCiBtZW1vcnkgdGhhdCBpcyBwcmVzZXQgaW4gc3lzdGVtIGF0IHRoaXMgdGltZS4gIFN5c3RlbSBhZG1pbmlzdHJhdG9ycyBtYXkgd2FudAotdG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjIGluaXQgZmlsZS4gIFRoaXMgd2lsbCBlbmFibGUgdGhlCit0byBwdXQgdGhpcyBjb21tYW5kIGluIG9uZSBvZiB0aGUgbG9jYWwgcmMgaW5pdCBmaWxlcy4gIFRoaXMgd2lsbCBlbmFibGUgdGhlCiBrZXJuZWwgdG8gcmVxdWVzdCBodWdlIHBhZ2VzIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MgKHdoZW4gdGhlIHBvc3NpYmlsaXR5CiBvZiBnZXR0aW5nIHBoeXNpY2FsIGNvbnRpZ3VvdXMgcGFnZXMgaXMgc3RpbGwgdmVyeSBoaWdoKS4KIApAQCAtNzgsOCArNzgsOCBAQAogbW9kZSBvZiByb290IG9mIGZpbGUgc3lzdGVtIHRvIHZhbHVlICYgMDc3Ny4gIFRoaXMgdmFsdWUgaXMgZ2l2ZW4gaW4gb2N0YWwuCiBCeSBkZWZhdWx0IHRoZSB2YWx1ZSAwNzU1IGlzIHBpY2tlZC4gVGhlIHNpemUgb3B0aW9uIHNldHMgdGhlIG1heGltdW0gdmFsdWUgb2YKIG1lbW9yeSAoaHVnZSBwYWdlcykgYWxsb3dlZCBmb3IgdGhhdCBmaWxlc3lzdGVtICgvbW50L2h1Z2UpLiBUaGUgc2l6ZSBpcwotcm91bmRlZCBkb3duIHRvIEhQQUdFX1NJWkUuICBUaGUgb3B0aW9uIG5yX2lub2RlIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mCi1pbm9kZXMgdGhhdCAvbW50L2h1Z2UgY2FuIHVzZS4gIElmIHRoZSBzaXplIG9yIG5yX2lub2RlIG9wdGlvbnMgYXJlIG5vdAorcm91bmRlZCBkb3duIHRvIEhQQUdFX1NJWkUuICBUaGUgb3B0aW9uIG5yX2lub2RlcyBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZgoraW5vZGVzIHRoYXQgL21udC9odWdlIGNhbiB1c2UuICBJZiB0aGUgc2l6ZSBvciBucl9pbm9kZXMgb3B0aW9ucyBhcmUgbm90CiBwcm92aWRlZCBvbiBjb21tYW5kIGxpbmUgdGhlbiBubyBsaW1pdHMgYXJlIHNldC4gIEZvciBzaXplIGFuZCBucl9pbm9kZXMKIG9wdGlvbnMsIHlvdSBjYW4gdXNlIFtHfGddL1tNfG1dL1tLfGtdIHRvIHJlcHJlc2VudCBnaWdhL21lZ2Eva2lsby4gRm9yCiBleGFtcGxlLCBzaXplPTJLIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIHNpemU9MjA0OC4gQW4gZXhhbXBsZSBpcyBnaXZlbiBhdApAQCAtODgsNyArODgsNyBAQAogcmVhZCBhbmQgd3JpdGUgc3lzdGVtIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZpbGVzIHRoYXQgcmVzaWRlIG9uIGh1Z2V0bGIKIGZpbGUgc3lzdGVtcy4KIAotQSByZWd1bGFyIGNob3duLCBjaGdycCBhbmQgY2htb2QgY29tbWFuZHMgKHdpdGggcmlnaHQgcGVybWlzc2lvbnMpIGNvdWxkIGJlCitSZWd1bGFyIGNob3duLCBjaGdycCwgYW5kIGNobW9kIGNvbW1hbmRzICh3aXRoIHJpZ2h0IHBlcm1pc3Npb25zKSBjb3VsZCBiZQogdXNlZCB0byBjaGFuZ2UgdGhlIGZpbGUgYXR0cmlidXRlcyBvbiBodWdldGxiZnMuCiAKIEFsc28sIGl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgbm8gc3VjaCBtb3VudCBjb21tYW5kIGlzIHJlcXVpcmVkIGlmIHRoZQpAQCAtOTYsOCArOTYsOCBAQAogd2lzaCB0byB1c2UgaHVnZXRsYiBwYWdlIHZpYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgc2hvdWxkIGJlIGEgbWVtYmVyIG9mCiBhIHN1cHBsZW1lbnRhcnkgZ3JvdXAgYW5kIHN5c3RlbSBhZG1pbiBuZWVkcyB0byBjb25maWd1cmUgdGhhdCBnaWQgaW50bwogL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwLiAgSXQgaXMgcG9zc2libGUgZm9yIHNhbWUgb3IgZGlmZmVyZW50Ci1hcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKiBjYWxscy4gIFRob3VnaCB0aGUKLW1vdW50IG9mIGZpbGVzeXN0ZW0gd2lsbCBiZSByZXF1aXJlZCBmb3IgdXNpbmcgbW1hcHMuCithcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKiBjYWxscywgdGhvdWdoIHRoZQorbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwIGNhbGxzLgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CmluZGV4IDE5MjEzNTMuLmYyY2Q2ZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMTUxLDYgKzE1MSwxMSBAQAogCiAgIG51bWE9ZmFrZT1YICAgRmFrZSBYIG5vZGVzIGFuZCBpZ25vcmUgTlVNQSBzZXR1cCBvZiB0aGUgYWN0dWFsIG1hY2hpbmUuCiAKKyAgbnVtYT1ob3RhZGQ9cGVyY2VudAorCQlPbmx5IGFsbG93IGhvdGFkZCBtZW1vcnkgdG8gcHJlYWxsb2NhdGUgcGFnZSBzdHJ1Y3R1cmVzIHVwdG8KKwkJcGVyY2VudCBvZiBhbHJlYWR5IGF2YWlsYWJsZSBtZW1vcnkuCisJCW51bWE9aG90YWRkPTAgd2lsbCBkaXNhYmxlIGhvdGFkZCBtZW1vcnkuCisKIEFDUEkKIAogICBhY3BpPW9mZglEb24ndCBlbmFibGUgQUNQSQpkaWZmIC0tZ2l0IGEvS2J1aWxkIGIvS2J1aWxkCmluZGV4IDk1ZDZhMDAuLjJkNGY5NWUgMTAwNjQ0Ci0tLSBhL0tidWlsZAorKysgYi9LYnVpbGQKQEAgLTE4LDcgKzE4LDcgQEAKIAkiL14tPi97czpeLT5cKFteIF0qXCkgW1wkJCNdKlwoW14gXSpcKSBcKC4qXCk6I2RlZmluZSBcMSBcMiAvKiBcMyAqLzo7IHM6LT46OjsgcDt9IgogZW5kZWYKICMgT3ZlcnJpZGUgZGVmYXVsdCByZWdleHAgZm9yIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMKLXNlZC0kKENPTkZJR19NSVBTKSA6PSAiL15AQEAvcy8vL3AiCitzZWQtJChDT05GSUdfTUlQUykgOj0gIi9eQEBAL3tzL15AQEAvLzsgcy8gXCMuKlwkJC8vOyBwO30iCiAKIHF1aWV0X2NtZF9vZmZzZXRzID0gR0VOICAgICAkQAogZGVmaW5lIGNtZF9vZmZzZXRzCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGY5NzY1N2IuLmQwMGRlYTUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNTU2LDkgKzE1NTYsNyBAQAogCiBLRVhFQwogUDoJRXJpYyBCaWVkZXJtYW4KLVA6CVJhbmR5IER1bmxhcAogTToJZWJpZWRlcm1AeG1pc3Npb24uY29tCi1NOglyZHVubGFwQHhlbm90aW1lLm5ldAogVzoJaHR0cDovL3d3dy54bWlzc2lvbi5jb20vfmViaWVkZXJtL2ZpbGVzL2tleGVjLwogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogTDoJZmFzdGJvb3RAb3NkbC5vcmcKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYjQwMTk0Mi4uZmM4ZTA4YyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTExMTIsNyArMTExMiw2IEBACiBpbnN0YWxsLWRpciA6PSAkKGlmICQoSU5TVEFMTF9NT0RfRElSKSwkKElOU1RBTExfTU9EX0RJUiksZXh0cmEpCiBQSE9OWSArPSBfZW1vZGluc3RfCiBfZW1vZGluc3RfOgotCSQoUSlybSAtcmYgJChNT0RMSUIpLyQoaW5zdGFsbC1kaXIpCiAJJChRKW1rZGlyIC1wICQoTU9ETElCKS8kKGluc3RhbGwtZGlyKQogCSQoUSkkKE1BS0UpIC1yUiAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUubW9kaW5zdAogCkBAIC0xMjc1LDQwICsxMjc0LDQzIEBACiAKICMgU2luZ2xlIHRhcmdldHMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoZSBkaXJlY3RvcnkgcGFydCBpcyB0YWtlbiBmcm9tIGZpcnN0IHByZXJlcXVpc2l0ZSwgc28gdGhpcwotIyB3b3JrcyBldmVuIHdpdGggZXh0ZXJuYWwgbW9kdWxlcwotJS5zOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5pOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5vOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5sc3Q6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCi0lLnM6ICUuUyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCi0lLm86ICUuUyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCisjIFNpbmdsZSB0YXJnZXRzIGFyZSBjb21wYXRpYmxlIHdpdGg6CisjIC0gYnVpbGQgd2hpdGggbWl4ZWQgc291cmNlIGFuZCBvdXRwdXQKKyMgLSBidWlsZCB3aXRoIHNlcGFyYXRlIG91dHB1dCBkaXIgJ21ha2UgTz0uLi4nCisjIC0gZXh0ZXJuYWwgbW9kdWxlcworIworIyAgdGFyZ2V0LWRpciA9PiB3aGVyZSB0byBzdG9yZSBvdXRwdXRmaWxlCisjICBidWlsZC1kaXIgID0+IGRpcmVjdG9yeSBpbiBrZXJuZWwgc291cmNlIHRyZWUgdG8gdXNlCiAKLSMgRm9yIGV4dGVybmFsIG1vZHVsZXMgd2Ugc2hhbGwgaW5jbHVkZSBhbnkgZGlyZWN0b3J5IG9mIHRoZSB0YXJnZXQsCi0jIGJ1dCB1c3VhbCBjYXNlIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBwYXJ0LgotIyBtYWtlIE09YHB3ZGAgbW9kdWxlLm8gICAgID0+ICQoZGlyICRAKT0uLwotIyBtYWtlIE09YHB3ZGAgZm9vL21vZHVsZS5vID0+ICQoZGlyICRAKT1mb28vCi0jIG1ha2UgTT1gcHdkYCAvICAgICAgICAgICAgPT4gJChkaXIgJEApPS8KLSAKIGlmZXEgKCQoS0JVSUxEX0VYVE1PRCksKQotICAgICAgICB0YXJnZXQtZGlyID0gJChARCkKKyAgICAgICAgYnVpbGQtZGlyICA9ICQocGF0c3Vic3QgJS8sJSwkKGRpciAkQCkpCisgICAgICAgIHRhcmdldC1kaXIgPSAkKGRpciAkQCkKIGVsc2UKICAgICAgICAgemFwLXNsYXNoPSQoZmlsdGVyLW91dCAuLCQocGF0c3Vic3QgJS8sJSwkKGRpciAkQCkpKQotICAgICAgICB0YXJnZXQtZGlyID0gJChLQlVJTERfRVhUTU9EKSQoaWYgJCh6YXAtc2xhc2gpLC8kKHphcC1zbGFzaCkpCisgICAgICAgIGJ1aWxkLWRpciAgPSAkKEtCVUlMRF9FWFRNT0QpJChpZiAkKHphcC1zbGFzaCksLyQoemFwLXNsYXNoKSkKKyAgICAgICAgdGFyZ2V0LWRpciA9ICQoaWYgJChLQlVJTERfRVhUTU9EKSwkKGRpciAkPCksJChkaXIgJEApKQogZW5kaWYKIAotLyAlLzogICAgICBzY3JpcHRzIHByZXBhcmUgRk9SQ0UKKyUuczogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCislLmk6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorJS5vOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKyUubHN0OiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKyUuczogJS5TIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCislLm86ICUuUyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorCisjIE1vZHVsZXMKKy8gJS86IHByZXBhcmUgc2NyaXB0cyBGT1JDRQogCSQoUSkkKE1BS0UpIEtCVUlMRF9NT0RVTEVTPSQoaWYgJChDT05GSUdfTU9EVUxFUyksMSkgXAotCSQoYnVpbGQpPSQodGFyZ2V0LWRpcikKLSUua286IHNjcmlwdHMgRk9SQ0UKKwkkKGJ1aWxkKT0kKGJ1aWxkLWRpcikKKyUua286IHByZXBhcmUgc2NyaXB0cyBGT1JDRQogCSQoUSkkKE1BS0UpIEtCVUlMRF9NT0RVTEVTPSQoaWYgJChDT05GSUdfTU9EVUxFUyksMSkgICBcCi0JJChidWlsZCk9JCh0YXJnZXQtZGlyKSAkKEA6LmtvPS5vKQorCSQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKEA6LmtvPS5vKQogCSQoUSkkKE1BS0UpIC1yUiAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAogCiAjIEZJWE1FIFNob3VsZCBnbyBpbnRvIGEgbWFrZS5saWIgb3Igc29tZXRoaW5nIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDliZWY2MWIuLjgyOTBiNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTU0OSw2ICs1NDksMTEgQEAKIAkgIEFjY2VzcykuICBUaGlzIG9wdGlvbiBpcyBmb3IgY29uZmlndXJpbmcgaGlnaC1lbmQgbXVsdGlwcm9jZXNzb3IKIAkgIHNlcnZlciBtYWNoaW5lcy4gIElmIGluIGRvdWJ0LCBzYXkgTi4KIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNyIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogIyBMQVJHRV9WTUFMTE9DIGlzIHJhY3ksIGlmIHlvdSAqcmVhbGx5KiBuZWVkIGl0IHRoZW4gZml4IGl0IGZpcnN0CiBjb25maWcgQUxQSEFfTEFSR0VfVk1BTExPQwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9hbHBoYV9rc3ltcy5jCmluZGV4IDlkNjE4NmQuLmM2NDVjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYwpAQCAtNzYsNyArNzYsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RybmNhdCk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0wobWVtY21wKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCmluZGV4IGExNWUxOGEuLjU1OGI4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBDT05GSUdfQUxQSEFfTENBIGV0YyAqLwogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDcxLDYgKzQ3MiwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdAorcmVnaXN0ZXJfY3B1cyh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdSAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZWdpc3Rlcl9jcHUocCwgaSwgTlVMTCk7CisJfQorCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHJlZ2lzdGVyX2NwdXMpOworCiB2b2lkIF9faW5pdAogc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwppbmRleCAwMmMyZGIwLi4xODUyNTU0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlpZiAoKGNwdS0+ZmxhZ3MgJiAweDFjYykgPT0gMHgxY2MpIHsKIAkJCQlzbXBfbnVtX3Byb2JlZCsrOwogCQkJCS8qIEFzc3VtZSBoZXJlIHRoYXQgIndoYW1pIiA9PSBpbmRleCAqLwotCQkJCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCQkJY3B1X3NldChpLCBjcHVfcHJlc2VudF9tYXNrKTsKIAkJCQljcHUtPnBhbF9yZXZpc2lvbiA9IGJvb3RfY3B1X3BhbHJldjsKIAkJCX0KIApAQCAtNDUwLDkgKzQ1MCw4IEBACiAJCX0KIAl9IGVsc2UgewogCQlzbXBfbnVtX3Byb2JlZCA9IDE7Ci0JCWNwdV9zZXQoYm9vdF9jcHVpZCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCWNwdV9zZXQoYm9vdF9jcHVpZCwgY3B1X3ByZXNlbnRfbWFzayk7CiAJfQotCWNwdV9wcmVzZW50X21hc2sgPSBjcHVtYXNrX29mX2NwdShib290X2NwdWlkKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlNNUDogJWQgQ1BVcyBwcm9iZWQgLS0gY3B1X3ByZXNlbnRfbWFzayA9ICVseFxuIiwKIAkgICAgICAgc21wX251bV9wcm9iZWQsIGNwdV9wb3NzaWJsZV9tYXAuYml0c1swXSk7CkBAIC00ODgsOSArNDg3LDggQEAKIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7CiAJLyoKLQkgKiBNYXJrIHRoZSBib290IGNwdSAoY3VycmVudCBjcHUpIGFzIGJvdGggcHJlc2VudCBhbmQgb25saW5lCisJICogTWFyayB0aGUgYm9vdCBjcHUgKGN1cnJlbnQgY3B1KSBhcyBvbmxpbmUKIAkgKi8gCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9wcmVzZW50X21hc2spOwogCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGRjNWE5MzMuLjFkYmY2ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtNTEyLDYgKzUxMiwxMiBAQAogCSAgb3IgaGF2ZSBodWdlIGhvbGVzIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGZvciBvdGhlciByZWFzb25zLgogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdm0vbnVtYT4gZm9yIG1vcmUuCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjQiIGlmIEFSQ0hfTEg3QTQwWAorCWRlZmF1bHQgIjIiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbiBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgppbmRleCBlZWQ2MTYxLi4xNTNhMDdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgX3N0YXJ0ID0gLjsKICAgICAqKC5zdGFydCkKICAgICAqKC50ZXh0KQorICAgICooLnRleHQuKikKICAgICAqKC5maXh1cCkKICAgICAqKC5nbnUud2FybmluZykKICAgICAqKC5yb2RhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCmluZGV4IGVlMDgzYjMuLmM0OWI1ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCkBAIC0xMDEsNyArMTAxLDYgQEAKIAogCS8qIHN0cmluZyAvIG1lbSBmdW5jdGlvbnMgKi8KIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCA0Mzc1Mjg0Li44Y2ZmNzNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMzIyLDYgKzMyMiwxMiBAQAogCXNwcmludGYoc3lzdGVtX3V0c25hbWUubWFjaGluZSwgIiVzJWMiLCBsaXN0LT5hcmNoX25hbWUsIEVORElBTk5FU1MpOwogCXNwcmludGYoZWxmX3BsYXRmb3JtLCAiJXMlYyIsIGxpc3QtPmVsZl9uYW1lLCBFTkRJQU5ORVNTKTsKIAllbGZfaHdjYXAgPSBsaXN0LT5lbGZfaHdjYXA7CisjaWZuZGVmIENPTkZJR19BUk1fVEhVTUIKKwllbGZfaHdjYXAgJj0gfkhXQ0FQX1RIVU1COworI2VuZGlmCisjaWZuZGVmIENPTkZJR19WRlAKKwllbGZfaHdjYXAgJj0gfkhXQ0FQX1ZGUDsKKyNlbmRpZgogCiAJY3B1X3Byb2NfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwppbmRleCA4NzZjMzhkLi44NDczMjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtMjUsMTAgKzI1LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKLWV4dGVybiB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogI2lmCWRlZmluZWQoQ09ORklHX09NQVAxNjEwX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMTYxT19JUl9NT0RVTEUpCiAKIHN0YXRpYyB1NjQgaXJkYV9kbWFtYXNrID0gMHhmZmZmZmZmZjsKQEAgLTM3LDcgKzMzLDYgQEAKIAkubmFtZSA9ICJvbWFwMTYxMC1pciIsCiAJLmlkID0gLTEsCiAJLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAogCQkuZG1hX21hc2sJPSAmaXJkYV9kbWFtYXNrLAogCX0sCiB9OwpAQCAtODQsOSArNzksNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9ydGNfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJvbWFwX3J0YyIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKLQl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydGNfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBydGNfcmVzb3VyY2VzLAogfTsKQEAgLTEyNCw5ICsxMTYsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RpX2RldmljZSA9IHsKIAkubmFtZQkJPSAic3RpIiwKIAkuaWQJCT0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHN0aV9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHN0aV9yZXNvdXJjZXMsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCBkZWY5ZTUzLi5mYjdmOTFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMjUsMTAgKzI1LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKLWV4dGVybiB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogI2lmIAlkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQogCiAjZGVmaW5lIE9NQVAyX0kyQ19CQVNFMgkJMHg0ODA3MjAwMApAQCAtNDksOSArNDUsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMiA9IHsKICAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKICAgICAgICAgLmlkICAgICAgICAgICAgID0gMiwKLSAgICAgICAgLmRldiA9IHsKLSAgICAgICAgICAgICAgICAucmVsZWFzZSAgICAgICAgPSBvbWFwX25vcF9yZWxlYXNlLAotICAgICAgICB9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzMiksCiAJLnJlc291cmNlCT0gaTJjX3Jlc291cmNlczIsCiB9OwpAQCAtMTAwLDkgKzkzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0aV9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInN0aSIsCiAJLmlkCQk9IC0xLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKLQl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzdGlfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzdGlfcmVzb3VyY2VzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKaW5kZXggYjdmODVlNi4uNmRlNzEzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKQEAgLTM2Nyw2ICszNjcsOCBAQAogCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX1VQTEw7CiAJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfZikKIAkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9GQ0xLOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2gpCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfSENMSzsKIAllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19wKQogCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX1BDTEs7CiAJZWxzZSBpZiAoY2xrID09ICZzM2MyNHh4X2Nsa291dDAgJiYgcGFyZW50ID09ICZzM2MyNHh4X2RjbGswKQpAQCAtMzc2LDYgKzM3OCw4IEBACiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWNsay0+cGFyZW50ID0gcGFyZW50OworCiAJaWYgKGNsayA9PSAmczNjMjR4eF9kY2xrMCkKIAkJbWFzayA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfTUFTSzsKIAllbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKaW5kZXggMzZiODI5MS4uZjM3MmZiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL25hbmQuaD4KIAorI2luY2x1ZGUgImNvbW1vbi1zbWRrLmgiCiAjaW5jbHVkZSAiZGV2cy5oIgogI2luY2x1ZGUgInBtLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUwppbmRleCA1YzQwNTViLi41NGUzYzViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgogCkBAIC00Niw2ICs0NiwxMSBAQAogICovCiAjZGVmaW5lIENBQ0hFX0RMSU1JVAkoQ0FDSEVfRFNJWkUgKiA0KQogCisJLmRhdGEKK2ZsdXNoX2Jhc2U6CisJLmxvbmcJRkxVU0hfQkFTRQorCS50ZXh0CisKIC8qCiAgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCiAgKgpAQCAtNjMsMTEgKzY4LDIxIEBACiAJbW92CWlwLCAjMAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCiBfX2ZsdXNoX3dob2xlX2NhY2hlOgotCW1vdglyMCwgI0ZMVVNIX0JBU0UKLQlhZGQJcjEsIHIwLCAjQ0FDSEVfRFNJWkUKLTE6CWxkcglyMiwgW3IwXSwgIzMyCi0JY21wCXIwLCByMQorCWxkcglyMywgPWZsdXNoX2Jhc2UKKwlsZHIJcjEsIFtyMywgIzBdCisJZW9yCXIxLCByMSwgI0NBQ0hFX0RTSVpFCisJc3RyCXIxLCBbcjMsICMwXQorCWFkZAlyMiwgcjEsICNDQUNIRV9EU0laRQorMToJbGRyCXIzLCBbcjFdLCAjMzIKKwljbXAJcjEsIHIyCiAJYmxvCTFiCisjaWZkZWYgRkxVU0hfQkFTRV9NSU5JQ0FDSEUKKwlhZGQJcjIsIHIyLCAjRkxVU0hfQkFTRV9NSU5JQ0FDSEUgLSBGTFVTSF9CQVNFCisJc3ViCXIxLCByMiwgIzUxMgkJCUAgb25seSA1MTIgYnl0ZXMKKzE6CWxkcglyMywgW3IxXSwgIzMyCisJY21wCXIxLCByMgorCWJsbwkxYgorI2VuZGlmCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCiAJbW92CXBjLCBscgogCkBAIC04Miw2ICs5Nyw3IEBACiAgKgktIGZsYWdzCS0gdm1hX2FyZWFfc3RydWN0IGZsYWdzIGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQogICovCiBFTlRSWSh2NHdiX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAogCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQogCXRzdAlyMiwgI1ZNX0VYRUMJCQlAIGV4ZWN1dGFibGUgcmVnaW9uPwogCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCA4ODI3OTEyLi45ZWExZjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTQ1NSwxNCArNDU2LDE0IEBACiAjaWZkZWYgRkxVU0hfQkFTRQogCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKEZMVVNIX0JBU0VfUEhZUyk7CiAJbWFwLnZpcnR1YWwgPSBGTFVTSF9CQVNFOwotCW1hcC5sZW5ndGggPSBQR0RJUl9TSVpFOworCW1hcC5sZW5ndGggPSBTWl8xTTsKIAltYXAudHlwZSA9IE1UX0NBQ0hFQ0xFQU47CiAJY3JlYXRlX21hcHBpbmcoJm1hcCk7CiAjZW5kaWYKICNpZmRlZiBGTFVTSF9CQVNFX01JTklDQUNIRQotCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKEZMVVNIX0JBU0VfUEhZUyArIFBHRElSX1NJWkUpOworCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKEZMVVNIX0JBU0VfUEhZUyArIFNaXzFNKTsKIAltYXAudmlydHVhbCA9IEZMVVNIX0JBU0VfTUlOSUNBQ0hFOwotCW1hcC5sZW5ndGggPSBQR0RJUl9TSVpFOworCW1hcC5sZW5ndGggPSBTWl8xTTsKIAltYXAudHlwZSA9IE1UX01JTklDTEVBTjsKIAljcmVhdGVfbWFwcGluZygmbWFwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IGM5MTZhNmNhLi5hMmRkNWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCkBAIC0yNiwyMiArMjYsNyBAQAogICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQogICovCiAjZGVmaW5lIERDQUNIRUxJTkVTSVpFCTMyCi0jZGVmaW5lIEZMVVNIX09GRlNFVAkzMjc2OAogCi0JLm1hY3JvIGZsdXNoXzExMF9kY2FjaGUJcmQsIHJhLCByZQotCWxkcglccmQsID1mbHVzaF9iYXNlCi0JbGRyCVxyYSwgW1xyZF0KLQllb3IJXHJhLCBccmEsICNGTFVTSF9PRkZTRVQKLQlzdHIJXHJhLCBbXHJkXQotCWFkZAlccmUsIFxyYSwgIzE2Mzg0CQlAIG9ubHkgbmVjZXNzYXJ5IGZvciAxNmsKLTEwMDE6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMWIKLQkuZW5kbQotCi0JLmRhdGEKLWZsdXNoX2Jhc2U6Ci0JLmxvbmcJRkxVU0hfQkFTRQogCS50ZXh0CiAKIC8qCkBAIC0xNDUsMTMgKzEzMCwxMSBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9zYTExMF9zd2l0Y2hfbW0pCi0JZmx1c2hfMTEwX2RjYWNoZQlyMywgaXAsIHIxCi0JbW92CXIxLCAjMAotCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwlzdHIJbHIsIFtzcCwgIy00XSEKKwlibAl2NHdiX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCUAgY2xlYXJzIElQCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCi0JbW92CXBjLCBscgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbGRyCXBjLCBbc3BdLCAjNAogCiAvKgogICogY3B1X3NhMTEwX3NldF9wdGUocHRlcCwgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggNDFmMjFmMi4uNzc3YWQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0zMCwzMCArMzAsNiBAQAogICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQogICovCiAjZGVmaW5lIERDQUNIRUxJTkVTSVpFCTMyCi0jZGVmaW5lIEZMVVNIX09GRlNFVAkzMjc2OAotCi0JLm1hY3JvIGZsdXNoXzExMDBfZGNhY2hlIHJkLCByYSwgcmUKLQlsZHIJXHJkLCA9Zmx1c2hfYmFzZQotCWxkcglccmEsIFtccmRdCi0JZW9yCVxyYSwgXHJhLCAjRkxVU0hfT0ZGU0VUCi0Jc3RyCVxyYSwgW1xyZF0KLQlhZGQJXHJlLCBccmEsICM4MTkyCQkJQCBvbmx5IG5lY2Vzc2FyeSBmb3IgOGsKLTEwMDE6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMWIKLSNpZmRlZiBGTFVTSF9CQVNFX01JTklDQUNIRQotCWFkZAlccmEsIFxyYSwgI0ZMVVNIX0JBU0VfTUlOSUNBQ0hFIC0gRkxVU0hfQkFTRQotCWFkZAlccmUsIFxyYSwgIzUxMgkJCUAgb25seSA1MTIgYnl0ZXMKLTEwMDI6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMmIKLSNlbmRpZgotCS5lbmRtCi0KLQkuZGF0YQotZmx1c2hfYmFzZToKLQkubG9uZwlGTFVTSF9CQVNFCi0JLnRleHQKIAogCV9fSU5JVAogCkBAIC03OSw5ICs1NSw4IEBACiAJc3RtZmQJc3AhLCB7bHJ9CiAJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKIAltc3IJY3Bzcl9jLCBpcAotCWZsdXNoXzExMDBfZGNhY2hlIHIwLCByMSwgcjIJCUAgY2xlYW4gY2FjaGVzCi0JbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCisJYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1jcglwMTUsIDAsIGlwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KQEAgLTE2NywxNCArMTQyLDEyIEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X3NhMTEwMF9zd2l0Y2hfbW0pCi0JZmx1c2hfMTEwMF9kY2FjaGUgcjMsIGlwLCByMQotCW1vdglpcCwgIzAKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCXN0cglsciwgW3NwLCAjLTRdIQorCWJsCXY0d2JfZmx1c2hfa2Vybl9jYWNoZV9hbGwJQCBjbGVhcnMgSVAKIAltY3IJcDE1LCAwLCBpcCwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1vdglwYywgbHIKKwlsZHIJcGMsIFtzcF0sICM0CiAKIC8qCiAgKiBjcHVfc2ExMTAwX3NldF9wdGUocHRlcCwgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCAwNjQ4NWMxLi4zMmVjMDRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtNTgsNyArNTgsNyBAQAogCQlpZiAocC0+aWQgPT0gaWRubyAmJgogCQkgICAgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewogCQkJY2xrID0gcDsKLQkJCWJyZWFrOworCQkJZ290byBmb3VuZDsKIAkJfQogCX0KIApAQCAtNjksNiArNjksNyBAQAogCQl9CiAJfQogCitmb3VuZDoKIAltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CiAKIAlyZXR1cm4gY2xrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKaW5kZXggMDc5YjY3ZC4uNWQ1ZDZlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCkBAIC0yNiwxNCArMjYsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZW5lbGF1cy5oPgogCi0KLXZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0gICAgICAgIC8qIE5vdGhpbmcgKi8KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogI2lmIAlkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQogCiAjZGVmaW5lCU9NQVAxX0kyQ19CQVNFCQkweGZmZmIzODAwCkBAIC01OSw5ICs1MSw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2kyY19kZXZpY2UxID0gewogICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAogICAgICAgICAuaWQgICAgICAgICAgICAgPSAxLAotICAgICAgICAuZGV2ID0gewotICAgICAgICAgICAgICAgIC5yZWxlYXNlICAgICAgICA9IG9tYXBfbm9wX3JlbGVhc2UsCi0gICAgICAgIH0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMxKSwKIAkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMSwKIH07CkBAIC0xODcsNyArMTc2LDYgQEAKIAkubmFtZQkJPSAibW1jaS1vbWFwIiwKIAkuaWQJCT0gMSwKIAkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCiAJCS5kbWFfbWFzawk9ICZtbWMxX2RtYW1hc2ssCiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzFfY29uZiwKIAl9LApAQCAtMjE3LDcgKzIwNSw2IEBACiAJLm5hbWUJCT0gIm1tY2ktb21hcCIsCiAJLmlkCQk9IDIsCiAJLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAogCQkuZG1hX21hc2sJPSAmbW1jMl9kbWFtYXNrLAogCQkucGxhdGZvcm1fZGF0YQk9ICZtbWMyX2NvbmYsCiAJfSwKQEAgLTMyMSw5ICszMDgsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF91d2lyZV9kZXZpY2UgPSB7CiAJLm5hbWUJICAgPSAib21hcF91d2lyZSIsCiAJLmlkCSAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXdpcmVfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSB1d2lyZV9yZXNvdXJjZXMsCiB9OwpAQCAtMzY1LDkgKzM0OSw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJICAgPSAib21hcF93ZHQiLAogCS5pZAkgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCiB9OwpAQCAtNDAxLDkgKzM4Miw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3JuZ19kZXZpY2UgPSB7CiAJLm5hbWUJICAgPSAib21hcF9ybmciLAogCS5pZAkgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJuZ19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHJuZ19yZXNvdXJjZXMsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCmluZGV4IDliMzY3YTYuLmZlYmQxMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYworKysgYi9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKQEAgLTU4OCw2ICs1ODgsNyBAQAogCXN0cnVjdCB2ZnBfZG91YmxlIHZkbTsKIAl1MzIgZCwgZXhjZXB0aW9ucyA9IDA7CiAJaW50IHJtb2RlID0gZnBzY3IgJiBGUFNDUl9STU9ERV9NQVNLOworCWludCB0bTsKIAogCXZmcF9kb3VibGVfdW5wYWNrKCZ2ZG0sIHZmcF9nZXRfZG91YmxlKGRtKSk7CiAJdmZwX2RvdWJsZV9kdW1wKCJWRE0iLCAmdmRtKTsKQEAgLTU5NSwxMCArNTk2LDE0IEBACiAJLyoKIAkgKiBEbyB3ZSBoYXZlIGRlbm9ybWFsaXNlZCBudW1iZXI/CiAJICovCi0JaWYgKHZmcF9kb3VibGVfdHlwZSgmdmRtKSAmIFZGUF9ERU5PUk1BTCkKKwl0bSA9IHZmcF9kb3VibGVfdHlwZSgmdmRtKTsKKwlpZiAodG0gJiBWRlBfREVOT1JNQUwpCiAJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSURDOwogCi0JaWYgKHZkbS5leHBvbmVudCA+PSAxMDIzICsgMzIpIHsKKwlpZiAodG0gJiBWRlBfTkFOKSB7CisJCWQgPSAwOworCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwl9IGVsc2UgaWYgKHZkbS5leHBvbmVudCA+PSAxMDIzICsgMzIpIHsKIAkJZCA9IDB4N2ZmZmZmZmY7CiAJCWlmICh2ZG0uc2lnbikKIAkJCWQgPSB+ZDsKQEAgLTExMjIsOSArMTEyNyw5IEBACiB7CiAJdTMyIG9wID0gaW5zdCAmIEZPUF9NQVNLOwogCXUzMiBleGNlcHRpb25zID0gMDsKLQl1bnNpZ25lZCBpbnQgZGQgPSB2ZnBfZ2V0X3NkKGluc3QpOwotCXVuc2lnbmVkIGludCBkbiA9IHZmcF9nZXRfc24oaW5zdCk7Ci0JdW5zaWduZWQgaW50IGRtID0gdmZwX2dldF9zbShpbnN0KTsKKwl1bnNpZ25lZCBpbnQgZGQgPSB2ZnBfZ2V0X2RkKGluc3QpOworCXVuc2lnbmVkIGludCBkbiA9IHZmcF9nZXRfZG4oaW5zdCk7CisJdW5zaWduZWQgaW50IGRtID0gdmZwX2dldF9kbShpbnN0KTsKIAl1bnNpZ25lZCBpbnQgdmVjaXRyLCB2ZWNsZW4sIHZlY3N0cmlkZTsKIAl1MzIgKCpmb3ApKGludCwgaW50LCBzMzIsIHUzMik7CiAKQEAgLTExNDEsNyArMTE0Niw3IEBACiAJcHJfZGVidWcoIlZGUDogdmVjc3RyaWRlPSV1IHZlY2xlbj0ldVxuIiwgdmVjc3RyaWRlLAogCQkgKHZlY2xlbiA+PiBGUFNDUl9MRU5HVEhfQklUKSArIDEpOwogCi0JZm9wID0gKG9wID09IEZPUF9FWFQpID8gZm9wX2V4dGZuc1tkbl0gOiBmb3BfZm5zW0ZPUF9UT19JRFgob3ApXTsKKwlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW0ZFWFRfVE9fSURYKGluc3QpXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOwogCWlmICghZm9wKQogCQlnb3RvIGludmFsaWQ7CiAKQEAgLTExNDksMTcgKzExNTQsMTMgQEAKIAkJdTMyIGV4Y2VwdDsKIAogCQlpZiAob3AgPT0gRk9QX0VYVCkKLQkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUuJXUpID0gb3BbJXVdIChkJXUuJXUpXG4iLAorCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKGQldSkgPSBvcFsldV0gKGQldSlcbiIsCiAJCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULAotCQkJCSBkZCA+PiAxLCBkZCAmIDEsIGRuLAotCQkJCSBkbSA+PiAxLCBkbSAmIDEpOworCQkJCSBkZCwgZG4sIGRtKTsKIAkJZWxzZQotCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKGQldS4ldSkgPSAoZCV1LiV1KSBvcFsldV0gKGQldS4ldSlcbiIsCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1KSA9IChkJXUpIG9wWyV1XSAoZCV1KVxuIiwKIAkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsCi0JCQkJIGRkID4+IDEsIGRkICYgMSwKLQkJCQkgZG4gPj4gMSwgZG4gJiAxLAotCQkJCSBGT1BfVE9fSURYKG9wKSwKLQkJCQkgZG0gPj4gMSwgZG0gJiAxKTsKKwkJCQkgZGQsIGRuLCBGT1BfVE9fSURYKG9wKSwgZG0pOwogCiAJCWV4Y2VwdCA9IGZvcChkZCwgZG4sIGRtLCBmcHNjcik7CiAJCXByX2RlYnVnKCJWRlA6IGl0ciVkOiBleGNlcHRpb25zPSUwOHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwaHcuUyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCmluZGV4IGI3ZWQ1N2UuLmEzZjY1YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBody5TCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCkBAIC0xODksMTEgKzE4OSwxMCBAQAogCiAJLmdsb2JsCXZmcF9nZXRfZG91YmxlCiB2ZnBfZ2V0X2RvdWJsZToKLQltb3YJcjAsIHIwLCBsc3IgIzEKIAlhZGQJcGMsIHBjLCByMCwgbHNsICMzCiAJbW92CXIwLCByMAogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCW1ycmMJcDEwLCAxLCByMCwgcjEsIGNcZHIJQCBmbXJyZAlyMCwgcjEsIGRcZHIKKwltcnJjCXAxMSwgMSwgcjAsIHIxLCBjXGRyCUAgZm1ycmQJcjAsIHIxLCBkXGRyCiAJbW92CXBjLCBscgogCS5lbmRyCiAKQEAgLTIwNCwxMCArMjAzLDkgQEAKIAogCS5nbG9ibAl2ZnBfcHV0X2RvdWJsZQogdmZwX3B1dF9kb3VibGU6Ci0JbW92CXIwLCByMCwgbHNyICMxCiAJYWRkCXBjLCBwYywgcjAsIGxzbCAjMwogCW1vdglyMCwgcjAKIAkuaXJwCWRyLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUKLQltY3JyCXAxMCwgMSwgcjEsIHIyLCBjXGRyCUAgZm1ycmQJcjEsIHIyLCBkXGRyCisJbWNycglwMTEsIDEsIHIxLCByMiwgY1xkcglAIGZtZHJyCXIxLCByMiwgZFxkcgogCW1vdglwYywgbHIKIAkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jCmluZGV4IDE0ZGQ2OTYuLjRhYzI3ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYworKysgYi9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMKQEAgLTYzMiw2ICs2MzIsNyBAQAogCXN0cnVjdCB2ZnBfc2luZ2xlIHZzbTsKIAl1MzIgZCwgZXhjZXB0aW9ucyA9IDA7CiAJaW50IHJtb2RlID0gZnBzY3IgJiBGUFNDUl9STU9ERV9NQVNLOworCWludCB0bTsKIAogCXZmcF9zaW5nbGVfdW5wYWNrKCZ2c20sIG0pOwogCXZmcF9zaW5nbGVfZHVtcCgiVlNNIiwgJnZzbSk7CkBAIC02MzksMTAgKzY0MCwxNCBAQAogCS8qCiAJICogRG8gd2UgaGF2ZSBhIGRlbm9ybWFsaXNlZCBudW1iZXI/CiAJICovCisJdG0gPSB2ZnBfc2luZ2xlX3R5cGUoJnZzbSk7CiAJaWYgKHZmcF9zaW5nbGVfdHlwZSgmdnNtKSAmIFZGUF9ERU5PUk1BTCkKIAkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JREM7CiAKLQlpZiAodnNtLmV4cG9uZW50ID49IDEyNyArIDMyKSB7CisJaWYgKHRtICYgVkZQX05BTikgeworCQlkID0gMDsKKwkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JT0M7CisJfSBlbHNlIGlmICh2c20uZXhwb25lbnQgPj0gMTI3ICsgMzIpIHsKIAkJLyoKIAkJICogbSA+PSAyXjMxLTJeNzogaW52YWxpZAogCQkgKi8KQEAgLTExODgsNyArMTE5Myw3IEBACiAJcHJfZGVidWcoIlZGUDogdmVjc3RyaWRlPSV1IHZlY2xlbj0ldVxuIiwgdmVjc3RyaWRlLAogCQkgKHZlY2xlbiA+PiBGUFNDUl9MRU5HVEhfQklUKSArIDEpOwogCi0JZm9wID0gKG9wID09IEZPUF9FWFQpID8gZm9wX2V4dGZuc1tzbl0gOiBmb3BfZm5zW0ZPUF9UT19JRFgob3ApXTsKKwlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW0ZFWFRfVE9fSURYKGluc3QpXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOwogCWlmICghZm9wKQogCQlnb3RvIGludmFsaWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMgYi9hcmNoL2FybTI2L2tlcm5lbC9hcm1rc3ltcy5jCmluZGV4IGE2YTFiMzMuLjlkNjZjMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYwpAQCAtMTUyLDcgKzE1Miw2IEBACiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jIGIvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYwppbmRleCBkZTM5NzI1Li5kNTc4NTkwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMKQEAgLTM5LDcgKzM5LDYgQEAKIC8qIFN0cmluZyBmdW5jdGlvbnMgKi8KIEVYUE9SVF9TWU1CT0wobWVtY21wKTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChzdHJjcHkpOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwppbmRleCAxZDIxYzhkLi5hOWI1OTUyIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwpAQCAtMTE3MCwxMiArMTE3MCw2IEBACiAjIHN5c2NhbGwgdmVjdG9yIHRhYmxlCiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jaWZkZWYgQ09ORklHX01NVQotI2RlZmluZSBfX01NVShYKSBYCi0jZWxzZQotI2RlZmluZSBfX01NVShYKSBzeXNfbmlfc3lzY2FsbAotI2VuZGlmCi0KIAkuc2VjdGlvbiAucm9kYXRhCiBBTElHTgogCS5nbG9ibAkJc3lzX2NhbGxfdGFibGUKQEAgLTEzMDUsNyArMTI5OSw3IEBACiAJLmxvbmcgc3lzX25ld3VuYW1lCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJjYWNoZWZsdXNoIiAqLwogCS5sb25nIHN5c19hZGp0aW1leAotCS5sb25nIF9fTU1VKHN5c19tcHJvdGVjdCkgLyogMTI1ICovCisJLmxvbmcgc3lzX21wcm90ZWN0CS8qIDEyNSAqLwogCS5sb25nIHN5c19zaWdwcm9jbWFzawogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiY3JlYXRlX21vZHVsZSIgKi8KIAkubG9uZyBzeXNfaW5pdF9tb2R1bGUKQEAgLTEzMjQsMTYgKzEzMTgsMTYgQEAKIAkubG9uZyBzeXNfZ2V0ZGVudHMKIAkubG9uZyBzeXNfc2VsZWN0CiAJLmxvbmcgc3lzX2Zsb2NrCi0JLmxvbmcgX19NTVUoc3lzX21zeW5jKQorCS5sb25nIHN5c19tc3luYwogCS5sb25nIHN5c19yZWFkdgkJLyogMTQ1ICovCiAJLmxvbmcgc3lzX3dyaXRldgogCS5sb25nIHN5c19nZXRzaWQKIAkubG9uZyBzeXNfZmRhdGFzeW5jCiAJLmxvbmcgc3lzX3N5c2N0bAotCS5sb25nIF9fTU1VKHN5c19tbG9jaykJCS8qIDE1MCAqLwotCS5sb25nIF9fTU1VKHN5c19tdW5sb2NrKQotCS5sb25nIF9fTU1VKHN5c19tbG9ja2FsbCkKLQkubG9uZyBfX01NVShzeXNfbXVubG9ja2FsbCkKKwkubG9uZyBzeXNfbWxvY2sJCS8qIDE1MCAqLworCS5sb25nIHN5c19tdW5sb2NrCisJLmxvbmcgc3lzX21sb2NrYWxsCisJLmxvbmcgc3lzX211bmxvY2thbGwKIAkubG9uZyBzeXNfc2NoZWRfc2V0cGFyYW0KIAkubG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0gICAvKiAxNTUgKi8KIAkubG9uZyBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyCkBAIC0xMzQzLDcgKzEzMzcsNyBAQAogCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAvKiAxNjAgKi8KIAkubG9uZyBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAJLmxvbmcgc3lzX25hbm9zbGVlcAotCS5sb25nIF9fTU1VKHN5c19tcmVtYXApCisJLmxvbmcgc3lzX21yZW1hcAogCS5sb25nIHN5c19zZXRyZXN1aWQxNgogCS5sb25nIHN5c19nZXRyZXN1aWQxNgkvKiAxNjUgKi8KIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3Igdm04NiAqLwpAQCAtMTM5OCw4ICsxMzkyLDggQEAKIAkubG9uZyBzeXNfc2V0ZnN1aWQJCS8qIDIxNSAqLwogCS5sb25nIHN5c19zZXRmc2dpZAogCS5sb25nIHN5c19waXZvdF9yb290Ci0JLmxvbmcgX19NTVUoc3lzX21pbmNvcmUpCi0JLmxvbmcgX19NTVUoc3lzX21hZHZpc2UpCisJLmxvbmcgc3lzX21pbmNvcmUKKwkubG9uZyBzeXNfbWFkdmlzZQogCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLwogCS5sb25nIHN5c19mY250bDY0CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIFRVWCAqLwpAQCAtMTQzNyw3ICsxNDMxLDcgQEAKIAkubG9uZyBzeXNfZXBvbGxfY3JlYXRlCiAJLmxvbmcgc3lzX2Vwb2xsX2N0bAkvKiAyNTUgKi8KIAkubG9uZyBzeXNfZXBvbGxfd2FpdAotIAkubG9uZyBfX01NVShzeXNfcmVtYXBfZmlsZV9wYWdlcykKKyAJLmxvbmcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMKICAJLmxvbmcgc3lzX3NldF90aWRfYWRkcmVzcwogIAkubG9uZyBzeXNfdGltZXJfY3JlYXRlCiAgCS5sb25nIHN5c190aW1lcl9zZXR0aW1lCQkvKiAyNjAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYwppbmRleCAwN2M4ZmZhLi4wZjI3M2E3IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jCkBAIC0yNyw3ICsyNyw2IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogCiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYwppbmRleCBiNmNkNzhjLi5mOGQ2ZGVlIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKQEAgLTI1LDcgKzI1LDYgQEAKIC8qIHBsYXRmb3JtIGRlcGVuZGVudCBzdXBwb3J0ICovCiAKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnIGIvYXJjaC9pMzg2L0tjb25maWcKaW5kZXggZjE3YmQxZC4uMThlYzlmZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcKKysrIGIvYXJjaC9pMzg2L0tjb25maWcKQEAgLTUzLDYgKzUzLDM1IEBACiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAorY29uZmlnIFNNUAorCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCisJLS0taGVscC0tLQorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVS4gSWYgeW91IGhhdmUKKwkgIGEgc3lzdGVtIHdpdGggb25seSBvbmUgQ1BVLCBsaWtlIG1vc3QgcGVyc29uYWwgY29tcHV0ZXJzLCBzYXkgTi4gSWYKKwkgIHlvdSBoYXZlIGEgc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUsIHNheSBZLgorCisJICBJZiB5b3Ugc2F5IE4gaGVyZSwgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBzaW5nbGUgYW5kIG11bHRpcHJvY2Vzc29yCisJICBtYWNoaW5lcywgYnV0IHdpbGwgdXNlIG9ubHkgb25lIENQVSBvZiBhIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUuIElmCisJICB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBtYW55LCBidXQgbm90IGFsbCwKKwkgIHNpbmdsZXByb2Nlc3NvciBtYWNoaW5lcy4gT24gYSBzaW5nbGVwcm9jZXNzb3IgbWFjaGluZSwgdGhlIGtlcm5lbAorCSAgd2lsbCBydW4gZmFzdGVyIGlmIHlvdSBzYXkgTiBoZXJlLgorCisJICBOb3RlIHRoYXQgaWYgeW91IHNheSBZIGhlcmUgYW5kIGNob29zZSBhcmNoaXRlY3R1cmUgIjU4NiIgb3IKKwkgICJQZW50aXVtIiB1bmRlciAiUHJvY2Vzc29yIGZhbWlseSIsIHRoZSBrZXJuZWwgd2lsbCBub3Qgd29yayBvbiA0ODYKKwkgIGFyY2hpdGVjdHVyZXMuIFNpbWlsYXJseSwgbXVsdGlwcm9jZXNzb3Iga2VybmVscyBmb3IgdGhlICJQUHJvIgorCSAgYXJjaGl0ZWN0dXJlIG1heSBub3Qgd29yayBvbiBhbGwgUGVudGl1bSBiYXNlZCBib2FyZHMuCisKKwkgIFBlb3BsZSB1c2luZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyB3aG8gc2F5IFkgaGVyZSBzaG91bGQgYWxzbyBzYXkKKwkgIFkgdG8gIkVuaGFuY2VkIFJlYWwgVGltZSBDbG9jayBTdXBwb3J0IiwgYmVsb3cuIFRoZSAiQWR2YW5jZWQgUG93ZXIKKwkgIE1hbmFnZW1lbnQiIGNvZGUgd2lsbCBiZSBkaXNhYmxlZCBpZiB5b3Ugc2F5IFkgaGVyZS4KKworCSAgU2VlIGFsc28gdGhlIDxmaWxlOkRvY3VtZW50YXRpb24vc21wLnR4dD4sCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2kzODYvSU8tQVBJQy50eHQ+LAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9ubWlfd2F0Y2hkb2cudHh0PiBhbmQgdGhlIFNNUC1IT1dUTyBhdmFpbGFibGUgYXQKKwkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCisKIGNob2ljZQogCXByb21wdCAiU3ViYXJjaGl0ZWN0dXJlIFR5cGUiCiAJZGVmYXVsdCBYODZfUEMKQEAgLTE3OCwzNSArMjA3LDYgQEAKIAlkZXBlbmRzIG9uIEhQRVRfVElNRVIgJiYgUlRDPXkKIAlkZWZhdWx0IHkKIAotY29uZmlnIFNNUAotCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCi0JLS0taGVscC0tLQotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVS4gSWYgeW91IGhhdmUKLQkgIGEgc3lzdGVtIHdpdGggb25seSBvbmUgQ1BVLCBsaWtlIG1vc3QgcGVyc29uYWwgY29tcHV0ZXJzLCBzYXkgTi4gSWYKLQkgIHlvdSBoYXZlIGEgc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUsIHNheSBZLgotCi0JICBJZiB5b3Ugc2F5IE4gaGVyZSwgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBzaW5nbGUgYW5kIG11bHRpcHJvY2Vzc29yCi0JICBtYWNoaW5lcywgYnV0IHdpbGwgdXNlIG9ubHkgb25lIENQVSBvZiBhIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUuIElmCi0JICB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBtYW55LCBidXQgbm90IGFsbCwKLQkgIHNpbmdsZXByb2Nlc3NvciBtYWNoaW5lcy4gT24gYSBzaW5nbGVwcm9jZXNzb3IgbWFjaGluZSwgdGhlIGtlcm5lbAotCSAgd2lsbCBydW4gZmFzdGVyIGlmIHlvdSBzYXkgTiBoZXJlLgotCi0JICBOb3RlIHRoYXQgaWYgeW91IHNheSBZIGhlcmUgYW5kIGNob29zZSBhcmNoaXRlY3R1cmUgIjU4NiIgb3IKLQkgICJQZW50aXVtIiB1bmRlciAiUHJvY2Vzc29yIGZhbWlseSIsIHRoZSBrZXJuZWwgd2lsbCBub3Qgd29yayBvbiA0ODYKLQkgIGFyY2hpdGVjdHVyZXMuIFNpbWlsYXJseSwgbXVsdGlwcm9jZXNzb3Iga2VybmVscyBmb3IgdGhlICJQUHJvIgotCSAgYXJjaGl0ZWN0dXJlIG1heSBub3Qgd29yayBvbiBhbGwgUGVudGl1bSBiYXNlZCBib2FyZHMuCi0KLQkgIFBlb3BsZSB1c2luZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyB3aG8gc2F5IFkgaGVyZSBzaG91bGQgYWxzbyBzYXkKLQkgIFkgdG8gIkVuaGFuY2VkIFJlYWwgVGltZSBDbG9jayBTdXBwb3J0IiwgYmVsb3cuIFRoZSAiQWR2YW5jZWQgUG93ZXIKLQkgIE1hbmFnZW1lbnQiIGNvZGUgd2lsbCBiZSBkaXNhYmxlZCBpZiB5b3Ugc2F5IFkgaGVyZS4KLQotCSAgU2VlIGFsc28gdGhlIDxmaWxlOkRvY3VtZW50YXRpb24vc21wLnR4dD4sCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2kzODYvSU8tQVBJQy50eHQ+LAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9ubWlfd2F0Y2hkb2cudHh0PiBhbmQgdGhlIFNNUC1IT1dUTyBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCi0KIGNvbmZpZyBOUl9DUFVTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTI1NSkiCiAJcmFuZ2UgMiAyNTUKQEAgLTUyMiw2ICs1MjIsMTIgQEAKIGNvbW1lbnQgIk5VTUEgKFN1bW1pdCkgcmVxdWlyZXMgU01QLCA2NEdCIGhpZ2htZW0gc3VwcG9ydCwgQUNQSSIKIAlkZXBlbmRzIG9uIFg4Nl9TVU1NSVQgJiYgKCFISUdITUVNNjRHIHx8ICFBQ1BJKQogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICI0IiBpZiBYODZfTlVNQVEKKwlkZWZhdWx0ICIzIgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBjb25maWcgSEFWRV9BUkNIX0JPT1RNRU1fTk9ERQogCWJvb2wKIAlkZXBlbmRzIG9uIE5VTUEKQEAgLTc1NywxNSArNzYzLDYgQEAKIAogCSAgU2F5IE4uCiAKLWNvbmZpZyBET1VCTEVGQVVMVAotCWRlZmF1bHQgeQotCWJvb2wgIkVuYWJsZSBkb3VibGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciIgaWYgRU1CRURERUQKLQloZWxwCi0gICAgICAgICAgVGhpcyBvcHRpb24gYWxsb3dzIHRyYXBwaW5nIG9mIHJhcmUgZG91YmxlZmF1bHQgZXhjZXB0aW9ucyB0aGF0Ci0gICAgICAgICAgd291bGQgb3RoZXJ3aXNlIGNhdXNlIGEgc3lzdGVtIHRvIHNpbGVudGx5IHJlYm9vdC4gRGlzYWJsaW5nIHRoaXMKLSAgICAgICAgICBvcHRpb24gc2F2ZXMgYWJvdXQgNGsgYW5kIG1pZ2h0IGNhdXNlIHlvdSBtdWNoIGFkZGl0aW9uYWwgZ3JleQotICAgICAgICAgIGhhaXIuCi0KIGVuZG1lbnUKIAogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZy5jcHUgYi9hcmNoL2kzODYvS2NvbmZpZy5jcHUKaW5kZXggNzk2MDNiMy4uZWIxMzA0ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL2kzODYvS2NvbmZpZy5jcHUKQEAgLTMxMSw1ICszMTEsNSBAQAogCiBjb25maWcgWDg2X1RTQwogCWJvb2wKLQlkZXBlbmRzIG9uIChNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTUs4IHx8IE1WSUFDM18yIHx8IE1HRU9ERUdYMSkgJiYgIVg4Nl9OVU1BUQorCWRlcGVuZHMgb24gKE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTUdFT0RFR1gxIHx8IE1HRU9ERV9MWCkgJiYgIVg4Nl9OVU1BUQogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUyBiL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMKaW5kZXggMDAwMGEyNi4uYzkzNDNjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUwpAQCAtOTcsNiArOTcsNyBAQAogI2RlZmluZSBQQVJBTV9WRVNBUE1fT0ZGCTB4MzAKICNkZWZpbmUgUEFSQU1fTEZCX1BBR0VTCQkweDMyCiAjZGVmaW5lIFBBUkFNX1ZFU0FfQVRUUklCCTB4MzQKKyNkZWZpbmUgUEFSQU1fQ0FQQUJJTElUSUVTCTB4MzYKIAogLyogRGVmaW5lIERPX1NUT1JFIGFjY29yZGluZyB0byBDT05GSUdfVklERU9fUkVUQUlOICovCiAjaWZkZWYgQ09ORklHX1ZJREVPX1JFVEFJTgpAQCAtMjMzLDYgKzIzNCwxMCBAQAogCW1vdncJMTgoJWRpKSwgJWF4CiAJbW92bAklZWF4LCAlZnM6KFBBUkFNX0xGQl9TSVpFKQogCisjIHN0b3JlIG1vZGUgY2FwYWJpbGl0aWVzCisJbW92bCAxMCglZGkpLCAlZWF4CisJbW92bCAlZWF4LCAlZnM6KFBBUkFNX0NBUEFCSUxJVElFUykKKwogIyBzd2l0Y2hpbmcgdGhlIERBQyB0byA4LWJpdCBpcyBmb3IgPD0gOCBicHAgb25seQogCW1vdncJJWZzOihQQVJBTV9MRkJfREVQVEgpLCAlYXgKIAljbXB3CSQ4LCAlYXgKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IDAzMzA2NjEuLjAzMGEwMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJdW5zaWduZWQgbG9uZyBpOwogCWludCBjb25maWdfc2l6ZTsKIAotCWlmICghcGh5c19hZGRyIHx8ICFzaXplKQorCWlmICghcGh5c19hZGRyIHx8ICFzaXplIHx8ICFjcHVfaGFzX2FwaWMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbWNmZyA9IChzdHJ1Y3QgYWNwaV90YWJsZV9tY2ZnICopX19hY3BpX21hcF90YWJsZShwaHlzX2FkZHIsIHNpemUpOwpAQCAtMjE1LDcgKzIxNSw3IEBACiB7CiAJc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqbWFkdCA9IE5VTEw7CiAKLQlpZiAoIXBoeXNfYWRkciB8fCAhc2l6ZSkKKwlpZiAoIXBoeXNfYWRkciB8fCAhc2l6ZSB8fCAhY3B1X2hhc19hcGljKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1hZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqKV9fYWNwaV9tYXBfdGFibGUocGh5c19hZGRyLCBzaXplKTsKQEAgLTY5Myw2ICs2OTMsOSBAQAogewogCWludCBjb3VudDsKIAorCWlmICghY3B1X2hhc19hcGljKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIAogCSAqIE5vdGUgdGhhdCB0aGUgTEFQSUMgYWRkcmVzcyBpcyBvYnRhaW5lZCBmcm9tIHRoZSBNQURUICgzMi1iaXQgdmFsdWUpCiAJICogYW5kIChvcHRpb25hbGx5KSBvdmVycmlkZW4gYnkgYSBMQVBJQ19BRERSX09WUiBlbnRyeSAoNjQtYml0IHZhbHVlKS4KQEAgLTc1MSw2ICs3NTQsOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAoIWNwdV9oYXNfYXBpYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKgogCSAqIGlmICJub2FwaWMiIGJvb3Qgb3B0aW9uLCBkb24ndCBsb29rIGZvciBJTy1BUElDcwogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwppbmRleCA2MjczYmY3Li4yNTRjZWU5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwpAQCAtNjIsNiArNjIsMTggQEAKIAogc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTsKIAoraW50IG1vZGVybl9hcGljKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGx2ciwgdmVyc2lvbjsKKwkvKiBBTUQgc3lzdGVtcyB1c2Ugb2xkIEFQSUMgdmVyc2lvbnMsIHNvIGNoZWNrIHRoZSBDUFUgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCisJCWJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikKKwkJcmV0dXJuIDE7CisJbHZyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwl2ZXJzaW9uID0gR0VUX0FQSUNfVkVSU0lPTihsdnIpOworCXJldHVybiB2ZXJzaW9uID49IDB4MTQ7Cit9CisKIC8qCiAgKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KICAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgpAQCAtMTE5LDEwICsxMzEsNyBAQAogCiBpbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKQogewotCXVuc2lnbmVkIGludCBsdnIsIHZlcnNpb247Ci0JbHZyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQl2ZXJzaW9uID0gR0VUX0FQSUNfVkVSU0lPTihsdnIpOwotCWlmICghQVBJQ19JTlRFR1JBVEVEKHZlcnNpb24pIHx8IHZlcnNpb24gPj0gMHgxNCkKKwlpZiAobW9kZXJuX2FwaWMoKSkKIAkJcmV0dXJuIDB4ZmY7CiAJZWxzZQogCQlyZXR1cm4gMHhmOwpAQCAtMzQ5LDkgKzM1OCw5IEBACiAKIHZvaWQgX19pbml0IHN5bmNfQXJiX0lEcyh2b2lkKQogewotCS8qIFVuc3VwcG9ydGVkIG9uIFA0IC0gc2VlIEludGVsIERldi4gTWFudWFsIFZvbC4gMywgQ2guIDguNi4xICovCi0JdW5zaWduZWQgaW50IHZlciA9IEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci0JaWYgKHZlciA+PSAweDE0KQkvKiBQNCBvciBoaWdoZXIgKi8KKwkvKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMQorCSAgIEFuZCBub3QgbmVlZGVkIG9uIEFNRCAqLworCWlmIChtb2Rlcm5fYXBpYygpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBXYWl0IGZvciBpZGxlLgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9hbWQuYwppbmRleCAwODEwZjgxZi4uZmYyYjIxNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTIxMiw4ICsyMTIsNiBAQAogCiAJaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA4KSB7CiAJCWMtPng4Nl9tYXhfY29yZXMgPSAoY3B1aWRfZWN4KDB4ODAwMDAwMDgpICYgMHhmZikgKyAxOwotCQlpZiAoYy0+eDg2X21heF9jb3JlcyAmIChjLT54ODZfbWF4X2NvcmVzIC0gMSkpCi0JCQljLT54ODZfbWF4X2NvcmVzID0gMTsKIAl9CiAKIAlpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA3MTJhMjZiLi43YzBlMTYwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC00Niw3ICs0Niw3IEBACiAKICNkZWZpbmUgUEZYICJwb3dlcm5vdy1rODogIgogI2RlZmluZSBCRlggUEZYICJCSU9TIGVycm9yOiAiCi0jZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMS42MC4xIgorI2RlZmluZSBWRVJTSU9OICJ2ZXJzaW9uIDEuNjAuMiIKICNpbmNsdWRlICJwb3dlcm5vdy1rOC5oIgogCiAvKiBzZXJpYWxpemUgZnJlcSBjaGFuZ2VzICAqLwpAQCAtNTUsNyArNTUsNyBAQAogc3RhdGljIHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpwb3dlcm5vd19kYXRhW05SX0NQVVNdOwogCiAjaWZuZGVmIENPTkZJR19TTVAKLXN0YXRpYyBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwWzFdID0geyBDUFVfTUFTS19BTEwgfTsKK3N0YXRpYyBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwWzFdOwogI2VuZGlmCiAKIC8qIFJldHVybiBhIGZyZXF1ZW5jeSBpbiBNSHosIGdpdmVuIGFuIGlucHV0IGZpZCAqLwpAQCAtOTEwLDYgKzkxMCw5IEBACiAJdW5zaWduZWQgaW50IG5ld3N0YXRlOwogCWludCByZXQgPSAtRUlPOwogCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIG9ubHkgcnVuIG9uIHNwZWNpZmljIENQVSBmcm9tIGhlcmUgb24gKi8KIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUocG9sLT5jcHUpKTsKQEAgLTk2OSw2ICs5NzIsOSBAQAogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gcG93ZXJub3dfZGF0YVtwb2wtPmNwdV07CiAKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlKTsKIH0KIApAQCAtOTc3LDcgKzk4Myw3IEBACiB7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2sgPSBDUFVfTUFTS19BTEw7Ci0JaW50IHJjLCBpOworCWludCByYzsKIAogCWlmICghY3B1X29ubGluZShwb2wtPmNwdSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTA2Myw4ICsxMDY5LDcgQEAKIAlwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCSAgICAgICBkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9jb3JlX21hcFtwb2wtPmNwdV0pCi0JCXBvd2Vybm93X2RhdGFbaV0gPSBkYXRhOworCXBvd2Vybm93X2RhdGFbcG9sLT5jcHVdID0gZGF0YTsKIAogCXJldHVybiAwOwogCkBAIC0xMTA0LDYgKzExMDksOSBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJsaW1pdGluZyB0byBDUFUgJWQgZmFpbGVkIGluIHBvd2Vybm93azhfZ2V0XG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwppbmRleCAwNTUzMjUwLi4wMzZhOTg1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwpAQCAtMTksNyArMTksNiBAQAogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzQpOwogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzgpOwogCi1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYwppbmRleCA4ZDhhYTlkLi4zNGQyMWUyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYwpAQCAtMzgsMTIgKzM4LDYgQEAKIGludCBzbXBfZm91bmRfY29uZmlnOwogdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbWF4Y3B1cyA9IE5SX0NQVVM7CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLSNkZWZpbmUgQ1BVX0hPVFBMVUdfRU5BQkxFRAkoMSkKLSNlbHNlCi0jZGVmaW5lIENQVV9IT1RQTFVHX0VOQUJMRUQJKDApCi0jZW5kaWYKLQogLyoKICAqIFZhcmlvdXMgTGludXgtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGNyZWF0ZWQgZnJvbSB0aGUKICAqIE1QLXRhYmxlLgpAQCAtMTEwLDIxICsxMDQsNiBAQAogc3RhdGljIGludCBtcGNfcmVjb3JkOyAKIHN0YXRpYyBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fdGFibGVbTUFYX01QQ19FTlRSWV0gX19pbml0ZGF0YTsKIAotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLXN0YXRpYyBpbnQgTVBfdmFsaWRfYXBpY2lkKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQotewotCXJldHVybiBod2VpZ2h0X2xvbmcoYXBpY2lkICYgMHhmKSA9PSAxICYmIChhcGljaWQgPj4gNCkgIT0gMHhmOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgTVBfdmFsaWRfYXBpY2lkKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQotewotCWlmICh2ZXJzaW9uID49IDB4MTQpCi0JCXJldHVybiBhcGljaWQgPCAweGZmOwotCWVsc2UKLQkJcmV0dXJuIGFwaWNpZCA8IDB4ZjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgTVBfcHJvY2Vzc29yX2luZm8gKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSkKIHsKICAJaW50IHZlciwgYXBpY2lkOwpAQCAtMTkwLDEyICsxNjksNiBAQAogCiAJdmVyID0gbS0+bXBjX2FwaWN2ZXI7CiAKLQlpZiAoIU1QX3ZhbGlkX2FwaWNpZChhcGljaWQsIHZlcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUHJvY2Vzc29yICMlZCBJTlZBTElELiAoTWF4IElEOiAlZCkuXG4iLAotCQkJbS0+bXBjX2FwaWNpZCwgTUFYX0FQSUNTKTsKLQkJcmV0dXJuOwotCX0KLQogCS8qCiAJICogVmFsaWRhdGUgdmVyc2lvbgogCSAqLwpAQCAtMjI1LDcgKzE5OCwxNCBAQAogCWNwdV9zZXQobnVtX3Byb2Nlc3NvcnMsIGNwdV9wb3NzaWJsZV9tYXApOwogCW51bV9wcm9jZXNzb3JzKys7CiAKLQlpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCAobnVtX3Byb2Nlc3NvcnMgPiA4KSkgeworCS8qCisJICogV291bGQgYmUgcHJlZmVyYWJsZSB0byBzd2l0Y2ggdG8gYmlnc21wIHdoZW4gQ09ORklHX0hPVFBMVUdfQ1BVPXkKKwkgKiBidXQgd2UgbmVlZCB0byB3b3JrIG90aGVyIGRlcGVuZGVuY2llcyBsaWtlIFNNUF9TVVNQRU5EIGV0YworCSAqIGJlZm9yZSB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgc29tZSBjb25mdXNpb24uCisJICogaWYgKENQVV9IT1RQTFVHX0VOQUJMRUQgfHwgbnVtX3Byb2Nlc3NvcnMgPiA4KQorCSAqICAgICAgIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorCSAqLworCWlmIChudW1fcHJvY2Vzc29ycyA+IDgpIHsKIAkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKIAkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgogCQkJaWYgKCFBUElDX1hBUElDKHZlcikpIHsKQEAgLTI0OSw2ICsyMjksMTMgQEAKIAogCW1wY19vZW1fYnVzX2luZm8obSwgc3RyLCB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSk7CiAKKwlpZiAobS0+bXBjX2J1c2lkID49IE1BWF9NUF9CVVNTRVMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTVAgdGFibGUgYnVzaWQgdmFsdWUgKCVkKSBmb3IgYnVzdHlwZSAlcyAiCisJCQkiIGlzIHRvbyBsYXJnZSwgbWF4LiBzdXBwb3J0ZWQgaXMgJWRcbiIsCisJCQltLT5tcGNfYnVzaWQsIHN0ciwgTUFYX01QX0JVU1NFUyAtIDEpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHN0cm5jbXAoc3RyLCBCVVNUWVBFX0lTQSwgc2l6ZW9mKEJVU1RZUEVfSVNBKS0xKSA9PSAwKSB7CiAJCW1wX2J1c19pZF90b190eXBlW20tPm1wY19idXNpZF0gPSBNUF9CVVNfSVNBOwogCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsIEJVU1RZUEVfRUlTQSwgc2l6ZW9mKEJVU1RZUEVfRUlTQSktMSkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYwppbmRleCAxMGUyMWE0Li45OWFhYjQxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYwpAQCAtNTEsNyArNTEsNSBAQAogCiAJCWN1ci0+cmVib290X2ZpeHVwKGRldik7CiAJfQotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gcmVib290IGZpeHVwIGZvdW5kIGZvciB5b3VyIGhhcmR3YXJlXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGVhY2MzZjAuLjgwY2IzYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKQEAgLTk2Myw2ICs5NjMsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAorIC8qCisgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGVudGlyZSByYW5nZSA8c3RhcnQsZW5kPiBpcyBtYXBwZWQgd2l0aCB0eXBlLgorICAqCisgICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGNvcnJlY3QgaWYgdGhlIGU4MjAgdGFibGUgaXMgc29ydGVkIGFuZAorICAqIG5vdC1vdmVybGFwcGluZywgd2hpY2ggaXMgdGhlIGNhc2UKKyAgKi8KK2ludCBfX2luaXQKK2U4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJaWYgKHR5cGUgJiYgZWktPnR5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVnaW9uIChwYXJ0KSBpbiBvdmVybGFwIHdpdGggdGhlIGN1cnJlbnQgcmVnaW9uID8qLworCQlpZiAoZWktPmFkZHIgPj0gZW5kIHx8IGVpLT5hZGRyICsgZWktPnNpemUgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKwkJLyogaWYgdGhlIHJlZ2lvbiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIDxzdGFydCxlbmQ+IHdlIG1vdmUKKwkJICogc3RhcnQgdG8gdGhlIGVuZCBvZiB0aGUgcmVnaW9uIHNpbmNlIGl0J3Mgb2sgdW50aWwgdGhlcmUKKwkJICovCisJCWlmIChlaS0+YWRkciA8PSBzdGFydCkKKwkJCXN0YXJ0ID0gZWktPmFkZHIgKyBlaS0+c2l6ZTsKKwkJLyogaWYgc3RhcnQgaXMgbm93IGF0IG9yIGJleW9uZCBlbmQsIHdlJ3JlIGRvbmUsIGZ1bGwKKwkJICogY292ZXJhZ2UgKi8KKwkJaWYgKHN0YXJ0ID49IGVuZCkKKwkJCXJldHVybiAxOyAvKiB3ZSdyZSBkb25lICovCisJfQorCXJldHVybiAwOworfQorCiAvKgogICogRmluZCB0aGUgaGlnaGVzdCBwYWdlIGZyYW1lIG51bWJlciB3ZSBoYXZlIGF2YWlsYWJsZQogICovCkBAIC0xMzE3LDggKzEzNDcsOCBAQAogLyoKICAqIFJlcXVlc3QgYWRkcmVzcyBzcGFjZSBmb3IgYWxsIHN0YW5kYXJkIHJlc291cmNlcwogICoKLSAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHBjaWJpb3NfYXNzaWduX3Jlc291cmNlcygpLCB3aGljaCBpcyBhbHNvCi0gKiBhbiBmc19pbml0Y2FsbCwgYnV0IGlzIGxpbmtlZCBpbiBsYXRlciAoaW4gYXJjaC9pMzg2L3BjaS9pMzg2LmMpLgorICogVGhpcyBpcyBjYWxsZWQganVzdCBiZWZvcmUgcGNpYmlvc19pbml0KCksIHdoaWNoIGlzIGFsc28gYQorICogc3Vic3lzX2luaXRjYWxsLCBidXQgaXMgbGlua2VkIGluIGxhdGVyIChpbiBhcmNoL2kzODYvcGNpL2NvbW1vbi5jKS4KICAqLwogc3RhdGljIGludCBfX2luaXQgcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXModm9pZCkKIHsKQEAgLTEzMzksNyArMTM2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWZzX2luaXRjYWxsKHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKTsKK3N1YnN5c19pbml0Y2FsbChyZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcyk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWdpc3Rlcl9tZW1vcnkodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCBlMzg1Mjc5Li4yZDIyZjU3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCkBAIC0zNjUsNiArMzY1LDkgQEAKIAogCWlmICgrK2RpZS5sb2NrX293bmVyX2RlcHRoIDwgMykgewogCQlpbnQgbmwgPSAwOworCQl1bnNpZ25lZCBsb25nIGVzcDsKKwkJdW5zaWduZWQgc2hvcnQgc3M7CisKIAkJaGFuZGxlX0JVRyhyZWdzKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiAlMDRseCBbIyVkXVxuIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwogI2lmZGVmIENPTkZJR19QUkVFTVBUCkBAIC0zODcsOCArMzkwLDE5IEBACiAJCQlwcmludGsoIlxuIik7CiAJCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwKIAkJCQkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpICE9Ci0JCQkJTk9USUZZX1NUT1ApCisJCQkJTk9USUZZX1NUT1ApIHsKIAkJCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOworCQkJLyogRXhlY3V0aXZlIHN1bW1hcnkgaW4gY2FzZSB0aGUgb29wcyBzY3JvbGxlZCBhd2F5ICovCisJCQllc3AgPSAodW5zaWduZWQgbG9uZykgKCZyZWdzLT5lc3ApOworCQkJc2F2ZXNlZ21lbnQoc3MsIHNzKTsKKwkJCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJCQllc3AgPSByZWdzLT5lc3A7CisJCQkJc3MgPSByZWdzLT54c3MgJiAweGZmZmY7CisJCQl9CisJCQlwcmludGsoS0VSTl9FTUVSRyAiRUlQOiBbPCUwOGx4Pl0gIiwgcmVncy0+ZWlwKTsKKwkJCXByaW50X3N5bWJvbCgiJXMiLCByZWdzLT5laXApOworCQkJcHJpbnRrKCIgU1M6RVNQICUwNHg6JTA4bHhcbiIsIHNzLCBlc3ApOworCQl9CiAJCWVsc2UKIAkJCXJlZ3MgPSBOVUxMOwogICAJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMKaW5kZXggMjM5NjdmZS4uMzAzOTUzOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYwpAQCAtMTA2LDkgKzEwNiwxNSBAQAogCiAvKiB0aGUgSS9PIHBvcnQgYXNzaWdubWVudHMgZm9yIHRoZSBWSUMgYW5kIFFJQyAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2aWNfcmVzID0gewotCSJWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyIiwgMHhGQzAwLCAweEZDNkYgfTsKKwkubmFtZQk9ICJWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyIiwKKwkuc3RhcnQJPSAweEZDMDAsCisJLmVuZAk9IDB4RkM2RgorfTsKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcWljX3JlcyA9IHsKLQkiUXVhZCBJbnRlcnJ1cHQgQ29udHJvbGxlciIsIDB4RkM3MCwgMHhGQ0ZGIH07CisJLm5hbWUJPSAiUXVhZCBJbnRlcnJ1cHQgQ29udHJvbGxlciIsCisJLnN0YXJ0CT0gMHhGQzcwLAorCS5lbmQJPSAweEZDRkYKK307CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYWNrIGEgZGF0YSBiaXQgc3RyZWFtIGluc2lkZSBhIG1lc3NhZ2UuCiAgKiBJdCB3cml0ZXMgbnVtX2JpdHMgb2YgdGhlIGRhdGEgYnVmZmVyIGluIG1zZyBzdGFydGluZyBhdCBzdGFydF9iaXQuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vaW5pdC5jIGIvYXJjaC9pMzg2L21tL2luaXQuYwppbmRleCA5ZjY2YWM1Li5hZTY1MzRhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vaW5pdC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9pbml0LmMKQEAgLTY1MSw2ICs2NTEsNyBAQAogICogU3BlY2lmaWNhbGx5LCBpbiB0aGUgY2FzZSBvZiB4ODYsIHdlIHdpbGwgYWx3YXlzIGFkZAogICogbWVtb3J5IHRvIHRoZSBoaWdobWVtIGZvciBub3cuCiAgKi8KKyNpZmRlZiBDT05GSUdfSE9UUExVR19NRU1PUlkKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKIGludCBhZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CkBAIC02NjcsNiArNjY4LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KICNlbmRpZgorI2VuZGlmCiAKIGttZW1fY2FjaGVfdCAqcGdkX2NhY2hlOwoga21lbV9jYWNoZV90ICpwbWRfY2FjaGU7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2RpcmVjdC5jIGIvYXJjaC9pMzg2L3BjaS9kaXJlY3QuYwppbmRleCA5OTAxMmI5Li41ZDgxZmI1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2RpcmVjdC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZGlyZWN0LmMKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIC8qCkBAIC0xOCw4ICsxOSwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIXZhbHVlIHx8IChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpCisJaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpIHsKKwkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKIApAQCAtOTEsOCArOTQsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBkZXYsIGZuOwogCi0JaWYgKCF2YWx1ZSB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKQorCWlmICgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKSB7CisJCSp2YWx1ZSA9IC0xOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlkZXYgPSBQQ0lfU0xPVChkZXZmbik7CiAJZm4gPSBQQ0lfRlVOQyhkZXZmbik7CkBAIC0xODgsNiArMTkzLDEwIEBACiAKIAlpZiAocGNpX3Byb2JlICYgUENJX05PX0NIRUNLUykKIAkJcmV0dXJuIDE7CisJLyogQXNzdW1lIFR5cGUgMSB3b3JrcyBmb3IgbmV3ZXIgc3lzdGVtcy4KKwkgICBUaGlzIGhhbmRsZXMgbWFjaGluZXMgdGhhdCBkb24ndCBoYXZlIGFueXRoaW5nIG9uIFBDSSBCdXMgMC4gKi8KKwlpZiAoZG1pX2dldF95ZWFyKERNSV9CSU9TX0RBVEUpID49IDIwMDEpCisJCXJldHVybiAxOwogCiAJZm9yIChkZXZmbiA9IDA7IGRldmZuIDwgMHgxMDA7IGRldmZuKyspIHsKIAkJaWYgKG8tPnJlYWQoMCwgMCwgZGV2Zm4sIFBDSV9DTEFTU19ERVZJQ0UsIDIsICZ4KSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYwppbmRleCA2MTM3ODkwLi42YjFlYTBjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCkBAIC0xMiwxNCArMTIsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKKyNkZWZpbmUgTU1DT05GSUdfQVBFUl9TSVpFICgyNTYqMTAyNCoxMDI0KQorCisvKiBBc3N1bWUgc3lzdGVtcyB3aXRoIG1vcmUgYnVzc2VzIGhhdmUgY29ycmVjdCBNQ0ZHICovCisjZGVmaW5lIE1BWF9DSEVDS19CVVMgMTYKKwogI2RlZmluZSBtbWNmZ192aXJ0X2FkZHIgKCh2b2lkIF9faW9tZW0gKikgZml4X3RvX3ZpcnQoRklYX1BDSUVfTUNGRykpCiAKIC8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGxhc3QgTU1DT05GSUcgZGV2aWNlIGFjY2Vzc2VkICovCiBzdGF0aWMgdTMyIG1tY2ZnX2xhc3RfYWNjZXNzZWRfZGV2aWNlOwogCi1zdGF0aWMgREVDTEFSRV9CSVRNQVAoZmFsbGJhY2tfc2xvdHMsIDMyKTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChmYWxsYmFja19zbG90cywgTUFYX0NIRUNLX0JVUyozMik7CiAKIC8qCiAgKiBGdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSB3aXRoIE1NQ09ORklHIGFjY2Vzc2VzCkBAIC0yOSw4ICszNSw4IEBACiAJaW50IGNmZ19udW0gPSAtMTsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9tY2ZnX2NvbmZpZyAqY2ZnOwogCi0JaWYgKHNlZyA9PSAwICYmIGJ1cyA9PSAwICYmCi0JICAgIHRlc3RfYml0KFBDSV9TTE9UKGRldmZuKSwgZmFsbGJhY2tfc2xvdHMpKQorCWlmIChzZWcgPT0gMCAmJiBidXMgPCBNQVhfQ0hFQ0tfQlVTICYmCisJICAgIHRlc3RfYml0KFBDSV9TTE9UKGRldmZuKSArIDMyKmJ1cywgZmFsbGJhY2tfc2xvdHMpKQogCQlyZXR1cm4gMDsKIAogCXdoaWxlICgxKSB7CkBAIC03NCw4ICs4MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGJhc2U7CiAKLQlpZiAoIXZhbHVlIHx8IChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDQwOTUpKQorCWlmICgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkgeworCQkqdmFsdWUgPSAtMTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJYmFzZSA9IGdldF9iYXNlX2FkZHIoc2VnLCBidXMsIGRldmZuKTsKIAlpZiAoIWJhc2UpCkBAIC0xNDYsMjkgKzE1NCwzNCBAQAogICAgTm9ybWFsbHkgdGhpcyBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBNQ0ZHIGJ5IG5vdCBsaXN0aW5nIHRoZW0KICAgIGFuZCBhc3NpZ25pbmcgc3VpdGFibGUgX1NFR3MsIGJ1dCB0aGlzIGlzbid0IGltcGxlbWVudGVkIGluIHNvbWUgQklPUy4KICAgIEluc3RlYWQgdHJ5IHRvIGRpc2NvdmVyIGFsbCBkZXZpY2VzIG9uIGJ1cyAwIHRoYXQgYXJlIHVucmVhY2hhYmxlIHVzaW5nIE1NCi0gICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uCi0gICBXZSBvbmx5IGRvIHRoaXMgZm9yIGJ1cyAwL3NlZyAwICovCisgICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uICovCiBzdGF0aWMgX19pbml0IHZvaWQgdW5yZWFjaGFibGVfZGV2aWNlcyh2b2lkKQogewotCWludCBpOworCWludCBpLCBrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQl1MzIgdmFsMTsKLQkJdTMyIGFkZHI7CisJZm9yIChrID0gMDsgayA8IE1BWF9DSEVDS19CVVM7IGsrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJdTMyIHZhbDE7CisJCQl1MzIgYWRkcjsKIAotCQlwY2lfY29uZjFfcmVhZCgwLCAwLCBQQ0lfREVWRk4oaSwgMCksIDAsIDQsICZ2YWwxKTsKLQkJaWYgKHZhbDEgPT0gMHhmZmZmZmZmZikKLQkJCWNvbnRpbnVlOworCQkJcGNpX2NvbmYxX3JlYWQoMCwgaywgUENJX0RFVkZOKGksIDApLCAwLCA0LCAmdmFsMSk7CisJCQlpZiAodmFsMSA9PSAweGZmZmZmZmZmKQorCQkJCWNvbnRpbnVlOwogCi0JCS8qIExvY2tpbmcgcHJvYmFibHkgbm90IG5lZWRlZCwgYnV0IHNhZmVyICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKLQkJYWRkciA9IGdldF9iYXNlX2FkZHIoMCwgMCwgUENJX0RFVkZOKGksIDApKTsKLQkJaWYgKGFkZHIgIT0gMCkKLQkJCXBjaV9leHBfc2V0X2Rldl9iYXNlKGFkZHIsIDAsIFBDSV9ERVZGTihpLCAwKSk7Ci0JCWlmIChhZGRyID09IDAgfHwgcmVhZGwoKHUzMiBfX2lvbWVtICopbW1jZmdfdmlydF9hZGRyKSAhPSB2YWwxKQotCQkJc2V0X2JpdChpLCBmYWxsYmFja19zbG90cyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOworCQkJLyogTG9ja2luZyBwcm9iYWJseSBub3QgbmVlZGVkLCBidXQgc2FmZXIgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKKwkJCWFkZHIgPSBnZXRfYmFzZV9hZGRyKDAsIGssIFBDSV9ERVZGTihpLCAwKSk7CisJCQlpZiAoYWRkciAhPSAwKQorCQkJCXBjaV9leHBfc2V0X2Rldl9iYXNlKGFkZHIsIGssIFBDSV9ERVZGTihpLCAwKSk7CisJCQlpZiAoYWRkciA9PSAwIHx8CisJCQkgICAgcmVhZGwoKHUzMiBfX2lvbWVtICopbW1jZmdfdmlydF9hZGRyKSAhPSB2YWwxKSB7CisJCQkJc2V0X2JpdChpLCBmYWxsYmFja19zbG90cyk7CisJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkiUENJOiBObyBtbWNvbmZpZyBwb3NzaWJsZSBvbiAleDoleFxuIiwgaywgaSk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKKwkJfQogCX0KIH0KIApAQCAtMTgzLDYgKzE5NiwxNCBAQAogCSAgICAocGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgPT0gMCkpCiAJCXJldHVybjsKIAorCWlmICghZTgyMF9hbGxfbWFwcGVkKHBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzLAorCQkJcGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgKyBNTUNPTkZJR19BUEVSX1NJWkUsCisJCQlFODIwX1JFU0VSVkVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQklPUyBCdWc6IE1DRkcgYXJlYSBpcyBub3QgRTgyMC1yZXNlcnZlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBOb3QgdXNpbmcgTU1DT05GSUcuXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgTU1DT05GSUdcbiIpOwogCXJhd19wY2lfb3BzID0gJnBjaV9tbWNmZzsKIAlwY2lfcHJvYmUgPSAocGNpX3Byb2JlICYgflBDSV9QUk9CRV9NQVNLKSB8IFBDSV9QUk9CRV9NTUNPTkY7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IGVkZmZlMjUuLjlmNDBlZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC0yNjAsMTUgKzI2MCw2IEBACiAJICB0aGFuIDY0IHdpbGwgY2F1c2UgdGhlIHVzZSBvZiBhIENQVSBtYXNrIGFycmF5LCBjYXVzaW5nIGEgc21hbGwKIAkgIHBlcmZvcm1hbmNlIGhpdC4KIAotY29uZmlnIElBNjRfTlJfTk9ERVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIE5PREVzICgyNTYtMTAyNCkiIGlmIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKQotCXJhbmdlIDI1NiAxMDI0Ci0JZGVwZW5kcyBvbiBJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDCi0JZGVmYXVsdCAiMjU2IgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW4geW91ciBTU0kgc3lzdGVtLgotCSAgSWYgaW4gZG91YnQsIHVzZSB0aGUgZGVmYXVsdC4KLQogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU01QICYmIEVYUEVSSU1FTlRBTApAQCAtMzUyLDYgKzM0MywxNiBAQAogCSAgQWNjZXNzKS4gIFRoaXMgb3B0aW9uIGlzIGZvciBjb25maWd1cmluZyBoaWdoLWVuZCBtdWx0aXByb2Nlc3NvcgogCSAgc2VydmVyIHN5c3RlbXMuICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludCAiTWF4IG51bSBub2RlcyBzaGlmdCgzLTEwKSIKKwlyYW5nZSAzIDEwCisJZGVmYXVsdCAiOCIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIHlvdXIgU1NJIHN5c3RlbS4KKwkgIE1BWF9OVU1OT0RFUyB3aWxsIGJlIDJeKFRoaXMgdmFsdWUpLgorCSAgSWYgaW4gZG91YnQsIHVzZSB0aGUgZGVmYXVsdC4KKwogIyBWSVJUVUFMX01FTV9NQVAgYW5kIEZMQVRfTk9ERV9NRU1fTUFQIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KICMgVklSVFVBTF9NRU1fTUFQIGhhcyBiZWVuIHJldGFpbmVkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCiBjb25maWcgVklSVFVBTF9NRU1fTUFQCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGktZXh0LmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktZXh0LmMKaW5kZXggNGE1NTc0Zi4uZmZmODI5MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYwpAQCAtMSwxMDUgKzEsMTA0IEBACiAvKgotICogYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jCisgKiAoYykgQ29weXJpZ2h0IDIwMDMsIDIwMDYgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCUFsZXggV2lsbGlhbXNvbiA8YWxleC53aWxsaWFtc29uQGhwLmNvbT4KKyAqCUJqb3JuIEhlbGdhYXMgPGJqb3JuLmhlbGdhYXNAaHAuY29tPgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBIZXdsZXR0LVBhY2thcmQKLSAqIENvcHlyaWdodCAoQykgQWxleCBXaWxsaWFtc29uCi0gKiBDb3B5cmlnaHQgKEMpIEJqb3JuIEhlbGdhYXMKLSAqCi0gKiBWZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byBBQ1BJLgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvZWZpLmg+CiAKICNpbmNsdWRlIDxhc20vYWNwaS1leHQuaD4KIAotc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgewotCXU4IGd1aWRfaWQ7Ci0JZWZpX2d1aWRfdCBndWlkOworLyoKKyAqIERldmljZSBDU1JzIHRoYXQgZG8gbm90IGFwcGVhciBpbiBQQ0kgY29uZmlnIHNwYWNlIHNob3VsZCBiZSBkZXNjcmliZWQKKyAqIHZpYSBBQ1BJLiAgVGhpcyB3b3VsZCBub3JtYWxseSBiZSBkb25lIHdpdGggQWRkcmVzcyBTcGFjZSBEZXNjcmlwdG9ycworICogbWFya2VkIGFzICJjb25zdW1lci1vbmx5LCIgYnV0IG9sZCB2ZXJzaW9ucyBvZiBXaW5kb3dzIGFuZCBMaW51eCBpZ25vcmUKKyAqIHRoZSBwcm9kdWNlci9jb25zdW1lciBmbGFnLCBzbyBIUCBpbnZlbnRlZCBhIHZlbmRvci1kZWZpbmVkIHJlc291cmNlIHRvCisgKiBkZXNjcmliZSB0aGUgbG9jYXRpb24gYW5kIHNpemUgb2YgQ1NSIHNwYWNlLgorICovCisKK3N0cnVjdCBhY3BpX3ZlbmRvcl91dWlkIGhwX2Njc3JfdXVpZCA9IHsKKwkuc3VidHlwZSA9IDIsCisJLmRhdGEgPSB7IDB4ZjksIDB4YWQsIDB4ZTksIDB4NjksIDB4NGYsIDB4OTIsIDB4NWYsIDB4YWIsIDB4ZjYsIDB4NGEsCisJICAgIDB4MjQsIDB4ZDIsIDB4MDEsIDB4MzcsIDB4MGUsIDB4YWQgfSwKIH07CiAKLXN0cnVjdCBhY3BpX3ZlbmRvcl9pbmZvIHsKLQlzdHJ1Y3QgYWNwaV92ZW5kb3JfZGVzY3JpcHRvciAqZGVzY3JpcHRvcjsKLQl1OCAqZGF0YTsKLQl1MzIgbGVuZ3RoOwotfTsKLQotYWNwaV9zdGF0dXMKLWFjcGlfdmVuZG9yX3Jlc291cmNlX21hdGNoKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyAqKWNvbnRleHQ7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2VfdmVuZG9yICp2ZW5kb3I7Ci0Jc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgKmRlc2NyaXB0b3I7Ci0JdTMyIGJ5dGVfbGVuZ3RoOwotCi0JaWYgKHJlc291cmNlLT50eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9WRU5ET1IpCi0JCXJldHVybiBBRV9PSzsKLQotCXZlbmRvciA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV92ZW5kb3IgKikmcmVzb3VyY2UtPmRhdGE7Ci0JZGVzY3JpcHRvciA9IChzdHJ1Y3QgYWNwaV92ZW5kb3JfZGVzY3JpcHRvciAqKXZlbmRvci0+Ynl0ZV9kYXRhOwotCWlmICh2ZW5kb3ItPmJ5dGVfbGVuZ3RoIDw9IHNpemVvZigqaW5mby0+ZGVzY3JpcHRvcikgfHwKLQkgICAgZGVzY3JpcHRvci0+Z3VpZF9pZCAhPSBpbmZvLT5kZXNjcmlwdG9yLT5ndWlkX2lkIHx8Ci0JICAgIGVmaV9ndWlkY21wKGRlc2NyaXB0b3ItPmd1aWQsIGluZm8tPmRlc2NyaXB0b3ItPmd1aWQpKQotCQlyZXR1cm4gQUVfT0s7Ci0KLQlieXRlX2xlbmd0aCA9IHZlbmRvci0+Ynl0ZV9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IpOwotCWluZm8tPmRhdGEgPSBhY3BpX29zX2FsbG9jYXRlKGJ5dGVfbGVuZ3RoKTsKLQlpZiAoIWluZm8tPmRhdGEpCi0JCXJldHVybiBBRV9OT19NRU1PUlk7Ci0KLQltZW1jcHkoaW5mby0+ZGF0YSwKLQkgICAgICAgdmVuZG9yLT5ieXRlX2RhdGEgKyBzaXplb2Yoc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IpLAotCSAgICAgICBieXRlX2xlbmd0aCk7Ci0JaW5mby0+bGVuZ3RoID0gYnl0ZV9sZW5ndGg7Ci0JcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOwotfQotCi1hY3BpX3N0YXR1cwotYWNwaV9maW5kX3ZlbmRvcl9yZXNvdXJjZShhY3BpX2hhbmRsZSBvYmosIHN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yICogaWQsCi0JCQkgIHU4ICoqIGRhdGEsIHUzMiAqIGJ5dGVfbGVuZ3RoKQotewotCXN0cnVjdCBhY3BpX3ZlbmRvcl9pbmZvIGluZm87Ci0KLQlpbmZvLmRlc2NyaXB0b3IgPSBpZDsKLQlpbmZvLmRhdGEgPSBOVUxMOwotCi0JYWNwaV93YWxrX3Jlc291cmNlcyhvYmosIE1FVEhPRF9OQU1FX19DUlMsIGFjcGlfdmVuZG9yX3Jlc291cmNlX21hdGNoLAotCQkJICAgICZpbmZvKTsKLQlpZiAoIWluZm8uZGF0YSkKLQkJcmV0dXJuIEFFX05PVF9GT1VORDsKLQotCSpkYXRhID0gaW5mby5kYXRhOwotCSpieXRlX2xlbmd0aCA9IGluZm8ubGVuZ3RoOwotCXJldHVybiBBRV9PSzsKLX0KLQotc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgaHBfY2Nzcl9kZXNjcmlwdG9yID0gewotCS5ndWlkX2lkID0gMiwKLQkuZ3VpZCA9Ci0JICAgIEVGSV9HVUlEKDB4NjllOWFkZjksIDB4OTI0ZiwgMHhhYjVmLCAweGY2LCAweDRhLCAweDI0LCAweGQyLCAweDAxLAotCQkgICAgIDB4MzcsIDB4MGUsIDB4YWQpCi19OwotCi1hY3BpX3N0YXR1cyBocF9hY3BpX2Nzcl9zcGFjZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqIGNzcl9iYXNlLCB1NjQgKiBjc3JfbGVuZ3RoKQorc3RhdGljIGFjcGlfc3RhdHVzIGhwX2Njc3JfbG9jYXRlKGFjcGlfaGFuZGxlIG9iaiwgdTY0ICpiYXNlLCB1NjQgKmxlbmd0aCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTggKmRhdGE7Ci0JdTMyIGxlbmd0aDsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV92ZW5kb3JfdHlwZWQgKnZlbmRvcjsKIAotCXN0YXR1cyA9Ci0JICAgIGFjcGlfZmluZF92ZW5kb3JfcmVzb3VyY2Uob2JqLCAmaHBfY2Nzcl9kZXNjcmlwdG9yLCAmZGF0YSwgJmxlbmd0aCk7CisJc3RhdHVzID0gYWNwaV9nZXRfdmVuZG9yX3Jlc291cmNlKG9iaiwgTUVUSE9EX05BTUVfX0NSUywgJmhwX2Njc3JfdXVpZCwKKwkJJmJ1ZmZlcik7CiAKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgbGVuZ3RoICE9IDE2KQorCXJlc291cmNlID0gYnVmZmVyLnBvaW50ZXI7CisJdmVuZG9yID0gJnJlc291cmNlLT5kYXRhLnZlbmRvcl90eXBlZDsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fCB2ZW5kb3ItPmJ5dGVfbGVuZ3RoIDwgMTYpIHsKKwkJc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KGJhc2UsIHZlbmRvci0+Ynl0ZV9kYXRhLCBzaXplb2YoKmJhc2UpKTsKKwltZW1jcHkobGVuZ3RoLCB2ZW5kb3ItPmJ5dGVfZGF0YSArIDgsIHNpemVvZigqbGVuZ3RoKSk7CisKKyAgZXhpdDoKKwlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0cnVjdCBjc3Jfc3BhY2UgeworCXU2NAliYXNlOworCXU2NAlsZW5ndGg7Cit9OworCitzdGF0aWMgYWNwaV9zdGF0dXMgZmluZF9jc3Jfc3BhY2Uoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjc3Jfc3BhY2UgKnNwYWNlID0gZGF0YTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgYWRkcjsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX3Jlc291cmNlX3RvX2FkZHJlc3M2NChyZXNvdXJjZSwgJmFkZHIpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJgorCSAgICBhZGRyLnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UgJiYKKwkgICAgYWRkci5hZGRyZXNzX2xlbmd0aCAmJgorCSAgICBhZGRyLnByb2R1Y2VyX2NvbnN1bWVyID09IEFDUElfQ09OU1VNRVIpIHsKKwkJc3BhY2UtPmJhc2UgPSBhZGRyLm1pbmltdW07CisJCXNwYWNlLT5sZW5ndGggPSBhZGRyLmFkZHJlc3NfbGVuZ3RoOworCQlyZXR1cm4gQUVfQ1RSTF9URVJNSU5BVEU7CisJfQorCXJldHVybiBBRV9PSzsJCS8qIGtlZXAgbG9va2luZyAqLworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgaHBfY3JzX2xvY2F0ZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqYmFzZSwgdTY0ICpsZW5ndGgpCit7CisJc3RydWN0IGNzcl9zcGFjZSBzcGFjZSA9IHsgMCwgMCB9OworCisJYWNwaV93YWxrX3Jlc291cmNlcyhvYmosIE1FVEhPRF9OQU1FX19DUlMsIGZpbmRfY3NyX3NwYWNlLCAmc3BhY2UpOworCWlmICghc3BhY2UubGVuZ3RoKQogCQlyZXR1cm4gQUVfTk9UX0ZPVU5EOwogCi0JbWVtY3B5KGNzcl9iYXNlLCBkYXRhLCBzaXplb2YoKmNzcl9iYXNlKSk7Ci0JbWVtY3B5KGNzcl9sZW5ndGgsIGRhdGEgKyA4LCBzaXplb2YoKmNzcl9sZW5ndGgpKTsKLQlhY3BpX29zX2ZyZWUoZGF0YSk7Ci0KKwkqYmFzZSA9IHNwYWNlLmJhc2U7CisJKmxlbmd0aCA9IHNwYWNlLmxlbmd0aDsKIAlyZXR1cm4gQUVfT0s7CiB9CiAKK2FjcGlfc3RhdHVzIGhwX2FjcGlfY3NyX3NwYWNlKGFjcGlfaGFuZGxlIG9iaiwgdTY0ICpjc3JfYmFzZSwgdTY0ICpjc3JfbGVuZ3RoKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGhwX2Njc3JfbG9jYXRlKG9iaiwgY3NyX2Jhc2UsIGNzcl9sZW5ndGgpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiBocF9jcnNfbG9jYXRlKG9iaiwgY3NyX2Jhc2UsIGNzcl9sZW5ndGgpOworfQogRVhQT1JUX1NZTUJPTChocF9hY3BpX2Nzcl9zcGFjZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggNzUwZThlNy4uNmUxNmY2YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTYwNiw1ICsxNjA2LDggQEAKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJCS8vIDEyOTUgcmVzZXJ2ZWQgZm9yIHBwb2xsCiAJZGF0YTggc3lzX3Vuc2hhcmUKIAlkYXRhOCBzeXNfc3BsaWNlCisJZGF0YTggc3lzX3NldF9yb2J1c3RfbGlzdAorCWRhdGE4IHN5c19nZXRfcm9idXN0X2xpc3QKKwlkYXRhOCBzeXNfc3luY19maWxlX3JhbmdlCQkvLyAxMzAwCiAKIAkub3JnIHN5c19jYWxsX3RhYmxlICsgOCpOUl9zeXNjYWxscwkvLyBndWFyZCBhZ2FpbnN0IGZhaWx1cmVzIHRvIGluY3JlYXNlIE5SX3N5c2NhbGxzCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCA4OTYzMTcxLi41ZTZmZGJlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTU4MSwxMCArNTgxLDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBpYTY0X21jYV9ub3RpZnlfZGllIG5kID0KKwkJeyAuc29zID0gTlVMTCwgLm1vbmFyY2hfY3B1ID0gJm1vbmFyY2hfY3B1IH07CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKQEAgLTU5NCw3ICs1OTYsNyBAQAogCSAqLwogCWlhNjRfc2FsX21jX3JlbmRleigpOwogCi0JaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKQEAgLTYwMiw3ICs2MDQsNyBAQAogCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KIAotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19MRUFWRSwgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKQEAgLTEwMjMsNiArMTAyNSw4IEBACiAJCSZzb3MtPnByb2Nfc3RhdGVfcGFyYW07CiAJaW50IHJlY292ZXIsIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQ7CisJc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgbmQgPQorCQl7IC5zb3MgPSBzb3MsIC5tb25hcmNoX2NwdSA9ICZtb25hcmNoX2NwdSB9OwogCiAJb29wc19pbl9wcm9ncmVzcyA9IDE7CS8qIEZJWE1FOiBtYWtlIHByaW50ayBOTUkvTUNBL0lOSVQgc2FmZSAqLwogCWNvbnNvbGVfbG9nbGV2ZWwgPSAxNTsJLyogbWFrZSBzdXJlIHByaW50a3MgbWFrZSBpdCB0byBjb25zb2xlICovCkBAIC0xMDMxLDcgKzEwMzUsNyBAQAogCiAJcHJldmlvdXNfY3VycmVudCA9IGlhNjRfbWNhX21vZGlmeV9vcmlnaW5hbF9zdGFjayhyZWdzLCBzdywgc29zLCAiTUNBIik7CiAJbW9uYXJjaF9jcHUgPSBjcHU7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfRU5URVIsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCWlhNjRfd2FpdF9mb3Jfc2xhdmVzKGNwdSk7CkBAIC0xMDQzLDcgKzEwNDcsNyBAQAogCSAqIHNwaW5uaW5nIGluIFNBTCBkb2VzIG5vdCB3b3JrLgogCSAqLwogCWlhNjRfbWNhX3dha2V1cF9hbGwoKTsKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX1BST0NFU1MsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC0xMDY0LDcgKzEwNjgsNyBAQAogCQlpYTY0X3NhbF9jbGVhcl9zdGF0ZV9pbmZvKFNBTF9JTkZPX1RZUEVfTUNBKTsKIAkJc29zLT5vc19zdGF0dXMgPSBJQTY0X01DQV9DT1JSRUNURUQ7CiAJfQotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIHJlY292ZXIpCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0xFQVZFLCAiTUNBIiwgcmVncywgKGxvbmcpJm5kLCAwLCByZWNvdmVyKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIApAQCAtMTM1MSwxMCArMTM1NSwxNCBAQAogCXN0YXRpYyBhdG9taWNfdCBtb25hcmNoczsKIAl0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQ7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaWE2NF9tY2Ffbm90aWZ5X2RpZSBuZCA9CisJCXsgLnNvcyA9IHNvcywgLm1vbmFyY2hfY3B1ID0gJm1vbmFyY2hfY3B1IH07CiAKIAlvb3BzX2luX3Byb2dyZXNzID0gMTsJLyogRklYTUU6IG1ha2UgcHJpbnRrIE5NSS9NQ0EvSU5JVCBzYWZlICovCiAJY29uc29sZV9sb2dsZXZlbCA9IDE1OwkvKiBtYWtlIHN1cmUgcHJpbnRrcyBtYWtlIGl0IHRvIGNvbnNvbGUgKi8KIAorCSh2b2lkKSBub3RpZnlfZGllKERJRV9JTklUX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCk7CisKIAlwcmludGsoS0VSTl9JTkZPICJFbnRlcmVkIE9TIElOSVQgaGFuZGxlci4gUFNQPSVseCBjcHU9JWQgbW9uYXJjaD0lbGRcbiIsCiAJCXNvcy0+cHJvY19zdGF0ZV9wYXJhbSwgY3B1LCBzb3MtPm1vbmFyY2gpOwogCXNhbGluZm9fbG9nX3dha2V1cChTQUxfSU5GT19UWVBFX0lOSVQsIE5VTEwsIDAsIDApOwpAQCAtMTM5MCwxNSArMTM5OCwxNSBAQAogCQlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9JTklUOwogCQl3aGlsZSAobW9uYXJjaF9jcHUgPT0gLTEpCiAJCSAgICAgICBjcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIGVudGVycyAqLwotCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCiAJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7Ci0JCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCiAJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggbGVhdmVzICovCi0JCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCQk9PSBOT1RJRllfU1RPUCkKIAkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJcHJpbnRrKCJTbGF2ZSBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKQEAgLTE0MDksNyArMTQxNyw3IEBACiAJfQogCiAJbW9uYXJjaF9jcHUgPSBjcHU7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfRU5URVIsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIApAQCAtMTQyNiwxMCArMTQzNCwxMCBAQAogCSAqIHRvIGRlZmF1bHRfbW9uYXJjaF9pbml0X3Byb2Nlc3MoKSBhYm92ZSBhbmQganVzdCBwcmludCBhbGwgdGhlCiAJICogdGFza3MuCiAJICovCi0JaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfTEVBVkUsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCiAJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAlwcmludGsoIlxuSU5JVCBkdW1wIGNvbXBsZXRlLiAgTW9uYXJjaCBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKQEAgLTE2MzEsNiArMTYzOSw3IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJJbmNyZWFzaW5nIE1DQSByZW5kZXp2b3VzIHRpbWVvdXQgZnJvbSAiCiAJCQkJIiVsZCB0byAlbGQgbWlsbGlzZWNvbmRzXG4iLCB0aW1lb3V0LCBpc3J2LnYwKTsKIAkJCXRpbWVvdXQgPSBpc3J2LnYwOworCQkJKHZvaWQpIG5vdGlmeV9kaWUoRElFX01DQV9ORVdfVElNRU9VVCwgIk1DQSIsIE5VTEwsIHRpbWVvdXQsIDAsIDApOwogCQkJY29udGludWU7CiAJCX0KIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgcmVuZGV6dm91cyBpbnRlcnJ1cHQgIgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUwppbmRleCA2MGE0NjRiLi42ZGZmMDI0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUwpAQCAtODI3LDcgKzgyNyw3IEBACiAJbGQ4IHI5PVt0ZW1wMl0sMTYJLy8gc2FsX2dwCiAJOzsKIAlsZDggcjIyPVt0ZW1wMV0sMTYJLy8gcGFsX21pbl9zdGF0ZSwgdmlydHVhbAotCWxkOCByMjE9W3RlbXAyXSwxNgkvLyBwcmV2X0lBNjRfS1JfQ1VSUkVOVAorCWxkOCByMTM9W3RlbXAyXSwxNgkvLyBwcmV2X0lBNjRfS1JfQ1VSUkVOVAogCTs7CiAJbGQ4IHIxNj1bdGVtcDFdLDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLCiAJbGQ4IHIyMD1bdGVtcDJdLDE2CS8vIHByZXZfdGFzawpAQCAtODQ4LDcgKzg0OCw3IEBACiAJbW92IGNyLmlpbT10ZW1wMwogCW1vdiBjci5paGE9dGVtcDQKIAlkZXAgcjIyPTAscjIyLDYyLDEJLy8gcGFsX21pbl9zdGF0ZSwgcGh5c2ljYWwsIHVuY2FjaGVkCi0JbW92IElBNjRfS1IoQ1VSUkVOVCk9cjIxCisJbW92IElBNjRfS1IoQ1VSUkVOVCk9cjEzCiAJbGQ4IHI4PVt0ZW1wMV0JCS8vIG9zX3N0YXR1cwogCWxkOCByMTA9W3RlbXAyXQkJLy8gY29udGV4dAogCkBAIC04NTYsNyArODU2LDcgQEAKIAkgKiBhdm9pZCBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBhbGdvcml0aG0gaW4gaWE2NF9zd2l0Y2hfdG8oKSwganVzdAogCSAqIHB1cmdlIGFueSBleGlzdGluZyBDVVJSRU5UX1NUQUNLIG1hcHBpbmcgYW5kIGluc2VydCB0aGUgbmV3IG9uZS4KIAkgKgotCSAqIHIxNiBjb250YWlucyBwcmV2X0lBNjRfS1JfQ1VSUkVOVF9TVEFDSywgcjIxIGNvbnRhaW5zCisJICogcjE2IGNvbnRhaW5zIHByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLLCByMTMgY29udGFpbnMKIAkgKiBwcmV2X0lBNjRfS1JfQ1VSUkVOVCwgdGhlc2UgdmFsdWVzIG1heSBoYXZlIGJlZW4gY2hhbmdlZCBieSB0aGUgQwogCSAqIGNvZGUuICBEbyBub3QgdXNlIHI4LCByOSwgcjEwLCByMjIsIHRoZXkgY29udGFpbiB2YWx1ZXMgcmVhZHkgZm9yCiAJICogdGhlIHJldHVybiB0byBTQUwuCkBAIC04NzMsNyArODczLDcgQEAKIAk7OwogCXNybHouZAogCi0JZXh0ci51IHIxOT1yMjEsNjEsMwkJCS8vIHIyMSA9IHByZXZfSUE2NF9LUl9DVVJSRU5UCisJZXh0ci51IHIxOT1yMTMsNjEsMwkJCS8vIHIxMyA9IHByZXZfSUE2NF9LUl9DVVJSRU5UCiAJc2hsIHIyMD1yMTYsSUE2NF9HUkFOVUxFX1NISUZUCQkvLyByMTYgPSBwcmV2X0lBNjRfS1JfQ1VSUkVOVF9TVEFDSwogCW1vdmwgcjIxPVBBR0VfS0VSTkVMCQkJLy8gcGFnZSBwcm9wZXJ0aWVzCiAJOzsKQEAgLTg4Myw3ICs4ODMsNyBAQAogKHA2KQlici5zcG50IDFmCQkJCS8vIHRoZSBkcmVhZGVkIGNwdSAwIGlkbGUgdGFzayBpbiByZWdpb24gNTooCiAJOzsKIAltb3YgY3IuaXRpcj1yMTgKLQltb3YgY3IuaWZhPXIyMQorCW1vdiBjci5pZmE9cjEzCiAJbW92IHIyMD1JQTY0X1RSX0NVUlJFTlRfU1RBQ0sKIAk7OwogCWl0ci5kIGR0cltyMjBdPXIyMQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggN2EyZjBhNy4uM2EzMGNmYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC05NDcsNyArOTQ3LDcgQEAKIHBlcmNwdV9tb2Rjb3B5ICh2b2lkICpwY3B1ZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCW1lbWNweShwY3B1ZHN0ICsgX19wZXJfY3B1X29mZnNldFtpXSwgc3JjLCBzaXplKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IGFmN2ViMDguLmQ5OGVjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC02MCw2ICs2MCw5IEBACiAJc3RydWN0IHNpZ2luZm8gc2k7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCisJLyogbW1hcF9zZW0gaXMgcGVyZm9ybWFuY2UgY3JpdGljYWwuLi4uICovCisJcHJlZmV0Y2h3KCZtbS0+bW1hcF9zZW0pOworCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQgb3IgaGF2ZSBubyB1c2VyIGNvbnRleHQsIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0Li4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYwppbmRleCBkMGFiZGRkLi44MjU1YTliIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCkBAIC0xODMxLDcgKzE4MzEsNyBAQAogewogCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07CiAJZW51bSB4cGNfcmV0dmFsIHJldCA9IHhwY1Vua25vd25SZWFzb247Ci0Jc3RydWN0IHhwY19tc2cgKm1zZzsKKwlzdHJ1Y3QgeHBjX21zZyAqbXNnID0gTlVMTDsKIAogCiAJREJVR19PTihwYXJ0aWQgPD0gMCB8fCBwYXJ0aWQgPj0gWFBfTUFYX1BBUlRJVElPTlMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCAwNWM4NjRjLi40MWZkNDkwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMjg1LDYgKzI4NSwxMSBAQAogCWRlcGVuZHMgb24gU01QICYmIEJST0tFTgogCWRlZmF1bHQgbgogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICIxIgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiAjIHR1cm5pbmcgdGhpcyBvbiB3YXN0ZXMgYSBidW5jaCBvZiBzcGFjZS4KICMgU3VtbWl0IG5lZWRzIGl0IG9ubHkgd2hlbiBOVU1BIGlzIG9uCiBjb25maWcgQk9PVF9JT1JFTUFQCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCmluZGV4IGJlOGI3MTEuLmM1MDMzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCkBAIC0yMyw5ICsyMyw2IEBACiBFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKIEVYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7Ci1FWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwotRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7Ci1FWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogRVhQT1JUX1NZTUJPTChfX2Rvd24pOwogRVhQT1JUX1NZTUJPTChfX2Rvd25faW50ZXJydXB0aWJsZSk7CkBAIC0zOCwxMyArMzUsNiBAQAogRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKIEVYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOwogCi1FWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfMSk7Ci1FWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfMik7Ci1FWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfNCk7Ci0KLUVYUE9SVF9TWU1CT0woc3RycGJyayk7Ci1FWFBPUlRfU1lNQk9MKHN0cnN0cik7Ci0KIEVYUE9SVF9TWU1CT0woc3RybmNweV9mcm9tX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfX3N0cm5jcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woY2xlYXJfdXNlcik7CkBAIC01OSwxMSArNDksOCBAQAogRVhQT1JUX1NZTUJPTChkY2FjaGVfZHVtbXkpOwogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGNwdV9kYXRhKTsKLUVYUE9SVF9TWU1CT0woY3B1X29ubGluZV9tYXApOwotRVhQT1JUX1NZTUJPTChjcHVfY2FsbG91dF9tYXApOwogCiAvKiBHbG9iYWwgU01QIHN0dWZmICovCi1FWFBPUlRfU1lNQk9MKHN5bmNocm9uaXplX2lycSk7CiBFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKIAogLyogVExCIGZsdXNoaW5nICovCkBAIC04MywyNyArNzAsMTEgQEAKIEVYUE9SVF9TWU1CT0woX19tdWxkaTMpOwogCiAvKiBtZW1vcnkgYW5kIHN0cmluZyBvcGVyYXRpb25zICovCi1FWFBPUlRfU1lNQk9MKG1lbWNocik7CiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7Ci0vKiBFWFBPUlRfU1lNQk9MKG1lbWNweV9mcm9taW8pOyAvLyBub3QgaW1wbGVtZW50IHlldCAqLwotLyogRVhQT1JUX1NZTUJPTChtZW1jcHlfdG9pbyk7IC8vIG5vdCBpbXBsZW1lbnQgeWV0ICovCiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7Ci0vKiBFWFBPUlRfU1lNQk9MKG1lbXNldF9pbyk7IC8vIG5vdCBpbXBsZW1lbnQgeWV0ICovCi1FWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwotRVhQT1JUX1NZTUJPTChtZW1jbXApOwotRVhQT1JUX1NZTUJPTChtZW1zY2FuKTsKIEVYUE9SVF9TWU1CT0woY29weV9wYWdlKTsKIEVYUE9SVF9TWU1CT0woY2xlYXJfcGFnZSk7Ci0KLUVYUE9SVF9TWU1CT0woc3RyY2F0KTsKLUVYUE9SVF9TWU1CT0woc3RyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3RyY21wKTsKLUVYUE9SVF9TWU1CT0woc3RyY3B5KTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3RybmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jbXApOwotRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0woc3RybmNweSk7CiAKIEVYUE9SVF9TWU1CT0woX2luYik7CiBFWFBPUlRfU1lNQk9MKF9pbncpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cC5jCmluZGV4IDBkNzg5NDIuLjNjZDNjMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjE5LDggKzIyMCw2IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBzZXR1cF9tZW1vcnkodm9pZCk7CiAjZW5kaWYJLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwogCi0jZGVmaW5lIE0zMlJfUENDX1BDQVRDUgkweDAwZWY3MDE0CS8qIHdpbGwgbW92ZSB0byBtMzJyLmggKi8KLQogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogCVJPT1RfREVWID0gb2xkX2RlY29kZV9kZXYoT1JJR19ST09UX0RFVik7CkBAIC0yNjksMTUgKzI2OCwxNCBAQAogCXBhZ2luZ19pbml0KCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1IGNwdVtOUl9DUFVTXTsKK3N0YXRpYyBzdHJ1Y3QgY3B1IGNwdV9kZXZpY2VzW05SX0NQVVNdOwogCiBzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCiB7Ci0JaW50IGNwdV9pZDsKKwlpbnQgaTsKIAotCWZvciAoY3B1X2lkID0gMDsgY3B1X2lkIDwgTlJfQ1BVUzsgY3B1X2lkKyspCi0JCWlmIChjcHVfcG9zc2libGUoY3B1X2lkKSkKLQkJCXJlZ2lzdGVyX2NwdSgmY3B1W2NwdV9pZF0sIGNwdV9pZCwgTlVMTCk7CisJZm9yX2VhY2hfcHJlc2VudF9jcHUoaSkKKwkJcmVnaXN0ZXJfY3B1KCZjcHVfZGV2aWNlc1tpXSwgaSwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKaW5kZXggZDdlYzE2ZS4uODQwYjQzNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKQEAgLTM5LDggKzM5LDEwIEBACiAgKgkJTWFydGluIEouIEJsaWdoCTogCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpLXF1YWQgc3lzdGVtcwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpAQCAtNzIsMTEgKzc0LDE1IEBACiAKIC8qIEJpdG1hc2sgb2YgY3VycmVudGx5IG9ubGluZSBDUFVzICovCiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CitFWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKIAogY3B1bWFza190IGNwdV9ib290b3V0X21hcDsKIGNwdW1hc2tfdCBjcHVfYm9vdGluX21hcDsKLWNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CiBzdGF0aWMgY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOworY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKK0VYUE9SVF9TWU1CT0woY3B1X2NhbGxvdXRfbWFwKTsKK2NwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwID0gQ1BVX01BU0tfQUxMOworRVhQT1JUX1NZTUJPTChjcHVfcG9zc2libGVfbWFwKTsKIAogLyogUGVyIENQVSBib2dvbWlwcyBhbmQgb3RoZXIgcGFyYW1ldGVycyAqLwogc3RydWN0IGNwdWluZm9fbTMyciBjcHVfZGF0YVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwpAQCAtMTEwLDcgKzExNiw2IEBACiAKIHZvaWQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCk7CiB2b2lkIHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCk7CiBzdGF0aWMgdm9pZCBpbml0X2lwaV9sb2NrKHZvaWQpOwogc3RhdGljIHZvaWQgZG9fYm9vdF9jcHUoaW50KTsKIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQpOwpAQCAtMTc3LDYgKzE4Miw5IEBACiAJfQogCWZvciAocGh5c19pZCA9IDAgOyBwaHlzX2lkIDwgbnJfY3B1IDsgcGh5c19pZCsrKQogCQlwaHlzaWRfc2V0KHBoeXNfaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKyNpZm5kZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJY3B1X3ByZXNlbnRfbWFwID0gY3B1X3Bvc3NpYmxlX21hcDsKKyNlbmRpZgogCiAJc2hvd19tcF9pbmZvKG5yX2NwdSk7CiAKQEAgLTE4Niw3ICsxOTQsNiBAQAogCSAqIFNldHVwIGJvb3QgQ1BVIGluZm9ybWF0aW9uCiAJICovCiAJc21wX3N0b3JlX2NwdV9pbmZvKDApOyAvKiBGaW5hbCBmdWxsIHZlcnNpb24gb2YgdGhlIGRhdGEgKi8KLQlzbXBfdHVuZV9zY2hlZHVsaW5nKCk7CiAKIAkvKgogCSAqIElmIFNNUCBzaG91bGQgYmUgZGlzYWJsZWQsIHRoZW4gcmVhbGx5IGRpc2FibGUgaXQhCkBAIC0yMzAsMTEgKzIzNyw2IEBACiAJRHByaW50aygiQm9vdCBkb25lLlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfdHVuZV9zY2hlZHVsaW5nKHZvaWQpCi17Ci0JLyogTm90aGluZyB0byBkby4gKi8KLX0KLQogLyoKICAqIGluaXRfaXBpX2xvY2sgOiBJbml0aWFsaXplIElQSSBsb2Nrcy4KICAqLwpAQCAtNjI5LDQgKzYzMSwzIEBACiAJcGh5c2lkXzJfY3B1W3BoeXNfaWRdID0gLTE7CiAJY3B1XzJfcGh5c2lkW2NwdV9pZF0gPSAtMTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9NYWtlZmlsZSBiL2FyY2gvbTMyci9saWIvTWFrZWZpbGUKaW5kZXggZTYzMmQxMC4uZDE2YjRlNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL20zMnIvbGliL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgTTMyUi1zcGVjaWZpYyBsaWJyYXJ5IGZpbGVzLi4KICMKIAotbGliLXkgIDo9IGNoZWNrc3VtLm8gYXNoeGRpMy5vIG1lbXNldC5vIG1lbWNweS5vIGdldHVzZXIubyBcCi0JICBwdXR1c2VyLm8gZGVsYXkubyBzdHJsZW4ubyB1c2VyY29weS5vIGNzdW1fcGFydGlhbF9jb3B5Lm8KK2xpYi15ICA6PSBjaGVja3N1bS5vIGFzaHhkaTMubyBtZW1zZXQubyBtZW1jcHkubyBcCisJICBkZWxheS5vIHN0cmxlbi5vIHVzZXJjb3B5Lm8gY3N1bV9wYXJ0aWFsX2NvcHkubwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL2dldHVzZXIuUyBiL2FyY2gvbTMyci9saWIvZ2V0dXNlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGEwZGIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTMyci9saWIvZ2V0dXNlci5TCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIF9fZ2V0X3VzZXIgZnVuY3Rpb25zLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMSBIaXJva2F6dSBUYWthdGEKLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsIGludGVyZmFjZQotICogdG8gbWFrZSB0aGVtIG1vcmUgZWZmaWNpZW50LCBlc3BlY2lhbGx5IGFzIHRoZXkKLSAqIHJldHVybiBhbiBlcnJvciB2YWx1ZSBpbiBhZGRpdGlvbiB0byB0aGUgInJlYWwiCi0gKiByZXR1cm4gdmFsdWUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0vKgotICogX19nZXRfdXNlcl9YCi0gKgotICogSW5wdXRzOglyMCBjb250YWlucyB0aGUgYWRkcmVzcwotICoKLSAqIE91dHB1dHM6CXIwIGlzIGVycm9yIGNvZGUgKDAgb3IgLUVGQVVMVCkKLSAqCQlyMSBjb250YWlucyB6ZXJvLWV4dGVuZGVkIHZhbHVlCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBub3QgbW9kaWZ5IGFueSBvdGhlciByZWdpc3RlcnMsCi0gKiBhcyB0aGV5IGdldCBjYWxsZWQgZnJvbSB3aXRoaW4gaW5saW5lIGFzc2VtYmx5LgotICovCi0KLSNpZmRlZiBDT05GSUdfSVNBX0RVQUxfSVNTVUUKLQotCS50ZXh0Ci0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMQotX19nZXRfdXNlcl8xOgotMToJbGR1YglyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzIKLV9fZ2V0X3VzZXJfMjoKLTI6CWxkdWgJcjEsIEByMAkJICAgIHx8CWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl80Ci1fX2dldF91c2VyXzQ6Ci0zOglsZAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotYmFkX2dldF91c2VyOgotCWxkaQlyMSwgIzAJCSAgICB8fAlsZGkJcjAsICMtMTQKLQlqbXAJcjE0Ci0KLSNlbHNlIC8qIG5vdCBDT05GSUdfSVNBX0RVQUxfSVNTVUUgKi8KLQotCS50ZXh0Ci0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMQotX19nZXRfdXNlcl8xOgotMToJbGR1YglyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzIKLV9fZ2V0X3VzZXJfMjoKLTI6CWxkdWgJcjEsIEByMAotCWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl80Ci1fX2dldF91c2VyXzQ6Ci0zOglsZAlyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotYmFkX2dldF91c2VyOgotCWxkaQlyMSwgIzAKLQlsZGkJcjAsICMtMTQKLQlqbXAJcjE0Ci0KLSNlbmRpZiAvKiBub3QgQ09ORklHX0lTQV9EVUFMX0lTU1VFICovCi0KLS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmxvbmcgMWIsYmFkX2dldF91c2VyCi0JLmxvbmcgMmIsYmFkX2dldF91c2VyCi0JLmxvbmcgM2IsYmFkX2dldF91c2VyCi0ucHJldmlvdXMKLQotCS5lbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvcHV0dXNlci5TIGIvYXJjaC9tMzJyL2xpYi9wdXR1c2VyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxODE1NGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tMzJyL2xpYi9wdXR1c2VyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogX19wdXRfdXNlciBmdW5jdGlvbnMuCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk4IExpbnVzIFRvcnZhbGRzCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEgSGlyb2thenUgVGFrYXRhCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBub24tc3RhbmRhcmQgY2FsbCBpbnRlcmZhY2UKLSAqIHRvIG1ha2UgdGhlbSBtb3JlIGVmZmljaWVudC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLS8qCi0gKiBfX3B1dF91c2VyX1gKLSAqCi0gKiBJbnB1dHM6CXIwIGNvbnRhaW5zIHRoZSBhZGRyZXNzCi0gKgkJcjEgY29udGFpbnMgdGhlIHZhbHVlCi0gKgotICogT3V0cHV0czoJcjAgaXMgZXJyb3IgY29kZSAoMCBvciAtRUZBVUxUKQotICoJCXIxIGlzIGNvcnJ1cHRlZCAod2lsbCBjb250YWluICJjdXJyZW50X3Rhc2siKS4KLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBtb2RpZnkgYW55IG90aGVyIHJlZ2lzdGVycywKLSAqIGFzIHRoZXkgZ2V0IGNhbGxlZCBmcm9tIHdpdGhpbiBpbmxpbmUgYXNzZW1ibHkuCi0gKi8KLQotI2lmZGVmIENPTkZJR19JU0FfRFVBTF9JU1NVRQotCi0JLnRleHQKLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19wdXRfdXNlcl8xCi1fX3B1dF91c2VyXzE6Ci0xOglzdGIJcjEsIEByMAkJICAgIHx8CWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19wdXRfdXNlcl8yCi1fX3B1dF91c2VyXzI6Ci0yOglzdGgJcjEsIEByMAkJICAgIHx8CWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19wdXRfdXNlcl80Ci1fX3B1dF91c2VyXzQ6Ci0zOglzdAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotYmFkX3B1dF91c2VyOgotCWxkaQlyMCwgIy0xNAkgICAgfHwJam1wCXIxNAotCi0jZWxzZSAvKiBub3QgQ09ORklHX0lTQV9EVUFMX0lTU1VFICovCi0KLQkudGV4dAotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzEKLV9fcHV0X3VzZXJfMToKLTE6CXN0YglyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzIKLV9fcHV0X3VzZXJfMjoKLTI6CXN0aAlyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzQKLV9fcHV0X3VzZXJfNDoKLTM6CXN0CXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfcHV0X3VzZXI6Ci0JbGRpCXIwLCAjLTE0Ci0Jam1wCXIxNAotCi0jZW5kaWYgLyogbm90IENPTkZJR19JU0FfRFVBTF9JU1NVRSAqLwotCi0uc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5sb25nIDFiLGJhZF9wdXRfdXNlcgotCS5sb25nIDJiLGJhZF9wdXRfdXNlcgotCS5sb25nIDNiLGJhZF9wdXRfdXNlcgotLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCmluZGV4IGMzMzE5NTEuLjViNzk1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC01Nyw3ICs1Nyw2IEBACiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9tNjhrX2tzeW1zLmMKaW5kZXggZjliNGVhMS4uNDMyMGQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC0yNiw3ICsyNiw2IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGUxNTcwOWMuLjdhZWM2MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xNTkwLDYgKzE1OTAsMTEgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiAhTlVNQQogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICI2IgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBTTVAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKaW5kZXggODZlNDJjNi4uZTA0MmY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKQEAgLTM5LDcgKzM5LDYgQEAKIEVYUE9SVF9TWU1CT0woc3RybmNtcCk7CiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCAyZmRmMjE5Li4xOWY5MTFjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTE3Nyw2ICsxNzcsMTEgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiMyIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0Igogc291cmNlICJrZXJuZWwvS2NvbmZpZy5oeiIKIHNvdXJjZSAibW0vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYwppbmRleCA0N2NhNWMwLi5mYzEwN2FkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiBFWFBPUlRfU1lNQk9MKF9feGNoZzgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAyY2RjMzVjLi4xNjdlNzBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtNjQ5LDYgKzY0OSwxMSBAQAogCWRlcGVuZHMgb24gUFBDNjQKIAlkZWZhdWx0IHkgaWYgU01QICYmIFBQQ19QU0VSSUVTCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjQiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIGNvbmZpZyBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBQUEM2NApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9saWIvTWFrZWZpbGUgYi9hcmNoL3BwYy9ib290L2xpYi9NYWtlZmlsZQppbmRleCBkNDA3N2U2Li44MGM4NGQ1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9ib290L2xpYi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogQ0ZMQUdTX2tiZC5vCTo9IC1JZHJpdmVycy9jaGFyCi1DRkxBR1NfdnJlc2V0Lm8gOj0gLUkkKHNyY3RyZWUpL2FyY2gvcHBjL2Jvb3QvaW5jbHVkZQorQ0ZMQUdTX3ZyZXNldC5vIDo9IC1JYXJjaC9wcGMvYm9vdC9pbmNsdWRlCiAKIHpsaWIgIDo9IGluZmJsb2NrLmMgaW5mY29kZXMuYyBpbmZmYXN0LmMgaW5mbGF0ZS5jIGluZnRyZWVzLmMgaW5mdXRpbC5jCiAJIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL01ha2VmaWxlIGIvYXJjaC9zMzkwL01ha2VmaWxlCmluZGV4IDZjNmIxOTcuLjdiYjE2ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvTWFrZWZpbGUKQEAgLTY3LDcgKzY3LDYgQEAKIGVuZGlmCiAKIENGTEFHUwkJKz0gLW1iYWNrY2hhaW4gLW1zb2Z0LWZsb2F0ICQoY2ZsYWdzLXkpCi1DRkxBR1MJCSs9ICQoY2FsbCBjYy1vcHRpb24sLWZpbmxpbmUtbGltaXQ9MTAwMDApCiBDRkxBR1MgCQkrPSAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtV25vLXNpZ24tY29tcGFyZSAKIEFGTEFHUwkJKz0gJChhZmxhZ3MteSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggZjhkMGNkNS4uZjRkZmMxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDEwICsxLDExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCi0jIFdlZCBGZWIgIDggMTA6NDQ6MzkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQorIyBNb24gQXByICAzIDE0OjM0OjE1IDIwMDYKICMKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19TMzkwPXkKIApAQCAtMzAsOCArMzEsOCBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNDUsMTAgKzQ2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNjAsNyArNTcsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTY5LDcgKzY1LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05MSwxNyArODcsMjAgQEAKICMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiAjCi0jIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfNjRCSVQ9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0zMgogQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19NQVRIRU1VPXkKK0NPTkZJR19ERUZBVUxUX01JR1JBVElPTl9DT1NUPTEwMDAwMDAKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKK0NPTkZJR19CSU5GTVRfRUxGMzI9eQogCiAjCiAjIENvZGUgZ2VuZXJhdGlvbiBvcHRpb25zCiAjCi1DT05GSUdfTUFSQ0hfRzU9eQotIyBDT05GSUdfTUFSQ0hfWjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJDSF9HNSBpcyBub3Qgc2V0CitDT05GSUdfTUFSQ0hfWjkwMD15CiAjIENPTkZJR19NQVJDSF9aOTkwIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLX1NUQUNLPXkKICMgQ09ORklHX1NNQUxMX1NUQUNLIGlzIG5vdCBzZXQKQEAgLTE0Myw3ICsxNDIsNyBAQAogIyBDT05GSUdfQVBQTERBVEFfQkFTRSBpcyBub3Qgc2V0CiBDT05GSUdfTk9fSURMRV9IWj15CiBDT05GSUdfTk9fSURMRV9IWl9JTklUPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMTczLDYgKzE3Miw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0xODAsOSArMTgwLDExIEBACiBDT05GSUdfVENQX0NPTkdfQklDPXkKIENPTkZJR19JUFY2PXkKICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC0yNzYsNiArMjc4LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CkBAIC0zNDAsOCArMzQ3LDcgQEAKIENPTkZJR19EQVNEX0VDS0Q9eQogQ09ORklHX0RBU0RfRkJBPXkKIENPTkZJR19EQVNEX0RJQUc9eQotQ09ORklHX0RBU0RfRUVSPW0KLSMgQ09ORklHX0RBU0RfQ01CIGlzIG5vdCBzZXQKK0NPTkZJR19EQVNEX0VFUj15CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCkBAIC0zNTQsNiArMzYwLDcgQEAKIENPTkZJR19NRF9SQUlEMT1tCiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ1PW0KKyMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldApAQCAtNDA0LDYgKzQxMSw3IEBACiAjIFMvMzkwIHRhcGUgaGFyZHdhcmUgc3VwcG9ydAogIwogQ09ORklHX1MzOTBfVEFQRV8zNFhYPW0KKyMgQ09ORklHX1MzOTBfVEFQRV8zNTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNTE9HUkRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTU9OUkVBREVSIGlzIG5vdCBzZXQKQEAgLTUyOSw3ICs1MzcsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOSwxNCArNjI2LDE1IEBACiAjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDU4NTgzZjQuLjJiY2VjZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTUyNyw2ICs1MjcsMTEgQEAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NoL3JlZ2lzdGVyLWJhbmtzLnR4dD4gZm9yIGZ1cnRoZXIKIAkgIGluZm9ybWF0aW9uIG9uIFNSLlJCIGFuZCByZWdpc3RlciBiYW5raW5nIGluIHRoZSBrZXJuZWwgaW4gZ2VuZXJhbC4KIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiMSIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogZW5kbWVudQogCiBtZW51ICJCb290IG9wdGlvbnMiCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwppbmRleCAxY2Y5NGE2Li5kNWQwMzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKQEAgLTM3LDcgKzM3LDYgQEAKIEVYUE9SVF9TWU1CT0woaXJxX2Rlc2MpOwogRVhQT1JUX1NZTUJPTChub19pcnFfdHlwZSk7CiAKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jIGIvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IGRlMjljNDUuLjZmM2ExYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMKQEAgLTQxLDcgKzQxLDYgQEAKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weSk7CiAKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiAKICNpZmRlZiBDT05GSUdfVlQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKaW5kZXggMmJlODEyMS4uYTkzZjVkYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWxvYWRfcHJvZmlsZV9pcnEoaSwgbHZsMTRfcmVzb2x1dGlvbiAvIG11bHRpcGxpZXIpOwogCQlwcm9mX211bHRpcGxpZXIoaSkgPSBtdWx0aXBsaWVyOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCmluZGV4IDJjMjFkNzkuLmVjMWM5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYwpAQCAtMjYzLDcgKzI2Myw2IEBACiBFWFBPUlRfU1lNQk9MKHN0cm5jbXApOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHBhZ2Vfa2VybmVsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggZjg0YTlhNi4uODEzNjk4NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogb2JqLXkgICAgOj0gbWF0aC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAtYW5zaQotRVhUUkFfQ0ZMQUdTID0gLUkuIC1JJChUT1BESVIpL2luY2x1ZGUvbWF0aC1lbXUgLXcKK0VYVFJBX0NGTEFHUyA9IC1JLiAtSWluY2x1ZGUvbWF0aC1lbXUgLXcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9LY29uZmlnIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKaW5kZXggZDFlMmZjNS4uNjQ4MDQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L0tjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKQEAgLTE5NCw2ICsxOTQsOSBAQAogCiBlbmRtZW51CiAKK2NvbmZpZyBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCmluZGV4IDMwMzg5MDguLjEzMTczODAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKICMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNgotIyBGcmkgTWFyIDMxIDAxOjQwOjU3IDIwMDYKKyMgU3VuIEFwciAgMiAxOTozMTowNCAyMDA2CiAjCiBDT05GSUdfU1BBUkM9eQogQ09ORklHX1NQQVJDNjQ9eQpAQCAtODM4LDcgKzgzOCw2IEBACiAjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKIENPTkZJR19GQl9SQURFT05fSTJDPXkKICMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CkBAIC05MjQsNiArOTIzLDcgQEAKICMgUENJIGRldmljZXMKICMKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FMSTU0NTE9bQogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTk1NSw2ICs5NTUsNyBAQAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldApAQCAtMTEwOSw2ICsxMTEwLDExIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCmluZGV4IDkzNzJkNGYuLjllOTRkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAkJfQogCX0KIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdW5zaWduZWQgbG9uZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCiAJCWlmICghcGFnZSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IGViOTNlOWMuLjQ5ZTZkZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjQ0LDYgKzI0NCwxMyBAQAogCX0KIAogCXN3aXRjaChyZXF1ZXN0KSB7CisJY2FzZSBQVFJBQ0VfUEVFS1VTUjoKKwkJaWYgKGFkZHIgIT0gMCkKKwkJCXB0X2Vycm9yX3JldHVybihyZWdzLCBFSU8pOworCQllbHNlCisJCQlwdF9zdWNjX3JldHVybihyZWdzLCAwKTsKKwkJZ290byBvdXRfdHNrOworCiAJY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6IC8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLyAKIAljYXNlIFBUUkFDRV9QRUVLREFUQTogewogCQl1bnNpZ25lZCBsb25nIHRtcDY0OwpAQCAtNjAyLDYgKzYwOSwyMiBAQAogCiAJLyogUFRSQUNFX0RVTVBDT1JFIHVuc3VwcG9ydGVkLi4uICovCiAKKwljYXNlIFBUUkFDRV9HRVRFVkVOVE1TRzogeworCQlpbnQgZXJyOworCisJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpCisJCQllcnIgPSBwdXRfdXNlcihjaGlsZC0+cHRyYWNlX21lc3NhZ2UsCisJCQkJICAgICAgICh1bnNpZ25lZCBpbnQgX191c2VyICopIGRhdGEpOworCQllbHNlCisJCQllcnIgPSBwdXRfdXNlcihjaGlsZC0+cHRyYWNlX21lc3NhZ2UsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSBkYXRhKTsKKwkJaWYgKGVycikKKwkJCXB0X2Vycm9yX3JldHVybihyZWdzLCAtZXJyKTsKKwkJZWxzZQorCQkJcHRfc3VjY19yZXR1cm4ocmVncywgMCk7CisJCWJyZWFrOworCX0KKwogCWRlZmF1bHQ6IHsKIAkJaW50IGVyciA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA3ZDBlNjdjLi4wMDUxNjdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAl3aGlsZSAoIWNwdV9maW5kX2J5X2luc3RhbmNlKG5jcHVzX3Byb2JlZCwgTlVMTCwgTlVMTCkpCiAJCW5jcHVzX3Byb2JlZCsrOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3QgY3B1ICpwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHApIHsKIAkJCXJlZ2lzdGVyX2NwdShwLCBpLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCmluZGV4IDgxNzVhNjkuLjkwZWFjYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwpAQCAtNzQ1LDEyICs3NDUsMjEgQEAKIAlpbnQgd2FpdDsKIH07CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FsbF9sb2NrKTsKK3N0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0soY2FsbF9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCAqY2FsbF9kYXRhOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9jYWxsX2Z1bmN0aW9uOwogCi0vKgorLyoqCisgKiBzbXBfY2FsbF9mdW5jdGlvbigpOiBSdW4gYSBmdW5jdGlvbiBvbiBhbGwgb3RoZXIgQ1BVcy4KKyAqIEBmdW5jOiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgorICogQGluZm86IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgorICogQG5vbmF0b21pYzogY3VycmVudGx5IHVudXNlZC4KKyAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4gRG9lcyBub3QgcmV0dXJuIHVudGlsCisgKiByZW1vdGUgQ1BVcyBhcmUgbmVhcmx5IHJlYWR5IHRvIGV4ZWN1dGUgPDxmdW5jPj4gb3IgYXJlIG9yIGhhdmUgZXhlY3V0ZWQuCisgKgogICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCiAgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KICAqLwpAQCAtNzU5LDcgKzc2OCw2IEBACiB7CiAJc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgZGF0YTsKIAlpbnQgY3B1czsKLQlsb25nIHRpbWVvdXQ7CiAKIAkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCiAJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwpAQCAtNzc3LDMxICs3ODUsMTggQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJY2FsbF9kYXRhID0gJmRhdGE7CisJbWIoKTsKIAogCXNtcF9jcm9zc19jYWxsX21hc2tlZCgmeGNhbGxfY2FsbF9mdW5jdGlvbiwgMCwgMCwgMCwgbWFzayk7CiAKLQkvKiAKLQkgKiBXYWl0IGZvciBvdGhlciBjcHVzIHRvIGNvbXBsZXRlIGZ1bmN0aW9uIG9yIGF0Ci0JICogbGVhc3Qgc25hcCB0aGUgY2FsbCBkYXRhLgotCSAqLwotCXRpbWVvdXQgPSAxMDAwMDAwOwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gY3B1cykgewotCQlpZiAoLS10aW1lb3V0IDw9IDApCi0JCQlnb3RvIG91dF90aW1lb3V0OwotCQliYXJyaWVyKCk7Ci0JCXVkZWxheSgxKTsKLQl9CisJLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpICE9IGNwdXMpCisJCWNwdV9yZWxheCgpOwogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwogCiAJcmV0dXJuIDA7Ci0KLW91dF90aW1lb3V0OgotCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwotCXByaW50aygiWENBTEw6IFJlbW90ZSBjcHVzIG5vdCByZXNwb25kaW5nLCBuY3B1cz0lZCBmaW5pc2hlZD0lZFxuIiwKLQkgICAgICAgY3B1cywgYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpKTsKLQlyZXR1cm4gMDsKIH0KIAogaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKQEAgLTEyODUsNyArMTI4MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByb2Zfc2V0dXBfbG9jaywgZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShpKQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlwcm9mX211bHRpcGxpZXIoaSkgPSBtdWx0aXBsaWVyOwogCWN1cnJlbnRfdGlja19vZmZzZXQgPSAodGltZXJfdGlja19vZmZzZXQgLyBtdWx0aXBsaWVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKQEAgLTEzMTMsMTIgKzEzMDgsMTIgQEAKIAkJfQogCX0KIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKIAkJCWludCBqOwogCiAJCQkvKiBYWFggZ2V0IHRoaXMgbWFwcGluZyBmcm9tIG1hY2hpbmUgZGVzY3JpcHRpb24gKi8KLQkJCWZvcl9lYWNoX2NwdShqKSB7CisJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaikgewogCQkJCWlmICgoaiA+PiAyKSA9PSAoaSA+PiAyKSkKIAkJCQkJY3B1X3NldChqLCBjcHVfc2libGluZ19tYXBbaV0pOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwppbmRleCBmNWU4ZGIxLi42MmQ4YTk5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwpAQCAtMjc2LDcgKzI3Niw2IEBACiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MKF9fc3RybGVuX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfX3N0cm5sZW5fdXNlcik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogCiAjaWZkZWYgQ09ORklHX1NPTEFSSVNfRU1VTF9NT0RVTEUKIEVYUE9SVF9TWU1CT0wobGludXhfc3BhcmNfc3lzY2FsbCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZmYwOTBiYi4uMjc5M2E1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTEzMCw5ICsxMTMwLDkgQEAKIAkgICAgICAgKHJlY292ZXJhYmxlID8gS0VSTl9XQVJOSU5HIDogS0VSTl9DUklUKSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCSAgICAgICBhZnNyLCBhZmFyLAogCSAgICAgICAoYWZzciAmIENIQUZTUl9UTDEpID8gMSA6IDApOwotCXByaW50aygiJXMiICJFUlJPUiglZCk6IFRQQ1slMDE2bHhdIFROUENbJTAxNmx4XSBUU1RBVEVbJTAxNmx4XVxuIiwKKwlwcmludGsoIiVzIiAiRVJST1IoJWQpOiBUUENbJWx4XSBUTlBDWyVseF0gTzdbJWx4XSBUU1RBVEVbJWx4XVxuIiwKIAkgICAgICAgKHJlY292ZXJhYmxlID8gS0VSTl9XQVJOSU5HIDogS0VSTl9DUklUKSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAotCSAgICAgICByZWdzLT50cGMsIHJlZ3MtPnRucGMsIHJlZ3MtPnRzdGF0ZSk7CisJICAgICAgIHJlZ3MtPnRwYywgcmVncy0+dG5wYywgcmVncy0+dV9yZWdzW1VSRUdfSTddLCByZWdzLT50c3RhdGUpOwogCXByaW50aygiJXMiICJFUlJPUiglZCk6IE1fU1lORCglbHgpLCAgRV9TWU5EKCVseCklcyVzXG4iLAogCSAgICAgICAocmVjb3ZlcmFibGUgPyBLRVJOX1dBUk5JTkcgOiBLRVJOX0NSSVQpLCBzbXBfcHJvY2Vzc29yX2lkKCksCiAJICAgICAgIChhZnNyICYgQ0hBRlNSX01fU1lORFJPTUUpID4+IENIQUZTUl9NX1NZTkRST01FX1NISUZULApkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZSBiL2FyY2gvdW0vTWFrZWZpbGUKaW5kZXggMjQ3OTBiZS4uYTUwOGU3YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZQorKysgYi9hcmNoL3VtL01ha2VmaWxlCkBAIC0xNTksNiArMTU5LDcgQEAKICQoU1lNTElOS19IRUFERVJTKToKIAlAZWNobyAnICBTWU1MSU5LICRAJwogaWZuZXEgKCQoS0JVSUxEX1NSQyksKQorCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL2luY2x1ZGUvYXNtLXVtCiAJJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS11bS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSktJChTVUJBUkNIKSQoc3VmZml4ICRAKSAkQAogZWxzZQogCSQoUSljZCAkKFRPUERJUikvJChkaXIgJEApIDsgXApAQCAtMTY4LDcgKzE2OSw3IEBACiBpbmNsdWRlL2FzbS11bS9hcmNoOgogCUBlY2hvICcgIFNZTUxJTksgJEAnCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCi0JJChRKW1rZGlyIC1wIGluY2x1ZGUvYXNtLXVtCisJJChRKW1rZGlyIC1wICQob2JqdHJlZSkvaW5jbHVkZS9hc20tdW0KIAkkKFEpbG4gLWZzbiAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoU1VCQVJDSCkgaW5jbHVkZS9hc20tdW0vYXJjaAogZWxzZQogCSQoUSljZCAkKFRPUERJUikvaW5jbHVkZS9hc20tdW0gJiYgbG4gLXNmIC4uL2FzbS0kKFNVQkFSQ0gpIGFyY2gKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jb3cuaCBiL2FyY2gvdW0vZHJpdmVycy9jb3cuaAppbmRleCAwNGUzOTU4Li5kYzM2YjIyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY293LmgKKysrIGIvYXJjaC91bS9kcml2ZXJzL2Nvdy5oCkBAIC00Niw3ICs0Niw3IEBACiBleHRlcm4gaW50IHJlYWRfY293X2hlYWRlcihpbnQgKCpyZWFkZXIpKF9fdTY0LCBjaGFyICosIGludCwgdm9pZCAqKSwKIAkJCSAgIHZvaWQgKmFyZywgX191MzIgKnZlcnNpb25fb3V0LAogCQkJICAgY2hhciAqKmJhY2tpbmdfZmlsZV9vdXQsIHRpbWVfdCAqbXRpbWVfb3V0LAotCQkJICAgX191NjQgKnNpemVfb3V0LCBpbnQgKnNlY3RvcnNpemVfb3V0LAorCQkJICAgdW5zaWduZWQgbG9uZyBsb25nICpzaXplX291dCwgaW50ICpzZWN0b3JzaXplX291dCwKIAkJCSAgIF9fdTMyICphbGlnbl9vdXQsIGludCAqYml0bWFwX29mZnNldF9vdXQpOwogCiBleHRlcm4gaW50IHdyaXRlX2Nvd19oZWFkZXIoY2hhciAqY293X2ZpbGUsIGludCBmZCwgY2hhciAqYmFja2luZ19maWxlLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2Nvd19zeXMuaCBiL2FyY2gvdW0vZHJpdmVycy9jb3dfc3lzLmgKaW5kZXggOTRkZTRlYS4uN2E1YjRhZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2Nvd19zeXMuaAorKysgYi9hcmNoL3VtL2RyaXZlcnMvY293X3N5cy5oCkBAIC0yOCw3ICsyOCw3IEBACiAJcmV0dXJuKG9zX3NlZWtfZmlsZShmZCwgb2Zmc2V0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvd19maWxlX3NpemUoY2hhciAqZmlsZSwgX191NjQgKnNpemVfb3V0KQorc3RhdGljIGlubGluZSBpbnQgY293X2ZpbGVfc2l6ZShjaGFyICpmaWxlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemVfb3V0KQogewogCXJldHVybihvc19maWxlX3NpemUoZmlsZSwgc2l6ZV9vdXQpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jb3dfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMKaW5kZXggNjE5NTFiNy4uMGVjNDA1MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMKQEAgLTE3LDMwICsxNywzNCBAQAogCiAjZGVmaW5lIFBBVEhfTEVOX1YxIDI1NgogCi1zdHJ1Y3QgY293X2hlYWRlcl92MSB7Ci0JaW50IG1hZ2ljOwotCWludCB2ZXJzaW9uOwotCWNoYXIgYmFja2luZ19maWxlW1BBVEhfTEVOX1YxXTsKLQl0aW1lX3QgbXRpbWU7Ci0JX191NjQgc2l6ZTsKLQlpbnQgc2VjdG9yc2l6ZTsKLX07Cit0eXBlZGVmIF9fdTMyIHRpbWUzMl90OwogCi0jZGVmaW5lIFBBVEhfTEVOX1YyIE1BWFBBVEhMRU4KK3N0cnVjdCBjb3dfaGVhZGVyX3YxIHsKKwlfX3MzMiBtYWdpYzsKKwlfX3MzMiB2ZXJzaW9uOworCWNoYXIgYmFja2luZ19maWxlW1BBVEhfTEVOX1YxXTsKKwl0aW1lMzJfdCBtdGltZTsKKwlfX3U2NCBzaXplOworCV9fczMyIHNlY3RvcnNpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBEZWZpbmUgUEFUSF9MRU5fVjMgYXMgdGhlIHVzdWFsIHZhbHVlIG9mIE1BWFBBVEhMRU4sIGp1c3QgaGFyZC1jb2RlIGl0IGluCisgKiBjYXNlIG90aGVyIHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciBNQVhQQVRITEVOLgorICoKKyAqIFRoZSBzYW1lIG11c3QgaG9sZCBmb3IgVjIgLSB3ZSB3YW50IGZpbGUgZm9ybWF0IGNvbXBhdGliaWxpdHksIG5vdCBhbnl0aGluZworICogZWxzZS4KKyAqLworI2RlZmluZSBQQVRIX0xFTl9WMyA0MDk2CisjZGVmaW5lIFBBVEhfTEVOX1YyIFBBVEhfTEVOX1YzCiAKIHN0cnVjdCBjb3dfaGVhZGVyX3YyIHsKIAlfX3UzMiBtYWdpYzsKIAlfX3UzMiB2ZXJzaW9uOwogCWNoYXIgYmFja2luZ19maWxlW1BBVEhfTEVOX1YyXTsKLQl0aW1lX3QgbXRpbWU7CisJdGltZTMyX3QgbXRpbWU7CiAJX191NjQgc2l6ZTsKLQlpbnQgc2VjdG9yc2l6ZTsKLX07Ci0KLS8qIERlZmluZSBQQVRIX0xFTl9WMyBhcyB0aGUgdXN1YWwgdmFsdWUgb2YgTUFYUEFUSExFTiwganVzdCBoYXJkLWNvZGUgaXQgaW4KLSAqIGNhc2Ugb3RoZXIgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIE1BWFBBVEhMRU4KLSAqLwotI2RlZmluZSBQQVRIX0xFTl9WMyA0MDk2CisJX19zMzIgc2VjdG9yc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIENoYW5nZXMgZnJvbSBWMiAtCiAgKglQQVRIX0xFTl9WMyBhcyBkZXNjcmliZWQgYWJvdmUKQEAgLTY2LDYgKzcwLDE1IEBACiAgKglGaXhlZCAoZmluYWxseSEpIHRoZSByb3VuZGluZyBidWcKICAqLwogCisvKiBVbnRpbCBEZWMyMDA1LCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB3YXMgbGVmdCBvdXQgZnJvbSB0aGUgYmVsb3cKKyAqIGRlZmluaXRpb24sIGxlYWRpbmcgb24gNjQtYml0IHN5c3RlbXMgdG8gNCBieXRlcyBvZiBwYWRkaW5nIGFmdGVyIG10aW1lLCB0bworICogYWxpZ24gc2l6ZSB0byA4LWJ5dGUgYWxpZ25tZW50LiAgVGhpcyBzaGlmdGVkIGFsbCBmaWVsZHMgYWJvdmUgKG5vIHBhZGRpbmcKKyAqIHdhcyBwcmVzZW50IG9uIDMyLWJpdCwgbm8gb3RoZXIgcGFkZGluZyB3YXMgYWRkZWQpLgorICoKKyAqIEhvd2V2ZXIsIHRoaXMgX2NhbiBiZSBkZXRlY3RlZF86IGl0IG1lYW5zIHRoYXQgY293X2Zvcm1hdCAoYWx3YXlzIDAgdW50aWwKKyAqIG5vdykgaXMgc2hpZnRlZCBvbnRvIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIGJhY2tpbmdfZmlsZSwgd2hlcmUgaXQgaXMgb3RoZXJ3aXNlCisgKiBpbXBvc3NpYmxlIHRvIGZpbmQgNCB6ZXJvcy4gLWJiICovCisKIHN0cnVjdCBjb3dfaGVhZGVyX3YzIHsKIAlfX3UzMiBtYWdpYzsKIAlfX3UzMiB2ZXJzaW9uOwpAQCAtNzUsNiArODgsMTggQEAKIAlfX3UzMiBhbGlnbm1lbnQ7CiAJX191MzIgY293X2Zvcm1hdDsKIAljaGFyIGJhY2tpbmdfZmlsZVtQQVRIX0xFTl9WM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBUaGlzIGlzIHRoZSBicm9rZW4gbGF5b3V0IHVzZWQgYnkgc29tZSA2NC1iaXQgYmluYXJpZXMuICovCitzdHJ1Y3QgY293X2hlYWRlcl92M19icm9rZW4geworCV9fdTMyIG1hZ2ljOworCV9fdTMyIHZlcnNpb247CisJX19zNjQgbXRpbWU7CisJX191NjQgc2l6ZTsKKwlfX3UzMiBzZWN0b3JzaXplOworCV9fdTMyIGFsaWdubWVudDsKKwlfX3UzMiBjb3dfZm9ybWF0OworCWNoYXIgYmFja2luZ19maWxlW1BBVEhfTEVOX1YzXTsKIH07CiAKIC8qIENPVyBmb3JtYXQgZGVmaW5pdGlvbnMgLSBmb3Igbm93LCB3ZSBoYXZlIG9ubHkgdGhlIHVzdWFsIENPVyBiaXRtYXAgKi8KQEAgLTg0LDYgKzEwOSw3IEBACiAJc3RydWN0IGNvd19oZWFkZXJfdjEgdjE7CiAJc3RydWN0IGNvd19oZWFkZXJfdjIgdjI7CiAJc3RydWN0IGNvd19oZWFkZXJfdjMgdjM7CisJc3RydWN0IGNvd19oZWFkZXJfdjNfYnJva2VuIHYzX2I7CiB9OwogCiAjZGVmaW5lIENPV19NQUdJQyAweDRmNGY0ZjRkICAvKiBNT09PICovCkBAIC0xODQsOCArMjEwLDkgQEAKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYoc3RybGVuKGJhY2tpbmdfZmlsZSkgPiBzaXplb2YoaGVhZGVyLT5iYWNraW5nX2ZpbGUpIC0gMSl7CisJCS8qIEJlbG93LCAlemQgaXMgZm9yIGEgc2l6ZV90IHZhbHVlICovCiAJCWNvd19wcmludGYoIkJhY2tpbmcgZmlsZSBuYW1lIFwiJXNcIiBpcyB0b28gbG9uZyAtIG5hbWVzIGFyZSAiCi0JCQkgICAibGltaXRlZCB0byAlZCBjaGFyYWN0ZXJzXG4iLCBiYWNraW5nX2ZpbGUsCisJCQkgICAibGltaXRlZCB0byAlemQgY2hhcmFjdGVyc1xuIiwgYmFja2luZ19maWxlLAogCQkJICAgc2l6ZW9mKGhlYWRlci0+YmFja2luZ19maWxlKSAtIDEpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KQEAgLTMwMCw3ICszMjcsOCBAQAogCQkqYWxpZ25fb3V0ID0gKnNlY3RvcnNpemVfb3V0OwogCQlmaWxlID0gaGVhZGVyLT52Mi5iYWNraW5nX2ZpbGU7CiAJfQotCWVsc2UgaWYodmVyc2lvbiA9PSAzKXsKKwkvKiBUaGlzIGlzIHZlcnkgc3VidGxlIC0gc2VlIGFib3ZlIGF0IHVuaW9uIGNvd19oZWFkZXIgZGVmaW5pdGlvbiAqLworCWVsc2UgaWYodmVyc2lvbiA9PSAzICYmICgqKChpbnQqKWhlYWRlci0+djMuYmFja2luZ19maWxlKSAhPSAwKSl7CiAJCWlmKG4gPCBzaXplb2YoaGVhZGVyLT52MykpewogCQkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gZmFpbGVkIHRvIHJlYWQgVjMgIgogCQkJCSAgICJoZWFkZXJcbiIpOwpAQCAtMzEwLDkgKzMzOCw0MyBAQAogCQkqc2l6ZV9vdXQgPSBudG9obGwoaGVhZGVyLT52My5zaXplKTsKIAkJKnNlY3RvcnNpemVfb3V0ID0gbnRvaGwoaGVhZGVyLT52My5zZWN0b3JzaXplKTsKIAkJKmFsaWduX291dCA9IG50b2hsKGhlYWRlci0+djMuYWxpZ25tZW50KTsKKwkJaWYgKCphbGlnbl9vdXQgPT0gMCkgeworCQkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gaW52YWxpZCBDT1cgaGVhZGVyLCAiCisJCQkJICAgImFsaWduID09IDBcbiIpOworCQl9CiAJCSpiaXRtYXBfb2Zmc2V0X291dCA9IFJPVU5EX1VQKHNpemVvZihoZWFkZXItPnYzKSwgKmFsaWduX291dCk7CiAJCWZpbGUgPSBoZWFkZXItPnYzLmJhY2tpbmdfZmlsZTsKIAl9CisJZWxzZSBpZih2ZXJzaW9uID09IDMpeworCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBicm9rZW4gVjMgZmlsZSB3aXRoIgorCQkJICAgIiA2NC1iaXQgbGF5b3V0IC0gcmVjb3ZlcmluZyBjb250ZW50LlxuIik7CisKKwkJaWYobiA8IHNpemVvZihoZWFkZXItPnYzX2IpKXsKKwkJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGZhaWxlZCB0byByZWFkIFYzICIKKwkJCQkgICAiaGVhZGVyXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogdGhpcyB3YXMgdXNlZCB1bnRpbCBEZWMyMDA1IC0gNjRiaXRzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50CisJCSAqIDIwMzgrLiBJLmUuIHdlIGNhbiBzYWZlbHkgZG8gdGhpcyB0cnVuY2F0aW5nIGNhc3QuCisJCSAqCisJCSAqIEFkZGl0aW9uYWxseSwgd2UgbXVzdCB1c2UgbnRvaGwoKSBpbnN0ZWFkIG9mIG50b2hsbCgpLCBzaW5jZQorCQkgKiB0aGUgcHJvZ3JhbSB1c2VkIHRvIHVzZSB0aGUgZm9ybWVyICh0ZXN0ZWQgLSBJIGdvdCBtdGltZQorCQkgKiBtaXNtYXRjaCAiMCB2cyB3aGF0ZXZlciIpLgorCQkgKgorCQkgKiBFdmVyIGhlYXJkIGFib3V0IGJ1Zy10by1idWctY29tcGF0aWJpbGl0eSA/IDstKSAqLworCQkqbXRpbWVfb3V0ID0gKHRpbWUzMl90KSBudG9obChoZWFkZXItPnYzX2IubXRpbWUpOworCisJCSpzaXplX291dCA9IG50b2hsbChoZWFkZXItPnYzX2Iuc2l6ZSk7CisJCSpzZWN0b3JzaXplX291dCA9IG50b2hsKGhlYWRlci0+djNfYi5zZWN0b3JzaXplKTsKKwkJKmFsaWduX291dCA9IG50b2hsKGhlYWRlci0+djNfYi5hbGlnbm1lbnQpOworCQlpZiAoKmFsaWduX291dCA9PSAwKSB7CisJCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBpbnZhbGlkIENPVyBoZWFkZXIsICIKKwkJCQkgICAiYWxpZ24gPT0gMFxuIik7CisJCX0KKwkJKmJpdG1hcF9vZmZzZXRfb3V0ID0gUk9VTkRfVVAoc2l6ZW9mKGhlYWRlci0+djNfYiksICphbGlnbl9vdXQpOworCQlmaWxlID0gaGVhZGVyLT52M19iLmJhY2tpbmdfZmlsZTsKKwl9CiAJZWxzZSB7CiAJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGludmFsaWQgQ09XIHZlcnNpb25cbiIpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCmluZGV4IDI4ZTM3NjAuLjZkNzE3M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwpAQCAtNjIsNyArNjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl3aGlsZSghbGlzdF9lbXB0eSgmbWNfcmVxdWVzdHMpKXsKLQkJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJcmVxID0gbGlzdF9lbnRyeShtY19yZXF1ZXN0cy5uZXh0LCBzdHJ1Y3QgbWNvbnNvbGVfZW50cnksCiAJCQkJIGxpc3QpOwogCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKQEAgLTg3LDcgKzg3LDcgQEAKIAkJaWYocmVxLmNtZC0+Y29udGV4dCA9PSBNQ09OU09MRV9JTlRSKQogCQkJKCpyZXEuY21kLT5oYW5kbGVyKSgmcmVxKTsKIAkJZWxzZSB7Ci0JCQluZXcgPSBrbWFsbG9jKHNpemVvZigqbmV3KSwgR0ZQX0FUT01JQyk7CisJCQluZXcgPSBrbWFsbG9jKHNpemVvZigqbmV3KSwgR0ZQX05PV0FJVCk7CiAJCQlpZihuZXcgPT0gTlVMTCkKIAkJCQltY29uc29sZV9yZXBseSgmcmVxLCAiT3V0IG9mIG1lbW9yeSIsIDEsIDApOwogCQkJZWxzZSB7CkBAIC00MTUsNyArNDE1LDYgQEAKIAogCQkJdW5wbHVnZ2VkID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQkJaWYodW5wbHVnX2luZGV4ID09IFVOUExVR0dFRF9QRVJfUEFHRSl7Ci0JCQkJSU5JVF9MSVNUX0hFQUQoJnVucGx1Z2dlZC0+bGlzdCk7CiAJCQkJbGlzdF9hZGQoJnVucGx1Z2dlZC0+bGlzdCwgJnVucGx1Z2dlZF9wYWdlcyk7CiAJCQkJdW5wbHVnX2luZGV4ID0gMDsKIAkJCX0KQEAgLTYxNiw3ICs2MTUsNyBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSgxKXsKLQkJbiA9IG1pbigoc2l6ZV90KWxlbiwgQVJSQVlfU0laRShjb25zb2xlX2J1ZikgLSBjb25zb2xlX2luZGV4KTsKKwkJbiA9IG1pbigoc2l6ZV90KSBsZW4sIEFSUkFZX1NJWkUoY29uc29sZV9idWYpIC0gY29uc29sZV9pbmRleCk7CiAJCXN0cm5jcHkoJmNvbnNvbGVfYnVmW2NvbnNvbGVfaW5kZXhdLCBzdHJpbmcsIG4pOwogCQljb25zb2xlX2luZGV4ICs9IG47CiAJCXN0cmluZyArPSBuOwpAQCAtNjU1LDcgKzY1NCw2IEBACiAJc3RydWN0IG1jb25zb2xlX2VudHJ5IGVudHJ5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJTklUX0xJU1RfSEVBRCgmZW50cnkubGlzdCk7CiAJZW50cnkucmVxdWVzdCA9ICpyZXE7CiAJbGlzdF9hZGQoJmVudHJ5Lmxpc3QsICZjbGllbnRzKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jCmluZGV4IDBlMmYwNjEuLjBhNzc4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jCkBAIC0xODIsNyArMTgyLDkgQEAKIAlwZV9kYXRhLnN0ZG91dCA9IGZkc1sxXTsKIAlwaWQgPSBydW5faGVscGVyKGNoYW5nZV9wcmVfZXhlYywgJnBlX2RhdGEsIGFyZ3YsIE5VTEwpOwogCi0JcmVhZF9vdXRwdXQoZmRzWzBdLCBvdXRwdXQsIG91dHB1dF9sZW4pOworCWlmIChwaWQgPiAwKQkvKiBBdm9pZCBoYW5nIGFzIHdlIHdvbid0IGdldCBkYXRhIGluIGZhaWx1cmUgY2FzZS4gKi8KKwkJcmVhZF9vdXRwdXQoZmRzWzBdLCBvdXRwdXQsIG91dHB1dF9sZW4pOworCiAJb3NfY2xvc2VfZmlsZShmZHNbMF0pOwogCW9zX2Nsb3NlX2ZpbGUoZmRzWzFdKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3NsaXJwX3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy9zbGlycF91c2VyLmMKaW5kZXggYjk0YzY2MS4uMzNjNWY2ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3NsaXJwX3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfdXNlci5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAl9CiAKIAlpZihlcnIgPT0gMCkgewotCQlwcmludGsoInNsaXJwX2Nsb3NlOiBwcm9jZXNzICVkIGhhcyBub3QgZXhpdGVkXG4iKTsKKwkJcHJpbnRrKCJzbGlycF9jbG9zZTogcHJvY2VzcyAlZCBoYXMgbm90IGV4aXRlZFxuIiwgcHJpLT5waWQpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmggYi9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKaW5kZXggNDI1NTcxMy4uZWZhM2QzMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaApAQCAtMTE3LDEwICsxMTcsNiBAQAogZXh0ZXJuIHZvaWQgbWFjaGluZV9oYWx0KHZvaWQpOwogZXh0ZXJuIGludCBpc19zeXNjYWxsKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLWV4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7Ci0KLWV4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3NrYXMoc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKTsKLQogZXh0ZXJuIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOwogZXh0ZXJuIGludCBjcHUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS90dC90dC5oIGIvYXJjaC91bS9pbmNsdWRlL3R0L3R0LmgKaW5kZXggODA4NTIxOS4uYWNiODM1NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3R0L3R0LmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3R0L3R0LmgKQEAgLTE5LDcgKzE5LDggQEAKIGV4dGVybiBpbnQgZG9fcHJvY19vcCh2b2lkICp0LCBpbnQgcHJvY19pZCk7CiBleHRlcm4gaW50IHRyYWNlcihpbnQgKCppbml0X3Byb2MpKHZvaWQgKiksIHZvaWQgKnNwKTsKIGV4dGVybiB2b2lkIGF0dGFjaF9wcm9jZXNzKGludCBwaWQpOwotZXh0ZXJuIHZvaWQgdHJhY2VyX3BhbmljKGNoYXIgKmZvcm1hdCwgLi4uKTsKK2V4dGVybiB2b2lkIHRyYWNlcl9wYW5pYyhjaGFyICpmb3JtYXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gdm9pZCBzZXRfaW5pdF9waWQoaW50IHBpZCk7CiBleHRlcm4gaW50IHNldF91c2VyX21vZGUodm9pZCAqdGFzayk7CiBleHRlcm4gdm9pZCBzZXRfdHJhY2luZyh2b2lkICp0LCBpbnQgdHJhY2luZyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3VzZXIuaAppbmRleCA5MWIwYWM0Li4zOWY4Yzg4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvdXNlci5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS91c2VyLmgKQEAgLTYsOCArNiwxMCBAQAogI2lmbmRlZiBfX1VTRVJfSF9fCiAjZGVmaW5lIF9fVVNFUl9IX18KIAotZXh0ZXJuIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworZXh0ZXJuIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIHZvaWQgc2NoZWR1bGUodm9pZCk7CiBleHRlcm4gdm9pZCAqdW1fa21hbGxvYyhpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdW1fa21hbGxvY19hdG9taWMoaW50IHNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3VzZXJfdXRpbC5oIGIvYXJjaC91bS9pbmNsdWRlL3VzZXJfdXRpbC5oCmluZGV4IGZlMGMyOWIuLjgwMmQ3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS91c2VyX3V0aWwuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvdXNlcl91dGlsLmgKQEAgLTU1LDcgKzU1LDggQEAKIGV4dGVybiB2b2lkICp1bV9rbWFsbG9jKGludCBzaXplKTsKIGV4dGVybiBpbnQgc3dpdGNoZXJvbyhpbnQgZmQsIGludCBwcm90LCB2b2lkICpmcm9tLCB2b2lkICp0bywgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgZG9fZXhlYyhpbnQgb2xkX3BpZCwgaW50IG5ld19waWQpOwotZXh0ZXJuIHZvaWQgdHJhY2VyX3BhbmljKGNoYXIgKm1zZywgLi4uKTsKK2V4dGVybiB2b2lkIHRyYWNlcl9wYW5pYyhjaGFyICptc2csIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gaW50IGRldGFjaChpbnQgcGlkLCBpbnQgc2lnKTsKIGV4dGVybiBpbnQgYXR0YWNoKGludCBwaWQpOwogZXh0ZXJuIHZvaWQga2lsbF9jaGlsZF9kZWFkKGludCBwaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwva3N5bXMuYyBiL2FyY2gvdW0va2VybmVsL2tzeW1zLmMKaW5kZXggNzcxM2U3YS4uNDMyY2YwYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwva3N5bXMuYworKysgYi9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCkBAIC0zOSw3ICszOSw2IEBACiBFWFBPUlRfU1lNQk9MKG1vZGVfdHQpOwogRVhQT1JUX1NZTUJPTChoYW5kbGVfcGFnZV9mYXVsdCk7CiBFWFBPUlRfU1lNQk9MKGZpbmRfaW9tZW0pOwotRVhQT1JUX1NZTUJPTChlbmRfaW9tZW0pOwogCiAjaWZkZWYgQ09ORklHX01PREVfVFQKIEVYUE9SVF9TWU1CT0woc3RybmNweV9mcm9tX3VzZXJfdHQpOwpAQCAtODksMTIgKzg4LDEwIEBACiBFWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7CiBFWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CiAKLS8qIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFVNTCBleHBhbmRzIG9wZW4gdG8gc3lzX29wZW4sIG5vdCB0byBhIHN5c3RlbQorLyogVGhpcyBpcyBoZXJlIGJlY2F1c2UgVU1MIGV4cGFuZHMgbHNlZWsgdG8gc3lzX2xzZWVrLCBub3QgdG8gYSBzeXN0ZW0KICAqIGNhbGwgaW5zdHJ1Y3Rpb24uCiAgKi8KLUVYUE9SVF9TWU1CT0woc3lzX29wZW4pOwogRVhQT1JUX1NZTUJPTChzeXNfbHNlZWspOwotRVhQT1JUX1NZTUJPTChzeXNfcmVhZCk7CiBFWFBPUlRfU1lNQk9MKHN5c193YWl0NCk7CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfdXNlci5jIGIvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX3VzZXIuYwppbmRleCA5MDFiODVlOC4uOGY0OTUwNyAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX3VzZXIuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfdXNlci5jCkBAIC00MCw3ICs0MCw3IEBACiAJCQlpbnQgZmQpCiB7CiAJc3RydWN0IGFkZHJfY2hhbmdlIGNoYW5nZTsKLQl2b2lkICpvdXRwdXQ7CisJY2hhciAqb3V0cHV0OwogCWludCBuOwogCiAJY2hhbmdlLndoYXQgPSBvcDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMgYi9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jCmluZGV4IDY0OTBhNGYuLjY5ODdkMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9oZWxwZXIuYwpAQCAtNDMsNyArNDMsNyBAQAogCQkoKmRhdGEtPnByZV9leGVjKShkYXRhLT5wcmVfZGF0YSk7CiAJZXhlY3ZwKGFyZ3ZbMF0sIGFyZ3YpOwogCWVycnZhbCA9IGVycm5vOwotCXByaW50aygiZXhlY3ZwIG9mICclcycgZmFpbGVkIC0gZXJybm8gPSAlZFxuIiwgYXJndlswXSwgZXJybm8pOworCXByaW50aygiaGVscGVyX2NoaWxkIC0gZXhlY3ZlIG9mICclcycgZmFpbGVkIC0gZXJybm8gPSAlZFxuIiwgYXJndlswXSwgZXJybm8pOwogCW9zX3dyaXRlX2ZpbGUoZGF0YS0+ZmQsICZlcnJ2YWwsIHNpemVvZihlcnJ2YWwpKTsKIAlraWxsKG9zX2dldHBpZCgpLCBTSUdLSUxMKTsKIAlyZXR1cm4oMCk7CkBAIC05MiwxNSArOTIsMTUgQEAKIAljbG9zZShmZHNbMV0pOwogCWZkc1sxXSA9IC0xOwogCi0JLypSZWFkIHRoZSBlcnJubyB2YWx1ZSBmcm9tIHRoZSBjaGlsZC4qLworCS8qIFJlYWQgdGhlIGVycm5vIHZhbHVlIGZyb20gdGhlIGNoaWxkLCBpZiB0aGUgZXhlYyBmYWlsZWQsIG9yIGdldCAwIGlmCisJICogdGhlIGV4ZWMgc3VjY2VlZGVkIGJlY2F1c2UgdGhlIHBpcGUgZmQgd2FzIHNldCBhcyBjbG9zZS1vbi1leGVjLiAqLwogCW4gPSBvc19yZWFkX2ZpbGUoZmRzWzBdLCAmcmV0LCBzaXplb2YocmV0KSk7Ci0JaWYobiA8IDApeworCWlmIChuIDwgMCkgewogCQlwcmludGsoInJ1bl9oZWxwZXIgOiByZWFkIG9uIHBpcGUgZmFpbGVkLCByZXQgPSAlZFxuIiwgLW4pOwogCQlyZXQgPSBuOwogCQlraWxsKHBpZCwgU0lHS0lMTCk7CiAJCUNBVENIX0VJTlRSKHdhaXRwaWQocGlkLCBOVUxMLCAwKSk7Ci0JfQotCWVsc2UgaWYobiAhPSAwKXsKKwl9IGVsc2UgaWYobiAhPSAwKXsKIAkJQ0FUQ0hfRUlOVFIobiA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKSk7CiAJCXJldCA9IC1lcnJubzsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9tZW0uYyBiL2FyY2gvdW0vb3MtTGludXgvbWVtLmMKaW5kZXggNmFiMzcyZC4uNzFiYjkwYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9tZW0uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L21lbS5jCkBAIC01MywzMyArNTMsMzYgQEAKICAqLwogaW50IG1ha2VfdGVtcGZpbGUoY29uc3QgY2hhciAqdGVtcGxhdGUsIGNoYXIgKipvdXRfdGVtcG5hbWUsIGludCBkb191bmxpbmspCiB7Ci0JY2hhciB0ZW1wbmFtZVtNQVhQQVRITEVOXTsKKwljaGFyICp0ZW1wbmFtZTsKIAlpbnQgZmQ7CiAKKwl0ZW1wbmFtZSA9IG1hbGxvYyhNQVhQQVRITEVOKTsKKwogCWZpbmRfdGVtcGRpcigpOwotCWlmICgqdGVtcGxhdGUgIT0gJy8nKQorCWlmICh0ZW1wbGF0ZVswXSAhPSAnLycpCiAJCXN0cmNweSh0ZW1wbmFtZSwgdGVtcGRpcik7CiAJZWxzZQotCQkqdGVtcG5hbWUgPSAwOworCQl0ZW1wbmFtZVswXSA9ICdcMCc7CiAJc3RyY2F0KHRlbXBuYW1lLCB0ZW1wbGF0ZSk7CiAJZmQgPSBta3N0ZW1wKHRlbXBuYW1lKTsKIAlpZihmZCA8IDApewogCQlmcHJpbnRmKHN0ZGVyciwgIm9wZW4gLSBjYW5ub3QgY3JlYXRlICVzOiAlc1xuIiwgdGVtcG5hbWUsCiAJCQlzdHJlcnJvcihlcnJubykpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gb3V0OwogCX0KIAlpZihkb191bmxpbmsgJiYgKHVubGluayh0ZW1wbmFtZSkgPCAwKSl7CiAJCXBlcnJvcigidW5saW5rIik7Ci0JCXJldHVybiAtMTsKKwkJZ290byBvdXQ7CiAJfQogCWlmKG91dF90ZW1wbmFtZSl7Ci0JCSpvdXRfdGVtcG5hbWUgPSBzdHJkdXAodGVtcG5hbWUpOwotCQlpZigqb3V0X3RlbXBuYW1lID09IE5VTEwpewotCQkJcGVycm9yKCJzdHJkdXAiKTsKLQkJCXJldHVybiAtMTsKLQkJfQorCQkqb3V0X3RlbXBuYW1lID0gdGVtcG5hbWU7CisJfSBlbHNlIHsKKwkJZnJlZSh0ZW1wbmFtZSk7CiAJfQogCXJldHVybihmZCk7CitvdXQ6CisJZnJlZSh0ZW1wbmFtZSk7CisJcmV0dXJuIC0xOwogfQogCiAjZGVmaW5lIFRFTVBOQU1FX1RFTVBMQVRFICJ2bV9maWxlLVhYWFhYWCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYyBiL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYwppbmRleCA5YmE5NDI5Li4wMGU5Mzg4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NpZ2lvLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zaWdpby5jCkBAIC0zMDQsOCArMzA0LDggQEAKIAkJCQkJICAgLnNpemUJPSAwLAogCQkJCQkgICAudXNlZAk9IDAgfSk7CiBvdXRfZnJlZToKLQlrZnJlZShwKTsKIAlzaWdpb191bmxvY2soKTsKKwlrZnJlZShwKTsKIG91dF9jbG9zZTI6CiAJY2xvc2UobF9zaWdpb19wcml2YXRlWzBdKTsKIAljbG9zZShsX3NpZ2lvX3ByaXZhdGVbMV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jCmluZGV4IGZiYjA4MGMuLmIzYzExY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMKQEAgLTgyLDggKzgyLDggQEAKIAlpZiAob2Zmc2V0KSB7CiAJCWRhdGEgPSAodW5zaWduZWQgbG9uZyAqKShtbV9pZHAtPnN0YWNrICsKIAkJCQkJIG9mZnNldCAtIFVNTF9DT05GSUdfU1RVQl9EQVRBKTsKLQkJcHJpbnRrKCJkb19zeXNjYWxsX3N0dWIgOiByZXQgPSAlZCwgb2Zmc2V0ID0gJWQsICIKLQkJICAgICAgICJkYXRhID0gMHgleFxuIiwgcmV0LCBvZmZzZXQsIGRhdGEpOworCQlwcmludGsoImRvX3N5c2NhbGxfc3R1YiA6IHJldCA9ICVsZCwgb2Zmc2V0ID0gJWxkLCAiCisJCSAgICAgICAiZGF0YSA9ICVwXG4iLCByZXQsIG9mZnNldCwgZGF0YSk7CiAJCXN5c2NhbGwgPSAodW5zaWduZWQgbG9uZyAqKSgodW5zaWduZWQgbG9uZylkYXRhICsgZGF0YVswXSk7CiAJCXByaW50aygiZG9fc3lzY2FsbF9zdHViOiBzeXNjYWxsICVsZCBmYWlsZWQsIHJldHVybiB2YWx1ZSA9ICIKIAkJICAgICAgICIweCVseCwgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlID0gMHglbHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwppbmRleCBiYmYzNGNiLi4wNDVhZTAwIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQlpZihlcnIpCiAJCQlwYW5pYygidXNlcnNwYWNlIC0gY291bGQgbm90IHJlc3VtZSB1c2Vyc3BhY2UgcHJvY2VzcywgIgogCQkJICAgICAgInBpZD0lZCwgcHRyYWNlIG9wZXJhdGlvbiA9ICVkLCBlcnJubyA9ICVkXG4iLAotCQkJICAgICAgb3AsIGVycm5vKTsKKwkJCSAgICAgIHBpZCwgb3AsIGVycm5vKTsKIAogCQlDQVRDSF9FSU5UUihlcnIgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgV1VOVFJBQ0VEKSk7CiAJCWlmKGVyciA8IDApCkBAIC0zNjksNyArMzY5LDcgQEAKIAkgKi8KIAl3YWl0X3N0dWJfZG9uZShwaWQsIC0xLCAiY29weV9jb250ZXh0X3NrYXMwIik7CiAJaWYgKGNoaWxkX2RhdGEtPmVyciAhPSBVTUxfQ09ORklHX1NUVUJfREFUQSkKLQkJcGFuaWMoImNvcHlfY29udGV4dF9za2FzMCAtIHN0dWItY2hpbGQgcmVwb3J0cyBlcnJvciAlZFxuIiwKKwkJcGFuaWMoImNvcHlfY29udGV4dF9za2FzMCAtIHN0dWItY2hpbGQgcmVwb3J0cyBlcnJvciAlbGRcbiIsCiAJCSAgICAgIGNoaWxkX2RhdGEtPmVycik7CiAKIAlpZiAocHRyYWNlKFBUUkFDRV9PTERTRVRPUFRJT05TLCBwaWQsIE5VTEwsCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3Rscy5jIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni90bHMuYwppbmRleCBiYTIxZjBlLi4xMjBhYmJlIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3Rscy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvdGxzLmMKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlICJzeXNkZXAvdGxzLmgiCiAjaW5jbHVkZSAidXNlcl91dGlsLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3VtaWQuYyBiL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jCmluZGV4IDE5OGU1OTEuLjM0YmZjMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jCkBAIC0xMjAsNyArMTIwLDggQEAKIAogCWRlYWQgPSAwOwogCWZkID0gb3BlbihmaWxlLCBPX1JET05MWSk7Ci0JaWYoZmQgPCAwKXsKKwlpZihmZCA8IDApIHsKKwkJZmQgPSAtZXJybm87CiAJCWlmKGZkICE9IC1FTk9FTlQpewogCQkJcHJpbnRrKCJub3RfZGVhZF95ZXQgOiBjb3VsZG4ndCBvcGVuIHBpZCBmaWxlICclcycsICIKIAkJCSAgICAgICAiZXJyID0gJWRcbiIsIGZpbGUsIC1mZCk7CkBAIC0xMzAsOSArMTMxLDEzIEBACiAKIAllcnIgPSAwOwogCW4gPSByZWFkKGZkLCBwaWQsIHNpemVvZihwaWQpKTsKLQlpZihuIDw9IDApeworCWlmKG4gPCAwKXsKIAkJcHJpbnRrKCJub3RfZGVhZF95ZXQgOiBjb3VsZG4ndCByZWFkIHBpZCBmaWxlICclcycsICIKLQkJICAgICAgICJlcnIgPSAlZFxuIiwgZmlsZSwgLW4pOworCQkgICAgICAgImVyciA9ICVkXG4iLCBmaWxlLCBlcnJubyk7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0gZWxzZSBpZihuID09IDApeworCQlwcmludGsoIm5vdF9kZWFkX3lldCA6IGNvdWxkbid0IHJlYWQgcGlkIGZpbGUgJyVzJywgIgorCQkgICAgICAgIjAtYnl0ZSByZWFkXG4iLCBmaWxlKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCkBAIC0xNTUsOSArMTYwLDkgQEAKIAogCXJldHVybiBlcnI7CiAKLSBvdXRfY2xvc2U6CitvdXRfY2xvc2U6CiAJY2xvc2UoZmQpOwotIG91dDoKK291dDoKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYyBiL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMKaW5kZXggOGRhNmFiMy4uMjU5ODE1OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jCkBAIC0xOCwxNCArMTgsMTkgQEAKIGV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CiBleHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7CiAKKy8qIElmIHRoZXkncmUgbm90IGRlZmluZWQsIHRoZSBleHBvcnQgaXMgaW5jbHVkZWQgaW4gbGliL3N0cmluZy5jLiovCisjaWZkZWYgX19IQVZFX0FSQ0hfU1RSTEVOCiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CisjZW5kaWYKKyNpZmRlZiBfX0hBVkVfQVJDSF9TVFJTVFIKK0VYUE9SVF9TWU1CT0woc3Ryc3RyKTsKKyNlbmRpZgorCiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwogRVhQT1JUX1NZTUJPTChwcmludGYpOwogCi1FWFBPUlRfU1lNQk9MKHN0cnN0cik7Ci0KIC8qIEhlcmUsIGluc3RlYWQsIEkgY2FuIHByb3ZpZGUgYSBmYWtlIHByb3RvdHlwZS4gWWVzLCBzb21lb25lIGNhcmVzOiBnZW5rc3ltcy4KICAqIEhvd2V2ZXIsIHRoZSBtb2R1bGVzIHdpbGwgdXNlIHRoZSBDUkMgZGVmaW5lZCAqaGVyZSosIG5vIG1hdHRlciBpZiBpdCBpcwogICogZ29vZDsgc28gdGhlIHZlcnNpb25zIG9mIHRoZXNlIHN5bWJvbHMgd2lsbCBhbHdheXMgbWF0Y2gKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwppbmRleCBiNjk2YjQ1Li41ZTdhOWMzIDEwMDY0NAotLS0gYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKKysrIGIvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCkBAIC05LDEwICs5LDggQEAKIAogJChVU0VSX09CSlMpICQoVVNFUl9PQkpTOi5vPS5pKSAkKFVTRVJfT0JKUzoubz0ucykgJChVU0VSX09CSlM6Lm89LmxzdCk6IFwKIAljX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoVVNFUl9DRkxBR1MpICQoQ0ZMQUdTXyQobm90ZGlyICRAKSkKLSQoVVNFUl9PQkpTKTogY21kX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogcXVpZXRfY21kX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogY21kX2ZvcmNlX2NoZWNrc3JjID0KLSQoVVNFUl9PQkpTKTogcXVpZXRfY21kX2ZvcmNlX2NoZWNrc3JjID0KKyQoVVNFUl9PQkpTKSA6IENIRUNLRkxBR1MgOj0gLURfX2xpbnV4X18gLURsaW51eCAtRF9fU1REQ19fIFwKKwktRHVuaXggLURfX3VuaXhfXyAtRF9fJChTVUJBUkNIKV9fCiAKIAogIyBUaGUgc3R1YnMgYW5kIHVubWFwLm8gY2FuJ3QgdHJ5IHRvIGNhbGwgbWNvdW50IG9yIHVwZGF0ZSBiYXNpYyBibG9jayBkYXRhCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKaW5kZXggZGI1MjRhYjMuLjJhMWVhYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYva3N5bXMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKQEAgLTE1LDcgKzE1LDMgQEAKIAogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7Ci0KLS8qIGRlbGF5IGNvcmUgZnVuY3Rpb25zICovCi1FWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jIGIvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jCmluZGV4IDlmM2JkOGUuLjQwYWE4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlX3VzZXIuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZV91c2VyLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkJaWYocHRyYWNlKFBUUkFDRV9QT0tFVVNSLCBwaWQsICZkdW1teS0+dV9kZWJ1Z3JlZ1tpXSwKIAkJCSAgcmVnc1tpXSkgPCAwKQogCQkJcHJpbnRrKCJ3cml0ZV9kZWJ1Z3JlZ3MgLSBwdHJhY2UgZmFpbGVkIG9uICIKLQkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHgleCwgZXJybm8gPSAlZFxuIiwgaSwKKwkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHglbHgsIGVycm5vID0gJWRcbiIsIGksCiAJCQkgICAgICAgcmVnc1tpXSwgZXJybm8pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCmluZGV4IGY1ZDBlMWMuLjYxOGZkODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJICogZGVsaXZlcnkuICBUaGUgc3AgcGFzc2VkIGluIGlzIHRoZSBvcmlnaW5hbCwgYW5kIHRoaXMgbmVlZHMKIAkgKiB0byBiZSByZXN0b3JlZCwgc28gd2Ugc3RpY2sgaXQgaW4gc2VwYXJhdGVseS4KIAkgKi8KLQllcnIgfD0gY29weV90b191c2VyKCZTQ19TUCh0byksIHNwLCBzaXplb2Yoc3ApKTsKKwllcnIgfD0gY29weV90b191c2VyKCZTQ19TUCh0byksICZzcCwgc2l6ZW9mKHNwKSk7CiAKIAlpZihmcm9tX2ZwICE9IE5VTEwpewogCQllcnIgfD0gY29weV90b191c2VyKCZ0by0+ZnBzdGF0ZSwgJnRvX2ZwLCBzaXplb2YodG8tPmZwc3RhdGUpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvdGxzLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3Rscy5jCmluZGV4IGEzMTg4ZTguLjcxYjk3OTYyIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3Rscy5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvdGxzLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCX0gZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIiAgSG9zdCBUTFMgc3VwcG9ydCBOT1QgZGV0ZWN0ZWQhICIKIAkJCQkiVExTIHN1cHBvcnQgaW5zaWRlIFVNTCB3aWxsIG5vdCB3b3JrXG4iKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogX19pbml0Y2FsbChfX3NldHVwX2hvc3Rfc3VwcG9ydHNfdGxzKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYwppbmRleCBlNzVjNGUxLi5hNGM0NmE4IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkgKiBkZWxpdmVyeS4gIFRoZSBzcCBwYXNzZWQgaW4gaXMgdGhlIG9yaWdpbmFsLCBhbmQgdGhpcyBuZWVkcwogCSAqIHRvIGJlIHJlc3RvcmVkLCBzbyB3ZSBzdGljayBpdCBpbiBzZXBhcmF0ZWx5LgogCSAqLwotCWVyciB8PSBjb3B5X3RvX3VzZXIoJlNDX1NQKHRvKSwgc3AsIHNpemVvZihzcCkpOworCWVyciB8PSBjb3B5X3RvX3VzZXIoJlNDX1NQKHRvKSwgJnNwLCBzaXplb2Yoc3ApKTsKIAogCWlmKGZyb21fZnAgIT0gTlVMTCl7CiAJCWVyciB8PSBjb3B5X3RvX3VzZXIoJnRvLT5mcHN0YXRlLCAmdG9fZnAsIHNpemVvZih0by0+ZnBzdGF0ZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMgYi9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYwppbmRleCA4ZmZjMjljLi42YmNmY2ZlIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYwpAQCAtNDMsNyArNDMsNiBAQAogRVhQT1JUX1NZTUJPTCAoc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0wgKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MIChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0wgKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTCAoc3RycmNocik7CiBFWFBPUlRfU1lNQk9MIChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTCAobWVtc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L0tjb25maWcgYi9hcmNoL3g4Nl82NC9LY29uZmlnCmluZGV4IDQzMTBiNGEuLjQwOGQ0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L0tjb25maWcKKysrIGIvYXJjaC94ODZfNjQvS2NvbmZpZwpAQCAtMTM2LDYgKzEzNiwxMSBAQAogCWRlZmF1bHQgIjciIGlmIEdFTkVSSUNfQ1BVIHx8IE1QU0MKIAlkZWZhdWx0ICI2IiBpZiBNSzgKIAorY29uZmlnIFg4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVMKKwlpbnQKKwlkZWZhdWx0ICI0MDk2IiBpZiBYODZfVlNNUAorCWRlZmF1bHQgWDg2X0wxX0NBQ0hFX0JZVEVTIGlmICFYODZfVlNNUAorCiBjb25maWcgWDg2X1RTQwogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTI4Myw2ICsyODgsMTEgQEAKIAkgTm9ydGhicmlkZ2Ugb2YgT3B0ZXJvbi4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFg4Nl82NF9BQ1BJX05VTUEKIAkgaW5zdGVhZCwgd2hpY2ggYWxzbyB0YWtlcyBwcmlvcml0eSBpZiBib3RoIGFyZSBjb21waWxlZCBpbi4gICAKIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNiIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogIyBEdW1teSBDT05GSUcgb3B0aW9uIHRvIHNlbGVjdCBBQ1BJX05VTUEgZnJvbSBkcml2ZXJzL2FjcGkvS2NvbmZpZy4KIAogY29uZmlnIFg4Nl82NF9BQ1BJX05VTUEKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L01ha2VmaWxlIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKaW5kZXggNTg1ZmQ0YS4uZTU3M2UyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKQEAgLTI0LDM3ICsyNCwzNyBAQAogTERGTEFHUwkJOj0gLW0gZWxmX3g4Nl82NAogT0JKQ09QWUZMQUdTCTo9IC1PIGJpbmFyeSAtUiAubm90ZSAtUiAuY29tbWVudCAtUwogTERGTEFHU192bWxpbnV4IDo9Ci0KIENIRUNLRkxBR1MgICAgICArPSAtRF9feDg2XzY0X18gLW02NAogCitjZmxhZ3MteQk6PQogY2ZsYWdzLSQoQ09ORklHX01LOCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9azgpCiBjZmxhZ3MtJChDT05GSUdfTVBTQykgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bm9jb25hKQogY2ZsYWdzLSQoQ09ORklHX0dFTkVSSUNfQ1BVKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1nZW5lcmljKQotQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCiAKLUNGTEFHUyArPSAtbTY0Ci1DRkxBR1MgKz0gLW1uby1yZWQtem9uZQotQ0ZMQUdTICs9IC1tY21vZGVsPWtlcm5lbAotQ0ZMQUdTICs9IC1waXBlCitjZmxhZ3MteSArPSAtbTY0CitjZmxhZ3MteSArPSAtbW5vLXJlZC16b25lCitjZmxhZ3MteSArPSAtbWNtb2RlbD1rZXJuZWwKK2NmbGFncy15ICs9IC1waXBlCiBjZmxhZ3MtJChDT05GSUdfUkVPUkRFUikgKz0gLWZmdW5jdGlvbi1zZWN0aW9ucwogIyB0aGlzIG1ha2VzIHJlYWRpbmcgYXNzZW1ibHkgc291cmNlIGVhc2llciwgYnV0IHByb2R1Y2VzIHdvcnNlIGNvZGUKICMgYWN0dWFsbHkgaXQgbWFrZXMgdGhlIGtlcm5lbCBzbWFsbGVyIHRvby4KLUNGTEFHUyArPSAtZm5vLXJlb3JkZXItYmxvY2tzCQotQ0ZMQUdTICs9IC1Xbm8tc2lnbi1jb21wYXJlCitjZmxhZ3MteSArPSAtZm5vLXJlb3JkZXItYmxvY2tzCitjZmxhZ3MteSArPSAtV25vLXNpZ24tY29tcGFyZQogaWZuZXEgKCQoQ09ORklHX1VOV0lORF9JTkZPKSx5KQotQ0ZMQUdTICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKK2NmbGFncy15ICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKIGVuZGlmCiBpZm5lcSAoJChDT05GSUdfREVCVUdfSU5GTykseSkKICMgLWZ3ZWIgc2hyaW5rcyB0aGUga2VybmVsIGEgYml0LCBidXQgdGhlIGRpZmZlcmVuY2UgaXMgdmVyeSBzbWFsbAogIyBpdCBhbHNvIG1lc3NlcyB1cCBkZWJ1Z2dpbmcsIHNvIGRvbid0IHVzZSBpdCBmb3Igbm93LgotI0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1md2ViKQorI2NmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLWZ3ZWIpCiBlbmRpZgogIyAtZnVuaXQtYXQtYS10aW1lIHNocmlua3MgdGhlIGtlcm5lbCAudGV4dCBjb25zaWRlcmFibHkKICMgdW5mb3J0dW5hdGVseSBpdCBtYWtlcyByZWFkaW5nIG9vcHNlcyBoYXJkZXIuCi1DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZnVuaXQtYXQtYS10aW1lKQorY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtZnVuaXQtYXQtYS10aW1lKQogIyBwcmV2ZW50IGdjYyBmcm9tIGdlbmVyYXRpbmcgYW55IEZQIGNvZGUgYnkgbWlzdGFrZQotQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zc2UgLW1uby1tbXggLW1uby1zc2UyIC1tbm8tM2Rub3csKQorY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLXNzZSAtbW5vLW1teCAtbW5vLXNzZTIgLW1uby0zZG5vdywpCiAKK0NGTEFHUyArPSAkKGNmbGFncy15KQogQUZMQUdTICs9IC1tNjQKIAogaGVhZC15IDo9IGFyY2gveDg2XzY0L2tlcm5lbC9oZWFkLm8gYXJjaC94ODZfNjQva2VybmVsL2hlYWQ2NC5vIGFyY2gveDg2XzY0L2tlcm5lbC9pbml0X3Rhc2subwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvYm9vdC92aWRlby5TIGIvYXJjaC94ODZfNjQvYm9vdC92aWRlby5TCmluZGV4IDA1ODc0NzcuLjMyMzI3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2Jvb3QvdmlkZW8uUworKysgYi9hcmNoL3g4Nl82NC9ib290L3ZpZGVvLlMKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgUEFSQU1fVkVTQVBNX09GRgkweDMwCiAjZGVmaW5lIFBBUkFNX0xGQl9QQUdFUwkJMHgzMgogI2RlZmluZSBQQVJBTV9WRVNBX0FUVFJJQgkweDM0CisjZGVmaW5lIFBBUkFNX0NBUEFCSUxJVElFUwkweDM2CiAKIC8qIERlZmluZSBET19TVE9SRSBhY2NvcmRpbmcgdG8gQ09ORklHX1ZJREVPX1JFVEFJTiAqLwogI2lmZGVmIENPTkZJR19WSURFT19SRVRBSU4KQEAgLTIzMyw2ICsyMzQsMTAgQEAKIAltb3Z3CTE4KCVkaSksICVheAogCW1vdmwJJWVheCwgJWZzOihQQVJBTV9MRkJfU0laRSkKIAorIyBzdG9yZSBtb2RlIGNhcGFiaWxpdGllcworCW1vdmwgMTAoJWRpKSwgJWVheAorCW1vdmwgJWVheCwgJWZzOihQQVJBTV9DQVBBQklMSVRJRVMpCisKICMgc3dpdGNoaW5nIHRoZSBEQUMgdG8gOC1iaXQgaXMgZm9yIDw9IDggYnBwIG9ubHkKIAltb3Z3CSVmczooUEFSQU1fTEZCX0RFUFRIKSwgJWF4CiAJY21wdwkkOCwgJWF4CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9kZWZjb25maWcgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcKaW5kZXggNTY2ZWNjOS4uM2M0NWVjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvZGVmY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1naXQ5Ci0jIFNhdCBNYXIgMjUgMTU6MTg6NDAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQorIyBNb24gQXByICAzIDE2OjExOjE0IDIwMDYKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTksNiArOSw3IEBACiBDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1g4Nl9DTVBYQ0hHPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQpAQCAtNTUsMTAgKzU2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNzAsNyArNjcsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtODEsNiArNzcsNyBAQAogIwogQ09ORklHX0xCRD15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTA1LDYgKzEwMiw3IEBACiBDT05GSUdfR0VORVJJQ19DUFU9eQogQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUz0xMjgKIENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NworQ09ORklHX1g4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVM9MTI4CiBDT05GSUdfWDg2X1RTQz15CiBDT05GSUdfWDg2X0dPT0RfQVBJQz15CiAjIENPTkZJR19NSUNST0NPREUgaXMgbm90IHNldApAQCAtMTE2LDYgKzExNCw3IEBACiBDT05GSUdfTVRSUj15CiBDT05GSUdfU01QPXkKIENPTkZJR19TQ0hFRF9TTVQ9eQorQ09ORklHX1NDSEVEX01DPXkKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0xMzgsNiArMTM3LDcgQEAKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRD15CitDT05GSUdfT1VUX09GX0xJTkVfUEZOX1RPX1BBR0U9eQogQ09ORklHX05SX0NQVVM9MzIKIENPTkZJR19IT1RQTFVHX0NQVT15CiBDT05GSUdfSFBFVF9USU1FUj15CkBAIC0yODksNiArMjg5LDcgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTMwMCw2ICszMDEsNyBAQAogIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKQEAgLTcwNCw3ICs3MDYsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNzkxLDcgKzc5Miw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfQUNQSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC05MjEsNiArOTIyLDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTkzMiw2ICs5MzQsOCBAQAogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKIENPTkZJR19WR0FfQ09OU09MRT15CitDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSz15CitDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDS19TSVpFPTI1NgogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogCiAjCkBAIC0xMDU4LDE1ICsxMDYyLDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTExMTgsOSArMTExMywxNSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19JUEFUSF9DT1JFIGlzIG5vdCBzZXQKIAogIwogIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKQEAgLTExMjgsNiArMTEyOSwxMSBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpcm13YXJlIERyaXZlcnMKICMKICMgQ09ORklHX0VERCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUwppbmRleCAzNWIyZmFjLi41YTk4MDI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxhc20vdnN5c2NhbGwzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAorI2RlZmluZSBJQTMyX05SX3N5c2NhbGxzICgoaWEzMl9zeXNjYWxsX2VuZCAtIGlhMzJfc3lzX2NhbGxfdGFibGUpLzgpCisKIAkubWFjcm8gSUEzMl9BUkdfRklYVVAgbm9lYnA9MAogCW1vdmwJJWVkaSwlcjhkCiAJLmlmIFxub2VicApAQCAtMTA5LDggKzExMSw4IEBACiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJam56ICBzeXNlbnRlcl90cmFjZXN5cwogc3lzZW50ZXJfZG9fY2FsbDoJCi0JY21wbAkkKElBMzJfTlJfc3lzY2FsbHMpLCVlYXgKLQlqYWUJaWEzMl9iYWRzeXMKKwljbXBsCSQoSUEzMl9OUl9zeXNjYWxscy0xKSwlZWF4CisJamEJaWEzMl9iYWRzeXMKIAlJQTMyX0FSR19GSVhVUCAxCiAJY2FsbAkqaWEzMl9zeXNfY2FsbF90YWJsZSgsJXJheCw4KQogCW1vdnEJJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCkBAIC0yMTAsOCArMjEyLDggQEAKIAlDRklfUkVNRU1CRVJfU1RBVEUKIAlqbnogICBjc3Rhcl90cmFjZXN5cwogY3N0YXJfZG9fY2FsbDoJCi0JY21wbCAkSUEzMl9OUl9zeXNjYWxscywlZWF4Ci0JamFlICBpYTMyX2JhZHN5cworCWNtcGwgJElBMzJfTlJfc3lzY2FsbHMtMSwlZWF4CisJamEgIGlhMzJfYmFkc3lzCiAJSUEzMl9BUkdfRklYVVAgMQogCWNhbGwgKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkKIAltb3ZxICVyYXgsUkFYLUFSR09GRlNFVCglcnNwKQpAQCAtMjk2LDggKzI5OCw4IEBACiAJdGVzdGwgJChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0VDQ09NUCksdGhyZWFkaW5mb19mbGFncyglcjEwKQogCWpueiBpYTMyX3RyYWNlc3lzCiBpYTMyX2RvX3N5c2NhbGw6CQotCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzKSwlZWF4Ci0JamFlICBpYTMyX2JhZHN5cworCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzLTEpLCVlYXgKKwlqYSAgaWEzMl9iYWRzeXMKIAlJQTMyX0FSR19GSVhVUAogCWNhbGwgKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkgIyB4eHg6IHJpcCByZWxhdGl2ZQogaWEzMl9zeXNyZXQ6CkBAIC02ODUsMTIgKzY4NywxMSBAQAogCS5xdWFkIHN5c19yZWFkbGlua2F0CQkvKiAzMDUgKi8KIAkucXVhZCBzeXNfZmNobW9kYXQKIAkucXVhZCBzeXNfZmFjY2Vzc2F0Ci0JLnF1YWQgc3lzX25pX3N5c2NhbGwJCS8qIHBzZWxlY3Q2IGZvciBub3cgKi8KLQkucXVhZCBzeXNfbmlfc3lzY2FsbAkJLyogcHBvbGwgZm9yIG5vdyAqLworCS5xdWFkIHF1aWV0X25pX3N5c2NhbGwJCS8qIHBzZWxlY3Q2IGZvciBub3cgKi8KKwkucXVhZCBxdWlldF9uaV9zeXNjYWxsCQkvKiBwcG9sbCBmb3Igbm93ICovCiAJLnF1YWQgc3lzX3Vuc2hhcmUJCS8qIDMxMCAqLwogCS5xdWFkIGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0CiAJLnF1YWQgY29tcGF0X3N5c19nZXRfcm9idXN0X2xpc3QKKwkucXVhZCBzeXNfc3BsaWNlCisJLnF1YWQgc3lzX3N5bmNfZmlsZV9yYW5nZQogaWEzMl9zeXNjYWxsX2VuZDoJCQotCS5yZXB0IElBMzJfTlJfc3lzY2FsbHMtKGlhMzJfc3lzY2FsbF9lbmQtaWEzMl9zeXNfY2FsbF90YWJsZSkvOAotCQkucXVhZCBuaV9zeXNjYWxsCi0JLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL2FwZXJ0dXJlLmMKaW5kZXggZmZmZDZiMC4uNzBiOWQyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2FwZXJ0dXJlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2FwZXJ0dXJlLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJcHJpbnRrKCJBcGVydHVyZSBmcm9tICVzIGJleW9uZCA0R0IuIElnbm9yaW5nLlxuIixuYW1lKTsKIAkJcmV0dXJuIDA7IAogCX0KLQlpZiAoZTgyMF9tYXBwZWQoYXBlcl9iYXNlLCBhcGVyX2Jhc2UgKyBhcGVyX3NpemUsIEU4MjBfUkFNKSkgeyAgCisJaWYgKGU4MjBfYW55X21hcHBlZChhcGVyX2Jhc2UsIGFwZXJfYmFzZSArIGFwZXJfc2l6ZSwgRTgyMF9SQU0pKSB7CiAJCXByaW50aygiQXBlcnR1cmUgZnJvbSAlcyBwb2ludGluZyB0byBlODIwIFJBTS4gSWdub3JpbmcuXG4iLG5hbWUpOwogCQlyZXR1cm4gMDsgCiAJfSAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCmluZGV4IDI5M2NkNzEuLjYyNzc2YzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwpAQCAtODAsNyArODAsMTIgQEAKIAlyZXR1cm4gMDsKIH0gCiAKLWludCBfX2luaXQgZTgyMF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGFueSBwYXJ0IG9mIHRoZSByYW5nZSA8c3RhcnQsZW5kPiBpcyBtYXBwZWQKKyAqIHdpdGggdHlwZS4KKyAqLworaW50IF9fbWVtaW5pdAorZTgyMF9hbnlfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCB0eXBlKQogeyAKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeyAKQEAgLTk0LDYgKzk5LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZW50aXJlIHJhbmdlIDxzdGFydCxlbmQ+IGlzIG1hcHBlZCB3aXRoIHR5cGUuCisgKgorICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGNvcnJlY3QgaWYgdGhlIGU4MjAgdGFibGUgaXMgc29ydGVkIGFuZAorICogbm90LW92ZXJsYXBwaW5nLCB3aGljaCBpcyB0aGUgY2FzZQorICovCitpbnQgX19pbml0IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJaWYgKHR5cGUgJiYgZWktPnR5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVnaW9uIChwYXJ0KSBpbiBvdmVybGFwIHdpdGggdGhlIGN1cnJlbnQgcmVnaW9uID8qLworCQlpZiAoZWktPmFkZHIgPj0gZW5kIHx8IGVpLT5hZGRyICsgZWktPnNpemUgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKiBpZiB0aGUgcmVnaW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgPHN0YXJ0LGVuZD4gd2UgbW92ZQorCQkgKiBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24gc2luY2UgaXQncyBvayB1bnRpbCB0aGVyZQorCQkgKi8KKwkJaWYgKGVpLT5hZGRyIDw9IHN0YXJ0KQorCQkJc3RhcnQgPSBlaS0+YWRkciArIGVpLT5zaXplOworCQkvKiBpZiBzdGFydCBpcyBub3cgYXQgb3IgYmV5b25kIGVuZCwgd2UncmUgZG9uZSwgZnVsbCBjb3ZlcmFnZSAqLworCQlpZiAoc3RhcnQgPj0gZW5kKQorCQkJcmV0dXJuIDE7IC8qIHdlJ3JlIGRvbmUgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qIAogICogRmluZCBhIGZyZWUgYXJlYSBpbiBhIHNwZWNpZmljIHJhbmdlLiAKICAqLyAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKaW5kZXggODUzOGJmZS4uYzk0NmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTE4MCw2ICsxODAsMTAgQEAKICAqCiAgKiBYWFgJaWYgd2UgaGFkIGEgZnJlZSBzY3JhdGNoIHJlZ2lzdGVyIHdlIGNvdWxkIHNhdmUgdGhlIFJTUCBpbnRvIHRoZSBzdGFjayBmcmFtZQogICogICAgICBhbmQgcmVwb3J0IGl0IHByb3Blcmx5IGluIHBzLiBVbmZvcnR1bmF0ZWx5IHdlIGhhdmVuJ3QuCisgKgorICogV2hlbiB1c2VyIGNhbiBjaGFuZ2UgdGhlIGZyYW1lcyBhbHdheXMgZm9yY2UgSVJFVC4gVGhhdCBpcyBiZWNhdXNlCisgKiBpdCBkZWFscyB3aXRoIHVuY2Fub25pY2FsIGFkZHJlc3NlcyBiZXR0ZXIuIFNZU1JFVCBoYXMgdHJvdWJsZQorICogd2l0aCB0aGVtIGR1ZSB0byBidWdzIGluIGJvdGggQU1EIGFuZCBJbnRlbCBDUFVzLgogICovIAkJCSAJCQogCiBFTlRSWShzeXN0ZW1fY2FsbCkKQEAgLTI1NCw3ICsyNTgsMTAgQEAKIAl4b3JsICVlc2ksJWVzaSAjIG9sZHNldCAtPiBhcmcyCiAJY2FsbCBwdHJlZ3NjYWxsX2NvbW1vbgogMToJbW92bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVkaQotCWptcCBzeXNyZXRfY2hlY2sKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lLiBUaGlzCisJICAgd29ya3MgYmVjYXVzZSBwdHJlZ3NjYWxsX2NvbW1vbiBoYXMgY2FsbGVkIEZJWFVQX1RPUF9PRl9TVEFDSy4gKi8KKwljbGkKKwlqbXAgaW50X3dpdGhfY2hlY2sKIAkKIGJhZHN5czoKIAltb3ZxICQtRU5PU1lTLFJBWC1BUkdPRkZTRVQoJXJzcCkKQEAgLTI4MCw3ICsyODcsOCBAQAogCWNhbGwgc3lzY2FsbF90cmFjZV9sZWF2ZQogCVJFU1RPUkVfVE9QX09GX1NUQUNLICVyYngKIAlSRVNUT1JFX1JFU1QKLQlqbXAgcmV0X2Zyb21fc3lzX2NhbGwKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lICovCisJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbAogCUNGSV9FTkRQUk9DCiAJCQogLyogCkBAIC00MDgsMjUgKzQxNiw5IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CiAJQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCiAJU0FWRV9SRVNUCi0JbW92cSAlcjExLCAlcjE1Ci0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjE1CiAJRklYVVBfVE9QX09GX1NUQUNLICVyMTEKIAljYWxsIHN5c19leGVjdmUKLQlHRVRfVEhSRUFEX0lORk8oJXJjeCkKLQlidCAkVElGX0lBMzIsdGhyZWFkaW5mb19mbGFncyglcmN4KQotCUNGSV9SRU1FTUJFUl9TVEFURQotCWpjIGV4ZWNfMzJiaXQKIAlSRVNUT1JFX1RPUF9PRl9TVEFDSyAlcjExCi0JbW92cSAlcjE1LCAlcjExCi0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCi0JUkVTVE9SRV9SRVNUCi0JcHVzaHEgJXIxMQotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0JQ0ZJX1JFTF9PRkZTRVQgcmlwLCAwCi0JcmV0Ci0KLWV4ZWNfMzJiaXQ6Ci0JQ0ZJX1JFU1RPUkVfU1RBVEUKIAltb3ZxICVyYXgsUkFYKCVyc3ApCiAJUkVTVE9SRV9SRVNUCiAJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCmluZGV4IDEwYjNlMzQuLjZmMDc5MGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKQEAgLTI5LDYgKzI5LDggQEAKICNkZWZpbmUgTUlTQ19NQ0VMT0dfTUlOT1IgMjI3CiAjZGVmaW5lIE5SX0JBTktTIDYKIAorYXRvbWljX3QgbWNlX2VudHJ5OworCiBzdGF0aWMgaW50IG1jZV9kb250X2luaXQ7CiAKIC8qIDA6IGFsd2F5cyBwYW5pYywgMTogcGFuaWMgaWYgZGVhZGxvY2sgcG9zc2libGUsIDI6IHRyeSB0byBhdm9pZCBwYW5pYywKQEAgLTE3MiwxMCArMTc0LDEyIEBACiAJaW50IGk7CiAJaW50IHBhbmljbV9mb3VuZCA9IDA7CiAKKwlhdG9taWNfaW5jKCZtY2VfZW50cnkpOworCiAJaWYgKHJlZ3MpCiAJCW5vdGlmeV9kaWUoRElFX05NSSwgIm1hY2hpbmUgY2hlY2siLCByZWdzLCBlcnJvcl9jb2RlLCAxOCwgU0lHS0lMTCk7CiAJaWYgKCFiYW5rcykKLQkJcmV0dXJuOworCQlnb3RvIG91dDI7CiAKIAltZW1zZXQoJm0sIDAsIHNpemVvZihzdHJ1Y3QgbWNlKSk7CiAJbS5jcHUgPSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTI2Niw2ICsyNzAsOCBAQAogIG91dDoKIAkvKiBMYXN0IHRoaW5nIGRvbmUgaW4gdGhlIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIHRvIGNsZWFyIHN0YXRlLiAqLwogCXdybXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCAwKTsKKyBvdXQyOgorCWF0b21pY19kZWMoJm1jZV9lbnRyeSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKaW5kZXggZDllNDA2Ny4uNGU2MzU3ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vbG9jYWwuaD4KKyNpbmNsdWRlIDxhc20vbWNlLmg+CiAKIC8qCiAgKiBsYXBpY19ubWlfb3duZXIgdHJhY2tzIHRoZSBvd25lcnNoaXAgb2YgdGhlIGxhcGljIE5NSSBoYXJkd2FyZToKQEAgLTQ4MCw2ICs0ODEsMTIgQEAKIAkJX19nZXRfY3B1X3ZhcihubWlfdG91Y2gpID0gMDsKIAkJdG91Y2hlZCA9IDE7CiAJfQorI2lmZGVmIENPTkZJR19YODZfTUNFCisJLyogQ291bGQgY2hlY2sgb29wc19pbl9wcm9ncmVzcyBoZXJlIHRvbywgYnV0IGl0J3Mgc2FmZXIKKwkgICBub3QgdG9vICovCisJaWYgKGF0b21pY19yZWFkKCZtY2VfZW50cnkpID4gMCkKKwkJdG91Y2hlZCA9IDE7CisjZW5kaWYKIAlpZiAoIXRvdWNoZWQgJiYgX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID09IHN1bSkgewogCQkvKgogCQkgKiBBeWllZSwgbG9va3MgbGlrZSB0aGlzIENQVSBpcyBzdHVjayAuLi4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDAzYzllZWUuLmFmMDM1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYwpAQCAtNDgsOSArNDgsMTEgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgbm9kZTsKKyNpZmRlZiBDT05GSUdfUENJCiAJaWYgKGRldi0+YnVzID09ICZwY2lfYnVzX3R5cGUpCiAJCW5vZGUgPSBwY2lidXNfdG9fbm9kZSh0b19wY2lfZGV2KGRldiktPmJ1cyk7CiAJZWxzZQorI2VuZGlmCiAJCW5vZGUgPSBudW1hX25vZGVfaWQoKTsKIAlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIG9yZGVyKTsKIAlyZXR1cm4gcGFnZSA/IHBhZ2VfYWRkcmVzcyhwYWdlKSA6IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3MGRkOGU1Li4xYzQ0YjUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTc4MSwxMCArNzgxLDE2IEBACiAJfQogCWNhc2UgQVJDSF9HRVRfR1M6IHsgCiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwkJdW5zaWduZWQgZ3NpbmRleDsKIAkJaWYgKHRhc2stPnRocmVhZC5nc2luZGV4ID09IEdTX1RMU19TRUwpCiAJCQliYXNlID0gcmVhZF8zMmJpdF90bHModGFzaywgR1NfVExTKTsKLQkJZWxzZSBpZiAoZG9pdCkKLQkJCXJkbXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIGJhc2UpOworCQllbHNlIGlmIChkb2l0KSB7CisgCQkJYXNtKCJtb3ZsICUlZ3MsJTAiIDogIj1yIiAoZ3NpbmRleCkpOworCQkJaWYgKGdzaW5kZXgpCisJCQkJcmRtc3JsKE1TUl9LRVJORUxfR1NfQkFTRSwgYmFzZSk7CisJCQllbHNlCisJCQkJYmFzZSA9IHRhc2stPnRocmVhZC5nczsKKwkJfQogCQllbHNlCiAJCQliYXNlID0gdGFzay0+dGhyZWFkLmdzOwogCQlyZXQgPSBwdXRfdXNlcihiYXNlLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhZGRyKTsgCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZDQ0YjJjMS4uZGE4ZTc5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjc0LDExICsyNzQsNiBAQAogCQkJCXJldHVybiAtRUlPOwogCQkJdmFsdWUgJj0gMHhmZmZmOwogCQkJYnJlYWs7Ci0JCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QsIHJpcCk6Ci0JCQkvKiBDaGVjayBpZiB0aGUgbmV3IFJJUCBhZGRyZXNzIGlzIGNhbm9uaWNhbCAqLwotCQkJaWYgKHZhbHVlID49IFRBU0tfU0laRV9PRihjaGlsZCkpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCQlicmVhazsKIAl9CiAJcHV0X3N0YWNrX2xvbmcoY2hpbGQsIHJlZ25vIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwgdmFsdWUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCAwODU2YWQ0Li5jNTBiMDY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtMzUzLDggKzM1MywxMCBAQAogCQlpZiAoZnVsbGFyZyhmcm9tLCAiZW5hYmxlX3RpbWVyX3Bpbl8xIikpCiAJCQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gLTE7CiAKLQkJaWYgKGZ1bGxhcmcoZnJvbSwgIm5vbGFwaWMiKSB8fCBmdWxsYXJnKGZyb20sICJkaXNhYmxlYXBpYyIpKQorCQlpZiAoZnVsbGFyZyhmcm9tLCAibm9sYXBpYyIpIHx8IGZ1bGxhcmcoZnJvbSwgImRpc2FibGVhcGljIikpIHsKKwkJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9BUElDLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKIAkJCWRpc2FibGVfYXBpYyA9IDE7CisJCX0KIAogCQlpZiAoZnVsbGFyZyhmcm9tLCAibm9hcGljIikpCiAJCQlza2lwX2lvYXBpY19zZXR1cCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwppbmRleCBlZjhiYzQ2Li43MzkyNTcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKQEAgLTcyNiw3ICs3MjYsNyBAQAogCXVuc2lnbmVkIGludCAJCW50aW1lcjsKIAogCWlmICghdnh0aW1lLmhwZXRfYWRkcmVzcykKLSAgICAgICAgCXJldHVybiAtMTsKKyAgICAgICAgCXJldHVybiAwOwogCiAJbWVtc2V0KCZoZCwgMCwgc2l6ZW9mIChoZCkpOwogCkBAIC05MTcsNiArOTE3LDggQEAKIAkJdnh0aW1lLmhwZXRfYWRkcmVzcyA9IDA7CiAKIAlpZiAoaHBldF91c2VfdGltZXIpIHsKKwkJLyogc2V0IHRpY2tfbnNlYyB0byB1c2UgdGhlIHByb3BlciByYXRlIGZvciBIUEVUICovCisJICAJdGlja19uc2VjID0gVElDS19OU0VDX0hQRVQ7CiAJCWNwdV9raHogPSBocGV0X2NhbGlicmF0ZV90c2MoKTsKIAkJdGltZW5hbWUgPSAiSFBFVCI7CiAjaWZkZWYgQ09ORklHX1g4Nl9QTV9USU1FUgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAzOWZmMDcwLi5iODFmNDczIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsNyArNjUsNyBAQAogICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKIAkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogICB9Ci0gIC4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKKyAgLiA9IEFMSUdOKENPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTKTsKICAgLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSAtIExPQURfT0ZGU0VUKSB7CiAgIAkqKC5kYXRhLnJlYWRfbW9zdGx5KQogICB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCmluZGV4IGQ3OGY0NjAuLjFkZWYyMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCkBAIC0xMTIsNyArMTEyLDYgQEAKICN1bmRlZiBtZW1jcHkKICN1bmRlZiBtZW1zZXQKICN1bmRlZiBtZW1tb3ZlCi0jdW5kZWYgc3RybGVuCiAKIGV4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKIGV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CkBAIC0xMjEsOCArMTIwLDYgQEAKIGV4dGVybiB2b2lkICogX19tZW1jcHkodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwogCiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0woX19tZW1jcHkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jIGIvYXJjaC94ODZfNjQvbW0vaW5pdC5jCmluZGV4IGU1ZjdmMWMuLjRiYTM0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL2luaXQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlpZiAocGFkZHIgPj0gZW5kKQogCQkJYnJlYWs7CiAKLQkJaWYgKCFhZnRlcl9ib290bWVtICYmICFlODIwX21hcHBlZChwYWRkciwgcGFkZHIrUFVEX1NJWkUsIDApKSB7CisJCWlmICghYWZ0ZXJfYm9vdG1lbSAmJiAhZTgyMF9hbnlfbWFwcGVkKHBhZGRyLCBwYWRkcitQVURfU0laRSwgMCkpIHsKIAkJCXNldF9wdWQocHVkLCBfX3B1ZCgwKSk7IAogCQkJY29udGludWU7CiAJCX0gCkBAIC01MDcsOSArNTA3LDggQEAKIAogLyoKICAqIE1lbW9yeSBob3RwbHVnIHNwZWNpZmljIGZ1bmN0aW9ucwotICogVGhlc2UgYXJlIG9ubHkgZm9yIG5vbi1OVU1BIG1hY2hpbmVzIHJpZ2h0IG5vdy4KICAqLwotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworI2lmIGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIHx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUllfTU9EVUxFKQogCiB2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNTIwLDYgKzUxOSwzOCBAQAogCW51bV9waHlzcGFnZXMrKzsKIH0KIAorI2lmbmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKKy8qCisgKiBNZW1vcnkgSG90YWRkIHdpdGhvdXQgc3BhcnNlbWVtLiBUaGUgbWVtX21hcHMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiBhZHZhbmNlLAorICoganVzdCBvbmxpbmUgdGhlIHBhZ2VzLgorICovCitpbnQgX19hZGRfcGFnZXMoc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCWludCBlcnIgPSAtRUlPOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwLCBtZW0gPSAwOworCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBzdGFydF9wZm4gKyBucl9wYWdlczsgcGZuKyspIHsKKwkJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCQlvbmxpbmVfcGFnZShwZm5fdG9fcGFnZShwZm4pKTsKKwkJCWVyciA9IDA7CisJCQltZW0rKzsKKwkJfQorCQl0b3RhbCsrOworCX0KKwlpZiAoIWVycikgeworCQl6LT5zcGFubmVkX3BhZ2VzICs9IHRvdGFsOworCQl6LT5wcmVzZW50X3BhZ2VzICs9IG1lbTsKKwkJei0+em9uZV9wZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzICs9IHRvdGFsOworCQl6LT56b25lX3BnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgKz0gbWVtOworCX0KKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qCisgKiBNZW1vcnkgaXMgYWRkZWQgYWx3YXlzIHRvIE5PUk1BTCB6b25lLiBUaGlzIG1lYW5zIHlvdSB3aWxsIG5ldmVyIGdldAorICogYWRkaXRpb25hbCBETUEvRE1BMzIgbWVtb3J5LgorICovCiBpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEoMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9udW1hLmMgYi9hcmNoL3g4Nl82NC9tbS9udW1hLmMKaW5kZXggNGJlODJkNi4uY2MwMjU3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vbnVtYS5jCisrKyBiL2FyY2gveDg2XzY0L21tL251bWEuYwpAQCAtMTAwLDExICsxMDAsMzAgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCAqIF9faW5pdAorZWFybHlfbm9kZV9tZW0oaW50IG5vZGVpZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbWVtID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSk7CisJdm9pZCAqcHRyOworCWlmIChtZW0gIT0gLTFMKQorCQlyZXR1cm4gX192YShtZW0pOworCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsCisJCQkJU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmIChwdHIgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBmaW5kICVsdSBieXRlcyBpbiBub2RlICVkXG4iLAorCQkJc2l6ZSwgbm9kZWlkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBwdHI7Cit9CisKIC8qIEluaXRpYWxpemUgYm9vdG1lbSBhbGxvY2F0b3IgZm9yIGEgbm9kZSAqLwogdm9pZCBfX2luaXQgc2V0dXBfbm9kZV9ib290bWVtKGludCBub2RlaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeyAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgYm9vdG1hcF9wYWdlcywgYm9vdG1hcF9zaXplLCBib290bWFwX3N0YXJ0OyAKIAl1bnNpZ25lZCBsb25nIG5vZGVkYXRhX3BoeXM7CisJdm9pZCAqYm9vdG1hcDsKIAljb25zdCBpbnQgcGdkYXRfc2l6ZSA9IHJvdW5kX3VwKHNpemVvZihwZ19kYXRhX3QpLCBQQUdFX1NJWkUpOwogCiAJc3RhcnQgPSByb3VuZF91cChzdGFydCwgWk9ORV9BTElHTik7IApAQCAtMTE0LDEzICsxMzMsMTEgQEAKIAlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwogCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKIAotCW5vZGVkYXRhX3BoeXMgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCBwZ2RhdF9zaXplKTsgCi0JaWYgKG5vZGVkYXRhX3BoeXMgPT0gLTFMKSAKLQkJcGFuaWMoIkNhbm5vdCBmaW5kIG1lbW9yeSBwZ2RhdCBpbiBub2RlICVkXG4iLCBub2RlaWQpOworCW5vZGVfZGF0YVtub2RlaWRdID0gZWFybHlfbm9kZV9tZW0obm9kZWlkLCBzdGFydCwgZW5kLCBwZ2RhdF9zaXplKTsKKwlpZiAobm9kZV9kYXRhW25vZGVpZF0gPT0gTlVMTCkKKwkJcmV0dXJuOworCW5vZGVkYXRhX3BoeXMgPSBfX3BhKG5vZGVfZGF0YVtub2RlaWRdKTsKIAotCURwcmludGsoIm5vZGVkYXRhX3BoeXMgJWx4XG4iLCBub2RlZGF0YV9waHlzKTsgCi0KLQlub2RlX2RhdGFbbm9kZWlkXSA9IHBoeXNfdG9fdmlydChub2RlZGF0YV9waHlzKTsKIAltZW1zZXQoTk9ERV9EQVRBKG5vZGVpZCksIDAsIHNpemVvZihwZ19kYXRhX3QpKTsKIAlOT0RFX0RBVEEobm9kZWlkKS0+YmRhdGEgPSAmcGxhdF9ub2RlX2JkYXRhW25vZGVpZF07CiAJTk9ERV9EQVRBKG5vZGVpZCktPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwpAQCAtMTI5LDkgKzE0NiwxNSBAQAogCS8qIEZpbmQgYSBwbGFjZSBmb3IgdGhlIGJvb3RtZW0gbWFwICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhlbmRfcGZuIC0gc3RhcnRfcGZuKTsgCiAJYm9vdG1hcF9zdGFydCA9IHJvdW5kX3VwKG5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplLCBQQUdFX1NJWkUpOwotCWJvb3RtYXBfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShib290bWFwX3N0YXJ0LCBlbmQsIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQpOwotCWlmIChib290bWFwX3N0YXJ0ID09IC0xTCkgCi0JCXBhbmljKCJOb3QgZW5vdWdoIGNvbnRpbnVvdXMgc3BhY2UgZm9yIGJvb3RtYXAgb24gbm9kZSAlZCIsIG5vZGVpZCk7IAorCWJvb3RtYXAgPSBlYXJseV9ub2RlX21lbShub2RlaWQsIGJvb3RtYXBfc3RhcnQsIGVuZCwKKwkJCQkJYm9vdG1hcF9wYWdlczw8UEFHRV9TSElGVCk7CisJaWYgKGJvb3RtYXAgPT0gTlVMTCkgIHsKKwkJaWYgKG5vZGVkYXRhX3BoeXMgPCBzdGFydCB8fCBub2RlZGF0YV9waHlzID49IGVuZCkKKwkJCWZyZWVfYm9vdG1lbSgodW5zaWduZWQgbG9uZylub2RlX2RhdGFbbm9kZWlkXSxwZ2RhdF9zaXplKTsKKwkJbm9kZV9kYXRhW25vZGVpZF0gPSBOVUxMOworCQlyZXR1cm47CisJfQorCWJvb3RtYXBfc3RhcnQgPSBfX3BhKGJvb3RtYXApOwogCURwcmludGsoImJvb3RtYXAgc3RhcnQgJWx1IHBhZ2VzICVsdVxuIiwgYm9vdG1hcF9zdGFydCwgYm9vdG1hcF9wYWdlcyk7IAogCQogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLApAQCAtMTQyLDYgKzE2NSw5IEBACiAKIAlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgbm9kZWRhdGFfcGh5cywgcGdkYXRfc2l6ZSk7IAogCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLCBib290bWFwX3N0YXJ0LCBib290bWFwX3BhZ2VzPDxQQUdFX1NISUZUKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJc3JhdF9yZXNlcnZlX2FkZF9hcmVhKG5vZGVpZCk7CisjZW5kaWYKIAlub2RlX3NldF9vbmxpbmUobm9kZWlkKTsKIH0gCiAKQEAgLTMzNSw2ICszNjEsOCBAQAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKICAJaWYgKCFzdHJuY21wKG9wdCwibm9hY3BpIiw2KSkKICAJCWFjcGlfbnVtYSA9IC0xOworCWlmICghc3RybmNtcChvcHQsImhvdGFkZD0iLCA3KSkKKwkJaG90YWRkX3BlcmNlbnQgPSBzaW1wbGVfc3RydG91bChvcHQrNywgTlVMTCwgMTApOwogI2VuZGlmCiAJcmV0dXJuIDE7CiB9IApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vc3JhdC5jIGIvYXJjaC94ODZfNjQvbW0vc3JhdC5jCmluZGV4IDJlYjg3OTUuLjE1YWU5ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL3NyYXQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9zcmF0LmMKQEAgLTE1LDE1ICsxNSwyNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogCisjaWYgKGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZX01PRFVMRSkpIFwKKwkJJiYgIWRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQorI2RlZmluZSBSRVNFUlZFX0hPVEFERCAxCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKmFjcGlfc2xpdDsKIAogc3RhdGljIG5vZGVtYXNrX3Qgbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7CiBzdGF0aWMgbm9kZW1hc2tfdCBub2Rlc19mb3VuZCBfX2luaXRkYXRhOwogc3RhdGljIHN0cnVjdCBib290bm9kZSBub2Rlc1tNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IGJvb3Rub2RlIG5vZGVzX2FkZFtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7CitzdGF0aWMgaW50IGZvdW5kX2FkZF9hcmVhIF9faW5pdGRhdGE7CitpbnQgaG90YWRkX3BlcmNlbnQgX19pbml0ZGF0YSA9IDEwOwogc3RhdGljIHU4IHB4bTJub2RlWzI1Nl0gPSB7IFswIC4uLiAyNTVdID0gMHhmZiB9OwogCiAvKiBUb28gc21hbGwgbm9kZXMgY29uZnVzZSB0aGUgVk0gYmFkbHkuIFVzdWFsbHkgdGhleSByZXN1bHQKQEAgLTcxLDYgKzgyLDEwIEBACiBzdGF0aWMgX19pbml0IHZvaWQgY3V0b2ZmX25vZGUoaW50IGksIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBib290bm9kZSAqbmQgPSAmbm9kZXNbaV07CisKKwlpZiAoZm91bmRfYWRkX2FyZWEpCisJCXJldHVybjsKKwogCWlmIChuZC0+c3RhcnQgPCBzdGFydCkgewogCQluZC0+c3RhcnQgPSBzdGFydDsKIAkJaWYgKG5kLT5lbmQgPCBuZC0+c3RhcnQpCkBAIC05MCw2ICsxMDUsOCBAQAogCWFjcGlfbnVtYSA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTE9DQUxfQVBJQzsgaSsrKQogCQlhcGljaWRfdG9fbm9kZVtpXSA9IE5VTUFfTk9fTk9ERTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspCisJCW5vZGVzX2FkZFtpXS5zdGFydCA9IG5vZGVzW2ldLmVuZCA9IDA7CiB9CiAKIHN0YXRpYyBfX2luaXQgaW5saW5lIGludCBzcmF0X2Rpc2FibGVkKHZvaWQpCkBAIC0xNTUsMTEgKzE3MiwxMTQgQEAKIAkgICAgICAgcHhtLCBwYS0+YXBpY19pZCwgbm9kZSk7CiB9CiAKKyNpZmRlZiBSRVNFUlZFX0hPVEFERAorLyoKKyAqIFByb3RlY3QgYWdhaW5zdCB0b28gbGFyZ2UgaG90YWRkIGFyZWFzIHRoYXQgd291bGQgZmlsbCB1cCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgaG90YWRkX2Vub3VnaF9tZW1vcnkoc3RydWN0IGJvb3Rub2RlICpuZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY2F0ZWQ7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9hcmVhX2VuZDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzID0gKG5kLT5lbmQgLSBuZC0+c3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJbG9uZyBtZW0gPSBwYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgYWxsb3dlZDsKKwl1bnNpZ25lZCBsb25nIG9sZHBhZ2VzID0gcGFnZXM7CisKKwlpZiAobWVtIDwgMCkKKwkJcmV0dXJuIDA7CisJYWxsb3dlZCA9IChlbmRfcGZuIC0gZTgyMF9ob2xlX3NpemUoMCwgZW5kX3BmbikpICogUEFHRV9TSVpFOworCWFsbG93ZWQgPSAoYWxsb3dlZCAvIDEwMCkgKiBob3RhZGRfcGVyY2VudDsKKwlpZiAoYWxsb2NhdGVkICsgbWVtID4gYWxsb3dlZCkgeworCQkvKiBHaXZlIHRoZW0gYXQgbGVhc3QgcGFydCBvZiB0aGVpciBob3RhZGQgbWVtb3J5IHVwdG8gaG90YWRkX3BlcmNlbnQKKwkJICAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHNwcmVhZCB0aGUgbGltaXQgb3V0CisJCSAgIG92ZXIgbXVsdGlwbGUgaG90cGx1ZyBhcmVhcywgYnV0IHRoYXQgaXMgdG9vIGNvbXBsaWNhdGVkCisJCSAgIHJpZ2h0IG5vdyAqLworCQlpZiAoYWxsb2NhdGVkID49IGFsbG93ZWQpCisJCQlyZXR1cm4gMDsKKwkJcGFnZXMgPSAoYWxsb3dlZCAtIGFsbG9jYXRlZCArIG1lbSkgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOworCQltZW0gPSBwYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJCW5kLT5lbmQgPSBuZC0+c3RhcnQgKyBwYWdlcypQQUdFX1NJWkU7CisJfQorCS8qIE5vdCBjb21wbGV0ZWx5IGZvb2wgcHJvb2YsIGJ1dCBhIGdvb2Qgc2FuaXR5IGNoZWNrICovCisJYWRkciA9IGZpbmRfZTgyMF9hcmVhKGxhc3RfYXJlYV9lbmQsIGVuZF9wZm48PFBBR0VfU0hJRlQsIG1lbSk7CisJaWYgKGFkZHIgPT0gLTFVTCkKKwkJcmV0dXJuIDA7CisJaWYgKHBhZ2VzICE9IG9sZHBhZ2VzKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNSQVQ6IEhvdGFkZCBhcmVhIGxpbWl0ZWQgdG8gJWx1IGJ5dGVzXG4iLAorCQkJcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJbGFzdF9hcmVhX2VuZCA9IGFkZHIgKyBtZW07CisJYWxsb2NhdGVkICs9IG1lbTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEl0IGlzIGZpbmUgdG8gYWRkIHRoaXMgYXJlYSB0byB0aGUgbm9kZXMgZGF0YSBpdCB3aWxsIGJlIHVzZWQgbGF0ZXIKKyAqIFRoaXMgY29kZSBzdXBwb3J0cyBvbmUgY29udGlnaW91cyBob3QgYWRkIGFyZWEgcGVyIG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgcmVzZXJ2ZV9ob3RhZGQoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgc19wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZV9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKKwlpbnQgY2hhbmdlZCA9IDA7CisJc3RydWN0IGJvb3Rub2RlICpuZCA9ICZub2Rlc19hZGRbbm9kZV07CisKKwkvKiBJIGhhZCBzb21lIHRyb3VibGUgd2l0aCBzdHJhbmdlIG1lbW9yeSBob3RhZGQgcmVnaW9ucyBicmVha2luZworCSAgIHRoZSBib290LiBCZSB2ZXJ5IHN0cmljdCBoZXJlIGFuZCByZWplY3QgYW55dGhpbmcgdW5leHBlY3RlZC4KKwkgICBJZiB5b3Ugd2FudCB3b3JraW5nIG1lbW9yeSBob3RhZGQgd3JpdGUgY29ycmVjdCBTUkFUcy4KKworCSAgIFRoZSBub2RlIHNpemUgY2hlY2sgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gZ3VhcmQgYWdhaW5zdAorCSAgIG1pc3Rha2VzICovCisJaWYgKChzaWduZWQgbG9uZykoZW5kIC0gc3RhcnQpIDwgTk9ERV9NSU5fU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgYXJlYSB0b28gc21hbGxcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogVGhpcyBjaGVjayBtaWdodCBiZSBhIGJpdCB0b28gc3RyaWN0LCBidXQgSSdtIGtlZXBpbmcgaXQgZm9yIG5vdy4gKi8KKwlpZiAoZTgyMF9ob2xlX3NpemUoc19wZm4sIGVfcGZuKSAhPSBlX3BmbiAtIHNfcGZuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU1JBVDogSG90cGx1ZyBhcmVhIGhhcyBleGlzdGluZyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFob3RhZGRfZW5vdWdoX21lbW9yeSgmbm9kZXNfYWRkW25vZGVdKSkgIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBIb3RwbHVnIGFyZWEgdG9vIGxhcmdlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIExvb2tzIGdvb2QgKi8KKworIAlmb3VuZF9hZGRfYXJlYSA9IDE7CisJaWYgKG5kLT5zdGFydCA9PSBuZC0+ZW5kKSB7CisgCQluZC0+c3RhcnQgPSBzdGFydDsKKyAJCW5kLT5lbmQgPSBlbmQ7CisJCWNoYW5nZWQgPSAxOworIAl9IGVsc2UgeworIAkJaWYgKG5kLT5zdGFydCA9PSBlbmQpIHsKKyAJCQluZC0+c3RhcnQgPSBzdGFydDsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisgCQlpZiAobmQtPmVuZCA9PSBzdGFydCkgeworIAkJCW5kLT5lbmQgPSBlbmQ7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCQlpZiAoIWNoYW5nZWQpCisJCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgem9uZSBub3QgY29udGludW91cy4gUGFydGx5IGlnbm9yZWRcbiIpOworIAl9CisKKyAJaWYgKChuZC0+ZW5kID4+IFBBR0VfU0hJRlQpID4gZW5kX3BmbikKKyAJCWVuZF9wZm4gPSBuZC0+ZW5kID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoY2hhbmdlZCkKKwkgCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IGhvdCBwbHVnIHpvbmUgZm91bmQgJUx4IC0gJUx4XG4iLCBuZC0+c3RhcnQsIG5kLT5lbmQpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qIENhbGxiYWNrIGZvciBwYXJzaW5nIG9mIHRoZSBQcm94aW1pdHkgRG9tYWluIDwtPiBNZW1vcnkgQXJlYSBtYXBwaW5ncyAqLwogdm9pZCBfX2luaXQKIGFjcGlfbnVtYV9tZW1vcnlfYWZmaW5pdHlfaW5pdChzdHJ1Y3QgYWNwaV90YWJsZV9tZW1vcnlfYWZmaW5pdHkgKm1hKQogewotCXN0cnVjdCBib290bm9kZSAqbmQ7CisJc3RydWN0IGJvb3Rub2RlICpuZCwgb2xkbm9kZTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJaW50IG5vZGUsIHB4bTsKIAlpbnQgaTsKQEAgLTE3Miw2ICsyOTIsOCBAQAogCX0KIAlpZiAobWEtPmZsYWdzLmVuYWJsZWQgPT0gMCkKIAkJcmV0dXJuOworIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgaG90YWRkX3BlcmNlbnQgPT0gMCkKKwkJcmV0dXJuOwogCXN0YXJ0ID0gbWEtPmJhc2VfYWRkcl9sbyB8ICgodTY0KW1hLT5iYXNlX2FkZHJfaGkgPDwgMzIpOwogCWVuZCA9IHN0YXJ0ICsgKG1hLT5sZW5ndGhfbG8gfCAoKHU2NCltYS0+bGVuZ3RoX2hpIDw8IDMyKSk7CiAJcHhtID0gbWEtPnByb3hpbWl0eV9kb21haW47CkBAIC0xODEsMTAgKzMwMyw2IEBACiAJCWJhZF9zcmF0KCk7CiAJCXJldHVybjsKIAl9Ci0JLyogSXQgaXMgZmluZSB0byBhZGQgdGhpcyBhcmVhIHRvIHRoZSBub2RlcyBkYXRhIGl0IHdpbGwgYmUgdXNlZCBsYXRlciovCi0JaWYgKG1hLT5mbGFncy5ob3RfcGx1Z2dhYmxlID09IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IGhvdCBwbHVnIHpvbmUgZm91bmQgJWx4IC0gJWx4IFxuIiwKLQkJCQlzdGFydCwgZW5kKTsKIAlpID0gY29uZmxpY3Rpbmdfbm9kZXMoc3RhcnQsIGVuZCk7CiAJaWYgKGkgPT0gbm9kZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xOTksNiArMzE3LDcgQEAKIAkJcmV0dXJuOwogCX0KIAluZCA9ICZub2Rlc1tub2RlXTsKKwlvbGRub2RlID0gKm5kOwogCWlmICghbm9kZV90ZXN0X2FuZF9zZXQobm9kZSwgbm9kZXNfcGFyc2VkKSkgewogCQluZC0+c3RhcnQgPSBzdGFydDsKIAkJbmQtPmVuZCA9IGVuZDsKQEAgLTIwOCw4ICszMjcsMTkgQEAKIAkJaWYgKG5kLT5lbmQgPCBlbmQpCiAJCQluZC0+ZW5kID0gZW5kOwogCX0KKwogCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IE5vZGUgJXUgUFhNICV1ICVMeC0lTHhcbiIsIG5vZGUsIHB4bSwKIAkgICAgICAgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKKworI2lmZGVmIFJFU0VSVkVfSE9UQURECisgCWlmIChtYS0+ZmxhZ3MuaG90X3BsdWdnYWJsZSAmJiByZXNlcnZlX2hvdGFkZChub2RlLCBzdGFydCwgZW5kKSA8IDApIHsKKwkJLyogSWdub3JlIGhvdGFkZCByZWdpb24uIFVuZG8gZGFtYWdlICovCisJCXByaW50ayhLRVJOX05PVElDRSAiU1JBVDogSG90cGx1ZyByZWdpb24gaWdub3JlZFxuIik7CisJCSpuZCA9IG9sZG5vZGU7CisJCWlmICgobmQtPnN0YXJ0IHwgbmQtPmVuZCkgPT0gMCkKKwkJCW5vZGVfY2xlYXIobm9kZSwgbm9kZXNfcGFyc2VkKTsKKwl9CisjZW5kaWYKIH0KIAogLyogU2FuaXR5IGNoZWNrIHRvIGNhdGNoIG1vcmUgYmFkIFNSQVRzICh0aGV5IGFyZSBhbWF6aW5nbHkgY29tbW9uKS4KQEAgLTIyNSw2ICszNTUsOSBAQAogCQl1bnNpZ25lZCBsb25nIGUgPSBub2Rlc1tpXS5lbmQgPj4gUEFHRV9TSElGVDsKIAkJcHhtcmFtICs9IGUgLSBzOwogCQlweG1yYW0gLT0gZTgyMF9ob2xlX3NpemUocywgZSk7CisJCXB4bXJhbSAtPSBub2Rlc19hZGRbaV0uZW5kIC0gbm9kZXNfYWRkW2ldLnN0YXJ0OworCQlpZiAoKGxvbmcpcHhtcmFtIDwgMCkKKwkJCXB4bXJhbSA9IDA7CiAJfQogCiAJZTgyMHJhbSA9IGVuZF9wZm4gLSBlODIwX2hvbGVfc2l6ZSgwLCBlbmRfcGZuKTsKQEAgLTI1OCw3ICszOTEsNyBAQAogCiAJLyogRmlyc3QgY2xlYW4gdXAgdGhlIG5vZGUgbGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykgewotCQljdXRvZmZfbm9kZShpLCBzdGFydCwgZW5kKTsKKyAJCWN1dG9mZl9ub2RlKGksIHN0YXJ0LCBlbmQpOwogCQlpZiAoKG5vZGVzW2ldLmVuZCAtIG5vZGVzW2ldLnN0YXJ0KSA8IE5PREVfTUlOX1NJWkUpCiAJCQl1bnBhcnNlX25vZGUoaSk7CiAJfQpAQCAtMjgyLDYgKzQxNSwxMiBAQAogCS8qIEZpbmFsbHkgcmVnaXN0ZXIgbm9kZXMgKi8KIAlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKQogCQlzZXR1cF9ub2RlX2Jvb3RtZW0oaSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVzW2ldLmVuZCk7CisJLyogVHJ5IGFnYWluIGluIGNhc2Ugc2V0dXBfbm9kZV9ib290bWVtIG1pc3NlZCBvbmUgZHVlCisJICAgdG8gbWlzc2luZyBib290bWVtICovCisJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZCkKKwkJaWYgKCFub2RlX29ubGluZShpKSkKKwkJCXNldHVwX25vZGVfYm9vdG1lbShpLCBub2Rlc1tpXS5zdGFydCwgbm9kZXNbaV0uZW5kKTsKKwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsgCiAJCWlmIChjcHVfdG9fbm9kZVtpXSA9PSBOVU1BX05PX05PREUpCiAJCQljb250aW51ZTsKQEAgLTMwMyw2ICs0NDIsMjUgQEAKICAgICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBfX2luaXQgc3JhdF9yZXNlcnZlX2FkZF9hcmVhKGludCBub2RlaWQpCit7CisJaWYgKGZvdW5kX2FkZF9hcmVhICYmIG5vZGVzX2FkZFtub2RlaWRdLmVuZCkgeworCQl1NjQgdG90YWxfbWI7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDogUmVzZXJ2aW5nIGhvdC1hZGQgbWVtb3J5IHNwYWNlICIKKwkJCQkiZm9yIG5vZGUgJWQgYXQgJUx4LSVMeFxuIiwKKwkJCW5vZGVpZCwgbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQsIG5vZGVzX2FkZFtub2RlaWRdLmVuZCk7CisJCXRvdGFsX21iID0gKG5vZGVzX2FkZFtub2RlaWRdLmVuZCAtIG5vZGVzX2FkZFtub2RlaWRdLnN0YXJ0KQorCQkJCQk+PiBQQUdFX1NISUZUOworCQl0b3RhbF9tYiAqPSBzaXplb2Yoc3RydWN0IHBhZ2UpOworCQl0b3RhbF9tYiA+Pj0gMjA7CisJCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IFRoaXMgd2lsbCBjb3N0IHlvdSAlTHUgTUIgb2YgIgorCQkJCSJwcmUtYWxsb2NhdGVkIG1lbW9yeS5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxfbWIpOworCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQsCisJCQkgICAgICAgbm9kZXNfYWRkW25vZGVpZF0uZW5kIC0gbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQpOworCX0KK30KKwogaW50IF9fbm9kZV9kaXN0YW5jZShpbnQgYSwgaW50IGIpCiB7CiAJaW50IGluZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwppbmRleCBlNjE2NTAwLi5hMjA2MGU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYworKysgYi9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYwpAQCAtOSwxMSArOSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKwogI2luY2x1ZGUgInBjaS5oIgogCiAjZGVmaW5lIE1NQ09ORklHX0FQRVJfU0laRSAoMjU2KjEwMjQqMTAyNCkKKy8qIFZlcmlmeSB0aGUgZmlyc3QgMTYgYnVzc2VzLiBXZSBhc3N1bWUgdGhhdCBzeXN0ZW1zIHdpdGggbW9yZSBidXNzZXMKKyAgIGdldCBNQ0ZHIHJpZ2h0LiAqLworI2RlZmluZSBNQVhfQ0hFQ0tfQlVTIDE2CiAKLXN0YXRpYyBERUNMQVJFX0JJVE1BUChmYWxsYmFja19zbG90cywgMzIpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCAzMipNQVhfQ0hFQ0tfQlVTKTsKIAogLyogU3RhdGljIHZpcnR1YWwgbWFwcGluZyBvZiB0aGUgTU1DT05GSUcgYXBlcnR1cmUgKi8KIHN0cnVjdCBtbWNmZ192aXJ0IHsKQEAgLTU1LDcgKzYwLDggQEAKIHN0YXRpYyBjaGFyIF9faW9tZW0gKnBjaV9kZXZfYmFzZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pCiB7CiAJY2hhciBfX2lvbWVtICphZGRyOwotCWlmIChzZWcgPT0gMCAmJiBidXMgPT0gMCAmJiB0ZXN0X2JpdChQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKKwlpZiAoc2VnID09IDAgJiYgYnVzIDwgTUFYX0NIRUNLX0JVUyAmJgorCQl0ZXN0X2JpdCgzMipidXMgKyBQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKIAkJcmV0dXJuIE5VTEw7CiAJYWRkciA9IGdldF92aXJ0KHNlZywgYnVzKTsKIAlpZiAoIWFkZHIpCkBAIC02OSw4ICs3NSwxMCBAQAogCWNoYXIgX19pb21lbSAqYWRkcjsKIAogCS8qIFdoeSBkbyB3ZSBoYXZlIHRoaXMgd2hlbiBub2JvZHkgY2hlY2tzIGl0LiBIb3cgYWJvdXQgYSBCVUcoKSE/IC1BSyAqLwotCWlmICh1bmxpa2VseSghdmFsdWUgfHwgKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gNDA5NSkpKQorCWlmICh1bmxpa2VseSgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkpIHsKKwkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWFkZHIgPSBwY2lfZGV2X2Jhc2Uoc2VnLCBidXMsIGRldmZuKTsKIAlpZiAoIWFkZHIpCkBAIC0xMjksMjEgKzEzNywyNiBAQAogICAgTm9ybWFsbHkgdGhpcyBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBNQ0ZHIGJ5IG5vdCBsaXN0aW5nIHRoZW0KICAgIGFuZCBhc3NpZ25pbmcgc3VpdGFibGUgX1NFR3MsIGJ1dCB0aGlzIGlzbid0IGltcGxlbWVudGVkIGluIHNvbWUgQklPUy4KICAgIEluc3RlYWQgdHJ5IHRvIGRpc2NvdmVyIGFsbCBkZXZpY2VzIG9uIGJ1cyAwIHRoYXQgYXJlIHVucmVhY2hhYmxlIHVzaW5nIE1NCi0gICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uCi0gICBXZSBvbmx5IGRvIHRoaXMgZm9yIGJ1cyAwL3NlZyAwICovCisgICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uICovCiBzdGF0aWMgX19pbml0IHZvaWQgdW5yZWFjaGFibGVfZGV2aWNlcyh2b2lkKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiB2YWwxOwotCQljaGFyIF9faW9tZW0gKmFkZHI7CisJaW50IGksIGs7CisJLyogVXNlIHRoZSBtYXggYnVzIG51bWJlciBmcm9tIEFDUEkgaGVyZT8gKi8KKwlmb3IgKGsgPSAwOyBrIDwgTUFYX0NIRUNLX0JVUzsgaysrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQl1MzIgdmFsMTsKKwkJCWNoYXIgX19pb21lbSAqYWRkcjsKIAotCQlwY2lfY29uZjFfcmVhZCgwLCAwLCBQQ0lfREVWRk4oaSwwKSwgMCwgNCwgJnZhbDEpOwotCQlpZiAodmFsMSA9PSAweGZmZmZmZmZmKQotCQkJY29udGludWU7Ci0JCWFkZHIgPSBwY2lfZGV2X2Jhc2UoMCwgMCwgUENJX0RFVkZOKGksIDApKTsKLQkJaWYgKGFkZHIgPT0gTlVMTHx8IHJlYWRsKGFkZHIpICE9IHZhbDEpIHsKLQkJCXNldF9iaXQoaSwgZmFsbGJhY2tfc2xvdHMpOworCQkJcGNpX2NvbmYxX3JlYWQoMCwgaywgUENJX0RFVkZOKGksMCksIDAsIDQsICZ2YWwxKTsKKwkJCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCisJCQkJY29udGludWU7CisJCQlhZGRyID0gcGNpX2Rldl9iYXNlKDAsIGssIFBDSV9ERVZGTihpLCAwKSk7CisJCQlpZiAoYWRkciA9PSBOVUxMfHwgcmVhZGwoYWRkcikgIT0gdmFsMSkgeworCQkJCXNldF9iaXQoaSArIDMyKmssIGZhbGxiYWNrX3Nsb3RzKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCQkiUENJOiBObyBtbWNvbmZpZyBwb3NzaWJsZSBvbiBkZXZpY2UgJXg6JXhcbiIsCisJCQkJCWssIGkpOworCQkJfQogCQl9CiAJfQogfQpAQCAtMTYxLDYgKzE3NCwxNCBAQAogCSAgICAocGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgPT0gMCkpCiAJCXJldHVybjsKIAorCWlmICghZTgyMF9hbGxfbWFwcGVkKHBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzLAorCQkJcGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MgKyBNTUNPTkZJR19BUEVSX1NJWkUsCisJCQlFODIwX1JFU0VSVkVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQklPUyBCdWc6IE1DRkcgYXJlYSBpcyBub3QgRTgyMC1yZXNlcnZlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBOb3QgdXNpbmcgTU1DT05GSUcuXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFJFRC1QRU4gaTM4NiBkb2Vzbid0IGRvIF9ub2NhY2hlIHJpZ2h0IG5vdyAqLwogCXBjaV9tbWNmZ192aXJ0ID0ga21hbGxvYyhzaXplb2YoKnBjaV9tbWNmZ192aXJ0KSAqIHBjaV9tbWNmZ19jb25maWdfbnVtLCBHRlBfS0VSTkVMKTsKIAlpZiAocGNpX21tY2ZnX3ZpcnQgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jCmluZGV4IDE1MmI5MzcuLmExNWI2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC94dGVuc2Ffa3N5bXMuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIEVYUE9SVF9TWU1CT0woc3RyY2F0KTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDVjYjk2MzAuLmMyNDY1MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0zMjksNyArMzI5LDcgQEAKIGNvbmZpZyBBQ1BJX0hPVFBMVUdfTUVNT1JZCiAJdHJpc3RhdGUgIk1lbW9yeSBIb3RwbHVnIgogCWRlcGVuZHMgb24gQUNQSQotCWRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcKKwlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHIHx8IFg4Nl82NAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydHMgZm9yIEFDUEkgTWVtb3J5IEhvdHBsdWcuICBUaGlzIGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggMTZjNTEzYS4uYzgwYzNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlvdGhlcl9ub2RlID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKIAkJc3RydWN0IHpvbmUgKnogPSAmcGctPm5vZGVfem9uZXNbaV07Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzID0gem9uZV9wY3AoeixjcHUpOwogCQkJbnVtYV9oaXQgKz0gcHMtPm51bWFfaGl0OwogCQkJbnVtYV9taXNzICs9IHBzLT5udW1hX21pc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMgYi9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMKaW5kZXggY2U0YTFjZS4uZWMwMDQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9henRjZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vYXp0Y2QuYwpAQCAtMTc2Myw3ICsxNzYzLDcgQEAKIAkJCQlyZWxlYXNlX3JlZ2lvbihhenRfcG9ydCwgNCk7CiAJCQl9CiAJCX0KLQkJaWYgKChhenRfcG9ydF9hdXRvW2ldID09IDApIHx8IChpID09IDE2KSkgeworCQlpZiAoKGkgPT0gMTYpIHx8IChhenRfcG9ydF9hdXRvW2ldID09IDApKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJhenRjZDogbm8gQVpURUNIIENELVJPTSBkcml2ZSBmb3VuZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCA4ODljYWQwLi40MDIyOTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtODA1LDEwICs4MDUsNiBAQAogCSAgU2Ftc3VuZyBTM0MyNDEwLiBUaGlzIGNhbiBwcm92aWRlIHBlcmlvZGljIGludGVycnVwdCByYXRlcwogCSAgZnJvbSAxSHogdG8gNjRIeiBmb3IgdXNlciBwcm9ncmFtcywgYW5kIHdha2V1cCBmcm9tIEFsYXJtLgogCi1jb25maWcgUlRDX1ZSNDFYWAotCXRyaXN0YXRlICJORUMgVlI0MTAwIHNlcmllcyBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9WUjQxWFgKLQogY29uZmlnIENPQkFMVF9MQ0QKIAlib29sICJTdXBwb3J0IGZvciBDb2JhbHQgTENEIgogCWRlcGVuZHMgb24gTUlQU19DT0JBTFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQppbmRleCBhNzNjYjQ5Li5mNWIwMWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC02Nyw3ICs2Nyw2IEBACiBvYmotJChDT05GSUdfU0dJX0lQMjdfUlRDKQkrPSBpcDI3LXJ0Yy5vCiBvYmotJChDT05GSUdfRFMxMzAyKQkJKz0gZHMxMzAyLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX1JUQykJKz0gczNjMjQxMC1ydGMubwotb2JqLSQoQ09ORklHX1JUQ19WUjQxWFgpCSs9IHZyNDF4eF9ydGMubwogaWZlcSAoJChDT05GSUdfR0VORVJJQ19OVlJBTSkseSkKICAgb2JqLSQoQ09ORklHX05WUkFNKQkrPSBnZW5lcmljX252cmFtLm8KIGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKaW5kZXggOTI3YTViYi4uYTM3MGU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCWlmICghYm9hcmRubykKIAkJYm9hcmRubyA9IHJlYWRiKGxvYyArIE5VTUNBUkRfT1dORVJfVE9fUEMpOwogCi0JaWYgKCFib2FyZG5vICYmIGJvYXJkbm8gPiBNQVhfQk9BUkQpIHsKKwlpZiAoIWJvYXJkbm8gfHwgYm9hcmRubyA+IE1BWF9CT0FSRCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJCb2FyZCAjJWQgKGF0IDB4JWx4KSBpcyBvdXQgb2YgcmFuZ2UgKDEgPD0geCA8PSAlZCkuXG4iLAogCQkgICAgICAgYm9hcmRubywgcGh5c2xvYywgTUFYX0JPQVJEKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHRsay5jIGIvZHJpdmVycy9jaGFyL2R0bGsuYwppbmRleCBhMjI5OTE1Li44N2RjYWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHRsay5jCisrKyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQlyZWxlYXNlX3JlZ2lvbihkdGxrX3BvcnRsaXN0W2ldLCBEVExLX0lPX0VYVEVOVCk7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG5Eb3VibGVUYWxrIFBDIC0gbm90IGZvdW5kXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJEb3VibGVUYWxrIFBDIC0gbm90IGZvdW5kXG4iKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwppbmRleCAwZGVkMDQ2Li45ZjJmOGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwpAQCAtOTQxLDYgKzk0MSw3IEBACiAJCQlsaXN0X2RlbCgmbXNnLT5saW5rKTsKIAkJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJm1zZ3MpOwogCQl9CisJCWludGYtPndhaXRpbmdfZXZlbnRzX2NvdW50ID0gMDsKIAl9CiAKIAkvKiBIb2xkIHRoZSBldmVudHMgbG9jayB3aGlsZSBkb2luZyB0aGlzIHRvIHByZXNlcnZlIG9yZGVyLiAqLwpAQCAtMjkxNiw2ICsyOTE3LDcgQEAKIAogCQljb3B5X2V2ZW50X2ludG9fcmVjdl9tc2cocmVjdl9tc2csIG1zZyk7CiAJCWxpc3RfYWRkX3RhaWwoJihyZWN2X21zZy0+bGluayksICYoaW50Zi0+d2FpdGluZ19ldmVudHMpKTsKKwkJaW50Zi0+d2FpdGluZ19ldmVudHNfY291bnQrKzsKIAl9IGVsc2UgewogCQkvKiBUaGVyZSdzIHRvbyBtYW55IHRoaW5ncyBpbiB0aGUgcXVldWUsIGRpc2NhcmQgdGhpcwogCQkgICBtZXNzYWdlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDg2YmUwNGIuLjU4ZjM1MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTE1ODQsNyArMTU4NCw2IEBACiAKIAlyZXR1cm4gdHdvdGhpcmRzTUQ0VHJhbnNmb3JtKGRhZGRyLCBoYXNoKTsKIH0KLUVYUE9SVF9TWU1CT0woc2VjdXJlX2lwdjZfcG9ydF9lcGhlbWVyYWwpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19JUF9EQ0NQKSB8fCBkZWZpbmVkKENPTkZJR19JUF9EQ0NQX01PRFVMRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90bGNsay5jIGIvZHJpdmVycy9jaGFyL3RsY2xrLmMKaW5kZXggMjU0NjYzNy4uZjU4YWQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RsY2xrLmMKKysrIGIvZHJpdmVycy9jaGFyL3RsY2xrLmMKQEAgLTMyNyw3ICszMjcsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIocmVjZWl2ZWRfcmVmX2NsazNhLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKHJlY2VpdmVkX3JlZl9jbGszYSwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX3JlY2VpdmVkX3JlZl9jbGszYSk7CiAKIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihyZWNlaXZlZF9yZWZfY2xrM2IsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIocmVjZWl2ZWRfcmVmX2NsazNiLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfcmVjZWl2ZWRfcmVmX2NsazNiKTsKIAogCkBAIC0zNzEsNyArMzcxLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGszYl9vdXRwdXQsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2NsazNiX291dHB1dCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2VuYWJsZV9jbGszYl9vdXRwdXQpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9lbmFibGVfY2xrM2Ffb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmQsCkBAIC0zOTIsNyArMzkyLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGszYV9vdXRwdXQsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2NsazNhX291dHB1dCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2VuYWJsZV9jbGszYV9vdXRwdXQpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9lbmFibGVfY2xrYjFfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmQsCkBAIC00MTMsNyArNDEzLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGtiMV9vdXRwdXQsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2IxX291dHB1dCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2VuYWJsZV9jbGtiMV9vdXRwdXQpOwogCiAKQEAgLTQzNSw3ICs0MzUsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2ExX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYTFfb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2Nsa2ExX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZV9jbGtiMF9vdXRwdXQoc3RydWN0IGRldmljZSAqZCwKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2IwX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYjBfb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2Nsa2IwX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZV9jbGthMF9vdXRwdXQoc3RydWN0IGRldmljZSAqZCwKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2EwX291dHB1dCwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYTBfb3V0cHV0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfZW5hYmxlX2Nsa2EwX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NlbGVjdF9hbWNiMl90cmFuc21pdF9jbG9jayhzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNTE5LDcgKzUxOSw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfYW1jYjJfdHJhbnNtaXRfY2xvY2ssIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X2FtY2IyX3RyYW5zbWl0X2Nsb2NrLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAlzdG9yZV9zZWxlY3RfYW1jYjJfdHJhbnNtaXRfY2xvY2spOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9zZWxlY3RfYW1jYjFfdHJhbnNtaXRfY2xvY2soc3RydWN0IGRldmljZSAqZCwKQEAgLTU2MCw3ICs1NjAsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X2FtY2IxX3RyYW5zbWl0X2Nsb2NrLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9hbWNiMV90cmFuc21pdF9jbG9jaywgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX3NlbGVjdF9hbWNiMV90cmFuc21pdF9jbG9jayk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NlbGVjdF9yZWR1bmRhbnRfY2xvY2soc3RydWN0IGRldmljZSAqZCwKQEAgLTU4MSw3ICs1ODEsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X3JlZHVuZGFudF9jbG9jaywgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfcmVkdW5kYW50X2Nsb2NrLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfc2VsZWN0X3JlZHVuZGFudF9jbG9jayk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NlbGVjdF9yZWZfZnJlcXVlbmN5KHN0cnVjdCBkZXZpY2UgKmQsCkBAIC02MDIsNyArNjAyLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9yZWZfZnJlcXVlbmN5LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9yZWZfZnJlcXVlbmN5LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfc2VsZWN0X3JlZl9mcmVxdWVuY3kpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9maWx0ZXJfc2VsZWN0KHN0cnVjdCBkZXZpY2UgKmQsCkBAIC02MjMsNyArNjIzLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGZpbHRlcl9zZWxlY3QsIFNfSVdVR08sIE5VTEwsIHN0b3JlX2ZpbHRlcl9zZWxlY3QpOworc3RhdGljIERFVklDRV9BVFRSKGZpbHRlcl9zZWxlY3QsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLCBzdG9yZV9maWx0ZXJfc2VsZWN0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfaGFyZHdhcmVfc3dpdGNoaW5nX21vZGUoc3RydWN0IGRldmljZSAqZCwKIAkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTY0Myw3ICs2NDMsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoaGFyZHdhcmVfc3dpdGNoaW5nX21vZGUsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoaGFyZHdhcmVfc3dpdGNoaW5nX21vZGUsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9oYXJkd2FyZV9zd2l0Y2hpbmdfbW9kZSk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2hhcmR3YXJlX3N3aXRjaGluZyhzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNjY0LDcgKzY2NCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZV9zd2l0Y2hpbmcsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoaGFyZHdhcmVfc3dpdGNoaW5nLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfaGFyZHdhcmVfc3dpdGNoaW5nKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVmYWxpZ24gKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC02ODQsNyArNjg0LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHJlZmFsaWduLCBTX0lXVUdPLCBOVUxMLCBzdG9yZV9yZWZhbGlnbik7CitzdGF0aWMgREVWSUNFX0FUVFIocmVmYWxpZ24sIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLCBzdG9yZV9yZWZhbGlnbik7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX21vZGVfc2VsZWN0IChzdHJ1Y3QgZGV2aWNlICpkLAogCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNzA0LDcgKzcwNCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihtb2RlX3NlbGVjdCwgU19JV1VHTywgTlVMTCwgc3RvcmVfbW9kZV9zZWxlY3QpOworc3RhdGljIERFVklDRV9BVFRSKG1vZGVfc2VsZWN0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgc3RvcmVfbW9kZV9zZWxlY3QpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9yZXNldCAoc3RydWN0IGRldmljZSAqZCwKIAkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTcyNCw3ICs3MjQsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIocmVzZXQsIFNfSVdVR08sIE5VTEwsIHN0b3JlX3Jlc2V0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXNldCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIHN0b3JlX3Jlc2V0KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRsY2xrX3N5c2ZzX2VudHJpZXNbXSA9IHsKIAkmZGV2X2F0dHJfY3VycmVudF9yZWYuYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCA5OGIxMjZjLi5mNzBhNDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0zNTEsMTAgKzM1MSwxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc2l6ZTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20pOwogCi1pbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgc2l6ZV90IHNpemUpCitpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywKKwkJCQlzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgY29waWVkID0gMDsKIAlkbyB7CkBAIC0zNjgsMTcgKzM2OCwxNiBAQAogCQl0Yi0+dXNlZCArPSBzcGFjZTsKIAkJY29waWVkICs9IHNwYWNlOwogCQljaGFycyArPSBzcGFjZTsKLS8qIAkJcHJpbnRrKCJGbGlwIGluc2VydCAlZC5cbiIsIHNwYWNlKTsgKi8KIAl9CiAJLyogVGhlcmUgaXMgYSBzbWFsbCBjaGFuY2UgdGhhdCB3ZSBuZWVkIHRvIHNwbGl0IHRoZSBkYXRhIG92ZXIKIAkgICBzZXZlcmFsIGJ1ZmZlcnMuIElmIHRoaXMgaXMgdGhlIGNhc2Ugd2UgbXVzdCBsb29wICovCiAJd2hpbGUgKHVubGlrZWx5KHNpemUgPiBjb3BpZWQpKTsKIAlyZXR1cm4gY29waWVkOwogfQotCiBFWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcpOwogCi1pbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY29uc3QgY2hhciAqZmxhZ3MsIHNpemVfdCBzaXplKQoraW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNvbnN0IGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgY29waWVkID0gMDsKIAlkbyB7CkBAIC0zOTksOSArMzk4LDIwIEBACiAJd2hpbGUgKHVubGlrZWx5KHNpemUgPiBjb3BpZWQpKTsKIAlyZXR1cm4gY29waWVkOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKTsKIAordm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKSB7CisJCXR0eS0+YnVmLnRhaWwtPmFjdGl2ZSA9IDA7CisJCXR0eS0+YnVmLnRhaWwtPmNvbW1pdCA9IHR0eS0+YnVmLnRhaWwtPnVzZWQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOworfQorRVhQT1JUX1NZTUJPTCh0dHlfc2NoZWR1bGVfZmxpcCk7CiAKIC8qCiAgKglQcmVwYXJlIGEgYmxvY2sgb2Ygc3BhY2UgaW4gdGhlIGJ1ZmZlciBmb3IgZGF0YS4gUmV0dXJucyB0aGUgbGVuZ3RoCkBAIC0xNzMwLDcgKzE3NDAsNyBAQAogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksICpvX3R0eTsKIAlpbnQJcHR5X21hc3RlciwgdHR5X2Nsb3NpbmcsIG9fdHR5X2Nsb3NpbmcsIGRvX3NsZWVwOwotCWludAlkZXZwdHNfbWFzdGVyLCBkZXZwdHM7CisJaW50CWRldnB0czsKIAlpbnQJaWR4OwogCWNoYXIJYnVmWzY0XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTc0Nyw3ICsxNzU3LDYgQEAKIAlwdHlfbWFzdGVyID0gKHR0eS0+ZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKIAkJICAgICAgdHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKTsKIAlkZXZwdHMgPSAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9ERVZQVFNfTUVNKSAhPSAwOwotCWRldnB0c19tYXN0ZXIgPSBwdHlfbWFzdGVyICYmIGRldnB0czsKIAlvX3R0eSA9IHR0eS0+bGluazsKIAogI2lmZGVmIFRUWV9QQVJBTk9JQV9DSEVDSwpAQCAtMjE4NSw2ICsyMTk0LDcgQEAKIAkJcmV0dXJuIDA7CiBvdXQxOgogCXJlbGVhc2VfZGV2KGZpbHApOworCXJldHVybiByZXR2YWw7CiBvdXQ6CiAJZG93bigmYWxsb2NhdGVkX3B0eXNfbG9jayk7CiAJaWRyX3JlbW92ZSgmYWxsb2NhdGVkX3B0eXMsIGluZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTA5ZDlhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTcgKzAsMCBAQAotLyoKLSAqICBEcml2ZXIgZm9yIE5FQyBWUjQxMDAgc2VyaWVzICBSZWFsIFRpbWUgQ2xvY2sgdW5pdC4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgIFlvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3ZyNDF4eC92cjQxeHguaD4KLQotTU9EVUxFX0FVVEhPUigiWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk5FQyBWUjQxMDAgc2VyaWVzIFJUQyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2RlZmluZSBSVEMxX1RZUEUxX1NUQVJUCTB4MGIwMDAwYzBVTAotI2RlZmluZSBSVEMxX1RZUEUxX0VORAkJMHgwYjAwMDBkZlVMCi0jZGVmaW5lIFJUQzJfVFlQRTFfU1RBUlQJMHgwYjAwMDFjMFVMCi0jZGVmaW5lIFJUQzJfVFlQRTFfRU5ECQkweDBiMDAwMWRmVUwKLQotI2RlZmluZSBSVEMxX1RZUEUyX1NUQVJUCTB4MGYwMDAxMDBVTAotI2RlZmluZSBSVEMxX1RZUEUyX0VORAkJMHgwZjAwMDExZlVMCi0jZGVmaW5lIFJUQzJfVFlQRTJfU1RBUlQJMHgwZjAwMDEyMFVMCi0jZGVmaW5lIFJUQzJfVFlQRTJfRU5ECQkweDBmMDAwMTNmVUwKLQotI2RlZmluZSBSVEMxX1NJWkUJCTB4MjAKLSNkZWZpbmUgUlRDMl9TSVpFCQkweDIwCi0KLS8qIFJUQyAxIHJlZ2lzdGVycyAqLwotI2RlZmluZSBFVElNRUxSRUcJCTB4MDAKLSNkZWZpbmUgRVRJTUVNUkVHCQkweDAyCi0jZGVmaW5lIEVUSU1FSFJFRwkJMHgwNAotLyogUkZVICovCi0jZGVmaW5lIEVDTVBMUkVHCQkweDA4Ci0jZGVmaW5lIEVDTVBNUkVHCQkweDBhCi0jZGVmaW5lIEVDTVBIUkVHCQkweDBjCi0vKiBSRlUgKi8KLSNkZWZpbmUgUlRDTDFMUkVHCQkweDEwCi0jZGVmaW5lIFJUQ0wxSFJFRwkJMHgxMgotI2RlZmluZSBSVENMMUNOVExSRUcJCTB4MTQKLSNkZWZpbmUgUlRDTDFDTlRIUkVHCQkweDE2Ci0jZGVmaW5lIFJUQ0wyTFJFRwkJMHgxOAotI2RlZmluZSBSVENMMkhSRUcJCTB4MWEKLSNkZWZpbmUgUlRDTDJDTlRMUkVHCQkweDFjCi0jZGVmaW5lIFJUQ0wyQ05USFJFRwkJMHgxZQotCi0vKiBSVEMgMiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVENMS0xSRUcJCTB4MDAKLSNkZWZpbmUgVENMS0hSRUcJCTB4MDIKLSNkZWZpbmUgVENMS0NOVExSRUcJCTB4MDQKLSNkZWZpbmUgVENMS0NOVEhSRUcJCTB4MDYKLS8qIFJGVSAqLwotI2RlZmluZSBSVENJTlRSRUcJCTB4MWUKLSAjZGVmaW5lIFRDTE9DS19JTlQJCTB4MDgKLSAjZGVmaW5lIFJUQ0xPTkcyX0lOVAkJMHgwNAotICNkZWZpbmUgUlRDTE9ORzFfSU5UCQkweDAyCi0gI2RlZmluZSBFTEFQU0VEVElNRV9JTlQJMHgwMQotCi0jZGVmaW5lIFJUQ19GUkVRVUVOQ1kJCTMyNzY4Ci0jZGVmaW5lIE1BWF9QRVJJT0RJQ19SQVRFCTY1NTMKLSNkZWZpbmUgTUFYX1VTRVJfUEVSSU9ESUNfUkFURQk2NAotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpydGMxX2Jhc2U7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpydGMyX2Jhc2U7Ci0KLSNkZWZpbmUgcnRjMV9yZWFkKG9mZnNldCkJCXJlYWR3KHJ0YzFfYmFzZSArIChvZmZzZXQpKQotI2RlZmluZSBydGMxX3dyaXRlKG9mZnNldCwgdmFsdWUpCXdyaXRldygodmFsdWUpLCBydGMxX2Jhc2UgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBydGMyX3JlYWQob2Zmc2V0KQkJcmVhZHcocnRjMl9iYXNlICsgKG9mZnNldCkpCi0jZGVmaW5lIHJ0YzJfd3JpdGUob2Zmc2V0LCB2YWx1ZSkJd3JpdGV3KCh2YWx1ZSksIHJ0YzJfYmFzZSArIChvZmZzZXQpKQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBlcG9jaCA9IDE5NzA7CS8qIEphbiAxIDE5NzAgMDA6MDA6MDAgKi8KLQotc3RhdGljIHNwaW5sb2NrX3QgcnRjX3Rhc2tfbG9jazsKLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBydGNfd2FpdDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ0Y19pcnFfZGF0YTsKLXN0YXRpYyBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqcnRjX2FzeW5jX3F1ZXVlOwotc3RhdGljIHJ0Y190YXNrX3QgKnJ0Y19jYWxsYmFjazsKLXN0YXRpYyBjaGFyIHJ0Y19uYW1lW10gPSAiUlRDIjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmlvZGljX2ZyZXF1ZW5jeTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmlvZGljX2NvdW50OwotCi10eXBlZGVmIGVudW0gewotCVJUQ19SRUxFQVNFLAotCVJUQ19PUEVOLAotfSBydGNfc3RhdHVzX3Q7Ci0KLXN0YXRpYyBydGNfc3RhdHVzX3QgcnRjX3N0YXR1czsKLQotdHlwZWRlZiBlbnVtIHsKLQlGVU5DVElPTl9SVENfSU9DVEwsCi0JRlVOQ1RJT05fUlRDX0NPTlRST0wsCi19IHJ0Y19jYWxsZnJvbV90OwotCi1zdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlWzJdID0gewotCXsJLm5hbWUJPSBydGNfbmFtZSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCX0sCi0JewkubmFtZQk9IHJ0Y19uYW1lLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJfSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2VsYXBzZWRfc2Vjb25kKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9sb3csIGZpcnN0X21pZCwgZmlyc3RfaGlnaDsKLQl1bnNpZ25lZCBsb25nIHNlY29uZF9sb3csIHNlY29uZF9taWQsIHNlY29uZF9oaWdoOwotCi0JZG8gewotCQlmaXJzdF9sb3cgPSBydGMxX3JlYWQoRVRJTUVMUkVHKTsKLQkJZmlyc3RfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7Ci0JCWZpcnN0X2hpZ2ggPSBydGMxX3JlYWQoRVRJTUVIUkVHKTsKLQkJc2Vjb25kX2xvdyA9IHJ0YzFfcmVhZChFVElNRUxSRUcpOwotCQlzZWNvbmRfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7Ci0JCXNlY29uZF9oaWdoID0gcnRjMV9yZWFkKEVUSU1FSFJFRyk7Ci0JfSB3aGlsZSAoZmlyc3RfbG93ICE9IHNlY29uZF9sb3cgfHwgZmlyc3RfbWlkICE9IHNlY29uZF9taWQgfHwKLQkgICAgICAgICBmaXJzdF9oaWdoICE9IHNlY29uZF9oaWdoKTsKLQotCXJldHVybiAoZmlyc3RfaGlnaCA8PCAxNykgfCAoZmlyc3RfbWlkIDw8IDEpIHwgKGZpcnN0X2xvdyA+PiAxNSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9lbGFwc2VkX3NlY29uZCh1bnNpZ25lZCBsb25nIHNlYykKLXsKLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlydGMxX3dyaXRlKEVUSU1FTFJFRywgKHVpbnQxNl90KShzZWMgPDwgMTUpKTsKLQlydGMxX3dyaXRlKEVUSU1FTVJFRywgKHVpbnQxNl90KShzZWMgPj4gMSkpOwotCXJ0YzFfd3JpdGUoRVRJTUVIUkVHLCAodWludDE2X3QpKHNlYyA+PiAxNykpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9hbGFybShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCi17Ci0JdW5zaWduZWQgbG9uZyBhbGFybV9zZWM7Ci0KLQlhbGFybV9zZWMgPSBta3RpbWUodGltZS0+dG1feWVhciArIDE5MDAsIHRpbWUtPnRtX21vbiArIDEsIHRpbWUtPnRtX21kYXksCi0JICAgICAgICAgICAgICAgICAgIHRpbWUtPnRtX2hvdXIsIHRpbWUtPnRtX21pbiwgdGltZS0+dG1fc2VjKTsKLQotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJ0YzFfd3JpdGUoRUNNUExSRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjIDw8IDE1KSk7Ci0JcnRjMV93cml0ZShFQ01QTVJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPj4gMSkpOwotCXJ0YzFfd3JpdGUoRUNNUEhSRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjID4+IDE3KSk7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcmVhZF9hbGFybShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCi17Ci0JdW5zaWduZWQgbG9uZyBsb3csIG1pZCwgaGlnaDsKLQotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCWxvdyA9IHJ0YzFfcmVhZChFQ01QTFJFRyk7Ci0JbWlkID0gcnRjMV9yZWFkKEVDTVBNUkVHKTsKLQloaWdoID0gcnRjMV9yZWFkKEVDTVBIUkVHKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JdG9fdG0oKGhpZ2ggPDwgMTcpIHwgKG1pZCA8PCAxKSB8IChsb3cgPj4gMTUpLCB0aW1lKTsKLQl0aW1lLT50bV95ZWFyIC09IDE5MDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlYWRfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCi17Ci0JdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGVsYXBzZWRfc2VjOwotCi0JZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKLQllbGFwc2VkX3NlYyA9IHJlYWRfZWxhcHNlZF9zZWNvbmQoKTsKLQotCXRvX3RtKGVwb2NoX3NlYyArIGVsYXBzZWRfc2VjLCB0aW1lKTsKLQl0aW1lLT50bV95ZWFyIC09IDE5MDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF90aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGVwb2NoX3NlYywgY3VycmVudF9zZWM7Ci0KLQllcG9jaF9zZWMgPSBta3RpbWUoZXBvY2gsIDEsIDEsIDAsIDAsIDApOwotCWN1cnJlbnRfc2VjID0gbWt0aW1lKHRpbWUtPnRtX3llYXIgKyAxOTAwLCB0aW1lLT50bV9tb24gKyAxLCB0aW1lLT50bV9tZGF5LAotCSAgICAgICAgICAgICAgICAgICAgIHRpbWUtPnRtX2hvdXIsIHRpbWUtPnRtX21pbiwgdGltZS0+dG1fc2VjKTsKLQotCXdyaXRlX2VsYXBzZWRfc2Vjb25kKGN1cnJlbnRfc2VjIC0gZXBvY2hfc2VjKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcnRjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCXVuc2lnbmVkIGxvbmcgaXJxX2RhdGE7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAoY291bnQgIT0gc2l6ZW9mKHVuc2lnbmVkIGludCkgJiYgY291bnQgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFkZF93YWl0X3F1ZXVlKCZydGNfd2FpdCwgJndhaXQpOwotCi0JZG8gewotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCQlpcnFfZGF0YSA9IHJ0Y19pcnFfZGF0YTsKLQkJcnRjX2lycV9kYXRhID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQkJaWYgKGlycV9kYXRhICE9IDApCi0JCQlicmVhazsKLQotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXJldHZhbCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlICgxKTsKLQotCWlmIChyZXR2YWwgPT0gMCkgewotCQlpZiAoY291bnQgPT0gc2l6ZW9mKHVuc2lnbmVkIGludCkpIHsKLQkJCXJldHZhbCA9IHB1dF91c2VyKGlycV9kYXRhLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWJ1Zik7Ci0JCQlpZiAocmV0dmFsID09IDApCi0JCQkJcmV0dmFsID0gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSBwdXRfdXNlcihpcnFfZGF0YSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYnVmKTsKLQkJCWlmIChyZXR2YWwgPT0gMCkKLQkJCQlyZXR2YWwgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci0JCX0KLQotCX0KLQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcnRjX3dhaXQsICZ3YWl0KTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnRjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqdGFibGUpCi17Ci0JcG9sbF93YWl0KGZpbGUsICZydGNfd2FpdCwgdGFibGUpOwotCi0JaWYgKHJ0Y19pcnFfZGF0YSAhPSAwKQotCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0Y19kb19pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgcnRjX2NhbGxmcm9tX3QgZnJvbSkKLXsKLQlzdHJ1Y3QgcnRjX3RpbWUgdGltZTsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT046Ci0JCWVuYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfUElFX09OOgotCQllbmFibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1BJRV9PRkY6Ci0JCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FMTV9TRVQ6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdGltZSwgKHN0cnVjdCBydGNfdGltZSBfX3VzZXIgKilhcmcsCi0JCSAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlzZXRfYWxhcm0oJnRpbWUpOwotCQlicmVhazsKLQljYXNlIFJUQ19BTE1fUkVBRDoKLQkJbWVtc2V0KCZ0aW1lLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7Ci0JCXJlYWRfYWxhcm0oJnRpbWUpOwotCQlicmVhazsKLQljYXNlIFJUQ19SRF9USU1FOgotCQltZW1zZXQoJnRpbWUsIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKLQkJcmVhZF90aW1lKCZ0aW1lKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ0aW1lLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfU0VUX1RJTUU6Ci0JCWlmIChjYXBhYmxlKENBUF9TWVNfVElNRSkgPT0gMCkKLQkJCXJldHVybiAtRUFDQ0VTOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmdGltZSwgKHN0cnVjdCBydGNfdGltZSBfX3VzZXIgKilhcmcsCi0JCSAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlzZXRfdGltZSgmdGltZSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0lSUVBfUkVBRDoKLQkJcmV0dXJuIHB1dF91c2VyKHBlcmlvZGljX2ZyZXF1ZW5jeSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfSVJRUF9TRVQ6Ci0JCWlmIChhcmcgPiBNQVhfUEVSSU9ESUNfUkFURSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChmcm9tID09IEZVTkNUSU9OX1JUQ19JT0NUTCAmJiBhcmcgPiBNQVhfVVNFUl9QRVJJT0RJQ19SQVRFICYmCi0JCSAgICBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpID09IDApCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQotCQlwZXJpb2RpY19mcmVxdWVuY3kgPSBhcmc7Ci0KLQkJY291bnQgPSBSVENfRlJFUVVFTkNZOwotCQlkb19kaXYoY291bnQsIGFyZyk7Ci0KLQkJcGVyaW9kaWNfY291bnQgPSBjb3VudDsKLQotCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQkJcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKLQkJcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKLQotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfRVBPQ0hfUkVBRDoKLQkJcmV0dXJuIHB1dF91c2VyKGVwb2NoLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOwotCWNhc2UgUlRDX0VQT0NIX1NFVDoKLQkJLyogRG9lc24ndCBzdXBwb3J0IGJlZm9yZSAxOTAwICovCi0JCWlmIChhcmcgPCAxOTAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGNhcGFibGUoQ0FQX1NZU19USU1FKSA9PSAwKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0KLQkJZXBvY2ggPSBhcmc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0Y19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXJldHVybiBydGNfZG9faW9jdGwoY21kLCBhcmcsIEZVTkNUSU9OX1JUQ19JT0NUTCk7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JaWYgKHJ0Y19zdGF0dXMgPT0gUlRDX09QRU4pIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcnRjX3N0YXR1cyA9IFJUQ19PUEVOOwotCXJ0Y19pcnFfZGF0YSA9IDA7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0Y19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChmaWxlLT5mX2ZsYWdzICYgRkFTWU5DKQotCQkodm9pZClmYXN5bmNfaGVscGVyKC0xLCBmaWxlLCAwLCAmcnRjX2FzeW5jX3F1ZXVlKTsKLQotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJ0YzFfd3JpdGUoRUNNUExSRUcsIDApOwotCXJ0YzFfd3JpdGUoRUNNUE1SRUcsIDApOwotCXJ0YzFfd3JpdGUoRUNNUEhSRUcsIDApOwotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgMCk7Ci0KLQlydGNfc3RhdHVzID0gUlRDX1JFTEVBU0U7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7Ci0JZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0Y19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQotewotCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnJ0Y19hc3luY19xdWV1ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0Y19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkucmVhZAkJPSBydGNfcmVhZCwKLQkucG9sbAkJPSBydGNfcG9sbCwKLQkuaW9jdGwJCT0gcnRjX2lvY3RsLAotCS5vcGVuCQk9IHJ0Y19vcGVuLAotCS5yZWxlYXNlCT0gcnRjX3JlbGVhc2UsCi0JLmZhc3luYwkJPSBydGNfZmFzeW5jLAotfTsKLQotc3RhdGljIGlycXJldHVybl90IGVsYXBzZWR0aW1lX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXNwaW5fbG9jaygmcnRjX2xvY2spOwotCXJ0YzJfd3JpdGUoUlRDSU5UUkVHLCBFTEFQU0VEVElNRV9JTlQpOwotCi0JcnRjX2lycV9kYXRhICs9IDB4MTAwOwotCXJ0Y19pcnFfZGF0YSAmPSB+MHhmZjsKLQlydGNfaXJxX2RhdGEgfD0gUlRDX0FGOwotCXNwaW5fdW5sb2NrKCZydGNfbG9jayk7Ci0KLQlzcGluX2xvY2soJnJ0Y19sb2NrKTsKLQlpZiAocnRjX2NhbGxiYWNrKQotCQlydGNfY2FsbGJhY2stPmZ1bmMocnRjX2NhbGxiYWNrLT5wcml2YXRlX2RhdGEpOwotCXNwaW5fdW5sb2NrKCZydGNfbG9jayk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJ0Y193YWl0KTsKLQotCWtpbGxfZmFzeW5jKCZydGNfYXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHJ0Y2xvbmcxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgY291bnQgPSBwZXJpb2RpY19jb3VudDsKLQotCXNwaW5fbG9jaygmcnRjX2xvY2spOwotCXJ0YzJfd3JpdGUoUlRDSU5UUkVHLCBSVENMT05HMV9JTlQpOwotCi0JcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKLQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOwotCi0JcnRjX2lycV9kYXRhICs9IDB4MTAwOwotCXJ0Y19pcnFfZGF0YSAmPSB+MHhmZjsKLQlydGNfaXJxX2RhdGEgfD0gUlRDX1BGOwotCXNwaW5fdW5sb2NrKCZydGNfbG9jayk7Ci0KLQlzcGluX2xvY2soJnJ0Y190YXNrX2xvY2spOwotCWlmIChydGNfY2FsbGJhY2spCi0JCXJ0Y19jYWxsYmFjay0+ZnVuYyhydGNfY2FsbGJhY2stPnByaXZhdGVfZGF0YSk7Ci0Jc3Bpbl91bmxvY2soJnJ0Y190YXNrX2xvY2spOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZydGNfd2FpdCk7Ci0KLQlraWxsX2Zhc3luYygmcnRjX2FzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLWludCBydGNfcmVnaXN0ZXIocnRjX3Rhc2tfdCAqdGFzaykKLXsKLQlpZiAodGFzayA9PSBOVUxMIHx8IHRhc2stPmZ1bmMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JaWYgKHJ0Y19zdGF0dXMgPT0gUlRDX09QRU4pIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZydGNfdGFza19sb2NrKTsKLQlpZiAocnRjX2NhbGxiYWNrICE9IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2soJnJ0Y190YXNrX2xvY2spOwotCQlzcGluX3VubG9ja19pcnEoJnJ0Y190YXNrX2xvY2spOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJ0Y19jYWxsYmFjayA9IHRhc2s7Ci0Jc3Bpbl91bmxvY2soJnJ0Y190YXNrX2xvY2spOwotCi0JcnRjX3N0YXR1cyA9IFJUQ19PUEVOOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwocnRjX3JlZ2lzdGVyKTsKLQotaW50IHJ0Y191bnJlZ2lzdGVyKHJ0Y190YXNrX3QgKnRhc2spCi17Ci0Jc3Bpbl9sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0JaWYgKHRhc2sgPT0gTlVMTCB8fCBydGNfY2FsbGJhY2sgIT0gdGFzaykgewotCQlzcGluX3VubG9ja19pcnEoJnJ0Y190YXNrX2xvY2spOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCXNwaW5fbG9jaygmcnRjX2xvY2spOwotCi0JcnRjMV93cml0ZShFQ01QTFJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QTVJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QSFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUxSRUcsIDApOwotCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCAwKTsKLQotCXJ0Y19zdGF0dXMgPSBSVENfUkVMRUFTRTsKLQotCXNwaW5fdW5sb2NrKCZydGNfbG9jayk7Ci0KLQlydGNfY2FsbGJhY2sgPSBOVUxMOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQotCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7Ci0JZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChydGNfdW5yZWdpc3Rlcik7Ci0KLWludCBydGNfY29udHJvbChydGNfdGFza190ICp0YXNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXNwaW5fbG9ja19pcnEoJnJ0Y190YXNrX2xvY2spOwotCi0JaWYgKHJ0Y19jYWxsYmFjayAhPSB0YXNrKQotCQlyZXR2YWwgPSAtRU5YSU87Ci0JZWxzZQotCQlydGNfZG9faW9jdGwoY21kLCBhcmcsIEZVTkNUSU9OX1JUQ19DT05UUk9MKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChydGNfY29udHJvbCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBydGNfbWlzY2RldmljZSA9IHsKLQkubWlub3IJPSBSVENfTUlOT1IsCi0JLm5hbWUJPSBydGNfbmFtZSwKLQkuZm9wcwk9ICZydGNfZm9wcywKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJ0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IHJldHZhbDsKLQotCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlydGMxX2Jhc2UgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCBSVEMxX1NJWkUpOwotCWlmIChydGMxX2Jhc2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJ0YzJfYmFzZSA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFJUQzJfU0laRSk7Ci0JaWYgKHJ0YzJfYmFzZSA9PSBOVUxMKSB7Ci0JCWlvdW5tYXAocnRjMV9iYXNlKTsKLQkJcnRjMV9iYXNlID0gTlVMTDsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlyZXR2YWwgPSBtaXNjX3JlZ2lzdGVyKCZydGNfbWlzY2RldmljZSk7Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJaW91bm1hcChydGMxX2Jhc2UpOwotCQlpb3VubWFwKHJ0YzJfYmFzZSk7Ci0JCXJ0YzFfYmFzZSA9IE5VTEw7Ci0JCXJ0YzJfYmFzZSA9IE5VTEw7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcnRjMV93cml0ZShFQ01QTFJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QTVJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QSFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUxSRUcsIDApOwotCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCAwKTsKLQotCXJ0Y19zdGF0dXMgPSBSVENfUkVMRUFTRTsKLQlydGNfaXJxX2RhdGEgPSAwOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZydGNfd2FpdCk7Ci0KLQlpcnEgPSBFTEFQU0VEVElNRV9JUlE7Ci0JcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBlbGFwc2VkdGltZV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKLQkgICAgICAgICAgICAgICAgICAgICAiZWxhcHNlZF90aW1lIiwgTlVMTCk7Ci0JaWYgKHJldHZhbCA9PSAwKSB7Ci0JCWlycSA9IFJUQ0xPTkcxX0lSUTsKLQkJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBydGNsb25nMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKLQkJICAgICAgICAgICAgICAgICAgICAgInJ0Y2xvbmcxIiwgTlVMTCk7Ci0JfQotCi0JaWYgKHJldHZhbCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSVkIGlzIGJ1c3lcbiIsIGlycSk7Ci0JCWlmIChpcnEgPT0gUlRDTE9ORzFfSVJRKQotCQkJZnJlZV9pcnEoRUxBUFNFRFRJTUVfSVJRLCBOVUxMKTsKLQkJaW91bm1hcChydGMxX2Jhc2UpOwotCQlpb3VubWFwKHJ0YzJfYmFzZSk7Ci0JCXJ0YzFfYmFzZSA9IE5VTEw7Ci0JCXJ0YzJfYmFzZSA9IE5VTEw7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKLQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnJ0Y190YXNrX2xvY2spOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAicnRjOiBSZWFsIFRpbWUgQ2xvY2sgb2YgTkVDIFZSNDEwMCBzZXJpZXNcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHJ0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBtaXNjX2RlcmVnaXN0ZXIoJnJ0Y19taXNjZGV2aWNlKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCWZyZWVfaXJxKEVMQVBTRURUSU1FX0lSUSwgTlVMTCk7Ci0JZnJlZV9pcnEoUlRDTE9ORzFfSVJRLCBOVUxMKTsKLQlpZiAocnRjMV9iYXNlICE9IE5VTEwpCi0JCWlvdW5tYXAocnRjMV9iYXNlKTsKLQlpZiAocnRjMl9iYXNlICE9IE5VTEwpCi0JCWlvdW5tYXAocnRjMl9iYXNlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnRjX3BsYXRmb3JtX2RldmljZTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX2RldmljZV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHJ0Y19wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJ0Y19yZW1vdmUpLAotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IHJ0Y19uYW1lLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdnI0MXh4X3J0Y19pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7Ci0JY2FzZSBDUFVfVlI0MTExOgotCWNhc2UgQ1BVX1ZSNDEyMToKLQkJcnRjX3Jlc291cmNlWzBdLnN0YXJ0ID0gUlRDMV9UWVBFMV9TVEFSVDsKLQkJcnRjX3Jlc291cmNlWzBdLmVuZCA9IFJUQzFfVFlQRTFfRU5EOwotCQlydGNfcmVzb3VyY2VbMV0uc3RhcnQgPSBSVEMyX1RZUEUxX1NUQVJUOwotCQlydGNfcmVzb3VyY2VbMV0uZW5kID0gUlRDMl9UWVBFMV9FTkQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX1ZSNDEyMjoKLQljYXNlIENQVV9WUjQxMzE6Ci0JY2FzZSBDUFVfVlI0MTMzOgotCQlydGNfcmVzb3VyY2VbMF0uc3RhcnQgPSBSVEMxX1RZUEUyX1NUQVJUOwotCQlydGNfcmVzb3VyY2VbMF0uZW5kID0gUlRDMV9UWVBFMl9FTkQ7Ci0JCXJ0Y19yZXNvdXJjZVsxXS5zdGFydCA9IFJUQzJfVFlQRTJfU1RBUlQ7Ci0JCXJ0Y19yZXNvdXJjZVsxXS5lbmQgPSBSVEMyX1RZUEUyX0VORDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWJyZWFrOwotCX0KLQotCXJ0Y19wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIlJUQyIsIC0xKTsKLQlpZiAoIXJ0Y19wbGF0Zm9ybV9kZXZpY2UpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocnRjX3BsYXRmb3JtX2RldmljZSwKLQkJCQlydGNfcmVzb3VyY2UsIEFSUkFZX1NJWkUocnRjX3Jlc291cmNlKSk7Ci0KLQlpZiAocmV0dmFsID09IDApCi0JCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQocnRjX3BsYXRmb3JtX2RldmljZSk7Ci0KLQlpZiAocmV0dmFsIDwgMCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnRjX2RldmljZV9kcml2ZXIpOwotCWlmIChyZXR2YWwgPCAwKQotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihydGNfcGxhdGZvcm1fZGV2aWNlKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB2cjQxeHhfcnRjX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnRjX2RldmljZV9kcml2ZXIpOwotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwotfQotCi1tb2R1bGVfaW5pdCh2cjQxeHhfcnRjX2luaXQpOwotbW9kdWxlX2V4aXQodnI0MXh4X3J0Y19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCAyM2E5ZTFlLi4xNjU5ZjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC01MDksMTIgKzUwOSwyMiBAQAogCX0JCQkJCQlcCiB9CiAKKyNkZWZpbmUgSERBUFNfRE1JX01BVENIX0xFTk9WTyhtb2RlbCkgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICAuaWRlbnQgPSAiTGVub3ZvICIgbW9kZWwsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQsICAgICAgICAgICAgIFwKKyAgICAgICAgLm1hdGNoZXMgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiTEVOT1ZPIiksICBcCisgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKSAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCiBzdGF0aWMgaW50IF9faW5pdCBoZGFwc19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCS8qIE5vdGUgdGhhdCBETUlfTUFUQ0goLi4uLCJUaGlua1BhZCBUNDIiKSB3aWxsIG1hdGNoICJUaGlua1BhZCBUNDJwIiAqLwogCXN0cnVjdCBkbWlfc3lzdGVtX2lkIGhkYXBzX3doaXRlbGlzdFtdID0geworCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBIIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIlRoaW5rUGFkIFI1MHAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgUjUwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFI1MSIpLApAQCAtNTI0LDE1ICs1MzQsMTcgQEAKIAkJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiVGhpbmtQYWQgVDQycCIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBUNDIiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQzIiksCisJCUhEQVBTX0RNSV9NQVRDSF9MRU5PVk8oIlRoaW5rUGFkIFQ2MHAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MSBUYWJsZXQiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQxIiksCisJCUhEQVBTX0RNSV9NQVRDSF9MRU5PVk8oIlRoaW5rUGFkIFg2MCIpLAogCQl7IC5pZGVudCA9IE5VTEwgfQogCX07CiAKIAlpZiAoIWRtaV9jaGVja19zeXN0ZW0oaGRhcHNfd2hpdGVsaXN0KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFwczogc3VwcG9ydGVkIGxhcHRvcCBub3QgZm91bmQhXG4iKTsKLQkJcmV0ID0gLUVOWElPOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCmluZGV4IDUzYzRmYjYuLjViMjAzZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwpAQCAtMyw4ICszLDggQEAKIAogY29uZmlnIElTRE5fRFJWX0dJR0FTRVQKIAl0cmlzdGF0ZSAiU2llbWVucyBHaWdhc2V0IHN1cHBvcnQgKGlzZG4pIgotCWRlcGVuZHMgb24gSVNETl9JNEwgJiYgbQotIwlkZXBlbmRzIG9uIElTRE5fSTRMICYmIE1PRFVMRVMKKwlkZXBlbmRzIG9uIElTRE5fSTRMCisJc2VsZWN0IENSQ19DQ0lUVAogCWhlbHAKIAkgIFNheSBtIGhlcmUgaWYgeW91IGhhdmUgYSBHaWdhc2V0IG9yIFNpbnVzIGlzZG4gZGV2aWNlLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCmluZGV4IDE3MWY4YjcuLmNlM2NkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwNSBieSBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LAogICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKLSAqICAgICAgICAgICAgICAgICAgICAgICBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPi4KKyAqICAgICAgICAgICAgICAgICAgICAgICBTdGVmYW4gRWlsZXJzLgogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTEsMTAgKzExLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogYXN5bmNkYXRhLmMsdiAxLjIuMi43IDIwMDUvMTEvMTMgMjM6MDU6MTggaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtNDUsNyArNDEsNyBAQAogICoJbnVtYmVyIG9mIHByb2Nlc3NlZCBieXRlcwogICovCiBzdGF0aWMgaW5saW5lIGludCBjbWRfbG9vcCh1bnNpZ25lZCBjaGFyIGMsIHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IG51bWJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOwogCXVuc2lnbmVkIGNieXRlcyAgICAgID0gY3MtPmNieXRlczsKQEAgLTU1LDEwICs1MSwxMSBAQAogCWZvciAoOzspIHsKIAkJY3MtPnJlc3BkYXRhW2NieXRlc10gPSBjOwogCQlpZiAoYyA9PSAxMCB8fCBjID09IDEzKSB7Ci0JCQlkYmcoREVCVUdfVFJBTlNDTUQsICIlczogRW5kIG9mIENvbW1hbmQgKCVkIEJ5dGVzKSIsCi0JCQkgICAgX19mdW5jX18sIGNieXRlcyk7CisJCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAorCQkJCV9fZnVuY19fLCBjYnl0ZXMpOwogCQkJY3MtPmNieXRlcyA9IGNieXRlczsKLQkJCWdpZ2FzZXRfaGFuZGxlX21vZGVtX3Jlc3BvbnNlKGNzKTsgLyogY2FuIGNoYW5nZSBjcy0+ZGxlICovCisJCQlnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZShjcyk7IC8qIGNhbiBjaGFuZ2UKKwkJCQkJCQkgICAgICBjcy0+ZGxlICovCiAJCQljYnl0ZXMgPSAwOwogCiAJCQlpZiAoY3MtPmRsZSAmJgpAQCAtNzEsNyArNjgsNyBAQAogCQkJaWYgKGNieXRlcyA8IE1BWF9SRVNQX1NJWkUgLSAxKQogCQkJCWNieXRlcysrOwogCQkJZWxzZQotCQkJCXdhcm4oInJlc3BvbnNlIHRvbyBsYXJnZSIpOworCQkJCWRldl93YXJuKGNzLT5kZXYsICJyZXNwb25zZSB0b28gbGFyZ2VcbiIpOwogCQl9CiAKIAkJaWYgKCFudW1ieXRlcykKQEAgLTk2LDExICs5MywxMiBAQAogICoJbnVtYmVyIG9mIHByb2Nlc3NlZCBieXRlcwogICovCiBzdGF0aWMgaW5saW5lIGludCBsb2NrX2xvb3AodW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbnVtYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAotCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19MT0NLQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLCBudW1ieXRlcywgc3JjLCAwKTsKKwlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfTE9DS0NNRCwgInJlY2VpdmVkIHJlc3BvbnNlIiwKKwkJCSAgIG51bWJ5dGVzLCBzcmMpOwogCWdpZ2FzZXRfaWZfcmVjZWl2ZShjcywgc3JjLCBudW1ieXRlcyk7CiAKIAlyZXR1cm4gbnVtYnl0ZXM7CkBAIC0xMTUsMjQgKzExMywxOCBAQAogICoJbnVtYnl0ZXMgKGFsbCBieXRlcyBwcm9jZXNzZWQpIG9uIGVycm9yIC0tRklYTUUKICAqLwogc3RhdGljIGlubGluZSBpbnQgaGRsY19sb29wKHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbnVtYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IGluYnVmLT5iY3M7Ci0JaW50IGlucHV0c3RhdGU7Ci0JX191MTYgZmNzOwotCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGlucHV0c3RhdGUgPSBiY3MtPmlucHV0c3RhdGU7CisJX191MTYgZmNzID0gYmNzLT5mY3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJjcy0+c2tiOwogCXVuc2lnbmVkIGNoYXIgZXJyb3I7CiAJc3RydWN0IHNrX2J1ZmYgKmNvbXBza2I7CiAJaW50IHN0YXJ0Ynl0ZXMgPSBudW1ieXRlczsKIAlpbnQgbDsKIAotCUlGTlVMTFJFVFZBTChiY3MsIG51bWJ5dGVzKTsKLQlpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOwotCWZjcyA9IGJjcy0+ZmNzOwotCXNrYiA9IGJjcy0+c2tiOwotCUlGTlVMTFJFVFZBTChza2IsIG51bWJ5dGVzKTsKLQogCWlmICh1bmxpa2VseShpbnB1dHN0YXRlICYgSU5TX2J5dGVfc3R1ZmYpKSB7CiAJCWlucHV0c3RhdGUgJj0gfklOU19ieXRlX3N0dWZmOwogCQlnb3RvIGJ5dGVfc3R1ZmY7CkBAIC0xNTYsMzkgKzE0OCwzNyBAQAogCQkJYyBePSBQUFBfVFJBTlM7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCWlmICh1bmxpa2VseSghbXVzdHN0dWZmKGMpKSkKLQkJCQlkYmcoREVCVUdfSERMQywKLQkJCQkgICAgImJ5dGUgc3R1ZmZlZDogMHglMDJ4IiwgYyk7CisJCQkJZ2lnX2RiZyhERUJVR19IRExDLCAiYnl0ZSBzdHVmZmVkOiAweCUwMngiLCBjKTsKICNlbmRpZgogCQl9IGVsc2UgaWYgKHVubGlrZWx5KGMgPT0gUFBQX0ZMQUcpKSB7CiAJCQlpZiAodW5saWtlbHkoaW5wdXRzdGF0ZSAmIElOU19za2lwX2ZyYW1lKSkgewogCQkJCWlmICghKGlucHV0c3RhdGUgJiBJTlNfaGF2ZV9kYXRhKSkgeyAvKiA3RSA3RSAqLwotCQkJCQkvL2RiZyhERUJVR19IRExDLCAiKDdlKTdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkJKytiY3MtPmVtcHR5Y291bnQ7CiAjZW5kaWYKIAkJCQl9IGVsc2UKLQkJCQkJZGJnKERFQlVHX0hETEMsCisJCQkJCWdpZ19kYmcoREVCVUdfSERMQywKIAkJCQkJICAgICI3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKIAogCQkJCS8qIGVuZCBvZiBmcmFtZSAqLwogCQkJCWVycm9yID0gMTsKIAkJCQlnaWdhc2V0X3Jjdl9lcnJvcihOVUxMLCBjcywgYmNzKTsKIAkJCX0gZWxzZSBpZiAoIShpbnB1dHN0YXRlICYgSU5TX2hhdmVfZGF0YSkpIHsgLyogN0UgN0UgKi8KLQkJCQkvL2RiZyhERUJVR19IRExDLCAiKDdlKTdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkrK2Jjcy0+ZW1wdHljb3VudDsKICNlbmRpZgogCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKLQkJCQlkYmcoREVCVUdfSERMQywKLQkJCQkgICAgIjdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworCQkJCWdpZ19kYmcoREVCVUdfSERMQywKKwkJCQkJIjdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogCiAJCQkJLyogZW5kIG9mIGZyYW1lICovCiAJCQkJZXJyb3IgPSAwOwogCiAJCQkJaWYgKHVubGlrZWx5KGZjcyAhPSBQUFBfR09PREZDUykpIHsKLQkJCQkJZXJyKCJQYWNrZXQgY2hlY2tzdW0gYXQgJWx1IGZhaWxlZCwgIgotCQkJCQkgICAgInBhY2tldCBpcyBjb3JydXB0ZWQgKCV1IGJ5dGVzKSEiLAorCQkJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJCSAgICAiUGFja2V0IGNoZWNrc3VtIGF0ICVsdSBmYWlsZWQsICIKKwkJCQkJICAgICJwYWNrZXQgaXMgY29ycnVwdGVkICgldSBieXRlcykhXG4iLAogCQkJCQkgICAgYmNzLT5yY3ZieXRlcywgc2tiLT5sZW4pOwogCQkJCQljb21wc2tiID0gTlVMTDsKIAkJCQkJZ2lnYXNldF9yY3ZfZXJyb3IoY29tcHNrYiwgY3MsIGJjcyk7CkBAIC0yMDIsOSArMTkyLDExIEBACiAJCQkJCQlza2IgPSBOVUxMOwogCQkJCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJCQkJCWlmIChsID09IDEpIHsKLQkJCQkJCQllcnIoImludmFsaWQgcGFja2V0IHNpemUgKDEpISIpOworCQkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJCSAgImludmFsaWQgcGFja2V0IHNpemUgKDEpIVxuIik7CiAJCQkJCQkJZXJyb3IgPSAxOwotCQkJCQkJCWdpZ2FzZXRfcmN2X2Vycm9yKE5VTEwsIGNzLCBiY3MpOworCQkJCQkJCWdpZ2FzZXRfcmN2X2Vycm9yKE5VTEwsCisJCQkJCQkJCWNzLCBiY3MpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJCWlmIChsaWtlbHkoIShlcnJvciB8fApAQCAtMjI3LDcgKzIxOSw4IEBACiAJCQl9IGVsc2UgaWYgKGxpa2VseSgoc2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKSkgewogCQkJCXNrYl9yZXNlcnZlKHNrYiwgSFdfSERSX0xFTik7CiAJCQl9IGVsc2UgewotCQkJCXdhcm4oImNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgc2tiIik7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICJjb3VsZCBub3QgYWxsb2NhdGUgbmV3IHNrYlxuIik7CiAJCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJCX0KIApAQCAtMjM1LDcgKzIyOCw3IEBACiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJfSBlbHNlIGlmICh1bmxpa2VseShtdXN0c3R1ZmYoYykpKSB7CiAJCQkvKiBTaG91bGQgbm90IGhhcHBlbi4gUG9zc2libGUgYWZ0ZXIgWkRMRT0xPENSPjxMRj4uICovCi0JCQlkYmcoREVCVUdfSERMQywgIm5vdCBieXRlIHN0dWZmZWQ6IDB4JTAyeCIsIGMpOworCQkJZ2lnX2RiZyhERUJVR19IRExDLCAibm90IGJ5dGUgc3R1ZmZlZDogMHglMDJ4IiwgYyk7CiAjZW5kaWYKIAkJfQogCkBAIC0yNDMsOCArMjM2LDggQEAKIAogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCWlmICh1bmxpa2VseSghKGlucHV0c3RhdGUgJiBJTlNfaGF2ZV9kYXRhKSkpIHsKLQkJCWRiZyhERUJVR19IRExDLAotCQkJICAgICI3ZSAoJWQgeCkgPT09PT09PT09PT09PT09PSIsIGJjcy0+ZW1wdHljb3VudCk7CisJCQlnaWdfZGJnKERFQlVHX0hETEMsICI3ZSAoJWQgeCkgPT09PT09PT09PT09PT09PSIsCisJCQkJYmNzLT5lbXB0eWNvdW50KTsKIAkJCWJjcy0+ZW1wdHljb3VudCA9IDA7CiAJCX0KICNlbmRpZgpAQCAtMjUzLDE0ICsyNDYsMTMgQEAKIAogCQlpZiAobGlrZWx5KCEoaW5wdXRzdGF0ZSAmIElOU19za2lwX2ZyYW1lKSkpIHsKIAkJCWlmICh1bmxpa2VseShza2ItPmxlbiA9PSBTQlVGU0laRSkpIHsKLQkJCQl3YXJuKCJyZWNlaXZlZCBwYWNrZXQgdG9vIGxvbmciKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVjZWl2ZWQgcGFja2V0IHRvbyBsb25nXG4iKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCSpnaWdhc2V0X3NrYl9wdXRfcXVpY2soc2tiLCAxKSA9IGM7Ci0JCQkvKiAqX19za2JfcHV0IChza2IsIDEpID0gYzsgKi8KKwkJCSpfX3NrYl9wdXQoc2tiLCAxKSA9IGM7CiAJCQlmY3MgPSBjcmNfY2NpdHRfYnl0ZShmY3MsIGMpOwogCQl9CiAKQEAgLTI4OSwxOSArMjgxLDE0IEBACiAgKgludW1ieXRlcyAoYWxsIGJ5dGVzIHByb2Nlc3NlZCkgb24gZXJyb3IgLS1GSVhNRQogICovCiBzdGF0aWMgaW5saW5lIGludCBpcmF3X2xvb3AodW5zaWduZWQgY2hhciBjLCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBudW1ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5idWZfdCAqaW5idWYpCisJCQkgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOwogCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gaW5idWYtPmJjczsKLQlpbnQgaW5wdXRzdGF0ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOworCXN0cnVjdCBza19idWZmICpza2IgPSBiY3MtPnNrYjsKIAlpbnQgc3RhcnRieXRlcyA9IG51bWJ5dGVzOwogCi0JSUZOVUxMUkVUVkFMKGJjcywgbnVtYnl0ZXMpOwotCWlucHV0c3RhdGUgPSBiY3MtPmlucHV0c3RhdGU7Ci0Jc2tiID0gYmNzLT5za2I7Ci0JSUZOVUxMUkVUVkFMKHNrYiwgbnVtYnl0ZXMpOwotCiAJZm9yICg7OykgewogCQkvKiBhZGQgY2hhcmFjdGVyICovCiAJCWlucHV0c3RhdGUgfD0gSU5TX2hhdmVfZGF0YTsKQEAgLTMwOSwxMyArMjk2LDEzIEBACiAJCWlmIChsaWtlbHkoIShpbnB1dHN0YXRlICYgSU5TX3NraXBfZnJhbWUpKSkgewogCQkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IFNCVUZTSVpFKSkgewogCQkJCS8vRklYTUUganVzdCBwYXNzIHNrYiB1cCBhbmQgYWxsb2NhdGUgYSBuZXcgb25lCi0JCQkJd2FybigicmVjZWl2ZWQgcGFja2V0IHRvbyBsb25nIik7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwgInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIik7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQlza2IgPSBOVUxMOwogCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkqZ2lnYXNldF9za2JfcHV0X3F1aWNrKHNrYiwgMSkgPSBnaWdhc2V0X2ludnRhYltjXTsKKwkJCSpfX3NrYl9wdXQoc2tiLCAxKSA9IGdpZ2FzZXRfaW52dGFiW2NdOwogCQl9CiAKIAkJaWYgKHVubGlrZWx5KCFudW1ieXRlcykpCkBAIC0zNDMsNyArMzMwLDcgQEAKIAkJCQkgICE9IE5VTEwpKSB7CiAJCQlza2JfcmVzZXJ2ZShza2IsIEhXX0hEUl9MRU4pOwogCQl9IGVsc2UgewotCQkJd2FybigiY291bGQgbm90IGFsbG9jYXRlIG5ldyBza2IiKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgbmV3IHNrYlxuIik7CiAJCQlpbnB1dHN0YXRlIHw9IElOU19za2lwX2ZyYW1lOwogCQl9CiAJfQpAQCAtMzY0LDEzICszNTEsMTMgQEAKIAogCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOwogCXRhaWwgPSBhdG9taWNfcmVhZCgmaW5idWYtPnRhaWwpOwotCWRiZyhERUJVR19JTlRSLCAiYnVmZmVyIHN0YXRlOiAldSAtPiAldSIsIGhlYWQsIHRhaWwpOworCWdpZ19kYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKIAogCWlmIChoZWFkICE9IHRhaWwpIHsKIAkJY3MgPSBpbmJ1Zi0+Y3M7CiAJCXNyYyA9IGluYnVmLT5kYXRhICsgaGVhZDsKIAkJbnVtYnl0ZXMgPSAoaGVhZCA+IHRhaWwgPyBSQlVGU0laRSA6IHRhaWwpIC0gaGVhZDsKLQkJZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOwogCiAJCXdoaWxlIChudW1ieXRlcykgewogCQkJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSA9PSBNU19MT0NLRUQpIHsKQEAgLTM5Miw4ICszNzksNyBAQAogCiAJCQkJaWYgKCEoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfRExFX2NoYXIpKSB7CiAKLQkJCQkJLyogRklYTUUgRWluZmFjaCBqZSBuYWNoIE1vZHVzIEZ1bmt0aW9uc3plaWdlciBpbiBjcyBzZXR6ZW4gW2hpZXIraGRsY19sb29wXT8gICovCi0JCQkJCS8qIEZJWE1FIFNwYXJ0IGZvbGdlbmRlcyAiaWYiIHVuZCBlcm1vZWdsaWNodCBhbmRlcmUgUHJvdG9rb2xsZSAqLworCQkJCQkvKiBGSVhNRSB1c2UgZnVuY3Rpb24gcG9pbnRlcnM/ICAqLwogCQkJCQlpZiAoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfY29tbWFuZCkKIAkJCQkJCXByb2NieXRlcyA9IGNtZF9sb29wKGMsIHNyYywgbnVtYnl0ZXMsIGluYnVmKTsKIAkJCQkJZWxzZSBpZiAoaW5idWYtPmJjcy0+cHJvdG8yID09IElTRE5fUFJPVE9fTDJfSERMQykKQEAgLTQwMywxMyArMzg5LDE0IEBACiAKIAkJCQkJc3JjICs9IHByb2NieXRlczsKIAkJCQkJbnVtYnl0ZXMgLT0gcHJvY2J5dGVzOwotCQkJCX0gZWxzZSB7ICAvKiBETEUtY2hhciAqLworCQkJCX0gZWxzZSB7ICAvKiBETEUgY2hhciAqLwogCQkJCQlpbmJ1Zi0+aW5wdXRzdGF0ZSAmPSB+SU5TX0RMRV9jaGFyOwogCQkJCQlzd2l0Y2ggKGMpIHsKIAkJCQkJY2FzZSAnWCc6IC8qYmVnaW4gb2YgY29tbWFuZCovCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkJCWlmIChpbmJ1Zi0+aW5wdXRzdGF0ZSAmIElOU19jb21tYW5kKQotCQkJCQkJCWVycigicmVjZWl2ZWQgPERMRT4gJ1gnIGluIGNvbW1hbmQgbW9kZSIpOworCQkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJInJlY2VpdmVkIDxETEU+ICdYJyBpbiBjb21tYW5kIG1vZGVcbiIpOwogI2VuZGlmCiAJCQkJCQlpbmJ1Zi0+aW5wdXRzdGF0ZSB8PQogCQkJCQkJCUlOU19jb21tYW5kIHwgSU5TX0RMRV9jb21tYW5kOwpAQCAtNDE3LDcgKzQwNCw4IEBACiAJCQkJCWNhc2UgJy4nOiAvKmVuZCBvZiBjb21tYW5kKi8KICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCQkJCQkJaWYgKCEoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfY29tbWFuZCkpCi0JCQkJCQkJZXJyKCJyZWNlaXZlZCA8RExFPiAnLicgaW4gaGRsYyBtb2RlIik7CisJCQkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkicmVjZWl2ZWQgPERMRT4gJy4nIGluIGhkbGMgbW9kZVxuIik7CiAjZW5kaWYKIAkJCQkJCWluYnVmLT5pbnB1dHN0YXRlICY9IGNzLT5kbGUgPwogCQkJCQkJCX4oSU5TX0RMRV9jb21tYW5kfElOU19jb21tYW5kKQpAQCAtNDI1LDcgKzQxMyw5IEBACiAJCQkJCQlicmVhazsKIAkJCQkJLy9jYXNlIERMRV9GTEFHOiAvKkRMRV9GTEFHIGluIGRhdGEgc3RyZWFtKi8gLyogc2Nob24gb2JlbiBiZWhhbmRlbHQhICovCiAJCQkJCWRlZmF1bHQ6Ci0JCQkJCQllcnIoInJlY2VpdmVkIDB4MTAgMHglMDJ4ISIsIChpbnQpIGMpOworCQkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkJICAgICAgInJlY2VpdmVkIDB4MTAgMHglMDJ4IVxuIiwKKwkJCQkJCQkoaW50KSBjKTsKIAkJCQkJCS8qIEZJWE1FOiByZXNldCBkcml2ZXI/PyAqLwogCQkJCQl9CiAJCQkJfQpAQCAtNDQ0LDcgKzQzNCw3IEBACiAJCQl9CiAJCX0KIAotCQlkYmcoREVCVUdfSU5UUiwgInNldHRpbmcgaGVhZCB0byAldSIsIGhlYWQpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJzZXR0aW5nIGhlYWQgdG8gJXUiLCBoZWFkKTsKIAkJYXRvbWljX3NldCgmaW5idWYtPmhlYWQsIGhlYWQpOwogCX0KIH0KQEAgLTQ3OSwxNCArNDY5LDEzIEBACiAJCQlzdHVmX2NudCsrOwogCQlmY3MgPSBjcmNfY2NpdHRfYnl0ZShmY3MsICpjcCsrKTsKIAl9Ci0JZmNzIF49IDB4ZmZmZjsgICAgICAgICAgICAgICAgIC8qIGNvbXBsZW1lbnQgKi8KKwlmY3MgXj0gMHhmZmZmOwkJCS8qIGNvbXBsZW1lbnQgKi8KIAogCS8qIHNpemUgb2YgbmV3IGJ1ZmZlcjogb3JpZ2luYWwgc2l6ZSArIG51bWJlciBvZiBzdHVmZmluZyBieXRlcwogCSAqICsgMiBieXRlcyBGQ1MgKyAyIHN0dWZmaW5nIGJ5dGVzIGZvciBGQ1MgKGlmIG5lZWRlZCkgKyAyIGZsYWcgYnl0ZXMKIAkgKi8KIAloZGxjX3NrYiA9IGRldl9hbGxvY19za2Ioc2tiLT5sZW4gKyBzdHVmX2NudCArIDYgKyB0YWlsICsgaGVhZCk7CiAJaWYgKCFoZGxjX3NrYikgewotCQllcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEhETEMgZW5jb2RpbmchIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNTA4LDcgKzQ5Nyw3IEBACiAJfQogCiAJLyogRmluYWxseSBhZGQgRkNTIChieXRlIHN0dWZmZWQpIGFuZCBmbGFnIHNlcXVlbmNlICovCi0JYyA9IChmY3MgJiAweDAwZmYpOyAgICAgIC8qIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKi8KKwljID0gKGZjcyAmIDB4MDBmZik7CS8qIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKi8KIAlpZiAobXVzdHN0dWZmKGMpKSB7CiAJCSooc2tiX3B1dChoZGxjX3NrYiwgMSkpID0gUFBQX0VTQ0FQRTsKIAkJYyBePSBQUFBfVFJBTlM7CkBAIC01NDYsNyArNTM1LDYgQEAKIAkvKiB3b3JzdCBjYXNlOiBldmVyeSBieXRlIG11c3QgYmUgc3R1ZmZlZCAqLwogCWlyYXdfc2tiID0gZGV2X2FsbG9jX3NrYigyKnNrYi0+bGVuICsgdGFpbCArIGhlYWQpOwogCWlmICghaXJhd19za2IpIHsKLQkJZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBIRExDIGVuY29kaW5nISIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTU3NywyMSArNTY1LDIzIEBACiAgKi8KIGludCBnaWdhc2V0X20xMHhfc2VuZF9za2Ioc3RydWN0IGJjX3N0YXRlICpiY3MsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdW5zaWduZWQgbGVuOwotCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHNrYiwgLUVGQVVMVCk7Ci0JbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChiY3MtPnByb3RvMiA9PSBJU0ROX1BST1RPX0wyX0hETEMpCiAJCXNrYiA9IEhETENfRW5jb2RlKHNrYiwgSFdfSERSX0xFTiwgMCk7CiAJZWxzZQogCQlza2IgPSBpcmF3X2VuY29kZShza2IsIEhXX0hEUl9MRU4sIDApOwotCWlmICghc2tiKQorCWlmICghc2tiKSB7CisJCWVycigidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZW5jb2RpbmchXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJc2tiX3F1ZXVlX3RhaWwoJmJjcy0+c3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmJjcy0+Y3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKGJjcy0+Y3MtPmNvbm5lY3RlZCkKKwkJdGFza2xldF9zY2hlZHVsZSgmYmNzLT5jcy0+d3JpdGVfdGFza2xldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGxlbjsJLyogb2sgc28gZmFyICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwppbmRleCAzMWYwZjA3Li5mODZlZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LAotICogICAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+LgorICogICAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbiBFaWxlcnMuCiAgKgogICogQmFzZWQgb24gdXNiLWdpZ2FzZXQuYy4KICAqCkBAIC0xMywxMCArMTMsNiBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBiYXMtZ2lnYXNldC5jLHYgMS41Mi40LjE5IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtMzAsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBTdGVmYW4gRWlsZXJzIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIERyaXZlciBmb3IgR2lnYXNldCAzMDd4IgogCiAKQEAgLTcwLDkgKzY2LDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdpZ2FzZXRfdGFibGUpOwogCi0vKiBHZXQgYSBtaW5vciByYW5nZSBmb3IgeW91ciBkZXZpY2VzIGZyb20gdGhlIHVzYiBtYWludGFpbmVyICovCi0jZGVmaW5lIFVTQl9TS0VMX01JTk9SX0JBU0UJMjAwCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT0gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdG8gdGhlIFVTQiBwb3J0LiBJdApAQCAtODgsMjUgKzgxLDI1IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0cnVjdCBiYXNfY2FyZHN0YXRlIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdWRldjsJCS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICAgICppbnRlcmZhY2U7CS8qIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsJCS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CS8qIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KIAl1bnNpZ25lZCBjaGFyCQltaW5vcjsJCS8qIHN0YXJ0aW5nIG1pbm9yIG51bWJlciAqLwogCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYl9jdHJsOwkvKiBjb250cm9sIHBpcGUgZGVmYXVsdCBVUkIgKi8KKwlzdHJ1Y3QgdXJiCQkqdXJiX2N0cmw7CS8qIGNvbnRyb2wgcGlwZSBkZWZhdWx0IFVSQiAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJfY3RybDsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcl9jdHJsOwkvKiBjb250cm9sIHJlcXVlc3QgdGltZW91dCAqLwogCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXJfYXRyZHk7CS8qIEFUIGNvbW1hbmQgcmVhZHkgdGltZW91dCAqLwotCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmJfY21kX291dDsJLyogZm9yIHNlbmRpbmcgQVQgY29tbWFuZHMgKi8KKwlzdHJ1Y3QgdXJiCQkqdXJiX2NtZF9vdXQ7CS8qIGZvciBzZW5kaW5nIEFUIGNvbW1hbmRzICovCiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlkcl9jbWRfb3V0OwogCWludAkJCXJldHJ5X2NtZF9vdXQ7CiAKLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiX2NtZF9pbjsJLyogZm9yIHJlY2VpdmluZyBBVCByZXBsaWVzICovCisJc3RydWN0IHVyYgkJKnVyYl9jbWRfaW47CS8qIGZvciByZWNlaXZpbmcgQVQgcmVwbGllcyAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJfY21kX2luOwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyX2NtZF9pbjsJLyogcmVjZWl2ZSByZXF1ZXN0IHRpbWVvdXQgKi8KLQl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqcmN2YnVmOwkvKiBBVCByZXBseSByZWNlaXZlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIJCSpyY3ZidWY7CS8qIEFUIHJlcGx5IHJlY2VpdmUgYnVmZmVyICovCiAKLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiX2ludF9pbjsJLyogVVJCIGZvciBpbnRlcnJ1cHQgcGlwZSAqLworCXN0cnVjdCB1cmIJCSp1cmJfaW50X2luOwkvKiBVUkIgZm9yIGludGVycnVwdCBwaXBlICovCiAJdW5zaWduZWQgY2hhcgkJaW50X2luX2J1ZlszXTsKIAogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBsb2NrcyBhbGwgZm9sbG93aW5nICovCkBAIC0yMDgsNTMgKzIwMSw1NCBAQAogICogd3JpdGUgY29udGVudCBvZiBVUkIgdG8gc3lzbG9nIGZvciBkZWJ1Z2dpbmcKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfdXJiKGVudW0gZGVidWdsZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1cmIgKnVyYikKKwkJCSAgICBzdHJ1Y3QgdXJiICp1cmIpCiB7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAlpbnQgaTsKLQlJRk5VTExSRVQodGFnKTsKLQlkYmcobGV2ZWwsICIlcyB1cmIoMHglMDhseCktPnsiLCB0YWcsICh1bnNpZ25lZCBsb25nKSB1cmIpOworCWdpZ19kYmcobGV2ZWwsICIlcyB1cmIoMHglMDhseCktPnsiLCB0YWcsICh1bnNpZ25lZCBsb25nKSB1cmIpOwogCWlmICh1cmIpIHsKLQkJZGJnKGxldmVsLAotCQkgICAgIiAgZGV2PTB4JTA4bHgsIHBpcGU9JXM6RVAlZC9EViVkOiVzLCAiCi0JCSAgICAic3RhdHVzPSVkLCBoY3ByaXY9MHglMDhseCwgdHJhbnNmZXJfZmxhZ3M9MHgleCwiLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpIHVyYi0+ZGV2LAotCQkgICAgdXNiX3BpcGV0eXBlX3N0cih1cmItPnBpcGUpLAotCQkgICAgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLCB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLAotCQkgICAgdXNiX3BpcGVpbih1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAotCQkgICAgdXJiLT5zdGF0dXMsICh1bnNpZ25lZCBsb25nKSB1cmItPmhjcHJpdiwKLQkJICAgIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwotCQlkYmcobGV2ZWwsCi0JCSAgICAiICB0cmFuc2Zlcl9idWZmZXI9MHglMDhseFslZF0sIGFjdHVhbF9sZW5ndGg9JWQsICIKLQkJICAgICJiYW5kd2lkdGg9JWQsIHNldHVwX3BhY2tldD0weCUwOGx4LCIsCi0JCSAgICAodW5zaWduZWQgbG9uZykgdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCwKLQkJICAgIHVyYi0+YmFuZHdpZHRoLCAodW5zaWduZWQgbG9uZykgdXJiLT5zZXR1cF9wYWNrZXQpOwotCQlkYmcobGV2ZWwsCi0JCSAgICAiICBzdGFydF9mcmFtZT0lZCwgbnVtYmVyX29mX3BhY2tldHM9JWQsIGludGVydmFsPSVkLCAiCi0JCSAgICAiZXJyb3JfY291bnQ9JWQsIiwKLQkJICAgIHVyYi0+c3RhcnRfZnJhbWUsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMsIHVyYi0+aW50ZXJ2YWwsCi0JCSAgICB1cmItPmVycm9yX2NvdW50KTsKLQkJZGJnKGxldmVsLAotCQkgICAgIiAgY29udGV4dD0weCUwOGx4LCBjb21wbGV0ZT0weCUwOGx4LCBpc29fZnJhbWVfZGVzY1tdPXsiLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpIHVyYi0+Y29udGV4dCwKLQkJICAgICh1bnNpZ25lZCBsb25nKSB1cmItPmNvbXBsZXRlKTsKKwkJZ2lnX2RiZyhsZXZlbCwKKwkJCSIgIGRldj0weCUwOGx4LCBwaXBlPSVzOkVQJWQvRFYlZDolcywgIgorCQkJInN0YXR1cz0lZCwgaGNwcml2PTB4JTA4bHgsIHRyYW5zZmVyX2ZsYWdzPTB4JXgsIiwKKwkJCSh1bnNpZ25lZCBsb25nKSB1cmItPmRldiwKKwkJCXVzYl9waXBldHlwZV9zdHIodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCXVyYi0+c3RhdHVzLCAodW5zaWduZWQgbG9uZykgdXJiLT5oY3ByaXYsCisJCQl1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJZ2lnX2RiZyhsZXZlbCwKKwkJCSIgIHRyYW5zZmVyX2J1ZmZlcj0weCUwOGx4WyVkXSwgYWN0dWFsX2xlbmd0aD0lZCwgIgorCQkJImJhbmR3aWR0aD0lZCwgc2V0dXBfcGFja2V0PTB4JTA4bHgsIiwKKwkJCSh1bnNpZ25lZCBsb25nKSB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJdXJiLT5iYW5kd2lkdGgsICh1bnNpZ25lZCBsb25nKSB1cmItPnNldHVwX3BhY2tldCk7CisJCWdpZ19kYmcobGV2ZWwsCisJCQkiICBzdGFydF9mcmFtZT0lZCwgbnVtYmVyX29mX3BhY2tldHM9JWQsIGludGVydmFsPSVkLCAiCisJCQkiZXJyb3JfY291bnQ9JWQsIiwKKwkJCXVyYi0+c3RhcnRfZnJhbWUsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMsIHVyYi0+aW50ZXJ2YWwsCisJCQl1cmItPmVycm9yX2NvdW50KTsKKwkJZ2lnX2RiZyhsZXZlbCwKKwkJCSIgIGNvbnRleHQ9MHglMDhseCwgY29tcGxldGU9MHglMDhseCwgIgorCQkJImlzb19mcmFtZV9kZXNjW109eyIsCisJCQkodW5zaWduZWQgbG9uZykgdXJiLT5jb250ZXh0LAorCQkJKHVuc2lnbmVkIGxvbmcpIHVyYi0+Y29tcGxldGUpOwogCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7Ci0JCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGlmZCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOwotCQkJZGJnKGxldmVsLAotCQkJICAgICIgICAge29mZnNldD0ldSwgbGVuZ3RoPSV1LCBhY3R1YWxfbGVuZ3RoPSV1LCAiCi0JCQkgICAgInN0YXR1cz0ldX0iLAotCQkJICAgIHBpZmQtPm9mZnNldCwgcGlmZC0+bGVuZ3RoLCBwaWZkLT5hY3R1YWxfbGVuZ3RoLAotCQkJICAgIHBpZmQtPnN0YXR1cyk7CisJCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGlmZAorCQkJCT0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CisJCQlnaWdfZGJnKGxldmVsLAorCQkJCSIgICAge29mZnNldD0ldSwgbGVuZ3RoPSV1LCBhY3R1YWxfbGVuZ3RoPSV1LCAiCisJCQkJInN0YXR1cz0ldX0iLAorCQkJCXBpZmQtPm9mZnNldCwgcGlmZC0+bGVuZ3RoLCBwaWZkLT5hY3R1YWxfbGVuZ3RoLAorCQkJCXBpZmQtPnN0YXR1cyk7CiAJCX0KIAl9Ci0JZGJnKGxldmVsLCAifX0iKTsKKwlnaWdfZGJnKGxldmVsLCAifX0iKTsKICNlbmRpZgogfQogCiAvKiByZWFkL3NldCBtb2RlbSBjb250cm9sIGJpdHMgZXRjLiAobTEweCBvbmx5KSAqLwogc3RhdGljIGludCBnaWdhc2V0X3NldF9tb2RlbV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3X3N0YXRlKQorCQkJCSAgdW5zaWduZWQgbmV3X3N0YXRlKQogewogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjgwLDggKzI3NCw4IEBACiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBiY3MtPmNzOwogCi0JZGJnKERFQlVHX0FOWSwKLQkgICAgIiVzOiBzY2hlZHVsaW5nIEhVUCBmb3IgY2hhbm5lbCAlZCIsIF9fZnVuY19fLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IHNjaGVkdWxpbmcgSFVQIGZvciBjaGFubmVsICVkIiwKKwkJX19mdW5jX18sIGJjcy0+Y2hhbm5lbCk7CiAKIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkgewogCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwpAQCAtMzAxLDIyICsyOTUsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlcnJvcl9yZXNldChzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKIAkvL0ZJWE1FIHRyeSB0byByZWNvdmVyIHdpdGhvdXQgYm90aGVyaW5nIHRoZSB1c2VyCi0JZXJyKCJ1bnJlY292ZXJhYmxlIGVycm9yIC0gcGxlYXNlIGRpc2Nvbm5lY3QgdGhlIEdpZ2FzZXQgYmFzZSB0byByZXNldCIpOworCWRldl9lcnIoY3MtPmRldiwKKwkgICAgInVucmVjb3ZlcmFibGUgZXJyb3IgLSBwbGVhc2UgZGlzY29ubmVjdCBHaWdhc2V0IGJhc2UgdG8gcmVzZXRcbiIpOwogfQogCiAvKiBjaGVja19wZW5kaW5nCiAgKiBjaGVjayBmb3IgY29tcGxldGlvbiBvZiBwZW5kaW5nIGNvbnRyb2wgcmVxdWVzdAogICogcGFyYW1ldGVyOgotICoJdXJiCVVTQiByZXF1ZXN0IGJsb2NrIG9mIGNvbXBsZXRlZCByZXF1ZXN0Ci0gKgkJdXJiLT5jb250ZXh0ID0gaGFyZHdhcmUgc3BlY2lmaWMgY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKKyAqCXVjcwloYXJkd2FyZSBzcGVjaWZpYyBjb250cm9sbGVyIHN0YXRlIHN0cnVjdHVyZQogICovCiBzdGF0aWMgdm9pZCBjaGVja19wZW5kaW5nKHN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVCh1Y3MpOwotCUlGTlVMTFJFVChjYXJkc3RhdGUpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVjcy0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAodWNzLT5wZW5kaW5nKSB7CiAJY2FzZSAwOgpAQCAtMzM2LDggKzMyNyw2IEBACiAJY2FzZSBIRF9DTE9TRV9BVENIQU5ORUw6CiAJCWlmICghKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0FUT1BFTikpCiAJCQl1Y3MtPnBlbmRpbmcgPSAwOwotCQkvL3dha2VfdXBfaW50ZXJydXB0aWJsZShjcy0+aW5pdHdhaXQpOwotCQkvL0ZJWE1FIG5lZWQgb3duIHdhaXQgcXVldWU/CiAJCWJyZWFrOwogCWNhc2UgSERfQ0xPU0VfQjFDSEFOTkVMOgogCQlpZiAoIShhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19CMU9QRU4pKQpAQCAtMzU0LDcgKzM0Myw5IEBACiAJICogYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBhbmQgc2hvdWxkIG5ldmVyIGVuZCB1cCBoZXJlCiAJICovCiAJZGVmYXVsdDoKLQkJd2FybigidW5rbm93biBwZW5kaW5nIHJlcXVlc3QgMHglMDJ4IGNsZWFyZWQiLCB1Y3MtPnBlbmRpbmcpOworCQlkZXZfd2FybigmdWNzLT5pbnRlcmZhY2UtPmRldiwKKwkJCSAidW5rbm93biBwZW5kaW5nIHJlcXVlc3QgMHglMDJ4IGNsZWFyZWRcbiIsCisJCQkgdWNzLT5wZW5kaW5nKTsKIAkJdWNzLT5wZW5kaW5nID0gMDsKIAl9CiAKQEAgLTM3MiwyNyArMzYzLDIzIEBACiBzdGF0aWMgdm9pZCBjbWRfaW5fdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSBkYXRhOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19VU0JSRVEsICIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOworCWlmICh1bmxpa2VseSghY3MtPmNvbm5lY3RlZCkpIHsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCWlmICghdWNzLT5yY3ZidWZfc2l6ZSkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vIHJlY2VpdmUgaW4gcHJvZ3Jlc3MiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vIHJlY2VpdmUgaW4gcHJvZ3Jlc3MiLCBfX2Z1bmNfXyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAotCWVycigidGltZW91dCByZWFkaW5nIEFUIHJlc3BvbnNlIik7CisJZGV2X2Vycihjcy0+ZGV2LCAidGltZW91dCByZWFkaW5nIEFUIHJlc3BvbnNlXG4iKTsKIAllcnJvcl9yZXNldChjcyk7CS8vRklYTUUgcmV0cnk/CiB9CiAKQEAgLTQxMiwxOCArMzk5LDE1IEBACiAgKi8KIHN0YXRpYyBpbnQgYXRyZWFkX3N1Ym1pdChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IHRpbWVvdXQpCiB7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAlpbnQgcmV0OwogCi0JSUZOVUxMUkVUVkFMKGNzLCAtRUlOVkFMKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1Y3MsIC1FSU5WQUwpOwotCUlGTlVMTFJFVFZBTCh1Y3MtPnVyYl9jbWRfaW4sIC1FSU5WQUwpOwotCi0JZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IEhEX1JFQURfQVRNRVNTQUdFICglZCkiLCB1Y3MtPnJjdmJ1Zl9zaXplKTsKKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IEhEX1JFQURfQVRNRVNTQUdFICglZCkiLAorCQl1Y3MtPnJjdmJ1Zl9zaXplKTsKIAogCWlmICh1Y3MtPnVyYl9jbWRfaW4tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IEhEX1JFQURfQVRNRVNTQUdFOiBVUkIgYnVzeSIpOworCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkiY291bGQgbm90IHN1Ym1pdCBIRF9SRUFEX0FUTUVTU0FHRTogVVJCIGJ1c3lcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNDMzLDE5ICs0MTcsMTkgQEAKIAl1Y3MtPmRyX2NtZF9pbi53SW5kZXggPSAwOwogCXVjcy0+ZHJfY21kX2luLndMZW5ndGggPSBjcHVfdG9fbGUxNih1Y3MtPnJjdmJ1Zl9zaXplKTsKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1Y3MtPnVyYl9jbWRfaW4sIHVjcy0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2Y3RybHBpcGUodWNzLT51ZGV2LCAwKSwKLQkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopICYgdWNzLT5kcl9jbWRfaW4sCi0JICAgICAgICAgICAgICAgICAgICAgdWNzLT5yY3ZidWYsIHVjcy0+cmN2YnVmX3NpemUsCi0JICAgICAgICAgICAgICAgICAgICAgcmVhZF9jdHJsX2NhbGxiYWNrLCBjcy0+aW5idWYpOworCQkJICAgICB1c2JfcmN2Y3RybHBpcGUodWNzLT51ZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIqKSAmIHVjcy0+ZHJfY21kX2luLAorCQkJICAgICB1Y3MtPnJjdmJ1ZiwgdWNzLT5yY3ZidWZfc2l6ZSwKKwkJCSAgICAgcmVhZF9jdHJsX2NhbGxiYWNrLCBjcy0+aW5idWYpOwogCiAJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9jbWRfaW4sIFNMQUJfQVRPTUlDKSkgIT0gMCkgewotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgSERfUkVBRF9BVE1FU1NBR0U6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHN1Ym1pdCBIRF9SRUFEX0FUTUVTU0FHRTogJXNcbiIsCisJCQlnZXRfdXNiX3N0YXRtc2cocmV0KSk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKHRpbWVvdXQgPiAwKSB7Ci0JCWRiZyhERUJVR19VU0JSRVEsICJzZXR0aW5nIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIHRpbWVvdXQpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgInNldHRpbmcgdGltZW91dCBvZiAlZC8xMCBzZWNzIiwgdGltZW91dCk7CiAJCXVjcy0+dGltZXJfY21kX2luLmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dCAqIEhaIC8gMTA7CiAJCXVjcy0+dGltZXJfY21kX2luLmRhdGEgPSAodW5zaWduZWQgbG9uZykgY3M7CiAJCXVjcy0+dGltZXJfY21kX2luLmZ1bmN0aW9uID0gY21kX2luX3RpbWVvdXQ7CkBAIC00ODMsMjUgKzQ2NywxNCBAQAogICovCiBzdGF0aWMgdm9pZCByZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJc3RydWN0IGJjX3N0YXRlICpiY3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGw7CiAJaW50IGNoYW5uZWw7CiAKLQlJRk5VTExSRVQodXJiKTsKLQljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHVyYi0+Y29udGV4dDsKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7Ci0KLQlpZiAodW5saWtlbHkoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkpIHsKLQkJd2FybigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwogCQlicmVhazsKQEAgLTUwOSwxMSArNDgyLDEyIEBACiAJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGVkIChhc3luYykgKi8KIAljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIHBlbmRpbmcgKi8KIAkJLyogaWdub3JlIHNpbGVudGx5ICovCi0JCWRiZyhERUJVR19VU0JSRVEsCi0JCSAgICAiJXM6ICVzIiwgX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiAlcyIsCisJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgkJLyogc2V2ZXJlIHRyb3VibGUgKi8KLQkJd2FybigiaW50ZXJydXB0IHJlYWQ6ICVzIiwgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCWRldl93YXJuKGNzLT5kZXYsICJpbnRlcnJ1cHQgcmVhZDogJXNcbiIsCisJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCS8vRklYTUUgY29ycmVjdGl2ZSBhY3Rpb24/IHJlc3VibWlzc2lvbiBhbHdheXMgb2s/CiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQpAQCAtNTIxLDEwICs0OTUsOSBAQAogCWwgPSAodW5zaWduZWQpIHVjcy0+aW50X2luX2J1ZlsxXSArCiAJICAgICgoKHVuc2lnbmVkKSB1Y3MtPmludF9pbl9idWZbMl0pIDw8IDgpOwogCi0JZGJnKERFQlVHX1VTQlJFUSwKLQkgICAgIjwtLS0tLS0tJWQ6IDB4JTAyeCAoJXUgWzB4JTAyeCAweCUwMnhdKSIsIHVyYi0+YWN0dWFsX2xlbmd0aCwKLQkgICAgKGludCl1Y3MtPmludF9pbl9idWZbMF0sIGwsCi0JICAgIChpbnQpdWNzLT5pbnRfaW5fYnVmWzFdLCAoaW50KXVjcy0+aW50X2luX2J1ZlsyXSk7CisJZ2lnX2RiZyhERUJVR19VU0JSRVEsICI8LS0tLS0tLSVkOiAweCUwMnggKCV1IFsweCUwMnggMHglMDJ4XSkiLAorCQl1cmItPmFjdHVhbF9sZW5ndGgsIChpbnQpdWNzLT5pbnRfaW5fYnVmWzBdLCBsLAorCQkoaW50KXVjcy0+aW50X2luX2J1ZlsxXSwgKGludCl1Y3MtPmludF9pbl9idWZbMl0pOwogCiAJY2hhbm5lbCA9IDA7CiAKQEAgLTU3MCwyOCArNTQzLDMwIEBACiAJY2FzZSBIRF9CMV9GTE9XX0NPTlRST0w6CiAJCWJjcyA9IGNzLT5iY3MgKyBjaGFubmVsOwogCQlhdG9taWNfYWRkKChsIC0gQkFTX05PUk1GUkFNRSkgKiBCQVNfQ09SUkZSQU1FUywKLQkJICAgICAgICAgICAmYmNzLT5ody5iYXMtPmNvcnJieXRlcyk7Ci0JCWRiZyhERUJVR19JU08sCi0JCSAgICAiRmxvdyBjb250cm9sIChjaGFubmVsICVkLCBzdWIgJWQpOiAweCUwMnggPT4gJWQiLAotCQkgICAgY2hhbm5lbCwgYmNzLT5ody5iYXMtPm51bXN1YiwgbCwKLQkJICAgIGF0b21pY19yZWFkKCZiY3MtPmh3LmJhcy0+Y29ycmJ5dGVzKSk7CisJCQkgICAmYmNzLT5ody5iYXMtPmNvcnJieXRlcyk7CisJCWdpZ19kYmcoREVCVUdfSVNPLAorCQkJIkZsb3cgY29udHJvbCAoY2hhbm5lbCAlZCwgc3ViICVkKTogMHglMDJ4ID0+ICVkIiwKKwkJCWNoYW5uZWwsIGJjcy0+aHcuYmFzLT5udW1zdWIsIGwsCisJCQlhdG9taWNfcmVhZCgmYmNzLT5ody5iYXMtPmNvcnJieXRlcykpOwogCQlicmVhazsKIAogCWNhc2UgSERfUkVDRUlWRUFUREFUQV9BQ0s6CS8qIEFUIHJlc3BvbnNlIHJlYWR5IHRvIGJlIHJlY2VpdmVkICovCiAJCWlmICghbCkgewotCQkJd2FybigiSERfUkVDRUlWRUFUREFUQV9BQ0sgd2l0aCBsZW5ndGggMCBpZ25vcmVkIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSJIRF9SRUNFSVZFQVREQVRBX0FDSyB3aXRoIGxlbmd0aCAwIGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWlmICh1Y3MtPnJjdmJ1Zl9zaXplKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQkJZXJyKCJyZWNlaXZlIEFUIGRhdGEgb3ZlcnJ1biwgJWQgYnl0ZXMgbG9zdCIsIGwpOworCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCSJyZWNlaXZlIEFUIGRhdGEgb3ZlcnJ1biwgJWQgYnl0ZXMgbG9zdFxuIiwgbCk7CiAJCQllcnJvcl9yZXNldChjcyk7CS8vRklYTUUgcmVzY2hlZHVsZQogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCh1Y3MtPnJjdmJ1ZiA9IGttYWxsb2MobCwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQllcnIoIiVzOiBvdXQgb2YgbWVtb3J5LCAlZCBieXRlcyBsb3N0IiwgX19mdW5jX18sIGwpOworCQkJZGV2X2Vycihjcy0+ZGV2LCAib3V0IG9mIG1lbW9yeSwgJWQgYnl0ZXMgbG9zdFxuIiwgbCk7CiAJCQllcnJvcl9yZXNldChjcyk7CS8vRklYTUUgcmVzY2hlZHVsZQogCQkJYnJlYWs7CiAJCX0KQEAgLTYwNywyNSArNTgyLDI4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBIRF9SRVNFVF9JTlRFUlJVUFRfUElQRV9BQ0s6Ci0JCWRiZyhERUJVR19VU0JSRVEsICJIRF9SRVNFVF9JTlRFUlJVUFRfUElQRV9BQ0siKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJIRF9SRVNFVF9JTlRFUlJVUFRfUElQRV9BQ0siKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX1NVU1BFTkRfRU5EOgotCQlkYmcoREVCVUdfVVNCUkVRLCAiSERfU1VTUEVORF9FTkQiKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJIRF9TVVNQRU5EX0VORCIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oInVua25vd24gR2lnYXNldCBzaWduYWwgMHglMDJ4ICgldSkgaWdub3JlZCIsCi0JCSAgICAgKGludCkgdWNzLT5pbnRfaW5fYnVmWzBdLCBsKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCSAidW5rbm93biBHaWdhc2V0IHNpZ25hbCAweCUwMnggKCV1KSBpZ25vcmVkXG4iLAorCQkJIChpbnQpIHVjcy0+aW50X2luX2J1ZlswXSwgbCk7CiAJfQogCiAJY2hlY2tfcGVuZGluZyh1Y3MpOwogCiByZXN1Ym1pdDoKLQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBjcy0+Y29ubmVjdGVkID8gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykgOiAtRU5PREVWOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KHN0YXR1cykpIHsKLQkJZXJyKCJjb3VsZCBub3QgcmVzdWJtaXQgaW50ZXJydXB0IFVSQjogJXMiLAotCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHN0YXR1cykpOworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3QgcmVzdWJtaXQgaW50ZXJydXB0IFVSQjogJXNcbiIsCisJCQlnZXRfdXNiX3N0YXRtc2coc3RhdHVzKSk7CiAJCWVycm9yX3Jlc2V0KGNzKTsKIAl9CiB9CkBAIC02MzksMzAgKzYxNywyMiBAQAogICovCiBzdGF0aWMgdm9pZCByZWFkX2N0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKKwlpbnQgaGF2ZV9kYXRhID0gMDsKIAl1bnNpZ25lZCBudW1ieXRlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpbmJ1Zl90ICppbmJ1ZjsKLQlpbnQgaGF2ZV9kYXRhID0gMDsKLQotCUlGTlVMTFJFVCh1cmIpOwotCWluYnVmID0gKHN0cnVjdCBpbmJ1Zl90ICopIHVyYi0+Y29udGV4dDsKLQlJRk5VTExSRVQoaW5idWYpOwotCWNzID0gaW5idWYtPmNzOwotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7CisJaWYgKHVubGlrZWx5KCFjcy0+Y29ubmVjdGVkKSkgewogCQl3YXJuKCIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCF1Y3MtPnJjdmJ1Zl9zaXplKSB7Ci0JCXdhcm4oIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzIiwgX19mdW5jX18pOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiJXM6IG5vIHJlY2VpdmUgaW4gcHJvZ3Jlc3NcbiIsIF9fZnVuY19fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTY3MywxMiArNjQzLDE0IEBACiAJY2FzZSAwOgkJCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLwogCQludW1ieXRlcyA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAkJaWYgKHVubGlrZWx5KG51bWJ5dGVzID09IDApKSB7Ci0JCQl3YXJuKCJjb250cm9sIHJlYWQ6IGVtcHR5IGJsb2NrIHJlY2VpdmVkIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiY29udHJvbCByZWFkOiBlbXB0eSBibG9jayByZWNlaXZlZFxuIik7CiAJCQlnb3RvIHJldHJ5OwogCQl9CiAJCWlmICh1bmxpa2VseShudW1ieXRlcyAhPSB1Y3MtPnJjdmJ1Zl9zaXplKSkgewotCQkJd2FybigiY29udHJvbCByZWFkOiByZWNlaXZlZCAlZCBjaGFycywgZXhwZWN0ZWQgJWQiLAotCQkJICAgICBudW1ieXRlcywgdWNzLT5yY3ZidWZfc2l6ZSk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJICAgICAgICJjb250cm9sIHJlYWQ6IHJlY2VpdmVkICVkIGNoYXJzLCBleHBlY3RlZCAlZFxuIiwKKwkJCQkgbnVtYnl0ZXMsIHVjcy0+cmN2YnVmX3NpemUpOwogCQkJaWYgKG51bWJ5dGVzID4gdWNzLT5yY3ZidWZfc2l6ZSkKIAkJCQludW1ieXRlcyA9IHVjcy0+cmN2YnVmX3NpemU7CiAJCX0KQEAgLTY5OCwyMyArNjcwLDI2IEBACiAJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGVkIChhc3luYykgKi8KIAljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIHBlbmRpbmcgKi8KIAkJLyogbm8gYWN0aW9uIG5lY2Vzc2FyeSAqLwotCQlkYmcoREVCVUdfVVNCUkVRLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CQkJLyogc2V2ZXJlIHRyb3VibGUgKi8KLQkJd2FybigiY29udHJvbCByZWFkOiAlcyIsIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiY29udHJvbCByZWFkOiAlc1xuIiwKKwkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAlyZXRyeToKIAkJaWYgKHVjcy0+cmV0cnlfY21kX2luKysgPCBCQVNfUkVUUlkpIHsKLQkJCW5vdGljZSgiY29udHJvbCByZWFkOiByZXRyeSAlZCIsIHVjcy0+cmV0cnlfY21kX2luKTsKKwkJCWRldl9ub3RpY2UoY3MtPmRldiwgImNvbnRyb2wgcmVhZDogcmV0cnkgJWRcbiIsCisJCQkJICAgdWNzLT5yZXRyeV9jbWRfaW4pOwogCQkJaWYgKGF0cmVhZF9zdWJtaXQoY3MsIEJBU19USU1FT1VUKSA+PSAwKSB7CiAJCQkJLyogcmVzdWJtaXR0ZWQgLSBieXBhc3MgcmVndWxhciBleGl0IGJsb2NrICovCiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQllcnIoImNvbnRyb2wgcmVhZDogZ2l2aW5nIHVwIGFmdGVyICVkIHRyaWVzIiwKLQkJCSAgICB1Y3MtPnJldHJ5X2NtZF9pbik7CisJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJImNvbnRyb2wgcmVhZDogZ2l2aW5nIHVwIGFmdGVyICVkIHRyaWVzXG4iLAorCQkJCXVjcy0+cmV0cnlfY21kX2luKTsKIAkJfQogCQllcnJvcl9yZXNldChjcyk7CiAJfQpAQCAtNzI0LDcgKzY5OSw3IEBACiAJdWNzLT5yY3ZidWZfc2l6ZSA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaGF2ZV9kYXRhKSB7Ci0JCWRiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJfQogfQpAQCAtNzQzLDIxICs3MTgsMTYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCByYzsKIAotCUlGTlVMTFJFVCh1cmIpOwotCUlGTlVMTFJFVCh1cmItPmNvbnRleHQpOwotCUlGTlVMTFJFVChjYXJkc3RhdGUpOwotCiAJLyogc3RhdHVzIGNvZGVzIG5vdCB3b3J0aCBib3RoZXJpbmcgdGhlIHRhc2tsZXQgd2l0aCAqLwogCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8IHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8Ci0JICAgICAgICAgICAgIHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykpIHsKLQkJZGJnKERFQlVHX0lTTywKLQkJICAgICIlczogJXMiLCBfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkgeworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlcyIsCisJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCXJldHVybjsKIAl9CiAKLQliY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIHVyYi0+Y29udGV4dDsKKwliY3MgPSB1cmItPmNvbnRleHQ7CiAJdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWJjLT5pc29pbmxvY2ssIGZsYWdzKTsKIAlpZiAobGlrZWx5KHViYy0+aXNvaW5kb25lID09IE5VTEwpKSB7CkBAIC03NzcsMTQgKzc0NywxNyBAQAogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKIAkJfQogCQlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZ1YmMtPnJ1bm5pbmcpKSkgewotCQkJdXJiLT5kZXYgPSBiY3MtPmNzLT5ody5iYXMtPnVkZXY7CS8qIGNsb2JiZXJlZCBieSBVU0Igc3Vic3lzdGVtICovCisJCQkvKiB1cmItPmRldiBpcyBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQkJdXJiLT5kZXYgPSBiY3MtPmNzLT5ody5iYXMtPnVkZXY7CiAJCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwogCQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEJBU19OVU1GUkFNRVM7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IGlzb2MgcmVhZCBvdmVycnVuL3Jlc3VibWl0IiwgX19mdW5jX18pOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogaXNvYyByZWFkIG92ZXJydW4vcmVzdWJtaXQiLAorCQkJCV9fZnVuY19fKTsKIAkJCXJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CiAJCQlpZiAodW5saWtlbHkocmMgIT0gMCkpIHsKLQkJCQllcnIoImNvdWxkIG5vdCByZXN1Ym1pdCBpc29jaHJvbm91cyByZWFkIFVSQjogJXMiLAotCQkJCSAgICBnZXRfdXNiX3N0YXRtc2cocmMpKTsKKwkJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCQkJImNvdWxkIG5vdCByZXN1Ym1pdCBpc29jaHJvbm91cyByZWFkICIKKwkJCQkJIlVSQjogJXNcbiIsIGdldF91c2Jfc3RhdG1zZyhyYykpOwogCQkJCWR1bXBfdXJiKERFQlVHX0lTTywgImlzb2MgcmVhZCIsIHVyYik7CiAJCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQl9CkBAIC04MDYsMjMgKzc3OSwxNyBAQAogCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JSUZOVUxMUkVUKHVyYi0+Y29udGV4dCk7Ci0JSUZOVUxMUkVUKGNhcmRzdGF0ZSk7Ci0KIAkvKiBzdGF0dXMgY29kZXMgbm90IHdvcnRoIGJvdGhlcmluZyB0aGUgdGFza2xldCB3aXRoICovCiAJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkgICAgICAgICAgICAgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkgewotCQlkYmcoREVCVUdfSVNPLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKSB7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6ICVzIiwKKwkJCV9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHBhc3MgVVJCIGNvbnRleHQgdG8gdGFza2xldCAqLwotCXVjeCA9IChzdHJ1Y3QgaXNvd191cmJjdHhfdCAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKHVjeC0+YmNzKTsKKwl1Y3ggPSB1cmItPmNvbnRleHQ7CiAJdWJjID0gdWN4LT5iY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWJjKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAl1YmMtPmlzb291dG92ZmwgPSB1YmMtPmlzb291dGRvbmU7CkBAIC04NDEsMTUgKzgwOCwxMSBAQAogICovCiBzdGF0aWMgaW50IHN0YXJ0dXJicyhzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKIAlzdHJ1Y3QgdXJiICp1cmI7Ci0Jc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwogCWludCBqLCBrOwogCWludCByYzsKIAotCUlGTlVMTFJFVFZBTChiY3MsIC1FRkFVTFQpOwotCXViYyA9IGJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1YmMsIC1FRkFVTFQpOwotCiAJLyogaW5pdGlhbGl6ZSBMMiByZWNlcHRpb24gKi8KIAlpZiAoYmNzLT5wcm90bzIgPT0gSVNETl9QUk9UT19MMl9IRExDKQogCQliY3MtPmlucHV0c3RhdGUgfD0gSU5TX2ZsYWdfaHVudDsKQEAgLTg1OSw3ICs4MjIsNyBAQAogCWZvciAoayA9IDA7IGsgPCBCQVNfSU5VUkJTOyBrKyspIHsKIAkJdXJiID0gdWJjLT5pc29pbnVyYnNba107CiAJCWlmICghdXJiKSB7Ci0JCQllcnIoImlzb2ludXJic1slZF09PU5VTEwiLCBrKTsKKwkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiaXNvaW51cmJzWyVkXT09TlVMTFxuIiwgayk7CiAJCQlyYyA9IC1FRkFVTFQ7CiAJCQlnb3RvIGVycm9yOwogCQl9CkBAIC04ODIsOCArODQ1LDkgQEAKIAogCQlkdW1wX3VyYihERUJVR19JU08sICJJbml0aWFsIGlzb2MgcmVhZCIsIHVyYik7CiAJCWlmICgocmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKSkgIT0gMCkgewotCQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IGlzb2Nocm9ub3VzIHJlYWQgVVJCICVkOiAlcyIsCi0JCQkgICAgaywgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CisJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCSAgICAgICAiY291bGQgbm90IHN1Ym1pdCBpc29jaHJvbm91cyByZWFkIFVSQiAlZDogJXNcbiIsCisJCQkJaywgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQpAQCAtODk1LDcgKzg1OSw3IEBACiAJZm9yIChrID0gMDsgayA8IEJBU19PVVRVUkJTOyArK2spIHsKIAkJdXJiID0gdWJjLT5pc29vdXR1cmJzW2tdLnVyYjsKIAkJaWYgKCF1cmIpIHsKLQkJCWVycigiaXNvb3V0dXJic1slZF0udXJiPT1OVUxMIiwgayk7CisJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImlzb291dHVyYnNbJWRdLnVyYj09TlVMTFxuIiwgayk7CiAJCQlyYyA9IC1FRkFVTFQ7CiAJCQlnb3RvIGVycm9yOwogCQl9CkBAIC05MjIsOCArODg2LDkgQEAKIAkJZHVtcF91cmIoREVCVUdfSVNPLCAiSW5pdGlhbCBpc29jIHdyaXRlIiwgdXJiKTsKIAkJcmMgPSB1c2Jfc3VibWl0X3VyYih1YmMtPmlzb291dHVyYnNba10udXJiLCBTTEFCX0FUT01JQyk7CiAJCWlmIChyYyAhPSAwKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgd3JpdGUgVVJCICVkOiAlcyIsCi0JCQkgICAgaywgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CisJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCSAgICAgICJjb3VsZCBub3Qgc3VibWl0IGlzb2Nocm9ub3VzIHdyaXRlIFVSQiAlZDogJXNcbiIsCisJCQkJaywgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQpAQCAtOTQ2LDIwICs5MTEsMjAgQEAKIHsKIAlpbnQgaywgcmM7CiAKLQlJRk5VTExSRVQodWJjKTsKLQogCWF0b21pY19zZXQoJnViYy0+cnVubmluZywgMCk7CiAKIAlmb3IgKGsgPSAwOyBrIDwgQkFTX0lOVVJCUzsgKytrKSB7CiAJCXJjID0gdXNiX3VubGlua191cmIodWJjLT5pc29pbnVyYnNba10pOwotCQlkYmcoREVCVUdfSVNPLCAiJXM6IGlzb2MgaW5wdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlZCIsCi0JCSAgICBfX2Z1bmNfXywgaywgcmMpOworCQlnaWdfZGJnKERFQlVHX0lTTywKKwkJCSIlczogaXNvYyBpbnB1dCBVUkIgJWQgdW5saW5rZWQsIHJlc3VsdCA9ICVkIiwKKwkJCV9fZnVuY19fLCBrLCByYyk7CiAJfQogCiAJZm9yIChrID0gMDsgayA8IEJBU19PVVRVUkJTOyArK2spIHsKIAkJcmMgPSB1c2JfdW5saW5rX3VyYih1YmMtPmlzb291dHVyYnNba10udXJiKTsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiBpc29jIG91dHB1dCBVUkIgJWQgdW5saW5rZWQsIHJlc3VsdCA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBrLCByYyk7CisJCWdpZ19kYmcoREVCVUdfSVNPLAorCQkJIiVzOiBpc29jIG91dHB1dCBVUkIgJWQgdW5saW5rZWQsIHJlc3VsdCA9ICVkIiwKKwkJCV9fZnVuY19fLCBrLCByYyk7CiAJfQogfQogCkBAIC05NzcsMTkgKzk0MiwxNCBAQAogICovCiBzdGF0aWMgaW50IHN1Ym1pdF9pc29fd3JpdGVfdXJiKHN0cnVjdCBpc293X3VyYmN0eF90ICp1Y3gpCiB7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKKwlzdHJ1Y3QgdXJiICp1cmIgPSB1Y3gtPnVyYjsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSB1Y3gtPmJjcy0+aHcuYmFzOwogCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICppZmQ7CiAJaW50IGNvcnJieXRlcywgbmZyYW1lLCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUVkFMKHVjeCwgLUVGQVVMVCk7Ci0JdXJiID0gdWN4LT51cmI7Ci0JSUZOVUxMUkVUVkFMKHVyYiwgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHVjeC0+YmNzLCAtRUZBVUxUKTsKLQl1YmMgPSB1Y3gtPmJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1YmMsIC1FRkFVTFQpOwotCi0JdXJiLT5kZXYgPSB1Y3gtPmJjcy0+Y3MtPmh3LmJhcy0+dWRldjsJLyogY2xvYmJlcmVkIGJ5IFVTQiBzdWJzeXN0ZW0gKi8KKwkvKiB1cmItPmRldiBpcyBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCXVyYi0+ZGV2ID0gdWN4LT5iY3MtPmNzLT5ody5iYXMtPnVkZXY7CiAJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHViYy0+aXNvb3V0YnVmLT5kYXRhOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZih1YmMtPmlzb291dGJ1Zi0+ZGF0YSk7CkBAIC0xMDAwLDcgKzk2MCw4IEBACiAJCS8qIGNvbXB1dGUgZnJhbWUgbGVuZ3RoIGFjY29yZGluZyB0byBmbG93IGNvbnRyb2wgKi8KIAkJaWZkLT5sZW5ndGggPSBCQVNfTk9STUZSQU1FOwogCQlpZiAoKGNvcnJieXRlcyA9IGF0b21pY19yZWFkKCZ1YmMtPmNvcnJieXRlcykpICE9IDApIHsKLQkJCWRiZyhERUJVR19JU08sICIlczogY29ycmJ5dGVzPSVkIiwgX19mdW5jX18sIGNvcnJieXRlcyk7CisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBjb3JyYnl0ZXM9JWQiLAorCQkJCV9fZnVuY19fLCBjb3JyYnl0ZXMpOwogCQkJaWYgKGNvcnJieXRlcyA+IEJBU19ISUdIRlJBTUUgLSBCQVNfTk9STUZSQU1FKQogCQkJCWNvcnJieXRlcyA9IEJBU19ISUdIRlJBTUUgLSBCQVNfTk9STUZSQU1FOwogCQkJZWxzZSBpZiAoY29ycmJ5dGVzIDwgQkFTX0xPV0ZSQU1FIC0gQkFTX05PUk1GUkFNRSkKQEAgLTEwMDgsMTggKzk2OSwyMSBAQAogCQkJaWZkLT5sZW5ndGggKz0gY29ycmJ5dGVzOwogCQkJYXRvbWljX2FkZCgtY29ycmJ5dGVzLCAmdWJjLT5jb3JyYnl0ZXMpOwogCQl9Ci0JCS8vZGJnKERFQlVHX0lTTywgIiVzOiBmcmFtZSAlZCBsZW5ndGg9JWQiLCBfX2Z1bmNfXywgbmZyYW1lLCBpZmQtPmxlbmd0aCk7CiAKIAkJLyogcmV0cmlldmUgYmxvY2sgb2YgZGF0YSB0byBzZW5kICovCi0JCWlmZC0+b2Zmc2V0ID0gZ2lnYXNldF9pc293YnVmX2dldGJ5dGVzKHViYy0+aXNvb3V0YnVmLCBpZmQtPmxlbmd0aCk7CisJCWlmZC0+b2Zmc2V0ID0gZ2lnYXNldF9pc293YnVmX2dldGJ5dGVzKHViYy0+aXNvb3V0YnVmLAorCQkJCQkJICAgICAgIGlmZC0+bGVuZ3RoKTsKIAkJaWYgKGlmZC0+b2Zmc2V0IDwgMCkgewogCQkJaWYgKGlmZC0+b2Zmc2V0ID09IC1FQlVTWSkgewotCQkJCWRiZyhERUJVR19JU08sICIlczogYnVmZmVyIGJ1c3kgYXQgZnJhbWUgJWQiLAotCQkJCSAgICBfX2Z1bmNfXywgbmZyYW1lKTsKLQkJCQkvKiB0YXNrbGV0IHdpbGwgYmUgcmVzdGFydGVkIGZyb20gZ2lnYXNldF9zZW5kX3NrYigpICovCisJCQkJZ2lnX2RiZyhERUJVR19JU08sCisJCQkJCSIlczogYnVmZmVyIGJ1c3kgYXQgZnJhbWUgJWQiLAorCQkJCQlfX2Z1bmNfXywgbmZyYW1lKTsKKwkJCQkvKiB0YXNrbGV0IHdpbGwgYmUgcmVzdGFydGVkIGZyb20KKwkJCQkgICBnaWdhc2V0X3NlbmRfc2tiKCkgKi8KIAkJCX0gZWxzZSB7Ci0JCQkJZXJyKCIlczogYnVmZmVyIGVycm9yICVkIGF0IGZyYW1lICVkIiwKLQkJCQkgICAgX19mdW5jX18sIGlmZC0+b2Zmc2V0LCBuZnJhbWUpOworCQkJCWRldl9lcnIodWN4LT5iY3MtPmNzLT5kZXYsCisJCQkJCSIlczogYnVmZmVyIGVycm9yICVkIGF0IGZyYW1lICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaWZkLT5vZmZzZXQsIG5mcmFtZSk7CiAJCQkJcmV0dXJuIGlmZC0+b2Zmc2V0OwogCQkJfQogCQkJYnJlYWs7CkBAIC0xMDI5LDkgKzk5MywxNCBAQAogCQlpZmQtPmFjdHVhbF9sZW5ndGggPSAwOwogCX0KIAlpZiAoKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBuZnJhbWUpID4gMCkgewotCQlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJCWVycigiY291bGQgbm90IHN1Ym1pdCBpc29jaHJvbm91cyB3cml0ZSBVUkI6ICVzIiwKLQkJCSAgICBnZXRfdXNiX3N0YXRtc2cocmMpKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVjeC0+YmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCQlyYyA9IHVjeC0+YmNzLT5jcy0+Y29ubmVjdGVkID8gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykgOiAtRU5PREVWOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3gtPmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAocmMpIHsKKwkJCWRldl9lcnIodWN4LT5iY3MtPmNzLT5kZXYsCisJCQkJImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgd3JpdGUgVVJCOiAlc1xuIiwKKwkJCQlnZXRfdXNiX3N0YXRtc2cocmMpKTsKIAkJCWR1bXBfdXJiKERFQlVHX0lTTywgImlzb2Mgd3JpdGUiLCB1cmIpOwogCQkJcmV0dXJuIHJjOwogCQl9CkBAIC0xMDQ4LDkgKzEwMTcsOSBAQAogICovCiBzdGF0aWMgdm9pZCB3cml0ZV9pc29fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGJjX3N0YXRlICpiY3M7Ci0Jc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOworCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSBkYXRhOworCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYyA9IGJjcy0+aHcuYmFzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gYmNzLT5jczsKIAlzdHJ1Y3QgaXNvd191cmJjdHhfdCAqZG9uZSwgKm5leHQsICpvdmZsOwogCXN0cnVjdCB1cmIgKnVyYjsKIAlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaWZkOwpAQCAtMTA2MCwyMiArMTAyOSwxMCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGxlbjsKIAotCWJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgZGF0YTsKLQlJRk5VTExSRVQoYmNzKTsKLQl1YmMgPSBiY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWJjKTsKLQljcyA9IGJjcy0+Y3M7Ci0JSUZOVUxMUkVUKGNzKTsKLQogCS8qIGxvb3Agd2hpbGUgY29tcGxldGVkIFVSQnMgYXJyaXZlIGluIHRpbWUgKi8KIAlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseSghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSkgewotCQkJd2FybigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJCXJldHVybjsKLQkJfQotCiAJCWlmICh1bmxpa2VseSghKGF0b21pY19yZWFkKCZ1YmMtPnJ1bm5pbmcpKSkpIHsKLQkJCWRiZyhERUJVR19JU08sICIlczogbm90IHJ1bm5pbmciLCBfX2Z1bmNfXyk7CisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBub3QgcnVubmluZyIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0xMDg3LDcgKzEwNDQsNyBAQAogCQl1YmMtPmlzb291dG92ZmwgPSBOVUxMOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAkJaWYgKG92ZmwpIHsKLQkJCWVycigiaXNvY2hyb25vdXMgd3JpdGUgYnVmZmVyIHVuZGVycnVuIC0gYnV5IGEgZmFzdGVyIG1hY2hpbmUgOi0pIik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICJpc29jaHJvbm91cyB3cml0ZSBidWZmZXIgdW5kZXJydW5cbiIpOwogCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTExMCw3ICsxMDY3LDggQEAKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAkJCQlpZiAobmV4dCkgewogCQkJCQkvKiBjb3VsZG4ndCBwdXQgaXQgYmFjayAqLwotCQkJCQllcnIoImxvc2luZyBpc29jaHJvbm91cyB3cml0ZSBVUkIiKTsKKwkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkgICAgICAibG9zaW5nIGlzb2Nocm9ub3VzIHdyaXRlIFVSQlxuIik7CiAJCQkJCWVycm9yX2hhbmd1cChiY3MpOwogCQkJCX0KIAkJCX0KQEAgLTExMjMsMjIgKzEwODEsMjUgQEAKIAkJCWJyZWFrOwogCQljYXNlIC1FWERFVjoJCQkvKiBpbnNwZWN0IGluZGl2aWR1YWwgZnJhbWVzICovCiAJCQkvKiBhc3N1bXB0aW9ucyAoZm9yIGxhY2sgb2YgZG9jdW1lbnRhdGlvbik6Ci0JCQkgKiAtIGFjdHVhbF9sZW5ndGggYnl0ZXMgb2YgdGhlIGZyYW1lIGluIGVycm9yIGFyZSBzdWNjZXNzZnVsbHkgc2VudAorCQkJICogLSBhY3R1YWxfbGVuZ3RoIGJ5dGVzIG9mIHRoZSBmcmFtZSBpbiBlcnJvciBhcmUKKwkJCSAqICAgc3VjY2Vzc2Z1bGx5IHNlbnQKIAkJCSAqIC0gYWxsIGZvbGxvd2luZyBmcmFtZXMgYXJlIG5vdCBzZW50IGF0IGFsbAogCQkJICovCi0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBwYXJ0aWFsbHkgY29tcGxldGVkIiwgX19mdW5jX18pOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogVVJCIHBhcnRpYWxseSBjb21wbGV0ZWQiLAorCQkJCV9fZnVuY19fKTsKIAkJCW9mZnNldCA9IGRvbmUtPmxpbWl0OwkvKiBqdXN0IGluIGNhc2UgKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBCQVNfTlVNRlJBTUVTOyBpKyspIHsKIAkJCQlpZmQgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKIAkJCQlpZiAoaWZkLT5zdGF0dXMgfHwKIAkJCQkgICAgaWZkLT5hY3R1YWxfbGVuZ3RoICE9IGlmZC0+bGVuZ3RoKSB7Ci0JCQkJCXdhcm4oImlzb2Nocm9ub3VzIHdyaXRlOiBmcmFtZSAlZDogJXMsICIKLQkJCQkJICAgICAib25seSAlZCBvZiAlZCBieXRlcyBzZW50IiwKKwkJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICAgICAiaXNvY2hyb25vdXMgd3JpdGU6IGZyYW1lICVkOiAlcywgIgorCQkJCQkgICAgICJvbmx5ICVkIG9mICVkIGJ5dGVzIHNlbnRcbiIsCiAJCQkJCSAgICAgaSwgZ2V0X3VzYl9zdGF0bXNnKGlmZC0+c3RhdHVzKSwKIAkJCQkJICAgICBpZmQtPmFjdHVhbF9sZW5ndGgsIGlmZC0+bGVuZ3RoKTsKIAkJCQkJb2Zmc2V0ID0gKGlmZC0+b2Zmc2V0ICsKLQkJCQkJICAgICAgICAgIGlmZC0+YWN0dWFsX2xlbmd0aCkKLQkJCQkJICAgICAgICAgJSBCQVNfT1VUQlVGU0laRTsKKwkJCQkJCSAgaWZkLT5hY3R1YWxfbGVuZ3RoKQorCQkJCQkJICUgQkFTX09VVEJVRlNJWkU7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTExNDgsMjUgKzExMDksMjYgQEAKIAkJCQlpZmQgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKIAkJCQlpZiAoaWZkLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTCiAJCQkJICAgIHx8IGlmZC0+YWN0dWFsX2xlbmd0aCAhPSAwKSB7Ci0JCQkJCXdhcm4oImlzb2Nocm9ub3VzIHdyaXRlOiBmcmFtZSAlZDogJXMsICIKLQkJCQkJICAgICAiJWQgb2YgJWQgYnl0ZXMgc2VudCIsCisJCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAgICAgImlzb2Nocm9ub3VzIHdyaXRlOiBmcmFtZSAlZDogJXMsICIKKwkJCQkJICAgICAiJWQgb2YgJWQgYnl0ZXMgc2VudFxuIiwKIAkJCQkJICAgICBpLCBnZXRfdXNiX3N0YXRtc2coaWZkLT5zdGF0dXMpLAogCQkJCQkgICAgIGlmZC0+YWN0dWFsX2xlbmd0aCwgaWZkLT5sZW5ndGgpOwogCQkJCQlvZmZzZXQgPSAoaWZkLT5vZmZzZXQgKwotCQkJCQkgICAgICAgICAgaWZkLT5hY3R1YWxfbGVuZ3RoKQotCQkJCQkgICAgICAgICAlIEJBU19PVVRCVUZTSVpFOworCQkJCQkJICBpZmQtPmFjdHVhbF9sZW5ndGgpCisJCQkJCQkgJSBCQVNfT1VUQlVGU0laRTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQogI2VuZGlmCiAJCQlicmVhazsKLQkJY2FzZSAtRVBJUEU6CQkJLy9GSVhNRSBpcyB0aGlzIHRoZSBjb2RlIGZvciAidW5kZXJydW4iPwotCQkJZXJyKCJpc29jaHJvbm91cyB3cml0ZSBzdGFsbGVkIik7CisJCWNhc2UgLUVQSVBFOgkJLy9GSVhNRSBpcyB0aGlzIHRoZSBjb2RlIGZvciAidW5kZXJydW4iPworCQkJZGV2X2Vycihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgd3JpdGUgc3RhbGxlZFxuIik7CiAJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgkJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCQl3YXJuKCJpc29jaHJvbm91cyB3cml0ZTogJXMiLAotCQkJICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsICJpc29jaHJvbm91cyB3cml0ZTogJXNcbiIsCisJCQkJIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQl9CiAKIAkJLyogbWFyayB0aGUgd3JpdGUgYnVmZmVyIGFyZWEgY292ZXJlZCBieSB0aGlzIFVSQiBhcyBmcmVlICovCkBAIC0xMTk0LDggKzExNTYsOCBAQAogCQlpZiAoZ2lnYXNldF9pc29jX2J1aWxkZnJhbWUoYmNzLCBza2ItPmRhdGEsIGxlbikgPT0gLUVBR0FJTikgewogCQkJLyogaW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSwgcHVzaCBiYWNrIG9udG8gcXVldWUgKi8KIAkJCXNrYl9xdWV1ZV9oZWFkKCZiY3MtPnNxdWV1ZSwgc2tiKTsKLQkJCWRiZyhERUJVR19JU08sICIlczogc2tiIHJlcXVldWVkLCBxbGVuPSVkIiwKLQkJCSAgICBfX2Z1bmNfXywgc2tiX3F1ZXVlX2xlbigmYmNzLT5zcXVldWUpKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IHNrYiByZXF1ZXVlZCwgcWxlbj0lZCIsCisJCQkJX19mdW5jX18sIHNrYl9xdWV1ZV9sZW4oJmJjcy0+c3F1ZXVlKSk7CiAJCQlicmVhazsKIAkJfQogCQlza2JfcHVsbChza2IsIGxlbik7CkBAIC0xMjE1LDI4ICsxMTc3LDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJlYWRfaXNvX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwotCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKKwlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgZGF0YTsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGJjcy0+Y3M7CiAJc3RydWN0IHVyYiAqdXJiOwogCWNoYXIgKnJjdmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB0b3RsZWZ0LCBudW1ieXRlcywgb2Zmc2V0LCBmcmFtZSwgcmM7CiAKLQliY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIGRhdGE7Ci0JSUZOVUxMUkVUKGJjcyk7Ci0JdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7Ci0JY3MgPSBiY3MtPmNzOwotCUlGTlVMTFJFVChjcyk7Ci0KIAkvKiBsb29wIHdoaWxlIG1vcmUgY29tcGxldGVkIFVSQnMgYXJyaXZlIGluIHRoZSBtZWFudGltZSAqLwogCWZvciAoOzspIHsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJCXdhcm4oIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQogCQkvKiByZXRyaWV2ZSBVUkIgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnViYy0+aXNvaW5sb2NrLCBmbGFncyk7CiAJCWlmICghKHVyYiA9IHViYy0+aXNvaW5kb25lKSkgewpAQCAtMTI0NSwzOCArMTE5NSw0NSBAQAogCQl9CiAJCXViYy0+aXNvaW5kb25lID0gTlVMTDsKIAkJaWYgKHVubGlrZWx5KHViYy0+bG9zdHN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpKSB7Ci0JCQl3YXJuKCJpc29jaHJvbm91cyByZWFkIG92ZXJydW4sIGRyb3BwZWQgVVJCIHdpdGggc3RhdHVzOiAlcywgJWQgYnl0ZXMgbG9zdCIsCi0JCQkgICAgIGdldF91c2Jfc3RhdG1zZyh1YmMtPmxvc3RzdGF0dXMpLCB1YmMtPmlzb2lubG9zdCk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiaXNvY2hyb25vdXMgcmVhZCBvdmVycnVuLCAiCisJCQkJICJkcm9wcGVkIFVSQiB3aXRoIHN0YXR1czogJXMsICVkIGJ5dGVzIGxvc3RcbiIsCisJCQkJIGdldF91c2Jfc3RhdG1zZyh1YmMtPmxvc3RzdGF0dXMpLAorCQkJCSB1YmMtPmlzb2lubG9zdCk7CiAJCQl1YmMtPmxvc3RzdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29pbmxvY2ssIGZsYWdzKTsKIAogCQlpZiAodW5saWtlbHkoIShhdG9taWNfcmVhZCgmdWJjLT5ydW5uaW5nKSkpKSB7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IGNoYW5uZWwgbm90IHJ1bm5pbmcsIGRyb3BwZWQgVVJCIHdpdGggc3RhdHVzOiAlcyIsCi0JCQkgICAgX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQkJZ2lnX2RiZyhERUJVR19JU08sCisJCQkJIiVzOiBjaGFubmVsIG5vdCBydW5uaW5nLCAiCisJCQkJImRyb3BwZWQgVVJCIHdpdGggc3RhdHVzOiAlcyIsCisJCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJc3dpdGNoICh1cmItPnN0YXR1cykgewogCQljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCiAJCQlicmVhazsKLQkJY2FzZSAtRVhERVY6CQkJLyogaW5zcGVjdCBpbmRpdmlkdWFsIGZyYW1lcyAod2UgZG8gdGhhdCBhbnl3YXkpICovCi0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBwYXJ0aWFsbHkgY29tcGxldGVkIiwgX19mdW5jX18pOworCQljYXNlIC1FWERFVjoJCQkvKiBpbnNwZWN0IGluZGl2aWR1YWwgZnJhbWVzCisJCQkJCQkgICAod2UgZG8gdGhhdCBhbnl3YXkpICovCisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgcGFydGlhbGx5IGNvbXBsZXRlZCIsCisJCQkJX19mdW5jX18pOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVOT0VOVDoKIAkJY2FzZSAtRUNPTk5SRVNFVDoKLQkJCWRiZyhERUJVR19JU08sICIlczogVVJCIGNhbmNlbGVkIiwgX19mdW5jX18pOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogVVJCIGNhbmNlbGVkIiwgX19mdW5jX18pOwogCQkJY29udGludWU7CQkvKiAtPiBza2lwICovCiAJCWNhc2UgLUVJTlBST0dSRVNTOgkJLyogaHVoPyAqLwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgc3RpbGwgcGVuZGluZyIsIF9fZnVuY19fKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBzdGlsbCBwZW5kaW5nIiwgX19mdW5jX18pOwogCQkJY29udGludWU7CQkvKiAtPiBza2lwICovCiAJCWNhc2UgLUVQSVBFOgotCQkJZXJyKCJpc29jaHJvbm91cyByZWFkIHN0YWxsZWQiKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgImlzb2Nocm9ub3VzIHJlYWQgc3RhbGxlZFxuIik7CiAJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCWNvbnRpbnVlOwkJLyogLT4gc2tpcCAqLwogCQlkZWZhdWx0OgkJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiAlcyIsCi0JCQkgICAgIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQkJZGV2X3dhcm4oY3MtPmRldiwgImlzb2Nocm9ub3VzIHJlYWQ6ICVzXG4iLAorCQkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIApAQCAtMTI4NCwzMyArMTI0MSw0NCBAQAogCQl0b3RsZWZ0ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQlmb3IgKGZyYW1lID0gMDsgdG90bGVmdCA+IDAgJiYgZnJhbWUgPCBCQVNfTlVNRlJBTUVTOyBmcmFtZSsrKSB7CiAJCQlpZiAodW5saWtlbHkodXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uc3RhdHVzKSkgewotCQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAlcyIsCi0JCQkJICAgICBmcmFtZSwgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLnN0YXR1cykpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6ICVzXG4iLAorCQkJCQkgZnJhbWUsCisJCQkJCSBnZXRfdXNiX3N0YXRtc2coCisJCQkJCSAgICB1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5zdGF0dXMpKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW51bWJ5dGVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uYWN0dWFsX2xlbmd0aDsKIAkJCWlmICh1bmxpa2VseShudW1ieXRlcyA+IEJBU19NQVhGUkFNRSkpIHsKLQkJCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogbnVtYnl0ZXMgKCVkKSA+IEJBU19NQVhGUkFNRSIsCi0JCQkJICAgICBmcmFtZSwgbnVtYnl0ZXMpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6ICIKKwkJCQkJICJudW1ieXRlcyAoJWQpID4gQkFTX01BWEZSQU1FXG4iLAorCQkJCQkgZnJhbWUsIG51bWJ5dGVzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmICh1bmxpa2VseShudW1ieXRlcyA+IHRvdGxlZnQpKSB7Ci0JCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6IG51bWJ5dGVzICglZCkgPiB0b3RsZWZ0ICglZCkiLAotCQkJCSAgICAgZnJhbWUsIG51bWJ5dGVzLCB0b3RsZWZ0KTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAiCisJCQkJCSAibnVtYnl0ZXMgKCVkKSA+IHRvdGxlZnQgKCVkKVxuIiwKKwkJCQkJIGZyYW1lLCBudW1ieXRlcywgdG90bGVmdCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlvZmZzZXQgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5vZmZzZXQ7CiAJCQlpZiAodW5saWtlbHkob2Zmc2V0ICsgbnVtYnl0ZXMgPiBCQVNfSU5CVUZTSVpFKSkgewotCQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiBvZmZzZXQgKCVkKSArIG51bWJ5dGVzICglZCkgPiBCQVNfSU5CVUZTSVpFIiwKLQkJCQkgICAgIGZyYW1lLCBvZmZzZXQsIG51bWJ5dGVzKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAiCisJCQkJCSAib2Zmc2V0ICglZCkgKyBudW1ieXRlcyAoJWQpICIKKwkJCQkJICI+IEJBU19JTkJVRlNJWkVcbiIsCisJCQkJCSBmcmFtZSwgb2Zmc2V0LCBudW1ieXRlcyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlnaWdhc2V0X2lzb2NfcmVjZWl2ZShyY3ZidWYgKyBvZmZzZXQsIG51bWJ5dGVzLCBiY3MpOwogCQkJdG90bGVmdCAtPSBudW1ieXRlczsKIAkJfQogCQlpZiAodW5saWtlbHkodG90bGVmdCA+IDApKQotCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogJWQgZGF0YSBieXRlcyBtaXNzaW5nIiwKLQkJCSAgICAgdG90bGVmdCk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogJWQgZGF0YSBieXRlcyBtaXNzaW5nXG4iLAorCQkJCSB0b3RsZWZ0KTsKIAogCWVycm9yOgogCQkvKiBVUkIgcHJvY2Vzc2VkLCByZXN1Ym1pdCAqLwpAQCAtMTMxOCwxMiArMTI4NiwxNyBAQAogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uc3RhdHVzID0gMDsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLmFjdHVhbF9sZW5ndGggPSAwOwogCQl9Ci0JCXVyYi0+ZGV2ID0gYmNzLT5jcy0+aHcuYmFzLT51ZGV2OwkvKiBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQkvKiB1cmItPmRldiBpcyBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQl1cmItPmRldiA9IGJjcy0+Y3MtPmh3LmJhcy0+dWRldjsKIAkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKIAkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEJBU19OVU1GUkFNRVM7Ci0JCWlmICgocmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKSkgIT0gMCkgewotCQkJZXJyKCJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkI6ICVzIiwKLQkJCSAgICBnZXRfdXNiX3N0YXRtc2cocmMpKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCXJjID0gY3MtPmNvbm5lY3RlZCA/IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpIDogLUVOT0RFVjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJjKSB7CisJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJImNvdWxkIG5vdCByZXN1Ym1pdCBpc29jaHJvbm91cyByZWFkIFVSQjogJXNcbiIsCisJCQkJZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CiAJCQlkdW1wX3VyYihERUJVR19JU08sICJyZXN1Ym1pdCBpc28gcmVhZCIsIHVyYik7CiAJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJfQpAQCAtMTM0MSwxNSArMTMxNCwxMCBAQAogc3RhdGljIHZvaWQgcmVxX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSBkYXRhOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGJjcy0+Y3MtPmh3LmJhczsKIAlpbnQgcGVuZGluZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKGJjcyk7Ci0JSUZOVUxMUkVUKGJjcy0+Y3MpOwotCXVjcyA9IGJjcy0+Y3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQogCWNoZWNrX3BlbmRpbmcodWNzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKQEAgLTEzNTksMzMgKzEzMjcsMzQgQEAKIAogCXN3aXRjaCAocGVuZGluZykgewogCWNhc2UgMDoJCQkJCS8qIG5vIHBlbmRpbmcgcmVxdWVzdCAqLwotCQlkYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vIHJlcXVlc3QgcGVuZGluZyIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogbm8gcmVxdWVzdCBwZW5kaW5nIiwgX19mdW5jX18pOwogCQlicmVhazsKIAogCWNhc2UgSERfT1BFTl9BVENIQU5ORUw6Ci0JCWVycigidGltZW91dCBvcGVuaW5nIEFUIGNoYW5uZWwiKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJ0aW1lb3V0IG9wZW5pbmcgQVQgY2hhbm5lbFxuIik7CiAJCWVycm9yX3Jlc2V0KGJjcy0+Y3MpOwogCQlicmVhazsKIAogCWNhc2UgSERfT1BFTl9CMkNIQU5ORUw6CiAJY2FzZSBIRF9PUEVOX0IxQ0hBTk5FTDoKLQkJZXJyKCJ0aW1lb3V0IG9wZW5pbmcgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCArIDEpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgInRpbWVvdXQgb3BlbmluZyBjaGFubmVsICVkXG4iLAorCQkJYmNzLT5jaGFubmVsICsgMSk7CiAJCWVycm9yX2hhbmd1cChiY3MpOwogCQlicmVhazsKIAogCWNhc2UgSERfQ0xPU0VfQVRDSEFOTkVMOgotCQllcnIoInRpbWVvdXQgY2xvc2luZyBBVCBjaGFubmVsIik7Ci0JCS8vd2FrZV91cF9pbnRlcnJ1cHRpYmxlKGNzLT5pbml0d2FpdCk7Ci0JCS8vRklYTUUgbmVlZCBvd24gd2FpdCBxdWV1ZT8KKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJ0aW1lb3V0IGNsb3NpbmcgQVQgY2hhbm5lbFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9DTE9TRV9CMkNIQU5ORUw6CiAJY2FzZSBIRF9DTE9TRV9CMUNIQU5ORUw6Ci0JCWVycigidGltZW91dCBjbG9zaW5nIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwgKyAxKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJ0aW1lb3V0IGNsb3NpbmcgY2hhbm5lbCAlZFxuIiwKKwkJCWJjcy0+Y2hhbm5lbCArIDEpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oInJlcXVlc3QgMHglMDJ4IHRpbWVkIG91dCwgY2xlYXJpbmciLCBwZW5kaW5nKTsKKwkJZGV2X3dhcm4oYmNzLT5jcy0+ZGV2LCAicmVxdWVzdCAweCUwMnggdGltZWQgb3V0LCBjbGVhcmluZ1xuIiwKKwkJCSBwZW5kaW5nKTsKIAl9CiB9CiAKQEAgLTEzOTgsMTggKzEzNjcsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgd3JpdGVfY3RybF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IHVyYi0+Y29udGV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JSUZOVUxMUkVUKHVyYi0+Y29udGV4dCk7Ci0JSUZOVUxMUkVUKGNhcmRzdGF0ZSk7Ci0KLQl1Y3MgPSAoc3RydWN0IGJhc19jYXJkc3RhdGUgKikgdXJiLT5jb250ZXh0OwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAodXJiLT5zdGF0dXMgJiYgdWNzLT5wZW5kaW5nKSB7Ci0JCWVycigiY29udHJvbCByZXF1ZXN0IDB4JTAyeCBmYWlsZWQ6ICVzIiwKLQkJICAgIHVjcy0+cGVuZGluZywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCWRldl9lcnIoJnVjcy0+aW50ZXJmYWNlLT5kZXYsCisJCQkiY29udHJvbCByZXF1ZXN0IDB4JTAyeCBmYWlsZWQ6ICVzXG4iLAorCQkJdWNzLT5wZW5kaW5nLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJZGVsX3RpbWVyKCZ1Y3MtPnRpbWVyX2N0cmwpOwogCQl1Y3MtPnBlbmRpbmcgPSAwOwogCX0KQEAgLTE0MzgsMjggKzE0MDMsMjUgQEAKICAqLwogc3RhdGljIGludCByZXFfc3VibWl0KHN0cnVjdCBiY19zdGF0ZSAqYmNzLCBpbnQgcmVxLCBpbnQgdmFsLCBpbnQgdGltZW91dCkKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBiY3MtPmNzLT5ody5iYXM7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVJTlZBTCk7Ci0JSUZOVUxMUkVUVkFMKGJjcy0+Y3MsIC1FSU5WQUwpOwotCXVjcyA9IGJjcy0+Y3MtPmh3LmJhczsKLQlJRk5VTExSRVRWQUwodWNzLCAtRUlOVkFMKTsKLQlJRk5VTExSRVRWQUwodWNzLT51cmJfY3RybCwgLUVJTlZBTCk7Ci0KLQlkYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gMHglMDJ4ICglZCkiLCByZXEsIHZhbCk7CisJZ2lnX2RiZyhERUJVR19VU0JSRVEsICItLS0tLS0tPiAweCUwMnggKCVkKSIsIHJlcSwgdmFsKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAodWNzLT5wZW5kaW5nKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVjcy0+bG9jaywgZmxhZ3MpOwotCQllcnIoInN1Ym1pc3Npb24gb2YgcmVxdWVzdCAweCUwMnggZmFpbGVkOiByZXF1ZXN0IDB4JTAyeCBzdGlsbCBwZW5kaW5nIiwKLQkJICAgIHJlcSwgdWNzLT5wZW5kaW5nKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkic3VibWlzc2lvbiBvZiByZXF1ZXN0IDB4JTAyeCBmYWlsZWQ6ICIKKwkJCSJyZXF1ZXN0IDB4JTAyeCBzdGlsbCBwZW5kaW5nXG4iLAorCQkJcmVxLCB1Y3MtPnBlbmRpbmcpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAodWNzLT51cmJfY3RybC0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHJlcXVlc3QgMHglMDJ4OiBVUkIgYnVzeSIsIHJlcSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LAorCQkJImNvdWxkIG5vdCBzdWJtaXQgcmVxdWVzdCAweCUwMng6IFVSQiBidXN5XG4iLCByZXEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMTQ2OSwxOSArMTQzMSwxOSBAQAogCXVjcy0+ZHJfY3RybC53SW5kZXggPSAwOwogCXVjcy0+ZHJfY3RybC53TGVuZ3RoID0gMDsKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1Y3MtPnVyYl9jdHJsLCB1Y3MtPnVkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopICZ1Y3MtPmRyX2N0cmwsIE5VTEwsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2N0cmxfY2FsbGJhY2ssIHVjcyk7CisJCQkgICAgIHVzYl9zbmRjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAorCQkJICAgICAodW5zaWduZWQgY2hhciopICZ1Y3MtPmRyX2N0cmwsIE5VTEwsIDAsCisJCQkgICAgIHdyaXRlX2N0cmxfY2FsbGJhY2ssIHVjcyk7CiAJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9jdHJsLCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHJlcXVlc3QgMHglMDJ4OiAlcyIsCi0JCSAgICByZXEsIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IHJlcXVlc3QgMHglMDJ4OiAlc1xuIiwKKwkJCXJlcSwgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJdWNzLT5wZW5kaW5nID0gcmVxOwogCiAJaWYgKHRpbWVvdXQgPiAwKSB7Ci0JCWRiZyhERUJVR19VU0JSRVEsICJzZXR0aW5nIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIHRpbWVvdXQpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgInNldHRpbmcgdGltZW91dCBvZiAlZC8xMCBzZWNzIiwgdGltZW91dCk7CiAJCXVjcy0+dGltZXJfY3RybC5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQgKiBIWiAvIDEwOwogCQl1Y3MtPnRpbWVyX2N0cmwuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBiY3M7CiAJCXVjcy0+dGltZXJfY3RybC5mdW5jdGlvbiA9IHJlcV90aW1lb3V0OwpAQCAtMTUwNCwxOSArMTQ2NiwxOCBAQAogewogCWludCByZXEsIHJldDsKIAotCUlGTlVMTFJFVFZBTChiY3MsIC1FSU5WQUwpOwotCiAJaWYgKChyZXQgPSBzdGFydHVyYnMoYmNzKSkgPCAwKSB7Ci0JCWVycigiY291bGQgbm90IHN0YXJ0IGlzb2Nocm9ub3VzIEkvTyBmb3IgY2hhbm5lbCAlZCIsCi0JCSAgICBiY3MtPmNoYW5uZWwgKyAxKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkiY291bGQgbm90IHN0YXJ0IGlzb2Nocm9ub3VzIEkvTyBmb3IgY2hhbm5lbCAlZFxuIiwKKwkJCWJjcy0+Y2hhbm5lbCArIDEpOwogCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXEgPSBiY3MtPmNoYW5uZWwgPyBIRF9PUEVOX0IyQ0hBTk5FTCA6IEhEX09QRU5fQjFDSEFOTkVMOwogCWlmICgocmV0ID0gcmVxX3N1Ym1pdChiY3MsIHJlcSwgMCwgQkFTX1RJTUVPVVQpKSA8IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgb3BlbiBjaGFubmVsICVkOiAlcyIsCi0JCSAgICBiY3MtPmNoYW5uZWwgKyAxLCBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IG9wZW4gY2hhbm5lbCAlZDogJXNcbiIsCisJCQliY3MtPmNoYW5uZWwgKyAxLCBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CiAJCXN0b3B1cmJzKGJjcy0+aHcuYmFzKTsKIAkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJfQpAQCAtMTUzNyw4ICsxNDk4LDYgQEAKIHsKIAlpbnQgcmVxLCByZXQ7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCAtRUlOVkFMKTsKLQogCWlmICghKGF0b21pY19yZWFkKCZiY3MtPmNzLT5ody5iYXMtPmJhc3N0YXRlKSAmCiAJICAgICAgKGJjcy0+Y2hhbm5lbCA/IEJTX0IyT1BFTiA6IEJTX0IxT1BFTikpKSB7CiAJCS8qIGNoYW5uZWwgbm90IHJ1bm5pbmc6IGp1c3Qgc2lnbmFsIGNvbW1vbi5jICovCkBAIC0xNTQ4LDggKzE1MDcsOSBAQAogCiAJcmVxID0gYmNzLT5jaGFubmVsID8gSERfQ0xPU0VfQjJDSEFOTkVMIDogSERfQ0xPU0VfQjFDSEFOTkVMOwogCWlmICgocmV0ID0gcmVxX3N1Ym1pdChiY3MsIHJlcSwgMCwgQkFTX1RJTUVPVVQpKSA8IDApCi0JCWVycigiY291bGQgbm90IHN1Ym1pdCBIRF9DTE9TRV9CeENIQU5ORUwgcmVxdWVzdDogJXMiLAotCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCSJjb3VsZCBub3Qgc3VibWl0IEhEX0NMT1NFX0J4Q0hBTk5FTCByZXF1ZXN0OiAlc1xuIiwKKwkJCWdldF91c2Jfc3RhdG1zZyhyZXQpKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTY0LDE3ICsxNTI0LDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGNvbXBsZXRlX2NiKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCXN0cnVjdCBjbWRidWZfdCAqY2I7Ci0KLQlJRk5VTExSRVQoY3MpOwotCWNiID0gY3MtPmNtZGJ1ZjsKLQlJRk5VTExSRVQoY2IpOworCXN0cnVjdCBjbWRidWZfdCAqY2IgPSBjcy0+Y21kYnVmOwogCiAJLyogdW5xdWV1ZSBjb21wbGV0ZWQgYnVmZmVyICovCiAJY3MtPmNtZGJ5dGVzIC09IGNzLT5jdXJsZW47Ci0JZGJnKERFQlVHX1RSQU5TQ01EIHwgREVCVUdfTE9DS0NNRCwKLQkgICAgIndyaXRlX2NvbW1hbmQ6IHNlbnQgJXUgYnl0ZXMsICV1IGxlZnQiLAotCSAgICBjcy0+Y3VybGVuLCBjcy0+Y21kYnl0ZXMpOworCWdpZ19kYmcoREVCVUdfVFJBTlNDTUR8REVCVUdfTE9DS0NNRCwKKwkJIndyaXRlX2NvbW1hbmQ6IHNlbnQgJXUgYnl0ZXMsICV1IGxlZnQiLAorCQljcy0+Y3VybGVuLCBjcy0+Y21kYnl0ZXMpOwogCWlmICgoY3MtPmNtZGJ1ZiA9IGNiLT5uZXh0KSAhPSBOVUxMKSB7CiAJCWNzLT5jbWRidWYtPnByZXYgPSBOVUxMOwogCQljcy0+Y3VybGVuID0gY3MtPmNtZGJ1Zi0+bGVuOwpAQCAtMTYwMCwxNSArMTU1Niw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHdyaXRlX2NvbW1hbmRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7Ci0KLQlJRk5VTExSRVQodXJiKTsKLQljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHVyYi0+Y29udGV4dDsKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7CiAKIAkvKiBjaGVjayBzdGF0dXMgKi8KIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CkBAIC0xNjE4LDIyICsxNTY4LDI3IEBACiAJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGVkIChhc3luYykgKi8KIAljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIHBlbmRpbmcgKi8KIAkJLyogaWdub3JlIHNpbGVudGx5ICovCi0JCWRiZyhERUJVR19VU0JSRVEsCi0JCSAgICAiJXM6ICVzIiwgX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiAlcyIsCisJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgkJCQkvKiBhbnkgZmFpbHVyZSAqLwogCQlpZiAoKyt1Y3MtPnJldHJ5X2NtZF9vdXQgPiBCQVNfUkVUUlkpIHsKLQkJCXdhcm4oImNvbW1hbmQgd3JpdGU6ICVzLCBnaXZpbmcgdXAgYWZ0ZXIgJWQgcmV0cmllcyIsCi0JCQkgICAgIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cyksIHVjcy0+cmV0cnlfY21kX291dCk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiY29tbWFuZCB3cml0ZTogJXMsICIKKwkJCQkgImdpdmluZyB1cCBhZnRlciAlZCByZXRyaWVzXG4iLAorCQkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpLAorCQkJCSB1Y3MtPnJldHJ5X2NtZF9vdXQpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGNzLT5jbWRidWYgPT0gTlVMTCkgewotCQkJd2FybigiY29tbWFuZCB3cml0ZTogJXMsIGNhbm5vdCByZXRyeSAtIGNtZGJ1ZiBnb25lIiwKLQkJCSAgICAgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiY29tbWFuZCB3cml0ZTogJXMsICIKKwkJCQkgImNhbm5vdCByZXRyeSAtIGNtZGJ1ZiBnb25lXG4iLAorCQkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJCWJyZWFrOwogCQl9Ci0JCW5vdGljZSgiY29tbWFuZCB3cml0ZTogJXMsIHJldHJ5ICVkIiwKLQkJICAgICAgIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cyksIHVjcy0+cmV0cnlfY21kX291dCk7CisJCWRldl9ub3RpY2UoY3MtPmRldiwgImNvbW1hbmQgd3JpdGU6ICVzLCByZXRyeSAlZFxuIiwKKwkJCSAgIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cyksIHVjcy0+cmV0cnlfY21kX291dCk7CiAJCWlmIChhdHdyaXRlX3N1Ym1pdChjcywgY3MtPmNtZGJ1Zi0+YnVmLCBjcy0+Y21kYnVmLT5sZW4pID49IDApCiAJCQkvKiByZXN1Ym1pdHRlZCAtIGJ5cGFzcyByZWd1bGFyIGV4aXQgYmxvY2sgKi8KIAkJCXJldHVybjsKQEAgLTE2NTUsMTMgKzE2MTAsOSBAQAogc3RhdGljIHZvaWQgYXRyZHlfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSBkYXRhOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7Ci0KLQl3YXJuKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIEhEX1JFQURZX1NFTkRfQVREQVRBIik7CisJZGV2X3dhcm4oY3MtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgSERfUkVBRFlfU0VORF9BVERBVEFcbiIpOwogCiAJLyogZmFrZSB0aGUgbWlzc2luZyBzaWduYWwgLSB3aGF0IGVsc2UgY2FuIEkgZG8/ICovCiAJdXBkYXRlX2Jhc3N0YXRlKHVjcywgQlNfQVRSRUFEWSwgQlNfQVRUSU1FUik7CkBAIC0xNjgyLDE4ICsxNjMzLDE1IEBACiAgKi8KIHN0YXRpYyBpbnQgYXR3cml0ZV9zdWJtaXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCUlGTlVMTFJFVFZBTChjcywgLUVGQVVMVCk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVRWQUwodWNzLCAtRUZBVUxUKTsKLQlJRk5VTExSRVRWQUwodWNzLT51cmJfY21kX291dCwgLUVGQVVMVCk7Ci0KLQlkYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gSERfV1JJVEVfQVRNRVNTQUdFICglZCkiLCBsZW4pOworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gSERfV1JJVEVfQVRNRVNTQUdFICglZCkiLCBsZW4pOwogCiAJaWYgKHVjcy0+dXJiX2NtZF9vdXQtPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IEhEX1dSSVRFX0FUTUVTU0FHRTogVVJCIGJ1c3kiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LAorCQkJImNvdWxkIG5vdCBzdWJtaXQgSERfV1JJVEVfQVRNRVNTQUdFOiBVUkIgYnVzeVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xNzA3LDkgKzE2NTUsMTMgQEAKIAkJCSAgICAgKHVuc2lnbmVkIGNoYXIqKSAmdWNzLT5kcl9jbWRfb3V0LCBidWYsIGxlbiwKIAkJCSAgICAgd3JpdGVfY29tbWFuZF9jYWxsYmFjaywgY3MpOwogCi0JaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9jbWRfb3V0LCBTTEFCX0FUT01JQykpICE9IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IEhEX1dSSVRFX0FUTUVTU0FHRTogJXMiLAotCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCXJldCA9IGNzLT5jb25uZWN0ZWQgPyB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9jbWRfb3V0LCBTTEFCX0FUT01JQykgOiAtRU5PREVWOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY3MtPmRldiwgImNvdWxkIG5vdCBzdWJtaXQgSERfV1JJVEVfQVRNRVNTQUdFOiAlc1xuIiwKKwkJCWdldF91c2Jfc3RhdG1zZyhyZXQpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE3MTgsOCArMTY3MCw4IEBACiAKIAkvKiBzdGFydCB0aW1lb3V0IGlmIG5lY2Vzc2FyeSAqLwogCWlmICghKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0FUVElNRVIpKSB7Ci0JCWRiZyhERUJVR19PVVRQVVQsCi0JCSAgICAic2V0dGluZyBBVFJFQURZIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIEFUUkRZX1RJTUVPVVQpOworCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgInNldHRpbmcgQVRSRUFEWSB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLAorCQkJQVRSRFlfVElNRU9VVCk7CiAJCXVjcy0+dGltZXJfYXRyZHkuZXhwaXJlcyA9IGppZmZpZXMgKyBBVFJEWV9USU1FT1VUICogSFogLyAxMDsKIAkJdWNzLT50aW1lcl9hdHJkeS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGNzOwogCQl1Y3MtPnRpbWVyX2F0cmR5LmZ1bmN0aW9uID0gYXRyZHlfdGltZW91dDsKQEAgLTE3NDAsMjEgKzE2OTIsMTcgQEAKIHN0YXRpYyBpbnQgc3RhcnRfY2JzZW5kKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewogCXN0cnVjdCBjbWRidWZfdCAqY2I7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAlpbnQgcmV0dmFsID0gMDsKIAotCUlGTlVMTFJFVFZBTChjcywgLUVGQVVMVCk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVRWQUwodWNzLCAtRUZBVUxUKTsKLQogCS8qIGNoZWNrIGlmIEFUIGNoYW5uZWwgaXMgb3BlbiAqLwogCWlmICghKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0FUT1BFTikpIHsKLQkJZGJnKERFQlVHX1RSQU5TQ01EIHwgREVCVUdfTE9DS0NNRCwgIkFUIGNoYW5uZWwgbm90IG9wZW4iKTsKKwkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRHxERUJVR19MT0NLQ01ELCAiQVQgY2hhbm5lbCBub3Qgb3BlbiIpOwogCQlyYyA9IHJlcV9zdWJtaXQoY3MtPmJjcywgSERfT1BFTl9BVENIQU5ORUwsIDAsIEJBU19USU1FT1VUKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJZXJyKCJjb3VsZCBub3Qgb3BlbiBBVCBjaGFubmVsIik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgb3BlbiBBVCBjaGFubmVsXG4iKTsKIAkJCS8qIGZsdXNoIGNvbW1hbmQgcXVldWUgKi8KIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCQkJd2hpbGUgKGNzLT5jbWRidWYgIT0gTlVMTCkKQEAgLTE3OTIsMjcgKzE3NDAsMjMgQEAKICAqCWNzCQljb250cm9sbGVyIHN0YXRlIHN0cnVjdHVyZQogICoJYnVmCQljb21tYW5kIHN0cmluZyB0byBzZW5kCiAgKglsZW4JCW51bWJlciBvZiBieXRlcyB0byBzZW5kIChtYXguIElGX1dSSVRFQlVGKQotICoJd2FrZV90YXNrbGV0CXRhc2tsZXQgdG8gcnVuIHdoZW4gdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlZCAoTlVMTCBpZiBub25lKQorICoJd2FrZV90YXNrbGV0CXRhc2tsZXQgdG8gcnVuIHdoZW4gdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlZAorICoJCQkoTlVMTCBpZiBub25lKQogICogcmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBvbiBzdWNjZXNzCiAgKgllcnJvciBjb2RlIDwgMCBvbiBlcnJvcgogICovCiBzdGF0aWMgaW50IGdpZ2FzZXRfd3JpdGVfY21kKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KQorCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCQkgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KQogewogCXN0cnVjdCBjbWRidWZfdCAqY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzOwogCiAJZ2lnYXNldF9kYmdfYnVmZmVyKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQgPwotCSAgICAgICAgICAgICAgICAgICAgIERFQlVHX1RSQU5TQ01EIDogREVCVUdfTE9DS0NNRCwKLQkgICAgICAgICAgICAgICAgICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmLCAwKTsKLQotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigiJXM6IG5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwkJCSAgICAgREVCVUdfVFJBTlNDTUQgOiBERUJVR19MT0NLQ01ELAorCQkJICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmKTsKIAogCWlmIChsZW4gPD0gMCkKIAkJcmV0dXJuIDA7CQkJLyogbm90aGluZyB0byBkbyAqLwpAQCAtMTgyMCw3ICsxNzY0LDcgQEAKIAlpZiAobGVuID4gSUZfV1JJVEVCVUYpCiAJCWxlbiA9IElGX1dSSVRFQlVGOwogCWlmICghKGNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZGJ1Zl90KSArIGxlbiwgR0ZQX0FUT01JQykpKSB7Ci0JCWVycigiJXM6IG91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTg0OSw3ICsxNzkzLDggQEAKIAogLyogZ2lnYXNldF93cml0ZV9yb29tCiAgKiB0dHlfZHJpdmVyLndyaXRlX3Jvb20gaW50ZXJmYWNlIHJvdXRpbmUKLSAqIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGUgZHJpdmVyIHdpbGwgYWNjZXB0IHRvIGJlIHdyaXR0ZW4gdmlhIGdpZ2FzZXRfd3JpdGVfY21kCisgKiByZXR1cm4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlIGRyaXZlciB3aWxsIGFjY2VwdCB0byBiZSB3cml0dGVuIHZpYQorICogZ2lnYXNldF93cml0ZV9jbWQKICAqIHBhcmFtZXRlcjoKICAqCWNvbnRyb2xsZXIgc3RhdGUgc3RydWN0dXJlCiAgKiByZXR1cm4gdmFsdWU6CkBAIC0xOTQ3LDcgKzE4OTIsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJdGFza2xldF9pbml0KCZ1YmMtPnNlbnRfdGFza2xldCwKLQkgICAgICAgICAgICAgJndyaXRlX2lzb190YXNrbGV0LCAodW5zaWduZWQgbG9uZykgYmNzKTsKKwkJICAgICAmd3JpdGVfaXNvX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKSBiY3MpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnViYy0+aXNvaW5sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgQkFTX0lOVVJCUzsgKytpKQpAQCAtMTk2OCw3ICsxOTEzLDcgQEAKIAl1YmMtPnNoYXJlZDBzID0gMDsKIAl1YmMtPnN0b2xlbjBzID0gMDsKIAl0YXNrbGV0X2luaXQoJnViYy0+cmN2ZF90YXNrbGV0LAotCSAgICAgICAgICAgICAmcmVhZF9pc29fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGJjcyk7CisJCSAgICAgJnJlYWRfaXNvX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKSBiY3MpOwogCXJldHVybiAxOwogfQogCkBAIC0yMDI3LDU3ICsxOTcyLDU2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZyZWV1cmJzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwogCWludCBpLCBqOwogCi0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwotCiAJZm9yIChqID0gMDsgaiA8IDI7ICsraikgewogCQl1YmMgPSBjcy0+YmNzW2pdLmh3LmJhczsKLQkJSUZOVUxMQ09OVCh1YmMpOwogCQlmb3IgKGkgPSAwOyBpIDwgQkFTX09VVFVSQlM7ICsraSkKIAkJCWlmICh1YmMtPmlzb291dHVyYnNbaV0udXJiKSB7CiAJCQkJdXNiX2tpbGxfdXJiKHViYy0+aXNvb3V0dXJic1tpXS51cmIpOwotCQkJCWRiZyhERUJVR19JTklULAotCQkJCSAgICAiJXM6IGlzb2Mgb3V0cHV0IFVSQiAlZC8lZCB1bmxpbmtlZCIsCi0JCQkJICAgIF9fZnVuY19fLCBqLCBpKTsKKwkJCQlnaWdfZGJnKERFQlVHX0lOSVQsCisJCQkJCSIlczogaXNvYyBvdXRwdXQgVVJCICVkLyVkIHVubGlua2VkIiwKKwkJCQkJX19mdW5jX18sIGosIGkpOwogCQkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKIAkJCQl1YmMtPmlzb291dHVyYnNbaV0udXJiID0gTlVMTDsKIAkJCX0KIAkJZm9yIChpID0gMDsgaSA8IEJBU19JTlVSQlM7ICsraSkKIAkJCWlmICh1YmMtPmlzb2ludXJic1tpXSkgewogCQkJCXVzYl9raWxsX3VyYih1YmMtPmlzb2ludXJic1tpXSk7Ci0JCQkJZGJnKERFQlVHX0lOSVQsCi0JCQkJICAgICIlczogaXNvYyBpbnB1dCBVUkIgJWQvJWQgdW5saW5rZWQiLAotCQkJCSAgICBfX2Z1bmNfXywgaiwgaSk7CisJCQkJZ2lnX2RiZyhERUJVR19JTklULAorCQkJCQkiJXM6IGlzb2MgaW5wdXQgVVJCICVkLyVkIHVubGlua2VkIiwKKwkJCQkJX19mdW5jX18sIGosIGkpOwogCQkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb2ludXJic1tpXSk7CiAJCQkJdWJjLT5pc29pbnVyYnNbaV0gPSBOVUxMOwogCQkJfQogCX0KIAlpZiAodWNzLT51cmJfaW50X2luKSB7CiAJCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9pbnRfaW4pOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBpbnRlcnJ1cHQgaW5wdXQgVVJCIHVubGlua2VkIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogaW50ZXJydXB0IGlucHV0IFVSQiB1bmxpbmtlZCIsCisJCQlfX2Z1bmNfXyk7CiAJCXVzYl9mcmVlX3VyYih1Y3MtPnVyYl9pbnRfaW4pOwogCQl1Y3MtPnVyYl9pbnRfaW4gPSBOVUxMOwogCX0KIAlpZiAodWNzLT51cmJfY21kX291dCkgewogCQl1c2Jfa2lsbF91cmIodWNzLT51cmJfY21kX291dCk7Ci0JCWRiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgb3V0cHV0IFVSQiB1bmxpbmtlZCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgb3V0cHV0IFVSQiB1bmxpbmtlZCIsCisJCQlfX2Z1bmNfXyk7CiAJCXVzYl9mcmVlX3VyYih1Y3MtPnVyYl9jbWRfb3V0KTsKIAkJdWNzLT51cmJfY21kX291dCA9IE5VTEw7CiAJfQogCWlmICh1Y3MtPnVyYl9jbWRfaW4pIHsKIAkJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2NtZF9pbik7Ci0JCWRiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgaW5wdXQgVVJCIHVubGlua2VkIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogY29tbWFuZCBpbnB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX2luKTsKIAkJdWNzLT51cmJfY21kX2luID0gTlVMTDsKIAl9CiAJaWYgKHVjcy0+dXJiX2N0cmwpIHsKIAkJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2N0cmwpOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBjb250cm9sIG91dHB1dCBVUkIgdW5saW5rZWQiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgIiVzOiBjb250cm9sIG91dHB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY3RybCk7CiAJCXVjcy0+dXJiX2N0cmwgPSBOVUxMOwogCX0KQEAgLTIwOTksMTIgKzIwNDMsMTAgQEAKIAlpbnQgaSwgajsKIAlpbnQgcmV0OwogCi0JSUZOVUxMUkVUVkFMKHVkZXYsIC1FTk9ERVYpOwotCi0JZGJnKERFQlVHX0FOWSwKLQkgICAgIiVzOiBDaGVjayBpZiBkZXZpY2UgbWF0Y2hlcyAuLiAoVmVuZG9yOiAweCV4LCBQcm9kdWN0OiAweCV4KSIsCi0JICAgIF9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwKKwkJIiVzOiBDaGVjayBpZiBkZXZpY2UgbWF0Y2hlcyAuLiAoVmVuZG9yOiAweCV4LCBQcm9kdWN0OiAweCV4KSIsCisJCV9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAogCS8qIFNlZSBpZiB0aGUgZGV2aWNlIG9mZmVyZWQgdXMgbWF0Y2hlcyB3aGF0IHdlIGNhbiBhY2NlcHQgKi8KIAlpZiAoKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICAhPSBVU0JfR0lHQV9WRU5ET1JfSUQpIHx8CkBAIC0yMTEyLDIwICsyMDU0LDIxIEBACiAJICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCXzQxNzVfUFJPRFVDVF9JRCAmJgogCSAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9TWDMwM19QUk9EVUNUX0lEICYmCiAJICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX1NYMzUzX1BST0RVQ1RfSUQpKSB7Ci0JCWRiZyhERUJVR19BTlksICIlczogdW5tYXRjaGVkIElEIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICIlczogdW5tYXRjaGVkIElEIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogc2V0IHJlcXVpcmVkIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJaG9zdGlmID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKIAlpZiAoaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDMpIHsKLQkJZGJnKERFQlVHX0FOWSwKLQkJICAgICIlczogd3JvbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQgLSB0cnlpbmcgdG8gc3dpdGNoIiwKLQkJICAgIF9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCSIlczogd3JvbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQgLSB0cnlpbmcgdG8gc3dpdGNoIiwKKwkJCV9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOwogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UodWRldiwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDMpIDwgMCkgewotCQkJd2FybigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCBkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQiLAotCQkJICAgICB1ZGV2LT5kZXZudW0sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAotCQkJICAgICBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCQkJZGV2X3dhcm4oJnVkZXYtPmRldiwgInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgIgorCQkJCSAiZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAorCQkJCSB1ZGV2LT5kZXZudW0sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCSBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAkJaG9zdGlmID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKQEAgLTIxMzQsMjMgKzIwNzcsMjggQEAKIAkvKiBSZWplY3QgYXBwbGljYXRpb24gc3BlY2lmaWMgaW50ZXJmYWNlcwogCSAqLwogCWlmIChob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IDI1NSkgewotCQl3YXJuKCIlczogYkludGVyZmFjZUNsYXNzID09ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICIlczogYkludGVyZmFjZUNsYXNzID09ICVkXG4iLAorCQkJIF9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiJXM6IERldmljZSBtYXRjaGVkIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKLQkgICAgIF9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJICIlczogRGV2aWNlIG1hdGNoZWQgKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleClcbiIsCisJCSBfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCiAJY3MgPSBnaWdhc2V0X2dldHVuYXNzaWduZWRjcyhkcml2ZXIpOwogCWlmICghY3MpIHsKLQkJZXJyKCIlczogbm8gZnJlZSBjYXJkc3RhdGUiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgIm5vIGZyZWUgY2FyZHN0YXRlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXVjcyA9IGNzLT5ody5iYXM7CisKKwkvKiBzYXZlIG9mZiBkZXZpY2Ugc3RydWN0dXJlIHB0cnMgZm9yIGxhdGVyIHVzZSAqLworCXVzYl9nZXRfZGV2KHVkZXYpOwogCXVjcy0+dWRldiA9IHVkZXY7CiAJdWNzLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJY3MtPmRldiA9ICZpbnRlcmZhY2UtPmRldjsKIAogCS8qIGFsbG9jYXRlIFVSQnM6CiAJICogLSBvbmUgZm9yIHRoZSBpbnRlcnJ1cHQgcGlwZQpAQCAtMjE1OSwyMiArMjEwNywyMiBAQAogCSAqLwogCXVjcy0+dXJiX2ludF9pbiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT51cmJfaW50X2luKSB7Ci0JCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJubyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJdWNzLT51cmJfY21kX2luID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCk7CiAJaWYgKCF1Y3MtPnVyYl9jbWRfaW4pIHsKLQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCWRldl9lcnIoY3MtPmRldiwgIm5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAl1Y3MtPnVyYl9jbWRfb3V0ID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCk7CiAJaWYgKCF1Y3MtPnVyYl9jbWRfb3V0KSB7Ci0JCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJubyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJdWNzLT51cmJfY3RybCA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT51cmJfY3RybCkgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAibm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yMTg0LDcgKzIxMzIsNyBAQAogCQkJdWJjLT5pc29vdXR1cmJzW2ldLnVyYiA9CiAJCQkJdXNiX2FsbG9jX3VyYihCQVNfTlVNRlJBTUVTLCBTTEFCX0tFUk5FTCk7CiAJCQlpZiAoIXViYy0+aXNvb3V0dXJic1tpXS51cmIpIHsKLQkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCQlkZXZfZXJyKGNzLT5kZXYsICJubyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQl9CkBAIC0yMTkyLDcgKzIxNDAsNyBAQAogCQkJdWJjLT5pc29pbnVyYnNbaV0gPQogCQkJCXVzYl9hbGxvY191cmIoQkFTX05VTUZSQU1FUywgU0xBQl9LRVJORUwpOwogCQkJaWYgKCF1YmMtPmlzb2ludXJic1tpXSkgewotCQkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJCWRldl9lcnIoY3MtPmRldiwgIm5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCX0KQEAgLTIyMDQsMTMgKzIxNTIsMTQgQEAKIAkvKiBGaWxsIHRoZSBpbnRlcnJ1cHQgdXJiIGFuZCBzZW5kIGl0IHRvIHRoZSBjb3JlICovCiAJZW5kcG9pbnQgPSAmaG9zdGlmLT5lbmRwb2ludFswXS5kZXNjOwogCXVzYl9maWxsX2ludF91cmIodWNzLT51cmJfaW50X2luLCB1ZGV2LAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUodWRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgJiAweDBmKSwKLQkgICAgICAgICAgICAgICAgIHVjcy0+aW50X2luX2J1ZiwgMywgcmVhZF9pbnRfY2FsbGJhY2ssIGNzLAotCSAgICAgICAgICAgICAgICAgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJCQkgdXNiX3JjdmludHBpcGUodWRldiwKKwkJCQkJKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSAmIDB4MGYpLAorCQkJIHVjcy0+aW50X2luX2J1ZiwgMywgcmVhZF9pbnRfY2FsbGJhY2ssIGNzLAorCQkJIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwogCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+dXJiX2ludF9pbiwgU0xBQl9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IGludGVycnVwdCBVUkI6ICVzIiwgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IGludGVycnVwdCBVUkI6ICVzXG4iLAorCQkJZ2V0X3VzYl9zdGF0bXNnKHJldCkpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjIyMSwxOCArMjE3MCwxOCBAQAogCS8qIHRlbGwgY29tbW9uIHBhcnQgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWR5ICovCiAJaWYgKHN0YXJ0bW9kZSA9PSBTTV9MT0NLRUQpCiAJCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX0xPQ0tFRCk7Ci0JaWYgKCFnaWdhc2V0X3N0YXJ0KGNzKSkKLQkJZ290byBlcnJvcjsKIAogCS8qIHNhdmUgYWRkcmVzcyBvZiBjb250cm9sbGVyIHN0cnVjdHVyZSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjcyk7CiAKLQkvKiBzZXQgdXAgZGV2aWNlIHN5c2ZzICovCi0JZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhpbnRlcmZhY2UpOworCWlmICghZ2lnYXNldF9zdGFydChjcykpCisJCWdvdG8gZXJyb3I7CisKIAlyZXR1cm4gMDsKIAogZXJyb3I6CiAJZnJlZXVyYnMoY3MpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAlnaWdhc2V0X3VuYXNzaWduKGNzKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTIyNDUsMjMgKzIxOTQsMjIgQEAKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOwogCi0JLyogY2xlYXIgZGV2aWNlIHN5c2ZzICovCi0JZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhpbnRlcmZhY2UpOwotCiAJY3MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCi0JSUZOVUxMUkVUKGNzKTsKIAl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwogCi0JaW5mbygiZGlzY29ubmVjdGluZyBHaWdhU2V0IGJhc2UiKTsKKwlkZXZfaW5mbyhjcy0+ZGV2LCAiZGlzY29ubmVjdGluZyBHaWdhc2V0IGJhc2VcbiIpOwogCWdpZ2FzZXRfc3RvcChjcyk7CiAJZnJlZXVyYnMoY3MpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAlrZnJlZSh1Y3MtPnJjdmJ1Zik7CiAJdWNzLT5yY3ZidWYgPSBOVUxMOwogCXVjcy0+cmN2YnVmX3NpemUgPSAwOwogCWF0b21pY19zZXQoJnVjcy0+YmFzc3RhdGUsIDApOworCXVzYl9wdXRfZGV2KHVjcy0+dWRldik7CisJdWNzLT5pbnRlcmZhY2UgPSBOVUxMOworCXVjcy0+dWRldiA9IE5VTEw7CisJY3MtPmRldiA9IE5VTEw7CiAJZ2lnYXNldF91bmFzc2lnbihjcyk7CiB9CiAKQEAgLTIyOTMsMTMgKzIyNDEsMTQgQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRyaXZlciBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCiAJaWYgKChkcml2ZXIgPSBnaWdhc2V0X2luaXRkcml2ZXIoR0lHQVNFVF9NSU5PUiwgR0lHQVNFVF9NSU5PUlMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSUdBU0VUX0RFVkZTTkFNRSwgJmdpZ29wcywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhJU19NT0RVTEUpKSA9PSBOVUxMKQorCQkJCSAgICAgICBHSUdBU0VUX01PRFVMRU5BTUUsIEdJR0FTRVRfREVWTkFNRSwKKwkJCQkgICAgICAgR0lHQVNFVF9ERVZGU05BTUUsICZnaWdvcHMsCisJCQkJICAgICAgIFRISVNfTU9EVUxFKSkgPT0gTlVMTCkKIAkJZ290byBlcnJvcjsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCi0JY2FyZHN0YXRlID0gZ2lnYXNldF9pbml0Y3MoZHJpdmVyLCAyLCAwLCAwLCBjaWRtb2RlLCBHSUdBU0VUX01PRFVMRU5BTUUpOworCWNhcmRzdGF0ZSA9IGdpZ2FzZXRfaW5pdGNzKGRyaXZlciwgMiwgMCwgMCwgY2lkbW9kZSwKKwkJCQkgICBHSUdBU0VUX01PRFVMRU5BTUUpOwogCWlmICghY2FyZHN0YXRlKQogCQlnb3RvIGVycm9yOwogCkBAIC0yMzI5LDE5ICsyMjc4LDE4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgYmFzX2dpZ2FzZXRfZXhpdCh2b2lkKQogewogCWdpZ2FzZXRfYmxvY2tkcml2ZXIoZHJpdmVyKTsgLyogPT4gcHJvYmUgd2lsbCBmYWlsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA9PiBubyBnaWdhc2V0X3N0YXJ0IGFueSBtb3JlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkgICAgICAqID0+IG5vIGdpZ2FzZXRfc3RhcnQgYW55IG1vcmUKKwkJCQkgICAgICAqLwogCiAJZ2lnYXNldF9zaHV0ZG93bihjYXJkc3RhdGUpOwogCS8qIGZyb20gbm93IG9uLCBubyBpc2RuIGNhbGxiYWNrIHNob3VsZCBiZSBwb3NzaWJsZSAqLwogCiAJaWYgKGF0b21pY19yZWFkKCZjYXJkc3RhdGUtPmh3LmJhcy0+YmFzc3RhdGUpICYgQlNfQVRPUEVOKSB7Ci0JCWRiZyhERUJVR19BTlksICJjbG9zaW5nIEFUIGNoYW5uZWwiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjbG9zaW5nIEFUIGNoYW5uZWwiKTsKIAkJaWYgKHJlcV9zdWJtaXQoY2FyZHN0YXRlLT5iY3MsCi0JCSAgICAgICAgICAgICAgIEhEX0NMT1NFX0FUQ0hBTk5FTCwgMCwgQkFTX1RJTUVPVVQpID49IDApIHsKLQkJCS8qIHN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQgLSB3YWl0IGZvciBjb21wbGV0aW9uICovCi0JCQkvL3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcy0+aW5pdHdhaXQsICFjcy0+aHcuYmFzLT5wZW5kaW5nKTsKLQkJCS8vRklYTUUgbmVlZCBvd24gd2FpdCBxdWV1ZT8gd2FrZXVwPworCQkJICAgICAgIEhEX0NMT1NFX0FUQ0hBTk5FTCwgMCwgQkFTX1RJTUVPVVQpID49IDApIHsKKwkJCS8qIHN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQgKi8KKwkJCS8vRklYTUUgd2FpdCBmb3IgY29tcGxldGlvbj8KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwppbmRleCA2NDM3MTk5Li43NDliM2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTdHVmZiB1c2VkIGJ5IGFsbCB2YXJpYW50cyBvZiB0aGUgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+LAorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LAogICogICAgICAgICAgICAgICAgICAgICAgIFRpbG1hbiBTY2htaWR0IDx0aWxtYW5AaW1hcC5jYz4uCiAgKgpAQCAtMTEsMTAgKzExLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogY29tbW9uLmMsdiAxLjEwNC40LjIyIDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtMjMsNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LCBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LCBTdGVmYW4gRWlsZXJzIgogI2RlZmluZSBEUklWRVJfREVTQyAiRHJpdmVyIGZvciBHaWdhc2V0IDMwN3giCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC0zMiwyMSArMjgsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZ2lnYXNldF9kZWJ1Z2xldmVsLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgbGV2ZWwiKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFByb3RvdHlwZXMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCi0gKi8KLQotLy9zdGF0aWMgdm9pZCBnaWdhc2V0X3Byb2Nlc3NfcmVzcG9uc2UoaW50IHJlc3BfY29kZSwgaW50IHBhcmFtZXRlciwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiogcHN0cmluZyk7Ci1zdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqYWxsb2NfY3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpOwotc3RhdGljIHZvaWQgZnJlZV9jcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7Ci1zdGF0aWMgdm9pZCBtYWtlX3ZhbGlkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBtYXNrKTsKLXN0YXRpYyB2b2lkIG1ha2VfaW52YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzayk7Ci0KLSNkZWZpbmUgVkFMSURfTUlOT1IgICAgICAgMHgwMQotI2RlZmluZSBWQUxJRF9JRCAgICAgICAgICAweDAyCi0jZGVmaW5lIEFTU0lHTkVEICAgICAgICAgIDB4MDQKKy8qIGRyaXZlciBzdGF0ZSBmbGFncyAqLworI2RlZmluZSBWQUxJRF9NSU5PUgkweDAxCisjZGVmaW5lIFZBTElEX0lECTB4MDIKKyNkZWZpbmUgQVNTSUdORUQJMHgwNAogCiAvKiBiaXR3aXNlIGJ5dGUgaW52ZXJzaW9uIHRhYmxlICovCiBfX3U4IGdpZ2FzZXRfaW52dGFiWzI1Nl0gPSB7CkBAIC04Niw0MiArNzEsNDAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaW52dGFiKTsKIAogdm9pZCBnaWdhc2V0X2RiZ19idWZmZXIoZW51bSBkZWJ1Z2xldmVsIGxldmVsLCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBmcm9tX3VzZXIpCisJCQlzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgY2hhciBvdXRidWZbODBdOwotCXVuc2lnbmVkIGNoYXIgaW5idWZbODAgLSAxXTsKLQlzaXplX3QgbnVtaW47Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqaW47CisJdW5zaWduZWQgY2hhciBjOwogCXNpemVfdCBzcGFjZSA9IHNpemVvZiBvdXRidWYgLSAxOwogCXVuc2lnbmVkIGNoYXIgKm91dCA9IG91dGJ1ZjsKKwlzaXplX3QgbnVtaW4gPSBsZW47CiAKLQlpZiAoIWZyb21fdXNlcikgewotCQlpbiA9IGJ1ZjsKLQkJbnVtaW4gPSBsZW47Ci0JfSBlbHNlIHsKLQkJbnVtaW4gPSBsZW4gPCBzaXplb2YgaW5idWYgPyBsZW4gOiBzaXplb2YgaW5idWY7Ci0JCWluID0gaW5idWY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihpbmJ1ZiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICopIGJ1ZiwgbnVtaW4pKSB7Ci0JCQlzdHJuY3B5KGluYnVmLCAiPEZBVUxUPiIsIHNpemVvZiBpbmJ1Zik7Ci0JCQludW1pbiA9IHNpemVvZiAiPEZBVUxUPiIgLSAxOworCXdoaWxlIChudW1pbi0tKSB7CisJCWMgPSAqYnVmKys7CisJCWlmIChjID09ICd+JyB8fCBjID09ICdeJyB8fCBjID09ICdcXCcpIHsKKwkJCWlmICghc3BhY2UtLSkKKwkJCQlicmVhazsKKwkJCSpvdXQrKyA9ICdcXCc7CiAJCX0KLQl9Ci0KLQlmb3IgKDsgbnVtaW4gJiYgc3BhY2U7IC0tbnVtaW4sICsraW4pIHsKLQkJLS1zcGFjZTsKLQkJaWYgKCppbiA+PSAzMikKLQkJCSpvdXQrKyA9ICppbjsKLQkJZWxzZSB7CisJCWlmIChjICYgMHg4MCkgeworCQkJaWYgKCFzcGFjZS0tKQorCQkJCWJyZWFrOworCQkJKm91dCsrID0gJ34nOworCQkJYyBePSAweDgwOworCQl9CisJCWlmIChjIDwgMHgyMCB8fCBjID09IDB4N2YpIHsKKwkJCWlmICghc3BhY2UtLSkKKwkJCQlicmVhazsKIAkJCSpvdXQrKyA9ICdeJzsKLQkJCWlmIChzcGFjZSkgewotCQkJCSpvdXQrKyA9ICdAJyArICppbjsKLQkJCQktLXNwYWNlOwotCQkJfQorCQkJYyBePSAweDQwOwogCQl9CisJCWlmICghc3BhY2UtLSkKKwkJCWJyZWFrOworCQkqb3V0KysgPSBjOwogCX0KIAkqb3V0ID0gMDsKIAotCWRiZyhsZXZlbCwgIiVzICgldSBieXRlcyk6ICVzIiwgbXNnLCAodW5zaWduZWQpIGxlbiwgb3V0YnVmKTsKKwlnaWdfZGJnKGxldmVsLCAiJXMgKCV1IGJ5dGVzKTogJXMiLCBtc2csICh1bnNpZ25lZCkgbGVuLCBvdXRidWYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9kYmdfYnVmZmVyKTsKIApAQCAtMTQ2LDExICsxMjksNiBAQAogewogCWludCBpLCByOwogCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZXJyKCJub3QgY29ubmVjdGVkISIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCiAJY3MtPmNvbnRyb2xfc3RhdGUgPSBUSU9DTV9SVFM7IC8vRklYTUUKIAogCXIgPSBzZXRmbGFncyhjcywgVElPQ01fRFRSLCAyMDApOwpAQCAtMTc0LDcgKzE1Miw3IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWVycigiZXJyb3IgJWQgb24gc2V0dWFydGJpdHMhXG4iLCAtcik7CisJZGV2X2Vycihjcy0+ZGV2LCAiZXJyb3IgJWQgb24gc2V0dWFydGJpdHNcbiIsIC1yKTsKIAljcy0+Y29udHJvbF9zdGF0ZSA9IFRJT0NNX1JUU3xUSU9DTV9EVFI7IC8vIEZJWE1FIGlzIHRoaXMgYSBnb29kIHZhbHVlPwogCWNzLT5vcHMtPnNldF9tb2RlbV9jdHJsKGNzLCAwLCBUSU9DTV9SVFN8VElPQ01fRFRSKTsKIApAQCAtMTg3LDEzICsxNjUsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoLS1hdF9zdGF0ZS0+dGltZXJfZXhwaXJlcykgewotCQlkYmcoREVCVUdfTUNNRCwgImRlY3JlYXNlZCB0aW1lciBvZiAlcCB0byAlbHUiLAotCQkgICAgYXRfc3RhdGUsIGF0X3N0YXRlLT50aW1lcl9leHBpcmVzKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAiZGVjcmVhc2VkIHRpbWVyIG9mICVwIHRvICVsdSIsCisJCQlhdF9zdGF0ZSwgYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGF0X3N0YXRlLT5jcywgYXRfc3RhdGUsIEVWX1RJTUVPVVQsIE5VTEwsCi0JICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmYXRfc3RhdGUtPnRpbWVyX2luZGV4KSwgTlVMTCkpIHsKKwkJCSAgICAgICBhdF9zdGF0ZS0+dGltZXJfaW5kZXgsIE5VTEwpKSB7CiAJCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/CiAJfQogCkBAIC0yMjEsMTAgKzE5OSwxMCBAQAogCQlpZiAodGVzdF90aW1lb3V0KGF0X3N0YXRlKSkKIAkJCXRpbWVvdXQgPSAxOwogCi0JaWYgKGF0b21pY19yZWFkKCZjcy0+cnVubmluZykpIHsKLQkJbW9kX3RpbWVyKCZjcy0+dGltZXIsIGppZmZpZXMgKyBHSUdfVElDSyk7CisJaWYgKGNzLT5ydW5uaW5nKSB7CisJCW1vZF90aW1lcigmY3MtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhHSUdfVElDSykpOwogCQlpZiAodGltZW91dCkgewotCQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgdGltZW91dCIpOworCQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIHRpbWVvdXQiKTsKIAkJCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT5ldmVudF90YXNrbGV0KTsKIAkJfQogCX0KQEAgLTIzOCwxMyArMjE2LDE0IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCWlmIChiY3MtPnVzZV9jb3VudCkgewotCQlkYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsICVkIiwKKwkJCWJjcy0+Y2hhbm5lbCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQogCSsrYmNzLT51c2VfY291bnQ7CiAJYmNzLT5idXN5ID0gMTsKLQlkYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTI1NSwxMyArMjM0LDEzIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCWlmICghYmNzLT5idXN5KSB7Ci0JCWRiZyhERUJVR19BTlksICJjb3VsZCBub3QgZnJlZSBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjb3VsZCBub3QgZnJlZSBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCS0tYmNzLT51c2VfY291bnQ7CiAJYmNzLT5idXN5ID0gMDsKLQlkYmcoREVCVUdfQU5ZLCAiZnJlZWQgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19BTlksICJmcmVlZCBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI3NCwxNCArMjUzLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQlpZiAoY3MtPmJjc1tpXS51c2VfY291bnQpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQlkYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlZCBhbGwgY2hhbm5lbHMiKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlIGFsbCBjaGFubmVscyIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpCiAJCSsrY3MtPmJjc1tpXS51c2VfY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAotCWRiZyhERUJVR19BTlksICJhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19BTlksICJhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTI5MSw3ICsyNzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfQU5ZLCAidW5ibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgInVuYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQktLWNzLT5iY3NbaV0udXNlX2NvdW50OwpAQCAtMzAzLDcgKzI4Miw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAotCWRiZyhERUJVR19BTlksICJibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgImJsb2NraW5nIGFsbCBjaGFubmVscyIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJKytjcy0+YmNzW2ldLnVzZV9jb3VudDsKQEAgLTMxNCwyNSArMjkzLDI3IEBACiB7CiAJc3RydWN0IGV2ZW50X3QgKmV2OwogCXVuc2lnbmVkIGhlYWQsIHRhaWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIG5vIGxvY2tpbmcgbmVlZGVkIChubyByZWFkZXIvd3JpdGVyIGFsbG93ZWQpICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAKLQloZWFkID0gYXRvbWljX3JlYWQoJmNzLT5ldl9oZWFkKTsKLQl0YWlsID0gYXRvbWljX3JlYWQoJmNzLT5ldl90YWlsKTsKKwloZWFkID0gY3MtPmV2X2hlYWQ7CisJdGFpbCA9IGNzLT5ldl90YWlsOwogCiAJd2hpbGUgKHRhaWwgIT0gaGVhZCkgewogCQlldiA9IGNzLT5ldmVudHMgKyBoZWFkOwogCQlrZnJlZShldi0+cHRyKTsKLQogCQloZWFkID0gKGhlYWQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJfQogCi0JYXRvbWljX3NldCgmY3MtPmV2X2hlYWQsIHRhaWwpOworCWNzLT5ldl9oZWFkID0gdGFpbDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiB9CiAKIHN0cnVjdCBldmVudF90ICpnaWdhc2V0X2FkZF9ldmVudChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIGludCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0ciwgaW50IHBhcmFtZXRlciwgdm9pZCAqYXJnKQorCQkJCSAgc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBpbnQgdHlwZSwKKwkJCQkgIHZvaWQgKnB0ciwgaW50IHBhcmFtZXRlciwgdm9pZCAqYXJnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbmV4dCwgdGFpbDsKQEAgLTM0MCw5ICszMjEsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAKLQl0YWlsID0gYXRvbWljX3JlYWQoJmNzLT5ldl90YWlsKTsKKwl0YWlsID0gY3MtPmV2X3RhaWw7CiAJbmV4dCA9ICh0YWlsICsgMSkgJSBNQVhfRVZFTlRTOwotCWlmICh1bmxpa2VseShuZXh0ID09IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCkpKQorCWlmICh1bmxpa2VseShuZXh0ID09IGNzLT5ldl9oZWFkKSkKIAkJZXJyKCJldmVudCBxdWV1ZSBmdWxsIik7CiAJZWxzZSB7CiAJCWV2ZW50ID0gY3MtPmV2ZW50cyArIHRhaWw7CkBAIC0zNTIsNyArMzMzLDcgQEAKIAkJZXZlbnQtPnB0ciA9IHB0cjsKIAkJZXZlbnQtPmFyZyA9IGFyZzsKIAkJZXZlbnQtPnBhcmFtZXRlciA9IHBhcmFtZXRlcjsKLQkJYXRvbWljX3NldCgmY3MtPmV2X3RhaWwsIG5leHQpOworCQljcy0+ZXZfdGFpbCA9IG5leHQ7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKQEAgLTM5MSwxNCArMzcyLDE0IEBACiB7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+aHciLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+aHciLCBiY3MtPmNoYW5uZWwpOwogCWlmICghYmNzLT5jcy0+b3BzLT5mcmVlYmNzaHcoYmNzKSkgewotCQlkYmcoREVCVUdfSU5JVCwgImZhaWxlZCIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJmYWlsZWQiKTsKIAl9CiAKLQlkYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGJjc1slZF0tPmF0X3N0YXRlIiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdLT5hdF9zdGF0ZSIsIGJjcy0+Y2hhbm5lbCk7CiAJY2xlYXJfYXRfc3RhdGUoJmJjcy0+YXRfc3RhdGUpOwotCWRiZyhERUJVR19JTklULCAiZnJlZWluZyBiY3NbJWRdLT5za2IiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+c2tiIiwgYmNzLT5jaGFubmVsKTsKIAogCWlmIChiY3MtPnNrYikKIAkJZGV2X2tmcmVlX3NrYihiY3MtPnNrYik7CkBAIC00MDgsNiArMzg5LDUyIEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqYWxsb2NfY3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpOworCXN0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICpyZXQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBkcnYtPm1pbm9yczsgKytpKSB7CisJCWlmICghKGRydi0+ZmxhZ3NbaV0gJiBWQUxJRF9NSU5PUikpIHsKKwkJCWRydi0+ZmxhZ3NbaV0gPSBWQUxJRF9NSU5PUjsKKwkJCXJldCA9IGRydi0+Y3MgKyBpOworCQl9CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV92YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdIHw9IG1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfaW52YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJZHJ2LT5mbGFnc1tjcy0+bWlub3JfaW5kZXhdICY9IH5tYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOworfQorCiB2b2lkIGdpZ2FzZXRfZnJlZWNzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewogCWludCBpOwpAQCAtNDE2LDcgKzQ0Myw3IEBACiAJaWYgKCFjcykKIAkJcmV0dXJuOwogCi0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWlmICghY3MtPmJjcykKIAkJZ290byBmX2NzOwpAQCAtNDI0LDggKzQ1MSw5IEBACiAJCWdvdG8gZl9iY3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlhdG9taWNfc2V0KCZjcy0+cnVubmluZywgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsgLyogZXZlbnQgaGFuZGxlciBhbmQgdGltZXIgYXJlIG5vdCByZXNjaGVkdWxlZCBiZWxvdyAqLworCWNzLT5ydW5uaW5nID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOyAvKiBldmVudCBoYW5kbGVyIGFuZCB0aW1lciBhcmUKKwkJCQkJCSAgICAgbm90IHJlc2NoZWR1bGVkIGJlbG93ICovCiAKIAl0YXNrbGV0X2tpbGwoJmNzLT5ldmVudF90YXNrbGV0KTsKIAlkZWxfdGltZXJfc3luYygmY3MtPnRpbWVyKTsKQEAgLTQzNCw3ICs0NjIsNyBAQAogCWRlZmF1bHQ6CiAJCWdpZ2FzZXRfaWZfZnJlZShjcyk7CiAKLQkJZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBodyIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBodyIpOwogCQljcy0+b3BzLT5mcmVlY3Nodyhjcyk7CiAKIAkJLy9GSVhNRSBjbWRidWYKQEAgLTQ0MywzNiArNDcxLDM2IEBACiAJY2FzZSAyOiAvKiBlcnJvciBpbiBpbml0Y3NodyAqLwogCQkvKiBEZXJlZ2lzdGVyIGZyb20gTEwgKi8KIAkJbWFrZV9pbnZhbGlkKGNzLCBWQUxJRF9JRCk7Ci0JCWRiZyhERUJVR19JTklULCAiY2xlYXJpbmcgaWlmIik7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGlpZiIpOwogCQlnaWdhc2V0X2k0bF9jbWQoY3MsIElTRE5fU1RBVF9VTkxPQUQpOwogCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgMTogLyogZXJyb3Igd2hlbiByZWdlc3RlcmluZyB0byBMTCAqLwotCQlkYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGF0X3N0YXRlIik7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGF0X3N0YXRlIik7CiAJCWNsZWFyX2F0X3N0YXRlKCZjcy0+YXRfc3RhdGUpOwogCQlkZWFsbG9jX2F0X3N0YXRlcyhjcyk7CiAKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSAwOiAvKiBlcnJvciBpbiBvbmUgY2FsbCB0byBpbml0YmNzICovCiAJCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkgewotCQkJZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdIiwgaSk7CisJCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdIiwgaSk7CiAJCQlnaWdhc2V0X2ZyZWViY3MoY3MtPmJjcyArIGkpOwogCQl9CiAKIAkJY2xlYXJfZXZlbnRzKGNzKTsKLQkJZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGluYnVmIik7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgaW5idWYiKTsKIAkJa2ZyZWUoY3MtPmluYnVmKTsKIAl9Ci1mX2JjczoJZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1tdIik7CitmX2JjczoJZ2lnX2RiZyhERUJVR19JTklULCAiZnJlZWluZyBiY3NbXSIpOwogCWtmcmVlKGNzLT5iY3MpOwotZl9jczoJZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGNzIik7Ci0JdXAoJmNzLT5zZW0pOworZl9jczoJZ2lnX2RiZyhERUJVR19JTklULCAiZnJlZWluZyBjcyIpOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlmcmVlX2NzKGNzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfZnJlZWNzKTsKIAogdm9pZCBnaWdhc2V0X2F0X2luaXQoc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBzdHJ1Y3QgYmNfc3RhdGUgKmJjcywKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKQorCQkgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKQogewogCWludCBpOwogCkBAIC00ODIsOCArNTEwLDggQEAKIAlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyA9IDA7CiAJYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMgPSAwOwogCWF0X3N0YXRlLT50aW1lcl9hY3RpdmUgPSAwOwotCWF0b21pY19zZXQoJmF0X3N0YXRlLT50aW1lcl9pbmRleCwgMCk7Ci0JYXRvbWljX3NldCgmYXRfc3RhdGUtPnNlcV9pbmRleCwgMCk7CisJYXRfc3RhdGUtPnRpbWVyX2luZGV4ID0gMDsKKwlhdF9zdGF0ZS0+c2VxX2luZGV4ID0gMDsKIAlhdF9zdGF0ZS0+Q29uU3RhdGUgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBTVFJfTlVNOyArK2kpCiAJCWF0X3N0YXRlLT5zdHJfdmFyW2ldID0gTlVMTDsKQEAgLTUwMSw3ICs1MjksNyBAQAogCiAKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfaW5idWZfaW5pdChzdHJ1Y3QgaW5idWZfdCAqaW5idWYsIHN0cnVjdCBiY19zdGF0ZSAqYmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgaW5wdXRzdGF0ZSkKKwkJCSAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGlucHV0c3RhdGUpCiAvKiBpbmJ1Zi0+cmVhZCBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUhICovCiB7CiAJYXRvbWljX3NldCgmaW5idWYtPmhlYWQsIDApOwpAQCAtNTEyLDkgKzU0MCw1MCBAQAogCWluYnVmLT5pbnB1dHN0YXRlID0gaW5wdXRzdGF0ZTsKIH0KIAorLyogYXBwZW5kIHJlY2VpdmVkIGJ5dGVzIHRvIGluYnVmICovCitpbnQgZ2lnYXNldF9maWxsX2luYnVmKHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgbnVtYnl0ZXMpCit7CisJdW5zaWduZWQgbiwgaGVhZCwgdGFpbCwgYnl0ZXNsZWZ0OworCisJZ2lnX2RiZyhERUJVR19JTlRSLCAicmVjZWl2ZWQgJXUgYnl0ZXMiLCBudW1ieXRlcyk7CisKKwlpZiAoIW51bWJ5dGVzKQorCQlyZXR1cm4gMDsKKworCWJ5dGVzbGVmdCA9IG51bWJ5dGVzOworCXRhaWwgPSBhdG9taWNfcmVhZCgmaW5idWYtPnRhaWwpOworCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOworCWdpZ19kYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKKworCXdoaWxlIChieXRlc2xlZnQpIHsKKwkJaWYgKGhlYWQgPiB0YWlsKQorCQkJbiA9IGhlYWQgLSAxIC0gdGFpbDsKKwkJZWxzZSBpZiAoaGVhZCA9PSAwKQorCQkJbiA9IChSQlVGU0laRS0xKSAtIHRhaWw7CisJCWVsc2UKKwkJCW4gPSBSQlVGU0laRSAtIHRhaWw7CisJCWlmICghbikgeworCQkJZGV2X2VycihpbmJ1Zi0+Y3MtPmRldiwKKwkJCQkiYnVmZmVyIG92ZXJmbG93ICgldSBieXRlcyBsb3N0KSIsIGJ5dGVzbGVmdCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobiA+IGJ5dGVzbGVmdCkKKwkJCW4gPSBieXRlc2xlZnQ7CisJCW1lbWNweShpbmJ1Zi0+ZGF0YSArIHRhaWwsIHNyYywgbik7CisJCWJ5dGVzbGVmdCAtPSBuOworCQl0YWlsID0gKHRhaWwgKyBuKSAlIFJCVUZTSVpFOworCQlzcmMgKz0gbjsKKwl9CisJZ2lnX2RiZyhERUJVR19JTlRSLCAic2V0dGluZyB0YWlsIHRvICV1IiwgdGFpbCk7CisJYXRvbWljX3NldCgmaW5idWYtPnRhaWwsIHRhaWwpOworCXJldHVybiBudW1ieXRlcyAhPSBieXRlc2xlZnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ZpbGxfaW5idWYpOworCiAvKiBJbml0aWFsaXplIHRoZSBiLWNoYW5uZWwgc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGJjX3N0YXRlICpnaWdhc2V0X2luaXRiY3Moc3RydWN0IGJjX3N0YXRlICpiY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBjaGFubmVsKQorCQkJCQlzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNoYW5uZWwpCiB7CiAJaW50IGk7CiAKQEAgLTUyNiw3ICs1OTUsNyBAQAogCWJjcy0+dHJhbnNfZG93biA9IDA7CiAJYmNzLT50cmFuc191cCA9IDA7CiAKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgYmNzWyVkXS0+YXRfc3RhdGUiLCBjaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0tPmF0X3N0YXRlIiwgY2hhbm5lbCk7CiAJZ2lnYXNldF9hdF9pbml0KCZiY3MtPmF0X3N0YXRlLCBiY3MsIGNzLCAtMSk7CiAKIAliY3MtPnJjdmJ5dGVzID0gMDsKQEAgLTUzNSw3ICs2MDQsNyBAQAogCWJjcy0+ZW1wdHljb3VudCA9IDA7CiAjZW5kaWYKIAotCWRiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBiY3NbJWRdLT5za2IiLCBjaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGJjc1slZF0tPnNrYiIsIGNoYW5uZWwpOwogCWJjcy0+ZmNzID0gUFBQX0lOSVRGQ1M7CiAJYmNzLT5pbnB1dHN0YXRlID0gMDsKIAlpZiAoY3MtPmlnbm9yZWZyYW1lcykgewpAQCAtNTQ0LDcgKzYxMyw3IEBACiAJfSBlbHNlIGlmICgoYmNzLT5za2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTikpICE9IE5VTEwpCiAJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKIAllbHNlIHsKLQkJd2FybigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJCWJjcy0+aW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAl9CiAKQEAgLTU1OSwxNCArNjI4LDEzIEBACiAJZm9yIChpID0gMDsgaSA8IEFUX05VTTsgKytpKQogCQliY3MtPmNvbW1hbmRzW2ldID0gTlVMTDsKIAotCWRiZyhERUJVR19JTklULCAiICBzZXR0aW5nIHVwIGJjc1slZF0tPmh3IiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiICBzZXR0aW5nIHVwIGJjc1slZF0tPmh3IiwgY2hhbm5lbCk7CiAJaWYgKGNzLT5vcHMtPmluaXRiY3NodyhiY3MpKQogCQlyZXR1cm4gYmNzOwogCi0vL2Vycm9yOgotCWRiZyhERUJVR19JTklULCAiICBmYWlsZWQiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICIgIGZhaWxlZCIpOwogCi0JZGJnKERFQlVHX0lOSVQsICIgIGZyZWVpbmcgYmNzWyVkXS0+c2tiIiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiICBmcmVlaW5nIGJjc1slZF0tPnNrYiIsIGNoYW5uZWwpOwogCWlmIChiY3MtPnNrYikKIAkJZGV2X2tmcmVlX3NrYihiY3MtPnNrYik7CiAKQEAgLTU3OCw5ICs2NDYsMTAgQEAKICAqIENhbGxzIGhhcmR3YXJlIGRlcGVuZGVudCBnaWdhc2V0X2luaXRjc2h3KCkgZnVuY3Rpb24KICAqIENhbGxzIEIgY2hhbm5lbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBnaWdhc2V0X2luaXRiY3MoKSBmb3IgZWFjaCBCIGNoYW5uZWwKICAqIHBhcmFtZXRlcnM6Ci0gKiAgICAgIGRydgkJaGFyZHdhcmUgZHJpdmVyIHRoZSBkZXZpY2UgYmVsb25ncyB0bworICoJZHJ2CQloYXJkd2FyZSBkcml2ZXIgdGhlIGRldmljZSBiZWxvbmdzIHRvCiAgKgljaGFubmVscwludW1iZXIgb2YgQiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgZGV2aWNlCi0gKglvbmVjaGFubmVsCSE9MDogQiBjaGFubmVsIGRhdGEgYW5kIEFUIGNvbW1hbmRzIHNoYXJlIG9uZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwKKyAqCW9uZWNoYW5uZWwJIT0wOiBCIGNoYW5uZWwgZGF0YSBhbmQgQVQgY29tbWFuZHMgc2hhcmUgb25lCisgKgkJCSAgICAgY29tbXVuaWNhdGlvbiBjaGFubmVsCiAgKgkJCT09MDogQiBjaGFubmVscyBoYXZlIHNlcGFyYXRlIGNvbW11bmljYXRpb24gY2hhbm5lbHMKICAqCWlnbm9yZWZyYW1lcwludW1iZXIgb2YgZnJhbWVzIHRvIGlnbm9yZSBhZnRlciBzZXR0aW5nIHVwIEIgY2hhbm5lbAogICoJY2lkbW9kZQkJIT0wOiBzdGFydCBpbiBDYWxsSUQgbW9kZQpAQCAtNTkzLDE3ICs2NjIsMTggQEAKIAkJCQkgaW50IGNpZG1vZGUsIGNvbnN0IGNoYXIgKm1vZHVsZW5hbWUpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgY3MiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGNzIik7CiAJY3MgPSBhbGxvY19jcyhkcnYpOwogCWlmICghY3MpCiAJCWdvdG8gZXJyb3I7Ci0JZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGJjc1swLi4lZF0iLCBjaGFubmVscyAtIDEpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgYmNzWzAuLiVkXSIsIGNoYW5uZWxzIC0gMSk7CiAJY3MtPmJjcyA9IGttYWxsb2MoY2hhbm5lbHMgKiBzaXplb2Yoc3RydWN0IGJjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcy0+YmNzKQogCQlnb3RvIGVycm9yOwotCWRiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBpbmJ1ZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgaW5idWYiKTsKIAljcy0+aW5idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5idWZfdCksIEdGUF9LRVJORUwpOwogCWlmICghY3MtPmluYnVmKQogCQlnb3RvIGVycm9yOwpAQCAtNjEzLDE5ICs2ODMsMjMgQEAKIAljcy0+b25lY2hhbm5lbCA9IG9uZWNoYW5uZWw7CiAJY3MtPmlnbm9yZWZyYW1lcyA9IGlnbm9yZWZyYW1lczsKIAlJTklUX0xJU1RfSEVBRCgmY3MtPnRlbXBfYXRfc3RhdGVzKTsKLQlhdG9taWNfc2V0KCZjcy0+cnVubmluZywgMCk7CisJY3MtPnJ1bm5pbmcgPSAwOwogCWluaXRfdGltZXIoJmNzLT50aW1lcik7IC8qIGNsZWFyIG5leHQgJiBwcmV2ICovCiAJc3Bpbl9sb2NrX2luaXQoJmNzLT5ldl9sb2NrKTsKLQlhdG9taWNfc2V0KCZjcy0+ZXZfdGFpbCwgMCk7Ci0JYXRvbWljX3NldCgmY3MtPmV2X2hlYWQsIDApOwotCWluaXRfTVVURVhfTE9DS0VEKCZjcy0+c2VtKTsKLQl0YXNrbGV0X2luaXQoJmNzLT5ldmVudF90YXNrbGV0LCAmZ2lnYXNldF9oYW5kbGVfZXZlbnQsICh1bnNpZ25lZCBsb25nKSBjcyk7CisJY3MtPmV2X3RhaWwgPSAwOworCWNzLT5ldl9oZWFkID0gMDsKKwltdXRleF9pbml0KCZjcy0+bXV0ZXgpOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CisKKwl0YXNrbGV0X2luaXQoJmNzLT5ldmVudF90YXNrbGV0LCAmZ2lnYXNldF9oYW5kbGVfZXZlbnQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGNzKTsKIAlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMCk7CiAJY3MtPmN1cl9hdF9zZXEgPSAwOwogCWNzLT5nb3Rmd3ZlciA9IC0xOwogCWNzLT5vcGVuX2NvdW50ID0gMDsKKwljcy0+ZGV2ID0gTlVMTDsKIAljcy0+dHR5ID0gTlVMTDsKLQlhdG9taWNfc2V0KCZjcy0+Y2lkbW9kZSwgY2lkbW9kZSAhPSAwKTsKKwljcy0+Y2lkbW9kZSA9IGNpZG1vZGUgIT0gMDsKIAogCS8vaWYob25lY2hhbm5lbCkgeyAvL0ZJWE1FCiAJCWNzLT50YWJub2NpZCA9IGdpZ2FzZXRfdGFiX25vY2lkX20xMHg7CkBAIC02NDIsNTAgKzcxNiw0MyBAQAogCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX1VOSU5JVElBTElaRUQpOwogCiAJZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyArK2kpIHsKLQkJZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0ucmVhZCIsIGkpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0ucmVhZCIsIGkpOwogCQlpZiAoIWdpZ2FzZXRfaW5pdGJjcyhjcy0+YmNzICsgaSwgY3MsIGkpKQogCQkJZ290byBlcnJvcjsKIAl9CiAKIAkrK2NzLT5jc19pbml0OwogCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGF0X3N0YXRlIik7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBhdF9zdGF0ZSIpOwogCXNwaW5fbG9ja19pbml0KCZjcy0+bG9jayk7CiAJZ2lnYXNldF9hdF9pbml0KCZjcy0+YXRfc3RhdGUsIE5VTEwsIGNzLCAwKTsKIAljcy0+ZGxlID0gMDsKIAljcy0+Y2J5dGVzID0gMDsKIAotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBpbmJ1ZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaW5idWYiKTsKIAlpZiAob25lY2hhbm5lbCkgewkJCS8vRklYTUUgZGlzdGluY3Rpb24gbmVjZXNzYXJ5PwogCQlnaWdhc2V0X2luYnVmX2luaXQoY3MtPmluYnVmLCBjcy0+YmNzLCBjcywgSU5TX2NvbW1hbmQpOwogCX0gZWxzZQogCQlnaWdhc2V0X2luYnVmX2luaXQoY3MtPmluYnVmLCBOVUxMLCAgICBjcywgSU5TX2NvbW1hbmQpOwogCi0JYXRvbWljX3NldCgmY3MtPmNvbm5lY3RlZCwgMCk7CisJY3MtPmNvbm5lY3RlZCA9IDA7CisJY3MtPmlzZG5fdXAgPSAwOwogCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGNtZGJ1ZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgY21kYnVmIik7CiAJY3MtPmNtZGJ1ZiA9IGNzLT5sYXN0Y21kYnVmID0gTlVMTDsKIAlzcGluX2xvY2tfaW5pdCgmY3MtPmNtZGxvY2spOwogCWNzLT5jdXJsZW4gPSAwOwogCWNzLT5jbWRieXRlcyA9IDA7CiAKLQkvKgotCSAqIFRlbGwgdGhlIElTRE40TGludXggc3Vic3lzdGVtICh0aGUgTEwpIHRoYXQKLQkgKiBhIGRyaXZlciBmb3IgYSBVU0ItRGV2aWNlIGlzIGF2YWlsYWJsZSAhCi0JICogSWYgdGhpcyBpcyBkb25lLCAiaXNkbmN0cmwiIGlzIGFibGUgdG8gYmluZCBhIGRldmljZSBmb3IgdGhpcyBkcml2ZXIgZXZlbgotCSAqIGlmIG5vIHBoeXNpY2FsIHVzYi1kZXZpY2UgaXMgY3VycmVudGx5IGNvbm5lY3RlZC4KLQkgKiBCdXQgdGhpcyBkZXZpY2Ugd2lsbCBqdXN0IGJlIGFjY2Vzc2FibGUgaWYgYSBwaHlzaWNhbCBVU0IgZGV2aWNlIGlzIGNvbm5lY3RlZAotCSAqICh2aWEgImdpZ2FzZXRfcHJvYmUiKSAuCi0JICovCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGlpZiIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaWlmIik7CiAJaWYgKCFnaWdhc2V0X3JlZ2lzdGVyX3RvX0xMKGNzLCBtb2R1bGVuYW1lKSkgewotCQllcnIoInJlZ2lzdGVyX2lzZG49PmVycm9yIik7CisJCWVycigicmVnaXN0ZXJfaXNkbiBmYWlsZWQiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAltYWtlX3ZhbGlkKGNzLCBWQUxJRF9JRCk7CiAJKytjcy0+Y3NfaW5pdDsKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaHciKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGh3Iik7CiAJaWYgKCFjcy0+b3BzLT5pbml0Y3NodyhjcykpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTY5MywyNyArNzYwLDI5IEBACiAKIAlnaWdhc2V0X2lmX2luaXQoY3MpOwogCi0JYXRvbWljX3NldCgmY3MtPnJ1bm5pbmcsIDEpOwotCWNzLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGNzOwotCWNzLT50aW1lci5mdW5jdGlvbiA9IHRpbWVyX3RpY2s7Ci0JY3MtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgR0lHX1RJQ0s7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJY3MtPnJ1bm5pbmcgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisJc2V0dXBfdGltZXIoJmNzLT50aW1lciwgdGltZXJfdGljaywgKHVuc2lnbmVkIGxvbmcpIGNzKTsKKwljcy0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEdJR19USUNLKTsKIAkvKiBGSVhNRTogY2FuIGppZmZpZXMgaW5jcmVhc2UgdG9vIG11Y2ggdW50aWwgdGhlIHRpbWVyIGlzIGFkZGVkPwogCSAqIFNhbWUgcHJvYmxlbSg/KSB3aXRoIG1vZF90aW1lcigpIGluIHRpbWVyX3RpY2soKS4gKi8KIAlhZGRfdGltZXIoJmNzLT50aW1lcik7CiAKLQlkYmcoREVCVUdfSU5JVCwgImNzIGluaXRpYWxpemVkISIpOwotCXVwKCZjcy0+c2VtKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJjcyBpbml0aWFsaXplZCIpOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gY3M7CiAKIGVycm9yOglpZiAoY3MpCi0JCXVwKCZjcy0+c2VtKTsKLQlkYmcoREVCVUdfSU5JVCwgImZhaWxlZCIpOworCQltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiZmFpbGVkIik7CiAJZ2lnYXNldF9mcmVlY3MoY3MpOwogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9pbml0Y3MpOwogCi0vKiBSZUluaXRpYWxpemUgdGhlIGItY2hhbm5lbCBzdHJ1Y3R1cmUgKi8gLyogZS5nLiBjYWxsZWQgb24gaGFuZ3VwLCBkaXNjb25uZWN0ICovCisvKiBSZUluaXRpYWxpemUgdGhlIGItY2hhbm5lbCBzdHJ1Y3R1cmUgKi8KKy8qIGUuZy4gY2FsbGVkIG9uIGhhbmd1cCwgZGlzY29ubmVjdCAqLwogdm9pZCBnaWdhc2V0X2Jjc19yZWluaXQoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTcyMywxMiArNzkyLDEyIEBACiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYmNzLT5zcXVldWUpKSAhPSBOVUxMKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsgLy9GSVhNRQorCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWNsZWFyX2F0X3N0YXRlKCZiY3MtPmF0X3N0YXRlKTsKIAliY3MtPmF0X3N0YXRlLkNvblN0YXRlID0gMDsKIAliY3MtPmF0X3N0YXRlLnRpbWVyX2FjdGl2ZSA9IDA7CiAJYmNzLT5hdF9zdGF0ZS50aW1lcl9leHBpcmVzID0gMDsKLQliY3MtPmF0X3N0YXRlLmNpZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgIC8qIE5vIENJRCBkZWZpbmVkICovCisJYmNzLT5hdF9zdGF0ZS5jaWQgPSAtMTsJCQkvKiBObyBDSUQgZGVmaW5lZCAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKIAliY3MtPmlucHV0c3RhdGUgPSAwOwpAQCAtODAzLDExICs4NzIsMTQgQEAKIAogaW50IGdpZ2FzZXRfc3RhcnQoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCi0JCXJldHVybiAwOwotCS8vaW5mbygiVVNCIGRldmljZSBmb3IgR2lnYXNldCAzMDd4IG5vdyBhdHRhY2hlZCB0byBEZXYgJWQiLCB1Y3MtPm1pbm9yKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYXRvbWljX3NldCgmY3MtPmNvbm5lY3RlZCwgMSk7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwljcy0+Y29ubmVjdGVkID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpIHsKIAkJY3MtPm9wcy0+c2V0X21vZGVtX2N0cmwoY3MsIDAsIFRJT0NNX0RUUnxUSU9DTV9SVFMpOwpAQCAtODI2LDIzICs4OTgsMjYgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTVEFSVCIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTVEFSVCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwogCi0JdXAoJmNzLT5zZW0pOworCS8qIHNldCB1cCBkZXZpY2Ugc3lzZnMgKi8KKwlnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKGNzKTsKKworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gMTsKIAogZXJyb3I6Ci0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfc3RhcnQpOwogCiB2b2lkIGdpZ2FzZXRfc2h1dGRvd24oc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWNzLT53YWl0aW5nID0gMTsKIApAQCAtODUxLDExICs5MjYsMTEgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNIVVRET1dOIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNIVVRET1dOIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZykpIHsKLQkJd2FybigiYWJvcnRlZCIpOworCQl3YXJuKCIlczogYWJvcnRlZCIsIF9fZnVuY19fKTsKIAkJLy9GSVhNRQogCX0KIApAQCAtODcyLDE1ICs5NDcsMTMgQEAKIAljbGVhbnVwX2NzKGNzKTsKIAogZXhpdDoKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9zaHV0ZG93bik7CiAKIHZvaWQgZ2lnYXNldF9zdG9wKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWRvd24oJmNzLT5zZW0pOwotCi0JYXRvbWljX3NldCgmY3MtPmNvbm5lY3RlZCwgMCk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWNzLT53YWl0aW5nID0gMTsKIApAQCAtODg5LDIxICs5NjIsMjEgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNUT1AiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU1RPUCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpKSB7Ci0JCXdhcm4oImFib3J0ZWQiKTsKKwkJd2FybigiJXM6IGFib3J0ZWQiLCBfX2Z1bmNfXyk7CiAJCS8vRklYTUUKIAl9CiAKLQkvKiBUZWxsIHRoZSBMTCB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSAuLiAqLwotCWdpZ2FzZXRfaTRsX2NtZChjcywgSVNETl9TVEFUX1NUT1ApOyAvLyBGSVhNRSBtb3ZlIHRvIGV2ZW50IGxheWVyPworCS8qIGNsZWFyIGRldmljZSBzeXNmcyAqLworCWdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoY3MpOwogCiAJY2xlYW51cF9jcyhjcyk7CiAKIGV4aXQ6Ci0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfc3RvcCk7CiAKQEAgLTk0NywzMSArMTAyMCwyNSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZkcml2ZXJzLCBsaXN0KSB7Ci0JCWRiZyhERUJVR19EUklWRVIsICJkcml2ZXIgJXAiLCBkcnYpOworCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgImRyaXZlciAlcCIsIGRydik7CiAJCXNwaW5fbG9jaygmZHJ2LT5sb2NrKTsKIAkJZm9yIChpID0gMDsgaSA8IGRydi0+bWlub3JzOyArK2kpIHsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgIGluZGV4ICV1IiwgaSk7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICAgIGZsYWdzIDB4JTAyeCIsIGRydi0+ZmxhZ3NbaV0pOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgIGluZGV4ICV1IiwgaSk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBmbGFncyAweCUwMngiLAorCQkJCWRydi0+ZmxhZ3NbaV0pOwogCQkJY3MgPSBkcnYtPmNzICsgaTsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgICAgY2FyZHN0YXRlICVwIiwgY3MpOwotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgICBtaW5vcl9pbmRleCAldSIsIGNzLT5taW5vcl9pbmRleCk7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICAgIGRyaXZlciAlcCIsIGNzLT5kcml2ZXIpOwotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgICBpNGwgaWQgJWQiLCBjcy0+bXlpZCk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBjYXJkc3RhdGUgJXAiLCBjcyk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBtaW5vcl9pbmRleCAldSIsCisJCQkJY3MtPm1pbm9yX2luZGV4KTsKKwkJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiICAgIGRyaXZlciAlcCIsIGNzLT5kcml2ZXIpOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgICAgaTRsIGlkICVkIiwgY3MtPm15aWQpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZkcnYtPmxvY2spOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9kZWJ1Z2RyaXZlcnMpOwogCi1zdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlpZiAodHR5LT5pbmRleCA8IDAgfHwgdHR5LT5pbmRleCA+PSB0dHktPmRyaXZlci0+bnVtKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZ2lnYXNldF9nZXRfY3NfYnlfbWlub3IodHR5LT5pbmRleCArIHR0eS0+ZHJpdmVyLT5taW5vcl9zdGFydCk7Ci19Ci0KLXN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHVuc2lnbmVkIG1pbm9yKQorc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHVuc2lnbmVkIG1pbm9yKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKnJldCA9IE5VTEw7CkBAIC05OTQsNiArMTA2MSwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWlmICh0dHktPmluZGV4IDwgMCB8fCB0dHktPmluZGV4ID49IHR0eS0+ZHJpdmVyLT5udW0pCisJCXJldHVybiBOVUxMOworCXJldHVybiBnaWdhc2V0X2dldF9jc19ieV9taW5vcih0dHktPmluZGV4ICsgdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0KTsKK30KKwogdm9pZCBnaWdhc2V0X2ZyZWVkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwMTQsMjAgKzEwODgsMjAgQEAKIC8qIGdpZ2FzZXRfaW5pdGRyaXZlcgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZ2lnYXNldF9kcml2ZXIgc3RydWN0dXJlLiBJbml0aWFsaXplIGludGVyZmFjZS4KICAqIHBhcmFtZXRlcnM6Ci0gKiAgICAgIG1pbm9yICAgICAgICAgICBGaXJzdCBtaW5vciBudW1iZXIKLSAqICAgICAgbWlub3JzICAgICAgICAgIE51bWJlciBvZiBtaW5vcnMgdGhpcyBkcml2ZXIgY2FuIGhhbmRsZQotICogICAgICBwcm9jbmFtZSAgICAgICAgTmFtZSBvZiB0aGUgZHJpdmVyIChlLmcuIGZvciAvcHJvYy90dHkvZHJpdmVycywgcGF0aCBpbiAvcHJvYy9kcml2ZXIpCi0gKiAgICAgIGRldm5hbWUgICAgICAgICBOYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgKHByZWZpeCB3aXRob3V0IG1pbm9yIG51bWJlcikKLSAqICAgICAgZGV2ZnNuYW1lICAgICAgIERldmZzIG5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyB3aXRob3V0ICVkCisgKgltaW5vcgkJRmlyc3QgbWlub3IgbnVtYmVyCisgKgltaW5vcnMJCU51bWJlciBvZiBtaW5vcnMgdGhpcyBkcml2ZXIgY2FuIGhhbmRsZQorICoJcHJvY25hbWUJTmFtZSBvZiB0aGUgZHJpdmVyCisgKglkZXZuYW1lCQlOYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgKHByZWZpeCB3aXRob3V0IG1pbm9yIG51bWJlcikKKyAqCWRldmZzbmFtZQlEZXZmcyBuYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgd2l0aG91dCAlZAogICogcmV0dXJuIHZhbHVlOgotICogICAgICBQb2ludGVyIHRvIHRoZSBnaWdhc2V0X2RyaXZlciBzdHJ1Y3R1cmUgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICoJUG9pbnRlciB0byB0aGUgZ2lnYXNldF9kcml2ZXIgc3RydWN0dXJlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpnaWdhc2V0X2luaXRkcml2ZXIodW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIG1pbm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmZzbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpCisJCQkJCSAgY29uc3QgY2hhciAqcHJvY25hbWUsCisJCQkJCSAgY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCQkJICBjb25zdCBjaGFyICpkZXZmc25hbWUsCisJCQkJCSAgY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHMsCisJCQkJCSAgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7CiAJc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwMzYsOCArMTExMCw5IEBACiAJZHJ2ID0ga21hbGxvYyhzaXplb2YgKmRydiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnYpCiAJCXJldHVybiBOVUxMOworCiAJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dDE7CiAKIAlkcnYtPmNzID0gTlVMTDsKIAlkcnYtPmhhdmVfdHR5ID0gMDsKQEAgLTEwNTEsMTAgKzExMjYsMTEgQEAKIAogCWRydi0+Y3MgPSBrbWFsbG9jKG1pbm9ycyAqIHNpemVvZiAqZHJ2LT5jcywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnYtPmNzKQotCQlnb3RvIG91dDE7CisJCWdvdG8gb3V0MjsKKwogCWRydi0+ZmxhZ3MgPSBrbWFsbG9jKG1pbm9ycyAqIHNpemVvZiAqZHJ2LT5mbGFncywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnYtPmZsYWdzKQotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0MzsKIAogCWZvciAoaSA9IDA7IGkgPCBtaW5vcnM7ICsraSkgewogCQlkcnYtPmZsYWdzW2ldID0gMDsKQEAgLTEwNzEsNjEgKzExNDcsMTYgQEAKIAogCXJldHVybiBkcnY7CiAKLW91dDI6CitvdXQzOgogCWtmcmVlKGRydi0+Y3MpOworb3V0MjoKKwltb2R1bGVfcHV0KG93bmVyKTsKIG91dDE6CiAJa2ZyZWUoZHJ2KTsKLQltb2R1bGVfcHV0KG93bmVyKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaW5pdGRyaXZlcik7CiAKLXN0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICphbGxvY19jcyhzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGk7Ci0Jc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKnJldCA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IGRydi0+bWlub3JzOyArK2kpIHsKLQkJaWYgKCEoZHJ2LT5mbGFnc1tpXSAmIFZBTElEX01JTk9SKSkgewotCQkJZHJ2LT5mbGFnc1tpXSA9IFZBTElEX01JTk9SOwotCQkJcmV0ID0gZHJ2LT5jcyArIGk7Ci0JCX0KLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2NzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYgPSBjcy0+ZHJpdmVyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlkcnYtPmZsYWdzW2NzLT5taW5vcl9pbmRleF0gPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlX3ZhbGlkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYgPSBjcy0+ZHJpdmVyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlkcnYtPmZsYWdzW2NzLT5taW5vcl9pbmRleF0gfD0gbWFzazsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgbWFrZV9pbnZhbGlkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYgPSBjcy0+ZHJpdmVyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlkcnYtPmZsYWdzW2NzLT5taW5vcl9pbmRleF0gJj0gfm1hc2s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIEZvciBkcml2ZXJzIHdpdGhvdXQgZml4ZWQgYXNzaWdubWVudCBkZXZpY2U8LT5jYXJkc3RhdGUgKHVzYikgKi8KIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0dW5hc3NpZ25lZGNzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKaW5kZXggZmRjYjgwYi4uMWJhMzQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFN0dWZmIHVzZWQgYnkgYWxsIHZhcmlhbnRzIG9mIHRoZSBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4sCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycywKICAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPi4KICAqCkBAIC0xMSw4MiArMTEsNzggQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogZXYtbGF5ZXIuYyx2IDEuNC4yLjE4IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBiaXQgbWFza3MgZm9yIHBlbmRpbmcgY29tbWFuZHMgKi8KLSNkZWZpbmUgUENfSU5JVCAgICAgICAweDAwNAotI2RlZmluZSBQQ19ETEUwICAgICAgIDB4MDA4Ci0jZGVmaW5lIFBDX0RMRTEgICAgICAgMHgwMTAKLSNkZWZpbmUgUENfQ0lEICAgICAgICAweDA4MAotI2RlZmluZSBQQ19OT0NJRCAgICAgIDB4MTAwCi0jZGVmaW5lIFBDX0hVUCAgICAgICAgMHgwMDIKLSNkZWZpbmUgUENfRElBTCAgICAgICAweDAwMQotI2RlZmluZSBQQ19BQ0NFUFQgICAgIDB4MDQwCi0jZGVmaW5lIFBDX1NIVVRET1dOICAgMHgwMjAKLSNkZWZpbmUgUENfQ0lETU9ERSAgICAweDIwMAotI2RlZmluZSBQQ19VTU1PREUgICAgIDB4NDAwCisjZGVmaW5lIFBDX0RJQUwJCTB4MDAxCisjZGVmaW5lIFBDX0hVUAkJMHgwMDIKKyNkZWZpbmUgUENfSU5JVAkJMHgwMDQKKyNkZWZpbmUgUENfRExFMAkJMHgwMDgKKyNkZWZpbmUgUENfRExFMQkJMHgwMTAKKyNkZWZpbmUgUENfU0hVVERPV04JMHgwMjAKKyNkZWZpbmUgUENfQUNDRVBUCTB4MDQwCisjZGVmaW5lIFBDX0NJRAkJMHgwODAKKyNkZWZpbmUgUENfTk9DSUQJMHgxMDAKKyNkZWZpbmUgUENfQ0lETU9ERQkweDIwMAorI2RlZmluZSBQQ19VTU1PREUJMHg0MDAKIAogLyogdHlwZXMgb2YgbW9kZW0gcmVzcG9uc2VzICovCi0jZGVmaW5lIFJUX05PVEhJTkcgMAotI2RlZmluZSBSVF9aU0FVICAgIDEKLSNkZWZpbmUgUlRfUklORyAgICAyCi0jZGVmaW5lIFJUX05VTUJFUiAgMwotI2RlZmluZSBSVF9TVFJJTkcgIDQKLSNkZWZpbmUgUlRfSEVYICAgICA1Ci0jZGVmaW5lIFJUX1pDQVUgICAgNgorI2RlZmluZSBSVF9OT1RISU5HCTAKKyNkZWZpbmUgUlRfWlNBVQkJMQorI2RlZmluZSBSVF9SSU5HCQkyCisjZGVmaW5lIFJUX05VTUJFUgkzCisjZGVmaW5lIFJUX1NUUklORwk0CisjZGVmaW5lIFJUX0hFWAkJNQorI2RlZmluZSBSVF9aQ0FVCQk2CiAKIC8qIFBvc3NpYmxlIEFTQ0lJIHJlc3BvbnNlcyAqLwotI2RlZmluZSBSU1BfT0sgICAgICAgICAgIDAKLS8vI2RlZmluZSBSU1BfQlVTWSAgICAgICAxCi0vLyNkZWZpbmUgUlNQX0NPTk5FQ1QgICAgMgotI2RlZmluZSBSU1BfWkdDSSAgICAgICAgIDMKLSNkZWZpbmUgUlNQX1JJTkcgICAgICAgICA0Ci0jZGVmaW5lIFJTUF9aQU9DICAgICAgICAgNQotI2RlZmluZSBSU1BfWkNTVFIgICAgICAgIDYKLSNkZWZpbmUgUlNQX1pDRkdUICAgICAgICA3Ci0jZGVmaW5lIFJTUF9aQ0ZHICAgICAgICAgOAotI2RlZmluZSBSU1BfWkNDUiAgICAgICAgIDkKLSNkZWZpbmUgUlNQX0VNUFRZICAgICAgICAxMAotI2RlZmluZSBSU1BfWkxPRyAgICAgICAgIDExCi0jZGVmaW5lIFJTUF9aQ0FVICAgICAgICAgMTIKLSNkZWZpbmUgUlNQX1pNV0kgICAgICAgICAxMwotI2RlZmluZSBSU1BfWkFCSU5GTyAgICAgIDE0Ci0jZGVmaW5lIFJTUF9aU01MU1RDSEcgICAgMTUKLSNkZWZpbmUgUlNQX1ZBUiAgICAgICAgICAxMDAKLSNkZWZpbmUgUlNQX1pTQVUgICAgICAgICAoUlNQX1ZBUiArIFZBUl9aU0FVKQotI2RlZmluZSBSU1BfWkRMRSAgICAgICAgIChSU1BfVkFSICsgVkFSX1pETEUpCi0jZGVmaW5lIFJTUF9aVkxTICAgICAgICAgKFJTUF9WQVIgKyBWQVJfWlZMUykKLSNkZWZpbmUgUlNQX1pDVFAgICAgICAgICAoUlNQX1ZBUiArIFZBUl9aQ1RQKQotI2RlZmluZSBSU1BfU1RSICAgICAgICAgIChSU1BfVkFSICsgVkFSX05VTSkKLSNkZWZpbmUgUlNQX05NQlIgICAgICAgICAoUlNQX1NUUiArIFNUUl9OTUJSKQotI2RlZmluZSBSU1BfWkNQTiAgICAgICAgIChSU1BfU1RSICsgU1RSX1pDUE4pCi0jZGVmaW5lIFJTUF9aQ09OICAgICAgICAgKFJTUF9TVFIgKyBTVFJfWkNPTikKLSNkZWZpbmUgUlNQX1pCQyAgICAgICAgICAoUlNQX1NUUiArIFNUUl9aQkMpCi0jZGVmaW5lIFJTUF9aSExDICAgICAgICAgKFJTUF9TVFIgKyBTVFJfWkhMQykKLSNkZWZpbmUgUlNQX0VSUk9SICAgICAgIC0xICAgICAgIC8qIEVSUk9SICAgICAgICAgICAgICAqLwotI2RlZmluZSBSU1BfV1JPTkdfQ0lEICAgLTIgICAgICAgLyogdW5rbm93biBjaWQgaW4gY21kICovCi0vLyNkZWZpbmUgUlNQX0VNUFRZICAgICAtMwotI2RlZmluZSBSU1BfVU5LTk9XTiAgICAgLTQgICAgICAgLyogdW5rbm93biByZXNwb25zZSAgICovCi0jZGVmaW5lIFJTUF9GQUlMICAgICAgICAtNSAgICAgICAvKiBpbnRlcm5hbCBlcnJvciAgICAgKi8KLSNkZWZpbmUgUlNQX0lOVkFMICAgICAgIC02ICAgICAgIC8qIGludmFsaWQgcmVzcG9uc2UgICAqLworI2RlZmluZSBSU1BfT0sJCTAKKy8vI2RlZmluZSBSU1BfQlVTWQkxCisvLyNkZWZpbmUgUlNQX0NPTk5FQ1QJMgorI2RlZmluZSBSU1BfWkdDSQkzCisjZGVmaW5lIFJTUF9SSU5HCTQKKyNkZWZpbmUgUlNQX1pBT0MJNQorI2RlZmluZSBSU1BfWkNTVFIJNgorI2RlZmluZSBSU1BfWkNGR1QJNworI2RlZmluZSBSU1BfWkNGRwk4CisjZGVmaW5lIFJTUF9aQ0NSCTkKKyNkZWZpbmUgUlNQX0VNUFRZCTEwCisjZGVmaW5lIFJTUF9aTE9HCTExCisjZGVmaW5lIFJTUF9aQ0FVCTEyCisjZGVmaW5lIFJTUF9aTVdJCTEzCisjZGVmaW5lIFJTUF9aQUJJTkZPCTE0CisjZGVmaW5lIFJTUF9aU01MU1RDSEcJMTUKKyNkZWZpbmUgUlNQX1ZBUgkJMTAwCisjZGVmaW5lIFJTUF9aU0FVCShSU1BfVkFSICsgVkFSX1pTQVUpCisjZGVmaW5lIFJTUF9aRExFCShSU1BfVkFSICsgVkFSX1pETEUpCisjZGVmaW5lIFJTUF9aVkxTCShSU1BfVkFSICsgVkFSX1pWTFMpCisjZGVmaW5lIFJTUF9aQ1RQCShSU1BfVkFSICsgVkFSX1pDVFApCisjZGVmaW5lIFJTUF9TVFIJCShSU1BfVkFSICsgVkFSX05VTSkKKyNkZWZpbmUgUlNQX05NQlIJKFJTUF9TVFIgKyBTVFJfTk1CUikKKyNkZWZpbmUgUlNQX1pDUE4JKFJTUF9TVFIgKyBTVFJfWkNQTikKKyNkZWZpbmUgUlNQX1pDT04JKFJTUF9TVFIgKyBTVFJfWkNPTikKKyNkZWZpbmUgUlNQX1pCQwkJKFJTUF9TVFIgKyBTVFJfWkJDKQorI2RlZmluZSBSU1BfWkhMQwkoUlNQX1NUUiArIFNUUl9aSExDKQorI2RlZmluZSBSU1BfRVJST1IJLTEJLyogRVJST1IgICAgICAgICAgICAgICovCisjZGVmaW5lIFJTUF9XUk9OR19DSUQJLTIJLyogdW5rbm93biBjaWQgaW4gY21kICovCisvLyNkZWZpbmUgUlNQX0VNUFRZCS0zCisjZGVmaW5lIFJTUF9VTktOT1dOCS00CS8qIHVua25vd24gcmVzcG9uc2UgICAqLworI2RlZmluZSBSU1BfRkFJTAktNQkvKiBpbnRlcm5hbCBlcnJvciAgICAgKi8KKyNkZWZpbmUgUlNQX0lOVkFMCS02CS8qIGludmFsaWQgcmVzcG9uc2UgICAqLwogCi0jZGVmaW5lIFJTUF9OT05FICAgICAgICAtMTkKLSNkZWZpbmUgUlNQX1NUUklORyAgICAgIC0yMAotI2RlZmluZSBSU1BfTlVMTCAgICAgICAgLTIxCi0vLyNkZWZpbmUgUlNQX1JFVFJZRkFJTCAtMjIKLS8vI2RlZmluZSBSU1BfUkVUUlkgICAgIC0yMwotLy8jZGVmaW5lIFJTUF9TS0lQICAgICAgLTI0Ci0jZGVmaW5lIFJTUF9JTklUICAgICAgICAtMjcKLSNkZWZpbmUgUlNQX0FOWSAgICAgICAgIC0yNgotI2RlZmluZSBSU1BfTEFTVCAgICAgICAgLTI4Ci0jZGVmaW5lIFJTUF9OT0RFViAgICAgICAtOQorI2RlZmluZSBSU1BfTk9ORQktMTkKKyNkZWZpbmUgUlNQX1NUUklORwktMjAKKyNkZWZpbmUgUlNQX05VTEwJLTIxCisvLyNkZWZpbmUgUlNQX1JFVFJZRkFJTAktMjIKKy8vI2RlZmluZSBSU1BfUkVUUlkJLTIzCisvLyNkZWZpbmUgUlNQX1NLSVAJLTI0CisjZGVmaW5lIFJTUF9JTklUCS0yNworI2RlZmluZSBSU1BfQU5ZCQktMjYKKyNkZWZpbmUgUlNQX0xBU1QJLTI4CisjZGVmaW5lIFJTUF9OT0RFVgktOQogCiAvKiBhY3Rpb25zIGZvciBwcm9jZXNzX3Jlc3BvbnNlICovCiAjZGVmaW5lIEFDVF9OT1RISU5HCQkwCkBAIC0xMTIsNyArMTA4LDcgQEAKICNkZWZpbmUgQUNUX0RJU0NPTk5FQ1QJCTIwCiAjZGVmaW5lIEFDVF9DT05ORUNUCQkyMQogI2RlZmluZSBBQ1RfUkVNT1RFUkVKRUNUCTIyCi0jZGVmaW5lIEFDVF9DT05OVElNRU9VVCAgICAgICAgIDIzCisjZGVmaW5lIEFDVF9DT05OVElNRU9VVAkJMjMKICNkZWZpbmUgQUNUX1JFTU9URUhVUAkJMjQKICNkZWZpbmUgQUNUX0FCT1JUSFVQCQkyNQogI2RlZmluZSBBQ1RfSUNBTEwJCTI2CkBAIC0xMjcsNDAgKzEyMyw0MCBAQAogI2RlZmluZSBBQ1RfRVJST1IJCTM1CiAjZGVmaW5lIEFDVF9BQk9SVENJRAkJMzYKICNkZWZpbmUgQUNUX1pDQVUJCTM3Ci0jZGVmaW5lIEFDVF9OT1RJRllfQkNfRE9XTiAgICAgIDM4Ci0jZGVmaW5lIEFDVF9OT1RJRllfQkNfVVAgICAgICAgIDM5Ci0jZGVmaW5lIEFDVF9ESUFMICAgICAgICAgICAgICAgIDQwCi0jZGVmaW5lIEFDVF9BQ0NFUFQgICAgICAgICAgICAgIDQxCi0jZGVmaW5lIEFDVF9QUk9UT19MMiAgICAgICAgICAgIDQyCi0jZGVmaW5lIEFDVF9IVVAgICAgICAgICAgICAgICAgIDQzCi0jZGVmaW5lIEFDVF9JRl9MT0NLICAgICAgICAgICAgIDQ0Ci0jZGVmaW5lIEFDVF9TVEFSVCAgICAgICAgICAgICAgIDQ1Ci0jZGVmaW5lIEFDVF9TVE9QICAgICAgICAgICAgICAgIDQ2Ci0jZGVmaW5lIEFDVF9GQUtFRExFMCAgICAgICAgICAgIDQ3Ci0jZGVmaW5lIEFDVF9GQUtFSFVQICAgICAgICAgICAgIDQ4Ci0jZGVmaW5lIEFDVF9GQUtFU0RPV04gICAgICAgICAgIDQ5Ci0jZGVmaW5lIEFDVF9TSFVURE9XTiAgICAgICAgICAgIDUwCi0jZGVmaW5lIEFDVF9QUk9DX0NJRE1PREUgICAgICAgIDUxCi0jZGVmaW5lIEFDVF9VTU9ERVNFVCAgICAgICAgICAgIDUyCi0jZGVmaW5lIEFDVF9GQUlMVU1PREUgICAgICAgICAgIDUzCi0jZGVmaW5lIEFDVF9DTU9ERVNFVCAgICAgICAgICAgIDU0Ci0jZGVmaW5lIEFDVF9GQUlMQ01PREUgICAgICAgICAgIDU1Ci0jZGVmaW5lIEFDVF9JRl9WRVIgICAgICAgICAgICAgIDU2CisjZGVmaW5lIEFDVF9OT1RJRllfQkNfRE9XTgkzOAorI2RlZmluZSBBQ1RfTk9USUZZX0JDX1VQCTM5CisjZGVmaW5lIEFDVF9ESUFMCQk0MAorI2RlZmluZSBBQ1RfQUNDRVBUCQk0MQorI2RlZmluZSBBQ1RfUFJPVE9fTDIJCTQyCisjZGVmaW5lIEFDVF9IVVAJCQk0MworI2RlZmluZSBBQ1RfSUZfTE9DSwkJNDQKKyNkZWZpbmUgQUNUX1NUQVJUCQk0NQorI2RlZmluZSBBQ1RfU1RPUAkJNDYKKyNkZWZpbmUgQUNUX0ZBS0VETEUwCQk0NworI2RlZmluZSBBQ1RfRkFLRUhVUAkJNDgKKyNkZWZpbmUgQUNUX0ZBS0VTRE9XTgkJNDkKKyNkZWZpbmUgQUNUX1NIVVRET1dOCQk1MAorI2RlZmluZSBBQ1RfUFJPQ19DSURNT0RFCTUxCisjZGVmaW5lIEFDVF9VTU9ERVNFVAkJNTIKKyNkZWZpbmUgQUNUX0ZBSUxVTU9ERQkJNTMKKyNkZWZpbmUgQUNUX0NNT0RFU0VUCQk1NAorI2RlZmluZSBBQ1RfRkFJTENNT0RFCQk1NQorI2RlZmluZSBBQ1RfSUZfVkVSCQk1NgogI2RlZmluZSBBQ1RfQ01ECQkJMTAwCiAKIC8qIGF0IGNvbW1hbmQgc2VxdWVuY2VzICovCi0jZGVmaW5lIFNFUV9OT05FICAgICAgMAotI2RlZmluZSBTRVFfSU5JVCAgICAgIDEwMAotI2RlZmluZSBTRVFfRExFMCAgICAgIDIwMAotI2RlZmluZSBTRVFfRExFMSAgICAgIDI1MAotI2RlZmluZSBTRVFfQ0lEICAgICAgIDMwMAotI2RlZmluZSBTRVFfTk9DSUQgICAgIDM1MAotI2RlZmluZSBTRVFfSFVQICAgICAgIDQwMAotI2RlZmluZSBTRVFfRElBTCAgICAgIDYwMAotI2RlZmluZSBTRVFfQUNDRVBUICAgIDcyMAotI2RlZmluZSBTRVFfU0hVVERPV04gIDUwMAotI2RlZmluZSBTRVFfQ0lETU9ERSAgIDEwCi0jZGVmaW5lIFNFUV9VTU1PREUgICAgMTEKKyNkZWZpbmUgU0VRX05PTkUJMAorI2RlZmluZSBTRVFfSU5JVAkxMDAKKyNkZWZpbmUgU0VRX0RMRTAJMjAwCisjZGVmaW5lIFNFUV9ETEUxCTI1MAorI2RlZmluZSBTRVFfQ0lECQkzMDAKKyNkZWZpbmUgU0VRX05PQ0lECTM1MAorI2RlZmluZSBTRVFfSFVQCQk0MDAKKyNkZWZpbmUgU0VRX0RJQUwJNjAwCisjZGVmaW5lIFNFUV9BQ0NFUFQJNzIwCisjZGVmaW5lIFNFUV9TSFVURE9XTgk1MDAKKyNkZWZpbmUgU0VRX0NJRE1PREUJMTAKKyNkZWZpbmUgU0VRX1VNTU9ERQkxMQogCiAKIC8vIDEwMDogaW5pdCwgMjAwOiBkbGUwLCAyNTA6ZGxlMSwgMzAwOiBnZXQgY2lkIChkaWFsKSwgMzUwOiAiaHVwIiAobm8gY2lkKSwgNDAwOiBodXAsIDUwMDogcmVzZXQsIDYwMDogZGlhbCwgNzAwOiByaW5nCkBAIC0xNzUsNyArMTcxLDcgQEAKIAkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FDVF9USU1FT1VUfX0sCiAKIAl7UlNQX0lOSVQsICAgICAtMSwgLTEsU0VRX0lOSVQsICAgICAgICAgICAxMDAsIElOSVRfVElNRU9VVCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBQ1RfVElNRU9VVH19LCAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIGRldmljZSBpcyByZWFkeSAqLworCQkJCQkJCSAge0FDVF9USU1FT1VUfX0sICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCiAKIAl7RVZfVElNRU9VVCwgIDEwMCwxMDAsIC0xLCAgICAgICAgICAgICAgICAxMDEsIDMsIHswfSwgICAgICAgICAgICAgIlpcciJ9LCAgICAgICAvKiBkZXZpY2UgaW4gdHJhbnNwYXJlbnQgbW9kZT8gdHJ5IHRvIGluaXRpYWxpemUgaXQuICovCiAJe1JTUF9PSywgICAgICAxMDEsMTAzLCAtMSwgICAgICAgICAgICAgICAgMTIwLCA1LCB7QUNUX0dFVFNUUklOR30sICIrR01SXHIifSwgICAgLyogZ2V0IHZlcnNpb24gKi8KQEAgLTE5MCw4ICsxODYsOCBAQAogCXtSU1BfRVJST1IsICAgMTA4LDEwOCwgLTEsICAgICAgICAgICAgICAgICAgMCwgMCwge0FDVF9GQUlMSU5JVH19LAogCiAJe0VWX1RJTUVPVVQsICAxMDgsMTA4LCAtMSwgICAgICAgICAgICAgICAgMTA1LCAyLCB7QUNUX1NFVERMRTAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNUX0hVUE1PREVNLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVF9USU1FT1VUfX0sICAgICAgICAgICAgICAgIC8qIHN0aWxsIHRpbWVvdXQgPT4gY29ubmVjdGlvbiBpbiB1bmltb2RlbSBtb2RlPyAqLworCQkJCQkJCSAgIEFDVF9IVVBNT0RFTSwKKwkJCQkJCQkgICBBQ1RfVElNRU9VVH19LCAgICAgICAgICAgICAgICAvKiBzdGlsbCB0aW1lb3V0ID0+IGNvbm5lY3Rpb24gaW4gdW5pbW9kZW0gbW9kZT8gKi8KIAl7RVZfVElNRU9VVCwgIDEwNSwxMDUsIC0xLCAgICAgICAgICAgICAgICAxMDMsIDUsIHswfSwgICAgICAgICAgICAgIlpcciJ9LAogCiAJe1JTUF9FUlJPUiwgICAxMDIsMTAyLCAtMSwgICAgICAgICAgICAgICAgMTA3LCA1LCB7MH0sICAgICAgICAgICAgICJeR0VUUFJFXHIifSwgLyogRVJST1Igb24gQVRaID0+IG1heWJlIGluIGNvbmZpZyBtb2RlPyAqLwpAQCAtMzkzLDcgKzM4OSw3IEBACiAKIAogI2lmIDAKLXN0YXRpYyBzdHJ1Y3QgcmVwbHlfdCB0YWJfbm9jaWRbXT0gLyogbm8gZGxlIG1vZGUgKi8gLy9GSVhNRSBhZW5kZXJ1bmdlbiB1ZWJlcm5laG1lbgorc3RhdGljIHN0cnVjdCByZXBseV90IHRhYl9ub2NpZFtdPSAvKiBubyBkbGUgbW9kZSAqLyAvL0ZJWE1FCiB7CiAJLyogcmVzcF9jb2RlLCBtaW5fQ29uU3RhdGUsIG1heF9Db25TdGF0ZSwgcGFyYW1ldGVyLCBuZXdfQ29uU3RhdGUsIHRpbWVvdXQsIGFjdGlvbiwgY29tbWFuZCAqLwogCkBAIC00MDEsNyArMzk3LDcgQEAKIAl7UlNQX0xBU1QsMCwwLDAsMCwwLDB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHJlcGx5X3QgdGFiX2NpZFtdID0gLyogbm8gZGxlIG1vZGUgKi8gLy9GSVhNRSBhZW5kZXJ1bmdlbiB1ZWJlcm5laG1lbgorc3RhdGljIHN0cnVjdCByZXBseV90IHRhYl9jaWRbXSA9IC8qIG5vIGRsZSBtb2RlICovIC8vRklYTUUKIHsKIAkvKiByZXNwX2NvZGUsIG1pbl9Db25TdGF0ZSwgbWF4X0NvblN0YXRlLCBwYXJhbWV0ZXIsIG5ld19Db25TdGF0ZSwgdGltZW91dCwgYWN0aW9uLCBjb21tYW5kICovCiAKQEAgLTQxMiwzMCArNDA4LDMwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzcF90eXBlX3QgcmVzcF90eXBlW109CiB7Ci0JLyp7IiIsICAgICAgICAgIFJTUF9FTVBUWSwgIFJUX05PVEhJTkd9LCovCi0JeyJPSyIsICAgICAgICBSU1BfT0ssICAgICBSVF9OT1RISU5HfSwKLQl7IkVSUk9SIiwgICAgIFJTUF9FUlJPUiwgIFJUX05PVEhJTkd9LAotCXsiWlNBVSIsICAgICAgUlNQX1pTQVUsICAgUlRfWlNBVX0sCi0JeyJaQ0FVIiwgICAgICBSU1BfWkNBVSwgICBSVF9aQ0FVfSwKLQl7IlJJTkciLCAgICAgIFJTUF9SSU5HLCAgIFJUX1JJTkd9LAotCXsiWkdDSSIsICAgICAgUlNQX1pHQ0ksICAgUlRfTlVNQkVSfSwKLQl7IlpWTFMiLCAgICAgIFJTUF9aVkxTLCAgIFJUX05VTUJFUn0sCi0JeyJaQ1RQIiwgICAgICBSU1BfWkNUUCwgICBSVF9OVU1CRVJ9LAotCXsiWkRMRSIsICAgICAgUlNQX1pETEUsICAgUlRfTlVNQkVSfSwKLQl7IlpDRkdUIiwgICAgIFJTUF9aQ0ZHVCwgIFJUX05VTUJFUn0sCi0JeyJaQ0NSIiwgICAgICBSU1BfWkNDUiwgICBSVF9OVU1CRVJ9LAotCXsiWk1XSSIsICAgICAgUlNQX1pNV0ksICAgUlRfTlVNQkVSfSwKLQl7IlpITEMiLCAgICAgIFJTUF9aSExDLCAgIFJUX1NUUklOR30sCi0JeyJaQkMiLCAgICAgICBSU1BfWkJDLCAgICBSVF9TVFJJTkd9LAotCXsiTk1CUiIsICAgICAgUlNQX05NQlIsICAgUlRfU1RSSU5HfSwKLQl7IlpDUE4iLCAgICAgIFJTUF9aQ1BOLCAgIFJUX1NUUklOR30sCi0JeyJaQ09OIiwgICAgICBSU1BfWkNPTiwgICBSVF9TVFJJTkd9LAotCXsiWkFPQyIsICAgICAgUlNQX1pBT0MsICAgUlRfU1RSSU5HfSwKLQl7IlpDU1RSIiwgICAgIFJTUF9aQ1NUUiwgIFJUX1NUUklOR30sCi0JeyJaQ0ZHIiwgICAgICBSU1BfWkNGRywgICBSVF9IRVh9LAotCXsiWkxPRyIsICAgICAgUlNQX1pMT0csICAgUlRfTk9USElOR30sCi0JeyJaQUJJTkZPIiwgICBSU1BfWkFCSU5GTywgUlRfTk9USElOR30sCi0JeyJaU01MU1RDSEciLCBSU1BfWlNNTFNUQ0hHLCBSVF9OT1RISU5HfSwKKwkvKnsiIiwJCVJTUF9FTVBUWSwJUlRfTk9USElOR30sKi8KKwl7Ik9LIiwJCVJTUF9PSywJCVJUX05PVEhJTkd9LAorCXsiRVJST1IiLAlSU1BfRVJST1IsCVJUX05PVEhJTkd9LAorCXsiWlNBVSIsCVJTUF9aU0FVLAlSVF9aU0FVfSwKKwl7IlpDQVUiLAlSU1BfWkNBVSwJUlRfWkNBVX0sCisJeyJSSU5HIiwJUlNQX1JJTkcsCVJUX1JJTkd9LAorCXsiWkdDSSIsCVJTUF9aR0NJLAlSVF9OVU1CRVJ9LAorCXsiWlZMUyIsCVJTUF9aVkxTLAlSVF9OVU1CRVJ9LAorCXsiWkNUUCIsCVJTUF9aQ1RQLAlSVF9OVU1CRVJ9LAorCXsiWkRMRSIsCVJTUF9aRExFLAlSVF9OVU1CRVJ9LAorCXsiWkNGR1QiLAlSU1BfWkNGR1QsCVJUX05VTUJFUn0sCisJeyJaQ0NSIiwJUlNQX1pDQ1IsCVJUX05VTUJFUn0sCisJeyJaTVdJIiwJUlNQX1pNV0ksCVJUX05VTUJFUn0sCisJeyJaSExDIiwJUlNQX1pITEMsCVJUX1NUUklOR30sCisJeyJaQkMiLAkJUlNQX1pCQywJUlRfU1RSSU5HfSwKKwl7Ik5NQlIiLAlSU1BfTk1CUiwJUlRfU1RSSU5HfSwKKwl7IlpDUE4iLAlSU1BfWkNQTiwJUlRfU1RSSU5HfSwKKwl7IlpDT04iLAlSU1BfWkNPTiwJUlRfU1RSSU5HfSwKKwl7IlpBT0MiLAlSU1BfWkFPQywJUlRfU1RSSU5HfSwKKwl7IlpDU1RSIiwJUlNQX1pDU1RSLAlSVF9TVFJJTkd9LAorCXsiWkNGRyIsCVJTUF9aQ0ZHLAlSVF9IRVh9LAorCXsiWkxPRyIsCVJTUF9aTE9HLAlSVF9OT1RISU5HfSwKKwl7IlpBQklORk8iLAlSU1BfWkFCSU5GTywJUlRfTk9USElOR30sCisJeyJaU01MU1RDSEciLAlSU1BfWlNNTFNUQ0hHLAlSVF9OT1RISU5HfSwKIAl7TlVMTCwwLDB9CiB9OwogCkBAIC00NDYsOSArNDQyLDcgQEAKIHsKIAlpbnQgdiA9IC0xOwogCi0JSUZOVUxMUkVUVkFMKHAsIC0xKTsKLQotCWRiZyhERUJVR19UUkFOU0NNRCwgInN0cmluZzogJXMiLCBwKTsKKwlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAic3RyaW5nOiAlcyIsIHApOwogCiAJd2hpbGUgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpCiAJCXYgPSAoKHYgPCAwKSA/IDAgOiAodiAqIDEwKSkgKyAoaW50KSAoKCpwKyspIC0gJzAnKTsKQEAgLTQ2NSw5ICs0NTksNyBAQAogCWludCB2ID0gMDsKIAlpbnQgYzsKIAotCUlGTlVMTFJFVFZBTChwLCAtMSk7Ci0KLQlkYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CisJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInN0cmluZzogJXMiLCBwKTsKIAogCWlmICghKnApCiAJCXJldHVybiAtMTsKQEAgLTQ5MCwxNCArNDgyLDYgQEAKIAlyZXR1cm4gdjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5ld19pbmRleChhdG9taWNfdCAqaW5kZXgsIGludCBtYXgpCi17Ci0JaWYgKGF0b21pY19yZWFkKGluZGV4KSA9PSBtYXgpCS8vRklYTUUgcmFjZT8KLQkJYXRvbWljX3NldChpbmRleCwgMCk7Ci0JZWxzZQotCQlhdG9taWNfaW5jKGluZGV4KTsKLX0KLQogLyogcmV0cmlldmUgQ0lEIGZyb20gcGFyc2VkIHJlc3BvbnNlCiAgKiByZXR1cm5zIDAgaWYgbm8gQ0lELCAtMSBpZiBpbnZhbGlkIENJRCwgb3IgQ0lEIHZhbHVlIDEuLjY1NTM1CiAgKi8KQEAgLTUzNiwxNiArNTIwLDE0IEBACiAJaW50IGNpZDsKIAlpbnQgcmF3c3RyaW5nOwogCi0JSUZOVUxMUkVUKGNzKTsKLQogCWxlbiA9IGNzLT5jYnl0ZXM7CiAJaWYgKCFsZW4pIHsKIAkJLyogaWdub3JlIGFkZGl0aW9uYWwgTEZzL0NScyAoTTEweCBjb25maWcgbW9kZSBvciBjeDEwMCkgKi8KLQkJZGJnKERFQlVHX01DTUQsICJza2lwcGVkIEVPTCBbJTAyWF0iLCBjcy0+cmVzcGRhdGFbbGVuXSk7CisJCWdpZ19kYmcoREVCVUdfTUNNRCwgInNraXBwZWQgRU9MIFslMDJYXSIsIGNzLT5yZXNwZGF0YVtsZW5dKTsKIAkJcmV0dXJuOwogCX0KIAljcy0+cmVzcGRhdGFbbGVuXSA9IDA7Ci0JZGJnKERFQlVHX1RSQU5TQ01ELCAicmF3IHN0cmluZzogJyVzJyIsIGNzLT5yZXNwZGF0YSk7CisJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInJhdyBzdHJpbmc6ICclcyciLCBjcy0+cmVzcGRhdGEpOwogCWFyZ3ZbMF0gPSBjcy0+cmVzcGRhdGE7CiAJcGFyYW1zID0gMTsKIAlpZiAoY3MtPmF0X3N0YXRlLmdldHN0cmluZykgewpAQCAtNTYxLDcgKzU0Myw4IEBACiAJCQljYXNlICcsJzoKIAkJCWNhc2UgJz0nOgogCQkJCWlmIChwYXJhbXMgPiBNQVhfUkVDX1BBUkFNUykgewotCQkJCQl3YXJuKCJ0b28gbWFueSBwYXJhbWV0ZXJzIGluIHJlc3BvbnNlIik7CisJCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAgICJ0b28gbWFueSBwYXJhbWV0ZXJzIGluIHJlc3BvbnNlXG4iKTsKIAkJCQkJLyogbmVlZCBsYXN0IHBhcmFtZXRlciAobWlnaHQgYmUgQ0lEKSAqLwogCQkJCQlwYXJhbXMtLTsKIAkJCQl9CkBAIC01NzIsMzMgKzU1NSwzMyBAQAogCQljaWQgPSBwYXJhbXMgPiAxID8gY2lkX29mX3Jlc3BvbnNlKGFyZ3ZbcGFyYW1zLTFdKSA6IDA7CiAJCWlmIChjaWQgPCAwKSB7CiAJCQlnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgUlNQX0lOVkFMLAotCQkJICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCk7CisJCQkJCSAgTlVMTCwgMCwgTlVMTCk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlmb3IgKGogPSAxOyBqIDwgcGFyYW1zOyArK2opCiAJCQlhcmd2W2pdWy0xXSA9IDA7CiAKLQkJZGJnKERFQlVHX1RSQU5TQ01ELCAiQ01EIHJlY2VpdmVkOiAlcyIsIGFyZ3ZbMF0pOworCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiQ01EIHJlY2VpdmVkOiAlcyIsIGFyZ3ZbMF0pOwogCQlpZiAoY2lkKSB7CiAJCQktLXBhcmFtczsKLQkJCWRiZyhERUJVR19UUkFOU0NNRCwgIkNJRDogJXMiLCBhcmd2W3BhcmFtc10pOworCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIkNJRDogJXMiLCBhcmd2W3BhcmFtc10pOwogCQl9Ci0JCWRiZyhERUJVR19UUkFOU0NNRCwgImF2YWlsYWJsZSBwYXJhbXM6ICVkIiwgcGFyYW1zIC0gMSk7CisJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJhdmFpbGFibGUgcGFyYW1zOiAlZCIsIHBhcmFtcyAtIDEpOwogCQlmb3IgKGogPSAxOyBqIDwgcGFyYW1zOyBqKyspCi0JCQlkYmcoREVCVUdfVFJBTlNDTUQsICJwYXJhbSAlZDogJXMiLCBqLCBhcmd2W2pdKTsKKwkJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJwYXJhbSAlZDogJXMiLCBqLCBhcmd2W2pdKTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKLQloZWFkID0gYXRvbWljX3JlYWQoJmNzLT5ldl9oZWFkKTsKLQl0YWlsID0gYXRvbWljX3JlYWQoJmNzLT5ldl90YWlsKTsKKwloZWFkID0gY3MtPmV2X2hlYWQ7CisJdGFpbCA9IGNzLT5ldl90YWlsOwogCiAJYWJvcnQgPSAxOwogCWN1cmFyZyA9IDA7CiAJd2hpbGUgKGN1cmFyZyA8IHBhcmFtcykgewogCQluZXh0ID0gKHRhaWwgKyAxKSAlIE1BWF9FVkVOVFM7CiAJCWlmICh1bmxpa2VseShuZXh0ID09IGhlYWQpKSB7Ci0JCQllcnIoImV2ZW50IHF1ZXVlIGZ1bGwiKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgImV2ZW50IHF1ZXVlIGZ1bGxcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNjE5LDggKzYwMiw5IEBACiAKIAkJCWlmICghcnQtPnJlc3BvbnNlKSB7CiAJCQkJZXZlbnQtPnR5cGUgPSBSU1BfVU5LTk9XTjsKLQkJCQl3YXJuKCJ1bmtub3duIG1vZGVtIHJlc3BvbnNlOiAlcyIsCi0JCQkJICAgICBhcmd2W2N1cmFyZ10pOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAidW5rbm93biBtb2RlbSByZXNwb25zZTogJXNcbiIsCisJCQkJCSBhcmd2W2N1cmFyZ10pOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC02MzYsNyArNjIwLDggQEAKIAkJCWJyZWFrOwogCQljYXNlIFJUX1JJTkc6CiAJCQlpZiAoIWNpZCkgewotCQkJCWVycigicmVjZWl2ZWQgUklORyB3aXRob3V0IENJRCEiKTsKKwkJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJCSJyZWNlaXZlZCBSSU5HIHdpdGhvdXQgQ0lEIVxuIik7CiAJCQkJZXZlbnQtPnR5cGUgPSBSU1BfSU5WQUw7CiAJCQkJYWJvcnQgPSAxOwogCQkJfSBlbHNlIHsKQEAgLTY2NCwyNyArNjQ5LDI1IEBACiAJCQkJZXZlbnQtPnBhcmFtZXRlciA9IFpTQVVfRElTQ09OTkVDVF9SRVE7CiAJCQllbHNlIHsKIAkJCQlldmVudC0+cGFyYW1ldGVyID0gWlNBVV9VTktOT1dOOwotCQkJCXdhcm4oIiVzOiB1bmtub3duIHBhcmFtZXRlciAlcyBhZnRlciBaU0FVIiwKLQkJCQkgICAgIF9fZnVuY19fLCBhcmd2W2N1cmFyZ10pOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSIlczogdW5rbm93biBwYXJhbWV0ZXIgJXMgYWZ0ZXIgWlNBVVxuIiwKKwkJCQkJIF9fZnVuY19fLCBhcmd2W2N1cmFyZ10pOwogCQkJfQogCQkJKytjdXJhcmc7CiAJCQlicmVhazsKIAkJY2FzZSBSVF9TVFJJTkc6CiAJCQlpZiAoY3VyYXJnIDwgcGFyYW1zKSB7Ci0JCQkJbGVuID0gc3RybGVuKGFyZ3ZbY3VyYXJnXSkgKyAxOwotCQkJCWV2ZW50LT5wdHIgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Ci0JCQkJaWYgKGV2ZW50LT5wdHIpCi0JCQkJCW1lbWNweShldmVudC0+cHRyLCBhcmd2W2N1cmFyZ10sIGxlbik7Ci0JCQkJZWxzZQotCQkJCQllcnIoIm5vIG1lbW9yeSBmb3Igc3RyaW5nISIpOworCQkJCWV2ZW50LT5wdHIgPSBrc3RyZHVwKGFyZ3ZbY3VyYXJnXSwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKCFldmVudC0+cHRyKQorCQkJCQlkZXZfZXJyKGNzLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCQkrK2N1cmFyZzsKIAkJCX0KICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCQkJaWYgKCFldmVudC0+cHRyKQotCQkJCWRiZyhERUJVR19DTUQsICJzdHJpbmc9PU5VTEwiKTsKKwkJCQlnaWdfZGJnKERFQlVHX0NNRCwgInN0cmluZz09TlVMTCIpOwogCQkJZWxzZQotCQkJCWRiZyhERUJVR19DTUQsCi0JCQkJICAgICJzdHJpbmc9PSVzIiwgKGNoYXIgKikgZXZlbnQtPnB0cik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJzdHJpbmc9PSVzIiwKKwkJCQkJKGNoYXIgKikgZXZlbnQtPnB0cik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIFJUX1pDQVU6CkBAIC02OTQsNyArNjc3LDcgQEAKIAkJCQlqID0gaXNkbl9nZXRoZXgoYXJndltjdXJhcmcgKyAxXSk7CiAJCQkJaWYgKGkgPj0gMCAmJiBpIDwgMjU2ICYmIGogPj0gMCAmJiBqIDwgMjU2KQogCQkJCQlldmVudC0+cGFyYW1ldGVyID0gKHVuc2lnbmVkKSBpIDw8IDgKLQkJCQkJICAgICAgICAgICAgICAgICAgIHwgajsKKwkJCQkJCQkgICB8IGo7CiAJCQkJY3VyYXJnICs9IDI7CiAJCQl9IGVsc2UKIAkJCQljdXJhcmcgPSBwYXJhbXMgLSAxOwpAQCAtNzEyLDcgKzY5NSw3IEBACiAJCQl9IGVsc2UKIAkJCQlldmVudC0+cGFyYW1ldGVyID0gLTE7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKLQkJCWRiZyhERUJVR19DTUQsICJwYXJhbWV0ZXI9PSVkIiwgZXZlbnQtPnBhcmFtZXRlcik7CisJCQlnaWdfZGJnKERFQlVHX0NNRCwgInBhcmFtZXRlcj09JWQiLCBldmVudC0+cGFyYW1ldGVyKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCX0KQEAgLTcyNCwxMiArNzA3LDEzIEBACiAJCQlicmVhazsKIAl9CiAKLQlhdG9taWNfc2V0KCZjcy0+ZXZfdGFpbCwgdGFpbCk7CisJY3MtPmV2X3RhaWwgPSB0YWlsOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAKIAlpZiAoY3VyYXJnICE9IHBhcmFtcykKLQkJZGJnKERFQlVHX0FOWSwgImludmFsaWQgbnVtYmVyIG9mIHByb2Nlc3NlZCBwYXJhbWV0ZXJzOiAlZC8lZCIsCi0JCSAgICBjdXJhcmcsIHBhcmFtcyk7CisJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJImludmFsaWQgbnVtYmVyIG9mIHByb2Nlc3NlZCBwYXJhbWV0ZXJzOiAlZC8lZCIsCisJCQljdXJhcmcsIHBhcmFtcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZSk7CiAKQEAgLTczOSwyMyArNzIzLDE5IEBACiBzdGF0aWMgdm9pZCBkaXNjb25uZWN0KHN0cnVjdCBhdF9zdGF0ZV90ICoqYXRfc3RhdGVfcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOworCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gKCphdF9zdGF0ZV9wKS0+YmNzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gKCphdF9zdGF0ZV9wKS0+Y3M7CiAKLQlJRk5VTExSRVQoYXRfc3RhdGVfcCk7Ci0JSUZOVUxMUkVUKCphdF9zdGF0ZV9wKTsKLQliY3MgPSAoKmF0X3N0YXRlX3ApLT5iY3M7Ci0JY3MgPSAoKmF0X3N0YXRlX3ApLT5jczsKLQlJRk5VTExSRVQoY3MpOwotCi0JbmV3X2luZGV4KCYoKmF0X3N0YXRlX3ApLT5zZXFfaW5kZXgsIE1BWF9TRVFfSU5ERVgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCSsrKCphdF9zdGF0ZV9wKS0+c2VxX2luZGV4OwogCiAJLyogcmV2ZXJ0IHRvIHNlbGVjdGVkIGlkbGUgbW9kZSAqLwotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jaWRtb2RlKSkgeworCWlmICghY3MtPmNpZG1vZGUpIHsKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfVU1NT0RFOwogCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19VTU1PREUiKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChiY3MpIHsKIAkJLyogQiBjaGFubmVsIGFzc2lnbmVkOiBpbnZva2UgaGFyZHdhcmUgc3BlY2lmaWMgaGFuZGxlciAqLwpAQCAtNzc3LDcgKzc1Nyw3IEBACiAgKiBUaGUgc3RydWN0dXJlIHNob3VsZCBiZSBmcmVlZCBieSBjYWxsaW5nIGRpc2Nvbm5lY3QoKSBhZnRlciB1c2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF0X3N0YXRlX3QgKmdldF9mcmVlX2NoYW5uZWwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaWQpCisJCQkJCQkgIGludCBjaWQpCiAvKiBjaWRzOiA+MDogc2llbWVucy1jaWQKIAkgIDA6IHdpdGhvdXQgY2lkCiAJIC0xOiBubyBjaWQgYXNzaWduZWQgeWV0CkBAIC04MjYsNyArODA2LDcgQEAKIHN0YXRpYyB2b2lkIHNjaGVkdWxlX2luaXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBzdGF0ZSkKIHsKIAlpZiAoY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJiBQQ19JTklUKSB7Ci0JCWRiZyhERUJVR19DTUQsICJub3Qgc2NoZWR1bGluZyBQQ19JTklUIGFnYWluIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAibm90IHNjaGVkdWxpbmcgUENfSU5JVCBhZ2FpbiIpOwogCQlyZXR1cm47CiAJfQogCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIHN0YXRlKTsKQEAgLTgzNCw1MiArODE0LDU2IEBACiAJZ2lnYXNldF9ibG9ja19jaGFubmVscyhjcyk7CiAJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSU5JVDsKIAlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7Ci0JZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSU5JVCIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19JTklUIik7CiB9CiAKLS8qIEFkZCAiQVQiIHRvIGEgY29tbWFuZCwgYWRkIHRoZSBjaWQsIGRsZSBlbmNvZGUgaXQsIHNlbmQgdGhlIHJlc3VsdCB0byB0aGUgaGFyZHdhcmUuICovCisvKiBBZGQgIkFUIiB0byBhIGNvbW1hbmQsIGFkZCB0aGUgY2lkLCBkbGUgZW5jb2RlIGl0LCBzZW5kIHRoZSByZXN1bHQgdG8gdGhlCisgICBoYXJkd2FyZS4gKi8KIHN0YXRpYyB2b2lkIHNlbmRfY29tbWFuZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgY29uc3QgY2hhciAqY21kLCBpbnQgY2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkbGUsIGdmcF90IGttYWxsb2NmbGFncykKKwkJCSBpbnQgZGxlLCBnZnBfdCBrbWFsbG9jZmxhZ3MpCiB7CiAJc2l6ZV90IGNtZGxlbiwgYnVmbGVuOwogCWNoYXIgKmNtZHBvcywgKmNtZGJ1ZiwgKmNtZHRhaWw7CiAKIAljbWRsZW4gPSBzdHJsZW4oY21kKTsKIAlidWZsZW4gPSAxMSArIGNtZGxlbjsKKwlpZiAodW5saWtlbHkoYnVmbGVuIDw9IGNtZGxlbikpIHsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiaW50ZWdlciBvdmVyZmxvdyBpbiBidWZsZW5cbiIpOworCQlyZXR1cm47CisJfQogCi0JaWYgKGxpa2VseShidWZsZW4gPiBjbWRsZW4pKSB7Ci0JCWNtZGJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBrbWFsbG9jZmxhZ3MpOwotCQlpZiAobGlrZWx5KGNtZGJ1ZiAhPSBOVUxMKSkgewotCQkJY21kcG9zID0gY21kYnVmICsgOTsKLQkJCWNtZHRhaWwgPSBjbWRwb3MgKyBjbWRsZW47Ci0JCQltZW1jcHkoY21kcG9zLCBjbWQsIGNtZGxlbik7CisJY21kYnVmID0ga21hbGxvYyhidWZsZW4sIGttYWxsb2NmbGFncyk7CisJaWYgKHVubGlrZWx5KCFjbWRidWYpKSB7CisJCWRldl9lcnIoY3MtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQogCi0JCQlpZiAoY2lkID4gMCAmJiBjaWQgPD0gNjU1MzUpIHsKLQkJCQlkbyB7Ci0JCQkJCSotLWNtZHBvcyA9ICcwJyArIGNpZCAlIDEwOwotCQkJCQljaWQgLz0gMTA7Ci0JCQkJCSsrY21kbGVuOwotCQkJCX0gd2hpbGUgKGNpZCk7Ci0JCQl9CisJY21kcG9zID0gY21kYnVmICsgOTsKKwljbWR0YWlsID0gY21kcG9zICsgY21kbGVuOworCW1lbWNweShjbWRwb3MsIGNtZCwgY21kbGVuKTsKIAotCQkJY21kbGVuICs9IDI7Ci0JCQkqLS1jbWRwb3MgPSAnVCc7Ci0JCQkqLS1jbWRwb3MgPSAnQSc7CisJaWYgKGNpZCA+IDAgJiYgY2lkIDw9IDY1NTM1KSB7CisJCWRvIHsKKwkJCSotLWNtZHBvcyA9ICcwJyArIGNpZCAlIDEwOworCQkJY2lkIC89IDEwOworCQkJKytjbWRsZW47CisJCX0gd2hpbGUgKGNpZCk7CisJfQogCi0JCQlpZiAoZGxlKSB7Ci0JCQkJY21kbGVuICs9IDQ7Ci0JCQkJKi0tY21kcG9zID0gJygnOwotCQkJCSotLWNtZHBvcyA9IDB4MTA7Ci0JCQkJKmNtZHRhaWwrKyA9IDB4MTA7Ci0JCQkJKmNtZHRhaWwrKyA9ICcpJzsKLQkJCX0KKwljbWRsZW4gKz0gMjsKKwkqLS1jbWRwb3MgPSAnVCc7CisJKi0tY21kcG9zID0gJ0EnOwogCi0JCQljcy0+b3BzLT53cml0ZV9jbWQoY3MsIGNtZHBvcywgY21kbGVuLCBOVUxMKTsKLQkJCWtmcmVlKGNtZGJ1Zik7Ci0JCX0gZWxzZQotCQkJZXJyKCJubyBtZW1vcnkgZm9yIGNvbW1hbmQgYnVmZmVyIik7Ci0JfSBlbHNlCi0JCWVycigib3ZlcmZsb3cgaW4gYnVmbGVuIik7CisJaWYgKGRsZSkgeworCQljbWRsZW4gKz0gNDsKKwkJKi0tY21kcG9zID0gJygnOworCQkqLS1jbWRwb3MgPSAweDEwOworCQkqY21kdGFpbCsrID0gMHgxMDsKKwkJKmNtZHRhaWwrKyA9ICcpJzsKKwl9CisKKwljcy0+b3BzLT53cml0ZV9jbWQoY3MsIGNtZHBvcywgY21kbGVuLCBOVUxMKTsKKwlrZnJlZShjbWRidWYpOwogfQogCiBzdGF0aWMgc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlX2Zyb21fY2lkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKQpAQCAtOTEwLDkgKzg5NCw2IEBACiAKIHN0YXRpYyB2b2lkIGJjaGFubmVsX2Rvd24oc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7Ci0JSUZOVUxMUkVUKGJjcyk7Ci0JSUZOVUxMUkVUKGJjcy0+Y3MpOwotCiAJaWYgKGJjcy0+Y2hzdGF0ZSAmIENIU19CX1VQKSB7CiAJCWJjcy0+Y2hzdGF0ZSAmPSB+Q0hTX0JfVVA7CiAJCWdpZ2FzZXRfaTRsX2NoYW5uZWxfY21kKGJjcywgSVNETl9TVEFUX0JIVVApOwpAQCAtOTMwLDE2ICs5MTEsMTUgQEAKIAogc3RhdGljIHZvaWQgYmNoYW5uZWxfdXAoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7Ci0JSUZOVUxMUkVUKGJjcyk7Ci0KIAlpZiAoIShiY3MtPmNoc3RhdGUgJiBDSFNfRF9VUCkpIHsKLQkJbm90aWNlKCIlczogRCBjaGFubmVsIG5vdCB1cCIsIF9fZnVuY19fKTsKKwkJZGV2X25vdGljZShiY3MtPmNzLT5kZXYsICIlczogRCBjaGFubmVsIG5vdCB1cFxuIiwgX19mdW5jX18pOwogCQliY3MtPmNoc3RhdGUgfD0gQ0hTX0RfVVA7CiAJCWdpZ2FzZXRfaTRsX2NoYW5uZWxfY21kKGJjcywgSVNETl9TVEFUX0RDT05OKTsKIAl9CiAKIAlpZiAoYmNzLT5jaHN0YXRlICYgQ0hTX0JfVVApIHsKLQkJbm90aWNlKCIlczogQiBjaGFubmVsIGFscmVhZHkgdXAiLCBfX2Z1bmNfXyk7CisJCWRldl9ub3RpY2UoYmNzLT5jcy0+ZGV2LCAiJXM6IEIgY2hhbm5lbCBhbHJlYWR5IHVwXG4iLAorCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC05NDcsMTcgKzkyNywyMSBAQAogCWdpZ2FzZXRfaTRsX2NoYW5uZWxfY21kKGJjcywgSVNETl9TVEFUX0JDT05OKTsKIH0KIAotc3RhdGljIHZvaWQgc3RhcnRfZGlhbChzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIHZvaWQgKmRhdGEsIGludCBzZXFfaW5kZXgpCitzdGF0aWMgdm9pZCBzdGFydF9kaWFsKHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2VxX2luZGV4KQogewogCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gYXRfc3RhdGUtPmJjczsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGF0X3N0YXRlLT5jczsKIAlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAliY3MtPmNoc3RhdGUgfD0gQ0hTX05PVElGWV9MTDsKLQkvL2F0b21pY19zZXQoJmJjcy0+c3RhdHVzLCBCQ1NfSU5JVCk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmF0X3N0YXRlLT5zZXFfaW5kZXgpICE9IHNlcV9pbmRleCkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoYXRfc3RhdGUtPnNlcV9pbmRleCAhPSBzZXFfaW5kZXgpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJZ290byBlcnJvcjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHZhbCA9IGdpZ2FzZXRfaXNkbl9zZXR1cF9kaWFsKGF0X3N0YXRlLCBkYXRhKTsKIAlpZiAocmV0dmFsICE9IDApCkBAIC05NjUsMjAgKzk0OSwxNCBAQAogCiAKIAlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSUQ7Ci0JZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lEIik7Ci0vLyNpZmRlZiBHSUdfTUFZSU5JVE9ORElBTAotLy8JaWYgKGF0b21pY19yZWFkKCZjcy0+TVN0YXRlKSA9PSBNU19VTktOT1dOKSB7Ci0vLwkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSU5JVDsKLS8vCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19JTklUIik7Ci0vLwl9Ci0vLyNlbmRpZgotCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQorCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSUQiKTsKKwlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJcmV0dXJuOwogCiBlcnJvcjoKIAlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19OT0NJRDsKLQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19OT0NJRCIpOwotCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQorCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19OT0NJRCIpOworCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAlyZXR1cm47CiB9CiAKQEAgLTk5MSwxMyArOTY5LDEzIEBACiAKIAlpZiAocmV0dmFsID09IDApIHsKIAkJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQUNDRVBUOwotCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19BQ0NFUFQiKTsKLQkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19BQ0NFUFQiKTsKKwkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCX0gZWxzZSB7CiAJCS8vRklYTUUKIAkJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSFVQOwotCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19IVVAiKTsKLQkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19IVVAiKTsKKwkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCX0KIH0KIApAQCAtMTAwOCw5ICs5ODYsMTAgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkKIAkJc2NoZWR1bGVfaW5pdChjcywgTVNfSU5JVCk7CiAKKwljcy0+aXNkbl91cCA9IDE7CiAJZ2lnYXNldF9pNGxfY21kKGNzLCBJU0ROX1NUQVRfUlVOKTsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBub3QgaW4gbG9ja2VkIG1vZGUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIDI6IG9ubHkgYWZ0ZXIgaW5pdCBzZXF1ZW5jZQorCQkJCQkvLyBGSVhNRTogbm90IGluIGxvY2tlZCBtb2RlCisJCQkJCS8vIEZJWE1FIDI6IG9ubHkgYWZ0ZXIgaW5pdCBzZXF1ZW5jZQogCiAJY3MtPndhaXRpbmcgPSAwOwogCXdha2VfdXAoJmNzLT53YWl0cXVldWUpOwpAQCAtMTAyMyw2ICsxMDAyLDEyIEBACiAJCWF0b21pY19zZXQoJmNzLT5tb2RlLCBNX1VOS05PV04pOwogCX0KIAorCS8qIFRlbGwgdGhlIExMIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIC4uICovCisJaWYgKGNzLT5pc2RuX3VwKSB7CisJCWNzLT5pc2RuX3VwID0gMDsKKwkJZ2lnYXNldF9pNGxfY21kKGNzLCBJU0ROX1NUQVRfU1RPUCk7CisJfQorCiAJLyogVGhlIHJlc3QgaXMgZG9uZSBieSBjbGVhbnVwX2NzICgpIGluIHVzZXIgbW9kZS4gKi8KIAogCWNzLT5jbWRfcmVzdWx0ID0gLUVOT0RFVjsKQEAgLTEwMzcsMTUgKzEwMjIsMjAgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpID09IE1TX1JFQURZKSB7CiAJCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX1NIVVRET1dOKTsKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfU0hVVERPV047Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQotCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19TSFVURE9XTiIpOyAvL0ZJWE1FCi0JCS8vZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7IC8vRklYTUUKKwkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfU0hVVERPV04iKTsKIAl9IGVsc2UKIAkJZmluaXNoX3NodXRkb3duKGNzKTsKIH0KIAogc3RhdGljIHZvaWQgZG9fc3RvcChzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJY3MtPmNvbm5lY3RlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwogCWRvX3NodXRkb3duKGNzKTsKIH0KIApAQCAtMTA2OSw5ICsxMDU5LDExIEBACiAJCQlyZXR1cm4gMDsKIAogCWlmIChjaGFubmVsIDwgMCkKLQkJd2FybigiQ291bGQgbm90IGVudGVyIGNpZCBtb2RlLiBSZWluaXQgZGV2aWNlIGFuZCB0cnkgYWdhaW4uIik7CisJCWRldl93YXJuKGNzLT5kZXYsCisJCSAgICAiQ291bGQgbm90IGVudGVyIGNpZCBtb2RlLiBSZWluaXQgZGV2aWNlIGFuZCB0cnkgYWdhaW4uXG4iKTsKIAllbHNlIHsKLQkJd2FybigiQ291bGQgbm90IGdldCBhIGNhbGwgaWQuIFJlaW5pdCBkZXZpY2UgYW5kIHRyeSBhZ2Fpbi4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJICAgICJDb3VsZCBub3QgZ2V0IGEgY2FsbCBpZC4gUmVpbml0IGRldmljZSBhbmQgdHJ5IGFnYWluLlxuIik7CiAJCWNzLT5iY3NbY2hhbm5lbF0uYXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSUQ7CiAJfQogCXNjaGVkdWxlX2luaXQoY3MsIE1TX0lOSVQpOwpAQCAtMTA3OSw3ICsxMDcxLDcgQEAKIH0KIAogc3RhdGljIGludCBhdF9zdGF0ZV9pbnZhbGlkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdF9zdGF0ZV90ICp0ZXN0X3B0cikKKwkJCSAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqdGVzdF9wdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFubmVsOwpAQCAtMTExNiw3ICsxMTA4LDcgQEAKIAljYXNlIElDQUxMX0FDQ0VQVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJpbnRlcm5hbCBlcnJvcjogZGlzcG9zaXRpb249JWQiLCByZXR2YWwpOworCQlkZXZfZXJyKGNzLT5kZXYsICJpbnRlcm5hbCBlcnJvcjogZGlzcG9zaXRpb249JWRcbiIsIHJldHZhbCk7CiAJCS8qIC0tdi0tIGZhbGwgdGhyb3VnaCAtLXYtLSAqLwogCWNhc2UgSUNBTExfSUdOT1JFOgogCWNhc2UgSUNBTExfUkVKRUNUOgpAQCAtMTE2MCw3ICsxMTUyLDYgQEAKIAltb2RlID0gYXRvbWljX3JlYWQoJmNzLT5tb2RlKTsKIAlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19MT0NLRUQpOwogCWF0b21pY19zZXQoJmNzLT5tb2RlLCBNX1VOS05PV04pOwotCS8vRklYTUUgcmVzZXQgY2FyZCBzdGF0ZSAvIGF0IHN0YXRlcyAvIGJjcyBzdGF0ZXMKIAogCXJldHVybiBtb2RlOwogfQpAQCAtMTE3Myw4ICsxMTY0LDcgQEAKIAlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19VTklOSVRJQUxJWkVEKTsKIAlhdG9taWNfc2V0KCZjcy0+bW9kZSwgTV9VTktOT1dOKTsKIAlnaWdhc2V0X2ZyZWVfY2hhbm5lbHMoY3MpOwotCS8vRklYTUUgcmVzZXQgY2FyZCBzdGF0ZSAvIGF0IHN0YXRlcyAvIGJjcyBzdGF0ZXMKLQlpZiAoYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKQorCWlmIChjcy0+Y29ubmVjdGVkKQogCQlzY2hlZHVsZV9pbml0KGNzLCBNU19JTklUKTsKIAogCXJldHVybiAwOwpAQCAtMTIwMywyMSArMTE5MywyMyBAQAogCQlhdF9zdGF0ZS0+d2FpdGluZyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0lOSVQ6Ci0JCS8vRklYTUUgc2V0dXAgZXZlcnl0aGluZwogCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyAmPSB+UENfSU5JVDsKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKIAkJYXRvbWljX3NldCgmY3MtPm1vZGUsIE1fVU5JTU9ERU0pOwotCQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y2lkbW9kZSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCWlmICghY3MtPmNpZG1vZGUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCQlnaWdhc2V0X2ZyZWVfY2hhbm5lbHMoY3MpOwogCQkJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgTVNfUkVBRFkpOwogCQkJYnJlYWs7CiAJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lETU9ERTsKLQkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCi0JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKKwkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQlicmVhazsKIAljYXNlIEFDVF9GQUlMSU5JVDoKLQkJd2FybigiQ291bGQgbm90IGluaXRpYWxpemUgdGhlIGRldmljZS4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIkNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSBkZXZpY2UuXG4iKTsKIAkJY3MtPmRsZSA9IDA7CiAJCWluaXRfZmFpbGVkKGNzLCBNX1VOS05PV04pOwogCQljcy0+Y3VyX2F0X3NlcSA9IFNFUV9OT05FOwpAQCAtMTI3Myw4ICsxMjY1LDggQEAKIAkJLyogZ2V0IGZyZXNoIEFUIHN0YXRlIHN0cnVjdHVyZSBmb3IgbmV3IENJRCAqLwogCQlhdF9zdGF0ZTIgPSBnZXRfZnJlZV9jaGFubmVsKGNzLCBldi0+cGFyYW1ldGVyKTsKIAkJaWYgKCFhdF9zdGF0ZTIpIHsKLQkJCXdhcm4oIlJJTkcgaWdub3JlZDogIgotCQkJICAgICAiY291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWwgc3RydWN0dXJlIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJIlJJTkcgaWdub3JlZDogY291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWwgc3RydWN0dXJlXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEzMDIsNyArMTI5NCw3IEBACiAJCWF0X3N0YXRlID0gKnBfYXRfc3RhdGU7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0ZBSUxTRE9XTjoKLQkJd2FybigiQ291bGQgbm90IHNodXQgZG93biB0aGUgZGV2aWNlLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiQ291bGQgbm90IHNodXQgZG93biB0aGUgZGV2aWNlLlxuIik7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQUNUX0ZBS0VTRE9XTjoKIAljYXNlIEFDVF9TRE9XTjoKQEAgLTEzNTUsNyArMTM0Nyw3IEBACiAJCWJyZWFrOwogCWNhc2UgQUNUX0FCT1JUSFVQOgogCQljcy0+Y3VyX2F0X3NlcSA9IFNFUV9OT05FOwotCQl3YXJuKCJDb3VsZCBub3QgaGFuZyB1cC4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIkNvdWxkIG5vdCBoYW5nIHVwLlxuIik7CiAJCWF0X3N0YXRlLT5jaWQgPSAtMTsKIAkJaWYgKGJjcyAmJiBjcy0+b25lY2hhbm5lbCkKIAkJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0RMRTA7CkBAIC0xMzY3LDE0ICsxMzU5LDE1IEBACiAJCWJyZWFrOwogCWNhc2UgQUNUX0ZBSUxETEUwOgogCQljcy0+Y3VyX2F0X3NlcSA9IFNFUV9OT05FOwotCQl3YXJuKCJDb3VsZCBub3QgbGVhdmUgRExFIG1vZGUuIik7CisJCWRldl93YXJuKGNzLT5kZXYsICJDb3VsZCBub3QgbGVhdmUgRExFIG1vZGUuXG4iKTsKIAkJYXRfc3RhdGUyID0gJmNzLT5iY3NbY3MtPmN1cmNoYW5uZWxdLmF0X3N0YXRlOwogCQlkaXNjb25uZWN0KCZhdF9zdGF0ZTIpOwogCQlzY2hlZHVsZV9pbml0KGNzLCBNU19SRUNPVkVSKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfRkFJTERMRTE6CiAJCWNzLT5jdXJfYXRfc2VxID0gU0VRX05PTkU7Ci0JCXdhcm4oIkNvdWxkIG5vdCBlbnRlciBETEUgbW9kZS4gVHJ5IHRvIGhhbmcgdXAuIik7CisJCWRldl93YXJuKGNzLT5kZXYsCisJCQkgIkNvdWxkIG5vdCBlbnRlciBETEUgbW9kZS4gVHJ5aW5nIHRvIGhhbmcgdXAuXG4iKTsKIAkJY2hhbm5lbCA9IGNzLT5jdXJjaGFubmVsOwogCQljcy0+YmNzW2NoYW5uZWxdLmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfSFVQOwogCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CkBAIC0xMzk1LDcgKzEzODgsOCBAQAogCQljcy0+Y3VyX2F0X3NlcSA9IFNFUV9OT05FOwogCQljaGFubmVsID0gY3MtPmN1cmNoYW5uZWw7CiAJCWlmICghcmVpbml0X2FuZF9yZXRyeShjcywgY2hhbm5lbCkpIHsKLQkJCXdhcm4oIkNvdWxkIG5vdCBnZXQgYSBjYWxsIGlkLiBEaWFsaW5nIG5vdCBwb3NzaWJsZSIpOworCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkgIkNvdWxkIG5vdCBnZXQgYSBjYWxsIElELiBDYW5ub3QgZGlhbC5cbiIpOwogCQkJYXRfc3RhdGUyID0gJmNzLT5iY3NbY2hhbm5lbF0uYXRfc3RhdGU7CiAJCQlkaXNjb25uZWN0KCZhdF9zdGF0ZTIpOwogCQl9CkBAIC0xNDI4LDcgKzE0MjIsOCBAQAogCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19IVVA7CiAJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAkJYnJlYWs7Ci0JY2FzZSBBQ1RfR0VUU1RSSU5HOiAvKiB3YXJuaW5nOiBSSU5HLCBaRExFLCAuLi4gYXJlIG5vdCBoYW5kbGVkIHByb3Blcmx5IGFueSBtb3JlICovCisJY2FzZSBBQ1RfR0VUU1RSSU5HOiAvKiB3YXJuaW5nOiBSSU5HLCBaRExFLCAuLi4KKwkJCSAgICAgICBhcmUgbm90IGhhbmRsZWQgcHJvcGVybHkgYW55bW9yZSAqLwogCQlhdF9zdGF0ZS0+Z2V0c3RyaW5nID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfU0VUVkVSOgpAQCAtMTQ2OSwxNiArMTQ2NCwxNiBAQAogCWNhc2UgQUNUX0dPVFZFUjoKIAkJaWYgKGNzLT5nb3Rmd3ZlciA9PSAwKSB7CiAJCQljcy0+Z290Znd2ZXIgPSAxOwotCQkJZGJnKERFQlVHX0FOWSwKLQkJCSAgICAiZmlybXdhcmUgdmVyc2lvbiAlMDJkLiUwM2QuJTAyZC4lMDJkIiwKLQkJCSAgICBjcy0+Znd2ZXJbMF0sIGNzLT5md3ZlclsxXSwKLQkJCSAgICBjcy0+Znd2ZXJbMl0sIGNzLT5md3ZlclszXSk7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCQkiZmlybXdhcmUgdmVyc2lvbiAlMDJkLiUwM2QuJTAyZC4lMDJkIiwKKwkJCQljcy0+Znd2ZXJbMF0sIGNzLT5md3ZlclsxXSwKKwkJCQljcy0+Znd2ZXJbMl0sIGNzLT5md3ZlclszXSk7CiAJCQlicmVhazsKIAkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFDVF9GQUlMVkVSOgogCQljcy0+Z290Znd2ZXIgPSAtMTsKLQkJZXJyKCJjb3VsZCBub3QgcmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3QgcmVhZCBmaXJtd2FyZSB2ZXJzaW9uLlxuIik7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJY2FzZSBBQ1RfRVJST1I6CkBAIC0xNDk2LDE2ICsxNDkxLDE2IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJY2FzZSBBQ1RfREVCVUc6Ci0JCWRiZyhERUJVR19BTlksICIlczogcmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkIiwKKwkJZ2lnX2RiZyhERUJVR19BTlksICIlczogcmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkIiwKIAkJCV9fZnVuY19fLCBldi0+dHlwZSwgYXRfc3RhdGUtPkNvblN0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfV0FSTjoKLQkJd2FybigiJXM6IHJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCEiLAotCQkJX19mdW5jX18sIGV2LT50eXBlLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiJXM6IHJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCFcbiIsCisJCQkgX19mdW5jX18sIGV2LT50eXBlLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOwogCQlicmVhazsKIAljYXNlIEFDVF9aQ0FVOgotCQl3YXJuKCJjYXVzZSBjb2RlICUwNHggaW4gY29ubmVjdGlvbiBzdGF0ZSAlZC4iLAotCQkgICAgIGV2LT5wYXJhbWV0ZXIsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CisJCWRldl93YXJuKGNzLT5kZXYsICJjYXVzZSBjb2RlICUwNHggaW4gY29ubmVjdGlvbiBzdGF0ZSAlZC5cbiIsCisJCQkgZXYtPnBhcmFtZXRlciwgYXRfc3RhdGUtPkNvblN0YXRlKTsKIAkJYnJlYWs7CiAKIAkvKiBldmVudHMgZnJvbSB0aGUgTEwgKi8KQEAgLTE1MTYsMTQgKzE1MTEsMTQgQEAKIAkJc3RhcnRfYWNjZXB0KGF0X3N0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfUFJPVE9fTDI6Ci0JCWRiZyhERUJVR19DTUQsCi0JCSAgICAic2V0IHByb3RvY29sIHRvICV1IiwgKHVuc2lnbmVkKSBldi0+cGFyYW1ldGVyKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzZXQgcHJvdG9jb2wgdG8gJXUiLAorCQkJKHVuc2lnbmVkKSBldi0+cGFyYW1ldGVyKTsKIAkJYXRfc3RhdGUtPmJjcy0+cHJvdG8yID0gZXYtPnBhcmFtZXRlcjsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfSFVQOgogCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19IVVA7Ci0JCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQotCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19IVVAiKTsKKwkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSFVQIik7CiAJCWJyZWFrOwogCiAJLyogaG90cGx1ZyBldmVudHMgKi8KQEAgLTE1NTUsMTcgKzE1NTAsMTkgQEAKIAogCS8qIGV2ZW50cyBmcm9tIHRoZSBwcm9jIGZpbGUgc3lzdGVtICovIC8vIEZJWE1FIHdpdGhvdXQgQUNUX3h4eHg/CiAJY2FzZSBBQ1RfUFJPQ19DSURNT0RFOgotCQlpZiAoZXYtPnBhcmFtZXRlciAhPSBhdG9taWNfcmVhZCgmY3MtPmNpZG1vZGUpKSB7Ci0JCQlhdG9taWNfc2V0KCZjcy0+Y2lkbW9kZSwgZXYtPnBhcmFtZXRlcik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoZXYtPnBhcmFtZXRlciAhPSBjcy0+Y2lkbW9kZSkgeworCQkJY3MtPmNpZG1vZGUgPSBldi0+cGFyYW1ldGVyOwogCQkJaWYgKGV2LT5wYXJhbWV0ZXIpIHsKIAkJCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSURNT0RFOwotCQkJCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKKwkJCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQkJfSBlbHNlIHsKIAkJCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19VTU1PREU7Ci0JCQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOwogCQkJfQogCQkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWNzLT53YWl0aW5nID0gMDsKIAkJd2FrZV91cCgmY3MtPndhaXRxdWV1ZSk7CiAJCWJyZWFrOwpAQCAtMTU5MCw3ICsxNTg3LDcgQEAKIAkJCQkqcF9yZXNwX2NvZGUgPSBSU1BfTlVMTDsKIAkJCX0KIAkJfSBlbHNlCi0JCQllcnIoIiVzOiBhY3Rpb249PSVkISIsIF9fZnVuY19fLCBhY3Rpb24pOworCQkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IGFjdGlvbj09JWQhXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKIAl9CiB9CiAKQEAgLTE2MDksNDcgKzE2MDYsNDYgQEAKIAlpbnQgY3VyYWN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQoY3MpOwotCUlGTlVMTFJFVChldik7Ci0KIAlpZiAoZXYtPmNpZCA+PSAwKSB7CiAJCWF0X3N0YXRlID0gYXRfc3RhdGVfZnJvbV9jaWQoY3MsIGV2LT5jaWQpOwogCQlpZiAoIWF0X3N0YXRlKSB7CiAJCQlnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgUlNQX1dST05HX0NJRCwKLQkJCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwpOworCQkJCQkgIE5VTEwsIDAsIE5VTEwpOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKIAkJYXRfc3RhdGUgPSBldi0+YXRfc3RhdGU7CiAJCWlmIChhdF9zdGF0ZV9pbnZhbGlkKGNzLCBhdF9zdGF0ZSkpIHsKLQkJCWRiZyhERUJVR19BTlksCi0JCQkgICAgImV2ZW50IGZvciBpbnZhbGlkIGF0X3N0YXRlICVwIiwgYXRfc3RhdGUpOworCQkJZ2lnX2RiZyhERUJVR19BTlksICJldmVudCBmb3IgaW52YWxpZCBhdF9zdGF0ZSAlcCIsCisJCQkJYXRfc3RhdGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCi0JZGJnKERFQlVHX0NNRCwKLQkgICAgImNvbm5lY3Rpb24gc3RhdGUgJWQsIGV2ZW50ICVkIiwgYXRfc3RhdGUtPkNvblN0YXRlLCBldi0+dHlwZSk7CisJZ2lnX2RiZyhERUJVR19DTUQsICJjb25uZWN0aW9uIHN0YXRlICVkLCBldmVudCAlZCIsCisJCWF0X3N0YXRlLT5Db25TdGF0ZSwgZXYtPnR5cGUpOwogCiAJYmNzID0gYXRfc3RhdGUtPmJjczsKIAlzZW5kY2lkID0gYXRfc3RhdGUtPmNpZDsKIAogCS8qIFNldHRpbmcgdGhlIHBvaW50ZXIgdG8gdGhlIGRpYWwgYXJyYXkgKi8KIAlyZXAgPSBhdF9zdGF0ZS0+cmVwbHlzdHJ1Y3Q7Ci0JSUZOVUxMUkVUKHJlcCk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoZXYtPnR5cGUgPT0gRVZfVElNRU9VVCkgewotCQlpZiAoZXYtPnBhcmFtZXRlciAhPSBhdG9taWNfcmVhZCgmYXRfc3RhdGUtPnRpbWVyX2luZGV4KQorCQlpZiAoZXYtPnBhcmFtZXRlciAhPSBhdF9zdGF0ZS0+dGltZXJfaW5kZXgKIAkJICAgIHx8ICFhdF9zdGF0ZS0+dGltZXJfYWN0aXZlKSB7CiAJCQlldi0+dHlwZSA9IFJTUF9OT05FOyAvKiBvbGQgdGltZW91dCAqLwotCQkJZGJnKERFQlVHX0FOWSwgIm9sZCB0aW1lb3V0Iik7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgIm9sZCB0aW1lb3V0Iik7CiAJCX0gZWxzZSBpZiAoIWF0X3N0YXRlLT53YWl0aW5nKQotCQkJZGJnKERFQlVHX0FOWSwgInRpbWVvdXQgb2NjdXJlZCIpOworCQkJZ2lnX2RiZyhERUJVR19BTlksICJ0aW1lb3V0IG9jY3VycmVkIik7CiAJCWVsc2UKLQkJCWRiZyhERUJVR19BTlksICJzdG9wcGVkIHdhaXRpbmciKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAic3RvcHBlZCB3YWl0aW5nIik7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBpZiB0aGUgcmVzcG9uc2UgYmVsb25ncyB0byBhIHZhcmlhYmxlIGluIGF0X3N0YXRlLT5pbnRfdmFyW1ZBUl9YWFhYXSBvciBhdF9zdGF0ZS0+c3RyX3ZhcltTVFJfWFhYWF0sIHNldCBpdCAqLworCS8qIGlmIHRoZSByZXNwb25zZSBiZWxvbmdzIHRvIGEgdmFyaWFibGUgaW4gYXRfc3RhdGUtPmludF92YXJbVkFSX1hYWFhdCisJICAgb3IgYXRfc3RhdGUtPnN0cl92YXJbU1RSX1hYWFhdLCBzZXQgaXQgKi8KIAlpZiAoZXYtPnR5cGUgPj0gUlNQX1ZBUiAmJiBldi0+dHlwZSA8IFJTUF9WQVIgKyBWQVJfTlVNKSB7CiAJCWluZGV4ID0gZXYtPnR5cGUgLSBSU1BfVkFSOwogCQlhdF9zdGF0ZS0+aW50X3ZhcltpbmRleF0gPSBldi0+cGFyYW1ldGVyOwpAQCAtMTY1NywyMCArMTY1MywyMiBAQAogCQlpbmRleCA9IGV2LT50eXBlIC0gUlNQX1NUUjsKIAkJa2ZyZWUoYXRfc3RhdGUtPnN0cl92YXJbaW5kZXhdKTsKIAkJYXRfc3RhdGUtPnN0cl92YXJbaW5kZXhdID0gZXYtPnB0cjsKLQkJZXYtPnB0ciA9IE5VTEw7IC8qIHByZXZlbnQgcHJvY2Vzc19ldmVudHMoKSBmcm9tIGRlYWxsb2NhdGluZyBwdHIgKi8KKwkJZXYtPnB0ciA9IE5VTEw7IC8qIHByZXZlbnQgcHJvY2Vzc19ldmVudHMoKSBmcm9tCisJCQkJICAgZGVhbGxvY2F0aW5nIHB0ciAqLwogCX0KIAogCWlmIChldi0+dHlwZSA9PSBFVl9USU1FT1VUIHx8IGV2LT50eXBlID09IFJTUF9TVFJJTkcpCiAJCWF0X3N0YXRlLT5nZXRzdHJpbmcgPSAwOwogCi0JLyogU2VhcmNoIHJvdyBpbiBkaWFsIGFycmF5IHdoaWNoIG1hdGNoZXMgbW9kZW0gcmVzcG9uc2UgYW5kIGN1cnJlbnQgY29uc3RhdGUgKi8KKwkvKiBTZWFyY2ggcm93IGluIGRpYWwgYXJyYXkgd2hpY2ggbWF0Y2hlcyBtb2RlbSByZXNwb25zZSBhbmQgY3VycmVudAorCSAgIGNvbnN0YXRlICovCiAJZm9yICg7OyByZXArKykgewogCQlyY29kZSA9IHJlcC0+cmVzcF9jb2RlOwotCQkvKiBkYmcgKERFQlVHX0FOWSwgInJjb2RlICVkIiwgcmNvZGUpOyAqLwogCQlpZiAocmNvZGUgPT0gUlNQX0xBU1QpIHsKIAkJCS8qIGZvdW5kIG5vdGhpbmcuLi4qLwotCQkJd2FybigiJXM6IHJjb2RlPVJTUF9MQVNUOiByZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQhIiwKLQkJCQlfX2Z1bmNfXywgZXYtPnR5cGUsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LCAiJXM6IHJjb2RlPVJTUF9MQVNUOiAiCisJCQkJCSJyZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQhXG4iLAorCQkJCSBfX2Z1bmNfXywgZXYtPnR5cGUsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKChyY29kZSA9PSBSU1BfQU5ZIHx8IHJjb2RlID09IGV2LT50eXBlKQpAQCAtMTcwNiwxNCArMTcwNCwxNCBAQAogCQl9IGVsc2UgewogCQkJLyogU2VuZCBjb21tYW5kIHRvIG1vZGVtIGlmIG5vdCBOVUxMLi4uICovCiAJCQlpZiAocF9jb21tYW5kLypyZXAtPmNvbW1hbmQqLykgewotCQkJCWlmIChhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpCisJCQkJaWYgKGNzLT5jb25uZWN0ZWQpCiAJCQkJCXNlbmRfY29tbWFuZChjcywgcF9jb21tYW5kLAotCQkJCQkgICAgICAgICAgICAgc2VuZGNpZCwgY3MtPmRsZSwKLQkJCQkJICAgICAgICAgICAgIEdGUF9BVE9NSUMpOworCQkJCQkJICAgICBzZW5kY2lkLCBjcy0+ZGxlLAorCQkJCQkJICAgICBHRlBfQVRPTUlDKTsKIAkJCQllbHNlCiAJCQkJCWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCBhdF9zdGF0ZSwKLQkJCQkJICAgICAgICAgICAgICAgICAgUlNQX05PREVWLAotCQkJCQkgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMKTsKKwkJCQkJCQkgIFJTUF9OT0RFViwKKwkJCQkJCQkgIE5VTEwsIDAsIE5VTEwpOwogCQkJfQogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKQEAgLTE3MjMsOCArMTcyMSw3IEBACiAJCQl9IGVsc2UgaWYgKHJlcC0+dGltZW91dCA+IDApIHsgLyogbmV3IHRpbWVvdXQgKi8KIAkJCQlhdF9zdGF0ZS0+dGltZXJfZXhwaXJlcyA9IHJlcC0+dGltZW91dCAqIDEwOwogCQkJCWF0X3N0YXRlLT50aW1lcl9hY3RpdmUgPSAxOwotCQkJCW5ld19pbmRleCgmYXRfc3RhdGUtPnRpbWVyX2luZGV4LAotCQkJCSAgICAgICAgICBNQVhfVElNRVJfSU5ERVgpOworCQkJCSsrYXRfc3RhdGUtPnRpbWVyX2luZGV4OwogCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJfQpAQCAtMTc0NCwxNyArMTc0MSwxNiBAQAogCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwogCWludCBpOwogCWludCBzZXF1ZW5jZTsKLQotCUlGTlVMTFJFVChjcyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAwKTsKIAogCWlmIChjcy0+Y3VyX2F0X3NlcSkgewotCQlkYmcoREVCVUdfQ01ELCAibm90IHNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHM6IGJ1c3kiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJub3Qgc2VhcmNoaW5nIHNjaGVkdWxlZCBjb21tYW5kczogYnVzeSIpOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKERFQlVHX0NNRCwgInNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHMiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHMiKTsKIAogCXNlcXVlbmNlID0gU0VRX05PTkU7CiAKQEAgLTE3OTUsOCArMTc5MSw5IEBACiAJfQogCiAJLyogb25seSBzd2l0Y2ggYmFjayB0byB1bmltb2RlbSBtb2RlLCBpZiBubyBjb21tYW5kcyBhcmUgcGVuZGluZyBhbmQgbm8gY2hhbm5lbHMgYXJlIHVwICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKGNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzID09IFBDX1VNTU9ERQotCSAgICAmJiAhYXRvbWljX3JlYWQoJmNzLT5jaWRtb2RlKQorCSAgICAmJiAhY3MtPmNpZG1vZGUKIAkgICAgJiYgbGlzdF9lbXB0eSgmY3MtPnRlbXBfYXRfc3RhdGVzKQogCSAgICAmJiBhdG9taWNfcmVhZCgmY3MtPm1vZGUpID09IE1fQ0lEKSB7CiAJCXNlcXVlbmNlID0gU0VRX1VNTU9ERTsKQEAgLTE4MTAsNiArMTgwNyw3IEBACiAJCQl9CiAJCX0KIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyAmPSB+UENfVU1NT0RFOwogCWlmIChzZXF1ZW5jZSAhPSBTRVFfTk9ORSkgewogCQlzY2hlZHVsZV9zZXF1ZW5jZShjcywgYXRfc3RhdGUsIHNlcXVlbmNlKTsKQEAgLTE4NjUsMTEgKzE4NjMsNyBAQAogCWlmIChjcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyAmIFBDX0NJRE1PREUpIHsKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJj0gflBDX0NJRE1PREU7CiAJCWlmIChhdG9taWNfcmVhZCgmY3MtPm1vZGUpID09IE1fVU5JTU9ERU0pIHsKLSNpZiAwCi0JCQljcy0+cmV0cnlfY291bnQgPSAyOwotI2Vsc2UKIAkJCWNzLT5yZXRyeV9jb3VudCA9IDE7Ci0jZW5kaWYKIAkJCXNjaGVkdWxlX3NlcXVlbmNlKGNzLCAmY3MtPmF0X3N0YXRlLCBTRVFfQ0lETU9ERSk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTE4OTcsNyArMTg5MSw3IEBACiAJCQlzd2l0Y2ggKGF0b21pY19yZWFkKCZjcy0+bW9kZSkpIHsKIAkJCWNhc2UgTV9VTklNT0RFTToKIAkJCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSURNT0RFOwotCQkJCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKKwkJCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQkJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAkJCQlyZXR1cm47CiAjaWZkZWYgR0lHX01BWUlOSVRPTkRJQUwKQEAgLTE5MjYsMTggKzE5MjAsMjEgQEAKIAlpbnQgaTsKIAlpbnQgY2hlY2tfZmxhZ3MgPSAwOwogCWludCB3YXNfYnVzeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogbm8gbG9ja2luZyBuZWVkZWQgKG9ubHkgb25lIHJlYWRlcikgKi8KLQloZWFkID0gYXRvbWljX3JlYWQoJmNzLT5ldl9oZWFkKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKKwloZWFkID0gY3MtPmV2X2hlYWQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMiAqIE1BWF9FVkVOVFM7ICsraSkgewotCQl0YWlsID0gYXRvbWljX3JlYWQoJmNzLT5ldl90YWlsKTsKKwkJdGFpbCA9IGNzLT5ldl90YWlsOwogCQlpZiAodGFpbCA9PSBoZWFkKSB7CiAJCQlpZiAoIWNoZWNrX2ZsYWdzICYmICFhdG9taWNfcmVhZCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcpKQogCQkJCWJyZWFrOwogCQkJY2hlY2tfZmxhZ3MgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKIAkJCXByb2Nlc3NfY29tbWFuZF9mbGFncyhjcyk7Ci0JCQl0YWlsID0gYXRvbWljX3JlYWQoJmNzLT5ldl90YWlsKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOworCQkJdGFpbCA9IGNzLT5ldl90YWlsOwogCQkJaWYgKHRhaWwgPT0gaGVhZCkgewogCQkJCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb21tYW5kc19wZW5kaW5nKSkKIAkJCQkJYnJlYWs7CkBAIC0xOTQ3LDE4ICsxOTQ0LDIzIEBACiAKIAkJZXYgPSBjcy0+ZXZlbnRzICsgaGVhZDsKIAkJd2FzX2J1c3kgPSBjcy0+Y3VyX2F0X3NlcSAhPSBTRVFfTk9ORTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKIAkJcHJvY2Vzc19ldmVudChjcywgZXYpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKIAkJa2ZyZWUoZXYtPnB0cik7CiAJCWV2LT5wdHIgPSBOVUxMOwogCQlpZiAod2FzX2J1c3kgJiYgY3MtPmN1cl9hdF9zZXEgPT0gU0VRX05PTkUpCiAJCQljaGVja19mbGFncyA9IDE7CiAKIAkJaGVhZCA9IChoZWFkICsgMSkgJSBNQVhfRVZFTlRTOwotCQlhdG9taWNfc2V0KCZjcy0+ZXZfaGVhZCwgaGVhZCk7CisJCWNzLT5ldl9oZWFkID0gaGVhZDsKIAl9CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOworCiAJaWYgKGkgPT0gMiAqIE1BWF9FVkVOVFMpIHsKLQkJZXJyKCJpbmZpbml0ZSBsb29wIGluIHByb2Nlc3NfZXZlbnRzOyBhYm9ydGluZy4iKTsKKwkJZGV2X2Vycihjcy0+ZGV2LAorCQkJImluZmluaXRlIGxvb3AgaW4gcHJvY2Vzc19ldmVudHM7IGFib3J0aW5nLlxuIik7CiAJfQogfQogCkBAIC0xOTcwLDEyICsxOTcyLDkgQEAKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIGRhdGE7CiAKLQlJRk5VTExSRVQoY3MpOwotCUlGTlVMTFJFVChjcy0+aW5idWYpOwotCiAJLyogaGFuZGxlIGluY29taW5nIGRhdGEgb24gY29udHJvbC9jb21tb24gY2hhbm5lbCAqLwogCWlmIChhdG9taWNfcmVhZCgmY3MtPmluYnVmLT5oZWFkKSAhPSBhdG9taWNfcmVhZCgmY3MtPmluYnVmLT50YWlsKSkgewotCQlkYmcoREVCVUdfSU5UUiwgInByb2Nlc3NpbmcgbmV3IGRhdGEiKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyBuZXcgZGF0YSIpOwogCQljcy0+b3BzLT5oYW5kbGVfaW5wdXQoY3MtPmluYnVmKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaCBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaAppbmRleCA3MjllZGNkLi45ZDIxYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCkBAIC0xLDExICsxLDE2IEBACi0vKiBTaWVtZW5zIEdpZ2FzZXQgMzA3eCBkcml2ZXIKKy8qCisgKiBTaWVtZW5zIEdpZ2FzZXQgMzA3eCBkcml2ZXIKICAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgYWxsIGNvbm5lY3Rpb24gdmFyaWFudHMKICAqCi0gKiBXcml0dGVuIGJ5IFN0ZWZhbiBFaWxlcnMgPEVpbGVycy5TdGVmYW5AZXBvc3QuZGU+CisgKiBXcml0dGVuIGJ5IFN0ZWZhbiBFaWxlcnMKICAqICAgICAgICBhbmQgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+CiAgKgotICogVmVyc2lvbjogJElkOiBnaWdhc2V0LmgsdiAxLjk3LjQuMjYgMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2lmbmRlZiBHSUdBU0VUX0gKQEAgLTE1LDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbmlmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CkBAIC0yNywyMSArMzEsMjIgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2RlZmluZSBHSUdfVkVSU0lPTiB7MCw1LDAsMH0KICNkZWZpbmUgR0lHX0NPTVBBVCAgezAsNCwwLDB9CiAKLSNkZWZpbmUgTUFYX1JFQ19QQVJBTVMgMTAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4LiBudW1iZXIgb2YgcGFyYW1zIGluIHJlc3BvbnNlIHN0cmluZyAqLwotI2RlZmluZSBNQVhfUkVTUF9TSVpFIDUxMiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXguIHNpemUgb2YgYSByZXNwb25zZSBzdHJpbmcgKi8KLSNkZWZpbmUgSFdfSERSX0xFTiAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVhZGVyIHNpemUgdXNlZCB0byBzdG9yZSBhY2sgaW5mbyAqLworI2RlZmluZSBNQVhfUkVDX1BBUkFNUyAxMAkvKiBNYXguIG51bWJlciBvZiBwYXJhbXMgaW4gcmVzcG9uc2Ugc3RyaW5nICovCisjZGVmaW5lIE1BWF9SRVNQX1NJWkUgNTEyCS8qIE1heC4gc2l6ZSBvZiBhIHJlc3BvbnNlIHN0cmluZyAqLworI2RlZmluZSBIV19IRFJfTEVOIDIJCS8qIEhlYWRlciBzaXplIHVzZWQgdG8gc3RvcmUgYWNrIGluZm8gKi8KIAotI2RlZmluZSBNQVhfRVZFTlRTIDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIGV2ZW50IHF1ZXVlICovCisjZGVmaW5lIE1BWF9FVkVOVFMgNjQJCS8qIHNpemUgb2YgZXZlbnQgcXVldWUgKi8KIAogI2RlZmluZSBSQlVGU0laRSA4MTkyCi0jZGVmaW5lIFNCVUZTSVpFIDQwOTYJCQkJLyogc2tfYnVmZiBwYXlsb2FkIHNpemUgKi8KKyNkZWZpbmUgU0JVRlNJWkUgNDA5NgkJLyogc2tfYnVmZiBwYXlsb2FkIHNpemUgKi8KIAotI2RlZmluZSBNQVhfQlVGX1NJWkUgKFNCVUZTSVpFIC0gMikJCS8qIE1heC4gc2l6ZSBvZiBhIGRhdGEgcGFja2V0IGZyb20gTEwgKi8KLSNkZWZpbmUgVFJBTlNCVUZTSVpFIDc2OAkJCS8qIGJ5dGVzIHBlciBza2IgZm9yIHRyYW5zcGFyZW50IHJlY2VpdmUgKi8KKyNkZWZpbmUgVFJBTlNCVUZTSVpFIDc2OAkvKiBieXRlcyBwZXIgc2tiIGZvciB0cmFuc3BhcmVudCByZWNlaXZlICovCisjZGVmaW5lIE1BWF9CVUZfU0laRSAoU0JVRlNJWkUgLSAyKQkvKiBNYXguIHNpemUgb2YgYSBkYXRhIHBhY2tldCBmcm9tIExMICovCiAKIC8qIGNvbXBpbGUgdGltZSBvcHRpb25zICovCiAjZGVmaW5lIEdJR19NQUpPUiAwCkBAIC01MCwxMCArNTUsNyBAQAogI2RlZmluZSBHSUdfUkVUUllDSUQKICNkZWZpbmUgR0lHX1g3NQogCi0jZGVmaW5lIE1BWF9USU1FUl9JTkRFWCAxMDAwCi0jZGVmaW5lIE1BWF9TRVFfSU5ERVggICAxMDAwCi0KLSNkZWZpbmUgR0lHX1RJQ0sgKEhaIC8gMTApCisjZGVmaW5lIEdJR19USUNLIDEwMAkJLyogaW4gbWlsbGlzZWNvbmRzICovCiAKIC8qIHRpbWVvdXQgdmFsdWVzICh1bml0OiAxIHNlYykgKi8KICNkZWZpbmUgSU5JVF9USU1FT1VUIDEKQEAgLTY3LDc0ICs2OSw4OSBAQAogCiAjZGVmaW5lIE1BWEFDVCAzCiAKLSNkZWZpbmUgSUZOVUxMKGEpICAgICAgICAgaWYgKHVubGlrZWx5KCEoYSkpKQotI2RlZmluZSBJRk5VTExSRVQoYSkgICAgICBpZiAodW5saWtlbHkoIShhKSkpIHtlcnIoIiVzPT1OVUxMIGF0ICVzOiVkISIsICNhLCBfX0ZJTEVfXywgX19MSU5FX18pOyByZXR1cm47IH0KLSNkZWZpbmUgSUZOVUxMUkVUVkFMKGEsYikgaWYgKHVubGlrZWx5KCEoYSkpKSB7ZXJyKCIlcz09TlVMTCBhdCAlczolZCEiLCAjYSwgX19GSUxFX18sIF9fTElORV9fKTsgcmV0dXJuIChiKTsgfQotI2RlZmluZSBJRk5VTExDT05UKGEpICAgICBpZiAodW5saWtlbHkoIShhKSkpIHtlcnIoIiVzPT1OVUxMIGF0ICVzOiVkISIsICNhLCBfX0ZJTEVfXywgX19MSU5FX18pOyBjb250aW51ZTsgfQotI2RlZmluZSBJRk5VTExHT1RPKGEsYikgICBpZiAodW5saWtlbHkoIShhKSkpIHtlcnIoIiVzPT1OVUxMIGF0ICVzOiVkISIsICNhLCBfX0ZJTEVfXywgX19MSU5FX18pOyBnb3RvIGI7IH0KLQogZXh0ZXJuIGludCBnaWdhc2V0X2RlYnVnbGV2ZWw7CS8qICJuZWVkcyIgY2FzdCB0byAoZW51bSBkZWJ1Z2xldmVsKSAqLwogCi0vKiBhbnkgY29tYmluYXRpb24gb2YgdGhlc2UgY2FuIGJlIGdpdmVuIHdpdGggdGhlICdkZWJ1Zz0nIHBhcmFtZXRlciB0byBpbnNtb2QsIGUuZy4KLSAqICdpbnNtb2QgdXNiX2dpZ2FzZXQubyBkZWJ1Zz0weDJjJyB3aWxsIHNldCBERUJVR19PUEVOLCBERUJVR19DTUQgYW5kIERFQlVHX0lOVFIuICovCisvKiBhbnkgY29tYmluYXRpb24gb2YgdGhlc2UgY2FuIGJlIGdpdmVuIHdpdGggdGhlICdkZWJ1Zz0nIHBhcmFtZXRlciB0byBpbnNtb2QsCisgKiBlLmcuICdpbnNtb2QgdXNiX2dpZ2FzZXQubyBkZWJ1Zz0weDJjJyB3aWxsIHNldCBERUJVR19PUEVOLCBERUJVR19DTUQgYW5kCisgKiBERUJVR19JTlRSLgorICovCiBlbnVtIGRlYnVnbGV2ZWwgeyAvKiB1cCB0byAyNCBiaXRzIChhdG9taWNfdCkgKi8KIAlERUJVR19SRUcJICA9IDB4MDAwMiwgLyogc2VyaWFsIHBvcnQgSS9PIHJlZ2lzdGVyIG9wZXJhdGlvbnMgKi8KIAlERUJVR19PUEVOCSAgPSAweDAwMDQsIC8qIG9wZW4vY2xvc2Ugc2VyaWFsIHBvcnQgKi8KIAlERUJVR19JTlRSCSAgPSAweDAwMDgsIC8qIGludGVycnVwdCBwcm9jZXNzaW5nICovCi0JREVCVUdfSU5UUl9EVU1QICAgPSAweDAwMTAsIC8qIEFjdGl2YXRpbmcgaGV4ZHVtcCBkZWJ1ZyBvdXRwdXQgb24gaW50ZXJydXB0Ci0JCQkJICAgICAgcmVxdWVzdHMsIG5vdCBhdmFpbGFibGUgYXMgcnVuLXRpbWUgb3B0aW9uICovCisJREVCVUdfSU5UUl9EVU1QCSAgPSAweDAwMTAsIC8qIEFjdGl2YXRpbmcgaGV4ZHVtcCBkZWJ1ZyBvdXRwdXQgb24KKwkJCQkgICAgICAgaW50ZXJydXB0IHJlcXVlc3RzLCBub3QgYXZhaWxhYmxlIGFzCisJCQkJICAgICAgIHJ1bi10aW1lIG9wdGlvbiAqLwogCURFQlVHX0NNRAkgID0gMHgwMDAyMCwgLyogc2VudC9yZWNlaXZlZCBMTCBjb21tYW5kcyAqLwogCURFQlVHX1NUUkVBTQkgID0gMHgwMDA0MCwgLyogYXBwbGljYXRpb24gZGF0YSBzdHJlYW0gSS9PIGV2ZW50cyAqLwogCURFQlVHX1NUUkVBTV9EVU1QID0gMHgwMDA4MCwgLyogYXBwbGljYXRpb24gZGF0YSBzdHJlYW0gY29udGVudCAqLwogCURFQlVHX0xMREFUQQkgID0gMHgwMDEwMCwgLyogc2VudC9yZWNlaXZlZCBMTCBkYXRhICovCi0JREVCVUdfSU5UUl8wCSAgPSAweDAwMjAwLCAvKiBzZXJpYWwgcG9ydCBvdXRwdXQgaW50ZXJydXB0IHByb2Nlc3NpbmcgKi8KKwlERUJVR19JTlRSXzAJICA9IDB4MDAyMDAsIC8qIHNlcmlhbCBwb3J0IGludGVycnVwdCBwcm9jZXNzaW5nICovCiAJREVCVUdfRFJJVkVSCSAgPSAweDAwNDAwLCAvKiBkcml2ZXIgc3RydWN0dXJlICovCiAJREVCVUdfSERMQwkgID0gMHgwMDgwMCwgLyogTTEweCBIRExDIHByb2Nlc3NpbmcgKi8KIAlERUJVR19XUklURQkgID0gMHgwMTAwMCwgLyogTTEwNSBkYXRhIHdyaXRlICovCi0JREVCVUdfVFJBTlNDTUQgICAgPSAweDAyMDAwLCAvKkFULUNPTU1BTkRTK1JFU1BPTlNFUyovCi0JREVCVUdfTUNNRCAgICAgICAgPSAweDA0MDAwLCAvKkNPTU1BTkRTIFRIQVQgQVJFIFNFTlQgVkVSWSBPRlRFTiovCi0JREVCVUdfSU5JVAkgID0gMHgwODAwMCwgLyogKGRlKWFsbG9jYXRpb24raW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzICovCisJREVCVUdfVFJBTlNDTUQJICA9IDB4MDIwMDAsIC8qIEFULUNPTU1BTkRTK1JFU1BPTlNFUyAqLworCURFQlVHX01DTUQJICA9IDB4MDQwMDAsIC8qIENPTU1BTkRTIFRIQVQgQVJFIFNFTlQgVkVSWSBPRlRFTiAqLworCURFQlVHX0lOSVQJICA9IDB4MDgwMDAsIC8qIChkZSlhbGxvY2F0aW9uK2luaXRpYWxpemF0aW9uIG9mIGRhdGEKKwkJCQkJc3RydWN0dXJlcyAqLwogCURFQlVHX0xPQ0sJICA9IDB4MTAwMDAsIC8qIHNlbWFwaG9yZSBvcGVyYXRpb25zICovCiAJREVCVUdfT1VUUFVUCSAgPSAweDIwMDAwLCAvKiBvdXRwdXQgdG8gZGV2aWNlICovCi0JREVCVUdfSVNPICAgICAgICAgPSAweDQwMDAwLCAvKiBpc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KKwlERUJVR19JU08JICA9IDB4NDAwMDAsIC8qIGlzb2Nocm9ub3VzIHRyYW5zZmVycyAqLwogCURFQlVHX0lGCSAgPSAweDgwMDAwLCAvKiBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKi8KLQlERUJVR19VU0JSRVEJICA9IDB4MTAwMDAwLCAvKiBVU0IgY29tbXVuaWNhdGlvbiAoZXhjZXB0IHBheWxvYWQgZGF0YSkgKi8KLQlERUJVR19MT0NLQ01EICAgICA9IDB4MjAwMDAwLCAvKiBBVCBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIHdoZW4gTVNfTE9DS0VEICovCisJREVCVUdfVVNCUkVRCSAgPSAweDEwMDAwMCwgLyogVVNCIGNvbW11bmljYXRpb24gKGV4Y2VwdCBwYXlsb2FkCisJCQkJCSBkYXRhKSAqLworCURFQlVHX0xPQ0tDTUQJICA9IDB4MjAwMDAwLCAvKiBBVCBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIHdoZW4KKwkJCQkJIE1TX0xPQ0tFRCAqLwogCi0JREVCVUdfQU5ZCSAgPSAweDNmZmZmZiwgLyogcHJpbnQgbWVzc2FnZSBpZiBhbnkgb2YgdGhlIG90aGVycyBpcyBhY3RpdmF0ZWQgKi8KKwlERUJVR19BTlkJICA9IDB4M2ZmZmZmLCAvKiBwcmludCBtZXNzYWdlIGlmIGFueSBvZiB0aGUgb3RoZXJzIGlzCisJCQkJCSBhY3RpdmF0ZWQgKi8KIH07CiAKLSNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotI2RlZmluZSBERUJVR19ERUZBVUxUIChERUJVR19JTklUIHwgREVCVUdfVFJBTlNDTUQgfCBERUJVR19DTUQgfCBERUJVR19VU0JSRVEpCi0vLyNkZWZpbmUgREVCVUdfREVGQVVMVCAoREVCVUdfTE9DSyB8IERFQlVHX0lOSVQgfCBERUJVR19UUkFOU0NNRCB8IERFQlVHX0NNRCB8IERFQlVGX0lGIHwgREVCVUdfRFJJVkVSIHwgREVCVUdfT1VUUFVUIHwgREVCVUdfSU5UUikKLSNlbHNlCi0jZGVmaW5lIERFQlVHX0RFRkFVTFQgMAorLyogbWlzc2luZyBmcm9tIGxpbnV4L2RldmljZS5oIC4uLiAqLworI2lmbmRlZiBkZXZfbm90aWNlCisjZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfcHJpbnRrKEtFUk5fTk9USUNFICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogI2VuZGlmCiAKLS8qIHJlZGVmaW5lIHN5c2xvZyBtYWNyb3MgdG8gcHJlcGVuZCBtb2R1bGUgbmFtZSBpbnN0ZWFkIG9mIGVudGlyZSBzb3VyY2UgcGF0aCAqLwotLyogVGhlIHNwYWNlIGJlZm9yZSB0aGUgY29tbWEgaW4gIiwgIyMiIGlzIG5lZWRlZCBieSBnY2MgMi45NSAqLwotI3VuZGVmIGluZm8KLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0ICJcbiIsIFRISVNfTU9EVUxFID8gVEhJU19NT0RVTEUtPm5hbWUgOiAiZ2lnYXNldF9odyIgLCAjIyBhcmcpCi0KLSN1bmRlZiBub3RpY2UKLSNkZWZpbmUgbm90aWNlKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKQotCi0jdW5kZWYgd2FybgotI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmb3JtYXQgIlxuIiwgVEhJU19NT0RVTEUgPyBUSElTX01PRFVMRS0+bmFtZSA6ICJnaWdhc2V0X2h3IiAsICMjIGFyZykKLQorLyogS2VybmVsIG1lc3NhZ2UgbWFjcm9zIGZvciBzaXR1YXRpb25zIHdoZXJlIGRldl9wcmludGsgYW5kIGZyaWVuZHMgY2Fubm90IGJlCisgKiB1c2VkIGZvciBsYWNrIG9mIHJlbGlhYmxlIGFjY2VzcyB0byBhIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBsaW51eC91c2IuaCBhbHJlYWR5IGNvbnRhaW5zIHRoZXNlIGJ1dCBpbiBhbiBvYnNvbGV0ZSBmb3JtIHdoaWNoIGNsdXR0ZXJzCisgKiB0aGUgbG9nIG5lZWRsZXNzbHksIGFuZCBhY2NvcmRpbmcgdG8gdGhlIFVTQiBtYWludGFpbmVyIHRob3NlIHNob3VsZCBiZQorICogcmVtb3ZlZCByYXRoZXIgdGhhbiBmaXhlZCBhbnl3YXkuCisgKi8KICN1bmRlZiBlcnIKLSNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKQorI3VuZGVmIGluZm8KKyN1bmRlZiB3YXJuCisjdW5kZWYgbm90aWNlCiAKLSN1bmRlZiBkYmcKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogIiBcCisJZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBcCisJZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUgIjogIiBcCisJZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIG5vdGljZShmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fTk9USUNFIEtCVUlMRF9NT0ROQU1FICI6ICIgXAorCWZvcm1hdCAiXG4iICwgIyMgYXJnKQorCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKLSNkZWZpbmUgZGJnKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAodW5saWtlbHkoKChlbnVtIGRlYnVnbGV2ZWwpZ2lnYXNldF9kZWJ1Z2xldmVsKSAmIChsZXZlbCkpKSBcCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBnaWdfZGJnKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoKChlbnVtIGRlYnVnbGV2ZWwpZ2lnYXNldF9kZWJ1Z2xldmVsKSAmIChsZXZlbCkpKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiAiIGZvcm1hdCAiXG4iLCBcCisJCQkgICAgICAgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHX0RFRkFVTFQgKERFQlVHX0lOSVQgfCBERUJVR19UUkFOU0NNRCB8IERFQlVHX0NNRCB8IERFQlVHX1VTQlJFUSkKKwogI2Vsc2UKLSNkZWZpbmUgZGJnKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgZ2lnX2RiZyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBERUJVR19ERUZBVUxUIDAKKwogI2VuZGlmCiAKIHZvaWQgZ2lnYXNldF9kYmdfYnVmZmVyKGVudW0gZGVidWdsZXZlbCBsZXZlbCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZnJvbV91c2VyKTsKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Zik7CiAKIC8qIGNvbm5lY3Rpb24gc3RhdGUgKi8KICNkZWZpbmUgWlNBVV9OT05FCQkJMApAQCAtMTQ4LDEzICsxNjUsMTQgQEAKICNkZWZpbmUgWlNBVV9VTktOT1dOCQkJLTEKIAogLyogVVNCIGNvbnRyb2wgdHJhbnNmZXIgcmVxdWVzdHMgKi8KLSNkZWZpbmUgT1VUX1ZFTkRPUl9SRVEJCQkoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQpCi0jZGVmaW5lIElOX1ZFTkRPUl9SRVEJCQkoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkKKyNkZWZpbmUgT1VUX1ZFTkRPUl9SRVEJKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKQorI2RlZmluZSBJTl9WRU5ET1JfUkVRCShVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKQogCiAvKiBpbnQtaW4tZXZlbnRzIDMwNzAgKi8KICNkZWZpbmUgSERfQjFfRkxPV19DT05UUk9MCQkweDgwCiAjZGVmaW5lIEhEX0IyX0ZMT1dfQ09OVFJPTAkJMHg4MQotI2RlZmluZSBIRF9SRUNFSVZFQVREQVRBX0FDSwkJKDB4MzUpCQkvLyAzMDcwCQkvLyBhdHQ6IEhEX1JFQ0VJVkU+PkFUPDxEQVRBX0FDSworI2RlZmluZSBIRF9SRUNFSVZFQVREQVRBX0FDSwkJKDB4MzUpCQkvLyAzMDcwCisJCQkJCQkvLyBhdHQ6IEhEX1JFQ0VJVkU+PkFUPDxEQVRBX0FDSwogI2RlZmluZSBIRF9SRUFEWV9TRU5EX0FUREFUQQkJKDB4MzYpCQkvLyAzMDcwCiAjZGVmaW5lIEhEX09QRU5fQVRDSEFOTkVMX0FDSwkJKDB4MzcpCQkvLyAzMDcwCiAjZGVmaW5lIEhEX0NMT1NFX0FUQ0hBTk5FTF9BQ0sJCSgweDM4KQkJLy8gMzA3MApAQCAtMTgxLDE3ICsxOTksMTggQEAKICNkZWZpbmUJSERfQ0xPU0VfQVRDSEFOTkVMCQkoMHgyOSkJCS8vIDMwNzAKIAogLyogVVNCIGZyYW1lcyBmb3IgaXNvY2hyb25vdXMgdHJhbnNmZXIgKi8KLSNkZWZpbmUgQkFTX0ZSQU1FVElNRQkxCQkvKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gZnJhbWVzICovCi0jZGVmaW5lIEJBU19OVU1GUkFNRVMJOAkJLyogbnVtYmVyIG9mIGZyYW1lcyBwZXIgVVJCICovCi0jZGVmaW5lIEJBU19NQVhGUkFNRQkxNgkJLyogYWxsb2NhdGVkIGJ5dGVzIHBlciBmcmFtZSAqLwotI2RlZmluZSBCQVNfTk9STUZSQU1FCTgJCS8qIHNlbmQgc2l6ZSB3aXRob3V0IGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBCQVNfSElHSEZSQU1FCTEwCQkvKiAiICAgICIgICAgd2l0aCBwb3NpdGl2ZSBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgQkFTX0xPV0ZSQU1FCTUJCS8qICIgICAgIiAgICB3aXRoIG5lZ2F0aXZlIGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBCQVNfQ09SUkZSQU1FUwk0CQkvKiBmbG93IGNvbnRyb2wgbXVsdGlwbGljYXRvciAqLworI2RlZmluZSBCQVNfRlJBTUVUSU1FCTEJLyogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGZyYW1lcyAqLworI2RlZmluZSBCQVNfTlVNRlJBTUVTCTgJLyogbnVtYmVyIG9mIGZyYW1lcyBwZXIgVVJCICovCisjZGVmaW5lIEJBU19NQVhGUkFNRQkxNgkvKiBhbGxvY2F0ZWQgYnl0ZXMgcGVyIGZyYW1lICovCisjZGVmaW5lIEJBU19OT1JNRlJBTUUJOAkvKiBzZW5kIHNpemUgd2l0aG91dCBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkFTX0hJR0hGUkFNRQkxMAkvKiAiICAgICIgICAgd2l0aCBwb3NpdGl2ZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkFTX0xPV0ZSQU1FCTUJLyogIiAgICAiICAgIHdpdGggbmVnYXRpdmUgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJBU19DT1JSRlJBTUVTCTQJLyogZmxvdyBjb250cm9sIG11bHRpcGxpY2F0b3IgKi8KIAotI2RlZmluZSBCQVNfSU5CVUZTSVpFCShCQVNfTUFYRlJBTUUgKiBCQVNfTlVNRlJBTUVTKSAvKiBzaXplIG9mIGlzb2Nocm9ub3VzIGlucHV0IGJ1ZmZlciBwZXIgVVJCICovCi0jZGVmaW5lIEJBU19PVVRCVUZTSVpFCTQwOTYJCS8qIHNpemUgb2YgY29tbW9uIGlzb2Nocm9ub3VzIG91dHB1dCBidWZmZXIgKi8KLSNkZWZpbmUgQkFTX09VVEJVRlBBRAlCQVNfTUFYRlJBTUUJLyogc2l6ZSBvZiBwYWQgYXJlYSBmb3IgaXNvY2hyb25vdXMgb3V0cHV0IGJ1ZmZlciAqLworI2RlZmluZSBCQVNfSU5CVUZTSVpFCShCQVNfTUFYRlJBTUUgKiBCQVNfTlVNRlJBTUVTKQorCQkJCQkvKiBzaXplIG9mIGlzb2MgaW4gYnVmIHBlciBVUkIgKi8KKyNkZWZpbmUgQkFTX09VVEJVRlNJWkUJNDA5NgkJLyogc2l6ZSBvZiBjb21tb24gaXNvYyBvdXQgYnVmZmVyICovCisjZGVmaW5lIEJBU19PVVRCVUZQQUQJQkFTX01BWEZSQU1FCS8qIHNpemUgb2YgcGFkIGFyZWEgZm9yIGlzb2Mgb3V0IGJ1ZiAqLwogCiAjZGVmaW5lIEJBU19JTlVSQlMJMwogI2RlZmluZSBCQVNfT1VUVVJCUwkzCkBAIC0yMDcsNDAgKzIyNiw0MCBAQAogI2RlZmluZSBBVF9OVU0JCTcKIAogLyogdmFyaWFibGVzIGluIHN0cnVjdCBhdF9zdGF0ZV90ICovCi0jZGVmaW5lIFZBUl9aU0FVICAgMAotI2RlZmluZSBWQVJfWkRMRSAgIDEKLSNkZWZpbmUgVkFSX1pWTFMgICAyCi0jZGVmaW5lIFZBUl9aQ1RQICAgMwotI2RlZmluZSBWQVJfTlVNICAgIDQKKyNkZWZpbmUgVkFSX1pTQVUJMAorI2RlZmluZSBWQVJfWkRMRQkxCisjZGVmaW5lIFZBUl9aVkxTCTIKKyNkZWZpbmUgVkFSX1pDVFAJMworI2RlZmluZSBWQVJfTlVNCQk0CiAKLSNkZWZpbmUgU1RSX05NQlIgICAwCi0jZGVmaW5lIFNUUl9aQ1BOICAgMQotI2RlZmluZSBTVFJfWkNPTiAgIDIKLSNkZWZpbmUgU1RSX1pCQyAgICAzCi0jZGVmaW5lIFNUUl9aSExDICAgNAotI2RlZmluZSBTVFJfTlVNICAgIDUKKyNkZWZpbmUgU1RSX05NQlIJMAorI2RlZmluZSBTVFJfWkNQTgkxCisjZGVmaW5lIFNUUl9aQ09OCTIKKyNkZWZpbmUgU1RSX1pCQwkJMworI2RlZmluZSBTVFJfWkhMQwk0CisjZGVmaW5lIFNUUl9OVU0JCTUKIAotI2RlZmluZSBFVl9USU1FT1VUICAgICAgLTEwNQotI2RlZmluZSBFVl9JRl9WRVIgICAgICAgLTEwNgotI2RlZmluZSBFVl9QUk9DX0NJRE1PREUgLTEwNwotI2RlZmluZSBFVl9TSFVURE9XTiAgICAgLTEwOAotI2RlZmluZSBFVl9TVEFSVCAgICAgICAgLTExMAotI2RlZmluZSBFVl9TVE9QICAgICAgICAgLTExMQotI2RlZmluZSBFVl9JRl9MT0NLICAgICAgLTExMgotI2RlZmluZSBFVl9QUk9UT19MMiAgICAgLTExMwotI2RlZmluZSBFVl9BQ0NFUFQgICAgICAgLTExNAotI2RlZmluZSBFVl9ESUFMICAgICAgICAgLTExNQotI2RlZmluZSBFVl9IVVAgICAgICAgICAgLTExNgotI2RlZmluZSBFVl9CQ19PUEVOICAgICAgLTExNwotI2RlZmluZSBFVl9CQ19DTE9TRUQgICAgLTExOAorI2RlZmluZSBFVl9USU1FT1VUCS0xMDUKKyNkZWZpbmUgRVZfSUZfVkVSCS0xMDYKKyNkZWZpbmUgRVZfUFJPQ19DSURNT0RFCS0xMDcKKyNkZWZpbmUgRVZfU0hVVERPV04JLTEwOAorI2RlZmluZSBFVl9TVEFSVAktMTEwCisjZGVmaW5lIEVWX1NUT1AJCS0xMTEKKyNkZWZpbmUgRVZfSUZfTE9DSwktMTEyCisjZGVmaW5lIEVWX1BST1RPX0wyCS0xMTMKKyNkZWZpbmUgRVZfQUNDRVBUCS0xMTQKKyNkZWZpbmUgRVZfRElBTAkJLTExNQorI2RlZmluZSBFVl9IVVAJCS0xMTYKKyNkZWZpbmUgRVZfQkNfT1BFTgktMTE3CisjZGVmaW5lIEVWX0JDX0NMT1NFRAktMTE4CiAKIC8qIGlucHV0IHN0YXRlICovCi0jZGVmaW5lIElOU19jb21tYW5kICAgICAweDAwMDEKLSNkZWZpbmUgSU5TX0RMRV9jaGFyICAgIDB4MDAwMgotI2RlZmluZSBJTlNfYnl0ZV9zdHVmZiAgMHgwMDA0Ci0jZGVmaW5lIElOU19oYXZlX2RhdGEgICAweDAwMDgKLSNkZWZpbmUgSU5TX3NraXBfZnJhbWUgIDB4MDAxMAotI2RlZmluZSBJTlNfRExFX2NvbW1hbmQgMHgwMDIwCisjZGVmaW5lIElOU19jb21tYW5kCTB4MDAwMQorI2RlZmluZSBJTlNfRExFX2NoYXIJMHgwMDAyCisjZGVmaW5lIElOU19ieXRlX3N0dWZmCTB4MDAwNAorI2RlZmluZSBJTlNfaGF2ZV9kYXRhCTB4MDAwOAorI2RlZmluZSBJTlNfc2tpcF9mcmFtZQkweDAwMTAKKyNkZWZpbmUgSU5TX0RMRV9jb21tYW5kCTB4MDAyMAogI2RlZmluZSBJTlNfZmxhZ19odW50CTB4MDA0MAogCiAvKiBjaGFubmVsIHN0YXRlICovCkBAIC0yNDgsMjcgKzI2NywyNyBAQAogI2RlZmluZSBDSFNfQl9VUAkweDAyCiAjZGVmaW5lIENIU19OT1RJRllfTEwJMHgwNAogCi0jZGVmaW5lIElDQUxMX1JFSkVDVCAgMAotI2RlZmluZSBJQ0FMTF9BQ0NFUFQgIDEKLSNkZWZpbmUgSUNBTExfSUdOT1JFICAyCisjZGVmaW5lIElDQUxMX1JFSkVDVAkwCisjZGVmaW5lIElDQUxMX0FDQ0VQVAkxCisjZGVmaW5lIElDQUxMX0lHTk9SRQkyCiAKIC8qIGRldmljZSBzdGF0ZSAqLwotI2RlZmluZSBNU19VTklOSVRJQUxJWkVEICAgICAgICAwCi0jZGVmaW5lIE1TX0lOSVQgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTVNfTE9DS0VEICAgICAgICAgICAgICAgMgotI2RlZmluZSBNU19TSFVURE9XTiAgICAgICAgICAgICAzCi0jZGVmaW5lIE1TX1JFQ09WRVIgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTVNfUkVBRFkgICAgICAgICAgICAgICAgNQorI2RlZmluZSBNU19VTklOSVRJQUxJWkVECTAKKyNkZWZpbmUgTVNfSU5JVAkJCTEKKyNkZWZpbmUgTVNfTE9DS0VECQkyCisjZGVmaW5lIE1TX1NIVVRET1dOCQkzCisjZGVmaW5lIE1TX1JFQ09WRVIJCTQKKyNkZWZpbmUgTVNfUkVBRFkJCTUKIAogLyogbW9kZSAqLwotI2RlZmluZSBNX1VOS05PV04gICAgICAgMAotI2RlZmluZSBNX0NPTkZJRyAgICAgICAgMQotI2RlZmluZSBNX1VOSU1PREVNICAgICAgMgotI2RlZmluZSBNX0NJRCAgICAgICAgICAgMworI2RlZmluZSBNX1VOS05PV04JMAorI2RlZmluZSBNX0NPTkZJRwkxCisjZGVmaW5lIE1fVU5JTU9ERU0JMgorI2RlZmluZSBNX0NJRAkJMwogCiAvKiBzdGFydCBtb2RlICovCi0jZGVmaW5lIFNNX0xPQ0tFRCAgICAgICAwCi0jZGVmaW5lIFNNX0lTRE4gICAgICAgICAxIC8qIGRlZmF1bHQgKi8KKyNkZWZpbmUgU01fTE9DS0VECTAKKyNkZWZpbmUgU01fSVNETgkJMSAvKiBkZWZhdWx0ICovCiAKIHN0cnVjdCBnaWdhc2V0X29wczsKIHN0cnVjdCBnaWdhc2V0X2RyaXZlcjsKQEAgLTI4MywyNyArMzAyLDI2IEBACiBzdHJ1Y3QgYmFzX2JjX3N0YXRlOwogCiBzdHJ1Y3QgcmVwbHlfdCB7Ci0JaW50CXJlc3BfY29kZTsgICAgICAvKiBSU1BfWFhYWCAqLwotCWludAltaW5fQ29uU3RhdGU7ICAgLyogPDAgPT4gaWdub3JlICovCi0JaW50CW1heF9Db25TdGF0ZTsgICAvKiA8MCA9PiBpZ25vcmUgKi8KLQlpbnQJcGFyYW1ldGVyOyAgICAgIC8qIGUuZy4gWlNBVV9YWFhYIDwwOiBpZ25vcmUqLwotCWludAluZXdfQ29uU3RhdGU7ICAgLyogPDAgPT4gaWdub3JlICovCi0JaW50CXRpbWVvdXQ7ICAgICAgICAvKiA+MCA9PiAqSFo7IDw9MCA9PiBUT1VUX1hYWFgqLwotCWludAlhY3Rpb25bTUFYQUNUXTsgLyogQUNUX1hYWFggKi8KLQljaGFyICpjb21tYW5kOyAgICAgICAgLyogTlVMTD09bm9uZSAqLworCWludAlyZXNwX2NvZGU7CS8qIFJTUF9YWFhYICovCisJaW50CW1pbl9Db25TdGF0ZTsJLyogPDAgPT4gaWdub3JlICovCisJaW50CW1heF9Db25TdGF0ZTsJLyogPDAgPT4gaWdub3JlICovCisJaW50CXBhcmFtZXRlcjsJLyogZS5nLiBaU0FVX1hYWFggPDA6IGlnbm9yZSovCisJaW50CW5ld19Db25TdGF0ZTsJLyogPDAgPT4gaWdub3JlICovCisJaW50CXRpbWVvdXQ7CS8qID4wID0+ICpIWjsgPD0wID0+IFRPVVRfWFhYWCovCisJaW50CWFjdGlvbltNQVhBQ1RdOwkvKiBBQ1RfWFhYWCAqLworCWNoYXIJKmNvbW1hbmQ7CS8qIE5VTEw9PW5vbmUgKi8KIH07CiAKIGV4dGVybiBzdHJ1Y3QgcmVwbHlfdCBnaWdhc2V0X3RhYl9jaWRfbTEweFtdOwogZXh0ZXJuIHN0cnVjdCByZXBseV90IGdpZ2FzZXRfdGFiX25vY2lkX20xMHhbXTsKIAogc3RydWN0IGluYnVmX3QgewotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICpyY3ZidWY7ICAgICAgICAgICAgICAgIC8qIHVzYi1naWdhc2V0IHJlY2VpdmUgYnVmZmVyICovCisJdW5zaWduZWQgY2hhcgkJKnJjdmJ1ZjsJLyogdXNiLWdpZ2FzZXQgcmVjZWl2ZSBidWZmZXIgKi8KIAlzdHJ1Y3QgYmNfc3RhdGUJCSpiY3M7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7Ci0JaW50IGlucHV0c3RhdGU7Ci0KLQlhdG9taWNfdCBoZWFkLCB0YWlsOwotCXVuc2lnbmVkIGNoYXIgZGF0YVtSQlVGU0laRV07CisJc3RydWN0IGNhcmRzdGF0ZQkqY3M7CisJaW50CQkJaW5wdXRzdGF0ZTsKKwlhdG9taWNfdAkJaGVhZCwgdGFpbDsKKwl1bnNpZ25lZCBjaGFyCQlkYXRhW1JCVUZTSVpFXTsKIH07CiAKIC8qIGlzb2Nocm9ub3VzIHdyaXRlIGJ1ZmZlciBzdHJ1Y3R1cmUKQEAgLTMxOSwxNiArMzM3LDkgQEAKICAqICAgaWYgd3JpdGVzZW0gPD0gMCwgZGF0YVt3cml0ZS4ucmVhZC0xXSBpcyBjdXJyZW50bHkgYmVpbmcgd3JpdHRlbiB0bwogICogLSBpZGxlIGNvbnRhaW5zIHRoZSBieXRlIHZhbHVlIHRvIHJlcGVhdCB3aGVuIHRoZSBlbmQgb2YgdmFsaWQgZGF0YSBpcwogICogICByZWFjaGVkOyBpZiBuZXh0cmVhZD09d3JpdGUgKGJ1ZmZlciBjb250YWlucyBubyBkYXRhIHRvIHNlbmQpLCBlaXRoZXIgdGhlCi0gKiAgIEJBU19PVVRCVUZQQUQgYnl0ZXMgaW1tZWRpYXRlbHkgYmVmb3JlIGRhdGFbd3JpdGVdIChpZiB3cml0ZT49QkFTX09VVEJVRlBBRCkKLSAqICAgb3IgdGhvc2Ugb2YgdGhlIHBhZCBhcmVhIChpZiB3cml0ZTxCQVNfT1VUQlVGUEFEKSBhcmUgYWxzbyBmaWxsZWQgd2l0aCB0aGF0Ci0gKiAgIHZhbHVlCi0gKiAtIG9wdGlvbmFsbHksIHRoZSBmb2xsb3dpbmcgc3RhdGlzdGljcyBvbiB0aGUgYnVmZmVyJ3MgdXNhZ2UgY2FuIGJlIGNvbGxlY3RlZDoKLSAqICAgbWF4ZmlsbDogbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2NjdXBpZWQKLSAqICAgaWRsZWZpbGxzOiBudW1iZXIgb2YgdGltZXMgYSBmcmFtZSBvZiBpZGxlIGJ5dGVzIGlzIHByZXBhcmVkCi0gKiAgIGVtcHR5Z2V0czogbnVtYmVyIG9mIHRpbWVzIHRoZSBidWZmZXIgd2FzIGVtcHR5IHdoZW4gYSBkYXRhIGZyYW1lIHdhcyByZXF1ZXN0ZWQKLSAqICAgYmFja3RvYmFjazogbnVtYmVyIG9mIHRpbWVzIHR3byBkYXRhIHBhY2tldHMgd2VyZSBlbnRlcmVkIGludG8gdGhlIGJ1ZmZlcgotICogICAgd2l0aG91dCBpbnRlcnZlbmluZyBpZGxlIGZsYWdzCi0gKiAgIG5ha2VkYmFjazogc2V0IGlmIG5vIGlkbGUgZmxhZ3MgaGF2ZSBiZWVuIGluc2VydGVkIHNpbmNlIHRoZSBsYXN0IGRhdGEgcGFja2V0CisgKiAgIEJBU19PVVRCVUZQQUQgYnl0ZXMgaW1tZWRpYXRlbHkgYmVmb3JlIGRhdGFbd3JpdGVdIChpZgorICogICB3cml0ZT49QkFTX09VVEJVRlBBRCkgb3IgdGhvc2Ugb2YgdGhlIHBhZCBhcmVhIChpZiB3cml0ZTxCQVNfT1VUQlVGUEFEKQorICogICBhcmUgYWxzbyBmaWxsZWQgd2l0aCB0aGF0IHZhbHVlCiAgKi8KIHN0cnVjdCBpc293YnVmX3QgewogCWF0b21pY190CXJlYWQ7CkBAIC0zNTgsMzQgKzM2OSwyOCBAQAogICogaXQgaXMgY3VycmVudGx5IGFzc2lnbmVkIGEgQiBjaGFubmVsCiAgKi8KIHN0cnVjdCBhdF9zdGF0ZV90IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0OwotCWludCAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmc7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgZ2V0c3RyaW5nOwotCWF0b21pY190CQl0aW1lcl9pbmRleDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJaW50CQkJd2FpdGluZzsKKwlpbnQJCQlnZXRzdHJpbmc7CisJdW5zaWduZWQJCXRpbWVyX2luZGV4OwogCXVuc2lnbmVkIGxvbmcJCXRpbWVyX2V4cGlyZXM7CiAJaW50CQkJdGltZXJfYWN0aXZlOwotCXVuc2lnbmVkIGludAkJQ29uU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhdGUgb2YgY29ubmVjdGlvbiAqLwotCXN0cnVjdCByZXBseV90ICAgICAgICAgICpyZXBseXN0cnVjdDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBjaWQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaW50X3ZhcltWQVJfTlVNXTsgICAvKiBzZWUgVkFSX1hYWFggKi8KLQljaGFyICAgICAgICAgICAgICAgICAgICAqc3RyX3ZhcltTVFJfTlVNXTsgIC8qIHNlZSBTVFJfWFhYWCAqLwotCXVuc2lnbmVkICAgICAgICAgICAgICAgIHBlbmRpbmdfY29tbWFuZHM7ICAgLyogc2VlIFBDX1hYWFggKi8KLQlhdG9taWNfdCAgICAgICAgICAgICAgICBzZXFfaW5kZXg7CisJdW5zaWduZWQgaW50CQlDb25TdGF0ZTsJLyogU3RhdGUgb2YgY29ubmVjdGlvbiAqLworCXN0cnVjdCByZXBseV90CQkqcmVwbHlzdHJ1Y3Q7CisJaW50CQkJY2lkOworCWludAkJCWludF92YXJbVkFSX05VTV07CS8qIHNlZSBWQVJfWFhYWCAqLworCWNoYXIJCQkqc3RyX3ZhcltTVFJfTlVNXTsJLyogc2VlIFNUUl9YWFhYICovCisJdW5zaWduZWQJCXBlbmRpbmdfY29tbWFuZHM7CS8qIHNlZSBQQ19YWFhYICovCisJdW5zaWduZWQJCXNlcV9pbmRleDsKIAotCXN0cnVjdCBjYXJkc3RhdGUgICAgKmNzOwotCXN0cnVjdCBiY19zdGF0ZSAgICAgICAgICpiY3M7CisJc3RydWN0IGNhcmRzdGF0ZQkqY3M7CisJc3RydWN0IGJjX3N0YXRlCQkqYmNzOwogfTsKIAogc3RydWN0IHJlc3BfdHlwZV90IHsKIAl1bnNpZ25lZCBjaGFyCSpyZXNwb25zZTsKLQlpbnQJCXJlc3BfY29kZTsgICAgICAgICAgIC8qIFJTUF9YWFhYICovCi0JaW50CQl0eXBlOyAgICAgICAgICAgICAgICAvKiBSVF9YWFhYICovCi19OwotCi1zdHJ1Y3QgcHJvdF9za2IgewotCWF0b21pY190CQllbXB0eTsKLQlzdHJ1Y3Qgc2VtYXBob3JlCSpzZW07Ci0Jc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJaW50CQlyZXNwX2NvZGU7CS8qIFJTUF9YWFhYICovCisJaW50CQl0eXBlOwkJLyogUlRfWFhYWCAqLwogfTsKIAogc3RydWN0IGV2ZW50X3QgewpAQCAtMzk4LDI5ICs0MDMsMjkgQEAKIAogLyogVGhpcyBidWZmZXIgaG9sZHMgYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VkIEItQ2hhbm5lbCAqLwogc3RydWN0IGJjX3N0YXRlIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgdHJhbnNmZXIgYnVmZmVyIHRvIG1vZGVtICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBzcXVldWU7CSAgICAgICAgICAgICAgIC8qIEItQ2hhbm5lbCBzZW5kIFF1ZXVlICovCisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsJCS8qIEN1cnJlbnQgdHJhbnNmZXIgYnVmZmVyIHRvIG1vZGVtICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCBzcXVldWU7CS8qIEItQ2hhbm5lbCBzZW5kIFF1ZXVlICovCiAKIAkvKiBWYXJpYWJsZXMgZm9yIGRlYnVnZ2luZyAuLiAqLwotCWludCBjb3JydXB0ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIGZvciBjb3JydXB0ZWQgcGFja2FnZXMgKi8KLQlpbnQgdHJhbnNfZG93bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBvZiBwYWNrYWdlcyAoZG93bnN0cmVhbSkgKi8KLQlpbnQgdHJhbnNfdXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBvZiBwYWNrYWdlcyAodXBzdHJlYW0pICovCisJaW50IGNvcnJ1cHRlZDsJCQkvKiBDb3VudGVyIGZvciBjb3JydXB0ZWQgcGFja2FnZXMgKi8KKwlpbnQgdHJhbnNfZG93bjsJCQkvKiBDb3VudGVyIG9mIHBhY2thZ2VzIChkb3duc3RyZWFtKSAqLworCWludCB0cmFuc191cDsJCQkvKiBDb3VudGVyIG9mIHBhY2thZ2VzICh1cHN0cmVhbSkgKi8KIAogCXN0cnVjdCBhdF9zdGF0ZV90IGF0X3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgcmN2Ynl0ZXM7CiAKIAlfX3UxNiBmY3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaW5wdXRzdGF0ZTsgLyogc2VlIElOU19YWFhYICovCisJaW50IGlucHV0c3RhdGU7CQkJLyogc2VlIElOU19YWFhYICovCiAKIAlpbnQgY2hhbm5lbDsKIAogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCi0JdW5zaWduZWQgY2hzdGF0ZTsJCQkvKiBiaXRtYXAgKENIU18qKSAqLworCXVuc2lnbmVkIGNoc3RhdGU7CQkvKiBiaXRtYXAgKENIU18qKSAqLwogCWludCBpZ25vcmU7Ci0JdW5zaWduZWQJcHJvdG8yOwkJCS8qIExheWVyIDIgcHJvdG9jb2wgKElTRE5fUFJPVE9fTDJfKikgKi8KLQljaGFyCQkqY29tbWFuZHNbQVRfTlVNXTsgLyogc2VlIEFUX1hYWFggKi8KKwl1bnNpZ25lZCBwcm90bzI7CQkvKiBMYXllciAyIHByb3RvY29sIChJU0ROX1BST1RPX0wyXyopICovCisJY2hhciAqY29tbWFuZHNbQVRfTlVNXTsJCS8qIHNlZSBBVF9YWFhYICovCiAKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCWludCBlbXB0eWNvdW50OwpAQCAtNDI4LDM3ICs0MzMsMzkgQEAKIAlpbnQgYnVzeTsKIAlpbnQgdXNlX2NvdW50OwogCi0JLyogaGFyZHdhcmUgZHJpdmVycyAqLworCS8qIHByaXZhdGUgZGF0YSBvZiBoYXJkd2FyZSBkcml2ZXJzICovCiAJdW5pb24gewotCQlzdHJ1Y3Qgc2VyX2JjX3N0YXRlICpzZXI7CQkgLyogcHJpdmF0ZSBkYXRhIG9mIHNlcmlhbCBoYXJkd2FyZSBkcml2ZXIgKi8KLQkJc3RydWN0IHVzYl9iY19zdGF0ZSAqdXNiOwkJIC8qIHByaXZhdGUgZGF0YSBvZiB1c2IgaGFyZHdhcmUgZHJpdmVyICovCi0JCXN0cnVjdCBiYXNfYmNfc3RhdGUgKmJhczsKKwkJc3RydWN0IHNlcl9iY19zdGF0ZSAqc2VyOwkvKiBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyICovCisJCXN0cnVjdCB1c2JfYmNfc3RhdGUgKnVzYjsJLyogdXNiIGhhcmR3YXJlIGRyaXZlciAobTEwNSkgKi8KKwkJc3RydWN0IGJhc19iY19zdGF0ZSAqYmFzOwkvKiB1c2IgaGFyZHdhcmUgZHJpdmVyIChiYXNlKSAqLwogCX0gaHc7CiB9OwogCiBzdHJ1Y3QgY2FyZHN0YXRlIHsKIAlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRyaXZlcjsKIAl1bnNpZ25lZCBtaW5vcl9pbmRleDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAljb25zdCBzdHJ1Y3QgZ2lnYXNldF9vcHMgKm9wczsKIAogCS8qIFN0dWZmIHRvIGhhbmRsZSBjb21tdW5pY2F0aW9uICovCi0JLy93YWl0X3F1ZXVlX2hlYWRfdCBpbml0d2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cXVldWU7CiAJaW50IHdhaXRpbmc7Ci0JYXRvbWljX3QgbW9kZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlZSBNX1hYWFggKi8KLQlhdG9taWNfdCBtc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gc3RhdGU6IHNlZSBNU19YWFhYICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgY2hhbmdlZCBieSB0aGUgZXZlbnQgbGF5ZXIgKi8KKwlhdG9taWNfdCBtb2RlOwkJCS8qIHNlZSBNX1hYWFggKi8KKwlhdG9taWNfdCBtc3RhdGU7CQkvKiBNb2RlbSBzdGF0ZTogc2VlIE1TX1hYWFggKi8KKwkJCQkJLyogb25seSBjaGFuZ2VkIGJ5IHRoZSBldmVudCBsYXllciAqLwogCWludCBjbWRfcmVzdWx0OwogCiAJaW50IGNoYW5uZWxzOwotCXN0cnVjdCBiY19zdGF0ZSAqYmNzOyAgICAgICAgICAgICAgICAvKiBBcnJheSBvZiBzdHJ1Y3QgYmNfc3RhdGUgKi8KKwlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsJCS8qIEFycmF5IG9mIHN0cnVjdCBiY19zdGF0ZSAqLwogCi0JaW50IG9uZWNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRhdGEgYW5kIGNvbW1hbmRzIHRyYW5zbWl0dGVkIGluIG9uZSBzdHJlYW0gKE0xMHgpICovCisJaW50IG9uZWNoYW5uZWw7CQkJLyogZGF0YSBhbmQgY29tbWFuZHMgdHJhbnNtaXR0ZWQgaW4gb25lCisJCQkJCSAgIHN0cmVhbSAoTTEweCkgKi8KIAogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgYXRfc3RhdGVfdCBhdF9zdGF0ZTsgICAgICAgICAgLyogYXRfc3RhdGVfdCBmb3IgY2lkID09IDAgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRlbXBfYXRfc3RhdGVzOyAgICAgLyogbGlzdCBvZiB0ZW1wb3JhcnkgInN0cnVjdCBhdF9zdGF0ZV90InMgd2l0aG91dCBCIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgYXRfc3RhdGVfdCBhdF9zdGF0ZTsJLyogYXRfc3RhdGVfdCBmb3IgY2lkID09IDAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRlbXBfYXRfc3RhdGVzOy8qIGxpc3Qgb2YgdGVtcG9yYXJ5ICJzdHJ1Y3QKKwkJCQkJICAgYXRfc3RhdGVfdCJzIHdpdGhvdXQgQiBjaGFubmVsICovCiAKIAlzdHJ1Y3QgaW5idWZfdCAqaW5idWY7CiAKQEAgLTQ3NCw1OCArNDgxLDY5IEBACiAJdW5zaWduZWQgZnd2ZXJbNF07CiAJaW50IGdvdGZ3dmVyOwogCi0JYXRvbWljX3QgcnVubmluZzsgICAgICAgICAgICAgICAgICAgIC8qICE9MCBpZiBldmVudHMgYXJlIGhhbmRsZWQgKi8KLQlhdG9taWNfdCBjb25uZWN0ZWQ7ICAgICAgICAgICAgICAgICAgLyogIT0wIGlmIGhhcmR3YXJlIGlzIGNvbm5lY3RlZCAqLworCXVuc2lnbmVkIHJ1bm5pbmc7CQkvKiAhPTAgaWYgZXZlbnRzIGFyZSBoYW5kbGVkICovCisJdW5zaWduZWQgY29ubmVjdGVkOwkJLyogIT0wIGlmIGhhcmR3YXJlIGlzIGNvbm5lY3RlZCAqLworCXVuc2lnbmVkIGlzZG5fdXA7CQkvKiAhPTAgYWZ0ZXIgSVNETl9TVEFUX1JVTiAqLwogCi0JYXRvbWljX3QgY2lkbW9kZTsKKwl1bnNpZ25lZCBjaWRtb2RlOwogCi0JaW50IG15aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggTEwgKi8KKwlpbnQgbXlpZDsJCQkvKiBpZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIExMICovCiAJaXNkbl9pZiBpaWY7CiAKIAlzdHJ1Y3QgcmVwbHlfdCAqdGFibm9jaWQ7CiAJc3RydWN0IHJlcGx5X3QgKnRhYmNpZDsKIAlpbnQgY3NfaW5pdDsKLQlpbnQgaWdub3JlZnJhbWVzOyAgICAgICAgICAgICAgICAgICAgLyogZnJhbWVzIHRvIGlnbm9yZSBhZnRlciBzZXR0aW5nIHVwIHRoZSBCIGNoYW5uZWwgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsgICAgICAgICAgICAgICAgLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmU6ICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgY29ubmVjdGVkIGlzIG5vdCBjaGFuZ2VkLCAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGhhcmR3YXJlX3VwIGlzIG5vdCBjaGFuZ2VkLCAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIE1TdGF0ZSBpcyBub3QgY2hhbmdlZCB0byBvciBmcm9tIE1TX0xPQ0tFRCAqLworCWludCBpZ25vcmVmcmFtZXM7CQkvKiBmcmFtZXMgdG8gaWdub3JlIGFmdGVyIHNldHRpbmcgdXAgdGhlCisJCQkJCSAgIEIgY2hhbm5lbCAqLworCXN0cnVjdCBtdXRleCBtdXRleDsJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlOgorCQkJCQkgKiAgIGNvbm5lY3RlZCBpcyBub3QgY2hhbmdlZCwKKwkJCQkJICogICBoYXJkd2FyZV91cCBpcyBub3QgY2hhbmdlZCwKKwkJCQkJICogICBNU3RhdGUgaXMgbm90IGNoYW5nZWQgdG8gb3IgZnJvbQorCQkJCQkgKiAgIE1TX0xPQ0tFRCAqLwogCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJaW50IHJldHJ5X2NvdW50OwotCWludCBkbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhPTAgaWYgbW9kZW0gY29tbWFuZHMvcmVzcG9uc2VzIGFyZSBkbGUgZW5jb2RlZCAqLwotCWludCBjdXJfYXRfc2VxOyAgICAgICAgICAgICAgICAgICAgICAvKiBzZXF1ZW5jZSBvZiBBVCBjb21tYW5kcyBiZWluZyBwcm9jZXNzZWQgKi8KLQlpbnQgY3VyY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCwgdGhvc2UgY29tbWFuZHMgYXJlIG1lYW50IGZvciAqLwotCWF0b21pY190IGNvbW1hbmRzX3BlbmRpbmc7ICAgICAgICAgICAvKiBmbGFnKHMpIGluIHh4eC5jb21tYW5kc19wZW5kaW5nIGhhdmUgYmVlbiBzZXQgKi8KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXZlbnRfdGFza2xldDsgLyogdGFza2xldCBmb3Igc2VyaWFsaXppbmcgQVQgY29tbWFuZHMuIFNjaGVkdWxlZAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIC0+IGZvciBtb2RlbSByZXBvbnNlcyAoYW5kIGluY29tbWluZyBkYXRhIGZvciBNMTB4KQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIC0+IG9uIHRpbWVvdXQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAtPiBhZnRlciBzZXR0aW5nIGJpdHMgaW4geHh4LmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgIChlLmcuIGNvbW1hbmQgZnJvbSBMTCkgKi8KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgd3JpdGVfdGFza2xldDsgLyogdGFza2xldCBmb3Igc2VyaWFsIG91dHB1dAotCQkJCQkgICAgICAqIChub3QgdXNlZCBpbiBiYXNlIGRyaXZlcikgKi8KKwlpbnQgZGxlOwkJCS8qICE9MCBpZiBtb2RlbSBjb21tYW5kcy9yZXNwb25zZXMgYXJlCisJCQkJCSAgIGRsZSBlbmNvZGVkICovCisJaW50IGN1cl9hdF9zZXE7CQkJLyogc2VxdWVuY2Ugb2YgQVQgY29tbWFuZHMgYmVpbmcKKwkJCQkJICAgcHJvY2Vzc2VkICovCisJaW50IGN1cmNoYW5uZWw7CQkJLyogY2hhbm5lbCB0aG9zZSBjb21tYW5kcyBhcmUgbWVhbnQKKwkJCQkJICAgZm9yICovCisJYXRvbWljX3QgY29tbWFuZHNfcGVuZGluZzsJLyogZmxhZyhzKSBpbiB4eHguY29tbWFuZHNfcGVuZGluZyBoYXZlCisJCQkJCSAgIGJlZW4gc2V0ICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGV2ZW50X3Rhc2tsZXQ7CisJCQkJCS8qIHRhc2tsZXQgZm9yIHNlcmlhbGl6aW5nIEFUIGNvbW1hbmRzLgorCQkJCQkgKiBTY2hlZHVsZWQKKwkJCQkJICogICAtPiBmb3IgbW9kZW0gcmVwb25zZXMgKGFuZAorCQkJCQkgKiAgICAgIGluY29taW5nIGRhdGEgZm9yIE0xMHgpCisJCQkJCSAqICAgLT4gb24gdGltZW91dAorCQkJCQkgKiAgIC0+IGFmdGVyIHNldHRpbmcgYml0cyBpbgorCQkJCQkgKiAgICAgIHh4eC5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmQKKwkJCQkJICogICAgICAoZS5nLiBjb21tYW5kIGZyb20gTEwpICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHdyaXRlX3Rhc2tsZXQ7CisJCQkJCS8qIHRhc2tsZXQgZm9yIHNlcmlhbCBvdXRwdXQKKwkJCQkJICogKG5vdCB1c2VkIGluIGJhc2UgZHJpdmVyKSAqLwogCiAJLyogZXZlbnQgcXVldWUgKi8KIAlzdHJ1Y3QgZXZlbnRfdCBldmVudHNbTUFYX0VWRU5UU107Ci0JYXRvbWljX3QgZXZfdGFpbCwgZXZfaGVhZDsKKwl1bnNpZ25lZCBldl90YWlsLCBldl9oZWFkOwogCXNwaW5sb2NrX3QgZXZfbG9jazsKIAogCS8qIGN1cnJlbnQgbW9kZW0gcmVzcG9uc2UgKi8KIAl1bnNpZ25lZCBjaGFyIHJlc3BkYXRhW01BWF9SRVNQX1NJWkVdOwogCXVuc2lnbmVkIGNieXRlczsKIAotCS8qIGhhcmR3YXJlIGRyaXZlcnMgKi8KKwkvKiBwcml2YXRlIGRhdGEgb2YgaGFyZHdhcmUgZHJpdmVycyAqLwogCXVuaW9uIHsKLQkJc3RydWN0IHVzYl9jYXJkc3RhdGUgKnVzYjsgLyogcHJpdmF0ZSBkYXRhIG9mIFVTQiBoYXJkd2FyZSBkcml2ZXIgKi8KLQkJc3RydWN0IHNlcl9jYXJkc3RhdGUgKnNlcjsgLyogcHJpdmF0ZSBkYXRhIG9mIHNlcmlhbCBoYXJkd2FyZSBkcml2ZXIgKi8KLQkJc3RydWN0IGJhc19jYXJkc3RhdGUgKmJhczsgLyogcHJpdmF0ZSBkYXRhIG9mIGJhc2UgaGFyZHdhcmUgZHJpdmVyICovCisJCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1c2I7IC8qIFVTQiBoYXJkd2FyZSBkcml2ZXIgKG0xMDUpICovCisJCXN0cnVjdCBzZXJfY2FyZHN0YXRlICpzZXI7IC8qIHNlcmlhbCBoYXJkd2FyZSBkcml2ZXIgKi8KKwkJc3RydWN0IGJhc19jYXJkc3RhdGUgKmJhczsgLyogVVNCIGhhcmR3YXJlIGRyaXZlciAoYmFzZSkgKi8KIAl9IGh3OwogfTsKIAogc3RydWN0IGdpZ2FzZXRfZHJpdmVyIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgLyogbG9ja3MgbWlub3IgdGFibGVzIGFuZCBibG9ja2VkICovCi0JLy9zdHJ1Y3Qgc2VtYXBob3JlIHNlbTsgICAgICAgICAgICAgICAgLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzcGlubG9ja190IGxvY2s7CQkvKiBsb2NrcyBtaW5vciB0YWJsZXMgYW5kIGJsb2NrZWQgKi8KIAlzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5OwogCXVuc2lnbmVkIGhhdmVfdHR5OwogCXVuc2lnbmVkIG1pbm9yOwpAQCAtNTUzLDM3ICs1NzEsNDIgQEAKIAlzdHJ1Y3QgaXNvd191cmJjdHhfdAlpc29vdXR1cmJzW0JBU19PVVRVUkJTXTsKIAlzdHJ1Y3QgaXNvd191cmJjdHhfdAkqaXNvb3V0ZG9uZSwgKmlzb291dGZyZWUsICppc29vdXRvdmZsOwogCXN0cnVjdCBpc293YnVmX3QJKmlzb291dGJ1ZjsKLQl1bnNpZ25lZCBudW1zdWI7CQkJLyogc3VibWl0dGVkIFVSQiBjb3VudGVyIChmb3IgZGlhZ25vc3RpYyBtZXNzYWdlcyBvbmx5KSAqLworCXVuc2lnbmVkIG51bXN1YjsJCS8qIHN1Ym1pdHRlZCBVUkIgY291bnRlcgorCQkJCQkgICAoZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMgb25seSkgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJc2VudF90YXNrbGV0OwogCiAJLyogaXNvY2hyb25vdXMgaW5wdXQgc3RhdGUgKi8KIAlzcGlubG9ja190IGlzb2lubG9jazsKIAlzdHJ1Y3QgdXJiICppc29pbnVyYnNbQkFTX0lOVVJCU107CiAJdW5zaWduZWQgY2hhciBpc29pbmJ1ZltCQVNfSU5CVUZTSVpFICogQkFTX0lOVVJCU107Ci0Jc3RydWN0IHVyYiAqaXNvaW5kb25lOwkgICAgICAgICAgICAgICAgLyogY29tcGxldGVkIGlzb2MgcmVhZCBVUkIgKi8KLQlpbnQgbG9zdHN0YXR1czsJCQkJLyogc3RhdHVzIG9mIGRyb3BwZWQgVVJCICovCi0JdW5zaWduZWQgaXNvaW5sb3N0OwkJCS8qIG51bWJlciBvZiBieXRlcyBsb3N0ICovCi0JLyogc3RhdGUgb2YgYml0IHVuc3R1ZmZpbmcgYWxnb3JpdGhtIChpbiBhZGRpdGlvbiB0byBCQ19zdGF0ZS5pbnB1dHN0YXRlKSAqLwotCXVuc2lnbmVkIHNlcWxlbjsJCQkvKiBudW1iZXIgb2YgJzEnIGJpdHMgbm90IHlldCB1bnN0dWZmZWQgKi8KLQl1bnNpZ25lZCBpbmJ5dGUsIGluYml0czsJCS8qIGNvbGxlY3RlZCBiaXRzIGZvciBuZXh0IGJ5dGUgKi8KKwlzdHJ1Y3QgdXJiICppc29pbmRvbmU7CQkvKiBjb21wbGV0ZWQgaXNvYyByZWFkIFVSQiAqLworCWludCBsb3N0c3RhdHVzOwkJCS8qIHN0YXR1cyBvZiBkcm9wcGVkIFVSQiAqLworCXVuc2lnbmVkIGlzb2lubG9zdDsJCS8qIG51bWJlciBvZiBieXRlcyBsb3N0ICovCisJLyogc3RhdGUgb2YgYml0IHVuc3R1ZmZpbmcgYWxnb3JpdGhtCisJICAgKGluIGFkZGl0aW9uIHRvIEJDX3N0YXRlLmlucHV0c3RhdGUpICovCisJdW5zaWduZWQgc2VxbGVuOwkJLyogbnVtYmVyIG9mICcxJyBiaXRzIG5vdCB5ZXQKKwkJCQkJICAgdW5zdHVmZmVkICovCisJdW5zaWduZWQgaW5ieXRlLCBpbmJpdHM7CS8qIGNvbGxlY3RlZCBiaXRzIGZvciBuZXh0IGJ5dGUgKi8KIAkvKiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgZ29vZGJ5dGVzOwkJCS8qIGJ5dGVzIGNvcnJlY3RseSByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGFsaWduZXJyczsJCQkvKiBmcmFtZXMgd2l0aCBpbmNvbXBsZXRlIGJ5dGUgYXQgZW5kICovCi0JdW5zaWduZWQgZmNzZXJyczsJCQkvKiBGQ1MgZXJyb3JzICovCi0JdW5zaWduZWQgZnJhbWVlcnJzOwkJCS8qIGZyYW1pbmcgZXJyb3JzICovCi0JdW5zaWduZWQgZ2lhbnRzOwkJCS8qIGxvbmcgZnJhbWVzICovCi0JdW5zaWduZWQgcnVudHM7CQkJCS8qIHNob3J0IGZyYW1lcyAqLwotCXVuc2lnbmVkIGFib3J0czsJCQkvKiBIRExDIGFib3J0cyAqLwotCXVuc2lnbmVkIHNoYXJlZDBzOwkJCS8qICcwJyBiaXRzIHNoYXJlZCBiZXR3ZWVuIGZsYWdzICovCi0JdW5zaWduZWQgc3RvbGVuMHM7CQkJLyogJzAnIHN0dWZmIGJpdHMgYWxzbyBzZXJ2aW5nIGFzIGxlYWRpbmcgZmxhZyBiaXRzICovCisJdW5zaWduZWQgZ29vZGJ5dGVzOwkJLyogYnl0ZXMgY29ycmVjdGx5IHJlY2VpdmVkICovCisJdW5zaWduZWQgYWxpZ25lcnJzOwkJLyogZnJhbWVzIHdpdGggaW5jb21wbGV0ZSBieXRlIGF0IGVuZCAqLworCXVuc2lnbmVkIGZjc2VycnM7CQkvKiBGQ1MgZXJyb3JzICovCisJdW5zaWduZWQgZnJhbWVlcnJzOwkJLyogZnJhbWluZyBlcnJvcnMgKi8KKwl1bnNpZ25lZCBnaWFudHM7CQkvKiBsb25nIGZyYW1lcyAqLworCXVuc2lnbmVkIHJ1bnRzOwkJCS8qIHNob3J0IGZyYW1lcyAqLworCXVuc2lnbmVkIGFib3J0czsJCS8qIEhETEMgYWJvcnRzICovCisJdW5zaWduZWQgc2hhcmVkMHM7CQkvKiAnMCcgYml0cyBzaGFyZWQgYmV0d2VlbiBmbGFncyAqLworCXVuc2lnbmVkIHN0b2xlbjBzOwkJLyogJzAnIHN0dWZmIGJpdHMgYWxzbyBzZXJ2aW5nIGFzCisJCQkJCSAgIGxlYWRpbmcgZmxhZyBiaXRzICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJjdmRfdGFza2xldDsKIH07CiAKIHN0cnVjdCBnaWdhc2V0X29wcyB7Ci0JLyogQ2FsbGVkIGZyb20gZXYtbGF5ZXIuYy9pbnRlcmZhY2UuYyBmb3Igc2VuZGluZyBBVCBjb21tYW5kcyB0byB0aGUgZGV2aWNlICovCisJLyogQ2FsbGVkIGZyb20gZXYtbGF5ZXIuYy9pbnRlcmZhY2UuYyBmb3Igc2VuZGluZyBBVCBjb21tYW5kcyB0byB0aGUKKwkgICBkZXZpY2UgKi8KIAlpbnQgKCp3cml0ZV9jbWQpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotCSAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAotCSAgICAgICAgICAgICAgICAgc3RydWN0IHRhc2tsZXRfc3RydWN0ICp3YWtlX3Rhc2tsZXQpOworCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCSBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCk7CiAKIAkvKiBDYWxsZWQgZnJvbSBpbnRlcmZhY2UuYyBmb3IgYWRkaXRpb25hbCBkZXZpY2UgY29udHJvbCAqLwogCWludCAoKndyaXRlX3Jvb20pKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKQEAgLTYwNCw3ICs2MjcsOCBAQAogCS8qIENhbGxlZCBieSBnaWdhc2V0X2ZyZWVjcygpIGZvciBmcmVlaW5nIGJjcy0+aHcueHh4ICovCiAJaW50ICgqZnJlZWJjc2h3KShzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiAKLQkvKiBDYWxsZWQgYnkgZ2lnYXNldF9zdG9wKCkgb3IgZ2lnYXNldF9iY2hhbm5lbF9kb3duKCkgZm9yIHJlc2V0dGluZyBiY3MtPmh3Lnh4eCAqLworCS8qIENhbGxlZCBieSBnaWdhc2V0X3N0b3AoKSBvciBnaWdhc2V0X2JjaGFubmVsX2Rvd24oKSBmb3IgcmVzZXR0aW5nCisJICAgYmNzLT5ody54eHggKi8KIAl2b2lkICgqcmVpbml0YmNzaHcpKHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIAogCS8qIENhbGxlZCBieSBnaWdhc2V0X2luaXRjcygpIGZvciBzZXR0aW5nIHVwIGNzLT5ody54eHggKi8KQEAgLTYxMywxMyArNjM3LDEwIEBACiAJLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfZnJlZWNzKCkgZm9yIGZyZWVpbmcgY3MtPmh3Lnh4eCAqLwogCXZvaWQgKCpmcmVlY3Nodykoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwogCi0JLy8vKiBDYWxsZWQgYnkgZ2lnYXNldF9zdG9wKCkgZm9yIGtpbGxpbmcgVVJCcywgc2h1dHRpbmcgZG93biB0aGUgZGV2aWNlLCAuLi4KLQkvLyAgIGhhcmR3YXJldXA6ID09MDogZG9uJ3QgdHJ5IHRvIHNodXQgZG93biB0aGUgZGV2aWNlLCBoYXJkd2FyZSBpcyByZWFsbHkgbm90IGFjY2Vzc2libGUKLQkvLwkgICAgICAgIT0wOiBoYXJkd2FyZSBzdGlsbCB1cCAqLwotCS8vdm9pZCAoKnN0b3Bodykoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBoYXJkd2FyZXVwKTsKLQotCS8qIENhbGxlZCBmcm9tIGNvbW1vbi5jL2ludGVyZmFjZS5jIGZvciBhZGRpdGlvbmFsIHNlcmlhbCBwb3J0IGNvbnRyb2wgKi8KLQlpbnQgKCpzZXRfbW9kZW1fY3RybCkoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwgdW5zaWduZWQgbmV3X3N0YXRlKTsKKwkvKiBDYWxsZWQgZnJvbSBjb21tb24uYy9pbnRlcmZhY2UuYyBmb3IgYWRkaXRpb25hbCBzZXJpYWwgcG9ydAorCSAgIGNvbnRyb2wgKi8KKwlpbnQgKCpzZXRfbW9kZW1fY3RybCkoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKKwkJCSAgICAgIHVuc2lnbmVkIG5ld19zdGF0ZSk7CiAJaW50ICgqYmF1ZF9yYXRlKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpOwogCWludCAoKnNldF9saW5lX2N0cmwpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZyk7CiAKQEAgLTYzOSw3ICs2NjAsNyBAQAogICogPERMRV9GTEFHPjogIDB4MTAKICAqIDxFVkVOVD46ICAgICAoKGEteikqIHwgKEEtWikqIHwgKDAtMTApKikrCiAgKi8KLSNkZWZpbmUgRExFX0ZMQUcgICAgICAgMHgxMAorI2RlZmluZSBETEVfRkxBRwkweDEwCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogIEZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBhc3luY2RhdGEuYwpAQCAtNjY3LDcgKzY4OCw4IEBACiAKIC8qIENhbGxlZCBmcm9tIGJhcy1naWdhc2V0LmMgdG8gcHJvY2VzcyBhIGJsb2NrIG9mIGRhdGEKICAqIHJlY2VpdmVkIHRocm91Z2ggdGhlIGlzb2Nocm9ub3VzIGNoYW5uZWwgKi8KLXZvaWQgZ2lnYXNldF9pc29jX3JlY2VpdmUodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjb3VudCwgc3RydWN0IGJjX3N0YXRlICpiY3MpOwordm9pZCBnaWdhc2V0X2lzb2NfcmVjZWl2ZSh1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNvdW50LAorCQkJICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiAKIC8qIENhbGxlZCBmcm9tIGJhcy1naWdhc2V0LmMgdG8gcHV0IGEgYmxvY2sgb2YgZGF0YQogICogaW50byB0aGUgaXNvY2hyb25vdXMgb3V0cHV0IGJ1ZmZlciAqLwpAQCAtNzAzLDcgKzcyNSw3IEBACiAJaXNkbl9jdHJsIHJlc3BvbnNlOwogCiAJLyogZXJyb3IgLT4gTEwgKi8KLQlkYmcoREVCVUdfQ01ELCAic2VuZGluZyBMMUVSUiIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2VuZGluZyBMMUVSUiIpOwogCXJlc3BvbnNlLmRyaXZlciA9IGJjcy0+Y3MtPm15aWQ7CiAJcmVzcG9uc2UuY29tbWFuZCA9IElTRE5fU1RBVF9MMUVSUjsKIAlyZXNwb25zZS5hcmcgPSBiY3MtPmNoYW5uZWw7CkBAIC03MjcsOCArNzQ5LDggQEAKICAqLwogCiAvKiBpbml0aWFsaXplIHN5c2ZzIGZvciBkZXZpY2UgKi8KLXZvaWQgZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKLXZvaWQgZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3ZvaWQgZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7Cit2b2lkIGdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICBGdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gY29tbW9uLmMvZ2lnYXNldC5oCkBAIC03MzYsNyArNzU4LDcgQEAKIAogdm9pZCBnaWdhc2V0X2Jjc19yZWluaXQoc3RydWN0IGJjX3N0YXRlICpiY3MpOwogdm9pZCBnaWdhc2V0X2F0X2luaXQoc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBzdHJ1Y3QgYmNfc3RhdGUgKmJjcywKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKTsKKwkJICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCk7CiBpbnQgZ2lnYXNldF9nZXRfY2hhbm5lbChzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiB2b2lkIGdpZ2FzZXRfZnJlZV9jaGFubmVsKHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIGludCBnaWdhc2V0X2dldF9jaGFubmVscyhzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CkBAIC03NDUsMTYgKzc2NywxNSBAQAogCiAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkcml2ZXIgc3RydWN0dXJlLiAqLwogc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpnaWdhc2V0X2luaXRkcml2ZXIodW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIG1pbm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmZzbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpOworCQkJCQkgIGNvbnN0IGNoYXIgKnByb2NuYW1lLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJCSAgY29uc3QgY2hhciAqZGV2ZnNuYW1lLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzLAorCQkJCQkgIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKIAogLyogRGVhbGxvY2F0ZSBkcml2ZXIgc3RydWN0dXJlLiAqLwogdm9pZCBnaWdhc2V0X2ZyZWVkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpOwogdm9pZCBnaWdhc2V0X2RlYnVnZHJpdmVycyh2b2lkKTsKLXN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHVuc2lnbmVkIG1pbm9yKTsKIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X2lkKGludCBpZCk7CiAKQEAgLTc2Myw3ICs3ODQsOCBAQAogdm9pZCBnaWdhc2V0X3VuYXNzaWduKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIHZvaWQgZ2lnYXNldF9ibG9ja2RyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydik7CiAKLS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGNhcmQgc3RhdGUuIENhbGxzIGhhcmR3YXJlIGRlcGVuZGVudCBnaWdhc2V0X2luaXRbYl1jcygpLiAqLworLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgY2FyZCBzdGF0ZS4gQ2FsbHMgaGFyZHdhcmUgZGVwZW5kZW50CisgICBnaWdhc2V0X2luaXRbYl1jcygpLiAqLwogc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9pbml0Y3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYsIGludCBjaGFubmVscywKIAkJCQkgaW50IG9uZWNoYW5uZWwsIGludCBpZ25vcmVmcmFtZXMsCiAJCQkJIGludCBjaWRtb2RlLCBjb25zdCBjaGFyICptb2R1bGVuYW1lKTsKQEAgLTc4OCw4ICs4MTAsOCBAQAogICogcHRyIG11c3QgYmUga21hbGxvYygpZWQgKGFuZCBub3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlcikuCiAgKi8KIHN0cnVjdCBldmVudF90ICpnaWdhc2V0X2FkZF9ldmVudChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIGludCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0ciwgaW50IHBhcmFtZXRlciwgdm9pZCAqYXJnKTsKKwkJCQkgIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgaW50IHR5cGUsCisJCQkJICB2b2lkICpwdHIsIGludCBwYXJhbWV0ZXIsIHZvaWQgKmFyZyk7CiAKIC8qIENhbGxlZCBvbiBDT05GSUcxIGNvbW1hbmQgZnJvbSBmcm9udGVuZC4gKi8KIGludCBnaWdhc2V0X2VudGVyY29uZmlnbW9kZShzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7IC8vMDogc3VjY2VzcyA8MDogZXJyb3Jjb2RlCkBAIC03OTksNyArODIxLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwotCWlmIChhdG9taWNfcmVhZCgmY3MtPnJ1bm5pbmcpKQorCWlmIChjcy0+cnVubmluZykKIAkJdGFza2xldF9zY2hlZHVsZSgmY3MtPmV2ZW50X3Rhc2tsZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiB9CkBAIC04MTAsNyArODMyLDcgQEAKIHsKIAlnaWdhc2V0X2FkZF9ldmVudChiY3MtPmNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfQkNfQ0xPU0VELCBOVUxMLCAwLCBOVUxMKTsKIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX0NMT1NFRCIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBCQ19DTE9TRUQiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGJjcy0+Y3MpOwogfQogCkBAIC04MjAsMzYgKzg0MiwxOSBAQAogewogCWdpZ2FzZXRfYWRkX2V2ZW50KGJjcy0+Y3MsICZiY3MtPmF0X3N0YXRlLCBFVl9CQ19PUEVOLCBOVUxMLCAwLCBOVUxMKTsKIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX09QRU4iKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQkNfT1BFTiIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoYmNzLT5jcyk7CiB9CiAKIC8qIGhhbmRsaW5nIHJvdXRpbmVzIGZvciBza19idWZmICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCi0vKiBwcml2YXRlIHZlcnNpb24gb2YgX19za2JfcHV0KCkKLSAqIGFwcGVuZCAnbGVuJyBieXRlcyB0byB0aGUgY29udGVudCBvZiAnc2tiJywgYWxyZWFkeSBrbm93aW5nIHRoYXQgdGhlCi0gKiBleGlzdGluZyBidWZmZXIgY2FuIGFjY29tb2RhdGUgdGhlbQotICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBuZXcgYnl0ZXMgc2hvdWxkIGJlIGNvcGllZCB0bwotICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIGFueSBsb2NrcyBzbyBpdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZQotICogYXBwcm9wcmlhdGUgbG9ja3MgaGVsZCBvbmx5LgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKmdpZ2FzZXRfc2tiX3B1dF9xdWljayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBjaGFyICp0bXAgPSBza2ItPnRhaWw7Ci0JLypTS0JfTElORUFSX0FTU0VSVChza2IpOyovCQkvKiBub3QgbmVlZGVkIGhlcmUgKi8KLQlza2ItPnRhaWwgKz0gbGVuOwotCXNrYi0+bGVuICs9IGxlbjsKLQlyZXR1cm4gdG1wOwotfQotCiAvKiBwYXNzIHJlY2VpdmVkIHNrYiB0byBMTAogICogV2FybmluZzogc2tiIG11c3Qgbm90IGJlIGFjY2Vzc2VkIGFueW1vcmUhCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnaWdhc2V0X3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQorCQkJCSAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLAorCQkJCSAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCWNzLT5paWYucmN2Y2FsbGJfc2tiKGNzLT5teWlkLCBiY3MtPmNoYW5uZWwsIHNrYik7CiAJYmNzLT50cmFuc19kb3duKys7CkBAIC04NTksOCArODY0LDggQEAKICAqIFdhcm5pbmc6IHNrYiBtdXN0IG5vdCBiZSBhY2Nlc3NlZCBhbnltb3JlIQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2lnYXNldF9yY3ZfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnByb2Nza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCisJCQkJICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywKKwkJCQkgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCWlmIChwcm9jc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHByb2Nza2IpOwpAQCAtODc3LDQ2ICs4ODIsOSBAQAogLyogYml0d2lzZSBieXRlIGludmVyc2lvbiB0YWJsZSAqLwogZXh0ZXJuIF9fdTggZ2lnYXNldF9pbnZ0YWJbXTsJLyogaW4gY29tbW9uLmMgKi8KIAotCiAvKiBhcHBlbmQgcmVjZWl2ZWQgYnl0ZXMgdG8gaW5idWYgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdpZ2FzZXRfZmlsbF9pbmJ1ZihzdHJ1Y3QgaW5idWZfdCAqaW5idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJ5dGVzKQotewotCXVuc2lnbmVkIG4sIGhlYWQsIHRhaWwsIGJ5dGVzbGVmdDsKLQotCWRiZyhERUJVR19JTlRSLCAicmVjZWl2ZWQgJXUgYnl0ZXMiLCBudW1ieXRlcyk7Ci0KLQlpZiAoIW51bWJ5dGVzKQotCQlyZXR1cm4gMDsKLQotCWJ5dGVzbGVmdCA9IG51bWJ5dGVzOwotCXRhaWwgPSBhdG9taWNfcmVhZCgmaW5idWYtPnRhaWwpOwotCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOwotCWRiZyhERUJVR19JTlRSLCAiYnVmZmVyIHN0YXRlOiAldSAtPiAldSIsIGhlYWQsIHRhaWwpOwotCi0Jd2hpbGUgKGJ5dGVzbGVmdCkgewotCQlpZiAoaGVhZCA+IHRhaWwpCi0JCQluID0gaGVhZCAtIDEgLSB0YWlsOwotCQllbHNlIGlmIChoZWFkID09IDApCi0JCQluID0gKFJCVUZTSVpFLTEpIC0gdGFpbDsKLQkJZWxzZQotCQkJbiA9IFJCVUZTSVpFIC0gdGFpbDsKLQkJaWYgKCFuKSB7Ci0JCQllcnIoImJ1ZmZlciBvdmVyZmxvdyAoJXUgYnl0ZXMgbG9zdCkiLCBieXRlc2xlZnQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG4gPiBieXRlc2xlZnQpCi0JCQluID0gYnl0ZXNsZWZ0OwotCQltZW1jcHkoaW5idWYtPmRhdGEgKyB0YWlsLCBzcmMsIG4pOwotCQlieXRlc2xlZnQgLT0gbjsKLQkJdGFpbCA9ICh0YWlsICsgbikgJSBSQlVGU0laRTsKLQkJc3JjICs9IG47Ci0JfQotCWRiZyhERUJVR19JTlRSLCAic2V0dGluZyB0YWlsIHRvICV1IiwgdGFpbCk7Ci0JYXRvbWljX3NldCgmaW5idWYtPnRhaWwsIHRhaWwpOwotCXJldHVybiBudW1ieXRlcyAhPSBieXRlc2xlZnQ7Ci19CitpbnQgZ2lnYXNldF9maWxsX2luYnVmKHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgbnVtYnl0ZXMpOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICBGdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gaW50ZXJmYWNlLmMKQEAgLTkyNCw3ICs4OTIsNyBAQAogCiAvKiBpbml0aWFsaXplIGludGVyZmFjZSAqLwogdm9pZCBnaWdhc2V0X2lmX2luaXRkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKTsKKwkJCSAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIGNvbnN0IGNoYXIgKmRldmZzbmFtZSk7CiAvKiByZWxlYXNlIGludGVyZmFjZSAqLwogdm9pZCBnaWdhc2V0X2lmX2ZyZWVkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpOwogLyogYWRkIG1pbm9yICovCkBAIC05MzMsNiArOTAxLDYgQEAKIHZvaWQgZ2lnYXNldF9pZl9mcmVlKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIC8qIGRldmljZSByZWNlaXZlZCBkYXRhICovCiB2b2lkIGdpZ2FzZXRfaWZfcmVjZWl2ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKaW5kZXggNzMxYTY3NS4uMDgxNWRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogU3R1ZmYgdXNlZCBieSBhbGwgdmFyaWFudHMgb2YgdGhlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIChFaWxlcnMuU3RlZmFuQGVwb3N0LmRlKSwKLSAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCAoaGpsaXBwQHdlYi5kZSksCi0gKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgKHRpbG1hbkBpbWFwLmNjKS4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzLAorICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKKyAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LgogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTEsMTUgKzExLDExIEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGk0bC5jLHYgMS4zLjIuOSAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKIAotLyogPT0gSGFuZGxpbmcgb2YgSTRMIElPID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogPT0gSGFuZGxpbmcgb2YgSTRMIElPID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyogd3JpdGVidWZfZnJvbV9MTAogICogY2FsbGVkIGJ5IExMIHRvIHRyYW5zbWl0IGRhdGEgb24gYW4gb3BlbiBjaGFubmVsCkBAIC0yOSwxNCArMjUsMTYgQEAKICAqIHBhcmFtZXRlcnM6CiAgKglkcml2ZXJJRAlkcml2ZXIgSUQgYXMgYXNzaWduZWQgYnkgTEwKICAqCWNoYW5uZWwJCWNoYW5uZWwgbnVtYmVyCi0gKglhY2sJCWlmICE9IDAgTEwgd2FudHMgdG8gYmUgbm90aWZpZWQgb24gY29tcGxldGlvbiB2aWEgc3RhdGNhbGxiKElTRE5fU1RBVF9CU0VOVCkKKyAqCWFjawkJaWYgIT0gMCBMTCB3YW50cyB0byBiZSBub3RpZmllZCBvbiBjb21wbGV0aW9uIHZpYQorICoJCQlzdGF0Y2FsbGIoSVNETl9TVEFUX0JTRU5UKQogICoJc2tiCQlza2IgY29udGFpbmluZyBkYXRhIHRvIHNlbmQKICAqIHJldHVybiB2YWx1ZToKICAqCW51bWJlciBvZiBhY2NlcHRlZCBieXRlcwogICoJMCBpZiB0ZW1wb3JhcmlseSB1bmFibGUgdG8gYWNjZXB0IGRhdGEgKG91dCBvZiBidWZmZXIgc3BhY2UpCiAgKgk8MCBvbiBlcnJvciAoZWcuIC1FSU5WQUwpCiAgKi8KLXN0YXRpYyBpbnQgd3JpdGVidWZfZnJvbV9MTChpbnQgZHJpdmVySUQsIGludCBjaGFubmVsLCBpbnQgYWNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCB3cml0ZWJ1Zl9mcm9tX0xMKGludCBkcml2ZXJJRCwgaW50IGNoYW5uZWwsIGludCBhY2ssCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKQEAgLTU0LDMxICs1MiwyOCBAQAogCWJjcyA9ICZjcy0+YmNzW2NoYW5uZWxdOwogCWxlbiA9IHNrYi0+bGVuOwogCi0JZGJnKERFQlVHX0xMREFUQSwKLQkgICAgIlJlY2VpdmluZyBkYXRhIGZyb20gTEwgKGlkOiAlZCwgY2hhbm5lbDogJWQsIGFjazogJWQsIHNpemU6ICVkKSIsCi0JICAgIGRyaXZlcklELCBjaGFubmVsLCBhY2ssIGxlbik7CisJZ2lnX2RiZyhERUJVR19MTERBVEEsCisJCSJSZWNlaXZpbmcgZGF0YSBmcm9tIExMIChpZDogJWQsIGNoOiAlZCwgYWNrOiAlZCwgc3o6ICVkKSIsCisJCWRyaXZlcklELCBjaGFubmVsLCBhY2ssIGxlbik7CiAKIAlpZiAoIWxlbikgewogCQlpZiAoYWNrKQotCQkJd2Fybigibm90IEFDS2luZyBlbXB0eSBwYWNrZXQgZnJvbSBMTCIpOworCQkJbm90aWNlKCIlczogbm90IEFDS2luZyBlbXB0eSBwYWNrZXQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAobGVuID4gTUFYX0JVRl9TSVpFKSB7Ci0JCWVycigiJXM6IHBhY2tldCB0b28gbGFyZ2UgKCVkIGJ5dGVzKSIsIF9fZnVuY19fLCBjaGFubmVsKTsKKwkJZXJyKCIlczogcGFja2V0IHRvbyBsYXJnZSAoJWQgYnl0ZXMpIiwgX19mdW5jX18sIGxlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXNrYmxlbiA9IGFjayA/IGxlbiA6IDA7CiAJc2tiLT5oZWFkWzBdID0gc2tibGVuICYgMHhmZjsKIAlza2ItPmhlYWRbMV0gPSBza2JsZW4gPj4gODsKLQlkYmcoREVCVUdfTUNNRCwgInNrYjogbGVuPSV1LCBza2JsZW49JXU6ICUwMnggJTAyeCIsIGxlbiwgc2tibGVuLAotCSAgICAgKHVuc2lnbmVkKSBza2ItPmhlYWRbMF0sICh1bnNpZ25lZCkgc2tiLT5oZWFkWzFdKTsKKwlnaWdfZGJnKERFQlVHX01DTUQsICJza2I6IGxlbj0ldSwgc2tibGVuPSV1OiAlMDJ4ICUwMngiLAorCQlsZW4sIHNrYmxlbiwgKHVuc2lnbmVkKSBza2ItPmhlYWRbMF0sICh1bnNpZ25lZCkgc2tiLT5oZWFkWzFdKTsKIAogCS8qIHBhc3MgdG8gZGV2aWNlLXNwZWNpZmljIG1vZHVsZSAqLwotCXJldHVybiBjcy0+b3BzLT5zZW5kX3NrYihiY3MsIHNrYik7CisJcmV0dXJuIGNzLT5vcHMtPnNlbmRfc2tiKGJjcywgc2tiKTsgLy9GSVhNRSBjcy0+b3BzLT5zZW5kX3NrYigpIG11c3QgaGFuZGxlICFjcy0+Y29ubmVjdGVkIGNvcnJlY3RseQogfQogCiB2b2lkIGdpZ2FzZXRfc2tiX3NlbnQoc3RydWN0IGJjX3N0YXRlICpiY3MsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC04OSwxNCArODQsMTQgQEAKIAkrK2Jjcy0+dHJhbnNfdXA7CiAKIAlpZiAoc2tiLT5sZW4pCi0JCXdhcm4oIiVzOiBza2ItPmxlbj09JWQiLCBfX2Z1bmNfXywgc2tiLT5sZW4pOworCQlkZXZfd2FybihiY3MtPmNzLT5kZXYsICIlczogc2tiLT5sZW49PSVkXG4iLAorCQkJIF9fZnVuY19fLCBza2ItPmxlbik7CiAKIAlsZW4gPSAodW5zaWduZWQgY2hhcikgc2tiLT5oZWFkWzBdIHwKIAkgICAgICAodW5zaWduZWQpICh1bnNpZ25lZCBjaGFyKSBza2ItPmhlYWRbMV0gPDwgODsKIAlpZiAobGVuKSB7Ci0JCWRiZyhERUJVR19NQ01ELAotCQkgICAgIkFja25vd2xlZGdlIHNlbmRpbmcgdG8gTEwgKGlkOiAlZCwgY2hhbm5lbDogJWQgc2l6ZTogJXUpIiwKLQkJICAgIGJjcy0+Y3MtPm15aWQsIGJjcy0+Y2hhbm5lbCwgbGVuKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAiQUNLaW5nIHRvIExMIChpZDogJWQsIGNoOiAlZCwgc3o6ICV1KSIsCisJCQliY3MtPmNzLT5teWlkLCBiY3MtPmNoYW5uZWwsIGxlbik7CiAKIAkJcmVzcG9uc2UuZHJpdmVyID0gYmNzLT5jcy0+bXlpZDsKIAkJcmVzcG9uc2UuY29tbWFuZCA9IElTRE5fU1RBVF9CU0VOVDsKQEAgLTExOSwxNSArMTE0LDEyIEBACiAJc3RydWN0IGJjX3N0YXRlICpiY3M7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHNldHVwX3Bhcm0gKnNwOworCXVuc2lnbmVkIHBhcmFtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvL2RiZyhERUJVR19BTlksICJHaWdhc2V0X0hXOiBSZWNlaXZpbmcgY29tbWFuZCIpOwogCWdpZ2FzZXRfZGVidWdkcml2ZXJzKCk7CiAKLQkvKiBUZXJtaW5hdGUgdGhpcyBjYWxsIGlmIG5vIGRldmljZSBpcyBwcmVzZW50LiBCdCBpZiB0aGUgY29tbWFuZCBpcyAiSVNETl9DTURfTE9DSyIgb3IKLQkgKiAiSVNETl9DTURfVU5MT0NLIiB0aGVuIGV4ZWN1dGUgaXQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgZGV2aWNlIGluZGVwZW5kZW50ICEKLQkgKi8KLQkvL0ZJWE1FICJyZW1vdmUgdGVzdCBmb3IgJmNvbm5lY3RlZCIKLQlpZiAoKCFjcyB8fCAhYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSkgeworCWlmICghY3MpIHsKIAkJd2FybigiTEwgdHJpZWQgdG8gYWNjZXNzIHVua25vd24gZGV2aWNlIHdpdGggbnIuICVkIiwKIAkJICAgICBjbnRybC0+ZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMzUsMjkgKzEyNywzMCBAQAogCiAJc3dpdGNoIChjbnRybC0+Y29tbWFuZCkgewogCWNhc2UgSVNETl9DTURfSU9DVEw6Ci0KLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0lPQ1RMIChkcml2ZXI6JWQsYXJnOiAlbGQpIiwKLQkJICAgIGNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0lPQ1RMIChkcml2ZXI6ICVkLCBhcmc6ICVsZCkiLAorCQkJY250cmwtPmRyaXZlciwgY250cmwtPmFyZyk7CiAKIAkJd2FybigiSVNETl9DTURfSU9DVEwgaXMgbm90IHN1cHBvcnRlZC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljYXNlIElTRE5fQ01EX0RJQUw6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9ESUFMIChkcml2ZXI6ICVkLCBjaGFubmVsOiAlbGQsICIKLQkJICAgICJwaG9uZTogJXMsb3dubXNuOiAlcywgc2kxOiAlZCwgc2kyOiAlZCkiLAotCQkgICAgY250cmwtPmRyaXZlciwgY250cmwtPmFyZywKLQkJICAgIGNudHJsLT5wYXJtLnNldHVwLnBob25lLCBjbnRybC0+cGFybS5zZXR1cC5lYXptc24sCi0JCSAgICBjbnRybC0+cGFybS5zZXR1cC5zaTEsIGNudHJsLT5wYXJtLnNldHVwLnNpMik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJIklTRE5fQ01EX0RJQUwgKGRyaXZlcjogJWQsIGNoOiAlbGQsICIKKwkJCSJwaG9uZTogJXMsIG93bm1zbjogJXMsIHNpMTogJWQsIHNpMjogJWQpIiwKKwkJCWNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcsCisJCQljbnRybC0+cGFybS5zZXR1cC5waG9uZSwgY250cmwtPnBhcm0uc2V0dXAuZWF6bXNuLAorCQkJY250cmwtPnBhcm0uc2V0dXAuc2kxLCBjbnRybC0+cGFybS5zZXR1cC5zaTIpOwogCiAJCWlmIChjbnRybC0+YXJnID49IGNzLT5jaGFubmVscykgewotCQkJZXJyKCJpbnZhbGlkIGNoYW5uZWwgKCVkKSIsIChpbnQpIGNudHJsLT5hcmcpOworCQkJZXJyKCJJU0ROX0NNRF9ESUFMOiBpbnZhbGlkIGNoYW5uZWwgKCVkKSIsCisJCQkgICAgKGludCkgY250cmwtPmFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWJjcyA9IGNzLT5iY3MgKyBjbnRybC0+YXJnOwogCiAJCWlmICghZ2lnYXNldF9nZXRfY2hhbm5lbChiY3MpKSB7Ci0JCQllcnIoImNoYW5uZWwgbm90IGZyZWUiKTsKKwkJCWVycigiSVNETl9DTURfRElBTDogY2hhbm5lbCBub3QgZnJlZSIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCkBAIC0xNjksNDIgKzE2Miw0NiBAQAogCQl9CiAJCSpzcCA9IGNudHJsLT5wYXJtLnNldHVwOwogCi0JCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLCBFVl9ESUFMLCBzcCwKLQkJCSAgICAgICAgICAgICAgIGF0b21pY19yZWFkKCZiY3MtPmF0X3N0YXRlLnNlcV9pbmRleCksCi0JCQkgICAgICAgICAgICAgICBOVUxMKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJcGFyYW0gPSBiY3MtPmF0X3N0YXRlLnNlcV9pbmRleDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfRElBTCwgc3AsIHBhcmFtLAorCQkJCSAgICAgICBOVUxMKSkgewogCQkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KIAkJCWtmcmVlKHNwKTsKIAkJCWdpZ2FzZXRfZnJlZV9jaGFubmVsKGJjcyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIERJQUwiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIERJQUwiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfQUNDRVBURDogLy9GSVhNRQotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUNDRVBURCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FDQ0VQVEQiKTsKIAogCQlpZiAoY250cmwtPmFyZyA+PSBjcy0+Y2hhbm5lbHMpIHsKLQkJCWVycigiaW52YWxpZCBjaGFubmVsICglZCkiLCAoaW50KSBjbnRybC0+YXJnKTsKKwkJCWVycigiSVNETl9DTURfQUNDRVBURDogaW52YWxpZCBjaGFubmVsICglZCkiLAorCQkJICAgIChpbnQpIGNudHJsLT5hcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmJjc1tjbnRybC0+YXJnXS5hdF9zdGF0ZSwKLQkJCSAgICAgICAgICAgICAgIEVWX0FDQ0VQVCwgTlVMTCwgMCwgTlVMTCkpIHsKKwkJCQkgICAgICAgRVZfQUNDRVBULCBOVUxMLCAwLCBOVUxMKSkgewogCQkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQUNDRVBUIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBBQ0NFUFQiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9BQ0NFUFRCOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUNDRVBUQiIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FDQ0VQVEIiKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9IQU5HVVA6Ci0JCWRiZyhERUJVR19BTlksCi0JCSAgICAiSVNETl9DTURfSEFOR1VQIChjaGFubmVsOiAlZCkiLCAoaW50KSBjbnRybC0+YXJnKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9IQU5HVVAgKGNoOiAlZCkiLAorCQkJKGludCkgY250cmwtPmFyZyk7CiAKIAkJaWYgKGNudHJsLT5hcmcgPj0gY3MtPmNoYW5uZWxzKSB7CiAJCQllcnIoIklTRE5fQ01EX0hBTkdVUDogaW52YWxpZCBjaGFubmVsICgldSkiLApAQCAtMjEzLDY2ICsyMTAsNjggQEAKIAkJfQogCiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YmNzW2NudHJsLT5hcmddLmF0X3N0YXRlLAotCQkJICAgICAgICAgICAgICAgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkgeworCQkJCSAgICAgICBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpKSB7CiAJCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBIVVAiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEhVUCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCQlicmVhazsKLQljYXNlIElTRE5fQ01EX0NMUkVBWjogICAgICAgICAgICAgICAvKiBEbyBub3Qgc2lnbmFsIGluY29taW5nIHNpZ25hbHMgKi8gLy9GSVhNRQotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQ0xSRUFaIik7CisJY2FzZSBJU0ROX0NNRF9DTFJFQVo6IC8qIERvIG5vdCBzaWduYWwgaW5jb21pbmcgc2lnbmFscyAqLyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQ0xSRUFaIik7CiAJCWJyZWFrOwotCWNhc2UgSVNETl9DTURfU0VURUFaOiAgICAgICAgICAgICAgIC8qIFNpZ25hbCBpbmNvbWluZyBjYWxscyBmb3IgZ2l2ZW4gTVNOICovIC8vRklYTUUKLQkJZGJnKERFQlVHX0FOWSwKLQkJICAgICJJU0ROX0NNRF9TRVRFQVogKGlkOiVkLCBjaGFubmVsOiAlbGQsIG51bWJlcjogJXMpIiwKLQkJICAgIGNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcsIGNudHJsLT5wYXJtLm51bSk7CisJY2FzZSBJU0ROX0NNRF9TRVRFQVo6IC8qIFNpZ25hbCBpbmNvbWluZyBjYWxscyBmb3IgZ2l2ZW4gTVNOICovIC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkiSVNETl9DTURfU0VURUFaIChpZDogJWQsIGNoOiAlbGQsIG51bWJlcjogJXMpIiwKKwkJCWNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcsIGNudHJsLT5wYXJtLm51bSk7CiAJCWJyZWFrOwotCWNhc2UgSVNETl9DTURfU0VUTDI6ICAgICAgICAgICAgICAgIC8qIFNldCBMMiB0byBnaXZlbiBwcm90b2NvbCAqLwotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDIgKENoYW5uZWw6ICVsZCwgUHJvdG86ICVseCkiLAotCQkgICAgIGNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CisJY2FzZSBJU0ROX0NNRF9TRVRMMjogLyogU2V0IEwyIHRvIGdpdmVuIHByb3RvY29sICovCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDIgKGNoOiAlbGQsIHByb3RvOiAlbHgpIiwKKwkJCWNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CiAKIAkJaWYgKChjbnRybC0+YXJnICYgMHhmZikgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQllcnIoImludmFsaWQgY2hhbm5lbCAoJXUpIiwKKwkJCWVycigiSVNETl9DTURfU0VUTDI6IGludmFsaWQgY2hhbm5lbCAoJXUpIiwKIAkJCSAgICAodW5zaWduZWQpIGNudHJsLT5hcmcgJiAweGZmKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5iY3NbY250cmwtPmFyZyAmIDB4ZmZdLmF0X3N0YXRlLAotCQkgICAgICAgICAgICAgICAgICAgICAgIEVWX1BST1RPX0wyLCBOVUxMLCBjbnRybC0+YXJnID4+IDgsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpIHsKKwkJCQkgICAgICAgRVZfUFJPVE9fTDIsIE5VTEwsIGNudHJsLT5hcmcgPj4gOCwKKwkJCQkgICAgICAgTlVMTCkpIHsKIAkJCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFBST1RPX0wyIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBQUk9UT19MMiIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9TRVRMMzogICAgICAgICAgICAgIC8qIFNldCBMMyB0byBnaXZlbiBwcm90b2NvbCAqLwotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDMgKENoYW5uZWw6ICVsZCwgUHJvdG86ICVseCkiLAotCQkgICAgIGNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CisJY2FzZSBJU0ROX0NNRF9TRVRMMzogLyogU2V0IEwzIHRvIGdpdmVuIHByb3RvY29sICovCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDMgKGNoOiAlbGQsIHByb3RvOiAlbHgpIiwKKwkJCWNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CiAKIAkJaWYgKChjbnRybC0+YXJnICYgMHhmZikgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQllcnIoImludmFsaWQgY2hhbm5lbCAoJXUpIiwKKwkJCWVycigiSVNETl9DTURfU0VUTDM6IGludmFsaWQgY2hhbm5lbCAoJXUpIiwKIAkJCSAgICAodW5zaWduZWQpIGNudHJsLT5hcmcgJiAweGZmKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaWYgKGNudHJsLT5hcmcgPj4gOCAhPSBJU0ROX1BST1RPX0wzX1RSQU5TKSB7Ci0JCQllcnIoImludmFsaWQgcHJvdG9jb2wgJWx1IiwgY250cmwtPmFyZyA+PiA4KTsKKwkJCWVycigiSVNETl9DTURfU0VUTDM6IGludmFsaWQgcHJvdG9jb2wgJWx1IiwKKwkJCSAgICBjbnRybC0+YXJnID4+IDgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1BST0NFRUQ6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9DRUVEIik7IC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9DRUVEIik7IC8vRklYTUUKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9BTEVSVDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FMRVJUIik7IC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9BTEVSVCIpOyAvL0ZJWE1FCiAJCWlmIChjbnRybC0+YXJnID49IGNzLT5jaGFubmVscykgewotCQkJZXJyKCJpbnZhbGlkIGNoYW5uZWwgKCVkKSIsIChpbnQpIGNudHJsLT5hcmcpOworCQkJZXJyKCJJU0ROX0NNRF9BTEVSVDogaW52YWxpZCBjaGFubmVsICglZCkiLAorCQkJICAgIChpbnQpIGNudHJsLT5hcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLy9iY3MgPSBjcy0+YmNzICsgY250cmwtPmFyZzsKQEAgLTI4MCwzMiArMjc5LDMxIEBACiAJCS8vIEZJWE1FCiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfUkVESVI6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9SRURJUiIpOyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUkVESVIiKTsgLy9GSVhNRQogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1BST1RfSU86Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9UX0lPIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUFJPVF9JTyIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0ZBWENNRDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0ZBWENNRCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0ZBWENNRCIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVEwyOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUTDIiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMiIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVEwzOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUTDMiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMyIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVEVBWjoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEVBWiIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEVBWiIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1NFVFNJTDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVFNJTCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVFNJTCIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVFNJTDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVFNJTCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVFNJTCIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInVua25vd24gY29tbWFuZCAlZCBmcm9tIExMIiwKLQkJICAgICBjbnRybC0+Y29tbWFuZCk7CisJCWVycigidW5rbm93biBjb21tYW5kICVkIGZyb20gTEwiLCBjbnRybC0+Y29tbWFuZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzUwLDcgKzM0OCw4IEBACiAJCXByb3RvID0gMjsgLyogMDogQml0c3luY2hyb24sIDE6IEhETEMsIDI6IHZvaWNlICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiaW52YWxpZCBwcm90b2NvbDogJXUiLCBiY3MtPnByb3RvMik7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiJXM6IGludmFsaWQgTDIgcHJvdG9jb2w6ICV1XG4iLAorCQkJX19mdW5jX18sIGJjcy0+cHJvdG8yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNzgsNyArMzc3LDcgQEAKIAkJYmNzLT5jb21tYW5kc1tpXSA9IE5VTEw7CiAJCWlmIChsZW5ndGhbaV0gJiYKIAkJICAgICEoYmNzLT5jb21tYW5kc1tpXSA9IGttYWxsb2MobGVuZ3RoW2ldLCBHRlBfQVRPTUlDKSkpIHsKLQkJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQpAQCAtMzk2LDEwICszOTUsMTQgQEAKIAl9CiAKIAlpZiAoYmNzLT5jb21tYW5kc1tBVF9NU05dKQotCQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX01TTl0sIGxlbmd0aFtBVF9NU05dLCAiXlNNU049JXNcciIsIHNwLT5lYXptc24pOwotCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfQkMgICBdLCBsZW5ndGhbQVRfQkMgICBdLCAiXlNCQz0lc1xyIiwgYmMpOwotCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfUFJPVE9dLCBsZW5ndGhbQVRfUFJPVE9dLCAiXlNCUFI9JXVcciIsIHByb3RvKTsKLQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0lTTyAgXSwgbGVuZ3RoW0FUX0lTTyAgXSwgIl5TSVNPPSV1XHIiLCAodW5zaWduZWQpYmNzLT5jaGFubmVsICsgMSk7CisJCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfTVNOXSwgbGVuZ3RoW0FUX01TTl0sCisJCQkgIl5TTVNOPSVzXHIiLCBzcC0+ZWF6bXNuKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0JDICAgXSwgbGVuZ3RoW0FUX0JDICAgXSwKKwkJICJeU0JDPSVzXHIiLCBiYyk7CisJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9QUk9UT10sIGxlbmd0aFtBVF9QUk9UT10sCisJCSAiXlNCUFI9JXVcciIsIHByb3RvKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0lTTyAgXSwgbGVuZ3RoW0FUX0lTTyAgXSwKKwkJICJeU0lTTz0ldVxyIiwgKHVuc2lnbmVkKWJjcy0+Y2hhbm5lbCArIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTksNyArNDIyLDggQEAKIAkJcHJvdG8gPSAyOyAvKiAwOiBCaXRzeW5jaHJvbiwgMTogSERMQywgMjogdm9pY2UgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJpbnZhbGlkIHByb3RvY29sOiAldSIsIGJjcy0+cHJvdG8yKTsKKwkJZGV2X2VycihhdF9zdGF0ZS0+Y3MtPmRldiwgIiVzOiBpbnZhbGlkIHByb3RvY29sOiAldVxuIiwKKwkJCV9fZnVuY19fLCBiY3MtPnByb3RvMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDM2LDEzICs0NDAsMTUgQEAKIAkJYmNzLT5jb21tYW5kc1tpXSA9IE5VTEw7CiAJCWlmIChsZW5ndGhbaV0gJiYKIAkJICAgICEoYmNzLT5jb21tYW5kc1tpXSA9IGttYWxsb2MobGVuZ3RoW2ldLCBHRlBfQVRPTUlDKSkpIHsKLQkJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQkJZGV2X2VycihhdF9zdGF0ZS0+Y3MtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CiAKLQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX1BST1RPXSwgbGVuZ3RoW0FUX1BST1RPXSwgIl5TQlBSPSV1XHIiLCBwcm90byk7Ci0Jc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9JU08gIF0sIGxlbmd0aFtBVF9JU08gIF0sICJeU0lTTz0ldVxyIiwgKHVuc2lnbmVkKSBiY3MtPmNoYW5uZWwgKyAxKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX1BST1RPXSwgbGVuZ3RoW0FUX1BST1RPXSwKKwkJICJeU0JQUj0ldVxyIiwgcHJvdG8pOworCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfSVNPICBdLCBsZW5ndGhbQVRfSVNPICBdLAorCQkgIl5TSVNPPSV1XHIiLCAodW5zaWduZWQpIGJjcy0+Y2hhbm5lbCArIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzMsNyArNDc5LDcgQEAKIAkJcmVzcG9uc2UucGFybS5zZXR1cC5zaTEgPSAxOwogCQlyZXNwb25zZS5wYXJtLnNldHVwLnNpMiA9IDI7CiAJfSBlbHNlIHsKLQkJd2FybigiUklORyBpZ25vcmVkIC0gdW5zdXBwb3J0ZWQgQkMgJXMiLAorCQlkZXZfd2Fybihjcy0+ZGV2LCAiUklORyBpZ25vcmVkIC0gdW5zdXBwb3J0ZWQgQkMgJXNcbiIsCiAJCSAgICAgYXRfc3RhdGUtPnN0cl92YXJbU1RSX1pCQ10pOwogCQlyZXR1cm4gSUNBTExfSUdOT1JFOwogCX0KQEAgLTQ5MSwxOCArNDk3LDE3IEBACiAJCXJlc3BvbnNlLnBhcm0uc2V0dXAuZWF6bXNuWzBdID0gMDsKIAogCWlmICghYmNzKSB7Ci0JCW5vdGljZSgibm8gY2hhbm5lbCBmb3IgaW5jb21pbmcgY2FsbCIpOwotCQlkYmcoREVCVUdfQ01ELCAiU2VuZGluZyBJQ0FMTFciKTsKKwkJZGV2X25vdGljZShjcy0+ZGV2LCAibm8gY2hhbm5lbCBmb3IgaW5jb21pbmcgY2FsbFxuIik7CiAJCXJlc3BvbnNlLmNvbW1hbmQgPSBJU0ROX1NUQVRfSUNBTExXOwogCQlyZXNwb25zZS5hcmcgPSAwOyAvL0ZJWE1FCiAJfSBlbHNlIHsKLQkJZGJnKERFQlVHX0NNRCwgIlNlbmRpbmcgSUNBTEwiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTZW5kaW5nIElDQUxMIik7CiAJCXJlc3BvbnNlLmNvbW1hbmQgPSBJU0ROX1NUQVRfSUNBTEw7CiAJCXJlc3BvbnNlLmFyZyA9IGJjcy0+Y2hhbm5lbDsgLy9GSVhNRQogCX0KIAlyZXNwb25zZS5kcml2ZXIgPSBjcy0+bXlpZDsKIAlyZXR2YWwgPSBjcy0+aWlmLnN0YXRjYWxsYigmcmVzcG9uc2UpOwotCWRiZyhERUJVR19DTUQsICJSZXNwb25zZTogJWQiLCByZXR2YWwpOworCWdpZ19kYmcoREVCVUdfQ01ELCAiUmVzcG9uc2U6ICVkIiwgcmV0dmFsKTsKIAlzd2l0Y2ggKHJldHZhbCkgewogCWNhc2UgMDoJLyogbm8gdGFrZXJzICovCiAJCXJldHVybiBJQ0FMTF9JR05PUkU7CkBAIC01MTIsNyArNTE3LDggQEAKIAljYXNlIDI6CS8qIHJlamVjdCAqLwogCQlyZXR1cm4gSUNBTExfUkVKRUNUOwogCWNhc2UgMzoJLyogaW5jb21wbGV0ZSAqLwotCQl3YXJuKCJMTCByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZTogSW5jb21wbGV0ZSBOdW1iZXIiKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJICAgICAgICJMTCByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZTogSW5jb21wbGV0ZSBOdW1iZXJcbiIpOwogCQlyZXR1cm4gSUNBTExfSUdOT1JFOwogCWNhc2UgNDoJLyogcHJvY2VlZGluZyAqLwogCQkvKiBHaWdhc2V0IHdpbGwgc2VuZCBBTEVSVElORyBhbnl3YXkuCkBAIC01MjAsMTAgKzUyNiwxMSBAQAogCQkgKi8KIAkJcmV0dXJuIElDQUxMX0FDQ0VQVDsKIAljYXNlIDU6CS8qIGRlZmxlY3QgKi8KLQkJd2FybigiTEwgcmVxdWVzdGVkIHVuc3VwcG9ydGVkIGZlYXR1cmU6IENhbGwgRGVmbGVjdGlvbiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJICJMTCByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZTogQ2FsbCBEZWZsZWN0aW9uXG4iKTsKIAkJcmV0dXJuIElDQUxMX0lHTk9SRTsKIAlkZWZhdWx0OgotCQllcnIoIkxMIGVycm9yICVkIG9uIElDQUxMIiwgcmV0dmFsKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiTEwgZXJyb3IgJWQgb24gSUNBTExcbiIsIHJldHZhbCk7CiAJCXJldHVybiBJQ0FMTF9JR05PUkU7CiAJfQogfQpAQCAtNTMzLDcgKzU0MCw3IEBACiB7CiAJaXNkbl9pZiAqaWlmID0gJmNzLT5paWY7CiAKLQlkYmcoREVCVUdfQU5ZLCAiUmVnaXN0ZXIgZHJpdmVyIGNhcGFiaWxpdGllcyB0byBMTCIpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiUmVnaXN0ZXIgZHJpdmVyIGNhcGFiaWxpdGllcyB0byBMTCIpOwogCiAJLy9paWYtPmlkW3NpemVvZihpaWYtPmlkKSAtIDFdPTA7CiAJLy9zdHJuY3B5KGlpZi0+aWQsIGlzZG5pZCwgc2l6ZW9mKGlpZi0+aWQpIC0gMSk7CkBAIC01NDIsMjYgKzU0OSwyNiBAQAogCQlyZXR1cm4gLUVOT01FTTsgLy9GSVhNRSBFSU5WQUwvLi4uPz8KIAogCWlpZi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlpaWYtPmNoYW5uZWxzID0gY3MtPmNoYW5uZWxzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEkgYW0gc3VwcG9ydGluZyBqdXN0IG9uZSBjaGFubmVsICovLyogSSB3YXMgc3VwcG9ydGluZy4uLiovCisJaWlmLT5jaGFubmVscyA9IGNzLT5jaGFubmVsczsKIAlpaWYtPm1heGJ1ZnNpemUgPSBNQVhfQlVGX1NJWkU7Ci0JaWlmLT5mZWF0dXJlcyA9IElTRE5fRkVBVFVSRV9MMl9UUkFOUyB8ICAgLyogT3VyIGRldmljZSBpcyB2ZXJ5IGFkdmFuY2VkLCB0aGVyZWZvcmUgKi8KKwlpaWYtPmZlYXR1cmVzID0gSVNETl9GRUFUVVJFX0wyX1RSQU5TIHwKIAkJSVNETl9GRUFUVVJFX0wyX0hETEMgfAogI2lmZGVmIEdJR19YNzUKIAkJSVNETl9GRUFUVVJFX0wyX1g3NUkgfAogI2VuZGlmCiAJCUlTRE5fRkVBVFVSRV9MM19UUkFOUyB8CiAJCUlTRE5fRkVBVFVSRV9QX0VVUk87Ci0JaWlmLT5obF9oZHJsZW4gPSBIV19IRFJfTEVOOyAgICAgICAgICAgICAgLyogQXJlYSBmb3Igc3RvcmluZyBhY2sgKi8KKwlpaWYtPmhsX2hkcmxlbiA9IEhXX0hEUl9MRU47CQkvKiBBcmVhIGZvciBzdG9yaW5nIGFjayAqLwogCWlpZi0+Y29tbWFuZCA9IGNvbW1hbmRfZnJvbV9MTDsKIAlpaWYtPndyaXRlYnVmX3NrYiA9IHdyaXRlYnVmX2Zyb21fTEw7Ci0JaWlmLT53cml0ZWNtZCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3Qgc3VwcG9ydCBpc2RuY3RybCAqLwotCWlpZi0+cmVhZHN0YXQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHN1cHBvcnQgaXNkbmN0cmwgKi8KLQlpaWYtPnJjdmNhbGxiX3NrYiA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBXaWxsIGJlIHNldCBieSBMTCAqLwotCWlpZi0+c3RhdGNhbGxiID0gTlVMTDsgICAgICAgICAgICAgICAgICAgIC8qIFdpbGwgYmUgc2V0IGJ5IExMICovCisJaWlmLT53cml0ZWNtZCA9IE5VTEw7CQkJLyogRG9uJ3Qgc3VwcG9ydCBpc2RuY3RybCAqLworCWlpZi0+cmVhZHN0YXQgPSBOVUxMOwkJCS8qIERvbid0IHN1cHBvcnQgaXNkbmN0cmwgKi8KKwlpaWYtPnJjdmNhbGxiX3NrYiA9IE5VTEw7CQkvKiBXaWxsIGJlIHNldCBieSBMTCAqLworCWlpZi0+c3RhdGNhbGxiID0gTlVMTDsJCQkvKiBXaWxsIGJlIHNldCBieSBMTCAqLwogCiAJaWYgKCFyZWdpc3Rlcl9pc2RuKGlpZikpCiAJCXJldHVybiAwOwogCi0JY3MtPm15aWQgPSBpaWYtPmNoYW5uZWxzOyAgICAgICAgICAgICAgICAgLyogU2V0IG15IGRldmljZSBpZCAqLworCWNzLT5teWlkID0gaWlmLT5jaGFubmVsczsJCS8qIFNldCBteSBkZXZpY2UgaWQgKi8KIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKaW5kZXggM2E4MWQ5Yy4uMDhlNGM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKQEAgLTksOCArOSw2IEBACiAgKiAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogaW50ZXJmYWNlLmMsdiAxLjE0LjQuMTUgMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCkBAIC0yNCw3ICsyMiw3IEBACiB7CiAJaW50IGNtZCA9ICphcmc7CiAKLQlkYmcoREVCVUdfSUYsICIldTogaWZfbG9jayAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZfbG9jayAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOwogCiAJaWYgKGNtZCA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzUsNyArMzMsNyBAQAogCX0KIAogCWlmICghY21kICYmIGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSA9PSBNU19MT0NLRUQKLQkgICAgJiYgYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7CisJICAgICYmIGNzLT5jb25uZWN0ZWQpIHsKIAkJY3MtPm9wcy0+c2V0X21vZGVtX2N0cmwoY3MsIDAsIFRJT0NNX0RUUnxUSU9DTV9SVFMpOwogCQljcy0+b3BzLT5iYXVkX3JhdGUoY3MsIEIxMTUyMDApOwogCQljcy0+b3BzLT5zZXRfbGluZV9jdHJsKGNzLCBDUzgpOwpAQCAtNDQsMTIgKzQyLDEyIEBACiAKIAljcy0+d2FpdGluZyA9IDE7CiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgRVZfSUZfTE9DSywKLQkJICAgICAgICAgICAgICAgTlVMTCwgY21kLCBOVUxMKSkgeworCQkJICAgICAgIE5VTEwsIGNtZCwgTlVMTCkpIHsKIAkJY3MtPndhaXRpbmcgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBJRl9MT0NLIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX0xPQ0siKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKQEAgLTY4LDcgKzY2LDcgQEAKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY29tcGF0WzRdID0gR0lHX0NPTVBBVDsKIAl1bnNpZ25lZCBjbWQgPSBhcmdbMF07CiAKLQlkYmcoREVCVUdfSUYsICIldTogaWZfdmVyc2lvbiAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZfdmVyc2lvbiAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEdJR1ZFUl9EUklWRVI6CkBAIC04MCwxMiArNzgsMTIgQEAKIAljYXNlIEdJR1ZFUl9GV0JBU0U6CiAJCWNzLT53YWl0aW5nID0gMTsKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgRVZfSUZfVkVSLAotCQkJICAgICAgICAgICAgICAgTlVMTCwgMCwgYXJnKSkgeworCQkJCSAgICAgICBOVUxMLCAwLCBhcmcpKSB7CiAJCQljcy0+d2FpdGluZyA9IDA7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX1ZFUiIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSUZfVkVSIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKQEAgLTEwMSw3ICs5OSw3IEBACiAKIHN0YXRpYyBpbnQgaWZfY29uZmlnKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgKmFyZykKIHsKLQlkYmcoREVCVUdfSUYsICIldTogaWZfY29uZmlnICglZCkiLCBjcy0+bWlub3JfaW5kZXgsICphcmcpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZfY29uZmlnICglZCkiLCBjcy0+bWlub3JfaW5kZXgsICphcmcpOwogCiAJaWYgKCphcmcgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDksNiArMTA3LDExIEBACiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZXJyKCJub3QgY29ubmVjdGVkISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAkqYXJnID0gMDsKIAlyZXR1cm4gZ2lnYXNldF9lbnRlcmNvbmZpZ21vZGUoY3MpOwogfQpAQCAtMTE5LDcgKzEyMiw3IEBACiBzdGF0aWMgaW50ICBpZl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkIGlmX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyBpbnQgIGlmX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgIGlmX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgaW50ICBpZl9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBpZl90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKQEAgLTEyNyw5ICsxMzAsOSBAQAogc3RhdGljIHZvaWQgaWZfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCk7CiBzdGF0aWMgaW50ICBpZl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50ICBpZl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CisJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIGludCAgaWZfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKKwkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgaWZfb3BzID0gewogCS5vcGVuID0JCQlpZl9vcGVuLApAQCAtMTUzLDggKzE1Niw4IEBACiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRiZyhERUJVR19JRiwgIiVkKyVkOiAlcygpIiwgdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0LCB0dHktPmluZGV4LAotCSAgICBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIlZCslZDogJXMoKSIsCisJCXR0eS0+ZHJpdmVyLT5taW5vcl9zdGFydCwgdHR5LT5pbmRleCwgX19mdW5jX18pOwogCiAJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKQEAgLTE2Miw3ICsxNjUsNyBAQAogCWlmICghY3MpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBjczsKIApAQCAtMTczLDEwICsxNzYsOSBAQAogCQljcy0+dHR5ID0gdHR5OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQl0dHktPmxvd19sYXRlbmN5ID0gMTsgLy9GSVhNRSB0ZXN0Ci0JCS8vRklYTUUKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xODcsMzAgKzE4OSwyOSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSB7CiAJCWlmICghLS1jcy0+b3Blbl9jb3VudCkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCQljcy0+dHR5ID0gTlVMTDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQkvL0ZJWE1FCiAJCX0KIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGlmX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCWludCByZXR2YWwgPSAtRU5PREVWOwpAQCAtMjIwLDE3ICsyMjEsMTcgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoMHgleCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXywgY21kKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKDB4JXgpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXywgY21kKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIHsKIAkJcmV0dmFsID0gMDsKIAkJc3dpdGNoIChjbWQpIHsKQEAgLTI1MCwzNyArMjUxLDQwIEBACiAJCQlicmVhazsKIAkJY2FzZSBHSUdBU0VUX0JSS0NIQVJTOgogCQkJLy9GSVhNRSB0ZXN0IGlmIE1TX0xPQ0tFRAotCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0lGLCAiR0lHQVNFVF9CUktDSEFSUyIsCi0JCQkgICAgICAgICAgICAgICAgICAgNiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYXJnLCAxKTsKLQkJCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCQkJZGJnKERFQlVHX0FOWSwgImNhbid0IGNvbW11bmljYXRlIHdpdGggdW5wbHVnZ2VkIGRldmljZSIpOworCQkJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCQkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkJICAgICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJCQlyZXR2YWwgPSAtRU5PREVWOwogCQkJCWJyZWFrOwogCQkJfQogCQkJcmV0dmFsID0gY29weV9mcm9tX3VzZXIoJmJ1ZiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSBhcmcsIDYpCi0JCQkgICAgICAgICA/IC1FRkFVTFQgOiAwOwotCQkJaWYgKHJldHZhbCA+PSAwKQorCQkJCQkoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKikgYXJnLCA2KQorCQkJCT8gLUVGQVVMVCA6IDA7CisJCQlpZiAocmV0dmFsID49IDApIHsKKwkJCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfSUYsICJHSUdBU0VUX0JSS0NIQVJTIiwKKwkJCQkJCTYsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFyZyk7CiAJCQkJcmV0dmFsID0gY3MtPm9wcy0+YnJrY2hhcnMoY3MsIGJ1Zik7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBHSUdBU0VUX1ZFUlNJT046Ci0JCQlyZXR2YWwgPSBjb3B5X2Zyb21fdXNlcih2ZXJzaW9uLCAodW5zaWduZWQgX191c2VyICopIGFyZywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiB2ZXJzaW9uKSA/IC1FRkFVTFQgOiAwOworCQkJcmV0dmFsID0gY29weV9mcm9tX3VzZXIodmVyc2lvbiwKKwkJCQkJKHVuc2lnbmVkIF9fdXNlciAqKSBhcmcsIHNpemVvZiB2ZXJzaW9uKQorCQkJCT8gLUVGQVVMVCA6IDA7CiAJCQlpZiAocmV0dmFsID49IDApCiAJCQkJcmV0dmFsID0gaWZfdmVyc2lvbihjcywgdmVyc2lvbik7CiAJCQlpZiAocmV0dmFsID49IDApCi0JCQkJcmV0dmFsID0gY29weV90b191c2VyKCh1bnNpZ25lZCBfX3VzZXIgKikgYXJnLCB2ZXJzaW9uLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgdmVyc2lvbikKLQkJCQkgICAgICAgICA/IC1FRkFVTFQgOiAwOworCQkJCXJldHZhbCA9IGNvcHlfdG9fdXNlcigodW5zaWduZWQgX191c2VyICopIGFyZywKKwkJCQkJCSAgICAgIHZlcnNpb24sIHNpemVvZiB2ZXJzaW9uKQorCQkJCQk/IC1FRkFVTFQgOiAwOwogCQkJYnJlYWs7Ci0JICAgICAgICBkZWZhdWx0OgotCQkJZGJnKERFQlVHX0FOWSwgIiVzOiBhcmcgbm90IHN1cHBvcnRlZCAtIDB4JTA0eCIsCi0JCQkgICAgX19GVU5DVElPTl9fLCBjbWQpOworCQlkZWZhdWx0OgorCQkJZ2lnX2RiZyhERUJVR19BTlksICIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLAorCQkJCV9fZnVuY19fLCBjbWQpOwogCQkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOwogCQl9CiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0yOTIsMjUgKzI5NiwyNSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJLy8gRklYTUUgcmVhZCBmcm9tIGRldmljZT8KIAlyZXR2YWwgPSBjcy0+Y29udHJvbF9zdGF0ZSAmIChUSU9DTV9SVFN8VElPQ01fRFRSKTsKIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IGlmX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJaW50IHJldHZhbDsKQEAgLTMxOCwxOCArMzIyLDE4IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLAotCSAgICAiJXU6ICVzKDB4JXgsIDB4JXgpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18sIHNldCwgY2xlYXIpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoMHgleCwgMHgleCkiLAorCQljcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fLCBzZXQsIGNsZWFyKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19BTlksICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAl9IGVsc2UgewogCQltYyA9IChjcy0+Y29udHJvbF9zdGF0ZSB8IHNldCkgJiB+Y2xlYXIgJiAoVElPQ01fUlRTfFRJT0NNX0RUUik7CkBAIC0zMzcsNyArMzQxLDcgQEAKIAkJY3MtPmNvbnRyb2xfc3RhdGUgPSBtYzsKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM0OSwyOSArMzUzLDI5IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkgewogCQl3YXJuKCJjYW4ndCB3cml0ZSB0byB1bmxvY2tlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOwotCX0gZWxzZSBpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOworCX0gZWxzZSBpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsgLy9GSVhNRQogCX0gZWxzZSB7CiAJCXJldHZhbCA9IGNzLT5vcHMtPndyaXRlX2NtZChjcywgYnVmLCBjb3VudCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcy0+aWZfd2FrZV90YXNrbGV0KTsKKwkJCQkJICAgICZjcy0+aWZfd2FrZV90YXNrbGV0KTsKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM4MywyNyArMzg3LDI3IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkgewogCQl3YXJuKCJjYW4ndCB3cml0ZSB0byB1bmxvY2tlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOyAvL0ZJWE1FCi0JfSBlbHNlIGlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CisJfSBlbHNlIGlmICghY3MtPmNvbm5lY3RlZCkgeworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOyAvL0ZJWE1FCiAJfSBlbHNlCiAJCXJldHZhbCA9IGNzLT5vcHMtPndyaXRlX3Jvb20oY3MpOwogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC00MTUsMjcgKzQxOSwyNyBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpIHsKIAkJd2FybigiY2FuJ3Qgd3JpdGUgdG8gdW5sb2NrZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsKLQl9IGVsc2UgaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwl9IGVsc2UgaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRUJVU1k7IC8vRklYTUUKIAl9IGVsc2UKIAkJcmV0dmFsID0gY3MtPm9wcy0+Y2hhcnNfaW5fYnVmZmVyKGNzKTsKIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNDQ2LDIxICs0NTAsMjEgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlkb3duKCZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgewogCQkvL0ZJWE1FCiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaWZfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNDY5LDIxICs0NzMsMjEgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlkb3duKCZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgewogCQkvL0ZJWE1FCiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaWZfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCkKQEAgLTQ5NiwyMSArNTAwLDIxIEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWlmICghY3MtPm9wZW5fY291bnQpIHsKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CisJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTE4LDggKzUyMiw4IEBACiAJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CiAJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJb2xkX2NmbGFnID0gb2xkID8gb2xkLT5jX2NmbGFnIDogY2ZsYWc7IC8vRklYTUU/Ci0JZGJnKERFQlVHX0lGLCAiJXU6IGlmbGFnICV4IGNmbGFnICV4IG9sZCAleCIsIGNzLT5taW5vcl9pbmRleCwKLQkgICAgaWZsYWcsIGNmbGFnLCBvbGRfY2ZsYWcpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZsYWcgJXggY2ZsYWcgJXggb2xkICV4IiwKKwkJY3MtPm1pbm9yX2luZGV4LCBpZmxhZywgY2ZsYWcsIG9sZF9jZmxhZyk7CiAKIAkvKiBnZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBjdXJyZW50IHBvcnQgc2V0dGluZ3MgKi8KIAljb250cm9sX3N0YXRlID0gY3MtPmNvbnRyb2xfc3RhdGU7CkBAIC01MzEsMTQgKzUzNSwxNSBAQAogCSAqIFByZW1hdHVyZSBvcHRpbWl6YXRpb24gaXMgdGhlIHJvb3Qgb2YgYWxsIGV2aWwuCiAJICovCiAKLSAgICAgICAgLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KKwkvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLwogCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCW5ld19zdGF0ZSA9IGNvbnRyb2xfc3RhdGUgfCBUSU9DTV9EVFI7CiAJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCiAJCWlmICghKG9sZF9jZmxhZyAmIENSVFNDVFMpKQogCQkJbmV3X3N0YXRlIHw9IFRJT0NNX1JUUzsKLQkJZGJnKERFQlVHX0lGLCAiJXU6IGZyb20gQjAgLSBzZXQgRFRSJXMiLCBjcy0+bWlub3JfaW5kZXgsCi0JCSAgICAobmV3X3N0YXRlICYgVElPQ01fUlRTKSA/ICIgb25seSIgOiAiL1JUUyIpOworCQlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IGZyb20gQjAgLSBzZXQgRFRSJXMiLAorCQkJY3MtPm1pbm9yX2luZGV4LAorCQkJKG5ld19zdGF0ZSAmIFRJT0NNX1JUUykgPyAiIG9ubHkiIDogIi9SVFMiKTsKIAkJY3MtPm9wcy0+c2V0X21vZGVtX2N0cmwoY3MsIGNvbnRyb2xfc3RhdGUsIG5ld19zdGF0ZSk7CiAJCWNvbnRyb2xfc3RhdGUgPSBuZXdfc3RhdGU7CiAJfQpAQCAtNTQ3LDcgKzU1Miw3IEBACiAKIAlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KLQkJZGJnKERFQlVHX0lGLCAiJXU6IHRvIEIwIC0gZHJvcCBEVFIvUlRTIiwgY3MtPm1pbm9yX2luZGV4KTsKKwkJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiB0byBCMCAtIGRyb3AgRFRSL1JUUyIsIGNzLT5taW5vcl9pbmRleCk7CiAJCW5ld19zdGF0ZSA9IGNvbnRyb2xfc3RhdGUgJiB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CiAJCWNzLT5vcHMtPnNldF9tb2RlbV9jdHJsKGNzLCBjb250cm9sX3N0YXRlLCBuZXdfc3RhdGUpOwogCQljb250cm9sX3N0YXRlID0gbmV3X3N0YXRlOwpAQCAtNTY3LDE1ICs1NzIsMTcgQEAKIAkgKiBKdXN0IGRvIHdoYXQgd2UgaGF2ZSBzZWVuIHdpdGggU25pZmZVU0Igb24gV2luOTguCiAJICovCiAJLyogRHJvcCBEVFIvUlRTIGlmIG5vIGZsb3cgY29udHJvbCBvdGhlcndpc2UgYXNzZXJ0ICovCi0JZGJnKERFQlVHX0lGLCAiJXU6IGNvbnRyb2xfc3RhdGUgJXgiLCBjcy0+bWlub3JfaW5kZXgsIGNvbnRyb2xfc3RhdGUpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogY29udHJvbF9zdGF0ZSAleCIsCisJCWNzLT5taW5vcl9pbmRleCwgY29udHJvbF9zdGF0ZSk7CiAJbmV3X3N0YXRlID0gY29udHJvbF9zdGF0ZTsKIAlpZiAoKGlmbGFnICYgSVhPRkYpIHx8IChpZmxhZyAmIElYT04pIHx8IChjZmxhZyAmIENSVFNDVFMpKQogCQluZXdfc3RhdGUgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTOwogCWVsc2UKIAkJbmV3X3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAlpZiAobmV3X3N0YXRlICE9IGNvbnRyb2xfc3RhdGUpIHsKLQkJZGJnKERFQlVHX0lGLCAiJXU6IG5ld19zdGF0ZSAleCIsIGNzLT5taW5vcl9pbmRleCwgbmV3X3N0YXRlKTsKLQkJZ2lnYXNldF9zZXRfbW9kZW1fY3RybChjcywgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlKTsgLy8gRklYTUU6IG1jdF91MjMyLmMgc2V0cyB0aGUgb2xkIHN0YXRlIGhlcmUuIGlzIHRoaXMgYSBidWc/CisJCWdpZ19kYmcoREVCVUdfSUYsICIldTogbmV3X3N0YXRlICV4IiwKKwkJCWNzLT5taW5vcl9pbmRleCwgbmV3X3N0YXRlKTsKKwkJZ2lnYXNldF9zZXRfbW9kZW1fY3RybChjcywgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlKTsKIAkJY29udHJvbF9zdGF0ZSA9IG5ld19zdGF0ZTsKIAl9CiAjZW5kaWYKQEAgLTU4NCw3ICs1OTEsNyBAQAogCWNzLT5jb250cm9sX3N0YXRlID0gY29udHJvbF9zdGF0ZTsKIAogb3V0OgotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiAKIApAQCAtNjAwLDcgKzYwNyw3IEBACiAKIAlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKIAkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApIHsKLQkJZGJnKERFQlVHX0lGLCAid3JpdGUgd2FrZXVwIGNhbGwiKTsKKwkJZ2lnX2RiZyhERUJVR19JRiwgIndyaXRlIHdha2V1cCBjYWxsIik7CiAJCXR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKHR0eSk7CiAJfQogCkBAIC02MzUsMTQgKzY0MiwxNCBAQAogfQogCiB2b2lkIGdpZ2FzZXRfaWZfcmVjZWl2ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbikKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoKHR0eSA9IGNzLT50dHkpID09IE5VTEwpCi0JCWRiZyhERUJVR19BTlksICJyZWNlaXZlIG9uIGNsb3NlZCBkZXZpY2UiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJyZWNlaXZlIG9uIGNsb3NlZCBkZXZpY2UiKTsKIAllbHNlIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW4pOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgYnVmZmVyLCBsZW4pOwpAQCAtNjU1LDEzICs2NjIsMTMgQEAKIC8qIGdpZ2FzZXRfaWZfaW5pdGRyaXZlcgogICogSW5pdGlhbGl6ZSB0dHkgaW50ZXJmYWNlLgogICogcGFyYW1ldGVyczoKLSAqICAgICAgZHJ2ICAgICAgICAgICAgIERyaXZlcgotICogICAgICBwcm9jbmFtZSAgICAgICAgTmFtZSBvZiB0aGUgZHJpdmVyIChlLmcuIGZvciAvcHJvYy90dHkvZHJpdmVycykKLSAqICAgICAgZGV2bmFtZSAgICAgICAgIE5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyAocHJlZml4IHdpdGhvdXQgbWlub3IgbnVtYmVyKQotICogICAgICBkZXZmc25hbWUgICAgICAgRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKKyAqCWRydgkJRHJpdmVyCisgKglwcm9jbmFtZQlOYW1lIG9mIHRoZSBkcml2ZXIgKGUuZy4gZm9yIC9wcm9jL3R0eS9kcml2ZXJzKQorICoJZGV2bmFtZQkJTmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIChwcmVmaXggd2l0aG91dCBtaW5vciBudW1iZXIpCisgKglkZXZmc25hbWUJRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKICAqLwogdm9pZCBnaWdhc2V0X2lmX2luaXRkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKQorCQkJICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKQogewogCXVuc2lnbmVkIG1pbm9ycyA9IGRydi0+bWlub3JzOwogCWludCByZXQ7CkBAIC02OTYsNyArNzAzLDcgQEAKIAkJd2FybigiZmFpbGVkIHRvIHJlZ2lzdGVyIHR0eSBkcml2ZXIgKGVycm9yICVkKSIsIHJldCk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRiZyhERUJVR19JRiwgInR0eSBkcml2ZXIgaW5pdGlhbGl6ZWQiKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAidHR5IGRyaXZlciBpbml0aWFsaXplZCIpOwogCWRydi0+aGF2ZV90dHkgPSAxOwogCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMKaW5kZXggNTc0NGViOS4uNDVmMDE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jCkBAIC0xMCwxMCArMTAsNiBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBpc29jZGF0YS5jLHYgMS4yLjIuNSAyMDA1LzExLzEzIDIzOjA1OjE5IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTg3LDE0ICs4MywxNCBAQAogewogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmaXdiLT53cml0ZXNlbSkpIHsKIAkJYXRvbWljX2luYygmaXdiLT53cml0ZXNlbSk7Ci0JCWRiZyhERUJVR19JU08sCi0JCSAgICAiJXM6IGNvdWxkbid0IGFjcXVpcmUgaXNvIHdyaXRlIHNlbWFwaG9yZSIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogY291bGRuJ3QgYWNxdWlyZSBpc28gd3JpdGUgc2VtYXBob3JlIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCi0JZGJnKERFQlVHX0lTTywKLQkgICAgIiVzOiBhY3F1aXJlZCBpc28gd3JpdGUgc2VtYXBob3JlLCBkYXRhW3dyaXRlXT0lMDJ4LCBuYml0cz0lZCIsCi0JICAgIF9fZnVuY19fLCBpd2ItPmRhdGFbYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpXSwgaXdiLT53Yml0cyk7CisJZ2lnX2RiZyhERUJVR19JU08sCisJCSIlczogYWNxdWlyZWQgaXNvIHdyaXRlIHNlbWFwaG9yZSwgZGF0YVt3cml0ZV09JTAyeCwgbmJpdHM9JWQiLAorCQlfX2Z1bmNfXywgaXdiLT5kYXRhW2F0b21pY19yZWFkKCZpd2ItPndyaXRlKV0sIGl3Yi0+d2JpdHMpOwogI2VuZGlmCiAJcmV0dXJuIDE7CiB9CkBAIC0xNDcsNyArMTQzLDcgQEAKIAkvKiByZWNvdmVyIHRoZSBpZGxlIGZsYWcgYnl0ZSAqLwogCXdyaXRlID0gYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpOwogCWl3Yi0+aWRsZSA9IGl3Yi0+ZGF0YVt3cml0ZV07Ci0JZGJnKERFQlVHX0lTTywgImlkbGUgZmlsbCBieXRlICUwMngiLCBpd2ItPmlkbGUpOworCWdpZ19kYmcoREVCVUdfSVNPLCAiaWRsZSBmaWxsIGJ5dGUgJTAyeCIsIGl3Yi0+aWRsZSk7CiAJLyogbWFzayBleHRyYW5lb3VzIGJpdHMgaW4gYnVmZmVyICovCiAJaXdiLT5kYXRhW3dyaXRlXSAmPSAoMSA8PCBpd2ItPndiaXRzKSAtIDE7CiB9CkBAIC0xNjYsMTUgKzE2MiwxNCBAQAogCXJlYWQgPSBhdG9taWNfcmVhZCgmaXdiLT5uZXh0cmVhZCk7CiAJd3JpdGUgPSBhdG9taWNfcmVhZCgmaXdiLT53cml0ZSk7CiAJaWYgKGxpa2VseShyZWFkID09IHdyaXRlKSkgewotCQkvL2RiZyhERUJVR19TVFJFQU0sICIlczogc2VuZCBidWZmZXIgZW1wdHkiLCBfX2Z1bmNfXyk7CiAJCS8qIHJldHVybiBpZGxlIGZyYW1lICovCiAJCXJldHVybiByZWFkIDwgQkFTX09VVEJVRlBBRCA/Ci0JCSAgICAgICAgQkFTX09VVEJVRlNJWkUgOiByZWFkIC0gQkFTX09VVEJVRlBBRDsKKwkJCUJBU19PVVRCVUZTSVpFIDogcmVhZCAtIEJBU19PVVRCVUZQQUQ7CiAJfQogCiAJbGltaXQgPSByZWFkICsgc2l6ZTsKLQlkYmcoREVCVUdfU1RSRUFNLAotCSAgICAiJXM6IHJlYWQ9JWQgd3JpdGU9JWQgbGltaXQ9JWQiLCBfX2Z1bmNfXywgcmVhZCwgd3JpdGUsIGxpbWl0KTsKKwlnaWdfZGJnKERFQlVHX1NUUkVBTSwgIiVzOiByZWFkPSVkIHdyaXRlPSVkIGxpbWl0PSVkIiwKKwkJX19mdW5jX18sIHJlYWQsIHdyaXRlLCBsaW1pdCk7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAlpZiAodW5saWtlbHkoc2l6ZSA8IDAgfHwgc2l6ZSA+IEJBU19PVVRCVUZQQUQpKSB7CiAJCWVycigiaW52YWxpZCBzaXplICVkIiwgc2l6ZSk7CkBAIC0xOTYsMTEgKzE5MSwxMiBAQAogCQkJCXJldHVybiAtRUJVU1k7CiAJCQkvKiB3cml0ZSBwb3NpdGlvbiBjb3VsZCBoYXZlIGNoYW5nZWQgKi8KIAkJCWlmIChsaW1pdCA+PSAod3JpdGUgPSBhdG9taWNfcmVhZCgmaXdiLT53cml0ZSkpKSB7Ci0JCQkJcGJ5dGUgPSBpd2ItPmRhdGFbd3JpdGVdOyAvKiBzYXZlIHBhcnRpYWwgYnl0ZSAqLworCQkJCXBieXRlID0gaXdiLT5kYXRhW3dyaXRlXTsgLyogc2F2ZQorCQkJCQkJCSAgICAgcGFydGlhbCBieXRlICovCiAJCQkJbGltaXQgPSB3cml0ZSArIEJBU19PVVRCVUZQQUQ7Ci0JCQkJZGJnKERFQlVHX1NUUkVBTSwKLQkJCQkgICAgIiVzOiBmaWxsaW5nICVkLT4lZCB3aXRoICUwMngiLAotCQkJCSAgICBfX2Z1bmNfXywgd3JpdGUsIGxpbWl0LCBpd2ItPmlkbGUpOworCQkJCWdpZ19kYmcoREVCVUdfU1RSRUFNLAorCQkJCQkiJXM6IGZpbGxpbmcgJWQtPiVkIHdpdGggJTAyeCIsCisJCQkJCV9fZnVuY19fLCB3cml0ZSwgbGltaXQsIGl3Yi0+aWRsZSk7CiAJCQkJaWYgKHdyaXRlICsgQkFTX09VVEJVRlBBRCA8IEJBU19PVVRCVUZTSVpFKQogCQkJCQltZW1zZXQoaXdiLT5kYXRhICsgd3JpdGUsIGl3Yi0+aWRsZSwKIAkJCQkJICAgICAgIEJBU19PVVRCVUZQQUQpOwpAQCAtMjExLDkgKzIwNywxMSBAQAogCQkJCQkgICAgICAgLSB3cml0ZSk7CiAJCQkJCWxpbWl0ID0gMDsKIAkJCQl9Ci0JCQkJZGJnKERFQlVHX1NUUkVBTSwgIiVzOiByZXN0b3JpbmcgJTAyeCBhdCAlZCIsCi0JCQkJICAgIF9fZnVuY19fLCBwYnl0ZSwgbGltaXQpOwotCQkJCWl3Yi0+ZGF0YVtsaW1pdF0gPSBwYnl0ZTsgLyogcmVzdG9yZSBwYXJ0aWFsIGJ5dGUgKi8KKwkJCQlnaWdfZGJnKERFQlVHX1NUUkVBTSwKKwkJCQkJIiVzOiByZXN0b3JpbmcgJTAyeCBhdCAlZCIsCisJCQkJCV9fZnVuY19fLCBwYnl0ZSwgbGltaXQpOworCQkJCWl3Yi0+ZGF0YVtsaW1pdF0gPSBwYnl0ZTsgLyogcmVzdG9yZQorCQkJCQkJCSAgICAgcGFydGlhbCBieXRlICovCiAJCQkJYXRvbWljX3NldCgmaXdiLT53cml0ZSwgbGltaXQpOwogCQkJfQogCQkJaXNvd2J1Zl9kb25ld3JpdGUoaXdiKTsKQEAgLTI0MiwxOSArMjQwLDE3IEBACiAgKiB3cml0ZSBoZXggYnl0ZXMgdG8gc3lzbG9nIGZvciBkZWJ1Z2dpbmcKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYnl0ZXMoZW51bSBkZWJ1Z2xldmVsIGxldmVsLCBjb25zdCBjaGFyICp0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcywgaW50IGNvdW50KQorCQkJICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBjb3VudCkKIHsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCXVuc2lnbmVkIGNoYXIgYzsKIAlzdGF0aWMgY2hhciBkYmdsaW5lWzMgKiAzMiArIDFdOwogCXN0YXRpYyBjb25zdCBjaGFyIGhleGRpZ2l0W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAJaW50IGkgPSAwOwotCUlGTlVMTFJFVCh0YWcpOwotCUlGTlVMTFJFVChieXRlcyk7CiAJd2hpbGUgKGNvdW50LS0gPiAwKSB7CiAJCWlmIChpID4gc2l6ZW9mKGRiZ2xpbmUpIC0gNCkgewogCQkJZGJnbGluZVtpXSA9ICdcMCc7Ci0JCQlkYmcobGV2ZWwsICIlczolcyIsIHRhZywgZGJnbGluZSk7CisJCQlnaWdfZGJnKGxldmVsLCAiJXM6JXMiLCB0YWcsIGRiZ2xpbmUpOwogCQkJaSA9IDA7CiAJCX0KIAkJYyA9ICpieXRlcysrOwpAQCAtMjY0LDcgKzI2MCw3IEBACiAJCWRiZ2xpbmVbaSsrXSA9IGhleGRpZ2l0W2MgJiAweDBmXTsKIAl9CiAJZGJnbGluZVtpXSA9ICdcMCc7Ci0JZGJnKGxldmVsLCAiJXM6JXMiLCB0YWcsIGRiZ2xpbmUpOworCWdpZ19kYmcobGV2ZWwsICIlczolcyIsIHRhZywgZGJnbGluZSk7CiAjZW5kaWYKIH0KIApAQCAtMzgwLDcgKzM3Niw3IEBACiAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgaGRsY19iaXRzdHVmZl9ieXRlKHN0cnVjdCBpc293YnVmX3QgKml3YiwgdW5zaWduZWQgY2hhciBjaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9uZXMpCisJCQkJICAgICBpbnQgb25lcykKIHsKIAl1MTYgc3R1ZmY7CiAJaW50IHNoaWZ0aW5jLCBuZXdvbmVzOwpAQCAtNDIyLDcgKzQxOCw3IEBACiAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgaGRsY19idWlsZGZyYW1lKHN0cnVjdCBpc293YnVmX3QgKml3YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICppbiwgaW50IGNvdW50KQorCQkJCSAgdW5zaWduZWQgY2hhciAqaW4sIGludCBjb3VudCkKIHsKIAlpbnQgb25lczsKIAl1MTYgZmNzOwpAQCAtNDMxLDggKzQyNyw4IEBACiAKIAlpZiAoaXNvd2J1Zl9mcmVlYnl0ZXMoaXdiKSA8IGNvdW50ICsgY291bnQgLyA1ICsgNiB8fAogCSAgICAhaXNvd2J1Zl9zdGFydHdyaXRlKGl3YikpIHsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyBmcmVlIC0+IC1FQUdBSU4iLAotCQkgICAgX19mdW5jX18sIGlzb3didWZfZnJlZWJ5dGVzKGl3YikpOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyBmcmVlIC0+IC1FQUdBSU4iLAorCQkJX19mdW5jX18sIGlzb3didWZfZnJlZWJ5dGVzKGl3YikpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTQ4NCwxMSArNDgwLDExIEBACiAKIAlpZiAoaXNvd2J1Zl9mcmVlYnl0ZXMoaXdiKSA8IGNvdW50IHx8CiAJICAgICFpc293YnVmX3N0YXJ0d3JpdGUoaXdiKSkgewotCQlkYmcoREVCVUdfSVNPLCAiY2FuJ3QgcHV0ICVkIGJ5dGVzIiwgY291bnQpOworCQlnaWdfZGJnKERFQlVHX0lTTywgImNhbid0IHB1dCAlZCBieXRlcyIsIGNvdW50KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JZGJnKERFQlVHX1NUUkVBTSwgInB1dCAlZCBieXRlcyIsIGNvdW50KTsKKwlnaWdfZGJnKERFQlVHX1NUUkVBTSwgInB1dCAlZCBieXRlcyIsIGNvdW50KTsKIAl3cml0ZSA9IGF0b21pY19yZWFkKCZpd2ItPndyaXRlKTsKIAlkbyB7CiAJCWMgPSBnaWdhc2V0X2ludnRhYlsqaW4rK107CkBAIC01MDgsMTEgKzUwNCwxMyBAQAogCXN3aXRjaCAoYmNzLT5wcm90bzIpIHsKIAljYXNlIElTRE5fUFJPVE9fTDJfSERMQzoKIAkJcmVzdWx0ID0gaGRsY19idWlsZGZyYW1lKGJjcy0+aHcuYmFzLT5pc29vdXRidWYsIGluLCBsZW4pOwotCQlkYmcoREVCVUdfSVNPLCAiJXM6ICVkIGJ5dGVzIEhETEMgLT4gJWQiLCBfX2Z1bmNfXywgbGVuLCByZXN1bHQpOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyBIRExDIC0+ICVkIiwKKwkJCV9fZnVuY19fLCBsZW4sIHJlc3VsdCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkJLyogYXNzdW1lIHRyYW5zcGFyZW50ICovCiAJCXJlc3VsdCA9IHRyYW5zX2J1aWxkZnJhbWUoYmNzLT5ody5iYXMtPmlzb291dGJ1ZiwgaW4sIGxlbik7Ci0JCWRiZyhERUJVR19JU08sICIlczogJWQgYnl0ZXMgdHJhbnMgLT4gJWQiLCBfX2Z1bmNfXywgbGVuLCByZXN1bHQpOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyB0cmFucyAtPiAlZCIsCisJCQlfX2Z1bmNfXywgbGVuLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtNTI4LDEzICs1MjYsMTMgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAodW5saWtlbHkoYmNzLT5za2ItPmxlbiA9PSBTQlVGU0laRSkpIHsKLQkJd2FybigicmVjZWl2ZWQgb3ZlcnNpemVkIHBhY2tldCBkaXNjYXJkZWQiKTsKKwkJZGV2X3dhcm4oYmNzLT5jcy0+ZGV2LCAicmVjZWl2ZWQgb3ZlcnNpemVkIHBhY2tldCBkaXNjYXJkZWRcbiIpOwogCQliY3MtPmh3LmJhcy0+Z2lhbnRzKys7CiAJCWRldl9rZnJlZV9za2JfYW55KGJjcy0+c2tiKTsKIAkJYmNzLT5za2IgPSBOVUxMOwogCQlyZXR1cm47CiAJfQotCSpnaWdhc2V0X3NrYl9wdXRfcXVpY2soYmNzLT5za2IsIDEpID0gYzsKKwkqX19za2JfcHV0KGJjcy0+c2tiLCAxKSA9IGM7CiB9CiAKIC8qIGhkbGNfZmx1c2gKQEAgLTU0OSw3ICs1NDcsNyBAQAogCQlpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQkJc2tiX3Jlc2VydmUoYmNzLT5za2IsIEhXX0hEUl9MRU4pOwogCQllbHNlCi0JCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJfQogCiAJLyogcmVzZXQgcGFja2V0IHN0YXRlICovCkBAIC01NzEsMjMgKzU2OSwyNSBAQAogCiAJaWYgKChwcm9jc2tiID0gYmNzLT5za2IpID09IE5VTEwpIHsKIAkJLyogcHJldmlvdXMgZXJyb3IgKi8KLQkJZGJnKERFQlVHX0lTTywgIiVzOiBza2I9TlVMTCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogc2tiPU5VTEwiLCBfX2Z1bmNfXyk7CiAJCWdpZ2FzZXRfcmN2X2Vycm9yKE5VTEwsIGJjcy0+Y3MsIGJjcyk7CiAJfSBlbHNlIGlmIChwcm9jc2tiLT5sZW4gPCAyKSB7Ci0JCW5vdGljZSgicmVjZWl2ZWQgc2hvcnQgZnJhbWUgKCVkIG9jdGV0cykiLCBwcm9jc2tiLT5sZW4pOworCQlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgInJlY2VpdmVkIHNob3J0IGZyYW1lICglZCBvY3RldHMpXG4iLAorCQkJICAgcHJvY3NrYi0+bGVuKTsKIAkJYmNzLT5ody5iYXMtPnJ1bnRzKys7CiAJCWdpZ2FzZXRfcmN2X2Vycm9yKHByb2Nza2IsIGJjcy0+Y3MsIGJjcyk7CiAJfSBlbHNlIGlmIChiY3MtPmZjcyAhPSBQUFBfR09PREZDUykgewotCQlub3RpY2UoImZyYW1lIGNoZWNrIGVycm9yICgweCUwNHgpIiwgYmNzLT5mY3MpOworCQlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgImZyYW1lIGNoZWNrIGVycm9yICgweCUwNHgpXG4iLAorCQkJICAgYmNzLT5mY3MpOwogCQliY3MtPmh3LmJhcy0+ZmNzZXJycysrOwogCQlnaWdhc2V0X3Jjdl9lcnJvcihwcm9jc2tiLCBiY3MtPmNzLCBiY3MpOwogCX0gZWxzZSB7CiAJCXByb2Nza2ItPmxlbiAtPSAyOwkJLyogc3VidHJhY3QgRkNTICovCiAJCXByb2Nza2ItPnRhaWwgLT0gMjsKLQkJZGJnKERFQlVHX0lTTywKLQkJICAgICIlczogZ29vZCBmcmFtZSAoJWQgb2N0ZXRzKSIsIF9fZnVuY19fLCBwcm9jc2tiLT5sZW4pOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBnb29kIGZyYW1lICglZCBvY3RldHMpIiwKKwkJCV9fZnVuY19fLCBwcm9jc2tiLT5sZW4pOwogCQlkdW1wX2J5dGVzKERFQlVHX1NUUkVBTSwKLQkJICAgICAgICAgICAicmN2IGRhdGEiLCBwcm9jc2tiLT5kYXRhLCBwcm9jc2tiLT5sZW4pOworCQkJICAgInJjdiBkYXRhIiwgcHJvY3NrYi0+ZGF0YSwgcHJvY3NrYi0+bGVuKTsKIAkJYmNzLT5ody5iYXMtPmdvb2RieXRlcyArPSBwcm9jc2tiLT5sZW47CiAJCWdpZ2FzZXRfcmN2X3NrYihwcm9jc2tiLCBiY3MtPmNzLCBiY3MpOwogCX0KQEAgLTU5NSw3ICs1OTUsNyBAQAogCWlmICgoYmNzLT5za2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTikpICE9IE5VTEwpCiAJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKIAllbHNlCi0JCWVycigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCWJjcy0+ZmNzID0gUFBQX0lOSVRGQ1M7CiB9CiAKQEAgLTYxMCwxNCArNjEwLDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlub3RpY2UoInJlY2VpdmVkIHBhcnRpYWwgYnl0ZSAoJWQgYml0cykiLCBpbmJpdHMpOworCWRldl9ub3RpY2UoYmNzLT5jcy0+ZGV2LCAicmVjZWl2ZWQgcGFydGlhbCBieXRlICglZCBiaXRzKVxuIiwgaW5iaXRzKTsKIAliY3MtPmh3LmJhcy0+YWxpZ25lcnJzKys7CiAJZ2lnYXNldF9yY3ZfZXJyb3IoYmNzLT5za2IsIGJjcy0+Y3MsIGJjcyk7CiAKIAlpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CiAJZWxzZQotCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKIAliY3MtPmZjcyA9IFBQUF9JTklURkNTOwogfQogCkBAIC02NTksMTYgKzY1OSwxMiBAQAogICoJYmNzCXJlY2VpdmluZyBCIGNoYW5uZWwgc3RydWN0dXJlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBoZGxjX3VucGFjayh1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQorCQkJICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewotCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKIAlpbnQgaW5wdXRzdGF0ZTsKIAl1bnNpZ25lZCBzZXFsZW4sIGluYnl0ZSwgaW5iaXRzOwogCi0JSUZOVUxMUkVUKGJjcyk7Ci0JdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7Ci0KIAkvKiBsb2FkIHByZXZpb3VzIHN0YXRlOgogCSAqIGlucHV0c3RhdGUgPSBzZXQgb2YgZmxhZyBiaXRzOgogCSAqIC0gSU5TX2ZsYWdfaHVudDogbm8gY29tcGxldGUgb3BlbmluZyBmbGFnIHJlY2VpdmVkIHNpbmNlIGNvbm5lY3Rpb24gc2V0dXAgb3IgbGFzdCBhYm9ydApAQCAtODU2LDcgKzg1Miw3IEBACiAgKgliY3MJcmVjZWl2aW5nIEIgY2hhbm5lbCBzdHJ1Y3R1cmUKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHRyYW5zX3JlY2VpdmUodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQorCQkJCSBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBkb2J5dGVzOwpAQCAtODcwLDcgKzg2Niw3IEBACiAJaWYgKHVubGlrZWx5KChza2IgPSBiY3MtPnNrYikgPT0gTlVMTCkpIHsKIAkJYmNzLT5za2IgPSBza2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTik7CiAJCWlmICghc2tiKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJc2tiX3Jlc2VydmUoc2tiLCBIV19IRFJfTEVOKTsKQEAgLTg4OCw3ICs4ODQsOCBAQAogCQkJZ2lnYXNldF9yY3Zfc2tiKHNrYiwgYmNzLT5jcywgYmNzKTsKIAkJCWJjcy0+c2tiID0gc2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pOwogCQkJaWYgKCFza2IpIHsKLQkJCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCQkJImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKQEAgLTkyMSw4ICs5MTgsOCBAQAogCQljYXNlICdccic6CiAJCWNhc2UgJ1xuJzoKIAkJCS8qIGVuZCBvZiBsaW5lICovCi0JCQlkYmcoREVCVUdfVFJBTlNDTUQsICIlczogRW5kIG9mIENvbW1hbmQgKCVkIEJ5dGVzKSIsCi0JCQkgICAgX19mdW5jX18sIGNieXRlcyk7CisJCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAorCQkJCV9fZnVuY19fLCBjYnl0ZXMpOwogCQkJY3MtPmNieXRlcyA9IGNieXRlczsKIAkJCWdpZ2FzZXRfaGFuZGxlX21vZGVtX3Jlc3BvbnNlKGNzKTsKIAkJCWNieXRlcyA9IDA7CkBAIC05MzIsNyArOTI5LDcgQEAKIAkJCWlmIChjYnl0ZXMgPCBNQVhfUkVTUF9TSVpFIC0gMSkKIAkJCQljYnl0ZXMrKzsKIAkJCWVsc2UKLQkJCQl3YXJuKCJyZXNwb25zZSB0b28gbGFyZ2UiKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVzcG9uc2UgdG9vIGxhcmdlXG4iKTsKIAkJfQogCX0KIApAQCAtOTUxLDI3ICs5NDgsMjcgQEAKIAogCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOwogCXdoaWxlIChoZWFkICE9ICh0YWlsID0gYXRvbWljX3JlYWQoJmluYnVmLT50YWlsKSkpIHsKLQkJZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKIAkJaWYgKGhlYWQgPiB0YWlsKQogCQkJdGFpbCA9IFJCVUZTSVpFOwogCQlzcmMgPSBpbmJ1Zi0+ZGF0YSArIGhlYWQ7CiAJCW51bWJ5dGVzID0gdGFpbCAtIGhlYWQ7Ci0JCWRiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpID09IE1TX0xPQ0tFRCkgewogCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0xPQ0tDTUQsICJyZWNlaXZlZCByZXNwb25zZSIsCi0JCQkgICAgICAgICAgICAgICAgICAgbnVtYnl0ZXMsIHNyYywgMCk7CisJCQkJCSAgIG51bWJ5dGVzLCBzcmMpOwogCQkJZ2lnYXNldF9pZl9yZWNlaXZlKGluYnVmLT5jcywgc3JjLCBudW1ieXRlcyk7CiAJCX0gZWxzZSB7CiAJCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLAotCQkJICAgICAgICAgICAgICAgICAgIG51bWJ5dGVzLCBzcmMsIDApOworCQkJCQkgICBudW1ieXRlcywgc3JjKTsKIAkJCWNtZF9sb29wKHNyYywgbnVtYnl0ZXMsIGluYnVmKTsKIAkJfQogCiAJCWhlYWQgKz0gbnVtYnl0ZXM7CiAJCWlmIChoZWFkID09IFJCVUZTSVpFKQogCQkJaGVhZCA9IDA7Ci0JCWRiZyhERUJVR19JTlRSLCAic2V0dGluZyBoZWFkIHRvICV1IiwgaGVhZCk7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgInNldHRpbmcgaGVhZCB0byAldSIsIGhlYWQpOwogCQlhdG9taWNfc2V0KCZpbmJ1Zi0+aGVhZCwgaGVhZCk7CiAJfQogfQpAQCAtOTkyLDE4ICs5ODksMTggQEAKICAqLwogaW50IGdpZ2FzZXRfaXNvY19zZW5kX3NrYihzdHJ1Y3QgYmNfc3RhdGUgKmJjcywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgbGVuOwotCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHNrYiwgLUVGQVVMVCk7Ci0JbGVuID0gc2tiLT5sZW47CisJaW50IGxlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlza2JfcXVldWVfdGFpbCgmYmNzLT5zcXVldWUsIHNrYik7Ci0JZGJnKERFQlVHX0lTTywKLQkgICAgIiVzOiBza2IgcXVldWVkLCBxbGVuPSVkIiwgX19mdW5jX18sIHNrYl9xdWV1ZV9sZW4oJmJjcy0+c3F1ZXVlKSk7CisJZ2lnX2RiZyhERUJVR19JU08sICIlczogc2tiIHF1ZXVlZCwgcWxlbj0lZCIsCisJCV9fZnVuY19fLCBza2JfcXVldWVfbGVuKCZiY3MtPnNxdWV1ZSkpOwogCiAJLyogdGFza2xldCBzdWJtaXRzIFVSQiBpZiBuZWNlc3NhcnkgKi8KLQl0YXNrbGV0X3NjaGVkdWxlKCZiY3MtPmh3LmJhcy0+c2VudF90YXNrbGV0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCWlmIChiY3MtPmNzLT5jb25uZWN0ZWQpCisJCXRhc2tsZXRfc2NoZWR1bGUoJmJjcy0+aHcuYmFzLT5zZW50X3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBsZW47CS8qIG9rIHNvIGZhciAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jCmluZGV4IGM2OTE1ZmEuLmQyNjdhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3R1ZmYgdXNlZCBieSBhbGwgdmFyaWFudHMgb2YgdGhlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiwKKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzLAogICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LgogICoKQEAgLTExLDI2ICsxMSwyOSBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBwcm9jLmMsdiAxLjUuMi4xMyAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCi1zdGF0aWMgc3NpemVfdCBzaG93X2NpZG1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19jaWRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYXRvbWljX3JlYWQoJmNzLT5jaWRtb2RlKSk7IC8vIEZJWE1FIHVzZSBzY25wcmludGYgZm9yIDEzNjA3IGJpdCBhcmNoaXRlY3R1cmVzIChpZiBQQUdFX1NJWkU9PTQwOTYpCisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBjcy0+Y2lkbW9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF9jaWRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2V0X2NpZG1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWxvbmcgaW50IHZhbHVlOwogCWNoYXIgKmVuZDsKIApAQCAtNDEsMjMgKzQ0LDIzIEBACiAJaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCWNzLT53YWl0aW5nID0gMTsKIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBFVl9QUk9DX0NJRE1PREUsCi0JCSAgICAgICAgICAgICAgIE5VTEwsIHZhbHVlLCBOVUxMKSkgeworCQkJICAgICAgIE5VTEwsIHZhbHVlLCBOVUxMKSkgewogCQljcy0+d2FpdGluZyA9IDA7Ci0JCXVwKCZjcy0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBQUk9DX0NJRE1PREUiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgUFJPQ19DSURNT0RFIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNjUsMTcgKzY4LDE1IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoY2lkbW9kZSwgU19JUlVHT3xTX0lXVVNSLCBzaG93X2NpZG1vZGUsIHNldF9jaWRtb2RlKTsKIAogLyogZnJlZSBzeXNmcyBmb3IgZGV2aWNlICovCi12b2lkIGdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3ZvaWQgZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlkYmcoREVCVUdfSU5JVCwgInJlbW92aW5nIHN5c2ZzIGVudHJpZXMiKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CisJZ2lnX2RiZyhERUJVR19JTklULCAicmVtb3Zpbmcgc3lzZnMgZW50cmllcyIpOworCWRldmljZV9yZW1vdmVfZmlsZShjcy0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKTsKIAogLyogaW5pdGlhbGl6ZSBzeXNmcyBmb3IgZGV2aWNlICovCi12b2lkIGdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3ZvaWQgZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgc3lzZnMiKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBzeXNmcyIpOworCWRldmljZV9jcmVhdGVfZmlsZShjcy0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCmluZGV4IDMyM2ZjNzMuLmJmYjczZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBVU0IgZHJpdmVyIGZvciBHaWdhc2V0IDMwN3ggZGlyZWN0bHkgb3IgdXNpbmcgTTEwNSBEYXRhLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMKICAqICAgICAgICAgICAgICAgICAgIGFuZCBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4uCiAgKgogICogVGhpcyBkcml2ZXIgd2FzIGRlcml2ZWQgZnJvbSB0aGUgVVNCIHNrZWxldG9uIGRyaXZlciBieQpAQCAtMTMsMTAgKzEzLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogdXNiLWdpZ2FzZXQuYyx2IDEuODUuNC4xOCAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTI5LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4iCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgU3RlZmFuIEVpbGVycyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBEcml2ZXIgZm9yIEdpZ2FzZXQgMzA3eCB1c2luZyBNMTA1IgogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtNjIsMTAgKzU4LDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdpZ2FzZXRfdGFibGUpOwogCi0vKiBHZXQgYSBtaW5vciByYW5nZSBmb3IgeW91ciBkZXZpY2VzIGZyb20gdGhlIHVzYiBtYWludGFpbmVyICovCi0jZGVmaW5lIFVTQl9TS0VMX01JTk9SX0JBU0UJMjAwCi0KLQogLyoKICAqIENvbnRyb2wgcmVxdWVzdHMgKGVtcHR5IGZpZWxkczogMDApCiAgKgpAQCAtMTE0LDcgKzEwNiw3IEBACiAgKi8KIAogc3RhdGljIGludCBnaWdhc2V0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgZ2lnYXNldF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiBzdGF0aWMgc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcml2ZXIgPSBOVUxMOwpAQCAtMTIyLDI5ICsxMTQsMjkgQEAKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGdpZ2FzZXRfdXNiX2RyaXZlciA9IHsKLQkubmFtZSA9ICAgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLAotCS5wcm9iZSA9ICAgICAgICBnaWdhc2V0X3Byb2JlLAotCS5kaXNjb25uZWN0ID0gICBnaWdhc2V0X2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0gICAgIGdpZ2FzZXRfdGFibGUsCisJLm5hbWUgPQkJR0lHQVNFVF9NT0RVTEVOQU1FLAorCS5wcm9iZSA9CWdpZ2FzZXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlnaWdhc2V0X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JZ2lnYXNldF90YWJsZSwKIH07CiAKIHN0cnVjdCB1c2JfY2FyZHN0YXRlIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdWRldjsgICAgICAgICAgICAgICAgICAvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgICAgKmludGVyZmFjZTsgICAgICAgICAgICAgLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KLQlhdG9taWNfdCAgICAgICAgICAgICAgICBidXN5OyAgICAgICAgICAgICAgICAgICAvKiBidWxrIG91dHB1dCBpbiBwcm9ncmVzcyAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwkJLyogdXNiIGRldmljZSBwb2ludGVyICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsJLyogaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCWF0b21pY190CQlidXN5OwkJLyogYnVsayBvdXRwdXQgaW4gcHJvZ3Jlc3MgKi8KIAotCS8qIE91dHB1dCBidWZmZXIgZm9yIGNvbW1hbmRzIChNMTA1OiBhbmQgZGF0YSkqLwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICpidWxrX291dF9idWZmZXI7ICAgICAgIC8qIHRoZSBidWZmZXIgdG8gc2VuZCBkYXRhICovCi0JaW50ICAgICAgICAgICAgICAgICAgICAgYnVsa19vdXRfc2l6ZTsgICAgICAgICAgLyogdGhlIHNpemUgb2YgdGhlIHNlbmQgYnVmZmVyICovCi0JX191OCAgICAgICAgICAgICAgICAgICAgYnVsa19vdXRfZW5kcG9pbnRBZGRyOyAgLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgb3V0IGVuZHBvaW50ICovCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKmJ1bGtfb3V0X3VyYjsgICAgICAgICAgLyogdGhlIHVyYiB1c2VkIHRvIHRyYW5zbWl0IGRhdGEgKi8KKwkvKiBPdXRwdXQgYnVmZmVyICovCisJdW5zaWduZWQgY2hhcgkJKmJ1bGtfb3V0X2J1ZmZlcjsKKwlpbnQJCQlidWxrX291dF9zaXplOworCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHI7CisJc3RydWN0IHVyYgkJKmJ1bGtfb3V0X3VyYjsKIAotCS8qIElucHV0IGJ1ZmZlciBmb3IgY29tbWFuZCByZXNwb25zZXMgKE0xMDU6IGFuZCBkYXRhKSovCi0JaW50ICAgICAgICAgICAgICAgICAgICAgcmN2YnVmX3NpemU7ICAgICAgICAgICAgLyogdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnJlYWRfdXJiOyAgICAgICAgICAgICAgLyogdGhlIHVyYiB1c2VkIHRvIHJlY2VpdmUgZGF0YSAqLwotCV9fdTggICAgICAgICAgICAgICAgICAgIGludF9pbl9lbmRwb2ludEFkZHI7ICAgIC8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJLyogSW5wdXQgYnVmZmVyICovCisJaW50CQkJcmN2YnVmX3NpemU7CisJc3RydWN0IHVyYgkJKnJlYWRfdXJiOworCV9fdTgJCQlpbnRfaW5fZW5kcG9pbnRBZGRyOwogCi0JY2hhciAgICAgICAgICAgICAgICAgICAgYmNoYXJzWzZdOyAgICAgICAgICAgICAgLyogcmVxLiAweDE5ICovCisJY2hhcgkJCWJjaGFyc1s2XTsJCS8qIGZvciByZXF1ZXN0IDB4MTkgKi8KIH07CiAKIHN0cnVjdCB1c2JfYmNfc3RhdGUge307CkBAIC0xNTcsMTkgKzE0OSwyMCBAQAogI2lmZGVmIENPTkZJR19HSUdBU0VUX1VORE9DUkVRCiAvKiBXQVJOSU5HOiBFWFBFUklNRU5UQUwhICovCiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdfc3RhdGUpCisJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjcy0+aHcudXNiLT51ZGV2OwogCXVuc2lnbmVkIG1hc2ssIHZhbDsKIAlpbnQgcjsKIAogCW1hc2sgPSB0aW9jbV90b19naWdhc2V0KG9sZF9zdGF0ZSBeIG5ld19zdGF0ZSk7CiAJdmFsID0gdGlvY21fdG9fZ2lnYXNldChuZXdfc3RhdGUpOwogCi0JZGJnKERFQlVHX1VTQlJFUSwgInNldCBmbGFncyAweCUwMnggd2l0aCBtYXNrIDB4JTAyeCIsIHZhbCwgbWFzayk7Ci0JciA9IHVzYl9jb250cm9sX21zZyhjcy0+aHcudXNiLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKGNzLT5ody51c2ItPnVkZXYsIDApLCA3LCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgKHZhbCAmIDB4ZmYpIHwgKChtYXNrICYgMHhmZikgPDwgOCksIDAsCi0JICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAyMDAwIC8qdGltZW91dD8/Ki8pOyAvLyBkb24ndCB1c2UgdGhpcyBpbiBhbiBpbnRlcnJ1cHQvQkgKKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgInNldCBmbGFncyAweCUwMnggd2l0aCBtYXNrIDB4JTAyeCIsIHZhbCwgbWFzayk7CisJLy8gZG9uJ3QgdXNlIHRoaXMgaW4gYW4gaW50ZXJydXB0L0JICisJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDcsIDB4NDEsCisJCQkgICAgKHZhbCAmIDB4ZmYpIHwgKChtYXNrICYgMHhmZikgPDwgOCksIDAsCisJCQkgICAgTlVMTCwgMCwgMjAwMCAvKiB0aW1lb3V0PyAqLyk7CiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIAkvLy4uCkBAIC0xNzgsMzAgKzE3MSwyOSBAQAogCiBzdGF0aWMgaW50IHNldF92YWx1ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdTggcmVxLCB1MTYgdmFsKQogeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY3MtPmh3LnVzYi0+dWRldjsKIAlpbnQgciwgcjI7CiAKLQlkYmcoREVCVUdfVVNCUkVRLCAicmVxdWVzdCAlMDJ4ICglMDR4KSIsICh1bnNpZ25lZClyZXEsICh1bnNpZ25lZCl2YWwpOwotCXIgPSB1c2JfY29udHJvbF9tc2coY3MtPmh3LnVzYi0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgMHgxMiwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgIDB4ZiAvKj8qLywgMCwKLQkgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIDIwMDAgLyo/Ki8pOyAvKiBubyBpZGVhLCB3aGF0IHRoaXMgZG9lcyAqLworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAicmVxdWVzdCAlMDJ4ICglMDR4KSIsCisJCSh1bnNpZ25lZClyZXEsICh1bnNpZ25lZCl2YWwpOworCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDEyLCAweDQxLAorCQkJICAgIDB4ZiAvKj8qLywgMCwgTlVMTCwgMCwgMjAwMCAvKj8qLyk7CisJCQkgICAgLyogbm8gaWRlYSB3aGF0IHRoaXMgZG9lcyAqLwogCWlmIChyIDwgMCkgewotCQllcnIoImVycm9yICVkIG9uIHJlcXVlc3QgMHgxMiIsIC1yKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXJyb3IgJWQgb24gcmVxdWVzdCAweDEyXG4iLCAtcik7CiAJCXJldHVybiByOwogCX0KIAotCXIgPSB1c2JfY29udHJvbF9tc2coY3MtPmh3LnVzYi0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgcmVxLCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgdmFsLCAwLAotCSAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgMjAwMCAvKj8qLyk7CisJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIHJlcSwgMHg0MSwKKwkJCSAgICB2YWwsIDAsIE5VTEwsIDAsIDIwMDAgLyo/Ki8pOwogCWlmIChyIDwgMCkKLQkJZXJyKCJlcnJvciAlZCBvbiByZXF1ZXN0IDB4JTAyeCIsIC1yLCAodW5zaWduZWQpcmVxKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXJyb3IgJWQgb24gcmVxdWVzdCAweCUwMnhcbiIsCisJCQktciwgKHVuc2lnbmVkKXJlcSk7CiAKLQlyMiA9IHVzYl9jb250cm9sX21zZyhjcy0+aHcudXNiLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgMHgxOSwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjcy0+aHcudXNiLT5iY2hhcnMsIDYsIDIwMDAgLyo/Ki8pOworCXIyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgxOSwgMHg0MSwKKwkJCSAgICAgMCwgMCwgY3MtPmh3LnVzYi0+YmNoYXJzLCA2LCAyMDAwIC8qPyovKTsKIAlpZiAocjIgPCAwKQotCQllcnIoImVycm9yICVkIG9uIHJlcXVlc3QgMHgxOSIsIC1yMik7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImVycm9yICVkIG9uIHJlcXVlc3QgMHgxOVxuIiwgLXIyKTsKIAogCXJldHVybiByIDwgMCA/IHIgOiAocjIgPCAwID8gcjIgOiAwKTsKIH0KQEAgLTIyOSw4ICsyMjEsOCBAQAogCWNhc2UgQjExNTIwMDogcmF0ZSA9ICAxMTUyMDA7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCXJhdGUgPSAgOTYwMDsKLQkJZXJyKCJ1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0IDB4JXgsIgotCQkgICAgIiB1c2luZyBkZWZhdWx0IG9mIEI5NjAwIiwgY2ZsYWcpOworCQlkZXZfZXJyKGNzLT5kZXYsICJ1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0IDB4JXgsIgorCQkJIiB1c2luZyBkZWZhdWx0IG9mIEI5NjAwXG4iLCBjZmxhZyk7CiAJfQogCiAJdmFsID0gMHgzODNmZmYgLyByYXRlICsgMTsKQEAgLTI1OSw3ICsyNTEsNyBAQAogCWNhc2UgQ1M4OgogCQl2YWwgfD0gOCA8PCA4OyBicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCWRldl9lcnIoY3MtPmRldiwgIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4XG4iKTsKIAkJdmFsIHw9IDggPDwgODsKIAkJYnJlYWs7CiAJfQpAQCAtMjc3LDcgKzI2OSw3IEBACiAKICNlbHNlCiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdfc3RhdGUpCisJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMDksMTUgKzMwMSwxMiBAQAogCXJldHVybiAwOwogfQogCi0vL3ZvaWQgc2VuZF9hY2tfdG9fTEwodm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IHdyaXRlX21vZGVtKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIHN0YXRpYyBpbnQgc2VuZF9jYihzdHJ1Y3QgY2FyZHN0YXRlICpjcywgc3RydWN0IGNtZGJ1Zl90ICpjYik7CiAKIAotLyogSGFuZGxpbmcgb2Ygc2VuZCBxdWV1ZS4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNrYiBvcGVuZWQsIHB1dCBkYXRhIHRvCi0gKiB0aGUgdHJhbnNmZXIgYnVmZmVyIGJ5IGNhbGxpbmcgIndyaXRlX21vZGVtIi4gT3RoZXJ3aXNlIHRha2UgYSBuZXcgc2tiIG91dCBvZiB0aGUgcXVldWUuCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBJU1IgdmlhICJ0cmFuc21pdF9jaGFycyIgKFVTQjogQi1DaGFubmVsIEJ1bGsgY2FsbGJhY2sgaGFuZGxlcgotICogdmlhIGltbWVkaWF0ZSB0YXNrIHF1ZXVlKSBvciBieSB3cml0ZWJ1Zl9mcm9tX0xMIGlmIHRoZSBMTCB3YW50cyB0byB0cmFuc21pdCBkYXRhLgorLyogV3JpdGUgdGFza2xldCBoYW5kbGVyOiBDb250aW51ZSBzZW5kaW5nIGN1cnJlbnQgc2tiLCBvciBzZW5kIGNvbW1hbmQsIG9yCisgKiBzdGFydCBzZW5kaW5nIGFuIHNrYiBmcm9tIHRoZSBzZW5kIHF1ZXVlLgogICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X21vZGVtX2ZpbGwodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtMzI3LDEwICszMTYsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBhZ2FpbjsKIAotCWRiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsIik7CisJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsIik7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5ody51c2ItPmJ1c3kpKSB7Ci0JCWRiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiBidXN5Iik7CisJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogYnVzeSIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNDEsMjYgKzMzMCwyNyBAQAogCQkJY2IgPSBjcy0+Y21kYnVmOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAkJCWlmIChjYikgeyAvKiBjb21tYW5kcyB0byBzZW5kPyAqLwotCQkJCWRiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiBjYiIpOworCQkJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogY2IiKTsKIAkJCQlpZiAoc2VuZF9jYihjcywgY2IpIDwgMCkgewotCQkJCQlkYmcoREVCVUdfT1VUUFVULAotCQkJCQkgICAgIm1vZGVtX2ZpbGw6IHNlbmRfY2IgZmFpbGVkIik7Ci0JCQkJCWFnYWluID0gMTsgLyogbm8gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQhICovCisJCQkJCWdpZ19kYmcoREVCVUdfT1VUUFVULAorCQkJCQkJIm1vZGVtX2ZpbGw6IHNlbmRfY2IgZmFpbGVkIik7CisJCQkJCWFnYWluID0gMTsgLyogbm8gY2FsbGJhY2sgd2lsbCBiZQorCQkJCQkJICAgICAgY2FsbGVkISAqLwogCQkJCX0KIAkJCX0gZWxzZSB7IC8qIHNrYnMgdG8gc2VuZD8gKi8KIAkJCQliY3MtPnR4X3NrYiA9IHNrYl9kZXF1ZXVlKCZiY3MtPnNxdWV1ZSk7CiAJCQkJaWYgKGJjcy0+dHhfc2tiKQotCQkJCQlkYmcoREVCVUdfSU5UUiwKLQkJCQkJICAgICJEZXF1ZXVlZCBza2IgKEFkcjogJWx4KSEiLAotCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGJjcy0+dHhfc2tiKTsKKwkJCQkJZ2lnX2RiZyhERUJVR19JTlRSLAorCQkJCQkJIkRlcXVldWVkIHNrYiAoQWRyOiAlbHgpISIsCisJCQkJCQkodW5zaWduZWQgbG9uZykgYmNzLT50eF9za2IpOwogCQkJfQogCQl9CiAKIAkJaWYgKGJjcy0+dHhfc2tiKSB7Ci0JCQlkYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogdHhfc2tiIik7CisJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGw6IHR4X3NrYiIpOwogCQkJaWYgKHdyaXRlX21vZGVtKGNzKSA8IDApIHsKLQkJCQlkYmcoREVCVUdfT1VUUFVULAotCQkJCSAgICAibW9kZW1fZmlsbDogd3JpdGVfbW9kZW0gZmFpbGVkIik7CisJCQkJZ2lnX2RiZyhERUJVR19PVVRQVVQsCisJCQkJCSJtb2RlbV9maWxsOiB3cml0ZV9tb2RlbSBmYWlsZWQiKTsKIAkJCQkvLyBGSVhNRSBzaG91bGQgd2UgdGVsbCB0aGUgTEw/CiAJCQkJYWdhaW4gPSAxOyAvKiBubyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCEgKi8KIAkJCX0KQEAgLTM3MSw4OCArMzYxLDg1IEBACiAvKioKICAqCWdpZ2FzZXRfcmVhZF9pbnRfY2FsbGJhY2sKICAqCi0gKiAgICAgIEl0IGlzIGNhbGxlZCBpZiB0aGUgZGF0YSB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLiBUaGlzIGlzIGFsbW9zdCBzaW1pbGlhciB0bwotICogICAgICB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBpbiB0aGUgc2VyaWFsIGRldmljZS4KKyAqCUl0IGlzIGNhbGxlZCBpZiB0aGUgZGF0YSB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLgogICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RydWN0IGluYnVmX3QgKmluYnVmID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOwogCWludCByZXN1Ym1pdCA9IDA7CiAJaW50IHI7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJdW5zaWduZWQgbnVtYnl0ZXM7CiAJdW5zaWduZWQgY2hhciAqc3JjOwotCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaW5idWZfdCAqaW5idWY7Ci0KLQlJRk5VTExSRVQodXJiKTsKLQlpbmJ1ZiA9IChzdHJ1Y3QgaW5idWZfdCAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGluYnVmKTsKLQkvL3NwaW5fbG9ja19pcnFzYXZlKCZpbmJ1Zi0+bG9jaywgZmxhZ3MpOwotCWNzID0gaW5idWYtPmNzOwotCUlGTlVMTEdPVE8oY3MsIGV4aXQpOwotCUlGTlVMTEdPVE8oY2FyZHN0YXRlLCBleGl0KTsKLQotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJZ290byBleGl0OwotCX0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCF1cmItPnN0YXR1cykgeworCQlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJCWVycigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJcmV0dXJuOworCQl9CisKIAkJbnVtYnl0ZXMgPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAKIAkJaWYgKG51bWJ5dGVzKSB7CiAJCQlzcmMgPSBpbmJ1Zi0+cmN2YnVmOwogCQkJaWYgKHVubGlrZWx5KCpzcmMpKQotCQkJCXdhcm4oIiVzOiBUaGVyZSB3YXMgbm8gbGVhZGluZyAwLCBidXQgMHglMDJ4ISIsCi0JCQkJICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkKSAqc3JjKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAgICAiJXM6IFRoZXJlIHdhcyBubyBsZWFkaW5nIDAsIGJ1dCAweCUwMnghXG4iLAorCQkJCQkgX19mdW5jX18sICh1bnNpZ25lZCkgKnNyYyk7CiAJCQkrK3NyYzsgLyogc2tpcCBsZWFkaW5nIDB4MDAgKi8KIAkJCS0tbnVtYnl0ZXM7CiAJCQlpZiAoZ2lnYXNldF9maWxsX2luYnVmKGluYnVmLCBzcmMsIG51bWJ5dGVzKSkgewotCQkJCWRiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKKwkJCQlnaWdfZGJnKERFQlVHX0lOVFIsICIlcy0tPkJIIiwgX19mdW5jX18pOwogCQkJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoaW5idWYtPmNzKTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlkYmcoREVCVUdfSU5UUiwgIlJlY2VpdmVkIHplcm8gYmxvY2sgbGVuZ3RoIik7CisJCQlnaWdfZGJnKERFQlVHX0lOVFIsICJSZWNlaXZlZCB6ZXJvIGJsb2NrIGxlbmd0aCIpOwogCQlyZXN1Ym1pdCA9IDE7CiAJfSBlbHNlIHsKIAkJLyogVGhlIHVyYiBtaWdodCBoYXZlIGJlZW4ga2lsbGVkLiAqLwotCQlkYmcoREVCVUdfQU5ZLCAiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJICAgIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7Ci0JCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSAvKiBub3Qga2lsbGVkICovCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCV9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSB7IC8qIG5vdCBraWxsZWQgKi8KKwkJCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQkJCWVycigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJCXJldHVybjsKKwkJCX0KIAkJCXJlc3VibWl0ID0gMTsKKwkJfQogCX0KLWV4aXQ6Ci0JLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmJ1Zi0+bG9jaywgZmxhZ3MpOworCiAJaWYgKHJlc3VibWl0KSB7Ci0JCXIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCXIgPSBjcy0+Y29ubmVjdGVkID8gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykgOiAtRU5PREVWOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlpZiAocikKLQkJCWVycigiZXJyb3IgJWQgd2hlbiByZXN1Ym1pdHRpbmcgdXJiLiIsIC1yKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgImVycm9yICVkIHdoZW4gcmVzdWJtaXR0aW5nIHVyYi5cbiIsCisJCQkJLXIpOwogCX0KIH0KIAogCi0vKiBUaGlzIGNhbGxiYWNrIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gZGF0YSB3YXMgdHJhbnNtaXR0ZWQgdG8gYSBCLUNoYW5uZWwuCi0gKiBUaGVyZWZvcmUgaXQgaGFzIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHN0aWxsIGRhdGEgdG8gdHJhbnNtaXQuIFRoaXMKLSAqIGhhcHBlbnMgYnkgY2FsbGluZyBtb2RlbV9maWxsIHZpYSB0YXNrIHF1ZXVlLgotICoKLSAqLworLyogVGhpcyBjYWxsYmFjayByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGRhdGEgd2FzIHRyYW5zbWl0dGVkIHRvIHRoZSBkZXZpY2UuICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKGNzKTsKLSNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigiJXM6bm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgogCWlmICh1cmItPnN0YXR1cykKLQkJZXJyKCJidWxrIHRyYW5zZmVyIGZhaWxlZCAoc3RhdHVzICVkKSIsIC11cmItPnN0YXR1cyk7IC8qIFRoYXQncyBhbGwgd2UgY2FuIGRvLiBDb21tdW5pY2F0aW9uIHByb2JsZW1zCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGhhbmRlbGVkIGJ5IHRpbWVvdXRzIG9yIG5ldHdvcmsgcHJvdG9jb2xzICovCisJCWRldl9lcnIoY3MtPmRldiwgImJ1bGsgdHJhbnNmZXIgZmFpbGVkIChzdGF0dXMgJWQpXG4iLAorCQkJLXVyYi0+c3RhdHVzKTsKKwkJLyogVGhhdCdzIGFsbCB3ZSBjYW4gZG8uIENvbW11bmljYXRpb24gcHJvYmxlbXMKKwkJICAgYXJlIGhhbmRsZWQgYnkgdGltZW91dHMgb3IgbmV0d29yayBwcm90b2NvbHMuICovCiAKLQlhdG9taWNfc2V0KCZjcy0+aHcudXNiLT5idXN5LCAwKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+d3JpdGVfdGFza2xldCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWVycigiJXM6IG5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJYXRvbWljX3NldCgmY3MtPmh3LnVzYi0+YnVzeSwgMCk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT53cml0ZV90YXNrbGV0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBzZW5kX2NiKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBzdHJ1Y3QgY21kYnVmX3QgKmNiKQpAQCAtNDY5LDggKzQ1Niw4IEBACiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCQkJY3MtPmNtZGJ5dGVzIC09IGNzLT5jdXJsZW47Ci0JCQlkYmcoREVCVUdfT1VUUFVULCAic2VuZF9jYjogc2VudCAldSBieXRlcywgJXUgbGVmdCIsCi0JCQkgICAgY3MtPmN1cmxlbiwgY3MtPmNtZGJ5dGVzKTsKKwkJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAic2VuZF9jYjogc2VudCAldSBieXRlcywgJXUgbGVmdCIsCisJCQkJY3MtPmN1cmxlbiwgY3MtPmNtZGJ5dGVzKTsKIAkJCWNzLT5jbWRidWYgPSBjYiA9IGNiLT5uZXh0OwogCQkJaWYgKGNiKSB7CiAJCQkJY2ItPnByZXYgPSBOVUxMOwpAQCAtNDg3LDUyICs0NzQsNTEgQEAKIAkJfQogCQlpZiAoY2IpIHsKIAkJCWNvdW50ID0gbWluKGNiLT5sZW4sIHVjcy0+YnVsa19vdXRfc2l6ZSk7CisJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgInNlbmRfY2I6IHNlbmQgJWQgYnl0ZXMiLCBjb3VudCk7CisKIAkJCXVzYl9maWxsX2J1bGtfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCB1Y3MtPnVkZXYsCi0JCQkgICAgICAgICAgICAgICAgICB1c2Jfc25kYnVsa3BpcGUodWNzLT51ZGV2LAotCQkJICAgICAgICAgICAgICAgICAgICAgdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiAweDBmKSwKLQkJCSAgICAgICAgICAgICAgICAgIGNiLT5idWYgKyBjYi0+b2Zmc2V0LCBjb3VudCwKLQkJCSAgICAgICAgICAgICAgICAgIGdpZ2FzZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgY3MpOworCQkJCQkgIHVzYl9zbmRidWxrcGlwZSh1Y3MtPnVkZXYsCisJCQkJCSAgICAgdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiAweDBmKSwKKwkJCQkJICBjYi0+YnVmICsgY2ItPm9mZnNldCwgY291bnQsCisJCQkJCSAgZ2lnYXNldF93cml0ZV9idWxrX2NhbGxiYWNrLCBjcyk7CiAKIAkJCWNiLT5vZmZzZXQgKz0gY291bnQ7CiAJCQljYi0+bGVuIC09IGNvdW50OwogCQkJYXRvbWljX3NldCgmdWNzLT5idXN5LCAxKTsKLQkJCWRiZyhERUJVR19PVVRQVVQsICJzZW5kX2NiOiBzZW5kICVkIGJ5dGVzIiwgY291bnQpOwogCi0JCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgU0xBQl9BVE9NSUMpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCQlzdGF0dXMgPSBjcy0+Y29ubmVjdGVkID8gdXNiX3N1Ym1pdF91cmIodWNzLT5idWxrX291dF91cmIsIFNMQUJfQVRPTUlDKSA6IC1FTk9ERVY7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJYXRvbWljX3NldCgmdWNzLT5idXN5LCAwKTsKLQkJCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgdXJiIChlcnJvciAlZCkuIiwKKwkJCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgdXJiIChlcnJvciAlZClcbiIsCiAJCQkJICAgIC1zdGF0dXMpOwotCQkJCWNiLT5sZW4gPSAwOyAvKiBza2lwIHVyYiA9PiByZW1vdmUgY2Ird2FrZXVwIGluIG5leHQgbG9vcCBjeWNsZSAqLworCQkJCWNiLT5sZW4gPSAwOyAvKiBza2lwIHVyYiA9PiByZW1vdmUgY2Ird2FrZXVwCisJCQkJCQlpbiBuZXh0IGxvb3AgY3ljbGUgKi8KIAkJCX0KIAkJfQotCX0gd2hpbGUgKGNiICYmIHN0YXR1cyk7IC8qIGJlaSBGZWhsZXIgbmFlY2hzdGVyIEJlZmVobCAvL0ZJWE1FOiBpc3QgZGFzIE9LPyAqLworCX0gd2hpbGUgKGNiICYmIHN0YXR1cyk7IC8qIG5leHQgY29tbWFuZCBvbiBlcnJvciAqLwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogV3JpdGUgc3RyaW5nIGludG8gdHJhbnNidWYgYW5kIHNlbmQgaXQgdG8gbW9kZW0uCi0gKi8KKy8qIFNlbmQgY29tbWFuZCB0byBkZXZpY2UuICovCiBzdGF0aWMgaW50IGdpZ2FzZXRfd3JpdGVfY21kKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KQorCQkJICAgICBpbnQgbGVuLCBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKIHsKIAlzdHJ1Y3QgY21kYnVmX3QgKmNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlnaWdhc2V0X2RiZ19idWZmZXIoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCA/Ci0JICAgICAgICAgICAgICAgICAgICAgREVCVUdfVFJBTlNDTUQgOiBERUJVR19MT0NLQ01ELAotCSAgICAgICAgICAgICAgICAgICAiQ01EIFRyYW5zbWl0IiwgbGVuLCBidWYsIDApOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZXJyKCIlczogbm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCQkJICAgICBERUJVR19UUkFOU0NNRCA6IERFQlVHX0xPQ0tDTUQsCisJCQkgICAiQ01EIFRyYW5zbWl0IiwgbGVuLCBidWYpOwogCiAJaWYgKGxlbiA8PSAwKQogCQlyZXR1cm4gMDsKIAogCWlmICghKGNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZGJ1Zl90KSArIGxlbiwgR0ZQX0FUT01JQykpKSB7Ci0JCWVycigiJXM6IG91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTU0LDcgKzU0MCwxMCBAQAogCWNzLT5sYXN0Y21kYnVmID0gY2I7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAotCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT53cml0ZV90YXNrbGV0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoY3MtPmNvbm5lY3RlZCkKKwkJdGFza2xldF9zY2hlZHVsZSgmY3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGxlbjsKIH0KIApAQCAtNTc4LDExICs1NjcsMTIgQEAKIHN0YXRpYyBpbnQgZ2lnYXNldF9icmtjaGFycyhzdHJ1Y3QgY2FyZHN0YXRlICpjcywgY29uc3QgdW5zaWduZWQgY2hhciBidWZbNl0pCiB7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfVU5ET0NSRVEKLQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfVVNCUkVRLCAiYnJrY2hhcnMiLCA2LCBidWYsIDApOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY3MtPmh3LnVzYi0+dWRldjsKKworCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19VU0JSRVEsICJicmtjaGFycyIsIDYsIGJ1Zik7CiAJbWVtY3B5KGNzLT5ody51c2ItPmJjaGFycywgYnVmLCA2KTsKLQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGNzLT5ody51c2ItPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUoY3MtPmh3LnVzYi0+dWRldiwgMCksIDB4MTksIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAmYnVmLCA2LCAyMDAwKTsKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgxOSwgMHg0MSwKKwkJCSAgICAgICAwLCAwLCAmYnVmLCA2LCAyMDAwKTsKICNlbHNlCiAJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKQEAgLTYwNCw3ICs1OTQsNiBAQAogCWlmICghYmNzLT5ody51c2IpCiAJCXJldHVybiAwOwogCi0JLy9iY3MtPmh3LnVzYi0+dHJhbnNfZmxnID0gUkVBRFlfVE9fVFJOU01JVDsgLyogQi1DaGFubmVsIHJlYWR5IHRvIHRyYW5zbWl0ICovCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYxNCw3ICs2MDMsNiBAQAogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2ZyZWVjc2h3KHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCS8vRklYTUUKIAl0YXNrbGV0X2tpbGwoJmNzLT53cml0ZV90YXNrbGV0KTsKIAlrZnJlZShjcy0+aHcudXNiKTsKIH0KQEAgLTYzOSwzMyArNjI3LDIxIEBACiAJLy91Y3MtPnVyYl9jbWRfb3V0ID0gTlVMTDsKIAl1Y3MtPnJlYWRfdXJiID0gTlVMTDsKIAl0YXNrbGV0X2luaXQoJmNzLT53cml0ZV90YXNrbGV0LAotCSAgICAgICAgICAgICAmZ2lnYXNldF9tb2RlbV9maWxsLCAodW5zaWduZWQgbG9uZykgY3MpOworCQkgICAgICZnaWdhc2V0X21vZGVtX2ZpbGwsICh1bnNpZ25lZCBsb25nKSBjcyk7CiAKIAlyZXR1cm4gMTsKIH0KIAotLyogV3JpdGVzIHRoZSBkYXRhIG9mIHRoZSBjdXJyZW50IG9wZW4gc2tiIGludG8gdGhlIG1vZGVtLgotICogV2UgaGF2ZSB0byBwcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgY2FsbHMgdW50aWwgdGhlCi0gKiBjYWxsYmFjayBoYW5kbGVyICgpIGlzIGNhbGxlZCAsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlCi0gKiBhcmUganVzdCBhbGxvd2VkIHRvIHNlbmQgZGF0YSBvbmNlIHRvIGFuIGVuZHBvaW50LiBUaGVyZWZvcmUKLSAqIHdlIHVzaW5nICJ0cmFuc19mbGciIHRvIHN5bmNob25pemUgLi4uCi0gKi8KKy8qIFNlbmQgZGF0YSBmcm9tIGN1cnJlbnQgc2tiIHRvIHRoZSBkZXZpY2UuICovCiBzdGF0aWMgaW50IHdyaXRlX21vZGVtKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAJaW50IGNvdW50OwogCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gJmNzLT5iY3NbMF07IC8qIG9ubHkgb25lIGNoYW5uZWwgKi8KIAlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LnVzYjsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVFZBTChiY3MtPnR4X3NrYiwgLUVJTlZBTCk7Ci0KLQlkYmcoREVCVUdfV1JJVEUsICJsZW46ICVkLi4uIiwgYmNzLT50eF9za2ItPmxlbik7Ci0KLQlyZXQgPSAtRU5PREVWOwotCUlGTlVMTEdPVE8odWNzLT5idWxrX291dF9idWZmZXIsIGVycm9yKTsKLQlJRk5VTExHT1RPKHVjcy0+YnVsa19vdXRfdXJiLCBlcnJvcik7Ci0JcmV0ID0gMDsKKwlnaWdfZGJnKERFQlVHX1dSSVRFLCAibGVuOiAlZC4uLiIsIGJjcy0+dHhfc2tiLT5sZW4pOwogCiAJaWYgKCFiY3MtPnR4X3NrYi0+bGVuKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KGJjcy0+dHhfc2tiKTsKQEAgLTY3OSw0MCArNjU1LDQyIEBACiAJY291bnQgPSBtaW4oYmNzLT50eF9za2ItPmxlbiwgKHVuc2lnbmVkKSB1Y3MtPmJ1bGtfb3V0X3NpemUpOwogCW1lbWNweSh1Y3MtPmJ1bGtfb3V0X2J1ZmZlciwgYmNzLT50eF9za2ItPmRhdGEsIGNvdW50KTsKIAlza2JfcHVsbChiY3MtPnR4X3NrYiwgY291bnQpOwotCi0JdXNiX2ZpbGxfYnVsa191cmIodWNzLT5idWxrX291dF91cmIsIHVjcy0+dWRldiwKLQkgICAgICAgICAgICAgICAgICB1c2Jfc25kYnVsa3BpcGUodWNzLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y3MtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmIDB4MGYpLAotCSAgICAgICAgICAgICAgICAgIHVjcy0+YnVsa19vdXRfYnVmZmVyLCBjb3VudCwKLQkgICAgICAgICAgICAgICAgICBnaWdhc2V0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIGNzKTsKIAlhdG9taWNfc2V0KCZ1Y3MtPmJ1c3ksIDEpOwotCWRiZyhERUJVR19PVVRQVVQsICJ3cml0ZV9tb2RlbTogc2VuZCAlZCBieXRlcyIsIGNvdW50KTsKKwlnaWdfZGJnKERFQlVHX09VVFBVVCwgIndyaXRlX21vZGVtOiBzZW5kICVkIGJ5dGVzIiwgY291bnQpOwogCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT5idWxrX291dF91cmIsIFNMQUJfQVRPTUlDKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoY3MtPmNvbm5lY3RlZCkgeworCQl1c2JfZmlsbF9idWxrX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgdWNzLT51ZGV2LAorCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKHVjcy0+dWRldiwKKwkJCQkJCSAgdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiAweDBmKSwKKwkJCQkgIHVjcy0+YnVsa19vdXRfYnVmZmVyLCBjb3VudCwKKwkJCQkgIGdpZ2FzZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgY3MpOworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgU0xBQl9BVE9NSUMpOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKIAlpZiAocmV0KSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCB1cmIgKGVycm9yICVkKS4iLCAtcmV0KTsKKwkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHVyYiAoZXJyb3IgJWQpXG4iLCAtcmV0KTsKIAkJYXRvbWljX3NldCgmdWNzLT5idXN5LCAwKTsKIAl9CisKIAlpZiAoIWJjcy0+dHhfc2tiLT5sZW4pIHsKIAkJLyogc2tiIHNlbnQgY29tcGxldGVseSAqLwogCQlnaWdhc2V0X3NrYl9zZW50KGJjcywgYmNzLT50eF9za2IpOyAvL0ZJWE1FIGFsc28sIHdoZW4gcmV0PDA/CiAKLQkJZGJnKERFQlVHX0lOVFIsCi0JCSAgICAia2ZyZWUgc2tiIChBZHI6ICVseCkhIiwgKHVuc2lnbmVkIGxvbmcpIGJjcy0+dHhfc2tiKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAia2ZyZWUgc2tiIChBZHI6ICVseCkhIiwKKwkJCSh1bnNpZ25lZCBsb25nKSBiY3MtPnR4X3NrYik7CiAJCWRldl9rZnJlZV9za2JfYW55KGJjcy0+dHhfc2tiKTsKIAkJYmNzLT50eF9za2IgPSBOVUxMOwogCX0KIAogCXJldHVybiByZXQ7Ci1lcnJvcjoKLQlkZXZfa2ZyZWVfc2tiX2FueShiY3MtPnR4X3NrYik7Ci0JYmNzLT50eF9za2IgPSBOVUxMOwotCXJldHVybiByZXQ7Ci0KIH0KIAogc3RhdGljIGludCBnaWdhc2V0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwpAQCAtNzIwLDE2ICs2OTgsMTQgQEAKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0aWY7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBOVUxMOwogCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1Y3MgPSBOVUxMOwotCS8vc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWZhY2VfZGVzYzsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCS8vaXNkbl9jdHJsIGNvbW1hbmQ7CiAJaW50IGJ1ZmZlcl9zaXplOwogCWludCBhbHQ7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaW5mbygiJXM6IENoZWNrIGlmIGRldmljZSBtYXRjaGVzIC4uIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKLQkgICAgX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAotCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkiJXM6IENoZWNrIGlmIGRldmljZSBtYXRjaGVzIC4uIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKKwkJX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCiAJcmV0dmFsID0gLUVOT0RFVjsgLy9GSVhNRQogCkBAIC03NDQsNyArNzIwLDcgQEAKIAlpZm51bSA9IGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOyAvLyBGSVhNRSA/CiAKIAlpZiAoYWx0ICE9IDAgfHwgaWZudW0gIT0gMCkgewotCQl3YXJuKCJpZm51bSAlZCwgYWx0ICVkIiwgaWZudW0sIGFsdCk7CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJpZm51bSAlZCwgYWx0ICVkXG4iLCBpZm51bSwgYWx0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NTIsNDIgKzcyOCwyOSBAQAogCSAqCiAJICovCiAJaWYgKGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMjU1KSB7Ci0JCWluZm8oIiVzOiBEZXZpY2UgbWF0Y2hlZCwgYnV0IGlmYWNlX2Rlc2NbJWRdLT5iSW50ZXJmYWNlQ2xhc3M9PSVkICEiLAotCQkgICAgICAgX19mdW5jX18sIGlmbnVtLCBob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzKTsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJIiVzOiBEZXZpY2UgbWF0Y2hlZCBidXQgaWZhY2VfZGVzY1slZF0tPmJJbnRlcmZhY2VDbGFzcz09JWQhXG4iLAorCQkJIF9fZnVuY19fLCBpZm51bSwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIiVzOiBEZXZpY2UgbWF0Y2hlZCAuLi4gISIsIF9fZnVuY19fKTsKKwlkZXZfaW5mbygmdWRldi0+ZGV2LCAiJXM6IERldmljZSBtYXRjaGVkIC4uLiAhXG4iLCBfX2Z1bmNfXyk7CiAKIAljcyA9IGdpZ2FzZXRfZ2V0dW5hc3NpZ25lZGNzKGRyaXZlcik7CiAJaWYgKCFjcykgewotCQl3YXJuKCJObyBmcmVlIGNhcmRzdGF0ZSEiKTsKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIm5vIGZyZWUgY2FyZHN0YXRlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXVjcyA9IGNzLT5ody51c2I7CiAKLSNpZiAwCi0JaWYgKHVzYl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCB1ZGV2LT5jb25maWdbMF0uZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKSA8IDApIHsKLQkJd2Fybigic2V0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCS8qIHNhdmUgb2ZmIGRldmljZSBzdHJ1Y3R1cmUgcHRycyBmb3IgbGF0ZXIgdXNlICovCisJdXNiX2dldF9kZXYodWRldik7CisJdWNzLT51ZGV2ID0gdWRldjsKKwl1Y3MtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwljcy0+ZGV2ID0gJmludGVyZmFjZS0+ZGV2OwogCi0KLQlpZiAodXNiX3NldF9pbnRlcmZhY2UodWRldiwgaWZudW0vKj09MCovLCBhbHQvKj09MCovKSA8IDApIHsKLQkJd2FybigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCBkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQiLAotCQkgICAgIHVkZXYtPmRldm51bSwgaWZudW0sIGFsdCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotI2VuZGlmCi0KLQkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCi0JLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgKi8KLQkvKiBXZSB3aWxsIGdldCAyIGVuZHBvaW50czogT25lIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgKGJ1bGsgb3V0KSBhbmQgb25lIHRvCi0JICogcG9sbCBtZXNzYWdlcyBmcm9tIHRoZSBkZXZpY2UoaW50IGluKS4KLQkgKiBUaGVyZWZvcmUgd2Ugd2lsbCBoYXZlIGFuIGFsbW9zdCBzaW1pbGlhciBzaXR1YXRpb24gYXMgd2l0aCBvdXIgc2VyaWFsIHBvcnQgaGFuZGxlci4KLQkgKiBJZiBhbiBjb25uZWN0aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQsIHdlIHdpbGwgaGF2ZSB0byBjcmVhdGUgZGF0YSBpbi9vdXQgcGlwZXMKLQkgKiBkeW5hbWljYWxseS4uLgotCSAqLworCS8qIHNhdmUgYWRkcmVzcyBvZiBjb250cm9sbGVyIHN0cnVjdHVyZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjcyk7IC8vIGRldl9zZXRfZHJ2ZGF0YSgmaW50ZXJmYWNlLT5kZXYsIGNzKTsKIAogCWVuZHBvaW50ID0gJmhvc3RpZi0+ZW5kcG9pbnRbMF0uZGVzYzsKIApAQCAtNzk2LDE0ICs3NTksMTQgQEAKIAl1Y3MtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwogCXVjcy0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1Y3MtPmJ1bGtfb3V0X2J1ZmZlcikgewotCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfb3V0X2J1ZmZlciIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXJcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXVjcy0+YnVsa19vdXRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCk7CiAJaWYgKCF1Y3MtPmJ1bGtfb3V0X3VyYikgewotCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfb3V0X2J1ZmZlciIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF91cmJcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTgxMSwxMiArNzc0LDEwIEBACiAJZW5kcG9pbnQgPSAmaG9zdGlmLT5lbmRwb2ludFsxXS5kZXNjOwogCiAJYXRvbWljX3NldCgmdWNzLT5idXN5LCAwKTsKLQl1Y3MtPnVkZXYgPSB1ZGV2OwotCXVjcy0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwogCiAJdWNzLT5yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT5yZWFkX3VyYikgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtODI1LDM4ICs3ODYsMzMgQEAKIAl1Y3MtPmludF9pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAljcy0+aW5idWZbMF0ucmN2YnVmID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcy0+aW5idWZbMF0ucmN2YnVmKSB7Ci0JCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgcmN2YnVmIik7CisJCWRldl9lcnIoY3MtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIHJjdmJ1ZlxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQogCS8qIEZpbGwgdGhlIGludGVycnVwdCB1cmIgYW5kIHNlbmQgaXQgdG8gdGhlIGNvcmUgKi8KIAl1c2JfZmlsbF9pbnRfdXJiKHVjcy0+cmVhZF91cmIsIHVkZXYsCi0JICAgICAgICAgICAgICAgICB1c2JfcmN2aW50cGlwZSh1ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmKSwKLQkgICAgICAgICAgICAgICAgIGNzLT5pbmJ1ZlswXS5yY3ZidWYsIGJ1ZmZlcl9zaXplLAotCSAgICAgICAgICAgICAgICAgZ2lnYXNldF9yZWFkX2ludF9jYWxsYmFjaywKLQkgICAgICAgICAgICAgICAgIGNzLT5pbmJ1ZiArIDAsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCisJCQkJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiksCisJCQkgY3MtPmluYnVmWzBdLnJjdmJ1ZiwgYnVmZmVyX3NpemUsCisJCQkgZ2lnYXNldF9yZWFkX2ludF9jYWxsYmFjaywKKwkJCSBjcy0+aW5idWYgKyAwLCBlbmRwb2ludC0+YkludGVydmFsKTsKIAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+cmVhZF91cmIsIFNMQUJfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiQ291bGQgbm90IHN1Ym1pdCBVUkIhIik7CisJCWRldl9lcnIoY3MtPmRldiwgIkNvdWxkIG5vdCBzdWJtaXQgVVJCIChlcnJvciAlZClcbiIsIC1yZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCS8qIHRlbGwgY29tbW9uIHBhcnQgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWR5ICovCiAJaWYgKHN0YXJ0bW9kZSA9PSBTTV9MT0NLRUQpCiAJCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX0xPQ0tFRCk7CisKIAlpZiAoIWdpZ2FzZXRfc3RhcnQoY3MpKSB7CiAJCXRhc2tsZXRfa2lsbCgmY3MtPndyaXRlX3Rhc2tsZXQpOwogCQlyZXR2YWwgPSAtRU5PREVWOyAvL0ZJWE1FCiAJCWdvdG8gZXJyb3I7CiAJfQotCi0JLyogc2F2ZSBhZGRyZXNzIG9mIGNvbnRyb2xsZXIgc3RydWN0dXJlICovCi0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGNzKTsKLQotCS8qIHNldCB1cCBkZXZpY2Ugc3lzZnMgKi8KLQlnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKGludGVyZmFjZSk7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgpAQCAtODY4LDQ4ICs4MjQsNDUgQEAKIAlrZnJlZShjcy0+aW5idWZbMF0ucmN2YnVmKTsKIAlpZiAodWNzLT5yZWFkX3VyYiAhPSBOVUxMKQogCQl1c2JfZnJlZV91cmIodWNzLT5yZWFkX3VyYik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCXVjcy0+cmVhZF91cmIgPSB1Y3MtPmJ1bGtfb3V0X3VyYiA9IE5VTEw7CiAJY3MtPmluYnVmWzBdLnJjdmJ1ZiA9IHVjcy0+YnVsa19vdXRfYnVmZmVyID0gTlVMTDsKKwl1c2JfcHV0X2Rldih1Y3MtPnVkZXYpOworCXVjcy0+dWRldiA9IE5VTEw7CisJdWNzLT5pbnRlcmZhY2UgPSBOVUxMOwogCWdpZ2FzZXRfdW5hc3NpZ24oY3MpOwogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qKgotICoJc2tlbF9kaXNjb25uZWN0Ci0gKi8KIHN0YXRpYyB2b2lkIGdpZ2FzZXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1Y3M7CiAKIAljcyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQotCS8qIGNsZWFyIGRldmljZSBzeXNmcyAqLwotCWdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoaW50ZXJmYWNlKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl1Y3MgPSBjcy0+aHcudXNiOwogCXVzYl9raWxsX3VyYih1Y3MtPnJlYWRfdXJiKTsKLQkvL2luZm8oIkdpZ2FTZXQgVVNCIGRldmljZSAjJWQgd2lsbCBiZSBkaXNjb25uZWN0ZWQiLCBtaW5vcik7CiAKIAlnaWdhc2V0X3N0b3AoY3MpOwogCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCXRhc2tsZXRfa2lsbCgmY3MtPndyaXRlX3Rhc2tsZXQpOwogCi0JdXNiX2tpbGxfdXJiKHVjcy0+YnVsa19vdXRfdXJiKTsgIC8qIEZJWE1FOiBudXIsIHdlbm4gbm9ldGlnICovCi0JLy91c2Jfa2lsbF91cmIodWNzLT51cmJfY21kX291dCk7ICAvKiBGSVhNRTogbnVyLCB3ZW5uIG5vZXRpZyAqLworCXVzYl9raWxsX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYik7CS8qIEZJWE1FOiBvbmx5IGlmIGFjdGl2ZT8gKi8KIAogCWtmcmVlKHVjcy0+YnVsa19vdXRfYnVmZmVyKTsKIAlpZiAodWNzLT5idWxrX291dF91cmIgIT0gTlVMTCkKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+YnVsa19vdXRfdXJiKTsKLQkvL2lmKHVjcy0+dXJiX2NtZF9vdXQgIT0gTlVMTCkKLQkvLwl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX291dCk7CiAJa2ZyZWUoY3MtPmluYnVmWzBdLnJjdmJ1Zik7CiAJaWYgKHVjcy0+cmVhZF91cmIgIT0gTlVMTCkKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+cmVhZF91cmIpOwotCXVjcy0+cmVhZF91cmIgPSB1Y3MtPmJ1bGtfb3V0X3VyYi8qPXVjcy0+dXJiX2NtZF9vdXQqLz1OVUxMOworCXVjcy0+cmVhZF91cmIgPSB1Y3MtPmJ1bGtfb3V0X3VyYiA9IE5VTEw7CiAJY3MtPmluYnVmWzBdLnJjdmJ1ZiA9IHVjcy0+YnVsa19vdXRfYnVmZmVyID0gTlVMTDsKIAorCXVzYl9wdXRfZGV2KHVjcy0+dWRldik7CisJdWNzLT5pbnRlcmZhY2UgPSBOVUxMOworCXVjcy0+dWRldiA9IE5VTEw7CisJY3MtPmRldiA9IE5VTEw7CiAJZ2lnYXNldF91bmFzc2lnbihjcyk7CiB9CiAKQEAgLTk0Miw5ICs4OTUsOSBAQAogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZHJpdmVyIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KIAlpZiAoKGRyaXZlciA9IGdpZ2FzZXRfaW5pdGRyaXZlcihHSUdBU0VUX01JTk9SLCBHSUdBU0VUX01JTk9SUywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJR0FTRVRfREVWRlNOQU1FLCAmb3BzLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSElTX01PRFVMRSkpID09IE5VTEwpCisJCQkJICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAorCQkJCSAgICAgICBHSUdBU0VUX0RFVkZTTkFNRSwgJm9wcywKKwkJCQkgICAgICAgVEhJU19NT0RVTEUpKSA9PSBOVUxMKQogCQlnb3RvIGVycm9yOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KQEAgLTk4MSw4ICs5MzQsOCBAQAogc3RhdGljIHZvaWQgX19leGl0IHVzYl9naWdhc2V0X2V4aXQodm9pZCkKIHsKIAlnaWdhc2V0X2Jsb2NrZHJpdmVyKGRyaXZlcik7IC8qID0+IHByb2JlIHdpbGwgZmFpbAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogPT4gbm8gZ2lnYXNldF9zdGFydCBhbnkgbW9yZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJICAgICAgKiA9PiBubyBnaWdhc2V0X3N0YXJ0IGFueSBtb3JlCisJCQkJICAgICAgKi8KIAogCWdpZ2FzZXRfc2h1dGRvd24oY2FyZHN0YXRlKTsKIAkvKiBmcm9tIG5vdyBvbiwgbm8gaXNkbiBjYWxsYmFjayBzaG91bGQgYmUgcG9zc2libGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggMmM0ZjIwYi4uM2Y1YjY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTE0LDEzICsxNCw3IEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBsZWQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLiAgWW91J2xsCiAJICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBMRURTX1RSSUdHRVJTCi0JYm9vbCAiTEVEIFRyaWdnZXIgc3VwcG9ydCIKLQlkZXBlbmRzIE5FV19MRURTCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0cmlnZ2VyIHN1cHBvcnQgZm9yIHRoZSBsZWRzIGNsYXNzLgotCSAgVGhlc2UgdHJpZ2dlcnMgYWxsb3cga2VybmVsIGV2ZW50cyB0byBkcml2ZSB0aGUgTEVEcyBhbmQgY2FuCi0JICBiZSBjb25maWd1cmVkIHZpYSBzeXNmcy4gSWYgdW5zdXJlLCBzYXkgWS4KK2NvbW1lbnQgIkxFRCBkcml2ZXJzIgogCiBjb25maWcgTEVEU19DT1JHSQogCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgdGhlIFNoYXJwIFNMLUM3eDAgc2VyaWVzIgpAQCAtNTksNiArNTMsMjMgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMgb24gU2hhcnAgWmF1cnVzCiAJICBTTC02MDAwIHNlcmllcy4KIAorY29uZmlnIExFRFNfUzNDMjRYWAorCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0MyNFhYIEdQSU8gTEVEcyIKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgQVJDSF9TM0MyNDEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byBHUElPIGxpbmVzCisJICBvbiBTYW1zdW5nIFMzQzI0WFggc2VyaWVzIENQVXMsIHN1Y2ggYXMgdGhlIFMzQzI0MTAgYW5kIFMzQzI0NDAuCisKK2NvbW1lbnQgIkxFRCBUcmlnZ2VycyIKKworY29uZmlnIExFRFNfVFJJR0dFUlMKKwlib29sICJMRUQgVHJpZ2dlciBzdXBwb3J0IgorCWRlcGVuZHMgTkVXX0xFRFMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRyaWdnZXIgc3VwcG9ydCBmb3IgdGhlIGxlZHMgY2xhc3MuCisJICBUaGVzZSB0cmlnZ2VycyBhbGxvdyBrZXJuZWwgZXZlbnRzIHRvIGRyaXZlIHRoZSBMRURzIGFuZCBjYW4KKwkgIGJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLiBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSCiAJdHJpc3RhdGUgIkxFRCBUaW1lciBUcmlnZ2VyIgogCWRlcGVuZHMgTEVEU19UUklHR0VSUwpAQCAtNjcsNyArNzgsNyBAQAogCSAgdmlhIHN5c2ZzLiBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgTEVEU19UUklHR0VSX0lERV9ESVNLCi0JYm9vbCAiTEVEIFRpbWVyIFRyaWdnZXIiCisJYm9vbCAiTEVEIElERSBEaXNrIFRyaWdnZXIiCiAJZGVwZW5kcyBMRURTX1RSSUdHRVJTICYmIEJMS19ERVZfSURFRElTSwogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBieSBJREUgZGlzayBhY3Rpdml0eS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQppbmRleCA0MDY5OWQzLi40MGYwNDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotJChDT05GSUdfTEVEU19TUElUWikJCSs9IGxlZHMtc3BpdHoubwogb2JqLSQoQ09ORklHX0xFRFNfSVhQNFhYKQkJKz0gbGVkcy1peHA0eHgtZ3Bpby5vCiBvYmotJChDT05GSUdfTEVEU19UT1NBKQkJCSs9IGxlZHMtdG9zYS5vCitvYmotJChDT05GSUdfTEVEU19TM0MyNFhYKQkJKz0gbGVkcy1zM2MyNHh4Lm8KIAogIyBMRUQgVHJpZ2dlcnMKIG9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIpCSs9IGxlZHRyaWctdGltZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGNmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qIGRyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYworICoKKyAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIC0gTEVEcyBHUElPIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbGVkcy1ncGlvLmg+CisKKy8qIG91ciBjb250ZXh0ICovCisKK3N0cnVjdCBzM2MyNHh4X2dwaW9fbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2CQkgY2RldjsKKwlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEJKnBkYXRhOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqcGRldl90b19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqdG9fZ3BpbyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCwgY2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0eHhfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQgPSB0b19ncGlvKGxlZF9jZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgKnBkID0gbGVkLT5wZGF0YTsKKworCS8qIHRoZXJlIHdpbGwgYmUgYSBzb3J0IGRlbGF5IGJldHdlZW4gc2V0dGluZyB0aGUgb3V0cHV0IGFuZAorCSAqIGdvaW5nIGZyb20gb3V0cHV0IHRvIGlucHV0IHdoZW4gdXNpbmcgdHJpc3RhdGUuICovCisKKwlzM2MyNDEwX2dwaW9fc2V0cGluKHBkLT5ncGlvLCAodmFsdWUgPyAxIDogMCkgXgorCQkJICAgIChwZC0+ZmxhZ3MgJiBTM0MyNFhYX0xFREZfQUNUTE9XKSk7CisKKwlpZiAocGQtPmZsYWdzICYgUzNDMjRYWF9MRURGX1RSSVNUQVRFKQorCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkLT5ncGlvLAorCQkJCSAgICB2YWx1ZSA/IFMzQzI0MTBfR1BJT19PVVRQVVQgOiBTM0MyNDEwX0dQSU9fSU5QVVQpOworCit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkID0gcGRldl90b19ncGlvKGRldik7CisKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2KTsKKwlrZnJlZShsZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQ7CisJaW50IHJldDsKKworCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGxlZCk7CisKKwlsZWQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBzM2MyNHh4X2xlZF9zZXQ7CisJbGVkLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHBkYXRhLT5kZWZfdHJpZ2dlcjsKKwlsZWQtPmNkZXYubmFtZSA9IHBkYXRhLT5uYW1lOworCisJbGVkLT5wZGF0YSA9IHBkYXRhOworCisJLyogbm8gcG9pbnQgaW4gaGF2aW5nIGEgcHVsbC11cCBpZiB3ZSBhcmUgYWx3YXlzIGRyaXZpbmcgKi8KKworCWlmIChwZGF0YS0+ZmxhZ3MgJiBTM0MyNFhYX0xFREZfVFJJU1RBVEUpIHsKKwkJczNjMjQxMF9ncGlvX3NldHBpbihwZGF0YS0+Z3BpbywgMCk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4ocGRhdGEtPmdwaW8sIFMzQzI0MTBfR1BJT19JTlBVVCk7CisJfSBlbHNlIHsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChwZGF0YS0+Z3BpbywgMCk7CisJCXMzYzI0MTBfZ3Bpb19zZXRwaW4ocGRhdGEtPmdwaW8sIDApOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkYXRhLT5ncGlvLCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKKwl9CisKKwkvKiByZWdpc3RlciBvdXIgbmV3IGxlZCBkZXZpY2UgKi8KKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmZGV2LT5kZXYsICZsZWQtPmNkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibGVkX2NsYXNzZGV2X3JlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdF9lcnIxOworCX0KKworCXJldHVybiAwOworCisgZXhpdF9lcnIxOgorCWtmcmVlKGxlZCk7CisJcmV0dXJuIHJldDsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHMzYzI0eHhfbGVkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQgKmxlZCA9IHBkZXZfdG9fZ3BpbyhkZXYpOworCisJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJmxlZC0+Y2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkID0gcGRldl90b19ncGlvKGRldik7CisKKwlsZWRfY2xhc3NkZXZfcmVzdW1lKCZsZWQtPmNkZXYpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgczNjMjR4eF9sZWRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0eHhfbGVkX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjR4eF9sZWRfZHJpdmVyID0geworCS5wcm9iZQkJPSBzM2MyNHh4X2xlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IHMzYzI0eHhfbGVkX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHMzYzI0eHhfbGVkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNHh4X2xlZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9sZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0eHhfbGVkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNHh4X2xlZF9leGl0KHZvaWQpCit7CisgCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNHh4X2xlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzM2MyNHh4X2xlZF9pbml0KTsKK21vZHVsZV9leGl0KHMzYzI0eHhfbGVkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzI0WFggTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9LY29uZmlnIGIvZHJpdmVycy9tZC9LY29uZmlnCmluZGV4IGZkMmFhZTEuLmFjMjVhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvS2NvbmZpZworKysgYi9kcml2ZXJzL21kL0tjb25maWcKQEAgLTEzOSwxMSArMTM5LDEyIEBACiAJICBpcyBvbmxpbmUuICBIb3dldmVyIGl0IGlzIHN0aWxsIEVYUEVSSU1FTlRBTCBjb2RlLiAgSXQgc2hvdWxkCiAJICB3b3JrLCBidXQgcGxlYXNlIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBiYWNrdXBzLgogCi0JICBZb3Ugd2lsbCBuZWVkIGEgdmVyc2lvbiBvZiBtZGFkbSBuZXdlciB0aGFuIDIuMy4xLiAgIER1cmluZyB0aGUKLQkgIGVhcmx5IHN0YWdlIG9mIHJlc2hhcGUgdGhlcmUgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YQotCSAgaXMgYmVpbmcgb3Zlci13cml0dGVuLiAgQSBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUKLQkgIGZvciByZWNvdmVyeS4gIFRoZSBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlCi0JICBjcml0aWNhbCBzZWN0aW9uIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KKwkgIFlvdSB3aWxsIG5lZWQgbWRhZG0gdmVyaW9uIDIuNC4xIG9yIGxhdGVyIHRvIHVzZSB0aGlzCisJICBmZWF0dXJlIHNhZmVseS4gIER1cmluZyB0aGUgZWFybHkgc3RhZ2Ugb2YgcmVzaGFwZSB0aGVyZSBpcworCSAgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YSBpcyBiZWluZyBvdmVyLXdyaXR0ZW4uICBBCisJICBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUgZm9yIHJlY292ZXJ5LiAgVGhlCisJICBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24KKwkgIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KIAogCSAgVGhlIG1kYWRtIHVzYWdlIGlzIGUuZy4KIAkgICAgICAgbWRhZG0gLS1ncm93IC9kZXYvbWQxIC0tcmFpZC1kaXNrcz02CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCA0MDkyYTVlLi5iM2VhMmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTg0LDQgKzg0LDQgQEAKIG9iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0gdXNidmlkZW8vCiBvYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHVzYnZpZGVvLwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvTWFrZWZpbGUKaW5kZXggOTQzNTBmMi4uZGI2NDFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L01ha2VmaWxlCkBAIC05LDQgKzksNCBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0JUODQ4KSArPSBidHR2Lm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlCmluZGV4IDMyYTg5NmMuLjZlODY2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAKIG9iai0kKENPTkZJR19WSURFT19DWDI1ODQwKSArPSBjeDI1ODQwLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKaW5kZXggNjQ4MmI5YS4uMGRjZDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQpAQCAtOCw5ICs4LDkgQEAKIG9iai0kKENPTkZJR19WSURFT19DWDg4X0FMU0EpICs9IGN4ODgtYWxzYS5vCiBvYmotJChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpICs9IGN4ODgtdnAzMDU0LWkyYy5vCiAKLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKIAogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX1ZJREVPX0JVRl9EVkIpICs9IC1ESEFWRV9WSURFT19CVUZfRFZCPTEKIGV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfQ1gyMjcwMikgICArPSAtREhBVkVfQ1gyMjcwMj0xCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlCmluZGV4IGRhNDU3YTAuLjgyNmQwZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogCiBvYmotJChDT05GSUdfVklERU9fRU0yOFhYKSArPSBlbTI4eHgubwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyYykvLi4KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQppbmRleCAxYmE5OTg0Li5iZTdiOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCkBAIC0xMSw5ICsxMSw5IEBACiAKIG9iai0kKENPTkZJR19WSURFT19TQUE3MTM0X0RWQikgKz0gc2FhNzEzNC1kdmIubwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyYykvLi4KLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCiAKIGV4dHJhLWNmbGFncy0kKENPTkZJR19WSURFT19CVUZfRFZCKSArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCiBleHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX01UMzUyKSAgICAgKz0gLURIQVZFX01UMzUyPTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCBjOTg1NzFjLi4xM2RlMDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlICJzYWE3MTM0LXJlZy5oIgogI2luY2x1ZGUgInNhYTcxMzQuaCIKQEAgLTg3MCw3ICs4NzEsNyBAQAogCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSwgZGV2LT5wY2lfcmV2LCBwY2lfZGV2LT5pcnEsCiAJICAgICAgIGRldi0+cGNpX2xhdCxwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSk7CiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0JaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwY2lfZGV2LDB4ZmZmZmZmZmYpKSB7CisJaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwY2lfZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKIAkJcHJpbnRrKCIlczogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsZGV2LT5uYW1lKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBmYWlsMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCBkZDYyOGNiLi43ZmFjNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC0xMjksOCArMTI5LDggQEAKIAkgIGFsbG9jYXRpbmcgc3BhY2UgZnJvbSBMaW51eCdzIGF2YWlsYWJsZSBtZW1vcnkuIE90aGVyd2lzZSwgbGVhdmUKIAkgIHRoaXMgc2V0IHRvIHplcm8uIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0byBsZWF2ZSB0aGlzIGFzIHplcm8uCiAKLWNvbmZpZyBNVERfQkxLTVRECi0JdHJpc3RhdGUgIk1URCBlbXVsYXRpb24gdXNpbmcgYmxvY2sgZGV2aWNlIgorY29uZmlnIE1URF9CTE9DSzJNVEQKKwl0cmlzdGF0ZSAiTVREIHVzaW5nIGJsb2NrIGRldmljZSIKIAlkZXBlbmRzIG9uIE1URAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyBhIGJsb2NrIGRldmljZSB0byBhcHBlYXIgYXMgYW4gTVRELiBJdCB3b3VsZApAQCAtMTQxLDE1ICsxNDEsNiBAQAogCSAgVGVzdGluZyBNVEQgdXNlcnMgKGVnIEpGRlMyKSBvbiBsYXJnZSBtZWRpYSBhbmQgbWVkaWEgdGhhdCBtaWdodAogCSAgYmUgcmVtb3ZlZCBkdXJpbmcgYSB3cml0ZSAodXNpbmcgdGhlIGZsb3BweSBkcml2ZSkuCiAKLWNvbmZpZyBNVERfQkxPQ0syTVRECi0JdHJpc3RhdGUgIk1URCB1c2luZyBibG9jayBkZXZpY2UgKHJld3JpdGUpIgotCWRlcGVuZHMgb24gTVREICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhdCBNVERfQkxLTVREIGFib3ZlLCBidXQKLQkgIGV4cGVyaWVuY2VkIHNvbWUgaW50ZXJmYWNlIGNoYW5nZXMgcGx1cyBzZXJpb3VzIHNwZWVkdXBzLiAgSW4KLQkgIHRoZSBsb25nIHRlcm0sIGl0IHNob3VsZCByZXBsYWNlIE1URF9CTEtNVEQuICBSaWdodCBub3csIHlvdQotCSAgc2hvdWxkbid0IGVudHJ1c3QgaW1wb3J0YW50IGRhdGEgdG8gaXQgeWV0LgotCiBjb21tZW50ICJEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMiCiAKIGNvbmZpZyBNVERfRE9DMjAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKaW5kZXggN2M1ZWQyMS4uYjY1NzM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCkBAIC0yMSw3ICsyMSw2IEBACiBvYmotJChDT05GSUdfTVREX01TMDJOVikJKz0gbXMwMi1udi5vCiBvYmotJChDT05GSUdfTVREX01URFJBTSkJKz0gbXRkcmFtLm8KIG9iai0kKENPTkZJR19NVERfTEFSVCkJCSs9IGxhcnQubwotb2JqLSQoQ09ORklHX01URF9CTEtNVEQpCSs9IGJsa210ZC5vCiBvYmotJChDT05GSUdfTVREX0JMT0NLMk1URCkJKz0gYmxvY2sybXRkLm8KIG9iai0kKENPTkZJR19NVERfREFUQUZMQVNIKQkrPSBtdGRfZGF0YWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTTI1UDgwKQkrPSBtMjVwODAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxrbXRkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZjJlMWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYworKysgL2Rldi9udWxsCkBAIC0xLDgxOSArMCwwIEBACi0vKgotICogJElkOiBibGttdGQuYyx2IDEuMjcgMjAwNS8xMS8wNyAxMToxNDoyNCBnbGVpeG5lciBFeHAgJAotICoKLSAqIGJsa210ZC5jIC0gdXNlIGEgYmxvY2sgZGV2aWNlIGFzIGEgZmFrZSBNVEQKLSAqCi0gKiBBdXRob3I6IFNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgU2ltb24gRXZhbnMKLSAqCi0gKiBMaWNlbmNlOiBHUEwKLSAqCi0gKiBIb3cgaXQgd29ya3M6Ci0gKglUaGUgZHJpdmVyIHVzZXMgcmF3L2lvIHRvIHJlYWQvd3JpdGUgdGhlIGRldmljZSBhbmQgdGhlIHBhZ2UKLSAqCWNhY2hlIHRvIGNhY2hlIGFjY2Vzcy4gV3JpdGVzIHVwZGF0ZSB0aGUgcGFnZSBjYWNoZSB3aXRoIHRoZQotICoJbmV3IGRhdGEgYW5kIG1hcmsgaXQgZGlydHkgYW5kIGFkZCB0aGUgcGFnZSBpbnRvIGEgQklPIHdoaWNoCi0gKglpcyB0aGVuIHdyaXR0ZW4gb3V0LgotICoKLSAqCUl0IGNhbiBiZSBsb2FkZWQgUmVhZC1Pbmx5IHRvIHByZXZlbnQgZXJhc2VzIGFuZCB3cml0ZXMgdG8gdGhlCi0gKgltZWRpdW0uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgImJsa210ZDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiYmxrbXRkOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJibGttdGQ6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGNyaXQoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0NSSVQgImJsa210ZDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLQotCi0vKiBEZWZhdWx0IGVyYXNlIHNpemUgaW4gSywgYWx3YXlzIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgKi8KLSNkZWZpbmUgQ09ORklHX01URF9CTEtERVZfRVJBU0VTSVpFICgxMjggPDwgMTApCS8qIDEyOEtpQiAqLwotI2RlZmluZSBWRVJTSU9OICIkUmV2aXNpb246IDEuMjcgJCIKLQotLyogSW5mbyBmb3IgdGhlIGJsb2NrIGRldmljZSAqLwotc3RydWN0IGJsa210ZF9kZXYgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpibGtkZXY7Ci0Jc3RydWN0IG10ZF9pbmZvIG10ZF9pbmZvOwotCXN0cnVjdCBtdXRleCB3cmJ1Zl9tdXRleDsKLX07Ci0KLQotLyogU3RhdGljIGluZm8gYWJvdXQgdGhlIE1URCwgdXNlZCBpbiBjbGVhbnVwX21vZHVsZSAqLwotc3RhdGljIExJU1RfSEVBRChibGttdGRfZGV2aWNlX2xpc3QpOwotCi0KLXN0YXRpYyB2b2lkIGJsa210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQotI2RlZmluZSBNQVhfREVWSUNFUyA0Ci0KLS8qIE1vZHVsZSBwYXJhbWV0ZXJzIHBhc3NlZCBieSBpbnNtb2QvbW9kcHJvYmUgKi8KLXN0YXRpYyBjaGFyICpkZXZpY2VbTUFYX0RFVklDRVNdOyAgICAvKiB0aGUgYmxvY2sgZGV2aWNlIHRvIHVzZSAqLwotc3RhdGljIGludCBlcmFzZXN6W01BWF9ERVZJQ0VTXTsgICAgIC8qIG9wdGlvbmFsIGRlZmF1bHQgZXJhc2Ugc2l6ZSAqLwotc3RhdGljIGludCByb1tNQVhfREVWSUNFU107ICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgb25seSBmbGFnICovCi1zdGF0aWMgaW50IHN5bmM7Ci0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiU2ltb24gRXZhbnMgPHNwc2VAc2VjcmV0Lm9yZy51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRW11bGF0ZSBhbiBNVEQgdXNpbmcgYSBibG9jayBkZXZpY2UiKTsKLW1vZHVsZV9wYXJhbV9hcnJheShkZXZpY2UsIGNoYXJwLCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGV2aWNlLCAiYmxvY2sgZGV2aWNlIHRvIHVzZSIpOwotbW9kdWxlX3BhcmFtX2FycmF5KGVyYXNlc3osIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVyYXNlc3osICJvcHRpb25hbCBlcmFzZSBzaXplIHRvIHVzZSBpbiBLaUIuIGVnIDQ9NEtpQi4iKTsKLW1vZHVsZV9wYXJhbV9hcnJheShybywgYm9vbCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJvLCAiMT1SZWFkIG9ubHksIHdyaXRlcyBhbmQgZXJhc2VzIGNhdXNlIGVycm9ycyIpOwotbW9kdWxlX3BhcmFtKHN5bmMsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzeW5jLCAiMT1TeW5jaHJvbm91cyB3cml0ZXMiKTsKLQotCi0vKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEJJTyByZWFkcyAqLwotc3RhdGljIGludCBiaV9yZWFkX2NvbXBsZXRlKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKLXsKLQlpZiAoYmlvLT5iaV9zaXplKQotCQlyZXR1cm4gMTsKLQotCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiopYmlvLT5iaV9wcml2YXRlKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEJJTyB3cml0ZXMgKi8KLXN0YXRpYyBpbnQgYmlfd3JpdGVfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQotewotCWNvbnN0IGludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwotCXN0cnVjdCBiaW9fdmVjICpidmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX3ZjbnQgLSAxOwotCi0JaWYgKGJpby0+Ymlfc2l6ZSkKLQkJcmV0dXJuIDE7Ci0KLQlpZighdXB0b2RhdGUpCi0JCWVycigiYmlfd3JpdGVfY29tcGxldGU6IG5vdCB1cHRvZGF0ZVxuIik7Ci0KLQlkbyB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKLQkJREVCVUcoMywgIkNsZWFuaW5nIHVwIHBhZ2UgJWxkXG4iLCBwYWdlLT5pbmRleCk7Ci0JCWlmICgtLWJ2ZWMgPj0gYmlvLT5iaV9pb192ZWMpCi0JCQlwcmVmZXRjaHcoJmJ2ZWMtPmJ2X3BhZ2UtPmZsYWdzKTsKLQotCQlpZiAodXB0b2RhdGUpIHsKLQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJfSBlbHNlIHsKLQkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwotCQl9Ci0JCWNsZWFyX3BhZ2VfZGlydHkocGFnZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JfSB3aGlsZSAoYnZlYyA+PSBiaW8tPmJpX2lvX3ZlYyk7Ci0KLQljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24qKWJpby0+YmlfcHJpdmF0ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogcmVhZCBvbmUgcGFnZSBmcm9tIHRoZSBibG9jayBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgYmxrbXRkX3JlYWRwYWdlKHN0cnVjdCBibGttdGRfZGV2ICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBiaW8gKmJpbzsKLQlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmKFBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQlERUJVRygyLCAiYmxrbXRkOiByZWFkcGFnZSBwYWdlICVsZCBpcyBhbHJlYWR5IHVwdG8gZGF0ZVxuIiwgcGFnZS0+aW5kZXgpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7Ci0JQ2xlYXJQYWdlRXJyb3IocGFnZSk7Ci0KLQliaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgMSk7Ci0JaWYoYmlvKSB7Ci0JCWluaXRfY29tcGxldGlvbigmZXZlbnQpOwotCQliaW8tPmJpX2JkZXYgPSBkZXYtPmJsa2RldjsKLQkJYmlvLT5iaV9zZWN0b3IgPSBwYWdlLT5pbmRleCA8PCAoUEFHRV9TSElGVC05KTsKLQkJYmlvLT5iaV9wcml2YXRlID0gJmV2ZW50OwotCQliaW8tPmJpX2VuZF9pbyA9IGJpX3JlYWRfY29tcGxldGU7Ci0JCWlmKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIFBBR0VfU0laRSwgMCkgPT0gUEFHRV9TSVpFKSB7Ci0JCQlzdWJtaXRfYmlvKFJFQURfU1lOQywgYmlvKTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2ZW50KTsKLQkJCWVyciA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpID8gMCA6IC1FSU87Ci0JCQliaW9fcHV0KGJpbyk7Ci0JCX0KLQl9Ci0KLQlpZihlcnIpCi0JCVNldFBhZ2VFcnJvcihwYWdlKTsKLQllbHNlCi0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHdyaXRlIG91dCB0aGUgY3VycmVudCBCSU8gYW5kIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLwotc3RhdGljIGludCBibGttdGRfd3JpdGVfb3V0KHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKLQlpbnQgZXJyOwotCi0JaWYoIWJpby0+YmlfdmNudCkgewotCQliaW9fcHV0KGJpbyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWluaXRfY29tcGxldGlvbigmZXZlbnQpOwotCWJpby0+YmlfcHJpdmF0ZSA9ICZldmVudDsKLQliaW8tPmJpX2VuZF9pbyA9IGJpX3dyaXRlX2NvbXBsZXRlOwotCXN1Ym1pdF9iaW8oV1JJVEVfU1lOQywgYmlvKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZldmVudCk7Ci0JREVCVUcoMywgInN1Ym1pdF9iaW8gY29tcGxldGVkLCBiaV92Y250ID0gJWRcbiIsIGJpby0+YmlfdmNudCk7Ci0JZXJyID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykgPyAwIDogLUVJTzsKLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi0vKioKLSAqIGJsa210ZF9hZGRfcGFnZSAtIGFkZCBhIHBhZ2UgdG8gdGhlIGN1cnJlbnQgQklPCi0gKiBAYmlvOiBiaW8gdG8gYWRkIHRvIChOVUxMIHRvIGFsbG9jIGluaXRpYWwgYmlvKQotICogQGJsa2RldjogYmxvY2sgZGV2aWNlCi0gKiBAcGFnZTogcGFnZSB0byBhZGQKLSAqIEBwYWdlY250OiBwYWdlcyBsZWZ0IHRvIGFkZAotICoKLSAqIEFkZHMgYSBwYWdlIHRvIHRoZSBjdXJyZW50IGJpbywgYWxsb2NhdGluZyBpdCBpZiBuZWNlc3NhcnkuIElmIGl0IGNhbm5vdCBiZQotICogYWRkZWQsIHRoZSBjdXJyZW50IGJpbyBpcyB3cml0dGVuIG91dCBhbmQgYSBuZXcgb25lIGlzIGFsbG9jYXRlZC4gUmV0dXJucwotICogdGhlIG5ldyBiaW8gdG8gYWRkIG9yIE5VTEwgb24gZXJyb3IKLSAqLwotc3RhdGljIHN0cnVjdCBiaW8gKmJsa210ZF9hZGRfcGFnZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJsa2RldiwKLQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VjbnQpCi17Ci0KLSByZXRyeToKLQlpZighYmlvKSB7Ci0JCWJpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBwYWdlY250KTsKLQkJaWYoIWJpbykKLQkJCXJldHVybiBOVUxMOwotCQliaW8tPmJpX3NlY3RvciA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX1NISUZULTkpOwotCQliaW8tPmJpX2JkZXYgPSBibGtkZXY7Ci0JfQotCi0JaWYoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgUEFHRV9TSVpFLCAwKSAhPSBQQUdFX1NJWkUpIHsKLQkJYmxrbXRkX3dyaXRlX291dChiaW8pOwotCQliaW8gPSBOVUxMOwotCQlnb3RvIHJldHJ5OwotCX0KLQlyZXR1cm4gYmlvOwotfQotCi0KLS8qKgotICogd3JpdGVfcGFnZXMgLSB3cml0ZSBibG9jayBvZiBkYXRhIHRvIGRldmljZSB2aWEgdGhlIHBhZ2UgY2FjaGUKLSAqIEBkZXY6IGRldmljZSB0byB3cml0ZSB0bwotICogQGJ1ZjogZGF0YSBzb3VyY2Ugb3IgTlVMTCBpZiBlcmFzZSAob3V0cHV0IGlzIHNldCB0byAweGZmKQotICogQHRvOiBvZmZzZXQgaW50byBvdXRwdXQgZGV2aWNlCi0gKiBAbGVuOiBhbW91bnQgdG8gZGF0YSB0byB3cml0ZQotICogQHJldGxlbjogYW1vdW50IG9mIGRhdGEgd3JpdHRlbgotICoKLSAqIEdyYWIgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBhbmQgZmlsbCB0aGVtIHdpdGggdGhlIHNvdXJjZSBkYXRhLgotICogTm9uIHBhZ2UgYWxpZ25lZCBzdGFydCBhbmQgZW5kIHJlc3VsdCBpbiBhIHJlYWRpbiBvZiB0aGUgcGFnZSBhbmQKLSAqIHBhcnQgb2YgdGhlIHBhZ2UgYmVpbmcgbW9kaWZpZWQuIFBhZ2VzIGFyZSBhZGRlZCB0byB0aGUgYmlvIGFuZCB0aGVuIHdyaXR0ZW4KLSAqIG91dC4KLSAqLwotc3RhdGljIGludCB3cml0ZV9wYWdlcyhzdHJ1Y3QgYmxrbXRkX2RldiAqZGV2LCBjb25zdCB1X2NoYXIgKmJ1ZiwgbG9mZl90IHRvLAotCQkgICAgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4pCi17Ci0JaW50IHBhZ2Vuciwgb2Zmc2V0OwotCXNpemVfdCBzdGFydF9sZW4gPSAwLCBlbmRfbGVuOwotCWludCBwYWdlY250ID0gMDsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwotCXNpemVfdCB0aGlzbGVuID0gMDsKLQotCXBhZ2VuciA9IHRvID4+IFBBR0VfU0hJRlQ7Ci0Jb2Zmc2V0ID0gdG8gJiB+UEFHRV9NQVNLOwotCi0JREVCVUcoMiwgImJsa210ZDogd3JpdGVfcGFnZXM6IGJ1ZiA9ICVwIHRvID0gJWxkIGxlbiA9ICV6ZCBwYWdlbnIgPSAlZCBvZmZzZXQgPSAlZFxuIiwKLQkgICAgICBidWYsIChsb25nKXRvLCBsZW4sIHBhZ2Vuciwgb2Zmc2V0KTsKLQotCS8qIHNlZSBpZiB3ZSBoYXZlIHRvIGRvIGEgcGFydGlhbCB3cml0ZSBhdCB0aGUgc3RhcnQgKi8KLQlpZihvZmZzZXQpIHsKLQkJc3RhcnRfbGVuID0gKChvZmZzZXQgKyBsZW4pID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSAtIG9mZnNldCA6IGxlbjsKLQkJbGVuIC09IHN0YXJ0X2xlbjsKLQl9Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgb3RoZXIgdHdvIHJlZ2lvbnMgKi8KLQllbmRfbGVuID0gbGVuICYgflBBR0VfTUFTSzsKLQlsZW4gLT0gZW5kX2xlbjsKLQotCWlmKHN0YXJ0X2xlbikKLQkJcGFnZWNudCsrOwotCi0JaWYobGVuKQotCQlwYWdlY250ICs9IGxlbiA+PiBQQUdFX1NISUZUOwotCi0JaWYoZW5kX2xlbikKLQkJcGFnZWNudCsrOwotCi0JbXV0ZXhfbG9jaygmZGV2LT53cmJ1Zl9tdXRleCk7Ci0KLQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogc3RhcnRfbGVuID0gJXpkIGxlbiA9ICV6ZCBlbmRfbGVuID0gJXpkIHBhZ2VjbnQgPSAlZFxuIiwKLQkgICAgICBzdGFydF9sZW4sIGxlbiwgZW5kX2xlbiwgcGFnZWNudCk7Ci0KLQlpZihzdGFydF9sZW4pIHsKLQkJLyogZG8gcGFydGlhbCBzdGFydCByZWdpb24gKi8KLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGRvaW5nIHBhcnRpYWwgc3RhcnQsIHBhZ2UgPSAlZCBsZW4gPSAlemQgb2Zmc2V0ID0gJWRcbiIsCi0JCSAgICAgIHBhZ2Vuciwgc3RhcnRfbGVuLCBvZmZzZXQpOwotCi0JCUJVR19PTighYnVmKTsKLQkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgcGFnZW5yLCAoZmlsbGVyX3QgKilibGttdGRfcmVhZHBhZ2UsIGRldik7Ci0JCWxvY2tfcGFnZShwYWdlKTsKLQkJaWYoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQllcnIoInRvID0gJWxsZCBzdGFydF9sZW4gPSAlemQgbGVuID0gJXpkIGVuZF9sZW4gPSAlemQgcGFnZW5yID0gJWRcbiIsCi0JCQkgICAgdG8sIHN0YXJ0X2xlbiwgbGVuLCBlbmRfbGVuLCBwYWdlbnIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhwYWdlKStvZmZzZXQsIGJ1Ziwgc3RhcnRfbGVuKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJYnVmICs9IHN0YXJ0X2xlbjsKLQkJdGhpc2xlbiA9IHN0YXJ0X2xlbjsKLQkJYmlvID0gYmxrbXRkX2FkZF9wYWdlKGJpbywgZGV2LT5ibGtkZXYsIHBhZ2UsIHBhZ2VjbnQpOwotCQlpZighYmlvKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZXJyKCJiaW9fYWRkX3BhZ2UgZmFpbGVkXG4iKTsKLQkJCWdvdG8gd3JpdGVfZXJyOwotCQl9Ci0JCXBhZ2VjbnQtLTsKLQkJcGFnZW5yKys7Ci0JfQotCi0JLyogTm93IGRvIHRoZSBtYWluIGxvb3AgdG8gYSBwYWdlIGFsaWduZWQsIG4gcGFnZSBzaXplZCBvdXRwdXQgKi8KLQlpZihsZW4pIHsKLQkJaW50IHBhZ2VzYyA9IGxlbiA+PiBQQUdFX1NISUZUOwotCQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogd2hvbGUgcGFnZXMgc3RhcnQgPSAlZCwgY291bnQgPSAlZFxuIiwKLQkJICAgICAgcGFnZW5yLCBwYWdlc2MpOwotCQl3aGlsZShwYWdlc2MpIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCQkvKiBzZWUgaWYgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZSAqLwotCQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGdyYWJiaW5nIHBhZ2UgJWQgZnJvbSBwYWdlIGNhY2hlXG4iLCBwYWdlbnIpOwotCQkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgcGFnZW5yKTsKLQkJCWlmKFBhZ2VEaXJ0eShwYWdlKSkgewotCQkJCUJVRygpOwotCQkJfQotCQkJaWYoIXBhZ2UpIHsKLQkJCQl3YXJuKCJ3cml0ZTogY2Fubm90IGdyYWIgY2FjaGUgcGFnZSAlZCIsIHBhZ2Vucik7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIHdyaXRlX2VycjsKLQkJCX0KLQkJCWlmKCFidWYpIHsKLQkJCQltZW1zZXQocGFnZV9hZGRyZXNzKHBhZ2UpLCAweGZmLCBQQUdFX1NJWkUpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1jcHkocGFnZV9hZGRyZXNzKHBhZ2UpLCBidWYsIFBBR0VfU0laRSk7Ci0JCQkJYnVmICs9IFBBR0VfU0laRTsKLQkJCX0KLQkJCWJpbyA9IGJsa210ZF9hZGRfcGFnZShiaW8sIGRldi0+YmxrZGV2LCBwYWdlLCBwYWdlY250KTsKLQkJCWlmKCFiaW8pIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWVycigiYmlvX2FkZF9wYWdlIGZhaWxlZFxuIik7Ci0JCQkJZ290byB3cml0ZV9lcnI7Ci0JCQl9Ci0JCQlwYWdlbnIrKzsKLQkJCXBhZ2VjbnQtLTsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQkJcGFnZXNjLS07Ci0JCQl0aGlzbGVuICs9IFBBR0VfU0laRTsKLQkJfQotCX0KLQotCWlmKGVuZF9sZW4pIHsKLQkJLyogZG8gdGhlIHRoaXJkIHJlZ2lvbiAqLwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGRvaW5nIHBhcnRpYWwgZW5kLCBwYWdlID0gJWQgbGVuID0gJXpkXG4iLAotCQkgICAgICBwYWdlbnIsIGVuZF9sZW4pOwotCQlCVUdfT04oIWJ1Zik7Ci0JCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIHBhZ2VuciwgKGZpbGxlcl90ICopYmxrbXRkX3JlYWRwYWdlLCBkZXYpOwotCQlsb2NrX3BhZ2UocGFnZSk7Ci0JCWlmKFBhZ2VEaXJ0eShwYWdlKSkgewotCQkJZXJyKCJ0byA9ICVsbGQgc3RhcnRfbGVuID0gJXpkIGxlbiA9ICV6ZCBlbmRfbGVuID0gJXpkIHBhZ2VuciA9ICVkXG4iLAotCQkJICAgIHRvLCBzdGFydF9sZW4sIGxlbiwgZW5kX2xlbiwgcGFnZW5yKTsKLQkJCUJVRygpOwotCQl9Ci0JCW1lbWNweShwYWdlX2FkZHJlc3MocGFnZSksIGJ1ZiwgZW5kX2xlbik7Ci0JCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiB3cml0aW5nIG91dCBwYXJ0aWFsIGVuZFxuIik7Ci0JCXRoaXNsZW4gKz0gZW5kX2xlbjsKLQkJYmlvID0gYmxrbXRkX2FkZF9wYWdlKGJpbywgZGV2LT5ibGtkZXYsIHBhZ2UsIHBhZ2VjbnQpOwotCQlpZighYmlvKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZXJyKCJiaW9fYWRkX3BhZ2UgZmFpbGVkXG4iKTsKLQkJCWdvdG8gd3JpdGVfZXJyOwotCQl9Ci0JCXBhZ2VucisrOwotCX0KLQotCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiBnb3QgJWQgdmVjdG9ycyB0byB3cml0ZVxuIiwgYmlvLT5iaV92Y250KTsKLSB3cml0ZV9lcnI6Ci0JaWYoYmlvKQotCQlibGttdGRfd3JpdGVfb3V0KGJpbyk7Ci0KLQlERUJVRygyLCAiYmxrbXRkOiB3cml0ZTogZW5kLCByZXRsZW4gPSAlemQsIGVyciA9ICVkXG4iLCAqcmV0bGVuLCBlcnIpOwotCW11dGV4X3VubG9jaygmZGV2LT53cmJ1Zl9tdXRleCk7Ci0KLQlpZihyZXRsZW4pCi0JCSpyZXRsZW4gPSB0aGlzbGVuOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogZXJhc2UgYSBzcGVjaWZpZWQgcGFydCBvZiB0aGUgZGV2aWNlICovCi1zdGF0aWMgaW50IGJsa210ZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQotewotCXN0cnVjdCBibGttdGRfZGV2ICpkZXYgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqZWluZm8gPSBtdGQtPmVyYXNlcmVnaW9uczsKLQlpbnQgbnVtcmVnaW9ucyA9IG10ZC0+bnVtZXJhc2VyZWdpb25zOwotCXNpemVfdCBmcm9tOwotCXVfbG9uZyBsZW47Ci0JaW50IGVyciA9IC1FSU87Ci0Jc2l6ZV90IHJldGxlbjsKLQotCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOwotCWZyb20gPSBpbnN0ci0+YWRkcjsKLQlsZW4gPSBpbnN0ci0+bGVuOwotCi0JLyogY2hlY2sgZXJhc2UgcmVnaW9uIGhhcyB2YWxpZCBzdGFydCBhbmQgbGVuZ3RoICovCi0JREVCVUcoMiwgImJsa210ZDogZXJhc2U6IGRldiA9IGAlcycgZnJvbSA9IDB4JXp4IGxlbiA9IDB4JWx4XG4iLAotCSAgICAgIG10ZC0+bmFtZSs5LCBmcm9tLCBsZW4pOwotCXdoaWxlKG51bXJlZ2lvbnMpIHsKLQkJREVCVUcoMywgImJsa210ZDogY2hlY2tpbmcgZXJhc2UgcmVnaW9uID0gMHglMDhYIHNpemUgPSAweCVYIG51bSA9IDB4JXhcbiIsCi0JCSAgICAgIGVpbmZvLT5vZmZzZXQsIGVpbmZvLT5lcmFzZXNpemUsIGVpbmZvLT5udW1ibG9ja3MpOwotCQlpZihmcm9tID49IGVpbmZvLT5vZmZzZXQKLQkJICAgJiYgZnJvbSA8IGVpbmZvLT5vZmZzZXQgKyAoZWluZm8tPmVyYXNlc2l6ZSAqIGVpbmZvLT5udW1ibG9ja3MpKSB7Ci0JCQlpZihsZW4gPT0gZWluZm8tPmVyYXNlc2l6ZQotCQkJICAgJiYgKCAoZnJvbSAtIGVpbmZvLT5vZmZzZXQpICUgZWluZm8tPmVyYXNlc2l6ZSA9PSAwKSkKLQkJCQlicmVhazsKLQkJfQotCQludW1yZWdpb25zLS07Ci0JCWVpbmZvKys7Ci0JfQotCi0JaWYoIW51bXJlZ2lvbnMpIHsKLQkJLyogTm90IGEgdmFsaWQgZXJhc2UgYmxvY2sgKi8KLQkJZXJyKCJlcmFzZTogaW52YWxpZCBlcmFzZSByZXF1ZXN0IDB4JWxYIEAgMHglMDh6WCIsIGxlbiwgZnJvbSk7Ci0JCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7Ci0JCWVyciA9IC1FSU87Ci0JfQotCi0JaWYoaW5zdHItPnN0YXRlICE9IE1URF9FUkFTRV9GQUlMRUQpIHsKLQkJLyogZG8gdGhlIGVyYXNlICovCi0JCURFQlVHKDMsICJEb2luZyBlcmFzZSBmcm9tID0gJXpkIGxlbiA9ICVsZFxuIiwgZnJvbSwgbGVuKTsKLQkJZXJyID0gd3JpdGVfcGFnZXMoZGV2LCBOVUxMLCBmcm9tLCBsZW4sICZyZXRsZW4pOwotCQlpZihlcnIgfHwgcmV0bGVuICE9IGxlbikgewotCQkJZXJyKCJlcmFzZSBmYWlsZWQgZXJyID0gJWQiLCBlcnIpOwotCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJfSBlbHNlIHsKLQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9ET05FOwotCQl9Ci0JfQotCi0JREVCVUcoMywgImJsa210ZDogZXJhc2U6IGNoZWNraW5nIGNhbGxiYWNrXG4iKTsKLQltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOwotCURFQlVHKDIsICJibGttdGQ6IGVyYXNlOiBmaW5pc2hlZCAoZXJyID0gJWQpXG4iLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogcmVhZCBhIHJhbmdlIG9mIHRoZSBkYXRhIHZpYSB0aGUgcGFnZSBjYWNoZSAqLwotc3RhdGljIGludCBibGttdGRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCSAgICAgICBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCi17Ci0Jc3RydWN0IGJsa210ZF9kZXYgKmRldiA9IG10ZC0+cHJpdjsKLQlpbnQgZXJyID0gMDsKLQlpbnQgb2Zmc2V0OwotCWludCBwYWdlbnIsIHBhZ2VzOwotCXNpemVfdCB0aGlzbGVuID0gMDsKLQotCURFQlVHKDIsICJibGttdGQ6IHJlYWQ6IGRldiA9IGAlcycgZnJvbSA9ICVsbGQgbGVuID0gJXpkIGJ1ZiA9ICVwXG4iLAotCSAgICAgIG10ZC0+bmFtZSs5LCBmcm9tLCBsZW4sIGJ1Zik7Ci0KLQlpZihmcm9tID4gbXRkLT5zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZihmcm9tICsgbGVuID4gbXRkLT5zaXplKQotCQlsZW4gPSBtdGQtPnNpemUgLSBmcm9tOwotCi0JcGFnZW5yID0gZnJvbSA+PiBQQUdFX1NISUZUOwotCW9mZnNldCA9IGZyb20gLSAocGFnZW5yIDw8IFBBR0VfU0hJRlQpOwotCi0JcGFnZXMgPSAob2Zmc2V0K2xlbitQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKLQlERUJVRygzLCAiYmxrbXRkOiByZWFkOiBwYWdlbnIgPSAlZCBvZmZzZXQgPSAlZCwgcGFnZXMgPSAlZFxuIiwKLQkgICAgICBwYWdlbnIsIG9mZnNldCwgcGFnZXMpOwotCi0Jd2hpbGUocGFnZXMpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCWludCBjcHlsZW47Ci0KLQkJREVCVUcoMywgImJsa210ZDogcmVhZDogbG9va2luZyBmb3IgcGFnZTogJWRcbiIsIHBhZ2Vucik7Ci0JCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIHBhZ2VuciwgKGZpbGxlcl90ICopYmxrbXRkX3JlYWRwYWdlLCBkZXYpOwotCQlpZihJU19FUlIocGFnZSkpIHsKLQkJCWVyciA9IC1FSU87Ci0JCQlnb3RvIHJlYWRlcnI7Ci0JCX0KLQotCQljcHlsZW4gPSAoUEFHRV9TSVpFID4gbGVuKSA/IGxlbiA6IFBBR0VfU0laRTsKLQkJaWYob2Zmc2V0K2NweWxlbiA+IFBBR0VfU0laRSkKLQkJCWNweWxlbiA9IFBBR0VfU0laRS1vZmZzZXQ7Ci0KLQkJbWVtY3B5KGJ1ZiArIHRoaXNsZW4sIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgY3B5bGVuKTsKLQkJb2Zmc2V0ID0gMDsKLQkJbGVuIC09IGNweWxlbjsKLQkJdGhpc2xlbiArPSBjcHlsZW47Ci0JCXBhZ2VucisrOwotCQlwYWdlcy0tOwotCQlpZighUGFnZURpcnR5KHBhZ2UpKQotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCX0KLQotIHJlYWRlcnI6Ci0JaWYocmV0bGVuKQotCQkqcmV0bGVuID0gdGhpc2xlbjsKLQlERUJVRygyLCAiYmxrbXRkOiBlbmQgcmVhZDogcmV0bGVuID0gJXpkLCBlcnIgPSAlZFxuIiwgdGhpc2xlbiwgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHdyaXRlIGRhdGEgdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNlICovCi1zdGF0aWMgaW50IGJsa210ZF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBibGttdGRfZGV2ICpkZXYgPSBtdGQtPnByaXY7Ci0JaW50IGVycjsKLQotCWlmKCFsZW4pCi0JCXJldHVybiAwOwotCi0JREVCVUcoMiwgImJsa210ZDogd3JpdGU6IGRldiA9IGAlcycgdG8gPSAlbGxkIGxlbiA9ICV6ZCBidWYgPSAlcFxuIiwKLQkgICAgICBtdGQtPm5hbWUrOSwgdG8sIGxlbiwgYnVmKTsKLQotCWlmKHRvID49IG10ZC0+c2l6ZSkgewotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlpZih0byArIGxlbiA+IG10ZC0+c2l6ZSkgewotCQlsZW4gPSBtdGQtPnNpemUgLSB0bzsKLQl9Ci0KLQllcnIgPSB3cml0ZV9wYWdlcyhkZXYsIGJ1ZiwgdG8sIGxlbiwgcmV0bGVuKTsKLQlpZihlcnIgPiAwKQotCQllcnIgPSAwOwotCURFQlVHKDIsICJibGttdGQ6IHdyaXRlOiBlbmQsIGVyciA9ICVkXG4iLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogc3luYyB0aGUgZGV2aWNlIC0gd2FpdCB1bnRpbCB0aGUgd3JpdGUgcXVldWUgaXMgZW1wdHkgKi8KLXN0YXRpYyB2b2lkIGJsa210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCS8qIEN1cnJlbnRseSBhbGwgd3JpdGVzIGFyZSBzeW5jaHJvbm91cyAqLwotfQotCi0KLXN0YXRpYyB2b2lkIGZyZWVfZGV2aWNlKHN0cnVjdCBibGttdGRfZGV2ICpkZXYpCi17Ci0JREVCVUcoMiwgImJsa210ZDogZnJlZV9kZXZpY2UoKSBkZXYgPSAlcFxuIiwgZGV2KTsKLQlpZihkZXYpIHsKLQkJa2ZyZWUoZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMpOwotCQlrZnJlZShkZXYtPm10ZF9pbmZvLm5hbWUpOwotCQlpZihkZXYtPmJsa2RldikgewotCQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlcyhkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZyk7Ci0JCQljbG9zZV9iZGV2X2V4Y2woZGV2LT5ibGtkZXYpOwotCQl9Ci0JCWtmcmVlKGRldik7Ci0JfQotfQotCi0KLS8qIEZvciBhIGdpdmVuIHNpemUgYW5kIGluaXRpYWwgZXJhc2Ugc2l6ZSwgY2FsY3VsYXRlIHRoZSBudW1iZXIKLSAqIGFuZCBzaXplIG9mIGVhY2ggZXJhc2UgcmVnaW9uLiBHb2VzIHJvdW5kIHRoZSBsb29wIHR3aWNlLAotICogb25jZSB0byBmaW5kIG91dCBob3cgbWFueSByZWdpb25zLCB0aGVuIGFsbG9jYXRlcyBzcGFjZSwKLSAqIHRoZW4gcm91bmQgdGhlIGxvb3AgYWdhaW4gdG8gZmlsbCBpdCBpbi4KLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmNhbGNfZXJhc2VfcmVnaW9ucygKLQlzaXplX3QgZXJhc2Vfc2l6ZSwgc2l6ZV90IHRvdGFsX3NpemUsIGludCAqcmVnaW9ucykKLXsKLQlzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvICppbmZvID0gTlVMTDsKLQotCURFQlVHKDIsICJjYWxjX2VyYXNlX3JlZ2lvbnMsIGVzID0gJXpkIHNpemUgPSAlemQgcmVnaW9ucyA9ICVkXG4iLAotCSAgICAgIGVyYXNlX3NpemUsIHRvdGFsX3NpemUsICpyZWdpb25zKTsKLQkvKiBNYWtlIGFueSB1c2VyIHNwZWNpZmllZCBlcmFzZXNpemUgYmUgYSBwb3dlciBvZiAyCi0JICAgYW5kIGF0IGxlYXN0IFBBR0VfU0laRSAqLwotCWlmKGVyYXNlX3NpemUpIHsKLQkJaW50IGVzID0gZXJhc2Vfc2l6ZTsKLQkJZXJhc2Vfc2l6ZSA9IDE7Ci0JCXdoaWxlKGVzICE9IDEpIHsKLQkJCWVzID4+PSAxOwotCQkJZXJhc2Vfc2l6ZSA8PD0gMTsKLQkJfQotCQlpZihlcmFzZV9zaXplIDwgUEFHRV9TSVpFKQotCQkJZXJhc2Vfc2l6ZSA9IFBBR0VfU0laRTsKLQl9IGVsc2UgewotCQllcmFzZV9zaXplID0gQ09ORklHX01URF9CTEtERVZfRVJBU0VTSVpFOwotCX0KLQotCSpyZWdpb25zID0gMDsKLQotCWRvIHsKLQkJaW50IHRvdF9zaXplID0gdG90YWxfc2l6ZTsKLQkJaW50IGVyX3NpemUgPSBlcmFzZV9zaXplOwotCQlpbnQgY291bnQgPSAwLCBvZmZzZXQgPSAwLCByZWdjbnQgPSAwOwotCi0JCXdoaWxlKHRvdF9zaXplKSB7Ci0JCQljb3VudCA9IHRvdF9zaXplIC8gZXJfc2l6ZTsKLQkJCWlmKGNvdW50KSB7Ci0JCQkJdG90X3NpemUgPSB0b3Rfc2l6ZSAlIGVyX3NpemU7Ci0JCQkJaWYoaW5mbykgewotCQkJCQlERUJVRygyLCAiYWRkaW5nIHRvIGVyYXNlIGluZm8gb2ZmPSVkIGVyPSVkIGNudD0lZFxuIiwKLQkJCQkJICAgICAgb2Zmc2V0LCBlcl9zaXplLCBjb3VudCk7Ci0JCQkJCShpbmZvK3JlZ2NudCktPm9mZnNldCA9IG9mZnNldDsKLQkJCQkJKGluZm8rcmVnY250KS0+ZXJhc2VzaXplID0gZXJfc2l6ZTsKLQkJCQkJKGluZm8rcmVnY250KS0+bnVtYmxvY2tzID0gY291bnQ7Ci0JCQkJCSgqcmVnaW9ucykrKzsKLQkJCQl9Ci0JCQkJcmVnY250Kys7Ci0JCQkJb2Zmc2V0ICs9IChjb3VudCAqIGVyX3NpemUpOwotCQkJfQotCQkJd2hpbGUoZXJfc2l6ZSA+IHRvdF9zaXplKQotCQkJCWVyX3NpemUgPj49IDE7Ci0JCX0KLQkJaWYoaW5mbyA9PSBOVUxMKSB7Ci0JCQlpbmZvID0ga21hbGxvYyhyZWdjbnQgKiBzaXplb2Yoc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyksIEdGUF9LRVJORUwpOwotCQkJaWYoIWluZm8pCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlKCEoKnJlZ2lvbnMpKTsKLQlERUJVRygyLCAiY2FsY19lcmFzZV9yZWdpb25zIGRvbmUsIGVzID0gJXpkIHNpemUgPSAlemQgcmVnaW9ucyA9ICVkXG4iLAotCSAgICAgIGVyYXNlX3NpemUsIHRvdGFsX3NpemUsICpyZWdpb25zKTsKLQlyZXR1cm4gaW5mbzsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGJsa210ZF9kZXYgKmFkZF9kZXZpY2UoY2hhciAqZGV2bmFtZSwgaW50IHJlYWRvbmx5LCBpbnQgZXJhc2Vfc2l6ZSkKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCWludCBtb2RlOwotCXN0cnVjdCBibGttdGRfZGV2ICpkZXY7Ci0KLQlpZighZGV2bmFtZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBHZXQgYSBoYW5kbGUgb24gdGhlIGRldmljZSAqLwotCi0KLSNpZmRlZiBNT0RVTEUKLQltb2RlID0gKHJlYWRvbmx5KSA/IE9fUkRPTkxZIDogT19SRFdSOwotCWJkZXYgPSBvcGVuX2JkZXZfZXhjbChkZXZuYW1lLCBtb2RlLCBOVUxMKTsKLSNlbHNlCi0JbW9kZSA9IChyZWFkb25seSkgPyBGTU9ERV9SRUFEIDogRk1PREVfV1JJVEU7Ci0JYmRldiA9IG9wZW5fYnlfZGV2bnVtKG5hbWVfdG9fZGV2X3QoZGV2bmFtZSksIG1vZGUpOwotI2VuZGlmCi0JaWYoSVNfRVJSKGJkZXYpKSB7Ci0JCWVycigiZXJyb3I6IGNhbm5vdCBvcGVuIGRldmljZSAlcyIsIGRldm5hbWUpOwotCQlERUJVRygyLCAiYmxrbXRkOiBvcGVuaW5nIGJkZXYgcmV0dXJuZWQgJWxkXG4iLCBQVFJfRVJSKGJkZXYpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JREVCVUcoMSwgImJsa210ZDogZm91bmQgYSBibG9jayBkZXZpY2UgbWFqb3IgPSAlZCwgbWlub3IgPSAlZFxuIiwKLQkgICAgICBNQUpPUihiZGV2LT5iZF9kZXYpLCBNSU5PUihiZGV2LT5iZF9kZXYpKTsKLQotCWlmKE1BSk9SKGJkZXYtPmJkX2RldikgPT0gTVREX0JMT0NLX01BSk9SKSB7Ci0JCWVycigiYXR0ZW1wdGluZyB0byB1c2UgYW4gTVREIGRldmljZSBhcyBhIGJsb2NrIGRldmljZSIpOwotCQlibGtkZXZfcHV0KGJkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldiksIEdGUF9LRVJORUwpOwotCWlmKGRldiA9PSBOVUxMKSB7Ci0JCWJsa2Rldl9wdXQoYmRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldikpOwotCWRldi0+YmxrZGV2ID0gYmRldjsKLQlpZighcmVhZG9ubHkpIHsKLQkJbXV0ZXhfaW5pdCgmZGV2LT53cmJ1Zl9tdXRleCk7Ci0JfQotCi0JZGV2LT5tdGRfaW5mby5zaXplID0gZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX3NpemUgJiBQQUdFX01BU0s7Ci0KLQkvKiBTZXR1cCB0aGUgTVREIHN0cnVjdHVyZSAqLwotCS8qIG1ha2UgdGhlIG5hbWUgY29udGFpbiB0aGUgYmxvY2sgZGV2aWNlIGluICovCi0JZGV2LT5tdGRfaW5mby5uYW1lID0ga21hbGxvYyhzaXplb2YoImJsa210ZDogIikgKyBzdHJsZW4oZGV2bmFtZSksIEdGUF9LRVJORUwpOwotCWlmKGRldi0+bXRkX2luZm8ubmFtZSA9PSBOVUxMKQotCQlnb3RvIGRldmluaXRfZXJyOwotCi0Jc3ByaW50ZihkZXYtPm10ZF9pbmZvLm5hbWUsICJibGttdGQ6ICVzIiwgZGV2bmFtZSk7Ci0JZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPSBjYWxjX2VyYXNlX3JlZ2lvbnMoZXJhc2Vfc2l6ZSwgZGV2LT5tdGRfaW5mby5zaXplLAotCQkJCQkJCSZkZXYtPm10ZF9pbmZvLm51bWVyYXNlcmVnaW9ucyk7Ci0JaWYoZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPT0gTlVMTCkKLQkJZ290byBkZXZpbml0X2VycjsKLQotCWRldi0+bXRkX2luZm8uZXJhc2VzaXplID0gZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMtPmVyYXNlc2l6ZTsKLQlERUJVRygxLCAiYmxrbXRkOiBpbml0OiBmb3VuZCAlZCBlcmFzZSByZWdpb25zXG4iLAotCSAgICAgIGRldi0+bXRkX2luZm8ubnVtZXJhc2VyZWdpb25zKTsKLQotCWlmKHJlYWRvbmx5KSB7Ci0JCWRldi0+bXRkX2luZm8udHlwZSA9IE1URF9ST007Ci0JCWRldi0+bXRkX2luZm8uZmxhZ3MgPSBNVERfQ0FQX1JPTTsKLQl9IGVsc2UgewotCQlkZXYtPm10ZF9pbmZvLnR5cGUgPSBNVERfUkFNOwotCQlkZXYtPm10ZF9pbmZvLmZsYWdzID0gTVREX0NBUF9SQU07Ci0JCWRldi0+bXRkX2luZm8uZXJhc2UgPSBibGttdGRfZXJhc2U7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGUgPSBibGttdGRfd3JpdGU7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGV2ID0gZGVmYXVsdF9tdGRfd3JpdGV2OwotCQlkZXYtPm10ZF9pbmZvLnN5bmMgPSBibGttdGRfc3luYzsKLQl9Ci0JZGV2LT5tdGRfaW5mby5yZWFkID0gYmxrbXRkX3JlYWQ7Ci0JZGV2LT5tdGRfaW5mby5yZWFkdiA9IGRlZmF1bHRfbXRkX3JlYWR2OwotCWRldi0+bXRkX2luZm8ucHJpdiA9IGRldjsKLQlkZXYtPm10ZF9pbmZvLm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlsaXN0X2FkZCgmZGV2LT5saXN0LCAmYmxrbXRkX2RldmljZV9saXN0KTsKLQlpZiAoYWRkX210ZF9kZXZpY2UoJmRldi0+bXRkX2luZm8pKSB7Ci0JCS8qIERldmljZSBkaWRudCBnZXQgYWRkZWQsIHNvIGZyZWUgdGhlIGVudHJ5ICovCi0JCWxpc3RfZGVsKCZkZXYtPmxpc3QpOwotCQlnb3RvIGRldmluaXRfZXJyOwotCX0gZWxzZSB7Ci0JCWluZm8oIm10ZCVkOiBbJXNdIGVyYXNlX3NpemUgPSAlZEtpQiAlcyIsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5pbmRleCwgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpLAotCQkgICAgIGRldi0+bXRkX2luZm8uZXJhc2VzaXplID4+IDEwLAotCQkgICAgIHJlYWRvbmx5ID8gIihyZWFkLW9ubHkpIiA6ICIiKTsKLQl9Ci0KLQlyZXR1cm4gZGV2OwotCi0gZGV2aW5pdF9lcnI6Ci0JZnJlZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKiBDbGVhbnVwIGFuZCBleGl0IC0gc3luYyB0aGUgZGV2aWNlIGFuZCBraWxsIG9mIHRoZSBrZXJuZWwgdGhyZWFkICovCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgY2xlYW51cF9ibGttdGQodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wMSwgKnRlbXAyOwotCi0JLyogUmVtb3ZlIHRoZSBNVEQgZGV2aWNlcyAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZSh0ZW1wMSwgdGVtcDIsICZibGttdGRfZGV2aWNlX2xpc3QpIHsKLQkJc3RydWN0IGJsa210ZF9kZXYgKmRldiA9IGxpc3RfZW50cnkodGVtcDEsIHN0cnVjdCBibGttdGRfZGV2LAotCQkJCQkJICAgIGxpc3QpOwotCQlibGttdGRfc3luYygmZGV2LT5tdGRfaW5mbyk7Ci0JCWRlbF9tdGRfZGV2aWNlKCZkZXYtPm10ZF9pbmZvKTsKLQkJaW5mbygibXRkJWQ6IFslc10gcmVtb3ZlZCIsIGRldi0+bXRkX2luZm8uaW5kZXgsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpKTsKLQkJbGlzdF9kZWwoJmRldi0+bGlzdCk7Ci0JCWZyZWVfZGV2aWNlKGRldik7Ci0JfQotfQotCi0jaWZuZGVmIE1PRFVMRQotCi0vKiBIYW5kbGUga2VybmVsIGJvb3QgcGFyYW1zICovCi0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2RldmljZShjaGFyICpzdHIpCi17Ci0JaW50IGk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBNQVhfREVWSUNFUzsgaSsrKSB7Ci0JCWRldmljZVtpXSA9IHN0cjsKLQkJREVCVUcoMiwgImJsa210ZDogZGV2aWNlIHNldHVwOiAlZCA9ICVzXG4iLCBpLCBkZXZpY2VbaV0pOwotCQlzdHJzZXAoJnN0ciwgIiwiKTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2VyYXNlc3ooY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCWVyYXNlc3pbaV0gPSBzaW1wbGVfc3RydG91bCh2YWwsIE5VTEwsIDApOwotCQlERUJVRygyLCAiYmxrbXRkOiBlcmFzZXN6IHNldHVwOiAlZCA9ICVkXG4iLCBpLCBlcmFzZXN6W2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfcm8oY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCXJvW2ldID0gc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKTsKLQkJREVCVUcoMiwgImJsa210ZDogcm8gc2V0dXA6ICVkID0gJWRcbiIsIGksIHJvW2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfc3luYyhjaGFyICpzdHIpCi17Ci0JaWYoc3RyWzBdID09ICcxJykKLQkJc3luYyA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImJsa210ZF9kZXZpY2U9IiwgcGFyYW1fYmxrbXRkX2RldmljZSk7Ci1fX3NldHVwKCJibGttdGRfZXJhc2Vzej0iLCBwYXJhbV9ibGttdGRfZXJhc2Vzeik7Ci1fX3NldHVwKCJibGttdGRfcm89IiwgcGFyYW1fYmxrbXRkX3JvKTsKLV9fc2V0dXAoImJsa210ZF9zeW5jPSIsIHBhcmFtX2Jsa210ZF9zeW5jKTsKLQotI2VuZGlmCi0KLQotLyogU3RhcnR1cCAqLwotc3RhdGljIGludCBfX2luaXQgaW5pdF9ibGttdGQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWluZm8oInZlcnNpb24gIiBWRVJTSU9OKTsKLQkvKiBDaGVjayBhcmdzIC0gZGV2aWNlWzBdIGlzIHRoZSBiYXJlIG1pbmltdW0qLwotCWlmKCFkZXZpY2VbMF0pIHsKLQkJZXJyKCJlcnJvcjogbWlzc2luZyBgZGV2aWNlJyBuYW1lXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yKGkgPSAwOyBpIDwgTUFYX0RFVklDRVM7IGkrKykKLQkJYWRkX2RldmljZShkZXZpY2VbaV0sIHJvW2ldLCBlcmFzZXN6W2ldIDw8IDEwKTsKLQotCWlmKGxpc3RfZW1wdHkoJmJsa210ZF9kZXZpY2VfbGlzdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfYmxrbXRkKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfYmxrbXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jaGVsc2lvL01ha2VmaWxlCmluZGV4IDkxZTkyNzguLjU0Yzc4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX0NIRUxTSU9fVDEpICs9IGN4Z2IubwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKFRPUERJUikvZHJpdmVycy9uZXQvY2hlbHNpbyAkKERFQlVHX0ZMQUdTKQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9uZXQvY2hlbHNpbyAkKERFQlVHX0ZMQUdTKQogCiAKIGN4Z2Itb2JqcyA6PSBjeGdiMi5vIGVzcGkubyBwbTMzOTMubyBzZ2UubyBzdWJyLm8gbXY4OHgyMDF4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwppbmRleCA2ZTJlYzU2Li42MDYyNDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRmlsZW5hbWU6ICAgICAgaXJkYS11c2IuYwotICogVmVyc2lvbjogICAgICAgMC45YgorICogVmVyc2lvbjogICAgICAgMC4xMAogICogRGVzY3JpcHRpb246ICAgSXJEQS1VU0IgRHJpdmVyCiAgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwgCiAgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnQGJyYXR0bGkubmV0PgpAQCAtOSw2ICs5LDkgQEAKICAqCUNvcHlyaWdodCAoQykgMjAwMCwgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSwgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIFNpZ21hVGVsLCBJbmMuIDxpcnF1YWxpdHlAc2lnbWF0ZWwuY29tPgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIE1pbGFuIEJlbm8gPGJlbm9AcG9ib3guc2s+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNiwgTmljayBGZWRjaGlrIDxuaWNrQGZlZGNoaWsub3JnLnVhPgogICogICAgICAgICAgCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTYxLDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgImlyZGEtdXNiLmgiCiAKQEAgLTc4LDggKzgyLDEyIEBACiAJeyBVU0JfREVWSUNFKDB4NTBmLCAweDE4MCksIC5kcml2ZXJfaW5mbyA9IElVQ19TUEVFRF9CVUcgfCBJVUNfTk9fV0lORE9XIH0sCiAJLyogRXh0ZW5kZWQgU3lzdGVtcywgSW5jLiwgIFhUTkRBY2Nlc3MgSXJEQSBVU0IgKEVTSS05Njg1KSAqLwogCXsgVVNCX0RFVklDRSgweDhlOSwgMHgxMDApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1BFRURfQlVHIHwgSVVDX05PX1dJTkRPVyB9LAorCS8qIFNpZ21hVGVsIFNUSVI0MjEwLzQyMjAvNDExNiBVU0IgSXJEQSAoVkZJUikgQnJpZGdlICovCisJeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMTApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUl80MjEwIHwgSVVDX1NQRUVEX0JVRyB9LAorCXsgVVNCX0RFVklDRSgweDY2ZiwgMHg0MjIwKSwgLmRyaXZlcl9pbmZvID0gSVVDX1NUSVJfNDIxMCB8IElVQ19TUEVFRF9CVUcgfSwKKwl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDExNiksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSXzQyMTAgfCBJVUNfU1BFRURfQlVHIH0sCiAJeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8Ci0JICAgICAgICAgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKIAkgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVBQX1NQRUMsCiAJICAuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX0NMQVNTX0lSREEsCiAJICAuZHJpdmVyX2luZm8gPSBJVUNfREVGQVVMVCwgfSwKQEAgLTk5LDYgKzEwNyw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQgaXJkYV91c2JfaW5pdF9xb3Moc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKSA7CiBzdGF0aWMgc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0YXRpYyB2b2lkIGlyZGFfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogc3RhdGljIHZvaWQgaXJkYV91c2JfY2hhbmdlX3NwZWVkX3hib2ZzKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZik7CkBAIC0xNDEsNyArMTUwLDI0IEBACiAJCQkJICBfX3U4ICpoZWFkZXIsCiAJCQkJICBpbnQJZm9yY2UpCiB7Ci0JLyogU2V0IHRoZSBuZWdvdGlhdGVkIGxpbmsgc3BlZWQgKi8KKwkvKiBIZXJlIHdlIGNoZWNrIGlmIHdlIGhhdmUgYW4gU1RJUjQyMXggY2hpcCwKKwkgKiBhbmQgaWYgZWl0aGVyIHNwZWVkIG9yIHhib2ZzIChvciBib3RoKSBuZWVkcworCSAqIHRvIGJlIGNoYW5nZWQuCisJICovCisJaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICYmCisJICAgICgoc2VsZi0+bmV3X3NwZWVkICE9IC0xKSB8fCAoc2VsZi0+bmV3X3hib2ZzICE9IC0xKSkpIHsKKworCQkvKiBXaXRoIFNUSVI0MjF4LCBzcGVlZCBhbmQgeEJPRnMgbXVzdCBiZSBzZXQgYXQgdGhlIHNhbWUKKwkJICogdGltZSwgZXZlbiBpZiBvbmx5IG9uZSBvZiB0aGVtIGNoYW5nZXMuCisJCSAqLworCQlpZiAoc2VsZi0+bmV3X3NwZWVkID09IC0xKQorCQkJc2VsZi0+bmV3X3NwZWVkID0gc2VsZi0+c3BlZWQgOworCisJCWlmIChzZWxmLT5uZXdfeGJvZnMgPT0gLTEpCisJCQlzZWxmLT5uZXdfeGJvZnMgPSBzZWxmLT54Ym9mcyA7CisJfQorCisJLyogU2V0IHRoZSBsaW5rIHNwZWVkICovCiAJaWYgKHNlbGYtPm5ld19zcGVlZCAhPSAtMSkgewogCQkvKiBIdW0uLi4gVWdseSBoYWNrIDotKAogCQkgKiBTb21lIGRldmljZSBhcmUgbm90IGNvbXBsaWFudCB3aXRoIHRoZSBzcGVjIGFuZCBjaGFuZ2UKQEAgLTE5MSw3ICsyMTcsMTEgQEAKIAkJICAgICAgICAqaGVhZGVyID0gU1BFRURfNDAwMDAwMDsKIAkJCXNlbGYtPm5ld194Ym9mcyA9IDA7CiAJCQlicmVhazsKLQkJfQorCQljYXNlIDE2MDAwMDAwOgorCQkJKmhlYWRlciA9IFNQRUVEXzE2MDAwMDAwOworICAJCQlzZWxmLT5uZXdfeGJvZnMgPSAwOworICAJCQlicmVhazsKKyAgCQl9CiAJfSBlbHNlCiAJCS8qIE5vIGNoYW5nZSAqLwogCQkqaGVhZGVyID0gMDsKQEAgLTIzNSw2ICsyNjUsMzIgQEAKIAl9CiB9CiAKKy8qCisqICAgY2FsY3VsYXRlIHR1cm5hcm91bmQgdGltZSBmb3IgU2lnbWFUZWwgaGVhZGVyCisqLworc3RhdGljIF9fdTggZ2V0X3R1cm5hcm91bmRfdGltZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCB0dXJuYXJvdW5kX3RpbWUgPSBpcmRhX2dldF9tdHQoc2tiKTsKKworCWlmICggdHVybmFyb3VuZF90aW1lID09IDAgKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDEwICkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoIHR1cm5hcm91bmRfdGltZSA8PSA1MCApCisJCXJldHVybiAyOworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gMTAwICkKKwkJcmV0dXJuIDM7CisJZWxzZSBpZiAoIHR1cm5hcm91bmRfdGltZSA8PSA1MDAgKQorCQlyZXR1cm4gNDsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDEwMDAgKQorCQlyZXR1cm4gNTsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDUwMDAgKQorCQlyZXR1cm4gNjsKKwllbHNlCisJCXJldHVybiA3OworfQorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBTZW5kIGEgY29tbWFuZCB0byBjaGFuZ2UgdGhlIHNwZWVkIG9mIHRoZSBkb25nbGUKQEAgLTI2MiwxMiArMzE4LDE4IEBACiAJLyogU2V0IHRoZSBuZXcgc3BlZWQgYW5kIHhib2ZzIGluIHRoaXMgZmFrZSBmcmFtZSAqLwogCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBmcmFtZSwgMSk7CiAKKwlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkgeworCQlpZiAoZnJhbWVbMF0gPT0gMCkgcmV0dXJuIDsgLy8gZG8gbm90aGluZyBpZiBubyBjaGFuZ2UKKwkJZnJhbWVbMV0gPSAwOyAvLyBvdGhlciBwYXJhbWV0ZXJzIGRvbid0IGNoYW5nZSBoZXJlCisJCWZyYW1lWzJdID0gMDsKKwl9CisKIAkvKiBTdWJtaXQgdGhlIDAgbGVuZ3RoIElyREEgZnJhbWUgdG8gdHJpZ2dlciBuZXcgc3BlZWQgc2V0dGluZ3MgKi8KICAgICAgICAgdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZWxmLT51c2JkZXYsCiAJCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZWxmLT51c2JkZXYsIHNlbGYtPmJ1bGtfb3V0X2VwKSwKICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSwgSVJEQV9VU0JfU1BFRURfTVRVLAogICAgICAgICAgICAgICAgICAgICAgIHNwZWVkX2J1bGtfY2FsbGJhY2ssIHNlbGYpOwotCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFVTQl9JUkRBX0hFQURFUjsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzZWxmLT5oZWFkZXJfbGVuZ3RoOwogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSAwOwogCiAJLyogSXJxIGRpc2FibGVkIC0+IEdGUF9BVE9NSUMgKi8KQEAgLTM4MywxNiArNDQ1LDM1IEBACiAJICogYWxsb2NhdGlvbiB3aWxsIGJlIGRvbmUgbG93ZXIgaW4gc2tiX3B1c2goKS4KIAkgKiBBbHNvLCB3ZSBkb24ndCB1c2UgZGlyZWN0bHkgc2tiX2NvdygpLCBiZWNhdXNlIGl0IHJlcXVpcmUKIAkgKiBoZWFkcm9vbSA+PSAxNiwgd2hpY2ggZm9yY2UgdW5uZWNlc3NhcnkgY29waWVzIC0gSmVhbiBJSSAqLwotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IFVTQl9JUkRBX0hFQURFUikgeworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNlbGYtPmhlYWRlcl9sZW5ndGgpIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgSW5zdWZpY2llbnQgc2tiIGhlYWRyb29tLlxuIiwgX19GVU5DVElPTl9fKTsKLQkJaWYgKHNrYl9jb3coc2tiLCBVU0JfSVJEQV9IRUFERVIpKSB7CisJCWlmIChza2JfY293KHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCkpIHsKIAkJCUlSREFfV0FSTklORygiJXMoKSwgZmFpbGVkIHNrYl9jb3coKSAhISFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIAl9CiAKIAkvKiBDaGFuZ2Ugc2V0dGluZyBmb3IgbmV4dCBmcmFtZSAqLwotCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBza2JfcHVzaChza2IsIFVTQl9JUkRBX0hFQURFUiksIDApOworCisJaWYgKCBzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCApIHsKKwkJX191OCB0dXJuYXJvdW5kX3RpbWU7CisJCV9fdTgqIGZyYW1lOworCQl0dXJuYXJvdW5kX3RpbWUgPSBnZXRfdHVybmFyb3VuZF90aW1lKCBza2IgKTsKKwkJZnJhbWU9IHNrYl9wdXNoKHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCk7CisJCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBmcmFtZSwgMCk7CisJCWZyYW1lWzJdID0gdHVybmFyb3VuZF90aW1lOworCQlpZiAoKHNrYi0+bGVuICE9IDApICYmCisJCSAgICAoKHNrYi0+bGVuICUgMTI4KSA9PSAwKSAmJgorCQkgICAgKChza2ItPmxlbiAlIDUxMikgIT0gMCkpIHsKKwkJCS8qIGFkZCBleHRyYSBieXRlIGZvciBzcGVjaWFsIFNpZ21hVGVsIGZlYXR1cmUgKi8KKwkJCWZyYW1lWzFdID0gMTsKKwkJCXNrYl9wdXQoc2tiLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWZyYW1lWzFdID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBza2JfcHVzaChza2IsIHNlbGYtPmhlYWRlcl9sZW5ndGgpLCAwKTsKKwl9CiAKIAkvKiBGSVhNRTogTWFrZSBtYWNybyBvdXQgb2YgdGhpcyBvbmUgKi8KIAkoKHN0cnVjdCBpcmRhX3NrYl9jYiAqKXNrYi0+Y2IpLT5jb250ZXh0ID0gc2VsZjsKQEAgLTc5NSw3ICs4NzYsNyBAQAogCX0KIAkKIAkvKiBDaGVjayBmb3IgZW1wdHkgZnJhbWVzICovCi0JaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8PSBVU0JfSVJEQV9IRUFERVIpIHsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IHNlbGYtPmhlYWRlcl9sZW5ndGgpIHsKIAkJSVJEQV9XQVJOSU5HKCIlcygpLCBlbXB0eSBmcmFtZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC04MTYsNyArODk3LDExIEBACiAJZG9jb3B5ID0gKHVyYi0+YWN0dWFsX2xlbmd0aCA8IElSREFfUlhfQ09QWV9USFJFU0hPTEQpOwogCiAJLyogQWxsb2NhdGUgYSBuZXcgc2tiICovCi0JbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVKTsKKwlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkKKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVICsgVVNCX0lSREFfU0lHTUFURUxfSEVBREVSKTsKKwllbHNlCisJCW5ld3NrYiA9IGRldl9hbGxvY19za2IoZG9jb3B5ID8gdXJiLT5hY3R1YWxfbGVuZ3RoIDogSVJEQV9TS0JfTUFYX01UVSk7CisKIAlpZiAoIW5ld3NrYikgIHsKIAkJc2VsZi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkvKiBXZSBjb3VsZCBkZWxpdmVyIHRoZSBjdXJyZW50IHNrYiwgYnV0IHRoaXMgd291bGQgc3RhbGwKQEAgLTg0NSw3ICs5MzAsNyBAQAogCiAJLyogU2V0IHByb3BlciBsZW5ndGggb24gc2tiICYgcmVtb3ZlIFVTQi1JckRBIGhlYWRlciAqLwogCXNrYl9wdXQoZGF0YXNrYiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQlza2JfcHVsbChkYXRhc2tiLCBVU0JfSVJEQV9IRUFERVIpOworCXNrYl9wdWxsKGRhdGFza2IsIHNlbGYtPmhlYWRlcl9sZW5ndGgpOwogCiAJLyogQXNrIHRoZSBuZXR3b3JraW5nIGxheWVyIHRvIHF1ZXVlIHRoZSBwYWNrZXQgZm9yIHRoZSBJckRBIHN0YWNrICovCiAJZGF0YXNrYi0+ZGV2ID0gc2VsZi0+bmV0ZGV2OwpAQCAtOTM3LDYgKzEwMjIsMTkxIEBACiAJcmV0dXJuIDA7IC8qIEZvciBub3cgKi8KIH0KIAorCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIgICAgICAgIlByb2R1Y3QgVmVyc2lvbjogIgorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9DT01QT05FTlRfVkVSU0lPTl9TVFIgICAgICJDb21wb25lbnQgVmVyc2lvbjogIgorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9EQVRBX1RBR19TVFIgICAgICAgICAgICAgICJTVE1QIgorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9GSUxFX1ZFUlNJT05fTUFYX09GRlNFVCAgIDUxMiAgICAgLyogdmVyc2lvbiBpbmZvIGlzIGJlZm9yZSBoZXJlICovCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVCAgICAgNTEyICAgICAvKiBwYXRjaCBpbWFnZSBzdGFydHMgYmVmb3JlIGhlcmUgKi8KKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfRklMRV9FTkRfT0ZfSEVBREVSX1RBRyAgICAweDFBICAgIC8qIG1hcmtzIGVuZCBvZiBwYXRjaCBmaWxlIGhlYWRlciAoUEMgRE9TIHRleHQgZmlsZSBFT0YgY2hhcmFjdGVyKSAqLworCisvKgorICogS25vd24gZmlybXdhcmUgcGF0Y2hlcyBmb3IgU1RJUjQyMXggZG9uZ2xlcworICovCitzdGF0aWMgY2hhciAqIHN0aXI0MjF4X3BhdGNoZXNbXSA9IHsKKwkiNDIxMDEwMDEuc2IiLAorCSI0MjEwMTAwMi5zYiIsCit9OworCitzdGF0aWMgaW50IHN0aXI0MjF4X2dldF9wYXRjaF92ZXJzaW9uKHVuc2lnbmVkIGNoYXIgKiBwYXRjaCwgY29uc3QgdW5zaWduZWQgbG9uZyBwYXRjaF9sZW4pCit7CisJdW5zaWduZWQgaW50IHZlcnNpb25fb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgdmVyc2lvbl9tYWpvciwgdmVyc2lvbl9taW5vciwgdmVyc2lvbl9idWlsZDsKKwl1bnNpZ25lZCBjaGFyICogdmVyc2lvbl9zdGFydDsKKwlpbnQgdmVyc2lvbl9mb3VuZCA9IDA7CisKKwlmb3IgKHZlcnNpb25fb2Zmc2V0ID0gMDsKKwkgICAgIHZlcnNpb25fb2Zmc2V0IDwgU1RJUjQyMVhfUEFUQ0hfRklMRV9FTkRfT0ZfSEVBREVSX1RBRzsKKwkgICAgIHZlcnNpb25fb2Zmc2V0KyspIHsKKwkJaWYgKCFtZW1jbXAocGF0Y2ggKyB2ZXJzaW9uX29mZnNldCwKKwkJCSAgICBTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUlNJT05fU1RSLAorCQkJICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUlNJT05fU1RSKSAtIDEpKSB7CisJCQkJICAgIHZlcnNpb25fZm91bmQgPSAxOworCQkJCSAgICB2ZXJzaW9uX3N0YXJ0ID0gcGF0Y2ggKworCQkJCQkgICAgdmVyc2lvbl9vZmZzZXQgKworCQkJCQkgICAgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIpIC0gMTsKKwkJCQkgICAgYnJlYWs7CisJCX0KKwl9CisKKwkvKiBXZSBjb3VsZG4ndCBmaW5kIGEgcHJvZHVjdCB2ZXJzaW9uIG9uIHRoaXMgcGF0Y2ggKi8KKwlpZiAoIXZlcnNpb25fZm91bmQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTGV0J3MgY2hlY2sgaWYgdGhlIHByb2R1Y3QgdmVyc2lvbiBpcyBkb3R0ZWQgKi8KKwlpZiAodmVyc2lvbl9zdGFydFszXSAhPSAnLicgfHwKKwkgICAgdmVyc2lvbl9zdGFydFs3XSAhPSAnLicpCisJCXJldHVybiAtRUlOVkFMOworCisJdmVyc2lvbl9tYWpvciA9IHNpbXBsZV9zdHJ0b3VsKHZlcnNpb25fc3RhcnQsIE5VTEwsIDEwKTsKKwl2ZXJzaW9uX21pbm9yID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCArIDQsIE5VTEwsIDEwKTsKKwl2ZXJzaW9uX2J1aWxkID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCArIDgsIE5VTEwsIDEwKTsKKworCUlSREFfREVCVUcoMiwgIiVzKCksIE1ham9yOiAlbGQgTWlub3I6ICVsZCBCdWlsZDogJWxkXG4iLAorCQkgICBfX0ZVTkNUSU9OX18sCisJCSAgIHZlcnNpb25fbWFqb3IsIHZlcnNpb25fbWlub3IsIHZlcnNpb25fYnVpbGQpOworCisJcmV0dXJuICgoKHZlcnNpb25fbWFqb3IpIDw8IDEyKSArCisJCSgodmVyc2lvbl9taW5vcikgPDwgOCkgKworCQkoKHZlcnNpb25fYnVpbGQgLyAxMCkgPDwgNCkgKworCQkodmVyc2lvbl9idWlsZCAlIDEwKSk7CisKK30KKworCitzdGF0aWMgaW50IHN0aXI0MjF4X3VwbG9hZF9wYXRjaCAoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmLAorCQkJCSAgdW5zaWduZWQgY2hhciAqIHBhdGNoLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IHBhdGNoX2xlbikKK3sKKyAgICBpbnQgcmV0dmFsID0gMDsKKyAgICBpbnQgYWN0dWFsX2xlbjsKKyAgICB1bnNpZ25lZCBpbnQgaSA9IDAsIGRvd25sb2FkX2Ftb3VudCA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqIHBhdGNoX2NodW5rOworCisgICAgSVJEQV9ERUJVRyAoMiwgIiVzKCksIFVwbG9hZGluZyBTVElSNDIxeCBQYXRjaFxuIiwgX19GVU5DVElPTl9fKTsKKworICAgIHBhdGNoX2NodW5rID0ga3phbGxvYyhTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRSwgR0ZQX0tFUk5FTCk7CisgICAgaWYgKHBhdGNoX2NodW5rID09IE5VTEwpCisJICAgIHJldHVybiAtRU5PTUVNOworCisgICAgLyogYnJlYWsgdXAgcGF0Y2ggaW50byAxMDIzLWJ5dGUgc2VjdGlvbnMgKi8KKyAgICBmb3IgKGkgPSAwOyByZXR2YWwgPj0gMCAmJiBpIDwgcGF0Y2hfbGVuOyBpICs9IGRvd25sb2FkX2Ftb3VudCkgeworCSAgICBkb3dubG9hZF9hbW91bnQgPSBwYXRjaF9sZW4gLSBpOworCSAgICBpZiAoZG93bmxvYWRfYW1vdW50ID4gU1RJUjQyMVhfTUFYX1BBVENIX0RPV05MT0FEX1NJWkUpCisJCSAgICBkb3dubG9hZF9hbW91bnQgPSBTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRTsKKworCSAgICAvKiBkb3dubG9hZCB0aGUgcGF0Y2ggc2VjdGlvbiAqLworCSAgICBtZW1jcHkocGF0Y2hfY2h1bmssIHBhdGNoICsgaSwgZG93bmxvYWRfYW1vdW50KTsKKworCSAgICByZXR2YWwgPSB1c2JfYnVsa19tc2cgKHNlbGYtPnVzYmRldiwKKwkJCQkgICB1c2Jfc25kYnVsa3BpcGUgKHNlbGYtPnVzYmRldiwKKwkJCQkJCSAgICBzZWxmLT5idWxrX291dF9lcCksCisJCQkJICAgcGF0Y2hfY2h1bmssIGRvd25sb2FkX2Ftb3VudCwKKwkJCQkgICAmYWN0dWFsX2xlbiwgbXNlY3NfdG9famlmZmllcyAoNTAwKSk7CisJICAgIElSREFfREVCVUcgKDIsICIlcygpLCBTZW50ICV1IGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlhY3R1YWxfbGVuKTsKKwkgICAgaWYgKHJldHZhbCA9PSAwKQorCQkgICAgbWRlbGF5KDEwKTsKKyAgICB9CisKKyAgICBrZnJlZShwYXRjaF9jaHVuayk7CisKKyAgICBpZiAoaSAhPSBwYXRjaF9sZW4pIHsKKwkgICAgSVJEQV9FUlJPUiAoIiVzKCksIFB1c2hlZCAlZCBieXRlcyAoIT0gcGF0Y2hfbGVuICglZCkpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBpLCBwYXRjaF9sZW4pOworCSAgICByZXR2YWwgPSAtRUlPOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPCAwKQorCSAgICAvKiB0b2RvIC0gbWFyayBkZXZpY2UgYXMgbm90IHJlYWR5ICovCisJICAgIElSREFfRVJST1IgKCIlcygpLCBTVElSNDIxeCBwYXRjaCB1cGxvYWQgZmFpbGVkICglZClcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgc3RpcjQyMXhfcGF0Y2hfZGV2aWNlKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgcGF0Y2hfZm91bmQgPSAwLCBkYXRhX2ZvdW5kID0gMCwgZGF0YV9vZmZzZXQ7CisJaW50IHBhdGNoX3ZlcnNpb24sIHJldCA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0aXI0MjF4X3BhdGNoZXMpOyBpKyspIHsKKwkJaWYocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHN0aXI0MjF4X3BhdGNoZXNbaV0sICZzZWxmLT51c2JkZXYtPmRldikgIT0gMCkgeworCQkJSVJEQV9FUlJPUiggIiVzKCksIFBhdGNoICVzIGlzIG5vdCBhdmFpbGFibGVcbiIsIF9fRlVOQ1RJT05fXywgc3RpcjQyMXhfcGF0Y2hlc1tpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisgICAgICAgICAgICAgICAgLyogV2UgZm91bmQgYSBwYXRjaCBmcm9tIHVzZXJzcGFjZSAqLworCQlwYXRjaF92ZXJzaW9uID0gc3RpcjQyMXhfZ2V0X3BhdGNoX3ZlcnNpb24gKGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisKKwkJaWYgKHBhdGNoX3ZlcnNpb24gPCAwKSB7CisJCQkvKiBDb3VsZG4ndCBmZXRjaCBhIHZlcnNpb24sIGxldCdzIG1vdmUgb24gdG8gdGhlIG5leHQgZmlsZSAqLworCQkJSVJEQV9FUlJPUigiJXMoKSwgdmVyc2lvbiBwYXJzaW5nIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldCA9IHBhdGNoX3ZlcnNpb247CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBhdGNoX3ZlcnNpb24gIT0gc2VsZi0+dXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgeworCQkJLyogUGF0Y2ggdmVyc2lvbiBhbmQgZGV2aWNlIGRvbid0IG1hdGNoICovCisJCQlJUkRBX0VSUk9SICgiJXMoKSwgd3JvbmcgcGF0Y2ggdmVyc2lvbiAoJWQgPC0+ICVkKVxuIiwKKwkJCQkgICAgX19GVU5DVElPTl9fLAorCQkJCSAgICBwYXRjaF92ZXJzaW9uLCBzZWxmLT51c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSWYgd2UncmUgaGVyZSwgd2UndmUgZm91bmQgYSBjb3JyZWN0IHBhdGNoICovCisJCXBhdGNoX2ZvdW5kID0gMTsKKwkJYnJlYWs7CisKKwl9CisKKwkvKiBXZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgZmlybXdhcmUsIGxldCdzIGxlYXZlICovCisJaWYgKCFwYXRjaF9mb3VuZCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFRoZSBhY3R1YWwgaW1hZ2Ugc3RhcnRzIGFmdGVyIHRoZSAiU1RNUCIga2V5d29yZCAqLworCWZvciAoZGF0YV9vZmZzZXQgPSAwOyBkYXRhX29mZnNldCA8IFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVDsgZGF0YV9vZmZzZXQrKykgeworCQlpZiAoIW1lbWNtcChmd19lbnRyeS0+ZGF0YSArIGRhdGFfb2Zmc2V0LAorCQkJICAgIFNUSVI0MjFYX1BBVENIX0RBVEFfVEFHX1NUUiwKKwkJCSAgICBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUKSkpIHsKKwkJCUlSREFfREVCVUcoMiwgIiVzKCksIGZvdW5kIHBhdGNoIGRhdGEgZm9yIFNUSVI0MjF4IGF0IG9mZnNldCAlZFxuIiwKKwkJCQkgICBfX0ZVTkNUSU9OX18sIGRhdGFfb2Zmc2V0KTsKKwkJCWRhdGFfZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBXZSBjb3VsZG4ndCBmaW5kICJTVE1QIiBmcm9tIHRoZSBoZWFkZXIgKi8KKwlpZiAoIWRhdGFfZm91bmQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTGV0J3MgdXBsb2FkIHRoZSBwYXRjaCB0byB0aGUgdGFyZ2V0ICovCisJcmV0ID0gc3RpcjQyMXhfdXBsb2FkX3BhdGNoKHNlbGYsCisJCQkJICAgICZmd19lbnRyeS0+ZGF0YVtkYXRhX29mZnNldCArIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpXSwKKwkJCQkgICAgZndfZW50cnktPnNpemUgLSAoZGF0YV9vZmZzZXQgKyBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUKSkpOworCisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisKKwlyZXR1cm4gcmV0OworCit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKiogSVJEQSBERVZJQ0UgQ0FMTEJBQ0tTICoqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogTWFpbiBjYWxscyBmcm9tIHRoZSBJckRBL05ldHdvcmsgc3Vic3lzdGVtLgpAQCAtOTcyLDYgKzEyNDIsMTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmKHNlbGYtPm5lZWRzcGF0Y2gpIHsKKwkJSVJEQV9XQVJOSU5HKCIlcygpLCBkZXZpY2UgbmVlZHMgcGF0Y2hcbiIsIF9fRlVOQ1RJT05fXykgOworCQlyZXR1cm4gLUVJTyA7CisJfQorCiAJLyogSW5pdGlhbGlzZSBkZWZhdWx0IHNwZWVkIGFuZCB4Ym9mcyB2YWx1ZQogCSAqIChJckxBUCB3aWxsIGNoYW5nZSB0aGF0IHNvb24pICovCiAJc2VsZi0+c3BlZWQgPSAtMTsKQEAgLTEwNTAsNyArMTMyNSw3IEBACiAJZGVsX3RpbWVyKCZzZWxmLT5yeF9kZWZlcl90aW1lcik7CiAKIAkvKiBEZWFsbG9jYXRlIGFsbCB0aGUgUnggcGF0aCBidWZmZXJzIChVUkJzIGFuZCBza2IpICovCi0JZm9yIChpID0gMDsgaSA8IElVX01BWF9SWF9VUkJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKSB7CiAJCXN0cnVjdCB1cmIgKnVyYiA9IHNlbGYtPnJ4X3VyYltpXTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7CiAJCS8qIENhbmNlbCB0aGUgcmVjZWl2ZSBjb21tYW5kICovCkBAIC0xNDI2LDggKzE3MDEsMjIgQEAKIAlzcGluX2xvY2tfaW5pdCgmc2VsZi0+bG9jayk7CiAJaW5pdF90aW1lcigmc2VsZi0+cnhfZGVmZXJfdGltZXIpOwogCisJc2VsZi0+Y2FwYWJpbGl0eSA9IGlkLT5kcml2ZXJfaW5mbzsKKwlzZWxmLT5uZWVkc3BhdGNoID0gKChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCkgIT0gMCkgOworCiAJLyogQ3JlYXRlIGFsbCBvZiB0aGUgbmVlZGVkIHVyYnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykgeworCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCkgeworCQlzZWxmLT5tYXhfcnhfdXJiID0gSVVfU0lHTUFURUxfTUFYX1JYX1VSQlM7CisJCXNlbGYtPmhlYWRlcl9sZW5ndGggPSBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVI7CisJfSBlbHNlIHsKKwkJc2VsZi0+bWF4X3J4X3VyYiA9IElVX01BWF9SWF9VUkJTOworCQlzZWxmLT5oZWFkZXJfbGVuZ3RoID0gVVNCX0lSREFfSEVBREVSOworCX0KKworCXNlbGYtPnJ4X3VyYiA9IGt6YWxsb2Moc2VsZi0+bWF4X3J4X3VyYiAqIHNpemVvZihzdHJ1Y3QgdXJiICopLAorCQkJCUdGUF9LRVJORUwpOworCisJZm9yIChpID0gMDsgaSA8IHNlbGYtPm1heF9yeF91cmI7IGkrKykgewogCQlzZWxmLT5yeF91cmJbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNlbGYtPnJ4X3VyYltpXSkgewogCQkJZ290byBlcnJfb3V0XzE7CkBAIC0xNDc5LDE3ICsxNzY4LDI4IEBACiAJCWdvdG8gZXJyX291dF8zOwogCX0KIAorCXNlbGYtPnVzYmRldiA9IGRldjsKKwogCS8qIEZpbmQgSXJEQSBjbGFzcyBkZXNjcmlwdG9yICovCiAJaXJkYV9kZXNjID0gaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKGludGYpOwogCXJldCA9IC1FTk9ERVY7CiAJaWYgKGlyZGFfZGVzYyA9PSBOVUxMKQogCQlnb3RvIGVycl9vdXRfMzsKIAorCWlmIChzZWxmLT5uZWVkc3BhdGNoKSB7CisJCXJldCA9IHVzYl9jb250cm9sX21zZyAoc2VsZi0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUgKHNlbGYtPnVzYmRldiwgMCksCisJCQkJICAgICAgIDB4MDIsIDB4NDAsIDAsIDAsIDAsIDAsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlJUkRBX0RFQlVHICgwLCAidXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyX291dF8zOworCQl9IGVsc2UgeworCQkJbWRlbGF5KDEwKTsKKwkJfQorCX0KKwogCXNlbGYtPmlyZGFfZGVzYyA9ICBpcmRhX2Rlc2M7CiAJc2VsZi0+cHJlc2VudCA9IDE7CiAJc2VsZi0+bmV0b3BlbiA9IDA7Ci0Jc2VsZi0+Y2FwYWJpbGl0eSA9IGlkLT5kcml2ZXJfaW5mbzsKLQlzZWxmLT51c2JkZXYgPSBkZXY7CiAJc2VsZi0+dXNiaW50ZiA9IGludGY7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyIGZvciBzcGVlZCBjaGFuZ2VzICovCkBAIC0xNTA4LDYgKzE4MDgsMjggQEAKIAogCUlSREFfTUVTU0FHRSgiSXJEQTogUmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsIG5ldC0+bmFtZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzZWxmKTsKKworCWlmIChzZWxmLT5uZWVkc3BhdGNoKSB7CisJCS8qIE5vdyB3ZSBmZXRjaCBhbmQgdXBsb2FkIHRoZSBmaXJtd2FyZSBwYXRjaCAqLworCQlyZXQgPSBzdGlyNDIxeF9wYXRjaF9kZXZpY2Uoc2VsZik7CisJCXNlbGYtPm5lZWRzcGF0Y2ggPSAocmV0IDwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoInBhdGNoX2RldmljZSBmYWlsZWRcbiIpOworCQkJZ290byBlcnJfb3V0XzQ7CisJCX0KKworCQkvKiByZXBsYWNlIElyREEgY2xhc3MgZGVzY3JpcHRvciB3aXRoIHdoYXQgcGF0Y2hlZCBkZXZpY2UgaXMgbm93IHJlcG9ydGluZyAqLworCQlpcmRhX2Rlc2MgPSBpcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2MgKHNlbGYtPnVzYmludGYpOworCQlpZiAoaXJkYV9kZXNjID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9vdXRfNDsKKwkJfQorCQlpZiAoc2VsZi0+aXJkYV9kZXNjKQorCQkJa2ZyZWUgKHNlbGYtPmlyZGFfZGVzYyk7CisJCXNlbGYtPmlyZGFfZGVzYyA9IGlyZGFfZGVzYzsKKwkJaXJkYV91c2JfaW5pdF9xb3Moc2VsZik7CisJfQorCiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfNDoKQEAgLTE1MTgsNyArMTg0MCw3IEBACiBlcnJfb3V0XzI6CiAJdXNiX2ZyZWVfdXJiKHNlbGYtPnR4X3VyYik7CiBlcnJfb3V0XzE6Ci0JZm9yIChpID0gMDsgaSA8IElVX01BWF9SWF9VUkJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKSB7CiAJCWlmIChzZWxmLT5yeF91cmJbaV0pCiAJCQl1c2JfZnJlZV91cmIoc2VsZi0+cnhfdXJiW2ldKTsKIAl9CkBAIC0xNTcxLDcgKzE4OTMsNyBAQAogCQkvKm5ldGlmX2RldmljZV9kZXRhY2goc2VsZi0+bmV0ZGV2KTsqLwogCQluZXRpZl9zdG9wX3F1ZXVlKHNlbGYtPm5ldGRldik7CiAJCS8qIFN0b3AgYWxsIHRoZSByZWNlaXZlIFVSQnMuIE11c3QgYmUgc3luY2hyb25vdXMuICovCi0JCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKQogCQkJdXNiX2tpbGxfdXJiKHNlbGYtPnJ4X3VyYltpXSk7CiAJCS8qIENhbmNlbCBUeCBhbmQgc3BlZWQgVVJCLgogCQkgKiBNYWtlIHN1cmUgaXQncyBzeW5jaHJvbm91cyB0byBhdm9pZCByYWNlcy4gKi8KQEAgLTE1ODYsOCArMTkwOCw5IEBACiAJc2VsZi0+dXNiaW50ZiA9IE5VTEw7CiAKIAkvKiBDbGVhbiB1cCBvdXIgdXJicyAqLwotCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBzZWxmLT5tYXhfcnhfdXJiOyBpKyspCiAJCXVzYl9mcmVlX3VyYihzZWxmLT5yeF91cmJbaV0pOworCWtmcmVlKHNlbGYtPnJ4X3VyYik7CiAJLyogQ2xlYW4gdXAgVHggYW5kIHNwZWVkIFVSQiAqLwogCXVzYl9mcmVlX3VyYihzZWxmLT50eF91cmIpOwogCXVzYl9mcmVlX3VyYihzZWxmLT5zcGVlZF91cmIpOwpAQCAtMTY0OCw2ICsxOTcxLDYgQEAKICAqLwogbW9kdWxlX3BhcmFtKHFvc19tdHRfYml0cywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocW9zX210dF9iaXRzLCAiTWluaW11bSBUdXJuIFRpbWUiKTsKLU1PRFVMRV9BVVRIT1IoIlJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4sIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+IGFuZCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIklyREEtVVNCIERvbmdsZSBEcml2ZXIiKTsgCitNT0RVTEVfQVVUSE9SKCJSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+LCBEYWcgQnJhdHRsaSA8ZGFnQGJyYXR0bGkubmV0PiwgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPiBhbmQgTmljayBGZWRjaGlrIDxuaWNrQGZlZGNoaWsub3JnLnVhPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJckRBLVVTQiBEb25nbGUgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmggYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKaW5kZXggNDAyNmFmNC4uZDgzM2RiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZpbGVuYW1lOiAgICAgIGlyZGEtdXNiLmgKLSAqIFZlcnNpb246ICAgICAgIDAuOWIKKyAqIFZlcnNpb246ICAgICAgIDAuMTAKICAqIERlc2NyaXB0aW9uOiAgIElyREEtVVNCIERyaXZlcgogICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsIAogICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4KQEAgLTksNiArOSw5IEBACiAgKglDb3B5cmlnaHQgKEMpIDIwMDEsIFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KICAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAwLCBEYWcgQnJhdHRsaSA8ZGFnQGJyYXR0bGkubmV0PgogICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCBTaWdtYVRlbCwgSW5jLiA8aXJxdWFsaXR5QHNpZ21hdGVsLmNvbT4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDA1LCBNaWxhbiBCZW5vIDxiZW5vQHBvYm94LnNrPgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIE5pY2sgRkVkY2hpayA8bmlja0BmZWRjaGlrLm9yZy51YT4KICAqICAgICAgICAgIAogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMSw2ICszNCw5IEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGFfZGV2aWNlLmg+ICAgICAgLyogc3RydWN0IGlybGFwX2NiICovCiAKKyNkZWZpbmUgUEFUQ0hfRklMRV9TSVpFX01BWCAgICAgNjU1MzYKKyNkZWZpbmUgUEFUQ0hfRklMRV9TSVpFX01JTiAgICAgODAKKwogI2RlZmluZSBSWF9DT1BZX1RIUkVTSE9MRCAyMDAKICNkZWZpbmUgSVJEQV9VU0JfTUFYX01UVSAyMDUxCiAjZGVmaW5lIElSREFfVVNCX1NQRUVEX01UVSA2NAkJLyogV2VpcmQsIGJ1dCB3b3JrIGxpa2UgdGhpcyAqLwpAQCAtNzksMTUgKzg1LDE2IEBACiAvKiBJbmJvdW5kIGhlYWRlciAqLwogI2RlZmluZSBNRURJQV9CVVNZICAgIDB4ODAKIAotI2RlZmluZSBTUEVFRF8yNDAwICAgIDB4MDEKLSNkZWZpbmUgU1BFRURfOTYwMCAgICAweDAyCi0jZGVmaW5lIFNQRUVEXzE5MjAwICAgMHgwMwotI2RlZmluZSBTUEVFRF8zODQwMCAgIDB4MDQKLSNkZWZpbmUgU1BFRURfNTc2MDAgICAweDA1Ci0jZGVmaW5lIFNQRUVEXzExNTIwMCAgMHgwNgotI2RlZmluZSBTUEVFRF81NzYwMDAgIDB4MDcKLSNkZWZpbmUgU1BFRURfMTE1MjAwMCAweDA4Ci0jZGVmaW5lIFNQRUVEXzQwMDAwMDAgMHgwOQorI2RlZmluZSBTUEVFRF8yNDAwICAgICAweDAxCisjZGVmaW5lIFNQRUVEXzk2MDAgICAgIDB4MDIKKyNkZWZpbmUgU1BFRURfMTkyMDAgICAgMHgwMworI2RlZmluZSBTUEVFRF8zODQwMCAgICAweDA0CisjZGVmaW5lIFNQRUVEXzU3NjAwICAgIDB4MDUKKyNkZWZpbmUgU1BFRURfMTE1MjAwICAgMHgwNgorI2RlZmluZSBTUEVFRF81NzYwMDAgICAweDA3CisjZGVmaW5lIFNQRUVEXzExNTIwMDAgIDB4MDgKKyNkZWZpbmUgU1BFRURfNDAwMDAwMCAgMHgwOQorI2RlZmluZSBTUEVFRF8xNjAwMDAwMCAweDBhCiAKIC8qIEJhc2ljIGNhcGFiaWxpdGllcyAqLwogI2RlZmluZSBJVUNfREVGQVVMVAkweDAwCS8qIEJhc2ljIGRldmljZSBjb21wbGlhbnQgd2l0aCAxLjAgc3BlYyAqLwpAQCAtMTAwLDExICsxMDcsMTQgQEAKICNkZWZpbmUgSVVDX1NNQUxMX1BLVAkweDEwCS8qIERldmljZSBkb2Vzbid0IGJlaGF2ZSB3aXRoIGJpZyBSeCBwYWNrZXRzICovCiAjZGVmaW5lIElVQ19NQVhfV0lORE9XCTB4MjAJLyogRGV2aWNlIHVuZGVyZXN0aW1hdGUgdGhlIFJ4IHdpbmRvdyAqLwogI2RlZmluZSBJVUNfTUFYX1hCT0ZTCTB4NDAJLyogRGV2aWNlIG5lZWQgbW9yZSB4Ym9mcyB0aGFuIGFkdmVydGlzZWQgKi8KKyNkZWZpbmUgSVVDX1NUSVJfNDIxMAkweDgwCS8qIFNpZ21hVGVsIDQyMTAvNDIyMC80MTE2IFZGSVIgKi8KIAogLyogVVNCIGNsYXNzIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFVTQl9JUkRBX0hFQURFUiAgIDB4MDEKLSNkZWZpbmUgVVNCX0NMQVNTX0lSREEgICAgMHgwMiAvKiBVU0JfQ0xBU1NfQVBQX1NQRUMgc3ViY2xhc3MgKi8gCi0jZGVmaW5lIFVTQl9EVF9JUkRBICAgICAgIDB4MjEKKyNkZWZpbmUgVVNCX0lSREFfSEVBREVSICAgICAgICAgICAgMHgwMQorI2RlZmluZSBVU0JfQ0xBU1NfSVJEQSAgICAgICAgICAgICAweDAyIC8qIFVTQl9DTEFTU19BUFBfU1BFQyBzdWJjbGFzcyAqLworI2RlZmluZSBVU0JfRFRfSVJEQSAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFVTQl9JUkRBX1NJR01BVEVMX0hFQURFUiAgIDB4MDMKKyNkZWZpbmUgSVVfU0lHTUFURUxfTUFYX1JYX1VSQlMgICAgKElVX01BWF9BQ1RJVkVfUlhfVVJCUyArIFVTQl9JUkRBX1NJR01BVEVMX0hFQURFUikKIAogc3RydWN0IGlyZGFfY2xhc3NfZGVzYyB7CiAJX191OCAgYkxlbmd0aDsKQEAgLTEyMyw2ICsxMzMsNyBAQAogICogKDYuMi41LCBVU0ItSXJEQSBjbGFzcyBzcGVjIDEuMCkgKi8KIAogI2RlZmluZSBJVV9SRVFfR0VUX0NMQVNTX0RFU0MJMHgwNgorI2RlZmluZSBTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRSAxMDIzCiAKIHN0cnVjdCBpcmRhX3VzYl9jYiB7CiAJc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV9kZXNjOwpAQCAtMTM2LDcgKzE0Nyw4IEBACiAJX191MTYgYnVsa19vdXRfbXR1OwkJLyogTWF4IFR4IHBhY2tldCBzaXplIGluIGJ5dGVzICovCiAJX191OCAgYnVsa19pbnRfZXA7CQkvKiBJbnRlcnJ1cHQgRW5kcG9pbnQgYXNzaWdubWVudHMgKi8KIAotCXN0cnVjdCB1cmIgKnJ4X3VyYltJVV9NQVhfUlhfVVJCU107CS8qIFVSQnMgdXNlZCB0byByZWNlaXZlIGRhdGEgZnJhbWVzICovCisJX191OCAgbWF4X3J4X3VyYjsKKwlzdHJ1Y3QgdXJiICoqcnhfdXJiOwkgICAgICAgIC8qIFVSQnMgdXNlZCB0byByZWNlaXZlIGRhdGEgZnJhbWVzICovCiAJc3RydWN0IHVyYiAqaWRsZV9yeF91cmI7CS8qIFBvaW50ZXIgdG8gaWRsZSBVUkIgaW4gUnggcGF0aCAqLwogCXN0cnVjdCB1cmIgKnR4X3VyYjsJCS8qIFVSQiB1c2VkIHRvIHNlbmQgZGF0YSBmcmFtZXMgKi8KIAlzdHJ1Y3QgdXJiICpzcGVlZF91cmI7CQkvKiBVUkIgdXNlZCB0byBzZW5kIHNwZWVkIGNvbW1hbmRzICovCkBAIC0xNTcsNiArMTY5LDkgQEAKIAlfX3UzMiBzcGVlZDsJCQkvKiBDdXJyZW50IHNwZWVkICovCiAJX19zMzIgbmV3X3NwZWVkOwkJLyogc3BlZWQgd2UgbmVlZCB0byBzZXQgKi8KIAorCV9fdTggaGVhZGVyX2xlbmd0aDsgICAgICAgICAgICAgLyogVVNCLUlyREEgZnJhbWUgaGVhZGVyIHNpemUgKi8KKwlpbnQgbmVlZHNwYXRjaDsgICAgICAgIAkJLyogZGV2aWNlIG5lZWRzIGZpcm13YXJlIHBhdGNoICovCisKIAlzdHJ1Y3QgdGltZXJfbGlzdCByeF9kZWZlcl90aW1lcjsJLyogV2FpdCBmb3IgUnggZXJyb3IgdG8gY2xlYXIgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggZWM5NGVjZC4uYmJjZmM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKQEAgLTExLDYgKzExLDcgQEAKICAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgICAgICBEYW5pZWxlIFBlcmkKICAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogICAgIENvcHlyaWdodCAoYykgMjAwMiAgICAgIEplYW4gVG91cnJpbGhlcworICogICAgIENvcHlyaWdodCAoYykgMjAwNiAgICAgIExpbnVzIFdhbGxlaWoKICAqCiAgKgogICogQmFzZWQgb24gc21jLWlyY2MuYzoKQEAgLTYxLDYgKzYyLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC9pcmRhL3dyYXBwZXIuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CkBAIC0xMDAsNiArMTA0LDIyIEBACiAKIC8qIFR5cGVzICovCiAKKyNpZmRlZiBDT05GSUdfUENJCitzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uIHsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3I7IC8qIFBDSSB2ZW5kb3IgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2U7IC8qIFBDSSB2ZW5kb3IgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdWJ2ZW5kb3I7IC8qIFBDSSBzdWJzeXN0ZW0gdmVuZG9yIElEICovCisJdW5zaWduZWQgc2hvcnQgc3ViZGV2aWNlOyAvKiBQQ0kgc3lic3lzdGVtIGRldmljZSBJRCAqLworCXVuc2lnbmVkIHNob3J0IHNpcl9pbzsgLyogSS9PIHBvcnQgZm9yIFNJUiAqLworCXVuc2lnbmVkIHNob3J0IGZpcl9pbzsgLyogSS9PIHBvcnQgZm9yIEZJUiAqLworCXVuc2lnbmVkIGNoYXIgIGZpcl9pcnE7IC8qIEZJUiBJUlEgKi8KKwl1bnNpZ25lZCBjaGFyICBmaXJfZG1hOyAvKiBGSVIgRE1BICovCisJdW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2U7IC8qIEkvTyBwb3J0IGZvciBjaGlwIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgKCpwcmVjb25maWd1cmUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOyAvKiBQcmVjb25maWcgZnVuY3Rpb24gKi8KKwljb25zdCBjaGFyICpuYW1lOwkvKiBuYW1lIHNob3duIGFzIGluZm8gKi8KK307CisjZW5kaWYKKwogc3RydWN0IHNtc2NfdHJhbnNjZWl2ZXIgewogCWNoYXIgKm5hbWU7CiAJdm9pZCAoKnNldF9mb3Jfc3BlZWQpKGludCBmaXJfYmFzZSwgdTMyIHNwZWVkKTsKQEAgLTIwMiw2ICsyMjIsMTYgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19wYWdlZChjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwcywgdW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIGNoYXIgKnR5cGUpOwogc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX2ZkYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7CiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fbHBjKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlKTsKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKKwkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGlyY2NfaXJxKTsKKyNlbmRpZgogCiAvKiBUcmFuc2NlaXZlcnMgc3BlY2lmaWMgZnVuY3Rpb25zICovCiAKQEAgLTM1Myw2ICszODMsMTMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKyNpZmRlZiBDT05GSUdfUENJCisJaWYgKHNtc2NfaXJjY19wcmVjb25maWd1cmVfc3Vic3lzdGVtcyhpcmNjX2NmZywgaXJjY19maXIsIGlyY2Nfc2lyLCBpcmNjX2RtYSwgaXJjY19pcnEpIDwgMCkgeworCQkvKiBJZ25vcmUgZXJyb3JzIGZyb20gcHJlY29uZmlndXJhdGlvbiAqLworCQlJUkRBX0VSUk9SKCIlcywgUHJlY29uZmlndXJhdGlvbiBmYWlsZWQgIVxuIiwgZHJpdmVyX25hbWUpOworCX0KKyNlbmRpZgorCiAJZGV2X2NvdW50ID0gMDsKIAogCWlmIChpcmNjX2ZpciA+IDAgJiYgaXJjY19zaXIgPiAwKSB7CkBAIC0yMjg1LDYgKzIzMjIsMjgwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIExvb2sgZm9yIHNvbWUgc3BlY2lmaWMgc3Vic3lzdGVtIHNldHVwcyB0aGF0IG5lZWQKKyAqIHByZS1jb25maWd1cmF0aW9uIG5vdCBwcm9wZXJseSBkb25lIGJ5IHRoZSBCSU9TIChlc3BlY2lhbGx5IGxhcHRvcHMpCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgaW4gcGFydCBvbiBzbWNpbml0LmMsIHRvc2gxODAwLXNtY2luaXQuYworICogYW5kIHRvc2gyNDUwLXNtY2luaXQuYy4gVGhlIHRhYmxlIGxpc3RzIHRoZSBkZXZpY2UgZW50cmllcworICogZm9yIElTQSBicmlkZ2VzIHdpdGggYW4gTFBDIChMb2NhbCBQZXJpcGhlcmFsIENvbmZpZ3VyYXRvcikKKyAqIHRoYXQgYXJlIGluIHR1cm4gdXNlZCB0byBjb25maWd1cmUgdGhlIFNNU0MgZGV2aWNlIHdpdGggZGVmYXVsdAorICogU0lSIGFuZCBGSVIgSS9PIHBvcnRzLCBETUEgYW5kIElSUS4KKyAqLworI2lmZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgUENJSURfVkVORE9SX0lOVEVMIDB4ODA4NgorI2RlZmluZSBQQ0lJRF9WRU5ET1JfQUxJIDB4MTBiOQorc3RhdGljIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb25zW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7CisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxREJNIExQQyBicmlkZ2UgKi8KKwkJLmRldmljZSA9IDB4MjRjYywKKwkJLnN1YnZlbmRvciA9IDB4MTAzYywKKwkJLnN1YmRldmljZSA9IDB4MDg4YywKKwkJLnNpcl9pbyA9IDB4MDJmOCwgLyogUXVpdGUgY2VydGFpbiB0aGVzZSBhcmUgdGhlIHNhbWUgZm9yIG5jODAwMCBhcyBmb3IgbmM2MDAwICovCisJCS5maXJfaW8gPSAweDAxMzAsCisJCS5maXJfaXJxID0gMHgwOSwKKwkJLmZpcl9kbWEgPSAweDAzLAorCQkuY2ZnX2Jhc2UgPSAweDAwNGUsCisJCS5wcmVjb25maWd1cmUgPSBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMSwKKwkJLm5hbWUgPSAiSFAgbmM4MDAwIiwKKwl9LAorCXsKKwkJLnZlbmRvciA9IFBDSUlEX1ZFTkRPUl9JTlRFTCwgLyogSW50ZWwgODI4MDFEQk0gTFBDIGJyaWRnZSAqLworCQkuZGV2aWNlID0gMHgyNGNjLAorCQkuc3VidmVuZG9yID0gMHgxMDNjLAorCQkuc3ViZGV2aWNlID0gMHgwODkwLAorCQkuc2lyX2lvID0gMHgwMmY4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDksCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDRlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIkhQIG5jNjAwMCIsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxREIvREJMIChJQ0g0L0lDSDQtTCkgTFBDIEludGVyZmFjZSBCcmlkZ2UgKi8KKwkJLmRldmljZSA9IDB4MjRjMCwKKwkJLnN1YnZlbmRvciA9IDB4MTE3OSwKKwkJLnN1YmRldmljZSA9IDB4ZmZmZiwgLyogMHhmZmZmIGlzICJhbnkiLCBOb3Qgc3VyZSwgMHgwMDAxIG9yIDB4MDAwMiAqLworCQkuc2lyX2lvID0gMHgwM2Y4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDcsCisJCS5maXJfZG1hID0gMHgwMSwKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIlRvc2hpYmEgU2F0ZWxsaXRlIDI0NTAiLAorCX0sCisJeworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMUNBTSBJU0EgYnJpZGdlICovCisJCS5kZXZpY2UgPSAweDI0OGMsIC8qIFNvbWUgdXNlIDI0Y2M/ICovCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiwgTm90IHN1cmUsIDB4MDAwMSBvciAweDAwMDIgKi8KKwkJLnNpcl9pbyA9IDB4MDNmOCwKKwkJLmZpcl9pbyA9IDB4MDEzMCwKKwkJLmZpcl9pcnEgPSAweDAzLAorCQkuZmlyX2RtYSA9IDB4MDMsCisJCS5jZmdfYmFzZSA9IDB4MDAyZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxLAorCQkubmFtZSA9ICJUb3NoaWJhIFNhdGVsbGl0ZSA1MTAwLzUyMDAsIFRlY3JhIDkxMDAiLAorCX0sCisJeworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0FMSSwgLyogQUxpIE0xNTMzL00xNTM1IFBDSSB0byBJU0EgQnJpZGdlIFtBbGFkZGluIElWL1YvVitdICovCisJCS5kZXZpY2UgPSAweDE1MzMsCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiwgTm90IHN1cmUsIDB4MDAwMSBvciAweDAwMDIgKi8KKwkJLnNpcl9pbyA9IDB4MDJlOCwKKwkJLmZpcl9pbyA9IDB4MDJmOCwKKwkJLmZpcl9pcnEgPSAweDA3LAorCQkuZmlyX2RtYSA9IDB4MDMsCisJCS5jZmdfYmFzZSA9IDB4MDAyZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaSwKKwkJLm5hbWUgPSAiVG9zaGliYSBTYXRlbGxpdGUgMTgwMCIsCisJfSwKKwl7IH0gLy8gVGVybWluYXRvcgorfTsKKworCisvKgorICogVGhpcyBzZXRzIHVwIHRoZSBiYXNpYyBTTVNDIHBhcmFtZXRlcnMgKEZJUiBwb3J0LCBTSVIgcG9ydCwgRklSIERNQSwgRklSIElSUSkKKyAqIHRocm91Z2ggdGhlIGNoaXAgY29uZmlndXJhdGlvbiBwb3J0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpCit7CisJdW5zaWduZWQgc2hvcnQgaW9iYXNlID0gY29uZi0+Y2ZnX2Jhc2U7CisJdW5zaWduZWQgY2hhciB0bXBieXRlOworCisJb3V0YihMUEM0N04yMjdfQ0ZHQUNDRVNTS0VZLCBpb2Jhc2UpOyAvLyBlbnRlciBjb25maWd1cmF0aW9uIHN0YXRlCisJb3V0YihTTVNDU0lPRkxBVF9ERVZJQ0VJRF9SRUcsIGlvYmFzZSk7IC8vIHNldCBmb3IgZGV2aWNlIElECisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKzEpOyAvLyBSZWFkIGRldmljZSBJRAorCUlSREFfREVCVUcoMCwgIkRldGVjdGVkIENoaXAgaWQ6IDB4JTAyeCwgc2V0dGluZyB1cCByZWdpc3RlcnMuLi5cbiIsdG1wYnl0ZSk7CisKKwkvKiBEaXNhYmxlIFVBUlQxIGFuZCBzZXQgdXAgU0lSIEkvTyBwb3J0ICovCisJb3V0YigweDI0LCBpb2Jhc2UpOyAgLy8gc2VsZWN0IENSMjQgLSBVQVJUMSBiYXNlIGFkZHIKKwlvdXRiKDB4MDAsIGlvYmFzZSArIDEpOyAvLyBkaXNhYmxlIFVBUlQxCisJb3V0YihTTVNDU0lPRkxBVF9VQVJUMkJBU0VBRERSX1JFRywgaW9iYXNlKTsgIC8vIHNlbGVjdCBDUjI1IC0gVUFSVDIgYmFzZSBhZGRyCisJb3V0YiggKGNvbmYtPnNpcl9pbyA+PiAyKSwgaW9iYXNlICsgMSk7IC8vIGJpdHMgMi05IG9mIDB4M2Y4CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlpZiAodG1wYnl0ZSAhPSAoY29uZi0+c2lyX2lvID4+IDIpICkgeworCQlJUkRBX1dBUk5JTkcoIkVSUk9SOiBjb3VsZCBub3QgY29uZmlndXJlIFNJUiBpb3BvcnQuXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBTZXQgdXAgRklSIElSUSBjaGFubmVsIGZvciBVQVJUMiAqLworCW91dGIoU01TQ1NJT0ZMQVRfVUFSVElSUVNFTEVDVF9SRUcsIGlvYmFzZSk7IC8vIHNlbGVjdCBDUjI4IC0gVUFSVDEsMiBJUlEgc2VsZWN0CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwl0bXBieXRlICY9IFNNU0NTSU9GTEFUX1VBUlQxSVJRU0VMRUNUX01BU0s7IC8vIERvIG5vdCB0b3VjaCB0aGUgVUFSVDEgcG9ydGlvbgorCXRtcGJ5dGUgfD0gKGNvbmYtPmZpcl9pcnEgJiBTTVNDU0lPRkxBVF9VQVJUMklSUVNFTEVDVF9NQVNLKTsKKwlvdXRiKHRtcGJ5dGUsIGlvYmFzZSArIDEpOworCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSkgJiBTTVNDU0lPRkxBVF9VQVJUMklSUVNFTEVDVF9NQVNLOworCWlmICh0bXBieXRlICE9IGNvbmYtPmZpcl9pcnEpIHsKKwkJSVJEQV9XQVJOSU5HKCJFUlJPUjogY291bGQgbm90IGNvbmZpZ3VyZSBGSVIgSVJRIGNoYW5uZWwuXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBTZXQgdXAgRklSIEkvTyBwb3J0ICovCisJb3V0YihTTVNDU0lPRkxBVF9GSVJCQVNFQUREUl9SRUcsIGlvYmFzZSk7ICAvLyBDUjJCIC0gU0NFIChGSVIpIGJhc2UgYWRkcgorCW91dGIoKGNvbmYtPmZpcl9pbyA+PiAzKSwgaW9iYXNlICsgMSk7CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlpZiAodG1wYnl0ZSAhPSAoY29uZi0+ZmlyX2lvID4+IDMpICkgeworCQlJUkRBX1dBUk5JTkcoIkVSUk9SOiBjb3VsZCBub3QgY29uZmlndXJlIEZJUiBJL08gcG9ydC5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIFNldCB1cCBGSVIgRE1BIGNoYW5uZWwgKi8KKwlvdXRiKFNNU0NTSU9GTEFUX0ZJUkRNQVNFTEVDVF9SRUcsIGlvYmFzZSk7ICAvLyBDUjJDIC0gU0NFIChGSVIpIERNQSBzZWxlY3QKKwlvdXRiKChjb25mLT5maXJfZG1hICYgTFBDNDdOMjI3X0ZJUkRNQVNFTEVDVF9NQVNLKSwgaW9iYXNlICsgMSk7IC8vIERNQQorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSkgJiBMUEM0N04yMjdfRklSRE1BU0VMRUNUX01BU0s7CisJaWYgKHRtcGJ5dGUgIT0gKGNvbmYtPmZpcl9kbWEgJiBMUEM0N04yMjdfRklSRE1BU0VMRUNUX01BU0spKSB7CisJCUlSREFfV0FSTklORygiRVJST1I6IGNvdWxkIG5vdCBjb25maWd1cmUgRklSIERNQSBjaGFubmVsLlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJb3V0YihTTVNDU0lPRkxBVF9VQVJUTU9ERTBDX1JFRywgaW9iYXNlKTsgIC8vIENSMEMgLSBVQVJUIG1vZGUKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCXRtcGJ5dGUgJj0gflNNU0NTSU9GTEFUX1VBUlQyTU9ERV9NQVNLIHwgU01TQ1NJT0ZMQVRfVUFSVDJNT0RFX1ZBTF9JUkRBOworCW91dGIodG1wYnl0ZSwgaW9iYXNlICsgMSk7IC8vIGVuYWJsZSBJckRBIChIUFNJUikgbW9kZSwgaGlnaCBzcGVlZAorCisJb3V0YihMUEM0N04yMjdfQVBNQk9PVERSSVZFX1JFRywgaW9iYXNlKTsgIC8vIENSMDcgLSBBdXRvIFB3ciBNZ3QvYm9vdCBkcml2ZSBzZWwKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCW91dGIodG1wYnl0ZSB8IExQQzQ3TjIyN19VQVJUMkFVVE9QV1JET1dOX01BU0ssIGlvYmFzZSArIDEpOyAvLyBlbmFibGUgVUFSVDIgYXV0b3Bvd2VyIGRvd24KKworCS8qIFRoaXMgb25lIHdhcyBub3QgcGFydCBvZiB0b3NoMTgwMCAqLworCW91dGIoMHgwYSwgaW9iYXNlKTsgIC8vIENSMGEgLSBlY3AgZmlmbyAvIGlyIG11eAorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJb3V0Yih0bXBieXRlIHwgMHg0MCwgaW9iYXNlICsgMSk7IC8vIHNlbmQgYWN0aXZlIGRldmljZSB0byBpciBwb3J0CisKKwlvdXRiKExQQzQ3TjIyN19VQVJUMTJQT1dFUl9SRUcsIGlvYmFzZSk7ICAvLyBDUjAyIC0gVUFSVCAxLDIgcG93ZXIKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCW91dGIodG1wYnl0ZSB8IExQQzQ3TjIyN19VQVJUMlBPV0VSRE9XTl9NQVNLLCBpb2Jhc2UgKyAxKTsgLy8gVUFSVDIgcG93ZXIgdXAgbW9kZSwgVUFSVDEgcG93ZXIgZG93bgorCisJb3V0YihMUEM0N04yMjdfRkRDUE9XRVJWQUxJRENPTkZfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IwMCAtIEZEQyBQb3dlci92YWxpZCBjb25maWcgY3ljbGUKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCW91dGIodG1wYnl0ZSB8IExQQzQ3TjIyN19WQUxJRF9NQVNLLCBpb2Jhc2UgKyAxKTsgLy8gdmFsaWQgY29uZmlnIGN5Y2xlIGRvbmUKKworCW91dGIoTFBDNDdOMjI3X0NGR0VYSVRLRVksIGlvYmFzZSk7ICAvLyBFeGl0IGNvbmZpZ3VyYXRpb24KKworCXJldHVybiAwOworfQorCisvKiA4MjgwMUNBTSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVklEIDB4MDAKKyNkZWZpbmUgRElEIDB4MDIKKyNkZWZpbmUgUElSUUFfUk9VVCAweDYwCisjZGVmaW5lIFBDSV9ETUFfQyAweDkwCisjZGVmaW5lIENPTV9ERUMgMHhlMAorI2RlZmluZSBMUENfRU4gMHhlNgorI2RlZmluZSBHRU4yX0RFQyAweGVjCisvKgorICogU2V0cyB1cCB0aGUgSS9PIHJhbmdlIHVzaW5nIHRoZSA4MjgwMUNBTSBJU0EgYnJpZGdlLCA4MjgwMURCTSBMUEMgYnJpZGdlIG9yCisgKiBJbnRlbCA4MjgwMURCL0RCTCAoSUNINC9JQ0g0LUwpIExQQyBJbnRlcmZhY2UgQnJpZGdlLiBUaGV5IGFsbCB3b3JrIHRoZSBzYW1lIHdheSEKKyAqLworc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpCit7CisJdW5zaWduZWQgc2hvcnQgdG1wd29yZDsKKwlpbnQgcmV0OworCisJSVJEQV9NRVNTQUdFKCJTZXR0aW5nIHVwIHRoZSBTTVNDIGRldmljZSB2aWEgdGhlIDgyODAxIGNvbnRyb2xsZXIuXG4iKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDT01fREVDLCAweDEwKTsKKworCS8qIEVuYWJsZSBMUEMgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIExQQ19FTiwgJnRtcHdvcmQpOyAvKiBMUENfRU4gcmVnaXN0ZXIgKi8KKwl0bXB3b3JkICY9IDB4ZmZmZDsgLyogbWFzayBiaXQgMSAqLworCXRtcHdvcmQgfD0gMHgwMDAxOyAvKiBzZXQgYml0IDAgOiBDT01BIGFkZHIgcmFuZ2UgZW5hYmxlICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgTFBDX0VOLCB0bXB3b3JkKTsKKworCS8qIFNldHVwIERNQSAqLworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9ETUFfQywgMHhjMGMwKTsgLyogTFBDIEkvRiBETUEgb24sIGNoYW5uZWwgMyAgLS0gcnRtICg/PyBQQ0kgRE1BID8pICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgR0VOMl9ERUMsIDB4MTMxKTsgLyogTFBDIEkvRiAybmQgZGVjb2RlIHJhbmdlICovCisKKwkvKiBQcmUtY29uZmlndXJlIGNoaXAgKi8KKwlyZXQgPSBwcmVjb25maWd1cmVfc21zY19jaGlwKGNvbmYpOworCisJLyogRGlzYWJsZSBMUEMgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIExQQ19FTiwgJnRtcHdvcmQpOyAvKiBMUENfRU4gcmVnaXN0ZXIgKi8KKwl0bXB3b3JkICY9IDB4ZmZmYzsgLyogbWFzayBiaXQgMSBhbmQgYml0IDAsIENPTUEgYWRkciByYW5nZSBkaXNhYmxlICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgTFBDX0VOLCB0bXB3b3JkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpCit7CisJLyogVE9ETzogcHV0IGluIEFMaSAxNTMzIGNvbmZpZ3VyYXRpb24gaGVyZS4gKi8KKwlJUkRBX01FU1NBR0UoIlNPUlJZOiAlcyBoYXMgYW4gdW5zdXBwb3J0ZWQgYnJpZGdlIGNvbnRyb2xsZXIgKEFMaSk6IG5vdCBwcmUtY29uZmlndXJlZC5cbiIsIGNvbmYtPm5hbWUpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKKwkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGlyY2NfaXJxKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXVuc2lnbmVkIHNob3J0IHNzX3ZlbmRvciA9IDB4MDAwMDsKKwl1bnNpZ25lZCBzaG9ydCBzc19kZXZpY2UgPSAweDAwMDA7CisJaW50IHJldCA9IDA7CisKKwlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpOworCisJd2hpbGUgKGRldiAhPSBOVUxMKSB7CisJCXN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmY7CisKKwkJLyoKKwkJICogQ2FjaGUgdGhlIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlOiBzb21lIG1hbnVmYWN0dXJlcnMgZmFpbCB0byBzZXQKKwkJICogdGhpcyBmb3IgYWxsIGNvbXBvbmVudHMsIHNvIHdlIHNhdmUgaXQgaW4gY2FzZSB0aGVyZSBpcyBqdXN0CisJCSAqIDB4MDAwMCAweDAwMDAgb24gdGhlIGRldmljZSB3ZSB3YW50IHRvIGNoZWNrLgorCQkgKi8KKwkJaWYgKGRldi0+c3Vic3lzdGVtX3ZlbmRvciAhPSAweDAwMDBVKSB7CisJCQlzc192ZW5kb3IgPSBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJCQlzc19kZXZpY2UgPSBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJCX0KKwkJY29uZiA9IHN1YnN5c3RlbV9jb25maWd1cmF0aW9uczsKKwkJZm9yKCA7IGNvbmYtPnN1YnZlbmRvcjsgY29uZisrKSB7CisJCQlpZihjb25mLT52ZW5kb3IgPT0gZGV2LT52ZW5kb3IgJiYKKwkJCSAgIGNvbmYtPmRldmljZSA9PSBkZXYtPmRldmljZSAmJgorCQkJICAgY29uZi0+c3VidmVuZG9yID09IHNzX3ZlbmRvciAmJiAvKiBTb21ldGltZXMgdGhlc2UgYXJlIGNhY2hlZCB2YWx1ZXMgKi8KKwkJCSAgIChjb25mLT5zdWJkZXZpY2UgPT0gc3NfZGV2aWNlIHx8IGNvbmYtPnN1YmRldmljZSA9PSAweGZmZmYpKSB7CisJCQkJc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiB0bXBjb25mOworCisJCQkJbWVtY3B5KCZ0bXBjb25mLCBjb25mLCBzaXplb2Yoc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbikpOworCisJCQkJLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIHdpdGggYW55dGhpbmcgcGFzc2VkIGluIGFzIHBhcmFtZXRlciAqLworCQkJCWlmIChpcmNjX2NmZyAhPSAwKQorCQkJCQl0bXBjb25mLmNmZ19iYXNlID0gaXJjY19jZmc7CisJCQkJaWYgKGlyY2NfZmlyICE9IDApCisJCQkJCXRtcGNvbmYuZmlyX2lvID0gaXJjY19maXI7CisJCQkJaWYgKGlyY2Nfc2lyICE9IDApCisJCQkJCXRtcGNvbmYuc2lyX2lvID0gaXJjY19zaXI7CisJCQkJaWYgKGlyY2NfZG1hICE9IDB4ZmYpCisJCQkJCXRtcGNvbmYuZmlyX2RtYSA9IGlyY2NfZG1hOworCQkJCWlmIChpcmNjX2lycSAhPSAweGZmKQorCQkJCQl0bXBjb25mLmZpcl9pcnEgPSBpcmNjX2lycTsKKworCQkJCUlSREFfTUVTU0FHRSgiRGV0ZWN0ZWQgdW5jb25maWd1cmVkICVzIFNNU0MgSXJEQSBjaGlwLCBwcmUtY29uZmlndXJpbmcgZGV2aWNlLlxuIiwgY29uZi0+bmFtZSk7CisJCQkJaWYgKGNvbmYtPnByZWNvbmZpZ3VyZSkKKwkJCQkJcmV0ID0gY29uZi0+cHJlY29uZmlndXJlKGRldiwgJnRtcGNvbmYpOworCQkJCWVsc2UKKwkJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCX0KKwkJfQorCQlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLy8gQ09ORklHX1BDSQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVHJhbnNjZWl2ZXJzIHNwZWNpZmljIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDc1YjM1YWQuLjY2ZTc0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTg3LDYgKzg3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7CisJLm5hbWUgPSAibmV0Y29uIiwKIAkuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9QUklOVEJVRkZFUiwKIAkud3JpdGUgPSB3cml0ZV9tc2cKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDBiNTM1ODAuLjczZTI3MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC00OTcsMzMgKzQ5Nyw0MCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRykgeworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7CiAKLQkvKiBBbHdheXMgbGVhdmUgdGhpcyBhcyB6ZXJvLiAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgMCk7CisJCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgMCk7CisJfSBlbHNlIHsKKwkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKKwkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7CisKKwkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KKwkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgMCk7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5pbmRpcmVjdF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRnM193cml0ZV9tZW1fZmFzdChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZiwgdTMyIHZhbCkKLXsKLQkvKiBJZiBubyB3b3JrYXJvdW5kIGlzIG5lZWRlZCwgd3JpdGUgdG8gbWVtIHNwYWNlIGRpcmVjdGx5ICovCi0JaWYgKHRwLT53cml0ZTMyICE9IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMikKLQkJdHczMihOSUNfU1JBTV9XSU5fQkFTRSArIG9mZiwgdmFsKTsKLQllbHNlCi0JCXRnM193cml0ZV9tZW0odHAsIG9mZiwgdmFsKTsKLX0KLQogc3RhdGljIHZvaWQgdGczX3JlYWRfbWVtKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2ZmLCB1MzIgKnZhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5pbmRpcmVjdF9sb2NrLCBmbGFncyk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRykgeworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKIAotCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwl9IGVsc2UgeworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOworCQkqdmFsID0gdHIzMihURzNQQ0lfTUVNX1dJTl9EQVRBKTsKKworCQkvKiBBbHdheXMgbGVhdmUgdGhpcyBhcyB6ZXJvLiAqLworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTM2NywxMiArMTM3NCwxMiBAQAogCQl9CiAJfQogCisJdGczX3dyaXRlX3NpZ19wb3N0X3Jlc2V0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOKTsKKwogCS8qIEZpbmFsbHksIHNldCB0aGUgbmV3IHBvd2VyIHN0YXRlLiAqLwogCXBjaV93cml0ZV9jb25maWdfd29yZCh0cC0+cGRldiwgcG0gKyBQQ0lfUE1fQ1RSTCwgcG93ZXJfY29udHJvbCk7CiAJdWRlbGF5KDEwMCk7CS8qIERlbGF5IGFmdGVyIHBvd2VyIHN0YXRlIGNoYW5nZSAqLwogCi0JdGczX3dyaXRlX3NpZ19wb3N0X3Jlc2V0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOKTsKLQogCXJldHVybiAwOwogfQogCkBAIC01ODI4LDEwICs1ODM1LDE0IEBACiAJCQkgIEdSQ19NT0RFX05PX1RYX1BIRFJfQ1NVTSB8CiAJCQkgIEdSQ19NT0RFX05PX1JYX1BIRFJfQ1NVTSk7CiAJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX0hPU1RfU0VOREJEUzsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05PX1RYX1BTRVVET19DU1VNKQotCQl0cC0+Z3JjX21vZGUgfD0gR1JDX01PREVfTk9fVFhfUEhEUl9DU1VNOwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTk9fUlhfUFNFVURPX0NTVU0pCi0JCXRwLT5ncmNfbW9kZSB8PSBHUkNfTU9ERV9OT19SWF9QSERSX0NTVU07CisKKwkvKiBQc2V1ZG8taGVhZGVyIGNoZWNrc3VtIGlzIGRvbmUgYnkgaGFyZHdhcmUgbG9naWMgYW5kIG5vdAorCSAqIHRoZSBvZmZsb2FkIHByb2Nlc3NlcnMsIHNvIG1ha2UgdGhlIGNoaXAgZG8gdGhlIHBzZXVkby0KKwkgKiBoZWFkZXIgY2hlY2tzdW1zIG9uIHJlY2VpdmUuICBGb3IgdHJhbnNtaXQgaXQgaXMgbW9yZQorCSAqIGNvbnZlbmllbnQgdG8gZG8gdGhlIHBzZXVkby1oZWFkZXIgY2hlY2tzdW0gaW4gc29mdHdhcmUKKwkgKiBhcyBMaW51eCBkb2VzIHRoYXQgb24gdHJhbnNtaXQgZm9yIHVzIGluIGFsbCBjYXNlcy4KKwkgKi8KKwl0cC0+Z3JjX21vZGUgfD0gR1JDX01PREVfTk9fVFhfUEhEUl9DU1VNOwogCiAJdHczMihHUkNfTU9ERSwKIAkgICAgIHRwLT5ncmNfbW9kZSB8CkBAIC02NTM1LDExICs2NTQ2LDExIEBACiAJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgewogCQkJdTMyIHZhbDsKIAotCQkJdGczX3dyaXRlX21lbV9mYXN0KHRwLCBOSUNfU1JBTV9GV19DTURfTUJPWCwKLQkJCQkJICAgRldDTURfTklDRFJWX0FMSVZFMik7Ci0JCQl0ZzNfd3JpdGVfbWVtX2Zhc3QodHAsIE5JQ19TUkFNX0ZXX0NNRF9MRU5fTUJPWCwgNCk7CisJCQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19DTURfTUJPWCwKKwkJCQkgICAgICBGV0NNRF9OSUNEUlZfQUxJVkUyKTsKKwkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9MRU5fTUJPWCwgNCk7CiAJCQkvKiA1IHNlY29uZHMgdGltZW91dCAqLwotCQkJdGczX3dyaXRlX21lbV9mYXN0KHRwLCBOSUNfU1JBTV9GV19DTURfREFUQV9NQk9YLCA1KTsKKwkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9EQVRBX01CT1gsIDUpOwogCQkJdmFsID0gdHIzMihHUkNfUlhfQ1BVX0VWRU5UKTsKIAkJCXZhbCB8PSAoMSA8PCAxNCk7CiAJCQl0dzMyKEdSQ19SWF9DUFVfRVZFTlQsIHZhbCk7CkBAIC04MDM0LDkgKzgwNDUsMTMgQEAKIAkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAkJCWNzdW04ICs9IGJ1ZjhbaV07CiAKLQkJaWYgKGNzdW04ID09IDApCi0JCQlyZXR1cm4gMDsKLQkJcmV0dXJuIC1FSU87CisJCWlmIChjc3VtOCA9PSAwKSB7CisJCQllcnIgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSAtRUlPOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBCb290c3RyYXAgY2hlY2tzdW0gYXQgb2Zmc2V0IDB4MTAgKi8KQEAgLTk1MzEsOCArOTU0NiwxMSBAQAogCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzE7CiAKIAkvKiBEbyBub3QgZXZlbiB0cnkgcG9raW5nIGFyb3VuZCBpbiBoZXJlIG9uIFN1biBwYXJ0cy4gICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpIHsKKwkJLyogQWxsIFNVTiBjaGlwcyBhcmUgYnVpbHQtaW4gTE9Ncy4gKi8KKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKIAkJcmV0dXJuOworCX0KIAogCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9TSUcsICZ2YWwpOwogCWlmICh2YWwgPT0gTklDX1NSQU1fREFUQV9TSUdfTUFHSUMpIHsKQEAgLTk2MzAsOSArOTY0OCw3IEBACiAJCSAgICB0cC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0RFTEwpCiAJCQl0cC0+bGVkX2N0cmwgPSBMRURfQ1RSTF9NT0RFX1BIWV8yOwogCi0JCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApICYmCi0JCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEpICYmCi0JCSAgICAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0VFUFJPTV9XUCkpCisJCWlmIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfRUVQUk9NX1dQKQogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKIAogCQlpZiAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0FTRl9FTkFCTEUpIHsKQEAgLTEwMjU3LDYgKzEwMjczLDEzIEBACiAJCXBjaV93cml0ZV9jb25maWdfd29yZCh0cC0+cGRldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwogCX0KIAorCWlmICh0cC0+d3JpdGUzMiA9PSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIgfHwKKwkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAmJgorCSAgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CisJICAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEpKSB8fAorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkpCisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHOworCiAJLyogR2V0IGVlcHJvbSBodyBjb25maWcgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpLgogCSAqIEluIHBhcnRpY3VsYXIsIHRoZSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVCBmbGFnIG11c3QgYmUKIAkgKiBkZXRlcm1pbmVkIGJlZm9yZSBjYWxsaW5nIHRnM19zZXRfcG93ZXJfc3RhdGUoKSBzbyB0aGF0CkBAIC0xMDI5OSwxNSArMTAzMjIsNiBAQAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMF9CMCkKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TOwogCi0JLyogUHNldWRvLWhlYWRlciBjaGVja3N1bSBpcyBkb25lIGJ5IGhhcmR3YXJlIGxvZ2ljIGFuZCBub3QKLQkgKiB0aGUgb2ZmbG9hZCBwcm9jZXNzZXJzLCBzbyBtYWtlIHRoZSBjaGlwIGRvIHRoZSBwc2V1ZG8tCi0JICogaGVhZGVyIGNoZWNrc3VtcyBvbiByZWNlaXZlLiAgRm9yIHRyYW5zbWl0IGl0IGlzIG1vcmUKLQkgKiBjb252ZW5pZW50IHRvIGRvIHRoZSBwc2V1ZG8taGVhZGVyIGNoZWNrc3VtIGluIHNvZnR3YXJlCi0JICogYXMgTGludXggZG9lcyB0aGF0IG9uIHRyYW5zbWl0IGZvciB1cyBpbiBhbGwgY2FzZXMuCi0JICovCi0JdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OT19UWF9QU0VVRE9fQ1NVTTsKLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19OT19SWF9QU0VVRE9fQ1NVTTsKLQogCS8qIERlcml2ZSBpbml0aWFsIGp1bWJvIG1vZGUgZnJvbSBNVFUgYXNzaWduZWQgaW4KIAkgKiBldGhlcl9zZXR1cCgpIHZpYSB0aGUgYWxsb2NfZXRoZXJkZXYoKSBjYWxsCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IGM0M2NjMzIuLjhjOGI5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0yMTcxLDggKzIxNzEsNyBAQAogI2RlZmluZSBURzNfRkxBR19QQ0lYX01PREUJCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQJCTB4MDAwNDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfUENJXzMyQklUCQkweDAwMDgwMDAwCi0jZGVmaW5lIFRHM19GTEFHX05PX1RYX1BTRVVET19DU1VNCTB4MDAxMDAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfTk9fUlhfUFNFVURPX0NTVU0JMHgwMDIwMDAwMAorI2RlZmluZSBURzNfRkxBR19TUkFNX1VTRV9DT05GSUcJMHgwMDEwMDAwMAogI2RlZmluZSBURzNfRkxBR19TRVJERVNfV09MX0NBUAkJMHgwMDQwMDAwMAogI2RlZmluZSBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRQkweDAwODAwMDAwCiAjZGVmaW5lIFRHM19GTEFHXzEwXzEwMF9PTkxZCQkweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCmluZGV4IGQxMjE2NDQuLjk4YjgzYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCkBAIC0xMDAsOCArMTAwLDYgQEAKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCi0JeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg0NSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDkyOWRkODAuLjY1ZDA5MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMTQ3LDYgKzE0NywxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcnRjLXNhMTEwMC4KIAorY29uZmlnIFJUQ19EUlZfVlI0MVhYCisJdHJpc3RhdGUgIk5FQyBWUjQxWFgiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgQ1BVX1ZSNDFYWAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSB3aWxsIGdldCBhY2Nlc3MgdG8gdGhlIHJlYWwgdGltZSBjbG9jaworCSAgYnVpbHQgaW50byB5b3VyIE5FQyBWUjQxWFggQ1BVLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGMtdnI0MXh4LgorCiBjb25maWcgUlRDX0RSVl9URVNUCiAJdHJpc3RhdGUgIlRlc3QgZHJpdmVyL2RldmljZSIKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCA4ZDRjN2ZlLi5hOWNhMGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtMTksMyArMTksNCBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDg2KQkrPSBydGMtbTQ4dDg2Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0VQOTNYWCkJKz0gcnRjLWVwOTN4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9TQTExMDApCSs9IHJ0Yy1zYTExMDAubworb2JqLSQoQ09ORklHX1JUQ19EUlZfVlI0MVhYKQkrPSBydGMtdnI0MXh4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2NsYXNzLmMgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCmluZGV4IDg1MzM5MzYuLjQxM2M3ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2NsYXNzLmMKKysrIGIvZHJpdmVycy9ydGMvY2xhc3MuYwpAQCAtOTYsNiArOTYsOCBAQAogCWlkcl9yZW1vdmUoJnJ0Y19pZHIsIGlkKTsKIAogZXhpdDoKKwlkZXZfZXJyKGRldiwgInJ0YyBjb3JlOiB1bmFibGUgdG8gcmVnaXN0ZXIgJXMsIGVyciA9ICVkXG4iLAorCQkJbmFtZSwgZXJyKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX2RldmljZV9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKaW5kZXggMzU4Njk1YS4uOWJlODFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYwpAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBBbiBydGMvaTJjIGRyaXZlciBmb3IgdGhlIERhbGxhcyBEUzE2NzIKLSAqIENvcHlyaWdodCAyMDA1IEFsZXNzYW5kcm8gWnVtbW8KKyAqIENvcHlyaWdodCAyMDA1LTA2IFRvd2VyIFRlY2hub2xvZ2llcworICoKKyAqIEF1dGhvcjogQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMSw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMyIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUuIFRoaXMgY2hpcCBjYW5ub3QgYmUgZGV0ZWN0ZWQuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtMjUsNiArMjcsNyBAQAogI2RlZmluZSBEUzE2NzJfUkVHX0NPTlRST0wJNAogI2RlZmluZSBEUzE2NzJfUkVHX1RSSUNLTEUJNQogCisjZGVmaW5lIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDCTB4ODAKIAogLyogUHJvdG90eXBlcyAqLwogc3RhdGljIGludCBkczE2NzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwpAQCAtNTMsOCArNTYsNyBAQAogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsCiAJCSIlczogcmF3IHJlYWQgZGF0YSAtIGNvdW50ZXJzPSUwMngsJTAyeCwlMDJ4LCUwMnhcbiIKLQkJX19GVU5DVElPTl9fLAotCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOworCQlfX0ZVTkNUSU9OX18sIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSk7CiAKIAl0aW1lID0gKGJ1ZlszXSA8PCAyNCkgfCAoYnVmWzJdIDw8IDE2KSB8IChidWZbMV0gPDwgOCkgfCBidWZbMF07CiAKQEAgLTYyLDggKzY0LDcgQEAKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCi0JCV9fRlVOQ1RJT05fXywKLQkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCisJCV9fRlVOQ1RJT05fXywgdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJcmV0dXJuIDA7CkBAIC03MiwxNiArNzMsMTcgQEAKIHN0YXRpYyBpbnQgZHMxNjcyX3NldF9tbXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGxvbmcgc2VjcykKIHsKIAlpbnQgeGZlcjsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls1XTsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls2XTsKIAogCWJ1ZlswXSA9IERTMTY3Ml9SRUdfQ05UX0JBU0U7CiAJYnVmWzFdID0gc2VjcyAmIDB4MDAwMDAwRkY7CiAJYnVmWzJdID0gKHNlY3MgJiAweDAwMDBGRjAwKSA+PiA4OwogCWJ1ZlszXSA9IChzZWNzICYgMHgwMEZGMDAwMCkgPj4gMTY7CiAJYnVmWzRdID0gKHNlY3MgJiAweEZGMDAwMDAwKSA+PiAyNDsKKwlidWZbNV0gPSAwOwkvKiBzZXQgY29udHJvbCByZWcgdG8gZW5hYmxlIGNvdW50aW5nICovCiAKLQl4ZmVyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA1KTsKLQlpZiAoeGZlciAhPSA1KSB7CisJeGZlciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgNik7CisJaWYgKHhmZXIgIT0gNikgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBzZW5kOiAlZFxuIiwgX19GVU5DVElPTl9fLCB4ZmVyKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTIwLDYgKzEyMiw0MCBAQAogCXJldHVybiBkczE2NzJfc2V0X21tc3ModG9faTJjX2NsaWVudChkZXYpLCBzZWNzKTsKIH0KIAorc3RhdGljIGludCBkczE2NzJfZ2V0X2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnN0YXR1cykKK3sKKwl1bnNpZ25lZCBjaGFyIGFkZHIgPSBEUzE2NzJfUkVHX0NPTlRST0w7CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsgY2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkciB9LAkJLyogc2V0dXAgcmVhZCBwdHIgKi8KKwkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAxLCBzdGF0dXMgfSwJLyogcmVhZCBjb250cm9sICovCisJfTsKKworCS8qIHJlYWQgY29udHJvbCByZWdpc3RlciAqLworCWlmICgoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZ3NbMF0sIDIpKSAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlYWQgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKiBmb2xsb3dpbmcgYXJlIHRoZSBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1OCBjb250cm9sOworCWludCBlcnI7CisKKwllcnIgPSBkczE2NzJfZ2V0X2NvbnRyb2woY2xpZW50LCAmY29udHJvbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY29udHJvbCAmIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDKQorCQkJCQk/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworfQorc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2wsIFNfSVJVR08sIHNob3dfY29udHJvbCwgTlVMTCk7CisKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE2NzJfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxNjcyX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gZHMxNjcyX3J0Y19zZXRfdGltZSwKQEAgLTEyOCw3ICsxNjQsNiBAQAogCiBzdGF0aWMgaW50IGRzMTY3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgZHMxNjcyX3Byb2JlKTsKIH0KIApAQCAtMTM3LDggKzE3Miw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAgCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCkBAIC0xNjIsNiArMTk1LDcgQEAKIHN0YXRpYyBpbnQgZHMxNjcyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewogCWludCBlcnIgPSAwOworCXU4IGNvbnRyb2w7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCkBAIC0xOTUsMTMgKzIyOSwyMyBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CiAKKwkvKiByZWFkIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwllcnIgPSBkczE2NzJfZ2V0X2NvbnRyb2woY2xpZW50LCAmY29udHJvbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldGFjaDsKKworCWlmIChjb250cm9sICYgRFMxNjcyX1JFR19DT05UUk9MX0VPU0MpCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIk9zY2lsbGF0b3Igbm90IGVuYWJsZWQuICIKKwkJCQkJIlNldCB0aW1lIHRvIGVuYWJsZS5cbiIpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY29udHJvbCk7CisKIAlyZXR1cm4gMDsKIAogZXhpdF9kZXRhY2g6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKaW5kZXggMGRkODBlYS4uZTFhMTE2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwpAQCAtNjcsNyArNjcsNiBAQAogCiAJZXA5M3h4X2dldF9zd2NvbXAoZGV2LCAmcHJlbG9hZCwgJmRlbGV0ZSk7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwogCXNlcV9wcmludGYoc2VxLCAicHJlbG9hZFx0XHQ6ICVkXG4iLCBwcmVsb2FkKTsKIAlzZXFfcHJpbnRmKHNlcSwgImRlbGV0ZVx0XHQ6ICVkXG4iLCBkZWxldGUpOwogCkBAIC0xMTAsNyArMTA5LDYgQEAKIAkJCQkmZGV2LT5kZXYsICZlcDkzeHhfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCiAJaWYgKElTX0VSUihydGMpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYwppbmRleCBkYjQ0NWM4Li5mNmU3ZWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIE00OFQ4Nl9SRUdfU0VDQUxSTQkweDAxCiAjZGVmaW5lIE00OFQ4Nl9SRUdfTUlOCQkweDAyCiAjZGVmaW5lIE00OFQ4Nl9SRUdfTUlOQUxSTQkweDAzCi0jZGVmaW5lIE00OFQ4Nl9SRUdfSE9VUgkweDA0CisjZGVmaW5lIE00OFQ4Nl9SRUdfSE9VUgkJMHgwNAogI2RlZmluZSBNNDhUODZfUkVHX0hPVVJBTFJNCTB4MDUKICNkZWZpbmUgTTQ4VDg2X1JFR19ET1cJCTB4MDYgLyogMSA9IHN1bmRheSAqLwogI2RlZmluZSBNNDhUODZfUkVHX0RPTQkJMHgwNwpAQCAtMTI3LDkgKzEyNyw2IEBACiAKIAlyZWcgPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfQik7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiAlc1xuIiwKLQkJIChyZWcgJiBNNDhUODZfUkVHX0JfSDI0KSA/ICJ5ZXMiIDogIm5vIik7Ci0KIAlzZXFfcHJpbnRmKHNlcSwgIm1vZGVcdFx0OiAlc1xuIiwKIAkJIChyZWcgJiBNNDhUODZfUkVHX0JfRE0pID8gImJpbmFyeSIgOiAiYmNkIik7CiAKQEAgLTE1NCwxMCArMTUxLDggQEAKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigibTQ4dDg2IiwKIAkJCQkmZGV2LT5kZXYsICZtNDh0ODZfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCi0JaWYgKElTX0VSUihydGMpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyXG4iKTsKKwlpZiAoSVNfRVJSKHJ0YykpCiAJCXJldHVybiBQVFJfRVJSKHJ0Yyk7Ci0JfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBydGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwppbmRleCBkODU3ZDQ1Li5iYTlhNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKQEAgLTIyNywxNCArMjI3LDcgQEAKIAlyZXR1cm4gcGNmODU2M19zZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CiB9CiAKLXN0YXRpYyBpbnQgcGNmODU2M19ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQotewotCXNlcV9wcmludGYoc2VxLCAiMjRoclx0XHQ6IHllc1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwY2Y4NTYzX3J0Y19vcHMgPSB7Ci0JLnByb2MJCT0gcGNmODU2M19ydGNfcHJvYywKIAkucmVhZF90aW1lCT0gcGNmODU2M19ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IHBjZjg1NjNfcnRjX3NldF90aW1lLAogfTsKQEAgLTI5Nyw4ICsyOTAsNiBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIApAQCAtMzIxLDggKzMxMiw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCmluZGV4IDkwYjhhOTcuLmNlZjVmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwpAQCAtNzEsNiArNzEsOCBAQAogCQkJCWFscm0ucGVuZGluZyA/ICJ5ZXMiIDogIm5vIik7CiAJfQogCisJc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKKwogCWlmIChvcHMtPnByb2MpCiAJCW9wcy0+cHJvYyhjbGFzc19kZXYtPmRldiwgc2VxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKaW5kZXggMzk2Yzg2OC4uNzU1M2Q3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCkBAIC0xNTEsOSArMTUxLDggQEAKIHsKIAlpbnQgZXJyLCBvc2MsIHRyaW07CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwotCi0JaWYgKChlcnIgPSByczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJm9zYywgJnRyaW0pKSA9PSAwKSB7CisJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZvc2MsICZ0cmltKTsKKwlpZiAoZXJyID09IDApIHsKIAkJc2VxX3ByaW50ZihzZXEsICIlZC4lMDNkIEtIelxuIiwgb3NjIC8gMTAwMCwgb3NjICUgMTAwMCk7CiAJCXNlcV9wcmludGYoc2VxLCAidHJpbVx0OiAlZFxuIiwgdHJpbSk7CiAJfQpAQCAtMTcwLDMwICsxNjksMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHJzNWMzNzJfc3lzZnNfc2hvd190cmltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCB0cmltOworCWludCBlcnIsIHRyaW07CiAKLQlpZiAocnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksIE5VTEwsICZ0cmltKSA9PSAwKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUyeFxuIiwgdHJpbSk7CisJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksIE5VTEwsICZ0cmltKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMnhcbiIsIHRyaW0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKHRyaW0sIFNfSVJVR08sIHJzNWMzNzJfc3lzZnNfc2hvd190cmltLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgcnM1YzM3Ml9zeXNmc19zaG93X29zYyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgb3NjOworCWludCBlcnIsIG9zYzsKIAotCWlmIChyczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJm9zYywgTlVMTCkgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZCBLSHpcbiIsIG9zYyAvIDEwMDAsIG9zYyAlIDEwMDApOworCWVyciA9IHJzNWMzNzJfZ2V0X3RyaW0odG9faTJjX2NsaWVudChkZXYpLCAmb3NjLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZCBLSHpcbiIsIG9zYyAvIDEwMDAsIG9zYyAlIDEwMDApOwogfQogc3RhdGljIERFVklDRV9BVFRSKG9zYywgU19JUlVHTywgcnM1YzM3Ml9zeXNmc19zaG93X29zYywgTlVMTCk7CiAKIHN0YXRpYyBpbnQgcnM1YzM3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgcnM1YzM3Ml9wcm9iZSk7CiB9CiAKQEAgLTIzMyw4ICsyMzMsNiBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIApAQCAtMjYwLDggKzI1OCw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA4M2IyYmI0Li5hMjNlYzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0xNjAsMTkgKzE2MCwxOSBAQAogCXJldCA9IHJlcXVlc3RfaXJxKElSUV9SVEMxSHosIHNhMTEwMF9ydGNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCiAJCQkJInJ0YyAxSHoiLCBkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQzFIeik7CisJCWRldl9lcnIoZGV2LCAiSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQzFIeik7CiAJCWdvdG8gZmFpbF91aTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1JUQ0Fscm0sIHNhMTEwMF9ydGNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCiAJCQkJInJ0YyBBbHJtIiwgZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlElZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9SVENBbHJtKTsKKwkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfUlRDQWxybSk7CiAJCWdvdG8gZmFpbF9haTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX09TVDEsIHRpbWVyMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKIAkJCQkicnRjIHRpbWVyIiwgZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlElZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9PU1QxKTsKKwkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfT1NUMSk7CiAJCWdvdG8gZmFpbF9waTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzIsNyArMzMyLDcgQEAKIAkgKi8KIAlpZiAoUlRUUiA9PSAwKSB7CiAJCVJUVFIgPSBSVENfREVGX0RJVklERVIgKyAoUlRDX0RFRl9UUklNIDw8IDE2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRjOiB3YXJuaW5nOiBpbml0aWFsaXppbmcgZGVmYXVsdCBjbG9jayBkaXZpZGVyL3RyaW0gdmFsdWVcbiIpOworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAid2FybmluZzogaW5pdGlhbGl6aW5nIGRlZmF1bHQgY2xvY2sgZGl2aWRlci90cmltIHZhbHVlXG4iKTsKIAkJLyogVGhlIGN1cnJlbnQgUlRDIHZhbHVlIHByb2JhYmx5IGRvZXNuJ3QgbWFrZSBzZW5zZSBlaXRoZXIgKi8KIAkJUkNOUiA9IDA7CiAJfQpAQCAtMzQwLDE1ICszNDAsMTEgQEAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZzYTExMDBfcnRjX29wcywKIAkJCQlUSElTX01PRFVMRSk7CiAKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBSVEMgZGV2aWNlXG4iKTsKKwlpZiAoSVNfRVJSKHJ0YykpCiAJCXJldHVybiBQVFJfRVJSKHJ0Yyk7Ci0JfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJTQTExeHgvUFhBMnh4IFJUQyBSZWdpc3RlcmVkXG4iKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwppbmRleCA0M2QxMDc0Li5lMWY3ZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCi0Jc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKIAlzZXFfcHJpbnRmKHNlcSwgInRlc3RcdFx0OiB5ZXNcbiIpOwogCXNlcV9wcmludGYoc2VxLCAiaWRcdFx0OiAlZFxuIiwgcGxhdF9kZXYtPmlkKTsKIApAQCAtMTIwLDggKzExOSw2IEBACiAJCQkJCQkmdGVzdF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmcGxhdF9kZXYtPmRldiwKLQkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCWRldmljZV9jcmVhdGVfZmlsZSgmcGxhdF9kZXYtPmRldiwgJmRldl9hdHRyX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0OWZkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIE5FQyBWUjQxMDAgc2VyaWVzIFJlYWwgVGltZSBDbG9jayB1bml0LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS92cjQxeHgvdnI0MXh4Lmg+CisKK01PRFVMRV9BVVRIT1IoIllvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMgVlI0MTAwIHNlcmllcyBSVEMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgUlRDMV9UWVBFMV9TVEFSVAkweDBiMDAwMGMwVUwKKyNkZWZpbmUgUlRDMV9UWVBFMV9FTkQJCTB4MGIwMDAwZGZVTAorI2RlZmluZSBSVEMyX1RZUEUxX1NUQVJUCTB4MGIwMDAxYzBVTAorI2RlZmluZSBSVEMyX1RZUEUxX0VORAkJMHgwYjAwMDFkZlVMCisKKyNkZWZpbmUgUlRDMV9UWVBFMl9TVEFSVAkweDBmMDAwMTAwVUwKKyNkZWZpbmUgUlRDMV9UWVBFMl9FTkQJCTB4MGYwMDAxMWZVTAorI2RlZmluZSBSVEMyX1RZUEUyX1NUQVJUCTB4MGYwMDAxMjBVTAorI2RlZmluZSBSVEMyX1RZUEUyX0VORAkJMHgwZjAwMDEzZlVMCisKKyNkZWZpbmUgUlRDMV9TSVpFCQkweDIwCisjZGVmaW5lIFJUQzJfU0laRQkJMHgyMAorCisvKiBSVEMgMSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRJTUVMUkVHCQkweDAwCisjZGVmaW5lIEVUSU1FTVJFRwkJMHgwMgorI2RlZmluZSBFVElNRUhSRUcJCTB4MDQKKy8qIFJGVSAqLworI2RlZmluZSBFQ01QTFJFRwkJMHgwOAorI2RlZmluZSBFQ01QTVJFRwkJMHgwYQorI2RlZmluZSBFQ01QSFJFRwkJMHgwYworLyogUkZVICovCisjZGVmaW5lIFJUQ0wxTFJFRwkJMHgxMAorI2RlZmluZSBSVENMMUhSRUcJCTB4MTIKKyNkZWZpbmUgUlRDTDFDTlRMUkVHCQkweDE0CisjZGVmaW5lIFJUQ0wxQ05USFJFRwkJMHgxNgorI2RlZmluZSBSVENMMkxSRUcJCTB4MTgKKyNkZWZpbmUgUlRDTDJIUkVHCQkweDFhCisjZGVmaW5lIFJUQ0wyQ05UTFJFRwkJMHgxYworI2RlZmluZSBSVENMMkNOVEhSRUcJCTB4MWUKKworLyogUlRDIDIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRDTEtMUkVHCQkweDAwCisjZGVmaW5lIFRDTEtIUkVHCQkweDAyCisjZGVmaW5lIFRDTEtDTlRMUkVHCQkweDA0CisjZGVmaW5lIFRDTEtDTlRIUkVHCQkweDA2CisvKiBSRlUgKi8KKyNkZWZpbmUgUlRDSU5UUkVHCQkweDFlCisgI2RlZmluZSBUQ0xPQ0tfSU5UCQkweDA4CisgI2RlZmluZSBSVENMT05HMl9JTlQJCTB4MDQKKyAjZGVmaW5lIFJUQ0xPTkcxX0lOVAkJMHgwMgorICNkZWZpbmUgRUxBUFNFRFRJTUVfSU5UCTB4MDEKKworI2RlZmluZSBSVENfRlJFUVVFTkNZCQkzMjc2OAorI2RlZmluZSBNQVhfUEVSSU9ESUNfUkFURQk2NTUzCisjZGVmaW5lIE1BWF9VU0VSX1BFUklPRElDX1JBVEUJNjQKKworc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMV9iYXNlOworc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMl9iYXNlOworCisjZGVmaW5lIHJ0YzFfcmVhZChvZmZzZXQpCQlyZWFkdyhydGMxX2Jhc2UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgcnRjMV93cml0ZShvZmZzZXQsIHZhbHVlKQl3cml0ZXcoKHZhbHVlKSwgcnRjMV9iYXNlICsgKG9mZnNldCkpCisKKyNkZWZpbmUgcnRjMl9yZWFkKG9mZnNldCkJCXJlYWR3KHJ0YzJfYmFzZSArIChvZmZzZXQpKQorI2RlZmluZSBydGMyX3dyaXRlKG9mZnNldCwgdmFsdWUpCXdyaXRldygodmFsdWUpLCBydGMyX2Jhc2UgKyAob2Zmc2V0KSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBvY2ggPSAxOTcwOwkvKiBKYW4gMSAxOTcwIDAwOjAwOjAwICovCisKK3N0YXRpYyBzcGlubG9ja190IHJ0Y19sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIGNoYXIgcnRjX25hbWVbXSA9ICJSVEMiOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfZnJlcXVlbmN5Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY291bnQ7CisKK3N0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VbMl0gPSB7CisJewkubmFtZQk9IHJ0Y19uYW1lLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJfSwKKwl7CS5uYW1lCT0gcnRjX25hbWUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAl9LAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfZWxhcHNlZF9zZWNvbmQodm9pZCkKK3sKKworCXVuc2lnbmVkIGxvbmcgZmlyc3RfbG93LCBmaXJzdF9taWQsIGZpcnN0X2hpZ2g7CisKKwl1bnNpZ25lZCBsb25nIHNlY29uZF9sb3csIHNlY29uZF9taWQsIHNlY29uZF9oaWdoOworCisJZG8geworCQlmaXJzdF9sb3cgPSBydGMxX3JlYWQoRVRJTUVMUkVHKTsKKwkJZmlyc3RfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7CisJCWZpcnN0X2hpZ2ggPSBydGMxX3JlYWQoRVRJTUVIUkVHKTsKKwkJc2Vjb25kX2xvdyA9IHJ0YzFfcmVhZChFVElNRUxSRUcpOworCQlzZWNvbmRfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7CisJCXNlY29uZF9oaWdoID0gcnRjMV9yZWFkKEVUSU1FSFJFRyk7CisJfSB3aGlsZSAoZmlyc3RfbG93ICE9IHNlY29uZF9sb3cgfHwgZmlyc3RfbWlkICE9IHNlY29uZF9taWQgfHwKKwkgICAgICAgICBmaXJzdF9oaWdoICE9IHNlY29uZF9oaWdoKTsKKworCXJldHVybiAoZmlyc3RfaGlnaCA8PCAxNykgfCAoZmlyc3RfbWlkIDw8IDEpIHwgKGZpcnN0X2xvdyA+PiAxNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9lbGFwc2VkX3NlY29uZCh1bnNpZ25lZCBsb25nIHNlYykKK3sKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVUSU1FTFJFRywgKHVpbnQxNl90KShzZWMgPDwgMTUpKTsKKwlydGMxX3dyaXRlKEVUSU1FTVJFRywgKHVpbnQxNl90KShzZWMgPj4gMSkpOworCXJ0YzFfd3JpdGUoRVRJTUVIUkVHLCAodWludDE2X3QpKHNlYyA+PiAxNykpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHZyNDF4eF9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIDApOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOworCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Cit9CisKK3N0YXRpYyBpbnQgdnI0MXh4X3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGVsYXBzZWRfc2VjOworCisJZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKKwllbGFwc2VkX3NlYyA9IHJlYWRfZWxhcHNlZF9zZWNvbmQoKTsKKworCXJ0Y190aW1lX3RvX3RtKGVwb2NoX3NlYyArIGVsYXBzZWRfc2VjLCB0aW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGN1cnJlbnRfc2VjOworCisJZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKKwljdXJyZW50X3NlYyA9IG1rdGltZSh0aW1lLT50bV95ZWFyICsgMTkwMCwgdGltZS0+dG1fbW9uICsgMSwgdGltZS0+dG1fbWRheSwKKwkgICAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7CisKKwl3cml0ZV9lbGFwc2VkX3NlY29uZChjdXJyZW50X3NlYyAtIGVwb2NoX3NlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cjQxeHhfcnRjX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqd2thbHJtKQoreworCXVuc2lnbmVkIGxvbmcgbG93LCBtaWQsIGhpZ2g7CisJc3RydWN0IHJ0Y190aW1lICp0aW1lID0gJndrYWxybS0+dGltZTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWxvdyA9IHJ0YzFfcmVhZChFQ01QTFJFRyk7CisJbWlkID0gcnRjMV9yZWFkKEVDTVBNUkVHKTsKKwloaWdoID0gcnRjMV9yZWFkKEVDTVBIUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCisJcnRjX3RpbWVfdG9fdG0oKGhpZ2ggPDwgMTcpIHwgKG1pZCA8PCAxKSB8IChsb3cgPj4gMTUpLCB0aW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKndrYWxybSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsYXJtX3NlYzsKKwlzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUgPSAmd2thbHJtLT50aW1lOworCisJYWxhcm1fc2VjID0gbWt0aW1lKHRpbWUtPnRtX3llYXIgKyAxOTAwLCB0aW1lLT50bV9tb24gKyAxLCB0aW1lLT50bV9tZGF5LAorCSAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVDTVBMUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA8PCAxNSkpOworCXJ0YzFfd3JpdGUoRUNNUE1SRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjID4+IDEpKTsKKwlydGMxX3dyaXRlKEVDTVBIUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA+PiAxNykpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cjQxeHhfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09OOgorCQllbmFibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX0FJRV9PRkY6CisJCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX1BJRV9PTjoKKwkJZW5hYmxlX2lycShSVENMT05HMV9JUlEpOworCQlicmVhazsKKwljYXNlIFJUQ19QSUVfT0ZGOgorCQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOworCQlicmVhazsKKwljYXNlIFJUQ19JUlFQX1JFQUQ6CisJCXJldHVybiBwdXRfdXNlcihwZXJpb2RpY19mcmVxdWVuY3ksICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOworCWNhc2UgUlRDX0lSUVBfU0VUOgorCQlpZiAoYXJnID4gTUFYX1BFUklPRElDX1JBVEUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoYXJnID4gTUFYX1VTRVJfUEVSSU9ESUNfUkFURSAmJiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpID09IDApCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQlwZXJpb2RpY19mcmVxdWVuY3kgPSBhcmc7CisKKwkJY291bnQgPSBSVENfRlJFUVVFTkNZOworCQlkb19kaXYoY291bnQsIGFyZyk7CisKKwkJcGVyaW9kaWNfY291bnQgPSBjb3VudDsKKworCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwkJcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKKwkJcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKworCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfRVBPQ0hfUkVBRDoKKwkJcmV0dXJuIHB1dF91c2VyKGVwb2NoLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOworCWNhc2UgUlRDX0VQT0NIX1NFVDoKKwkJLyogRG9lc24ndCBzdXBwb3J0IGJlZm9yZSAxOTAwICovCisJCWlmIChhcmcgPCAxOTAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhcGFibGUoQ0FQX1NZU19USU1FKSA9PSAwKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJZXBvY2ggPSBhcmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZWxhcHNlZHRpbWVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJ0YzJfd3JpdGUoUlRDSU5UUkVHLCBFTEFQU0VEVElNRV9JTlQpOworCisJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfQUYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcnRjbG9uZzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gcGVyaW9kaWNfY291bnQ7CisKKwlydGMyX3dyaXRlKFJUQ0lOVFJFRywgUlRDTE9ORzFfSU5UKTsKKworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBjb3VudCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKworCXJ0Y191cGRhdGVfaXJxKCZydGMtPmNsYXNzX2RldiwgMSwgUlRDX1BGKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHZyNDF4eF9ydGNfb3BzID0geworCS5yZWxlYXNlCT0gdnI0MXh4X3J0Y19yZWxlYXNlLAorCS5pb2N0bAkJPSB2cjQxeHhfcnRjX2lvY3RsLAorCS5yZWFkX3RpbWUJPSB2cjQxeHhfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSB2cjQxeHhfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtCT0gdnI0MXh4X3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSB2cjQxeHhfcnRjX3NldF9hbGFybSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJ0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0dmFsOworCisJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMikKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJ0YzFfYmFzZSA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIFJUQzFfU0laRSk7CisJaWYgKHJ0YzFfYmFzZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJcnRjMl9iYXNlID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgUlRDMl9TSVpFKTsKKwlpZiAocnRjMl9iYXNlID09IE5VTEwpIHsKKwkJaW91bm1hcChydGMxX2Jhc2UpOworCQlydGMxX2Jhc2UgPSBOVUxMOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocnRjX25hbWUsICZwZGV2LT5kZXYsICZ2cjQxeHhfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlpb3VubWFwKHJ0YzFfYmFzZSk7CisJCWlvdW5tYXAocnRjMl9iYXNlKTsKKwkJcnRjMV9iYXNlID0gTlVMTDsKKwkJcnRjMl9iYXNlID0gTlVMTDsKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIDApOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlpcnEgPSBFTEFQU0VEVElNRV9JUlE7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBlbGFwc2VkdGltZV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwkgICAgICAgICAgICAgICAgICAgICAiZWxhcHNlZF90aW1lIiwgcGRldik7CisJaWYgKHJldHZhbCA9PSAwKSB7CisJCWlycSA9IFJUQ0xPTkcxX0lSUTsKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBydGNsb25nMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwkJICAgICAgICAgICAgICAgICAgICAgInJ0Y2xvbmcxIiwgcGRldik7CisJfQorCisJaWYgKHJldHZhbCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSVkIGlzIGJ1c3lcbiIsIGlycSk7CisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCQlpZiAoaXJxID09IFJUQ0xPTkcxX0lSUSkKKwkJCWZyZWVfaXJxKEVMQVBTRURUSU1FX0lSUSwgTlVMTCk7CisJCWlvdW5tYXAocnRjMV9iYXNlKTsKKwkJaW91bm1hcChydGMyX2Jhc2UpOworCQlydGMxX2Jhc2UgPSBOVUxMOworCQlydGMyX2Jhc2UgPSBOVUxMOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CisKKwlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOworCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJydGM6IFJlYWwgVGltZSBDbG9jayBvZiBORUMgVlI0MTAwIHNlcmllc1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisKKwlydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAocnRjICE9IE5VTEwpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlmcmVlX2lycShFTEFQU0VEVElNRV9JUlEsIE5VTEwpOworCWZyZWVfaXJxKFJUQ0xPTkcxX0lSUSwgTlVMTCk7CisJaWYgKHJ0YzFfYmFzZSAhPSBOVUxMKQorCQlpb3VubWFwKHJ0YzFfYmFzZSk7CisJaWYgKHJ0YzJfYmFzZSAhPSBOVUxMKQorCQlpb3VubWFwKHJ0YzJfYmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ0Y19wbGF0Zm9ybV9kZXZpY2U7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJ0Y19wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHJ0Y19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJ0Y19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IHJ0Y19uYW1lLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdnI0MXh4X3J0Y19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7CisJY2FzZSBDUFVfVlI0MTExOgorCWNhc2UgQ1BVX1ZSNDEyMToKKwkJcnRjX3Jlc291cmNlWzBdLnN0YXJ0ID0gUlRDMV9UWVBFMV9TVEFSVDsKKwkJcnRjX3Jlc291cmNlWzBdLmVuZCA9IFJUQzFfVFlQRTFfRU5EOworCQlydGNfcmVzb3VyY2VbMV0uc3RhcnQgPSBSVEMyX1RZUEUxX1NUQVJUOworCQlydGNfcmVzb3VyY2VbMV0uZW5kID0gUlRDMl9UWVBFMV9FTkQ7CisJCWJyZWFrOworCWNhc2UgQ1BVX1ZSNDEyMjoKKwljYXNlIENQVV9WUjQxMzE6CisJY2FzZSBDUFVfVlI0MTMzOgorCQlydGNfcmVzb3VyY2VbMF0uc3RhcnQgPSBSVEMxX1RZUEUyX1NUQVJUOworCQlydGNfcmVzb3VyY2VbMF0uZW5kID0gUlRDMV9UWVBFMl9FTkQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5zdGFydCA9IFJUQzJfVFlQRTJfU1RBUlQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5lbmQgPSBSVEMyX1RZUEUyX0VORDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCX0KKworCXJ0Y19wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIlJUQyIsIC0xKTsKKwlpZiAocnRjX3BsYXRmb3JtX2RldmljZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHJ0Y19wbGF0Zm9ybV9kZXZpY2UsCisJCQkJcnRjX3Jlc291cmNlLCBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZSkpOworCisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChydGNfcGxhdGZvcm1fZGV2aWNlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0Y19wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChyZXR2YWwgPCAwKQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihydGNfcGxhdGZvcm1fZGV2aWNlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2cjQxeHhfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnRjX3BsYXRmb3JtX2RyaXZlcik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHZyNDF4eF9ydGNfaW5pdCk7Cittb2R1bGVfZXhpdCh2cjQxeHhfcnRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwppbmRleCA2MjFkMTdhLi43ODhiNmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC42IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjciCiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuOiBub25lLiBUaGlzIGNoaXAgaXMgbG9jYXRlZCBhdAogICogMHg2ZiBhbmQgdXNlcyBhIHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzaW5nLgpAQCAtNDUxLDggKzQ1MSw2IEBACiB7CiAJaW50IGVyciwgZHRyaW0sIGF0cmltOwogCi0Jc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKLQogCWlmICgoZXJyID0geDEyMDVfZ2V0X2R0cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJmR0cmltKSkgPT0gMCkKIAkJc2VxX3ByaW50ZihzZXEsICJkaWdpdGFsX3RyaW1cdDogJWQgcHBtXG4iLCBkdHJpbSk7CiAKQEAgLTQ3MywzMCArNDcxLDMxIEBACiBzdGF0aWMgc3NpemVfdCB4MTIwNV9zeXNmc19zaG93X2F0cmltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCBhdHJpbTsKKwlpbnQgZXJyLCBhdHJpbTsKIAotCWlmICh4MTIwNV9nZXRfYXRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmYXRyaW0pID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwMmQgcEZcbiIsCi0JCQlhdHJpbSAvIDEwMDAsIGF0cmltICUgMTAwMCk7Ci0JcmV0dXJuIDA7CisJZXJyID0geDEyMDVfZ2V0X2F0cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJmF0cmltKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAyZCBwRlxuIiwgYXRyaW0gLyAxMDAwLCBhdHJpbSAlIDEwMDApOwogfQogc3RhdGljIERFVklDRV9BVFRSKGF0cmltLCBTX0lSVUdPLCB4MTIwNV9zeXNmc19zaG93X2F0cmltLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgeDEyMDVfc3lzZnNfc2hvd19kdHJpbShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgZHRyaW07CisJaW50IGVyciwgZHRyaW07CiAKLQlpZiAoeDEyMDVfZ2V0X2R0cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJmR0cmltKSA9PSAwKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZCBwcG1cbiIsIGR0cmltKTsKKwllcnIgPSB4MTIwNV9nZXRfZHRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmZHRyaW0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZCBwcG1cbiIsIGR0cmltKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihkdHJpbSwgU19JUlVHTywgeDEyMDVfc3lzZnNfc2hvd19kdHJpbSwgTlVMTCk7CiAKIHN0YXRpYyBpbnQgeDEyMDVfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHgxMjA1X3Byb2JlKTsKIH0KIApAQCAtNTQ1LDggKzU0NCw2IEBACiAKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyID0gUFRSX0VSUihydGMpOwotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CiAJCWdvdG8gZXhpdF9kZXRhY2g7CiAJfQogCkBAIC01ODUsOCArNTgyLDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KICAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDBhOWYxMmMuLmEzYmZlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMTI1NywyNSArMTI1NywyOCBAQAogCWlmIChsaXN0X2VtcHR5KCZkZXZpY2UtPmNjd19xdWV1ZSkpCiAJCXJldHVybjsKIAljcXIgPSBsaXN0X2VudHJ5KGRldmljZS0+Y2N3X3F1ZXVlLm5leHQsIHN0cnVjdCBkYXNkX2Njd19yZXEsIGxpc3QpOwotICAgICAgICAvKiBjaGVjayBGQUlMRkFTVCAqLworCWlmIChjcXItPnN0YXR1cyAhPSBEQVNEX0NRUl9RVUVVRUQpCisJCXJldHVybjsKKwkvKiBOb24tdGVtcG9yYXJ5IHN0b3AgY29uZGl0aW9uIHdpbGwgdHJpZ2dlciBmYWlsIGZhc3QgKi8KIAlpZiAoZGV2aWNlLT5zdG9wcGVkICYgfkRBU0RfU1RPUFBFRF9QRU5ESU5HICYmCiAJICAgIHRlc3RfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncykgJiYKIAkgICAgKCFkYXNkX2Vlcl9lbmFibGVkKGRldmljZSkpKSB7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCQlkYXNkX3NjaGVkdWxlX2JoKGRldmljZSk7CisJCXJldHVybjsKIAl9Ci0JaWYgKChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9RVUVVRUQpICYmCi0JICAgICghZGV2aWNlLT5zdG9wcGVkKSkgewotCQkvKiB0cnkgdG8gc3RhcnQgdGhlIGZpcnN0IEkvTyB0aGF0IGNhbiBiZSBzdGFydGVkICovCi0JCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT5zdGFydF9JTyhjcXIpOwotCQlpZiAocmMgPT0gMCkKLQkJCWRhc2Rfc2V0X3RpbWVyKGRldmljZSwgY3FyLT5leHBpcmVzKTsKLQkJZWxzZSBpZiAocmMgPT0gLUVBQ0NFUykgewotCQkJZGFzZF9zY2hlZHVsZV9iaChkZXZpY2UpOwotCQl9IGVsc2UKLQkJCS8qIEhtcGYsIHRyeSBhZ2FpbiBpbiAxLzIgc2VjICovCi0JCQlkYXNkX3NldF90aW1lcihkZXZpY2UsIDUwKTsKLQl9CisJLyogRG9uJ3QgdHJ5IHRvIHN0YXJ0IHJlcXVlc3RzIGlmIGRldmljZSBpcyBzdG9wcGVkICovCisJaWYgKGRldmljZS0+c3RvcHBlZCkKKwkJcmV0dXJuOworCisJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnN0YXJ0X0lPKGNxcik7CisJaWYgKHJjID09IDApCisJCWRhc2Rfc2V0X3RpbWVyKGRldmljZSwgY3FyLT5leHBpcmVzKTsKKwllbHNlIGlmIChyYyA9PSAtRUFDQ0VTKSB7CisJCWRhc2Rfc2NoZWR1bGVfYmgoZGV2aWNlKTsKKwl9IGVsc2UKKwkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDEvMiBzZWMgKi8KKwkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCA1MCk7CiB9CiAKIC8qCkBAIC0xOTY4LDcgKzE5NzEsNyBAQAogZGFzZF9nZW5lcmljX3NldF9vZmZsaW5lIChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLQlpbnQgbWF4X2NvdW50OworCWludCBtYXhfY291bnQsIG9wZW5fY291bnQ7CiAKIAlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXYoY2Rldik7CiAJaWYgKElTX0VSUihkZXZpY2UpKQpAQCAtMTk4NSwxMCArMTk4OCwxNiBAQAogCSAqIGluIHRoZSBvdGhlciBvcGVuZXJzLgogCSAqLwogCW1heF9jb3VudCA9IGRldmljZS0+YmRldiA/IDAgOiAtMTsKLQlpZiAoYXRvbWljX3JlYWQoJmRldmljZS0+b3Blbl9jb3VudCkgPiBtYXhfY291bnQpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkNhbid0IG9mZmxpbmUgZGFzZCBkZXZpY2Ugd2l0aCBvcGVuIgotCQkJIiBjb3VudCA9ICVpLlxuIiwKLQkJCWF0b21pY19yZWFkKCZkZXZpY2UtPm9wZW5fY291bnQpKTsKKwlvcGVuX2NvdW50ID0gKGludCkgYXRvbWljX3JlYWQoJmRldmljZS0+b3Blbl9jb3VudCk7CisJaWYgKG9wZW5fY291bnQgPiBtYXhfY291bnQpIHsKKwkJaWYgKG9wZW5fY291bnQgPiAwKQorCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkNhbid0IG9mZmxpbmUgZGFzZCBkZXZpY2Ugd2l0aCAiCisJCQkJIm9wZW4gY291bnQgPSAlaS5cbiIsCisJCQkJb3Blbl9jb3VudCk7CisJCWVsc2UKKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlcyIsCisJCQkJIkNhbid0IG9mZmxpbmUgZGFzZCBkZXZpY2UgZHVlIHRvIGludGVybmFsICIKKwkJCQkidXNlXG4iKTsKIAkJY2xlYXJfYml0KERBU0RfRkxBR19PRkZMSU5FLCAmZGV2aWNlLT5mbGFncyk7CiAJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDFhYTNjMjYuLmFkMjNhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTI5NCwyMyArMjk0LDQwIEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0RBU0RfUFJPRklMRSAqLwogfQogCisvKgorICogQ3JlYXRlIGRhc2QgcHJvYy1mcyBlbnRyaWVzLgorICogSW4gY2FzZSBjcmVhdGlvbiBmYWlsZWQsIGNsZWFudXAgYW5kIHJldHVybiAtRU5PRU5ULgorICovCiBpbnQKIGRhc2RfcHJvY19pbml0KHZvaWQpCiB7CiAJZGFzZF9wcm9jX3Jvb3RfZW50cnkgPSBwcm9jX21rZGlyKCJkYXNkIiwgJnByb2Nfcm9vdCk7CisJaWYgKCFkYXNkX3Byb2Nfcm9vdF9lbnRyeSkKKwkJZ290byBvdXRfbm9kYXNkOwogCWRhc2RfcHJvY19yb290X2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWRhc2RfZGV2aWNlc19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZXZpY2VzIiwKIAkJCQkJICAgICAgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJICAgICAgIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKwlpZiAoIWRhc2RfZGV2aWNlc19lbnRyeSkKKwkJZ290byBvdXRfbm9kZXZpY2VzOwogCWRhc2RfZGV2aWNlc19lbnRyeS0+cHJvY19mb3BzID0gJmRhc2RfZGV2aWNlc19maWxlX29wczsKIAlkYXNkX2RldmljZXNfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInN0YXRpc3RpY3MiLAogCQkJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCQkgIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKwlpZiAoIWRhc2Rfc3RhdGlzdGljc19lbnRyeSkKKwkJZ290byBvdXRfbm9zdGF0aXN0aWNzOwogCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+cmVhZF9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3JlYWQ7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT53cml0ZV9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3dyaXRlOwogCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlyZXR1cm4gMDsKKworIG91dF9ub3N0YXRpc3RpY3M6CisJcmVtb3ZlX3Byb2NfZW50cnkoImRldmljZXMiLCBkYXNkX3Byb2Nfcm9vdF9lbnRyeSk7Cisgb3V0X25vZGV2aWNlczoKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGFzZCIsICZwcm9jX3Jvb3QpOworIG91dF9ub2Rhc2Q6CisJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCmluZGV4IDZiYWRkODQuLmQ0ZDJmZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYwpAQCAtNTQsNyArNTQsNyBAQAogCWlmICgha2JkKQogCQlnb3RvIG91dDsKIAlrYmQtPmtleV9tYXBzID0ga3phbGxvYyhzaXplb2Yoa2V5X21hcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtleV9tYXBzKQorCWlmICgha2JkLT5rZXlfbWFwcykKIAkJZ290byBvdXRfa2JkOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleV9tYXBzKTsgaSsrKSB7CiAJCWlmIChrZXlfbWFwc1tpXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDVjNjVjZjMuLmI3MGQ5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTQzMiw4ICs0MzIsOCBAQAogKSB7CiAJaW50IHJjOwogCWludCBtaW5vcjsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGdlbmRpc2sgKmRpc2s7CisJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2U7CiAKIAlyYyAgICAgPSAwOwogCWRpc2sgICA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCmluZGV4IDM4OWVlMmMuLmU2ZTQwODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCkBAIC0yMTAsMTggKzIxMCwxNCBAQAogCQlyZXR1cm47CiAJfQogCURCRl9FVkVOVCg0LCAidHMuIGRldjoJJXhcbiIsIGRldmljZS0+Zmlyc3RfbWlub3IpOwotCWlmIChkZXZpY2UtPnRhcGVfc3RhdGUgPCBUT19TSVpFICYmIGRldmljZS0+dGFwZV9zdGF0ZSA+PSAwKQotCQlzdHIgPSB0YXBlX3N0YXRlX3ZlcmJvc2VbZGV2aWNlLT50YXBlX3N0YXRlXTsKLQllbHNlCi0JCXN0ciA9ICJVTktOT1dOIFRTIjsKLQlEQkZfRVZFTlQoNCwgIm9sZCB0czoJJXNcbiIsIHN0cik7Ci0JaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA8IFRPX1NJWkUgJiYgZGV2aWNlLT50YXBlX3N0YXRlID49MCApCisJREJGX0VWRU5UKDQsICJvbGQgdHM6XHRcbiIpOworCWlmIChkZXZpY2UtPnRhcGVfc3RhdGUgPCBUU19TSVpFICYmIGRldmljZS0+dGFwZV9zdGF0ZSA+PTAgKQogCQlzdHIgPSB0YXBlX3N0YXRlX3ZlcmJvc2VbZGV2aWNlLT50YXBlX3N0YXRlXTsKIAllbHNlCiAJCXN0ciA9ICJVTktOT1dOIFRTIjsKIAlEQkZfRVZFTlQoNCwgIiVzXG4iLCBzdHIpOwogCURCRl9FVkVOVCg0LCAibmV3IHRzOlx0XG4iKTsKLQlpZiAobmV3c3RhdGUgPCBUT19TSVpFICYmIG5ld3N0YXRlID49IDApCisJaWYgKG5ld3N0YXRlIDwgVFNfU0laRSAmJiBuZXdzdGF0ZSA+PSAwKQogCQlzdHIgPSB0YXBlX3N0YXRlX3ZlcmJvc2VbbmV3c3RhdGVdOwogCWVsc2UKIAkJc3RyID0gIlVOS05PV04gVFMiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKaW5kZXggY2I4ZTJlNi4uMDk2MGJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCkBAIC00MTQsMTEgKzQxNCwxMSBAQAogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkgKCJjaW9faWdub3JlIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCSAgICZwcm9jX3Jvb3QpOwogCWlmICghZW50cnkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCWVudHJ5LT5wcm9jX2ZvcHMgPSAmY2lvX2lnbm9yZV9wcm9jX2ZvcHM7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogX19pbml0Y2FsbCAoY2lvX2lnbm9yZV9wcm9jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggY2JiODZmYS4uNWIyMGQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CiAJZGVidWdfcmVnaXN0ZXJfdmlldyAoY2lvX2RlYnVnX21zZ19pZCwgJmRlYnVnX3NwcmludGZfdmlldyk7CiAJZGVidWdfc2V0X2xldmVsIChjaW9fZGVidWdfbXNnX2lkLCAyKTsKLQljaW9fZGVidWdfdHJhY2VfaWQgPSBkZWJ1Z19yZWdpc3RlciAoImNpb190cmFjZSIsIDE2LCA0LCA4KTsKKwljaW9fZGVidWdfdHJhY2VfaWQgPSBkZWJ1Z19yZWdpc3RlciAoImNpb190cmFjZSIsIDE2LCA0LCAxNik7CiAJaWYgKCFjaW9fZGVidWdfdHJhY2VfaWQpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CiAJZGVidWdfcmVnaXN0ZXJfdmlldyAoY2lvX2RlYnVnX3RyYWNlX2lkLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW9fZGVidWcuaCBiL2RyaXZlcnMvczM5MC9jaW8vY2lvX2RlYnVnLmgKaW5kZXggNmFmOGIyNy4uZjg4ODQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW9fZGVidWcuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npb19kZWJ1Zy5oCkBAIC0zLDYgKzMsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogCisvKiBmb3IgdXNlIG9mIGRlYnVnIGZlYXR1cmUgKi8KK2V4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19tc2dfaWQ7CitleHRlcm4gZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7CitleHRlcm4gZGVidWdfaW5mb190ICpjaW9fZGVidWdfY3J3X2lkOworCiAjZGVmaW5lIENJT19UUkFDRV9FVkVOVChpbXAsIHR4dCkgZG8geyBcCiAJCWRlYnVnX3RleHRfZXZlbnQoY2lvX2RlYnVnX3RyYWNlX2lkLCBpbXAsIHR4dCk7IFwKIAl9IHdoaWxlICgwKQpAQCAtMTUsMTggKzIwLDE5IEBACiAJCWRlYnVnX3NwcmludGZfZXZlbnQoY2lvX2RlYnVnX2Nyd19pZCwgaW1wICwgIyNhcmdzKTsgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ0lPX0hFWF9FVkVOVChpbXAsIGFyZ3MuLi4pIGRvIHsgXAotICAgICAgICAgICAgICAgIGRlYnVnX2V2ZW50KGNpb19kZWJ1Z190cmFjZV9pZCwgaW1wLCAjI2FyZ3MpOyBcCi0gICAgICAgIH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQKK0NJT19IRVhfRVZFTlQoaW50IGxldmVsLCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCWRlYnVnX2V2ZW50KGNpb19kZWJ1Z190cmFjZV9pZCwgbGV2ZWwsIGRhdGEsIGxlbmd0aCk7CisJCWxlbmd0aCAtPSBjaW9fZGVidWdfdHJhY2VfaWQtPmJ1Zl9zaXplOworCQlkYXRhICs9IGNpb19kZWJ1Z190cmFjZV9pZC0+YnVmX3NpemU7CisJfQorfQogCiAjZGVmaW5lIENJT19ERUJVRyhwcmludGtfbGV2ZWwsZXZlbnRfbGV2ZWwsbXNnLi4uKSAoeyBcCiAJaWYgKGNpb19zaG93X21zZykgcHJpbnRrKHByaW50a19sZXZlbCBtc2cpOyBcCiAJQ0lPX01TR19FVkVOVCAoZXZlbnRfbGV2ZWwsIG1zZyk7IFwKIH0pCiAKLS8qIGZvciB1c2Ugb2YgZGVidWcgZmVhdHVyZSAqLwotZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX21zZ19pZDsKLWV4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDsKLWV4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19jcndfaWQ7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKaW5kZXggMjVmNjc4ZC4uZThlNDFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCkBAIC0xNTA4LDEwICsxNTA4LDEyIEBACiAJc3RydWN0IHNjc2lfY21uZCAqY21kID0gdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF07CiAJdm9pZCAqYnVmOwogCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlpZiAoY21kLT51c2Vfc2cpIHsKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9CiAJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopY21kLT5yZXF1ZXN0X2J1ZmZlcjsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlidWYgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OwogCQl0cmFuc2Zlcl9sZW4gPSBtaW4oc2ctPmxlbmd0aCwgbGVuKTsKIAl9IGVsc2UgewpAQCAtMTUyNiw2ICsxNTI4LDcgQEAKIAogCQlzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiljbWQtPnJlcXVlc3RfYnVmZmVyOwogCQlrdW5tYXBfYXRvbWljKGJ1ZiAtIHNnLT5vZmZzZXQsIEtNX0lSUTApOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCBmZjQ4MDY2Li4xYjg0MjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKQEAgLTIwNyw3ICsyMDcsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gQUhDSV9NQVhfU0csCkBAIC01MTcsMjUgKzUxNiw3IEBACiAJcHAtPmNtZF9zbG90WzBdLnRibF9hZGRyX2hpID0gY3B1X3RvX2xlMzIoKHBwLT5jbWRfdGJsX2RtYSA+PiAxNikgPj4gMTYpOwogfQogCi1zdGF0aWMgaW50IGFoY2lfcG9sbF9yZWdpc3Rlcih2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIHUzMiB2YWwsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGludGVydmFsX21zZWMsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXNlYykKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdTMyIHRtcDsKLQotCXRpbWVvdXQgPSBqaWZmaWVzICsgKHRpbWVvdXRfbXNlYyAqIEhaKSAvIDEwMDA7Ci0JZG8gewotCQl0bXAgPSByZWFkbChyZWcpOwotCQlpZiAoKHRtcCAmIG1hc2spID09IHZhbCkKLQkJCXJldHVybiAwOwotCQltc2xlZXAoaW50ZXJ2YWxfbXNlYyk7Ci0JfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGFoY2lfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB2ZXJib3NlLCB1bnNpZ25lZCBpbnQgKmNsYXNzKQorc3RhdGljIGludCBhaGNpX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzKQogewogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKQEAgLTU0NCw2ICs1MjUsNyBAQAogCWNvbnN0IHUzMiBjbWRfZmlzX2xlbiA9IDU7IC8qIGZpdmUgZHdvcmRzICovCiAJY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOworCXUzMiB0bXA7CiAJdTggKmZpczsKIAlpbnQgcmM7CiAKQEAgLTU2NSw4ICs1NDcsNiBAQAogCS8qIGNoZWNrIEJVU1kvRFJRLCBwZXJmb3JtIENvbW1hbmQgTGlzdCBPdmVycmlkZSBpZiBuZWNlc3NhcnkgKi8KIAlhaGNpX3RmX3JlYWQoYXAsICZ0Zik7CiAJaWYgKHRmLmNvbW1hbmQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkgewotCQl1MzIgdG1wOwotCiAJCWlmICghKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9DTE8pKSB7CiAJCQlyYyA9IC1FSU87CiAJCQlyZWFzb24gPSAicG9ydCBidXN5IGJ1dCBubyBDTE8iOwpAQCAtNTc2LDEwICs1NTYsMTAgQEAKIAkJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTUQpOwogCQl0bXAgfD0gUE9SVF9DTURfQ0xPOwogCQl3cml0ZWwodG1wLCBwb3J0X21taW8gKyBQT1JUX0NNRCk7Ci0JCXJlYWRsKHBvcnRfbW1pbyArIFBPUlRfQ01EKTsgLyogZmx1c2ggKi8KIAotCQlpZiAoYWhjaV9wb2xsX3JlZ2lzdGVyKHBvcnRfbW1pbyArIFBPUlRfQ01ELCBQT1JUX0NNRF9DTE8sIDB4MCwKLQkJCQkgICAgICAgMSwgNTAwKSkgeworCQl0bXAgPSBhdGFfd2FpdF9yZWdpc3Rlcihwb3J0X21taW8gKyBQT1JUX0NNRCwKKwkJCQkJUE9SVF9DTURfQ0xPLCBQT1JUX0NNRF9DTE8sIDEsIDUwMCk7CisJCWlmICh0bXAgJiBQT1JUX0NNRF9DTE8pIHsKIAkJCXJjID0gLUVJTzsKIAkJCXJlYXNvbiA9ICJDTE8gZmFpbGVkIjsKIAkJCWdvdG8gZmFpbF9yZXN0YXJ0OwpAQCAtNjAwLDkgKzU4MCw5IEBACiAJZmlzWzFdICY9IH4oMSA8PCA3KTsJLyogdHVybiBvZmYgQ29tbWFuZCBGSVMgYml0ICovCiAKIAl3cml0ZWwoMSwgcG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUpOwotCXJlYWRsKHBvcnRfbW1pbyArIFBPUlRfQ01EX0lTU1VFKTsJLyogZmx1c2ggKi8KIAotCWlmIChhaGNpX3BvbGxfcmVnaXN0ZXIocG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUsIDB4MSwgMHgwLCAxLCA1MDApKSB7CisJdG1wID0gYXRhX3dhaXRfcmVnaXN0ZXIocG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUsIDB4MSwgMHgxLCAxLCA1MDApOworCWlmICh0bXAgJiAweDEpIHsKIAkJcmMgPSAtRUlPOwogCQlyZWFzb24gPSAiMXN0IEZJUyBmYWlsZWQiOwogCQlnb3RvIGZhaWw7CkBAIC02NDcsMjIgKzYyNywxOSBAQAogIGZhaWxfcmVzdGFydDoKIAlhaGNpX3N0YXJ0X2VuZ2luZShhcCk7CiAgZmFpbDoKLQlpZiAodmVyYm9zZSkKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogc29mdHJlc2V0IGZhaWxlZCAoJXMpXG4iLAotCQkgICAgICAgYXAtPmlkLCByZWFzb24pOwotCWVsc2UKLQkJRFBSSU5USygiRVhJVCwgcmM9JWQgcmVhc29uPVwiJXNcIlxuIiwgcmMsIHJlYXNvbik7CisJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogc29mdHJlc2V0IGZhaWxlZCAoJXMpXG4iLAorCSAgICAgICBhcC0+aWQsIHJlYXNvbik7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGFoY2lfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB2ZXJib3NlLCB1bnNpZ25lZCBpbnQgKmNsYXNzKQorc3RhdGljIGludCBhaGNpX2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzKQogewogCWludCByYzsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWFoY2lfc3RvcF9lbmdpbmUoYXApOwotCXJjID0gc2F0YV9zdGRfaGFyZHJlc2V0KGFwLCB2ZXJib3NlLCBjbGFzcyk7CisJcmMgPSBzYXRhX3N0ZF9oYXJkcmVzZXQoYXAsIGNsYXNzKTsKIAlhaGNpX3N0YXJ0X2VuZ2luZShhcCk7CiAKIAlpZiAocmMgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKaW5kZXggODM4Mzk3MC4uNjJkYWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKQEAgLTIwOSw3ICsyMDksNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IGVmNTdmMjUuLmRmY2I5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0yOTQsMTggKzI5NCw2IEBACiAJaWYgKHNodC0+dW5jaGVja2VkX2lzYV9kbWEgJiYgcHJpdnNpemUpCiAJCWdmcF9tYXNrIHw9IF9fR0ZQX0RNQTsKIAotICAgICAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhpcyBob3N0IGhhcyBhbnkgZXJyb3IgaGFuZGxpbmcgZmFjaWxpdGllcyAqLwotICAgICAgICBpZiAoIXNodC0+ZWhfc3RyYXRlZ3lfaGFuZGxlciAmJiAhc2h0LT5laF9hYm9ydF9oYW5kbGVyICYmCi0JICAgICFzaHQtPmVoX2RldmljZV9yZXNldF9oYW5kbGVyICYmICFzaHQtPmVoX2J1c19yZXNldF9oYW5kbGVyICYmCi0gICAgICAgICAgICAhc2h0LT5laF9ob3N0X3Jlc2V0X2hhbmRsZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogU0NTSSBob3N0IGAlcycgaGFzIG5vIGVycm9yIGhhbmRsaW5nXG4iCi0JCQkJIkVSUk9SOiBUaGlzIGlzIG5vdCBhIHNhZmUgd2F5IHRvIHJ1biB5b3VyICIKLQkJCQkgICAgICAgICJTQ1NJIGhvc3RcbiIKLQkJCQkiRVJST1I6IFRoZSBlcnJvciBoYW5kbGluZyBtdXN0IGJlIGFkZGVkIHRvICIKLQkJCQkidGhpcyBkcml2ZXJcbiIsIHNodC0+cHJvY19uYW1lKTsKLQkJZHVtcF9zdGFjaygpOwotICAgICAgICB9Ci0KIAlzaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBTY3NpX0hvc3QpICsgcHJpdnNpemUsIGdmcF9tYXNrKTsKIAlpZiAoIXNob3N0KQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKaW5kZXggMmIyZmViNi4uNWQzOGE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKQEAgLTE0MjUsMTIgKzE0MjUsOSBAQAogCS8qIHJlYWQgSURFTlRJRlkgcGFnZSBhbmQgY29uZmlndXJlIGRldmljZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspIHsKIAkJZGV2ID0gJmFwLT5kZXZpY2VbaV07Ci0JCWRldi0+Y2xhc3MgPSBjbGFzc2VzW2ldOwogCi0JCWlmICghdHJpZXNbaV0pIHsKLQkJCWF0YV9kb3duX3hmZXJtYXNrX2xpbWl0KGFwLCBkZXYsIDEpOwotCQkJYXRhX2Rldl9kaXNhYmxlKGFwLCBkZXYpOwotCQl9CisJCWlmICh0cmllc1tpXSkKKwkJCWRldi0+Y2xhc3MgPSBjbGFzc2VzW2ldOwogCiAJCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikpCiAJCQljb250aW51ZTsKQEAgLTE0NTgsMTIgKzE0NTUsMTIgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJcmMgPSAwOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXJjID0gYXRhX3NldF9tb2RlKGFwLCAmZGV2KTsKLQkJaWYgKHJjKSB7Ci0JCQlkb3duX3hmZXJtYXNrID0gMTsKLQkJCWdvdG8gZmFpbDsKLQkJfQorCisJaWYgKHJjKSB7CisJCWRvd25feGZlcm1hc2sgPSAxOworCQlnb3RvIGZhaWw7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKQpAQCAtMTQ5MSw2ICsxNDg4LDExIEBACiAJCQl0cmllc1tkZXYtPmRldm5vXSA9IDA7CiAJfQogCisJaWYgKCF0cmllc1tkZXYtPmRldm5vXSkgeworCQlhdGFfZG93bl94ZmVybWFza19saW1pdChhcCwgZGV2LCAxKTsKKwkJYXRhX2Rldl9kaXNhYmxlKGFwLCBkZXYpOworCX0KKwogCWdvdG8gcmV0cnk7CiB9CiAKQEAgLTE3NTAsNyArMTc1Miw3IEBACiAgKgkwIGlmIHNwZCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZCwgMSBpZiBzcGQgaGFzIGJlZW4KICAqCWNoYW5nZWQuICAtRU9QTk9UU1VQUCBpZiBTQ1IgcmVnaXN0ZXJzIGFyZSBpbmFjY2Vzc2libGUuCiAgKi8KLXN0YXRpYyBpbnQgYXRhX3NldF9zYXRhX3NwZChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoraW50IGF0YV9zZXRfc2F0YV9zcGQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl1MzIgc2NvbnRyb2w7CiAKQEAgLTIyNDYsOCArMjI0OCwxMCBAQAogCSAqIHRoZSBidXMgc2hvd3MgMHhGRiBiZWNhdXNlIHRoZSBvZGQgY2xvd24gZm9yZ2V0cyB0aGUgRDcKIAkgKiBwdWxsZG93biByZXNpc3Rvci4KIAkgKi8KLQlpZiAoYXRhX2NoZWNrX3N0YXR1cyhhcCkgPT0gMHhGRikKKwlpZiAoYXRhX2NoZWNrX3N0YXR1cyhhcCkgPT0gMHhGRikgeworCQlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBTUlNUIGZhaWxlZCAoc3RhdHVzIDB4RkYpXG4iLCBhcC0+aWQpOwogCQlyZXR1cm4gQUNfRVJSX09USEVSOworCX0KIAogCWF0YV9idXNfcG9zdF9yZXNldChhcCwgZGV2bWFzayk7CiAKQEAgLTIzODMsMTIgKzIzODcsMTYgQEAKIAlpZiAoKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NBVEEpICYmIGFwLT5vcHMtPnNjcl9yZWFkKSB7CiAJCXUzMiBzcGQ7CiAKKwkJLyogc2V0IGNhYmxlIHR5cGUgYW5kIHJlc3VtZSBsaW5rICovCisJCWFwLT5jYmwgPSBBVEFfQ0JMX1NBVEE7CiAJCXNhdGFfcGh5X3Jlc3VtZShhcCk7CiAKKwkJLyogaW5pdCBzYXRhX3NwZF9saW1pdCB0byB0aGUgY3VycmVudCB2YWx1ZSAqLwogCQlzcGQgPSAoc2NyX3JlYWQoYXAsIFNDUl9DT05UUk9MKSAmIDB4ZjApID4+IDQ7CiAJCWlmIChzcGQpCiAJCQlhcC0+c2F0YV9zcGRfbGltaXQgJj0gKDEgPDwgc3BkKSAtIDE7CiAKKwkJLyogd2FpdCBmb3IgZGV2aWNlICovCiAJCWlmIChzYXRhX2Rldl9wcmVzZW50KGFwKSkKIAkJCWF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQk9PVF9RVUlDSywgQVRBX1RNT1VUX0JPT1QpOwogCX0KQEAgLTIzOTcsNyArMjQwNSw2IEBACiAvKioKICAqCWF0YV9zdGRfc29mdHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBBVEEgU1JTVAogICoJQGFwOiBwb3J0IHRvIHJlc2V0Ci0gKglAdmVyYm9zZTogZmFpbCB2ZXJib3NlbHkKICAqCUBjbGFzc2VzOiByZXN1bHRpbmcgY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCiAgKgogICoJUmVzZXQgaG9zdCBwb3J0IHVzaW5nIEFUQSBTUlNULiAgVGhpcyBmdW5jdGlvbiBpcyB0byBiZSB1c2VkCkBAIC0yNDA5LDcgKzI0MTYsNyBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotaW50IGF0YV9zdGRfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB2ZXJib3NlLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCitpbnQgYXRhX3N0ZF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKQogewogCXVuc2lnbmVkIGludCBzbGF2ZV9wb3NzaWJsZSA9IGFwLT5mbGFncyAmIEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAJdW5zaWduZWQgaW50IGRldm1hc2sgPSAwLCBlcnJfbWFzazsKQEAgLTI0MzUsMTIgKzI0NDIsOCBAQAogCURQUklOVEsoImFib3V0IHRvIHNvZnRyZXNldCwgZGV2bWFzaz0leFxuIiwgZGV2bWFzayk7CiAJZXJyX21hc2sgPSBhdGFfYnVzX3NvZnRyZXNldChhcCwgZGV2bWFzayk7CiAJaWYgKGVycl9tYXNrKSB7Ci0JCWlmICh2ZXJib3NlKQotCQkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogU1JTVCBmYWlsZWQgKGVycl9tYXNrPTB4JXgpXG4iLAotCQkJICAgICAgIGFwLT5pZCwgZXJyX21hc2spOwotCQllbHNlCi0JCQlEUFJJTlRLKCJFWElULCBzb2Z0cmVzZXQgZmFpbGVkIChlcnJfbWFzaz0weCV4KVxuIiwKLQkJCQllcnJfbWFzayk7CisJCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IFNSU1QgZmFpbGVkIChlcnJfbWFzaz0weCV4KVxuIiwKKwkJICAgICAgIGFwLT5pZCwgZXJyX21hc2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI0NTcsNyArMjQ2MCw2IEBACiAvKioKICAqCXNhdGFfc3RkX2hhcmRyZXNldCAtIHJlc2V0IGhvc3QgcG9ydCB2aWEgU0FUQSBwaHkgcmVzZXQKICAqCUBhcDogcG9ydCB0byByZXNldAotICoJQHZlcmJvc2U6IGZhaWwgdmVyYm9zZWx5CiAgKglAY2xhc3M6IHJlc3VsdGluZyBjbGFzcyBvZiBhdHRhY2hlZCBkZXZpY2UKICAqCiAgKglTQVRBIHBoeS1yZXNldCBob3N0IHBvcnQgdXNpbmcgREVUIGJpdHMgb2YgU0NvbnRyb2wgcmVnaXN0ZXIuCkBAIC0yNDcwLDcgKzI0NzIsNyBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotaW50IHNhdGFfc3RkX2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgdmVyYm9zZSwgdW5zaWduZWQgaW50ICpjbGFzcykKK2ludCBzYXRhX3N0ZF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcykKIHsKIAl1MzIgc2NvbnRyb2w7CiAKQEAgLTI1MTAsMTEgKzI1MTIsOCBAQAogCX0KIAogCWlmIChhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKSkgewotCQlpZiAodmVyYm9zZSkKLQkJCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IENPTVJFU0VUIGZhaWxlZCAiCi0JCQkgICAgICAgIihkZXZpY2Ugbm90IHJlYWR5KVxuIiwgYXAtPmlkKTsKLQkJZWxzZQotCQkJRFBSSU5USygiRVhJVCwgZGV2aWNlIG5vdCByZWFkeVxuIik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImF0YSV1OiBDT01SRVNFVCBmYWlsZWQgKGRldmljZSBub3QgcmVhZHkpXG4iLCBhcC0+aWQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI1NDUsMTAgKzI1NDQsNiBAQAogewogCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCS8qIHNldCBjYWJsZSB0eXBlIGlmIGl0IGlzbid0IGFscmVhZHkgc2V0ICovCi0JaWYgKGFwLT5jYmwgPT0gQVRBX0NCTF9OT05FICYmIGFwLT5mbGFncyAmIEFUQV9GTEFHX1NBVEEpCi0JCWFwLT5jYmwgPSBBVEFfQ0JMX1NBVEE7Ci0KIAkvKiBwcmludCBsaW5rIHN0YXR1cyAqLwogCWlmIChhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkKIAkJc2F0YV9wcmludF9saW5rX3N0YXR1cyhhcCk7CkBAIC0yNTk4LDcgKzI1OTMsNyBAQAogCWF0YV9yZXNldF9mbl90IGhhcmRyZXNldDsKIAogCWhhcmRyZXNldCA9IE5VTEw7Ci0JaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NBVEEgJiYgYXAtPm9wcy0+c2NyX3JlYWQpCisJaWYgKGFwLT5jYmwgPT0gQVRBX0NCTF9TQVRBICYmIGFwLT5vcHMtPnNjcl9yZWFkKQogCQloYXJkcmVzZXQgPSBzYXRhX3N0ZF9oYXJkcmVzZXQ7CiAKIAlyZXR1cm4gYXRhX2RyaXZlX3Byb2JlX3Jlc2V0KGFwLCBhdGFfc3RkX3Byb2JlaW5pdCwKQEAgLTI2MDYsMTYgKzI2MDEsMTUgQEAKIAkJCQkgICAgIGF0YV9zdGRfcG9zdHJlc2V0LCBjbGFzc2VzKTsKIH0KIAotaW50IGF0YV9kb19yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkgYXRhX3Jlc2V0X2ZuX3QgcmVzZXQsIGF0YV9wb3N0cmVzZXRfZm5fdCBwb3N0cmVzZXQsCi0JCSBpbnQgdmVyYm9zZSwgdW5zaWduZWQgaW50ICpjbGFzc2VzKQoraW50IGF0YV9kb19yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBhdGFfcmVzZXRfZm5fdCByZXNldCwKKwkJIGF0YV9wb3N0cmVzZXRfZm5fdCBwb3N0cmVzZXQsIHVuc2lnbmVkIGludCAqY2xhc3NlcykKIHsKIAlpbnQgaSwgcmM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspCiAJCWNsYXNzZXNbaV0gPSBBVEFfREVWX1VOS05PV047CiAKLQlyYyA9IHJlc2V0KGFwLCB2ZXJib3NlLCBjbGFzc2VzKTsKKwlyYyA9IHJlc2V0KGFwLCBjbGFzc2VzKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjY1OSw4ICsyNjUzLDYgQEAKICAqCS0gSWYgY2xhc3NpZmljYXRpb24gaXMgc3VwcG9ydGVkLCBmaWxsIGNsYXNzZXNbXSB3aXRoCiAgKgkgIHJlY29nbml6ZWQgY2xhc3MgY29kZXMuCiAgKgktIElmIGNsYXNzaWZpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIGxlYXZlIGNsYXNzZXNbXSBhbG9uZS4KLSAqCS0gSWYgdmVyYm9zZSBpcyBub24temVybywgcHJpbnQgZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlOwotICoJICBvdGhlcndpc2UsIHNodXQgdXAuCiAgKgogICoJTE9DS0lORzoKICAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQpAQCAtMjY4MCw3ICsyNjcyLDcgQEAKIAkJcHJvYmVpbml0KGFwKTsKIAogCWlmIChzb2Z0cmVzZXQgJiYgIWF0YV9zZXRfc2F0YV9zcGRfbmVlZGVkKGFwKSkgewotCQlyYyA9IGF0YV9kb19yZXNldChhcCwgc29mdHJlc2V0LCBwb3N0cmVzZXQsIDAsIGNsYXNzZXMpOworCQlyYyA9IGF0YV9kb19yZXNldChhcCwgc29mdHJlc2V0LCBwb3N0cmVzZXQsIGNsYXNzZXMpOwogCQlpZiAocmMgPT0gMCAmJiBjbGFzc2VzWzBdICE9IEFUQV9ERVZfVU5LTk9XTikKIAkJCWdvdG8gZG9uZTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHNvZnRyZXNldCBmYWlsZWQsIHdpbGwgdHJ5ICIKQEAgLTI2OTIsNyArMjY4NCw3IEBACiAJCWdvdG8gZG9uZTsKIAogCXdoaWxlICgxKSB7Ci0JCXJjID0gYXRhX2RvX3Jlc2V0KGFwLCBoYXJkcmVzZXQsIHBvc3RyZXNldCwgMCwgY2xhc3Nlcyk7CisJCXJjID0gYXRhX2RvX3Jlc2V0KGFwLCBoYXJkcmVzZXQsIHBvc3RyZXNldCwgY2xhc3Nlcyk7CiAJCWlmIChyYyA9PSAwKSB7CiAJCQlpZiAoY2xhc3Nlc1swXSAhPSBBVEFfREVWX1VOS05PV04pCiAJCQkJZ290byBkb25lOwpAQCAtMjcxMyw3ICsyNzA1LDcgQEAKIAkJICAgICAgIGFwLT5pZCk7CiAJCXNzbGVlcCg1KTsKIAotCQlyYyA9IGF0YV9kb19yZXNldChhcCwgc29mdHJlc2V0LCBwb3N0cmVzZXQsIDAsIGNsYXNzZXMpOworCQlyYyA9IGF0YV9kb19yZXNldChhcCwgc29mdHJlc2V0LCBwb3N0cmVzZXQsIGNsYXNzZXMpOwogCX0KIAogIGRvbmU6CkBAIC00ODQ2LDcgKzQ4MzgsNyBAQAogCiAJaG9zdC0+dHJhbnNwb3J0dCA9ICZhdGFfc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CiAKLQlhcCA9IChzdHJ1Y3QgYXRhX3BvcnQgKikgJmhvc3QtPmhvc3RkYXRhWzBdOworCWFwID0gYXRhX3Nob3N0X3RvX3BvcnQoaG9zdCk7CiAKIAlhdGFfaG9zdF9pbml0KGFwLCBob3N0LCBob3N0X3NldCwgZW50LCBwb3J0X25vKTsKIApAQCAtNTA1OSw3ICs1MDUxLDcgQEAKIAogaW50IGF0YV9zY3NpX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KGhvc3QpOwogCWludCBpOwogCiAJRFBSSU5USygiRU5URVJcbiIpOwpAQCAtNTIyNiw2ICs1MjE4LDUyIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqCWF0YV93YWl0X3JlZ2lzdGVyIC0gd2FpdCB1bnRpbCByZWdpc3RlciB2YWx1ZSBjaGFuZ2VzCisgKglAcmVnOiBJTy1tYXBwZWQgcmVnaXN0ZXIKKyAqCUBtYXNrOiBNYXNrIHRvIGFwcGx5IHRvIHJlYWQgcmVnaXN0ZXIgdmFsdWUKKyAqCUB2YWw6IFdhaXQgY29uZGl0aW9uCisgKglAaW50ZXJ2YWxfbXNlYzogcG9sbGluZyBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMKKyAqCUB0aW1lb3V0X21zZWM6IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzCisgKgorICoJV2FpdGluZyBmb3Igc29tZSBiaXRzIG9mIHJlZ2lzdGVyIHRvIGNoYW5nZSBpcyBhIGNvbW1vbgorICoJb3BlcmF0aW9uIGZvciBBVEEgY29udHJvbGxlcnMuICBUaGlzIGZ1bmN0aW9uIHJlYWRzIDMyYml0IExFCisgKglJTy1tYXBwZWQgcmVnaXN0ZXIgQHJlZyBhbmQgdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uLgorICoKKyAqCSgqQHJlZyAmIG1hc2spICE9IHZhbAorICoKKyAqCUlmIHRoZSBjb25kaXRpb24gaXMgbWV0LCBpdCByZXR1cm5zOyBvdGhlcndpc2UsIHRoZSBwcm9jZXNzIGlzCisgKglyZXBlYXRlZCBhZnRlciBAaW50ZXJ2YWxfbXNlYyB1bnRpbCB0aW1lb3V0LgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKKyAqCisgKglSRVRVUk5TOgorICoJVGhlIGZpbmFsIHJlZ2lzdGVyIHZhbHVlLgorICovCit1MzIgYXRhX3dhaXRfcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1MzIgdmFsLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGludGVydmFsX21zZWMsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tc2VjKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MzIgdG1wOworCisJdG1wID0gaW9yZWFkMzIocmVnKTsKKworCS8qIENhbGN1bGF0ZSB0aW1lb3V0IF9hZnRlcl8gdGhlIGZpcnN0IHJlYWQgdG8gbWFrZSBzdXJlCisJICogcHJlY2VkaW5nIHdyaXRlcyByZWFjaCB0aGUgY29udHJvbGxlciBiZWZvcmUgc3RhcnRpbmcgdG8KKwkgKiBlYXQgYXdheSB0aGUgdGltZW91dC4KKwkgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArICh0aW1lb3V0X21zZWMgKiBIWikgLyAxMDAwOworCisJd2hpbGUgKCh0bXAgJiBtYXNrKSA9PSB2YWwgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJbXNsZWVwKGludGVydmFsX21zZWMpOworCQl0bXAgPSBpb3JlYWQzMihyZWcpOworCX0KKworCXJldHVybiB0bXA7Cit9CisKIC8qCiAgKiBsaWJhdGEgaXMgZXNzZW50aWFsbHkgYSBsaWJyYXJ5IG9mIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgZm9yCiAgKiBsb3ctbGV2ZWwgQVRBIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiAgQXMgc3VjaCwgdGhlIEFQSS9BQkkgaXMKQEAgLTUyNjIsNiArNTMwMCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfYm1kbWFfc3RhdHVzKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9zdG9wKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wb3J0X3Byb2JlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZXRfc2F0YV9zcGQpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9waHlfcmVzZXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoX19zYXRhX3BoeV9yZXNldCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfYnVzX3Jlc2V0KTsKQEAgLTUyNzYsNiArNTMxNSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZGV2X3BhaXIpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BvcnRfZGlzYWJsZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcmF0ZWxpbWl0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV93YWl0X3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9idXN5X3NsZWVwKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wb3J0X3F1ZXVlX3Rhc2spOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfaW9jdGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1laC5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1laC5jCmluZGV4IDlhOGVlYTEuLjE2ZGI2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWVoLmMKQEAgLTY0LDcgKzY0LDcgQEAKIGVudW0gc2NzaV9laF90aW1lcl9yZXR1cm4gYXRhX3Njc2lfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY21kLT5kZXZpY2UtPmhvc3Q7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IChzdHJ1Y3QgYXRhX3BvcnQgKikgJmhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChob3N0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAJZW51bSBzY3NpX2VoX3RpbWVyX3JldHVybiByZXQgPSBFSF9IQU5ETEVEOwpAQCAtOTcsOSArOTcsOSBAQAogICoJUkVUVVJOUzoKICAqCVplcm8uCiAgKi8KLWludCBhdGFfc2NzaV9lcnJvcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQordm9pZCBhdGFfc2NzaV9lcnJvcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQogewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSAoc3RydWN0IGF0YV9wb3J0ICopJmhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChob3N0KTsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKIApAQCAtMTE2LDcgKzExNiw2IEBACiAJc2NzaV9laF9mbHVzaF9kb25lX3EoJmFwLT5laF9kb25lX3EpOwogCiAJRFBSSU5USygiRVhJVFxuIik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwppbmRleCBjOWMwMDE0Li45ODcxZjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwpAQCAtOTgsNiArOTgsNyBAQAogICogSXQganVzdCBuZWVkcyB0aGUgZWhfdGltZWRfb3V0IGhvb2suCiAgKi8KIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSBhdGFfc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgPSB7CisJLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuZWhfdGltZWRfb3V0CQk9IGF0YV9zY3NpX3RpbWVkX291dCwKIH07CiAKQEAgLTM5NCw3ICszOTUsNyBAQAogCiBpbnQgYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IChzdHJ1Y3QgYXRhX3BvcnQgKikgJnNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzZGV2LT5ob3N0KTsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2Vbc2Rldi0+aWRdOwogCiAJcmV0dXJuIGF0YV9kZXZpY2VfcmVzdW1lKGFwLCBkZXYpOwpAQCAtNDAyLDcgKzQwMyw3IEBACiAKIGludCBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmc2Rldi0+aG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNkZXYtPmhvc3QpOwogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmRldmljZVtzZGV2LT5pZF07CiAKIAlyZXR1cm4gYXRhX2RldmljZV9zdXNwZW5kKGFwLCBkZXYsIHN0YXRlKTsKQEAgLTcwMyw3ICs3MDQsNyBAQAogCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwogCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCi0JCWFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmc2Rldi0+aG9zdC0+aG9zdGRhdGFbMF07CisJCWFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2Rldi0+aG9zdCk7CiAJCWRldiA9ICZhcC0+ZGV2aWNlW3NkZXYtPmlkXTsKIAogCQlhdGFfc2NzaV9kZXZfY29uZmlnKHNkZXYsIGRldik7CkBAIC0yNDc3LDcgKzI0NzgsNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRldiA9IGNtZC0+ZGV2aWNlOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2NzaWRldi0+aG9zdDsKIAotCWFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmc2hvc3QtPmhvc3RkYXRhWzBdOworCWFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2hvc3QpOwogCiAJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJc3Bpbl9sb2NrKCZhcC0+aG9zdF9zZXQtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS5oIGIvZHJpdmVycy9zY3NpL2xpYmF0YS5oCmluZGV4IDY1MmMwOGUuLjNmOGIwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEuaAorKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLmgKQEAgLTU2LDEwICs1Niw4IEBACiBleHRlcm4gaW50IGF0YV9kb3duX3hmZXJtYXNrX2xpbWl0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCiAJCQkJICAgaW50IGZvcmNlX3BpbzApOwogZXh0ZXJuIGludCBhdGFfc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKipyX2ZhaWxlZF9kZXYpOwotZXh0ZXJuIGludCBhdGFfZG9fcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJCWF0YV9yZXNldF9mbl90IHJlc2V0LAotCQkJYXRhX3Bvc3RyZXNldF9mbl90IHBvc3RyZXNldCwKLQkJCWludCB2ZXJib3NlLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOworZXh0ZXJuIGludCBhdGFfZG9fcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgYXRhX3Jlc2V0X2ZuX3QgcmVzZXQsCisJCQlhdGFfcG9zdHJlc2V0X2ZuX3QgcG9zdHJlc2V0LCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOwogZXh0ZXJuIHZvaWQgYXRhX3FjX2ZyZWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaW50IGF0YV9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CkBAIC0xMDUsNSArMTAzLDYgQEAKIAogLyogbGliYXRhLWVoLmMgKi8KIGV4dGVybiBlbnVtIHNjc2lfZWhfdGltZXJfcmV0dXJuIGF0YV9zY3NpX3RpbWVkX291dChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOworZXh0ZXJuIHZvaWQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCk7CiAKICNlbmRpZiAvKiBfX0xJQkFUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKaW5kZXggMWZjYTZmMS4uYTM0MWZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKQEAgLTE0Myw3ICsxNDMsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwppbmRleCBmZDlmMjE3Li4wODY2NWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKQEAgLTM3OCw3ICszNzgsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IE1WX1VTRV9RX0RFUFRILAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IE1WX01BWF9TR19DVCAvIDIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwppbmRleCAzYTAwMDRjLi43MGM1MTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKQEAgLTIwMSw3ICsyMDEsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKaW5kZXggMDNjNjQ3Yy4uYWFmODk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCmluZGV4IDFiN2E5MzEuLjU0MjgzZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYwpAQCAtMTMyLDcgKzEzMiw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBRU19NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYwppbmRleCBmMjljM2U3Li5jOTMzMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCmluZGV4IDY0Njc1NmEuLmU5ZmQ4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwpAQCAtODYsNiArODYsMTMgQEAKIAkvKiBIT1NUX1NMT1RfU1RBVCBiaXRzICovCiAJSE9TVF9TU1RBVF9BVFROCQk9ICgxIDw8IDMxKSwKIAorCS8qIEhPU1RfQ1RSTCBiaXRzICovCisJSE9TVF9DVFJMX002NkVOCQk9ICgxIDw8IDE2KSwgLyogTTY2RU4gUENJIGJ1cyBzaWduYWwgKi8KKwlIT1NUX0NUUkxfVFJEWQkJPSAoMSA8PCAxNyksIC8qIGxhdGNoZWQgUENJIFRSRFkgKi8KKwlIT1NUX0NUUkxfU1RPUAkJPSAoMSA8PCAxOCksIC8qIGxhdGNoZWQgUENJIFNUT1AgKi8KKwlIT1NUX0NUUkxfREVWU0VMCT0gKDEgPDwgMTkpLCAvKiBsYXRjaGVkIFBDSSBERVZTRUwgKi8KKwlIT1NUX0NUUkxfUkVRNjQJCT0gKDEgPDwgMjApLCAvKiBsYXRjaGVkIFBDSSBSRVE2NCAqLworCiAJLyoKIAkgKiBQb3J0IHJlZ2lzdGVycwogCSAqICg4MTkyIGJ5dGVzIEAgKzB4MDAwMCwgKzB4MjAwMCwgKzB4NDAwMCBhbmQgKzB4NjAwMCBAIEJBUjIpCkBAIC0xNDIsOCArMTQ5LDEyIEBACiAJUE9SVF9JUlFfUFdSX0NIRwk9ICgxIDw8IDMpLCAvKiBwb3dlciBtYW5hZ2VtZW50IGNoYW5nZSAqLwogCVBPUlRfSVJRX1BIWVJEWV9DSEcJPSAoMSA8PCA0KSwgLyogUEhZIHJlYWR5IGNoYW5nZSAqLwogCVBPUlRfSVJRX0NPTVdBS0UJPSAoMSA8PCA1KSwgLyogQ09NV0FLRSByZWNlaXZlZCAqLwotCVBPUlRfSVJRX1VOS19GSVMJPSAoMSA8PCA2KSwgLyogVW5rbm93biBGSVMgcmVjZWl2ZWQgKi8KLQlQT1JUX0lSUV9TREJfRklTCT0gKDEgPDwgMTEpLCAvKiBTREIgRklTIHJlY2VpdmVkICovCisJUE9SVF9JUlFfVU5LX0ZJUwk9ICgxIDw8IDYpLCAvKiB1bmtub3duIEZJUyByZWNlaXZlZCAqLworCVBPUlRfSVJRX0RFVl9YQ0hHCT0gKDEgPDwgNyksIC8qIGRldmljZSBleGNoYW5nZWQgKi8KKwlQT1JUX0lSUV84QjEwQgkJPSAoMSA8PCA4KSwgLyogOGIvMTBiIGRlY29kZSBlcnJvciB0aHJlc2hvbGQgKi8KKwlQT1JUX0lSUV9DUkMJCT0gKDEgPDwgOSksIC8qIENSQyBlcnJvciB0aHJlc2hvbGQgKi8KKwlQT1JUX0lSUV9IQU5EU0hBS0UJPSAoMSA8PCAxMCksIC8qIGhhbmRzaGFrZSBlcnJvciB0aHJlc2hvbGQgKi8KKwlQT1JUX0lSUV9TREJfTk9USUZZCT0gKDEgPDwgMTEpLCAvKiBTREIgbm90aWZ5IHJlY2VpdmVkICovCiAKIAkvKiBiaXRzWzI3OjE2XSBhcmUgdW5tYXNrZWQgKHJhdykgKi8KIAlQT1JUX0lSUV9SQVdfU0hJRlQJPSAxNiwKQEAgLTE3NCw3ICsxODUsNyBAQAogCVBPUlRfQ0VSUl9DTURfUENJUEVSUgk9IDI3LCAvKiBjdHJsWzE1OjEzXSAxMTAgLSBQQ0kgcGFyaXR5IGVyciB3aGlsZSBmZXRjaGluZyBQUkIgKi8KIAlQT1JUX0NFUlJfWEZSX1VOREVGCT0gMzIsIC8qIFBTRCBlY29kZSAwMCAtIHVuZGVmaW5lZCAqLwogCVBPUlRfQ0VSUl9YRlJfVEdUQUJSVAk9IDMzLCAvKiBQU0QgZWNvZGUgMDEgLSB0YXJnZXQgYWJvcnQgKi8KLQlQT1JUX0NFUlJfWEZSX01TR0FCUlQJPSAzNCwgLyogUFNEIGVjb2RlIDEwIC0gbWFzdGVyIGFib3J0ICovCisJUE9SVF9DRVJSX1hGUl9NU1RBQlJUCT0gMzQsIC8qIFBTRCBlY29kZSAxMCAtIG1hc3RlciBhYm9ydCAqLwogCVBPUlRfQ0VSUl9YRlJfUENJUEVSUgk9IDM1LCAvKiBQU0QgZWNvZGUgMTEgLSBQQ0kgcHJpdHkgZXJyIGR1cmluZyB0cmFuc2ZlciAqLwogCVBPUlRfQ0VSUl9TRU5EU0VSVklDRQk9IDM2LCAvKiBGSVMgcmVjZWl2ZWQgd2hpbGUgc2VuZGluZyBzZXJ2aWNlICovCiAKQEAgLTIwNyw2ICsyMTgsMTEgQEAKIAlCSURfU0lMMzEzMgkJPSAxLAogCUJJRF9TSUwzMTMxCQk9IDIsCiAKKwkvKiBob3N0IGZsYWdzICovCisJU0lMMjRfQ09NTU9OX0ZMQUdTCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CisJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSwKKwlTSUwyNF9GTEFHX1BDSVhfSVJRX1dPQwk9ICgxIDw8IDI0KSwgLyogSVJRIGxvc3MgZXJyYXRhIG9uIFBDSS1YICovCisKIAlJUlFfU1RBVF80UE9SVFMJCT0gMHhmLAogfTsKIApAQCAtMjgxLDcgKzI5Nyw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKQEAgLTMzNCw5ICszNDksOCBAQAogCS8qIHNpbF8zMTI0ICovCiAJewogCQkuc2h0CQk9ICZzaWwyNF9zaHQsCi0JCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSB8Ci0JCQkJICBTSUwyNF9OUE9SVFMyRkxBRyg0KSwKKwkJLmhvc3RfZmxhZ3MJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRyg0KSB8CisJCQkJICBTSUwyNF9GTEFHX1BDSVhfSVJRX1dPQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCiAJCS51ZG1hX21hc2sJPSAweDNmLAkJCS8qIHVkbWEwLTUgKi8KQEAgLTM0NSw5ICszNTksNyBAQAogCS8qIHNpbF8zMTMyICovCiAJewogCQkuc2h0CQk9ICZzaWwyNF9zaHQsCi0JCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSB8Ci0JCQkJICBTSUwyNF9OUE9SVFMyRkxBRygyKSwKKwkJLmhvc3RfZmxhZ3MJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygyKSwKIAkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCiAJCS51ZG1hX21hc2sJPSAweDNmLAkJCS8qIHVkbWEwLTUgKi8KQEAgLTM1Niw5ICszNjgsNyBAQAogCS8qIHNpbF8zMTMxL3NpbF8zNTMxICovCiAJewogCQkuc2h0CQk9ICZzaWwyNF9zaHQsCi0JCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSB8Ci0JCQkJICBTSUwyNF9OUE9SVFMyRkxBRygxKSwKKwkJLmhvc3RfZmxhZ3MJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygxKSwKIAkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCiAJCS51ZG1hX21hc2sJPSAweDNmLAkJCS8qIHVkbWEwLTUgKi8KQEAgLTQyNywxNSArNDM3LDMwIEBACiAJKnRmID0gcHAtPnRmOwogfQogCi1zdGF0aWMgaW50IHNpbDI0X3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgdmVyYm9zZSwKLQkJCSAgIHVuc2lnbmVkIGludCAqY2xhc3MpCitzdGF0aWMgaW50IHNpbDI0X2luaXRfcG9ydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqcG9ydCA9ICh2b2lkIF9faW9tZW0gKilhcC0+aW9hZGRyLmNtZF9hZGRyOworCXUzMiB0bXA7CisKKwl3cml0ZWwoUE9SVF9DU19JTklULCBwb3J0ICsgUE9SVF9DVFJMX1NUQVQpOworCWF0YV93YWl0X3JlZ2lzdGVyKHBvcnQgKyBQT1JUX0NUUkxfU1RBVCwKKwkJCSAgUE9SVF9DU19JTklULCBQT1JUX0NTX0lOSVQsIDEwLCAxMDApOworCXRtcCA9IGF0YV93YWl0X3JlZ2lzdGVyKHBvcnQgKyBQT1JUX0NUUkxfU1RBVCwKKwkJCQlQT1JUX0NTX1JEWSwgMCwgMTAsIDEwMCk7CisKKwlpZiAoKHRtcCAmIChQT1JUX0NTX0lOSVQgfCBQT1JUX0NTX1JEWSkpICE9IFBPUlRfQ1NfUkRZKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaWwyNF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcykKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnQgPSAodm9pZCBfX2lvbWVtICopYXAtPmlvYWRkci5jbWRfYWRkcjsKIAlzdHJ1Y3Qgc2lsMjRfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNpbDI0X3ByYiAqcHJiID0gJnBwLT5jbWRfYmxvY2tbMF0uYXRhLnByYjsKIAlkbWFfYWRkcl90IHBhZGRyID0gcHAtPmNtZF9ibG9ja19kbWE7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEFUQV9UTU9VVF9CT09UICogSFo7Ci0JdTMyIGlycV9lbmFibGUsIGlycV9zdGF0OworCXUzMiBtYXNrLCBpcnFfZW5hYmxlLCBpcnFfc3RhdDsKKwljb25zdCBjaGFyICpyZWFzb247CiAKIAlEUFJJTlRLKCJFTlRFUlxuIik7CiAKQEAgLTQ0OSwzNCArNDc0LDM1IEBACiAJaXJxX2VuYWJsZSA9IHJlYWRsKHBvcnQgKyBQT1JUX0lSUV9FTkFCTEVfU0VUKTsKIAl3cml0ZWwoaXJxX2VuYWJsZSwgcG9ydCArIFBPUlRfSVJRX0VOQUJMRV9DTFIpOwogCi0JLyoKLQkgKiBYWFg6IE5vdCBzdXJlIHdoZXRoZXIgdGhlIGZvbGxvd2luZyBzbGVlcCBpcyBuZWVkZWQgb3Igbm90LgotCSAqIFRoZSBvcmlnaW5hbCBkcml2ZXIgaGFkIGl0LiAgU28uLi4uCi0JICovCi0JbXNsZWVwKDEwKTsKKwkvKiBwdXQgdGhlIHBvcnQgaW50byBrbm93biBzdGF0ZSAqLworCWlmIChzaWwyNF9pbml0X3BvcnQoYXApKSB7CisJCXJlYXNvbiA9InBvcnQgbm90IHJlYWR5IjsKKwkJZ290byBlcnI7CisJfQogCi0JcHJiLT5jdHJsID0gUFJCX0NUUkxfU1JTVDsKKwkvKiBkbyBTUlNUICovCisJcHJiLT5jdHJsID0gY3B1X3RvX2xlMTYoUFJCX0NUUkxfU1JTVCk7CiAJcHJiLT5maXNbMV0gPSAwOyAvKiBubyBQTSB5ZXQgKi8KIAogCXdyaXRlbCgodTMyKXBhZGRyLCBwb3J0ICsgUE9SVF9DTURfQUNUSVZBVEUpOworCXdyaXRlbCgodTY0KXBhZGRyID4+IDMyLCBwb3J0ICsgUE9SVF9DTURfQUNUSVZBVEUgKyA0KTsKIAotCWRvIHsKLQkJaXJxX3N0YXQgPSByZWFkbChwb3J0ICsgUE9SVF9JUlFfU1RBVCk7Ci0JCXdyaXRlbChpcnFfc3RhdCwgcG9ydCArIFBPUlRfSVJRX1NUQVQpOwkJLyogY2xlYXIgaXJxICovCisJbWFzayA9IChQT1JUX0lSUV9DT01QTEVURSB8IFBPUlRfSVJRX0VSUk9SKSA8PCBQT1JUX0lSUV9SQVdfU0hJRlQ7CisJaXJxX3N0YXQgPSBhdGFfd2FpdF9yZWdpc3Rlcihwb3J0ICsgUE9SVF9JUlFfU1RBVCwgbWFzaywgMHgwLAorCQkJCSAgICAgMTAwLCBBVEFfVE1PVVRfQk9PVCAvIEhaICogMTAwMCk7CiAKLQkJaXJxX3N0YXQgPj49IFBPUlRfSVJRX1JBV19TSElGVDsKLQkJaWYgKGlycV9zdGF0ICYgKFBPUlRfSVJRX0NPTVBMRVRFIHwgUE9SVF9JUlFfRVJST1IpKQotCQkJYnJlYWs7Ci0KLQkJbXNsZWVwKDEwMCk7Ci0JfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOworCXdyaXRlbChpcnFfc3RhdCwgcG9ydCArIFBPUlRfSVJRX1NUQVQpOyAvKiBjbGVhciBJUlFzICovCisJaXJxX3N0YXQgPj49IFBPUlRfSVJRX1JBV19TSElGVDsKIAogCS8qIHJlc3RvcmUgSVJRcyAqLwogCXdyaXRlbChpcnFfZW5hYmxlLCBwb3J0ICsgUE9SVF9JUlFfRU5BQkxFX1NFVCk7CiAKIAlpZiAoIShpcnFfc3RhdCAmIFBPUlRfSVJRX0NPTVBMRVRFKSkgewotCQlEUFJJTlRLKCJFWElULCBzcnN0IGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlPOworCQlpZiAoaXJxX3N0YXQgJiBQT1JUX0lSUV9FUlJPUikKKwkJCXJlYXNvbiA9ICJTUlNUIGNvbW1hbmQgZXJyb3IiOworCQllbHNlCisJCQlyZWFzb24gPSAidGltZW91dCI7CisJCWdvdG8gZXJyOwogCX0KIAogCXNpbDI0X3VwZGF0ZV90ZihhcCk7CkBAIC00ODgsMTUgKzUxNCw1NSBAQAogIG91dDoKIAlEUFJJTlRLKCJFWElULCBjbGFzcz0ldVxuIiwgKmNsYXNzKTsKIAlyZXR1cm4gMDsKKworIGVycjoKKwlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBzb2Z0cmVzZXQgZmFpbGVkICglcylcbiIsIGFwLT5pZCwgcmVhc29uKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGludCBzaWwyNF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHZlcmJvc2UsCi0JCQkgICB1bnNpZ25lZCBpbnQgKmNsYXNzKQorc3RhdGljIGludCBzaWwyNF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcykKIHsKLQl1bnNpZ25lZCBpbnQgZHVtbXlfY2xhc3M7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuY21kX2FkZHI7CisJY29uc3QgY2hhciAqcmVhc29uOworCWludCB0b3V0X21zZWM7CisJdTMyIHRtcDsKIAotCS8qIHNpbDI0IGRvZXNuJ3QgcmVwb3J0IGRldmljZSBzaWduYXR1cmUgYWZ0ZXIgaGFyZCByZXNldCAqLwotCXJldHVybiBzYXRhX3N0ZF9oYXJkcmVzZXQoYXAsIHZlcmJvc2UsICZkdW1teV9jbGFzcyk7CisJLyogc2lsMjQgZG9lcyB0aGUgcmlnaHQgdGhpbmcodG0pIHdpdGhvdXQgYW55IHByb3RlY3Rpb24gKi8KKwlhdGFfc2V0X3NhdGFfc3BkKGFwKTsKKworCXRvdXRfbXNlYyA9IDEwMDsKKwlpZiAoc2F0YV9kZXZfcHJlc2VudChhcCkpCisJCXRvdXRfbXNlYyA9IDUwMDA7CisKKwl3cml0ZWwoUE9SVF9DU19ERVZfUlNULCBwb3J0ICsgUE9SVF9DVFJMX1NUQVQpOworCXRtcCA9IGF0YV93YWl0X3JlZ2lzdGVyKHBvcnQgKyBQT1JUX0NUUkxfU1RBVCwKKwkJCQlQT1JUX0NTX0RFVl9SU1QsIFBPUlRfQ1NfREVWX1JTVCwgMTAsIHRvdXRfbXNlYyk7CisKKwkvKiBTU3RhdHVzIG9zY2lsbGF0ZXMgYmV0d2VlbiB6ZXJvIGFuZCB2YWxpZCBzdGF0dXMgZm9yIHNob3J0CisJICogZHVyYXRpb24gYWZ0ZXIgREVWX1JTVCwgZ2l2ZSBpdCB0aW1lIHRvIHNldHRsZS4KKwkgKi8KKwltc2xlZXAoMTAwKTsKKworCWlmICh0bXAgJiBQT1JUX0NTX0RFVl9SU1QpIHsKKwkJaWYgKCFzYXRhX2Rldl9wcmVzZW50KGFwKSkKKwkJCXJldHVybiAwOworCQlyZWFzb24gPSAibGluayBub3QgcmVhZHkiOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoYXRhX2J1c3lfc2xlZXAoYXAsIEFUQV9UTU9VVF9CT09UX1FVSUNLLCBBVEFfVE1PVVRfQk9PVCkpIHsKKwkJcmVhc29uID0gImRldmljZSBub3QgcmVhZHkiOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBzaWwyNCBkb2Vzbid0IHJlcG9ydCBkZXZpY2UgY2xhc3MgY29kZSBhZnRlciBoYXJkcmVzZXQsCisJICogbGVhdmUgKmNsYXNzIGFsb25lLgorCSAqLworCXJldHVybiAwOworCisgZXJyOgorCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IGhhcmRyZXNldCBmYWlsZWQgKCVzKVxuIiwgYXAtPmlkLCByZWFzb24pOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IHNpbDI0X3Byb2JlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3NlcykKQEAgLTUzMiw2ICs1OTgsNyBAQAogCXVuaW9uIHNpbDI0X2NtZF9ibG9jayAqY2IgPSBwcC0+Y21kX2Jsb2NrICsgcWMtPnRhZzsKIAlzdHJ1Y3Qgc2lsMjRfcHJiICpwcmI7CiAJc3RydWN0IHNpbDI0X3NnZSAqc2dlOworCXUxNiBjdHJsID0gMDsKIAogCXN3aXRjaCAocWMtPnRmLnByb3RvY29sKSB7CiAJY2FzZSBBVEFfUFJPVF9QSU86CkBAIC01MzksNyArNjA2LDYgQEAKIAljYXNlIEFUQV9QUk9UX05PREFUQToKIAkJcHJiID0gJmNiLT5hdGEucHJiOwogCQlzZ2UgPSBjYi0+YXRhLnNnZTsKLQkJcHJiLT5jdHJsID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIEFUQV9QUk9UX0FUQVBJOgpAQCAtNTUyLDEyICs2MTgsMTAgQEAKIAogCQlpZiAocWMtPnRmLnByb3RvY29sICE9IEFUQV9QUk9UX0FUQVBJX05PREFUQSkgewogCQkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkKLQkJCQlwcmItPmN0cmwgPSBQUkJfQ1RSTF9QQUNLRVRfV1JJVEU7CisJCQkJY3RybCA9IFBSQl9DVFJMX1BBQ0tFVF9XUklURTsKIAkJCWVsc2UKLQkJCQlwcmItPmN0cmwgPSBQUkJfQ1RSTF9QQUNLRVRfUkVBRDsKLQkJfSBlbHNlCi0JCQlwcmItPmN0cmwgPSAwOwotCisJCQkJY3RybCA9IFBSQl9DVFJMX1BBQ0tFVF9SRUFEOworCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTU2Niw2ICs2MzAsNyBAQAogCQlCVUcoKTsKIAl9CiAKKwlwcmItPmN0cmwgPSBjcHVfdG9fbGUxNihjdHJsKTsKIAlhdGFfdGZfdG9fZmlzKCZxYy0+dGYsIHByYi0+ZmlzLCAwKTsKIAogCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkKQEAgLTU4MCw2ICs2NDUsOCBAQAogCWRtYV9hZGRyX3QgcGFkZHIgPSBwcC0+Y21kX2Jsb2NrX2RtYSArIHFjLT50YWcgKiBzaXplb2YoKnBwLT5jbWRfYmxvY2spOwogCiAJd3JpdGVsKCh1MzIpcGFkZHIsIHBvcnQgKyBQT1JUX0NNRF9BQ1RJVkFURSk7CisJd3JpdGVsKCh1NjQpcGFkZHIgPj4gMzIsIHBvcnQgKyBQT1JUX0NNRF9BQ1RJVkFURSArIDQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcyOCw2ICs3OTUsMTAgQEAKIAlzbG90X3N0YXQgPSByZWFkbChwb3J0ICsgUE9SVF9TTE9UX1NUQVQpOwogCWlmICghKHNsb3Rfc3RhdCAmIEhPU1RfU1NUQVRfQVRUTikpIHsKIAkJc3RydWN0IHNpbDI0X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCisJCWlmIChhcC0+ZmxhZ3MgJiBTSUwyNF9GTEFHX1BDSVhfSVJRX1dPQykKKwkJCXdyaXRlbChQT1JUX0lSUV9DT01QTEVURSwgcG9ydCArIFBPUlRfSVJRX1NUQVQpOworCiAJCS8qCiAJCSAqICFIT1NUX1NTQVRfQVRUTiBndWFyYW50ZWVzIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwKIAkJICogc28gcmVhZGluZyBiYWNrIHRmIHJlZ2lzdGVycyBpcyB1bm5lY2Vzc2FyeSBmb3IKQEAgLTg1OSw2ICs5MzAsNyBAQAogCXZvaWQgX19pb21lbSAqaG9zdF9iYXNlID0gTlVMTDsKIAl2b2lkIF9faW9tZW0gKnBvcnRfYmFzZSA9IE5VTEw7CiAJaW50IGksIHJjOworCXUzMiB0bXA7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CkBAIC05MTEsMzUgKzk4Myw1MSBAQAogCS8qCiAJICogQ29uZmlndXJlIHRoZSBkZXZpY2UKIAkgKi8KLQkvKgotCSAqIEZJWE1FOiBUaGlzIGRldmljZSBpcyBjZXJ0YWlubHkgNjQtYml0IGNhcGFibGUuICBXZSBqdXN0Ci0JICogZG9uJ3Qga25vdyBob3cgdG8gdXNlIGl0LiAgQWZ0ZXIgZml4aW5nIDMyYml0IGFjdGl2YXRpb24gaW4KLQkgKiB0aGlzIGZ1bmN0aW9uLCBlbmFibGUgNjRiaXQgbWFza3MgaGVyZS4KLQkgKi8KLQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmIChyYykgewotCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAotCQkJICAgIjMyLWJpdCBETUEgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQlpZiAocmMpIHsKLQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKLQkJCSAgICIzMi1iaXQgY29uc2lzdGVudCBETUEgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgeworCQlyYyA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJCWlmIChyYykgeworCQkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQkJaWYgKHJjKSB7CisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKKwkJCQkJICAgIjY0LWJpdCBETUEgZW5hYmxlIGZhaWxlZFxuIik7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJCWlmIChyYykgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKKwkJCQkgICAiMzItYml0IERNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAocmMpIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkJICAgIjMyLWJpdCBjb25zaXN0ZW50IERNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KIAl9CiAKIAkvKiBHUElPIG9mZiAqLwogCXdyaXRlbCgwLCBob3N0X2Jhc2UgKyBIT1NUX0ZMQVNIX0NNRCk7CiAKLQkvKiBNYXNrIGludGVycnVwdHMgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCisJLyogQXBwbHkgd29ya2Fyb3VuZCBmb3IgY29tcGxldGlvbiBJUlEgbG9zcyBvbiBQQ0ktWCBlcnJhdGEgKi8KKwlpZiAocHJvYmVfZW50LT5ob3N0X2ZsYWdzICYgU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MpIHsKKwkJdG1wID0gcmVhZGwoaG9zdF9iYXNlICsgSE9TVF9DVFJMKTsKKwkJaWYgKHRtcCAmIChIT1NUX0NUUkxfVFJEWSB8IEhPU1RfQ1RSTF9TVE9QIHwgSE9TVF9DVFJMX0RFVlNFTCkpCisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKKwkJCQkgICAiQXBwbHlpbmcgY29tcGxldGlvbiBJUlEgbG9zcyBvbiBQQ0ktWCAiCisJCQkJICAgImVycmF0YSBmaXhcbiIpOworCQllbHNlCisJCQlwcm9iZV9lbnQtPmhvc3RfZmxhZ3MgJj0gflNJTDI0X0ZMQUdfUENJWF9JUlFfV09DOworCX0KKworCS8qIGNsZWFyIGdsb2JhbCByZXNldCAmIG1hc2sgaW50ZXJydXB0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KIAl3cml0ZWwoMCwgaG9zdF9iYXNlICsgSE9TVF9DVFJMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwcm9iZV9lbnQtPm5fcG9ydHM7IGkrKykgewogCQl2b2lkIF9faW9tZW0gKnBvcnQgPSBwb3J0X2Jhc2UgKyBpICogUE9SVF9SRUdTX1NJWkU7CiAJCXVuc2lnbmVkIGxvbmcgcG9ydHUgPSAodW5zaWduZWQgbG9uZylwb3J0OwotCQl1MzIgdG1wOwotCQlpbnQgY250OwogCiAJCXByb2JlX2VudC0+cG9ydFtpXS5jbWRfYWRkciA9IHBvcnR1ICsgUE9SVF9QUkI7CiAJCXByb2JlX2VudC0+cG9ydFtpXS5zY3JfYWRkciA9IHBvcnR1ICsgUE9SVF9TQ09OVFJPTDsKQEAgLTk1MywxOCArMTA0MSwyMCBAQAogCQl0bXAgPSByZWFkbChwb3J0ICsgUE9SVF9DVFJMX1NUQVQpOwogCQlpZiAodG1wICYgUE9SVF9DU19QT1JUX1JTVCkgewogCQkJd3JpdGVsKFBPUlRfQ1NfUE9SVF9SU1QsIHBvcnQgKyBQT1JUX0NUUkxfQ0xSKTsKLQkJCXJlYWRsKHBvcnQgKyBQT1JUX0NUUkxfU1RBVCk7CS8qIHN5bmMgKi8KLQkJCWZvciAoY250ID0gMDsgY250IDwgMTA7IGNudCsrKSB7Ci0JCQkJbXNsZWVwKDEwKTsKLQkJCQl0bXAgPSByZWFkbChwb3J0ICsgUE9SVF9DVFJMX1NUQVQpOwotCQkJCWlmICghKHRtcCAmIFBPUlRfQ1NfUE9SVF9SU1QpKQotCQkJCQlicmVhazsKLQkJCX0KKwkJCXRtcCA9IGF0YV93YWl0X3JlZ2lzdGVyKHBvcnQgKyBQT1JUX0NUUkxfU1RBVCwKKwkJCQkJCVBPUlRfQ1NfUE9SVF9SU1QsCisJCQkJCQlQT1JUX0NTX1BPUlRfUlNULCAxMCwgMTAwKTsKIAkJCWlmICh0bXAgJiBQT1JUX0NTX1BPUlRfUlNUKQogCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCiAJCQkJICAgICAgICAgICAiZmFpbGVkIHRvIGNsZWFyIHBvcnQgUlNUXG4iKTsKIAkJfQogCisJCS8qIENvbmZpZ3VyZSBJUlEgV29DICovCisJCWlmIChwcm9iZV9lbnQtPmhvc3RfZmxhZ3MgJiBTSUwyNF9GTEFHX1BDSVhfSVJRX1dPQykKKwkJCXdyaXRlbChQT1JUX0NTX0lSUV9XT0MsIHBvcnQgKyBQT1JUX0NUUkxfU1RBVCk7CisJCWVsc2UKKwkJCXdyaXRlbChQT1JUX0NTX0lSUV9XT0MsIHBvcnQgKyBQT1JUX0NUUkxfQ0xSKTsKKwogCQkvKiBaZXJvIGVycm9yIGNvdW50ZXJzLiAqLwogCQl3cml0ZWwoMHg4MDAwLCBwb3J0ICsgUE9SVF9ERUNPREVfRVJSX1RIUkVTSCk7CiAJCXdyaXRlbCgweDgwMDAsIHBvcnQgKyBQT1JUX0NSQ19FUlJfVEhSRVNIKTsKQEAgLTk3MywxNCArMTA2MywxMyBAQAogCQl3cml0ZWwoMHgwMDAwLCBwb3J0ICsgUE9SVF9DUkNfRVJSX0NOVCk7CiAJCXdyaXRlbCgweDAwMDAsIHBvcnQgKyBQT1JUX0hTSEtfRVJSX0NOVCk7CiAKLQkJLyogRklYTUU6IDMyYml0IGFjdGl2YXRpb24/ICovCi0JCXdyaXRlbCgwLCBwb3J0ICsgUE9SVF9BQ1RJVkFURV9VUFBFUl9BRERSKTsKLQkJd3JpdGVsKFBPUlRfQ1NfMzJCSVRfQUNUViwgcG9ydCArIFBPUlRfQ1RSTF9TVEFUKTsKKwkJLyogQWx3YXlzIHVzZSA2NGJpdCBhY3RpdmF0aW9uICovCisJCXdyaXRlbChQT1JUX0NTXzMyQklUX0FDVFYsIHBvcnQgKyBQT1JUX0NUUkxfQ0xSKTsKIAogCQkvKiBDb25maWd1cmUgaW50ZXJydXB0cyAqLwogCQl3cml0ZWwoMHhmZmZmLCBwb3J0ICsgUE9SVF9JUlFfRU5BQkxFX0NMUik7Ci0JCXdyaXRlbChQT1JUX0lSUV9DT01QTEVURSB8IFBPUlRfSVJRX0VSUk9SIHwgUE9SVF9JUlFfU0RCX0ZJUywKLQkJICAgICAgIHBvcnQgKyBQT1JUX0lSUV9FTkFCTEVfU0VUKTsKKwkJd3JpdGVsKFBPUlRfSVJRX0NPTVBMRVRFIHwgUE9SVF9JUlFfRVJST1IgfAorCQkgICAgICAgUE9SVF9JUlFfU0RCX05PVElGWSwgcG9ydCArIFBPUlRfSVJRX0VOQUJMRV9TRVQpOwogCiAJCS8qIENsZWFyIGludGVycnVwdHMgKi8KIAkJd3JpdGVsKDB4MGZmZjBmZmYsIHBvcnQgKyBQT1JUX0lSUV9TVEFUKTsKQEAgLTk4OCwxMSArMTA3Nyw2IEBACiAKIAkJLyogQ2xlYXIgcG9ydCBtdWx0aXBsaWVyIGVuYWJsZSBhbmQgcmVzdW1lIGJpdHMgKi8KIAkJd3JpdGVsKFBPUlRfQ1NfUE1fRU4gfCBQT1JUX0NTX1JFU1VNRSwgcG9ydCArIFBPUlRfQ1RSTF9DTFIpOwotCi0JCS8qIFJlc2V0IGl0c2VsZiAqLwotCQlpZiAoX19zaWwyNF9yZXNldF9jb250cm9sbGVyKHBvcnQpKQotCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKLQkJCSAgICAgICAgICAgImZhaWxlZCB0byByZXNldCBjb250cm9sbGVyXG4iKTsKIAl9CiAKIAkvKiBUdXJuIG9uIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKaW5kZXggZWIzY2Y1Yi4uMzA5NzgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKQEAgLTg3LDcgKzg3LDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IEFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwppbmRleCBhMjBiYzgxLi5kNWViNTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJaW50IGxlbiwgaW5kZXg7CiAKIAkvKiBGaW5kICB0aGUgYXRhX3BvcnQgKi8KLQlhcCA9IChzdHJ1Y3QgYXRhX3BvcnQgKikgJnNob3N0LT5ob3N0ZGF0YVswXTsKKwlhcCA9IGF0YV9zaG9zdF90b19wb3J0KHNob3N0KTsKIAlpZiAoYXAgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI5MCw3ICsyOTAsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCmluZGV4IDEzZGJhNjMuLjRjMDdiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCkBAIC0xODIsNyArMTgyLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwppbmRleCA1MTNkZDc4Li4xNWY4MWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwpAQCAtODEsNyArODEsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCmluZGV4IGRlNGUwZWIuLjE3YWVmYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCkBAIC05NCw3ICs5NCw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKaW5kZXggYjdkNmEzMS4uMDM3MmJlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKQEAgLTI3MCw3ICsyNzAsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCA1ZjBmZGZiLi4xYzc1NjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTE1MzcsOCArMTUzNyw4IEBACiAJCSAqIHdoYXQgd2UgbmVlZCB0byBkbyB0byBnZXQgaXQgdXAgYW5kIG9ubGluZSBhZ2FpbiAoaWYgd2UgY2FuKS4KIAkJICogSWYgd2UgZmFpbCwgd2UgZW5kIHVwIHRha2luZyB0aGUgdGhpbmcgb2ZmbGluZS4KIAkJICovCi0JCWlmIChzaG9zdC0+aG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIpIAotCQkJc2hvc3QtPmhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKHNob3N0KTsKKwkJaWYgKHNob3N0LT50cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKQorCQkJc2hvc3QtPnRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoc2hvc3QpOwogCQllbHNlCiAJCQlzY3NpX3VuamFtX2hvc3Qoc2hvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL2lvYzMuYyBiL2RyaXZlcnMvc24vaW9jMy5jCmluZGV4IDkzNDQ5YTEuLjBiNDlmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc24vaW9jMy5jCisrKyBiL2RyaXZlcnMvc24vaW9jMy5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTYxOSw5ICs2MjAsOSBAQAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAjaWZkZWYgVVNFXzY0QklUX0RNQQotICAgICAgICByZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCk7CisgICAgICAgIHJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOwogICAgICAgICBpZiAoIXJldCkgewotICAgICAgICAgICAgICAgIHJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpOworICAgICAgICAgICAgICAgIHJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CiAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gb2J0YWluIDY0IGJpdCBETUEgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA0OTVkYjU3Li41Y2YyYjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0yOCw2ICsyOCw3IEBACiAgIDIwMDUtMDktMTAgIHYwLjQuMyBhZGRlZCBIVUFXRUkgRTYwMCBjYXJkIGFuZCBBdWRpb3ZveCBBaXJDYXJkCiAgIDIwMDUtMDktMjAgIHYwLjQuNCBpbmNyZWFzZWQgcmVjdiBidWZmZXIgc2l6ZTogdGhlIGNhcmQgc29tZXRpbWVzCiAgICAgICAgICAgICAgICAgICAgICB3YW50cyB0byBzZW5kID4yMDAwIGJ5dGVzLgorICAyMDA2LTA0LTEwICB2MC40LjIgZml4ZWQgdHdvIGFycmF5IG92ZXJydW4gZXJyb3JzIDotLwogCiAgIFdvcmsgc3BvbnNvcmVkIGJ5OiBTaWdvcyBHbWJILCBHZXJtYW55IDxpbmZvQHNpZ29zLmRlPgogCkBAIC01ODIsMTQgKzU4MywxNCBAQAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJLyogRG8gaW5kYXQgZW5kcG9pbnRzIGZpcnN0ICovCi0JZm9yIChqID0gMDsgaiA8PSBOX0lOX1VSQjsgKytqKSB7CisJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyArK2opIHsKIAkJcG9ydGRhdGEtPmluX3VyYnNbal0gPSBvcHRpb25fc2V0dXBfdXJiIChzZXJpYWwsCiAgICAgICAgICAgICAgICAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcywgVVNCX0RJUl9JTiwgcG9ydCwKICAgICAgICAgICAgICAgICAgIHBvcnRkYXRhLT5pbl9idWZmZXJbal0sIElOX0JVRkxFTiwgb3B0aW9uX2luZGF0X2NhbGxiYWNrKTsKIAl9CiAKIAkvKiBvdXRkYXQgZW5kcG9pbnRzICovCi0JZm9yIChqID0gMDsgaiA8PSBOX09VVF9VUkI7ICsraikgeworCWZvciAoaiA9IDA7IGogPCBOX09VVF9VUkI7ICsraikgewogCQlwb3J0ZGF0YS0+b3V0X3VyYnNbal0gPSBvcHRpb25fc2V0dXBfdXJiIChzZXJpYWwsCiAgICAgICAgICAgICAgICAgICBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MsIFVTQl9ESVJfT1VULCBwb3J0LAogICAgICAgICAgICAgICAgICAgcG9ydGRhdGEtPm91dF9idWZmZXJbal0sIE9VVF9CVUZMRU4sIG9wdGlvbl9vdXRkYXRfY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IGY4N2MwMTcuLjkwNjBlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTk2MSw3ICs5NjEsNyBAQAogCiBjb25maWcgRkJfQVRZCiAJdHJpc3RhdGUgIkFUSSBNYWNoNjQgZGlzcGxheSBzdXBwb3J0IiBpZiBQQ0kgfHwgQVRBUkkKLQlkZXBlbmRzIG9uIEZCCisJZGVwZW5kcyBvbiBGQiAmJiAhU1BBUkMzMgogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCBiMzllNzJkLi5kOWQ3ZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0zNDAwLDcgKzM0MDAsNyBAQAogCXN0cnVjdCBhdHlmYl9wYXIgKnBhcjsKIAlpbnQgaSwgcmMgPSAtRU5PTUVNOwogCi0JZm9yIChpID0gQVJSQVlfU0laRShhdHlfY2hpcHMpOyBpID49IDA7IGktLSkKKwlmb3IgKGkgPSBBUlJBWV9TSVpFKGF0eV9jaGlwcykgLSAxOyBpID49IDA7IGktLSkKIAkJaWYgKHBkZXYtPmRldmljZSA9PSBhdHlfY2hpcHNbaV0ucGNpX2lkKQogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCA5NDQ4NTViLi44ZDhlYWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC00MzUsNiArNDM1LDExIEBACiAJCQlkZXB0aCA9IGluZm8tPnZhci5ncmVlbi5sZW5ndGg7CiAJfQogCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUikgeworCQkvKiBhc3N1bWUgY29uc29sZSBjb2xvcm1hcCAqLworCQlkZXB0aCA9IDQ7CisJfQorCiAJaWYgKGRlcHRoID49IDgpIHsKIAkJc3dpdGNoIChpbmZvLT5maXgudmlzdWFsKSB7CiAJCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCmluZGV4IDg5ODJlNTQuLmIwYjlhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwpAQCAtNTcsNyArNTcsNyBAQAogc3RhdGljIHZvaWQgICAgICAgICAgICAoKnBtaV9zdGFydCkodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICgqcG1pX3BhbCkodm9pZCk7CiBzdGF0aWMgaW50ICAgICAgICAgICAgIGRlcHRoOwotCitzdGF0aWMgaW50ICAgICAgICAgICAgIHZnYV9jb21wYXQ7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB2ZXNhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCkBAIC04Myw5ICs4MywxMCBAQAogc3RhdGljIHZvaWQgdmVzYV9zZXRwYWxldHRlKGludCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgICB1bnNpZ25lZCBibHVlKQogeworCWludCBzaGlmdCA9IDE2IC0gZGVwdGg7CisKICNpZmRlZiBfX2kzODZfXwogCXN0cnVjdCB7IHVfY2hhciBibHVlLCBncmVlbiwgcmVkLCBwYWQ7IH0gZW50cnk7Ci0JaW50IHNoaWZ0ID0gMTYgLSBkZXB0aDsKIAogCWlmIChwbWlfc2V0cGFsKSB7CiAJCWVudHJ5LnJlZCAgID0gcmVkICAgPj4gc2hpZnQ7CkBAIC0xMDEsMTQgKzEwMiwyMCBAQAogICAgICAgICAgICAgICAgICAgImQiIChyZWdubyksICAgICAgICAgIC8qIEVEWCAqLwogICAgICAgICAgICAgICAgICAgIkQiICgmZW50cnkpLCAgICAgICAgIC8qIEVESSAqLwogICAgICAgICAgICAgICAgICAgIlMiICgmcG1pX3BhbCkpOyAgICAgIC8qIEVTSSAqLwotCX0gZWxzZSB7Ci0JCS8qIHdpdGhvdXQgcHJvdGVjdGVkIG1vZGUgaW50ZXJmYWNlLCB0cnkgVkdBIHJlZ2lzdGVycy4uLiAqLworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKy8qCisgKiB3aXRob3V0IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBhbmQgaWYgVkdBIGNvbXBhdGlibGUsCisgKiB0cnkgVkdBIHJlZ2lzdGVycy4uLgorICovCisJaWYgKHZnYV9jb21wYXQpIHsKIAkJb3V0Yl9wKHJlZ25vLCAgICAgICBkYWNfcmVnKTsKIAkJb3V0Yl9wKHJlZCAgID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAkJb3V0Yl9wKGdyZWVuID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAkJb3V0Yl9wKGJsdWUgID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAl9Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludCB2ZXNhZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLApAQCAtMjE0LDYgKzIyMSw3IEBACiAJaWYgKHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgIT0gVklERU9fVFlQRV9WTEZCKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXZnYV9jb21wYXQgPSAoc2NyZWVuX2luZm8uY2FwYWJpbGl0aWVzICYgMikgPyAwIDogMTsKIAl2ZXNhZmJfZml4LnNtZW1fc3RhcnQgPSBzY3JlZW5faW5mby5sZmJfYmFzZTsKIAl2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA9IHNjcmVlbl9pbmZvLmxmYl9kZXB0aDsKIAlpZiAoMTUgPT0gdmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpCkBAIC0zMTgsNiArMzI2LDEyIEBACiAJCX0KIAl9CiAKKwlpZiAodmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPT0gOCAmJiAhcG1pX3NldHBhbCAmJiAhdmdhX2NvbXBhdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2ZXNhZmI6IGhhcmR3YXJlIHBhbGV0dGUgaXMgdW5jaGFuZ2VhYmxlLFxuIgorCQkgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0XG4iKTsKKwkJdmVzYWZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SOworCX0KKwogCXZlc2FmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IHZlc2FmYl9kZWZpbmVkLnhyZXM7CiAJdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gdmVzYWZiX2ZpeC5zbWVtX2xlbiAvIHZlc2FmYl9maXgubGluZV9sZW5ndGg7CiAJaWYgKHlwYW4gJiYgdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsID4gdmVzYWZiX2RlZmluZWQueXJlcykgewpAQCAtMzU0LDcgKzM2OCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidmVzYWZiOiAlczogIgogCSAgICAgICAic2l6ZT0lZDolZDolZDolZCwgc2hpZnQ9JWQ6JWQ6JWQ6JWRcbiIsCiAJICAgICAgICh2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA+IDgpID8KLQkgICAgICAgIlRydWVjb2xvciIgOiAiUHNldWRvY29sb3IiLAorCSAgICAgICAiVHJ1ZWNvbG9yIiA6ICh2Z2FfY29tcGF0IHx8IHBtaV9zZXRwYWwpID8KKwkgICAgICAgIlBzZXVkb2NvbG9yIiA6ICJTdGF0aWMgUHNldWRvY29sb3IiLAogCSAgICAgICBzY3JlZW5faW5mby5yc3ZkX3NpemUsCiAJICAgICAgIHNjcmVlbl9pbmZvLnJlZF9zaXplLAogCSAgICAgICBzY3JlZW5faW5mby5ncmVlbl9zaXplLApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCBiMGEwYWU1Li42MWM1OTliIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtMTI3LDEyICsxMjcsMTMgQEAKIAogCWlmICgobmV3ZmlkID0gdjlmc19zZXNzaW9uX2luaXQodjlzZXMsIGRldl9uYW1lLCBkYXRhKSkgPCAwKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJwcm9ibGVtIGluaXRpYXRpbmcgc2Vzc2lvblxuIik7Ci0JCWtmcmVlKHY5c2VzKTsKLQkJcmV0dXJuIEVSUl9QVFIobmV3ZmlkKTsKKwkJc2IgPSBFUlJfUFRSKG5ld2ZpZCk7CisJCWdvdG8gb3V0X2ZyZWVfc2Vzc2lvbjsKIAl9CiAKIAlzYiA9IHNnZXQoZnNfdHlwZSwgTlVMTCwgdjlmc19zZXRfc3VwZXIsIHY5c2VzKTsKLQorCWlmIChJU19FUlIoc2IpKQorCQlnb3RvIG91dF9jbG9zZV9zZXNzaW9uOwogCXY5ZnNfZmlsbF9zdXBlcihzYiwgdjlzZXMsIGZsYWdzKTsKIAogCWlub2RlID0gdjlmc19nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCBtb2RlKTsKQEAgLTE4NSw2ICsxODYsMTIgQEAKIAogCXJldHVybiBzYjsKIAorb3V0X2Nsb3NlX3Nlc3Npb246CisJdjlmc19zZXNzaW9uX2Nsb3NlKHY5c2VzKTsKK291dF9mcmVlX3Nlc3Npb246CisJa2ZyZWUodjlzZXMpOworCXJldHVybiBzYjsKKwogcHV0X2JhY2tfc2I6CiAJLyogZGVhY3RpdmF0ZV9zdXBlciBjYWxscyB2OWZzX2tpbGxfc3VwZXIgd2hpY2ggd2lsbCBmcmVlcyB0aGUgcmVzdCAqLwogCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOwpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZTIwN2JlNi4uMjUyNDYyOSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC03OTksNiArNzk5LDcgQEAKIGNvbmZpZyBQUk9DX1ZNQ09SRQogICAgICAgICBib29sICIvcHJvYy92bWNvcmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKICAgICAgICAgZGVwZW5kcyBvbiBQUk9DX0ZTICYmIEVYUEVSSU1FTlRBTCAmJiBDUkFTSF9EVU1QCisJZGVmYXVsdCB5CiAgICAgICAgIGhlbHAKICAgICAgICAgRXhwb3J0cyB0aGUgZHVtcCBpbWFnZSBvZiBjcmFzaGVkIGtlcm5lbCBpbiBFTEYgZm9ybWF0LgogCkBAIC04NjEsNyArODYyLDcgQEAKIAogY29uZmlnIENPTkZJR0ZTX0ZTCiAJdHJpc3RhdGUgIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTWVNGUyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBjb25maWdmcyBpcyBhIHJhbS1iYXNlZCBmaWxlc3lzdGVtIHRoYXQgcHJvdmlkZXMgdGhlIGNvbnZlcnNlCiAJICBvZiBzeXNmcydzIGZ1bmN0aW9uYWxpdHkuIFdoZXJlIHN5c2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZApkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCA4ZWQ5YjA2Li41NjM4YzhmIDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtNTA0LDcgKzUwNCw3IEBACiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKLQlpZiAoZ3JvdXAgJiYgZ3JvdXAtPmRlZmF1bHRfZ3JvdXBzKSB7CisJaWYgKGdyb3VwLT5kZWZhdWx0X2dyb3VwcykgewogCQkvKiBGWUksIHdlJ3JlIGZha2luZyBta2RpciBoZXJlCiAJCSAqIEknbSBub3Qgc3VyZSB3ZSBuZWVkIHRoaXMgc2VtYXBob3JlLCBhcyB3ZSdyZSBjYWxsZWQKIAkJICogZnJvbSBvdXIgcGFyZW50J3MgbWtkaXIuICBUaGF0IGhvbGRzIG91ciBwYXJlbnQncwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAyNDJmZTFhLi4xYjQ0OTFjIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNTk5LDcgKzU5OSw3IEBACiAJc3dpdGNoIChvcCkgewogCWNhc2UgRVBPTExfQ1RMX0FERDoKIAkJaWYgKCFlcGkpIHsKLQkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTFJESFVQOworCQkJZXBkcy5ldmVudHMgfD0gUE9MTEVSUiB8IFBPTExIVVA7CiAKIAkJCWVycm9yID0gZXBfaW5zZXJ0KGVwLCAmZXBkcywgdGZpbGUsIGZkKTsKIAkJfSBlbHNlCkBAIC02MTMsNyArNjEzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBFUE9MTF9DVExfTU9EOgogCQlpZiAoZXBpKSB7Ci0JCQllcGRzLmV2ZW50cyB8PSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQOwogCQkJZXJyb3IgPSBlcF9tb2RpZnkoZXAsIGVwaSwgJmVwZHMpOwogCQl9IGVsc2UKIAkJCWVycm9yID0gLUVOT0VOVDsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCAwMjkxYTY4Li4zMjM0YTBjIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC02NzgsNiArNjc4LDE4IEBACiAJCXdoaWxlIChsZWFkZXItPmV4aXRfc3RhdGUgIT0gRVhJVF9aT01CSUUpCiAJCQl5aWVsZCgpOwogCisJCS8qCisJCSAqIFRoZSBvbmx5IHJlY29yZCB3ZSBoYXZlIG9mIHRoZSByZWFsLXRpbWUgYWdlIG9mIGEKKwkJICogcHJvY2VzcywgcmVnYXJkbGVzcyBvZiBleGVjcyBpdCdzIGRvbmUsIGlzIHN0YXJ0X3RpbWUuCisJCSAqIEFsbCB0aGUgcGFzdCBDUFUgdGltZSBpcyBhY2N1bXVsYXRlZCBpbiBzaWduYWxfc3RydWN0CisJCSAqIGZyb20gc2lzdGVyIHRocmVhZHMgbm93IGRlYWQuICBCdXQgaW4gdGhpcyBub24tbGVhZGVyCisJCSAqIGV4ZWMsIG5vdGhpbmcgc3Vydml2ZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGVhZGVyIHRocmVhZCwKKwkJICogd2hvc2UgYmlydGggbWFya3MgdGhlIHRydWUgYWdlIG9mIHRoaXMgcHJvY2VzcyBub3cuCisJCSAqIFdoZW4gd2UgdGFrZSBvbiBpdHMgaWRlbnRpdHkgYnkgc3dpdGNoaW5nIHRvIGl0cyBQSUQsIHdlCisJCSAqIGFsc28gdGFrZSBpdHMgYmlydGhkYXRlIChhbHdheXMgZWFybGllciB0aGFuIG91ciBvd24pLgorCQkgKi8KKwkJY3VycmVudC0+c3RhcnRfdGltZSA9IGxlYWRlci0+c3RhcnRfdGltZTsKKwogCQlzcGluX2xvY2soJmxlYWRlci0+cHJvY19sb2NrKTsKIAkJc3Bpbl9sb2NrKCZjdXJyZW50LT5wcm9jX2xvY2spOwogCQlwcm9jX2RlbnRyeTEgPSBwcm9jX3BpZF91bmhhc2goY3VycmVudCk7CkBAIC03MjMsNyArNzM1LDEyIEBACiAJCWN1cnJlbnQtPnBhcmVudCA9IGN1cnJlbnQtPnJlYWxfcGFyZW50ID0gbGVhZGVyLT5yZWFsX3BhcmVudDsKIAkJbGVhZGVyLT5wYXJlbnQgPSBsZWFkZXItPnJlYWxfcGFyZW50ID0gY2hpbGRfcmVhcGVyOwogCQljdXJyZW50LT5ncm91cF9sZWFkZXIgPSBjdXJyZW50OwotCQlsZWFkZXItPmdyb3VwX2xlYWRlciA9IGxlYWRlcjsKKwkJbGVhZGVyLT5ncm91cF9sZWFkZXIgPSBjdXJyZW50OworCisJCS8qIFJlZHVjZSBsZWFkZXIgdG8gYSB0aHJlYWQgKi8KKwkJZGV0YWNoX3BpZChsZWFkZXIsIFBJRFRZUEVfUEdJRCk7CisJCWRldGFjaF9waWQobGVhZGVyLCBQSURUWVBFX1NJRCk7CisJCWxpc3RfZGVsX2luaXQoJmxlYWRlci0+dGFza3MpOwogCiAJCWFkZF9wYXJlbnQoY3VycmVudCk7CiAJCWFkZF9wYXJlbnQobGVhZGVyKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDEwNDFkYWIuLjE0ZjVmNmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtOTc0LDYgKzk3NCw3IEBACiAJaWYgKG9fYmxvY2tzX2NvdW50ICE9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCkpIHsKIAkJZXh0M193YXJuaW5nKHNiLCBfX0ZVTkNUSU9OX18sCiAJCQkgICAgICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKKwkJdW5sb2NrX3N1cGVyKHNiKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KZGlmZiAtLWdpdCBhL2ZzL2ZpZm8uYyBiL2ZzL2ZpZm8uYwppbmRleCA4ODlmNzIyLi40OTAzNWIxIDEwMDY0NAotLS0gYS9mcy9maWZvLmMKKysrIGIvZnMvZmlmby5jCkBAIC0xNSwzMCArMTUsMzUgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BpcGVfZnNfaS5oPgogCi1zdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYXJ0bmVyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHVuc2lnbmVkIGludCogY250KQorc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlLCB1bnNpZ25lZCBpbnQgKmNudCkKIHsKIAlpbnQgY3VyID0gKmNudDsJCi0Jd2hpbGUoY3VyID09ICpjbnQpIHsKLQkJcGlwZV93YWl0KGlub2RlKTsKLQkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisKKwl3aGlsZSAoY3VyID09ICpjbnQpIHsKKwkJcGlwZV93YWl0KGlub2RlLT5pX3BpcGUpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHdha2VfdXBfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlKQogewotCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbm9kZS0+aV9waXBlLT53YWl0KTsKIH0KIAogc3RhdGljIGludCBmaWZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWlmICghaW5vZGUtPmlfcGlwZSkgeworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKKwlpZiAoIXBpcGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJaWYoIXBpcGVfbmV3KGlub2RlKSkKKwkJcGlwZSA9IGFsbG9jX3BpcGVfaW5mbyhpbm9kZSk7CisJCWlmICghcGlwZSkKIAkJCWdvdG8gZXJyX25vY2xlYW51cDsKKwkJaW5vZGUtPmlfcGlwZSA9IHBpcGU7CiAJfQogCWZpbHAtPmZfdmVyc2lvbiA9IDA7CiAKQEAgLTUzLDE4ICs1OCwxOCBAQAogCSAqICBvcGVuZWQsIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHdyaXRpbmcgdGhlIEZJRk8uCiAJICovCiAJCWZpbHAtPmZfb3AgPSAmcmVhZF9maWZvX2ZvcHM7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlpZiAoUElQRV9SRUFERVJTKCppbm9kZSkrKyA9PSAwKQorCQlwaXBlLT5yX2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMrKyA9PSAwKQogCQkJd2FrZV91cF9wYXJ0bmVyKGlub2RlKTsKIAotCQlpZiAoIVBJUEVfV1JJVEVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+d3JpdGVycykgewogCQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKIAkJCQkvKiBzdXBwcmVzcyBQT0xMSFVQIHVudGlsIHdlIGhhdmUKIAkJCQkgKiBzZWVuIGEgd3JpdGVyICovCi0JCQkJZmlscC0+Zl92ZXJzaW9uID0gUElQRV9XQ09VTlRFUigqaW5vZGUpOworCQkJCWZpbHAtPmZfdmVyc2lvbiA9IHBpcGUtPndfY291bnRlcjsKIAkJCX0gZWxzZSAKIAkJCXsKLQkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmUElQRV9XQ09VTlRFUigqaW5vZGUpKTsKKwkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmcGlwZS0+d19jb3VudGVyKTsKIAkJCQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCQkJZ290byBlcnJfcmQ7CiAJCQl9CkBAIC03OCwxNiArODMsMTYgQEAKIAkgKiAgZXJybm89RU5YSU8gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHJlYWRpbmcgdGhlIEZJRk8uCiAJICovCiAJCXJldCA9IC1FTlhJTzsKLQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgIVBJUEVfUkVBREVSUygqaW5vZGUpKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhcGlwZS0+cmVhZGVycykKIAkJCWdvdG8gZXJyOwogCiAJCWZpbHAtPmZfb3AgPSAmd3JpdGVfZmlmb19mb3BzOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSsrKQorCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKCFwaXBlLT53cml0ZXJzKyspCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCi0JCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKLQkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZQSVBFX1JDT1VOVEVSKCppbm9kZSkpOworCQlpZiAoIXBpcGUtPnJlYWRlcnMpIHsKKwkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZwaXBlLT5yX2NvdW50ZXIpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWdvdG8gZXJyX3dyOwogCQl9CkBAIC0xMDIsMTEgKzEwNywxMSBAQAogCSAqLwogCQlmaWxwLT5mX29wID0gJnJkd3JfZmlmb19mb3BzOwogCi0JCVBJUEVfUkVBREVSUygqaW5vZGUpKys7Ci0JCVBJUEVfV1JJVEVSUygqaW5vZGUpKys7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKFBJUEVfUkVBREVSUygqaW5vZGUpID09IDEgfHwgUElQRV9XUklURVJTKCppbm9kZSkgPT0gMSkKKwkJcGlwZS0+cmVhZGVycysrOworCQlwaXBlLT53cml0ZXJzKys7CisJCXBpcGUtPnJfY291bnRlcisrOworCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMgPT0gMSB8fCBwaXBlLT53cml0ZXJzID09IDEpCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCQlicmVhazsKIApAQCAtMTE2LDI3ICsxMjEsMjcgQEAKIAl9CiAKIAkvKiBPayEgKi8KLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyX3JkOgotCWlmICghLS1QSVBFX1JFQURFUlMoKmlub2RlKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKKwlpZiAoIS0tcGlwZS0+cmVhZGVycykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKIAlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJZ290byBlcnI7CiAKIGVycl93cjoKLQlpZiAoIS0tUElQRV9XUklURVJTKCppbm9kZSkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJaWYgKCEtLXBpcGUtPndyaXRlcnMpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CiAJcmV0ID0gLUVSRVNUQVJUU1lTOwogCWdvdG8gZXJyOwogCiBlcnI6Ci0JaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSAmJiAhUElQRV9XUklURVJTKCppbm9kZSkpCisJaWYgKCFwaXBlLT5yZWFkZXJzICYmICFwaXBlLT53cml0ZXJzKQogCQlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAKIGVycl9ub2NsZWFudXA6Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXYuYyBiL2ZzL2Z1c2UvZGV2LmMKaW5kZXggMjNkMWY1Mi4uNmM3NDBmOCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kZXYuYworKysgYi9mcy9mdXNlL2Rldi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMywxMyArMjMsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBmdXNlX2Nvbm4gKmZ1c2VfZ2V0X2Nvbm4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCWZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWlmIChmYyAmJiAhZmMtPmNvbm5lY3RlZCkKLQkJZmMgPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCXJldHVybiBmYzsKKwkvKgorCSAqIExvY2tsZXNzIGFjY2VzcyBpcyBPSywgYmVjYXVzZSBmaWxlLT5wcml2YXRlIGRhdGEgaXMgc2V0CisJICogb25jZSBkdXJpbmcgbW91bnQgYW5kIGlzIHZhbGlkIHVudGlsIHRoZSBmaWxlIGlzIHJlbGVhc2VkLgorCSAqLworCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGE7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1c2VfcmVxdWVzdF9pbml0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKQpAQCAtNzQsMTAgKzcyLDggQEAKICAqLwogdm9pZCBmdXNlX3Jlc2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0JaW50IHByZWFsbG9jYXRlZCA9IHJlcS0+cHJlYWxsb2NhdGVkOwogCUJVR19PTihhdG9taWNfcmVhZCgmcmVxLT5jb3VudCkgIT0gMSk7CiAJZnVzZV9yZXF1ZXN0X2luaXQocmVxKTsKLQlyZXEtPnByZWFsbG9jYXRlZCA9IHByZWFsbG9jYXRlZDsKIH0KIAogc3RhdGljIHZvaWQgX19mdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKQpAQCAtOTIsODAgKzg4LDUyIEBACiAJYXRvbWljX2RlYygmcmVxLT5jb3VudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnVzZV9yZXEgKmRvX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQorc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXEoc3RydWN0IGZ1c2VfY29ubiAqZmMpCiB7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CisJc2lnc2V0X3Qgb2xkc2V0OworCWludCBlcnI7CiAKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JQlVHX09OKGxpc3RfZW1wdHkoJmZjLT51bnVzZWRfbGlzdCkpOwotCXJlcSA9IGxpc3RfZW50cnkoZmMtPnVudXNlZF9saXN0Lm5leHQsIHN0cnVjdCBmdXNlX3JlcSwgbGlzdCk7Ci0JbGlzdF9kZWxfaW5pdCgmcmVxLT5saXN0KTsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlibG9ja19zaWdzKCZvbGRzZXQpOworCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmYy0+YmxvY2tlZF93YWl0cSwgIWZjLT5ibG9ja2VkKTsKKwlyZXN0b3JlX3NpZ3MoJm9sZHNldCk7CisJaWYgKGVycikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlRSKTsKKworCXJlcSA9IGZ1c2VfcmVxdWVzdF9hbGxvYygpOworCWlmICghcmVxKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWF0b21pY19pbmMoJmZjLT5udW1fd2FpdGluZyk7CiAJZnVzZV9yZXF1ZXN0X2luaXQocmVxKTsKLQlyZXEtPnByZWFsbG9jYXRlZCA9IDE7CiAJcmVxLT5pbi5oLnVpZCA9IGN1cnJlbnQtPmZzdWlkOwogCXJlcS0+aW4uaC5naWQgPSBjdXJyZW50LT5mc2dpZDsKIAlyZXEtPmluLmgucGlkID0gY3VycmVudC0+cGlkOwogCXJldHVybiByZXE7CiB9CiAKLS8qIFRoaXMgY2FuIHJldHVybiBOVUxMLCBidXQgb25seSBpbiBjYXNlIGl0J3MgaW50ZXJydXB0ZWQgYnkgYSBTSUdLSUxMICovCi1zdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMpCi17Ci0JaW50IGludHI7Ci0Jc2lnc2V0X3Qgb2xkc2V0OwotCi0JYXRvbWljX2luYygmZmMtPm51bV93YWl0aW5nKTsKLQlibG9ja19zaWdzKCZvbGRzZXQpOwotCWludHIgPSBkb3duX2ludGVycnVwdGlibGUoJmZjLT5vdXRzdGFuZGluZ19zZW0pOwotCXJlc3RvcmVfc2lncygmb2xkc2V0KTsKLQlpZiAoaW50cikgewotCQlhdG9taWNfZGVjKCZmYy0+bnVtX3dhaXRpbmcpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIGRvX2dldF9yZXF1ZXN0KGZjKTsKLX0KLQotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBmdXNlX2xvY2sgaGVsZCAqLwotc3RhdGljIHZvaWQgZnVzZV9wdXRiYWNrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQotewotCWlmIChyZXEtPnByZWFsbG9jYXRlZCkgewotCQlhdG9taWNfZGVjKCZmYy0+bnVtX3dhaXRpbmcpOwotCQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmZmMtPnVudXNlZF9saXN0KTsKLQl9IGVsc2UKLQkJZnVzZV9yZXF1ZXN0X2ZyZWUocmVxKTsKLQotCS8qIElmIHdlIGFyZSBpbiBkZWJ0IGRlY3JlYXNlIHRoYXQgZmlyc3QgKi8KLQlpZiAoZmMtPm91dHN0YW5kaW5nX2RlYnQpCi0JCWZjLT5vdXRzdGFuZGluZ19kZWJ0LS07Ci0JZWxzZQotCQl1cCgmZmMtPm91dHN0YW5kaW5nX3NlbSk7Ci19Ci0KIHZvaWQgZnVzZV9wdXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJlcS0+Y291bnQpKSB7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQkJZnVzZV9wdXRiYWNrX3JlcXVlc3QoZmMsIHJlcSk7Ci0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlhdG9taWNfZGVjKCZmYy0+bnVtX3dhaXRpbmcpOworCQlmdXNlX3JlcXVlc3RfZnJlZShyZXEpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZnVzZV9wdXRfcmVxdWVzdF9sb2NrZWQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZXEtPmNvdW50KSkKLQkJZnVzZV9wdXRiYWNrX3JlcXVlc3QoZmMsIHJlcSk7Ci19Ci0KLXZvaWQgZnVzZV9yZWxlYXNlX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfcmVxICpyZXEpCit2b2lkIGZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpcHV0KHJlcS0+aW5vZGUpOwogCWlwdXQocmVxLT5pbm9kZTIpOwogCWlmIChyZXEtPmZpbGUpCiAJCWZwdXQocmVxLT5maWxlKTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJbGlzdF9kZWwoJnJlcS0+YmdfZW50cnkpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCWlmIChmYy0+bnVtX2JhY2tncm91bmQgPT0gRlVTRV9NQVhfQkFDS0dST1VORCkgeworCQlmYy0+YmxvY2tlZCA9IDA7CisJCXdha2VfdXBfYWxsKCZmYy0+YmxvY2tlZF93YWl0cSk7CisJfQorCWZjLT5udW1fYmFja2dyb3VuZC0tOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiB9CiAKIC8qCkBAIC0xODQsMjMgKzE1MiwyMyBAQAogICogaW50ZXJydXB0ZWQgYW5kIHB1dCBpbiB0aGUgYmFja2dyb3VuZCwgaXQgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvcgogICogYW5kIGhlbmNlIG5ldmVyIGJlIHJlc2V0IGFuZCByZXVzZWQuCiAgKgotICogQ2FsbGVkIHdpdGggZnVzZV9sb2NrLCB1bmxvY2tzIGl0CisgKiBDYWxsZWQgd2l0aCBmYy0+bG9jaywgdW5sb2NrcyBpdAogICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CiAJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX0ZJTklTSEVEOwogCWlmICghcmVxLT5iYWNrZ3JvdW5kKSB7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCXdha2VfdXAoJnJlcS0+d2FpdHEpOwotCQlmdXNlX3B1dF9yZXF1ZXN0X2xvY2tlZChmYywgcmVxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmVuZCkgKHN0cnVjdCBmdXNlX2Nvbm4gKiwgc3RydWN0IGZ1c2VfcmVxICopID0gcmVxLT5lbmQ7CiAJCXJlcS0+ZW5kID0gTlVMTDsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCWRvd25fcmVhZCgmZmMtPnNicHV0X3NlbSk7CiAJCWlmIChmYy0+bW91bnRlZCkKLQkJCWZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHJlcSk7CisJCQlmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChmYywgcmVxKTsKIAkJdXBfcmVhZCgmZmMtPnNicHV0X3NlbSk7CiAJCWlmIChlbmQpCiAJCQllbmQoZmMsIHJlcSk7CkBAIC0yNDIsNiArMjEwLDkgQEAKIHsKIAlyZXEtPmJhY2tncm91bmQgPSAxOwogCWxpc3RfYWRkKCZyZXEtPmJnX2VudHJ5LCAmZmMtPmJhY2tncm91bmQpOworCWZjLT5udW1fYmFja2dyb3VuZCsrOworCWlmIChmYy0+bnVtX2JhY2tncm91bmQgPT0gRlVTRV9NQVhfQkFDS0dST1VORCkKKwkJZmMtPmJsb2NrZWQgPSAxOwogCWlmIChyZXEtPmlub2RlKQogCQlyZXEtPmlub2RlID0gaWdyYWIocmVxLT5pbm9kZSk7CiAJaWYgKHJlcS0+aW5vZGUyKQpAQCAtMjUwLDE2ICsyMjEsMTYgQEAKIAkJZ2V0X2ZpbGUocmVxLT5maWxlKTsKIH0KIAotLyogQ2FsbGVkIHdpdGggZnVzZV9sb2NrIGhlbGQuICBSZWxlYXNlcywgYW5kIHRoZW4gcmVhY3F1aXJlcyBpdC4gKi8KKy8qIENhbGxlZCB3aXRoIGZjLT5sb2NrIGhlbGQuICBSZWxlYXNlcywgYW5kIHRoZW4gcmVhY3F1aXJlcyBpdC4gKi8KIHN0YXRpYyB2b2lkIHJlcXVlc3Rfd2FpdF9hbnN3ZXIoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCXNpZ3NldF90IG9sZHNldDsKIAotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJYmxvY2tfc2lncygmb2xkc2V0KTsKIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmVxLT53YWl0cSwgcmVxLT5zdGF0ZSA9PSBGVVNFX1JFUV9GSU5JU0hFRCk7CiAJcmVzdG9yZV9zaWdzKCZvbGRzZXQpOwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlpZiAocmVxLT5zdGF0ZSA9PSBGVVNFX1JFUV9GSU5JU0hFRCAmJiAhcmVxLT5pbnRlcnJ1cHRlZCkKIAkJcmV0dXJuOwogCkBAIC0yNzMsOSArMjQ0LDkgQEAKIAkJICAgbG9ja2VkIHN0YXRlLCB0aGVyZSBtdXN0bid0IGJlIGFueSBmaWxlc3lzdGVtCiAJCSAgIG9wZXJhdGlvbiAoZS5nLiBwYWdlIGZhdWx0KSwgc2luY2UgdGhhdCBjb3VsZCBsZWFkCiAJCSAgIHRvIGRlYWRsb2NrICovCi0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQl3YWl0X2V2ZW50KHJlcS0+d2FpdHEsICFyZXEtPmxvY2tlZCk7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJfQogCWlmIChyZXEtPnN0YXRlID09IEZVU0VfUkVRX1BFTkRJTkcpIHsKIAkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CkBAIC0zMDQsMTkgKzI3NSwxMCBAQAogCXJlcS0+aW4uaC51bmlxdWUgPSBmYy0+cmVxY3RyOwogCXJlcS0+aW4uaC5sZW4gPSBzaXplb2Yoc3RydWN0IGZ1c2VfaW5faGVhZGVyKSArCiAJCWxlbl9hcmdzKHJlcS0+aW4ubnVtYXJncywgKHN0cnVjdCBmdXNlX2FyZyAqKSByZXEtPmluLmFyZ3MpOwotCWlmICghcmVxLT5wcmVhbGxvY2F0ZWQpIHsKLQkJLyogSWYgcmVxdWVzdCBpcyBub3QgcHJlYWxsb2NhdGVkIChlaXRoZXIgRk9SR0VUIG9yCi0JCSAgIFJFTEVBU0UpLCB0aGVuIHN0aWxsIGRlY3JlYXNlIG91dHN0YW5kaW5nX3NlbSwgc28KLQkJICAgdXNlciBjYW4ndCBvcGVuIGluZmluaXRlIG51bWJlciBvZiBmaWxlcyB3aGlsZSBub3QKLQkJICAgcHJvY2Vzc2luZyB0aGUgUkVMRUFTRSByZXF1ZXN0cy4gIEhvd2V2ZXIgZm9yCi0JCSAgIGVmZmljaWVuY3kgZG8gaXQgd2l0aG91dCBibG9ja2luZywgc28gaWYgZG93bigpCi0JCSAgIHdvdWxkIGJsb2NrLCBqdXN0IGluY3JlYXNlIHRoZSBkZWJ0IGluc3RlYWQgKi8KLQkJaWYgKGRvd25fdHJ5bG9jaygmZmMtPm91dHN0YW5kaW5nX3NlbSkpCi0JCQlmYy0+b3V0c3RhbmRpbmdfZGVidCsrOwotCX0KIAlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZmYy0+cGVuZGluZyk7CiAJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX1BFTkRJTkc7CiAJd2FrZV91cCgmZmMtPndhaXRxKTsKKwlraWxsX2Zhc3luYygmZmMtPmZhc3luYywgU0lHSU8sIFBPTExfSU4pOwogfQogCiAvKgpAQCAtMzI1LDcgKzI4Nyw3IEBACiB2b2lkIHJlcXVlc3Rfc2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJcmVxLT5pc3JlcGx5ID0gMTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJaWYgKCFmYy0+Y29ubmVjdGVkKQogCQlyZXEtPm91dC5oLmVycm9yID0gLUVOT1RDT05OOwogCWVsc2UgaWYgKGZjLT5jb25uX2Vycm9yKQpAQCAtMzM4LDE1ICszMDAsMTYgQEAKIAogCQlyZXF1ZXN0X3dhaXRfYW5zd2VyKGZjLCByZXEpOwogCX0KLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCByZXF1ZXN0X3NlbmRfbm93YWl0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJYmFja2dyb3VuZF9yZXF1ZXN0KGZjLCByZXEpOwogCWlmIChmYy0+Y29ubmVjdGVkKSB7CiAJCXF1ZXVlX3JlcXVlc3QoZmMsIHJlcSk7Ci0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCX0gZWxzZSB7CiAJCXJlcS0+b3V0LmguZXJyb3IgPSAtRU5PVENPTk47CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwpAQCAtMzYyLDkgKzMyNSw2IEBACiB2b2lkIHJlcXVlc3Rfc2VuZF9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlyZXEtPmlzcmVwbHkgPSAxOwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQliYWNrZ3JvdW5kX3JlcXVlc3QoZmMsIHJlcSk7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CiAJcmVxdWVzdF9zZW5kX25vd2FpdChmYywgcmVxKTsKIH0KIApAQCAtMzczLDE2ICszMzMsMTYgQEAKICAqIGFueXRoaW5nIHRoYXQgY291bGQgY2F1c2UgYSBwYWdlLWZhdWx0LiAgSWYgdGhlIHJlcXVlc3Qgd2FzIGFscmVhZHkKICAqIGludGVycnVwdGVkIGJhaWwgb3V0LgogICovCi1zdGF0aWMgaW50IGxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKK3N0YXRpYyBpbnQgbG9ja19yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpbnQgZXJyID0gMDsKIAlpZiAocmVxKSB7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCWlmIChyZXEtPmludGVycnVwdGVkKQogCQkJZXJyID0gLUVOT0VOVDsKIAkJZWxzZQogCQkJcmVxLT5sb2NrZWQgPSAxOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTM5MiwxOCArMzUyLDE5IEBACiAgKiByZXF1ZXN0ZXIgdGhyZWFkIGlzIGN1cnJlbnRseSB3YWl0aW5nIGZvciBpdCB0byBiZSB1bmxvY2tlZCwgc28KICAqIHdha2UgaXQgdXAuCiAgKi8KLXN0YXRpYyB2b2lkIHVubG9ja19yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKQorc3RhdGljIHZvaWQgdW5sb2NrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCWlmIChyZXEpIHsKLQkJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAkJcmVxLT5sb2NrZWQgPSAwOwogCQlpZiAocmVxLT5pbnRlcnJ1cHRlZCkKIAkJCXdha2VfdXAoJnJlcS0+d2FpdHEpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9CiB9CiAKIHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgeworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOwogCWludCB3cml0ZTsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKIAljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdjsKQEAgLTQxNiwxMSArMzc3LDEyIEBACiAJdW5zaWduZWQgbGVuOwogfTsKIAotc3RhdGljIHZvaWQgZnVzZV9jb3B5X2luaXQoc3RydWN0IGZ1c2VfY29weV9zdGF0ZSAqY3MsIGludCB3cml0ZSwKLQkJCSAgIHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3N0YXRpYyB2b2lkIGZ1c2VfY29weV9pbml0KHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBzdHJ1Y3QgZnVzZV9jb25uICpmYywKKwkJCSAgIGludCB3cml0ZSwgc3RydWN0IGZ1c2VfcmVxICpyZXEsCisJCQkgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbG9uZyBucl9zZWdzKQogewogCW1lbXNldChjcywgMCwgc2l6ZW9mKCpjcykpOworCWNzLT5mYyA9IGZjOwogCWNzLT53cml0ZSA9IHdyaXRlOwogCWNzLT5yZXEgPSByZXE7CiAJY3MtPmlvdiA9IGlvdjsKQEAgLTQ1MCw3ICs0MTIsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCWludCBlcnI7CiAKLQl1bmxvY2tfcmVxdWVzdChjcy0+cmVxKTsKKwl1bmxvY2tfcmVxdWVzdChjcy0+ZmMsIGNzLT5yZXEpOwogCWZ1c2VfY29weV9maW5pc2goY3MpOwogCWlmICghY3MtPnNlZ2xlbikgewogCQlCVUdfT04oIWNzLT5ucl9zZWdzKTsKQEAgLTQ3Myw3ICs0MzUsNyBAQAogCWNzLT5zZWdsZW4gLT0gY3MtPmxlbjsKIAljcy0+YWRkciArPSBjcy0+bGVuOwogCi0JcmV0dXJuIGxvY2tfcmVxdWVzdChjcy0+cmVxKTsKKwlyZXR1cm4gbG9ja19yZXF1ZXN0KGNzLT5mYywgY3MtPnJlcSk7CiB9CiAKIC8qIERvIGFzIG11Y2ggY29weSB0by9mcm9tIHVzZXJzcGFjZSBidWZmZXIgYXMgd2UgY2FuICovCkBAIC01ODUsOSArNTQ3LDkgQEAKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJYnJlYWs7CiAKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCXNjaGVkdWxlKCk7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmZjLT53YWl0cSwgJndhaXQpOwpAQCAtNjA2LDE4ICs1NjgsMjEgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpvZmYpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKIAlzdHJ1Y3QgZnVzZV9pbiAqaW47CiAJc3RydWN0IGZ1c2VfY29weV9zdGF0ZSBjczsKIAl1bnNpZ25lZCByZXFzaXplOworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZnVzZV9nZXRfY29ubihmaWxlKTsKKwlpZiAoIWZjKQorCQlyZXR1cm4gLUVQRVJNOwogCiAgcmVzdGFydDoKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JZmMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZXJyID0gLUVQRVJNOwotCWlmICghZmMpCisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJZXJyID0gLUVBR0FJTjsKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiBmYy0+Y29ubmVjdGVkICYmCisJICAgIGxpc3RfZW1wdHkoJmZjLT5wZW5kaW5nKSkKIAkJZ290byBlcnJfdW5sb2NrOworCiAJcmVxdWVzdF93YWl0KGZjKTsKIAllcnIgPSAtRU5PREVWOwogCWlmICghZmMtPmNvbm5lY3RlZCkKQEAgLTY0MSwxNCArNjA2LDE0IEBACiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCWZ1c2VfY29weV9pbml0KCZjcywgMSwgcmVxLCBpb3YsIG5yX3NlZ3MpOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CisJZnVzZV9jb3B5X2luaXQoJmNzLCBmYywgMSwgcmVxLCBpb3YsIG5yX3NlZ3MpOwogCWVyciA9IGZ1c2VfY29weV9vbmUoJmNzLCAmaW4tPmgsIHNpemVvZihpbi0+aCkpOwogCWlmICghZXJyKQogCQllcnIgPSBmdXNlX2NvcHlfYXJncygmY3MsIGluLT5udW1hcmdzLCBpbi0+YXJncGFnZXMsCiAJCQkJICAgICAoc3RydWN0IGZ1c2VfYXJnICopIGluLT5hcmdzLCAwKTsKIAlmdXNlX2NvcHlfZmluaXNoKCZjcyk7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCXJlcS0+bG9ja2VkID0gMDsKIAlpZiAoIWVyciAmJiByZXEtPmludGVycnVwdGVkKQogCQllcnIgPSAtRU5PRU5UOwpAQCAtNjYzLDEyICs2MjgsMTIgQEAKIAllbHNlIHsKIAkJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX1NFTlQ7CiAJCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZmYy0+cHJvY2Vzc2luZyk7Ci0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCX0KIAlyZXR1cm4gcmVxc2l6ZTsKIAogIGVycl91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MzUsOSArNzAwLDkgQEAKIAlzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlIGNzOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZnVzZV9nZXRfY29ubihmaWxlKTsKIAlpZiAoIWZjKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIC1FUEVSTTsKIAotCWZ1c2VfY29weV9pbml0KCZjcywgMCwgTlVMTCwgaW92LCBucl9zZWdzKTsKKwlmdXNlX2NvcHlfaW5pdCgmY3MsIGZjLCAwLCBOVUxMLCBpb3YsIG5yX3NlZ3MpOwogCWlmIChuYnl0ZXMgPCBzaXplb2Yoc3RydWN0IGZ1c2Vfb3V0X2hlYWRlcikpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03NDksNyArNzE0LDcgQEAKIAkgICAgb2gubGVuICE9IG5ieXRlcykKIAkJZ290byBlcnJfZmluaXNoOwogCi0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWVyciA9IC1FTk9FTlQ7CiAJaWYgKCFmYy0+Y29ubmVjdGVkKQogCQlnb3RvIGVycl91bmxvY2s7CkBAIC03NjAsOSArNzI1LDkgQEAKIAkJZ290byBlcnJfdW5sb2NrOwogCiAJaWYgKHJlcS0+aW50ZXJydXB0ZWQpIHsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCWZ1c2VfY29weV9maW5pc2goJmNzKTsKLQkJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAkJcmVxdWVzdF9lbmQoZmMsIHJlcSk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KQEAgLTc3MCwxMiArNzM1LDEyIEBACiAJcmVxLT5vdXQuaCA9IG9oOwogCXJlcS0+bG9ja2VkID0gMTsKIAljcy5yZXEgPSByZXE7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAogCWVyciA9IGNvcHlfb3V0X2FyZ3MoJmNzLCAmcmVxLT5vdXQsIG5ieXRlcyk7CiAJZnVzZV9jb3B5X2ZpbmlzaCgmY3MpOwogCi0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCXJlcS0+bG9ja2VkID0gMDsKIAlpZiAoIWVycikgewogCQlpZiAocmVxLT5pbnRlcnJ1cHRlZCkKQEAgLTc4Nyw3ICs3NTIsNyBAQAogCXJldHVybiBlcnIgPyBlcnIgOiBuYnl0ZXM7CiAKICBlcnJfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAgZXJyX2ZpbmlzaDoKIAlmdXNlX2NvcHlfZmluaXNoKCZjcyk7CiAJcmV0dXJuIGVycjsKQEAgLTgwNCwxOCArNzY5LDE5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBmdXNlX2Rldl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZnVzZV9nZXRfY29ubihmaWxlKTsKIAl1bnNpZ25lZCBtYXNrID0gUE9MTE9VVCB8IFBPTExXUk5PUk07Ci0KKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJaWYgKCFmYykKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBQT0xMRVJSOwogCiAJcG9sbF93YWl0KGZpbGUsICZmYy0+d2FpdHEsIHdhaXQpOwogCi0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmZmMtPnBlbmRpbmcpKQotICAgICAgICAgICAgICAgIG1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKKwlpZiAoIWZjLT5jb25uZWN0ZWQpCisJCW1hc2sgPSBQT0xMRVJSOworCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZmYy0+cGVuZGluZykpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCiAJcmV0dXJuIG1hc2s7CiB9CkBAIC04MjMsNyArNzg5LDcgQEAKIC8qCiAgKiBBYm9ydCBhbGwgcmVxdWVzdHMgb24gdGhlIGdpdmVuIGxpc3QgKHBlbmRpbmcgb3IgcHJvY2Vzc2luZykKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIGFuZCByZWFjcXVpcmVzIGZ1c2VfbG9jaworICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbmQgcmVhY3F1aXJlcyBmYy0+bG9jawogICovCiBzdGF0aWMgdm9pZCBlbmRfcmVxdWVzdHMoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CkBAIC04MzIsNyArNzk4LDcgQEAKIAkJcmVxID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgZnVzZV9yZXEsIGxpc3QpOwogCQlyZXEtPm91dC5oLmVycm9yID0gLUVDT05OQUJPUlRFRDsKIAkJcmVxdWVzdF9lbmQoZmMsIHJlcSk7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJfQogfQogCkBAIC04NjMsMTAgKzgyOSwxMCBAQAogCQkJcmVxLT5lbmQgPSBOVUxMOwogCQkJLyogVGhlIGVuZCBmdW5jdGlvbiB3aWxsIGNvbnN1bWUgdGhpcyByZWZlcmVuY2UgKi8KIAkJCV9fZnVzZV9nZXRfcmVxdWVzdChyZXEpOwotCQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQkJd2FpdF9ldmVudChyZXEtPndhaXRxLCAhcmVxLT5sb2NrZWQpOwogCQkJZW5kKGZjLCByZXEpOwotCQkJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCQkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCX0KIAl9CiB9CkBAIC04OTMsMzUgKzg1OSw0NCBAQAogICovCiB2b2lkIGZ1c2VfYWJvcnRfY29ubihzdHJ1Y3QgZnVzZV9jb25uICpmYykKIHsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJaWYgKGZjLT5jb25uZWN0ZWQpIHsKIAkJZmMtPmNvbm5lY3RlZCA9IDA7CiAJCWVuZF9pb19yZXF1ZXN0cyhmYyk7CiAJCWVuZF9yZXF1ZXN0cyhmYywgJmZjLT5wZW5kaW5nKTsKIAkJZW5kX3JlcXVlc3RzKGZjLCAmZmMtPnByb2Nlc3NpbmcpOwogCQl3YWtlX3VwX2FsbCgmZmMtPndhaXRxKTsKKwkJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCBmdXNlX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOwotCi0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCWZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZnVzZV9nZXRfY29ubihmaWxlKTsKIAlpZiAoZmMpIHsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCWZjLT5jb25uZWN0ZWQgPSAwOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cGVuZGluZyk7CiAJCWVuZF9yZXF1ZXN0cyhmYywgJmZjLT5wcm9jZXNzaW5nKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7Ci0JaWYgKGZjKQorCQlzcGluX3VubG9jaygmZmMtPmxvY2spOworCQlmYXN5bmNfaGVscGVyKC0xLCBmaWxlLCAwLCAmZmMtPmZhc3luYyk7CiAJCWtvYmplY3RfcHV0KCZmYy0+a29iaik7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnVzZV9kZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKK3sKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CisJaWYgKCFmYykKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIE5vIGxvY2tpbmcgLSBmYXN5bmNfaGVscGVyIGRvZXMgaXRzIG93biBsb2NraW5nICovCisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmZmMtPmZhc3luYyk7Cit9CisKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVzZV9kZXZfb3BlcmF0aW9ucyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCkBAIC05MzEsNiArOTA2LDcgQEAKIAkud3JpdGV2CQk9IGZ1c2VfZGV2X3dyaXRldiwKIAkucG9sbAkJPSBmdXNlX2Rldl9wb2xsLAogCS5yZWxlYXNlCT0gZnVzZV9kZXZfcmVsZWFzZSwKKwkuZmFzeW5jCQk9IGZ1c2VfZGV2X2Zhc3luYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBmdXNlX21pc2NkZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCAyNTYzNTViLi44ZDc1NDZlIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTExNyw4ICsxMTcsOCBAQAogCQkJcmV0dXJuIDA7CiAKIAkJZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKLQkJcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JCWlmICghcmVxKQorCQlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCQlpZiAoSVNfRVJSKHJlcSkpCiAJCQlyZXR1cm4gMDsKIAogCQlmdXNlX2xvb2t1cF9pbml0KHJlcSwgZW50cnktPmRfcGFyZW50LT5kX2lub2RlLCBlbnRyeSwgJm91dGFyZyk7CkBAIC0xODgsOSArMTg4LDkgQEAKIAlpZiAoZW50cnktPmRfbmFtZS5sZW4gPiBGVVNFX05BTUVfTUFYKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKHJlcSkpOwogCiAJZnVzZV9sb29rdXBfaW5pdChyZXEsIGRpciwgZW50cnksICZvdXRhcmcpOwogCXJlcXVlc3Rfc2VuZChmYywgcmVxKTsKQEAgLTI0NCwxNSArMjQ0LDE0IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJaW50IGZsYWdzID0gbmQtPmludGVudC5vcGVuLmZsYWdzIC0gMTsKIAotCWVyciA9IC1FTk9TWVM7CiAJaWYgKGZjLT5ub19jcmVhdGUpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT1NZUzsKIAotCWVyciA9IC1FSU5UUjsKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJZ290byBvdXQ7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKKwllcnIgPSAtRU5PTUVNOwogCWZmID0gZnVzZV9maWxlX2FsbG9jKCk7CiAJaWYgKCFmZikKIAkJZ290byBvdXRfcHV0X3JlcXVlc3Q7CkBAIC0zMTQsNyArMzEzLDYgQEAKIAlmdXNlX2ZpbGVfZnJlZShmZik7CiAgb3V0X3B1dF9yZXF1ZXN0OgogCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7Ci0gb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM3NSw5ICszNzMsOSBAQAogewogCXN0cnVjdCBmdXNlX21rbm9kX2luIGluYXJnOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLm1vZGUgPSBtb2RlOwpAQCAtNDA3LDkgKzQwNSw5IEBACiB7CiAJc3RydWN0IGZ1c2VfbWtkaXJfaW4gaW5hcmc7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcubW9kZSA9IG1vZGU7CkBAIC00MjcsOSArNDI1LDkgQEAKIHsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKIAl1bnNpZ25lZCBsZW4gPSBzdHJsZW4obGluaykgKyAxOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1NZTUxJTks7CiAJcmVxLT5pbi5udW1hcmdzID0gMjsKQEAgLTQ0NCw5ICs0NDIsOSBAQAogewogCWludCBlcnI7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfVU5MSU5LOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChkaXIpOwpAQCAtNDc2LDkgKzQ3NCw5IEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9STURJUjsKIAlyZXEtPmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoZGlyKTsKQEAgLTUwNCw5ICs1MDIsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IGZ1c2VfcmVuYW1lX2luIGluYXJnOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihvbGRkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLm5ld2RpciA9IGdldF9ub2RlX2lkKG5ld2Rpcik7CkBAIC01NTMsOSArNTUxLDkgQEAKIAlzdHJ1Y3QgZnVzZV9saW5rX2luIGluYXJnOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLm9sZG5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKQEAgLTU4Myw5ICs1ODEsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IGZ1c2VfYXR0cl9vdXQgYXJnOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfR0VUQVRUUjsKIAlyZXEtPmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoaW5vZGUpOwpAQCAtNjczLDkgKzY3MSw5IEBACiAJaWYgKGZjLT5ub19hY2Nlc3MpCiAJCXJldHVybiAwOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5tYXNrID0gbWFzazsKQEAgLTc4MCw5ICs3NzgsOSBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYWdlKSB7CkBAIC04MDksMTEgKzgwNywxMSBAQAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKIAljaGFyICpsaW5rOwogCi0JaWYgKCFyZXEpCi0JCXJldHVybiBFUlJfUFRSKC1FSU5UUik7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKHJlcSkpOwogCiAJbGluayA9IChjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWxpbmspIHsKQEAgLTkzMyw5ICs5MzEsOSBAQAogCQl9CiAJfQogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpYXR0cl90b19mYXR0cihhdHRyLCAmaW5hcmcpOwpAQCAtOTk1LDkgKzk5Myw5IEBACiAJaWYgKGZjLT5ub19zZXR4YXR0cikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5zaXplID0gc2l6ZTsKQEAgLTEwMzUsOSArMTAzMyw5IEBACiAJaWYgKGZjLT5ub19nZXR4YXR0cikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5zaXplID0gc2l6ZTsKQEAgLTEwODUsOSArMTA4Myw5IEBACiAJaWYgKGZjLT5ub19saXN0eGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuc2l6ZSA9IHNpemU7CkBAIC0xMTMxLDkgKzExMjksOSBAQAogCWlmIChmYy0+bm9fcmVtb3ZleGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfUkVNT1ZFWEFUVFI7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggOTc1ZjI2OS4uZTRmMDQxYSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTIyLDkgKzIyLDkgQEAKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKIAlpbnQgZXJyOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5mbGFncyA9IGZpbGUtPmZfZmxhZ3MgJiB+KE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX05PQ1RUWSB8IE9fVFJVTkMpOwpAQCAtMTg0LDkgKzE4NCw5IEBACiAJaWYgKGZjLT5ub19mbHVzaCkKIAkJcmV0dXJuIDA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLmZoID0gZmYtPmZoOwpAQCAtMjIzLDkgKzIyMyw5IEBACiAJaWYgKCghaXNkaXIgJiYgZmMtPm5vX2ZzeW5jKSB8fCAoaXNkaXIgJiYgZmMtPm5vX2ZzeW5jZGlyKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLmZoID0gZmYtPmZoOwpAQCAtMjk3LDkgKzI5Nyw5IEBACiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gLUVJTlRSOwotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQorCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJZXJyID0gUFRSX0VSUihyZXEpOworCWlmIChJU19FUlIocmVxKSkKIAkJZ290byBvdXQ7CiAKIAlyZXEtPm91dC5wYWdlX3plcm9pbmcgPSAxOwpAQCAtMzY4LDEwICszNjgsMTAgQEAKIAkgICAgIChyZXEtPm51bV9wYWdlcyArIDEpICogUEFHRV9DQUNIRV9TSVpFID4gZmMtPm1heF9yZWFkIHx8CiAJICAgICByZXEtPnBhZ2VzW3JlcS0+bnVtX3BhZ2VzIC0gMV0tPmluZGV4ICsgMSAhPSBwYWdlLT5pbmRleCkpIHsKIAkJZnVzZV9zZW5kX3JlYWRwYWdlcyhyZXEsIGRhdGEtPmZpbGUsIGlub2RlKTsKLQkJZGF0YS0+cmVxID0gcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JCWlmICghcmVxKSB7CisJCWRhdGEtPnJlcSA9IHJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJCWlmIChJU19FUlIocmVxKSkgewogCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlyZXR1cm4gLUVJTlRSOworCQkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAkJfQogCX0KIAlyZXEtPnBhZ2VzW3JlcS0+bnVtX3BhZ2VzXSA9IHBhZ2U7CkBAIC0zOTIsMTMgKzM5MiwxNyBAQAogCiAJZGF0YS5maWxlID0gZmlsZTsKIAlkYXRhLmlub2RlID0gaW5vZGU7Ci0JZGF0YS5yZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIWRhdGEucmVxKQotCQlyZXR1cm4gLUVJTlRSOworCWRhdGEucmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKGRhdGEucmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YS5yZXEpOwogCiAJZXJyID0gcmVhZF9jYWNoZV9wYWdlcyhtYXBwaW5nLCBwYWdlcywgZnVzZV9yZWFkcGFnZXNfZmlsbCwgJmRhdGEpOwotCWlmICghZXJyKQotCQlmdXNlX3NlbmRfcmVhZHBhZ2VzKGRhdGEucmVxLCBmaWxlLCBpbm9kZSk7CisJaWYgKCFlcnIpIHsKKwkJaWYgKGRhdGEucmVxLT5udW1fcGFnZXMpCisJCQlmdXNlX3NlbmRfcmVhZHBhZ2VzKGRhdGEucmVxLCBmaWxlLCBpbm9kZSk7CisJCWVsc2UKKwkJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIGRhdGEucmVxKTsKKwl9CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDUxLDkgKzQ1NSw5IEBACiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCiAJCXJldHVybiAtRUlPOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAlyZXEtPm51bV9wYWdlcyA9IDE7CiAJcmVxLT5wYWdlc1swXSA9IHBhZ2U7CkBAIC01MjgsOSArNTMyLDkgQEAKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXdoaWxlIChjb3VudCkgewogCQlzaXplX3QgbnJlczsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZnVzZV9pLmggYi9mcy9mdXNlL2Z1c2VfaS5oCmluZGV4IGExNmEwNGYuLjE5YzcxODUgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZnVzZV9pLmgKKysrIGIvZnMvZnVzZS9mdXNlX2kuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgIEZVU0U6IEZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlCi0gIENvcHlyaWdodCAoQykgMjAwMS0yMDA1ICBNaWtsb3MgU3plcmVkaSA8bWlrbG9zQHN6ZXJlZGkuaHU+CisgIENvcHlyaWdodCAoQykgMjAwMS0yMDA2ICBNaWtsb3MgU3plcmVkaSA8bWlrbG9zQHN6ZXJlZGkuaHU+CiAKICAgVGhpcyBwcm9ncmFtIGNhbiBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwuCiAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HLgpAQCAtMTgsOCArMTgsOCBAQAogLyoqIE1heCBudW1iZXIgb2YgcGFnZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIHNpbmdsZSByZWFkIHJlcXVlc3QgKi8KICNkZWZpbmUgRlVTRV9NQVhfUEFHRVNfUEVSX1JFUSAzMgogCi0vKiogSWYgbW9yZSByZXF1ZXN0cyBhcmUgb3V0c3RhbmRpbmcsIHRoZW4gdGhlIG9wZXJhdGlvbiB3aWxsIGJsb2NrICovCi0jZGVmaW5lIEZVU0VfTUFYX09VVFNUQU5ESU5HIDEwCisvKiogTWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgYmFja2dyb3VuZCByZXF1ZXN0cyAqLworI2RlZmluZSBGVVNFX01BWF9CQUNLR1JPVU5EIDEwCiAKIC8qKiBJdCBjb3VsZCBiZSBhcyBsYXJnZSBhcyBQQVRIX01BWCwgYnV0IHdvdWxkIHRoYXQgaGF2ZSBhbnkgdXNlcz8gKi8KICNkZWZpbmUgRlVTRV9OQU1FX01BWCAxMDI0CkBAIC0xMzEsOCArMTMxLDggQEAKICAqIEEgcmVxdWVzdCB0byB0aGUgY2xpZW50CiAgKi8KIHN0cnVjdCBmdXNlX3JlcSB7Ci0JLyoqIFRoaXMgY2FuIGJlIG9uIGVpdGhlciB1bnVzZWRfbGlzdCwgcGVuZGluZyBwcm9jZXNzaW5nIG9yCi0JICAgIGlvIGxpc3RzIGluIGZ1c2VfY29ubiAqLworCS8qKiBUaGlzIGNhbiBiZSBvbiBlaXRoZXIgcGVuZGluZyBwcm9jZXNzaW5nIG9yIGlvIGxpc3RzIGluCisJICAgIGZ1c2VfY29ubiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCS8qKiBFbnRyeSBvbiB0aGUgYmFja2dyb3VuZCBsaXN0ICovCkBAIC0xNDQsMTUgKzE0NCwxMiBAQAogCS8qCiAJICogVGhlIGZvbGxvd2luZyBiaXRmaWVsZHMgYXJlIGVpdGhlciBzZXQgb25jZSBiZWZvcmUgdGhlCiAJICogcmVxdWVzdCBpcyBxdWV1ZWQgb3Igc2V0dGluZy9jbGVhcmluZyB0aGVtIGlzIHByb3RlY3RlZCBieQotCSAqIGZ1c2VfbG9jaworCSAqIGZ1c2VfY29ubi0+bG9jawogCSAqLwogCiAJLyoqIFRydWUgaWYgdGhlIHJlcXVlc3QgaGFzIHJlcGx5ICovCiAJdW5zaWduZWQgaXNyZXBseToxOwogCi0JLyoqIFRoZSByZXF1ZXN0IGlzIHByZWFsbG9jYXRlZCAqLwotCXVuc2lnbmVkIHByZWFsbG9jYXRlZDoxOwotCiAJLyoqIFRoZSByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCAqLwogCXVuc2lnbmVkIGludGVycnVwdGVkOjE7CiAKQEAgLTIxMyw2ICsyMTAsOSBAQAogICogdW5tb3VudGVkLgogICovCiBzdHJ1Y3QgZnVzZV9jb25uIHsKKwkvKiogTG9jayBwcm90ZWN0aW5nIGFjY2Vzc2VzcyB0byAgbWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwogCS8qKiBUaGUgdXNlciBpZCBmb3IgdGhpcyBtb3VudCAqLwogCXVpZF90IHVzZXJfaWQ7CiAKQEAgLTI0NCwxOSArMjQ0LDIwIEBACiAJICAgIGludGVycnVwdGVkIHJlcXVlc3QpICovCiAJc3RydWN0IGxpc3RfaGVhZCBiYWNrZ3JvdW5kOwogCi0JLyoqIENvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgb3V0c3RhbmRpbmdfc2VtOworCS8qKiBOdW1iZXIgb2YgcmVxdWVzdHMgY3VycmVudGx5IGluIHRoZSBiYWNrZ3JvdW5kICovCisJdW5zaWduZWQgbnVtX2JhY2tncm91bmQ7CiAKLQkvKiogVGhpcyBjb3VudHMgdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyBpZgotCSAgICBvdXRzdGFuZGluZ19zZW0gd291bGQgZ28gbmVnYXRpdmUgKi8KLQl1bnNpZ25lZCBvdXRzdGFuZGluZ19kZWJ0OworCS8qKiBGbGFnIGluZGljYXRpbmcgaWYgY29ubmVjdGlvbiBpcyBibG9ja2VkLiAgVGhpcyB3aWxsIGJlCisJICAgIHRoZSBjYXNlIGJlZm9yZSB0aGUgSU5JVCByZXBseSBpcyByZWNlaXZlZCwgYW5kIGlmIHRoZXJlCisJICAgIGFyZSB0b28gbWFueSBvdXRzdGFkaW5nIGJhY2tncm91bmRzIHJlcXVlc3RzICovCisJaW50IGJsb2NrZWQ7CisKKwkvKiogd2FpdHEgZm9yIGJsb2NrZWQgY29ubmVjdGlvbiAqLworCXdhaXRfcXVldWVfaGVhZF90IGJsb2NrZWRfd2FpdHE7CiAKIAkvKiogUlcgc2VtYXBob3JlIGZvciBleGNsdXNpb24gd2l0aCBmdXNlX3B1dF9zdXBlcigpICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBzYnB1dF9zZW07CiAKLQkvKiogVGhlIGxpc3Qgb2YgdW51c2VkIHJlcXVlc3RzICovCi0Jc3RydWN0IGxpc3RfaGVhZCB1bnVzZWRfbGlzdDsKLQogCS8qKiBUaGUgbmV4dCB1bmlxdWUgcmVxdWVzdCBpZCAqLwogCXU2NCByZXFjdHI7CiAKQEAgLTMxOCw2ICszMTksOSBAQAogCiAJLyoqIGtvYmplY3QgKi8KIAlzdHJ1Y3Qga29iamVjdCBrb2JqOworCisJLyoqIE9fQVNZTkMgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9jb25uICpnZXRfZnVzZV9jb25uX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0zNDksMjEgKzM1Myw2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdXNlX2Rldl9vcGVyYXRpb25zOwogCiAvKioKLSAqIFRoaXMgaXMgdGhlIHNpbmdsZSBnbG9iYWwgc3BpbmxvY2sgd2hpY2ggcHJvdGVjdHMgRlVTRSdzIHN0cnVjdHVyZXMKLSAqCi0gKiBUaGUgZm9sbG93aW5nIGRhdGEgaXMgcHJvdGVjdGVkIGJ5IHRoaXMgbG9jazoKLSAqCi0gKiAgLSB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIG9mIHRoZSBkZXZpY2UgZmlsZQotICogIC0gdGhlIHNfZnNfaW5mbyBmaWVsZCBvZiB0aGUgc3VwZXIgYmxvY2sKLSAqICAtIHVudXNlZF9saXN0LCBwZW5kaW5nLCBwcm9jZXNzaW5nIGxpc3RzIGluIGZ1c2VfY29ubgotICogIC0gYmFja2dyb3VuZCBsaXN0IGluIGZ1c2VfY29ubgotICogIC0gdGhlIHVuaXF1ZSByZXF1ZXN0IElEIGNvdW50ZXIgcmVxY3RyIGluIGZ1c2VfY29ubgotICogIC0gdGhlIHNiIChzdXBlcl9ibG9jaykgZmllbGQgaW4gZnVzZV9jb25uCi0gKiAgLSB0aGUgZmlsZSAoZGV2aWNlIGZpbGUpIGZpZWxkIGluIGZ1c2VfY29ubgotICovCi1leHRlcm4gc3BpbmxvY2tfdCBmdXNlX2xvY2s7Ci0KLS8qKgogICogR2V0IGEgZmlsbGVkIGluIGlub2RlCiAgKi8KIHN0cnVjdCBpbm9kZSAqZnVzZV9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbm9kZWlkLApAQCAtNDYxLDExICs0NTAsMTEgQEAKIC8qKgogICogUmVzZXJ2ZSBhIHByZWFsbG9jYXRlZCByZXF1ZXN0CiAgKi8KLXN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CitzdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcShzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CiAKIC8qKgotICogRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCBvZiBhIHJlcXVlc3QuICBJZiBjb3VudCBnb2VzIHRvIHplcm8gcHV0Ci0gKiBvbiB1bnVzZWQgbGlzdCAocHJlYWxsb2NhdGVkKSBvciBmcmVlIHJlcXVlc3QgKG5vdCBwcmVhbGxvY2F0ZWQpLgorICogRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCBvZiBhIHJlcXVlc3QuICBJZiBjb3VudCBnb2VzIHRvIHplcm8gZnJlZQorICogdGhlIHJlcXVlc3QuCiAgKi8KIHZvaWQgZnVzZV9wdXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpOwogCkBAIC00ODcsNyArNDc2LDcgQEAKIC8qKgogICogUmVsZWFzZSBpbm9kZXMgYW5kIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGJhY2tncm91bmQgcmVxdWVzdAogICovCi12b2lkIGZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKTsKK3ZvaWQgZnVzZV9yZWxlYXNlX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKTsKIAogLyogQWJvcnQgYWxsIHJlcXVlc3RzICovCiB2b2lkIGZ1c2VfYWJvcnRfY29ubihzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2lub2RlLmMgYi9mcy9mdXNlL2lub2RlLmMKaW5kZXggODc5ZTZmYi4uZmQzNDAzNyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9pbm9kZS5jCisrKyBiL2ZzL2Z1c2UvaW5vZGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgIEZVU0U6IEZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlCi0gIENvcHlyaWdodCAoQykgMjAwMS0yMDA1ICBNaWtsb3MgU3plcmVkaSA8bWlrbG9zQHN6ZXJlZGkuaHU+CisgIENvcHlyaWdodCAoQykgMjAwMS0yMDA2ICBNaWtsb3MgU3plcmVkaSA8bWlrbG9zQHN6ZXJlZGkuaHU+CiAKICAgVGhpcyBwcm9ncmFtIGNhbiBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwuCiAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HLgpAQCAtMjIsNyArMjIsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zcGlubG9ja190IGZ1c2VfbG9jazsKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKmZ1c2VfaW5vZGVfY2FjaGVwOwogc3RhdGljIHN0cnVjdCBzdWJzeXN0ZW0gY29ubmVjdGlvbnNfc3Vic3lzOwogCkBAIC0yMDcsMTUgKzIwNiwxNyBAQAogCiAJZG93bl93cml0ZSgmZmMtPnNicHV0X3NlbSk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZmYy0+YmFja2dyb3VuZCkpCi0JCWZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKGxpc3RfZW50cnkoZmMtPmJhY2tncm91bmQubmV4dCwKKwkJZnVzZV9yZWxlYXNlX2JhY2tncm91bmQoZmMsCisJCQkJCWxpc3RfZW50cnkoZmMtPmJhY2tncm91bmQubmV4dCwKIAkJCQkJCSAgIHN0cnVjdCBmdXNlX3JlcSwgYmdfZW50cnkpKTsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlmYy0+bW91bnRlZCA9IDA7CiAJZmMtPmNvbm5lY3RlZCA9IDA7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl1cF93cml0ZSgmZmMtPnNicHV0X3NlbSk7CiAJLyogRmx1c2ggYWxsIHJlYWRlcnMgb24gdGhpcyBmcyAqLworCWtpbGxfZmFzeW5jKCZmYy0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJd2FrZV91cF9hbGwoJmZjLT53YWl0cSk7CiAJa29iamVjdF9kZWwoJmZjLT5rb2JqKTsKIAlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOwpAQCAtMjQyLDkgKzI0Myw5IEBACiAJc3RydWN0IGZ1c2Vfc3RhdGZzX291dCBvdXRhcmc7CiAJaW50IGVycjsKIAotICAgICAgICByZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmb3V0YXJnLCAwLCBzaXplb2Yob3V0YXJnKSk7CiAJcmVxLT5pbi5udW1hcmdzID0gMDsKQEAgLTM2OSwxNSArMzcwLDcgQEAKIAogc3RhdGljIHZvaWQgZnVzZV9jb25uX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uX2tvYmooa29iaik7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjLT51bnVzZWRfbGlzdCkpIHsKLQkJc3RydWN0IGZ1c2VfcmVxICpyZXE7Ci0JCXJlcSA9IGxpc3RfZW50cnkoZmMtPnVudXNlZF9saXN0Lm5leHQsIHN0cnVjdCBmdXNlX3JlcSwgbGlzdCk7Ci0JCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwotCQlmdXNlX3JlcXVlc3RfZnJlZShyZXEpOwotCX0KLQlrZnJlZShmYyk7CisJa2ZyZWUoZ2V0X2Z1c2VfY29ubl9rb2JqKGtvYmopKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmdXNlX2Nvbm4gKm5ld19jb25uKHZvaWQpCkBAIC0zODYsNjQgKzM3OSwyNSBAQAogCiAJZmMgPSBremFsbG9jKHNpemVvZigqZmMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZmMpIHsKLQkJaW50IGk7CisJCXNwaW5fbG9ja19pbml0KCZmYy0+bG9jayk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZjLT53YWl0cSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZjLT5ibG9ja2VkX3dhaXRxKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmZjLT5wZW5kaW5nKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmZjLT5wcm9jZXNzaW5nKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmZjLT5pbyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZmYy0+dW51c2VkX2xpc3QpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPmJhY2tncm91bmQpOwotCQlzZW1hX2luaXQoJmZjLT5vdXRzdGFuZGluZ19zZW0sIDEpOyAvKiBPbmUgZm9yIElOSVQgKi8KIAkJaW5pdF9yd3NlbSgmZmMtPnNicHV0X3NlbSk7CiAJCWtvYmpfc2V0X2tzZXRfcyhmYywgY29ubmVjdGlvbnNfc3Vic3lzKTsKIAkJa29iamVjdF9pbml0KCZmYy0+a29iaik7CiAJCWF0b21pY19zZXQoJmZjLT5udW1fd2FpdGluZywgMCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBGVVNFX01BWF9PVVRTVEFORElORzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfcmVxdWVzdF9hbGxvYygpOwotCQkJaWYgKCFyZXEpIHsKLQkJCQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJmZjLT51bnVzZWRfbGlzdCk7Ci0JCX0KIAkJZmMtPmJkaS5yYV9wYWdlcyA9IChWTV9NQVhfUkVBREFIRUFEICogMTAyNCkgLyBQQUdFX0NBQ0hFX1NJWkU7CiAJCWZjLT5iZGkudW5wbHVnX2lvX2ZuID0gZGVmYXVsdF91bnBsdWdfaW9fZm47CiAJCWZjLT5yZXFjdHIgPSAwOworCQlmYy0+YmxvY2tlZCA9IDE7CiAJfQogCXJldHVybiBmYzsKIH0KIAotc3RhdGljIHN0cnVjdCBmdXNlX2Nvbm4gKmdldF9jb25uKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOwotCWludCBlcnI7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWlmIChmaWxlLT5mX29wICE9ICZmdXNlX2Rldl9vcGVyYXRpb25zKQotCQlnb3RvIG91dF9lcnI7Ci0KLQllcnIgPSAtRU5PTUVNOwotCWZjID0gbmV3X2Nvbm4oKTsKLQlpZiAoIWZjKQotCQlnb3RvIG91dF9lcnI7Ci0KLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JZXJyID0gLUVJTlZBTDsKLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlrb2JqZWN0X2dldCgmZmMtPmtvYmopOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZjOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCXJldHVybiBmYzsKLQotIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7Ci0Ja29iamVjdF9wdXQoJmZjLT5rb2JqKTsKLSBvdXRfZXJyOgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdldF9yb290X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIG1vZGUpCiB7CiAJc3RydWN0IGZ1c2VfYXR0ciBhdHRyOwpAQCAtNDY3LDcgKzQyMSw2IEBACiAKIHN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0JaW50IGk7CiAJc3RydWN0IGZ1c2VfaW5pdF9vdXQgKmFyZyA9ICZyZXEtPm1pc2MuaW5pdF9vdXQ7CiAKIAlpZiAocmVxLT5vdXQuaC5lcnJvciB8fCBhcmctPm1ham9yICE9IEZVU0VfS0VSTkVMX1ZFUlNJT04pCkBAIC00ODYsMjIgKzQzOSwxMyBAQAogCQlmYy0+bWlub3IgPSBhcmctPm1pbm9yOwogCQlmYy0+bWF4X3dyaXRlID0gYXJnLT5taW5vciA8IDUgPyA0MDk2IDogYXJnLT5tYXhfd3JpdGU7CiAJfQotCi0JLyogQWZ0ZXIgSU5JVCByZXBseSBpcyByZWNlaXZlZCBvdGhlciByZXF1ZXN0cyBjYW4gZ28KLQkgICBvdXQuICBTbyBkbyAoRlVTRV9NQVhfT1VUU1RBTkRJTkcgLSAxKSBudW1iZXIgb2YKLQkgICB1cCgpcyBvbiBvdXRzdGFuZGluZ19zZW0uICBUaGUgbGFzdCB1cCgpIGlzIGRvbmUgaW4KLQkgICBmdXNlX3B1dGJhY2tfcmVxdWVzdCgpICovCi0JZm9yIChpID0gMTsgaSA8IEZVU0VfTUFYX09VVFNUQU5ESU5HOyBpKyspCi0JCXVwKCZmYy0+b3V0c3RhbmRpbmdfc2VtKTsKLQogCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJZmMtPmJsb2NrZWQgPSAwOworCXdha2VfdXBfYWxsKCZmYy0+YmxvY2tlZF93YWl0cSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZ1c2Vfc2VuZF9pbml0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQorc3RhdGljIHZvaWQgZnVzZV9zZW5kX2luaXQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewotCS8qIFRoaXMgaXMgY2FsbGVkIGZyb20gZnVzZV9yZWFkX3N1cGVyKCkgc28gdGhlcmUncyBndWFyYW50ZWVkCi0JICAgdG8gYmUgZXhhY3RseSBvbmUgcmVxdWVzdCBhdmFpbGFibGUgKi8KLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwogCXN0cnVjdCBmdXNlX2luaXRfaW4gKmFyZyA9ICZyZXEtPm1pc2MuaW5pdF9pbjsKIAogCWFyZy0+bWFqb3IgPSBGVVNFX0tFUk5FTF9WRVJTSU9OOwpAQCAtNTI1LDEyICs0NjksOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGNvbm5faWQodm9pZCkKIHsKKwkvKiBCS0wgaXMgaGVsZCBmb3IgLT5nZXRfc2IoKSAqLwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY3RyID0gMTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQl2YWwgPSBjdHIrKzsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlyZXR1cm4gdmFsOworCXJldHVybiBjdHIrKzsKIH0KIAogc3RhdGljIGludCBmdXNlX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKQEAgLTU0MCw2ICs0ODEsNyBAQAogCXN0cnVjdCBmdXNlX21vdW50X2RhdGEgZDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeTsKKwlzdHJ1Y3QgZnVzZV9yZXEgKmluaXRfcmVxOwogCWludCBlcnI7CiAKIAlpZiAoIXBhcnNlX2Z1c2Vfb3B0KChjaGFyICopIGRhdGEsICZkKSkKQEAgLTU1NSwxMCArNDk3LDE3IEBACiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZjID0gZ2V0X2Nvbm4oZmlsZSwgc2IpOwotCWZwdXQoZmlsZSk7Ci0JaWYgKElTX0VSUihmYykpCi0JCXJldHVybiBQVFJfRVJSKGZjKTsKKwlpZiAoZmlsZS0+Zl9vcCAhPSAmZnVzZV9kZXZfb3BlcmF0aW9ucykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXR0aW5nIGZpbGUtPnByaXZhdGVfZGF0YSBjYW4ndCByYWNlIHdpdGggb3RoZXIgbW91bnQoKQorCSAgIGluc3RhbmNlcywgc2luY2UgQktMIGlzIGhlbGQgZm9yIC0+Z2V0X3NiKCkgKi8KKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZjID0gbmV3X2Nvbm4oKTsKKwlpZiAoIWZjKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWZjLT5mbGFncyA9IGQuZmxhZ3M7CiAJZmMtPnVzZXJfaWQgPSBkLnVzZXJfaWQ7CkBAIC01NzksMjcgKzUyOCw0MCBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwlpbml0X3JlcSA9IGZ1c2VfcmVxdWVzdF9hbGxvYygpOworCWlmICghaW5pdF9yZXEpCisJCWdvdG8gZXJyX3B1dF9yb290OworCiAJZXJyID0ga29iamVjdF9zZXRfbmFtZSgmZmMtPmtvYmosICIlbGx1IiwgY29ubl9pZCgpKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9wdXRfcm9vdDsKKwkJZ290byBlcnJfZnJlZV9yZXE7CiAKIAllcnIgPSBrb2JqZWN0X2FkZCgmZmMtPmtvYmopOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX3B1dF9yb290OworCQlnb3RvIGVycl9mcmVlX3JlcTsKIAogCXNiLT5zX3Jvb3QgPSByb290X2RlbnRyeTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CiAJZmMtPm1vdW50ZWQgPSAxOwogCWZjLT5jb25uZWN0ZWQgPSAxOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCWtvYmplY3RfZ2V0KCZmYy0+a29iaik7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmM7CisJLyoKKwkgKiBhdG9taWNfZGVjX2FuZF90ZXN0KCkgaW4gZnB1dCgpIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkKKwkgKiBtZW1vcnkgYmFycmllciBmb3IgZmlsZS0+cHJpdmF0ZV9kYXRhIHRvIGJlIHZpc2libGUgb24gYWxsCisJICogQ1BVcyBhZnRlciB0aGlzCisJICovCisJZnB1dChmaWxlKTsKIAotCWZ1c2Vfc2VuZF9pbml0KGZjKTsKKwlmdXNlX3NlbmRfaW5pdChmYywgaW5pdF9yZXEpOwogCiAJcmV0dXJuIDA7CiAKKyBlcnJfZnJlZV9yZXE6CisJZnVzZV9yZXF1ZXN0X2ZyZWUoaW5pdF9yZXEpOwogIGVycl9wdXRfcm9vdDoKIAlkcHV0KHJvb3RfZGVudHJ5KTsKICBlcnI6CisJZnB1dChmaWxlKTsKIAlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOwogCXJldHVybiBlcnI7CiB9CkBAIC03NTMsNyArNzE1LDYgQEAKIAlwcmludGsoImZ1c2UgaW5pdCAoQVBJIHZlcnNpb24gJWkuJWkpXG4iLAogCSAgICAgICBGVVNFX0tFUk5FTF9WRVJTSU9OLCBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OKTsKIAotCXNwaW5fbG9ja19pbml0KCZmdXNlX2xvY2spOwogCXJlcyA9IGZ1c2VfZnNfaW5pdCgpOwogCWlmIChyZXMpCiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeS5jIGIvZnMvaW5vdGlmeS5jCmluZGV4IDM2N2M0ODcuLjFmNTAzMDIgMTAwNjQ0Ci0tLSBhL2ZzL2lub3RpZnkuYworKysgYi9mcy9pbm90aWZ5LmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogCVdBUk5fT04oZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRCk7CiAJc3Bpbl9sb2NrKCZlbnRyeS0+ZF9sb2NrKTsKIAlwYXJlbnQgPSBlbnRyeS0+ZF9wYXJlbnQ7Ci0JaWYgKGlub3RpZnlfaW5vZGVfd2F0Y2hlZChwYXJlbnQtPmRfaW5vZGUpKQorCWlmIChwYXJlbnQtPmRfaW5vZGUgJiYgaW5vdGlmeV9pbm9kZV93YXRjaGVkKHBhcmVudC0+ZF9pbm9kZSkpCiAJCWVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOwogCXNwaW5fdW5sb2NrKCZlbnRyeS0+ZF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggYmY0NzhhZC4uMmM1ZjFmOCAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTg5OSwxMSArODk5LDEzIEBACiAvKgogICogZG8gbG9vcGJhY2sgbW91bnQuCiAgKi8KLXN0YXRpYyBpbnQgZG9fbG9vcGJhY2soc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNoYXIgKm9sZF9uYW1lLCBpbnQgcmVjdXJzZSkKK3N0YXRpYyBpbnQgZG9fbG9vcGJhY2soc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNoYXIgKm9sZF9uYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgbW50X2ZsYWdzKQogewogCXN0cnVjdCBuYW1laWRhdGEgb2xkX25kOwogCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gTlVMTDsKKwlpbnQgcmVjdXJzZSA9IGZsYWdzICYgTVNfUkVDOwogCWludCBlcnIgPSBtb3VudF9pc19zYWZlKG5kKTsKKwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJaWYgKCFvbGRfbmFtZSB8fCAhKm9sZF9uYW1lKQpAQCAtOTM3LDYgKzkzOSw3IEBACiAJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAkJcmVsZWFzZV9tb3VudHMoJnVtb3VudF9saXN0KTsKIAl9CisJbW50LT5tbnRfZmxhZ3MgPSBtbnRfZmxhZ3M7CiAKIG91dDoKIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CkBAIC0xMzUwLDcgKzEzNTMsNyBAQAogCQlyZXR2YWwgPSBkb19yZW1vdW50KCZuZCwgZmxhZ3MgJiB+TVNfUkVNT1VOVCwgbW50X2ZsYWdzLAogCQkJCSAgICBkYXRhX3BhZ2UpOwogCWVsc2UgaWYgKGZsYWdzICYgTVNfQklORCkKLQkJcmV0dmFsID0gZG9fbG9vcGJhY2soJm5kLCBkZXZfbmFtZSwgZmxhZ3MgJiBNU19SRUMpOworCQlyZXR2YWwgPSBkb19sb29wYmFjaygmbmQsIGRldl9uYW1lLCBmbGFncywgbW50X2ZsYWdzKTsKIAllbHNlIGlmIChmbGFncyAmIChNU19TSEFSRUQgfCBNU19QUklWQVRFIHwgTVNfU0xBVkUgfCBNU19VTkJJTkRBQkxFKSkKIAkJcmV0dmFsID0gZG9fY2hhbmdlX3R5cGUoJm5kLCBmbGFncyk7CiAJZWxzZSBpZiAoZmxhZ3MgJiBNU19NT1ZFKQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9hdXRoLmMgYi9mcy9uZnNkL2F1dGguYwppbmRleCBjZmU5Y2U4Li42ZTkyYjBmIDEwMDY0NAotLS0gYS9mcy9uZnNkL2F1dGguYworKysgYi9mcy9uZnNkL2F1dGguYwpAQCAtMTQsNDYgKzE0LDQ2IEBACiAKIGludCBuZnNkX3NldHVzZXIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCkKIHsKLQlzdHJ1Y3Qgc3ZjX2NyZWQJKmNyZWQgPSAmcnFzdHAtPnJxX2NyZWQ7CisJc3RydWN0IHN2Y19jcmVkCWNyZWQgPSBycXN0cC0+cnFfY3JlZDsKIAlpbnQgaTsKIAlpbnQgcmV0OwogCiAJaWYgKGV4cC0+ZXhfZmxhZ3MgJiBORlNFWFBfQUxMU1FVQVNIKSB7Ci0JCWNyZWQtPmNyX3VpZCA9IGV4cC0+ZXhfYW5vbl91aWQ7Ci0JCWNyZWQtPmNyX2dpZCA9IGV4cC0+ZXhfYW5vbl9naWQ7Ci0JCXB1dF9ncm91cF9pbmZvKGNyZWQtPmNyX2dyb3VwX2luZm8pOwotCQljcmVkLT5jcl9ncm91cF9pbmZvID0gZ3JvdXBzX2FsbG9jKDApOworCQljcmVkLmNyX3VpZCA9IGV4cC0+ZXhfYW5vbl91aWQ7CisJCWNyZWQuY3JfZ2lkID0gZXhwLT5leF9hbm9uX2dpZDsKKwkJY3JlZC5jcl9ncm91cF9pbmZvID0gZ3JvdXBzX2FsbG9jKDApOwogCX0gZWxzZSBpZiAoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9ST09UU1FVQVNIKSB7CiAJCXN0cnVjdCBncm91cF9pbmZvICpnaTsKLQkJaWYgKCFjcmVkLT5jcl91aWQpCi0JCQljcmVkLT5jcl91aWQgPSBleHAtPmV4X2Fub25fdWlkOwotCQlpZiAoIWNyZWQtPmNyX2dpZCkKLQkJCWNyZWQtPmNyX2dpZCA9IGV4cC0+ZXhfYW5vbl9naWQ7Ci0JCWdpID0gZ3JvdXBzX2FsbG9jKGNyZWQtPmNyX2dyb3VwX2luZm8tPm5ncm91cHMpOworCQlpZiAoIWNyZWQuY3JfdWlkKQorCQkJY3JlZC5jcl91aWQgPSBleHAtPmV4X2Fub25fdWlkOworCQlpZiAoIWNyZWQuY3JfZ2lkKQorCQkJY3JlZC5jcl9naWQgPSBleHAtPmV4X2Fub25fZ2lkOworCQlnaSA9IGdyb3Vwc19hbGxvYyhjcmVkLmNyX2dyb3VwX2luZm8tPm5ncm91cHMpOwogCQlpZiAoZ2kpCi0JCQlmb3IgKGkgPSAwOyBpIDwgY3JlZC0+Y3JfZ3JvdXBfaW5mby0+bmdyb3VwczsgaSsrKSB7Ci0JCQkJaWYgKCFHUk9VUF9BVChjcmVkLT5jcl9ncm91cF9pbmZvLCBpKSkKKwkJCWZvciAoaSA9IDA7IGkgPCBjcmVkLmNyX2dyb3VwX2luZm8tPm5ncm91cHM7IGkrKykgeworCQkJCWlmICghR1JPVVBfQVQoY3JlZC5jcl9ncm91cF9pbmZvLCBpKSkKIAkJCQkJR1JPVVBfQVQoZ2ksIGkpID0gZXhwLT5leF9hbm9uX2dpZDsKIAkJCQllbHNlCi0JCQkJCUdST1VQX0FUKGdpLCBpKSA9IEdST1VQX0FUKGNyZWQtPmNyX2dyb3VwX2luZm8sIGkpOworCQkJCQlHUk9VUF9BVChnaSwgaSkgPSBHUk9VUF9BVChjcmVkLmNyX2dyb3VwX2luZm8sIGkpOwogCQkJfQotCQlwdXRfZ3JvdXBfaW5mbyhjcmVkLT5jcl9ncm91cF9pbmZvKTsKLQkJY3JlZC0+Y3JfZ3JvdXBfaW5mbyA9IGdpOwotCX0KKwkJY3JlZC5jcl9ncm91cF9pbmZvID0gZ2k7CisJfSBlbHNlCisJCWdldF9ncm91cF9pbmZvKGNyZWQuY3JfZ3JvdXBfaW5mbyk7CiAKLQlpZiAoY3JlZC0+Y3JfdWlkICE9ICh1aWRfdCkgLTEpCi0JCWN1cnJlbnQtPmZzdWlkID0gY3JlZC0+Y3JfdWlkOworCWlmIChjcmVkLmNyX3VpZCAhPSAodWlkX3QpIC0xKQorCQljdXJyZW50LT5mc3VpZCA9IGNyZWQuY3JfdWlkOwogCWVsc2UKIAkJY3VycmVudC0+ZnN1aWQgPSBleHAtPmV4X2Fub25fdWlkOwotCWlmIChjcmVkLT5jcl9naWQgIT0gKGdpZF90KSAtMSkKLQkJY3VycmVudC0+ZnNnaWQgPSBjcmVkLT5jcl9naWQ7CisJaWYgKGNyZWQuY3JfZ2lkICE9IChnaWRfdCkgLTEpCisJCWN1cnJlbnQtPmZzZ2lkID0gY3JlZC5jcl9naWQ7CiAJZWxzZQogCQljdXJyZW50LT5mc2dpZCA9IGV4cC0+ZXhfYW5vbl9naWQ7CiAKLQlpZiAoIWNyZWQtPmNyX2dyb3VwX2luZm8pCisJaWYgKCFjcmVkLmNyX2dyb3VwX2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHNldF9jdXJyZW50X2dyb3VwcyhjcmVkLT5jcl9ncm91cF9pbmZvKTsKLQlpZiAoKGNyZWQtPmNyX3VpZCkpIHsKKwlyZXQgPSBzZXRfY3VycmVudF9ncm91cHMoY3JlZC5jcl9ncm91cF9pbmZvKTsKKwlwdXRfZ3JvdXBfaW5mbyhjcmVkLmNyX2dyb3VwX2luZm8pOworCWlmICgoY3JlZC5jcl91aWQpKSB7CiAJCWNhcF90KGN1cnJlbnQtPmNhcF9lZmZlY3RpdmUpICY9IH5DQVBfTkZTRF9NQVNLOwogCX0gZWxzZSB7CiAJCWNhcF90KGN1cnJlbnQtPmNhcF9lZmZlY3RpdmUpIHw9IChDQVBfTkZTRF9NQVNLICYKZGlmZiAtLWdpdCBhL2ZzL25mc2QvZXhwb3J0LmMgYi9mcy9uZnNkL2V4cG9ydC5jCmluZGV4IGMzNDBiZTAuLjRlMDU3ODEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvZXhwb3J0LmMKKysrIGIvZnMvbmZzZC9leHBvcnQuYwpAQCAtNDIyLDcgKzQyMiw3IEBACiAJaWYgKChsZW49cXdvcmRfZ2V0KCZtZXNnLCBidWYsIFBBR0VfU0laRSkpIDw9IDApCiAJCWdvdG8gb3V0OwogCWVyciA9IHBhdGhfbG9va3VwKGJ1ZiwgMCwgJm5kKTsKLQlpZiAoZXJyKSBnb3RvIG91dDsKKwlpZiAoZXJyKSBnb3RvIG91dF9ub19wYXRoOwogCiAJZXhwLmguZmxhZ3MgPSAwOwogCWV4cC5leF9jbGllbnQgPSBkb207CkBAIC00NzUsNiArNDc1LDcgQEAKICBvdXQ6CiAJaWYgKG5kLmRlbnRyeSkKIAkJcGF0aF9yZWxlYXNlKCZuZCk7Cisgb3V0X25vX3BhdGg6CiAJaWYgKGRvbSkKIAkJYXV0aF9kb21haW5fcHV0KGRvbSk7CiAJa2ZyZWUoYnVmKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3Byb2MuYyBiL2ZzL25mc2QvbmZzM3Byb2MuYwppbmRleCA2ZDJkZmVkLi5mNjExNDJhIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnMzcHJvYy5jCkBAIC02ODIsNyArNjgyLDcgQEAKICAgUFJPQyhsb29rdXAsCSBkaXJvcCwJCWRpcm9wLAkJZmhhbmRsZTIsIFJDX05PQ0FDSEUsIFNUK0ZIK3BBVCtwQVQpLAogICBQUk9DKGFjY2VzcywJIGFjY2VzcywJYWNjZXNzLAkJZmhhbmRsZSwgIFJDX05PQ0FDSEUsIFNUK3BBVCsxKSwKICAgUFJPQyhyZWFkbGluaywgcmVhZGxpbmssCXJlYWRsaW5rLAlmaGFuZGxlLCAgUkNfTk9DQUNIRSwgU1QrcEFUKzErTkZTM19NQVhQQVRITEVOLzQpLAotICBQUk9DKHJlYWQsCSByZWFkLAkJcmVhZCwJCWZoYW5kbGUsICBSQ19OT0NBQ0hFLCBTVCtwQVQrNCtORlNTVkNfTUFYQkxLU0laRSksCisgIFBST0MocmVhZCwJIHJlYWQsCQlyZWFkLAkJZmhhbmRsZSwgIFJDX05PQ0FDSEUsIFNUK3BBVCs0K05GU1NWQ19NQVhCTEtTSVpFLzQpLAogICBQUk9DKHdyaXRlLAkgd3JpdGUsCQl3cml0ZSwJCWZoYW5kbGUsICBSQ19SRVBMQlVGRiwgU1QrV0MrNCksCiAgIFBST0MoY3JlYXRlLAkgY3JlYXRlLAljcmVhdGUsCQlmaGFuZGxlMiwgUkNfUkVQTEJVRkYsIFNUKygxK0ZIK3BBVCkrV0MpLAogICBQUk9DKG1rZGlyLAkgbWtkaXIsCQljcmVhdGUsCQlmaGFuZGxlMiwgUkNfUkVQTEJVRkYsIFNUKygxK0ZIK3BBVCkrV0MpLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0YWNsLmMgYi9mcy9uZnNkL25mczRhY2wuYwppbmRleCA3MzkxZjRhLi5lZGIxMDdlIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRhY2wuYworKysgYi9mcy9uZnNkL25mczRhY2wuYwpAQCAtNzEwLDkgKzcxMCw5IEBACiAJCS8qIEFsc28sIHRoZSByZW1haW5pbmcgZW50cmllcyBhcmUgZm9yIG5hbWVkIHVzZXJzIGFuZAogCQkgKiBncm91cHMsIGFuZCBjb21lIGluIHRocmVlcyAobWFzaywgYWxsb3csIGRlbnkpOiAqLwogCQlpZiAobjRhY2wtPm5hY2VzIDwgNykKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoKG40YWNsLT5uYWNlcyAtIDcpICUgMykKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR1cm4gNCArIChuNGFjbC0+bmFjZXMgLSA3KS8zOwogCX0KIH0KQEAgLTc5MCw3ICs3OTAsNyBAQAogCQkJY29udGludWU7CiAKIAkJZXJyb3IgPSBuZnM0X2FjbF9hZGRfYWNlKGRhY2wsIGFjZS0+dHlwZSwgYWNlLT5mbGFnLAotCQkJCWFjZS0+YWNjZXNzX21hc2ssIGFjZS0+d2hvdHlwZSwgYWNlLT53aG8pID09IC0xOworCQkJCWFjZS0+YWNjZXNzX21hc2ssIGFjZS0+d2hvdHlwZSwgYWNlLT53aG8pOwogCQlpZiAoZXJyb3IgPCAwKQogCQkJZ290byBvdXQ7CiAKQEAgLTg2Niw3ICs4NjYsNyBAQAogCXN0cnVjdCBuZnM0X2FjZSAqYWNlOwogCiAJaWYgKChhY2UgPSBrbWFsbG9jKHNpemVvZigqYWNlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlhY2UtPnR5cGUgPSB0eXBlOwogCWFjZS0+ZmxhZyA9IGZsYWc7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCBjODcyYmQwLi5kYmFmM2Y5IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTQ0MSw4ICs0NDEsOSBAQAogCQlnb3RvIG91dF9jbG50OwogCX0KIAotCS8qIHRoZSB0YXNrIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBuZnM0X2NsaWVudCBzdHJ1Y3QgKi8KIAljYi0+Y2JfY2xpZW50ID0gY2xudDsKKworCS8qIHRoZSB0YXNrIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBuZnM0X2NsaWVudCBzdHJ1Y3QgKi8KIAlhdG9taWNfaW5jKCZjbHAtPmNsX2NvdW50KTsKIAogCW1zZy5ycGNfY3JlZCA9IG5mc2Q0X2xvb2t1cGNyZWQoY2xwLDApOwpAQCAtNDYwLDEzICs0NjEsMTIgQEAKIG91dF9ycGNpb2Q6CiAJYXRvbWljX2RlYygmY2xwLT5jbF9jb3VudCk7CiAJcnBjaW9kX2Rvd24oKTsKKwljYi0+Y2JfY2xpZW50ID0gTlVMTDsKIG91dF9jbG50OgogCXJwY19zaHV0ZG93bl9jbGllbnQoY2xudCk7Ci0JZ290byBvdXRfZXJyOwogb3V0X2VycjoKIAlkcHJpbnRrKCJORlNEOiB3YXJuaW5nOiBubyBjYWxsYmFjayBwYXRoIHRvIGNsaWVudCAlLipzXG4iLAogCQkoaW50KWNscC0+Y2xfbmFtZS5sZW4sIGNscC0+Y2xfbmFtZS5kYXRhKTsKLQljYi0+Y2JfY2xpZW50ID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHByb2MuYyBiL2ZzL25mc2QvbmZzNHByb2MuYwppbmRleCA2ZDYzZjFkLi5iMGUwOTVlIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnM0cHJvYy5jCkBAIC0yODgsOCArMjg4LDYgQEAKIAlmaF9wdXQoY3VycmVudF9maCk7CiAJc3RhdHVzID0gZXhwX3BzZXVkb3Jvb3QocnFzdHAtPnJxX2NsaWVudCwgY3VycmVudF9maCwKIAkJCSAgICAgICZycXN0cC0+cnFfY2hhbmRsZSk7Ci0JaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IG5mc2Vycm5vKG5mc2Rfc2V0dXNlcihycXN0cCwgY3VycmVudF9maC0+ZmhfZXhwb3J0KSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtOTc1LDcgKzk3Myw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3Byb2NlZHVyZQkJbmZzZF9wcm9jZWR1cmVzNFsyXSA9IHsKICAgUFJPQyhudWxsLAkgdm9pZCwJCXZvaWQsCQl2b2lkLAkgIFJDX05PQ0FDSEUsIDEpLAotICBQUk9DKGNvbXBvdW5kLCBjb21wb3VuZCwJY29tcG91bmQsCWNvbXBvdW5kLCBSQ19OT0NBQ0hFLCBORlNEX0JVRlNJWkUpCisgIFBST0MoY29tcG91bmQsIGNvbXBvdW5kLAljb21wb3VuZCwJY29tcG91bmQsIFJDX05PQ0FDSEUsIE5GU0RfQlVGU0laRS80KQogfTsKIAogc3RydWN0IHN2Y192ZXJzaW9uCW5mc2RfdmVyc2lvbjQgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCA0N2VjMTEyLi45NmM3NTc4IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTE0Nyw2ICsxNDcsNDIgQEAKIAlrcmVmX2dldCgmZmktPmZpX3JlZik7CiB9CiAKK3N0YXRpYyBpbnQgbnVtX2RlbGVnYXRpb25zOworCisvKgorICogT3BlbiBvd25lciBzdGF0ZSAoc2hhcmUgbG9ja3MpCisgKi8KKworLyogaGFzaCB0YWJsZXMgZm9yIG5mczRfc3RhdGVvd25lciAqLworI2RlZmluZSBPV05FUl9IQVNIX0JJVFMgICAgICAgICAgICAgIDgKKyNkZWZpbmUgT1dORVJfSEFTSF9TSVpFICAgICAgICAgICAgICgxIDw8IE9XTkVSX0hBU0hfQklUUykKKyNkZWZpbmUgT1dORVJfSEFTSF9NQVNLICAgICAgICAgICAgIChPV05FUl9IQVNIX1NJWkUgLSAxKQorCisjZGVmaW5lIG93bmVyaWRfaGFzaHZhbChpZCkgXAorICAgICAgICAoKGlkKSAmIE9XTkVSX0hBU0hfTUFTSykKKyNkZWZpbmUgb3duZXJzdHJfaGFzaHZhbChjbGllbnRpZCwgb3duZXJuYW1lKSBcCisgICAgICAgICgoKGNsaWVudGlkKSArIG9wYXF1ZV9oYXNodmFsKChvd25lcm5hbWUuZGF0YSksIChvd25lcm5hbWUubGVuKSkpICYgT1dORVJfSEFTSF9NQVNLKQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZAlvd25lcmlkX2hhc2h0YmxbT1dORVJfSEFTSF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkCW93bmVyc3RyX2hhc2h0YmxbT1dORVJfSEFTSF9TSVpFXTsKKworLyogaGFzaCB0YWJsZSBmb3IgbmZzNF9maWxlICovCisjZGVmaW5lIEZJTEVfSEFTSF9CSVRTICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRklMRV9IQVNIX1NJWkUgICAgICAgICAgICAgICAgICAoMSA8PCBGSUxFX0hBU0hfQklUUykKKyNkZWZpbmUgRklMRV9IQVNIX01BU0sgICAgICAgICAgICAgICAgICAoRklMRV9IQVNIX1NJWkUgLSAxKQorLyogaGFzaCB0YWJsZSBmb3IgKG9wZW4pbmZzNF9zdGF0ZWlkICovCisjZGVmaW5lIFNUQVRFSURfSEFTSF9CSVRTICAgICAgICAgICAgICAxMAorI2RlZmluZSBTVEFURUlEX0hBU0hfU0laRSAgICAgICAgICAgICAgKDEgPDwgU1RBVEVJRF9IQVNIX0JJVFMpCisjZGVmaW5lIFNUQVRFSURfSEFTSF9NQVNLICAgICAgICAgICAgICAoU1RBVEVJRF9IQVNIX1NJWkUgLSAxKQorCisjZGVmaW5lIGZpbGVfaGFzaHZhbCh4KSBcCisgICAgICAgIGhhc2hfcHRyKHgsIEZJTEVfSEFTSF9CSVRTKQorI2RlZmluZSBzdGF0ZWlkX2hhc2h2YWwob3duZXJfaWQsIGZpbGVfaWQpICBcCisgICAgICAgICgoKG93bmVyX2lkKSArIChmaWxlX2lkKSkgJiBTVEFURUlEX0hBU0hfTUFTSykKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZmlsZV9oYXNodGJsW0ZJTEVfSEFTSF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlaWRfaGFzaHRibFtTVEFURUlEX0hBU0hfU0laRV07CisKIHN0YXRpYyBzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICoKIGFsbG9jX2luaXRfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgdTMyIHR5cGUpCiB7CkBAIC0xNTUsOSArMTkxLDEyIEBACiAJc3RydWN0IG5mczRfY2FsbGJhY2sgKmNiID0gJnN0cC0+c3Rfc3RhdGVvd25lci0+c29fY2xpZW50LT5jbF9jYWxsYmFjazsKIAogCWRwcmludGsoIk5GU0QgYWxsb2NfaW5pdF9kZWxlZ1xuIik7CisJaWYgKG51bV9kZWxlZ2F0aW9ucyA+IFNUQVRFSURfSEFTSF9TSVpFICogNCkKKwkJcmV0dXJuIE5VTEw7CiAJZHAgPSBrbWVtX2NhY2hlX2FsbG9jKGRlbGVnX3NsYWIsIEdGUF9LRVJORUwpOwogCWlmIChkcCA9PSBOVUxMKQogCQlyZXR1cm4gZHA7CisJbnVtX2RlbGVnYXRpb25zKys7CiAJSU5JVF9MSVNUX0hFQUQoJmRwLT5kbF9wZXJmaWxlKTsKIAlJTklUX0xJU1RfSEVBRCgmZHAtPmRsX3BlcmNsbnQpOwogCUlOSVRfTElTVF9IRUFEKCZkcC0+ZGxfcmVjYWxsX2xydSk7CkBAIC0xOTIsNiArMjMxLDcgQEAKIAkJZHByaW50aygiTkZTRDogZnJlZWluZyBkcCAlcFxuIixkcCk7CiAJCXB1dF9uZnM0X2ZpbGUoZHAtPmRsX2ZpbGUpOwogCQlrbWVtX2NhY2hlX2ZyZWUoZGVsZWdfc2xhYiwgZHApOworCQludW1fZGVsZWdhdGlvbnMtLTsKIAl9CiB9CiAKQEAgLTMzMCwyMiArMzcwLDI5IEBACiB9CiAKIHN0YXRpYyB2b2lkCitzaHV0ZG93bl9jYWxsYmFja19jbGllbnQoc3RydWN0IG5mczRfY2xpZW50ICpjbHApCit7CisJc3RydWN0IHJwY19jbG50ICpjbG50ID0gY2xwLT5jbF9jYWxsYmFjay5jYl9jbGllbnQ7CisKKwkvKiBzaHV0ZG93biBycGMgY2xpZW50LCBlbmRpbmcgYW55IG91dHN0YW5kaW5nIHJlY2FsbCBycGNzICovCisJaWYgKGNsbnQpIHsKKwkJY2xwLT5jbF9jYWxsYmFjay5jYl9jbGllbnQgPSBOVUxMOworCQlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOworCQlycGNpb2RfZG93bigpOworCX0KK30KKworc3RhdGljIHZvaWQKIGV4cGlyZV9jbGllbnQoc3RydWN0IG5mczRfY2xpZW50ICpjbHApCiB7CiAJc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wOwogCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwOwotCXN0cnVjdCBuZnM0X2NhbGxiYWNrICpjYiA9ICZjbHAtPmNsX2NhbGxiYWNrOwotCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGNscC0+Y2xfY2FsbGJhY2suY2JfY2xpZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgcmVhcGxpc3Q7CiAKIAlkcHJpbnRrKCJORlNEOiBleHBpcmVfY2xpZW50IGNsX2NvdW50ICVkXG4iLAogCSAgICAgICAgICAgICAgICAgICAgYXRvbWljX3JlYWQoJmNscC0+Y2xfY291bnQpKTsKIAotCS8qIHNodXRkb3duIHJwYyBjbGllbnQsIGVuZGluZyBhbnkgb3V0c3RhbmRpbmcgcmVjYWxsIHJwY3MgKi8KLQlpZiAoYXRvbWljX3JlYWQoJmNiLT5jYl9zZXQpID09IDEgJiYgY2xudCkgewotCQlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOwotCQljbG50ID0gY2xwLT5jbF9jYWxsYmFjay5jYl9jbGllbnQgPSBOVUxMOwotCX0KKwlzaHV0ZG93bl9jYWxsYmFja19jbGllbnQoY2xwKTsKIAogCUlOSVRfTElTVF9IRUFEKCZyZWFwbGlzdCk7CiAJc3Bpbl9sb2NrKCZyZWNhbGxfbG9jayk7CkBAIC05MzYsNDAgKzk4Myw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogCi0gKiBPcGVuIG93bmVyIHN0YXRlIChzaGFyZSBsb2NrcykKLSAqLwotCi0vKiBoYXNoIHRhYmxlcyBmb3IgbmZzNF9zdGF0ZW93bmVyICovCi0jZGVmaW5lIE9XTkVSX0hBU0hfQklUUyAgICAgICAgICAgICAgOAotI2RlZmluZSBPV05FUl9IQVNIX1NJWkUgICAgICAgICAgICAgKDEgPDwgT1dORVJfSEFTSF9CSVRTKQotI2RlZmluZSBPV05FUl9IQVNIX01BU0sgICAgICAgICAgICAgKE9XTkVSX0hBU0hfU0laRSAtIDEpCi0KLSNkZWZpbmUgb3duZXJpZF9oYXNodmFsKGlkKSBcCi0gICAgICAgICgoaWQpICYgT1dORVJfSEFTSF9NQVNLKQotI2RlZmluZSBvd25lcnN0cl9oYXNodmFsKGNsaWVudGlkLCBvd25lcm5hbWUpIFwKLSAgICAgICAgKCgoY2xpZW50aWQpICsgb3BhcXVlX2hhc2h2YWwoKG93bmVybmFtZS5kYXRhKSwgKG93bmVybmFtZS5sZW4pKSkgJiBPV05FUl9IQVNIX01BU0spCi0KLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkCW93bmVyaWRfaGFzaHRibFtPV05FUl9IQVNIX1NJWkVdOwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQJb3duZXJzdHJfaGFzaHRibFtPV05FUl9IQVNIX1NJWkVdOwotCi0vKiBoYXNoIHRhYmxlIGZvciBuZnM0X2ZpbGUgKi8KLSNkZWZpbmUgRklMRV9IQVNIX0JJVFMgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBGSUxFX0hBU0hfU0laRSAgICAgICAgICAgICAgICAgICgxIDw8IEZJTEVfSEFTSF9CSVRTKQotI2RlZmluZSBGSUxFX0hBU0hfTUFTSyAgICAgICAgICAgICAgICAgIChGSUxFX0hBU0hfU0laRSAtIDEpCi0vKiBoYXNoIHRhYmxlIGZvciAob3BlbiluZnM0X3N0YXRlaWQgKi8KLSNkZWZpbmUgU1RBVEVJRF9IQVNIX0JJVFMgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFNUQVRFSURfSEFTSF9TSVpFICAgICAgICAgICAgICAoMSA8PCBTVEFURUlEX0hBU0hfQklUUykKLSNkZWZpbmUgU1RBVEVJRF9IQVNIX01BU0sgICAgICAgICAgICAgIChTVEFURUlEX0hBU0hfU0laRSAtIDEpCi0KLSNkZWZpbmUgZmlsZV9oYXNodmFsKHgpIFwKLSAgICAgICAgaGFzaF9wdHIoeCwgRklMRV9IQVNIX0JJVFMpCi0jZGVmaW5lIHN0YXRlaWRfaGFzaHZhbChvd25lcl9pZCwgZmlsZV9pZCkgIFwKLSAgICAgICAgKCgob3duZXJfaWQpICsgKGZpbGVfaWQpKSAmIFNUQVRFSURfSEFTSF9NQVNLKQotCi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBmaWxlX2hhc2h0YmxbRklMRV9IQVNIX1NJWkVdOwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgc3RhdGVpZF9oYXNodGJsW1NUQVRFSURfSEFTSF9TSVpFXTsKLQogLyogT1BFTiBTaGFyZSBzdGF0ZSBoZWxwZXIgZnVuY3Rpb25zICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X2ZpbGUgKgogYWxsb2NfaW5pdF9maWxlKHN0cnVjdCBpbm9kZSAqaW5vKQpAQCAtMTE4Niw4ICsxMTk5LDcgQEAKIHsKIAlkcHJpbnRrKCJORlNEOiBtb3ZlX3RvX2Nsb3NlX2xydSBuZnM0X3N0YXRlb3duZXIgJXBcbiIsIHNvcCk7CiAKLQl1bmhhc2hfc3RhdGVvd25lcihzb3ApOwotCWxpc3RfYWRkX3RhaWwoJnNvcC0+c29fY2xvc2VfbHJ1LCAmY2xvc2VfbHJ1KTsKKwlsaXN0X21vdmVfdGFpbCgmc29wLT5zb19jbG9zZV9scnUsICZjbG9zZV9scnUpOwogCXNvcC0+c29fdGltZSA9IGdldF9zZWNvbmRzKCk7CiB9CiAKQEAgLTE5MTYsOCArMTkyOCw3IEBACiAJCX0KIAkJZHByaW50aygiTkZTRDogcHVyZ2luZyB1bnVzZWQgb3BlbiBzdGF0ZW93bmVyIChzb19pZCAlZClcbiIsCiAJCQlzb3AtPnNvX2lkKTsKLQkJbGlzdF9kZWwoJnNvcC0+c29fY2xvc2VfbHJ1KTsKLQkJbmZzNF9wdXRfc3RhdGVvd25lcihzb3ApOworCQlyZWxlYXNlX3N0YXRlb3duZXIoc29wKTsKIAl9CiAJaWYgKGNsaWVudGlkX3ZhbCA8IE5GU0RfTEFVTkRST01BVF9NSU5USU1FT1VUKQogCQljbGllbnRpZF92YWwgPSBORlNEX0xBVU5EUk9NQVRfTUlOVElNRU9VVDsKQEAgLTI0OTUsMzYgKzI1MDYsMjcgQEAKIAkJbG9jay0+ZmxfZW5kID0gT0ZGU0VUX01BWDsKIH0KIAotc3RhdGljIGludAotbmZzNF92ZXJpZnlfbG9ja19zdGF0ZW93bmVyKHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcCwgdW5zaWduZWQgaW50IGhhc2h2YWwpCi17Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAqbG9jYWwgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCQkJICAgICAgICAKLQlpZiAoaGFzaHZhbCA+PSBMT0NLX0hBU0hfU0laRSkKLQkJZ290byBvdXQ7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShsb2NhbCwgJmxvY2tfb3duZXJpZF9oYXNodGJsW2hhc2h2YWxdLCBzb19pZGhhc2gpIHsKLQkJaWYgKGxvY2FsID09IHNvcCkgewotCQkJc3RhdHVzID0gMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotb3V0OgotCXJldHVybiBzdGF0dXM7Ci19Ci0KKy8qIEhhY2shOiBGb3Igbm93LCB3ZSdyZSBkZWZpbmluZyB0aGlzIGp1c3Qgc28gd2UgY2FuIHVzZSBhIHBvaW50ZXIgdG8gaXQKKyAqIGFzIGEgdW5pcXVlIGNvb2tpZSB0byBpZGVudGlmeSBvdXIgKE5GU3Y0J3MpIHBvc2l4IGxvY2tzLiAqLworc3RhdGljIHN0cnVjdCBsb2NrX21hbmFnZXJfb3BlcmF0aW9ucyBuZnNkX3Bvc2l4X21uZ19vcHMgID0geworfTsKIAogc3RhdGljIGlubGluZSB2b2lkCiBuZnM0X3NldF9sb2NrX2RlbmllZChzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgc3RydWN0IG5mc2Q0X2xvY2tfZGVuaWVkICpkZW55KQogewotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcCA9IChzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICopIGZsLT5mbF9vd25lcjsKLQl1bnNpZ25lZCBpbnQgaHZhbCA9IGxvY2tvd25lcmlkX2hhc2h2YWwoc29wLT5zb19pZCk7CisJc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wOworCXVuc2lnbmVkIGludCBodmFsOwogCi0JZGVueS0+bGRfc29wID0gTlVMTDsKLQlpZiAobmZzNF92ZXJpZnlfbG9ja19zdGF0ZW93bmVyKHNvcCwgaHZhbCkpIHsKKwlpZiAoZmwtPmZsX2xtb3BzID09ICZuZnNkX3Bvc2l4X21uZ19vcHMpIHsKKwkJc29wID0gKHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKikgZmwtPmZsX293bmVyOworCQlodmFsID0gbG9ja293bmVyaWRfaGFzaHZhbChzb3AtPnNvX2lkKTsKIAkJa3JlZl9nZXQoJnNvcC0+c29fcmVmKTsKIAkJZGVueS0+bGRfc29wID0gc29wOwogCQlkZW55LT5sZF9jbGllbnRpZCA9IHNvcC0+c29fY2xpZW50LT5jbF9jbGllbnRpZDsKKwl9IGVsc2UgeworCQlkZW55LT5sZF9zb3AgPSBOVUxMOworCQlkZW55LT5sZF9jbGllbnRpZC5jbF9ib290ID0gMDsKKwkJZGVueS0+bGRfY2xpZW50aWQuY2xfaWQgPSAwOwogCX0KIAlkZW55LT5sZF9zdGFydCA9IGZsLT5mbF9zdGFydDsKIAlkZW55LT5sZF9sZW5ndGggPSB+KHU2NCkwOwpAQCAtMjczNiw2ICsyNzM4LDcgQEAKIAlmaWxlX2xvY2suZmxfcGlkID0gY3VycmVudC0+dGdpZDsKIAlmaWxlX2xvY2suZmxfZmlsZSA9IGZpbHA7CiAJZmlsZV9sb2NrLmZsX2ZsYWdzID0gRkxfUE9TSVg7CisJZmlsZV9sb2NrLmZsX2xtb3BzID0gJm5mc2RfcG9zaXhfbW5nX29wczsKIAogCWZpbGVfbG9jay5mbF9zdGFydCA9IGxvY2stPmxrX29mZnNldDsKIAlpZiAoKGxvY2stPmxrX2xlbmd0aCA9PSB+KHU2NCkwKSB8fCAKQEAgLTI4NDEsNiArMjg0NCw3IEBACiAJCWZpbGVfbG9jay5mbF9vd25lciA9IChmbF9vd25lcl90KWxvY2t0LT5sdF9zdGF0ZW93bmVyOwogCWZpbGVfbG9jay5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCWZpbGVfbG9jay5mbF9mbGFncyA9IEZMX1BPU0lYOworCWZpbGVfbG9jay5mbF9sbW9wcyA9ICZuZnNkX3Bvc2l4X21uZ19vcHM7CiAKIAlmaWxlX2xvY2suZmxfc3RhcnQgPSBsb2NrdC0+bHRfb2Zmc2V0OwogCWlmICgobG9ja3QtPmx0X2xlbmd0aCA9PSB+KHU2NCkwKSB8fCBMT0ZGX09WRVJGTE9XKGxvY2t0LT5sdF9vZmZzZXQsIGxvY2t0LT5sdF9sZW5ndGgpKQpAQCAtMjkwMCw2ICsyOTA0LDcgQEAKIAlmaWxlX2xvY2suZmxfcGlkID0gY3VycmVudC0+dGdpZDsKIAlmaWxlX2xvY2suZmxfZmlsZSA9IGZpbHA7CiAJZmlsZV9sb2NrLmZsX2ZsYWdzID0gRkxfUE9TSVg7IAorCWZpbGVfbG9jay5mbF9sbW9wcyA9ICZuZnNkX3Bvc2l4X21uZ19vcHM7CiAJZmlsZV9sb2NrLmZsX3N0YXJ0ID0gbG9ja3UtPmx1X29mZnNldDsKIAogCWlmICgobG9ja3UtPmx1X2xlbmd0aCA9PSB+KHU2NCkwKSB8fCBMT0ZGX09WRVJGTE9XKGxvY2t1LT5sdV9vZmZzZXQsIGxvY2t1LT5sdV9sZW5ndGgpKQpAQCAtMzIxMSwxNSArMzIxNiw4IEBACiAJaW50IGk7CiAJc3RydWN0IG5mczRfY2xpZW50ICpjbHAgPSBOVUxMOwogCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwID0gTlVMTDsKLQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5leHQsIHJlYXBsaXN0OwogCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJmNsb3NlX2xydSkgewotCQlzb3AgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG5mczRfc3RhdGVvd25lciwgc29fY2xvc2VfbHJ1KTsKLQkJbGlzdF9kZWwoJnNvcC0+c29fY2xvc2VfbHJ1KTsKLQkJbmZzNF9wdXRfc3RhdGVvd25lcihzb3ApOwotCX0KLQogCWZvciAoaSA9IDA7IGkgPCBDTElFTlRfSEFTSF9TSVpFOyBpKyspIHsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjb25mX2lkX2hhc2h0YmxbaV0pKSB7CiAJCQljbHAgPSBsaXN0X2VudHJ5KGNvbmZfaWRfaGFzaHRibFtpXS5uZXh0LCBzdHJ1Y3QgbmZzNF9jbGllbnQsIGNsX2lkaGFzaCk7CkBAIC0zMjQ0LDggKzMyNDIsNiBAQAogCX0KIAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmxhdW5kcm9tYXRfd29yayk7Ci0JZmx1c2hfd29ya3F1ZXVlKGxhdW5kcnlfd3EpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKGxhdW5kcnlfd3EpOwogCW5mc2Q0X3NodXRkb3duX3JlY2RpcigpOwogCW5mczRfaW5pdCA9IDA7CiB9CkBAIC0zMjUzLDYgKzMyNDksOCBAQAogdm9pZAogbmZzNF9zdGF0ZV9zaHV0ZG93bih2b2lkKQogeworCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtxdWV1ZShsYXVuZHJ5X3dxLCAmbGF1bmRyb21hdF93b3JrKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShsYXVuZHJ5X3dxKTsKIAluZnM0X2xvY2tfc3RhdGUoKTsKIAluZnM0X3JlbGVhc2VfcmVjbGFpbSgpOwogCV9fbmZzNF9zdGF0ZV9zaHV0ZG93bigpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0eGRyLmMgYi9mcy9uZnNkL25mczR4ZHIuYwppbmRleCAwMzg1N2ZkLi5kZTM5OThmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczR4ZHIuYworKysgYi9mcy9uZnNkL25mczR4ZHIuYwpAQCAtMjk5LDExICsyOTksMTAgQEAKIAkJCQkJCWJ1ZiwgZHVtbXkzMiwgJmFjZS53aG8pOwogCQkJaWYgKHN0YXR1cykKIAkJCQlnb3RvIG91dF9uZnNlcnI7Ci0JCQlpZiAobmZzNF9hY2xfYWRkX2FjZSgqYWNsLCBhY2UudHlwZSwgYWNlLmZsYWcsCi0JCQkJIGFjZS5hY2Nlc3NfbWFzaywgYWNlLndob3R5cGUsIGFjZS53aG8pICE9IDApIHsKLQkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJc3RhdHVzID0gbmZzNF9hY2xfYWRkX2FjZSgqYWNsLCBhY2UudHlwZSwgYWNlLmZsYWcsCisJCQkJIGFjZS5hY2Nlc3NfbWFzaywgYWNlLndob3R5cGUsIGFjZS53aG8pOworCQkJaWYgKHN0YXR1cykKIAkJCQlnb3RvIG91dF9uZnNlcnI7Ci0JCQl9CiAJCX0KIAl9IGVsc2UKIAkJKmFjbCA9IE5VTEw7CkBAIC0yMDg1LDI3ICsyMDg0LDIwIEBACiAJV1JJVEUzMihlb2YpOwogCVdSSVRFMzIobWF4Y291bnQpOwogCUFESlVTVF9BUkdTKCk7Ci0JcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfbGVuID0gKChjaGFyKilyZXNwLT5wKSAtIChjaGFyKilyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9iYXNlOwotCisJcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfbGVuID0gKGNoYXIqKXAKKwkJCQkJLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKIAlyZXNwLT54YnVmLT5wYWdlX2xlbiA9IG1heGNvdW50OwogCi0JLyogcmVhZCB6ZXJvIGJ5dGVzIC0+IGRvbid0IHNldCB1cCB0YWlsICovCi0JaWYoIW1heGNvdW50KQotCQlyZXR1cm4gMDsgICAgICAgIAotCi0JLyogc2V0IHVwIHBhZ2UgZm9yIHJlbWFpbmluZyByZXNwb25zZXMgKi8KLQlzdmNfdGFrZV9wYWdlKHJlc3AtPnJxc3RwKTsKLQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlID0gCi0JCXBhZ2VfYWRkcmVzcyhyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXNbcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMV0pOwotCXJlc3AtPnJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IHJlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTE7CisJLyogVXNlIHJlc3Qgb2YgaGVhZCBmb3IgcGFkZGluZyBhbmQgcmVtYWluaW5nIG9wczogKi8KKwlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSAwOworCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSBwOwogCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDA7Ci0JcmVzcC0+cCA9IHJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2U7Ci0JcmVzcC0+ZW5kID0gcmVzcC0+cCArIFBBR0VfU0laRS80OwotCiAJaWYgKG1heGNvdW50JjMpIHsKLQkJKihyZXNwLT5wKSsrID0gMDsKKwkJUkVTRVJWRV9TUEFDRSg0KTsKKwkJV1JJVEUzMigwKTsKIAkJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSArPSBtYXhjb3VudCYzOwogCQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSA0IC0gKG1heGNvdW50JjMpOworCQlBREpVU1RfQVJHUygpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNDIsMjEgKzIxMzQsMjAgQEAKIAogCVdSSVRFMzIobWF4Y291bnQpOwogCUFESlVTVF9BUkdTKCk7Ci0JcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfbGVuID0gKChjaGFyKilyZXNwLT5wKSAtIChjaGFyKilyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9iYXNlOwotCi0Jc3ZjX3Rha2VfcGFnZShyZXNwLT5ycXN0cCk7Ci0JcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IAotCQlwYWdlX2FkZHJlc3MocmVzcC0+cnFzdHAtPnJxX3Jlc3BhZ2VzW3Jlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTFdKTsKLQlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSByZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xOwotCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDA7Ci0JcmVzcC0+cCA9IHJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2U7Ci0JcmVzcC0+ZW5kID0gcmVzcC0+cCArIFBBR0VfU0laRS80OwotCisJcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfbGVuID0gKGNoYXIqKXAKKwkJCQktIChjaGFyKilyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9iYXNlOwogCXJlc3AtPnhidWYtPnBhZ2VfbGVuID0gbWF4Y291bnQ7CisKKwkvKiBVc2UgcmVzdCBvZiBoZWFkIGZvciBwYWRkaW5nIGFuZCByZW1haW5pbmcgb3BzOiAqLworCXJlc3AtPnJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IDA7CisJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IHA7CisJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfbGVuID0gMDsKIAlpZiAobWF4Y291bnQmMykgewotCQkqKHJlc3AtPnApKysgPSAwOworCQlSRVNFUlZFX1NQQUNFKDQpOworCQlXUklURTMyKDApOwogCQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlICs9IG1heGNvdW50JjM7CiAJCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDQgLSAobWF4Y291bnQmMyk7CisJCUFESlVTVF9BUkdTKCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjE2Niw3ICsyMTU3LDcgQEAKIHsKIAlpbnQgbWF4Y291bnQ7CiAJbG9mZl90IG9mZnNldDsKLQl1MzIgKnBhZ2UsICpzYXZlcDsKKwl1MzIgKnBhZ2UsICpzYXZlcCwgKnRhaWxiYXNlOwogCUVOQ09ERV9IRUFEOwogCiAJaWYgKG5mc2VycikKQEAgLTIxODIsNiArMjE3Myw3IEBACiAJV1JJVEUzMigwKTsKIAlBREpVU1RfQVJHUygpOwogCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9ICgoY2hhciopcmVzcC0+cCkgLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKKwl0YWlsYmFzZSA9IHA7CiAKIAltYXhjb3VudCA9IFBBR0VfU0laRTsKIAlpZiAobWF4Y291bnQgPiByZWFkZGlyLT5yZF9tYXhjb3VudCkKQEAgLTIyMjYsMTQgKzIyMTgsMTIgQEAKIAkqcCsrID0gaHRvbmwocmVhZGRpci0+Y29tbW9uLmVyciA9PSBuZnNlcnJfZW9mKTsKIAlyZXNwLT54YnVmLT5wYWdlX2xlbiA9ICgoY2hhciopcCkgLSAoY2hhciopcGFnZV9hZGRyZXNzKHJlc3AtPnJxc3RwLT5ycV9yZXNwYWdlc1tyZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xXSk7CiAKLQkvKiBhbGxvY2F0ZSBhIHBhZ2UgZm9yIHRoZSB0YWlsICovCi0Jc3ZjX3Rha2VfcGFnZShyZXNwLT5ycXN0cCk7Ci0JcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IAotCQlwYWdlX2FkZHJlc3MocmVzcC0+cnFzdHAtPnJxX3Jlc3BhZ2VzW3Jlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTFdKTsKLQlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSByZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xOworCS8qIFVzZSByZXN0IG9mIGhlYWQgZm9yIHBhZGRpbmcgYW5kIHJlbWFpbmluZyBvcHM6ICovCisJcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gMDsKKwlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlID0gdGFpbGJhc2U7CiAJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfbGVuID0gMDsKIAlyZXNwLT5wID0gcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZTsKLQlyZXNwLT5lbmQgPSByZXNwLT5wICsgUEFHRV9TSVpFLzQ7CisJcmVzcC0+ZW5kID0gcmVzcC0+cCArIChQQUdFX1NJWkUgLSByZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9sZW4pLzQ7CiAKIAlyZXR1cm4gMDsKIGVycl9ub192ZXJmOgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNwcm9jLmMgYi9mcy9uZnNkL25mc3Byb2MuYwppbmRleCAzZTZiNzVjLi4wNmNkMGRiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3Byb2MuYworKysgYi9mcy9uZnNkL25mc3Byb2MuYwpAQCAtNTUzLDcgKzU1Myw3IEBACiAgIFBST0Mobm9uZSwJIHZvaWQsCQl2b2lkLAkJbm9uZSwJCVJDX05PQ0FDSEUsIFNUKSwKICAgUFJPQyhsb29rdXAsCSBkaXJvcGFyZ3MsCWRpcm9wcmVzLAlmaGFuZGxlLAlSQ19OT0NBQ0hFLCBTVCtGSCtBVCksCiAgIFBST0MocmVhZGxpbmssIHJlYWRsaW5rYXJncywJcmVhZGxpbmtyZXMsCW5vbmUsCQlSQ19OT0NBQ0hFLCBTVCsxK05GU19NQVhQQVRITEVOLzQpLAotICBQUk9DKHJlYWQsCSByZWFkYXJncywJcmVhZHJlcywJZmhhbmRsZSwJUkNfTk9DQUNIRSwgU1QrQVQrMStORlNTVkNfTUFYQkxLU0laRSksCisgIFBST0MocmVhZCwJIHJlYWRhcmdzLAlyZWFkcmVzLAlmaGFuZGxlLAlSQ19OT0NBQ0hFLCBTVCtBVCsxK05GU1NWQ19NQVhCTEtTSVpFLzQpLAogICBQUk9DKG5vbmUsCSB2b2lkLAkJdm9pZCwJCW5vbmUsCQlSQ19OT0NBQ0hFLCBTVCksCiAgIFBST0Mod3JpdGUsCSB3cml0ZWFyZ3MsCWF0dHJzdGF0LAlmaGFuZGxlLAlSQ19SRVBMQlVGRiwgU1QrQVQpLAogICBQUk9DKGNyZWF0ZSwJIGNyZWF0ZWFyZ3MsCWRpcm9wcmVzLAlmaGFuZGxlLAlSQ19SRVBMQlVGRiwgU1QrRkgrQVQpLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggMzEwMTgzMy4uNmFhOTJkMCAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC0zNzEsNyArMzcxLDYgQEAKIHN0YXRpYyBzc2l6ZV90IG5mc2RfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICprZXksIHZvaWQgKipidWYpCiB7CiAJc3NpemVfdCBidWZsZW47Ci0JaW50IGVycm9yOwogCiAJYnVmbGVuID0gdmZzX2dldHhhdHRyKGRlbnRyeSwga2V5LCBOVUxMLCAwKTsKIAlpZiAoYnVmbGVuIDw9IDApCkBAIC0zODEsMTAgKzM4MCw3IEBACiAJaWYgKCEqYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVycm9yID0gdmZzX2dldHhhdHRyKGRlbnRyeSwga2V5LCAqYnVmLCBidWZsZW4pOwotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKLQlyZXR1cm4gYnVmbGVuOworCXJldHVybiB2ZnNfZ2V0eGF0dHIoZGVudHJ5LCBrZXksICpidWYsIGJ1Zmxlbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggYmZmMGYwZC4uMjFmMzhhYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIHN0cnVjdCBvMmhiX2Jpb193YWl0X2N0eHQgewogCWF0b21pY190ICAgICAgICAgIHdjX251bV9yZXFzOwogCXN0cnVjdCBjb21wbGV0aW9uIHdjX2lvX2NvbXBsZXRlOworCWludCAgICAgICAgICAgICAgIHdjX2Vycm9yOwogfTsKIAogc3RhdGljIHZvaWQgbzJoYl93cml0ZV90aW1lb3V0KHZvaWQgKmFyZykKQEAgLTE4Niw2ICsxODcsNyBAQAogewogCWF0b21pY19zZXQoJndjLT53Y19udW1fcmVxcywgbnVtX2lvcyk7CiAJaW5pdF9jb21wbGV0aW9uKCZ3Yy0+d2NfaW9fY29tcGxldGUpOworCXdjLT53Y19lcnJvciA9IDA7CiB9CiAKIC8qIFVzZWQgaW4gZXJyb3IgcGF0aHMgdG9vICovCkBAIC0yMTgsOCArMjIwLDEwIEBACiB7CiAJc3RydWN0IG8yaGJfYmlvX3dhaXRfY3R4dCAqd2MgPSBiaW8tPmJpX3ByaXZhdGU7CiAKLQlpZiAoZXJyb3IpCisJaWYgKGVycm9yKSB7CiAJCW1sb2coTUxfRVJST1IsICJJTyBFcnJvciAlZFxuIiwgZXJyb3IpOworCQl3Yy0+d2NfZXJyb3IgPSBlcnJvcjsKKwl9CiAKIAlpZiAoYmlvLT5iaV9zaXplKQogCQlyZXR1cm4gMTsKQEAgLTM5MCw2ICszOTQsOCBAQAogCiBiYWlsX2FuZF93YWl0OgogCW8yaGJfd2FpdF9vbl9pbyhyZWcsICZ3Yyk7CisJaWYgKHdjLndjX2Vycm9yICYmICFzdGF0dXMpCisJCXN0YXR1cyA9IHdjLndjX2Vycm9yOwogCiAJaWYgKGJpb3MpIHsKIAkJZm9yKGkgPSAwOyBpIDwgbnVtX2Jpb3M7IGkrKykKQEAgLTc5MCwyMCArNzk2LDI0IEBACiAJcmV0dXJuIGhpZ2hlc3Q7CiB9CiAKLXN0YXRpYyB2b2lkIG8yaGJfZG9fZGlza19oZWFydGJlYXQoc3RydWN0IG8yaGJfcmVnaW9uICpyZWcpCitzdGF0aWMgaW50IG8yaGJfZG9fZGlza19oZWFydGJlYXQoc3RydWN0IG8yaGJfcmVnaW9uICpyZWcpCiB7CiAJaW50IGksIHJldCwgaGlnaGVzdF9ub2RlLCBjaGFuZ2UgPSAwOwogCXVuc2lnbmVkIGxvbmcgY29uZmlndXJlZF9ub2Rlc1tCSVRTX1RPX0xPTkdTKE8yTk1fTUFYX05PREVTKV07CiAJc3RydWN0IGJpbyAqd3JpdGVfYmlvOwogCXN0cnVjdCBvMmhiX2Jpb193YWl0X2N0eHQgd3JpdGVfd2M7CiAKLQlpZiAobzJubV9jb25maWd1cmVkX25vZGVfbWFwKGNvbmZpZ3VyZWRfbm9kZXMsIHNpemVvZihjb25maWd1cmVkX25vZGVzKSkpCi0JCXJldHVybjsKKwlyZXQgPSBvMm5tX2NvbmZpZ3VyZWRfbm9kZV9tYXAoY29uZmlndXJlZF9ub2RlcywKKwkJCQkgICAgICAgc2l6ZW9mKGNvbmZpZ3VyZWRfbm9kZXMpKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAloaWdoZXN0X25vZGUgPSBvMmhiX2hpZ2hlc3Rfbm9kZShjb25maWd1cmVkX25vZGVzLCBPMk5NX01BWF9OT0RFUyk7CiAJaWYgKGhpZ2hlc3Rfbm9kZSA+PSBPMk5NX01BWF9OT0RFUykgewogCQltbG9nKE1MX05PVElDRSwgIm9jZnMyX2hlYXJ0YmVhdDogbm8gY29uZmlndXJlZCBub2RlcyBmb3VuZCFcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIE5vIHNlbnNlIGluIHJlYWRpbmcgdGhlIHNsb3RzIG9mIG5vZGVzIHRoYXQgZG9uJ3QgZXhpc3QKQEAgLTgxMyw3ICs4MjMsNyBAQAogCXJldCA9IG8yaGJfcmVhZF9zbG90cyhyZWcsIGhpZ2hlc3Rfbm9kZSArIDEpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIFdpdGggYW4gdXAgdG8gZGF0ZSB2aWV3IG9mIHRoZSBzbG90cywgd2UgY2FuIGNoZWNrIHRoYXQgbm8KQEAgLTgzMSw3ICs4NDEsNyBAQAogCXJldCA9IG8yaGJfaXNzdWVfbm9kZV93cml0ZShyZWcsICZ3cml0ZV9iaW8sICZ3cml0ZV93Yyk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAJfQogCiAJaSA9IC0xOwpAQCAtODQ3LDYgKzg1NywxNSBAQAogCSAqLwogCW8yaGJfd2FpdF9vbl9pbyhyZWcsICZ3cml0ZV93Yyk7CiAJYmlvX3B1dCh3cml0ZV9iaW8pOworCWlmICh3cml0ZV93Yy53Y19lcnJvcikgeworCQkvKiBEbyBub3QgcmUtYXJtIHRoZSB3cml0ZSB0aW1lb3V0IG9uIEkvTyBlcnJvciAtIHdlCisJCSAqIGNhbid0IGJlIHN1cmUgdGhhdCB0aGUgbmV3IGJsb2NrIGV2ZXIgbWFkZSBpdCB0bworCQkgKiBkaXNrICovCisJCW1sb2coTUxfRVJST1IsICJXcml0ZSBlcnJvciAlZCBvbiBkZXZpY2UgXCIlc1wiXG4iLAorCQkgICAgIHdyaXRlX3djLndjX2Vycm9yLCByZWctPmhyX2Rldl9uYW1lKTsKKwkJcmV0dXJuIHdyaXRlX3djLndjX2Vycm9yOworCX0KKwogCW8yaGJfYXJtX3dyaXRlX3RpbWVvdXQocmVnKTsKIAogCS8qIGxldCB0aGUgcGVyc29uIHdobyBsYXVuY2hlZCB1cyBrbm93IHdoZW4gdGhpbmdzIGFyZSBzdGVhZHkgKi8KQEAgLTg1NCw2ICs4NzMsOCBAQAogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmVnLT5ocl9zdGVhZHlfaXRlcmF0aW9ucykpCiAJCQl3YWtlX3VwKCZvMmhiX3N0ZWFkeV9xdWV1ZSk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qIFN1YnRyYWN0IGIgZnJvbSBhLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYS4gYSAqbXVzdCogaGF2ZSBhIGxhcmdlcgpAQCAtOTEzLDcgKzkzNCwxMCBAQAogCQkgKiBsaWtlbHkgdG8gdGltZSBpdHNlbGYgb3V0LiAqLwogCQlkb19nZXR0aW1lb2ZkYXkoJmJlZm9yZV9oYik7CiAKLQkJbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChyZWcpOworCQlpID0gMDsKKwkJZG8geworCQkJcmV0ID0gbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChyZWcpOworCQl9IHdoaWxlIChyZXQgJiYgKytpIDwgMik7CiAKIAkJZG9fZ2V0dGltZW9mZGF5KCZhZnRlcl9oYik7CiAJCWVsYXBzZWRfbXNlYyA9IG8yaGJfZWxhcHNlZF9tc2VjcygmYmVmb3JlX2hiLCAmYWZ0ZXJfaGIpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYyBiL2ZzL29jZnMyL2RsbS91c2VyZGxtLmMKaW5kZXggYzM3NjRmNC4uNzRjYTRlNWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS91c2VyZGxtLmMKKysrIGIvZnMvb2NmczIvZGxtL3VzZXJkbG0uYwpAQCAtMTM5LDYgKzEzOSwxMCBAQAogCQlyZXR1cm47CiAJfQogCisJbWxvZ19idWdfb25fbXNnKGxvY2tyZXMtPmxfcmVxdWVzdGVkID09IExLTV9JVk1PREUsCisJCQkiTG9ja3JlcyAlcywgcmVxdWVzdGVkIGl2bW9kZS4gZmxhZ3MgMHgleFxuIiwKKwkJCWxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisKIAkvKiB3ZSdyZSBkb3duY29udmVydGluZy4gKi8KIAlpZiAobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPCBsb2NrcmVzLT5sX2xldmVsKSB7CiAJCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA8PQpAQCAtMjI5LDIzICsyMzMsNDIgQEAKIAogCW1sb2coMCwgIlVOTE9DSyBBU1QgY2FsbGVkIG9uIGxvY2sgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CiAKLQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpCisJaWYgKHN0YXR1cyAhPSBETE1fTk9STUFMICYmIHN0YXR1cyAhPSBETE1fQ0FOQ0VMR1JBTlQpCiAJCW1sb2coTUxfRVJST1IsICJEbG0gcmV0dXJucyBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAKIAlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04pCisJLyogVGhlIHRlYXJkb3duIGZsYWcgZ2V0cyBzZXQgZWFybHkgZHVyaW5nIHRoZSB1bmxvY2sgcHJvY2VzcywKKwkgKiBzbyB0ZXN0IHRoZSBjYW5jZWwgZmxhZyB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGFzdCBpc24ndAorCSAqIGZvciBhIGNvbmN1cnJlbnQgY2FuY2VsLiAqLworCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX1RFQVJET1dOCisJICAgICYmICEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKSB7CiAJCWxvY2tyZXMtPmxfbGV2ZWwgPSBMS01fSVZNT0RFOwotCWVsc2UgeworCX0gZWxzZSBpZiAoc3RhdHVzID09IERMTV9DQU5DRUxHUkFOVCkgeworCQltbG9nKDAsICJMb2NrICVzLCBjYW5jZWwgZmFpbHMsIGZsYWdzIDB4JXhcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKwkJLyogV2UgdHJpZWQgdG8gY2FuY2VsIGEgY29udmVydCByZXF1ZXN0LCBidXQgaXQgd2FzCisJCSAqIGFscmVhZHkgZ3JhbnRlZC4gRG9uJ3QgY2xlYXIgdGhlIGJ1c3kgZmxhZyAtIHRoZQorCQkgKiBhc3Qgc2hvdWxkJ3ZlIGRvbmUgdGhpcyBhbHJlYWR5LiAqLworCQlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpOworCQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfSU5fQ0FOQ0VMOworCQlnb3RvIG91dF9ub2NsZWFyOworCX0gZWxzZSB7CisJCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSk7CisJCS8qIENhbmNlbCBzdWNjZWVkZWQsIHdlIHdhbnQgdG8gcmUtcXVldWUgKi8KKwkJbWxvZygwLCAiTG9jayAlcywgY2FuY2VsIHN1Y2NlZWRzLCBmbGFncyAweCV4XG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CiAJCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gTEtNX0lWTU9ERTsgLyogY2FuY2VsIGFuCiAJCQkJCQkgICAgKiB1cGNvbnZlcnQKIAkJCQkJCSAgICAqIHJlcXVlc3QuICovCiAJCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19JTl9DQU5DRUw7CiAJCS8qIHdlIHdhbnQgdGhlIHVuYmxvY2sgdGhyZWFkIHRvIGxvb2sgYXQgaXQgYWdhaW4KIAkJICogbm93LiAqLwotCQlfX3VzZXJfZGxtX3F1ZXVlX2xvY2tyZXMobG9ja3Jlcyk7CisJCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpCisJCQlfX3VzZXJfZGxtX3F1ZXVlX2xvY2tyZXMobG9ja3Jlcyk7CiAJfQogCiAJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0JVU1k7CitvdXRfbm9jbGVhcjoKIAlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAogCXdha2VfdXAoJmxvY2tyZXMtPmxfZXZlbnQpOwpAQCAtMjY4LDEzICsyOTEsMjYgQEAKIAogCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAotCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkpOwotCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfUVVFVUVEKSk7CisJbWxvZ19idWdfb25fbXNnKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpLAorCQkJIkxvY2tyZXMgJXMsIGZsYWdzIDB4JXhcbiIsCisJCQlsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOwogCi0JLyogbm90aWNlIHRoYXQgd2UgZG9uJ3QgY2xlYXIgVVNFUl9MT0NLX0JMT0NLRUQgaGVyZS4gVGhhdCdzCi0JICogZm9yIHVzZXJfYXN0IHRvIGRvLiAqLworCS8qIG5vdGljZSB0aGF0IHdlIGRvbid0IGNsZWFyIFVTRVJfTE9DS19CTE9DS0VEIGhlcmUuIElmIGl0J3MKKwkgKiBzZXQsIHdlIHdhbnQgdXNlcl9hc3QgY2xlYXIgaXQuICovCiAJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX1FVRVVFRDsKIAorCS8qIEl0J3MgdmFsaWQgdG8gZ2V0IGhlcmUgYW5kIG5vIGxvbmdlciBiZSBibG9ja2VkIC0gaWYgd2UgZ2V0CisJICogc2V2ZXJhbCBiYXN0cyBpbiBhIHJvdywgd2UgbWlnaHQgYmUgcXVldWVkIGJ5IHRoZSBmaXJzdAorCSAqIG9uZSwgdGhlIHVuYmxvY2sgdGhyZWFkIG1pZ2h0IHJ1biBhbmQgY2xlYXIgdGhlIHF1ZXVlZAorCSAqIGZsYWcsIGFuZCBmaW5hbGx5IHdlIG1pZ2h0IGdldCBhbm90aGVyIGJhc3Qgd2hpY2ggcmUtcXVldWVzCisJICogdXMgYmVmb3JlIG91ciBhc3QgZm9yIHRoZSBkb3duY29udmVydCBpcyBjYWxsZWQuICovCisJaWYgKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSkgeworCQltbG9nKDAsICJMb2NrcmVzICVzLCBmbGFncyAweCV4OiBxdWV1ZWQgYnV0IG5vdCBibG9ja2luZ1xuIiwKKwkJCWxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCQlnb3RvIGRyb3BfcmVmOworCX0KKwogCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX1RFQVJET1dOKSB7CiAJCW1sb2coMCwgImxvY2sgaXMgaW4gdGVhcmRvd24gc28gd2UgZG8gbm90aGluZ1xuIik7CiAJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwpAQCAtMjgyLDcgKzMxOCw5IEBACiAJfQogCiAJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgewotCQltbG9nKDAsICJCVVNZIGZsYWcgZGV0ZWN0ZWQuLi5cbiIpOworCQltbG9nKDAsICJDYW5jZWwgbG9jayAlcywgZmxhZ3MgMHgleFxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOworCiAJCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkgewogCQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CiAJCQlnb3RvIGRyb3BfcmVmOwpAQCAtMjk2LDE0ICszMzQsNyBAQAogCQkJCSAgIExLTV9DQU5DRUwsCiAJCQkJICAgdXNlcl91bmxvY2tfYXN0LAogCQkJCSAgIGxvY2tyZXMpOwotCQlpZiAoc3RhdHVzID09IERMTV9DQU5DRUxHUkFOVCkgewotCQkJLyogSWYgd2UgZ290IHRoaXMsIHRoZW4gdGhlIGFzdCB3YXMgZmlyZWQKLQkJCSAqIGJlZm9yZSB3ZSBjb3VsZCBjYW5jZWwuIFdlIGNsZWFudXAgb3VyCi0JCQkgKiBzdGF0ZSwgYW5kIHJlc3RhcnQgdGhlIGZ1bmN0aW9uLiAqLwotCQkJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCQkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0lOX0NBTkNFTDsKLQkJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSBETE1fTk9STUFMKQorCQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpCiAJCQl1c2VyX2xvZ19kbG1fZXJyb3IoImRsbXVubG9jayIsIHN0YXR1cywgbG9ja3Jlcyk7CiAJCWdvdG8gZHJvcF9yZWY7CiAJfQpAQCAtNTgxLDYgKzYxMiwxNCBAQAogCW1sb2coMCwgImFza2VkIHRvIGRlc3Ryb3kgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CiAKIAlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04pIHsKKwkJbWxvZygwLCAiTG9jayBpcyBhbHJlYWR5IHRvcm4gZG93blxuIik7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19JTl9URUFSRE9XTjsKKwogCXdoaWxlIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JVU1kpIHsKIAkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CiAKQEAgLTYwNiw3ICs2NDUsNiBAQAogCiAJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0FUVEFDSEVEOwogCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7Ci0JbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfSU5fVEVBUkRPV047CiAJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CiAKIAltbG9nKDAsICJ1bmxvY2tpbmcgbG9ja3JlcyAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCAzNGU5MDNhLi41ODFlYjQ1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0yNjAsNiArMjYwLDE3IEBACiAJaWYgKG5ld19pX3NpemUgPT0gbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpCiAJCWdvdG8gYmFpbDsKIAorCS8qIFRoaXMgZm9yY2VzIG90aGVyIG5vZGVzIHRvIHN5bmMgYW5kIGRyb3AgdGhlaXIgcGFnZXMuIERvCisJICogdGhpcyBldmVuIGlmIHdlIGhhdmUgYSB0cnVuY2F0ZSB3aXRob3V0IGFsbG9jYXRpb24gY2hhbmdlIC0KKwkgKiBvY2ZzMiBjbHVzdGVyIHNpemVzIGNhbiBiZSBtdWNoIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUsIHNvCisJICogd2UgaGF2ZSB0byB0cnVuY2F0ZSB0aGVtIGFueXdheS4gICovCisJc3RhdHVzID0gb2NmczJfZGF0YV9sb2NrKGlub2RlLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisJb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOworCiAJaWYgKGxlMzJfdG9fY3B1KGZlLT5pX2NsdXN0ZXJzKSA9PQogCSAgICBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMob3NiLT5zYiwgbmV3X2lfc2l6ZSkpIHsKIAkJbWxvZygwLCAiZmUtPmlfY2x1c3RlcnMgPSAldSwgc28gd2UgZG8gYSBzaW1wbGUgdHJ1bmNhdGVcbiIsCkBAIC0yNzIsMTQgKzI4Myw2IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQkvKiBUaGlzIGZvcmNlcyBvdGhlciBub2RlcyB0byBzeW5jIGFuZCBkcm9wIHRoZWlyIHBhZ2VzICovCi0Jc3RhdHVzID0gb2NmczJfZGF0YV9sb2NrKGlub2RlLCAxKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0Jb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOwotCiAJLyogYWxyaWdodCwgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBkbyBhIGZ1bGwgYmxvd24gYWxsb2Mgc2l6ZQogCSAqIGNoYW5nZS4gT3JwaGFuIHRoZSBpbm9kZSBzbyB0aGF0IHJlY292ZXJ5IGNhbiBjb21wbGV0ZSB0aGUKIAkgKiB0cnVuY2F0ZSBpZiBuZWNlc3NhcnkuIFRoaXMgZG9lcyB0aGUgdGFzayBvZiBtYXJraW5nCmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggNzk1ZGY5OC4uZTk4NGJlYiAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtMzYsNyArMzYsNyBAQAogICovCiAKIC8qIERyb3AgdGhlIGlub2RlIHNlbWFwaG9yZSBhbmQgd2FpdCBmb3IgYSBwaXBlIGV2ZW50LCBhdG9taWNhbGx5ICovCi12b2lkIHBpcGVfd2FpdChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKK3ZvaWQgcGlwZV93YWl0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAKQEAgLTQ0LDExICs0NCwxNCBAQAogCSAqIFBpcGVzIGFyZSBzeXN0ZW0tbG9jYWwgcmVzb3VyY2VzLCBzbyBzbGVlcGluZyBvbiB0aGVtCiAJICogaXMgY29uc2lkZXJlZCBhIG5vbmludGVyYWN0aXZlIHdhaXQ6CiAJICovCi0JcHJlcGFyZV90b193YWl0KFBJUEVfV0FJVCgqaW5vZGUpLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFfFRBU0tfTk9OSU5URVJBQ1RJVkUpOwotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCXByZXBhcmVfdG9fd2FpdCgmcGlwZS0+d2FpdCwgJndhaXQsCisJCQlUQVNLX0lOVEVSUlVQVElCTEUgfCBUQVNLX05PTklOVEVSQUNUSVZFKTsKKwlpZiAocGlwZS0+aW5vZGUpCisJCW11dGV4X3VubG9jaygmcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwogCXNjaGVkdWxlKCk7Ci0JZmluaXNoX3dhaXQoUElQRV9XQUlUKCppbm9kZSksICZ3YWl0KTsKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJZmluaXNoX3dhaXQoJnBpcGUtPndhaXQsICZ3YWl0KTsKKwlpZiAocGlwZS0+aW5vZGUpCisJCW11dGV4X2xvY2soJnBpcGUtPmlub2RlLT5pX211dGV4KTsKIH0KIAogc3RhdGljIGludApAQCAtOTEsNyArOTQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCitzdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQkgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gYnVmLT5wYWdlOwogCkBAIC0xMDAsMzAgKzEwNCwyNyBAQAogCS8qCiAJICogSWYgbm9ib2R5IGVsc2UgdXNlcyB0aGlzIHBhZ2UsIGFuZCB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYQogCSAqIHRlbXBvcmFyeSBwYWdlLCBsZXQncyBrZWVwIHRyYWNrIG9mIGl0IGFzIGEgb25lLWRlZXAKLQkgKiBhbGxvY2F0aW9uIGNhY2hlCisJICogYWxsb2NhdGlvbiBjYWNoZS4gKE90aGVyd2lzZSBqdXN0IHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byBpdCkKIAkgKi8KLQlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxICYmICFpbmZvLT50bXBfcGFnZSkgewotCQlpbmZvLT50bXBfcGFnZSA9IHBhZ2U7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIE90aGVyd2lzZSBqdXN0IHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byBpdAotCSAqLwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxICYmICFwaXBlLT50bXBfcGFnZSkKKwkJcGlwZS0+dG1wX3BhZ2UgPSBwYWdlOworCWVsc2UKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCAqYW5vbl9waXBlX2J1Zl9tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgKiBhbm9uX3BpcGVfYnVmX21hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKIAlyZXR1cm4ga21hcChidWYtPnBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3VubWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgYW5vbl9waXBlX2J1Zl91bm1hcChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewogCWt1bm1hcChidWYtPnBhZ2UpOwogfQogCi1zdGF0aWMgaW50IGFub25fcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywKK3N0YXRpYyBpbnQgYW5vbl9waXBlX2J1Zl9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJICAgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewogCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19TVE9MRU47CkBAIC0xNDMsNyArMTQ0LDcgQEAKIAkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCWludCBkb193YWtldXA7CiAJc3NpemVfdCByZXQ7CiAJc3RydWN0IGlvdmVjICppb3YgPSAoc3RydWN0IGlvdmVjICopX2lvdjsKQEAgLTE1NiwxMyArMTU3LDEzIEBACiAKIAlkb193YWtldXAgPSAwOwogCXJldCA9IDA7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWluZm8gPSBpbm9kZS0+aV9waXBlOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAlmb3IgKDs7KSB7Ci0JCWludCBidWZzID0gaW5mby0+bnJidWZzOworCQlpbnQgYnVmcyA9IHBpcGUtPm5yYnVmczsKIAkJaWYgKGJ1ZnMpIHsKLQkJCWludCBjdXJidWYgPSBpbmZvLT5jdXJidWY7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBjdXJidWY7CisJCQlpbnQgY3VyYnVmID0gcGlwZS0+Y3VyYnVmOworCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgY3VyYnVmOwogCQkJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wcyA9IGJ1Zi0+b3BzOwogCQkJdm9pZCAqYWRkcjsKIAkJCXNpemVfdCBjaGFycyA9IGJ1Zi0+bGVuOwpAQCAtMTcxLDE2ICsxNzIsMTcgQEAKIAkJCWlmIChjaGFycyA+IHRvdGFsX2xlbikKIAkJCQljaGFycyA9IHRvdGFsX2xlbjsKIAotCQkJYWRkciA9IG9wcy0+bWFwKGZpbHAsIGluZm8sIGJ1Zik7CisJCQlhZGRyID0gb3BzLT5tYXAoZmlscCwgcGlwZSwgYnVmKTsKIAkJCWlmIChJU19FUlIoYWRkcikpIHsKIAkJCQlpZiAoIXJldCkKIAkJCQkJcmV0ID0gUFRSX0VSUihhZGRyKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWVycm9yID0gcGlwZV9pb3ZfY29weV90b191c2VyKGlvdiwgYWRkciArIGJ1Zi0+b2Zmc2V0LCBjaGFycyk7Ci0JCQlvcHMtPnVubWFwKGluZm8sIGJ1Zik7CisJCQlvcHMtPnVubWFwKHBpcGUsIGJ1Zik7CiAJCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQkJaWYgKCFyZXQpIHJldCA9IC1FRkFVTFQ7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlyZXQgKz0gY2hhcnM7CkBAIC0xODgsMTAgKzE5MCwxMCBAQAogCQkJYnVmLT5sZW4gLT0gY2hhcnM7CiAJCQlpZiAoIWJ1Zi0+bGVuKSB7CiAJCQkJYnVmLT5vcHMgPSBOVUxMOwotCQkJCW9wcy0+cmVsZWFzZShpbmZvLCBidWYpOworCQkJCW9wcy0+cmVsZWFzZShwaXBlLCBidWYpOwogCQkJCWN1cmJ1ZiA9IChjdXJidWYgKyAxKSAmIChQSVBFX0JVRkZFUlMtMSk7Ci0JCQkJaW5mby0+Y3VyYnVmID0gY3VyYnVmOwotCQkJCWluZm8tPm5yYnVmcyA9IC0tYnVmczsKKwkJCQlwaXBlLT5jdXJidWYgPSBjdXJidWY7CisJCQkJcGlwZS0+bnJidWZzID0gLS1idWZzOwogCQkJCWRvX3dha2V1cCA9IDE7CiAJCQl9CiAJCQl0b3RhbF9sZW4gLT0gY2hhcnM7CkBAIC0yMDAsOSArMjAyLDkgQEAKIAkJfQogCQlpZiAoYnVmcykJLyogTW9yZSB0byBkbz8gKi8KIAkJCWNvbnRpbnVlOwotCQlpZiAoIVBJUEVfV1JJVEVSUygqaW5vZGUpKQorCQlpZiAoIXBpcGUtPndyaXRlcnMpCiAJCQlicmVhazsKLQkJaWYgKCFQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+d2FpdGluZ193cml0ZXJzKSB7CiAJCQkvKiBzeXNjYWxsIG1lcmdpbmc6IFVzdWFsbHkgd2UgbXVzdCBub3Qgc2xlZXAKIAkJCSAqIGlmIE9fTk9OQkxPQ0sgaXMgc2V0LCBvciBpZiB3ZSBnb3Qgc29tZSBkYXRhLgogCQkJICogQnV0IGlmIGEgd3JpdGVyIHNsZWVwcyBpbiBrZXJuZWwgc3BhY2UsIHRoZW4KQEAgLTIxNiwyMCArMjE4LDIyIEBACiAJCQl9CiAJCX0KIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlpZiAoIXJldCkgcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGRvX3dha2V1cCkgewotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoUElQRV9XQUlUKCppbm9kZSkpOwotIAkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfT1VUKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZwaXBlLT53YWl0KTsKKyAJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJCX0KLQkJcGlwZV93YWl0KGlub2RlKTsKKwkJcGlwZV93YWl0KHBpcGUpOwogCX0KLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQkvKiBTaWduYWwgd3JpdGVycyBhc3luY2hyb25vdXNseSB0aGF0IHRoZXJlIGlzIG1vcmUgcm9vbS4gICovCisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwkvKiBTaWduYWwgd3JpdGVycyBhc3luY2hyb25vdXNseSB0aGF0IHRoZXJlIGlzIG1vcmUgcm9vbS4gKi8KIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfT1VUKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY193cml0ZXJzLCBTSUdJTywgUE9MTF9PVVQpOwogCX0KIAlpZiAocmV0ID4gMCkKIAkJZmlsZV9hY2Nlc3NlZChmaWxwKTsKQEAgLTI0MCw2ICsyNDQsNyBAQAogcGlwZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW92ZWMgaW92ID0geyAuaW92X2Jhc2UgPSBidWYsIC5pb3ZfbGVuID0gY291bnQgfTsKKwogCXJldHVybiBwaXBlX3JlYWR2KGZpbHAsICZpb3YsIDEsIHBwb3MpOwogfQogCkBAIC0yNDgsNyArMjUzLDcgQEAKIAkgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlzc2l6ZV90IHJldDsKIAlpbnQgZG9fd2FrZXVwOwogCXN0cnVjdCBpb3ZlYyAqaW92ID0gKHN0cnVjdCBpb3ZlYyAqKV9pb3Y7CkBAIC0yNjIsMTAgKzI2NywxMCBAQAogCiAJZG9fd2FrZXVwID0gMDsKIAlyZXQgPSAwOwotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlpbmZvID0gaW5vZGUtPmlfcGlwZTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcGlwZSA9IGlub2RlLT5pX3BpcGU7CiAKLQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CisJaWYgKCFwaXBlLT5yZWFkZXJzKSB7CiAJCXNlbmRfc2lnKFNJR1BJUEUsIGN1cnJlbnQsIDApOwogCQlyZXQgPSAtRVBJUEU7CiAJCWdvdG8gb3V0OwpAQCAtMjczLDIzICsyNzgsMjUgQEAKIAogCS8qIFdlIHRyeSB0byBtZXJnZSBzbWFsbCB3cml0ZXMgKi8KIAljaGFycyA9IHRvdGFsX2xlbiAmIChQQUdFX1NJWkUtMSk7IC8qIHNpemUgb2YgdGhlIGxhc3QgYnVmZmVyICovCi0JaWYgKGluZm8tPm5yYnVmcyAmJiBjaGFycyAhPSAwKSB7Ci0JCWludCBsYXN0YnVmID0gKGluZm8tPmN1cmJ1ZiArIGluZm8tPm5yYnVmcyAtIDEpICYgKFBJUEVfQlVGRkVSUy0xKTsKLQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBpbmZvLT5idWZzICsgbGFzdGJ1ZjsKKwlpZiAocGlwZS0+bnJidWZzICYmIGNoYXJzICE9IDApIHsKKwkJaW50IGxhc3RidWYgPSAocGlwZS0+Y3VyYnVmICsgcGlwZS0+bnJidWZzIC0gMSkgJgorCQkJCQkJCShQSVBFX0JVRkZFUlMtMSk7CisJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIGxhc3RidWY7CiAJCXN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHMgPSBidWYtPm9wczsKIAkJaW50IG9mZnNldCA9IGJ1Zi0+b2Zmc2V0ICsgYnVmLT5sZW47CisKIAkJaWYgKG9wcy0+Y2FuX21lcmdlICYmIG9mZnNldCArIGNoYXJzIDw9IFBBR0VfU0laRSkgewogCQkJdm9pZCAqYWRkcjsKIAkJCWludCBlcnJvcjsKIAotCQkJYWRkciA9IG9wcy0+bWFwKGZpbHAsIGluZm8sIGJ1Zik7CisJCQlhZGRyID0gb3BzLT5tYXAoZmlscCwgcGlwZSwgYnVmKTsKIAkJCWlmIChJU19FUlIoYWRkcikpIHsKIAkJCQllcnJvciA9IFBUUl9FUlIoYWRkcik7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQllcnJvciA9IHBpcGVfaW92X2NvcHlfZnJvbV91c2VyKG9mZnNldCArIGFkZHIsIGlvdiwKIAkJCQkJCQljaGFycyk7Ci0JCQlvcHMtPnVubWFwKGluZm8sIGJ1Zik7CisJCQlvcHMtPnVubWFwKHBpcGUsIGJ1Zik7CiAJCQlyZXQgPSBlcnJvcjsKIAkJCWRvX3dha2V1cCA9IDE7CiAJCQlpZiAoZXJyb3IpCkBAIC0zMDQsMTYgKzMxMSwxOCBAQAogCiAJZm9yICg7OykgewogCQlpbnQgYnVmczsKLQkJaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSkgeworCisJCWlmICghcGlwZS0+cmVhZGVycykgewogCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7Ci0JCQlpZiAoIXJldCkgcmV0ID0gLUVQSVBFOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gLUVQSVBFOwogCQkJYnJlYWs7CiAJCX0KLQkJYnVmcyA9IGluZm8tPm5yYnVmczsKKwkJYnVmcyA9IHBpcGUtPm5yYnVmczsKIAkJaWYgKGJ1ZnMgPCBQSVBFX0JVRkZFUlMpIHsKLQkJCWludCBuZXdidWYgPSAoaW5mby0+Y3VyYnVmICsgYnVmcykgJiAoUElQRV9CVUZGRVJTLTEpOwotCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBpbmZvLT5idWZzICsgbmV3YnVmOwotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBpbmZvLT50bXBfcGFnZTsKKwkJCWludCBuZXdidWYgPSAocGlwZS0+Y3VyYnVmICsgYnVmcykgJiAoUElQRV9CVUZGRVJTLTEpOworCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgbmV3YnVmOworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwaXBlLT50bXBfcGFnZTsKIAkJCWludCBlcnJvcjsKIAogCQkJaWYgKCFwYWdlKSB7CkBAIC0zMjIsOSArMzMxLDkgQEAKIAkJCQkJcmV0ID0gcmV0ID8gOiAtRU5PTUVNOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJaW5mby0+dG1wX3BhZ2UgPSBwYWdlOworCQkJCXBpcGUtPnRtcF9wYWdlID0gcGFnZTsKIAkJCX0KLQkJCS8qIEFsd2F5cyB3YWtldXAsIGV2ZW4gaWYgdGhlIGNvcHkgZmFpbHMuIE90aGVyd2lzZQorCQkJLyogQWx3YXlzIHdha2UgdXAsIGV2ZW4gaWYgdGhlIGNvcHkgZmFpbHMuIE90aGVyd2lzZQogCQkJICogd2UgbG9jayB1cCAoT19OT05CTE9DSy0pcmVhZGVycyB0aGF0IHNsZWVwIGR1ZSB0bwogCQkJICogc3lzY2FsbCBtZXJnaW5nLgogCQkJICogRklYTUUhIElzIHRoaXMgcmVhbGx5IHRydWU/CkBAIC0zMzcsNyArMzQ2LDggQEAKIAkJCWVycm9yID0gcGlwZV9pb3ZfY29weV9mcm9tX3VzZXIoa21hcChwYWdlKSwgaW92LCBjaGFycyk7CiAJCQlrdW5tYXAocGFnZSk7CiAJCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQkJaWYgKCFyZXQpIHJldCA9IC1FRkFVTFQ7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlyZXQgKz0gY2hhcnM7CkBAIC0zNDcsOCArMzU3LDggQEAKIAkJCWJ1Zi0+b3BzID0gJmFub25fcGlwZV9idWZfb3BzOwogCQkJYnVmLT5vZmZzZXQgPSAwOwogCQkJYnVmLT5sZW4gPSBjaGFyczsKLQkJCWluZm8tPm5yYnVmcyA9ICsrYnVmczsKLQkJCWluZm8tPnRtcF9wYWdlID0gTlVMTDsKKwkJCXBpcGUtPm5yYnVmcyA9ICsrYnVmczsKKwkJCXBpcGUtPnRtcF9wYWdlID0gTlVMTDsKIAogCQkJdG90YWxfbGVuIC09IGNoYXJzOwogCQkJaWYgKCF0b3RhbF9sZW4pCkBAIC0zNTcsMjcgKzM2NywyOSBAQAogCQlpZiAoYnVmcyA8IFBJUEVfQlVGRkVSUykKIAkJCWNvbnRpbnVlOwogCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCWlmICghcmV0KSByZXQgPSAtRUFHQUlOOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJaWYgKCFyZXQpIHJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworCQkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJCQlkb193YWtldXAgPSAwOwogCQl9Ci0JCVBJUEVfV0FJVElOR19XUklURVJTKCppbm9kZSkrKzsKLQkJcGlwZV93YWl0KGlub2RlKTsKLQkJUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKS0tOworCQlwaXBlLT53YWl0aW5nX3dyaXRlcnMrKzsKKwkJcGlwZV93YWl0KHBpcGUpOworCQlwaXBlLT53YWl0aW5nX3dyaXRlcnMtLTsKIAl9CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKGRvX3dha2V1cCkgewotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoUElQRV9XQUlUKCppbm9kZSkpOwotCQlraWxsX2Zhc3luYyhQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSksIFNJR0lPLCBQT0xMX0lOKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJfQogCWlmIChyZXQgPiAwKQogCQlmaWxlX3VwZGF0ZV90aW1lKGZpbHApOwpAQCAtMzg5LDYgKzQwMSw3IEBACiAJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGlvdmVjIGlvdiA9IHsgLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYnVmLCAuaW92X2xlbiA9IGNvdW50IH07CisKIAlyZXR1cm4gcGlwZV93cml0ZXYoZmlscCwgJmlvdiwgMSwgcHBvcyk7CiB9CiAKQEAgLTM5OSw3ICs0MTIsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotYmFkX3BpcGVfdyhzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitiYWRfcGlwZV93KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJICAgbG9mZl90ICpwcG9zKQogewogCXJldHVybiAtRUJBREY7CiB9CkBAIC00MDksMjEgKzQyMywyMiBAQAogCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAJaW50IGNvdW50LCBidWYsIG5yYnVmczsKIAogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgRklPTlJFQUQ6Ci0JCQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JCQlpbmZvID0gIGlub2RlLT5pX3BpcGU7CisJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCQlwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAkJCWNvdW50ID0gMDsKLQkJCWJ1ZiA9IGluZm8tPmN1cmJ1ZjsKLQkJCW5yYnVmcyA9IGluZm8tPm5yYnVmczsKKwkJCWJ1ZiA9IHBpcGUtPmN1cmJ1ZjsKKwkJCW5yYnVmcyA9IHBpcGUtPm5yYnVmczsKIAkJCXdoaWxlICgtLW5yYnVmcyA+PSAwKSB7Ci0JCQkJY291bnQgKz0gaW5mby0+YnVmc1tidWZdLmxlbjsKKwkJCQljb3VudCArPSBwaXBlLT5idWZzW2J1Zl0ubGVuOwogCQkJCWJ1ZiA9IChidWYrMSkgJiAoUElQRV9CVUZGRVJTLTEpOwogCQkJfQotCQkJbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwogCQkJcmV0dXJuIHB1dF91c2VyKGNvdW50LCAoaW50IF9fdXNlciAqKWFyZyk7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQzNiwxNyArNDUxLDE3IEBACiB7CiAJdW5zaWduZWQgaW50IG1hc2s7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8gPSBpbm9kZS0+aV9waXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUgPSBpbm9kZS0+aV9waXBlOwogCWludCBucmJ1ZnM7CiAKLQlwb2xsX3dhaXQoZmlscCwgUElQRV9XQUlUKCppbm9kZSksIHdhaXQpOworCXBvbGxfd2FpdChmaWxwLCAmcGlwZS0+d2FpdCwgd2FpdCk7CiAKIAkvKiBSZWFkaW5nIG9ubHkgLS0gbm8gbmVlZCBmb3IgYWNxdWlyaW5nIHRoZSBzZW1hcGhvcmUuICAqLwotCW5yYnVmcyA9IGluZm8tPm5yYnVmczsKKwlucmJ1ZnMgPSBwaXBlLT5ucmJ1ZnM7CiAJbWFzayA9IDA7CiAJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJbWFzayA9IChucmJ1ZnMgPiAwKSA/IFBPTExJTiB8IFBPTExSRE5PUk0gOiAwOwotCQlpZiAoIVBJUEVfV1JJVEVSUygqaW5vZGUpICYmIGZpbHAtPmZfdmVyc2lvbiAhPSBQSVBFX1dDT1VOVEVSKCppbm9kZSkpCisJCWlmICghcGlwZS0+d3JpdGVycyAmJiBmaWxwLT5mX3ZlcnNpb24gIT0gcGlwZS0+d19jb3VudGVyKQogCQkJbWFzayB8PSBQT0xMSFVQOwogCX0KIApAQCAtNDU2LDcgKzQ3MSw3IEBACiAJCSAqIE1vc3QgVW5pY2VzIGRvIG5vdCBzZXQgUE9MTEVSUiBmb3IgRklGT3MgYnV0IG9uIExpbnV4IHRoZXkKIAkJICogYmVoYXZlIGV4YWN0bHkgbGlrZSBwaXBlcyBmb3IgcG9sbCgpLgogCQkgKi8KLQkJaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSkKKwkJaWYgKCFwaXBlLT5yZWFkZXJzKQogCQkJbWFzayB8PSBQT0xMRVJSOwogCX0KIApAQCAtNDY2LDE3ICs0ODEsMjEgQEAKIHN0YXRpYyBpbnQKIHBpcGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZGVjciwgaW50IGRlY3cpCiB7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCVBJUEVfUkVBREVSUygqaW5vZGUpIC09IGRlY3I7Ci0JUElQRV9XUklURVJTKCppbm9kZSkgLT0gZGVjdzsKLQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpICYmICFQSVBFX1dSSVRFUlMoKmlub2RlKSkgeworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcGlwZSA9IGlub2RlLT5pX3BpcGU7CisJcGlwZS0+cmVhZGVycyAtPSBkZWNyOworCXBpcGUtPndyaXRlcnMgLT0gZGVjdzsKKworCWlmICghcGlwZS0+cmVhZGVycyAmJiAhcGlwZS0+d3JpdGVycykgewogCQlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAJfSBlbHNlIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9JTik7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfT1VUKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4Nyw5ICs1MDYsOSBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0dmFsOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCBQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSkpOwotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmlub2RlLT5pX3BpcGUtPmZhc3luY19yZWFkZXJzKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNTA0LDkgKzUyMyw5IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCWludCByZXR2YWw7CiAKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sIFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSk7Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CkBAIC01MTksMTYgKzUzOCwxNyBAQAogcGlwZV9yZHdyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUgPSBpbm9kZS0+aV9waXBlOwogCWludCByZXR2YWw7CiAKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sIFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSk7CisJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZwaXBlLT5mYXN5bmNfcmVhZGVycyk7CiAKIAlpZiAocmV0dmFsID49IDApCi0JCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCBQSVBFX0ZBU1lOQ19XUklURVJTKCppbm9kZSkpOworCQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnBpcGUtPmZhc3luY193cml0ZXJzKTsKIAotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CkBAIC01NjcsOSArNTg3LDkgQEAKIHsKIAkvKiBXZSBjb3VsZCBoYXZlIHBlcmhhcHMgdXNlZCBhdG9taWNfdCwgYnV0IHRoaXMgYW5kIGZyaWVuZHMKIAkgICBiZWxvdyBhcmUgdGhlIG9ubHkgcGxhY2VzLiAgU28gaXQgZG9lc24ndCBzZWVtIHdvcnRod2hpbGUuICAqLwotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlQSVBFX1JFQURFUlMoKmlub2RlKSsrOwotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3Nyw5ICs1OTcsOSBAQAogc3RhdGljIGludAogcGlwZV93cml0ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlQSVBFX1dSSVRFUlMoKmlub2RlKSsrOwotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4NywxMiArNjA3LDEyIEBACiBzdGF0aWMgaW50CiBwaXBlX3Jkd3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlQSVBFX1JFQURFUlMoKmlub2RlKSsrOworCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CiAJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQlQSVBFX1dSSVRFUlMoKmlub2RlKSsrOwotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY3NSwzNyArNjk1LDM4IEBACiAJLmZhc3luYwkJPSBwaXBlX3Jkd3JfZmFzeW5jLAogfTsKIAotdm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqIGFsbG9jX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWludCBpOwotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8gPSBpbm9kZS0+aV9waXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAKLQlpbm9kZS0+aV9waXBlID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgUElQRV9CVUZGRVJTOyBpKyspIHsKLQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBpbmZvLT5idWZzICsgaTsKLQkJaWYgKGJ1Zi0+b3BzKQotCQkJYnVmLT5vcHMtPnJlbGVhc2UoaW5mbywgYnVmKTsKKwlwaXBlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyksIEdGUF9LRVJORUwpOworCWlmIChwaXBlKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBpcGUtPndhaXQpOworCQlwaXBlLT5yX2NvdW50ZXIgPSBwaXBlLT53X2NvdW50ZXIgPSAxOworCQlwaXBlLT5pbm9kZSA9IGlub2RlOwogCX0KLQlpZiAoaW5mby0+dG1wX3BhZ2UpCi0JCV9fZnJlZV9wYWdlKGluZm8tPnRtcF9wYWdlKTsKLQlrZnJlZShpbmZvKTsKKworCXJldHVybiBwaXBlOwogfQogCi1zdHJ1Y3QgaW5vZGUqIHBpcGVfbmV3KHN0cnVjdCBpbm9kZSogaW5vZGUpCit2b2lkIF9fZnJlZV9waXBlX2luZm8oc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSkKIHsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvOworCWludCBpOwogCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwaXBlX2lub2RlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8pCi0JCWdvdG8gZmFpbF9wYWdlOwotCWlub2RlLT5pX3BpcGUgPSBpbmZvOworCWZvciAoaSA9IDA7IGkgPCBQSVBFX0JVRkZFUlM7IGkrKykgeworCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBpOworCQlpZiAoYnVmLT5vcHMpCisJCQlidWYtPm9wcy0+cmVsZWFzZShwaXBlLCBidWYpOworCX0KKwlpZiAocGlwZS0+dG1wX3BhZ2UpCisJCV9fZnJlZV9wYWdlKHBpcGUtPnRtcF9wYWdlKTsKKwlrZnJlZShwaXBlKTsKK30KIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoUElQRV9XQUlUKCppbm9kZSkpOwotCVBJUEVfUkNPVU5URVIoKmlub2RlKSA9IFBJUEVfV0NPVU5URVIoKmlub2RlKSA9IDE7Ci0KLQlyZXR1cm4gaW5vZGU7Ci1mYWlsX3BhZ2U6Ci0JcmV0dXJuIE5VTEw7Cit2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJX19mcmVlX3BpcGVfaW5mbyhpbm9kZS0+aV9waXBlKTsKKwlpbm9kZS0+aV9waXBlID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqcGlwZV9tbnQgX19yZWFkX21vc3RseTsKQEAgLTcxMyw2ICs3MzQsNyBAQAogewogCXJldHVybiAxOwogfQorCiBzdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpcGVmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kZWxldGUJPSBwaXBlZnNfZGVsZXRlX2RlbnRyeSwKIH07CkBAIC03MjAsMTMgKzc0MiwxNyBAQAogc3RhdGljIHN0cnVjdCBpbm9kZSAqIGdldF9waXBlX2lub2RlKHZvaWQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShwaXBlX21udC0+bW50X3NiKTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCiAJaWYgKCFpbm9kZSkKIAkJZ290byBmYWlsX2lub2RlOwogCi0JaWYoIXBpcGVfbmV3KGlub2RlKSkKKwlwaXBlID0gYWxsb2NfcGlwZV9pbmZvKGlub2RlKTsKKwlpZiAoIXBpcGUpCiAJCWdvdG8gZmFpbF9pcHV0OwotCVBJUEVfUkVBREVSUygqaW5vZGUpID0gUElQRV9XUklURVJTKCppbm9kZSkgPSAxOworCWlub2RlLT5pX3BpcGUgPSBwaXBlOworCisJcGlwZS0+cmVhZGVycyA9IHBpcGUtPndyaXRlcnMgPSAxOwogCWlub2RlLT5pX2ZvcCA9ICZyZHdyX3BpcGVfZm9wczsKIAogCS8qCkBAIC03NDEsMTAgKzc2NywxMiBAQAogCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmZzZ2lkOwogCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9TSVpFOworCiAJcmV0dXJuIGlub2RlOwogCiBmYWlsX2lwdXQ6CiAJaXB1dChpbm9kZSk7CisKIGZhaWxfaW5vZGU6CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03NTcsNyArNzg1LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAlzdHJ1Y3QgZmlsZSAqZjEsICpmMjsKIAlpbnQgZXJyb3I7Ci0JaW50IGksajsKKwlpbnQgaSwgajsKIAogCWVycm9yID0gLUVORklMRTsKIAlmMSA9IGdldF9lbXB0eV9maWxwKCk7CkBAIC03OTAsNiArODE4LDcgQEAKIAlkZW50cnkgPSBkX2FsbG9jKHBpcGVfbW50LT5tbnRfc2ItPnNfcm9vdCwgJnRoaXMpOwogCWlmICghZGVudHJ5KQogCQlnb3RvIGNsb3NlX2YxMl9pbm9kZV9pX2o7CisKIAlkZW50cnktPmRfb3AgPSAmcGlwZWZzX2RlbnRyeV9vcGVyYXRpb25zOwogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCWYxLT5mX3Zmc21udCA9IGYyLT5mX3Zmc21udCA9IG1udGdldChtbnRnZXQocGlwZV9tbnQpKTsKQEAgLTgxMyw2ICs4NDIsNyBAQAogCWZkX2luc3RhbGwoaiwgZjIpOwogCWZkWzBdID0gaTsKIAlmZFsxXSA9IGo7CisKIAlyZXR1cm4gMDsKIAogY2xvc2VfZjEyX2lub2RlX2lfajoKQEAgLTgzNyw4ICs4NjcsOSBAQAogICogZF9uYW1lIC0gcGlwZTogd2lsbCBnbyBuaWNlbHkgYW5kIGtpbGwgdGhlIHNwZWNpYWwtY2FzaW5nIGluIHByb2Nmcy4KICAqLwogCi1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpwaXBlZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAotCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICoKK3BpcGVmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKKwkgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gZ2V0X3NiX3BzZXVkbyhmc190eXBlLCAicGlwZToiLCBOVUxMLCBQSVBFRlNfTUFHSUMpOwogfQpAQCAtODUyLDYgKzg4Myw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BpcGVfZnModm9pZCkKIHsKIAlpbnQgZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmcGlwZV9mc190eXBlKTsKKwogCWlmICghZXJyKSB7CiAJCXBpcGVfbW50ID0ga2Vybl9tb3VudCgmcGlwZV9mc190eXBlKTsKIAkJaWYgKElTX0VSUihwaXBlX21udCkpIHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvdm1jb3JlLmMgYi9mcy9wcm9jL3ZtY29yZS5jCmluZGV4IDdlZmE3M2QuLjIwZDRiMjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvdm1jb3JlLmMKKysrIGIvZnMvcHJvYy92bWNvcmUuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJCQkJc2l6ZV90IGJ1ZmxlbiwgbG9mZl90ICpmcG9zKQogewogCXNzaXplX3QgYWNjID0gMCwgdG1wOwotCXNpemVfdCB0c3osIG5yX2J5dGVzOwotCXU2NCBzdGFydDsKKwlzaXplX3QgdHN6OworCXU2NCBzdGFydCwgbnJfYnl0ZXM7CiAJc3RydWN0IHZtY29yZSAqY3Vycl9tID0gTlVMTDsKIAogCWlmIChidWZsZW4gPT0gMCB8fCAqZnBvcyA+PSB2bWNvcmVfc2l6ZSkKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCA2MjU2Y2E4Li41YmMwZTkyIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAkJZ290byBFaW52YWw7CiAKIAlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCWlmIChpbm9kZS0+aV9mbG9jayAmJiBNQU5EQVRPUllfTE9DSyhpbm9kZSkpIHsKKwlpZiAodW5saWtlbHkoaW5vZGUtPmlfZmxvY2sgJiYgTUFOREFUT1JZX0xPQ0soaW5vZGUpKSkgewogCQlpbnQgcmV0dmFsID0gbG9ja3NfbWFuZGF0b3J5X2FyZWEoCiAJCQlyZWFkX3dyaXRlID09IFJFQUQgPyBGTE9DS19WRVJJRllfUkVBRCA6IEZMT0NLX1ZFUklGWV9XUklURSwKIAkJCWlub2RlLCBmaWxlLCBwb3MsIGNvdW50KTsKZGlmZiAtLWdpdCBhL2ZzL3NlbGVjdC5jIGIvZnMvc2VsZWN0LmMKaW5kZXggMDcxNjYwZi4uYTgxMDliYSAxMDA2NDQKLS0tIGEvZnMvc2VsZWN0LmMKKysrIGIvZnMvc2VsZWN0LmMKQEAgLTMxMCw4ICszMTAsOSBAQAogCQkJICAgZmRfc2V0IF9fdXNlciAqZXhwLCBzNjQgKnRpbWVvdXQpCiB7CiAJZmRfc2V0X2JpdHMgZmRzOwotCWNoYXIgKmJpdHM7Ci0JaW50IHJldCwgc2l6ZSwgbWF4X2Zkc2V0OworCXZvaWQgKmJpdHM7CisJaW50IHJldCwgbWF4X2Zkc2V0OworCXVuc2lnbmVkIGludCBzaXplOwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CiAJLyogQWxsb2NhdGUgc21hbGwgYXJndW1lbnRzIG9uIHRoZSBzdGFjayB0byBzYXZlIG1lbW9yeSBhbmQgYmUgZmFzdGVyICovCiAJbG9uZyBzdGFja19mZHNbU0VMRUNUX1NUQUNLX0FMTE9DL3NpemVvZihsb25nKV07CkBAIC0zMzMsMjAgKzMzNCwyMSBAQAogCSAqIHNpbmNlIHdlIHVzZWQgZmRzZXQgd2UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gdW5pdHMgb2YKIAkgKiBsb25nLXdvcmRzLiAKIAkgKi8KLQlyZXQgPSAtRU5PTUVNOwogCXNpemUgPSBGRFNfQllURVMobik7Ci0JaWYgKDYqc2l6ZSA8IFNFTEVDVF9TVEFDS19BTExPQykKLQkJYml0cyA9IHN0YWNrX2ZkczsKLQllbHNlCisJYml0cyA9IHN0YWNrX2ZkczsKKwlpZiAoc2l6ZSA+IHNpemVvZihzdGFja19mZHMpIC8gNikgeworCQkvKiBOb3QgZW5vdWdoIHNwYWNlIGluIG9uLXN0YWNrIGFycmF5OyBtdXN0IHVzZSBrbWFsbG9jICovCisJCXJldCA9IC1FTk9NRU07CiAJCWJpdHMgPSBrbWFsbG9jKDYgKiBzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJpdHMpCi0JCWdvdG8gb3V0X25vZmRzOwotCWZkcy5pbiAgICAgID0gKHVuc2lnbmVkIGxvbmcgKikgIGJpdHM7Ci0JZmRzLm91dCAgICAgPSAodW5zaWduZWQgbG9uZyAqKSAoYml0cyArICAgc2l6ZSk7Ci0JZmRzLmV4ICAgICAgPSAodW5zaWduZWQgbG9uZyAqKSAoYml0cyArIDIqc2l6ZSk7Ci0JZmRzLnJlc19pbiAgPSAodW5zaWduZWQgbG9uZyAqKSAoYml0cyArIDMqc2l6ZSk7Ci0JZmRzLnJlc19vdXQgPSAodW5zaWduZWQgbG9uZyAqKSAoYml0cyArIDQqc2l6ZSk7Ci0JZmRzLnJlc19leCAgPSAodW5zaWduZWQgbG9uZyAqKSAoYml0cyArIDUqc2l6ZSk7CisJCWlmICghYml0cykKKwkJCWdvdG8gb3V0X25vZmRzOworCX0KKwlmZHMuaW4gICAgICA9IGJpdHM7CisJZmRzLm91dCAgICAgPSBiaXRzICsgICBzaXplOworCWZkcy5leCAgICAgID0gYml0cyArIDIqc2l6ZTsKKwlmZHMucmVzX2luICA9IGJpdHMgKyAzKnNpemU7CisJZmRzLnJlc19vdXQgPSBiaXRzICsgNCpzaXplOworCWZkcy5yZXNfZXggID0gYml0cyArIDUqc2l6ZTsKIAogCWlmICgocmV0ID0gZ2V0X2ZkX3NldChuLCBpbnAsIGZkcy5pbikpIHx8CiAJICAgIChyZXQgPSBnZXRfZmRfc2V0KG4sIG91dHAsIGZkcy5vdXQpKSB8fApkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCBiZmE0MmEyLi5lNTBhNDYwIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtOSwxMSArOSwxMiBAQAogICogdGhhdCB0cmFuc2ZlcnMgZGF0YSBidWZmZXJzIHRvIG9yIGZyb20gYSBwaXBlIGJ1ZmZlci4KICAqCiAgKiBOYW1lZCBieSBMYXJyeSBNY1ZveSwgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gZnJvbSBMaW51cywgZXh0ZW5kZWQgYnkKLSAqIEplbnMgdG8gc3VwcG9ydCBzcGxpY2luZyB0byBmaWxlcyBhbmQgZml4aW5nIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uCi0gKiBidWdzLgorICogSmVucyB0byBzdXBwb3J0IHNwbGljaW5nIHRvIGZpbGVzLCBuZXR3b3JrLCBkaXJlY3Qgc3BsaWNpbmcsIGV0YyBhbmQKKyAqIGZpeGluZyBsb3RzIG9mIGJ1Z3MuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtODQsMjYgKzg1LDQzIEBACiAJCQkJICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKLQotCWxvY2tfcGFnZShwYWdlKTsKKwlpbnQgZXJyOwogCiAJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJbG9ja19wYWdlKHBhZ2UpOworCisJCS8qCisJCSAqIFBhZ2UgZ290IHRydW5jYXRlZC91bmhhc2hlZC4gVGhpcyB3aWxsIGNhdXNlIGEgMC1ieXRlCisJCSAqIHNwbGljZSwgaWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFnZS4KKwkJICovCisJCWlmICghcGFnZS0+bWFwcGluZykgeworCQkJZXJyID0gLUVOT0RBVEE7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJLyoKKwkJICogVWggb2gsIHJlYWQtZXJyb3IgZnJvbSBkaXNrLgorCQkgKi8KKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJLyoKKwkJICogUGFnZSBpcyBvayBhZnRlcmFsbCwgZmFsbCB0aHJvdWdoIHRvIG1hcHBpbmcuCisJCSAqLwogCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJfQogCi0JaWYgKCFwYWdlLT5tYXBwaW5nKSB7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQotCi0JcmV0dXJuIGttYXAoYnVmLT5wYWdlKTsKKwlyZXR1cm4ga21hcChwYWdlKTsKK2Vycm9yOgorCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKIHN0YXRpYyB2b2lkIHBhZ2VfY2FjaGVfcGlwZV9idWZfdW5tYXAoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywKIAkJCQkgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKLQl1bmxvY2tfcGFnZShidWYtPnBhZ2UpOwogCWt1bm1hcChidWYtPnBhZ2UpOwogfQogCkBAIC0xMTksMzQgKzEzNywzMCBAQAogICogUGlwZSBvdXRwdXQgd29ya2VyLiBUaGlzIHNldHMgdXAgb3VyIHBpcGUgZm9ybWF0IHdpdGggdGhlIHBhZ2UgY2FjaGUKICAqIHBpcGUgYnVmZmVyIG9wZXJhdGlvbnMuIE90aGVyd2lzZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHJlZ3VsYXIgcGlwZV93cml0ZXYoKS4KICAqLwotc3RhdGljIHNzaXplX3QgbW92ZV90b19waXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICoqcGFnZXMsCitzdGF0aWMgc3NpemVfdCBtb3ZlX3RvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IHBhZ2UgKipwYWdlcywKIAkJCSAgICBpbnQgbnJfcGFnZXMsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKIAlpbnQgcmV0LCBkb193YWtldXAsIGk7CiAKIAlyZXQgPSAwOwogCWRvX3dha2V1cCA9IDA7CiAJaSA9IDA7CiAKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJaWYgKHBpcGUtPmlub2RlKQorCQltdXRleF9sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKLQlpbmZvID0gaW5vZGUtPmlfcGlwZTsKIAlmb3IgKDs7KSB7Ci0JCWludCBidWZzOwotCi0JCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKKwkJaWYgKCFwaXBlLT5yZWFkZXJzKSB7CiAJCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKIAkJCWlmICghcmV0KQogCQkJCXJldCA9IC1FUElQRTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJYnVmcyA9IGluZm8tPm5yYnVmczsKLQkJaWYgKGJ1ZnMgPCBQSVBFX0JVRkZFUlMpIHsKLQkJCWludCBuZXdidWYgPSAoaW5mby0+Y3VyYnVmICsgYnVmcykgJiAoUElQRV9CVUZGRVJTIC0gMSk7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBuZXdidWY7CisJCWlmIChwaXBlLT5ucmJ1ZnMgPCBQSVBFX0JVRkZFUlMpIHsKKwkJCWludCBuZXdidWYgPSAocGlwZS0+Y3VyYnVmICsgcGlwZS0+bnJidWZzKSAmIChQSVBFX0JVRkZFUlMgLSAxKTsKKwkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIG5ld2J1ZjsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbaSsrXTsKIAkJCXVuc2lnbmVkIGxvbmcgdGhpc19sZW47CiAKQEAgLTE1OCw4ICsxNzIsOSBAQAogCQkJYnVmLT5vZmZzZXQgPSBvZmZzZXQ7CiAJCQlidWYtPmxlbiA9IHRoaXNfbGVuOwogCQkJYnVmLT5vcHMgPSAmcGFnZV9jYWNoZV9waXBlX2J1Zl9vcHM7Ci0JCQlpbmZvLT5ucmJ1ZnMgPSArK2J1ZnM7Ci0JCQlkb193YWtldXAgPSAxOworCQkJcGlwZS0+bnJidWZzKys7CisJCQlpZiAocGlwZS0+aW5vZGUpCisJCQkJZG9fd2FrZXVwID0gMTsKIAogCQkJcmV0ICs9IHRoaXNfbGVuOwogCQkJbGVuIC09IHRoaXNfbGVuOwpAQCAtMTY4LDcgKzE4Myw3IEBACiAJCQkJYnJlYWs7CiAJCQlpZiAoIWxlbikKIAkJCQlicmVhazsKLQkJCWlmIChidWZzIDwgUElQRV9CVUZGRVJTKQorCQkJaWYgKHBpcGUtPm5yYnVmcyA8IFBJUEVfQlVGRkVSUykKIAkJCQljb250aW51ZTsKIAogCQkJYnJlYWs7CkBAIC0xODcsMjIgKzIwMiwyNiBAQAogCQl9CiAKIAkJaWYgKGRvX3dha2V1cCkgewotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoUElQRV9XQUlUKCppbm9kZSkpOwotCQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpLCBTSUdJTywKLQkJCQkgICAgUE9MTF9JTik7CisJCQlzbXBfbWIoKTsKKwkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmcGlwZS0+d2FpdCk7CisJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKIAkJCWRvX3dha2V1cCA9IDA7CiAJCX0KIAotCQlQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpKys7Ci0JCXBpcGVfd2FpdChpbm9kZSk7Ci0JCVBJUEVfV0FJVElOR19XUklURVJTKCppbm9kZSktLTsKKwkJcGlwZS0+d2FpdGluZ193cml0ZXJzKys7CisJCXBpcGVfd2FpdChwaXBlKTsKKwkJcGlwZS0+d2FpdGluZ193cml0ZXJzLS07CiAJfQogCi0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJaWYgKHBpcGUtPmlub2RlKQorCQltdXRleF91bmxvY2soJnBpcGUtPmlub2RlLT5pX211dGV4KTsKIAogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9JTik7CisJCXNtcF9tYigpOworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcGlwZS0+d2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKIAl9CiAKIAl3aGlsZSAoaSA8IG5yX3BhZ2VzKQpAQCAtMjExLDE1ICsyMzAsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IGlub2RlICpwaXBlLAotCQkJCSAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyBpbnQKK19fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCSAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGluLT5mX21hcHBpbmc7CiAJdW5zaWduZWQgaW50IG9mZnNldCwgbnJfcGFnZXM7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfQlVGRkVSU10sICpzaGFkb3dbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9CVUZGRVJTXTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlwZ29mZl90IGluZGV4LCBwaWR4OwotCWludCBpLCBqOworCXBnb2ZmX3QgaW5kZXg7CisJaW50IGksIGVycm9yOwogCiAJaW5kZXggPSBpbi0+Zl9wb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlvZmZzZXQgPSBpbi0+Zl9wb3MgJiB+UEFHRV9DQUNIRV9NQVNLOwpAQCAtMjI5LDc4ICsyNDksOTQgQEAKIAkJbnJfcGFnZXMgPSBQSVBFX0JVRkZFUlM7CiAKIAkvKgotCSAqIGluaXRpYXRlIHJlYWQtYWhlYWQgb24gdGhpcyBwYWdlIHJhbmdlCisJICogSW5pdGlhdGUgcmVhZC1haGVhZCBvbiB0aGlzIHBhZ2UgcmFuZ2UuIGhvd2V2ZXIsIGRvbid0IGNhbGwgaW50bworCSAqIHJlYWQtYWhlYWQgaWYgdGhpcyBpcyBhIG5vbi16ZXJvIG9mZnNldCAod2UgYXJlIGxpa2VseSBkb2luZyBzbWFsbAorCSAqIGNodW5rIHNwbGljZSBhbmQgdGhlIHBhZ2UgaXMgYWxyZWFkeSB0aGVyZSkgZm9yIGEgc2luZ2xlIHBhZ2UuCiAJICovCi0JZG9fcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgaW4sIGluZGV4LCBucl9wYWdlcyk7CisJaWYgKCFvZmZzZXQgfHwgbnJfcGFnZXMgPiAxKQorCQlkb19wYWdlX2NhY2hlX3JlYWRhaGVhZChtYXBwaW5nLCBpbiwgaW5kZXgsIG5yX3BhZ2VzKTsKIAogCS8qCi0JICogR2V0IGFzIG1hbnkgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBhcyBwb3NzaWJsZS4uCi0JICogU3RhcnQgSU8gb24gdGhlIHBhZ2UgY2FjaGUgZW50cmllcyB3ZSBjcmVhdGUgKHdlCi0JICogY2FuIGFzc3VtZSB0aGF0IGFueSBwcmUtZXhpc3Rpbmcgb25lcyB3ZSBmaW5kIGhhdmUKLQkgKiBhbHJlYWR5IGhhZCBJTyBzdGFydGVkIG9uIHRoZW0pLgorCSAqIE5vdyBmaWxsIGluIHRoZSBob2xlczoKIAkgKi8KLQlpID0gZmluZF9nZXRfcGFnZXMobWFwcGluZywgaW5kZXgsIG5yX3BhZ2VzLCBwYWdlcyk7Ci0KLQkvKgotCSAqIGNvbW1vbiBjYXNlIC0gd2UgZm91bmQgYWxsIHBhZ2VzIGFuZCB0aGV5IGFyZSBjb250aWd1b3VzLAotCSAqIGtpY2sgdGhlbSBvZmYKLQkgKi8KLQlpZiAoaSAmJiAocGFnZXNbaSAtIDFdLT5pbmRleCA9PSBpbmRleCArIGkgLSAxKSkKLQkJZ290byBzcGxpY2VfdGhlbTsKLQotCS8qCi0JICogZmlsbCBzaGFkb3dbXSB3aXRoIHBhZ2VzIGF0IHRoZSByaWdodCBsb2NhdGlvbnMsIHNvIHdlIG9ubHkKLQkgKiBoYXZlIHRvIGZpbGwgaG9sZXMKLQkgKi8KLQltZW1zZXQoc2hhZG93LCAwLCBucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7Ci0JZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJc2hhZG93W3BhZ2VzW2pdLT5pbmRleCAtIGluZGV4XSA9IHBhZ2VzW2pdOwotCi0JLyoKLQkgKiBub3cgZmlsbCBpbiB0aGUgaG9sZXMKLQkgKi8KLQlmb3IgKGkgPSAwLCBwaWR4ID0gaW5kZXg7IGkgPCBucl9wYWdlczsgcGlkeCsrLCBpKyspIHsKLQkJaW50IGVycm9yOwotCi0JCWlmIChzaGFkb3dbaV0pCi0JCQljb250aW51ZTsKLQorCWVycm9yID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKywgaW5kZXgrKykgeworZmluZF9wYWdlOgogCQkvKgotCQkgKiBubyBwYWdlIHRoZXJlLCBsb29rIG9uZSB1cCAvIGNyZWF0ZSBpdAorCQkgKiBsb29rdXAgdGhlIHBhZ2UgZm9yIHRoaXMgaW5kZXgKIAkJICovCi0JCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIHBpZHgsCi0JCQkJCQkgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKLQkJaWYgKCFwYWdlKQotCQkJYnJlYWs7CisJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGluZGV4KTsKKwkJaWYgKCFwYWdlKSB7CisJCQkvKgorCQkJICogSWYgaW4gbm9uYmxvY2sgbW9kZSB0aGVuIGRvbnQgYmxvY2sgb24KKwkJCSAqIHJlYWRwYWdlICh3ZSd2ZSBraWNrZWQgcmVhZGFoZWFkIHNvIHRoZXJlCisJCQkgKiB3aWxsIGJlIGFzeW5jaHJvbm91cyBwcm9ncmVzcyk6CisJCQkgKi8KKwkJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKQorCQkJCWJyZWFrOwogCi0JCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCi0JCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJZWxzZSB7Ci0JCQllcnJvciA9IG1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShpbiwgcGFnZSk7CisJCQkvKgorCQkJICogcGFnZSBkaWRuJ3QgZXhpc3QsIGFsbG9jYXRlIG9uZQorCQkJICovCisJCQlwYWdlID0gcGFnZV9jYWNoZV9hbGxvY19jb2xkKG1hcHBpbmcpOworCQkJaWYgKCFwYWdlKQorCQkJCWJyZWFrOwogCisJCQllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwKKwkJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCQlicmVhazsKIAkJCX0KKworCQkJZ290byByZWFkcGFnZTsKIAkJfQotCQlzaGFkb3dbaV0gPSBwYWdlOworCisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzbid0IHVwdG9kYXRlLCB3ZSBtYXkgbmVlZCB0byBzdGFydCBpbyBvbiBpdAorCQkgKi8KKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCWxvY2tfcGFnZShwYWdlKTsKKworCQkJLyoKKwkJCSAqIHBhZ2Ugd2FzIHRydW5jYXRlZCwgc3RvcCBoZXJlLiBpZiB0aGlzIGlzbid0IHRoZQorCQkJICogZmlyc3QgcGFnZSwgd2UnbGwganVzdCBjb21wbGV0ZSB3aGF0IHdlIGFscmVhZHkKKwkJCSAqIGFkZGVkCisJCQkgKi8KKwkJCWlmICghcGFnZS0+bWFwcGluZykgeworCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qCisJCQkgKiBwYWdlIHdhcyBhbHJlYWR5IHVuZGVyIGlvIGFuZCBpcyBub3cgZG9uZSwgZ3JlYXQKKwkJCSAqLworCQkJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkgeworCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCWdvdG8gZmlsbF9pdDsKKwkJCX0KKworcmVhZHBhZ2U6CisJCQkvKgorCQkJICogbmVlZCB0byByZWFkIGluIHRoZSBwYWdlCisJCQkgKi8KKwkJCWVycm9yID0gbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlKGluLCBwYWdlKTsKKworCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlpZiAoZXJyb3IgPT0gQU9QX1RSVU5DQVRFRF9QQUdFKQorCQkJCQlnb3RvIGZpbmRfcGFnZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorZmlsbF9pdDoKKwkJcGFnZXNbaV0gPSBwYWdlOwogCX0KIAotCWlmICghaSkgewotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQkJIGlmIChzaGFkb3dbaV0pCi0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHNoYWRvd1tpXSk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQorCWlmIChpKQorCQlyZXR1cm4gbW92ZV90b19waXBlKHBpcGUsIHBhZ2VzLCBpLCBvZmZzZXQsIGxlbiwgZmxhZ3MpOwogCi0JbWVtY3B5KHBhZ2VzLCBzaGFkb3csIGkgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwotCi0JLyoKLQkgKiBOb3cgd2Ugc3BsaWNlIHRoZW0gaW50byB0aGUgcGlwZS4uCi0JICovCi1zcGxpY2VfdGhlbToKLQlyZXR1cm4gbW92ZV90b19waXBlKHBpcGUsIHBhZ2VzLCBpLCBvZmZzZXQsIGxlbiwgZmxhZ3MpOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCkBAIC0zMTEsOSArMzQ3LDggQEAKICAqIEBmbGFnczoJc3BsaWNlIG1vZGlmaWVyIGZsYWdzCiAgKgogICogV2lsbCByZWFkIHBhZ2VzIGZyb20gZ2l2ZW4gZmlsZSBhbmQgZmlsbCB0aGVtIGludG8gYSBwaXBlLgotICoKICAqLwotc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3QgaW5vZGUgKnBpcGUsCitzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCQkJIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzc2l6ZV90IHNwbGljZWQ7CkBAIC0zMjEsNiArMzU2LDcgQEAKIAogCXJldCA9IDA7CiAJc3BsaWNlZCA9IDA7CisKIAl3aGlsZSAobGVuKSB7CiAJCXJldCA9IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluLCBwaXBlLCBsZW4sIGZsYWdzKTsKIApAQCAtMzYwLDEwICszOTYsMTAgQEAKIAlpbnQgbW9yZTsKIAogCS8qCi0JICogc3ViLW9wdGltYWwsIGJ1dCB3ZSBhcmUgbGltaXRlZCBieSB0aGUgcGlwZSAtPm1hcC4gd2UgZG9uJ3QKKwkgKiBTdWItb3B0aW1hbCwgYnV0IHdlIGFyZSBsaW1pdGVkIGJ5IHRoZSBwaXBlIC0+bWFwLiBXZSBkb24ndAogCSAqIG5lZWQgYSBrbWFwJ2VkIGJ1ZmZlciBoZXJlLCB3ZSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHdlCiAJICogaGF2ZSB0aGUgcGFnZSBwaW5uZWQgaWYgdGhlIHBpcGUgcGFnZSBvcmlnaW5hdGVzIGZyb20gdGhlCi0JICogcGFnZSBjYWNoZQorCSAqIHBhZ2UgY2FjaGUuCiAJICovCiAJcHRyID0gYnVmLT5vcHMtPm1hcChmaWxlLCBpbmZvLCBidWYpOwogCWlmIChJU19FUlIocHRyKSkKQEAgLTQxNCw3ICs0NTAsNyBAQAogCWludCByZXQ7CiAKIAkvKgotCSAqIGFmdGVyIHRoaXMsIHBhZ2Ugd2lsbCBiZSBsb2NrZWQgYW5kIHVubWFwcGVkCisJICogbWFrZSBzdXJlIHRoZSBkYXRhIGluIHRoaXMgYnVmZmVyIGlzIHVwdG9kYXRlCiAJICovCiAJc3JjID0gYnVmLT5vcHMtPm1hcChmaWxlLCBpbmZvLCBidWYpOwogCWlmIChJU19FUlIoc3JjKSkKQEAgLTQyNCw3ICs0NjAsNyBAQAogCW9mZnNldCA9IHNkLT5wb3MgJiB+UEFHRV9DQUNIRV9NQVNLOwogCiAJLyoKLQkgKiByZXVzZSBidWYgcGFnZSwgaWYgU1BMSUNFX0ZfTU9WRSBpcyBzZXQKKwkgKiBSZXVzZSBidWYgcGFnZSwgaWYgU1BMSUNFX0ZfTU9WRSBpcyBzZXQuCiAJICovCiAJaWYgKHNkLT5mbGFncyAmIFNQTElDRV9GX01PVkUpIHsKIAkJLyoKQEAgLTQzNCw2ICs0NzAsOSBAQAogCQlpZiAoYnVmLT5vcHMtPnN0ZWFsKGluZm8sIGJ1ZikpCiAJCQlnb3RvIGZpbmRfcGFnZTsKIAorCQkvKgorCQkgKiB0aGlzIHdpbGwgYWxzbyBzZXQgdGhlIHBhZ2UgbG9ja2VkCisJCSAqLwogCQlwYWdlID0gYnVmLT5wYWdlOwogCQlpZiAoYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgaW5kZXgsIGdmcF9tYXNrKSkKIAkJCWdvdG8gZmluZF9wYWdlOwpAQCAtNDQ1LDcgKzQ4NCw3IEBACiAJCXJldCA9IC1FTk9NRU07CiAJCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIGluZGV4LCBnZnBfbWFzayk7CiAJCWlmICghcGFnZSkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfbm9tZW07CiAKIAkJLyoKIAkJICogSWYgdGhlIHBhZ2UgaXMgdXB0b2RhdGUsIGl0IGlzIGFsc28gbG9ja2VkLiBJZiBpdCBpc24ndApAQCAtNDYyLDcgKzUwMSw3IEBACiAKIAkJCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewogCQkJCQkvKgotCQkJCQkgKiBwYWdlIGdvdCBpbnZhbGlkYXRlZCwgcmVwZWF0CisJCQkJCSAqIFBhZ2UgZ290IGludmFsaWRhdGVkLCByZXBlYXQuCiAJCQkJCSAqLwogCQkJCQlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsKIAkJCQkJCXVubG9ja19wYWdlKHBhZ2UpOwpAQCAtNTAxLDEyICs1NDAsMTQgQEAKIAl9IGVsc2UgaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKKwltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CiAJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZChtYXBwaW5nKTsKIG91dDoKIAlpZiAoIShidWYtPmZsYWdzICYgUElQRV9CVUZfRkxBR19TVE9MRU4pKSB7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJfQorb3V0X25vbWVtOgogCWJ1Zi0+b3BzLT51bm1hcChpbmZvLCBidWYpOwogCXJldHVybiByZXQ7CiB9CkBAIC01MTksMTEgKzU2MCwxMCBAQAogICoga2V5IGhlcmUgaXMgdGhlICdhY3Rvcicgd29ya2VyIHBhc3NlZCBpbiB0aGF0IGFjdHVhbGx5IG1vdmVzIHRoZSBkYXRhCiAgKiB0byB0aGUgd2FudGVkIGRlc3RpbmF0aW9uLiBTZWUgcGlwZV90b19maWxlL3BpcGVfdG9fc2VuZHBhZ2UgYWJvdmUuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IG1vdmVfZnJvbV9waXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpvdXQsCitzdGF0aWMgc3NpemVfdCBtb3ZlX2Zyb21fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LAogCQkJICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJICAgICAgc3BsaWNlX2FjdG9yICphY3RvcikKIHsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvOwogCWludCByZXQsIGRvX3dha2V1cCwgZXJyOwogCXN0cnVjdCBzcGxpY2VfZGVzYyBzZDsKIApAQCAtNTM1LDIyICs1NzUsMTkgQEAKIAlzZC5maWxlID0gb3V0OwogCXNkLnBvcyA9IG91dC0+Zl9wb3M7CiAKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJaWYgKHBpcGUtPmlub2RlKQorCQltdXRleF9sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKLQlpbmZvID0gaW5vZGUtPmlfcGlwZTsKIAlmb3IgKDs7KSB7Ci0JCWludCBidWZzID0gaW5mby0+bnJidWZzOwotCi0JCWlmIChidWZzKSB7Ci0JCQlpbnQgY3VyYnVmID0gaW5mby0+Y3VyYnVmOwotCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBpbmZvLT5idWZzICsgY3VyYnVmOworCQlpZiAocGlwZS0+bnJidWZzKSB7CisJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBwaXBlLT5jdXJidWY7CiAJCQlzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzID0gYnVmLT5vcHM7CiAKIAkJCXNkLmxlbiA9IGJ1Zi0+bGVuOwogCQkJaWYgKHNkLmxlbiA+IHNkLnRvdGFsX2xlbikKIAkJCQlzZC5sZW4gPSBzZC50b3RhbF9sZW47CiAKLQkJCWVyciA9IGFjdG9yKGluZm8sIGJ1ZiwgJnNkKTsKKwkJCWVyciA9IGFjdG9yKHBpcGUsIGJ1ZiwgJnNkKTsKIAkJCWlmIChlcnIpIHsKIAkJCQlpZiAoIXJldCAmJiBlcnIgIT0gLUVOT0RBVEEpCiAJCQkJCXJldCA9IGVycjsKQEAgLTU2MSwxMyArNTk4LDE0IEBACiAJCQlyZXQgKz0gc2QubGVuOwogCQkJYnVmLT5vZmZzZXQgKz0gc2QubGVuOwogCQkJYnVmLT5sZW4gLT0gc2QubGVuOworCiAJCQlpZiAoIWJ1Zi0+bGVuKSB7CiAJCQkJYnVmLT5vcHMgPSBOVUxMOwotCQkJCW9wcy0+cmVsZWFzZShpbmZvLCBidWYpOwotCQkJCWN1cmJ1ZiA9IChjdXJidWYgKyAxKSAmIChQSVBFX0JVRkZFUlMgLSAxKTsKLQkJCQlpbmZvLT5jdXJidWYgPSBjdXJidWY7Ci0JCQkJaW5mby0+bnJidWZzID0gLS1idWZzOwotCQkJCWRvX3dha2V1cCA9IDE7CisJCQkJb3BzLT5yZWxlYXNlKHBpcGUsIGJ1Zik7CisJCQkJcGlwZS0+Y3VyYnVmID0gKHBpcGUtPmN1cmJ1ZiArIDEpICYgKFBJUEVfQlVGRkVSUyAtIDEpOworCQkJCXBpcGUtPm5yYnVmcy0tOworCQkJCWlmIChwaXBlLT5pbm9kZSkKKwkJCQkJZG9fd2FrZXVwID0gMTsKIAkJCX0KIAogCQkJc2QucG9zICs9IHNkLmxlbjsKQEAgLTU3NiwxMSArNjE0LDExIEBACiAJCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoYnVmcykKKwkJaWYgKHBpcGUtPm5yYnVmcykKIAkJCWNvbnRpbnVlOwotCQlpZiAoIVBJUEVfV1JJVEVSUygqaW5vZGUpKQorCQlpZiAoIXBpcGUtPndyaXRlcnMpCiAJCQlicmVhazsKLQkJaWYgKCFQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+d2FpdGluZ193cml0ZXJzKSB7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQl9CkBAIC01OTgsMzEgKzYzNiwzNCBAQAogCQl9CiAKIAkJaWYgKGRvX3dha2V1cCkgewotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoUElQRV9XQUlUKCppbm9kZSkpOwotCQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLFNJR0lPLFBPTExfT1VUKTsKKwkJCXNtcF9tYigpOworCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBpcGUtPndhaXQpKQorCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZwaXBlLT53YWl0KTsKKwkJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAkJCWRvX3dha2V1cCA9IDA7CiAJCX0KIAotCQlwaXBlX3dhaXQoaW5vZGUpOworCQlwaXBlX3dhaXQocGlwZSk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJaWYgKHBpcGUtPmlub2RlKQorCQltdXRleF91bmxvY2soJnBpcGUtPmlub2RlLT5pX211dGV4KTsKIAogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQlzbXBfbWIoKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBpcGUtPndhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY193cml0ZXJzLCBTSUdJTywgUE9MTF9PVVQpOwogCX0KIAotCW11dGV4X2xvY2soJm91dC0+Zl9tYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKIAlvdXQtPmZfcG9zID0gc2QucG9zOwotCW11dGV4X3VubG9jaygmb3V0LT5mX21hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOwogCXJldHVybiByZXQ7CiAKIH0KIAogLyoqCiAgKiBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlIC0gc3BsaWNlIGRhdGEgZnJvbSBhIHBpcGUgdG8gYSBmaWxlCi0gKiBAaW5vZGU6CXBpcGUgaW5vZGUKKyAqIEBwaXBlOglwaXBlIGluZm8KICAqIEBvdXQ6CWZpbGUgdG8gd3JpdGUgdG8KICAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBzcGxpY2UKICAqIEBmbGFnczoJc3BsaWNlIG1vZGlmaWVyIGZsYWdzCkBAIC02MzEsMTQgKzY3MiwxNyBAQAogICogdGhlIGdpdmVuIHBpcGUgaW5vZGUgdG8gdGhlIGdpdmVuIGZpbGUuCiAgKgogICovCi1zc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCQkgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3NzaXplX3QKK2dlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IGZpbGUgKm91dCwKKwkJCSAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb3V0LT5mX21hcHBpbmc7Ci0Jc3NpemVfdCByZXQgPSBtb3ZlX2Zyb21fcGlwZShpbm9kZSwgb3V0LCBsZW4sIGZsYWdzLCBwaXBlX3RvX2ZpbGUpOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gbW92ZV9mcm9tX3BpcGUocGlwZSwgb3V0LCBsZW4sIGZsYWdzLCBwaXBlX3RvX2ZpbGUpOwogCiAJLyoKLQkgKiBpZiBmaWxlIG9yIGlub2RlIGlzIFNZTkMgYW5kIHdlIGFjdHVhbGx5IHdyb3RlIHNvbWUgZGF0YSwgc3luYyBpdAorCSAqIElmIGZpbGUgb3IgaW5vZGUgaXMgU1lOQyBhbmQgd2UgYWN0dWFsbHkgd3JvdGUgc29tZSBkYXRhLCBzeW5jIGl0LgogCSAqLwogCWlmICh1bmxpa2VseSgob3V0LT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKG1hcHBpbmctPmhvc3QpKQogCSAgICAmJiByZXQgPiAwKSB7CkBAIC02NDcsNyArNjkxLDcgQEAKIAogCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWVyciA9IGdlbmVyaWNfb3N5bmNfaW5vZGUobWFwcGluZy0+aG9zdCwgbWFwcGluZywKLQkJCQkJCU9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOworCQkJCQkgIE9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCQlpZiAoZXJyKQpAQCAtNjcwLDEwICs3MTQsMTAgQEAKICAqIGlzIGludm9sdmVkLgogICoKICAqLwotc3NpemVfdCBnZW5lcmljX3NwbGljZV9zZW5kcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqb3V0LAorc3NpemVfdCBnZW5lcmljX3NwbGljZV9zZW5kcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LAogCQkJCXNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlyZXR1cm4gbW92ZV9mcm9tX3BpcGUoaW5vZGUsIG91dCwgbGVuLCBmbGFncywgcGlwZV90b19zZW5kcGFnZSk7CisJcmV0dXJuIG1vdmVfZnJvbV9waXBlKHBpcGUsIG91dCwgbGVuLCBmbGFncywgcGlwZV90b19zZW5kcGFnZSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2UpOwpAQCAtNjgxLDE5ICs3MjUsMjAgQEAKIC8qCiAgKiBBdHRlbXB0IHRvIGluaXRpYXRlIGEgc3BsaWNlIGZyb20gcGlwZSB0byBmaWxlLgogICovCi1zdGF0aWMgbG9uZyBkb19zcGxpY2VfZnJvbShzdHJ1Y3QgaW5vZGUgKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCi0JCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgbG9uZyBkb19zcGxpY2VfZnJvbShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LAorCQkJICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWxvZmZfdCBwb3M7CiAJaW50IHJldDsKIAotCWlmICghb3V0LT5mX29wIHx8ICFvdXQtPmZfb3AtPnNwbGljZV93cml0ZSkKKwlpZiAodW5saWtlbHkoIW91dC0+Zl9vcCB8fCAhb3V0LT5mX29wLT5zcGxpY2Vfd3JpdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKG91dC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCWlmICh1bmxpa2VseSghKG91dC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSkKIAkJcmV0dXJuIC1FQkFERjsKIAogCXBvcyA9IG91dC0+Zl9wb3M7CisKIAlyZXQgPSByd192ZXJpZnlfYXJlYShXUklURSwgb3V0LCAmcG9zLCBsZW4pOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJcmV0dXJuIHJldDsKQEAgLTcwNCwxOSArNzQ5LDIwIEBACiAvKgogICogQXR0ZW1wdCB0byBpbml0aWF0ZSBhIHNwbGljZSBmcm9tIGEgZmlsZSB0byBhIHBpcGUuCiAgKi8KLXN0YXRpYyBsb25nIGRvX3NwbGljZV90byhzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBpbm9kZSAqcGlwZSwgc2l6ZV90IGxlbiwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgbG9uZyBkb19zcGxpY2VfdG8oc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlsb2ZmX3QgcG9zLCBpc2l6ZSwgbGVmdDsKIAlpbnQgcmV0OwogCi0JaWYgKCFpbi0+Zl9vcCB8fCAhaW4tPmZfb3AtPnNwbGljZV9yZWFkKQorCWlmICh1bmxpa2VseSghaW4tPmZfb3AgfHwgIWluLT5mX29wLT5zcGxpY2VfcmVhZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEoaW4tPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCWlmICh1bmxpa2VseSghKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkpCiAJCXJldHVybiAtRUJBREY7CiAKIAlwb3MgPSBpbi0+Zl9wb3M7CisKIAlyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgJnBvcywgbGVuKTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCXJldHVybiByZXQ7CkBAIC03MjYsMzIgKzc3MiwxNjggQEAKIAkJcmV0dXJuIDA7CiAJCiAJbGVmdCA9IGlzaXplIC0gaW4tPmZfcG9zOwotCWlmIChsZWZ0IDwgbGVuKQorCWlmICh1bmxpa2VseShsZWZ0IDwgbGVuKSkKIAkJbGVuID0gbGVmdDsKIAogCXJldHVybiBpbi0+Zl9vcC0+c3BsaWNlX3JlYWQoaW4sIHBpcGUsIGxlbiwgZmxhZ3MpOwogfQogCitsb25nIGRvX3NwbGljZV9kaXJlY3Qoc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3QgZmlsZSAqb3V0LCBzaXplX3QgbGVuLAorCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKKwlsb25nIHJldCwgYnl0ZXM7CisJdW1vZGVfdCBpX21vZGU7CisJaW50IGk7CisKKwkvKgorCSAqIFdlIHJlcXVpcmUgdGhlIGlucHV0IGJlaW5nIGEgcmVndWxhciBmaWxlLCBhcyB3ZSBkb24ndCB3YW50IHRvCisJICogcmFuZG9tbHkgZHJvcCBkYXRhIGZvciBlZyBzb2NrZXQgLT4gc29ja2V0IHNwbGljaW5nLiBVc2UgdGhlCisJICogcGlwZWQgc3BsaWNpbmcgZm9yIHRoYXQhCisJICovCisJaV9tb2RlID0gaW4tPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGU7CisJaWYgKHVubGlrZWx5KCFTX0lTUkVHKGlfbW9kZSkgJiYgIVNfSVNCTEsoaV9tb2RlKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBuZWl0aGVyIGluIG5vciBvdXQgaXMgYSBwaXBlLCBzZXR1cCBhbiBpbnRlcm5hbCBwaXBlIGF0dGFjaGVkIHRvCisJICogJ291dCcgYW5kIHRyYW5zZmVyIHRoZSB3YW50ZWQgZGF0YSBmcm9tICdpbicgdG8gJ291dCcgdGhyb3VnaCB0aGF0CisJICovCisJcGlwZSA9IGN1cnJlbnQtPnNwbGljZV9waXBlOworCWlmICh1bmxpa2VseSghcGlwZSkpIHsKKwkJcGlwZSA9IGFsbG9jX3BpcGVfaW5mbyhOVUxMKTsKKwkJaWYgKCFwaXBlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2ZSBhbiBpbW1lZGlhdGUgcmVhZGVyLCBidXQgd2UnbGwgcmVhZCB0aGUgc3R1ZmYKKwkJICogb3V0IG9mIHRoZSBwaXBlIHJpZ2h0IGFmdGVyIHRoZSBtb3ZlX3RvX3BpcGUoKS4gU28gc2V0CisJCSAqIFBJUEVfUkVBREVSUyBhcHByb3ByaWF0ZWx5LgorCQkgKi8KKwkJcGlwZS0+cmVhZGVycyA9IDE7CisKKwkJY3VycmVudC0+c3BsaWNlX3BpcGUgPSBwaXBlOworCX0KKworCS8qCisJICogRG8gdGhlIHNwbGljZS4KKwkgKi8KKwlyZXQgPSAwOworCWJ5dGVzID0gMDsKKworCXdoaWxlIChsZW4pIHsKKwkJc2l6ZV90IHJlYWRfbGVuLCBtYXhfcmVhZF9sZW47CisKKwkJLyoKKwkJICogRG8gYXQgbW9zdCBQSVBFX0JVRkZFUlMgcGFnZXMgd29ydGggb2YgdHJhbnNmZXI6CisJCSAqLworCQltYXhfcmVhZF9sZW4gPSBtaW4obGVuLCAoc2l6ZV90KShQSVBFX0JVRkZFUlMqUEFHRV9TSVpFKSk7CisKKwkJcmV0ID0gZG9fc3BsaWNlX3RvKGluLCBwaXBlLCBtYXhfcmVhZF9sZW4sIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQkJZ290byBvdXRfcmVsZWFzZTsKKworCQlyZWFkX2xlbiA9IHJldDsKKworCQkvKgorCQkgKiBOT1RFOiBub25ibG9ja2luZyBtb2RlIG9ubHkgYXBwbGllcyB0byB0aGUgaW5wdXQuIFdlCisJCSAqIG11c3Qgbm90IGRvIHRoZSBvdXRwdXQgaW4gbm9uYmxvY2tpbmcgbW9kZSBhcyB0aGVuIHdlCisJCSAqIGNvdWxkIGdldCBzdHVjayBkYXRhIGluIHRoZSBpbnRlcm5hbCBwaXBlOgorCQkgKi8KKwkJcmV0ID0gZG9fc3BsaWNlX2Zyb20ocGlwZSwgb3V0LCByZWFkX2xlbiwKKwkJCQkgICAgIGZsYWdzICYgflNQTElDRV9GX05PTkJMT0NLKTsKKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQkJZ290byBvdXRfcmVsZWFzZTsKKworCQlieXRlcyArPSByZXQ7CisJCWxlbiAtPSByZXQ7CisKKwkJLyoKKwkJICogSW4gbm9uYmxvY2tpbmcgbW9kZSwgaWYgd2UgZ290IGJhY2sgYSBzaG9ydCByZWFkIHRoZW4KKwkJICogdGhhdCB3YXMgZHVlIHRvIGVpdGhlciBhbiBJTyBlcnJvciBvciBkdWUgdG8gdGhlCisJCSAqIHBhZ2VjYWNoZSBlbnRyeSBub3QgYmVpbmcgdGhlcmUuIEluIHRoZSBJTyBlcnJvciBjYXNlCisJCSAqIHRoZSBfbmV4dF8gc3BsaWNlIGF0dGVtcHQgd2lsbCBwcm9kdWNlIGEgY2xlYW4gSU8gZXJyb3IKKwkJICogcmV0dXJuIHZhbHVlIChub3QgYSBzaG9ydCByZWFkKSwgc28gaW4gYm90aCBjYXNlcyBpdCdzCisJCSAqIGNvcnJlY3QgdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wIGhlcmU6CisJCSAqLworCQlpZiAoKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spICYmIChyZWFkX2xlbiA8IG1heF9yZWFkX2xlbikpCisJCQlicmVhazsKKwl9CisKKwlwaXBlLT5ucmJ1ZnMgPSBwaXBlLT5jdXJidWYgPSAwOworCisJcmV0dXJuIGJ5dGVzOworCitvdXRfcmVsZWFzZToKKwkvKgorCSAqIElmIHdlIGRpZCBhbiBpbmNvbXBsZXRlIHRyYW5zZmVyIHdlIG11c3QgcmVsZWFzZQorCSAqIHRoZSBwaXBlIGJ1ZmZlcnMgaW4gcXVlc3Rpb246CisJICovCisJZm9yIChpID0gMDsgaSA8IFBJUEVfQlVGRkVSUzsgaSsrKSB7CisJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIGk7CisKKwkJaWYgKGJ1Zi0+b3BzKSB7CisJCQlidWYtPm9wcy0+cmVsZWFzZShwaXBlLCBidWYpOworCQkJYnVmLT5vcHMgPSBOVUxMOworCQl9CisJfQorCXBpcGUtPm5yYnVmcyA9IHBpcGUtPmN1cmJ1ZiA9IDA7CisKKwkvKgorCSAqIElmIHdlIHRyYW5zZmVycmVkIHNvbWUgZGF0YSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXM6CisJICovCisJaWYgKGJ5dGVzID4gMCkKKwkJcmV0dXJuIGJ5dGVzOworCisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChkb19zcGxpY2VfZGlyZWN0KTsKKwogLyoKICAqIERldGVybWluZSB3aGVyZSB0byBzcGxpY2UgdG8vZnJvbS4KICAqLwotc3RhdGljIGxvbmcgZG9fc3BsaWNlKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IGZpbGUgKm91dCwgc2l6ZV90IGxlbiwKLQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQorc3RhdGljIGxvbmcgZG9fc3BsaWNlKHN0cnVjdCBmaWxlICppbiwgbG9mZl90IF9fdXNlciAqb2ZmX2luLAorCQkgICAgICBzdHJ1Y3QgZmlsZSAqb3V0LCBsb2ZmX3QgX191c2VyICpvZmZfb3V0LAorCQkgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGlub2RlICpwaXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAKLQlwaXBlID0gaW4tPmZfZGVudHJ5LT5kX2lub2RlOwotCWlmIChwaXBlLT5pX3BpcGUpCisJcGlwZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCWlmIChwaXBlKSB7CisJCWlmIChvZmZfaW4pCisJCQlyZXR1cm4gLUVTUElQRTsKKwkJaWYgKG9mZl9vdXQpIHsKKwkJCWlmIChvdXQtPmZfb3AtPmxsc2VlayA9PSBub19sbHNlZWspCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJm91dC0+Zl9wb3MsIG9mZl9vdXQsCisJCQkJCSAgIHNpemVvZihsb2ZmX3QpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCiAJCXJldHVybiBkb19zcGxpY2VfZnJvbShwaXBlLCBvdXQsIGxlbiwgZmxhZ3MpOworCX0KIAotCXBpcGUgPSBvdXQtPmZfZGVudHJ5LT5kX2lub2RlOwotCWlmIChwaXBlLT5pX3BpcGUpCisJcGlwZSA9IG91dC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcGlwZTsKKwlpZiAocGlwZSkgeworCQlpZiAob2ZmX291dCkKKwkJCXJldHVybiAtRVNQSVBFOworCQlpZiAob2ZmX2luKSB7CisJCQlpZiAoaW4tPmZfb3AtPmxsc2VlayA9PSBub19sbHNlZWspCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmluLT5mX3Bvcywgb2ZmX2luLCBzaXplb2YobG9mZl90KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwogCQlyZXR1cm4gZG9fc3BsaWNlX3RvKGluLCBwaXBlLCBsZW4sIGZsYWdzKTsKKwl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQorYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkX2luLCBsb2ZmX3QgX191c2VyICpvZmZfaW4sCisJCQkgICBpbnQgZmRfb3V0LCBsb2ZmX3QgX191c2VyICpvZmZfb3V0LAorCQkJICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWxvbmcgZXJyb3I7CiAJc3RydWN0IGZpbGUgKmluLCAqb3V0OwpAQCAtNzYxLDEzICs5NDMsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAllcnJvciA9IC1FQkFERjsKLQlpbiA9IGZnZXRfbGlnaHQoZmRpbiwgJmZwdXRfaW4pOworCWluID0gZmdldF9saWdodChmZF9pbiwgJmZwdXRfaW4pOwogCWlmIChpbikgewogCQlpZiAoaW4tPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCW91dCA9IGZnZXRfbGlnaHQoZmRvdXQsICZmcHV0X291dCk7CisJCQlvdXQgPSBmZ2V0X2xpZ2h0KGZkX291dCwgJmZwdXRfb3V0KTsKIAkJCWlmIChvdXQpIHsKIAkJCQlpZiAob3V0LT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJCQkJZXJyb3IgPSBkb19zcGxpY2UoaW4sIG91dCwgbGVuLCBmbGFncyk7CisJCQkJCWVycm9yID0gZG9fc3BsaWNlKGluLCBvZmZfaW4sCisJCQkJCQkJICBvdXQsIG9mZl9vdXQsCisJCQkJCQkJICBsZW4sIGZsYWdzKTsKIAkJCQlmcHV0X2xpZ2h0KG91dCwgZnB1dF9vdXQpOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggODYxNjAwNi4uYWFiNWZmZSAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtNjEsNyArNjEsNyBAQAogICogd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYSBjcmFzaC4KICAqLwogYXNtbGlua2FnZSBsb25nIHN5c19zeW5jX2ZpbGVfcmFuZ2UoaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbmJ5dGVzLAotCQkJCQlpbnQgZmxhZ3MpCisJCQkJCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBmaWxlICpmaWxlOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgKiBgZW5kYnl0ZScgaXMgaW5jbHVzaXZlCiAgKi8KIGludCBkb19zeW5jX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBlbmRieXRlLAotCQkJaW50IGZsYWdzKQorCQkJdW5zaWduZWQgaW50IGZsYWdzKQogewogCWludCByZXQ7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggNmNiYmQxNi4uNGQxOTFlZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtODcwLDEyICs4NzAsMTQgQEAKIAlwZ29mZl90ICAgICAgICAgICAgICAgICBlbmRfaW5kZXgsIGxhc3RfaW5kZXgsIHRsYXN0OwogCXNzaXplX3QJCQlzaXplLCBsZW47CiAJaW50CQkJZmxhZ3MsIGVyciwgaW9tYXBfdmFsaWQgPSAwLCB1cHRvZGF0ZSA9IDE7Ci0JaW50CQkJcGFnZV9kaXJ0eSwgY291bnQgPSAwLCB0cnlsb2NrX2ZsYWcgPSAwOworCWludAkJCXBhZ2VfZGlydHksIGNvdW50ID0gMDsKKwlpbnQJCQl0cnlsb2NrID0gMDsKIAlpbnQJCQlhbGxfYmggPSB1bm1hcHBlZDsKIAotCS8qIHdhaXQgZm9yIG90aGVyIElPIHRocmVhZHM/ICovCi0JaWYgKHN0YXJ0aW8gJiYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSAmJiB3YmMtPm5vbmJsb2NraW5nKSkKLQkJdHJ5bG9ja19mbGFnIHw9IEJNQVBJX1RSWUxPQ0s7CisJaWYgKHN0YXJ0aW8pIHsKKwkJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSAmJiB3YmMtPm5vbmJsb2NraW5nKQorCQkJdHJ5bG9jayB8PSBCTUFQSV9UUllMT0NLOworCX0KIAogCS8qIElzIHRoaXMgcGFnZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZT8gKi8KIAlvZmZzZXQgPSBpX3NpemVfcmVhZChpbm9kZSk7CkBAIC05NTYsMTUgKzk1OCwxMyBAQAogCiAJCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkpIHsKIAkJCQl0eXBlID0gSU9NQVBfVU5XUklUVEVOOwotCQkJCWZsYWdzID0gQk1BUElfV1JJVEV8Qk1BUElfSUdOU1RBVEU7CisJCQkJZmxhZ3MgPSBCTUFQSV9XUklURSB8IEJNQVBJX0lHTlNUQVRFOwogCQkJfSBlbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKSB7CiAJCQkJdHlwZSA9IElPTUFQX0RFTEFZOwotCQkJCWZsYWdzID0gQk1BUElfQUxMT0NBVEU7Ci0JCQkJaWYgKCFzdGFydGlvKQotCQkJCQlmbGFncyB8PSB0cnlsb2NrX2ZsYWc7CisJCQkJZmxhZ3MgPSBCTUFQSV9BTExPQ0FURSB8IHRyeWxvY2s7CiAJCQl9IGVsc2UgewogCQkJCXR5cGUgPSBJT01BUF9ORVc7Ci0JCQkJZmxhZ3MgPSBCTUFQSV9XUklURXxCTUFQSV9NTUFQOworCQkJCWZsYWdzID0gQk1BUElfV1JJVEUgfCBCTUFQSV9NTUFQOwogCQkJfQogCiAJCQlpZiAoIWlvbWFwX3ZhbGlkKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDlmYjAzMTIuLjI2ZmVkMDcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0xODIsNyArMTgyLDcgQEAKIHsKIAlhX2xpc3RfdAkqYWVudHJ5OwogCi0JYWVudHJ5ID0ga21hbGxvYyhzaXplb2YoYV9saXN0X3QpLCBHRlBfQVRPTUlDICYgfl9fR0ZQX0hJR0gpOworCWFlbnRyeSA9IGttYWxsb2Moc2l6ZW9mKGFfbGlzdF90KSwgR0ZQX05PV0FJVCk7CiAJaWYgKGxpa2VseShhZW50cnkpKSB7CiAJCXNwaW5fbG9jaygmYXNfbG9jayk7CiAJCWFlbnRyeS0+bmV4dCA9IGFzX2ZyZWVfaGVhZDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwppbmRleCBhZTRjNDc1Li4yNjk3MjFhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCkBAIC0yNTIsNyArMjUyLDcgQEAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9zcGxpY2VfcmVhZCgKIAlzdHJ1Y3QgZmlsZQkJKmluZmlscCwKLQlzdHJ1Y3QgaW5vZGUJCSpwaXBlLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCiAJc2l6ZV90CQkJbGVuLAogCXVuc2lnbmVkIGludAkJZmxhZ3MpCiB7CkBAIC0yNjYsNyArMjY2LDcgQEAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9zcGxpY2VfcmVhZF9pbnZpcygKIAlzdHJ1Y3QgZmlsZQkJKmluZmlscCwKLQlzdHJ1Y3QgaW5vZGUJCSpwaXBlLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCiAJc2l6ZV90CQkJbGVuLAogCXVuc2lnbmVkIGludAkJZmxhZ3MpCiB7CkBAIC0yNzksNyArMjc5LDcgQEAKIAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX3NwbGljZV93cml0ZSgKLQlzdHJ1Y3QgaW5vZGUJCSpwaXBlLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCiAJc3RydWN0IGZpbGUJCSpvdXRmaWxwLAogCXNpemVfdAkJCWxlbiwKIAl1bnNpZ25lZCBpbnQJCWZsYWdzKQpAQCAtMjkzLDcgKzI5Myw3IEBACiAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9zcGxpY2Vfd3JpdGVfaW52aXMoCi0Jc3RydWN0IGlub2RlCQkqcGlwZSwKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAogCXN0cnVjdCBmaWxlCQkqb3V0ZmlscCwKIAlzaXplX3QJCQlsZW4sCiAJdW5zaWduZWQgaW50CQlmbGFncykKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCAxNDkyMzczLi4yZTJlMjc1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC02NzMsOCArNjczLDcgQEAKIAlpZiAoaWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7CiAJCXZhdHRyLnZhX21hc2sgfD0gWEZTX0FUX0FUSU1FOwogCQl2YXR0ci52YV9hdGltZSA9IGF0dHItPmlhX2F0aW1lOwotCQlpZiAoaWFfdmFsaWQgJiBBVFRSX0FUSU1FX1NFVCkKLQkJCWlub2RlLT5pX2F0aW1lID0gYXR0ci0+aWFfYXRpbWU7CisJCWlub2RlLT5pX2F0aW1lID0gYXR0ci0+aWFfYXRpbWU7CiAJfQogCWlmIChpYV92YWxpZCAmIEFUVFJfTVRJTUUpIHsKIAkJdmF0dHIudmFfbWFzayB8PSBYRlNfQVRfTVRJTUU7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDkwY2QzMTQuLjc0YTUyOTM3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwpAQCAtMzM4LDcgKzMzOCw3IEBACiB4ZnNfc3BsaWNlX3JlYWQoCiAJYmh2X2Rlc2NfdAkJKmJkcCwKIAlzdHJ1Y3QgZmlsZQkJKmluZmlscCwKLQlzdHJ1Y3QgaW5vZGUJCSpwaXBlLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCiAJc2l6ZV90CQkJY291bnQsCiAJaW50CQkJZmxhZ3MsCiAJaW50CQkJaW9mbGFncywKQEAgLTM4MCw3ICszODAsNyBAQAogc3NpemVfdAogeGZzX3NwbGljZV93cml0ZSgKIAliaHZfZGVzY190CQkqYmRwLAotCXN0cnVjdCBpbm9kZQkJKnBpcGUsCisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKIAlzdHJ1Y3QgZmlsZQkJKm91dGZpbHAsCiAJc2l6ZV90CQkJY291bnQsCiAJaW50CQkJZmxhZ3MsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCmluZGV4IGVhYTU2NTkuLjU1YzY4OWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCkBAIC05NCw5ICs5NCw5IEBACiAJCQkJbG9mZl90ICosIGludCwgc2l6ZV90LCByZWFkX2FjdG9yX3QsCiAJCQkJdm9pZCAqLCBzdHJ1Y3QgY3JlZCAqKTsKIGV4dGVybiBzc2l6ZV90IHhmc19zcGxpY2VfcmVhZChzdHJ1Y3QgYmh2X2Rlc2MgKiwgc3RydWN0IGZpbGUgKiwKLQkJCQlzdHJ1Y3QgaW5vZGUgKiwgc2l6ZV90LCBpbnQsIGludCwKKwkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgaW50LCBpbnQsCiAJCQkJc3RydWN0IGNyZWQgKik7Ci1leHRlcm4gc3NpemVfdCB4ZnNfc3BsaWNlX3dyaXRlKHN0cnVjdCBiaHZfZGVzYyAqLCBzdHJ1Y3QgaW5vZGUgKiwKK2V4dGVybiBzc2l6ZV90IHhmc19zcGxpY2Vfd3JpdGUoc3RydWN0IGJodl9kZXNjICosIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwKIAkJCQlzdHJ1Y3QgZmlsZSAqLCBzaXplX3QsIGludCwgaW50LAogCQkJCXN0cnVjdCBjcmVkICopOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAppbmRleCA2ZjFjNzlhLi44OGIwOWYxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKQEAgLTE3NCw5ICsxNzQsOSBAQAogCQkJCWxvZmZfdCAqLCBpbnQsIHNpemVfdCwgcmVhZF9hY3Rvcl90LAogCQkJCXZvaWQgKiwgc3RydWN0IGNyZWQgKik7CiB0eXBlZGVmIHNzaXplX3QgKCp2b3Bfc3BsaWNlX3JlYWRfdCkoYmh2X2Rlc2NfdCAqLCBzdHJ1Y3QgZmlsZSAqLAotCQkJCXN0cnVjdCBpbm9kZSAqLCBzaXplX3QsIGludCwgaW50LAorCQkJCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc2l6ZV90LCBpbnQsIGludCwKIAkJCQlzdHJ1Y3QgY3JlZCAqKTsKLXR5cGVkZWYgc3NpemVfdCAoKnZvcF9zcGxpY2Vfd3JpdGVfdCkoYmh2X2Rlc2NfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwKK3R5cGVkZWYgc3NpemVfdCAoKnZvcF9zcGxpY2Vfd3JpdGVfdCkoYmh2X2Rlc2NfdCAqLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosCiAJCQkJc3RydWN0IGZpbGUgKiwgc2l6ZV90LCBpbnQsIGludCwKIAkJCQlzdHJ1Y3QgY3JlZCAqKTsKIHR5cGVkZWYgaW50CSgqdm9wX2lvY3RsX3QpKGJodl9kZXNjX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCA0ZWViODU2Li5kZWRkYmQwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTE1OCw5ICsxNTgsMTAgQEAKICAJICovCiAJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CiAJbmV3aW5vID0gYmUzMl90b19jcHUoYWdpLT5hZ2lfbmV3aW5vKTsKLQlpZihsaWtlbHkobmV3aW5vICE9IE5VTExBR0lOTykpIHsKLQkJYXJncy5hZ2JubyA9IFhGU19BR0lOT19UT19BR0JOTyhhcmdzLm1wLCBuZXdpbm8pICsKLQkJCQlYRlNfSUFMTE9DX0JMT0NLUyhhcmdzLm1wKTsKKwlhcmdzLmFnYm5vID0gWEZTX0FHSU5PX1RPX0FHQk5PKGFyZ3MubXAsIG5ld2lubykgKworCQkJWEZTX0lBTExPQ19CTE9DS1MoYXJncy5tcCk7CisJaWYgKGxpa2VseShuZXdpbm8gIT0gTlVMTEFHSU5PICYmCisJCSAgKGFyZ3MuYWdibm8gPCBiZTMyX3RvX2NwdShhZ2ktPmFnaV9sZW5ndGgpKSkpIHsKIAkJYXJncy5mc2JubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MubXAsCiAJCQkJYmUzMl90b19jcHUoYWdpLT5hZ2lfc2Vxbm8pLCBhcmdzLmFnYm5vKTsKIAkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9USElTX0JOTzsKQEAgLTE4Miw4ICsxODMsOCBAQAogCQkgKiBTZXQgdGhlIGFsaWdubWVudCBmb3IgdGhlIGFsbG9jYXRpb24uCiAJCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uIHRoZW4gYWxpZ24gYXQgc3RyaXBlIHVuaXQKIAkJICogYm91bmRhcnkuCi0JCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jayAKLQkJICogdGhlbiB3ZSdyZSBkb2luZyBJL08gZm9yIGlub2RlcyBpbiBmaWxlc3lzdGVtIGJsb2NrIHNpemUgCisJCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jaworCQkgKiB0aGVuIHdlJ3JlIGRvaW5nIEkvTyBmb3IgaW5vZGVzIGluIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZQogCQkgKiBwaWVjZXMsIHNvIGRvbid0IG5lZWQgYWxpZ25tZW50IGFueXdheS4KIAkJICovCiAJCWlzYWxpZ25lZCA9IDA7CkBAIC0xOTIsNyArMTkzLDcgQEAKIAkJCWFyZ3MuYWxpZ25tZW50ID0gYXJncy5tcC0+bV9kYWxpZ247CiAJCQlpc2FsaWduZWQgPSAxOwogCQl9IGVsc2UgaWYgKFhGU19TQl9WRVJTSU9OX0hBU0FMSUdOKCZhcmdzLm1wLT5tX3NiKSAmJgotCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49IAorCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49CiAJCQkgICBYRlNfQl9UT19GU0JUKGFyZ3MubXAsCiAJCQkgIAlYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKGFyZ3MubXApKSkKIAkJCQlhcmdzLmFsaWdubWVudCA9IGFyZ3MubXAtPm1fc2Iuc2JfaW5vYWxpZ25tdDsKQEAgLTIyMCw3ICsyMjEsNyBAQAogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9Ci0gCisKIAkvKgogCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uLCB0aGVuIHRyeSBhZ2FpbiB3aXRoIGNsdXN0ZXIKIAkgKiBhbGlnbm1lbnQuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IGJiMzMxMTMuLmI1Mzg1NDMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC00MjEsNyArNDIxLDEwIEBACiAJCQlpcC0+aV9jaGFzaCA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX2lwID0gaXA7CiAJCQljaGxuZXctPmNobF9ibGtubyA9IGlwLT5pX2Jsa25vOworCQkJaWYgKGNoLT5jaF9saXN0KQorCQkJCWNoLT5jaF9saXN0LT5jaGxfcHJldiA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX25leHQgPSBjaC0+Y2hfbGlzdDsKKwkJCWNobG5ldy0+Y2hsX3ByZXYgPSBOVUxMOwogCQkJY2gtPmNoX2xpc3QgPSBjaGxuZXc7CiAJCQljaGxuZXcgPSBOVUxMOwogCQl9CkBAIC03MjMsMjMgKzcyNiwxNSBAQAogCQlBU1NFUlQoaXAtPmlfY25leHQgPT0gaXAgJiYgaXAtPmlfY3ByZXYgPT0gaXApOwogCQlBU1NFUlQoaXAtPmlfY2hhc2ggIT0gTlVMTCk7CiAJCWNobT1OVUxMOwotCQlmb3IgKGNobCA9IGNoLT5jaF9saXN0OyBjaGwgIT0gTlVMTDsgY2hsID0gY2hsLT5jaGxfbmV4dCkgewotCQkJaWYgKGNobC0+Y2hsX2Jsa25vID09IGlwLT5pX2Jsa25vKSB7Ci0JCQkJaWYgKGNobSA9PSBOVUxMKSB7Ci0JCQkJCS8qIGZpcnN0IGl0ZW0gb24gdGhlIGxpc3QgKi8KLQkJCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNobS0+Y2hsX25leHQgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0KLQkJCQlrbWVtX3pvbmVfZnJlZSh4ZnNfY2hhc2hsaXN0X3pvbmUsIGNobCk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCUFTU0VSVChjaGwtPmNobF9pcCAhPSBpcCk7Ci0JCQkJY2htID0gY2hsOwotCQkJfQotCQl9Ci0JCUFTU0VSVF9BTFdBWVMoY2hsICE9IE5VTEwpOwotICAgICAgIH0gZWxzZSB7CisJCWNobCA9IGlwLT5pX2NoYXNoOworCQlpZiAoY2hsLT5jaGxfcHJldikKKwkJCWNobC0+Y2hsX3ByZXYtPmNobF9uZXh0ID0gY2hsLT5jaGxfbmV4dDsKKwkJZWxzZQorCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OworCQlpZiAoY2hsLT5jaGxfbmV4dCkKKwkJCWNobC0+Y2hsX25leHQtPmNobF9wcmV2ID0gY2hsLT5jaGxfcHJldjsKKwkJa21lbV96b25lX2ZyZWUoeGZzX2NoYXNobGlzdF96b25lLCBjaGwpOworCX0gZWxzZSB7CiAJCS8qIGRlbGV0ZSBvbmUgaW5vZGUgZnJvbSBhIG5vbi1lbXB0eSBsaXN0ICovCiAJCWlxID0gaXAtPmlfY25leHQ7CiAJCWlxLT5pX2NwcmV2ID0gaXAtPmlfY3ByZXY7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggNDgxNDZiZC4uOTRiNjBkZDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTI3MzIsMTYgKzI3MzIsMjkgQEAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA+IDApOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlwLT5pX3BpbmNvdW50KSkgewotCQl2bm9kZV90CSp2cCA9IFhGU19JVE9WX05VTEwoaXApOworCQkvKgorCQkgKiBJZiB0aGUgaW5vZGUgaXMgY3VycmVudGx5IGJlaW5nIHJlY2xhaW1lZCwgdGhlCisJCSAqIGxpbnV4IGlub2RlIF9hbmRfIHRoZSB4ZnMgdm5vZGUgbWF5IGhhdmUgYmVlbgorCQkgKiBmcmVlZCBzbyB3ZSBjYW5ub3QgcmVmZXJlbmNlIGVpdGhlciBvZiB0aGVtIHNhZmVseS4KKwkJICogSGVuY2Ugd2Ugc2hvdWxkIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgdG8gdGhlbQorCQkgKiBpZiB0aGUgeGZzIGlub2RlIGlzIGN1cnJlbnRseSBpbiB0aGUgcmVjbGFpbQorCQkgKiBwYXRoLgorCQkgKgorCQkgKiBIb3dldmVyLCB3ZSBzdGlsbCBuZWVkIHRvIGlzc3VlIHRoZSB1bnBpbiB3YWtldXAKKwkJICogY2FsbCBhcyB0aGUgaW5vZGUgcmVjbGFpbSBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvcgorCQkgKiB0aGUgaW5vZGUgdG8gYmVjb21lIHVucGlubmVkLgorCQkgKi8KKwkJaWYgKCEoaXAtPmlfZmxhZ3MgJiAoWEZTX0lSRUNMQUlNfFhGU19JUkVDTEFJTUFCTEUpKSkgeworCQkJdm5vZGVfdAkqdnAgPSBYRlNfSVRPVl9OVUxMKGlwKTsKIAotCQkvKiBtYWtlIHN5bmMgY29tZSBiYWNrIGFuZCBmbHVzaCB0aGlzIGlub2RlICovCi0JCWlmICh2cCkgewotCQkJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwkJCS8qIG1ha2Ugc3luYyBjb21lIGJhY2sgYW5kIGZsdXNoIHRoaXMgaW5vZGUgKi8KKwkJCWlmICh2cCkgeworCQkJCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKLQkJCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQotCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpCisJCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQl9CiAJCX0KLQogCQl3YWtlX3VwKCZpcC0+aV9pcGluX3dhaXQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAzOWVmOWMzLi4zYjU0NGRiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0xODksNiArMTg5LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2NoYXNobGlzdCB7CiAJc3RydWN0IHhmc19jaGFzaGxpc3QJKmNobF9uZXh0OworCXN0cnVjdCB4ZnNfY2hhc2hsaXN0CSpjaGxfcHJldjsKIAlzdHJ1Y3QgeGZzX2lub2RlCSpjaGxfaXA7CiAJeGZzX2RhZGRyX3QJCWNobF9ibGtubzsJLyogc3RhcnRpbmcgYmxvY2sgbnVtYmVyIG9mCiAJCQkJCQkgKiB0aGUgY2x1c3RlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDA0OWZhYmIuLmMwYjFjMjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogCSAgICAoc2JwLT5zYl9ibG9ja2xvZyAtIHNicC0+c2JfaW5vZGVsb2cgIT0gc2JwLT5zYl9pbm9wYmxvZykJfHwKIAkgICAgKHNicC0+c2JfcmV4dHNpemUgKiBzYnAtPnNiX2Jsb2Nrc2l6ZSA+IFhGU19NQVhfUlRFWFRTSVpFKQl8fAogCSAgICAoc2JwLT5zYl9yZXh0c2l6ZSAqIHNicC0+c2JfYmxvY2tzaXplIDwgWEZTX01JTl9SVEVYVFNJWkUpCXx8Ci0JICAgIChzYnAtPnNiX2ltYXhfcGN0ID4gMTAwIHx8IHNicC0+c2JfaW1heF9wY3QgPCAxKSkpIHsKKwkgICAgKHNicC0+c2JfaW1heF9wY3QgPiAxMDAgLyogemVybyBzYl9pbWF4X3BjdCBpcyB2YWxpZCAqLykpKSB7CiAJCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLCAiU0Igc2FuaXR5IGNoZWNrIDEgZmFpbGVkIik7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q0MjU4Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggMTI4IE5vZGVzIC0gTWFydmVsICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTcKLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKaW5kZXggMjMzOWI3Ni4uMWFkZmQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2hhcmR3YXJlLmgKQEAgLTUzLDE2ICs1MywxMiBAQAogI2RlZmluZSBTQ1JFRU5fRU5ECQkweGRmYzAwMDAwCiAjZGVmaW5lIFNDUkVFTl9CQVNFCQkweGRmODAwMDAwCiAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAotCiAjZGVmaW5lIFZJRENfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZTA0MDAwMDAKICNkZWZpbmUgSU9NRF9CQVNFCQlJT01FTSgweGUwMjAwMDAwKQogI2RlZmluZSBJT0NfQkFTRQkJSU9NRU0oMHhlMDIwMDAwMCkKICNkZWZpbmUgRkxPUFBZRE1BX0JBU0UJCUlPTUVNKDB4ZTAwMmEwMDApCiAjZGVmaW5lIFBDSU9fQkFTRQkJSU9NRU0oMHhlMDAxMDAwMCkKIAotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4MDAwMDAwMDAJLyogUk9NICovCi0KICNkZWZpbmUgdmlkY193cml0ZWwodmFsKQlfX3Jhd193cml0ZWwodmFsLCBWSURDX0JBU0UpCiAKIC8qIGluL291dCBiaWFzIGZvciB0aGUgSVNBIHNsb3QgcmVnaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmgKaW5kZXggMzRmNDBhNi4uMzE3ODE0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9tZW1vcnkuaApAQCAtMjYsNCArMjYsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMKaW5kZXggZjYxY2FkYS4uOTIxM2JmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZGVidWctbWFjcm8uUwpAQCAtMTgsNCArMTgsNCBAQAogCiAjZGVmaW5lIFVBUlRfU0hJRlQJMgogI2RlZmluZSBGTE9XX0NPTlRST0wKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmgKaW5kZXggNGU0MWMyMy4uM2NlODY0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaGFyZHdhcmUuaApAQCAtNTcsOSArNTcsNiBAQAogLyoKICAqIFJBTSBkZWZpbml0aW9ucwogICovCi0jZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg0MDAwMDAwMAotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCi0KICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGZmMDAwMDAwCS8qIElSUV9TVEFUICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKaW5kZXggMDJmMTQ0NS4uYzdjNTAwZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9tZW1vcnkuaApAQCAtMjgsNCArMjgsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCkKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBTUkFNCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCmluZGV4IDY2YjE5YzcuLmFlNWI3NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdW5jb21wcmVzcy5oCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAKLSNkZWZpbmUgU0VSSUFMX0JBU0UJKCh1bnNpZ25lZCBjaGFyICopMHhmZTAwMGJlMCkKKyNkZWZpbmUgU0VSSUFMX0JBU0UJKCh1bnNpZ25lZCBjaGFyICopMHhmMDAwMGJlMCkKIAogLyoKICAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCmluZGV4IDJlZjIyMDAuLmVjNTFmZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKQEAgLTQ4LDkgKzQ4LDYgQEAKICNkZWZpbmUgUENJQ0ZHMF9TSVpFCQkweDAxMDAwMDAwCiAjZGVmaW5lIFBDSUNGRzBfQkFTRQkJMHhmYTAwMDAwMAogCi0jZGVmaW5lIEZMVVNIX1NJWkUJCTB4MDAxMDAwMDAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmOTAwMDAwMAotCiAjZGVmaW5lIFBDSU1FTV9TSVpFCQkweDAxMDAwMDAwCiAjZGVmaW5lIFBDSU1FTV9CQVNFCQkweGYwMDAwMDAwCiAKQEAgLTYxLDkgKzU4LDYgQEAKICNkZWZpbmUgUENJTUVNX1NJWkUJCTB4ODAwMDAwMDAKICNkZWZpbmUgUENJTUVNX0JBU0UJCTB4ODAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9TSVpFCQkweDAwMTAwMDAwCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4N2UwMDAwMDAKLQogI2RlZmluZSBXRkxVU0hfU0laRQkJMHgwMTAwMDAwMAogI2RlZmluZSBXRkxVU0hfQkFTRQkJMHg3ZDAwMDAwMAogCkBAIC05NCw3ICs4OCw2IEBACiAjZGVmaW5lIFhCVVNfU1dJVENIX0oxN18xMQkoKCpYQlVTX1NXSVRDSCkgJiAoMSA8PCA1KSkKICNkZWZpbmUgWEJVU19TV0lUQ0hfSjE3XzkJKCgqWEJVU19TV0lUQ0gpICYgKDEgPDwgNikpCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDUwMDAwMDAwCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJKEFSTUNTUl9CQVNFICsgMHgxMDgpCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKaW5kZXggMDllMzM1Yy4uOTkxODFmZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaApAQCAtNDksMTIgKzQ5LDIyIEBACiAjZGVmaW5lIFRBU0tfU0laRQkJVUwoMHhiZjAwMDAwMCkKICNkZWZpbmUgUEFHRV9PRkZTRVQJCVVMKDB4YzAwMDAwMDApCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhLgorICovCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZjkwMDAwMDAKKwogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9DTzI4NSkKIAogLyogVGFzayBzaXplIGFuZCBwYWdlIG9mZnNldCBhdCAxLjVHQiAqLwogI2RlZmluZSBUQVNLX1NJWkUJCVVMKDB4NWYwMDAwMDApCiAjZGVmaW5lIFBBR0VfT0ZGU0VUCQlVTCgweDYwMDAwMDAwKQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYS4KKyAqLworI2RlZmluZSBGTFVTSF9CQVNFCQkweDdlMDAwMDAwCisKICNlbHNlCiAKICNlcnJvciAiVW5kZWZpbmVkIGZvb3RicmlkZ2UgYXJjaGl0ZWN0dXJlIgpAQCAtNzIsNCArODIsNiBAQAogICovCiAjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRSAoKFRBU0tfU0laRSArIDB4MDEwMDAwMDApIC8gMykKIAorI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NTAwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2RlYnVnLW1hY3JvLlMKaW5kZXggZWI5OWZkNi4uMmIyNWU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvZGVidWctbWFjcm8uUwpAQCAtMTcsNiArMTcsOSBAQAogCQl0c3QJXHJ4LCAjMQkJCQlAIG1tdSBlbmFibGVkPwogCQlsZHJlcQlccngsID1JWFAyM1hYX1BFUklQSEVSQUxfUEhZUyAJQCBwaHlzaWNhbAogCQlsZHJuZQlccngsID1JWFAyM1hYX1BFUklQSEVSQUxfVklSVAlAIHZpcnR1YWwKKyNpZmRlZiBfX0FSTUVCX18KKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMDAwMworI2VuZGlmCiAJCS5lbmRtCiAKICNkZWZpbmUgVUFSVF9TSElGVAkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaGFyZHdhcmUuaAppbmRleCBiNzU1MDc5Li4yYWI0M2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2hhcmR3YXJlLmgKQEAgLTUyLDkgKzUyLDYgQEAKICNkZWZpbmUgSVNBX1NJWkUJCTB4MjAwMDAwMDAKICNkZWZpbmUgSVNBX0JBU0UJCTB4ZTAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NDAwMDAwMDAJLyogUk9NICovCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKLQogI2RlZmluZSBQQ0lPX0JBU0UJCUlPX0JBU0UKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oCmluZGV4IDllNTBhMTcuLjQwMmRmNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL21lbW9yeS5oCkBAIC0yMCw0ICsyMCwxMCBAQAogI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBST00KKyAqLworI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NDAwMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L21lbW9yeS5oCmluZGV4IGM5MmJjYjguLjlmMWE1OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaApAQCAtMzEsOCArMzEsNiBAQAogCiAjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQogCi0jZGVmaW5lIE5PREVTX1NISUZUCTQJLyogVXAgdG8gMTYgbm9kZXMgKi8KLQogLyoKICAqIEdpdmVuIGEga2VybmVsIGFkZHJlc3MsIGZpbmQgdGhlIGhvbWUgbm9kZSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKaW5kZXggOWQ3Zjg3My4uNzQ4MGY0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICNkZWZpbmUgU0NSRUVOX0VORAkJMHhkZmMwMDAwMAogI2RlZmluZSBTQ1JFRU5fQkFTRQkJMHhkZjgwMDAwMAogCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGRmMDEwMDAwCiAKIC8qCkBAIC01OSw4ICs1OCw2IEBACiAjZGVmaW5lIFBDSU9fQkFTRQkJSU9NRU0oMHhlMDAxMDAwMCkKICNkZWZpbmUgRkxPUFBZRE1BX0JBU0UJCUlPTUVNKDB4ZTAwMmEwMDApCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCS8qIFJPTSAqLwotCiAjZGVmaW5lIHZpZGNfd3JpdGVsKHZhbCkJX19yYXdfd3JpdGVsKHZhbCwgVklEQ19CQVNFKQogCiAjZGVmaW5lIElPX0VDX0VBU0lfQkFTRQkJMHg4MTQwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL21lbW9yeS5oCmluZGV4IDA1OTJjYjMuLjMwM2M0MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmgKQEAgLTMwLDQgKzMwLDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFJPTQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHgwMDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9sZWRzLWdwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3ZWQwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmgKQEAgLTAsMCArMSwyOCBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9sZWRzLWdwaW8uaAorICoKKyAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIC0gTEVEcyBHUElPIGNvbm5lY3RvcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTEVEU0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0xFRFNHUElPX0ggImxlZHMtZ3Bpby5oIgorCisjZGVmaW5lIFMzQzI0WFhfTEVERl9BQ1RMT1cJKDE8PDApCQkvKiBMRUQgaXMgb24gd2hlbiBHUElPIGxvdyAqLworI2RlZmluZSBTM0MyNFhYX0xFREZfVFJJU1RBVEUJKDE8PDEpCQkvKiB0cmlzdGF0ZSB0byB0dXJuIG9mZiAqLworCitzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgeworCXVuc2lnbmVkIGludAkJIGdwaW87CisJdW5zaWduZWQgaW50CQkgZmxhZ3M7CisKKwljaGFyCQkJKm5hbWU7CisJY2hhcgkJCSpkZWZfdHJpZ2dlcjsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0xFRFNHUElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKaW5kZXggMjg3MTFhYS4uZWUwMDhhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotLyogRmx1c2hpbmcgYXJlYXMgKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweGUwMDAwMDAwCS8qIFNBMTEwMCB6ZXJvIGJhbmsgKi8KLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmNTAwMDAwMAotI2RlZmluZSBGTFVTSF9CQVNFX01JTklDQUNIRQkweGY1ODAwMDAwCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJMHhmYTA1MDAwMAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAppbmRleCAwMThhOWYwLi5hMjlmYWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCkBAIC05MSw0ICs5MSwxMSBAQAogCiAjZW5kaWYKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEgLSBTQTExMDAgemVybyBiYW5rCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweGUwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZjUwMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRV9NSU5JQ0FDSEUJMHhmNTEwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9oYXJkd2FyZS5oCmluZGV4IDRkMzVmOGMuLmVjYmE0NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaApAQCAtMTcsMTEgKzE3LDYgQEAKICAqLwogI2RlZmluZSBJT19CQVNFCQkJMHhlMDAwMDAwMAogCi0vKgotICogUkFNIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDgwMDAwMDAwCi0KICNlbHNlCiAKICNkZWZpbmUgSU9fQkFTRQkJCTAKQEAgLTMzLDcgKzI4LDYgQEAKICNkZWZpbmUgUk9NQ0FSRF9TSVpFCQkweDA4MDAwMDAwCiAjZGVmaW5lIFJPTUNBUkRfU1RBUlQJCTB4MTAwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCiAjZGVmaW5lIFBDSU9fQkFTRQkJMHhlMDAwMDAwMAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKaW5kZXggOTVhMjliNC4uNjk2OGQ2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmgKQEAgLTM5LDQgKzM5LDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg4MDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaCBiL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKaW5kZXggNjI0NmJmOC4uNTJiYWUwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCkBAIC0yNiw3ICsyNiw5IEBACiAKIHN0cnVjdCB2ZnBfaGFyZF9zdHJ1Y3QgewogCV9fdTY0IGZwcmVnc1sxNl07CisjaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgogCV9fdTMyIGZwbXhfc3RhdGU7CisjZW5kaWYKIAlfX3UzMiBmcGV4YzsKIAlfX3UzMiBmcHNjcjsKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCmluZGV4IDJiM2NmNjkuLjIwOTI4OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKQEAgLTE3MiwxMCArMTcyLDEwIEBACiAgKiAgdmlydF9hZGRyX3ZhbGlkKGspCWluZGljYXRlcyB3aGV0aGVyIGEgdmlydHVhbCBhZGRyZXNzIGlzIHZhbGlkCiAgKi8KICNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQotI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCShQSFlTX1BGTl9PRkZTRVQpCisjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJUEhZU19QRk5fT0ZGU0VUCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gUEhZU19QRk5fT0ZGU0VUICYmIChwZm4pIDwgKFBIWVNfUEZOX09GRlNFVCArIG1heF9tYXBucikpCiAKLSNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkocGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQkoKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA+PSBQQUdFX09GRlNFVCAmJiAodW5zaWduZWQgbG9uZykoa2FkZHIpIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpCiAKICNkZWZpbmUgUEhZU19UT19OSUQoYWRkcikJKDApCkBAIC0xODcsOCArMTg3LDggQEAKICAqIGFyb3VuZCBpbiBtZW1vcnkuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9udW1hLmg+Ci0jZGVmaW5lIGFyY2hfcGZuX3RvX25pZChwZm4pCShQRk5fVE9fTklEKHBmbikpCi0jZGVmaW5lIGFyY2hfbG9jYWxfcGFnZV9vZmZzZXQocGZuLCBuaWQpIChMT0NBTF9NQVBfTlIoKHBmbikgPDwgUEFHRV9PRkZTRVQpKQorI2RlZmluZSBhcmNoX3Bmbl90b19uaWQocGZuKQlQRk5fVE9fTklEKHBmbikKKyNkZWZpbmUgYXJjaF9sb2NhbF9wYWdlX29mZnNldChwZm4sIG5pZCkgTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfU0hJRlQpCiAKICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCQkJCQlcCiAJKHsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmMzY4MS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL251bW5vZGVzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotLyogVGhpcyBkZWNsYXJhdGlvbiBmb3IgdGhlIHNpemUgb2YgdGhlIE5VTUEgKENPTkZJR19ESVNDT05USUdNRU0pCi0gKiBtZW1vcnkgbm9kZSB0YWJsZSBpcyB0aGUgZGVmYXVsdC4KLSAqCi0gKiBBIGdvb2QgcGxhY2UgdG8gb3ZlcnJpZGUgdGhpcyB2YWx1ZSBpcyBpbmNsdWRlL2FzbS9hcmNoL21lbW9yeS5oLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJNX05VTU5PREVTX0gKLSNkZWZpbmUgX19BU01fQVJNX05VTU5PREVTX0gKLQotI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KLQotI2lmbmRlZiBOT0RFU19TSElGVAotIyBkZWZpbmUgTk9ERVNfU0hJRlQJMgkvKiBOb3JtYWxseSwgTWF4IDQgTm9kZXMgKi8KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaCBiL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaAppbmRleCAxNWJkNmU3Li4yN2ZlMDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdmZwbWFjcm9zLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3ZmcG1hY3Jvcy5oCkBAIC0xNiwxMCArMTYsMTggQEAKIAogCUAgcmVhZCBhbGwgdGhlIHdvcmtpbmcgcmVnaXN0ZXJzIGJhY2sgaW50byB0aGUgVkZQCiAJLm1hY3JvCVZGUEZMRE1JQSwgYmFzZQorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIAlMREMJcDExLCBjcjAsIFtcYmFzZV0sIzMzKjQJCSAgICBAIEZMRE1JQVggXGJhc2UhLCB7ZDAtZDE1fQorI2Vsc2UKKwlMREMJcDExLCBjcjAsIFtcYmFzZV0sIzMyKjQJCSAgICBAIEZMRE1JQUQgXGJhc2UhLCB7ZDAtZDE1fQorI2VuZGlmCiAJLmVuZG0KIAogCUAgd3JpdGUgYWxsIHRoZSB3b3JraW5nIHJlZ2lzdGVycyBvdXQgb2YgdGhlIFZGUAogCS5tYWNybwlWRlBGU1RNSUEsIGJhc2UKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAJU1RDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMyo0CQkgICAgQCBGU1RNSUFYIFxiYXNlISwge2QwLWQxNX0KKyNlbHNlCisJU1RDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMio0CQkgICAgQCBGU1RNSUFEIFxiYXNlISwge2QwLWQxNX0KKyNlbmRpZgogCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaAppbmRleCAxZDYzYzJhLi5iMWM1OTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc3lzdGVtLmgKQEAgLTgsNyArOCw2IEBACiAgKi8KIAogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQpOwotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpICAgICBkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBsYXN0ID0gcmVzdW1lKHByZXYsbmV4dCwgXAogCQkJCQkgKGludCkmKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikwKS0+dGhyZWFkKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAppbmRleCAyNjI3YmJkLi5iYjJkZmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaAppbmRleCBmNzJmZjBjLi4xNzM0ZWQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCkBAIC0xOCw4ICsxOCw2IEBACiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0OwogCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkgICAgZG8geyB9IHdoaWxlKDApCi0KIC8qCiAgKiBzd2l0Y2hfdG8ocHJldiwgbmV4dCkgc2hvdWxkIHN3aXRjaCBmcm9tIHRhc2sgYHByZXYnIHRvIGBuZXh0JwogICogYHByZXYnIHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgYG5leHQnLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCmluZGV4IDMyMjUzMWMuLjI2NjJhM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKQEAgLTI4OSw3ICsyODksNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKaW5kZXggZGZlOTZjNy4uOGU4MWNmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKQEAgLTQsOCArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGdldCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpCWRvIHsgfSB3aGlsZSgwKQotCiAvKgogICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBwdHIsIGZpcnN0IGNoZWNraW5nIHRoYXQKICAqIHB0ciBpc24ndCB0aGUgY3VycmVudCB0YXNrLCBpbiB3aGljaCBjYXNlIGl0IGRvZXMgbm90aGluZy4gIFRoaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKaW5kZXggNTZhNGE1Ni4uYWRiMDUxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKQEAgLTI4NSw3ICsyODUsNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKaW5kZXggZmY5YWM4ZC4uMjg4MjMzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKQEAgLTEzOSw2ICsxMzksOCBAQAogCiBleHRlcm4gaW50IHRpbWVyX292ZXJfODI1NDsKIAorZXh0ZXJuIGludCBtb2Rlcm5fYXBpYyh2b2lkKTsKKwogI2Vsc2UgLyogIUNPTkZJR19YODZfTE9DQUxfQVBJQyAqLwogc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3NodXRkb3duKHZvaWQpIHsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaCBiL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCmluZGV4IGVkZjY1YmUuLmNhODJhY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCkBAIC0zNSw2ICszNSwxMCBAQAogfTsKIAogZXh0ZXJuIHN0cnVjdCBlODIwbWFwIGU4MjA7CisKK2V4dGVybiBpbnQgZTgyMF9hbGxfbWFwcGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgdW5zaWduZWQgdHlwZSk7CisKICNlbmRpZi8qIV9fQVNTRU1CTFlfXyovCiAKICNlbmRpZi8qX19FODIwX0hFQURFUiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCmluZGV4IDE2ZWY5ZjkuLjdmMWE4YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCkBAIC04OSw2ICs4OSw3IEBACiAgKiB0aGVuIDMyIGJpdCBIUEVUIGNvdW50ZXIgd3JhcHNhcm91bmQgaW4gbGVzcyB0aGFuIDAuNSBzZWMuCiAgKi8KICNkZWZpbmUgSFBFVF9NSU5fUEVSSU9EICgxMDAwMDBVTCkKKyNkZWZpbmUgSFBFVF9USUNLX1JBVEUgIChIWiAqIDEwMDAwMFVMKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X3RpY2s7ICAJLyogaHBldCBjbGtzIGNvdW50IHBlciB0aWNrICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7CS8qIGhwZXQgbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21wc3BlYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaAppbmRleCA2MjExM2QzLi43NzBiZjZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21wc3BlYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKQEAgLTE4LDcgKzE4LDYgQEAKIGV4dGVybiB2b2lkIGdldF9zbXBfY29uZmlnICh2b2lkKTsKIGV4dGVybiBpbnQgbnJfaW9hcGljczsKIGV4dGVybiBpbnQgYXBpY192ZXJzaW9uIFtNQVhfQVBJQ1NdOwotZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fdHlwZSBbTUFYX01QX0JVU1NFU107CiBleHRlcm4gaW50IG1wX2lycV9lbnRyaWVzOwogZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBtcF9pcnFzIFtNQVhfSVJRX1NPVVJDRVNdOwogZXh0ZXJuIGludCBtcGNfZGVmYXVsdF90eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjFmMzhjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAotI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQotLyogTWF4IDE2IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTQKLQotI2VsaWYgZGVmaW5lZChDT05GSUdfQUNQSV9TUkFUKQotCi0vKiBNYXggOCBOb2RlcyAqLwotI2RlZmluZSBOT0RFU19TSElGVAkzCi0KLSNlbmRpZiAvKiBDT05GSUdfWDg2X05VTUFRICovCi0KLSNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAppbmRleCAyZTdmM2UyLi42YThkZDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIC8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKQEAgLTMxOCw4ICszMTgsOCBAQAogI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMxMAogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMTEKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzEyCi0jZGVmaW5lIF9fTlJfc3lzX3NwbGljZQkJMzEzCi0jZGVmaW5lIF9fTlJfc3lzX3N5bmNfZmlsZV9yYW5nZSAzMTQKKyNkZWZpbmUgX19OUl9zcGxpY2UJCTMxMworI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkzMTQKIAogI2RlZmluZSBOUl9zeXNjYWxscyAzMTUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9hY3BpLWV4dC5oIGIvaW5jbHVkZS9hc20taWE2NC9hY3BpLWV4dC5oCmluZGV4IDU2ZDJkZGMuLjczNGQxMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS1leHQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmgKQEAgLTEsMTIgKzEsMTUgQEAKIC8qCi0gKiBpYTY0L3BsYXRmb3JtL2hwL2NvbW1vbi9ocF9hY3BpLmgKKyAqIChjKSBDb3B5cmlnaHQgMjAwMywgMjAwNiBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorICoJQWxleCBXaWxsaWFtc29uIDxhbGV4LndpbGxpYW1zb25AaHAuY29tPgorICoJQmpvcm4gSGVsZ2FhcyA8Ympvcm4uaGVsZ2Fhc0BocC5jb20+CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEhld2xldHQtUGFja2FyZAotICogQ29weXJpZ2h0IChDKSBBbGV4IFdpbGxpYW1zb24KLSAqIENvcHlyaWdodCAoQykgQmpvcm4gSGVsZ2FhcworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBWZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byBBQ1BJLgogICovCisKICNpZm5kZWYgX0FTTV9JQTY0X0FDUElfRVhUX0gKICNkZWZpbmUgX0FTTV9JQTY0X0FDUElfRVhUX0gKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKaW5kZXggMjE4YzQ1OC4uYzE5NWE5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCkBAIC01OCw2ICs1OCw4IEBACiAJRElFX01DQV9SRU5EWlZPVVNfRU5URVIsCiAJRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywKIAlESUVfTUNBX1JFTkRaVk9VU19MRUFWRSwKKwlESUVfTUNBX05FV19USU1FT1VULAorCURJRV9JTklUX0VOVEVSLAogCURJRV9JTklUX01PTkFSQ0hfRU5URVIsCiAJRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTLAogCURJRV9JTklUX01PTkFSQ0hfTEVBVkUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21jYS5oIGIvaW5jbHVkZS9hc20taWE2NC9tY2EuaAppbmRleCBiZmJiYjhkLi45YzUzODliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21jYS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmgKQEAgLTE0OCw2ICsxNDgsMTEgQEAKIGV4dGVybiB2b2lkIGlhNjRfdW5yZWdfTUNBX2V4dGVuc2lvbih2b2lkKTsKIGV4dGVybiB1NjQgaWE2NF9nZXRfcm5hdCh1NjQgKik7CiAKK3N0cnVjdCBpYTY0X21jYV9ub3RpZnlfZGllIHsKKwlzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnNvczsKKwlpbnQgKm1vbmFyY2hfY3B1OworfTsKKwogI2Vsc2UJLyogX19BU1NFTUJMWV9fICovCiAKICNkZWZpbmUgSUE2NF9NQ0FfQ09SUkVDVEVECTB4MAkvKiBFcnJvciBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgT1NfTUNBICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmggYi9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmgKaW5kZXggNWEzMjI0Zi4uYmVkNzNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaApAQCAtODQsNyArODQsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQogewotCWlmIChsaWtlbHkoY21weGNoZ19hY3EoY291bnQsIDEsIDApKSA9PSAxKQorCWlmIChjbXB4Y2hnX2FjcShjb3VudCwgMSwgMCkgPT0gMSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDM1NmYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2lmbmRlZiBfQVNNX01BWF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fTUFYX05VTU5PREVTX0gKLQotI2lmZGVmIENPTkZJR19JQTY0X0RJRwotLyogTWF4IDggTm9kZXMgKi8KLSMgIGRlZmluZSBOT0RFU19TSElGVAkzCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X0hQX1pYMSkgfHwgZGVmaW5lZChDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQikKLS8qIE1heCAzMiBOb2RlcyAqLwotIyAgZGVmaW5lIE5PREVTX1NISUZUCTUKLSNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjRfU0dJX1NOMikgfHwgZGVmaW5lZChDT05GSUdfSUE2NF9HRU5FUklDKQotIyAgaWYgQ09ORklHX0lBNjRfTlJfTk9ERVMgPT0gMjU2Ci0jICAgIGRlZmluZSBOT0RFU19TSElGVAk4Ci0jICBlbGlmIENPTkZJR19JQTY0X05SX05PREVTIDw9IDUxMgotIyAgICBkZWZpbmUgTk9ERVNfU0hJRlQgICAgOQotIyAgZWxpZiBDT05GSUdfSUE2NF9OUl9OT0RFUyA8PSAxMDI0Ci0jICAgIGRlZmluZSBOT0RFU19TSElGVCAgICAxMAotIyAgZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKaW5kZXggMzYwNzBjMS4uMWM3NDlhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCkBAIC0yODYsMTIgKzI4NiwxNSBAQAogLyogMTI5NCwgMTI5NSByZXNlcnZlZCBmb3IgcHNlbGVjdC9wcG9sbCAqLwogI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkxMjk2CiAjZGVmaW5lIF9fTlJfc3BsaWNlCQkJMTI5NworI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkJMTI5OAorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkJMTI5OQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJMTMwMAogCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNzQgLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KKyNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNzcgLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmggYi9pbmNsdWRlL2FzbS1pYTY0L3ZnYS5oCmluZGV4IGJjMzM0OWYuLjA5MTE3N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC92Z2EuaApAQCAtMTcsNyArMTcsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmdhX2NvbnNvbGVfaW9iYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmdhX2NvbnNvbGVfbWVtYmFzZTsKIAotI2RlZmluZSBWR0FfTUFQX01FTSh4KQkoKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAodmdhX2NvbnNvbGVfbWVtYmFzZSArICh4KSwgMCkpCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgpCSgodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKHZnYV9jb25zb2xlX21lbWJhc2UgKyAoeCksIDApKQogCiAjZGVmaW5lIHZnYV9yZWFkYih4KQkoKih4KSkKICNkZWZpbmUgdmdhX3dyaXRlYih4LHkpCSgqKHkpID0gKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzlhMzlkNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIF9BU01fTlVNTk9ERVNfSF8KLSNkZWZpbmUgX0FTTV9OVU1OT0RFU19IXwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DSElQX00zMjcwMCkKLSNkZWZpbmUJTk9ERVNfU0hJRlQJMQkvKiBNYXggMiBOb2RlcyAqLwotI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMCAqLwotCi0jZW5kaWYJLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwotCi0jZW5kaWYJLyogX0FTTV9OVU1OT0RFU19IXyAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaAppbmRleCA3ODg1YjdkLi4xMTg0MjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKQEAgLTY3LDcgKzY3LDggQEAKICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotI2RlZmluZSBjcHVfcG9zc2libGVfbWFwIGNwdV9jYWxsb3V0X21hcAorZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfcHJlc2VudF9tYXA7CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCmluZGV4IGQ2YTJjNjEuLmM1YWI1ZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaApAQCAtMjIsMTAgKzIyLDYgQEAKICAqIGBuZXh0JyBhbmQgYHByZXYnIHNob3VsZCBiZSBzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJ1dCBpdCBpc24ndCBhbHdheXMgZGVmaW5lZAogICovCiAKLSNpZm5kZWYgQ09ORklHX1NNUAotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpICBkbyB7IH0gd2hpbGUoMCkKLSNlbmRpZgkvKiBub3QgQ09ORklHX1NNUCAqLwotCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSAgZG8geyBcCiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgYXJnMCBfX2FzbV9fICgicjAiKSA9ICh1bnNpZ25lZCBsb25nKXByZXY7IFwKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nICBhcmcxIF9fYXNtX18gKCJyMSIpID0gKHVuc2lnbmVkIGxvbmcpbmV4dDsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaAppbmRleCBlOGFlNjE5Li44MTljYzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaApAQCAtNSwxNyArNSw5IEBACiAgKiAgbGludXgvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKICAqCiAgKiAgTTMyUiB2ZXJzaW9uLgotICogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI3VuZGVmIFVBQ0NFU1NfREVCVUcKLQotI2lmZGVmIFVBQ0NFU1NfREVCVUcKLSNkZWZpbmUgVUFQUklOVEsoYXJncy4uLikgcHJpbnRrKGFyZ3MpCi0jZWxzZQotI2RlZmluZSBVQVBSSU5USyhhcmdzLi4uKQotI2VuZGlmIC8qIFVBQ0NFU1NfREVCVUcgKi8KLQogLyoKICAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKICAqLwpAQCAtMzgsMjcgKzMwLDI5IEBACiAjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQogCiAjaWZkZWYgQ09ORklHX01NVQorCiAjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGKQogI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRyhQQUdFX09GRlNFVCkKLSNlbHNlCi0jZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGKQotI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRygweEZGRkZGRkZGKQotI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KLQogI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQotI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKICNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCi0jZWxzZQorCisjZWxzZSAvKiBub3QgQ09ORklHX01NVSAqLworCisjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGKQorI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRygweEZGRkZGRkZGKQorI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorCiBzdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZnModm9pZCkKIHsKLSAgcmV0dXJuIFVTRVJfRFM7CisJcmV0dXJuIFVTRVJfRFM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHMpCiB7CiB9Ci0jZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZW5kaWYgLyogbm90IENPTkZJR19NTVUgKi8KIAogI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKIApAQCAtODMsOSArNzcsOSBAQAogCQkiCXN1YngJJTAsICUwXG4iCQkJCVwKIAkJIgljbXB1CSU0LCAlMVxuIgkJCQlcCiAJCSIJc3VieAklMCwgJTVcbiIJCQkJXAotCQk6ICI9JnIiKGZsYWcpLCAiPXIiKHN1bSkJCQkJXAotCQk6ICIxIihhZGRyKSwgInIiKChpbnQpKHNpemUpKSwgCQkJCVwKLQkJICAiciIoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZyksICJyIigwKQlcCisJCTogIj0mciIgKGZsYWcpLCAiPXIiIChzdW0pCQkJCVwKKwkJOiAiMSIgKGFkZHIpLCAiciIgKChpbnQpKHNpemUpKSwgCQkJXAorCQkgICJyIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZyksICJyIiAoMCkJXAogCQk6ICJjYml0IiApOwkJCQkJCVwKIAlmbGFnOyB9KQogCkBAIC0xMTMsMTAgKzEwNywxMCBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc19vayhpbnQgdHlwZSwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotICBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQ7Ci0gIHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQ7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylhZGRyOwogCi0gIHJldHVybiAoKHZhbCA+PSBtZW1vcnlfc3RhcnQpICYmICgodmFsICsgc2l6ZSkgPCBtZW1vcnlfZW5kKSk7CisJcmV0dXJuICgodmFsID49IG1lbW9yeV9zdGFydCkgJiYgKCh2YWwgKyBzaXplKSA8IG1lbW9yeV9lbmQpKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKQEAgLTE1NSwzOSArMTQ5LDYgQEAKICAqIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgb2YgdXNlciBtZW1vcnkpLgogICovCiAKLWV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMSh2b2lkKTsKLWV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMih2b2lkKTsKLWV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfNCh2b2lkKTsKLQotI2lmbmRlZiBNT0RVTEUKLSNkZWZpbmUgX19nZXRfdXNlcl94KHNpemUscmV0LHgscHRyKSAJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSIJbXYJcjAsICUwXG4iCQkJCVwKLQkJIgltdglyMSwgJTFcbiIgCQkJCVwKLQkJIglibCBfX2dldF91c2VyXyIgI3NpemUgIlxuIgkJCVwKLQkJIgltdgklMCwgcjBcbiIJCQkJXAotCQkiCW12CSUxLCByMVxuIiAJCQkJXAotCQk6ICI9ciIocmV0KSwgIj1yIih4KSAJCQkJCVwKLQkJOiAiMCIocHRyKQkJCQkJCVwKLQkJOiAicjAiLCAicjEiLCAicjE0IiApCi0jZWxzZSAvKiBNT0RVTEUgKi8KLS8qCi0gKiBVc2UgImpsIiBpbnN0ZWFkIG9mICJibCIgZm9yIE1PRFVMRQotICovCi0jZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLHJldCx4LHB0cikgCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiCW12CXIwLCAlMFxuIgkJCQlcCi0JCSIJbXYJcjEsICUxXG4iIAkJCQlcCi0JCSIJc2V0aAlsciwgI2hpZ2goX19nZXRfdXNlcl8iICNzaXplICIpXG4iCVwKLQkJIglvcjMJbHIsIGxyLCAjbG93KF9fZ2V0X3VzZXJfIiAjc2l6ZSAiKVxuIglcCi0JCSIJamwgCWxyXG4iCQkJCQlcCi0JCSIJbXYJJTAsIHIwXG4iCQkJCVwKLQkJIgltdgklMSwgcjFcbiIgCQkJCVwKLQkJOiAiPXIiKHJldCksICI9ciIoeCkgCQkJCQlcCi0JCTogIjAiKHB0cikJCQkJCQlcCi0JCTogInIwIiwgInIxIiwgInIxNCIgKQotI2VuZGlmCi0KIC8qIENhcmVmdWw6IHdlIGhhdmUgdG8gY2FzdCB0aGUgcmVzdWx0IHRvIHRoZSB0eXBlIG9mIHRoZSBwb2ludGVyIGZvciBzaWduCiAgICByZWFzb25zICovCiAvKioKQEAgLTIwOCwyMCArMTY5LDcgQEAKICAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCiAgKi8KICNkZWZpbmUgZ2V0X3VzZXIoeCxwdHIpCQkJCQkJCVwKLSh7CWludCBfX3JldF9ndTsJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX192YWxfZ3U7CQkJCQkJXAotCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAotCXN3aXRjaChzaXplb2YgKCoocHRyKSkpIHsJCQkJCVwKLQljYXNlIDE6ICBfX2dldF91c2VyX3goMSxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQljYXNlIDI6ICBfX2dldF91c2VyX3goMixfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQljYXNlIDQ6ICBfX2dldF91c2VyX3goNCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQlkZWZhdWx0OiBfX2dldF91c2VyX3goWCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQl9CQkJCQkJCQlcCi0JKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX3ZhbF9ndTsJCQkJXAotCV9fcmV0X2d1OwkJCQkJCQlcCi19KQotCi1leHRlcm4gdm9pZCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKwlfX2dldF91c2VyX2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKIAogLyoqCiAgKiBwdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UuCkBAIC0yNDAsOCArMTg4LDcgQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciAtRUZBVUxUIG9uIGVycm9yLgogICovCiAjZGVmaW5lIHB1dF91c2VyKHgscHRyKQkJCQkJCQlcCi0gIF9fcHV0X3VzZXJfY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCi0KKwlfX3B1dF91c2VyX2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQogCiAvKioKICAqIF9fZ2V0X3VzZXI6IC0gR2V0IGEgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgpAQCAtMjY0LDggKzIxMSw2NCBAQAogICogT24gZXJyb3IsIHRoZSB2YXJpYWJsZSBAeCBpcyBzZXQgdG8gemVyby4KICAqLwogI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBcCi0gIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisJX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKIAorI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAwOwkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOwkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLChwdHIpLChzaXplKSxfX2d1X2Vycik7CQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOwkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWwgPSAwOwkJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfYWRkciA9IChwdHIpOwkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELF9fZ3VfYWRkcixzaXplKSkJCQlcCisJCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCxfX2d1X2FkZHIsKHNpemUpLF9fZ3VfZXJyKTsJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJldHZhbCA9IDA7CQkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCSAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInViIik7IGJyZWFrOwkJXAorCSAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInVoIik7IGJyZWFrOwkJXAorCSAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsIiIpOyBicmVhazsJCVwKKwkgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUpCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIxOglsZCJpdHlwZSIgJTEsQCUyXG4iCQkJCVwKKwkJIgkuZmlsbGluc25cbiIJCQkJCVwKKwkJIjI6XG4iCQkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiMzoJbGRpICUwLCUzXG4iCQkJCQlcCisJCSIJc2V0aCByMTQsI2hpZ2goMmIpXG4iCQkJCVwKKwkJIglvcjMgcjE0LHIxNCwjbG93KDJiKVxuIgkJCQlcCisJCSIJam1wIHIxNFxuIgkJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCisJCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj0mciIgKGVyciksICI9JnIiICh4KQkJCQlcCisJCTogInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpCQkJXAorCQk6ICJyMTQiLCAibWVtb3J5IikKIAogLyoqCiAgKiBfX3B1dF91c2VyOiAtIFdyaXRlIGEgc2ltcGxlIHZhbHVlIGludG8gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgpAQCAtMjg3LDExICsyOTAsMTMgQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciAtRUZBVUxUIG9uIGVycm9yLgogICovCiAjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIFwKLSAgX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCV9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKwogCiAjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3B1X2VycjsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlfX3B1dF91c2VyX3NpemUoKHgpLChwdHIpLChzaXplKSxfX3B1X2Vycik7CQkJXAogCV9fcHVfZXJyOwkJCQkJCQlcCiB9KQpAQCAtMzA4LDI4ICszMTMsMjggQEAKIH0pCiAKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQotI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBhZGRyLCBlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIxOiAgICAgc3QgJUwxLEAlMlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiMjogICAgIHN0ICVIMSxAKDQsJTIpXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIjM6XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIjQ6ICAgICBsZGkgJTAsJTNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICBzZXRoIHIxNCwjaGlnaCgzYilcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICBvcjMgcjE0LHIxNCwjbG93KDNiKVxuIiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICBqbXAgcjE0XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAubG9uZyAxYiw0YlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAubG9uZyAyYiw0YlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5wcmV2aW91cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgOiAiPSZyIihlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIDogInIiKHgpLCAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCVwKKyNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKQkJCQkJXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiMTogICAgIHN0ICVMMSxAJTJcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIyOiAgICAgc3QgJUgxLEAoNCwlMilcbiIJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIjM6XG4iCQkJCQkJCVwKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiNDogICAgIGxkaSAlMCwlM1xuIgkJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgc2V0aCByMTQsI2hpZ2goM2IpXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIG9yMyByMTQscjE0LCNsb3coM2IpXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIGptcCByMTRcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG4iCQkJCQkJXAorICAgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5iYWxpZ24gNFxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMWIsNGJcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5sb25nIDJiLDRiXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIi5wcmV2aW91cyIJCQkJCQlcCisgICAgICAgICAgICAgICAgOiAiPSZyIiAoZXJyKQkJCQkJCVwKKyAgICAgICAgICAgICAgICA6ICJyIiAoeCksICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKQkJXAogICAgICAgICAgICAgICAgIDogInIxNCIsICJtZW1vcnkiKQogCiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9fKQpAQCAtMzUzLDEzICszNTgsMTUgQEAKIAkJIgkubG9uZyAxYiw0YlxuIgkJCQkJXAogCQkiCS5sb25nIDJiLDRiXG4iCQkJCQlcCiAJCSIucHJldmlvdXMiCQkJCQkJXAotCQk6ICI9JnIiKGVycikJCQkJCQlcCi0JCTogInIiKHgpLCAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCVwKKwkJOiAiPSZyIiAoZXJyKQkJCQkJCVwKKwkJOiAiciIgKHgpLCAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikJCVwKIAkJOiAicjE0IiwgIm1lbW9yeSIpCiAjZWxzZQogI2Vycm9yIG5vIGVuZGlhbiBkZWZpbmVkCiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKICNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCXJldHZhbCA9IDA7CQkJCQkJCVwKQEAgLTM5OCw1MiArNDA1LDggQEAKIAkJIgkuYmFsaWduIDRcbiIJCQkJCVwKIAkJIgkubG9uZyAxYiwzYlxuIgkJCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJCVwKLQkJOiAiPSZyIihlcnIpCQkJCQkJXAotCQk6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCi0JCTogInIxNCIsICJtZW1vcnkiKQotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JbG9uZyBfX2d1X2VycjsJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQkJXAotCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIpOwkJXAotCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKLQlfX2d1X2VycjsJCQkJCQkJXAotfSkKLQotZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7Ci0KLSNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCXJldHZhbCA9IDA7CQkJCQkJCVwKLQlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKLQlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAotCSAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInViIik7IGJyZWFrOwkJXAotCSAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInVoIik7IGJyZWFrOwkJXAotCSAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsIiIpOyBicmVhazsJCVwKLQkgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUpCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSIJLmZpbGxpbnNuXG4iCQkJCQlcCi0JCSIxOglsZCJpdHlwZSIgJTEsQCUyXG4iCQkJCVwKLQkJIgkuZmlsbGluc25cbiIJCQkJCVwKLQkJIjI6XG4iCQkJCQkJCVwKLQkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAotCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAotCQkiMzoJbGRpICUwLCUzXG4iCQkJCQlcCi0JCSIJc2V0aCByMTQsI2hpZ2goMmIpXG4iCQkJCVwKLQkJIglvcjMgcjE0LHIxNCwjbG93KDJiKVxuIgkJCQlcCi0JCSIJam1wIHIxNFxuIgkJCQkJXAotCQkiLnByZXZpb3VzXG4iCQkJCQkJXAotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCi0JCSIJLmJhbGlnbiA0XG4iCQkJCQlcCi0JCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKLQkJIi5wcmV2aW91cyIJCQkJCQlcCi0JCTogIj0mciIoZXJyKSwgIj0mciIoeCkJCQkJCVwKLQkJOiAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCQlcCisJCTogIj0mciIgKGVycikJCQkJCQlcCisJCTogInIiICh4KSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpCQlcCiAJCTogInIxNCIsICJtZW1vcnkiKQogCiAvKgpAQCAtNDUzLDcgKzQxNiw2IEBACiAgKiBhbnl0aGluZywgc28gdGhpcyBpcyBhY2N1cmF0ZS4KICAqLwogCi0KIC8qCiAgKiBDb3B5IFRvL0Zyb20gVXNlcnNwYWNlCiAgKi8KQEAgLTUxMSw4ICs0NzMsOSBAQAogCQkiCS5sb25nIDJiLDliXG4iCQkJCQlcCiAJCSIJLmxvbmcgM2IsOWJcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJCVwKLQkJOiAiPSZyIihfX2RzdCksICI9JnIiKF9fc3JjKSwgIj0mciIoc2l6ZSksICI9JnIiKF9fYykJXAotCQk6ICIwIih0byksICIxIihmcm9tKSwgIjIiKHNpemUpLCAiMyIoc2l6ZSAvIDQpCQlcCisJCTogIj0mciIgKF9fZHN0KSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKHNpemUpLAkJXAorCQkgICI9JnIiIChfX2MpCQkJCQkJXAorCQk6ICIwIiAodG8pLCAiMSIgKGZyb20pLCAiMiIgKHNpemUpLCAiMyIgKHNpemUgLyA0KQlcCiAJCTogInIxNCIsICJtZW1vcnkiKTsJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTU3Myw4ICs1MzYsOSBAQAogCQkiCS5sb25nIDJiLDdiXG4iCQkJCQlcCiAJCSIJLmxvbmcgM2IsN2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJCVwKLQkJOiAiPSZyIihfX2RzdCksICI9JnIiKF9fc3JjKSwgIj0mciIoc2l6ZSksICI9JnIiKF9fYykJXAotCQk6ICIwIih0byksICIxIihmcm9tKSwgIjIiKHNpemUpLCAiMyIoc2l6ZSAvIDQpCQlcCisJCTogIj0mciIgKF9fZHN0KSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKHNpemUpLAkJXAorCQkgICI9JnIiIChfX2MpCQkJCQkJXAorCQk6ICIwIiAodG8pLCAiMSIgKGZyb20pLCAiMiIgKHNpemUpLCAiMyIgKHNpemUgLyA0KQlcCiAJCTogInIxNCIsICJtZW1vcnkiKTsJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTY3Niw3ICs2NDAsNyBAQAogI2RlZmluZSBjb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQkJXAogKHsJCQkJCQkJXAogCW1pZ2h0X3NsZWVwKCk7CQkJCQlcCi1fX2dlbmVyaWNfY29weV9mcm9tX3VzZXIoKHRvKSwoZnJvbSksKG4pKTsJXAorCV9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcigodG8pLChmcm9tKSwobikpOwlcCiB9KQogCiBsb25nIF9fbXVzdF9jaGVjayBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaAppbmRleCAzOWJlODdjLi5iZTBlYjAxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCkBAIC0yOTIsNyArMjkyLDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjg1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMDBjMTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggMTI4IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTYKLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjc2NTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAotI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICi0KLS8qIE1heCA4IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTMKLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEzOGVkYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX01BWF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fUE9XRVJQQ19NQVhfTlVNTk9ERVNfSAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyogTWF4IDE2IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTQKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCmluZGV4IGRlMWQ5OTIuLjM5OWJmMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19BUkNIX1MzOTBfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1MzOTBfQVRPTUlDX18KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKIC8qCiAgKiAgaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCmluZGV4IDRjYmMzMzYuLjE1ZmQyZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaApAQCAtMTQsMTIgKzE0LDEyIEBACiAjaW5jbHVkZSA8dHlwZXMuaD4KICNlbmRpZgogCi1leHRlcm4gX191OCBfYXNjZWJjXzUwMFtdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyA1MDAgY29udmVyc2lvbiB0YWJsZSAqLwotZXh0ZXJuIF9fdTggX2ViY2FzY181MDBbXTsgICAvKiBFQkNESUMgNTAwIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KLWV4dGVybiBfX3U4IF9hc2NlYmNbXTsgICAvKiBBU0NJSSAtPiBFQkNESUMgY29udmVyc2lvbiB0YWJsZSAqLwotZXh0ZXJuIF9fdTggX2ViY2FzY1tdOyAgIC8qIEVCQ0RJQyAtPiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlICovCi1leHRlcm4gX191OCBfZWJjX3RvbG93ZXJbXTsgLyogRUJDRElDIC0+IGxvd2VyY2FzZSAqLwotZXh0ZXJuIF9fdTggX2ViY190b3VwcGVyW107IC8qIEVCQ0RJQyAtPiB1cHBlcmNhc2UgKi8KK2V4dGVybiBfX3U4IF9hc2NlYmNfNTAwWzI1Nl07ICAgLyogQVNDSUkgLT4gRUJDRElDIDUwMCBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjYXNjXzUwMFsyNTZdOyAgIC8qIEVCQ0RJQyA1MDAgLT4gQVNDSUkgY29udmVyc2lvbiB0YWJsZSAqLworZXh0ZXJuIF9fdTggX2FzY2ViY1syNTZdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjYXNjWzI1Nl07ICAgLyogRUJDRElDIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KK2V4dGVybiBfX3U4IF9lYmNfdG9sb3dlclsyNTZdOyAvKiBFQkNESUMgLT4gbG93ZXJjYXNlICovCitleHRlcm4gX191OCBfZWJjX3RvdXBwZXJbMjU2XTsgLyogRUJDRElDIC0+IHVwcGVyY2FzZSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGNvZGVwYWdlX2NvbnZlcnQoY29uc3QgX191OCAqY29kZXBhZ2UsIHZvbGF0aWxlIF9fdTggKiBhZGRyLCB1bnNpZ25lZCBsb25nIG5yKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLXNoL251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2U4NWIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX01BWF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fTUFYX05VTU5PREVTX0gKLQotLyogTWF4IDIgTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJMQotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAppbmRleCBmMmM4ZTE0Li4wNTUyMGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaApAQCAtMjkwLDcgKzI5MCw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlICAgIChfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgICAgICAgICAgKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMjgzCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODUKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCmluZGV4IDJhMWNmYTQuLjFmOGYzOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaApAQCAtMzMzLDcgKzMzMyw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlICAgIChfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgICAgICAgICAgKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9tcV9vcGVuKzUpCi0jZGVmaW5lIF9fTlJfc3lzX2tleGVjX2xvYWQJMzExCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzExCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkzMTIKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkzMTMKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkzMTQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3ZnYS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdmdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5ZDViMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3ZnYS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKglBY2Nlc3MgdG8gVkdBIHZpZGVvcmFtCisgKgorICoJKGMpIDE5OTggTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+CisgKi8KKworI2lmbmRlZiBfTElOVVhfQVNNX1ZHQV9IXworI2RlZmluZSBfTElOVVhfQVNNX1ZHQV9IXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgVlRfQlVGX0hBVkVfUlcKKworI3VuZGVmIHNjcl93cml0ZXcKKyN1bmRlZiBzY3JfcmVhZHcKKworc3RhdGljIGlubGluZSB2b2lkIHNjcl93cml0ZXcodTE2IHZhbCwgdTE2ICphZGRyKQoreworCUJVR19PTigobG9uZykgYWRkciA+PSAwKTsKKworCSphZGRyID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBzY3JfcmVhZHcoY29uc3QgdTE2ICphZGRyKQoreworCUJVR19PTigobG9uZykgYWRkciA+PSAwKTsKKworCXJldHVybiAqYWRkcjsKK30KKworI2RlZmluZSBWR0FfTUFQX01FTSh4LHMpICh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCmluZGV4IDgyMDMyZTEuLmJhZWYxM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaApAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBwZXJjcHVfbW9kY29weShwY3B1ZHN0LCBzcmMsIHNpemUpCQkJXAogZG8gewkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBfX2k7CQkJCQlcCi0JZm9yX2VhY2hfY3B1KF9faSkJCQkJCVwKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoX19pKQkJCQlcCiAJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldChfX2kpLAkJXAogCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJCVwKIH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtaTM4Ni5oIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaAppbmRleCAzMDY1NmM5Li42ZTI1MjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtaTM4Ni5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1pMzg2LmgKQEAgLTU2LDYgKzU2LDkgQEAKIGV4dGVybiBpbnQgYXJjaF9zd2l0Y2hfdGxzX3NrYXMoc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKTsKIGV4dGVybiBpbnQgYXJjaF9zd2l0Y2hfdGxzX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CiAKK2V4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CitleHRlcm4gdm9pZCBhcmNoX3N3aXRjaF90b19za2FzKHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGRvX2dldF90aHJlYWRfYXJlYShzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKQogewogCXJldHVybiBDSE9PU0VfTU9ERV9QUk9DKGRvX2dldF90aHJlYWRfYXJlYV90dCwgZG9fZ2V0X3RocmVhZF9hcmVhX3NrYXMsIGluZm8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKaW5kZXggMTA3ZGVjYi4uNzA5MWFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oCkBAIC0xOCw4ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAKLSNkZWZpbmUgcHJlcGFyZV90b19zd2l0Y2goKQlkbyB7IH0gd2hpbGUgKDApCi0KIC8qCiAgKiBzd2l0Y2hfdG8obikgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIHB0ciwgZmlyc3QgY2hlY2tpbmcgdGhhdAogICogcHRyIGlzbid0IHRoZSBjdXJyZW50IHRhc2ssIGluIHdoaWNoIGNhc2UgaXQgZG9lcyBub3RoaW5nLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKaW5kZXggOGRjYzMyNi4uOTNiNTFkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCkBAIC00Nyw3ICs0Nyw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBlODIwX2VuZF9vZl9yYW0odm9pZCk7CiBleHRlcm4gdm9pZCBlODIwX3Jlc2VydmVfcmVzb3VyY2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgZTgyMF9wcmludF9tYXAoY2hhciAqd2hvKTsKLWV4dGVybiBpbnQgZTgyMF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpOworZXh0ZXJuIGludCBlODIwX2FueV9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpOworZXh0ZXJuIGludCBlODIwX2FsbF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpOwogCiBleHRlcm4gdm9pZCBlODIwX2Jvb3RtZW1fZnJlZShwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHN0YXJ0LHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGU4MjBfc2V0dXBfZ2FwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9ocGV0LmgKaW5kZXggMDhiNzVjMS4uMThmZjdlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oCkBAIC01MSw2ICs1MSw4IEBACiAKICNkZWZpbmUgSFBFVF9UTl9ST1VURV9TSElGVAk5CiAKKyNkZWZpbmUgSFBFVF9USUNLX1JBVEUgKEhaICogMTAwMDAwVUwpCisKIGV4dGVybiBpbnQgaXNfaHBldF9lbmFibGVkKHZvaWQpOwogZXh0ZXJuIGludCBocGV0X3J0Y190aW1lcl9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBvZW1fZm9yY2VfaHBldF90aW1lcih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyX3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzJfdW5pc3RkLmgKaW5kZXggZWViMmJjZC4uYjRmNGIxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2lhMzJfdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzJfdW5pc3RkLmgKQEAgLTMxNyw2ICszMTcsNCBAQAogI2RlZmluZSBfX05SX2lhMzJfcHBvbGwJCQkzMDkKICNkZWZpbmUgX19OUl9pYTMyX3Vuc2hhcmUJCTMxMAogCi0jZGVmaW5lIElBMzJfTlJfc3lzY2FsbHMgMzE1CS8qIG11c3QgYmUgPiB0aGFuIGJpZ2dlc3Qgc3lzY2FsbCEgKi8KLQogI2VuZGlmIC8qIF9BU01fWDg2XzY0X0lBMzJfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCmluZGV4IGNhZmRmYjMuLmEwNWRhOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCkBAIC0xNzcsNyArMTc3LDcgQEAKIHsKIAlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTE2ICopYWRkcjsKIH0KLXN0YXRpYyBpbmxpbmUgX191MzIgX19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fdTMyIF9fcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgX191MzIgKilhZGRyOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21jZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21jZS5oCmluZGV4IDVkMjk4YjcuLjcyMjk3ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbWNlLmgKQEAgLTcwLDYgKzcwLDkgQEAKICNkZWZpbmUgTUNFX1RIUkVTSE9MRF9CQVNFICAgICAgTUNFX0VYVEVOREVEX0JBTksgKyAxIC8qIE1DRV9BTUQgKi8KICNkZWZpbmUgTUNFX1RIUkVTSE9MRF9EUkFNX0VDQyAgTUNFX1RIUkVTSE9MRF9CQVNFICsgNAogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogI2lmZGVmIENPTkZJR19YODZfTUNFX0lOVEVMCiB2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKQEAgLTg3LDQgKzkwLDggQEAKIH0KICNlbmRpZgogCitleHRlcm4gYXRvbWljX3QgbWNlX2VudHJ5OworCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbnVtYS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L251bWEuaAppbmRleCBmNmNiYjRjLi4xY2M5MmZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbnVtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fWDg2NjRfTlVNQV9IIDEKIAogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL251bW5vZGVzLmg+CiAKIHN0cnVjdCBib290bm9kZSB7CiAJdTY0IHN0YXJ0LGVuZDsgCkBAIC0xOCw2ICsxNyw4IEBACiBleHRlcm4gaW50IG51bWFfb2ZmOwogCiBleHRlcm4gdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKTsKK2V4dGVybiB2b2lkIHNyYXRfcmVzZXJ2ZV9hZGRfYXJlYShpbnQgbm9kZWlkKTsKK2V4dGVybiBpbnQgaG90YWRkX3BlcmNlbnQ7CiAKIGV4dGVybiB1bnNpZ25lZCBjaGFyIGFwaWNpZF90b19ub2RlWzI1Nl07CiAjaWZkZWYgQ09ORklHX05VTUEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYmUxNmIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2NjRfTlVNTk9ERVNfSAotI2RlZmluZSBfQVNNX1g4NjY0X05VTU5PREVTX0ggMQotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotI2RlZmluZSBOT0RFU19TSElGVAk2Ci0jZWxzZQotI2RlZmluZSBOT0RFU19TSElGVAkwCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdGltZXguaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oCmluZGV4IGYxODQ0M2YuLmI5ZTUzMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oCkBAIC0zMyw3ICszMyw3IEBACiAJdW5zaWduZWQgZWF4OwogCS8qIERvbid0IGRvIGFuIGFkZGl0aW9uYWwgc3luYyBvbiBDUFVzIHdoZXJlIHdlIGtub3cKIAkgICBSRFRTQyBpcyBhbHJlYWR5IHN5bmNocm9ub3VzLiAqLwotCWFsdGVybmF0aXZlX2lvKEFTTV9OT1AyLCAiY3B1aWQiLCBYODZfRkVBVFVSRV9TWU5DX1JEVFNDLAorCWFsdGVybmF0aXZlX2lvKCJjcHVpZCIsIEFTTV9OT1AyLCBYODZfRkVBVFVSRV9TWU5DX1JEVFNDLAogCQkJICAiPWEiIChlYXgpLCAiMCIgKDEpIDogImVieCIsImVjeCIsImVkeCIsIm1lbW9yeSIpOwogCXJkdHNjbGwocmV0KTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCmluZGV4IDkyODQ4NjcuLmIyOWY3YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKQEAgLTExMSw4ICsxMTEsNiBAQAogCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCiAKLSNkZWZpbmUgcHJlcGFyZV90b19zd2l0Y2goKQlkbyB7IH0gd2hpbGUoMCkKLQogI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpCQlcCiBkbyB7CQkJCQkJXAogCWNsZWFyX2NwZW5hYmxlKCk7CQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290bWVtLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAppbmRleCBkZTNlYjhkLi5kYTJkMTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaApAQCAtNDUsNiArNDUsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG1lbWVuZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgZnJlZV9ib290bWVtICh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0gKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKTsKK2V4dGVybiB2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljICh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCk7CiBleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbG93KHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJCSB1bnNpZ25lZCBsb25nIGdvYWwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCmluZGV4IDliNDc1MWEuLmZmNjE4MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgRE1BXzMwQklUX01BU0sJMHgwMDAwMDAwMDNmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8yOUJJVF9NQVNLCTB4MDAwMDAwMDAxZmZmZmZmZlVMTAogI2RlZmluZSBETUFfMjhCSVRfTUFTSwkweDAwMDAwMDAwMGZmZmZmZmZVTEwKLSNkZWZpbmUgRE1BXzI0QklUX01BU0sgMHgwMDAwMDAwMDAwZmZmZmZmVUxMCisjZGVmaW5lIERNQV8yNEJJVF9NQVNLCTB4MDAwMDAwMDAwMGZmZmZmZlVMTAogCiAjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAxZTllYmFiLi4xNjJjNmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC03NjIsNyArNzYyLDcgQEAKICNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dSSVRFCQkyCiAjZGVmaW5lIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSCTQKIGV4dGVybiBpbnQgZG9fc3luY19maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgZW5kYnl0ZSwKLQkJCWludCBmbGFncyk7CisJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCiAvKiBmcy9sb2Nrcy5jICovCiBleHRlcm4gdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsKQEAgLTEwMzksOCArMTAzOSw4IEBACiAJaW50ICgqY2hlY2tfZmxhZ3MpKGludCk7CiAJaW50ICgqZGlyX25vdGlmeSkoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAlpbnQgKCpmbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKLQlzc2l6ZV90ICgqc3BsaWNlX3dyaXRlKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotCXNzaXplX3QgKCpzcGxpY2VfcmVhZCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IGlub2RlICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKKwlzc2l6ZV90ICgqc3BsaWNlX3dyaXRlKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBmaWxlICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKKwlzc2l6ZV90ICgqc3BsaWNlX3JlYWQpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwogfTsKIAogc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewpAQCAtMTYxMSw4ICsxNjExLDE3IEBACiBleHRlcm4gdm9pZCBkb19nZW5lcmljX21hcHBpbmdfcmVhZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkgICAgc3RydWN0IGZpbGVfcmFfc3RhdGUgKiwgc3RydWN0IGZpbGUgKiwKIAkJCQkgICAgbG9mZl90ICosIHJlYWRfZGVzY3JpcHRvcl90ICosIHJlYWRfYWN0b3JfdCk7Ci1leHRlcm4gc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKiwgc3RydWN0IGlub2RlICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKKworLyogZnMvc3BsaWNlLmMgKi8KK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqLAorCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLAorCQlzdHJ1Y3QgZmlsZSAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CitleHRlcm4gc3NpemVfdCBnZW5lcmljX3NwbGljZV9zZW5kcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQlzdHJ1Y3QgZmlsZSAqb3V0LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworZXh0ZXJuIGxvbmcgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBmaWxlICpvdXQsCisJCXNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CisKIGV4dGVybiB2b2lkCiBmaWxlX3JhX3N0YXRlX2luaXQoc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CiBleHRlcm4gc3NpemVfdCBnZW5lcmljX2ZpbGVfcmVhZHYoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IDc4NTFlNmIuLjNhYzQ1MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtNTcsNiArNTcsOCBAQAogCQkJX19HRlBfTk9GQUlMfF9fR0ZQX05PUkVUUll8X19HRlBfTk9fR1JPV3xfX0dGUF9DT01QfCBcCiAJCQlfX0dGUF9OT01FTUFMTE9DfF9fR0ZQX0hBUkRXQUxMKQogCisvKiBUaGlzIGVxdWFscyAwLCBidXQgdXNlIGNvbnN0YW50cyBpbiBjYXNlIHRoZXkgZXZlciBjaGFuZ2UgKi8KKyNkZWZpbmUgR0ZQX05PV0FJVAkoR0ZQX0FUT01JQyAmIH5fX0dGUF9ISUdIKQogLyogR0ZQX0FUT01JQyBtZWFucyBib3RoICF3YWl0IChfX0dGUF9XQUlUIG5vdCBzZXQpIGFuZCB1c2UgZW1lcmdlbmN5IHBvb2wgKi8KICNkZWZpbmUgR0ZQX0FUT01JQwkoX19HRlBfSElHSCkKICNkZWZpbmUgR0ZQX05PSU8JKF9fR0ZQX1dBSVQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IGVkMGFjN2MuLjkzZGNiZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0yNDUsNyArMjQ1LDggQEAKICNkZWZpbmUgX19jcHVleGl0ZGF0YQlfX2V4aXRkYXRhCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSB8fCBkZWZpbmVkKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWV9NT0RVTEUpCiAjZGVmaW5lIF9fbWVtaW5pdAogI2RlZmluZSBfX21lbWluaXRkYXRhCiAjZGVmaW5lIF9fbWVtZXhpdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmggYi9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAppbmRleCA5OTkwNWUxLi4wNDMzNzY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaApAQCAtMzYsNiArMzYsOCBAQAogLyogTEFUQ0ggaXMgdXNlZCBpbiB0aGUgaW50ZXJ2YWwgdGltZXIgYW5kIGZ0YXBlIHNldHVwLiAqLwogI2RlZmluZSBMQVRDSCAgKChDTE9DS19USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQkvKiBGb3IgZGl2aWRlciAqLwogCisjZGVmaW5lIExBVENIX0hQRVQgKChIUEVUX1RJQ0tfUkFURSArIEhaLzIpIC8gSFopCisKIC8qIFN1cHBvc2Ugd2Ugd2FudCB0byBkZXZpZGUgdHdvIG51bWJlcnMgTk9NIGFuZCBERU46IE5PTS9ERU4sIHRoZSB3ZSBjYW4KICAqIGltcHJvdmUgYWNjdXJhY3kgYnkgc2hpZnRpbmcgTFNIIGJpdHMsIGhlbmNlIGNhbGN1bGF0aW5nOgogICogICAgIChOT00gPDwgTFNIKSAvIERFTgpAQCAtNTEsOSArNTMsMTMgQEAKIC8qIEhaIGlzIHRoZSByZXF1ZXN0ZWQgdmFsdWUuIEFDVEhaIGlzIGFjdHVhbCBIWiAoIjw8IDgiIGlzIGZvciBhY2N1cmFjeSkgKi8KICNkZWZpbmUgQUNUSFogKFNIX0RJViAoQ0xPQ0tfVElDS19SQVRFLCBMQVRDSCwgOCkpCiAKKyNkZWZpbmUgQUNUSFpfSFBFVCAoU0hfRElWIChIUEVUX1RJQ0tfUkFURSwgTEFUQ0hfSFBFVCwgOCkpCisKIC8qIFRJQ0tfTlNFQyBpcyB0aGUgdGltZSBiZXR3ZWVuIHRpY2tzIGluIG5zZWMgYXNzdW1pbmcgcmVhbCBBQ1RIWiAqLwogI2RlZmluZSBUSUNLX05TRUMgKFNIX0RJViAoMTAwMDAwMFVMICogMTAwMCwgQUNUSFosIDgpKQogCisjZGVmaW5lIFRJQ0tfTlNFQ19IUEVUIChTSF9ESVYoMTAwMDAwMFVMICogMTAwMCwgQUNUSFpfSFBFVCwgOCkpCisKIC8qIFRJQ0tfVVNFQyBpcyB0aGUgdGltZSBiZXR3ZWVuIHRpY2tzIGluIHVzZWMgYXNzdW1pbmcgZmFrZSBVU0VSX0haICovCiAjZGVmaW5lIFRJQ0tfVVNFQyAoKDEwMDAwMDBVTCArIFVTRVJfSFovMikgLyBVU0VSX0haKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCBhMzcyMGY5Li5lMWJkMDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiBleHRlcm4gdm9pZCBidXN0X3NwaW5sb2NrcyhpbnQgeWVzKTsKIGV4dGVybiBpbnQgb29wc19pbl9wcm9ncmVzczsJCS8qIElmIHNldCwgYW4gb29wcywgcGFuaWMoKSwgQlVHKCkgb3IgZGllKCkgaXMgaW4gcHJvZ3Jlc3MgKi8KLWV4dGVybiBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMgaW50IHBhbmljX3RpbWVvdXQ7CitleHRlcm4gaW50IHBhbmljX3RpbWVvdXQ7CiBleHRlcm4gaW50IHBhbmljX29uX29vcHM7CiBleHRlcm4gaW50IHRhaW50ZWQ7CiBleHRlcm4gY29uc3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy5oIGIvaW5jbHVkZS9saW51eC9sZWRzLmgKaW5kZXggNDYxN2U3NS4uZGMyM2M3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLmgKQEAgLTE5LDM5ICsxOSwzOCBAQAogICovCiAKIGVudW0gbGVkX2JyaWdodG5lc3MgewotCUxFRF9PRkYgPSAwLAotCUxFRF9IQUxGID0gMTI3LAotCUxFRF9GVUxMID0gMjU1LAorCUxFRF9PRkYJCT0gMCwKKwlMRURfSEFMRgk9IDEyNywKKwlMRURfRlVMTAk9IDI1NSwKIH07CiAKIHN0cnVjdCBsZWRfY2xhc3NkZXYgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGJyaWdodG5lc3M7Ci0JaW50IGZsYWdzOwotI2RlZmluZSBMRURfU1VTUEVOREVEICAgICAgICgxIDw8IDApCisJY29uc3QgY2hhcgkJKm5hbWU7CisJaW50CQkJIGJyaWdodG5lc3M7CisJaW50CQkJIGZsYWdzOwogCi0JLyogQSBmdW5jdGlvbiB0byBzZXQgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIGxlZCAqLwotCXZvaWQgKCpicmlnaHRuZXNzX3NldCkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKTsKKyNkZWZpbmUgTEVEX1NVU1BFTkRFRAkJKDEgPDwgMCkKIAotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQkvKiBMRUQgRGV2aWNlIGxpbmtlZCBsaXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOworCS8qIFNldCBMRUQgYnJpZ2h0bmVzcyBsZXZlbCAqLworCXZvaWQJCSgqYnJpZ2h0bmVzc19zZXQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCQkgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcyk7CiAKLQkvKiBUcmlnZ2VyIGRhdGEgKi8KLQljaGFyICpkZWZhdWx0X3RyaWdnZXI7CisJc3RydWN0IGNsYXNzX2RldmljZQkqY2xhc3NfZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJIG5vZGU7CQkJLyogTEVEIERldmljZSBsaXN0ICovCisJY2hhcgkJCSpkZWZhdWx0X3RyaWdnZXI7CS8qIFRyaWdnZXIgdG8gdXNlICovCisKICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwotCXJ3bG9ja190IHRyaWdnZXJfbG9jazsKIAkvKiBQcm90ZWN0cyB0aGUgdHJpZ2dlciBkYXRhIGJlbG93ICovCisJcndsb2NrX3QJCSB0cmlnZ2VyX2xvY2s7CiAKLQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXI7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0cmlnX2xpc3Q7Ci0Jdm9pZCAqdHJpZ2dlcl9kYXRhOworCXN0cnVjdCBsZWRfdHJpZ2dlcgkqdHJpZ2dlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSB0cmlnX2xpc3Q7CisJdm9pZAkJCSp0cmlnZ2VyX2RhdGE7CiAjZW5kaWYKIH07CiAKIGV4dGVybiBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKLQkJCQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CisJCQkJIHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIGV4dGVybiB2b2lkIGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIGV4dGVybiB2b2lkIGxlZF9jbGFzc2Rldl9zdXNwZW5kKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIGV4dGVybiB2b2lkIGxlZF9jbGFzc2Rldl9yZXN1bWUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwpAQCAtNjUsMTYgKzY0LDE2IEBACiAKIHN0cnVjdCBsZWRfdHJpZ2dlciB7CiAJLyogVHJpZ2dlciBQcm9wZXJ0aWVzICovCi0JY29uc3QgY2hhciAqbmFtZTsKLQl2b2lkICgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKLQl2b2lkICgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOworCWNvbnN0IGNoYXIJICpuYW1lOworCXZvaWQJCSgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKKwl2b2lkCQkoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAogCS8qIExFRHMgdW5kZXIgY29udHJvbCBieSB0aGlzIHRyaWdnZXIgKGZvciBzaW1wbGUgdHJpZ2dlcnMpICovCi0Jcndsb2NrX3QgbGVkZGV2X2xpc3RfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxlZF9jZGV2czsKKwlyd2xvY2tfdAkgIGxlZGRldl9saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAgbGVkX2NkZXZzOwogCiAJLyogTGluayB0byBuZXh0IHJlZ2lzdGVyZWQgdHJpZ2dlciAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbmV4dF90cmlnOworCXN0cnVjdCBsaXN0X2hlYWQgIG5leHRfdHJpZzsKIH07CiAKIC8qIFJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgZm9yIGNvbXBsZXggdHJpZ2dlcnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDQ0ZDA3NGYuLmJmODZlZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAKIC8qCiAgKiBjb21waWxlLXRpbWUgb3B0aW9uczogdG8gYmUgcmVtb3ZlZCBhcyBzb29uIGFzIGFsbCB0aGUgZHJpdmVycyBhcmUKQEAgLTI0OCw3ICsyNDksNyBAQAogLyogdHlwZWRlZnMgKi8KIHR5cGVkZWYgdm9pZCAoKmF0YV9xY19jYl90KSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiB0eXBlZGVmIHZvaWQgKCphdGFfcHJvYmVpbml0X2ZuX3QpKHN0cnVjdCBhdGFfcG9ydCAqKTsKLXR5cGVkZWYgaW50ICgqYXRhX3Jlc2V0X2ZuX3QpKHN0cnVjdCBhdGFfcG9ydCAqLCBpbnQsIHVuc2lnbmVkIGludCAqKTsKK3R5cGVkZWYgaW50ICgqYXRhX3Jlc2V0X2ZuX3QpKHN0cnVjdCBhdGFfcG9ydCAqLCB1bnNpZ25lZCBpbnQgKik7CiB0eXBlZGVmIHZvaWQgKCphdGFfcG9zdHJlc2V0X2ZuX3QpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqKTsKIAogc3RydWN0IGF0YV9pb3BvcnRzIHsKQEAgLTQ5OSwxNSArNTAwLDE0IEBACiBleHRlcm4gdm9pZCBfX3NhdGFfcGh5X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgc2F0YV9waHlfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfYnVzX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIGludCBhdGFfc2V0X3NhdGFfc3BkKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfZHJpdmVfcHJvYmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJCWF0YV9wcm9iZWluaXRfZm5fdCBwcm9iZWluaXQsCiAJCQlhdGFfcmVzZXRfZm5fdCBzb2Z0cmVzZXQsIGF0YV9yZXNldF9mbl90IGhhcmRyZXNldCwKIAkJCWF0YV9wb3N0cmVzZXRfZm5fdCBwb3N0cmVzZXQsIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CiBleHRlcm4gdm9pZCBhdGFfc3RkX3Byb2JlaW5pdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLWV4dGVybiBpbnQgYXRhX3N0ZF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHZlcmJvc2UsCi0JCQkgICAgIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7Ci1leHRlcm4gaW50IHNhdGFfc3RkX2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgdmVyYm9zZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCAqY2xhc3MpOworZXh0ZXJuIGludCBhdGFfc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOworZXh0ZXJuIGludCBzYXRhX3N0ZF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcyk7CiBleHRlcm4gdm9pZCBhdGFfc3RkX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOwogZXh0ZXJuIGludCBhdGFfZGV2X3JldmFsaWRhdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKIAkJCSAgICAgIGludCBwb3N0X3Jlc2V0KTsKQEAgLTUyNiw2ICs1MjYsOCBAQAogZXh0ZXJuIGludCBhdGFfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0KTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKK2V4dGVybiB2b2lkIGF0YV9laF9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2V4dGVybiB2b2lkIGF0YV9laF9xY19yZXRyeShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfcmVsZWFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgYXRhX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CkBAIC01MzgsNiArNTQwLDkgQEAKIAkJCQkgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogZXh0ZXJuIHZvaWQgYXRhX3BvcnRfcXVldWVfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkICgqZm4pKHZvaWQgKiksCiAJCQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBkZWxheSk7CitleHRlcm4gdTMyIGF0YV93YWl0X3JlZ2lzdGVyKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaywgdTMyIHZhbCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBpbnRlcnZhbF9tc2VjLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXNlYyk7CiAKIC8qCiAgKiBEZWZhdWx0IGRyaXZlciBvcHMgaW1wbGVtZW50YXRpb25zCkBAIC02MzEsNyArNjM2LDYgQEAKIC8qCiAgKiBFSAogICovCi1leHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogZXh0ZXJuIHZvaWQgYXRhX2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgYXRhX2VoX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHZvaWQgYXRhX2VoX3FjX3JldHJ5KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwpAQCAtOTcyLDQgKzk3Niw5IEBACiAJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBBVEFfRE1BX1BBRF9CVUZfU1osIGFwLT5wYWQsIGFwLT5wYWRfZG1hKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYXRhX3BvcnQgKmF0YV9zaG9zdF90b19wb3J0KHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCit7CisJcmV0dXJuIChzdHJ1Y3QgYXRhX3BvcnQgKikgJmhvc3QtPmhvc3RkYXRhWzBdOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9MSUJBVEFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKaW5kZXggOTY4YjFhYS4uNGNhM2U2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaApAQCAtNTgsOCArNTgsNiBAQAogLyogbmVlZCBzb21lIGRlZmluZXMgZm9yIHRoZXNlIGZvciBhcmNocyB0aGF0IGRvbid0IHN1cHBvcnQgaXQgKi8KIGV4dGVybiB2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIC8qIFZNIGludGVyZmFjZSB0aGF0IG1heSBiZSB1c2VkIGJ5IGZpcm13YXJlIGludGVyZmFjZSAqLwotZXh0ZXJuIGludCBhZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpOwotZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpOwogZXh0ZXJuIGludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKIC8qIHJlYXNvbmFibHkgZ2VuZXJpYyBpbnRlcmZhY2UgdG8gZXhwYW5kIHRoZSBwaHlzaWNhbCBwYWdlcyBpbiBhIHpvbmUgICovCkBAIC05MiwxMSArOTAsNiBAQAogCXJldHVybiAtRU5PU1lTOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX2FkZF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JdW5zaWduZWQgbG9uZyBucl9wYWdlcykKLXsKLQlyZXR1cm4gbWhwX25vdGltcGxlbWVudGVkKF9fRlVOQ1RJT05fXyk7Ci19CiAjZW5kaWYgLyogISBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fcmVtb3ZlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQpAQCAtMTA1LDQgKzk4LDExIEBACiAJZHVtcF9zdGFjaygpOwogCXJldHVybiAtRU5PU1lTOwogfQorCisjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpIHx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZX01PRFVMRSkKK2V4dGVybiBpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTsKK2V4dGVybiBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTsKKyNlbmRpZgorCiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNmFhMDE2Zi4uMTE1NDY4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjI5LDEwICsyMjksOSBAQAogCQl1bnNpZ25lZCBsb25nIHByaXZhdGU7CQkvKiBNYXBwaW5nLXByaXZhdGUgb3BhcXVlIGRhdGE6CiAJCQkJCSAJICogdXN1YWxseSB1c2VkIGZvciBidWZmZXJfaGVhZHMKIAkJCQkJCSAqIGlmIFBhZ2VQcml2YXRlIHNldDsgdXNlZCBmb3IKLQkJCQkJCSAqIHN3cF9lbnRyeV90IGlmIFBhZ2VTd2FwQ2FjaGUuCi0JCQkJCQkgKiBXaGVuIHBhZ2UgaXMgZnJlZSwgdGhpcworCQkJCQkJICogc3dwX2VudHJ5X3QgaWYgUGFnZVN3YXBDYWNoZTsKIAkJCQkJCSAqIGluZGljYXRlcyBvcmRlciBpbiB0aGUgYnVkZHkKLQkJCQkJCSAqIHN5c3RlbS4KKwkJCQkJCSAqIHN5c3RlbSBpZiBQR19idWRkeSBpcyBzZXQuCiAJCQkJCQkgKi8KIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CS8qIElmIGxvdyBiaXQgY2xlYXIsIHBvaW50cyB0bwogCQkJCQkJICogaW5vZGUgYWRkcmVzc19zcGFjZSwgb3IgTlVMTC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCmluZGV4IDQxMmU1MmMuLmIzMWE5YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApAQCAtMTEwLDYgKzExMCw4IEBACiAvKiBGdW5jdGlvbiB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGhvb2sgcG9pbnRzLiAqLwogaW50IG5mX3JlZ2lzdGVyX2hvb2soc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpOwogdm9pZCBuZl91bnJlZ2lzdGVyX2hvb2soc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpOworaW50IG5mX3JlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCB1bnNpZ25lZCBpbnQgbik7Cit2b2lkIG5mX3VucmVnaXN0ZXJfaG9va3Moc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIHVuc2lnbmVkIGludCBuKTsKIAogLyogRnVuY3Rpb25zIHRvIHJlZ2lzdGVyIGdldC9zZXRzb2Nrb3B0IHJhbmdlcyAobm9uLWluY2x1c2l2ZSkuICBZb3UKICAgIG5lZWQgdG8gY2hlY2sgcGVybWlzc2lvbnMgeW91cnNlbGYhICovCkBAIC0yODEsMTYgKzI4Myw0MiBAQAogICAgUmV0dXJucyB0cnVlIG9yIGZhbHNlLiAqLwogZXh0ZXJuIGludCBza2JfbWFrZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHVuc2lnbmVkIGludCB3cml0YWJsZV9sZW4pOwogCi1zdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgewotCXZvaWQgKCpzYXZlKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbyk7Ci0JaW50ICgqcmVyb3V0ZSkoc3RydWN0IHNrX2J1ZmYgKipza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKTsKLQlpbnQgcmVyX3NpemU7CitzdHJ1Y3QgbmZfYWZpbmZvIHsKKwl1bnNpZ25lZCBzaG9ydAlmYW1pbHk7CisJdW5zaWduZWQgaW50CSgqY2hlY2tzdW0pKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpOworCXZvaWQJCSgqc2F2ZXJvdXRlKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5mX2luZm8gKmluZm8pOworCWludAkJKCpyZXJvdXRlKShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbyk7CisJaW50CQlyb3V0ZV9rZXlfc2l6ZTsKIH07CiAKLSNkZWZpbmUgbmZfaW5mb19yZXJvdXRlKHgpICgodm9pZCAqKXggKyBzaXplb2Yoc3RydWN0IG5mX2luZm8pKQorZXh0ZXJuIHN0cnVjdCBuZl9hZmluZm8gKm5mX2FmaW5mb1tdOworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYWZpbmZvICpuZl9nZXRfYWZpbmZvKHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKG5mX2FmaW5mb1tmYW1pbHldKTsKK30KIAotZXh0ZXJuIGludCBuZl9yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYsIHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcmVyKTsKLWV4dGVybiBpbnQgbmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihpbnQgcGYpOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK25mX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkgICAgdV9pbnQ4X3QgcHJvdG9jb2wsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87CisJdW5zaWduZWQgaW50IGNzdW0gPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWFmaW5mbyA9IG5mX2dldF9hZmluZm8oZmFtaWx5KTsKKwlpZiAoYWZpbmZvKQorCQljc3VtID0gYWZpbmZvLT5jaGVja3N1bShza2IsIGhvb2ssIGRhdGFvZmYsIHByb3RvY29sKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY3N1bTsKK30KKworZXh0ZXJuIGludCBuZl9yZWdpc3Rlcl9hZmluZm8oc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvKTsKK2V4dGVybiB2b2lkIG5mX3VucmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbyk7CisKKyNkZWZpbmUgbmZfaW5mb19yZXJvdXRlKHgpICgodm9pZCAqKXggKyBzaXplb2Yoc3RydWN0IG5mX2luZm8pKQogCiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KIGV4dGVybiB2b2lkICgqaXBfbmF0X2RlY29kZV9zZXNzaW9uKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgZmxvd2kgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKaW5kZXggNDNjMDlkNy4uODUzMDFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaApAQCAtODAsNiArODAsOCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBpbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICoqcHNrYik7CiBleHRlcm4gaW50IGlwX3hmcm1fbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICoqcHNrYik7CitleHRlcm4gdW5zaWduZWQgaW50IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJCSAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCk7CiAjZW5kaWYgLypfX0tFUk5FTF9fKi8KIAogI2VuZGlmIC8qX19MSU5VWF9JUF9ORVRGSUxURVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKaW5kZXggMDk4N2NlYS4uZWFjZTg2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaApAQCAtMyw2ICszLDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmg+CisKICNkZWZpbmUgUkFTX1BPUlQgMTcxOQogI2RlZmluZSBROTMxX1BPUlQgMTcyMAogI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0CS8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqLwpAQCAtMjUsNiArMjcsNTYgQEAKIAl9OwogfTsKIAorc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3Q7CisKK2V4dGVybiBpbnQgZ2V0X2gyMjVfYWRkcih1bnNpZ25lZCBjaGFyICpkYXRhLCBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCk7CitleHRlcm4gdm9pZCBpcF9jb25udHJhY2tfaDI0NV9leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAorCQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpOworZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKK2V4dGVybiBpbnQgKCpzZXRfaDI0NV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCQkgIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpOworZXh0ZXJuIGludCAoKnNldF9oMjI1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCQkgIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpOworZXh0ZXJuIGludCAoKnNldF9zaWdfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkJIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCBpbnQgY291bnQpOworZXh0ZXJuIGludCAoKnNldF9yYXNfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkJIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCBpbnQgY291bnQpOworZXh0ZXJuIGludCAoKm5hdF9ydHBfcnRjcF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJCSB1X2ludDE2X3QgcG9ydCwgdV9pbnQxNl90IHJ0cF9wb3J0LAorCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0cF9leHAsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogcnRjcF9leHApOworZXh0ZXJuIGludCAoKm5hdF90MTIwX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CitleHRlcm4gaW50ICgqbmF0X2gyNDVfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgICAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CitleHRlcm4gaW50ICgqbmF0X3E5MzFfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCSAgICAgaW50IGlkeCwgdV9pbnQxNl90IHBvcnQsCisJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogZXhwKTsKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCmluZGV4IDE0ZjJiZDAuLjUyYTdiOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTczLDYgKzczLDkgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCitleHRlcm4gdW5zaWduZWQgaW50IG5mX2lwNl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTsKKwogZXh0ZXJuIGludCBpcHY2X25ldGZpbHRlcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaXB2Nl9uZXRmaWx0ZXJfZmluaSh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19ORVRGSUxURVIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnVtYS5oIGIvaW5jbHVkZS9saW51eC9udW1hLmgKaW5kZXggZjBjNTM5Yi4uZTQ4MWZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9udW1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9udW1hLmgKQEAgLTMsMTEgKzMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNpZm5kZWYgQ09ORklHX0ZMQVRNRU0KLSNpbmNsdWRlIDxhc20vbnVtbm9kZXMuaD4KLSNlbmRpZgotCi0jaWZuZGVmIE5PREVTX1NISUZUCisjaWZkZWYgQ09ORklHX05PREVTX1NISUZUCisjZGVmaW5lIE5PREVTX1NISUZUICAgICBDT05GSUdfTk9ERVNfU0hJRlQKKyNlbHNlCiAjZGVmaW5lIE5PREVTX1NISUZUICAgICAwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA5ZWE2MjljLi5kMjc2YTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNDgsOCArNDgsMjAgQEAKIAogLyoKICAqIERvbid0IHVzZSB0aGUgKl9kb250dXNlIGZsYWdzLiAgVXNlIHRoZSBtYWNyb3MuICBPdGhlcndpc2UgeW91J2xsIGJyZWFrCi0gKiBsb2NrZWQtIGFuZCBkaXJ0eS1wYWdlIGFjY291bnRpbmcuICBUaGUgdG9wIGVpZ2h0IGJpdHMgb2YgcGFnZS0+ZmxhZ3MgYXJlCi0gKiB1c2VkIGZvciBwYWdlLT56b25lLCBzbyBwdXR0aW5nIGZsYWcgYml0cyB0aGVyZSBkb2Vzbid0IHdvcmsuCisgKiBsb2NrZWQtIGFuZCBkaXJ0eS1wYWdlIGFjY291bnRpbmcuCisgKgorICogVGhlIHBhZ2UgZmxhZ3MgZmllbGQgaXMgc3BsaXQgaW50byB0d28gcGFydHMsIHRoZSBtYWluIGZsYWdzIGFyZWEKKyAqIHdoaWNoIGV4dGVuZHMgZnJvbSB0aGUgbG93IGJpdHMgdXB3YXJkcywgYW5kIHRoZSBmaWVsZHMgYXJlYSB3aGljaAorICogZXh0ZW5kcyBmcm9tIHRoZSBoaWdoIGJpdHMgZG93bndhcmRzLgorICoKKyAqICB8IEZJRUxEIHwgLi4uIHwgRkxBR1MgfAorICogIE4tMSAgICAgXiAgICAgICAgICAgICAwCisgKiAgICAgICAgICAoTi1GTEFHU19SRVNFUlZFRCkKKyAqCisgKiBUaGUgZmllbGRzIGFyZWEgaXMgcmVzZXJ2ZWQgZm9yIGZpZWxkcyBtYXBwaW5nIHpvbmUsIG5vZGUgYW5kIFNQQVJTRU1FTQorICogc2VjdGlvbi4gIFRoZSBib3VuZHJ5IGJldHdlZW4gdGhlc2UgdHdvIGFyZWFzIGlzIGRlZmluZWQgYnkKKyAqIEZMQUdTX1JFU0VSVkVEIHdoaWNoIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBmaWVsZHMgc2VjdGlvbgorICogKHNlZSBsaW51eC9tbXpvbmUuaCkuICBOZXcgZmxhZ3MgbXVzdCBfbm90XyBvdmVybGFwIHdpdGggdGhpcyBhcmVhLgogICovCiAjZGVmaW5lIFBHX2xvY2tlZAkgCSAwCS8qIFBhZ2UgaXMgbG9ja2VkLiBEb24ndCB0b3VjaC4gKi8KICNkZWZpbmUgUEdfZXJyb3IJCSAxCkBAIC03NCw3ICs4Niw5IEBACiAjZGVmaW5lIFBHX21hcHBlZHRvZGlzawkJMTYJLyogSGFzIGJsb2NrcyBhbGxvY2F0ZWQgb24tZGlzayAqLwogI2RlZmluZSBQR19yZWNsYWltCQkxNwkvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqLwogI2RlZmluZSBQR19ub3NhdmVfZnJlZQkJMTgJLyogRnJlZSwgc2hvdWxkIG5vdCBiZSB3cml0dGVuICovCi0jZGVmaW5lIFBHX3VuY2FjaGVkCQkxOQkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLworI2RlZmluZSBQR19idWRkeQkJMTkJLyogUGFnZSBpcyBmcmVlLCBvbiBidWRkeSBsaXN0cyAqLworCisjZGVmaW5lIFBHX3VuY2FjaGVkCQkyMAkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLwogCiAvKgogICogR2xvYmFsIHBhZ2UgYWNjb3VudGluZy4gIE9uZSBpbnN0YW5jZSBwZXIgQ1BVLiAgT25seSB1bnNpZ25lZCBsb25ncyBhcmUKQEAgLTMxNyw2ICszMzEsMTAgQEAKICNkZWZpbmUgU2V0UGFnZU5vc2F2ZUZyZWUocGFnZSkJc2V0X2JpdChQR19ub3NhdmVfZnJlZSwgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIENsZWFyUGFnZU5vc2F2ZUZyZWUocGFnZSkJCWNsZWFyX2JpdChQR19ub3NhdmVfZnJlZSwgJihwYWdlKS0+ZmxhZ3MpCiAKKyNkZWZpbmUgUGFnZUJ1ZGR5KHBhZ2UpCQl0ZXN0X2JpdChQR19idWRkeSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIF9fU2V0UGFnZUJ1ZGR5KHBhZ2UpCV9fc2V0X2JpdChQR19idWRkeSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIF9fQ2xlYXJQYWdlQnVkZHkocGFnZSkJX19jbGVhcl9iaXQoUEdfYnVkZHksICYocGFnZSktPmZsYWdzKQorCiAjZGVmaW5lIFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkJdGVzdF9iaXQoUEdfbWFwcGVkdG9kaXNrLCAmKHBhZ2UpLT5mbGFncykKICNkZWZpbmUgU2V0UGFnZU1hcHBlZFRvRGlzayhwYWdlKSBzZXRfYml0KFBHX21hcHBlZHRvZGlzaywgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIENsZWFyUGFnZU1hcHBlZFRvRGlzayhwYWdlKSBjbGVhcl9iaXQoUEdfbWFwcGVkdG9kaXNrLCAmKHBhZ2UpLT5mbGFncykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmggYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCmluZGV4IGVjMzg0OTUuLjEyM2E3YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaApAQCAtMzYsMjcgKzM2LDE5IEBACiAJdW5zaWduZWQgaW50IHdfY291bnRlcjsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3JlYWRlcnM7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiB9OwogCiAvKiBEaWZmZXJzIGZyb20gUElQRV9CVUYgaW4gdGhhdCBQSVBFX1NJWkUgaXMgdGhlIGxlbmd0aCBvZiB0aGUgYWN0dWFsCiAgICBtZW1vcnkgYWxsb2NhdGlvbiwgd2hlcmVhcyBQSVBFX0JVRiBtYWtlcyBhdG9taWNpdHkgZ3VhcmFudGVlcy4gICovCiAjZGVmaW5lIFBJUEVfU0laRQkJUEFHRV9TSVpFCiAKLSNkZWZpbmUgUElQRV9NVVRFWChpbm9kZSkJKCYoaW5vZGUpLmlfbXV0ZXgpCi0jZGVmaW5lIFBJUEVfV0FJVChpbm9kZSkJKCYoaW5vZGUpLmlfcGlwZS0+d2FpdCkKLSNkZWZpbmUgUElQRV9SRUFERVJTKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPnJlYWRlcnMpCi0jZGVmaW5lIFBJUEVfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53cml0ZXJzKQotI2RlZmluZSBQSVBFX1dBSVRJTkdfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53YWl0aW5nX3dyaXRlcnMpCi0jZGVmaW5lIFBJUEVfUkNPVU5URVIoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+cl9jb3VudGVyKQotI2RlZmluZSBQSVBFX1dDT1VOVEVSKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPndfY291bnRlcikKLSNkZWZpbmUgUElQRV9GQVNZTkNfUkVBREVSUyhpbm9kZSkgICAgICgmKChpbm9kZSkuaV9waXBlLT5mYXN5bmNfcmVhZGVycykpCi0jZGVmaW5lIFBJUEVfRkFTWU5DX1dSSVRFUlMoaW5vZGUpICAgICAoJigoaW5vZGUpLmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpKQotCiAvKiBEcm9wIHRoZSBpbm9kZSBzZW1hcGhvcmUgYW5kIHdhaXQgZm9yIGEgcGlwZSBldmVudCwgYXRvbWljYWxseSAqLwotdm9pZCBwaXBlX3dhaXQoc3RydWN0IGlub2RlICogaW5vZGUpOwordm9pZCBwaXBlX3dhaXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSk7CiAKLXN0cnVjdCBpbm9kZSogcGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7Ci12b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSogaW5vZGUpOworc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqIGFsbG9jX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7Cit2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKK3ZvaWQgX19mcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICopOwogCiAvKgogICogc3BsaWNlIGlzIHRpZWQgdG8gcGlwZXMgYXMgYSB0cmFuc3BvcnQgKGF0IGxlYXN0IGZvciBub3cpLCBzbyB3ZSdsbCBqdXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IDEzNTg3MWQuLjRiNDdhMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC03OSw3ICs3OSw3IEBACiBzdHJ1Y3Qgdm1jb3JlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdW5zaWduZWQgbG9uZyBsb25nIHBhZGRyOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKIAlsb2ZmX3Qgb2Zmc2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKaW5kZXggNzc0ZTFhYy4uZjFmYmFlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCkBAIC0yMjcsOCArMjI3LDggQEAKIAkJCQkgKi8KIAogCS8qIFRoZXNlIGFyZSBvbmx5IHZhbGlkIHdpdGggZmVhdHVyZSBiaXQgJzQnICovCi0JX191NjQJcmVzaGFwZV9wb3NpdGlvbjsJLyogbmV4dCBhZGRyZXNzIGluIGFycmF5LXNwYWNlIGZvciByZXNoYXBlICovCiAJX191MzIJbmV3X2xldmVsOwkvKiBuZXcgbGV2ZWwgd2UgYXJlIHJlc2hhcGluZyB0bwkJKi8KKwlfX3U2NAlyZXNoYXBlX3Bvc2l0aW9uOwkvKiBuZXh0IGFkZHJlc3MgaW4gYXJyYXktc3BhY2UgZm9yIHJlc2hhcGUgKi8KIAlfX3UzMglkZWx0YV9kaXNrczsJLyogY2hhbmdlIGluIG51bWJlciBvZiByYWlkX2Rpc2tzCQkqLwogCV9fdTMyCW5ld19sYXlvdXQ7CS8qIG5ldyBsYXlvdXQJCQkJCSovCiAJX191MzIJbmV3X2NodW5rOwkvKiBuZXcgY2h1bmsgc2l6ZSAoYnl0ZXMpCQkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA1NDFmNDgyOC4uZTM1MzljMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtNjg0LDYgKzY4NCw3IEBACiAKIHN0cnVjdCBhdWRpdF9jb250ZXh0OwkJLyogU2VlIGF1ZGl0LmMgKi8KIHN0cnVjdCBtZW1wb2xpY3k7CitzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvOwogCiBlbnVtIHNsZWVwX3R5cGUgewogCVNMRUVQX05PUk1BTCwKQEAgLTg4Miw2ICs4ODMsMTEgQEAKIAogCWF0b21pY190IGZzX2V4Y2w7CS8qIGhvbGRpbmcgZnMgZXhjbHVzaXZlIHJlc291cmNlcyAqLwogCXN0cnVjdCByY3VfaGVhZCByY3U7CisKKwkvKgorCSAqIGNhY2hlIGxhc3QgdXNlZCBwaXBlIGZvciBzcGxpY2UKKwkgKi8KKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpzcGxpY2VfcGlwZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgcGlkX3QgcHJvY2Vzc19ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKQEAgLTEyMDMsOSArMTIwOSwxMCBAQAogI2RlZmluZSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KSBcCiAJd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IGcpCiAKLSNkZWZpbmUgdGhyZWFkX2dyb3VwX2xlYWRlcihwKQkocC0+cGlkID09IHAtPnRnaWQpCisvKiBkZV90aHJlYWQgZGVwZW5kcyBvbiB0aHJlYWRfZ3JvdXBfbGVhZGVyIG5vdCBiZWluZyBhIHBpZCBiYXNlZCBjaGVjayAqLworI2RlZmluZSB0aHJlYWRfZ3JvdXBfbGVhZGVyKHApCShwID09IHAtPmdyb3VwX2xlYWRlcikKIAotc3RhdGljIGlubGluZSB0YXNrX3QgKm5leHRfdGhyZWFkKHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgdGFza190ICpuZXh0X3RocmVhZChjb25zdCB0YXNrX3QgKnApCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHAtPnRocmVhZF9ncm91cC5uZXh0KSwKIAkJCQl0YXNrX3QsIHRocmVhZF9ncm91cCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmggYi9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmgKaW5kZXggNjMzNjk4Ny4uMjkyNWU2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY3JlZW5faW5mby5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NyZWVuX2luZm8uaApAQCAtNDEsNyArNDEsOCBAQAogCXUxNiB2ZXNhcG1fb2ZmOwkJLyogMHgzMCAqLwogCXUxNiBwYWdlczsJCS8qIDB4MzIgKi8KIAl1MTYgdmVzYV9hdHRyaWJ1dGVzOwkvKiAweDM0ICovCi0JCQkJLyogMHgzNiAtLSAweDNmIHJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdTMyIGNhcGFiaWxpdGllczsgICAgICAgLyogMHgzNiAqLworCQkJCS8qIDB4M2EgLS0gMHgzZiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggZmNhOWIwZi4uNWEwOTU1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTczLDcgKzczLDcgQEAKIH0KIAogLyogU3RhcnQgb2YgcmVhZCBjYWxjdWxhdGlvbiAtLSBmZXRjaCBsYXN0IGNvbXBsZXRlIHdyaXRlciB0b2tlbiAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCByZWFkX3NlcWJlZ2luKGNvbnN0IHNlcWxvY2tfdCAqc2wpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIHJlYWRfc2VxYmVnaW4oY29uc3Qgc2VxbG9ja190ICpzbCkKIHsKIAl1bnNpZ25lZCByZXQgPSBzbC0+c2VxdWVuY2U7CiAJc21wX3JtYigpOwpAQCAtODgsNyArODgsNyBAQAogICogICAgCiAgKiBVc2luZyB4b3Igc2F2ZXMgb25lIGNvbmRpdGlvbmFsIGJyYW5jaC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgcmVhZF9zZXFyZXRyeShjb25zdCBzZXFsb2NrX3QgKnNsLCB1bnNpZ25lZCBpdikKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlYWRfc2VxcmV0cnkoY29uc3Qgc2VxbG9ja190ICpzbCwgdW5zaWduZWQgaXYpCiB7CiAJc21wX3JtYigpOwogCXJldHVybiAoaXYgJiAxKSB8IChzbC0+c2VxdWVuY2UgXiBpdik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCBkZWUyMjE0Li5jNjEzMDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTEzLDExICsxMyw2IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi1leHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gY2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKLWV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKLQogZXh0ZXJuIGNoYXIgKnN0cm5kdXBfdXNlcihjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nKTsKIAogLyoKQEAgLTcwLDYgKzY1LDE4IEBACiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUk5MRU4KIGV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICosX19rZXJuZWxfc2l6ZV90KTsKICNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJQQlJLCitleHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU0VQCitleHRlcm4gY2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU1BOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJDU1BOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9NRU1TRVQKIGV4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKaW5kZXggNTBjYWIyYS4uNTAzNTY0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKQEAgLTE5NywxNSArMTk3LDE2IEBACiAJcmV0dXJuIHJxc3RwLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZCsrXTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3ZjX3Rha2VfcGFnZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQorc3RhdGljIGlubGluZSB2b2lkIHN2Y190YWtlX3BhZ2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKLQlpZiAocnFzdHAtPnJxX2FyZ2hpIDw9IHJxc3RwLT5ycV9hcmd1c2VkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocnFzdHAtPnJxX2FyZ2hpIDw9IHJxc3RwLT5ycV9hcmd1c2VkKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAJcnFzdHAtPnJxX2FyZ2hpLS07CiAJcnFzdHAtPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkXSA9CiAJCXJxc3RwLT5ycV9hcmdwYWdlc1tycXN0cC0+cnFfYXJnaGldOwogCXJxc3RwLT5ycV9yZXN1c2VkKys7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfcHVzaGJhY2tfYWxscGFnZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggNTRlYWM4YS4uNWIxZmRmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTE1NSw2ICsxNTUsNyBAQAogLyogbGludXgvbW0vcGFnZV9hbGxvYy5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsaGlnaF9wYWdlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIGV4dGVybiBsb25nIG5yX3N3YXBfcGFnZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfcGFnZXModm9pZCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfcGFnZXNfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggNTcxNzE0Ny4uZjAwMWJhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNTY5LDkgKzU2OSwxMiBAQAogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfb3BlbmF0KHVuc2lnbmVkIGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCQkgICBpbnQgZmxhZ3MsIGludCBtb2RlKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdW5zaGFyZSh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MpOwotYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwKLQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOworCithc21saW5rYWdlIGxvbmcgc3lzX3NwbGljZShpbnQgZmRfaW4sIGxvZmZfdCBfX3VzZXIgKm9mZl9pbiwKKwkJCSAgIGludCBmZF9vdXQsIGxvZmZfdCBfX3VzZXIgKm9mZl9vdXQsCisJCQkgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiBhc21saW5rYWdlIGxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZShpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBuYnl0ZXMsCi0JCQkJCWludCBmbGFncyk7CisJCQkJCXVuc2lnbmVkIGludCBmbGFncyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oIGIvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCmluZGV4IDA5NzZhMTYuLjMxNTQ4MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmgKQEAgLTYsOSArNiwxMCBAQAogZXh0ZXJuIGludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjb25zdCBjaGFyICpmbGFncywgc2l6ZV90IHNpemUpOwogZXh0ZXJuIGludCB0dHlfcHJlcGFyZV9mbGlwX3N0cmluZyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICoqY2hhcnMsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqKmNoYXJzLCBjaGFyICoqZmxhZ3MsIHNpemVfdCBzaXplKTsKK3ZvaWQgdHR5X3NjaGVkdWxlX2ZsaXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHR0eV9pbnNlcnRfZmxpcF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgY2gsIGNoYXIgZmxhZykKKwkJCQkJdW5zaWduZWQgY2hhciBjaCwgY2hhciBmbGFnKQogewogCXN0cnVjdCB0dHlfYnVmZmVyICp0YiA9IHR0eS0+YnVmLnRhaWw7CiAJaWYgKHRiICYmIHRiLT5hY3RpdmUgJiYgdGItPnVzZWQgPCB0Yi0+c2l6ZSkgewpAQCAtMTksMjYgKzIwLDQgQEAKIAlyZXR1cm4gdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyh0dHksICZjaCwgJmZsYWcsIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdHR5X3NjaGVkdWxlX2ZsaXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0JaWYgKHR0eS0+YnVmLnRhaWwgIT0gTlVMTCkgewotCQl0dHktPmJ1Zi50YWlsLT5hY3RpdmUgPSAwOwotCQl0dHktPmJ1Zi50YWlsLT5jb21taXQgPSB0dHktPmJ1Zi50YWlsLT51c2VkOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrLCAxKTsKLX0KLQotI3VuZGVmIF9JTkxJTkVfCi0KLQogI2VuZGlmIC8qIF9MSU5VWF9UVFlfRkxJUF9IICovCi0KLQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaCBiL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaAppbmRleCBmYWRjNTM1Li5kYzdjNjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmgKKysrIGIvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oCkBAIC0xMiw2ICsxMiwxMSBAQAogI2Vsc2UKICNkZWZpbmUgTU9EVUxFX1ZFUk1BR0lDX1BSRUVNUFQgIiIKICNlbmRpZgorI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEICJtb2RfdW5sb2FkICIKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEICIiCisjZW5kaWYKICNpZm5kZWYgTU9EVUxFX0FSQ0hfVkVSTUFHSUMKICNkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMgIiIKICNlbmRpZgpAQCAtMTksNSArMjQsNSBAQAogI2RlZmluZSBWRVJNQUdJQ19TVFJJTkcgCQkJCQkJXAogCVVUU19SRUxFQVNFICIgIgkJCQkJCQlcCiAJTU9EVUxFX1ZFUk1BR0lDX1NNUCBNT0RVTEVfVkVSTUFHSUNfUFJFRU1QVCAJCQlcCi0JTU9EVUxFX0FSQ0hfVkVSTUFHSUMgCQkJCQkJXAorCU1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEIE1PRFVMRV9BUkNIX1ZFUk1BR0lDIAkJXAogCSJnY2MtIiBfX3N0cmluZ2lmeShfX0dOVUNfXykgIi4iIF9fc3RyaW5naWZ5KF9fR05VQ19NSU5PUl9fKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oIGIvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCmluZGV4IDI1ZjcwOGYuLjU5ZjBjODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaAorKysgYi9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKQEAgLTQ4LDMxICs0OCw3IEBACiAJcmV0dXJuIGluZXQ2X2VoYXNoZm4obGFkZHIsIGxwb3J0LCBmYWRkciwgZnBvcnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbmV0Nl9oYXNoKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKLQkJCQlzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmxpc3Q7Ci0Jcndsb2NrX3QgKmxvY2s7Ci0KLQlCVUdfVFJBUChza191bmhhc2hlZChzaykpOwotCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7Ci0JCWxpc3QgPSAmaGFzaGluZm8tPmxpc3RlbmluZ19oYXNoW2luZXRfc2tfbGlzdGVuX2hhc2hmbihzayldOwotCQlsb2NrID0gJmhhc2hpbmZvLT5saGFzaF9sb2NrOwotCQlpbmV0X2xpc3Rlbl93bG9jayhoYXNoaW5mbyk7Ci0JfSBlbHNlIHsKLQkJdW5zaWduZWQgaW50IGhhc2g7Ci0JCXNrLT5za19oYXNoID0gaGFzaCA9IGluZXQ2X3NrX2VoYXNoZm4oc2spOwotCQloYXNoICY9IChoYXNoaW5mby0+ZWhhc2hfc2l6ZSAtIDEpOwotCQlsaXN0ID0gJmhhc2hpbmZvLT5laGFzaFtoYXNoXS5jaGFpbjsKLQkJbG9jayA9ICZoYXNoaW5mby0+ZWhhc2hbaGFzaF0ubG9jazsKLQkJd3JpdGVfbG9jayhsb2NrKTsKLQl9Ci0KLQlfX3NrX2FkZF9ub2RlKHNrLCBsaXN0KTsKLQlzb2NrX3Byb3RfaW5jX3VzZShzay0+c2tfcHJvdCk7Ci0Jd3JpdGVfdW5sb2NrKGxvY2spOwotfQorZXh0ZXJuIHZvaWQgX19pbmV0Nl9oYXNoKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywgc3RydWN0IHNvY2sgKnNrKTsKIAogLyoKICAqIFNvY2tldHMgaW4gVENQX0NMT1NFIHN0YXRlIGFyZSBfYWx3YXlzXyB0YWtlbiBvdXQgb2YgdGhlIGhhc2gsIHNvCkBAIC04MCw1MiArNTYsMTIgQEAKICAqCiAgKiBUaGUgc29ja2hhc2ggbG9jayBtdXN0IGJlIGhlbGQgYXMgYSByZWFkZXIgaGVyZS4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqCi0JCV9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKK2V4dGVybiBzdHJ1Y3Qgc29jayAqX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAogCQkJCQkgICBjb25zdCB1MTYgc3BvcnQsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJCSAgIGNvbnN0IHUxNiBobnVtLAotCQkJCQkgICBjb25zdCBpbnQgZGlmKQotewotCXN0cnVjdCBzb2NrICpzazsKLQljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoc3BvcnQsIGhudW0pOwotCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgotCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCi0JICovCi0JdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOwotCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhhc2hpbmZvLCBoYXNoKTsKLQotCXByZWZldGNoKGhlYWQtPmNoYWluLmZpcnN0KTsKLQlyZWFkX2xvY2soJmhlYWQtPmxvY2spOwotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKLQkJLyogRm9yIElQVjYgZG8gdGhlIGNoZWFwZXIgcG9ydCBhbmQgZmFtaWx5IHRlc3RzIGZpcnN0LiAqLwotCQlpZiAoSU5FVDZfTUFUQ0goc2ssIGhhc2gsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCi0JCQlnb3RvIGhpdDsgLyogWW91IHN1bmsgbXkgYmF0dGxlc2hpcCEgKi8KLQl9Ci0JLyogTXVzdCBjaGVjayBmb3IgYSBUSU1FX1dBSVQnZXIgYmVmb3JlIGdvaW5nIHRvIGxpc3RlbmVyIGhhc2guICovCi0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICYoaGVhZCArIGhhc2hpbmZvLT5laGFzaF9zaXplKS0+Y2hhaW4pIHsKLQkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwotCi0JCWlmKCooKF9fdTMyICopJih0dy0+dHdfZHBvcnQpKQk9PSBwb3J0cwkmJgotCQkgICBzay0+c2tfZmFtaWx5CQk9PSBQRl9JTkVUNikgewotCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOwotCi0JCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZ0dzYtPnR3X3Y2X2RhZGRyLCBzYWRkcikJJiYKLQkJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikJJiYKLQkJCSAgICAoIXNrLT5za19ib3VuZF9kZXZfaWYgfHwgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkaWYpKQotCQkJCWdvdG8gaGl0OwotCQl9Ci0JfQotCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKLQlyZXR1cm4gTlVMTDsKLQotaGl0OgotCXNvY2tfaG9sZChzayk7Ci0JcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOwotCXJldHVybiBzazsKLX0KKwkJCQkJICAgY29uc3QgaW50IGRpZik7CiAKIGV4dGVybiBzdHJ1Y3Qgc29jayAqaW5ldDZfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggOGZlNjE1Ni4uM2QyZTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC05NSw2ICs5NSw3IEBACiBleHRlcm4gaW50CQlpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCWlwX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCWlwX21jX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCWlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKikpOwogZXh0ZXJuIGludAkJaXBfZG9fbmF0KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJCWlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcCk7CiBleHRlcm4gaW50CQlpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIGludCBpcGZyYWdvayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94MjVkZXZpY2UuaCBiL2luY2x1ZGUvbmV0L3gyNWRldmljZS5oCmluZGV4IDFhMzE4MzcuLjFkMTBjODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3gyNWRldmljZS5oCisrKyBiL2luY2x1ZGUvbmV0L3gyNWRldmljZS5oCkBAIC04LDYgKzgsNyBAQAogc3RhdGljIGlubGluZSBfX2JlMTYgeDI1X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7CisJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCQogCXJldHVybiBodG9ucyhFVEhfUF9YMjUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IGRjNjg2MmQuLmRlNmNlNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTE0MCw3ICsxNDAsNiBAQAogCSAqCiAJICogU3RhdHVzOiBSRVFVSVJFRAkoYXQgbGVhc3Qgb25lIG9mIHRoZW0pCiAJICovCi0JaW50ICgqIGVoX3N0cmF0ZWd5X2hhbmRsZXIpKHN0cnVjdCBTY3NpX0hvc3QgKik7CiAJaW50ICgqIGVoX2Fib3J0X2hhbmRsZXIpKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJaW50ICgqIGVoX2RldmljZV9yZXNldF9oYW5kbGVyKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCWludCAoKiBlaF9idXNfcmVzZXRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKaW5kZXggYjM2NTdmMS4uY2NhMWQ0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmgKQEAgLTUwLDYgKzUwLDExIEBACiAJdW5zaWduZWQgaW50IGNyZWF0ZV93b3JrX3F1ZXVlIDogMTsKIAogCS8qCisJICogQWxsb3dzIGEgdHJhbnNwb3J0IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIuCisJICovCisJdm9pZCAoKiBlaF9zdHJhdGVneV9oYW5kbGVyKShzdHJ1Y3QgU2NzaV9Ib3N0ICopOworCisJLyoKIAkgKiBUaGlzIGlzIGFuIG9wdGlvbmFsIHJvdXRpbmUgdGhhdCBhbGxvd3MgdGhlIHRyYW5zcG9ydCB0byBiZWNvbWUKIAkgKiBpbnZvbHZlZCB3aGVuIGEgc2NzaSBpbyB0aW1lciBmaXJlcy4gVGhlIHJldHVybiB2YWx1ZSB0ZWxscyB0aGUKIAkgKiB0aW1lciByb3V0aW5lIGhvdyB0byBmaW5pc2ggdGhlIGlvIHRpbWVvdXQgaGFuZGxpbmc6CmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggM2IzNmExZC4uZjFiYzJmMCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMzc0LDYgKzM3NCwxNSBAQAogCSAgU0xPQiBpcyBtb3JlIHNwYWNlIGVmZmljaWVudCBidXQgZG9lcyBub3Qgc2NhbGUgd2VsbCBhbmQgaXMKIAkgIG1vcmUgc3VzY2VwdGlibGUgdG8gZnJhZ21lbnRhdGlvbi4KIAorY29uZmlnIERPVUJMRUZBVUxUCisJZGVmYXVsdCB5CisJYm9vbCAiRW5hYmxlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIiBpZiBFTUJFRERFRCAmJiBYODZfMzIKKwloZWxwCisgICAgICAgICAgVGhpcyBvcHRpb24gYWxsb3dzIHRyYXBwaW5nIG9mIHJhcmUgZG91YmxlZmF1bHQgZXhjZXB0aW9ucyB0aGF0CisgICAgICAgICAgd291bGQgb3RoZXJ3aXNlIGNhdXNlIGEgc3lzdGVtIHRvIHNpbGVudGx5IHJlYm9vdC4gRGlzYWJsaW5nIHRoaXMKKyAgICAgICAgICBvcHRpb24gc2F2ZXMgYWJvdXQgNGsgYW5kIG1pZ2h0IGNhdXNlIHlvdSBtdWNoIGFkZGl0aW9uYWwgZ3JleQorICAgICAgICAgIGhhaXIuCisKIGVuZG1lbnUJCSMgR2VuZXJhbCBzZXR1cAogCiBjb25maWcgVElOWV9TSE1FTQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNmMyZWViOC4uMWE5Nzg3YSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpcGVfZnNfaS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CkBAIC05NDEsNiArOTQyLDkgQEAKIAlpZiAodHNrLT5pb19jb250ZXh0KQogCQlleGl0X2lvX2NvbnRleHQoKTsKIAorCWlmICh0c2stPnNwbGljZV9waXBlKQorCQlfX2ZyZWVfcGlwZV9pbmZvKHRzay0+c3BsaWNlX3BpcGUpOworCiAJLyogUEZfREVBRCBjYXVzZXMgZmluYWwgcHV0X3Rhc2tfc3RydWN0IGFmdGVyIHdlIHNjaGVkdWxlLiAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwogCUJVR19PTih0c2stPmZsYWdzICYgUEZfREVBRCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCBmMTgxZmY0Li5kMmE3Mjk2IDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTUwMSw2ICs1MDEsNyBAQAogCiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldHVybiByZXQ7CisJCWNwdV9yZWxheCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9NYWtlZmlsZSBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKaW5kZXggMmIzM2Y4NS4uOWY3N2Y1MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9NYWtlZmlsZQorKysgYi9rZXJuZWwvaXJxL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogCi1vYmoteSA6PSBoYW5kbGUubyBtYW5hZ2UubyBzcHVyaW91cy5vIG1pZ3JhdGlvbi5vCitvYmoteSA6PSBoYW5kbGUubyBtYW5hZ2UubyBzcHVyaW91cy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19JUlFfUFJPQkUpICs9IGF1dG9wcm9iZS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCitvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IDUyYTg2NTUuLjEzNGY5ZjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtMSw2ICsxLDUgQEAKLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEpCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKIHZvaWQgc2V0X3BlbmRpbmdfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewpAQCAtNjEsNSArNjAsMyBAQAogCX0KIAljcHVzX2NsZWFyKHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSk7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCBmODk1YzdjLi5jYzJhNGM5IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjcsNyArMjcsNiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhwYXVzZV9vbl9vb3BzX2xvY2spOwogCiBpbnQgcGFuaWNfdGltZW91dDsKLUVYUE9SVF9TWU1CT0wocGFuaWNfdGltZW91dCk7CiAKIEFUT01JQ19OT1RJRklFUl9IRUFEKHBhbmljX25vdGlmaWVyX2xpc3QpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGRkMTUzZDYuLjM2NWYwYjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC02NjUsMTMgKzY2NSw1NSBAQAogfQogCiAvKgorICogV2UgcGxhY2UgaW50ZXJhY3RpdmUgdGFza3MgYmFjayBpbnRvIHRoZSBhY3RpdmUgYXJyYXksIGlmIHBvc3NpYmxlLgorICoKKyAqIFRvIGd1YXJhbnRlZSB0aGF0IHRoaXMgZG9lcyBub3Qgc3RhcnZlIGV4cGlyZWQgdGFza3Mgd2UgaWdub3JlIHRoZQorICogaW50ZXJhY3Rpdml0eSBvZiBhIHRhc2sgaWYgdGhlIGZpcnN0IGV4cGlyZWQgdGFzayBoYWQgdG8gd2FpdCBtb3JlCisgKiB0aGFuIGEgJ3JlYXNvbmFibGUnIGFtb3VudCBvZiB0aW1lLiBUaGlzIGRlYWRsaW5lIHRpbWVvdXQgaXMKKyAqIGxvYWQtZGVwZW5kZW50LCBhcyB0aGUgZnJlcXVlbmN5IG9mIGFycmF5IHN3aXRjaGVkIGRlY3JlYXNlcyB3aXRoCisgKiBpbmNyZWFzaW5nIG51bWJlciBvZiBydW5uaW5nIHRhc2tzLiBXZSBhbHNvIGlnbm9yZSB0aGUgaW50ZXJhY3Rpdml0eQorICogaWYgYSBiZXR0ZXIgc3RhdGljX3ByaW8gdGFzayBoYXMgZXhwaXJlZCwgYW5kIHN3aXRjaCBwZXJpb2RpY2FsbHkKKyAqIHJlZ2FyZGxlc3MsIHRvIGVuc3VyZSB0aGF0IGhpZ2hseSBpbnRlcmFjdGl2ZSB0YXNrcyBkbyBub3Qgc3RhcnZlCisgKiB0aGUgbGVzcyBmb3J0dW5hdGUgZm9yIHVucmVhc29uYWJseSBsb25nIHBlcmlvZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGV4cGlyZWRfc3RhcnZpbmcocnVucXVldWVfdCAqcnEpCit7CisJaW50IGxpbWl0OworCisJLyoKKwkgKiBBcnJheXMgd2VyZSByZWNlbnRseSBzd2l0Y2hlZCwgYWxsIGlzIHdlbGwKKwkgKi8KKwlpZiAoIXJxLT5leHBpcmVkX3RpbWVzdGFtcCkKKwkJcmV0dXJuIDA7CisKKwlsaW1pdCA9IFNUQVJWQVRJT05fTElNSVQgKiBycS0+bnJfcnVubmluZzsKKworCS8qCisJICogSXQncyB0aW1lIHRvIHN3aXRjaCBhcnJheXMKKwkgKi8KKwlpZiAoamlmZmllcyAtIHJxLT5leHBpcmVkX3RpbWVzdGFtcCA+PSBsaW1pdCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFRoZXJlJ3MgYSBiZXR0ZXIgc2VsZWN0aW9uIGluIHRoZSBleHBpcmVkIGFycmF5CisJICovCisJaWYgKHJxLT5jdXJyLT5zdGF0aWNfcHJpbyA+IHJxLT5iZXN0X2V4cGlyZWRfcHJpbykKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIEFsbCBpcyB3ZWxsCisJICovCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBfX2FjdGl2YXRlX3Rhc2sgLSBtb3ZlIGEgdGFzayB0byB0aGUgcnVucXVldWUuCiAgKi8KIHN0YXRpYyB2b2lkIF9fYWN0aXZhdGVfdGFzayh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQogewogCXByaW9fYXJyYXlfdCAqdGFyZ2V0ID0gcnEtPmFjdGl2ZTsKIAotCWlmIChiYXRjaF90YXNrKHApKQorCWlmICh1bmxpa2VseShiYXRjaF90YXNrKHApIHx8IChleHBpcmVkX3N0YXJ2aW5nKHJxKSAmJiAhcnRfdGFzayhwKSkpKQogCQl0YXJnZXQgPSBycS0+ZXhwaXJlZDsKIAllbnF1ZXVlX3Rhc2socCwgdGFyZ2V0KTsKIAlycS0+bnJfcnVubmluZysrOwpAQCAtMjQ5MCwyMiArMjUzMiw2IEBACiB9CiAKIC8qCi0gKiBXZSBwbGFjZSBpbnRlcmFjdGl2ZSB0YXNrcyBiYWNrIGludG8gdGhlIGFjdGl2ZSBhcnJheSwgaWYgcG9zc2libGUuCi0gKgotICogVG8gZ3VhcmFudGVlIHRoYXQgdGhpcyBkb2VzIG5vdCBzdGFydmUgZXhwaXJlZCB0YXNrcyB3ZSBpZ25vcmUgdGhlCi0gKiBpbnRlcmFjdGl2aXR5IG9mIGEgdGFzayBpZiB0aGUgZmlyc3QgZXhwaXJlZCB0YXNrIGhhZCB0byB3YWl0IG1vcmUKLSAqIHRoYW4gYSAncmVhc29uYWJsZScgYW1vdW50IG9mIHRpbWUuIFRoaXMgZGVhZGxpbmUgdGltZW91dCBpcwotICogbG9hZC1kZXBlbmRlbnQsIGFzIHRoZSBmcmVxdWVuY3kgb2YgYXJyYXkgc3dpdGNoZWQgZGVjcmVhc2VzIHdpdGgKLSAqIGluY3JlYXNpbmcgbnVtYmVyIG9mIHJ1bm5pbmcgdGFza3MuIFdlIGFsc28gaWdub3JlIHRoZSBpbnRlcmFjdGl2aXR5Ci0gKiBpZiBhIGJldHRlciBzdGF0aWNfcHJpbyB0YXNrIGhhcyBleHBpcmVkOgotICovCi0jZGVmaW5lIEVYUElSRURfU1RBUlZJTkcocnEpIFwKLQkoKFNUQVJWQVRJT05fTElNSVQgJiYgKChycSktPmV4cGlyZWRfdGltZXN0YW1wICYmIFwKLQkJKGppZmZpZXMgLSAocnEpLT5leHBpcmVkX3RpbWVzdGFtcCA+PSBcCi0JCQlTVEFSVkFUSU9OX0xJTUlUICogKChycSktPm5yX3J1bm5pbmcpICsgMSkpKSB8fCBcCi0JCQkoKHJxKS0+Y3Vyci0+c3RhdGljX3ByaW8gPiAocnEpLT5iZXN0X2V4cGlyZWRfcHJpbykpCi0KLS8qCiAgKiBBY2NvdW50IHVzZXIgY3B1IHRpbWUgdG8gYSBwcm9jZXNzLgogICogQHA6IHRoZSBwcm9jZXNzIHRoYXQgdGhlIGNwdSB0aW1lIGdldHMgYWNjb3VudGVkIHRvCiAgKiBAaGFyZGlycV9vZmZzZXQ6IHRoZSBvZmZzZXQgdG8gc3VidHJhY3QgZnJvbSBoYXJkaXJxX2NvdW50KCkKQEAgLTI2NDAsNyArMjY2Niw3IEBACiAKIAkJaWYgKCFycS0+ZXhwaXJlZF90aW1lc3RhbXApCiAJCQlycS0+ZXhwaXJlZF90aW1lc3RhbXAgPSBqaWZmaWVzOwotCQlpZiAoIVRBU0tfSU5URVJBQ1RJVkUocCkgfHwgRVhQSVJFRF9TVEFSVklORyhycSkpIHsKKwkJaWYgKCFUQVNLX0lOVEVSQUNUSVZFKHApIHx8IGV4cGlyZWRfc3RhcnZpbmcocnEpKSB7CiAJCQllbnF1ZXVlX3Rhc2socCwgcnEtPmV4cGlyZWQpOwogCQkJaWYgKHAtPnN0YXRpY19wcmlvIDwgcnEtPmJlc3RfZXhwaXJlZF9wcmlvKQogCQkJCXJxLT5iZXN0X2V4cGlyZWRfcHJpbyA9IHAtPnN0YXRpY19wcmlvOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDVjY2FhYzUuLmIxNGY4OTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTg2OCw3ICs4NjgsNiBAQAogCQlpZiAodCA9PSBOVUxMKQogCQkJLyogcmVzdGFydCBiYWxhbmNpbmcgYXQgdGhpcyB0aHJlYWQgKi8KIAkJCXQgPSBwLT5zaWduYWwtPmN1cnJfdGFyZ2V0ID0gcDsKLQkJQlVHX09OKHQtPnRnaWQgIT0gcC0+dGdpZCk7CiAKIAkJd2hpbGUgKCF3YW50c19zaWduYWwoc2lnLCB0KSkgewogCQkJdCA9IG5leHRfdGhyZWFkKHQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c19uaS5jIGIva2VybmVsL3N5c19uaS5jCmluZGV4IGQ4Mjg2NGMuLjU0MzMxOTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNfbmkuYworKysgYi9rZXJuZWwvc3lzX25pLmMKQEAgLTEyMCwzICsxMjAsMTUgQEAKIGNvbmRfc3lzY2FsbChwcGNfcnRhcyk7CiBjb25kX3N5c2NhbGwoc3lzX3NwdV9ydW4pOwogY29uZF9zeXNjYWxsKHN5c19zcHVfY3JlYXRlKTsKKworLyogbW11IGRlcGVuZGluZyB3ZWFrIHN5c2NhbGwgZW50cmllcyAqLworY29uZF9zeXNjYWxsKHN5c19tcHJvdGVjdCk7Citjb25kX3N5c2NhbGwoc3lzX21zeW5jKTsKK2NvbmRfc3lzY2FsbChzeXNfbWxvY2spOworY29uZF9zeXNjYWxsKHN5c19tdW5sb2NrKTsKK2NvbmRfc3lzY2FsbChzeXNfbWxvY2thbGwpOworY29uZF9zeXNjYWxsKHN5c19tdW5sb2NrYWxsKTsKK2NvbmRfc3lzY2FsbChzeXNfbWluY29yZSk7Citjb25kX3N5c2NhbGwoc3lzX21hZHZpc2UpOworY29uZF9zeXNjYWxsKHN5c19tcmVtYXApOworY29uZF9zeXNjYWxsKHN5c19yZW1hcF9maWxlX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggYzNhODc0Zi4uODgzNzczNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTgxLDkgKzgxLDEwIEBACiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIHR5cGVkZWYgc3RydWN0IHR2ZWNfdF9iYXNlX3MgdHZlY19iYXNlX3Q7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodHZlY19iYXNlX3QgKiwgdHZlY19iYXNlcyk7CisKIHR2ZWNfYmFzZV90IGJvb3RfdHZlY19iYXNlczsKIEVYUE9SVF9TWU1CT0woYm9vdF90dmVjX2Jhc2VzKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh0dmVjX2Jhc2VfdCAqLCB0dmVjX2Jhc2VzKSA9IHsgJmJvb3RfdHZlY19iYXNlcyB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3J1bm5pbmdfdGltZXIodHZlY19iYXNlX3QgKmJhc2UsCiAJCQkJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKQEAgLTEyMjQsMjggKzEyMjUsMzYgQEAKIHsKIAlpbnQgajsKIAl0dmVjX2Jhc2VfdCAqYmFzZTsKKwlzdGF0aWMgY2hhciBfX2RldmluaXRkYXRhIHR2ZWNfYmFzZV9kb25lW05SX0NQVVNdOwogCi0JYmFzZSA9IHBlcl9jcHUodHZlY19iYXNlcywgY3B1KTsKLQlpZiAoIWJhc2UpIHsKKwlpZiAoIXR2ZWNfYmFzZV9kb25lW2NwdV0pIHsKIAkJc3RhdGljIGNoYXIgYm9vdF9kb25lOwogCi0JCS8qCi0JCSAqIENhbm5vdCBkbyBhbGxvY2F0aW9uIGluIGluaXRfdGltZXJzIGFzIHRoYXQgcnVucyBiZWZvcmUgdGhlCi0JCSAqIGFsbG9jYXRvciBpbml0aWFsaXplcyAoYW5kIHdvdWxkIHdhc3RlIG1lbW9yeSBpZiB0aGVyZSBhcmUKLQkJICogbW9yZSBwb3NzaWJsZSBDUFVzIHRoYW4gd2lsbCBldmVyIGJlIGluc3RhbGxlZC9icm91Z2h0IHVwKS4KLQkJICovCiAJCWlmIChib290X2RvbmUpIHsKKwkJCS8qCisJCQkgKiBUaGUgQVBzIHVzZSB0aGlzIHBhdGggbGF0ZXIgaW4gYm9vdAorCQkJICovCiAJCQliYXNlID0ga21hbGxvY19ub2RlKHNpemVvZigqYmFzZSksIEdGUF9LRVJORUwsCiAJCQkJCQljcHVfdG9fbm9kZShjcHUpKTsKIAkJCWlmICghYmFzZSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCW1lbXNldChiYXNlLCAwLCBzaXplb2YoKmJhc2UpKTsKKwkJCXBlcl9jcHUodHZlY19iYXNlcywgY3B1KSA9IGJhc2U7CiAJCX0gZWxzZSB7Ci0JCQliYXNlID0gJmJvb3RfdHZlY19iYXNlczsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGZvciB0aGUgYm9vdCBDUFUgLSB3ZSB1c2UgY29tcGlsZS10aW1lCisJCQkgKiBzdGF0aWMgaW5pdGlhbGlzYXRpb24gYmVjYXVzZSBwZXItY3B1IG1lbW9yeSBpc24ndAorCQkJICogcmVhZHkgeWV0IGFuZCBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdG9ycyBhcmUgbm90CisJCQkgKiBpbml0aWFsaXNlZCBlaXRoZXIuCisJCQkgKi8KIAkJCWJvb3RfZG9uZSA9IDE7CisJCQliYXNlID0gJmJvb3RfdHZlY19iYXNlczsKIAkJfQotCQlwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSkgPSBiYXNlOworCQl0dmVjX2Jhc2VfZG9uZVtjcHVdID0gMTsKKwl9IGVsc2UgeworCQliYXNlID0gcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOwogCX0KKwogCXNwaW5fbG9ja19pbml0KCZiYXNlLT5sb2NrKTsKIAlmb3IgKGogPSAwOyBqIDwgVFZOX1NJWkU7IGorKykgewogCQlJTklUX0xJU1RfSEVBRChiYXNlLT50djUudmVjICsgaik7CkBAIC0xNDU1LDcgKzE0NjQsNyBAQAogCSAqLwogCWlmIChqaWZmaWVzICUgSU5URVJQT0xBVE9SX0FESlVTVCA9PSAwKQogCXsKLQkJaWYgKHRpbWVfaW50ZXJwb2xhdG9yLT5za2lwcyA9PSAwICYmIHRpbWVfaW50ZXJwb2xhdG9yLT5vZmZzZXQgPiBUSUNLX05TRUMpCisJCWlmICh0aW1lX2ludGVycG9sYXRvci0+c2tpcHMgPT0gMCAmJiB0aW1lX2ludGVycG9sYXRvci0+b2Zmc2V0ID4gdGlja19uc2VjKQogCQkJdGltZV9pbnRlcnBvbGF0b3ItPm5zZWNfcGVyX2N5Yy0tOwogCQlpZiAodGltZV9pbnRlcnBvbGF0b3ItPm5zX3NraXBwZWQgPiBJTlRFUlBPTEFUT1JfTUFYX1NLSVAgJiYgdGltZV9pbnRlcnBvbGF0b3ItPm9mZnNldCA9PSAwKQogCQkJdGltZV9pbnRlcnBvbGF0b3ItPm5zZWNfcGVyX2N5YysrOwpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5jIGIvbGliL3N0cmluZy5jCmluZGV4IGIzYzI4YTMuLjA2NGY2MzEgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJpbmcuYworKysgYi9saWIvc3RyaW5nLmMKQEAgLTM2Miw2ICszNjIsNyBAQAogRVhQT1JUX1NZTUJPTChzdHJzcG4pOwogI2VuZGlmCiAKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSQ1NQTgogLyoqCiAgKiBzdHJjc3BuIC0gQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIGluaXRpYWwgc3Vic3RyaW5nIG9mIEBzIHdoaWNoIGRvZXMKICAqIAlub3QgY29udGFpbiBsZXR0ZXJzIGluIEByZWplY3QKQEAgLTM4NCw2ICszODUsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIEVYUE9SVF9TWU1CT0woc3RyY3Nwbik7CisjZW5kaWYKIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJQQlJLCiAvKioKQEAgLTQwMyw2ICs0MDUsNyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woc3RycGJyayk7CiAjZW5kaWYKIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJTRVAKQEAgLTQ2Nyw3ICs0NzAsNyBAQAogdm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQogewogCWNoYXIgKnRtcCA9IGRlc3Q7Ci0JY2hhciAqcyA9IHNyYzsKKwljb25zdCBjaGFyICpzID0gc3JjOwogCiAJd2hpbGUgKGNvdW50LS0pCiAJCSp0bXArKyA9ICpzKys7CmRpZmYgLS1naXQgYS9tbS9ib290bWVtLmMgYi9tbS9ib290bWVtLmMKaW5kZXggZDNlM2JkMi4uZDIxM2ZlZCAxMDA2NDQKLS0tIGEvbW0vYm9vdG1lbS5jCisrKyBiL21tL2Jvb3RtZW0uYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJcmV0dXJuKGZyZWVfYWxsX2Jvb3RtZW1fY29yZShOT0RFX0RBVEEoMCkpKTsKIH0KIAotdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCit2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKQogewogCWJvb3RtZW1fZGF0YV90ICpiZGF0YTsKIAl2b2lkICpwdHI7CkBAIC00MDksNyArNDA5LDE0IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShiZGF0YSwgJmJkYXRhX2xpc3QsIGxpc3QpCiAJCWlmICgocHRyID0gX19hbGxvY19ib290bWVtX2NvcmUoYmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCAwKSkpCiAJCQlyZXR1cm4ocHRyKTsKKwlyZXR1cm4gTlVMTDsKK30KIAordm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCit7CisJdm9pZCAqbWVtID0gX19hbGxvY19ib290bWVtX25vcGFuaWMoc2l6ZSxhbGlnbixnb2FsKTsKKwlpZiAobWVtKQorCQlyZXR1cm4gbWVtOwogCS8qCiAJICogV2hvb3BzLCB3ZSBjYW5ub3Qgc2F0aXNmeSB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0LgogCSAqLwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDA5ZjZlNGEuLmQ0NDQyMjkgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTE2LDggKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CS8qIGZvciB0cnlfdG9fcmVsZWFzZV9wYWdlKCksCi0JCQkJCWJ1ZmZlcl9oZWFkc19vdmVyX2xpbWl0ICovCisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgpAQCAtMjgsOCArMjcsNiBAQAogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotI2luY2x1ZGUgImludGVybmFsLmgiCi0KIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWdlcyB0byB0YWtlIG9mZiB0aGUgTFJVIGZvciBtaWdyYXRpb24gKi8KICNkZWZpbmUgTUlHUkFURV9DSFVOS19TSVpFIDI1NgogCkBAIC0xNzYsNyArMTczLDYgQEAKIHJldHJ5OgogCXJldHVybiAtRUFHQUlOOwogfQotRVhQT1JUX1NZTUJPTChzd2FwX3BhZ2UpOwogCiAvKgogICogUmVtb3ZlIHJlZmVyZW5jZXMgZm9yIGEgcGFnZSBhbmQgZXN0YWJsaXNoIHRoZSBuZXcgcGFnZSB3aXRoIHRoZSBjb3JyZWN0CkBAIC0yMzQsNyArMjMwLDcgQEAKIAlpZiAoIXBhZ2VfbWFwcGluZyhwYWdlKSB8fCBwYWdlX2NvdW50KHBhZ2UpICE9IG5yX3JlZnMgfHwKIAkJCSpyYWRpeF9wb2ludGVyICE9IHBhZ2UpIHsKIAkJd3JpdGVfdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggZTc4MGQxOS4uZTZlZTEyMyAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMTIxLDE0ICsxMjEsMjYgQEAKIAkJICogb25seSBjYWxsIGlmIHdlJ3JlIGFib3V0IHRvIGZhaWwuCiAJCSAqLwogCQluID0gbnJfZnJlZV9wYWdlcygpOworCisJCS8qCisJCSAqIExlYXZlIHJlc2VydmVkIHBhZ2VzLiBUaGUgcGFnZXMgYXJlIG5vdCBmb3IgYW5vbnltb3VzIHBhZ2VzLgorCQkgKi8KKwkJaWYgKG4gPD0gdG90YWxyZXNlcnZlX3BhZ2VzKQorCQkJZ290byBlcnJvcjsKKwkJZWxzZQorCQkJbiAtPSB0b3RhbHJlc2VydmVfcGFnZXM7CisKKwkJLyoKKwkJICogTGVhdmUgdGhlIGxhc3QgMyUgZm9yIHJvb3QKKwkJICovCiAJCWlmICghY2FwX3N5c19hZG1pbikKIAkJCW4gLT0gbiAvIDMyOwogCQlmcmVlICs9IG47CiAKIAkJaWYgKGZyZWUgPiBwYWdlcykKIAkJCXJldHVybiAwOwotCQl2bV91bmFjY3RfbWVtb3J5KHBhZ2VzKTsKLQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZ290byBlcnJvcjsKIAl9CiAKIAlhbGxvd2VkID0gKHRvdGFscmFtX3BhZ2VzIC0gaHVnZXRsYl90b3RhbF9wYWdlcygpKQpAQCAtMTUwLDcgKzE2Miw3IEBACiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZ2bV9jb21taXR0ZWRfc3BhY2UpIDwgKGxvbmcpYWxsb3dlZCkKIAkJcmV0dXJuIDA7Ci0KK2Vycm9yOgogCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMpOwogCiAJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjAsNiArMjMyLDE3IEBACiAKIAlpZiAoYnJrIDwgbW0tPmVuZF9jb2RlKQogCQlnb3RvIG91dDsKKworCS8qCisJICogQ2hlY2sgYWdhaW5zdCBybGltaXQgaGVyZS4gSWYgdGhpcyBjaGVjayBpcyBkb25lIGxhdGVyIGFmdGVyIHRoZSB0ZXN0CisJICogb2Ygb2xkYnJrIHdpdGggbmV3YnJrIHRoZW4gaXQgY2FuIGVzY2FwZSB0aGUgdGVzdCBhbmQgbGV0IHRoZSBkYXRhCisJICogc2VnbWVudCBncm93IGJleW9uZCBpdHMgc2V0IGxpbWl0IHRoZSBpbiBjYXNlIHdoZXJlIHRoZSBsaW1pdCBpcworCSAqIG5vdCBwYWdlIGFsaWduZWQgLVJhbSBHdXB0YQorCSAqLworCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCWlmIChybGltIDwgUkxJTV9JTkZJTklUWSAmJiBicmsgLSBtbS0+c3RhcnRfZGF0YSA+IHJsaW0pCisJCWdvdG8gb3V0OworCiAJbmV3YnJrID0gUEFHRV9BTElHTihicmspOwogCW9sZGJyayA9IFBBR0VfQUxJR04obW0tPmJyayk7CiAJaWYgKG9sZGJyayA9PSBuZXdicmspCkBAIC0yMzIsMTEgKzI1NSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIENoZWNrIGFnYWluc3QgcmxpbWl0Li4gKi8KLQlybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9EQVRBXS5ybGltX2N1cjsKLQlpZiAocmxpbSA8IFJMSU1fSU5GSU5JVFkgJiYgYnJrIC0gbW0tPnN0YXJ0X2RhdGEgPiBybGltKQotCQlnb3RvIG91dDsKLQogCS8qIENoZWNrIGFnYWluc3QgZXhpc3RpbmcgbW1hcCBtYXBwaW5ncy4gKi8KIAlpZiAoZmluZF92bWFfaW50ZXJzZWN0aW9uKG1tLCBvbGRicmssIG5ld2JyaytQQUdFX1NJWkUpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGRiNDVlZmEuLjAyOWZhZGEgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTE0NywxNCArMTE0NywyNiBAQAogCQkgKiBvbmx5IGNhbGwgaWYgd2UncmUgYWJvdXQgdG8gZmFpbC4KIAkJICovCiAJCW4gPSBucl9mcmVlX3BhZ2VzKCk7CisKKwkJLyoKKwkJICogTGVhdmUgcmVzZXJ2ZWQgcGFnZXMuIFRoZSBwYWdlcyBhcmUgbm90IGZvciBhbm9ueW1vdXMgcGFnZXMuCisJCSAqLworCQlpZiAobiA8PSB0b3RhbHJlc2VydmVfcGFnZXMpCisJCQlnb3RvIGVycm9yOworCQllbHNlCisJCQluIC09IHRvdGFscmVzZXJ2ZV9wYWdlczsKKworCQkvKgorCQkgKiBMZWF2ZSB0aGUgbGFzdCAzJSBmb3Igcm9vdAorCQkgKi8KIAkJaWYgKCFjYXBfc3lzX2FkbWluKQogCQkJbiAtPSBuIC8gMzI7CiAJCWZyZWUgKz0gbjsKIAogCQlpZiAoZnJlZSA+IHBhZ2VzKQogCQkJcmV0dXJuIDA7Ci0JCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMpOwotCQlyZXR1cm4gLUVOT01FTTsKKworCQlnb3RvIGVycm9yOwogCX0KIAogCWFsbG93ZWQgPSB0b3RhbHJhbV9wYWdlcyAqIHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvIC8gMTAwOwpAQCAtMTE3NSw3ICsxMTg3LDcgQEAKIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJnZtX2NvbW1pdHRlZF9zcGFjZSkgPCAobG9uZylhbGxvd2VkKQogCQlyZXR1cm4gMDsKLQorZXJyb3I6CiAJdm1fdW5hY2N0X21lbW9yeShwYWdlcyk7CiAKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDZkY2NlM2EuLjc1ZDdmNDggMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtNzIsMTMgKzcyLDEyIEBACiBpbnQgdm1fZGlydHlfcmF0aW8gPSA0MDsKIAogLyoKLSAqIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIGBrdXBkYXRlJy1zdHlsZSB3cml0ZWJhY2tzLCBpbiBjZW50aXNlY29uZHMKLSAqIChodW5kcmVkdGhzIG9mIGEgc2Vjb25kKQorICogVGhlIGludGVydmFsIGJldHdlZW4gYGt1cGRhdGUnLXN0eWxlIHdyaXRlYmFja3MsIGluIGppZmZpZXMKICAqLwogaW50IGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCA9IDUgKiBIWjsKIAogLyoKLSAqIFRoZSBsb25nZXN0IG51bWJlciBvZiBjZW50aXNlY29uZHMgZm9yIHdoaWNoIGRhdGEgaXMgYWxsb3dlZCB0byByZW1haW4gZGlydHkKKyAqIFRoZSBsb25nZXN0IG51bWJlciBvZiBqaWZmaWVzIGZvciB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gcmVtYWluIGRpcnR5CiAgKi8KIGludCBkaXJ0eV9leHBpcmVfaW50ZXJ2YWwgPSAzMCAqIEhaOwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggZGM1MjNhMS4uOTdkNjgyNyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTEsNiArNTEsNyBAQAogRVhQT1JUX1NZTUJPTChub2RlX3Bvc3NpYmxlX21hcCk7CiB1bnNpZ25lZCBsb25nIHRvdGFscmFtX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBsb25nIHRvdGFsaGlnaF9wYWdlcyBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXMgX19yZWFkX21vc3RseTsKIGxvbmcgbnJfc3dhcF9wYWdlczsKIGludCBwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb247CiAKQEAgLTE1MSw3ICsxNTIsOCBAQAogCQkJMSA8PCBQR19yZWNsYWltIHwKIAkJCTEgPDwgUEdfc2xhYiAgICB8CiAJCQkxIDw8IFBHX3N3YXBjYWNoZSB8Ci0JCQkxIDw8IFBHX3dyaXRlYmFjayApOworCQkJMSA8PCBQR193cml0ZWJhY2sgfAorCQkJMSA8PCBQR19idWRkeSApOwogCXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwogCXJlc2V0X3BhZ2VfbWFwY291bnQocGFnZSk7CiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CkBAIC0yMzYsMTIgKzIzOCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgewogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpOwotCV9fU2V0UGFnZVByaXZhdGUocGFnZSk7CisJX19TZXRQYWdlQnVkZHkocGFnZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBybXZfcGFnZV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlfX0NsZWFyUGFnZVByaXZhdGUocGFnZSk7CisJX19DbGVhclBhZ2VCdWRkeShwYWdlKTsKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOwogfQogCkBAIC0yODAsMTEgKzI4MiwxMyBAQAogICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhIHBhZ2UgaXMgZnJlZSAmJiBpcyB0aGUgYnVkZHkKICAqIHdlIGNhbiBkbyBjb2FsZXNjZSBhIHBhZ2UgYW5kIGl0cyBidWRkeSBpZgogICogKGEpIHRoZSBidWRkeSBpcyBub3QgaW4gYSBob2xlICYmCi0gKiAoYikgdGhlIGJ1ZGR5IGlzIGZyZWUgJiYKLSAqIChjKSB0aGUgYnVkZHkgaXMgb24gdGhlIGJ1ZGR5IHN5c3RlbSAmJgotICogKGQpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGhhdmUgdGhlIHNhbWUgb3JkZXIuCi0gKiBmb3IgcmVjb3JkaW5nIHBhZ2UncyBvcmRlciwgd2UgdXNlIHBhZ2VfcHJpdmF0ZShwYWdlKSBhbmQgUEdfcHJpdmF0ZS4KKyAqIChiKSB0aGUgYnVkZHkgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSAmJgorICogKGMpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGhhdmUgdGhlIHNhbWUgb3JkZXIuCiAgKgorICogRm9yIHJlY29yZGluZyB3aGV0aGVyIGEgcGFnZSBpcyBpbiB0aGUgYnVkZHkgc3lzdGVtLCB3ZSB1c2UgUEdfYnVkZHkuCisgKiBTZXR0aW5nLCBjbGVhcmluZywgYW5kIHRlc3RpbmcgUEdfYnVkZHkgaXMgc2VyaWFsaXplZCBieSB6b25lLT5sb2NrLgorICoKKyAqIEZvciByZWNvcmRpbmcgcGFnZSdzIG9yZGVyLCB3ZSB1c2UgcGFnZV9wcml2YXRlKHBhZ2UpLgogICovCiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2lzX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCiB7CkBAIC0yOTMsMTAgKzI5NywxMCBAQAogCQlyZXR1cm4gMDsKICNlbmRpZgogCi0gICAgICAgaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICAgICAgICAgICAmJgotICAgICAgICAgICAocGFnZV9vcmRlcihwYWdlKSA9PSBvcmRlcikgJiYKLSAgICAgICAgICAgIHBhZ2VfY291bnQocGFnZSkgPT0gMCkKKwlpZiAoUGFnZUJ1ZGR5KHBhZ2UpICYmIHBhZ2Vfb3JkZXIocGFnZSkgPT0gb3JkZXIpIHsKKwkJQlVHX09OKHBhZ2VfY291bnQocGFnZSkgIT0gMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKKwl9CiAgICAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxMyw3ICszMTcsNyBAQAogICogYXMgbmVjZXNzYXJ5LCBwbHVzIHNvbWUgYWNjb3VudGluZyBuZWVkZWQgdG8gcGxheSBuaWNlbHkgd2l0aCBvdGhlcgogICogcGFydHMgb2YgdGhlIFZNIHN5c3RlbS4KICAqIEF0IGVhY2ggbGV2ZWwsIHdlIGtlZXAgYSBsaXN0IG9mIHBhZ2VzLCB3aGljaCBhcmUgaGVhZHMgb2YgY29udGludW91cwotICogZnJlZSBwYWdlcyBvZiBsZW5ndGggb2YgKDEgPDwgb3JkZXIpIGFuZCBtYXJrZWQgd2l0aCBQR19Qcml2YXRlLlBhZ2UncworICogZnJlZSBwYWdlcyBvZiBsZW5ndGggb2YgKDEgPDwgb3JkZXIpIGFuZCBtYXJrZWQgd2l0aCBQR19idWRkeS4gUGFnZSdzCiAgKiBvcmRlciBpcyByZWNvcmRlZCBpbiBwYWdlX3ByaXZhdGUocGFnZSkgZmllbGQuCiAgKiBTbyB3aGVuIHdlIGFyZSBhbGxvY2F0aW5nIG9yIGZyZWVpbmcgb25lLCB3ZSBjYW4gZGVyaXZlIHRoZSBzdGF0ZSBvZiB0aGUKICAqIG90aGVyLiAgVGhhdCBpcywgaWYgd2UgYWxsb2NhdGUgYSBzbWFsbCBibG9jaywgYW5kIGJvdGggd2VyZSAgIApAQCAtMzc2LDcgKzM4MCw4IEBACiAJCQkxIDw8IFBHX3NsYWIJfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAogCQkJMSA8PCBQR193cml0ZWJhY2sgfAotCQkJMSA8PCBQR19yZXNlcnZlZCApKSkpCisJCQkxIDw8IFBHX3Jlc2VydmVkIHwKKwkJCTEgPDwgUEdfYnVkZHkgKSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlfX0NsZWFyUGFnZURpcnR5KHBhZ2UpOwpAQCAtNTI0LDcgKzUyOSw4IEBACiAJCQkxIDw8IFBHX3NsYWIgICAgfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAogCQkJMSA8PCBQR193cml0ZWJhY2sgfAotCQkJMSA8PCBQR19yZXNlcnZlZCApKSkpCisJCQkxIDw8IFBHX3Jlc2VydmVkIHwKKwkJCTEgPDwgUEdfYnVkZHkgKSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAogCS8qCkBAIC0yNDcyLDYgKzI0NzgsMzggQEAKIH0KIAogLyoKKyAqIGNhbGN1bGF0ZV90b3RhbHJlc2VydmVfcGFnZXMgLSBjYWxsZWQgd2hlbiBzeXNjdGxfbG93ZXJfem9uZV9yZXNlcnZlX3JhdGlvCisgKglvciBtaW5fZnJlZV9rYnl0ZXMgY2hhbmdlcy4KKyAqLworc3RhdGljIHZvaWQgY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcyh2b2lkKQoreworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlX3BhZ2VzID0gMDsKKwlpbnQgaSwgajsKKworCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKKwkJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOworCQkJdW5zaWduZWQgbG9uZyBtYXggPSAwOworCisJCQkvKiBGaW5kIHZhbGlkIGFuZCBtYXhpbXVtIGxvd21lbV9yZXNlcnZlIGluIHRoZSB6b25lICovCisJCQlmb3IgKGogPSBpOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKKwkJCQlpZiAoem9uZS0+bG93bWVtX3Jlc2VydmVbal0gPiBtYXgpCisJCQkJCW1heCA9IHpvbmUtPmxvd21lbV9yZXNlcnZlW2pdOworCQkJfQorCisJCQkvKiB3ZSB0cmVhdCBwYWdlc19oaWdoIGFzIHJlc2VydmVkIHBhZ2VzLiAqLworCQkJbWF4ICs9IHpvbmUtPnBhZ2VzX2hpZ2g7CisKKwkJCWlmIChtYXggPiB6b25lLT5wcmVzZW50X3BhZ2VzKQorCQkJCW1heCA9IHpvbmUtPnByZXNlbnRfcGFnZXM7CisJCQlyZXNlcnZlX3BhZ2VzICs9IG1heDsKKwkJfQorCX0KKwl0b3RhbHJlc2VydmVfcGFnZXMgPSByZXNlcnZlX3BhZ2VzOworfQorCisvKgogICogc2V0dXBfcGVyX3pvbmVfbG93bWVtX3Jlc2VydmUgLSBjYWxsZWQgd2hlbmV2ZXIKICAqCXN5c2N0bF9sb3dlcl96b25lX3Jlc2VydmVfcmF0aW8gY2hhbmdlcy4gIEVuc3VyZXMgdGhhdCBlYWNoIHpvbmUKICAqCWhhcyBhIGNvcnJlY3QgcGFnZXMgcmVzZXJ2ZWQgdmFsdWUsIHNvIGFuIGFkZXF1YXRlIG51bWJlciBvZgpAQCAtMjUwMiw2ICsyNTQwLDkgQEAKIAkJCX0KIAkJfQogCX0KKworCS8qIHVwZGF0ZSB0b3RhbHJlc2VydmVfcGFnZXMgKi8KKwljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKIC8qCkBAIC0yNTU2LDYgKzI1OTcsOSBAQAogCQl6b25lLT5wYWdlc19oaWdoICA9IHpvbmUtPnBhZ2VzX21pbiArIHRtcCAvIDI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJfQorCisJLyogdXBkYXRlIHRvdGFscmVzZXJ2ZV9wYWdlcyAqLworCWNhbGN1bGF0ZV90b3RhbHJlc2VydmVfcGFnZXMoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBmMDU1YzE0Li5lNmVmOWJkNSAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtNDIwLDYgKzQyMCw3IEBACiAJdW5zaWduZWQgbG9uZyBtYXhfZnJlZWFibGU7CiAJdW5zaWduZWQgbG9uZyBub2RlX2FsbG9jczsKIAl1bnNpZ25lZCBsb25nIG5vZGVfZnJlZXM7CisJdW5zaWduZWQgbG9uZyBub2RlX292ZXJmbG93OwogCWF0b21pY190IGFsbG9jaGl0OwogCWF0b21pY190IGFsbG9jbWlzczsKIAlhdG9taWNfdCBmcmVlaGl0OwpAQCAtNDY1LDYgKzQ2Niw3IEBACiAjZGVmaW5lCVNUQVRTX0lOQ19FUlIoeCkJKCh4KS0+ZXJyb3JzKyspCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFQUxMT0NTKHgpCSgoeCktPm5vZGVfYWxsb2NzKyspCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFRlJFRVMoeCkJKCh4KS0+bm9kZV9mcmVlcysrKQorI2RlZmluZSBTVEFUU19JTkNfQUNPVkVSRkxPVyh4KSAgICgoeCktPm5vZGVfb3ZlcmZsb3crKykKICNkZWZpbmUJU1RBVFNfU0VUX0ZSRUVBQkxFKHgsIGkpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoKHgpLT5tYXhfZnJlZWFibGUgPCBpKQkJCQlcCkBAIC00ODQsNiArNDg2LDcgQEAKICNkZWZpbmUJU1RBVFNfSU5DX0VSUih4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFQUxMT0NTKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUJU1RBVFNfSU5DX05PREVGUkVFUyh4KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNUQVRTX0lOQ19BQ09WRVJGTE9XKHgpICAgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19TRVRfRlJFRUFCTEUoeCwgaSkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFUU19JTkNfQUxMT0NISVQoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFUU19JTkNfQUxMT0NNSVNTKHgpCWRvIHsgfSB3aGlsZSAoMCkKQEAgLTE0NTMsNyArMTQ1NiwxNCBAQAogCWludCBpOwogCiAJZmxhZ3MgfD0gY2FjaGVwLT5nZnBmbGFnczsKKyNpZm5kZWYgQ09ORklHX01NVQorCS8qIG5vbW11IHVzZXMgc2xhYidzIGZvciBwcm9jZXNzIGFub255bW91cyBtZW1vcnkgYWxsb2NhdGlvbnMsIHNvCisJICogcmVxdWlyZXMgX19HRlBfQ09NUCB0byBwcm9wZXJseSByZWZjb3VudCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMiCisJICovCisJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZWlkLCAoZmxhZ3MgfCBfX0dGUF9DT01QKSwgY2FjaGVwLT5nZnBvcmRlcik7CisjZWxzZQogCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGVpZCwgZmxhZ3MsIGNhY2hlcC0+Z2Zwb3JkZXIpOworI2VuZGlmCiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gTlVMTDsKIAlhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMjMxOCwxMyArMjMyOCwxNSBAQAogCiAvKiBHZXQgdGhlIG1lbW9yeSBmb3IgYSBzbGFiIG1hbmFnZW1lbnQgb2JqLiAqLwogc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY19zbGFibWdtdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwLAotCQkJCSAgIGludCBjb2xvdXJfb2ZmLCBnZnBfdCBsb2NhbF9mbGFncykKKwkJCQkgICBpbnQgY29sb3VyX29mZiwgZ2ZwX3QgbG9jYWxfZmxhZ3MsCisJCQkJICAgaW50IG5vZGVpZCkKIHsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CiAKIAlpZiAoT0ZGX1NMQUIoY2FjaGVwKSkgewogCQkvKiBTbGFiIG1hbmFnZW1lbnQgb2JqIGlzIG9mZi1zbGFiLiAqLwotCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLT5zbGFicF9jYWNoZSwgbG9jYWxfZmxhZ3MpOworCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAtPnNsYWJwX2NhY2hlLAorCQkJCQkgICAgICBsb2NhbF9mbGFncywgbm9kZWlkKTsKIAkJaWYgKCFzbGFicCkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CkBAIC0yMzM0LDYgKzIzNDYsNyBAQAogCXNsYWJwLT5pbnVzZSA9IDA7CiAJc2xhYnAtPmNvbG91cm9mZiA9IGNvbG91cl9vZmY7CiAJc2xhYnAtPnNfbWVtID0gb2JqcCArIGNvbG91cl9vZmY7CisJc2xhYnAtPm5vZGVpZCA9IG5vZGVpZDsKIAlyZXR1cm4gc2xhYnA7CiB9CiAKQEAgLTI1MTksNyArMjUzMiw3IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJLyogR2V0IHNsYWIgbWFuYWdlbWVudC4gKi8KLQlzbGFicCA9IGFsbG9jX3NsYWJtZ210KGNhY2hlcCwgb2JqcCwgb2Zmc2V0LCBsb2NhbF9mbGFncyk7CisJc2xhYnAgPSBhbGxvY19zbGFibWdtdChjYWNoZXAsIG9ianAsIG9mZnNldCwgbG9jYWxfZmxhZ3MsIG5vZGVpZCk7CiAJaWYgKCFzbGFicCkKIAkJZ290byBvcHBzMTsKIApAQCAtMzA4MCw5ICszMDkzLDExIEBACiAJCQlpZiAobDMtPmFsaWVuICYmIGwzLT5hbGllbltub2RlaWRdKSB7CiAJCQkJYWxpZW4gPSBsMy0+YWxpZW5bbm9kZWlkXTsKIAkJCQlzcGluX2xvY2soJmFsaWVuLT5sb2NrKTsKLQkJCQlpZiAodW5saWtlbHkoYWxpZW4tPmF2YWlsID09IGFsaWVuLT5saW1pdCkpCisJCQkJaWYgKHVubGlrZWx5KGFsaWVuLT5hdmFpbCA9PSBhbGllbi0+bGltaXQpKSB7CisJCQkJCVNUQVRTX0lOQ19BQ09WRVJGTE9XKGNhY2hlcCk7CiAJCQkJCV9fZHJhaW5fYWxpZW5fY2FjaGUoY2FjaGVwLAogCQkJCQkJCSAgICBhbGllbiwgbm9kZWlkKTsKKwkJCQl9CiAJCQkJYWxpZW4tPmVudHJ5W2FsaWVuLT5hdmFpbCsrXSA9IG9ianA7CiAJCQkJc3Bpbl91bmxvY2soJmFsaWVuLT5sb2NrKTsKIAkJCX0gZWxzZSB7CkBAIC0zNzYwLDcgKzM3NzUsNyBAQAogCXNlcV9wdXRzKG0sICIgOiBzbGFiZGF0YSA8YWN0aXZlX3NsYWJzPiA8bnVtX3NsYWJzPiA8c2hhcmVkYXZhaWw+Iik7CiAjaWYgU1RBVFMKIAlzZXFfcHV0cyhtLCAiIDogZ2xvYmFsc3RhdCA8bGlzdGFsbG9jcz4gPG1heG9ianM+IDxncm93bj4gPHJlYXBlZD4gIgotCQkgIjxlcnJvcj4gPG1heGZyZWVhYmxlPiA8bm9kZWFsbG9jcz4gPHJlbW90ZWZyZWVzPiIpOworCQkgIjxlcnJvcj4gPG1heGZyZWVhYmxlPiA8bm9kZWFsbG9jcz4gPHJlbW90ZWZyZWVzPiA8YWxpZW5vdmVyZmxvdz4iKTsKIAlzZXFfcHV0cyhtLCAiIDogY3B1c3RhdCA8YWxsb2NoaXQ+IDxhbGxvY21pc3M+IDxmcmVlaGl0PiA8ZnJlZW1pc3M+Iik7CiAjZW5kaWYKIAlzZXFfcHV0YyhtLCAnXG4nKTsKQEAgLTM4NzQsMTEgKzM4ODksMTIgQEAKIAkJdW5zaWduZWQgbG9uZyBtYXhfZnJlZWFibGUgPSBjYWNoZXAtPm1heF9mcmVlYWJsZTsKIAkJdW5zaWduZWQgbG9uZyBub2RlX2FsbG9jcyA9IGNhY2hlcC0+bm9kZV9hbGxvY3M7CiAJCXVuc2lnbmVkIGxvbmcgbm9kZV9mcmVlcyA9IGNhY2hlcC0+bm9kZV9mcmVlczsKKwkJdW5zaWduZWQgbG9uZyBvdmVyZmxvd3MgPSBjYWNoZXAtPm5vZGVfb3ZlcmZsb3c7CiAKIAkJc2VxX3ByaW50ZihtLCAiIDogZ2xvYmFsc3RhdCAlN2x1ICU2bHUgJTVsdSAlNGx1IFwKLQkJCQklNGx1ICU0bHUgJTRsdSAlNGx1IiwgYWxsb2NzLCBoaWdoLCBncm93biwKKwkJCQklNGx1ICU0bHUgJTRsdSAlNGx1ICU0bHUiLCBhbGxvY3MsIGhpZ2gsIGdyb3duLAogCQkJCXJlYXBlZCwgZXJyb3JzLCBtYXhfZnJlZWFibGUsIG5vZGVfYWxsb2NzLAotCQkJCW5vZGVfZnJlZXMpOworCQkJCW5vZGVfZnJlZXMsIG92ZXJmbG93cyk7CiAJfQogCS8qIGNwdSBzdGF0cyAqLwogCXsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDZiNjEzMjMuLjBjMmQxM2EgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJfQogCiAJaWYgKChlcnIgPSBoY2lfc2VuZF9zY28oY29ubi0+aGNvbiwgc2tiKSkgPCAwKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CiAKIAlyZXR1cm4gY291bnQ7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGYyOTQ1MGIuLjNkYTkyNjQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNzY1LDYgKzc2NSwxNSBAQAogCXJldHVybiBORl9TVE9MRU47CiB9CiAKK3N0YXRpYyBpbnQgYnJfbmZfZGV2X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgJiYKKwkgICAgc2tiLT5sZW4gPiBza2ItPmRldi0+bXR1ICYmCisJICAgICEoc2tiX3NoaW5mbyhza2IpLT51Zm9fc2l6ZSB8fCBza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplKSkKKwkJcmV0dXJuIGlwX2ZyYWdtZW50KHNrYiwgYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdCk7CisJZWxzZQorCQlyZXR1cm4gYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdChza2IpOworfQogCiAvKiBQRl9CUklER0UvUE9TVF9ST1VUSU5HICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wb3N0X3JvdXRpbmcodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICoqcHNrYiwKQEAgLTgyNCw3ICs4MzMsNyBAQAogCQlyZWFsb3V0ZGV2ID0gbmZfYnJpZGdlLT5uZXRvdXRkZXY7CiAjZW5kaWYKIAlORl9IT09LKHBmLCBORl9JUF9QT1NUX1JPVVRJTkcsIHNrYiwgTlVMTCwgcmVhbG91dGRldiwKLQkJYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdCk7CisJCWJyX25mX2Rldl9xdWV1ZV94bWl0KTsKIAogCXJldHVybiBORl9TVE9MRU47CiAKQEAgLTg2OSw3ICs4NzgsNyBAQAogCiAJaWYgKChvdXQtPmhhcmRfc3RhcnRfeG1pdCA9PSBicl9kZXZfeG1pdCAmJgogCSAgICAgb2tmbiAhPSBicl9uZl9mb3J3YXJkX2ZpbmlzaCAmJgotCSAgICAgb2tmbiAhPSBicl9uZl9sb2NhbF9vdXRfZmluaXNoICYmIG9rZm4gIT0gYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdCkKKwkgICAgIG9rZm4gIT0gYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaCAmJiBva2ZuICE9IGJyX25mX2Rldl9xdWV1ZV94bWl0KQogI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQogCSAgICB8fCAoKG91dC0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikgJiYKIAkJVkxBTl9ERVZfSU5GTyhvdXQpLT5yZWFsX2Rldi0+aGFyZF9zdGFydF94bWl0ID09IGJyX2Rldl94bWl0KQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggMDFlYWU5Ny4uNjZiZDkzMiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC04MjksNyArODI5LDcgQEAKIAkJCQkgICAJCSogc2l6ZW9mKHN0cnVjdCBlYnRfY2hhaW5zdGFjaykpOwogCQlpZiAoIW5ld2luZm8tPmNoYWluc3RhY2spCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJZm9yX2VhY2hfY3B1KGkpIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJCW5ld2luZm8tPmNoYWluc3RhY2tbaV0gPQogCQkJICAgdm1hbGxvYyh1ZGNfY250ICogc2l6ZW9mKHN0cnVjdCBlYnRfY2hhaW5zdGFjaykpOwogCQkJaWYgKCFuZXdpbmZvLT5jaGFpbnN0YWNrW2ldKSB7CkBAIC05MDEsNyArOTAxLDcgQEAKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikgKiBuZW50cmllcyk7CiAKIAkvKiBhZGQgb3RoZXIgY291bnRlcnMgdG8gdGhvc2Ugb2YgY3B1IDAgKi8KLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IDApCiAJCQljb250aW51ZTsKIAkJY291bnRlcl9iYXNlID0gQ09VTlRFUl9CQVNFKG9sZGNvdW50ZXJzLCBuZW50cmllcywgY3B1KTsKQEAgLTEwMzYsNyArMTAzNiw3IEBACiAKIAl2ZnJlZSh0YWJsZS0+ZW50cmllcyk7CiAJaWYgKHRhYmxlLT5jaGFpbnN0YWNrKSB7Ci0JCWZvcl9lYWNoX2NwdShpKQorCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJCXZmcmVlKHRhYmxlLT5jaGFpbnN0YWNrW2ldKTsKIAkJdmZyZWUodGFibGUtPmNoYWluc3RhY2spOwogCX0KQEAgLTEwNTQsNyArMTA1NCw3IEBACiAJdmZyZWUoY291bnRlcnN0bXApOwogCS8qIGNhbiBiZSBpbml0aWFsaXplZCBpbiB0cmFuc2xhdGVfdGFibGUoKSAqLwogCWlmIChuZXdpbmZvLT5jaGFpbnN0YWNrKSB7Ci0JCWZvcl9lYWNoX2NwdShpKQorCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2tbaV0pOwogCQl2ZnJlZShuZXdpbmZvLT5jaGFpbnN0YWNrKTsKIAl9CkBAIC0xMjAxLDcgKzEyMDEsNyBAQAogCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIGZyZWVfY2hhaW5zdGFjazoKIAlpZiAobmV3aW5mby0+Y2hhaW5zdGFjaykgewotCQlmb3JfZWFjaF9jcHUoaSkKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCQl2ZnJlZShuZXdpbmZvLT5jaGFpbnN0YWNrW2ldKTsKIAkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJdmZyZWUodGFibGUtPnByaXZhdGUtPmVudHJpZXMpOwogCWlmICh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFjaykgewotCQlmb3JfZWFjaF9jcHUoaSkKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCQl2ZnJlZSh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5jaGFpbnN0YWNrKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDQzNDIyMGQuLjgzMjMxYTIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0zMDQyLDExICszMDQyLDExIEBACiAKIAkJc3dpdGNoKGRldi0+cmVnX3N0YXRlKSB7CiAJCWNhc2UgTkVUUkVHX1JFR0lTVEVSSU5HOgorCQkJZGV2LT5yZWdfc3RhdGUgPSBORVRSRUdfUkVHSVNURVJFRDsKIAkJCWVyciA9IG5ldGRldl9yZWdpc3Rlcl9zeXNmcyhkZXYpOwogCQkJaWYgKGVycikKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgc3lzZnMgcmVnaXN0cmF0aW9uICglZClcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1JFR0lTVEVSRUQ7CiAJCQlicmVhazsKIAogCQljYXNlIE5FVFJFR19VTlJFR0lTVEVSSU5HOgpAQCAtMzEwMCwxMiArMzEwMCwxMSBAQAogCWFsbG9jX3NpemUgPSAoc2l6ZW9mKCpkZXYpICsgTkVUREVWX0FMSUdOX0NPTlNUKSAmIH5ORVRERVZfQUxJR05fQ09OU1Q7CiAJYWxsb2Nfc2l6ZSArPSBzaXplb2ZfcHJpdiArIE5FVERFVl9BTElHTl9DT05TVDsKIAotCXAgPSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOworCXAgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghcCkgewogCQlwcmludGsoS0VSTl9FUlIgImFsbG9jX2RldjogVW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZS5cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KHAsIDAsIGFsbG9jX3NpemUpOwogCiAJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopCiAJCSgoKGxvbmcpcCArIE5FVERFVl9BTElHTl9DT05TVCkgJiB+TkVUREVWX0FMSUdOX0NPTlNUKTsKQEAgLTMzNDcsNyArMzM0Niw3IEBACiAJICoJSW5pdGlhbGlzZSB0aGUgcGFja2V0IHJlY2VpdmUgcXVldWVzLgogCSAqLwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3Qgc29mdG5ldF9kYXRhICpxdWV1ZTsKIAogCQlxdWV1ZSA9ICZwZXJfY3B1KHNvZnRuZXRfZGF0YSwgaSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kdi5jIGIvbmV0L2NvcmUvZHYuYwppbmRleCBjZjU4MTQwLi4yOWVlNzdmMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHYuYworKysgYi9uZXQvY29yZS9kdi5jCkBAIC01NSwxNSArNTUsMTIgQEAKIAogCWRldi0+ZGl2ZXJ0ID0gTlVMTDsKIAlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewotCQlkZXYtPmRpdmVydCA9IChzdHJ1Y3QgZGl2ZXJ0X2JsayAqKQotCQkJa21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwkJZGV2LT5kaXZlcnQgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoZGV2LT5kaXZlcnQgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiZGl2ZXJ0OiB1bmFibGUgdG8gYWxsb2NhdGUgZGl2ZXJ0X2JsayBmb3IgJXNcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0KLQkJbWVtc2V0KGRldi0+ZGl2ZXJ0LCAwLCBzaXplb2Yoc3RydWN0IGRpdmVydF9ibGspKTsKIAkJZGV2X2hvbGQoZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Zsb3cuYyBiL25ldC9jb3JlL2Zsb3cuYwppbmRleCA1NTc4OWY4Li4yMTkxYWY1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9mbG93LmMKKysrIGIvbmV0L2NvcmUvZmxvdy5jCkBAIC03OSw3ICs3OSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJZmxvd19oYXNoX3JuZF9yZWNhbGMoaSkgPSAxOwogCiAJZmxvd19oYXNoX3JuZF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEZMT1dfSEFTSF9STkRfUEVSSU9EOwpAQCAtMzE4LDEyICszMTgsMTAgQEAKIAkJLyogTk9USElORyAqLzsKIAogCWZsb3dfdGFibGUoY3B1KSA9IChzdHJ1Y3QgZmxvd19jYWNoZV9lbnRyeSAqKikKLQkJX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBvcmRlcik7CisJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPLCBvcmRlcik7CiAJaWYgKCFmbG93X3RhYmxlKGNwdSkpCiAJCXBhbmljKCJORVQ6IGZhaWxlZCB0byBhbGxvY2F0ZSBmbG93IGNhY2hlIG9yZGVyICVsdVxuIiwgb3JkZXIpOwogCi0JbWVtc2V0KGZsb3dfdGFibGUoY3B1KSwgMCwgUEFHRV9TSVpFIDw8IG9yZGVyKTsKLQogCWZsb3dfaGFzaF9ybmRfcmVjYWxjKGNwdSkgPSAxOwogCWZsb3dfY291bnQoY3B1KSA9IDA7CiAKQEAgLTM2Myw3ICszNjEsNyBAQAogCWZsb3dfaGFzaF9ybmRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBGTE9XX0hBU0hfUk5EX1BFUklPRDsKIAlhZGRfdGltZXIoJmZsb3dfaGFzaF9ybmRfdGltZXIpOwogCi0JZm9yX2VhY2hfY3B1KGkpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCWZsb3dfY2FjaGVfY3B1X3ByZXBhcmUoaSk7CiAKIAlob3RjcHVfbm90aWZpZXIoZmxvd19jYWNoZV9jcHUsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jIGIvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCmluZGV4IGIwN2MwMjkuLjNjYWQwMjYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYworKysgYi9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKQEAgLTE1OSwxMSArMTU5LDEwIEBACiAJaWYgKHBhcm0tPmludGVydmFsIDwgLTIgfHwgcGFybS0+aW50ZXJ2YWwgPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVzdCA9IGttYWxsb2Moc2l6ZW9mKCplc3QpLCBHRlBfS0VSTkVMKTsKKwllc3QgPSBremFsbG9jKHNpemVvZigqZXN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVzdCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKLQltZW1zZXQoZXN0LCAwLCBzaXplb2YoKmVzdCkpOwogCWVzdC0+aW50ZXJ2YWwgPSBwYXJtLT5pbnRlcnZhbCArIDI7CiAJZXN0LT5ic3RhdHMgPSBic3RhdHM7CiAJZXN0LT5yYXRlX2VzdCA9IHJhdGVfZXN0OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAwYzg2NjY4Li40Y2Y4NzhlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjg0LDE0ICsyODQsMTEgQEAKIAlzdHJ1Y3QgbmVpZ2hib3VyICoqcmV0OwogCiAJaWYgKHNpemUgPD0gUEFHRV9TSVpFKSB7Ci0JCXJldCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJCXJldCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gKHN0cnVjdCBuZWlnaGJvdXIgKiopCi0JCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIGdldF9vcmRlcihzaXplKSk7CisJCSAgICAgIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQ3xfX0dGUF9aRVJPLCBnZXRfb3JkZXIoc2l6ZSkpOwogCX0KLQlpZiAocmV0KQotCQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwODksOCArMTA4Niw3IEBACiAJCWlmIChoaC0+aGhfdHlwZSA9PSBwcm90b2NvbCkKIAkJCWJyZWFrOwogCi0JaWYgKCFoaCAmJiAoaGggPSBrbWFsbG9jKHNpemVvZigqaGgpLCBHRlBfQVRPTUlDKSkgIT0gTlVMTCkgewotCQltZW1zZXQoaGgsIDAsIHNpemVvZihzdHJ1Y3QgaGhfY2FjaGUpKTsKKwlpZiAoIWhoICYmIChoaCA9IGt6YWxsb2Moc2l6ZW9mKCpoaCksIEdGUF9BVE9NSUMpKSAhPSBOVUxMKSB7CiAJCXJ3bG9ja19pbml0KCZoaC0+aGhfbG9jayk7CiAJCWhoLT5oaF90eXBlID0gcHJvdG9jb2w7CiAJCWF0b21pY19zZXQoJmhoLT5oaF9yZWZjbnQsIDApOwpAQCAtMTM2NiwxMyArMTM2MiwxMSBAQAogCXRibC0+aGFzaF9idWNrZXRzID0gbmVpZ2hfaGFzaF9hbGxvYyh0YmwtPmhhc2hfbWFzayArIDEpOwogCiAJcGhzaXplID0gKFBORUlHSF9IQVNITUFTSyArIDEpICogc2l6ZW9mKHN0cnVjdCBwbmVpZ2hfZW50cnkgKik7Ci0JdGJsLT5waGFzaF9idWNrZXRzID0ga21hbGxvYyhwaHNpemUsIEdGUF9LRVJORUwpOworCXRibC0+cGhhc2hfYnVja2V0cyA9IGt6YWxsb2MocGhzaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghdGJsLT5oYXNoX2J1Y2tldHMgfHwgIXRibC0+cGhhc2hfYnVja2V0cykKIAkJcGFuaWMoImNhbm5vdCBhbGxvY2F0ZSBuZWlnaGJvdXIgY2FjaGUgaGFzaGVzIik7CiAKLQltZW1zZXQodGJsLT5waGFzaF9idWNrZXRzLCAwLCBwaHNpemUpOwotCiAJZ2V0X3JhbmRvbV9ieXRlcygmdGJsLT5oYXNoX3JuZCwgc2l6ZW9mKHRibC0+aGFzaF9ybmQpKTsKIAogCXJ3bG9ja19pbml0KCZ0YmwtPmxvY2spOwpAQCAtMTYzMyw3ICsxNjI3LDcgQEAKIAogCQltZW1zZXQoJm5kc3QsIDAsIHNpemVvZihuZHN0KSk7CiAKLQkJZm9yX2VhY2hfY3B1KGNwdSkgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCQlzdHJ1Y3QgbmVpZ2hfc3RhdGlzdGljcwkqc3Q7CiAKIAkJCXN0ID0gcGVyX2NwdV9wdHIodGJsLT5zdGF0cywgY3B1KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggMjFiNjg0Ni4uYzEyOTkwYzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJb3BlcnN0YXRlID0gSUZfT1BFUl9ET1dOOwogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAotCWlmIChvcGVyc3RhdGUgPj0gc2l6ZW9mKG9wZXJzdGF0ZXMpKQorCWlmIChvcGVyc3RhdGUgPj0gQVJSQVlfU0laRShvcGVyc3RhdGVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3BlcnN0YXRlc1tvcGVyc3RhdGVdKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jIGIvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMKaW5kZXggMWU0NGVkYS4uNzllYmQ3NSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMKKysrIGIvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMKQEAgLTM4LDEzICszOCwxMSBAQAogewogCWNvbnN0IGludCBsb3B0X3NpemUgPSBzaXplb2Yoc3RydWN0IGxpc3Rlbl9zb2NrKSArCiAJCQkgICAgICBucl90YWJsZV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3NvY2sgKik7Ci0Jc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0ID0ga21hbGxvYyhsb3B0X3NpemUsIEdGUF9LRVJORUwpOworCXN0cnVjdCBsaXN0ZW5fc29jayAqbG9wdCA9IGt6YWxsb2MobG9wdF9zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmIChsb3B0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGxvcHQsIDAsIGxvcHRfc2l6ZSk7Ci0KIAlmb3IgKGxvcHQtPm1heF9xbGVuX2xvZyA9IDY7CiAJICAgICAoMSA8PCBsb3B0LT5tYXhfcWxlbl9sb2cpIDwgc3lzY3RsX21heF9zeW5fYmFja2xvZzsKIAkgICAgIGxvcHQtPm1heF9xbGVuX2xvZysrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IGZkYzRmMzguLjRmOTZmMzggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBucm5kX3N0YXRlICpzdGF0ZSA9ICZwZXJfY3B1KG5ldF9yYW5kX3N0YXRlLGkpOwogCQlfX25ldF9zcmFuZG9tKHN0YXRlLCBpK2ppZmZpZXMpOwogCX0KQEAgLTEzMyw3ICsxMzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2VlZFtOUl9DUFVTXTsKIAogCWdldF9yYW5kb21fYnl0ZXMoc2VlZCwgc2l6ZW9mKHNlZWQpKTsKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBucm5kX3N0YXRlICpzdGF0ZSA9ICZwZXJfY3B1KG5ldF9yYW5kX3N0YXRlLGkpOwogCQlfX25ldF9zcmFuZG9tKHN0YXRlLCBzZWVkW2ldKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCBjY2QzZWZjLi45NWE2MzlmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqCQlQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KICAqLwogCi0jZGVmaW5lIFZFUlNJT04gIjAuNDA2IgorI2RlZmluZSBWRVJTSU9OICIwLjQwNyIKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zMTQsMTEgKzMxNCw2IEBACiAJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsZWFmLCByY3UpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfbGVhZihzdHJ1Y3QgbGVhZiAqbGVhZikKLXsKLQljYWxsX3JjdSgmbGVhZi0+cmN1LCBfX2xlYWZfZnJlZV9yY3UpOwotfQotCiBzdGF0aWMgdm9pZCBfX2xlYWZfaW5mb19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsZWFmX2luZm8sIHJjdSkpOwpAQCAtMzU3LDcgKzM1MiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdG5vZGVfZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQogewotCWNhbGxfcmN1KCZ0bi0+cmN1LCBfX3Rub2RlX2ZyZWVfcmN1KTsKKwlpZihJU19MRUFGKHRuKSkgeworCQlzdHJ1Y3QgbGVhZiAqbCA9IChzdHJ1Y3QgbGVhZiAqKSB0bjsKKwkJY2FsbF9yY3VfYmgoJmwtPnJjdSwgX19sZWFmX2ZyZWVfcmN1KTsKKwl9CisgICAgICAgIGVsc2UKKwkJY2FsbF9yY3UoJnRuLT5yY3UsIF9fdG5vZGVfZnJlZV9yY3UpOwogfQogCiBzdGF0aWMgc3RydWN0IGxlYWYgKmxlYWZfbmV3KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggOTgzMWZkMi4uMmEwNDU1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlpbnQgZXJyOwogCiAJCWVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDJhOGFkZGEuLmRhNzM0YzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtMzA0LDEzICszMDQsMTcgQEAKIAogLyogQ3JlYXRpb24gcHJpbWl0aXZlcy4gKi8KIAotc3RhdGljIHN0cnVjdCBpcHEgKmlwX2ZyYWdfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLCBzdHJ1Y3QgaXBxICpxcF9pbikKK3N0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2ludGVybihzdHJ1Y3QgaXBxICpxcF9pbikKIHsKIAlzdHJ1Y3QgaXBxICpxcDsKICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwogCXdyaXRlX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKHFwX2luLT5pZCwgcXBfaW4tPnNhZGRyLCBxcF9pbi0+ZGFkZHIsCisJCQkgcXBfaW4tPnByb3RvY29sKTsKICNpZmRlZiBDT05GSUdfU01QCiAJLyogV2l0aCBTTVAgcmFjZSB3ZSBoYXZlIHRvIHJlY2hlY2sgaGFzaCB0YWJsZSwgYmVjYXVzZQogCSAqIHN1Y2ggZW50cnkgY291bGQgYmUgY3JlYXRlZCBvbiBvdGhlciBjcHUsIHdoaWxlIHdlCkBAIC0zNDUsNyArMzQ5LDcgQEAKIH0KIAogLyogQWRkIGFuIGVudHJ5IHRvIHRoZSAnaXBxJyBxdWV1ZSBmb3IgYSBuZXdseSByZWNlaXZlZCBJUCBkYXRhZ3JhbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2NyZWF0ZSh1bnNpZ25lZCBoYXNoLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdTMyIHVzZXIpCitzdGF0aWMgc3RydWN0IGlwcSAqaXBfZnJhZ19jcmVhdGUoc3RydWN0IGlwaGRyICppcGgsIHUzMiB1c2VyKQogewogCXN0cnVjdCBpcHEgKnFwOwogCkBAIC0zNzEsNyArMzc1LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcXAtPmxvY2spOwogCWF0b21pY19zZXQoJnFwLT5yZWZjbnQsIDEpOwogCi0JcmV0dXJuIGlwX2ZyYWdfaW50ZXJuKGhhc2gsIHFwKTsKKwlyZXR1cm4gaXBfZnJhZ19pbnRlcm4ocXApOwogCiBvdXRfbm9tZW06CiAJTElNSVRfTkVUREVCVUcoS0VSTl9FUlIgImlwX2ZyYWdfY3JlYXRlOiBubyBtZW1vcnkgbGVmdCAhXG4iKTsKQEAgLTM4NywxMSArMzkxLDEyIEBACiAJX191MzIgc2FkZHIgPSBpcGgtPnNhZGRyOwogCV9fdTMyIGRhZGRyID0gaXBoLT5kYWRkcjsKIAlfX3U4IHByb3RvY29sID0gaXBoLT5wcm90b2NvbDsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGlwcWhhc2hmbihpZCwgc2FkZHIsIGRhZGRyLCBwcm90b2NvbCk7CisJdW5zaWduZWQgaW50IGhhc2g7CiAJc3RydWN0IGlwcSAqcXA7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAKIAlyZWFkX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKGlkLCBzYWRkciwgZGFkZHIsIHByb3RvY29sKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShxcCwgbiwgJmlwcV9oYXNoW2hhc2hdLCBsaXN0KSB7CiAJCWlmKHFwLT5pZCA9PSBpZAkJJiYKIAkJICAgcXAtPnNhZGRyID09IHNhZGRyCSYmCkBAIC00MDUsNyArNDEwLDcgQEAKIAl9CiAJcmVhZF91bmxvY2soJmlwZnJhZ19sb2NrKTsKIAotCXJldHVybiBpcF9mcmFnX2NyZWF0ZShoYXNoLCBpcGgsIHVzZXIpOworCXJldHVybiBpcF9mcmFnX2NyZWF0ZShpcGgsIHVzZXIpOwogfQogCiAvKiBJcyB0aGUgZnJhZ21lbnQgdG9vIGZhciBhaGVhZCB0byBiZSBwYXJ0IG9mIGlwcT8gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggOTk4MWRjZC4uYWI5OWJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQlyZWFkX3VubG9jaygmaXBncmVfbG9jayk7CiAJCXJldHVybigwKTsKIAl9Ci0JaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUFJPVF9VTlJFQUNILCAwKTsKKwlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApOwogCiBkcm9wOgogCXJlYWRfdW5sb2NrKCZpcGdyZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggZjc1ZmYxZC4uOGRjYmEzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTg2LDggKzg2LDYgQEAKIAogaW50IHN5c2N0bF9pcF9kZWZhdWx0X3R0bCA9IElQREVGVFRMOwogCi1zdGF0aWMgaW50IGlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKSk7Ci0KIC8qIEdlbmVyYXRlIGEgY2hlY2tzdW0gZm9yIGFuIG91dGdvaW5nIElQIGRhdGFncmFtLiAqLwogX19pbmxpbmVfXyB2b2lkIGlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcGgpCiB7CkBAIC00MjEsNyArNDE5LDcgQEAKICAqCXNpbmdsZSBkZXZpY2UgZnJhbWUsIGFuZCBxdWV1ZSBzdWNoIGEgZnJhbWUgZm9yIHNlbmRpbmcuCiAgKi8KIAotc3RhdGljIGludCBpcF9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmKikpCitpbnQgaXBfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiopKQogewogCXN0cnVjdCBpcGhkciAqaXBoOwogCWludCByYXcgPSAwOwpAQCAtNjczLDYgKzY3MSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTChpcF9mcmFnbWVudCk7CisKIGludAogaXBfZ2VuZXJpY19nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb21wLmMgYi9uZXQvaXB2NC9pcGNvbXAuYwppbmRleCAwYTFkODZhLi4wNGE0Mjk0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbXAuYworKysgYi9uZXQvaXB2NC9pcGNvbXAuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJaWYgKCFzY3JhdGNoZXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdm9pZCAqc2NyYXRjaCA9ICpwZXJfY3B1X3B0cihzY3JhdGNoZXMsIGkpOwogCQlpZiAoc2NyYXRjaCkKIAkJCXZmcmVlKHNjcmF0Y2gpOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIAlpcGNvbXBfc2NyYXRjaGVzID0gc2NyYXRjaGVzOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQl2b2lkICpzY3JhdGNoID0gdm1hbGxvYyhJUENPTVBfU0NSQVRDSF9TSVpFKTsKIAkJaWYgKCFzY3JhdGNoKQogCQkJcmV0dXJuIE5VTEw7CkBAIC0zNDQsNyArMzQ0LDcgQEAKIAlpZiAoIXRmbXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKIAkJY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CiAJfQpAQCAtMzg0LDcgKzM4NCw3IEBACiAJaWYgKCF0Zm1zKQogCQlnb3RvIGVycm9yOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsIDApOwogCQlpZiAoIXRmbSkKIAkJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggZWVmMDdiMC4uZWEzOThlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtNDc0LDkgKzQ3NCw2IEBACiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQotCQlnb3RvIG91dDsKLQogCWlwaCA9IHNrYi0+bmguaXBoOwogCiAJcmVhZF9sb2NrKCZpcGlwX2xvY2spOwpAQCAtNTA4LDcgKzUwNSw2IEBACiAJfQogCXJlYWRfdW5sb2NrKCZpcGlwX2xvY2spOwogCi1vdXQ6CiAJcmV0dXJuIC0xOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci5jCmluZGV4IGI1YWQ5YWMuLjZhOWUzNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1X2ludDhfdCB0b3M7CiB9OwogCi1zdGF0aWMgdm9pZCBxdWV1ZV9zYXZlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgbmZfaXBfc2F2ZXJvdXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcF9ydF9pbmZvICpydF9pbmZvID0gbmZfaW5mb19yZXJvdXRlKGluZm8pOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcXVldWVfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIGludCBuZl9pcF9yZXJvdXRlKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pCiB7CiAJY29uc3Qgc3RydWN0IGlwX3J0X2luZm8gKnJ0X2luZm8gPSBuZl9pbmZvX3Jlcm91dGUoaW5mbyk7CiAKQEAgLTE2MSwyMCArMTYxLDU0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgaXBfcmVyb3V0ZSA9IHsKLQkucmVyX3NpemUJPSBzaXplb2Yoc3RydWN0IGlwX3J0X2luZm8pLAotCS5zYXZlCQk9IHF1ZXVlX3NhdmUsCi0JLnJlcm91dGUJPSBxdWV1ZV9yZXJvdXRlLAordW5zaWduZWQgaW50IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoaG9vayAhPSBORl9JUF9QUkVfUk9VVElORyAmJiBob29rICE9IE5GX0lQX0xPQ0FMX0lOKQorCQkJYnJlYWs7CisJCWlmICgocHJvdG9jb2wgPT0gMCAmJiAhKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkgfHwKKwkJICAgICFjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJICAgIAkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKKwkJCQkgICAgICAgc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJaWYgKHByb3RvY29sID09IDApCisJCQlza2ItPmNzdW0gPSAwOworCQllbHNlCisJCQlza2ItPmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsCisJCQkJCQkgICAgICAgcHJvdG9jb2wsIDApOworCQljc3VtID0gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKK0VYUE9SVF9TWU1CT0wobmZfaXBfY2hlY2tzdW0pOworCitzdGF0aWMgc3RydWN0IG5mX2FmaW5mbyBuZl9pcF9hZmluZm8gPSB7CisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5jaGVja3N1bQk9IG5mX2lwX2NoZWNrc3VtLAorCS5zYXZlcm91dGUJPSBuZl9pcF9zYXZlcm91dGUsCisJLnJlcm91dGUJPSBuZl9pcF9yZXJvdXRlLAorCS5yb3V0ZV9rZXlfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXBfcnRfaW5mbyksCiB9OwogCiBzdGF0aWMgaW50IGlwdjRfbmV0ZmlsdGVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoUEZfSU5FVCwgJmlwX3Jlcm91dGUpOworCXJldHVybiBuZl9yZWdpc3Rlcl9hZmluZm8oJm5mX2lwX2FmaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdjRfbmV0ZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKFBGX0lORVQpOworCW5mX3VucmVnaXN0ZXJfYWZpbmZvKCZuZl9pcF9hZmluZm8pOwogfQogCiBtb2R1bGVfaW5pdChpcHY0X25ldGZpbHRlcl9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggNzc4NTVjYy4uYzYwZmQ1YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTY5LDYgKzY5LDcgQEAKIAl0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSAoRVhQRVJJTUVOVEFMKScKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBJUF9ORl9DT05OVFJBQ0sgJiYgTkVURklMVEVSX05FVExJTksKIAlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyE9eSB8fCBORVRGSUxURVJfTkVUTElOSyE9bQorCWRlcGVuZHMgb24gSVBfTkZfTkFUPW4gfHwgSVBfTkZfTkFUCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCBhNDRhNWQ3Li5jMmQ5MmY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTY0Niw3ICs2NDYsNyBAQAogCX0KIAogCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlpZiAobmV3aW5mby0+ZW50cmllc1tpXSAmJiBuZXdpbmZvLT5lbnRyaWVzW2ldICE9IGVudHJ5MCkKIAkJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2ldLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpOwogCX0KQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkJICAgY291bnRlcnMsCiAJCQkgICAmaSk7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGN1cmNwdSkKIAkJCWNvbnRpbnVlOwogCQlpID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwppbmRleCBkMGQzNzljLi5kN2M0NzJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCkBAIC0xODEsMzMgKzE4MSwyNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhcnB0YWJsZV9maWx0ZXJfaW5pdCh2b2lkKQogewotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCS8qIFJlZ2lzdGVyIHRhYmxlICovCiAJcmV0ID0gYXJwdF9yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlciwgJmluaXRpYWxfdGFibGUucmVwbCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJaWYgKChyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSkpIDwgMCkKLQkJCWdvdG8gY2xlYW51cF9ob29rczsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhhcnB0X29wcywgQVJSQVlfU0laRShhcnB0X29wcykpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfdGFibGU7CiAJcmV0dXJuIHJldDsKIAotY2xlYW51cF9ob29rczoKLQl3aGlsZSAoLS1pID49IDApCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmYXJwdF9vcHNbaV0pOwotCitjbGVhbnVwX3RhYmxlOgogCWFycHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFycHRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGFycHRfb3BzLCBBUlJBWV9TSVpFKGFycHRfb3BzKSk7CiAJYXJwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwppbmRleCBjZWFhYmMxLi45NzlhMmVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJZWNhY2hlID0gJnBlcl9jcHUoaXBfY29ubnRyYWNrX2VjYWNoZSwgY3B1KTsKIAkJaWYgKGVjYWNoZS0+Y3QpCiAJCQlpcF9jb25udHJhY2tfcHV0KGVjYWNoZS0+Y3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCmluZGV4IGRhZWIxMzkuLjJjMmZiNzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKQEAgLTksMzcgKzksNiBAQAogICogSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8KLSAqCi0gKiBDaGFuZ2VzOgotICogCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBdm9pZCBleGNlc3NpdmUgc3RhY2sgdXNhZ2UgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgMy4gQWRkZWQgc3VwcG9ydCBmb3Igbm9uLWxpbmVhciBza2IgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgNC4gRml4ZWQgbWlzc2luZyBILjI0NSBtb2R1bGUgb3duZXIgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDUuIEF2b2lkIGxvbmcgUkFTIGV4cGVjdGF0aW9uIGNoYWlucyAoUGF0cmljayBNY0hhcmR5KQotICogCSAgNi4gRml4ZWQgaW5jb3JyZWN0IF9fZXhpdCBhdHRyaWJ1dGUgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDcuIEVsaW1pbmF0ZWQgdW5uZWNlc3NhcnkgcmV0dXJuIGNvZGUKLSAqIAkgIDguIEZpeGVkIGluY29ycmVjdCB1c2Ugb2YgTkFUIGRhdGEgZnJvbSBjb25udHJhY2sgY29kZSAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA5LiBGaXhlZCBUVEwgY2FsY3VsYXRpb24gZXJyb3IgaW4gUkNGCi0gKiAJICAxMC4gQWRkZWQgVFRMIHN1cHBvcnQgaW4gUlJRCi0gKiAJICAxMS4gQmV0dGVyIHN1cHBvcnQgZm9yIHNlcGFyYXRlIFRQS1QgaGVhZGVyIGFuZCBkYXRhCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQotICogCSAgMy4gU3BsaXR0ZWQgQVNOLjEgY29kZSBhbmQgZGF0YSAoc3VnZ2VzdGVkIGJ5IFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDQuIFNvcnQgQVNOLjEgZGF0YSB0byBhdm9pZCBmb3J3YXJkaW5nIGRlY2xhcmF0aW9ucyAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA1LiBSZXNldCBuZXh0IFRQS1QgZGF0YSBsZW5ndGggaW4gZ2V0X3Rwa3RfZGF0YSgpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNTQsOCArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIAotI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCi0KICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKICNlbHNlCkBAIC02Myw2ICszMCwxMCBAQAogI2VuZGlmCiAKIC8qIFBhcmFtZXRlcnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9ycnFfdHRsID0gMzAwOworbW9kdWxlX3BhcmFtKGRlZmF1bHRfcnJxX3R0bCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfcnJxX3R0bCwgInVzZSB0aGlzIFRUTCBpZiBpdCdzIG1pc3NpbmcgaW4gUlJRIik7CisKIHN0YXRpYyBpbnQgZ2tyb3V0ZWRfb25seSA9IDE7CiBtb2R1bGVfcGFyYW0oZ2tyb3V0ZWRfb25seSwgaW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZ2tyb3V0ZWRfb25seSwgIm9ubHkgYWNjZXB0IGNhbGxzIGZyb20gZ2F0ZWtlZXBlciIpOwpAQCAtMjIyLDggKzE5Myw4IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJICB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCkKK3N0YXRpYyBpbnQgZ2V0X2gyNDVfYWRkcih1bnNpZ25lZCBjaGFyICpkYXRhLCBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJIHVfaW50MzJfdCAqIGlwLCB1X2ludDE2X3QgKiBwb3J0KQogewogCXVuc2lnbmVkIGNoYXIgKnA7CiAKQEAgLTEzMDIsNyArMTI3Myw3IEBACiAJCURFQlVHUCgiaXBfY3RfcmFzOiBSUlEgVFRMID0gJXUgc2Vjb25kc1xuIiwgcnJxLT50aW1lVG9MaXZlKTsKIAkJaW5mby0+dGltZW91dCA9IHJycS0+dGltZVRvTGl2ZTsKIAl9IGVsc2UKLQkJaW5mby0+dGltZW91dCA9IDA7CisJCWluZm8tPnRpbWVvdXQgPSBkZWZhdWx0X3JycV90dGw7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MTMsMTggKzE2ODQsMTcgQEAKIG1vZHVsZV9pbml0KGluaXQpOwogbW9kdWxlX2V4aXQoZmluaSk7CiAKLUVYUE9SVF9TWU1CT0woZ2V0X2gyNDVfYWRkcik7Ci1FWFBPUlRfU1lNQk9MKGdldF9oMjI1X2FkZHIpOwotRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tfaDI0NV9leHBlY3QpOwotRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tfcTkzMV9leHBlY3QpOwotRVhQT1JUX1NZTUJPTChzZXRfaDI0NV9hZGRyX2hvb2spOwotRVhQT1JUX1NZTUJPTChzZXRfaDIyNV9hZGRyX2hvb2spOwotRVhQT1JUX1NZTUJPTChzZXRfc2lnX2FkZHJfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKHNldF9yYXNfYWRkcl9ob29rKTsKLUVYUE9SVF9TWU1CT0wobmF0X3J0cF9ydGNwX2hvb2spOwotRVhQT1JUX1NZTUJPTChuYXRfdDEyMF9ob29rKTsKLUVYUE9SVF9TWU1CT0wobmF0X2gyNDVfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKG5hdF9xOTMxX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X2gyMjVfYWRkcik7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9jb25udHJhY2tfaDI0NV9leHBlY3QpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9oMjQ1X2FkZHJfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfaDIyNV9hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X3NpZ19hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X3Jhc19hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X3J0cF9ydGNwX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X3QxMjBfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChuYXRfaDI0NV9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF9xOTMxX2hvb2spOwogCiBNT0RVTEVfQVVUSE9SKCJKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jCmluZGV4IGFmYTUyNTEuLjQ4MDc4MDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjZWxzZQogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjZW5kaWYKLSNpbmNsdWRlICJpcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmg+CiAKIC8qIFRyYWNlIEZsYWcgKi8KICNpZm5kZWYgSDMyM19UUkFDRQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCAzMDIxYWYwLi5kOGIxNGE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjI0LDI1ICsyMjQsMTQgQEAKIAl9CiAKIAkvKiBTZWUgaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jICovCi0JaWYgKGhvb2tudW0gIT0gTkZfSVBfUFJFX1JPVVRJTkcpCi0JCWdvdG8gY2hlY2tzdW1fc2tpcHBlZDsKLQotCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX0hXOgotCQlpZiAoISh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSkpIAotCQkJYnJlYWs7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLT5jc3VtID0gMDsKLQkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQotCQkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkgICAgICAiaXBfY3RfaWNtcDogYmFkIElDTVAgY2hlY2tzdW0gIik7Ci0JCQlyZXR1cm4gLU5GX0FDQ0VQVDsKLQkJfQorCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgc2tiLT5uaC5pcGgtPmlobCAqIDQsIDApKSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgImlwX2N0X2ljbXA6IGJhZCBJQ01QIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLWNoZWNrc3VtX3NraXBwZWQ6CiAJLyoKIAkgKgkxOCBpcyB0aGUgaGlnaGVzdCAna25vd24nIElDTVAgdHlwZS4gQW55dGhpbmcgZWxzZSBpcyBhIG15c3RlcnkKIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZTBkYzM3MC4uMDYyYjI1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC04NzAsMTEgKzg3MCw4IEBACiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKi8KIAkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KLQlpZiAoaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORwotCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQotCSAgICAmJiBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAotCQkJICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KLQkJCSAgICAgIAkgOiBza2JfY2hlY2tzdW0oc2tiLCBpcGgtPmlobCo0LCB0Y3BsZW4sIDApKSkgeworCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgaXBoLT5paGwgKiA0LCBJUFBST1RPX1RDUCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgImlwX2N0X3RjcDogYmFkIFRDUCBjaGVja3N1bSAiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDU1YjdkMzIuLjcwODk5ODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMTIwLDExICsxMjAsOCBAQAogCSAqIGJlY2F1c2UgdGhlIHNlbWFudGljIG9mIENIRUNLU1VNX0hXIGlzIGRpZmZlcmVudCB0aGVyZSAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HCi0JICAgICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZCi0JICAgICYmIGNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIHVkcGxlbiwgSVBQUk9UT19VRFAsCi0JCQkgICAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IHNrYi0+Y3N1bQotCQkJICAgICAgCSA6IHNrYl9jaGVja3N1bShza2IsIGlwaC0+aWhsKjQsIHVkcGxlbiwgMCkpKSB7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBpcGgtPmlobCAqIDQsIElQUFJPVE9fVURQKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19VRFApKQogCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJICAiaXBfY3RfdWRwOiBiYWQgVURQIGNoZWNrc3VtICIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA1MjA3NjAyLi45MjlkNjFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtNDY5LDcwICs0NjksNjMgQEAKIAogLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCiAgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25udHJhY2tfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19sb2NhbCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKLX07Ci0KLS8qIGhlbHBlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19oZWxwLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi0vKiBSZWZyYWdtZW50ZXI7IGxhc3QgY2hhbmNlLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCisJfSwKIH07CiAKIC8qIFN5c2N0bCBzdXBwb3J0ICovCkBAIC03ODMsMTIyICs3NzYsNiBAQAogRVhQT1JUX1NZTUJPTChpcF9jdF9sb2dfaW52YWxpZCk7CiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OwotI2VuZGlmCi0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKLQotCXJldCA9IGlwX2Nvbm50cmFja19pbml0KCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZXQgPSAtRU5PTUVNOwotCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKLQlpZiAoIXByb2MpIGdvdG8gY2xlYW51cF9pbml0OwotCi0JcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCi0JCQkJCSZleHBfZmlsZV9vcHMpOwotCWlmICghcHJvY19leHApIGdvdG8gY2xlYW51cF9wcm9jOwotCi0JcHJvY19zdGF0ID0gY3JlYXRlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIFNfSVJVR08sIHByb2NfbmV0X3N0YXQpOwotCWlmICghcHJvY19zdGF0KQotCQlnb3RvIGNsZWFudXBfcHJvY19leHA7Ci0KLQlwcm9jX3N0YXQtPnByb2NfZm9wcyA9ICZjdF9jcHVfc2VxX2ZvcHM7Ci0JcHJvY19zdGF0LT5vd25lciA9IFRISVNfTU9EVUxFOwotI2VuZGlmCi0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGRlZnJhZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsX291dCBkZWZyYWcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgb3V0IGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhlbHBlciBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciBwb3N0cm91dGluZyBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaGVscGVyaW5vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcG9zdC1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcm91dG9wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM7Ci0JfQotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7Ci0JaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF9sb2NhbGlub3BzOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLQotIGNsZWFudXA6Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcF9jdF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6Ci0jZW5kaWYKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMpOwotIGNsZWFudXBfaW5vdXRhbmRsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0gY2xlYW51cF9oZWxwZXJpbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLSBjbGVhbnVwX2luYW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19pbl9vcHMpOwotIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfZGVmcmFnb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwotIGNsZWFudXBfcHJvY19zdGF0OgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOwotIGNsZWFudXBfcHJvY19leHA6Ci0JcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7Ci0gY2xlYW51cF9wcm9jOgotCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7Ci0gY2xlYW51cF9pbml0OgotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0JaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKLSBjbGVhbnVwX25vdGhpbmc6Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogRklYTUU6IEFsbG93IE5VTEwgZnVuY3Rpb25zIGFuZCBzdWIgaW4gcG9pbnRlcnMgdG8gZ2VuZXJpYyBmb3IKICAgIHRoZW0uIC0tUlIgKi8KIGludCBpcF9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCkBAIC05MjEsNyArNzk4LDcgQEAKIAl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJaXBfY3RfcHJvdG9zW3Byb3RvLT5wcm90b10gPSAmaXBfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CiAJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7Ci0JCisKIAkvKiBTb21lYm9keSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBiaC4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIApAQCAtOTMxLDEyICs4MDgsNzcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKQogewotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MsICpwcm9jX2V4cCwgKnByb2Nfc3RhdDsKKyNlbmRpZgorCWludCByZXQgPSAwOworCisJcmV0ID0gaXBfY29ubnRyYWNrX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmV0ID0gLUVOT01FTTsKKwlwcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFjayIsIDA0NDAsICZjdF9maWxlX29wcyk7CisJaWYgKCFwcm9jKSBnb3RvIGNsZWFudXBfaW5pdDsKKworCXByb2NfZXhwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFja19leHBlY3QiLCAwNDQwLAorCQkJCQkmZXhwX2ZpbGVfb3BzKTsKKwlpZiAoIXByb2NfZXhwKSBnb3RvIGNsZWFudXBfcHJvYzsKKworCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpcF9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKKwlpZiAoIXByb2Nfc3RhdCkKKwkJZ290byBjbGVhbnVwX3Byb2NfZXhwOworCisJcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKyNlbmRpZgorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXBfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcF9jb25udHJhY2tfb3BzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7CisJCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7CisJfQorI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7CisJaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9ob29rczsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorIGNsZWFudXBfaG9va3M6CisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcF9jb25udHJhY2tfb3BzLCBBUlJBWV9TSVpFKGlwX2Nvbm50cmFja19vcHMpKTsKKyNlbmRpZgorIGNsZWFudXBfcHJvY19zdGF0OgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworIGNsZWFudXBfcHJvY19leHA6CisJcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7CisgY2xlYW51cF9wcm9jOgorCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisgY2xlYW51cF9pbml0OgorI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisJaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBfY3Rfc3lzY3RsX2hlYWRlcik7CisjZW5kaWYKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwX2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXBfY29ubnRyYWNrX29wcykpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwlpcF9jb25udHJhY2tfY2xlYW51cCgpOwogfQogCiBtb2R1bGVfaW5pdChpcF9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwppbmRleCBhMGJjODgzLi5kNDU2NjNkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCkBAIC03LDI0ICs3LDYgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgJ2JydXRlIGZvcmNlJyBILjMyMyBOQVQgbW9kdWxlIGJ5CiAgKiBKb3pzZWYgS2FkbGVjc2lrIDxrYWRsZWNAYmxhY2tob2xlLmtma2kuaHU+Ci0gKgotICogQ2hhbmdlczoKLSAqCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBZGRlZCBzdXBwb3J0IGZvciBub24tbGluZWFyIHNrYiAoYmFzZWQgb24gUGF0cmljayBNY0hhcmR5J3MgcGF0Y2gpCi0gKiAJICAzLiBFbGltaW5hdGVkIHVubmVjZXNzYXJ5IHJldHVybiBjb2RlCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQxLDY1ICsyMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogCi0jaW5jbHVkZSAiaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCIKLQogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awogI2Vsc2UKICNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCi1leHRlcm4gaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCk7Ci1leHRlcm4gaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpOwotZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKLQkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKLWV4dGVybiB2b2lkIGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCi0JCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7Ci1leHRlcm4gaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKLQkJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAotCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpzZXRfcmFzX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCQkgdV9pbnQxNl90IHBvcnQsIHVfaW50MTZfdCBydHBfcG9ydCwKLQkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydHBfZXhwLAotCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0Y3BfZXhwKTsKLWV4dGVybiBpbnQgKCpuYXRfdDEyMF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAotCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9oMjQ1X2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCi0JCQkgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgICAgIGludCBpZHgsIHVfaW50MTZfdCBwb3J0LAotCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNldF9hZGRyKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKaW5kZXggZWZiYThjNC4uMWFiYTkyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCS50YXJnZXQJCT0gaXB0X2RuYXRfdGFyZ2V0LAogCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcF9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0KSwKIAkudGFibGUJCT0gIm5hdCIsCi0JLmhvb2tzCQk9IDEgPDwgTkZfSVBfUFJFX1JPVVRJTkcsCisJLmhvb2tzCQk9ICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lQX0xPQ0FMX09VVCksCiAJLmNoZWNrZW50cnkJPSBpcHRfZG5hdF9jaGVja2VudHJ5LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwppbmRleCAzNTA1YjBkLi44Zjc2MGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMjk5LDY5ICsyOTksNjMgQEAKIAogLyogV2UgbXVzdCBiZSBhZnRlciBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBiZWZvcmUgcGFja2V0IGZpbHRlcmluZy4gKi8KIAotLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfbmF0X29wc1tdID0geworCS8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9pbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QsCisJfSwKKwkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovCisJeworCQkuaG9vawkJPSBpcF9uYXRfb3V0LAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMsCisJfSwKKwkvKiBBZnRlciBjb25udHJhY2ssIGFkanVzdCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9hZGp1c3QsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NFUV9BREpVU1QsCisJfSwKKwkvKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovCisJeworCQkuaG9vawkJPSBpcF9uYXRfbG9jYWxfZm4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKKwl9LAorCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBzb3VyY2UgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9mbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMsCisJfSwKKwkvKiBBZnRlciBjb25udHJhY2ssIGFkanVzdCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9hZGp1c3QsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKKwl9LAogfTsKIAotLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfb3V0LAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKLX07Ci0KLS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfYWRqdXN0X291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAotfTsKLQotLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfbG9jYWxfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfbG9jYWxfZm4sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAotfTsKLQotLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSBmb3IgcmVwbHkgcGFja2V0cyBvZiBMT0NBTF9PVVQgRE5BVCAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfbG9jYWxfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9mbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKLX07Ci0KLS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfYWRqdXN0X2luX29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfYWRqdXN0LAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKLX07Ci0KLQotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBpcF9uYXRfc3RhbmRhbG9uZV9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CiAKIAluZWVkX2Nvbm50cmFjaygpOwogCi0JaWYgKCFpbml0KSBnb3RvIGNsZWFudXA7Ci0KICNpZmRlZiBDT05GSUdfWEZSTQogCUJVR19PTihpcF9uYXRfZGVjb2RlX3Nlc3Npb24gIT0gTlVMTCk7CiAJaXBfbmF0X2RlY29kZV9zZXNzaW9uID0gbmF0X2RlY29kZV9zZXNzaW9uOwpAQCAtMzcxLDUwICszNjUsMTMgQEAKIAkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3Qgc2V0dXAgcnVsZXMuXG4iKTsKIAkJZ290byBjbGVhbnVwX2RlY29kZV9zZXNzaW9uOwogCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfaW5fb3BzKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcF9uYXRfb3BzLCBBUlJBWV9TSVpFKGlwX25hdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBpbiBob29rLlxuIik7CisJCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7CiAJCWdvdG8gY2xlYW51cF9ydWxlX2luaXQ7CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9hZGp1c3RfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBhZGp1c3QgaW4gaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfb3V0b3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfYWRqdXN0X291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGFkanVzdCBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfYWRqdXN0aW5fb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfbG9jYWxfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgb3V0IGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2FkanVzdG91dF9vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2xvY2Fsb3V0b3BzOwotCX0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9pbl9vcHMpOwotIGNsZWFudXBfbG9jYWxvdXRvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9hZGp1c3RvdXRfb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9vdXRfb3BzKTsKLSBjbGVhbnVwX2FkanVzdGluX29wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9hZGp1c3RfaW5fb3BzKTsKLSBjbGVhbnVwX291dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9vdXRfb3BzKTsKLSBjbGVhbnVwX2lub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2luX29wcyk7CiAgY2xlYW51cF9ydWxlX2luaXQ6CiAJaXBfbmF0X3J1bGVfY2xlYW51cCgpOwogIGNsZWFudXBfZGVjb2RlX3Nlc3Npb246CkBAIC00MjUsMTQgKzM4MiwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlwX25hdF9zdGFuZGFsb25lX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfbmF0X3N0YW5kYWxvbmVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwX25hdF9vcHMsIEFSUkFZX1NJWkUoaXBfbmF0X29wcykpOworCWlwX25hdF9ydWxlX2NsZWFudXAoKTsKKyNpZmRlZiBDT05GSUdfWEZSTQorCWlwX25hdF9kZWNvZGVfc2Vzc2lvbiA9IE5VTEw7CisJc3luY2hyb25pemVfbmV0KCk7CisjZW5kaWYKIH0KIAogbW9kdWxlX2luaXQoaXBfbmF0X3N0YW5kYWxvbmVfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCmluZGV4IDg5NmEyNDQuLmI5M2YwNDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCkBAIC02NjIsMTUgKzY2MiwxMSBAQAogCS5vdXRmbgk9ICZpcHFfZW5xdWV1ZV9wYWNrZXQsCiB9OwogCi1zdGF0aWMgaW50Ci1pbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBpcF9xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9NRU07CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJbmV0bGlua19yZWdpc3Rlcl9ub3RpZmllcigmaXBxX25sX25vdGlmaWVyKTsKIAlpcHFubCA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShORVRMSU5LX0ZJUkVXQUxMLCAwLCBpcHFfcmN2X3NrLAogCQkJCSAgICAgIFRISVNfTU9EVUxFKTsKQEAgLTY5NywxMSArNjkzLDYgQEAKIAl9CiAJcmV0dXJuIHN0YXR1czsKIAotY2xlYW51cDoKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKLQlzeW5jaHJvbml6ZV9uZXQoKTsKLQlpcHFfZmx1c2goTkZfRFJPUCk7Ci0JCiBjbGVhbnVwX3N5c2N0bDoKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcHFfc3lzY3RsX2hlYWRlcik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwcV9kZXZfbm90aWZpZXIpOwpAQCAtNzE3LDE1ICs3MDgsMjEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpcF9xdWV1ZV9pbml0KHZvaWQpCi17Ci0JCi0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgxKTsKLX0KLQogc3RhdGljIHZvaWQgX19leGl0IGlwX3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7CisJc3luY2hyb25pemVfbmV0KCk7CisJaXBxX2ZsdXNoKE5GX0RST1ApOworCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKKwlwcm9jX25ldF9yZW1vdmUoSVBRX1BST0NfRlNfTkFNRSk7CisKKwlzb2NrX3JlbGVhc2UoaXBxbmwtPnNrX3NvY2tldCk7CisJbXV0ZXhfbG9jaygmaXBxbmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaXBxbmxfbXV0ZXgpOworCisJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjQgcGFja2V0IHF1ZXVlIGhhbmRsZXIiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCBkNWI4Y2RkLi5kMjVhYzhiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC03MzUsNyArNzM1LDcgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKG5ld2luZm8tPmVudHJpZXNbaV0gJiYgbmV3aW5mby0+ZW50cmllc1tpXSAhPSBlbnRyeTApCiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CkBAIC03ODgsNyArNzg4LDcgQEAKIAkJCSAgY291bnRlcnMsCiAJCQkgICZpKTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gY3VyY3B1KQogCQkJY29udGludWU7CiAJCWkgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggZTQ3NjhhMy4uYWFkOWQyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC03MjUsMjIgKzcyNSwxNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGZpbmkpCitzdGF0aWMgaW50IF9faW5pdCBpcHRfY2x1c3RlcmlwX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGZpbmkpCi0JCWdvdG8gY2xlYW51cDsKKwlyZXQgPSBpcHRfcmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotCWlmIChpcHRfcmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXBfbm9uZTsKLQl9Ci0KLQlpZiAobmZfcmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpIDwgMCkgewotCQlyZXQgPSAtRUlOVkFMOworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmNpcF9hcnBfb3BzKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhcmdldDsKLQl9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWNsdXN0ZXJpcF9wcm9jZGlyID0gcHJvY19ta2RpcigiaXB0X0NMVVNURVJJUCIsIHByb2NfbmV0KTsKQEAgLTc1MywzMSArNzQ4LDI0IEBACiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIkNsdXN0ZXJJUCBWZXJzaW9uICVzIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIsCiAJCUNMVVNURVJJUF9WRVJTSU9OKTsKLQogCXJldHVybiAwOwogCi1jbGVhbnVwOgorY2xlYW51cF9ob29rOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpOworY2xlYW51cF90YXJnZXQ6CisJaXB0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXB0X2NsdXN0ZXJpcF9maW5pKHZvaWQpCit7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJDbHVzdGVySVAgVmVyc2lvbiAlcyB1bmxvYWRpbmdcbiIsCiAJCUNMVVNURVJJUF9WRVJTSU9OKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXJlbW92ZV9wcm9jX2VudHJ5KGNsdXN0ZXJpcF9wcm9jZGlyLT5uYW1lLCBjbHVzdGVyaXBfcHJvY2Rpci0+cGFyZW50KTsKICNlbmRpZgotY2xlYW51cF9ob29rOgogCW5mX3VucmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpOwotY2xlYW51cF90YXJnZXQ6CiAJaXB0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGd0KTsKLWNsZWFudXBfbm9uZToKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaXB0X2NsdXN0ZXJpcF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlwdF9jbHVzdGVyaXBfZmluaSh2b2lkKQotewotCWluaXRfb3JfY2xlYW51cCgxKTsKIH0KIAogbW9kdWxlX2luaXQoaXB0X2NsdXN0ZXJpcF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCmluZGV4IDQyNjlhNTQuLjBiYmEzYzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwpAQCAtMTA2LDcgKzEwNiw2IEBACiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJdV9pbnQxNl90IHRtcF9wb3J0OwogCXVfaW50MzJfdCB0bXBfYWRkcjsKLQl1bnNpZ25lZCBpbnQgdGNwbGVuOwogCWludCBuZWVkc19hY2s7CiAJaW50IGhoX2xlbjsKIApAQCAtMTI0LDEzICsxMjMsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBDaGVjayBjaGVja3N1bSAqLwotCXRjcGxlbiA9IG9sZHNrYi0+bGVuIC0gaXBoLT5paGwgKiA0OwotCWlmICgoKGhvb2sgIT0gTkZfSVBfTE9DQUxfSU4gJiYgb2xkc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fSFcpIHx8Ci0JICAgICAoaG9vayA9PSBORl9JUF9MT0NBTF9JTiAmJgotCSAgICAgIG9sZHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSkgJiYKLQkgICAgY3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgdGNwbGVuLCBJUFBST1RPX1RDUCwKLQkgICAgICAgICAgICAgICAgICAgICAgb2xkc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBvbGRza2ItPmNzdW0gOgotCSAgICAgICAgICAgICAgICAgICAgICBza2JfY2hlY2tzdW0ob2xkc2tiLCBpcGgtPmlobCAqIDQsIHRjcGxlbiwgMCkpKQorCWlmIChuZl9pcF9jaGVja3N1bShvbGRza2IsIGhvb2ssIGlwaC0+aWhsICogNCwgSVBQUk9UT19UQ1ApKQogCQlyZXR1cm47CiAKIAlpZiAoKHJ0ID0gcm91dGVfcmV2ZXJzZShvbGRza2IsIG90aCwgaG9vaykpID09IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCmluZGV4IDNkODBhZWYuLjdmNDE3NDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCkBAIC0xNTcsMzcgKzE1NywyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMl0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazE7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMToKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotIGNsZWFudXBfaG9vazA6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlwdF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOwogCWlwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCA0MTJmYzk2Li4zOTdiOTVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtMjExLDQ5ICsyMTEsMjAgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW51cF90YWJsZTsKIAotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzJdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2sxOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1szXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMjsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbNF0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazM7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMzoKLSAgICAgICAgbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzNdKTsKLSBjbGVhbnVwX2hvb2syOgotICAgICAgICBuZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMl0pOwotIGNsZWFudXBfaG9vazE6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzFdKTsKLSBjbGVhbnVwX2hvb2swOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CiAgY2xlYW51cF90YWJsZToKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X21hbmdsZXIpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfbWFuZ2xlX2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXB0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzW2ldKTsKLQorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9tYW5nbGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYwppbmRleCAwM2NjNzlhLi43OTEyY2NlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYwpAQCAtMTAxLDE4ICsxMDEsMTggQEAKIC8qICdyYXcnIGlzIHRoZSB2ZXJ5IGZpcnN0IHRhYmxlLiAqLwogc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHRfb3BzW10gPSB7CiAJewotCSAgLmhvb2sgPSBpcHRfaG9vaywgCi0JICAucGYgPSBQRl9JTkVULCAKLQkgIC5ob29rbnVtID0gTkZfSVBfUFJFX1JPVVRJTkcsIAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKLQkgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkuaG9vayA9IGlwdF9ob29rLAorCQkucGYgPSBQRl9JTkVULAorCQkuaG9va251bSA9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCXsKLQkgIC5ob29rID0gaXB0X2hvb2ssIAotCSAgLnBmID0gUEZfSU5FVCwgCi0JICAuaG9va251bSA9IE5GX0lQX0xPQ0FMX09VVCwgCi0JICAucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5ob29rID0gaXB0X2hvb2ssCisJCS5wZiA9IFBGX0lORVQsCisJCS5ob29rbnVtID0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtMTI2LDMxICsxMjYsMjAgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW51cF90YWJsZTsKIAotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMF0pOwogIGNsZWFudXBfdGFibGU6CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9yYXcpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfcmF3X2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXB0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzW2ldKTsKLQorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9yYXcpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwppbmRleCA0YWZiYzY5Li41YmM5ZjY0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKQEAgLTIxMCw3MSArMjEwLDYzIEBACiAKIC8qIENvbm5lY3Rpb24gdHJhY2tpbmcgbWF5IGRyb3AgcGFja2V0cywgYnV0IG5ldmVyIGFsdGVycyB0aGVtLCBzbwogICAgbWFrZSBpdCB0aGUgZmlyc3QgaG9vay4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19kZWZyYWcsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2luX29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyA9IHsKLQkuaG9vayAgICAgICAgICAgPSBpcHY0X2Nvbm50cmFja19kZWZyYWcsCi0JLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLnBmICAgICAgICAgICAgID0gUEZfSU5FVCwKLQkuaG9va251bSAgICAgICAgPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5ICAgICAgID0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfbG9jYWwsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCi19OwotCi0vKiBoZWxwZXJzICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19oZWxwZXJfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi0KLS8qIFJlZnJhZ21lbnRlcjsgbGFzdCBjaGFuY2UuICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2xvY2FsX2luX29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2NvbmZpcm0sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2luLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAorCX0sCisJeworCQkuaG9vayAgICAgICAgICAgPSBpcHY0X2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCQkucGYgICAgICAgICAgICAgPSBQRl9JTkVULAorCQkuaG9va251bSAgICAgICAgPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSAgICAgICA9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19sb2NhbCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29uZmlybSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCisJfSwKIH07CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC00NDAsMTYgKzQzMiwyMCBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQ7CiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNDsKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wOwotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCisKK01PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOworCW5lZWRfY29ubnRyYWNrKCk7CiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBuZXRmaWx0ZXIgc29ja2V0IG9wdGlvblxuIik7Ci0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQpOwpAQCAtNDc2LDg0ICs0NzIsMjYgQEAKIAkJZ290byBjbGVhbnVwX2ljbXA7CiAJfQogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfZGVmcmFnX29wcyk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB2NF9jb25udHJhY2tfb3BzLAorCQkJCUFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgZGVmcmFnIGhvb2suXG4iKTsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKIAkJZ290byBjbGVhbnVwX2lwdjQ7CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbF9vdXQgZGVmcmFnIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ29wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5hbmRsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcG9zdHJvdXRpbmcgaGVscGVyIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcmlub3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHBvc3Qtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9oZWxwZXJvdXRvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOwotCX0KLQogI2lmZGVmIENPTkZJR19TWVNDVEwKIAluZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKIAlpZiAobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfbG9jYWxpbm9wczsKKwkJZ290byBjbGVhbnVwX2hvb2tzOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCXN5bmNocm9uaXplX25ldCgpOwogI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6CisgY2xlYW51cF9ob29rczoKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjRfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLSBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcmlub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2luX29wcyk7Ci0gY2xlYW51cF9kZWZyYWdsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2RlZnJhZ29wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwogIGNsZWFudXBfaXB2NDoKIAluZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY0KTsKICBjbGVhbnVwX2ljbXA6CkBAIC01NjQsMjIgKzUwMiwyMSBAQAogCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CiAgY2xlYW51cF9zb2Nrb3B0OgogCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmc29fZ2V0b3JpZ2RzdCk7Ci0gY2xlYW51cF9ub3RoaW5nOgogCXJldHVybiByZXQ7CiB9CiAKLU1PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKLXsKLQluZWVkX2Nvbm50cmFjaygpOwotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJc3luY2hyb25pemVfbmV0KCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY0X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCk7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wKTsKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOworCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CisJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIH0KIAogbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggNTJkYzE3NS4uNGIwZDM2MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTIzNSwzMCArMjM1LDE0IEBACiAJfQogCiAJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLwotCWlmIChob29rbnVtICE9IE5GX0lQX1BSRV9ST1VUSU5HKQotCQlnb3RvIGNoZWNrc3VtX3NraXBwZWQ7Ci0KLQlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7Ci0JY2FzZSBDSEVDS1NVTV9IVzoKLQkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQotCQkJYnJlYWs7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCAwKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSFcgSUNNUCBjaGVja3N1bSAiKTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7Ci0JY2FzZSBDSEVDS1NVTV9OT05FOgotCQlpZiAoKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkgewotCQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCi0JCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsCi0JCQkJCSAgICAgIE5VTEwsCi0JCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSUNNUCBjaGVja3N1bSAiKTsKLQkJCXJldHVybiAtTkZfQUNDRVBUOwotCQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQogCi1jaGVja3N1bV9za2lwcGVkOgogCS8qCiAJICoJMTggaXMgdGhlIGhpZ2hlc3QgJ2tub3duJyBJQ01QIHR5cGUuIEFueXRoaW5nIGVsc2UgaXMgYSBteXN0ZXJ5CiAJICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCAxYjE2N2M0Yi4uZDYxZTJhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvYy5jCisrKyBiL25ldC9pcHY0L3Byb2MuYwpAQCAtNDksNyArNDksNyBAQAogCWludCByZXMgPSAwOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXJlcyArPSBwcm90by0+c3RhdHNbY3B1XS5pbnVzZTsKIAogCXJldHVybiByZXM7CkBAIC05MSw3ICs5MSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXMgPSAwOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlyZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKikgcGVyX2NwdV9wdHIobWliWzBdLCBpKSkgKyBvZmZ0KTsKIAkJcmVzICs9ICooKCh1bnNpZ25lZCBsb25nICopIHBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTRmY2JjNS4uZmY0MzQ4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0zMDgzLDcgKzMwODMsNyBAQAogCQltZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCk7CiAKIAkJLyogQWRkIHRoZSBvdGhlciBjcHVzIGluLCBvbmUgaW50IGF0IGEgdGltZSAqLwotCQlmb3JfZWFjaF9jcHUoaSkgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQkJdW5zaWduZWQgaW50IGo7CiAKIAkJCXNyYyA9ICgodTMyICopIElQX1JUX0FDQ1RfQ1BVKGkpKSArIG9mZnNldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3R1bm5lbDQuYyBiL25ldC9pcHY0L3R1bm5lbDQuYwppbmRleCAwZDdkMzg2Li44ZDMwYzQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90dW5uZWw0LmMKKysrIGIvbmV0L2lwdjQvdHVubmVsNC5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bmV0L2ljbXAuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCkBAIC03MCwxMCArNzIsMTYgQEAKIHsKIAlzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXI7CiAKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisJCWdvdG8gZHJvcDsKKwogCWZvciAoaGFuZGxlciA9IHR1bm5lbDRfaGFuZGxlcnM7IGhhbmRsZXI7IGhhbmRsZXIgPSBoYW5kbGVyLT5uZXh0KQogCQlpZiAoIWhhbmRsZXItPmhhbmRsZXIoc2tiKSkKIAkJCXJldHVybiAwOwogCisJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTsKKworZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCmluZGV4IGUxYjhmNGIuLjNlMTc0YzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtMzcsOCArMzcsNiBAQAogewogCXN3aXRjaCAobmV4dGhkcikgewogCWNhc2UgSVBQUk9UT19JUElQOgotCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKIAkJKnNwaSA9IHNrYi0+bmguaXBoLT5zYWRkcjsKIAkJKnNlcSA9IDA7CiAJCXJldHVybiAwOwpAQCAtOTAsNyArODgsNyBAQAogCQlpZiAodW5saWtlbHkoeC0+a20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkpCiAJCQlnb3RvIGRyb3BfdW5sb2NrOwogCi0JCWlmICh4LT5lbmNhcC0+ZW5jYXBfdHlwZSAhPSBlbmNhcF90eXBlKQorCQlpZiAoKHgtPmVuY2FwID8geC0+ZW5jYXAtPmVuY2FwX3R5cGUgOiAwKSAhPSBlbmNhcF90eXBlKQogCQkJZ290byBkcm9wX3VubG9jazsKIAogCQlpZiAoeC0+cHJvcHMucmVwbGF5X3dpbmRvdyAmJiB4ZnJtX3JlcGxheV9jaGVjayh4LCBzZXEpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jCmluZGV4IDIxZWI3MjUuLjEwNDRiNmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2ljbXAuYworKysgYi9uZXQvaXB2Ni9pY21wLmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZXJyLCBpLCBqOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQllcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19JQ01QVjYsCiAJCQkJICAgICAgICZwZXJfY3B1KF9faWNtcHY2X3NvY2tldCwgaSkpOwogCQlpZiAoZXJyIDwgMCkgewpAQCAtNzYzLDcgKzc2Myw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXNvY2tfcmVsZWFzZShwZXJfY3B1KF9faWNtcHY2X3NvY2tldCwgaSkpOwogCX0KIAlpbmV0Nl9kZWxfcHJvdG9jb2woJmljbXB2Nl9wcm90b2NvbCwgSVBQUk9UT19JQ01QVjYpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCmluZGV4IGJiOGZmYjguLjJhZTg0YzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKQEAgLTIzLDYgKzIzLDg2IEBACiAjaW5jbHVkZSA8bmV0L2luZXQ2X2hhc2h0YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIAordm9pZCBfX2luZXQ2X2hhc2goc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCXN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdDsKKwlyd2xvY2tfdCAqbG9jazsKKworCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7CisKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKKwkJbGlzdCA9ICZoYXNoaW5mby0+bGlzdGVuaW5nX2hhc2hbaW5ldF9za19saXN0ZW5faGFzaGZuKHNrKV07CisJCWxvY2sgPSAmaGFzaGluZm8tPmxoYXNoX2xvY2s7CisJCWluZXRfbGlzdGVuX3dsb2NrKGhhc2hpbmZvKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgaGFzaDsKKwkJc2stPnNrX2hhc2ggPSBoYXNoID0gaW5ldDZfc2tfZWhhc2hmbihzayk7CisJCWhhc2ggJj0gKGhhc2hpbmZvLT5laGFzaF9zaXplIC0gMSk7CisJCWxpc3QgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmNoYWluOworCQlsb2NrID0gJmhhc2hpbmZvLT5laGFzaFtoYXNoXS5sb2NrOworCQl3cml0ZV9sb2NrKGxvY2spOworCX0KKworCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOworCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKKwl3cml0ZV91bmxvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW5ldDZfaGFzaCk7CisKKy8qCisgKiBTb2NrZXRzIGluIFRDUF9DTE9TRSBzdGF0ZSBhcmUgX2Fsd2F5c18gdGFrZW4gb3V0IG9mIHRoZSBoYXNoLCBzbworICogd2UgbmVlZCBub3QgY2hlY2sgaXQgZm9yIFRDUCBsb29rdXBzIGFueW1vcmUsIHRoYW5rcyBBbGV4ZXkuIC1EYXZlTQorICoKKyAqIFRoZSBzb2NraGFzaCBsb2NrIG11c3QgYmUgaGVsZCBhcyBhIHJlYWRlciBoZXJlLgorICovCitzdHJ1Y3Qgc29jayAqX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgICBjb25zdCB1MTYgc3BvcnQsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgIGNvbnN0IHUxNiBobnVtLAorCQkJCQkgICBjb25zdCBpbnQgZGlmKQoreworCXN0cnVjdCBzb2NrICpzazsKKwljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoc3BvcnQsIGhudW0pOworCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgorCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCisJICovCisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhhc2hpbmZvLCBoYXNoKTsKKworCXByZWZldGNoKGhlYWQtPmNoYWluLmZpcnN0KTsKKwlyZWFkX2xvY2soJmhlYWQtPmxvY2spOworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKKwkJLyogRm9yIElQVjYgZG8gdGhlIGNoZWFwZXIgcG9ydCBhbmQgZmFtaWx5IHRlc3RzIGZpcnN0LiAqLworCQlpZiAoSU5FVDZfTUFUQ0goc2ssIGhhc2gsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCisJCQlnb3RvIGhpdDsgLyogWW91IHN1bmsgbXkgYmF0dGxlc2hpcCEgKi8KKwl9CisJLyogTXVzdCBjaGVjayBmb3IgYSBUSU1FX1dBSVQnZXIgYmVmb3JlIGdvaW5nIHRvIGxpc3RlbmVyIGhhc2guICovCisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICYoaGVhZCArIGhhc2hpbmZvLT5laGFzaF9zaXplKS0+Y2hhaW4pIHsKKwkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOworCisJCWlmKCooKF9fdTMyICopJih0dy0+dHdfZHBvcnQpKQk9PSBwb3J0cwkmJgorCQkgICBzay0+c2tfZmFtaWx5CQk9PSBQRl9JTkVUNikgeworCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOworCisJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZ0dzYtPnR3X3Y2X2RhZGRyLCBzYWRkcikJJiYKKwkJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikJJiYKKwkJCSAgICAoIXNrLT5za19ib3VuZF9kZXZfaWYgfHwgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkaWYpKQorCQkJCWdvdG8gaGl0OworCQl9CisJfQorCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwlyZXR1cm4gTlVMTDsKKworaGl0OgorCXNvY2tfaG9sZChzayk7CisJcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOworCXJldHVybiBzazsKK30KK0VYUE9SVF9TWU1CT0woX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQpOworCiBzdHJ1Y3Qgc29jayAqaW5ldDZfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCSAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGhudW0sIGNvbnN0IGludCBkaWYpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggZmY5MDQwYy4uYTk5NTc5NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtNTE5LDkgKzUxOSw2IEBACiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoOwogCXN0cnVjdCBpcDZfdG5sICp0OwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mICgqaXB2NmgpKSkKLQkJZ290byBkaXNjYXJkOwotCiAJaXB2NmggPSBza2ItPm5oLmlwdjZoOwogCiAJcmVhZF9sb2NrKCZpcDZpcDZfbG9jayk7CkBAIC01MjksOCArNTI2LDcgQEAKIAlpZiAoKHQgPSBpcDZpcDZfdG5sX2xvb2t1cCgmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyKSkgIT0gTlVMTCkgewogCQlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgewogCQkJcmVhZF91bmxvY2soJmlwNmlwNl9sb2NrKTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlnb3RvIGRpc2NhcmQ7CiAJCX0KIAogCQlpZiAoISh0LT5wYXJtcy5mbGFncyAmIElQNl9UTkxfRl9DQVBfUkNWKSkgewpAQCAtNTU3LDkgKzU1MywxMSBAQAogCQlyZXR1cm4gMDsKIAl9CiAJcmVhZF91bmxvY2soJmlwNmlwNl9sb2NrKTsKLQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9BRERSX1VOUkVBQ0gsIDAsIHNrYi0+ZGV2KTsKLWRpc2NhcmQ6CiAJcmV0dXJuIDE7CisKK2Rpc2NhcmQ6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwdjZfdHhvcHRpb25zICpjcmVhdGVfdGVsKF9fdTggZW5jYXBfbGltaXQpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggMDBmM2ZhZC4uMDVlYjY3ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJaWYgKCFzY3JhdGNoZXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdm9pZCAqc2NyYXRjaCA9ICpwZXJfY3B1X3B0cihzY3JhdGNoZXMsIGkpOwogCiAJCXZmcmVlKHNjcmF0Y2gpOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIAlpcGNvbXA2X3NjcmF0Y2hlcyA9IHNjcmF0Y2hlczsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdm9pZCAqc2NyYXRjaCA9IHZtYWxsb2MoSVBDT01QX1NDUkFUQ0hfU0laRSk7CiAJCWlmICghc2NyYXRjaCkKIAkJCXJldHVybiBOVUxMOwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJaWYgKCF0Zm1zKQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gKnBlcl9jcHVfcHRyKHRmbXMsIGNwdSk7CiAJCWNyeXB0b19mcmVlX3RmbSh0Zm0pOwogCX0KQEAgLTM4NCw3ICszODQsNyBAQAogCWlmICghdGZtcykKIAkJZ290byBlcnJvcjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAwKTsKIAkJaWYgKCF0Zm0pCiAJCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwppbmRleCBkNzUwY2ZjLi4zOTVhNDE3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9pcDZfcm91dGUuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogaW50IGlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTU0LDcgKzU1LDcgQEAKIAlzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7CiB9OwogCi1zdGF0aWMgdm9pZCBzYXZlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgbmZfaXA2X3NhdmVyb3V0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaXA2X3J0X2luZm8gKnJ0X2luZm8gPSBuZl9pbmZvX3Jlcm91dGUoaW5mbyk7CiAKQEAgLTY2LDcgKzY3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIGludCBuZl9pcDZfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcDZfcnRfaW5mbyAqcnRfaW5mbyA9IG5mX2luZm9fcmVyb3V0ZShpbmZvKTsKIApAQCAtNzksMTUgKzgwLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgaXA2X3Jlcm91dGUgPSB7Ci0JLnJlcl9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZfcnRfaW5mbyksCi0JLnNhdmUgCQk9ICZzYXZlLAotCS5yZXJvdXRlCT0gJnJlcm91dGUsCit1bnNpZ25lZCBpbnQgbmZfaXA2X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBza2ItPm5oLmlwdjZoOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoaG9vayAhPSBORl9JUDZfUFJFX1JPVVRJTkcgJiYgaG9vayAhPSBORl9JUDZfTE9DQUxfSU4pCisJCQlicmVhazsKKwkJaWYgKCFjc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCisJCQkgICAgCSAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKKwkJCQkgICAgIGNzdW1fc3ViKHNrYi0+Y3N1bSwKKwkJCQkJICAgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwKKwkJCQkJCQkgICBkYXRhb2ZmLCAwKSkpKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBDSEVDS1NVTV9OT05FOgorCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAorCQkJCQkgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwKKwkJCQkJICAgICBwcm90b2NvbCwKKwkJCQkJICAgICBjc3VtX3N1YigwLAorCQkJCQkJICAgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwKKwkJCQkJCQkgICAgICAgICAgIGRhdGFvZmYsIDApKSk7CisJCWNzdW0gPSBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOworCX0KKwlyZXR1cm4gY3N1bTsKK30KKworRVhQT1JUX1NZTUJPTChuZl9pcDZfY2hlY2tzdW0pOworCitzdGF0aWMgc3RydWN0IG5mX2FmaW5mbyBuZl9pcDZfYWZpbmZvID0geworCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLmNoZWNrc3VtCT0gbmZfaXA2X2NoZWNrc3VtLAorCS5zYXZlcm91dGUJPSBuZl9pcDZfc2F2ZXJvdXRlLAorCS5yZXJvdXRlCT0gbmZfaXA2X3Jlcm91dGUsCisJLnJvdXRlX2tleV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZfcnRfaW5mbyksCiB9OwogCiBpbnQgX19pbml0IGlwdjZfbmV0ZmlsdGVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoUEZfSU5FVDYsICZpcDZfcmVyb3V0ZSk7CisJcmV0dXJuIG5mX3JlZ2lzdGVyX2FmaW5mbygmbmZfaXA2X2FmaW5mbyk7CiB9CiAKIC8qIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGluZXQ2X2luaXQoKSBvbiBlcnJvcnMsIHNvIGl0IGNhbm5vdApAQCAtOTUsNSArMTMxLDUgQEAKICAqLwogdm9pZCBpcHY2X25ldGZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihQRl9JTkVUNik7CisJbmZfdW5yZWdpc3Rlcl9hZmluZm8oJm5mX2lwNl9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IGU4MWM2YTkuLmI0YjdkNDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTY1OCwxNSArNjU4LDExIEBACiAJLm91dGZuCT0gJmlwcV9lbnF1ZXVlX3BhY2tldCwKIH07CiAKLXN0YXRpYyBpbnQKLWluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IGlwNl9xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9NRU07CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJbmV0bGlua19yZWdpc3Rlcl9ub3RpZmllcigmaXBxX25sX25vdGlmaWVyKTsKIAlpcHFubCA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShORVRMSU5LX0lQNl9GVywgMCwgaXBxX3Jjdl9zaywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSElTX01PRFVMRSk7CkBAIC02OTMsMTEgKzY4OSw2IEBACiAJfQogCXJldHVybiBzdGF0dXM7CiAKLWNsZWFudXA6Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0JaXBxX2ZsdXNoKE5GX0RST1ApOwotCQogY2xlYW51cF9zeXNjdGw6CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKQEAgLTcxMywxNSArNzA0LDIxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXA2X3F1ZXVlX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2X3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7CisJc3luY2hyb25pemVfbmV0KCk7CisJaXBxX2ZsdXNoKE5GX0RST1ApOworCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKKwlwcm9jX25ldF9yZW1vdmUoSVBRX1BST0NfRlNfTkFNRSk7CisKKwlzb2NrX3JlbGVhc2UoaXBxbmwtPnNrX3NvY2tldCk7CisJbXV0ZXhfbG9jaygmaXBxbmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaXBxbmxfbXV0ZXgpOworCisJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjYgcGFja2V0IHF1ZXVlIGhhbmRsZXIiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDNlY2YyZGIuLjY0MmI0YjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtNzg4LDcgKzc4OCw3IEBACiAJfQogCiAJLyogQW5kIG9uZSBjb3B5IGZvciBldmVyeSBvdGhlciBDUFUgKi8KLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWlmIChuZXdpbmZvLT5lbnRyaWVzW2ldICYmIG5ld2luZm8tPmVudHJpZXNbaV0gIT0gZW50cnkwKQogCQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbaV0sIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSk7CiAJfQpAQCAtODQxLDcgKzg0MSw3IEBACiAJCQkgICBjb3VudGVycywKIAkJCSAgICZpKTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gY3VyY3B1KQogCQkJY29udGludWU7CiAJCWkgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCmluZGV4IGU1ZTcyNGQuLjYwOTc2YzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKQEAgLTE3NywzNyArMTc3LDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFibGU7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzJdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2sxOwotCiAJcmV0dXJuIHJldDsKIAotIGNsZWFudXBfaG9vazE6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXA2dF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwppbmRleCBlMWYwZjZhLi4wM2ExM2VhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC0yMzgsNDkgKzIzOCwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1syXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMTsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzNdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2syOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbNF0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazM7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMzoKLSAgICAgICAgbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1szXSk7Ci0gY2xlYW51cF9ob29rMjoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzJdKTsKLSBjbGVhbnVwX2hvb2sxOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotIGNsZWFudXBfaG9vazA6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CiAgY2xlYW51cF90YWJsZToKIAlpcDZ0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9tYW5nbGVyKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0YWJsZV9tYW5nbGVfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcDZ0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CiAJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfbWFuZ2xlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCA1NGQxZmZmLi42MWE3YzU4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0xNTIsMzEgKzE1MiwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfcmF3X2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXA2dF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IGM4YjVhOTYuLjkzYmFlMzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjg2LDU1ICsyODYsNDkgQEAKIAlyZXR1cm4gaXB2Nl9jb25udHJhY2tfaW4oaG9va251bSwgcHNrYiwgaW4sIG91dCwgb2tmbik7CiB9CiAKLS8qIENvbm5lY3Rpb24gdHJhY2tpbmcgbWF5IGRyb3AgcGFja2V0cywgYnV0IG5ldmVyIGFsdGVycyB0aGVtLCBzbwotICAgbWFrZSBpdCB0aGUgZmlyc3QgaG9vay4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcHY2X2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQ2LAotCS5ob29rbnVtCT0gTkZfSVA2X1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjZfY29ubnRyYWNrX2luLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfbG9jYWwsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVUNiwKLQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwdjZfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfT1VULAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLS8qIFJlZnJhZ21lbnRlcjsgbGFzdCBjaGFuY2UuICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjZfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQ2LAotCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX0lOLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVC0xLAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwdjZfZGVmcmFnLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjZfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0xBU1QsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjZfY29uZmlybSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVDYsCisJCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0xBU1QtMSwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTQ3MCwxNiArNDY0LDIxIEBACiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2OwogZXh0ZXJuIGludCBuZl9jdF9mcmFnNl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZfY3RfZnJhZzZfY2xlYW51cCh2b2lkKTsKLXN0YXRpYyBpbnQgaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQorCitNT0RVTEVfQUxJQVMoIm5mX2Nvbm50cmFjay0iIF9fc3RyaW5naWZ5KEFGX0lORVQ2KSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOworCW5lZWRfY29ubnRyYWNrKCk7CiAKIAlyZXQgPSBuZl9jdF9mcmFnNl9pbml0KCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgaW5pdGlhbGl6ZSBmcmFnNi5cbiIpOwotCQlnb3RvIGNsZWFudXBfbm90aGluZzsKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTUwNSw3MSArNTA0LDI3IEBACiAJCWdvdG8gY2xlYW51cF9pY21wdjY7CiAJfQogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB2Nl9jb25udHJhY2tfb3BzLAorCQkJCUFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgZGVmcmFnICIKIAkJICAgICAgICJob29rLlxuIik7CiAJCWdvdG8gY2xlYW51cF9pcHY2OwogCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbF9vdXQgZGVmcmFnICIKLQkJICAgICAgICJob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9kZWZyYWdvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBwcmUtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9kZWZyYWdsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbCBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5vcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgcG9zdC1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2luYW5kbG9jYWxvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOwotCX0KLQogI2lmZGVmIENPTkZJR19TWVNDVEwKIAluZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKIAlpZiAobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfbG9jYWxpbm9wczsKKwkJZ290byBjbGVhbnVwX2hvb2tzOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCXN5bmNocm9uaXplX25ldCgpOwogI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6CisgY2xlYW51cF9ob29rczoKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjZfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLSBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2luYW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2lub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfaW5fb3BzKTsKLSBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfZGVmcmFnb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyk7CiAgY2xlYW51cF9pcHY2OgogCW5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYpOwogIGNsZWFudXBfaWNtcHY2OgpAQCAtNTgwLDIzICs1MzUsMjEgQEAKIAluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYpOwogIGNsZWFudXBfZnJhZzY6CiAJbmZfY3RfZnJhZzZfY2xlYW51cCgpOwotIGNsZWFudXBfbm90aGluZzoKIAlyZXR1cm4gcmV0OwogfQogCi1NT0RVTEVfQUxJQVMoIm5mX2Nvbm50cmFjay0iIF9fc3RyaW5naWZ5KEFGX0lORVQ2KSk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2luaXQodm9pZCkKLXsKLQluZWVkX2Nvbm50cmFjaygpOwotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJc3luY2hyb25pemVfbmV0KCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY2X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Nik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjYpOworCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2KTsKKwluZl9jdF9mcmFnNl9jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjZfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCAwOTk0NWMzLi44NmM2NzAzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTIzMywyMSArMjMzLDEzIEBACiAJCXJldHVybiAtTkZfQUNDRVBUOwogCX0KIAotCWlmIChob29rbnVtICE9IE5GX0lQNl9QUkVfUk9VVElORykKLQkJZ290byBza2lwcGVkOwotCi0JLyogSWdub3JlIGl0IGlmIHRoZSBjaGVja3N1bSdzIGJvZ3VzLiAqLwotCWlmIChjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCi0JCQkgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX0lDTVBWNiwKLQkJCSAgICBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAotCQkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSkpIHsKKwlpZiAoaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXA2X2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgSVBQUk9UT19JQ01QVjYpKSB7CiAJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVDYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCSAgICAgICJuZl9jdF9pY21wdjY6IElDTVB2NiBjaGVja3N1bSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLXNraXBwZWQ6Ci0KIAkvKiBpcyBub3QgZXJyb3IgbWVzc2FnZSA/ICovCiAJaWYgKGljbXA2aC0+aWNtcDZfdHlwZSA+PSAxMjgpCiAJCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggNDIzOGIxZS4uNzc5ZGRmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtMzgsNyArMzgsNyBAQAogCWludCByZXMgPSAwOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXJlcyArPSBwcm90by0+c3RhdHNbY3B1XS5pbnVzZTsKIAogCXJldHVybiByZXM7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyByZXMgPSAwOwogICAgICAgICBpbnQgaTsKICAKLSAgICAgICAgZm9yX2VhY2hfY3B1KGkpIHsKKyAgICAgICAgZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKICAgICAgICAgICAgICAgICByZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKilwZXJfY3B1X3B0cihtaWJbMF0sIGkpKSArIG9mZnQpOwogICAgICAgICAgICAgICAgIHJlcyArPSAqKCgodW5zaWduZWQgbG9uZyAqKXBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggYzJkM2UxNy4uNjU3OGMzMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QUk9UX1VOUkVBQ0gsIDApOworCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmVhZF91bmxvY2soJmlwaXA2X2xvY2spOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdHVubmVsNi5jIGIvbmV0L2lwdjYvdHVubmVsNi5jCmluZGV4IDU2NTliNTIuLjBlZjlhMzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3R1bm5lbDYuYworKysgYi9uZXQvaXB2Ni90dW5uZWw2LmMKQEAgLTE5LDExICsxOSwxMyBAQAogICogCQlZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIApAQCAtODcsMTAgKzg5LDE2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCXN0cnVjdCB4ZnJtNl90dW5uZWwgKmhhbmRsZXI7CiAKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKKwkJZ290byBkcm9wOworCiAJZm9yIChoYW5kbGVyID0gdHVubmVsNl9oYW5kbGVyczsgaGFuZGxlcjsgaGFuZGxlciA9IGhhbmRsZXItPm5leHQpCiAJCWlmICghaGFuZGxlci0+aGFuZGxlcihza2IpKQogCQkJcmV0dXJuIDA7CiAKKwlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDAsIHNrYi0+ZGV2KTsKKworZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKaW5kZXggMWNlYjFhNi4uODQ1NWEzMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKQEAgLTI3LDYgKzI3LDI5IEBACiAKICNpbmNsdWRlICJuZl9pbnRlcm5hbHMuaCIKIAorc3RhdGljIERFRklORV9TUElOTE9DSyhhZmluZm9fbG9jayk7CisKK3N0cnVjdCBuZl9hZmluZm8gKm5mX2FmaW5mb1tOUFJPVE9dOworRVhQT1JUX1NZTUJPTChuZl9hZmluZm8pOworCitpbnQgbmZfcmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbykKK3sKKwlzcGluX2xvY2soJmFmaW5mb19sb2NrKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSwgYWZpbmZvKTsKKwlzcGluX3VubG9jaygmYWZpbmZvX2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfcmVnaXN0ZXJfYWZpbmZvKTsKKwordm9pZCBuZl91bnJlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm8pCit7CisJc3Bpbl9sb2NrKCZhZmluZm9fbG9jayk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2FmaW5mb1thZmluZm8tPmZhbWlseV0sIE5VTEwpOworCXNwaW5fdW5sb2NrKCZhZmluZm9fbG9jayk7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl91bnJlZ2lzdGVyX2FmaW5mbyk7CisKIC8qIEluIHRoaXMgY29kZSwgd2UgY2FuIGJlIHdhaXRpbmcgaW5kZWZpbml0ZWx5IGZvciB1c2Vyc3BhY2UgdG8KICAqIHNlcnZpY2UgYSBwYWNrZXQgaWYgYSBob29rIHJldHVybnMgTkZfUVVFVUUuICBXZSBjb3VsZCBrZWVwIGEgY291bnQKICAqIG9mIHNrYnVmZnMgcXVldWVkIGZvciB1c2Vyc3BhY2UsIGFuZCBub3QgZGVyZWdpc3RlciBhIGhvb2sgdW5sZXNzCkBAIC02Myw2ICs4NiwzNCBAQAogfQogRVhQT1JUX1NZTUJPTChuZl91bnJlZ2lzdGVyX2hvb2spOwogCitpbnQgbmZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIHVuc2lnbmVkIGludCBuKQoreworCXVuc2lnbmVkIGludCBpOworCWludCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQllcnIgPSBuZl9yZWdpc3Rlcl9ob29rKCZyZWdbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnI7CisJfQorCXJldHVybiBlcnI7CisKK2VycjoKKwlpZiAoaSA+IDApCisJCW5mX3VucmVnaXN0ZXJfaG9va3MocmVnLCBpKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChuZl9yZWdpc3Rlcl9ob29rcyk7CisKK3ZvaWQgbmZfdW5yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQluZl91bnJlZ2lzdGVyX2hvb2soJnJlZ1tpXSk7Cit9CitFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfaG9va3MpOworCiB1bnNpZ25lZCBpbnQgbmZfaXRlcmF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJc3RydWN0IHNrX2J1ZmYgKipza2IsCiAJCQlpbnQgaG9vaywKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCA1NjM4OWM4Li5lNTgxMTkwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQllY2FjaGUgPSAmcGVyX2NwdShuZl9jb25udHJhY2tfZWNhY2hlLCBjcHUpOwogCQlpZiAoZWNhY2hlLT5jdCkKIAkJCW5mX2N0X3B1dChlY2FjaGUtPmN0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggNjQ5MmVkNi4uNjk4OTlmMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTc5OSw4ICs3OTksNyBAQAogCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKIAkJICAgICBpbnQgcGYsCi0JCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCi0JCSAgICAgaW50KCpjc3VtKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqLHVuc2lnbmVkIGludCkpCisJCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRoOwogCXVuc2lnbmVkIGludCB0Y3BsZW4gPSBza2ItPmxlbiAtIGRhdGFvZmY7CkBAIC04MzAsOSArODI5LDggQEAKIAkgKi8KIAkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KIAlpZiAoKChwZiA9PSBQRl9JTkVUICYmIGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcpIHx8Ci0JICAgICAocGYgPT0gUEZfSU5FVDYgJiYgaG9va251bSAgPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkKLQkgICAgJiYgc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkKLQkgICAgJiYgY3N1bShza2IsIGRhdGFvZmYpKSB7CisJICAgICAocGYgPT0gUEZfSU5FVDYgJiYgaG9va251bSAgPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkgJiYKKwkgICAgbmZfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCBJUFBST1RPX1RDUCwgcGYpKSB7CiAJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1RDUCkpCiAJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJICAibmZfY3RfdGNwOiBiYWQgVENQIGNoZWNrc3VtICIpOwpAQCAtODUxLDQ0ICs4NDksNiBAQAogCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKLXN0YXRpYyBpbnQgY3N1bTQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCi17Ci0JcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKHNrYi0+bmguaXBoLT5zYWRkciwgc2tiLT5uaC5pcGgtPmRhZGRyLAotCQkJCSBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVENQLAotCQkJICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KLQkJCSAgICAgIAkgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAotCQkJCQkJc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY3N1bTYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCi17Ci0JcmV0dXJuIGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKLQkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVENQLAotCQkJICAgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXCi0JCQkgICAgICAgPyBjc3VtX3N1Yihza2ItPmNzdW0sCi0JCQkJCSAgc2tiX2NoZWNrc3VtKHNrYiwgMCwgZGF0YW9mZiwgMCkpCi0JCQkgICAgICAgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLCBza2ItPmxlbiAtIGRhdGFvZmYsCi0JCQkJCSAgICAgIDApKTsKLX0KLQotc3RhdGljIGludCB0Y3BfZXJyb3I0KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCi0JCSAgICAgIGludCBwZiwKLQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCi17Ci0JcmV0dXJuIHRjcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW00KTsKLX0KLQotc3RhdGljIGludCB0Y3BfZXJyb3I2KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCi0JCSAgICAgIGludCBwZiwKLQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCi17Ci0JcmV0dXJuIHRjcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW02KTsKLX0KLQogLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC0xIGZvciBpbnZhbGlkLiAqLwogc3RhdGljIGludCB0Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xMjE4LDcgKzExNzgsNyBAQAogCS5wcmludF9jb25udHJhY2sgCT0gdGNwX3ByaW50X2Nvbm50cmFjaywKIAkucGFja2V0IAkJPSB0Y3BfcGFja2V0LAogCS5uZXcgCQkJPSB0Y3BfbmV3LAotCS5lcnJvcgkJCT0gdGNwX2Vycm9yNCwKKwkuZXJyb3IJCQk9IHRjcF9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25mYXR0cgkJPSB0Y3BfdG9fbmZhdHRyLApAQCAtMTIzOSw3ICsxMTk5LDcgQEAKIAkucHJpbnRfY29ubnRyYWNrIAk9IHRjcF9wcmludF9jb25udHJhY2ssCiAJLnBhY2tldCAJCT0gdGNwX3BhY2tldCwKIAkubmV3IAkJCT0gdGNwX25ldywKLQkuZXJyb3IJCQk9IHRjcF9lcnJvcjYsCisJLmVycm9yCQkJPSB0Y3BfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50b19uZmF0dHIJCT0gdGNwX3RvX25mYXR0ciwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMKaW5kZXggODMxZDIwNi4uZDkzZWRiZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMKQEAgLTEwMyw4ICsxMDMsNyBAQAogc3RhdGljIGludCB1ZHBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgIGludCBwZiwKLQkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKLQkJICAgICBpbnQgKCpjc3VtKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqLCB1bnNpZ25lZCBpbnQpKQorCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCXVuc2lnbmVkIGludCB1ZHBsZW4gPSBza2ItPmxlbiAtIGRhdGFvZmY7CiAJc3RydWN0IHVkcGhkciBfaGRyLCAqaGRyOwpAQCAtMTM2LDkgKzEzNSw4IEBACiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KIAlpZiAoKChwZiA9PSBQRl9JTkVUICYmIGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcpIHx8Ci0JICAgICAocGYgPT0gUEZfSU5FVDYgJiYgaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcpKQotCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQotCSAgICAmJiBjc3VtKHNrYiwgZGF0YW9mZikpIHsKKwkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtID09IE5GX0lQNl9QUkVfUk9VVElORykpICYmCisJICAgIG5mX2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgSVBQUk9UT19VRFAsIHBmKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19VRFApKQogCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSJuZl9jdF91ZHA6IGJhZCBVRFAgY2hlY2tzdW0gIik7CkBAIC0xNDgsNDQgKzE0Niw2IEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBjc3VtNChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKLXsKLQlyZXR1cm4gY3N1bV90Y3B1ZHBfbWFnaWMoc2tiLT5uaC5pcGgtPnNhZGRyLCBza2ItPm5oLmlwaC0+ZGFkZHIsCi0JCQkJIHNrYi0+bGVuIC0gZGF0YW9mZiwgSVBQUk9UT19VRFAsCi0JCQkJIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gc2tiLT5jc3VtCi0JCQkJIDogc2tiX2NoZWNrc3VtKHNrYiwgZGF0YW9mZiwKLQkJCQkJCXNrYi0+bGVuIC0gZGF0YW9mZiwgMCkpOwotfQotCi1zdGF0aWMgaW50IGNzdW02KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmKQotewotCXJldHVybiBjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCi0JCQkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX1VEUCwKLQkJCSAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVwotCQkJICAgICAgID8gY3N1bV9zdWIoc2tiLT5jc3VtLAotCQkJCQkgIHNrYl9jaGVja3N1bShza2IsIDAsIGRhdGFvZmYsIDApKQotCQkJICAgICAgIDogc2tiX2NoZWNrc3VtKHNrYiwgZGF0YW9mZiwgc2tiLT5sZW4gLSBkYXRhb2ZmLAotCQkJCQkgICAgICAwKSk7Ci19Ci0KLXN0YXRpYyBpbnQgdWRwX2Vycm9yNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAotCQkgICAgICBpbnQgcGYsCi0JCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQotewotCXJldHVybiB1ZHBfZXJyb3Ioc2tiLCBkYXRhb2ZmLCBjdGluZm8sIHBmLCBob29rbnVtLCBjc3VtNCk7Ci19Ci0KLXN0YXRpYyBpbnQgdWRwX2Vycm9yNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAotCQkgICAgICBpbnQgcGYsCi0JCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQotewotCXJldHVybiB1ZHBfZXJyb3Ioc2tiLCBkYXRhb2ZmLCBjdGluZm8sIHBmLCBob29rbnVtLCBjc3VtNik7Ci19Ci0KIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQgPQogewogCS5sM3Byb3RvCQk9IFBGX0lORVQsCkBAIC0xOTcsNyArMTU3LDcgQEAKIAkucHJpbnRfY29ubnRyYWNrCT0gdWRwX3ByaW50X2Nvbm50cmFjaywKIAkucGFja2V0CQkJPSB1ZHBfcGFja2V0LAogCS5uZXcJCQk9IHVkcF9uZXcsCi0JLmVycm9yCQkJPSB1ZHBfZXJyb3I0LAorCS5lcnJvcgkJCT0gdWRwX2Vycm9yLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmZhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19uZmF0dHIsCkBAIC0yMTYsNyArMTc2LDcgQEAKIAkucHJpbnRfY29ubnRyYWNrCT0gdWRwX3ByaW50X2Nvbm50cmFjaywKIAkucGFja2V0CQkJPSB1ZHBfcGFja2V0LAogCS5uZXcJCQk9IHVkcF9uZXcsCi0JLmVycm9yCQkJPSB1ZHBfZXJyb3I2LAorCS5lcnJvcgkJCT0gdWRwX2Vycm9yLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmZhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19uZmF0dHIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggYzcyYWEzYy4uNDA4OTYwYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtNjQ5LDYzICs2NDksNiBAQAogRVhQT1JUX1NZTUJPTChuZl9jdF9sb2dfaW52YWxpZCk7CiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OwotI2VuZGlmCi0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKLQotCXJldCA9IG5mX2Nvbm50cmFja19pbml0KCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoIm5mX2Nvbm50cmFjayIsIDA0NDAsICZjdF9maWxlX29wcyk7Ci0JaWYgKCFwcm9jKSBnb3RvIGNsZWFudXBfaW5pdDsKLQotCXByb2NfZXhwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoIm5mX2Nvbm50cmFja19leHBlY3QiLCAwNDQwLAotCQkJCQkmZXhwX2ZpbGVfb3BzKTsKLQlpZiAoIXByb2NfZXhwKSBnb3RvIGNsZWFudXBfcHJvYzsKLQotCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKLQlpZiAoIXByb2Nfc3RhdCkKLQkJZ290byBjbGVhbnVwX3Byb2NfZXhwOwotCi0JcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOwotCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TWVNDVEwKLQluZl9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X25ldF90YWJsZSwgMCk7Ci0JaWYgKG5mX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7Ci0JfQotI2VuZGlmCi0KLQlyZXR1cm4gcmV0OwotCi0gY2xlYW51cDoKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0gCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X3N5c2N0bF9oZWFkZXIpOwotIGNsZWFudXBfcHJvY19zdGF0OgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgibmZfY29ubnRyYWNrIiwgcHJvY19uZXRfc3RhdCk7Ci0gY2xlYW51cF9wcm9jX2V4cDoKLQlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFja19leHBlY3QiKTsKLSBjbGVhbnVwX3Byb2M6Ci0JcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2siKTsKLSBjbGVhbnVwX2luaXQ6Ci0jZW5kaWYgLyogQ05GSUdfUFJPQ19GUyAqLwotCW5mX2Nvbm50cmFja19jbGVhbnVwKCk7Ci0gY2xlYW51cF9ub3RoaW5nOgotCXJldHVybiByZXQ7Ci19Ci0KIGludCBuZl9jb25udHJhY2tfbDNwcm90b19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKnByb3RvKQogewogCWludCByZXQgPSAwOwpAQCAtODA4LDEyICs3NTEsNjYgQEAKIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKQogewotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MsICpwcm9jX2V4cCwgKnByb2Nfc3RhdDsKKyNlbmRpZgorCWludCByZXQgPSAwOworCisJcmV0ID0gbmZfY29ubnRyYWNrX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcHJvYyA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCJuZl9jb25udHJhY2siLCAwNDQwLCAmY3RfZmlsZV9vcHMpOworCWlmICghcHJvYykgZ290byBjbGVhbnVwX2luaXQ7CisKKwlwcm9jX2V4cCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCJuZl9jb25udHJhY2tfZXhwZWN0IiwgMDQ0MCwKKwkJCQkJJmV4cF9maWxlX29wcyk7CisJaWYgKCFwcm9jX2V4cCkgZ290byBjbGVhbnVwX3Byb2M7CisKKwlwcm9jX3N0YXQgPSBjcmVhdGVfcHJvY19lbnRyeSgibmZfY29ubnRyYWNrIiwgU19JUlVHTywgcHJvY19uZXRfc3RhdCk7CisJaWYgKCFwcm9jX3N0YXQpCisJCWdvdG8gY2xlYW51cF9wcm9jX2V4cDsKKworCXByb2Nfc3RhdC0+cHJvY19mb3BzID0gJmN0X2NwdV9zZXFfZm9wczsKKwlwcm9jX3N0YXQtPm93bmVyID0gVEhJU19NT0RVTEU7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJbmZfY3Rfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9uZXRfdGFibGUsIDApOworCWlmIChuZl9jdF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXBfcHJvY19zdGF0OworCX0KKyNlbmRpZgorCXJldHVybiByZXQ7CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisgY2xlYW51cF9wcm9jX3N0YXQ6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBwcm9jX25ldF9zdGF0KTsKKyBjbGVhbnVwX3Byb2NfZXhwOgorCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIpOworIGNsZWFudXBfcHJvYzoKKwlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFjayIpOworIGNsZWFudXBfaW5pdDoKKyNlbmRpZiAvKiBDTkZJR19QUk9DX0ZTICovCisJbmZfY29ubnRyYWNrX2NsZWFudXAoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisgCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlyZW1vdmVfcHJvY19lbnRyeSgibmZfY29ubnRyYWNrIiwgcHJvY19uZXRfc3RhdCk7CisJcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2tfZXhwZWN0Iik7CisJcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2siKTsKKyNlbmRpZiAvKiBDTkZJR19QUk9DX0ZTICovCisJbmZfY29ubnRyYWNrX2NsZWFudXAoKTsKIH0KIAogbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKaW5kZXggZDlmMGQ3ZS4uZWU4ZjcwOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYwpAQCAtMTcsNyArMTcsNiBAQAogICogZm9yIHF1ZXVlaW5nIGFuZCBtdXN0IHJlaW5qZWN0IGFsbCBwYWNrZXRzIGl0IHJlY2VpdmVzLCBubyBtYXR0ZXIgd2hhdC4KICAqLwogc3RhdGljIHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyICpxdWV1ZV9oYW5kbGVyW05QUk9UT107Ci1zdGF0aWMgc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyICpxdWV1ZV9yZXJvdXRlcltOUFJPVE9dOwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhxdWV1ZV9oYW5kbGVyX2xvY2spOwogCkBAIC01OSwzMiArNTgsNiBAQAogfQogRVhQT1JUX1NZTUJPTChuZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXIpOwogCi1pbnQgbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoaW50IHBmLCBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnJlcikKLXsKLQlpZiAocGYgPj0gTlBST1RPKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX2xvY2tfYmgoJnF1ZXVlX2hhbmRsZXJfbG9jayk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKHF1ZXVlX3Jlcm91dGVyW3BmXSwgcmVyKTsKLQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2hhbmRsZXJfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX3JlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKTsKLQotaW50IG5mX3VucmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoaW50IHBmKQotewotCWlmIChwZiA+PSBOUFJPVE8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfbG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQlyY3VfYXNzaWduX3BvaW50ZXIocXVldWVfcmVyb3V0ZXJbcGZdLCBOVUxMKTsKLQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2hhbmRsZXJfbG9jayk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKTsKLQogdm9pZCBuZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyICpxaCkKIHsKIAlpbnQgcGY7CkBAIC0xMTYsNyArODksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpwaHlzaW5kZXYgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpwaHlzb3V0ZGV2ID0gTlVMTDsKICNlbmRpZgotCXN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcmVyb3V0ZXI7CisJc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvOwogCiAJLyogUVVFVUUgPT0gRFJPUCBpZiBub29uZSBpcyB3YWl0aW5nLCB0byBiZSBzYWZlLiAqLwogCXJlYWRfbG9jaygmcXVldWVfaGFuZGxlcl9sb2NrKTsKQEAgLTEyNiw3ICs5OSwxNCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pK3F1ZXVlX3Jlcm91dGVyW3BmXS0+cmVyX3NpemUsIEdGUF9BVE9NSUMpOworCWFmaW5mbyA9IG5mX2dldF9hZmluZm8ocGYpOworCWlmICghYWZpbmZvKSB7CisJCXJlYWRfdW5sb2NrKCZxdWV1ZV9oYW5kbGVyX2xvY2spOworCQlrZnJlZV9za2IoKnNrYik7CisJCXJldHVybiAxOworCX0KKworCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbykgKyBhZmluZm8tPnJvdXRlX2tleV9zaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWluZm8pIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiT09NIHF1ZXVlaW5nIHBhY2tldCAlcFxuIiwKQEAgLTE1OCwxMCArMTM4LDcgQEAKIAkJaWYgKHBoeXNvdXRkZXYpIGRldl9ob2xkKHBoeXNvdXRkZXYpOwogCX0KICNlbmRpZgotCXJlcm91dGVyID0gcmN1X2RlcmVmZXJlbmNlKHF1ZXVlX3Jlcm91dGVyW3BmXSk7Ci0JaWYgKHJlcm91dGVyKQotCQlyZXJvdXRlci0+c2F2ZSgqc2tiLCBpbmZvKTsKLQorCWFmaW5mby0+c2F2ZXJvdXRlKCpza2IsIGluZm8pOwogCXN0YXR1cyA9IHF1ZXVlX2hhbmRsZXJbcGZdLT5vdXRmbigqc2tiLCBpbmZvLCBxdWV1ZW51bSwKIAkJCQkJICBxdWV1ZV9oYW5kbGVyW3BmXS0+ZGF0YSk7CiAKQEAgLTE5MCw3ICsxNjcsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW0gPSAmaW5mby0+ZWxlbS0+bGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppOwotCXN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcmVyb3V0ZXI7CisJc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCkBAIC0yMjgsOCArMjA1LDggQEAKIAl9CiAKIAlpZiAodmVyZGljdCA9PSBORl9BQ0NFUFQpIHsKLQkJcmVyb3V0ZXIgPSByY3VfZGVyZWZlcmVuY2UocXVldWVfcmVyb3V0ZXJbaW5mby0+cGZdKTsKLQkJaWYgKHJlcm91dGVyICYmIHJlcm91dGVyLT5yZXJvdXRlKCZza2IsIGluZm8pIDwgMCkKKwkJYWZpbmZvID0gbmZfZ2V0X2FmaW5mbyhpbmZvLT5wZik7CisJCWlmICghYWZpbmZvIHx8IGFmaW5mby0+cmVyb3V0ZSgmc2tiLCBpbmZvKSA8IDApCiAJCQl2ZXJkaWN0ID0gTkZfRFJPUDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKaW5kZXggM2UzZjU0NC4uYzYwMjczYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKQEAgLTEwMzMsMTcgKzEwMzMsMTMgQEAKIAogI2VuZGlmIC8qIFBST0NfRlMgKi8KIAotc3RhdGljIGludAotaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQorc3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2xvZ19pbml0KHZvaWQpCiB7CiAJaW50IGksIHN0YXR1cyA9IC1FTk9NRU07CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmZ1bDsKICNlbmRpZgogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJZm9yIChpID0gMDsgaSA8IElOU1RBTkNFX0JVQ0tFVFM7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZpbnN0YW5jZV90YWJsZVtpXSk7CiAJCkBAIC0xMDY2LDMwICsxMDYyLDI1IEBACiAJCWdvdG8gY2xlYW51cF9zdWJzeXM7CiAJcHJvY19uZnVsLT5wcm9jX2ZvcHMgPSAmbmZ1bF9maWxlX29wczsKICNlbmRpZgotCiAJcmV0dXJuIHN0YXR1czsKIAotY2xlYW51cDoKLQluZl9sb2dfdW5yZWdpc3Rlcl9sb2dnZXIoJm5mdWxubF9sb2dnZXIpOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoIm5mbmV0bGlua19sb2ciLCBwcm9jX25ldF9uZXRmaWx0ZXIpOwogY2xlYW51cF9zdWJzeXM6Ci0jZW5kaWYKIAluZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoJm5mdWxubF9zdWJzeXMpOworI2VuZGlmCiBjbGVhbnVwX25ldGxpbmtfbm90aWZpZXI6CiAJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZuZnVsbmxfcnRubF9ub3RpZmllcik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2xvZ19pbml0KHZvaWQpCi17Ci0JCi0JcmV0dXJuIGluaXRfb3JfY2xlYW51cCgxKTsKLX0KLQogc3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19sb2dfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl9sb2dfdW5yZWdpc3Rlcl9sb2dnZXIoJm5mdWxubF9sb2dnZXIpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoIm5mbmV0bGlua19sb2ciLCBwcm9jX25ldF9uZXRmaWx0ZXIpOworI2VuZGlmCisJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnVsbmxfc3Vic3lzKTsKKwluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mdWxubF9ydG5sX25vdGlmaWVyKTsKIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJuZXRmaWx0ZXIgdXNlcnNwYWNlIGxvZ2dpbmciKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IGQwZTYyZjYuLjg2YTRhYzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMTA3MSwxNyArMTA3MSwxMyBAQAogCiAjZW5kaWYgLyogUFJPQ19GUyAqLwogCi1zdGF0aWMgaW50Ci1pbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfcXVldWVfaW5pdCh2b2lkKQogewogCWludCBpLCBzdGF0dXMgPSAtRU5PTUVNOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX25mcXVldWU7CiAjZW5kaWYKIAkKLQlpZiAoIWluaXQpCi0JCWdvdG8gY2xlYW51cDsKLQogCWZvciAoaSA9IDA7IGkgPCBJTlNUQU5DRV9CVUNLRVRTOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRCgmaW5zdGFuY2VfdGFibGVbaV0pOwogCkBAIC0xMTAxLDMxICsxMDk3LDI2IEBACiAjZW5kaWYKIAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZxbmxfZGV2X25vdGlmaWVyKTsKLQogCXJldHVybiBzdGF0dXM7CiAKLWNsZWFudXA6Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5mcW5sX2Rldl9ub3RpZmllcik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX3F1ZXVlIiwgcHJvY19uZXRfbmV0ZmlsdGVyKTsKIGNsZWFudXBfc3Vic3lzOgotI2VuZGlmCQogCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZxbmxfc3Vic3lzKTsKKyNlbmRpZgogY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOgogCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZxbmxfcnRubF9ub3RpZmllcik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX3F1ZXVlX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZuZXRsaW5rX3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5mcW5sX2Rldl9ub3RpZmllcik7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX3F1ZXVlIiwgcHJvY19uZXRfbmV0ZmlsdGVyKTsKKyNlbmRpZgorCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZxbmxfc3Vic3lzKTsKKwluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mcW5sX3J0bmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIm5ldGZpbHRlciBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IGZlYjhhOWUuLjAwY2YwYTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCiAJbmV3aW5mby0+c2l6ZSA9IHNpemU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCiAJCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSBrbWFsbG9jX25vZGUoc2l6ZSwKIAkJCQkJCQlHRlBfS0VSTkVMLApAQCAtNDM2LDcgKzQzNiw3IEBACiB7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChpbmZvLT5zaXplIDw9IFBBR0VfU0laRSkKIAkJCWtmcmVlKGluZm8tPmVudHJpZXNbY3B1XSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCmluZGV4IGZhODc3ZjguLjI0YzM0OGYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwpAQCAtNjYsNyArNjYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCi1zdGF0aWMgaW50IHRjZl9nZW5lcmljX3dhbGtlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCitzdGF0aWMgaW50IHRjZl9hY3RfcG9saWNlX3dhbGtlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgc3RydWN0IHRjX2FjdGlvbiAqYSkKIHsKIAlzdHJ1Y3QgdGNmX3BvbGljZSAqcDsKQEAgLTExMyw3ICsxMTMsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotdGNmX2hhc2hfc2VhcmNoKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHUzMiBpbmRleCkKK3RjZl9hY3RfcG9saWNlX2hhc2hfc2VhcmNoKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHUzMiBpbmRleCkKIHsKIAlzdHJ1Y3QgdGNmX3BvbGljZSAqcCA9IHRjZl9wb2xpY2VfbG9va3VwKGluZGV4KTsKIApAQCAtMzg3LDkgKzM4Nyw5IEBACiAJLmFjdAkJPQl0Y2ZfYWN0X3BvbGljZSwKIAkuZHVtcAkJPQl0Y2ZfYWN0X3BvbGljZV9kdW1wLAogCS5jbGVhbnVwCT0JdGNmX2FjdF9wb2xpY2VfY2xlYW51cCwKLQkubG9va3VwCQk9CXRjZl9oYXNoX3NlYXJjaCwKKwkubG9va3VwCQk9CXRjZl9hY3RfcG9saWNlX2hhc2hfc2VhcmNoLAogCS5pbml0CQk9CXRjZl9hY3RfcG9saWNlX2xvY2F0ZSwKLQkud2FsawkJPQl0Y2ZfZ2VuZXJpY193YWxrZXIKKwkud2FsawkJPQl0Y2ZfYWN0X3BvbGljZV93YWxrZXIKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm9jLmMgYi9uZXQvc2N0cC9wcm9jLmMKaW5kZXggZDQ3YTUyYy4uNWIzYjBlMCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvYy5jCisrKyBiL25ldC9zY3RwL3Byb2MuYwpAQCAtNjksNyArNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcmVzICs9CiAJCSAgICAqKCh1bnNpZ25lZCBsb25nICopICgoKHZvaWQgKikgcGVyX2NwdV9wdHIobWliWzBdLCBpKSkgKwogCQkJCQkgc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIG5yKSk7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggYjgwN2YzNi4uMjM4OThmNCAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTE5LDEwICsxMTksNiBAQAogc3RhdGljIHNzaXplX3Qgc29ja19zZW5kcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICAgIGludCBvZmZzZXQsIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBwb3MsIGludCBtb3JlKTsKIAotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0KIC8qCiAgKglTb2NrZXQgZmlsZXMgaGF2ZSBhIHNldCBvZiAnc3BlY2lhbCcgb3BlcmF0aW9ucyBhcyB3ZWxsIGFzIHRoZSBnZW5lcmljIGZpbGUgb25lcy4gVGhlc2UgZG9uJ3QgYXBwZWFyCiAgKglpbiB0aGUgb3BlcmF0aW9uIHN0cnVjdHVyZXMgYnV0IGFyZSBkb25lIGRpcmVjdGx5IHZpYSB0aGUgc29ja2V0Y2FsbCgpIG11bHRpcGxleG9yLgpAQCAtMjEzNiw3ICsyMTMyLDcgQEAKIAlpbnQgY3B1OwogCWludCBjb3VudGVyID0gMDsKIAotCWZvcl9lYWNoX2NwdShjcHUpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJY291bnRlciArPSBwZXJfY3B1KHNvY2tldHNfaW5fdXNlLCBjcHUpOwogCiAJLyogSXQgY2FuIGJlIG5lZ2F0aXZlLCBieSB0aGUgd2F5LiA4KSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCmluZGV4IDRkN2ViOWUuLmQ1MWUzMTYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKQEAgLTExMjIsMTggKzExMjIsMjAgQEAKIAkJCQkJaW50ZWdfbGVuKSkKIAkJCUJVRygpOwogCQlpZiAocmVzYnVmLT5wYWdlX2xlbiA9PSAwCi0JCQkmJiByZXNidWYtPnRhaWxbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFCisJCQkmJiByZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFCiAJCQkJPCBQQUdFX1NJWkUpIHsKIAkJCUJVR19PTihyZXNidWYtPnRhaWxbMF0uaW92X2xlbik7CiAJCQkvKiBVc2UgaGVhZCBmb3IgZXZlcnl0aGluZyAqLwogCQkJcmVzdiA9ICZyZXNidWYtPmhlYWRbMF07CiAJCX0gZWxzZSBpZiAocmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlID09IE5VTEwpIHsKLQkJCS8qIGNvcGllZCBmcm9tIG5mc2Q0X2VuY29kZV9yZWFkICovCi0JCQlzdmNfdGFrZV9wYWdlKHJxc3RwKTsKLQkJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IHBhZ2VfYWRkcmVzcyhycXN0cAotCQkJCQktPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkLTFdKTsKLQkJCXJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IHJxc3RwLT5ycV9yZXN1c2VkLTE7CisJCQlpZiAocmVzYnVmLT5oZWFkWzBdLmlvdl9sZW4gKyBSUENfTUFYX0FVVEhfU0laRQorCQkJCQk+IFBBR0VfU0laRSkKKwkJCQlnb3RvIG91dF9lcnI7CisJCQlyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgPQorCQkJCXJlc2J1Zi0+aGVhZFswXS5pb3ZfYmFzZQorCQkJCSsgcmVzYnVmLT5oZWFkWzBdLmlvdl9sZW47CiAJCQlyZXNidWYtPnRhaWxbMF0uaW92X2xlbiA9IDA7CisJCQlycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSAwOwogCQkJcmVzdiA9ICZyZXNidWYtPnRhaWxbMF07CiAJCX0gZWxzZSB7CiAJCQlyZXN2ID0gJnJlc2J1Zi0+dGFpbFswXTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCmluZGV4IDU5NjIwYjEuLmIwZDA2N2IgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKysrIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQpAQCAtODcsNiArODcsMTEgQEAKICMgJChRKSQoTUFLRSkgJChidWlsZCk9ZGlyCiBidWlsZCA6PSAtZiAkKGlmICQoS0JVSUxEX1NSQyksJChzcmN0cmVlKS8pc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBvYmoKIAorIyBQcmVmaXggLUkgd2l0aCAkKHNyY3RyZWUpIGlmIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoCithZGR0cmVlID0gJChpZiAkKGZpbHRlci1vdXQgLUkvJSwkKDEpKSwkKHBhdHN1YnN0IC1JJSwtSSQoc3JjdHJlZSkvJSwkKDEpKSkgJCgxKQorIyBGaW5kIGFsbCAtSSBvcHRpb25zIGFuZCBjYWxsIGFkZHRyZWUKK2ZsYWdzID0gJChmb3JlYWNoIG8sJCgkKDEpKSwkKGlmICQoZmlsdGVyIC1JJSwkKG8pKSwkKGNhbGwgYWRkdHJlZSwkKG8pKSwkKG8pKSkKKwogIyBJZiBxdWlldCBpcyBzZXQsIG9ubHkgcHJpbnQgc2hvcnQgdmVyc2lvbiBvZiBjb21tYW5kCiBjbWQgPSBAJChlY2hvLWNtZCkgJChjbWRfJCgxKSkKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5saWIgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgppbmRleCA1NTA3OThmLi4yY2I0OTM1IDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmxpYgorKysgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgpAQCAtOTksMTEgKzk5LDYgQEAKIF9fY3BwX2ZsYWdzICAgICA9ICQoX2NwcF9mbGFncykKIGVsc2UKIAotIyBQcmVmaXggLUkgd2l0aCAkKHNyY3RyZWUpIGlmIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoCi1hZGR0cmVlID0gJChpZiAkKGZpbHRlci1vdXQgLUkvJSwkKDEpKSwkKHBhdHN1YnN0IC1JJSwtSSQoc3JjdHJlZSkvJSwkKDEpKSkgJCgxKQotIyBGaW5kIGFsbCAtSSBvcHRpb25zIGFuZCBjYWxsIGFkZHRyZWUKLWZsYWdzID0gJChmb3JlYWNoIG8sJCgkKDEpKSwkKGlmICQoZmlsdGVyIC1JJSwkKG8pKSwkKGNhbGwgYWRkdHJlZSwkKG8pKSwkKG8pKSkKLQogIyAtSSQob2JqKSBsb2NhdGVzIGdlbmVyYXRlZCAuaCBmaWxlcwogIyAkKGNhbGwgYWRkdHJlZSwtSSQob2JqKSkgbG9jYXRlcyAuaCBmaWxlcyBpbiBzcmN0cmVlLCBmcm9tIGdlbmVyYXRlZCAuYyBmaWxlcwogIyAgIGFuZCBsb2NhdGVzIGdlbmVyYXRlZCAuaCBmaWxlcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ibG9hdC1vLW1ldGVyIGIvc2NyaXB0cy9ibG9hdC1vLW1ldGVyCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2tzdGFjay5wbCBiL3NjcmlwdHMvY2hlY2tzdGFjay5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaCBiL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCmluZGV4IDZkNDExMTYuLjU2YjNiZWQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCisrKyBiL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCkBAIC0xLDIyICsxLDU1IEBACiAjIS9iaW4vYmFzaAogIyBDb3B5cmlnaHQgKEMpIE1hcnRpbiBTY2hsZW1tZXIgPGF6YXJhaEBub3NmZXJhdHUuemEub3JnPgorIyBDb3B5cmlnaHQgKGMpIDIwMDYgICAgICAgICAgIFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KKyMKICMgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMCiAjCi0jIEdlbmVyYXRlIGEgbmV3bGluZSBzZXBhcmF0ZWQgbGlzdCBvZiBlbnRyaWVzIGZyb20gdGhlIGZpbGUvZGlyZWN0b3J5Ci0jIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50LgotIwotIyBJZiBhIGZpbGUvZGlyZWN0b3J5IGlzIG5vdCBzdXBwbGllZCB0aGVuIGdlbmVyYXRlIGEgc21hbGwgZHVtbXkgZmlsZS4KLSMKLSMgVGhlIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgZ2VuX2luaXRfY3BpbyBidWlsdCBmcm9tIHVzci9nZW5faW5pdF9jcGlvLmMuCi0jCisjIEdlbmVyYXRlIGEgY3BpbyBwYWNrZWQgaW5pdHJhbWZzLiBJdCB1c2VzIGdlbl9pbml0X2NwaW8gdG8gZ2VuZXJhdGUKKyMgdGhlIGNwaW8gYXJjaGl2ZSwgYW5kIGd6aXAgdG8gcGFjayBpdC4KKyMgVGhlIHNjcmlwdCBtYXkgYWxzbyBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbnB1dGZpbGUgdXNlZCBmb3IgZ2VuX2luaXRfY3BpbworIyBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgZ2VuX2luaXRfY3BpbyBpcyBsb2NhdGVkIGluIHVzci8gZGlyZWN0b3J5CisKKyMgZXJyb3Igb3V0IG9uIGVycm9ycworc2V0IC1lCisKK3VzYWdlKCkgeworY2F0IDw8IEVPRgorVXNhZ2U6CiskMCBbLW8gPGZpbGU+XSBbLXUgPHVpZD5dIFstZyA8Z2lkPl0gey1kIHwgPGNwaW9fc291cmNlPn0gLi4uCisJLW8gPGZpbGU+ICAgICAgQ3JlYXRlIGd6aXBwZWQgaW5pdHJhbWZzIGZpbGUgbmFtZWQgPGZpbGU+IHVzaW5nCisJICAgICAgICAgICAgICAgZ2VuX2luaXRfY3BpbyBhbmQgZ3ppcAorCS11IDx1aWQ+ICAgICAgIFVzZXIgSUQgdG8gbWFwIHRvIHVzZXIgSUQgMCAocm9vdCkuCisJICAgICAgICAgICAgICAgPHVpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT4KKwkgICAgICAgICAgICAgICBpcyBhIGRpcmVjdG9yeS4KKwktZyA8Z2lkPiAgICAgICBHcm91cCBJRCB0byBtYXAgdG8gZ3JvdXAgSUQgMCAocm9vdCkuCisJICAgICAgICAgICAgICAgPGdpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT4KKwkgICAgICAgICAgICAgICBpcyBhIGRpcmVjdG9yeS4KKwk8Y3Bpb19zb3VyY2U+ICBGaWxlIGxpc3Qgb3IgZGlyZWN0b3J5IGZvciBjcGlvIGFyY2hpdmUuCisJICAgICAgICAgICAgICAgSWYgPGNwaW9fc291cmNlPiBpcyBhIC5jcGlvIGZpbGUgaXQgd2lsbCBiZSB1c2VkCisJCSAgICAgICBhcyBkaXJlY3QgaW5wdXQgdG8gaW5pdHJhbWZzLgorCS1kICAgICAgICAgICAgIE91dHB1dCB0aGUgZGVmYXVsdCBjcGlvIGxpc3QuCisKK0FsbCBvcHRpb25zIGV4Y2VwdCAtbyBhbmQgLWwgbWF5IGJlIHJlcGVhdGVkIGFuZCBhcmUgaW50ZXJwcmV0ZWQKK3NlcXVlbnRpYWxseSBhbmQgaW1tZWRpYXRlbHkuICAtdSBhbmQgLWcgc3RhdGVzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzCis8Y3Bpb19zb3VyY2U+IG9wdGlvbnMgc28gYW4gZXhwbGljaXQgIi11IDAgLWcgMCIgaXMgcmVxdWlyZWQKK3RvIHJlc2V0IHRoZSByb290L2dyb3VwIG1hcHBpbmcuCitFT0YKK30KKworbGlzdF9kZWZhdWx0X2luaXRyYW1mcygpIHsKKwkjIGVjaG8gdXNyL2tpbml0L2tpbml0CisJOgorfQogCiBkZWZhdWx0X2luaXRyYW1mcygpIHsKLQljYXQgPDwtRU9GCisJY2F0IDw8LUVPRiA+PiAke291dHB1dH0KIAkJIyBUaGlzIGlzIGEgdmVyeSBzaW1wbGUsIGRlZmF1bHQgaW5pdHJhbWZzCiAKIAkJZGlyIC9kZXYgMDc1NSAwIDAKIAkJbm9kIC9kZXYvY29uc29sZSAwNjAwIDAgMCBjIDUgMQogCQlkaXIgL3Jvb3QgMDcwMCAwIDAKKwkJIyBmaWxlIC9raW5pdCB1c3Iva2luaXQva2luaXQgMDc1NSAwIDAKKwkJIyBzbGluayAvaW5pdCBraW5pdCAwNzU1IDAgMAogCUVPRgogfQogCkBAIC00MiwxOCArNzUsMjggQEAKIAlyZXR1cm4gMAogfQogCi1wcmludF9tdGltZSgpIHsKLQlsb2NhbCBhcmd2MT0iJDEiCi0JbG9jYWwgbXlfbXRpbWU9IjAiCi0KLQlpZiBbIC1lICIke2FyZ3YxfSIgXTsgdGhlbgotCQlteV9tdGltZT0kKGZpbmQgIiR7YXJndjF9IiAtcHJpbnRmICIlVEBcbiIgfCBzb3J0IC1yIHwgaGVhZCAtbiAxKQotCWZpCi0JCi0JZWNobyAiIyBMYXN0IG1vZGlmaWVkOiAke215X210aW1lfSIKLQllY2hvCitsaXN0X3ByaW50X210aW1lKCkgeworCToKIH0KIAorcHJpbnRfbXRpbWUoKSB7CisJbG9jYWwgbXlfbXRpbWU9IjAiCisKKwlpZiBbIC1lICIkMSIgXTsgdGhlbgorCQlteV9tdGltZT0kKGZpbmQgIiQxIiAtcHJpbnRmICIlVEBcbiIgfCBzb3J0IC1yIHwgaGVhZCAtbiAxKQorCWZpCisKKwllY2hvICIjIExhc3QgbW9kaWZpZWQ6ICR7bXlfbXRpbWV9IiA+PiAke291dHB1dH0KKwllY2hvICIiID4+ICR7b3V0cHV0fQorfQorCitsaXN0X3BhcnNlKCkgeworCWVjaG8gIiQxIFxcIgorfQorCisjIGZvciBlYWNoIGZpbGUgcHJpbnQgYSBsaW5lIGluIGZvbGxvd2luZyBmb3JtYXQKKyMgPGZpbGV0eXBlPiA8bmFtZT4gPHBhdGggdG8gZmlsZT4gPG9jdGFsIG1vZGU+IDx1aWQ+IDxnaWQ+CisjIGZvciBsaW5rcywgZGV2aWNlcyBldGMgdGhlIGZvcm1hdCBkaWZmZXJzLiBTZWUgZ2VuX2luaXRfY3BpbyBmb3IgZGV0YWlscwogcGFyc2UoKSB7CiAJbG9jYWwgbG9jYXRpb249IiQxIgogCWxvY2FsIG5hbWU9IiR7bG9jYXRpb24vJHtzcmNkaXJ9Ly99IgpAQCAtOTksODAgKzE0MiwxMTIgQEAKIAkJCTs7CiAJZXNhYwogCi0JZWNobyAiJHtzdHJ9IgorCWVjaG8gIiR7c3RyfSIgPj4gJHtvdXRwdXR9CiAKIAlyZXR1cm4gMAogfQogCi11c2FnZSgpIHsKLQlwcmludGYgICAgIlVzYWdlOlxuIgotCXByaW50ZiAgICAiJDAgWyBbLXUgPHJvb3RfdWlkPl0gWy1nIDxyb290X2dpZD5dIFstZCB8IDxjcGlvX3NvdXJjZT5dIF0gLiAuIC5cbiIKLQlwcmludGYgICAgIlxuIgotCXByaW50ZiAtLSAiLXUgPHJvb3RfdWlkPiAgVXNlciBJRCB0byBtYXAgdG8gdXNlciBJRCAwIChyb290KS5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIDxyb290X3VpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIGlzIGEgZGlyZWN0b3J5LlxuIgotCXByaW50ZiAtLSAiLWcgPHJvb3RfZ2lkPiAgR3JvdXAgSUQgdG8gbWFwIHRvIGdyb3VwIElEIDAgKHJvb3QpLlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgPHJvb3RfZ2lkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgaXMgYSBkaXJlY3RvcnkuXG4iCi0JcHJpbnRmICAgICI8Y3Bpb19zb3VyY2U+ICBGaWxlIGxpc3Qgb3IgZGlyZWN0b3J5IGZvciBjcGlvIGFyY2hpdmUuXG4iCi0JcHJpbnRmICAgICIgICAgICAgICAgICAgICBJZiA8Y3Bpb19zb3VyY2U+IGlzIG5vdCBwcm92aWRlZCB0aGVuIGFcbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIGEgZGVmYXVsdCBsaXN0IHdpbGwgYmUgb3V0cHV0LlxuIgotCXByaW50ZiAtLSAiLWQgICAgICAgICAgICAgT3V0cHV0IHRoZSBkZWZhdWx0IGNwaW8gbGlzdC4gIElmIG5vIDxjcGlvX3NvdXJjZT5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIGlzIGdpdmVuIHRoZW4gdGhlIGRlZmF1bHQgY3BpbyBsaXN0IHdpbGwgYmUgb3V0cHV0LlxuIgotCXByaW50ZiAgICAiXG4iCi0JcHJpbnRmICAgICJBbGwgb3B0aW9ucyBtYXkgYmUgcmVwZWF0ZWQgYW5kIGFyZSBpbnRlcnByZXRlZCBzZXF1ZW50aWFsbHlcbiIKLQlwcmludGYgICAgImFuZCBpbW1lZGlhdGVseS4gIC11IGFuZCAtZyBzdGF0ZXMgYXJlIHByZXNlcnZlZCBhY3Jvc3NcbiIKLQlwcmludGYgICAgIjxjcGlvX3NvdXJjZT4gb3B0aW9ucyBzbyBhbiBleHBsaWNpdCBcIi11IDAgLWcgMFwiIGlzIHJlcXVpcmVkXG4iCi0JcHJpbnRmICAgICJ0byByZXNldCB0aGUgcm9vdC9ncm91cCBtYXBwaW5nLlxuIgordW5rbm93bl9vcHRpb24oKSB7CisJcHJpbnRmICJFUlJPUjogdW5rbm93biBvcHRpb24gXCIkYXJnXCJcbiIgPiYyCisJcHJpbnRmICJJZiB0aGUgZmlsZW5hbWUgdmFsaWRseSBiZWdpbnMgd2l0aCAnLScsICIgPiYyCisJcHJpbnRmICJ0aGVuIGl0IG11c3QgYmUgcHJlZml4ZWRcbiIgPiYyCisJcHJpbnRmICJieSAnLi8nIHNvIHRoYXQgaXQgd29uJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gb3B0aW9uLiIgPiYyCisJcHJpbnRmICJcbiIgPiYyCisJdXNhZ2UgPiYyCisJZXhpdCAxCiB9CiAKLWJ1aWxkX2xpc3QoKSB7Ci0JcHJpbnRmICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIyAkY3Bpb19zb3VyY2VcbiIKK2xpc3RfaGVhZGVyKCkgeworCWVjaG8gImRlcHNfaW5pdHJhbWZzIDo9IFxcIgorfQogCi0JaWYgWyAtZiAiJGNwaW9fc291cmNlIiBdOyB0aGVuCi0JCXByaW50X210aW1lICIkY3Bpb19zb3VyY2UiCi0JCWNhdCAiJGNwaW9fc291cmNlIgotCWVsaWYgWyAtZCAiJGNwaW9fc291cmNlIiBdOyB0aGVuCi0JCXNyY2Rpcj0kKGVjaG8gIiRjcGlvX3NvdXJjZSIgfCBzZWQgLWUgJ3M6Ly8qOi86ZycpCi0JCWRpcmxpc3Q9JChmaW5kICIke3NyY2Rpcn0iIC1wcmludGYgIiVwICVtICVVICVHXG4iIDI+L2Rldi9udWxsKQoraGVhZGVyKCkgeworCXByaW50ZiAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiMgJDFcbiIgPj4gJHtvdXRwdXR9Cit9CiAKLQkJIyBJZiAkZGlybGlzdCBpcyBvbmx5IG9uZSBsaW5lLCB0aGVuIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkKLQkJaWYgWyAgIiQoZWNobyAiJHtkaXJsaXN0fSIgfCB3YyAtbCkiIC1ndCAxIF07IHRoZW4KLQkJCXByaW50X210aW1lICIkY3Bpb19zb3VyY2UiCi0JCQotCQkJZWNobyAiJHtkaXJsaXN0fSIgfCBcCi0JCQl3aGlsZSByZWFkIHg7IGRvCi0JCQkJcGFyc2UgJHt4fQotCQkJZG9uZQotCQllbHNlCi0JCQkjIEZhaWxzYWZlIGluIGNhc2UgZGlyZWN0b3J5IGlzIGVtcHR5Ci0JCQlkZWZhdWx0X2luaXRyYW1mcworIyBwcm9jZXNzIG9uZSBkaXJlY3RvcnkgKGluY2wgc3ViLWRpcmVjdG9yaWVzKQorZGlyX2ZpbGVsaXN0KCkgeworCSR7ZGVwX2xpc3R9aGVhZGVyICIkMSIKKworCXNyY2Rpcj0kKGVjaG8gIiQxIiB8IHNlZCAtZSAnczovLyo6LzpnJykKKwlkaXJsaXN0PSQoZmluZCAiJHtzcmNkaXJ9IiAtcHJpbnRmICIlcCAlbSAlVSAlR1xuIiAyPi9kZXYvbnVsbCkKKworCSMgSWYgJGRpcmxpc3QgaXMgb25seSBvbmUgbGluZSwgdGhlbiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5CisJaWYgWyAgIiQoZWNobyAiJHtkaXJsaXN0fSIgfCB3YyAtbCkiIC1ndCAxIF07IHRoZW4KKwkJJHtkZXBfbGlzdH1wcmludF9tdGltZSAiJDEiCisKKwkJZWNobyAiJHtkaXJsaXN0fSIgfCBcCisJCXdoaWxlIHJlYWQgeDsgZG8KKwkJCSR7ZGVwX2xpc3R9cGFyc2UgJHt4fQorCQlkb25lCisJZmkKK30KKworIyBpZiBvbmx5IG9uZSBmaWxlIGlzIHNwZWNpZmllZCBhbmQgaXQgaXMgLmNwaW8gZmlsZSB0aGVuIHVzZSBpdCBkaXJlY3QgYXMgZnMKKyMgaWYgYSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIHRoZW4gYWRkIGFsbCBmaWxlcyBpbiBnaXZlbiBkaXJlY290cnkgdG8gZnMKKyMgaWYgYSByZWd1bGFyIGZpbGUgaXMgc3BlY2lmaWVkIGFzc3VtZSBpdCBpcyBpbiBnZW5faW5pdHJhbWZzIGZvcm1hdAoraW5wdXRfZmlsZSgpIHsKKwlzb3VyY2U9IiQxIgorCWlmIFsgLWYgIiQxIiBdOyB0aGVuCisJCSR7ZGVwX2xpc3R9aGVhZGVyICIkMSIKKwkJaXNfY3Bpbz0iJChlY2hvICIkMSIgfCBzZWQgJ3MvXi4qXC5jcGlvL2NwaW8vJykiCisJCWlmIFsgJDIgLWVxIDAgLWEgJHtpc19jcGlvfSA9PSAiY3BpbyIgXTsgdGhlbgorCQkJY3Bpb19maWxlPSQxCisJCQlbICEgLXogJHtkZXBfbGlzdH0gXSAmJiBlY2hvICIkMSIKKwkJCXJldHVybiAwCiAJCWZpCisJCWlmIFsgLXogJHtkZXBfbGlzdH0gXTsgdGhlbgorCQkJcHJpbnRfbXRpbWUgIiQxIiA+PiAke291dHB1dH0KKwkJCWNhdCAiJDEiICAgICAgICAgPj4gJHtvdXRwdXR9CisJCWVsc2UKKwkJCWdyZXAgXmZpbGUgIiQxIiB8IGN1dCAtZCAnICcgLWYgMworCQlmaQorCWVsaWYgWyAtZCAiJDEiIF07IHRoZW4KKwkJZGlyX2ZpbGVsaXN0ICIkMSIKIAllbHNlCi0JCWVjaG8gIiAgJDA6IENhbm5vdCBvcGVuICckY3Bpb19zb3VyY2UnIiA+JjIKKwkJZWNobyAiICAke3Byb2d9OiBDYW5ub3Qgb3BlbiAnJDEnIiA+JjIKIAkJZXhpdCAxCiAJZmkKIH0KIAotCitwcm9nPSQwCiByb290X3VpZD0wCiByb290X2dpZD0wCitkZXBfbGlzdD0KK2NwaW9fZmlsZT0KK2NwaW9fbGlzdD0KK291dHB1dD0iL2Rldi9zdGRvdXQiCitvdXRwdXRfZmlsZT0iIgogCithcmc9IiQxIgorY2FzZSAiJGFyZyIgaW4KKwkiLWwiKQkjIGZpbGVzIGluY2x1ZGVkIGluIGluaXRyYW1mcyAtIHVzZWQgYnkga2J1aWxkCisJCWRlcF9saXN0PSJsaXN0XyIKKwkJc2hpZnQKKwkJOzsKKwkiLW8iKQkjIGdlbmVyYXRlIGd6aXBwZWQgY3BpbyBpbWFnZSBuYW1lZCAkMQorCQlzaGlmdAorCQlvdXRwdXRfZmlsZT0iJDEiCisJCWNwaW9fbGlzdD0iJChta3RlbXAgJHtUTVBESVI6LS90bXB9L2NwaW9saXN0LlhYWFhYWCkiCisJCW91dHB1dD0ke2NwaW9fbGlzdH0KKwkJc2hpZnQKKwkJOzsKK2VzYWMKIHdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KIAlhcmc9IiQxIgogCXNoaWZ0CiAJY2FzZSAiJGFyZyIgaW4KLQkJIi11IikKKwkJIi11IikJIyBtYXAgJDEgdG8gdWlkPTAgKHJvb3QpCiAJCQlyb290X3VpZD0iJDEiCiAJCQlzaGlmdAogCQkJOzsKLQkJIi1nIikKKwkJIi1nIikJIyBtYXAgJDEgdG8gZ2lkPTAgKHJvb3QpCiAJCQlyb290X2dpZD0iJDEiCiAJCQlzaGlmdAogCQkJOzsKLQkJIi1kIikKKwkJIi1kIikJIyBkaXNwbGF5IGRlZmF1bHQgaW5pdHJhbWZzIGxpc3QKIAkJCWRlZmF1bHRfbGlzdD0iJGFyZyIKLQkJCWRlZmF1bHRfaW5pdHJhbWZzCisJCQkke2RlcF9saXN0fWRlZmF1bHRfaW5pdHJhbWZzCiAJCQk7OwogCQkiLWgiKQogCQkJdXNhZ2UKQEAgLTE4MSwyMyArMjU2LDI3IEBACiAJCSopCiAJCQljYXNlICIkYXJnIiBpbgogCQkJCSItIiopCi0JCQkJCXByaW50ZiAiRVJST1I6IHVua25vd24gb3B0aW9uIFwiJGFyZ1wiXG4iID4mMgotCQkJCQlwcmludGYgIklmIHRoZSBmaWxlbmFtZSB2YWxpZGx5IGJlZ2lucyB3aXRoICctJywgdGhlbiBpdCBtdXN0IGJlIHByZWZpeGVkXG4iID4mMgotCQkJCQlwcmludGYgImJ5ICcuLycgc28gdGhhdCBpdCB3b24ndCBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcHRpb24uIiA+JjIKLQkJCQkJcHJpbnRmICJcbiIgPiYyCi0JCQkJCXVzYWdlID4mMgotCQkJCQlleGl0IDEKKwkJCQkJdW5rbm93bl9vcHRpb24KIAkJCQkJOzsKLQkJCQkqKQotCQkJCQljcGlvX3NvdXJjZT0iJGFyZyIKLQkJCQkJYnVpbGRfbGlzdAorCQkJCSopCSMgaW5wdXQgZmlsZS9kaXIgLSBwcm9jZXNzIGl0CisJCQkJCWlucHV0X2ZpbGUgIiRhcmciICIkIyIKIAkJCQkJOzsKIAkJCWVzYWMKIAkJCTs7CiAJZXNhYwogZG9uZQogCi0jIHNwaXQgb3V0IHRoZSBkZWZhdWx0IGNwaW8gbGlzdCBpZiBhIHNvdXJjZSBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQKLVsgLXogIiRjcGlvX3NvdXJjZSIgLWEgLXogIiRkZWZhdWx0X2xpc3QiIF0gJiYgZGVmYXVsdF9pbml0cmFtZnMKLQorIyBJZiBvdXRwdXRfZmlsZSBpcyBzZXQgd2Ugd2lsbCBnZW5lcmF0ZSBjcGlvIGFyY2hpdmUgYW5kIGd6aXAgaXQKKyMgd2UgYXJlIGNhcmVmdWxsIHRvIGRlbGV0ZSB0bXAgZmlsZXMKK2lmIFsgISAteiAke291dHB1dF9maWxlfSBdOyB0aGVuCisJaWYgWyAteiAke2NwaW9fZmlsZX0gXTsgdGhlbgorCQljcGlvX3RmaWxlPSIkKG1rdGVtcCAke1RNUERJUjotL3RtcH0vY3Bpb2ZpbGUuWFhYWFhYKSIKKwkJdXNyL2dlbl9pbml0X2NwaW8gJHtjcGlvX2xpc3R9ID4gJHtjcGlvX3RmaWxlfQorCWVsc2UKKwkJY3Bpb190ZmlsZT0ke2NwaW9fZmlsZX0KKwlmaQorCXJtICR7Y3Bpb19saXN0fQorCWNhdCAke2NwaW9fdGZpbGV9IHwgZ3ppcCAtZiAtOSAtID4gJHtvdXRwdXRfZmlsZX0KKwlbIC16ICR7Y3Bpb19maWxlfSBdICYmIHJtICR7Y3Bpb190ZmlsZX0KK2ZpCiBleGl0IDAKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDEwZWVhZTUuLmFlNWFiOTggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtNjMsMjAgKzYzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBjaGFyICpmZ2V0c19jaGVja19zdHJlYW0oY2hhciAqcywgaW50IHNpemUsIEZJTEUgKnN0cmVhbSkKLXsKLQljaGFyICpyZXQgPSBmZ2V0cyhzLCBzaXplLCBzdHJlYW0pOwotCi0JaWYgKHJldCA9PSBOVUxMICYmIGZlb2Yoc3RyZWFtKSkgewotCQlwcmludGYoXygiYWJvcnRlZCFcblxuIikpOwotCQlwcmludGYoXygiQ29uc29sZSBpbnB1dCBpcyBjbG9zZWQuICIpKTsKLQkJcHJpbnRmKF8oIlJ1biAnbWFrZSBvbGRjb25maWcnIHRvIHVwZGF0ZSBjb25maWd1cmF0aW9uLlxuXG4iKSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgY29uZl9hc2t2YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKmRlZikKIHsKIAllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKQEAgLTExNCw3ICsxMDAsNyBAQAogCQljaGVja19zdGRpbigpOwogCWNhc2UgYXNrX2FsbDoKIAkJZmZsdXNoKHN0ZG91dCk7Ci0JCWZnZXRzX2NoZWNrX3N0cmVhbShsaW5lLCAxMjgsIHN0ZGluKTsKKwkJZmdldHMobGluZSwgMTI4LCBzdGRpbik7CiAJCXJldHVybjsKIAljYXNlIHNldF9kZWZhdWx0OgogCQlwcmludGYoIiVzXG4iLCBkZWYpOwpAQCAtMzI4LDggKzMxNCw3IEBACiAJCXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBtZW51X2dldF9wcm9tcHQobWVudSkpOwogCQlkZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsKIAkJY250ID0gZGVmID0gMDsKLQkJbGluZVswXSA9ICcwJzsKLQkJbGluZVsxXSA9IDA7CisJCWxpbmVbMF0gPSAwOwogCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKIAkJCWlmICghbWVudV9pc192aXNpYmxlKGNoaWxkKSkKIAkJCQljb250aW51ZTsKQEAgLTM3MCw3ICszNTUsNyBAQAogCQkJY2hlY2tfc3RkaW4oKTsKIAkJY2FzZSBhc2tfYWxsOgogCQkJZmZsdXNoKHN0ZG91dCk7Ci0JCQlmZ2V0c19jaGVja19zdHJlYW0obGluZSwgMTI4LCBzdGRpbik7CisJCQlmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsKIAkJCXN0cmlwKGxpbmUpOwogCQkJaWYgKGxpbmVbMF0gPT0gJz8nKSB7CiAJCQkJcHJpbnRmKCJcbiVzXG4iLCBtZW51LT5zeW0tPmhlbHAgPwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYwppbmRleCAxYjg4ODJkLi4xYjVkZjU4IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYworKysgYi9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCQkJc3ltLT5mbGFncyB8PSBlLT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX05FVzsKIAl9CiAKLQlzeW1fY2hhbmdlX2NvdW50ID0gY29uZl93YXJuaW5ncyAmJiBjb25mX3Vuc2F2ZWQ7CisJc3ltX2NoYW5nZV9jb3VudCA9IGNvbmZfd2FybmluZ3MgfHwgY29uZl91bnNhdmVkOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYwppbmRleCAwOTUxMmI1Li5iZjgwNTJmIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMKQEAgLTU4LDggKzU4LDcgQEAKIAogI2luY2x1ZGUgImRpYWxvZy5oIgogCi0jZGVmaW5lIElURU1fSURFTlQgMSAgIC8qIEluZGVudCBvZiBtZW51IGVudHJpZXMuIEZpeGVkIGZvciBhbGwgbWVudXMgKi8KLXN0YXRpYyBpbnQgbWVudV93aWR0aDsKK3N0YXRpYyBpbnQgbWVudV93aWR0aCwgaXRlbV94OwogCiAvKgogICogUHJpbnQgbWVudSBpdGVtCkBAIC03MCw3ICs2OSw3IEBACiAJaW50IGo7CiAJY2hhciAqbWVudV9pdGVtID0gbWFsbG9jKG1lbnVfd2lkdGggKyAxKTsKIAotCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0gSVRFTV9JREVOVCk7CisJc3RybmNweShtZW51X2l0ZW0sIGl0ZW0sIG1lbnVfd2lkdGggLSBpdGVtX3gpOwogCW1lbnVfaXRlbVttZW51X3dpZHRoXSA9IDA7CiAJaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5Tm5NbUhoIik7CiAKQEAgLTg3LDEzICs4NiwxMyBAQAogCXdjbHJ0b2VvbCh3aW4pOwogI2VuZGlmCiAJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGl0ZW1fc2VsZWN0ZWRfYXR0ciA6IGl0ZW1fYXR0cik7Ci0JbXZ3YWRkc3RyKHdpbiwgY2hvaWNlLCBJVEVNX0lERU5ULCBtZW51X2l0ZW0pOworCW12d2FkZHN0cih3aW4sIGNob2ljZSwgaXRlbV94LCBtZW51X2l0ZW0pOwogCWlmIChob3RrZXkpIHsKIAkJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IHRhZ19rZXlfc2VsZWN0ZWRfYXR0ciA6IHRhZ19rZXlfYXR0cik7Ci0JCW12d2FkZGNoKHdpbiwgY2hvaWNlLCBJVEVNX0lERU5UICsgaiwgbWVudV9pdGVtW2pdKTsKKwkJbXZ3YWRkY2god2luLCBjaG9pY2UsIGl0ZW1feCArIGosIG1lbnVfaXRlbVtqXSk7CiAJfQogCWlmIChzZWxlY3RlZCkgewotCQl3bW92ZSh3aW4sIGNob2ljZSwgSVRFTV9JREVOVCArIDEpOworCQl3bW92ZSh3aW4sIGNob2ljZSwgaXRlbV94ICsgMSk7CiAJfQogCWZyZWUobWVudV9pdGVtKTsKIAl3cmVmcmVzaCh3aW4pOwpAQCAtMjI3LDYgKzIyNiw4IEBACiAJZHJhd19ib3goZGlhbG9nLCBib3hfeSwgYm94X3gsIG1lbnVfaGVpZ2h0ICsgMiwgbWVudV93aWR0aCArIDIsCiAJCSBtZW51Ym94X2JvcmRlcl9hdHRyLCBtZW51Ym94X2F0dHIpOwogCisJaXRlbV94ID0gKG1lbnVfd2lkdGggLSA3MCkgLyAyOworCiAJLyogU2V0IGNob2ljZSB0byBkZWZhdWx0IGl0ZW0gKi8KIAlmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKQogCQlpZiAoc3RyY21wKGN1cnJlbnQsIGl0ZW1zW2kgKiAyXSkgPT0gMCkKQEAgLTI2MywxMCArMjY0LDEwIEBACiAJd25vdXRyZWZyZXNoKG1lbnUpOwogCiAJcHJpbnRfYXJyb3dzKGRpYWxvZywgaXRlbV9ubywgc2Nyb2xsLAotCQkgICAgIGJveF95LCBib3hfeCArIElURU1fSURFTlQgKyAxLCBtZW51X2hlaWdodCk7CisJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOwogCiAJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwotCXdtb3ZlKG1lbnUsIGNob2ljZSwgSVRFTV9JREVOVCArIDEpOworCXdtb3ZlKG1lbnUsIGNob2ljZSwgaXRlbV94ICsgMSk7CiAJd3JlZnJlc2gobWVudSk7CiAKIAl3aGlsZSAoa2V5ICE9IEVTQykgewpAQCAtMzQ5LDcgKzM1MCw3IEBACiAJCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBUUlVFKTsKIAogCQkJcHJpbnRfYXJyb3dzKGRpYWxvZywgaXRlbV9ubywgc2Nyb2xsLAotCQkJCSAgICAgYm94X3ksIGJveF94ICsgSVRFTV9JREVOVCArIDEsIG1lbnVfaGVpZ2h0KTsKKwkJCQkgICAgIGJveF95LCBib3hfeCArIGl0ZW1feCArIDEsIG1lbnVfaGVpZ2h0KTsKIAogCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CiAJCQl3cmVmcmVzaChtZW51KTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCAwYjkyZGRmLi43ZTgwNzlhIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC02NTgsNyArNjU4LDcgQEAKIAkJd2FybigiJXMgLSBTZWN0aW9uIG1pc21hdGNoOiByZWZlcmVuY2UgdG8gJXM6JXMgZnJvbSAlcyAiCiAJCSAgICAgImJlZm9yZSAnJXMnIChhdCBvZmZzZXQgLTB4JWxseClcbiIsCiAJCSAgICAgbW9kbmFtZSwgc2VjbmFtZSwgcmVmc3ltbmFtZSwgZnJvbXNlYywKLQkJICAgICBlbGYtPnN0cnRhYiArIGJlZm9yZS0+c3RfbmFtZSwKKwkJICAgICBlbGYtPnN0cnRhYiArIGFmdGVyLT5zdF9uYW1lLAogCQkgICAgIChsb25nIGxvbmcpci5yX29mZnNldCk7CiAJfSBlbHNlIHsKIAkJd2FybigiJXMgLSBTZWN0aW9uIG1pc21hdGNoOiByZWZlcmVuY2UgdG8gJXM6JXMgZnJvbSAlcyAiCmRpZmYgLS1naXQgYS9zY3JpcHRzL25hbWVzcGFjZS5wbCBiL3NjcmlwdHMvbmFtZXNwYWNlLnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2hvd19kZWx0YSBiL3NjcmlwdHMvc2hvd19kZWx0YQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9zY3JpcHRzL3Zlcl9saW51eCBiL3NjcmlwdHMvdmVyX2xpbnV4CmluZGV4IGJlYjQzZWY3Li44NDk5OWY2IDEwMDc1NQotLS0gYS9zY3JpcHRzL3Zlcl9saW51eAorKysgYi9zY3JpcHRzL3Zlcl9saW51eApAQCAtMzksMTAgKzM5LDEwIEBACiBmc2NrLmpmcyAtViAyPiYxIHwgZ3JlcCB2ZXJzaW9uIHwgc2VkICdzLywvLycgfCAgYXdrIFwKICdOUj09MSB7cHJpbnQgImpmc3V0aWxzICAgICAgICAgICAgICAiLCAkM30nCiAKLXJlaXNlcmZzY2sgLVYgMj4mMSB8IGdyZXAgcmVpc2VyZnNjayB8IGF3ayBcCityZWlzZXJmc2NrIC1WIDI+JjEgfCBncmVwIF5yZWlzZXJmc2NrIHwgYXdrIFwKICdOUj09MXtwcmludCAicmVpc2VyZnNwcm9ncyAgICAgICAgICIsICQyfScKIAotZnNjay5yZWlzZXI0IC1WIDI+JjEgfCBncmVwIGZzY2sucmVpc2VyNCB8IGF3ayBcCitmc2NrLnJlaXNlcjQgLVYgMj4mMSB8IGdyZXAgXmZzY2sucmVpc2VyNCB8IGF3ayBcCiAnTlI9PTF7cHJpbnQgInJlaXNlcjRwcm9ncyAgICAgICAgICAiLCAkMn0nCiAKIHhmc19kYiAtViAyPiYxIHwgZ3JlcCB2ZXJzaW9uIHwgYXdrIFwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGEwNTdlMzMuLmI2MDYxZmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtNzg1LDYgKzc4NSwxMCBAQAogCiAJa2V5X2NoZWNrKGtleXJpbmcpOwogCisJa2V5X3JlZiA9IEVSUl9QVFIoLUVOT1RESVIpOworCWlmIChrZXlyaW5nLT50eXBlICE9ICZrZXlfdHlwZV9rZXlyaW5nKQorCQlnb3RvIGVycm9yXzI7CisKIAlkb3duX3dyaXRlKCZrZXlyaW5nLT5zZW0pOwogCiAJLyogaWYgd2UncmUgZ29pbmcgdG8gYWxsb2NhdGUgYSBuZXcga2V5LCB3ZSdyZSBnb2luZyB0byBoYXZlCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IGQ2NWExODAuLmJmZmE5MjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC00MzcsNiArNDM3LDcgQEAKIC8qCiAgKiBzZWFyY2ggdGhlIGdpdmVuIGtleXJpbmcgb25seSAobm8gcmVjdXJzaW9uKQogICogLSBrZXlyaW5nIG11c3QgYmUgbG9ja2VkIGJ5IGNhbGxlcgorICogLSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUga2V5cmluZyBpcyBhIGtleXJpbmcKICAqLwoga2V5X3JlZl90IF9fa2V5cmluZ19zZWFyY2hfb25lKGtleV9yZWZfdCBrZXlyaW5nX3JlZiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKaW5kZXggZjY5NDA2MTguLjIxN2EwYmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwpAQCAtMTY4LDExICsxNjgsMTIgQEAKICAqLwogaW50IGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqa2V5cmluZzsKIAljaGFyIGJ1ZlsyMF07CiAJaW50IHJldDsKIAorCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAoIXRzay0+c2lnbmFsLT5wcm9jZXNzX2tleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfcGlkLiV1IiwgdHNrLT50Z2lkKTsKIApAQCAtMTgzLDEyICsxODQsMTIgQEAKIAkJfQogCiAJCS8qIGF0dGFjaCBrZXlyaW5nICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKCF0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nKSB7CiAJCQl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0ga2V5cmluZzsKIAkJCWtleXJpbmcgPSBOVUxMOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAkJa2V5X3B1dChrZXlyaW5nKTsKIAl9CkBAIC0yMDcsMzggKzIwOCwzNyBAQAogc3RhdGljIGludCBpbnN0YWxsX3Nlc3Npb25fa2V5cmluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkgICBzdHJ1Y3Qga2V5ICprZXlyaW5nKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqb2xkOwogCWNoYXIgYnVmWzIwXTsKLQlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKIAogCS8qIGNyZWF0ZSBhbiBlbXB0eSBzZXNzaW9uIGtleXJpbmcgKi8KIAlpZiAoIWtleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfc2VzLiV1IiwgdHNrLT50Z2lkKTsKIAogCQlrZXlyaW5nID0ga2V5cmluZ19hbGxvYyhidWYsIHRzay0+dWlkLCB0c2stPmdpZCwgMSwgTlVMTCk7Ci0JCWlmIChJU19FUlIoa2V5cmluZykpIHsKLQkJCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9CisJCWlmIChJU19FUlIoa2V5cmluZykpCisJCQlyZXR1cm4gUFRSX0VSUihrZXlyaW5nKTsKIAl9CiAJZWxzZSB7CiAJCWF0b21pY19pbmMoJmtleXJpbmctPnVzYWdlKTsKIAl9CiAKIAkvKiBpbnN0YWxsIHRoZSBrZXlyaW5nICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCW9sZCA9IHJjdV9kZXJlZmVyZW5jZSh0c2stPnNpZ25hbC0+c2Vzc2lvbl9rZXlyaW5nKTsKKwlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCW9sZCA9IHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmc7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmcsIGtleXJpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCXJldCA9IDA7CisJLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyLCBidXQgdGhlcmUncyBubyBwb2ludCBzeW5jaHJvbmlzaW5nCisJICogb24gaXQgaWYgaXQgZGlkbid0IHByZXZpb3VzbHkgcG9pbnQgdG8gYW55dGhpbmcgKi8KKwlpZiAob2xkKSB7CisJCXN5bmNocm9uaXplX3JjdSgpOworCQlrZXlfcHV0KG9sZCk7CisJfQogCi0JLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2V5X3B1dChvbGQpOwotZXJyb3I6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogfSAvKiBlbmQgaW5zdGFsbF9zZXNzaW9uX2tleXJpbmcoKSAqLwogCkBAIC0zMTEsNyArMzExLDYgQEAKICAqLwogaW50IGV4ZWNfa2V5cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBrZXkgKm9sZDsKIAogCS8qIG5ld2x5IGV4ZWMnZCB0YXNrcyBkb24ndCBnZXQgYSB0aHJlYWQga2V5cmluZyAqLwpAQCAtMzIzLDEwICszMjIsMTAgQEAKIAlrZXlfcHV0KG9sZCk7CiAKIAkvKiBkaXNjYXJkIHRoZSBwcm9jZXNzIGtleXJpbmcgZnJvbSBhIG5ld2x5IGV4ZWMnZCB0YXNrICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJb2xkID0gdHNrLT5zaWduYWwtPnByb2Nlc3Nfa2V5cmluZzsKIAl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAlrZXlfcHV0KG9sZCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKaW5kZXggZGZhYjZjOC4uYWJlOTlkOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSBzcC0+bGVuLTE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHNwLT54W2ldLnh2ZWM7CisJCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHNwLT54dmVjW2ldOwogCQkJaWYgKHNlbGludXhfYXV0aG9yaXphYmxlX3hmcm0oeCkpIHsKIAkJCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHggPSB4LT5zZWN1cml0eTsKIAkJCQlyZXR1cm4gY3R4LT5jdHhfc2lkOwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJCSAqICBPbmx5IG5lZWQgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgYW4gYXV0aG9yaXphYmxlIHNwLgogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IHNwLT5sZW47IGkrKykgewotCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eFtpXS54dmVjOworCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eHZlY1tpXTsKIAogCQkJaWYgKHggJiYgc2VsaW51eF9hdXRob3JpemFibGVfeGZybSh4KSkKIAkJCQlnb3RvIGFjY2VwdDsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYyBiL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYwppbmRleCAwY2Q0NGE2Li4zNzIxYzU4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZW11MTBrMS9tYWluLmMKKysrIGIvc291bmQvb3NzL2VtdTEwazEvbWFpbi5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlICJod2FjY2Vzcy5oIgogI2luY2x1ZGUgIjgwMTAuaCIKQEAgLTExOSw3ICsxMjAsNyBAQAogIAogCiAvKiB0aGUgZW11MTBrMSBfc2VlbXNfIHRvIG9ubHkgc3VwcG9ydHMgMjkgYml0ICg1MTJNaUIpIGJpdCBidXMgbWFzdGVyICovCi0jZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgICAgICAgICAgICAgICAgMHgxZmZmZmZmZgkvKiBETUEgYnVmZmVyIG1hc2sgZm9yIHBjaV9hbGxvY19jb25zaXN0ICovCisjZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgRE1BXzI5QklUX01BU0sJLyogRE1BIGJ1ZmZlciBtYXNrIGZvciBwY2lfYWxsb2NfY29uc2lzdCAqLwogCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DUkVBVElWRSAweDExMDIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCAzN2I4MDU3Li45MTg5OWY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKQEAgLTY5MSw4ICs2OTIsOCBAQAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDAgfHwKLQkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwKSB7CisJaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwIHx8CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBzZXR0aW5nIDI4Yml0IERNQSBtYXNrXG4iKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS91c3IvTWFrZWZpbGUgYi91c3IvTWFrZWZpbGUKaW5kZXggZTIxMjljYi4uMTlkNzRlNiAxMDA2NDQKLS0tIGEvdXNyL01ha2VmaWxlCisrKyBiL3Vzci9NYWtlZmlsZQpAQCAtMSw2NSArMSw0OCBAQAorIworIyBrYnVpbGQgZmlsZSBmb3IgdXNyLyAtIGluY2x1ZGluZyBpbml0cmFtZnMgaW1hZ2UKKyMKIAora2xpYmNkaXJzOjsKKworIyBHZW5lcmF0ZSBidWlsdGluLm8gYmFzZWQgb24gaW5pdHJhbWZzX2RhdGEubwogb2JqLXkgOj0gaW5pdHJhbWZzX2RhdGEubwogCi1ob3N0cHJvZ3MteSAgOj0gZ2VuX2luaXRfY3BpbwotCi1jbGVhbi1maWxlcyA6PSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IGluaXRyYW1mc19saXN0Ci0KICMgaW5pdHJhbWZzX2RhdGEubyBjb250YWlucyB0aGUgaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBpbWFnZS4KICMgVGhlIGltYWdlIGlzIGluY2x1ZGVkIHVzaW5nIC5pbmNiaW4sIGEgZGVwZW5kZW5jeSB3aGljaCBpcyBub3QKICMgdHJhY2tlZCBhdXRvbWF0aWNhbGx5LgogJChvYmopL2luaXRyYW1mc19kYXRhLm86ICQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvLmd6IEZPUkNFCiAKLWlmZGVmIENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQKLWdlbl9pbml0cmFtZnNfYXJncyArPSAtdSAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQpCisjIyMjIworIyBHZW5lcmF0ZSB0aGUgaW5pdHJhbWZzIGNwaW8gYXJjaGl2ZQorCitob3N0cHJvZ3MteSA6PSBnZW5faW5pdF9jcGlvCitpbml0cmFtZnMgICA6PSAkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAorcmFtZnMtaW5wdXQgOj0gJChpZiAkKGZpbHRlci1vdXQgIiIsJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSkpLCBcCisgICAgICAgICAgICAgICAgICAgICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpLC1kKQorcmFtZnMtYXJncyAgOj0gXAorICAgICAgICAkKGlmICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCksIC11ICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCkpIFwKKyAgICAgICAgJChpZiAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpLCAtZyAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpKSBcCisgICAgICAgICQocmFtZnMtaW5wdXQpCisKKyMgLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZCBpcyB1c2VkIHRvIGlkZW50aWZ5IGFsbCBmaWxlcyBpbmNsdWRlZAorIyBpbiBpbml0cmFtZnMgYW5kIHRvIGRldGVjdCBpZiBhbnkgZmlsZXMgYXJlIGFkZGVkL3JlbW92ZWQuCisjIFJlbW92ZWQgZmlsZXMgYXJlIGlkZW50aWZpZWQgYnkgZGlyZWN0b3J5IHRpbWVzdGFtcCBiZWluZyB1cGRhdGVkCisjIFRoZSBkZXBlbmRlbmN5IGxpc3QgaXMgZ2VuZXJhdGVkIGJ5IGdlbl9pbml0cmFtZnMuc2ggLWwKK2lmbmVxICgkKHdpbGRjYXJkICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kKSwpCisJaW5jbHVkZSAkKG9iaikvLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZAogZW5kaWYKIAotaWZkZWYgQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRAotZ2VuX2luaXRyYW1mc19hcmdzICs9IC1nICQoQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRCkKLWVuZGlmCitxdWlldF9jbWRfaW5pdGZzID0gR0VOICAgICAkQAorICAgICAgY21kX2luaXRmcyA9ICQoaW5pdHJhbWZzKSAtbyAkQCAkKHJhbWZzLWFyZ3MpICQocmFtZnMtaW5wdXQpCiAKLSMgVGhlICQoc2hlbGwgZWNobyAkKENPTkZJR19JTklUUkFNRlNfU09VUkNFKSkgaXMgdG8gcmVtb3ZlIHRoZQotIyBncmF0dWl0b3VzIGJlZ2luIGFuZCBlbmQgcXVvdGVzIGZyb20gdGhlIEtjb25maWcgc3RyaW5nIHR5cGUuCi0jIEludGVybmFsLCBlc2NhcGVkIHF1b3RlcyBpbiB0aGUgS2NvbmZpZyBzdHJpbmcgd2lsbCBsb29zZSB0aGUKLSMgZXNjYXBlIGFuZCBiZWNvbWUgYWN0aXZlIHF1b3Rlcy4KLXF1b3RlZml4ZWRfaW5pdHJhbWZzX3NvdXJjZSA6PSAkKHNoZWxsIGVjaG8gJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSkpCi0KLWZpbGVjaGtfaW5pdHJhbWZzX2xpc3QgPSAkKENPTkZJR19TSEVMTCkgXAotICQoc3JjdHJlZSkvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggJChnZW5faW5pdHJhbWZzX2FyZ3MpICQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKQotCi0kKG9iaikvaW5pdHJhbWZzX2xpc3Q6ICQob2JqKS9NYWtlZmlsZSBGT1JDRQotCSQoY2FsbCBmaWxlY2hrLGluaXRyYW1mc19saXN0KQotCi1xdWlldF9jbWRfY3BpbyA9IENQSU8gICAgJEAKLSAgICAgIGNtZF9jcGlvID0gLi8kPCAkKG9iaikvaW5pdHJhbWZzX2xpc3QgPiAkQAotCi0KLSMgQ2hlY2sgaWYgdGhlIElOSVRSQU1GU19TT1VSQ0UgaXMgYSBjcGlvIGFyY2hpdmUKLWlmbmVxICgsJChmaW5kc3RyaW5nIC5jcGlvLCQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKSkpCi0KLSMgSU5JVFJBTUZTX1NPVVJDRSBoYXMgYSBjcGlvIGFyY2hpdmUgLSB2ZXJpZnkgdGhhdCBpdCdzIGEgc2luZ2xlIGZpbGUKLWlmbmVxICgxLCQod29yZHMgJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpKSkKLSQoZXJyb3IgT25seSBhIHNpbmdsZSBmaWxlIG1heSBiZSBzcGVjaWZpZWQgaW4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UgKD0iJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpIikgd2hlbiBhIGNwaW8gYXJjaGl2ZSBpcyBkaXJlY3RseSBzcGVjaWZpZWQuKQotZW5kaWYKLSMgTm93IHVzZSB0aGUgY3BpbyBhcmNoaXZlIGRpcmVjdGx5Ci1pbml0cmFtZnNfZGF0YV9jcGlvID0gJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpCi10YXJnZXRzICs9ICQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKQotCi1lbHNlCi0KLSMgSU5JVFJBTUZTX1NPVVJDRSBpcyBub3QgYSBjcGlvIGFyY2hpdmUgLSBjcmVhdGUgb25lCi0kKG9iaikvaW5pdHJhbWZzX2RhdGEuY3BpbzogJChvYmopL2dlbl9pbml0X2NwaW8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5pdHJhbWZzLXkpICQob2JqKS9pbml0cmFtZnNfbGlzdCBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGNwaW8pCi0KLXRhcmdldHMgKz0gaW5pdHJhbWZzX2RhdGEuY3BpbwotaW5pdHJhbWZzX2RhdGFfY3BpbyA9ICQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvCi0KLWVuZGlmCi0KLQotJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8uZ3o6ICQoaW5pdHJhbWZzX2RhdGFfY3BpbykgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQotCi10YXJnZXRzICs9IGluaXRyYW1mc19kYXRhLmNwaW8uZ3oKK3RhcmdldHMgOj0gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorJChkZXBzX2luaXRyYW1mcyk6IGtsaWJjZGlycworIyBXZSByZWJ1aWxkIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaWY6CisjIDEpIEFueSBpbmNsdWRlZCBmaWxlIGlzIG5ld2VyIHRoZW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyAyKSBUaGVyZSBhcmUgY2hhbmdlcyBpbiB3aGljaCBmaWxlcyBhcmUgaW5jbHVkZWQgKGFkZGVkIG9yIGRlbGV0ZWQpCisjIDMpIElmIGdlbl9pbml0X2NwaW8gYXJlIG5ld2VyIHRoYW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyA0KSBhcmd1bWVudHMgdG8gZ2VuX2luaXRyYW1mcy5zaCBjaGFuZ2VzCiskKG9iaikvaW5pdHJhbWZzX2RhdGEuY3Bpby5nejogJChvYmopL2dlbl9pbml0X2NwaW8gJChkZXBzX2luaXRyYW1mcykga2xpYmNkaXJzCisJJChRKSQoaW5pdHJhbWZzKSAtbCAkKHJhbWZzLWlucHV0KSA+ICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kCisJJChjYWxsIGlmX2NoYW5nZWQsaW5pdGZzKQogCg==