ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA0M2FiMTE5Li5mNTBjZjhmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0yMTIsMTUgKzIxMiw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglTdXBwb3J0IGZvciBORUMgRERCNTA3NCBhbmQgRERCNTQ3NiBldmFsdWF0aW9uIGJvYXJkcy4KLVdoZW46CUp1bmUgMjAwNgotV2h5OglCb2FyZCBzcGVjaWZpYyBjb2RlIGRvZXNuJ3QgYnVpbGQgYW55bW9yZSBzaW5jZSB+Mi42LjAgYW5kIG5vCi0JdXNlcnMgaGF2ZSBjb21wbGFpbmVkIGluZGljYXRpbmcgdGhlcmUgaXMgbm8gbW9yZSBuZWVkIGZvciB0aGVzZQotCWJvYXJkcy4gIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjb25zaWRlcmVkIGEgbGFzdCBjYWxsLgotV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglVU0IgZHJpdmVyIEFQSSBtb3ZlcyB0byBFWFBPUlRfU1lNQk9MX0dQTAogV2hlbjoJRmVidWFyeSAyMDA4CiBGaWxlczoJaW5jbHVkZS9saW51eC91c2IuaCwgZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dCBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQKaW5kZXggNWM1YTRjYy4uMTg3MDM1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvaXBvaWIudHh0CkBAIC0xLDEwICsxLDEwIEBACiBJUCBPVkVSIElORklOSUJBTkQKIAogICBUaGUgaWJfaXBvaWIgZHJpdmVyIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUCBvdmVyIEluZmluaUJhbmQKLSAgcHJvdG9jb2wgYXMgc3BlY2lmaWVkIGJ5IHRoZSBsYXRlc3QgSW50ZXJuZXQtRHJhZnRzIGlzc3VlZCBieSB0aGUKLSAgSUVURiBpcG9pYiB3b3JraW5nIGdyb3VwLiAgSXQgaXMgYSAibmF0aXZlIiBpbXBsZW1lbnRhdGlvbiBpbiB0aGUKLSAgc2Vuc2Ugb2Ygc2V0dGluZyB0aGUgaW50ZXJmYWNlIHR5cGUgdG8gQVJQSFJEX0lORklOSUJBTkQgYW5kIHRoZQotICBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCB0byAyMCAoZWFybGllciBwcm9wcmlldGFyeSBpbXBsZW1lbnRhdGlvbnMKKyAgcHJvdG9jb2wgYXMgc3BlY2lmaWVkIGJ5IFJGQyA0MzkxIGFuZCA0MzkyLCBpc3N1ZWQgYnkgdGhlIElFVEYgaXBvaWIKKyAgd29ya2luZyBncm91cC4gIEl0IGlzIGEgIm5hdGl2ZSIgaW1wbGVtZW50YXRpb24gaW4gdGhlIHNlbnNlIG9mCisgIHNldHRpbmcgdGhlIGludGVyZmFjZSB0eXBlIHRvIEFSUEhSRF9JTkZJTklCQU5EIGFuZCB0aGUgaGFyZHdhcmUKKyAgYWRkcmVzcyBsZW5ndGggdG8gMjAgKGVhcmxpZXIgcHJvcHJpZXRhcnkgaW1wbGVtZW50YXRpb25zCiAgIG1hc3F1ZXJhZGVkIHRvIHRoZSBrZXJuZWwgYXMgZXRoZXJuZXQgaW50ZXJmYWNlcykuCiAKIFBhcnRpdGlvbnMgYW5kIFBfS2V5cwpAQCAtNTMsMyArNTMsNyBAQAogCiAgIElFVEYgSVAgb3ZlciBJbmZpbmlCYW5kIChpcG9pYikgV29ya2luZyBHcm91cAogICAgIGh0dHA6Ly9pZXRmLm9yZy9odG1sLmNoYXJ0ZXJzL2lwb2liLWNoYXJ0ZXIuaHRtbAorICBUcmFuc21pc3Npb24gb2YgSVAgb3ZlciBJbmZpbmlCYW5kIChJUG9JQikgKFJGQyA0MzkxKQorICAgIGh0dHA6Ly9pZXRmLm9yZy9yZmMvcmZjNDM5MS50eHQgCisgIElQIG92ZXIgSW5maW5pQmFuZCAoSVBvSUIpIEFyY2hpdGVjdHVyZSAoUkZDIDQzOTIpCisgICAgaHR0cDovL2lldGYub3JnL3JmYy9yZmM0MzkyLnR4dCAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjNhNjE4Ny4uYTlkM2ExNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTE0MDIsNiArMTQwMiwxNSBAQAogCQkJSWYgZW5hYmxlZCBhdCBib290IHRpbWUsIC9zZWxpbnV4L2Rpc2FibGUgY2FuIGJlIHVzZWQKIAkJCWxhdGVyIHRvIGRpc2FibGUgcHJpb3IgdG8gaW5pdGlhbCBwb2xpY3kgbG9hZC4KIAorCXNlbGludXhfY29tcGF0X25ldCA9CisJCQlbU0VMSU5VWF0gU2V0IGluaXRpYWwgc2VsaW51eF9jb21wYXRfbmV0IGZsYWcgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQ6IHsgIjAiIHwgIjEiIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDAgLS0gdXNlIG5ldyBzZWNtYXJrLWJhc2VkIHBhY2tldCBjb250cm9scworICAgICAgICAgICAgICAgICAgICAgICAgMSAtLSB1c2UgbGVnYWN5IHBhY2tldCBjb250cm9scworICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAwIChwcmVmZXJyZWQpLgorICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSB2aWEKKyAgICAgICAgICAgICAgICAgICAgICAgIC9zZWxpbnV4L2NvbXBhdF9uZXQuCisKIAlzZXJpYWxudW1iZXIJW0JVR1M9SUEtMzJdCiAKIAlzZ19kZWZfcmVzZXJ2ZWRfc2l6ZT0JW1NDU0ldCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKaW5kZXggYzYxZDhiOC4uNDcxMDg0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dApAQCAtMTksNiArMTksNyBAQAogICAgICAtIENvbnRyb2wgZGVwZW5kZW5jaWVzLgogICAgICAtIFNNUCBiYXJyaWVyIHBhaXJpbmcuCiAgICAgIC0gRXhhbXBsZXMgb2YgbWVtb3J5IGJhcnJpZXIgc2VxdWVuY2VzLgorICAgICAtIFJlYWQgbWVtb3J5IGJhcnJpZXJzIHZzIGxvYWQgc3BlY3VsYXRpb24uCiAKICAoKikgRXhwbGljaXQga2VybmVsIGJhcnJpZXJzLgogCkBAIC0yNDgsNyArMjQ5LDcgQEAKICAgICAgd2UgbWF5IGdldCBlaXRoZXIgb2Y6CiAKIAlTVE9SRSAqQSA9IFg7IFkgPSBMT0FEICpBOwotCVNUT1JFICpBID0gWTsKKwlTVE9SRSAqQSA9IFkgPSBYOwogCiAKID09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM0NCw5ICszNDUsMTIgQEAKIAogICg0KSBHZW5lcmFsIG1lbW9yeSBiYXJyaWVycy4KIAotICAgICBBIGdlbmVyYWwgbWVtb3J5IGJhcnJpZXIgaXMgYSBjb21iaW5hdGlvbiBvZiBib3RoIGEgcmVhZCBtZW1vcnkgYmFycmllcgotICAgICBhbmQgYSB3cml0ZSBtZW1vcnkgYmFycmllci4gIEl0IGlzIGEgcGFydGlhbCBvcmRlcmluZyBvdmVyIGJvdGggbG9hZHMgYW5kCi0gICAgIHN0b3Jlcy4KKyAgICAgQSBnZW5lcmFsIG1lbW9yeSBiYXJyaWVyIGdpdmVzIGEgZ3VhcmFudGVlIHRoYXQgYWxsIHRoZSBMT0FEIGFuZCBTVE9SRQorICAgICBvcGVyYXRpb25zIHNwZWNpZmllZCBiZWZvcmUgdGhlIGJhcnJpZXIgd2lsbCBhcHBlYXIgdG8gaGFwcGVuIGJlZm9yZSBhbGwKKyAgICAgdGhlIExPQUQgYW5kIFNUT1JFIG9wZXJhdGlvbnMgc3BlY2lmaWVkIGFmdGVyIHRoZSBiYXJyaWVyIHdpdGggcmVzcGVjdCB0bworICAgICB0aGUgb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtLgorCisgICAgIEEgZ2VuZXJhbCBtZW1vcnkgYmFycmllciBpcyBhIHBhcnRpYWwgb3JkZXJpbmcgb3ZlciBib3RoIGxvYWRzIGFuZCBzdG9yZXMuCiAKICAgICAgR2VuZXJhbCBtZW1vcnkgYmFycmllcnMgaW1wbHkgYm90aCByZWFkIGFuZCB3cml0ZSBtZW1vcnkgYmFycmllcnMsIGFuZCBzbwogICAgICBjYW4gc3Vic3RpdHV0ZSBmb3IgZWl0aGVyLgpAQCAtNTQ2LDkgKzU1MCw5IEBACiAJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQogCWEgPSAxOwogCTx3cml0ZSBiYXJyaWVyPgotCWIgPSAyOwkJeCA9IGE7CisJYiA9IDI7CQl4ID0gYjsKIAkJCTxyZWFkIGJhcnJpZXI+Ci0JCQl5ID0gYjsKKwkJCXkgPSBhOwogCiBPcjoKIApAQCAtNTYzLDYgKzU2NywxOCBAQAogQmFzaWNhbGx5LCB0aGUgcmVhZCBiYXJyaWVyIGFsd2F5cyBoYXMgdG8gYmUgdGhlcmUsIGV2ZW4gdGhvdWdoIGl0IGNhbiBiZSBvZgogdGhlICJ3ZWFrZXIiIHR5cGUuCiAKK1shXSBOb3RlIHRoYXQgdGhlIHN0b3JlcyBiZWZvcmUgdGhlIHdyaXRlIGJhcnJpZXIgd291bGQgbm9ybWFsbHkgYmUgZXhwZWN0ZWQgdG8KK21hdGNoIHRoZSBsb2FkcyBhZnRlciB0aGUgcmVhZCBiYXJyaWVyIG9yIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyLCBhbmQgdmljZQordmVyc2E6CisKKwlDUFUgMSAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVSAyCisJPT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT0KKwlhID0gMTsgICAgICAgICAgIH0tLS0tICAgLS0tPnsgIHYgPSBjCisJYiA9IDI7ICAgICAgICAgICB9ICAgIFwgLyAgICB7ICB3ID0gZAorCTx3cml0ZSBiYXJyaWVyPiAgICAgICAgXCAgICAgICAgPHJlYWQgYmFycmllcj4KKwljID0gMzsgICAgICAgICAgIH0gICAgLyBcICAgIHsgIHggPSBhOworCWQgPSA0OyAgICAgICAgICAgfS0tLS0gICAtLS0+eyAgeSA9IGI7CisKIAogRVhBTVBMRVMgT0YgTUVNT1JZIEJBUlJJRVIgU0VRVUVOQ0VTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYwMCw4ICs2MTYsOCBAQAogCXwgICAgICAgfCAgICAgICArLS0tLS0tKwogCSstLS0tLS0tKyAgICAgICA6ICAgICAgOgogCSAgICAgICAgICAgICAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgIHwgU2VxdWVuY2UgaW4gd2hpY2ggc3RvcmVzIGNvbW1pdHRlZCB0byBtZW1vcnkgc3lzdGVtCi0JICAgICAgICAgICAgICAgICAgIHwgYnkgQ1BVIDEKKwkgICAgICAgICAgICAgICAgICAgfCBTZXF1ZW5jZSBpbiB3aGljaCBzdG9yZXMgYXJlIGNvbW1pdHRlZCB0byB0aGUKKwkgICAgICAgICAgICAgICAgICAgfCBtZW1vcnkgc3lzdGVtIGJ5IENQVSAxCiAJICAgICAgICAgICAgICAgICAgIFYKIAogCkBAIC02ODMsMTQgKzY5OSwxMiBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIDogICAgICAgOiAgICAgICB8IENQVSAyIHwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICB8IFgtPjkgIHwtLS0tLS0+fCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0+fCBCLT4yICB8ICAgICAgIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JICAgICBNYWtlcyBzdXJlIGFsbCBlZmZlY3RzIC0tLT4gICAgZGRkZGRkZGRkZGRkZGRkZGQgICB8ICAgICAgIHwKLQkgICAgIHByaW9yIHRvIHRoZSBzdG9yZSBvZiBDICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCSAgICAgYXJlIHBlcmNlcHRpYmxlIHRvICAgICAgICAgICAgICAgICB8IEItPjIgIHwtLS0tLS0+fCAgICAgICB8Ci0JICAgICBzdWNjZXNzaXZlIGxvYWRzICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCBYLT45ICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICBNYWtlcyBzdXJlIGFsbCBlZmZlY3RzIC0tLT4gICBcICAgZGRkZGRkZGRkZGRkZGRkZGQgICB8ICAgICAgIHwKKwkgIHByaW9yIHRvIHRoZSBzdG9yZSBvZiBDICAgICAgICBcICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgYXJlIHBlcmNlcHRpYmxlIHRvICAgICAgICAgICAgICAtLS0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICBzdWJzZXF1ZW50IGxvYWRzICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKwogCiAKQEAgLTY5OSw3MyArNzEzLDIzOSBAQAogCiAJQ1BVIDEJCQlDUFUgMgogCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJCXsgQSA9IDAsIEIgPSA5IH0KIAlTVE9SRSBBPTEKLQlTVE9SRSBCPTIKLQlTVE9SRSBDPTMKIAk8d3JpdGUgYmFycmllcj4KLQlTVE9SRSBEPTQKLQlTVE9SRSBFPTUKLQkJCQlMT0FEIEEKKwlTVE9SRSBCPTIKIAkJCQlMT0FEIEIKLQkJCQlMT0FEIEMKLQkJCQlMT0FEIEQKLQkJCQlMT0FEIEUKKwkJCQlMT0FEIEEKIAogV2l0aG91dCBpbnRlcnZlbnRpb24sIENQVSAyIG1heSB0aGVuIGNob29zZSB0byBwZXJjZWl2ZSB0aGUgZXZlbnRzIG9uIENQVSAxIGluCiBzb21lIGVmZmVjdGl2ZWx5IHJhbmRvbSBvcmRlciwgZGVzcGl0ZSB0aGUgd3JpdGUgYmFycmllciBpc3N1ZWQgYnkgQ1BVIDE6CiAKLQkrLS0tLS0tLSsgICAgICAgOiAgICAgIDoKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsKLQl8ICAgICAgIHwtLS0tLS0+fCBDPTMgIHwgfQotCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyB9Ci0JfCAgICAgICB8ICA6ICAgIHwgQT0xICB8IH0KLQl8ICAgICAgIHwgIDogICAgKy0tLS0tLSsgfQotCXwgQ1BVIDEgfCAgOiAgICB8IEI9MiAgfCB9LS0tCi0JfCAgICAgICB8ICAgICAgICstLS0tLS0rIH0gICBcCi0JfCAgICAgICB8ICAgd3d3d3d3d3d3d3d3d30gICAgXAotCXwgICAgICAgfCAgICAgICArLS0tLS0tKyB9ICAgICBcICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKLQl8ICAgICAgIHwgIDogICAgfCBFPTUgIHwgfSAgICAgIFwgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0gICAgICAgXCAgICAgIHsgfCBDLT4zICB8LS0tLS0tPnwgICAgICAgfAotCXwgICAgICAgfC0tLS0tLT58IEQ9NCAgfCB9ICAgICAgICBcICAgICB7ICstLS0tLS0tKyAgICA6ICB8ICAgICAgIHwKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgICAgIFwgICAgeyB8IEUtPjUgIHwgICAgOiAgfCAgICAgICB8Ci0JKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgXCAgIHsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyICAtLT57IHwgQS0+MSAgfCAgICA6ICB8IENQVSAyIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gQ1BVIDEgICAgeyArLS0tLS0tLSsgICAgOiAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQ1BVIDIgICAgIHsgfCBELT40ICB8ICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICstLS0tLS0tKyAgICA6ICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB8IEItPjIgIHwtLS0tLS0+fCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgICAgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEE9MSAgfC0tLS0tLSAgICAgIC0tLT58IEEtPjAgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICBcICAgICAgICAgKy0tLS0tLS0rCisJfCBDUFUgMSB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgIFwgICAgLS0tPnwgQi0+OSAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgfCAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBCPTIgIHwtLS0gICAgIHwgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgXCAgICB8ICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgXCAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCBBLT4wICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgOiAgICAgICA6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICstLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLT58IEEtPjEgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOgogCiAKLUlmLCBob3dldmVyLCBhIHJlYWQgYmFycmllciB3ZXJlIHRvIGJlIHBsYWNlZCBiZXR3ZWVuIHRoZSBsb2FkIG9mIEMgYW5kIHRoZQotbG9hZCBvZiBEIG9uIENQVSAyLCB0aGVuIHRoZSBwYXJ0aWFsIG9yZGVyaW5nIGltcG9zZWQgYnkgQ1BVIDEgd2lsbCBiZQotcGVyY2VpdmVkIGNvcnJlY3RseSBieSBDUFUgMi4KK0lmLCBob3dldmVyLCBhIHJlYWQgYmFycmllciB3ZXJlIHRvIGJlIHBsYWNlZCBiZXR3ZWVuIHRoZSBsb2FkIG9mIEUgYW5kIHRoZQorbG9hZCBvZiBBIG9uIENQVSAyOgogCi0JKy0tLS0tLS0rICAgICAgIDogICAgICA6Ci0JfCAgICAgICB8ICAgICAgICstLS0tLS0rCi0JfCAgICAgICB8LS0tLS0tPnwgQz0zICB8IH0KLQl8ICAgICAgIHwgIDogICAgKy0tLS0tLSsgfQotCXwgICAgICAgfCAgOiAgICB8IEE9MSAgfCB9LS0tCi0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0gICBcCi0JfCBDUFUgMSB8ICA6ICAgIHwgQj0yICB8IH0gICAgXAotCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICBcCi0JfCAgICAgICB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgICBcCi0JfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgXCAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKwotCXwgICAgICAgfCAgOiAgICB8IEU9NSAgfCB9ICAgICAgICBcICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQl8ICAgICAgIHwgIDogICAgKy0tLS0tLSsgfS0tLSAgICAgIFwgICAgeyB8IEMtPjMgIHwtLS0tLS0+fCAgICAgICB8Ci0JfCAgICAgICB8LS0tLS0tPnwgRD00ICB8IH0gICBcICAgICAgXCAgIHsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgIFwgICAgICAtLT57IHwgQi0+MiAgfCAgICA6ICB8ICAgICAgIHwKLQkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgXCAgICAgICAgeyArLS0tLS0tLSsgICAgOiAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgIHsgfCBBLT4xICB8ICAgIDogIHwgQ1BVIDIgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICBBdCB0aGlzIHBvaW50IHRoZSByZWFkIC0tLS0+ICAgXCAgIHJycnJycnJycnJycnJycnJyICAgfCAgICAgICB8Ci0JICAgYmFycmllciBjYXVzZXMgYWxsIGVmZmVjdHMgICAgICBcICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCSAgIHByaW9yIHRvIHRoZSBzdG9yYWdlIG9mIEMgICAgICAgIFwgICB7IHwgRS0+NSAgfCAgICA6ICB8ICAgICAgIHwKLQkgICB0byBiZSBwZXJjZXB0aWJsZSB0byBDUFUgMiAgICAgICAgLS0+eyArLS0tLS0tLSsgICAgOiAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfCBELT40ICB8LS0tLS0tPnwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJQ1BVIDEJCQlDUFUgMgorCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJCXsgQSA9IDAsIEIgPSA5IH0KKwlTVE9SRSBBPTEKKwk8d3JpdGUgYmFycmllcj4KKwlTVE9SRSBCPTIKKwkJCQlMT0FEIEIKKwkJCQk8cmVhZCBiYXJyaWVyPgorCQkJCUxPQUQgQQorCit0aGVuIHRoZSBwYXJ0aWFsIG9yZGVyaW5nIGltcG9zZWQgYnkgQ1BVIDEgd2lsbCBiZSBwZXJjZWl2ZWQgY29ycmVjdGx5IGJ5IENQVQorMjoKKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQT0xICB8LS0tLS0tICAgICAgLS0tPnwgQS0+MCAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgIFwgICAgICAgICArLS0tLS0tLSsKKwl8IENQVSAxIHwgICB3d3d3d3d3d3d3d3d3d3d3ICAgXCAgICAtLS0+fCBCLT45ICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICB8ICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEI9MiAgfC0tLSAgICAgfCAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICBcICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICBcICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgIEF0IHRoaXMgcG9pbnQgdGhlIHJlYWQgLS0tLT4gICBcICBycnJycnJycnJycnJycnJyciAgIHwgICAgICAgfAorCSAgYmFycmllciBjYXVzZXMgYWxsIGVmZmVjdHMgICAgICBcICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICBwcmlvciB0byB0aGUgc3RvcmFnZSBvZiBCICAgICAgICAtLS0tPnwgQS0+MSAgfC0tLS0tLT58ICAgICAgIHwKKwkgIHRvIGJlIHBlcmNlcHRpYmxlIHRvIENQVSAyICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisKKworVG8gaWxsdXN0cmF0ZSB0aGlzIG1vcmUgY29tcGxldGVseSwgY29uc2lkZXIgd2hhdCBjb3VsZCBoYXBwZW4gaWYgdGhlIGNvZGUKK2NvbnRhaW5lZCBhIGxvYWQgb2YgQSBlaXRoZXIgc2lkZSBvZiB0aGUgcmVhZCBiYXJyaWVyOgorCisJQ1BVIDEJCQlDUFUgMgorCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJCXsgQSA9IDAsIEIgPSA5IH0KKwlTVE9SRSBBPTEKKwk8d3JpdGUgYmFycmllcj4KKwlTVE9SRSBCPTIKKwkJCQlMT0FEIEIKKwkJCQlMT0FEIEEgW2ZpcnN0IGxvYWQgb2YgQV0KKwkJCQk8cmVhZCBiYXJyaWVyPgorCQkJCUxPQUQgQSBbc2Vjb25kIGxvYWQgb2YgQV0KKworRXZlbiB0aG91Z2ggdGhlIHR3byBsb2FkcyBvZiBBIGJvdGggb2NjdXIgYWZ0ZXIgdGhlIGxvYWQgb2YgQiwgdGhleSBtYXkgYm90aAorY29tZSB1cCB3aXRoIGRpZmZlcmVudCB2YWx1ZXM6CisKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgICAgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEE9MSAgfC0tLS0tLSAgICAgIC0tLT58IEEtPjAgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICBcICAgICAgICAgKy0tLS0tLS0rCisJfCBDUFUgMSB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgIFwgICAgLS0tPnwgQi0+OSAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgfCAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBCPTIgIHwtLS0gICAgIHwgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgXCAgICB8ICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgXCAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCBBLT4wICB8LS0tLS0tPnwgMXN0ICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICBBdCB0aGlzIHBvaW50IHRoZSByZWFkIC0tLS0+ICAgXCAgcnJycnJycnJycnJycnJycnIgICB8ICAgICAgIHwKKwkgIGJhcnJpZXIgY2F1c2VzIGFsbCBlZmZlY3RzICAgICAgXCAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgcHJpb3IgdG8gdGhlIHN0b3JhZ2Ugb2YgQiAgICAgICAgLS0tLT58IEEtPjEgIHwtLS0tLS0+fCAybmQgICB8CisJICB0byBiZSBwZXJjZXB0aWJsZSB0byBDUFUgMiAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK0J1dCBpdCBtYXkgYmUgdGhhdCB0aGUgdXBkYXRlIHRvIEEgZnJvbSBDUFUgMSBiZWNvbWVzIHBlcmNlcHRpYmxlIHRvIENQVSAyCitiZWZvcmUgdGhlIHJlYWQgYmFycmllciBjb21wbGV0ZXMgYW55d2F5OgorCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBBPTEgIHwtLS0tLS0gICAgICAtLS0+fCBBLT4wICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgXCAgICAgICAgICstLS0tLS0tKworCXwgQ1BVIDEgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICBcICAgIC0tLT58IEItPjkgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgIHwgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQj0yICB8LS0tICAgICB8ICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgIFwgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgIFwgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tPnwgQS0+MSAgfC0tLS0tLT58IDFzdCAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJycnJycnJycnJycnJycnJyICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBLT4xICB8LS0tLS0tPnwgMm5kICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCitUaGUgZ3VhcmFudGVlIGlzIHRoYXQgdGhlIHNlY29uZCBsb2FkIHdpbGwgYWx3YXlzIGNvbWUgdXAgd2l0aCBBID09IDEgaWYgdGhlCitsb2FkIG9mIEIgY2FtZSB1cCB3aXRoIEIgPT0gMi4gIE5vIHN1Y2ggZ3VhcmFudGVlIGV4aXN0cyBmb3IgdGhlIGZpcnN0IGxvYWQgb2YKK0E7IHRoYXQgbWF5IGNvbWUgdXAgd2l0aCBlaXRoZXIgQSA9PSAwIG9yIEEgPT0gMS4KKworCitSRUFEIE1FTU9SWSBCQVJSSUVSUyBWUyBMT0FEIFNQRUNVTEFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgQ1BVcyBzcGVjdWxhdGUgd2l0aCBsb2FkczogdGhhdCBpcyB0aGV5IHNlZSB0aGF0IHRoZXkgd2lsbCBuZWVkIHRvIGxvYWQgYW4KK2l0ZW0gZnJvbSBtZW1vcnksIGFuZCB0aGV5IGZpbmQgYSB0aW1lIHdoZXJlIHRoZXkncmUgbm90IHVzaW5nIHRoZSBidXMgZm9yIGFueQorb3RoZXIgbG9hZHMsIGFuZCBzbyBkbyB0aGUgbG9hZCBpbiBhZHZhbmNlIC0gZXZlbiB0aG91Z2ggdGhleSBoYXZlbid0IGFjdHVhbGx5Citnb3QgdG8gdGhhdCBwb2ludCBpbiB0aGUgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGZsb3cgeWV0LiAgVGhpcyBwZXJtaXRzIHRoZQorYWN0dWFsIGxvYWQgaW5zdHJ1Y3Rpb24gdG8gcG90ZW50aWFsbHkgY29tcGxldGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB0aGUgQ1BVCithbHJlYWR5IGhhcyB0aGUgdmFsdWUgdG8gaGFuZC4KKworSXQgbWF5IHR1cm4gb3V0IHRoYXQgdGhlIENQVSBkaWRuJ3QgYWN0dWFsbHkgbmVlZCB0aGUgdmFsdWUgLSBwZXJoYXBzIGJlY2F1c2UgYQorYnJhbmNoIGNpcmN1bXZlbnRlZCB0aGUgbG9hZCAtIGluIHdoaWNoIGNhc2UgaXQgY2FuIGRpc2NhcmQgdGhlIHZhbHVlIG9yIGp1c3QKK2NhY2hlIGl0IGZvciBsYXRlciB1c2UuCisKK0NvbnNpZGVyOgorCisJQ1BVIDEJICAgCQlDUFUgMgorCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJIAkgICAJCUxPQUQgQgorCSAJICAgCQlESVZJREUJCX0gRGl2aWRlIGluc3RydWN0aW9ucyBnZW5lcmFsbHkKKwkgCSAgIAkJRElWSURFCQl9IHRha2UgYSBsb25nIHRpbWUgdG8gcGVyZm9ybQorCSAJICAgCQlMT0FEIEEKKworV2hpY2ggbWlnaHQgYXBwZWFyIGFzIHRoaXM6CisKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDpESVZJREUgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwlUaGUgQ1BVIGJlaW5nIGJ1c3kgZG9pbmcgYSAtLS0+ICAgICAtLS0+fCBBLT4wICB8fn5+fiAgIHwgICAgICAgfAorCWRpdmlzaW9uIHNwZWN1bGF0ZXMgb24gdGhlICAgICAgICAgICAgICArLS0tLS0tLSsgICB+ICAgfCAgICAgICB8CisJTE9BRCBvZiBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJT25jZSB0aGUgZGl2aXNpb25zIGFyZSBjb21wbGV0ZSAtLT4gICAgIDogICAgICAgOiAgIH4tLT58ICAgICAgIHwKKwl0aGUgQ1BVIGNhbiB0aGVuIHBlcmZvcm0gdGhlICAgICAgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCUxPQUQgd2l0aCBpbW1lZGlhdGUgZWZmZWN0ICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisKKworUGxhY2luZyBhIHJlYWQgYmFycmllciBvciBhIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIGp1c3QgYmVmb3JlIHRoZSBzZWNvbmQKK2xvYWQ6CisKKwlDUFUgMQkgICAJCUNQVSAyCisJPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkgCSAgIAkJTE9BRCBCCisJIAkgICAJCURJVklERQorCSAJICAgCQlESVZJREUKKwkJCQk8cmVhZCBiYXJyaWVyPgorCSAJICAgCQlMT0FEIEEKKword2lsbCBmb3JjZSBhbnkgdmFsdWUgc3BlY3VsYXRpdmVseSBvYnRhaW5lZCB0byBiZSByZWNvbnNpZGVyZWQgdG8gYW4gZXh0ZW50CitkZXBlbmRlbnQgb24gdGhlIHR5cGUgb2YgYmFycmllciB1c2VkLiAgSWYgdGhlcmUgd2FzIG5vIGNoYW5nZSBtYWRlIHRvIHRoZQorc3BlY3VsYXRlZCBtZW1vcnkgbG9jYXRpb24sIHRoZW4gdGhlIHNwZWN1bGF0ZWQgdmFsdWUgd2lsbCBqdXN0IGJlIHVzZWQ6CisKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDpESVZJREUgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwlUaGUgQ1BVIGJlaW5nIGJ1c3kgZG9pbmcgYSAtLS0+ICAgICAtLS0+fCBBLT4wICB8fn5+fiAgIHwgICAgICAgfAorCWRpdmlzaW9uIHNwZWN1bGF0ZXMgb24gdGhlICAgICAgICAgICAgICArLS0tLS0tLSsgICB+ICAgfCAgICAgICB8CisJTE9BRCBvZiBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycnJycnJycnJycnJycnJyfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisKKworYnV0IGlmIHRoZXJlIHdhcyBhbiB1cGRhdGUgb3IgYW4gaW52YWxpZGF0aW9uIGZyb20gYW5vdGhlciBDUFUgcGVuZGluZywgdGhlbgordGhlIHNwZWN1bGF0aW9uIHdpbGwgYmUgY2FuY2VsbGVkIGFuZCB0aGUgdmFsdWUgcmVsb2FkZWQ6CisKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDpESVZJREUgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwlUaGUgQ1BVIGJlaW5nIGJ1c3kgZG9pbmcgYSAtLS0+ICAgICAtLS0+fCBBLT4wICB8fn5+fiAgIHwgICAgICAgfAorCWRpdmlzaW9uIHNwZWN1bGF0ZXMgb24gdGhlICAgICAgICAgICAgICArLS0tLS0tLSsgICB+ICAgfCAgICAgICB8CisJTE9BRCBvZiBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgIH4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycnJycnJycnJycnJycnJyciAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJVGhlIHNwZWN1bGF0aW9uIGlzIGRpc2NhcmRlZCAtLS0+ICAgLS0tPnwgQS0+MSAgfC0tLS0tLT58ICAgICAgIHwKKwlhbmQgYW4gdXBkYXRlZCB2YWx1ZSBpcyAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCXJldHJpZXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05MDEsNyArMTA4MSw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFNvbWUgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbGludXgga2VybmVsIGltcGx5IG1lbW9yeSBiYXJyaWVycywgYW1vbmdzdAotd2hpY2ggYXJlIGxvY2tpbmcsIHNjaGVkdWxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KK3doaWNoIGFyZSBsb2NraW5nIGFuZCBzY2hlZHVsaW5nIGZ1bmN0aW9ucy4KIAogVGhpcyBzcGVjaWZpY2F0aW9uIGlzIGEgX21pbmltdW1fIGd1YXJhbnRlZTsgYW55IHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIG1heQogcHJvdmlkZSBtb3JlIHN1YnN0YW50aWFsIGd1YXJhbnRlZXMsIGJ1dCB0aGVzZSBtYXkgbm90IGJlIHJlbGllZCB1cG9uIG91dHNpZGUKQEAgLTk2Niw2ICsxMTQ2LDIwIEBACiAgICAgYmFycmllcnMgaXMgdGhhdCB0aGUgZWZmZWN0cyBpbnN0cnVjdGlvbnMgb3V0c2lkZSBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gbWF5CiAgICAgc2VlcCBpbnRvIHRoZSBpbnNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uCiAKK0EgTE9DSyBmb2xsb3dlZCBieSBhbiBVTkxPQ0sgbWF5IG5vdCBiZSBhc3N1bWVkIHRvIGJlIGZ1bGwgbWVtb3J5IGJhcnJpZXIKK2JlY2F1c2UgaXQgaXMgcG9zc2libGUgZm9yIGFuIGFjY2VzcyBwcmVjZWRpbmcgdGhlIExPQ0sgdG8gaGFwcGVuIGFmdGVyIHRoZQorTE9DSywgYW5kIGFuIGFjY2VzcyBmb2xsb3dpbmcgdGhlIFVOTE9DSyB0byBoYXBwZW4gYmVmb3JlIHRoZSBVTkxPQ0ssIGFuZCB0aGUKK3R3byBhY2Nlc3NlcyBjYW4gdGhlbXNlbHZlcyB0aGVuIGNyb3NzOgorCisJKkEgPSBhOworCUxPQ0sKKwlVTkxPQ0sKKwkqQiA9IGI7CisKK21heSBvY2N1ciBhczoKKworCUxPQ0ssIFNUT1JFICpCLCBTVE9SRSAqQSwgVU5MT0NLCisKIExvY2tzIGFuZCBzZW1hcGhvcmVzIG1heSBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlIG9mIG9yZGVyaW5nIG9uIFVQIGNvbXBpbGVkCiBzeXN0ZW1zLCBhbmQgc28gY2Fubm90IGJlIGNvdW50ZWQgb24gaW4gc3VjaCBhIHNpdHVhdGlvbiB0byBhY3R1YWxseSBhY2hpZXZlCiBhbnl0aGluZyBhdCBhbGwgLSBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBJL08gYWNjZXNzZXMgLSB1bmxlc3MgY29tYmluZWQKQEAgLTEwMTYsOCArMTIxMCw2IEBACiAKICAoKikgc2NoZWR1bGUoKSBhbmQgc2ltaWxhciBpbXBseSBmdWxsIG1lbW9yeSBiYXJyaWVycy4KIAotICgqKSBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgaW1wbHkgZnVsbCBtZW1vcnkgYmFycmllcnMuCi0KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBJTlRFUi1DUFUgTE9DS0lORyBCQVJSSUVSIEVGRkVDVFMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMAppbmRleCBhY2IzMGM1Li40ZjJhNDBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCkBAIC0xNCw4ICsxNCw4IEBACiAKIFJFQURNRS5pcHcyMjAwCiAKLVZlcnNpb246IDEuMC44Ci1EYXRlICAgOiBPY3RvYmVyIDIwLCAyMDA1CitWZXJzaW9uOiAxLjEuMgorRGF0ZSAgIDogTWFyY2ggMzAsIDIwMDYKIAogCiBJbmRleApAQCAtMTAzLDcgKzEwMyw3IEBACiAKIDEuMS4gT3ZlcnZpZXcgb2YgRmVhdHVyZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgY3VycmVudCByZWxlYXNlICgxLjAuOCkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKK1RoZSBjdXJyZW50IHJlbGVhc2UgKDEuMS4yKSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgogCiArIEJTUyBtb2RlIChJbmZyYXN0cnVjdHVyZSwgTWFuYWdlZCkKICsgSUJTUyBtb2RlIChBZC1Ib2MpCkBAIC0yNDcsOCArMjQ3LDggQEAKICUgY2F0IC9zeXMvYnVzL3BjaS9kcml2ZXJzL2lwdzIyMDAvZGVidWdfbGV2ZWwKIAogV2lsbCByZXBvcnQgdGhlIGN1cnJlbnQgZGVidWcgbGV2ZWwgb2YgdGhlIGRyaXZlcidzIGxvZ2dpbmcgc3Vic3lzdGVtIAotKG9ubHkgYXZhaWxhYmxlIGlmIENPTkZJR19JUFdfREVCVUcgd2FzIGNvbmZpZ3VyZWQgd2hlbiB0aGUgZHJpdmVyIHdhcyAKLWJ1aWx0KS4KKyhvbmx5IGF2YWlsYWJsZSBpZiBDT05GSUdfSVBXMjIwMF9ERUJVRyB3YXMgY29uZmlndXJlZCB3aGVuIHRoZSBkcml2ZXIKK3dhcyBidWlsdCkuCiAKIFlvdSBjYW4gc2V0IHRoZSBkZWJ1ZyBsZXZlbCB2aWE6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAppbmRleCA4ZDhiNGU1Li5hZmFjNzgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CkBAIC0xLDcgKzEsNyBAQAogCiAJCUxpbnV4IEV0aGVybmV0IEJvbmRpbmcgRHJpdmVyIEhPV1RPCiAKLQkJTGF0ZXN0IHVwZGF0ZTogMjEgSnVuZSAyMDA1CisJCUxhdGVzdCB1cGRhdGU6IDI0IEFwcmlsIDIwMDYKIAogSW5pdGlhbCByZWxlYXNlIDogVGhvbWFzIERhdmlzIDx0YWRhdmlzIGF0IGxibC5nb3Y+CiBDb3JyZWN0aW9ucywgSEEgZXh0ZW5zaW9ucyA6IDIwMDAvMTAvMDMtMTUgOgpAQCAtMTIsNiArMTIsOCBAQAogICAtIEpheSBWb3NidXJnaCA8ZnViYXIgYXQgdXMgZG90IGlibSBkb3QgY29tPgogCiBSZW9yZ2FuaXplZCBhbmQgdXBkYXRlZCBGZWIgMjAwNSBieSBKYXkgVm9zYnVyZ2gKK0FkZGVkIFN5c2ZzIGluZm9ybWF0aW9uOiAyMDA2LzA0LzI0CisgIC0gTWl0Y2ggV2lsbGlhbXMgPG1pdGNoLmEud2lsbGlhbXMgYXQgaW50ZWwuY29tPgogCiBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PQpAQCAtMzgsNjEgKzQwLDYyIEBACiAyLiBCb25kaW5nIERyaXZlciBPcHRpb25zCiAKIDMuIENvbmZpZ3VyaW5nIEJvbmRpbmcgRGV2aWNlcwotMy4xCUNvbmZpZ3VyYXRpb24gd2l0aCBzeXNjb25maWcgc3VwcG9ydAotMy4xLjEJCVVzaW5nIERIQ1Agd2l0aCBzeXNjb25maWcKLTMuMS4yCQlDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyB3aXRoIHN5c2NvbmZpZwotMy4yCUNvbmZpZ3VyYXRpb24gd2l0aCBpbml0c2NyaXB0cyBzdXBwb3J0Ci0zLjIuMQkJVXNpbmcgREhDUCB3aXRoIGluaXRzY3JpcHRzCi0zLjIuMgkJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgd2l0aCBpbml0c2NyaXB0cwotMy4zCUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkKKzMuMQlDb25maWd1cmF0aW9uIHdpdGggU3lzY29uZmlnIFN1cHBvcnQKKzMuMS4xCQlVc2luZyBESENQIHdpdGggU3lzY29uZmlnCiszLjEuMgkJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgd2l0aCBTeXNjb25maWcKKzMuMglDb25maWd1cmF0aW9uIHdpdGggSW5pdHNjcmlwdHMgU3VwcG9ydAorMy4yLjEJCVVzaW5nIERIQ1Agd2l0aCBJbml0c2NyaXB0cworMy4yLjIJCUNvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIHdpdGggSW5pdHNjcmlwdHMKKzMuMwlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHdpdGggSWZlbnNsYXZlCiAzLjMuMQkJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgTWFudWFsbHkKKzMuNAlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHZpYSBTeXNmcwogCi01LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KLTUuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KLTUuMglOZXR3b3JrIENvbmZpZ3VyYXRpb24KKzQuIFF1ZXJ5aW5nIEJvbmRpbmcgQ29uZmlndXJhdGlvbgorNC4xCUJvbmRpbmcgQ29uZmlndXJhdGlvbgorNC4yCU5ldHdvcmsgQ29uZmlndXJhdGlvbgogCi02LiBTd2l0Y2ggQ29uZmlndXJhdGlvbgorNS4gU3dpdGNoIENvbmZpZ3VyYXRpb24KIAotNy4gODAyLjFxIFZMQU4gU3VwcG9ydAorNi4gODAyLjFxIFZMQU4gU3VwcG9ydAogCi04LiBMaW5rIE1vbml0b3JpbmcKLTguMQlBUlAgTW9uaXRvciBPcGVyYXRpb24KLTguMglDb25maWd1cmluZyBNdWx0aXBsZSBBUlAgVGFyZ2V0cwotOC4zCU1JSSBNb25pdG9yIE9wZXJhdGlvbgorNy4gTGluayBNb25pdG9yaW5nCis3LjEJQVJQIE1vbml0b3IgT3BlcmF0aW9uCis3LjIJQ29uZmlndXJpbmcgTXVsdGlwbGUgQVJQIFRhcmdldHMKKzcuMwlNSUkgTW9uaXRvciBPcGVyYXRpb24KIAotOS4gUG90ZW50aWFsIFRyb3VibGUgU291cmNlcwotOS4xCUFkdmVudHVyZXMgaW4gUm91dGluZwotOS4yCUV0aGVybmV0IERldmljZSBSZW5hbWluZwotOS4zCVBhaW5mdWxseSBTbG93IE9yIE5vIEZhaWxlZCBMaW5rIERldGVjdGlvbiBCeSBNaWltb24KKzguIFBvdGVudGlhbCBUcm91YmxlIFNvdXJjZXMKKzguMQlBZHZlbnR1cmVzIGluIFJvdXRpbmcKKzguMglFdGhlcm5ldCBEZXZpY2UgUmVuYW1pbmcKKzguMwlQYWluZnVsbHkgU2xvdyBPciBObyBGYWlsZWQgTGluayBEZXRlY3Rpb24gQnkgTWlpbW9uCiAKLTEwLiBTTk1QIGFnZW50cworOS4gU05NUCBhZ2VudHMKIAotMTEuIFByb21pc2N1b3VzIG1vZGUKKzEwLiBQcm9taXNjdW91cyBtb2RlCiAKLTEyLiBDb25maWd1cmluZyBCb25kaW5nIGZvciBIaWdoIEF2YWlsYWJpbGl0eQotMTIuMQlIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKLTEyLjIJSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKLTEyLjIuMQkJSEEgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5Ci0xMi4yLjIJCUhBIExpbmsgTW9uaXRvcmluZyBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMS4gQ29uZmlndXJpbmcgQm9uZGluZyBmb3IgSGlnaCBBdmFpbGFiaWxpdHkKKzExLjEJSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CisxMS4yCUhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMS4yLjEJCUhBIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTEuMi4yCQlIQSBMaW5rIE1vbml0b3JpbmcgZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQogCi0xMy4gQ29uZmlndXJpbmcgQm9uZGluZyBmb3IgTWF4aW11bSBUaHJvdWdocHV0Ci0xMy4xCU1heGltdW0gVGhyb3VnaHB1dCBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKLTEzLjEuMQkJTVQgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQotMTMuMS4yCQlNVCBMaW5rIE1vbml0b3JpbmcgZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKLTEzLjIJTWF4aW11bSBUaHJvdWdocHV0IGluIGEgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5Ci0xMy4yLjEJCU1UIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQotMTMuMi4yCQlNVCBMaW5rIE1vbml0b3JpbmcgZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTIuIENvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIE1heGltdW0gVGhyb3VnaHB1dAorMTIuMQlNYXhpbXVtIFRocm91Z2hwdXQgaW4gYSBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4xLjEJCU1UIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjEuMgkJTVQgTGluayBNb25pdG9yaW5nIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4yCU1heGltdW0gVGhyb3VnaHB1dCBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTIuMi4xCQlNVCBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIuMgkJTVQgTGluayBNb25pdG9yaW5nIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKIAotMTQuIFN3aXRjaCBCZWhhdmlvciBJc3N1ZXMKLTE0LjEJTGluayBFc3RhYmxpc2htZW50IGFuZCBGYWlsb3ZlciBEZWxheXMKLTE0LjIJRHVwbGljYXRlZCBJbmNvbWluZyBQYWNrZXRzCisxMy4gU3dpdGNoIEJlaGF2aW9yIElzc3VlcworMTMuMQlMaW5rIEVzdGFibGlzaG1lbnQgYW5kIEZhaWxvdmVyIERlbGF5cworMTMuMglEdXBsaWNhdGVkIEluY29taW5nIFBhY2tldHMKIAotMTUuIEhhcmR3YXJlIFNwZWNpZmljIENvbnNpZGVyYXRpb25zCi0xNS4xCUlCTSBCbGFkZUNlbnRlcgorMTQuIEhhcmR3YXJlIFNwZWNpZmljIENvbnNpZGVyYXRpb25zCisxNC4xCUlCTSBCbGFkZUNlbnRlcgogCi0xNi4gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKzE1LiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucwogCi0xNy4gUmVzb3VyY2VzIGFuZCBMaW5rcworMTYuIFJlc291cmNlcyBhbmQgTGlua3MKIAogCiAxLiBCb25kaW5nIERyaXZlciBJbnN0YWxsYXRpb24KQEAgLTE1Niw2ICsxNTksOSBAQAogb253YXJkcykgZG8gbm90IGhhdmUgL3Vzci9pbmNsdWRlL2xpbnV4IHN5bWJvbGljYWxseSBsaW5rZWQgdG8gdGhlCiBkZWZhdWx0IGtlcm5lbCBzb3VyY2UgaW5jbHVkZSBkaXJlY3RvcnkuCiAKK1NFQ09ORCBJTVBPUlRBTlQgTk9URToKKwlJZiB5b3UgcGxhbiB0byBjb25maWd1cmUgYm9uZGluZyB1c2luZyBzeXNmcywgeW91IGRvIG5vdCBuZWVkCit0byB1c2UgaWZlbnNsYXZlLgogCiAyLiBCb25kaW5nIERyaXZlciBPcHRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNzAsNyArMjc2LDcgQEAKIAkJSW4gYm9uZGluZyB2ZXJzaW9uIDIuNi4yIG9yIGxhdGVyLCB3aGVuIGEgZmFpbG92ZXIKIAkJb2NjdXJzIGluIGFjdGl2ZS1iYWNrdXAgbW9kZSwgYm9uZGluZyB3aWxsIGlzc3VlIG9uZQogCQlvciBtb3JlIGdyYXR1aXRvdXMgQVJQcyBvbiB0aGUgbmV3bHkgYWN0aXZlIHNsYXZlLgotCQlPbmUgZ3JhdHV0aW91cyBBUlAgaXMgaXNzdWVkIGZvciB0aGUgYm9uZGluZyBtYXN0ZXIKKwkJT25lIGdyYXR1aXRvdXMgQVJQIGlzIGlzc3VlZCBmb3IgdGhlIGJvbmRpbmcgbWFzdGVyCiAJCWludGVyZmFjZSBhbmQgZWFjaCBWTEFOIGludGVyZmFjZXMgY29uZmlndXJlZCBhYm92ZQogCQlpdCwgcHJvdmlkZWQgdGhhdCB0aGUgaW50ZXJmYWNlIGhhcyBhdCBsZWFzdCBvbmUgSVAKIAkJYWRkcmVzcyBjb25maWd1cmVkLiAgR3JhdHVpdG91cyBBUlBzIGlzc3VlZCBmb3IgVkxBTgpAQCAtMzc3LDcgKzM4Myw3IEBACiAJCVdoZW4gYSBsaW5rIGlzIHJlY29ubmVjdGVkIG9yIGEgbmV3IHNsYXZlIGpvaW5zIHRoZQogCQlib25kIHRoZSByZWNlaXZlIHRyYWZmaWMgaXMgcmVkaXN0cmlidXRlZCBhbW9uZyBhbGwKIAkJYWN0aXZlIHNsYXZlcyBpbiB0aGUgYm9uZCBieSBpbml0aWF0aW5nIEFSUCBSZXBsaWVzCi0JCXdpdGggdGhlIHNlbGVjdGVkIG1hYyBhZGRyZXNzIHRvIGVhY2ggb2YgdGhlCisJCXdpdGggdGhlIHNlbGVjdGVkIE1BQyBhZGRyZXNzIHRvIGVhY2ggb2YgdGhlCiAJCWNsaWVudHMuIFRoZSB1cGRlbGF5IHBhcmFtZXRlciAoZGV0YWlsZWQgYmVsb3cpIG11c3QKIAkJYmUgc2V0IHRvIGEgdmFsdWUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBzd2l0Y2gncwogCQlmb3J3YXJkaW5nIGRlbGF5IHNvIHRoYXQgdGhlIEFSUCBSZXBsaWVzIHNlbnQgdG8gdGhlCkBAIC00OTgsMTEgKzUwNCwxMiBAQAogMy4gQ29uZmlndXJpbmcgQm9uZGluZyBEZXZpY2VzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotCVRoZXJlIGFyZSwgZXNzZW50aWFsbHksIHR3byBtZXRob2RzIGZvciBjb25maWd1cmluZyBib25kaW5nOgotd2l0aCBzdXBwb3J0IGZyb20gdGhlIGRpc3RybydzIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cywgYW5kCi13aXRob3V0LiAgRGlzdHJvcyBnZW5lcmFsbHkgdXNlIG9uZSBvZiB0d28gcGFja2FnZXMgZm9yIHRoZSBuZXR3b3JrCi1pbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcuICBSZWNlbnQgdmVyc2lvbnMgb2YKLXRoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIgdmVyc2lvbnMgZG8gbm90LgorCVlvdSBjYW4gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgZWl0aGVyIHlvdXIgZGlzdHJvJ3MgbmV0d29yaworaW5pdGlhbGl6YXRpb24gc2NyaXB0cywgb3IgbWFudWFsbHkgdXNpbmcgZWl0aGVyIGlmZW5zbGF2ZSBvciB0aGUKK3N5c2ZzIGludGVyZmFjZS4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdHdvIHBhY2thZ2VzIGZvciB0aGUKK25ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnLiAgUmVjZW50Cit2ZXJzaW9ucyBvZiB0aGVzZSBwYWNrYWdlcyBoYXZlIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHdoaWxlIG9sZGVyCit2ZXJzaW9ucyBkbyBub3QuCiAKIAlXZSB3aWxsIGZpcnN0IGRlc2NyaWJlIHRoZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBib25kaW5nIGZvcgogZGlzdHJvcyB1c2luZyB2ZXJzaW9ucyBvZiBpbml0c2NyaXB0cyBhbmQgc3lzY29uZmlnIHdpdGggZnVsbCBvcgpAQCAtNTMwLDcgKzUzNyw3IEBACiAJSWYgdGhpcyByZXR1cm5zIGFueSBtYXRjaGVzLCB0aGVuIHlvdXIgaW5pdHNjcmlwdHMgb3IKIHN5c2NvbmZpZyBoYXMgc3VwcG9ydCBmb3IgYm9uZGluZy4KIAotMy4xIENvbmZpZ3VyYXRpb24gd2l0aCBzeXNjb25maWcgc3VwcG9ydAorMy4xIENvbmZpZ3VyYXRpb24gd2l0aCBTeXNjb25maWcgU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB1c2luZyBhIHZlcnNpb24gb2Ygc3lzY29uZmlnCkBAIC01MzgsNyArNTQ1LDcgQEAKIAogCVN1U0UgU0xFUyA5J3MgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIHN5c3RlbSBkb2VzIHN1cHBvcnQKIGJvbmRpbmcsIGhvd2V2ZXIsIGF0IHRoaXMgd3JpdGluZywgdGhlIFlhU1Qgc3lzdGVtIGNvbmZpZ3VyYXRpb24KLWZyb250ZW5kIGRvZXMgbm90IHByb3ZpZGUgYW55IG1lYW5zIHRvIHdvcmsgd2l0aCBib25kaW5nIGRldmljZXMuCitmcm9udCBlbmQgZG9lcyBub3QgcHJvdmlkZSBhbnkgbWVhbnMgdG8gd29yayB3aXRoIGJvbmRpbmcgZGV2aWNlcy4KIEJvbmRpbmcgZGV2aWNlcyBjYW4gYmUgbWFuYWdlZCBieSBoYW5kLCBob3dldmVyLCBhcyBmb2xsb3dzLgogCiAJRmlyc3QsIGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQsIGNvbmZpZ3VyZSB0aGUKQEAgLTY2MCw3ICs2NjcsNyBAQAogCU5vdGUgdGhhdCB0aGUgdGVtcGxhdGUgZG9lcyBub3QgZG9jdW1lbnQgdGhlIHZhcmlvdXMgQk9ORElOR18KIHNldHRpbmdzIGRlc2NyaWJlZCBhYm92ZSwgYnV0IGRvZXMgZGVzY3JpYmUgbWFueSBvZiB0aGUgb3RoZXIgb3B0aW9ucy4KIAotMy4xLjEgVXNpbmcgREhDUCB3aXRoIHN5c2NvbmZpZworMy4xLjEgVXNpbmcgREhDUCB3aXRoIFN5c2NvbmZpZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJVW5kZXIgc3lzY29uZmlnLCBjb25maWd1cmluZyBhIGRldmljZSB3aXRoIEJPT1RQUk9UTz0nZGhjcCcKQEAgLTY3MCw3ICs2NzcsNyBAQAogdGhlIHNsYXZlIGRldmljZXMuICBXaXRob3V0IGFjdGl2ZSBzbGF2ZXMsIHRoZSBESENQIHJlcXVlc3RzIGFyZSBub3QKIHNlbnQgdG8gdGhlIG5ldHdvcmsuCiAKLTMuMS4yIENvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIHdpdGggc3lzY29uZmlnCiszLjEuMiBDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyB3aXRoIFN5c2NvbmZpZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoZSBzeXNjb25maWcgbmV0d29yayBpbml0aWFsaXphdGlvbiBzeXN0ZW0gaXMgY2FwYWJsZSBvZgpAQCAtNjg1LDcgKzY5Miw3IEBACiBvcHRpb25zIGluIHRoZSBpZmNmZy1ib25kWCBmaWxlLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGFkZCB0aGVtIHRvCiB0aGUgc3lzdGVtIC9ldGMvbW9kdWxlcy5jb25mIG9yIC9ldGMvbW9kcHJvYmUuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuCiAKLTMuMiBDb25maWd1cmF0aW9uIHdpdGggaW5pdHNjcmlwdHMgc3VwcG9ydAorMy4yIENvbmZpZ3VyYXRpb24gd2l0aCBJbml0c2NyaXB0cyBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3MgdXNpbmcgYSB2ZXJzaW9uIG9mIGluaXRzY3JpcHRzCkBAIC03NTYsNyArNzYzLDcgQEAKIHdpbGwgcmVzdGFydCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIHlvdXIgYm9uZCBsaW5rIHNob3VsZCBiZSBub3cKIHVwIGFuZCBydW5uaW5nLgogCi0zLjIuMSBVc2luZyBESENQIHdpdGggaW5pdHNjcmlwdHMKKzMuMi4xIFVzaW5nIERIQ1Agd2l0aCBJbml0c2NyaXB0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlSZWNlbnQgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgKHRoZSB2ZXJzaW9uIHN1cHBsaWVkIHdpdGgKQEAgLTc2OCw3ICs3NzUsNyBAQAogYW5kIGFkZCBhIGxpbmUgY29uc2lzdGluZyBvZiAiVFlQRT1Cb25kaW5nIi4gIE5vdGUgdGhhdCB0aGUgVFlQRSB2YWx1ZQogaXMgY2FzZSBzZW5zaXRpdmUuCiAKLTMuMi4yIENvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIHdpdGggaW5pdHNjcmlwdHMKKzMuMi4yIENvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIHdpdGggSW5pdHNjcmlwdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCUF0IHRoaXMgd3JpdGluZywgdGhlIGluaXRzY3JpcHRzIHBhY2thZ2UgZG9lcyBub3QgZGlyZWN0bHkKQEAgLTc4NCw4ICs3OTEsOCBAQAogZXhoaWJpdGluZyB0aGlzIHByb2JsZW0sIGl0IHdpbGwgYmUgaW1wb3NzaWJsZSB0byBjb25maWd1cmUgbXVsdGlwbGUKIGJvbmRzIHdpdGggZGlmZmVyaW5nIHBhcmFtZXRlcnMuCiAKLTMuMyBDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMy4zIENvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgd2l0aCBJZmVuc2xhdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGlzIHNlY3Rpb24gYXBwbGllcyB0byBkaXN0cm9zIHdob3NlIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24KIHNjcmlwdHMgKHRoZSBzeXNjb25maWcgb3IgaW5pdHNjcmlwdHMgcGFja2FnZSkgZG8gbm90IGhhdmUgc3BlY2lmaWMKQEAgLTg4OSwxMSArODk2LDEzOSBAQAogCVRoaXMgbWF5IGJlIHJlcGVhdGVkIGFueSBudW1iZXIgb2YgdGltZXMsIHNwZWNpZnlpbmcgYSBuZXcgYW5kCiB1bmlxdWUgbmFtZSBpbiBwbGFjZSBvZiBib25kMSBmb3IgZWFjaCBzdWJzZXF1ZW50IGluc3RhbmNlLgogCiszLjQgQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseSB2aWEgU3lzZnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi01LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24gCisJU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDMuMCwgQ2hhbm5lbCBCb25kaW5nIG1heSBiZSBjb25maWd1cmVkCit2aWEgdGhlIHN5c2ZzIGludGVyZmFjZS4gIFRoaXMgaW50ZXJmYWNlIGFsbG93cyBkeW5hbWljIGNvbmZpZ3VyYXRpb24KK29mIGFsbCBib25kcyBpbiB0aGUgc3lzdGVtIHdpdGhvdXQgdW5sb2FkaW5nIHRoZSBtb2R1bGUuICBJdCBhbHNvCithbGxvd3MgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgYm9uZHMgYXQgcnVudGltZS4gIElmZW5zbGF2ZSBpcyBubworbG9uZ2VyIHJlcXVpcmVkLCB0aG91Z2ggaXQgaXMgc3RpbGwgc3VwcG9ydGVkLgorCisJVXNlIG9mIHRoZSBzeXNmcyBpbnRlcmZhY2UgYWxsb3dzIHlvdSB0byB1c2UgbXVsdGlwbGUgYm9uZHMKK3dpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIHdpdGhvdXQgaGF2aW5nIHRvIHJlbG9hZCB0aGUgbW9kdWxlLgorSXQgYWxzbyBhbGxvd3MgeW91IHRvIHVzZSBtdWx0aXBsZSwgZGlmZmVyZW50bHkgY29uZmlndXJlZCBib25kcyB3aGVuCitib25kaW5nIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4KKworCVlvdSBtdXN0IGhhdmUgdGhlIHN5c2ZzIGZpbGVzeXN0ZW0gbW91bnRlZCB0byBjb25maWd1cmUKK2JvbmRpbmcgdGhpcyB3YXkuICBUaGUgZXhhbXBsZXMgaW4gdGhpcyBkb2N1bWVudCBhc3N1bWUgdGhhdCB5b3UKK2FyZSB1c2luZyB0aGUgc3RhbmRhcmQgbW91bnQgcG9pbnQgZm9yIHN5c2ZzLCBlLmcuIC9zeXMuICBJZiB5b3VyCitzeXNmcyBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgZWxzZXdoZXJlLCB5b3Ugd2lsbCBuZWVkIHRvIGFkanVzdCB0aGUKK2V4YW1wbGUgcGF0aHMgYWNjb3JkaW5nbHkuCisKK0NyZWF0aW5nIGFuZCBEZXN0cm95aW5nIEJvbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gYWRkIGEgbmV3IGJvbmQgZm9vOgorIyBlY2hvICtmb28gPiAvc3lzL2NsYXNzL25ldC9ib25kaW5nX21hc3RlcnMKKworVG8gcmVtb3ZlIGFuIGV4aXN0aW5nIGJvbmQgYmFyOgorIyBlY2hvIC1iYXIgPiAvc3lzL2NsYXNzL25ldC9ib25kaW5nX21hc3RlcnMKKworVG8gc2hvdyBhbGwgZXhpc3RpbmcgYm9uZHM6CisjIGNhdCAvc3lzL2NsYXNzL25ldC9ib25kaW5nX21hc3RlcnMKKworTk9URTogZHVlIHRvIDRLIHNpemUgbGltaXRhdGlvbiBvZiBzeXNmcyBmaWxlcywgdGhpcyBsaXN0IG1heSBiZQordHJ1bmNhdGVkIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBhIGZldyBodW5kcmVkIGJvbmRzLiAgVGhpcyBpcyB1bmxpa2VseQordG8gb2NjdXIgdW5kZXIgbm9ybWFsIG9wZXJhdGluZyBjb25kaXRpb25zLgorCitBZGRpbmcgYW5kIFJlbW92aW5nIFNsYXZlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlJbnRlcmZhY2VzIG1heSBiZSBlbnNsYXZlZCB0byBhIGJvbmQgdXNpbmcgdGhlIGZpbGUKKy9zeXMvY2xhc3MvbmV0Lzxib25kPi9ib25kaW5nL3NsYXZlcy4gIFRoZSBzZW1hbnRpY3MgZm9yIHRoaXMgZmlsZQorYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgYm9uZGluZ19tYXN0ZXJzIGZpbGUuCisKK1RvIGVuc2xhdmUgaW50ZXJmYWNlIGV0aDAgdG8gYm9uZCBib25kMDoKKyMgaWZjb25maWcgYm9uZDAgdXAKKyMgZWNobyArZXRoMCA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvc2xhdmVzCisKK1RvIGZyZWUgc2xhdmUgZXRoMCBmcm9tIGJvbmQgYm9uZDA6CisjIGVjaG8gLWV0aDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL3NsYXZlcworCisJTk9URTogVGhlIGJvbmQgbXVzdCBiZSB1cCBiZWZvcmUgc2xhdmVzIGNhbiBiZSBhZGRlZC4gIEFsbAorc2xhdmVzIGFyZSBmcmVlZCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCBkb3duLgorCisJV2hlbiBhbiBpbnRlcmZhY2UgaXMgZW5zbGF2ZWQgdG8gYSBib25kLCBzeW1saW5rcyBiZXR3ZWVuIHRoZQordHdvIGFyZSBjcmVhdGVkIGluIHRoZSBzeXNmcyBmaWxlc3lzdGVtLiAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgZ2V0Cisvc3lzL2NsYXNzL25ldC9ib25kMC9zbGF2ZV9ldGgwIHBvaW50aW5nIHRvIC9zeXMvY2xhc3MvbmV0L2V0aDAsIGFuZAorL3N5cy9jbGFzcy9uZXQvZXRoMC9tYXN0ZXIgcG9pbnRpbmcgdG8gL3N5cy9jbGFzcy9uZXQvYm9uZDAuCisKKwlUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiB0ZWxsIHF1aWNrbHkgd2hldGhlciBvciBub3QgYW4KK2ludGVyZmFjZSBpcyBlbnNsYXZlZCBieSBsb29raW5nIGZvciB0aGUgbWFzdGVyIHN5bWxpbmsuICBUaHVzOgorIyBlY2hvIC1ldGgwID4gL3N5cy9jbGFzcy9uZXQvZXRoMC9tYXN0ZXIvYm9uZGluZy9zbGF2ZXMKK3dpbGwgZnJlZSBldGgwIGZyb20gd2hhdGV2ZXIgYm9uZCBpdCBpcyBlbnNsYXZlZCB0bywgcmVnYXJkbGVzcyBvZgordGhlIG5hbWUgb2YgdGhlIGJvbmQgaW50ZXJmYWNlLgorCitDaGFuZ2luZyBhIEJvbmQncyBDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRWFjaCBib25kIG1heSBiZSBjb25maWd1cmVkIGluZGl2aWR1YWxseSBieSBtYW5pcHVsYXRpbmcgdGhlCitmaWxlcyBsb2NhdGVkIGluIC9zeXMvY2xhc3MvbmV0Lzxib25kIG5hbWU+L2JvbmRpbmcKKworCVRoZSBuYW1lcyBvZiB0aGVzZSBmaWxlcyBjb3JyZXNwb25kIGRpcmVjdGx5IHdpdGggdGhlIGNvbW1hbmQtCitsaW5lIHBhcmFtZXRlcnMgZGVzY3JpYmVkIGVsc2V3aGVyZSBpbiBpbiB0aGlzIGZpbGUsIGFuZCwgd2l0aCB0aGUKK2V4Y2VwdGlvbiBvZiBhcnBfaXBfdGFyZ2V0LCB0aGV5IGFjY2VwdCB0aGUgc2FtZSB2YWx1ZXMuICBUbyBzZWUgdGhlCitjdXJyZW50IHNldHRpbmcsIHNpbXBseSBjYXQgdGhlIGFwcHJvcHJpYXRlIGZpbGUuCisKKwlBIGZldyBleGFtcGxlcyB3aWxsIGJlIGdpdmVuIGhlcmU7IGZvciBzcGVjaWZpYyB1c2FnZQorZ3VpZGVsaW5lcyBmb3IgZWFjaCBwYXJhbWV0ZXIsIHNlZSB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBpbiB0aGlzCitkb2N1bWVudC4KKworVG8gY29uZmlndXJlIGJvbmQwIGZvciBiYWxhbmNlLWFsYiBtb2RlOgorIyBpZmNvbmZpZyBib25kMCBkb3duCisjIGVjaG8gNiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvbW9kZQorIC0gb3IgLQorIyBlY2hvIGJhbGFuY2UtYWxiID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9tb2RlCisJTk9URTogVGhlIGJvbmQgaW50ZXJmYWNlIG11c3QgYmUgZG93biBiZWZvcmUgdGhlIG1vZGUgY2FuIGJlCitjaGFuZ2VkLgorCitUbyBlbmFibGUgTUlJIG1vbml0b3Jpbmcgb24gYm9uZDAgd2l0aCBhIDEgc2Vjb25kIGludGVydmFsOgorIyBlY2hvIDEwMDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL21paW1vbgorCU5PVEU6IElmIEFSUCBtb25pdG9yaW5nIGlzIGVuYWJsZWQsIGl0IHdpbGwgZGlzYWJsZWQgd2hlbiBNSUkKK21vbml0b3JpbmcgaXMgZW5hYmxlZCwgYW5kIHZpY2UtdmVyc2EuCisKK1RvIGFkZCBBUlAgdGFyZ2V0czoKKyMgZWNobyArMTkyLjE2OC4wLjEwMCA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvYXJwX2lwX3RhcmdldAorIyBlY2hvICsxOTIuMTY4LjAuMTAxID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9hcnBfaXBfdGFyZ2V0CisJTk9URTogIHVwIHRvIDEwIHRhcmdldCBhZGRyZXNzZXMgbWF5IGJlIHNwZWNpZmllZC4KKworVG8gcmVtb3ZlIGFuIEFSUCB0YXJnZXQ6CisjIGVjaG8gLTE5Mi4xNjguMC4xMDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL2FycF9pcF90YXJnZXQKKworRXhhbXBsZSBDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlXZSBiZWdpbiB3aXRoIHRoZSBzYW1lIGV4YW1wbGUgdGhhdCBpcyBzaG93biBpbiBzZWN0aW9uIDMuMywKK2V4ZWN1dGVkIHdpdGggc3lzZnMsIGFuZCB3aXRob3V0IHVzaW5nIGlmZW5zbGF2ZS4KKworCVRvIG1ha2UgYSBzaW1wbGUgYm9uZCBvZiB0d28gZTEwMCBkZXZpY2VzIChwcmVzdW1lZCB0byBiZSBldGgwCithbmQgZXRoMSksIGFuZCBoYXZlIGl0IHBlcnNpc3QgYWNyb3NzIHJlYm9vdHMsIGVkaXQgdGhlIGFwcHJvcHJpYXRlCitmaWxlICgvZXRjL2luaXQuZC9ib290LmxvY2FsIG9yIC9ldGMvcmMuZC9yYy5sb2NhbCksIGFuZCBhZGQgdGhlCitmb2xsb3dpbmc6CisKK21vZHByb2JlIGJvbmRpbmcKK21vZHByb2JlIGUxMDAKK2VjaG8gYmFsYW5jZS1hbGIgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL21vZGUKK2lmY29uZmlnIGJvbmQwIDE5Mi4xNjguMS4xIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB1cAorZWNobyAxMDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL21paW1vbgorZWNobyArZXRoMCA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvc2xhdmVzCitlY2hvICtldGgxID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9zbGF2ZXMKKworCVRvIGFkZCBhIHNlY29uZCBib25kLCB3aXRoIHR3byBlMTAwMCBpbnRlcmZhY2VzIGluCithY3RpdmUtYmFja3VwIG1vZGUsIHVzaW5nIEFSUCBtb25pdG9yaW5nLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0bworeW91ciBpbml0IHNjcmlwdDoKKworbW9kcHJvYmUgZTEwMDAKK2VjaG8gK2JvbmQxID4gL3N5cy9jbGFzcy9uZXQvYm9uZGluZ19tYXN0ZXJzCitlY2hvIGFjdGl2ZS1iYWNrdXAgPiAvc3lzL2NsYXNzL25ldC9ib25kMS9ib25kaW5nL21vZGUKK2lmY29uZmlnIGJvbmQxIDE5Mi4xNjguMi4xIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB1cAorZWNobyArMTkyLjE2OC4yLjEwMCAvc3lzL2NsYXNzL25ldC9ib25kMS9ib25kaW5nL2FycF9pcF90YXJnZXQKK2VjaG8gMjAwMCA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvYXJwX2ludGVydmFsCitlY2hvICtldGgyID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9zbGF2ZXMKK2VjaG8gK2V0aDMgPiAvc3lzL2NsYXNzL25ldC9ib25kMS9ib25kaW5nL3NsYXZlcworCisKKzQuIFF1ZXJ5aW5nIEJvbmRpbmcgQ29uZmlndXJhdGlvbiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi01LjEgQm9uZGluZyBDb25maWd1cmF0aW9uCis0LjEgQm9uZGluZyBDb25maWd1cmF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlFYWNoIGJvbmRpbmcgZGV2aWNlIGhhcyBhIHJlYWQtb25seSBmaWxlIHJlc2lkaW5nIGluIHRoZQpAQCAtOTIzLDcgKzEwNTgsNyBAQAogCVRoZSBwcmVjaXNlIGZvcm1hdCBhbmQgY29udGVudHMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIHVwb24gdGhlCiBib25kaW5nIGNvbmZpZ3VyYXRpb24sIHN0YXRlLCBhbmQgdmVyc2lvbiBvZiB0aGUgYm9uZGluZyBkcml2ZXIuCiAKLTUuMiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24KKzQuMiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGluc3BlY3RlZCB1c2luZyB0aGUgaWZjb25maWcKQEAgLTk1OCw3ICsxMDkzLDcgQEAKICAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKICAgICAgICAgICBJbnRlcnJ1cHQ6OSBCYXNlIGFkZHJlc3M6MHgxNDAwCiAKLTYuIFN3aXRjaCBDb25maWd1cmF0aW9uCis1LiBTd2l0Y2ggQ29uZmlndXJhdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT0KIAogCUZvciB0aGlzIHNlY3Rpb24sICJzd2l0Y2giIHJlZmVycyB0byB3aGF0ZXZlciBzeXN0ZW0gdGhlCkBAIC05OTEsNyArMTEyNiw3IEBACiB3aXRoIGFub3RoZXIgRXRoZXJDaGFubmVsIGdyb3VwLgogCiAKLTcuIDgwMi4xcSBWTEFOIFN1cHBvcnQKKzYuIDgwMi4xcSBWTEFOIFN1cHBvcnQKID09PT09PT09PT09PT09PT09PT09PT0KIAogCUl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBWTEFOIGRldmljZXMgb3ZlciBhIGJvbmQgaW50ZXJmYWNlCkBAIC0xMDQyLDcgKzExNzcsNyBAQAogbW9kZSwgd2hpY2ggbWlnaHQgbm90IGJlIHdoYXQgeW91IHdhbnQuCiAKIAotOC4gTGluayBNb25pdG9yaW5nCis3LiBMaW5rIE1vbml0b3JpbmcKID09PT09PT09PT09PT09PT09PQogCiAJVGhlIGJvbmRpbmcgZHJpdmVyIGF0IHByZXNlbnQgc3VwcG9ydHMgdHdvIHNjaGVtZXMgZm9yCkBAIC0xMDUzLDcgKzExODgsNyBAQAogYm9uZGluZyBkcml2ZXIgaXRzZWxmLCBpdCBpcyBub3QgcG9zc2libGUgdG8gZW5hYmxlIGJvdGggQVJQIGFuZCBNSUkKIG1vbml0b3Jpbmcgc2ltdWx0YW5lb3VzbHkuCiAKLTguMSBBUlAgTW9uaXRvciBPcGVyYXRpb24KKzcuMSBBUlAgTW9uaXRvciBPcGVyYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoZSBBUlAgbW9uaXRvciBvcGVyYXRlcyBhcyBpdHMgbmFtZSBzdWdnZXN0czogaXQgc2VuZHMgQVJQCkBAIC0xMDcxLDcgKzEyMDYsNyBAQAogc2hvd3MgdGhlIEFSUCByZXF1ZXN0cyBhbmQgcmVwbGllcyBvbiB0aGUgbmV0d29yaywgdGhlbiBpdCBtYXkgYmUgdGhhdAogeW91ciBkZXZpY2UgZHJpdmVyIGlzIG5vdCB1cGRhdGluZyBsYXN0X3J4IGFuZCB0cmFuc19zdGFydC4KIAotOC4yIENvbmZpZ3VyaW5nIE11bHRpcGxlIEFSUCBUYXJnZXRzCis3LjIgQ29uZmlndXJpbmcgTXVsdGlwbGUgQVJQIFRhcmdldHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJV2hpbGUgQVJQIG1vbml0b3JpbmcgY2FuIGJlIGRvbmUgd2l0aCBqdXN0IG9uZSB0YXJnZXQsIGl0IGNhbgpAQCAtMTA5NCw3ICsxMjI5LDcgQEAKIG9wdGlvbnMgYm9uZDAgYXJwX2ludGVydmFsPTYwIGFycF9pcF90YXJnZXQ9MTkyLjE2OC4wLjEwMAogCiAKLTguMyBNSUkgTW9uaXRvciBPcGVyYXRpb24KKzcuMyBNSUkgTW9uaXRvciBPcGVyYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoZSBNSUkgbW9uaXRvciBtb25pdG9ycyBvbmx5IHRoZSBjYXJyaWVyIHN0YXRlIG9mIHRoZSBsb2NhbApAQCAtMTEyMCwxNCArMTI1NSwxNCBAQAogYW5kIGV0aHRvb2wgcmVxdWVzdHMpLCB0aGVuIHRoZSBNSUkgbW9uaXRvciB3aWxsIGFzc3VtZSB0aGUgbGluayBpcwogdXAuCiAKLTkuIFBvdGVudGlhbCBTb3VyY2VzIG9mIFRyb3VibGUKKzguIFBvdGVudGlhbCBTb3VyY2VzIG9mIFRyb3VibGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotOS4xIEFkdmVudHVyZXMgaW4gUm91dGluZworOC4xIEFkdmVudHVyZXMgaW4gUm91dGluZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJV2hlbiBib25kaW5nIGlzIGNvbmZpZ3VyZWQsIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBzbGF2ZQotZGV2aWNlcyBub3QgaGF2ZSByb3V0ZXMgdGhhdCBzdXBlcmNlZGUgcm91dGVzIG9mIHRoZSBtYXN0ZXIgKG9yLAorZGV2aWNlcyBub3QgaGF2ZSByb3V0ZXMgdGhhdCBzdXBlcnNlZGUgcm91dGVzIG9mIHRoZSBtYXN0ZXIgKG9yLAogZ2VuZXJhbGx5LCBub3QgaGF2ZSByb3V0ZXMgYXQgYWxsKS4gIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoZSBib25kaW5nCiBkZXZpY2UgYm9uZDAgaGFzIHR3byBzbGF2ZXMsIGV0aDAgYW5kIGV0aDEsIGFuZCB0aGUgcm91dGluZyB0YWJsZSBpcwogYXMgZm9sbG93czoKQEAgLTExNTQsMTEgKzEyODksMTEgQEAKIAogCVRoZSBzb2x1dGlvbiBoZXJlIGlzIHNpbXBseSB0byBpbnN1cmUgdGhhdCBzbGF2ZXMgZG8gbm90IGhhdmUKIHJvdXRlcyBvZiB0aGVpciBvd24sIGFuZCBpZiBmb3Igc29tZSByZWFzb24gdGhleSBtdXN0LCB0aG9zZSByb3V0ZXMgZG8KLW5vdCBzdXBlcmNlZGUgcm91dGVzIG9mIHRoZWlyIG1hc3Rlci4gIFRoaXMgc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUKK25vdCBzdXBlcnNlZGUgcm91dGVzIG9mIHRoZWlyIG1hc3Rlci4gIFRoaXMgc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUKIGNhc2UsIGJ1dCB1bnVzdWFsIGNvbmZpZ3VyYXRpb25zIG9yIGVycmFudCBtYW51YWwgb3IgYXV0b21hdGljIHN0YXRpYwogcm91dGUgYWRkaXRpb25zIG1heSBjYXVzZSB0cm91YmxlLgogCi05LjIgRXRoZXJuZXQgRGV2aWNlIFJlbmFtaW5nCis4LjIgRXRoZXJuZXQgRGV2aWNlIFJlbmFtaW5nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlPbiBzeXN0ZW1zIHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBkbyBub3QKQEAgLTEyMDcsNyArMTM0Miw3IEBACiBwbGFjZS4gIEZ1bGwgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW9kcHJvYmUuY29uZgogYW5kIG1vZHByb2JlIG1hbnVhbCBwYWdlcy4KIAotOS4zLiBQYWluZnVsbHkgU2xvdyBPciBObyBGYWlsZWQgTGluayBEZXRlY3Rpb24gQnkgTWlpbW9uCis4LjMuIFBhaW5mdWxseSBTbG93IE9yIE5vIEZhaWxlZCBMaW5rIERldGVjdGlvbiBCeSBNaWltb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJQnkgZGVmYXVsdCwgYm9uZGluZyBlbmFibGVzIHRoZSB1c2VfY2FycmllciBvcHRpb24sIHdoaWNoCkBAIC0xMjM1LDcgKzEzNzAsNyBAQAogYmV5b25kIG90aGVyIHBvcnRzIG9mIGEgc3dpdGNoLCBvciBpZiBhIHN3aXRjaCBpcyByZWZ1c2luZyB0byBwYXNzCiB0cmFmZmljIHdoaWxlIHN0aWxsIG1haW50YWluaW5nIGNhcnJpZXIgb24uCiAKLTEwLiBTTk1QIGFnZW50cworOS4gU05NUCBhZ2VudHMKID09PT09PT09PT09PT09PQogCiAJSWYgcnVubmluZyBTTk1QIGFnZW50cywgdGhlIGJvbmRpbmcgZHJpdmVyIHNob3VsZCBiZSBsb2FkZWQKQEAgLTEyODEsNyArMTQxNiw3IEBACiBhbmQgU05NUCBmdW5jdGlvbnMgc3VjaCBhcyBJbnRlcmZhY2VfU2Nhbl9OZXh0IHdpbGwgcmVwb3J0IHRoYXQKIGFzc29jaWF0aW9uLgogCi0xMS4gUHJvbWlzY3VvdXMgbW9kZQorMTAuIFByb21pc2N1b3VzIG1vZGUKID09PT09PT09PT09PT09PT09PT09CiAKIAlXaGVuIHJ1bm5pbmcgbmV0d29yayBtb25pdG9yaW5nIHRvb2xzLCBlLmcuLCB0Y3BkdW1wLCBpdCBpcwpAQCAtMTMwOCw3ICsxNDQzLDcgQEAKIHRoZSBhY3RpdmUgc2xhdmUgY2hhbmdlcyAoZS5nLiwgZHVlIHRvIGEgbGluayBmYWlsdXJlKSwgdGhlCiBwcm9taXNjdW91cyBzZXR0aW5nIHdpbGwgYmUgcHJvcGFnYXRlZCB0byB0aGUgbmV3IGFjdGl2ZSBzbGF2ZS4KIAotMTIuIENvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5CisxMS4gQ29uZmlndXJpbmcgQm9uZGluZyBmb3IgSGlnaCBBdmFpbGFiaWxpdHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAJSGlnaCBBdmFpbGFiaWxpdHkgcmVmZXJzIHRvIGNvbmZpZ3VyYXRpb25zIHRoYXQgcHJvdmlkZQpAQCAtMTMxOCw3ICsxNDUzLDcgQEAKIChpLmUuLCB0aGUgbmV0d29yayBhbHdheXMgd29ya3MpLCBldmVuIHRob3VnaCBvdGhlciBjb25maWd1cmF0aW9ucwogY291bGQgcHJvdmlkZSBoaWdoZXIgdGhyb3VnaHB1dC4KIAotMTIuMSBIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzExLjEgSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJSWYgdHdvIGhvc3RzIChvciBhIGhvc3QgYW5kIGEgc2luZ2xlIHN3aXRjaCkgYXJlIGRpcmVjdGx5CkBAIC0xMzMyLDcgKzE0NjcsNyBAQAogCVNlZSBTZWN0aW9uIDEzLCAiQ29uZmlndXJpbmcgQm9uZGluZyBmb3IgTWF4aW11bSBUaHJvdWdocHV0IgogZm9yIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIGJvbmRpbmcgd2l0aCBvbmUgcGVlciBkZXZpY2UuCiAKLTEyLjIgSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzExLjIgSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVdpdGggbXVsdGlwbGUgc3dpdGNoZXMsIHRoZSBjb25maWd1cmF0aW9uIG9mIGJvbmRpbmcgYW5kIHRoZQpAQCAtMTM1OSw3ICsxNDk0LDcgQEAKIHRoZSBvdXRzaWRlIHdvcmxkICgicG9ydDMiIG9uIGVhY2ggc3dpdGNoKS4gIFRoZXJlIGlzIG5vIHRlY2huaWNhbAogcmVhc29uIHRoYXQgdGhpcyBjb3VsZCBub3QgYmUgZXh0ZW5kZWQgdG8gYSB0aGlyZCBzd2l0Y2guCiAKLTEyLjIuMSBIQSBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzExLjIuMSBIQSBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCUluIGEgdG9wb2xvZ3kgc3VjaCBhcyB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIGFjdGl2ZS1iYWNrdXAgYW5kCkBAIC0xMzgxLDcgKzE1MTYsNyBAQAogCW5lY2Vzc2FyeSBmb3Igc29tZSBzcGVjaWZpYyBvbmUtd2F5IHRyYWZmaWMgdG8gcmVhY2ggYm90aAogCWluZGVwZW5kZW50IG5ldHdvcmtzLCB0aGVuIHRoZSBicm9hZGNhc3QgbW9kZSBtYXkgYmUgc3VpdGFibGUuCiAKLTEyLjIuMiBIQSBMaW5rIE1vbml0b3JpbmcgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzExLjIuMiBIQSBMaW5rIE1vbml0b3JpbmcgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoZSBjaG9pY2Ugb2YgbGluayBtb25pdG9yaW5nIHVsdGltYXRlbHkgZGVwZW5kcyB1cG9uIHlvdXIKQEAgLTE0MDIsMTAgKzE1MzcsMTAgQEAKIHRhcmdldCB0byBxdWVyeS4KIAogCi0xMy4gQ29uZmlndXJpbmcgQm9uZGluZyBmb3IgTWF4aW11bSBUaHJvdWdocHV0CisxMi4gQ29uZmlndXJpbmcgQm9uZGluZyBmb3IgTWF4aW11bSBUaHJvdWdocHV0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLTEzLjEgTWF4aW1pemluZyBUaHJvdWdocHV0IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMSBNYXhpbWl6aW5nIFRocm91Z2hwdXQgaW4gYSBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCUluIGEgc2luZ2xlIHN3aXRjaCBjb25maWd1cmF0aW9uLCB0aGUgYmVzdCBtZXRob2QgdG8gbWF4aW1pemUKQEAgLTE0NzYsNyArMTYxMSw3IEBACiBtb2RlIGlzIGRlc2NyaWJlZCBiZWxvdy4KIAogCi0xMy4xLjEgTVQgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMS4xIE1UIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGlzIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGVhc2llc3QgdG8gc2V0IHVwIGFuZCB0byB1bmRlcnN0YW5kLApAQCAtMTYwNyw3ICsxNzQyLDcgQEAKIAlkZXZpY2UgZHJpdmVyIG11c3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGUgaGFyZHdhcmUgYWRkcmVzcyB3aGlsZQogCXRoZSBkZXZpY2UgaXMgb3Blbi4KIAotMTMuMS4yIE1UIExpbmsgTW9uaXRvcmluZyBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMS4yIE1UIExpbmsgTW9uaXRvcmluZyBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJVGhlIGNob2ljZSBvZiBsaW5rIG1vbml0b3JpbmcgbWF5IGxhcmdlbHkgZGVwZW5kIHVwb24gd2hpY2gKQEAgLTE2MTYsNyArMTc1MSw3IEBACiB0aGUgTUlJIG1vbml0b3IgKHdoaWNoIGRvZXMgbm90IHByb3ZpZGUgYXMgaGlnaCBhIGxldmVsIG9mIGVuZCB0byBlbmQKIGFzc3VyYW5jZSBhcyB0aGUgQVJQIG1vbml0b3IpLgogCi0xMy4yIE1heGltdW0gVGhyb3VnaHB1dCBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTIuMiBNYXhpbXVtIFRocm91Z2hwdXQgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlNdWx0aXBsZSBzd2l0Y2hlcyBtYXkgYmUgdXRpbGl6ZWQgdG8gb3B0aW1pemUgZm9yIHRocm91Z2hwdXQKQEAgLTE2NTEsNyArMTc4Niw3IEBACiBjYW4gYmUgZXF1aXBwZWQgd2l0aCBhbiBhZGRpdGlvbmFsIG5ldHdvcmsgZGV2aWNlIGNvbm5lY3RlZCB0byBhbgogZXh0ZXJuYWwgbmV0d29yazsgdGhpcyBob3N0IHRoZW4gYWRkaXRpb25hbGx5IGFjdHMgYXMgYSBnYXRld2F5LgogCi0xMy4yLjEgTVQgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4yLjEgTVQgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlJbiBhY3R1YWwgcHJhY3RpY2UsIHRoZSBib25kaW5nIG1vZGUgdHlwaWNhbGx5IGVtcGxveWVkIGluCkBAIC0xNjY0LDcgKzE3OTksNyBAQAogbW9kZSBhbGxvd3MgaW5kaXZpZHVhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIHR3byBob3N0cyB0byBlZmZlY3RpdmVseQogdXRpbGl6ZSBncmVhdGVyIHRoYW4gb25lIGludGVyZmFjZSdzIGJhbmR3aWR0aC4KIAotMTMuMi4yIE1UIExpbmsgTW9uaXRvcmluZyBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4yLjIgTVQgTGluayBNb25pdG9yaW5nIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJQWdhaW4sIGluIGFjdHVhbCBwcmFjdGljZSwgdGhlIE1JSSBtb25pdG9yIGlzIG1vc3Qgb2Z0ZW4gdXNlZApAQCAtMTY3NCwxMCArMTgwOSwxMCBAQAogbmVlZGVkIGFzIHRoZSBudW1iZXIgb2Ygc3lzdGVtcyBpbnZvbHZlZCBncm93cyAocmVtZW1iZXIgdGhhdCBlYWNoCiBob3N0IGluIHRoZSBuZXR3b3JrIGlzIGNvbmZpZ3VyZWQgd2l0aCBib25kaW5nKS4KIAotMTQuIFN3aXRjaCBCZWhhdmlvciBJc3N1ZXMKKzEzLiBTd2l0Y2ggQmVoYXZpb3IgSXNzdWVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0xNC4xIExpbmsgRXN0YWJsaXNobWVudCBhbmQgRmFpbG92ZXIgRGVsYXlzCisxMy4xIExpbmsgRXN0YWJsaXNobWVudCBhbmQgRmFpbG92ZXIgRGVsYXlzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlTb21lIHN3aXRjaGVzIGV4aGliaXQgdW5kZXNpcmFibGUgYmVoYXZpb3Igd2l0aCByZWdhcmQgdG8gdGhlCkBAIC0xNzEyLDcgKzE4NDcsNyBAQAogdG8gbm90IGFjdGl2YXRlIGEgYmFja3VwIGludGVyZmFjZSBpbW1lZGlhdGVseSBhZnRlciBhIGxpbmsgZ29lcyBkb3duLgogRmFpbG92ZXIgbWF5IGJlIGRlbGF5ZWQgdmlhIHRoZSBkb3duZGVsYXkgYm9uZGluZyBtb2R1bGUgb3B0aW9uLgogCi0xNC4yIER1cGxpY2F0ZWQgSW5jb21pbmcgUGFja2V0cworMTMuMiBEdXBsaWNhdGVkIEluY29taW5nIFBhY2tldHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlJdCBpcyBub3QgdW5jb21tb24gdG8gb2JzZXJ2ZSBhIHNob3J0IGJ1cnN0IG9mIGR1cGxpY2F0ZWQKQEAgLTE3NTEsMTQgKzE4ODYsMTQgQEAKIG1vc3QgQ2lzY28gc3dpdGNoZXMsIHRoZSBwcml2aWxlZ2VkIGNvbW1hbmQgImNsZWFyIG1hYyBhZGRyZXNzLXRhYmxlCiBkeW5hbWljIiB3aWxsIGFjY29tcGxpc2ggdGhpcykuCiAKLTE1LiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucworMTQuIEhhcmR3YXJlIFNwZWNpZmljIENvbnNpZGVyYXRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCVRoaXMgc2VjdGlvbiBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBjb25maWd1cmluZwogYm9uZGluZyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybXMsIG9yIGZvciBpbnRlcmZhY2luZyBib25kaW5nCiB3aXRoIHBhcnRpY3VsYXIgc3dpdGNoZXMgb3Igb3RoZXIgZGV2aWNlcy4KIAotMTUuMSBJQk0gQmxhZGVDZW50ZXIKKzE0LjEgSUJNIEJsYWRlQ2VudGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJVGhpcyBhcHBsaWVzIHRvIHRoZSBKUzIwIGFuZCBzaW1pbGFyIHN5c3RlbXMuCkBAIC0xODYxLDcgKzE5OTYsNyBAQAogYXZvaWQgZmFpbC1vdmVyIGRlbGF5IGlzc3VlcyB3aGVuIHVzaW5nIGJvbmRpbmcuCiAKIAkKLTE2LiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworMTUuIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogMS4gIElzIGl0IFNNUCBzYWZlPwpAQCAtMTkyNSw3ICsyMDYwLDcgQEAKIHN1cHBvcnQgc3BlY2lmaWMgZmVhdHVyZXMgKGRlc2NyaWJlZCBpbiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiB1bmRlcgogbW9kdWxlIHBhcmFtZXRlcnMsIGFib3ZlKS4KIAotCUluIDgwMi4zYWQgbW9kZSwgaXQgd29ya3Mgd2l0aCB3aXRoIHN5c3RlbXMgdGhhdCBzdXBwb3J0IElFRUUKKwlJbiA4MDIuM2FkIG1vZGUsIGl0IHdvcmtzIHdpdGggc3lzdGVtcyB0aGF0IHN1cHBvcnQgSUVFRQogODAyLjNhZCBEeW5hbWljIExpbmsgQWdncmVnYXRpb24uICBNb3N0IG1hbmFnZWQgYW5kIG1hbnkgdW5tYW5hZ2VkCiBzd2l0Y2hlcyBjdXJyZW50bHkgYXZhaWxhYmxlIHN1cHBvcnQgODAyLjNhZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCBmMTIwMDdiLi5kNDYzMzhhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtMzYyLDYgKzM2MiwxMyBAQAogCW5vdCByZWNlaXZlIGEgd2luZG93IHNjYWxpbmcgb3B0aW9uIGZyb20gdGhlbS4KIAlEZWZhdWx0OiAwCiAKK3RjcF9zbG93X3N0YXJ0X2FmdGVyX2lkbGUgLSBCT09MRUFOCisJSWYgc2V0LCBwcm92aWRlIFJGQzI4NjEgYmVoYXZpb3IgYW5kIHRpbWUgb3V0IHRoZSBjb25nZXN0aW9uCisJd2luZG93IGFmdGVyIGFuIGlkbGUgcGVyaW9kLiAgQW4gaWRsZSBwZXJpb2QgaXMgZGVmaW5lZCBhdAorCXRoZSBjdXJyZW50IFJUTy4gIElmIHVuc2V0LCB0aGUgY29uZ2VzdGlvbiB3aW5kb3cgd2lsbCBub3QKKwliZSB0aW1lZCBvdXQgYWZ0ZXIgYW4gaWRsZSBwZXJpb2QuCisJRGVmYXVsdDogMQorCiBJUCBWYXJpYWJsZXM6CiAKIGlwX2xvY2FsX3BvcnRfcmFuZ2UgLSAyIElOVEVHRVJTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQKaW5kZXggM2MwYTViYS4uODQ3Y2VkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dApAQCAtNDIsOSArNDIsOSBAQAogCUNvbnRleHQ6IG5vbWluYWxseSBwcm9jZXNzLCBidXQgZG9uJ3Qgc2xlZXAgaW5zaWRlIGFuIHJ3bG9jawogCiBkZXYtPmhhcmRfc3RhcnRfeG1pdDoKLQlTeW5jaHJvbml6YXRpb246IGRldi0+eG1pdF9sb2NrIHNwaW5sb2NrLgorCVN5bmNocm9uaXphdGlvbjogbmV0aWZfdHhfbG9jayBzcGlubG9jay4KIAlXaGVuIHRoZSBkcml2ZXIgc2V0cyBORVRJRl9GX0xMVFggaW4gZGV2LT5mZWF0dXJlcyB0aGlzIHdpbGwgYmUKLQljYWxsZWQgd2l0aG91dCBob2xkaW5nIHhtaXRfbG9jay4gSW4gdGhpcyBjYXNlIHRoZSBkcml2ZXIgCisJY2FsbGVkIHdpdGhvdXQgaG9sZGluZyBuZXRpZl90eF9sb2NrLiBJbiB0aGlzIGNhc2UgdGhlIGRyaXZlcgogCWhhcyB0byBsb2NrIGJ5IGl0c2VsZiB3aGVuIG5lZWRlZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgdHJ5IGxvY2sKIAlmb3IgdGhpcyBhbmQgcmV0dXJuIC0xIHdoZW4gdGhlIHNwaW4gbG9jayBmYWlscy4gCiAJVGhlIGxvY2tpbmcgdGhlcmUgc2hvdWxkIGFsc28gcHJvcGVybHkgcHJvdGVjdCBhZ2FpbnN0IApAQCAtNjIsMTIgKzYyLDEyIEBACiAJICBPbmx5IHZhbGlkIHdoZW4gTkVUSUZfRl9MTFRYIGlzIHNldC4KIAogZGV2LT50eF90aW1lb3V0OgotCVN5bmNocm9uaXphdGlvbjogZGV2LT54bWl0X2xvY2sgc3BpbmxvY2suCisJU3luY2hyb25pemF0aW9uOiBuZXRpZl90eF9sb2NrIHNwaW5sb2NrLgogCUNvbnRleHQ6IEJIcyBkaXNhYmxlZAogCU5vdGVzOiBuZXRpZl9xdWV1ZV9zdG9wcGVkKCkgaXMgZ3VhcmFudGVlZCB0cnVlCiAKIGRldi0+c2V0X211bHRpY2FzdF9saXN0OgotCVN5bmNocm9uaXphdGlvbjogZGV2LT54bWl0X2xvY2sgc3BpbmxvY2suCisJU3luY2hyb25pemF0aW9uOiBuZXRpZl90eF9sb2NrIHNwaW5sb2NrLgogCUNvbnRleHQ6IEJIcyBkaXNhYmxlZAogCiBkZXYtPnBvbGw6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGMzYzU4NDIuLjE0MjFmNzQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNDI1LDYgKzE0MjUsOCBAQAogTToJamVzc2UuYnJhbmRlYnVyZ0BpbnRlbC5jb20KIFA6CUplZmYgS2lyc2hlcgogTToJamVmZnJleS50LmtpcnNoZXJAaW50ZWwuY29tCitQOglBdWtlIEtvaworTToJYXVrZS1qYW4uaC5rb2tAaW50ZWwuY29tCiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwLwogUzoJU3VwcG9ydGVkCiAKQEAgLTE0MzcsNiArMTQzOSw4IEBACiBNOglqZXNzZS5icmFuZGVidXJnQGludGVsLmNvbQogUDoJSmVmZiBLaXJzaGVyCiBNOglqZWZmcmV5LnQua2lyc2hlckBpbnRlbC5jb20KK1A6CUF1a2UgS29rCitNOglhdWtlLWphbi5oLmtva0BpbnRlbC5jb20KIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAvCiBTOglTdXBwb3J0ZWQKIApAQCAtMTQ0OSw2ICsxNDUzLDggQEAKIE06CWpvaG4ucm9uY2lha0BpbnRlbC5jb20KIFA6CUplc3NlIEJyYW5kZWJ1cmcKIE06CWplc3NlLmJyYW5kZWJ1cmdAaW50ZWwuY29tCitQOglBdWtlIEtvaworTToJYXVrZS1qYW4uaC5rb2tAaW50ZWwuY29tCiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwLwogUzoJU3VwcG9ydGVkCiAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYTNhN2JhYS4uMTcwMGQzZiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMTcKLUVYVFJBVkVSU0lPTiA9LXJjNgorRVhUUkFWRVJTSU9OID0KIE5BTUU9Q3JhemVkIFNub3ctV2Vhc2VsCiAKICMgKkRPQ1VNRU5UQVRJT04qCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggODI5MGI2OS4uMjEzYzc4NSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCisrKyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCi0JZGVmYXVsdCB5IGlmICFBTFBIQV9FVjYgJiYgIUFMUEhBX0VWNjcKKwlkZWZhdWx0IHkgaWYgIUFMUEhBX0VWNjcKIAogY29uZmlnIEFMUEhBX0FWQU5USQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMKaW5kZXggZWViOGE2ZC4uYTVkZTVmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogaW14X2dwaW9fYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOwotCUlTUihJUlFfVE9fUkVHKGlycSkpIHw9IDEgPDwgKChpcnEgLSBJUlFfR1BJT0EoMCkpICUgMzIpOworCUlTUihJUlFfVE9fUkVHKGlycSkpID0gMSA8PCAoKGlycSAtIElSUV9HUElPQSgwKSkgJSAzMik7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCBhMDcyNGYyLi45ZjU1ZjVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTIzMiw4ICsyMzIsNiBAQAogCWZvciAoaSA9IElSUV9QSUNfU1RBUlQ7IGkgPD0gSVJRX1BJQ19FTkQ7IGkrKykgewogCQlpZiAoaSA9PSAxMSkKIAkJCWkgPSAyMjsKLQkJaWYgKGkgPT0gSVJRX0NQX0NQUExESU5UKQotCQkJaSsrOwogCQlpZiAoaSA9PSAyOSkKIAkJCWJyZWFrOwogCQlzZXRfaXJxX2NoaXAoaSwgJnBpY19jaGlwKTsKQEAgLTI1OSw4ICsyNTcsNyBAQAogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKIAl9CiAKLQlzZXRfaXJxX2hhbmRsZXIoSVJRX0NQX0NQUExESU5ULCBzaWNfaGFuZGxlX2lycSk7Ci0JcGljX3VubWFza19pcnEoSVJRX0NQX0NQUExESU5UKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfQ1BfQ1BQTERJTlQsIHNpY19oYW5kbGVfaXJxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDE5YjM3MmQuLjQ0YmNiODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMzcxLDYgKzM3MSw3IEBACiBzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBzcGl0el9vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CiAJLnBvcnRfbW9kZQk9IFBNTV9OUFNfTU9ERSwKIAkuaW5pdAkJPSBzcGl0el9vaGNpX2luaXQsCisJLnBvd2VyX2J1ZGdldAk9IDE1MCwKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKaW5kZXggOWUwMmJjMy4uYWY2ZDI3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCkBAIC01OSw2ICs1OSwxNCBAQAogCQlpZiAoaXJyICYgKElSUl9FVEhFUk5FVCB8IElSUl9VU0FSKSkgewogCQkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwogCisJCQkvKgorCQkJICogQWNrIHRoZSBpbnRlcnJ1cHQgbm93IHRvIHByZXZlbnQgcmUtZW50ZXJpbmcKKwkJCSAqIHRoaXMgbmVwb25zZXQgaGFuZGxlci4gIEFnYWluLCB0aGlzIGlzIHNhZmUKKwkJCSAqIHNpbmNlIHdlJ2xsIGNoZWNrIHRoZSBJUlIgcmVnaXN0ZXIgcHJpb3IgdG8KKwkJCSAqIGxlYXZpbmcuCisJCQkgKi8KKwkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCiAJCQlpZiAoaXJyICYgSVJSX0VUSEVSTkVUKSB7CiAJCQkJZCA9IGlycV9kZXNjICsgSVJRX05FUE9OU0VUX1NNQzkxOTY7CiAJCQkJZGVzY19oYW5kbGVfaXJxKElSUV9ORVBPTlNFVF9TTUM5MTk2LCBkLCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCA3OTk2OTdkLi5jZWJkNDhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0xMTIsMTAgKzExMiw5IEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQl2aWNfaW5pdChWQV9WSUNfQkFTRSwgSVJRX1ZJQ19TVEFSVCwgfigxIDw8IDMxKSk7CisJdmljX2luaXQoVkFfVklDX0JBU0UsIElSUV9WSUNfU1RBUlQsIH4wKTsKIAotCXNldF9pcnFfaGFuZGxlcihJUlFfVklDU09VUkNFMzEsIHNpY19oYW5kbGVfaXJxKTsKLQllbmFibGVfaXJxKElSUV9WSUNTT1VSQ0UzMSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1ZJQ1NPVVJDRTMxLCBzaWNfaGFuZGxlX2lycSk7CiAKIAkvKiBEbyBzZWNvbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KIAl3cml0ZWwofjAsIFZBX1NJQ19CQVNFICsgU0lDX0lSUV9FTkFCTEVfQ0xFQVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggMzg1MmQwYS4uMWE3YmRjZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIHsKIAl1MTYJCQlwb3J0ID0gMDsKIAl1OAkJCWJpdF93aWR0aCA9IDA7Ci0JaW50CQkJcmV0ID0gMDsKKwlpbnQJCQlyZXQ7CiAJdTMyCQkJdmFsdWUgPSAwOwogCWludAkJCWkgPSAwOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICAgIGNwdWZyZXFfZnJlcXM7CkBAIC0xOTUsNyArMTk1LDYgQEAKIAkJCXVkZWxheSgxMCk7CiAJCX0KIAl9IGVsc2UgewotCQlpID0gMDsKIAkJdmFsdWUgPSAodTMyKSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW3N0YXRlXS5zdGF0dXM7CiAJfQogCkBAIC00NDQsMTQgKzQ0MywxNSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBhY3BpX2NwdWZyZXFfZHJpdmVyID0gewotCS52ZXJpZnkgCT0gYWNwaV9jcHVmcmVxX3ZlcmlmeSwKLQkudGFyZ2V0IAk9IGFjcGlfY3B1ZnJlcV90YXJnZXQsCi0JLmluaXQJCT0gYWNwaV9jcHVmcmVxX2NwdV9pbml0LAotCS5leGl0CQk9IGFjcGlfY3B1ZnJlcV9jcHVfZXhpdCwKLQkucmVzdW1lCQk9IGFjcGlfY3B1ZnJlcV9yZXN1bWUsCi0JLm5hbWUJCT0gImFjcGktY3B1ZnJlcSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5hdHRyICAgICAgICAgICA9IGFjcGlfY3B1ZnJlcV9hdHRyLAorCS52ZXJpZnkJPSBhY3BpX2NwdWZyZXFfdmVyaWZ5LAorCS50YXJnZXQJPSBhY3BpX2NwdWZyZXFfdGFyZ2V0LAorCS5pbml0CT0gYWNwaV9jcHVmcmVxX2NwdV9pbml0LAorCS5leGl0CT0gYWNwaV9jcHVmcmVxX2NwdV9leGl0LAorCS5yZXN1bWUJPSBhY3BpX2NwdWZyZXFfcmVzdW1lLAorCS5uYW1lCT0gImFjcGktY3B1ZnJlcSIsCisJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLmF0dHIJPSBhY3BpX2NwdWZyZXFfYXR0ciwKKwkuZmxhZ3MJPSBDUFVGUkVRX1NUSUNLWSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKaW5kZXggZjI3NWUwZC4uMGQ0OWQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIChDKSAyMDA0ICBTZWJhc3RpYW4gV2l0dCA8c2Uud2l0dEBnbXgubmV0PgorICogKEMpIDIwMDQtMjAwNiAgU2ViYXN0aWFuIFdpdHQgPHNlLndpdHRAZ214Lm5ldD4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgogICogIEJhc2VkIHVwb24gcmV2ZXJzZSBlbmdpbmVlcmVkIGluZm9ybWF0aW9uCkBAIC05MCw3ICs5MCw3IEBACiAKIAkvKiBUcnkgdG8gY2FsY3VsYXRlIG11bHRpcGxpZXIgYW5kIGRpdmlkZXIgdXAgdG8gNCB0aW1lcyAqLwogCXdoaWxlICgoKG11bCA9PSAwKSB8fCAoZGl2ID09IDApKSAmJiAodHJpZWQgPD0gMykpIHsKLQkJZm9yICh4ZGl2ID0gMTsgeGRpdiA8PSAweDgwOyB4ZGl2KyspCisJCWZvciAoeGRpdiA9IDI7IHhkaXYgPD0gMHg4MDsgeGRpdisrKQogCQkJZm9yICh4bXVsID0gMTsgeG11bCA8PSAweGZlOyB4bXVsKyspCiAJCQkJaWYgKG5mb3JjZTJfY2FsY19mc2IoTkZPUkNFMl9QTEwoeG11bCwgeGRpdikpID09CiAJCQkJICAgIGZzYiArIHRyaWVkKSB7CkBAIC0xMTcsOCArMTE3LDcgQEAKIAlpbnQgdGVtcDsKIAogCS8qIFNldCB0aGUgcGxsIGFkZHIuIHRvIDB4MDAgKi8KLQl0ZW1wID0gMHgwMDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMQURSLCB0ZW1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMQURSLCAwKTsKIAogCS8qIE5vdyB3cml0ZSB0aGUgdmFsdWUgaW4gYWxsIDY0IHJlZ2lzdGVycyAqLwogCWZvciAodGVtcCA9IDA7IHRlbXAgPD0gMHgzZjsgdGVtcCsrKQpAQCAtMjY2LDcgKzI2NSw3IEBACiAJaWYgKGZyZXFzLm9sZCA9PSBmcmVxcy5uZXcpCiAJCXJldHVybiAwOwogCi0JZHByaW50ayhLRVJOX0lORk8gImNwdWZyZXE6IE9sZCBDUFUgZnJlcXVlbmN5ICVkIGtIeiwgbmV3ICVkIGtIelxuIiwKKwlkcHJpbnRrKCJPbGQgQ1BVIGZyZXF1ZW5jeSAlZCBrSHosIG5ldyAlZCBrSHpcbiIsCiAJICAgICAgIGZyZXFzLm9sZCwgZnJlcXMubmV3KTsKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CkBAIC0yNzgsNyArMjc3LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBDaGFuZ2luZyBGU0IgdG8gJWQgZmFpbGVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZnNiKTsKIAllbHNlCi0JCWRwcmludGsoS0VSTl9JTkZPICJjcHVmcmVxOiBDaGFuZ2VkIEZTQiBzdWNjZXNzZnVsbHkgdG8gJWRcbiIsCisJCWRwcmludGsoIkNoYW5nZWQgRlNCIHN1Y2Nlc3NmdWxseSB0byAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZzYik7CiAKIAkvKiBFbmFibGUgSVJRcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IDhlZjM4NTQuLjE0NmY2MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTc3LDEzICs3NywxNyBAQAogCiBzdGF0aWMgY2hhciAqcHJpbnRfc3BlZWQoaW50IHNwZWVkKQogewotCWlmIChzcGVlZCA+IDEwMDApIHsKLQkJaWYgKHNwZWVkJTEwMDAgPT0gMCkKLQkJCXNwcmludGYgKHNwZWVkYnVmZmVyLCAiJWRHSHoiLCBzcGVlZC8xMDAwKTsKLQkJZWxzZQotCQkJc3ByaW50ZiAoc3BlZWRidWZmZXIsICIlZC4lZEdIeiIsIHNwZWVkLzEwMDAsIChzcGVlZCUxMDAwKS8xMDApOwotCX0gZWxzZQotCQlzcHJpbnRmIChzcGVlZGJ1ZmZlciwgIiVkTUh6Iiwgc3BlZWQpOworCWlmIChzcGVlZCA8IDEwMDApIHsKKwkJc25wcmludGYoc3BlZWRidWZmZXIsIHNpemVvZihzcGVlZGJ1ZmZlciksIiVkTUh6Iiwgc3BlZWQpOworCQlyZXR1cm4gc3BlZWRidWZmZXI7CisJfQorCisJaWYgKHNwZWVkJTEwMDAgPT0gMCkKKwkJc25wcmludGYoc3BlZWRidWZmZXIsIHNpemVvZihzcGVlZGJ1ZmZlciksCisJCQkiJWRHSHoiLCBzcGVlZC8xMDAwKTsKKwllbHNlCisJCXNucHJpbnRmKHNwZWVkYnVmZmVyLCBzaXplb2Yoc3BlZWRidWZmZXIpLAorCQkJIiVkLiVkR0h6Iiwgc3BlZWQvMTAwMCwgKHNwZWVkJTEwMDApLzEwMCk7CiAKIAlyZXR1cm4gc3BlZWRidWZmZXI7CiB9CkBAIC02NzUsNyArNjc5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGxvbmdoYXVsX2V4aXQodm9pZCkKIHsKLQlpbnQgaT0wOworCWludCBpOwogCiAJZm9yIChpPTA7IGkgPCBudW1zY2FsZXM7IGkrKykgewogCQlpZiAoY2xvY2tfcmF0aW9baV0gPT0gbWF4bXVsdCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwppbmRleCBlMzg2OGRlLi5iMjY4OTUxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwpAQCAtMjIzLDcgKzIyMyw2IEBACiAJCS8qIHNldCB0byAwIHRvIHRyeV9oaSBwZXJmX3BjdGcgKi8KIAkJbXNyX2xvICY9IDB4RkZGRkZGODA7CiAJCW1zcl9oaSAmPSAweEZGRkZGRjgwOwotCQltc3JfbG8gfD0gMDsKIAkJbXNyX2hpIHw9IHRyeV9oaTsKIAkJd3Jtc3IoTVNSX1RNVEFfTE9OR1JVTl9DVFJMLCBtc3JfbG8sIG1zcl9oaSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwppbmRleCAyYmY0MjM3Li42OTRkNDc5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCkBAIC00NTIsMjMgKzQ1MiwyMyBAQAogCiAJCQlwc3QgPSAoc3RydWN0IHBzdF9zICopIHA7CiAKLQkJCWZvciAoaSA9IDAgOyBpIDxwc2ItPm51bXBzdDsgaSsrKSB7CisJCQlmb3IgKGo9MDsgajxwc2ItPm51bXBzdDsgaisrKSB7CiAJCQkJcHN0ID0gKHN0cnVjdCBwc3RfcyAqKSBwOwogCQkJCW51bWJlcl9zY2FsZXMgPSBwc3QtPm51bXBzdGF0ZXM7CiAKIAkJCQlpZiAoKGV0dXBsZSA9PSBwc3QtPmNwdWlkKSAmJiBjaGVja19mc2IocHN0LT5mc2JzcGVlZCkgJiYKIAkJCQkgICAgKG1heGZpZD09cHN0LT5tYXhmaWQpICYmIChzdGFydHZpZD09cHN0LT5zdGFydHZpZCkpCiAJCQkJewotCQkJCQlkcHJpbnRrICgiUFNUOiVkIChAJXApXG4iLCBpLCBwc3QpOworCQkJCQlkcHJpbnRrICgiUFNUOiVkIChAJXApXG4iLCBqLCBwc3QpOwogCQkJCQlkcHJpbnRrICgiIGNwdWlkOiAweCV4ICBmc2I6ICVkICBtYXhGSUQ6IDB4JXggIHN0YXJ0dmlkOiAweCV4XG4iLAogCQkJCQkJIHBzdC0+Y3B1aWQsIHBzdC0+ZnNic3BlZWQsIHBzdC0+bWF4ZmlkLCBwc3QtPnN0YXJ0dmlkKTsKIAogCQkJCQlyZXQgPSBnZXRfcmFuZ2VzICgoY2hhciAqKSBwc3QgKyBzaXplb2YgKHN0cnVjdCBwc3RfcykpOwogCQkJCQlyZXR1cm4gcmV0OwotCiAJCQkJfSBlbHNlIHsKKwkJCQkJdW5zaWduZWQgaW50IGs7CiAJCQkJCXAgPSAoY2hhciAqKSBwc3QgKyBzaXplb2YgKHN0cnVjdCBwc3Rfcyk7Ci0JCQkJCWZvciAoaj0wIDsgaiA8IG51bWJlcl9zY2FsZXM7IGorKykKKwkJCQkJZm9yIChrPTA7IGs8bnVtYmVyX3NjYWxlczsgaysrKQogCQkJCQkJcCs9MjsKIAkJCQl9CiAJCQl9CkBAIC01ODEsMTAgKzU4MSw3IEBACiAKIAlyZG1zcmwgKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CiAKLQkvKiByZWNhbGlicmF0ZSBjcHVfa2h6ICovCi0JcmVzdWx0ID0gcmVjYWxpYnJhdGVfY3B1X2toeigpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7CisJcmVjYWxpYnJhdGVfY3B1X2toeigpOwogCiAJZnNiID0gKDEwICogY3B1X2toeikgLyBmaWRfY29kZXNbZmlkdmlkc3RhdHVzLmJpdHMuQ0ZJRF07CiAJaWYgKCFmc2IpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA3MWZmZmExLi5iNDI3N2Y1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICAgKGMpIDIwMDMsIDIwMDQsIDIwMDUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogICAoYykgMjAwMy0yMDA2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KICAqICBZb3VyIHVzZSBvZiB0aGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCiAgKiAgR05VIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgdmVyc2lvbiAyLiBTZWUgIkNPUFlJTkciIG9yCiAgKiAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sCkBAIC0xNCwxMyArMTQsMTMgQEAKICAqICBCYXNlZCB1cG9uIGRhdGFzaGVldHMgJiBzYW1wbGUgQ1BVcyBraW5kbHkgcHJvdmlkZWQgYnkgQU1ELgogICoKICAqICBWYWx1YWJsZSBpbnB1dCBncmF0ZWZ1bGx5IHJlY2VpdmVkIGZyb20gRGF2ZSBKb25lcywgUGF2ZWwgTWFjaGVrLAotICogIERvbWluaWsgQnJvZG93c2tpLCBhbmQgb3RoZXJzLgorICogIERvbWluaWsgQnJvZG93c2tpLCBKYWNvYiBTaGluLCBhbmQgb3RoZXJzLgogICogIE9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IFBhdWwgRGV2cmllbmR0LgogICogIFByb2Nlc3NvciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIENoYXB0ZXIgOSAoUG93ZXIgYW5kIFRoZXJtYWwgTWFuYWdlbWVudCkKICAqICBvZiB0aGUgIkJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgdGhlIEFNRCBBdGhsb24gNjQgYW5kIEFNRAogICogIE9wdGVyb24gUHJvY2Vzc29ycyIgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIHd3dy5hbWQuY29tCiAgKgotICogIFRhYmxlcyBmb3Igc3BlY2lmaWMgQ1BVcyBjYW4gYmUgaW5mcmVycmVkIGZyb20KKyAqICBUYWJsZXMgZm9yIHNwZWNpZmljIENQVXMgY2FuIGJlIGluZmVycmVkIGZyb20KICAqICAgICBodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMDQzMC5wZGYKICAqLwogCkBAIC00Niw3ICs0Niw3IEBACiAKICNkZWZpbmUgUEZYICJwb3dlcm5vdy1rODogIgogI2RlZmluZSBCRlggUEZYICJCSU9TIGVycm9yOiAiCi0jZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMS42MC4yIgorI2RlZmluZSBWRVJTSU9OICJ2ZXJzaW9uIDIuMDAuMDAiCiAjaW5jbHVkZSAicG93ZXJub3ctazguaCIKIAogLyogc2VyaWFsaXplIGZyZXEgY2hhbmdlcyAgKi8KQEAgLTU0LDYgKzU0LDggQEAKIAogc3RhdGljIHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpwb3dlcm5vd19kYXRhW05SX0NQVVNdOwogCitzdGF0aWMgaW50IGNwdV9mYW1pbHkgPSBDUFVfT1BURVJPTjsKKwogI2lmbmRlZiBDT05GSUdfU01QCiBzdGF0aWMgY3B1bWFza190IGNwdV9jb3JlX21hcFsxXTsKICNlbmRpZgpAQCAtNjQsMTYgKzY2LDM2IEBACiAJcmV0dXJuIDgwMCArIChmaWQgKiAxMDApOwogfQogCisKIC8qIFJldHVybiBhIGZyZXF1ZW5jeSBpbiBLSHosIGdpdmVuIGFuIGlucHV0IGZpZCAqLwogc3RhdGljIHUzMiBmaW5kX2toel9mcmVxX2Zyb21fZmlkKHUzMiBmaWQpCiB7CiAJcmV0dXJuIDEwMDAgKiBmaW5kX2ZyZXFfZnJvbV9maWQoZmlkKTsKIH0KIAotLyogUmV0dXJuIGEgdm9sdGFnZSBpbiBtaWxpVm9sdHMsIGdpdmVuIGFuIGlucHV0IHZpZCAqLwotc3RhdGljIHUzMiBmaW5kX21pbGxpdm9sdHNfZnJvbV92aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiB2aWQpCisvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgYW5kIGRpZCAqLworc3RhdGljIHUzMiBmaW5kX2ZyZXFfZnJvbV9maWRkaWQodTMyIGZpZCwgdTMyIGRpZCkKIHsKLQlyZXR1cm4gMTU1MC12aWQqMjU7CisJcmV0dXJuIDEwMCAqIChmaWQgKyAweDEwKSA+PiBkaWQ7Cit9CisKK3N0YXRpYyB1MzIgZmluZF9raHpfZnJlcV9mcm9tX2ZpZGRpZCh1MzIgZmlkLCB1MzIgZGlkKQoreworCXJldHVybiAxMDAwICogZmluZF9mcmVxX2Zyb21fZmlkZGlkKGZpZCwgZGlkKTsKK30KKworc3RhdGljIHUzMiBmaW5kX2ZpZF9mcm9tX3BzdGF0ZSh1MzIgcHN0YXRlKQoreworCXUzMiBoaSwgbG87CisJcmRtc3IoTVNSX1BTVEFURV9ERUZfQkFTRSArIHBzdGF0ZSwgbG8sIGhpKTsKKwlyZXR1cm4gbG8gJiBIV19QU1RBVEVfRklEX01BU0s7Cit9CisKK3N0YXRpYyB1MzIgZmluZF9kaWRfZnJvbV9wc3RhdGUodTMyIHBzdGF0ZSkKK3sKKwl1MzIgaGksIGxvOworCXJkbXNyKE1TUl9QU1RBVEVfREVGX0JBU0UgKyBwc3RhdGUsIGxvLCBoaSk7CisJcmV0dXJuIChsbyAmIEhXX1BTVEFURV9ESURfTUFTSykgPj4gSFdfUFNUQVRFX0RJRF9TSElGVDsKIH0KIAogLyogUmV0dXJuIHRoZSB2Y28gZmlkIGZvciBhbiBpbnB1dCBmaWQKQEAgLTk4LDYgKzEyMCw5IEBACiB7CiAJdTMyIGxvLCBoaTsKIAorCWlmIChjcHVfZmFtaWx5KQorCQlyZXR1cm4gMDsKKwogCXJkbXNyKE1TUl9GSURWSURfU1RBVFVTLCBsbywgaGkpOwogCXJldHVybiBsbyAmIE1TUl9TX0xPX0NIQU5HRV9QRU5ESU5HID8gMSA6IDA7CiB9CkBAIC0xMTEsNiArMTM2LDE0IEBACiAJdTMyIGxvLCBoaTsKIAl1MzIgaSA9IDA7CiAKKwlpZiAoY3B1X2ZhbWlseSkgeworCQlyZG1zcihNU1JfUFNUQVRFX1NUQVRVUywgbG8sIGhpKTsKKwkJaSA9IGxvICYgSFdfUFNUQVRFX01BU0s7CisJCXJkbXNyKE1TUl9QU1RBVEVfREVGX0JBU0UgKyBpLCBsbywgaGkpOworCQlkYXRhLT5jdXJyZmlkID0gbG8gJiBIV19QU1RBVEVfRklEX01BU0s7CisJCWRhdGEtPmN1cnJkaWQgPSAobG8gJiBIV19QU1RBVEVfRElEX01BU0spID4+IEhXX1BTVEFURV9ESURfU0hJRlQ7CisJCXJldHVybiAwOworCX0KIAlkbyB7CiAJCWlmIChpKysgPiAxMDAwMCkgewogCQkJZHByaW50aygiZGV0ZWN0ZWQgY2hhbmdlIHBlbmRpbmcgc3R1Y2tcbiIpOwpAQCAtMTc1LDcgKzIwOCw3IEBACiAJZG8gewogCQl3cm1zcihNU1JfRklEVklEX0NUTCwgbG8sIGRhdGEtPnBsbGxvY2sgKiBQTExfTE9DS19DT05WRVJTSU9OKTsKIAkJaWYgKGkrKyA+IDEwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW50ZXJuYWwgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gbm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJIYXJkd2FyZSBlcnJvciAtIHBlbmRpbmcgYml0IHZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSB3aGlsZSAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpOwpAQCAtMjU1LDcgKzI4OCwxNSBAQAogCXJldHVybiAwOwogfQogCi0vKiBDaGFuZ2UgdGhlIGZpZCBhbmQgdmlkLCBieSB0aGUgMyBwaGFzZXMuICovCisvKiBDaGFuZ2UgaGFyZHdhcmUgcHN0YXRlIGJ5IHNpbmdsZSBNU1Igd3JpdGUgKi8KK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiBwc3RhdGUpCit7CisJd3Jtc3IoTVNSX1BTVEFURV9DVFJMLCBwc3RhdGUsIDApOworCWRhdGEtPmN1cnJmaWQgPSBmaW5kX2ZpZF9mcm9tX3BzdGF0ZShwc3RhdGUpOworCXJldHVybiAwOworfQorCisvKiBDaGFuZ2UgT3B0ZXJvbi9BdGhsb242NCBmaWQgYW5kIHZpZCwgYnkgdGhlIDMgcGhhc2VzLiAqLwogc3RhdGljIGludCB0cmFuc2l0aW9uX2ZpZF92aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXFmaWQsIHUzMiByZXF2aWQpCiB7CiAJaWYgKGNvcmVfdm9sdGFnZV9wcmVfdHJhbnNpdGlvbihkYXRhLCByZXF2aWQpKQpAQCAtNDc0LDI2ICs1MTUsMzUgQEAKIAkJZ290byBvdXQ7CiAKIAllYXggPSBjcHVpZF9lYXgoQ1BVSURfUFJPQ0VTU09SX1NJR05BVFVSRSk7Ci0JaWYgKChlYXggJiBDUFVJRF9YRkFNKSAhPSBDUFVJRF9YRkFNX0s4KQorCWlmICgoKGVheCAmIENQVUlEX1hGQU0pICE9IENQVUlEX1hGQU1fSzgpICYmCisJICAgICgoZWF4ICYgQ1BVSURfWEZBTSkgPCBDUFVJRF9YRkFNXzEwSCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCgoZWF4ICYgQ1BVSURfVVNFX1hGQU1fWE1PRCkgIT0gQ1BVSURfVVNFX1hGQU1fWE1PRCkgfHwKLQkgICAgKChlYXggJiBDUFVJRF9YTU9EKSA+IENQVUlEX1hNT0RfUkVWX0cpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQcm9jZXNzb3IgY3B1aWQgJXggbm90IHN1cHBvcnRlZFxuIiwgZWF4KTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICgoZWF4ICYgQ1BVSURfWEZBTSkgPT0gQ1BVSURfWEZBTV9LOCkgeworCQlpZiAoKChlYXggJiBDUFVJRF9VU0VfWEZBTV9YTU9EKSAhPSBDUFVJRF9VU0VfWEZBTV9YTU9EKSB8fAorCQkgICAgKChlYXggJiBDUFVJRF9YTU9EKSA+IENQVUlEX1hNT0RfUkVWX0cpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJvY2Vzc29yIGNwdWlkICV4IG5vdCBzdXBwb3J0ZWRcbiIsIGVheCk7CisJCQlnb3RvIG91dDsKKwkJfQogCi0JZWF4ID0gY3B1aWRfZWF4KENQVUlEX0dFVF9NQVhfQ0FQQUJJTElUSUVTKTsKLQlpZiAoZWF4IDwgQ1BVSURfRlJFUV9WT0xUX0NBUEFCSUxJVElFUykgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkgICAgICAgIk5vIGZyZXF1ZW5jeSBjaGFuZ2UgY2FwYWJpbGl0aWVzIGRldGVjdGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQorCQllYXggPSBjcHVpZF9lYXgoQ1BVSURfR0VUX01BWF9DQVBBQklMSVRJRVMpOworCQlpZiAoZWF4IDwgQ1BVSURfRlJFUV9WT0xUX0NBUEFCSUxJVElFUykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSAgICAgICAiTm8gZnJlcXVlbmN5IGNoYW5nZSBjYXBhYmlsaXRpZXMgZGV0ZWN0ZWRcbiIpOworCQkJZ290byBvdXQ7CisJCX0KIAotCWNwdWlkKENQVUlEX0ZSRVFfVk9MVF9DQVBBQklMSVRJRVMsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCWlmICgoZWR4ICYgUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpICE9IFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQb3dlciBzdGF0ZSB0cmFuc2l0aW9ucyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJZ290byBvdXQ7CisJCWNwdWlkKENQVUlEX0ZSRVFfVk9MVF9DQVBBQklMSVRJRVMsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCQlpZiAoKGVkeCAmIFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSAhPSBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBvd2VyIHN0YXRlIHRyYW5zaXRpb25zIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgeyAvKiBtdXN0IGJlIGEgSFcgUHN0YXRlIGNhcGFibGUgcHJvY2Vzc29yICovCisJCWNwdWlkKENQVUlEX0ZSRVFfVk9MVF9DQVBBQklMSVRJRVMsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCQlpZiAoKGVkeCAmIFVTRV9IV19QU1RBVEUpID09IFVTRV9IV19QU1RBVEUpCisJCQljcHVfZmFtaWx5ID0gQ1BVX0hXX1BTVEFURTsKKwkJZWxzZQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmMgPSAxOwpAQCAtNTQ3LDEyICs1OTcsMTggQEAKIHsKIAlpbnQgajsKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykgewotCQlpZiAoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ICE9IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIgICAlZCA6IGZpZCAweCV4ICglZCBNSHopLCB2aWQgMHgleCAoJWQgbVYpXG4iLCBqLAorCQlpZiAoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ICE9IENQVUZSRVFfRU5UUllfSU5WQUxJRCkgeworCQkJaWYgKGNwdV9mYW1pbHkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICIgICAlZCA6IGZpZCAweCV4IGdpZCAweCV4ICglZCBNSHopXG4iLCBqLCAoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXggJiAweGZmMDApID4+IDgsCisJCQkJKGRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4ICYgMHhmZjAwMDApID4+IDE2LAorCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeS8xMDAwKTsKKwkJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiICAgJWQgOiBmaWQgMHgleCAoJWQgTUh6KSwgdmlkIDB4JXhcbiIsIGosCiAJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXggJiAweGZmLAogCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeS8xMDAwLAotCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4ID4+IDgsCi0JCQkJZmluZF9taWxsaXZvbHRzX2Zyb21fdmlkKGRhdGEsIGRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4ID4+IDgpKTsKKwkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5pbmRleCA+PiA4KTsKKwkJCX0KKwkJfQogCX0KIAlpZiAoZGF0YS0+YmF0cHMpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJPbmx5ICVkIHBzdGF0ZXMgb24gYmF0dGVyeVxuIiwgZGF0YS0+YmF0cHMpOwpAQCAtNzAyLDcgKzc1OCw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJCiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKLQlpZiAoIWRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCkKKwlpZiAoIWRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCB8fCBjcHVfZmFtaWx5KQogCQlyZXR1cm47CiAKIAlkYXRhLT5pcnQgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBJUlRfU0hJRlQpICYgSVJUX01BU0s7CkBAIC03MTUsOSArNzcxLDggQEAKIAogc3RhdGljIGludCBwb3dlcm5vd19rOF9jcHVfaW5pdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKQogewotCWludCBpOwotCWludCBjbnRsb2ZyZXEgPSAwOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGU7CisJaW50IHJldF92YWw7CiAKIAlpZiAoYWNwaV9wcm9jZXNzb3JfcmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KSkgewogCQlkcHJpbnRrKCJyZWdpc3RlciBwZXJmb3JtYW5jZSBmYWlsZWQ6IGJhZCBBQ1BJIGRhdGFcbiIpOwpAQCAtNzQ2LDYgKzgwMSw4NSBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJaWYgKGNwdV9mYW1pbHkpCisJCXJldF92YWwgPSBmaWxsX3Bvd2Vybm93X3RhYmxlX3BzdGF0ZShkYXRhLCBwb3dlcm5vd190YWJsZSk7CisJZWxzZQorCQlyZXRfdmFsID0gZmlsbF9wb3dlcm5vd190YWJsZV9maWR2aWQoZGF0YSwgcG93ZXJub3dfdGFibGUpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIGVycl9vdXRfbWVtOworCisJcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKwlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmluZGV4ID0gMDsKKwlkYXRhLT5wb3dlcm5vd190YWJsZSA9IHBvd2Vybm93X3RhYmxlOworCisJLyogZmlsbCBpbiBkYXRhICovCisJZGF0YS0+bnVtcHMgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7CisJcHJpbnRfYmFzaWNzKGRhdGEpOworCXBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhkYXRhLCAwKTsKKworCS8qIG5vdGlmeSBCSU9TIHRoYXQgd2UgZXhpc3QgKi8KKwlhY3BpX3Byb2Nlc3Nvcl9ub3RpZnlfc21tKFRISVNfTU9EVUxFKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X21lbToKKwlrZnJlZShwb3dlcm5vd190YWJsZSk7CisKK2Vycl9vdXQ6CisJYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpOworCisJLyogZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IGluZm9ybXMgdXMgYXQgLT5leGl0KCkgd2hldGhlciBBQ1BJIHdhcyB1c2VkICovCisJZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50ID0gMDsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudDsgaSsrKSB7CisJCXUzMiBpbmRleDsKKwkJdTMyIGhpID0gMCwgbG8gPSAwOworCQl1MzIgZmlkOworCQl1MzIgZGlkOworCisJCWluZGV4ID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sICYgSFdfUFNUQVRFX01BU0s7CisJCWlmIChpbmRleCA+IE1BWF9IV19QU1RBVEUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgcHN0YXRlICVkIC0gYmFkIHZhbHVlICVkLlxuIiwgaSwgaW5kZXgpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUGxlYXNlIHJlcG9ydCB0byBCSU9TIG1hbnVmYWN0dXJlclxuIik7CisJCX0KKwkJcmRtc3IoTVNSX1BTVEFURV9ERUZfQkFTRSArIGluZGV4LCBsbywgaGkpOworCQlpZiAoIShoaSAmIEhXX1BTVEFURV9WQUxJRF9NQVNLKSkgeworCQkJZHByaW50aygiaW52YWxpZCBwc3RhdGUgJWQsIGlnbm9yaW5nXG4iLCBpbmRleCk7CisJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZpZCA9IGxvICYgSFdfUFNUQVRFX0ZJRF9NQVNLOworCQlkaWQgPSAobG8gJiBIV19QU1RBVEVfRElEX01BU0spID4+IEhXX1BTVEFURV9ESURfU0hJRlQ7CisKKwkJZHByaW50aygiICAgJWQgOiBmaWQgMHgleCwgZGlkIDB4JXhcbiIsIGluZGV4LCBmaWQsIGRpZCk7CisKKwkJcG93ZXJub3dfdGFibGVbaV0uaW5kZXggPSBpbmRleCB8IChmaWQgPDwgSFdfRklEX0lOREVYX1NISUZUKSB8IChkaWQgPDwgSFdfRElEX0lOREVYX1NISUZUKTsKKworCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkZGlkKGZpZCwgZGlkKTsKKworCQlpZiAocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ICE9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJpbnZhbGlkIGZyZXEgZW50cmllcyAldSBrSHogdnMuICV1IGtIelxuIiwKKwkJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3ksCisJCQkJKHVuc2lnbmVkIGludCkgKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKSk7CisJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQljb250aW51ZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSkKK3sKKwlpbnQgaTsKKwlpbnQgY250bG9mcmVxID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50OyBpKyspIHsKIAkJdTMyIGZpZDsKIAkJdTMyIHZpZDsKQEAgLTc4Niw3ICs5MjAsNyBAQAogCQkJCWlmICgocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uZnJlcXVlbmN5KSB8fAogCQkJCSAgICAocG93ZXJub3dfdGFibGVbaV0uaW5kZXggIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5pbmRleCkpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVG9vIG1hbnkgbG8gZnJlcSB0YWJsZSBlbnRyaWVzXG4iKTsKLQkJCQkJZ290byBlcnJfb3V0X21lbTsKKwkJCQkJcmV0dXJuIDE7CiAJCQkJfQogCiAJCQkJZHByaW50aygiZG91YmxlIGxvdyBmcmVxdWVuY3kgdGFibGUgZW50cnksIGlnbm9yaW5nIGl0LlxuIik7CkBAIC04MDQsMzEgKzkzOCw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCX0KLQotCXBvd2Vybm93X3RhYmxlW2RhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudF0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7Ci0JcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5pbmRleCA9IDA7Ci0JZGF0YS0+cG93ZXJub3dfdGFibGUgPSBwb3dlcm5vd190YWJsZTsKLQotCS8qIGZpbGwgaW4gZGF0YSAqLwotCWRhdGEtPm51bXBzID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50OwotCXByaW50X2Jhc2ljcyhkYXRhKTsKLQlwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoZGF0YSwgMCk7Ci0KLQkvKiBub3RpZnkgQklPUyB0aGF0IHdlIGV4aXN0ICovCi0JYWNwaV9wcm9jZXNzb3Jfbm90aWZ5X3NtbShUSElTX01PRFVMRSk7Ci0KIAlyZXR1cm4gMDsKLQotZXJyX291dF9tZW06Ci0Ja2ZyZWUocG93ZXJub3dfdGFibGUpOwotCi1lcnJfb3V0OgotCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KTsKLQotCS8qIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCBpbmZvcm1zIHVzIGF0IC0+ZXhpdCgpIHdoZXRoZXIgQUNQSSB3YXMgdXNlZCAqLwotCWRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCA9IDA7Ci0KLQlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHZvaWQgcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkKQEAgLTg0NCwyMCArOTU0LDIwIEBACiAjZW5kaWYgLyogQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJICovCiAKIC8qIFRha2UgYSBmcmVxdWVuY3ksIGFuZCBpc3N1ZSB0aGUgZmlkL3ZpZCB0cmFuc2l0aW9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3koc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7Ci0JdTMyIGZpZDsKLQl1MzIgdmlkOworCXUzMiBmaWQgPSAwOworCXUzMiB2aWQgPSAwOwogCWludCByZXMsIGk7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAKIAlkcHJpbnRrKCJjcHUgJWQgdHJhbnNpdGlvbiB0byBpbmRleCAldVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpbmRleCk7CiAKKwkvKiBmaWQvdmlkIGNvcnJlY3RuZXNzIGNoZWNrIGZvciBrOCAqLwogCS8qIGZpZCBhcmUgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgaW5kZXggd2Ugc3RvcmVkIGludG8KLQkgKiB0aGUgY3B1ZnJlcSBmcmVxdWVuY3kgdGFibGUgaW4gZmluZF9wc2JfdGFibGUsIHZpZCBhcmUKLQkgKiB0aGUgdXBwZXIgOCBiaXRzLgorCSAqIHRoZSBjcHVmcmVxIGZyZXF1ZW5jeSB0YWJsZSBpbiBmaW5kX3BzYl90YWJsZSwgdmlkCisJICogYXJlIHRoZSB1cHBlciA4IGJpdHMuCiAJICovCi0KIAlmaWQgPSBkYXRhLT5wb3dlcm5vd190YWJsZVtpbmRleF0uaW5kZXggJiAweEZGOwogCXZpZCA9IChkYXRhLT5wb3dlcm5vd190YWJsZVtpbmRleF0uaW5kZXggJiAweEZGMDApID4+IDg7CiAKQEAgLTg4MSwyMiArOTkxLDU4IEBACiAKIAlkcHJpbnRrKCJjcHUgJWQsIGNoYW5naW5nIHRvIGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBmaWQsIHZpZCk7Ci0KLQlmcmVxcy5jcHUgPSBkYXRhLT5jcHU7CiAJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGZpZCk7Ci0JZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X2NvcmVfbWFwW2RhdGEtPmNwdV0pIHsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGksICooZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSkgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCX0KIAogCXJlcyA9IHRyYW5zaXRpb25fZmlkX3ZpZChkYXRhLCBmaWQsIHZpZCk7Ci0KIAlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwotCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9jb3JlX21hcFtkYXRhLT5jcHVdKSB7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhpLCAqKGRhdGEtPmF2YWlsYWJsZV9jb3JlcykpIHsKIAkJZnJlcXMuY3B1ID0gaTsKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7Ci0gICAgICAgIH0KKwl9CisJcmV0dXJuIHJlczsKK30KKworLyogVGFrZSBhIGZyZXF1ZW5jeSwgYW5kIGlzc3VlIHRoZSBoYXJkd2FyZSBwc3RhdGUgdHJhbnNpdGlvbiBjb21tYW5kICovCitzdGF0aWMgaW50IHRyYW5zaXRpb25fZnJlcXVlbmN5X3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXUzMiBmaWQgPSAwOworCXUzMiBkaWQgPSAwOworCXUzMiBwc3RhdGUgPSAwOworCWludCByZXMsIGk7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CisKKwlkcHJpbnRrKCJjcHUgJWQgdHJhbnNpdGlvbiB0byBpbmRleCAldVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpbmRleCk7CisKKwkvKiBnZXQgZmlkIGRpZCBmb3IgaGFyZHdhcmUgcHN0YXRlIHRyYW5zaXRpb24gKi8KKwlwc3RhdGUgPSBpbmRleCAmIEhXX1BTVEFURV9NQVNLOworCWlmIChwc3RhdGUgPiBNQVhfSFdfUFNUQVRFKQorCQlyZXR1cm4gMDsKKwlmaWQgPSAoaW5kZXggJiBIV19GSURfSU5ERVhfTUFTSykgPj4gSFdfRklEX0lOREVYX1NISUZUOworCWRpZCA9IChpbmRleCAmIEhXX0RJRF9JTkRFWF9NQVNLKSA+PiBIV19ESURfSU5ERVhfU0hJRlQ7CisJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZGRpZChkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJyZGlkKTsKKwlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkZGlkKGZpZCwgZGlkKTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGksICooZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSkgeworCQlmcmVxcy5jcHUgPSBpOworCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOworCX0KKworCXJlcyA9IHRyYW5zaXRpb25fcHN0YXRlKGRhdGEsIHBzdGF0ZSk7CisJZGF0YS0+Y3VycmZpZCA9IGZpbmRfZmlkX2Zyb21fcHN0YXRlKHBzdGF0ZSk7CisJZGF0YS0+Y3VycmRpZCA9IGZpbmRfZGlkX2Zyb21fcHN0YXRlKHBzdGF0ZSk7CisJZnJlcXMubmV3ID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZGRpZChkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJyZGlkKTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGksICooZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSkgeworCQlmcmVxcy5jcHUgPSBpOworCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKKwl9CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtOTMzLDE4ICsxMDc5LDIxIEBACiAJZHByaW50aygidGFyZzogY3B1ICVkLCAlZCBrSHosIG1pbiAlZCwgbWF4ICVkLCByZWxhdGlvbiAlZFxuIiwKIAkJcG9sLT5jcHUsIHRhcmdmcmVxLCBwb2wtPm1pbiwgcG9sLT5tYXgsIHJlbGF0aW9uKTsKIAotCWlmIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSkgewotCQlyZXQgPSAtRUlPOworCWlmIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSkKIAkJZ290byBlcnJfb3V0OwotCX0KIAotCWRwcmludGsoInRhcmc6IGN1cnIgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAorCWlmIChjcHVfZmFtaWx5KQorCQlkcHJpbnRrKCJ0YXJnOiBjdXJyIGZpZCAweCV4LCBkaWQgMHgleFxuIiwKKwkJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOworCWVsc2UgeworCQlkcHJpbnRrKCJ0YXJnOiBjdXJyIGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKLQlpZiAoKGNoZWNrdmlkICE9IGRhdGEtPmN1cnJ2aWQpIHx8IChjaGVja2ZpZCAhPSBkYXRhLT5jdXJyZmlkKSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJImVycm9yIC0gb3V0IG9mIHN5bmMsIGZpeCAweCV4IDB4JXgsIHZpZCAweCV4IDB4JXhcbiIsCi0JCQljaGVja2ZpZCwgZGF0YS0+Y3VycmZpZCwgY2hlY2t2aWQsIGRhdGEtPmN1cnJ2aWQpOworCQlpZiAoKGNoZWNrdmlkICE9IGRhdGEtPmN1cnJ2aWQpIHx8IChjaGVja2ZpZCAhPSBkYXRhLT5jdXJyZmlkKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkiZXJyb3IgLSBvdXQgb2Ygc3luYywgZml4IDB4JXggMHgleCwgdmlkIDB4JXggMHgleFxuIiwKKwkJCQljaGVja2ZpZCwgZGF0YS0+Y3VycmZpZCwgY2hlY2t2aWQsIGRhdGEtPmN1cnJ2aWQpOworCQl9CiAJfQogCiAJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlLCB0YXJnZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCkBAIC05NTQsNyArMTEwMywxMSBAQAogCiAJcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKGRhdGEsIG5ld3N0YXRlKTsKIAotCWlmICh0cmFuc2l0aW9uX2ZyZXF1ZW5jeShkYXRhLCBuZXdzdGF0ZSkpIHsKKwlpZiAoY3B1X2ZhbWlseSkKKwkJcmV0ID0gdHJhbnNpdGlvbl9mcmVxdWVuY3lfcHN0YXRlKGRhdGEsIG5ld3N0YXRlKTsKKwllbHNlCisJCXJldCA9IHRyYW5zaXRpb25fZnJlcXVlbmN5X2ZpZHZpZChkYXRhLCBuZXdzdGF0ZSk7CisJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0cmFuc2l0aW9uIGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwogCQlyZXQgPSAxOwogCQltdXRleF91bmxvY2soJmZpZHZpZF9tdXRleCk7CkBAIC05NjIsNyArMTExNSwxMCBAQAogCX0KIAltdXRleF91bmxvY2soJmZpZHZpZF9tdXRleCk7CiAKLQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CisJaWYgKGNwdV9mYW1pbHkpCisJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZGRpZChkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJyZGlkKTsKKwllbHNlCisJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAlyZXQgPSAwOwogCiBlcnJfb3V0OgpAQCAtMTAwNywxNCArMTE2MywxMyBAQAogCQkgKiBVc2UgdGhlIFBTQiBCSU9TIHN0cnVjdHVyZS4gVGhpcyBpcyBvbmx5IGF2YWlsYWJlIG9uCiAJCSAqIGFuIFVQIHZlcnNpb24sIGFuZCBpcyBkZXByZWNhdGVkIGJ5IEFNRC4KIAkJICovCi0KIAkJaWYgKChudW1fb25saW5lX2NwdXMoKSAhPSAxKSB8fCAobnVtX3Bvc3NpYmxlX2NwdXMoKSAhPSAxKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTVAgc3lzdGVtcyBub3Qgc3VwcG9ydGVkIGJ5IFBTQiBCSU9TIHN0cnVjdHVyZVxuIik7CiAJCQlrZnJlZShkYXRhKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWlmIChwb2wtPmNwdSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbml0IG5vdCBjcHUgMFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBfUFNTIG9iamVjdHMgZm9yIENQVSBvdGhlciB0aGFuIENQVTBcbiIpOwogCQkJa2ZyZWUoZGF0YSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtMTA0MiwyMCArMTE5NywyOCBAQAogCWlmIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSkKIAkJZ290byBlcnJfb3V0OwogCi0JZmlkdmlkX21zcl9pbml0KCk7CisJaWYgKCFjcHVfZmFtaWx5KQorCQlmaWR2aWRfbXNyX2luaXQoKTsKIAogCS8qIHJ1biBvbiBhbnkgQ1BVIGFnYWluICovCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRtYXNrKTsKIAogCXBvbC0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7Ci0JcG9sLT5jcHVzID0gY3B1X2NvcmVfbWFwW3BvbC0+Y3B1XTsKKwlpZiAoY3B1X2ZhbWlseSkKKwkJcG9sLT5jcHVzID0gY3B1bWFza19vZl9jcHUocG9sLT5jcHUpOworCWVsc2UKKwkJcG9sLT5jcHVzID0gY3B1X2NvcmVfbWFwW3BvbC0+Y3B1XTsKKwlkYXRhLT5hdmFpbGFibGVfY29yZXMgPSAmKHBvbC0+Y3B1cyk7CiAKIAkvKiBUYWtlIGEgY3J1ZGUgZ3Vlc3MgaGVyZS4KIAkgKiBUaGF0IGd1ZXNzIHdhcyBpbiBtaWNyb3NlY29uZHMsIHNvIG11bHRpcGx5IHdpdGggMTAwMCAqLwogCXBvbC0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAoKChkYXRhLT5ydm8gKyA4KSAqIGRhdGEtPnZzdGFibGUgKiBWU1RfVU5JVFNfMjBVUykKIAkgICAgKyAoMyAqICgxIDw8IGRhdGEtPmlydCkgKiAxMCkpICogMTAwMDsKIAotCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKKwlpZiAoY3B1X2ZhbWlseSkKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkZGlkKGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJkaWQpOworCWVsc2UKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCWRwcmludGsoInBvbGljeSBjdXJyZW50IGZyZXF1ZW5jeSAlZCBrSHpcbiIsIHBvbC0+Y3VyKTsKIAogCS8qIG1pbi9tYXggdGhlIGNwdSBpcyBjYXBhYmxlIG9mICovCkBAIC0xMDY5LDggKzEyMzIsMTIgQEAKIAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBwb2wtPmNwdSk7CiAKLQlwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAotCSAgICAgICBkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKKwlpZiAoY3B1X2ZhbWlseSkKKwkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBmaWQgMHgleCwgZGlkIDB4JXhcbiIsCisJCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJyZGlkKTsKKwllbHNlCisJCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAorCQkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKIAlwb3dlcm5vd19kYXRhW3BvbC0+Y3B1XSA9IGRhdGE7CiAKQEAgLTExNTYsOCArMTMyMyw5IEBACiAJfQogCiAJaWYgKHN1cHBvcnRlZF9jcHVzID09IG51bV9vbmxpbmVfY3B1cygpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCAlZCBBTUQgQXRobG9uIDY0IC8gT3B0ZXJvbiAiCi0JCQkicHJvY2Vzc29ycyAoIiBWRVJTSU9OICIpXG4iLCBzdXBwb3J0ZWRfY3B1cyk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCAlZCAlcyAiCisJCQkicHJvY2Vzc29ycyAoIiBWRVJTSU9OICIpXG4iLCBzdXBwb3J0ZWRfY3B1cywKKwkJCWJvb3RfY3B1X2RhdGEueDg2X21vZGVsX2lkKTsKIAkJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZjcHVmcmVxX2FtZDY0X2RyaXZlcik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmggYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKaW5kZXggNzlhN2M1Yy4uYmY4YWQ5ZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgKGMpIDIwMDMsIDIwMDQsIDIwMDUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogIChjKSAyMDAzLTIwMDYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgogICogIFlvdXIgdXNlIG9mIHRoaXMgY29kZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKICAqICBHTlUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIDIuIFNlZSAiQ09QWUlORyIgb3IKICAqICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKQEAgLTIxLDggKzIxLDggQEAKIAl1MzIgcGxsbG9jazsgLyogcGxsIGxvY2sgdGltZSwgdW5pdHMgMSB1cyAqLwogICAgICAgICB1MzIgZXh0dHlwZTsgLyogZXh0ZW5kZWQgaW50ZXJmYWNlID0gMSAqLwogCi0JLyoga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBmaWQgLyB2aWQgKi8KLQl1MzIgY3VycnZpZCwgY3VycmZpZDsKKwkvKiBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGZpZCAvIHZpZCBvciBkaWQgKi8KKwl1MzIgY3VycnZpZCwgY3VycmZpZCwgY3VycmRpZDsKIAogCS8qIHRoZSBwb3dlcm5vd190YWJsZSBpbmNsdWRlcyBhbGwgZnJlcXVlbmN5IGFuZCB2aWQvZmlkIHBhaXJpbmdzOgogCSAqIGZpZCBhcmUgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgaW5kZXgsIHZpZCBhcmUgdGhlIHVwcGVyIDggYml0cy4KQEAgLTM0LDYgKzM0LDEwIEBACiAJICogdXNlZCB0byBkZXRlcm1pbmUgdmFsaWQgZnJlcXVlbmN5L3ZpZC9maWQgc3RhdGVzICovCiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlIGFjcGlfZGF0YTsKICNlbmRpZgorCS8qIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBhc3NvY2lhdGVkIGNvcmVzLCBidXQgbGV0IGNwdWZyZXEKKwkgKiBoYW5kbGUgaG90cGx1ZyBldmVudHMgLSBzbyBqdXN0IHBvaW50IGF0IGNwdWZyZXEgcG9sLT5jcHVzCisJICogc3RydWN0dXJlICovCisJY3B1bWFza190ICphdmFpbGFibGVfY29yZXM7CiB9OwogCiAKQEAgLTQzLDYgKzQ3LDcgQEAKICNkZWZpbmUgQ1BVSURfWEZBTV9LOAkJCTAKICNkZWZpbmUgQ1BVSURfWE1PRAkJCTB4MDAwZjAwMDAJLyogZXh0ZW5kZWQgbW9kZWwgKi8KICNkZWZpbmUgQ1BVSURfWE1PRF9SRVZfRwkJMHgwMDA2MDAwMAorI2RlZmluZSBDUFVJRF9YRkFNXzEwSCAJCQkweDAwMTAwMDAwCS8qIGZhbWlseSAweDEwICovCiAjZGVmaW5lIENQVUlEX1VTRV9YRkFNX1hNT0QJCTB4MDAwMDBmMDAKICNkZWZpbmUgQ1BVSURfR0VUX01BWF9DQVBBQklMSVRJRVMJMHg4MDAwMDAwMAogI2RlZmluZSBDUFVJRF9GUkVRX1ZPTFRfQ0FQQUJJTElUSUVTCTB4ODAwMDAwMDcKQEAgLTc5LDYgKzg0LDMyIEBACiAjZGVmaW5lIE1TUl9TX0hJX0NVUlJFTlRfVklEICAgICAgMHgwMDAwMDAzZgogI2RlZmluZSBNU1JfQ19ISV9TVFBfR05UX0JFTklHTgkgIDB4MDAwMDAwMDEKIAorCisvKiBIYXJkd2FyZSBQc3RhdGUgX1BTUyBhbmQgTVNSIGRlZmluaXRpb25zICovCisjZGVmaW5lIFVTRV9IV19QU1RBVEUJCTB4MDAwMDAwODAKKyNkZWZpbmUgSFdfUFNUQVRFX0ZJRF9NQVNLIAkweDAwMDAwMDNmCisjZGVmaW5lIEhXX1BTVEFURV9ESURfTUFTSyAJMHgwMDAwMDFjMAorI2RlZmluZSBIV19QU1RBVEVfRElEX1NISUZUIAk2CisjZGVmaW5lIEhXX1BTVEFURV9NQVNLIAkJMHgwMDAwMDAwNworI2RlZmluZSBIV19QU1RBVEVfVkFMSURfTUFTSyAJMHg4MDAwMDAwMAorI2RlZmluZSBIV19GSURfSU5ERVhfU0hJRlQJOAorI2RlZmluZSBIV19GSURfSU5ERVhfTUFTSwkweDAwMDBmZjAwCisjZGVmaW5lIEhXX0RJRF9JTkRFWF9TSElGVAkxNgorI2RlZmluZSBIV19ESURfSU5ERVhfTUFTSwkweDAwZmYwMDAwCisjZGVmaW5lIEhXX1dBVFRTX01BU0sJCTB4ZmYKKyNkZWZpbmUgSFdfUFdSX0RWUl9NQVNLCQkweDMwMAorI2RlZmluZSBIV19QV1JfRFZSX1NISUZUCTgKKyNkZWZpbmUgSFdfUFdSX01BWF9NVUxUCQkzCisjZGVmaW5lIE1BWF9IV19QU1RBVEUJCTgJLyogaHcgcHN0YXRlIHN1cHBvcnRzIHVwIHRvIDggKi8KKyNkZWZpbmUgTVNSX1BTVEFURV9ERUZfQkFTRSAJMHhjMDAxMDA2NCAvKiBiYXNlIG9mIFBzdGF0ZSBNU1JzICovCisjZGVmaW5lIE1TUl9QU1RBVEVfU1RBVFVTIAkweGMwMDEwMDYzIC8qIFBzdGF0ZSBTdGF0dXMgTVNSICovCisjZGVmaW5lIE1TUl9QU1RBVEVfQ1RSTCAJMHhjMDAxMDA2MiAvKiBQc3RhdGUgY29udHJvbCBNU1IgKi8KKworLyogZGVmaW5lIHRoZSB0d28gZHJpdmVyIGFyY2hpdGVjdHVyZXMgKi8KKyNkZWZpbmUgQ1BVX09QVEVST04gMAorI2RlZmluZSBDUFVfSFdfUFNUQVRFIDEKKworCiAvKgogICogVGhlcmUgYXJlIHJlc3RyaWN0aW9ucyBmcmVxdWVuY2llcyBoYXZlIHRvIGZvbGxvdzoKICAqIC0gb25seSAxIGVudHJ5IGluIHRoZSBsb3cgZmlkIHRhYmxlICggPD0xLjRHSHogKQpAQCAtMTgyLDYgKzIxMyw5IEBACiAKIHN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KTsKIAorc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSk7CitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKTsKKwogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWZpbmVfc2libGluZ3MoaW50IGNwdSwgY3B1bWFza190IGNwdV9zaGFyZWRjb3JlX21hc2tbXSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCmluZGV4IGIwZmY5MDcuLmNlNTRmZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIAlpZiAobW9kZWwtPmNwdV9pZCA9PSBOVUxMKSB7CiAJCS8qIE5vIG1hdGNoIGF0IGFsbCAqLwotCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIm5vIHN1cHBvcnQgZm9yIENQVSBtb2RlbCBcIiVzXCI6ICIKKwkJZHByaW50aygibm8gc3VwcG9ydCBmb3IgQ1BVIG1vZGVsIFwiJXNcIjogIgogCQkgICAgICAgInNlbmQgL3Byb2MvY3B1aW5mbyB0byAiIE1BSU5UQUlORVIgIlxuIiwKIAkJICAgICAgIGNwdS0+eDg2X21vZGVsX2lkKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0yNTgsMTAgKzI1OCwxMCBAQAogCiAJaWYgKG1vZGVsLT5vcF9wb2ludHMgPT0gTlVMTCkgewogCQkvKiBNYXRjaGVkIGEgbm9uLW1hdGNoICovCi0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAibm8gdGFibGUgc3VwcG9ydCBmb3IgQ1BVIG1vZGVsIFwiJXNcIlxuIiwKKwkJZHByaW50aygibm8gdGFibGUgc3VwcG9ydCBmb3IgQ1BVIG1vZGVsIFwiJXNcIlxuIiwKIAkJICAgICAgIGNwdS0+eDg2X21vZGVsX2lkKTsKICNpZm5kZWYgQ09ORklHX1g4Nl9TUEVFRFNURVBfQ0VOVFJJTk9fQUNQSQotCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggInRyeSBjb21waWxpbmcgd2l0aCBDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOT19BQ1BJIGVuYWJsZWRcbiIpOworCQlkcHJpbnRrKCJ0cnkgY29tcGlsaW5nIHdpdGggQ09ORklHX1g4Nl9TUEVFRFNURVBfQ0VOVFJJTk9fQUNQSSBlbmFibGVkXG4iKTsKICNlbmRpZgogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CkBAIC0zNjgsNyArMzY4LDcgQEAKIAogCS8qIHJlZ2lzdGVyIHdpdGggQUNQSSBjb3JlICovCiAJaWYgKGFjcGlfcHJvY2Vzc29yX3JlZ2lzdGVyX3BlcmZvcm1hbmNlKCZwLCBjcHUpKSB7Ci0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAib2J0YWluaW5nIEFDUEkgZGF0YSBmYWlsZWRcbiIpOworCQlkcHJpbnRrKCJvYnRhaW5pbmcgQUNQSSBkYXRhIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNDY1LDcgKzQ2NSw3IEBACiAJa2ZyZWUoY2VudHJpbm9fbW9kZWxbY3B1XSk7CiAgZXJyX3VucmVnOgogCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UoJnAsIGNwdSk7Ci0JZHByaW50ayhLRVJOX0lORk8gUEZYICJpbnZhbGlkIEFDUEkgZGF0YVxuIik7CisJZHByaW50aygiaW52YWxpZCBBQ1BJIGRhdGFcbiIpOwogCXJldHVybiAocmVzdWx0KTsKIH0KICNlbHNlCkBAIC00OTksNyArNDk5LDcgQEAKIAkJCWNlbnRyaW5vX2NwdVtwb2xpY3ktPmNwdV0gPSAmY3B1X2lkc1tpXTsKIAogCQlpZiAoIWNlbnRyaW5vX2NwdVtwb2xpY3ktPmNwdV0pIHsKLQkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiZm91bmQgdW5zdXBwb3J0ZWQgQ1BVIHdpdGggIgorCQkJZHByaW50aygiZm91bmQgdW5zdXBwb3J0ZWQgQ1BVIHdpdGggIgogCQkJIkVuaGFuY2VkIFNwZWVkU3RlcDogc2VuZCAvcHJvYy9jcHVpbmZvIHRvICIKIAkJCU1BSU5UQUlORVIgIlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggZThmZjA5Zi4uMzVlMDM4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTExOSw2ICsxMTksMzIgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKK2NvbmZpZyBCQVNMRVJfRVhDSVRFCisJYm9vbCAiQmFzbGVyIGVYY2l0ZSBzbWFydCBjYW1lcmEgc3VwcG9ydCIKKwlzZWxlY3QgRE1BX0NPSEVSRU5UCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSVJRX0NQVQorCXNlbGVjdCBJUlFfQ1BVX1JNN0sKKwlzZWxlY3QgSVJRX0NQVV9STTlLCisJc2VsZWN0IFNFUklBTF9STTkwMDAKKwlzZWxlY3QgU1lTX0hBU19DUFVfUk05MDAwCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCWhlbHAKKwkgIFRoZSBlWGNpdGUgaXMgYSBzbWFydCBjYW1lcmEgcGxhdGZvcm0gbWFudWZhY3R1cmVkIGJ5CisJICBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworCitjb25maWcgQkFTTEVSX0VYQ0lURV9QUk9UT1RZUEUKKwlib29sICJTdXBwb3J0IGZvciBwcmUtcmVsZWFzZSB1bml0cyIKKwlkZXBlbmRzIG9uIEJBU0xFUl9FWENJVEUKKwlkZWZhdWx0IG4KKwloZWxwCisJICBQcmUtc2VyaWVzIChwcm90b3R5cGUpIHVuaXRzIGFyZSBkaWZmZXJlbnQgZnJvbSBsYXRlciBvbmVzIGluCisJICBzb21lIHdheXMuIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UuIFBsZWFzZQorCSAgbm90ZSB0aGF0IGEga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gc2VsZWN0ZWQgd2lsbCBub3QgYmUKKwkgIGFibGUgdG8gcnVuIG9uIG5vcm1hbCB1bml0cy4KKwogY29uZmlnIE1JUFNfQ09CQUxUCiAJYm9vbCAiQ29iYWx0IFNlcnZlciIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCkBAIC0xNDIsNiArMTY4LDkgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMTI4SFoKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzI1NkhaCisJc2VsZWN0IFNZU19TVVBQT1JUU18xMDI0SFoKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgREVDJ3MgTUlQUyBiYXNlZCB3b3Jrc3RhdGlvbnMuICBGb3IgZGV0YWlscwogCSAgc2VlIHRoZSBMaW51eC9NSVBTIEZBUSBvbiA8aHR0cDovL3d3dy5saW51eC1taXBzLm9yZy8+IGFuZCB0aGUKQEAgLTIzOSw2ICsyNjgsNyBAQAogCXNlbGVjdCBTWVNfSEFTX0NQVV9SNFgwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNZU19TVVBQT1JUU18xMDBIWgogCWhlbHAKIAkgVGhpcyBhIGZhbWlseSBvZiBtYWNoaW5lcyBiYXNlZCBvbiB0aGUgTUlQUyBSNDAzMCBjaGlwc2V0IHdoaWNoIHdhcwogCSB1c2VkIGJ5IHNldmVyYWwgdmVuZG9ycyB0byBidWlsZCBSSVNDL29zIGFuZCBXaW5kb3dzIE5UIHdvcmtzdGF0aW9ucy4KQEAgLTMyNyw2ICszNTcsMjcgQEAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTUlQUyBUZWNobm9sb2dpZXMgU0VBRCBldmFsdWF0aW9uCiAJICBib2FyZC4KIAorY29uZmlnIFdSX1BQTUMKKwlib29sICJTdXBwb3J0IGZvciBXaW5kIFJpdmVyIFBQTUMgYm9hcmQiCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBNSVBTX0dUNjQxMjAKKwlzZWxlY3QgU1dBUF9JT19TUEFDRQorCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKKwlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IyCisJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFM2NF9SMQorCXNlbGVjdCBTWVNfSEFTX0NQVV9ORVZBREEKKwlzZWxlY3QgU1lTX0hBU19DUFVfUk03MDAwCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgV2luZCBSaXZlciBNSVBTMzIgNEtDIFBQTUMgZXZhbHVhdGlvbgorCSAgYm9hcmQsIHdoaWNoIGlzIGJhc2VkIG9uIEdUNjQxMjAgYnJpZGdlIGNoaXAuCisKIGNvbmZpZyBNSVBTX1NJTQogCWJvb2wgJ01JUFMgc2ltdWxhdG9yIChNSVBTc2ltKScKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCkBAIC00MzgsNTMgKzQ4OSwxNiBAQAogCiBjb25maWcgUE5YODU1MF9WMlBDSQogCWJvb2wgIlBoaWxpcHMgUE5YODU1MCBiYXNlZCBWaXBlcjItUENJIGJvYXJkIgorCWRlcGVuZHMgb24gQlJPS0VOCiAJc2VsZWN0IFBOWDg1NTAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFBOWDg1NTBfSkJTCiAJYm9vbCAiUGhpbGlwcyBQTlg4NTUwIGJhc2VkIEpCUyBib2FyZCIKKwlkZXBlbmRzIG9uIEJST0tFTgogCXNlbGVjdCBQTlg4NTUwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKLWNvbmZpZyBEREI1MDc0Ci0JYm9vbCAiTkVDIEREQiBWcmMtNTA3NCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBEREI1WFhYX0NPTU1PTgotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSEFWRV9TVERfUENfU0VSSUFMX1BPUlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBJUlFfQ1BVCi0Jc2VsZWN0IEk4MjU5Ci0Jc2VsZWN0IElTQQotCXNlbGVjdCBTWVNfSEFTX0NQVV9SNTAwMAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWUjUwMDAtYmFzZWQgTkVDIEREQiBWcmMtNTA3NAotCSAgZXZhbHVhdGlvbiBib2FyZC4KLQotY29uZmlnIEREQjU0NzYKLQlib29sICJORUMgRERCIFZyYy01NDc2IgotCXNlbGVjdCBEREI1WFhYX0NPTU1PTgotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSEFWRV9TVERfUENfU0VSSUFMX1BPUlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBJUlFfQ1BVCi0Jc2VsZWN0IEk4MjU5Ci0Jc2VsZWN0IElTQQotCXNlbGVjdCBTWVNfSEFTX0NQVV9SNTQzMgotCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBSNTQzMi1iYXNlZCBORUMgRERCIFZyYy01NDc2Ci0JICBldmFsdWF0aW9uIGJvYXJkLgotCi0JICBGZWF0dXJlcyA6IGtlcm5lbCBkZWJ1Z2dpbmcsIHNlcmlhbCB0ZXJtaW5hbCwgTkZTIHJvb3QgZnMsIG9uLWJvYXJkCi0JICBldGhlciBwb3J0IFVTQiwgQUM5NywgUENJLCBQQ0kgVkdBIGNhcmQgJiBmcmFtZWJ1ZmZlciBjb25zb2xlLAotCSAgSURFIGNvbnRyb2xsZXIsIFBTMiBrZXlib2FyZCwgUFMyIG1vdXNlLCBldGMuCi0KIGNvbmZpZyBEREI1NDc3CiAJYm9vbCAiTkVDIEREQiBWcmMtNTQ3NyIKIAlzZWxlY3QgRERCNVhYWF9DT01NT04KQEAgLTU0Niw2ICs1NjAsMjAgQEAKIAkgIHNpbXVsYXRlIGFjdHVhbCBNSVBTIGhhcmR3YXJlIHBsYXRmb3Jtcy4gIE1vcmUgaW5mb3JtYXRpb24gb24gUWVtdQogCSAgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cubGludXgtbWlwcy5vcmcvd2lraS9RZW11LgogCitjb25maWcgTUFSS0VJTlMKKwlib29sICJTdXBwb3J0IGZvciBORUMgRU1NQTJSSCBNYXJrLWVpbnMiCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1dBUF9JT19TUEFDRQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfQ1BVX1I1MDAwCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBSNTQzMi1iYXNlZCBORUMgTWFyay1laW5zCisJICBib2FyZHMgd2l0aCBSNTUwMCBDUFUuCisKIGNvbmZpZyBTR0lfSVAyMgogCWJvb2wgIlNHSSBJUDIyIChJbmR5L0luZGlnbzIpIgogCXNlbGVjdCBBUkMKQEAgLTU1NSw2ICs1ODMsNyBAQAogCXNlbGVjdCBIV19IQVNfRUlTQQogCXNlbGVjdCBJUDIyX0NQVV9TQ0FDSEUKIAlzZWxlY3QgSVJRX0NQVQorCXNlbGVjdCBOT19JU0EgaWYgSVNBCiAJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKIAlzZWxlY3QgU1lTX0hBU19DUFVfUjRYMDAKIAlzZWxlY3QgU1lTX0hBU19DUFVfUjUwMDAKQEAgLTU3Nyw2ICs2MDYsNyBAQAogCXNlbGVjdCBTWVNfSEFTX0NQVV9SMTAwMDAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQogCWhlbHAKIAkgIFRoaXMgYXJlIHRoZSBTR0kgT3JpZ2luIDIwMCwgT3JpZ2luIDIwMDAgYW5kIE9ueXggMiBHcmFwaGljcwogCSAgd29ya3N0YXRpb25zLiAgVG8gY29tcGlsZSBhIExpbnV4IGtlcm5lbCB0aGF0IHJ1bnMgb24gdGhlc2UsIHNheSBZCkBAIC03MDcsOCArNzM3LDggQEAKIAogY29uZmlnIFNOSV9STTIwMF9QQ0kKIAlib29sICJTTkkgUk0yMDAgUENJIgotCXNlbGVjdCBBUkMKLQlzZWxlY3QgQVJDMzIKKwlzZWxlY3QgQVJDIGlmIENQVV9MSVRUTEVfRU5ESUFOCisJc2VsZWN0IEFSQzMyIGlmIENQVV9MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCkBAIC03MTksMTAgKzc0OSwxMyBAQAogCXNlbGVjdCBJODI1MwogCXNlbGVjdCBJODI1OQogCXNlbGVjdCBJU0EKKwlzZWxlY3QgU1dBUF9JT19TUEFDRSBpZiBDUFVfQklHX0VORElBTgogCXNlbGVjdCBTWVNfSEFTX0NQVV9SNFgwMAorCXNlbGVjdCBTWVNfSEFTX0NQVV9SNTAwMAorCXNlbGVjdCBSNTAwMF9DUFVfU0NBQ0hFCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4gaWYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJaGVscApAQCAtOTc5LDYgKzEwMTIsMTEgQEAKIGNvbmZpZyBTV0FQX0lPX1NQQUNFCiAJYm9vbAogCitjb25maWcgRU1NQTJSSAorCWJvb2wKKwlkZXBlbmRzIG9uIE1BUktFSU5TCisJZGVmYXVsdCB5CisKICMKICMgVW5mb3J0dW5hdGVseSBub3QgYWxsIEdUNjQxMjAgc3lzdGVtcyBydW4gdGhlIGNoaXAgYXQgdGhlIHNhbWUgY2xvY2suCiAjIEFzIHRoZSB1c2VyIGZvciB0aGUgY2xvY2sgcmF0ZSBhbmQgdHJ5IHRvIG1pbmltaXplIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4KQEAgLTE2MDcsNiArMTY0NSwyOCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uICFOVU1BCiAKK2NvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKKwlib29sCisJZGVmYXVsdCB5IGlmIFNHSV9JUDI3CisJaGVscAorCSAgU2F5IFkgdG8gdXBwb3J0IGVmZmljaWVudCBoYW5kbGluZyBvZiBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSwKKwkgIGZvciBhcmNoaXRlY3R1cmVzIHdoaWNoIGFyZSBlaXRoZXIgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykKKwkgIG9yIGhhdmUgaHVnZSBob2xlcyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBmb3Igb3RoZXIgcmVhc29ucy4KKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZtL251bWE+IGZvciBtb3JlLgorCitjb25maWcgTlVNQQorCWJvb2wgIk5VTUEgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19OVU1BCisJaGVscAorCSAgU2F5IFkgdG8gY29tcGlsZSB0aGUga2VybmVsIHRvIHN1cHBvcnQgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5CisJICBBY2Nlc3MpLiAgVGhpcyBvcHRpb24gaW1wcm92ZXMgcGVyZm9ybWFuY2Ugb24gc3lzdGVtcyB3aXRoIG1vcmUKKwkgIHRoYW4gdHdvIG5vZGVzOyBvbiB0d28gbm9kZSBzeXN0ZW1zIGl0IGlzIGdlbmVyYWxseSBiZXR0ZXIgdG8KKwkgIGxlYXZlIGl0IGRpc2FibGVkOyBvbiBzaW5nbGUgbm9kZSBzeXN0ZW1zIGRpc2FibGUgdGhpcyBvcHRpb24KKwkgIGRpc2FibGVkLgorCitjb25maWcgU1lTX1NVUFBPUlRTX05VTUEKKwlib29sCisKIGNvbmZpZyBOT0RFU19TSElGVAogCWludAogCWRlZmF1bHQgIjYiCkBAIC0xNjUxLDYgKzE3MTEsNzcgQEAKIAkgIFRoaXMgaXMgcHVyZWx5IHRvIHNhdmUgbWVtb3J5IC0gZWFjaCBzdXBwb3J0ZWQgQ1BVIGFkZHMKIAkgIGFwcHJveGltYXRlbHkgZWlnaHQga2lsb2J5dGVzIHRvIHRoZSBrZXJuZWwgaW1hZ2UuCiAKKyMKKyMgVGltZXIgSW50ZXJydXB0IEZyZXF1ZW5jeSBDb25maWd1cmF0aW9uCisjCisKK2Nob2ljZQorCXByb21wdCAiVGltZXIgZnJlcXVlbmN5IgorCWRlZmF1bHQgSFpfMjUwCisJaGVscAorCSBBbGxvd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRpbWVyIGZyZXF1ZW5jeS4KKworCWNvbmZpZyBIWl80OAorCQlib29sICI0OCBIWiIgaWYgU1lTX1NVUFBPUlRTXzQ4SFoKKworCWNvbmZpZyBIWl8xMDAKKwkJYm9vbCAiMTAwIEhaIiBpZiBTWVNfU1VQUE9SVFNfMTAwSFogfHwgU1lTX1NVUFBPUlRTX0FSQklUX0haCisKKwljb25maWcgSFpfMTI4CisJCWJvb2wgIjEyOCBIWiIgaWYgU1lTX1NVUFBPUlRTXzEyOEhaIHx8IFNZU19TVVBQT1JUU19BUkJJVF9IWgorCisJY29uZmlnIEhaXzI1MAorCQlib29sICIyNTAgSFoiIGlmIFNZU19TVVBQT1JUU18yNTBIWiB8fCBTWVNfU1VQUE9SVFNfQVJCSVRfSFoKKworCWNvbmZpZyBIWl8yNTYKKwkJYm9vbCAiMjU2IEhaIiBpZiBTWVNfU1VQUE9SVFNfMjU2SFogfHwgU1lTX1NVUFBPUlRTX0FSQklUX0haCisKKwljb25maWcgSFpfMTAwMAorCQlib29sICIxMDAwIEhaIiBpZiBTWVNfU1VQUE9SVFNfMTAwMEhaIHx8IFNZU19TVVBQT1JUU19BUkJJVF9IWgorCisJY29uZmlnIEhaXzEwMjQKKwkJYm9vbCAiMTAyNCBIWiIgaWYgU1lTX1NVUFBPUlRTXzEwMjRIWiB8fCBTWVNfU1VQUE9SVFNfQVJCSVRfSFoKKworZW5kY2hvaWNlCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfNDhIWgorCWJvb2wKKworY29uZmlnIFNZU19TVVBQT1JUU18xMDBIWgorCWJvb2wKKworY29uZmlnIFNZU19TVVBQT1JUU18xMjhIWgorCWJvb2wKKworY29uZmlnIFNZU19TVVBQT1JUU18yNTBIWgorCWJvb2wKKworY29uZmlnIFNZU19TVVBQT1JUU18yNTZIWgorCWJvb2wKKworY29uZmlnIFNZU19TVVBQT1JUU18xMDAwSFoKKwlib29sCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfMTAyNEhaCisJYm9vbAorCitjb25maWcgU1lTX1NVUFBPUlRTX0FSQklUX0haCisJYm9vbAorCWRlZmF1bHQgeSBpZiAhU1lTX1NVUFBPUlRTXzQ4SFogJiYgIVNZU19TVVBQT1JUU18xMDBIWiAmJiBcCisJCSAgICAgIVNZU19TVVBQT1JUU18xMjhIWiAmJiAhU1lTX1NVUFBPUlRTXzI1MEhaICYmIFwKKwkJICAgICAhU1lTX1NVUFBPUlRTXzI1NkhaICYmICFTWVNfU1VQUE9SVFNfMTAwMEhaICYmIFwKKwkJICAgICAhU1lTX1NVUFBPUlRTXzEwMjRIWgorCitjb25maWcgSFoKKwlpbnQKKwlkZWZhdWx0IDQ4IGlmIEhaXzQ4CisJZGVmYXVsdCAxMDAgaWYgSFpfMTAwCisJZGVmYXVsdCAxMjggaWYgSFpfMTI4CisJZGVmYXVsdCAyNTAgaWYgSFpfMjUwCisJZGVmYXVsdCAyNTYgaWYgSFpfMjU2CisJZGVmYXVsdCAxMDAwIGlmIEhaXzEwMDAKKwlkZWZhdWx0IDEwMjQgaWYgSFpfMTAyNAorCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCiAKIGNvbmZpZyBSVENfRFMxNzQyCkBAIC0xNzEwLDYgKzE4NDEsOSBAQAogY29uZmlnIElTQQogCWJvb2wKIAorY29uZmlnIE5PX0lTQQorCWJvb2wKKwogY29uZmlnIEVJU0EKIAlib29sICJFSVNBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIV19IQVNfRUlTQQpAQCAtMTg0MCw2ICsxOTc0LDMyIEBACiAJYm9vbCAiUG93ZXIgTWFuYWdlbWVudCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFNPQ19BVTFYMDAKIAorY29uZmlnIEFQTQorICAgICAgICB0cmlzdGF0ZSAiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb24iCisJZGVwZW5kcyBvbiBQTQorICAgICAgICAtLS1oZWxwLS0tCisJICBBUE0gaXMgYSBCSU9TIHNwZWNpZmljYXRpb24gZm9yIHNhdmluZyBwb3dlciB1c2luZyBzZXZlcmFsIGRpZmZlcmVudAorCSAgdGVjaG5pcXVlcy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvciBiYXR0ZXJ5IHBvd2VyZWQgc3lzdGVtcyB3aXRoCisJICBBUE0gY29tcGxpYW50IEJJT1Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBzeXN0ZW0gdGltZSB3aWxsIGJlCisJICByZXNldCBhZnRlciBhIFJFU1VNRSBvcGVyYXRpb24sIHRoZSAvcHJvYy9hcG0gZGV2aWNlIHdpbGwgcHJvdmlkZQorCSAgYmF0dGVyeSBzdGF0dXMgaW5mb3JtYXRpb24sIGFuZCB1c2VyLXNwYWNlIHByb2dyYW1zIHdpbGwgcmVjZWl2ZQorCSAgbm90aWZpY2F0aW9uIG9mIEFQTSAiZXZlbnRzIiAoZS5nLiBiYXR0ZXJ5IHN0YXR1cyBjaGFuZ2UpLgorCisJICBJbiBvcmRlciB0byB1c2UgQVBNLCB5b3Ugd2lsbCBuZWVkIHN1cHBvcnRpbmcgc29mdHdhcmUuIEZvciBsb2NhdGlvbgorCSAgYW5kIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9wbS50eHQ+IGFuZCB0aGUKKwkgIEJhdHRlcnkgUG93ZXJlZCBMaW51eCBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbQorCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KKworCSAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3BpbiBkb3duIGRpc2sgZHJpdmVzIChzZWUgdGhlIGhkcGFybSg4KQorCSAgbWFucGFnZSAoIm1hbiA4IGhkcGFybSIpIGZvciB0aGF0KSwgYW5kIGl0IGRvZXNuJ3QgdHVybiBvZmYKKwkgIFZFU0EtY29tcGxpYW50ICJncmVlbiIgbW9uaXRvcnMuCisKKwkgIEdlbmVyYWxseSwgaWYgeW91IGRvbid0IGhhdmUgYSBiYXR0ZXJ5IGluIHlvdXIgbWFjaGluZSwgdGhlcmUgaXNuJ3QKKwkgIG11Y2ggcG9pbnQgaW4gdXNpbmcgdGhpcyBkcml2ZXIgYW5kIHlvdSBzaG91bGQgc2F5IE4uIElmIHlvdSBnZXQKKwkgIHJhbmRvbSBrZXJuZWwgT09QU2VzIG9yIHJlYm9vdHMgdGhhdCBkb24ndCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8KKwkgIGFueXRoaW5nLCB0cnkgZGlzYWJsaW5nL2VuYWJsaW5nIHRoaXMgb3B0aW9uIChvciBkaXNhYmxpbmcvZW5hYmxpbmcKKwkgIEFQTSBpbiB5b3VyIEJJT1MpLgorCiBlbmRtZW51CiAKIHNvdXJjZSAibmV0L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggMTMzOTAwYS4uZDU5MzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtODMsNiArODMsOCBAQAogTERGTEFHU192bWxpbnV4CQkJKz0gLUcgMCAtc3RhdGljIC1uIC1ub3N0ZGxpYgogTU9ERkxBR1MJCQkrPSAtbWxvbmctY2FsbHMKIAorY2ZsYWdzLXkgKz0gLWZmcmVlc3RhbmRpbmcKKwogIwogIyBXZSBleHBsaWNpdGx5IGFkZCB0aGUgZW5kaWFubmVzcyBzcGVjaWZpZXIgaWYgbmVlZGVkLCB0aGlzIGFsbG93cwogIyB0byBjb21waWxlIGtlcm5lbHMgd2l0aCBhIHRvb2xjaGFpbiBmb3IgdGhlIG90aGVyIGVuZGlhbm5lc3MuIFdlCkBAIC0yODUsNiArMjg3LDEzIEBACiBsb2FkLSQoQ09ORklHX01JUFNfRVY5NjEwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCiAKICMKKyMgV2luZCBSaXZlciBQUE1DIEJvYXJkICg0S0MgKyBHVDY0MTIwKQorIworY29yZS0kKENPTkZJR19XUl9QUE1DKQkJKz0gYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jLworY2ZsYWdzLSQoQ09ORklHX1dSX1BQTUMpCQkrPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC13cnBwbWMKK2xvYWQtJChDT05GSUdfV1JfUFBNQykJCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCiAjIEdsb2Jlc3BhbiBJVlIgZXZhbCBib2FyZCB3aXRoIFFFRCA1MjMxIENQVQogIwogY29yZS0kKENPTkZJR19JVEVfQk9BUkRfR0VOKQkrPSBhcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljLwpAQCAtMzc5LDYgKzM4OCwxMyBAQAogbG9hZC0kKENPTkZJR19NT01FTkNPX09DRUxPVF8zKSAJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCiAKICMKKyMgQmFzbGVyIGVYY2l0ZQorIworY29yZS0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSBhcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS8KK2NmbGFncy0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUKK2xvYWQtJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJKz0gMHg4MDEwMDAwMAorCisjCiAjIE1vbWVudHVtIEphZ3VhciBBVFgKICMKIGNvcmUtJChDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYKQkrPSBhcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC8KQEAgLTM5NSwxOCArNDExLDYgQEAKIGNvcmUtJChDT05GSUdfRERCNVhYWF9DT01NT04pCSs9IGFyY2gvbWlwcy9kZGI1eHh4L2NvbW1vbi8KIAogIwotIyBORUMgRERCIFZyYy01MDc0Ci0jCi1jb3JlLSQoQ09ORklHX0REQjUwNzQpCQkrPSBhcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0LwotbG9hZC0kKENPTkZJR19EREI1MDc0KQkJKz0gMHhmZmZmZmZmZjgwMDgwMDAwCi0KLSMKLSMgTkVDIEREQiBWcmMtNTQ3NgotIwotY29yZS0kKENPTkZJR19EREI1NDc2KQkJKz0gYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni8KLWxvYWQtJChDT05GSUdfRERCNTQ3NikJCSs9IDB4ZmZmZmZmZmY4MDA4MDAwMAotCi0jCiAjIE5FQyBEREIgVnJjLTU0NzcKICMKIGNvcmUtJChDT05GSUdfRERCNTQ3NykJCSs9IGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvCkBAIC00NjgsNiArNDcyLDE1IEBACiAjY2ZsYWdzLSQoQ09ORklHX1BOWDg1NTBfSkJTKQkrPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC1wbng4NTUwCiBsb2FkLSQoQ09ORklHX1BOWDg1NTBfSkJTKQkrPSAweGZmZmZmZmZmODAwNjAwMDAKIAorIyBORUMgRU1NQTJSSCBib2FyZHMKKyMKK2NvcmUtJChDT05GSUdfRU1NQTJSSCkgICAgICAgICAgKz0gYXJjaC9taXBzL2VtbWEycmgvY29tbW9uLworY2ZsYWdzLSQoQ09ORklHX0VNTUEyUkgpICAgICAgICArPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC1lbW1hMnJoCisKKyMgTkVDIEVNTUEyUkggTWFyay1laW5zCitjb3JlLSQoQ09ORklHX01BUktFSU5TKSAgICAgICAgICs9IGFyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zLworbG9hZC0kKENPTkZJR19NQVJLRUlOUykgICAgICAgICArPSAweGZmZmZmZmZmODgxMDAwMDAKKwogIwogIyBTR0kgSVAyMiAoSW5keS9JbmRpZ28yKQogIwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vYXUxeHh4X2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vYXUxeHh4X2lycW1hcC5jCmluZGV4IDBiMmMwM2MuLjVhMWUzNjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2F1MXh4eF9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9hdTF4eHhfaXJxbWFwLmMKQEAgLTU1LDcgKzU1LDcgQEAKICAqIENhcmVmdWwgaWYgeW91IGNoYW5nZSBtYXRjaCAyIHJlcXVlc3QhCiAgKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGxvdyBsZXZlbCBkaXNwYXRjaCBjb2RlLgogICovCi1hdTF4eHhfaXJxX21hcF90IGF1MXh4eF9pYzBfbWFwW10gPSB7CithdTF4eHhfaXJxX21hcF90IF9faW5pdGRhdGEgYXUxeHh4X2ljMF9tYXBbXSA9IHsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCiAJeyBBVTEwMDBfVUFSVDBfSU5ULCBJTlRDX0lOVF9ISUdIX0xFVkVMLCAwfSwKQEAgLTIyMCw1ICsyMjAsNSBAQAogCiB9OwogCi1pbnQgYXUxeHh4X2ljMF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pYzBfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfaWMwX25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pYzBfbWFwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGNpLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYwppbmRleCA0ZTVhNmUxLi5iMTM5MmFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYwpAQCAtNDAsMTcgKzQwLDE3IEBACiAKIC8qIFRCRCAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JInBjaSBJTyBzcGFjZSIsCi0JKHUzMilQQ0lfSU9fU1RBUlQsCi0JKHUzMilQQ0lfSU9fRU5ELAotCUlPUkVTT1VSQ0VfSU8KKwkuc3RhcnQJPSBQQ0lfSU9fU1RBUlQsCisJLmVuZAk9IFBDSV9JT19FTkQsCisJLm5hbWUJPSAiUENJIElPIHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2UgPSB7Ci0JInBjaSBtZW1vcnkgc3BhY2UiLAotCSh1MzIpUENJX01FTV9TVEFSVCwKLQkodTMyKVBDSV9NRU1fRU5ELAotCUlPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gUENJX01FTV9TVEFSVCwKKwkuZW5kCT0gUENJX01FTV9FTkQsCisJLm5hbWUJPSAiUENJIG1lbW9yeSBzcGFjZSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBhdTF4X3BjaV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYwppbmRleCAzMDdlOThjLi45NzE2NWI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKQEAgLTQ5LDE3ICs0OSwxMyBAQAogZXh0ZXJuIHZvaWQgYXUxMDAwX3Jlc3RhcnQoY2hhciAqKTsKIGV4dGVybiB2b2lkIGF1MTAwMF9oYWx0KHZvaWQpOwogZXh0ZXJuIHZvaWQgYXUxMDAwX3Bvd2VyX29mZih2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgaW9wb3J0X3Jlc291cmNlOwotZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBpb21lbV9yZXNvdXJjZTsKLWV4dGVybiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIGV4dGVybiB2b2lkIGF1MXhfdGltZV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgKCpib2FyZF90aW1lcl9zZXR1cCkoc3RydWN0IGlycWFjdGlvbiAqaXJxKTsKIGV4dGVybiB2b2lkIGF1MXhfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKTsKIGV4dGVybiB2b2lkIGF1MXh4eF90aW1lX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBhdTF4eHhfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKTsKIGV4dGVybiB2b2lkIHNldF9jcHVzcGVjKHZvaWQpOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXN0cnVjdAljcHVfc3BlYyAqc3A7CiAJY2hhciAqYXJncHRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCmluZGV4IGY3NGQ2NmEuLjg0MmUxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKQEAgLTUwLDEwICs1MCw2IEBACiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCi1leHRlcm4gdm9pZCBkb19zb2Z0aXJxKHZvaWQpOwotZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotdW5zaWduZWQgbG9uZyBtaXNzZWRfaGVhcnRfYmVhdHMgPSAwOwotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByNGtfb2Zmc2V0OyAvKiBBbW91bnQgdG8gaW5jcmVtZW50IGNvbXBhcmUgcmVnIGVhY2ggdGltZSAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcjRrX2N1cjsgICAgLyogV2hhdCBjb3VudGVyIHNob3VsZCBiZSBhdCBuZXh0IHRpbWVyIGlycSAqLwogaW50CW5vX2F1MXh4eF8zMmtoejsKQEAgLTM4OCwxMCArMzg0LDkgQEAKIH0KICNlbmRpZgogCi12b2lkIGF1MXh4eF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCit2b2lkIF9faW5pdCBhdTF4eHhfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQogewotICAgICAgICB1bnNpZ25lZCBpbnQgZXN0X2ZyZXE7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCpkb19nZXR0aW1lb2Zmc2V0KSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQgZXN0X2ZyZXE7CiAKIAlwcmludGsoImNhbGN1bGF0aW5nIHI0a29mZi4uLiAiKTsKIAlyNGtfb2Zmc2V0ID0gY2FsX3I0a29mZigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jc2IyNTAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NzYjI1MC9pcnFtYXAuYwppbmRleCA1Y2IxMTY2Li41N2Q2MDQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NzYjI1MC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NzYjI1MC9pcnFtYXAuYwpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXUxMDAwLmg+CiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCiAJeyBBVTE1MDBfR1BJT18yMDQsIElOVENfSU5UX0hJR0hfTEVWRUwsIDB9LAogCXsgQVUxNTAwX0dQSU9fMjAxLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKQEAgLTU3LDQgKzU3LDQgQEAKIAl7IEFVMTUwMF9HUElPXzIwNywgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sCiB9OwogCi1pbnQgYXUxeHh4X25yX2lycXMgPSBzaXplb2YoYXUxeHh4X2lycV9tYXApL3NpemVvZihhdTF4eHhfaXJxX21hcF90KTsKK2ludCBfX2luaXRkYXRhIGF1MXh4eF9ucl9pcnFzID0gQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2lycW1hcC5jCmluZGV4IGY2MzAyNGEuLjAxMzhjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2lycW1hcC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2lycW1hcC5jCkBAIC04MCw3ICs4MCw3IEBACiAjZW5kaWYKIAogCi1hdTF4eHhfaXJxX21hcF90IGF1MXh4eF9pcnFfbWFwW10gPSB7CithdTF4eHhfaXJxX21hcF90IF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKIAogI2lmbmRlZiBDT05GSUdfTUlQU19NSVJBR0UKICNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKQEAgLTEwMSw0ICsxMDEsNCBAQAogCiB9OwogCi1pbnQgYXUxeHh4X25yX2lycXMgPSBzaXplb2YoYXUxeHh4X2lycV9tYXApL3NpemVvZihhdTF4eHhfaXJxX21hcF90KTsKK2ludCBfX2luaXRkYXRhIGF1MXh4eF9ucl9pcnFzID0gQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2h5ZHJvZ2VuMy9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvaHlkcm9nZW4zL2lycW1hcC5jCmluZGV4IDZlYWNhYTAuLjE0ZTFlZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvaHlkcm9nZW4zL2lycW1hcC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvaHlkcm9nZW4zL2lycW1hcC5jCkBAIC00NywxMCArNDcsMTAgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2F1MTAwMC5oPgogCi1hdTF4eHhfaXJxX21hcF90IGF1MXh4eF9pcnFfbWFwW10gPSB7CithdTF4eHhfaXJxX21hcF90IF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKIAogCS8qIHsgQVUxNTAwX0dQSU9fMjA1LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwgKi8KIAl7IEFVMTAwMF9HUElPXzIxLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvbXR4LTEvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL210eC0xL2lycW1hcC5jCmluZGV4IGY5YTBhOGIuLjQ2OTNhNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvbXR4LTEvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9tdHgtMS9pcnFtYXAuYwpAQCAtNTgsNyArNTgsNyBAQAogIFs3XSA9IHsgLTEsIElOVEQsIElOVEMsIElOVFgsIElOVFh9LCAgIC8qIElEU0VMIDA3IC0gQWRhcHRlckQtU2xvdDEgKGJvdHRvbSkgKi8KIH07CiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogICAgICAgIHsgQVUxNTAwX0dQSU9fMjA0LCBJTlRDX0lOVF9ISUdIX0xFVkVMLCAwfSwKICAgICAgICB7IEFVMTUwMF9HUElPXzIwMSwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sCiAgICAgICAgeyBBVTE1MDBfR1BJT18yMDIsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LApAQCAtNjYsNCArNjYsNCBAQAogICAgICAgIHsgQVUxNTAwX0dQSU9fMjA1LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxMDAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9wYjEwMDAvaXJxbWFwLmMKaW5kZXggYTNjNDYwZS4uMTU2NTAwYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9wYjEwMDAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9wYjEwMDAvaXJxbWFwLmMKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCi1hdTF4eHhfaXJxX21hcF90IGF1MXh4eF9pcnFfbWFwW10gPSB7CithdTF4eHhfaXJxX21hcF90IF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKIAl7IEFVMTAwMF9HUElPXzE1LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxMTAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9wYjExMDAvaXJxbWFwLmMKaW5kZXggNDNiZTcxNS4uZDk4NjkxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9wYjExMDAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9wYjExMDAvaXJxbWFwLmMKQEAgLTQ3LDExICs0NywxMSBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCXsgQVUxMDAwX0dQSU9fOSwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sIC8vIFBDTUNJQSBDYXJkIEZ1bGx5X0ludGVydGVkIwogCXsgQVUxMDAwX0dQSU9fMTAsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LCAvLyBQQ01DSUEgQ2FyZCBTVFNDSEcjCiAJeyBBVTEwMDBfR1BJT18xMSwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sIC8vIFBDTUNJQSBDYXJkIElSUSMKIAl7IEFVMTAwMF9HUElPXzEzLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwgLy8gRENfSVJRIwogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9wYjEyMDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9pcnFtYXAuYwppbmRleCA1OWU3MGU1Li5iYWNjMGM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9pcnFtYXAuYwpAQCAtNTUsMTEgKzU1LDExIEBACiAjZGVmaW5lIFBCMTIwMF9JTlRfRU5EIERCMTIwMF9JTlRfRU5ECiAjZW5kaWYKIAotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7CiAJeyBBVTEwMDBfR1BJT183LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwgLy8gVGhpcyBpcyBleHRlcmFubCBpbnRlcnJ1cHQgY2FzY2FkZQogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwogCiAvKgogICoJU3VwcG9ydCBmb3IgRXh0ZXJuYWwgaW50ZXJydXB0cyBvbiB0aGUgUGJBdTEyMDAgRGV2ZWxvcG1lbnQgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL3BiMTUwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvcGIxNTAwL2lycW1hcC5jCmluZGV4IDhjYjc2YzIuLjQwOWQxNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxNTAwL2lycW1hcC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvcGIxNTAwL2lycW1hcC5jCkBAIC01Miw3ICs1Miw3IEBACiAgWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVER9LCAgIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KIH07CiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCXsgQVUxNTAwX0dQSU9fMjA0LCBJTlRDX0lOVF9ISUdIX0xFVkVMLCAwfSwKIAl7IEFVMTUwMF9HUElPXzIwMSwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sCiAJeyBBVTE1MDBfR1BJT18yMDIsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LApAQCAtNjAsNCArNjAsNCBAQAogCXsgQVUxNTAwX0dQSU9fMjA1LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxNTUwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9wYjE1NTAvaXJxbWFwLmMKaW5kZXggNDdjN2ExYy4uMjRhOWQxOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9wYjE1NTAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9wYjE1NTAvaXJxbWFwLmMKQEAgLTUyLDkgKzUyLDkgQEAKICBbMTNdID0JeyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URH0sICAgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAxIChyaWdodCkgKi8KIH07CiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCXsgQVUxMDAwX0dQSU9fMCwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sCiAJeyBBVTEwMDBfR1BJT18xLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAveHhzMTUwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAveHhzMTUwMC9pcnFtYXAuYwppbmRleCA1MmYyZjdkLi4zODQ0YzY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC94eHMxNTAwL2lycW1hcC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hdTEwMDAuaD4KIAotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7CiAJeyBBVTE1MDBfR1BJT18yMDQsIElOVENfSU5UX0hJR0hfTEVWRUwsIDB9LAogCXsgQVUxNTAwX0dQSU9fMjAxLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIAl7IEFVMTUwMF9HUElPXzIwMiwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sCkBAIC02Myw0ICs2Myw0IEBACiAJeyBBVTEwMDBfR1BJT181LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL01ha2VmaWxlIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5MTQyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBNYWtlZmlsZSBmb3IgQmFzbGVyIGVYY2l0ZQorIworCitvYmotJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJKz0gZXhjaXRlX2lycS5vIGV4Y2l0ZV9wcm9tLm8gZXhjaXRlX3NldHVwLm8gXAorCQkJCSAgIGV4Y2l0ZV9kZXZpY2UubyBleGNpdGVfcHJvY2ZzLm8KKworb2JqLSQoQ09ORklHX0tHREIpCQkrPSBleGNpdGVfZGJnX2lvLm8KK29iai1tCQkJCSs9IGV4Y2l0ZV9pb2Rldi5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGJnX2lvLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGJnX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmNmJkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kYmdfaW8uYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9nZGItc3R1Yi5oPgorI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgorI2luY2x1ZGUgPGV4Y2l0ZS5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApICYmIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUyA+IDEKKyNlcnJvciBEZWJ1ZyBwb3J0IHVzZWQgYnkgc2VyaWFsIGRyaXZlcgorI2VuZGlmCisKKyNkZWZpbmUgVUFSVF9DTEsJCTI1MDAwMDAwCisjZGVmaW5lIEJBU0VfQkFVRAkJKFVBUlRfQ0xLIC8gMTYpCisjZGVmaW5lIFJFR0lTVEVSX0JBU0VfMAkJMHgwMjA4VUwKKyNkZWZpbmUgUkVHSVNURVJfQkFTRV8xCQkweDAyMzhVTAorCisjZGVmaW5lIFJFR0lTVEVSX0JBU0VfREJHCVJFR0lTVEVSX0JBU0VfMQorCisjZGVmaW5lIENQUlIJMHgwMDA0CisjZGVmaW5lIFVBQ0ZHCTB4MDIwMAorI2RlZmluZSBVQUlOVFMJMHgwMjA0CisjZGVmaW5lIFVBUkJSCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAwMCkKKyNkZWZpbmUgVUFUSFIJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDA0KQorI2RlZmluZSBVQURMTAkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMDgpCisjZGVmaW5lIFVBSUVSCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAwYykKKyNkZWZpbmUgVUFETEgJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDEwKQorI2RlZmluZSBVQUlJUgkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMTQpCisjZGVmaW5lIFVBRkNSCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAxOCkKKyNkZWZpbmUgVUFMQ1IJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDFjKQorI2RlZmluZSBVQU1DUgkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMjApCisjZGVmaW5lIFVBTFNSCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAyNCkKKyNkZWZpbmUgVUFNU1IJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDI4KQorI2RlZmluZSBVQVNDUgkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMmMpCisKKyNkZWZpbmUJUEFSSVRZX05PTkUJMAorI2RlZmluZQlQQVJJVFlfT0RECTB4MDgKKyNkZWZpbmUJUEFSSVRZX0VWRU4JMHgxOAorI2RlZmluZQlQQVJJVFlfTUFSSwkweDI4CisjZGVmaW5lCVBBUklUWV9TUEFDRQkweDM4CisKKyNkZWZpbmUJREFUQV81QklUCTB4MAorI2RlZmluZQlEQVRBXzZCSVQJMHgxCisjZGVmaW5lCURBVEFfN0JJVAkweDIKKyNkZWZpbmUJREFUQV84QklUCTB4MworCisjZGVmaW5lCVNUT1BfMUJJVAkweDAKKyNkZWZpbmUJU1RPUF8yQklUCTB4NAorCisjZGVmaW5lIEJBVURfREJHCTU3NjAwCisjZGVmaW5lCVBBUklUWV9EQkcJUEFSSVRZX05PTkUKKyNkZWZpbmUJREFUQV9EQkcJREFUQV84QklUCisjZGVmaW5lCVNUT1BfREJHCVNUT1BfMUJJVAorCisvKiBJbml0aWFsaXplIHRoZSBzZXJpYWwgcG9ydCBmb3IgS0dEQiBkZWJ1Z2dpbmcgKi8KK3ZvaWQgX19pbml0IGV4Y2l0ZV9rZ2RiX2luaXQodm9pZCkKK3sKKwljb25zdCB1MzIgZGl2aXNvciA9IEJBU0VfQkFVRCAvIEJBVURfREJHOworCisJLyogVGFrZSB0aGUgVUFSVCBvdXQgb2YgcmVzZXQgKi8KKwl0aXRhbl93cml0ZWwoMHgwMGZmMWNmZiwgQ1BSUik7CisJdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIFVBQ0ZHKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMiwgVUFDRkcpOworCisJdGl0YW5fd3JpdGVsKDB4MCwgVUFMQ1IpOworCXRpdGFuX3dyaXRlbCgweDAsIFVBSUVSKTsKKworCS8qIERpc2FibGUgRklGT3MgKi8KKwl0aXRhbl93cml0ZWwoMHgwMCwgVUFGQ1IpOworCisJdGl0YW5fd3JpdGVsKDB4ODAsIFVBTENSKTsKKwl0aXRhbl93cml0ZWwoZGl2aXNvciAmIDB4ZmYsIFVBRExMKTsKKwl0aXRhbl93cml0ZWwoKGRpdmlzb3IgJiAweGZmMDApID4+IDgsIFVBRExIKTsKKwl0aXRhbl93cml0ZWwoMHgwLCBVQUxDUik7CisKKwl0aXRhbl93cml0ZWwoREFUQV9EQkcgfCBQQVJJVFlfREJHIHwgU1RPUF9EQkcsIFVBTENSKTsKKworCS8qIEVuYWJsZSByZWNlaXZlciBpbnRlcnJ1cHQgKi8KKwl0aXRhbl9yZWFkbChVQVJCUik7CisJdGl0YW5fd3JpdGVsKDB4MSwgVUFJRVIpOworfQorCitpbnQgZ2V0RGVidWdDaGFyKHZvaWQpCit7CisJd2hpbGUgKCEodGl0YW5fcmVhZGwoVUFMU1IpICYgMHgxKSk7CisJcmV0dXJuIHRpdGFuX3JlYWRsKFVBUkJSKTsKK30KKworaW50IHB1dERlYnVnQ2hhcihpbnQgZGF0YSkKK3sKKwl3aGlsZSAoISh0aXRhbl9yZWFkbChVQUxTUikgJiAweDIwKSk7CisJdGl0YW5fd3JpdGVsKGRhdGEsIFVBVEhSKTsKKwlyZXR1cm4gMTsKK30KKworLyogS0dEQiBpbnRlcnJ1cHQgaGFuZGxlciAqLworYXNtbGlua2FnZSB2b2lkIGV4Y2l0ZV9rZ2RiX2ludGhkbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAodW5saWtlbHkoCisJCSgodGl0YW5fcmVhZGwoVUFJSVIpICYgMHg3KSA9PSA0KQorCQkmJiAoKHRpdGFuX3JlYWRsKFVBUkJSKSAmIDB4ZmYpID09IDB4MykpKQorCQkJc2V0X2FzeW5jX2JyZWFrcG9pbnQoJnJlZ3MtPmNwMF9lcGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RldmljZS5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZWM3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCisgKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgorCisjaW5jbHVkZSA8ZXhjaXRlLmg+CisjaW5jbHVkZSA8cm05a19ldGguaD4KKyNpbmNsdWRlIDxybTlrX3dkdC5oPgorI2luY2x1ZGUgPHJtOWtfeGljYXAuaD4KKyNpbmNsdWRlIDxleGNpdGVfbmFuZGZsYXNoLmg+CisKKyNpbmNsdWRlICJleGNpdGVfaW9kZXYuaCIKKworI2RlZmluZSBSTTlLX0dFX1VOSVQJMAorI2RlZmluZSBYSUNBUF9VTklUCTAKKyNkZWZpbmUgTkFORF9VTklUCTAKKworI2RlZmluZSBETExfVElNRU9VVAkzCQkvKiBzZWNvbmRzICovCisKKworI2RlZmluZSBSSU5JVChfX3N0YXJ0X18sIF9fZW5kX18sIF9fbmFtZV9fLCBfX3BhcmVudF9fKSB7CVwKKwkubmFtZQk9IF9fbmFtZV9fICJfMCIsCQkJCVwKKwkuc3RhcnQJPSAoX19zdGFydF9fKSwJCQkJCVwKKwkuZW5kCT0gKF9fZW5kX18pLAkJCQkJXAorCS5mbGFncwk9IDAsCQkJCQkJXAorCS5wYXJlbnQJPSAoX19wYXJlbnRfXykJCQkJCVwKK30KKworI2RlZmluZSBSSU5JVF9JUlEoX19pcnFfXywgX19uYW1lX18pIHsJXAorCS5uYW1lCT0gX19uYW1lX18gIl8wIiwJXAorCS5zdGFydAk9IChfX2lycV9fKSwJCVwKKwkuZW5kCT0gKF9faXJxX18pLAkJXAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAlcCisJLnBhcmVudAk9IE5VTEwJCQlcCit9CisKKworCitlbnVtIHsKKwlzbGljZV94aWNhcCwKKwlzbGljZV9ldGgKK307CisKKworCitzdGF0aWMgc3RydWN0IHJlc291cmNlCisJZXhjaXRlX2N0cl9yZXNvdXJjZSA9IHsKKwkJLm5hbWUJCT0gIkdQSSBjb3VudGVycyIsCisJCS5zdGFydAkJPSAwLAorCQkuZW5kCQk9IDUsCisJCS5mbGFncwkJPSAwLAorCQkucGFyZW50CQk9IE5VTEwsCisJCS5zaWJsaW5nCT0gTlVMTCwKKwkJLmNoaWxkCQk9IE5VTEwKKwl9LAorCWV4Y2l0ZV9ncGlzbGljZV9yZXNvdXJjZSA9IHsKKwkJLm5hbWUJCT0gIkdQSSBzbGljZXMiLAorCQkuc3RhcnQJCT0gMCwKKwkJLmVuZAkJPSAxLAorCQkuZmxhZ3MJCT0gMCwKKwkJLnBhcmVudAkJPSBOVUxMLAorCQkuc2libGluZwk9IE5VTEwsCisJCS5jaGlsZAkJPSBOVUxMCisJfSwKKwlleGNpdGVfbWRpb19jaGFubmVsX3Jlc291cmNlID0geworCQkubmFtZQkJPSAiTURJTyBjaGFubmVscyIsCisJCS5zdGFydAkJPSAwLAorCQkuZW5kCQk9IDEsCisJCS5mbGFncwkJPSAwLAorCQkucGFyZW50CQk9IE5VTEwsCisJCS5zaWJsaW5nCT0gTlVMTCwKKwkJLmNoaWxkCQk9IE5VTEwKKwl9LAorCWV4Y2l0ZV9maWZvbWVtX3Jlc291cmNlID0geworCQkubmFtZQkJPSAiRklGTyBtZW1vcnkiLAorCQkuc3RhcnQJCT0gMCwKKwkJLmVuZAkJPSA3NjcsCisJCS5mbGFncwkJPSAwLAorCQkucGFyZW50CQk9IE5VTEwsCisJCS5zaWJsaW5nCT0gTlVMTCwKKwkJLmNoaWxkCQk9IE5VTEwKKwl9LAorCWV4Y2l0ZV9zY3JhbV9yZXNvdXJjZSA9IHsKKwkJLm5hbWUJCT0gIlNjcmF0Y2ggUkFNIiwKKwkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX1NDUkFNLAorCQkuZW5kCQk9IEVYQ0lURV9QSFlTX1NDUkFNICsgRVhDSVRFX1NJWkVfU0NSQU0gLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLnNpYmxpbmcJPSBOVUxMLAorCQkuY2hpbGQJCT0gTlVMTAorCX0sCisJZXhjaXRlX2ZwZ2FfcmVzb3VyY2UgPSB7CisJCS5uYW1lCQk9ICJTeXN0ZW0gRlBHQSIsCisJCS5zdGFydAkJPSBFWENJVEVfUEhZU19GUEdBLAorCQkuZW5kCQk9IEVYQ0lURV9QSFlTX0ZQR0EgKyBFWENJVEVfU0laRV9GUEdBIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCQkucGFyZW50CQk9IE5VTEwsCisJCS5zaWJsaW5nCT0gTlVMTCwKKwkJLmNoaWxkCQk9IE5VTEwKKwl9LAorCWV4Y2l0ZV9uYW5kX3Jlc291cmNlID0geworCQkubmFtZQkJPSAiTkFORCBmbGFzaCBjb250cm9sIiwKKwkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX05BTkQsCisJCS5lbmQJCT0gRVhDSVRFX1BIWVNfTkFORCArIEVYQ0lURV9TSVpFX05BTkQgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLnNpYmxpbmcJPSBOVUxMLAorCQkuY2hpbGQJCT0gTlVMTAorCX0sCisJZXhjaXRlX3RpdGFuX3Jlc291cmNlID0geworCQkubmFtZQkJPSAiVElUQU4gcmVnaXN0ZXJzIiwKKwkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX1RJVEFOLAorCQkuZW5kCQk9IEVYQ0lURV9QSFlTX1RJVEFOICsgRVhDSVRFX1NJWkVfVElUQU4gLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLnNpYmxpbmcJPSBOVUxMLAorCQkuY2hpbGQJCT0gTlVMTAorCX07CisKKworCitzdGF0aWMgdm9pZCBhZGp1c3RfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnA7CisJY29uc3QgdW5zaWduZWQgbG9uZyBtYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNCisJCQkJICAgfCBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfRE1BOworCisJZm9yIChwID0gcmVzOyBwIDwgcmVzICsgbjsgcCsrKSB7CisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqIGNvbnN0IHBhcmVudCA9IHAtPnBhcmVudDsKKwkJaWYgKHBhcmVudCkgeworCQkJcC0+c3RhcnQgKz0gcGFyZW50LT5zdGFydDsKKwkJCXAtPmVuZCAgICs9IHBhcmVudC0+c3RhcnQ7CisJCQlwLT5mbGFncyA9ICBwYXJlbnQtPmZsYWdzICYgbWFzazsKKwkJfQorCX0KK30KKworCisKKyNpZiBkZWZpbmVkKENPTkZJR19FWENJVEVfRkNBUF9HUEkpIHx8IGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHhpY2FwX3JzcmNbXSA9IHsKKwlSSU5JVCgweDQ4NDAsIDB4NDg2ZiwgWElDQVBfUkVTT1VSQ0VfRklGT19SWCwgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCisJUklOSVQoMHg0OTQwLCAweDQ5NGIsIFhJQ0FQX1JFU09VUkNFX0ZJRk9fVFgsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4NTA0MCwgMHg1MTI3LCBYSUNBUF9SRVNPVVJDRV9YRE1BLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDEwMDAsIDB4MTEyZiwgWElDQVBfUkVTT1VSQ0VfUEtUUFJPQywgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCisJUklOSVQoMHgxMTAwLCAweDExMGYsIFhJQ0FQX1JFU09VUkNFX1BLVF9TVFJFQU0sICZleGNpdGVfZnBnYV9yZXNvdXJjZSksCisJUklOSVQoMHgwODAwLCAweDBiZmYsIFhJQ0FQX1JFU09VUkNFX0RNQURFU0MsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpLAorCVJJTklUKHNsaWNlX3hpY2FwLCBzbGljZV94aWNhcCwgWElDQVBfUkVTT1VSQ0VfR1BJX1NMSUNFLCAmZXhjaXRlX2dwaXNsaWNlX3Jlc291cmNlKSwKKwlSSU5JVCgweDAxMDAsIDB4MDJmZiwgWElDQVBfUkVTT1VSQ0VfRklGT19CTEssICZleGNpdGVfZmlmb21lbV9yZXNvdXJjZSksCisJUklOSVRfSVJRKFRJVEFOX0lSUSwgIFhJQ0FQX1JFU09VUkNFX0lSUSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHhpY2FwX3BkZXYgPSB7CisJLm5hbWUJCT0gWElDQVBfTkFNRSwKKwkuaWQJCT0gWElDQVBfVU5JVCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoeGljYXBfcnNyYyksCisJLnJlc291cmNlCT0geGljYXBfcnNyYworfTsKKworLyoKKyAqIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIEdQSSBwb3J0IHRoYXQgcmVjZWl2ZXMgdGhlCisgKiBpbWFnZSBkYXRhIGZyb20gdGhlIGVtYmVkZGVkIGNhbWVyYS4KKyAqLworc3RhdGljIGludCBfX2luaXQgeGljYXBfZGV2aW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGVuZDsKKwl1MzIgcmVnOworCWludCByZXR2YWw7CisKKwlhZGp1c3RfcmVzb3VyY2VzKHhpY2FwX3JzcmMsIEFSUkFZX1NJWkUoeGljYXBfcnNyYykpOworCisJLyogUG93ZXIgdXAgdGhlIHNsaWNlIGFuZCBjb25maWd1cmUgaXQuICovCisJcmVnID0gdGl0YW5fcmVhZGwoQ1BUQzFSKTsKKwlyZWcgJj0gfigweDExMTAwIDw8IHNsaWNlX3hpY2FwKTsKKwl0aXRhbl93cml0ZWwocmVnLCBDUFRDMVIpOworCisJLyogRW5hYmxlIHNsaWNlICYgRExMLiAqLworCXJlZz0gdGl0YW5fcmVhZGwoQ1BSUik7CisJcmVnICY9IH4oMHgwMDAzMDAwMyA8PCAoc2xpY2VfeGljYXAgKiAyKSk7CisJdGl0YW5fd3JpdGVsKHJlZywgQ1BSUik7CisKKwkvKiBXYWl0IGZvciBETExzIHRvIGxvY2sgKi8KKwl0ZW5kID0gamlmZmllcyArIERMTF9USU1FT1VUICogSFo7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRlbmQpKSB7CisJCWlmICghKH50aXRhbl9yZWFkbChDUERTUikgJiAoMHgxIDw8IChzbGljZV94aWNhcCAqIDQpKSkpCisJCQlicmVhazsKKwkJeWllbGQoKTsKKwl9CisKKwlpZiAofnRpdGFuX3JlYWRsKENQRFNSKSAmICgweDEgPDwgKHNsaWNlX3hpY2FwICogNCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IERMTCBub3QgbG9ja2VkIGFmdGVyICV1IHNlY29uZHNcbiIsCisJCSAgICAgICB4aWNhcF9wZGV2Lm5hbWUsIERMTF9USU1FT1VUKTsKKwkJcmV0dmFsID0gLUVUSU1FOworCX0gZWxzZSB7CisJCS8qIFJlZ2lzdGVyIHBsYXRmb3JtIGRldmljZSAqLworCQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnhpY2FwX3BkZXYpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK2RldmljZV9pbml0Y2FsbCh4aWNhcF9kZXZpbml0KTsKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19FWENJVEVfRkNBUF9HUEkpIHx8IGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSV9NT0RVTEUpICovCisKKworCisjaWYgZGVmaW5lZChDT05GSUdfV0RUX1JNOUtfR1BJKSB8fCBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUElfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcnNyY1tdID0geworCVJJTklUKDAsIDAsIFdEVF9SRVNPVVJDRV9DT1VOVEVSLCAmZXhjaXRlX2N0cl9yZXNvdXJjZSksCisJUklOSVQoMHgwMDg0LCAweDAwOGYsIFdEVF9SRVNPVVJDRV9SRUdTLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVF9JUlEoVElUQU5fSVJRLCAgV0RUX1JFU09VUkNFX0lSUSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHdkdF9wZGV2ID0geworCS5uYW1lCQk9IFdEVF9OQU1FLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3JzcmMpLAorCS5yZXNvdXJjZQk9IHdkdF9yc3JjCit9OworCisvKgorICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgR1BJIHBvcnQgdGhhdCByZWNlaXZlcyB0aGUKKyAqIGltYWdlIGRhdGEgZnJvbSB0aGUgZW1iZWRkZWQgY2FtZXJhLgorICovCitzdGF0aWMgaW50IF9faW5pdCB3ZHRfZGV2aW5pdCh2b2lkKQoreworCWFkanVzdF9yZXNvdXJjZXMod2R0X3JzcmMsIEFSUkFZX1NJWkUod2R0X3JzcmMpKTsKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3ZHRfcGRldik7Cit9CisKK2RldmljZV9pbml0Y2FsbCh3ZHRfZGV2aW5pdCk7CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfV0RUX1JNOUtfR1BJKSB8fCBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUElfTU9EVUxFKSAqLworCisKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleGNpdGVfbmFuZGZsYXNoX3JzcmNbXSA9IHsKKyAJUklOSVQoMHgyMDAwLCAweDIwMWYsIEVYQ0lURV9OQU5ERkxBU0hfUkVTT1VSQ0VfUkVHUywgICZleGNpdGVfbmFuZF9yZXNvdXJjZSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4Y2l0ZV9uYW5kZmxhc2hfcGRldiA9IHsKKwkubmFtZQkJPSAiZXhjaXRlX25hbmQiLAorCS5pZAkJPSBOQU5EX1VOSVQsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV4Y2l0ZV9uYW5kZmxhc2hfcnNyYyksCisJLnJlc291cmNlCT0gZXhjaXRlX25hbmRmbGFzaF9yc3JjCit9OworCisvKgorICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgYWNjZXNzIHRvIHRoZSBuYW5kLWZsYXNoCisgKiBwb3J0CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kZmxhc2hfZGV2aW5pdCh2b2lkKQoreworCWFkanVzdF9yZXNvdXJjZXMoZXhjaXRlX25hbmRmbGFzaF9yc3JjLCBBUlJBWV9TSVpFKGV4Y2l0ZV9uYW5kZmxhc2hfcnNyYykpOworCisgICAgICAgIC8qIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlICovCisKKyAgICAgICAgLyogUmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXhjaXRlX25hbmRmbGFzaF9wZGV2KTsKK30KKworZGV2aWNlX2luaXRjYWxsKGV4Y2l0ZV9uYW5kZmxhc2hfZGV2aW5pdCk7CisKKworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvZGV2X3JzcmNbXSA9IHsKKwlSSU5JVF9JUlEoRlBHQTFfSVJRLCAgSU9ERVZfUkVTT1VSQ0VfSVJRKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9fcGRldiA9IHsKKwkubmFtZQkJPSBJT0RFVl9OQU1FLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW9kZXZfcnNyYyksCisJLnJlc291cmNlCT0gaW9kZXZfcnNyYworfTsKKworLyoKKyAqIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIGV4dGVybmFsIEkvTyBwb3J0cy4KKyAqLworc3RhdGljIGludCBfX2luaXQgaW9fZGV2aW5pdCh2b2lkKQoreworCWFkanVzdF9yZXNvdXJjZXMoaW9kZXZfcnNyYywgQVJSQVlfU0laRShpb2Rldl9yc3JjKSk7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW9fcGRldik7Cit9CisKK2RldmljZV9pbml0Y2FsbChpb19kZXZpbml0KTsKKworCisKKworI2lmIGRlZmluZWQoQ09ORklHX1JNOUtfR0UpIHx8IGRlZmluZWQoQ09ORklHX1JNOUtfR0VfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBybTlrX2dlX3JzcmNbXSA9IHsKKwlSSU5JVCgweDIyMDAsIDB4MjdmZiwgUk05S19HRV9SRVNPVVJDRV9NQUMsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4MTgwMCwgMHgxZmZmLCBSTTlLX0dFX1JFU09VUkNFX01TVEFULCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDIwMDAsIDB4MjEyZiwgUk05S19HRV9SRVNPVVJDRV9QS1RQUk9DLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDUxNDAsIDB4NTIyNywgUk05S19HRV9SRVNPVVJDRV9YRE1BLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDQ4NzAsIDB4NDg5ZiwgUk05S19HRV9SRVNPVVJDRV9GSUZPX1JYLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDQ5NGMsIDB4NDk1NywgUk05S19HRV9SRVNPVVJDRV9GSUZPX1RYLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDAwMDAsIDB4MDA3ZiwgUk05S19HRV9SRVNPVVJDRV9GSUZPTUVNX1JYLCAmZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UpLAorCVJJTklUKDB4MDA4MCwgMHgwMGZmLCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9NRU1fVFgsICZleGNpdGVfZmlmb21lbV9yZXNvdXJjZSksCisJUklOSVQoMHgwMTgwLCAweDAxOWYsIFJNOUtfR0VfUkVTT1VSQ0VfUEhZLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDAwMDAsIDB4MDNmZiwgUk05S19HRV9SRVNPVVJDRV9ETUFERVNDX1JYLCAmZXhjaXRlX3NjcmFtX3Jlc291cmNlKSwKKwlSSU5JVCgweDA0MDAsIDB4MDdmZiwgUk05S19HRV9SRVNPVVJDRV9ETUFERVNDX1RYLCAmZXhjaXRlX3NjcmFtX3Jlc291cmNlKSwKKwlSSU5JVChzbGljZV9ldGgsIHNsaWNlX2V0aCwgUk05S19HRV9SRVNPVVJDRV9HUElfU0xJQ0UsICZleGNpdGVfZ3Bpc2xpY2VfcmVzb3VyY2UpLAorCVJJTklUKDAsIDAsIFJNOUtfR0VfUkVTT1VSQ0VfTURJT19DSEFOTkVMLCAmZXhjaXRlX21kaW9fY2hhbm5lbF9yZXNvdXJjZSksCisJUklOSVRfSVJRKFRJVEFOX0lSUSwgIFJNOUtfR0VfUkVTT1VSQ0VfSVJRX01BSU4pLAorCVJJTklUX0lSUShQSFlfSVJRLCBSTTlLX0dFX1JFU09VUkNFX0lSUV9QSFkpCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBybTlrX2dlX3BkZXYgPSB7CisJLm5hbWUJCT0gUk05S19HRV9OQU1FLAorCS5pZAkJPSBSTTlLX0dFX1VOSVQsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJtOWtfZ2VfcnNyYyksCisJLnJlc291cmNlCT0gcm05a19nZV9yc3JjCit9OworCisKKworLyoKKyAqIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIEV0aGVybmV0IHBvcnQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHJtOWtfZ2VfZGV2aW5pdCh2b2lkKQoreworCXUzMiByZWc7CisKKwlhZGp1c3RfcmVzb3VyY2VzKHJtOWtfZ2VfcnNyYywgQVJSQVlfU0laRShybTlrX2dlX3JzcmMpKTsKKworCS8qIFBvd2VyIHVwIHRoZSBzbGljZSBhbmQgY29uZmlndXJlIGl0LiAqLworCXJlZyA9IHRpdGFuX3JlYWRsKENQVEMxUik7CisJcmVnICY9IH4oMHgxMTAwMCA8PCBzbGljZV9ldGgpOworCXJlZyB8PSAweDEwMCA8PCBzbGljZV9ldGg7CisJdGl0YW5fd3JpdGVsKHJlZywgQ1BUQzFSKTsKKworCS8qIFRha2UgdGhlIE1BQyBvdXQgb2YgcmVzZXQsIHJlc2V0IHRoZSBETExzLiAqLworCXJlZyA9IHRpdGFuX3JlYWRsKENQUlIpOworCXJlZyAmPSB+KDB4MDAwMzAwMDAgPDwgKHNsaWNlX2V0aCAqIDIpKTsKKwlyZWcgfD0gMHgzIDw8IChzbGljZV9ldGggKiAyKTsKKwl0aXRhbl93cml0ZWwocmVnLCBDUFJSKTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJtOWtfZ2VfcGRldik7Cit9CisKK2RldmljZV9pbml0Y2FsbChybTlrX2dlX2RldmluaXQpOworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1JNOUtfR0UpIHx8IGRlZmluZWQoQ09ORklHX1JNOUtfR0VfTU9EVUxFKSAqLworCisKKworc3RhdGljIGludCBfX2luaXQgZXhjaXRlX3NldHVwX2RldnModm9pZCkKK3sKKwlpbnQgcmVzOworCXUzMiByZWc7CisKKwkvKiBFbmFibGUgeGRtYSBhbmQgZmlmbyBpbnRlcnJ1cHRzICovCisJcmVnID0gdGl0YW5fcmVhZGwoMHgwMDUwKTsKKwl0aXRhbl93cml0ZWwocmVnIHwgMHgxODAwMDAwMCwgMHgwMDUwKTsKKworCXJlcyA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCXJlcyA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZXhjaXRlX3NjcmFtX3Jlc291cmNlKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCXJlcyA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZXhjaXRlX2ZwZ2FfcmVzb3VyY2UpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisJcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfbmFuZF9yZXNvdXJjZSk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKwlleGNpdGVfZnBnYV9yZXNvdXJjZS5mbGFncyA9IGV4Y2l0ZV9mcGdhX3Jlc291cmNlLnBhcmVudC0+ZmxhZ3MgJgorCQkJCSAgICggSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNCisJCQkJICAgfCBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfRE1BKTsKKwlleGNpdGVfbmFuZF9yZXNvdXJjZS5mbGFncyA9IGV4Y2l0ZV9uYW5kX3Jlc291cmNlLnBhcmVudC0+ZmxhZ3MgJgorCQkJCSAgICggSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNCisJCQkJICAgfCBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfRE1BKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKGV4Y2l0ZV9zZXR1cF9kZXZzKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2ZsYXNodGVzdC5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2ZsYXNodGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDI0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZmxhc2h0ZXN0LmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisqICBDb3B5cmlnaHQgKEMpIDIwMDUgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyogIEF1dGhvcjogVGhpZXMgTW9lbGxlciA8dGhpZXMubW9lbGxlckBiYXNsZXJ3ZWIuY29tPgorKgorKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+IC8vIGZvciBvY2Rfd3JpdGUKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4gLy8gZm9yIHF1ZXVlCisKKyNpbmNsdWRlICJleGNpdGVfbmFuZGZsYXNoLmgiCisjaW5jbHVkZSAibmFuZGZsYXNoLmgiCisKKyNkZWZpbmUgUEZYICJleGNpdGUgZmxhc2h0ZXN0OiAiCit0eXBlZGVmIHZvaWQgX19pb21lbSAqaW9fcmVnX3Q7CisKKyNkZWZpbmUgaW9fcmVhZGIoX19hX18pCQlfX3Jhd19yZWFkYigoX19hX18pKQorI2RlZmluZSBpb193cml0ZWIoX192X18sIF9fYV9fKQlfX3Jhd193cml0ZWIoKF9fdl9fKSwgKF9fYV9fKSkKKworCisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHJlc291cmNlICpleGNpdGVfbmFuZGZsYXNoX2dldF9yZXNvdXJjZSgKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpiYXNlbmFtZSkKK3sKKwljb25zdCBjaGFyIGZtdFtdID0gIiVzXyV1IjsKKwljaGFyIGJ1Zls4MF07CisKKwlpZiAodW5saWtlbHkoc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCBmbXQsIGJhc2VuYW1lLCBkLT5pZCkgPj0gc2l6ZW9mIGJ1ZikpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoZCwgZmxhZ3MsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW9fcmVnX3QKK2V4Y2l0ZV9uYW5kZmxhc2hfbWFwX3JlZ3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZCwgY29uc3QgY2hhciAqYmFzZW5hbWUpCit7CisJdm9pZCAqcmVzdWx0ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmNvbnN0IHIgPQorCSAgICBleGNpdGVfbmFuZGZsYXNoX2dldF9yZXNvdXJjZShkLCBJT1JFU09VUkNFX01FTSwgYmFzZW5hbWUpOworCWlmIChyKQorCSAgIHJlc3VsdCA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgci0+ZW5kICsgMSAtIHItPnN0YXJ0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBjb250cm9sbGVyIGFuZCBtdGQgaW5mb3JtYXRpb24gKi8KKworc3RydWN0IGV4Y2l0ZV9uYW5kZmxhc2hfZHJ2ZGF0YSB7CisJc3RydWN0IG10ZF9pbmZvIGJvYXJkX210ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwIGJvYXJkX2NoaXA7CisJaW9fcmVnX3QgcmVnczsKK307CisKKworLyogY29tbWFuZCBhbmQgY29udHJvbCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGV4Y2l0ZV9uYW5kZmxhc2hfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW9fcmVnX3QgcmVncyA9IGNvbnRhaW5lcl9vZihtdGQsc3RydWN0IGV4Y2l0ZV9uYW5kZmxhc2hfZHJ2ZGF0YSxib2FyZF9tdGQpLT5yZWdzOworCisJc3dpdGNoIChjbWQpIHsKKwkvKiBTZWxlY3QgdGhlIGNvbW1hbmQgbGF0Y2ggKi8KKwljYXNlIE5BTkRfQ1RMX1NFVENMRTogdGhpcy0+SU9fQUREUl9XID0gcmVncyArIEVYQ0lURV9OQU5ERkxBU0hfQ01EOworCQlicmVhazsKKwkvKiBEZXNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCAqLworCWNhc2UgTkFORF9DVExfQ0xSQ0xFOiB0aGlzLT5JT19BRERSX1cgPSByZWdzICsgRVhDSVRFX05BTkRGTEFTSF9EQVRBOworCQlicmVhazsKKwkvKiBTZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggKi8KKwljYXNlIE5BTkRfQ1RMX1NFVEFMRTogdGhpcy0+SU9fQUREUl9XID0gcmVncyArIEVYQ0lURV9OQU5ERkxBU0hfQUREUjsKKwkJYnJlYWs7CisJLyogRGVzZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggKi8KKwljYXNlIE5BTkRfQ1RMX0NMUkFMRTogdGhpcy0+SU9fQUREUl9XID0gcmVncyAgKyBFWENJVEVfTkFOREZMQVNIX0RBVEE7CisJCWJyZWFrOworCS8qIFNlbGVjdCB0aGUgY2hpcCAgLS0gbm90IHVzZWQgKi8KKwljYXNlIE5BTkRfQ1RMX1NFVE5DRToKKwkJYnJlYWs7CisJLyogRGVzZWxlY3QgdGhlIGNoaXAgLS0gbm90IHVzZWQgKi8KKwljYXNlIE5BTkRfQ1RMX0NMUk5DRToKKwkJYnJlYWs7CisJfQorCisJdGhpcy0+SU9fQUREUl9SID0gdGhpcy0+SU9fQUREUl9XOworfQorCisvKiBleGNpdGVfbmFuZGZsYXNoX2RldnJlYWR5KCkKKyAqCisgKiByZXR1cm5zIDAgaWYgdGhlIG5hbmQgaXMgYnVzeSwgMSBpZiBpdCBpcyByZWFkeQorICovCitzdGF0aWMgaW50IGV4Y2l0ZV9uYW5kZmxhc2hfZGV2cmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IGV4Y2l0ZV9uYW5kZmxhc2hfZHJ2ZGF0YSAqZHJ2ZGF0YSA9CisJICAgIGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBleGNpdGVfbmFuZGZsYXNoX2RydmRhdGEsIGJvYXJkX210ZCk7CisKKwlyZXR1cm4gaW9fcmVhZGIoZHJ2ZGF0YS0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfU1RBVFVTKTsKK30KKworLyogZGV2aWNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCisKKy8qIGV4Y2l0ZV9uYW5kZmxhc2hfcmVtb3ZlCisgKgorICogY2FsbGVkIGJ5IGRldmljZSBsYXllciB0byByZW1vdmUgdGhlIGRyaXZlcgorICogdGhlIGJpbmRpbmcgdG8gdGhlIG10ZCBhbmQgYWxsIGFsbG9jYXRlZAorICogcmVzb3VyY2VzIGFyZSByZWxlYXNlZAorICovCitzdGF0aWMgaW50IGV4Y2l0ZV9uYW5kZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXhjaXRlX25hbmRmbGFzaF9kcnZkYXRhICp0aGlzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlwcl9pbmZvKFBGWCAicmVtb3ZlIik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCWlmICh0aGlzID09IE5VTEwpIHsKKwkJcHJfZGVidWcoUEZYICJjYWxsIHJlbW92ZSB3aXRob3V0IHByaXZhdGUgZGF0YSEhIik7CisJCXJldHVybiAwOworCX0KKworCisJLyogZnJlZSB0aGUgY29tbW9uIHJlc291cmNlcyAqLworCWlmICh0aGlzLT5yZWdzICE9IE5VTEwpIHsKKwkJaW91bm1hcCh0aGlzLT5yZWdzKTsKKwkJdGhpcy0+cmVncyA9IE5VTEw7CisJfQorCisJa2ZyZWUodGhpcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbGFwc2VkOworCit2b2lkIG15X3dvcmtxdWV1ZV9oYW5kbGVyKHZvaWQgKmFyZykKK3sKKwllbGFwc2VkID0gMTsKK30KKworREVDTEFSRV9XT1JLKHNpZ0VsYXBzZWQsIG15X3dvcmtxdWV1ZV9oYW5kbGVyLCAwKTsKKworCisvKiBleGNpdGVfbmFuZGZsYXNoX3Byb2JlCisgKgorICogY2FsbGVkIGJ5IGRldmljZSBsYXllciB3aGVuIGl0IGZpbmRzIGEgZGV2aWNlIG1hdGNoaW5nCisgKiBvbmUgb3VyIGRyaXZlciBjYW4gaGFuZGxlZC4gVGhpcyBjb2RlIGNoZWNrcyB0byBzZWUgaWYKKyAqIGl0IGNhbiBhbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyB0aGVuIGNhbGxzIHRoZQorICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzCisqLworc3RhdGljIGludCBleGNpdGVfbmFuZGZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlzdHJ1Y3QgZXhjaXRlX25hbmRmbGFzaF9kcnZkYXRhICpkcnZkYXRhOwkgICAgLyogcHJpdmF0ZSBkcml2ZXIgZGF0YSAgICAgKi8KKwlzdHJ1Y3QgbmFuZF9jaGlwICAgICAgICAgICAgICAqYm9hcmRfY2hpcDsgIC8qIHByaXZhdGUgZmxhc2ggY2hpcCBkYXRhICovCisJc3RydWN0IG10ZF9pbmZvICAgICAgICAgICAgICAgKmJvYXJkX210ZDsgICAvKiBtdGQgaW5mbyBmb3IgdGhpcyBib2FyZCAqLworCisJaW50IGVyciAgICAgID0gMDsKKwlpbnQgY291bnQgICAgPSAwOworCXN0cnVjdCB0aW1ldmFsIHR2LGVuZHR2OworCXVuc2lnbmVkIGludCBkdDsKKworCXByX2luZm8oUEZYICJwcm9iZSBkZXY6ICglcClcbiIsIGRldik7CisKKwlwcl9pbmZvKFBGWCAiYWRqdXN0IExCIHRpbWluZ1xuIik7CisJb2NkX3dyaXRlbCgweDAwMDAwMzMwLCBMRFAyKTsKKworCWRydmRhdGEgPSBrbWFsbG9jKHNpemVvZigqZHJ2ZGF0YSksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZHJ2ZGF0YSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gbWVtb3J5IGZvciBkcnZkYXRhXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBtZW1fZXJyb3I7CisJfQorCisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJbWVtc2V0KGRydmRhdGEsIDAsIHNpemVvZigqZHJ2ZGF0YSkpOworCisJLyogYmluZCBwcml2YXRlIGRhdGEgaW50byBkcml2ZXIgKi8KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcnZkYXRhKTsKKworCS8qIGFsbG9jYXRlIGFuZCBtYXAgdGhlIHJlc291cmNlICovCisJZHJ2ZGF0YS0+cmVncyA9CisJICAgIGV4Y2l0ZV9uYW5kZmxhc2hfbWFwX3JlZ3MocGRldiwgRVhDSVRFX05BTkRGTEFTSF9SRVNPVVJDRV9SRUdTKTsKKworCWlmICh1bmxpa2VseSghZHJ2ZGF0YS0+cmVncykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlc2VydmUgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGlvX2Vycm9yOworCX0KKworCS8qIGluaXRpYWxpc2Ugb3VyIGNoaXAgKi8KKwlib2FyZF9jaGlwID0gJmRydmRhdGEtPmJvYXJkX2NoaXA7CisKKwlib2FyZF9jaGlwLT5JT19BRERSX1IgPSBkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9EQVRBOworCWJvYXJkX2NoaXAtPklPX0FERFJfVyA9IGRydmRhdGEtPnJlZ3MgKyBFWENJVEVfTkFOREZMQVNIX0RBVEE7CisKKwlib2FyZF9jaGlwLT5od2NvbnRyb2wgPSBleGNpdGVfbmFuZGZsYXNoX2h3Y29udHJvbDsKKwlib2FyZF9jaGlwLT5kZXZfcmVhZHkgPSBleGNpdGVfbmFuZGZsYXNoX2RldnJlYWR5OworCisJYm9hcmRfY2hpcC0+Y2hpcF9kZWxheSA9IDI1OworCSNpZiAwCisJLyogVE9ETzogc3BlZWR1cCB0aGUgaW5pdGlhbCBzY2FuICovCisJYm9hcmRfY2hpcC0+b3B0aW9ucyA9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKKwkjZW5kaWYKKwlib2FyZF9jaGlwLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKworCS8qIGxpbmsgY2hpcCB0byBtdGQgKi8KKwlib2FyZF9tdGQgPSAmZHJ2ZGF0YS0+Ym9hcmRfbXRkOworCWJvYXJkX210ZC0+cHJpdiA9IGJvYXJkX2NoaXA7CisKKworCXByX2luZm8oUEZYICJGbGFzaFRlc3RcbiIpOworCWVsYXBzZWQgPSAwOworLyoJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzaWdFbGFwc2VkLCAxKkhaKTsKKwl3aGlsZSAoIWVsYXBzZWQpIHsKKwkJaW9fcmVhZGIoZHJ2ZGF0YS0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfU1RBVFVTKTsKKwkJY291bnQrKzsKKwl9CisJcHJfaW5mbyhQRlggInJlYWRzIGluIDEgc2VjIC0tPiAlZFxuIixjb3VudCk7CisqLworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCWZvciAoY291bnQgPSAwIDsgY291bnQgPCAxMDAwMDAwOyBjb3VudCArKykgeworCQlpb19yZWFkYihkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9TVEFUVVMpOworCX0KKwlkb19nZXR0aW1lb2ZkYXkoJmVuZHR2KTsKKwlkdCA9IChlbmR0di50dl9zZWMgLSB0di50dl9zZWMpICogMTAwMDAwMCArIGVuZHR2LnR2X3VzZWMgIC0gdHYudHZfdXNlYzsKKwlwcl9pbmZvKFBGWCAiJThkIHVzIHRpbWV2YWxcbiIsZHQpOworCXByX2luZm8oUEZYICJFbmRGbGFzaFRlc3RcbiIpOworCisvKiAgICAgIHJldHVybiB3aXRoIGVycm9yIHRvIHVubG9hZCBldmVyeXRoaW5nCisqLworaW9fZXJyb3I6CisJaW91bm1hcChkcnZkYXRhLT5yZWdzKTsKKworbWVtX2Vycm9yOgorCWtmcmVlKGRydmRhdGEpOworCisJaWYgKGVyciA9PSAwKQorCQllcnIgPSAtRUlOVkFMOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBleGNpdGVfbmFuZGZsYXNoX2RyaXZlciA9IHsKKwkubmFtZSA9ICJleGNpdGVfbmFuZCIsCisJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUgPSBleGNpdGVfbmFuZGZsYXNoX3Byb2JlLAorCS5yZW1vdmUgPSBleGNpdGVfbmFuZGZsYXNoX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kZmxhc2hfaW5pdCh2b2lkKQoreworCXByX2luZm8oUEZYICJyZWdpc3RlciBEcml2ZXIgKFJldjogJFJldmlzaW9uOiQpXG4iKTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZleGNpdGVfbmFuZGZsYXNoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGNpdGVfbmFuZGZsYXNoX2V4aXQodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRmbGFzaF9kcml2ZXIpOworCXByX2luZm8oUEZYICJEcml2ZXIgdW5yZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KGV4Y2l0ZV9uYW5kZmxhc2hfaW5pdCk7Cittb2R1bGVfZXhpdChleGNpdGVfbmFuZGZsYXNoX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUaGllcyBNb2VsbGVyIDx0aGllcy5tb2VsbGVyQGJhc2xlcndlYi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJhc2xlciBlWGNpdGUgTkFORC1GbGFzaCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9mcGdhLmggYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZmNkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZnBnYS5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgRVhDSVRFX0ZQR0FfSF9JTkNMVURFRAorI2RlZmluZSBFWENJVEVfRlBHQV9IX0lOQ0xVREVECisKKworLyoqCisgKiBBZHJlc3MgYWxpZ25tZW50IG9mIHRoZSBpbmRpdmlkdWFsIEZQR0EgYnl0ZXMuCisgKiBUaGUgYWRkcmVzcyBhcnJhbmdlbWVudCBvZiB0aGUgaW5kaXZpZHVhbCBieXRlcyBvZiB0aGUgRlBHQSBpcyB0d28KKyAqIGJ5dGUgYWxpZ25lZCBhdCB0aGUgZW1iZWRkZWQgTUsyIHBsYXRmb3JtLgorICovCisjaWZkZWYgRVhDSVRFX0NDSV9GUEdBX01LMgordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDIpKSk7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90OworI2VuZGlmCisKKworLyoqCisgKiBTaXplIG9mIER1YWwgUG9ydGVkIFJBTS4KKyAqLworI2RlZmluZSBFWENJVEVfRFBSX1NJWkUgMjYzCisKKworLyoqCisgKiBTaXplIG9mIFJlc2VydmVkIFN0YXR1cyBGaWVsZHMgaW4gRHVhbCBQb3J0ZWQgUkFNLgorICovCisjZGVmaW5lIEVYQ0lURV9EUFJfU1RBVFVTX1NJWkUgNworCisKKworLyoqCisgKiBGUEdBLgorICogSGFyZHdhcmUgcmVnaXN0ZXIgbGF5b3V0IG9mIHRoZSBGUEdBIGludGVyZmFjZS4gVGhlIEZQR0EgbXVzdCBhY2Nlc3NlZAorICogYnl0ZSB3aXNlIHNvbGVseS4KKyAqIEBzZWUgRVhDSVRFX0NDSV9EUFJfTUsyCisgKi8KK3R5cGVkZWYgc3RydWN0IGV4Y2l0ZV9mcGdhIHsKKworCS8qKgorCSAqIER1YWwgUG9ydGVkIFJBTS4KKwkgKi8KKwlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBkcHJbRVhDSVRFX0RQUl9TSVpFXTsKKworCS8qKgorCSAqIFN0YXR1cy4KKwkgKi8KKwlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBzdGF0dXNbRVhDSVRFX0RQUl9TVEFUVVNfU0laRV07CisKKyNpZmRlZiBFWENJVEVfQ0NJX0ZQR0FfTUsyCisJLyoqCisJICogUk05MDAwIEludGVycnVwdC4KKwkgKiBXcml0ZSBhY2Nlc3MgaW5pdGlhdGVzIGludGVycnVwdCBhdCB0aGUgUk05MDAwIChNSVBTKSBwcm9jZXNzb3Igb2YgdGhlIGVYY2l0ZS4KKwkgKi8KKwlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBybTlrX2ludDsKKyNlbHNlCisJLyoqCisJICogTUsyIEludGVycnVwdC4KKwkgKiBXcml0ZSBhY2Nlc3MgaW5pdGlhdGVzIGludGVycnVwdCBhdCB0aGUgQVJNIHByb2Nlc3NvciBvZiB0aGUgTUsyLgorCSAqLworCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IG1rMl9pbnQ7CisKKwlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBnYXBbMHgxMDAwLTB4MTBmXTsKKworCS8qKgorCSAqIElSUSBTb3VyY2UvQWNrbm93bGVkZ2UuCisJICovCisJZXhjaXRlX2NjaV9mcGdhX2FsaWduX3Qgcm05a19pcnFfc3JjOworCisJLyoqCisJICogSVJRIE1hc2suCisJICogU2V0IGJpdHMgZW5hYmxlIHRoZSByZWxhdGVkIGludGVycnVwdC4KKwkgKi8KKwlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBybTlrX2lycV9tYXNrOworI2VuZGlmCisKKworfSBleGNpdGVfZnBnYTsKKworCisKKyNlbmRpZgkvKiBuZGVmIEVYQ0lURV9GUEdBX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExMjFlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNSBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisKKyNpbmNsdWRlICJleGNpdGVfaW9kZXYuaCIKKworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmlvZGV2X2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKik7CitzdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgaW9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IGlvZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIHNzaXplX3QgaW9kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QgcywgbG9mZl90ICopOworc3RhdGljIHVuc2lnbmVkIGludCBpb2Rldl9wb2xsKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBpb2Rldl9pcnFoZGwoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCisKKworc3RhdGljIGNvbnN0IGNoYXIgaW9kZXZfbmFtZVtdID0gImlvZGV2IjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW9kZXZfaXJxOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPQoreworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpb2Rldl9vcGVuLAorCS5yZWxlYXNlCT0gaW9kZXZfcmVsZWFzZSwKKwkucmVhZAkJPSBpb2Rldl9yZWFkLAorCS5wb2xsCQk9IGlvZGV2X3BvbGwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0KK3sKKwkubWlub3IJCT0gTUlTQ19EWU5BTUlDX01JTk9SLAorCS5uYW1lCQk9IGlvZGV2X25hbWUsCisJLmZvcHMJCT0gJmZvcHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpb2Rldl9kcml2ZXIgPQoreworCS5uYW1lCQk9IChjaGFyICopIGlvZGV2X25hbWUsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5wcm9iZQkJPSBpb2Rldl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGlvZGV2X3JlbW92ZSkKK307CisKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlICoKK2lvZGV2X2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZHYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgdW5zaWduZWQgaW50IHR5cGUpCit7CisJY2hhciBidWZbODBdOworCWlmIChzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlc18wIiwgbmFtZSkgPj0gc2l6ZW9mIGJ1ZikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGR2LCB0eXBlLCBidWYpOworfQorCisKKworLyogTm8gaG90cGx1Z2dpbmcgb24gdGhlIHBsYXRmb3JtIGJ1cyAtIHVzZSBfX2luaXQgKi8KK3N0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogY29uc3QgcGR2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJY29uc3Qgc3RydWN0IHJlc291cmNlICogY29uc3QgcmkgPQorCQlpb2Rldl9nZXRfcmVzb3VyY2UocGR2LCBJT0RFVl9SRVNPVVJDRV9JUlEsIElPUkVTT1VSQ0VfSVJRKTsKKworCWlmICh1bmxpa2VseSghcmkpKQorCQlyZXR1cm4gLUVOWElPOworCisJaW9kZXZfaXJxID0gcmktPnN0YXJ0OworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtaXNjZGV2KTsKK30KKworCisKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG1pc2NfZGVyZWdpc3RlcigmbWlzY2Rldik7Cit9CisKKworCitzdGF0aWMgaW50IGlvZGV2X29wZW4oc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZmlsZSAqZikKK3sKKwlyZXR1cm4gcmVxdWVzdF9pcnEoaW9kZXZfaXJxLCBpb2Rldl9pcnFoZGwsIFNBX0lOVEVSUlVQVCwKKwkJCSAgIGlvZGV2X25hbWUsICZtaXNjZGV2KTsKK30KKworCisKK3N0YXRpYyBpbnQgaW9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQoreworCWZyZWVfaXJxKGlvZGV2X2lycSwgJm1pc2NkZXYpOworCXJldHVybiAwOworfQorCisKKworCitzdGF0aWMgc3NpemVfdAoraW9kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZiwgY2hhciBfX3VzZXIgKmQsIHNpemVfdCBzLCBsb2ZmX3QgKm8pCit7CisJc3NpemVfdCByZXQ7CisJREVGSU5FX1dBSVQodyk7CisKKwlwcmVwYXJlX3RvX3dhaXQoJndxLCAmdywgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlzY2hlZHVsZSgpOworCXJldCA9IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpID8gLUVSRVNUQVJUU1lTIDogMDsKKwlmaW5pc2hfd2FpdCgmd3EsICZ3KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwKQoreworCXBvbGxfd2FpdChmLCAmd3EsIHApOworCXJldHVybiBQT0xMT1VUIHwgUE9MTFdSTk9STTsKK30KKworCisKKworc3RhdGljIGlycXJldHVybl90IGlvZGV2X2lycWhkbChpbnQgaXJxLCB2b2lkICpjdHh0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3YWtlX3VwKCZ3cSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKworc3RhdGljIGludCBfX2luaXQgaW9kZXZfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOworfQorCisKKworc3RhdGljIHZvaWQgX19leGl0IGlvZGV2X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlvZGV2X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGlvZGV2X2NsZWFudXBfbW9kdWxlKTsKKworCisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCYXNsZXIgZVhjaXRlIGkvbyBpbnRlcnJ1cHQgaGFuZGxlciIpOworTU9EVUxFX1ZFUlNJT04oIjAuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmggYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmZiYjVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX0VYQ0lURV9JT0RFVl9IX18KKyNkZWZpbmUgX19FWENJVEVfSU9ERVZfSF9fCisKKy8qIERldmljZSBuYW1lICovCisjZGVmaW5lIElPREVWX05BTUUJCSJpb2RldiIKKworLyogUmVzb3VyY2UgbmFtZXMgKi8KKyNkZWZpbmUgSU9ERVZfUkVTT1VSQ0VfSVJRCSJleGNpdGVfaW9kZXZfaXJxIgorCisjZW5kaWYgLyogX19FWENJVEVfSU9ERVZfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaXJxLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExYWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pcnEuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCisgKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyZWIuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgorCisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgZXhjaXRlX2hhbmRsZV9pbnQodm9pZCk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorICovCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCit7CisJbWlwc19jcHVfaXJxX2luaXQoMCk7CisJcm03a19jcHVfaXJxX2luaXQoOCk7CisJcm05a19jcHVfaXJxX2luaXQoMTIpOworCisjaWZkZWYgQ09ORklHX0tHREIKKwlleGNpdGVfa2dkYl9pbml0KCk7CisjZW5kaWYKK30KKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNvbnN0IHUzMgorCQlpbnRlcnJ1cHRzID0gcmVhZF9jMF9jYXVzZSgpID4+IDgsCisJCW1hc2sgPSAoKHJlYWRfYzBfc3RhdHVzKCkgPj4gOCkgJiAweDAwMDAwMGZmKSB8CisJCSAgICAgICAocmVhZF9jMF9pbnRjb250cm9sKCkgJiAweDAwMDBmZjAwKSwKKwkJcGVuZGluZyA9IGludGVycnVwdHMgJiBtYXNrOworCXUzMiBtc2dpbnRmbGFncywgbXNnaW50bWFzaywgbXNnaW50OworCisJLyogcHJvY2VzcyB0aW1lciBpbnRlcnJ1cHQgKi8KKwlpZiAocGVuZGluZyAmICgxIDw8IFRJTUVSX0lSUSkpIHsKKwkJZG9fSVJRKFRJTUVSX0lSUSwgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIFBDSSBpbnRlcnJ1cHRzICovCisjaWYgVVNCX0lSUSA8IDEwCisJbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKFVTQl9NU0dJTlQgLyAweDIwICogMHgxMCkpOworCW1zZ2ludG1hc2sgID0gb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoVVNCX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50CSAgICA9IG1zZ2ludGZsYWdzICYgbXNnaW50bWFzayAmICgweDEgPDwgKFVTQl9NU0dJTlQgJSAweDIwKSk7CisJaWYgKChwZW5kaW5nICYgKDEgPDwgVVNCX0lSUSkpICYmIG1zZ2ludCkgeworI2Vsc2UKKwlpZiAocGVuZGluZyAmICgxIDw8IFVTQl9JUlEpKSB7CisjZW5kaWYKKwkJZG9fSVJRKFVTQl9JUlEsIHJlZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyBUSVRBTiBpbnRlcnJ1cHRzICovCisJbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKFRJVEFOX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50bWFzayAgPSBvY2RfcmVhZGwoSU5UUDBNYXNrMCArIChUSVRBTl9NU0dJTlQgLyAweDIwICogMHgxMCkpOworCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChUSVRBTl9NU0dJTlQgJSAweDIwKSk7CisJaWYgKChwZW5kaW5nICYgKDEgPDwgVElUQU5fSVJRKSkgJiYgbXNnaW50KSB7CisJCW9jZF93cml0ZWwobXNnaW50LCBJTlRQMENsZWFyMCArIChUSVRBTl9NU0dJTlQgLyAweDIwICogMHgxMCkpOworI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCisJCWV4Y2l0ZV9rZ2RiX2ludGhkbChyZWdzKTsKKyNlbmRpZgorCQlkb19JUlEoVElUQU5fSVJRLCByZWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgRlBHQSBsaW5lICMwIGludGVycnVwdHMgKi8KKwltc2dpbnRmbGFncyA9IG9jZF9yZWFkbChJTlRQMFN0YXR1czAgKyAoRlBHQTBfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKKwltc2dpbnRtYXNrICA9IG9jZF9yZWFkbChJTlRQME1hc2swICsgKEZQR0EwX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50CSAgICA9IG1zZ2ludGZsYWdzICYgbXNnaW50bWFzayAmICgweDEgPDwgKEZQR0EwX01TR0lOVCAlIDB4MjApKTsKKwlpZiAoKHBlbmRpbmcgJiAoMSA8PCBGUEdBMF9JUlEpKSAmJiBtc2dpbnQpIHsKKwkJZG9fSVJRKEZQR0EwX0lSUSwgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIEZQR0EgbGluZSAjMSBpbnRlcnJ1cHRzICovCisJbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKEZQR0ExX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50bWFzayAgPSBvY2RfcmVhZGwoSU5UUDBNYXNrMCArIChGUEdBMV9NU0dJTlQgLyAweDIwICogMHgxMCkpOworCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChGUEdBMV9NU0dJTlQgJSAweDIwKSk7CisJaWYgKChwZW5kaW5nICYgKDEgPDwgRlBHQTFfSVJRKSkgJiYgbXNnaW50KSB7CisJCWRvX0lSUShGUEdBMV9JUlEsIHJlZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyBQSFkgaW50ZXJydXB0cyAqLworCW1zZ2ludGZsYWdzID0gb2NkX3JlYWRsKElOVFAwU3RhdHVzMCArIChQSFlfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKKwltc2dpbnRtYXNrICA9IG9jZF9yZWFkbChJTlRQME1hc2swICsgKFBIWV9NU0dJTlQgLyAweDIwICogMHgxMCkpOworCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChQSFlfTVNHSU5UICUgMHgyMCkpOworCWlmICgocGVuZGluZyAmICgxIDw8IFBIWV9JUlEpKSAmJiBtc2dpbnQpIHsKKwkJZG9fSVJRKFBIWV9JUlEsIHJlZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyBzcHVyaW91cyBpbnRlcnJ1cHRzICovCisJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb2Nmcy5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb2Nmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MmJlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvY2ZzLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgorICoKKyAqICBQcm9jZnMgc3VwcG9ydCBmb3IgQmFzbGVyIGVYY2l0ZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgorCisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKK3N0YXRpYyBpbnQgZXhjaXRlX2dldF91bml0X2lkKGNoYXIgKmJ1ZiwgY2hhciAqKmFkZHIsIG9mZl90IG9mZnMsIGludCBzaXplKQoreworCWNvbnN0IGludCBsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwNngiLCB1bml0X2lkKTsKKwljb25zdCBpbnQgdyA9IGxlbiAtIG9mZnM7CisJKmFkZHIgPSBidWYgKyBvZmZzOworCXJldHVybiB3IDwgc2l6ZSA/IHcgOiBzaXplOworfQorCitzdGF0aWMgaW50CitleGNpdGVfYm9vdHJvbV9yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCSAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJdm9pZCBfX2lvbWVtICogc3JjOworCisJaWYgKG9mZiA+PSBFWENJVEVfU0laRV9CT09UUk9NKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKG9mZiArIGNvdW50KSA+IEVYQ0lURV9TSVpFX0JPT1RST00pCisJCWNvdW50ID0gRVhDSVRFX1NJWkVfQk9PVFJPTSAtIG9mZjsKKworCXNyYyA9IGlvcmVtYXAoRVhDSVRFX1BIWVNfQk9PVFJPTSArIG9mZiwgY291bnQpOworCWlmIChzcmMpIHsKKwkJbWVtY3B5X2Zyb21pbyhwYWdlLCBzcmMsIGNvdW50KTsKKwkJaW91bm1hcChzcmMpOworCQkqc3RhcnQgPSBwYWdlOworCX0gZWxzZSB7CisJCWNvdW50ID0gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQgZXhjaXRlX3Byb2Nmc19pbml0KHZvaWQpCit7CisJLyogQ3JlYXRlICYgcG9wdWxhdGUgL3Byb2MvZXhjaXRlICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICogY29uc3QgcGRpciA9IHByb2NfbWtkaXIoImV4Y2l0ZSIsICZwcm9jX3Jvb3QpOworCWlmIChwZGlyKSB7CisJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqIGU7CisKKwkJZSA9IGNyZWF0ZV9wcm9jX2luZm9fZW50cnkoInVuaXRfaWQiLCBTX0lSVUdPLCBwZGlyLAorCQkJCQkgICBleGNpdGVfZ2V0X3VuaXRfaWQpOworCQlpZiAoZSkgZS0+c2l6ZSA9IDY7CisKKwkJZSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImJvb3Ryb20iLCBTX0lSVUdPLCBwZGlyLAorCQkJCQkgICBleGNpdGVfYm9vdHJvbV9yZWFkLCBOVUxMKTsKKwkJaWYgKGUpIGUtPnNpemUgPSBFWENJVEVfU0laRV9CT09UUk9NOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9tLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzI0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvbS5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBieSBUaG9tYXMgS29lbGxlciAodGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbSkKKyAqICBCYXNlZCBvbiB0aGUgUE1DLVNpZXJyYSBZb3NlbWl0ZSBib2FyZCBzdXBwb3J0IGJ5IFJhbGYgQmFlY2hsZSBhbmQKKyAqICBNYW5pc2ggTGFjaHdhbmkuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGV4Y2l0ZS5oPgorCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IFJlZGJvb3QgdG8gcGFzcyBhcmd1bWVudHMgdG8gdGhlIGtlcm5lbCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbDsKK30gdF9lbnZfdmFyOworCitzdHJ1Y3QgcGFybWJsb2NrIHsKKwl0X2Vudl92YXIgbWVtc2l6ZTsKKwl0X2Vudl92YXIgbW9kZXR0eTA7CisJdF9lbnZfdmFyIGV0aGFkZHI7CisJdF9lbnZfdmFyIGVudl9lbmQ7CisJY2hhciAqYXJndlsyXTsKKwljaGFyIHRleHRbMF07Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHByb21fYXJnYzsKK3N0YXRpYyBjb25zdCBjaGFyICoqIHByb21fYXJndjsKK3N0YXRpYyBjb25zdCB0X2Vudl92YXIgKiBwcm9tX2VudjsKKworc3RhdGljIHZvaWQgcHJvbV9oYWx0KHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CitzdGF0aWMgdm9pZCBwcm9tX2V4aXQodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKKworCisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiQmFzbGVyIGVYY2l0ZSI7Cit9CisKKy8qCisgKiBIYWx0IHRoZSBzeXN0ZW0KKyAqLworc3RhdGljIHZvaWQgcHJvbV9oYWx0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICJcbioqIFN5c3RlbSBoYWx0ZWQuXG4iKTsKKwl3aGlsZSAoMSkKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSJcdC5zZXRcdG1pcHMzXG4iCisJCQkiXHR3YWl0XG4iCisJCQkiXHQuc2V0XHRtaXBzMFxuIgorCQkpOworfQorCisvKgorICogUmVzZXQgdGhlIENQVSBhbmQgcmUtZW50ZXIgUmVkYm9vdAorICovCitzdGF0aWMgdm9pZCBwcm9tX2V4aXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICogY29uc3QgZmxnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKEVYQ0lURV9BRERSX0ZQR0EgKyBFWENJVEVfRlBHQV9EUFIpOworCisJLyogQ2xlYXIgdGhlIHdhdGNoZG9nIHJlc2V0IGZsYWcsIHNldCB0aGUgcmVib290IGZsYWcgKi8KKwkqZmxnICY9IH4weDAxOworCSpmbGcgfD0gMHg4MDsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAgKEVYQ0lURV9BRERSX0ZQR0EgKyBFWENJVEVfRlBHQV9TWVNDVEwpID0gMHgwMjsKKwkJaW9iKCk7CisJCW1kZWxheSgxMDAwKTsKKwl9CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlJlc2V0IGZhaWxlZFxuIik7CisJcHJvbV9oYWx0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIF9faW5pdCAqcHJvbV9nZXRlbnYoY2hhciAqbmFtZSkKK3sKKwljb25zdCB0X2Vudl92YXIgKiBwOworCWZvciAocCA9IHByb21fZW52OyBwLT5uYW1lICE9IE5VTEw7IHArKykKKwkJaWYoc3RyY21wKG5hbWUsIHAtPm5hbWUpID09IDApCisJCQlicmVhazsKKwlyZXR1cm4gcC0+dmFsOworfQorCisvKgorICogSW5pdCByb3V0aW5lIHdoaWNoIGFjY2VwdHMgdGhlIHZhcmlhYmxlcyBmcm9tIFJlZGJvb3QKKyAqLwordm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCit7CisJY29uc3Qgc3RydWN0IHBhcm1ibG9jayAqIGNvbnN0IHBiID0gKHN0cnVjdCBwYXJtYmxvY2sgKikgZndfYXJnMjsKKworCXByb21fYXJnYyA9IGZ3X2FyZzA7CisJcHJvbV9hcmd2ID0gKGNvbnN0IGNoYXIgKiopIGZ3X2FyZzE7CisJcHJvbV9lbnYgPSAmcGItPm1lbXNpemU7CisKKwkvKiBDYWxsYmFja3MgZm9yIGhhbHQsIHJlc3RhcnQgKi8KKwlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQgKCopKGNoYXIgKikpIHByb21fZXhpdDsKKwlfbWFjaGluZV9oYWx0ID0gcHJvbV9oYWx0OworCisjaWZkZWYgQ09ORklHXzMyQklUCisJLyogY29weSBjb21tYW5kIGxpbmUgKi8KKwlzdHJjcHkoYXJjc19jbWRsaW5lLCBwcm9tX2FyZ3ZbMV0pOworCW1lbXNpemUgPSBzaW1wbGVfc3RydG9sKHByb21fZ2V0ZW52KCJtZW1zaXplIiksIE5VTEwsIDE2KTsKKwlzdHJjcHkobW9kZXR0eSwgcHJvbV9nZXRlbnYoIm1vZGV0dHkwIikpOworI2VuZGlmIC8qIENPTkZJR18zMkJJVCAqLworCisjaWZkZWYgQ09ORklHXzY0QklUCisjCWVycm9yIDY0IGJpdCBzdXBwb3J0IG5vdCBpbXBsZW1lbnRlZAorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCisJbWlwc19tYWNoZ3JvdXAgPSBNQUNIX0dST1VQX1RJVEFOOworCW1pcHNfbWFjaHR5cGUgPSBNQUNIX1RJVEFOX0VYQ0lURTsKK30KKworLyogVGhpcyBpcyBjYWxsZWQgZnJvbSBmcmVlX2luaXRtZW0oKSwgc28gd2UgbmVlZCB0byBwcm92aWRlIGl0ICovCit2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvICovCit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfc2V0dXAuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNWIwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfc2V0dXAuYwpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgorICogIEJhc2VkIG9uIHRoZSBQTUMtU2llcnJhIFlvc2VtaXRlIGJvYXJkIHN1cHBvcnQgYnkgUmFsZiBCYWVjaGxlIGFuZAorICogIE1hbmlzaCBMYWNod2FuaS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtMzIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgorCisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKKyNkZWZpbmUgVElUQU5fVUFSVF9DTEsJMjUwMDAwMDAKKworI2lmIDEKKy8qIG5vcm1hbCBzZXJpYWwgcG9ydCBhc3NpZ25tZW50ICovCisjZGVmaW5lIFJFR0JBU0VfU0VSMAkweDAyMDgKKyNkZWZpbmUgUkVHQkFTRV9TRVIxCTB4MDIzOAorI2RlZmluZSBNQVNLX1NFUjAJMHgxCisjZGVmaW5lIE1BU0tfU0VSMQkweDIKKyNlbHNlCisvKiBzZXJpYWwgcG9ydHMgc3dhcHBlZCAqLworI2RlZmluZSBSRUdCQVNFX1NFUjAJMHgwMjM4CisjZGVmaW5lIFJFR0JBU0VfU0VSMQkweDAyMDgKKyNkZWZpbmUgTUFTS19TRVIwCTB4MgorI2RlZmluZSBNQVNLX1NFUjEJMHgxCisjZW5kaWYKKwordW5zaWduZWQgbG9uZyBtZW1zaXplOworY2hhciBtb2RldHR5WzMwXTsKK3Vuc2lnbmVkIGludCB0aXRhbl9pcnEgPSBUSVRBTl9JUlE7CitzdGF0aWMgdm9pZCBfX2lvbWVtICogY3RsX3JlZ3M7Cit1MzIgdW5pdF9pZDsKKwordm9sYXRpbGUgdm9pZCBfX2lvbWVtICogY29uc3Qgb2NkX2Jhc2UgPSAodm9pZCAqKSAoRVhDSVRFX0FERFJfT0NEKTsKK3ZvbGF0aWxlIHZvaWQgX19pb21lbSAqIGNvbnN0IHRpdGFuX2Jhc2UgPSAodm9pZCAqKSAoRVhDSVRFX0FERFJfVElUQU4pOworCisvKiBQcm90ZWN0IGFjY2VzcyB0byBzaGFyZWQgR1BJIHJlZ2lzdGVycyAqLworc3BpbmxvY2tfdCB0aXRhbl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworaW50IHRpdGFuX2lycWZsYWdzOworCisKK3N0YXRpYyB2b2lkIGV4Y2l0ZV90aW1lcl9pbml0KHZvaWQpCit7CisJY29uc3QgdTMyIG1vZGViaXQ1ID0gb2NkX3JlYWRsKDB4MDBlNCk7CisJdW5zaWduZWQgaW50CisJCW11bHQgPSAoKG1vZGViaXQ1ID4+IDExKSAmIDB4MWYpICsgMiwKKwkJZGl2ID0gKChtb2RlYml0NSA+PiAxNikgJiAweDFmKSArIDI7CisKKwlpZiAoZGl2ID09IDMzKSBkaXYgPSAxOworCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IEVYQ0lURV9DUFVfRVhUX0NMT0NLICogbXVsdCAvIGRpdiAvIDI7Cit9CisKK3N0YXRpYyB2b2lkIGV4Y2l0ZV90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCit7CisJLyogVGhlIGVYY2l0ZSBwbGF0Zm9ybSB1c2VzIHRoZSBhbHRlcm5hdGUgdGltZXIgaW50ZXJydXB0ICovCisJc2V0X2MwX2ludGNvbnRyb2woMHg4MCk7CisJc2V0dXBfaXJxKFRJTUVSX0lSUSwgaXJxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZXhjaXRlX2luaXRfY29uc29sZSh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKQorCXN0YXRpYyBfX2luaXRkYXRhIGNoYXIgc2VycltdID0KKwkJS0VSTl9FUlIgIlNlcmlhbCBwb3J0ICMldSBzZXR1cCBmYWlsZWRcbiI7CisJc3RydWN0IHVhcnRfcG9ydCB1cDsKKworCS8qIFRha2UgdGhlIERVQVJUIG91dCBvZiByZXNldCAqLworCXRpdGFuX3dyaXRlbCgweDAwZmYxY2ZmLCBDUFJSKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0tHREIpIHx8IChDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFMgPiAxKQorCS8qIEVuYWJsZSBib3RoIHBvcnRzICovCisJdGl0YW5fd3JpdGVsKE1BU0tfU0VSMCB8IE1BU0tfU0VSMSwgVUFDRkcpOworI2Vsc2UKKwkvKiBFbmFibGUgcG9ydCAjMCBvbmx5ICovCisJdGl0YW5fd3JpdGVsKE1BU0tfU0VSMCwgVUFDRkcpOworI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX0tHREIpICovCisKKyAJLyoKKwkgKiBTZXQgdXAgc2VyaWFsIHBvcnQgIzAuIERvIG5vdCB1c2UgYXV0b2RldGVjdGlvbjsgdGhlIHJlc3VsdCBpcworCSAqIG5vdCB3aGF0IHdlIHdhbnQuCisgCSAqLworCW1lbXNldCgmdXAsIDAsIHNpemVvZih1cCkpOworCXVwLm1lbWJhc2UJPSAoY2hhciAqKSB0aXRhbl9hZGRyKFJFR0JBU0VfU0VSMCk7CisJdXAuaXJxCQk9IFRJVEFOX0lSUTsKKwl1cC51YXJ0Y2xrCT0gVElUQU5fVUFSVF9DTEs7CisJdXAucmVnc2hpZnQJPSAwOworCXVwLmlvdHlwZQk9IFVQSU9fTUVNMzI7CisJdXAudHlwZQkJPSBQT1JUX1JNOTAwMDsKKwl1cC5mbGFncwk9IFVQRl9TSEFSRV9JUlE7CisJdXAubGluZQkJPSAwOworCWlmIChlYXJseV9zZXJpYWxfc2V0dXAoJnVwKSkKKwkJcHJpbnRrKHNlcnIsIHVwLmxpbmUpOworCisjaWYgQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTID4gMQorCS8qIEFuZCBub3cgZm9yIHBvcnQgIzEuICovCisJdXAubWVtYmFzZQk9IChjaGFyICopIHRpdGFuX2FkZHIoUkVHQkFTRV9TRVIxKTsKKwl1cC5saW5lCQk9IDE7CisgCWlmIChlYXJseV9zZXJpYWxfc2V0dXAoJnVwKSkKKwkJcHJpbnRrKHNlcnIsIHVwLmxpbmUpOworI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUyA+IDEgKi8KKyNlbHNlCisJLyogTGVhdmUgdGhlIERVQVJUIGluIHJlc2V0ICovCisJdGl0YW5fd3JpdGVsKDB4MDBmZjNjZmYsIENQUlIpOworI2VuZGlmICAvKiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGNoYXIgYnVmWzNdOworCXU4IHJlZzsKKwl2b2lkIF9faW9tZW0gKiBkcHI7CisKKwkvKiBCSVUgYnVmZmVyIGFsbG9jYXRpb25zICovCisJb2NkX3dyaXRlbCg4LCBDUFVSU0xNVCk7CS8qIENQVSAqLworCXRpdGFuX3dyaXRlbCg0LCBDUEdSV0wpOwkvKiBHUEkgLyBFdGhlcm5ldCAqLworCisJLyogTWFwIGNvbnRyb2wgcmVnaXN0ZXJzIGxvY2F0ZWQgaW4gRlBHQSAqLworCWN0bF9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKEVYQ0lURV9QSFlTX0ZQR0EgKyBFWENJVEVfRlBHQV9TWVNDVEwsIDE2KTsKKwlpZiAoIWN0bF9yZWdzKQorCQlwYW5pYygiZVhjaXRlOiBmYWlsZWQgdG8gbWFwIHBsYXRmb3JtIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKKwltZW1jcHlfZnJvbWlvKGJ1ZiwgY3RsX3JlZ3MgKyAyLCBBUlJBWV9TSVpFKGJ1ZikpOworCXVuaXRfaWQgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpIHwgKGJ1ZlsyXSA8PCAxNik7CisKKwkvKiBDbGVhciB0aGUgcmVib290IGZsYWcgKi8KKwlkcHIgPSBpb3JlbWFwX25vY2FjaGUoRVhDSVRFX1BIWVNfRlBHQSArIEVYQ0lURV9GUEdBX0RQUiwgMSk7CisJcmVnID0gX19yYXdfcmVhZGIoZHByKTsKKwlfX3Jhd193cml0ZWIocmVnICYgMHg3ZiwgZHByKTsKKwlpb3VubWFwKGRwcik7CisKKwkvKiBJbnRlcnJ1cHQgY29udHJvbGxlciBzZXR1cCAqLworCWZvciAoaSA9IElOVFAwU3RhdHVzMDsgaSA8IElOVFAwU3RhdHVzMCArIDB4ODA7IGkgKz0gMHgxMCkgeworCQlvY2Rfd3JpdGVsKDB4MDAwMDAwMDAsIGkgKyAweDA0KTsKKwkJb2NkX3dyaXRlbCgweGZmZmZmZmZmLCBpICsgMHgwYyk7CisJfQorCW9jZF93cml0ZWwoMHgyLCBOTUlDT05GSUcpOworCisJb2NkX3dyaXRlbCgweDEgPDwgKFRJVEFOX01TR0lOVCAlIDB4MjApLAorCQkgICBJTlRQME1hc2swICsgKDB4MTAgKiAoVElUQU5fTVNHSU5UIC8gMHgyMCkpKTsKKwlvY2Rfd3JpdGVsKCgweDEgPDwgKEZQR0EwX01TR0lOVCAlIDB4MjApKQorCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoRlBHQTBfTVNHSU5UIC8gMHgyMCkpKSwKKwkJICAgSU5UUDBNYXNrMCArICgweDEwICogKEZQR0EwX01TR0lOVCAvIDB4MjApKSk7CisJb2NkX3dyaXRlbCgoMHgxIDw8IChGUEdBMV9NU0dJTlQgJSAweDIwKSkKKwkJICAgfCBvY2RfcmVhZGwoSU5UUDBNYXNrMCArICgweDEwICogKEZQR0ExX01TR0lOVCAvIDB4MjApKSksCisJCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChGUEdBMV9NU0dJTlQgLyAweDIwKSkpOworCW9jZF93cml0ZWwoKDB4MSA8PCAoUEhZX01TR0lOVCAlIDB4MjApKQorCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoUEhZX01TR0lOVCAvIDB4MjApKSksCisJCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChQSFlfTVNHSU5UIC8gMHgyMCkpKTsKKyNpZiBVU0JfSVJRIDwgMTAKKwlvY2Rfd3JpdGVsKCgweDEgPDwgKFVTQl9NU0dJTlQgJSAweDIwKSkKKwkJICAgfCBvY2RfcmVhZGwoSU5UUDBNYXNrMCArICgweDEwICogKFVTQl9NU0dJTlQgLyAweDIwKSkpLAorCQkgICBJTlRQME1hc2swICsgKDB4MTAgKiAoVVNCX01TR0lOVCAvIDB4MjApKSk7CisjZW5kaWYKKwkvKiBFbmFibGUgdGhlIHBhY2tldCBGSUZPLCBYRE1BIGFuZCBYRE1BIGFyYml0ZXIgKi8KKwl0aXRhbl93cml0ZWwoMHgwMGZmMThmZiwgQ1BSUik7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgUEFETVVYLiBQb3dlciBkb3duIGFsbCBldGhlcm5ldCBzbGljZXMsCisJICogdGhleSB3aWxsIGJlIHBvd2VyZWQgdXAgYW5kIGNvbmZpZ3VyZWQgYXQgZGV2aWNlIHN0YXJ0dXAuCisJICovCisJdGl0YW5fd3JpdGVsKDB4MDA4NzgyMDYsIENQVEMxUik7CisJdGl0YW5fd3JpdGVsKDB4MDAwMDExMDAsIENQVEMwUik7IC8qIGxhdGNoIFBBRE1VWCwgZW5hYmxlIFdDSU1PREUgKi8KKworCS8qIFJlc2V0IGFuZCBlbmFibGUgdGhlIEZJRk8gYmxvY2sgKi8KKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMSwgU0RSWEZDSUUpOworCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAxLCBTRFRYRkNJRSk7CisJdGl0YW5fd3JpdGVsKDB4MDAwMDAxMDAsIFNEUlhGQ0lFKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgU0RUWEZDSUUpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBjb21tb24gaW50ZXJydXB0IHNoYXJlZCBieSBhbGwgY29tcG9uZW50cyBvZgorCSAqIHRoZSBHUEkvRXRoZXJuZXQgc3Vic3lzdGVtLgorCSAqLworCXRpdGFuX3dyaXRlbCgoRVhDSVRFX1BIWVNfT0NEID4+IDEyKSwgQ1BDRkcwKTsKKwl0aXRhbl93cml0ZWwoVElUQU5fTVNHSU5ULCBDUENGRzEpOworCisJLyoKKwkgKiBYRE1BIGNvbmZpZ3VyYXRpb24uCisJICogSW4gb3JkZXIgZm9yIHRoZSBYRE1BIHRvIGJlIHNoYXJhYmxlIGFtb25nIG11bHRpcGxlIGRyaXZlcnMsCisJICogdGhlIHNldHVwIG11c3QgYmUgZG9uZSBoZXJlIGluIHRoZSBwbGF0Zm9ybS4gVGhlIHJlYXNvbiBpcyB0aGF0CisJICogdGhpcyBzZXR1cCBjYW4gb25seSBiZSBkb25lIHdoaWxlIHRoZSBYRE1BIGlzIGluIHJlc2V0LiBJZiB0aGlzCisJICogd2VyZSBkb25lIGluIGEgZHJpdmVyLCBpdCB3b3VsZCBpbnRlcnJ1cHQgYWxsIG90aGVyIGRyaXZlcnMKKwkgKiB1c2luZyB0aGUgWERNQS4KKwkgKi8KKwl0aXRhbl93cml0ZWwoMHg4MDAyMWRmZiwgR1hDRkcpOwkvKiBYRE1BIHJlc2V0ICovCisJdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIENQWENJU1JBKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BYQ0lTUkIpOwkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KKyNpZiBkZWZpbmVkIChDT05GSUdfSElHSE1FTSkKKyMJZXJyb3IgY2hhbmdlIGZvciBISUdITUVNIHN1cHBvcnQhCisjZWxzZQorCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBHWERNQURSUEZYKTsJLyogYnVmZmVyIGFkZHJlc3MgcHJlZml4ICovCisjZW5kaWYKKwl0aXRhbl93cml0ZWwoMCwgR1hETUFfREVTQ0FEUik7CisKKwlmb3IgKGkgPSAweDUwNDA7IGkgPD0gMHg1MzAwOyBpICs9IDB4MDA0MCkKKwkJdGl0YW5fd3JpdGVsKDB4ODAwODAwMDAsIGkpOwkvKiByZXNldCBjaGFubmVsICovCisKKwl0aXRhbl93cml0ZWwoKDB4MSA8PCAyOSkJCQkvKiBubyBzcGFyc2UgdHggZGVzY3IuICovCisJCSAgICAgfCAoMHgxIDw8IDI4KQkJCS8qIG5vIHNwYXJzZSByeCBkZXNjci4gKi8KKwkJICAgICB8ICgweDEgPDwgMjMpIHwgKDB4MSA8PCAyNCkJLyogZGVzY3JpcHRvciBjb2hlcmVuY3kgKi8KKwkJICAgICB8ICgweDEgPDwgMjEpIHwgKDB4MSA8PCAyMikJLyogZGF0YSBjb2hlcmVuY3kgKi8KKwkJICAgICB8ICgweDEgPDwgMTcpCisJCSAgICAgfCAweDFkZmYsCisJCSAgICAgR1hDRkcpOworCisjaWYgZGVmaW5lZChDT05GSUdfU01QKQorIwllcnJvciBObyBTTVAgc3VwcG9ydAorI2Vsc2UKKwkvKiBBbGwgaW50ZXJydXB0cyBnbyB0byBjb3JlICMwIG9ubHkuICovCisJdGl0YW5fd3JpdGVsKDB4MWYwMDdmZmYsIENQRFNUMEEpOworCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBDUERTVDBCKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwZmYzZiwgQ1BEU1QxQSk7CisJdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIENQRFNUMUIpOworCXRpdGFuX3dyaXRlbCgweDAwZmZmZmZmLCBDUFhEU1RBKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BYRFNUQik7CisjZW5kaWYKKworCS8qIEVuYWJsZSBEVUFSVCBpbnRlcnJ1cHRzLCBkaXNhYmxlIGV2ZXJ5dGhpbmcgZWxzZS4gKi8KKwl0aXRhbl93cml0ZWwoMHgwNDAwMDAwMCwgQ1BHSUcwRVIpOworCXRpdGFuX3dyaXRlbCgweDAwMDAwMGMwLCBDUEdJRzFFUik7CisKKwlleGNpdGVfcHJvY2ZzX2luaXQoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQoreworCXZvbGF0aWxlIHUzMiAqIGNvbnN0IGJvb3Rfb2NkX2Jhc2UgPSAodTMyICopIDB4YmY3ZmMwMDA7CisKKwkvKiBBbm5vdW5jZSBSQU0gdG8gc3lzdGVtICovCisJYWRkX21lbW9yeV9yZWdpb24oMHgwMDAwMDAwMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKKworCS8qIFNldCB1cCB0aW1lciBpbml0aWFsaXphdGlvbiBob29rcyAqLworCWJvYXJkX3RpbWVfaW5pdCA9IGV4Y2l0ZV90aW1lcl9pbml0OworCWJvYXJkX3RpbWVyX3NldHVwID0gZXhjaXRlX3RpbWVyX3NldHVwOworCisJLyogU2V0IHVwIHRoZSBwZXJpcGhlcmFsIGFkZHJlc3MgbWFwICovCisJKihib290X29jZF9iYXNlICsgKExLQjkgLyBzaXplb2YgKHUzMikpKSA9IDA7CisJKihib290X29jZF9iYXNlICsgKExLQjEwIC8gc2l6ZW9mICh1MzIpKSkgPSAwOworCSooYm9vdF9vY2RfYmFzZSArIChMS0IxMSAvIHNpemVvZiAodTMyKSkpID0gMDsKKwkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCMTIgLyBzaXplb2YgKHUzMikpKSA9IDA7CisJd21iKCk7CisJKihib290X29jZF9iYXNlICsgKExLQjAgLyBzaXplb2YgKHUzMikpKSA9IEVYQ0lURV9QSFlTX09DRCA+PiA0OworCXdtYigpOworCisJb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfVElUQU4gPj4gNCkgfCAweDFVTCwgTEtCNSk7CisJb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX1RJVEFOID4+IDQpICYgMHg3ZmZmZmYwMCkgLSAweDEwMCwgTEtNNSk7CisJb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfU0NSQU0gPj4gNCkgfCAweDFVTCwgTEtCMTMpOworCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9TQ1JBTSA+PiA0KSAmIDB4ZmZmZmZmMDApIC0gMHgxMDAsIExLTTEzKTsKKworCS8qIExvY2FsIGJ1cyBzbG90ICMwICovCisJb2NkX3dyaXRlbCgweDAwMDQwNTEwLCBMRFAwKTsKKwlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19CT09UUk9NID4+IDQpIHwgMHgxVUwsIExLQjkpOworCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9CT09UUk9NID4+IDQpICYgMHgwM2ZmZmYwMCkgLSAweDEwMCwgTEtNOSk7CisKKwkvKiBMb2NhbCBidXMgc2xvdCAjMiAqLworCW9jZF93cml0ZWwoMHgwMDAwMDMzMCwgTERQMik7CisJb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfRlBHQSA+PiA0KSB8IDB4MSwgTEtCMTEpOworCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9GUEdBID4+IDQpIC0gMHgxMDApICYgMHgwM2ZmZmYwMCwgTEtNMTEpOworCisJLyogTG9jYWwgYnVzIHNsb3QgIzMgKi8KKwlvY2Rfd3JpdGVsKDB4MDAxMjM0MTMsIExEUDMpOworCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX05BTkQgPj4gNCkgfCAweDEsIExLQjEyKTsKKwlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfTkFORCA+PiA0KSAtIDB4MTAwKSAmIDB4MDNmZmZmMDAsIExLTTEyKTsKK30KKworCisKK2NvbnNvbGVfaW5pdGNhbGwoZXhjaXRlX2luaXRfY29uc29sZSk7CithcmNoX2luaXRjYWxsKGV4Y2l0ZV9wbGF0Zm9ybV9pbml0KTsKKworRVhQT1JUX1NZTUJPTCh0aXRhbl9sb2NrKTsKK0VYUE9SVF9TWU1CT0wodGl0YW5faXJxZmxhZ3MpOworRVhQT1JUX1NZTUJPTCh0aXRhbl9pcnEpOworRVhQT1JUX1NZTUJPTChvY2RfYmFzZSk7CitFWFBPUlRfU1lNQk9MKHRpdGFuX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9jb25zb2xlLmMgYi9hcmNoL21pcHMvY29iYWx0L2NvbnNvbGUuYwppbmRleCA0NWMyZDI3Li4zMDA3OTdkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29iYWx0L2NvbnNvbGUuYworKysgYi9hcmNoL21pcHMvY29iYWx0L2NvbnNvbGUuYwpAQCAtNDEsMyArNDEsOCBAQAogCiAJcHJpbnRrKCJDb2JhbHQ6IGVhcmx5IGNvbnNvbGUgcmVnaXN0ZXJlZFxuIik7CiB9CisKK3ZvaWQgX19pbml0IGRpc2FibGVfZWFybHlfcHJpbnRrKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9jb25zb2xlKCZjb25zX2luZm8pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jIGIvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCmluZGV4IDRmOWVhMTIuLmNhNzE5ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYworKysgYi9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKQEAgLTY4LDE5ICs2OCw0NiBAQAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGd0NjQxMTFfcGNpX29wczsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2JhbHRfbWVtX3Jlc291cmNlID0gewotCSJQQ0kgbWVtb3J5IiwgR1Q2NDExMV9NRU1fQkFTRSwgR1Q2NDExMV9NRU1fRU5ELCBJT1JFU09VUkNFX01FTQorCS5zdGFydAk9IEdUNjQxMTFfTUVNX0JBU0UsCisJLmVuZAk9IEdUNjQxMTFfTUVNX0VORCwKKwkubmFtZQk9ICJQQ0kgbWVtb3J5IiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2JhbHRfaW9fcmVzb3VyY2UgPSB7Ci0JIlBDSSBJL08iLCAweDEwMDAsIDB4ZmZmZiwgSU9SRVNPVVJDRV9JTworCS5zdGFydAk9IDB4MTAwMCwKKwkuZW5kCT0gMHhmZmZmLAorCS5uYW1lCT0gIlBDSSBJL08iLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29iYWx0X2lvX3Jlc291cmNlc1tdID0gewotCXsgImRtYTEiLCAweDAwLCAweDFmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJ0aW1lciIsIDB4NDAsIDB4NWYsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgImtleWJvYXJkIiwgMHg2MCwgMHg2ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiZG1hIHBhZ2UgcmVnIiwgMHg4MCwgMHg4ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiZG1hMiIsIDB4YzAsIDB4ZGYsIElPUkVTT1VSQ0VfQlVTWSB9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMCwKKwkJLmVuZAk9IDB4MWYsCisJCS5uYW1lCT0gImRtYTEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4NDAsCisJCS5lbmQJPSAweDVmLAorCQkubmFtZQk9ICJ0aW1lciIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHg2MCwKKwkJLmVuZAk9IDB4NmYsCisJCS5uYW1lCT0gImtleWJvYXJkIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDgwLAorCQkuZW5kCT0gMHg4ZiwKKwkJLm5hbWUJPSAiZG1hIHBhZ2UgcmVnIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweGMwLAorCQkuZW5kCT0gMHhkZiwKKwkJLm5hbWUJPSAiZG1hMiIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sCiB9OwogCiAjZGVmaW5lIENPQkFMVF9JT19SRVNPVVJDRVMgKHNpemVvZihjb2JhbHRfaW9fcmVzb3VyY2VzKS9zaXplb2Yoc3RydWN0IHJlc291cmNlKSkKQEAgLTkzLDcgKzEyMCw3IEBACiAJLmlvX29mZnNldAk9IDAgLSBHVDY0MTExX0lPX0JBU0UKIH07CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydDsKIAl1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oQ09CQUxUX1BDSUNPTkZfVklBLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZwppbmRleCA0YjA4MGJjLi4wY2MxYjNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTQzLDYgKzE0MSwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCmluZGV4IGQ4NWNkYTUuLmRhYmY5MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTE0NSw2ICsxNDMsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTQKIENPTkZJR19QUkVFTVBUX05PTkU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCmluZGV4IGNhMGFmMTYuLmFlYjdiZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1ZSNDFYWD15CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMyLDYgKzEzMCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwppbmRleCA3ZDI2OWU2Li5kNjgwZDNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMjksNiArMTI3LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDU3OWI2NjUuLjZhN2FhNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMCw2ICsxMjgsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKaW5kZXggZTVlYjUzOC4uNWMyZGE1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMwLDYgKzEyOCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwppbmRleCBhNDNmYjIzLi44NWVmOTBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzAsNiArMTI4LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IGFkNjMyZDguLjZmNzU3ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMiw2ICsxMzAsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKaW5kZXggODEzMGUyMy4uZGE0YzdlOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMxLDYgKzEyOSwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnCmluZGV4IDhjOTExYjYuLmMxYzZiZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogQ09ORklHX0REQjU0Nzc9eQogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEyOSw2ICsxMjcsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZwppbmRleCBkODM4NDk2Li5kNWQwZDNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEyOCw2ICsxMjYsMTcgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEyOD15CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTXzEyOEhaPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMjU2SFo9eQorQ09ORklHX1NZU19TVVBQT1JUU18xMDI0SFo9eQorQ09ORklHX0haPTEyOAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCmluZGV4IDA3NjBmNDMuLjQzOTY3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzAsNiArMTI4LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2VtbWEycmhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmMjlmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2VtbWEycmhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTIwNyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3CisjIFN1biBKdW4gMTggMTM6NDY6NTMgMjAwNgorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NFQUQgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1QgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfMyBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0cgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUUVNVSBpcyBub3Qgc2V0CitDT05GSUdfTUFSS0VJTlM9eQorIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1BUU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19DUFVfQklHX0VORElBTj15CisjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19JUlFfQ1BVPXkKK0NPTkZJR19TV0FQX0lPX1NQQUNFPXkKK0NPTkZJR19FTU1BMlJIPXkKK0NPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKKworIworIyBDUFUgc2VsZWN0aW9uCisjCisjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfUjUwMDA9eQorIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9SNTAwMD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX0xMU0M9eQorQ09ORklHX0NQVV9IQVNfU1lOQz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19QUkVFTVBUX0JLTD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCisjCitDT05GSUdfSFdfSEFTX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19NTVU9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CisjIENPTkZJR19JUF9ST1VURV9GV01BUksgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDFlMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDIwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPW0KKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPW0KKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKK0NPTkZJR19OQVRTRU1JPXkKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTl9TQUE5NzMwIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfUlRDPW0KK0NPTkZJR19HRU5fUlRDPW0KK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfREVCVUdfQlVTPXkKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMj15CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisKKyMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPW0KK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD1tCisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCitDT05GSUdfWEZTX0VYUE9SVD15CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPW0KKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ORlNfRElSRUNUSU89eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9IiIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTE5Mm0gaXA9Ym9vdHAgcm9vdD0vZGV2L25mcyBydyIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCmluZGV4IDcwNjdmNjAuLjUyNDhhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMxLDYgKzEyOSwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2V2OTYxMDBfZGVmY29uZmlnCmluZGV4IDAwYjU2ZWQuLjQ4NTg0OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V2OTYxMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2V2OTYxMDBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM1LDYgKzEzMywxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmNlNjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyMjAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzQKKyMgVGh1IEZlYiAyMyAxMzoxNToyNyAyMDA2CisjCitDT05GSUdfTUlQUz15CisKKyMKKyMgTWFjaGluZSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0VBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1QgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfMyBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0cgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorQ09ORklHX0JBU0xFUl9FWENJVEU9eQorIyBDT05GSUdfQkFTTEVSX0VYQ0lURV9QUk9UT1RZUEUgaXMgbm90IHNldAorIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0CisjIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FFTVUgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1BUU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TRVJJQUxfUk05MDAwPXkKK0NPTkZJR19DUFVfQklHX0VORElBTj15CisjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQorQ09ORklHX0lSUV9DUFU9eQorQ09ORklHX0lSUV9DUFVfUk03Sz15CitDT05GSUdfSVJRX0NQVV9STTlLPXkKK0NPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKKworIworIyBDUFUgc2VsZWN0aW9uCisjCisjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1JNOTAwMD15CisjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9STTkwMDA9eQorQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQorCisjCisjIEtlcm5lbCB0eXBlCisjCitDT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CisjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfTExTQz15CitDT05GSUdfQ1BVX0hBU19TWU5DPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfUFJFRU1QVF9CS0w9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKK0NPTkZJR19IV19IQVNfUENJPXkKK0NPTkZJR19QQ0k9eQorIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQkFTTEVSX0VYQ0lURT15CisjIENPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFX1JETkJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0JBU0xFUl9FWENJVEVfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJVEFOX0dFIGlzIG5vdCBzZXQKK0NPTkZJR19STTlLX0dFPW0KKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj1tCitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19XRFRfUk05S19HUEk9bQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorQ09ORklHX0ZCX0REPXkKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPW0KKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJUVEZUPW0KKyMgQ09ORklHX1VTQl9BUlRUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKworIworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBTTiBEZXZpY2VzCisjCisKKyMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjCisKKyMKKyMgZVhjaXRlIGZyYW1lIGNhcHR1cmUgc3VwcG9ydAorIworQ09ORklHX0VYQ0lURV9GQ0FQPW0KK0NPTkZJR19FWENJVEVfRkNBUF9HUEk9bQorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FPSIiCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCmluZGV4IDYwN2UyOTguLjg3OWJhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM2LDYgKzEzNCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCmluZGV4IGY3MjRiNGIuLmJiMTQyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjMsNyArNjEsNyBAQAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfU04wX05fTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfU05fTl9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQogQ09ORklHX05VTUE9eQogIyBDT05GSUdfTUFQUEVEX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC0xMzUsNiArMTMzLDE1IEBACiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NjQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMzJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKaW5kZXggOGYxMWQzNS4uMzFiM2M5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzYsNiArMTM0LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnCmluZGV4IDc1N2FkZjIuLjgwOWJhZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMCw2ICsxMjgsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2l2cl9kZWZjb25maWcKaW5kZXggMDIxNzYxYS4uNTUxMDhmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTI3LDYgKzEyNSwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qYWd1YXItYXR4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCmluZGV4IDA4ZjZjMzAuLmVmMjg0MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM2LDYgKzEzNCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKaW5kZXggMzhiMWUwMi4uNWVmNWEwOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMjUsNiArMTIzLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZwppbmRleCA0ZDI1OTkwLi5lYWJjZmYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM0LDYgKzEzMiwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKaW5kZXggOTc3ZjUyYi4uYjczY2ZmMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTE1NCw2ICsxNTIsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCmluZGV4IDAwNTYwZTAuLjhkZDI3YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM4LDYgKzEzNiwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZwppbmRleCAyODZhMDE4Li41ZDZmZjNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1ZSNDFYWD15CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMyLDYgKzEzMCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKaW5kZXggMWNlNDMxMC4uZmU1ZTNkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNiw2ICsxMzQsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKaW5kZXggOGE2YWE1MC4uZjRhMzNjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMyw2ICsxMzEsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKaW5kZXggZjllZTM1ZS4uMjFkZWE5NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM3LDYgKzEzNSwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKaW5kZXggYjQ4YmRlZS4uYzYzYjFjYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNiw2ICsxMzQsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKaW5kZXggMDFhYWM0MC4uNmY1YzcyNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMyLDYgKzEzMCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCAzOThjM2MyLi41Njc2ZjM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzEsNiArMTI5LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCmluZGV4IGVhMjgyYTUuLmExYzQ3OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMSw2ICsxMjksMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCmluZGV4IDRjNTdlNTYuLmIyZDk5MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKIENPTkZJR19QTlg4NTUwX0pCUz15Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMwLDYgKzEyOCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCmluZGV4IDNjOGYzNTEuLmZlMDkyYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogQ09ORklHX1BOWDg1NTBfVjJQQ0k9eQogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMCw2ICsxMjgsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZwppbmRleCA0YmNjMDFkLi5kYjg3MDEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEyOCw2ICsxMjYsMTUgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwppbmRleCAzZDQ0MTkzLi5iMTY3MzFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzgsNiArMTM2LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwppbmRleCBlZGZiOTY3Li44YjBkZDg2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM4LDYgKzEzNiwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwppbmRleCBlMzg4YTNkLi5mZjM0ZWQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTQ5LDYgKzE0NywxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgogQ09ORklHX1BSRUVNUFRfTk9ORT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCmluZGV4IDZiOGE2YTQxLi43N2VkZWFlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNCw2ICsxMzIsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKaW5kZXggZGJhMGJkYy4uNmFhMjI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9WUjQxWFg9eQogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNCw2ICsxMzIsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKaW5kZXggNWE5MjRjMS4uYTE4N2IxZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9WUjQxWFg9eQogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNCw2ICsxMzIsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKaW5kZXggOWYyMTVlYS4uMjU4NDU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9WUjQxWFg9eQogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNSw2ICsxMzMsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZwppbmRleCBhYzc3NjVlLi42OGFmNTRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzAsNiArMTI4LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDY4JQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZwppbmRleCA4ZDg4YWMxLi40MDU3MmEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgotIyBNb24gQXByIDI0IDE0OjUxOjAwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi4xMQorIyBGcmkgTWF5ICA1IDE3OjExOjIyIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMzIsNiArMzIsNyBAQAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0VBRCBpcyBub3Qgc2V0CitDT05GSUdfV1JfUFBNQz15CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAogIyBDT05GSUdfTU9NRU5DT19PQ0VMT1QgaXMgbm90IHNldApAQCAtNDEsOCArNDIsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci1DT05GSUdfRERCNTQ3Nj15CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NCwyNCArNjMsMjMgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQotQ09ORklHX0k4MjU5PXkKLSMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfQ1BVX0JJR19FTkRJQU49eQorIyBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19CSUdfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CiBDT05GSUdfSVJRX0NQVT15Ci1DT05GSUdfRERCNVhYWF9DT01NT049eQorQ09ORklHX01JUFNfR1Q2NDEyMD15CitDT05GSUdfU1dBUF9JT19TUEFDRT15CitDT05GSUdfQk9PVF9FTEYzMj15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfSEFWRV9TVERfUENfU0VSSUFMX1BPUlQ9eQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKLSMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAorQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldApAQCAtOTIsNyArOTAsNyBAQAogIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfUjU0MzI9eQorIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC0xMDAsMTEgKzk4LDE2IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfUjU0MzI9eQorQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IyPXkKK0NPTkZJR19TWVNfSEFTX0NQVV9NSVBTNjRfUjE9eQorQ09ORklHX1NZU19IQVNfQ1BVX05FVkFEQT15CitDT05GSUdfU1lTX0hBU19DUFVfUk03MDAwPXkKK0NPTkZJR19DUFVfTUlQUzMyPXkKK0NPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTE1LDExICsxMTgsMTUgQEAKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CisjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMjksNiArMTM2LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTE0NSwyNyArMTYxLDMxIEBACiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTc0LDE0ICsxOTQsMTggQEAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKICMKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKIAogIwogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMDEsNyArMjI1LDcgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX0lTQT15CitDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMTIsMTMgKzIzNiwxNiBAQAogIwogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CiAjCi0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVR19QQ0k9eQorIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKQEAgLTIzMSwzNSArMjU4LDMzIEBACiAjCiAjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPXkKLUNPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTVJPVVRFPXkKKyMgQ09ORklHX0lQX1BJTVNNX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BJTVNNX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19BUlBEPXkKICMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzAxLDEzICszMjYsNyBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPXkKLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPXkKLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzE4LDEzICszMzcsMTIgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCiAjCi1DT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKQEAgLTMzOSw3ICszNTcsNiBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CiAKICMKICMgQmxvY2sgZGV2aWNlcwpAQCAtMzUyLDUzICszNjksMjUgQEAKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD15Ci1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCi1DT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPXkKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CiAKICMKLSMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKLSMKLSMgQ09ORklHX0NEX05PX0lERVNDU0kgaXMgbm90IHNldAotCi0jCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCiAjCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CkBAIC00NDAsMzQgKzQyOSw0OCBAQAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9eQotQ09ORklHX0RBVklDT01fUEhZPXkKLUNPTkZJR19RU0VNSV9QSFk9eQotQ09ORklHX0xYVF9QSFk9eQotQ09ORklHX0NJQ0FEQV9QSFk9eQorIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTl9TQUE5NzMwIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNDgzLDYgKzQ4Niw3IEBACiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogCkBAIC01MjksNDYgKzUzMywxOCBAQAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9eQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc2LDkgKzU1Miw4IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTEKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTEKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjAwLDggKzU3NSw3IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDPXkKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldApAQCAtNjM3LDE0ICs2MTEsMjAgQEAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02NTcsNDkgKzYzNyw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TTUlWR1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC03MTEsNyArNjQ5LDYgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzI5LDE5ICs2NjYsNiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKQEAgLTc1MSwxNiArNjc1LDkgQEAKICMKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKICMgRmlsZSBzeXN0ZW1zCiAjCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldApAQCAtNzc0LDcgKzY5MSw3IEBACiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlVTRV9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC03OTUsOSArNzEyLDEwIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyMSwxMiArNzM5LDE0IEBACiAjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCiAjCiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKQEAgLTg2MSw0NiArNzgxLDE5IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9ImlwPWFueSIKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMG44IgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTlVMTD15Ci1DT05GSUdfQ1JZUFRPX01END15Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQotQ09ORklHX0NSWVBUT19TSEEyNTY9eQotQ09ORklHX0NSWVBUT19TSEE1MTI9eQotQ09ORklHX0NSWVBUT19XUDUxMj15Ci1DT05GSUdfQ1JZUFRPX1RHUjE5Mj15Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKLUNPTkZJR19DUllQVE9fVFdPRklTSD15Ci1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9eQotQ09ORklHX0NSWVBUT19BRVM9eQotQ09ORklHX0NSWVBUT19DQVNUNT15Ci1DT05GSUdfQ1JZUFRPX0NBU1Q2PXkKLUNPTkZJR19DUllQVE9fVEVBPXkKLUNPTkZJR19DUllQVE9fQVJDND15Ci1DT05GSUdfQ1JZUFRPX0tIQVpBRD15Ci1DT05GSUdfQ1JZUFRPX0FOVUJJUz15Ci1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15Ci1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC05MDksOSArODAyLDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkMzMj15CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKaW5kZXggYjUyZDcwOS4uN2VjZTJjMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogQ09ORklHX1BNQ19ZT1NFTUlURT15CkBAIC0xMzAsNiArMTI4LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9jb21tb24vcHJvbS5jCmluZGV4IGI4ZDFmNzQuLjAwYzYyYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvY29tbW9uL3Byb20uYwpAQCAtNTYsMTMgKzU2LDcgQEAKIAogCW1pcHNfbWFjaGdyb3VwID0gTUFDSF9HUk9VUF9ORUNfRERCOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRERCNTA3NCkKLQltaXBzX21hY2h0eXBlID0gTUFDSF9ORUNfRERCNTA3NDsKLQlhZGRfbWVtb3J5X3JlZ2lvbigwLCBEREJfU0RSQU1fU0laRSwgQk9PVF9NRU1fUkFNKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0REQjU0NzYpCi0JbWlwc19tYWNodHlwZSA9IE1BQ0hfTkVDX0REQjU0NzY7Ci0JYWRkX21lbW9yeV9yZWdpb24oMCwgRERCX1NEUkFNX1NJWkUsIEJPT1RfTUVNX1JBTSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19EREI1NDc3KQorI2lmIGRlZmluZWQoQ09ORklHX0REQjU0NzcpCiAJZGRiNTQ3N19ydW50aW1lX2RldGVjdGlvbigpOwogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIGJvYXJkX3JhbV9zaXplLCBCT09UX01FTV9SQU0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L01ha2VmaWxlIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0YzAyMS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgTkVDIEREQiBWcmMtNTA3NCBzcGVjaWZpYyBrZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzCi0jIHVuZGVyIExpbnV4LgotIwotCi1vYmoteQkJCSs9IHNldHVwLm8gaXJxLm8gbmlsZTRfcGljLm8KLQotRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pcnEuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYzA4N2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogIGFyY2gvbWlwcy9kZGI1MDc0L2lycS5jIC0tIE5FQyBEREIgVnJjLTUwNzQgaW50ZXJydXB0IHJvdXRpbmVzCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgotICogICAgICAgICAgICAgICAgICAgICBTb255IFNvZnR3YXJlIERldmVsb3BtZW50IENlbnRlciBFdXJvcGUgKFNEQ0UpLCBCcnVzc2VscwotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9uaWxlNC5oPgotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1MDc0Lmg+Ci0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Nhc2NhZGUgPSB7IG5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUiLCBOVUxMLCBOVUxMIH07Ci0KLSNkZWZpbmUgTTE1NDNfUE5QX0NPTkZJRwkweDAzZjAJLyogUG5QIENvbmZpZyBQb3J0ICovCi0jZGVmaW5lIE0xNTQzX1BOUF9JTkRFWAkJMHgwM2YwCS8qIFBuUCBJbmRleCBQb3J0ICovCi0jZGVmaW5lIE0xNTQzX1BOUF9EQVRBCQkweDAzZjEJLyogUG5QIERhdGEgUG9ydCAqLwotCi0jZGVmaW5lIE0xNTQzX1BOUF9BTFRfQ09ORklHCTB4MDM3MAkvKiBBbHRlcm5hdGl2ZSBQblAgQ29uZmlnIFBvcnQgKi8KLSNkZWZpbmUgTTE1NDNfUE5QX0FMVF9JTkRFWAkweDAzNzAJLyogQWx0ZXJuYXRpdmUgUG5QIEluZGV4IFBvcnQgKi8KLSNkZWZpbmUgTTE1NDNfUE5QX0FMVF9EQVRBCTB4MDM3MQkvKiBBbHRlcm5hdGl2ZSBQblAgRGF0YSBQb3J0ICovCi0KLSNkZWZpbmUgTTE1NDNfSU5UMV9NQVNURVJfQ1RSTAkweDAwMjAJLyogSU5UXzEgKG1hc3RlcikgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNMTU0M19JTlQxX01BU1RFUl9NQVNLCTB4MDAyMQkvKiBJTlRfMSAobWFzdGVyKSBNYXNrIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgTTE1NDNfSU5UMV9TTEFWRV9DVFJMCTB4MDBhMAkvKiBJTlRfMSAoc2xhdmUpIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTTE1NDNfSU5UMV9TTEFWRV9NQVNLCTB4MDBhMQkvKiBJTlRfMSAoc2xhdmUpIE1hc2sgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBNMTU0M19JTlQxX01BU1RFUl9FTENSCTB4MDRkMAkvKiBJTlRfMSAobWFzdGVyKSBFZGdlL0xldmVsIENvbnRyb2wgKi8KLSNkZWZpbmUgTTE1NDNfSU5UMV9TTEFWRV9FTENSCTB4MDRkMQkvKiBJTlRfMSAoc2xhdmUpIEVkZ2UvTGV2ZWwgQ29udHJvbCAqLwotCi0KLXN0YXRpYyB2b2lkIG0xNTQzX2lycV9zZXR1cCh2b2lkKQotewotCS8qCi0JICogIFRoZSBBTEkgTTE1NDMgaGFzIDEzIGludGVycnVwdCBpbnB1dHMsIElSUTEuLklSUTEzLiAgTm90IGFsbAotCSAqICB0aGUgcG9zc2libGUgSU8gc291cmNlcyBpbiB0aGUgTTE1NDMgYXJlIGluIHVzZSBieSB1cy4gIFdlIHdpbGwKLQkgKiAgdXNlIHRoZSBmb2xsb3dpbmcgbWFwcGluZzoKLQkgKgotCSAqICAgICAgSVJRMSAgLSBrZXlib2FyZCAoZGVmYXVsdCBzZXQgYnkgTTE1NDMpCi0JICogICAgICBJUlEzICAtIHJlc2VydmVkIGZvciBVQVJUIEIgKGRlZmF1bHQgc2V0IGJ5IE0xNTQzKSAobm90ZSB0aGF0Ci0JICogICAgICAgICAgICAgIHRoZSBzY2hlbWF0aWNzIGZvciB0aGUgRERCIFZyYy01MDc0IGJvYXJkIHNlZW0gdG8KLQkgKiAgICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCBJUlEzIGlzIGNvbm5lY3RlZCB0byB0aGUgRFMxMzg2Ci0JICogICAgICAgICAgICAgIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCBvdXRwdXQgc28gd2UgbWlnaHQgaGF2ZQotCSAqICAgICAgICAgICAgICBhIGNvbmZsaWN0KQotCSAqICAgICAgSVJRNCAgLSByZXNlcnZlZCBmb3IgVUFSVCBBIChkZWZhdWx0IHNldCBieSBNMTU0MykKLQkgKiAgICAgIElSUTUgIC0gcGFyYWxsZWwgKGRlZmF1bHQgc2V0IGJ5IE0xNTQzKQotCSAqICAgICAgSVJROCAgLSBEUzEzODYgdGltZSBvZiBkYXkgKFJUQykgaW50ZXJydXB0Ci0JICogICAgICBJUlExMiAtIG1vdXNlCi0JICovCi0KLQkvKgotCSAqICBBc3NpbmcgbW91c2UgaW50ZXJydXB0IHRvIElSUTEyCi0JICovCi0KLQkvKiBFbnRlciBjb25maWd1cmF0aW9uIG1vZGUgKi8KLQlvdXRiKDB4NTEsIE0xNTQzX1BOUF9DT05GSUcpOwotCW91dGIoMHgyMywgTTE1NDNfUE5QX0NPTkZJRyk7Ci0KLQkvKiBTZWxlY3QgbG9naWNhbCBkZXZpY2UgNyAoS2V5Ym9hcmQpICovCi0Jb3V0YigweDA3LCBNMTU0M19QTlBfSU5ERVgpOwotCW91dGIoMHgwNywgTTE1NDNfUE5QX0RBVEEpOwotCi0JLyogU2VsZWN0IElSUTEyICovCi0Jb3V0YigweDcyLCBNMTU0M19QTlBfSU5ERVgpOwotCW91dGIoMHgwYywgTTE1NDNfUE5QX0RBVEEpOwotCi0Jb3V0YigweDMwLCBNMTU0M19QTlBfSU5ERVgpOwotCXByaW50aygiZGV2aWNlIDcsIDB4MzA6ICUwMnhcbiIsaW5iKE0xNTQzX1BOUF9EQVRBKSk7Ci0KLQlvdXRiKDB4NzAsIE0xNTQzX1BOUF9JTkRFWCk7Ci0JcHJpbnRrKCJkZXZpY2UgNywgMHg3MDogJTAyeFxuIixpbmIoTTE1NDNfUE5QX0RBVEEpKTsKLQotCS8qIExlYXZlIGNvbmZpZ3JhdGlvbiBtb2RlICovCi0Jb3V0YigweGJiLCBNMTU0M19QTlBfQ09ORklHKTsKLQotCi19Ci0KLXN0YXRpYyB2b2lkIGRkYl9sb2NhbDBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdTMyIG1hc2s7Ci0JaW50IG5pbGU0X2lycTsKLQotCW1hc2sgPSBuaWxlNF9nZXRfaXJxX3N0YXQoMCk7Ci0KLQkvKiBIYW5kbGUgdGhlIHRpbWVyIGludGVycnVwdCBmaXJzdCAqLwotI2lmIDAKLQlpZiAobWFzayAmICgxIDw8IE5JTEU0X0lOVF9HUFQpKSB7Ci0JCWRvX0lSUShuaWxlNF90b19pcnEoTklMRTRfSU5UX0dQVCksIHJlZ3MpOwotCQltYXNrICY9IH4oMSA8PCBOSUxFNF9JTlRfR1BUKTsKLQl9Ci0jZW5kaWYKLQlmb3IgKG5pbGU0X2lycSA9IDA7IG1hc2s7IG5pbGU0X2lycSsrLCBtYXNrID4+PSAxKQotCQlpZiAobWFzayAmIDEpIHsKLQkJCWlmIChuaWxlNF9pcnEgPT0gTklMRTRfSU5UX0lOVEUpIHsKLQkJCQlpbnQgaTgyNTlfaXJxOwotCi0JCQkJbmlsZTRfY2xlYXJfaXJxKE5JTEU0X0lOVF9JTlRFKTsKLQkJCQlpODI1OV9pcnEgPSBuaWxlNF9pODI1OV9pYWNrKCk7Ci0JCQkJZG9fSVJRKGk4MjU5X2lycSwgcmVncyk7Ci0JCQl9IGVsc2UKLQkJCQlkb19JUlEobmlsZTRfdG9faXJxKG5pbGU0X2lycSksIHJlZ3MpOwotCi0JCX0KLX0KLQotc3RhdGljIHZvaWQgZGRiX2xvY2FsMV9pcnFkaXNwYXRjaCh2b2lkKQotewotCXByaW50aygiZGRiX2xvY2FsMV9pcnFkaXNwYXRjaCBjYWxsZWRcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBkZGJfYnVzZXJyb3JfaXJxKHZvaWQpCi17Ci0JcHJpbnRrKCJkZGJfYnVzZXJyb3JfaXJxIGNhbGxlZFxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRkYl84MjU0dGltZXJfaXJxKHZvaWQpCi17Ci0JcHJpbnRrKCJkZGJfODI1NHRpbWVyX2lycSBjYWxsZWRcbiIpOwotfQotCi1hc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOwotCi0JaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKQotCQlkZGJfbG9jYWwwX2lycWRpc3BhdGNoKHJlZ3MpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQotCQlkZGJfbG9jYWwxX2lycWRpc3BhdGNoKCk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCi0JCWRkYl9idXNlcnJvcl9pcnEoKTsKLQllbHNlIGlmIChwZW5kaW5nICYgKENBVVNFRl9JUDQgfCBDQVVTRUZfSVA1KSkKLQkJZGRiXzgyNTR0aW1lcl9pcnEoKTsKLX0KLQotdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQotewotCS8qIHNldHVwIGNhc2NhZGUgaW50ZXJydXB0cyAqLwotCXNldHVwX2lycShOSUxFNF9JUlFfQkFTRSAgKyBOSUxFNF9JTlRfSU5URSwgJmlycV9jYXNjYWRlKTsKLQlzZXR1cF9pcnEoQ1BVX0lSUV9CQVNFICsgQ1BVX05JTEU0X0NBU0NBREUsICZpcnFfY2FzY2FkZSk7Ci0KLQluaWxlNF9pcnFfc2V0dXAoTklMRTRfSVJRX0JBU0UpOwotCW0xNTQzX2lycV9zZXR1cCgpOwotCWluaXRfaTgyNTlfaXJxcygpOwotCi0KLQlwcmludGsoIkNQVV9JUlFfQkFTRTogJWRcbiIsQ1BVX0lSUV9CQVNFKTsKLQotCW1pcHNfY3B1X2lycV9pbml0KENQVV9JUlFfQkFTRSk7Ci0KLQlwcmludGsoImVuYWJsaW5nIDgyNTkgY2FzY2FkZVxuIik7Ci0KLQlkZGI1MDc0X2xlZF9oZXgoMCk7Ci0KLQkvKiBFbmFibGUgdGhlIGludGVycnVwdCBjYXNjYWRlICovCi0JbmlsZTRfZW5hYmxlX2lycShOSUxFNF9JUlFfQkFTRStJUlFfSTgyNTlfQ0FTQ0FERSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L25pbGU0X3BpYy5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9uaWxlNF9waWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc0M2ZmYy4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L25pbGU0X3BpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9taXBzL2RkYjU0NzYvbmlsZTQuYyAtLQotICogIAlsb3ctbGV2ZWwgUElDIGNvZGUgZm9yIE5FQyBWcmMtNTQ3NiAoTmlsZSA0KQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqCi0gKiAgQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiAgQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLQotc3RhdGljIGludCBpcnFfYmFzZTsKLQotLyoKLSAqICBJbnRlcnJ1cHQgUHJvZ3JhbW1pbmcKLSAqLwotdm9pZCBuaWxlNF9tYXBfaXJxKGludCBuaWxlNF9pcnEsIGludCBjcHVfaXJxKQotewotCXUzMiBvZmZzZXQsIHQ7Ci0KLQlvZmZzZXQgPSBEREJfSU5UQ1RSTDsKLQlpZiAobmlsZTRfaXJxID49IDgpIHsKLQkJb2Zmc2V0ICs9IDQ7Ci0JCW5pbGU0X2lycSAtPSA4OwotCX0KLQl0ID0gZGRiX2luMzIob2Zmc2V0KTsKLQl0ICY9IH4oNyA8PCAobmlsZTRfaXJxICogNCkpOwotCXQgfD0gY3B1X2lycSA8PCAobmlsZTRfaXJxICogNCk7Ci0JZGRiX291dDMyKG9mZnNldCwgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfbWFwX2lycV9hbGwoaW50IGNwdV9pcnEpCi17Ci0JdTMyIGFsbCwgdDsKLQotCWFsbCA9IGNwdV9pcnE7Ci0JYWxsIHw9IGFsbCA8PCA0OwotCWFsbCB8PSBhbGwgPDwgODsKLQlhbGwgfD0gYWxsIDw8IDE2OwotCXQgPSBkZGJfaW4zMihEREJfSU5UQ1RSTCk7Ci0JdCAmPSAweDg4ODg4ODg4OwotCXQgfD0gYWxsOwotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCwgdCk7Ci0JdCA9IGRkYl9pbjMyKEREQl9JTlRDVFJMICsgNCk7Ci0JdCAmPSAweDg4ODg4ODg4OwotCXQgfD0gYWxsOwotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCArIDQsIHQpOwotfQotCi12b2lkIG5pbGU0X2VuYWJsZV9pcnEodW5zaWduZWQgaW50IG5pbGU0X2lycSkKLXsKLQl1MzIgb2Zmc2V0LCB0OwotCi0JbmlsZTRfaXJxLT1pcnFfYmFzZTsKLQotCWRkYjUwNzRfbGVkX2hleCg4KTsKLQotCW9mZnNldCA9IEREQl9JTlRDVFJMOwotCWlmIChuaWxlNF9pcnEgPj0gOCkgewotCQlvZmZzZXQgKz0gNDsKLQkJbmlsZTRfaXJxIC09IDg7Ci0JfQotCWRkYjUwNzRfbGVkX2hleCg5KTsKLQl0ID0gZGRiX2luMzIob2Zmc2V0KTsKLQlkZGI1MDc0X2xlZF9oZXgoMHhhKTsKLQl0IHw9IDggPDwgKG5pbGU0X2lycSAqIDQpOwotCWRkYl9vdXQzMihvZmZzZXQsIHQpOwotCWRkYjUwNzRfbGVkX2hleCgweGIpOwotfQotCi12b2lkIG5pbGU0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBuaWxlNF9pcnEpCi17Ci0JdTMyIG9mZnNldCwgdDsKLQotCW5pbGU0X2lycS09aXJxX2Jhc2U7Ci0KLQlvZmZzZXQgPSBEREJfSU5UQ1RSTDsKLQlpZiAobmlsZTRfaXJxID49IDgpIHsKLQkJb2Zmc2V0ICs9IDQ7Ci0JCW5pbGU0X2lycSAtPSA4OwotCX0KLQl0ID0gZGRiX2luMzIob2Zmc2V0KTsKLQl0ICY9IH4oOCA8PCAobmlsZTRfaXJxICogNCkpOwotCWRkYl9vdXQzMihvZmZzZXQsIHQpOwotfQotCi12b2lkIG5pbGU0X2Rpc2FibGVfaXJxX2FsbCh2b2lkKQotewotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCwgMCk7Ci0JZGRiX291dDMyKEREQl9JTlRDVFJMICsgNCwgMCk7Ci19Ci0KLXUxNiBuaWxlNF9nZXRfaXJxX3N0YXQoaW50IGNwdV9pcnEpCi17Ci0JcmV0dXJuIGRkYl9pbjE2KEREQl9JTlRTVEFUMCArIGNwdV9pcnEgKiAyKTsKLX0KLQotdm9pZCBuaWxlNF9lbmFibGVfaXJxX291dHB1dChpbnQgY3B1X2lycSkKLXsKLQl1MzIgdDsKLQotCXQgPSBkZGJfaW4zMihEREJfSU5UU1RBVDEgKyA0KTsKLQl0IHw9IDEgPDwgKDE2ICsgY3B1X2lycSk7Ci0JZGRiX291dDMyKEREQl9JTlRTVEFUMSwgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfZGlzYWJsZV9pcnFfb3V0cHV0KGludCBjcHVfaXJxKQotewotCXUzMiB0OwotCi0JdCA9IGRkYl9pbjMyKEREQl9JTlRTVEFUMSArIDQpOwotCXQgJj0gfigxIDw8ICgxNiArIGNwdV9pcnEpKTsKLQlkZGJfb3V0MzIoRERCX0lOVFNUQVQxLCB0KTsKLX0KLQotdm9pZCBuaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eShpbnQgcGNpX2lycSwgaW50IGhpZ2gpCi17Ci0JdTMyIHQ7Ci0KLQl0ID0gZGRiX2luMzIoRERCX0lOVFBQRVMpOwotCWlmIChoaWdoKQotCQl0ICY9IH4oMSA8PCAocGNpX2lycSAqIDIpKTsKLQllbHNlCi0JCXQgfD0gMSA8PCAocGNpX2lycSAqIDIpOwotCWRkYl9vdXQzMihEREJfSU5UUFBFUywgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZShpbnQgcGNpX2lycSwgaW50IGxldmVsKQotewotCXUzMiB0OwotCi0JdCA9IGRkYl9pbjMyKEREQl9JTlRQUEVTKTsKLQlpZiAobGV2ZWwpCi0JCXQgfD0gMiA8PCAocGNpX2lycSAqIDIpOwotCWVsc2UKLQkJdCAmPSB+KDIgPDwgKHBjaV9pcnEgKiAyKSk7Ci0JZGRiX291dDMyKEREQl9JTlRQUEVTLCB0KTsKLX0KLQotdm9pZCBuaWxlNF9jbGVhcl9pcnEoaW50IG5pbGU0X2lycSkKLXsKLQluaWxlNF9pcnEtPWlycV9iYXNlOwotCWRkYl9vdXQzMihEREJfSU5UQ0xSLCAxIDw8IG5pbGU0X2lycSk7Ci19Ci0KLXZvaWQgbmlsZTRfY2xlYXJfaXJxX21hc2sodTMyIG1hc2spCi17Ci0JZGRiX291dDMyKEREQl9JTlRDTFIsIG1hc2spOwotfQotCi11OCBuaWxlNF9pODI1OV9pYWNrKHZvaWQpCi17Ci0JdTggaXJxOwotCXUzMiByZWc7Ci0KLQkvKiBTZXQgd2luZG93IDAgZm9yIGludGVycnVwdCBhY2tub3dsZWRnZSAqLwotCXJlZyA9IGRkYl9pbjMyKEREQl9QQ0lJTklUMCk7Ci0KLQlkZGJfc2V0X3BtcihEREJfUENJSU5JVDAsIEREQl9QQ0lDTURfSUFDSywgMCwgRERCX1BDSV9BQ0NFU1NfMzIpOwotCWlycSA9ICoodm9sYXRpbGUgdTggKikgS1NFRzFBRERSKEREQl9QQ0lfSUFDS19CQVNFKTsKLQkvKiByZXN0b3JlIHdpbmRvdyAwIGZvciBQQ0kgSS9PIHNwYWNlICovCi0JLy8gZGRiX3NldF9wbXIoRERCX1BDSUlOSVQwLCBEREJfUENJQ01EX0lPLCAwLCBEREJfUENJX0FDQ0VTU18zMik7Ci0JZGRiX291dDMyKEREQl9QQ0lJTklUMCwgcmVnKTsKLQotCS8qIGk4MjY5LmMgc2V0IHRoZSBiYXNlIHZlY3RvciB0byBiZSAweDAgKi8KLQlyZXR1cm4gaXJxIDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBuaWxlNF9pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKSB7Ci0KLQluaWxlNF9lbmFibGVfaXJxKGlycSk7Ci0JcmV0dXJuIDA7Ci0KLX0KLQotc3RhdGljIHZvaWQgbmlsZTRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKSB7Ci0KLSAgICBkZGI1MDc0X2xlZF9oZXgoNCk7Ci0KLQluaWxlNF9jbGVhcl9pcnEoaXJxKTsKLSAgICBkZGI1MDc0X2xlZF9oZXgoMik7Ci0JbmlsZTRfZGlzYWJsZV9pcnEoaXJxKTsKLQotICAgIGRkYjUwNzRfbGVkX2hleCgwKTsKLX0KLQotc3RhdGljIHZvaWQgbmlsZTRfaXJxX2VuZCh1bnNpZ25lZCBpbnQgaXJxKSB7Ci0KLQlkZGI1MDc0X2xlZF9oZXgoMyk7Ci0JaWYoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUykpKSB7Ci0JZGRiNTA3NF9sZWRfaGV4KDUpOwotCQluaWxlNF9lbmFibGVfaXJxKGlycSk7Ci0JZGRiNTA3NF9sZWRfaGV4KDcpOwotCX0KLQotCWRkYjUwNzRfbGVkX2hleCgxKTsKLX0KLQotI2RlZmluZSBuaWxlNF9pcnFfc2h1dGRvd24gbmlsZTRfZGlzYWJsZV9pcnEKLQotc3RhdGljIGh3X2lycV9jb250cm9sbGVyIG5pbGU0X2lycV9jb250cm9sbGVyID0gewotCS50eXBlbmFtZSA9ICJuaWxlNCIsCi0JLnN0YXJ0dXAgPSBuaWxlNF9pcnFfc3RhcnR1cCwKLQkuc2h1dGRvd24gPSBuaWxlNF9pcnFfc2h1dGRvd24sCi0JLmVuYWJsZSA9IG5pbGU0X2VuYWJsZV9pcnEsCi0JLmRpc2FibGUgPSBuaWxlNF9kaXNhYmxlX2lycSwKLQkuYWNrID0gbmlsZTRfYWNrX2lycSwKLQkuZW5kID0gbmlsZTRfaXJxX2VuZCwKLX07Ci0KLXZvaWQgbmlsZTRfaXJxX3NldHVwKHUzMiBiYXNlKSB7Ci0KLQlpbnQgaTsKLQotCWlycV9iYXNlPWJhc2U7Ci0KLQkvKiBNYXAgYWxsIGludGVycnVwdHMgdG8gQ1BVIGludCAjMCAqLwotCW5pbGU0X21hcF9pcnFfYWxsKDApOwotCi0JLyogUENJIElOVEEjLUUjIG11c3QgYmUgbGV2ZWwgdHJpZ2dlcmVkICovCi0JbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZSgwLCAxKTsKLQluaWxlNF9zZXRfcGNpX2lycV9sZXZlbF9vcl9lZGdlKDEsIDEpOwotCW5pbGU0X3NldF9wY2lfaXJxX2xldmVsX29yX2VkZ2UoMiwgMSk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZSgzLCAxKTsKLQluaWxlNF9zZXRfcGNpX2lycV9sZXZlbF9vcl9lZGdlKDQsIDEpOwotCi0JLyogUENJIElOVEEjLUQjIG11c3QgYmUgYWN0aXZlIGxvdywgSU5URSMgbXVzdCBiZSBhY3RpdmUgaGlnaCAqLwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDAsIDApOwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDEsIDApOwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDIsIDApOwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDMsIDApOwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDQsIDEpOwotCi0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQluaWxlNF9jbGVhcl9pcnEoaSk7Ci0JCW5pbGU0X2Rpc2FibGVfaXJxKGkpOwotCX0KLQotCS8qIEVuYWJsZSBDUFUgaW50ICMwICovCi0JbmlsZTRfZW5hYmxlX2lycV9vdXRwdXQoMCk7Ci0KLQlmb3IgKGk9IGJhc2U7IGk8IGJhc2UgKyBOVU1fTklMRTRfSU5URVJSVVBUUzsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKLQkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm5pbGU0X2lycV9jb250cm9sbGVyOwotCX0KLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1JVTlRJTUVfREVCVUcpCi12b2lkIG5pbGU0X2R1bXBfaXJxX3N0YXR1cyh2b2lkKQotewotCXByaW50ayhLRVJOX0RFQlVHICIKLQkgICAgICAgQ1BVU1RBVCA9ICVwOiVwXG4iLCAodm9pZCAqKSBkZGJfaW4zMihEREJfQ1BVU1RBVCArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfQ1BVU1RBVCkpOwotCXByaW50ayhLRVJOX0RFQlVHICIKLQkgICAgICAgSU5UQ1RSTCA9ICVwOiVwXG4iLCAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UQ1RSTCArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UQ1RSTCkpOwotCXByaW50ayhLRVJOX0RFQlVHCi0JICAgICAgICJJTlRTVEFUMCA9ICVwOiVwXG4iLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UU1RBVDAgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVFNUQVQwKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcKLQkgICAgICAgIklOVFNUQVQxID0gJXA6JXBcbiIsCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRTVEFUMSArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UU1RBVDEpKTsKLQlwcmludGsoS0VSTl9ERUJVRwotCSAgICAgICAiSU5UQ0xSID0gJXA6JXBcbiIsICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRDTFIgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVENMUikpOwotCXByaW50ayhLRVJOX0RFQlVHCi0JICAgICAgICJJTlRQUEVTID0gJXA6JXBcbiIsICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRQUEVTICsgNCksCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRQUEVTKSk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9zZXR1cC5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTQ1NmIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKgotICogIGFyY2gvbWlwcy9kZGI1MDc0L3NldHVwLmMgLS0gTkVDIEREQiBWcmMtNTA3NCBzZXR1cCByb3V0aW5lcwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rYmRfbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vYmNhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KLSNpbmNsdWRlIDxhc20vZ2RiLXN0dWIuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9uaWxlNC5oPgotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjUwNzQuaD4KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0KLXN0YXRpYyB2b2lkICgqYmFja190b19wcm9tKSAodm9pZCkgPSAodm9pZCAoKikodm9pZCkpIDB4YmZjMDAwMDA7Ci0KLXN0YXRpYyB2b2lkIGRkYl9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKLXsKLQl1MzIgdDsKLQotCS8qIFBDSSBjb2xkIHJlc2V0ICovCi0JdCA9IG5pbGU0X2luMzIoTklMRTRfUENJQ1RSTCArIDQpOwotCXQgfD0gMHg0MDAwMDAwMDsKLQluaWxlNF9vdXQzMihOSUxFNF9QQ0lDVFJMICsgNCwgdCk7Ci0JLyogQ1BVIGNvbGQgcmVzZXQgKi8KLQl0ID0gbmlsZTRfaW4zMihOSUxFNF9DUFVTVEFUKTsKLQl0IHw9IDE7Ci0JbmlsZTRfb3V0MzIoTklMRTRfQ1BVU1RBVCwgdCk7Ci0JLyogQ2FsbCB0aGUgUFJPTSAqLwotCWJhY2tfdG9fcHJvbSgpOwotfQotCi1zdGF0aWMgdm9pZCBkZGJfbWFjaGluZV9oYWx0KHZvaWQpCi17Ci0JcHJpbnRrKCJEREIgVnJjLTUwNzQgaGFsdGVkLlxuIik7Ci0JZG8gewotCX0gd2hpbGUgKDEpOwotfQotCi1zdGF0aWMgdm9pZCBkZGJfbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKLXsKLQlwcmludGsoIkREQiBWcmMtNTA3NCBoYWx0ZWQuIFBsZWFzZSB0dXJuIG9mZiB0aGUgcG93ZXIuXG4iKTsKLQlkbyB7Ci0JfSB3aGlsZSAoMSk7Ci19Ci0KLWV4dGVybiB2b2lkIHJ0Y19kczEzODZfaW5pdCh1bnNpZ25lZCBsb25nIGJhc2UpOwotCi1leHRlcm4gdm9pZCAoKmJvYXJkX3RpbWVyX3NldHVwKSAoc3RydWN0IGlycWFjdGlvbiAqIGlycSk7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkZGJfdGltZXJfaW5pdChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCi17Ci0JLyogc2V0IHRoZSBjbG9jayB0byAxIEh6ICovCi0JbmlsZTRfb3V0MzIoTklMRTRfVDJDVFJMLCAxMDAwMDAwKTsKLQkvKiBlbmFibGUgdGhlIEdlbmVyYWwtUHVycG9zZSBUaW1lciAqLwotCW5pbGU0X291dDMyKE5JTEU0X1QyQ1RSTCArIDQsIDB4MDAwMDAwMDEpOwotCS8qIHJlc2V0IHRpbWVyICovCi0JbmlsZTRfb3V0MzIoTklMRTRfVDJDTlRSLCAwKTsKLQkvKiBlbmFibGUgaW50ZXJydXB0ICovCi0Jc2V0dXBfaXJxKG5pbGU0X3RvX2lycShOSUxFNF9JTlRfR1BUKSwgaXJxKTsKLQluaWxlNF9lbmFibGVfaXJxKG5pbGU0X3RvX2lycShOSUxFNF9JTlRfR1BUKSk7Ci0JY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sCi0JCSAgICAgICAgICBJRV9JUlEwIHwgSUVfSVJRMSB8IElFX0lSUTIgfCBJRV9JUlEzIHwgSUVfSVJRNCk7Ci0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGRkYl90aW1lX2luaXQodm9pZCkKLXsKLQkvKiB3ZSBoYXZlIGRzMTM5NiBSVEMgY2hpcCAqLwotCXJ0Y19kczEzODZfaW5pdChLU0VHMUFERFIoRERCX1BDSV9NRU1fQkFTRSkpOwotfQotCi0KLQotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQotewotCXNldF9pb19wb3J0X2Jhc2UoTklMRTRfUENJX0lPX0JBU0UpOwotCWlzYV9zbG90X29mZnNldCA9IE5JTEU0X1BDSV9NRU1fQkFTRTsKLQlib2FyZF90aW1lcl9zZXR1cCA9IGRkYl90aW1lcl9pbml0OwotCWJvYXJkX3RpbWVfaW5pdCA9IGRkYl90aW1lX2luaXQ7Ci0KLQotCV9tYWNoaW5lX3Jlc3RhcnQgPSBkZGJfbWFjaGluZV9yZXN0YXJ0OwotCV9tYWNoaW5lX2hhbHQgPSBkZGJfbWFjaGluZV9oYWx0OwotCXBtX3Bvd2VyX29mZiA9IGRkYl9tYWNoaW5lX3Bvd2VyX29mZjsKLQotCWRkYl9vdXQzMihEREJfQkFSMCwgMCk7Ci0KLQlkZGJfc2V0X3BtcihEREJfUENJSU5JVDAsIEREQl9QQ0lDTURfSU8sIDAsIDB4MTApOwotCWRkYl9zZXRfcG1yKEREQl9QQ0lJTklUMSwgRERCX1BDSUNNRF9NRU0sIEREQl9QQ0lfTUVNX0JBU0UgLCAweDEwKTsKLQotCS8qIFJlYm9vdCBvbiBwYW5pYyAqLwotCXBhbmljX3RpbWVvdXQgPSAxODA7Ci19Ci0KLSNkZWZpbmUgVVNFX05JTEU0X1NFUklBTAkwCi0KLSNpZiBVU0VfTklMRTRfU0VSSUFMCi0jZGVmaW5lIG5zMTY1NTBfaW4ocmVnKQkJbmlsZTRfaW44KChyZWcpKjgpCi0jZGVmaW5lIG5zMTY1NTBfb3V0KHJlZywgdmFsKQluaWxlNF9vdXQ4KChyZWcpKjgsICh2YWwpKQotI2Vsc2UKLSNkZWZpbmUgTlMxNjU1MF9CQVNFCQkoTklMRTRfUENJX0lPX0JBU0UrMHgwM2Y4KQotc3RhdGljIGlubGluZSB1OCBuczE2NTUwX2luKHUzMiByZWcpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdTggKikgKE5TMTY1NTBfQkFTRSArIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuczE2NTUwX291dCh1MzIgcmVnLCB1OCB2YWwpCi17Ci0JKih2b2xhdGlsZSB1OCAqKSAoTlMxNjU1MF9CQVNFICsgcmVnKSA9IHZhbDsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIE5TMTY1NTBfUkJSCQkwCi0jZGVmaW5lIE5TMTY1NTBfVEhSCQkwCi0jZGVmaW5lIE5TMTY1NTBfRExMCQkwCi0jZGVmaW5lIE5TMTY1NTBfSUVSCQkxCi0jZGVmaW5lIE5TMTY1NTBfRExNCQkxCi0jZGVmaW5lIE5TMTY1NTBfRkNSCQkyCi0jZGVmaW5lIE5TMTY1NTBfSUlSCQkyCi0jZGVmaW5lIE5TMTY1NTBfTENSCQkzCi0jZGVmaW5lIE5TMTY1NTBfTUNSCQk0Ci0jZGVmaW5lIE5TMTY1NTBfTFNSCQk1Ci0jZGVmaW5lIE5TMTY1NTBfTVNSCQk2Ci0jZGVmaW5lIE5TMTY1NTBfU0NSCQk3Ci0KLSNkZWZpbmUgTlMxNjU1MF9MU1JfRFIJCTB4MDEJLyogRGF0YSByZWFkeSAqLwotI2RlZmluZSBOUzE2NTUwX0xTUl9PRQkJMHgwMgkvKiBPdmVycnVuICovCi0jZGVmaW5lIE5TMTY1NTBfTFNSX1BFCQkweDA0CS8qIFBhcml0eSBlcnJvciAqLwotI2RlZmluZSBOUzE2NTUwX0xTUl9GRQkJMHgwOAkvKiBGcmFtaW5nIGVycm9yICovCi0jZGVmaW5lIE5TMTY1NTBfTFNSX0JJCQkweDEwCS8qIEJyZWFrICovCi0jZGVmaW5lIE5TMTY1NTBfTFNSX1RIUkUJMHgyMAkvKiBYbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KLSNkZWZpbmUgTlMxNjU1MF9MU1JfVEVNVAkweDQwCS8qIFhtaXR0ZXIgZW1wdHkgKi8KLSNkZWZpbmUgTlMxNjU1MF9MU1JfRVJSCQkweDgwCS8qIEVycm9yICovCi0KLQotdm9pZCBfc2VyaW5pdCh2b2lkKQotewotI2lmIFVTRV9OSUxFNF9TRVJJQUwKLQluczE2NTUwX291dChOUzE2NTUwX0xDUiwgMHg4MCk7Ci0JbnMxNjU1MF9vdXQoTlMxNjU1MF9ETE0sIDB4MDApOwotCW5zMTY1NTBfb3V0KE5TMTY1NTBfRExMLCAweDM2KTsJLyogOTYwMCBiYXVkICovCi0JbnMxNjU1MF9vdXQoTlMxNjU1MF9MQ1IsIDB4MDApOwotCW5zMTY1NTBfb3V0KE5TMTY1NTBfTENSLCAweDAzKTsKLQluczE2NTUwX291dChOUzE2NTUwX0ZDUiwgMHg0Nyk7Ci0jZWxzZQotCS8qIGRvbmUgYnkgUE1PTiAqLwotI2VuZGlmCi19Ci0KLXZvaWQgX3B1dGMoY2hhciBjKQotewotCXdoaWxlICghKG5zMTY1NTBfaW4oTlMxNjU1MF9MU1IpICYgTlMxNjU1MF9MU1JfVEhSRSkpOwotCW5zMTY1NTBfb3V0KE5TMTY1NTBfVEhSLCBjKTsKLQlpZiAoYyA9PSAnXG4nKSB7Ci0JCXdoaWxlICghKG5zMTY1NTBfaW4oTlMxNjU1MF9MU1IpICYgTlMxNjU1MF9MU1JfVEhSRSkpOwotCQluczE2NTUwX291dChOUzE2NTUwX1RIUiwgJ1xyJyk7Ci0JfQotfQotCi12b2lkIF9wdXRzKGNvbnN0IGNoYXIgKnMpCi17Ci0JY2hhciBjOwotCXdoaWxlICgoYyA9ICpzKyspKQotCQlfcHV0YyhjKTsKLX0KLQotY2hhciBfZ2V0Yyh2b2lkKQotewotCXdoaWxlICghKG5zMTY1NTBfaW4oTlMxNjU1MF9MU1IpICYgTlMxNjU1MF9MU1JfRFIpKTsKLQlyZXR1cm4gbnMxNjU1MF9pbihOUzE2NTUwX1JCUik7Ci19Ci0KLWludCBfdGVzdGModm9pZCkKLXsKLQlyZXR1cm4gKG5zMTY1NTBfaW4oTlMxNjU1MF9MU1IpICYgTlMxNjU1MF9MU1JfRFIpICE9IDA7Ci19Ci0KLQotLyoKLSAqICBIZXhhZGVjaW1hbCA3LXNlZ21lbnQgTEVECi0gKi8KLXZvaWQgZGRiNTA3NF9sZWRfaGV4KGludCBoZXgpCi17Ci0Jb3V0YihoZXgsIDB4ODApOwotfQotCi0KLS8qCi0gKiAgTEVEcyBEMiBhbmQgRDMsIGNvbm5lY3RlZCB0byB0aGUgR1BJTyBwaW5zIG9mIHRoZSBQTVUgaW4gdGhlIEFMaSBNMTU0MwotICovCi1zdHJ1Y3QgcGNpX2RldiAqcGNpX3BtdSA9IE5VTEw7Ci0KLXZvaWQgZGRiNTA3NF9sZWRfZDIoaW50IG9uKQotewotCXU4IHQ7Ci0KLQlpZiAocGNpX3BtdSkgewotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfcG11LCAweDdlLCAmdCk7Ci0JCWlmIChvbikKLQkJCXQgJj0gMHg3ZjsKLQkJZWxzZQotCQkJdCB8PSAweDgwOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGNpX3BtdSwgMHg3ZSwgdCk7Ci0JfQotfQotCi12b2lkIGRkYjUwNzRfbGVkX2QzKGludCBvbikKLXsKLQl1OCB0OwotCi0JaWYgKHBjaV9wbXUpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX3BtdSwgMHg3ZSwgJnQpOwotCQlpZiAob24pCi0JCQl0ICY9IDB4YmY7Ci0JCWVsc2UKLQkJCXQgfD0gMHg0MDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9wbXUsIDB4N2UsIHQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvTWFrZWZpbGUgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjAzMTJjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBORUMgRERCIFZyYy01NDc2IHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMKLSMgdW5kZXIgTGludXguCi0jCi0KLW9iai15CQkJKz0gc2V0dXAubyBpcnEubyBuaWxlNF9waWMubyB2cmM1NDc2X2lycS5vCi1vYmotJChDT05GSUdfS0dEQikJKz0gZGJnX2lvLm8KLQotRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9kYmdfaW8uYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvZGJnX2lvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjk2YTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9kYmdfaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKgotICoga2dkYiBpbyBmdW5jdGlvbnMgZm9yIEREQjU0NzYuICBXZSB1c2UgdGhlIHNlY29uZCBzZXJpYWwgcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PSBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLS8qIFtqc3VuXSB3ZSB1c2UgdGhlIHNlY29uZCBzZXJpYWwgcG9ydCBmb3Iga2RiICovCi0jZGVmaW5lICAgICAgICAgQkFTRSAgICAgICAgICAgICAgICAgICAgMHhhNjAwMDJmOAotI2RlZmluZSAgICAgICAgIE1BWF9CQVVEICAgICAgICAgICAgICAgIDExNTIwMAotCi0vKiBkaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHR3byBzZXJpYWwgcmVnaXN0ZXJzICovCi0jZGVmaW5lICAgICAgICAgUkVHX09GRlNFVCAgICAgICAgICAgICAgMQotCi0vKgotICogMCAtIGtnZGIgZG9lcyBzZXJpYWwgaW5pdAotICogMSAtIGtnZGIgc2tpcCBzZXJpYWwgaW5pdAotICovCi1zdGF0aWMgaW50IHJlbW90ZURlYnVnSW5pdGlhbGl6ZWQgPSAwOwotCi0vKgotICogdGhlIGRlZmF1bHQgYmF1ZCByYXRlICppZioga2dkYiBkb2VzIHNlcmlhbCBpbml0Ci0gKi8KLSNkZWZpbmUJCUJBVURfREVGQVVMVAkJVUFSVDE2NTUwX0JBVURfMzg0MDAKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT0gRU5EIE9GIENPTkZJRyA9PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyOwotCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMjQwMCAgICAgICAgICAgICAyNDAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfNDgwMCAgICAgICAgICAgICA0ODAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfOTYwMCAgICAgICAgICAgICA5NjAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMTkyMDAgICAgICAgICAgICAxOTIwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzM4NDAwICAgICAgICAgICAgMzg0MDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfQkFVRF81NzYwMCAgICAgICAgICAgIDU3NjAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMTE1MjAwICAgICAgICAgICAxMTUyMDAKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfTk9ORSAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfT0REICAgICAgICAgICAgMHgwOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfRVZFTiAgICAgICAgICAgMHgxOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfTUFSSyAgICAgICAgICAgMHgyOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfU1BBQ0UgICAgICAgICAgMHgzOAotCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfNUJJVCAgICAgICAgICAgICAweDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfREFUQV82QklUICAgICAgICAgICAgIDB4MQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzdCSVQgICAgICAgICAgICAgMHgyCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfOEJJVCAgICAgICAgICAgICAweDMKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9TVE9QXzFCSVQgICAgICAgICAgICAgMHgwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX1NUT1BfMkJJVCAgICAgICAgICAgICAweDQKLQotLyogcmVnaXN0ZXIgb2Zmc2V0ICovCi0jZGVmaW5lICAgICAgICAgT0ZTX1JDVl9CVUZGRVIgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIE9GU19UUkFOU19IT0xEICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBPRlNfU0VORF9CVUZGRVIgICAgICAgICAwCi0jZGVmaW5lICAgICAgICAgT0ZTX0lOVFJfRU5BQkxFICAgICAgICAgKDEqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfSU5UUl9JRCAgICAgICAgICAgICAoMipSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19EQVRBX0ZPUk1BVCAgICAgICAgICgzKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0xJTkVfQ09OVFJPTCAgICAgICAgKDMqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fQ09OVFJPTCAgICAgICAoNCpSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19SUzIzMl9PVVRQVVQgICAgICAgICg0KlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0xJTkVfU1RBVFVTICAgICAgICAgKDUqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fU1RBVFVTICAgICAgICAoNipSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19SUzIzMl9JTlBVVCAgICAgICAgICg2KlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX1NDUkFUQ0hfUEFEICAgICAgICAgKDcqUkVHX09GRlNFVCkKLQotI2RlZmluZSAgICAgICAgIE9GU19ESVZJU09SX0xTQiAgICAgICAgICgwKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0RJVklTT1JfTVNCICAgICAgICAgKDEqUkVHX09GRlNFVCkKLQotCi0vKiBtZW1vcnktbWFwcGVkIHJlYWQvd3JpdGUgb2YgdGhlIHBvcnQgKi8KLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUkVBRCh5KSAgICAoKigodm9sYXRpbGUgdWludDgqKShCQVNFICsgeSkpKQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9XUklURSh5LCB6KSAgKCgqKCh2b2xhdGlsZSB1aW50OCopKEJBU0UgKyB5KSkpID0geikKLQotdm9pZCBkZWJ1Z0luaXQodWludDMyIGJhdWQsIHVpbnQ4IGRhdGEsIHVpbnQ4IHBhcml0eSwgdWludDggc3RvcCkKLXsKLSAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0gICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwotCi0gICAgICAgIC8qIHNldCB1cCBiYXVkIHJhdGUgKi8KLSAgICAgICAgewotICAgICAgICAgICAgICAgIHVpbnQzMiBkaXZpc29yOwotCi0gICAgICAgICAgICAgICAgLyogc2V0IERJQUIgYml0ICovCi0gICAgICAgICAgICAgICAgVUFSVDE2NTUwX1dSSVRFKE9GU19MSU5FX0NPTlRST0wsIDB4ODApOwotCi0gICAgICAgICAgICAgICAgLyogc2V0IGRpdmlzb3IgKi8KLSAgICAgICAgICAgICAgICBkaXZpc29yID0gTUFYX0JBVUQgLyBiYXVkOwotICAgICAgICAgICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfRElWSVNPUl9MU0IsIGRpdmlzb3IgJiAweGZmKTsKLSAgICAgICAgICAgICAgICBVQVJUMTY1NTBfV1JJVEUoT0ZTX0RJVklTT1JfTVNCLCAoZGl2aXNvciAmIDB4ZmYwMCkgPj4gOCk7Ci0KLSAgICAgICAgICAgICAgICAvKiBjbGVhciBESUFCIGJpdCAqLwotICAgICAgICAgICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfTElORV9DT05UUk9MLCAweDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogc2V0IGRhdGEgZm9ybWF0ICovCi0gICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfREFUQV9GT1JNQVQsIGRhdGEgfCBwYXJpdHkgfCBzdG9wKTsKLX0KLQotCi11aW50OCBnZXREZWJ1Z0NoYXIodm9pZCkKLXsKLSAgICAgICAgaWYgKCFyZW1vdGVEZWJ1Z0luaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3RlRGVidWdJbml0aWFsaXplZCA9IDE7Ci0gICAgICAgICAgICAgICAgZGVidWdJbml0KEJBVURfREVGQVVMVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDE2NTUwX0RBVEFfOEJJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDE2NTUwX1BBUklUWV9OT05FLCBVQVJUMTY1NTBfU1RPUF8xQklUKTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICgoVUFSVDE2NTUwX1JFQUQoT0ZTX0xJTkVfU1RBVFVTKSAmIDB4MSkgPT0gMCk7Ci0gICAgICAgIHJldHVybiBVQVJUMTY1NTBfUkVBRChPRlNfUkNWX0JVRkZFUik7Ci19Ci0KLQotaW50IHB1dERlYnVnQ2hhcih1aW50OCBieXRlKQotewotICAgICAgICBpZiAoIXJlbW90ZURlYnVnSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgICAgICByZW1vdGVEZWJ1Z0luaXRpYWxpemVkID0gMTsKLSAgICAgICAgICAgICAgICBkZWJ1Z0luaXQoQkFVRF9ERUZBVUxULAotICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMTY1NTBfREFUQV84QklULAotICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX05PTkUsIFVBUlQxNjU1MF9TVE9QXzFCSVQpOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKChVQVJUMTY1NTBfUkVBRChPRlNfTElORV9TVEFUVVMpICYgMHgyMCkgPT0gMCk7Ci0gICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfU0VORF9CVUZGRVIsIGJ5dGUpOwotICAgICAgICByZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTgzYTFmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqICBhcmNoL21pcHMvZGRiNTQ3Ni9pcnEuYyAtLSBORUMgRERCIFZyYy01NDc2IGludGVycnVwdCByb3V0aW5lcwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqCi0gKiBSZS13cml0ZSB0aGUgd2hvbGUgdGhpbmcgdG8gdXNlIG5ldyBpcnEuYyBmaWxlLgotICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLQotI2RlZmluZSBNMTU0M19QTlBfQ09ORklHCTB4MDNmMAkvKiBQblAgQ29uZmlnIFBvcnQgKi8KLSNkZWZpbmUgTTE1NDNfUE5QX0lOREVYCQkweDAzZjAJLyogUG5QIEluZGV4IFBvcnQgKi8KLSNkZWZpbmUgTTE1NDNfUE5QX0RBVEEJCTB4MDNmMQkvKiBQblAgRGF0YSBQb3J0ICovCi0KLSNkZWZpbmUgTTE1NDNfUE5QX0FMVF9DT05GSUcJMHgwMzcwCS8qIEFsdGVybmF0aXZlIFBuUCBDb25maWcgUG9ydCAqLwotI2RlZmluZSBNMTU0M19QTlBfQUxUX0lOREVYCTB4MDM3MAkvKiBBbHRlcm5hdGl2ZSBQblAgSW5kZXggUG9ydCAqLwotI2RlZmluZSBNMTU0M19QTlBfQUxUX0RBVEEJMHgwMzcxCS8qIEFsdGVybmF0aXZlIFBuUCBEYXRhIFBvcnQgKi8KLQotI2RlZmluZSBNMTU0M19JTlQxX01BU1RFUl9DVFJMCTB4MDAyMAkvKiBJTlRfMSAobWFzdGVyKSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE0xNTQzX0lOVDFfTUFTVEVSX01BU0sJMHgwMDIxCS8qIElOVF8xIChtYXN0ZXIpIE1hc2sgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBNMTU0M19JTlQxX1NMQVZFX0NUUkwJMHgwMGEwCS8qIElOVF8xIChzbGF2ZSkgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNMTU0M19JTlQxX1NMQVZFX01BU0sJMHgwMGExCS8qIElOVF8xIChzbGF2ZSkgTWFzayBSZWdpc3RlciAqLwotCi0jZGVmaW5lIE0xNTQzX0lOVDFfTUFTVEVSX0VMQ1IJMHgwNGQwCS8qIElOVF8xIChtYXN0ZXIpIEVkZ2UvTGV2ZWwgQ29udHJvbCAqLwotI2RlZmluZSBNMTU0M19JTlQxX1NMQVZFX0VMQ1IJMHgwNGQxCS8qIElOVF8xIChzbGF2ZSkgRWRnZS9MZXZlbCBDb250cm9sICovCi0KLXN0YXRpYyB2b2lkIG0xNTQzX2lycV9zZXR1cCh2b2lkKQotewotCS8qCi0JICogIFRoZSBBTEkgTTE1NDMgaGFzIDEzIGludGVycnVwdCBpbnB1dHMsIElSUTEuLklSUTEzLiAgTm90IGFsbAotCSAqICB0aGUgcG9zc2libGUgSU8gc291cmNlcyBpbiB0aGUgTTE1NDMgYXJlIGluIHVzZSBieSB1cy4gIFdlIHdpbGwKLQkgKiAgdXNlIHRoZSBmb2xsb3dpbmcgbWFwcGluZzoKLQkgKgotCSAqICAgICAgSVJRMSAgLSBrZXlib2FyZCAoZGVmYXVsdCBzZXQgYnkgTTE1NDMpCi0JICogICAgICBJUlEzICAtIHJlc2VydmVkIGZvciBVQVJUIEIgKGRlZmF1bHQgc2V0IGJ5IE0xNTQzKSAobm90ZSB0aGF0Ci0JICogICAgICAgICAgICAgIHRoZSBzY2hlbWF0aWNzIGZvciB0aGUgRERCIFZyYy01NDc2IGJvYXJkIHNlZW0gdG8KLQkgKiAgICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCBJUlEzIGlzIGNvbm5lY3RlZCB0byB0aGUgRFMxMzg2Ci0JICogICAgICAgICAgICAgIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCBvdXRwdXQgc28gd2UgbWlnaHQgaGF2ZQotCSAqICAgICAgICAgICAgICBhIGNvbmZsaWN0KQotCSAqICAgICAgSVJRNCAgLSByZXNlcnZlZCBmb3IgVUFSVCBBIChkZWZhdWx0IHNldCBieSBNMTU0MykKLQkgKiAgICAgIElSUTUgIC0gcGFyYWxsZWwgKGRlZmF1bHQgc2V0IGJ5IE0xNTQzKQotCSAqICAgICAgSVJROCAgLSBEUzEzODYgdGltZSBvZiBkYXkgKFJUQykgaW50ZXJydXB0Ci0JICogICAgICBJUlE5ICAtIFVTQiAoaGFyZHdpcmVkIGluIGRkYl9zZXR1cCkKLQkgKiAgICAgIElSUTEwIC0gUE1VIChoYXJkd2lyZWQgaW4gZGRiX3NldHVwKQotCSAqICAgICAgSVJRMTIgLSBtb3VzZQotCSAqICAgICAgSVJRMTQsMTUgLSBJREUgY29udHJvbGxlciAobmVlZCB0byBiZSBjb25maXJtZWQsIGpzdW4pCi0JICovCi0KLQkvKgotCSAqICBBc3NpbmcgbW91c2UgaW50ZXJydXB0IHRvIElSUTEyCi0JICovCi0KLQkvKiBFbnRlciBjb25maWd1cmF0aW9uIG1vZGUgKi8KLQlvdXRiKDB4NTEsIE0xNTQzX1BOUF9DT05GSUcpOwotCW91dGIoMHgyMywgTTE1NDNfUE5QX0NPTkZJRyk7Ci0KLQkvKiBTZWxlY3QgbG9naWNhbCBkZXZpY2UgNyAoS2V5Ym9hcmQpICovCi0Jb3V0YigweDA3LCBNMTU0M19QTlBfSU5ERVgpOwotCW91dGIoMHgwNywgTTE1NDNfUE5QX0RBVEEpOwotCi0JLyogU2VsZWN0IElSUTEyICovCi0Jb3V0YigweDcyLCBNMTU0M19QTlBfSU5ERVgpOwotCW91dGIoMHgwYywgTTE1NDNfUE5QX0RBVEEpOwotCi0JLyogTGVhdmUgY29uZmlncmF0aW9uIG1vZGUgKi8KLQlvdXRiKDB4YmIsIE0xNTQzX1BOUF9DT05GSUcpOwotfQotCi1zdGF0aWMgdm9pZCBuaWxlNF9pcnFfc2V0dXAodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIE1hcCBhbGwgaW50ZXJydXB0cyB0byBDUFUgaW50ICMwIChJUDIpICovCi0JbmlsZTRfbWFwX2lycV9hbGwoMCk7Ci0KLQkvKiBQQ0kgSU5UQSMtRSMgbXVzdCBiZSBsZXZlbCB0cmlnZ2VyZWQgKi8KLQluaWxlNF9zZXRfcGNpX2lycV9sZXZlbF9vcl9lZGdlKDAsIDEpOwotCW5pbGU0X3NldF9wY2lfaXJxX2xldmVsX29yX2VkZ2UoMSwgMSk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZSgyLCAxKTsKLQluaWxlNF9zZXRfcGNpX2lycV9sZXZlbF9vcl9lZGdlKDMsIDEpOwotCi0JLyogUENJIElOVEEjLCBCIywgRCMgbXVzdCBiZSBhY3RpdmUgbG93LCBJTlRDIyBtdXN0IGJlIGFjdGl2ZSBoaWdoICovCi0JbmlsZTRfc2V0X3BjaV9pcnFfcG9sYXJpdHkoMCwgMCk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfcG9sYXJpdHkoMSwgMCk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfcG9sYXJpdHkoMiwgMSk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfcG9sYXJpdHkoMywgMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJbmlsZTRfY2xlYXJfaXJxKGkpOwotCi0JLyogRW5hYmxlIENQVSBpbnQgIzAgKi8KLQluaWxlNF9lbmFibGVfaXJxX291dHB1dCgwKTsKLQotCS8qIG1lbW9yeSByZXNvdXJjZSBhY3F1aXJlIGluIGRkYl9zZXR1cCAqLwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfY2FzY2FkZSA9IHsgbm9fYWN0aW9uLCAwLCBDUFVfTUFTS19OT05FLCAiY2FzY2FkZSIsIE5VTEwsIE5VTEwgfTsKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9lcnJvciA9IHsgbm9fYWN0aW9uLCAwLCBDUFVfTUFTS19OT05FLCAiZXJyb3IiLCBOVUxMLCBOVUxMIH07Ci0KLWV4dGVybiBpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmlycWFjdGlvbik7Ci1leHRlcm4gdm9pZCBtaXBzX2NwdV9pcnFfaW5pdCh1MzIgaXJxX2Jhc2UpOwotZXh0ZXJuIHZvaWQgdnJjNTQ3Nl9pcnFfaW5pdCh1MzIgaXJxX2Jhc2UpOwotCi1leHRlcm4gdm9pZCB2cmM1NDc2X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLWFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCk7Ci0KLQlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KQotCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNywgcmVncyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQotCQl2cmM1NDc2X2lycV9kaXNwYXRjaChyZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDMpCi0JCWRvX0lSUShDUFVfSVJRX0JBU0UgKyAzLCByZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDQpCi0JCWRvX0lSUShDUFVfSVJRX0JBU0UgKyA0LCByZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDUpCi0JCWRvX0lSUShDUFVfSVJRX0JBU0UgKyA1LCByZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpCi0JCWRvX0lSUShDUFVfSVJRX0JBU0UgKyA2LCByZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDApCi0JCWRvX0lSUShDUFVfSVJRX0JBU0UsIHJlZ3MpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKLQkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDEsIHJlZ3MpOwotCi0JdnJjNTQ3Nl9pcnFfZGlzcGF0Y2gocmVncyk7Ci19Ci0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKLXsKLQkvKiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiAqLwotCW5pbGU0X2lycV9zZXR1cCgpOwotCW0xNTQzX2lycV9zZXR1cCgpOwotCi0JLyogY29udHJvbGxlciBzZXR1cCAqLwotCWluaXRfaTgyNTlfaXJxcygpOwotCXZyYzU0NzZfaXJxX2luaXQoVlJDNTQ3Nl9JUlFfQkFTRSk7Ci0JbWlwc19jcHVfaXJxX2luaXQoQ1BVX0lSUV9CQVNFKTsKLQotCS8qIHNldHVwIGNhc2NhZGUgaW50ZXJydXB0cyAqLwotCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JODI1OV9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwotCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyBDUFVfVlJDNTQ3Nl9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwotCi0JLyogc2V0dXAgZXJyb3IgaW50ZXJydXB0cyBmb3IgZGVidWdnaW5nICovCi0Jc2V0dXBfaXJxKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9DUENFLCAmaXJxX2Vycm9yKTsKLQlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX0NOVEQsICZpcnFfZXJyb3IpOwotCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfTUNFLCAmaXJxX2Vycm9yKTsKLQlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX0xCUlQsICZpcnFfZXJyb3IpOwotCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfUENJUywgJmlycV9lcnJvcik7Ci0Jc2V0dXBfaXJxKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9QQ0ksICZpcnFfZXJyb3IpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9uaWxlNF9waWMuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvbmlsZTRfcGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MzBjZWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9uaWxlNF9waWMuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogIGFyY2gvbWlwcy9kZGI1NDc2L25pbGU0LmMgLS0KLSAqICAJbG93LWxldmVsIFBJQyBjb2RlIGZvciBORUMgVnJjLTU0NzYgKE5pbGUgNCkKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCi0gKgotICogIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0KLQotLyoKLSAqICBJbnRlcnJ1cHQgUHJvZ3JhbW1pbmcKLSAqLwotdm9pZCBuaWxlNF9tYXBfaXJxKGludCBuaWxlNF9pcnEsIGludCBjcHVfaXJxKQotewotCXUzMiBvZmZzZXQsIHQ7Ci0KLQlvZmZzZXQgPSBEREJfSU5UQ1RSTDsKLQlpZiAobmlsZTRfaXJxID49IDgpIHsKLQkJb2Zmc2V0ICs9IDQ7Ci0JCW5pbGU0X2lycSAtPSA4OwotCX0KLQl0ID0gZGRiX2luMzIob2Zmc2V0KTsKLQl0ICY9IH4oNyA8PCAobmlsZTRfaXJxICogNCkpOwotCXQgfD0gY3B1X2lycSA8PCAobmlsZTRfaXJxICogNCk7Ci0JZGRiX291dDMyKG9mZnNldCwgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfbWFwX2lycV9hbGwoaW50IGNwdV9pcnEpCi17Ci0JdTMyIGFsbCwgdDsKLQotCWFsbCA9IGNwdV9pcnE7Ci0JYWxsIHw9IGFsbCA8PCA0OwotCWFsbCB8PSBhbGwgPDwgODsKLQlhbGwgfD0gYWxsIDw8IDE2OwotCXQgPSBkZGJfaW4zMihEREJfSU5UQ1RSTCk7Ci0JdCAmPSAweDg4ODg4ODg4OwotCXQgfD0gYWxsOwotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCwgdCk7Ci0JdCA9IGRkYl9pbjMyKEREQl9JTlRDVFJMICsgNCk7Ci0JdCAmPSAweDg4ODg4ODg4OwotCXQgfD0gYWxsOwotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCArIDQsIHQpOwotfQotCi12b2lkIG5pbGU0X2VuYWJsZV9pcnEoaW50IG5pbGU0X2lycSkKLXsKLQl1MzIgb2Zmc2V0LCB0OwotCi0Jb2Zmc2V0ID0gRERCX0lOVENUUkw7Ci0JaWYgKG5pbGU0X2lycSA+PSA4KSB7Ci0JCW9mZnNldCArPSA0OwotCQluaWxlNF9pcnEgLT0gODsKLQl9Ci0JdCA9IGRkYl9pbjMyKG9mZnNldCk7Ci0JdCB8PSA4IDw8IChuaWxlNF9pcnEgKiA0KTsKLQlkZGJfb3V0MzIob2Zmc2V0LCB0KTsKLX0KLQotdm9pZCBuaWxlNF9kaXNhYmxlX2lycShpbnQgbmlsZTRfaXJxKQotewotCXUzMiBvZmZzZXQsIHQ7Ci0KLQlvZmZzZXQgPSBEREJfSU5UQ1RSTDsKLQlpZiAobmlsZTRfaXJxID49IDgpIHsKLQkJb2Zmc2V0ICs9IDQ7Ci0JCW5pbGU0X2lycSAtPSA4OwotCX0KLQl0ID0gZGRiX2luMzIob2Zmc2V0KTsKLQl0ICY9IH4oOCA8PCAobmlsZTRfaXJxICogNCkpOwotCWRkYl9vdXQzMihvZmZzZXQsIHQpOwotfQotCi12b2lkIG5pbGU0X2Rpc2FibGVfaXJxX2FsbCh2b2lkKQotewotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCwgMCk7Ci0JZGRiX291dDMyKEREQl9JTlRDVFJMICsgNCwgMCk7Ci19Ci0KLXUxNiBuaWxlNF9nZXRfaXJxX3N0YXQoaW50IGNwdV9pcnEpCi17Ci0JcmV0dXJuIGRkYl9pbjE2KEREQl9JTlRTVEFUMCArIGNwdV9pcnEgKiAyKTsKLX0KLQotdm9pZCBuaWxlNF9lbmFibGVfaXJxX291dHB1dChpbnQgY3B1X2lycSkKLXsKLQl1MzIgdDsKLQotCXQgPSBkZGJfaW4zMihEREJfSU5UU1RBVDEgKyA0KTsKLQl0IHw9IDEgPDwgKDE2ICsgY3B1X2lycSk7Ci0JZGRiX291dDMyKEREQl9JTlRTVEFUMSwgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfZGlzYWJsZV9pcnFfb3V0cHV0KGludCBjcHVfaXJxKQotewotCXUzMiB0OwotCi0JdCA9IGRkYl9pbjMyKEREQl9JTlRTVEFUMSArIDQpOwotCXQgJj0gfigxIDw8ICgxNiArIGNwdV9pcnEpKTsKLQlkZGJfb3V0MzIoRERCX0lOVFNUQVQxLCB0KTsKLX0KLQotdm9pZCBuaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eShpbnQgcGNpX2lycSwgaW50IGhpZ2gpCi17Ci0JdTMyIHQ7Ci0KLQl0ID0gZGRiX2luMzIoRERCX0lOVFBQRVMpOwotCWlmIChoaWdoKQotCQl0ICY9IH4oMSA8PCAocGNpX2lycSAqIDIpKTsKLQllbHNlCi0JCXQgfD0gMSA8PCAocGNpX2lycSAqIDIpOwotCWRkYl9vdXQzMihEREJfSU5UUFBFUywgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZShpbnQgcGNpX2lycSwgaW50IGxldmVsKQotewotCXUzMiB0OwotCi0JdCA9IGRkYl9pbjMyKEREQl9JTlRQUEVTKTsKLQlpZiAobGV2ZWwpCi0JCXQgfD0gMiA8PCAocGNpX2lycSAqIDIpOwotCWVsc2UKLQkJdCAmPSB+KDIgPDwgKHBjaV9pcnEgKiAyKSk7Ci0JZGRiX291dDMyKEREQl9JTlRQUEVTLCB0KTsKLX0KLQotdm9pZCBuaWxlNF9jbGVhcl9pcnEoaW50IG5pbGU0X2lycSkKLXsKLQlkZGJfb3V0MzIoRERCX0lOVENMUiwgMSA8PCBuaWxlNF9pcnEpOwotfQotCi12b2lkIG5pbGU0X2NsZWFyX2lycV9tYXNrKHUzMiBtYXNrKQotewotCWRkYl9vdXQzMihEREJfSU5UQ0xSLCBtYXNrKTsKLX0KLQotdTggbmlsZTRfaTgyNTlfaWFjayh2b2lkKQotewotCXU4IGlycTsKLQl1MzIgcmVnOwotCi0JLyogU2V0IHdpbmRvdyAwIGZvciBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgKi8KLQlyZWcgPSBkZGJfaW4zMihEREJfUENJSU5JVDApOwotCi0JZGRiX3NldF9wbXIoRERCX1BDSUlOSVQwLCBEREJfUENJQ01EX0lBQ0ssIDAsIEREQl9QQ0lfQUNDRVNTXzMyKTsKLQlpcnEgPSAqKHZvbGF0aWxlIHU4ICopIEtTRUcxQUREUihEREJfUENJX0lBQ0tfQkFTRSk7Ci0JLyogcmVzdG9yZSB3aW5kb3cgMCBmb3IgUENJIEkvTyBzcGFjZSAqLwotCS8vIGRkYl9zZXRfcG1yKEREQl9QQ0lJTklUMCwgRERCX1BDSUNNRF9JTywgMCwgRERCX1BDSV9BQ0NFU1NfMzIpOwotCWRkYl9vdXQzMihEREJfUENJSU5JVDAsIHJlZyk7Ci0KLQkvKiBpODI2OS5jIHNldCB0aGUgYmFzZSB2ZWN0b3IgdG8gYmUgMHgwICovCi0JcmV0dXJuIGlycSArIEk4MjU5X0lSUV9CQVNFOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfUlVOVElNRV9ERUJVRykKLXZvaWQgbmlsZTRfZHVtcF9pcnFfc3RhdHVzKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIgotCSAgICAgICBDUFVTVEFUID0gJXA6JXBcbiIsICh2b2lkICopIGRkYl9pbjMyKEREQl9DUFVTVEFUICsgNCksCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9DUFVTVEFUKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIgotCSAgICAgICBJTlRDVFJMID0gJXA6JXBcbiIsICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRDVFJMICsgNCksCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRDVFJMKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcKLQkgICAgICAgIklOVFNUQVQwID0gJXA6JXBcbiIsCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRTVEFUMCArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UU1RBVDApKTsKLQlwcmludGsoS0VSTl9ERUJVRwotCSAgICAgICAiSU5UU1RBVDEgPSAlcDolcFxuIiwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVFNUQVQxICsgNCksCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRTVEFUMSkpOwotCXByaW50ayhLRVJOX0RFQlVHCi0JICAgICAgICJJTlRDTFIgPSAlcDolcFxuIiwgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVENMUiArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UQ0xSKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcKLQkgICAgICAgIklOVFBQRVMgPSAlcDolcFxuIiwgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVFBQRVMgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVFBQRVMpKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9zZXR1cC5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTAyYWRlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKgotICogIGFyY2gvbWlwcy9kZGI1NDc2L3NldHVwLmMgLS0gTkVDIEREQiBWcmMtNTQ3NiBzZXR1cCByb3V0aW5lcwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rYmRfbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vYmNhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KLSNpbmNsdWRlIDxhc20vZ2RiLXN0dWIuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotI2luY2x1ZGUgPGFzbS90cmFwcy5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi0vLyAjZGVmaW5lIFVTRV9DUFVfQ09VTlRFUl9USU1FUgkvKiB3aGV0aGVyIHdlIHVzZSBjcHUgY291bnRlciAqLwotCi0jaWZkZWYgVVNFX0NQVV9DT1VOVEVSX1RJTUVSCi0KLSNkZWZpbmUgQ1BVX0NPVU5URVJfRlJFUVVFTkNZICAgICAgICAgICA4MzAwMDAwMAotI2Vsc2UKLS8qIG90aGVyd2lzZSB3ZSB1c2UgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCi0jZGVmaW5lIFRJTUVSX0ZSRVFVRU5DWQkJCTgzMDAwMDAwCi0jZGVmaW5lIFRJTUVSX0JBU0UJCQlEREJfVDJDVFJMCi0jZGVmaW5lIFRJTUVSX0lSUQkJCShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfR1BUKQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkICgqYmFja190b19wcm9tKSAodm9pZCkgPSAodm9pZCAoKikodm9pZCkpIDB4YmZjMDAwMDA7Ci0KLXN0YXRpYyB2b2lkIGRkYl9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKLXsKLQl1MzIgdDsKLQotCS8qIFBDSSBjb2xkIHJlc2V0ICovCi0JdCA9IGRkYl9pbjMyKEREQl9QQ0lDVFJMICsgNCk7Ci0JdCB8PSAweDQwMDAwMDAwOwotCWRkYl9vdXQzMihEREJfUENJQ1RSTCArIDQsIHQpOwotCS8qIENQVSBjb2xkIHJlc2V0ICovCi0JdCA9IGRkYl9pbjMyKEREQl9DUFVTVEFUKTsKLQl0IHw9IDE7Ci0JZGRiX291dDMyKEREQl9DUFVTVEFULCB0KTsKLQkvKiBDYWxsIHRoZSBQUk9NICovCi0JYmFja190b19wcm9tKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRkYl9tYWNoaW5lX2hhbHQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkREQiBWcmMtNTQ3NiBoYWx0ZWQuXG4iKTsKLQl3aGlsZSAoMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRkYl9tYWNoaW5lX3Bvd2VyX29mZih2b2lkKQotewotCXByaW50ayhLRVJOX05PVElDRSAiRERCIFZyYy01NDc2IGhhbHRlZC4gUGxlYXNlIHR1cm4gb2ZmIHRoZSBwb3dlci5cbiIpOwotCXdoaWxlICgxKTsKLX0KLQotZXh0ZXJuIHZvaWQgcnRjX2RzMTM4Nl9pbml0KHVuc2lnbmVkIGxvbmcgYmFzZSk7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkZGJfdGltZV9pbml0KHZvaWQpCi17Ci0jaWYgZGVmaW5lZChVU0VfQ1BVX0NPVU5URVJfVElNRVIpCi0JbWlwc19ocHRfZnJlcXVlbmN5ID0gQ1BVX0NPVU5URVJfRlJFUVVFTkNZOwotI2VuZGlmCi0KLQkvKiB3ZSBoYXZlIGRzMTM5NiBSVEMgY2hpcCAqLwotCXJ0Y19kczEzODZfaW5pdChLU0VHMUFERFIoRERCX1BDSV9NRU1fQkFTRSkpOwotfQotCi0KLWV4dGVybiBpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmlycWFjdGlvbik7Ci1zdGF0aWMgdm9pZCBfX2luaXQgZGRiX3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKLXsKLSNpZiBkZWZpbmVkKFVTRV9DUFVfQ09VTlRFUl9USU1FUikKLQotCXVuc2lnbmVkIGludCBjb3VudDsKLQotCS8qIHdlIGFyZSB1c2luZyB0aGUgY3B1IGNvdW50ZXIgZm9yIHRpbWVyIGludGVycnVwdHMgKi8KLQlzZXR1cF9pcnEoQ1BVX0lSUV9CQVNFICsgNywgaXJxKTsKLQotCS8qIHRvIGdlbmVyYXRlIHRoZSBmaXJzdCB0aW1lciBpbnRlcnJ1cHQgKi8KLQljb3VudCA9IHJlYWRfYzBfY291bnQoKTsKLQl3cml0ZV9jMF9jb21wYXJlKGNvdW50ICsgMTAwMCk7Ci0KLSNlbHNlCi0KLQlkZGJfb3V0MzIoVElNRVJfQkFTRSwgVElNRVJfRlJFUVVFTkNZL0haKTsKLQlkZGJfb3V0MzIoVElNRVJfQkFTRSs0LCAweDEpOwkvKiBlbmFibGUgdGltZXIgKi8KLQlzZXR1cF9pcnEoVElNRVJfSVJRLCBpcnEpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCByZXNvdXJjZSBkbWExOwotCXN0cnVjdCByZXNvdXJjZSB0aW1lcjsKLQlzdHJ1Y3QgcmVzb3VyY2UgcnRjOwotCXN0cnVjdCByZXNvdXJjZSBkbWFfcGFnZV9yZWc7Ci0Jc3RydWN0IHJlc291cmNlIGRtYTI7Ci19IGRkYjU0NzZfaW9wb3J0ID0gewotCXsKLQkiZG1hMSIsIDB4MDAsIDB4MWYsIElPUkVTT1VSQ0VfQlVTWX0sIHsKLQkidGltZXIiLCAweDQwLCAweDVmLCBJT1JFU09VUkNFX0JVU1l9LCB7Ci0JInJ0YyIsIDB4NzAsIDB4N2YsIElPUkVTT1VSQ0VfQlVTWX0sIHsKLQkiZG1hIHBhZ2UgcmVnIiwgMHg4MCwgMHg4ZiwgSU9SRVNPVVJDRV9CVVNZfSwgewotCSJkbWEyIiwgMHhjMCwgMHhkZiwgSU9SRVNPVVJDRV9CVVNZfQotfTsKLQotc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IHJlc291cmNlIG5pbGU0OwotfSBkZGI1NDc2X2lvbWVtID0gewotCXsgIk5pbGUgNCIsIEREQl9CQVNFLCBEREJfQkFTRSArIEREQl9TSVpFIC0gMSwgSU9SRVNPVVJDRV9CVVNZfQotfTsKLQotCi1zdGF0aWMgdm9pZCBkZGI1NDc2X2JvYXJkX2luaXQodm9pZCk7Ci0KLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKLXsKLQlzZXRfaW9fcG9ydF9iYXNlKEtTRUcxQUREUihEREJfUENJX0lPX0JBU0UpKTsKLQotCWJvYXJkX3RpbWVfaW5pdCA9IGRkYl90aW1lX2luaXQ7Ci0JYm9hcmRfdGltZXJfc2V0dXAgPSBkZGJfdGltZXJfc2V0dXA7Ci0KLQlfbWFjaGluZV9yZXN0YXJ0ID0gZGRiX21hY2hpbmVfcmVzdGFydDsKLQlfbWFjaGluZV9oYWx0ID0gZGRiX21hY2hpbmVfaGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBkZGJfbWFjaGluZV9wb3dlcl9vZmY7Ci0KLQkvKiByZXF1ZXN0IGlvIHBvcnQvbWVtIHJlc291cmNlcyAgKi8KLQlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmZGRiNTQ3Nl9pb3BvcnQuZG1hMSkgfHwKLQkgICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmZGRiNTQ3Nl9pb3BvcnQudGltZXIpIHx8Ci0JICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJmRkYjU0NzZfaW9wb3J0LnJ0YykgfHwKLQkgICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLAotCQkJICAgICAmZGRiNTQ3Nl9pb3BvcnQuZG1hX3BhZ2VfcmVnKQotCSAgICB8fCByZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZkZGI1NDc2X2lvcG9ydC5kbWEyKQotCSAgICB8fCByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmRkYjU0NzZfaW9tZW0ubmlsZTQpKSB7Ci0JCXByaW50awotCQkgICAgKCJkZGJfc2V0dXAgLSByZXF1ZXN0aW5nIG9vIHBvcnQgcmVzb3VyY2VzIGZhaWxlZC5cbiIpOwotCQlmb3IgKDs7KTsKLQl9Ci0KLQkvKiBSZWJvb3Qgb24gcGFuaWMgKi8KLQlwYW5pY190aW1lb3V0ID0gMTgwOwotCi0JLyogW2pzdW5dIHdlIG5lZWQgdG8gc2V0IEJBUjAgc28gdGhhdCBTRFJBTSAwIGFwcGVhcnMgYXQgMHgwIGluIFBDSSAqLwotCS8qICoobG9uZyopMHhiZmEwMDIxOCA9IDB4ODsgKi8KLQotCS8qIGJvYXJkIGluaXRpYWxpemF0aW9uIHN0dWZmICovCi0JZGRiNTQ3Nl9ib2FyZF9pbml0KCk7Ci19Ci0KLS8qCi0gKiBXZSBkb24ndCB0cnVzdCBiaW9zLiAgV2UgZXNzZW50aWFsbHkgZG9lcyBoYXJkd2FyZSByZS1pbml0aWFsaXphdGlvbgotICogYXMgY29tcGxldGUgYXMgcG9zc2libGUsIGFzIGZhciBhcyB3ZSBrbm93IHdlIGNhbiBzYWZlbHkgZG8uCi0gKi8KLXN0YXRpYyB2b2lkIGRkYjU0NzZfYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIC0tLS0tLS0tLS0tIHNldHVwIFBEQVJzIC0tLS0tLS0tLS0tLSAqLwotCS8qIGNoZWNrIFNEUkFNMCwgd2hldGhlciB3ZSBhcmUgb24gTUVNIGJ1cyBkb2VzIG5vdCBtYXR0ZXIgKi8KLQlkYl9hc3NlcnQoKGRkYl9pbjMyKEREQl9TRFJBTTApICYgMHhmZmZmZmZlZikgPT0KLQkJICBkZGJfY2FsY19wZGFyKEREQl9TRFJBTV9CQVNFLCBEREJfU0RSQU1fU0laRSwgMzIsIDAsIDEpKTsKLQotCS8qIFNEUkFNMSBzaG91bGQgYmUgdHVybmVkIG9mZi4gIFdoYXQgaXMgdGhpcyBmb3IgYW55d2F5ID8gKi8KLQlkYl9hc3NlcnQoIChkZGJfaW4zMihEREJfU0RSQU0xKSAmIDB4ZikgPT0gMCk7Ci0KLQkvKiBmbGFzaCAxJjIsIEREQiBzdGF0dXMsIEREQiBjb250cm9sICovCi0JZGRiX3NldF9wZGFyKEREQl9EQ1MyLCBEREJfRENTMl9CQVNFLCBEREJfRENTMl9TSVpFLCAxNiwgMCwgMCk7Ci0JZGRiX3NldF9wZGFyKEREQl9EQ1MzLCBEREJfRENTM19CQVNFLCBEREJfRENTM19TSVpFLCAxNiwgMCwgMCk7Ci0JZGRiX3NldF9wZGFyKEREQl9EQ1M0LCBEREJfRENTNF9CQVNFLCBEREJfRENTNF9TSVpFLCA4LCAwLCAwKTsKLQlkZGJfc2V0X3BkYXIoRERCX0RDUzUsIEREQl9EQ1M1X0JBU0UsIEREQl9EQ1M1X1NJWkUsIDgsIDAsIDApOwotCi0JLyogc2h1dCBvZmYgb3RoZXIgcGRhciBzbyB0aGV5IGRvbid0IGFjY2lkZW50YWxseSBnZXQgaW50byB0aGUgd2F5ICovCi0JZGRiX3NldF9wZGFyKEREQl9EQ1M2LCAweGZmZmZmZmZmLCAwLCAzMiwgMCwgMCk7Ci0JZGRiX3NldF9wZGFyKEREQl9EQ1M3LCAweGZmZmZmZmZmLCAwLCAzMiwgMCwgMCk7Ci0JZGRiX3NldF9wZGFyKEREQl9EQ1M4LCAweGZmZmZmZmZmLCAwLCAzMiwgMCwgMCk7Ci0KLQkvKiB2ZXJpZnkgVlJDNTQ3NyBiYXNlIGFkZHIgKi8KLQkvKiBkb24ndCBjYXJlIGFib3V0IHNvbWUgZGV0YWlscyAqLwotCWRiX2Fzc2VydCgoZGRiX2luMzIoRERCX0lOVENTKSAmIDB4ZmZmZmZmMGYpID09Ci0JCSAgZGRiX2NhbGNfcGRhcihEREJfSU5UQ1NfQkFTRSwgRERCX0lOVENTX1NJWkUsIDgsIDAsIDApKTsKLQotCS8qIHZlcmlmeSBCT09UIFJPTSBhZGRyICovCi0JLyogZG9uJ3QgY2FyZSBhYm91dCBzb21lIGRldGFpbHMgKi8KLQlkYl9hc3NlcnQoKGRkYl9pbjMyKEREQl9CT09UQ1MpICYgMHhmZmZmZmYwZikgPT0KLQkJICBkZGJfY2FsY19wZGFyKEREQl9CT09UQ1NfQkFTRSwgRERCX0JPT1RDU19TSVpFLCA4LCAwLCAwKSk7Ci0KLQkvKiBzZXR1cCBQQ0kgd2luZG93cyAtIHdpbmRvdzEgZm9yIE1FTS9jb25maWcsIHdpbmRvdzAgZm9yIElPICovCi0JZGRiX3NldF9wZGFyKEREQl9QQ0lXMCwgRERCX1BDSV9JT19CQVNFLCBEREJfUENJX0lPX1NJWkUsIDMyLCAwLCAxKTsKLQlkZGJfc2V0X3BtcihEREJfUENJSU5JVDAsIEREQl9QQ0lDTURfSU8sIDAsIEREQl9QQ0lfQUNDRVNTXzMyKTsKLQotCWRkYl9zZXRfcGRhcihEREJfUENJVzEsIEREQl9QQ0lfTUVNX0JBU0UsIEREQl9QQ0lfTUVNX1NJWkUsIDMyLCAwLCAxKTsKLQlkZGJfc2V0X3BtcihEREJfUENJSU5JVDEsIEREQl9QQ0lDTURfTUVNLCBEREJfUENJX01FTV9CQVNFLCBEREJfUENJX0FDQ0VTU18zMik7Ci0KLQkvKiAtLS0tLS0tLS0tLSBzZXR1cCBQREFScyAtLS0tLS0tLS0tLS0gKi8KLQkvKiB0aGlzIGlzIHByb2JsZW1hdGljIC0gaXQgd2lsbCByZXNldCBBbGFkaW4gd2hpY2ggY2F1c2Ugd2UgbG9vc2UKLQkgKiBzZXJpYWwgcG9ydCwgYW5kIHdlIGRvbid0IGtub3cgaG93IHRvIHNldCB1cCBBbGFkaW4gY2hpcCBhZ2Fpbi4KLQkgKi8KLQkvLyBkZGJfcGNpX3Jlc2V0X2J1cygpOwotCi0JZGRiX291dDMyKEREQl9CQVIwLCAweDAwMDAwMDA4KTsKLQotCWRkYl9vdXQzMihEREJfQkFSQywgMHhmZmZmZmZmZik7Ci0JZGRiX291dDMyKEREQl9CQVJCLCAweGZmZmZmZmZmKTsKLQlkZGJfb3V0MzIoRERCX0JBUjEsIDB4ZmZmZmZmZmYpOwotCWRkYl9vdXQzMihEREJfQkFSMiwgMHhmZmZmZmZmZik7Ci0JZGRiX291dDMyKEREQl9CQVIzLCAweGZmZmZmZmZmKTsKLQlkZGJfb3V0MzIoRERCX0JBUjQsIDB4ZmZmZmZmZmYpOwotCWRkYl9vdXQzMihEREJfQkFSNSwgMHhmZmZmZmZmZik7Ci0JZGRiX291dDMyKEREQl9CQVI2LCAweGZmZmZmZmZmKTsKLQlkZGJfb3V0MzIoRERCX0JBUjcsIDB4ZmZmZmZmZmYpOwotCWRkYl9vdXQzMihEREJfQkFSOCwgMHhmZmZmZmZmZik7Ci0KLQkvKiAtLS0tLS0tLS0tLSBzd2l0Y2ggUENJMSB0byBQQ0kgQ09ORklHIHNwYWNlICAtLS0tLS0tLS0tLS0gKi8KLQlkZGJfc2V0X3BkYXIoRERCX1BDSVcxLCBEREJfUENJX0NPTkZJR19CQVNFLCBEREJfUENJX0NPTkZJR19TSVpFLCAzMiwgMCwgMSk7Ci0JZGRiX3NldF9wbXIoRERCX1BDSUlOSVQxLCBEREJfUENJQ01EX0NGRywgMHgwLCBEREJfUENJX0FDQ0VTU18zMik7Ci0KLQkvKiAtLS0tLSBNMTU0MyBQQ0kgc2V0dXAgLS0tLS0tICovCi0KLQkvKiB3ZSBrbm93IE0xNTQzIFBDSS1JU0EgY29udHJvbGxlciBpcyBhdCBhZGRyOjE4ICovCi0JLyogeHh4eDEwMTAgbWFrZXMgVVNCIGF0IGFkZHI6MTMgYW5kIFBNVSBhdCBhZGRyOjE0ICovCi0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIDB4YTgwNDAwNzIgJj0gMHhmMDsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgMHhhODA0MDA3MiB8PSAweGE7Ci0KLQkvKiBzZXR1cCBVU0IgaW50ZXJydXB0IHRvIElSUSA5LCAoYml0IDA6MyAtIDAwMDEpCi0JICogbm8gSU9DSFJEWSBzaWduYWwsIChiaXQgNyAtIDEpCi0JICogTTE1NDNDICYgTTcxMDEgVklEIGFuZCBTdWJzeXMgRGV2aWNlIElEIGFyZSByZWFkLW9ubHkgKGJpdCA2IC0gMSkKLQkgKiBNYWtlIFVTQiBNYXN0ZXIgSU5UQUogbGV2ZWwgdG8gZWRnZSBjb252ZXJzaW9uIChiaXQgNCAtIDEpCi0JICovCi0JKih1bnNpZ25lZCBjaGFyICopIDB4YTgwNDAwNzQgPSAweGQxOwotCi0JLyogc2V0dXAgUE1VKFNDSSB0byBJUlEgMTAgKGJpdCAwOjMgLSAwMDExKQotCSAqIFNDSSByb3V0aW5nIHRvIElSUSAxMyBkaXNhYmxlZCAoYml0IDcgLSAxKQotCSAqIFNDSSBpbnRlcnJ1cHQgbGV2ZWwgdG8gZWRnZSBjb252ZXJzaW9uIGJ5cGFzc2VkIChiaXQgNCAtIDApCi0JICovCi0JKih1bnNpZ25lZCBjaGFyICopIDB4YTgwNDAwNzYgPSAweDgzOwotCi0JLyogc2V0dXAgSURFIGNvbnRyb2xsZXIKLQkgKiBlbmFibGUgSURFIGNvbnRyb2xsZXIgKGJpdCA2IC0gMSkKLQkgKiBJREUgSURTRUwgdG8gYmUgYWRkcjoyNCAoYml0IDQ6NSAtIDExKQotCSAqIG5vIElERSBBVEEgU2Vjb25kYXJ5IEJ1cyBTaWduYWwgUGFkIENvbnRyb2wgKGJpdCAzIC0gMCkKLQkgKiBubyBJREUgQVRBIFByaW1hcnkgQnVzIFNpZ25hbCBQYWQgQ29udHJvbCAoYml0IDIgLSAwKQotCSAqIHByaW1hcnkgSVJRIGlzIDE0LCBzZWNvbmRhcnkgaXMgMTUgKGJpdCAxOjAgLSAwMQotCSAqLwotCS8vICoodW5zaWduZWQgY2hhciopMHhhODA0MDA1OCA9IDB4NzE7Ci0JLy8gKih1bnNpZ25lZCBjaGFyKikweGE4MDQwMDU4ID0gMHg3OTsKLQkvLyAqKHVuc2lnbmVkIGNoYXIqKTB4YTgwNDAwNTggPSAweDc0OyAgICAgICAgICAgICAgLy8gdXNlIFNJUlEsIHByaW1hcnkgdHJpLXN0YXRlCi0JKih1bnNpZ25lZCBjaGFyICopIDB4YTgwNDAwNTggPSAweDc1OwkvLyBwcmltYXJ5IHRyaS1zdGF0ZQotCi0jaWYgMAotCS8qIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpZiBNNTIyOSBkb2VzIG5vdCB1c2UgU0lSUSAqLwotCSoodW5zaWduZWQgY2hhciAqKSAweGE4MDQwMDQ0ID0gMHgwZDsJLy8gcHJpbWFyeSB0byBJUlEgMTQKLQkqKHVuc2lnbmVkIGNoYXIgKikgMHhhODA0MDA3NSA9IDB4MGQ7CS8vIHNlY29uZGFyeSB0byBJUlEgMTQKLSNlbmRpZgotCi0JLyogZW5hYmxlIElERSBpbiB0aGUgTTUyMjkgY29uZmlnIHJlZ2lzdGVyIDB4NTAgKGJpdCAwIC0gMSkgKi8KLQkvKiBNNTIyOSBJRFNFTCBpcyBhZGRyOjI0OyBzZWUgYWJvdmUgc2V0dGluZyAqLwotCSoodW5zaWduZWQgY2hhciAqKSAweGE5MDAwMDUwIHw9IDB4MTsKLQotCS8qIGVuYWJsZSBidXMgbWFzdGVyIChiaXQgMikgIGFuZCBJTyBkZWNvZGluZyAgKGJpdCAwKSAqLwotCSoodW5zaWduZWQgY2hhciAqKSAweGE5MDAwMDA0IHw9IDB4NTsKLQotCS8qIGVuYWJsZSBuYXRpdmUsIGNvcGllZCBmcm9tIGFyY2gvcHBjL2syYm9vdC9oZWFkLlMgKi8KLQkvKiBUT0RPIC0gbmVlZCB2b2xhdGlsZSwgbmVlZCB0byBiZSBwb3J0YWJsZSAqLwotCSoodW5zaWduZWQgY2hhciAqKSAweGE5MDAwMDA5ID0gMHhmZjsKLQotCS8qIC0tLS0tIGVuZCBvZiBNMTU0MyBQQ0kgc2V0dXAgLS0tLS0tICovCi0KLQkvKiAtLS0tLSByZXNldCBvbi1ib2FyZCBldGhlciBjaGlwICAtLS0tLS0gKi8KLQkqKCh2b2xhdGlsZSB1MzIgKikgMHhhODAyMDAwNCkgfD0gMTsJLyogZGVjb2RlIEkvTyAqLwotCSooKHZvbGF0aWxlIHUzMiAqKSAweGE4MDIwMDEwKSA9IDA7CS8qIHNldCBCQVIgYWRkcmVzcyAqLwotCi0JLyogc2VuZCByZXNldCBjb21tYW5kICovCi0JKigodm9sYXRpbGUgdTMyICopIDB4YTYwMDAwMDApID0gMTsJLyogZG8gYSBzb2Z0IHJlc2V0ICovCi0KLQkvKiBkaXNhYmxlIGV0aGVyIGNoaXAgKi8KLQkqKCh2b2xhdGlsZSB1MzIgKikgMHhhODAyMDAwNCkgPSAwOwkvKiBkaXNhYmxlIGFueSBkZWNvZGluZyAqLwotCi0JLyogcHV0IGl0IGludG8gc2xlZXAgKi8KLQkqKCh2b2xhdGlsZSB1MzIgKikgMHhhODAyMDA0MCkgPSAweDgwMDAwMDAwOwotCi0JLyogLS0tLS0gZW5kIG9mIHJlc2V0IG9uLWJvYXJkIGV0aGVyIGNoaXAgIC0tLS0tLSAqLwotCi0JLyogLS0tLS0tLS0tLS0gc3dpdGNoIFBDSTEgYmFjayB0byBQQ0kgTUVNIHNwYWNlICAtLS0tLS0tLS0tLS0gKi8KLQlkZGJfc2V0X3BkYXIoRERCX1BDSVcxLCBEREJfUENJX01FTV9CQVNFLCBEREJfUENJX01FTV9TSVpFLCAzMiwgMCwgMSk7Ci0JZGRiX3NldF9wbXIoRERCX1BDSUlOSVQxLCBEREJfUENJQ01EX01FTSwgRERCX1BDSV9NRU1fQkFTRSwgRERCX1BDSV9BQ0NFU1NfMzIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni92cmM1NDc2X2lycS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni92cmM1NDc2X2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2M1ZTdiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvdnJjNTQ3Nl9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogVGhlIGlycSBjb250cm9sbGVyIGZvciB2cmM1NDc2LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0KLXN0YXRpYyBpbnQgaXJxX2Jhc2U7Ci0KLXN0YXRpYyB2b2lkIHZyYzU0NzZfaXJxX2VuYWJsZSh1aW50IGlycSkKLXsKLQluaWxlNF9lbmFibGVfaXJxKGlycSAtIGlycV9iYXNlKTsKLX0KLQotc3RhdGljIHZvaWQgdnJjNTQ3Nl9pcnFfZGlzYWJsZSh1aW50IGlycSkKLXsKLQluaWxlNF9kaXNhYmxlX2lycShpcnEgLSBpcnFfYmFzZSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdnJjNTQ3Nl9pcnFfc3RhcnR1cCh1aW50IGlycSkKLXsKLQluaWxlNF9lbmFibGVfaXJxKGlycSAtIGlycV9iYXNlKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSB2cmM1NDc2X2lycV9zaHV0ZG93bgl2cmM1NDc2X2lycV9kaXNhYmxlCi0KLXN0YXRpYyB2b2lkIHZyYzU0NzZfaXJxX2Fjayh1aW50IGlycSkKLXsKLQluaWxlNF9jbGVhcl9pcnEoaXJxIC0gaXJxX2Jhc2UpOwotCW5pbGU0X2Rpc2FibGVfaXJxKGlycSAtIGlycV9iYXNlKTsKLX0KLQotc3RhdGljIHZvaWQgdnJjNTQ3Nl9pcnFfZW5kKHVpbnQgaXJxKQotewotCWlmKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKLQkJdnJjNTQ3Nl9pcnFfZW5hYmxlKGlycSk7Ci19Ci0KLXN0YXRpYyBod19pcnFfY29udHJvbGxlciB2cmM1NDc2X2lycV9jb250cm9sbGVyID0gewotCS50eXBlbmFtZSA9ICJ2cmM1NDc2IiwKLQkuc3RhcnR1cCA9IHZyYzU0NzZfaXJxX3N0YXJ0dXAsCi0JLnNodXRkb3duID0gdnJjNTQ3Nl9pcnFfc2h1dGRvd24sCi0JLmVuYWJsZSA9IHZyYzU0NzZfaXJxX2VuYWJsZSwKLQkuZGlzYWJsZSA9IHZyYzU0NzZfaXJxX2Rpc2FibGUsCi0JLmFjayA9IHZyYzU0NzZfaXJxX2FjaywKLQkuZW5kID0gdnJjNTQ3Nl9pcnFfZW5kCi19OwotCi12b2lkIF9faW5pdAotdnJjNTQ3Nl9pcnFfaW5pdCh1MzIgYmFzZSkKLXsKLQl1MzIgaTsKLQotCWlycV9iYXNlID0gYmFzZTsKLQlmb3IgKGk9IGJhc2U7IGk8IGJhc2UgKyBOVU1fVlJDNTQ3Nl9JUlE7IGkrKykgewotCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7Ci0JCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ2cmM1NDc2X2lycV9jb250cm9sbGVyOwotCX0KLX0KLQotCi12b2lkCi12cmM1NDc2X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1MzIgbWFzazsKLQlpbnQgbmlsZTRfaXJxOwotCi0JbWFzayA9IG5pbGU0X2dldF9pcnFfc3RhdCgwKTsKLQotCS8qIHF1aWNrIGNoZWNrIGZvciBwb3NzaWJsZSB0aW1lIGludGVycnVwdCAqLwotCWlmIChtYXNrICYgKDEgPDwgVlJDNTQ3Nl9JUlFfR1BUKSkgewotCQlkb19JUlEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX0dQVCwgcmVncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjaGVjayBmb3IgaTgyNTkgaW50ZXJydXB0cyAqLwotCWlmIChtYXNrICYgKDEgPDwgVlJDNTQ3Nl9JODI1OV9DQVNDQURFKSkgewotCQlpbnQgaTgyNTlfaXJxID0gbmlsZTRfaTgyNTlfaWFjaygpOwotCQlkb19JUlEoSTgyNTlfSVJRX0JBU0UgKyBpODI1OV9pcnEsIHJlZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogcmVndWxhciBuaWxlNCBpbnRlcnJ1cHRzICh3ZSBzaG91bGQgbm90IHJlYWxseSBoYXZlIGFueSAqLwotCWZvciAobmlsZTRfaXJxID0gMDsgbWFzazsgbmlsZTRfaXJxKyssIG1hc2sgPj49IDEpIHsKLQkJaWYgKG1hc2sgJiAxKSB7Ci0JCQlkb19JUlEoVlJDNTQ3Nl9JUlFfQkFTRSArIG5pbGU0X2lycSwgcmVncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0Jc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9zZXR1cC5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9zZXR1cC5jCmluZGV4IDJmNTY2MDMuLjkzMTY3ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0Nzcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L3NldHVwLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogZXh0ZXJuIHN0cnVjdCBwY2lfY29udHJvbGxlciBkZGI1NDc3X2V4dF9jb250cm9sbGVyOwogZXh0ZXJuIHN0cnVjdCBwY2lfY29udHJvbGxlciBkZGI1NDc3X2lvX2NvbnRyb2xsZXI7CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJLyogaW5pdGlhbGl6ZSBib2FyZCAtIHdlIGRvbid0IHRydXN0IHRoZSBsb2FkZXIgKi8KICAgICAgICAgZGRiNTQ3N19ib2FyZF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3NldHVwLmMgYi9hcmNoL21pcHMvZGVjL3NldHVwLmMKaW5kZXggYWQ1ZDQzNi4uOWM3MDdiOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9kZWMvc2V0dXAuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiBleHRlcm4gdm9pZCBkZWNfdGltZV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZGVjX3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKik7CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJYm9hcmRfYmVfaW5pdCA9IGRlY19iZV9pbml0OwogCWJvYXJkX3RpbWVfaW5pdCA9IGRlY190aW1lX2luaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3RpbWUuYyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCmluZGV4IDc0Y2IwNTUuLjc2ZTRkMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAl9CiAKIAkvKiBTZXQgdXAgdGhlIHJhdGUgb2YgcGVyaW9kaWMgRFMxMjg3IGludGVycnVwdHMuICAqLwotCUNNT1NfV1JJVEUoUlRDX1JFRl9DTENLXzMyS0haIHwgKDE2IC0gTE9HXzJfSFopLCBSVENfUkVHX0EpOworCUNNT1NfV1JJVEUoUlRDX1JFRl9DTENLXzMyS0haIHwgKDE2IC0gX19mZnMoSFopKSwgUlRDX1JFR19BKTsKIH0KIAogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9kZWZjb25maWcKaW5kZXggNjA3ZTI5OC4uODc5YmExYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM2LDYgKzEzNCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5MTIxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACisjCisjICBhcmNoL21pcHMvZW1tYTJyaC9jb21tb24vTWFrZWZpbGUKKyMgICAgICAgTWFrZWZpbGUgZm9yIHRoZSBjb21tb24gY29kZSBvZiBORUMgRU1NQTJSSCBiYXNlZCBib2FyZC4KKyMKKyMgIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDUtMjAwNgorIworIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKworb2JqLSQoQ09ORklHX01BUktFSU5TKQkrPSBpcnEubyBpcnFfZW1tYTJyaC5vIHByb20ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNzUyODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAgYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jCisgKiAgICAgIFRoaXMgZmlsZSBpcyBjb21tb24gaXJxIGRpc3BhdGNoZXIuCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDUtMjAwNgorICoKKyAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxLmMKKyAqCisgKglDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KKworLyoKKyAqIHRoZSBmaXJzdCBsZXZlbCBpbnQtaGFuZGxlciB3aWxsIGp1bXAgaGVyZSBpZiBpdCBpcyBhIGVtbWEycmggaXJxCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBlbW1hMnJoX2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgaW50U3RhdHVzOworCXUzMiBiaXRtYXNrOworCXUzMiBpOworCisJaW50U3RhdHVzID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9JTlRfU1RfMCkKKwkgICAgJiBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX0lOVF9FTl8wKTsKKworI2lmZGVmIEVNTUEyUkhfU1dfQ0FTQ0FERQorCWlmIChpbnRTdGF0dXMgJgorCSAgICAoMSA8PCAoKEVNTUEyUkhfU1dfQ0FTQ0FERSAtIEVNTUEyUkhfSVJRX0lOVDApICYgKDMyIC0gMSkpKSkgeworCQl1MzIgc3dJbnRTdGF0dXM7CisJCXN3SW50U3RhdHVzID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9TV19JTlQpCisJCSAgICAmIGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1dfSU5UX0VOKTsKKwkJZm9yIChpID0gMCwgYml0bWFzayA9IDE7IGkgPCAzMjsgaSsrLCBiaXRtYXNrIDw8PSAxKSB7CisJCQlpZiAoc3dJbnRTdGF0dXMgJiBiaXRtYXNrKSB7CisJCQkJZG9fSVJRKEVNTUEyUkhfU1dfSVJRX0JBU0UgKyBpLCByZWdzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCWZvciAoaSA9IDAsIGJpdG1hc2sgPSAxOyBpIDwgMzI7IGkrKywgYml0bWFzayA8PD0gMSkgeworCQlpZiAoaW50U3RhdHVzICYgYml0bWFzaykgeworCQkJZG9fSVJRKEVNTUEyUkhfSVJRX0JBU0UgKyBpLCByZWdzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWludFN0YXR1cyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfSU5UX1NUXzEpCisJICAgICYgZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9JTlRfRU5fMSk7CisKKyNpZmRlZiBFTU1BMlJIX0dQSU9fQ0FTQ0FERQorCWlmIChpbnRTdGF0dXMgJgorCSAgICAoMSA8PCAoKEVNTUEyUkhfR1BJT19DQVNDQURFIC0gRU1NQTJSSF9JUlFfSU5UMCkgJiAoMzIgLSAxKSkpKSB7CisJCXUzMiBncGlvSW50U3RhdHVzOworCQlncGlvSW50U3RhdHVzID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfU1QpCisJCSAgICAmIGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX01BU0spOworCQlmb3IgKGkgPSAwLCBiaXRtYXNrID0gMTsgaSA8IDMyOyBpKyssIGJpdG1hc2sgPDw9IDEpIHsKKwkJCWlmIChncGlvSW50U3RhdHVzICYgYml0bWFzaykgeworCQkJCWRvX0lSUShFTU1BMlJIX0dQSU9fSVJRX0JBU0UgKyBpLCByZWdzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCWZvciAoaSA9IDMyLCBiaXRtYXNrID0gMTsgaSA8IDY0OyBpKyssIGJpdG1hc2sgPDw9IDEpIHsKKwkJaWYgKGludFN0YXR1cyAmIGJpdG1hc2spIHsKKwkJCWRvX0lSUShFTU1BMlJIX0lSUV9CQVNFICsgaSwgcmVncyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpbnRTdGF0dXMgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX0lOVF9TVF8yKQorCSAgICAmIGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfSU5UX0VOXzIpOworCisJZm9yIChpID0gNjQsIGJpdG1hc2sgPSAxOyBpIDwgOTY7IGkrKywgYml0bWFzayA8PD0gMSkgeworCQlpZiAoaW50U3RhdHVzICYgYml0bWFzaykgeworCQkJZG9fSVJRKEVNTUEyUkhfSVJRX0JBU0UgKyBpLCByZWdzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnFfZW1tYTJyaC5jIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycV9lbW1hMnJoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NmFhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnFfZW1tYTJyaC5jCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIGFyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnFfZW1tYTJyaC5jCisgKiAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBpcnEgaGFuZGxlciBmb3IgRU1NQTJSSC4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNS0yMDA2CisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnFfNTQ3Ny5jCisgKgorICoJQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqIEVNTUEyUkggZGVmaW5lcyA2NCBJUlFzLgorICoKKyAqIFRoaXMgZmlsZSBleHBvcnRzIG9uZSBmdW5jdGlvbjoKKyAqCWVtbWEycmhfaXJxX2luaXQodTMyIGlycV9iYXNlKTsKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgorCisvKiBudW1iZXIgb2YgdG90YWwgaXJxcyBzdXBwb3J0ZWQgYnkgRU1NQTJSSCAqLworI2RlZmluZQlOVU1fRU1NQTJSSF9JUlEJCTk2CisKK3N0YXRpYyBpbnQgZW1tYTJyaF9pcnFfYmFzZSA9IC0xOworCit2b2lkIGxsX2VtbWEycmhfaXJxX2VuYWJsZShpbnQpOwordm9pZCBsbF9lbW1hMnJoX2lycV9kaXNhYmxlKGludCk7CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWxsX2VtbWEycmhfaXJxX2VuYWJsZShpcnEgLSBlbW1hMnJoX2lycV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgZW1tYTJyaF9pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWxsX2VtbWEycmhfaXJxX2Rpc2FibGUoaXJxIC0gZW1tYTJyaF9pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW1tYTJyaF9pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWVtbWEycmhfaXJxX2VuYWJsZShpcnEpOworCXJldHVybiAwOworfQorCisjZGVmaW5lCWVtbWEycmhfaXJxX3NodXRkb3duCWVtbWEycmhfaXJxX2Rpc2FibGUKKworc3RhdGljIHZvaWQgZW1tYTJyaF9pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgLSBzb21lIGhhbmRsZXIgd2lsbCByZS1lbmFibGUgdGhlIGlycQorCSAqIGFuZCBpZiB0aGUgaW50ZXJydXB0IGlzIGxldmVsZWQsIHdlIHdpbGwgaGF2ZSBpbmZpbml0ZSBsb29wCisJICovCisJbGxfZW1tYTJyaF9pcnFfZGlzYWJsZShpcnEgLSBlbW1hMnJoX2lycV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgZW1tYTJyaF9pcnFfZW5kKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwkJbGxfZW1tYTJyaF9pcnFfZW5hYmxlKGlycSAtIGVtbWEycmhfaXJxX2Jhc2UpOworfQorCitod19pcnFfY29udHJvbGxlciBlbW1hMnJoX2lycV9jb250cm9sbGVyID0geworCS50eXBlbmFtZSA9ICJlbW1hMnJoX2lycSIsCisJLnN0YXJ0dXAgPSBlbW1hMnJoX2lycV9zdGFydHVwLAorCS5zaHV0ZG93biA9IGVtbWEycmhfaXJxX3NodXRkb3duLAorCS5lbmFibGUgPSBlbW1hMnJoX2lycV9lbmFibGUsCisJLmRpc2FibGUgPSBlbW1hMnJoX2lycV9kaXNhYmxlLAorCS5hY2sgPSBlbW1hMnJoX2lycV9hY2ssCisJLmVuZCA9IGVtbWEycmhfaXJxX2VuZCwKKwkuc2V0X2FmZmluaXR5ID0gTlVMTAkvKiBubyBhZmZpbml0eSBzdHVmZiBmb3IgVVAgKi8KK307CisKK3ZvaWQgZW1tYTJyaF9pcnFfaW5pdCh1MzIgaXJxX2Jhc2UpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSBpcnFfYmFzZTsgaSA8IGlycV9iYXNlICsgTlVNX0VNTUEyUkhfSVJROyBpKyspIHsKKwkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOworCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CisJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZW1tYTJyaF9pcnFfY29udHJvbGxlcjsKKwl9CisKKwllbW1hMnJoX2lycV9iYXNlID0gaXJxX2Jhc2U7Cit9CisKK3ZvaWQgbGxfZW1tYTJyaF9pcnFfZW5hYmxlKGludCBlbW1hMnJoX2lycSkKK3sKKwl1MzIgcmVnX3ZhbHVlOworCXUzMiByZWdfYml0bWFzazsKKwl1MzIgcmVnX2luZGV4OworCisJcmVnX2luZGV4ID0gRU1NQTJSSF9CSElGX0lOVF9FTl8wCisJICAgICsgKEVNTUEyUkhfQkhJRl9JTlRfRU5fMSAtIEVNTUEyUkhfQkhJRl9JTlRfRU5fMCkKKwkgICAgKiAoZW1tYTJyaF9pcnEgLyAzMik7CisJcmVnX3ZhbHVlID0gZW1tYTJyaF9pbjMyKHJlZ19pbmRleCk7CisJcmVnX2JpdG1hc2sgPSAweDEgPDwgKGVtbWEycmhfaXJxICUgMzIpOworCWRiX2Fzc2VydCgocmVnX3ZhbHVlICYgcmVnX2JpdG1hc2spID09IDApOworCWVtbWEycmhfb3V0MzIocmVnX2luZGV4LCByZWdfdmFsdWUgfCByZWdfYml0bWFzayk7Cit9CisKK3ZvaWQgbGxfZW1tYTJyaF9pcnFfZGlzYWJsZShpbnQgZW1tYTJyaF9pcnEpCit7CisJdTMyIHJlZ192YWx1ZTsKKwl1MzIgcmVnX2JpdG1hc2s7CisJdTMyIHJlZ19pbmRleDsKKworCXJlZ19pbmRleCA9IEVNTUEyUkhfQkhJRl9JTlRfRU5fMAorCSAgICArIChFTU1BMlJIX0JISUZfSU5UX0VOXzEgLSBFTU1BMlJIX0JISUZfSU5UX0VOXzApCisJICAgICogKGVtbWEycmhfaXJxIC8gMzIpOworCXJlZ192YWx1ZSA9IGVtbWEycmhfaW4zMihyZWdfaW5kZXgpOworCXJlZ19iaXRtYXNrID0gMHgxIDw8IChlbW1hMnJoX2lycSAlIDMyKTsKKwlkYl9hc3NlcnQoKHJlZ192YWx1ZSAmIHJlZ19iaXRtYXNrKSAhPSAwKTsKKwllbW1hMnJoX291dDMyKHJlZ19pbmRleCwgcmVnX3ZhbHVlICYgfnJlZ19iaXRtYXNrKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmEwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vcHJvbS5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiAgYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYworICogICAgICBUaGlzIGZpbGUgaXMgcHJvbSBmaWxlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA0LTIwMDYKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBhcmNoL21pcHMvZGRiNXh4eC9jb21tb24vcHJvbS5jCisgKgorICoJQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXN3aXRjaCAobWlwc19tYWNodHlwZSkgeworCWNhc2UgTUFDSF9ORUNfTUFSS0VJTlM6CisJCXJldHVybiAiTkVDIEVNTUEyUkggTWFyay1laW5zIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24gTkVDIGJvYXJkIjsKKwl9Cit9CisKKy8qIFtqc3VuQGp1bnN1bi5uZXRdIFBNT04gcGFzc2VzIGFyZ3VtZW50cyBpbiBDIG1haW4oKSBzdHlsZSAqLwordm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCit7CisJaW50IGFyZ2MgPSBmd19hcmcwOworCWNoYXIgKiphcmcgPSAoY2hhciAqKilmd19hcmcxOworCWludCBpOworCisJLyogaWYgdXNlciBwYXNzZXMga2VybmVsIGFyZ3MsIGlnbm9yZSB0aGUgZGVmYXVsdCBvbmUgKi8KKwlpZiAoYXJnYyA+IDEpCisJCWFyY3NfY21kbGluZVswXSA9ICdcMCc7CisKKwkvKiBhcmdbMF0gaXMgImciLCB0aGUgcmVzdCBpcyBib290IHBhcmFtZXRlcnMgKi8KKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmIChzdHJsZW4oYXJjc19jbWRsaW5lKSArIHN0cmxlbihhcmdbaV0gKyAxKQorCQkgICAgPj0gc2l6ZW9mKGFyY3NfY21kbGluZSkpCisJCQlicmVhazsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgYXJnW2ldKTsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiAiKTsKKwl9CisKKwltaXBzX21hY2hncm91cCA9IE1BQ0hfR1JPVVBfTkVDX0VNTUEyUkg7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NQVJLRUlOUykKKwltaXBzX21hY2h0eXBlID0gTUFDSF9ORUNfTUFSS0VJTlM7CisJYWRkX21lbW9yeV9yZWdpb24oMCwgRU1NQTJSSF9SQU1fU0laRSwgQk9PVF9NRU1fUkFNKTsKKyNlbmRpZgorCit9CisKK3ZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvTWFrZWZpbGUgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZjMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorIworIyAgYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvTWFrZWZpbGUKKyMgICAgICAgTWFrZWZpbGUgZm9yIHRoZSBjb21tb24gY29kZSBvZiBORUMgRU1NQTJSSCBiYXNlZCBib2FyZC4KKyMKKyMgIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDUtMjAwNgorIworIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKworb2JqLSQoQ09ORklHX01BUktFSU5TKSArPSBpcnEubyBpcnFfbWFya2VpbnMubyBzZXR1cC5vIGxlZC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycS5jIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkYzNmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycS5jCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIGFyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycS5jCisgKiAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBpcnEgaGFuZGxlciBmb3IgRU1NQTJSSC4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNC0yMDA2CisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnEuYworICoKKyAqCUNvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KKworLyoKKyAqIElSUSBtYXBwaW5nCisgKgorICogIDAtNzogOCBDUFUgaW50ZXJydXB0cworICoJMCAtCXNvZnR3YXJlIGludGVycnVwdCAwCisgKgkxIC0gCXNvZnR3YXJlIGludGVycnVwdCAxCisgKgkyIC0gCW1vc3QgVnJjNTQ3NyBpbnRlcnJ1cHRzIGFyZSByb3V0ZWQgdG8gdGhpcyBwaW4KKyAqCTMgLSAJKG9wdGlvbmFsKSBzb21lIG90aGVyIGludGVycnVwdHMgcm91dGVkIHRvIHRoaXMgcGluIGZvciBkZWJ1Z2cKKyAqCTQgLSAJbm90IHVzZWQKKyAqCTUgLSAJbm90IHVzZWQKKyAqCTYgLSAJbm90IHVzZWQKKyAqCTcgLSAJY3B1IHRpbWVyICh1c2VkIGJ5IGRlZmF1bHQpCisgKgorICovCisKK2V4dGVybiB2b2lkIGVtbWEycmhfc3dfaXJxX2luaXQodTMyIGJhc2UpOworZXh0ZXJuIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9pbml0KHUzMiBiYXNlKTsKK2V4dGVybiB2b2lkIGVtbWEycmhfaXJxX2luaXQodTMyIGJhc2UpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBlbW1hMnJoX2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9jYXNjYWRlID0geworCSAgIC5oYW5kbGVyID0gbm9fYWN0aW9uLAorCSAgIC5mbGFncyA9IDAsCisJICAgLm1hc2sgPSBDUFVfTUFTS19OT05FLAorCSAgIC5uYW1lID0gImNhc2NhZGUiLAorCSAgIC5kZXZfaWQgPSBOVUxMLAorCSAgIC5uZXh0ID0gTlVMTCwKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKK3sKKwl1MzIgcmVnOworCisJZGJfcnVuKHByaW50aygibWFya2VpbnNfaXJxX3NldHVwIGludm9rZWQuXG4iKSk7CisKKwkvKiBieSBkZWZhdWx0LCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gKi8KKwllbW1hMnJoX291dDMyKEVNTUEyUkhfQkhJRl9JTlRfRU5fMCwgMCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0JISUZfSU5UX0VOXzEsIDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9CSElGX0lOVF9FTl8yLCAwKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfQkhJRl9JTlQxX0VOXzAsIDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9CSElGX0lOVDFfRU5fMSwgMCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0JISUZfSU5UMV9FTl8yLCAwKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfQkhJRl9TV19JTlRfRU4sIDApOworCisJY2xlYXJfYzBfc3RhdHVzKDB4ZmYwMCk7CisJc2V0X2MwX3N0YXR1cygweDA0MDApOworCisjZGVmaW5lIEdQSU9fUENJICgweGY8PDE1KQorCS8qIHNldHVwIEdQSU8gaW50ZXJydXB0IGZvciBQQ0kgaW50ZXJmYWNlICovCisJLyogZGlyZWN0aW9uIGlucHV0ICovCisJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19ESVIpOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0RJUiwgcmVnICYgfkdQSU9fUENJKTsKKwkvKiBkaXNhYmxlIGludGVycnVwdCAqLworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX01BU0spOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLLCByZWcgJiB+R1BJT19QQ0kpOworCS8qIGxldmVsIHRyaWdnZXJkICovCisJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfTU9ERSk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX01PREUsIHJlZyB8IEdQSU9fUENJKTsKKwlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9DTkRfQSk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX0NORF9BLCByZWcgJiAofkdQSU9fUENJKSk7CisJLyogaW50ZXJydXB0IGNsZWFyICovCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX1NULCB+R1BJT19QQ0kpOworCisJLyogaW5pdCBhbGwgY29udHJvbGxlcnMgKi8KKwllbW1hMnJoX2lycV9pbml0KEVNTUEyUkhfSVJRX0JBU0UpOworCWVtbWEycmhfc3dfaXJxX2luaXQoRU1NQTJSSF9TV19JUlFfQkFTRSk7CisJZW1tYTJyaF9ncGlvX2lycV9pbml0KEVNTUEyUkhfR1BJT19JUlFfQkFTRSk7CisJbWlwc19jcHVfaXJxX2luaXQoQ1BVX0lSUV9CQVNFKTsKKworCS8qIHNldHVwIGNhc2NhZGUgaW50ZXJydXB0cyAqLworCXNldHVwX2lycShFTU1BMlJIX0lSUV9CQVNFICsgRU1NQTJSSF9TV19DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOworCXNldHVwX2lycShFTU1BMlJIX0lSUV9CQVNFICsgRU1NQTJSSF9HUElPX0NBU0NBREUsICZpcnFfY2FzY2FkZSk7CisJc2V0dXBfaXJxKENQVV9JUlFfQkFTRSArIENQVV9FTU1BMlJIX0NBU0NBREUsICZpcnFfY2FzY2FkZSk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDcsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZW1tYTJyaF9pcnFfZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgMSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgMCwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxX21hcmtlaW5zLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9pcnFfbWFya2VpbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzgzZmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxX21hcmtlaW5zLmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiAgYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxX21hcmtlaW5zLmMKKyAqICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIGlycSBoYW5kbGVyIGZvciBNYXJrLWVpbnMuCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDQtMjAwNgorICoKKyAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxXzU0NzcuYworICoKKyAqCUNvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KKworc3RhdGljIGludCBlbW1hMnJoX3N3X2lycV9iYXNlID0gLTE7CitzdGF0aWMgaW50IGVtbWEycmhfZ3Bpb19pcnFfYmFzZSA9IC0xOworCit2b2lkIGxsX2VtbWEycmhfc3dfaXJxX2VuYWJsZShpbnQgcmVnKTsKK3ZvaWQgbGxfZW1tYTJyaF9zd19pcnFfZGlzYWJsZShpbnQgcmVnKTsKK3ZvaWQgbGxfZW1tYTJyaF9ncGlvX2lycV9lbmFibGUoaW50IHJlZyk7Cit2b2lkIGxsX2VtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZShpbnQgcmVnKTsKKworc3RhdGljIHZvaWQgZW1tYTJyaF9zd19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJbGxfZW1tYTJyaF9zd19pcnFfZW5hYmxlKGlycSAtIGVtbWEycmhfc3dfaXJxX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBlbW1hMnJoX3N3X2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJbGxfZW1tYTJyaF9zd19pcnFfZGlzYWJsZShpcnEgLSBlbW1hMnJoX3N3X2lycV9iYXNlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlbW1hMnJoX3N3X2lycV9zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCit7CisJZW1tYTJyaF9zd19pcnFfZW5hYmxlKGlycSk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZW1tYTJyaF9zd19pcnFfc2h1dGRvd24gZW1tYTJyaF9zd19pcnFfZGlzYWJsZQorCitzdGF0aWMgdm9pZCBlbW1hMnJoX3N3X2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlsbF9lbW1hMnJoX3N3X2lycV9kaXNhYmxlKGlycSAtIGVtbWEycmhfc3dfaXJxX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBlbW1hMnJoX3N3X2lycV9lbmQodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUykpKQorCQlsbF9lbW1hMnJoX3N3X2lycV9lbmFibGUoaXJxIC0gZW1tYTJyaF9zd19pcnFfYmFzZSk7Cit9CisKK2h3X2lycV9jb250cm9sbGVyIGVtbWEycmhfc3dfaXJxX2NvbnRyb2xsZXIgPSB7CisJLnR5cGVuYW1lID0gImVtbWEycmhfc3dfaXJxIiwKKwkuc3RhcnR1cCA9IGVtbWEycmhfc3dfaXJxX3N0YXJ0dXAsCisJLnNodXRkb3duID0gZW1tYTJyaF9zd19pcnFfc2h1dGRvd24sCisJLmVuYWJsZSA9IGVtbWEycmhfc3dfaXJxX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGVtbWEycmhfc3dfaXJxX2Rpc2FibGUsCisJLmFjayA9IGVtbWEycmhfc3dfaXJxX2FjaywKKwkuZW5kID0gZW1tYTJyaF9zd19pcnFfZW5kLAorCS5zZXRfYWZmaW5pdHkgPSBOVUxMLAorfTsKKwordm9pZCBlbW1hMnJoX3N3X2lycV9pbml0KHUzMiBpcnFfYmFzZSkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2Jhc2UgKyBOVU1fRU1NQTJSSF9JUlFfU1c7IGkrKykgeworCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CisJCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7CisJCWlycV9kZXNjW2ldLmRlcHRoID0gMjsKKwkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZlbW1hMnJoX3N3X2lycV9jb250cm9sbGVyOworCX0KKworCWVtbWEycmhfc3dfaXJxX2Jhc2UgPSBpcnFfYmFzZTsKK30KKwordm9pZCBsbF9lbW1hMnJoX3N3X2lycV9lbmFibGUoaW50IGlycSkKK3sKKwl1MzIgcmVnOworCisJZGJfYXNzZXJ0KGlycSA+PSAwKTsKKwlkYl9hc3NlcnQoaXJxIDwgTlVNX0VNTUEyUkhfSVJRX1NXKTsKKworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1dfSU5UX0VOKTsKKwlyZWcgfD0gMSA8PCBpcnE7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0JISUZfU1dfSU5UX0VOLCByZWcpOworfQorCit2b2lkIGxsX2VtbWEycmhfc3dfaXJxX2Rpc2FibGUoaW50IGlycSkKK3sKKwl1MzIgcmVnOworCisJZGJfYXNzZXJ0KGlycSA+PSAwKTsKKwlkYl9hc3NlcnQoaXJxIDwgMzIpOworCisJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9TV19JTlRfRU4pOworCXJlZyAmPSB+KDEgPDwgaXJxKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfQkhJRl9TV19JTlRfRU4sIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJbGxfZW1tYTJyaF9ncGlvX2lycV9lbmFibGUoaXJxIC0gZW1tYTJyaF9ncGlvX2lycV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJbGxfZW1tYTJyaF9ncGlvX2lycV9kaXNhYmxlKGlycSAtIGVtbWEycmhfZ3Bpb19pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW1tYTJyaF9ncGlvX2lycV9zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCit7CisJZW1tYTJyaF9ncGlvX2lycV9lbmFibGUoaXJxKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBlbW1hMnJoX2dwaW9faXJxX3NodXRkb3duIGVtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZQorCitzdGF0aWMgdm9pZCBlbW1hMnJoX2dwaW9faXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycSAtPSBlbW1hMnJoX2dwaW9faXJxX2Jhc2U7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX1NULCB+KDEgPDwgaXJxKSk7CisJbGxfZW1tYTJyaF9ncGlvX2lycV9kaXNhYmxlKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfZW5kKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwkJbGxfZW1tYTJyaF9ncGlvX2lycV9lbmFibGUoaXJxIC0gZW1tYTJyaF9ncGlvX2lycV9iYXNlKTsKK30KKworaHdfaXJxX2NvbnRyb2xsZXIgZW1tYTJyaF9ncGlvX2lycV9jb250cm9sbGVyID0geworCS50eXBlbmFtZSA9ICJlbW1hMnJoX2dwaW9faXJxIiwKKwkuc3RhcnR1cCA9IGVtbWEycmhfZ3Bpb19pcnFfc3RhcnR1cCwKKwkuc2h1dGRvd24gPSBlbW1hMnJoX2dwaW9faXJxX3NodXRkb3duLAorCS5lbmFibGUgPSBlbW1hMnJoX2dwaW9faXJxX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGVtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZSwKKwkuYWNrID0gZW1tYTJyaF9ncGlvX2lycV9hY2ssCisJLmVuZCA9IGVtbWEycmhfZ3Bpb19pcnFfZW5kLAorCS5zZXRfYWZmaW5pdHkgPSBOVUxMLAorfTsKKwordm9pZCBlbW1hMnJoX2dwaW9faXJxX2luaXQodTMyIGlycV9iYXNlKQoreworCXUzMiBpOworCisJZm9yIChpID0gaXJxX2Jhc2U7IGkgPCBpcnFfYmFzZSArIE5VTV9FTU1BMlJIX0lSUV9HUElPOyBpKyspIHsKKwkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOworCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDI7CisJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZW1tYTJyaF9ncGlvX2lycV9jb250cm9sbGVyOworCX0KKworCWVtbWEycmhfZ3Bpb19pcnFfYmFzZSA9IGlycV9iYXNlOworfQorCit2b2lkIGxsX2VtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKGludCBpcnEpCit7CisJdTMyIHJlZzsKKworCWRiX2Fzc2VydChpcnEgPj0gMCk7CisJZGJfYXNzZXJ0KGlycSA8IE5VTV9FTU1BMlJIX0lSUV9HUElPKTsKKworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX01BU0spOworCXJlZyB8PSAxIDw8IGlycTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSywgcmVnKTsKK30KKwordm9pZCBsbF9lbW1hMnJoX2dwaW9faXJxX2Rpc2FibGUoaW50IGlycSkKK3sKKwl1MzIgcmVnOworCisJZGJfYXNzZXJ0KGlycSA+PSAwKTsKKwlkYl9hc3NlcnQoaXJxIDwgTlVNX0VNTUEyUkhfSVJRX0dQSU8pOworCisJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSyk7CisJcmVnICY9IH4oMSA8PCBpcnEpOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLLCByZWcpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvbGVkLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjUyNTRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvbGVkLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqICBhcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9sZWQuYworICogICAgICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgbGVkIGRpc3BsYXkgZm9yIE1hcmstZWlucy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNC0yMDA2CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KKworY29uc3QgdW5zaWduZWQgbG9uZyBjbGVhciA9IDB4MjAyMDIwMjA7CisKKyNkZWZpbmUgTEVEX0JBU0UgMHhiMTQwMDAzOAorCit2b2lkIG1hcmtlaW5zX2xlZF9jbGVhcih2b2lkKQoreworCWVtbWEycmhfb3V0MzIoTEVEX0JBU0UsIGNsZWFyKTsKKwllbW1hMnJoX291dDMyKExFRF9CQVNFICsgNCwgY2xlYXIpOworfQorCit2b2lkIG1hcmtlaW5zX2xlZChjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGk7CisJaW50IGxlbiA9IHN0cmxlbihzdHIpOworCisJbWFya2VpbnNfbGVkX2NsZWFyKCk7CisJaWYgKGxlbiA+IDgpCisJCWxlbiA9IDg7CisKKwlpZiAoZW1tYTJyaF9pbjMyKDB4YjAwMDA4MDApICYgKDB4MSA8PCAxOCkpCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCWVtbWEycmhfb3V0OChMRURfQkFTRSArIGksIHN0cltpXSk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQllbW1hMnJoX291dDgoTEVEX0JBU0UgKyAoaSAmIDQpICsgKDMgLSAoaSAmIDMpKSwKKwkJCQkgICAgIHN0cltpXSk7Cit9CisKK3ZvaWQgbWFya2VpbnNfbGVkX2hleCh1MzIgdmFsKQoreworCWNoYXIgc3RyWzEwXTsKKworCXNwcmludGYoc3RyLCAiJTA4eCIsIHZhbCk7CisJbWFya2VpbnNfbGVkKHN0cik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzFlZWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqICBhcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0b2ZybS5jCisgKiAgICAgIFRoaXMgZmlsZSBzZXRzIHVwIHBsYXRmb3JtIGRldmljZXMgZm9yIEVNTUEyUkggTWFyay1laW5zLgorICoKKyAqICBDb3B5cmlnaHQoQykgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMsIDIwMDYKKyAqCisgKiAgQXV0aG9yOiBkbWl0cnkgcGVydnVzaGluIDxkcGVydnVzaGluQHJ1Lm12aXN0YS5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2JjYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisKKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKKworI2RlZmluZSBJMkNfRU1NQTJSSCAiZW1tYTJyaC1paWMiIC8qIG11c3QgYmUgaW4gc3luYyB3aXRoIElJQyBkcml2ZXIgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfZW1tYV9yZXNvdXJjZXNfMFtdID0geworCXsgTlVMTCwgRU1NQTJSSF9JUlFfUElJQzAsIEVNTUEyUkhfSVJRX1BJSUMwLCBJT1JFU09VUkNFX0lSUSB9LAorCXsgTlVMTCwgS1NFRzFBRERSKEVNTUEyUkhfUElJQzBfQkFTRSksIEtTRUcxQUREUihFTU1BMlJIX1BJSUMwX0JBU0UgKyAweDEwMDApLCAwIH0sCit9OworCitzdHJ1Y3QgcmVzb3VyY2UgaTJjX2VtbWFfcmVzb3VyY2VzXzFbXSA9IHsKKwl7IE5VTEwsIEVNTUEyUkhfSVJRX1BJSUMxLCBFTU1BMlJIX0lSUV9QSUlDMSwgSU9SRVNPVVJDRV9JUlEgfSwKKwl7IE5VTEwsIEtTRUcxQUREUihFTU1BMlJIX1BJSUMxX0JBU0UpLCBLU0VHMUFERFIoRU1NQTJSSF9QSUlDMV9CQVNFICsgMHgxMDAwKSwgMCB9LAorfTsKKworc3RydWN0IHJlc291cmNlIGkyY19lbW1hX3Jlc291cmNlc18yW10gPSB7CisJeyBOVUxMLCBFTU1BMlJIX0lSUV9QSUlDMiwgRU1NQTJSSF9JUlFfUElJQzIsIElPUkVTT1VSQ0VfSVJRIH0sCisJeyBOVUxMLCBLU0VHMUFERFIoRU1NQTJSSF9QSUlDMl9CQVNFKSwgS1NFRzFBRERSKEVNTUEyUkhfUElJQzJfQkFTRSArIDB4MTAwMCksIDAgfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2VtbWFfZGV2aWNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSBJMkNfRU1NQTJSSCwKKwkJLmlkID0gMCwKKwkJLnJlc291cmNlID0gaTJjX2VtbWFfcmVzb3VyY2VzXzAsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmNfZW1tYV9yZXNvdXJjZXNfMCksCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lID0gSTJDX0VNTUEyUkgsCisJCS5pZCA9IDEsCisJCS5yZXNvdXJjZSA9IGkyY19lbW1hX3Jlc291cmNlc18xLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaTJjX2VtbWFfcmVzb3VyY2VzXzEpLAorCX0sCisJWzJdID0geworCQkubmFtZSA9IEkyQ19FTU1BMlJILAorCQkuaWQgPSAyLAorCQkucmVzb3VyY2UgPSBpMmNfZW1tYV9yZXNvdXJjZXNfMiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGkyY19lbW1hX3Jlc291cmNlc18yKSwKKwl9LAorfTsKKworI2RlZmluZSBFTU1BMlJIX1NFUklBTF9DTE9DSyAxODU0NDAwMAorI2RlZmluZSBFTU1BMlJIX1NFUklBTF9GTEFHUyBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QKKworc3RhdGljIHN0cnVjdCAgcGxhdF9zZXJpYWw4MjUwX3BvcnQgcGxhdGZvcm1fc2VyaWFsX3BvcnRzW10gPSB7CisgICAgICAgWzBdID0geworICAgICAgICAgLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMF9CQVNFICsgMyksCisgICAgICAgICAuaXJxID0gRU1NQTJSSF9JUlFfUEZVUjAsCisgICAgICAgICAudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAorICAgICAgICAgLnJlZ3NoaWZ0ID0gNCwKKyAgICAgICAgIC5pb3R5cGUgPSBVUElPX01FTSwKKyAgICAgICAgIC5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAorICAgICAgIH0sCisgICAgICAgWzFdID0geworICAgICAgICAgLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMV9CQVNFICsgMyksCisgICAgICAgICAuaXJxID0gRU1NQTJSSF9JUlFfUEZVUjEsCisgICAgICAgICAudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAorICAgICAgICAgLnJlZ3NoaWZ0ID0gNCwKKyAgICAgICAgIC5pb3R5cGUgPSBVUElPX01FTSwKKyAgICAgICAgIC5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAorICAgICAgIH0sCisgICAgICAgWzJdID0geworICAgICAgICAgLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMl9CQVNFICsgMyksCisgICAgICAgICAuaXJxID0gRU1NQTJSSF9JUlFfUEZVUjIsCisgICAgICAgICAudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAorICAgICAgICAgLnJlZ3NoaWZ0ID0gNCwKKyAgICAgICAgIC5pb3R5cGUgPSBVUElPX01FTSwKKyAgICAgICAgIC5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAorICAgICAgIH0sCisgICAgICAgWzNdID0geworCSAuZmxhZ3MgPSAwLAorICAgICAgIH0sCit9OworCitzdGF0aWMgc3RydWN0ICBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2VtbWEgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGxhdGZvcm1fc2VyaWFsX3BvcnRzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdID0geworCSZpMmNfZW1tYV9kZXZpY2VzWzBdLAorCSZpMmNfZW1tYV9kZXZpY2VzWzFdLAorCSZpMmNfZW1tYV9kZXZpY2VzWzJdLAorCSZzZXJpYWxfZW1tYSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBtYXJrZWluc19wYXJ0c1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSAiUm9vdEZTIiwKKwkJLm9mZnNldCA9IDB4MDAwMDAwMDAsCisJCS5zaXplID0gMHgwMGMwMDAwMCwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgPSAiYm9vdCBjb2RlIGFyZWEiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IDB4MDAxMDAwMDAsCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lID0gImtlcm5lbCBpbWFnZSIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gMHgwMDMwMDAwMCwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUgPSAiUm9vdEZTMiIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gMHgwMGMwMDAwMCwKKwl9LAorCVs0XSA9IHsKKwkJLm5hbWUgPSAiYm9vdCBjb2RlIGFyZWEyIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSAweDAwMTAwMDAwLAorCX0sCisJWzVdID0geworCQkubmFtZSA9ICJrZXJuZWwgaW1hZ2UyIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0Zm9ybV9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcGh5c21hcF9zZXRfcGFydGl0aW9ucyhtYXJrZWluc19wYXJ0cywgQVJSQVlfU0laRShtYXJrZWluc19wYXJ0cykpOworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0Zm9ybV9kZXZpY2VzX3NldHVwKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvc2V0dXAuYyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5OGZkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3NldHVwLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiAgYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvc2V0dXAuYworICogICAgICBUaGlzIGZpbGUgaXMgc2V0dXAgZm9yIEVNTUEyUkggTWFyay1laW5zLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA0LTIwMDYKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBhcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L3NldHVwLmMuCisgKgorICoJQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgkvKiBmb3IgSFogKi8KKyNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2JjYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisKKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKKyNkZWZpbmUJVVNFX0NQVV9DT1VOVEVSX1RJTUVSCS8qIHdoZXRoZXIgd2UgdXNlIGNwdSBjb3VudGVyICovCisKK2V4dGVybiB2b2lkIG1hcmtlaW5zX2xlZChjb25zdCBjaGFyICopOworCitzdGF0aWMgaW50IGJ1c19mcmVxdWVuY3kgPSAwOworCitzdGF0aWMgdm9pZCBtYXJrZWluc19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKK3sKKwlzdGF0aWMgdm9pZCAoKmJhY2tfdG9fcHJvbSkgKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKTB4YmZjMDAwMDA7CisKKwlwcmludGsoImNhbm5vdCBFTU1BMlJIIE1hcmstZWlucyByZXN0YXJ0LlxuIik7CisJbWFya2VpbnNfbGVkKCJyZXN0YXJ0LiIpOworCWJhY2tfdG9fcHJvbSgpOworfQorCitzdGF0aWMgdm9pZCBtYXJrZWluc19tYWNoaW5lX2hhbHQodm9pZCkKK3sKKwlwcmludGsoIkVNTUEyUkggTWFyay1laW5zIGhhbHRlZC5cbiIpOworCW1hcmtlaW5zX2xlZCgiaGFsdGVkLiIpOworCXdoaWxlICgxKSA7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtlaW5zX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJcHJpbnRrKCJFTU1BMlJIIE1hcmstZWlucyBoYWx0ZWQuIFBsZWFzZSB0dXJuIG9mZiB0aGUgcG93ZXIuXG4iKTsKKwltYXJrZWluc19sZWQoInBvd2Vyb2ZmLiIpOworCXdoaWxlICgxKSA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsb2NrWzRdID0geyAxNjY1MDAwMDAsIDE4NzMxMjUwMCwgMTk5ODAwMDAwLCAyMTA2MDAwMDAgfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZGV0ZWN0X2J1c19mcmVxdWVuY3kodW5zaWduZWQgbG9uZyBydGNfYmFzZSkKK3sKKwl1MzIgcmVnOworCisJLyogZGV0ZWN0IGZyb20gYm9vdCBzdHJhcCAqLworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1RSQVBfMCk7CisJcmVnID0gKHJlZyA+PiA0KSAmIDB4MzsKKwlyZXR1cm4gY2xvY2tbcmVnXTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVtbWEycmhfdGltZV9pbml0KHZvaWQpCit7CisJdTMyIHJlZzsKKwlpZiAoYnVzX2ZyZXF1ZW5jeSA9PSAwKQorCQlidXNfZnJlcXVlbmN5ID0gZGV0ZWN0X2J1c19mcmVxdWVuY3koMCk7CisKKwlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX1NUUkFQXzApOworCWlmICgocmVnICYgMHgzKSA9PSAwKQorCQlyZWcgPSAocmVnID4+IDYpICYgMHgzOworCWVsc2UgeworCQlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX01BSU5fQ1RSTCk7CisJCXJlZyA9IChyZWcgPj4gNCkgJiAweDM7CisJfQorCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IChidXNfZnJlcXVlbmN5ICogKDQgKyByZWcpKSAvIDQgLyAyOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZW1tYTJyaF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCit7CisJLyogd2UgYXJlIHVzaW5nIHRoZSBjcHUgY291bnRlciBmb3IgdGltZXIgaW50ZXJydXB0cyAqLworCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyA3LCBpcnEpOworfQorCitzdGF0aWMgdm9pZCBtYXJrZWluc19ib2FyZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbWFya2VpbnNfaXJxX3NldHVwKHZvaWQpOworCitzdGF0aWMgdm9pZCBpbmxpbmUgX19pbml0IG1hcmtlaW5zX3Npb19zZXR1cCh2b2lkKQoreworI2lmZGVmIENPTkZJR19LR0RCXzgyNTAKKwlzdHJ1Y3QgdWFydF9wb3J0IGVtbWFfcG9ydDsKKworCW1lbXNldCgmZW1tYV9wb3J0LCAwLCBzaXplb2YoZW1tYV9wb3J0KSk7CisKKwllbW1hX3BvcnQuZmxhZ3MgPQorCSAgICBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1Q7CisJZW1tYV9wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOworCWVtbWFfcG9ydC5yZWdzaGlmdCA9IDQ7CS8qIEkvTyBhZGRyZXNzZXMgYXJlIGV2ZXJ5IDggYnl0ZXMgKi8KKwllbW1hX3BvcnQudWFydGNsayA9IDE4NTQ0MDAwOwkvKiBDbG9jayByYXRlIG9mIHRoZSBjaGlwICovCisKKwllbW1hX3BvcnQubGluZSA9IDA7CisJZW1tYV9wb3J0Lm1hcGJhc2UgPSBLU0VHMUFERFIoRU1NQTJSSF9QRlVSMF9CQVNFICsgMyk7CisJZW1tYV9wb3J0Lm1lbWJhc2UgPSAodTgqKWVtbWFfcG9ydC5tYXBiYXNlOworCWVhcmx5X3NlcmlhbF9zZXR1cCgmZW1tYV9wb3J0KTsKKworCWVtbWFfcG9ydC5saW5lID0gMTsKKwllbW1hX3BvcnQubWFwYmFzZSA9IEtTRUcxQUREUihFTU1BMlJIX1BGVVIxX0JBU0UgKyAzKTsKKwllbW1hX3BvcnQubWVtYmFzZSA9ICh1OCopZW1tYV9wb3J0Lm1hcGJhc2U7CisJZWFybHlfc2VyaWFsX3NldHVwKCZlbW1hX3BvcnQpOworCisJZW1tYV9wb3J0LmlycSA9IEVNTUEyUkhfSVJRX1BGVVIxOworCWtnZGI4MjUwX2FkZF9wb3J0KDEsICZlbW1hX3BvcnQpOworI2VuZGlmCit9CisKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCit7CisJLyogaW5pdGlhbGl6ZSBib2FyZCAtIHdlIGRvbid0IHRydXN0IHRoZSBsb2FkZXIgKi8KKwltYXJrZWluc19ib2FyZF9pbml0KCk7CisKKwlzZXRfaW9fcG9ydF9iYXNlKEtTRUcxQUREUihFTU1BMlJIX1BDSV9JT19CQVNFKSk7CisKKwlib2FyZF90aW1lX2luaXQgPSBlbW1hMnJoX3RpbWVfaW5pdDsKKwlib2FyZF90aW1lcl9zZXR1cCA9IGVtbWEycmhfdGltZXJfc2V0dXA7CisKKwlfbWFjaGluZV9yZXN0YXJ0ID0gbWFya2VpbnNfbWFjaGluZV9yZXN0YXJ0OworCV9tYWNoaW5lX2hhbHQgPSBtYXJrZWluc19tYWNoaW5lX2hhbHQ7CisJcG1fcG93ZXJfb2ZmID0gbWFya2VpbnNfbWFjaGluZV9wb3dlcl9vZmY7CisKKwkvKiBzZXR1cCByZXNvdXJjZSBsaW1pdHMgKi8KKwlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSBFTU1BMlJIX1BDSV9JT19CQVNFOworCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBFTU1BMlJIX1BDSV9JT19CQVNFICsgRU1NQTJSSF9QQ0lfSU9fU0laRSAtIDE7CisJaW9tZW1fcmVzb3VyY2Uuc3RhcnQgPSBFTU1BMlJIX0lPX0JBU0U7CisJaW9tZW1fcmVzb3VyY2UuZW5kID0gRU1NQTJSSF9ST01fQkFTRSAtIDE7CisKKwkvKiBSZWJvb3Qgb24gcGFuaWMgKi8KKwlwYW5pY190aW1lb3V0ID0gMTgwOworCisJbWFya2VpbnNfc2lvX3NldHVwKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtYXJrZWluc19ib2FyZF9pbml0KHZvaWQpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IGVtbWEycmhfaW4zMihFTU1BMlJIX1BCUkRfSU5UX0VOKTsJLyogb3BlbiBzZXJpYWwgaW50ZXJydXB0cy4gKi8KKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUEJSRF9JTlRfRU4sIHZhbCB8IDB4YWEpOworCXZhbCA9IGVtbWEycmhfaW4zMihFTU1BMlJIX1BCUkRfQ0xLU0VMKTsJLyogc2V0IHNlcmlhbCBjbG9ja3MuICovCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BCUkRfQ0xLU0VMLCB2YWwgfCAweDUpOwkvKiAxOE1IeiAqLworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfQ09OVFJPTCwgMCk7CisKKwltYXJrZWluc19sZWQoIk1WTCBFMlJIIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvc2V0dXAuYwppbmRleCA3OGRiYjE4Li5hMDRhZWE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3NldHVwLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogdW5zaWduZWQgY2hhciBtYWNfMF8xWzEyXTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gcmVhZF9jMF9zdGF0dXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2V0dXAuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2V0dXAuYwppbmRleCA2ZDg1OWQxLi40MjM2ZGEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9zZXR1cC5jCkBAIC03MSw3ICs3MSw3IEBACiAgKi8KIGV4dGVybiB2b2lkIGd0NjQxMjBfdGltZV9pbml0KHZvaWQpOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCV9tYWNoaW5lX3Jlc3RhcnQgPSBnYWxpbGVvX21hY2hpbmVfcmVzdGFydDsKIAlfbWFjaGluZV9oYWx0ID0gZ2FsaWxlb19tYWNoaW5lX2hhbHQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9zZXR1cC5jIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3Qvc2V0dXAuYwppbmRleCAyMGI2NWQzLi4xMTkzYTIyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L3NldHVwLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCWd0NjQxMjBfYmFzZSA9IDB4ZTAwMDAwMDA7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdm9pZCAoKmwzZnVuYykodW5zaWduZWQgbG9uZyk9S1NFRzFBRERSKCZzZXR1cF9sM2NhY2hlKTsKIAl1bnNpZ25lZCBpbnQgdG1wd29yZDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjYwNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBDb3B5cmlnaHQgMjAwNiBXaW5kIFJpdmVyIFN5c3RlbSwgSW5jLgorIyBBdXRob3I6IFJvbmdrYWkuWmhhbiA8cm9uZ2thaS56aGFuQHdpbmRyaXZlci5jb20+CisjCisjIE1ha2VmaWxlIGZvciB0aGUgV2luZCBSaXZlciBNSVBTIDRLQyBQUE1DIEV2YWwgQm9hcmQKKyMKKworb2JqLXkJKz0gaW50LWhhbmRsZXIubyBpcnEubyByZXNldC5vIHNldHVwLm8gdGltZS5vIHBjaS5vCisKK0VYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2ludC1oYW5kbGVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlZTdiMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pbnQtaGFuZGxlci5TCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIFdpbmQgUml2ZXIgU3lzdGVtIEluYy4gUm9uZ2thaS5aaGFuIDxyb25na2FpLnpoYW5Ad2luZHJpdmVyLmNvbT4KKyAqLworI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgorI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtd3JwcG1jL21hY2gtZ3Q2NDEyMC5oPgorCisJLmFsaWduCTUKKwkuc2V0CW5vYXQKK05FU1RFRChoYW5kbGVfSVJRLCBQVF9TSVpFLCBzcCkKKwlTQVZFX0FMTAorCUNMSQkJCQkjIEltcG9ydGFudDogbWFyayBLRVJORUwgbW9kZSAhCisJLnNldAlhdAorCisJbWZjMAl0MCwgQ1AwX0NBVVNFCQkjIGdldCBwZW5kaW5nIGludGVycnVwdHMKKwltZmMwCXQxLCBDUDBfU1RBVFVTCQkjIGdldCBlbmFibGVkIGludGVycnVwdHMKKwlhbmQJdDAsIHQwLCB0MQkJIyBnZXQgYWxsb3dlZCBpbnRlcnJ1cHRzCisJYW5kaQl0MCwgdDAsIDB4RkYwMAorCWJlcXoJdDAsIDFmCisJbW92ZQlhMSwgc3AJCQkjIFByZXBhcmUgJ3N0cnVjdCBwdF9yZWdzICpyZWdzJyBwb2ludGVyCisKKwlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQNwkjIENQVSBDb21wYXJlL0NvdW50IGludGVybmFsIHRpbWVyCisJYm5legl0MSwgaGFuZGxlX2NwdXRpbWVyX2lycQorCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA2CSMgVUFSVCAxNjU1MCBwb3J0CisJYm5legl0MSwgaGFuZGxlX3VhcnRfaXJxCisJYW5kaQl0MSwgdDAsIENBVVNFRl9JUDMJIyBQQ0kgSU5UX0EKKwlibmV6CXQxLCBoYW5kbGVfcGNpX2ludEFfaXJxCisKKwkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCisxOglqCXNwdXJpb3VzX2ludGVycnVwdAorCW5vcAorRU5EKGhhbmRsZV9JUlEpCisKKwkuYWxpZ24JNQoraGFuZGxlX2NwdXRpbWVyX2lycToKKwlsaQlhMCwgV1JQUE1DX01JUFNfVElNRVJfSVJRCisJamFsCWRvX0lSUQorCWoJcmV0X2Zyb21faXJxCisKKwkuYWxpZ24JNQoraGFuZGxlX3VhcnRfaXJxOgorCWxpCWEwLCBXUlBQTUNfVUFSVDE2NTUwX0lSUQorCWphbAlkb19JUlEKKwlqCXJldF9mcm9tX2lycQorCisJLmFsaWduCTUKK2hhbmRsZV9wY2lfaW50QV9pcnE6CisJbGkJYTAsIFdSUFBNQ19QQ0lfSU5UQV9JUlEKKwlqYWwJZG9fSVJRCisJaglyZXRfZnJvbV9pcnEKKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2lycS5jIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDU2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvaXJxLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIGlycS5jOiBHVDY0MTIwIEludGVycnVwdCBDb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCBXaW5kIFJpdmVyIFN5c3RlbSBJbmMuCisgKiBBdXRob3I6IFJvbmdrYWkuWmhhbiwgPHJvbmdrYWkuemhhbkB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KKworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfSVJRKHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemUgR1Q2NDEyMCBJbnRlcnJ1cHQgQ29udHJvbGxlcgorICovCit2b2lkIGd0NjQxMjBfaW5pdF9waWModm9pZCkKK3sKKwkvKiBjbGVhciBDUFUgSW50ZXJydXB0IENhdXNlIFJlZ2lzdGVycyAqLworCUdUX1dSSVRFKEdUX0lOVFJDQVVTRV9PRlMsICgweDFGIDw8IDIxKSk7CisJR1RfV1JJVEUoR1RfSElOVFJDQVVTRV9PRlMsIDB4MDApOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBmcm9tIEdUNjQxMjAgYnJpZGdlIGNoaXAgKi8KKwlHVF9XUklURShHVF9JTlRSTUFTS19PRlMsIDB4MDApOworCUdUX1dSSVRFKEdUX0hJTlRSTUFTS19PRlMsIDB4MDApOworCUdUX1dSSVRFKEdUX1BDSTBfSUNNQVNLX09GUywgMHgwMCk7CisJR1RfV1JJVEUoR1RfUENJMF9ISUNNQVNLX09GUywgMHgwMCk7Cit9CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBlbmFibGUgYWxsIENQVSBpbnRlcnJ1cHQgYml0cy4gKi8KKwlzZXRfYzBfc3RhdHVzKFNUMF9JTSk7CS8qIElFIGJpdCBpcyBzdGlsbCAwICovCisKKwkvKiBJbnN0YWxsIE1JUFMgSW50ZXJydXB0IFRyYXAgVmVjdG9yICovCisJc2V0X2V4Y2VwdF92ZWN0b3IoMCwgaGFuZGxlX0lSUSk7CisKKwkvKiBJUlEgMCAtIDcgYXJlIGZvciBNSVBTIGNvbW1vbiBpcnFfY3B1IGNvbnRyb2xsZXIgKi8KKwltaXBzX2NwdV9pcnFfaW5pdCgwKTsKKworCWd0NjQxMjBfaW5pdF9waWMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9wY2kuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmJlOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3BjaS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBwY2kuYzogR1Q2NDEyMCBQQ0kgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtIEluYy4gUm9uZ2thaS5aaGFuIDxyb25na2FpLnpoYW5Ad2luZHJpdmVyLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CisKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBndDY0MTIwX3BjaV9vcHM7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpMF9pb19yZXNvdXJjZSA9IHsKKwkubmFtZSAgPSAicGNpXzAgaW8iLAorCS5zdGFydCA9IEdUX1BDSV9JT19CQVNFLAorCS5lbmQgICA9IEdUX1BDSV9JT19CQVNFICsgR1RfUENJX0lPX1NJWkUgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaTBfbWVtX3Jlc291cmNlID0geworCS5uYW1lICA9ICJwY2lfMCBtZW1vcnkiLAorCS5zdGFydCA9IEdUX1BDSV9NRU1fQkFTRSwKKwkuZW5kICAgPSBHVF9QQ0lfTUVNX0JBU0UgKyBHVF9QQ0lfTUVNX1NJWkUgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlXzAgPSB7CisJLnBjaV9vcHMJPSAmZ3Q2NDEyMF9wY2lfb3BzLAorCS5pb19yZXNvdXJjZQk9ICZwY2kwX2lvX3Jlc291cmNlLAorCS5tZW1fcmVzb3VyY2UJPSAmcGNpMF9tZW1fcmVzb3VyY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBndDY0MTIwX3BjaV9pbml0KHZvaWQpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IEdUX1JFQUQoR1RfUENJMF9DTURfT0ZTKTsJCS8qIEh1aD8/PyAtLSBSYWxmICAqLworCXRtcCA9IEdUX1JFQUQoR1RfUENJMF9CQVJFX09GUyk7CisKKwkvKiByZXNldCB0aGUgd2hvbGUgUENJIEkvTyBzcGFjZSByYW5nZSAqLworCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IEdUX1BDSV9JT19CQVNFOworCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBHVF9QQ0lfSU9fQkFTRSArIEdUX1BDSV9JT19TSVpFIC0gMTsKKworCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZob3NlXzApOworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKGd0NjQxMjBfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3Jlc2V0LmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTcwMzljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3Jlc2V0LmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBSYWxmIEJhZWNobGUKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKK3ZvaWQgd3JwcG1jX21hY2hpbmVfcmVzdGFydChjaGFyICpjb21tYW5kKQoreworCS8qCisJICogT3VjaCwgd2UncmUgc3RpbGwgYWxpdmUgLi4uIFRoaXMgdGltZSB3ZSB0YWtlIHRoZSBzaWx2ZXIgYnVsbGV0IC4uLgorCSAqIC4uLiBhbmQgZmluZCB0aGF0IHdlIGxlYXZlIHRoZSBoYXJkd2FyZSBpbiBhIHN0YXRlIGluIHdoaWNoIHRoZQorCSAqIGtlcm5lbCBpbiB0aGUgZmx1c2ggbG9ja3MgdXAgc29tZXdoZW4gZHVyaW5nIG9mIGFmdGVyIHRoZSBQQ0kKKwkgKiBkZXRlY3Rpb24gc3R1ZmYuCisJICovCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlzZXRfYzBfc3RhdHVzKFNUMF9CRVYgfCBTVDBfRVJMKTsKKwljaGFuZ2VfYzBfY29uZmlnKENPTkZfQ01fQ01BU0ssIENPTkZfQ01fVU5DQUNIRUQpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCXdyaXRlX2MwX3dpcmVkKDApOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJqclx0JTAiOjoiciIoMHhiZmMwMDAwMCkpOworfQorCit2b2lkIHdycHBtY19tYWNoaW5lX2hhbHQodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJZb3UgY2FuIHNhZmVseSB0dXJuIG9mZiB0aGUgcG93ZXJcbiIpOworCXdoaWxlICgxKSB7CisJCV9fYXNtX18oCisJCQkiLnNldFx0bWlwczNcblx0IgorCQkJIndhaXRcblx0IgorCQkJIi5zZXRcdG1pcHMwIgorCQkpOworCX0KK30KKwordm9pZCB3cnBwbWNfbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwl3cnBwbWNfbWFjaGluZV9oYWx0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvc2V0dXAuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzU5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvc2V0dXAuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIHNldHVwLmM6IFNldHVwIHBvaW50ZXJzIHRvIGhhcmR3YXJlIGRlcGVuZGVudCByb3V0aW5lcy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDQgYnkgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCBXaW5kIFJpdmVyIFN5c3RlbSBJbmMuIFJvbmdrYWkuemhhbiA8cm9uZ2thaS56aGFuQHdpbmRyaXZlci5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KKwordW5zaWduZWQgbG9uZyBndDY0MTIwX2Jhc2UgPSBLU0VHMUFERFIoMHgxNDAwMDAwMCk7CisKKyNpZmRlZiBXUlBQTUNfRUFSTFlfREVCVUcKKworc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiB3cnBwbWNfbGVkID0gXAorCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopS1NFRzFBRERSKFdSUFBNQ19MRURfQkFTRSk7CisKKy8qCisgKiBQUE1DIExFRCBjb250cm9sIHJlZ2lzdGVyOgorICogLSkgYml0WzBdIGNvbnRyb2xzIERTMSBMRUQgKDEgLSBPRkYsIDAgLSBPTikKKyAqIC0pIGJpdFsxXSBjb250cm9scyBEUzIgTEVEICgxIC0gT0ZGLCAwIC0gT04pCisgKiAtKSBiaXRbMl0gY29udHJvbHMgRFM0IExFRCAoMSAtIE9GRiwgMCAtIE9OKQorICovCit2b2lkIHdycHBtY19sZWRfb24oaW50IG1hc2spCit7CisJdW5zaWduZWQgY2hhciB2YWx1ZSA9ICp3cnBwbWNfbGVkOworCisJdmFsdWUgJj0gKDB4RjggfCBtYXNrKTsKKwkqd3JwcG1jX2xlZCA9IHZhbHVlOworfQorCisvKiBJZiBtYXNrID0gMCwgdHVybiBvZmYgYWxsIExFRHMgKi8KK3ZvaWQgd3JwcG1jX2xlZF9vZmYoaW50IG1hc2spCit7CisJdW5zaWduZWQgY2hhciB2YWx1ZSA9ICp3cnBwbWNfbGVkOworCisJdmFsdWUgfD0gKDB4NyAmIG1hc2spOworCSp3cnBwbWNfbGVkID0gdmFsdWU7Cit9CisKKy8qCisgKiBXZSBhc3N1bWUgdGhhdCBib290bG9hZGVyIGhhcyBpbml0aWFsaXplZCBVQVJUMTY1NTAgY29ycmVjdGx5CisgKi8KK3ZvaWQgX19pbml0IHdycHBtY19lYXJseV9wdXRjKGNoYXIgY2gpCit7CisJc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKndycHBtY191YXJ0ID0gXAorCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUtTRUcxQUREUihXUlBQTUNfVUFSVDE2NTUwX0JBU0UpOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisKKwkvKiBXYWl0IHVudGlsIFRyYW5zbWl0LUhvbGRpbmctUmVnaXN0ZXIgaXMgZW1wdHkgKi8KKwl3aGlsZSAoMSkgeworCQl2YWx1ZSA9ICood3JwcG1jX3VhcnQgKyA1KTsKKwkJaWYgKHZhbHVlICYgMHgyMCkKKwkJCWJyZWFrOworCX0KKworCSp3cnBwbWNfdWFydCA9IGNoOworfQorCit2b2lkIF9faW5pdCB3cnBwbWNfZWFybHlfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0YXRpYyBjaGFyIHBidWZbMjU2XSA9IHsnXDAnLCB9OworCWNoYXIgKmNoID0gcGJ1ZjsKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgaW50IGk7CisKKwltZW1zZXQocGJ1ZiwgMCwgMjU2KTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWkgPSB2c3ByaW50ZihwYnVmLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCS8qIFByaW50IHRoZSBzdHJpbmcgKi8KKwl3aGlsZSAoKmNoICE9ICdcMCcpIHsKKwkJd3JwcG1jX2Vhcmx5X3B1dGMoKmNoKTsKKwkJLyogaWYgcHJpbnQgJ1xuJywgYWxzbyBwcmludCAnXHInICovCisJCWlmICgqY2grKyA9PSAnXG4nKQorCQkJd3JwcG1jX2Vhcmx5X3B1dGMoJ1xyJyk7CisJfQorfQorI2VuZGlmIC8qIFdSUFBNQ19FQVJMWV9ERUJVRyAqLworCit1bnNpZ25lZCBsb25nIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAorc3RhdGljIHZvaWQgd3JwcG1jX3NldHVwX3NlcmlhbCh2b2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgdXA7CisKKwltZW1zZXQoJnVwLCAweDAwLCBzaXplb2Yoc3RydWN0IHVhcnRfcG9ydCkpOworCisJLyoKKwkgKiBBIG5vdGUgYWJvdXQgbWFwYmFzZS9tZW1iYXNlCisJICogLSkgbWFwYmFzZSBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgSU8gcG9ydC4KKwkgKiAtKSBtZW1iYXNlIGlzIGFuICdpb3JlbWFwcGVkJyBjb29raWUuCisJICovCisJdXAubGluZSA9IDA7CisJdXAudHlwZSA9IFBPUlRfMTY1NTA7CisJdXAuaW90eXBlID0gVVBJT19NRU07CisJdXAubWFwYmFzZSA9IFdSUFBNQ19VQVJUMTY1NTBfQkFTRTsKKwl1cC5tZW1iYXNlID0gaW9yZW1hcCh1cC5tYXBiYXNlLCA4KTsKKwl1cC5pcnEgPSBXUlBQTUNfVUFSVDE2NTUwX0lSUTsKKwl1cC51YXJ0Y2xrID0gV1JQUE1DX1VBUlQxNjU1MF9DTE9DSzsKKwl1cC5mbGFncyA9IFVQRl9TS0lQX1RFU1QvKiB8IFVQRl9CT09UX0FVVE9DT05GICovOworCXVwLnJlZ3NoaWZ0ID0gMDsKKworCWVhcmx5X3NlcmlhbF9zZXR1cCgmdXApOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3sKKwlleHRlcm4gdm9pZCB3cnBwbWNfdGltZV9pbml0KHZvaWQpOworCWV4dGVybiB2b2lkIHdycHBtY190aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICopOworCWV4dGVybiB2b2lkIHdycHBtY19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCk7CisJZXh0ZXJuIHZvaWQgd3JwcG1jX21hY2hpbmVfaGFsdCh2b2lkKTsKKwlleHRlcm4gdm9pZCB3cnBwbWNfbWFjaGluZV9wb3dlcl9vZmYodm9pZCk7CisKKwlfbWFjaGluZV9yZXN0YXJ0ID0gd3JwcG1jX21hY2hpbmVfcmVzdGFydDsKKwlfbWFjaGluZV9oYWx0CSA9IHdycHBtY19tYWNoaW5lX2hhbHQ7CisJcG1fcG93ZXJfb2ZmCSA9IHdycHBtY19tYWNoaW5lX3Bvd2VyX29mZjsKKworCS8qIFVzZSBNSVBTIENvdW50L0NvbXBhcmUgVGltZXIgKi8KKwlib2FyZF90aW1lX2luaXQgICA9IHdycHBtY190aW1lX2luaXQ7CisJYm9hcmRfdGltZXJfc2V0dXAgPSB3cnBwbWNfdGltZXJfc2V0dXA7CisKKwkvKiBUaGlzIG1ha2VzIHRoZSBvcGVyYXRpb25zIG9mICdpbi9vdXRbYndsXScgdG8gdGhlCisJICogcGh5c2ljYWwgYWRkcmVzcyAoIDwgS1NFRzApIGNhbiB3b3JrIHZpYSBLU0VHMQorCSAqLworCXNldF9pb19wb3J0X2Jhc2UoS1NFRzEpOworCisjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCisJd3JwcG1jX3NldHVwX3NlcmlhbCgpOworI2VuZGlmCit9CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiV2luZCBSaXZlciBQUE1DIChHVDY0MTIwKSI7Cit9CisKKy8qCisgKiBJbml0aWFsaXplcyBiYXNpYyByb3V0aW5lcyBhbmQgc3RydWN0dXJlcyBwb2ludGVycywgbWVtb3J5IHNpemUgKGFzCisgKiBnaXZlbiBieSB0aGUgYmlvcyBhbmQgc2F2ZXMgdGhlIGNvbW1hbmQgbGluZS4KKyAqLwordm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCit7CisJbWlwc19tYWNoZ3JvdXAgPSBNQUNIX0dST1VQX0dBTElMRU87CisJbWlwc19tYWNodHlwZSA9IE1BQ0hfRVY2NDEyMEE7CisKKwlhZGRfbWVtb3J5X3JlZ2lvbihXUlBQTUNfU0RSQU1fU0NTMF9CQVNFLCBXUlBQTUNfU0RSQU1fU0NTMF9TSVpFLCBCT09UX01FTV9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKFdSUFBNQ19CT09UUk9NX0JBU0UsIFdSUFBNQ19CT09UUk9NX1NJWkUsIEJPT1RfTUVNX1JPTV9EQVRBKTsKKworCXdycHBtY19lYXJseV9wcmludGsoInByb21faW5pdDogR1Q2NDEyMCBTRFJBTSBCYW5rIDA6IDB4JXggLSAweCUwOGx4XG4iLAorCQkJV1JQUE1DX1NEUkFNX1NDUzBfQkFTRSwgKFdSUFBNQ19TRFJBTV9TQ1MwX0JBU0UgKyBXUlBQTUNfU0RSQU1fU0NTMF9TSVpFKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvdGltZS5jIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzVkMjJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3RpbWUuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogdGltZS5jOiBNSVBTIENQVSBDb3VudC9Db21wYXJlIHRpbWVyIGhvb2t1cAorICoKKyAqIEF1dGhvcjogTWFyay5aaGFuLCA8cm9uZ2thaS56aGFuQHdpbmRyaXZlci5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDA0IGJ5IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgV2luZCBSaXZlciBTeXN0ZW0gSW5jLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CS8qIGZvciBIWiAqLworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vZ3Q2NDEyMC5oPgorCisjZGVmaW5lIFdSUFBNQ19DUFVfQ0xLX0ZSRVEgNDAwMDAwMDAgLyogNDBNSFogKi8KKwordm9pZCBfX2luaXQgd3JwcG1jX3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKK3sKKwkvKiBJbnN0YWxsIElTUiBmb3IgdGltZXIgaW50ZXJydXB0ICovCisJc2V0dXBfaXJxKFdSUFBNQ19NSVBTX1RJTUVSX0lSUSwgaXJxKTsKKworCS8qIHRvIGdlbmVyYXRlIHRoZSBmaXJzdCB0aW1lciBpbnRlcnJ1cHQgKi8KKwl3cml0ZV9jMF9jb21wYXJlKG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWik7CisJd3JpdGVfYzBfY291bnQoMCk7Cit9CisKKy8qCisgKiBFc3RpbWF0ZSBDUFUgZnJlcXVlbmN5LiAgU2V0cyBtaXBzX2hwdF9mcmVxdWVuY3kgYXMgYSBzaWRlLWVmZmVjdAorICoKKyAqIE5PVEU6IFdlIGRpc2FibGUgYWxsIEdUNjQxMjAgdGltZXJzLCBhbmQgdXNlIE1JUFMgcHJvY2Vzc29yIGludGVybmFsCisgKiB0aW1lciBhcyB0aGUgc291cmNlIG9mIGtlcm5lbCBjbG9jayB0aWNrLgorICovCit2b2lkIF9faW5pdCB3cnBwbWNfdGltZV9pbml0KHZvaWQpCit7CisJLyogRGlzYWJsZSBHVDY0MTIwIHRpbWVycyAqLworCUdUX1dSSVRFKEdUX1RDX0NPTlRST0xfT0ZTLCAweDAwKTsKKwlHVF9XUklURShHVF9UQzBfT0ZTLCAweDAwKTsKKwlHVF9XUklURShHVF9UQzFfT0ZTLCAweDAwKTsKKwlHVF9XUklURShHVF9UQzJfT0ZTLCAweDAwKTsKKwlHVF9XUklURShHVF9UQzNfT0ZTLCAweDAwKTsKKworCS8qIFVzZSBNSVBTIGNvbXBhcmUvY291bnQgaW50ZXJuYWwgdGltZXIgKi8KKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBXUlBQTUNfQ1BVX0NMS19GUkVROworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfc2V0dXAuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX3NldHVwLmMKaW5kZXggZmM3M2M4ZC4uZGE2YWUwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfc2V0dXAuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2l0ODE3Ml9zZXR1cC5jCkBAIC03MiwxMSArNzIsMjkgQEAKICAgICBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2g7CiAgICAgc3RydWN0IHJlc291cmNlIGJvb3Q7CiB9IGl0ODE3Ml9yZXNvdXJjZXMgPSB7Ci0gICAgeyAiUkFNIiwgICAgICAgICAgIDAsICAgICAgICAgIDAsICAgICAgICAgIElPUkVTT1VSQ0VfTUVNIH0sIC8qIHRvIGJlIGluaXR0ZWQgKi8KLSAgICB7ICJQQ0kgTWVtIiwgICAgICAgMHgxMDAwMDAwMCwgMHgxM0ZGRkZGRiwgSU9SRVNPVVJDRV9NRU0gfSwKLSAgICB7ICJQQ0kgSS9PIiwgICAgICAgMHgxNDAwMDAwMCwgMHgxN0ZGRkZGRiAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJGbGFzaCIsICAgICAgICAgMHgwODAwMDAwMCwgMHgwQ0ZGRkZGRiAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJCb290IFJPTSIsICAgICAgMHgxRkMwMDAwMCwgMHgxRkZGRkZGRiAgICAgICAgICAgICAgICAgfQorCXsKKwkJLnN0YXJ0CT0gMCwJCQkJLyogdG8gYmUgaW5pdHRlZCAqLworCQkuZW5kCT0gMCwKKwkJLm5hbWUJPSAiUkFNIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IDB4MTAwMDAwMDAsCisJCS5lbmQJPSAweDEzRkZGRkZGLAorCQkubmFtZQk9ICJQQ0kgTWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IDB4MTQwMDAwMDAsCisJCS5lbmQJPSAweDE3RkZGRkZGCisJCS5uYW1lCT0gIlBDSSBJL08iLAorCX0sIHsKKwkJLnN0YXJ0CT0gMHgwODAwMDAwMCwKKwkJLmVuZAk9IDB4MENGRkZGRkYKKwkJLm5hbWUJPSAiRmxhc2giLAorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxRkMwMDAwMCwKKwkJLmVuZAk9IDB4MUZGRkZGRkYKKwkJLm5hbWUJPSAiQm9vdCBST00iLAorCX0KIH07CiAjZWxzZQogc3RydWN0IHsKQEAgLTg5LDE0ICsxMDcsNDQgQEAKICAgICBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2g7CiAgICAgc3RydWN0IHJlc291cmNlIGJvb3Q7CiB9IGl0ODE3Ml9yZXNvdXJjZXMgPSB7Ci0gICAgeyAiUkFNIiwgICAgICAgICAgIDAsICAgICAgICAgIDAsICAgICAgICAgIElPUkVTT1VSQ0VfTUVNIH0sIC8qIHRvIGJlIGluaXR0ZWQgKi8KLSAgICB7ICJQQ0kgTWVtMCIsICAgICAgMHgwQzAwMDAwMCwgMHgwRkZGRkZGRiwgSU9SRVNPVVJDRV9NRU0gfSwKLSAgICB7ICJQQ0kgTWVtMSIsICAgICAgMHgxMDAwMDAwMCwgMHgxM0ZGRkZGRiwgSU9SRVNPVVJDRV9NRU0gfSwKLSAgICB7ICJQQ0kgSS9PIiwgICAgICAgMHgxNDAwMDAwMCwgMHgxN0ZGRkZGRiAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJQQ0kgTWVtMiIsICAgICAgMHgxQTAwMDAwMCwgMHgxQkZGRkZGRiwgSU9SRVNPVVJDRV9NRU0gfSwKLSAgICB7ICJQQ0kgTWVtMyIsICAgICAgMHgxQzAwMDAwMCwgMHgxRkJGRkZGRiwgSU9SRVNPVVJDRV9NRU0gfSwKLSAgICB7ICJGbGFzaCIsICAgICAgICAgMHgwODAwMDAwMCwgMHgwQ0ZGRkZGRiAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJCb290IFJPTSIsICAgICAgMHgxRkMwMDAwMCwgMHgxRkZGRkZGRiAgICAgICAgICAgICAgICAgfQorCXsKKwkJLnN0YXJ0CT0gMCwJCQkJLyogdG8gYmUgaW5pdHRlZCAqLworCQkuZW5kCT0gMCwKKwkJLm5hbWUJPSAiUkFNIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IDB4MEMwMDAwMDAsCisJCS5lbmQJPSAweDBGRkZGRkZGLAorCQkubmFtZQk9ICJQQ0kgTWVtMCIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJIH0sIHsKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTNGRkZGRkYsCisJCS5uYW1lCT0gIlBDSSBNZW0xIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwkgfSwgeworCQkuc3RhcnQJPSAweDE0MDAwMDAwLAorCQkuZW5kCT0gMHgxN0ZGRkZGRgorCQkubmFtZQk9ICJQQ0kgSS9PIiwKKwl9LCB7CisJCS5zdGFydAk9IDB4MUEwMDAwMDAsCisJCS5lbmQJPSAweDFCRkZGRkZGLAorCQkubmFtZQk9ICJQQ0kgTWVtMiIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSAweDFDMDAwMDAwLAorCQkuZW5kCT0gMHgxRkJGRkZGRiwKKwkJLm5hbWUJPSAiUENJIE1lbTMiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgwODAwMDAwMCwKKwkJLmVuZAk9IDB4MENGRkZGRkYKKwkJLm5hbWUJPSAiRmxhc2giLAorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxRkMwMDAwMCwKKwkJLmVuZAk9IDB4MUZGRkZGRkYKKwkJLm5hbWUJPSAiQm9vdCBST00iLAorCX0KIH07CiAjZW5kaWYKIApAQCAtMTA2LDcgKzE1NCw3IEBACiAJaXQ4MTcyX3Jlc291cmNlcy5yYW0uZW5kID0gbWVtc2l6ZTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBzaG9ydCBkc3I7CiAJY2hhciAqYXJncHRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovc2V0dXAuYyBiL2FyY2gvbWlwcy9qYXp6L3NldHVwLmMKaW5kZXggNDAzNmRjNC4uYzhkMGRmNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovc2V0dXAuYworKysgYi9hcmNoL21pcHMvamF6ei9zZXR1cC5jCkBAIC01Miw3ICs1Miw3IEBACiAJeyAiZG1hMiIsIDB4YzAsIDB4ZGYsIElPUkVTT1VSQ0VfQlVTWSB9LAogfTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvc2V0dXAuYwppbmRleCA5MzU5Y2M0Li4zMDhlNmNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvc2V0dXAuYworKysgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvc2V0dXAuYwpAQCAtODIsMTcgKzgyLDU0IEBACiAgICAgc3RydWN0IHJlc291cmNlIHNpbzA7CiAgICAgc3RydWN0IHJlc291cmNlIHNpbzE7CiB9IGptcjM5MjdfcmVzb3VyY2VzID0gewotICAgIHsgIlJBTTAiLCAgICAgICAgICAgMCwgICAgICAgICAweDAxRkZGRkZGLCAgSU9SRVNPVVJDRV9NRU0gfSwKLSAgICB7ICJSQU0xIiwgICAgICAgICAgMHgwMjAwMDAwMCwgMHgwM0ZGRkZGRiwgIElPUkVTT1VSQ0VfTUVNIH0sCi0gICAgeyAiUENJTUVNIiwgICAgICAgIDB4MDgwMDAwMDAsIDB4MDdGRkZGRkYsICBJT1JFU09VUkNFX01FTSB9LAotICAgIHsgIklPQiIsICAgICAgICAgICAweDEwMDAwMDAwLCAweDEzRkZGRkZGICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJJT0MiLCAgICAgICAgICAgMHgxNDAwMDAwMCwgMHgxNEZGRkZGRiAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAiUENJSU8iLCAgICAgICAgIDB4MTUwMDAwMDAsIDB4MTVGRkZGRkYgICAgICAgICAgICAgICAgICB9LAotICAgIHsgIkpNWTEzOTQiLCAgICAgICAweDFEMDAwMDAwLCAweDFEM0ZGRkZGICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJST00xIiwgICAgICAgICAgMHgxRTAwMDAwMCwgMHgxRTNGRkZGRiAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAiUk9NMCIsICAgICAgICAgIDB4MUZDMDAwMDAsIDB4MUZGRkZGRkYgICAgICAgICAgICAgICAgICB9LAotICAgIHsgIlNJTzAiLCAgICAgICAgICAweEZGRkVGMzAwLCAweEZGRkVGM0ZGICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJTSU8xIiwgICAgICAgICAgMHhGRkZFRjQwMCwgMHhGRkZFRjRGRiAgICAgICAgICAgICAgICAgIH0sCisJeworCQkuc3RhcnQJPSAwLAorCQkuZW5kCT0gMHgwMUZGRkZGRiwKKwkJLm5hbWUJPSAiUkFNMCIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSAweDAyMDAwMDAwLAorCQkuZW5kCT0gMHgwM0ZGRkZGRiwKKwkJLm5hbWUJPSAiUkFNMSIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSAweDA4MDAwMDAwLAorCQkuZW5kCT0gMHgwN0ZGRkZGRiwKKwkJLm5hbWUJPSAiUENJTUVNIiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IDB4MTAwMDAwMDAsCisJCS5lbmQJPSAweDEzRkZGRkZGLAorCQkubmFtZQk9ICJJT0IiCisJfSwgeworCQkuc3RhcnQJPSAweDE0MDAwMDAwLAorCQkuZW5kCT0gMHgxNEZGRkZGRiwKKwkJLm5hbWUJPSAiSU9DIgorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxNTAwMDAwMCwKKwkJLmVuZAk9IDB4MTVGRkZGRkYsCisJCS5uYW1lCT0gIlBDSUlPIgorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxRDAwMDAwMCwKKwkJLmVuZAk9IDB4MUQzRkZGRkYsCisJCS5uYW1lCT0gIkpNWTEzOTQiCisJfSwgeworCQkuc3RhcnQJPSAweDFFMDAwMDAwLAorCQkuZW5kCT0gMHgxRTNGRkZGRiwKKwkJLm5hbWUJPSAiUk9NMSIKKwl9LCB7CisJCS5zdGFydAk9IDB4MUZDMDAwMDAsCisJCS5lbmQJPSAweDFGRkZGRkZGLAorCQkubmFtZQk9ICJST00wIgorCX0sIHsKKwkJLnN0YXJ0CT0gMHhGRkZFRjMwMCwKKwkJLmVuZAk9IDB4RkZGRUYzRkYsCisJCS5uYW1lCT0gIlNJTzAiCisJfSwgeworCQkuc3RhcnQJPSAweEZGRkVGNDAwLAorCQkuZW5kCT0gMHhGRkZFRjRGRiwKKwkJLm5hbWUJPSAiU0lPMSIKKwl9LAogfTsKIAogLyogZG9uJ3QgZW5hYmxlIC0gc2VlIGVycmF0YSAqLwpAQCAtMjAxLDcgKzIzOCw3IEBACiBleHRlcm4gc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZTsKIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAljaGFyICphcmdwdHI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IDM0ZThhMjUuLjg4MWM0NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTMsNiArMTMsOCBAQAogCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1pcHNfa3N5bXMubyBtb2R1bGUubwogCitvYmotJChDT05GSUdfQVBNKQkJKz0gYXBtLm8KKwogb2JqLSQoQ09ORklHX0NQVV9SMzAwMCkJCSs9IHIyMzAwX2ZwdS5vIHIyMzAwX3N3aXRjaC5vCiBvYmotJChDT05GSUdfQ1BVX1RYMzlYWCkJKz0gcjIzMDBfZnB1Lm8gcjIzMDBfc3dpdGNoLm8KIG9iai0kKENPTkZJR19DUFVfVFg0OVhYKQkrPSByNGtfZnB1Lm8gcjRrX3N3aXRjaC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2FwbS5jIGIvYXJjaC9taXBzL2tlcm5lbC9hcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWY0NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hcG0uYwpAQCAtMCwwICsxLDYwNSBAQAorLyoKKyAqIGJpb3MtbGVzcyBBUE0gZHJpdmVyIGZvciBNSVBTIExpbnV4CisgKiAgSmFtZXkgSGlja3MgPGphbWV5QGNybC5kZWMuY29tPgorICogIGFkYXB0ZWQgZnJvbSB0aGUgQVBNIEJJT1MgZHJpdmVyIGZvciBMaW51eCBieSBTdGVwaGVuIFJvdGh3ZWxsIChzZnJAbGludXhjYXJlLmNvbSkKKyAqCisgKiBBUE0gMS4yIFJlZmVyZW5jZToKKyAqICAgSW50ZWwgQ29ycG9yYXRpb24sIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudAorICogICAoQVBNKSBCSU9TIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uLCBSZXZpc2lvbiAxLjIsIEZlYnJ1YXJ5IDE5OTYuCisgKgorICogW1RoaXMgZG9jdW1lbnQgaXMgYXZhaWxhYmxlIGZyb20gTWljcm9zb2Z0IGF0OgorICogICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2h3ZGV2L2J1c2Jpb3MvYW1wXzEyLmh0bV0KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworI2luY2x1ZGUgPGFzbS9hcG0uaD4gLyogYXBtX3Bvd2VyX2luZm8gKi8KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qCisgKiBUaGUgYXBtX2Jpb3MgZGV2aWNlIGlzIG9uZSBvZiB0aGUgbWlzYyBjaGFyIGRldmljZXMuCisgKiBUaGlzIGlzIGl0cyBtaW5vciBudW1iZXIuCisgKi8KKyNkZWZpbmUgQVBNX01JTk9SX0RFVgkxMzQKKworLyoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL0NvbmZpZy5oZWxwIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICoKKyAqIFZhcmlvdXMgb3B0aW9ucyBjYW4gYmUgY2hhbmdlZCBhdCBib290IHRpbWUgYXMgZm9sbG93czoKKyAqIChXZSBhbGxvdyB1bmRlcnNjb3JlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBtb2R1bGVzIGNvZGUpCisgKglhcG09b24vb2ZmCQkJZW5hYmxlL2Rpc2FibGUgQVBNCisgKi8KKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBzdG9yZWQKKyAqLworI2RlZmluZSBBUE1fTUFYX0VWRU5UUwkJMTYKKworc3RydWN0IGFwbV9xdWV1ZSB7CisJdW5zaWduZWQgaW50CQlldmVudF9oZWFkOworCXVuc2lnbmVkIGludAkJZXZlbnRfdGFpbDsKKwlhcG1fZXZlbnRfdAkJZXZlbnRzW0FQTV9NQVhfRVZFTlRTXTsKK307CisKKy8qCisgKiBUaGUgcGVyLWZpbGUgQVBNIGRhdGEKKyAqLworc3RydWN0IGFwbV91c2VyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisKKwl1bnNpZ25lZCBpbnQJCXN1c2VyOiAxOworCXVuc2lnbmVkIGludAkJd3JpdGVyOiAxOworCXVuc2lnbmVkIGludAkJcmVhZGVyOiAxOworCisJaW50CQkJc3VzcGVuZF9yZXN1bHQ7CisJdW5zaWduZWQgaW50CQlzdXNwZW5kX3N0YXRlOworI2RlZmluZSBTVVNQRU5EX05PTkUJMAkJLyogbm8gc3VzcGVuZCBwZW5kaW5nICovCisjZGVmaW5lIFNVU1BFTkRfUEVORElORwkxCQkvKiBzdXNwZW5kIHBlbmRpbmcgcmVhZCAqLworI2RlZmluZSBTVVNQRU5EX1JFQUQJMgkJLyogc3VzcGVuZCByZWFkLCBwZW5kaW5nIGFjayAqLworI2RlZmluZSBTVVNQRU5EX0FDS0VECTMJCS8qIHN1c3BlbmQgYWNrZWQgKi8KKyNkZWZpbmUgU1VTUEVORF9ET05FCTQJCS8qIHN1c3BlbmQgY29tcGxldGVkICovCisKKwlzdHJ1Y3QgYXBtX3F1ZXVlCXF1ZXVlOworfTsKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlcworICovCitzdGF0aWMgaW50IHN1c3BlbmRzX3BlbmRpbmc7CitzdGF0aWMgaW50IGFwbV9kaXNhYmxlZDsKK3N0YXRpYyBpbnQgbWlwc19hcG1fYWN0aXZlOworCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3dhaXRxdWV1ZSk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlKTsKKworLyoKKyAqIFRoaXMgaXMgYSBsaXN0IG9mIGV2ZXJ5b25lIHdobyBoYXMgb3BlbmVkIC9kZXYvYXBtX2Jpb3MKKyAqLworc3RhdGljIERFQ0xBUkVfUldTRU0odXNlcl9saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRChhcG1fdXNlcl9saXN0KTsKKworLyoKKyAqIGthcG1kIGluZm8uICBrYXBtZCBwcm92aWRlcyB1cyBhIHByb2Nlc3MgY29udGV4dCB0byBoYW5kbGUKKyAqICJBUE0iIGV2ZW50cyB3aXRoaW4gLSBzcGVjaWZpY2FsbHkgbmVjZXNzYXJ5IGlmIHdlJ3JlIGdvaW5nCisgKiB0byBiZSBzdXNwZW5kaW5nIHRoZSBzeXN0ZW0uCisgKi8KK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChrYXBtZF93YWl0KTsKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oa2FwbWRfZXhpdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGthcG1kX3F1ZXVlX2xvY2spOworc3RhdGljIHN0cnVjdCBhcG1fcXVldWUga2FwbWRfcXVldWU7CisKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcnNpb25bXSA9ICIxLjEzIjsJLyogbm8gc3BhY2VzICovCisKKworCisvKgorICogQ29tcGF0aWJpbGl0eSBjcnVmdCB1bnRpbCB0aGUgSVBBUSBwZW9wbGUgbW92ZSBvdmVyIHRvIHRoZSBuZXcKKyAqIGludGVyZmFjZS4KKyAqLworc3RhdGljIHZvaWQgX19hcG1fZ2V0X3Bvd2VyX3N0YXR1cyhzdHJ1Y3QgYXBtX3Bvd2VyX2luZm8gKmluZm8pCit7Cit9CisKKy8qCisgKiBUaGlzIGFsbG93cyBtYWNoaW5lcyB0byBwcm92aWRlIHRoZWlyIG93biAiYXBtIGdldCBwb3dlciBzdGF0dXMiIGZ1bmN0aW9uLgorICovCit2b2lkICgqYXBtX2dldF9wb3dlcl9zdGF0dXMpKHN0cnVjdCBhcG1fcG93ZXJfaW5mbyAqKSA9IF9fYXBtX2dldF9wb3dlcl9zdGF0dXM7CitFWFBPUlRfU1lNQk9MKGFwbV9nZXRfcG93ZXJfc3RhdHVzKTsKKworCisvKgorICogQVBNIGV2ZW50IHF1ZXVlIG1hbmFnZW1lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2VtcHR5KHN0cnVjdCBhcG1fcXVldWUgKnEpCit7CisJcmV0dXJuIHEtPmV2ZW50X2hlYWQgPT0gcS0+ZXZlbnRfdGFpbDsKK30KKworc3RhdGljIGlubGluZSBhcG1fZXZlbnRfdCBxdWV1ZV9nZXRfZXZlbnQoc3RydWN0IGFwbV9xdWV1ZSAqcSkKK3sKKwlxLT5ldmVudF90YWlsID0gKHEtPmV2ZW50X3RhaWwgKyAxKSAlIEFQTV9NQVhfRVZFTlRTOworCXJldHVybiBxLT5ldmVudHNbcS0+ZXZlbnRfdGFpbF07Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX2FkZF9ldmVudChzdHJ1Y3QgYXBtX3F1ZXVlICpxLCBhcG1fZXZlbnRfdCBldmVudCkKK3sKKwlxLT5ldmVudF9oZWFkID0gKHEtPmV2ZW50X2hlYWQgKyAxKSAlIEFQTV9NQVhfRVZFTlRTOworCWlmIChxLT5ldmVudF9oZWFkID09IHEtPmV2ZW50X3RhaWwpIHsKKwkJc3RhdGljIGludCBub3RpZmllZDsKKworCQlpZiAobm90aWZpZWQrKyA9PSAwKQorCQkgICAgcHJpbnRrKEtFUk5fRVJSICJhcG06IGFuIGV2ZW50IHF1ZXVlIG92ZXJmbG93ZWRcbiIpOworCQlxLT5ldmVudF90YWlsID0gKHEtPmV2ZW50X3RhaWwgKyAxKSAlIEFQTV9NQVhfRVZFTlRTOworCX0KKwlxLT5ldmVudHNbcS0+ZXZlbnRfaGVhZF0gPSBldmVudDsKK30KKworc3RhdGljIHZvaWQgcXVldWVfZXZlbnRfb25lX3VzZXIoc3RydWN0IGFwbV91c2VyICphcywgYXBtX2V2ZW50X3QgZXZlbnQpCit7CisJaWYgKGFzLT5zdXNlciAmJiBhcy0+d3JpdGVyKSB7CisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSBBUE1fU1lTX1NVU1BFTkQ6CisJCWNhc2UgQVBNX1VTRVJfU1VTUEVORDoKKwkJCS8qCisJCQkgKiBJZiB0aGlzIHVzZXIgYWxyZWFkeSBoYXMgYSBzdXNwZW5kIHBlbmRpbmcsCisJCQkgKiBkb24ndCBxdWV1ZSBhbm90aGVyIG9uZS4KKwkJCSAqLworCQkJaWYgKGFzLT5zdXNwZW5kX3N0YXRlICE9IFNVU1BFTkRfTk9ORSkKKwkJCQlyZXR1cm47CisKKwkJCWFzLT5zdXNwZW5kX3N0YXRlID0gU1VTUEVORF9QRU5ESU5HOworCQkJc3VzcGVuZHNfcGVuZGluZysrOworCQkJYnJlYWs7CisJCX0KKwl9CisJcXVldWVfYWRkX2V2ZW50KCZhcy0+cXVldWUsIGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfZXZlbnQoYXBtX2V2ZW50X3QgZXZlbnQsIHN0cnVjdCBhcG1fdXNlciAqc2VuZGVyKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXM7CisKKwlkb3duX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmYXBtX3VzZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoYXMgIT0gc2VuZGVyICYmIGFzLT5yZWFkZXIpCisJCQlxdWV1ZV9ldmVudF9vbmVfdXNlcihhcywgZXZlbnQpOworCX0KKwl1cF9yZWFkKCZ1c2VyX2xpc3RfbG9jayk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhcG1fd2FpdHF1ZXVlKTsKK30KKworc3RhdGljIHZvaWQgYXBtX3N1c3BlbmQodm9pZCkKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzOworCWludCBlcnIgPSBwbV9zdXNwZW5kKFBNX1NVU1BFTkRfTUVNKTsKKworCS8qCisJICogQW55b25lIG9uIHRoZSBBUE0gcXVldWVzIHdpbGwgdGhpbmsgd2UncmUgc3RpbGwgc3VzcGVuZGVkLgorCSAqIFNlbmQgYSBtZXNzYWdlIHNvIGV2ZXJ5b25lIGtub3dzIHdlJ3JlIG5vdyBhd2FrZSBhZ2Fpbi4KKwkgKi8KKwlxdWV1ZV9ldmVudChBUE1fTk9STUFMX1JFU1VNRSwgTlVMTCk7CisKKwkvKgorCSAqIEZpbmFsbHksIHdha2UgdXAgYW55b25lIHdobyBpcyBzbGVlcGluZyBvbiB0aGUgc3VzcGVuZC4KKwkgKi8KKwlkb3duX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmYXBtX3VzZXJfbGlzdCwgbGlzdCkgeworCQlhcy0+c3VzcGVuZF9yZXN1bHQgPSBlcnI7CisJCWFzLT5zdXNwZW5kX3N0YXRlID0gU1VTUEVORF9ET05FOworCX0KKwl1cF9yZWFkKCZ1c2VyX2xpc3RfbG9jayk7CisKKwl3YWtlX3VwKCZhcG1fc3VzcGVuZF93YWl0cXVldWUpOworfQorCitzdGF0aWMgc3NpemVfdCBhcG1fcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXMgPSBmcC0+cHJpdmF0ZV9kYXRhOworCWFwbV9ldmVudF90IGV2ZW50OworCWludCBpID0gY291bnQsIHJldCA9IDA7CisKKwlpZiAoY291bnQgPCBzaXplb2YoYXBtX2V2ZW50X3QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChxdWV1ZV9lbXB0eSgmYXMtPnF1ZXVlKSAmJiBmcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCXJldHVybiAtRUFHQUlOOworCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFwbV93YWl0cXVldWUsICFxdWV1ZV9lbXB0eSgmYXMtPnF1ZXVlKSk7CisKKwl3aGlsZSAoKGkgPj0gc2l6ZW9mKGV2ZW50KSkgJiYgIXF1ZXVlX2VtcHR5KCZhcy0+cXVldWUpKSB7CisJCWV2ZW50ID0gcXVldWVfZ2V0X2V2ZW50KCZhcy0+cXVldWUpOworCisJCXJldCA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmZXZlbnQsIHNpemVvZihldmVudCkpKQorCQkJYnJlYWs7CisKKwkJaWYgKGV2ZW50ID09IEFQTV9TWVNfU1VTUEVORCB8fCBldmVudCA9PSBBUE1fVVNFUl9TVVNQRU5EKQorCQkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX1JFQUQ7CisKKwkJYnVmICs9IHNpemVvZihldmVudCk7CisJCWkgLT0gc2l6ZW9mKGV2ZW50KTsKKwl9CisKKwlpZiAoaSA8IGNvdW50KQorCQlyZXQgPSBjb3VudCAtIGk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFwbV9wb2xsKHN0cnVjdCBmaWxlICpmcCwgcG9sbF90YWJsZSAqIHdhaXQpCit7CisJc3RydWN0IGFwbV91c2VyICphcyA9IGZwLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZnAsICZhcG1fd2FpdHF1ZXVlLCB3YWl0KTsKKwlyZXR1cm4gcXVldWVfZW1wdHkoJmFzLT5xdWV1ZSkgPyAwIDogUE9MTElOIHwgUE9MTFJETk9STTsKK30KKworLyoKKyAqIGFwbV9pb2N0bCAtIGhhbmRsZSBBUE0gaW9jdGwKKyAqCisgKiBBUE1fSU9DX1NVU1BFTkQKKyAqICAgVGhpcyBJT0NUTCBpcyBvdmVybG9hZGVkLCBhbmQgcGVyZm9ybXMgdHdvIGZ1bmN0aW9ucy4gIEl0IGlzIHVzZWQgdG86CisgKiAgICAgLSBpbml0aWF0ZSBhIHN1c3BlbmQKKyAqICAgICAtIGFja25vd2xlZGdlIGEgc3VzcGVuZCByZWFkIGZyb20gL2Rldi9hcG1fYmlvcy4KKyAqICAgT25seSB3aGVuIGV2ZXJ5b25lIHdobyBoYXMgb3BlbmVkIC9kZXYvYXBtX2Jpb3Mgd2l0aCB3cml0ZSBwZXJtaXNzaW9uCisgKiAgIGhhcyBhY2tub3dsZWRnZSBkb2VzIHRoZSBhY3R1YWwgc3VzcGVuZCBoYXBwZW4uCisgKi8KK3N0YXRpYyBpbnQKK2FwbV9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVfaW50IGNtZCwgdV9sb25nIGFyZykKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoIWFzLT5zdXNlciB8fCAhYXMtPndyaXRlcikKKwkJcmV0dXJuIC1FUEVSTTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBBUE1fSU9DX1NVU1BFTkQ6CisJCWFzLT5zdXNwZW5kX3Jlc3VsdCA9IC1FSU5UUjsKKworCQlpZiAoYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9SRUFEKSB7CisJCQkvKgorCQkJICogSWYgd2UgcmVhZCBhIHN1c3BlbmQgY29tbWFuZCBmcm9tIC9kZXYvYXBtX2Jpb3MsCisJCQkgKiB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIEFQTV9JT0NfU1VTUEVORCBpb2N0bCBpcworCQkJICogaW50ZXJwcmV0ZWQgYXMgYW4gYWNrbm93bGVkZ2UuCisJCQkgKi8KKwkJCWFzLT5zdXNwZW5kX3N0YXRlID0gU1VTUEVORF9BQ0tFRDsKKwkJCXN1c3BlbmRzX3BlbmRpbmctLTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UgaXQgaXMgYSByZXF1ZXN0IHRvIHN1c3BlbmQgdGhlIHN5c3RlbS4KKwkJCSAqIFF1ZXVlIGFuIGV2ZW50IGZvciBhbGwgcmVhZGVycywgYW5kIGV4cGVjdCBhbgorCQkJICogYWNrbm93bGVkZ2UgZnJvbSBhbGwgd3JpdGVycyB3aG8gaGF2ZW4ndCBhbHJlYWR5CisJCQkgKiBhY2tub3dsZWRnZWQuCisJCQkgKi8KKwkJCXF1ZXVlX2V2ZW50KEFQTV9VU0VSX1NVU1BFTkQsIGFzKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBubyBmdXJ0aGVyIGFja25vd2xlZGdlcyByZXF1aXJlZCwgc3VzcGVuZAorCQkgKiB0aGUgc3lzdGVtLgorCQkgKi8KKwkJaWYgKHN1c3BlbmRzX3BlbmRpbmcgPT0gMCkKKwkJCWFwbV9zdXNwZW5kKCk7CisKKwkJLyoKKwkJICogV2FpdCBmb3IgdGhlIHN1c3BlbmQvcmVzdW1lIHRvIGNvbXBsZXRlLiAgSWYgdGhlcmUgYXJlCisJCSAqIHBlbmRpbmcgYWNrbm93bGVkZ2VzLCB3ZSB3YWl0IGhlcmUgZm9yIHRoZW0uCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBQTSBzdWJzeXN0ZW0gZG9lcworCQkgKiBub3Qga2ljayB1cyBvdXQgb2YgdGhlIHdhaXQgd2hlbiBpdCBzdXNwZW5kcyB0aGUgdGhyZWFkcy4KKwkJICovCisJCWZsYWdzID0gY3VycmVudC0+ZmxhZ3M7CisJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCisJCS8qCisJCSAqIE5vdGU6IGRvIG5vdCBhbGxvdyBhIHRocmVhZCB3aGljaCBpcyBhY2tpbmcgdGhlIHN1c3BlbmQKKwkJICogdG8gZXNjYXBlIHVudGlsIHRoZSByZXN1bWUgaXMgY29tcGxldGUuCisJCSAqLworCQlpZiAoYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9BQ0tFRCkKKwkJCXdhaXRfZXZlbnQoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlLAorCQkJCQkgYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9ET05FKTsKKwkJZWxzZQorCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFwbV9zdXNwZW5kX3dhaXRxdWV1ZSwKKwkJCQkJIGFzLT5zdXNwZW5kX3N0YXRlID09IFNVU1BFTkRfRE9ORSk7CisKKwkJY3VycmVudC0+ZmxhZ3MgPSBmbGFnczsKKwkJZXJyID0gYXMtPnN1c3BlbmRfcmVzdWx0OworCQlhcy0+c3VzcGVuZF9zdGF0ZSA9IFNVU1BFTkRfTk9ORTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXMgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCWRvd25fd3JpdGUoJnVzZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbCgmYXMtPmxpc3QpOworCXVwX3dyaXRlKCZ1c2VyX2xpc3RfbG9jayk7CisKKwkvKgorCSAqIFdlIGFyZSBub3cgdW5ob29rZWQgZnJvbSB0aGUgY2hhaW4uICBBcyBmYXIgYXMgbmV3CisJICogZXZlbnRzIGFyZSBjb25jZXJuZWQsIHdlIG5vIGxvbmdlciBleGlzdC4gIEhvd2V2ZXIsIHdlCisJICogbmVlZCB0byBiYWxhbmNlIHN1c3BlbmRzX3BlbmRpbmcsIHdoaWNoIG1lYW5zIHRoZQorCSAqIHBvc3NpYmlsaXR5IG9mIHNsZWVwaW5nLgorCSAqLworCWlmIChhcy0+c3VzcGVuZF9zdGF0ZSAhPSBTVVNQRU5EX05PTkUpIHsKKwkJc3VzcGVuZHNfcGVuZGluZyAtPSAxOworCQlpZiAoc3VzcGVuZHNfcGVuZGluZyA9PSAwKQorCQkJYXBtX3N1c3BlbmQoKTsKKwl9CisKKwlrZnJlZShhcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBtX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzOworCisJYXMgPSAoc3RydWN0IGFwbV91c2VyICopa3phbGxvYyhzaXplb2YoKmFzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFzKSB7CisJCS8qCisJCSAqIFhYWCAtIHRoaXMgaXMgYSB0aW55IGJpdCBicm9rZW4sIHdoZW4gd2UgY29uc2lkZXIgQlNECisJCSAqIHByb2Nlc3MgYWNjb3VudGluZy4gSWYgdGhlIGRldmljZSBpcyBvcGVuZWQgYnkgcm9vdCwgd2UKKwkJICogaW5zdGFudGx5IGZsYWcgdGhhdCB3ZSB1c2VkIHN1cGVydXNlciBwcml2cy4gV2hvIGtub3dzLAorCQkgKiB3ZSBtaWdodCBjbG9zZSB0aGUgZGV2aWNlIGltbWVkaWF0ZWx5IHdpdGhvdXQgZG9pbmcgYQorCQkgKiBwcml2aWxlZ2VkIG9wZXJhdGlvbiAtLSBjZXZhbnMKKwkJICovCisJCWFzLT5zdXNlciA9IGNhcGFibGUoQ0FQX1NZU19BRE1JTik7CisJCWFzLT53cml0ZXIgPSAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpID09IEZNT0RFX1dSSVRFOworCQlhcy0+cmVhZGVyID0gKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID09IEZNT0RFX1JFQUQ7CisKKwkJZG93bl93cml0ZSgmdXNlcl9saXN0X2xvY2spOworCQlsaXN0X2FkZCgmYXMtPmxpc3QsICZhcG1fdXNlcl9saXN0KTsKKwkJdXBfd3JpdGUoJnVzZXJfbGlzdF9sb2NrKTsKKworCQlmaWxwLT5wcml2YXRlX2RhdGEgPSBhczsKKwl9CisKKwlyZXR1cm4gYXMgPyAwIDogLUVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXBtX2Jpb3NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gYXBtX3JlYWQsCisJLnBvbGwJCT0gYXBtX3BvbGwsCisJLmlvY3RsCQk9IGFwbV9pb2N0bCwKKwkub3BlbgkJPSBhcG1fb3BlbiwKKwkucmVsZWFzZQk9IGFwbV9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGFwbV9kZXZpY2UgPSB7CisJLm1pbm9yCQk9IEFQTV9NSU5PUl9ERVYsCisJLm5hbWUJCT0gImFwbV9iaW9zIiwKKwkuZm9wcwkJPSAmYXBtX2Jpb3NfZm9wcworfTsKKworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKy8qCisgKiBBcmd1bWVudHMsIHdpdGggc3ltYm9scyBmcm9tIGxpbnV4L2FwbV9iaW9zLmguCisgKgorICogICAwKSBMaW51eCBkcml2ZXIgdmVyc2lvbiAodGhpcyB3aWxsIGNoYW5nZSBpZiBmb3JtYXQgY2hhbmdlcykKKyAqICAgMSkgQVBNIEJJT1MgVmVyc2lvbi4gIFVzdWFsbHkgMS4wLCAxLjEgb3IgMS4yLgorICogICAyKSBBUE0gZmxhZ3MgZnJvbSBBUE0gSW5zdGFsbGF0aW9uIENoZWNrICgweDAwKToKKyAqCWJpdCAwOiBBUE1fMTZfQklUX1NVUFBPUlQKKyAqCWJpdCAxOiBBUE1fMzJfQklUX1NVUFBPUlQKKyAqCWJpdCAyOiBBUE1fSURMRV9TTE9XU19DTE9DSworICoJYml0IDM6IEFQTV9CSU9TX0RJU0FCTEVECisgKgliaXQgNDogQVBNX0JJT1NfRElTRU5HQUdFRAorICogICAzKSBBQyBsaW5lIHN0YXR1cworICoJMHgwMDogT2ZmLWxpbmUKKyAqCTB4MDE6IE9uLWxpbmUKKyAqCTB4MDI6IE9uIGJhY2t1cCBwb3dlciAoQklPUyA+PSAxLjEgb25seSkKKyAqCTB4ZmY6IFVua25vd24KKyAqICAgNCkgQmF0dGVyeSBzdGF0dXMKKyAqCTB4MDA6IEhpZ2gKKyAqCTB4MDE6IExvdworICoJMHgwMjogQ3JpdGljYWwKKyAqCTB4MDM6IENoYXJnaW5nCisgKgkweDA0OiBTZWxlY3RlZCBiYXR0ZXJ5IG5vdCBwcmVzZW50IChCSU9TID49IDEuMiBvbmx5KQorICoJMHhmZjogVW5rbm93bgorICogICA1KSBCYXR0ZXJ5IGZsYWcKKyAqCWJpdCAwOiBIaWdoCisgKgliaXQgMTogTG93CisgKgliaXQgMjogQ3JpdGljYWwKKyAqCWJpdCAzOiBDaGFyZ2luZworICoJYml0IDc6IE5vIHN5c3RlbSBiYXR0ZXJ5CisgKgkweGZmOiBVbmtub3duCisgKiAgIDYpIFJlbWFpbmluZyBiYXR0ZXJ5IGxpZmUgKHBlcmNlbnRhZ2Ugb2YgY2hhcmdlKToKKyAqCTAtMTAwOiB2YWxpZAorICoJLTE6IFVua25vd24KKyAqICAgNykgUmVtYWluaW5nIGJhdHRlcnkgbGlmZSAodGltZSB1bml0cyk6CisgKglOdW1iZXIgb2YgcmVtYWluaW5nIG1pbnV0ZXMgb3Igc2Vjb25kcworICoJLTE6IFVua25vd24KKyAqICAgOCkgbWluID0gbWludXRlczsgc2VjID0gc2Vjb25kcworICovCitzdGF0aWMgaW50IGFwbV9nZXRfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgYXBtX3Bvd2VyX2luZm8gaW5mbzsKKwljaGFyICp1bml0czsKKwlpbnQgcmV0OworCisJaW5mby5hY19saW5lX3N0YXR1cyA9IDB4ZmY7CisJaW5mby5iYXR0ZXJ5X3N0YXR1cyA9IDB4ZmY7CisJaW5mby5iYXR0ZXJ5X2ZsYWcgICA9IDB4ZmY7CisJaW5mby5iYXR0ZXJ5X2xpZmUgICA9IC0xOworCWluZm8udGltZQkgICAgPSAtMTsKKwlpbmZvLnVuaXRzCSAgICA9IC0xOworCisJaWYgKGFwbV9nZXRfcG93ZXJfc3RhdHVzKQorCQlhcG1fZ2V0X3Bvd2VyX3N0YXR1cygmaW5mbyk7CisKKwlzd2l0Y2ggKGluZm8udW5pdHMpIHsKKwlkZWZhdWx0Ogl1bml0cyA9ICI/IjsJYnJlYWs7CisJY2FzZSAwOiAJdW5pdHMgPSAibWluIjsJYnJlYWs7CisJY2FzZSAxOiAJdW5pdHMgPSAic2VjIjsJYnJlYWs7CisJfQorCisJcmV0ID0gc3ByaW50ZihidWYsICIlcyAxLjIgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4ICVkJSUgJWQgJXNcbiIsCisJCSAgICAgZHJpdmVyX3ZlcnNpb24sIEFQTV8zMl9CSVRfU1VQUE9SVCwKKwkJICAgICBpbmZvLmFjX2xpbmVfc3RhdHVzLCBpbmZvLmJhdHRlcnlfc3RhdHVzLAorCQkgICAgIGluZm8uYmF0dGVyeV9mbGFnLCBpbmZvLmJhdHRlcnlfbGlmZSwKKwkJICAgICBpbmZvLnRpbWUsIHVuaXRzKTsKKworIAlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQga2FwbWQodm9pZCAqYXJnKQoreworCWRhZW1vbml6ZSgia2FwbWQiKTsKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKworCWRvIHsKKwkJYXBtX2V2ZW50X3QgZXZlbnQ7CisKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGthcG1kX3dhaXQsCisJCQkJIXF1ZXVlX2VtcHR5KCZrYXBtZF9xdWV1ZSkgfHwgIW1pcHNfYXBtX2FjdGl2ZSk7CisKKwkJaWYgKCFtaXBzX2FwbV9hY3RpdmUpCisJCQlicmVhazsKKworCQlzcGluX2xvY2tfaXJxKCZrYXBtZF9xdWV1ZV9sb2NrKTsKKwkJZXZlbnQgPSAwOworCQlpZiAoIXF1ZXVlX2VtcHR5KCZrYXBtZF9xdWV1ZSkpCisJCQlldmVudCA9IHF1ZXVlX2dldF9ldmVudCgma2FwbWRfcXVldWUpOworCQlzcGluX3VubG9ja19pcnEoJmthcG1kX3F1ZXVlX2xvY2spOworCisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisKKwkJY2FzZSBBUE1fTE9XX0JBVFRFUlk6CisJCWNhc2UgQVBNX1BPV0VSX1NUQVRVU19DSEFOR0U6CisJCQlxdWV1ZV9ldmVudChldmVudCwgTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlIEFQTV9VU0VSX1NVU1BFTkQ6CisJCWNhc2UgQVBNX1NZU19TVVNQRU5EOgorCQkJcXVldWVfZXZlbnQoZXZlbnQsIE5VTEwpOworCQkJaWYgKHN1c3BlbmRzX3BlbmRpbmcgPT0gMCkKKwkJCQlhcG1fc3VzcGVuZCgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBBUE1fQ1JJVElDQUxfU1VTUEVORDoKKwkJCWFwbV9zdXNwZW5kKCk7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJY29tcGxldGVfYW5kX2V4aXQoJmthcG1kX2V4aXQsIDApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhcG1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoYXBtX2Rpc2FibGVkKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiYXBtOiBkaXNhYmxlZCBvbiB1c2VyIHJlcXVlc3QuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWlwc19hcG1fYWN0aXZlID0gMTsKKworCXJldCA9IGtlcm5lbF90aHJlYWQoa2FwbWQsIE5VTEwsIENMT05FX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWlwc19hcG1fYWN0aXZlID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWNyZWF0ZV9wcm9jX2luZm9fZW50cnkoImFwbSIsIDAsIE5VTEwsIGFwbV9nZXRfaW5mbyk7CisjZW5kaWYKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmFwbV9kZXZpY2UpOworCWlmIChyZXQgIT0gMCkgeworCQlyZW1vdmVfcHJvY19lbnRyeSgiYXBtIiwgTlVMTCk7CisKKwkJbWlwc19hcG1fYWN0aXZlID0gMDsKKwkJd2FrZV91cCgma2FwbWRfd2FpdCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmthcG1kX2V4aXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcG1fZXhpdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3RlcigmYXBtX2RldmljZSk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImFwbSIsIE5VTEwpOworCisJbWlwc19hcG1fYWN0aXZlID0gMDsKKwl3YWtlX3VwKCZrYXBtZF93YWl0KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZrYXBtZF9leGl0KTsKK30KKworbW9kdWxlX2luaXQoYXBtX2luaXQpOworbW9kdWxlX2V4aXQoYXBtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIFJvdGh3ZWxsIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2lmbmRlZiBNT0RVTEUKK3N0YXRpYyBpbnQgX19pbml0IGFwbV9zZXR1cChjaGFyICpzdHIpCit7CisJd2hpbGUgKChzdHIgIT0gTlVMTCkgJiYgKCpzdHIgIT0gJ1wwJykpIHsKKwkJaWYgKHN0cm5jbXAoc3RyLCAib2ZmIiwgMykgPT0gMCkKKwkJCWFwbV9kaXNhYmxlZCA9IDE7CisJCWlmIChzdHJuY21wKHN0ciwgIm9uIiwgMikgPT0gMCkKKwkJCWFwbV9kaXNhYmxlZCA9IDA7CisJCXN0ciA9IHN0cmNocihzdHIsICcsJyk7CisJCWlmIChzdHIgIT0gTlVMTCkKKwkJCXN0ciArPSBzdHJzcG4oc3RyLCAiLCBcdCIpOworCX0KKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiYXBtPSIsIGFwbV9zZXR1cCk7CisjZW5kaWYKKworLyoqCisgKiBhcG1fcXVldWVfZXZlbnQgLSBxdWV1ZSBhbiBBUE0gZXZlbnQgZm9yIGthcG1kCisgKiBAZXZlbnQ6IEFQTSBldmVudAorICoKKyAqIFF1ZXVlIGFuIEFQTSBldmVudCBmb3Iga2FwbWQgdG8gcHJvY2VzcyBhbmQgdWx0aW1hdGVseSB0YWtlIHRoZQorICogYXBwcm9wcmlhdGUgYWN0aW9uLiAgT25seSBhIHN1YnNldCBvZiBldmVudHMgYXJlIGhhbmRsZWQ6CisgKiAgICVBUE1fTE9XX0JBVFRFUlkKKyAqICAgJUFQTV9QT1dFUl9TVEFUVVNfQ0hBTkdFCisgKiAgICVBUE1fVVNFUl9TVVNQRU5ECisgKiAgICVBUE1fU1lTX1NVU1BFTkQKKyAqICAgJUFQTV9DUklUSUNBTF9TVVNQRU5ECisgKi8KK3ZvaWQgYXBtX3F1ZXVlX2V2ZW50KGFwbV9ldmVudF90IGV2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgma2FwbWRfcXVldWVfbG9jaywgZmxhZ3MpOworCXF1ZXVlX2FkZF9ldmVudCgma2FwbWRfcXVldWUsIGV2ZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYXBtZF9xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmthcG1kX3dhaXQpOworfQorRVhQT1JUX1NZTUJPTChhcG1fcXVldWVfZXZlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDBmYWNmYWYuLmYxYmI2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE0MSw3MiArMTQxLDcyIEBACiB2b2lkIG91dHB1dF90aHJlYWRfZnB1X2RlZmluZXModm9pZCkKIHsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjAgICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzBdKTsKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmZwclswXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxICAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMV0pOwogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRlBSMiAgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mcHJbMl0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzJdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjMgICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzNdKTsKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmZwclszXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFI0ICAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwcls0XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbNF0pOwogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRlBSNSAgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mcHJbNV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzVdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjYgICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzZdKTsKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmZwcls2XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFI3ICAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwcls3XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbN10pOwogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRlBSOCAgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mcHJbOF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzhdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjkgICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzldKTsKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmZwcls5XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxMCAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxMF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzEwXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxMSAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxMV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzExXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxMiAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxMl0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzEyXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxMyAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxM10pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzEzXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxNCAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxNF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzE0XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxNSAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxNV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzE1XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxNiAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxNl0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzE2XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxNyAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxN10pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzE3XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxOCAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxOF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzE4XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIxOSAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsxOV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzE5XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyMCAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyMF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzIwXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyMSAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyMV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzIxXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyMiAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyMl0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzIyXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyMyAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyM10pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzIzXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyNCAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyNF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzI0XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyNSAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyNV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzI1XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyNiAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyNl0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzI2XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyNyAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyN10pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzI3XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyOCAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyOF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzI4XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyOSAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyOV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzI5XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIzMCAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclszMF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzMwXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIzMSAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclszMV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzMxXSk7CiAKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZDUjMxICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZmNyMzEpOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZmNyMzEpOwogCWxpbmVmZWVkOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2JyYW5jaC5jIGIvYXJjaC9taXBzL2tlcm5lbC9icmFuY2guYwppbmRleCBiNjIzMmQ5Li43NmZkM2YyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2JyYW5jaC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYnJhbmNoLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlpZiAoaXNfZnB1X293bmVyKCkpCiAJCQlhc20gdm9sYXRpbGUoImNmYzFcdCUwLCQzMSIgOiAiPXIiIChmY3IzMSkpOwogCQllbHNlCi0JCQlmY3IzMSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mY3IzMTsKKwkJCWZjcjMxID0gY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAogCQliaXQgPSAoaW5zbi5pX2Zvcm1hdC5ydCA+PiAyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwppbmRleCAyMTI1YmE1Zi4uMGNiOGVkNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwpAQCAtMzAyLDExICszMDIsMTEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGljMV9pb19yZXNvdXJjZSA9IHsKLQkicGljMSIsIDB4MjAsIDB4M2YsIElPUkVTT1VSQ0VfQlVTWQorCS5uYW1lID0gInBpYzEiLCAuc3RhcnQgPSAweDIwLCAuZW5kID0gMHgzZiwgLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBpYzJfaW9fcmVzb3VyY2UgPSB7Ci0JInBpYzIiLCAweGEwLCAweGJmLCBJT1JFU09VUkNFX0JVU1kKKwkubmFtZSA9ICJwaWMyIiwgLnN0YXJ0ID0gMHhhMCwgLmVuZCA9IDB4YmYsIC5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWQogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcml4c2lnLmMKaW5kZXggODE1MGYwNy4uYTliZjZjYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcml4c2lnLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcml4c2lnLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCiAJCWZvcihpID0gMDsgaSA8IDMyOyBpKyspCiAJCQllcnJvciB8PSBfX2dldF91c2VyKGZyZWdzW2ldLCAmY29udGV4dC0+ZnByZWdzW2ldKTsKLQkJZXJyb3IgfD0gX19nZXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZmNyMzEsICZjb250ZXh0LT5mcGNzcik7CisJCWVycm9yIHw9IF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSwgJmNvbnRleHQtPmZwY3NyKTsKIAl9CiAKIAkvKiBYWFggZG8gc2lnc3RhY2sgY3JhcG9sYSBoZXJlLi4uIFhYWCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOWI0NzMzYy4uMWQ0NDAyNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0xMjAsMTEgKzEyMCwxMSBAQAogCQkJX19wdXRfdXNlciAoKF9fdTY0KSAtMSwgaSArIChfX3U2NCBfX3VzZXIgKikgZGF0YSk7CiAJfQogCisJX19wdXRfdXNlciAoY2hpbGQtPnRocmVhZC5mcHUuZmNyMzEsIGRhdGEgKyA2NCk7CisKIAlpZiAoY3B1X2hhc19mcHUpIHsKIAkJdW5zaWduZWQgaW50IGZsYWdzLCB0bXA7CiAKLQkJX19wdXRfdXNlciAoY2hpbGQtPnRocmVhZC5mcHUuaGFyZC5mY3IzMSwgZGF0YSArIDY0KTsKLQogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJaWYgKGNwdV9oYXNfbWlwc210KSB7CiAJCQl1bnNpZ25lZCBpbnQgdnBmbGFncyA9IGR2cGUoKTsKQEAgLTE0Miw3ICsxNDIsNiBAQAogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQlfX3B1dF91c2VyICh0bXAsIGRhdGEgKyA2NSk7CiAJfSBlbHNlIHsKLQkJX19wdXRfdXNlciAoY2hpbGQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSwgZGF0YSArIDY0KTsKIAkJX19wdXRfdXNlciAoKF9fdTMyKSAwLCBkYXRhICsgNjUpOwogCX0KIApAQCAtMTYyLDEwICsxNjEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQogCQlfX2dldF91c2VyIChmcmVnc1tpXSwgaSArIChfX3U2NCBfX3VzZXIgKikgZGF0YSk7CiAKLQlpZiAoY3B1X2hhc19mcHUpCi0JCV9fZ2V0X3VzZXIgKGNoaWxkLT50aHJlYWQuZnB1LmhhcmQuZmNyMzEsIGRhdGEgKyA2NCk7Ci0JZWxzZQotCQlfX2dldF91c2VyIChjaGlsZC0+dGhyZWFkLmZwdS5zb2Z0LmZjcjMxLCBkYXRhICsgNjQpOworCV9fZ2V0X3VzZXIgKGNoaWxkLT50aHJlYWQuZnB1LmZjcjMxLCBkYXRhICsgNjQpOwogCiAJLyogRklSIG1heSBub3QgYmUgd3JpdHRlbi4gICovCiAKQEAgLTI0MSwxMCArMjM3LDcgQEAKIAkJCXRtcCA9IHJlZ3MtPmxvOwogCQkJYnJlYWs7CiAJCWNhc2UgRlBDX0NTUjoKLQkJCWlmIChjcHVfaGFzX2ZwdSkKLQkJCQl0bXAgPSBjaGlsZC0+dGhyZWFkLmZwdS5oYXJkLmZjcjMxOwotCQkJZWxzZQotCQkJCXRtcCA9IGNoaWxkLT50aHJlYWQuZnB1LnNvZnQuZmNyMzE7CisJCQl0bXAgPSBjaGlsZC0+dGhyZWFkLmZwdS5mY3IzMTsKIAkJCWJyZWFrOwogCQljYXNlIEZQQ19FSVI6IHsJLyogaW1wbGVtZW50YXRpb24gLyB2ZXJzaW9uIHJlZ2lzdGVyICovCiAJCQl1bnNpZ25lZCBpbnQgZmxhZ3M7CkBAIC0zMzYsOSArMzI5LDkgQEAKIAogCQkJaWYgKCF0c2tfdXNlZF9tYXRoKGNoaWxkKSkgewogCQkJCS8qIEZQIG5vdCB5ZXQgdXNlZCAgKi8KLQkJCQltZW1zZXQoJmNoaWxkLT50aHJlYWQuZnB1LmhhcmQsIH4wLAotCQkJCSAgICAgICBzaXplb2YoY2hpbGQtPnRocmVhZC5mcHUuaGFyZCkpOwotCQkJCWNoaWxkLT50aHJlYWQuZnB1LmhhcmQuZmNyMzEgPSAwOworCQkJCW1lbXNldCgmY2hpbGQtPnRocmVhZC5mcHUsIH4wLAorCQkJCSAgICAgICBzaXplb2YoY2hpbGQtPnRocmVhZC5mcHUpKTsKKwkJCQljaGlsZC0+dGhyZWFkLmZwdS5mY3IzMSA9IDA7CiAJCQl9CiAjaWZkZWYgQ09ORklHXzMyQklUCiAJCQkvKgpAQCAtMzY5LDEwICszNjIsNyBAQAogCQkJcmVncy0+bG8gPSBkYXRhOwogCQkJYnJlYWs7CiAJCWNhc2UgRlBDX0NTUjoKLQkJCWlmIChjcHVfaGFzX2ZwdSkKLQkJCQljaGlsZC0+dGhyZWFkLmZwdS5oYXJkLmZjcjMxID0gZGF0YTsKLQkJCWVsc2UKLQkJCQljaGlsZC0+dGhyZWFkLmZwdS5zb2Z0LmZjcjMxID0gZGF0YTsKKwkJCWNoaWxkLT50aHJlYWQuZnB1LmZjcjMxID0gZGF0YTsKIAkJCWJyZWFrOwogCQljYXNlIERTUF9CQVNFIC4uLiBEU1BfQkFTRSArIDU6IHsKIAkJCWRzcHJlZ190ICpkcmVnczsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYwppbmRleCA4NzA0ZGMwLi5mNDBlY2Q4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jCkBAIC0xNjYsMTAgKzE2Niw3IEBACiAJCQl0bXAgPSByZWdzLT5sbzsKIAkJCWJyZWFrOwogCQljYXNlIEZQQ19DU1I6Ci0JCQlpZiAoY3B1X2hhc19mcHUpCi0JCQkJdG1wID0gY2hpbGQtPnRocmVhZC5mcHUuaGFyZC5mY3IzMTsKLQkJCWVsc2UKLQkJCQl0bXAgPSBjaGlsZC0+dGhyZWFkLmZwdS5zb2Z0LmZjcjMxOworCQkJdG1wID0gY2hpbGQtPnRocmVhZC5mcHUuZmNyMzE7CiAJCQlicmVhazsKIAkJY2FzZSBGUENfRUlSOiB7CS8qIGltcGxlbWVudGF0aW9uIC8gdmVyc2lvbiByZWdpc3RlciAqLwogCQkJdW5zaWduZWQgaW50IGZsYWdzOwpAQCAtMjg4LDkgKzI4NSw5IEBACiAKIAkJCWlmICghdHNrX3VzZWRfbWF0aChjaGlsZCkpIHsKIAkJCQkvKiBGUCBub3QgeWV0IHVzZWQgICovCi0JCQkJbWVtc2V0KCZjaGlsZC0+dGhyZWFkLmZwdS5oYXJkLCB+MCwKLQkJCQkgICAgICAgc2l6ZW9mKGNoaWxkLT50aHJlYWQuZnB1LmhhcmQpKTsKLQkJCQljaGlsZC0+dGhyZWFkLmZwdS5oYXJkLmZjcjMxID0gMDsKKwkJCQltZW1zZXQoJmNoaWxkLT50aHJlYWQuZnB1LCB+MCwKKwkJCQkgICAgICAgc2l6ZW9mKGNoaWxkLT50aHJlYWQuZnB1KSk7CisJCQkJY2hpbGQtPnRocmVhZC5mcHUuZmNyMzEgPSAwOwogCQkJfQogCQkJLyoKIAkJCSAqIFRoZSBvZGQgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSB0aGUgaGlnaCBvcmRlciBiaXRzCkBAIC0zMTgsMTAgKzMxNSw3IEBACiAJCQlyZWdzLT5sbyA9IGRhdGE7CiAJCQlicmVhazsKIAkJY2FzZSBGUENfQ1NSOgotCQkJaWYgKGNwdV9oYXNfZnB1KQotCQkJCWNoaWxkLT50aHJlYWQuZnB1LmhhcmQuZmNyMzEgPSBkYXRhOwotCQkJZWxzZQotCQkJCWNoaWxkLT50aHJlYWQuZnB1LnNvZnQuZmNyMzEgPSBkYXRhOworCQkJY2hpbGQtPnRocmVhZC5mcHUuZmNyMzEgPSBkYXRhOwogCQkJYnJlYWs7CiAJCWNhc2UgRFNQX0JBU0UgLi4uIERTUF9CQVNFICsgNTogewogCQkJZHNwcmVnX3QgKmRyZWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMgYi9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUwppbmRleCAwYjFiNTRhLi5kYjk0ZTU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUworKysgYi9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUwpAQCAtNzUsOCArNzUsOCBAQAogCWFuZAl0MCwgdDAsIHQxCiAJTE9OR19TCXQwLCBTVF9PRkYodDMpCiAKLQlmcHVfc2F2ZV9kb3VibGUgYTAgdDEgdDAgdDIJCSMgYzBfc3RhdHVzIHBhc3NlZCBpbiB0MQotCQkJCQkJIyBjbG9iYmVycyB0MCBhbmQgdDIKKwlmcHVfc2F2ZV9kb3VibGUgYTAgdDAgdDEJCSMgYzBfc3RhdHVzIHBhc3NlZCBpbiB0MAorCQkJCQkJIyBjbG9iYmVycyB0MQogMToKIAogCS8qCkBAIC0xMjksOSArMTI5LDkgQEAKICAqLwogTEVBRihfc2F2ZV9mcCkKICNpZmRlZiBDT05GSUdfNjRCSVQKLQltZmMwCXQxLCBDUDBfU1RBVFVTCisJbWZjMAl0MCwgQ1AwX1NUQVRVUwogI2VuZGlmCi0JZnB1X3NhdmVfZG91YmxlIGEwIHQxIHQwIHQyCQkjIGNsb2JiZXJzIHQxCisJZnB1X3NhdmVfZG91YmxlIGEwIHQwIHQxCQkjIGNsb2JiZXJzIHQxCiAJanIJcmEKIAlFTkQoX3NhdmVfZnApCiAKQEAgLTEzOSw3ICsxMzksMTAgQEAKICAqIFJlc3RvcmUgYSB0aHJlYWQncyBmcCBjb250ZXh0LgogICovCiBMRUFGKF9yZXN0b3JlX2ZwKQotCWZwdV9yZXN0b3JlX2RvdWJsZSBhMCwgdDEJCSMgY2xvYmJlcnMgdDEKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwltZmMwCXQwLCBDUDBfU1RBVFVTCisjZW5kaWYKKwlmcHVfcmVzdG9yZV9kb3VibGUgYTAgdDAgdDEJCSMgY2xvYmJlcnMgdDEKIAlqcglyYQogCUVORChfcmVzdG9yZV9mcCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM5N2E3MGUuLmJmY2VjOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKQEAgLTQ0Miw2ICs0NDIsNDggQEAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgICovCiB9CiAKKy8qCisgKiBhcmNoX21lbV9pbml0IC0gaW5pdGlhbGl6ZSBtZW1vcnkgbWFuYWdtZW50IHN1YnN5c3RlbQorICoKKyAqICBvIHBsYXRfbWVtX3NldHVwKCkgZGV0ZWN0cyB0aGUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gYW5kIHdpbGwgcmVjb3JkIGRldGVjdGVkCisgKiAgICBtZW1vcnkgYXJlYXMgdXNpbmcgYWRkX21lbW9yeV9yZWdpb24uCisgKiAgbyBwYXJzZV9jbWRsaW5lX2Vhcmx5KCkgcGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgZm9yIG1lbT0gb3B0aW9ucyB3aGljaCwKKyAqICAgIGlmZiBkZXRlY3RlZCwgd2lsbCBvdmVycmlkZSB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbi4KKyAqCisgKiBBdCB0aGlzIHN0YWdlIHRoZSBtZW1vcnkgY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtIGlzIGtub3duIHRvIHRoZQorICoga2VybmVsIGJ1dCBnZW5lcmljIG1lbW9yeSBtYW5hZ21lbnQgc3lzdGVtIGlzIHN0aWxsIGVudGlyZWx5IHVuaW5pdGlhbGl6ZWQuCisgKgorICogIG8gYm9vdG1lbV9pbml0KCkKKyAqICBvIHNwYXJzZV9pbml0KCkKKyAqICBvIHBhZ2luZ19pbml0KCkKKyAqCisgKiBBdCB0aGlzIHN0YWdlIHRoZSBib290bWVtIGFsbG9jYXRvciBpcyByZWFkeSB0byB1c2UuCisgKgorICogTk9URTogaGlzdG9yaWNhbGx5IHBsYXRfbWVtX3NldHVwIGRpZCB0aGUgZW50aXJlIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uLgorICogICAgICAgVGhpcyB3YXMgcmF0aGVyIGltcHJhY3RpY2FsIGJlY2F1c2UgaXQgbWVhbnQgcGxhdF9tZW1fc2V0dXAgaGFkIHRvCisgKiBnZXQgYXdheSB3aXRob3V0IGFueSBraW5kIG9mIG1lbW9yeSBhbGxvY2F0b3IuICBUbyBrZWVwIG9sZCBjb2RlIGZyb20KKyAqIGJyZWFraW5nIHBsYXRfc2V0dXAgd2FzIGp1c3QgcmVuYW1lZCB0byBwbGF0X3NldHVwIGFuZCBhIHNlY29uZCBwbGF0Zm9ybQorICogaW5pdGlhbGl6YXRpb24gaG9vayBmb3IgYW55dGhpbmcgZWxzZSB3YXMgaW50cm9kdWNlZC4KKyAqLworCitleHRlcm4gdm9pZCBwbGF0X21lbV9zZXR1cCh2b2lkKTsKKworc3RhdGljIHZvaWQgX19pbml0IGFyY2hfbWVtX2luaXQoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwkvKiBjYWxsIGJvYXJkIHNldHVwIHJvdXRpbmUgKi8KKwlwbGF0X21lbV9zZXR1cCgpOworCisJc3RybGNweShjb21tYW5kX2xpbmUsIGFyY3NfY21kbGluZSwgc2l6ZW9mKGNvbW1hbmRfbGluZSkpOworCXN0cmxjcHkoc2F2ZWRfY29tbWFuZF9saW5lLCBjb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKKworCSpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7CisKKwlwYXJzZV9jbWRsaW5lX2Vhcmx5KCk7CisJYm9vdG1lbV9pbml0KCk7CisJc3BhcnNlX2luaXQoKTsKKwlwYWdpbmdfaW5pdCgpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzb3VyY2VfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtNDk1LDggKzUzNyw2IEBACiAjdW5kZWYgTUFYTUVNCiAjdW5kZWYgTUFYTUVNX1BGTgogCi1leHRlcm4gdm9pZCBwbGF0X3NldHVwKHZvaWQpOwotCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJY3B1X3Byb2JlKCk7CkBAIC01MTEsMTggKzU1MSw4IEBACiAjZW5kaWYKICNlbmRpZgogCi0JLyogY2FsbCBib2FyZCBzZXR1cCByb3V0aW5lICovCi0JcGxhdF9zZXR1cCgpOworCWFyY2hfbWVtX2luaXQoY21kbGluZV9wKTsKIAotCXN0cmxjcHkoY29tbWFuZF9saW5lLCBhcmNzX2NtZGxpbmUsIHNpemVvZihjb21tYW5kX2xpbmUpKTsKLQlzdHJsY3B5KHNhdmVkX2NvbW1hbmRfbGluZSwgY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0KLQkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOwotCi0JcGFyc2VfY21kbGluZV9lYXJseSgpOwotCWJvb3RtZW1faW5pdCgpOwotCXNwYXJzZV9pbml0KCk7Ci0JcGFnaW5nX2luaXQoKTsKIAlyZXNvdXJjZV9pbml0KCk7CiAjaWZkZWYgQ09ORklHX1NNUAogCXBsYXRfc21wX3NldHVwKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggYTc1NjRiMC4uYWQxNmVjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtNjUsNyArNjUsNyBAQAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfcmVzZXJ2ZWQodm9pZCk7CiAKIGV4dGVybiBpbnQgZnB1X2VtdWxhdG9yX2NvcDFIYW5kbGVyKHN0cnVjdCBwdF9yZWdzICp4Y3AsCi0Jc3RydWN0IG1pcHNfZnB1X3NvZnRfc3RydWN0ICpjdHgpOworCXN0cnVjdCBtaXBzX2ZwdV9zdHJ1Y3QgKmN0eCk7CiAKIHZvaWQgKCpib2FyZF9iZV9pbml0KSh2b2lkKTsKIGludCAoKmJvYXJkX2JlX2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfZml4dXApOwpAQCAtNjAwLDggKzYwMCw3IEBACiAJCXByZWVtcHRfZW5hYmxlKCk7CiAKIAkJLyogUnVuIHRoZSBlbXVsYXRvciAqLwotCQlzaWcgPSBmcHVfZW11bGF0b3JfY29wMUhhbmRsZXIgKHJlZ3MsCi0JCQkmY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0KTsKKwkJc2lnID0gZnB1X2VtdWxhdG9yX2NvcDFIYW5kbGVyIChyZWdzLCAmY3VycmVudC0+dGhyZWFkLmZwdSk7CiAKIAkJcHJlZW1wdF9kaXNhYmxlKCk7CiAKQEAgLTYxMCw3ICs2MDksNyBAQAogCQkgKiBXZSBjYW4ndCBhbGxvdyB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24gdG8gbGVhdmUgYW55IG9mCiAJCSAqIHRoZSBjYXVzZSBiaXQgc2V0IGluICRmY3IzMS4KIAkJICovCi0JCWN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSAmPSB+RlBVX0NTUl9BTExfWDsKKwkJY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSAmPSB+RlBVX0NTUl9BTExfWDsKIAogCQkvKiBSZXN0b3JlIHRoZSBoYXJkd2FyZSByZWdpc3RlciBzdGF0ZSAqLwogCQlyZXN0b3JlX2ZwKGN1cnJlbnQpOwpAQCAtNzU1LDcgKzc1NCw3IEBACiAKIAkJaWYgKCFjcHVfaGFzX2ZwdSkgewogCQkJaW50IHNpZyA9IGZwdV9lbXVsYXRvcl9jb3AxSGFuZGxlcihyZWdzLAotCQkJCQkJJmN1cnJlbnQtPnRocmVhZC5mcHUuc29mdCk7CisJCQkJCQkmY3VycmVudC0+dGhyZWFkLmZwdSk7CiAJCQlpZiAoc2lnKQogCQkJCWZvcmNlX3NpZyhzaWcsIGN1cnJlbnQpOwogI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvc2V0dXAuYyBiL2FyY2gvbWlwcy9sYXNhdC9zZXR1cC5jCmluZGV4IGJiNzBhODIuLjNmNjQyNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9zZXR1cC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIH0KICNlbmRpZgogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWludCBpOwogCWxhc2F0X21pc2MgID0gJmxhc2F0X21pc2NfaW5mb1ttaXBzX21hY2h0eXBlXTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCmluZGV4IGNmMTJjYWYuLmIyMjU1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQpAQCAtNyw0ICs3LDcgQEAKIAogb2JqLXkJKz0gaW9tYXAubwogCisjIGxpYmdjYy1zdHlsZSBzdHVmZiBuZWVkZWQgaW4gdGhlIGtlcm5lbAorbGliLXkgKz0gYXNobGRpMy5vIGFzaHJkaTMubyBsc2hyZGkzLm8KKwogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9hc2hsZGkzLmMgYi9hcmNoL21pcHMvbGliL2FzaGxkaTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWI4MGYzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9saWIvYXNobGRpMy5jCkBAIC0wLDAgKzEsMjkgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImxpYmdjYy5oIgorCitsb25nIGxvbmcgX19hc2hsZGkzKGxvbmcgbG9uZyB1LCB3b3JkX3R5cGUgYikKK3sKKwlEV3VuaW9uIHV1LCB3OworCXdvcmRfdHlwZSBibTsKKworCWlmIChiID09IDApCisJCXJldHVybiB1OworCisJdXUubGwgPSB1OworCWJtID0gMzIgLSBiOworCisJaWYgKGJtIDw9IDApIHsKKwkJdy5zLmxvdyA9IDA7CisJCXcucy5oaWdoID0gKHVuc2lnbmVkIGludCkgdXUucy5sb3cgPDwgLWJtOworCX0gZWxzZSB7CisJCWNvbnN0IHVuc2lnbmVkIGludCBjYXJyaWVzID0gKHVuc2lnbmVkIGludCkgdXUucy5sb3cgPj4gYm07CisKKwkJdy5zLmxvdyA9ICh1bnNpZ25lZCBpbnQpIHV1LnMubG93IDw8IGI7CisJCXcucy5oaWdoID0gKCh1bnNpZ25lZCBpbnQpIHV1LnMuaGlnaCA8PCBiKSB8IGNhcnJpZXM7CisJfQorCisJcmV0dXJuIHcubGw7Cit9CisKK0VYUE9SVF9TWU1CT0woX19hc2hsZGkzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvYXNocmRpMy5jIGIvYXJjaC9taXBzL2xpYi9hc2hyZGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4NGE5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9saWIvYXNocmRpMy5jCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImxpYmdjYy5oIgorCitsb25nIGxvbmcgX19hc2hyZGkzKGxvbmcgbG9uZyB1LCB3b3JkX3R5cGUgYikKK3sKKwlEV3VuaW9uIHV1LCB3OworCXdvcmRfdHlwZSBibTsKKworCWlmIChiID09IDApCisJCXJldHVybiB1OworCisJdXUubGwgPSB1OworCWJtID0gMzIgLSBiOworCisJaWYgKGJtIDw9IDApIHsKKwkJLyogdy5zLmhpZ2ggPSAxLi4xIG9yIDAuLjAgKi8KKwkJdy5zLmhpZ2ggPQorCQkgICAgdXUucy5oaWdoID4+IDMxOworCQl3LnMubG93ID0gdXUucy5oaWdoID4+IC1ibTsKKwl9IGVsc2UgeworCQljb25zdCB1bnNpZ25lZCBpbnQgY2FycmllcyA9ICh1bnNpZ25lZCBpbnQpIHV1LnMuaGlnaCA8PCBibTsKKworCQl3LnMuaGlnaCA9IHV1LnMuaGlnaCA+PiBiOworCQl3LnMubG93ID0gKCh1bnNpZ25lZCBpbnQpIHV1LnMubG93ID4+IGIpIHwgY2FycmllczsKKwl9CisKKwlyZXR1cm4gdy5sbDsKK30KKworRVhQT1JUX1NZTUJPTChfX2FzaHJkaTMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9saWJnY2MuaCBiL2FyY2gvbWlwcy9saWIvbGliZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxOWQxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9saWIvbGliZ2NjLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX0FTTV9MSUJHQ0NfSAorI2RlZmluZSBfX0FTTV9MSUJHQ0NfSAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCit0eXBlZGVmIGludCB3b3JkX3R5cGUgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpOworCisjaWZkZWYgX19CSUdfRU5ESUFOCitzdHJ1Y3QgRFdzdHJ1Y3QgeworCWludCBoaWdoLCBsb3c7Cit9OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCitzdHJ1Y3QgRFdzdHJ1Y3QgeworCWludCBsb3csIGhpZ2g7Cit9OworI2Vsc2UKKyNlcnJvciBJIGZlZWwgc2ljay4KKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uCit7CisJc3RydWN0IERXc3RydWN0IHM7CisJbG9uZyBsb25nIGxsOworfSBEV3VuaW9uOworCisjZW5kaWYgLyogX19BU01fTElCR0NDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvbHNocmRpMy5jIGIvYXJjaC9taXBzL2xpYi9sc2hyZGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmOGQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9saWIvbHNocmRpMy5jCkBAIC0wLDAgKzEsMjkgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImxpYmdjYy5oIgorCitsb25nIGxvbmcgX19sc2hyZGkzKGxvbmcgbG9uZyB1LCB3b3JkX3R5cGUgYikKK3sKKwlEV3VuaW9uIHV1LCB3OworCXdvcmRfdHlwZSBibTsKKworCWlmIChiID09IDApCisJCXJldHVybiB1OworCisJdXUubGwgPSB1OworCWJtID0gMzIgLSBiOworCisJaWYgKGJtIDw9IDApIHsKKwkJdy5zLmhpZ2ggPSAwOworCQl3LnMubG93ID0gKHVuc2lnbmVkIGludCkgdXUucy5oaWdoID4+IC1ibTsKKwl9IGVsc2UgeworCQljb25zdCB1bnNpZ25lZCBpbnQgY2FycmllcyA9ICh1bnNpZ25lZCBpbnQpIHV1LnMuaGlnaCA8PCBibTsKKworCQl3LnMuaGlnaCA9ICh1bnNpZ25lZCBpbnQpIHV1LnMuaGlnaCA+PiBiOworCQl3LnMubG93ID0gKCh1bnNpZ25lZCBpbnQpIHV1LnMubG93ID4+IGIpIHwgY2FycmllczsKKwl9CisKKwlyZXR1cm4gdy5sbDsKK30KKworRVhQT1JUX1NZTUJPTChfX2xzaHJkaTMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jIGIvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCmluZGV4IGFhNTgxOGEuLjNmMGQ1ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKQEAgLTYwLDE1ICs2MCwxNSBAQAogCiAvKiBGdW5jdGlvbiB3aGljaCBlbXVsYXRlcyBhIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9uLiAqLwogCi1zdGF0aWMgaW50IGZwdV9lbXUoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IG1pcHNfZnB1X3NvZnRfc3RydWN0ICosCitzdGF0aWMgaW50IGZwdV9lbXUoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqLAogCW1pcHNfaW5zdHJ1Y3Rpb24pOwogCiAjaWYgX19taXBzID49IDQgJiYgX19taXBzICE9IDMyCiBzdGF0aWMgaW50IGZwdXhfZW11KHN0cnVjdCBwdF9yZWdzICosCi0Jc3RydWN0IG1pcHNfZnB1X3NvZnRfc3RydWN0ICosIG1pcHNfaW5zdHJ1Y3Rpb24pOworCXN0cnVjdCBtaXBzX2ZwdV9zdHJ1Y3QgKiwgbWlwc19pbnN0cnVjdGlvbik7CiAjZW5kaWYKIAotLyogRnVydGhlciBwcml2YXRlIGRhdGEgZm9yIHdoaWNoIG5vIHNwYWNlIGV4aXN0cyBpbiBtaXBzX2ZwdV9zb2Z0X3N0cnVjdCAqLworLyogRnVydGhlciBwcml2YXRlIGRhdGEgZm9yIHdoaWNoIG5vIHNwYWNlIGV4aXN0cyBpbiBtaXBzX2ZwdV9zdHJ1Y3QgKi8KIAogc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzIGZwdWVtdXN0YXRzOwogCkBAIC0yMDMsNyArMjAzLDcgQEAKICAqIFR3byBpbnN0cnVjdGlvbnMgaWYgdGhlIGluc3RydWN0aW9uIGlzIGluIGEgYnJhbmNoIGRlbGF5IHNsb3QuCiAgKi8KIAotc3RhdGljIGludCBjb3AxRW11bGF0ZShzdHJ1Y3QgcHRfcmVncyAqeGNwLCBzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3QgKmN0eCkKK3N0YXRpYyBpbnQgY29wMUVtdWxhdGUoc3RydWN0IHB0X3JlZ3MgKnhjcCwgc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqY3R4KQogewogCW1pcHNfaW5zdHJ1Y3Rpb24gaXI7CiAJdm9pZCAqIGVtdWxwYywgKmNvbnRwYzsKQEAgLTU5NSw3ICs1OTUsNyBAQAogREVGM09QKG5tYWRkLCBkcCwgaWVlZTc1NGRwX211bCwgaWVlZTc1NGRwX2FkZCwgaWVlZTc1NGRwX25lZyk7CiBERUYzT1Aobm1zdWIsIGRwLCBpZWVlNzU0ZHBfbXVsLCBpZWVlNzU0ZHBfc3ViLCBpZWVlNzU0ZHBfbmVnKTsKIAotc3RhdGljIGludCBmcHV4X2VtdShzdHJ1Y3QgcHRfcmVncyAqeGNwLCBzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3QgKmN0eCwKK3N0YXRpYyBpbnQgZnB1eF9lbXUoc3RydWN0IHB0X3JlZ3MgKnhjcCwgc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqY3R4LAogCW1pcHNfaW5zdHJ1Y3Rpb24gaXIpCiB7CiAJdW5zaWduZWQgcmNzciA9IDA7CS8qIHJlc3VsdGluZyBjc3IgKi8KQEAgLTc1OSw3ICs3NTksNyBAQAogLyoKICAqIEVtdWxhdGUgYSBzaW5nbGUgQ09QMSBhcml0aG1ldGljIGluc3RydWN0aW9uLgogICovCi1zdGF0aWMgaW50IGZwdV9lbXUoc3RydWN0IHB0X3JlZ3MgKnhjcCwgc3RydWN0IG1pcHNfZnB1X3NvZnRfc3RydWN0ICpjdHgsCitzdGF0aWMgaW50IGZwdV9lbXUoc3RydWN0IHB0X3JlZ3MgKnhjcCwgc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqY3R4LAogCW1pcHNfaW5zdHJ1Y3Rpb24gaXIpCiB7CiAJaW50IHJmbXQ7CQkvKiByZXN1bHRpbmcgZm9ybWF0ICovCkBAIC0xMjMzLDggKzEyMzMsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZnB1X2VtdWxhdG9yX2NvcDFIYW5kbGVyKHN0cnVjdCBwdF9yZWdzICp4Y3AsCi0Jc3RydWN0IG1pcHNfZnB1X3NvZnRfc3RydWN0ICpjdHgpCitpbnQgZnB1X2VtdWxhdG9yX2NvcDFIYW5kbGVyKHN0cnVjdCBwdF9yZWdzICp4Y3AsIHN0cnVjdCBtaXBzX2ZwdV9zdHJ1Y3QgKmN0eCkKIHsKIAl1bnNpZ25lZCBsb25nIG9sZGVwYywgcHJldmVwYzsKIAltaXBzX2luc3RydWN0aW9uIGluc247CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NC5oIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTQuaAppbmRleCAxNzFmMTc3Li5kZDkxNzMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NC5oCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0LmgKQEAgLTMyOSw3ICszMjksNyBAQAogCXVuc2lnbmVkIHBhZDA6NzsKICNlbmRpZgogfTsKLSNkZWZpbmUgaWVlZTc1NF9jc3IgKCooc3RydWN0IF9pZWVlNzU0X2NzciAqKSgmY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZjcjMxKSkKKyNkZWZpbmUgaWVlZTc1NF9jc3IgKCooc3RydWN0IF9pZWVlNzU0X2NzciAqKSgmY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSkpCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaWVlZTc1NF9nZXRybSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2tlcm5lbF9saW5rYWdlLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUva2VybmVsX2xpbmthZ2UuYwppbmRleCBkMTg3YWI3Li41NmNhMGM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUva2VybmVsX2xpbmthZ2UuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUva2VybmVsX2xpbmthZ2UuYwpAQCAtMzksOSArMzksOSBAQAogCQlwcmludGsoIkFsZ29yaXRobWljcy9NSVBTIEZQVSBFbXVsYXRvciB2MS41XG4iKTsKIAl9CiAKLQljdXJyZW50LT50aHJlYWQuZnB1LnNvZnQuZmNyMzEgPSAwOworCWN1cnJlbnQtPnRocmVhZC5mcHUuZmNyMzEgPSAwOwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCWN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mcHJbaV0gPSBTSUdOQUxMSU5HX05BTjsKKwkJY3VycmVudC0+dGhyZWFkLmZwdS5mcHJbaV0gPSBTSUdOQUxMSU5HX05BTjsKIAl9CiB9CiAKQEAgLTU5LDEwICs1OSw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQllcnIgfD0KLQkJICAgIF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZwcltpXSwKLQkJCSAgICAgICAmc2MtPnNjX2ZwcmVnc1tpXSk7CisJCSAgICBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuZnByW2ldLCAmc2MtPnNjX2ZwcmVnc1tpXSk7CiAJfQotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSwgJnNjLT5zY19mcGNfY3NyKTsKKwllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LmZjcjMxLCAmc2MtPnNjX2ZwY19jc3IpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTc0LDEwICs3Myw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQllcnIgfD0KLQkJICAgIF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZwcltpXSwKLQkJCSAgICAgICAmc2MtPnNjX2ZwcmVnc1tpXSk7CisJCSAgICBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuZnByW2ldLCAmc2MtPnNjX2ZwcmVnc1tpXSk7CiAJfQotCWVyciB8PSBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSwgJnNjLT5zY19mcGNfY3NyKTsKKwllcnIgfD0gX19nZXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LmZjcjMxLCAmc2MtPnNjX2ZwY19jc3IpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTk0LDEwICs5Miw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrPTIpIHsKIAkJZXJyIHw9Ci0JCSAgICBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mcHJbaV0sCi0JCQkgICAgICAgJnNjLT5zY19mcHJlZ3NbaV0pOworCQkgICAgX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LmZwcltpXSwgJnNjLT5zY19mcHJlZ3NbaV0pOwogCX0KLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQuZmNyMzEsICZzYy0+c2NfZnBjX2Nzcik7CisJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSwgJnNjLT5zY19mcGNfY3NyKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xMDksMTAgKzEwNiw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrPTIpIHsKIAkJZXJyIHw9Ci0JCSAgICBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mcHJbaV0sCi0JCQkgICAgICAgJnNjLT5zY19mcHJlZ3NbaV0pOworCQkgICAgX19nZXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LmZwcltpXSwgJnNjLT5zY19mcHJlZ3NbaV0pOwogCX0KLQllcnIgfD0gX19nZXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQuZmNyMzEsICZzYy0+c2NfZnBjX2Nzcik7CisJZXJyIHw9IF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSwgJnNjLT5zY19mcGNfY3NyKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfc2V0dXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19zZXR1cC5jCmluZGV4IGMyMGQ0MDEuLjhjYzllZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19zZXR1cC5jCkBAIC01MCw3ICs1MCw3IEBACiAJcmV0dXJuICJNSVBTIEF0bGFzIjsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAltaXBzX3BjaWJpb3NfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21lbW9yeS5jCmluZGV4IGJjNGQwOTMuLmZkNDkyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21lbW9yeS5jCkBAIC03Niw2ICs3NiwxNSBAQAogCQkJbWVtc2l6ZSA9IHNpbXBsZV9zdHJ0b2wobWVtc2l6ZV9zdHIsIE5VTEwsIDApOwogCQl9CiAJfQorCisjaWZkZWYgQ09ORklHX0NQVV9CSUdfRU5ESUFOCisJLyoKKwkgKiBTT0MtaXQgc3dhcHMsIG9yIHBlcmhhcHMgZG9lc24ndCBzd2FwLCB3aGVuIERNQSdpbmcgdGhlIGxhc3QKKwkgKiB3b3JkIG9mIHBoeXNpY2FsIG1lbW9yeQorCSAqLworCW1lbXNpemUgLT0gUEFHRV9TSVpFOworI2VuZGlmCisKIAltZW1zZXQobWRlc2MsIDAsIHNpemVvZihtZGVzYykpOwogCiAJbWRlc2NbMF0udHlwZSA9IHlhbW9uX2RvbnR1c2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCmluZGV4IGI4NDg4YWEuLjA3NjZlNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCkBAIC01MywxMSArNTMsMTEgQEAKICNlbmRpZgogCiBzdHJ1Y3QgcmVzb3VyY2Ugc3RhbmRhcmRfaW9fcmVzb3VyY2VzW10gPSB7Ci0JeyAiZG1hMSIsIDB4MDAsIDB4MWYsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgInRpbWVyIiwgMHg0MCwgMHg1ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAia2V5Ym9hcmQiLCAweDYwLCAweDZmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJkbWEgcGFnZSByZWciLCAweDgwLCAweDhmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJkbWEyIiwgMHhjMCwgMHhkZiwgSU9SRVNPVVJDRV9CVVNZIH0sCisJeyAubmFtZSA9ICJkbWExIiwgLnN0YXJ0ID0gMHgwMCwgLmVuZCA9IDB4MWYsIC5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB9LAorCXsgLm5hbWUgPSAidGltZXIiLCAuc3RhcnQgPSAweDQwLCAuZW5kID0gMHg1ZiwgLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZIH0sCisJeyAubmFtZSA9ICJrZXlib2FyZCIsIC5zdGFydCA9IDB4NjAsIC5lbmQgPSAweDZmLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfSwKKwl7IC5uYW1lID0gImRtYSBwYWdlIHJlZyIsIC5zdGFydCA9IDB4ODAsIC5lbmQgPSAweDhmLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfSwKKwl7IC5uYW1lID0gImRtYTIiLCAuc3RhcnQgPSAweGMwLCAuZW5kID0gMHhkZiwgLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZIH0sCiB9OwogCiAjaWZkZWYgQ09ORklHX01URApAQCAtMTExLDcgKzExMSw3IEBACiB9CiAjZW5kaWYKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NtcC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NtcC5jCmluZGV4IDZjNmM4ZWUuLmNmOTY3MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zbXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc21wLmMKQEAgLTM0LDI1ICszNCw2IEBACiB9CiAKIC8qCi0gKiBEZXRlY3QgYXZhaWxhYmxlIENQVXMvVlBFcy9UQ3MgYW5kIHBvcHVsYXRlIHBoeXNfY3B1X3ByZXNlbnRfbWFwCi0gKi8KLQotdm9pZCBfX2luaXQgcHJvbV9idWlsZF9jcHVfbWFwKHZvaWQpCi17Ci0JaW50IG5leHRzbG90OwotCi0JLyoKLQkgKiBBcyBvZiBOb3ZlbWJlciwgMjAwNCwgTUlQU3NpbSBvbmx5IHNpbXVsYXRlcyBvbmUgY29yZQotCSAqIGF0IGEgdGltZS4gIEhvd2V2ZXIsIHRoYXQgY29yZSBtYXkgYmUgYSBNSVBTIE1UIGNvcmUKLQkgKiB3aXRoIG11bHRpcGxlIHZpcnR1YWwgcHJvY2Vzc29ycyBhbmQgdGhyZWFkIGNvbnRleHRzLgotCSAqLwotCi0JaWYgKHJlYWRfYzBfY29uZmlnMygpICYgKDE8PDIpKSB7Ci0JCW5leHRzbG90ID0gbWlwc210X2J1aWxkX2NwdV9tYXAoMSk7Ci0JfQotfQotCi0vKgogICogUGxhdGZvcm0gIkNQVSIgc3RhcnR1cCBob29rCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9zZXR1cC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9zZXR1cC5jCmluZGV4IDQyNjZjZTQuLjY0MzBmMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX3NldHVwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlyZXR1cm4gIk1JUFMgU0VBRCI7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJaW9wb3J0X3Jlc291cmNlLmVuZCA9IDB4N2ZmZmZmZmY7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zZXR1cC5jCmluZGV4IGEyZmQ2MjkuLjE1YTVkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc2V0dXAuYwpAQCAtNTAsNyArNTAsNyBAQAogCXJldHVybiAiTUlQU3NpbSI7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJc2V0X2lvX3BvcnRfYmFzZSgweGJmZDAwMDAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYwppbmRleCBiNzA4NGU3Li4wMDQwNzA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYwpAQCAtNTEsMjcgKzUxLDYgQEAKIH0KIAogLyoKLSAqIERldGVjdCBhdmFpbGFibGUgQ1BVcy9WUEVzL1RDcyBhbmQgcG9wdWxhdGUgcGh5c19jcHVfcHJlc2VudF9tYXAKLSAqLwotCi12b2lkIF9faW5pdCBwcm9tX2J1aWxkX2NwdV9tYXAodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JaW50IG5leHRzbG90OwotCi0JLyoKLQkgKiBBcyBvZiBOb3ZlbWJlciwgMjAwNCwgTUlQU3NpbSBvbmx5IHNpbXVsYXRlcyBvbmUgY29yZQotCSAqIGF0IGEgdGltZS4gIEhvd2V2ZXIsIHRoYXQgY29yZSBtYXkgYmUgYSBNSVBTIE1UIGNvcmUKLQkgKiB3aXRoIG11bHRpcGxlIHZpcnR1YWwgcHJvY2Vzc29ycyBhbmQgdGhyZWFkIGNvbnRleHRzLgotCSAqLwotCi0JaWYgKHJlYWRfYzBfY29uZmlnMygpICYgKDE8PDIpKSB7Ci0JCW5leHRzbG90ID0gbWlwc210X2J1aWxkX2NwdV9tYXAoMSk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KLX0KLQotLyoKICAqIFBsYXRmb3JtICJDUFUiIHN0YXJ0dXAgaG9vawogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCmluZGV4IDlkY2EwOTkuLjk2NWNiNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwpAQCAtNDEzLDcgKzQxMyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotZXh0ZXJuIHZvaWQgX19pbml0IHNhbml0aXplX3RsYl9lbnRyaWVzKHZvaWQpOwogc3RhdGljIHZvaWQgX19pbml0IHByb2JlX3RsYih1bnNpZ25lZCBsb25nIGNvbmZpZykKIHsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYwppbmRleCAxMzc5Yzc2Li5kZjE0ODU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCiBhcmNoX2luaXRjYWxsKGphX3BjaV9pbml0KTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wd29yZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYwppbmRleCBjNjkxOTUyLi44YzUzNDkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIGFyY2hfaW5pdGNhbGwoamFfcGNpX2luaXQpOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGludCB0bXB3b3JkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvc2V0dXAuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCmluZGV4IGEzZTZmNTUuLjI1N2UxZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlydGNfbWlwc19zZXRfdGltZSA9IG00OHQzN3lfc2V0X3RpbWU7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHRtcHdvcmQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKaW5kZXggZmVkNGU4ZS4uNzIxNDNhYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXByaW50aygiRG9uZVxuIik7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdm9pZCAoKmwzZnVuYykodW5zaWduZWQgbG9uZykgPSAodm9pZCAqKSBLU0VHMUFERFIoc2V0dXBfbDNjYWNoZSk7CiAJdW5zaWduZWQgaW50IHRtcHdvcmQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQppbmRleCAxNjIwNWI1Li40NjU3NzhjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKQEAgLTE4LDEyICsxOCwxMiBAQAogb2JqLSQoQ09ORklHX01JUFNfVFgzOTI3KQkrPSBvcHMtdHgzOTI3Lm8KIG9iai0kKENPTkZJR19QQ0lfVlI0MVhYKQkrPSBvcHMtdnI0MXh4Lm8gcGNpLXZyNDF4eC5vCiBvYmotJChDT05GSUdfTkVDX0NNQlZSNDEzMykJKz0gZml4dXAtdnI0MTMzLm8KK29iai0kKENPTkZJR19NQVJLRUlOUykJCSs9IG9wcy1lbW1hMnJoLm8gcGNpLWVtbWEycmgubyBmaXh1cC1lbW1hMnJoLm8KIAogIwogIyBUaGVzZSBhcmUgc3RpbGwgcHJldHR5IG11Y2ggaW4gdGhlIG9sZCBzdGF0ZSwgd2F0Y2gsIGdvIGJsaW5kLgogIwotb2JqLSQoQ09ORklHX0REQjUwNzQpCQkrPSBmaXh1cC1kZGI1MDc0Lm8gcGNpLWRkYjUwNzQubyBvcHMtZGRiNTA3NC5vCi1vYmotJChDT05GSUdfRERCNTQ3NikJCSs9IG9wcy1kZGI1NDc2Lm8gcGNpLWRkYjU0NzYubworb2JqLSQoQ09ORklHX0JBU0xFUl9FWENJVEUpCT0gb3BzLXRpdGFuLm8gcGNpLWV4Y2l0ZS5vIGZpeHVwLWV4Y2l0ZS5vCiBvYmotJChDT05GSUdfRERCNTQ3NykJCSs9IGZpeHVwLWRkYjU0NzcubyBwY2ktZGRiNTQ3Ny5vIG9wcy1kZGI1NDc3Lm8KIG9iai0kKENPTkZJR19MQVNBVCkJCSs9IHBjaS1sYXNhdC5vCiBvYmotJChDT05GSUdfTUlQU19BVExBUykJKz0gZml4dXAtYXRsYXMubwpAQCAtNDMsNyArNDMsNyBAQAogb2JqLSQoQ09ORklHX01PTUVOQ09fT0NFTE9UX0cpCSs9IGZpeHVwLW9jZWxvdC1nLm8gcGNpLW9jZWxvdC1nLm8KIG9iai0kKENPTkZJR19QTUNfWU9TRU1JVEUpCSs9IGZpeHVwLXlvc2VtaXRlLm8gb3BzLXRpdGFuLm8gb3BzLXRpdGFuLWh0Lm8gXAogCQkJCSAgIHBjaS15b3NlbWl0ZS5vCi1vYmotJChDT05GSUdfU0dJX0lQMjcpCQkrPSBwY2ktaXAyNy5vCitvYmotJChDT05GSUdfU0dJX0lQMjcpCQkrPSBvcHMtYnJpZGdlLm8gcGNpLWlwMjcubwogb2JqLSQoQ09ORklHX1NHSV9JUDMyKQkJKz0gZml4dXAtaXAzMi5vIG9wcy1tYWNlLm8gcGNpLWlwMzIubwogb2JqLSQoQ09ORklHX1NJQllURV9TQjEyNTApCSs9IGZpeHVwLXNiMTI1MC5vIHBjaS1zYjEyNTAubwogb2JqLSQoQ09ORklHX1NJQllURV9CQ00xMTJYKQkrPSBmaXh1cC1zYjEyNTAubyBwY2ktc2IxMjUwLm8KQEAgLTU3LDMgKzU3LDQgQEAKIG9iai0kKENPTkZJR19UT1NISUJBX1JCVFg0OTM4KQkrPSBmaXh1cC10eDQ5MzgubyBvcHMtdHg0OTM4Lm8KIG9iai0kKENPTkZJR19WSUNUT1JfTVBDMzBYKQkrPSBmaXh1cC1tcGMzMHgubwogb2JqLSQoQ09ORklHX1pBT19DQVBDRUxMQSkJKz0gZml4dXAtY2FwY2VsbGEubworb2JqLSQoQ09ORklHX1dSX1BQTUMpCQkrPSBmaXh1cC13cnBwbWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1kZGI1MDc0LmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWRkYjUwNzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0YTdjMi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWRkYjUwNzQuYworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qCi0gKiBJdCdzIG5pY2UgdG8gaGF2ZSB0aGUgTEVEcyBvbiB0aGUgR1BJTyBwaW5zIGF2YWlsYWJsZSBmb3IgZGVidWdnaW5nCi0gKi8KLXN0YXRpYyB2b2lkIGRkYjUwNzRfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlleHRlcm4gc3RydWN0IHBjaV9kZXYgKnBjaV9wbXU7Ci0JdTggdDg7Ci0KLQlwY2lfcG11ID0gZGV2OyAgLyogZm9yIExFRHMgRDIgYW5kIEQzICovCi0JLyogUHJvZ3JhbSB0aGUgbGluZXMgZm9yIExFRHMgRDIgYW5kIEQzIHRvIG91dHB1dCAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg3ZCwgJnQ4KTsKLQl0OCB8PSAweGMwOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4N2QsIHQ4KTsKLQkvKiBUdXJuIExFRHMgRDIgYW5kIEQzIG9mZiAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg3ZSwgJnQ4KTsKLQl0OCB8PSAweGMwOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4N2UsIHQ4KTsKLX0KLQotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9JRF9BTF9NNzEwMSwKLQkgIGRkYjUwNzRfZml4dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1lbW1hMnJoLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTM0Y2QwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1lbW1hMnJoLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgYXJjaC9taXBzL3BjaS9maXh1cC1lbW1hMnJoLmMKKyAqICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIFBDSSBjb25maWdyYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDQtMjAwNgorICoKKyAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvcGNpLmMKKyAqCisgKglDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KKworI2RlZmluZSBFTU1BMlJIX1BDSV9IT1NUX1NMT1QgMHgwOQorI2RlZmluZSBFTU1BMlJIX1VTQl9TTE9UIDB4MDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfRU1NQTJSSCAgICAgIDB4MDE0YiAvKiBFTU1BMlJIIFBDSSBIb3N0ICovCisKKy8qCisgKiB3ZSBmaXggdXAgaXJxcyBiYXNlZCBvbiB0aGUgc2xvdCBudW1iZXIuCisgKiBUaGUgZmlyc3QgZW50cnkgaXMgYXQgQUQ6MTEuCisgKiBGb3J0dW5hdGVseSB0aGlzIHdvcmtzIGJlY2F1c2UsIGFsdGhvdWdoIHdlIGhhdmUgdHdvIHBjaSBidXNlcywKKyAqIHRoZXkgYWxsIGhhdmUgZGlmZmVyZW50IHNsb3QgbnVtYmVycyAoZXhjZXB0IGZvciByb2NraG9wcGVyIHNsb3QgMjAKKyAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cpLgorICoKKyAqLworCisjZGVmaW5lCU1BWF9TTE9UX05VTSAxMAorc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX21hcFtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzNdID0gezAsIE1BUktFSU5TX1BDSV9JUlFfSU5UQiwgTUFSS0VJTlNfUENJX0lSUV9JTlRDLAorCSAgICAgICBNQVJLRUlOU19QQ0lfSVJRX0lOVEQsIDAsfSwKKwlbNF0gPSB7MCwgTUFSS0VJTlNfUENJX0lSUV9JTlRBLCAwLCAwLCAwLH0sCisJWzVdID0gezAsIDAsIDAsIDAsIDAsfSwKKwlbNl0gPSB7MCwgTUFSS0VJTlNfUENJX0lSUV9JTlRDLCBNQVJLRUlOU19QQ0lfSVJRX0lOVEQsCisJICAgICAgIE1BUktFSU5TX1BDSV9JUlFfSU5UQSwgTUFSS0VJTlNfUENJX0lSUV9JTlRCLH0sCit9OworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbmVjX3VzYl9jb250cm9sbGVyX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IEVNTUEyUkhfVVNCX1NMT1QpCisJCS8qIG9uIGJvYXJkIFVTQiBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24gKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4ZTQsIDEgPDwgNSk7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTkVDLCBQQ0lfREVWSUNFX0lEX05FQ19VU0IsCisJCQluZWNfdXNiX2NvbnRyb2xsZXJfZml4dXApOworCisvKgorICogUHJldmVudCB0aGUgUENJIGxheWVyIGZyb20gc2VlaW5nIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoaXMgZGV2aWNlCisgKiBpZiBpdCBpcyB0aGUgaG9zdCBicmlkZ2UgYnkgbWFya2luZyBpdCBhcyBzdWNoLiAgVGhlc2UgcmVzb3VyY2VzIGFyZSBvZgorICogbm8gY29uc2VxdWVuY2UgdG8gdGhlIFBDSSBsYXllciAodGhleSBhcmUgaGFuZGxlZCBlbHNld2hlcmUpLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZW1tYTJyaF9wY2lfaG9zdF9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpOworCisJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IEVNTUEyUkhfUENJX0hPU1RfU0xPVCkgeworCQlkZXYtPmNsYXNzICY9IDB4ZmY7CisJCWRldi0+Y2xhc3MgfD0gUENJX0NMQVNTX0JSSURHRV9IT1NUIDw8IDg7CisJCWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUzsgaSsrKSB7CisJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gMDsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gMDsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSAwOworCQl9CisJfQorfQorCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9ORUMsIFBDSV9ERVZJQ0VfSURfTkVDX0VNTUEyUkgsCisJCQkgZW1tYTJyaF9wY2lfaG9zdF9maXh1cCk7CisKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlyZXR1cm4gaXJxX21hcFtzbG90XVtwaW5dOworfQorCisvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCitpbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWV4Y2l0ZS5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1leGNpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGE2OTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1leGNpdGUuYwpAQCAtMCwwICsxLDM2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpZiAocGluID09IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBVU0JfSVJROwkJLyogVVNCIGNvbnRyb2xsZXIgaXMgdGhlIG9ubHkgUENJIGRldmljZSAqLworfQorCisvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCitpbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLXdycHBtYy5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC13cnBwbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzU3YzEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC13cnBwbWMuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogZml4dXAtd3JwcG1jLmM6IFBQTUMgYm9hcmQgc3BlY2lmaWMgUENJIGZpeHVwCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCBXaW5kIFJpdmVyIEluYy4gUm9uZ2thaS56aGFuIChyb25na2FpLnpoYW5Ad2luZHJpdmVyLmNvbSkKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vZ3Q2NDEyMC5oPgorCisvKiBQQ0kgaW50ZXJydXB0IHBpbnMgKi8KKyNkZWZpbmUgUENJX0lOVEEJCTEKKyNkZWZpbmUgUENJX0lOVEIJCTIKKyNkZWZpbmUgUENJX0lOVEMJCTMKKyNkZWZpbmUgUENJX0lOVEQJCTQKKworI2RlZmluZSBQQ0lfU0xPVF9NQVhOUgkzMiAvKiBFYWNoIFBDSSBidXMgaGFzIDMyIHBoeXNpY2FsIHNsb3RzICovCisKK3N0YXRpYyBjaGFyIHBjaV9pcnFfdGFiW1BDSV9TTE9UX01BWE5SXVs1XSBfX2luaXRkYXRhID0geworCS8qIDAgICAgSU5UQSAgIElOVEIgICBJTlRDICAgSU5URCAqLworCVswXSA9IHswLCAwLCAwLCAwLCAwfSwJCS8qIFNsb3QgMDogR1Q2NDEyMCBQQ0kgYnJpZGdlICovCisJWzZdID0gezAsIFdSUFBNQ19QQ0lfSU5UQV9JUlEsIDAsIDAsIDB9LAorfTsKKworaW50IF9faW5pdCBwY2liaW9zX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXJldHVybiBwY2lfaXJxX3RhYltzbG90XVtwaW5dOworfQorCisvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCitpbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1icmlkZ2UuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLWJyaWRnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTA5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL29wcy1icmlkZ2UuYwpAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMDQsIDA2IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vcGFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wY2kvYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vc24vaW50ci5oPgorI2luY2x1ZGUgPGFzbS9zbi9zbjAvaHViLmg+CisKKy8qCisgKiBUaGUgQnJpZGdlIEFTSUMgc3VwcG9ydHMgYm90aCB0eXBlIDAgYW5kIHR5cGUgMSBhY2Nlc3MuICBUeXBlIDEgaXMKKyAqIG5vdCByZWFsbHkgZG9jdW1lbnRlZCwgc28gcmlnaHQgbm93IEkgY2FuJ3Qgd3JpdGUgY29kZSB3aGljaCB1c2VzIGl0LgorICogVGhlcmVmb3JlIHdlIHVzZSB0eXBlIDAgYWNjZXNzZXMgZm9yIG5vdyBldmVuIHRob3VnaCB0aGV5IHdvbid0IHdvcmsKKyAqIGNvcnJlY2x5IGZvciBQQ0ktdG8tUENJIGJyaWRnZXMuCisgKgorICogVGhlIGZ1bmN0aW9uIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZSB1bHRpbWF0ZSBicm9rZW5lc3Mgb2YgdGhlIElPQzMgY2hpcAorICogd2hpY2ggaXMgdXNlZCBpbiBTR0kgc3lzdGVtcy4gIFRoZSBJT0MzIGNhbiBvbmx5IGhhbmRsZSAzMi1iaXQgUENJCisgKiBhY2Nlc3NlcyBhbmQgZG9lcyBvbmx5IGRlY29kZSBwYXJ0cyBvZiBpdCdzIGFkZHJlc3Mgc3BhY2UuCisgKi8KKworc3RhdGljIGludCBwY2lfY29uZjBfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjID0gQlJJREdFX0NPTlRST0xMRVIoYnVzKTsKKwlicmlkZ2VfdCAqYnJpZGdlID0gYmMtPmJhc2U7CisJaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7CisJaW50IGZuID0gUENJX0ZVTkMoZGV2Zm4pOworCXZvbGF0aWxlIHZvaWQgKmFkZHI7CisJdTMyIGNmLCBzaGlmdCwgbWFzazsKKwlpbnQgcmVzOworCisJYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5jW1BDSV9WRU5ET1JfSURdOworCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IGl0IGZvciByZWFsIC4uLgorCSAqLworCWlmIChjZiA9PSAoUENJX1ZFTkRPUl9JRF9TR0kgfCAoUENJX0RFVklDRV9JRF9TR0lfSU9DMyA8PCAxNikpKQorCQlnb3RvIG9oX215X2dhd2Q7CisKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmNbd2hlcmUgXiAoNCAtIHNpemUpXTsKKworCWlmIChzaXplID09IDEpCisJCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTggKikgYWRkcik7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQlyZXMgPSBnZXRfZGJlKCp2YWx1ZSwgKHUxNiAqKSBhZGRyKTsKKwllbHNlCisJCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTMyICopIGFkZHIpOworCisJcmV0dXJuIHJlcyA/IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORCA6IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworb2hfbXlfZ2F3ZDoKKworCS8qCisJICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQorCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCB0aGUgd3JvbmcgcmVnaXN0ZXIuCisJICovCisJaWYgKCh3aGVyZSA+PSAweDE0ICYmIHdoZXJlIDwgMHg0MCkgfHwgKHdoZXJlID49IDB4NDgpKSB7CisJCSp2YWx1ZSA9IDA7CisJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisJfQorCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCB0cnkgdG8gYWNjZXNzCisJICogYW55dGhpbmcgYnV0IDMyLWJpdCB3b3JkcyAuLi4KKwkgKi8KKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmxbd2hlcmUgPj4gMl07CisKKwlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXNoaWZ0ID0gKCh3aGVyZSAmIDMpIDw8IDMpOworCW1hc2sgPSAoMHhmZmZmZmZmZlUgPj4gKCg0IC0gc2l6ZSkgPDwgMykpOworCSp2YWx1ZSA9IChjZiA+PiBzaGlmdCkgJiBtYXNrOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBwY2lfY29uZjFfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjID0gQlJJREdFX0NPTlRST0xMRVIoYnVzKTsKKwlicmlkZ2VfdCAqYnJpZGdlID0gYmMtPmJhc2U7CisJaW50IGJ1c25vID0gYnVzLT5udW1iZXI7CisJaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7CisJaW50IGZuID0gUENJX0ZVTkMoZGV2Zm4pOworCXZvbGF0aWxlIHZvaWQgKmFkZHI7CisJdTMyIGNmLCBzaGlmdCwgbWFzazsKKwlpbnQgcmVzOworCisJYnJpZGdlLT5iX3BjaV9jZmcgPSAoYnVzbm8gPDwgMTYpIHwgKHNsb3QgPDwgMTEpOworCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUxX2NmZy5jWyhmbiA8PCA4KSB8IFBDSV9WRU5ET1JfSURdOworCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IGl0IGZvciByZWFsIC4uLgorCSAqLworCWlmIChjZiA9PSAoUENJX1ZFTkRPUl9JRF9TR0kgfCAoUENJX0RFVklDRV9JRF9TR0lfSU9DMyA8PCAxNikpKQorCQlnb3RvIG9oX215X2dhd2Q7CisKKwlicmlkZ2UtPmJfcGNpX2NmZyA9IChidXNubyA8PCAxNikgfCAoc2xvdCA8PCAxMSk7CisJYWRkciA9ICZicmlkZ2UtPmJfdHlwZTFfY2ZnLmNbKGZuIDw8IDgpIHwgKHdoZXJlIF4gKDQgLSBzaXplKSldOworCisJaWYgKHNpemUgPT0gMSkKKwkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1OCAqKSBhZGRyKTsKKwllbHNlIGlmIChzaXplID09IDIpCisJCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTE2ICopIGFkZHIpOworCWVsc2UKKwkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1MzIgKikgYWRkcik7CisKKwlyZXR1cm4gcmVzID8gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EIDogUENJQklPU19TVUNDRVNTRlVMOworCitvaF9teV9nYXdkOgorCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IHRoZSB3cm9uZyByZWdpc3Rlci4KKwkgKi8KKwlpZiAoKHdoZXJlID49IDB4MTQgJiYgd2hlcmUgPCAweDQwKSB8fCAod2hlcmUgPj0gMHg0OCkpIHsKKwkJKnZhbHVlID0gMDsKKwkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwl9CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IHRyeSB0byBhY2Nlc3MKKwkgKiBhbnl0aGluZyBidXQgMzItYml0IHdvcmRzIC4uLgorCSAqLworCWJyaWRnZS0+Yl9wY2lfY2ZnID0gKGJ1c25vIDw8IDE2KSB8IChzbG90IDw8IDExKTsKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMV9jZmcuY1soZm4gPDwgOCkgfCB3aGVyZV07CisKKwlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXNoaWZ0ID0gKCh3aGVyZSAmIDMpIDw8IDMpOworCW1hc2sgPSAoMHhmZmZmZmZmZlUgPj4gKCg0IC0gc2l6ZSkgPDwgMykpOworCSp2YWx1ZSA9IChjZiA+PiBzaGlmdCkgJiBtYXNrOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBwY2lfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICogdmFsdWUpCit7CisJaWYgKGJ1cy0+bnVtYmVyID4gMCkKKwkJcmV0dXJuIHBjaV9jb25mMV9yZWFkX2NvbmZpZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOworCisJcmV0dXJuIHBjaV9jb25mMF9yZWFkX2NvbmZpZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHBjaV9jb25mMF93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqYmMgPSBCUklER0VfQ09OVFJPTExFUihidXMpOworCWJyaWRnZV90ICpicmlkZ2UgPSBiYy0+YmFzZTsKKwlpbnQgc2xvdCA9IFBDSV9TTE9UKGRldmZuKTsKKwlpbnQgZm4gPSBQQ0lfRlVOQyhkZXZmbik7CisJdm9sYXRpbGUgdm9pZCAqYWRkcjsKKwl1MzIgY2YsIHNoaWZ0LCBtYXNrLCBzbWFzazsKKwlpbnQgcmVzOworCisJYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5jW1BDSV9WRU5ET1JfSURdOworCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IGl0IGZvciByZWFsIC4uLgorCSAqLworCWlmIChjZiA9PSAoUENJX1ZFTkRPUl9JRF9TR0kgfCAoUENJX0RFVklDRV9JRF9TR0lfSU9DMyA8PCAxNikpKQorCQlnb3RvIG9oX215X2dhd2Q7CisKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmNbd2hlcmUgXiAoNCAtIHNpemUpXTsKKworCWlmIChzaXplID09IDEpIHsKKwkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHU4ICopIGFkZHIpOworCX0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7CisJCXJlcyA9IHB1dF9kYmUodmFsdWUsICh1MTYgKikgYWRkcik7CisJfSBlbHNlIHsKKwkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHUzMiAqKSBhZGRyKTsKKwl9CisKKwlpZiAocmVzKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworb2hfbXlfZ2F3ZDoKKworCS8qCisJICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQorCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gdG91Y2ggdGhlIHdyb25nIHJlZ2lzdGVyLgorCSAqLworCWlmICgod2hlcmUgPj0gMHgxNCAmJiB3aGVyZSA8IDB4NDApIHx8ICh3aGVyZSA+PSAweDQ4KSkKKwkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworCS8qCisJICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgdHJ5IHRvIGFjY2VzcworCSAqIGFueXRoaW5nIGJ1dCAzMi1iaXQgd29yZHMgLi4uCisJICovCisJYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5sW3doZXJlID4+IDJdOworCisJaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlzaGlmdCA9ICgod2hlcmUgJiAzKSA8PCAzKTsKKwltYXNrID0gKDB4ZmZmZmZmZmZVID4+ICgoNCAtIHNpemUpIDw8IDMpKTsKKwlzbWFzayA9IG1hc2sgPDwgc2hpZnQ7CisKKwljZiA9IChjZiAmIH5zbWFzaykgfCAoKHZhbHVlICYgbWFzaykgPDwgc2hpZnQpOworCWlmIChwdXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBwY2lfY29uZjFfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjID0gQlJJREdFX0NPTlRST0xMRVIoYnVzKTsKKwlicmlkZ2VfdCAqYnJpZGdlID0gYmMtPmJhc2U7CisJaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7CisJaW50IGZuID0gUENJX0ZVTkMoZGV2Zm4pOworCWludCBidXNubyA9IGJ1cy0+bnVtYmVyOworCXZvbGF0aWxlIHZvaWQgKmFkZHI7CisJdTMyIGNmLCBzaGlmdCwgbWFzaywgc21hc2s7CisJaW50IHJlczsKKworCWJyaWRnZS0+Yl9wY2lfY2ZnID0gKGJ1c25vIDw8IDE2KSB8IChzbG90IDw8IDExKTsKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMV9jZmcuY1soZm4gPDwgOCkgfCBQQ0lfVkVORE9SX0lEXTsKKwlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCS8qCisJICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQorCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCBpdCBmb3IgcmVhbCAuLi4KKwkgKi8KKwlpZiAoY2YgPT0gKFBDSV9WRU5ET1JfSURfU0dJIHwgKFBDSV9ERVZJQ0VfSURfU0dJX0lPQzMgPDwgMTYpKSkKKwkJZ290byBvaF9teV9nYXdkOworCisJYWRkciA9ICZicmlkZ2UtPmJfdHlwZTFfY2ZnLmNbKGZuIDw8IDgpIHwgKHdoZXJlIF4gKDQgLSBzaXplKSldOworCisJaWYgKHNpemUgPT0gMSkgeworCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTggKikgYWRkcik7CisJfSBlbHNlIGlmIChzaXplID09IDIpIHsKKwkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHUxNiAqKSBhZGRyKTsKKwl9IGVsc2UgeworCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTMyICopIGFkZHIpOworCX0KKworCWlmIChyZXMpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworCitvaF9teV9nYXdkOgorCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byB0b3VjaCB0aGUgd3JvbmcgcmVnaXN0ZXIuCisJICovCisJaWYgKCh3aGVyZSA+PSAweDE0ICYmIHdoZXJlIDwgMHg0MCkgfHwgKHdoZXJlID49IDB4NDgpKQorCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCB0cnkgdG8gYWNjZXNzCisJICogYW55dGhpbmcgYnV0IDMyLWJpdCB3b3JkcyAuLi4KKwkgKi8KKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmxbd2hlcmUgPj4gMl07CisKKwlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXNoaWZ0ID0gKCh3aGVyZSAmIDMpIDw8IDMpOworCW1hc2sgPSAoMHhmZmZmZmZmZlUgPj4gKCg0IC0gc2l6ZSkgPDwgMykpOworCXNtYXNrID0gbWFzayA8PCBzaGlmdDsKKworCWNmID0gKGNmICYgfnNtYXNrKSB8ICgodmFsdWUgJiBtYXNrKSA8PCBzaGlmdCk7CisJaWYgKHB1dF9kYmUoY2YsICh1MzIgKikgYWRkcikpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWx1ZSkKK3sKKwlpZiAoYnVzLT5udW1iZXIgPiAwKQorCQlyZXR1cm4gcGNpX2NvbmYxX3dyaXRlX2NvbmZpZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOworCisJcmV0dXJuIHBjaV9jb25mMF93cml0ZV9jb25maWcoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKK30KKworc3RydWN0IHBjaV9vcHMgYnJpZGdlX3BjaV9vcHMgPSB7CisJLnJlYWQJPSBwY2lfcmVhZF9jb25maWcsCisJLndyaXRlCT0gcGNpX3dyaXRlX2NvbmZpZywKK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1kZGI1MDc0LmMgYi9hcmNoL21pcHMvcGNpL29wcy1kZGI1MDc0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5Zjk3YmVmNC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1kZGI1MDc0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9wY2lfb3BzLmMKLSAqICAgICBEZWZpbmUgdGhlIHBjaV9vcHMgZm9yIERCNTQ3Ny4KLSAqCi0gKiBNdWNoIG9mIHRoZSBjb2RlIGlzIGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgRERCNTA3NCBwb3J0IGJ5Ci0gKiBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLQotLyoKLSAqIGNvbmZpZ19zd2FwIHN0cnVjdHVyZSByZWNvcmRzIHdoYXQgc2V0IG9mIHBkYXIvcG1yIGFyZSB1c2VkCi0gKiB0byBhY2Nlc3MgcGNpIGNvbmZpZyBzcGFjZS4gIEl0IGFsc28gcHJvdmlkZXMgYSBwbGFjZSBob2xkIHRoZQotICogb3JpZ2luYWwgdmFsdWVzIGZvciBmdXR1cmUgcmVzdG9yaW5nLgotICovCi1zdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwIHsKLQl1MzIgcGRhcjsKLQl1MzIgcG1yOwotCXUzMiBjb25maWdfYmFzZTsKLQl1MzIgY29uZmlnX3NpemU7Ci0JdTMyIHBkYXJfYmFja3VwOwotCXUzMiBwbXJfYmFja3VwOwotfTsKLQotLyoKLSAqIE9uIEREQjU0NzYsIHdlIGhhdmUgb25lIHNldCBvZiBzd2FwIHJlZ2lzdGVycwotICovCi1zdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwIGV4dF9wY2lfc3dhcCA9IHsKLQlEREJfUENJVzAsCi0JRERCX1BDSUlOSVQwLAotCUREQl9QQ0lfQ09ORklHX0JBU0UsCi0JRERCX1BDSV9DT05GSUdfU0laRQotfTsKLQotc3RhdGljIGludCBwY2lfY29uZmlnX3dvcmthcm91bmQgPSAxOwotCi0vKgotICogYWNjZXNzIGNvbmZpZyBzcGFjZQotICovCi1zdGF0aWMgaW5saW5lIHUzMiBkZGJfYWNjZXNzX2NvbmZpZ19iYXNlKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsIHUzMiBidXMsCS8qIDAgbWVhbnMgdG9wIGxldmVsIGJ1cyAqLwotCQkJCQkgdTMyIHNsb3RfbnVtKQotewotCXUzMiBwY2lfYWRkciA9IDA7Ci0JdTMyIHBjaWluaXRfb2Zmc2V0ID0gMDsKLQl1MzIgdmlydF9hZGRyID0gc3dhcC0+Y29uZmlnX2Jhc2U7Ci0JdTMyIG9wdGlvbjsKLQotCWlmIChwY2lfY29uZmlnX3dvcmthcm91bmQpIHsKLQkJaWYgKHNsb3RfbnVtID09IDUpCi0JCQlzbG90X251bSA9IDE0OwotCX0gZWxzZSB7Ci0JCWlmIChzbG90X251bSA9PSA1KQotCQkJcmV0dXJuIEREQl9CQVNFICsgRERCX1BDSV9CQVNFOwotCX0KLQotCS8qIG1pbmltdW0gcGRhciAod2luZG93KSBzaXplIGlzIDJNQiAqLwotCWRiX2Fzc2VydChzd2FwLT5jb25maWdfc2l6ZSA+PSAoMiA8PCAyMCkpOwotCi0JZGJfYXNzZXJ0KHNsb3RfbnVtIDwgKDEgPDwgNSkpOwotCWRiX2Fzc2VydChidXMgPCAoMSA8PCA4KSk7Ci0KLQkvKiBiYWNrdXAgcmVnaXN0ZXJzICovCi0Jc3dhcC0+cGRhcl9iYWNrdXAgPSBkZGJfaW4zMihzd2FwLT5wZGFyKTsKLQlzd2FwLT5wbXJfYmFja3VwID0gZGRiX2luMzIoc3dhcC0+cG1yKTsKLQotCS8qIHNldCB0aGUgcGRhciAocGNpIHdpbmRvdykgcmVnaXN0ZXIgKi8KLQlkZGJfc2V0X3BkYXIoc3dhcC0+cGRhciwgc3dhcC0+Y29uZmlnX2Jhc2UsIHN3YXAtPmNvbmZpZ19zaXplLCAzMiwJLyogMzIgYml0IHdpZGUgKi8KLQkJICAgICAwLAkJLyogbm90IG9uIGxvY2FsIG1lbW9yeSBidXMgKi8KLQkJICAgICAwKTsJLyogbm90IHZpc2libGUgZnJvbSBQQ0kgYnVzIChOL0EpICovCi0KLQkvKgotCSAqIGNhbGN1YXRlIHRoZSBhYnNvbHV0ZSBwY2kgY29uZmlnIGFkZHI7Ci0JICogYWNjb3JkaW5nIHRvIHRoZSBzcGVjLCB3ZSBzdGFydCBzY2FubmluZyBmcm9tIGFkcjoxMSAoMHg4MDApCi0JICovCi0JaWYgKGJ1cyA9PSAwKSB7Ci0JCS8qIHR5cGUgMCBjb25maWcgKi8KLQkJcGNpX2FkZHIgPSAweDAwMDQwMDAwIDw8IHNsb3RfbnVtOwotCX0gZWxzZSB7Ci0JCS8qIHR5cGUgMSBjb25maWcgKi8KLQkJcGNpX2FkZHIgPSAweDAwMDQwMDAwIDw8IHNsb3RfbnVtOwotCQlwYW5pYwotCQkgICAgKCJkZGJfYWNjZXNzX2NvbmZpZ19iYXNlOiB3ZSBkb24ndCBzdXBwb3J0IHR5cGUgMSBjb25maWcgWWV0Iik7Ci0JfQotCi0JLyoKLQkgKiBpZiBwY2lfYWRkciBpcyBsZXNzIHRoYW4gcGNpIGNvbmZpZyB3aW5kb3cgc2l6ZSwgIHdlIHNldAotCSAqIHBjaWluaXRfb2Zmc2V0IHRvIDAgYW5kIGFkanVzdCB0aGUgdmlydF9hZGRyZXNzLgotCSAqIE90aGVyd2lzZSB3ZSB3aWxsIHRyeSB0byBhZGp1c3QgcGNpaW5pdF9vZmZzZXQuCi0JICovCi0JaWYgKHBjaV9hZGRyIDwgc3dhcC0+Y29uZmlnX3NpemUpIHsKLQkJdmlydF9hZGRyID0gS1NFRzFBRERSKHN3YXAtPmNvbmZpZ19iYXNlICsgcGNpX2FkZHIpOwotCQlwY2lpbml0X29mZnNldCA9IDA7Ci0JfSBlbHNlIHsKLQkJZGJfYXNzZXJ0KChwY2lfYWRkciAmIChzd2FwLT5jb25maWdfc2l6ZSAtIDEpKSA9PSAwKTsKLQkJdmlydF9hZGRyID0gS1NFRzFBRERSKHN3YXAtPmNvbmZpZ19iYXNlKTsKLQkJcGNpaW5pdF9vZmZzZXQgPSBwY2lfYWRkcjsKLQl9Ci0KLQkvKiBzZXQgdGhlIHBtciByZWdpc3RlciAqLwotCW9wdGlvbiA9IEREQl9QQ0lfQUNDRVNTXzMyOwotCWlmIChidXMgIT0gMCkKLQkJb3B0aW9uIHw9IEREQl9QQ0lfQ0ZHVFlQRTE7Ci0JZGRiX3NldF9wbXIoc3dhcC0+cG1yLCBEREJfUENJQ01EX0NGRywgcGNpaW5pdF9vZmZzZXQsIG9wdGlvbik7Ci0KLQlyZXR1cm4gdmlydF9hZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGRiX2Nsb3NlX2NvbmZpZ19iYXNlKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXApCi17Ci0JZGRiX291dDMyKHN3YXAtPnBkYXIsIHN3YXAtPnBkYXJfYmFja3VwKTsKLQlkZGJfb3V0MzIoc3dhcC0+cG1yLCBzd2FwLT5wbXJfYmFja3VwKTsKLX0KLQotc3RhdGljIGludCByZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHUzMiAqIHZhbCkKLXsKLQl1MzIgYnVzLCBzbG90X251bSwgZnVuY19udW07Ci0JdTMyIGJhc2U7Ci0KLQlkYl9hc3NlcnQoKHdoZXJlICYgMykgPT0gMCk7Ci0JZGJfYXNzZXJ0KHdoZXJlIDwgKDEgPDwgOCkpOwotCi0JLyogY2hlY2sgaWYgdGhlIGJ1cyBpcyB0b3AtbGV2ZWwgKi8KLQlpZiAoZGV2LT5idXMtPnBhcmVudCAhPSBOVUxMKSB7Ci0JCWJ1cyA9IGRldi0+YnVzLT5udW1iZXI7Ci0JCWRiX2Fzc2VydChidXMgIT0gMCk7Ci0JfSBlbHNlIHsKLQkJYnVzID0gMDsKLQl9Ci0KLQlzbG90X251bSA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOwotCWZ1bmNfbnVtID0gUENJX0ZVTkMoZGV2LT5kZXZmbik7Ci0JYmFzZSA9IGRkYl9hY2Nlc3NfY29uZmlnX2Jhc2Uoc3dhcCwgYnVzLCBzbG90X251bSk7Ci0JKnZhbCA9ICoodm9sYXRpbGUgdTMyICopIChiYXNlICsgKGZ1bmNfbnVtIDw8IDgpICsgd2hlcmUpOwotCWRkYl9jbG9zZV9jb25maWdfYmFzZShzd2FwKTsKLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHJlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHUxNiAqIHZhbCkKLXsKLQlpbnQgc3RhdHVzOwotCXUzMiByZXN1bHQ7Ci0KLQlkYl9hc3NlcnQoKHdoZXJlICYgMSkgPT0gMCk7Ci0KLQlzdGF0dXMgPSByZWFkX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsICZyZXN1bHQpOwotCWlmICh3aGVyZSAmIDIpCi0JCXJlc3VsdCA+Pj0gMTY7Ci0JKnZhbCA9IHJlc3VsdCAmIDB4ZmZmZjsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IHJlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHU4ICogdmFsKQotewotCWludCBzdGF0dXM7Ci0JdTMyIHJlc3VsdDsKLQotCXN0YXR1cyA9IHJlYWRfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgJnJlc3VsdCk7Ci0JaWYgKHdoZXJlICYgMSkKLQkJcmVzdWx0ID4+PSA4OwotCWlmICh3aGVyZSAmIDIpCi0JCXJlc3VsdCA+Pj0gMTY7Ci0JKnZhbCA9IHJlc3VsdCAmIDB4ZmY7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCB3cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB3aGVyZSwgdTMyIHZhbCkKLXsKLQl1MzIgYnVzLCBzbG90X251bSwgZnVuY19udW07Ci0JdTMyIGJhc2U7Ci0KLQlkYl9hc3NlcnQoKHdoZXJlICYgMykgPT0gMCk7Ci0JZGJfYXNzZXJ0KHdoZXJlIDwgKDEgPDwgOCkpOwotCi0JLyogY2hlY2sgaWYgdGhlIGJ1cyBpcyB0b3AtbGV2ZWwgKi8KLQlpZiAoZGV2LT5idXMtPnBhcmVudCAhPSBOVUxMKSB7Ci0JCWJ1cyA9IGRldi0+YnVzLT5udW1iZXI7Ci0JCWRiX2Fzc2VydChidXMgIT0gMCk7Ci0JfSBlbHNlIHsKLQkJYnVzID0gMDsKLQl9Ci0KLQlzbG90X251bSA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOwotCWZ1bmNfbnVtID0gUENJX0ZVTkMoZGV2LT5kZXZmbik7Ci0JYmFzZSA9IGRkYl9hY2Nlc3NfY29uZmlnX2Jhc2Uoc3dhcCwgYnVzLCBzbG90X251bSk7Ci0JKih2b2xhdGlsZSB1MzIgKikgKGJhc2UgKyAoZnVuY19udW0gPDwgOCkgKyB3aGVyZSkgPSB2YWw7Ci0JZGRiX2Nsb3NlX2NvbmZpZ19iYXNlKHN3YXApOwotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHdoZXJlLCB1MTYgdmFsKQotewotCWludCBzdGF0dXMsIHNoaWZ0ID0gMDsKLQl1MzIgcmVzdWx0OwotCi0JZGJfYXNzZXJ0KCh3aGVyZSAmIDEpID09IDApOwotCi0Jc3RhdHVzID0gcmVhZF9jb25maWdfZHdvcmQoc3dhcCwgZGV2LCB3aGVyZSAmIH4zLCAmcmVzdWx0KTsKLQlpZiAoc3RhdHVzICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKLQkJcmV0dXJuIHN0YXR1czsKLQotCWlmICh3aGVyZSAmIDIpCi0JCXNoaWZ0ICs9IDE2OwotCXJlc3VsdCAmPSB+KDB4ZmZmZiA8PCBzaGlmdCk7Ci0JcmVzdWx0IHw9IHZhbCA8PCBzaGlmdDsKLQlyZXR1cm4gd3JpdGVfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgcmVzdWx0KTsKLX0KLQotc3RhdGljIGludCB3cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHU4IHZhbCkKLXsKLQlpbnQgc3RhdHVzLCBzaGlmdCA9IDA7Ci0JdTMyIHJlc3VsdDsKLQotCXN0YXR1cyA9IHJlYWRfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgJnJlc3VsdCk7Ci0JaWYgKHN0YXR1cyAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAod2hlcmUgJiAyKQotCQlzaGlmdCArPSAxNjsKLQlpZiAod2hlcmUgJiAxKQotCQlzaGlmdCArPSA4OwotCXJlc3VsdCAmPSB+KDB4ZmYgPDwgc2hpZnQpOwotCXJlc3VsdCB8PSB2YWwgPDwgc2hpZnQ7Ci0JcmV0dXJuIHdyaXRlX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsIHJlc3VsdCk7Ci19Ci0KLSNkZWZpbmUJTUFLRV9QQ0lfT1BTKHByZWZpeCwgcncsIHVuaXRuYW1lLCB1bml0dHlwZSwgcGNpc3dhcCkgXAotc3RhdGljIGludCBwcmVmaXgjI18jI3J3IyNfY29uZmlnXyMjdW5pdG5hbWUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1bml0dHlwZSB2YWwpIFwKLXsgXAotICAgICByZXR1cm4gcncjI19jb25maWdfIyN1bml0bmFtZShwY2lzd2FwLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwpOyBcCi19Ci0KLU1BS0VfUENJX09QUyhleHRwY2ksIHJlYWQsIGJ5dGUsIHU4ICosICZleHRfcGNpX3N3YXApCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgcmVhZCwgd29yZCwgdTE2ICosICZleHRfcGNpX3N3YXApCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgcmVhZCwgZHdvcmQsIHUzMiAqLCAmZXh0X3BjaV9zd2FwKQotCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgd3JpdGUsIGJ5dGUsIHU4LCAmZXh0X3BjaV9zd2FwKQotICAgIE1BS0VfUENJX09QUyhleHRwY2ksIHdyaXRlLCB3b3JkLCB1MTYsICZleHRfcGNpX3N3YXApCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgd3JpdGUsIGR3b3JkLCB1MzIsICZleHRfcGNpX3N3YXApCi0KLXN0cnVjdCBwY2lfb3BzIGRkYjU0NzZfZXh0X3BjaV9vcHMgPSB7Ci0JZXh0cGNpX3JlYWRfY29uZmlnX2J5dGUsCi0JZXh0cGNpX3JlYWRfY29uZmlnX3dvcmQsCi0JZXh0cGNpX3JlYWRfY29uZmlnX2R3b3JkLAotCWV4dHBjaV93cml0ZV9jb25maWdfYnl0ZSwKLQlleHRwY2lfd3JpdGVfY29uZmlnX3dvcmQsCi0JZXh0cGNpX3dyaXRlX2NvbmZpZ19kd29yZAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWRkYjU0NzYuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLWRkYjU0NzYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkYTU4ZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1kZGI1NDc2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9wY2lfb3BzLmMKLSAqICAgICBEZWZpbmUgdGhlIHBjaV9vcHMgZm9yIERCNTQ3Ny4KLSAqCi0gKiBNdWNoIG9mIHRoZSBjb2RlIGlzIGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgRERCNTA3NCBwb3J0IGJ5Ci0gKiBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLQotLyoKLSAqIGNvbmZpZ19zd2FwIHN0cnVjdHVyZSByZWNvcmRzIHdoYXQgc2V0IG9mIHBkYXIvcG1yIGFyZSB1c2VkCi0gKiB0byBhY2Nlc3MgcGNpIGNvbmZpZyBzcGFjZS4gIEl0IGFsc28gcHJvdmlkZXMgYSBwbGFjZSBob2xkIHRoZQotICogb3JpZ2luYWwgdmFsdWVzIGZvciBmdXR1cmUgcmVzdG9yaW5nLgotICovCi1zdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwIHsKLQl1MzIgcGRhcjsKLQl1MzIgcG1yOwotCXUzMiBjb25maWdfYmFzZTsKLQl1MzIgY29uZmlnX3NpemU7Ci0JdTMyIHBkYXJfYmFja3VwOwotCXUzMiBwbXJfYmFja3VwOwotfTsKLQotLyoKLSAqIE9uIEREQjU0NzYsIHdlIGhhdmUgb25lIHNldCBvZiBzd2FwIHJlZ2lzdGVycwotICovCi1zdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwIGV4dF9wY2lfc3dhcCA9IHsKLQlEREJfUENJVzAsCi0JRERCX1BDSUlOSVQwLAotCUREQl9QQ0lfQ09ORklHX0JBU0UsCi0JRERCX1BDSV9DT05GSUdfU0laRQotfTsKLQotc3RhdGljIGludCBwY2lfY29uZmlnX3dvcmthcm91bmQgPSAxOwotCi0vKgotICogYWNjZXNzIGNvbmZpZyBzcGFjZQotICovCi1zdGF0aWMgaW5saW5lIHUzMiBkZGJfYWNjZXNzX2NvbmZpZ19iYXNlKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsIHUzMiBidXMsCS8qIDAgbWVhbnMgdG9wIGxldmVsIGJ1cyAqLwotCQkJCQkgdTMyIHNsb3RfbnVtKQotewotCXUzMiBwY2lfYWRkciA9IDA7Ci0JdTMyIHBjaWluaXRfb2Zmc2V0ID0gMDsKLQl1MzIgdmlydF9hZGRyID0gc3dhcC0+Y29uZmlnX2Jhc2U7Ci0JdTMyIG9wdGlvbjsKLQotCWlmIChwY2lfY29uZmlnX3dvcmthcm91bmQpIHsKLQkJLyogW2pzdW5dIHdvcmsgYXJvdW5kIFZyYzU0NzYgY29udHJvbGxlciBpdHNlbGYsIHJldHVybm5pbmcKLQkJICogc2xvdCAwIGVzc2VudGlhbGx5IG1ha2VzIHZyYzU0NzYgaW52aXNpYmxlCi0JCSAqLwotCQlpZiAoc2xvdF9udW0gPT0gMTIpCi0JCQlzbG90X251bSA9IDA7Ci0KLSNpZiAwCi0JCS8qIEJVRyA6IHNraXAgUDJQIGJyaWRnZSBmb3Igbm93ICovCi0JCWlmIChzbG90X251bSA9PSA1KQotCQkJc2xvdF9udW0gPSAwOwotI2VuZGlmCi0KLQl9IGVsc2UgewotCQkvKiBub3cgd2UgaGF2ZSB0byBiZSBob3JuZXN0LCByZXR1cm5pbmcgdGhlIHRydWUKLQkJICogUENJIGNvbmZpZyBoZWFkZXJzIGZvciB2cmM1NDc2Ci0JCSAqLwotCQlpZiAoc2xvdF9udW0gPT0gMTIpIHsKLQkJCXN3YXAtPnBkYXJfYmFja3VwID0gZGRiX2luMzIoc3dhcC0+cGRhcik7Ci0JCQlzd2FwLT5wbXJfYmFja3VwID0gZGRiX2luMzIoc3dhcC0+cG1yKTsKLQkJCXJldHVybiBEREJfQkFTRSArIEREQl9QQ0lfQkFTRTsKLQkJfQotCX0KLQotCS8qIG1pbmltdW0gcGRhciAod2luZG93KSBzaXplIGlzIDJNQiAqLwotCWRiX2Fzc2VydChzd2FwLT5jb25maWdfc2l6ZSA+PSAoMiA8PCAyMCkpOwotCi0JZGJfYXNzZXJ0KHNsb3RfbnVtIDwgKDEgPDwgNSkpOwotCWRiX2Fzc2VydChidXMgPCAoMSA8PCA4KSk7Ci0KLQkvKiBiYWNrdXAgcmVnaXN0ZXJzICovCi0Jc3dhcC0+cGRhcl9iYWNrdXAgPSBkZGJfaW4zMihzd2FwLT5wZGFyKTsKLQlzd2FwLT5wbXJfYmFja3VwID0gZGRiX2luMzIoc3dhcC0+cG1yKTsKLQotCS8qIHNldCB0aGUgcGRhciAocGNpIHdpbmRvdykgcmVnaXN0ZXIgKi8KLQlkZGJfc2V0X3BkYXIoc3dhcC0+cGRhciwgc3dhcC0+Y29uZmlnX2Jhc2UsIHN3YXAtPmNvbmZpZ19zaXplLCAzMiwJLyogMzIgYml0IHdpZGUgKi8KLQkJICAgICAwLAkJLyogbm90IG9uIGxvY2FsIG1lbW9yeSBidXMgKi8KLQkJICAgICAwKTsJLyogbm90IHZpc2libGUgZnJvbSBQQ0kgYnVzIChOL0EpICovCi0KLQkvKgotCSAqIGNhbGN1YXRlIHRoZSBhYnNvbHV0ZSBwY2kgY29uZmlnIGFkZHI7Ci0JICogYWNjb3JkaW5nIHRvIHRoZSBzcGVjLCB3ZSBzdGFydCBzY2FubmluZyBmcm9tIGFkcjoxMSAoMHg4MDApCi0JICovCi0JaWYgKGJ1cyA9PSAwKSB7Ci0JCS8qIHR5cGUgMCBjb25maWcgKi8KLQkJcGNpX2FkZHIgPSAweDgwMCA8PCBzbG90X251bTsKLQl9IGVsc2UgewotCQkvKiB0eXBlIDEgY29uZmlnICovCi0JCXBjaV9hZGRyID0gKGJ1cyA8PCAxNikgfCAoc2xvdF9udW0gPDwgMTEpOwotCQkvKiBwYW5pYygiZGRiX2FjY2Vzc19jb25maWdfYmFzZTogd2UgZG9uJ3Qgc3VwcG9ydCB0eXBlIDEgY29uZmlnIFlldCIpOyAqLwotCX0KLQotCS8qCi0JICogaWYgcGNpX2FkZHIgaXMgbGVzcyB0aGFuIHBjaSBjb25maWcgd2luZG93IHNpemUsICB3ZSBzZXQKLQkgKiBwY2lpbml0X29mZnNldCB0byAwIGFuZCBhZGp1c3QgdGhlIHZpcnRfYWRkcmVzcy4KLQkgKiBPdGhlcndpc2Ugd2Ugd2lsbCB0cnkgdG8gYWRqdXN0IHBjaWluaXRfb2Zmc2V0LgotCSAqLwotCWlmIChwY2lfYWRkciA8IHN3YXAtPmNvbmZpZ19zaXplKSB7Ci0JCXZpcnRfYWRkciA9IEtTRUcxQUREUihzd2FwLT5jb25maWdfYmFzZSArIHBjaV9hZGRyKTsKLQkJcGNpaW5pdF9vZmZzZXQgPSAwOwotCX0gZWxzZSB7Ci0JCWRiX2Fzc2VydCgocGNpX2FkZHIgJiAoc3dhcC0+Y29uZmlnX3NpemUgLSAxKSkgPT0gMCk7Ci0JCXZpcnRfYWRkciA9IEtTRUcxQUREUihzd2FwLT5jb25maWdfYmFzZSk7Ci0JCXBjaWluaXRfb2Zmc2V0ID0gcGNpX2FkZHI7Ci0JfQotCi0JLyogc2V0IHRoZSBwbXIgcmVnaXN0ZXIgKi8KLQlvcHRpb24gPSBEREJfUENJX0FDQ0VTU18zMjsKLQlpZiAoYnVzICE9IDApCi0JCW9wdGlvbiB8PSBEREJfUENJX0NGR1RZUEUxOwotCWRkYl9zZXRfcG1yKHN3YXAtPnBtciwgRERCX1BDSUNNRF9DRkcsIHBjaWluaXRfb2Zmc2V0LCBvcHRpb24pOwotCi0JcmV0dXJuIHZpcnRfYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRkYl9jbG9zZV9jb25maWdfYmFzZShzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwKQotewotCWRkYl9vdXQzMihzd2FwLT5wZGFyLCBzd2FwLT5wZGFyX2JhY2t1cCk7Ci0JZGRiX291dDMyKHN3YXAtPnBtciwgc3dhcC0+cG1yX2JhY2t1cCk7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHdoZXJlLCB1MzIgKiB2YWwpCi17Ci0JdTMyIGJ1cywgc2xvdF9udW0sIGZ1bmNfbnVtOwotCXUzMiBiYXNlOwotCi0JZGJfYXNzZXJ0KCh3aGVyZSAmIDMpID09IDApOwotCWRiX2Fzc2VydCh3aGVyZSA8ICgxIDw8IDgpKTsKLQotCS8qIGNoZWNrIGlmIHRoZSBidXMgaXMgdG9wLWxldmVsICovCi0JaWYgKGRldi0+YnVzLT5wYXJlbnQgIT0gTlVMTCkgewotCQlidXMgPSBkZXYtPmJ1cy0+bnVtYmVyOwotCQlkYl9hc3NlcnQoYnVzICE9IDApOwotCX0gZWxzZSB7Ci0JCWJ1cyA9IDA7Ci0JfQotCi0Jc2xvdF9udW0gPSBQQ0lfU0xPVChkZXYtPmRldmZuKTsKLQlmdW5jX251bSA9IFBDSV9GVU5DKGRldi0+ZGV2Zm4pOwotCWJhc2UgPSBkZGJfYWNjZXNzX2NvbmZpZ19iYXNlKHN3YXAsIGJ1cywgc2xvdF9udW0pOwotCSp2YWwgPSAqKHZvbGF0aWxlIHUzMiAqKSAoYmFzZSArIChmdW5jX251bSA8PCA4KSArIHdoZXJlKTsKLQlkZGJfY2xvc2VfY29uZmlnX2Jhc2Uoc3dhcCk7Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCByZWFkX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsCi0JCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHdoZXJlLCB1MTYgKiB2YWwpCi17Ci0JaW50IHN0YXR1czsKLQl1MzIgcmVzdWx0OwotCi0JZGJfYXNzZXJ0KCh3aGVyZSAmIDEpID09IDApOwotCi0Jc3RhdHVzID0gcmVhZF9jb25maWdfZHdvcmQoc3dhcCwgZGV2LCB3aGVyZSAmIH4zLCAmcmVzdWx0KTsKLQlpZiAod2hlcmUgJiAyKQotCQlyZXN1bHQgPj49IDE2OwotCSp2YWwgPSByZXN1bHQgJiAweGZmZmY7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCByZWFkX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsCi0JCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHdoZXJlLCB1OCAqIHZhbCkKLXsKLQlpbnQgc3RhdHVzOwotCXUzMiByZXN1bHQ7Ci0KLQlzdGF0dXMgPSByZWFkX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsICZyZXN1bHQpOwotCWlmICh3aGVyZSAmIDEpCi0JCXJlc3VsdCA+Pj0gODsKLQlpZiAod2hlcmUgJiAyKQotCQlyZXN1bHQgPj49IDE2OwotCSp2YWwgPSByZXN1bHQgJiAweGZmOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsCi0JCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHUzMiB2YWwpCi17Ci0JdTMyIGJ1cywgc2xvdF9udW0sIGZ1bmNfbnVtOwotCXUzMiBiYXNlOwotCi0JZGJfYXNzZXJ0KCh3aGVyZSAmIDMpID09IDApOwotCWRiX2Fzc2VydCh3aGVyZSA8ICgxIDw8IDgpKTsKLQotCS8qIGNoZWNrIGlmIHRoZSBidXMgaXMgdG9wLWxldmVsICovCi0JaWYgKGRldi0+YnVzLT5wYXJlbnQgIT0gTlVMTCkgewotCQlidXMgPSBkZXYtPmJ1cy0+bnVtYmVyOwotCQlkYl9hc3NlcnQoYnVzICE9IDApOwotCX0gZWxzZSB7Ci0JCWJ1cyA9IDA7Ci0JfQotCi0Jc2xvdF9udW0gPSBQQ0lfU0xPVChkZXYtPmRldmZuKTsKLQlmdW5jX251bSA9IFBDSV9GVU5DKGRldi0+ZGV2Zm4pOwotCWJhc2UgPSBkZGJfYWNjZXNzX2NvbmZpZ19iYXNlKHN3YXAsIGJ1cywgc2xvdF9udW0pOwotCSoodm9sYXRpbGUgdTMyICopIChiYXNlICsgKGZ1bmNfbnVtIDw8IDgpICsgd2hlcmUpID0gdmFsOwotCWRkYl9jbG9zZV9jb25maWdfYmFzZShzd2FwKTsKLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsCi0JCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB3aGVyZSwgdTE2IHZhbCkKLXsKLQlpbnQgc3RhdHVzLCBzaGlmdCA9IDA7Ci0JdTMyIHJlc3VsdDsKLQotCWRiX2Fzc2VydCgod2hlcmUgJiAxKSA9PSAwKTsKLQotCXN0YXR1cyA9IHJlYWRfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgJnJlc3VsdCk7Ci0JaWYgKHN0YXR1cyAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAod2hlcmUgJiAyKQotCQlzaGlmdCArPSAxNjsKLQlyZXN1bHQgJj0gfigweGZmZmYgPDwgc2hpZnQpOwotCXJlc3VsdCB8PSB2YWwgPDwgc2hpZnQ7Ci0JcmV0dXJuIHdyaXRlX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsIHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHdoZXJlLCB1OCB2YWwpCi17Ci0JaW50IHN0YXR1cywgc2hpZnQgPSAwOwotCXUzMiByZXN1bHQ7Ci0KLQlzdGF0dXMgPSByZWFkX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsICZyZXN1bHQpOwotCWlmIChzdGF0dXMgIT0gUENJQklPU19TVUNDRVNTRlVMKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKHdoZXJlICYgMikKLQkJc2hpZnQgKz0gMTY7Ci0JaWYgKHdoZXJlICYgMSkKLQkJc2hpZnQgKz0gODsKLQlyZXN1bHQgJj0gfigweGZmIDw8IHNoaWZ0KTsKLQlyZXN1bHQgfD0gdmFsIDw8IHNoaWZ0OwotCXJldHVybiB3cml0ZV9jb25maWdfZHdvcmQoc3dhcCwgZGV2LCB3aGVyZSAmIH4zLCByZXN1bHQpOwotfQotCi0jZGVmaW5lCU1BS0VfUENJX09QUyhwcmVmaXgsIHJ3LCB1bml0bmFtZSwgdW5pdHR5cGUsIHBjaXN3YXApIFwKLXN0YXRpYyBpbnQgcHJlZml4IyNfIyNydyMjX2NvbmZpZ18jI3VuaXRuYW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdW5pdHR5cGUgdmFsKSBcCi17IFwKLSAgICAgcmV0dXJuIHJ3IyNfY29uZmlnXyMjdW5pdG5hbWUocGNpc3dhcCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsKTsgXAotfQotCi1NQUtFX1BDSV9PUFMoZXh0cGNpLCByZWFkLCBieXRlLCB1OCAqLCAmZXh0X3BjaV9zd2FwKQotICAgIE1BS0VfUENJX09QUyhleHRwY2ksIHJlYWQsIHdvcmQsIHUxNiAqLCAmZXh0X3BjaV9zd2FwKQotICAgIE1BS0VfUENJX09QUyhleHRwY2ksIHJlYWQsIGR3b3JkLCB1MzIgKiwgJmV4dF9wY2lfc3dhcCkKLQotICAgIE1BS0VfUENJX09QUyhleHRwY2ksIHdyaXRlLCBieXRlLCB1OCwgJmV4dF9wY2lfc3dhcCkKLSAgICBNQUtFX1BDSV9PUFMoZXh0cGNpLCB3cml0ZSwgd29yZCwgdTE2LCAmZXh0X3BjaV9zd2FwKQotICAgIE1BS0VfUENJX09QUyhleHRwY2ksIHdyaXRlLCBkd29yZCwgdTMyLCAmZXh0X3BjaV9zd2FwKQotCi1zdHJ1Y3QgcGNpX29wcyBkZGI1NDc2X2V4dF9wY2lfb3BzID0gewotCWV4dHBjaV9yZWFkX2NvbmZpZ19ieXRlLAotCWV4dHBjaV9yZWFkX2NvbmZpZ193b3JkLAotCWV4dHBjaV9yZWFkX2NvbmZpZ19kd29yZCwKLQlleHRwY2lfd3JpdGVfY29uZmlnX2J5dGUsCi0JZXh0cGNpX3dyaXRlX2NvbmZpZ193b3JkLAotCWV4dHBjaV93cml0ZV9jb25maWdfZHdvcmQKLX07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1lbW1hMnJoLmMgYi9hcmNoL21pcHMvcGNpL29wcy1lbW1hMnJoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxYjExYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWVtbWEycmguYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBhcmNoL21pcHMvcGNpL29wcy1lbW1hMnJoLmMKKyAqICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIFBDSSBvcGVyYXRpb24gZm9yIEVNTUEyUkguCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDQtMjAwNgorICoKKyAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIGFyY2gvbWlwcy9wY2kvb3BzLXZyNDF4eC5jCisgKgorICoJQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisKKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKKyNkZWZpbmUgUlRBQk9SVCAoMHgxPDw5KQorI2RlZmluZSBSTUFCT1JUICgweDE8PDEwKQorI2RlZmluZSBFTU1BMlJIX1BDSV9TTE9UX05VTSA5CS8qIDAwMDA6MDkuMCBpcyBmaW5hbCBQQ0kgZGV2aWNlICovCisKKy8qCisgKiBhY2Nlc3MgY29uZmlnIHNwYWNlCisgKi8KKworc3RhdGljIGludCBjaGVja19hcmdzKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwgdTMyICogYnVzX251bSkKK3sKKwkvKiBjaGVjayBpZiB0aGUgYnVzIGlzIHRvcC1sZXZlbCAqLworCWlmIChidXMtPnBhcmVudCAhPSBOVUxMKSB7CisJCSpidXNfbnVtID0gYnVzLT5udW1iZXI7CisJCWRiX2Fzc2VydChidXNfbnVtICE9IDApOworCX0gZWxzZQorCQkqYnVzX251bSA9IDA7CisKKwlpZiAoKmJ1c19udW0gPT0gMCkgeworCQkvKiBUeXBlIDAgKi8KKwkJaWYgKFBDSV9TTE9UKGRldmZuKSA+PSAxMCkKKwkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJfSBlbHNlIHsKKwkJLyogVHlwZSAxICovCisJCWlmICgoKmJ1c19udW0gPj0gNjQpIHx8IChQQ0lfU0xPVChkZXZmbikgPj0gMTYpKQorCQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNldF9wY2lfY29uZmlndXJhdGlvbl9hZGRyZXNzKHVuc2lnbmVkIGNoYXIgYnVzX251bSwKKwkJCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlKQoreworCXUzMiBjb25maWdfd2luMDsKKworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfSU5ULCB+Uk1BQk9SVCk7CisJaWYgKGJ1c19udW0gPT0gMCkKKwkJLyoKKwkJICogVHlwZSAwIGNvbmZpZ3VyYXRpb24KKwkJICovCisJCWNvbmZpZ193aW4wID0gKDEgPDwgKDIyICsgUENJX1NMT1QoZGV2Zm4pKSkgfCAoNSA8PCA5KTsKKwllbHNlCisJCS8qCisJCSAqIFR5cGUgMSBjb25maWd1cmF0aW9uCisJCSAqLworCQljb25maWdfd2luMCA9IChidXNfbnVtIDw8IDI2KSB8IChQQ0lfU0xPVChkZXZmbikgPDwgMjIpIHwKKwkJICAgICgxIDw8IDE1KSB8ICg1IDw8IDkpOworCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JV0lOMF9DVFIsIGNvbmZpZ193aW4wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9jb25maWdfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJCSAgIGludCBzaXplLCB1aW50MzJfdCAqIHZhbCkKK3sKKwl1MzIgYnVzX251bTsKKwl1MzIgYmFzZSA9IEtTRUcxQUREUihFTU1BMlJIX1BDSV9DT05GSUdfQkFTRSk7CisJdTMyIGJhY2t1cF93aW4wOworCXUzMiBkYXRhOworCisJKnZhbCA9IDB4ZmZmZmZmZmZVOworCisJaWYgKGNoZWNrX2FyZ3MoYnVzLCBkZXZmbiwgJmJ1c19udW0pID09IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCWJhY2t1cF93aW4wID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfUENJX0lXSU4wX0NUUik7CisKKwlpZiAoc2V0X3BjaV9jb25maWd1cmF0aW9uX2FkZHJlc3MoYnVzX251bSwgZGV2Zm4sIHdoZXJlKSA8IDApCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlkYXRhID0KKwkgICAgKih2b2xhdGlsZSB1MzIgKikoYmFzZSArIChQQ0lfRlVOQyhkZXZmbikgPDwgOCkgKworCQkJICAgICAgKHdoZXJlICYgMHhmZmZmZmZmYykpOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQkqdmFsID0gKGRhdGEgPj4gKCh3aGVyZSAmIDMpIDw8IDMpKSAmIDB4ZmZVOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMikgPDwgMykpICYgMHhmZmZmVTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqdmFsID0gZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JV0lOMF9DVFIsIGJhY2t1cF93aW4wKTsKKwkJcmV0dXJuIFBDSUJJT1NfRlVOQ19OT1RfU1VQUE9SVEVEOworCX0KKworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfSVdJTjBfQ1RSLCBiYWNrdXBfd2luMCk7CisKKwlpZiAoZW1tYTJyaF9pbjMyKEVNTUEyUkhfUENJX0lOVCkgJiBSTUFCT1JUKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBwY2lfY29uZmlnX3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQkJICAgIGludCBzaXplLCB1MzIgdmFsKQoreworCXUzMiBidXNfbnVtOworCXUzMiBiYXNlID0gS1NFRzFBRERSKEVNTUEyUkhfUENJX0NPTkZJR19CQVNFKTsKKwl1MzIgYmFja3VwX3dpbjA7CisJdTMyIGRhdGE7CisJaW50IHNoaWZ0OworCisJaWYgKGNoZWNrX2FyZ3MoYnVzLCBkZXZmbiwgJmJ1c19udW0pID09IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCWJhY2t1cF93aW4wID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfUENJX0lXSU4wX0NUUik7CisKKwlpZiAoc2V0X3BjaV9jb25maWd1cmF0aW9uX2FkZHJlc3MoYnVzX251bSwgZGV2Zm4sIHdoZXJlKSA8IDApCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkvKiByZWFkIG1vZGlmeSB3cml0ZSAqLworCWRhdGEgPQorCSAgICAqKHZvbGF0aWxlIHUzMiAqKShiYXNlICsgKFBDSV9GVU5DKGRldmZuKSA8PCA4KSArCisJCQkgICAgICAod2hlcmUgJiAweGZmZmZmZmZjKSk7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXNoaWZ0ID0gKHdoZXJlICYgMykgPDwgMzsKKwkJZGF0YSAmPSB+KDB4ZmZVIDw8IHNoaWZ0KTsKKwkJZGF0YSB8PSAoKHZhbCAmIDB4ZmZVKSA8PCBzaGlmdCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc2hpZnQgPSAod2hlcmUgJiAyKSA8PCAzOworCQlkYXRhICY9IH4oMHhmZmZmVSA8PCBzaGlmdCk7CisJCWRhdGEgfD0gKCh2YWwgJiAweGZmZmZVKSA8PCBzaGlmdCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZGF0YSA9IHZhbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JV0lOMF9DVFIsIGJhY2t1cF93aW4wKTsKKwkJcmV0dXJuIFBDSUJJT1NfRlVOQ19OT1RfU1VQUE9SVEVEOworCX0KKwkqKHZvbGF0aWxlIHUzMiAqKShiYXNlICsgKFBDSV9GVU5DKGRldmZuKSA8PCA4KSArCisJCQkgICh3aGVyZSAmIDB4ZmZmZmZmZmMpKSA9IGRhdGE7CisKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0lXSU4wX0NUUiwgYmFja3VwX3dpbjApOworCWlmIChlbW1hMnJoX2luMzIoRU1NQTJSSF9QQ0lfSU5UKSAmIFJNQUJPUlQpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdHJ1Y3QgcGNpX29wcyBlbW1hMnJoX3BjaV9vcHMgPSB7CisJLnJlYWQgPSBwY2lfY29uZmlnX3JlYWQsCisJLndyaXRlID0gcGNpX2NvbmZpZ193cml0ZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1pdDgxNzIuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLWl0ODE3Mi5jCmluZGV4IGI3YThiOWEuLmJhODMyODUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWl0ODE3Mi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWl0ODE3Mi5jCkBAIC01MCwzMCArNTAsMjggQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZV8xOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZSA9IHsKLQkiaW8gcGNpIElPIHNwYWNlIiwKLQkweDE0MDE4MDAwLAotCTB4MTdGRkZGRkYsCi0JSU9SRVNPVVJDRV9JTworCS5zdGFydAk9IDB4MTQwMTgwMDAsCisJLmVuZAk9IDB4MTdGRkZGRkYsCisJLm5hbWUJPSAiaW8gcGNpIElPIHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2VfMCA9IHsKLQkiZXh0IHBjaSBtZW1vcnkgc3BhY2UgMC8xIiwKLQkweDEwMTAxMDAwLAotCTB4MTNGRkZGRkYsCi0JSU9SRVNPVVJDRV9NRU0sCi0JJnBjaV9tZW1fcmVzb3VyY2VfMCwKLQlOVUxMLAotCSZwY2lfbWVtX3Jlc291cmNlXzEKKwkuc3RhcnQJPSAweDEwMTAxMDAwLAorCS5lbmQJPSAweDEzRkZGRkZGLAorCS5uYW1lCT0gImV4dCBwY2kgbWVtb3J5IHNwYWNlIDAvMSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJLnBhcmVudAk9ICZwY2lfbWVtX3Jlc291cmNlXzAsCisJLnNpYmxpbmcgPSBOVUxMLAorCS5jaGlsZAk9ICZwY2lfbWVtX3Jlc291cmNlXzEKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZV8xID0gewotCSJleHQgcGNpIG1lbW9yeSBzcGFjZSAyLzMiLAotCTB4MUEwMDAwMDAsCi0JMHgxRkJGRkZGRiwKLQlJT1JFU09VUkNFX01FTSwKLQkmcGNpX21lbV9yZXNvdXJjZV8wLAotCU5VTEwsCi0JTlVMTAorCS5zdGFydAk9IDB4MUEwMDAwMDAsCisJLmVuZAk9IDB4MUZCRkZGRkYsCisJLm5hbWUJPSAiZXh0IHBjaSBtZW1vcnkgc3BhY2UgMi8zIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkucGFyZW50CT0gJnBjaV9tZW1fcmVzb3VyY2VfMAogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGl0ODE3Ml9wY2lfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtc25pLmMgYi9hcmNoL21pcHMvcGNpL29wcy1zbmkuYwppbmRleCA2MmJkZDE5Li4yYjBjY2Q2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1zbmkuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1zbmkuYwpAQCAtNDcsMTMgKzQ3LDEzIEBACiAKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6Ci0JCSp2YWwgPSAqKHZvbGF0aWxlICB1OCAqKSAoUENJTVRfQ09ORklHX0RBVEEgKyAocmVnICYgMykpOworCQkqdmFsID0gaW5iKFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDMpKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQkqdmFsID0gKih2b2xhdGlsZSB1MTYgKikgKFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDIpKTsKKwkJKnZhbCA9IGludyhQQ0lNVF9DT05GSUdfREFUQSArIChyZWcgJiAyKSk7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJKnZhbCA9ICoodm9sYXRpbGUgdTMyICopIFBDSU1UX0NPTkZJR19EQVRBOworCQkqdmFsID0gaW5sKFBDSU1UX0NPTkZJR19EQVRBKTsKIAkJYnJlYWs7CiAJfQogCkBAIC03MCwxMyArNzAsMTMgQEAKIAogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgMToKLQkJKih2b2xhdGlsZSAgdTggKikgKFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDMpKSA9IHZhbDsKKwkJb3V0YiAodmFsLCBQQ0lNVF9DT05GSUdfREFUQSArIChyZWcgJiAzKSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJKih2b2xhdGlsZSB1MTYgKikgKFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDIpKSA9IHZhbDsKKwkJb3V0dyAodmFsLCBQQ0lNVF9DT05GSUdfREFUQSArIChyZWcgJiAyKSk7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJKih2b2xhdGlsZSB1MzIgKikgUENJTVRfQ09ORklHX0RBVEEgPSB2YWw7CisJCW91dGwgKHZhbCwgUENJTVRfQ09ORklHX0RBVEEpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXRpdGFuLmMgYi9hcmNoL21pcHMvcGNpL29wcy10aXRhbi5jCmluZGV4IDIzM2VjNmYuLmViZjhmYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXRpdGFuLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtdGl0YW4uYwpAQCAtMjYsOCArMjYsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotI2luY2x1ZGUgPGFzbS90aXRhbl9kZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CiAKKy8qCisgKiBQQ0kgc3BlY2lmaWMgZGVmaW5lcworICovCisjZGVmaW5lCVRJVEFOX1BDSV8wX0NPTkZJR19BRERSRVNTCTB4NzgwCisjZGVmaW5lCVRJVEFOX1BDSV8wX0NPTkZJR19EQVRBCQkweDc4NAorCisvKgorICogVGl0YW4gUENJIENvbmZpZyBSZWFkIEJ5dGUKKyAqLwogc3RhdGljIGludCB0aXRhbl9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcsCiAJaW50IHNpemUsIHUzMiAqIHZhbCkKIHsKQEAgLTQzLDggKzU0LDggQEAKIAogCiAJLyogc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gY3ljbGUgKi8KLQlUSVRBTl9XUklURShUSVRBTl9QQ0lfMF9DT05GSUdfQUREUkVTUywgYWRkcmVzcyk7Ci0JdG1wID0gVElUQU5fUkVBRChUSVRBTl9QQ0lfMF9DT05GSUdfREFUQSkgPj4gKChyZWcgJiAzKSA8PCAzKTsKKwlvY2Rfd3JpdGVsKGFkZHJlc3MsIFRJVEFOX1BDSV8wX0NPTkZJR19BRERSRVNTKTsKKwl0bXAgPSBvY2RfcmVhZGwoVElUQU5fUENJXzBfQ09ORklHX0RBVEEpID4+ICgocmVnICYgMykgPDwgMyk7CiAKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6CkBAIC03MSwyMCArODIsMjAgQEAKIAkJKHJlZyAmIDB4ZmMpIHwgMHg4MDAwMDAwMDsKIAogCS8qIHN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIGN5Y2xlICovCi0JVElUQU5fV1JJVEUoVElUQU5fUENJXzBfQ09ORklHX0FERFJFU1MsIGFkZHJlc3MpOworCW9jZF93cml0ZWwoYWRkcmVzcywgVElUQU5fUENJXzBfQ09ORklHX0FERFJFU1MpOwogCiAJLyogd3JpdGUgdGhlIGRhdGEgKi8KIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6Ci0JCVRJVEFOX1dSSVRFXzgoVElUQU5fUENJXzBfQ09ORklHX0RBVEEgKyAofnJlZyAmIDB4MyksIHZhbCk7CisJCW9jZF93cml0ZWIodmFsLCBUSVRBTl9QQ0lfMF9DT05GSUdfREFUQSArICh+cmVnICYgMHgzKSk7CiAJCWJyZWFrOwogCiAJY2FzZSAyOgotCQlUSVRBTl9XUklURV8xNihUSVRBTl9QQ0lfMF9DT05GSUdfREFUQSArICh+cmVnICYgMHgyKSwgdmFsKTsKKwkJb2NkX3dyaXRldyh2YWwsIFRJVEFOX1BDSV8wX0NPTkZJR19EQVRBICsgKH5yZWcgJiAweDIpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDQ6Ci0JCVRJVEFOX1dSSVRFKFRJVEFOX1BDSV8wX0NPTkZJR19EQVRBLCB2YWwpOworCQlvY2Rfd3JpdGVsKHZhbCwgVElUQU5fUENJXzBfQ09ORklHX0RBVEEpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjUwNzQuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjUwNzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNmOWNlZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1kZGI1MDc0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHRwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JInBjaSBJTyBzcGFjZSIsCi0JMHgxMDAwLAkJCS8qIGxlYXZlIHNvbWUgcm9vbSBmb3IgSVNBIGJ1cyAqLwotCUREQl9QQ0lfSU9fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHRwY2lfbWVtX3Jlc291cmNlID0gewotCSJwY2kgbWVtb3J5IHNwYWNlIiwKLQlEREJfUENJX01FTV9CQVNFICsgMHgwMDEwMDAwMCwJLyogbGVhdmUgMSBNQiBmb3IgUlRDICovCi0JRERCX1BDSV9NRU1fQkFTRSArIEREQl9QQ0lfTUVNX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfTUVNCi19OwotCi1leHRlcm4gc3RydWN0IHBjaV9vcHMgZGRiNTQ3Nl9leHRfcGNpX29wczsKLQotc3RydWN0IHBjaV9jb250cm9sbGVyIGRkYjU0NzZfY29udHJvbGxlciA9IHsKLQkucGNpX29wcwk9ICZkZGI1NDc2X2V4dF9wY2lfb3BzLAotCS5pb19yZXNvdXJjZQk9ICZleHRwY2lfaW9fcmVzb3VyY2UsCi0JLm1lbV9yZXNvdXJjZQk9ICZleHRwY2lfbWVtX3Jlc291cmNlLAotfTsKLQotI2RlZmluZSAgICAgUENJX0VYVF9JTlRBICAgICAgICA4Ci0jZGVmaW5lICAgICBQQ0lfRVhUX0lOVEIgICAgICAgIDkKLSNkZWZpbmUgICAgIFBDSV9FWFRfSU5UQyAgICAgICAgMTAKLSNkZWZpbmUgICAgIFBDSV9FWFRfSU5URCAgICAgICAgMTEKLSNkZWZpbmUgICAgIFBDSV9FWFRfSU5URSAgICAgICAgMTIKLQotI2RlZmluZSAgICAgTUFYX1NMT1RfTlVNICAgICAgICAxNAotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcnFfbWFwW01BWF9TTE9UX05VTV0gPSB7Ci0gIFsgMF0gPSBuaWxlNF90b19pcnEoUENJX0VYVF9JTlRFKSwKLSAgWyAxXSA9IG5pbGU0X3RvX2lycShQQ0lfRVhUX0lOVEEpLAotICBbIDJdID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5UQSksCi0gIFsgM10gPSBuaWxlNF90b19pcnEoUENJX0VYVF9JTlRCKSwKLSAgWyA0XSA9IG5pbGU0X3RvX2lycShQQ0lfRVhUX0lOVEMpLAotICBbIDVdID0gbmlsZTRfdG9faXJxKE5JTEU0X0lOVF9VQVJUKSwKLSAgWzEwXSA9IG5pbGU0X3RvX2lycShQQ0lfRVhUX0lOVEUpLAotICBbMTNdID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5URSksCi19OwotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JcmV0dXJuIGlycV9tYXBbc2xvdF07Ci19Ci0KLS8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KLWludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgZGRiX3BjaV9yZXNldF9idXModm9pZCkKLXsKLQl1MzIgdGVtcDsKLQotCS8qCi0JICogSSBhbSBub3Qgc3VyZSBhYm91dCB0aGUgIm9mZmljaWFsIiBwcm9jZWR1cmUsIHRoZSBmb2xsb3dpbmcKLQkgKiBzdGVwcyB3b3JrIGFzIGZhciBhcyBJIGtub3c6Ci0JICogV2UgZmlyc3Qgc2V0IFBDSSBjb2xkIHJlc2V0IGJpdCAoYml0IDMxKSBpbiBQQ0lDVFJMLUguCi0JICogVGhlbiB3ZSBjbGVhciB0aGUgUENJIHdhcm0gcmVzZXQgYml0IChiaXQgMzApIHRvIDAgaW4gUENJQ1RSTC1ILgotCSAqIFRoZSBzYW1lIGlzIHRydWUgZm9yIGJvdGggUENJIGNoYW5uZWxzLgotCSAqLwotCXRlbXAgPSBkZGJfaW4zMihEREJfUENJQ1RSTCArIDQpOwotCXRlbXAgfD0gMHg4MDAwMDAwMDsKLQlkZGJfb3V0MzIoRERCX1BDSUNUUkwgKyA0LCB0ZW1wKTsKLQl0ZW1wICY9IH4weGMwMDAwMDAwOwotCWRkYl9vdXQzMihEREJfUENJQ1RSTCArIDQsIHRlbXApOwotCi19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1kZGI1NDc2LmMgYi9hcmNoL21pcHMvcGNpL3BjaS1kZGI1NDc2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZGQ0OTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktZGRiNTQ3Ni5jCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotCi0jaW5jbHVkZSA8YXNtL2RlYnVnLmg+Ci0KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh0cGNpX2lvX3Jlc291cmNlID0gewotCSJwY2kgSU8gc3BhY2UiLAotCTB4MTAwMCwJCQkvKiBsZWF2ZSBzb21lIHJvb20gZm9yIElTQSBidXMgKi8KLQlEREJfUENJX0lPX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfSU8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh0cGNpX21lbV9yZXNvdXJjZSA9IHsKLQkicGNpIG1lbW9yeSBzcGFjZSIsCi0JRERCX1BDSV9NRU1fQkFTRSArIDB4MDAxMDAwMDAsCS8qIGxlYXZlIDEgTUIgZm9yIFJUQyAqLwotCUREQl9QQ0lfTUVNX0JBU0UgKyBEREJfUENJX01FTV9TSVpFIC0gMSwKLQlJT1JFU09VUkNFX01FTQotfTsKLQotZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGRkYjU0NzZfZXh0X3BjaV9vcHM7Ci0KLXN0cnVjdCBwY2lfY29udHJvbGxlciBkZGI1NDc2X2NvbnRyb2xsZXIgPSB7Ci0JLnBjaV9vcHMJPSAmZGRiNTQ3Nl9leHRfcGNpX29wcywKLQkuaW9fcmVzb3VyY2UJPSAmZXh0cGNpX2lvX3Jlc291cmNlLAotCS5tZW1fcmVzb3VyY2UJPSAmZXh0cGNpX21lbV9yZXNvdXJjZQotfTsKLQotCi0vKgotICogd2UgZml4IHVwIGlycXMgYmFzZWQgb24gdGhlIHNsb3QgbnVtYmVyLgotICogVGhlIGZpcnN0IGVudHJ5IGlzIGF0IEFEOjExLgotICoKLSAqIFRoaXMgZG9lcyBub3Qgd29yayBmb3IgZGV2aWNlcyBvbiBzdWItYnVzZXMgeWV0LgotICovCi0KLS8qCi0gKiB0ZW1wb3JhcnkKLSAqLwotCi0jZGVmaW5lCQlQQ0lfRVhUX0lOVEEJCTgKLSNkZWZpbmUJCVBDSV9FWFRfSU5UQgkJOQotI2RlZmluZQkJUENJX0VYVF9JTlRDCQkxMAotI2RlZmluZQkJUENJX0VYVF9JTlRECQkxMQotI2RlZmluZQkJUENJX0VYVF9JTlRFCQkxMgotCi0vKgotICogYmFzZWQgb24gZGRiNTQ3NyBtYW51YWwgcGFnZSAxMQotICovCi0jZGVmaW5lCQlNQVhfU0xPVF9OVU0JCTIxCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcnFfbWFwW01BWF9TTE9UX05VTV0gPSB7Ci0gWyAyXSA9IDksCQkJCS8qIEFEOjEzCVVTQgkJKi8KLSBbIDNdID0gMTAsCQkJCS8qIEFEOjE0CVBNVQkJKi8KLSBbIDVdID0gMCwJCQkJLyogQUQ6MTYgCVAyUCBicmlkZ2UJKi8KLSBbIDZdID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5UQiksCS8qIEFEOjE3CQkJKi8KLSBbIDddID0JbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5UQyksCS8qIEFEOjE4CQkJKi8KLSBbIDhdID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5URCksCS8qIEFEOjE5CQkJKi8KLSBbIDldID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5UQSksCS8qIEFEOjIwCQkJKi8KLSBbMTNdID0gMTQsCQkJCS8qIEFEOjI0IEhEIGNvbnRyb2xsZXIsIE01MjI5CSovCi19OwotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JcmV0dXJuIGlycV9tYXBbc2xvdF07Ci19Ci0KLS8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KLWludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgZGRiX3BjaV9yZXNldF9idXModm9pZCkKLXsKLQl1MzIgdGVtcDsKLQotCS8qCi0JICogSSBhbSBub3Qgc3VyZSBhYm91dCB0aGUgIm9mZmljaWFsIiBwcm9jZWR1cmUsIHRoZSBmb2xsb3dpbmcKLQkgKiBzdGVwcyB3b3JrIGFzIGZhciBhcyBJIGtub3c6Ci0JICogV2UgZmlyc3Qgc2V0IFBDSSBjb2xkIHJlc2V0IGJpdCAoYml0IDMxKSBpbiBQQ0lDVFJMLUguCi0JICogVGhlbiB3ZSBjbGVhciB0aGUgUENJIHdhcm0gcmVzZXQgYml0IChiaXQgMzApIHRvIDAgaW4gUENJQ1RSTC1ILgotCSAqIFRoZSBzYW1lIGlzIHRydWUgZm9yIGJvdGggUENJIGNoYW5uZWxzLgotCSAqLwotCXRlbXAgPSBkZGJfaW4zMihEREJfUENJQ1RSTCArIDQpOwotCXRlbXAgfD0gMHg4MDAwMDAwMDsKLQlkZGJfb3V0MzIoRERCX1BDSUNUUkwgKyA0LCB0ZW1wKTsKLQl0ZW1wICY9IH4weGMwMDAwMDAwOwotCWRkYl9vdXQzMihEREJfUENJQ1RSTCArIDQsIHRlbXApOwotCi19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1kZGI1NDc3LmMgYi9hcmNoL21pcHMvcGNpL3BjaS1kZGI1NDc3LmMKaW5kZXggODI2ZDY1My4uZDA3MWJjMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktZGRiNTQ3Ny5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjU0NzcuYwpAQCAtMjIsMzEgKzIyLDMxIEBACiAjaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGV4dHBjaV9pb19yZXNvdXJjZSA9IHsKLQkiZXh0IHBjaSBJTyBzcGFjZSIsCi0JRERCX1BDSTBfSU9fQkFTRSAtIEREQl9QQ0lfSU9fQkFTRSArIDB4NDAwMCwKLQlEREJfUENJMF9JT19CQVNFIC0gRERCX1BDSV9JT19CQVNFICsgRERCX1BDSTBfSU9fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9JTworCS5zdGFydAk9IEREQl9QQ0kwX0lPX0JBU0UgLSBEREJfUENJX0lPX0JBU0UgKyAweDQwMDAsCisJLmVuZAk9IEREQl9QQ0kwX0lPX0JBU0UgLSBEREJfUENJX0lPX0JBU0UgKyBEREJfUENJMF9JT19TSVpFIC0gMSwKKwkubmFtZQk9ICJleHQgcGNpIElPIHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGV4dHBjaV9tZW1fcmVzb3VyY2UgPSB7Ci0JImV4dCBwY2kgbWVtb3J5IHNwYWNlIiwKLQlEREJfUENJMF9NRU1fQkFTRSArIDB4MTAwMDAwLAotCUREQl9QQ0kwX01FTV9CQVNFICsgRERCX1BDSTBfTUVNX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gRERCX1BDSTBfTUVNX0JBU0UgKyAweDEwMDAwMCwKKwkuZW5kCT0gRERCX1BDSTBfTUVNX0JBU0UgKyBEREJfUENJMF9NRU1fU0laRSAtIDEsCisJLm5hbWUJPSAiZXh0IHBjaSBtZW1vcnkgc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvcGNpX2lvX3Jlc291cmNlID0gewotCSJpbyBwY2kgSU8gc3BhY2UiLAotCUREQl9QQ0kxX0lPX0JBU0UgLSBEREJfUENJX0lPX0JBU0UsCi0JRERCX1BDSTFfSU9fQkFTRSAtIEREQl9QQ0lfSU9fQkFTRSArIEREQl9QQ0kxX0lPX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfSU8KKwkuc3RhcnQJPSBEREJfUENJMV9JT19CQVNFIC0gRERCX1BDSV9JT19CQVNFLAorCS5lbmQJPSBEREJfUENJMV9JT19CQVNFIC0gRERCX1BDSV9JT19CQVNFICsgRERCX1BDSTFfSU9fU0laRSAtIDEsCisJLm5hbWUJPSAiaW8gcGNpIElPIHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvcGNpX21lbV9yZXNvdXJjZSA9IHsKLQkiZXh0IHBjaSBtZW1vcnkgc3BhY2UiLAotCUREQl9QQ0kxX01FTV9CQVNFLAotCUREQl9QQ0kxX01FTV9CQVNFICsgRERCX1BDSTFfTUVNX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gRERCX1BDSTFfTUVNX0JBU0UsCisJLmVuZAk9IEREQl9QQ0kxX01FTV9CQVNFICsgRERCX1BDSTFfTUVNX1NJWkUgLSAxLAorCS5uYW1lCT0gImV4dCBwY2kgbWVtb3J5IHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGRkYjU0NzdfZXh0X3BjaV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1lbW1hMnJoLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1lbW1hMnJoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4YjIzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogIGFyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYworICogICAgICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgUENJIGNvbmZpZ3JhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNC0yMDA2CisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9wY2kuYworICoKKyAqCUNvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZSA9IHsKKwkubmFtZSA9ICJwY2kgSU8gc3BhY2UiLAorCS5zdGFydCA9IEVNTUEyUkhfUENJX0lPX0JBU0UsCisJLmVuZCA9IEVNTUEyUkhfUENJX0lPX0JBU0UgKyBFTU1BMlJIX1BDSV9JT19TSVpFIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlID0geworCS5uYW1lID0gInBjaSBtZW1vcnkgc3BhY2UiLAorCS5zdGFydCA9IEVNTUEyUkhfUENJX01FTV9CQVNFLAorCS5lbmQgPSBFTU1BMlJIX1BDSV9NRU1fQkFTRSArIEVNTUEyUkhfUENJX01FTV9TSVpFIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBlbW1hMnJoX3BjaV9vcHM7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgZW1tYTJyaF9wY2lfY29udHJvbGxlciA9IHsKKwkucGNpX29wcyA9ICZlbW1hMnJoX3BjaV9vcHMsCisJLm1lbV9yZXNvdXJjZSA9ICZwY2lfbWVtX3Jlc291cmNlLAorCS5pb19yZXNvdXJjZSA9ICZwY2lfaW9fcmVzb3VyY2UsCisJLm1lbV9vZmZzZXQgPSAtMHgwNDAwMDAwMCwKKwkuaW9fb2Zmc2V0ID0gMCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbW1hMnJoX3BjaV9pbml0KHZvaWQpCit7CisJLyogc2V0dXAgUENJIGludGVyZmFjZSAqLworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfQVJCSVRfQ1RSLCAweDcwZik7CisKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0lXSU4wX0NUUiwgMHg4MDAwMGExOCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9DT05GSUdfQkFTRSArIFBDSV9DT01NQU5ELAorCQkgICAgICBQQ0lfU1RBVFVTX0RFVlNFTF9NRURJVU0gfCBQQ0lfU1RBVFVTX0NBUF9MSVNUIHwKKwkJICAgICAgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0NPTkZJR19CQVNFICsgUENJX0JBU0VfQUREUkVTU18wLCAweDEwMDAwMDAwKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0NPTkZJR19CQVNFICsgUENJX0JBU0VfQUREUkVTU18xLCAweDAwMDAwMDAwKTsKKworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfSVdJTjBfQ1RSLCAweDEyMDAwMDAwIHwgMHgyMTgpOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfSVdJTjFfQ1RSLCAweDE4MDAwMDAwIHwgMHg2MDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfSU5JVF9FU1dQLCAweDAwMDAwMjAwKTsKKworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfVFdJTl9DVFIsIDB4MDAwMDkyMDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfVFdJTl9CQURSLCAweDAwMDAwMDAwKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX1RXSU4wX0RBRFIsIDB4MDAwMDAwMDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfVFdJTjFfREFEUiwgMHgwMDAwMDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGVtbWEycmhfcGNpX3NldHVwKHZvaWQpCit7CisJZW1tYTJyaF9wY2lfaW5pdCgpOworCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZlbW1hMnJoX3BjaV9jb250cm9sbGVyKTsKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChlbW1hMnJoX3BjaV9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWV4Y2l0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODZjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgorICogIEJhc2VkIG9uIHRoZSBQTUMtU2llcnJhIFlvc2VtaXRlIGJvYXJkIHN1cHBvcnQgYnkgUmFsZiBCYWVjaGxlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKKworZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHRpdGFuX3BjaV9vcHM7CisKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZQorCW1lbV9yZXNvdXJjZSA9IAl7CisJCS5uYW1lCT0gIlBDSSBtZW1vcnkiLAorCQkuc3RhcnQJPSBFWENJVEVfUEhZU19QQ0lfTUVNLAorCQkuZW5kCT0gRVhDSVRFX1BIWVNfUENJX01FTSArIEVYQ0lURV9TSVpFX1BDSV9NRU0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJaW9fcmVzb3VyY2UgPSB7CisJCS5uYW1lCT0gIlBDSSBJL08iLAorCQkuc3RhcnQJPSBFWENJVEVfUEhZU19QQ0lfSU8sCisJCS5lbmQJPSBFWENJVEVfUEhZU19QQ0lfSU8gKyBFWENJVEVfU0laRV9QQ0lfSU8gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCisJfTsKKworCitzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIGJ4X2NvbnRyb2xsZXIgPSB7CisJLnBjaV9vcHMJPSAmdGl0YW5fcGNpX29wcywKKwkubWVtX3Jlc291cmNlCT0gJm1lbV9yZXNvdXJjZSwKKwkubWVtX29mZnNldAk9IDB4MDAwMDAwMDBVTCwKKwkuaW9fcmVzb3VyY2UJPSAmaW9fcmVzb3VyY2UsCisJLmlvX29mZnNldAk9IDB4MDAwMDAwMDBVTAorfTsKKworCitzdGF0aWMgY2hhcgorCWlvcGFnZV9mYWlsZWRbXSBfX2luaXRkYXRhICAgPSAiQ2Fubm90IGFsbG9jYXRlIFBDSSBJL08gcGFnZSIsCisJbW9kZWJpdHNfbm9fcGNpW10gX19pbml0ZGF0YSA9ICJQQ0kgaXMgbm90IGNvbmZpZ3VyZWQgaW4gbW9kZSBiaXRzIjsKKworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRTQwkweDA2MDQKKyNkZWZpbmUgUk05MDAweDJfT0NEX0hUQkhMCTB4MDYwYworI2RlZmluZSBSTTkwMDB4Ml9PQ0RfUENJSFJTVAkweDA3OGMKKworI2RlZmluZSBSTTlLX09DRF9NT0RFQklUMQkweDAwZDQgLyogKE1PREVCSVQxKSBNb2RlIEJpdCAxICovCisjZGVmaW5lIFJNOUtfT0NEX0NQSERDUgkJMHgwMGY0IC8qIENQVS1QQ0kvSFQgRGF0YSBDb250cm9sLiAqLworCisjZGVmaW5lIFBDSVNDX0ZCMkIgCQkweDAwMDAwMjAwCisjZGVmaW5lIFBDSVNDX01XSUNHCQkweDAwMDAwMDEwCisjZGVmaW5lIFBDSVNDX0VNQwkJMHgwMDAwMDAwNAorI2RlZmluZSBQQ0lTQ19FUk1BCQkweDAwMDAwMDAyCisKKworCitzdGF0aWMgaW50IF9faW5pdCBiYXNsZXJfZXhjaXRlX3BjaV9zZXR1cCh2b2lkKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBmdWxsYmFycyA9IG1lbXNpemUgLyAoMjU2IDw8IDIwKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIENoZWNrIG1vZGViaXRzIHRvIHNlZSBpZiBQQ0kgaXMgcmVhbGx5IGVuYWJsZWQuICovCisJaWYgKCEoKG9jZF9yZWFkbChSTTlLX09DRF9NT0RFQklUMSkgPj4gKDQ3LTMyKSkgJiAweDEpKQorCQlwYW5pYyhtb2RlYml0c19ub19wY2kpOworCisJaWYgKE5VTEwgPT0gcmVxdWVzdF9tZW1fcmVnaW9uKEVYQ0lURV9QSFlTX1BDSV9JTywgRVhDSVRFX1NJWkVfUENJX0lPLAorCQkJCSAgICAgICAiTWVtb3J5LW1hcHBlZCBQQ0kgSS9PIHBhZ2UiKSkKKwkJcGFuaWMoaW9wYWdlX2ZhaWxlZCk7CisKKwkvKiBFbmFibGUgUENJIDAgYXMgbWFzdGVyIGZvciBjb25maWcgY3ljbGVzICovCisJb2NkX3dyaXRlbChQQ0lTQ19FTUMgfCBQQ0lTQ19FUk1BLCBSTTkwMDB4Ml9PQ0RfSFRTQyk7CisKKworCS8qIFNldCB1cCBsYXRlbmN5IHRpbWVyICovCisJb2NkX3dyaXRlbCgweDgwMDgsIFJNOTAwMHgyX09DRF9IVEJITCk7CisKKwkvKiAgU2V0dXAgaG9zdCBJTyBhbmQgTWVtb3J5IHNwYWNlICovCisJb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfUENJX0lPID4+IDQpIHwgMSwgTEtCNyk7CisJb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX1BDSV9JTyA+PiA0KSAmIDB4N2ZmZmZmMDApIC0gMHgxMDAsIExLTTcpOworCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX1BDSV9NRU0gPj4gNCkgfCAxLCBMS0I4KTsKKwlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfUENJX01FTSA+PiA0KSAmIDB4N2ZmZmZmMDApIC0gMHgxMDAsIExLTTgpOworCisJLyogU2V0IHVwIFBDSSBCQVJzIHRvIG1hcCBhbGwgaW5zdGFsbGVkIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJY29uc3QgdW5zaWduZWQgaW50IGJhciA9IDB4NjEwICsgaSAqIDQ7CisKKwkgICAgIAlpZiAoaSA8IGZ1bGxiYXJzKSB7CisJCQlvY2Rfd3JpdGVsKDB4MTAwMDAwMDAgKiBpLCBiYXIpOworCQkJb2NkX3dyaXRlbCgweDAxMDAwMDAwICogaSwgYmFyICsgMHgxNDApOworCQkJb2NkX3dyaXRlbCgweDBmZmZmMDI5LCBiYXIgKyAweDEwMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJICAgICAJaWYgKGkgPT0gZnVsbGJhcnMpIHsKKwkJCWludCBvOworCQkJdTMyIG1hc2s7CisKKwkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgcmVtID0gbWVtc2l6ZSAtIGkgKiAweDEwMDAwMDAwOworCQkJaWYgKCFyZW0pIHsKKwkJCQlvY2Rfd3JpdGVsKDB4MDAwMDAwMDAsIGJhciArIDB4MTAwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbyA9IGZmcyhyZW0pIC0gMTsKKwkJCWlmIChyZW0gJiB+KDB4MSA8PCBvKSkKKwkJCQlvKys7CisJCQltYXNrID0gKCgweDEgPDwgbykgJiAweDBmZmZmMDAwKSAtIDB4MTAwMDsKKwkJCW9jZF93cml0ZWwoMHgxMDAwMDAwMCAqIGksIGJhcik7CisJCQlvY2Rfd3JpdGVsKDB4MDEwMDAwMDAgKiBpLCBiYXIgKyAweDE0MCk7CisJCQlvY2Rfd3JpdGVsKDB4MDAwMDAwMjkgfCBtYXNrLCBiYXIgKyAweDEwMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9jZF93cml0ZWwoMHgwMDAwMDAwMCwgYmFyICsgMHgxMDApOworCX0KKworCS8qIEZpbmFsbHksIGVuYWJsZSB0aGUgUENJIGludGVydXB0ICovCisjaWYgVVNCX0lSUSA+IDcKKwlzZXRfYzBfaW50Y29udHJvbCgxIDw8IFVTQl9JUlEpOworI2Vsc2UKKwlzZXRfYzBfc3RhdHVzKDEgPDwgKFVTQl9JUlEgKyA4KSk7CisjZW5kaWYKKworCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IEVYQ0lURV9QSFlTX1BDSV9JTzsKKwlpb3BvcnRfcmVzb3VyY2UuZW5kID0gRVhDSVRFX1BIWVNfUENJX0lPICsgRVhDSVRFX1NJWkVfUENJX0lPIC0gMTsKKwlzZXRfaW9fcG9ydF9iYXNlKCh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoRVhDSVRFX1BIWVNfUENJX0lPLCBFWENJVEVfU0laRV9QQ0lfSU8pKTsKKwlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmYnhfY29udHJvbGxlcik7CisJcmV0dXJuIDA7Cit9CisKKworYXJjaF9pbml0Y2FsbChiYXNsZXJfZXhjaXRlX3BjaV9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1pcDI3LmMgYi9hcmNoL21pcHMvcGNpL3BjaS1pcDI3LmMKaW5kZXggNjAwMmQyYS4uODBlYjlhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktaXAyNy5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWlwMjcuYwpAQCAtNDAsMjk3ICs0MCw3IEBACiBzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmlycV90b19icmlkZ2VbTUFYX1BDSV9CVVNTRVMgKiBNQVhfREVWSUNFU19QRVJfUENJQlVTXTsKIGludCBpcnFfdG9fc2xvdFtNQVhfUENJX0JVU1NFUyAqIE1BWF9ERVZJQ0VTX1BFUl9QQ0lCVVNdOwogCi0vKgotICogVGhlIEJyaWRnZSBBU0lDIHN1cHBvcnRzIGJvdGggdHlwZSAwIGFuZCB0eXBlIDEgYWNjZXNzLiAgVHlwZSAxIGlzCi0gKiBub3QgcmVhbGx5IGRvY3VtZW50ZWQsIHNvIHJpZ2h0IG5vdyBJIGNhbid0IHdyaXRlIGNvZGUgd2hpY2ggdXNlcyBpdC4KLSAqIFRoZXJlZm9yZSB3ZSB1c2UgdHlwZSAwIGFjY2Vzc2VzIGZvciBub3cgZXZlbiB0aG91Z2ggdGhleSB3b24ndCB3b3JrCi0gKiBjb3JyZWNseSBmb3IgUENJLXRvLVBDSSBicmlkZ2VzLgotICoKLSAqIFRoZSBmdW5jdGlvbiBpcyBjb21wbGljYXRlZCBieSB0aGUgdWx0aW1hdGUgYnJva2VuZXNzIG9mIHRoZSBJT0MzIGNoaXAKLSAqIHdoaWNoIGlzIHVzZWQgaW4gU0dJIHN5c3RlbXMuICBUaGUgSU9DMyBjYW4gb25seSBoYW5kbGUgMzItYml0IFBDSQotICogYWNjZXNzZXMgYW5kIGRvZXMgb25seSBkZWNvZGUgcGFydHMgb2YgaXQncyBhZGRyZXNzIHNwYWNlLgotICovCi0KLXN0YXRpYyBpbnQgcGNpX2NvbmYwX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICogdmFsdWUpCi17Ci0Jc3RydWN0IGJyaWRnZV9jb250cm9sbGVyICpiYyA9IEJSSURHRV9DT05UUk9MTEVSKGJ1cyk7Ci0JYnJpZGdlX3QgKmJyaWRnZSA9IGJjLT5iYXNlOwotCWludCBzbG90ID0gUENJX1NMT1QoZGV2Zm4pOwotCWludCBmbiA9IFBDSV9GVU5DKGRldmZuKTsKLQl2b2xhdGlsZSB2b2lkICphZGRyOwotCXUzMiBjZiwgc2hpZnQsIG1hc2s7Ci0JaW50IHJlczsKLQotCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUwX2NmZ19kZXZbc2xvdF0uZltmbl0uY1tQQ0lfVkVORE9SX0lEXTsKLQlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCBpdCBmb3IgcmVhbCAuLi4KLQkgKi8KLQlpZiAoY2YgPT0gKFBDSV9WRU5ET1JfSURfU0dJIHwgKFBDSV9ERVZJQ0VfSURfU0dJX0lPQzMgPDwgMTYpKSkKLQkJZ290byBvaF9teV9nYXdkOwotCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5jW3doZXJlIF4gKDQgLSBzaXplKV07Ci0KLQlpZiAoc2l6ZSA9PSAxKQotCQlyZXMgPSBnZXRfZGJlKCp2YWx1ZSwgKHU4ICopIGFkZHIpOwotCWVsc2UgaWYgKHNpemUgPT0gMikKLQkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1MTYgKikgYWRkcik7Ci0JZWxzZQotCQlyZXMgPSBnZXRfZGJlKCp2YWx1ZSwgKHUzMiAqKSBhZGRyKTsKLQotCXJldHVybiByZXMgPyBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQgOiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLW9oX215X2dhd2Q6Ci0KLQkvKgotCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKLQkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIGxvb2sgYXQgdGhlIHdyb25nIHJlZ2lzdGVyLgotCSAqLwotCWlmICgod2hlcmUgPj0gMHgxNCAmJiB3aGVyZSA8IDB4NDApIHx8ICh3aGVyZSA+PSAweDQ4KSkgewotCQkqdmFsdWUgPSAwOwotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCX0KLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgdHJ5IHRvIGFjY2VzcwotCSAqIGFueXRoaW5nIGJ1dCAzMi1iaXQgd29yZHMgLi4uCi0JICovCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5sW3doZXJlID4+IDJdOwotCi0JaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlzaGlmdCA9ICgod2hlcmUgJiAzKSA8PCAzKTsKLQltYXNrID0gKDB4ZmZmZmZmZmZVID4+ICgoNCAtIHNpemUpIDw8IDMpKTsKLQkqdmFsdWUgPSAoY2YgPj4gc2hpZnQpICYgbWFzazsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpX2NvbmYxX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICogdmFsdWUpCi17Ci0Jc3RydWN0IGJyaWRnZV9jb250cm9sbGVyICpiYyA9IEJSSURHRV9DT05UUk9MTEVSKGJ1cyk7Ci0JYnJpZGdlX3QgKmJyaWRnZSA9IGJjLT5iYXNlOwotCWludCBidXNubyA9IGJ1cy0+bnVtYmVyOwotCWludCBzbG90ID0gUENJX1NMT1QoZGV2Zm4pOwotCWludCBmbiA9IFBDSV9GVU5DKGRldmZuKTsKLQl2b2xhdGlsZSB2b2lkICphZGRyOwotCXUzMiBjZiwgc2hpZnQsIG1hc2s7Ci0JaW50IHJlczsKLQotCWJyaWRnZS0+Yl9wY2lfY2ZnID0gKGJ1c25vIDw8IDE2KSB8IChzbG90IDw8IDExKTsKLQlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMV9jZmcuY1soZm4gPDwgOCkgfCBQQ0lfVkVORE9SX0lEXTsKLQlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCBpdCBmb3IgcmVhbCAuLi4KLQkgKi8KLQlpZiAoY2YgPT0gKFBDSV9WRU5ET1JfSURfU0dJIHwgKFBDSV9ERVZJQ0VfSURfU0dJX0lPQzMgPDwgMTYpKSkKLQkJZ290byBvaF9teV9nYXdkOwotCi0JYnJpZGdlLT5iX3BjaV9jZmcgPSAoYnVzbm8gPDwgMTYpIHwgKHNsb3QgPDwgMTEpOwotCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUxX2NmZy5jWyhmbiA8PCA4KSB8ICh3aGVyZSBeICg0IC0gc2l6ZSkpXTsKLQotCWlmIChzaXplID09IDEpCi0JCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTggKikgYWRkcik7Ci0JZWxzZSBpZiAoc2l6ZSA9PSAyKQotCQlyZXMgPSBnZXRfZGJlKCp2YWx1ZSwgKHUxNiAqKSBhZGRyKTsKLQllbHNlCi0JCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTMyICopIGFkZHIpOwotCi0JcmV0dXJuIHJlcyA/IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORCA6IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotb2hfbXlfZ2F3ZDoKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCB0aGUgd3JvbmcgcmVnaXN0ZXIuCi0JICovCi0JaWYgKCh3aGVyZSA+PSAweDE0ICYmIHdoZXJlIDwgMHg0MCkgfHwgKHdoZXJlID49IDB4NDgpKSB7Ci0JCSp2YWx1ZSA9IDA7Ci0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JfQotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCB0cnkgdG8gYWNjZXNzCi0JICogYW55dGhpbmcgYnV0IDMyLWJpdCB3b3JkcyAuLi4KLQkgKi8KLQlicmlkZ2UtPmJfcGNpX2NmZyA9IChidXNubyA8PCAxNikgfCAoc2xvdCA8PCAxMSk7Ci0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTFfY2ZnLmNbKGZuIDw8IDgpIHwgd2hlcmVdOwotCi0JaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlzaGlmdCA9ICgod2hlcmUgJiAzKSA8PCAzKTsKLQltYXNrID0gKDB4ZmZmZmZmZmZVID4+ICgoNCAtIHNpemUpIDw8IDMpKTsKLQkqdmFsdWUgPSAoY2YgPj4gc2hpZnQpICYgbWFzazsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCSAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqIHZhbHVlKQotewotCWlmIChidXMtPm51bWJlciA+IDApCi0JCXJldHVybiBwY2lfY29uZjFfcmVhZF9jb25maWcoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKLQotCXJldHVybiBwY2lfY29uZjBfcmVhZF9jb25maWcoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKLX0KLQotc3RhdGljIGludCBwY2lfY29uZjBfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjID0gQlJJREdFX0NPTlRST0xMRVIoYnVzKTsKLQlicmlkZ2VfdCAqYnJpZGdlID0gYmMtPmJhc2U7Ci0JaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7Ci0JaW50IGZuID0gUENJX0ZVTkMoZGV2Zm4pOwotCXZvbGF0aWxlIHZvaWQgKmFkZHI7Ci0JdTMyIGNmLCBzaGlmdCwgbWFzaywgc21hc2s7Ci0JaW50IHJlczsKLQotCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUwX2NmZ19kZXZbc2xvdF0uZltmbl0uY1tQQ0lfVkVORE9SX0lEXTsKLQlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCBpdCBmb3IgcmVhbCAuLi4KLQkgKi8KLQlpZiAoY2YgPT0gKFBDSV9WRU5ET1JfSURfU0dJIHwgKFBDSV9ERVZJQ0VfSURfU0dJX0lPQzMgPDwgMTYpKSkKLQkJZ290byBvaF9teV9nYXdkOwotCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5jW3doZXJlIF4gKDQgLSBzaXplKV07Ci0KLQlpZiAoc2l6ZSA9PSAxKSB7Ci0JCXJlcyA9IHB1dF9kYmUodmFsdWUsICh1OCAqKSBhZGRyKTsKLQl9IGVsc2UgaWYgKHNpemUgPT0gMikgewotCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTE2ICopIGFkZHIpOwotCX0gZWxzZSB7Ci0JCXJlcyA9IHB1dF9kYmUodmFsdWUsICh1MzIgKikgYWRkcik7Ci0JfQotCi0JaWYgKHJlcykKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLW9oX215X2dhd2Q6Ci0KLQkvKgotCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKLQkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIHRvdWNoIHRoZSB3cm9uZyByZWdpc3Rlci4KLQkgKi8KLQlpZiAoKHdoZXJlID49IDB4MTQgJiYgd2hlcmUgPCAweDQwKSB8fCAod2hlcmUgPj0gMHg0OCkpCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQkvKgotCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IHRyeSB0byBhY2Nlc3MKLQkgKiBhbnl0aGluZyBidXQgMzItYml0IHdvcmRzIC4uLgotCSAqLwotCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUwX2NmZ19kZXZbc2xvdF0uZltmbl0ubFt3aGVyZSA+PiAyXTsKLQotCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0Jc2hpZnQgPSAoKHdoZXJlICYgMykgPDwgMyk7Ci0JbWFzayA9ICgweGZmZmZmZmZmVSA+PiAoKDQgLSBzaXplKSA8PCAzKSk7Ci0Jc21hc2sgPSBtYXNrIDw8IHNoaWZ0OwotCi0JY2YgPSAoY2YgJiB+c21hc2spIHwgKCh2YWx1ZSAmIG1hc2spIDw8IHNoaWZ0KTsKLQlpZiAocHV0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpX2NvbmYxX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IGJyaWRnZV9jb250cm9sbGVyICpiYyA9IEJSSURHRV9DT05UUk9MTEVSKGJ1cyk7Ci0JYnJpZGdlX3QgKmJyaWRnZSA9IGJjLT5iYXNlOwotCWludCBzbG90ID0gUENJX1NMT1QoZGV2Zm4pOwotCWludCBmbiA9IFBDSV9GVU5DKGRldmZuKTsKLQlpbnQgYnVzbm8gPSBidXMtPm51bWJlcjsKLQl2b2xhdGlsZSB2b2lkICphZGRyOwotCXUzMiBjZiwgc2hpZnQsIG1hc2ssIHNtYXNrOwotCWludCByZXM7Ci0KLQlicmlkZ2UtPmJfcGNpX2NmZyA9IChidXNubyA8PCAxNikgfCAoc2xvdCA8PCAxMSk7Ci0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTFfY2ZnLmNbKGZuIDw8IDgpIHwgUENJX1ZFTkRPUl9JRF07Ci0JaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQkvKgotCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKLQkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIGxvb2sgYXQgaXQgZm9yIHJlYWwgLi4uCi0JICovCi0JaWYgKGNmID09IChQQ0lfVkVORE9SX0lEX1NHSSB8IChQQ0lfREVWSUNFX0lEX1NHSV9JT0MzIDw8IDE2KSkpCi0JCWdvdG8gb2hfbXlfZ2F3ZDsKLQotCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUxX2NmZy5jWyhmbiA8PCA4KSB8ICh3aGVyZSBeICg0IC0gc2l6ZSkpXTsKLQotCWlmIChzaXplID09IDEpIHsKLQkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHU4ICopIGFkZHIpOwotCX0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7Ci0JCXJlcyA9IHB1dF9kYmUodmFsdWUsICh1MTYgKikgYWRkcik7Ci0JfSBlbHNlIHsKLQkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHUzMiAqKSBhZGRyKTsKLQl9Ci0KLQlpZiAocmVzKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotb2hfbXlfZ2F3ZDoKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gdG91Y2ggdGhlIHdyb25nIHJlZ2lzdGVyLgotCSAqLwotCWlmICgod2hlcmUgPj0gMHgxNCAmJiB3aGVyZSA8IDB4NDApIHx8ICh3aGVyZSA+PSAweDQ4KSkKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgdHJ5IHRvIGFjY2VzcwotCSAqIGFueXRoaW5nIGJ1dCAzMi1iaXQgd29yZHMgLi4uCi0JICovCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5sW3doZXJlID4+IDJdOwotCi0JaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlzaGlmdCA9ICgod2hlcmUgJiAzKSA8PCAzKTsKLQltYXNrID0gKDB4ZmZmZmZmZmZVID4+ICgoNCAtIHNpemUpIDw8IDMpKTsKLQlzbWFzayA9IG1hc2sgPDwgc2hpZnQ7Ci0KLQljZiA9IChjZiAmIH5zbWFzaykgfCAoKHZhbHVlICYgbWFzaykgPDwgc2hpZnQpOwotCWlmIChwdXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBwY2lfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCi17Ci0JaWYgKGJ1cy0+bnVtYmVyID4gMCkKLQkJcmV0dXJuIHBjaV9jb25mMV93cml0ZV9jb25maWcoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKLQotCXJldHVybiBwY2lfY29uZjBfd3JpdGVfY29uZmlnKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBicmlkZ2VfcGNpX29wcyA9IHsKLQkucmVhZCA9IHBjaV9yZWFkX2NvbmZpZywKLQkud3JpdGUgPSBwY2lfd3JpdGVfY29uZmlnLAotfTsKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBicmlkZ2VfcGNpX29wczsKIAogaW50IF9faW5pdCBicmlkZ2VfcHJvYmUobmFzaWRfdCBuYXNpZCwgaW50IHdpZGdldF9pZCwgaW50IG1hc3RlcndpZCkKIHsKQEAgLTM3MCw4ICs4MCw3IEBACiAJYmMtPndpZGdldF9pZCA9IHdpZGdldF9pZDsKIAliYy0+bmFzaWQgPSBuYXNpZDsKIAotCWJjLT5iYWRkciA9ICh1NjQpbWFzdGVyd2lkIDw8IDYwOwotCWJjLT5iYWRkciB8PSAoMVVMIDw8IDU2KTsJLyogQmFycmllciBzZXQgKi8KKwliYy0+YmFkZHIgPSAodTY0KW1hc3RlcndpZCA8PCA2MCB8IFBDSTY0X0FUVFJfQkFSOwogCiAJLyoKIAkgKiBwb2ludCB0byB0aGlzIGJyaWRnZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktam1yMzkyNy5jIGIvYXJjaC9taXBzL3BjaS9wY2ktam1yMzkyNy5jCmluZGV4IGYwMmVmNmUuLmNiODRmNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWptcjM5MjcuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1qbXIzOTI3LmMKQEAgLTM1LDE3ICszNSwxNyBAQAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogCiBzdHJ1Y3QgcmVzb3VyY2UgcGNpX2lvX3Jlc291cmNlID0gewotCSJJTyBNRU0iLAotCTB4MTAwMCwJCQkvKiByZXNlcnZlIHJlZ2FjeSBJL08gc3BhY2UgKi8KLQkweDEwMDAgKyBKTVIzOTI3X1BDSUlPX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfSU8KKwkubmFtZQk9ICJJTyBNRU0iLAorCS5zdGFydAk9IDB4MTAwMCwJCQkvKiByZXNlcnZlIHJlZ2FjeSBJL08gc3BhY2UgKi8KKwkuZW5kCT0gMHgxMDAwICsgSk1SMzkyN19QQ0lJT19TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCiB9OwogCiBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZSA9IHsKLQkiUENJIE1FTSIsCi0JSk1SMzkyN19QQ0lNRU0sCi0JSk1SMzkyN19QQ0lNRU0gKyBKTVIzOTI3X1BDSU1FTV9TSVpFIC0gMSwKLQlJT1JFU09VUkNFX01FTQorCS5uYW1lCT0gIlBDSSBNRU0iLAorCS5zdGFydAk9IEpNUjM5MjdfUENJTUVNLAorCS5lbmQJPSBKTVIzOTI3X1BDSU1FTSArIEpNUjM5MjdfUENJTUVNX1NJWkUgLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiB9OwogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgam1yMzkyN19wY2lfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktb2NlbG90LmMgYi9hcmNoL21pcHMvcGNpL3BjaS1vY2Vsb3QuYwppbmRleCAzZGE4YTRlLi4yYjk0OTVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1vY2Vsb3QuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1vY2Vsb3QuYwpAQCAtNzEsMTMgKzcxLDEzIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb2NlbG90X21lbV9yZXNvdXJjZSA9IHsKLQlpb21lbV9yZXNvdXJjZS5zdGFydCA9IEdUX1BDSV9NRU1fQkFTRTsKLQlpb21lbV9yZXNvdXJjZS5lbmQgPSBHVF9QQ0lfTUVNX0JBU0UgKyBHVF9QQ0lfTUVNX0JBU0UgLSAxOworCXN0YXJ0CT0gR1RfUENJX01FTV9CQVNFOworCWVuZAk9IEdUX1BDSV9NRU1fQkFTRSArIEdUX1BDSV9NRU1fQkFTRSAtIDE7CiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG9jZWxvdF9pb19yZXNvdXJjZSA9IHsKLQlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSBHVF9QQ0lfSU9fQkFTRTsKLQlpb3BvcnRfcmVzb3VyY2UuZW5kID0gR1RfUENJX0lPX0JBU0UgKyBHVF9QQ0lfSU9fU0laRSAtIDE7CisJc3RhcnQJPSBHVF9QQ0lfSU9fQkFTRTsKKwllbmQJPSBHVF9QQ0lfSU9fQkFTRSArIEdUX1BDSV9JT19TSVpFIC0gMTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgb2NlbG90X3BjaV9jb250cm9sbGVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2kteW9zZW1pdGUuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLXlvc2VtaXRlLmMKaW5kZXggZGFjOWVkNC4uMDM1Nzk0NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2kteW9zZW1pdGUuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS15b3NlbWl0ZS5jCkBAIC0xNCw3ICsxNCwxMCBAQAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHRpdGFuX3BjaV9vcHM7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHlfbWVtX3Jlc291cmNlID0gewotCSJUaXRhbiBQQ0kgTUVNIiwgMHhlMDAwMDAwMFVMLCAweGUzZmZmZmZmVUwsIElPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gMHhlMDAwMDAwMFVMLAorCS5lbmQJPSAweGUzZmZmZmZmVUwsCisJLm5hbWUJPSAiVGl0YW4gUENJIE1FTSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIC8qCkBAIC0yNiw3ICsyOSwxMCBAQAogI2RlZmluZSBUSVRBTl9JT19CQVNFCTB4ZTgwMDAwMDBVTAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB5X2lvX3Jlc291cmNlID0gewotCSJUaXRhbiBJTyBNRU0iLCAweDAwMDAxMDAwVUwsIFRJVEFOX0lPX1NJWkUgLSAxLCBJT1JFU09VUkNFX0lPLAorCS5zdGFydAk9IDB4MDAwMDEwMDBVTCwKKwkuZW5kCT0gVElUQU5fSU9fU0laRSAtIDEsCisJLm5hbWUJPSAiVGl0YW4gSU8gTUVNIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBweV9jb250cm9sbGVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2kuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKaW5kZXggMjE0MDJmZi4uNGRmY2UxNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2kuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS5jCkBAIC03NiwxMSArNzYsNiBAQAogCXJlcy0+c3RhcnQgPSBzdGFydDsKIH0KIAotc3RydWN0IHBjaV9jb250cm9sbGVyICogX19pbml0IGFsbG9jX3BjaV9jb250cm9sbGVyKHZvaWQpCi17Ci0JcmV0dXJuIGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBwY2lfY29udHJvbGxlcikpOwotfQotCiB2b2lkIF9faW5pdCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7CiAJKmhvc2VfdGFpbCA9IGhvc2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9wY2kuYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BjaS5jCmluZGV4IGJhYTY5MDUuLmVlZTRmM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BjaS5jCkBAIC0yNywxNyArMjcsMTcgQEAKICNpbmNsdWRlIDxuYW5kLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX2lvX3Jlc291cmNlID0gewotCSJwY2kgSU8gc3BhY2UiLAotCSh1MzIpKFBOWDg1NTBfUENJSU8gKyAweDEwMDApLAkvKiByZXNlcnZlIHJlZ2FjeSBJL08gc3BhY2UgKi8KLQkodTMyKShQTlg4NTUwX1BDSUlPICsgUE5YODU1MF9QQ0lJT19TSVpFKSwKLQlJT1JFU09VUkNFX0lPCisJLnN0YXJ0CT0gUE5YODU1MF9QQ0lJTyArIDB4MTAwMCwJLyogcmVzZXJ2ZSByZWdhY3kgSS9PIHNwYWNlICovCisJLmVuZAk9IFBOWDg1NTBfUENJSU8gKyBQTlg4NTUwX1BDSUlPX1NJWkUsCisJLm5hbWUJPSAicGNpIElPIHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2UgPSB7Ci0JInBjaSBtZW1vcnkgc3BhY2UiLAotCSh1MzIpKFBOWDg1NTBfUENJTUVNKSwKLQkodTMyKShQTlg4NTUwX1BDSU1FTSArIFBOWDg1NTBfUENJTUVNX1NJWkUgLSAxKSwKLQlJT1JFU09VUkNFX01FTQorCS5zdGFydAk9IFBOWDg1NTBfUENJTUVNLAorCS5lbmQJPSBQTlg4NTUwX1BDSU1FTSArIFBOWDg1NTBfUENJTUVNX1NJWkUgLSAxLAorCS5uYW1lCT0gInBjaSBtZW1vcnkgc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiB9OwogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgcG54ODU1MF9wY2lfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3NldHVwLmMKaW5kZXggMGQ4YTc3Ni4uMGU3OTFmNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9zZXR1cC5jCkBAIC01OCwxMCArNTgsMjcgQEAKIGV4dGVybiBjaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiAKIHN0cnVjdCByZXNvdXJjZSBzdGFuZGFyZF9pb19yZXNvdXJjZXNbXSA9IHsKLQl7ImRtYTEiLCAweDAwLCAweDFmLCBJT1JFU09VUkNFX0JVU1l9LAotCXsidGltZXIiLCAweDQwLCAweDVmLCBJT1JFU09VUkNFX0JVU1l9LAotCXsiZG1hIHBhZ2UgcmVnIiwgMHg4MCwgMHg4ZiwgSU9SRVNPVVJDRV9CVVNZfSwKLQl7ImRtYTIiLCAweGMwLCAweGRmLCBJT1JFU09VUkNFX0JVU1l9LAorCXsKKwkJLnN0YXJ0CT0gLjB4MDAsCisJCS5lbmQJPSAweDFmLAorCQkubmFtZQk9ICJkbWExIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDQwLAorCQkuZW5kCT0gMHg1ZiwKKwkJLm5hbWUJPSAidGltZXIiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4ODAsCisJCS5lbmQJPSAweDhmLAorCQkubmFtZQk9ICJkbWEgcGFnZSByZWciLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4YzAsCisJCS5lbmQJPSAweGRmLAorCQkubmFtZQk9ICJkbWEyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwKIH07CiAKICNkZWZpbmUgU1RBTkRBUkRfSU9fUkVTT1VSQ0VTIChzaXplb2Yoc3RhbmRhcmRfaW9fcmVzb3VyY2VzKS9zaXplb2Yoc3RydWN0IHJlc291cmNlKSkKQEAgLTgyLDcgKzk5LDcgQEAKIAogaW50IHBueDg1NTBfY29uc29sZV9wb3J0ID0gLTE7CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJaW50IGk7CiAJY2hhciogYXJncHRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKaW5kZXggM2Y3MjRkNi4uYWEwZDZmZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlweV9ydGNfc2V0dXAoKTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlib2FyZF90aW1lX2luaXQgPSB5b3NlbWl0ZV90aW1lX2luaXQ7CiAJbGF0ZV90aW1lX2luaXQgPSBweV9sYXRlX3RpbWVfaW5pdDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9xZW11L01ha2VmaWxlIGIvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKaW5kZXggNzMwZjQ1OS4uMDc4Y2QzMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBRZW11IHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CQk9IHEtZmlybXdhcmUubyBxLWlycS5vIHEtbWVtLm8gcS1zZXR1cC5vCitvYmoteQkJPSBxLWZpcm13YXJlLm8gcS1pcnEubyBxLW1lbS5vIHEtc2V0dXAubyBxLXJlc2V0Lm8KIAogb2JqLSQoQ09ORklHX1NNUCkgKz0gcS1zbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3FlbXUvcS1yZXNldC5jIGIvYXJjaC9taXBzL3FlbXUvcS1yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNGViY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcWVtdS9xLXJlc2V0LmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3FlbXUuaD4KKworc3RhdGljIHZvaWQgcWVtdV9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnJlZyA9ICh1bnNpZ25lZCBpbnQgKilRRU1VX1JFU1RBUlRfUkVHOworCisJc2V0X2MwX3N0YXR1cyhTVDBfQkVWIHwgU1QwX0VSTCk7CisJY2hhbmdlX2MwX2NvbmZpZyhDT05GX0NNX0NNQVNLLCBDT05GX0NNX1VOQ0FDSEVEKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwl3cml0ZV9jMF93aXJlZCgwKTsKKwkqcmVnID0gNDI7CisJd2hpbGUgKDEpCisJCWNwdV93YWl0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHFlbXVfbWFjaGluZV9oYWx0KHZvaWQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpyZWcgPSAodW5zaWduZWQgaW50ICopUUVNVV9IQUxUX1JFRzsKKworCSpyZWcgPSA0MjsKKwl3aGlsZSAoMSkKKwkJY3B1X3dhaXQoKTsKK30KKwordm9pZCBxZW11X3JlYm9vdF9zZXR1cCh2b2lkKQoreworCV9tYWNoaW5lX3Jlc3RhcnQgPSBxZW11X21hY2hpbmVfcmVzdGFydDsKKwlfbWFjaGluZV9oYWx0ID0gcWVtdV9tYWNoaW5lX2hhbHQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcWVtdS9xLXNldHVwLmMgYi9hcmNoL21pcHMvcWVtdS9xLXNldHVwLmMKaW5kZXggMDIyZWIxYS4uZTEwMGQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3FlbXUvcS1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9xZW11L3Etc2V0dXAuYwpAQCAtMiw2ICsyLDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogCitleHRlcm4gdm9pZCBxZW11X3JlYm9vdF9zZXR1cCh2b2lkKTsKKwogI2RlZmluZSBRRU1VX1BPUlRfQkFTRSAweGI0MDAwMDAwCiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQpAQCAtMTgsOCArMjAsMTAgQEAKIAlzZXR1cF9pcnEoMCwgaXJxKTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlzZXRfaW9fcG9ydF9iYXNlKFFFTVVfUE9SVF9CQVNFKTsKIAlib2FyZF90aW1lcl9zZXR1cCA9IHFlbXVfdGltZXJfc2V0dXA7CisKKwlxZW11X3JlYm9vdF9zZXR1cCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKaW5kZXggNzAxOGUxOC4uZDcxMzg5MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCkBAIC01Myw3ICs1Myw3IEBACiBleHRlcm4gdm9pZCBpcDIyX2JlX2luaXQodm9pZCkgX19pbml0OwogZXh0ZXJuIHZvaWQgaXAyMl90aW1lX2luaXQodm9pZCkgX19pbml0OwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWNoYXIgKmN0eXBlOwogCWNoYXIgKmNzZXJpYWw7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvS2NvbmZpZyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnCmluZGV4IDdiMGJjNDQuLmYxNGVmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnCkBAIC00LDMxICs0LDI5IEBACiAjCSAgVGhpcyBvcHRpb25zIGFkZHMgc3VwcG9ydCBmb3IgdXNlcnNwYWNlIHByb2Nlc3NlcyB1cHRvIDE2VEIgc2l6ZS4KICMJICBOb3JtYWxseSB0aGUgbGltaXQgaXMganVzdCAuNVRCLgogCi1jb25maWcgU0dJX1NOMF9OX01PREUKK2Nob2ljZQorCXByb21wdCAiTm9kZSBhZGRyZXNzaW5nIG1vZGUiCisJZGVwZW5kcyBvbiBTR0lfSVAyNworCWRlZmF1bHQgU0dJX1NOX01fTU9ERQorCitjb25maWcgU0dJX1NOX01fTU9ERQorCWJvb2wgIklQMjcgTS1Nb2RlIgorCWhlbHAKKwkgIFRoZSBub2RlcyBvZiBPcmlnaW4sIE9ueXgsIEZ1ZWwgYW5kIFRlenJvIHN5c3RlbXMgY2FuIGJlIGNvbmZpZ3VyZWQKKwkgIGluIGVpdGhlciBOLU1vZGVzIHdoaWNoIGFsbG93cyBmb3IgbW9yZSBub2RlcyBvciBNLU1vZGUgd2hpY2ggYWxsb3dzCisJICBmb3IgbW9yZSBtZW1vcnkuICBZb3VyIGhhcmR3YXJlIGlzIGFsbW9zdCBjZXJ0YWlubHkgcnVubmluZyBpbgorCSAgTS1Nb2RlLCBzbyBjaG9vc2UgTS1tb2RlIGhlcmUuCisKK2NvbmZpZyBTR0lfU05fTl9NT0RFCiAJYm9vbCAiSVAyNyBOLU1vZGUiCi0JZGVwZW5kcyBvbiBTR0lfSVAyNworCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJaGVscAotCSAgVGhlIG5vZGVzIG9mIE9yaWdpbiAyMDAsIE9yaWdpbiAyMDAwIGFuZCBPbnl4IDIgc3lzdGVtcyBjYW4gYmUKLQkgIGNvbmZpZ3VyZWQgaW4gZWl0aGVyIE4tTW9kZXMgd2hpY2ggYWxsb3dzIGZvciBtb3JlIG5vZGVzIG9yIE0tTW9kZQotCSAgd2hpY2ggYWxsb3dzIGZvciBtb3JlIG1lbW9yeS4gIFlvdXIgc3lzdGVtIGlzIG1vc3QgcHJvYmFibHkKLQkgIHJ1bm5pbmcgaW4gTS1Nb2RlLCBzbyB5b3Ugc2hvdWxkIHNheSBOIGhlcmUuCisJICBUaGUgbm9kZXMgb2YgT3JpZ2luLCBPbnl4LCBGdWVsIGFuZCBUZXpybyBzeXN0ZW1zIGNhbiBiZSBjb25maWd1cmVkCisJICBpbiBlaXRoZXIgTi1Nb2RlcyB3aGljaCBhbGxvd3MgZm9yIG1vcmUgbm9kZXMgb3IgTS1Nb2RlIHdoaWNoIGFsbG93cworCSAgZm9yIG1vcmUgbWVtb3J5LiAgWW91ciBoYXJkd2FyZSBpcyBhbG1vc3QgY2VydGFpbmx5IHJ1bm5pbmcgaW4KKwkgIE0tTW9kZSwgc28gY2hvb3NlIE0tbW9kZSBoZXJlLgogCi1jb25maWcgQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCi0JYm9vbAotCWRlZmF1bHQgeSBpZiBTR0lfSVAyNwotCWhlbHAKLQkgIFNheSBZIHRvIHVwcG9ydCBlZmZpY2llbnQgaGFuZGxpbmcgb2YgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnksCi0JICBmb3IgYXJjaGl0ZWN0dXJlcyB3aGljaCBhcmUgZWl0aGVyIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpCi0JICBvciBoYXZlIGh1Z2UgaG9sZXMgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgZm9yIG90aGVyIHJlYXNvbnMuCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92bS9udW1hPiBmb3IgbW9yZS4KLQotY29uZmlnIE5VTUEKLQlib29sICJOVU1BIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTR0lfSVAyNwotCWhlbHAKLQkgIFNheSBZIHRvIGNvbXBpbGUgdGhlIGtlcm5lbCB0byBzdXBwb3J0IE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeQotCSAgQWNjZXNzKS4gIFRoaXMgb3B0aW9uIGlzIGZvciBjb25maWd1cmluZyBoaWdoLWVuZCBtdWx0aXByb2Nlc3NvcgotCSAgc2VydmVyIG1hY2hpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLgorZW5kY2hvaWNlCiAKIGNvbmZpZyBNQVBQRURfS0VSTkVMCiAJYm9vbCAiTWFwcGVkIGtlcm5lbCBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaW5pdC5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaW5pdC5jCmluZGV4IDg2NTFhMGUuLmE2YjQ5MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWluaXQuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogZXh0ZXJuIHZvaWQgaXAyN190aW1lX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpcDI3X3JlYm9vdF9zZXR1cCh2b2lkKTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlodWJyZWdfdCBwLCBlLCBuX21vZGU7CiAJbmFzaWRfdCBuaWQ7CkBAIC0yMjgsNyArMjI4LDcgQEAKIAkgKi8KIAluX21vZGUgPSBMT0NBTF9IVUJfTChOSV9TVEFUVVNfUkVWX0lEKSAmIE5TUklfTU9SRU5PREVTX01BU0s7CiAJcHJpbnRrKCJNYWNoaW5lIGlzIGluICVjIG1vZGUuXG4iLCBuX21vZGUgPyAnTicgOiAnTScpOwotI2lmZGVmIENPTkZJR19TR0lfU04wX05fTU9ERQorI2lmZGVmIENPTkZJR19TR0lfU05fTl9NT0RFCiAJaWYgKCFuX21vZGUpCiAJCXBhbmljKCJLZXJuZWwgY29tcGlsZWQgZm9yIE0gbW9kZS4iKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCmluZGV4IDJlNjQzZDIuLjBiNjFhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX21hcFtOUl9JUlFTIC8gQklUU19QRVJfTE9OR107CiAKLXN0YXRpYyBpbnQgYWxsb2NhdGVfaXJxbm8odm9pZCkKK2ludCBhbGxvY2F0ZV9pcnFubyh2b2lkKQogewogCWludCBpcnE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IDM2YjY2MmUuLjFmYjg2MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtODksMTEgKzg5LDEzIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHVuc2lnbmVkIGludCBydF90aW1lcl9pcnE7CisKIHZvaWQgaXAyN19ydF90aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgY3B1QSA9IGNwdXRvc2xpY2UoY3B1KSA9PSAwOwotCWludCBpcnEgPSA5OwkJCQkvKiBYWFggQXNzaWduIG51bWJlciAqLworCXVuc2lnbmVkIGludCBpcnEgPSBydF90aW1lcl9pcnE7CiAKIAlpcnFfZW50ZXIoKTsKIAl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKQEAgLTE3OSwxMyArMTgxLDY4IEBACiAgICAgICAgIHJldHVybiBta3RpbWUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbiwgc2VjKTsKIH0KIAorc3RhdGljIHZvaWQgc3RhcnR1cF9ydF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgc2h1dGRvd25fcnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9ydF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9ydF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX3J0KHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9ydF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBydF9pcnFfdHlwZSA9IHsKKwkudHlwZW5hbWUJPSAiU04gSFVCIFJUIHRpbWVyIiwKKwkuc3RhcnR1cAk9IHN0YXJ0dXBfcnRfaXJxLAorCS5zaHV0ZG93bgk9IHNodXRkb3duX3J0X2lycSwKKwkuZW5hYmxlCQk9IGVuYWJsZV9ydF9pcnEsCisJLmRpc2FibGUJPSBkaXNhYmxlX3J0X2lycSwKKwkuYWNrCQk9IG1hc2tfYW5kX2Fja19ydCwKKwkuZW5kCQk9IGVuZF9ydF9pcnEsCit9OworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBydF9pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIJPSBpcDI3X3J0X3RpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCisJLm5hbWUJCT0gInRpbWVyIgorfTsKKworZXh0ZXJuIGludCBhbGxvY2F0ZV9pcnFubyh2b2lkKTsKKwogc3RhdGljIHZvaWQgaXAyN190aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCiB7CisJaW50IGlycW5vICA9IGFsbG9jYXRlX2lycW5vKCk7CisKKwlpZiAoaXJxbm8gPCAwKQorCQlwYW5pYygiQ2FuJ3QgYWxsb2NhdGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGltZXIgaW50ZXJydXB0Iik7CisKKwlpcnFfZGVzY1tpcnFub10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCWlycV9kZXNjW2lycW5vXS5hY3Rpb24gPSBOVUxMOworCWlycV9kZXNjW2lycW5vXS5kZXB0aCA9IDE7CisJaXJxX2Rlc2NbaXJxbm9dLmhhbmRsZXIgPSAmcnRfaXJxX3R5cGU7CisKIAkvKiBvdmVyLXdyaXRlIHRoZSBoYW5kbGVyLCB3ZSB1c2Ugb3VyIG93biB3YXkgKi8KIAlpcnEtPmhhbmRsZXIgPSBub19hY3Rpb247CiAKIAkvKiBzZXR1cCBpcnFhY3Rpb24gKi8KLS8vCXNldHVwX2lycShJUDI3X1RJTUVSX0lSUSwgaXJxKTsJCS8qIFhYWCBDYW4ndCBkbyB0aGlzIHlldC4gICovCisJaXJxX2Rlc2NbaXJxbm9dLnN0YXR1cyB8PSBJUlFfUEVSX0NQVTsKKworCXJ0X3RpbWVyX2lycSA9IGlycW5vOwogfQogCiB2b2lkIF9faW5pdCBpcDI3X3RpbWVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKaW5kZXggYTJkZDhhZS4uYWNiZGFkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJc2V0dXBfaXJxKElQMzJfUjRLX1RJTUVSX0lSUSwgaXJxKTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlib2FyZF9iZV9pbml0ID0gaXAzMl9iZV9pbml0OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3RpbWUuYwppbmRleCBlNTQ1NzUyLi5lZmFmODNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC90aW1lLmMKQEAgLTExMCwxNyArMTEwLDE4IEBACiAJX19yYXdfd3JpdGVxKE1fU0NEX1RJTUVSX0VOQUJMRXxNX1NDRF9USU1FUl9NT0RFX0NPTlRJTlVPVVMsCiAJICAgICAgSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKGNwdSwgUl9TQ0RfVElNRVJfQ0ZHKSkpOwogCi0JLyoKLQkgKiBDUFUgMCBoYW5kbGVzIHRoZSBnbG9iYWwgdGltZXIgaW50ZXJydXB0IGpvYgotCSAqLwogCWlmIChjcHUgPT0gMCkgeworCQkvKgorCQkgKiBDUFUgMCBoYW5kbGVzIHRoZSBnbG9iYWwgdGltZXIgaW50ZXJydXB0IGpvYgorCQkgKi8KIAkJbGxfdGltZXJfaW50ZXJydXB0KGlycSwgcmVncyk7CiAJfQotCi0JLyoKLQkgKiBldmVyeSBDUFUgc2hvdWxkIGRvIHByb2ZpbGluZyBhbmQgcHJvY2VzcyBhY2NvdXRpbmcKLQkgKi8KLQlsbF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoaXJxLCByZWdzKTsKKwllbHNlIHsKKwkJLyoKKwkJICogb3RoZXIgQ1BVcyBzaG91bGQganVzdCBkbyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZworCQkgKi8KKwkJbGxfbG9jYWxfdGltZXJfaW50ZXJydXB0KGlycSwgcmVncyk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwppbmRleCAwZjZlNTRkLi5mODUzYzMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwpAQCAtNDM1LDEzICs0MzUsMTcgQEAKIAlyZXR1cm4gbHo7CiB9CiAKK2V4dGVybiB2b2lkIHNiMTI1MF90aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgc2IxMjUwX21haWxib3hfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHNiMTI1MF9rZ2RiX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKIGFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgcGVuZGluZzsKIAogI2lmZGVmIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YKIAkvKiBTZXQgY29tcGFyZSB0byBjb3VudCB0byBzaWxlbmNlIGNvdW50L2NvbXBhcmUgdGltZXIgaW50ZXJydXB0cyAqLwotCXdyaXRlX2MwX2NvdW50KHJlYWRfYzBfY291bnQoKSk7CisJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvdW50KCkpOwogI2VuZGlmCiAKIAkvKgpAQCAtNDgyLDcgKzQ4Niw3IEBACiAJCSAqIERlZmF1bHQuLi53ZSd2ZSBoaXQgYW4gSVBbMl0gaW50ZXJydXB0LCB3aGljaCBtZWFucyB3ZSd2ZQogCQkgKiBnb3QgdG8gY2hlY2sgdGhlIDEyNTAgaW50ZXJydXB0IHJlZ2lzdGVycyB0byBmaWd1cmUgb3V0IHdoYXQKIAkJICogdG8gZG8uICBOZWVkIHRvIGRldGVjdCB3aGljaCBDUFUgd2UncmUgb24sIG5vdyB0aGF0Ci0JCSB+IHNtcF9hZmZpbml0eSBpcyBzdXBwb3J0ZWQuCisJCSAqIHNtcF9hZmZpbml0eSBpcyBzdXBwb3J0ZWQuCiAJCSAqLwogCQltYXNrID0gX19yYXdfcmVhZHEoSU9BRERSKEFfSU1SX1JFR0lTVEVSKHNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUl9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFKSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCmluZGV4IDRiNWY3NGYuLmY5ZTY5NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKQEAgLTcyLDggKzcyLDEwIEBACiAKIHZvaWQgX19pbml0IHN3YXJtX3RpbWVfaW5pdCh2b2lkKQogeworI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9TQjEyNTApIHx8IGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xMTJYKQogCS8qIFNldHVwIEhQVCAqLwogCXNiMTI1MF9ocHRfc2V0dXAoKTsKKyNlbmRpZgogfQogCiB2b2lkIF9faW5pdCBzd2FybV90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCkBAIC0xMDMsNyArMTA1LDcgQEAKIAlyZXR1cm4gKGlzX2ZpeHVwID8gTUlQU19CRV9GSVhVUCA6IE1JUFNfQkVfRkFUQUwpOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xeDU1KSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfQkNNMXg4MCkKIAliY20xNDgwX3NldHVwKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL01ha2VmaWxlIGIvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQppbmRleCA5YzdlYWE1Li5hNWViMGFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zbmkvTWFrZWZpbGUKQEAgLTMsNSArMyw2IEBACiAjCiAKIG9iai15CSAJKz0gaXJxLm8gcGNpbXRfc2NhY2hlLm8gcmVzZXQubyBzZXR1cC5vCitvYmotJChDT05GSUdfQ1BVX0JJR19FTkRJQU4pICs9IHNuaXByb20ubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3NldHVwLmMgYi9hcmNoL21pcHMvc25pL3NldHVwLmMKaW5kZXggMDFiYTZjNS4uYTA1MGJiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvc2V0dXAuYworKysgYi9hcmNoL21pcHMvc25pL3NldHVwLmMKQEAgLTIxLDggKzIxLDExIEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KIAorI2lmZGVmIENPTkZJR19BUkMKICNpbmNsdWRlIDxhc20vYXJjL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NnaWFsaWIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtL2JjYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNzIsOCArNzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc25pX2Rpc3BsYXlfc2V0dXAodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfVlQKLSNpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkKKyNpZiBkZWZpbmVkKENPTkZJR19WVCkgJiYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX0FSQykKIAlzdHJ1Y3Qgc2NyZWVuX2luZm8gKnNpID0gJnNjcmVlbl9pbmZvOwogCURJU1BMQVlfU1RBVFVTICpkaTsKIApAQCAtODgsMjQgKzkwLDU0IEBACiAJCXNpLT5vcmlnX3ZpZGVvX3BvaW50cwk9IDE2OwogCX0KICNlbmRpZgotI2VuZGlmCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc25pX2lvX3Jlc291cmNlID0gewotCSJQQ0lNVCBJTyBNRU0iLCAweDAwMDAxMDAwVUwsIDB4MDNiZmZmZmZVTCwgSU9SRVNPVVJDRV9JTywKKwkuc3RhcnQJPSAweDAwMDAxMDAwVUwsCisJLmVuZAk9IDB4MDNiZmZmZmZVTCwKKwkubmFtZQk9ICJQQ0lNVCBJTyBNRU0iLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaW10X2lvX3Jlc291cmNlc1tdID0gewotCXsgImRtYTEiLCAweDAwLCAweDFmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJ0aW1lciIsIDB4NDAsIDB4NWYsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgImtleWJvYXJkIiwgMHg2MCwgMHg2ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiZG1hIHBhZ2UgcmVnIiwgMHg4MCwgMHg4ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiZG1hMiIsIDB4YzAsIDB4ZGYsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgIlBDSSBjb25maWcgZGF0YSIsIDB4Y2ZjLCAweGNmZiwgSU9SRVNPVVJDRV9CVVNZIH0KKwl7CisJCS5zdGFydAk9IDB4MDAsCisJCS5lbmQJPSAweDFmLAorCQkubmFtZQk9ICJkbWExIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg0MCwKKwkJLmVuZAk9IDB4NWYsCisJCS5uYW1lCT0gInRpbWVyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg2MCwKKwkJLmVuZAk9IDB4NmYsCisJCS5uYW1lCT0gImtleWJvYXJkIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg4MCwKKwkJLmVuZAk9IDB4OGYsCisJCS5uYW1lCT0gImRtYSBwYWdlIHJlZyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gIDB4YzAsCisJCS5lbmQJPSAweGRmLAorCQkubmFtZQk9ICJkbWEyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHhjZmMsCisJCS5lbmQJPSAweGNmZiwKKwkJLm5hbWUJPSAiUENJIGNvbmZpZyBkYXRhIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfQogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmlfbWVtX3Jlc291cmNlID0gewotCSJQQ0lNVCBQQ0kgTUVNIiwgMHgxMDAwMDAwMFVMLCAweGZmZmZmZmZmVUwsIElPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gMHgxMDAwMDAwMFVMLAorCS5lbmQJPSAweGZmZmZmZmZmVUwsCisJLm5hbWUJPSAiUENJTVQgUENJIE1FTSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIC8qCkBAIC0xMjIsMTkgKzE1NCw3MiBAQAogICogMHhhMDAwMDAwMCAtIDB4ZmZmZmZmZmYgKDEuNUdCKSBQQ0kvRUlTQSBCdXMgTWVtb3J5CiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpbXRfbWVtX3Jlc291cmNlc1tdID0gewotCXsgIlZpZGVvIFJBTSBhcmVhIiwgMHgxMDBhMDAwMCwgMHgxMDBiZmZmZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiSVNBIFJlc2VydmVkIiwgMHgxMDBjMDAwMCwgMHgxMDBmZmZmZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiUENJIElPIiwgMHgxNDAwMDAwMCwgMHgxN2JmZmZmZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiQ2FjaGUgUmVwbGFjZW1lbnQgQXJlYSIsIDB4MTdjMDAwMDAsIDB4MTdmZmZmZmYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyAiUENJIElOVCBBY2tub3dsZWRnZSIsIDB4MWEwMDAwMDAsIDB4MWEwMDAwMDMsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgIkJvb3QgUFJPTSIsIDB4MWZjMDAwMDAsIDB4MWZjN2ZmZmYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyAiRGlhZyBQUk9NIiwgMHgxZmM4MDAwMCwgMHgxZmNmZmZmZiwgSU9SRVNPVVJDRV9CVVNZfSwKLQl7ICJYLUJ1cyIsIDB4MWZkMDAwMDAsIDB4MWZkZmZmZmYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyAiQklPUyBtYXAiLCAweDFmZTAwMDAwLCAweDFmZWZmZmZmLCBJT1JFU09VUkNFX0JVU1l9LAotCXsgIk5WUkFNIC8gRUVQUk9NIiwgMHgxZmYwMDAwMCwgMHgxZmY3ZmZmZiwgSU9SRVNPVVJDRV9CVVNZfSwKLQl7ICJBU0lDIFBDSSIsIDB4MWZmZjAwMDAsIDB4MWZmZmVmZmYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyAiTVAgQWdlbnQiLCAweDFmZmZmMDAwLCAweDFmZmZmZmZmLCBJT1JFU09VUkNFX0JVU1l9LAotCXsgIk1haW4gTWVtb3J5IiwgMHgyMDAwMDAwMCwgMHg5ZmZmZmZmZiwgSU9SRVNPVVJDRV9CVVNZfQorCXsKKwkJLnN0YXJ0CT0gMHgxMDBhMDAwMCwKKwkJLmVuZAk9IDB4MTAwYmZmZmYsCisJCS5uYW1lCT0gIlZpZGVvIFJBTSBhcmVhIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDEwMGMwMDAwLAorCQkuZW5kCT0gMHgxMDBmZmZmZiwKKwkJLm5hbWUJPSAiSVNBIFJlc2VydmVkIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDE0MDAwMDAwLAorCQkuZW5kCT0gMHgxN2JmZmZmZiwKKwkJLm5hbWUJPSAiUENJIElPIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDE3YzAwMDAwLAorCQkuZW5kCT0gMHgxN2ZmZmZmZiwKKwkJLm5hbWUJPSAiQ2FjaGUgUmVwbGFjZW1lbnQgQXJlYSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxYTAwMDAwMCwKKwkJLmVuZAk9IDB4MWEwMDAwMDMsCisJCS5uYW1lCT0gIlBDSSBJTlQgQWNrbm93bGVkZ2UiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZjMDAwMDAsCisJCS5lbmQJPSAweDFmYzdmZmZmLAorCQkubmFtZQk9ICJCb290IFBST00iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZjODAwMDAsCisJCS5lbmQJPSAweDFmY2ZmZmZmLAorCQkubmFtZQk9ICJEaWFnIFBST00iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZkMDAwMDAsCisJCS5lbmQJPSAweDFmZGZmZmZmLAorCQkubmFtZQk9ICJYLUJ1cyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmUwMDAwMCwKKwkJLmVuZAk9IDB4MWZlZmZmZmYsCisJCS5uYW1lCT0gIkJJT1MgbWFwIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmZjAwMDAwLAorCQkuZW5kCT0gMHgxZmY3ZmZmZiwKKwkJLm5hbWUJPSAiTlZSQU0gLyBFRVBST00iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZmZjAwMDAsCisJCS5lbmQJPSAweDFmZmZlZmZmLAorCQkubmFtZQk9ICJBU0lDIFBDSSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmZmZjAwMCwKKwkJLmVuZAk9IDB4MWZmZmZmZmYsCisJCS5uYW1lCT0gIk1QIEFnZW50IiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDIwMDAwMDAwLAorCQkuZW5kCT0gMHg5ZmZmZmZmZiwKKwkJLm5hbWUJPSAiTWFpbiBNZW1vcnkiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9CiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc25pX3Jlc291cmNlX2luaXQodm9pZCkKQEAgLTE2OCw3ICsyNTMsNyBAQAogCXJ0Y19taXBzX3NldF90aW1lID0gbWMxNDY4MThfc2V0X3J0Y19tbXNzOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXNuaV9wY2ltdF9kZXRlY3QoKTsKIAlzbmlfcGNpbXRfc2NfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9zbmlwcm9tLmMgYi9hcmNoL21pcHMvc25pL3NuaXByb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQwZjFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3NuaS9zbmlwcm9tLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBCaWcgRW5kaWFuIFBST00gY29kZSBmb3IgU05JIFJNIG1hY2hpbmVzCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgRmxvcmlhbiBMb2hvZmYgKGZsb0ByZmM4MjIub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGhvbWFzIEJvZ2VuZG9lcmZlciAodHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZSkKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9zbmkuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3Byb20uaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworLyogc3BlY2lhbCBTTkkgcHJvbSBjYWxscyAqLworLyoKKyAqIFRoaXMgZG9lcyBub3QgZXhpc3QgaW4gYWxsIHByb21zIC0gU0lOSVggY29tcGFyZXMKKyAqIHRoZSBwcm9tIGVudiB2YXJpYWJsZSAidmVyc2lvbiIgYWdhaW5zdCAiMi4wMDA4IgorICogb3IgZ3JlYXRlci4gSWYgbGVzc2VyIGl0IHRyaWVzIHRvIHByb2JlIGludGVyZXN0aW5nCisgKiByZWdpc3RlcnMKKyAqLworI2RlZmluZSBQUk9NX0dFVF9NRU1DT05GCTU4CisKKyNkZWZpbmUgUFJPTV9WRUMJCSh1NjQgKilDS1NFRzFBRERSKDB4MWZjMDAwMDApCisjZGVmaW5lIFBST01fRU5UUlkoeCkJCShQUk9NX1ZFQyArICh4KSkKKworCisjdW5kZWYgREVCVUcKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkdfUFJJTlRGKHguLi4pICAgICBwcm9tX3ByaW50Zih4KQorI2Vsc2UKKyNkZWZpbmUgREJHX1BSSU5URih4Li4uKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgKigqX19wcm9tX3B1dGNoYXIpKGludCkgICAgICAgID0gKGludCAqKCopKGludCkpUFJPTV9FTlRSWShQUk9NX1BVVENIQVIpOworc3RhdGljIGNoYXIgKigqX19wcm9tX2dldGVudikoY2hhciAqKSAgICAgPSAoY2hhciAqKCopKGNoYXIgKikpUFJPTV9FTlRSWShQUk9NX0dFVEVOVik7CitzdGF0aWMgdm9pZCAoKl9fcHJvbV9nZXRfbWVtY29uZikodm9pZCAqKSA9ICh2b2lkICgqKSh2b2lkICopKVBST01fRU5UUlkoUFJPTV9HRVRfTUVNQ09ORik7CisKK2NoYXIgKnByb21fZ2V0ZW52IChjaGFyICpzKQoreworCXJldHVybiBfX3Byb21fZ2V0ZW52KHMpOworfQorCit2b2lkIHByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwljaGFyIHBwYnVmWzEwMjRdOworCWNoYXIgKmJwdHI7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZzcHJpbnRmKHBwYnVmLCBmbXQsIGFyZ3MpOworCisJYnB0ciA9IHBwYnVmOworCisJd2hpbGUgKCpicHRyICE9IDApIHsKKwkJaWYgKCpicHRyID09ICdcbicpCisJCQlfX3Byb21fcHV0Y2hhcignXHInKTsKKworCQlfX3Byb21fcHV0Y2hhcigqYnB0cisrKTsKKwl9CisJdmFfZW5kKGFyZ3MpOworfQorCit1bnNpZ25lZCBsb25nIHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKgorICogL3Byb2MvY3B1aW5mbyBzeXN0ZW0gdHlwZQorICoKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnN5c3R5cGUgPSAiVW5rbm93biI7Citjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gc3lzdHlwZTsKK30KKworI2RlZmluZSBTTklfSURQUk9NX0JBU0UgICAgICAgICAgICAgICAgMHhiZmYwMDAwMAorI2RlZmluZSBTTklfSURQUk9NX01FTVNJWkUgICAgICAgICAgICAgKFNOSV9JRFBST01fQkFTRSsweDI4KSAgLyogTWVtc2l6ZSBpbiAxNk1CIHF1YW50aXRpZXMgKi8KKyNkZWZpbmUgU05JX0lEUFJPTV9CUkRUWVBFICAgICAgICAgICAgIChTTklfSURQUk9NX0JBU0UrMHgyOSkgIC8qIEJvYXJkIFR5cGUgKi8KKyNkZWZpbmUgU05JX0lEUFJPTV9DUFVUWVBFICAgICAgICAgICAgIChTTklfSURQUk9NX0JBU0UrMHgzMCkgIC8qIENQVSBUeXBlICovCisKKyNkZWZpbmUgU05JX0lEUFJPTV9TSVpFCTB4MTAwMAorCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkIHNuaV9pZHByb21fZHVtcCh2b2lkKQoreworCWludAlpOworCisJcHJvbV9wcmludGYoIlNOSSBJRFByb20gZHVtcCAoZmlyc3QgMTI4Ynl0ZSk6XG4iKTsKKwlmb3IoaT0wO2k8MTI4O2krKykgeworCQlpZiAoaSUxNiA9PSAwKQorCQkJcHJvbV9wcmludGYoIiUwNHggIiwgaSk7CisKKwkJcHJvbV9wcmludGYoIiUwMnggIiwgKih1bnNpZ25lZCBjaGFyICopIChTTklfSURQUk9NX0JBU0UraSkpOworCisJCWlmIChpJTE2ID09IDE1KQorCQkJcHJvbV9wcmludGYoIlxuIik7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNuaV9tZW1faW5pdCh2b2lkICkKK3sKKwlpbnQgaSwgbWVtc2l6ZTsKKwlzdHJ1Y3QgbWVtYmFuayB7CisJICAgICAgICB1MzIJCXNpemU7CisJICAgICAgICB1MzIJCWJhc2U7CisJICAgICAgICB1MzIJCXNpemUyOworCSAgICAgICAgdTMyCQlwYWQxOworCSAgICAgICAgdTMyCQlwYWQyOworCX0gbWVtY29uZls4XTsKKworCS8qIE1lbVNJWkUgZnJvbSBwcm9tIGluIDE2TUJ5dGUgY2h1bmtzICovCisJbWVtc2l6ZT0qKCh1bnNpZ25lZCBjaGFyICopIFNOSV9JRFBST01fTUVNU0laRSkgKiAxNjsKKworCURCR19QUklOVEYoIklEUHJvbSBtZW1zaXplOiAlbHUgTUJ5dGVcbiIsIG1lbXNpemUpOworCisJLyogZ2V0IG1lbW9yeSBiYW5rIGxheW91dCBmcm9tIHByb20gKi8KKwlfX3Byb21fZ2V0X21lbWNvbmYoJm1lbWNvbmYpOworCisJREJHX1BSSU5URigicHJvbV9nZXRfbWVtX2NvbmYgbWVtb3J5IGNvbmZpZ3VyYXRpb246XG4iKTsKKwlmb3IoaT0wO2k8OCAmJiBtZW1jb25mW2ldLnNpemU7aSsrKSB7CisJCXByb21fcHJpbnRmKCJCYW5rJWQ6ICUwOHggQCAlMDh4XG4iLCBpLAorCQkJbWVtY29uZltpXS5zaXplLCBtZW1jb25mW2ldLmJhc2UpOworCQlhZGRfbWVtb3J5X3JlZ2lvbihtZW1jb25mW2ldLmJhc2UsIG1lbWNvbmZbaV0uc2l6ZSwgQk9PVF9NRU1fUkFNKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCWludCBhcmdjID0gZndfYXJnMDsKKwljaGFyICoqYXJndiA9ICh2b2lkICopZndfYXJnMTsKKwl1bnNpZ25lZCBpbnQgc25pX2JyZF90eXBlID0gKih1bnNpZ25lZCBjaGFyICopIFNOSV9JRFBST01fQlJEVFlQRTsKKwlpbnQgaTsKKworCURCR19QUklOVEYoIkZvdW5kIFNOSSBicmR0eXBlICUwMnhcbiIsIHNuaV9icmRfdHlwZSk7CisKKyNpZmRlZiBERUJVRworCXNuaV9pZHByb21fZHVtcCgpOworI2VuZGlmCisJc25pX21lbV9pbml0KCk7CisKKwkvKiBjb3B5IHByb20gY21kbGluZSBwYXJhbWV0ZXJzIHRvIGtlcm5lbCBjbWRsaW5lICovCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCBhcmd2W2ldKTsKKwkJaWYgKGkgPCAoYXJnYyAtIDEpKQorCQkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiAiKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jIGIvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3NldHVwLmMKaW5kZXggNzdjM2I2Ni4uODFhNWFjZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3NldHVwLmMKQEAgLTY0LDcgKzY0LDcgQEAKIH0KIAogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWJvYXJkX3RpbWVfaW5pdCA9IHR4NDkyN190aW1lX2luaXQ7CiAJYm9hcmRfdGltZXJfc2V0dXAgPSB0eDQ5MjdfdGltZXJfc2V0dXA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vc2V0dXAuYwppbmRleCBmYzk5Mjk1Li5lZjU5YTVjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL3NldHVwLmMKQEAgLTYxLDcgKzYxLDcgQEAKIH0KIAogdm9pZCBfX2luaXQKLXBsYXRfc2V0dXAodm9pZCkKK3BsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJYm9hcmRfdGltZV9pbml0ID0gdHg0OTM4X3RpbWVfaW5pdDsKIAlib2FyZF90aW1lcl9zZXR1cCA9IHR4NDkzOF90aW1lcl9zZXR1cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zZXR1cC5jIGIvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3NldHVwLmMKaW5kZXggOTE2NmNkNC4uOTZlODMzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3NldHVwLmMKQEAgLTY2NCw3ICs2NjQsMTAgQEAKIAogc3RhdGljIGNoYXIgcGNvZGVfc3RyWzhdOwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0eDQ5MzhfcmVnX3Jlc291cmNlID0gewotCXBjb2RlX3N0ciwgVFg0OTM4X1JFR19CQVNFLCBUWDQ5MzhfUkVHX0JBU0UrVFg0OTM4X1JFR19TSVpFLCBJT1JFU09VUkNFX01FTQorCS5zdGFydAk9IFRYNDkzOF9SRUdfQkFTRSwKKwkuZW5kCT0gVFg0OTM4X1JFR19CQVNFICsgVFg0OTM4X1JFR19TSVpFLAorCS5uYW1lCT0gcGNvZGVfc3RyLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiB9OwogCiB2b2lkIF9faW5pdCB0eDQ5MzhfYm9hcmRfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyBiL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZwppbmRleCAwNTVhMmNkLi42MDQ2ZWYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnCkBAIC00LDcgKzQsNiBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBJU0EKLQlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIApAQCAtMTQsMTggKzEzLDE1IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IElTQQotCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgTkVDX0NNQlZSNDEzMwogCWJvb2wgIlN1cHBvcnQgZm9yIE5FQyBDTUItVlI0MTMzIgogCWRlcGVuZHMgb24gTUFDSF9WUjQxWFgKLQlzZWxlY3QgQ1BVX1ZSNDFYWAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBIV19IQVNfUENJCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKQEAgLTQxLDcgKzM3LDYgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCWhlbHAKQEAgLTc0LDcgKzY5LDYgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCkBAIC04NCw3ICs3OCw2IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKLQlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW5pdC5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW5pdC5jCmluZGV4IDcwN2JkMDkuLjkxNWJmYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2luaXQuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbml0LmMKQEAgLTU4LDcgKzU4LDcgQEAKIAlib2FyZF90aW1lcl9zZXR1cCA9IHNldHVwX3RpbWVyX2lycTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl2cjQxeHhfY2FsY3VsYXRlX2Nsb2NrX2ZyZXF1ZW5jeSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA0MWU5YWI0Li5mNzBiZDA5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTgyMiw2ICs4MjIsNyBAQAogCQkvKiB0cnkgY2FsbGluZyB0aGUgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBtZXRob2QgKi8KIAkJaWYgKGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgMywgMiwgJnJldCwKIAkJCQkgIEFERFIoImlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQiKSwKKwkJCQkgIHJvb3QsCiAJCQkJICBBRERSKGlibV9hcmNoaXRlY3R1cmVfdmVjKSkgPT0gMCkgewogCQkJLyogdGhlIGNhbGwgZXhpc3RzLi4uICovCiAJCQlpZiAocmV0KQpAQCAtMTYyMiw2ICsxNjIzLDE1IEBACiAJCQlpZiAoc3Ryc3RyKHAsIFJFTE9DKCJQb3dlciBNYWNpbnRvc2giKSkgfHwKIAkJCSAgICBzdHJzdHIocCwgUkVMT0MoIk1hY1JJU0MiKSkpCiAJCQkJcmV0dXJuIFBMQVRGT1JNX1BPV0VSTUFDOworI2lmZGVmIENPTkZJR19QUEM2NAorCQkJLyogV2UgbXVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgZGV0ZWN0IHRoZSBJQk0gQ2VsbAorCQkJICogYmxhZGVzIGFzIHBTZXJpZXMgZHVlIHRvIHNvbWUgZmlybXdhcmUgaXNzdWVzLAorCQkJICogc28gd2UgZG8gaXQgaGVyZS4KKwkJCSAqLworCQkJaWYgKHN0cnN0cihwLCBSRUxPQygiSUJNLENCRUEiKSkgfHwKKwkJCSAgICBzdHJzdHIocCwgUkVMT0MoIklCTSxDUEJXLTEuMCIpKSkKKwkJCQlyZXR1cm4gUExBVEZPUk1fR0VORVJJQzsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAkJCWkgKz0gc2wgKyAxOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggMDFlM2MwOC4uOGZkZWNhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC04MDMsMTAgKzgwMywxMyBAQAogCQlpZiAoX19nZXRfdXNlcihjbWNwLCAmdWNwLT51Y19yZWdzKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQltY3AgPSAoc3RydWN0IG1jb250ZXh0IF9fdXNlciAqKSh1NjQpY21jcDsKKwkJLyogbm8gbmVlZCB0byBjaGVjayBhY2Nlc3Nfb2sobWNwKSwgc2luY2UgbWNwIDwgNEdCICovCiAJfQogI2Vsc2UKIAlpZiAoX19nZXRfdXNlcihtY3AsICZ1Y3AtPnVjX3JlZ3MpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgbWNwLCBzaXplb2YoKm1jcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKICNlbmRpZgogCXJlc3RvcmVfc2lnbWFzaygmc2V0KTsKIAlpZiAocmVzdG9yZV91c2VyX3JlZ3MocmVncywgbWNwLCBzaWcpKQpAQCAtOTA4LDEzICs5MTEsMTQgQEAKIHsKIAlzdHJ1Y3Qgc2lnX2RiZ19vcCBvcDsKIAlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIHRtcDsKIAl1bnNpZ25lZCBsb25nIG5ld19tc3IgPSByZWdzLT5tc3I7CiAjaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKIAl1bnNpZ25lZCBsb25nIG5ld19kYmNyMCA9IGN1cnJlbnQtPnRocmVhZC5kYmNyMDsKICNlbmRpZgogCiAJZm9yIChpPTA7IGk8bmRiZzsgaSsrKSB7Ci0JCWlmIChfX2NvcHlfZnJvbV91c2VyKCZvcCwgZGJnLCBzaXplb2Yob3ApKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZvcCwgZGJnICsgaSwgc2l6ZW9mKG9wKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJc3dpdGNoIChvcC5kYmdfdHlwZSkgewogCQljYXNlIFNJR19EQkdfU0lOR0xFX1NURVBQSU5HOgpAQCAtOTU5LDYgKzk2MywxMSBAQAogCWN1cnJlbnQtPnRocmVhZC5kYmNyMCA9IG5ld19kYmNyMDsKICNlbmRpZgogCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGN0eCwgc2l6ZW9mKCpjdHgpKQorCSAgICB8fCBfX2dldF91c2VyKHRtcCwgKHU4IF9fdXNlciAqKSBjdHgpCisJICAgIHx8IF9fZ2V0X3VzZXIodG1wLCAodTggX191c2VyICopIChjdHggKyAxKSAtIDEpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCS8qCiAJICogSWYgd2UgZ2V0IGEgZmF1bHQgY29weWluZyB0aGUgY29udGV4dCBpbnRvIHRoZSBrZXJuZWwncwogCSAqIGltYWdlIG9mIHRoZSB1c2VyJ3MgcmVnaXN0ZXJzLCB3ZSBjYW4ndCBqdXN0IHJldHVybiAtRUZBVUxUCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCAyN2Y2NWI5Li5jMmRiNjQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTE4Miw2ICsxODIsOCBAQAogCWVyciB8PSBfX2dldF91c2VyKG1zciwgJnNjLT5ncF9yZWdzW1BUX01TUl0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisJaWYgKHZfcmVncyAmJiAhYWNjZXNzX29rKFZFUklGWV9SRUFELCB2X3JlZ3MsIDM0ICogc2l6ZW9mKHZlY3RvcjEyOCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAkvKiBDb3B5IDMzIHZlYyByZWdpc3RlcnMgKHZyMC4uMzEgYW5kIHZzY3IpIGZyb20gdGhlIHN0YWNrICovCiAJaWYgKHZfcmVncyAhPSAwICYmIChtc3IgJiBNU1JfVkVDKSAhPSAwKQogCQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcihjdXJyZW50LT50aHJlYWQudnIsIHZfcmVncywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKaW5kZXggMzM2NTRkMS4uOTk0ODU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKQEAgLTUyLDcgKzUyLDcgQEAKIAlkZWZhdWx0OgogCQlwZW5jID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnBlbmM7CiAJCXZhICY9IH4oKDF1bCA8PCBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQpIC0gMSk7Ci0JCXZhIHw9ICgweDdmID4+ICg4IC0gcGVuYykpIDw8IDEyOworCQl2YSB8PSBwZW5jIDw8IDEyOwogCQlhc20gdm9sYXRpbGUoInRsYmllICUwLDEiIDogOiAiciIgKHZhKSA6ICJtZW1vcnkiKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzQsNyArNzQsNyBAQAogCWRlZmF1bHQ6CiAJCXBlbmMgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0ucGVuYzsKIAkJdmEgJj0gfigoMXVsIDw8IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCkgLSAxKTsKLQkJdmEgfD0gKDB4N2YgPj4gKDggLSBwZW5jKSkgPDwgMTI7CisJCXZhIHw9IHBlbmMgPDwgMTI7CiAJCWFzbSB2b2xhdGlsZSgiLmxvbmcgMHg3YzAwMDIyNCB8ICglMCA8PCAxMSkgfCAoMSA8PCAyMSkiCiAJCQkgICAgIDogOiAiciIodmEpIDogIm1lbW9yeSIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKaW5kZXggNjU3NGIyMi4uZmQzZTU2MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKQEAgLTEyNSwxNCArMTI1LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNlbGxfcHJvYmUodm9pZCkKIHsKLQkvKiBYWFggVGhpcyBpcyB0ZW1wb3JhcnksIHRoZSBDZWxsIG1haW50YWluZXIgd2lsbCBjb21lIHVwIHdpdGgKLQkgKiBtb3JlIGFwcHJvcHJpYXRlIGRldGVjdGlvbiBsb2dpYwotCSAqLwogCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikpCi0JCXJldHVybiAwOwogCi0JcmV0dXJuIDE7CisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENCRUEiKSB8fAorCSAgICBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIklCTSxDUEJXLTEuMCIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwppbmRleCA1Zjc5ZjAxLi4zYmE4NzgzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwpAQCAtMzg5LDYgKzM4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBTZXJpZXNfcHJvYmUodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CiAgCWNoYXIgKmR0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChvZl9nZXRfZmxhdF9kdF9yb290KCksCiAgCQkJCQkgICJkZXZpY2VfdHlwZSIsIE5VTEwpOwogIAlpZiAoZHR5cGUgPT0gTlVMTCkKQEAgLTM5Niw2ICszOTcsMTMgQEAKICAJaWYgKHN0cmNtcChkdHlwZSwgImNocnAiKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBDZWxsIGJsYWRlcyBmaXJtd2FyZSBjbGFpbXMgdG8gYmUgY2hycCB3aGlsZSBpdCdzIG5vdC4gVW50aWwgdGhpcworCSAqIGlzIGZpeGVkLCB3ZSBuZWVkIHRvIGF2b2lkIHRob3NlIGhlcmUuCisJICovCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikgfHwKKwkgICAgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpKQorCQlyZXR1cm4gMDsKKwogCURCRygicFNlcmllcyBkZXRlY3RlZCwgbG9va2luZyBmb3IgTFBBUiBjYXBhYmlsaXR5Li4uXG4iKTsKIAogCS8qIE5vdyB0cnkgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcnVubmluZyBvbiBMUEFSICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCmluZGV4IGE5M2Y1ZGEuLjQwYjQyYzggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCkBAIC02OSw2ICs2OSwxNyBAQAogCQkJCQkJICAgICAiY2xvY2stZnJlcXVlbmN5IiwgMCk7CiAJY3B1X2RhdGEoaWQpLnByb21fbm9kZSA9IGNwdV9ub2RlOwogCWNwdV9kYXRhKGlkKS5taWQgPSBjcHVfZ2V0X2h3bWlkKGNwdV9ub2RlKTsKKworCS8qIHRoaXMgaXMgcmVxdWlyZWQgdG8gdHVuZSB0aGUgc2NoZWR1bGVyIGNvcnJlY3RseSAqLworCS8qIGlzIGl0IHBvc3NpYmxlIHRvIGhhdmUgQ1BVcyB3aXRoIGRpZmZlcmVudCBjYWNoZSBzaXplcz8gKi8KKwlpZiAoaWQgPT0gYm9vdF9jcHVfaWQpIHsKKwkJaW50IGNhY2hlX2xpbmUsY2FjaGVfbmxpbmVzOworCQljYWNoZV9saW5lID0gMHgyMDsKKwkJY2FjaGVfbGluZSA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1saW5lLXNpemUiLCBjYWNoZV9saW5lKTsKKwkJY2FjaGVfbmxpbmVzID0gMHg4MDAwOworCQljYWNoZV9ubGluZXMgPSBwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJlY2FjaGUtbmxpbmVzIiwgY2FjaGVfbmxpbmVzKTsKKwkJbWF4X2NhY2hlX3NpemUgPSBjYWNoZV9saW5lICogY2FjaGVfbmxpbmVzOworCX0KIAlpZiAoY3B1X2RhdGEoaWQpLm1pZCA8IDApCiAJCXBhbmljKCJObyBNSUQgZm91bmQgZm9yIENQVSVkIGF0IG5vZGUgMHglMDhkIiwgaWQsIGNwdV9ub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCmluZGV4IDJiN2ExZjMuLjBjMDg5NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtNTk5LDE4ICs1OTksMTI4IEBACiAKIC8qIFNVTjRWIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc29ycy4gKi8KIAotc3RhdGljIGlubGluZSBpbnQgcGNpX3N1bjR2X291dF9vZl9yYW5nZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQorc3RydWN0IHBkZXZfZW50cnkgeworCXN0cnVjdCBwZGV2X2VudHJ5CSpuZXh0OworCXUzMgkJCWRldmhhbmRsZTsKKwl1bnNpZ25lZCBpbnQJCWJ1czsKKwl1bnNpZ25lZCBpbnQJCWRldmljZTsKKwl1bnNpZ25lZCBpbnQJCWZ1bmM7Cit9OworCisjZGVmaW5lIFBERVZfSFRBQl9TSVpFCTE2CisjZGVmaW5lIFBERVZfSFRBQl9NQVNLCShQREVWX0hUQUJfU0laRSAtIDEpCitzdGF0aWMgc3RydWN0IHBkZXZfZW50cnkgKnBkZXZfaHRhYltQREVWX0hUQUJfU0laRV07CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBkZXZfaGFzaGZuKHUzMiBkZXZoYW5kbGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQogewotCWlmIChidXMgPT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pIHsKLQkJaWYgKGRldmljZSA9PSAwICYmIGZ1bmMgPT0gMCkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gMTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gKGRldmhhbmRsZSBeIChkZXZoYW5kbGUgPj4gNCkpOworCXZhbCBePSBidXM7CisJdmFsIF49IGRldmljZTsKKwl2YWwgXj0gZnVuYzsKKworCXJldHVybiB2YWwgJiBQREVWX0hUQUJfTUFTSzsKK30KKworc3RhdGljIGludCBwZGV2X2h0YWJfYWRkKHUzMiBkZXZoYW5kbGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQoreworCXN0cnVjdCBwZGV2X2VudHJ5ICpwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqKnNsb3Q7CisKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJc2xvdCA9ICZwZGV2X2h0YWJbcGRldl9oYXNoZm4oZGV2aGFuZGxlLCBidXMsIGRldmljZSwgZnVuYyldOworCXAtPm5leHQgPSAqc2xvdDsKKwkqc2xvdCA9IHA7CisKKwlwLT5kZXZoYW5kbGUgPSBkZXZoYW5kbGU7CisJcC0+YnVzID0gYnVzOworCXAtPmRldmljZSA9IGRldmljZTsKKwlwLT5mdW5jID0gZnVuYzsKKworCXJldHVybiAwOworfQorCisvKiBSZWN1cnNpdmVseSBkZXNjZW5kIGludG8gdGhlIE9CUCBkZXZpY2UgdHJlZSwgcm9vdGVkIGF0IHRvcGxldmVsX25vZGUsCisgKiBsb29raW5nIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYnVzIGFuZCBkZXZmbi4KKyAqLworc3RhdGljIGludCBvYnBfZmluZChzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzICpwcmVncywgaW50IHRvcGxldmVsX25vZGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbikKK3sKKwl0b3BsZXZlbF9ub2RlID0gcHJvbV9nZXRjaGlsZCh0b3BsZXZlbF9ub2RlKTsKKworCXdoaWxlICh0b3BsZXZlbF9ub2RlICE9IDApIHsKKwkJaW50IHJldCA9IG9icF9maW5kKHByZWdzLCB0b3BsZXZlbF9ub2RlLCBidXMsIGRldmZuKTsKKworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHByb21fZ2V0cHJvcGVydHkodG9wbGV2ZWxfbm9kZSwgInJlZyIsIChjaGFyICopIHByZWdzLAorCQkJCSAgICAgICBzaXplb2YoKnByZWdzKSAqIFBST01SRUdfTUFYKTsKKwkJaWYgKHJldCA9PSAwIHx8IHJldCA9PSAtMSkKKwkJCWdvdG8gbmV4dF9zaWJsaW5nOworCisJCWlmICgoKHByZWdzWzBdLnBoeXNfaGkgPj4gMTYpICYgMHhmZikgPT0gYnVzICYmCisJCSAgICAoKHByZWdzWzBdLnBoeXNfaGkgPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKKwkJCWJyZWFrOworCisJbmV4dF9zaWJsaW5nOgorCQl0b3BsZXZlbF9ub2RlID0gcHJvbV9nZXRzaWJsaW5nKHRvcGxldmVsX25vZGUpOwogCX0KIAorCXJldHVybiB0b3BsZXZlbF9ub2RlOworfQorCitzdGF0aWMgaW50IHBkZXZfaHRhYl9wb3B1bGF0ZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCit7CisJc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyBwcltQUk9NUkVHX01BWF07CisJdTMyIGRldmhhbmRsZSA9IHBibS0+ZGV2aGFuZGxlOworCXVuc2lnbmVkIGludCBidXM7CisKKwlmb3IgKGJ1cyA9IHBibS0+cGNpX2ZpcnN0X2J1c25vOyBidXMgPD0gcGJtLT5wY2lfbGFzdF9idXNubzsgYnVzKyspIHsKKwkJdW5zaWduZWQgaW50IGRldmZuOworCisJCWZvciAoZGV2Zm4gPSAwOyBkZXZmbiA8IDI1NjsgZGV2Zm4rKykgeworCQkJdW5zaWduZWQgaW50IGRldmljZSA9IFBDSV9TTE9UKGRldmZuKTsKKwkJCXVuc2lnbmVkIGludCBmdW5jID0gUENJX0ZVTkMoZGV2Zm4pOworCisJCQlpZiAob2JwX2ZpbmQocHIsIHBibS0+cHJvbV9ub2RlLCBidXMsIGRldmZuKSkgeworCQkJCWludCBlcnIgPSBwZGV2X2h0YWJfYWRkKGRldmhhbmRsZSwgYnVzLAorCQkJCQkJCWRldmljZSwgZnVuYyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBkZXZfZW50cnkgKnBkZXZfZmluZCh1MzIgZGV2aGFuZGxlLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCB1bnNpZ25lZCBpbnQgZnVuYykKK3sKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcDsKKworCXAgPSBwZGV2X2h0YWJbcGRldl9oYXNoZm4oZGV2aGFuZGxlLCBidXMsIGRldmljZSwgZnVuYyldOworCXdoaWxlIChwKSB7CisJCWlmIChwLT5kZXZoYW5kbGUgPT0gZGV2aGFuZGxlICYmCisJCSAgICBwLT5idXMgPT0gYnVzICYmCisJCSAgICBwLT5kZXZpY2UgPT0gZGV2aWNlICYmCisJCSAgICBwLT5mdW5jID09IGZ1bmMpCisJCQlicmVhazsKKworCQlwID0gcC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGNpX3N1bjR2X291dF9vZl9yYW5nZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQorewogCWlmIChidXMgPCBwYm0tPnBjaV9maXJzdF9idXNubyB8fAogCSAgICBidXMgPiBwYm0tPnBjaV9sYXN0X2J1c25vKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGRldl9maW5kKHBibS0+ZGV2aGFuZGxlLCBidXMsIGRldmljZSwgZnVuYykgPT0gTlVMTDsKIH0KIAogc3RhdGljIGludCBwY2lfc3VuNHZfcmVhZF9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCkBAIC0xMDYzLDYgKzExNzMsOCBAQAogCiAJcGNpX3N1bjR2X2dldF9idXNfcmFuZ2UocGJtKTsKIAlwY2lfc3VuNHZfaW9tbXVfaW5pdChwYm0pOworCisJcGRldl9odGFiX3BvcHVsYXRlKHBibSk7CiB9CiAKIHZvaWQgc3VuNHZfcGNpX2luaXQoaW50IG5vZGUsIGNoYXIgKm1vZGVsX25hbWUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCA0ZThjZDc5Li5mMDNkNTJkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKQEAgLTEyODcsNiArMTI4Nyw0MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgc21wX3R1bmVfc2NoZWR1bGluZyh2b2lkKQoreworCWludCBpbnN0YW5jZSwgbm9kZTsKKwl1bnNpZ25lZCBpbnQgZGVmLCBzbWFsbGVzdCA9IH4wVTsKKworCWRlZiA9ICgodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgPworCSAgICAgICAoMyAqIDEwMjQgKiAxMDI0KSA6CisJICAgICAgICg0ICogMTAyNCAqIDEwMjQpKTsKKworCWluc3RhbmNlID0gMDsKKwl3aGlsZSAoIWNwdV9maW5kX2J5X2luc3RhbmNlKGluc3RhbmNlLCAmbm9kZSwgTlVMTCkpIHsKKwkJdW5zaWduZWQgaW50IHZhbDsKKworCQl2YWwgPSBwcm9tX2dldGludGRlZmF1bHQobm9kZSwgImVjYWNoZS1zaXplIiwgZGVmKTsKKwkJaWYgKHZhbCA8IHNtYWxsZXN0KQorCQkJc21hbGxlc3QgPSB2YWw7CisKKwkJaW5zdGFuY2UrKzsKKwl9CisKKwkvKiBBbnkgdmFsdWUgbGVzcyB0aGFuIDI1NksgaXMgbm9uc2Vuc2UuICAqLworCWlmIChzbWFsbGVzdCA8ICgyNTZVICogMTAyNFUpKQorCQlzbWFsbGVzdCA9IDI1NiAqIDEwMjQ7CisKKwltYXhfY2FjaGVfc2l6ZSA9IHNtYWxsZXN0OworCisJaWYgKHNtYWxsZXN0IDwgMVUgKiAxMDI0VSAqIDEwMjRVKQorCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBtYXhfY2FjaGVfc2l6ZSBvZiAldUtCXG4iLAorCQkgICAgICAgc21hbGxlc3QgLyAxMDI0VSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBtYXhfY2FjaGVfc2l6ZSBvZiAldU1CXG4iLAorCQkgICAgICAgc21hbGxlc3QgLyAxMDI0VSAvIDEwMjRVKTsKK30KKwogLyogQ29uc3RyYWluIHRoZSBudW1iZXIgb2YgY3B1cyB0byBtYXhfY3B1cy4gICovCiB2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKQEAgLTEzMjIsNiArMTM1Niw3IEBACiAJfQogCiAJc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1X2lkKTsKKwlzbXBfdHVuZV9zY2hlZHVsaW5nKCk7CiB9CiAKIC8qIFNldCB0aGlzIHVwIGVhcmx5IHNvIHRoYXQgdGhpbmdzIGxpa2UgdGhlIHNjaGVkdWxlciBjYW4gaW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwppbmRleCA2MmQ4YTk5Li4zOGU1NjlmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwpAQCAtMjk3LDcgKzI5Nyw2IEBACiBFWFBPUlRfU1lNQk9MKHN2cjRfc2V0Y29udGV4dCk7CiBFWFBPUlRfU1lNQk9MKGNvbXBhdF9zeXNfaW9jdGwpOwogRVhQT1JUX1NZTUJPTChzcGFyYzMyX29wZW4pOwotRVhQT1JUX1NZTUJPTChzeXNfY2xvc2UpOwogI2VuZGlmCiAKIC8qIFNwZWNpYWwgaW50ZXJuYWwgdmVyc2lvbnMgb2YgbGlicmFyeSBmdW5jdGlvbnMuICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKaW5kZXggMjc5M2E1ZC4uNTYzZGI1MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTc5Nyw3ICsxNzk3LDkgQEAKIAl9OwogfQogCi1zdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGludCBjcHUsIGNvbnN0IGNoYXIgKnBmeCwgYXRvbWljX3QgKm9jbnQpCitleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworCitzdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzdW40dl9lcnJvcl9lbnRyeSAqZW50LCBpbnQgY3B1LCBjb25zdCBjaGFyICpwZngsIGF0b21pY190ICpvY250KQogewogCWludCBjbnQ7CiAKQEAgLTE4MzAsNiArMTgzMiw4IEBACiAJICAgICAgIHBmeCwKIAkgICAgICAgZW50LT5lcnJfcmFkZHIsIGVudC0+ZXJyX3NpemUsIGVudC0+ZXJyX2NwdSk7CiAKKwlfX3Nob3dfcmVncyhyZWdzKTsKKwogCWlmICgoY250ID0gYXRvbWljX3JlYWQob2NudCkpICE9IDApIHsKIAkJYXRvbWljX3NldChvY250LCAwKTsKIAkJd21iKCk7CkBAIC0xODYyLDcgKzE4NjYsNyBAQAogCiAJcHV0X2NwdSgpOwogCi0Jc3VuNHZfbG9nX2Vycm9yKCZsb2NhbF9jb3B5LCBjcHUsCisJc3VuNHZfbG9nX2Vycm9yKHJlZ3MsICZsb2NhbF9jb3B5LCBjcHUsCiAJCQlLRVJOX0VSUiAiUkVTVU1BQkxFIEVSUk9SIiwKIAkJCSZzdW40dl9yZXN1bV9vZmxvd19jbnQpOwogfQpAQCAtMTkxMCw3ICsxOTE0LDcgQEAKIAl9CiAjZW5kaWYKIAotCXN1bjR2X2xvZ19lcnJvcigmbG9jYWxfY29weSwgY3B1LAorCXN1bjR2X2xvZ19lcnJvcihyZWdzLCAmbG9jYWxfY29weSwgY3B1LAogCQkJS0VSTl9FTUVSRyAiTk9OLVJFU1VNQUJMRSBFUlJPUiIsCiAJCQkmc3VuNHZfbm9ucmVzdW1fb2Zsb3dfY250KTsKIApAQCAtMjIwMCw3ICsyMjA0LDYgQEAKIHZvaWQgZGllX2lmX2tlcm5lbChjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7Ci0JZXh0ZXJuIHZvaWQgX19zaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIAlleHRlcm4gdm9pZCBzbXBfcmVwb3J0X3JlZ3Modm9pZCk7CiAJaW50IGNvdW50ID0gMDsKIAkKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IGE0NmQwMzAuLjA1MmIxNzQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTMyMywxNyArMTMyMywxMiBAQAogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljID0ga21lbV9jYWNoZV9hbGxvYyhjZnFfaW9jX3Bvb2wsIGdmcF9tYXNrKTsKIAogCWlmIChjaWMpIHsKLQkJUkJfQ0xFQVIoJmNpYy0+cmJfbm9kZSk7Ci0JCWNpYy0+a2V5ID0gTlVMTDsKLQkJY2ljLT5jZnFxW0FTWU5DXSA9IE5VTEw7Ci0JCWNpYy0+Y2ZxcVtTWU5DXSA9IE5VTEw7CisJCW1lbXNldChjaWMsIDAsIHNpemVvZigqY2ljKSk7CisJCVJCX0NMRUFSX0NPTE9SKCZjaWMtPnJiX25vZGUpOwogCQljaWMtPmxhc3RfZW5kX3JlcXVlc3QgPSBqaWZmaWVzOwotCQljaWMtPnR0aW1lX3RvdGFsID0gMDsKLQkJY2ljLT50dGltZV9zYW1wbGVzID0gMDsKLQkJY2ljLT50dGltZV9tZWFuID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJmNpYy0+cXVldWVfbGlzdCk7CiAJCWNpYy0+ZHRvciA9IGNmcV9mcmVlX2lvX2NvbnRleHQ7CiAJCWNpYy0+ZXhpdCA9IGNmcV9leGl0X2lvX2NvbnRleHQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZjaWMtPnF1ZXVlX2xpc3QpOwogCQlhdG9taWNfaW5jKCZpb2NfY291bnQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IGFlYjVhYjIuLjhiMTFjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTcyLDQgKzcyLDYgQEAKIAogc291cmNlICJkcml2ZXJzL3J0Yy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZG1hL0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDQ0N2Q4ZTYuLjNjNTE3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtNzQsMyArNzQsNCBAQAogb2JqLXkJCQkJKz0gZmlybXdhcmUvCiBvYmotJChDT05GSUdfQ1JZUFRPKQkJKz0gY3J5cHRvLwogb2JqLSQoQ09ORklHX1NVUEVSSCkJCSs9IHNoLworb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpCSs9IGRtYS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKaW5kZXggMDdiYzZkZi4uODkyMGU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKQEAgLTgxMiw2ICs4MTIsOSBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSgiaXJxcm91dGVyX3Jlc3VtZSIpOwogCisJLyogTWFrZSBzdXJlIFNDSSBpcyBlbmFibGVkIGFnYWluIChBcHBsZSBmaXJtd2FyZSBidWc/KSAqLworCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1NDSV9FTkFCTEUsIDEsIEFDUElfTVRYX0RPX05PVF9MT0NLKTsKKwogCWFjcGlfaW5fcmVzdW1lID0gMTsKIAlsaXN0X2Zvcl9lYWNoKG5vZGUsICZhY3BpX2xpbmsuZW50cmllcykgewogCQlsaW5rID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgYWNwaV9wY2lfbGluaywgbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCmluZGV4IGFiYmRiMzcuLmYzNmRiMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCkBAIC01NzcsNiArNTc3LDggQEAKIAkJcmV0dXJuX1ZBTFVFKC1FQlVTWSk7CiAJfQogCisJV0FSTl9PTighcGVyZm9ybWFuY2UpOworCiAJcHItPnBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7CiAKIAlpZiAoYWNwaV9wcm9jZXNzb3JfZ2V0X3BlcmZvcm1hbmNlX2luZm8ocHIpKSB7CkBAIC02MDksNyArNjExLDggQEAKIAkJcmV0dXJuX1ZPSUQ7CiAJfQogCi0Ja2ZyZWUocHItPnBlcmZvcm1hbmNlLT5zdGF0ZXMpOworCWlmIChwci0+cGVyZm9ybWFuY2UpCisJCWtmcmVlKHByLT5wZXJmb3JtYW5jZS0+c3RhdGVzKTsKIAlwci0+cGVyZm9ybWFuY2UgPSBOVUxMOwogCiAJYWNwaV9jcHVmcmVxX3JlbW92ZV9maWxlKHByKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKaW5kZXggZmRmZjc3NC4uYzE0MzRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKQEAgLTExNiw4ICsxMTYsNyBAQAogCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkKLQlpZiAoc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpIDwgMCkKKwlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQogCQlnb3RvIGV4aXQ7CiAJaWYgKCFpc19hb2VfbmV0aWYoaWZwKSkKIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IGE1OTg3NmEuLjMxNzBlYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTEwMDksOSArMTAwOSw5IEBACiAJCWlmIChmcC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJCXJldCA9IC1FUk9GUzsKIAkJCWlmIChjZHJvbV9vcGVuX3dyaXRlKGNkaSkpCi0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnJfcmVsZWFzZTsKIAkJCWlmICghQ0RST01fQ0FOKENEQ19SQU0pKQotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyX3JlbGVhc2U7CiAJCQlyZXQgPSAwOwogCQkJY2RpLT5tZWRpYV93cml0dGVuID0gMDsKIAkJfQpAQCAtMTAyNiw2ICsxMDI2LDggQEAKIAkgICAgbm90IGJlIG1vdW50aW5nLCBidXQgb3BlbmluZyB3aXRoIE9fTk9OQkxPQ0sgKi8KIAljaGVja19kaXNrX2NoYW5nZShpcC0+aV9iZGV2KTsKIAlyZXR1cm4gMDsKK2Vycl9yZWxlYXNlOgorCWNkaS0+b3BzLT5yZWxlYXNlKGNkaSk7CiBlcnI6CiAJY2RpLT51c2VfY291bnQtLTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IGY1YjAxYzYuLmZiOTE5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTQxLDkgKzQxLDkgQEAKIG9iai0kKENPTkZJR19BTUlHQV9CVUlMVElOX1NFUklBTCkgKz0gYW1pc2VyaWFsLm8KIG9iai0kKENPTkZJR19TWCkJCSs9IHN4Lm8gZ2VuZXJpY19zZXJpYWwubwogb2JqLSQoQ09ORklHX1JJTykJCSs9IHJpby8gZ2VuZXJpY19zZXJpYWwubwotb2JqLSQoQ09ORklHX0hWQ19EUklWRVIpCSs9IGh2Y19jb25zb2xlLm8KIG9iai0kKENPTkZJR19IVkNfQ09OU09MRSkJKz0gaHZjX3Zpby5vIGh2c2kubwogb2JqLSQoQ09ORklHX0hWQ19SVEFTKQkJKz0gaHZjX3J0YXMubworb2JqLSQoQ09ORklHX0hWQ19EUklWRVIpCSs9IGh2Y19jb25zb2xlLm8KIG9iai0kKENPTkZJR19SQVdfRFJJVkVSKQkrPSByYXcubwogb2JqLSQoQ09ORklHX1NHSV9TTlNDKQkJKz0gc25zYy5vIHNuc2NfZXZlbnQubwogb2JqLSQoQ09ORklHX01NVElNRVIpCQkrPSBtbXRpbWVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCmluZGV4IDJiNTgzOGUuLmI0ZTAwYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYwpAQCAtNDYsMTIgKzQ2LDYgQEAKIH07CiAKIAotc3RhdGljIGludCBhbHBoYV9jb3JlX2FncF9ub3Aodm9pZCkKLXsKLQkvKiBqdXN0IHJldHVybiBzdWNjZXNzICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYWxwaGFfY29yZV9hZ3BfZmV0Y2hfc2l6ZSh2b2lkKQogewogCXJldHVybiBhbHBoYV9jb3JlX2FncF9zaXplc1swXS5zaXplOwpAQCAtMTIwLDYgKzExNCwxMSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgYWxwaGFfY29yZV9hZ3BfY3JlYXRlX2ZyZWVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICphKQoreworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgYWxwaGFfY29yZV9hZ3BfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFscGhhX2NvcmVfYWdwX3NpemVzLApAQCAtMTM1LDggKzEzNCw4IEBACiAJLnRsYl9mbHVzaAkJPSBhbHBoYV9jb3JlX2FncF90bGJmbHVzaCwKIAkubWFza19tZW1vcnkJCT0gYWdwX2dlbmVyaWNfbWFza19tZW1vcnksCiAJLmNhY2hlX2ZsdXNoCQk9IGdsb2JhbF9jYWNoZV9mbHVzaCwKLQkuY3JlYXRlX2dhdHRfdGFibGUJPSBhbHBoYV9jb3JlX2FncF9ub3AsCi0JLmZyZWVfZ2F0dF90YWJsZQk9IGFscGhhX2NvcmVfYWdwX25vcCwKKwkuY3JlYXRlX2dhdHRfdGFibGUJPSBhbHBoYV9jb3JlX2FncF9jcmVhdGVfZnJlZV9nYXR0X3RhYmxlLAorCS5mcmVlX2dhdHRfdGFibGUJPSBhbHBoYV9jb3JlX2FncF9jcmVhdGVfZnJlZV9nYXR0X3RhYmxlLAogCS5pbnNlcnRfbWVtb3J5CQk9IGFscGhhX2NvcmVfYWdwX2luc2VydF9tZW1vcnksCiAJLnJlbW92ZV9tZW1vcnkJCT0gYWxwaGFfY29yZV9hZ3BfcmVtb3ZlX21lbW9yeSwKIAkuYWxsb2NfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19ieV90eXBlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwppbmRleCA0ZTE4OTFlLi5hOTJhYjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwpAQCAtODA5LDEyICs4MDksMTAgQEAKIAkJCQljYXNlIFUzMl9BUEVSX1NJWkU6CiAJCQkJCWJyaWRnZS0+Y3VycmVudF9zaXplID0gQV9JRFgzMihicmlkZ2UpOwogCQkJCQlicmVhazsKLQkJCQkJLyogVGhpcyBjYXNlIHdpbGwgbmV2ZXIgcmVhbGx5IGhhcHBlbi4gKi8KKwkJCQkvKiBUaGVzZSBjYXNlcyB3aWxsIG5ldmVyIHJlYWxseSBoYXBwZW4uICovCiAJCQkJY2FzZSBGSVhFRF9BUEVSX1NJWkU6CiAJCQkJY2FzZSBMVkwyX0FQRVJfU0laRToKIAkJCQlkZWZhdWx0OgotCQkJCQlicmlkZ2UtPmN1cnJlbnRfc2l6ZSA9Ci0JCQkJCSAgICBicmlkZ2UtPmN1cnJlbnRfc2l6ZTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCXRlbXAgPSBicmlkZ2UtPmN1cnJlbnRfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IGJkZGNhZTUuLjYxYWMzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtNzM2LDcgKzczNiw3IEBACiBzdGF0aWMgaW50IGludGVsX2k5MTVfZmV0Y2hfc2l6ZSh2b2lkKQogewogCXN0cnVjdCBhcGVyX3NpemVfaW5mb19maXhlZCAqdmFsdWVzOwotCXUzMiB0ZW1wLCBvZmZzZXQgPSAwOworCXUzMiB0ZW1wLCBvZmZzZXQ7CiAKICNkZWZpbmUgSTkxNV8yNTZNQl9BRERSRVNTX01BU0sgKDE8PDI3KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwppbmRleCA5ODQ2ZGVmLi4xZGUxYjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKQEAgLTMyOSw3ICszMjksNyBAQAogCS8qIHR1cm4gb2ZmIEFHUCBvbiB0aGUgYnJpZGdlICovCiAJYWdwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0FHUCk7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFncCArIFBDSV9BR1BfQ09NTUFORCwgJmNtZCk7Ci0JYnJpZGdlLT5kZXZfcHJpdmF0ZV9kYXRhID0gKHZvaWQgKiljbWQ7CisJYnJpZGdlLT5kZXZfcHJpdmF0ZV9kYXRhID0gKHZvaWQgKikobG9uZyljbWQ7CiAJaWYgKGNtZCAmIFBDSV9BR1BfQ09NTUFORF9BR1ApIHsKIAkJcHJpbnRrKCJ1bmlub3J0aC1hZ3A6IGRpc2FibGluZyBBR1Agb24gYnJpZGdlICVzXG4iLAogCQkJCXBjaV9uYW1lKHBkZXYpKTsKQEAgLTM1MSw3ICszNTEsNyBAQAogCWlmIChicmlkZ2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljb21tYW5kID0gKHUzMilicmlkZ2UtPmRldl9wcml2YXRlX2RhdGE7CisJY29tbWFuZCA9IChsb25nKWJyaWRnZS0+ZGV2X3ByaXZhdGVfZGF0YTsKIAlicmlkZ2UtPmRldl9wcml2YXRlX2RhdGEgPSBOVUxMOwogCWlmICghKGNvbW1hbmQgJiBQQ0lfQUdQX0NPTU1BTkRfQUdQKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbl90dHkuYyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCmluZGV4IGVkZTM2NWQuLmI5MzcxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCkBAIC0xMzg0LDggKzEzODQsMTAgQEAKIAkJICogbG9uZ2VyIHRoYW4gVFRZX1RIUkVTSE9MRF9VTlRIUk9UVExFIGluIGNhbm9uaWNhbCBtb2RlLAogCQkgKiB3ZSB3b24ndCBnZXQgYW55IG1vcmUgY2hhcmFjdGVycy4KIAkJICovCi0JCWlmIChuX3R0eV9jaGFyc19pbl9idWZmZXIodHR5KSA8PSBUVFlfVEhSRVNIT0xEX1VOVEhST1RUTEUpCisJCWlmIChuX3R0eV9jaGFyc19pbl9idWZmZXIodHR5KSA8PSBUVFlfVEhSRVNIT0xEX1VOVEhST1RUTEUpIHsKKwkJCW5fdHR5X3NldF9yb29tKHR0eSk7CiAJCQljaGVja191bnRocm90dGxlKHR0eSk7CisJCX0KIAogCQlpZiAoYiAtIGJ1ZiA+PSBtaW5pbXVtKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwppbmRleCA5ZjJmMDBkLi4wNWY4Y2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJaWYgKGZvdW5kKSB7CiAJCWNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soY2JxKTsKLQkJYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5yZWZjbnQpOworCQlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCAyOWIyZmE1Li40NGQxZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCQlpZiAoIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkgewogCQkJaWYgKChwb2xpY3kpICYmIChwb2xpY3ktPmNwdSA9PSBmcmVxcy0+Y3B1KSAmJgogCQkJICAgIChwb2xpY3ktPmN1cikgJiYgKHBvbGljeS0+Y3VyICE9IGZyZXFzLT5vbGQpKSB7Ci0JCQkJZHByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgaXMiCisJCQkJZHByaW50aygiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBpcyIKIAkJCQkJIiAldSwgY3B1ZnJlcSBhc3N1bWVkICV1IGtIei5cbiIsCiAJCQkJCWZyZXFzLT5vbGQsIHBvbGljeS0+Y3VyKTsKIAkJCQlmcmVxcy0+b2xkID0gcG9saWN5LT5jdXI7CkBAIC04NzQsNyArODc0LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCWRwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IG91dCBvZiBzeW5jOiBjcHVmcmVxIGFuZCB0aW1pbmcgIgorCWRwcmludGsoIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgb3V0IG9mIHN5bmM6IGNwdWZyZXEgYW5kIHRpbWluZyAiCiAJICAgICAgICJjb3JlIHRoaW5rcyBvZiAldSwgaXMgJXUga0h6LlxuIiwgb2xkX2ZyZXEsIG5ld19mcmVxKTsKIAogCWZyZXFzLmNwdSA9IGNwdTsKQEAgLTEwMDYsNyArMTAwNiw3IEBACiAJCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCiAJCWlmICghKGNwdWZyZXFfZHJpdmVyLT5mbGFncyAmIENQVUZSRVFfUE1fTk9fV0FSTikpCi0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgaXMgJXUsICIKKwkJCWRwcmludGsoIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgaXMgJXUsICIKIAkJCSAgICAgICAiY3B1ZnJlcSBhc3N1bWVkICV1IGtIei5cbiIsCiAJCQkgICAgICAgY3VyX2ZyZXEsIGNwdV9wb2xpY3ktPmN1cik7CiAKQEAgLTEwODcsNyArMTA4Nyw3IEBACiAJCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAogCQkJaWYgKCEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9QTV9OT19XQVJOKSkKLQkJCQlkcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSIKKwkJCQlkcHJpbnRrKCJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IgogCQkJCSAgICAgICAiaXMgJXUsIGNwdWZyZXEgYXNzdW1lZCAldSBrSHouXG4iLAogCQkJCSAgICAgICBjdXJfZnJlcSwgY3B1X3BvbGljeS0+Y3VyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggOTY5NGI2ZS4uYzU3NmMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC03NCw3ICs3NCw3IEBACiBzaG93X3RvdGFsX3RyYW5zKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBjcHVmcmVxX3N0YXRzX3RhYmxlW3BvbGljeS0+Y3B1XTsKLQlpZighc3RhdCkKKwlpZiAoIXN0YXQpCiAJCXJldHVybiAwOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAogCQkJY3B1ZnJlcV9zdGF0c190YWJsZVtzdGF0LT5jcHVdLT50b3RhbF90cmFucyk7CkBAIC04Niw3ICs4Niw3IEBACiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpOwogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gY3B1ZnJlcV9zdGF0c190YWJsZVtwb2xpY3ktPmNwdV07Ci0JaWYoIXN0YXQpCisJaWYgKCFzdGF0KQogCQlyZXR1cm4gMDsKIAljcHVmcmVxX3N0YXRzX3VwZGF0ZShzdGF0LT5jcHUpOwogCWZvciAoaSA9IDA7IGkgPCBzdGF0LT5zdGF0ZV9udW07IGkrKykgewpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaW50IGksIGo7CiAKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IGNwdWZyZXFfc3RhdHNfdGFibGVbcG9saWN5LT5jcHVdOwotCWlmKCFzdGF0KQorCWlmICghc3RhdCkKIAkJcmV0dXJuIDA7CiAJY3B1ZnJlcV9zdGF0c191cGRhdGUoc3RhdC0+Y3B1KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIgICBGcm9tICA6ICAgIFRvXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCmluZGV4IGE0ODE4Y2UuLjU1MWY0Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwpAQCAtMjAsNyArMjAsNyBAQAogewogCXVuc2lnbmVkIGludCBtaW5fZnJlcSA9IH4wOwogCXVuc2lnbmVkIGludCBtYXhfZnJlcSA9IDA7Ci0JdW5zaWduZWQgaW50IGkgPSAwOworCXVuc2lnbmVkIGludCBpOwogCiAJZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CkBAIC01MSw3ICs1MSw3IEBACiAJCQkJICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgbmV4dF9sYXJnZXIgPSB+MDsKLQl1bnNpZ25lZCBpbnQgaSA9IDA7CisJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAogCWRwcmludGsoInJlcXVlc3QgZm9yIHZlcmlmaWNhdGlvbiBvZiBwb2xpY3kgKCV1IC0gJXUga0h6KSBmb3IgY3B1ICV1XG4iLCBwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsIHBvbGljeS0+Y3B1KTsKQEAgLTkxLDIwICs5MSwyNCBAQAogCQkJCSAgIHVuc2lnbmVkIGludCByZWxhdGlvbiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgKmluZGV4KQogewotCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBvcHRpbWFsID0geyAuaW5kZXggPSB+MCwgfTsKLQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgc3Vib3B0aW1hbCA9IHsgLmluZGV4ID0gfjAsIH07CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIG9wdGltYWwgPSB7CisJCS5pbmRleCA9IH4wLAorCQkuZnJlcXVlbmN5ID0gMCwKKwl9OworCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBzdWJvcHRpbWFsID0geworCQkuaW5kZXggPSB+MCwKKwkJLmZyZXF1ZW5jeSA9IDAsCisJfTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWRwcmludGsoInJlcXVlc3QgZm9yIHRhcmdldCAldSBrSHogKHJlbGF0aW9uOiAldSkgZm9yIGNwdSAldVxuIiwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCBwb2xpY3ktPmNwdSk7CiAKIAlzd2l0Y2ggKHJlbGF0aW9uKSB7CiAJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0g6Ci0JCW9wdGltYWwuZnJlcXVlbmN5ID0gMDsKIAkJc3Vib3B0aW1hbC5mcmVxdWVuY3kgPSB+MDsKIAkJYnJlYWs7CiAJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0w6CiAJCW9wdGltYWwuZnJlcXVlbmN5ID0gfjA7Ci0JCXN1Ym9wdGltYWwuZnJlcXVlbmN5ID0gMDsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQwMjFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtMCwwICsxLDM0IEBACisjCisjIERNQSBlbmdpbmUgY29uZmlndXJhdGlvbgorIworCittZW51ICJETUEgRW5naW5lIHN1cHBvcnQiCisKK2NvbmZpZyBETUFfRU5HSU5FCisJYm9vbCAiU3VwcG9ydCBmb3IgRE1BIGVuZ2luZXMiCisJLS0taGVscC0tLQorCSAgRE1BIGVuZ2luZXMgb2ZmbG9hZCBjb3B5IG9wZXJhdGlvbnMgZnJvbSB0aGUgQ1BVIHRvIGRlZGljYXRlZAorCSAgaGFyZHdhcmUsIGFsbG93aW5nIHRoZSBjb3BpZXMgdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5LgorCitjb21tZW50ICJETUEgQ2xpZW50cyIKKworY29uZmlnIE5FVF9ETUEKKwlib29sICJOZXR3b3JrOiBUQ1AgcmVjZWl2ZSBjb3B5IG9mZmxvYWQiCisJZGVwZW5kcyBvbiBETUFfRU5HSU5FICYmIE5FVAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIERNQSBlbmdpbmVzIGluIHRoZSBuZXR3b3JrIHN0YWNrIHRvCisJICBvZmZsb2FkIHJlY2VpdmUgY29weS10by11c2VyIG9wZXJhdGlvbnMsIGZyZWVpbmcgQ1BVIGN5Y2xlcy4KKwkgIFNpbmNlIHRoaXMgaXMgdGhlIG1haW4gdXNlciBvZiB0aGUgRE1BIGVuZ2luZSwgaXQgc2hvdWxkIGJlIGVuYWJsZWQ7CisJICBzYXkgWSBoZXJlLgorCitjb21tZW50ICJETUEgRGV2aWNlcyIKKworY29uZmlnIElOVEVMX0lPQVRETUEKKwl0cmlzdGF0ZSAiSW50ZWwgSS9PQVQgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBETUFfRU5HSU5FICYmIFBDSQorCWRlZmF1bHQgbQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwoUikgSS9PQVQgRE1BIGVuZ2luZS4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGNmZGJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfRE1BX0VOR0lORSkgKz0gZG1hZW5naW5lLm8KK29iai0kKENPTkZJR19ORVRfRE1BKSArPSBpb3Zsb2NrLm8KK29iai0kKENPTkZJR19JTlRFTF9JT0FURE1BKSArPSBpb2F0ZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyOTE0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisvKgorICogVGhpcyBjb2RlIGltcGxlbWVudHMgdGhlIERNQSBzdWJzeXN0ZW0uIEl0IHByb3ZpZGVzIGEgSFctbmV1dHJhbCBpbnRlcmZhY2UKKyAqIGZvciBvdGhlciBrZXJuZWwgY29kZSB0byB1c2UgYXN5bmNocm9ub3VzIG1lbW9yeSBjb3B5IGNhcGFiaWxpdGllcywKKyAqIGlmIHByZXNlbnQsIGFuZCBhbGxvd3MgZGlmZmVyZW50IEhXIERNQSBkcml2ZXJzIHRvIHJlZ2lzdGVyIGFzIHByb3ZpZGluZworICogdGhpcyBjYXBhYmlsaXR5LgorICoKKyAqIER1ZSB0byB0aGUgZmFjdCB3ZSBhcmUgYWNjZWxlcmF0aW5nIHdoYXQgaXMgYWxyZWFkeSBhIHJlbGF0aXZlbHkgZmFzdAorICogb3BlcmF0aW9uLCB0aGUgY29kZSBnb2VzIHRvIGdyZWF0IGxlbmd0aHMgdG8gYXZvaWQgYWRkaXRpb25hbCBvdmVyaGVhZCwKKyAqIHN1Y2ggYXMgbG9ja2luZy4KKyAqCisgKiBMT0NLSU5HOgorICoKKyAqIFRoZSBzdWJzeXN0ZW0ga2VlcHMgdHdvIGdsb2JhbCBsaXN0cywgZG1hX2RldmljZV9saXN0IGFuZCBkbWFfY2xpZW50X2xpc3QuCisgKiBCb3RoIG9mIHRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgYSBtdXRleCwgZG1hX2xpc3RfbXV0ZXguCisgKgorICogRWFjaCBkZXZpY2UgaGFzIGEgY2hhbm5lbHMgbGlzdCwgd2hpY2ggcnVucyB1bmxvY2tlZCBidXQgaXMgbmV2ZXIgbW9kaWZpZWQKKyAqIG9uY2UgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCBpdCdzIGp1c3Qgc2V0dXAgYnkgdGhlIGRyaXZlci4KKyAqCisgKiBFYWNoIGNsaWVudCBoYXMgYSBjaGFubmVscyBsaXN0LCBpdCdzIG9ubHkgbW9kaWZpZWQgdW5kZXIgdGhlIGNsaWVudC0+bG9jaworICogYW5kIGluIGFuIFJDVSBjYWxsYmFjaywgc28gaXQncyBzYWZlIHRvIHJlYWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLgorICoKKyAqIEVhY2ggZGV2aWNlIGhhcyBhIGtyZWYsIHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIDEgd2hlbiB0aGUgZGV2aWNlIGlzCisgKiByZWdpc3RlcmVkLiBBIGtyZWZfcHV0IGlzIGRvbmUgZm9yIGVhY2ggY2xhc3NfZGV2aWNlIHJlZ2lzdGVyZWQuICBXaGVuIHRoZQorICogY2xhc3NfZGV2aWNlIGlzIHJlbGVhc2VkLCB0aGUgY29yZXNwb25kaW5nIGtyZWZfcHV0IGlzIGRvbmUgaW4gdGhlIHJlbGVhc2UKKyAqIG1ldGhvZC4gRXZlcnkgdGltZSBvbmUgb2YgdGhlIGRldmljZSdzIGNoYW5uZWxzIGlzIGFsbG9jYXRlZCB0byBhIGNsaWVudCwKKyAqIGEga3JlZl9nZXQgb2NjdXJzLiAgV2hlbiB0aGUgY2hhbm5lbCBpcyBmcmVlZCwgdGhlIGNvcmVzcG9uZGluZyBrcmVmX3B1dAorICogaGFwcGVucy4gVGhlIGRldmljZSdzIHJlbGVhc2UgZnVuY3Rpb24gZG9lcyBhIGNvbXBsZXRpb24sIHNvCisgKiB1bnJlZ2lzdGVyX2RldmljZSBkb2VzIGEgcmVtb3ZlIGV2ZW50LCBjbGFzc19kZXZpY2VfdW5yZWdpc3RlciwgYSBrcmVmX3B1dAorICogZm9yIHRoZSBmaXJzdCByZWZlcmVuY2UsIHRoZW4gd2FpdHMgb24gdGhlIGNvbXBsZXRpb24gZm9yIGFsbCBvdGhlcgorICogcmVmZXJlbmNlcyB0byBmaW5pc2guCisgKgorICogRWFjaCBjaGFubmVsIGhhcyBhbiBvcGVuLWNvZGVkIGltcGxlbWVudGF0aW9uIG9mIFJ1c3R5IFJ1c3NlbGwncyAiYmlncmVmLCIKKyAqIHdpdGggYSBrcmVmIGFuZCBhIHBlcl9jcHUgbG9jYWxfdC4gIEEgc2luZ2xlIHJlZmVyZW5jZSBpcyBzZXQgd2hlbiBvbiBhbgorICogQURERUQgZXZlbnQsIGFuZCByZW1vdmVkIHdpdGggYSBSRU1PVkUgZXZlbnQuICBOZXQgRE1BIGNsaWVudCB0YWtlcyBhbgorICogZXh0cmEgcmVmZXJlbmNlIHBlciBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbi4gIFRoZSByZWxhc2UgZnVuY3Rpb24gZG9lcyBhCisgKiBrcmVmX3B1dCBvbiB0aGUgZGV2aWNlLiAtQ2hyaXNMCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZG1hX2xpc3RfbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChkbWFfZGV2aWNlX2xpc3QpOworc3RhdGljIExJU1RfSEVBRChkbWFfY2xpZW50X2xpc3QpOworCisvKiAtLS0gc3lzZnMgaW1wbGVtZW50YXRpb24gLS0tICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWVtY3B5X2NvdW50KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgZG1hX2NoYW4sIGNsYXNzX2Rldik7CisJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJY291bnQgKz0gcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGkpLT5tZW1jcHlfY291bnQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGNvdW50KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19ieXRlc190cmFuc2ZlcnJlZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IGRtYV9jaGFuLCBjbGFzc19kZXYpOworCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCWNvdW50ICs9IHBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBpKS0+Ynl0ZXNfdHJhbnNmZXJyZWQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGNvdW50KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19pbl91c2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCBkbWFfY2hhbiwgY2xhc3NfZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoY2hhbi0+Y2xpZW50ID8gMSA6IDApKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGRtYV9jbGFzc19hdHRyc1tdID0geworCV9fQVRUUihtZW1jcHlfY291bnQsIFNfSVJVR08sIHNob3dfbWVtY3B5X2NvdW50LCBOVUxMKSwKKwlfX0FUVFIoYnl0ZXNfdHJhbnNmZXJyZWQsIFNfSVJVR08sIHNob3dfYnl0ZXNfdHJhbnNmZXJyZWQsIE5VTEwpLAorCV9fQVRUUihpbl91c2UsIFNfSVJVR08sIHNob3dfaW5fdXNlLCBOVUxMKSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIHZvaWQgZG1hX2FzeW5jX2RldmljZV9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKTsKKworc3RhdGljIHZvaWQgZG1hX2NsYXNzX2Rldl9yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IGRtYV9jaGFuLCBjbGFzc19kZXYpOworCWtyZWZfcHV0KCZjaGFuLT5kZXZpY2UtPnJlZmNvdW50LCBkbWFfYXN5bmNfZGV2aWNlX2NsZWFudXApOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzIGRtYV9kZXZjbGFzcyA9IHsKKwkubmFtZSAgICAgICAgICAgID0gImRtYSIsCisJLmNsYXNzX2Rldl9hdHRycyA9IGRtYV9jbGFzc19hdHRycywKKwkucmVsZWFzZSA9IGRtYV9jbGFzc19kZXZfcmVsZWFzZSwKK307CisKKy8qIC0tLSBjbGllbnQgYW5kIGRldmljZSByZWdpc3RyYXRpb24gLS0tICovCisKKy8qKgorICogZG1hX2NsaWVudF9jaGFuX2FsbG9jIC0gdHJ5IHRvIGFsbG9jYXRlIGEgY2hhbm5lbCB0byBhIGNsaWVudAorICogQGNsaWVudDogJmRtYV9jbGllbnQKKyAqCisgKiBDYWxsZWQgd2l0aCBkbWFfbGlzdF9tdXRleCBoZWxkLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpkbWFfY2xpZW50X2NoYW5fYWxsb2Moc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBkZXNjOwkvKiBhbGxvY2F0ZWQgZGVzY3JpcHRvciBjb3VudCAqLworCisJLyogRmluZCBhIGNoYW5uZWwsIGFueSBETUEgZW5naW5lIHdpbGwgZG8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmRtYV9kZXZpY2VfbGlzdCwgZ2xvYmFsX25vZGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmZGV2aWNlLT5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKKwkJCWlmIChjaGFuLT5jbGllbnQpCisJCQkJY29udGludWU7CisKKwkJCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyhjaGFuKTsKKwkJCWlmIChkZXNjID49IDApIHsKKwkJCQlrcmVmX2dldCgmZGV2aWNlLT5yZWZjb3VudCk7CisJCQkJa3JlZl9pbml0KCZjaGFuLT5yZWZjb3VudCk7CisJCQkJY2hhbi0+c2xvd19yZWYgPSAwOworCQkJCUlOSVRfUkNVX0hFQUQoJmNoYW4tPnJjdSk7CisJCQkJY2hhbi0+Y2xpZW50ID0gY2xpZW50OworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJCQlsaXN0X2FkZF90YWlsX3JjdSgmY2hhbi0+Y2xpZW50X25vZGUsCisJCQkJICAgICAgICAgICAgICAgICAgJmNsaWVudC0+Y2hhbm5lbHMpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOworCQkJCXJldHVybiBjaGFuOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZG1hX2NsaWVudF9jaGFuX2ZyZWUgLSByZWxlYXNlIGEgRE1BIGNoYW5uZWwKKyAqIEBjaGFuOiAmZG1hX2NoYW4KKyAqLwordm9pZCBkbWFfY2hhbl9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZG1hX2NoYW4sIHJlZmNvdW50KTsKKwljaGFuLT5kZXZpY2UtPmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzKGNoYW4pOworCWNoYW4tPmNsaWVudCA9IE5VTEw7CisJa3JlZl9wdXQoJmNoYW4tPmRldmljZS0+cmVmY291bnQsIGRtYV9hc3luY19kZXZpY2VfY2xlYW51cCk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9jaGFuX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBkbWFfY2hhbiwgcmN1KTsKKwlpbnQgYmlhcyA9IDB4N0ZGRkZGRkY7CisJaW50IGk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCWJpYXMgLT0gbG9jYWxfcmVhZCgmcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGkpLT5yZWZjb3VudCk7CisJYXRvbWljX3N1YihiaWFzLCAmY2hhbi0+cmVmY291bnQucmVmY291bnQpOworCWtyZWZfcHV0KCZjaGFuLT5yZWZjb3VudCwgZG1hX2NoYW5fY2xlYW51cCk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9jbGllbnRfY2hhbl9mcmVlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlhdG9taWNfYWRkKDB4N0ZGRkZGRkYsICZjaGFuLT5yZWZjb3VudC5yZWZjb3VudCk7CisJY2hhbi0+c2xvd19yZWYgPSAxOworCWNhbGxfcmN1KCZjaGFuLT5yY3UsIGRtYV9jaGFuX2ZyZWVfcmN1KTsKK30KKworLyoqCisgKiBkbWFfY2hhbnNfcmViYWxhbmNlIC0gcmVhbGxvY2F0ZSBjaGFubmVscyB0byBjbGllbnRzCisgKgorICogV2hlbiB0aGUgbnVtYmVyIG9mIERNQSBjaGFubmVsIGluIHRoZSBzeXN0ZW0gY2hhbmdlcywKKyAqIGNoYW5uZWxzIG5lZWQgdG8gYmUgcmViYWxhbmNlZCBhbW9uZyBjbGllbnRzCisgKi8KK3N0YXRpYyB2b2lkIGRtYV9jaGFuc19yZWJhbGFuY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZkbWFfY2xpZW50X2xpc3QsIGdsb2JhbF9ub2RlKSB7CisJCXdoaWxlIChjbGllbnQtPmNoYW5zX2Rlc2lyZWQgPiBjbGllbnQtPmNoYW5fY291bnQpIHsKKwkJCWNoYW4gPSBkbWFfY2xpZW50X2NoYW5fYWxsb2MoY2xpZW50KTsKKwkJCWlmICghY2hhbikKKwkJCQlicmVhazsKKwkJCWNsaWVudC0+Y2hhbl9jb3VudCsrOworCQkJY2xpZW50LT5ldmVudF9jYWxsYmFjayhjbGllbnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfUkVTT1VSQ0VfQURERUQpOworCQl9CisJCXdoaWxlIChjbGllbnQtPmNoYW5zX2Rlc2lyZWQgPCBjbGllbnQtPmNoYW5fY291bnQpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJCWNoYW4gPSBsaXN0X2VudHJ5KGNsaWVudC0+Y2hhbm5lbHMubmV4dCwKKwkJCSAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfY2hhbiwKKwkJCSAgICAgICAgICAgICAgICAgIGNsaWVudF9ub2RlKTsKKwkJCWxpc3RfZGVsX3JjdSgmY2hhbi0+Y2xpZW50X25vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CisJCQljbGllbnQtPmNoYW5fY291bnQtLTsKKwkJCWNsaWVudC0+ZXZlbnRfY2FsbGJhY2soY2xpZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBjaGFuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBETUFfUkVTT1VSQ0VfUkVNT1ZFRCk7CisJCQlkbWFfY2xpZW50X2NoYW5fZnJlZShjaGFuKTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOworfQorCisvKioKKyAqIGRtYV9hc3luY19jbGllbnRfcmVnaXN0ZXIgLSBhbGxvY2F0ZSBhbmQgcmVnaXN0ZXIgYSAmZG1hX2NsaWVudAorICogQGV2ZW50X2NhbGxiYWNrOiBjYWxsYmFjayBmb3Igbm90aWZpY2F0aW9uIG9mIGNoYW5uZWwgYWRkaXRpb24vcmVtb3ZhbAorICovCitzdHJ1Y3QgZG1hX2NsaWVudCAqZG1hX2FzeW5jX2NsaWVudF9yZWdpc3RlcihkbWFfZXZlbnRfY2FsbGJhY2sgZXZlbnRfY2FsbGJhY2spCit7CisJc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudDsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5jaGFubmVscyk7CisJc3Bpbl9sb2NrX2luaXQoJmNsaWVudC0+bG9jayk7CisJY2xpZW50LT5jaGFuc19kZXNpcmVkID0gMDsKKwljbGllbnQtPmNoYW5fY291bnQgPSAwOworCWNsaWVudC0+ZXZlbnRfY2FsbGJhY2sgPSBldmVudF9jYWxsYmFjazsKKworCW11dGV4X2xvY2soJmRtYV9saXN0X211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmdsb2JhbF9ub2RlLCAmZG1hX2NsaWVudF9saXN0KTsKKwltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKKworCXJldHVybiBjbGllbnQ7Cit9CisKKy8qKgorICogZG1hX2FzeW5jX2NsaWVudF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIGNsaWVudCBhbmQgZnJlZSB0aGUgJmRtYV9jbGllbnQKKyAqIEBjbGllbnQ6CisgKgorICogRm9yY2UgZnJlZXMgYW55IGFsbG9jYXRlZCBETUEgY2hhbm5lbHMsIGZyZWVzIHRoZSAmZG1hX2NsaWVudCBtZW1vcnkKKyAqLwordm9pZCBkbWFfYXN5bmNfY2xpZW50X3VucmVnaXN0ZXIoc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNoYW4sICZjbGllbnQtPmNoYW5uZWxzLCBjbGllbnRfbm9kZSkKKwkJZG1hX2NsaWVudF9jaGFuX2ZyZWUoY2hhbik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwltdXRleF9sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisJbGlzdF9kZWwoJmNsaWVudC0+Z2xvYmFsX25vZGUpOworCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCisJa2ZyZWUoY2xpZW50KTsKKwlkbWFfY2hhbnNfcmViYWxhbmNlKCk7Cit9CisKKy8qKgorICogZG1hX2FzeW5jX2NsaWVudF9jaGFuX3JlcXVlc3QgLSByZXF1ZXN0IERNQSBjaGFubmVscworICogQGNsaWVudDogJmRtYV9jbGllbnQKKyAqIEBudW1iZXI6IGNvdW50IG9mIERNQSBjaGFubmVscyByZXF1ZXN0ZWQKKyAqCisgKiBDbGllbnRzIGNhbGwgZG1hX2FzeW5jX2NsaWVudF9jaGFuX3JlcXVlc3QoKSB0byBzcGVjaWZ5IGhvdyBtYW55CisgKiBETUEgY2hhbm5lbHMgdGhleSBuZWVkLCAwIHRvIGZyZWUgYWxsIGN1cnJlbnRseSBhbGxvY2F0ZWQuCisgKiBUaGUgcmVzdWx0aW5nIGFsbG9jYXRpb25zL2ZyZWVzIGFyZSBpbmRpY2F0ZWQgdG8gdGhlIGNsaWVudCB2aWEgdGhlCisgKiBldmVudCBjYWxsYmFjay4KKyAqLwordm9pZCBkbWFfYXN5bmNfY2xpZW50X2NoYW5fcmVxdWVzdChzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50LAorCQkJdW5zaWduZWQgaW50IG51bWJlcikKK3sKKwljbGllbnQtPmNoYW5zX2Rlc2lyZWQgPSBudW1iZXI7CisJZG1hX2NoYW5zX3JlYmFsYW5jZSgpOworfQorCisvKioKKyAqIGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIgLQorICogQGRldmljZTogJmRtYV9kZXZpY2UKKyAqLworaW50IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdGF0aWMgaW50IGlkOworCWludCBjaGFuY250ID0gMDsKKwlzdHJ1Y3QgZG1hX2NoYW4qIGNoYW47CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbml0X2NvbXBsZXRpb24oJmRldmljZS0+ZG9uZSk7CisJa3JlZl9pbml0KCZkZXZpY2UtPnJlZmNvdW50KTsKKwlkZXZpY2UtPmRldl9pZCA9IGlkKys7CisKKwkvKiByZXByZXNlbnQgY2hhbm5lbHMgaW4gc3lzZnMuIFByb2JhYmx5IHdhbnQgZGV2cyB0b28gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZkZXZpY2UtPmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgeworCQljaGFuLT5sb2NhbCA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKmNoYW4tPmxvY2FsKSk7CisJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJY2hhbi0+Y2hhbl9pZCA9IGNoYW5jbnQrKzsKKwkJY2hhbi0+Y2xhc3NfZGV2LmNsYXNzID0gJmRtYV9kZXZjbGFzczsKKwkJY2hhbi0+Y2xhc3NfZGV2LmRldiA9IE5VTEw7CisJCXNucHJpbnRmKGNoYW4tPmNsYXNzX2Rldi5jbGFzc19pZCwgQlVTX0lEX1NJWkUsICJkbWElZGNoYW4lZCIsCisJCSAgICAgICAgIGRldmljZS0+ZGV2X2lkLCBjaGFuLT5jaGFuX2lkKTsKKworCQlrcmVmX2dldCgmZGV2aWNlLT5yZWZjb3VudCk7CisJCWNsYXNzX2RldmljZV9yZWdpc3RlcigmY2hhbi0+Y2xhc3NfZGV2KTsKKwl9CisKKwltdXRleF9sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmZGV2aWNlLT5nbG9iYWxfbm9kZSwgJmRtYV9kZXZpY2VfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisKKwlkbWFfY2hhbnNfcmViYWxhbmNlKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIgLQorICogQGRldmljZTogJmRtYV9kZXZpY2UKKyAqLworc3RhdGljIHZvaWQgZG1hX2FzeW5jX2RldmljZV9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2U7CisKKwlkZXZpY2UgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRtYV9kZXZpY2UsIHJlZmNvdW50KTsKKwljb21wbGV0ZSgmZGV2aWNlLT5kb25lKTsKK30KKwordm9pZCBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRtYV9kZXZpY2UqIGRldmljZSkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmRtYV9saXN0X211dGV4KTsKKwlsaXN0X2RlbCgmZGV2aWNlLT5nbG9iYWxfbm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZkZXZpY2UtPmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgeworCQlpZiAoY2hhbi0+Y2xpZW50KSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CisJCQlsaXN0X2RlbCgmY2hhbi0+Y2xpZW50X25vZGUpOworCQkJY2hhbi0+Y2xpZW50LT5jaGFuX2NvdW50LS07CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5jbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJCWNoYW4tPmNsaWVudC0+ZXZlbnRfY2FsbGJhY2soY2hhbi0+Y2xpZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfUkVTT1VSQ0VfUkVNT1ZFRCk7CisJCQlkbWFfY2xpZW50X2NoYW5fZnJlZShjaGFuKTsKKwkJfQorCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmY2hhbi0+Y2xhc3NfZGV2KTsKKwl9CisJZG1hX2NoYW5zX3JlYmFsYW5jZSgpOworCisJa3JlZl9wdXQoJmRldmljZS0+cmVmY291bnQsIGRtYV9hc3luY19kZXZpY2VfY2xlYW51cCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZGV2aWNlLT5kb25lKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZG1hX2J1c19pbml0KHZvaWQpCit7CisJbXV0ZXhfaW5pdCgmZG1hX2xpc3RfbXV0ZXgpOworCXJldHVybiBjbGFzc19yZWdpc3RlcigmZG1hX2RldmNsYXNzKTsKK30KKworc3Vic3lzX2luaXRjYWxsKGRtYV9idXNfaW5pdCk7CisKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX2NsaWVudF9yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19jbGllbnRfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19jbGllbnRfY2hhbl9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX21lbWNweV9idWZfdG9fYnVmKTsKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcpOworRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfbWVtY3B5X3BnX3RvX3BnKTsKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX21lbWNweV9jb21wbGV0ZSk7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19tZW1jcHlfaXNzdWVfcGVuZGluZyk7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChkbWFfY2hhbl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRkbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXRkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmRmN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYS5jCkBAIC0wLDAgKzEsODQwIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisvKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgYW4gSW50ZWwgSS9PQVQgRE1BIGVuZ2luZSwgd2hpY2ggZG9lcyBhc3luY2hyb25vdXMKKyAqIGNvcHkgb3BlcmF0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlICJpb2F0ZG1hLmgiCisjaW5jbHVkZSAiaW9hdGRtYV9pby5oIgorI2luY2x1ZGUgImlvYXRkbWFfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiaW9hdGRtYV9ody5oIgorCisjZGVmaW5lIHRvX2lvYXRfY2hhbihjaGFuKSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGlvYXRfZG1hX2NoYW4sIGNvbW1vbikKKyNkZWZpbmUgdG9faW9hdF9kZXZpY2UoZGV2KSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaW9hdF9kZXZpY2UsIGNvbW1vbikKKyNkZWZpbmUgdG9faW9hdF9kZXNjKGxoKSBjb250YWluZXJfb2YobGgsIHN0cnVjdCBpb2F0X2Rlc2Nfc3csIG5vZGUpCisKKy8qIGludGVybmFsIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBfX2RldmluaXQgaW9hdF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaW9hdF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCitzdGF0aWMgaW50IGVudW1lcmF0ZV9kbWFfY2hhbm5lbHMoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UpCit7CisJdTggeGZlcmNhcF9zY2FsZTsKKwl1MzIgeGZlcmNhcDsKKwlpbnQgaTsKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuOworCisJZGV2aWNlLT5jb21tb24uY2hhbmNudCA9IGlvYXRkbWFfcmVhZDgoZGV2aWNlLCBJT0FUX0NIQU5DTlRfT0ZGU0VUKTsKKwl4ZmVyY2FwX3NjYWxlID0gaW9hdGRtYV9yZWFkOChkZXZpY2UsIElPQVRfWEZFUkNBUF9PRkZTRVQpOworCXhmZXJjYXAgPSAoeGZlcmNhcF9zY2FsZSA9PSAwID8gLTEgOiAoMVVMIDw8IHhmZXJjYXBfc2NhbGUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPmNvbW1vbi5jaGFuY250OyBpKyspIHsKKwkJaW9hdF9jaGFuID0ga3phbGxvYyhzaXplb2YoKmlvYXRfY2hhbiksIEdGUF9LRVJORUwpOworCQlpZiAoIWlvYXRfY2hhbikgeworCQkJZGV2aWNlLT5jb21tb24uY2hhbmNudCA9IGk7CisJCQlicmVhazsKKwkJfQorCisJCWlvYXRfY2hhbi0+ZGV2aWNlID0gZGV2aWNlOworCQlpb2F0X2NoYW4tPnJlZ19iYXNlID0gZGV2aWNlLT5yZWdfYmFzZSArICgweDgwICogKGkgKyAxKSk7CisJCWlvYXRfY2hhbi0+eGZlcmNhcCA9IHhmZXJjYXA7CisJCXNwaW5fbG9ja19pbml0KCZpb2F0X2NoYW4tPmNsZWFudXBfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZpb2F0X2NoYW4tPmZyZWVfZGVzYyk7CisJCUlOSVRfTElTVF9IRUFEKCZpb2F0X2NoYW4tPnVzZWRfZGVzYyk7CisJCS8qIFRoaXMgc2hvdWxkIGJlIG1hZGUgY29tbW9uIHNvbWV3aGVyZSBpbiBkbWFlbmdpbmUuYyAqLworCQlpb2F0X2NoYW4tPmNvbW1vbi5kZXZpY2UgPSAmZGV2aWNlLT5jb21tb247CisJCWlvYXRfY2hhbi0+Y29tbW9uLmNsaWVudCA9IE5VTEw7CisJCWxpc3RfYWRkX3RhaWwoJmlvYXRfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlLAorCQkgICAgICAgICAgICAgICZkZXZpY2UtPmNvbW1vbi5jaGFubmVscyk7CisJfQorCXJldHVybiBkZXZpY2UtPmNvbW1vbi5jaGFuY250OworfQorCitzdGF0aWMgc3RydWN0IGlvYXRfZGVzY19zdyAqaW9hdF9kbWFfYWxsb2NfZGVzY3JpcHRvcigKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuLAorCWludCBmbGFncykKK3sKKwlzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpkZXNjX3N3OworCXN0cnVjdCBpb2F0X2RldmljZSAqaW9hdF9kZXZpY2U7CisJZG1hX2FkZHJfdCBwaHlzOworCisJaW9hdF9kZXZpY2UgPSB0b19pb2F0X2RldmljZShpb2F0X2NoYW4tPmNvbW1vbi5kZXZpY2UpOworCWRlc2MgPSBwY2lfcG9vbF9hbGxvYyhpb2F0X2RldmljZS0+ZG1hX3Bvb2wsIGZsYWdzLCAmcGh5cyk7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXNjX3N3ID0ga3phbGxvYyhzaXplb2YoKmRlc2Nfc3cpLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KCFkZXNjX3N3KSkgeworCQlwY2lfcG9vbF9mcmVlKGlvYXRfZGV2aWNlLT5kbWFfcG9vbCwgZGVzYywgcGh5cyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKKwlkZXNjX3N3LT5odyA9IGRlc2M7CisJZGVzY19zdy0+cGh5cyA9IHBoeXM7CisKKwlyZXR1cm4gZGVzY19zdzsKK30KKworI2RlZmluZSBJTklUSUFMX0lPQVRfREVTQ19DT1VOVCAxMjgKKworc3RhdGljIHZvaWQgaW9hdF9zdGFydF9udWxsX2Rlc2Moc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbik7CisKKy8qIHJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxsb2NhdGVkIGRlc2NyaXB0b3JzICovCitzdGF0aWMgaW50IGlvYXRfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCXN0cnVjdCBpb2F0X2Rlc2Nfc3cgKmRlc2MgPSBOVUxMOworCXUxNiBjaGFuY3RybDsKKwl1MzIgY2hhbmVycjsKKwlpbnQgaTsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyoKKwkgKiBJbi11c2UgYml0IGF1dG9tYXRpY2FsbHkgc2V0IGJ5IHJlYWRpbmcgY2hhbmN0cmwKKwkgKiBJZiAwLCB3ZSBnb3QgaXQsIGlmIDEsIHNvbWVvbmUgZWxzZSBkaWQKKwkgKi8KKwljaGFuY3RybCA9IGlvYXRkbWFfY2hhbl9yZWFkMTYoaW9hdF9jaGFuLCBJT0FUX0NIQU5DVFJMX09GRlNFVCk7CisJaWYgKGNoYW5jdHJsICYgSU9BVF9DSEFOQ1RSTF9DSEFOTkVMX0lOX1VTRSkKKwkJcmV0dXJuIC1FQlVTWTsKKworICAgICAgICAvKiBTZXR1cCByZWdpc3RlciB0byBpbnRlcnJ1cHQgYW5kIHdyaXRlIGNvbXBsZXRpb24gc3RhdHVzIG9uIGVycm9yICovCisJY2hhbmN0cmwgPSBJT0FUX0NIQU5DVFJMX0NIQU5ORUxfSU5fVVNFIHwKKwkJSU9BVF9DSEFOQ1RSTF9FUlJfSU5UX0VOIHwKKwkJSU9BVF9DSEFOQ1RSTF9BTllfRVJSX0FCT1JUX0VOIHwKKwkJSU9BVF9DSEFOQ1RSTF9FUlJfQ09NUExFVElPTl9FTjsKKyAgICAgICAgaW9hdGRtYV9jaGFuX3dyaXRlMTYoaW9hdF9jaGFuLCBJT0FUX0NIQU5DVFJMX09GRlNFVCwgY2hhbmN0cmwpOworCisJY2hhbmVyciA9IGlvYXRkbWFfY2hhbl9yZWFkMzIoaW9hdF9jaGFuLCBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKwlpZiAoY2hhbmVycikgeworCQlwcmludGsoIklPQVQ6IENIQU5FUlIgPSAleCwgY2xlYXJpbmdcbiIsIGNoYW5lcnIpOworCQlpb2F0ZG1hX2NoYW5fd3JpdGUzMihpb2F0X2NoYW4sIElPQVRfQ0hBTkVSUl9PRkZTRVQsIGNoYW5lcnIpOworCX0KKworCS8qIEFsbG9jYXRlIGRlc2NyaXB0b3JzICovCisJZm9yIChpID0gMDsgaSA8IElOSVRJQUxfSU9BVF9ERVNDX0NPVU5UOyBpKyspIHsKKwkJZGVzYyA9IGlvYXRfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoaW9hdF9jaGFuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkZXNjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIklPQVQ6IE9ubHkgJWQgaW5pdGlhbCBkZXNjcmlwdG9yc1xuIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZkZXNjLT5ub2RlLCAmdG1wX2xpc3QpOworCX0KKwlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKwlsaXN0X3NwbGljZSgmdG1wX2xpc3QsICZpb2F0X2NoYW4tPmZyZWVfZGVzYyk7CisJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKworCS8qIGFsbG9jYXRlIGEgY29tcGxldGlvbiB3cml0ZWJhY2sgYXJlYSAqLworCS8qIGRvaW5nIDIgMzJiaXQgd3JpdGVzIHRvIG1taW8gc2luY2UgMSA2NGIgd3JpdGUgZG9lc24ndCB3b3JrICovCisJaW9hdF9jaGFuLT5jb21wbGV0aW9uX3ZpcnQgPQorCQlwY2lfcG9vbF9hbGxvYyhpb2F0X2NoYW4tPmRldmljZS0+Y29tcGxldGlvbl9wb29sLAorCQkgICAgICAgICAgICAgICBHRlBfS0VSTkVMLAorCQkgICAgICAgICAgICAgICAmaW9hdF9jaGFuLT5jb21wbGV0aW9uX2FkZHIpOworCW1lbXNldChpb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydCwgMCwKKwkgICAgICAgc2l6ZW9mKCppb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydCkpOworCWlvYXRkbWFfY2hhbl93cml0ZTMyKGlvYXRfY2hhbiwgSU9BVF9DSEFOQ01QX09GRlNFVF9MT1csCisJICAgICAgICAgICAgICAgKCh1NjQpIGlvYXRfY2hhbi0+Y29tcGxldGlvbl9hZGRyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJaW9hdGRtYV9jaGFuX3dyaXRlMzIoaW9hdF9jaGFuLCBJT0FUX0NIQU5DTVBfT0ZGU0VUX0hJR0gsCisJICAgICAgICAgICAgICAgKCh1NjQpIGlvYXRfY2hhbi0+Y29tcGxldGlvbl9hZGRyKSA+PiAzMik7CisKKwlpb2F0X3N0YXJ0X251bGxfZGVzYyhpb2F0X2NoYW4pOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBpb2F0X2RtYV9tZW1jcHlfY2xlYW51cChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuKTsKKworc3RhdGljIHZvaWQgaW9hdF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiA9IHRvX2lvYXRfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgaW9hdF9kZXZpY2UgKmlvYXRfZGV2aWNlID0gdG9faW9hdF9kZXZpY2UoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpkZXNjLCAqX2Rlc2M7CisJdTE2IGNoYW5jdHJsOworCWludCBpbl91c2VfZGVzY3MgPSAwOworCisJaW9hdF9kbWFfbWVtY3B5X2NsZWFudXAoaW9hdF9jaGFuKTsKKworCWlvYXRkbWFfY2hhbl93cml0ZTgoaW9hdF9jaGFuLCBJT0FUX0NIQU5DTURfT0ZGU0VULCBJT0FUX0NIQU5DTURfUkVTRVQpOworCisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmaW9hdF9jaGFuLT51c2VkX2Rlc2MsIG5vZGUpIHsKKwkJaW5fdXNlX2Rlc2NzKys7CisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKwkJcGNpX3Bvb2xfZnJlZShpb2F0X2RldmljZS0+ZG1hX3Bvb2wsIGRlc2MtPmh3LCBkZXNjLT5waHlzKTsKKwkJa2ZyZWUoZGVzYyk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJmlvYXRfY2hhbi0+ZnJlZV9kZXNjLCBub2RlKSB7CisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKwkJcGNpX3Bvb2xfZnJlZShpb2F0X2RldmljZS0+ZG1hX3Bvb2wsIGRlc2MtPmh3LCBkZXNjLT5waHlzKTsKKwkJa2ZyZWUoZGVzYyk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisKKwlwY2lfcG9vbF9mcmVlKGlvYXRfZGV2aWNlLT5jb21wbGV0aW9uX3Bvb2wsCisJICAgICAgICAgICAgICBpb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydCwKKwkgICAgICAgICAgICAgIGlvYXRfY2hhbi0+Y29tcGxldGlvbl9hZGRyKTsKKworCS8qIG9uZSBpcyBvayBzaW5jZSB3ZSBsZWZ0IGl0IG9uIHRoZXJlIG9uIHB1cnBvc2UgKi8KKwlpZiAoaW5fdXNlX2Rlc2NzID4gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICJJT0FUOiBGcmVlaW5nICVkIGluIHVzZSBkZXNjcmlwdG9ycyFcbiIsCisJCQlpbl91c2VfZGVzY3MgLSAxKTsKKworCWlvYXRfY2hhbi0+bGFzdF9jb21wbGV0aW9uID0gaW9hdF9jaGFuLT5jb21wbGV0aW9uX2FkZHIgPSAwOworCisJLyogVGVsbCBodyB0aGUgY2hhbiBpcyBmcmVlICovCisJY2hhbmN0cmwgPSBpb2F0ZG1hX2NoYW5fcmVhZDE2KGlvYXRfY2hhbiwgSU9BVF9DSEFOQ1RSTF9PRkZTRVQpOworCWNoYW5jdHJsICY9IH5JT0FUX0NIQU5DVFJMX0NIQU5ORUxfSU5fVVNFOworCWlvYXRkbWFfY2hhbl93cml0ZTE2KGlvYXRfY2hhbiwgSU9BVF9DSEFOQ1RSTF9PRkZTRVQsIGNoYW5jdHJsKTsKK30KKworLyoqCisgKiBkb19pb2F0X2RtYV9tZW1jcHkgLSBhY3R1YWwgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgYSBJT0FUIERNQSB0cmFuc2FjdGlvbgorICogQGNoYW46IElPQVQgRE1BIGNoYW5uZWwgaGFuZGxlCisgKiBAZGVzdDogRE1BIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBzcmM6IERNQSBzb3VyY2UgYWRkcmVzcworICogQGxlbjogdHJhbnNhY3Rpb24gbGVuZ3RoIGluIGJ5dGVzCisgKi8KKworc3RhdGljIGRtYV9jb29raWVfdCBkb19pb2F0X2RtYV9tZW1jcHkoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3QgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3Qgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpmaXJzdDsKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpwcmV2OworCXN0cnVjdCBpb2F0X2Rlc2Nfc3cgKm5ldzsKKwlkbWFfY29va2llX3QgY29va2llOworCUxJU1RfSEVBRChuZXdfY2hhaW4pOworCXUzMiBjb3B5OworCXNpemVfdCBvcmlnX2xlbjsKKwlkbWFfYWRkcl90IG9yaWdfc3JjLCBvcmlnX2RzdDsKKwl1bnNpZ25lZCBpbnQgZGVzY19jb3VudCA9IDA7CisJdW5zaWduZWQgaW50IGFwcGVuZCA9IDA7CisKKwlpZiAoIWlvYXRfY2hhbiB8fCAhZGVzdCB8fCAhc3JjKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghbGVuKQorCQlyZXR1cm4gaW9hdF9jaGFuLT5jb21tb24uY29va2llOworCisJb3JpZ19sZW4gPSBsZW47CisJb3JpZ19zcmMgPSBzcmM7CisJb3JpZ19kc3QgPSBkZXN0OworCisJZmlyc3QgPSBOVUxMOworCXByZXYgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisKKwl3aGlsZSAobGVuKSB7CisJCWlmICghbGlzdF9lbXB0eSgmaW9hdF9jaGFuLT5mcmVlX2Rlc2MpKSB7CisJCQluZXcgPSB0b19pb2F0X2Rlc2MoaW9hdF9jaGFuLT5mcmVlX2Rlc2MubmV4dCk7CisJCQlsaXN0X2RlbCgmbmV3LT5ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHRyeSB0byBnZXQgYW5vdGhlciBkZXNjICovCisJCQluZXcgPSBpb2F0X2RtYV9hbGxvY19kZXNjcmlwdG9yKGlvYXRfY2hhbiwgR0ZQX0FUT01JQyk7CisJCQkvKiB3aWxsIHRoaXMgZXZlciBoYXBwZW4/ICovCisJCQkvKiBUT0RPIGFkZCB1cHBlciBsaW1pdCBvbiB0aGVzZSAqLworCQkJQlVHX09OKCFuZXcpOworCQl9CisKKwkJY29weSA9IG1pbigodTMyKSBsZW4sIGlvYXRfY2hhbi0+eGZlcmNhcCk7CisKKwkJbmV3LT5ody0+c2l6ZSA9IGNvcHk7CisJCW5ldy0+aHctPmN0bCA9IDA7CisJCW5ldy0+aHctPnNyY19hZGRyID0gc3JjOworCQluZXctPmh3LT5kc3RfYWRkciA9IGRlc3Q7CisJCW5ldy0+Y29va2llID0gMDsKKworCQkvKiBjaGFpbiB0b2dldGhlciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBsaXN0IGZvciB0aGUgSFcgKi8KKwkJaWYgKCFmaXJzdCkKKwkJCWZpcnN0ID0gbmV3OworCQllbHNlCisJCQlwcmV2LT5ody0+bmV4dCA9ICh1NjQpIG5ldy0+cGh5czsKKworCQlwcmV2ID0gbmV3OworCisJCWxlbiAgLT0gY29weTsKKwkJZGVzdCArPSBjb3B5OworCQlzcmMgICs9IGNvcHk7CisKKwkJbGlzdF9hZGRfdGFpbCgmbmV3LT5ub2RlLCAmbmV3X2NoYWluKTsKKwkJZGVzY19jb3VudCsrOworCX0KKwluZXctPmh3LT5jdGwgPSBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9DUF9TVFM7CisJbmV3LT5ody0+bmV4dCA9IDA7CisKKwkvKiBjb29raWUgaW5jciBhbmQgYWRkaXRpb24gdG8gdXNlZF9saXN0IG11c3QgYmUgYXRvbWljICovCisKKwljb29raWUgPSBpb2F0X2NoYW4tPmNvbW1vbi5jb29raWU7CisJY29va2llKys7CisJaWYgKGNvb2tpZSA8IDApCisJCWNvb2tpZSA9IDE7CisJaW9hdF9jaGFuLT5jb21tb24uY29va2llID0gbmV3LT5jb29raWUgPSBjb29raWU7CisKKwlwY2lfdW5tYXBfYWRkcl9zZXQobmV3LCBzcmMsIG9yaWdfc3JjKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQobmV3LCBkc3QsIG9yaWdfZHN0KTsKKwlwY2lfdW5tYXBfbGVuX3NldChuZXcsIHNyY19sZW4sIG9yaWdfbGVuKTsKKwlwY2lfdW5tYXBfbGVuX3NldChuZXcsIGRzdF9sZW4sIG9yaWdfbGVuKTsKKworCS8qIHdyaXRlIGFkZHJlc3MgaW50byBOZXh0RGVzY3JpcHRvciBmaWVsZCBvZiBsYXN0IGRlc2MgaW4gY2hhaW4gKi8KKwl0b19pb2F0X2Rlc2MoaW9hdF9jaGFuLT51c2VkX2Rlc2MucHJldiktPmh3LT5uZXh0ID0gZmlyc3QtPnBoeXM7CisJbGlzdF9zcGxpY2VfaW5pdCgmbmV3X2NoYWluLCBpb2F0X2NoYW4tPnVzZWRfZGVzYy5wcmV2KTsKKworCWlvYXRfY2hhbi0+cGVuZGluZyArPSBkZXNjX2NvdW50OworCWlmIChpb2F0X2NoYW4tPnBlbmRpbmcgPj0gMjApIHsKKwkJYXBwZW5kID0gMTsKKwkJaW9hdF9jaGFuLT5wZW5kaW5nID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOworCisJaWYgKGFwcGVuZCkKKwkJaW9hdGRtYV9jaGFuX3dyaXRlOChpb2F0X2NoYW4sCisJCSAgICAgICAgICAgICAgICAgICAgSU9BVF9DSEFOQ01EX09GRlNFVCwKKwkJICAgICAgICAgICAgICAgICAgICBJT0FUX0NIQU5DTURfQVBQRU5EKTsKKwlyZXR1cm4gY29va2llOworfQorCisvKioKKyAqIGlvYXRfZG1hX21lbWNweV9idWZfdG9fYnVmIC0gd3JhcHBlciB0aGF0IHRha2VzIHNyYyAmIGRlc3QgYnVmcworICogQGNoYW46IElPQVQgRE1BIGNoYW5uZWwgaGFuZGxlCisgKiBAZGVzdDogRE1BIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBzcmM6IERNQSBzb3VyY2UgYWRkcmVzcworICogQGxlbjogdHJhbnNhY3Rpb24gbGVuZ3RoIGluIGJ5dGVzCisgKi8KKworc3RhdGljIGRtYV9jb29raWVfdCBpb2F0X2RtYV9tZW1jcHlfYnVmX3RvX2J1ZihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKwlkbWFfYWRkcl90IGRlc3RfYWRkcjsKKwlkbWFfYWRkcl90IHNyY19hZGRyOworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4oY2hhbik7CisKKwlkZXN0X2FkZHIgPSBwY2lfbWFwX3NpbmdsZShpb2F0X2NoYW4tPmRldmljZS0+cGRldiwKKwkJZGVzdCwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXNyY19hZGRyID0gcGNpX21hcF9zaW5nbGUoaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYsCisJCXNyYywgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCXJldHVybiBkb19pb2F0X2RtYV9tZW1jcHkoaW9hdF9jaGFuLCBkZXN0X2FkZHIsIHNyY19hZGRyLCBsZW4pOworfQorCisvKioKKyAqIGlvYXRfZG1hX21lbWNweV9idWZfdG9fcGcgLSB3cmFwcGVyLCBjb3B5aW5nIGZyb20gYSBidWYgdG8gYSBwYWdlCisgKiBAY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKKyAqIEBwYWdlOiBwb2ludGVyIHRvIHRoZSBwYWdlIHRvIGNvcHkgdG8KKyAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoYXQgcGFnZQorICogQHNyYzogRE1BIHNvdXJjZSBhZGRyZXNzCisgKiBAbGVuOiB0cmFuc2FjdGlvbiBsZW5ndGggaW4gYnl0ZXMKKyAqLworCitzdGF0aWMgZG1hX2Nvb2tpZV90IGlvYXRfZG1hX21lbWNweV9idWZfdG9fcGcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisJZG1hX2FkZHJfdCBkZXN0X2FkZHI7CisJZG1hX2FkZHJfdCBzcmNfYWRkcjsKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCisJZGVzdF9hZGRyID0gcGNpX21hcF9wYWdlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlwYWdlLCBvZmZzZXQsIGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlzcmNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlzcmMsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlyZXR1cm4gZG9faW9hdF9kbWFfbWVtY3B5KGlvYXRfY2hhbiwgZGVzdF9hZGRyLCBzcmNfYWRkciwgbGVuKTsKK30KKworLyoqCisgKiBpb2F0X2RtYV9tZW1jcHlfcGdfdG9fcGcgLSB3cmFwcGVyLCBjb3B5aW5nIGJldHdlZW4gdHdvIHBhZ2VzCisgKiBAY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKKyAqIEBkZXN0X3BnOiBwb2ludGVyIHRvIHRoZSBwYWdlIHRvIGNvcHkgdG8KKyAqIEBkZXN0X29mZjogb2Zmc2V0IGludG8gdGhhdCBwYWdlCisgKiBAc3JjX3BnOiBwb2ludGVyIHRvIHRoZSBwYWdlIHRvIGNvcHkgZnJvbQorICogQHNyY19vZmY6IG9mZnNldCBpbnRvIHRoYXQgcGFnZQorICogQGxlbjogdHJhbnNhY3Rpb24gbGVuZ3RoIGluIGJ5dGVzLiBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gbm90IG1ha2UgYSBjb3B5CisgKgkgYWNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAqLworCitzdGF0aWMgZG1hX2Nvb2tpZV90IGlvYXRfZG1hX21lbWNweV9wZ190b19wZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqZGVzdF9wZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0X29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICpzcmNfcGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3JjX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisJZG1hX2FkZHJfdCBkZXN0X2FkZHI7CisJZG1hX2FkZHJfdCBzcmNfYWRkcjsKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCisJZGVzdF9hZGRyID0gcGNpX21hcF9wYWdlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlkZXN0X3BnLCBkZXN0X29mZiwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXNyY19hZGRyID0gcGNpX21hcF9wYWdlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlzcmNfcGcsIHNyY19vZmYsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlyZXR1cm4gZG9faW9hdF9kbWFfbWVtY3B5KGlvYXRfY2hhbiwgZGVzdF9hZGRyLCBzcmNfYWRkciwgbGVuKTsKK30KKworLyoqCisgKiBpb2F0X2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyAtIHB1c2ggcG90ZW50aWFsbHkgdW5yZWNvZ25vaXplZCBhcHBlbmRlZCBkZXNjcmlwdG9ycyB0byBodworICogQGNoYW46IERNQSBjaGFubmVsIGhhbmRsZQorICovCisKK3N0YXRpYyB2b2lkIGlvYXRfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCisJaWYgKGlvYXRfY2hhbi0+cGVuZGluZyAhPSAwKSB7CisJCWlvYXRfY2hhbi0+cGVuZGluZyA9IDA7CisJCWlvYXRkbWFfY2hhbl93cml0ZTgoaW9hdF9jaGFuLAorCQkgICAgICAgICAgICAgICAgICAgIElPQVRfQ0hBTkNNRF9PRkZTRVQsCisJCSAgICAgICAgICAgICAgICAgICAgSU9BVF9DSEFOQ01EX0FQUEVORCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpb2F0X2RtYV9tZW1jcHlfY2xlYW51cChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXNfY29tcGxldGU7CisJc3RydWN0IGlvYXRfZGVzY19zdyAqZGVzYywgKl9kZXNjOworCWRtYV9jb29raWVfdCBjb29raWUgPSAwOworCisJcHJlZmV0Y2goY2hhbi0+Y29tcGxldGlvbl92aXJ0KTsKKworCWlmICghc3Bpbl90cnlsb2NrKCZjaGFuLT5jbGVhbnVwX2xvY2spKQorCQlyZXR1cm47CisKKwkvKiBUaGUgY29tcGxldGlvbiB3cml0ZWJhY2sgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSwKKwkgICBzbyByZWFkcyBieSB0aGUgZHJpdmVyIG5lZWQgdG8gYmUgYXRvbWljIG9wZXJhdGlvbnMKKwkgICBUaGUgZGVzY3JpcHRvciBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlIGxpbWl0ZWQgdG8gMzItYml0cworCSAgIHdoZW4gdGhlIENQVSBjYW4gb25seSBkbyBhIDMyLWJpdCBtb3YgKi8KKworI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQorCXBoeXNfY29tcGxldGUgPQorCWNoYW4tPmNvbXBsZXRpb25fdmlydC0+ZnVsbCAmIElPQVRfQ0hBTlNUU19DT01QTEVURURfREVTQ1JJUFRPUl9BRERSOworI2Vsc2UKKwlwaHlzX2NvbXBsZXRlID0gY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5sb3cgJiBJT0FUX0xPV19DT01QTEVUSU9OX01BU0s7CisjZW5kaWYKKworCWlmICgoY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5mdWxsICYgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVMpID09CisJCUlPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTX0hBTFRFRCkgeworCQlwcmludGsoIklPQVQ6IENoYW5uZWwgaGFsdGVkLCBjaGFuZXJyID0gJXhcbiIsCisJCQlpb2F0ZG1hX2NoYW5fcmVhZDMyKGNoYW4sIElPQVRfQ0hBTkVSUl9PRkZTRVQpKTsKKworCQkvKiBUT0RPIGRvIHNvbWV0aGluZyB0byBzYWx2YWdlIHRoZSBzaXR1YXRpb24gKi8KKwl9CisKKwlpZiAocGh5c19jb21wbGV0ZSA9PSBjaGFuLT5sYXN0X2NvbXBsZXRpb24pIHsKKwkJc3Bpbl91bmxvY2soJmNoYW4tPmNsZWFudXBfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmNoYW4tPmRlc2NfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmY2hhbi0+dXNlZF9kZXNjLCBub2RlKSB7CisKKwkJLyoKKwkJICogSW5jb21pbmcgRE1BIHJlcXVlc3RzIG1heSB1c2UgbXVsdGlwbGUgZGVzY3JpcHRvcnMsIGR1ZSB0bworCQkgKiBleGNlZWRpbmcgeGZlcmNhcCwgcGVyaGFwcy4gSWYgc28sIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwKKwkJICogaGF2ZSBhIGNvb2tpZSwgYW5kIHJlcXVpcmUgdW5tYXBwaW5nLgorCQkgKi8KKwkJaWYgKGRlc2MtPmNvb2tpZSkgeworCQkJY29va2llID0gZGVzYy0+Y29va2llOworCisJCQkvKiB5ZXMgd2UgYXJlIHVubWFwcGluZyBib3RoIF9wYWdlIGFuZCBfc2luZ2xlIGFsbG9jJ2QKKwkJCSAgIHJlZ2lvbnMgd2l0aCB1bm1hcF9wYWdlLiBJcyB0aGlzICpyZWFsbHkqIHRoYXQgYmFkPworCQkJKi8KKwkJCXBjaV91bm1hcF9wYWdlKGNoYW4tPmRldmljZS0+cGRldiwKKwkJCQkJcGNpX3VubWFwX2FkZHIoZGVzYywgZHN0KSwKKwkJCQkJcGNpX3VubWFwX2xlbihkZXNjLCBkc3RfbGVuKSwKKwkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXBjaV91bm1hcF9wYWdlKGNoYW4tPmRldmljZS0+cGRldiwKKwkJCQkJcGNpX3VubWFwX2FkZHIoZGVzYywgc3JjKSwKKwkJCQkJcGNpX3VubWFwX2xlbihkZXNjLCBzcmNfbGVuKSwKKwkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCX0KKworCQlpZiAoZGVzYy0+cGh5cyAhPSBwaHlzX2NvbXBsZXRlKSB7CisJCQkvKiBhIGNvbXBsZXRlZCBlbnRyeSwgYnV0IG5vdCB0aGUgbGFzdCwgc28gY2xlYW51cCAqLworCQkJbGlzdF9kZWwoJmRlc2MtPm5vZGUpOworCQkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmNoYW4tPmZyZWVfZGVzYyk7CisJCX0gZWxzZSB7CisJCQkvKiBsYXN0IHVzZWQgZGVzYy4gRG8gbm90IHJlbW92ZSwgc28gd2UgY2FuIGFwcGVuZCBmcm9tCisJCQkgICBpdCwgYnV0IGRvbid0IGxvb2sgYXQgaXQgbmV4dCB0aW1lLCBlaXRoZXIgKi8KKwkJCWRlc2MtPmNvb2tpZSA9IDA7CisKKwkJCS8qIFRPRE8gY2hlY2sgc3RhdHVzIGJpdHM/ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZjaGFuLT5kZXNjX2xvY2spOworCisJY2hhbi0+bGFzdF9jb21wbGV0aW9uID0gcGh5c19jb21wbGV0ZTsKKwlpZiAoY29va2llICE9IDApCisJCWNoYW4tPmNvbXBsZXRlZF9jb29raWUgPSBjb29raWU7CisKKwlzcGluX3VubG9jaygmY2hhbi0+Y2xlYW51cF9sb2NrKTsKK30KKworLyoqCisgKiBpb2F0X2RtYV9pc19jb21wbGV0ZSAtIHBvbGwgdGhlIHN0YXR1cyBvZiBhIElPQVQgRE1BIHRyYW5zYWN0aW9uCisgKiBAY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKKyAqIEBjb29raWU6IERNQSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgKi8KKworc3RhdGljIGVudW0gZG1hX3N0YXR1cyBpb2F0X2RtYV9pc19jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jb29raWVfdCBjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jb29raWVfdCAqZG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2Nvb2tpZV90ICp1c2VkKQoreworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4oY2hhbik7CisJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKKwlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKKwllbnVtIGRtYV9zdGF0dXMgcmV0OworCisJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOworCWxhc3RfY29tcGxldGUgPSBpb2F0X2NoYW4tPmNvbXBsZXRlZF9jb29raWU7CisKKwlpZiAoZG9uZSkKKwkJKmRvbmU9IGxhc3RfY29tcGxldGU7CisJaWYgKHVzZWQpCisJCSp1c2VkID0gbGFzdF91c2VkOworCisJcmV0ID0gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKKwlpZiAocmV0ID09IERNQV9TVUNDRVNTKQorCQlyZXR1cm4gcmV0OworCisJaW9hdF9kbWFfbWVtY3B5X2NsZWFudXAoaW9hdF9jaGFuKTsKKworCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKKwlsYXN0X2NvbXBsZXRlID0gaW9hdF9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCisJaWYgKGRvbmUpCisJCSpkb25lPSBsYXN0X2NvbXBsZXRlOworCWlmICh1c2VkKQorCQkqdXNlZCA9IGxhc3RfdXNlZDsKKworCXJldHVybiBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOworfQorCisvKiBQQ0kgQVBJICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpb2F0X3BjaV90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUKSB9LAorCXsgMCwgfQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlvYXRfcGNpX2RydiA9IHsKKwkubmFtZSAJPSAiaW9hdGRtYSIsCisJLmlkX3RhYmxlID0gaW9hdF9wY2lfdGJsLAorCS5wcm9iZQk9IGlvYXRfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGlvYXRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpb2F0X2RvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW9hdF9kZXZpY2UgKmluc3RhbmNlID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGF0dG5zdGF0dXM7CisJdTggaW50cmN0cmw7CisKKwlpbnRyY3RybCA9IGlvYXRkbWFfcmVhZDgoaW5zdGFuY2UsIElPQVRfSU5UUkNUUkxfT0ZGU0VUKTsKKworCWlmICghKGludHJjdHJsICYgSU9BVF9JTlRSQ1RSTF9NQVNURVJfSU5UX0VOKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKCEoaW50cmN0cmwgJiBJT0FUX0lOVFJDVFJMX0lOVF9TVEFUVVMpKSB7CisJCWlvYXRkbWFfd3JpdGU4KGluc3RhbmNlLCBJT0FUX0lOVFJDVFJMX09GRlNFVCwgaW50cmN0cmwpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJYXR0bnN0YXR1cyA9IGlvYXRkbWFfcmVhZDMyKGluc3RhbmNlLCBJT0FUX0FUVE5TVEFUVVNfT0ZGU0VUKTsKKworCXByaW50ayhLRVJOX0VSUiAiaW9hdGRtYSBlcnJvcjogaW50ZXJydXB0ISBzdGF0dXMgJWx4XG4iLCBhdHRuc3RhdHVzKTsKKworCWlvYXRkbWFfd3JpdGU4KGluc3RhbmNlLCBJT0FUX0lOVFJDVFJMX09GRlNFVCwgaW50cmN0cmwpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgaW9hdF9zdGFydF9udWxsX2Rlc2Moc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbikKK3sKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpkZXNjOworCisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmlvYXRfY2hhbi0+ZnJlZV9kZXNjKSkgeworCQlkZXNjID0gdG9faW9hdF9kZXNjKGlvYXRfY2hhbi0+ZnJlZV9kZXNjLm5leHQpOworCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7CisJfSBlbHNlIHsKKwkJLyogdHJ5IHRvIGdldCBhbm90aGVyIGRlc2MgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKwkJZGVzYyA9IGlvYXRfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoaW9hdF9jaGFuLCBHRlBfS0VSTkVMKTsKKwkJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJCS8qIHdpbGwgdGhpcyBldmVyIGhhcHBlbj8gKi8KKwkJQlVHX09OKCFkZXNjKTsKKwl9CisKKwlkZXNjLT5ody0+Y3RsID0gSU9BVF9ETUFfREVTQ1JJUFRPUl9OVUw7CisJZGVzYy0+aHctPm5leHQgPSAwOworCisJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmlvYXRfY2hhbi0+dXNlZF9kZXNjKTsKKwlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOworCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCisJaW9hdGRtYV9jaGFuX3dyaXRlNjQoaW9hdF9jaGFuLCBJT0FUX0NIQUlOQUREUl9PRkZTRVQsIGRlc2MtPnBoeXMpOworI2Vsc2UKKwlpb2F0ZG1hX2NoYW5fd3JpdGUzMihpb2F0X2NoYW4sCisJICAgICAgICAgICAgICAgICAgICAgSU9BVF9DSEFJTkFERFJfT0ZGU0VUX0xPVywKKwkgICAgICAgICAgICAgICAgICAgICAodTMyKSBkZXNjLT5waHlzKTsKKwlpb2F0ZG1hX2NoYW5fd3JpdGUzMihpb2F0X2NoYW4sIElPQVRfQ0hBSU5BRERSX09GRlNFVF9ISUdILCAwKTsKKyNlbmRpZgorCWlvYXRkbWFfY2hhbl93cml0ZTgoaW9hdF9jaGFuLCBJT0FUX0NIQU5DTURfT0ZGU0VULCBJT0FUX0NIQU5DTURfU1RBUlQpOworfQorCisvKgorICogUGVyZm9ybSBhIElPQVQgdHJhbnNhY3Rpb24gdG8gdmVyaWZ5IHRoZSBIVyB3b3Jrcy4KKyAqLworI2RlZmluZSBJT0FUX1RFU1RfU0laRSAyMDAwCisKK3N0YXRpYyBpbnQgaW9hdF9zZWxmX3Rlc3Qoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGk7CisJdTggKnNyYzsKKwl1OCAqZGVzdDsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuOworCWRtYV9jb29raWVfdCBjb29raWU7CisJaW50IGVyciA9IDA7CisKKwlzcmMgPSBremFsbG9jKHNpemVvZih1OCkgKiBJT0FUX1RFU1RfU0laRSwgU0xBQl9LRVJORUwpOworCWlmICghc3JjKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXN0ID0ga3phbGxvYyhzaXplb2YodTgpICogSU9BVF9URVNUX1NJWkUsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWRlc3QpIHsKKwkJa2ZyZWUoc3JjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogRmlsbCBpbiBzcmMgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IElPQVRfVEVTVF9TSVpFOyBpKyspCisJCXNyY1tpXSA9ICh1OClpOworCisJLyogU3RhcnQgY29weSwgdXNpbmcgZmlyc3QgRE1BIGNoYW5uZWwgKi8KKwlkbWFfY2hhbiA9IGNvbnRhaW5lcl9vZihkZXZpY2UtPmNvbW1vbi5jaGFubmVscy5uZXh0LAorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfY2hhbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Vfbm9kZSk7CisJaWYgKGlvYXRfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGRtYV9jaGFuKSA8IDEpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJY29va2llID0gaW9hdF9kbWFfbWVtY3B5X2J1Zl90b19idWYoZG1hX2NoYW4sIGRlc3QsIHNyYywgSU9BVF9URVNUX1NJWkUpOworCWlvYXRfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKGRtYV9jaGFuKTsKKwltc2xlZXAoMSk7CisKKwlpZiAoaW9hdF9kbWFfaXNfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb2F0ZG1hOiBTZWxmLXRlc3QgY29weSB0aW1lZCBvdXQsIGRpc2FibGluZ1xuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9yZXNvdXJjZXM7CisJfQorCWlmIChtZW1jbXAoc3JjLCBkZXN0LCBJT0FUX1RFU1RfU0laRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb2F0ZG1hOiBTZWxmLXRlc3QgY29weSBmYWlsZWQgY29tcGFyZSwgZGlzYWJsaW5nXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3Jlc291cmNlczsKKwl9CisKK2ZyZWVfcmVzb3VyY2VzOgorCWlvYXRfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoZG1hX2NoYW4pOworb3V0OgorCWtmcmVlKHNyYyk7CisJa2ZyZWUoZGVzdCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaW9hdF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47CisJdm9pZCAqcmVnX2Jhc2U7CisJc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2U7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9lbmFibGVfZGV2aWNlOworCisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJaWYgKGVycikKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc2V0X2RtYV9tYXNrOworCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBpb2F0X3BjaV9kcnYubmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVxdWVzdF9yZWdpb25zOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwlyZWdfYmFzZSA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghcmVnX2Jhc2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlkZXZpY2UgPSBremFsbG9jKHNpemVvZigqZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZpY2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfa3phbGxvYzsKKwl9CisKKwkvKiBETUEgY29oZXJlbnQgbWVtb3J5IHBvb2wgZm9yIERNQSBkZXNjcmlwdG9yIGFsbG9jYXRpb25zICovCisJZGV2aWNlLT5kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgiZG1hX2Rlc2NfcG9vbCIsIHBkZXYsCisJCXNpemVvZihzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciksIDY0LCAwKTsKKwlpZiAoIWRldmljZS0+ZG1hX3Bvb2wpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZG1hX3Bvb2w7CisJfQorCisJZGV2aWNlLT5jb21wbGV0aW9uX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImNvbXBsZXRpb25fcG9vbCIsIHBkZXYsIHNpemVvZih1NjQpLCBTTVBfQ0FDSEVfQllURVMsIFNNUF9DQUNIRV9CWVRFUyk7CisJaWYgKCFkZXZpY2UtPmNvbXBsZXRpb25fcG9vbCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9jb21wbGV0aW9uX3Bvb2w7CisJfQorCisJZGV2aWNlLT5wZGV2ID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2aWNlKTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWlmIChwY2lfZW5hYmxlX21zaShwZGV2KSA9PSAwKSB7CisJCWRldmljZS0+bXNpID0gMTsKKwl9IGVsc2UgeworCQlkZXZpY2UtPm1zaSA9IDA7CisJfQorI2VuZGlmCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCAmaW9hdF9kb19pbnRlcnJ1cHQsIFNBX1NISVJRLCAiaW9hdCIsCisJCWRldmljZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfaXJxOworCisJZGV2aWNlLT5yZWdfYmFzZSA9IHJlZ19iYXNlOworCisJaW9hdGRtYV93cml0ZTgoZGV2aWNlLCBJT0FUX0lOVFJDVFJMX09GRlNFVCwgSU9BVF9JTlRSQ1RSTF9NQVNURVJfSU5UX0VOKTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCUlOSVRfTElTVF9IRUFEKCZkZXZpY2UtPmNvbW1vbi5jaGFubmVscyk7CisJZW51bWVyYXRlX2RtYV9jaGFubmVscyhkZXZpY2UpOworCisJZGV2aWNlLT5jb21tb24uZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gaW9hdF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZGV2aWNlLT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBpb2F0X2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCWRldmljZS0+Y29tbW9uLmRldmljZV9tZW1jcHlfYnVmX3RvX2J1ZiA9IGlvYXRfZG1hX21lbWNweV9idWZfdG9fYnVmOworCWRldmljZS0+Y29tbW9uLmRldmljZV9tZW1jcHlfYnVmX3RvX3BnID0gaW9hdF9kbWFfbWVtY3B5X2J1Zl90b19wZzsKKwlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfbWVtY3B5X3BnX3RvX3BnID0gaW9hdF9kbWFfbWVtY3B5X3BnX3RvX3BnOworCWRldmljZS0+Y29tbW9uLmRldmljZV9tZW1jcHlfY29tcGxldGUgPSBpb2F0X2RtYV9pc19jb21wbGV0ZTsKKwlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfbWVtY3B5X2lzc3VlX3BlbmRpbmcgPSBpb2F0X2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKKwlwcmludGsoS0VSTl9JTkZPICJJbnRlbChSKSBJL09BVCBETUEgRW5naW5lIGZvdW5kLCAlZCBjaGFubmVsc1xuIiwKKwkJZGV2aWNlLT5jb21tb24uY2hhbmNudCk7CisKKwllcnIgPSBpb2F0X3NlbGZfdGVzdChkZXZpY2UpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3NlbGZfdGVzdDsKKworCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmRldmljZS0+Y29tbW9uKTsKKworCXJldHVybiAwOworCitlcnJfc2VsZl90ZXN0OgorZXJyX2lycToKKwlwY2lfcG9vbF9kZXN0cm95KGRldmljZS0+Y29tcGxldGlvbl9wb29sKTsKK2Vycl9jb21wbGV0aW9uX3Bvb2w6CisJcGNpX3Bvb2xfZGVzdHJveShkZXZpY2UtPmRtYV9wb29sKTsKK2Vycl9kbWFfcG9vbDoKKwlrZnJlZShkZXZpY2UpOworZXJyX2t6YWxsb2M6CisJaW91bm1hcChyZWdfYmFzZSk7CitlcnJfaW9yZW1hcDoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX3JlcXVlc3RfcmVnaW9uczoKK2Vycl9zZXRfZG1hX21hc2s6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyX2VuYWJsZV9kZXZpY2U6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGlvYXRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpb2F0X2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgKl9jaGFuOworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW47CisKKwlkZXZpY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZkZXZpY2UtPmNvbW1vbik7CisKKwlmcmVlX2lycShkZXZpY2UtPnBkZXYtPmlycSwgZGV2aWNlKTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWlmIChkZXZpY2UtPm1zaSkKKwkJcGNpX2Rpc2FibGVfbXNpKGRldmljZS0+cGRldik7CisjZW5kaWYKKwlwY2lfcG9vbF9kZXN0cm95KGRldmljZS0+ZG1hX3Bvb2wpOworCXBjaV9wb29sX2Rlc3Ryb3koZGV2aWNlLT5jb21wbGV0aW9uX3Bvb2wpOworCWlvdW5tYXAoZGV2aWNlLT5yZWdfYmFzZSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYW4sIF9jaGFuLCAmZGV2aWNlLT5jb21tb24uY2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CisJCWlvYXRfY2hhbiA9IHRvX2lvYXRfY2hhbihjaGFuKTsKKwkJbGlzdF9kZWwoJmNoYW4tPmRldmljZV9ub2RlKTsKKwkJa2ZyZWUoaW9hdF9jaGFuKTsKKwl9CisJa2ZyZWUoZGV2aWNlKTsKK30KKworLyogTU9EVUxFIEFQSSAqLworTU9EVUxFX1ZFUlNJT04oIjEuNyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKKworc3RhdGljIGludCBfX2luaXQgaW9hdF9pbml0X21vZHVsZSh2b2lkKQoreworCS8qIGl0J3MgY3VycmVudGx5IHVuc2FmZSB0byB1bmxvYWQgdGhpcyBtb2R1bGUgKi8KKwkvKiBpZiBmb3JjZWQsIHdvcnN0IGNhc2UgaXMgdGhhdCBybW1vZCBoYW5ncyAqLworCWlmIChUSElTX01PRFVMRSAhPSBOVUxMKQorCQlUSElTX01PRFVMRS0+dW5zYWZlID0gMTsKKworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmlvYXRfcGNpX2Rydik7Cit9CisKK21vZHVsZV9pbml0KGlvYXRfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgaW9hdF9leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaW9hdF9wY2lfZHJ2KTsKK30KKworbW9kdWxlX2V4aXQoaW9hdF9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hLmggYi9kcml2ZXJzL2RtYS9pb2F0ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkM2IzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWEuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKyNpZm5kZWYgSU9BVERNQV9ICisjZGVmaW5lIElPQVRETUFfSAorCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSAiaW9hdGRtYV9ody5oIgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisKKyNkZWZpbmUgSU9BVF9MT1dfQ09NUExFVElPTl9NQVNLCTB4ZmZmZmZmYzAKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZG1hX2RldmljZV9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZG1hX2NsaWVudF9saXN0OworCisvKioKKyAqIHN0cnVjdCBpb2F0X2RldmljZSAtIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgSU9BVCBkZXZpY2UKKyAqIEBwZGV2OiBQQ0ktRXhwcmVzcyBkZXZpY2UKKyAqIEByZWdfYmFzZTogTU1JTyByZWdpc3RlciBzcGFjZSBiYXNlIGFkZHJlc3MKKyAqIEBkbWFfcG9vbDogZm9yIGFsbG9jYXRpbmcgRE1BIGRlc2NyaXB0b3JzCisgKiBAY29tbW9uOiBlbWJlZGRlZCBzdHJ1Y3QgZG1hX2RldmljZQorICogQG1zaTogTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgbnVtYmVyCisgKi8KKworc3RydWN0IGlvYXRfZGV2aWNlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl2b2lkICpyZWdfYmFzZTsKKwlzdHJ1Y3QgcGNpX3Bvb2wgKmRtYV9wb29sOworCXN0cnVjdCBwY2lfcG9vbCAqY29tcGxldGlvbl9wb29sOworCisJc3RydWN0IGRtYV9kZXZpY2UgY29tbW9uOworCXU4IG1zaTsKK307CisKKy8qKgorICogc3RydWN0IGlvYXRfZG1hX2NoYW4gLSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIERNQSBjaGFubmVsCisgKiBAZGV2aWNlOgorICogQHJlZ19iYXNlOgorICogQHN3X2luX3VzZToKKyAqIEBjb21wbGV0aW9uOgorICogQGNvbXBsZXRpb25fbG93OgorICogQGNvbXBsZXRpb25faGlnaDoKKyAqIEBjb21wbGV0ZWRfY29va2llOiBsYXN0IGNvb2tpZSBzZWVuIGNvbXBsZXRlZCBvbiBjbGVhbnVwCisgKiBAY29va2llOiB2YWx1ZSBvZiBsYXN0IGNvb2tpZSBnaXZlbiB0byBjbGllbnQKKyAqIEBsYXN0X2NvbXBsZXRpb246CisgKiBAeGZlcmNhcDoKKyAqIEBkZXNjX2xvY2s6CisgKiBAZnJlZV9kZXNjOgorICogQHVzZWRfZGVzYzoKKyAqIEByZXNvdXJjZToKKyAqIEBkZXZpY2Vfbm9kZToKKyAqLworCitzdHJ1Y3QgaW9hdF9kbWFfY2hhbiB7CisKKwl2b2lkICpyZWdfYmFzZTsKKworCWRtYV9jb29raWVfdCBjb21wbGV0ZWRfY29va2llOworCXVuc2lnbmVkIGxvbmcgbGFzdF9jb21wbGV0aW9uOworCisJdTMyIHhmZXJjYXA7CS8qIFhGRVJDQVAgcmVnaXN0ZXIgdmFsdWUgZXhwYW5kZWQgb3V0ICovCisKKwlzcGlubG9ja190IGNsZWFudXBfbG9jazsKKwlzcGlubG9ja190IGRlc2NfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfZGVzYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWRfZGVzYzsKKworCWludCBwZW5kaW5nOworCisJc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGRtYV9jaGFuIGNvbW1vbjsKKworCWRtYV9hZGRyX3QgY29tcGxldGlvbl9hZGRyOworCXVuaW9uIHsKKwkJdTY0IGZ1bGw7IC8qIEhXIGNvbXBsZXRpb24gd3JpdGViYWNrICovCisJCXN0cnVjdCB7CisJCQl1MzIgbG93OworCQkJdTMyIGhpZ2g7CisJCX07CisJfSAqY29tcGxldGlvbl92aXJ0OworfTsKKworLyogd3JhcHBlciBhcm91bmQgaGFyZHdhcmUgZGVzY3JpcHRvciBmb3JtYXQgKyBhZGRpdGlvbmFsIHNvZnR3YXJlIGZpZWxkcyAqLworCisvKioKKyAqIHN0cnVjdCBpb2F0X2Rlc2Nfc3cgLSB3cmFwcGVyIGFyb3VuZCBoYXJkd2FyZSBkZXNjcmlwdG9yCisgKiBAaHc6IGhhcmR3YXJlIERNQSBkZXNjcmlwdG9yCisgKiBAbm9kZToKKyAqIEBjb29raWU6CisgKiBAcGh5czoKKyAqLworCitzdHJ1Y3QgaW9hdF9kZXNjX3N3IHsKKwlzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciAqaHc7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCWRtYV9jb29raWVfdCBjb29raWU7CisJZG1hX2FkZHJfdCBwaHlzOworCURFQ0xBUkVfUENJX1VOTUFQX0FERFIoc3JjKQorCURFQ0xBUkVfUENJX1VOTUFQX0xFTihzcmNfbGVuKQorCURFQ0xBUkVfUENJX1VOTUFQX0FERFIoZHN0KQorCURFQ0xBUkVfUENJX1VOTUFQX0xFTihkc3RfbGVuKQorfTsKKworI2VuZGlmIC8qIElPQVRETUFfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmggYi9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3YTEyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfaHcuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworI2lmbmRlZiBfSU9BVF9IV19IXworI2RlZmluZSBfSU9BVF9IV19IXworCisvKiBQQ0kgQ29uZmlndXJhdGlvbiBTcGFjZSBWYWx1ZXMgKi8KKyNkZWZpbmUgSU9BVF9QQ0lfVklECQkJMHg4MDg2CisjZGVmaW5lIElPQVRfUENJX0RJRAkJCTB4MUEzOAorI2RlZmluZSBJT0FUX1BDSV9SSUQJCQkweDAwCisjZGVmaW5lIElPQVRfUENJX1NWSUQJCQkweDgwODYKKyNkZWZpbmUgSU9BVF9QQ0lfU0lECQkJMHg4MDg2CisjZGVmaW5lIElPQVRfVkVSCQkJMHgxMgkvKiBWZXJzaW9uIDEuMiAqLworCitzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciB7CisJdWludDMyX3QJc2l6ZTsKKwl1aW50MzJfdAljdGw7CisJdWludDY0X3QJc3JjX2FkZHI7CisJdWludDY0X3QJZHN0X2FkZHI7CisJdWludDY0X3QJbmV4dDsKKwl1aW50NjRfdAlyc3YxOworCXVpbnQ2NF90CXJzdjI7CisJdWludDY0X3QJdXNlcjE7CisJdWludDY0X3QJdXNlcjI7Cit9OworCisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0lOVF9HTgkweDAwMDAwMDAxCisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX1NSQ19TTgkweDAwMDAwMDAyCisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0RTVF9TTgkweDAwMDAwMDA0CisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0NQX1NUUwkweDAwMDAwMDA4CisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0ZSQU1FCTB4MDAwMDAwMTAKKyNkZWZpbmUgSU9BVF9ETUFfREVTQ1JJUFRPUl9OVUwJCTB4MDAwMDAwMjAKKyNkZWZpbmUgSU9BVF9ETUFfREVTQ1JJUFRPUl9PUENPREUJMHhGRjAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRkbWFfaW8uaCBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI0YmY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9pby5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworI2lmbmRlZiBJT0FURE1BX0lPX0gKKyNkZWZpbmUgSU9BVERNQV9JT19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIGRldmljZSBhbmQgcGVyLWNoYW5uZWwgTU1JTyByZWdpc3RlciByZWFkIGFuZCB3cml0ZSBmdW5jdGlvbnMKKyAqIHRoaXMgaXMgYSBsb3Qgb2YgYW5veWluZyBpbmxpbmUgZnVuY3Rpb25zLCBidXQgaXQncyB0eXBlc2FmZQorICovCisKK3N0YXRpYyBpbmxpbmUgdTggaW9hdGRtYV9yZWFkOChzdHJ1Y3QgaW9hdF9kZXZpY2UgKmRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkYihkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaW9hdGRtYV9yZWFkMTYoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkdyhkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaW9hdGRtYV9yZWFkMzIoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvYXRkbWFfd3JpdGU4KHN0cnVjdCBpb2F0X2RldmljZSAqZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHU4IHZhbHVlKQoreworCXdyaXRlYih2YWx1ZSwgZGV2aWNlLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2F0ZG1hX3dyaXRlMTYoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHUxNiB2YWx1ZSkKK3sKKwl3cml0ZXcodmFsdWUsIGRldmljZS0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV93cml0ZTMyKHN0cnVjdCBpb2F0X2RldmljZSAqZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCBkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1OCBpb2F0ZG1hX2NoYW5fcmVhZDgoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkYihjaGFuLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGlvYXRkbWFfY2hhbl9yZWFkMTYoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWR3KGNoYW4tPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaW9hdGRtYV9jaGFuX3JlYWQzMihzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV9jaGFuX3dyaXRlOChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHU4IHZhbHVlKQoreworCXdyaXRlYih2YWx1ZSwgY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV9jaGFuX3dyaXRlMTYoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdTE2IHZhbHVlKQoreworCXdyaXRldyh2YWx1ZSwgY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV9jaGFuX3dyaXRlMzIoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHZhbHVlKQoreworCXdyaXRlbCh2YWx1ZSwgY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCitzdGF0aWMgaW5saW5lIHU2NCBpb2F0ZG1hX2NoYW5fcmVhZDY0KHN0cnVjdCBpb2F0X2RtYV9jaGFuICpjaGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkcShjaGFuLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2F0ZG1hX2NoYW5fd3JpdGU2NChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1NjQgdmFsdWUpCit7CisJd3JpdGVxKHZhbHVlLCBjaGFuLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIElPQVRETUFfSU9fSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWEyMWFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKyNpZm5kZWYgX0lPQVRfUkVHSVNURVJTX0hfCisjZGVmaW5lIF9JT0FUX1JFR0lTVEVSU19IXworCisKKy8qIE1NSU8gRGV2aWNlIFJlZ2lzdGVycyAqLworI2RlZmluZSBJT0FUX0NIQU5DTlRfT0ZGU0VUCQkJMHgwMAkvKiAgOC1iaXQgKi8KKworI2RlZmluZSBJT0FUX1hGRVJDQVBfT0ZGU0VUCQkJMHgwMQkvKiAgOC1iaXQgKi8KKyNkZWZpbmUgSU9BVF9YRkVSQ0FQXzRLQgkJCTEyCisjZGVmaW5lIElPQVRfWEZFUkNBUF84S0IJCQkxMworI2RlZmluZSBJT0FUX1hGRVJDQVBfMTZLQgkJCTE0CisjZGVmaW5lIElPQVRfWEZFUkNBUF8zMktCCQkJMTUKKyNkZWZpbmUgSU9BVF9YRkVSQ0FQXzMyR0IJCQkwCisKKyNkZWZpbmUgSU9BVF9HRU5DVFJMX09GRlNFVAkJCTB4MDIJLyogIDgtYml0ICovCisjZGVmaW5lIElPQVRfR0VOQ1RSTF9ERUJVR19FTgkJCTB4MDEKKworI2RlZmluZSBJT0FUX0lOVFJDVFJMX09GRlNFVAkJCTB4MDMJLyogIDgtYml0ICovCisjZGVmaW5lIElPQVRfSU5UUkNUUkxfTUFTVEVSX0lOVF9FTgkJMHgwMQkvKiBNYXN0ZXIgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJT0FUX0lOVFJDVFJMX0lOVF9TVEFUVVMJCTB4MDIJLyogQVRUTlNUQVRVUyAtb3ItIENoYW5uZWwgSW50ICovCisjZGVmaW5lIElPQVRfSU5UUkNUUkxfSU5UCQkJMHgwNAkvKiBJTlRfU1RBVFVTIC1hbmQtIE1BU1RFUl9JTlRfRU4gKi8KKworI2RlZmluZSBJT0FUX0FUVE5TVEFUVVNfT0ZGU0VUCQkJMHgwNAkvKiBFYWNoIGJpdCBpcyBhIGNoYW5uZWwgKi8KKworI2RlZmluZSBJT0FUX1ZFUl9PRkZTRVQJCQkJMHgwOAkvKiAgOC1iaXQgKi8KKyNkZWZpbmUgSU9BVF9WRVJfTUFKT1JfTUFTSwkJCTB4RjAKKyNkZWZpbmUgSU9BVF9WRVJfTUlOT1JfTUFTSwkJCTB4MEYKKyNkZWZpbmUgR0VUX0lPQVRfVkVSX01BSk9SKHgpCQkJKCh4KSAmIElPQVRfVkVSX01BSk9SX01BU0spCisjZGVmaW5lIEdFVF9JT0FUX1ZFUl9NSU5PUih4KQkJCSgoeCkgJiBJT0FUX1ZFUl9NSU5PUl9NQVNLKQorCisjZGVmaW5lIElPQVRfUEVSUE9SVE9GRlNFVF9PRkZTRVQJCTB4MEEJLyogMTYtYml0ICovCisKKyNkZWZpbmUgSU9BVF9JTlRSREVMQVlfT0ZGU0VUCQkJMHgwQwkvKiAxNi1iaXQgKi8KKyNkZWZpbmUgSU9BVF9JTlRSREVMQVlfSU5UX0RFTEFZX01BU0sJCTB4M0ZGRgkvKiBJbnRlcnJ1cHQgRGVsYXkgVGltZSAqLworI2RlZmluZSBJT0FUX0lOVFJERUxBWV9DT0FMRVNFX1NVUFBPUlQJCTB4ODAwMAkvKiBJbnRlcnJ1cHQgQ29hbGVzaW5nIFN1cHBvcnRlZCAqLworCisjZGVmaW5lIElPQVRfREVWSUNFX1NUQVRVU19PRkZTRVQJCTB4MEUJLyogMTYtYml0ICovCisjZGVmaW5lIElPQVRfREVWSUNFX1NUQVRVU19ERUdSQURFRF9NT0RFCTB4MDAwMQorCisKKyNkZWZpbmUgSU9BVF9DSEFOTkVMX01NSU9fU0laRQkJCTB4ODAJLyogRWFjaCBDaGFubmVsIE1NSU8gc3BhY2UgaXMgdGhpcyBzaXplICovCisKKy8qIERNQSBDaGFubmVsIFJlZ2lzdGVycyAqLworI2RlZmluZSBJT0FUX0NIQU5DVFJMX09GRlNFVAkJCTB4MDAJLyogMTYtYml0IENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NIQU5DVFJMX0NIQU5ORUxfUFJJT1JJVFlfTUFTSwkweEYwMDAKKyNkZWZpbmUgSU9BVF9DSEFOQ1RSTF9DSEFOTkVMX0lOX1VTRQkJMHgwMTAwCisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfREVTQ1JJUFRPUl9BRERSX1NOT09QX0NPTlRST0wJMHgwMDIwCisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfRVJSX0lOVF9FTgkJMHgwMDEwCisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfQU5ZX0VSUl9BQk9SVF9FTgkJMHgwMDA4CisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfRVJSX0NPTVBMRVRJT05fRU4JCTB4MDAwNAorI2RlZmluZSBJT0FUX0NIQU5DVFJMX0lOVF9ESVNBQkxFCQkweDAwMDEKKworI2RlZmluZSBJT0FUX0RNQV9DT01QX09GRlNFVAkJCTB4MDIJLyogMTYtYml0IERNQSBjaGFubmVsIGNvbXBhdGFiaWxpdHkgKi8KKyNkZWZpbmUgSU9BVF9ETUFfQ09NUF9WMQkJCTB4MDAwMQkvKiBDb21wYXRhYmlsaXR5IHdpdGggRE1BIHZlcnNpb24gMSAqLworCisjZGVmaW5lIElPQVRfQ0hBTlNUU19PRkZTRVQJCQkweDA0CS8qIDY0LWJpdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NIQU5TVFNfT0ZGU0VUX0xPVwkJCTB4MDQKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX09GRlNFVF9ISUdICQkweDA4CisjZGVmaW5lIElPQVRfQ0hBTlNUU19DT01QTEVURURfREVTQ1JJUFRPUl9BRERSCTB4RkZGRkZGRkZGRkZGRkZDMAorI2RlZmluZSBJT0FUX0NIQU5TVFNfU09GVF9FUlIJCQkweDAwMDAwMDAwMDAwMDAwMTAKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVMJMHgwMDAwMDAwMDAwMDAwMDA3CisjZGVmaW5lIElPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTX0FDVElWRQkweDAKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVNfRE9ORQkweDEKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVNfU1VTUEVOREVECTB4MgorI2RlZmluZSBJT0FUX0NIQU5TVFNfRE1BX1RSQU5TRkVSX1NUQVRVU19IQUxURUQJMHgzCisKKyNkZWZpbmUgSU9BVF9DSEFJTkFERFJfT0ZGU0VUCQkJMHgwQwkvKiA2NC1iaXQgRGVzY3JpcHRvciBDaGFpbiBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIElPQVRfQ0hBSU5BRERSX09GRlNFVF9MT1cJCTB4MEMKKyNkZWZpbmUgSU9BVF9DSEFJTkFERFJfT0ZGU0VUX0hJR0gJCTB4MTAKKworI2RlZmluZSBJT0FUX0NIQU5DTURfT0ZGU0VUCQkJMHgxNAkvKiAgOC1iaXQgRE1BIENoYW5uZWwgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NIQU5DTURfUkVTRVQJCQkweDIwCisjZGVmaW5lIElPQVRfQ0hBTkNNRF9SRVNVTUUJCQkweDEwCisjZGVmaW5lIElPQVRfQ0hBTkNNRF9BQk9SVAkJCTB4MDgKKyNkZWZpbmUgSU9BVF9DSEFOQ01EX1NVU1BFTkQJCQkweDA0CisjZGVmaW5lIElPQVRfQ0hBTkNNRF9BUFBFTkQJCQkweDAyCisjZGVmaW5lIElPQVRfQ0hBTkNNRF9TVEFSVAkJCTB4MDEKKworI2RlZmluZSBJT0FUX0NIQU5DTVBfT0ZGU0VUCQkJMHgxOAkvKiA2NC1iaXQgQ2hhbm5lbCBDb21wbGV0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU9BVF9DSEFOQ01QX09GRlNFVF9MT1cJCQkweDE4CisjZGVmaW5lIElPQVRfQ0hBTkNNUF9PRkZTRVRfSElHSAkJMHgxQworCisjZGVmaW5lIElPQVRfQ0RBUl9PRkZTRVQJCQkweDIwCS8qIDY0LWJpdCBDdXJyZW50IERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NEQVJfT0ZGU0VUX0xPVwkJCTB4MjAKKyNkZWZpbmUgSU9BVF9DREFSX09GRlNFVF9ISUdICQkJMHgyNAorCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9PRkZTRVQJCQkweDI4CS8qIDMyLWJpdCBDaGFubmVsIEVycm9yIFJlZ2lzdGVyICovCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9ETUFfVFJBTlNGRVJfU1JDX0FERFJfRVJSCTB4MDAwMQorI2RlZmluZSBJT0FUX0NIQU5FUlJfRE1BX1RSQU5TRkVSX0RFU1RfQUREUl9FUlIJMHgwMDAyCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9ORVhUX0RFU0NSSVBUT1JfQUREUl9FUlIJMHgwMDA0CisjZGVmaW5lIElPQVRfQ0hBTkVSUl9ORVhUX0RFU0NSSVBUT1JfQUxJR05NRU5UX0VSUgkweDAwMDgKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0NIQUlOX0FERFJfVkFMVUVfRVJSCTB4MDAxMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfQ0hBTkNNRF9FUlIJCTB4MDAyMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfQ0hJUFNFVF9VTkNPUlJFQ1RBQkxFX0RBVEFfSU5URUdSSVRZX0VSUgkweDAwNDAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0RNQV9VTkNPUlJFQ1RBQkxFX0RBVEFfSU5URUdSSVRZX0VSUgkweDAwODAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX1JFQURfREFUQV9FUlIJCTB4MDEwMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfV1JJVEVfREFUQV9FUlIJCTB4MDIwMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfREVTQ1JJUFRPUl9DT05UUk9MX0VSUgkweDA0MDAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0RFU0NSSVBUT1JfTEVOR1RIX0VSUgkweDA4MDAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0NPTVBMRVRJT05fQUREUl9FUlIJMHgxMDAwCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9JTlRfQ09ORklHVVJBVElPTl9FUlIJMHgyMDAwCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9TT0ZUX0VSUgkJCTB4NDAwMAorCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9NQVNLX09GRlNFVAkJMHgyQwkvKiAzMi1iaXQgQ2hhbm5lbCBFcnJvciBSZWdpc3RlciAqLworCisjZW5kaWYgLyogX0lPQVRfUkVHSVNURVJTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb3Zsb2NrLmMgYi9kcml2ZXJzL2RtYS9pb3Zsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkMzI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2lvdmxvY2suYwpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIGJhc2VkIG9uIG5ldC9jb3JlL2RhdGFncmFtLmMgYW5kIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKy8qCisgKiBUaGlzIGNvZGUgYWxsb3dzIHRoZSBuZXQgc3RhY2sgdG8gbWFrZSB1c2Ugb2YgYSBETUEgZW5naW5lIGZvcgorICogc2tiIHRvIGlvdmVjIGNvcGllcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4gLyogZm9yIG1lbWNweV90b2lvdmVjICovCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworaW50IG51bV9wYWdlc19zcGFubmVkKHN0cnVjdCBpb3ZlYyAqaW92KQoreworCXJldHVybgorCSgoUEFHRV9BTElHTigodW5zaWduZWQgbG9uZylpb3YtPmlvdl9iYXNlICsgaW92LT5pb3ZfbGVuKSAtCisJKCh1bnNpZ25lZCBsb25nKWlvdi0+aW92X2Jhc2UgJiBQQUdFX01BU0spKSA+PiBQQUdFX1NISUZUKTsKK30KKworLyoKKyAqIFBpbiBkb3duIGFsbCB0aGUgaW92ZWMgcGFnZXMgbmVlZGVkIGZvciBsZW4gYnl0ZXMuCisgKiBSZXR1cm4gYSBzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0IHRvIGtlZXAgdHJhY2sgb2YgcGFnZXMgcGlubmVkIGRvd24uCisgKgorICogV2UgYXJlIGFsbG9jYXRpbmcgYSBzaW5nbGUgY2h1bmsgb2YgbWVtb3J5LCBhbmQgdGhlbiBjYXJ2aW5nIGl0IHVwIGludG8KKyAqIDMgc2VjdGlvbnMsIHRoZSBsYXR0ZXIgMiB3aG9zZSBzaXplIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBpb3ZlY3MgYW5kIHRoZQorICogdG90YWwgbnVtYmVyIG9mIHBhZ2VzLCByZXNwZWN0aXZlbHkuCisgKi8KK3N0cnVjdCBkbWFfcGlubmVkX2xpc3QgKmRtYV9waW5faW92ZWNfcGFnZXMoc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqbG9jYWxfbGlzdDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCWludCBpOworCWludCByZXQ7CisJaW50IG5yX2lvdmVjcyA9IDA7CisJaW50IGlvdmVjX2xlbl91c2VkID0gMDsKKwlpbnQgaW92ZWNfcGFnZXNfdXNlZCA9IDA7CisJbG9uZyBlcnI7CisKKwkvKiBkb24ndCBwaW4gZG93biBub24tdXNlci1iYXNlZCBpb3ZlY3MgKi8KKwlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBkZXRlcm1pbmUgaG93IG1hbnkgaW92ZWNzL3BhZ2VzIHRoZXJlIGFyZSwgdXAgZnJvbnQgKi8KKwlkbyB7CisJCWlvdmVjX2xlbl91c2VkICs9IGlvdltucl9pb3ZlY3NdLmlvdl9sZW47CisJCWlvdmVjX3BhZ2VzX3VzZWQgKz0gbnVtX3BhZ2VzX3NwYW5uZWQoJmlvdltucl9pb3ZlY3NdKTsKKwkJbnJfaW92ZWNzKys7CisJfSB3aGlsZSAoaW92ZWNfbGVuX3VzZWQgPCBsZW4pOworCisJLyogc2luZ2xlIGttYWxsb2MgZm9yIHBpbm5lZCBsaXN0LCBwYWdlX2xpc3RbXSwgYW5kIHRoZSBwYWdlIGFycmF5cyAqLworCWxvY2FsX2xpc3QgPSBrbWFsbG9jKHNpemVvZigqbG9jYWxfbGlzdCkKKwkJKyAobnJfaW92ZWNzICogc2l6ZW9mIChzdHJ1Y3QgZG1hX3BhZ2VfbGlzdCkpCisJCSsgKGlvdmVjX3BhZ2VzX3VzZWQgKiBzaXplb2YgKHN0cnVjdCBwYWdlKikpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsX2xpc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbGlzdCBvZiBwYWdlcyBzdGFydHMgcmlnaHQgYWZ0ZXIgdGhlIHBhZ2UgbGlzdCBhcnJheSAqLworCXBhZ2VzID0gKHN0cnVjdCBwYWdlICoqKSAmbG9jYWxfbGlzdC0+cGFnZV9saXN0W25yX2lvdmVjc107CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW92ZWNzOyBpKyspIHsKKwkJc3RydWN0IGRtYV9wYWdlX2xpc3QgKnBhZ2VfbGlzdCA9ICZsb2NhbF9saXN0LT5wYWdlX2xpc3RbaV07CisKKwkJbGVuIC09IGlvdltpXS5pb3ZfbGVuOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbikpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIHVucGluOworCQl9CisKKwkJcGFnZV9saXN0LT5ucl9wYWdlcyA9IG51bV9wYWdlc19zcGFubmVkKCZpb3ZbaV0pOworCQlwYWdlX2xpc3QtPmJhc2VfYWRkcmVzcyA9IGlvdltpXS5pb3ZfYmFzZTsKKworCQlwYWdlX2xpc3QtPnBhZ2VzID0gcGFnZXM7CisJCXBhZ2VzICs9IHBhZ2VfbGlzdC0+bnJfcGFnZXM7CisKKwkJLyogcGluIHBhZ2VzIGRvd24gKi8KKwkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlyZXQgPSBnZXRfdXNlcl9wYWdlcygKKwkJCWN1cnJlbnQsCisJCQljdXJyZW50LT5tbSwKKwkJCSh1bnNpZ25lZCBsb25nKSBpb3ZbaV0uaW92X2Jhc2UsCisJCQlwYWdlX2xpc3QtPm5yX3BhZ2VzLAorCQkJMSwJLyogd3JpdGUgKi8KKwkJCTAsCS8qIGZvcmNlICovCisJCQlwYWdlX2xpc3QtPnBhZ2VzLAorCQkJTlVMTCk7CisJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwkJaWYgKHJldCAhPSBwYWdlX2xpc3QtPm5yX3BhZ2VzKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byB1bnBpbjsKKwkJfQorCisJCWxvY2FsX2xpc3QtPm5yX2lvdmVjcyA9IGkgKyAxOworCX0KKworCXJldHVybiBsb2NhbF9saXN0OworCit1bnBpbjoKKwlkbWFfdW5waW5faW92ZWNfcGFnZXMobG9jYWxfbGlzdCk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBkbWFfdW5waW5faW92ZWNfcGFnZXMoc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqcGlubmVkX2xpc3QpCit7CisJaW50IGksIGo7CisKKwlpZiAoIXBpbm5lZF9saXN0KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcGlubmVkX2xpc3QtPm5yX2lvdmVjczsgaSsrKSB7CisJCXN0cnVjdCBkbWFfcGFnZV9saXN0ICpwYWdlX2xpc3QgPSAmcGlubmVkX2xpc3QtPnBhZ2VfbGlzdFtpXTsKKwkJZm9yIChqID0gMDsgaiA8IHBhZ2VfbGlzdC0+bnJfcGFnZXM7IGorKykgeworCQkJc2V0X3BhZ2VfZGlydHlfbG9jayhwYWdlX2xpc3QtPnBhZ2VzW2pdKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlX2xpc3QtPnBhZ2VzW2pdKTsKKwkJfQorCX0KKworCWtmcmVlKHBpbm5lZF9saXN0KTsKK30KKworc3RhdGljIGRtYV9jb29raWVfdCBkbWFfbWVtY3B5X3RvX2tlcm5lbF9pb3ZlYyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdAorCWlvdmVjICppb3YsIHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBzaXplX3QgbGVuKQoreworCWRtYV9jb29raWVfdCBkbWFfY29va2llID0gMDsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCWlmIChpb3YtPmlvdl9sZW4pIHsKKwkJCWludCBjb3B5ID0gbWluX3QodW5zaWduZWQgaW50LCBpb3YtPmlvdl9sZW4sIGxlbik7CisJCQlkbWFfY29va2llID0gZG1hX2FzeW5jX21lbWNweV9idWZfdG9fYnVmKAorCQkJCQljaGFuLAorCQkJCQlpb3YtPmlvdl9iYXNlLAorCQkJCQlrZGF0YSwKKwkJCQkJY29weSk7CisJCQlrZGF0YSArPSBjb3B5OworCQkJbGVuIC09IGNvcHk7CisJCQlpb3YtPmlvdl9sZW4gLT0gY29weTsKKwkJCWlvdi0+aW92X2Jhc2UgKz0gY29weTsKKwkJfQorCQlpb3YrKzsKKwl9CisKKwlyZXR1cm4gZG1hX2Nvb2tpZTsKK30KKworLyoKKyAqIFdlIGhhdmUgYWxyZWFkeSBwaW5uZWQgZG93biB0aGUgcGFnZXMgd2Ugd2lsbCBiZSB1c2luZyBpbiB0aGUgaW92ZWNzLgorICogRWFjaCBlbnRyeSBpbiBpb3YgYXJyYXkgaGFzIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gcGlubmVkX2xpc3QtPnBhZ2VfbGlzdC4KKyAqIFVzaW5nIGFycmF5IGluZGV4aW5nIHRvIGtlZXAgaW92W10gYW5kIHBhZ2VfbGlzdFtdIGluIHN5bmMuCisgKiBJbml0aWFsIGVsZW1lbnRzIGluIGlvdiBhcnJheSdzIGlvdi0+aW92X2xlbiB3aWxsIGJlIDAgaWYgYWxyZWFkeSBjb3BpZWQgaW50bworICogICBieSBhbm90aGVyIGNhbGwuCisgKiBpb3YgYXJyYXkgbGVuZ3RoIHJlbWFpbmluZyBndWFyYW50ZWVkIHRvIGJlIGJpZ2dlciB0aGFuIGxlbi4KKyAqLworZG1hX2Nvb2tpZV90IGRtYV9tZW1jcHlfdG9faW92ZWMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0ICpwaW5uZWRfbGlzdCwgdW5zaWduZWQgY2hhciAqa2RhdGEsIHNpemVfdCBsZW4pCit7CisJaW50IGlvdl9ieXRlX29mZnNldDsKKwlpbnQgY29weTsKKwlkbWFfY29va2llX3QgZG1hX2Nvb2tpZSA9IDA7CisJaW50IGlvdmVjX2lkeDsKKwlpbnQgcGFnZV9pZHg7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybiBtZW1jcHlfdG9pb3ZlYyhpb3YsIGtkYXRhLCBsZW4pOworCisJLyogLT4ga2VybmVsIGNvcGllcyAoZS5nLiBzbWJmcykgKi8KKwlpZiAoIXBpbm5lZF9saXN0KQorCQlyZXR1cm4gZG1hX21lbWNweV90b19rZXJuZWxfaW92ZWMoY2hhbiwgaW92LCBrZGF0YSwgbGVuKTsKKworCWlvdmVjX2lkeCA9IDA7CisJd2hpbGUgKGlvdmVjX2lkeCA8IHBpbm5lZF9saXN0LT5ucl9pb3ZlY3MpIHsKKwkJc3RydWN0IGRtYV9wYWdlX2xpc3QgKnBhZ2VfbGlzdDsKKworCQkvKiBza2lwIGFscmVhZHkgdXNlZC11cCBpb3ZlY3MgKi8KKwkJd2hpbGUgKCFpb3ZbaW92ZWNfaWR4XS5pb3ZfbGVuKQorCQkJaW92ZWNfaWR4Kys7CisKKwkJcGFnZV9saXN0ID0gJnBpbm5lZF9saXN0LT5wYWdlX2xpc3RbaW92ZWNfaWR4XTsKKworCQlpb3ZfYnl0ZV9vZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpaW92W2lvdmVjX2lkeF0uaW92X2Jhc2UgJiB+UEFHRV9NQVNLKTsKKwkJcGFnZV9pZHggPSAoKCh1bnNpZ25lZCBsb25nKWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICYgUEFHRV9NQVNLKQorCQkJIC0gKCh1bnNpZ25lZCBsb25nKXBhZ2VfbGlzdC0+YmFzZV9hZGRyZXNzICYgUEFHRV9NQVNLKSkgPj4gUEFHRV9TSElGVDsKKworCQkvKiBicmVhayB1cCBjb3BpZXMgdG8gbm90IGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKwkJd2hpbGUgKGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pIHsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIFBBR0VfU0laRSAtIGlvdl9ieXRlX29mZnNldCwgbGVuKTsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIGNvcHksIGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pOworCisJCQlkbWFfY29va2llID0gZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcoY2hhbiwKKwkJCQkJcGFnZV9saXN0LT5wYWdlc1twYWdlX2lkeF0sCisJCQkJCWlvdl9ieXRlX29mZnNldCwKKwkJCQkJa2RhdGEsCisJCQkJCWNvcHkpOworCisJCQlsZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9sZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICs9IGNvcHk7CisKKwkJCWlmICghbGVuKQorCQkJCXJldHVybiBkbWFfY29va2llOworCisJCQlrZGF0YSArPSBjb3B5OworCQkJaW92X2J5dGVfb2Zmc2V0ID0gMDsKKwkJCXBhZ2VfaWR4Kys7CisJCX0KKwkJaW92ZWNfaWR4Kys7CisJfQorCisJLyogcmVhbGx5IGJhZCBpZiB3ZSBldmVyIHJ1biBvdXQgb2YgaW92ZWNzICovCisJQlVHKCk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK2RtYV9jb29raWVfdCBkbWFfbWVtY3B5X3BnX3RvX2lvdmVjKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IGlvdmVjICppb3YsCisJc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqcGlubmVkX2xpc3QsIHN0cnVjdCBwYWdlICpwYWdlLAorCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBsZW4pCit7CisJaW50IGlvdl9ieXRlX29mZnNldDsKKwlpbnQgY29weTsKKwlkbWFfY29va2llX3QgZG1hX2Nvb2tpZSA9IDA7CisJaW50IGlvdmVjX2lkeDsKKwlpbnQgcGFnZV9pZHg7CisJaW50IGVycjsKKworCS8qIHRoaXMgbmVlZHMgYXMteWV0LXVuaW1wbGVtZW50ZWQgYnVmLXRvLWJ1ZmYsIHNvIHB1bnQuICovCisJLyogVE9ETzogdXNlIGRtYSBmb3IgdGhpcyAqLworCWlmICghY2hhbiB8fCAhcGlubmVkX2xpc3QpIHsKKwkJdTggKnZhZGRyID0ga21hcChwYWdlKTsKKwkJZXJyID0gbWVtY3B5X3RvaW92ZWMoaW92LCB2YWRkciArIG9mZnNldCwgbGVuKTsKKwkJa3VubWFwKHBhZ2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlvdmVjX2lkeCA9IDA7CisJd2hpbGUgKGlvdmVjX2lkeCA8IHBpbm5lZF9saXN0LT5ucl9pb3ZlY3MpIHsKKwkJc3RydWN0IGRtYV9wYWdlX2xpc3QgKnBhZ2VfbGlzdDsKKworCQkvKiBza2lwIGFscmVhZHkgdXNlZC11cCBpb3ZlY3MgKi8KKwkJd2hpbGUgKCFpb3ZbaW92ZWNfaWR4XS5pb3ZfbGVuKQorCQkJaW92ZWNfaWR4Kys7CisKKwkJcGFnZV9saXN0ID0gJnBpbm5lZF9saXN0LT5wYWdlX2xpc3RbaW92ZWNfaWR4XTsKKworCQlpb3ZfYnl0ZV9vZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpaW92W2lvdmVjX2lkeF0uaW92X2Jhc2UgJiB+UEFHRV9NQVNLKTsKKwkJcGFnZV9pZHggPSAoKCh1bnNpZ25lZCBsb25nKWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICYgUEFHRV9NQVNLKQorCQkJIC0gKCh1bnNpZ25lZCBsb25nKXBhZ2VfbGlzdC0+YmFzZV9hZGRyZXNzICYgUEFHRV9NQVNLKSkgPj4gUEFHRV9TSElGVDsKKworCQkvKiBicmVhayB1cCBjb3BpZXMgdG8gbm90IGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKwkJd2hpbGUgKGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pIHsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIFBBR0VfU0laRSAtIGlvdl9ieXRlX29mZnNldCwgbGVuKTsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIGNvcHksIGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pOworCisJCQlkbWFfY29va2llID0gZG1hX2FzeW5jX21lbWNweV9wZ190b19wZyhjaGFuLAorCQkJCQlwYWdlX2xpc3QtPnBhZ2VzW3BhZ2VfaWR4XSwKKwkJCQkJaW92X2J5dGVfb2Zmc2V0LAorCQkJCQlwYWdlLAorCQkJCQlvZmZzZXQsCisJCQkJCWNvcHkpOworCisJCQlsZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9sZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICs9IGNvcHk7CisKKwkJCWlmICghbGVuKQorCQkJCXJldHVybiBkbWFfY29va2llOworCisJCQlvZmZzZXQgKz0gY29weTsKKwkJCWlvdl9ieXRlX29mZnNldCA9IDA7CisJCQlwYWdlX2lkeCsrOworCQl9CisJCWlvdmVjX2lkeCsrOworCX0KKworCS8qIHJlYWxseSBiYWQgaWYgd2UgZXZlciBydW4gb3V0IG9mIGlvdmVjcyAqLworCUJVRygpOworCXJldHVybiAtRUZBVUxUOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZwppbmRleCBhZmM2MTJiLi5iYTJkNjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZwpAQCAtMjksNiArMjksMTEgQEAKIAkgIGxpYmlidmVyYnMsIGxpYmliY20gYW5kIGEgaGFyZHdhcmUgZHJpdmVyIGxpYnJhcnkgZnJvbQogCSAgPGh0dHA6Ly93d3cub3BlbmliLm9yZz4uCiAKK2NvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlMKKwlib29sCisJZGVwZW5kcyBvbiBJTkZJTklCQU5EICYmIElORVQKKwlkZWZhdWx0IHkKKwogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUKaW5kZXggZWMzMzUzZi4uNjhlNzNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUKQEAgLTEsNSArMSw3IEBACitpbmZpbmliYW5kLSQoQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUykJOj0gaWJfYWRkci5vIHJkbWFfY20ubworCiBvYmotJChDT05GSUdfSU5GSU5JQkFORCkgKz0JCWliX2NvcmUubyBpYl9tYWQubyBpYl9zYS5vIFwKLQkJCQkJaWJfY20ubworCQkJCQlpYl9jbS5vICQoaW5maW5pYmFuZC15KQogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQpICs9CWliX3VtYWQubwogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MpICs9CWliX3V2ZXJicy5vIGliX3VjbS5vCiAKQEAgLTEyLDggKzE0LDEzIEBACiAKIGliX2NtLXkgOj0JCQljbS5vCiAKK3JkbWFfY20teSA6PQkJCWNtYS5vCisKK2liX2FkZHIteSA6PQkJCWFkZHIubworCiBpYl91bWFkLXkgOj0JCQl1c2VyX21hZC5vCiAKIGliX3VjbS15IDo9CQkJdWNtLm8KIAotaWJfdXZlcmJzLXkgOj0JCQl1dmVyYnNfbWFpbi5vIHV2ZXJic19jbWQubyB1dmVyYnNfbWVtLm8KK2liX3V2ZXJicy15IDo9CQkJdXZlcmJzX21haW4ubyB1dmVyYnNfY21kLm8gdXZlcmJzX21lbS5vIFwKKwkJCQl1dmVyYnNfbWFyc2hhbGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOTRiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVm9sdGFpcmUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LCBOZXR3b3JrIEFwcGxpYW5jZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUsIE1lbGxhbm94IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIFNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzOgorICoKKyAqIDEpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkNvbW1vbiBQdWJsaWMgTGljZW5zZSAxLjAiIGEgY29weSBvZiB3aGljaCBpcworICogICAgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9jcGwucGhwLgorICoKKyAqIDIpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIlRoZSBCU0QgTGljZW5zZSIgYSBjb3B5IG9mIHdoaWNoIGlzCisgKiAgICBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4KKyAqCisgKiAzKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIiIGEKKyAqICAgIGNvcHkgb2Ygd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHAuCisgKgorICogTGljZW5zZWUgaGFzIHRoZSByaWdodCB0byBjaG9vc2Ugb25lIG9mIHRoZSBhYm92ZSBsaWNlbnNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCBvbmUgb2YgdGhlIGxpY2Vuc2Ugbm90aWNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIG9uZSBvZiB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxyZG1hL2liX2FkZHIuaD4KKworTU9EVUxFX0FVVEhPUigiU2VhbiBIZWZ0eSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJQiBBZGRyZXNzIFRyYW5zbGF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKK3N0cnVjdCBhZGRyX3JlcSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBzb2NrYWRkciBzcmNfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHIgZHN0X2FkZHI7CisJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHI7CisJdm9pZCAqY29udGV4dDsKKwl2b2lkICgqY2FsbGJhY2spKGludCBzdGF0dXMsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsCisJCQkgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIsIHZvaWQgKmNvbnRleHQpOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgc3RhdHVzOworfTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc19yZXEodm9pZCAqZGF0YSk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHJlcV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1dPUksod29yaywgcHJvY2Vzc19yZXEsIE5VTEwpOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphZGRyX3dxOworCitzdGF0aWMgaW50IGNvcHlfYWRkcihzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgdW5zaWduZWQgY2hhciAqZHN0X2Rldl9hZGRyKQoreworCXN3aXRjaCAoZGV2LT50eXBlKSB7CisJY2FzZSBBUlBIUkRfSU5GSU5JQkFORDoKKwkJZGV2X2FkZHItPmRldl90eXBlID0gSUJfTk9ERV9DQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCX0KKworCW1lbWNweShkZXZfYWRkci0+c3JjX2Rldl9hZGRyLCBkZXYtPmRldl9hZGRyLCBNQVhfQUREUl9MRU4pOworCW1lbWNweShkZXZfYWRkci0+YnJvYWRjYXN0LCBkZXYtPmJyb2FkY2FzdCwgTUFYX0FERFJfTEVOKTsKKwlpZiAoZHN0X2Rldl9hZGRyKQorCQltZW1jcHkoZGV2X2FkZHItPmRzdF9kZXZfYWRkciwgZHN0X2Rldl9hZGRyLCBNQVhfQUREUl9MRU4pOworCXJldHVybiAwOworfQorCitpbnQgcmRtYV90cmFuc2xhdGVfaXAoc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1MzIgaXAgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRyKS0+c2luX2FkZHIuc19hZGRyOworCWludCByZXQ7CisKKwlkZXYgPSBpcF9kZXZfZmluZChpcCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCXJldCA9IGNvcHlfYWRkcihkZXZfYWRkciwgZGV2LCBOVUxMKTsKKwlkZXZfcHV0KGRldik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV90cmFuc2xhdGVfaXApOworCitzdGF0aWMgdm9pZCBzZXRfdGltZW91dCh1bnNpZ25lZCBsb25nIHRpbWUpCit7CisJdW5zaWduZWQgbG9uZyBkZWxheTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJndvcmspOworCisJZGVsYXkgPSB0aW1lIC0gamlmZmllczsKKwlpZiAoKGxvbmcpZGVsYXkgPD0gMCkKKwkJZGVsYXkgPSAxOworCisJcXVldWVfZGVsYXllZF93b3JrKGFkZHJfd3EsICZ3b3JrLCBkZWxheSk7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX3JlcShzdHJ1Y3QgYWRkcl9yZXEgKnJlcSkKK3sKKwlzdHJ1Y3QgYWRkcl9yZXEgKnRlbXBfcmVxOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHRlbXBfcmVxLCAmcmVxX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIocmVxLT50aW1lb3V0LCB0ZW1wX3JlcS0+dGltZW91dCkpCisJCQlicmVhazsKKwl9CisKKwlsaXN0X2FkZCgmcmVxLT5saXN0LCAmdGVtcF9yZXEtPmxpc3QpOworCisJaWYgKHJlcV9saXN0Lm5leHQgPT0gJnJlcS0+bGlzdCkKKwkJc2V0X3RpbWVvdXQocmVxLT50aW1lb3V0KTsKKwltdXRleF91bmxvY2soJmxvY2spOworfQorCitzdGF0aWMgdm9pZCBhZGRyX3NlbmRfYXJwKHN0cnVjdCBzb2NrYWRkcl9pbiAqZHN0X2luKQoreworCXN0cnVjdCBydGFibGUgKnJ0OworCXN0cnVjdCBmbG93aSBmbDsKKwl1MzIgZHN0X2lwID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CisKKwltZW1zZXQoJmZsLCAwLCBzaXplb2YgZmwpOworCWZsLm5sX3UuaXA0X3UuZGFkZHIgPSBkc3RfaXA7CisJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCAmZmwpKQorCQlyZXR1cm47CisKKwlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsIHJ0LT5ydF9nYXRld2F5LCBydC0+aWRldi0+ZGV2LAorCQkgcnQtPnJ0X3NyYywgTlVMTCwgcnQtPmlkZXYtPmRldi0+ZGV2X2FkZHIsIE5VTEwpOworCWlwX3J0X3B1dChydCk7Cit9CisKK3N0YXRpYyBpbnQgYWRkcl9yZXNvbHZlX3JlbW90ZShzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwKKwkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRzdF9pbiwKKwkJCSAgICAgICBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKK3sKKwl1MzIgc3JjX2lwID0gc3JjX2luLT5zaW5fYWRkci5zX2FkZHI7CisJdTMyIGRzdF9pcCA9IGRzdF9pbi0+c2luX2FkZHIuc19hZGRyOworCXN0cnVjdCBmbG93aSBmbDsKKwlzdHJ1Y3QgcnRhYmxlICpydDsKKwlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mIGZsKTsKKwlmbC5ubF91LmlwNF91LmRhZGRyID0gZHN0X2lwOworCWZsLm5sX3UuaXA0X3Uuc2FkZHIgPSBzcmNfaXA7CisJcmV0ID0gaXBfcm91dGVfb3V0cHV0X2tleSgmcnQsICZmbCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBJZiB0aGUgZGV2aWNlIGRvZXMgQVJQIGludGVybmFsbHksIHJldHVybiAnZG9uZScgKi8KKwlpZiAocnQtPmlkZXYtPmRldi0+ZmxhZ3MgJiBJRkZfTk9BUlApIHsKKwkJY29weV9hZGRyKGFkZHIsIHJ0LT5pZGV2LT5kZXYsIE5VTEwpOworCQlnb3RvIHB1dDsKKwl9CisKKwluZWlnaCA9IG5laWdoX2xvb2t1cCgmYXJwX3RibCwgJnJ0LT5ydF9nYXRld2F5LCBydC0+aWRldi0+ZGV2KTsKKwlpZiAoIW5laWdoKSB7CisJCXJldCA9IC1FTk9EQVRBOworCQlnb3RvIHB1dDsKKwl9CisKKwlpZiAoIShuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSkgeworCQlyZXQgPSAtRU5PREFUQTsKKwkJZ290byByZWxlYXNlOworCX0KKworCWlmICghc3JjX2lwKSB7CisJCXNyY19pbi0+c2luX2ZhbWlseSA9IGRzdF9pbi0+c2luX2ZhbWlseTsKKwkJc3JjX2luLT5zaW5fYWRkci5zX2FkZHIgPSBydC0+cnRfc3JjOworCX0KKworCXJldCA9IGNvcHlfYWRkcihhZGRyLCBuZWlnaC0+ZGV2LCBuZWlnaC0+aGEpOworcmVsZWFzZToKKwluZWlnaF9yZWxlYXNlKG5laWdoKTsKK3B1dDoKKwlpcF9ydF9wdXQocnQpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmVxKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFkZHJfcmVxICpyZXEsICp0ZW1wX3JlcTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwgKmRzdF9pbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRvbmVfbGlzdDsKKworCUlOSVRfTElTVF9IRUFEKCZkb25lX2xpc3QpOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdGVtcF9yZXEsICZyZXFfbGlzdCwgbGlzdCkgeworCQlpZiAocmVxLT5zdGF0dXMpIHsKKwkJCXNyY19pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnJlcS0+c3JjX2FkZHI7CisJCQlkc3RfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZyZXEtPmRzdF9hZGRyOworCQkJcmVxLT5zdGF0dXMgPSBhZGRyX3Jlc29sdmVfcmVtb3RlKHNyY19pbiwgZHN0X2luLAorCQkJCQkJCSAgcmVxLT5hZGRyKTsKKwkJfQorCQlpZiAocmVxLT5zdGF0dXMgJiYgdGltZV9hZnRlcihqaWZmaWVzLCByZXEtPnRpbWVvdXQpKQorCQkJcmVxLT5zdGF0dXMgPSAtRVRJTUVET1VUOworCQllbHNlIGlmIChyZXEtPnN0YXR1cyA9PSAtRU5PREFUQSkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZkb25lX2xpc3QpOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmcmVxX2xpc3QpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkocmVxX2xpc3QubmV4dCwgc3RydWN0IGFkZHJfcmVxLCBsaXN0KTsKKwkJc2V0X3RpbWVvdXQocmVxLT50aW1lb3V0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRlbXBfcmVxLCAmZG9uZV9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCQlyZXEtPmNhbGxiYWNrKHJlcS0+c3RhdHVzLCAmcmVxLT5zcmNfYWRkciwgcmVxLT5hZGRyLAorCQkJICAgICAgcmVxLT5jb250ZXh0KTsKKwkJa2ZyZWUocmVxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRkcl9yZXNvbHZlX2xvY2FsKHN0cnVjdCBzb2NrYWRkcl9pbiAqc3JjX2luLAorCQkJICAgICAgc3RydWN0IHNvY2thZGRyX2luICpkc3RfaW4sCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXUzMiBzcmNfaXAgPSBzcmNfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwl1MzIgZHN0X2lwID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CisJaW50IHJldDsKKworCWRldiA9IGlwX2Rldl9maW5kKGRzdF9pcCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCWlmIChaRVJPTkVUKHNyY19pcCkpIHsKKwkJc3JjX2luLT5zaW5fZmFtaWx5ID0gZHN0X2luLT5zaW5fZmFtaWx5OworCQlzcmNfaW4tPnNpbl9hZGRyLnNfYWRkciA9IGRzdF9pcDsKKwkJcmV0ID0gY29weV9hZGRyKGFkZHIsIGRldiwgZGV2LT5kZXZfYWRkcik7CisJfSBlbHNlIGlmIChMT09QQkFDSyhzcmNfaXApKSB7CisJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKilkc3RfaW4sIGFkZHIpOworCQlpZiAoIXJldCkKKwkJCW1lbWNweShhZGRyLT5kc3RfZGV2X2FkZHIsIGRldi0+ZGV2X2FkZHIsIE1BWF9BRERSX0xFTik7CisJfSBlbHNlIHsKKwkJcmV0ID0gcmRtYV90cmFuc2xhdGVfaXAoKHN0cnVjdCBzb2NrYWRkciAqKXNyY19pbiwgYWRkcik7CisJCWlmICghcmV0KQorCQkJbWVtY3B5KGFkZHItPmRzdF9kZXZfYWRkciwgZGV2LT5kZXZfYWRkciwgTUFYX0FERFJfTEVOKTsKKwl9CisKKwlkZXZfcHV0KGRldik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkbWFfcmVzb2x2ZV9pcChzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIsIGludCB0aW1lb3V0X21zLAorCQkgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLCBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJCSAgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIsIHZvaWQgKmNvbnRleHQpLAorCQkgICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwgKmRzdF9pbjsKKwlzdHJ1Y3QgYWRkcl9yZXEgKnJlcTsKKwlpbnQgcmV0ID0gMDsKKworCXJlcSA9IGttYWxsb2Moc2l6ZW9mICpyZXEsIEdGUF9LRVJORUwpOworCWlmICghcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQocmVxLCAwLCBzaXplb2YgKnJlcSk7CisKKwlpZiAoc3JjX2FkZHIpCisJCW1lbWNweSgmcmVxLT5zcmNfYWRkciwgc3JjX2FkZHIsIGlwX2FkZHJfc2l6ZShzcmNfYWRkcikpOworCW1lbWNweSgmcmVxLT5kc3RfYWRkciwgZHN0X2FkZHIsIGlwX2FkZHJfc2l6ZShkc3RfYWRkcikpOworCXJlcS0+YWRkciA9IGFkZHI7CisJcmVxLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCXJlcS0+Y29udGV4dCA9IGNvbnRleHQ7CisKKwlzcmNfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZyZXEtPnNyY19hZGRyOworCWRzdF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnJlcS0+ZHN0X2FkZHI7CisKKwlyZXEtPnN0YXR1cyA9IGFkZHJfcmVzb2x2ZV9sb2NhbChzcmNfaW4sIGRzdF9pbiwgYWRkcik7CisJaWYgKHJlcS0+c3RhdHVzID09IC1FQUREUk5PVEFWQUlMKQorCQlyZXEtPnN0YXR1cyA9IGFkZHJfcmVzb2x2ZV9yZW1vdGUoc3JjX2luLCBkc3RfaW4sIGFkZHIpOworCisJc3dpdGNoIChyZXEtPnN0YXR1cykgeworCWNhc2UgMDoKKwkJcmVxLT50aW1lb3V0ID0gamlmZmllczsKKwkJcXVldWVfcmVxKHJlcSk7CisJCWJyZWFrOworCWNhc2UgLUVOT0RBVEE6CisJCXJlcS0+dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykgKyBqaWZmaWVzOworCQlxdWV1ZV9yZXEocmVxKTsKKwkJYWRkcl9zZW5kX2FycChkc3RfaW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSByZXEtPnN0YXR1czsKKwkJa2ZyZWUocmVxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfcmVzb2x2ZV9pcCk7CisKK3ZvaWQgcmRtYV9hZGRyX2NhbmNlbChzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgYWRkcl9yZXEgKnJlcSwgKnRlbXBfcmVxOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdGVtcF9yZXEsICZyZXFfbGlzdCwgbGlzdCkgeworCQlpZiAocmVxLT5hZGRyID09IGFkZHIpIHsKKwkJCXJlcS0+c3RhdHVzID0gLUVDQU5DRUxFRDsKKwkJCXJlcS0+dGltZW91dCA9IGppZmZpZXM7CisJCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwkJCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZyZXFfbGlzdCk7CisJCQlzZXRfdGltZW91dChyZXEtPnRpbWVvdXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9hZGRyX2NhbmNlbCk7CisKK3N0YXRpYyBpbnQgYWRkcl9hcnBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBwYWNrZXRfdHlwZSAqcGt0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCit7CisJc3RydWN0IGFycGhkciAqYXJwX2hkcjsKKworCWFycF9oZHIgPSAoc3RydWN0IGFycGhkciAqKSBza2ItPm5oLnJhdzsKKworCWlmIChhcnBfaGRyLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSB8fAorCSAgICBhcnBfaGRyLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVBMWSkpCisJCXNldF90aW1lb3V0KGppZmZpZXMpOworCisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYWRkcl9hcnAgPSB7CisJLnR5cGUgICAgICAgICAgID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApLAorCS5mdW5jICAgICAgICAgICA9IGFkZHJfYXJwX3JlY3YsCisJLmFmX3BhY2tldF9wcml2ID0gKHZvaWQqKSAxLAorfTsKKworc3RhdGljIGludCBhZGRyX2luaXQodm9pZCkKK3sKKwlhZGRyX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImliX2FkZHJfd3EiKTsKKwlpZiAoIWFkZHJfd3EpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2FkZF9wYWNrKCZhZGRyX2FycCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZHJfY2xlYW51cCh2b2lkKQoreworCWRldl9yZW1vdmVfcGFjaygmYWRkcl9hcnApOworCWRlc3Ryb3lfd29ya3F1ZXVlKGFkZHJfd3EpOworfQorCittb2R1bGVfaW5pdChhZGRyX2luaXQpOworbW9kdWxlX2V4aXQoYWRkcl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jCmluZGV4IDUwMzY0YzAuLmUwNWNhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYwpAQCAtMTkxLDYgKzE5MSwyNCBAQAogfQogRVhQT1JUX1NZTUJPTChpYl9maW5kX2NhY2hlZF9wa2V5KTsKIAoraW50IGliX2dldF9jYWNoZWRfbG1jKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKKwkJICAgICAgdTggICAgICAgICAgICAgICAgcG9ydF9udW0sCisJCSAgICAgIHU4ICAgICAgICAgICAgICAgICpsbWMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwb3J0X251bSA8IHN0YXJ0X3BvcnQoZGV2aWNlKSB8fCBwb3J0X251bSA+IGVuZF9wb3J0KGRldmljZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJmRldmljZS0+Y2FjaGUubG9jaywgZmxhZ3MpOworCSpsbWMgPSBkZXZpY2UtPmNhY2hlLmxtY19jYWNoZVtwb3J0X251bSAtIHN0YXJ0X3BvcnQoZGV2aWNlKV07CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlLT5jYWNoZS5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpYl9nZXRfY2FjaGVkX2xtYyk7CisKIHN0YXRpYyB2b2lkIGliX2NhY2hlX3VwZGF0ZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiAJCQkgICAgdTggICAgICAgICAgICAgICAgcG9ydCkKIHsKQEAgLTI1MSw2ICsyNjksOCBAQAogCWRldmljZS0+Y2FjaGUucGtleV9jYWNoZVtwb3J0IC0gc3RhcnRfcG9ydChkZXZpY2UpXSA9IHBrZXlfY2FjaGU7CiAJZGV2aWNlLT5jYWNoZS5naWRfY2FjaGUgW3BvcnQgLSBzdGFydF9wb3J0KGRldmljZSldID0gZ2lkX2NhY2hlOwogCisJZGV2aWNlLT5jYWNoZS5sbWNfY2FjaGVbcG9ydCAtIHN0YXJ0X3BvcnQoZGV2aWNlKV0gPSB0cHJvcHMtPmxtYzsKKwogCXdyaXRlX3VubG9ja19pcnEoJmRldmljZS0+Y2FjaGUubG9jayk7CiAKIAlrZnJlZShvbGRfcGtleV9jYWNoZSk7CkBAIC0zMDUsNyArMzI1LDEzIEBACiAJCWttYWxsb2Moc2l6ZW9mICpkZXZpY2UtPmNhY2hlLmdpZF9jYWNoZSAqCiAJCQkoZW5kX3BvcnQoZGV2aWNlKSAtIHN0YXJ0X3BvcnQoZGV2aWNlKSArIDEpLCBHRlBfS0VSTkVMKTsKIAotCWlmICghZGV2aWNlLT5jYWNoZS5wa2V5X2NhY2hlIHx8ICFkZXZpY2UtPmNhY2hlLmdpZF9jYWNoZSkgeworCWRldmljZS0+Y2FjaGUubG1jX2NhY2hlID0ga21hbGxvYyhzaXplb2YgKmRldmljZS0+Y2FjaGUubG1jX2NhY2hlICoKKwkJCQkJICAoZW5kX3BvcnQoZGV2aWNlKSAtCisJCQkJCSAgIHN0YXJ0X3BvcnQoZGV2aWNlKSArIDEpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCisJaWYgKCFkZXZpY2UtPmNhY2hlLnBrZXlfY2FjaGUgfHwgIWRldmljZS0+Y2FjaGUuZ2lkX2NhY2hlIHx8CisJICAgICFkZXZpY2UtPmNhY2hlLmxtY19jYWNoZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZG4ndCBhbGxvY2F0ZSBjYWNoZSAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZpY2UtPm5hbWUpOwogCQlnb3RvIGVycjsKQEAgLTMzMyw2ICszNTksNyBAQAogZXJyOgogCWtmcmVlKGRldmljZS0+Y2FjaGUucGtleV9jYWNoZSk7CiAJa2ZyZWUoZGV2aWNlLT5jYWNoZS5naWRfY2FjaGUpOworCWtmcmVlKGRldmljZS0+Y2FjaGUubG1jX2NhY2hlKTsKIH0KIAogc3RhdGljIHZvaWQgaWJfY2FjaGVfY2xlYW51cF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQpAQCAtMzQ5LDYgKzM3Niw3IEBACiAKIAlrZnJlZShkZXZpY2UtPmNhY2hlLnBrZXlfY2FjaGUpOwogCWtmcmVlKGRldmljZS0+Y2FjaGUuZ2lkX2NhY2hlKTsKKwlrZnJlZShkZXZpY2UtPmNhY2hlLmxtY19jYWNoZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaWJfY2xpZW50IGNhY2hlX2NsaWVudCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IDg2ZmVlNDMuLjQ1MGFkZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMzIsNyArMzIsNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKgotICogJElkOiBjbS5jIDI4MjEgMjAwNS0wNy0wOCAxNzowNzoyOFogc2Vhbi5oZWZ0eSAkCisgKiAkSWQ6IGNtLmMgNDMxMSAyMDA1LTEyLTA1IDE4OjQyOjAxWiBzZWFuLmhlZnR5ICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgpAQCAtMTMyLDYgKzEzMiw3IEBACiAJLyogdG9kbzogdXNlIGFsdGVybmF0ZSBwb3J0IG9uIHNlbmQgZmFpbHVyZSAqLwogCXN0cnVjdCBjbV9hdiBhdjsKIAlzdHJ1Y3QgY21fYXYgYWx0X2F2OworCXN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgKmNvbXBhcmVfZGF0YTsKIAogCXZvaWQgKnByaXZhdGVfZGF0YTsKIAlfX2JlNjQgdGlkOwpAQCAtMjUzLDIzICsyNTQsMTMgQEAKIAljbV9pZF9wcml2LT5wcml2YXRlX2RhdGFfbGVuID0gcHJpdmF0ZV9kYXRhX2xlbjsKIH0KIAotc3RhdGljIHZvaWQgY21fc2V0X2FoX2F0dHIoc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIsIHU4IHBvcnRfbnVtLAotCQkJICAgdTE2IGRsaWQsIHU4IHNsLCB1MTYgc3JjX3BhdGhfYml0cykKLXsKLQltZW1zZXQoYWhfYXR0ciwgMCwgc2l6ZW9mIGFoX2F0dHIpOwotCWFoX2F0dHItPmRsaWQgPSBkbGlkOwotCWFoX2F0dHItPnNsID0gc2w7Ci0JYWhfYXR0ci0+c3JjX3BhdGhfYml0cyA9IHNyY19wYXRoX2JpdHM7Ci0JYWhfYXR0ci0+cG9ydF9udW0gPSBwb3J0X251bTsKLX0KLQotc3RhdGljIHZvaWQgY21faW5pdF9hdl9mb3JfcmVzcG9uc2Uoc3RydWN0IGNtX3BvcnQgKnBvcnQsCi0JCQkJICAgIHN0cnVjdCBpYl93YyAqd2MsIHN0cnVjdCBjbV9hdiAqYXYpCitzdGF0aWMgdm9pZCBjbV9pbml0X2F2X2Zvcl9yZXNwb25zZShzdHJ1Y3QgY21fcG9ydCAqcG9ydCwgc3RydWN0IGliX3djICp3YywKKwkJCQkgICAgc3RydWN0IGliX2dyaCAqZ3JoLCBzdHJ1Y3QgY21fYXYgKmF2KQogewogCWF2LT5wb3J0ID0gcG9ydDsKIAlhdi0+cGtleV9pbmRleCA9IHdjLT5wa2V5X2luZGV4OwotCWNtX3NldF9haF9hdHRyKCZhdi0+YWhfYXR0ciwgcG9ydC0+cG9ydF9udW0sIHdjLT5zbGlkLAotCQkgICAgICAgd2MtPnNsLCB3Yy0+ZGxpZF9wYXRoX2JpdHMpOworCWliX2luaXRfYWhfZnJvbV93Yyhwb3J0LT5jbV9kZXYtPmRldmljZSwgcG9ydC0+cG9ydF9udW0sIHdjLAorCQkJICAgZ3JoLCAmYXYtPmFoX2F0dHIpOwogfQogCiBzdGF0aWMgaW50IGNtX2luaXRfYXZfYnlfcGF0aChzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnBhdGgsIHN0cnVjdCBjbV9hdiAqYXYpCkBAIC0yOTksOSArMjkwLDggQEAKIAkJcmV0dXJuIHJldDsKIAogCWF2LT5wb3J0ID0gcG9ydDsKLQljbV9zZXRfYWhfYXR0cigmYXYtPmFoX2F0dHIsIGF2LT5wb3J0LT5wb3J0X251bSwKLQkJICAgICAgIGJlMTZfdG9fY3B1KHBhdGgtPmRsaWQpLCBwYXRoLT5zbCwKLQkJICAgICAgIGJlMTZfdG9fY3B1KHBhdGgtPnNsaWQpICYgMHg3Rik7CisJaWJfaW5pdF9haF9mcm9tX3BhdGgoY21fZGV2LT5kZXZpY2UsIHBvcnQtPnBvcnRfbnVtLCBwYXRoLAorCQkJICAgICAmYXYtPmFoX2F0dHIpOwogCWF2LT5wYWNrZXRfbGlmZV90aW1lID0gcGF0aC0+cGFja2V0X2xpZmVfdGltZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM1Nyw2ICszNDcsNDEgQEAKIAlyZXR1cm4gY21faWRfcHJpdjsKIH0KIAorc3RhdGljIHZvaWQgY21fbWFza19jb3B5KHU4ICpkc3QsIHU4ICpzcmMsIHU4ICptYXNrKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IElCX0NNX0NPTVBBUkVfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKQorCQkoKHVuc2lnbmVkIGxvbmcgKikgZHN0KVtpXSA9ICgodW5zaWduZWQgbG9uZyAqKSBzcmMpW2ldICYKKwkJCQkJICAgICAoKHVuc2lnbmVkIGxvbmcgKikgbWFzaylbaV07Cit9CisKK3N0YXRpYyBpbnQgY21fY29tcGFyZV9kYXRhKHN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgKnNyY19kYXRhLAorCQkJICAgc3RydWN0IGliX2NtX2NvbXBhcmVfZGF0YSAqZHN0X2RhdGEpCit7CisJdTggc3JjW0lCX0NNX0NPTVBBUkVfU0laRV07CisJdTggZHN0W0lCX0NNX0NPTVBBUkVfU0laRV07CisKKwlpZiAoIXNyY19kYXRhIHx8ICFkc3RfZGF0YSkKKwkJcmV0dXJuIDA7CisKKwljbV9tYXNrX2NvcHkoc3JjLCBzcmNfZGF0YS0+ZGF0YSwgZHN0X2RhdGEtPm1hc2spOworCWNtX21hc2tfY29weShkc3QsIGRzdF9kYXRhLT5kYXRhLCBzcmNfZGF0YS0+bWFzayk7CisJcmV0dXJuIG1lbWNtcChzcmMsIGRzdCwgSUJfQ01fQ09NUEFSRV9TSVpFKTsKK30KKworc3RhdGljIGludCBjbV9jb21wYXJlX3ByaXZhdGVfZGF0YSh1OCAqcHJpdmF0ZV9kYXRhLAorCQkJCSAgIHN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgKmRzdF9kYXRhKQoreworCXU4IHNyY1tJQl9DTV9DT01QQVJFX1NJWkVdOworCisJaWYgKCFkc3RfZGF0YSkKKwkJcmV0dXJuIDA7CisKKwljbV9tYXNrX2NvcHkoc3JjLCBwcml2YXRlX2RhdGEsIGRzdF9kYXRhLT5tYXNrKTsKKwlyZXR1cm4gbWVtY21wKHNyYywgZHN0X2RhdGEtPmRhdGEsIElCX0NNX0NPTVBBUkVfU0laRSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqIGNtX2luc2VydF9saXN0ZW4oc3RydWN0IGNtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXYpCiB7CiAJc3RydWN0IHJiX25vZGUgKipsaW5rID0gJmNtLmxpc3Rlbl9zZXJ2aWNlX3RhYmxlLnJiX25vZGU7CkBAIC0zNjQsMTQgKzM4OSwxOCBAQAogCXN0cnVjdCBjbV9pZF9wcml2YXRlICpjdXJfY21faWRfcHJpdjsKIAlfX2JlNjQgc2VydmljZV9pZCA9IGNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQ7CiAJX19iZTY0IHNlcnZpY2VfbWFzayA9IGNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzazsKKwlpbnQgZGF0YV9jbXA7CiAKIAl3aGlsZSAoKmxpbmspIHsKIAkJcGFyZW50ID0gKmxpbms7CiAJCWN1cl9jbV9pZF9wcml2ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY21faWRfcHJpdmF0ZSwKIAkJCQkJICBzZXJ2aWNlX25vZGUpOworCQlkYXRhX2NtcCA9IGNtX2NvbXBhcmVfZGF0YShjbV9pZF9wcml2LT5jb21wYXJlX2RhdGEsCisJCQkJCSAgIGN1cl9jbV9pZF9wcml2LT5jb21wYXJlX2RhdGEpOwogCQlpZiAoKGN1cl9jbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgJiBzZXJ2aWNlX2lkKSA9PQogCQkgICAgKHNlcnZpY2VfbWFzayAmIGN1cl9jbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkKSAmJgotCQkgICAgKGNtX2lkX3ByaXYtPmlkLmRldmljZSA9PSBjdXJfY21faWRfcHJpdi0+aWQuZGV2aWNlKSkKKwkJICAgIChjbV9pZF9wcml2LT5pZC5kZXZpY2UgPT0gY3VyX2NtX2lkX3ByaXYtPmlkLmRldmljZSkgJiYKKwkJICAgICFkYXRhX2NtcCkKIAkJCXJldHVybiBjdXJfY21faWRfcHJpdjsKIAogCQlpZiAoY21faWRfcHJpdi0+aWQuZGV2aWNlIDwgY3VyX2NtX2lkX3ByaXYtPmlkLmRldmljZSkKQEAgLTM4MCw2ICs0MDksMTAgQEAKIAkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfcmlnaHQ7CiAJCWVsc2UgaWYgKHNlcnZpY2VfaWQgPCBjdXJfY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCkKIAkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoc2VydmljZV9pZCA+IGN1cl9jbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkKQorCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsKKwkJZWxzZSBpZiAoZGF0YV9jbXAgPCAwKQorCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwogCQllbHNlCiAJCQlsaW5rID0gJigqbGluayktPnJiX3JpZ2h0OwogCX0KQEAgLTM4OSwxNiArNDIyLDIwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqIGNtX2ZpbmRfbGlzdGVuKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKLQkJCQkJICAgICBfX2JlNjQgc2VydmljZV9pZCkKKwkJCQkJICAgICBfX2JlNjQgc2VydmljZV9pZCwKKwkJCQkJICAgICB1OCAqcHJpdmF0ZV9kYXRhKQogewogCXN0cnVjdCByYl9ub2RlICpub2RlID0gY20ubGlzdGVuX3NlcnZpY2VfdGFibGUucmJfbm9kZTsKIAlzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqY21faWRfcHJpdjsKKwlpbnQgZGF0YV9jbXA7CiAKIAl3aGlsZSAobm9kZSkgewogCQljbV9pZF9wcml2ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGNtX2lkX3ByaXZhdGUsIHNlcnZpY2Vfbm9kZSk7CisJCWRhdGFfY21wID0gY21fY29tcGFyZV9wcml2YXRlX2RhdGEocHJpdmF0ZV9kYXRhLAorCQkJCQkJICAgY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhKTsKIAkJaWYgKChjbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgJiBzZXJ2aWNlX2lkKSA9PQogCQkgICAgIGNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQgJiYKLQkJICAgIChjbV9pZF9wcml2LT5pZC5kZXZpY2UgPT0gZGV2aWNlKSkKKwkJICAgIChjbV9pZF9wcml2LT5pZC5kZXZpY2UgPT0gZGV2aWNlKSAmJiAhZGF0YV9jbXApCiAJCQlyZXR1cm4gY21faWRfcHJpdjsKIAogCQlpZiAoZGV2aWNlIDwgY21faWRfcHJpdi0+aWQuZGV2aWNlKQpAQCAtNDA3LDYgKzQ0NCwxMCBAQAogCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OwogCQllbHNlIGlmIChzZXJ2aWNlX2lkIDwgY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCkKIAkJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OworCQllbHNlIGlmIChzZXJ2aWNlX2lkID4gY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCkKKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwkJZWxzZSBpZiAoZGF0YV9jbXAgPCAwKQorCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CiAJCWVsc2UKIAkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKIAl9CkBAIC03MzAsMTUgKzc3MSwxNCBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNtX2lkX3ByaXYtPmNvbXApOwogCXdoaWxlICgod29yayA9IGNtX2RlcXVldWVfd29yayhjbV9pZF9wcml2KSkgIT0gTlVMTCkKIAkJY21fZnJlZV93b3JrKHdvcmspOwotCWlmIChjbV9pZF9wcml2LT5wcml2YXRlX2RhdGEgJiYgY21faWRfcHJpdi0+cHJpdmF0ZV9kYXRhX2xlbikKLQkJa2ZyZWUoY21faWRfcHJpdi0+cHJpdmF0ZV9kYXRhKTsKKwlrZnJlZShjbV9pZF9wcml2LT5jb21wYXJlX2RhdGEpOworCWtmcmVlKGNtX2lkX3ByaXYtPnByaXZhdGVfZGF0YSk7CiAJa2ZyZWUoY21faWRfcHJpdik7CiB9CiBFWFBPUlRfU1lNQk9MKGliX2Rlc3Ryb3lfY21faWQpOwogCi1pbnQgaWJfY21fbGlzdGVuKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsCi0JCSBfX2JlNjQgc2VydmljZV9pZCwKLQkJIF9fYmU2NCBzZXJ2aWNlX21hc2spCitpbnQgaWJfY21fbGlzdGVuKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsIF9fYmU2NCBzZXJ2aWNlX2lkLCBfX2JlNjQgc2VydmljZV9tYXNrLAorCQkgc3RydWN0IGliX2NtX2NvbXBhcmVfZGF0YSAqY29tcGFyZV9kYXRhKQogewogCXN0cnVjdCBjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2LCAqY3VyX2NtX2lkX3ByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc1Miw3ICs3OTIsMTkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljbV9pZF9wcml2ID0gY29udGFpbmVyX29mKGNtX2lkLCBzdHJ1Y3QgY21faWRfcHJpdmF0ZSwgaWQpOwotCUJVR19PTihjbV9pZC0+c3RhdGUgIT0gSUJfQ01fSURMRSk7CisJaWYgKGNtX2lkLT5zdGF0ZSAhPSBJQl9DTV9JRExFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb21wYXJlX2RhdGEpIHsKKwkJY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhID0ga3phbGxvYyhzaXplb2YgKmNvbXBhcmVfZGF0YSwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNtX2lkX3ByaXYtPmNvbXBhcmVfZGF0YSkKKwkJCXJldHVybiAtRU5PTUVNOworCQljbV9tYXNrX2NvcHkoY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhLT5kYXRhLAorCQkJICAgICBjb21wYXJlX2RhdGEtPmRhdGEsIGNvbXBhcmVfZGF0YS0+bWFzayk7CisJCW1lbWNweShjbV9pZF9wcml2LT5jb21wYXJlX2RhdGEtPm1hc2ssIGNvbXBhcmVfZGF0YS0+bWFzaywKKwkJICAgICAgIElCX0NNX0NPTVBBUkVfU0laRSk7CisJfQogCiAJY21faWQtPnN0YXRlID0gSUJfQ01fTElTVEVOOwogCkBAIC03NjksNiArODIxLDggQEAKIAogCWlmIChjdXJfY21faWRfcHJpdikgewogCQljbV9pZC0+c3RhdGUgPSBJQl9DTV9JRExFOworCQlrZnJlZShjbV9pZF9wcml2LT5jb21wYXJlX2RhdGEpOworCQljbV9pZF9wcml2LT5jb21wYXJlX2RhdGEgPSBOVUxMOwogCQlyZXQgPSAtRUJVU1k7CiAJfQogCXJldHVybiByZXQ7CkBAIC0xMjQxLDcgKzEyOTUsOCBAQAogCiAJLyogRmluZCBtYXRjaGluZyBsaXN0ZW4gcmVxdWVzdC4gKi8KIAlsaXN0ZW5fY21faWRfcHJpdiA9IGNtX2ZpbmRfbGlzdGVuKGNtX2lkX3ByaXYtPmlkLmRldmljZSwKLQkJCQkJICAgcmVxX21zZy0+c2VydmljZV9pZCk7CisJCQkJCSAgIHJlcV9tc2ctPnNlcnZpY2VfaWQsCisJCQkJCSAgIHJlcV9tc2ctPnByaXZhdGVfZGF0YSk7CiAJaWYgKCFsaXN0ZW5fY21faWRfcHJpdikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbS5sb2NrLCBmbGFncyk7CiAJCWNtX2lzc3VlX3Jlaih3b3JrLT5wb3J0LCB3b3JrLT5tYWRfcmVjdl93YywKQEAgLTEyNzYsNiArMTMzMSw3IEBACiAJY21faWRfcHJpdiA9IGNvbnRhaW5lcl9vZihjbV9pZCwgc3RydWN0IGNtX2lkX3ByaXZhdGUsIGlkKTsKIAljbV9pZF9wcml2LT5pZC5yZW1vdGVfaWQgPSByZXFfbXNnLT5sb2NhbF9jb21tX2lkOwogCWNtX2luaXRfYXZfZm9yX3Jlc3BvbnNlKHdvcmstPnBvcnQsIHdvcmstPm1hZF9yZWN2X3djLT53YywKKwkJCQl3b3JrLT5tYWRfcmVjdl93Yy0+cmVjdl9idWYuZ3JoLAogCQkJCSZjbV9pZF9wcml2LT5hdik7CiAJY21faWRfcHJpdi0+dGltZXdhaXRfaW5mbyA9IGNtX2NyZWF0ZV90aW1ld2FpdF9pbmZvKGNtX2lkX3ByaXYtPgogCQkJCQkJCSAgICBpZC5sb2NhbF9pZCk7CkBAIC0yNTQ5LDcgKzI2MDUsNyBAQAogCWNtX2Zvcm1hdF9tYWRfaGRyKCZzaWRyX3JlcV9tc2ctPmhkciwgQ01fU0lEUl9SRVFfQVRUUl9JRCwKIAkJCSAgY21fZm9ybV90aWQoY21faWRfcHJpdiwgQ01fTVNHX1NFUVVFTkNFX1NJRFIpKTsKIAlzaWRyX3JlcV9tc2ctPnJlcXVlc3RfaWQgPSBjbV9pZF9wcml2LT5pZC5sb2NhbF9pZDsKLQlzaWRyX3JlcV9tc2ctPnBrZXkgPSBjcHVfdG9fYmUxNihwYXJhbS0+cGtleSk7CisJc2lkcl9yZXFfbXNnLT5wa2V5ID0gY3B1X3RvX2JlMTYocGFyYW0tPnBhdGgtPnBrZXkpOwogCXNpZHJfcmVxX21zZy0+c2VydmljZV9pZCA9IHBhcmFtLT5zZXJ2aWNlX2lkOwogCiAJaWYgKHBhcmFtLT5wcml2YXRlX2RhdGEgJiYgcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4pCkBAIC0yNjQxLDYgKzI2OTcsNyBAQAogCWNtX2lkX3ByaXYtPmF2LmRnaWQuZ2xvYmFsLnN1Ym5ldF9wcmVmaXggPSBjcHVfdG9fYmU2NCh3Yy0+c2xpZCk7CiAJY21faWRfcHJpdi0+YXYuZGdpZC5nbG9iYWwuaW50ZXJmYWNlX2lkID0gMDsKIAljbV9pbml0X2F2X2Zvcl9yZXNwb25zZSh3b3JrLT5wb3J0LCB3b3JrLT5tYWRfcmVjdl93Yy0+d2MsCisJCQkJd29yay0+bWFkX3JlY3Zfd2MtPnJlY3ZfYnVmLmdyaCwKIAkJCQkmY21faWRfcHJpdi0+YXYpOwogCWNtX2lkX3ByaXYtPmlkLnJlbW90ZV9pZCA9IHNpZHJfcmVxX21zZy0+cmVxdWVzdF9pZDsKIAljbV9pZF9wcml2LT5pZC5zdGF0ZSA9IElCX0NNX1NJRFJfUkVRX1JDVkQ7CkBAIC0yNjU0LDcgKzI3MTEsOCBAQAogCQlnb3RvIG91dDsgLyogRHVwbGljYXRlIG1lc3NhZ2UuICovCiAJfQogCWN1cl9jbV9pZF9wcml2ID0gY21fZmluZF9saXN0ZW4oY21faWQtPmRldmljZSwKLQkJCQkJc2lkcl9yZXFfbXNnLT5zZXJ2aWNlX2lkKTsKKwkJCQkJc2lkcl9yZXFfbXNnLT5zZXJ2aWNlX2lkLAorCQkJCQlzaWRyX3JlcV9tc2ctPnByaXZhdGVfZGF0YSk7CiAJaWYgKCFjdXJfY21faWRfcHJpdikgewogCQlyYl9lcmFzZSgmY21faWRfcHJpdi0+c2lkcl9pZF9ub2RlLCAmY20ucmVtb3RlX3NpZHJfdGFibGUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbS5sb2NrLCBmbGFncyk7CkBAIC0zMjkxLDcgKzMzNDksNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaWJfY21fY2xlYW51cCh2b2lkKQogewotCWZsdXNoX3dvcmtxdWV1ZShjbS53cSk7CiAJZGVzdHJveV93b3JrcXVldWUoY20ud3EpOwogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZjbV9jbGllbnQpOwogCWlkcl9kZXN0cm95KCZjbS5sb2NhbF9pZF90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjgzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpAQCAtMCwwICsxLDE5MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVm9sdGFpcmUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LCBOZXR3b3JrIEFwcGxpYW5jZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUsIE1lbGxhbm94IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZXM6CisgKgorICogMSkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiQ29tbW9uIFB1YmxpYyBMaWNlbnNlIDEuMCIgYSBjb3B5IG9mIHdoaWNoIGlzCisgKiAgICBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2NwbC5waHAuCisgKgorICogMikgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiVGhlIEJTRCBMaWNlbnNlIiBhIGNvcHkgb2Ygd2hpY2ggaXMKKyAqICAgIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwLgorICoKKyAqIDMpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiIgYQorICogICAgY29weSBvZiB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocC4KKyAqCisgKiBMaWNlbnNlZSBoYXMgdGhlIHJpZ2h0IHRvIGNob29zZSBvbmUgb2YgdGhlIGFib3ZlIGxpY2Vuc2VzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIG9uZSBvZiB0aGUgbGljZW5zZSBub3RpY2VzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgb25lIG9mIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKworI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbV9pYi5oPgorI2luY2x1ZGUgPHJkbWEvaWJfY2FjaGUuaD4KKyNpbmNsdWRlIDxyZG1hL2liX2NtLmg+CisjaW5jbHVkZSA8cmRtYS9pYl9zYS5oPgorCitNT0RVTEVfQVVUSE9SKCJTZWFuIEhlZnR5Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgUkRNQSBDTSBBZ2VudCIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCisjZGVmaW5lIENNQV9DTV9SRVNQT05TRV9USU1FT1VUIDIwCisjZGVmaW5lIENNQV9NQVhfQ01fUkVUUklFUyAzCisKK3N0YXRpYyB2b2lkIGNtYV9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgdm9pZCBjbWFfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworCitzdGF0aWMgc3RydWN0IGliX2NsaWVudCBjbWFfY2xpZW50ID0geworCS5uYW1lICAgPSAiY21hIiwKKwkuYWRkICAgID0gY21hX2FkZF9vbmUsCisJLnJlbW92ZSA9IGNtYV9yZW1vdmVfb25lCit9OworCitzdGF0aWMgTElTVF9IRUFEKGRldl9saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQobGlzdGVuX2FueV9saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNtYV93cTsKK3N0YXRpYyBERUZJTkVfSURSKHNkcF9wcyk7CitzdGF0aWMgREVGSU5FX0lEUih0Y3BfcHMpOworCitzdHJ1Y3QgY21hX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBpYl9kZXZpY2UJKmRldmljZTsKKwlfX2JlNjQJCQlub2RlX2d1aWQ7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcDsKKwlhdG9taWNfdAkJcmVmY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZAlpZF9saXN0OworfTsKKworZW51bSBjbWFfc3RhdGUgeworCUNNQV9JRExFLAorCUNNQV9BRERSX1FVRVJZLAorCUNNQV9BRERSX1JFU09MVkVELAorCUNNQV9ST1VURV9RVUVSWSwKKwlDTUFfUk9VVEVfUkVTT0xWRUQsCisJQ01BX0NPTk5FQ1QsCisJQ01BX0RJU0NPTk5FQ1QsCisJQ01BX0FERFJfQk9VTkQsCisJQ01BX0xJU1RFTiwKKwlDTUFfREVWSUNFX1JFTU9WQUwsCisJQ01BX0RFU1RST1lJTkcKK307CisKK3N0cnVjdCByZG1hX2JpbmRfbGlzdCB7CisJc3RydWN0IGlkcgkJKnBzOworCXN0cnVjdCBobGlzdF9oZWFkCW93bmVyczsKKwl1bnNpZ25lZCBzaG9ydAkJcG9ydDsKK307CisKKy8qCisgKiBEZXZpY2UgcmVtb3ZhbCBjYW4gb2NjdXIgYXQgYW55dGltZSwgc28gd2UgbmVlZCBleHRyYSBoYW5kbGluZyB0bworICogc2VyaWFsaXplIG5vdGlmeWluZyB0aGUgdXNlciBvZiBkZXZpY2UgcmVtb3ZhbCB3aXRoIG90aGVyIGNhbGxiYWNrcy4KKyAqIFdlIGRvIHRoaXMgYnkgZGlzYWJsaW5nIHJlbW92YWwgbm90aWZpY2F0aW9uIHdoaWxlIGEgY2FsbGJhY2sgaXMgaW4gcHJvY2VzcywKKyAqIGFuZCByZXBvcnRpbmcgaXQgYWZ0ZXIgdGhlIGNhbGxiYWNrIGNvbXBsZXRlcy4KKyAqLworc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSB7CisJc3RydWN0IHJkbWFfY21faWQJaWQ7CisKKwlzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QJKmJpbmRfbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlub2RlOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Rlbl9saXN0OworCXN0cnVjdCBjbWFfZGV2aWNlCSpjbWFfZGV2OworCisJZW51bSBjbWFfc3RhdGUJCXN0YXRlOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcDsKKwlhdG9taWNfdAkJcmVmY291bnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9yZW1vdmU7CisJYXRvbWljX3QJCWRldl9yZW1vdmU7CisKKwlpbnQJCQliYWNrbG9nOworCWludAkJCXRpbWVvdXRfbXM7CisJc3RydWN0IGliX3NhX3F1ZXJ5CSpxdWVyeTsKKwlpbnQJCQlxdWVyeV9pZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBpYl9jbV9pZAkqaWI7CisJfSBjbV9pZDsKKworCXUzMgkJCXNlcV9udW07CisJdTMyCQkJcXBfbnVtOworCWVudW0gaWJfcXBfdHlwZQkJcXBfdHlwZTsKKwl1OAkJCXNycTsKK307CisKK3N0cnVjdCBjbWFfd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZQkqaWQ7CisJZW51bSBjbWFfc3RhdGUJCW9sZF9zdGF0ZTsKKwllbnVtIGNtYV9zdGF0ZQkJbmV3X3N0YXRlOworCXN0cnVjdCByZG1hX2NtX2V2ZW50CWV2ZW50OworfTsKKwordW5pb24gY21hX2lwX2FkZHIgeworCXN0cnVjdCBpbjZfYWRkciBpcDY7CisJc3RydWN0IHsKKwkJX191MzIgcGFkWzNdOworCQlfX3UzMiBhZGRyOworCX0gaXA0OworfTsKKworc3RydWN0IGNtYV9oZHIgeworCXU4IGNtYV92ZXJzaW9uOworCXU4IGlwX3ZlcnNpb247CS8qIElQIHZlcnNpb246IDc6NCAqLworCV9fdTE2IHBvcnQ7CisJdW5pb24gY21hX2lwX2FkZHIgc3JjX2FkZHI7CisJdW5pb24gY21hX2lwX2FkZHIgZHN0X2FkZHI7Cit9OworCitzdHJ1Y3Qgc2RwX2hoIHsKKwl1OCBic2RoWzE2XTsKKwl1OCBzZHBfdmVyc2lvbjsgLyogTWFqb3IgdmVyc2lvbjogNzo0ICovCisJdTggaXBfdmVyc2lvbjsJLyogSVAgdmVyc2lvbjogNzo0ICovCisJdTggc2RwX3NwZWNpZmljMVsxMF07CisJX191MTYgcG9ydDsKKwlfX3UxNiBzZHBfc3BlY2lmaWMyOworCXVuaW9uIGNtYV9pcF9hZGRyIHNyY19hZGRyOworCXVuaW9uIGNtYV9pcF9hZGRyIGRzdF9hZGRyOworfTsKKworc3RydWN0IHNkcF9oYWggeworCXU4IGJzZGhbMTZdOworCXU4IHNkcF92ZXJzaW9uOworfTsKKworI2RlZmluZSBDTUFfVkVSU0lPTiAweDAwCisjZGVmaW5lIFNEUF9NQUpfVkVSU0lPTiAweDIKKworc3RhdGljIGludCBjbWFfY29tcChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCBlbnVtIGNtYV9zdGF0ZSBjb21wKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpZF9wcml2LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gKGlkX3ByaXYtPnN0YXRlID09IGNvbXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtYV9jb21wX2V4Y2goc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSBlbnVtIGNtYV9zdGF0ZSBjb21wLCBlbnVtIGNtYV9zdGF0ZSBleGNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpZF9wcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKChyZXQgPSAoaWRfcHJpdi0+c3RhdGUgPT0gY29tcCkpKQorCQlpZF9wcml2LT5zdGF0ZSA9IGV4Y2g7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIGNtYV9zdGF0ZSBjbWFfZXhjaChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LAorCQkJICAgICAgIGVudW0gY21hX3N0YXRlIGV4Y2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwllbnVtIGNtYV9zdGF0ZSBvbGQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCW9sZCA9IGlkX3ByaXYtPnN0YXRlOworCWlkX3ByaXYtPnN0YXRlID0gZXhjaDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZF9wcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIG9sZDsKK30KKworc3RhdGljIGlubGluZSB1OCBjbWFfZ2V0X2lwX3ZlcihzdHJ1Y3QgY21hX2hkciAqaGRyKQoreworCXJldHVybiBoZHItPmlwX3ZlcnNpb24gPj4gNDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNtYV9zZXRfaXBfdmVyKHN0cnVjdCBjbWFfaGRyICpoZHIsIHU4IGlwX3ZlcikKK3sKKwloZHItPmlwX3ZlcnNpb24gPSAoaXBfdmVyIDw8IDQpIHwgKGhkci0+aXBfdmVyc2lvbiAmIDB4Rik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggc2RwX2dldF9tYWp2KHU4IHNkcF92ZXJzaW9uKQoreworCXJldHVybiBzZHBfdmVyc2lvbiA+PiA0OworfQorCitzdGF0aWMgaW5saW5lIHU4IHNkcF9nZXRfaXBfdmVyKHN0cnVjdCBzZHBfaGggKmhoKQoreworCXJldHVybiBoaC0+aXBfdmVyc2lvbiA+PiA0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2RwX3NldF9pcF92ZXIoc3RydWN0IHNkcF9oaCAqaGgsIHU4IGlwX3ZlcikKK3sKKwloaC0+aXBfdmVyc2lvbiA9IChpcF92ZXIgPDwgNCkgfCAoaGgtPmlwX3ZlcnNpb24gJiAweEYpOworfQorCitzdGF0aWMgdm9pZCBjbWFfYXR0YWNoX3RvX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LAorCQkJICAgICAgc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXYpCit7CisJYXRvbWljX2luYygmY21hX2Rldi0+cmVmY291bnQpOworCWlkX3ByaXYtPmNtYV9kZXYgPSBjbWFfZGV2OworCWlkX3ByaXYtPmlkLmRldmljZSA9IGNtYV9kZXYtPmRldmljZTsKKwlsaXN0X2FkZF90YWlsKCZpZF9wcml2LT5saXN0LCAmY21hX2Rldi0+aWRfbGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbWFfZGVyZWZfZGV2KHN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjbWFfZGV2LT5yZWZjb3VudCkpCisJCWNvbXBsZXRlKCZjbWFfZGV2LT5jb21wKTsKK30KKworc3RhdGljIHZvaWQgY21hX2RldGFjaF9mcm9tX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCWxpc3RfZGVsKCZpZF9wcml2LT5saXN0KTsKKwljbWFfZGVyZWZfZGV2KGlkX3ByaXYtPmNtYV9kZXYpOworCWlkX3ByaXYtPmNtYV9kZXYgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGNtYV9hY3F1aXJlX2liX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2OworCXVuaW9uIGliX2dpZCAqZ2lkOworCWludCByZXQgPSAtRU5PREVWOworCisJZ2lkID0gaWJfYWRkcl9nZXRfc2dpZCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkcik7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtYV9kZXYsICZkZXZfbGlzdCwgbGlzdCkgeworCQlyZXQgPSBpYl9maW5kX2NhY2hlZF9naWQoY21hX2Rldi0+ZGV2aWNlLCBnaWQsCisJCQkJCSAmaWRfcHJpdi0+aWQucG9ydF9udW0sIE5VTEwpOworCQlpZiAoIXJldCkgeworCQkJY21hX2F0dGFjaF90b19kZXYoaWRfcHJpdiwgY21hX2Rldik7CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21hX2FjcXVpcmVfZGV2KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3dpdGNoIChpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLmRldl90eXBlKSB7CisJY2FzZSBJQl9OT0RFX0NBOgorCQlyZXR1cm4gY21hX2FjcXVpcmVfaWJfZGV2KGlkX3ByaXYpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KK30KKworc3RhdGljIHZvaWQgY21hX2RlcmVmX2lkKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlkX3ByaXYtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJmlkX3ByaXYtPmNvbXApOworfQorCitzdGF0aWMgdm9pZCBjbWFfcmVsZWFzZV9yZW1vdmUoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaWRfcHJpdi0+ZGV2X3JlbW92ZSkpCisJCXdha2VfdXAoJmlkX3ByaXYtPndhaXRfcmVtb3ZlKTsKK30KKworc3RydWN0IHJkbWFfY21faWQgKnJkbWFfY3JlYXRlX2lkKHJkbWFfY21fZXZlbnRfaGFuZGxlciBldmVudF9oYW5kbGVyLAorCQkJCSAgdm9pZCAqY29udGV4dCwgZW51bSByZG1hX3BvcnRfc3BhY2UgcHMpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKworCWlkX3ByaXYgPSBremFsbG9jKHNpemVvZiAqaWRfcHJpdiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZF9wcml2KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlkX3ByaXYtPnN0YXRlID0gQ01BX0lETEU7CisJaWRfcHJpdi0+aWQuY29udGV4dCA9IGNvbnRleHQ7CisJaWRfcHJpdi0+aWQuZXZlbnRfaGFuZGxlciA9IGV2ZW50X2hhbmRsZXI7CisJaWRfcHJpdi0+aWQucHMgPSBwczsKKwlzcGluX2xvY2tfaW5pdCgmaWRfcHJpdi0+bG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZpZF9wcml2LT5jb21wKTsKKwlhdG9taWNfc2V0KCZpZF9wcml2LT5yZWZjb3VudCwgMSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaWRfcHJpdi0+d2FpdF9yZW1vdmUpOworCWF0b21pY19zZXQoJmlkX3ByaXYtPmRldl9yZW1vdmUsIDApOworCUlOSVRfTElTVF9IRUFEKCZpZF9wcml2LT5saXN0ZW5fbGlzdCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmaWRfcHJpdi0+c2VxX251bSwgc2l6ZW9mIGlkX3ByaXYtPnNlcV9udW0pOworCisJcmV0dXJuICZpZF9wcml2LT5pZDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9jcmVhdGVfaWQpOworCitzdGF0aWMgaW50IGNtYV9pbml0X2liX3FwKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsIHN0cnVjdCBpYl9xcCAqcXApCit7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKwlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisJaW50IHJldDsKKworCWRldl9hZGRyID0gJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHI7CisJcmV0ID0gaWJfZmluZF9jYWNoZWRfcGtleShpZF9wcml2LT5pZC5kZXZpY2UsIGlkX3ByaXYtPmlkLnBvcnRfbnVtLAorCQkJCSAgaWJfYWRkcl9nZXRfcGtleShkZXZfYWRkciksCisJCQkJICAmcXBfYXR0ci5wa2V5X2luZGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19JTklUOworCXFwX2F0dHIucXBfYWNjZXNzX2ZsYWdzID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFOworCXFwX2F0dHIucG9ydF9udW0gPSBpZF9wcml2LT5pZC5wb3J0X251bTsKKwlyZXR1cm4gaWJfbW9kaWZ5X3FwKHFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUgfCBJQl9RUF9BQ0NFU1NfRkxBR1MgfAorCQkJCQkgIElCX1FQX1BLRVlfSU5ERVggfCBJQl9RUF9QT1JUKTsKK30KKworaW50IHJkbWFfY3JlYXRlX3FwKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IGliX3BkICpwZCwKKwkJICAgc3RydWN0IGliX3FwX2luaXRfYXR0ciAqcXBfaW5pdF9hdHRyKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJc3RydWN0IGliX3FwICpxcDsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmIChpZC0+ZGV2aWNlICE9IHBkLT5kZXZpY2UpCisJCXJldHVybiAtRUlOVkFMOworCisJcXAgPSBpYl9jcmVhdGVfcXAocGQsIHFwX2luaXRfYXR0cik7CisJaWYgKElTX0VSUihxcCkpCisJCXJldHVybiBQVFJfRVJSKHFwKTsKKworCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7CisJY2FzZSBJQl9OT0RFX0NBOgorCQlyZXQgPSBjbWFfaW5pdF9pYl9xcChpZF9wcml2LCBxcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJaWQtPnFwID0gcXA7CisJaWRfcHJpdi0+cXBfbnVtID0gcXAtPnFwX251bTsKKwlpZF9wcml2LT5xcF90eXBlID0gcXAtPnFwX3R5cGU7CisJaWRfcHJpdi0+c3JxID0gKHFwLT5zcnEgIT0gTlVMTCk7CisJcmV0dXJuIDA7CitlcnI6CisJaWJfZGVzdHJveV9xcChxcCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9jcmVhdGVfcXApOworCit2b2lkIHJkbWFfZGVzdHJveV9xcChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpCit7CisJaWJfZGVzdHJveV9xcChpZC0+cXApOworfQorRVhQT1JUX1NZTUJPTChyZG1hX2Rlc3Ryb3lfcXApOworCitzdGF0aWMgaW50IGNtYV9tb2RpZnlfcXBfcnRyKHN0cnVjdCByZG1hX2NtX2lkICppZCkKK3sKKwlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOworCWludCBxcF9hdHRyX21hc2ssIHJldDsKKworCWlmICghaWQtPnFwKQorCQlyZXR1cm4gMDsKKworCS8qIE5lZWQgdG8gdXBkYXRlIFFQIGF0dHJpYnV0ZXMgZnJvbSBkZWZhdWx0IHZhbHVlcy4gKi8KKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX0lOSVQ7CisJcmV0ID0gcmRtYV9pbml0X3FwX2F0dHIoaWQsICZxcF9hdHRyLCAmcXBfYXR0cl9tYXNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaWJfbW9kaWZ5X3FwKGlkLT5xcCwgJnFwX2F0dHIsIHFwX2F0dHJfbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfUlRSOworCXJldCA9IHJkbWFfaW5pdF9xcF9hdHRyKGlkLCAmcXBfYXR0ciwgJnFwX2F0dHJfbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBpYl9tb2RpZnlfcXAoaWQtPnFwLCAmcXBfYXR0ciwgcXBfYXR0cl9tYXNrKTsKK30KKworc3RhdGljIGludCBjbWFfbW9kaWZ5X3FwX3J0cyhzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpCit7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKwlpbnQgcXBfYXR0cl9tYXNrLCByZXQ7CisKKwlpZiAoIWlkLT5xcCkKKwkJcmV0dXJuIDA7CisKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX1JUUzsKKwlyZXQgPSByZG1hX2luaXRfcXBfYXR0cihpZCwgJnFwX2F0dHIsICZxcF9hdHRyX21hc2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaWJfbW9kaWZ5X3FwKGlkLT5xcCwgJnFwX2F0dHIsIHFwX2F0dHJfbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgY21hX21vZGlmeV9xcF9lcnIoc3RydWN0IHJkbWFfY21faWQgKmlkKQoreworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisKKwlpZiAoIWlkLT5xcCkKKwkJcmV0dXJuIDA7CisKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX0VSUjsKKwlyZXR1cm4gaWJfbW9kaWZ5X3FwKGlkLT5xcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKK30KKworaW50IHJkbWFfaW5pdF9xcF9hdHRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IGliX3FwX2F0dHIgKnFwX2F0dHIsCisJCSAgICAgICBpbnQgKnFwX2F0dHJfbWFzaykKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJc3dpdGNoIChpZF9wcml2LT5pZC5kZXZpY2UtPm5vZGVfdHlwZSkgeworCWNhc2UgSUJfTk9ERV9DQToKKwkJcmV0ID0gaWJfY21faW5pdF9xcF9hdHRyKGlkX3ByaXYtPmNtX2lkLmliLCBxcF9hdHRyLAorCQkJCQkgcXBfYXR0cl9tYXNrKTsKKwkJaWYgKHFwX2F0dHItPnFwX3N0YXRlID09IElCX1FQU19SVFIpCisJCQlxcF9hdHRyLT5ycV9wc24gPSBpZF9wcml2LT5zZXFfbnVtOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PU1lTOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX2luaXRfcXBfYXR0cik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtYV96ZXJvX2FkZHIoc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXN0cnVjdCBpbjZfYWRkciAqaXA2OworCisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gWkVST05FVCgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRyKS0+c2luX2FkZHIuc19hZGRyKTsKKwllbHNlIHsKKwkJaXA2ID0gJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRyKS0+c2luNl9hZGRyOworCQlyZXR1cm4gKGlwNi0+czZfYWRkcjMyWzBdIHwgaXA2LT5zNl9hZGRyMzJbMV0gfAorCQkJaXA2LT5zNl9hZGRyMzJbM10gfCBpcDYtPnM2X2FkZHIzMls0XSkgPT0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtYV9sb29wYmFja19hZGRyKHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlyZXR1cm4gTE9PUEJBQ0soKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9hZGRyLnNfYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hbnlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJcmV0dXJuIGNtYV96ZXJvX2FkZHIoYWRkcikgfHwgY21hX2xvb3BiYWNrX2FkZHIoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hbnlfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJcmV0dXJuICEoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRyKS0+c2luX3BvcnQ7Cit9CisKK3N0YXRpYyBpbnQgY21hX2dldF9uZXRfaW5mbyh2b2lkICpoZHIsIGVudW0gcmRtYV9wb3J0X3NwYWNlIHBzLAorCQkJICAgIHU4ICppcF92ZXIsIF9fdTE2ICpwb3J0LAorCQkJICAgIHVuaW9uIGNtYV9pcF9hZGRyICoqc3JjLCB1bmlvbiBjbWFfaXBfYWRkciAqKmRzdCkKK3sKKwlzd2l0Y2ggKHBzKSB7CisJY2FzZSBSRE1BX1BTX1NEUDoKKwkJaWYgKHNkcF9nZXRfbWFqdigoKHN0cnVjdCBzZHBfaGggKikgaGRyKS0+c2RwX3ZlcnNpb24pICE9CisJCSAgICBTRFBfTUFKX1ZFUlNJT04pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkqaXBfdmVyCT0gc2RwX2dldF9pcF92ZXIoaGRyKTsKKwkJKnBvcnQJPSAoKHN0cnVjdCBzZHBfaGggKikgaGRyKS0+cG9ydDsKKwkJKnNyYwk9ICYoKHN0cnVjdCBzZHBfaGggKikgaGRyKS0+c3JjX2FkZHI7CisJCSpkc3QJPSAmKChzdHJ1Y3Qgc2RwX2hoICopIGhkciktPmRzdF9hZGRyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoKChzdHJ1Y3QgY21hX2hkciAqKSBoZHIpLT5jbWFfdmVyc2lvbiAhPSBDTUFfVkVSU0lPTikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCSppcF92ZXIJPSBjbWFfZ2V0X2lwX3ZlcihoZHIpOworCQkqcG9ydAk9ICgoc3RydWN0IGNtYV9oZHIgKikgaGRyKS0+cG9ydDsKKwkJKnNyYwk9ICYoKHN0cnVjdCBjbWFfaGRyICopIGhkciktPnNyY19hZGRyOworCQkqZHN0CT0gJigoc3RydWN0IGNtYV9oZHIgKikgaGRyKS0+ZHN0X2FkZHI7CisJCWJyZWFrOworCX0KKworCWlmICgqaXBfdmVyICE9IDQgJiYgKmlwX3ZlciAhPSA2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21hX3NhdmVfbmV0X2luZm8oc3RydWN0IHJkbWFfYWRkciAqYWRkciwKKwkJCSAgICAgIHN0cnVjdCByZG1hX2FkZHIgKmxpc3Rlbl9hZGRyLAorCQkJICAgICAgdTggaXBfdmVyLCBfX3UxNiBwb3J0LAorCQkJICAgICAgdW5pb24gY21hX2lwX2FkZHIgKnNyYywgdW5pb24gY21hX2lwX2FkZHIgKmRzdCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxpc3RlbjQsICppcDQ7CisJc3RydWN0IHNvY2thZGRyX2luNiAqbGlzdGVuNiwgKmlwNjsKKworCXN3aXRjaCAoaXBfdmVyKSB7CisJY2FzZSA0OgorCQlsaXN0ZW40ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmbGlzdGVuX2FkZHItPnNyY19hZGRyOworCQlpcDQgPSAoc3RydWN0IHNvY2thZGRyX2luICopICZhZGRyLT5zcmNfYWRkcjsKKwkJaXA0LT5zaW5fZmFtaWx5ID0gbGlzdGVuNC0+c2luX2ZhbWlseTsKKwkJaXA0LT5zaW5fYWRkci5zX2FkZHIgPSBkc3QtPmlwNC5hZGRyOworCQlpcDQtPnNpbl9wb3J0ID0gbGlzdGVuNC0+c2luX3BvcnQ7CisKKwkJaXA0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmYWRkci0+ZHN0X2FkZHI7CisJCWlwNC0+c2luX2ZhbWlseSA9IGxpc3RlbjQtPnNpbl9mYW1pbHk7CisJCWlwNC0+c2luX2FkZHIuc19hZGRyID0gc3JjLT5pcDQuYWRkcjsKKwkJaXA0LT5zaW5fcG9ydCA9IHBvcnQ7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJbGlzdGVuNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZsaXN0ZW5fYWRkci0+c3JjX2FkZHI7CisJCWlwNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZhZGRyLT5zcmNfYWRkcjsKKwkJaXA2LT5zaW42X2ZhbWlseSA9IGxpc3RlbjYtPnNpbjZfZmFtaWx5OworCQlpcDYtPnNpbjZfYWRkciA9IGRzdC0+aXA2OworCQlpcDYtPnNpbjZfcG9ydCA9IGxpc3RlbjYtPnNpbjZfcG9ydDsKKworCQlpcDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmYWRkci0+ZHN0X2FkZHI7CisJCWlwNi0+c2luNl9mYW1pbHkgPSBsaXN0ZW42LT5zaW42X2ZhbWlseTsKKwkJaXA2LT5zaW42X2FkZHIgPSBzcmMtPmlwNjsKKwkJaXA2LT5zaW42X3BvcnQgPSBwb3J0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtYV91c2VyX2RhdGFfb2Zmc2V0KGVudW0gcmRtYV9wb3J0X3NwYWNlIHBzKQoreworCXN3aXRjaCAocHMpIHsKKwljYXNlIFJETUFfUFNfU0RQOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBjbWFfaGRyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY21hX25vdGlmeV91c2VyKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgICBlbnVtIHJkbWFfY21fZXZlbnRfdHlwZSB0eXBlLCBpbnQgc3RhdHVzLAorCQkJICAgdm9pZCAqZGF0YSwgdTggZGF0YV9sZW4pCit7CisJc3RydWN0IHJkbWFfY21fZXZlbnQgZXZlbnQ7CisKKwlldmVudC5ldmVudCA9IHR5cGU7CisJZXZlbnQuc3RhdHVzID0gc3RhdHVzOworCWV2ZW50LnByaXZhdGVfZGF0YSA9IGRhdGE7CisJZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiA9IGRhdGFfbGVuOworCisJcmV0dXJuIGlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXIoJmlkX3ByaXYtPmlkLCAmZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBjbWFfY2FuY2VsX3JvdXRlKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3dpdGNoIChpZF9wcml2LT5pZC5kZXZpY2UtPm5vZGVfdHlwZSkgeworCWNhc2UgSUJfTk9ERV9DQToKKwkJaWYgKGlkX3ByaXYtPnF1ZXJ5KQorCQkJaWJfc2FfY2FuY2VsX3F1ZXJ5KGlkX3ByaXYtPnF1ZXJ5X2lkLCBpZF9wcml2LT5xdWVyeSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgY21hX2ludGVybmFsX2xpc3RlbihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXJldHVybiAoaWRfcHJpdi0+c3RhdGUgPT0gQ01BX0xJU1RFTikgJiYgaWRfcHJpdi0+Y21hX2RldiAmJgorCSAgICAgICBjbWFfYW55X2FkZHIoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBjbWFfZGVzdHJveV9saXN0ZW4oc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwljbWFfZXhjaChpZF9wcml2LCBDTUFfREVTVFJPWUlORyk7CisKKwlpZiAoaWRfcHJpdi0+Y21hX2RldikgeworCQlzd2l0Y2ggKGlkX3ByaXYtPmlkLmRldmljZS0+bm9kZV90eXBlKSB7CisJCWNhc2UgSUJfTk9ERV9DQToKKwkgCQlpZiAoaWRfcHJpdi0+Y21faWQuaWIgJiYgIUlTX0VSUihpZF9wcml2LT5jbV9pZC5pYikpCisJCQkJaWJfZGVzdHJveV9jbV9pZChpZF9wcml2LT5jbV9pZC5pYik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWNtYV9kZXRhY2hfZnJvbV9kZXYoaWRfcHJpdik7CisJfQorCWxpc3RfZGVsKCZpZF9wcml2LT5saXN0ZW5fbGlzdCk7CisKKwljbWFfZGVyZWZfaWQoaWRfcHJpdik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmaWRfcHJpdi0+Y29tcCk7CisKKwlrZnJlZShpZF9wcml2KTsKK30KKworc3RhdGljIHZvaWQgY21hX2NhbmNlbF9saXN0ZW5zKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqZGV2X2lkX3ByaXY7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2RlbCgmaWRfcHJpdi0+bGlzdCk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmlkX3ByaXYtPmxpc3Rlbl9saXN0KSkgeworCQlkZXZfaWRfcHJpdiA9IGxpc3RfZW50cnkoaWRfcHJpdi0+bGlzdGVuX2xpc3QubmV4dCwKKwkJCQkJIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGxpc3Rlbl9saXN0KTsKKwkJY21hX2Rlc3Ryb3lfbGlzdGVuKGRldl9pZF9wcml2KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KKworc3RhdGljIHZvaWQgY21hX2NhbmNlbF9vcGVyYXRpb24oc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCQkgZW51bSBjbWFfc3RhdGUgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgQ01BX0FERFJfUVVFUlk6CisJCXJkbWFfYWRkcl9jYW5jZWwoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIpOworCQlicmVhazsKKwljYXNlIENNQV9ST1VURV9RVUVSWToKKwkJY21hX2NhbmNlbF9yb3V0ZShpZF9wcml2KTsKKwkJYnJlYWs7CisJY2FzZSBDTUFfTElTVEVOOgorCQlpZiAoY21hX2FueV9hZGRyKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyKSAmJgorCQkgICAgIWlkX3ByaXYtPmNtYV9kZXYpCisJCQljbWFfY2FuY2VsX2xpc3RlbnMoaWRfcHJpdik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY21hX3JlbGVhc2VfcG9ydChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN0cnVjdCByZG1hX2JpbmRfbGlzdCAqYmluZF9saXN0ID0gaWRfcHJpdi0+YmluZF9saXN0OworCisJaWYgKCFiaW5kX2xpc3QpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmxvY2spOworCWhsaXN0X2RlbCgmaWRfcHJpdi0+bm9kZSk7CisJaWYgKGhsaXN0X2VtcHR5KCZiaW5kX2xpc3QtPm93bmVycykpIHsKKwkJaWRyX3JlbW92ZShiaW5kX2xpc3QtPnBzLCBiaW5kX2xpc3QtPnBvcnQpOworCQlrZnJlZShiaW5kX2xpc3QpOworCX0KKwltdXRleF91bmxvY2soJmxvY2spOworfQorCit2b2lkIHJkbWFfZGVzdHJveV9pZChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwllbnVtIGNtYV9zdGF0ZSBzdGF0ZTsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlzdGF0ZSA9IGNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVNUUk9ZSU5HKTsKKwljbWFfY2FuY2VsX29wZXJhdGlvbihpZF9wcml2LCBzdGF0ZSk7CisKKwlpZiAoaWRfcHJpdi0+Y21hX2RldikgeworCQlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgeworCQljYXNlIElCX05PREVfQ0E6CisJIAkJaWYgKGlkX3ByaXYtPmNtX2lkLmliICYmICFJU19FUlIoaWRfcHJpdi0+Y21faWQuaWIpKQorCQkJCWliX2Rlc3Ryb3lfY21faWQoaWRfcHJpdi0+Y21faWQuaWIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCSAgCW11dGV4X2xvY2soJmxvY2spOworCQljbWFfZGV0YWNoX2Zyb21fZGV2KGlkX3ByaXYpOworCQltdXRleF91bmxvY2soJmxvY2spOworCX0KKworCWNtYV9yZWxlYXNlX3BvcnQoaWRfcHJpdik7CisJY21hX2RlcmVmX2lkKGlkX3ByaXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlkX3ByaXYtPmNvbXApOworCisJa2ZyZWUoaWRfcHJpdi0+aWQucm91dGUucGF0aF9yZWMpOworCWtmcmVlKGlkX3ByaXYpOworfQorRVhQT1JUX1NZTUJPTChyZG1hX2Rlc3Ryb3lfaWQpOworCitzdGF0aWMgaW50IGNtYV9yZXBfcmVjdihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbWFfbW9kaWZ5X3FwX3J0cigmaWRfcHJpdi0+aWQpOworCWlmIChyZXQpCisJCWdvdG8gcmVqZWN0OworCisJcmV0ID0gY21hX21vZGlmeV9xcF9ydHMoJmlkX3ByaXYtPmlkKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlamVjdDsKKworCXJldCA9IGliX3NlbmRfY21fcnR1KGlkX3ByaXYtPmNtX2lkLmliLCBOVUxMLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlamVjdDsKKworCXJldHVybiAwOworcmVqZWN0OgorCWNtYV9tb2RpZnlfcXBfZXJyKCZpZF9wcml2LT5pZCk7CisJaWJfc2VuZF9jbV9yZWooaWRfcHJpdi0+Y21faWQuaWIsIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVELAorCQkgICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWFfdmVyaWZ5X3JlcChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCB2b2lkICpkYXRhKQoreworCWlmIChpZF9wcml2LT5pZC5wcyA9PSBSRE1BX1BTX1NEUCAmJgorCSAgICBzZHBfZ2V0X21hanYoKChzdHJ1Y3Qgc2RwX2hhaCAqKSBkYXRhKS0+c2RwX3ZlcnNpb24pICE9CisJICAgIFNEUF9NQUpfVkVSU0lPTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWFfcnR1X3JlY3Yoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY21hX21vZGlmeV9xcF9ydHMoJmlkX3ByaXYtPmlkKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlamVjdDsKKworCXJldHVybiAwOworcmVqZWN0OgorCWNtYV9tb2RpZnlfcXBfZXJyKCZpZF9wcml2LT5pZCk7CisJaWJfc2VuZF9jbV9yZWooaWRfcHJpdi0+Y21faWQuaWIsIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVELAorCQkgICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWFfaWJfaGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaWJfY21fZXZlbnQgKmliX2V2ZW50KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBjbV9pZC0+Y29udGV4dDsKKwllbnVtIHJkbWFfY21fZXZlbnRfdHlwZSBldmVudDsKKwl1OCBwcml2YXRlX2RhdGFfbGVuID0gMDsKKwlpbnQgcmV0ID0gMCwgc3RhdHVzID0gMDsKKworCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOworCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAoaWJfZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBJQl9DTV9SRVFfRVJST1I6CisJY2FzZSBJQl9DTV9SRVBfRVJST1I6CisJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9VTlJFQUNIQUJMRTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwkJYnJlYWs7CisJY2FzZSBJQl9DTV9SRVBfUkVDRUlWRUQ6CisJCXN0YXR1cyA9IGNtYV92ZXJpZnlfcmVwKGlkX3ByaXYsIGliX2V2ZW50LT5wcml2YXRlX2RhdGEpOworCQlpZiAoc3RhdHVzKQorCQkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfRVJST1I7CisJCWVsc2UgaWYgKGlkX3ByaXYtPmlkLnFwICYmIGlkX3ByaXYtPmlkLnBzICE9IFJETUFfUFNfU0RQKSB7CisJCQlzdGF0dXMgPSBjbWFfcmVwX3JlY3YoaWRfcHJpdik7CisJCQlldmVudCA9IHN0YXR1cyA/IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9FUlJPUiA6CisJCQkJCSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOworCQl9IGVsc2UKKwkJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFU1BPTlNFOworCQlwcml2YXRlX2RhdGFfbGVuID0gSUJfQ01fUkVQX1BSSVZBVEVfREFUQV9TSVpFOworCQlicmVhazsKKwljYXNlIElCX0NNX1JUVV9SRUNFSVZFRDoKKwkJc3RhdHVzID0gY21hX3J0dV9yZWN2KGlkX3ByaXYpOworCQlldmVudCA9IHN0YXR1cyA/IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9FUlJPUiA6CisJCQkJIFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ7CisJCWJyZWFrOworCWNhc2UgSUJfQ01fRFJFUV9FUlJPUjoKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsgLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBJQl9DTV9EUkVRX1JFQ0VJVkVEOgorCWNhc2UgSUJfQ01fRFJFUF9SRUNFSVZFRDoKKwkJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9DT05ORUNULCBDTUFfRElTQ09OTkVDVCkpCisJCQlnb3RvIG91dDsKKwkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0RJU0NPTk5FQ1RFRDsKKwkJYnJlYWs7CisJY2FzZSBJQl9DTV9USU1FV0FJVF9FWElUOgorCWNhc2UgSUJfQ01fTVJBX1JFQ0VJVkVEOgorCQkvKiBpZ25vcmUgZXZlbnQgKi8KKwkJZ290byBvdXQ7CisJY2FzZSBJQl9DTV9SRUpfUkVDRUlWRUQ6CisJCWNtYV9tb2RpZnlfcXBfZXJyKCZpZF9wcml2LT5pZCk7CisJCXN0YXR1cyA9IGliX2V2ZW50LT5wYXJhbS5yZWpfcmN2ZC5yZWFzb247CisJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9SRUpFQ1RFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJSRE1BIENNQTogdW5leHBlY3RlZCBJQiBDTSBldmVudDogJWQiLAorCQkgICAgICAgaWJfZXZlbnQtPmV2ZW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gY21hX25vdGlmeV91c2VyKGlkX3ByaXYsIGV2ZW50LCBzdGF0dXMsIGliX2V2ZW50LT5wcml2YXRlX2RhdGEsCisJCQkgICAgICBwcml2YXRlX2RhdGFfbGVuKTsKKwlpZiAocmV0KSB7CisJCS8qIERlc3Ryb3kgdGhlIENNIElEIGJ5IHJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlLiAqLworCQlpZF9wcml2LT5jbV9pZC5pYiA9IE5VTEw7CisJCWNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVNUUk9ZSU5HKTsKKwkJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCQlyZG1hX2Rlc3Ryb3lfaWQoJmlkX3ByaXYtPmlkKTsKKwkJcmV0dXJuIHJldDsKKwl9CitvdXQ6CisJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICpjbWFfbmV3X2lkKHN0cnVjdCByZG1hX2NtX2lkICpsaXN0ZW5faWQsCisJCQkJCSAgc3RydWN0IGliX2NtX2V2ZW50ICppYl9ldmVudCkKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCXN0cnVjdCByZG1hX2NtX2lkICppZDsKKwlzdHJ1Y3QgcmRtYV9yb3V0ZSAqcnQ7CisJdW5pb24gY21hX2lwX2FkZHIgKnNyYywgKmRzdDsKKwlfX3UxNiBwb3J0OworCXU4IGlwX3ZlcjsKKworCWlkID0gcmRtYV9jcmVhdGVfaWQobGlzdGVuX2lkLT5ldmVudF9oYW5kbGVyLCBsaXN0ZW5faWQtPmNvbnRleHQsCisJCQkgICAgbGlzdGVuX2lkLT5wcyk7CisJaWYgKElTX0VSUihpZCkpCisJCXJldHVybiBOVUxMOworCisJcnQgPSAmaWQtPnJvdXRlOworCXJ0LT5udW1fcGF0aHMgPSBpYl9ldmVudC0+cGFyYW0ucmVxX3JjdmQuYWx0ZXJuYXRlX3BhdGggPyAyIDogMTsKKwlydC0+cGF0aF9yZWMgPSBrbWFsbG9jKHNpemVvZiAqcnQtPnBhdGhfcmVjICogcnQtPm51bV9wYXRocywgR0ZQX0tFUk5FTCk7CisJaWYgKCFydC0+cGF0aF9yZWMpCisJCWdvdG8gZXJyOworCisJaWYgKGNtYV9nZXRfbmV0X2luZm8oaWJfZXZlbnQtPnByaXZhdGVfZGF0YSwgbGlzdGVuX2lkLT5wcywKKwkJCSAgICAgJmlwX3ZlciwgJnBvcnQsICZzcmMsICZkc3QpKQorCQlnb3RvIGVycjsKKworCWNtYV9zYXZlX25ldF9pbmZvKCZpZC0+cm91dGUuYWRkciwgJmxpc3Rlbl9pZC0+cm91dGUuYWRkciwKKwkJCSAgaXBfdmVyLCBwb3J0LCBzcmMsIGRzdCk7CisJcnQtPnBhdGhfcmVjWzBdID0gKmliX2V2ZW50LT5wYXJhbS5yZXFfcmN2ZC5wcmltYXJ5X3BhdGg7CisJaWYgKHJ0LT5udW1fcGF0aHMgPT0gMikKKwkJcnQtPnBhdGhfcmVjWzFdID0gKmliX2V2ZW50LT5wYXJhbS5yZXFfcmN2ZC5hbHRlcm5hdGVfcGF0aDsKKworCWliX2FkZHJfc2V0X3NnaWQoJnJ0LT5hZGRyLmRldl9hZGRyLCAmcnQtPnBhdGhfcmVjWzBdLnNnaWQpOworCWliX2FkZHJfc2V0X2RnaWQoJnJ0LT5hZGRyLmRldl9hZGRyLCAmcnQtPnBhdGhfcmVjWzBdLmRnaWQpOworCWliX2FkZHJfc2V0X3BrZXkoJnJ0LT5hZGRyLmRldl9hZGRyLCBiZTE2X3RvX2NwdShydC0+cGF0aF9yZWNbMF0ucGtleSkpOworCXJ0LT5hZGRyLmRldl9hZGRyLmRldl90eXBlID0gSUJfTk9ERV9DQTsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZF9wcml2LT5zdGF0ZSA9IENNQV9DT05ORUNUOworCXJldHVybiBpZF9wcml2OworZXJyOgorCXJkbWFfZGVzdHJveV9pZChpZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgY21hX3JlcV9oYW5kbGVyKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsIHN0cnVjdCBpYl9jbV9ldmVudCAqaWJfZXZlbnQpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqbGlzdGVuX2lkLCAqY29ubl9pZDsKKwlpbnQgb2Zmc2V0LCByZXQ7CisKKwlsaXN0ZW5faWQgPSBjbV9pZC0+Y29udGV4dDsKKwlhdG9taWNfaW5jKCZsaXN0ZW5faWQtPmRldl9yZW1vdmUpOworCWlmICghY21hX2NvbXAobGlzdGVuX2lkLCBDTUFfTElTVEVOKSkgeworCQlyZXQgPSAtRUNPTk5BQk9SVEVEOworCQlnb3RvIG91dDsKKwl9CisKKwljb25uX2lkID0gY21hX25ld19pZCgmbGlzdGVuX2lkLT5pZCwgaWJfZXZlbnQpOworCWlmICghY29ubl9pZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhdG9taWNfaW5jKCZjb25uX2lkLT5kZXZfcmVtb3ZlKTsKKwlyZXQgPSBjbWFfYWNxdWlyZV9pYl9kZXYoY29ubl9pZCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRU5PREVWOworCQljbWFfcmVsZWFzZV9yZW1vdmUoY29ubl9pZCk7CisJCXJkbWFfZGVzdHJveV9pZCgmY29ubl9pZC0+aWQpOworCQlnb3RvIG91dDsKKwl9CisKKwljb25uX2lkLT5jbV9pZC5pYiA9IGNtX2lkOworCWNtX2lkLT5jb250ZXh0ID0gY29ubl9pZDsKKwljbV9pZC0+Y21faGFuZGxlciA9IGNtYV9pYl9oYW5kbGVyOworCisJb2Zmc2V0ID0gY21hX3VzZXJfZGF0YV9vZmZzZXQobGlzdGVuX2lkLT5pZC5wcyk7CisJcmV0ID0gY21hX25vdGlmeV91c2VyKGNvbm5faWQsIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNULCAwLAorCQkJICAgICAgaWJfZXZlbnQtPnByaXZhdGVfZGF0YSArIG9mZnNldCwKKwkJCSAgICAgIElCX0NNX1JFUV9QUklWQVRFX0RBVEFfU0laRSAtIG9mZnNldCk7CisJaWYgKHJldCkgeworCQkvKiBEZXN0cm95IHRoZSBDTSBJRCBieSByZXR1cm5pbmcgYSBub24temVybyB2YWx1ZS4gKi8KKwkJY29ubl9pZC0+Y21faWQuaWIgPSBOVUxMOworCQljbWFfZXhjaChjb25uX2lkLCBDTUFfREVTVFJPWUlORyk7CisJCWNtYV9yZWxlYXNlX3JlbW92ZShjb25uX2lkKTsKKwkJcmRtYV9kZXN0cm95X2lkKCZjb25uX2lkLT5pZCk7CisJfQorb3V0OgorCWNtYV9yZWxlYXNlX3JlbW92ZShsaXN0ZW5faWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2JlNjQgY21hX2dldF9zZXJ2aWNlX2lkKGVudW0gcmRtYV9wb3J0X3NwYWNlIHBzLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJcmV0dXJuIGNwdV90b19iZTY0KCgodTY0KXBzIDw8IDE2KSArCisJICAgICAgIGJlMTZfdG9fY3B1KCgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHIpLT5zaW5fcG9ydCkpOworfQorCitzdGF0aWMgdm9pZCBjbWFfc2V0X2NvbXBhcmVfZGF0YShlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcywgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJCSBzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhICpjb21wYXJlKQoreworCXN0cnVjdCBjbWFfaGRyICpjbWFfZGF0YSwgKmNtYV9tYXNrOworCXN0cnVjdCBzZHBfaGggKnNkcF9kYXRhLCAqc2RwX21hc2s7CisJX191MzIgaXA0X2FkZHI7CisJc3RydWN0IGluNl9hZGRyIGlwNl9hZGRyOworCisJbWVtc2V0KGNvbXBhcmUsIDAsIHNpemVvZiAqY29tcGFyZSk7CisJY21hX2RhdGEgPSAodm9pZCAqKSBjb21wYXJlLT5kYXRhOworCWNtYV9tYXNrID0gKHZvaWQgKikgY29tcGFyZS0+bWFzazsKKwlzZHBfZGF0YSA9ICh2b2lkICopIGNvbXBhcmUtPmRhdGE7CisJc2RwX21hc2sgPSAodm9pZCAqKSBjb21wYXJlLT5tYXNrOworCisJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWlwNF9hZGRyID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9hZGRyLnNfYWRkcjsKKwkJaWYgKHBzID09IFJETUFfUFNfU0RQKSB7CisJCQlzZHBfc2V0X2lwX3ZlcihzZHBfZGF0YSwgNCk7CisJCQlzZHBfc2V0X2lwX3ZlcihzZHBfbWFzaywgMHhGKTsKKwkJCXNkcF9kYXRhLT5kc3RfYWRkci5pcDQuYWRkciA9IGlwNF9hZGRyOworCQkJc2RwX21hc2stPmRzdF9hZGRyLmlwNC5hZGRyID0gfjA7CisJCX0gZWxzZSB7CisJCQljbWFfc2V0X2lwX3ZlcihjbWFfZGF0YSwgNCk7CisJCQljbWFfc2V0X2lwX3ZlcihjbWFfbWFzaywgMHhGKTsKKwkJCWNtYV9kYXRhLT5kc3RfYWRkci5pcDQuYWRkciA9IGlwNF9hZGRyOworCQkJY21hX21hc2stPmRzdF9hZGRyLmlwNC5hZGRyID0gfjA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaXA2X2FkZHIgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfYWRkcjsKKwkJaWYgKHBzID09IFJETUFfUFNfU0RQKSB7CisJCQlzZHBfc2V0X2lwX3ZlcihzZHBfZGF0YSwgNik7CisJCQlzZHBfc2V0X2lwX3ZlcihzZHBfbWFzaywgMHhGKTsKKwkJCXNkcF9kYXRhLT5kc3RfYWRkci5pcDYgPSBpcDZfYWRkcjsKKwkJCW1lbXNldCgmc2RwX21hc2stPmRzdF9hZGRyLmlwNiwgMHhGRiwKKwkJCSAgICAgICBzaXplb2Ygc2RwX21hc2stPmRzdF9hZGRyLmlwNik7CisJCX0gZWxzZSB7CisJCQljbWFfc2V0X2lwX3ZlcihjbWFfZGF0YSwgNik7CisJCQljbWFfc2V0X2lwX3ZlcihjbWFfbWFzaywgMHhGKTsKKwkJCWNtYV9kYXRhLT5kc3RfYWRkci5pcDYgPSBpcDZfYWRkcjsKKwkJCW1lbXNldCgmY21hX21hc2stPmRzdF9hZGRyLmlwNiwgMHhGRiwKKwkJCSAgICAgICBzaXplb2YgY21hX21hc2stPmRzdF9hZGRyLmlwNik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGNtYV9pYl9saXN0ZW4oc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhIGNvbXBhcmVfZGF0YTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisJX19iZTY0IHN2Y19pZDsKKwlpbnQgcmV0OworCisJaWRfcHJpdi0+Y21faWQuaWIgPSBpYl9jcmVhdGVfY21faWQoaWRfcHJpdi0+aWQuZGV2aWNlLCBjbWFfcmVxX2hhbmRsZXIsCisJCQkJCSAgICBpZF9wcml2KTsKKwlpZiAoSVNfRVJSKGlkX3ByaXYtPmNtX2lkLmliKSkKKwkJcmV0dXJuIFBUUl9FUlIoaWRfcHJpdi0+Y21faWQuaWIpOworCisJYWRkciA9ICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOworCXN2Y19pZCA9IGNtYV9nZXRfc2VydmljZV9pZChpZF9wcml2LT5pZC5wcywgYWRkcik7CisJaWYgKGNtYV9hbnlfYWRkcihhZGRyKSkKKwkJcmV0ID0gaWJfY21fbGlzdGVuKGlkX3ByaXYtPmNtX2lkLmliLCBzdmNfaWQsIDAsIE5VTEwpOworCWVsc2UgeworCQljbWFfc2V0X2NvbXBhcmVfZGF0YShpZF9wcml2LT5pZC5wcywgYWRkciwgJmNvbXBhcmVfZGF0YSk7CisJCXJldCA9IGliX2NtX2xpc3RlbihpZF9wcml2LT5jbV9pZC5pYiwgc3ZjX2lkLCAwLCAmY29tcGFyZV9kYXRhKTsKKwl9CisKKwlpZiAocmV0KSB7CisJCWliX2Rlc3Ryb3lfY21faWQoaWRfcHJpdi0+Y21faWQuaWIpOworCQlpZF9wcml2LT5jbV9pZC5pYiA9IE5VTEw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWFfbGlzdGVuX2hhbmRsZXIoc3RydWN0IHJkbWFfY21faWQgKmlkLAorCQkJICAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBpZC0+Y29udGV4dDsKKworCWlkLT5jb250ZXh0ID0gaWRfcHJpdi0+aWQuY29udGV4dDsKKwlpZC0+ZXZlbnRfaGFuZGxlciA9IGlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXI7CisJcmV0dXJuIGlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXIoaWQsIGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgY21hX2xpc3Rlbl9vbl9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmRldl9pZF9wcml2OworCXN0cnVjdCByZG1hX2NtX2lkICppZDsKKwlpbnQgcmV0OworCisJaWQgPSByZG1hX2NyZWF0ZV9pZChjbWFfbGlzdGVuX2hhbmRsZXIsIGlkX3ByaXYsIGlkX3ByaXYtPmlkLnBzKTsKKwlpZiAoSVNfRVJSKGlkKSkKKwkJcmV0dXJuOworCisJZGV2X2lkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKworCWRldl9pZF9wcml2LT5zdGF0ZSA9IENNQV9BRERSX0JPVU5EOworCW1lbWNweSgmaWQtPnJvdXRlLmFkZHIuc3JjX2FkZHIsICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyLAorCSAgICAgICBpcF9hZGRyX3NpemUoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKTsKKworCWNtYV9hdHRhY2hfdG9fZGV2KGRldl9pZF9wcml2LCBjbWFfZGV2KTsKKwlsaXN0X2FkZF90YWlsKCZkZXZfaWRfcHJpdi0+bGlzdGVuX2xpc3QsICZpZF9wcml2LT5saXN0ZW5fbGlzdCk7CisKKwlyZXQgPSByZG1hX2xpc3RlbihpZCwgaWRfcHJpdi0+YmFja2xvZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm47CitlcnI6CisJY21hX2Rlc3Ryb3lfbGlzdGVuKGRldl9pZF9wcml2KTsKK30KKworc3RhdGljIHZvaWQgY21hX2xpc3Rlbl9vbl9hbGwoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgY21hX2RldmljZSAqY21hX2RldjsKKworCW11dGV4X2xvY2soJmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmlkX3ByaXYtPmxpc3QsICZsaXN0ZW5fYW55X2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY21hX2RldiwgJmRldl9saXN0LCBsaXN0KQorCQljbWFfbGlzdGVuX29uX2RldihpZF9wcml2LCBjbWFfZGV2KTsKKwltdXRleF91bmxvY2soJmxvY2spOworfQorCitzdGF0aWMgaW50IGNtYV9iaW5kX2FueShzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHNhX2ZhbWlseV90IGFmKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyX2luOworCisJbWVtc2V0KCZhZGRyX2luLCAwLCBzaXplb2YgYWRkcl9pbik7CisJYWRkcl9pbi5zaW5fZmFtaWx5ID0gYWY7CisJcmV0dXJuIHJkbWFfYmluZF9hZGRyKGlkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyX2luKTsKK30KKworaW50IHJkbWFfbGlzdGVuKHN0cnVjdCByZG1hX2NtX2lkICppZCwgaW50IGJhY2tsb2cpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmIChpZF9wcml2LT5zdGF0ZSA9PSBDTUFfSURMRSkgeworCQlyZXQgPSBjbWFfYmluZF9hbnkoaWQsIEFGX0lORVQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfQk9VTkQsIENNQV9MSVNURU4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlkX3ByaXYtPmJhY2tsb2cgPSBiYWNrbG9nOworCWlmIChpZC0+ZGV2aWNlKSB7CisJCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7CisJCWNhc2UgSUJfTk9ERV9DQToKKwkJCXJldCA9IGNtYV9pYl9saXN0ZW4oaWRfcHJpdik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PU1lTOworCQkJZ290byBlcnI7CisJCX0KKwl9IGVsc2UKKwkJY21hX2xpc3Rlbl9vbl9hbGwoaWRfcHJpdik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlpZF9wcml2LT5iYWNrbG9nID0gMDsKKwljbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9MSVNURU4sIENNQV9BRERSX0JPVU5EKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX2xpc3Rlbik7CisKK3N0YXRpYyB2b2lkIGNtYV9xdWVyeV9oYW5kbGVyKGludCBzdGF0dXMsIHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqcGF0aF9yZWMsCisJCQkgICAgICB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBjbWFfd29yayAqd29yayA9IGNvbnRleHQ7CisJc3RydWN0IHJkbWFfcm91dGUgKnJvdXRlOworCisJcm91dGUgPSAmd29yay0+aWQtPmlkLnJvdXRlOworCisJaWYgKCFzdGF0dXMpIHsKKwkJcm91dGUtPm51bV9wYXRocyA9IDE7CisJCSpyb3V0ZS0+cGF0aF9yZWMgPSAqcGF0aF9yZWM7CisJfSBlbHNlIHsKKwkJd29yay0+b2xkX3N0YXRlID0gQ01BX1JPVVRFX1FVRVJZOworCQl3b3JrLT5uZXdfc3RhdGUgPSBDTUFfQUREUl9SRVNPTFZFRDsKKwkJd29yay0+ZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX1JPVVRFX0VSUk9SOworCX0KKworCXF1ZXVlX3dvcmsoY21hX3dxLCAmd29yay0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgY21hX3F1ZXJ5X2liX3JvdXRlKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsIGludCB0aW1lb3V0X21zLAorCQkJICAgICAgc3RydWN0IGNtYV93b3JrICp3b3JrKQoreworCXN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyID0gJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHI7CisJc3RydWN0IGliX3NhX3BhdGhfcmVjIHBhdGhfcmVjOworCisJbWVtc2V0KCZwYXRoX3JlYywgMCwgc2l6ZW9mIHBhdGhfcmVjKTsKKwlwYXRoX3JlYy5zZ2lkID0gKmliX2FkZHJfZ2V0X3NnaWQoYWRkcik7CisJcGF0aF9yZWMuZGdpZCA9ICppYl9hZGRyX2dldF9kZ2lkKGFkZHIpOworCXBhdGhfcmVjLnBrZXkgPSBjcHVfdG9fYmUxNihpYl9hZGRyX2dldF9wa2V5KGFkZHIpKTsKKwlwYXRoX3JlYy5udW1iX3BhdGggPSAxOworCisJaWRfcHJpdi0+cXVlcnlfaWQgPSBpYl9zYV9wYXRoX3JlY19nZXQoaWRfcHJpdi0+aWQuZGV2aWNlLAorCQkJCWlkX3ByaXYtPmlkLnBvcnRfbnVtLCAmcGF0aF9yZWMsCisJCQkJSUJfU0FfUEFUSF9SRUNfREdJRCB8IElCX1NBX1BBVEhfUkVDX1NHSUQgfAorCQkJCUlCX1NBX1BBVEhfUkVDX1BLRVkgfCBJQl9TQV9QQVRIX1JFQ19OVU1CX1BBVEgsCisJCQkJdGltZW91dF9tcywgR0ZQX0tFUk5FTCwKKwkJCQljbWFfcXVlcnlfaGFuZGxlciwgd29yaywgJmlkX3ByaXYtPnF1ZXJ5KTsKKworCXJldHVybiAoaWRfcHJpdi0+cXVlcnlfaWQgPCAwKSA/IGlkX3ByaXYtPnF1ZXJ5X2lkIDogMDsKK30KKworc3RhdGljIHZvaWQgY21hX3dvcmtfaGFuZGxlcih2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbWFfd29yayAqd29yayA9IGRhdGE7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiA9IHdvcmstPmlkOworCWludCBkZXN0cm95ID0gMDsKKworCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOworCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCB3b3JrLT5vbGRfc3RhdGUsIHdvcmstPm5ld19zdGF0ZSkpCisJCWdvdG8gb3V0OworCisJaWYgKGlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXIoJmlkX3ByaXYtPmlkLCAmd29yay0+ZXZlbnQpKSB7CisJCWNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVNUUk9ZSU5HKTsKKwkJZGVzdHJveSA9IDE7CisJfQorb3V0OgorCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwljbWFfZGVyZWZfaWQoaWRfcHJpdik7CisJaWYgKGRlc3Ryb3kpCisJCXJkbWFfZGVzdHJveV9pZCgmaWRfcHJpdi0+aWQpOworCWtmcmVlKHdvcmspOworfQorCitzdGF0aWMgaW50IGNtYV9yZXNvbHZlX2liX3JvdXRlKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsIGludCB0aW1lb3V0X21zKQoreworCXN0cnVjdCByZG1hX3JvdXRlICpyb3V0ZSA9ICZpZF9wcml2LT5pZC5yb3V0ZTsKKwlzdHJ1Y3QgY21hX3dvcmsgKndvcms7CisJaW50IHJldDsKKworCXdvcmsgPSBremFsbG9jKHNpemVvZiAqd29yaywgR0ZQX0tFUk5FTCk7CisJaWYgKCF3b3JrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmstPmlkID0gaWRfcHJpdjsKKwlJTklUX1dPUksoJndvcmstPndvcmssIGNtYV93b3JrX2hhbmRsZXIsIHdvcmspOworCXdvcmstPm9sZF9zdGF0ZSA9IENNQV9ST1VURV9RVUVSWTsKKwl3b3JrLT5uZXdfc3RhdGUgPSBDTUFfUk9VVEVfUkVTT0xWRUQ7CisJd29yay0+ZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX1JPVVRFX1JFU09MVkVEOworCisJcm91dGUtPnBhdGhfcmVjID0ga21hbGxvYyhzaXplb2YgKnJvdXRlLT5wYXRoX3JlYywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyb3V0ZS0+cGF0aF9yZWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCXJldCA9IGNtYV9xdWVyeV9pYl9yb3V0ZShpZF9wcml2LCB0aW1lb3V0X21zLCB3b3JrKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXR1cm4gMDsKK2VycjI6CisJa2ZyZWUocm91dGUtPnBhdGhfcmVjKTsKKwlyb3V0ZS0+cGF0aF9yZWMgPSBOVUxMOworZXJyMToKKwlrZnJlZSh3b3JrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRtYV9zZXRfaWJfcGF0aHMoc3RydWN0IHJkbWFfY21faWQgKmlkLAorCQkgICAgICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnBhdGhfcmVjLCBpbnQgbnVtX3BhdGhzKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfUkVTT0xWRUQsIENNQV9ST1VURV9SRVNPTFZFRCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWQtPnJvdXRlLnBhdGhfcmVjID0ga21hbGxvYyhzaXplb2YgKnBhdGhfcmVjICogbnVtX3BhdGhzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkLT5yb3V0ZS5wYXRoX3JlYykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwltZW1jcHkoaWQtPnJvdXRlLnBhdGhfcmVjLCBwYXRoX3JlYywgc2l6ZW9mICpwYXRoX3JlYyAqIG51bV9wYXRocyk7CisJcmV0dXJuIDA7CitlcnI6CisJY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfUk9VVEVfUkVTT0xWRUQsIENNQV9BRERSX1JFU09MVkVEKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX3NldF9pYl9wYXRocyk7CisKK2ludCByZG1hX3Jlc29sdmVfcm91dGUoc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgdGltZW91dF9tcykKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX1JFU09MVkVELCBDTUFfUk9VVEVfUVVFUlkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF0b21pY19pbmMoJmlkX3ByaXYtPnJlZmNvdW50KTsKKwlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgeworCWNhc2UgSUJfTk9ERV9DQToKKwkJcmV0ID0gY21hX3Jlc29sdmVfaWJfcm91dGUoaWRfcHJpdiwgdGltZW91dF9tcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJCWJyZWFrOworCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX1JPVVRFX1FVRVJZLCBDTUFfQUREUl9SRVNPTFZFRCk7CisJY21hX2RlcmVmX2lkKGlkX3ByaXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfcmVzb2x2ZV9yb3V0ZSk7CisKK3N0YXRpYyBpbnQgY21hX2JpbmRfbG9vcGJhY2soc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgY21hX2RldmljZSAqY21hX2RldjsKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyIHBvcnRfYXR0cjsKKwl1bmlvbiBpYl9naWQgKmdpZDsKKwl1MTYgcGtleTsKKwlpbnQgcmV0OworCXU4IHA7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtYV9kZXYsICZkZXZfbGlzdCwgbGlzdCkKKwkJZm9yIChwID0gMTsgcCA8PSBjbWFfZGV2LT5kZXZpY2UtPnBoeXNfcG9ydF9jbnQ7ICsrcCkKKwkJCWlmICghaWJfcXVlcnlfcG9ydCAoY21hX2Rldi0+ZGV2aWNlLCBwLCAmcG9ydF9hdHRyKSAmJgorCQkJICAgIHBvcnRfYXR0ci5zdGF0ZSA9PSBJQl9QT1JUX0FDVElWRSkKKwkJCQlnb3RvIHBvcnRfZm91bmQ7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRldl9saXN0KSkgeworCQlwID0gMTsKKwkJY21hX2RldiA9IGxpc3RfZW50cnkoZGV2X2xpc3QubmV4dCwgc3RydWN0IGNtYV9kZXZpY2UsIGxpc3QpOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworcG9ydF9mb3VuZDoKKwlnaWQgPSBpYl9hZGRyX2dldF9zZ2lkKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyKTsKKwlyZXQgPSBpYl9nZXRfY2FjaGVkX2dpZChjbWFfZGV2LT5kZXZpY2UsIHAsIDAsIGdpZCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBpYl9nZXRfY2FjaGVkX3BrZXkoY21hX2Rldi0+ZGV2aWNlLCBwLCAwLCAmcGtleSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpYl9hZGRyX3NldF9wa2V5KCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLCBwa2V5KTsKKwlpZF9wcml2LT5pZC5wb3J0X251bSA9IHA7CisJY21hX2F0dGFjaF90b19kZXYoaWRfcHJpdiwgY21hX2Rldik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRyX2hhbmRsZXIoaW50IHN0YXR1cywgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKKwkJCSBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiA9IGNvbnRleHQ7CisJZW51bSByZG1hX2NtX2V2ZW50X3R5cGUgZXZlbnQ7CisKKwlhdG9taWNfaW5jKCZpZF9wcml2LT5kZXZfcmVtb3ZlKTsKKwlpZiAoIWlkX3ByaXYtPmNtYV9kZXYgJiYgIXN0YXR1cykKKwkJc3RhdHVzID0gY21hX2FjcXVpcmVfZGV2KGlkX3ByaXYpOworCisJaWYgKHN0YXR1cykgeworCQlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfUVVFUlksIENNQV9BRERSX0JPVU5EKSkKKwkJCWdvdG8gb3V0OworCQlldmVudCA9IFJETUFfQ01fRVZFTlRfQUREUl9FUlJPUjsKKwl9IGVsc2UgeworCQlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfUVVFUlksIENNQV9BRERSX1JFU09MVkVEKSkKKwkJCWdvdG8gb3V0OworCQltZW1jcHkoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIsIHNyY19hZGRyLAorCQkgICAgICAgaXBfYWRkcl9zaXplKHNyY19hZGRyKSk7CisJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9BRERSX1JFU09MVkVEOworCX0KKworCWlmIChjbWFfbm90aWZ5X3VzZXIoaWRfcHJpdiwgZXZlbnQsIHN0YXR1cywgTlVMTCwgMCkpIHsKKwkJY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFU1RST1lJTkcpOworCQljbWFfcmVsZWFzZV9yZW1vdmUoaWRfcHJpdik7CisJCWNtYV9kZXJlZl9pZChpZF9wcml2KTsKKwkJcmRtYV9kZXN0cm95X2lkKCZpZF9wcml2LT5pZCk7CisJCXJldHVybjsKKwl9CitvdXQ6CisJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCWNtYV9kZXJlZl9pZChpZF9wcml2KTsKK30KKworc3RhdGljIGludCBjbWFfcmVzb2x2ZV9sb29wYmFjayhzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN0cnVjdCBjbWFfd29yayAqd29yazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwgKmRzdF9pbjsKKwlpbnQgcmV0OworCisJd29yayA9IGt6YWxsb2Moc2l6ZW9mICp3b3JrLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdvcmspCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFpZF9wcml2LT5jbWFfZGV2KSB7CisJCXJldCA9IGNtYV9iaW5kX2xvb3BiYWNrKGlkX3ByaXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJaWJfYWRkcl9zZXRfZGdpZCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkciwKKwkJCSBpYl9hZGRyX2dldF9zZ2lkKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyKSk7CisKKwlpZiAoY21hX3plcm9fYWRkcigmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcikpIHsKKwkJc3JjX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOworCQlkc3RfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZHN0X2FkZHI7CisJCXNyY19pbi0+c2luX2ZhbWlseSA9IGRzdF9pbi0+c2luX2ZhbWlseTsKKwkJc3JjX2luLT5zaW5fYWRkci5zX2FkZHIgPSBkc3RfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwl9CisKKwl3b3JrLT5pZCA9IGlkX3ByaXY7CisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBjbWFfd29ya19oYW5kbGVyLCB3b3JrKTsKKwl3b3JrLT5vbGRfc3RhdGUgPSBDTUFfQUREUl9RVUVSWTsKKwl3b3JrLT5uZXdfc3RhdGUgPSBDTUFfQUREUl9SRVNPTFZFRDsKKwl3b3JrLT5ldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDsKKwlxdWV1ZV93b3JrKGNtYV93cSwgJndvcmstPndvcmspOworCXJldHVybiAwOworZXJyOgorCWtmcmVlKHdvcmspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21hX2JpbmRfYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsCisJCQkgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkcikKK3sKKwlpZiAoc3JjX2FkZHIgJiYgc3JjX2FkZHItPnNhX2ZhbWlseSkKKwkJcmV0dXJuIHJkbWFfYmluZF9hZGRyKGlkLCBzcmNfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gY21hX2JpbmRfYW55KGlkLCBkc3RfYWRkci0+c2FfZmFtaWx5KTsKK30KKworaW50IHJkbWFfcmVzb2x2ZV9hZGRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKKwkJICAgICAgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwgaW50IHRpbWVvdXRfbXMpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmIChpZF9wcml2LT5zdGF0ZSA9PSBDTUFfSURMRSkgeworCQlyZXQgPSBjbWFfYmluZF9hZGRyKGlkLCBzcmNfYWRkciwgZHN0X2FkZHIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfQk9VTkQsIENNQV9BRERSX1FVRVJZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhdG9taWNfaW5jKCZpZF9wcml2LT5yZWZjb3VudCk7CisJbWVtY3B5KCZpZC0+cm91dGUuYWRkci5kc3RfYWRkciwgZHN0X2FkZHIsIGlwX2FkZHJfc2l6ZShkc3RfYWRkcikpOworCWlmIChjbWFfYW55X2FkZHIoZHN0X2FkZHIpKQorCQlyZXQgPSBjbWFfcmVzb2x2ZV9sb29wYmFjayhpZF9wcml2KTsKKwllbHNlCisJCXJldCA9IHJkbWFfcmVzb2x2ZV9pcCgmaWQtPnJvdXRlLmFkZHIuc3JjX2FkZHIsIGRzdF9hZGRyLAorCQkJCSAgICAgICZpZC0+cm91dGUuYWRkci5kZXZfYWRkciwKKwkJCQkgICAgICB0aW1lb3V0X21zLCBhZGRyX2hhbmRsZXIsIGlkX3ByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9RVUVSWSwgQ01BX0FERFJfQk9VTkQpOworCWNtYV9kZXJlZl9pZChpZF9wcml2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX3Jlc29sdmVfYWRkcik7CisKK3N0YXRpYyB2b2lkIGNtYV9iaW5kX3BvcnQoc3RydWN0IHJkbWFfYmluZF9saXN0ICpiaW5kX2xpc3QsCisJCQkgIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOworCXNpbi0+c2luX3BvcnQgPSBodG9ucyhiaW5kX2xpc3QtPnBvcnQpOworCWlkX3ByaXYtPmJpbmRfbGlzdCA9IGJpbmRfbGlzdDsKKwlobGlzdF9hZGRfaGVhZCgmaWRfcHJpdi0+bm9kZSwgJmJpbmRfbGlzdC0+b3duZXJzKTsKK30KKworc3RhdGljIGludCBjbWFfYWxsb2NfcG9ydChzdHJ1Y3QgaWRyICpwcywgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSAgdW5zaWduZWQgc2hvcnQgc251bSkKK3sKKwlzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QgKmJpbmRfbGlzdDsKKwlpbnQgcG9ydCwgc3RhcnQsIHJldDsKKworCWJpbmRfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mICpiaW5kX2xpc3QsIEdGUF9LRVJORUwpOworCWlmICghYmluZF9saXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0YXJ0ID0gc251bSA/IHNudW0gOiBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXTsKKworCWRvIHsKKwkJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUocHMsIGJpbmRfbGlzdCwgc3RhcnQsICZwb3J0KTsKKwl9IHdoaWxlICgocmV0ID09IC1FQUdBSU4pICYmIGlkcl9wcmVfZ2V0KHBzLCBHRlBfS0VSTkVMKSk7CisKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWlmICgoc251bSAmJiBwb3J0ICE9IHNudW0pIHx8CisJICAgICghc251bSAmJiBwb3J0ID4gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMV0pKSB7CisJCWlkcl9yZW1vdmUocHMsIHBvcnQpOworCQlyZXQgPSAtRUFERFJOT1RBVkFJTDsKKwkJZ290byBlcnI7CisJfQorCisJYmluZF9saXN0LT5wcyA9IHBzOworCWJpbmRfbGlzdC0+cG9ydCA9ICh1bnNpZ25lZCBzaG9ydCkgcG9ydDsKKwljbWFfYmluZF9wb3J0KGJpbmRfbGlzdCwgaWRfcHJpdik7CisJcmV0dXJuIDA7CitlcnI6CisJa2ZyZWUoYmluZF9saXN0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtYV91c2VfcG9ydChzdHJ1Y3QgaWRyICpwcywgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICpjdXJfaWQ7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICpjdXJfc2luOworCXN0cnVjdCByZG1hX2JpbmRfbGlzdCAqYmluZF9saXN0OworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXVuc2lnbmVkIHNob3J0IHNudW07CisKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOworCXNudW0gPSBudG9ocyhzaW4tPnNpbl9wb3J0KTsKKwlpZiAoc251bSA8IFBST1RfU09DSyAmJiAhY2FwYWJsZShDQVBfTkVUX0JJTkRfU0VSVklDRSkpCisJCXJldHVybiAtRUFDQ0VTOworCisJYmluZF9saXN0ID0gaWRyX2ZpbmQocHMsIHNudW0pOworCWlmICghYmluZF9saXN0KQorCQlyZXR1cm4gY21hX2FsbG9jX3BvcnQocHMsIGlkX3ByaXYsIHNudW0pOworCisJLyoKKwkgKiBXZSBkb24ndCBzdXBwb3J0IGJpbmRpbmcgdG8gYW55IGFkZHJlc3MgaWYgYW55b25lIGlzIGJvdW5kIHRvCisJICogYSBzcGVjaWZpYyBhZGRyZXNzIG9uIHRoZSBzYW1lIHBvcnQuCisJICovCisJaWYgKGNtYV9hbnlfYWRkcigmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcikpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cl9pZCwgbm9kZSwgJmJpbmRfbGlzdC0+b3duZXJzLCBub2RlKSB7CisJCWlmIChjbWFfYW55X2FkZHIoJmN1cl9pZC0+aWQucm91dGUuYWRkci5zcmNfYWRkcikpCisJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJCQorCQljdXJfc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmY3VyX2lkLT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOworCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gY3VyX3Npbi0+c2luX2FkZHIuc19hZGRyKQorCQkJcmV0dXJuIC1FQUREUklOVVNFOworCX0KKworCWNtYV9iaW5kX3BvcnQoYmluZF9saXN0LCBpZF9wcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWFfZ2V0X3BvcnQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgaWRyICpwczsKKwlpbnQgcmV0OworCisJc3dpdGNoIChpZF9wcml2LT5pZC5wcykgeworCWNhc2UgUkRNQV9QU19TRFA6CisJCXBzID0gJnNkcF9wczsKKwkJYnJlYWs7CisJY2FzZSBSRE1BX1BTX1RDUDoKKwkJcHMgPSAmdGNwX3BzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwl9CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlpZiAoY21hX2FueV9wb3J0KCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyKSkKKwkJcmV0ID0gY21hX2FsbG9jX3BvcnQocHMsIGlkX3ByaXYsIDApOworCWVsc2UKKwkJcmV0ID0gY21hX3VzZV9wb3J0KHBzLCBpZF9wcml2KTsKKwltdXRleF91bmxvY2soJmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHJkbWFfYmluZF9hZGRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9JRExFLCBDTUFfQUREUl9CT1VORCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjbWFfYW55X2FkZHIoYWRkcikpIHsKKwkJcmV0ID0gcmRtYV90cmFuc2xhdGVfaXAoYWRkciwgJmlkLT5yb3V0ZS5hZGRyLmRldl9hZGRyKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBjbWFfYWNxdWlyZV9kZXYoaWRfcHJpdik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwltZW1jcHkoJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyLCBhZGRyLCBpcF9hZGRyX3NpemUoYWRkcikpOworCXJldCA9IGNtYV9nZXRfcG9ydChpZF9wcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfQk9VTkQsIENNQV9JRExFKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX2JpbmRfYWRkcik7CisKK3N0YXRpYyBpbnQgY21hX2Zvcm1hdF9oZHIodm9pZCAqaGRyLCBlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcywKKwkJCSAgc3RydWN0IHJkbWFfcm91dGUgKnJvdXRlKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc3JjNCwgKmRzdDQ7CisJc3RydWN0IGNtYV9oZHIgKmNtYV9oZHI7CisJc3RydWN0IHNkcF9oaCAqc2RwX2hkcjsKKworCXNyYzQgPSAoc3RydWN0IHNvY2thZGRyX2luICopICZyb3V0ZS0+YWRkci5zcmNfYWRkcjsKKwlkc3Q0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmcm91dGUtPmFkZHIuZHN0X2FkZHI7CisKKwlzd2l0Y2ggKHBzKSB7CisJY2FzZSBSRE1BX1BTX1NEUDoKKwkJc2RwX2hkciA9IGhkcjsKKwkJaWYgKHNkcF9nZXRfbWFqdihzZHBfaGRyLT5zZHBfdmVyc2lvbikgIT0gU0RQX01BSl9WRVJTSU9OKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNkcF9zZXRfaXBfdmVyKHNkcF9oZHIsIDQpOworCQlzZHBfaGRyLT5zcmNfYWRkci5pcDQuYWRkciA9IHNyYzQtPnNpbl9hZGRyLnNfYWRkcjsKKwkJc2RwX2hkci0+ZHN0X2FkZHIuaXA0LmFkZHIgPSBkc3Q0LT5zaW5fYWRkci5zX2FkZHI7CisJCXNkcF9oZHItPnBvcnQgPSBzcmM0LT5zaW5fcG9ydDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY21hX2hkciA9IGhkcjsKKwkJY21hX2hkci0+Y21hX3ZlcnNpb24gPSBDTUFfVkVSU0lPTjsKKwkJY21hX3NldF9pcF92ZXIoY21hX2hkciwgNCk7CisJCWNtYV9oZHItPnNyY19hZGRyLmlwNC5hZGRyID0gc3JjNC0+c2luX2FkZHIuc19hZGRyOworCQljbWFfaGRyLT5kc3RfYWRkci5pcDQuYWRkciA9IGRzdDQtPnNpbl9hZGRyLnNfYWRkcjsKKwkJY21hX2hkci0+cG9ydCA9IHNyYzQtPnNpbl9wb3J0OworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21hX2Nvbm5lY3RfaWIoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSAgc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSkKK3sKKwlzdHJ1Y3QgaWJfY21fcmVxX3BhcmFtIHJlcTsKKwlzdHJ1Y3QgcmRtYV9yb3V0ZSAqcm91dGU7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCWludCBvZmZzZXQsIHJldDsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YgcmVxKTsKKwlvZmZzZXQgPSBjbWFfdXNlcl9kYXRhX29mZnNldChpZF9wcml2LT5pZC5wcyk7CisJcmVxLnByaXZhdGVfZGF0YV9sZW4gPSBvZmZzZXQgKyBjb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuOworCXByaXZhdGVfZGF0YSA9IGt6YWxsb2MocmVxLnByaXZhdGVfZGF0YV9sZW4sIEdGUF9BVE9NSUMpOworCWlmICghcHJpdmF0ZV9kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb25uX3BhcmFtLT5wcml2YXRlX2RhdGEgJiYgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbikKKwkJbWVtY3B5KHByaXZhdGVfZGF0YSArIG9mZnNldCwgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhLAorCQkgICAgICAgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbik7CisKKwlpZF9wcml2LT5jbV9pZC5pYiA9IGliX2NyZWF0ZV9jbV9pZChpZF9wcml2LT5pZC5kZXZpY2UsIGNtYV9pYl9oYW5kbGVyLAorCQkJCQkgICAgaWRfcHJpdik7CisJaWYgKElTX0VSUihpZF9wcml2LT5jbV9pZC5pYikpIHsKKwkJcmV0ID0gUFRSX0VSUihpZF9wcml2LT5jbV9pZC5pYik7CisJCWdvdG8gb3V0OworCX0KKworCXJvdXRlID0gJmlkX3ByaXYtPmlkLnJvdXRlOworCXJldCA9IGNtYV9mb3JtYXRfaGRyKHByaXZhdGVfZGF0YSwgaWRfcHJpdi0+aWQucHMsIHJvdXRlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXEucHJpdmF0ZV9kYXRhID0gcHJpdmF0ZV9kYXRhOworCisJcmVxLnByaW1hcnlfcGF0aCA9ICZyb3V0ZS0+cGF0aF9yZWNbMF07CisJaWYgKHJvdXRlLT5udW1fcGF0aHMgPT0gMikKKwkJcmVxLmFsdGVybmF0ZV9wYXRoID0gJnJvdXRlLT5wYXRoX3JlY1sxXTsKKworCXJlcS5zZXJ2aWNlX2lkID0gY21hX2dldF9zZXJ2aWNlX2lkKGlkX3ByaXYtPmlkLnBzLAorCQkJCQkgICAgJnJvdXRlLT5hZGRyLmRzdF9hZGRyKTsKKwlyZXEucXBfbnVtID0gaWRfcHJpdi0+cXBfbnVtOworCXJlcS5xcF90eXBlID0gaWRfcHJpdi0+cXBfdHlwZTsKKwlyZXEuc3RhcnRpbmdfcHNuID0gaWRfcHJpdi0+c2VxX251bTsKKwlyZXEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXM7CisJcmVxLmluaXRpYXRvcl9kZXB0aCA9IGNvbm5fcGFyYW0tPmluaXRpYXRvcl9kZXB0aDsKKwlyZXEuZmxvd19jb250cm9sID0gY29ubl9wYXJhbS0+Zmxvd19jb250cm9sOworCXJlcS5yZXRyeV9jb3VudCA9IGNvbm5fcGFyYW0tPnJldHJ5X2NvdW50OworCXJlcS5ybnJfcmV0cnlfY291bnQgPSBjb25uX3BhcmFtLT5ybnJfcmV0cnlfY291bnQ7CisJcmVxLnJlbW90ZV9jbV9yZXNwb25zZV90aW1lb3V0ID0gQ01BX0NNX1JFU1BPTlNFX1RJTUVPVVQ7CisJcmVxLmxvY2FsX2NtX3Jlc3BvbnNlX3RpbWVvdXQgPSBDTUFfQ01fUkVTUE9OU0VfVElNRU9VVDsKKwlyZXEubWF4X2NtX3JldHJpZXMgPSBDTUFfTUFYX0NNX1JFVFJJRVM7CisJcmVxLnNycSA9IGlkX3ByaXYtPnNycSA/IDEgOiAwOworCisJcmV0ID0gaWJfc2VuZF9jbV9yZXEoaWRfcHJpdi0+Y21faWQuaWIsICZyZXEpOworb3V0OgorCWtmcmVlKHByaXZhdGVfZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkbWFfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfUk9VVEVfUkVTT0xWRUQsIENNQV9DT05ORUNUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWlkLT5xcCkgeworCQlpZF9wcml2LT5xcF9udW0gPSBjb25uX3BhcmFtLT5xcF9udW07CisJCWlkX3ByaXYtPnFwX3R5cGUgPSBjb25uX3BhcmFtLT5xcF90eXBlOworCQlpZF9wcml2LT5zcnEgPSBjb25uX3BhcmFtLT5zcnE7CisJfQorCisJc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwljYXNlIElCX05PREVfQ0E6CisJCXJldCA9IGNtYV9jb25uZWN0X2liKGlkX3ByaXYsIGNvbm5fcGFyYW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PU1lTOworCQlicmVhazsKKwl9CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwljbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9DT05ORUNULCBDTUFfUk9VVEVfUkVTT0xWRUQpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfY29ubmVjdCk7CisKK3N0YXRpYyBpbnQgY21hX2FjY2VwdF9pYihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LAorCQkJIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCit7CisJc3RydWN0IGliX2NtX3JlcF9wYXJhbSByZXA7CisJaW50IHJldDsKKworCXJldCA9IGNtYV9tb2RpZnlfcXBfcnRyKCZpZF9wcml2LT5pZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1lbXNldCgmcmVwLCAwLCBzaXplb2YgcmVwKTsKKwlyZXAucXBfbnVtID0gaWRfcHJpdi0+cXBfbnVtOworCXJlcC5zdGFydGluZ19wc24gPSBpZF9wcml2LT5zZXFfbnVtOworCXJlcC5wcml2YXRlX2RhdGEgPSBjb25uX3BhcmFtLT5wcml2YXRlX2RhdGE7CisJcmVwLnByaXZhdGVfZGF0YV9sZW4gPSBjb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuOworCXJlcC5yZXNwb25kZXJfcmVzb3VyY2VzID0gY29ubl9wYXJhbS0+cmVzcG9uZGVyX3Jlc291cmNlczsKKwlyZXAuaW5pdGlhdG9yX2RlcHRoID0gY29ubl9wYXJhbS0+aW5pdGlhdG9yX2RlcHRoOworCXJlcC50YXJnZXRfYWNrX2RlbGF5ID0gQ01BX0NNX1JFU1BPTlNFX1RJTUVPVVQ7CisJcmVwLmZhaWxvdmVyX2FjY2VwdGVkID0gMDsKKwlyZXAuZmxvd19jb250cm9sID0gY29ubl9wYXJhbS0+Zmxvd19jb250cm9sOworCXJlcC5ybnJfcmV0cnlfY291bnQgPSBjb25uX3BhcmFtLT5ybnJfcmV0cnlfY291bnQ7CisJcmVwLnNycSA9IGlkX3ByaXYtPnNycSA/IDEgOiAwOworCisJcmV0dXJuIGliX3NlbmRfY21fcmVwKGlkX3ByaXYtPmNtX2lkLmliLCAmcmVwKTsKK30KKworaW50IHJkbWFfYWNjZXB0KHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSkKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfQ09OTkVDVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFpZC0+cXAgJiYgY29ubl9wYXJhbSkgeworCQlpZF9wcml2LT5xcF9udW0gPSBjb25uX3BhcmFtLT5xcF9udW07CisJCWlkX3ByaXYtPnFwX3R5cGUgPSBjb25uX3BhcmFtLT5xcF90eXBlOworCQlpZF9wcml2LT5zcnEgPSBjb25uX3BhcmFtLT5zcnE7CisJfQorCisJc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwljYXNlIElCX05PREVfQ0E6CisJCWlmIChjb25uX3BhcmFtKQorCQkJcmV0ID0gY21hX2FjY2VwdF9pYihpZF9wcml2LCBjb25uX3BhcmFtKTsKKwkJZWxzZQorCQkJcmV0ID0gY21hX3JlcF9yZWN2KGlkX3ByaXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PU1lTOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0KQorCQlnb3RvIHJlamVjdDsKKworCXJldHVybiAwOworcmVqZWN0OgorCWNtYV9tb2RpZnlfcXBfZXJyKGlkKTsKKwlyZG1hX3JlamVjdChpZCwgTlVMTCwgMCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9hY2NlcHQpOworCitpbnQgcmRtYV9yZWplY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBjb25zdCB2b2lkICpwcml2YXRlX2RhdGEsCisJCXU4IHByaXZhdGVfZGF0YV9sZW4pCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7CisJY2FzZSBJQl9OT0RFX0NBOgorCQlyZXQgPSBpYl9zZW5kX2NtX3JlaihpZF9wcml2LT5jbV9pZC5pYiwKKwkJCQkgICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVELCBOVUxMLCAwLAorCQkJCSAgICAgcHJpdmF0ZV9kYXRhLCBwcml2YXRlX2RhdGFfbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfcmVqZWN0KTsKKworaW50IHJkbWFfZGlzY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpICYmCisJICAgICFjbWFfY29tcChpZF9wcml2LCBDTUFfRElTQ09OTkVDVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gY21hX21vZGlmeV9xcF9lcnIoaWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwljYXNlIElCX05PREVfQ0E6CisJCS8qIEluaXRpYXRlIG9yIHJlc3BvbmQgdG8gYSBkaXNjb25uZWN0LiAqLworCQlpZiAoaWJfc2VuZF9jbV9kcmVxKGlkX3ByaXYtPmNtX2lkLmliLCBOVUxMLCAwKSkKKwkJCWliX3NlbmRfY21fZHJlcChpZF9wcml2LT5jbV9pZC5pYiwgTlVMTCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX2Rpc2Nvbm5lY3QpOworCitzdGF0aWMgdm9pZCBjbWFfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXY7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKworCWNtYV9kZXYgPSBrbWFsbG9jKHNpemVvZiAqY21hX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWFfZGV2KQorCQlyZXR1cm47CisKKwljbWFfZGV2LT5kZXZpY2UgPSBkZXZpY2U7CisJY21hX2Rldi0+bm9kZV9ndWlkID0gZGV2aWNlLT5ub2RlX2d1aWQ7CisJaWYgKCFjbWFfZGV2LT5ub2RlX2d1aWQpCisJCWdvdG8gZXJyOworCisJaW5pdF9jb21wbGV0aW9uKCZjbWFfZGV2LT5jb21wKTsKKwlhdG9taWNfc2V0KCZjbWFfZGV2LT5yZWZjb3VudCwgMSk7CisJSU5JVF9MSVNUX0hFQUQoJmNtYV9kZXYtPmlkX2xpc3QpOworCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZjbWFfY2xpZW50LCBjbWFfZGV2KTsKKworCW11dGV4X2xvY2soJmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmNtYV9kZXYtPmxpc3QsICZkZXZfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpZF9wcml2LCAmbGlzdGVuX2FueV9saXN0LCBsaXN0KQorCQljbWFfbGlzdGVuX29uX2RldihpZF9wcml2LCBjbWFfZGV2KTsKKwltdXRleF91bmxvY2soJmxvY2spOworCXJldHVybjsKK2VycjoKKwlrZnJlZShjbWFfZGV2KTsKK30KKworc3RhdGljIGludCBjbWFfcmVtb3ZlX2lkX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCWVudW0gY21hX3N0YXRlIHN0YXRlOworCisJLyogUmVjb3JkIHRoYXQgd2Ugd2FudCB0byByZW1vdmUgdGhlIGRldmljZSAqLworCXN0YXRlID0gY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFVklDRV9SRU1PVkFMKTsKKwlpZiAoc3RhdGUgPT0gQ01BX0RFU1RST1lJTkcpCisJCXJldHVybiAwOworCisJY21hX2NhbmNlbF9vcGVyYXRpb24oaWRfcHJpdiwgc3RhdGUpOworCXdhaXRfZXZlbnQoaWRfcHJpdi0+d2FpdF9yZW1vdmUsICFhdG9taWNfcmVhZCgmaWRfcHJpdi0+ZGV2X3JlbW92ZSkpOworCisJLyogQ2hlY2sgZm9yIGRlc3RydWN0aW9uIGZyb20gYW5vdGhlciBjYWxsYmFjay4gKi8KKwlpZiAoIWNtYV9jb21wKGlkX3ByaXYsIENNQV9ERVZJQ0VfUkVNT1ZBTCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNtYV9ub3RpZnlfdXNlcihpZF9wcml2LCBSRE1BX0NNX0VWRU5UX0RFVklDRV9SRU1PVkFMLAorCQkJICAgICAgIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBjbWFfcHJvY2Vzc19yZW1vdmUoc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXYpCit7CisJc3RydWN0IGxpc3RfaGVhZCByZW1vdmVfbGlzdDsKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmcmVtb3ZlX2xpc3QpOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjbWFfZGV2LT5pZF9saXN0KSkgeworCQlpZF9wcml2ID0gbGlzdF9lbnRyeShjbWFfZGV2LT5pZF9saXN0Lm5leHQsCisJCQkJICAgICBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBsaXN0KTsKKworCQlpZiAoY21hX2ludGVybmFsX2xpc3RlbihpZF9wcml2KSkgeworCQkJY21hX2Rlc3Ryb3lfbGlzdGVuKGlkX3ByaXYpOworCQkJY29udGludWU7CisJCX0KKworCQlsaXN0X2RlbCgmaWRfcHJpdi0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJmlkX3ByaXYtPmxpc3QsICZyZW1vdmVfbGlzdCk7CisJCWF0b21pY19pbmMoJmlkX3ByaXYtPnJlZmNvdW50KTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKworCQlyZXQgPSBjbWFfcmVtb3ZlX2lkX2RldihpZF9wcml2KTsKKwkJY21hX2RlcmVmX2lkKGlkX3ByaXYpOworCQlpZiAocmV0KQorCQkJcmRtYV9kZXN0cm95X2lkKCZpZF9wcml2LT5pZCk7CisKKwkJbXV0ZXhfbG9jaygmbG9jayk7CisJfQorCW11dGV4X3VubG9jaygmbG9jayk7CisKKwljbWFfZGVyZWZfZGV2KGNtYV9kZXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNtYV9kZXYtPmNvbXApOworfQorCitzdGF0aWMgdm9pZCBjbWFfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXY7CisKKwljbWFfZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJmNtYV9jbGllbnQpOworCWlmICghY21hX2RldikKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9kZWwoJmNtYV9kZXYtPmxpc3QpOworCW11dGV4X3VubG9jaygmbG9jayk7CisKKwljbWFfcHJvY2Vzc19yZW1vdmUoY21hX2Rldik7CisJa2ZyZWUoY21hX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgY21hX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJY21hX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInJkbWFfY21fd3EiKTsKKwlpZiAoIWNtYV93cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJmNtYV9jbGllbnQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCXJldHVybiAwOworCitlcnI6CisJZGVzdHJveV93b3JrcXVldWUoY21hX3dxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjbWFfY2xlYW51cCh2b2lkKQoreworCWliX3VucmVnaXN0ZXJfY2xpZW50KCZjbWFfY2xpZW50KTsKKwlkZXN0cm95X3dvcmtxdWV1ZShjbWFfd3EpOworCWlkcl9kZXN0cm95KCZzZHBfcHMpOworCWlkcl9kZXN0cm95KCZ0Y3BfcHMpOworfQorCittb2R1bGVfaW5pdChjbWFfaW5pdCk7Cittb2R1bGVfZXhpdChjbWFfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYwppbmRleCA4MzhiZjU0Li42MTVmZTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Ztcl9wb29sLmMKQEAgLTU0LDcgKzU0LDcgQEAKIC8qCiAgKiBJZiBhbiBGTVIgaXMgbm90IGluIHVzZSwgdGhlbiB0aGUgbGlzdCBtZW1iZXIgd2lsbCBwb2ludCB0byBlaXRoZXIKICAqIGl0cyBwb29sJ3MgZnJlZV9saXN0IChpZiB0aGUgRk1SIGNhbiBiZSBtYXBwZWQgYWdhaW47IHRoYXQgaXMsCi0gKiByZW1hcF9jb3VudCA8IElCX0ZNUl9NQVhfUkVNQVBTKSBvciBpdHMgcG9vbCdzIGRpcnR5X2xpc3QgKGlmIHRoZQorICogcmVtYXBfY291bnQgPCBwb29sLT5tYXhfcmVtYXBzKSBvciBpdHMgcG9vbCdzIGRpcnR5X2xpc3QgKGlmIHRoZQogICogRk1SIG5lZWRzIHRvIGJlIHVubWFwcGVkIGJlZm9yZSBiZWluZyByZW1hcHBlZCkuICBJbiBlaXRoZXIgb2YKICAqIHRoZXNlIGNhc2VzIGl0IGlzIGEgYnVnIGlmIHRoZSByZWZfY291bnQgaXMgbm90IDAuICBJbiBvdGhlciB3b3JkcywKICAqIGlmIHJlZl9jb3VudCBpcyA+IDAsIHRoZW4gdGhlIGxpc3QgbWVtYmVyIG11c3Qgbm90IGJlIGxpbmtlZCBpbnRvCkBAIC04NCw2ICs4NCw3IEBACiAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgIHBvb2xfc2l6ZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWdlczsKKwlpbnQJCQkgIG1heF9yZW1hcHM7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eV93YXRlcm1hcms7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eV9sZW47CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICBmcmVlX2xpc3Q7CkBAIC0yMTQsOCArMjE1LDEwIEBACiB7CiAJc3RydWN0IGliX2RldmljZSAgICpkZXZpY2U7CiAJc3RydWN0IGliX2Ztcl9wb29sICpwb29sOworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqYXR0cjsKIAlpbnQgaTsKIAlpbnQgcmV0OworCWludCBtYXhfcmVtYXBzOwogCiAJaWYgKCFwYXJhbXMpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtMjI4LDYgKzIzMSwyNiBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKIAl9CiAKKwlhdHRyID0ga21hbGxvYyhzaXplb2YgKmF0dHIsIEdGUF9LRVJORUwpOworCWlmICghYXR0cikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb3VsZG4ndCBhbGxvY2F0ZSBkZXZpY2UgYXR0ciBzdHJ1Y3QiKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcmV0ID0gaWJfcXVlcnlfZGV2aWNlKGRldmljZSwgYXR0cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb3VsZG4ndCBxdWVyeSBkZXZpY2UiKTsKKwkJa2ZyZWUoYXR0cik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJaWYgKCFhdHRyLT5tYXhfbWFwX3Blcl9mbXIpCisJCW1heF9yZW1hcHMgPSBJQl9GTVJfTUFYX1JFTUFQUzsKKwllbHNlCisJCW1heF9yZW1hcHMgPSBhdHRyLT5tYXhfbWFwX3Blcl9mbXI7CisKKwlrZnJlZShhdHRyKTsKKwogCXBvb2wgPSBrbWFsbG9jKHNpemVvZiAqcG9vbCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb29sKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvdWxkbid0IGFsbG9jYXRlIHBvb2wgc3RydWN0Iik7CkBAIC0yNTgsNiArMjgxLDcgQEAKIAogCXBvb2wtPnBvb2xfc2l6ZSAgICAgICA9IDA7CiAJcG9vbC0+bWF4X3BhZ2VzICAgICAgID0gcGFyYW1zLT5tYXhfcGFnZXNfcGVyX2ZtcjsKKwlwb29sLT5tYXhfcmVtYXBzICAgICAgPSBtYXhfcmVtYXBzOwogCXBvb2wtPmRpcnR5X3dhdGVybWFyayA9IHBhcmFtcy0+ZGlydHlfd2F0ZXJtYXJrOwogCXBvb2wtPmRpcnR5X2xlbiAgICAgICA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPnBvb2xfbG9jayk7CkBAIC0yNzksNyArMzAzLDcgQEAKIAkJc3RydWN0IGliX3Bvb2xfZm1yICpmbXI7CiAJCXN0cnVjdCBpYl9mbXJfYXR0ciBhdHRyID0gewogCQkJLm1heF9wYWdlcyAgPSBwYXJhbXMtPm1heF9wYWdlc19wZXJfZm1yLAotCQkJLm1heF9tYXBzICAgPSBJQl9GTVJfTUFYX1JFTUFQUywKKwkJCS5tYXhfbWFwcyAgID0gcG9vbC0+bWF4X3JlbWFwcywKIAkJCS5wYWdlX3NoaWZ0ID0gcGFyYW1zLT5wYWdlX3NoaWZ0CiAJCX07CiAKQEAgLTQ4OSw3ICs1MTMsNyBAQAogCiAJLS1mbXItPnJlZl9jb3VudDsKIAlpZiAoIWZtci0+cmVmX2NvdW50KSB7Ci0JCWlmIChmbXItPnJlbWFwX2NvdW50IDwgSUJfRk1SX01BWF9SRU1BUFMpIHsKKwkJaWYgKGZtci0+cmVtYXBfY291bnQgPCBwb29sLT5tYXhfcmVtYXBzKSB7CiAJCQlsaXN0X2FkZF90YWlsKCZmbXItPmxpc3QsICZwb29sLT5mcmVlX2xpc3QpOwogCQl9IGVsc2UgewogCQkJbGlzdF9hZGRfdGFpbCgmZm1yLT5saXN0LCAmcG9vbC0+ZGlydHlfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDVhZDQxYTYuLmIzOGUwMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0zNCw2ICszNCw3IEBACiAgKiAkSWQ6IG1hZC5jIDU1OTYgMjAwNi0wMy0wMyAwMTowMDowN1ogc2Vhbi5oZWZ0eSAkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPHJkbWEvaWJfY2FjaGUuaD4KIAogI2luY2x1ZGUgIm1hZF9wcml2LmgiCiAjaW5jbHVkZSAibWFkX3JtcHAuaCIKQEAgLTQ1LDggKzQ2LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkhhbCBSb3NlbnN0b2NrIik7CiBNT0RVTEVfQVVUSE9SKCJTZWFuIEhlZnR5Iik7CiAKLQota21lbV9jYWNoZV90ICppYl9tYWRfY2FjaGU7CitzdGF0aWMga21lbV9jYWNoZV90ICppYl9tYWRfY2FjaGU7CiAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGliX21hZF9wb3J0X2xpc3Q7CiBzdGF0aWMgdTMyIGliX21hZF9jbGllbnRfaWQgPSAwOwpAQCAtMTY3MywyMCArMTY3MywyMSBAQAogCQlyd2MtPnJlY3ZfYnVmLm1hZC0+bWFkX2hkci5tZ210X2NsYXNzOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByY3ZfaGFzX3NhbWVfZ2lkKHN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlICp3ciwKK3N0YXRpYyBpbmxpbmUgaW50IHJjdl9oYXNfc2FtZV9naWQoc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICptYWRfYWdlbnRfcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqd3IsCiAJCQkJICAgc3RydWN0IGliX21hZF9yZWN2X3djICpyd2MgKQogewogCXN0cnVjdCBpYl9haF9hdHRyIGF0dHI7CiAJdTggc2VuZF9yZXNwLCByY3ZfcmVzcDsKKwl1bmlvbiBpYl9naWQgc2dpZDsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UgPSBtYWRfYWdlbnRfcHJpdi0+YWdlbnQuZGV2aWNlOworCXU4IHBvcnRfbnVtID0gbWFkX2FnZW50X3ByaXYtPmFnZW50LnBvcnRfbnVtOworCXU4IGxtYzsKIAogCXNlbmRfcmVzcCA9ICgoc3RydWN0IGliX21hZCAqKSh3ci0+c2VuZF9idWYubWFkKSktPgogCQkgICAgIG1hZF9oZHIubWV0aG9kICYgSUJfTUdNVF9NRVRIT0RfUkVTUDsKIAlyY3ZfcmVzcCA9IHJ3Yy0+cmVjdl9idWYubWFkLT5tYWRfaGRyLm1ldGhvZCAmIElCX01HTVRfTUVUSE9EX1JFU1A7CiAKLQlpZiAoIXNlbmRfcmVzcCAmJiByY3ZfcmVzcCkKLQkJLyogaXMgcmVxdWVzdC9yZXNwb25zZS4gR0lEL0xJRHMgYXJlIGJvdGggbG9jYWwgKHNhbWUpLiAqLwotCQlyZXR1cm4gMTsKLQogCWlmIChzZW5kX3Jlc3AgPT0gcmN2X3Jlc3ApCiAJCS8qIGJvdGggcmVxdWVzdHMsIG9yIGJvdGggcmVzcG9uc2VzLiBHSURzIGRpZmZlcmVudCAqLwogCQlyZXR1cm4gMDsKQEAgLTE2OTUsNDggKzE2OTYsNzggQEAKIAkJLyogQXNzdW1lIG5vdCBlcXVhbCwgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLiAqLwogCQlyZXR1cm4gMDsKIAotCWlmICghKGF0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpICYmICEocndjLT53Yy0+d2NfZmxhZ3MgJiBJQl9XQ19HUkgpKQotCQlyZXR1cm4gYXR0ci5kbGlkID09IHJ3Yy0+d2MtPnNsaWQ7Ci0JZWxzZSBpZiAoKGF0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpICYmCi0JCSAocndjLT53Yy0+d2NfZmxhZ3MgJiBJQl9XQ19HUkgpKQotCQlyZXR1cm4gbWVtY21wKGF0dHIuZ3JoLmRnaWQucmF3LAotCQkJICAgICAgcndjLT5yZWN2X2J1Zi5ncmgtPnNnaWQucmF3LCAxNikgPT0gMDsKLQllbHNlCisJaWYgKCEhKGF0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpICE9CisJICAgICEhKHJ3Yy0+d2MtPndjX2ZsYWdzICYgSUJfV0NfR1JIKSkKIAkJLyogb25lIGhhcyBHSUQsIG90aGVyIGRvZXMgbm90LiAgQXNzdW1lIGRpZmZlcmVudCAqLwogCQlyZXR1cm4gMDsKKworCWlmICghc2VuZF9yZXNwICYmIHJjdl9yZXNwKSB7CisJCS8qIGlzIHJlcXVlc3QvcmVzcG9uc2UuICovCisJCWlmICghKGF0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpKSB7CisJCQlpZiAoaWJfZ2V0X2NhY2hlZF9sbWMoZGV2aWNlLCBwb3J0X251bSwgJmxtYykpCisJCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gKCFsbWMgfHwgISgoYXR0ci5zcmNfcGF0aF9iaXRzIF4KKwkJCQkJICAgcndjLT53Yy0+ZGxpZF9wYXRoX2JpdHMpICYKKwkJCQkJICAoKDEgPDwgbG1jKSAtIDEpKSk7CisJCX0gZWxzZSB7CisJCQlpZiAoaWJfZ2V0X2NhY2hlZF9naWQoZGV2aWNlLCBwb3J0X251bSwKKwkJCQkJICAgICAgYXR0ci5ncmguc2dpZF9pbmRleCwgJnNnaWQpKQorCQkJCXJldHVybiAwOworCQkJcmV0dXJuICFtZW1jbXAoc2dpZC5yYXcsIHJ3Yy0+cmVjdl9idWYuZ3JoLT5kZ2lkLnJhdywKKwkJCQkgICAgICAgMTYpOworCQl9CisJfQorCisJaWYgKCEoYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkpCisJCXJldHVybiBhdHRyLmRsaWQgPT0gcndjLT53Yy0+c2xpZDsKKwllbHNlCisJCXJldHVybiAhbWVtY21wKGF0dHIuZ3JoLmRnaWQucmF3LCByd2MtPnJlY3ZfYnVmLmdyaC0+c2dpZC5yYXcsCisJCQkgICAgICAgMTYpOwogfQorCitzdGF0aWMgaW5saW5lIGludCBpc19kaXJlY3QodTggY2xhc3MpCit7CisJcmV0dXJuIChjbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpOworfQorCiBzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSoKIGliX2ZpbmRfc2VuZF9tYWQoc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICptYWRfYWdlbnRfcHJpdiwKLQkJIHN0cnVjdCBpYl9tYWRfcmVjdl93YyAqbWFkX3JlY3Zfd2MpCisJCSBzdHJ1Y3QgaWJfbWFkX3JlY3Zfd2MgKndjKQogewotCXN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlICptYWRfc2VuZF93cjsKKwlzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqd3I7CiAJc3RydWN0IGliX21hZCAqbWFkOwogCi0JbWFkID0gKHN0cnVjdCBpYl9tYWQgKiltYWRfcmVjdl93Yy0+cmVjdl9idWYubWFkOworCW1hZCA9IChzdHJ1Y3QgaWJfbWFkICopd2MtPnJlY3ZfYnVmLm1hZDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkobWFkX3NlbmRfd3IsICZtYWRfYWdlbnRfcHJpdi0+d2FpdF9saXN0LAotCQkJICAgIGFnZW50X2xpc3QpIHsKLQkJaWYgKChtYWRfc2VuZF93ci0+dGlkID09IG1hZC0+bWFkX2hkci50aWQpICYmCi0JCSAgICByY3ZfaGFzX3NhbWVfY2xhc3MobWFkX3NlbmRfd3IsIG1hZF9yZWN2X3djKSAmJgotCQkgICAgcmN2X2hhc19zYW1lX2dpZChtYWRfc2VuZF93ciwgbWFkX3JlY3Zfd2MpKQotCQkJcmV0dXJuIG1hZF9zZW5kX3dyOworCWxpc3RfZm9yX2VhY2hfZW50cnkod3IsICZtYWRfYWdlbnRfcHJpdi0+d2FpdF9saXN0LCBhZ2VudF9saXN0KSB7CisJCWlmICgod3ItPnRpZCA9PSBtYWQtPm1hZF9oZHIudGlkKSAmJgorCQkgICAgcmN2X2hhc19zYW1lX2NsYXNzKHdyLCB3YykgJiYKKwkJICAgIC8qCisJCSAgICAgKiBEb24ndCBjaGVjayBHSUQgZm9yIGRpcmVjdCByb3V0ZWQgTUFEcy4KKwkJICAgICAqIFRoZXNlIG1pZ2h0IGhhdmUgcGVybWlzc2l2ZSBMSURzLgorCQkgICAgICovCisJCSAgICAoaXNfZGlyZWN0KHdjLT5yZWN2X2J1Zi5tYWQtPm1hZF9oZHIubWdtdF9jbGFzcykgfHwKKwkJICAgICByY3ZfaGFzX3NhbWVfZ2lkKG1hZF9hZ2VudF9wcml2LCB3ciwgd2MpKSkKKwkJCXJldHVybiB3cjsKIAl9CiAKIAkvKgogCSAqIEl0J3MgcG9zc2libGUgdG8gcmVjZWl2ZSB0aGUgcmVzcG9uc2UgYmVmb3JlIHdlJ3ZlCiAJICogYmVlbiBub3RpZmllZCB0aGF0IHRoZSBzZW5kIGhhcyBjb21wbGV0ZWQKIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hZF9zZW5kX3dyLCAmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCwKLQkJCSAgICBhZ2VudF9saXN0KSB7Ci0JCWlmIChpc19kYXRhX21hZChtYWRfYWdlbnRfcHJpdiwgbWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZCkgJiYKLQkJICAgIG1hZF9zZW5kX3dyLT50aWQgPT0gbWFkLT5tYWRfaGRyLnRpZCAmJgotCQkgICAgbWFkX3NlbmRfd3ItPnRpbWVvdXQgJiYKLQkJICAgIHJjdl9oYXNfc2FtZV9jbGFzcyhtYWRfc2VuZF93ciwgbWFkX3JlY3Zfd2MpICYmCi0JCSAgICByY3ZfaGFzX3NhbWVfZ2lkKG1hZF9zZW5kX3dyLCBtYWRfcmVjdl93YykpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdyLCAmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCwgYWdlbnRfbGlzdCkgeworCQlpZiAoaXNfZGF0YV9tYWQobWFkX2FnZW50X3ByaXYsIHdyLT5zZW5kX2J1Zi5tYWQpICYmCisJCSAgICB3ci0+dGlkID09IG1hZC0+bWFkX2hkci50aWQgJiYKKwkJICAgIHdyLT50aW1lb3V0ICYmCisJCSAgICByY3ZfaGFzX3NhbWVfY2xhc3Mod3IsIHdjKSAmJgorCQkgICAgLyoKKwkJICAgICAqIERvbid0IGNoZWNrIEdJRCBmb3IgZGlyZWN0IHJvdXRlZCBNQURzLgorCQkgICAgICogVGhlc2UgbWlnaHQgaGF2ZSBwZXJtaXNzaXZlIExJRHMuCisJCSAgICAgKi8KKwkJICAgIChpc19kaXJlY3Qod2MtPnJlY3ZfYnVmLm1hZC0+bWFkX2hkci5tZ210X2NsYXNzKSB8fAorCQkgICAgIHJjdl9oYXNfc2FtZV9naWQobWFkX2FnZW50X3ByaXYsIHdyLCB3YykpKQogCQkJLyogVmVyaWZ5IHJlcXVlc3QgaGFzIG5vdCBiZWVuIGNhbmNlbGVkICovCi0JCQlyZXR1cm4gKG1hZF9zZW5kX3dyLT5zdGF0dXMgPT0gSUJfV0NfU1VDQ0VTUykgPwotCQkJCW1hZF9zZW5kX3dyIDogTlVMTDsKLQkJfQorCQkJcmV0dXJuICh3ci0+c3RhdHVzID09IElCX1dDX1NVQ0NFU1MpID8gd3IgOiBOVUxMOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCmluZGV4IGI0ZmEyOGQuLmQxNDdmM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaApAQCAtMjEyLDggKzIxMiw2IEBACiAJc3RydWN0IGliX21hZF9xcF9pbmZvIHFwX2luZm9bSUJfTUFEX1FQU19DT1JFXTsKIH07CiAKLWV4dGVybiBrbWVtX2NhY2hlX3QgKmliX21hZF9jYWNoZTsKLQogaW50IGliX3NlbmRfbWFkKHN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlICptYWRfc2VuZF93cik7CiAKIHN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCmluZGV4IDUwMWNjMDUuLmU5MTFjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwpAQCAtNDcsNiArNDcsNyBAQAogCiAjaW5jbHVkZSA8cmRtYS9pYl9wYWNrLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9zYS5oPgorI2luY2x1ZGUgPHJkbWEvaWJfY2FjaGUuaD4KIAogTU9EVUxFX0FVVEhPUigiUm9sYW5kIERyZWllciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmZpbmlCYW5kIHN1Ym5ldCBhZG1pbmlzdHJhdGlvbiBxdWVyeSBzdXBwb3J0Iik7CkBAIC00NDEsNiArNDQyLDM2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGliX3NhX2NhbmNlbF9xdWVyeSk7CiAKK2ludCBpYl9pbml0X2FoX2Zyb21fcGF0aChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAorCQkJIHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqcmVjLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cikKK3sKKwlpbnQgcmV0OworCXUxNiBnaWRfaW5kZXg7CisKKwltZW1zZXQoYWhfYXR0ciwgMCwgc2l6ZW9mICphaF9hdHRyKTsKKwlhaF9hdHRyLT5kbGlkID0gYmUxNl90b19jcHUocmVjLT5kbGlkKTsKKwlhaF9hdHRyLT5zbCA9IHJlYy0+c2w7CisJYWhfYXR0ci0+c3JjX3BhdGhfYml0cyA9IGJlMTZfdG9fY3B1KHJlYy0+c2xpZCkgJiAweDdmOworCWFoX2F0dHItPnBvcnRfbnVtID0gcG9ydF9udW07CisKKwlpZiAocmVjLT5ob3BfbGltaXQgPiAxKSB7CisJCWFoX2F0dHItPmFoX2ZsYWdzID0gSUJfQUhfR1JIOworCQlhaF9hdHRyLT5ncmguZGdpZCA9IHJlYy0+ZGdpZDsKKworCQlyZXQgPSBpYl9maW5kX2NhY2hlZF9naWQoZGV2aWNlLCAmcmVjLT5zZ2lkLCAmcG9ydF9udW0sCisJCQkJCSAmZ2lkX2luZGV4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJYWhfYXR0ci0+Z3JoLnNnaWRfaW5kZXggICAgPSBnaWRfaW5kZXg7CisJCWFoX2F0dHItPmdyaC5mbG93X2xhYmVsICAgID0gYmUzMl90b19jcHUocmVjLT5mbG93X2xhYmVsKTsKKwkJYWhfYXR0ci0+Z3JoLmhvcF9saW1pdCAgICAgPSByZWMtPmhvcF9saW1pdDsKKwkJYWhfYXR0ci0+Z3JoLnRyYWZmaWNfY2xhc3MgPSByZWMtPnRyYWZmaWNfY2xhc3M7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpYl9pbml0X2FoX2Zyb21fcGF0aCk7CisKIHN0YXRpYyB2b2lkIGluaXRfbWFkKHN0cnVjdCBpYl9zYV9tYWQgKm1hZCwgc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKaW5kZXggOTE2NGEwOS4uYzFjNmZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKQEAgLTMwLDcgKzMwLDcgQEAKICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICAqIFNPRlRXQVJFLgogICoKLSAqICRJZDogdWNtLmMgMjU5NCAyMDA1LTA2LTEzIDE5OjQ2OjAyWiBsaWJvciAkCisgKiAkSWQ6IHVjbS5jIDQzMTEgMjAwNS0xMi0wNSAxODo0MjowMVogc2Vhbi5oZWZ0eSAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KQEAgLTUwLDYgKzUwLDcgQEAKIAogI2luY2x1ZGUgPHJkbWEvaWJfY20uaD4KICNpbmNsdWRlIDxyZG1hL2liX3VzZXJfY20uaD4KKyNpbmNsdWRlIDxyZG1hL2liX21hcnNoYWxsLmg+CiAKIE1PRFVMRV9BVVRIT1IoIkxpYm9yIE1pY2hhbGVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkluZmluaUJhbmQgdXNlcnNwYWNlIENvbm5lY3Rpb24gTWFuYWdlciBhY2Nlc3MiKTsKQEAgLTYzLDcgKzY0LDcgQEAKIH07CiAKIHN0cnVjdCBpYl91Y21fZmlsZSB7Ci0Jc3RydWN0IHNlbWFwaG9yZSBtdXRleDsKKwlzdHJ1Y3QgbXV0ZXggZmlsZV9tdXRleDsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlzdHJ1Y3QgaWJfdWNtX2RldmljZSAqZGV2aWNlOwogCkBAIC0xNTIsNyArMTUzLDcgQEAKIHsKIAlzdHJ1Y3QgaWJfdWNtX2V2ZW50ICp1ZXZlbnQ7CiAKLQlkb3duKCZjdHgtPmZpbGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZjdHgtPmZpbGUtPmZpbGVfbXV0ZXgpOwogCWxpc3RfZGVsKCZjdHgtPmZpbGVfbGlzdCk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZjdHgtPmV2ZW50cykpIHsKIApAQCAtMTY3LDcgKzE2OCw3IEBACiAKIAkJa2ZyZWUodWV2ZW50KTsKIAl9Ci0JdXAoJmN0eC0+ZmlsZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmY3R4LT5maWxlLT5maWxlX211dGV4KTsKIH0KIAogc3RhdGljIHN0cnVjdCBpYl91Y21fY29udGV4dCAqaWJfdWNtX2N0eF9hbGxvYyhzdHJ1Y3QgaWJfdWNtX2ZpbGUgKmZpbGUpCkBAIC0yMDUsMzYgKzIwNiw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGliX3VjbV9ldmVudF9wYXRoX2dldChzdHJ1Y3QgaWJfdWNtX3BhdGhfcmVjICp1cGF0aCwKLQkJCQkgIHN0cnVjdCBpYl9zYV9wYXRoX3JlYwkgKmtwYXRoKQotewotCWlmICgha3BhdGggfHwgIXVwYXRoKQotCQlyZXR1cm47Ci0KLQltZW1jcHkodXBhdGgtPmRnaWQsIGtwYXRoLT5kZ2lkLnJhdywgc2l6ZW9mICp1cGF0aC0+ZGdpZCk7Ci0JbWVtY3B5KHVwYXRoLT5zZ2lkLCBrcGF0aC0+c2dpZC5yYXcsIHNpemVvZiAqdXBhdGgtPnNnaWQpOwotCi0JdXBhdGgtPmRsaWQgICAgICAgICAgICAgPSBrcGF0aC0+ZGxpZDsKLQl1cGF0aC0+c2xpZCAgICAgICAgICAgICA9IGtwYXRoLT5zbGlkOwotCXVwYXRoLT5yYXdfdHJhZmZpYyAgICAgID0ga3BhdGgtPnJhd190cmFmZmljOwotCXVwYXRoLT5mbG93X2xhYmVsICAgICAgID0ga3BhdGgtPmZsb3dfbGFiZWw7Ci0JdXBhdGgtPmhvcF9saW1pdCAgICAgICAgPSBrcGF0aC0+aG9wX2xpbWl0OwotCXVwYXRoLT50cmFmZmljX2NsYXNzICAgID0ga3BhdGgtPnRyYWZmaWNfY2xhc3M7Ci0JdXBhdGgtPnJldmVyc2libGUgICAgICAgPSBrcGF0aC0+cmV2ZXJzaWJsZTsKLQl1cGF0aC0+bnVtYl9wYXRoICAgICAgICA9IGtwYXRoLT5udW1iX3BhdGg7Ci0JdXBhdGgtPnBrZXkgICAgICAgICAgICAgPSBrcGF0aC0+cGtleTsKLQl1cGF0aC0+c2wJICAgICAgICA9IGtwYXRoLT5zbDsKLQl1cGF0aC0+bXR1X3NlbGVjdG9yICAgICA9IGtwYXRoLT5tdHVfc2VsZWN0b3I7Ci0JdXBhdGgtPm10dSAgICAgICAgICAgICAgPSBrcGF0aC0+bXR1OwotCXVwYXRoLT5yYXRlX3NlbGVjdG9yICAgID0ga3BhdGgtPnJhdGVfc2VsZWN0b3I7Ci0JdXBhdGgtPnJhdGUgICAgICAgICAgICAgPSBrcGF0aC0+cmF0ZTsKLQl1cGF0aC0+cGFja2V0X2xpZmVfdGltZSA9IGtwYXRoLT5wYWNrZXRfbGlmZV90aW1lOwotCXVwYXRoLT5wcmVmZXJlbmNlICAgICAgID0ga3BhdGgtPnByZWZlcmVuY2U7Ci0KLQl1cGF0aC0+cGFja2V0X2xpZmVfdGltZV9zZWxlY3RvciA9Ci0JCWtwYXRoLT5wYWNrZXRfbGlmZV90aW1lX3NlbGVjdG9yOwotfQotCiBzdGF0aWMgdm9pZCBpYl91Y21fZXZlbnRfcmVxX2dldChzdHJ1Y3QgaWJfdWNtX3JlcV9ldmVudF9yZXNwICp1cmVxLAogCQkJCSBzdHJ1Y3QgaWJfY21fcmVxX2V2ZW50X3BhcmFtICprcmVxKQogewpAQCAtMjUzLDggKzIyNCwxMCBAQAogCXVyZXEtPnNycSAgICAgICAgICAgICAgICAgICAgICAgID0ga3JlcS0+c3JxOwogCXVyZXEtPnBvcnQJCQkgPSBrcmVxLT5wb3J0OwogCi0JaWJfdWNtX2V2ZW50X3BhdGhfZ2V0KCZ1cmVxLT5wcmltYXJ5X3BhdGgsIGtyZXEtPnByaW1hcnlfcGF0aCk7Ci0JaWJfdWNtX2V2ZW50X3BhdGhfZ2V0KCZ1cmVxLT5hbHRlcm5hdGVfcGF0aCwga3JlcS0+YWx0ZXJuYXRlX3BhdGgpOworCWliX2NvcHlfcGF0aF9yZWNfdG9fdXNlcigmdXJlcS0+cHJpbWFyeV9wYXRoLCBrcmVxLT5wcmltYXJ5X3BhdGgpOworCWlmIChrcmVxLT5hbHRlcm5hdGVfcGF0aCkKKwkJaWJfY29weV9wYXRoX3JlY190b191c2VyKCZ1cmVxLT5hbHRlcm5hdGVfcGF0aCwKKwkJCQkJIGtyZXEtPmFsdGVybmF0ZV9wYXRoKTsKIH0KIAogc3RhdGljIHZvaWQgaWJfdWNtX2V2ZW50X3JlcF9nZXQoc3RydWN0IGliX3VjbV9yZXBfZXZlbnRfcmVzcCAqdXJlcCwKQEAgLTMyNCw4ICsyOTcsOCBAQAogCQlpbmZvCSAgICAgID0gZXZ0LT5wYXJhbS5yZWpfcmN2ZC5hcmk7CiAJCWJyZWFrOwogCWNhc2UgSUJfQ01fTEFQX1JFQ0VJVkVEOgotCQlpYl91Y21fZXZlbnRfcGF0aF9nZXQoJnV2dC0+cmVzcC51LmxhcF9yZXNwLnBhdGgsCi0JCQkJICAgICAgZXZ0LT5wYXJhbS5sYXBfcmN2ZC5hbHRlcm5hdGVfcGF0aCk7CisJCWliX2NvcHlfcGF0aF9yZWNfdG9fdXNlcigmdXZ0LT5yZXNwLnUubGFwX3Jlc3AucGF0aCwKKwkJCQkJIGV2dC0+cGFyYW0ubGFwX3JjdmQuYWx0ZXJuYXRlX3BhdGgpOwogCQl1dnQtPmRhdGFfbGVuID0gSUJfQ01fTEFQX1BSSVZBVEVfREFUQV9TSVpFOwogCQl1dnQtPnJlc3AucHJlc2VudCA9IElCX1VDTV9QUkVTX0FMVEVSTkFURTsKIAkJYnJlYWs7CkBAIC00MDIsMTEgKzM3NSwxMSBAQAogCWlmIChyZXN1bHQpCiAJCWdvdG8gZXJyMjsKIAotCWRvd24oJmN0eC0+ZmlsZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJmN0eC0+ZmlsZS0+ZmlsZV9tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmdWV2ZW50LT5maWxlX2xpc3QsICZjdHgtPmZpbGUtPmV2ZW50cyk7CiAJbGlzdF9hZGRfdGFpbCgmdWV2ZW50LT5jdHhfbGlzdCwgJmN0eC0+ZXZlbnRzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmN0eC0+ZmlsZS0+cG9sbF93YWl0KTsKLQl1cCgmY3R4LT5maWxlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPmZpbGUtPmZpbGVfbXV0ZXgpOwogCXJldHVybiAwOwogCiBlcnIyOgpAQCAtNDMyLDcgKzQwNSw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGluYnVmLCBzaXplb2YoY21kKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZG93bigmZmlsZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJmZpbGUtPmZpbGVfbXV0ZXgpOwogCXdoaWxlIChsaXN0X2VtcHR5KCZmaWxlLT5ldmVudHMpKSB7CiAKIAkJaWYgKGZpbGUtPmZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CkBAIC00NDcsOSArNDIwLDkgQEAKIAogCQlwcmVwYXJlX3RvX3dhaXQoJmZpbGUtPnBvbGxfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKLQkJdXAoJmZpbGUtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJZG93bigmZmlsZS0+bXV0ZXgpOworCQltdXRleF9sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAogCQlmaW5pc2hfd2FpdCgmZmlsZS0+cG9sbF93YWl0LCAmd2FpdCk7CiAJfQpAQCAtNTA5LDcgKzQ4Miw3IEBACiAJa2ZyZWUodWV2ZW50LT5pbmZvKTsKIAlrZnJlZSh1ZXZlbnQpOwogZG9uZToKLQl1cCgmZmlsZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmZmlsZS0+ZmlsZV9tdXRleCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTI4LDkgKzUwMSw5IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGluYnVmLCBzaXplb2YoY21kKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZG93bigmZmlsZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJmZpbGUtPmZpbGVfbXV0ZXgpOwogCWN0eCA9IGliX3VjbV9jdHhfYWxsb2MoZmlsZSk7Ci0JdXAoJmZpbGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmZpbGUtPmZpbGVfbXV0ZXgpOwogCWlmICghY3R4KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNjM3LDY1ICs2MTAsMTEgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBpYl91Y21fY29weV9haF9hdHRyKHN0cnVjdCBpYl91Y21fYWhfYXR0ciAqZGVzdF9hdHRyLAotCQkJCXN0cnVjdCBpYl9haF9hdHRyICpzcmNfYXR0cikKLXsKLQltZW1jcHkoZGVzdF9hdHRyLT5ncmhfZGdpZCwgc3JjX2F0dHItPmdyaC5kZ2lkLnJhdywKLQkgICAgICAgc2l6ZW9mIHNyY19hdHRyLT5ncmguZGdpZCk7Ci0JZGVzdF9hdHRyLT5ncmhfZmxvd19sYWJlbCA9IHNyY19hdHRyLT5ncmguZmxvd19sYWJlbDsKLQlkZXN0X2F0dHItPmdyaF9zZ2lkX2luZGV4ID0gc3JjX2F0dHItPmdyaC5zZ2lkX2luZGV4OwotCWRlc3RfYXR0ci0+Z3JoX2hvcF9saW1pdCA9IHNyY19hdHRyLT5ncmguaG9wX2xpbWl0OwotCWRlc3RfYXR0ci0+Z3JoX3RyYWZmaWNfY2xhc3MgPSBzcmNfYXR0ci0+Z3JoLnRyYWZmaWNfY2xhc3M7Ci0KLQlkZXN0X2F0dHItPmRsaWQgPSBzcmNfYXR0ci0+ZGxpZDsKLQlkZXN0X2F0dHItPnNsID0gc3JjX2F0dHItPnNsOwotCWRlc3RfYXR0ci0+c3JjX3BhdGhfYml0cyA9IHNyY19hdHRyLT5zcmNfcGF0aF9iaXRzOwotCWRlc3RfYXR0ci0+c3RhdGljX3JhdGUgPSBzcmNfYXR0ci0+c3RhdGljX3JhdGU7Ci0JZGVzdF9hdHRyLT5pc19nbG9iYWwgPSAoc3JjX2F0dHItPmFoX2ZsYWdzICYgSUJfQUhfR1JIKTsKLQlkZXN0X2F0dHItPnBvcnRfbnVtID0gc3JjX2F0dHItPnBvcnRfbnVtOwotfQotCi1zdGF0aWMgdm9pZCBpYl91Y21fY29weV9xcF9hdHRyKHN0cnVjdCBpYl91Y21faW5pdF9xcF9hdHRyX3Jlc3AgKmRlc3RfYXR0ciwKLQkJCQlzdHJ1Y3QgaWJfcXBfYXR0ciAqc3JjX2F0dHIpCi17Ci0JZGVzdF9hdHRyLT5jdXJfcXBfc3RhdGUgPSBzcmNfYXR0ci0+Y3VyX3FwX3N0YXRlOwotCWRlc3RfYXR0ci0+cGF0aF9tdHUgPSBzcmNfYXR0ci0+cGF0aF9tdHU7Ci0JZGVzdF9hdHRyLT5wYXRoX21pZ19zdGF0ZSA9IHNyY19hdHRyLT5wYXRoX21pZ19zdGF0ZTsKLQlkZXN0X2F0dHItPnFrZXkgPSBzcmNfYXR0ci0+cWtleTsKLQlkZXN0X2F0dHItPnJxX3BzbiA9IHNyY19hdHRyLT5ycV9wc247Ci0JZGVzdF9hdHRyLT5zcV9wc24gPSBzcmNfYXR0ci0+c3FfcHNuOwotCWRlc3RfYXR0ci0+ZGVzdF9xcF9udW0gPSBzcmNfYXR0ci0+ZGVzdF9xcF9udW07Ci0JZGVzdF9hdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgPSBzcmNfYXR0ci0+cXBfYWNjZXNzX2ZsYWdzOwotCi0JZGVzdF9hdHRyLT5tYXhfc2VuZF93ciA9IHNyY19hdHRyLT5jYXAubWF4X3NlbmRfd3I7Ci0JZGVzdF9hdHRyLT5tYXhfcmVjdl93ciA9IHNyY19hdHRyLT5jYXAubWF4X3JlY3Zfd3I7Ci0JZGVzdF9hdHRyLT5tYXhfc2VuZF9zZ2UgPSBzcmNfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZTsKLQlkZXN0X2F0dHItPm1heF9yZWN2X3NnZSA9IHNyY19hdHRyLT5jYXAubWF4X3JlY3Zfc2dlOwotCWRlc3RfYXR0ci0+bWF4X2lubGluZV9kYXRhID0gc3JjX2F0dHItPmNhcC5tYXhfaW5saW5lX2RhdGE7Ci0KLQlpYl91Y21fY29weV9haF9hdHRyKCZkZXN0X2F0dHItPmFoX2F0dHIsICZzcmNfYXR0ci0+YWhfYXR0cik7Ci0JaWJfdWNtX2NvcHlfYWhfYXR0cigmZGVzdF9hdHRyLT5hbHRfYWhfYXR0ciwgJnNyY19hdHRyLT5hbHRfYWhfYXR0cik7Ci0KLQlkZXN0X2F0dHItPnBrZXlfaW5kZXggPSBzcmNfYXR0ci0+cGtleV9pbmRleDsKLQlkZXN0X2F0dHItPmFsdF9wa2V5X2luZGV4ID0gc3JjX2F0dHItPmFsdF9wa2V5X2luZGV4OwotCWRlc3RfYXR0ci0+ZW5fc3FkX2FzeW5jX25vdGlmeSA9IHNyY19hdHRyLT5lbl9zcWRfYXN5bmNfbm90aWZ5OwotCWRlc3RfYXR0ci0+c3FfZHJhaW5pbmcgPSBzcmNfYXR0ci0+c3FfZHJhaW5pbmc7Ci0JZGVzdF9hdHRyLT5tYXhfcmRfYXRvbWljID0gc3JjX2F0dHItPm1heF9yZF9hdG9taWM7Ci0JZGVzdF9hdHRyLT5tYXhfZGVzdF9yZF9hdG9taWMgPSBzcmNfYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljOwotCWRlc3RfYXR0ci0+bWluX3Jucl90aW1lciA9IHNyY19hdHRyLT5taW5fcm5yX3RpbWVyOwotCWRlc3RfYXR0ci0+cG9ydF9udW0gPSBzcmNfYXR0ci0+cG9ydF9udW07Ci0JZGVzdF9hdHRyLT50aW1lb3V0ID0gc3JjX2F0dHItPnRpbWVvdXQ7Ci0JZGVzdF9hdHRyLT5yZXRyeV9jbnQgPSBzcmNfYXR0ci0+cmV0cnlfY250OwotCWRlc3RfYXR0ci0+cm5yX3JldHJ5ID0gc3JjX2F0dHItPnJucl9yZXRyeTsKLQlkZXN0X2F0dHItPmFsdF9wb3J0X251bSA9IHNyY19hdHRyLT5hbHRfcG9ydF9udW07Ci0JZGVzdF9hdHRyLT5hbHRfdGltZW91dCA9IHNyY19hdHRyLT5hbHRfdGltZW91dDsKLX0KLQogc3RhdGljIHNzaXplX3QgaWJfdWNtX2luaXRfcXBfYXR0cihzdHJ1Y3QgaWJfdWNtX2ZpbGUgKmZpbGUsCiAJCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAogCQkJCSAgIGludCBpbl9sZW4sIGludCBvdXRfbGVuKQogewotCXN0cnVjdCBpYl91Y21faW5pdF9xcF9hdHRyX3Jlc3AgcmVzcDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3FwX2F0dHIgcmVzcDsKIAlzdHJ1Y3QgaWJfdWNtX2luaXRfcXBfYXR0ciBjbWQ7CiAJc3RydWN0IGliX3VjbV9jb250ZXh0ICpjdHg7CiAJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKQEAgLTcxOCw3ICs2MzcsNyBAQAogCWlmIChyZXN1bHQpCiAJCWdvdG8gb3V0OwogCi0JaWJfdWNtX2NvcHlfcXBfYXR0cigmcmVzcCwgJnFwX2F0dHIpOworCWliX2NvcHlfcXBfYXR0cl90b191c2VyKCZyZXNwLCAmcXBfYXR0cik7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mKHJlc3ApKSkKQEAgLTcyOSw2ICs2NDgsMTcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IHVjbV92YWxpZGF0ZV9saXN0ZW4oX19iZTY0IHNlcnZpY2VfaWQsIF9fYmU2NCBzZXJ2aWNlX21hc2spCit7CisJc2VydmljZV9pZCAmPSBzZXJ2aWNlX21hc2s7CisKKwlpZiAoKChzZXJ2aWNlX2lkICYgSUJfQ01BX1NFUlZJQ0VfSURfTUFTSykgPT0gSUJfQ01BX1NFUlZJQ0VfSUQpIHx8CisJICAgICgoc2VydmljZV9pZCAmIElCX1NEUF9TRVJWSUNFX0lEX01BU0spID09IElCX1NEUF9TRVJWSUNFX0lEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNzaXplX3QgaWJfdWNtX2xpc3RlbihzdHJ1Y3QgaWJfdWNtX2ZpbGUgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKIAkJCSAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCkBAIC03NDQsNyArNjc0LDEzIEBACiAJaWYgKElTX0VSUihjdHgpKQogCQlyZXR1cm4gUFRSX0VSUihjdHgpOwogCi0JcmVzdWx0ID0gaWJfY21fbGlzdGVuKGN0eC0+Y21faWQsIGNtZC5zZXJ2aWNlX2lkLCBjbWQuc2VydmljZV9tYXNrKTsKKwlyZXN1bHQgPSB1Y21fdmFsaWRhdGVfbGlzdGVuKGNtZC5zZXJ2aWNlX2lkLCBjbWQuc2VydmljZV9tYXNrKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIG91dDsKKworCXJlc3VsdCA9IGliX2NtX2xpc3RlbihjdHgtPmNtX2lkLCBjbWQuc2VydmljZV9pZCwgY21kLnNlcnZpY2VfbWFzaywKKwkJCSAgICAgIE5VTEwpOworb3V0OgogCWliX3VjbV9jdHhfcHV0KGN0eCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc5Myw3ICs3MjksNyBAQAogCiBzdGF0aWMgaW50IGliX3VjbV9wYXRoX2dldChzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKipwYXRoLCB1NjQgc3JjKQogewotCXN0cnVjdCBpYl91Y21fcGF0aF9yZWMgdWNtX3BhdGg7CisJc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgdXBhdGg7CiAJc3RydWN0IGliX3NhX3BhdGhfcmVjICAqc2FfcGF0aDsKIAogCSpwYXRoID0gTlVMTDsKQEAgLTgwNSwzNiArNzQxLDE0IEBACiAJaWYgKCFzYV9wYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmdWNtX3BhdGgsICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXNyYywKLQkJCSAgIHNpemVvZih1Y21fcGF0aCkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1cGF0aCwgKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpc3JjLAorCQkJICAgc2l6ZW9mKHVwYXRoKSkpIHsKIAogCQlrZnJlZShzYV9wYXRoKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JbWVtY3B5KHNhX3BhdGgtPmRnaWQucmF3LCB1Y21fcGF0aC5kZ2lkLCBzaXplb2Ygc2FfcGF0aC0+ZGdpZCk7Ci0JbWVtY3B5KHNhX3BhdGgtPnNnaWQucmF3LCB1Y21fcGF0aC5zZ2lkLCBzaXplb2Ygc2FfcGF0aC0+c2dpZCk7Ci0KLQlzYV9wYXRoLT5kbGlkCSAgICAgICAgICA9IHVjbV9wYXRoLmRsaWQ7Ci0Jc2FfcGF0aC0+c2xpZAkgICAgICAgICAgPSB1Y21fcGF0aC5zbGlkOwotCXNhX3BhdGgtPnJhd190cmFmZmljICAgICAgPSB1Y21fcGF0aC5yYXdfdHJhZmZpYzsKLQlzYV9wYXRoLT5mbG93X2xhYmVsICAgICAgID0gdWNtX3BhdGguZmxvd19sYWJlbDsKLQlzYV9wYXRoLT5ob3BfbGltaXQgICAgICAgID0gdWNtX3BhdGguaG9wX2xpbWl0OwotCXNhX3BhdGgtPnRyYWZmaWNfY2xhc3MgICAgPSB1Y21fcGF0aC50cmFmZmljX2NsYXNzOwotCXNhX3BhdGgtPnJldmVyc2libGUgICAgICAgPSB1Y21fcGF0aC5yZXZlcnNpYmxlOwotCXNhX3BhdGgtPm51bWJfcGF0aCAgICAgICAgPSB1Y21fcGF0aC5udW1iX3BhdGg7Ci0Jc2FfcGF0aC0+cGtleSAgICAgICAgICAgICA9IHVjbV9wYXRoLnBrZXk7Ci0Jc2FfcGF0aC0+c2wgICAgICAgICAgICAgICA9IHVjbV9wYXRoLnNsOwotCXNhX3BhdGgtPm10dV9zZWxlY3RvciAgICAgPSB1Y21fcGF0aC5tdHVfc2VsZWN0b3I7Ci0Jc2FfcGF0aC0+bXR1ICAgICAgICAgICAgICA9IHVjbV9wYXRoLm10dTsKLQlzYV9wYXRoLT5yYXRlX3NlbGVjdG9yICAgID0gdWNtX3BhdGgucmF0ZV9zZWxlY3RvcjsKLQlzYV9wYXRoLT5yYXRlICAgICAgICAgICAgID0gdWNtX3BhdGgucmF0ZTsKLQlzYV9wYXRoLT5wYWNrZXRfbGlmZV90aW1lID0gdWNtX3BhdGgucGFja2V0X2xpZmVfdGltZTsKLQlzYV9wYXRoLT5wcmVmZXJlbmNlICAgICAgID0gdWNtX3BhdGgucHJlZmVyZW5jZTsKLQotCXNhX3BhdGgtPnBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3IgPQotCQl1Y21fcGF0aC5wYWNrZXRfbGlmZV90aW1lX3NlbGVjdG9yOwotCisJaWJfY29weV9wYXRoX3JlY19mcm9tX3VzZXIoc2FfcGF0aCwgJnVwYXRoKTsKIAkqcGF0aCA9IHNhX3BhdGg7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTMwLDcgKzEwNDQsNiBAQAogCXBhcmFtLnNlcnZpY2VfaWQgICAgICAgPSBjbWQuc2lkOwogCXBhcmFtLnRpbWVvdXRfbXMgICAgICAgPSBjbWQudGltZW91dDsKIAlwYXJhbS5tYXhfY21fcmV0cmllcyAgID0gY21kLm1heF9jbV9yZXRyaWVzOwotCXBhcmFtLnBrZXkgICAgICAgICAgICAgPSBjbWQucGtleTsKIAogCWN0eCA9IGliX3VjbV9jdHhfZ2V0KGZpbGUsIGNtZC5pZCk7CiAJaWYgKCFJU19FUlIoY3R4KSkgewpAQCAtMTI2Myw3ICsxMTc2LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZmlsZS0+Y3R4cyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZmlsZS0+cG9sbF93YWl0KTsKIAotCWluaXRfTVVURVgoJmZpbGUtPm11dGV4KTsKKwltdXRleF9pbml0KCZmaWxlLT5maWxlX211dGV4KTsKIAogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZpbGU7CiAJZmlsZS0+ZmlscCA9IGZpbHA7CkBAIC0xMjc3LDExICsxMTkwLDExIEBACiAJc3RydWN0IGliX3VjbV9maWxlICpmaWxlID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpYl91Y21fY29udGV4dCAqY3R4OwogCi0JZG93bigmZmlsZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJmZpbGUtPmZpbGVfbXV0ZXgpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZmlsZS0+Y3R4cykpIHsKIAkJY3R4ID0gbGlzdF9lbnRyeShmaWxlLT5jdHhzLm5leHQsCiAJCQkJIHN0cnVjdCBpYl91Y21fY29udGV4dCwgZmlsZV9saXN0KTsKLQkJdXAoJmZpbGUtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAogCQltdXRleF9sb2NrKCZjdHhfaWRfbXV0ZXgpOwogCQlpZHJfcmVtb3ZlKCZjdHhfaWRfdGFibGUsIGN0eC0+aWQpOwpAQCAtMTI5MSw5ICsxMjA0LDkgQEAKIAkJaWJfdWNtX2NsZWFudXBfZXZlbnRzKGN0eCk7CiAJCWtmcmVlKGN0eCk7CiAKLQkJZG93bigmZmlsZS0+bXV0ZXgpOworCQltdXRleF9sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAl9Ci0JdXAoJmZpbGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmZpbGUtPmZpbGVfbXV0ZXgpOwogCWtmcmVlKGZpbGUpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAppbmRleCAzMzcyZDY3Li5iYjliZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAJdTMyCQkJYXN5bmNfZXZlbnRzX3JlcG9ydGVkOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBtdXRleCBpYl91dmVyYnNfaWRyX211dGV4OworZXh0ZXJuIHNwaW5sb2NrX3QgaWJfdXZlcmJzX2lkcl9sb2NrOwogZXh0ZXJuIHN0cnVjdCBpZHIgaWJfdXZlcmJzX3BkX2lkcjsKIGV4dGVybiBzdHJ1Y3QgaWRyIGliX3V2ZXJic19tcl9pZHI7CiBleHRlcm4gc3RydWN0IGlkciBpYl91dmVyYnNfbXdfaWRyOwpAQCAtMTQxLDYgKzE0MSw4IEBACiBleHRlcm4gc3RydWN0IGlkciBpYl91dmVyYnNfcXBfaWRyOwogZXh0ZXJuIHN0cnVjdCBpZHIgaWJfdXZlcmJzX3NycV9pZHI7CiAKK3ZvaWQgaWRyX3JlbW92ZV91b2JqKHN0cnVjdCBpZHIgKmlkcCwgc3RydWN0IGliX3VvYmplY3QgKnVvYmopOworCiBzdHJ1Y3QgZmlsZSAqaWJfdXZlcmJzX2FsbG9jX2V2ZW50X2ZpbGUoc3RydWN0IGliX3V2ZXJic19maWxlICp1dmVyYnNfZmlsZSwKIAkJCQkJaW50IGlzX2FzeW5jLCBpbnQgKmZkKTsKIHZvaWQgaWJfdXZlcmJzX3JlbGVhc2VfZXZlbnRfZmlsZShzdHJ1Y3Qga3JlZiAqcmVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwppbmRleCA5ZjY5YmQ0OC4uNzZiZjYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwpAQCAtNTAsNiArNTAsMTk2IEBACiAJCSh1ZGF0YSktPm91dGxlbiA9IChvbGVuKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKKy8qCisgKiBUaGUgaWJfdW9iamVjdCBsb2NraW5nIHNjaGVtZSBpcyBhcyBmb2xsb3dzOgorICoKKyAqIC0gaWJfdXZlcmJzX2lkcl9sb2NrIHByb3RlY3RzIHRoZSB1dmVyYnMgaWRycyB0aGVtc2VsdmVzLCBzbyBpdAorICogICBuZWVkcyB0byBiZSBoZWxkIGR1cmluZyBhbGwgaWRyIG9wZXJhdGlvbnMuICBXaGVuIGFuIG9iamVjdCBpcworICogICBsb29rZWQgdXAsIGEgcmVmZXJlbmNlIG11c3QgYmUgdGFrZW4gb24gdGhlIG9iamVjdCdzIGtyZWYgYmVmb3JlCisgKiAgIGRyb3BwaW5nIHRoaXMgbG9jay4KKyAqCisgKiAtIEVhY2ggb2JqZWN0IGFsc28gaGFzIGFuIHJ3c2VtLiAgVGhpcyByd3NlbSBtdXN0IGJlIGhlbGQgZm9yCisgKiAgIHJlYWRpbmcgd2hpbGUgYW4gb3BlcmF0aW9uIHRoYXQgdXNlcyB0aGUgb2JqZWN0IGlzIHBlcmZvcm1lZC4KKyAqICAgRm9yIGV4YW1wbGUsIHdoaWxlIHJlZ2lzdGVyaW5nIGFuIE1SLCB0aGUgYXNzb2NpYXRlZCBQRCdzCisgKiAgIHVvYmplY3QubXV0ZXggbXVzdCBiZSBoZWxkIGZvciByZWFkaW5nLiAgVGhlIHJ3c2VtIG11c3QgYmUgaGVsZAorICogICBmb3Igd3JpdGluZyB3aGlsZSBpbml0aWFsaXppbmcgb3IgZGVzdHJveWluZyBhbiBvYmplY3QuCisgKgorICogLSBJbiBhZGRpdGlvbiwgZWFjaCBvYmplY3QgaGFzIGEgImxpdmUiIGZsYWcuICBJZiB0aGlzIGZsYWcgaXMgbm90CisgKiAgIHNldCwgdGhlbiBsb29rdXBzIG9mIHRoZSBvYmplY3Qgd2lsbCBmYWlsIGV2ZW4gaWYgaXQgaXMgZm91bmQgaW4KKyAqICAgdGhlIGlkci4gIFRoaXMgaGFuZGxlcyBhIHJlYWRlciB0aGF0IGJsb2NrcyBhbmQgZG9lcyBub3QgYWNxdWlyZQorICogICB0aGUgcndzZW0gdW50aWwgYWZ0ZXIgdGhlIG9iamVjdCBpcyBkZXN0cm95ZWQuICBUaGUgZGVzdHJveQorICogICBvcGVyYXRpb24gd2lsbCBzZXQgdGhlIGxpdmUgZmxhZyB0byAwIGFuZCB0aGVuIGRyb3AgdGhlIHJ3c2VtOworICogICB0aGlzIHdpbGwgYWxsb3cgdGhlIHJlYWRlciB0byBhY3F1aXJlIHRoZSByd3NlbSwgc2VlIHRoYXQgdGhlCisgKiAgIGxpdmUgZmxhZyBpcyAwLCBhbmQgdGhlbiBkcm9wIHRoZSByd3NlbSBhbmQgaXRzIHJlZmVyZW5jZSB0bworICogICBvYmplY3QuICBUaGUgdW5kZXJseWluZyBzdG9yYWdlIHdpbGwgbm90IGJlIGZyZWVkIHVudGlsIHRoZSBsYXN0CisgKiAgIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGlzIGRyb3BwZWQuCisgKi8KKworc3RhdGljIHZvaWQgaW5pdF91b2JqKHN0cnVjdCBpYl91b2JqZWN0ICp1b2JqLCB1NjQgdXNlcl9oYW5kbGUsCisJCSAgICAgIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwl1b2JqLT51c2VyX2hhbmRsZSA9IHVzZXJfaGFuZGxlOworCXVvYmotPmNvbnRleHQgICAgID0gY29udGV4dDsKKwlrcmVmX2luaXQoJnVvYmotPnJlZik7CisJaW5pdF9yd3NlbSgmdW9iai0+bXV0ZXgpOworCXVvYmotPmxpdmUgICAgICAgID0gMDsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV91b2JqKHN0cnVjdCBrcmVmICprcmVmKQoreworCWtmcmVlKGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaWJfdW9iamVjdCwgcmVmKSk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF91b2JqKHN0cnVjdCBpYl91b2JqZWN0ICp1b2JqKQoreworCWtyZWZfcHV0KCZ1b2JqLT5yZWYsIHJlbGVhc2VfdW9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF91b2JqX3JlYWQoc3RydWN0IGliX3VvYmplY3QgKnVvYmopCit7CisJdXBfcmVhZCgmdW9iai0+bXV0ZXgpOworCXB1dF91b2JqKHVvYmopOworfQorCitzdGF0aWMgdm9pZCBwdXRfdW9ial93cml0ZShzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iaikKK3sKKwl1cF93cml0ZSgmdW9iai0+bXV0ZXgpOworCXB1dF91b2JqKHVvYmopOworfQorCitzdGF0aWMgaW50IGlkcl9hZGRfdW9iaihzdHJ1Y3QgaWRyICppZHIsIHN0cnVjdCBpYl91b2JqZWN0ICp1b2JqKQoreworCWludCByZXQ7CisKK3JldHJ5OgorCWlmICghaWRyX3ByZV9nZXQoaWRyLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmliX3V2ZXJic19pZHJfbG9jayk7CisJcmV0ID0gaWRyX2dldF9uZXcoaWRyLCB1b2JqLCAmdW9iai0+aWQpOworCXNwaW5fdW5sb2NrKCZpYl91dmVyYnNfaWRyX2xvY2spOworCisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIHJldHJ5OworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpZHJfcmVtb3ZlX3VvYmooc3RydWN0IGlkciAqaWRyLCBzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iaikKK3sKKwlzcGluX2xvY2soJmliX3V2ZXJic19pZHJfbG9jayk7CisJaWRyX3JlbW92ZShpZHIsIHVvYmotPmlkKTsKKwlzcGluX3VubG9jaygmaWJfdXZlcmJzX2lkcl9sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBpYl91b2JqZWN0ICpfX2lkcl9nZXRfdW9iaihzdHJ1Y3QgaWRyICppZHIsIGludCBpZCwKKwkJCQkJIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iajsKKworCXNwaW5fbG9jaygmaWJfdXZlcmJzX2lkcl9sb2NrKTsKKwl1b2JqID0gaWRyX2ZpbmQoaWRyLCBpZCk7CisJaWYgKHVvYmopCisJCWtyZWZfZ2V0KCZ1b2JqLT5yZWYpOworCXNwaW5fdW5sb2NrKCZpYl91dmVyYnNfaWRyX2xvY2spOworCisJcmV0dXJuIHVvYmo7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfdW9iamVjdCAqaWRyX3JlYWRfdW9iaihzdHJ1Y3QgaWRyICppZHIsIGludCBpZCwKKwkJCQkJc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBpYl91b2JqZWN0ICp1b2JqOworCisJdW9iaiA9IF9faWRyX2dldF91b2JqKGlkciwgaWQsIGNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIE5VTEw7CisKKwlkb3duX3JlYWQoJnVvYmotPm11dGV4KTsKKwlpZiAoIXVvYmotPmxpdmUpIHsKKwkJcHV0X3VvYmpfcmVhZCh1b2JqKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHVvYmo7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfdW9iamVjdCAqaWRyX3dyaXRlX3VvYmooc3RydWN0IGlkciAqaWRyLCBpbnQgaWQsCisJCQkJCSBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGliX3VvYmplY3QgKnVvYmo7CisKKwl1b2JqID0gX19pZHJfZ2V0X3VvYmooaWRyLCBpZCwgY29udGV4dCk7CisJaWYgKCF1b2JqKQorCQlyZXR1cm4gTlVMTDsKKworCWRvd25fd3JpdGUoJnVvYmotPm11dGV4KTsKKwlpZiAoIXVvYmotPmxpdmUpIHsKKwkJcHV0X3VvYmpfd3JpdGUodW9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiB1b2JqOworfQorCitzdGF0aWMgdm9pZCAqaWRyX3JlYWRfb2JqKHN0cnVjdCBpZHIgKmlkciwgaW50IGlkLCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGliX3VvYmplY3QgKnVvYmo7CisKKwl1b2JqID0gaWRyX3JlYWRfdW9iaihpZHIsIGlkLCBjb250ZXh0KTsKKwlyZXR1cm4gdW9iaiA/IHVvYmotPm9iamVjdCA6IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfcGQgKmlkcl9yZWFkX3BkKGludCBwZF9oYW5kbGUsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfcGRfaWRyLCBwZF9oYW5kbGUsIGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBwdXRfcGRfcmVhZChzdHJ1Y3QgaWJfcGQgKnBkKQoreworCXB1dF91b2JqX3JlYWQocGQtPnVvYmplY3QpOworfQorCitzdGF0aWMgc3RydWN0IGliX2NxICppZHJfcmVhZF9jcShpbnQgY3FfaGFuZGxlLCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIGlkcl9yZWFkX29iaigmaWJfdXZlcmJzX2NxX2lkciwgY3FfaGFuZGxlLCBjb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgcHV0X2NxX3JlYWQoc3RydWN0IGliX2NxICpjcSkKK3sKKwlwdXRfdW9ial9yZWFkKGNxLT51b2JqZWN0KTsKK30KKworc3RhdGljIHN0cnVjdCBpYl9haCAqaWRyX3JlYWRfYWgoaW50IGFoX2hhbmRsZSwgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCXJldHVybiBpZHJfcmVhZF9vYmooJmliX3V2ZXJic19haF9pZHIsIGFoX2hhbmRsZSwgY29udGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9haF9yZWFkKHN0cnVjdCBpYl9haCAqYWgpCit7CisJcHV0X3VvYmpfcmVhZChhaC0+dW9iamVjdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfcXAgKmlkcl9yZWFkX3FwKGludCBxcF9oYW5kbGUsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfcXBfaWRyLCBxcF9oYW5kbGUsIGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBwdXRfcXBfcmVhZChzdHJ1Y3QgaWJfcXAgKnFwKQoreworCXB1dF91b2JqX3JlYWQocXAtPnVvYmplY3QpOworfQorCitzdGF0aWMgc3RydWN0IGliX3NycSAqaWRyX3JlYWRfc3JxKGludCBzcnFfaGFuZGxlLCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIGlkcl9yZWFkX29iaigmaWJfdXZlcmJzX3NycV9pZHIsIHNycV9oYW5kbGUsIGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBwdXRfc3JxX3JlYWQoc3RydWN0IGliX3NycSAqc3JxKQoreworCXB1dF91b2JqX3JlYWQoc3JxLT51b2JqZWN0KTsKK30KKwogc3NpemVfdCBpYl91dmVyYnNfZ2V0X2NvbnRleHQoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAogCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgIGludCBpbl9sZW4sIGludCBvdXRfbGVuKQpAQCAtODAsOCArMjcwLDEwIEBACiAJCSAgIGluX2xlbiAtIHNpemVvZiBjbWQsIG91dF9sZW4gLSBzaXplb2YgcmVzcCk7CiAKIAl1Y29udGV4dCA9IGliZGV2LT5hbGxvY191Y29udGV4dChpYmRldiwgJnVkYXRhKTsKLQlpZiAoSVNfRVJSKHVjb250ZXh0KSkKLQkJcmV0dXJuIFBUUl9FUlIoZmlsZS0+dWNvbnRleHQpOworCWlmIChJU19FUlIodWNvbnRleHQpKSB7CisJCXJldCA9IFBUUl9FUlIoZmlsZS0+dWNvbnRleHQpOworCQlnb3RvIGVycjsKKwl9CiAKIAl1Y29udGV4dC0+ZGV2aWNlID0gaWJkZXY7CiAJSU5JVF9MSVNUX0hFQUQoJnVjb250ZXh0LT5wZF9saXN0KTsKQEAgLTI3OCw3ICs0NzAsOCBAQAogCWlmICghdW9iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl1b2JqLT5jb250ZXh0ID0gZmlsZS0+dWNvbnRleHQ7CisJaW5pdF91b2JqKHVvYmosIDAsIGZpbGUtPnVjb250ZXh0KTsKKwlkb3duX3dyaXRlKCZ1b2JqLT5tdXRleCk7CiAKIAlwZCA9IGZpbGUtPmRldmljZS0+aWJfZGV2LT5hbGxvY19wZChmaWxlLT5kZXZpY2UtPmliX2RldiwKIAkJCQkJICAgIGZpbGUtPnVjb250ZXh0LCAmdWRhdGEpOwpAQCAtMjkxLDIwICs0ODQsMTAgQEAKIAlwZC0+dW9iamVjdCA9IHVvYmo7CiAJYXRvbWljX3NldCgmcGQtPnVzZWNudCwgMCk7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotcmV0cnk6Ci0JaWYgKCFpZHJfcHJlX2dldCgmaWJfdXZlcmJzX3BkX2lkciwgR0ZQX0tFUk5FTCkpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfdXA7Ci0JfQotCi0JcmV0ID0gaWRyX2dldF9uZXcoJmliX3V2ZXJic19wZF9pZHIsIHBkLCAmdW9iai0+aWQpOwotCi0JaWYgKHJldCA9PSAtRUFHQUlOKQotCQlnb3RvIHJldHJ5OworCXVvYmotPm9iamVjdCA9IHBkOworCXJldCA9IGlkcl9hZGRfdW9iaigmaWJfdXZlcmJzX3BkX2lkciwgdW9iaik7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfdXA7CisJCWdvdG8gZXJyX2lkcjsKIAogCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOwogCXJlc3AucGRfaGFuZGxlID0gdW9iai0+aWQ7CkBAIC0zMTIsMjYgKzQ5NSwyNyBAQAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkgewogCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9pZHI7CisJCWdvdG8gZXJyX2NvcHk7CiAJfQogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJnVvYmotPmxpc3QsICZmaWxlLT51Y29udGV4dC0+cGRfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXVvYmotPmxpdmUgPSAxOworCisJdXBfd3JpdGUoJnVvYmotPm11dGV4KTsKIAogCXJldHVybiBpbl9sZW47CiAKLWVycl9pZHI6Ci0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3BkX2lkciwgdW9iai0+aWQpOworZXJyX2NvcHk6CisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfcGRfaWRyLCB1b2JqKTsKIAotZXJyX3VwOgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CitlcnJfaWRyOgogCWliX2RlYWxsb2NfcGQocGQpOwogCiBlcnI6Ci0Ja2ZyZWUodW9iaik7CisJcHV0X3VvYmpfd3JpdGUodW9iaik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQwLDM3ICs1MjQsMzQgQEAKIAkJCSAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCiB7CiAJc3RydWN0IGliX3V2ZXJic19kZWFsbG9jX3BkIGNtZDsKLQlzdHJ1Y3QgaWJfcGQgICAgICAgICAgICAgICAqcGQ7CiAJc3RydWN0IGliX3VvYmplY3QgICAgICAgICAgKnVvYmo7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXVvYmogPSBpZHJfd3JpdGVfdW9iaigmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwZCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcGRfaWRyLCBjbWQucGRfaGFuZGxlKTsKLQlpZiAoIXBkIHx8IHBkLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KQotCQlnb3RvIG91dDsKKwlyZXQgPSBpYl9kZWFsbG9jX3BkKHVvYmotPm9iamVjdCk7CisJaWYgKCFyZXQpCisJCXVvYmotPmxpdmUgPSAwOwogCi0JdW9iaiA9IHBkLT51b2JqZWN0OworCXB1dF91b2JqX3dyaXRlKHVvYmopOwogCi0JcmV0ID0gaWJfZGVhbGxvY19wZChwZCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCXJldHVybiByZXQ7CiAKLQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfcGRfaWRyLCBjbWQucGRfaGFuZGxlKTsKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19wZF9pZHIsIHVvYmopOwogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwogCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKIAltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIAotCWtmcmVlKHVvYmopOworCXB1dF91b2JqKHVvYmopOwogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47CisJcmV0dXJuIGluX2xlbjsKIH0KIAogc3NpemVfdCBpYl91dmVyYnNfcmVnX21yKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKQEAgLTQxMCw3ICs1OTEsOCBAQAogCWlmICghb2JqKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW9iai0+dW9iamVjdC5jb250ZXh0ID0gZmlsZS0+dWNvbnRleHQ7CisJaW5pdF91b2JqKCZvYmotPnVvYmplY3QsIDAsIGZpbGUtPnVjb250ZXh0KTsKKwlkb3duX3dyaXRlKCZvYmotPnVvYmplY3QubXV0ZXgpOwogCiAJLyoKIAkgKiBXZSBhc2sgZm9yIHdyaXRhYmxlIG1lbW9yeSBpZiBhbnkgYWNjZXNzIGZsYWdzIG90aGVyIHRoYW4KQEAgLTQyNywyMyArNjA5LDE0IEBACiAKIAlvYmotPnVtZW0udmlydF9iYXNlID0gY21kLmhjYV92YTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JcGQgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7Ci0JaWYgKCFwZCB8fCBwZC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl91cDsKLQl9Ci0KLQlpZiAoIXBkLT5kZXZpY2UtPnJlZ191c2VyX21yKSB7Ci0JCXJldCA9IC1FTk9TWVM7Ci0JCWdvdG8gZXJyX3VwOwotCX0KKwlwZCA9IGlkcl9yZWFkX3BkKGNtZC5wZF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXBkKQorCQlnb3RvIGVycl9yZWxlYXNlOwogCiAJbXIgPSBwZC0+ZGV2aWNlLT5yZWdfdXNlcl9tcihwZCwgJm9iai0+dW1lbSwgY21kLmFjY2Vzc19mbGFncywgJnVkYXRhKTsKIAlpZiAoSVNfRVJSKG1yKSkgewogCQlyZXQgPSBQVFJfRVJSKG1yKTsKLQkJZ290byBlcnJfdXA7CisJCWdvdG8gZXJyX3B1dDsKIAl9CiAKIAltci0+ZGV2aWNlICA9IHBkLT5kZXZpY2U7CkBAIC00NTIsNTMgKzYyNSw0OCBAQAogCWF0b21pY19pbmMoJnBkLT51c2VjbnQpOwogCWF0b21pY19zZXQoJm1yLT51c2VjbnQsIDApOwogCi0JbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7Ci0JcmVzcC5sa2V5ID0gbXItPmxrZXk7Ci0JcmVzcC5ya2V5ID0gbXItPnJrZXk7Ci0KLXJldHJ5OgotCWlmICghaWRyX3ByZV9nZXQoJmliX3V2ZXJic19tcl9pZHIsIEdGUF9LRVJORUwpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VucmVnOwotCX0KLQotCXJldCA9IGlkcl9nZXRfbmV3KCZpYl91dmVyYnNfbXJfaWRyLCBtciwgJm9iai0+dW9iamVjdC5pZCk7Ci0KLQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCWdvdG8gcmV0cnk7CisJb2JqLT51b2JqZWN0Lm9iamVjdCA9IG1yOworCXJldCA9IGlkcl9hZGRfdW9iaigmaWJfdXZlcmJzX21yX2lkciwgJm9iai0+dW9iamVjdCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfdW5yZWc7CiAKKwltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKKwlyZXNwLmxrZXkgICAgICA9IG1yLT5sa2V5OworCXJlc3AucmtleSAgICAgID0gbXItPnJrZXk7CiAJcmVzcC5tcl9oYW5kbGUgPSBvYmotPnVvYmplY3QuaWQ7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBlcnJfaWRyOworCQlnb3RvIGVycl9jb3B5OwogCX0KIAorCXB1dF9wZF9yZWFkKHBkKTsKKwogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZvYmotPnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5tcl9saXN0KTsKIAltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIAotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJb2JqLT51b2JqZWN0LmxpdmUgPSAxOworCisJdXBfd3JpdGUoJm9iai0+dW9iamVjdC5tdXRleCk7CiAKIAlyZXR1cm4gaW5fbGVuOwogCi1lcnJfaWRyOgotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19tcl9pZHIsIG9iai0+dW9iamVjdC5pZCk7CitlcnJfY29weToKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19tcl9pZHIsICZvYmotPnVvYmplY3QpOwogCiBlcnJfdW5yZWc6CiAJaWJfZGVyZWdfbXIobXIpOwotCWF0b21pY19kZWMoJnBkLT51c2VjbnQpOwogCi1lcnJfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKK2Vycl9wdXQ6CisJcHV0X3BkX3JlYWQocGQpOwogCitlcnJfcmVsZWFzZToKIAlpYl91bWVtX3JlbGVhc2UoZmlsZS0+ZGV2aWNlLT5pYl9kZXYsICZvYmotPnVtZW0pOwogCiBlcnJfZnJlZToKLQlrZnJlZShvYmopOworCXB1dF91b2JqX3dyaXRlKCZvYmotPnVvYmplY3QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTUwOCwzNyArNjc2LDQwIEBACiB7CiAJc3RydWN0IGliX3V2ZXJic19kZXJlZ19tciBjbWQ7CiAJc3RydWN0IGliX21yICAgICAgICAgICAgICptcjsKKwlzdHJ1Y3QgaWJfdW9iamVjdAkgKnVvYmo7CiAJc3RydWN0IGliX3VtZW1fb2JqZWN0ICAgICptZW1vYmo7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJdW9iaiA9IGlkcl93cml0ZV91b2JqKCZpYl91dmVyYnNfbXJfaWRyLCBjbWQubXJfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCF1b2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1yID0gaWRyX2ZpbmQoJmliX3V2ZXJic19tcl9pZHIsIGNtZC5tcl9oYW5kbGUpOwotCWlmICghbXIgfHwgbXItPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCi0JCWdvdG8gb3V0OwotCi0JbWVtb2JqID0gY29udGFpbmVyX29mKG1yLT51b2JqZWN0LCBzdHJ1Y3QgaWJfdW1lbV9vYmplY3QsIHVvYmplY3QpOworCW1lbW9iaiA9IGNvbnRhaW5lcl9vZih1b2JqLCBzdHJ1Y3QgaWJfdW1lbV9vYmplY3QsIHVvYmplY3QpOworCW1yICAgICA9IHVvYmotPm9iamVjdDsKIAogCXJldCA9IGliX2RlcmVnX21yKG1yKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKKwlpZiAoIXJldCkKKwkJdW9iai0+bGl2ZSA9IDA7CiAKLQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfbXJfaWRyLCBjbWQubXJfaGFuZGxlKTsKKwlwdXRfdW9ial93cml0ZSh1b2JqKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19tcl9pZHIsIHVvYmopOwogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwotCWxpc3RfZGVsKCZtZW1vYmotPnVvYmplY3QubGlzdCk7CisJbGlzdF9kZWwoJnVvYmotPmxpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCiAJaWJfdW1lbV9yZWxlYXNlKGZpbGUtPmRldmljZS0+aWJfZGV2LCAmbWVtb2JqLT51bWVtKTsKLQlrZnJlZShtZW1vYmopOwogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlwdXRfdW9iaih1b2JqKTsKIAotCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47CisJcmV0dXJuIGluX2xlbjsKIH0KIAogc3NpemVfdCBpYl91dmVyYnNfY3JlYXRlX2NvbXBfY2hhbm5lbChzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCkBAIC01NzcsNyArNzQ4LDcgQEAKIAlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jcSAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jcV9yZXNwIHJlc3A7CiAJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgICAgICB1ZGF0YTsKLQlzdHJ1Y3QgaWJfdWNxX29iamVjdCAgICAgICAgICAgKnVvYmo7CisJc3RydWN0IGliX3VjcV9vYmplY3QgICAgICAgICAgICpvYmo7CiAJc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlICAgICpldl9maWxlID0gTlVMTDsKIAlzdHJ1Y3QgaWJfY3EgICAgICAgICAgICAgICAgICAgKmNxOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwpAQCAtNTk1LDEwICs3NjYsMTMgQEAKIAlpZiAoY21kLmNvbXBfdmVjdG9yID49IGZpbGUtPmRldmljZS0+bnVtX2NvbXBfdmVjdG9ycykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl1b2JqID0ga21hbGxvYyhzaXplb2YgKnVvYmosIEdGUF9LRVJORUwpOwotCWlmICghdW9iaikKKwlvYmogPSBrbWFsbG9jKHNpemVvZiAqb2JqLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpbml0X3VvYmooJm9iai0+dW9iamVjdCwgY21kLnVzZXJfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJZG93bl93cml0ZSgmb2JqLT51b2JqZWN0Lm11dGV4KTsKKwogCWlmIChjbWQuY29tcF9jaGFubmVsID49IDApIHsKIAkJZXZfZmlsZSA9IGliX3V2ZXJic19sb29rdXBfY29tcF9maWxlKGNtZC5jb21wX2NoYW5uZWwpOwogCQlpZiAoIWV2X2ZpbGUpIHsKQEAgLTYwNyw3MiArNzgxLDY0IEBACiAJCX0KIAl9CiAKLQl1b2JqLT51b2JqZWN0LnVzZXJfaGFuZGxlICAgPSBjbWQudXNlcl9oYW5kbGU7Ci0JdW9iai0+dW9iamVjdC5jb250ZXh0ICAgICAgID0gZmlsZS0+dWNvbnRleHQ7Ci0JdW9iai0+dXZlcmJzX2ZpbGUJICAgID0gZmlsZTsKLQl1b2JqLT5jb21wX2V2ZW50c19yZXBvcnRlZCAgPSAwOwotCXVvYmotPmFzeW5jX2V2ZW50c19yZXBvcnRlZCA9IDA7Ci0JSU5JVF9MSVNUX0hFQUQoJnVvYmotPmNvbXBfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnVvYmotPmFzeW5jX2xpc3QpOworCW9iai0+dXZlcmJzX2ZpbGUJICAgPSBmaWxlOworCW9iai0+Y29tcF9ldmVudHNfcmVwb3J0ZWQgID0gMDsKKwlvYmotPmFzeW5jX2V2ZW50c19yZXBvcnRlZCA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+Y29tcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqLT5hc3luY19saXN0KTsKIAogCWNxID0gZmlsZS0+ZGV2aWNlLT5pYl9kZXYtPmNyZWF0ZV9jcShmaWxlLT5kZXZpY2UtPmliX2RldiwgY21kLmNxZSwKIAkJCQkJICAgICBmaWxlLT51Y29udGV4dCwgJnVkYXRhKTsKIAlpZiAoSVNfRVJSKGNxKSkgewogCQlyZXQgPSBQVFJfRVJSKGNxKTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2ZpbGU7CiAJfQogCiAJY3EtPmRldmljZSAgICAgICAgPSBmaWxlLT5kZXZpY2UtPmliX2RldjsKLQljcS0+dW9iamVjdCAgICAgICA9ICZ1b2JqLT51b2JqZWN0OworCWNxLT51b2JqZWN0ICAgICAgID0gJm9iai0+dW9iamVjdDsKIAljcS0+Y29tcF9oYW5kbGVyICA9IGliX3V2ZXJic19jb21wX2hhbmRsZXI7CiAJY3EtPmV2ZW50X2hhbmRsZXIgPSBpYl91dmVyYnNfY3FfZXZlbnRfaGFuZGxlcjsKIAljcS0+Y3FfY29udGV4dCAgICA9IGV2X2ZpbGU7CiAJYXRvbWljX3NldCgmY3EtPnVzZWNudCwgMCk7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotcmV0cnk6Ci0JaWYgKCFpZHJfcHJlX2dldCgmaWJfdXZlcmJzX2NxX2lkciwgR0ZQX0tFUk5FTCkpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfdXA7Ci0JfQotCi0JcmV0ID0gaWRyX2dldF9uZXcoJmliX3V2ZXJic19jcV9pZHIsIGNxLCAmdW9iai0+dW9iamVjdC5pZCk7Ci0KLQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCWdvdG8gcmV0cnk7CisJb2JqLT51b2JqZWN0Lm9iamVjdCA9IGNxOworCXJldCA9IGlkcl9hZGRfdW9iaigmaWJfdXZlcmJzX2NxX2lkciwgJm9iai0+dW9iamVjdCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfdXA7CisJCWdvdG8gZXJyX2ZyZWU7CiAKIAltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKLQlyZXNwLmNxX2hhbmRsZSA9IHVvYmotPnVvYmplY3QuaWQ7CisJcmVzcC5jcV9oYW5kbGUgPSBvYmotPnVvYmplY3QuaWQ7CiAJcmVzcC5jcWUgICAgICAgPSBjcS0+Y3FlOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CiAJCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX2lkcjsKKwkJZ290byBlcnJfY29weTsKIAl9CiAKIAltdXRleF9sb2NrKCZmaWxlLT5tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmdW9iai0+dW9iamVjdC5saXN0LCAmZmlsZS0+dWNvbnRleHQtPmNxX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJm9iai0+dW9iamVjdC5saXN0LCAmZmlsZS0+dWNvbnRleHQtPmNxX2xpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlvYmotPnVvYmplY3QubGl2ZSA9IDE7CisKKwl1cF93cml0ZSgmb2JqLT51b2JqZWN0Lm11dGV4KTsKIAogCXJldHVybiBpbl9sZW47CiAKLWVycl9pZHI6Ci0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX2NxX2lkciwgdW9iai0+dW9iamVjdC5pZCk7CitlcnJfY29weToKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19jcV9pZHIsICZvYmotPnVvYmplY3QpOwogCi1lcnJfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworZXJyX2ZyZWU6CiAJaWJfZGVzdHJveV9jcShjcSk7CiAKLWVycjoKK2Vycl9maWxlOgogCWlmIChldl9maWxlKQotCQlpYl91dmVyYnNfcmVsZWFzZV91Y3EoZmlsZSwgZXZfZmlsZSwgdW9iaik7Ci0Ja2ZyZWUodW9iaik7CisJCWliX3V2ZXJic19yZWxlYXNlX3VjcShmaWxlLCBldl9maWxlLCBvYmopOworCitlcnI6CisJcHV0X3VvYmpfd3JpdGUoJm9iai0+dW9iamVjdCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjkzLDExICs4NTksOSBAQAogCQkgICAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlICsgc2l6ZW9mIHJlc3AsCiAJCSAgIGluX2xlbiAtIHNpemVvZiBjbWQsIG91dF9sZW4gLSBzaXplb2YgcmVzcCk7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCWNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5jcV9oYW5kbGUpOwotCWlmICghY3EgfHwgY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQgfHwgIWNxLT5kZXZpY2UtPnJlc2l6ZV9jcSkKLQkJZ290byBvdXQ7CisJY3EgPSBpZHJfcmVhZF9jcShjbWQuY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCFjcSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBjcS0+ZGV2aWNlLT5yZXNpemVfY3EoY3EsIGNtZC5jcWUsICZ1ZGF0YSk7CiAJaWYgKHJldCkKQEAgLTcxMSw3ICs4NzUsNyBAQAogCQlyZXQgPSAtRUZBVUxUOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlwdXRfY3FfcmVhZChjcSk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOwogfQpAQCAtNzIyLDYgKzg4Niw3IEBACiB7CiAJc3RydWN0IGliX3V2ZXJic19wb2xsX2NxICAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3BvbGxfY3FfcmVzcCAqcmVzcDsKKwlzdHJ1Y3QgaWJfdW9iamVjdAkgICAgICAqdW9iajsKIAlzdHJ1Y3QgaWJfY3EgICAgICAgICAgICAgICAgICAqY3E7CiAJc3RydWN0IGliX3djICAgICAgICAgICAgICAgICAgKndjOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOwpAQCAtNzQyLDE1ICs5MDcsMTcgQEAKIAkJZ290byBvdXRfd2M7CiAJfQogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0JY3EgPSBpZHJfZmluZCgmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSk7Ci0JaWYgKCFjcSB8fCBjcS0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkgeworCXVvYmogPSBpZHJfcmVhZF91b2JqKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCF1b2JqKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KKwljcSA9IHVvYmotPm9iamVjdDsKIAogCXJlc3AtPmNvdW50ID0gaWJfcG9sbF9jcShjcSwgY21kLm5lLCB3Yyk7CiAKKwlwdXRfdW9ial9yZWFkKHVvYmopOworCiAJZm9yIChpID0gMDsgaSA8IHJlc3AtPmNvdW50OyBpKyspIHsKIAkJcmVzcC0+d2NbaV0ud3JfaWQgCSAgID0gd2NbaV0ud3JfaWQ7CiAJCXJlc3AtPndjW2ldLnN0YXR1cyAJICAgPSB3Y1tpXS5zdGF0dXM7CkBAIC03NzIsNyArOTM5LDYgQEAKIAkJcmV0ID0gLUVGQVVMVDsKIAogb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CiAJa2ZyZWUocmVzcCk7CiAKIG91dF93YzoKQEAgLTc4NSwyMiArOTUxLDIzIEBACiAJCQkJaW50IG91dF9sZW4pCiB7CiAJc3RydWN0IGliX3V2ZXJic19yZXFfbm90aWZ5X2NxIGNtZDsKKwlzdHJ1Y3QgaWJfdW9iamVjdAkgICAgICAqdW9iajsKIAlzdHJ1Y3QgaWJfY3EgICAgICAgICAgICAgICAgICAqY3E7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQljcSA9IGlkcl9maW5kKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlKTsKLQlpZiAoY3EgJiYgY3EtPnVvYmplY3QtPmNvbnRleHQgPT0gZmlsZS0+dWNvbnRleHQpIHsKLQkJaWJfcmVxX25vdGlmeV9jcShjcSwgY21kLnNvbGljaXRlZF9vbmx5ID8KLQkJCQkJSUJfQ1FfU09MSUNJVEVEIDogSUJfQ1FfTkVYVF9DT01QKTsKLQkJcmV0ID0gaW5fbGVuOwotCX0KLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXVvYmogPSBpZHJfcmVhZF91b2JqKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCF1b2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljcSA9IHVvYmotPm9iamVjdDsKIAotCXJldHVybiByZXQ7CisJaWJfcmVxX25vdGlmeV9jcShjcSwgY21kLnNvbGljaXRlZF9vbmx5ID8KKwkJCSBJQl9DUV9TT0xJQ0lURUQgOiBJQl9DUV9ORVhUX0NPTVApOworCisJcHV0X3VvYmpfcmVhZCh1b2JqKTsKKworCXJldHVybiBpbl9sZW47CiB9CiAKIHNzaXplX3QgaWJfdXZlcmJzX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLApAQCAtODA5LDUyICs5NzYsNTAgQEAKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfY3EgICAgICBjbWQ7CiAJc3RydWN0IGliX3V2ZXJic19kZXN0cm95X2NxX3Jlc3AgcmVzcDsKKwlzdHJ1Y3QgaWJfdW9iamVjdAkJKnVvYmo7CiAJc3RydWN0IGliX2NxICAgICAgICAgICAgICAgCSpjcTsKLQlzdHJ1Y3QgaWJfdWNxX29iamVjdCAgICAgICAgCSp1b2JqOworCXN0cnVjdCBpYl91Y3Ffb2JqZWN0ICAgICAgICAJKm9iajsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUJKmV2X2ZpbGU7Ci0JdTY0CQkJCSB1c2VyX2hhbmRsZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAJIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKLQotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JY3EgPSBpZHJfZmluZCgmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSk7Ci0JaWYgKCFjcSB8fCBjcS0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKLQkJZ290byBvdXQ7Ci0KLQl1c2VyX2hhbmRsZSA9IGNxLT51b2JqZWN0LT51c2VyX2hhbmRsZTsKLQl1b2JqICAgICAgICA9IGNvbnRhaW5lcl9vZihjcS0+dW9iamVjdCwgc3RydWN0IGliX3VjcV9vYmplY3QsIHVvYmplY3QpOwotCWV2X2ZpbGUgICAgID0gY3EtPmNxX2NvbnRleHQ7CisJdW9iaiA9IGlkcl93cml0ZV91b2JqKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCF1b2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljcSAgICAgID0gdW9iai0+b2JqZWN0OworCWV2X2ZpbGUgPSBjcS0+Y3FfY29udGV4dDsKKwlvYmogICAgID0gY29udGFpbmVyX29mKGNxLT51b2JqZWN0LCBzdHJ1Y3QgaWJfdWNxX29iamVjdCwgdW9iamVjdCk7CiAKIAlyZXQgPSBpYl9kZXN0cm95X2NxKGNxKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKKwlpZiAoIXJldCkKKwkJdW9iai0+bGl2ZSA9IDA7CiAKLQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlKTsKKwlwdXRfdW9ial93cml0ZSh1b2JqKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19jcV9pZHIsIHVvYmopOwogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwotCWxpc3RfZGVsKCZ1b2JqLT51b2JqZWN0Lmxpc3QpOworCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKIAltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIAotCWliX3V2ZXJic19yZWxlYXNlX3VjcShmaWxlLCBldl9maWxlLCB1b2JqKTsKKwlpYl91dmVyYnNfcmVsZWFzZV91Y3EoZmlsZSwgZXZfZmlsZSwgb2JqKTsKIAotCXJlc3AuY29tcF9ldmVudHNfcmVwb3J0ZWQgID0gdW9iai0+Y29tcF9ldmVudHNfcmVwb3J0ZWQ7Ci0JcmVzcC5hc3luY19ldmVudHNfcmVwb3J0ZWQgPSB1b2JqLT5hc3luY19ldmVudHNfcmVwb3J0ZWQ7CisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisJcmVzcC5jb21wX2V2ZW50c19yZXBvcnRlZCAgPSBvYmotPmNvbXBfZXZlbnRzX3JlcG9ydGVkOworCXJlc3AuYXN5bmNfZXZlbnRzX3JlcG9ydGVkID0gb2JqLT5hc3luY19ldmVudHNfcmVwb3J0ZWQ7CiAKLQlrZnJlZSh1b2JqKTsKKwlwdXRfdW9iaih1b2JqKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKLQkJcmV0ID0gLUVGQVVMVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLW91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKKwlyZXR1cm4gaW5fbGVuOwogfQogCiBzc2l6ZV90IGliX3V2ZXJic19jcmVhdGVfcXAoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLApAQCAtODY0LDcgKzEwMjksNyBAQAogCXN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwICAgICAgY21kOwogCXN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwX3Jlc3AgcmVzcDsKIAlzdHJ1Y3QgaWJfdWRhdGEgICAgICAgICAgICAgICAgIHVkYXRhOwotCXN0cnVjdCBpYl91cXBfb2JqZWN0ICAgICAgICAgICAqdW9iajsKKwlzdHJ1Y3QgaWJfdXFwX29iamVjdCAgICAgICAgICAgKm9iajsKIAlzdHJ1Y3QgaWJfcGQgICAgICAgICAgICAgICAgICAgKnBkOwogCXN0cnVjdCBpYl9jcSAgICAgICAgICAgICAgICAgICAqc2NxLCAqcmNxOwogCXN0cnVjdCBpYl9zcnEgICAgICAgICAgICAgICAgICAqc3JxOwpAQCAtODgyLDIzICsxMDQ3LDIxIEBACiAJCSAgICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UgKyBzaXplb2YgcmVzcCwKIAkJICAgaW5fbGVuIC0gc2l6ZW9mIGNtZCwgb3V0X2xlbiAtIHNpemVvZiByZXNwKTsKIAotCXVvYmogPSBrbWFsbG9jKHNpemVvZiAqdW9iaiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1b2JqKQorCW9iaiA9IGttYWxsb2Moc2l6ZW9mICpvYmosIEdGUF9LRVJORUwpOworCWlmICghb2JqKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCWluaXRfdW9iaigmb2JqLT51ZXZlbnQudW9iamVjdCwgY21kLnVzZXJfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJZG93bl93cml0ZSgmb2JqLT51ZXZlbnQudW9iamVjdC5tdXRleCk7CiAKLQlwZCAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7Ci0Jc2NxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5zZW5kX2NxX2hhbmRsZSk7Ci0JcmNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5yZWN2X2NxX2hhbmRsZSk7Ci0Jc3JxID0gY21kLmlzX3NycSA/IGlkcl9maW5kKCZpYl91dmVyYnNfc3JxX2lkciwgY21kLnNycV9oYW5kbGUpIDogTlVMTDsKKwlwZCAgPSBpZHJfcmVhZF9wZChjbWQucGRfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJc2NxID0gaWRyX3JlYWRfY3EoY21kLnNlbmRfY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJcmNxID0gaWRyX3JlYWRfY3EoY21kLnJlY3ZfY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJc3JxID0gY21kLmlzX3NycSA/IGlkcl9yZWFkX3NycShjbWQuc3JxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpIDogTlVMTDsKIAotCWlmICghcGQgIHx8IHBkLT51b2JqZWN0LT5jb250ZXh0ICAhPSBmaWxlLT51Y29udGV4dCB8fAotCSAgICAhc2NxIHx8IHNjcS0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCB8fAotCSAgICAhcmNxIHx8IHJjcS0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCB8fAotCSAgICAoY21kLmlzX3NycSAmJiAoIXNycSB8fCBzcnEtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpKSkgeworCWlmICghcGQgfHwgIXNjcSB8fCAhcmNxIHx8IChjbWQuaXNfc3JxICYmICFzcnEpKSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3VwOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJYXR0ci5ldmVudF9oYW5kbGVyID0gaWJfdXZlcmJzX3FwX2V2ZW50X2hhbmRsZXI7CkBAIC05MTUsMTYgKzEwNzgsMTQgQEAKIAlhdHRyLmNhcC5tYXhfcmVjdl9zZ2UgICAgPSBjbWQubWF4X3JlY3Zfc2dlOwogCWF0dHIuY2FwLm1heF9pbmxpbmVfZGF0YSA9IGNtZC5tYXhfaW5saW5lX2RhdGE7CiAKLQl1b2JqLT51ZXZlbnQudW9iamVjdC51c2VyX2hhbmRsZSA9IGNtZC51c2VyX2hhbmRsZTsKLQl1b2JqLT51ZXZlbnQudW9iamVjdC5jb250ZXh0ICAgICA9IGZpbGUtPnVjb250ZXh0OwotCXVvYmotPnVldmVudC5ldmVudHNfcmVwb3J0ZWQgICAgID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmdW9iai0+dWV2ZW50LmV2ZW50X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZ1b2JqLT5tY2FzdF9saXN0KTsKKwlvYmotPnVldmVudC5ldmVudHNfcmVwb3J0ZWQgICAgID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmb2JqLT51ZXZlbnQuZXZlbnRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+bWNhc3RfbGlzdCk7CiAKIAlxcCA9IHBkLT5kZXZpY2UtPmNyZWF0ZV9xcChwZCwgJmF0dHIsICZ1ZGF0YSk7CiAJaWYgKElTX0VSUihxcCkpIHsKIAkJcmV0ID0gUFRSX0VSUihxcCk7Ci0JCWdvdG8gZXJyX3VwOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJcXAtPmRldmljZSAgICAgCSAgPSBwZC0+ZGV2aWNlOwpAQCAtOTMyLDcgKzEwOTMsNyBAQAogCXFwLT5zZW5kX2NxICAgIAkgID0gYXR0ci5zZW5kX2NxOwogCXFwLT5yZWN2X2NxICAgIAkgID0gYXR0ci5yZWN2X2NxOwogCXFwLT5zcnEJICAgICAgIAkgID0gYXR0ci5zcnE7Ci0JcXAtPnVvYmplY3QgICAgICAgPSAmdW9iai0+dWV2ZW50LnVvYmplY3Q7CisJcXAtPnVvYmplY3QgICAgICAgPSAmb2JqLT51ZXZlbnQudW9iamVjdDsKIAlxcC0+ZXZlbnRfaGFuZGxlciA9IGF0dHIuZXZlbnRfaGFuZGxlcjsKIAlxcC0+cXBfY29udGV4dCAgICA9IGF0dHIucXBfY29udGV4dDsKIAlxcC0+cXBfdHlwZQkgID0gYXR0ci5xcF90eXBlOwpAQCAtOTQyLDIzICsxMTAzLDE0IEBACiAJaWYgKGF0dHIuc3JxKQogCQlhdG9taWNfaW5jKCZhdHRyLnNycS0+dXNlY250KTsKIAotCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOwotCXJlc3AucXBuID0gcXAtPnFwX251bTsKLQotcmV0cnk6Ci0JaWYgKCFpZHJfcHJlX2dldCgmaWJfdXZlcmJzX3FwX2lkciwgR0ZQX0tFUk5FTCkpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfZGVzdHJveTsKLQl9Ci0KLQlyZXQgPSBpZHJfZ2V0X25ldygmaWJfdXZlcmJzX3FwX2lkciwgcXAsICZ1b2JqLT51ZXZlbnQudW9iamVjdC5pZCk7Ci0KLQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCWdvdG8gcmV0cnk7CisJb2JqLT51ZXZlbnQudW9iamVjdC5vYmplY3QgPSBxcDsKKwlyZXQgPSBpZHJfYWRkX3VvYmooJmliX3V2ZXJic19xcF9pZHIsICZvYmotPnVldmVudC51b2JqZWN0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kZXN0cm95OwogCi0JcmVzcC5xcF9oYW5kbGUgICAgICAgPSB1b2JqLT51ZXZlbnQudW9iamVjdC5pZDsKKwltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKKwlyZXNwLnFwbiAgICAgICAgICAgICA9IHFwLT5xcF9udW07CisJcmVzcC5xcF9oYW5kbGUgICAgICAgPSBvYmotPnVldmVudC51b2JqZWN0LmlkOwogCXJlc3AubWF4X3JlY3Zfc2dlICAgID0gYXR0ci5jYXAubWF4X3JlY3Zfc2dlOwogCXJlc3AubWF4X3NlbmRfc2dlICAgID0gYXR0ci5jYXAubWF4X3NlbmRfc2dlOwogCXJlc3AubWF4X3JlY3Zfd3IgICAgID0gYXR0ci5jYXAubWF4X3JlY3Zfd3I7CkBAIC05NjgsMzIgKzExMjAsNDIgQEAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBlcnJfaWRyOworCQlnb3RvIGVycl9jb3B5OwogCX0KIAorCXB1dF9wZF9yZWFkKHBkKTsKKwlwdXRfY3FfcmVhZChzY3EpOworCXB1dF9jcV9yZWFkKHJjcSk7CisJaWYgKHNycSkKKwkJcHV0X3NycV9yZWFkKHNycSk7CisKIAltdXRleF9sb2NrKCZmaWxlLT5tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmdW9iai0+dWV2ZW50LnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5xcF9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZvYmotPnVldmVudC51b2JqZWN0Lmxpc3QsICZmaWxlLT51Y29udGV4dC0+cXBfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCW9iai0+dWV2ZW50LnVvYmplY3QubGl2ZSA9IDE7CisKKwl1cF93cml0ZSgmb2JqLT51ZXZlbnQudW9iamVjdC5tdXRleCk7CiAKIAlyZXR1cm4gaW5fbGVuOwogCi1lcnJfaWRyOgotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19xcF9pZHIsIHVvYmotPnVldmVudC51b2JqZWN0LmlkKTsKK2Vycl9jb3B5OgorCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX3FwX2lkciwgJm9iai0+dWV2ZW50LnVvYmplY3QpOwogCiBlcnJfZGVzdHJveToKIAlpYl9kZXN0cm95X3FwKHFwKTsKLQlhdG9taWNfZGVjKCZwZC0+dXNlY250KTsKLQlhdG9taWNfZGVjKCZhdHRyLnNlbmRfY3EtPnVzZWNudCk7Ci0JYXRvbWljX2RlYygmYXR0ci5yZWN2X2NxLT51c2VjbnQpOwotCWlmIChhdHRyLnNycSkKLQkJYXRvbWljX2RlYygmYXR0ci5zcnEtPnVzZWNudCk7CiAKLWVycl91cDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworZXJyX3B1dDoKKwlpZiAocGQpCisJCXB1dF9wZF9yZWFkKHBkKTsKKwlpZiAoc2NxKQorCQlwdXRfY3FfcmVhZChzY3EpOworCWlmIChyY3EpCisJCXB1dF9jcV9yZWFkKHJjcSk7CisJaWYgKHNycSkKKwkJcHV0X3NycV9yZWFkKHNycSk7CiAKLQlrZnJlZSh1b2JqKTsKKwlwdXRfdW9ial93cml0ZSgmb2JqLT51ZXZlbnQudW9iamVjdCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAxOCwxNSArMTE4MCwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOwotCWlmIChxcCAmJiBxcC0+dW9iamVjdC0+Y29udGV4dCA9PSBmaWxlLT51Y29udGV4dCkKLQkJcmV0ID0gaWJfcXVlcnlfcXAocXAsIGF0dHIsIGNtZC5hdHRyX21hc2ssIGluaXRfYXR0cik7Ci0JZWxzZQorCXFwID0gaWRyX3JlYWRfcXAoY21kLnFwX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcXApIHsKIAkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQogCi0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlyZXQgPSBpYl9xdWVyeV9xcChxcCwgYXR0ciwgY21kLmF0dHJfbWFzaywgaW5pdF9hdHRyKTsKKworCXB1dF9xcF9yZWFkKHFwKTsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtMTExMywxMCArMTI3NSw4IEBACiAJaWYgKCFhdHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JcXAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7Ci0JaWYgKCFxcCB8fCBxcC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkgeworCXFwID0gaWRyX3JlYWRfcXAoY21kLnFwX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcXApIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTE2OCwxMyArMTMyOCwxNSBAQAogCWF0dHItPmFsdF9haF9hdHRyLnBvcnRfbnVtIAkgICAgPSBjbWQuYWx0X2Rlc3QucG9ydF9udW07CiAKIAlyZXQgPSBpYl9tb2RpZnlfcXAocXAsIGF0dHIsIGNtZC5hdHRyX21hc2spOworCisJcHV0X3FwX3JlYWQocXApOworCiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSBpbl9sZW47CiAKIG91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwogCWtmcmVlKGF0dHIpOwogCiAJcmV0dXJuIHJldDsKQEAgLTExODYsOCArMTM0OCw5IEBACiB7CiAJc3RydWN0IGliX3V2ZXJic19kZXN0cm95X3FwICAgICAgY21kOwogCXN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9xcF9yZXNwIHJlc3A7CisJc3RydWN0IGliX3VvYmplY3QJCSp1b2JqOwogCXN0cnVjdCBpYl9xcCAgICAgICAgICAgICAgIAkqcXA7Ci0Jc3RydWN0IGliX3VxcF9vYmplY3QgICAgICAgIAkqdW9iajsKKwlzdHJ1Y3QgaWJfdXFwX29iamVjdCAgICAgICAgCSpvYmo7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgCSByZXQgPSAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCkBAIC0xMTk1LDQzICsxMzU4LDQzIEBACiAKIAltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXVvYmogPSBpZHJfd3JpdGVfdW9iaigmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcXAgID0gdW9iai0+b2JqZWN0OworCW9iaiA9IGNvbnRhaW5lcl9vZih1b2JqLCBzdHJ1Y3QgaWJfdXFwX29iamVjdCwgdWV2ZW50LnVvYmplY3QpOwogCi0JcXAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7Ci0JaWYgKCFxcCB8fCBxcC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKLQkJZ290byBvdXQ7Ci0KLQl1b2JqID0gY29udGFpbmVyX29mKHFwLT51b2JqZWN0LCBzdHJ1Y3QgaWJfdXFwX29iamVjdCwgdWV2ZW50LnVvYmplY3QpOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZ1b2JqLT5tY2FzdF9saXN0KSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OworCWlmICghbGlzdF9lbXB0eSgmb2JqLT5tY2FzdF9saXN0KSkgeworCQlwdXRfdW9ial93cml0ZSh1b2JqKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZXQgPSBpYl9kZXN0cm95X3FwKHFwKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKKwlpZiAoIXJldCkKKwkJdW9iai0+bGl2ZSA9IDA7CiAKLQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfcXBfaWRyLCBjbWQucXBfaGFuZGxlKTsKKwlwdXRfdW9ial93cml0ZSh1b2JqKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19xcF9pZHIsIHVvYmopOwogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwotCWxpc3RfZGVsKCZ1b2JqLT51ZXZlbnQudW9iamVjdC5saXN0KTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQlpYl91dmVyYnNfcmVsZWFzZV91ZXZlbnQoZmlsZSwgJnVvYmotPnVldmVudCk7CisJaWJfdXZlcmJzX3JlbGVhc2VfdWV2ZW50KGZpbGUsICZvYmotPnVldmVudCk7CiAKLQlyZXNwLmV2ZW50c19yZXBvcnRlZCA9IHVvYmotPnVldmVudC5ldmVudHNfcmVwb3J0ZWQ7CisJcmVzcC5ldmVudHNfcmVwb3J0ZWQgPSBvYmotPnVldmVudC5ldmVudHNfcmVwb3J0ZWQ7CiAKLQlrZnJlZSh1b2JqKTsKKwlwdXRfdW9iaih1b2JqKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKLQkJcmV0ID0gLUVGQVVMVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLW91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKKwlyZXR1cm4gaW5fbGVuOwogfQogCiBzc2l6ZV90IGliX3V2ZXJic19wb3N0X3NlbmQoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLApAQCAtMTI0NCw2ICsxNDA3LDcgQEAKIAlzdHJ1Y3QgaWJfc2VuZF93ciAgICAgICAgICAgICAgKndyID0gTlVMTCwgKmxhc3QsICpuZXh0LCAqYmFkX3dyOwogCXN0cnVjdCBpYl9xcCAgICAgICAgICAgICAgICAgICAqcXA7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzZ19pbmQ7CisJaW50CQkJCWlzX3VkOwogCXNzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQpAQCAtMTI2MCwxMiArMTQyNCwxMSBAQAogCWlmICghdXNlcl93cikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOwotCWlmICghcXAgfHwgcXAtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCisJcXAgPSBpZHJfcmVhZF9xcChjbWQucXBfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCFxcCkKIAkJZ290byBvdXQ7CiAKKwlpc191ZCA9IHFwLT5xcF90eXBlID09IElCX1FQVF9VRDsKIAlzZ19pbmQgPSAwOwogCWxhc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBjbWQud3JfY291bnQ7ICsraSkgewpAQCAtMTI3MywxMiArMTQzNiwxMiBAQAogCQkJCSAgIGJ1ZiArIHNpemVvZiBjbWQgKyBpICogY21kLndxZV9zaXplLAogCQkJCSAgIGNtZC53cWVfc2l6ZSkpIHsKIAkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3B1dDsKIAkJfQogCiAJCWlmICh1c2VyX3dyLT5udW1fc2dlICsgc2dfaW5kID4gY21kLnNnZV9jb3VudCkgewogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfcHV0OwogCQl9CiAKIAkJbmV4dCA9IGttYWxsb2MoQUxJR04oc2l6ZW9mICpuZXh0LCBzaXplb2YgKHN0cnVjdCBpYl9zZ2UpKSArCkBAIC0xMjg2LDcgKzE0NDksNyBAQAogCQkJICAgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIW5leHQpIHsKIAkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3B1dDsKIAkJfQogCiAJCWlmICghbGFzdCkKQEAgLTEzMDIsMTIgKzE0NjUsMTIgQEAKIAkJbmV4dC0+c2VuZF9mbGFncyA9IHVzZXJfd3ItPnNlbmRfZmxhZ3M7CiAJCW5leHQtPmltbV9kYXRhICAgPSAoX19iZTMyIF9fZm9yY2UpIHVzZXJfd3ItPmltbV9kYXRhOwogCi0JCWlmIChxcC0+cXBfdHlwZSA9PSBJQl9RUFRfVUQpIHsKLQkJCW5leHQtPndyLnVkLmFoID0gaWRyX2ZpbmQoJmliX3V2ZXJic19haF9pZHIsCi0JCQkJCQkgIHVzZXJfd3ItPndyLnVkLmFoKTsKKwkJaWYgKGlzX3VkKSB7CisJCQluZXh0LT53ci51ZC5haCA9IGlkcl9yZWFkX2FoKHVzZXJfd3ItPndyLnVkLmFoLAorCQkJCQkJICAgICBmaWxlLT51Y29udGV4dCk7CiAJCQlpZiAoIW5leHQtPndyLnVkLmFoKSB7CiAJCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKKwkJCQlnb3RvIG91dF9wdXQ7CiAJCQl9CiAJCQluZXh0LT53ci51ZC5yZW1vdGVfcXBuICA9IHVzZXJfd3ItPndyLnVkLnJlbW90ZV9xcG47CiAJCQluZXh0LT53ci51ZC5yZW1vdGVfcWtleSA9IHVzZXJfd3ItPndyLnVkLnJlbW90ZV9xa2V5OwpAQCAtMTM0NCw3ICsxNTA3LDcgQEAKIAkJCQkJICAgc2dfaW5kICogc2l6ZW9mIChzdHJ1Y3QgaWJfc2dlKSwKIAkJCQkJICAgbmV4dC0+bnVtX3NnZSAqIHNpemVvZiAoc3RydWN0IGliX3NnZSkpKSB7CiAJCQkJcmV0ID0gLUVGQVVMVDsKLQkJCQlnb3RvIG91dDsKKwkJCQlnb3RvIG91dF9wdXQ7CiAJCQl9CiAJCQlzZ19pbmQgKz0gbmV4dC0+bnVtX3NnZTsKIAkJfSBlbHNlCkBAIC0xMzY0LDEwICsxNTI3LDEzIEBACiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKIAkJcmV0ID0gLUVGQVVMVDsKIAotb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CitvdXRfcHV0OgorCXB1dF9xcF9yZWFkKHFwKTsKIAorb3V0OgogCXdoaWxlICh3cikgeworCQlpZiAoaXNfdWQgJiYgd3ItPndyLnVkLmFoKQorCQkJcHV0X2FoX3JlYWQod3ItPndyLnVkLmFoKTsKIAkJbmV4dCA9IHdyLT5uZXh0OwogCQlrZnJlZSh3cik7CiAJCXdyID0gbmV4dDsKQEAgLTE0ODIsMTQgKzE2NDgsMTUgQEAKIAlpZiAoSVNfRVJSKHdyKSkKIAkJcmV0dXJuIFBUUl9FUlIod3IpOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLQlxcCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcXBfaWRyLCBjbWQucXBfaGFuZGxlKTsKLQlpZiAoIXFwIHx8IHFwLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KQorCXFwID0gaWRyX3JlYWRfcXAoY21kLnFwX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcXApCiAJCWdvdG8gb3V0OwogCiAJcmVzcC5iYWRfd3IgPSAwOwogCXJldCA9IHFwLT5kZXZpY2UtPnBvc3RfcmVjdihxcCwgd3IsICZiYWRfd3IpOworCisJcHV0X3FwX3JlYWQocXApOworCiAJaWYgKHJldCkKIAkJZm9yIChuZXh0ID0gd3I7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CiAJCQkrK3Jlc3AuYmFkX3dyOwpAQCAtMTUwMyw4ICsxNjcwLDYgQEAKIAkJcmV0ID0gLUVGQVVMVDsKIAogb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KIAl3aGlsZSAod3IpIHsKIAkJbmV4dCA9IHdyLT5uZXh0OwogCQlrZnJlZSh3cik7CkBAIC0xNTMzLDE0ICsxNjk4LDE1IEBACiAJaWYgKElTX0VSUih3cikpCiAJCXJldHVybiBQVFJfRVJSKHdyKTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0Jc3JxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19zcnFfaWRyLCBjbWQuc3JxX2hhbmRsZSk7Ci0JaWYgKCFzcnEgfHwgc3JxLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KQorCXNycSA9IGlkcl9yZWFkX3NycShjbWQuc3JxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghc3JxKQogCQlnb3RvIG91dDsKIAogCXJlc3AuYmFkX3dyID0gMDsKIAlyZXQgPSBzcnEtPmRldmljZS0+cG9zdF9zcnFfcmVjdihzcnEsIHdyLCAmYmFkX3dyKTsKKworCXB1dF9zcnFfcmVhZChzcnEpOworCiAJaWYgKHJldCkKIAkJZm9yIChuZXh0ID0gd3I7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CiAJCQkrK3Jlc3AuYmFkX3dyOwpAQCAtMTU1NCw4ICsxNzIwLDYgQEAKIAkJcmV0ID0gLUVGQVVMVDsKIAogb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KIAl3aGlsZSAod3IpIHsKIAkJbmV4dCA9IHdyLT5uZXh0OwogCQlrZnJlZSh3cik7CkBAIC0xNTg3LDE3ICsxNzUxLDE1IEBACiAJaWYgKCF1b2JqKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCWluaXRfdW9iaih1b2JqLCBjbWQudXNlcl9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlkb3duX3dyaXRlKCZ1b2JqLT5tdXRleCk7CiAKLQlwZCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcGRfaWRyLCBjbWQucGRfaGFuZGxlKTsKLQlpZiAoIXBkIHx8IHBkLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KSB7CisJcGQgPSBpZHJfcmVhZF9wZChjbWQucGRfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCFwZCkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl91cDsKKwkJZ290byBlcnI7CiAJfQogCi0JdW9iai0+dXNlcl9oYW5kbGUgPSBjbWQudXNlcl9oYW5kbGU7Ci0JdW9iai0+Y29udGV4dCAgICAgPSBmaWxlLT51Y29udGV4dDsKLQogCWF0dHIuZGxpZCAJICAgICAgID0gY21kLmF0dHIuZGxpZDsKIAlhdHRyLnNsIAkgICAgICAgPSBjbWQuYXR0ci5zbDsKIAlhdHRyLnNyY19wYXRoX2JpdHMgICAgID0gY21kLmF0dHIuc3JjX3BhdGhfYml0czsKQEAgLTE2MTMsMjEgKzE3NzUsMTMgQEAKIAlhaCA9IGliX2NyZWF0ZV9haChwZCwgJmF0dHIpOwogCWlmIChJU19FUlIoYWgpKSB7CiAJCXJldCA9IFBUUl9FUlIoYWgpOwotCQlnb3RvIGVycl91cDsKKwkJZ290byBlcnI7CiAJfQogCi0JYWgtPnVvYmplY3QgPSB1b2JqOworCWFoLT51b2JqZWN0ICA9IHVvYmo7CisJdW9iai0+b2JqZWN0ID0gYWg7CiAKLXJldHJ5OgotCWlmICghaWRyX3ByZV9nZXQoJmliX3V2ZXJic19haF9pZHIsIEdGUF9LRVJORUwpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2Rlc3Ryb3k7Ci0JfQotCi0JcmV0ID0gaWRyX2dldF9uZXcoJmliX3V2ZXJic19haF9pZHIsIGFoLCAmdW9iai0+aWQpOwotCi0JaWYgKHJldCA9PSAtRUFHQUlOKQotCQlnb3RvIHJldHJ5OworCXJldCA9IGlkcl9hZGRfdW9iaigmaWJfdXZlcmJzX2FoX2lkciwgdW9iaik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGVzdHJveTsKIApAQCAtMTYzNiwyNyArMTc5MCwyOSBAQAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkgewogCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9pZHI7CisJCWdvdG8gZXJyX2NvcHk7CiAJfQogCisJcHV0X3BkX3JlYWQocGQpOworCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJnVvYmotPmxpc3QsICZmaWxlLT51Y29udGV4dC0+YWhfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXVvYmotPmxpdmUgPSAxOworCisJdXBfd3JpdGUoJnVvYmotPm11dGV4KTsKIAogCXJldHVybiBpbl9sZW47CiAKLWVycl9pZHI6Ci0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX2FoX2lkciwgdW9iai0+aWQpOworZXJyX2NvcHk6CisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfYWhfaWRyLCB1b2JqKTsKIAogZXJyX2Rlc3Ryb3k6CiAJaWJfZGVzdHJveV9haChhaCk7CiAKLWVycl91cDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0Ja2ZyZWUodW9iaik7CitlcnI6CisJcHV0X3VvYmpfd3JpdGUodW9iaik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTY2NiwzNSArMTgyMiwzNCBAQAogCXN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9haCBjbWQ7CiAJc3RydWN0IGliX2FoCQkgICAqYWg7CiAJc3RydWN0IGliX3VvYmplY3QJICAgKnVvYmo7Ci0JaW50CQkJICAgIHJldCA9IC1FSU5WQUw7CisJaW50CQkJICAgIHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JYWggPSBpZHJfZmluZCgmaWJfdXZlcmJzX2FoX2lkciwgY21kLmFoX2hhbmRsZSk7Ci0JaWYgKCFhaCB8fCBhaC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKLQkJZ290byBvdXQ7Ci0KLQl1b2JqID0gYWgtPnVvYmplY3Q7CisJdW9iaiA9IGlkcl93cml0ZV91b2JqKCZpYl91dmVyYnNfYWhfaWRyLCBjbWQuYWhfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCF1b2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlhaCA9IHVvYmotPm9iamVjdDsKIAogCXJldCA9IGliX2Rlc3Ryb3lfYWgoYWgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCWlmICghcmV0KQorCQl1b2JqLT5saXZlID0gMDsKIAotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19haF9pZHIsIGNtZC5haF9oYW5kbGUpOworCXB1dF91b2JqX3dyaXRlKHVvYmopOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX2FoX2lkciwgdW9iaik7CiAKIAltdXRleF9sb2NrKCZmaWxlLT5tdXRleCk7CiAJbGlzdF9kZWwoJnVvYmotPmxpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0Ja2ZyZWUodW9iaik7CisJcHV0X3VvYmoodW9iaik7CiAKLW91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKKwlyZXR1cm4gaW5fbGVuOwogfQogCiBzc2l6ZV90IGliX3V2ZXJic19hdHRhY2hfbWNhc3Qoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLApAQCAtMTcwMyw0NyArMTg1OCw0MyBAQAogewogCXN0cnVjdCBpYl91dmVyYnNfYXR0YWNoX21jYXN0IGNtZDsKIAlzdHJ1Y3QgaWJfcXAgICAgICAgICAgICAgICAgICpxcDsKLQlzdHJ1Y3QgaWJfdXFwX29iamVjdCAgICAgICAgICp1b2JqOworCXN0cnVjdCBpYl91cXBfb2JqZWN0ICAgICAgICAgKm9iajsKIAlzdHJ1Y3QgaWJfdXZlcmJzX21jYXN0X2VudHJ5ICptY2FzdDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXFwID0gaWRyX3JlYWRfcXAoY21kLnFwX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcXApCisJCXJldHVybiAtRUlOVkFMOwogCi0JcXAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7Ci0JaWYgKCFxcCB8fCBxcC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKLQkJZ290byBvdXQ7CisJb2JqID0gY29udGFpbmVyX29mKHFwLT51b2JqZWN0LCBzdHJ1Y3QgaWJfdXFwX29iamVjdCwgdWV2ZW50LnVvYmplY3QpOwogCi0JdW9iaiA9IGNvbnRhaW5lcl9vZihxcC0+dW9iamVjdCwgc3RydWN0IGliX3VxcF9vYmplY3QsIHVldmVudC51b2JqZWN0KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobWNhc3QsICZ1b2JqLT5tY2FzdF9saXN0LCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkobWNhc3QsICZvYmotPm1jYXN0X2xpc3QsIGxpc3QpCiAJCWlmIChjbWQubWxpZCA9PSBtY2FzdC0+bGlkICYmCiAJCSAgICAhbWVtY21wKGNtZC5naWQsIG1jYXN0LT5naWQucmF3LCBzaXplb2YgbWNhc3QtPmdpZC5yYXcpKSB7CiAJCQlyZXQgPSAwOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9wdXQ7CiAJCX0KIAogCW1jYXN0ID0ga21hbGxvYyhzaXplb2YgKm1jYXN0LCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1jYXN0KSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9wdXQ7CiAJfQogCiAJbWNhc3QtPmxpZCA9IGNtZC5tbGlkOwogCW1lbWNweShtY2FzdC0+Z2lkLnJhdywgY21kLmdpZCwgc2l6ZW9mIG1jYXN0LT5naWQucmF3KTsKIAogCXJldCA9IGliX2F0dGFjaF9tY2FzdChxcCwgJm1jYXN0LT5naWQsIGNtZC5tbGlkKTsKLQlpZiAoIXJldCkgewotCQl1b2JqID0gY29udGFpbmVyX29mKHFwLT51b2JqZWN0LCBzdHJ1Y3QgaWJfdXFwX29iamVjdCwKLQkJCQkgICAgdWV2ZW50LnVvYmplY3QpOwotCQlsaXN0X2FkZF90YWlsKCZtY2FzdC0+bGlzdCwgJnVvYmotPm1jYXN0X2xpc3QpOwotCX0gZWxzZQorCWlmICghcmV0KQorCQlsaXN0X2FkZF90YWlsKCZtY2FzdC0+bGlzdCwgJm9iai0+bWNhc3RfbGlzdCk7CisJZWxzZQogCQlrZnJlZShtY2FzdCk7CiAKLW91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworb3V0X3B1dDoKKwlwdXRfcXBfcmVhZChxcCk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOwogfQpAQCAtMTc1Myw3ICsxOTA0LDcgQEAKIAkJCSAgICAgICBpbnQgb3V0X2xlbikKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2RldGFjaF9tY2FzdCBjbWQ7Ci0Jc3RydWN0IGliX3VxcF9vYmplY3QgICAgICAgICAqdW9iajsKKwlzdHJ1Y3QgaWJfdXFwX29iamVjdCAgICAgICAgICpvYmo7CiAJc3RydWN0IGliX3FwICAgICAgICAgICAgICAgICAqcXA7CiAJc3RydWN0IGliX3V2ZXJic19tY2FzdF9lbnRyeSAqbWNhc3Q7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKQEAgLTE3NjEsMTkgKzE5MTIsMTcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOwotCWlmICghcXAgfHwgcXAtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCi0JCWdvdG8gb3V0OworCXFwID0gaWRyX3JlYWRfcXAoY21kLnFwX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcXApCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gaWJfZGV0YWNoX21jYXN0KHFwLCAodW5pb24gaWJfZ2lkICopIGNtZC5naWQsIGNtZC5tbGlkKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcHV0OwogCi0JdW9iaiA9IGNvbnRhaW5lcl9vZihxcC0+dW9iamVjdCwgc3RydWN0IGliX3VxcF9vYmplY3QsIHVldmVudC51b2JqZWN0KTsKKwlvYmogPSBjb250YWluZXJfb2YocXAtPnVvYmplY3QsIHN0cnVjdCBpYl91cXBfb2JqZWN0LCB1ZXZlbnQudW9iamVjdCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmdW9iai0+bWNhc3RfbGlzdCwgbGlzdCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmb2JqLT5tY2FzdF9saXN0LCBsaXN0KQogCQlpZiAoY21kLm1saWQgPT0gbWNhc3QtPmxpZCAmJgogCQkgICAgIW1lbWNtcChjbWQuZ2lkLCBtY2FzdC0+Z2lkLnJhdywgc2l6ZW9mIG1jYXN0LT5naWQucmF3KSkgewogCQkJbGlzdF9kZWwoJm1jYXN0LT5saXN0KTsKQEAgLTE3ODEsOCArMTkzMCw4IEBACiAJCQlicmVhazsKIAkJfQogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKK291dF9wdXQ6CisJcHV0X3FwX3JlYWQocXApOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKIH0KQEAgLTE3OTQsNyArMTk0Myw3IEBACiAJc3RydWN0IGliX3V2ZXJic19jcmVhdGVfc3JxICAgICAgY21kOwogCXN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3NycV9yZXNwIHJlc3A7CiAJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgICAgICAgdWRhdGE7Ci0Jc3RydWN0IGliX3VldmVudF9vYmplY3QgICAgICAgICAqdW9iajsKKwlzdHJ1Y3QgaWJfdWV2ZW50X29iamVjdCAgICAgICAgICpvYmo7CiAJc3RydWN0IGliX3BkICAgICAgICAgICAgICAgICAgICAqcGQ7CiAJc3RydWN0IGliX3NycSAgICAgICAgICAgICAgICAgICAqc3JxOwogCXN0cnVjdCBpYl9zcnFfaW5pdF9hdHRyICAgICAgICAgIGF0dHI7CkBAIC0xODEwLDE3ICsxOTU5LDE3IEBACiAJCSAgICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UgKyBzaXplb2YgcmVzcCwKIAkJICAgaW5fbGVuIC0gc2l6ZW9mIGNtZCwgb3V0X2xlbiAtIHNpemVvZiByZXNwKTsKIAotCXVvYmogPSBrbWFsbG9jKHNpemVvZiAqdW9iaiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1b2JqKQorCW9iaiA9IGttYWxsb2Moc2l6ZW9mICpvYmosIEdGUF9LRVJORUwpOworCWlmICghb2JqKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCWluaXRfdW9iaigmb2JqLT51b2JqZWN0LCAwLCBmaWxlLT51Y29udGV4dCk7CisJZG93bl93cml0ZSgmb2JqLT51b2JqZWN0Lm11dGV4KTsKIAotCXBkICA9IGlkcl9maW5kKCZpYl91dmVyYnNfcGRfaWRyLCBjbWQucGRfaGFuZGxlKTsKLQotCWlmICghcGQgfHwgcGQtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpIHsKKwlwZCAgPSBpZHJfcmVhZF9wZChjbWQucGRfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCFwZCkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl91cDsKKwkJZ290byBlcnI7CiAJfQogCiAJYXR0ci5ldmVudF9oYW5kbGVyICA9IGliX3V2ZXJic19zcnFfZXZlbnRfaGFuZGxlcjsKQEAgLTE4MjksNjkgKzE5NzgsNTkgQEAKIAlhdHRyLmF0dHIubWF4X3NnZSAgID0gY21kLm1heF9zZ2U7CiAJYXR0ci5hdHRyLnNycV9saW1pdCA9IGNtZC5zcnFfbGltaXQ7CiAKLQl1b2JqLT51b2JqZWN0LnVzZXJfaGFuZGxlID0gY21kLnVzZXJfaGFuZGxlOwotCXVvYmotPnVvYmplY3QuY29udGV4dCAgICAgPSBmaWxlLT51Y29udGV4dDsKLQl1b2JqLT5ldmVudHNfcmVwb3J0ZWQgICAgID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmdW9iai0+ZXZlbnRfbGlzdCk7CisJb2JqLT5ldmVudHNfcmVwb3J0ZWQgICAgID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmb2JqLT5ldmVudF9saXN0KTsKIAogCXNycSA9IHBkLT5kZXZpY2UtPmNyZWF0ZV9zcnEocGQsICZhdHRyLCAmdWRhdGEpOwogCWlmIChJU19FUlIoc3JxKSkgewogCQlyZXQgPSBQVFJfRVJSKHNycSk7Ci0JCWdvdG8gZXJyX3VwOworCQlnb3RvIGVycjsKIAl9CiAKIAlzcnEtPmRldmljZSAgICAJICAgPSBwZC0+ZGV2aWNlOwogCXNycS0+cGQgICAgICAgIAkgICA9IHBkOwotCXNycS0+dW9iamVjdCAgICAgICA9ICZ1b2JqLT51b2JqZWN0OworCXNycS0+dW9iamVjdCAgICAgICA9ICZvYmotPnVvYmplY3Q7CiAJc3JxLT5ldmVudF9oYW5kbGVyID0gYXR0ci5ldmVudF9oYW5kbGVyOwogCXNycS0+c3JxX2NvbnRleHQgICA9IGF0dHIuc3JxX2NvbnRleHQ7CiAJYXRvbWljX2luYygmcGQtPnVzZWNudCk7CiAJYXRvbWljX3NldCgmc3JxLT51c2VjbnQsIDApOwogCi0JbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7Ci0KLXJldHJ5OgotCWlmICghaWRyX3ByZV9nZXQoJmliX3V2ZXJic19zcnFfaWRyLCBHRlBfS0VSTkVMKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9kZXN0cm95OwotCX0KLQotCXJldCA9IGlkcl9nZXRfbmV3KCZpYl91dmVyYnNfc3JxX2lkciwgc3JxLCAmdW9iai0+dW9iamVjdC5pZCk7Ci0KLQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCWdvdG8gcmV0cnk7CisJb2JqLT51b2JqZWN0Lm9iamVjdCA9IHNycTsKKwlyZXQgPSBpZHJfYWRkX3VvYmooJmliX3V2ZXJic19zcnFfaWRyLCAmb2JqLT51b2JqZWN0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kZXN0cm95OwogCi0JcmVzcC5zcnFfaGFuZGxlID0gdW9iai0+dW9iamVjdC5pZDsKKwltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKKwlyZXNwLnNycV9oYW5kbGUgPSBvYmotPnVvYmplY3QuaWQ7CiAJcmVzcC5tYXhfd3IgICAgID0gYXR0ci5hdHRyLm1heF93cjsKIAlyZXNwLm1heF9zZ2UgICAgPSBhdHRyLmF0dHIubWF4X3NnZTsKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkgewogCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9pZHI7CisJCWdvdG8gZXJyX2NvcHk7CiAJfQogCisJcHV0X3BkX3JlYWQocGQpOworCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwotCWxpc3RfYWRkX3RhaWwoJnVvYmotPnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5zcnFfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmb2JqLT51b2JqZWN0Lmxpc3QsICZmaWxlLT51Y29udGV4dC0+c3JxX2xpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlvYmotPnVvYmplY3QubGl2ZSA9IDE7CisKKwl1cF93cml0ZSgmb2JqLT51b2JqZWN0Lm11dGV4KTsKIAogCXJldHVybiBpbl9sZW47CiAKLWVycl9pZHI6Ci0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3NycV9pZHIsIHVvYmotPnVvYmplY3QuaWQpOworZXJyX2NvcHk6CisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfc3JxX2lkciwgJm9iai0+dW9iamVjdCk7CiAKIGVycl9kZXN0cm95OgogCWliX2Rlc3Ryb3lfc3JxKHNycSk7Ci0JYXRvbWljX2RlYygmcGQtPnVzZWNudCk7CiAKLWVycl91cDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0Ja2ZyZWUodW9iaik7CitlcnI6CisJcHV0X3VvYmpfd3JpdGUoJm9iai0+dW9iamVjdCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkwNywyMSArMjA0NiwxNiBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0Jc3JxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19zcnFfaWRyLCBjbWQuc3JxX2hhbmRsZSk7Ci0JaWYgKCFzcnEgfHwgc3JxLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KKwlzcnEgPSBpZHJfcmVhZF9zcnEoY21kLnNycV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXNycSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhdHRyLm1heF93ciAgICA9IGNtZC5tYXhfd3I7CiAJYXR0ci5zcnFfbGltaXQgPSBjbWQuc3JxX2xpbWl0OwogCiAJcmV0ID0gaWJfbW9kaWZ5X3NycShzcnEsICZhdHRyLCBjbWQuYXR0cl9tYXNrKTsKIAotb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJcHV0X3NycV9yZWFkKHNycSk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOwogfQpAQCAtMTk0MiwxOCArMjA3NiwxNiBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXNycSA9IGlkcl9yZWFkX3NycShjbWQuc3JxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghc3JxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNycSA9IGlkcl9maW5kKCZpYl91dmVyYnNfc3JxX2lkciwgY21kLnNycV9oYW5kbGUpOwotCWlmIChzcnEgJiYgc3JxLT51b2JqZWN0LT5jb250ZXh0ID09IGZpbGUtPnVjb250ZXh0KQotCQlyZXQgPSBpYl9xdWVyeV9zcnEoc3JxLCAmYXR0cik7Ci0JZWxzZQotCQlyZXQgPSAtRUlOVkFMOworCXJldCA9IGliX3F1ZXJ5X3NycShzcnEsICZhdHRyKTsKIAotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJcHV0X3NycV9yZWFkKHNycSk7CiAKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIHJldDsKIAogCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOwogCkBAIC0xOTYzLDEwICsyMDk1LDkgQEAKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKLQkJcmV0ID0gLUVGQVVMVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLW91dDoKLQlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOworCXJldHVybiBpbl9sZW47CiB9CiAKIHNzaXplX3QgaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKQEAgLTE5NzUsNDUgKzIxMDYsNDUgQEAKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxICAgICAgY21kOwogCXN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9zcnFfcmVzcCByZXNwOworCXN0cnVjdCBpYl91b2JqZWN0CQkgKnVvYmo7CiAJc3RydWN0IGliX3NycSAgICAgICAgICAgICAgIAkgKnNycTsKLQlzdHJ1Y3QgaWJfdWV2ZW50X29iamVjdCAgICAgICAgCSAqdW9iajsKKwlzdHJ1Y3QgaWJfdWV2ZW50X29iamVjdCAgICAgICAgCSAqb2JqOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAJICByZXQgPSAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLQltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKLQotCXNycSA9IGlkcl9maW5kKCZpYl91dmVyYnNfc3JxX2lkciwgY21kLnNycV9oYW5kbGUpOwotCWlmICghc3JxIHx8IHNycS0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKLQkJZ290byBvdXQ7Ci0KLQl1b2JqID0gY29udGFpbmVyX29mKHNycS0+dW9iamVjdCwgc3RydWN0IGliX3VldmVudF9vYmplY3QsIHVvYmplY3QpOworCXVvYmogPSBpZHJfd3JpdGVfdW9iaigmaWJfdXZlcmJzX3NycV9pZHIsIGNtZC5zcnFfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCF1b2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcnEgPSB1b2JqLT5vYmplY3Q7CisJb2JqID0gY29udGFpbmVyX29mKHVvYmosIHN0cnVjdCBpYl91ZXZlbnRfb2JqZWN0LCB1b2JqZWN0KTsKIAogCXJldCA9IGliX2Rlc3Ryb3lfc3JxKHNycSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7CisJaWYgKCFyZXQpCisJCXVvYmotPmxpdmUgPSAwOwogCi0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3NycV9pZHIsIGNtZC5zcnFfaGFuZGxlKTsKKwlwdXRfdW9ial93cml0ZSh1b2JqKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19zcnFfaWRyLCB1b2JqKTsKIAogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKLQlsaXN0X2RlbCgmdW9iai0+dW9iamVjdC5saXN0KTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQlpYl91dmVyYnNfcmVsZWFzZV91ZXZlbnQoZmlsZSwgdW9iaik7CisJaWJfdXZlcmJzX3JlbGVhc2VfdWV2ZW50KGZpbGUsIG9iaik7CiAKLQlyZXNwLmV2ZW50c19yZXBvcnRlZCA9IHVvYmotPmV2ZW50c19yZXBvcnRlZDsKKwltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKKwlyZXNwLmV2ZW50c19yZXBvcnRlZCA9IG9iai0+ZXZlbnRzX3JlcG9ydGVkOwogCi0Ja2ZyZWUodW9iaik7CisJcHV0X3VvYmoodW9iaik7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpCiAJCXJldCA9IC1FRkFVTFQ7CiAKLW91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCiAJcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IGZmMDkyYTAuLjVlYzJkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtNjYsNyArNjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsYXNzICp1dmVyYnNfY2xhc3M7CiAKLURFRklORV9NVVRFWChpYl91dmVyYnNfaWRyX211dGV4KTsKK0RFRklORV9TUElOTE9DSyhpYl91dmVyYnNfaWRyX2xvY2spOwogREVGSU5FX0lEUihpYl91dmVyYnNfcGRfaWRyKTsKIERFRklORV9JRFIoaWJfdXZlcmJzX21yX2lkcik7CiBERUZJTkVfSURSKGliX3V2ZXJic19td19pZHIpOwpAQCAtMTgzLDIxICsxODMsMjEgQEAKIAlpZiAoIWNvbnRleHQpCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+YWhfbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgaWJfYWggKmFoID0gaWRyX2ZpbmQoJmliX3V2ZXJic19haF9pZHIsIHVvYmotPmlkKTsKLQkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX2FoX2lkciwgdW9iai0+aWQpOworCQlzdHJ1Y3QgaWJfYWggKmFoID0gdW9iai0+b2JqZWN0OworCisJCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX2FoX2lkciwgdW9iaik7CiAJCWliX2Rlc3Ryb3lfYWgoYWgpOwogCQlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJCWtmcmVlKHVvYmopOwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1b2JqLCB0bXAsICZjb250ZXh0LT5xcF9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCBpYl9xcCAqcXAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3FwX2lkciwgdW9iai0+aWQpOworCQlzdHJ1Y3QgaWJfcXAgKnFwID0gdW9iai0+b2JqZWN0OwogCQlzdHJ1Y3QgaWJfdXFwX29iamVjdCAqdXFwID0KIAkJCWNvbnRhaW5lcl9vZih1b2JqLCBzdHJ1Y3QgaWJfdXFwX29iamVjdCwgdWV2ZW50LnVvYmplY3QpOwotCQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfcXBfaWRyLCB1b2JqLT5pZCk7CisKKwkJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfcXBfaWRyLCB1b2JqKTsKIAkJaWJfdXZlcmJzX2RldGFjaF91bWNhc3QocXAsIHVxcCk7CiAJCWliX2Rlc3Ryb3lfcXAocXApOwogCQlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CkBAIC0yMDYsMTEgKzIwNiwxMiBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1b2JqLCB0bXAsICZjb250ZXh0LT5jcV9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCBpYl9jcSAqY3EgPSBpZHJfZmluZCgmaWJfdXZlcmJzX2NxX2lkciwgdW9iai0+aWQpOworCQlzdHJ1Y3QgaWJfY3EgKmNxID0gdW9iai0+b2JqZWN0OwogCQlzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUgKmV2X2ZpbGUgPSBjcS0+Y3FfY29udGV4dDsKIAkJc3RydWN0IGliX3VjcV9vYmplY3QgKnVjcSA9CiAJCQljb250YWluZXJfb2YodW9iaiwgc3RydWN0IGliX3VjcV9vYmplY3QsIHVvYmplY3QpOwotCQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfY3FfaWRyLCB1b2JqLT5pZCk7CisKKwkJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfY3FfaWRyLCB1b2JqKTsKIAkJaWJfZGVzdHJveV9jcShjcSk7CiAJCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKIAkJaWJfdXZlcmJzX3JlbGVhc2VfdWNxKGZpbGUsIGV2X2ZpbGUsIHVjcSk7CkBAIC0yMTgsMTAgKzIxOSwxMSBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1b2JqLCB0bXAsICZjb250ZXh0LT5zcnFfbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgaWJfc3JxICpzcnEgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3NycV9pZHIsIHVvYmotPmlkKTsKKwkJc3RydWN0IGliX3NycSAqc3JxID0gdW9iai0+b2JqZWN0OwogCQlzdHJ1Y3QgaWJfdWV2ZW50X29iamVjdCAqdWV2ZW50ID0KIAkJCWNvbnRhaW5lcl9vZih1b2JqLCBzdHJ1Y3QgaWJfdWV2ZW50X29iamVjdCwgdW9iamVjdCk7Ci0JCWlkcl9yZW1vdmUoJmliX3V2ZXJic19zcnFfaWRyLCB1b2JqLT5pZCk7CisKKwkJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfc3JxX2lkciwgdW9iaik7CiAJCWliX2Rlc3Ryb3lfc3JxKHNycSk7CiAJCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKIAkJaWJfdXZlcmJzX3JlbGVhc2VfdWV2ZW50KGZpbGUsIHVldmVudCk7CkBAIC0yMzEsMTEgKzIzMywxMSBAQAogCS8qIFhYWCBGcmVlIE1XcyAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVvYmosIHRtcCwgJmNvbnRleHQtPm1yX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IGliX21yICptciA9IGlkcl9maW5kKCZpYl91dmVyYnNfbXJfaWRyLCB1b2JqLT5pZCk7CisJCXN0cnVjdCBpYl9tciAqbXIgPSB1b2JqLT5vYmplY3Q7CiAJCXN0cnVjdCBpYl9kZXZpY2UgKm1yZGV2ID0gbXItPmRldmljZTsKIAkJc3RydWN0IGliX3VtZW1fb2JqZWN0ICptZW1vYmo7CiAKLQkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX21yX2lkciwgdW9iai0+aWQpOworCQlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19tcl9pZHIsIHVvYmopOwogCQlpYl9kZXJlZ19tcihtcik7CiAKIAkJbWVtb2JqID0gY29udGFpbmVyX29mKHVvYmosIHN0cnVjdCBpYl91bWVtX29iamVjdCwgdW9iamVjdCk7CkBAIC0yNDYsMTUgKzI0OCwxNCBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1b2JqLCB0bXAsICZjb250ZXh0LT5wZF9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCBpYl9wZCAqcGQgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgdW9iai0+aWQpOwotCQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfcGRfaWRyLCB1b2JqLT5pZCk7CisJCXN0cnVjdCBpYl9wZCAqcGQgPSB1b2JqLT5vYmplY3Q7CisKKwkJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfcGRfaWRyLCB1b2JqKTsKIAkJaWJfZGVhbGxvY19wZChwZCk7CiAJCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKIAkJa2ZyZWUodW9iaik7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQogCXJldHVybiBjb250ZXh0LT5kZXZpY2UtPmRlYWxsb2NfdWNvbnRleHQoY29udGV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYXJzaGFsbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21hcnNoYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U0NmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYXJzaGFsbC5jCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxyZG1hL2liX21hcnNoYWxsLmg+CisKK3N0YXRpYyB2b2lkIGliX2NvcHlfYWhfYXR0cl90b191c2VyKHN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciAqZHN0LAorCQkJCSAgICBzdHJ1Y3QgaWJfYWhfYXR0ciAqc3JjKQoreworCW1lbWNweShkc3QtPmdyaC5kZ2lkLCBzcmMtPmdyaC5kZ2lkLnJhdywgc2l6ZW9mIHNyYy0+Z3JoLmRnaWQpOworCWRzdC0+Z3JoLmZsb3dfbGFiZWwgICAgICAgID0gc3JjLT5ncmguZmxvd19sYWJlbDsKKwlkc3QtPmdyaC5zZ2lkX2luZGV4ICAgICAgICA9IHNyYy0+Z3JoLnNnaWRfaW5kZXg7CisJZHN0LT5ncmguaG9wX2xpbWl0ICAgICAgICAgPSBzcmMtPmdyaC5ob3BfbGltaXQ7CisJZHN0LT5ncmgudHJhZmZpY19jbGFzcyAgICAgPSBzcmMtPmdyaC50cmFmZmljX2NsYXNzOworCWRzdC0+ZGxpZCAJICAgIAkgICA9IHNyYy0+ZGxpZDsKKwlkc3QtPnNsICAgCSAgICAJICAgPSBzcmMtPnNsOworCWRzdC0+c3JjX3BhdGhfYml0cyAJICAgPSBzcmMtPnNyY19wYXRoX2JpdHM7CisJZHN0LT5zdGF0aWNfcmF0ZSAgIAkgICA9IHNyYy0+c3RhdGljX3JhdGU7CisJZHN0LT5pc19nbG9iYWwgICAgICAgICAgICAgPSBzcmMtPmFoX2ZsYWdzICYgSUJfQUhfR1JIID8gMSA6IDA7CisJZHN0LT5wb3J0X251bSAJICAgIAkgICA9IHNyYy0+cG9ydF9udW07Cit9CisKK3ZvaWQgaWJfY29weV9xcF9hdHRyX3RvX3VzZXIoc3RydWN0IGliX3V2ZXJic19xcF9hdHRyICpkc3QsCisJCQkgICAgIHN0cnVjdCBpYl9xcF9hdHRyICpzcmMpCit7CisJZHN0LT5jdXJfcXBfc3RhdGUJPSBzcmMtPmN1cl9xcF9zdGF0ZTsKKwlkc3QtPnBhdGhfbXR1CQk9IHNyYy0+cGF0aF9tdHU7CisJZHN0LT5wYXRoX21pZ19zdGF0ZQk9IHNyYy0+cGF0aF9taWdfc3RhdGU7CisJZHN0LT5xa2V5CQk9IHNyYy0+cWtleTsKKwlkc3QtPnJxX3BzbgkJPSBzcmMtPnJxX3BzbjsKKwlkc3QtPnNxX3BzbgkJPSBzcmMtPnNxX3BzbjsKKwlkc3QtPmRlc3RfcXBfbnVtCT0gc3JjLT5kZXN0X3FwX251bTsKKwlkc3QtPnFwX2FjY2Vzc19mbGFncwk9IHNyYy0+cXBfYWNjZXNzX2ZsYWdzOworCisJZHN0LT5tYXhfc2VuZF93cgk9IHNyYy0+Y2FwLm1heF9zZW5kX3dyOworCWRzdC0+bWF4X3JlY3Zfd3IJPSBzcmMtPmNhcC5tYXhfcmVjdl93cjsKKwlkc3QtPm1heF9zZW5kX3NnZQk9IHNyYy0+Y2FwLm1heF9zZW5kX3NnZTsKKwlkc3QtPm1heF9yZWN2X3NnZQk9IHNyYy0+Y2FwLm1heF9yZWN2X3NnZTsKKwlkc3QtPm1heF9pbmxpbmVfZGF0YQk9IHNyYy0+Y2FwLm1heF9pbmxpbmVfZGF0YTsKKworCWliX2NvcHlfYWhfYXR0cl90b191c2VyKCZkc3QtPmFoX2F0dHIsICZzcmMtPmFoX2F0dHIpOworCWliX2NvcHlfYWhfYXR0cl90b191c2VyKCZkc3QtPmFsdF9haF9hdHRyLCAmc3JjLT5hbHRfYWhfYXR0cik7CisKKwlkc3QtPnBrZXlfaW5kZXgJCT0gc3JjLT5wa2V5X2luZGV4OworCWRzdC0+YWx0X3BrZXlfaW5kZXgJPSBzcmMtPmFsdF9wa2V5X2luZGV4OworCWRzdC0+ZW5fc3FkX2FzeW5jX25vdGlmeSA9IHNyYy0+ZW5fc3FkX2FzeW5jX25vdGlmeTsKKwlkc3QtPnNxX2RyYWluaW5nCT0gc3JjLT5zcV9kcmFpbmluZzsKKwlkc3QtPm1heF9yZF9hdG9taWMJPSBzcmMtPm1heF9yZF9hdG9taWM7CisJZHN0LT5tYXhfZGVzdF9yZF9hdG9taWMJPSBzcmMtPm1heF9kZXN0X3JkX2F0b21pYzsKKwlkc3QtPm1pbl9ybnJfdGltZXIJPSBzcmMtPm1pbl9ybnJfdGltZXI7CisJZHN0LT5wb3J0X251bQkJPSBzcmMtPnBvcnRfbnVtOworCWRzdC0+dGltZW91dAkJPSBzcmMtPnRpbWVvdXQ7CisJZHN0LT5yZXRyeV9jbnQJCT0gc3JjLT5yZXRyeV9jbnQ7CisJZHN0LT5ybnJfcmV0cnkJCT0gc3JjLT5ybnJfcmV0cnk7CisJZHN0LT5hbHRfcG9ydF9udW0JPSBzcmMtPmFsdF9wb3J0X251bTsKKwlkc3QtPmFsdF90aW1lb3V0CT0gc3JjLT5hbHRfdGltZW91dDsKK30KK0VYUE9SVF9TWU1CT0woaWJfY29weV9xcF9hdHRyX3RvX3VzZXIpOworCit2b2lkIGliX2NvcHlfcGF0aF9yZWNfdG9fdXNlcihzdHJ1Y3QgaWJfdXNlcl9wYXRoX3JlYyAqZHN0LAorCQkJICAgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpzcmMpCit7CisJbWVtY3B5KGRzdC0+ZGdpZCwgc3JjLT5kZ2lkLnJhdywgc2l6ZW9mIHNyYy0+ZGdpZCk7CisJbWVtY3B5KGRzdC0+c2dpZCwgc3JjLT5zZ2lkLnJhdywgc2l6ZW9mIHNyYy0+c2dpZCk7CisKKwlkc3QtPmRsaWQJCT0gc3JjLT5kbGlkOworCWRzdC0+c2xpZAkJPSBzcmMtPnNsaWQ7CisJZHN0LT5yYXdfdHJhZmZpYwk9IHNyYy0+cmF3X3RyYWZmaWM7CisJZHN0LT5mbG93X2xhYmVsCQk9IHNyYy0+Zmxvd19sYWJlbDsKKwlkc3QtPmhvcF9saW1pdAkJPSBzcmMtPmhvcF9saW1pdDsKKwlkc3QtPnRyYWZmaWNfY2xhc3MJPSBzcmMtPnRyYWZmaWNfY2xhc3M7CisJZHN0LT5yZXZlcnNpYmxlCQk9IHNyYy0+cmV2ZXJzaWJsZTsKKwlkc3QtPm51bWJfcGF0aAkJPSBzcmMtPm51bWJfcGF0aDsKKwlkc3QtPnBrZXkJCT0gc3JjLT5wa2V5OworCWRzdC0+c2wJCQk9IHNyYy0+c2w7CisJZHN0LT5tdHVfc2VsZWN0b3IJPSBzcmMtPm10dV9zZWxlY3RvcjsKKwlkc3QtPm10dQkJPSBzcmMtPm10dTsKKwlkc3QtPnJhdGVfc2VsZWN0b3IJPSBzcmMtPnJhdGVfc2VsZWN0b3I7CisJZHN0LT5yYXRlCQk9IHNyYy0+cmF0ZTsKKwlkc3QtPnBhY2tldF9saWZlX3RpbWUJPSBzcmMtPnBhY2tldF9saWZlX3RpbWU7CisJZHN0LT5wcmVmZXJlbmNlCQk9IHNyYy0+cHJlZmVyZW5jZTsKKwlkc3QtPnBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3IgPSBzcmMtPnBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3I7Cit9CitFWFBPUlRfU1lNQk9MKGliX2NvcHlfcGF0aF9yZWNfdG9fdXNlcik7CisKK3ZvaWQgaWJfY29weV9wYXRoX3JlY19mcm9tX3VzZXIoc3RydWN0IGliX3NhX3BhdGhfcmVjICpkc3QsCisJCQkJc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgKnNyYykKK3sKKwltZW1jcHkoZHN0LT5kZ2lkLnJhdywgc3JjLT5kZ2lkLCBzaXplb2YgZHN0LT5kZ2lkKTsKKwltZW1jcHkoZHN0LT5zZ2lkLnJhdywgc3JjLT5zZ2lkLCBzaXplb2YgZHN0LT5zZ2lkKTsKKworCWRzdC0+ZGxpZAkJPSBzcmMtPmRsaWQ7CisJZHN0LT5zbGlkCQk9IHNyYy0+c2xpZDsKKwlkc3QtPnJhd190cmFmZmljCT0gc3JjLT5yYXdfdHJhZmZpYzsKKwlkc3QtPmZsb3dfbGFiZWwJCT0gc3JjLT5mbG93X2xhYmVsOworCWRzdC0+aG9wX2xpbWl0CQk9IHNyYy0+aG9wX2xpbWl0OworCWRzdC0+dHJhZmZpY19jbGFzcwk9IHNyYy0+dHJhZmZpY19jbGFzczsKKwlkc3QtPnJldmVyc2libGUJCT0gc3JjLT5yZXZlcnNpYmxlOworCWRzdC0+bnVtYl9wYXRoCQk9IHNyYy0+bnVtYl9wYXRoOworCWRzdC0+cGtleQkJPSBzcmMtPnBrZXk7CisJZHN0LT5zbAkJCT0gc3JjLT5zbDsKKwlkc3QtPm10dV9zZWxlY3Rvcgk9IHNyYy0+bXR1X3NlbGVjdG9yOworCWRzdC0+bXR1CQk9IHNyYy0+bXR1OworCWRzdC0+cmF0ZV9zZWxlY3Rvcgk9IHNyYy0+cmF0ZV9zZWxlY3RvcjsKKwlkc3QtPnJhdGUJCT0gc3JjLT5yYXRlOworCWRzdC0+cGFja2V0X2xpZmVfdGltZQk9IHNyYy0+cGFja2V0X2xpZmVfdGltZTsKKwlkc3QtPnByZWZlcmVuY2UJCT0gc3JjLT5wcmVmZXJlbmNlOworCWRzdC0+cGFja2V0X2xpZmVfdGltZV9zZWxlY3RvciA9IHNyYy0+cGFja2V0X2xpZmVfdGltZV9zZWxlY3RvcjsKK30KK0VYUE9SVF9TWU1CT0woaWJfY29weV9wYXRoX3JlY19mcm9tX3VzZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKaW5kZXggYjc4ZTdkYy4uNDY4OTk5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCkBAIC0xMjUsMzUgKzEyNSw0NyBAQAogfQogRVhQT1JUX1NZTUJPTChpYl9jcmVhdGVfYWgpOwogCi1zdHJ1Y3QgaWJfYWggKmliX2NyZWF0ZV9haF9mcm9tX3djKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl93YyAqd2MsCi0JCQkJICAgc3RydWN0IGliX2dyaCAqZ3JoLCB1OCBwb3J0X251bSkKK2ludCBpYl9pbml0X2FoX2Zyb21fd2Moc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwgc3RydWN0IGliX3djICp3YywKKwkJICAgICAgIHN0cnVjdCBpYl9ncmggKmdyaCwgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpCiB7Ci0Jc3RydWN0IGliX2FoX2F0dHIgYWhfYXR0cjsKIAl1MzIgZmxvd19jbGFzczsKIAl1MTYgZ2lkX2luZGV4OwogCWludCByZXQ7CiAKLQltZW1zZXQoJmFoX2F0dHIsIDAsIHNpemVvZiBhaF9hdHRyKTsKLQlhaF9hdHRyLmRsaWQgPSB3Yy0+c2xpZDsKLQlhaF9hdHRyLnNsID0gd2MtPnNsOwotCWFoX2F0dHIuc3JjX3BhdGhfYml0cyA9IHdjLT5kbGlkX3BhdGhfYml0czsKLQlhaF9hdHRyLnBvcnRfbnVtID0gcG9ydF9udW07CisJbWVtc2V0KGFoX2F0dHIsIDAsIHNpemVvZiAqYWhfYXR0cik7CisJYWhfYXR0ci0+ZGxpZCA9IHdjLT5zbGlkOworCWFoX2F0dHItPnNsID0gd2MtPnNsOworCWFoX2F0dHItPnNyY19wYXRoX2JpdHMgPSB3Yy0+ZGxpZF9wYXRoX2JpdHM7CisJYWhfYXR0ci0+cG9ydF9udW0gPSBwb3J0X251bTsKIAogCWlmICh3Yy0+d2NfZmxhZ3MgJiBJQl9XQ19HUkgpIHsKLQkJYWhfYXR0ci5haF9mbGFncyA9IElCX0FIX0dSSDsKLQkJYWhfYXR0ci5ncmguZGdpZCA9IGdyaC0+c2dpZDsKKwkJYWhfYXR0ci0+YWhfZmxhZ3MgPSBJQl9BSF9HUkg7CisJCWFoX2F0dHItPmdyaC5kZ2lkID0gZ3JoLT5zZ2lkOwogCi0JCXJldCA9IGliX2ZpbmRfY2FjaGVkX2dpZChwZC0+ZGV2aWNlLCAmZ3JoLT5kZ2lkLCAmcG9ydF9udW0sCisJCXJldCA9IGliX2ZpbmRfY2FjaGVkX2dpZChkZXZpY2UsICZncmgtPmRnaWQsICZwb3J0X251bSwKIAkJCQkJICZnaWRfaW5kZXgpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJCXJldHVybiByZXQ7CiAKLQkJYWhfYXR0ci5ncmguc2dpZF9pbmRleCA9ICh1OCkgZ2lkX2luZGV4OworCQlhaF9hdHRyLT5ncmguc2dpZF9pbmRleCA9ICh1OCkgZ2lkX2luZGV4OwogCQlmbG93X2NsYXNzID0gYmUzMl90b19jcHUoZ3JoLT52ZXJzaW9uX3RjbGFzc19mbG93KTsKLQkJYWhfYXR0ci5ncmguZmxvd19sYWJlbCA9IGZsb3dfY2xhc3MgJiAweEZGRkZGOwotCQlhaF9hdHRyLmdyaC50cmFmZmljX2NsYXNzID0gKGZsb3dfY2xhc3MgPj4gMjApICYgMHhGRjsKLQkJYWhfYXR0ci5ncmguaG9wX2xpbWl0ID0gZ3JoLT5ob3BfbGltaXQ7CisJCWFoX2F0dHItPmdyaC5mbG93X2xhYmVsID0gZmxvd19jbGFzcyAmIDB4RkZGRkY7CisJCWFoX2F0dHItPmdyaC5ob3BfbGltaXQgPSBncmgtPmhvcF9saW1pdDsKKwkJYWhfYXR0ci0+Z3JoLnRyYWZmaWNfY2xhc3MgPSAoZmxvd19jbGFzcyA+PiAyMCkgJiAweEZGOwogCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaWJfaW5pdF9haF9mcm9tX3djKTsKKworc3RydWN0IGliX2FoICppYl9jcmVhdGVfYWhfZnJvbV93YyhzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfd2MgKndjLAorCQkJCSAgIHN0cnVjdCBpYl9ncmggKmdyaCwgdTggcG9ydF9udW0pCit7CisJc3RydWN0IGliX2FoX2F0dHIgYWhfYXR0cjsKKwlpbnQgcmV0OworCisJcmV0ID0gaWJfaW5pdF9haF9mcm9tX3djKHBkLT5kZXZpY2UsIHBvcnRfbnVtLCB3YywgZ3JoLCAmYWhfYXR0cik7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAogCXJldHVybiBpYl9jcmVhdGVfYWgocGQsICZhaF9hdHRyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwppbmRleCBmN2Y4MzkxLi4xYTlkMGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCkBAIC0xMzcsNDcgKzEzNywxMSBAQAogCXJldHVybiByZXBseShzbXApOwogfQogCi1zdHJ1Y3QgcG9ydF9pbmZvIHsKLQlfX2JlNjQgbWtleTsKLQlfX2JlNjQgZ2lkX3ByZWZpeDsKLQlfX2JlMTYgbGlkOwotCV9fYmUxNiBzbV9saWQ7Ci0JX19iZTMyIGNhcF9tYXNrOwotCV9fYmUxNiBkaWFnX2NvZGU7Ci0JX19iZTE2IG1rZXlfbGVhc2VfcGVyaW9kOwotCXU4IGxvY2FsX3BvcnRfbnVtOwotCXU4IGxpbmtfd2lkdGhfZW5hYmxlZDsKLQl1OCBsaW5rX3dpZHRoX3N1cHBvcnRlZDsKLQl1OCBsaW5rX3dpZHRoX2FjdGl2ZTsKLQl1OCBsaW5rc3BlZWRfcG9ydHN0YXRlOwkJCS8qIDQgYml0cywgNCBiaXRzICovCi0JdTggcG9ydHBoeXNzdGF0ZV9saW5rZG93bjsJCS8qIDQgYml0cywgNCBiaXRzICovCi0JdTggbWtleXByb3RfcmVzdl9sbWM7CQkJLyogMiBiaXRzLCAzLCAzICovCi0JdTggbGlua3NwZWVkYWN0aXZlX2VuYWJsZWQ7CQkvKiA0IGJpdHMsIDQgYml0cyAqLwotCXU4IG5laWdoYm9ybXR1X21hc3RlcnNtc2w7CQkvKiA0IGJpdHMsIDQgYml0cyAqLwotCXU4IHZsY2FwX2luaXR0eXBlOwkJCS8qIDQgYml0cywgNCBiaXRzICovCi0JdTggdmxfaGlnaF9saW1pdDsKLQl1OCB2bF9hcmJfaGlnaF9jYXA7Ci0JdTggdmxfYXJiX2xvd19jYXA7Ci0JdTggaW5pdHR5cGVyZXBseV9tdHVjYXA7CQkvKiA0IGJpdHMsIDQgYml0cyAqLwotCXU4IHZsc3RhbGxjbnRfaG9xbGlmZTsJCQkvKiAzIGJpdHMsIDUgYml0cyAqLwotCXU4IG9wZXJhdGlvbmFsdmxfcGVpX3Blb19mcGlfZnBvOwkvKiA0IGJpdHMsIDEsIDEsIDEsIDEgKi8KLQlfX2JlMTYgbWtleV92aW9sYXRpb25zOwotCV9fYmUxNiBwa2V5X3Zpb2xhdGlvbnM7Ci0JX19iZTE2IHFrZXlfdmlvbGF0aW9uczsKLQl1OCBndWlkX2NhcDsKLQl1OCBjbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvOwkJLyogMSBiaXQsIDIgYml0cywgNSAqLwotCXU4IHJlc3ZfcmVzcHRpbWV2YWx1ZTsJCQkvKiAzIGJpdHMsIDUgYml0cyAqLwotCXU4IGxvY2FscGh5ZXJyb3JzX292ZXJydW5lcnJvcnM7CS8qIDQgYml0cywgNCBiaXRzICovCi0JX19iZTE2IG1heF9jcmVkaXRfaGludDsKLQl1OCByZXN2OwotCXU4IGxpbmtfcm91bmR0cmlwX2xhdGVuY3lbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RhdGljIGludCByZWN2X3N1Ym5fZ2V0X3BvcnRpbmZvKHN0cnVjdCBpYl9zbXAgKnNtcCwKIAkJCQkgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OwotCXN0cnVjdCBwb3J0X2luZm8gKnBpcCA9IChzdHJ1Y3QgcG9ydF9pbmZvICopc21wLT5kYXRhOworCXN0cnVjdCBpYl9wb3J0X2luZm8gKnBpcCA9IChzdHJ1Y3QgaWJfcG9ydF9pbmZvICopc21wLT5kYXRhOwogCXUxNiBsaWQ7CiAJdTggaWJjc3RhdDsKIAl1OCBtdHU7CkBAIC0zMTIsNyArMjc2LDcgQEAKIHN0YXRpYyBpbnQgcmVjdl9zdWJuX3NldF9wb3J0aW5mbyhzdHJ1Y3QgaWJfc21wICpzbXAsCiAJCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKIHsKLQlzdHJ1Y3QgcG9ydF9pbmZvICpwaXAgPSAoc3RydWN0IHBvcnRfaW5mbyAqKXNtcC0+ZGF0YTsKKwlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaXAgPSAoc3RydWN0IGliX3BvcnRfaW5mbyAqKXNtcC0+ZGF0YTsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXY7CiAJdTMyIGZsYWdzOwpAQCAtNDQ1LDcgKzQwOSw3IEBACiAKIAlpZiAocGlwLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkgewogCQljbGllbnRyZXJlZyA9IDE7Ci0JCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUjsKIAkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwppbmRleCA3OThlMTNlLi5kMGY3NzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCkBAIC0xNzQsNyArMTc0LDYgQEAKIAogc3RydWN0IG10aGNhX2NtZF9jb250ZXh0IHsKIAlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCWludCAgICAgICAgICAgICAgIHJlc3VsdDsKIAlpbnQgICAgICAgICAgICAgICBuZXh0OwogCXU2NCAgICAgICAgICAgICAgIG91dF9wYXJhbTsKQEAgLTM2MiwxNSArMzYxLDYgQEAKIAljb21wbGV0ZSgmY29udGV4dC0+ZG9uZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGV2ZW50X3RpbWVvdXQodW5zaWduZWQgbG9uZyBjb250ZXh0X3B0cikKLXsKLQlzdHJ1Y3QgbXRoY2FfY21kX2NvbnRleHQgKmNvbnRleHQgPQotCQkoc3RydWN0IG10aGNhX2NtZF9jb250ZXh0ICopIGNvbnRleHRfcHRyOwotCi0JY29udGV4dC0+cmVzdWx0ID0gLUVCVVNZOwotCWNvbXBsZXRlKCZjb250ZXh0LT5kb25lKTsKLX0KLQogc3RhdGljIGludCBtdGhjYV9jbWRfd2FpdChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCiAJCQkgIHU2NCBpbl9wYXJhbSwKIAkJCSAgdTY0ICpvdXRfcGFyYW0sCkBAIC00MDEsMTEgKzM5MSwxMCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JY29udGV4dC0+dGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgdGltZW91dDsKLQlhZGRfdGltZXIoJmNvbnRleHQtPnRpbWVyKTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbnRleHQtPmRvbmUpOwotCWRlbF90aW1lcl9zeW5jKCZjb250ZXh0LT50aW1lcik7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNvbnRleHQtPmRvbmUsIHRpbWVvdXQpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQogCiAJZXJyID0gY29udGV4dC0+cmVzdWx0OwogCWlmIChlcnIpCkBAIC01MzUsMTAgKzUyNCw2IEBACiAJZm9yIChpID0gMDsgaSA8IGRldi0+Y21kLm1heF9jbWRzOyArK2kpIHsKIAkJZGV2LT5jbWQuY29udGV4dFtpXS50b2tlbiA9IGk7CiAJCWRldi0+Y21kLmNvbnRleHRbaV0ubmV4dCA9IGkgKyAxOwotCQlpbml0X3RpbWVyKCZkZXYtPmNtZC5jb250ZXh0W2ldLnRpbWVyKTsKLQkJZGV2LT5jbWQuY29udGV4dFtpXS50aW1lci5kYXRhICAgICA9Ci0JCQkodW5zaWduZWQgbG9uZykgJmRldi0+Y21kLmNvbnRleHRbaV07Ci0JCWRldi0+Y21kLmNvbnRleHRbaV0udGltZXIuZnVuY3Rpb24gPSBldmVudF90aW1lb3V0OwogCX0KIAogCWRldi0+Y21kLmNvbnRleHRbZGV2LT5jbWQubWF4X2NtZHMgLSAxXS5uZXh0ID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCmluZGV4IDIwNTg1NGUuLjNlMjdhMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCkBAIC01NDAsOCArNTQwLDE3IEBACiAJCWVudHJ5LT53cl9pZCA9IHNycS0+d3JpZFt3cWVfaW5kZXhdOwogCQltdGhjYV9mcmVlX3NycV93cWUoc3JxLCB3cWUpOwogCX0gZWxzZSB7CisJCXMzMiB3cWU7CiAJCXdxID0gJigqY3VyX3FwKS0+cnE7Ci0JCXdxZV9pbmRleCA9IGJlMzJfdG9fY3B1KGNxZS0+d3FlKSA+PiB3cS0+d3FlX3NoaWZ0OworCQl3cWUgPSBiZTMyX3RvX2NwdShjcWUtPndxZSk7CisJCXdxZV9pbmRleCA9IHdxZSA+PiB3cS0+d3FlX3NoaWZ0OworICAgICAgICAgICAgICAgLyoKKwkJKiBXUUUgYWRkciA9PSBiYXNlIC0gMSBtaWdodCBiZSByZXBvcnRlZCBpbiByZWNlaXZlIGNvbXBsZXRpb24KKwkJKiB3aXRoIGVycm9yIGluc3RlYWQgb2YgKHJxIHNpemUgLSAxKSBieSBTaW5haSBGVyAxLjAuODAwIGFuZAorCQkqIEFyYmVsIEZXIDUuMS40MDAuICBUaGlzIGJ1ZyBzaG91bGQgYmUgZml4ZWQgaW4gbGF0ZXIgRlcgcmV2cy4KKwkJKi8KKwkJaWYgKHVubGlrZWx5KHdxZV9pbmRleCA8IDApKQorCQkJd3FlX2luZGV4ID0gd3EtPm1heCAtIDE7CiAJCWVudHJ5LT53cl9pZCA9ICgqY3VyX3FwKS0+d3JpZFt3cWVfaW5kZXhdOwogCX0KIApAQCAtODEzLDYgKzgyMiw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmNxLT5sb2NrKTsKIAljcS0+cmVmY291bnQgPSAxOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNxLT53YWl0KTsKKwltdXRleF9pbml0KCZjcS0+bXV0ZXgpOwogCiAJbWVtc2V0KGNxX2NvbnRleHQsIDAsIHNpemVvZiAqY3FfY29udGV4dCk7CiAJY3FfY29udGV4dC0+ZmxhZ3MgICAgICAgICAgID0gY3B1X3RvX2JlMzIoTVRIQ0FfQ1FfU1RBVFVTX09LICAgICAgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwppbmRleCA5OWYxMDljLi5kNTM2MjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwpAQCAtNjk1LDEwICs2OTUsNiBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtdGhjYV9tYXBfZXFfcmVncyhzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBtdGhjYV9iYXNlOwotCi0JbXRoY2FfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApOwotCiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgewogCQkvKgogCQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgRVEgYXJtIGFuZCBFUSBzZXQgQ0kgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKaW5kZXggNDczMDg2My4uZDliYzAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwpAQCAtMTE0LDE0ICsxMTQsMjIgQEAKIAkgICAgIG1hZC0+bWFkX2hkci5tZ210X2NsYXNzICA9PSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpICYmCiAJICAgIG1hZC0+bWFkX2hkci5tZXRob2QgICAgID09IElCX01HTVRfTUVUSE9EX1NFVCkgewogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPKSB7CisJCQlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaW5mbyA9CisJCQkJKHN0cnVjdCBpYl9wb3J0X2luZm8gKikgKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGE7CisKIAkJCW10aGNhX3VwZGF0ZV9yYXRlKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSk7CiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLAotCQkJCSAgICAgYmUxNl90b19jcHVwKChfX2JlMTYgKikgKG1hZC0+ZGF0YSArIDU4KSksCi0JCQkJICAgICAoKih1OCAqKSAobWFkLT5kYXRhICsgNzYpKSAmIDB4Zik7CisJCQkJICAgICBiZTE2X3RvX2NwdShwaW5mby0+bGlkKSwKKwkJCQkgICAgIHBpbmZvLT5uZWlnaGJvcm10dV9tYXN0ZXJzbXNsICYgMHhmKTsKIAogCQkJZXZlbnQuZGV2aWNlICAgICAgICAgICA9IGliZGV2OwotCQkJZXZlbnQuZXZlbnQgICAgICAgICAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CiAJCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydF9udW07CisKKwkJCWlmKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOworCQkJZWxzZQorCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwogCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCmluZGV4IGEyZWFlOGEuLjIzMGFlMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCkBAIC0xMTUsNiArMTE1LDE2IEBACiAJcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggPSBNVEhDQV9RUF9QRVJfTUdNOwogCXByb3BzLT5tYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoID0gcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggKgogCQkJCQkgICBwcm9wcy0+bWF4X21jYXN0X2dycDsKKwkvKgorCSAqIElmIFNpbmFpIG1lbW9yeSBrZXkgb3B0aW1pemF0aW9uIGlzIGJlaW5nIHVzZWQsIHRoZW4gb25seQorCSAqIHRoZSA4LWJpdCBrZXkgcG9ydGlvbiB3aWxsIGNoYW5nZS4gIEZvciBvdGhlciBIQ0FzLCB0aGUKKwkgKiB1bnVzZWQgaW5kZXggYml0cyB3aWxsIGFsc28gYmUgdXNlZCBmb3IgRk1SIHJlbWFwcGluZy4KKwkgKi8KKwlpZiAobWRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX1NJTkFJX09QVCkKKwkJcHJvcHMtPm1heF9tYXBfcGVyX2ZtciA9IDI1NTsKKwllbHNlCisJCXByb3BzLT5tYXhfbWFwX3Blcl9mbXIgPQorCQkJKDEgPDwgKDMyIC0gbG9uZ19sb2cyKG1kZXYtPmxpbWl0cy5udW1fbXB0cykpKSAtIDE7CiAKIAllcnIgPSAwOwogIG91dDoKQEAgLTc4MywxOCArNzkzLDI0IEBACiAJaWYgKGVudHJpZXMgPCAxIHx8IGVudHJpZXMgPiBkZXYtPmxpbWl0cy5tYXhfY3FlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZjcS0+bXV0ZXgpOworCiAJZW50cmllcyA9IHJvdW5kdXBfcG93X29mX3R3byhlbnRyaWVzICsgMSk7Ci0JaWYgKGVudHJpZXMgPT0gaWJjcS0+Y3FlICsgMSkKLQkJcmV0dXJuIDA7CisJaWYgKGVudHJpZXMgPT0gaWJjcS0+Y3FlICsgMSkgeworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAoY3EtPmlzX2tlcm5lbCkgewogCQlyZXQgPSBtdGhjYV9hbGxvY19yZXNpemVfYnVmKGRldiwgY3EsIGVudHJpZXMpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCQlsa2V5ID0gY3EtPnJlc2l6ZV9idWYtPmJ1Zi5tci5pYm1yLmxrZXk7CiAJfSBlbHNlIHsKLQkJaWYgKGliX2NvcHlfZnJvbV91ZGF0YSgmdWNtZCwgdWRhdGEsIHNpemVvZiB1Y21kKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoaWJfY29weV9mcm9tX3VkYXRhKCZ1Y21kLCB1ZGF0YSwgc2l6ZW9mIHVjbWQpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KIAkJbGtleSA9IHVjbWQubGtleTsKIAl9CiAKQEAgLTgxMSw3ICs4MjcsNyBAQAogCQkJY3EtPnJlc2l6ZV9idWYgPSBOVUxMOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZjcS0+bG9jayk7CiAJCX0KLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKGNxLT5pc19rZXJuZWwpIHsKQEAgLTgzOCw3ICs4NTQsMTAgQEAKIAl9IGVsc2UKIAkJaWJjcS0+Y3FlID0gZW50cmllcyAtIDE7CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJmNxLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10aGNhX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICpjcSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKaW5kZXggMTc5YThmNi4uOGRlMjg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKQEAgLTIxNCw2ICsyMTQsNyBAQAogCWludAkJCWFybV9zbjsKIAogCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJc3RydWN0IG11dGV4CQltdXRleDsKIH07CiAKIHN0cnVjdCBtdGhjYV9zcnEgewpAQCAtMjM3LDYgKzIzOCw3IEBACiAJc3RydWN0IG10aGNhX21yCQltcjsKIAogCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJc3RydWN0IG11dGV4CQltdXRleDsKIH07CiAKIHN0cnVjdCBtdGhjYV93cSB7CkBAIC0yNzgsNiArMjgwLDcgQEAKIAl1bmlvbiBtdGhjYV9idWYJICAgICAgIHF1ZXVlOwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICB3YWl0OworCXN0cnVjdCBtdXRleAkgICAgICAgbXV0ZXg7CiB9OwogCiBzdHJ1Y3QgbXRoY2Ffc3FwIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggMDdjMTNiZS4uMTZjMzg3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTUzNCw3ICs1MzQsOSBAQAogCXN0cnVjdCBtdGhjYV9xcF9jb250ZXh0ICpxcF9jb250ZXh0OwogCXUzMiBzcWRfZXZlbnQgPSAwOwogCXU4IHN0YXR1czsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcXAtPm11dGV4KTsKIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9DVVJfU1RBVEUpIHsKIAkJY3VyX3N0YXRlID0gYXR0ci0+Y3VyX3FwX3N0YXRlOwpAQCAtNTUzLDM5ICs1NTUsNDEgQEAKIAkJCSAgIiVkLT4lZCB3aXRoIGF0dHIgMHglMDh4XG4iLAogCQkJICBxcC0+dHJhbnNwb3J0LCBjdXJfc3RhdGUsIG5ld19zdGF0ZSwKIAkJCSAgYXR0cl9tYXNrKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmICgoYXR0cl9tYXNrICYgSUJfUVBfUEtFWV9JTkRFWCkgJiYKIAkgICAgIGF0dHItPnBrZXlfaW5kZXggPj0gZGV2LT5saW1pdHMucGtleV90YWJsZV9sZW4pIHsKIAkJbXRoY2FfZGJnKGRldiwgIlBfS2V5IGluZGV4ICgldSkgdG9vIGxhcmdlLiBtYXggaXMgJWRcbiIsCiAJCQkgIGF0dHItPnBrZXlfaW5kZXgsIGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuLTEpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSAmJgogCSAgICAoYXR0ci0+cG9ydF9udW0gPT0gMCB8fCBhdHRyLT5wb3J0X251bSA+IGRldi0+bGltaXRzLm51bV9wb3J0cykpIHsKIAkJbXRoY2FfZGJnKGRldiwgIlBvcnQgbnVtYmVyICgldSkgaXMgaW52YWxpZFxuIiwgYXR0ci0+cG9ydF9udW0pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9RUF9SRF9BVE9NSUMgJiYKIAkgICAgYXR0ci0+bWF4X3JkX2F0b21pYyA+IGRldi0+bGltaXRzLm1heF9xcF9pbml0X3JkbWEpIHsKIAkJbXRoY2FfZGJnKGRldiwgIk1heCByZG1hX2F0b21pYyBhcyBpbml0aWF0b3IgJXUgdG9vIGxhcmdlIChtYXggaXMgJWQpXG4iLAogCQkJICBhdHRyLT5tYXhfcmRfYXRvbWljLCBkZXYtPmxpbWl0cy5tYXhfcXBfaW5pdF9yZG1hKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMgJiYKIAkgICAgYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljID4gMSA8PCBkZXYtPnFwX3RhYmxlLnJkYl9zaGlmdCkgewogCQltdGhjYV9kYmcoZGV2LCAiTWF4IHJkbWFfYXRvbWljIGFzIHJlc3BvbmRlciAldSB0b28gbGFyZ2UgKG1heCAlZClcbiIsCiAJCQkgIGF0dHItPm1heF9kZXN0X3JkX2F0b21pYywgMSA8PCBkZXYtPnFwX3RhYmxlLnJkYl9zaGlmdCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAltYWlsYm94ID0gbXRoY2FfYWxsb2NfbWFpbGJveChkZXYsIEdGUF9LRVJORUwpOwotCWlmIChJU19FUlIobWFpbGJveCkpCi0JCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCWlmIChJU19FUlIobWFpbGJveCkpIHsKKwkJZXJyID0gUFRSX0VSUihtYWlsYm94KTsKKwkJZ290byBvdXQ7CisJfQogCXFwX3BhcmFtID0gbWFpbGJveC0+YnVmOwogCXFwX2NvbnRleHQgPSAmcXBfcGFyYW0tPmNvbnRleHQ7CiAJbWVtc2V0KHFwX3BhcmFtLCAwLCBzaXplb2YgKnFwX3BhcmFtKTsKQEAgLTYxOCw3ICs2MjIsNyBAQAogCQlpZiAoYXR0ci0+cGF0aF9tdHUgPCBJQl9NVFVfMjU2IHx8IGF0dHItPnBhdGhfbXR1ID4gSUJfTVRVXzIwNDgpIHsKIAkJCW10aGNhX2RiZyhkZXYsICJwYXRoIE1UVSAoJXUpIGlzIGludmFsaWRcbiIsCiAJCQkJICBhdHRyLT5wYXRoX210dSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X21haWxib3g7CiAJCX0KIAkJcXBfY29udGV4dC0+bXR1X21zZ21heCA9IChhdHRyLT5wYXRoX210dSA8PCA1KSB8IDMxOwogCX0KQEAgLTY3Miw3ICs2NzYsNyBAQAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BVikgewogCQlpZiAobXRoY2FfcGF0aF9zZXQoZGV2LCAmYXR0ci0+YWhfYXR0ciwgJnFwX2NvbnRleHQtPnByaV9wYXRoLAogCQkJCSAgIGF0dHJfbWFzayAmIElCX1FQX1BPUlQgPyBhdHRyLT5wb3J0X251bSA6IHFwLT5wb3J0KSkKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZ290byBvdXRfbWFpbGJveDsKIAogCQlxcF9wYXJhbS0+b3B0X3BhcmFtX21hc2sgfD0gY3B1X3RvX2JlMzIoTVRIQ0FfUVBfT1BUUEFSX1BSSU1BUllfQUREUl9QQVRIKTsKIAl9CkBAIC02ODYsMTggKzY5MCwxOCBAQAogCQlpZiAoYXR0ci0+YWx0X3BrZXlfaW5kZXggPj0gZGV2LT5saW1pdHMucGtleV90YWJsZV9sZW4pIHsKIAkJCW10aGNhX2RiZyhkZXYsICJBbHRlcm5hdGUgUF9LZXkgaW5kZXggKCV1KSB0b28gbGFyZ2UuIG1heCBpcyAlZFxuIiwKIAkJCQkgIGF0dHItPmFsdF9wa2V5X2luZGV4LCBkZXYtPmxpbWl0cy5wa2V5X3RhYmxlX2xlbi0xKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZ290byBvdXRfbWFpbGJveDsKIAkJfQogCiAJCWlmIChhdHRyLT5hbHRfcG9ydF9udW0gPT0gMCB8fCBhdHRyLT5hbHRfcG9ydF9udW0gPiBkZXYtPmxpbWl0cy5udW1fcG9ydHMpIHsKIAkJCW10aGNhX2RiZyhkZXYsICJBbHRlcm5hdGUgcG9ydCBudW1iZXIgKCV1KSBpcyBpbnZhbGlkXG4iLAogCQkJCWF0dHItPmFsdF9wb3J0X251bSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X21haWxib3g7CiAJCX0KIAogCQlpZiAobXRoY2FfcGF0aF9zZXQoZGV2LCAmYXR0ci0+YWx0X2FoX2F0dHIsICZxcF9jb250ZXh0LT5hbHRfcGF0aCwKIAkJCQkgICBhdHRyLT5hbHRfYWhfYXR0ci5wb3J0X251bSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X21haWxib3g7CiAKIAkJcXBfY29udGV4dC0+YWx0X3BhdGgucG9ydF9wa2V5IHw9IGNwdV90b19iZTMyKGF0dHItPmFsdF9wa2V5X2luZGV4IHwKIAkJCQkJCQkgICAgICBhdHRyLT5hbHRfcG9ydF9udW0gPDwgMjQpOwpAQCAtNzkzLDEyICs3OTcsMTIgQEAKIAllcnIgPSBtdGhjYV9NT0RJRllfUVAoZGV2LCBjdXJfc3RhdGUsIG5ld19zdGF0ZSwgcXAtPnFwbiwgMCwKIAkJCSAgICAgIG1haWxib3gsIHNxZF9ldmVudCwgJnN0YXR1cyk7CiAJaWYgKGVycikKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X21haWxib3g7CiAJaWYgKHN0YXR1cykgewogCQltdGhjYV93YXJuKGRldiwgIm1vZGlmeSBRUCAlZC0+JWQgcmV0dXJuZWQgc3RhdHVzICUwMnguXG4iLAogCQkJICAgY3VyX3N0YXRlLCBuZXdfc3RhdGUsIHN0YXR1cyk7CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9tYWlsYm94OwogCX0KIAogCXFwLT5zdGF0ZSA9IG5ld19zdGF0ZTsKQEAgLTg1Myw4ICs4NTcsMTEgQEAKIAkJfQogCX0KIAotb3V0Ogorb3V0X21haWxib3g6CiAJbXRoY2FfZnJlZV9tYWlsYm94KGRldiwgbWFpbGJveCk7CisKK291dDoKKwltdXRleF91bmxvY2soJnFwLT5tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTEwMCw2ICsxMTA3LDcgQEAKIAogCXFwLT5yZWZjb3VudCA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcXAtPndhaXQpOworCW11dGV4X2luaXQoJnFwLT5tdXRleCk7CiAJcXAtPnN0YXRlICAgIAkgPSBJQl9RUFNfUkVTRVQ7CiAJcXAtPmF0b21pY19yZF9lbiA9IDA7CiAJcXAtPnJlc3BfZGVwdGggICA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9yZXNldC5jCmluZGV4IGRmNWU0OTQuLmY0ZmRkZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9yZXNldC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9yZXNldC5jCkBAIC00OSw2ICs0OSwxMiBAQAogCXUzMiAqaGNhX2hlYWRlciAgICA9IE5VTEw7CiAJdTMyICpicmlkZ2VfaGVhZGVyID0gTlVMTDsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gTlVMTDsKKwlpbnQgYnJpZGdlX3BjaXhfY2FwID0gMDsKKwlpbnQgaGNhX3BjaWVfY2FwID0gMDsKKwlpbnQgaGNhX3BjaXhfY2FwID0gMDsKKworCXUxNiBkZXZjdGw7CisJdTE2IGxpbmtjdGw7CiAKICNkZWZpbmUgTVRIQ0FfUkVTRVRfT0ZGU0VUIDB4ZjAwMTAKICNkZWZpbmUgTVRIQ0FfUkVTRVRfVkFMVUUgIHN3YWIzMigxKQpAQCAtMTEwLDYgKzExNiw5IEBACiAJCX0KIAl9CiAKKwloY2FfcGNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KG1kZXYtPnBkZXYsIFBDSV9DQVBfSURfUENJWCk7CisJaGNhX3BjaWVfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShtZGV2LT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisKIAlpZiAoYnJpZGdlKSB7CiAJCWJyaWRnZV9oZWFkZXIgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYnJpZGdlX2hlYWRlcikgewpAQCAtMTI5LDYgKzEzOCwxMyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CisJCWJyaWRnZV9wY2l4X2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX1BDSVgpOworCQlpZiAoIWJyaWRnZV9wY2l4X2NhcCkgeworCQkJCWVyciA9IC1FTk9ERVY7CisJCQkJbXRoY2FfZXJyKG1kZXYsICJDb3VsZG4ndCBsb2NhdGUgSENBIGJyaWRnZSAiCisJCQkJCSAgIlBDSS1YIGNhcGFiaWxpdHksIGFib3J0aW5nLlxuIik7CisJCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAkvKiBhY3R1YWxseSBoaXQgcmVzZXQgKi8KQEAgLTE3OCw2ICsxOTQsMjAgQEAKIGdvb2Q6CiAJLyogTm93IHJlc3RvcmUgdGhlIFBDSSBoZWFkZXJzICovCiAJaWYgKGJyaWRnZSkgeworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIGJyaWRnZV9wY2l4X2NhcCArIDB4OCwKKwkJCQkgYnJpZGdlX2hlYWRlclsoYnJpZGdlX3BjaXhfY2FwICsgMHg4KSAvIDRdKSkgeworCQkJZXJyID0gLUVOT0RFVjsKKwkJCW10aGNhX2VycihtZGV2LCAiQ291bGRuJ3QgcmVzdG9yZSBIQ0EgYnJpZGdlIFVwc3RyZWFtICIKKwkJCQkgICJzcGxpdCB0cmFuc2FjdGlvbiBjb250cm9sLCBhYm9ydGluZy5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBicmlkZ2VfcGNpeF9jYXAgKyAweGMsCisJCQkJIGJyaWRnZV9oZWFkZXJbKGJyaWRnZV9wY2l4X2NhcCArIDB4YykgLyA0XSkpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQltdGhjYV9lcnIobWRldiwgIkNvdWxkbid0IHJlc3RvcmUgSENBIGJyaWRnZSBEb3duc3RyZWFtICIKKwkJCQkgICJzcGxpdCB0cmFuc2FjdGlvbiBjb250cm9sLCBhYm9ydGluZy5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KIAkJLyoKIAkJICogQnJpZGdlIGNvbnRyb2wgcmVnaXN0ZXIgaXMgYXQgMHgzZSwgc28gd2UnbGwKIAkJICogbmF0dXJhbGx5IHJlc3RvcmUgaXQgbGFzdCBpbiB0aGlzIGxvb3AuCkBAIC0yMDMsNiArMjMzLDM1IEBACiAJCX0KIAl9CiAKKwlpZiAoaGNhX3BjaXhfY2FwKSB7CisJCWlmIChwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1kZXYtPnBkZXYsIGhjYV9wY2l4X2NhcCwKKwkJCQkgaGNhX2hlYWRlcltoY2FfcGNpeF9jYXAgLyA0XSkpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQltdGhjYV9lcnIobWRldiwgIkNvdWxkbid0IHJlc3RvcmUgSENBIFBDSS1YICIKKwkJCQkgICJjb21tYW5kIHJlZ2lzdGVyLCBhYm9ydGluZy5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoaGNhX3BjaWVfY2FwKSB7CisJCWRldmN0bCA9IGhjYV9oZWFkZXJbKGhjYV9wY2llX2NhcCArIFBDSV9FWFBfREVWQ1RMKSAvIDRdOworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ193b3JkKG1kZXYtPnBkZXYsIGhjYV9wY2llX2NhcCArIFBDSV9FWFBfREVWQ1RMLAorCQkJCQkgICBkZXZjdGwpKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJbXRoY2FfZXJyKG1kZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBQQ0kgRXhwcmVzcyAiCisJCQkJICAiRGV2aWNlIENvbnRyb2wgcmVnaXN0ZXIsIGFib3J0aW5nLlxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlsaW5rY3RsID0gaGNhX2hlYWRlclsoaGNhX3BjaWVfY2FwICsgUENJX0VYUF9MTktDVEwpIC8gNF07CisJCWlmIChwY2lfd3JpdGVfY29uZmlnX3dvcmQobWRldi0+cGRldiwgaGNhX3BjaWVfY2FwICsgUENJX0VYUF9MTktDVEwsCisJCQkJCSAgIGxpbmtjdGwpKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJbXRoY2FfZXJyKG1kZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBQQ0kgRXhwcmVzcyAiCisJCQkJICAiTGluayBjb250cm9sIHJlZ2lzdGVyLCBhYm9ydGluZy5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewogCQlpZiAoaSAqIDQgPT0gUENJX0NPTU1BTkQpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwppbmRleCBiMjkyZmVmLi5mYWI0MTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCkBAIC0yNDMsNiArMjQzLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmc3JxLT5sb2NrKTsKIAlzcnEtPnJlZmNvdW50ID0gMTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzcnEtPndhaXQpOworCW11dGV4X2luaXQoJnNycS0+bXV0ZXgpOwogCiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkKIAkJbXRoY2FfYXJiZWxfaW5pdF9zcnFfY29udGV4dChkZXYsIHBkLCBzcnEsIG1haWxib3gtPmJ1Zik7CkBAIC0zNzEsNyArMzcyLDExIEBACiAJaWYgKGF0dHJfbWFzayAmIElCX1NSUV9MSU1JVCkgewogCQlpZiAoYXR0ci0+c3JxX2xpbWl0ID4gc3JxLT5tYXgpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltdXRleF9sb2NrKCZzcnEtPm11dGV4KTsKIAkJcmV0ID0gbXRoY2FfQVJNX1NSUShkZXYsIHNycS0+c3JxbiwgYXR0ci0+c3JxX2xpbWl0LCAmc3RhdHVzKTsKKwkJbXV0ZXhfdW5sb2NrKCZzcnEtPm11dGV4KTsKKwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJaWYgKHN0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAppbmRleCAxMmExZTA1Li40OTFkMmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCkBAIC0yNzIsOCArMjcyLDcgQEAKIHZvaWQgaXBvaWJfZGV2X2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHZvaWQgaXBvaWJfbWNhc3Rfam9pbl90YXNrKHZvaWQgKmRldl9wdHIpOwotdm9pZCBpcG9pYl9tY2FzdF9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuaW9uIGliX2dpZCAqbWdpZCwKLQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlwb2liX21jYXN0X3NlbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqbWdpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHZvaWQgaXBvaWJfbWNhc3RfcmVzdGFydF90YXNrKHZvaWQgKmRldl9wdHIpOwogaW50IGlwb2liX21jYXN0X3N0YXJ0X3RocmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTM2OSwxNSArMzY4LDI2IEBACiAjZW5kaWYgLyogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSAqLwogCiAKLSNkZWZpbmUgSVBPSUJfR0lEX0ZNVAkJIiV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4IgorI2RlZmluZSBJUE9JQl9HSURfRk1UCQkiJTIuMnglMi4yeDolMi4yeCUyLjJ4OiUyLjJ4JTIuMng6JTIuMnglMi4yeDoiIFwKKwkJCQkiJTIuMnglMi4yeDolMi4yeCUyLjJ4OiUyLjJ4JTIuMng6JTIuMnglMi4yeCIKIAotI2RlZmluZSBJUE9JQl9HSURfQVJHKGdpZCkJYmUxNl90b19jcHVwKChfX2JlMTYgKikgKChnaWQpLnJhdyArICAwKSksIFwKLQkJCQliZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAoKGdpZCkucmF3ICsgIDIpKSwgXAotCQkJCWJlMTZfdG9fY3B1cCgoX19iZTE2ICopICgoZ2lkKS5yYXcgKyAgNCkpLCBcCi0JCQkJYmUxNl90b19jcHVwKChfX2JlMTYgKikgKChnaWQpLnJhdyArICA2KSksIFwKLQkJCQliZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAoKGdpZCkucmF3ICsgIDgpKSwgXAotCQkJCWJlMTZfdG9fY3B1cCgoX19iZTE2ICopICgoZ2lkKS5yYXcgKyAxMCkpLCBcCi0JCQkJYmUxNl90b19jcHVwKChfX2JlMTYgKikgKChnaWQpLnJhdyArIDEyKSksIFwKLQkJCQliZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAoKGdpZCkucmF3ICsgMTQpKQorI2RlZmluZSBJUE9JQl9HSURfUkFXX0FSRyhnaWQpCSgodTggKikoZ2lkKSlbMF0sIFwKKwkJCQkoKHU4ICopKGdpZCkpWzFdLCBcCisJCQkJKCh1OCAqKShnaWQpKVsyXSwgXAorCQkJCSgodTggKikoZ2lkKSlbM10sIFwKKwkJCQkoKHU4ICopKGdpZCkpWzRdLCBcCisJCQkJKCh1OCAqKShnaWQpKVs1XSwgXAorCQkJCSgodTggKikoZ2lkKSlbNl0sIFwKKwkJCQkoKHU4ICopKGdpZCkpWzddLCBcCisJCQkJKCh1OCAqKShnaWQpKVs4XSwgXAorCQkJCSgodTggKikoZ2lkKSlbOV0sIFwKKwkJCQkoKHU4ICopKGdpZCkpWzEwXSxcCisJCQkJKCh1OCAqKShnaWQpKVsxMV0sXAorCQkJCSgodTggKikoZ2lkKSlbMTJdLFwKKwkJCQkoKHU4ICopKGdpZCkpWzEzXSxcCisJCQkJKCh1OCAqKShnaWQpKVsxNF0sXAorCQkJCSgodTggKikoZ2lkKSlbMTVdCisKKyNkZWZpbmUgSVBPSUJfR0lEX0FSRyhnaWQpCUlQT0lCX0dJRF9SQVdfQVJHKChnaWQpLnJhdykKIAogI2VuZGlmIC8qIF9JUE9JQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggODQwNjgzOS4uNTAzMzY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtODQsMTUgKzg0LDkgQEAKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoKGludCkgcHJpdi0+dHhfdGFpbCAtIChpbnQpIGFoLT5sYXN0X3NlbmQgPj0gMCkgewotCQlpcG9pYl9kYmcocHJpdiwgIkZyZWVpbmcgYWggJXBcbiIsIGFoLT5haCk7Ci0JCWliX2Rlc3Ryb3lfYWgoYWgtPmFoKTsKLQkJa2ZyZWUoYWgpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJmFoLT5saXN0LCAmcHJpdi0+ZGVhZF9haHMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JfQorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmYWgtPmxpc3QsICZwcml2LT5kZWFkX2Focyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGlwb2liX2liX3Bvc3RfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWQpCkBAIC0zNzcsMTkgKzM3MSwxNiBAQAogCXN0cnVjdCBpcG9pYl9haCAqYWgsICp0YWg7CiAJTElTVF9IRUFEKHJlbW92ZV9saXN0KTsKIAotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFoLCB0YWgsICZwcml2LT5kZWFkX2FocywgbGlzdCkKIAkJaWYgKChpbnQpIHByaXYtPnR4X3RhaWwgLSAoaW50KSBhaC0+bGFzdF9zZW5kID49IDApIHsKIAkJCWxpc3RfZGVsKCZhaC0+bGlzdCk7Ci0JCQlsaXN0X2FkZF90YWlsKCZhaC0+bGlzdCwgJnJlbW92ZV9saXN0KTsKKwkJCWliX2Rlc3Ryb3lfYWgoYWgtPmFoKTsKKwkJCWtmcmVlKGFoKTsKIAkJfQotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWgsIHRhaCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7Ci0JCWlwb2liX2RiZyhwcml2LCAiUmVhcGluZyBhaCAlcFxuIiwgYWgtPmFoKTsKLQkJaWJfZGVzdHJveV9haChhaC0+YWgpOwotCQlrZnJlZShhaCk7Ci0JfQorCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwogfQogCiB2b2lkIGlwb2liX3JlYXBfYWgodm9pZCAqZGV2X3B0cikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggY2IwNzhhNy4uMWM2ZWExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTE4NSw4ICsxODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlwb2liX3BhdGggKl9fcGF0aF9maW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgdW5pb24gaWJfZ2lkICpnaWQpCitzdGF0aWMgc3RydWN0IGlwb2liX3BhdGggKl9fcGF0aF9maW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmdpZCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCByYl9ub2RlICpuID0gcHJpdi0+cGF0aF90cmVlLnJiX25vZGU7CkBAIC0xOTYsNyArMTk1LDcgQEAKIAl3aGlsZSAobikgewogCQlwYXRoID0gcmJfZW50cnkobiwgc3RydWN0IGlwb2liX3BhdGgsIHJiX25vZGUpOwogCi0JCXJldCA9IG1lbWNtcChnaWQtPnJhdywgcGF0aC0+cGF0aHJlYy5kZ2lkLnJhdywKKwkJcmV0ID0gbWVtY21wKGdpZCwgcGF0aC0+cGF0aHJlYy5kZ2lkLnJhdywKIAkJCSAgICAgc2l6ZW9mICh1bmlvbiBpYl9naWQpKTsKIAogCQlpZiAocmV0IDwgMCkKQEAgLTQyNCw4ICs0MjMsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBpcG9pYl9wYXRoICpwYXRoX3JlY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICB1bmlvbiBpYl9naWQgKmdpZCkKK3N0YXRpYyBzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aF9yZWNfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmdpZCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcG9pYl9wYXRoICpwYXRoOwpAQCAtNDQwLDcgKzQzOCw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmcGF0aC0+bmVpZ2hfbGlzdCk7CiAKLQltZW1jcHkocGF0aC0+cGF0aHJlYy5kZ2lkLnJhdywgZ2lkLT5yYXcsIHNpemVvZiAodW5pb24gaWJfZ2lkKSk7CisJbWVtY3B5KHBhdGgtPnBhdGhyZWMuZGdpZC5yYXcsIGdpZCwgc2l6ZW9mICh1bmlvbiBpYl9naWQpKTsKIAlwYXRoLT5wYXRocmVjLnNnaWQgICAgICA9IHByaXYtPmxvY2FsX2dpZDsKIAlwYXRoLT5wYXRocmVjLnBrZXkgICAgICA9IGNwdV90b19iZTE2KHByaXYtPnBrZXkpOwogCXBhdGgtPnBhdGhyZWMubnVtYl9wYXRoID0gMTsKQEAgLTQ5OCwxMCArNDk2LDkgQEAKIAkgKi8KIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCi0JcGF0aCA9IF9fcGF0aF9maW5kKGRldiwgKHVuaW9uIGliX2dpZCAqKSAoc2tiLT5kc3QtPm5laWdoYm91ci0+aGEgKyA0KSk7CisJcGF0aCA9IF9fcGF0aF9maW5kKGRldiwgc2tiLT5kc3QtPm5laWdoYm91ci0+aGEgKyA0KTsKIAlpZiAoIXBhdGgpIHsKLQkJcGF0aCA9IHBhdGhfcmVjX2NyZWF0ZShkZXYsCi0JCQkJICAgICAgICh1bmlvbiBpYl9naWQgKikgKHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhICsgNCkpOworCQlwYXRoID0gcGF0aF9yZWNfY3JlYXRlKGRldiwgc2tiLT5kc3QtPm5laWdoYm91ci0+aGEgKyA0KTsKIAkJaWYgKCFwYXRoKQogCQkJZ290byBlcnJfcGF0aDsKIApAQCAtNTUxLDcgKzU0OCw3IEBACiAJLyogQWRkIGluIHRoZSBQX0tleSBmb3IgbXVsdGljYXN0cyAqLwogCXNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhWzhdID0gKHByaXYtPnBrZXkgPj4gOCkgJiAweGZmOwogCXNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhWzldID0gcHJpdi0+cGtleSAmIDB4ZmY7Ci0JaXBvaWJfbWNhc3Rfc2VuZChkZXYsICh1bmlvbiBpYl9naWQgKikgKHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhICsgNCksIHNrYik7CisJaXBvaWJfbWNhc3Rfc2VuZChkZXYsIHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhICsgNCwgc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgdW5pY2FzdF9hcnBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNTY2LDEwICs1NjMsOSBAQAogCSAqLwogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKLQlwYXRoID0gX19wYXRoX2ZpbmQoZGV2LCAodW5pb24gaWJfZ2lkICopIChwaGRyLT5od2FkZHIgKyA0KSk7CisJcGF0aCA9IF9fcGF0aF9maW5kKGRldiwgcGhkci0+aHdhZGRyICsgNCk7CiAJaWYgKCFwYXRoKSB7Ci0JCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LAotCQkJCSAgICAgICAodW5pb24gaWJfZ2lkICopIChwaGRyLT5od2FkZHIgKyA0KSk7CisJCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LCBwaGRyLT5od2FkZHIgKyA0KTsKIAkJaWYgKHBhdGgpIHsKIAkJCS8qIHB1dCBwc2V1ZG9oZWFkZXIgYmFjayBvbiBmb3IgbmV4dCB0aW1lICovCiAJCQlza2JfcHVzaChza2IsIHNpemVvZiAqcGhkcik7CkBAIC02NjAsNyArNjU2LDcgQEAKIAkJCXBoZHItPmh3YWRkcls4XSA9IChwcml2LT5wa2V5ID4+IDgpICYgMHhmZjsKIAkJCXBoZHItPmh3YWRkcls5XSA9IHByaXYtPnBrZXkgJiAweGZmOwogCi0JCQlpcG9pYl9tY2FzdF9zZW5kKGRldiwgKHVuaW9uIGliX2dpZCAqKSAocGhkci0+aHdhZGRyICsgNCksIHNrYik7CisJCQlpcG9pYl9tY2FzdF9zZW5kKGRldiwgcGhkci0+aHdhZGRyICsgNCwgc2tiKTsKIAkJfSBlbHNlIHsKIAkJCS8qIHVuaWNhc3QgR0lEIC0tIHNob3VsZCBiZSBBUlAgb3IgUkFSUCByZXBseSAqLwogCkBAIC02NzEsNyArNjY3LDcgQEAKIAkJCQkJICAgc2tiLT5kc3QgPyAibmVpZ2giIDogImRzdCIsCiAJCQkJCSAgIGJlMTZfdG9fY3B1cCgoX19iZTE2ICopIHNrYi0+ZGF0YSksCiAJCQkJCSAgIGJlMzJfdG9fY3B1cCgoX19iZTMyICopIHBoZHItPmh3YWRkciksCi0JCQkJCSAgIElQT0lCX0dJRF9BUkcoKih1bmlvbiBpYl9naWQgKikgKHBoZHItPmh3YWRkciArIDQpKSk7CisJCQkJCSAgIElQT0lCX0dJRF9SQVdfQVJHKHBoZHItPmh3YWRkciArIDQpKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCSsrcHJpdi0+c3RhdHMudHhfZHJvcHBlZDsKIAkJCQlnb3RvIG91dDsKQEAgLTc1NCw3ICs3NTAsNyBAQAogCWlwb2liX2RiZyhwcml2LAogCQkgICJuZWlnaF9kZXN0cnVjdG9yIGZvciAlMDZ4ICIgSVBPSUJfR0lEX0ZNVCAiXG4iLAogCQkgIGJlMzJfdG9fY3B1cCgoX19iZTMyICopIG4tPmhhKSwKLQkJICBJUE9JQl9HSURfQVJHKCooKHVuaW9uIGliX2dpZCAqKSAobi0+aGEgKyA0KSkpKTsKKwkJICBJUE9JQl9HSURfUkFXX0FSRyhuLT5oYSArIDQpKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IDFkYWU0YjIuLjIxNjQ3MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJcmV0dXJuIG1jYXN0OwogfQogCi1zdGF0aWMgc3RydWN0IGlwb2liX21jYXN0ICpfX2lwb2liX21jYXN0X2ZpbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5pb24gaWJfZ2lkICptZ2lkKQorc3RhdGljIHN0cnVjdCBpcG9pYl9tY2FzdCAqX19pcG9pYl9tY2FzdF9maW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKm1naWQpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHByaXYtPm11bHRpY2FzdF90cmVlLnJiX25vZGU7CkBAIC0xNjUsNyArMTY1LDcgQEAKIAogCQltY2FzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBpcG9pYl9tY2FzdCwgcmJfbm9kZSk7CiAKLQkJcmV0ID0gbWVtY21wKG1naWQtPnJhdywgbWNhc3QtPm1jbWVtYmVyLm1naWQucmF3LAorCQlyZXQgPSBtZW1jbXAobWdpZCwgbWNhc3QtPm1jbWVtYmVyLm1naWQucmF3LAogCQkJICAgICBzaXplb2YgKHVuaW9uIGliX2dpZCkpOwogCQlpZiAocmV0IDwgMCkKIAkJCW4gPSBuLT5yYl9sZWZ0OwpAQCAtNjk0LDggKzY5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgaXBvaWJfbWNhc3Rfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bmlvbiBpYl9naWQgKm1naWQsCi0JCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGlwb2liX21jYXN0X3NlbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqbWdpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3Q7CkBAIC03MTgsNyArNzE3LDcgQEAKIAlpZiAoIW1jYXN0KSB7CiAJCS8qIExldCdzIGNyZWF0ZSBhIG5ldyBzZW5kIG9ubHkgZ3JvdXAgbm93ICovCiAJCWlwb2liX2RiZ19tY2FzdChwcml2LCAic2V0dGluZyB1cCBzZW5kIG9ubHkgbXVsdGljYXN0IGdyb3VwIGZvciAiCi0JCQkJSVBPSUJfR0lEX0ZNVCAiXG4iLCBJUE9JQl9HSURfQVJHKCptZ2lkKSk7CisJCQkJSVBPSUJfR0lEX0ZNVCAiXG4iLCBJUE9JQl9HSURfUkFXX0FSRyhtZ2lkKSk7CiAKIAkJbWNhc3QgPSBpcG9pYl9tY2FzdF9hbGxvYyhkZXYsIDApOwogCQlpZiAoIW1jYXN0KSB7CkBAIC03MzAsNyArNzI5LDcgQEAKIAkJfQogCiAJCXNldF9iaXQoSVBPSUJfTUNBU1RfRkxBR19TRU5ET05MWSwgJm1jYXN0LT5mbGFncyk7Ci0JCW1jYXN0LT5tY21lbWJlci5tZ2lkID0gKm1naWQ7CisJCW1lbWNweShtY2FzdC0+bWNtZW1iZXIubWdpZC5yYXcsIG1naWQsIHNpemVvZiAodW5pb24gaWJfZ2lkKSk7CiAJCV9faXBvaWJfbWNhc3RfYWRkKGRldiwgbWNhc3QpOwogCQlsaXN0X2FkZF90YWlsKCZtY2FzdC0+bGlzdCwgJnByaXYtPm11bHRpY2FzdF9saXN0KTsKIAl9CkBAIC04MjEsNyArODIwLDggQEAKIAogCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldiwgMCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT54bWl0X2xvY2ssIGZsYWdzKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbmV0aWZfdHhfbG9jayhkZXYpOwogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAkvKgpAQCAtODk2LDcgKzg5Niw4IEBACiAJfQogCiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+eG1pdF9sb2NrLCBmbGFncyk7CisJbmV0aWZfdHhfdW5sb2NrKGRldik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogV2UgaGF2ZSB0byBjYW5jZWwgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2sgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWNhc3QsIHRtY2FzdCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKaW5kZXggMWQ0OWQxNi4uN2I3MTdjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKQEAgLTI1NSw3ICsyNTUsOCBAQAogCSAgICByZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1BLRVlfQ0hBTkdFIHx8CiAJICAgIHJlY29yZC0+ZXZlbnQgPT0gSUJfRVZFTlRfUE9SVF9BQ1RJVkUgfHwKIAkgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9MSURfQ0hBTkdFICB8fAotCSAgICByZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1NNX0NIQU5HRSkgeworCSAgICByZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1NNX0NIQU5HRSAgIHx8CisJICAgIHJlY29yZC0+ZXZlbnQgPT0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVIpIHsKIAkJaXBvaWJfZGJnKHByaXYsICJQb3J0IHN0YXRlIGNoYW5nZSBldmVudFxuIik7CiAJCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Zmx1c2hfdGFzayk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCA5Y2JkZmZhLi40ZTIyYWZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKQEAgLTYyLDYgKzYyLDEzIEBACiAJCSAgICJ2IiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiAKK3N0YXRpYyBpbnQgc3JwX3NnX3RhYmxlc2l6ZSA9IFNSUF9ERUZfU0dfVEFCTEVTSVpFOworc3RhdGljIGludCBzcnBfbWF4X2l1X2xlbjsKKworbW9kdWxlX3BhcmFtKHNycF9zZ190YWJsZXNpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNycF9zZ190YWJsZXNpemUsCisJCSAiTWF4IG51bWJlciBvZiBnYXRoZXIvc2NhdHRlciBlbnRyaWVzIHBlciBJL08gKGRlZmF1bHQgaXMgMTIpIik7CisKIHN0YXRpYyBpbnQgdG9wc3Bpbl93b3JrYXJvdW5kcyA9IDE7CiAKIG1vZHVsZV9wYXJhbSh0b3BzcGluX3dvcmthcm91bmRzLCBpbnQsIDA0NDQpOwpAQCAtMTA1LDcgKzExMiw4IEBACiAJaWYgKCFpdS0+YnVmKQogCQlnb3RvIG91dF9mcmVlX2l1OwogCi0JaXUtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKGhvc3QtPmRldi0+ZG1hX2RldmljZSwgaXUtPmJ1Ziwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlpdS0+ZG1hID0gZG1hX21hcF9zaW5nbGUoaG9zdC0+ZGV2LT5kZXYtPmRtYV9kZXZpY2UsCisJCQkJIGl1LT5idWYsIHNpemUsIGRpcmVjdGlvbik7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGl1LT5kbWEpKQogCQlnb3RvIG91dF9mcmVlX2J1ZjsKIApAQCAtMTI3LDcgKzEzNSw4IEBACiAJaWYgKCFpdSkKIAkJcmV0dXJuOwogCi0JZG1hX3VubWFwX3NpbmdsZShob3N0LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsIGl1LT5zaXplLCBpdS0+ZGlyZWN0aW9uKTsKKwlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLAorCQkJIGl1LT5kbWEsIGl1LT5zaXplLCBpdS0+ZGlyZWN0aW9uKTsKIAlrZnJlZShpdS0+YnVmKTsKIAlrZnJlZShpdSk7CiB9CkBAIC0xNDcsNyArMTU2LDcgQEAKIAlpZiAoIWF0dHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gaWJfZmluZF9jYWNoZWRfcGtleSh0YXJnZXQtPnNycF9ob3N0LT5kZXYsCisJcmV0ID0gaWJfZmluZF9jYWNoZWRfcGtleSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldiwKIAkJCQkgIHRhcmdldC0+c3JwX2hvc3QtPnBvcnQsCiAJCQkJICBiZTE2X3RvX2NwdSh0YXJnZXQtPnBhdGgucGtleSksCiAJCQkJICAmYXR0ci0+cGtleV9pbmRleCk7CkBAIC0xNzksNyArMTg4LDcgQEAKIAlpZiAoIWluaXRfYXR0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl0YXJnZXQtPmNxID0gaWJfY3JlYXRlX2NxKHRhcmdldC0+c3JwX2hvc3QtPmRldiwgc3JwX2NvbXBsZXRpb24sCisJdGFyZ2V0LT5jcSA9IGliX2NyZWF0ZV9jcSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldiwgc3JwX2NvbXBsZXRpb24sCiAJCQkJICBOVUxMLCB0YXJnZXQsIFNSUF9DUV9TSVpFKTsKIAlpZiAoSVNfRVJSKHRhcmdldC0+Y3EpKSB7CiAJCXJldCA9IFBUUl9FUlIodGFyZ2V0LT5jcSk7CkBAIC0xOTgsNyArMjA3LDcgQEAKIAlpbml0X2F0dHItPnNlbmRfY3EgICAgICAgICAgICAgPSB0YXJnZXQtPmNxOwogCWluaXRfYXR0ci0+cmVjdl9jcSAgICAgICAgICAgICA9IHRhcmdldC0+Y3E7CiAKLQl0YXJnZXQtPnFwID0gaWJfY3JlYXRlX3FwKHRhcmdldC0+c3JwX2hvc3QtPnBkLCBpbml0X2F0dHIpOworCXRhcmdldC0+cXAgPSBpYl9jcmVhdGVfcXAodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5wZCwgaW5pdF9hdHRyKTsKIAlpZiAoSVNfRVJSKHRhcmdldC0+cXApKSB7CiAJCXJldCA9IFBUUl9FUlIodGFyZ2V0LT5xcCk7CiAJCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5jcSk7CkBAIC0yNTAsNyArMjU5LDcgQEAKIAogCWluaXRfY29tcGxldGlvbigmdGFyZ2V0LT5kb25lKTsKIAotCXRhcmdldC0+cGF0aF9xdWVyeV9pZCA9IGliX3NhX3BhdGhfcmVjX2dldCh0YXJnZXQtPnNycF9ob3N0LT5kZXYsCisJdGFyZ2V0LT5wYXRoX3F1ZXJ5X2lkID0gaWJfc2FfcGF0aF9yZWNfZ2V0KHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LAogCQkJCQkJICAgdGFyZ2V0LT5zcnBfaG9zdC0+cG9ydCwKIAkJCQkJCSAgICZ0YXJnZXQtPnBhdGgsCiAJCQkJCQkgICBJQl9TQV9QQVRIX1JFQ19ER0lECQl8CkBAIC0zMDksMTAgKzMxOCwzMiBAQAogCiAJcmVxLT5wcml2Lm9wY29kZSAgICAgCT0gU1JQX0xPR0lOX1JFUTsKIAlyZXEtPnByaXYudGFnICAgICAgICAJPSAwOwotCXJlcS0+cHJpdi5yZXFfaXRfaXVfbGVuID0gY3B1X3RvX2JlMzIoU1JQX01BWF9JVV9MRU4pOworCXJlcS0+cHJpdi5yZXFfaXRfaXVfbGVuID0gY3B1X3RvX2JlMzIoc3JwX21heF9pdV9sZW4pOwogCXJlcS0+cHJpdi5yZXFfYnVmX2ZtdCAJPSBjcHVfdG9fYmUxNihTUlBfQlVGX0ZPUk1BVF9ESVJFQ1QgfAogCQkJCQkgICAgICBTUlBfQlVGX0ZPUk1BVF9JTkRJUkVDVCk7Ci0JbWVtY3B5KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCwgdGFyZ2V0LT5zcnBfaG9zdC0+aW5pdGlhdG9yX3BvcnRfaWQsIDE2KTsKKwkvKgorCSAqIEluIHRoZSBwdWJsaXNoZWQgU1JQIHNwZWNpZmljYXRpb24gKGRyYWZ0IHJldi4gMTZhKSwgdGhlIAorCSAqIHBvcnQgaWRlbnRpZmllciBmb3JtYXQgaXMgOCBieXRlcyBvZiBJRCBleHRlbnNpb24gZm9sbG93ZWQKKwkgKiBieSA4IGJ5dGVzIG9mIEdVSUQuICBPbGRlciBkcmFmdHMgcHV0IHRoZSB0d28gaGFsdmVzIGluIHRoZQorCSAqIG9wcG9zaXRlIG9yZGVyLCBzbyB0aGF0IHRoZSBHVUlEIGNvbWVzIGZpcnN0LgorCSAqCisJICogVGFyZ2V0cyBjb25mb3JtaW5nIHRvIHRoZXNlIG9ic29sZXRlIGRyYWZ0cyBjYW4gYmUKKwkgKiByZWNvZ25pemVkIGJ5IHRoZSBJL08gQ2xhc3MgdGhleSByZXBvcnQuCisJICovCisJaWYgKHRhcmdldC0+aW9fY2xhc3MgPT0gU1JQX1JFVjEwX0lCX0lPX0NMQVNTKSB7CisJCW1lbWNweShyZXEtPnByaXYuaW5pdGlhdG9yX3BvcnRfaWQsCisJCSAgICAgICB0YXJnZXQtPnNycF9ob3N0LT5pbml0aWF0b3JfcG9ydF9pZCArIDgsIDgpOworCQltZW1jcHkocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkICsgOCwKKwkJICAgICAgIHRhcmdldC0+c3JwX2hvc3QtPmluaXRpYXRvcl9wb3J0X2lkLCA4KTsKKwkJbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCwgICAgICZ0YXJnZXQtPmlvY19ndWlkLCA4KTsKKwkJbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCArIDgsICZ0YXJnZXQtPmlkX2V4dCwgOCk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCwKKwkJICAgICAgIHRhcmdldC0+c3JwX2hvc3QtPmluaXRpYXRvcl9wb3J0X2lkLCAxNik7CisJCW1lbWNweShyZXEtPnByaXYudGFyZ2V0X3BvcnRfaWQsICAgICAmdGFyZ2V0LT5pZF9leHQsIDgpOworCQltZW1jcHkocmVxLT5wcml2LnRhcmdldF9wb3J0X2lkICsgOCwgJnRhcmdldC0+aW9jX2d1aWQsIDgpOworCX0KKwogCS8qCiAJICogVG9wc3Bpbi9DaXNjbyBTUlAgdGFyZ2V0cyB3aWxsIHJlamVjdCBvdXIgbG9naW4gdW5sZXNzIHdlCiAJICogemVybyBvdXQgdGhlIGZpcnN0IDggYnl0ZXMgb2Ygb3VyIGluaXRpYXRvciBwb3J0IElELiAgVGhlCkBAIC0zMjUsOCArMzU2LDYgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+aW9jX2d1aWQpKTsKIAkJbWVtc2V0KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCwgMCwgOCk7CiAJfQotCW1lbWNweShyZXEtPnByaXYudGFyZ2V0X3BvcnRfaWQsICAgICAmdGFyZ2V0LT5pZF9leHQsIDgpOwotCW1lbWNweShyZXEtPnByaXYudGFyZ2V0X3BvcnRfaWQgKyA4LCAmdGFyZ2V0LT5pb2NfZ3VpZCwgOCk7CiAKIAlzdGF0dXMgPSBpYl9zZW5kX2NtX3JlcSh0YXJnZXQtPmNtX2lkLCAmcmVxLT5wYXJhbSk7CiAKQEAgLTM1OSw5ICszODgsOSBAQAogCXRhcmdldC0+c3RhdGUgPSBTUlBfVEFSR0VUX1JFTU9WRUQ7CiAJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwogCi0JbXV0ZXhfbG9jaygmdGFyZ2V0LT5zcnBfaG9zdC0+dGFyZ2V0X211dGV4KTsKKwlzcGluX2xvY2soJnRhcmdldC0+c3JwX2hvc3QtPnRhcmdldF9sb2NrKTsKIAlsaXN0X2RlbCgmdGFyZ2V0LT5saXN0KTsKLQltdXRleF91bmxvY2soJnRhcmdldC0+c3JwX2hvc3QtPnRhcmdldF9tdXRleCk7CisJc3Bpbl91bmxvY2soJnRhcmdldC0+c3JwX2hvc3QtPnRhcmdldF9sb2NrKTsKIAogCXNjc2lfcmVtb3ZlX2hvc3QodGFyZ2V0LT5zY3NpX2hvc3QpOwogCWliX2Rlc3Ryb3lfY21faWQodGFyZ2V0LT5jbV9pZCk7CkBAIC00MjEsNiArNDUwLDExIEBACiAJICAgICBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gRE1BX0ZST01fREVWSUNFKSkKIAkJcmV0dXJuOwogCisJaWYgKHJlcS0+Zm1yKSB7CisJCWliX2Ztcl9wb29sX3VubWFwKHJlcS0+Zm1yKTsKKwkJcmVxLT5mbXIgPSBOVUxMOworCX0KKwogCS8qCiAJICogVGhpcyBoYW5kbGluZyBvZiBub24tU0cgY29tbWFuZHMgY2FuIGJlIGtpbGxlZCB3aGVuIHRoZQogCSAqIFNDU0kgbWlkbGF5ZXIgbm8gbG9uZ2VyIGdlbmVyYXRlcyBub24tU0cgY29tbWFuZHMuCkBAIC00MzMsMTggKzQ2NywzMCBAQAogCQlzY2F0ICA9ICZyZXEtPmZha2Vfc2c7CiAJfQogCi0JZG1hX3VubWFwX3NnKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZG1hX2RldmljZSwgc2NhdCwgbmVudHMsCisJZG1hX3VubWFwX3NnKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLCBzY2F0LCBuZW50cywKIAkJICAgICBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwogfQogCitzdGF0aWMgdm9pZCBzcnBfcmVtb3ZlX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxKQoreworCXNycF91bm1hcF9kYXRhKHJlcS0+c2NtbmQsIHRhcmdldCwgcmVxKTsKKwlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOworfQorCitzdGF0aWMgdm9pZCBzcnBfcmVzZXRfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCit7CisJcmVxLT5zY21uZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCXJlcS0+c2NtbmQtPnNjc2lfZG9uZShyZXEtPnNjbW5kKTsKKwlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7Cit9CisKIHN0YXRpYyBpbnQgc3JwX3JlY29ubmVjdF90YXJnZXQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQogewogCXN0cnVjdCBpYl9jbV9pZCAqbmV3X2NtX2lkOwogCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7Ci0Jc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsICp0bXA7CiAJc3RydWN0IGliX3djIHdjOwogCWludCByZXQ7Ci0JaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwogCWlmICh0YXJnZXQtPnN0YXRlICE9IFNSUF9UQVJHRVRfTElWRSkgewpAQCAtNDU5LDcgKzUwNSw3IEBACiAJICogTm93IGdldCBhIG5ldyBsb2NhbCBDTSBJRCBzbyB0aGF0IHdlIGF2b2lkIGNvbmZ1c2luZyB0aGUKIAkgKiB0YXJnZXQgaW4gY2FzZSB0aGluZ3MgYXJlIHJlYWxseSBmb3VsZWQgdXAuCiAJICovCi0JbmV3X2NtX2lkID0gaWJfY3JlYXRlX2NtX2lkKHRhcmdldC0+c3JwX2hvc3QtPmRldiwKKwluZXdfY21faWQgPSBpYl9jcmVhdGVfY21faWQodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYsCiAJCQkJICAgIHNycF9jbV9oYW5kbGVyLCB0YXJnZXQpOwogCWlmIChJU19FUlIobmV3X2NtX2lkKSkgewogCQlyZXQgPSBQVFJfRVJSKG5ld19jbV9pZCk7CkBAIC00ODAsMTkgKzUyNiwxMiBAQAogCXdoaWxlIChpYl9wb2xsX2NxKHRhcmdldC0+Y3EsIDEsICZ3YykgPiAwKQogCQk7IC8qIG5vdGhpbmcgKi8KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmdGFyZ2V0LT5yZXFfcXVldWUsIGxpc3QpIHsKLQkJcmVxLT5zY21uZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwotCQlyZXEtPnNjbW5kLT5zY3NpX2RvbmUocmVxLT5zY21uZCk7Ci0JCXNycF91bm1hcF9kYXRhKHJlcS0+c2NtbmQsIHRhcmdldCwgcmVxKTsKLQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmdGFyZ2V0LT5yZXFfcXVldWUsIGxpc3QpCisJCXNycF9yZXNldF9yZXEodGFyZ2V0LCByZXEpOwogCiAJdGFyZ2V0LT5yeF9oZWFkCSA9IDA7CiAJdGFyZ2V0LT50eF9oZWFkCSA9IDA7CiAJdGFyZ2V0LT50eF90YWlsICA9IDA7Ci0JSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+ZnJlZV9yZXFzKTsKLQlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5yZXFfcXVldWUpOwotCWZvciAoaSA9IDA7IGkgPCBTUlBfU1FfU0laRTsgKytpKQotCQlsaXN0X2FkZF90YWlsKCZ0YXJnZXQtPnJlcV9yaW5nW2ldLmxpc3QsICZ0YXJnZXQtPmZyZWVfcmVxcyk7CiAKIAlyZXQgPSBzcnBfY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKIAlpZiAocmV0KQpAQCAtNTI4LDE0ICs1NjcsNzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNycF9tYXBfZm1yKHN0cnVjdCBzcnBfZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwKKwkJICAgICAgIGludCBzZ19jbnQsIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLAorCQkgICAgICAgc3RydWN0IHNycF9kaXJlY3RfYnVmICpidWYpCit7CisJdTY0IGlvX2FkZHIgPSAwOworCXU2NCAqZG1hX3BhZ2VzOworCXUzMiBsZW47CisJaW50IHBhZ2VfY250OworCWludCBpLCBqOworCWludCByZXQ7CisKKwlpZiAoIWRldi0+Zm1yX3Bvb2wpCisJCXJldHVybiAtRU5PREVWOworCisJbGVuID0gcGFnZV9jbnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzZ19jbnQ7ICsraSkgeworCQlpZiAoc2dfZG1hX2FkZHJlc3MoJnNjYXRbaV0pICYgfmRldi0+Zm1yX3BhZ2VfbWFzaykgeworCQkJaWYgKGkgPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCSsrcGFnZV9jbnQ7CisJCX0KKwkJaWYgKChzZ19kbWFfYWRkcmVzcygmc2NhdFtpXSkgKyBzZ19kbWFfbGVuKCZzY2F0W2ldKSkgJgorCQkgICAgfmRldi0+Zm1yX3BhZ2VfbWFzaykgeworCQkJaWYgKGkgPCBzZ19jbnQgLSAxKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCSsrcGFnZV9jbnQ7CisJCX0KKworCQlsZW4gKz0gc2dfZG1hX2xlbigmc2NhdFtpXSk7CisJfQorCisJcGFnZV9jbnQgKz0gbGVuID4+IGRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJaWYgKHBhZ2VfY250ID4gU1JQX0ZNUl9TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRtYV9wYWdlcyA9IGttYWxsb2Moc2l6ZW9mICh1NjQpICogcGFnZV9jbnQsIEdGUF9BVE9NSUMpOworCWlmICghZG1hX3BhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhZ2VfY250ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2dfY250OyArK2kpCisJCWZvciAoaiA9IDA7IGogPCBzZ19kbWFfbGVuKCZzY2F0W2ldKTsgaiArPSBkZXYtPmZtcl9wYWdlX3NpemUpCisJCQlkbWFfcGFnZXNbcGFnZV9jbnQrK10gPQorCQkJCShzZ19kbWFfYWRkcmVzcygmc2NhdFtpXSkgJiBkZXYtPmZtcl9wYWdlX21hc2spICsgajsKKworCXJlcS0+Zm1yID0gaWJfZm1yX3Bvb2xfbWFwX3BoeXMoZGV2LT5mbXJfcG9vbCwKKwkJCQkJZG1hX3BhZ2VzLCBwYWdlX2NudCwgJmlvX2FkZHIpOworCWlmIChJU19FUlIocmVxLT5mbXIpKSB7CisJCXJldCA9IFBUUl9FUlIocmVxLT5mbXIpOworCQlnb3RvIG91dDsKKwl9CisKKwlidWYtPnZhICA9IGNwdV90b19iZTY0KHNnX2RtYV9hZGRyZXNzKCZzY2F0WzBdKSAmIH5kZXYtPmZtcl9wYWdlX21hc2spOworCWJ1Zi0+a2V5ID0gY3B1X3RvX2JlMzIocmVxLT5mbXItPmZtci0+cmtleSk7CisJYnVmLT5sZW4gPSBjcHVfdG9fYmUzMihsZW4pOworCisJcmV0ID0gMDsKKworb3V0OgorCWtmcmVlKGRtYV9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHNycF9tYXBfZGF0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAogCQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OwogCXN0cnVjdCBzcnBfY21kICpjbWQgPSByZXEtPmNtZC0+YnVmOwogCWludCBsZW4sIG5lbnRzLCBjb3VudDsKLQlpbnQgaTsKLQl1OCBmbXQ7CisJdTggZm10ID0gU1JQX0RBVEFfREVTQ19ESVJFQ1Q7CiAKIAlpZiAoIXNjbW5kLT5yZXF1ZXN0X2J1ZmZlciB8fCBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX05PTkUpCiAJCXJldHVybiBzaXplb2YgKHN0cnVjdCBzcnBfY21kKTsKQEAgLTU2MCw1MyArNjY0LDYzIEBACiAJCXNnX2luaXRfb25lKHNjYXQsIHNjbW5kLT5yZXF1ZXN0X2J1ZmZlciwgc2NtbmQtPnJlcXVlc3RfYnVmZmxlbik7CiAJfQogCi0JY291bnQgPSBkbWFfbWFwX3NnKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZG1hX2RldmljZSwgc2NhdCwgbmVudHMsCi0JCQkgICBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCWNvdW50ID0gZG1hX21hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwKKwkJCSAgIHNjYXQsIG5lbnRzLCBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCisJZm10ID0gU1JQX0RBVEFfREVTQ19ESVJFQ1Q7CisJbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc3JwX2NtZCkgKwlzaXplb2YgKHN0cnVjdCBzcnBfZGlyZWN0X2J1Zik7CiAKIAlpZiAoY291bnQgPT0gMSkgeworCQkvKgorCQkgKiBUaGUgbWlkbGF5ZXIgb25seSBnZW5lcmF0ZWQgYSBzaW5nbGUgZ2F0aGVyL3NjYXR0ZXIKKwkJICogZW50cnksIG9yIERNQSBtYXBwaW5nIGNvYWxlc2NlZCBldmVyeXRoaW5nIHRvIGEKKwkJICogc2luZ2xlIGVudHJ5LiAgU28gYSBkaXJlY3QgZGVzY3JpcHRvciBhbG9uZyB3aXRoCisJCSAqIHRoZSBETUEgTVIgc3VmZmljZXMuCisJCSAqLwogCQlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKmJ1ZiA9ICh2b2lkICopIGNtZC0+YWRkX2RhdGE7CiAKLQkJZm10ID0gU1JQX0RBVEFfREVTQ19ESVJFQ1Q7Ci0KIAkJYnVmLT52YSAgPSBjcHVfdG9fYmU2NChzZ19kbWFfYWRkcmVzcyhzY2F0KSk7Ci0JCWJ1Zi0+a2V5ID0gY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+bXItPnJrZXkpOworCQlidWYtPmtleSA9IGNwdV90b19iZTMyKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+bXItPnJrZXkpOwogCQlidWYtPmxlbiA9IGNwdV90b19iZTMyKHNnX2RtYV9sZW4oc2NhdCkpOwotCi0JCWxlbiA9IHNpemVvZiAoc3RydWN0IHNycF9jbWQpICsKLQkJCXNpemVvZiAoc3RydWN0IHNycF9kaXJlY3RfYnVmKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc3JwX21hcF9mbXIodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LCBzY2F0LCBjb3VudCwgcmVxLAorCQkJICAgICAgICh2b2lkICopIGNtZC0+YWRkX2RhdGEpKSB7CisJCS8qCisJCSAqIEZNUiBtYXBwaW5nIGZhaWxlZCwgYW5kIHRoZSBzY2F0dGVybGlzdCBoYXMgbW9yZQorCQkgKiB0aGFuIG9uZSBlbnRyeS4gIEdlbmVyYXRlIGFuIGluZGlyZWN0IG1lbW9yeQorCQkgKiBkZXNjcmlwdG9yLgorCQkgKi8KIAkJc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKmJ1ZiA9ICh2b2lkICopIGNtZC0+YWRkX2RhdGE7CiAJCXUzMiBkYXRhbGVuID0gMDsKKwkJaW50IGk7CiAKIAkJZm10ID0gU1JQX0RBVEFfREVTQ19JTkRJUkVDVDsKKwkJbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc3JwX2NtZCkgKworCQkJc2l6ZW9mIChzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZikgKworCQkJY291bnQgKiBzaXplb2YgKHN0cnVjdCBzcnBfZGlyZWN0X2J1Zik7CisKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJCWJ1Zi0+ZGVzY19saXN0W2ldLnZhICA9CisJCQkJY3B1X3RvX2JlNjQoc2dfZG1hX2FkZHJlc3MoJnNjYXRbaV0pKTsKKwkJCWJ1Zi0+ZGVzY19saXN0W2ldLmtleSA9CisJCQkJY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+cmtleSk7CisJCQlidWYtPmRlc2NfbGlzdFtpXS5sZW4gPQorCQkJCWNwdV90b19iZTMyKHNnX2RtYV9sZW4oJnNjYXRbaV0pKTsKKwkJCWRhdGFsZW4gKz0gc2dfZG1hX2xlbigmc2NhdFtpXSk7CisJCX0KIAogCQlpZiAoc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCiAJCQljbWQtPmRhdGFfb3V0X2Rlc2NfY250ID0gY291bnQ7CiAJCWVsc2UKIAkJCWNtZC0+ZGF0YV9pbl9kZXNjX2NudCA9IGNvdW50OwogCi0JCWJ1Zi0+dGFibGVfZGVzYy52YSAgPSBjcHVfdG9fYmU2NChyZXEtPmNtZC0+ZG1hICsKLQkJCQkJCSAgc2l6ZW9mICpjbWQgKwotCQkJCQkJICBzaXplb2YgKmJ1Zik7CisJCWJ1Zi0+dGFibGVfZGVzYy52YSAgPQorCQkJY3B1X3RvX2JlNjQocmVxLT5jbWQtPmRtYSArIHNpemVvZiAqY21kICsgc2l6ZW9mICpidWYpOwogCQlidWYtPnRhYmxlX2Rlc2Mua2V5ID0KLQkJCWNwdV90b19iZTMyKHRhcmdldC0+c3JwX2hvc3QtPm1yLT5ya2V5KTsKKwkJCWNwdV90b19iZTMyKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+bXItPnJrZXkpOwogCQlidWYtPnRhYmxlX2Rlc2MubGVuID0KIAkJCWNwdV90b19iZTMyKGNvdW50ICogc2l6ZW9mIChzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotCQkJYnVmLT5kZXNjX2xpc3RbaV0udmEgID0gY3B1X3RvX2JlNjQoc2dfZG1hX2FkZHJlc3MoJnNjYXRbaV0pKTsKLQkJCWJ1Zi0+ZGVzY19saXN0W2ldLmtleSA9Ci0JCQkJY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+bXItPnJrZXkpOwotCQkJYnVmLT5kZXNjX2xpc3RbaV0ubGVuID0gY3B1X3RvX2JlMzIoc2dfZG1hX2xlbigmc2NhdFtpXSkpOwotCi0JCQlkYXRhbGVuICs9IHNnX2RtYV9sZW4oJnNjYXRbaV0pOwotCQl9Ci0KIAkJYnVmLT5sZW4gPSBjcHVfdG9fYmUzMihkYXRhbGVuKTsKLQotCQlsZW4gPSBzaXplb2YgKHN0cnVjdCBzcnBfY21kKSArCi0JCQlzaXplb2YgKHN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmKSArCi0JCQljb3VudCAqIHNpemVvZiAoc3RydWN0IHNycF9kaXJlY3RfYnVmKTsKIAl9CiAKIAlpZiAoc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCkBAIC02MTcsMTIgKzczMSw2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHZvaWQgc3JwX3JlbW92ZV9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSkKLXsKLQlzcnBfdW5tYXBfZGF0YShyZXEtPnNjbW5kLCB0YXJnZXQsIHJlcSk7Ci0JbGlzdF9tb3ZlX3RhaWwoJnJlcS0+bGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKLX0KLQogc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfcnNwKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yc3AgKnJzcCkKIHsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKQEAgLTY4OSw3ICs3OTcsNyBAQAogCiAJaXUgPSB0YXJnZXQtPnJ4X3Jpbmdbd2MtPndyX2lkICYgflNSUF9PUF9SRUNWXTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZG1hX2RldmljZSwgaXUtPmRtYSwKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwgaXUtPmRtYSwKIAkJCQl0YXJnZXQtPm1heF90aV9pdV9sZW4sIERNQV9GUk9NX0RFVklDRSk7CiAKIAlvcGNvZGUgPSAqKHU4ICopIGl1LT5idWY7CkBAIC03MjYsNyArODM0LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAogCQkJCSAgIHRhcmdldC0+bWF4X3RpX2l1X2xlbiwgRE1BX0ZST01fREVWSUNFKTsKIH0KIApAQCAtNzcwLDcgKzg3OCw3IEBACiAKIAlsaXN0LmFkZHIgICA9IGl1LT5kbWE7CiAJbGlzdC5sZW5ndGggPSBpdS0+c2l6ZTsKLQlsaXN0LmxrZXkgICA9IHRhcmdldC0+c3JwX2hvc3QtPm1yLT5sa2V5OworCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+bGtleTsKIAogCXdyLm5leHQgICAgID0gTlVMTDsKIAl3ci5zZ19saXN0ICA9ICZsaXN0OwpAQCAtODA1LDEyICs5MTMsOCBAQAogCWlmICh0YXJnZXQtPnR4X2hlYWQgLSB0YXJnZXQtPnR4X3RhaWwgPj0gU1JQX1NRX1NJWkUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKHVubGlrZWx5KHRhcmdldC0+cmVxX2xpbSA8IDEpKSB7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlRhcmdldCBoYXMgcmVxX2xpbSAlZFxuIiwKLQkJCSAgICAgICB0YXJnZXQtPnJlcV9saW0pOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKHVubGlrZWx5KHRhcmdldC0+cmVxX2xpbSA8IDEpKQorCQkrK3RhcmdldC0+emVyb19yZXFfbGltOwogCiAJcmV0dXJuIHRhcmdldC0+dHhfcmluZ1t0YXJnZXQtPnR4X2hlYWQgJiBTUlBfU1FfU0laRV07CiB9CkBAIC04MjgsNyArOTMyLDcgQEAKIAogCWxpc3QuYWRkciAgID0gaXUtPmRtYTsKIAlsaXN0Lmxlbmd0aCA9IGxlbjsKLQlsaXN0LmxrZXkgICA9IHRhcmdldC0+c3JwX2hvc3QtPm1yLT5sa2V5OworCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+bGtleTsKIAogCXdyLm5leHQgICAgICAgPSBOVUxMOwogCXdyLndyX2lkICAgICAgPSB0YXJnZXQtPnR4X2hlYWQgJiBTUlBfU1FfU0laRTsKQEAgLTg3MCw4ICs5NzQsOCBAQAogCWlmICghaXUpCiAJCWdvdG8gZXJyOwogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAotCQkJCVNSUF9NQVhfSVVfTEVOLCBETUFfVE9fREVWSUNFKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwgaXUtPmRtYSwKKwkJCQlzcnBfbWF4X2l1X2xlbiwgRE1BX1RPX0RFVklDRSk7CiAKIAlyZXEgPSBsaXN0X2VudHJ5KHRhcmdldC0+ZnJlZV9yZXFzLm5leHQsIHN0cnVjdCBzcnBfcmVxdWVzdCwgbGlzdCk7CiAKQEAgLTkwMyw4ICsxMDA3LDggQEAKIAkJZ290byBlcnJfdW5tYXA7CiAJfQogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAotCQkJCSAgIFNSUF9NQVhfSVVfTEVOLCBETUFfVE9fREVWSUNFKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwgaXUtPmRtYSwKKwkJCQkgICBzcnBfbWF4X2l1X2xlbiwgRE1BX1RPX0RFVklDRSk7CiAKIAlpZiAoX19zcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIGxlbikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU2VuZCBmYWlsZWRcbiIpOwpAQCAtOTM2LDcgKzEwNDAsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IFNSUF9TUV9TSVpFICsgMTsgKytpKSB7CiAJCXRhcmdldC0+dHhfcmluZ1tpXSA9IHNycF9hbGxvY19pdSh0YXJnZXQtPnNycF9ob3N0LAotCQkJCQkJICBTUlBfTUFYX0lVX0xFTiwKKwkJCQkJCSAgc3JwX21heF9pdV9sZW4sCiAJCQkJCQkgIEdGUF9LRVJORUwsIERNQV9UT19ERVZJQ0UpOwogCQlpZiAoIXRhcmdldC0+dHhfcmluZ1tpXSkKIAkJCWdvdG8gZXJyOwpAQCAtMTEwNywxMSArMTIxMSwxMCBAQAogCQlzcnBfY21fcmVqX2hhbmRsZXIoY21faWQsIGV2ZW50LCB0YXJnZXQpOwogCQlicmVhazsKIAotCWNhc2UgSUJfQ01fTVJBX1JFQ0VJVkVEOgotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNUkEgcmVjZWl2ZWRcbiIpOwotCQlicmVhazsKLQotCWNhc2UgSUJfQ01fRFJFUF9SRUNFSVZFRDoKKwljYXNlIElCX0NNX0RSRVFfUkVDRUlWRUQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJEUkVRIHJlY2VpdmVkIC0gY29ubmVjdGlvbiBjbG9zZWRcbiIpOworCQlpZiAoaWJfc2VuZF9jbV9kcmVwKGNtX2lkLCBOVUxMLCAwKSkKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlbmRpbmcgQ00gRFJFUCBmYWlsZWRcbiIpOwogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fVElNRVdBSVRfRVhJVDoKQEAgLTExMjEsNiArMTIyNCwxMSBAQAogCQl0YXJnZXQtPnN0YXR1cyA9IDA7CiAJCWJyZWFrOwogCisJY2FzZSBJQl9DTV9NUkFfUkVDRUlWRUQ6CisJY2FzZSBJQl9DTV9EUkVRX0VSUk9SOgorCWNhc2UgSUJfQ01fRFJFUF9SRUNFSVZFRDoKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5oYW5kbGVkIENNIGV2ZW50ICVkXG4iLCBldmVudC0+ZXZlbnQpOwogCQlicmVhazsKQEAgLTEyMzksMTEgKzEzNDcsOCBAQAogCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZ0YXJnZXQtPnJlcV9xdWV1ZSwgbGlzdCkKLQkJaWYgKHJlcS0+c2NtbmQtPmRldmljZSA9PSBzY21uZC0+ZGV2aWNlKSB7Ci0JCQlyZXEtPnNjbW5kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7Ci0JCQlyZXEtPnNjbW5kLT5zY3NpX2RvbmUocmVxLT5zY21uZCk7Ci0JCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7Ci0JCX0KKwkJaWYgKHJlcS0+c2NtbmQtPmRldmljZSA9PSBzY21uZC0+ZGV2aWNlKQorCQkJc3JwX3Jlc2V0X3JlcSh0YXJnZXQsIHJlcSk7CiAKIAlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAKQEAgLTEzMjksMTEgKzE0MzQsMjMgQEAKIAkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIHRhcmdldC0+cGF0aC5kZ2lkLnJhdylbN10pKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd196ZXJvX3JlcV9saW0oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKworCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfREVBRCB8fAorCSAgICB0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfUkVNT1ZFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGFyZ2V0LT56ZXJvX3JlcV9saW0pOworfQorCiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaWRfZXh0LAlTX0lSVUdPLCBzaG93X2lkX2V4dCwJCU5VTEwpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGlvY19ndWlkLAlTX0lSVUdPLCBzaG93X2lvY19ndWlkLAkJTlVMTCk7CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2VydmljZV9pZCwJU19JUlVHTywgc2hvd19zZXJ2aWNlX2lkLAlOVUxMKTsKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihwa2V5LAkJU19JUlVHTywgc2hvd19wa2V5LAkJTlVMTCk7CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZGdpZCwJCVNfSVJVR08sIHNob3dfZGdpZCwJCU5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHplcm9fcmVxX2xpbSwJU19JUlVHTywgc2hvd196ZXJvX3JlcV9saW0sCU5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnNycF9ob3N0X2F0dHJzW10gPSB7CiAJJmNsYXNzX2RldmljZV9hdHRyX2lkX2V4dCwKQEAgLTEzNDEsNiArMTQ1OCw3IEBACiAJJmNsYXNzX2RldmljZV9hdHRyX3NlcnZpY2VfaWQsCiAJJmNsYXNzX2RldmljZV9hdHRyX3BrZXksCiAJJmNsYXNzX2RldmljZV9hdHRyX2RnaWQsCisJJmNsYXNzX2RldmljZV9hdHRyX3plcm9fcmVxX2xpbSwKIAlOVUxMCiB9OwogCkBAIC0xMzU0LDcgKzE0NzIsNiBAQAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gc3JwX3Jlc2V0X2hvc3QsCiAJLmNhbl9xdWV1ZQkJCT0gU1JQX1NRX1NJWkUsCiAJLnRoaXNfaWQJCQk9IC0xLAotCS5zZ190YWJsZXNpemUJCQk9IFNSUF9NQVhfSU5ESVJFQ1QsCiAJLmNtZF9wZXJfbHVuCQkJPSBTUlBfU1FfU0laRSwKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycwkJCT0gc3JwX2hvc3RfYXR0cnMKQEAgLTEzNjUsMTggKzE0ODIsMTcgQEAKIAlzcHJpbnRmKHRhcmdldC0+dGFyZ2V0X25hbWUsICJTUlAuVDEwOiUwMTZsbFgiLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUodGFyZ2V0LT5pZF9leHQpKTsKIAotCWlmIChzY3NpX2FkZF9ob3N0KHRhcmdldC0+c2NzaV9ob3N0LCBob3N0LT5kZXYtPmRtYV9kZXZpY2UpKQorCWlmIChzY3NpX2FkZF9ob3N0KHRhcmdldC0+c2NzaV9ob3N0LCBob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbXV0ZXhfbG9jaygmaG9zdC0+dGFyZ2V0X211dGV4KTsKKwlzcGluX2xvY2soJmhvc3QtPnRhcmdldF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZ0YXJnZXQtPmxpc3QsICZob3N0LT50YXJnZXRfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZob3N0LT50YXJnZXRfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZob3N0LT50YXJnZXRfbG9jayk7CiAKIAl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9MSVZFOwogCi0JLyogWFhYOiBhcmUgd2Ugc3VwcG9zZWQgdG8gaGF2ZSBhIGRlZmluaXRpb24gb2YgU0NBTl9XSUxEX0NBUkQgPz8gKi8KIAlzY3NpX3NjYW5fdGFyZ2V0KCZ0YXJnZXQtPnNjc2lfaG9zdC0+c2hvc3RfZ2VuZGV2LAotCQkJIDAsIHRhcmdldC0+c2NzaV9pZCwgfjAsIDApOworCQkJIDAsIHRhcmdldC0+c2NzaV9pZCwgU0NBTl9XSUxEX0NBUkQsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDEwLDYgKzE1MjYsOCBAQAogCVNSUF9PUFRfUEtFWQkJPSAxIDw8IDMsCiAJU1JQX09QVF9TRVJWSUNFX0lECT0gMSA8PCA0LAogCVNSUF9PUFRfTUFYX1NFQ1QJPSAxIDw8IDUsCisJU1JQX09QVF9NQVhfQ01EX1BFUl9MVU4JPSAxIDw8IDYsCisJU1JQX09QVF9JT19DTEFTUwk9IDEgPDwgNywKIAlTUlBfT1BUX0FMTAkJPSAoU1JQX09QVF9JRF9FWFQJfAogCQkJCSAgIFNSUF9PUFRfSU9DX0dVSUQJfAogCQkJCSAgIFNSUF9PUFRfREdJRAkJfApAQCAtMTQxOCwxMyArMTUzNiwxNSBAQAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3Qgc3JwX29wdF90b2tlbnMgPSB7Ci0JeyBTUlBfT1BUX0lEX0VYVCwJImlkX2V4dD0lcyIgCX0sCi0JeyBTUlBfT1BUX0lPQ19HVUlELAkiaW9jX2d1aWQ9JXMiIAl9LAotCXsgU1JQX09QVF9ER0lELAkJImRnaWQ9JXMiIAl9LAotCXsgU1JQX09QVF9QS0VZLAkJInBrZXk9JXgiIAl9LAotCXsgU1JQX09QVF9TRVJWSUNFX0lELAkic2VydmljZV9pZD0lcyIgfSwKLQl7IFNSUF9PUFRfTUFYX1NFQ1QsICAgICAibWF4X3NlY3Q9JWQiIAl9LAotCXsgU1JQX09QVF9FUlIsCQlOVUxMIAkJfQorCXsgU1JQX09QVF9JRF9FWFQsCQkiaWRfZXh0PSVzIiAJCX0sCisJeyBTUlBfT1BUX0lPQ19HVUlELAkJImlvY19ndWlkPSVzIiAJCX0sCisJeyBTUlBfT1BUX0RHSUQsCQkJImRnaWQ9JXMiIAkJfSwKKwl7IFNSUF9PUFRfUEtFWSwJCQkicGtleT0leCIgCQl9LAorCXsgU1JQX09QVF9TRVJWSUNFX0lELAkJInNlcnZpY2VfaWQ9JXMiCQl9LAorCXsgU1JQX09QVF9NQVhfU0VDVCwJCSJtYXhfc2VjdD0lZCIgCQl9LAorCXsgU1JQX09QVF9NQVhfQ01EX1BFUl9MVU4sCSJtYXhfY21kX3Blcl9sdW49JWQiIAl9LAorCXsgU1JQX09QVF9JT19DTEFTUywJCSJpb19jbGFzcz0leCIJCX0sCisJeyBTUlBfT1BUX0VSUiwJCQlOVUxMIAkJCX0KIH07CiAKIHN0YXRpYyBpbnQgc3JwX3BhcnNlX29wdGlvbnMoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCkBAIC0xNTAwLDYgKzE2MjAsMjkgQEAKIAkJCXRhcmdldC0+c2NzaV9ob3N0LT5tYXhfc2VjdG9ycyA9IHRva2VuOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBTUlBfT1BUX01BWF9DTURfUEVSX0xVTjoKKwkJCWlmIChtYXRjaF9pbnQoYXJncywgJnRva2VuKSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJiYWQgbWF4IGNtZF9wZXJfbHVuIHBhcmFtZXRlciAnJXMnXG4iLCBwKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXRhcmdldC0+c2NzaV9ob3N0LT5jbWRfcGVyX2x1biA9IG1pbih0b2tlbiwgU1JQX1NRX1NJWkUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUlBfT1BUX0lPX0NMQVNTOgorCQkJaWYgKG1hdGNoX2hleChhcmdzLCAmdG9rZW4pKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggImJhZCAgSU8gY2xhc3MgcGFyYW1ldGVyICclcycgXG4iLCBwKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWlmICh0b2tlbiAhPSBTUlBfUkVWMTBfSUJfSU9fQ0xBU1MgJiYKKwkJCSAgICB0b2tlbiAhPSBTUlBfUkVWMTZBX0lCX0lPX0NMQVNTKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggInVua25vd24gSU8gY2xhc3MgcGFyYW1ldGVyIHZhbHVlIgorCQkJCSAgICAgICAiICV4IHNwZWNpZmllZCAodXNlICV4IG9yICV4KS5cbiIsCisJCQkJICAgICAgIHRva2VuLCBTUlBfUkVWMTBfSUJfSU9fQ0xBU1MsIFNSUF9SRVYxNkFfSUJfSU9fQ0xBU1MpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJdGFyZ2V0LT5pb19jbGFzcyA9IHRva2VuOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJ1bmtub3duIHBhcmFtZXRlciBvciBtaXNzaW5nIHZhbHVlICIKIAkJCSAgICAgICAiJyVzJyBpbiB0YXJnZXQgY3JlYXRpb24gcmVxdWVzdFxuIiwgcCk7CkBAIC0xNTQyLDYgKzE2ODUsNyBAQAogCXRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHRhcmdldF9ob3N0KTsKIAltZW1zZXQodGFyZ2V0LCAwLCBzaXplb2YgKnRhcmdldCk7CiAKKwl0YXJnZXQtPmlvX2NsYXNzICAgPSBTUlBfUkVWMTZBX0lCX0lPX0NMQVNTOwogCXRhcmdldC0+c2NzaV9ob3N0ICA9IHRhcmdldF9ob3N0OwogCXRhcmdldC0+c3JwX2hvc3QgICA9IGhvc3Q7CiAKQEAgLTE1NTgsNyArMTcwMiw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlpYl9nZXRfY2FjaGVkX2dpZChob3N0LT5kZXYsIGhvc3QtPnBvcnQsIDAsICZ0YXJnZXQtPnBhdGguc2dpZCk7CisJaWJfZ2V0X2NhY2hlZF9naWQoaG9zdC0+ZGV2LT5kZXYsIGhvc3QtPnBvcnQsIDAsICZ0YXJnZXQtPnBhdGguc2dpZCk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyBQRlggIm5ldyB0YXJnZXQ6IGlkX2V4dCAlMDE2bGx4IGlvY19ndWlkICUwMTZsbHggcGtleSAlMDR4ICIKIAkgICAgICAgInNlcnZpY2VfaWQgJTAxNmxseCBkZ2lkICUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKQEAgLTE1NzksNyArMTcyMyw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQl0YXJnZXQtPmNtX2lkID0gaWJfY3JlYXRlX2NtX2lkKGhvc3QtPmRldiwgc3JwX2NtX2hhbmRsZXIsIHRhcmdldCk7CisJdGFyZ2V0LT5jbV9pZCA9IGliX2NyZWF0ZV9jbV9pZChob3N0LT5kZXYtPmRldiwgc3JwX2NtX2hhbmRsZXIsIHRhcmdldCk7CiAJaWYgKElTX0VSUih0YXJnZXQtPmNtX2lkKSkgewogCQlyZXQgPSBQVFJfRVJSKHRhcmdldC0+Y21faWQpOwogCQlnb3RvIGVycl9mcmVlOwpAQCAtMTYxOSw3ICsxNzYzLDcgQEAKIAlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPQogCQljb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGNsYXNzX2Rldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaG9zdC0+ZGV2LT5uYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaG9zdC0+ZGV2LT5kZXYtPm5hbWUpOwogfQogCiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaWJkZXYsIFNfSVJVR08sIHNob3dfaWJkZXYsIE5VTEwpOwpAQCAtMTYzNCw3ICsxNzc4LDcgQEAKIAogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHBvcnQsIFNfSVJVR08sIHNob3dfcG9ydCwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3JwX2hvc3QgKnNycF9hZGRfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnQpCitzdGF0aWMgc3RydWN0IHNycF9ob3N0ICpzcnBfYWRkX3BvcnQoc3RydWN0IHNycF9kZXZpY2UgKmRldmljZSwgdTggcG9ydCkKIHsKIAlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3Q7CiAKQEAgLTE2NDMsMzIgKzE3ODcsMjEgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlJTklUX0xJU1RfSEVBRCgmaG9zdC0+dGFyZ2V0X2xpc3QpOwotCW11dGV4X2luaXQoJmhvc3QtPnRhcmdldF9tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPnRhcmdldF9sb2NrKTsKIAlpbml0X2NvbXBsZXRpb24oJmhvc3QtPnJlbGVhc2VkKTsKIAlob3N0LT5kZXYgID0gZGV2aWNlOwogCWhvc3QtPnBvcnQgPSBwb3J0OwogCiAJaG9zdC0+aW5pdGlhdG9yX3BvcnRfaWRbN10gPSBwb3J0OwotCW1lbWNweShob3N0LT5pbml0aWF0b3JfcG9ydF9pZCArIDgsICZkZXZpY2UtPm5vZGVfZ3VpZCwgOCk7Ci0KLQlob3N0LT5wZCAgID0gaWJfYWxsb2NfcGQoZGV2aWNlKTsKLQlpZiAoSVNfRVJSKGhvc3QtPnBkKSkKLQkJZ290byBlcnJfZnJlZTsKLQotCWhvc3QtPm1yICAgPSBpYl9nZXRfZG1hX21yKGhvc3QtPnBkLAotCQkJCSAgIElCX0FDQ0VTU19MT0NBTF9XUklURSB8Ci0JCQkJICAgSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKLQkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKTsKLQlpZiAoSVNfRVJSKGhvc3QtPm1yKSkKLQkJZ290byBlcnJfcGQ7CisJbWVtY3B5KGhvc3QtPmluaXRpYXRvcl9wb3J0X2lkICsgOCwgJmRldmljZS0+ZGV2LT5ub2RlX2d1aWQsIDgpOwogCiAJaG9zdC0+Y2xhc3NfZGV2LmNsYXNzID0gJnNycF9jbGFzczsKLQlob3N0LT5jbGFzc19kZXYuZGV2ICAgPSBkZXZpY2UtPmRtYV9kZXZpY2U7CisJaG9zdC0+Y2xhc3NfZGV2LmRldiAgID0gZGV2aWNlLT5kZXYtPmRtYV9kZXZpY2U7CiAJc25wcmludGYoaG9zdC0+Y2xhc3NfZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwgInNycC0lcy0lZCIsCi0JCSBkZXZpY2UtPm5hbWUsIHBvcnQpOworCQkgZGV2aWNlLT5kZXYtPm5hbWUsIHBvcnQpOwogCiAJaWYgKGNsYXNzX2RldmljZV9yZWdpc3RlcigmaG9zdC0+Y2xhc3NfZGV2KSkKLQkJZ290byBlcnJfbXI7CisJCWdvdG8gZnJlZV9ob3N0OwogCWlmIChjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJmhvc3QtPmNsYXNzX2RldiwgJmNsYXNzX2RldmljZV9hdHRyX2FkZF90YXJnZXQpKQogCQlnb3RvIGVycl9jbGFzczsKIAlpZiAoY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZob3N0LT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pYmRldikpCkBAIC0xNjgxLDEzICsxODE0LDcgQEAKIGVycl9jbGFzczoKIAljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmaG9zdC0+Y2xhc3NfZGV2KTsKIAotZXJyX21yOgotCWliX2RlcmVnX21yKGhvc3QtPm1yKTsKLQotZXJyX3BkOgotCWliX2RlYWxsb2NfcGQoaG9zdC0+cGQpOwotCi1lcnJfZnJlZToKK2ZyZWVfaG9zdDoKIAlrZnJlZShob3N0KTsKIAogCXJldHVybiBOVUxMOwpAQCAtMTY5NSwxNSArMTgyMiw2MiBAQAogCiBzdGF0aWMgdm9pZCBzcnBfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZGV2X2xpc3Q7CisJc3RydWN0IHNycF9kZXZpY2UgKnNycF9kZXY7CisJc3RydWN0IGliX2RldmljZV9hdHRyICpkZXZfYXR0cjsKKwlzdHJ1Y3QgaWJfZm1yX3Bvb2xfcGFyYW0gZm1yX3BhcmFtOwogCXN0cnVjdCBzcnBfaG9zdCAqaG9zdDsKIAlpbnQgcywgZSwgcDsKIAotCWRldl9saXN0ID0ga21hbGxvYyhzaXplb2YgKmRldl9saXN0LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldl9saXN0KQorCWRldl9hdHRyID0ga21hbGxvYyhzaXplb2YgKmRldl9hdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9hdHRyKQogCQlyZXR1cm47CiAKLQlJTklUX0xJU1RfSEVBRChkZXZfbGlzdCk7CisJaWYgKGliX3F1ZXJ5X2RldmljZShkZXZpY2UsIGRldl9hdHRyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiUXVlcnkgZGV2aWNlIGZhaWxlZCBmb3IgJXNcbiIsCisJCSAgICAgICBkZXZpY2UtPm5hbWUpOworCQlnb3RvIGZyZWVfYXR0cjsKKwl9CisKKwlzcnBfZGV2ID0ga21hbGxvYyhzaXplb2YgKnNycF9kZXYsIEdGUF9LRVJORUwpOworCWlmICghc3JwX2RldikKKwkJZ290byBmcmVlX2F0dHI7CisKKwkvKgorCSAqIFVzZSB0aGUgc21hbGxlc3QgcGFnZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgSENBLCBkb3duIHRvIGEKKwkgKiBtaW5pbXVtIG9mIDUxMiBieXRlcyAod2hpY2ggaXMgdGhlIHNtYWxsZXN0IHNlY3RvciB0aGF0IGEKKwkgKiBTQ1NJIGNvbW1hbmQgd2lsbCBldmVyIGNhcnJ5KS4KKwkgKi8KKwlzcnBfZGV2LT5mbXJfcGFnZV9zaGlmdCA9IG1heCg5LCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7CisJc3JwX2Rldi0+Zm1yX3BhZ2Vfc2l6ZSAgPSAxIDw8IHNycF9kZXYtPmZtcl9wYWdlX3NoaWZ0OworCXNycF9kZXYtPmZtcl9wYWdlX21hc2sgID0gfigodW5zaWduZWQgbG9uZykgc3JwX2Rldi0+Zm1yX3BhZ2Vfc2l6ZSAtIDEpOworCisJSU5JVF9MSVNUX0hFQUQoJnNycF9kZXYtPmRldl9saXN0KTsKKworCXNycF9kZXYtPmRldiA9IGRldmljZTsKKwlzcnBfZGV2LT5wZCAgPSBpYl9hbGxvY19wZChkZXZpY2UpOworCWlmIChJU19FUlIoc3JwX2Rldi0+cGQpKQorCQlnb3RvIGZyZWVfZGV2OworCisJc3JwX2Rldi0+bXIgPSBpYl9nZXRfZG1hX21yKHNycF9kZXYtPnBkLAorCQkJCSAgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAorCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKTsKKwlpZiAoSVNfRVJSKHNycF9kZXYtPm1yKSkKKwkJZ290byBlcnJfcGQ7CisKKwltZW1zZXQoJmZtcl9wYXJhbSwgMCwgc2l6ZW9mIGZtcl9wYXJhbSk7CisJZm1yX3BhcmFtLnBvb2xfc2l6ZQkgICAgPSBTUlBfRk1SX1BPT0xfU0laRTsKKwlmbXJfcGFyYW0uZGlydHlfd2F0ZXJtYXJrICAgPSBTUlBfRk1SX0RJUlRZX1NJWkU7CisJZm1yX3BhcmFtLmNhY2hlCQkgICAgPSAxOworCWZtcl9wYXJhbS5tYXhfcGFnZXNfcGVyX2ZtciA9IFNSUF9GTVJfU0laRTsKKwlmbXJfcGFyYW0ucGFnZV9zaGlmdAkgICAgPSBzcnBfZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlmbXJfcGFyYW0uYWNjZXNzCSAgICA9IChJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAorCQkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIHwKKwkJCQkgICAgICAgSUJfQUNDRVNTX1JFTU9URV9SRUFEKTsKKworCXNycF9kZXYtPmZtcl9wb29sID0gaWJfY3JlYXRlX2Ztcl9wb29sKHNycF9kZXYtPnBkLCAmZm1yX3BhcmFtKTsKKwlpZiAoSVNfRVJSKHNycF9kZXYtPmZtcl9wb29sKSkKKwkJc3JwX2Rldi0+Zm1yX3Bvb2wgPSBOVUxMOwogCiAJaWYgKGRldmljZS0+bm9kZV90eXBlID09IElCX05PREVfU1dJVENIKSB7CiAJCXMgPSAwOwpAQCAtMTcxNCwyNSArMTg4OCwzNSBAQAogCX0KIAogCWZvciAocCA9IHM7IHAgPD0gZTsgKytwKSB7Ci0JCWhvc3QgPSBzcnBfYWRkX3BvcnQoZGV2aWNlLCBwKTsKKwkJaG9zdCA9IHNycF9hZGRfcG9ydChzcnBfZGV2LCBwKTsKIAkJaWYgKGhvc3QpCi0JCQlsaXN0X2FkZF90YWlsKCZob3N0LT5saXN0LCBkZXZfbGlzdCk7CisJCQlsaXN0X2FkZF90YWlsKCZob3N0LT5saXN0LCAmc3JwX2Rldi0+ZGV2X2xpc3QpOwogCX0KIAotCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZzcnBfY2xpZW50LCBkZXZfbGlzdCk7CisJaWJfc2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnNycF9jbGllbnQsIHNycF9kZXYpOworCisJZ290byBmcmVlX2F0dHI7CisKK2Vycl9wZDoKKwlpYl9kZWFsbG9jX3BkKHNycF9kZXYtPnBkKTsKKworZnJlZV9kZXY6CisJa2ZyZWUoc3JwX2Rldik7CisKK2ZyZWVfYXR0cjoKKwlrZnJlZShkZXZfYXR0cik7CiB9CiAKIHN0YXRpYyB2b2lkIHNycF9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfbGlzdDsKKwlzdHJ1Y3Qgc3JwX2RldmljZSAqc3JwX2RldjsKIAlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QsICp0bXBfaG9zdDsKIAlMSVNUX0hFQUQodGFyZ2V0X2xpc3QpOwogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgKnRtcF90YXJnZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRldl9saXN0ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnNycF9jbGllbnQpOworCXNycF9kZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmc3JwX2NsaWVudCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zdCwgdG1wX2hvc3QsIGRldl9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvc3QsIHRtcF9ob3N0LCAmc3JwX2Rldi0+ZGV2X2xpc3QsIGxpc3QpIHsKIAkJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJmhvc3QtPmNsYXNzX2Rldik7CiAJCS8qCiAJCSAqIFdhaXQgZm9yIHRoZSBzeXNmcyBlbnRyeSB0byBnbyBhd2F5LCBzbyB0aGF0IG5vIG5ldwpAQCAtMTc0NCwxNSArMTkyOCwxMyBAQAogCQkgKiBNYXJrIGFsbCB0YXJnZXQgcG9ydHMgYXMgcmVtb3ZlZCwgc28gd2Ugc3RvcCBxdWV1ZWluZwogCQkgKiBjb21tYW5kcyBhbmQgZG9uJ3QgdHJ5IHRvIHJlY29ubmVjdC4KIAkJICovCi0JCW11dGV4X2xvY2soJmhvc3QtPnRhcmdldF9tdXRleCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXJnZXQsIHRtcF90YXJnZXQsCi0JCQkJCSAmaG9zdC0+dGFyZ2V0X2xpc3QsIGxpc3QpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCWlmICh0YXJnZXQtPnN0YXRlICE9IFNSUF9UQVJHRVRfUkVNT1ZFRCkKLQkJCQl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9SRU1PVkVEOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9jaygmaG9zdC0+dGFyZ2V0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhcmdldCwgJmhvc3QtPnRhcmdldF9saXN0LCBsaXN0KSB7CisJCQlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCQkJdGFyZ2V0LT5zdGF0ZSA9IFNSUF9UQVJHRVRfUkVNT1ZFRDsKKwkJCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAkJfQotCQltdXRleF91bmxvY2soJmhvc3QtPnRhcmdldF9tdXRleCk7CisJCXNwaW5fdW5sb2NrKCZob3N0LT50YXJnZXRfbG9jayk7CiAKIAkJLyoKIAkJICogV2FpdCBmb3IgYW55IHJlY29ubmVjdGlvbiB0YXNrcyB0aGF0IG1heSBoYXZlCkBAIC0xNzcwLDE4ICsxOTUyLDI2IEBACiAJCQlzY3NpX2hvc3RfcHV0KHRhcmdldC0+c2NzaV9ob3N0KTsKIAkJfQogCi0JCWliX2RlcmVnX21yKGhvc3QtPm1yKTsKLQkJaWJfZGVhbGxvY19wZChob3N0LT5wZCk7CiAJCWtmcmVlKGhvc3QpOwogCX0KIAotCWtmcmVlKGRldl9saXN0KTsKKwlpZiAoc3JwX2Rldi0+Zm1yX3Bvb2wpCisJCWliX2Rlc3Ryb3lfZm1yX3Bvb2woc3JwX2Rldi0+Zm1yX3Bvb2wpOworCWliX2RlcmVnX21yKHNycF9kZXYtPm1yKTsKKwlpYl9kZWFsbG9jX3BkKHNycF9kZXYtPnBkKTsKKworCWtmcmVlKHNycF9kZXYpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzcnBfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgcmV0OwogCisJc3JwX3RlbXBsYXRlLnNnX3RhYmxlc2l6ZSA9IHNycF9zZ190YWJsZXNpemU7CisJc3JwX21heF9pdV9sZW4gPSAoc2l6ZW9mIChzdHJ1Y3Qgc3JwX2NtZCkgKworCQkJICBzaXplb2YgKHN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmKSArCisJCQkgIHNycF9zZ190YWJsZXNpemUgKiAxNik7CisKIAlyZXQgPSBjbGFzc19yZWdpc3Rlcigmc3JwX2NsYXNzKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImNvdWxkbid0IHJlZ2lzdGVyIGNsYXNzIGluZmluaWJhbmRfc3JwXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKaW5kZXggYzVjZDQzYS4uNWI1ODFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9zYS5oPgogI2luY2x1ZGUgPHJkbWEvaWJfY20uaD4KKyNpbmNsdWRlIDxyZG1hL2liX2Ztcl9wb29sLmg+CiAKIGVudW0gewogCVNSUF9QQVRIX1JFQ19USU1FT1VUX01TCT0gMTAwMCwKQEAgLTU1LDIwICs1NiwyMSBAQAogCVNSUF9ETElEX1JFRElSRUNUCT0gMiwKIAogCVNSUF9NQVhfTFVOCQk9IDUxMiwKLQlTUlBfTUFYX0lVX0xFTgkJPSAyNTYsCisJU1JQX0RFRl9TR19UQUJMRVNJWkUJPSAxMiwKIAogCVNSUF9SUV9TSElGVCAgICAJPSA2LAogCVNSUF9SUV9TSVpFCQk9IDEgPDwgU1JQX1JRX1NISUZULAogCVNSUF9TUV9TSVpFCQk9IFNSUF9SUV9TSVpFIC0gMSwKIAlTUlBfQ1FfU0laRQkJPSBTUlBfU1FfU0laRSArIFNSUF9SUV9TSVpFLAogCi0JU1JQX1RBR19UU0tfTUdNVAk9IDEgPDwgKFNSUF9SUV9TSElGVCArIDEpCisJU1JQX1RBR19UU0tfTUdNVAk9IDEgPDwgKFNSUF9SUV9TSElGVCArIDEpLAorCisJU1JQX0ZNUl9TSVpFCQk9IDI1NiwKKwlTUlBfRk1SX1BPT0xfU0laRQk9IDEwMjQsCisJU1JQX0ZNUl9ESVJUWV9TSVpFCT0gU1JQX0ZNUl9QT09MX1NJWkUgLyA0CiB9OwogCiAjZGVmaW5lIFNSUF9PUF9SRUNWCQkoMSA8PCAzMSkKLSNkZWZpbmUgU1JQX01BWF9JTkRJUkVDVAkoKFNSUF9NQVhfSVVfTEVOIC0JCQlcCi0JCQkJICBzaXplb2YgKHN0cnVjdCBzcnBfY21kKSAtCQlcCi0JCQkJICBzaXplb2YgKHN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmKSkgLyAxNikKIAogZW51bSBzcnBfdGFyZ2V0X3N0YXRlIHsKIAlTUlBfVEFSR0VUX0xJVkUsCkBAIC03NywxNSArNzksMjQgQEAKIAlTUlBfVEFSR0VUX1JFTU9WRUQKIH07CiAKLXN0cnVjdCBzcnBfaG9zdCB7Ci0JdTgJCQlpbml0aWF0b3JfcG9ydF9pZFsxNl07CitzdHJ1Y3Qgc3JwX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlkZXZfbGlzdDsKIAlzdHJ1Y3QgaWJfZGV2aWNlICAgICAgICpkZXY7Ci0JdTggICAgICAgICAgICAgICAgICAgICAgcG9ydDsKIAlzdHJ1Y3QgaWJfcGQJICAgICAgICpwZDsKIAlzdHJ1Y3QgaWJfbXIJICAgICAgICptcjsKKwlzdHJ1Y3QgaWJfZm1yX3Bvb2wgICAgICpmbXJfcG9vbDsKKwlpbnQJCQlmbXJfcGFnZV9zaGlmdDsKKwlpbnQJCQlmbXJfcGFnZV9zaXplOworCXVuc2lnbmVkIGxvbmcJCWZtcl9wYWdlX21hc2s7Cit9OworCitzdHJ1Y3Qgc3JwX2hvc3QgeworCXU4CQkJaW5pdGlhdG9yX3BvcnRfaWRbMTZdOworCXN0cnVjdCBzcnBfZGV2aWNlICAgICAgKmRldjsKKwl1OAkJCXBvcnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7CiAJc3RydWN0IGxpc3RfaGVhZAl0YXJnZXRfbGlzdDsKLQlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICB0YXJnZXRfbXV0ZXg7CisJc3BpbmxvY2tfdAkJdGFyZ2V0X2xvY2s7CiAJc3RydWN0IGNvbXBsZXRpb24JcmVsZWFzZWQ7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogfTsKQEAgLTk1LDYgKzEwNiw3IEBACiAJc3RydWN0IHNjc2lfY21uZCAgICAgICAqc2NtbmQ7CiAJc3RydWN0IHNycF9pdQkgICAgICAgKmNtZDsKIAlzdHJ1Y3Qgc3JwX2l1CSAgICAgICAqdHNrX21nbXQ7CisJc3RydWN0IGliX3Bvb2xfZm1yICAgICAqZm1yOwogCS8qCiAJICogRmFrZSBzY2F0dGVybGlzdCB1c2VkIHdoZW4gc2NtbmQtPnVzZV9zZz09MC4gIENhbiBiZSBraWxsZWQKIAkgKiB3aGVuIHRoZSBTQ1NJIG1pZGxheWVyIG5vIGxvbmdlciBnZW5lcmF0ZXMgbm9uLVNHIGNvbW1hbmRzLgpAQCAtMTEwLDYgKzEyMiw3IEBACiAJX19iZTY0CQkJaWRfZXh0OwogCV9fYmU2NAkJCWlvY19ndWlkOwogCV9fYmU2NAkJCXNlcnZpY2VfaWQ7CisJdTE2CQkJaW9fY2xhc3M7CiAJc3RydWN0IHNycF9ob3N0CSAgICAgICAqc3JwX2hvc3Q7CiAJc3RydWN0IFNjc2lfSG9zdCAgICAgICAqc2NzaV9ob3N0OwogCWNoYXIJCQl0YXJnZXRfbmFtZVszMl07CkBAIC0xMjYsNiArMTM5LDggQEAKIAlpbnQJCQltYXhfdGlfaXVfbGVuOwogCXMzMgkJCXJlcV9saW07CiAKKwlpbnQJCQl6ZXJvX3JlcV9saW07CisKIAl1bnNpZ25lZAkJcnhfaGVhZDsKIAlzdHJ1Y3Qgc3JwX2l1CSAgICAgICAqcnhfcmluZ1tTUlBfUlFfU0laRV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCAyZjBmMzU4Li45ZmQ4NzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCiAJZHZiX25ldF9mZWVkX3N0b3AoZGV2KTsKIAlwcml2LT5yeF9tb2RlID0gUlhfTU9ERV9VTkk7Ci0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlkcHJpbnRrKCIlczogcHJvbWlzY3VvdXMgbW9kZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTEwNzcsNyArMTA3Nyw3IEBACiAJCX0KIAl9CiAKLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCWR2Yl9uZXRfZmVlZF9zdGFydChkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYwppbmRleCBmMmE0ZDM4Li4zMjAxZGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKQEAgLTgzMSw2ICs4MzEsNyBAQAogCXJldHVybiByYzsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogLyoKICAqIHNwaSBtb2R1bGUgcmVzdW1lIGhhbmRsZXIKICAqLwpAQCAtODQ2LDYgKzg0Nyw3IEBACiAKIAlyZXR1cm4gcmM7CiB9CisjZW5kaWYKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCmluZGV4IDVlYTEzM2MuLjdiZDRkODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAl1MzIgbTsJCQkvKiBtZXNzYWdlIGlkICovCiAJc3RydWN0IGkyb19tZXNzYWdlICptc2c7CS8qIHBvaW50ZXIgdG8gdGhlIHJlcGx5IG1lc3NhZ2UgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIG5vZGUgaW4gZ2xvYmFsIHdhaXQgbGlzdCAqLworCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayBiZWZvcmUgbW9kaWZ5aW5nICovCiB9OwogCiAvKiBXb3JrIHN0cnVjdCBuZWVkZWQgdG8gaGFuZGxlIExDVCBOT1RJRlkgcmVwbGllcyAqLwpAQCAtODcsNiArODgsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCUlOSVRfTElTVF9IRUFEKCZ3YWl0LT5saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmd2FpdC0+bG9jayk7CiAKIAlyZXR1cm4gd2FpdDsKIH07CkBAIC0xMjUsNiArMTI3LDcgQEAKIAlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3cSk7CiAJc3RydWN0IGkyb19leGVjX3dhaXQgKndhaXQ7CiAJc3RhdGljIHUzMiB0Y250eHQgPSAweDgwMDAwMDAwOworCWxvbmcgZmxhZ3M7CiAJaW50IHJjID0gMDsKIAogCXdhaXQgPSBpMm9fZXhlY193YWl0X2FsbG9jKCk7CkBAIC0xNDYsMzMgKzE0OSwyOCBAQAogCXdhaXQtPnRjbnR4dCA9IHRjbnR4dCsrOwogCW1zZy0+dS5zLnRjbnR4dCA9IGNwdV90b19sZTMyKHdhaXQtPnRjbnR4dCk7CiAKKwl3YWl0LT53cSA9ICZ3cTsKKwkvKgorCSAqIHdlIGFkZCBlbGVtZW50cyB0byB0aGUgaGVhZCwgYmVjYXVzZSBpZiBhIGVudHJ5IGluIHRoZSBsaXN0IHdpbGwKKwkgKiBuZXZlciBiZSByZW1vdmVkLCB3ZSBoYXZlIHRvIGl0ZXJhdGUgb3ZlciBpdCBldmVyeSB0aW1lCisJICovCisJbGlzdF9hZGQoJndhaXQtPmxpc3QsICZpMm9fZXhlY193YWl0X2xpc3QpOworCiAJLyoKIAkgKiBQb3N0IHRoZSBtZXNzYWdlIHRvIHRoZSBjb250cm9sbGVyLiBBdCBzb21lIHBvaW50IGxhdGVyIGl0IHdpbGwKIAkgKiByZXR1cm4uIElmIHdlIHRpbWUgb3V0IGJlZm9yZSBpdCByZXR1cm5zIHRoZW4gY29tcGxldGUgd2lsbCBiZSB6ZXJvLgogCSAqLwogCWkyb19tc2dfcG9zdChjLCBtc2cpOwogCi0JaWYgKCF3YWl0LT5jb21wbGV0ZSkgewotCQl3YWl0LT53cSA9ICZ3cTsKLQkJLyoKLQkJICogd2UgYWRkIGVsZW1lbnRzIGFkZCB0aGUgaGVhZCwgYmVjYXVzZSBpZiBhIGVudHJ5IGluIHRoZSBsaXN0Ci0JCSAqIHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCwgd2UgaGF2ZSB0byBpdGVyYXRlIG92ZXIgaXQgZXZlcnkgdGltZQotCQkgKi8KLQkJbGlzdF9hZGQoJndhaXQtPmxpc3QsICZpMm9fZXhlY193YWl0X2xpc3QpOworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCB3YWl0LT5jb21wbGV0ZSwgdGltZW91dCAqIEhaKTsKIAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgd2FpdC0+Y29tcGxldGUsCi0JCQkJCQkgdGltZW91dCAqIEhaKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2FpdC0+bG9jaywgZmxhZ3MpOwogCi0JCXdhaXQtPndxID0gTlVMTDsKLQl9CisJd2FpdC0+d3EgPSBOVUxMOwogCi0JYmFycmllcigpOwotCi0JaWYgKHdhaXQtPmNvbXBsZXRlKSB7CisJaWYgKHdhaXQtPmNvbXBsZXRlKQogCQlyYyA9IGxlMzJfdG9fY3B1KHdhaXQtPm1zZy0+Ym9keVswXSkgPj4gMjQ7Ci0JCWkyb19mbHVzaF9yZXBseShjLCB3YWl0LT5tKTsKLQkJaTJvX2V4ZWNfd2FpdF9mcmVlKHdhaXQpOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCS8qCiAJCSAqIFdlIGNhbm5vdCByZW1vdmUgaXQgbm93LiBUaGlzIGlzIGltcG9ydGFudC4gV2hlbiBpdCBkb2VzCiAJCSAqIHRlcm1pbmF0ZSAod2hpY2ggaXQgbXVzdCBkbyBpZiB0aGUgY29udHJvbGxlciBoYXMgbm90CkBAIC0xODYsNiArMTg0LDEzIEBACiAJCXJjID0gLUVUSU1FRE9VVDsKIAl9CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmMgIT0gLUVUSU1FRE9VVCkgeworCQlpMm9fZmx1c2hfcmVwbHkoYywgd2FpdC0+bSk7CisJCWkyb19leGVjX3dhaXRfZnJlZSh3YWl0KTsKKwl9CisKIAlyZXR1cm4gcmM7CiB9OwogCkBAIC0yMTMsNyArMjE4LDYgQEAKIHsKIAlzdHJ1Y3QgaTJvX2V4ZWNfd2FpdCAqd2FpdCwgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBzcGlubG9ja190IGxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CiAJaW50IHJjID0gMTsKIAogCS8qCkBAIC0yMjMsMjMgKzIyNywyNCBAQAogCSAqIGFscmVhZHkgZXhwaXJlZC4gTm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoYXQgZXhjZXB0IGxvZyBpdCBmb3IKIAkgKiBkZWJ1ZyBwdXJwb3NlcywgaW5jcmVhc2UgdGltZW91dCwgYW5kIHJlY29tcGlsZS4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YWl0LCB0bXAsICZpMm9fZXhlY193YWl0X2xpc3QsIGxpc3QpIHsKIAkJaWYgKHdhaXQtPnRjbnR4dCA9PSBjb250ZXh0KSB7Ci0JCQlsaXN0X2RlbCgmd2FpdC0+bGlzdCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2FpdC0+bG9jaywgZmxhZ3MpOwogCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7CisJCQlsaXN0X2RlbCgmd2FpdC0+bGlzdCk7CiAKIAkJCXdhaXQtPm0gPSBtOwogCQkJd2FpdC0+bXNnID0gbXNnOwogCQkJd2FpdC0+Y29tcGxldGUgPSAxOwogCi0JCQliYXJyaWVyKCk7Ci0KLQkJCWlmICh3YWl0LT53cSkgewotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSh3YWl0LT53cSk7CisJCQlpZiAod2FpdC0+d3EpCiAJCQkJcmMgPSAwOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKKwkJCQlyYyA9IC0xOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CisKKwkJCWlmIChyYykgewogCQkJCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCQkJCWRldiA9ICZjLT5wZGV2LT5kZXY7CkBAIC0yNDgsMTUgKzI1MywxMyBAQAogCQkJCQkgYy0+bmFtZSk7CiAJCQkJaTJvX2RtYV9mcmVlKGRldiwgJndhaXQtPmRtYSk7CiAJCQkJaTJvX2V4ZWNfd2FpdF9mcmVlKHdhaXQpOwotCQkJCXJjID0gLTE7Ci0JCQl9CisJCQl9IGVsc2UKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUod2FpdC0+d3EpOwogCiAJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7Ci0KIAlvc21fd2FybigiJXM6IEJvZ3VzIHJlcGx5IGluIFBPU1QgV0FJVCAodHItY29udGV4dDogJTA4eCkhXG4iLCBjLT5uYW1lLAogCQkgY29udGV4dCk7CiAKQEAgLTMyMiwxNCArMzI1LDkgQEAKIHN0YXRpYyBpbnQgaTJvX2V4ZWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpMm9fZGV2aWNlICppMm9fZGV2ID0gdG9faTJvX2RldmljZShkZXYpOwotCXN0cnVjdCBpMm9fY29udHJvbGxlciAqYyA9IGkyb19kZXYtPmlvcDsKIAogCWkyb19ldmVudF9yZWdpc3RlcihpMm9fZGV2LCAmaTJvX2V4ZWNfZHJpdmVyLCAwLCAweGZmZmZmZmZmKTsKIAotCWMtPmV4ZWMgPSBpMm9fZGV2OwotCi0JaTJvX2V4ZWNfbGN0X25vdGlmeShjLCBjLT5sY3QtPmNoYW5nZV9pbmQgKyAxKTsKLQogCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92ZW5kb3JfaWQpOwogCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wcm9kdWN0X2lkKTsKIApAQCAtNTIzLDYgKzUyMSw4IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBpMm9fbWVzc2FnZSAqbXNnOwogCisJZG93bigmYy0+bGN0X2xvY2spOworCiAJZGV2ID0gJmMtPnBkZXYtPmRldjsKIAogCWlmIChpMm9fZG1hX3JlYWxsb2MKQEAgLTU0NSw2ICs1NDUsOCBAQAogCiAJaTJvX21zZ19wb3N0KGMsIG1zZyk7CiAKKwl1cCgmYy0+bGN0X2xvY2spOworCiAJcmV0dXJuIDA7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwppbmRleCA0OTIxNjc0Li5mZWJiZGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKQEAgLTgwNCw4ICs4MDQsNiBAQAogCiAJLyogQXNrIHRoZSBJT1AgdG8gc3dpdGNoIHRvIFJFU0VUIHN0YXRlICovCiAJaTJvX2lvcF9yZXNldChjKTsKLQotCXB1dF9kZXZpY2UoJmMtPmRldmljZSk7CiB9CiAKIC8qKgpAQCAtMTA1OSw3ICsxMDU3LDcgQEAKIAogCXNucHJpbnRmKHBvb2xuYW1lLCBzaXplb2YocG9vbG5hbWUpLCAiaTJvXyVzX21zZ19pbnBvb2wiLCBjLT5uYW1lKTsKIAlpZiAoaTJvX3Bvb2xfYWxsb2MKLQkgICAgKCZjLT5pbl9tc2csIHBvb2xuYW1lLCBJMk9fSU5CT1VORF9NU0dfRlJBTUVfU0laRSAqIDQsCisJICAgICgmYy0+aW5fbXNnLCBwb29sbmFtZSwgSTJPX0lOQk9VTkRfTVNHX0ZSQU1FX1NJWkUgKiA0ICsgc2l6ZW9mKHUzMiksCiAJICAgICBJMk9fTVNHX0lOUE9PTF9NSU4pKSB7CiAJCWtmcmVlKGMpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IGY2ZDUxY2UuLmJiNDQ1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtOTA5LDcgKzkwOSw3IEBACiAgKiBoZXJlIGFsc28gY2F1c2VzIHRoZSBtb2R1bGUgdG8gYmUgdW5sb2FkZWQKICAqLwogIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJZGV2XzNjNTAxID0gZWwxX3Byb2JlKC0xKTsKIAlpZiAoSVNfRVJSKGRldl8zYzUwMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwMy5jIGIvZHJpdmVycy9uZXQvM2M1MDMuYwppbmRleCBkY2M5OGFmLi5jYjVlZjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwMy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTAzLmMKQEAgLTY4OCw3ICs2ODgsNyBAQAogCiAvKiBUaGlzIGlzIHNldCB1cCBzbyB0aGF0IG9ubHkgYSBzaW5nbGUgYXV0b3Byb2JlIHRha2VzIHBsYWNlIHBlciBjYWxsLgogSVNBIGRldmljZSBhdXRvcHJvYmVzIG9uIGEgcnVubmluZyBtYWNoaW5lIGFyZSBub3QgcmVjb21tZW5kZWQuICovCi1pbnQKK2ludCBfX2luaXQKIGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA1LmMgYi9kcml2ZXJzL25ldC8zYzUwNS5jCmluZGV4IDExMTYwMWMuLjE5YzBiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDUuYwpAQCAtMTYzMyw3ICsxNjMzLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiRXRoZXJMaW5rIFBsdXMgSVJRIG51bWJlcihzKSAoYXNzaWduZWQpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGRtYSwgIkV0aGVyTGluayBQbHVzIERNQSBjaGFubmVsKHMpIik7CiAKLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWludCB0aGlzX2RldiwgZm91bmQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwNy5jIGIvZHJpdmVycy9uZXQvM2M1MDcuYwppbmRleCA0ZGI4Mjg5Li42MDM5MDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKQEAgLTkzMiw3ICs5MzIsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhpbywgIkV0aGVyTGluazE2IEkvTyBiYXNlIGFkZHJlc3MiKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiKGlnbm9yZWQpIik7CiAKLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWlmIChpbyA9PSAwKQogCQlwcmludGsoIjNjNTA3OiBZb3Ugc2hvdWxkIG5vdCB1c2UgYXV0by1wcm9iaW5nIHdpdGggaW5zbW9kIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyMy5jIGIvZHJpdmVycy9uZXQvM2M1MjMuYwppbmRleCBiNDA4ODVkNC4uNGJmODUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC0xMjc3LDcgKzEyNzcsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJFdGhlckxpbmsvTUMgSVJRIG51bWJlcihzKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgdGhpc19kZXYsZm91bmQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCA2ZGIzMzAxLi4xYjFjYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTE2NDYsNyArMTY0Niw3IEBACiAgKglpbnNtb2QgbXVsdGlwbGUgbW9kdWxlcyBmb3Igbm93IGJ1dCBpdCdzIGEgaGFjay4KICAqLwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAl0aGlzX2RldmljZSA9IG1jMzJfcHJvYmUoLTEpOwogCWlmIChJU19FUlIodGhpc19kZXZpY2UpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCAwNjZlMjJiLi40NmQ4YzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtMTksMTEgKzE5LDExIEBACiAJU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAlDb250cmlidXRvcnM6Ci0JCisKIAkJV2FrZS1vbi1MQU4gc3VwcG9ydCAtIEZlbGlwZSBEYW1hc2lvIDxmZWxpcGV3ZEB0ZXJyYS5jb20uYnI+CiAJCVBDSSBzdXNwZW5kL3Jlc3VtZSAgLSBGZWxpcGUgRGFtYXNpbyA8ZmVsaXBld2RAdGVycmEuY29tLmJyPgogCQlMaW5rQ2hnIGludGVycnVwdCAgIC0gRmVsaXBlIERhbWFzaW8gPGZlbGlwZXdkQHRlcnJhLmNvbS5icj4KLQkJCQorCiAJVE9ETzoKIAkqIFRlc3QgVHggY2hlY2tzdW1taW5nIHRob3JvdWdobHkKIAkqIEltcGxlbWVudCBkZXYtPnR4X3RpbWVvdXQKQEAgLTQ2MSw3ICs0NjEsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGNwX3NldF9yeGJ1ZnNpemUgKHN0cnVjdCBjcF9wcml2YXRlICpjcCkKIHsKIAl1bnNpZ25lZCBpbnQgbXR1ID0gY3AtPmRldi0+bXR1OwotCQorCiAJaWYgKG10dSA+IEVUSF9EQVRBX0xFTikKIAkJLyogTVRVICsgZXRoZXJuZXQgaGVhZGVyICsgRkNTICsgb3B0aW9uYWwgVkxBTiB0YWcgKi8KIAkJY3AtPnJ4X2J1Zl9zeiA9IG10dSArIEVUSF9ITEVOICsgODsKQEAgLTUxMCw3ICs1MTAsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3BfcnhfY3N1bV9vayAodTMyIHN0YXR1cykKIHsKIAl1bnNpZ25lZCBpbnQgcHJvdG9jb2wgPSAoc3RhdHVzID4+IDE2KSAmIDB4MzsKLQkKKwogCWlmIChsaWtlbHkoKHByb3RvY29sID09IFJ4UHJvdG9UQ1ApICYmICghKHN0YXR1cyAmIFRDUEZhaWwpKSkpCiAJCXJldHVybiAxOwogCWVsc2UgaWYgKChwcm90b2NvbCA9PSBSeFByb3RvVURQKSAmJiAoIShzdGF0dXMgJiBVRFBGYWlsKSkpCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCWNwdzgoQ29uZmlnMywgUEFSTUVuYWJsZSk7CiAJY3AtPndvbF9lbmFibGVkID0gMDsKIAotCWNwdzgoQ29uZmlnNSwgY3ByOChDb25maWc1KSAmIFBNRVN0YXR1cyk7IAorCWNwdzgoQ29uZmlnNSwgY3ByOChDb25maWc1KSAmIFBNRVN0YXR1cyk7CiAKIAljcHczMl9mKEhpVHhSaW5nQWRkciwgMCk7CiAJY3B3MzJfZihIaVR4UmluZ0FkZHIgKyA0LCAwKTsKQEAgLTEzNTEsNyArMTM1MSw3IEBACiAJCSAgICAgICAgIFdBS0VfTUNBU1QgfCBXQUtFX1VDQVNUOwogCS8qIFdlIGRvbid0IG5lZWQgdG8gZ28gb24gaWYgV09MIGlzIGRpc2FibGVkICovCiAJaWYgKCFjcC0+d29sX2VuYWJsZWQpIHJldHVybjsKLQkKKwogCW9wdGlvbnMgICAgICAgID0gY3ByOCAoQ29uZmlnMyk7CiAJaWYgKG9wdGlvbnMgJiBMaW5rVXApICAgICAgICB3b2wtPndvbG9wdHMgfD0gV0FLRV9QSFk7CiAJaWYgKG9wdGlvbnMgJiBNYWdpY1BhY2tldCkgICB3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKQEAgLTE5MTksNyArMTkxOSw3IEBACiAJbWlpX2NoZWNrX21lZGlhKCZjcC0+bWlpX2lmLCBuZXRpZl9tc2dfbGluayhjcCksIEZBTFNFKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjcC0+bG9jaywgZmxhZ3MpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggZmVhZTc4My4uYWJkNjI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtMTY1LDcgKzE2NSw3IEBACiBzdGF0aWMgaW50IGRlYnVnID0gLTE7CiAKIC8qCi0gKiBSZWNlaXZlIHJpbmcgc2l6ZSAKKyAqIFJlY2VpdmUgcmluZyBzaXplCiAgKiBXYXJuaW5nOiA2NEsgcmluZyBoYXMgaGFyZHdhcmUgaXNzdWVzIGFuZCBtYXkgbG9jayB1cC4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1NIX0RSRUFNQ0FTVCkKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCXsweDAxOGEsIDB4MDEwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAogCXsweDEyNmMsIDB4MTIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAogCXsweDE3NDMsIDB4ODEzOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAotCXsweDAyMWIsIDB4ODEzOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LCAKKwl7MHgwMjFiLCAweDgxMzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMzkgfSwKIAogI2lmZGVmIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMAogCS8qIEJvZ3VzIDgxMzkgc2lsaWNvbiByZXBvcnRzIDgxMjkgd2l0aG91dCBleHRlcm5hbCBQUk9NIDotKCAqLwpAQCAtMTgyNCw3ICsxODI0LDcgQEAKIAlpbnQgdG1wX3dvcms7CiAjZW5kaWYKIAotCWlmIChuZXRpZl9tc2dfcnhfZXJyICh0cCkpIAorCWlmIChuZXRpZl9tc2dfcnhfZXJyICh0cCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogRXRoZXJuZXQgZnJhbWUgaGFkIGVycm9ycywgc3RhdHVzICU4Ljh4LlxuIiwKIAkJCWRldi0+bmFtZSwgcnhfc3RhdHVzKTsKIAl0cC0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC0xOTQ0LDcgKzE5NDQsNyBAQAogCQkgUlRMX1IxNiAoUnhCdWZBZGRyKSwKIAkJIFJUTF9SMTYgKFJ4QnVmUHRyKSwgUlRMX1I4IChDaGlwQ21kKSk7CiAKLQl3aGlsZSAobmV0aWZfcnVubmluZyhkZXYpICYmIHJlY2VpdmVkIDwgYnVkZ2V0IAorCXdoaWxlIChuZXRpZl9ydW5uaW5nKGRldikgJiYgcmVjZWl2ZWQgPCBidWRnZXQKIAkgICAgICAgJiYgKFJUTF9SOCAoQ2hpcENtZCkgJiBSeEJ1ZkVtcHR5KSA9PSAwKSB7CiAJCXUzMiByaW5nX29mZnNldCA9IGN1cl9yeCAlIFJYX0JVRl9MRU47CiAJCXUzMiByeF9zdGF0dXM7CkBAIC0yMDMxLDcgKzIwMzEsNyBAQAogCiAJCQluZXRpZl9yZWNlaXZlX3NrYiAoc2tiKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIAorCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsgKEtFUk5fV0FSTklORwogCQkJCQkiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkJCQlkZXYtPm5hbWUpOwpAQCAtMjE1OCwxMyArMjE1OCwxMyBAQAogCXN0YXR1cyA9IFJUTF9SMTYgKEludHJTdGF0dXMpOwogCiAJLyogc2hhcmVkIGlycT8gKi8KLQlpZiAodW5saWtlbHkoKHN0YXR1cyAmIHJ0bDgxMzlfaW50cl9tYXNrKSA9PSAwKSkgCisJaWYgKHVubGlrZWx5KChzdGF0dXMgJiBydGw4MTM5X2ludHJfbWFzaykgPT0gMCkpCiAJCWdvdG8gb3V0OwogCiAJaGFuZGxlZCA9IDE7CiAKIAkvKiBoL3cgbm8gbG9uZ2VyIHByZXNlbnQgKGhvdHBsdWc/KSBvciBtYWpvciBlcnJvciwgYmFpbCAqLwotCWlmICh1bmxpa2VseShzdGF0dXMgPT0gMHhGRkZGKSkgCisJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSAweEZGRkYpKQogCQlnb3RvIG91dDsKIAogCS8qIGNsb3NlIHBvc3NpYmxlIHJhY2UncyB3aXRoIGRldl9jbG9zZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggYmRhYWFkOC4uMGM2YjQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC00NDcsNiArNDQ3LDcgQEAKIGNvbmZpZyBNSVBTX0FVMVgwMF9FTkVUCiAJYm9vbCAiTUlQUyBBVTEwMDAgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBTT0NfQVUxWDAwCisJc2VsZWN0IFBIWUxJQgogCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIElmIHlvdSBoYXZlIGFuIEFsY2hlbXkgU2VtaSBBVTFYMDAgYmFzZWQgc3lzdGVtCkBAIC04NjUsNiArODY2LDIyIEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGRtOTAwMC4KIAorY29uZmlnIFNNQzkxMVgKKwl0cmlzdGF0ZSAiU01TQyBMQU45MTFbNTY3OF0gc3VwcG9ydCIKKwlzZWxlY3QgQ1JDMzIKKwlzZWxlY3QgTUlJCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgQVJDSF9QWEEKKwloZWxwCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBTTVNDJ3MgTEFOOTExeCBzZXJpZXMgb2YgRXRoZXJuZXQgY2hpcHNldHMKKwkgIGluY2x1ZGluZyB0aGUgbmV3IExBTjkxMTUsIExBTjkxMTYsIExBTjkxMTcsIGFuZCBMQU45MTE4LgorCSAgU2F5IFkgaWYgeW91IHdhbnQgaXQgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCAKKwkgIGFuZCByZWFkIHRoZSBFdGhlcm5ldC1IT1dUTywgYXZhaWxhYmxlIGZyb20KKwkgIDxodHRwOi8vd3d3LmxpbnV4ZG9jLm9yZy9kb2NzLmh0bWwjaG93dG8+LgorCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGJlIAorCSAgY2FsbGVkIHNtYzkxMXguICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgTSAKKwkgIGhlcmUgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4KKwogY29uZmlnIE5FVF9WRU5ET1JfUkFDQUwKIAlib29sICJSYWNhbC1JbnRlcmxhbiAoTWljb20pIE5JIGNhcmRzIgogCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIElTQQpAQCAtMjE2Myw2ICsyMTgwLDggQEAKIGNvbmZpZyBCTlgyCiAJdHJpc3RhdGUgIkJyb2FkY29tIE5ldFh0cmVtZUlJIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgQ1JDMzIKKwlzZWxlY3QgWkxJQl9JTkZMQVRFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQnJvYWRjb20gTmV0WHRyZW1lSUkgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcy4KIApAQCAtMjMxMSw2ICsyMzMwLDIzIEBACiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAorY29uZmlnIE1ZUkkxMEdFCisJdHJpc3RhdGUgIk15cmljb20gTXlyaS0xMEcgRXRoZXJuZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgQ1JDMzIKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNeXJpY29tIE15cmktMTBHIER1YWwgUHJvdG9jb2wgaW50ZXJmYWNlIGluCisJICBFdGhlcm5ldCBtb2RlLiBJZiB0aGUgZWVwcm9tIG9uIHlvdXIgYm9hcmQgaXMgbm90IHJlY2VudCBlbm91Z2gsCisJICB5b3Ugd2lsbCBuZWVkIGEgbmV3ZXIgZmlybXdhcmUgaW1hZ2UuCisJICBZb3UgbWF5IGdldCB0aGlzIGltYWdlIG9yIG1vcmUgaW5mb3JtYXRpb24sIGF0OgorCisJICA8aHR0cDovL3d3dy5teXJpLmNvbS9NeXJpLTEwRy8+CisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXQtbW9kdWxlcy50eHQ+LiAgVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbXlyaTEwZ2UuCisKIGVuZG1lbnUKIAogc291cmNlICJkcml2ZXJzL25ldC90b2tlbnJpbmcvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggYjkwNDY4YS4uMWVjZWQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTE5Miw3ICsxOTIsOSBAQAogb2JqLSQoQ09ORklHX0FNRDgxMTFfRVRIKSArPSBhbWQ4MTExZS5vCiBvYmotJChDT05GSUdfSUJNVkVUSCkgKz0gaWJtdmV0aC5vCiBvYmotJChDT05GSUdfUzJJTykgKz0gczJpby5vCitvYmotJChDT05GSUdfTVlSSTEwR0UpICs9IG15cmkxMGdlLwogb2JqLSQoQ09ORklHX1NNQzkxWCkgKz0gc21jOTF4Lm8KK29iai0kKENPTkZJR19TTUM5MTFYKSArPSBzbWM5MTF4Lm8KIG9iai0kKENPTkZJR19ETTkwMDApICs9IGRtOTAwMC5vCiBvYmotJChDT05GSUdfRkVDXzhYWCkgKz0gZmVjXzh4eC8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDE0ZGJhZDEuLjAzOGQ1ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTIsMTMgKzIsMTYgQEAKICAqCiAgKiBBbGNoZW15IEF1MXgwMCBldGhlcm5ldCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwMSwyMDAyLDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzLCAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogICogQ29weXJpZ2h0IDIwMDIgVGltZVN5cyBDb3JwLgogICogQWRkZWQgZXRodG9vbC9taWktdG9vbCBzdXBwb3J0LAogICogQ29weXJpZ2h0IDIwMDQgTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KICAqIFVwZGF0ZTogMjAwNCBCam9lcm4gUmllbWVyLCByaWVtZXJAZm9rdXMuZnJhdW5ob2Zlci5kZSAKICAqIG9yIHJpZW1lckByaWVtZXItbnQuZGU6IGZpeGVkIHRoZSBsaW5rIGJlYXQgZGV0ZWN0aW9uIHdpdGggCiAgKiBpb2N0bHMgKFNJT0NHTUlJUEhZKQorICogQ29weXJpZ2h0IDIwMDYgSGVyYmVydCBWYWxlcmlvIFJpZWRlbCA8aHZyQGdudS5vcmc+CisgKiAgY29udmVydGVkIHRvIHVzZSBsaW51eC0yLjYueCdzIFBIWSBmcmFtZXdvcmsKKyAqCiAgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCiAgKgpAQCAtNTMsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC02OCw3ICs3Miw3IEBACiBzdGF0aWMgaW50IGF1MTAwMF9kZWJ1ZyA9IDM7CiAjZW5kaWYKIAotI2RlZmluZSBEUlZfTkFNRQkiYXUxMDAwZXRoIgorI2RlZmluZSBEUlZfTkFNRQkiYXUxMDAwX2V0aCIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuNSIKICNkZWZpbmUgRFJWX0FVVEhPUgkiUGV0ZSBQb3BvdiA8cHBvcG92QGVtYmVkZGVkYWxsZXkuY29tPiIKICNkZWZpbmUgRFJWX0RFU0MJIkF1MXh4eCBvbi1jaGlwIEV0aGVybmV0IGRyaXZlciIKQEAgLTgwLDcgKzg0LDcgQEAKIC8vIHByb3RvdHlwZXMKIHN0YXRpYyB2b2lkIGhhcmRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIGVuYWJsZV9yeF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIGF1MTAwMF9wcm9iZSh1MzIgaW9hZGRyLCBpbnQgaXJxLCBpbnQgcG9ydF9udW0pOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogYXUxMDAwX3Byb2JlKGludCBwb3J0X251bSk7CiBzdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBhdTEwMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwpAQCAtODgsMTcgKzkyLDE1IEBACiBzdGF0aWMgaW50IGF1MTAwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdTEwMDBfaW50ZXJydXB0KGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIHN0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7CiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXUxMDAwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIGF1MTAwMF90aW1lcih1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOwogc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LCBpbnQpOwogc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCwgdTE2KTsKLXN0YXRpYyB2b2lkIGR1bXBfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQpOworc3RhdGljIHZvaWQgYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwogCiAvLyBleHRlcm5zCi1leHRlcm4gIHZvaWQgYWNrX3Jpc2VfZWRnZV9pcnEodW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgZ2V0X2V0aGVybmV0X2FkZHIoY2hhciAqZXRoZXJuZXRfYWRkcik7CiBleHRlcm4gdm9pZCBzdHIyZWFkZHIodW5zaWduZWQgY2hhciAqZWEsIHVuc2lnbmVkIGNoYXIgKnN0cik7CiBleHRlcm4gY2hhciAqIF9faW5pdCBwcm9tX2dldGNtZGxpbmUodm9pZCk7CkBAIC0xMjYsNzA1ICsxMjgsODMgQEAKIAkweDAwLCAweDUwLCAweGMyLCAweDBjLCAweDMwLCAweDAwCiB9OwogCi0jZGVmaW5lIG5pYnN3YXAoeCkgKCgoKHgpID4+IDQpICYgMHgwZikgfCAoKCh4KSA8PCA0KSAmIDB4ZjApKQotI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCi0KLS8vIEZvciByZWFkaW5nL3dyaXRpbmcgMzItYml0IHdvcmRzIGZyb20vdG8gRE1BIG1lbW9yeQotI2RlZmluZSBjcHVfdG9fZG1hMzIgY3B1X3RvX2JlMzIKLSNkZWZpbmUgZG1hMzJfdG9fY3B1IGJlMzJfdG9fY3B1Ci0KIHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVfbWFjc1tOVU1fRVRIX0lOVEVSRkFDRVNdOwogCi0vKiBGSVhNRSAKLSAqIEFsbCBvZiB0aGUgUEhZIGNvZGUgcmVhbGx5IHNob3VsZCBiZSBkZXRhY2hlZCBmcm9tIHRoZSBNQUMgCi0gKiBjb2RlLgorLyoKKyAqIGJvYXJkLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zCisgKgorICogUEhZIGRldGVjdGlvbiBhbGdvcml0aG0KKyAqCisgKiBJZiBBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcgaXMgdW5kZWZpbmVkLCB0aGUgUEhZIHNldHVwIGlzCisgKiBhdXRvZGV0ZWN0ZWQ6CisgKgorICogbWlpX3Byb2JlKCkgZmlyc3Qgc2VhcmNoZXMgdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyBmb3IgYSBQSFksCisgKiBzZWxlY3RpbmcgdGhlIGZpcnN0IChvciBsYXN0LCBpZiBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIgaXMKKyAqIGRlZmluZWQpIFBIWSBhZGRyZXNzIG5vdCBhbHJlYWR5IGNsYWltZWQgYnkgYW5vdGhlciBuZXRkZXYuCisgKgorICogSWYgbm90aGluZyB3YXMgZm91bmQgdGhhdCB3YXkgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSAybmQgZXRoZXJuZXQKKyAqIGNvbnRyb2xsZXIncyBQSFkgYW5kIEFVMVhYWF9QSFkxX1NFQVJDSF9PTl9NQUMwIGlzIGRlZmluZWQsIHRoZW4KKyAqIHRoZSBmaXJzdCBNSUkgYnVzIGlzIHNlYXJjaGVkIGFzIHdlbGwgZm9yIGFuIHVuY2xhaW1lZCBQSFk7IHRoaXMgaXMKKyAqIG5lZWRlZCBpbiBjYXNlIG9mIGEgZHVhbC1QSFkgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2ggdGhlIE1BQzAncyBNSUkKKyAqIGJ1cy4KKyAqCisgKiBGaW5hbGx5LCBpZiBubyBQSFkgaXMgZm91bmQsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgZXRoZXJuZXQKKyAqIGNvbnRyb2xsZXIgaXMgbm90IHJlZ2lzdGVyZWQgdG8gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLgogICovCiAKLS8qIERlZmF1bHQgYWR2ZXJ0aXNlICovCi0jZGVmaW5lIEdFTk1JSV9ERUZBVUxUX0FEVkVSVElTRSBcCi0JQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8IFwKLQlBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfCBcCi0JQURWRVJUSVNFRF9BdXRvbmVnCisvKiBhdXRvZGV0ZWN0aW9uIGRlZmF1bHRzICovCisjdW5kZWYgIEFVMVhYWF9QSFlfU0VBUkNIX0hJR0hFU1RfQUREUgorI2RlZmluZSBBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMAogCi0jZGVmaW5lIEdFTk1JSV9ERUZBVUxUX0ZFQVRVUkVTIFwKLQlTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8IFwKLQlTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgXAotCVNVUFBPUlRFRF9BdXRvbmVnCisvKiBzdGF0aWMgUEhZIHNldHVwCisgKgorICogbW9zdCBib2FyZHMgUEhZIHNldHVwIHNob3VsZCBiZSBkZXRlY3RhYmxlIHByb3Blcmx5IHdpdGggdGhlCisgKiBhdXRvZGV0ZWN0aW9uIGFsZ29yaXRobSBpbiBtaWlfcHJvYmUoKSwgYnV0IGluIHNvbWUgY2FzZXMgKGUuZy4gaWYKKyAqIHlvdSBoYXZlIGEgc3dpdGNoIGF0dGFjaGVkLCBvciB3YW50IHRvIHVzZSB0aGUgUEhZJ3MgaW50ZXJydXB0CisgKiBub3RpZmljYXRpb24gY2FwYWJpbGl0aWVzKSB5b3UgY2FuIHByb3ZpZGUgYSBzdGF0aWMgUEhZCisgKiBjb25maWd1cmF0aW9uIGhlcmUKKyAqCisgKiBJUlFzIG1heSBvbmx5IGJlIHNldCwgaWYgYSBQSFkgYWRkcmVzcyB3YXMgY29uZmlndXJlZAorICogSWYgYSBQSFkgYWRkcmVzcyBpcyBnaXZlbiwgYWxzbyBhIGJ1cyBpZCBpcyByZXF1aXJlZCB0byBiZSBzZXQKKyAqCisgKiBwczogbWFrZSBzdXJlIHRoZSB1c2VkIGlycXMgYXJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgaW4gdGhlIGJvYXJkCisgKiBzcGVjaWZpYyBpcnEtbWFwCisgKi8KIAotaW50IGJjbV81MjAxX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBkYXRhOwotCQotCS8qIFN0b3AgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEgJiB+TUlJX0NOVExfQVVUTyk7CisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19CT1NQT1JVUykKKy8qCisgKiBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0Y2ggYXR0YWNoZWQgdG8gTUFDMCwKKyAqIE1BQzAgaXMgYXNzb2NpYXRlZCB3aXRoIFBIWSBhZGRyZXNzIDUgKD09IFdBTiBwb3J0KQorICogTUFDMSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBQSFksIHNpbmNlIGl0J3MgY29ubmVjdGVkIGRpcmVjdGx5CisgKiB0byB0aGUgc3dpdGNoLgorICogbm8gaW50ZXJydXB0cyBhcmUgdXNlZAorICovCisjIGRlZmluZSBBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcKIAotCS8qIFNldCBhZHZlcnRpc2VtZW50IHRvIDEwLzEwMCBhbmQgSGFsZi9GdWxsIGR1cGxleAotCSAqIChmdWxsIGNhcGFiaWxpdGllcykgKi8KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9BTkFEVik7Ci0JZGF0YSB8PSBNSUlfTldBWV9UWCB8IE1JSV9OV0FZX1RYX0ZEWCB8IE1JSV9OV0FZX1RfRkRYIHwgTUlJX05XQVlfVDsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9BTkFEViwgZGF0YSk7Ci0JCi0JLyogUmVzdGFydCBhdXRvLW5lZ290aWF0aW9uICovCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JZGF0YSB8PSBNSUlfQ05UTF9SU1RfQVVUTyB8IE1JSV9DTlRMX0FVVE87Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSk7CisjIGRlZmluZSBBVTFYWFhfUEhZMF9BRERSICA1CisjIGRlZmluZSBBVTFYWFhfUEhZMF9CVVNJRCAwCisjICB1bmRlZiBBVTFYWFhfUEhZMF9JUlEKIAotCWlmIChhdTEwMDBfZGVidWcgPiA0KSAKLQkJZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBiY21fNTIwMV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JczE2IG1paV9jb250cm9sLCB0aW1lb3V0OwotCQotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsKLQltZGVsYXkoMSk7Ci0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7Ci0JCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9Ci0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgCi1iY21fNTIwMV9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpCi17Ci0JdTE2IG1paV9kYXRhOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOwotCi0JaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiY21fNTIwMV9zdGF0dXMgZXJyb3I6IE5VTEwgZGV2XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKLQotCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX1NUQVRVUyk7Ci0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElOSykgewotCQkqbGluayA9IDE7Ci0JCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0FVWF9DTlRSTCk7Ci0JCWlmIChtaWlfZGF0YSAmIE1JSV9BVVhfMTAwKSB7Ci0JCQlpZiAobWlpX2RhdGEgJiBNSUlfQVVYX0ZEWCkgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFVFg7Ci0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFVFg7Ci0JCQl9Ci0JCX0KLQkJZWxzZSAgewotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOwotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOwotCQl9Ci0KLQl9Ci0JZWxzZSB7Ci0JCSpsaW5rID0gMDsKLQkJKnNwZWVkID0gMDsKLQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGxzaV84MDIyN19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJsc2lfODAyMjdfaW5pdFxuIik7Ci0KLQkvKiByZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gKi8KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLAotCQkgICBNSUlfQ05UTF9GMTAwIHwgTUlJX0NOVExfQVVUTyB8IE1JSV9DTlRMX1JTVF9BVVRPKTsgLy8gfCBNSUlfQ05UTF9GRFgpOwotCW1kZWxheSgxKTsKLQotCS8qIHNldCB1cCBMRURzIHRvIGNvcnJlY3QgZGlzcGxheSAqLwotI2lmZGVmIENPTkZJR19NSVBTX01UWDEKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIDE3LCAweGZmODApOwotI2Vsc2UKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIDE3LCAweGZmYzApOworIyAgdW5kZWYgQVUxWFhYX1BIWTFfQUREUgorIyAgdW5kZWYgQVUxWFhYX1BIWTFfQlVTSUQKKyMgIHVuZGVmIEFVMVhYWF9QSFkxX0lSUQogI2VuZGlmCiAKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBsc2lfODAyMjdfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsKLQkKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgewotCQlwcmludGsoImxzaV84MDIyN19yZXNldFxuIik7Ci0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCX0KLQotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsKLQltZGVsYXkoMSk7Ci0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7Ci0JCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9Ci0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQKLWxzaV84MDIyN19zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpCi17Ci0JdTE2IG1paV9kYXRhOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOwotCi0JaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJsc2lfODAyMjdfc3RhdHVzIGVycm9yOiBOVUxMIGRldlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0KLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCWlmIChtaWlfZGF0YSAmIE1JSV9TVEFUX0xJTkspIHsKLQkJKmxpbmsgPSAxOwotCQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9MU0lfUEhZX1NUQVQpOwotCQlpZiAobWlpX2RhdGEgJiBNSUlfTFNJX1BIWV9TVEFUX1NQRCkgewotCQkJaWYgKG1paV9kYXRhICYgTUlJX0xTSV9QSFlfU1RBVF9GRFgpIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJfQotCQl9Ci0JCWVsc2UgIHsKLQkJCSpzcGVlZCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJfQotCi0JfQotCWVsc2UgewotCQkqbGluayA9IDA7Ci0JCSpzcGVlZCA9IDA7Ci0JCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfVU5LTk9XTjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBhbTc5YzkwMV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlwcmludGsoImFtNzljOTAxX2luaXRcbiIpOwotCXJldHVybiAwOwotfQotCi1pbnQgYW03OWM5MDFfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXByaW50aygiYW03OWM5MDFfcmVzZXRcbiIpOwotCXJldHVybiAwOwotfQotCi1pbnQgCi1hbTc5YzkwMV9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBhbTc5Yzg3NF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlzMTYgZGF0YTsKLQotCS8qIDc5Yzg3NCBoYXMgcXVpdCByZXNlbWJsZWQgYml0IGFzc2lnbm1lbnRzIHRvIEJDTTUyMDEgKi8KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJhbTc5Yzg0N19pbml0XG4iKTsKLQotCS8qIFN0b3AgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEgJiB+TUlJX0NOVExfQVVUTyk7Ci0KLQkvKiBTZXQgYWR2ZXJ0aXNlbWVudCB0byAxMC8xMDAgYW5kIEhhbGYvRnVsbCBkdXBsZXgKLQkgKiAoZnVsbCBjYXBhYmlsaXRpZXMpICovCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYpOwotCWRhdGEgfD0gTUlJX05XQVlfVFggfCBNSUlfTldBWV9UWF9GRFggfCBNSUlfTldBWV9UX0ZEWCB8IE1JSV9OV0FZX1Q7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYsIGRhdGEpOwotCQotCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCWRhdGEgfD0gTUlJX0NOVExfUlNUX0FVVE8gfCBNSUlfQ05UTF9BVVRPOwotCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSk7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBhbTc5Yzg3NF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JczE2IG1paV9jb250cm9sLCB0aW1lb3V0OwotCQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoImFtNzljODc0X3Jlc2V0XG4iKTsKLQotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsKLQltZGVsYXkoMSk7Ci0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7Ci0JCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9Ci0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgCi1hbTc5Yzg3NF9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpCi17Ci0JdTE2IG1paV9kYXRhOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOwotCi0JLy8gcHJpbnRrKCJhbTc5Yzg3NF9zdGF0dXNcbiIpOwotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYW03OWM4NzRfc3RhdHVzIGVycm9yOiBOVUxMIGRldlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCi0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElOSykgewotCQkqbGluayA9IDE7Ci0JCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0FNRF9QSFlfU1RBVCk7Ci0JCWlmIChtaWlfZGF0YSAmIE1JSV9BTURfUEhZX1NUQVRfU1BEKSB7Ci0JCQlpZiAobWlpX2RhdGEgJiBNSUlfQU1EX1BIWV9TVEFUX0ZEWCkgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFVFg7Ci0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFVFg7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkqc3BlZWQgPSBJRl9QT1JUXzEwQkFTRVQ7Ci0JCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwQkFTRVQ7Ci0JCX0KLQotCX0KLQllbHNlIHsKLQkJKmxpbmsgPSAwOwotCQkqc3BlZWQgPSAwOwotCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05PV047Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgbHh0OTcxYV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJseHQ5NzFhX2luaXRcbiIpOwotCi0JLyogcmVzdGFydCBhdXRvLW5lZ290aWF0aW9uICovCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwKLQkJICAgTUlJX0NOVExfRjEwMCB8IE1JSV9DTlRMX0FVVE8gfCBNSUlfQ05UTF9SU1RfQVVUTyB8IE1JSV9DTlRMX0ZEWCk7Ci0KLQkvKiBzZXQgdXAgTEVEcyB0byBjb3JyZWN0IGRpc3BsYXkgKi8KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIDIwLCAweDA0MjIpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCXJldHVybiAwOwotfQotCi1pbnQgbHh0OTcxYV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JczE2IG1paV9jb250cm9sLCB0aW1lb3V0OwotCQotCWlmIChhdTEwMDBfZGVidWcgPiA0KSB7Ci0JCXByaW50aygibHh0OTcxYV9yZXNldFxuIik7Ci0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCX0KLQotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsKLQltZGVsYXkoMSk7Ci0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7Ci0JCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9Ci0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQKLWx4dDk3MWFfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQotewotCXUxNiBtaWlfZGF0YTsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsKLQotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibHh0OTcxYV9zdGF0dXMgZXJyb3I6IE5VTEwgZGV2XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKLQotCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX1NUQVRVUyk7Ci0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElOSykgewotCQkqbGluayA9IDE7Ci0JCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0lOVEVMX1BIWV9TVEFUKTsKLQkJaWYgKG1paV9kYXRhICYgTUlJX0lOVEVMX1BIWV9TVEFUX1NQRCkgewotCQkJaWYgKG1paV9kYXRhICYgTUlJX0lOVEVMX1BIWV9TVEFUX0ZEWCkgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFVFg7Ci0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFVFg7Ci0JCQl9Ci0JCX0KLQkJZWxzZSAgewotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOwotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOwotCQl9Ci0KLQl9Ci0JZWxzZSB7Ci0JCSpsaW5rID0gMDsKLQkJKnNwZWVkID0gMDsKLQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGtzODk5NW1faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JczE2IGRhdGE7Ci0JCi0vLwlwcmludGsoImtzODk5NW1faW5pdFxuIik7Ci0JLyogU3RvcCBhdXRvLW5lZ290aWF0aW9uICovCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSAmIH5NSUlfQ05UTF9BVVRPKTsKLQotCS8qIFNldCBhZHZlcnRpc2VtZW50IHRvIDEwLzEwMCBhbmQgSGFsZi9GdWxsIGR1cGxleAotCSAqIChmdWxsIGNhcGFiaWxpdGllcykgKi8KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9BTkFEVik7Ci0JZGF0YSB8PSBNSUlfTldBWV9UWCB8IE1JSV9OV0FZX1RYX0ZEWCB8IE1JSV9OV0FZX1RfRkRYIHwgTUlJX05XQVlfVDsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9BTkFEViwgZGF0YSk7Ci0JCi0JLyogUmVzdGFydCBhdXRvLW5lZ290aWF0aW9uICovCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JZGF0YSB8PSBNSUlfQ05UTF9SU1RfQVVUTyB8IE1JSV9DTlRMX0FVVE87Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSk7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGtzODk5NW1fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsKLQkKLS8vCXByaW50aygia3M4OTk1bV9yZXNldFxuIik7Ci0JbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIG1paV9jb250cm9sIHwgTUlJX0NOVExfUkVTRVQpOwotCW1kZWxheSgxKTsKLQlmb3IgKHRpbWVvdXQgPSAxMDA7IHRpbWVvdXQgPiAwOyAtLXRpbWVvdXQpIHsKLQkJbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCQlpZiAoKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpID09IDApCi0JCQlicmVhazsKLQkJbWRlbGF5KDEpOwotCX0KLQlpZiAobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIFBIWSByZXNldCB0aW1lb3V0ICFcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBrczg5OTVtX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIHUxNiAqbGluaywgdTE2ICpzcGVlZCkKLXsKLQl1MTYgbWlpX2RhdGE7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXA7Ci0KLQlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgImtzODk5NW1fc3RhdHVzIGVycm9yOiBOVUxMIGRldlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0KLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCWlmIChtaWlfZGF0YSAmIE1JSV9TVEFUX0xJTkspIHsKLQkJKmxpbmsgPSAxOwotCQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9BVVhfQ05UUkwpOwotCQlpZiAobWlpX2RhdGEgJiBNSUlfQVVYXzEwMCkgewotCQkJaWYgKG1paV9kYXRhICYgTUlJX0FVWF9GRFgpIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJfQotCQl9Ci0JCWVsc2UgIHsJCQkJCQkJCQkJCQotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOwotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOwotCQl9Ci0KLQl9Ci0JZWxzZSB7Ci0JCSpsaW5rID0gMDsKLQkJKnNwZWVkID0gMDsKLQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1zbXNjXzgzQzE4NV9pbml0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JczE2IGRhdGE7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJzbXNjXzgzQzE4NV9pbml0XG4iKTsKLQotCS8qIFN0b3AgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEgJiB+TUlJX0NOVExfQVVUTyk7Ci0KLQkvKiBTZXQgYWR2ZXJ0aXNlbWVudCB0byAxMC8xMDAgYW5kIEhhbGYvRnVsbCBkdXBsZXgKLQkgKiAoZnVsbCBjYXBhYmlsaXRpZXMpICovCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYpOwotCWRhdGEgfD0gTUlJX05XQVlfVFggfCBNSUlfTldBWV9UWF9GRFggfCBNSUlfTldBWV9UX0ZEWCB8IE1JSV9OV0FZX1Q7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYsIGRhdGEpOwotCQotCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCWRhdGEgfD0gTUlJX0NOVExfUlNUX0FVVE8gfCBNSUlfQ05UTF9BVVRPOwotCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSk7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgZHVtcF9taWkoZGV2LCBwaHlfYWRkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotc21zY184M0MxODVfcmVzZXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlzMTYgbWlpX2NvbnRyb2wsIHRpbWVvdXQ7Ci0JCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygic21zY184M0MxODVfcmVzZXRcbiIpOwotCi0JbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIG1paV9jb250cm9sIHwgTUlJX0NOVExfUkVTRVQpOwotCW1kZWxheSgxKTsKLQlmb3IgKHRpbWVvdXQgPSAxMDA7IHRpbWVvdXQgPiAwOyAtLXRpbWVvdXQpIHsKLQkJbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCQlpZiAoKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpID09IDApCi0JCQlicmVhazsKLQkJbWRlbGF5KDEpOwotCX0KLQlpZiAobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIFBIWSByZXNldCB0aW1lb3V0ICFcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCAKLXNtc2NfODNDMTg1X3N0YXR1cyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpCi17Ci0JdTE2IG1paV9kYXRhOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOwotCi0JaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzbXNjXzgzQzE4NV9zdGF0dXMgZXJyb3I6IE5VTEwgZGV2XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwotCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX1NUQVRVUyk7Ci0KLQlpZiAobWlpX2RhdGEgJiBNSUlfU1RBVF9MSU5LKSB7Ci0JCSpsaW5rID0gMTsKLQkJbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCAweDFmKTsKLQkJaWYgKG1paV9kYXRhICYgKDE8PDMpKSB7Ci0JCQlpZiAobWlpX2RhdGEgJiAoMTw8NCkpIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOwotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOwotCQl9Ci0JfQotCWVsc2UgewotCQkqbGluayA9IDA7Ci0JCSpzcGVlZCA9IDA7Ci0JCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfVU5LTk9XTjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi1pbnQgc3R1Yl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQkvL3ByaW50aygiUEhZIHN0dWJfaW5pdFxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzdHViX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQkvL3ByaW50aygiUEhZIHN0dWJfcmVzZXRcbiIpOwotCXJldHVybiAwOwotfQotCi1pbnQgCi1zdHViX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIHUxNiAqbGluaywgdTE2ICpzcGVlZCkKLXsKLQkvL3ByaW50aygiUEhZIHN0dWJfc3RhdHVzXG4iKTsKLQkqbGluayA9IDE7Ci0JLyogaG1tbSwgcmV2aXNpdCAqLwotCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOwotCXJldHVybiAwOwotfQorI2lmIGRlZmluZWQoQVUxWFhYX1BIWTBfQlVTSUQpICYmIChBVTFYWFhfUEhZMF9CVVNJRCA+IDApCisjIGVycm9yIE1BQzAtYXNzb2NpYXRlZCBQSFkgYXR0YWNoZWQgMm5kIE1BQ3MgTUlJIGJ1cyBub3Qgc3VwcG9ydGVkIHlldAogI2VuZGlmCiAKLXN0cnVjdCBwaHlfb3BzIGJjbV81MjAxX29wcyA9IHsKLQliY21fNTIwMV9pbml0LAotCWJjbV81MjAxX3Jlc2V0LAotCWJjbV81MjAxX3N0YXR1cywKLX07Ci0KLXN0cnVjdCBwaHlfb3BzIGFtNzljODc0X29wcyA9IHsKLQlhbTc5Yzg3NF9pbml0LAotCWFtNzljODc0X3Jlc2V0LAotCWFtNzljODc0X3N0YXR1cywKLX07Ci0KLXN0cnVjdCBwaHlfb3BzIGFtNzljOTAxX29wcyA9IHsKLQlhbTc5YzkwMV9pbml0LAotCWFtNzljOTAxX3Jlc2V0LAotCWFtNzljOTAxX3N0YXR1cywKLX07Ci0KLXN0cnVjdCBwaHlfb3BzIGxzaV84MDIyN19vcHMgPSB7IAotCWxzaV84MDIyN19pbml0LAotCWxzaV84MDIyN19yZXNldCwKLQlsc2lfODAyMjdfc3RhdHVzLAotfTsKLQotc3RydWN0IHBoeV9vcHMgbHh0OTcxYV9vcHMgPSB7IAotCWx4dDk3MWFfaW5pdCwKLQlseHQ5NzFhX3Jlc2V0LAotCWx4dDk3MWFfc3RhdHVzLAotfTsKLQotc3RydWN0IHBoeV9vcHMga3M4OTk1bV9vcHMgPSB7Ci0Ja3M4OTk1bV9pbml0LAotCWtzODk5NW1fcmVzZXQsCi0Ja3M4OTk1bV9zdGF0dXMsCi19OwotCi1zdHJ1Y3QgcGh5X29wcyBzbXNjXzgzQzE4NV9vcHMgPSB7Ci0Jc21zY184M0MxODVfaW5pdCwKLQlzbXNjXzgzQzE4NV9yZXNldCwKLQlzbXNjXzgzQzE4NV9zdGF0dXMsCi19OwotCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLXN0cnVjdCBwaHlfb3BzIHN0dWJfb3BzID0gewotCXN0dWJfaW5pdCwKLQlzdHViX3Jlc2V0LAotCXN0dWJfc3RhdHVzLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IG1paV9jaGlwX2luZm8gewotCWNvbnN0IGNoYXIgKiBuYW1lOwotCXUxNiBwaHlfaWQwOwotCXUxNiBwaHlfaWQxOwotCXN0cnVjdCBwaHlfb3BzICpwaHlfb3BzOwkKLQlpbnQgZHVhbF9waHk7Ci19IG1paV9jaGlwX3RhYmxlW10gPSB7Ci0JeyJCcm9hZGNvbSBCQ001MjAxIDEwLzEwMCBCYXNlVCBQSFkiLDB4MDA0MCwweDYyMTIsICZiY21fNTIwMV9vcHMsMH0sCi0JeyJCcm9hZGNvbSBCQ001MjIxIDEwLzEwMCBCYXNlVCBQSFkiLDB4MDA0MCwweDYxZTQsICZiY21fNTIwMV9vcHMsMH0sCi0JeyJCcm9hZGNvbSBCQ001MjIyIDEwLzEwMCBCYXNlVCBQSFkiLDB4MDA0MCwweDYzMjIsICZiY21fNTIwMV9vcHMsMX0sCi0JeyJOUyBEUDgzODQ3IFBIWSIsIDB4MjAwMCwgMHg1YzMwLCAmYmNtXzUyMDFfb3BzICwwfSwKLQl7IkFNRCA3OUM5MDEgSG9tZVBOQSBQSFkiLDB4MDAwMCwweDM1YzgsICZhbTc5YzkwMV9vcHMsMH0sCi0JeyJBTUQgNzlDODc0IDEwLzEwMCBCYXNlVCBQSFkiLDB4MDAyMiwweDU2MWIsICZhbTc5Yzg3NF9vcHMsMH0sCi0JeyJMU0kgODAyMjcgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDE2LDB4Zjg0MCwgJmxzaV84MDIyN19vcHMsMH0sCi0JeyJJbnRlbCBMWFQ5NzFBIER1YWwgU3BlZWQgUEhZIiwweDAwMTMsMHg3OGUyLCAmbHh0OTcxYV9vcHMsMH0sCi0JeyJLZW5kaW4gS1M4OTk1TSAxMC8xMDAgQmFzZVQgUEhZIiwweDAwMjIsMHgxNDUwLCAma3M4OTk1bV9vcHMsMH0sCi0JeyJTTVNDIExBTjgzQzE4NSAxMC8xMDAgQmFzZVQgUEhZIiwweDAwMDcsMHhjMGEzLCAmc21zY184M0MxODVfb3BzLDB9LAotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi0JeyJTdHViIiwgMHgxMjM0LCAweDU2NzgsICZzdHViX29wcyB9LAotI2VuZGlmCi0JezAsfSwKLX07Ci0KLXN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcpCisvKgorICogTUlJIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCBpbnQgcmVnKQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0Jdm9sYXRpbGUgdTMyICptaWlfY29udHJvbF9yZWc7Ci0Jdm9sYXRpbGUgdTMyICptaWlfZGF0YV9yZWc7CisJdm9sYXRpbGUgdTMyICpjb25zdCBtaWlfY29udHJvbF9yZWcgPSAmYXVwLT5tYWMtPm1paV9jb250cm9sOworCXZvbGF0aWxlIHUzMiAqY29uc3QgbWlpX2RhdGFfcmVnID0gJmF1cC0+bWFjLT5taWlfZGF0YTsKIAl1MzIgdGltZWRvdXQgPSAyMDsKIAl1MzIgbWlpX2NvbnRyb2w7CiAKLQkjaWZkZWYgQ09ORklHX0JDTTUyMjJfRFVBTF9QSFkKLQkvKiBGaXJzdCB0aW1lIHdlIHByb2JlLCBpdCdzIGZvciB0aGUgbWFjMCBwaHkuCi0JICogU2luY2Ugd2UgaGF2ZW4ndCBkZXRlcm1pbmVkIHlldCB0aGF0IHdlIGhhdmUgYSBkdWFsIHBoeSwKLQkgKiBhdXAtPm1paS0+bWlpX2NvbnRyb2xfcmVnIHdvbid0IGJlIHNldHVwIGFuZCB3ZSdsbAotCSAqIGRlZmF1bHQgdG8gdGhlIGVsc2Ugc3RhdGVtZW50LgotCSAqIEJ5IHRoZSB0aW1lIHdlIHByb2JlIGZvciB0aGUgbWFjMSBwaHksIHRoZSBtaWlfY29udHJvbF9yZWcKLQkgKiB3aWxsIGJlIHNldHVwIHRvIGJlIHRoZSBhZGRyZXNzIG9mIHRoZSBtYWMwIHBoeSBjb250cm9sIHNpbmNlCi0JICogYm90aCBwaHlzIGFyZSBjb250cm9sbGVkIHRocm91Z2ggbWFjMC4KLQkgKi8KLQlpZiAoYXVwLT5taWkgJiYgYXVwLT5taWktPm1paV9jb250cm9sX3JlZykgewotCQltaWlfY29udHJvbF9yZWcgPSBhdXAtPm1paS0+bWlpX2NvbnRyb2xfcmVnOwotCQltaWlfZGF0YV9yZWcgPSBhdXAtPm1paS0+bWlpX2RhdGFfcmVnOwotCX0KLQllbHNlIGlmIChhdV9tYWNzWzBdLT5taWkgJiYgYXVfbWFjc1swXS0+bWlpLT5taWlfY29udHJvbF9yZWcpIHsKLQkJLyogYXNzdW1lIGJvdGggcGh5cyBhcmUgY29udHJvbGxlZCB0aHJvdWdoIG1hYzAgKi8KLQkJbWlpX2NvbnRyb2xfcmVnID0gYXVfbWFjc1swXS0+bWlpLT5taWlfY29udHJvbF9yZWc7Ci0JCW1paV9kYXRhX3JlZyA9IGF1X21hY3NbMF0tPm1paS0+bWlpX2RhdGFfcmVnOwotCX0KLQllbHNlIAotCSNlbmRpZgotCXsKLQkJLyogZGVmYXVsdCBjb250cm9sIGFuZCBkYXRhIHJlZyBhZGRyZXNzZXMgKi8KLQkJbWlpX2NvbnRyb2xfcmVnID0gJmF1cC0+bWFjLT5taWlfY29udHJvbDsKLQkJbWlpX2RhdGFfcmVnID0gJmF1cC0+bWFjLT5taWlfZGF0YTsKLQl9Ci0KIAl3aGlsZSAoKm1paV9jb250cm9sX3JlZyAmIE1BQ19NSUlfQlVTWSkgewogCQltZGVsYXkoMSk7CiAJCWlmICgtLXRpbWVkb3V0ID09IDApIHsKQEAgLTgzNSw3ICsyMTUsNyBAQAogCX0KIAogCW1paV9jb250cm9sID0gTUFDX1NFVF9NSUlfU0VMRUNUX1JFRyhyZWcpIHwgCi0JCU1BQ19TRVRfTUlJX1NFTEVDVF9QSFkocGh5X2lkKSB8IE1BQ19NSUlfUkVBRDsKKwkJTUFDX1NFVF9NSUlfU0VMRUNUX1BIWShwaHlfYWRkcikgfCBNQUNfTUlJX1JFQUQ7CiAKIAkqbWlpX2NvbnRyb2xfcmVnID0gbWlpX2NvbnRyb2w7CiAKQEAgLTg1MSwzMiArMjMxLDE0IEBACiAJcmV0dXJuIChpbnQpKm1paV9kYXRhX3JlZzsKIH0KIAotc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnLCB1MTYgdmFsdWUpCitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgaW50IHJlZywgdTE2IHZhbHVlKQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0Jdm9sYXRpbGUgdTMyICptaWlfY29udHJvbF9yZWc7Ci0Jdm9sYXRpbGUgdTMyICptaWlfZGF0YV9yZWc7CisJdm9sYXRpbGUgdTMyICpjb25zdCBtaWlfY29udHJvbF9yZWcgPSAmYXVwLT5tYWMtPm1paV9jb250cm9sOworCXZvbGF0aWxlIHUzMiAqY29uc3QgbWlpX2RhdGFfcmVnID0gJmF1cC0+bWFjLT5taWlfZGF0YTsKIAl1MzIgdGltZWRvdXQgPSAyMDsKIAl1MzIgbWlpX2NvbnRyb2w7CiAKLQkjaWZkZWYgQ09ORklHX0JDTTUyMjJfRFVBTF9QSFkKLQlpZiAoYXVwLT5taWkgJiYgYXVwLT5taWktPm1paV9jb250cm9sX3JlZykgewotCQltaWlfY29udHJvbF9yZWcgPSBhdXAtPm1paS0+bWlpX2NvbnRyb2xfcmVnOwotCQltaWlfZGF0YV9yZWcgPSBhdXAtPm1paS0+bWlpX2RhdGFfcmVnOwotCX0KLQllbHNlIGlmIChhdV9tYWNzWzBdLT5taWkgJiYgYXVfbWFjc1swXS0+bWlpLT5taWlfY29udHJvbF9yZWcpIHsKLQkJLyogYXNzdW1lIGJvdGggcGh5cyBhcmUgY29udHJvbGxlZCB0aHJvdWdoIG1hYzAgKi8KLQkJbWlpX2NvbnRyb2xfcmVnID0gYXVfbWFjc1swXS0+bWlpLT5taWlfY29udHJvbF9yZWc7Ci0JCW1paV9kYXRhX3JlZyA9IGF1X21hY3NbMF0tPm1paS0+bWlpX2RhdGFfcmVnOwotCX0KLQllbHNlIAotCSNlbmRpZgotCXsKLQkJLyogZGVmYXVsdCBjb250cm9sIGFuZCBkYXRhIHJlZyBhZGRyZXNzZXMgKi8KLQkJbWlpX2NvbnRyb2xfcmVnID0gJmF1cC0+bWFjLT5taWlfY29udHJvbDsKLQkJbWlpX2RhdGFfcmVnID0gJmF1cC0+bWFjLT5taWlfZGF0YTsKLQl9Ci0KIAl3aGlsZSAoKm1paV9jb250cm9sX3JlZyAmIE1BQ19NSUlfQlVTWSkgewogCQltZGVsYXkoMSk7CiAJCWlmICgtLXRpbWVkb3V0ID09IDApIHsKQEAgLTg4NywxNjUgKzI0OSwxNDUgQEAKIAl9CiAKIAltaWlfY29udHJvbCA9IE1BQ19TRVRfTUlJX1NFTEVDVF9SRUcocmVnKSB8IAotCQlNQUNfU0VUX01JSV9TRUxFQ1RfUEhZKHBoeV9pZCkgfCBNQUNfTUlJX1dSSVRFOworCQlNQUNfU0VUX01JSV9TRUxFQ1RfUEhZKHBoeV9hZGRyKSB8IE1BQ19NSUlfV1JJVEU7CiAKIAkqbWlpX2RhdGFfcmVnID0gdmFsdWU7CiAJKm1paV9jb250cm9sX3JlZyA9IG1paV9jb250cm9sOwogfQogCi0KLXN0YXRpYyB2b2lkIGR1bXBfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQpCitzdGF0aWMgaW50IG1kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0pCiB7Ci0JaW50IGksIHZhbDsKKwkvKiBXQVJOSU5HOiBidXMtPnBoeV9tYXBbcGh5X2FkZHJdLmF0dGFjaGVkX2RldiA9PSBkZXYgZG9lcworCSAqIF9OT1RfIGhvbGQgKGUuZy4gd2hlbiBQSFkgaXMgYWNjZXNzZWQgdGhyb3VnaCBvdGhlciBNQUMncyBNSUkgYnVzKSAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpjb25zdCBkZXYgPSBidXMtPnByaXY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCWlmICgodmFsID0gbWRpb19yZWFkKGRldiwgcGh5X2lkLCBpKSkgPj0gMCkKLQkJCXByaW50aygiJXM6IE1JSSBSZWcgJWQ9JXhcbiIsIGRldi0+bmFtZSwgaSwgdmFsKTsKLQl9Ci0JZm9yIChpID0gMTY7IGkgPCAyNTsgaSsrKSB7Ci0JCWlmICgodmFsID0gbWRpb19yZWFkKGRldiwgcGh5X2lkLCBpKSkgPj0gMCkKLQkJCXByaW50aygiJXM6IE1JSSBSZWcgJWQ9JXhcbiIsIGRldi0+bmFtZSwgaSwgdmFsKTsKLQl9CisJZW5hYmxlX21hYyhkZXYsIDApOyAvKiBtYWtlIHN1cmUgdGhlIE1BQyBhc3NvY2lhdGVkIHdpdGggdGhpcworCQkJICAgICAqIG1paV9idXMgaXMgZW5hYmxlZCAqLworCXJldHVybiBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgcmVnbnVtKTsKIH0KIAotc3RhdGljIGludCBtaWlfcHJvYmUgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBtZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwKKwkJCSB1MTYgdmFsdWUpCiB7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqY29uc3QgZGV2ID0gYnVzLT5wcml2OworCisJZW5hYmxlX21hYyhkZXYsIDApOyAvKiBtYWtlIHN1cmUgdGhlIE1BQyBhc3NvY2lhdGVkIHdpdGggdGhpcworCQkJICAgICAqIG1paV9idXMgaXMgZW5hYmxlZCAqLworCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgcmVnbnVtLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpjb25zdCBkZXYgPSBidXMtPnByaXY7CisKKwllbmFibGVfbWFjKGRldiwgMCk7IC8qIG1ha2Ugc3VyZSB0aGUgTUFDIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisJCQkgICAgICogbWlpX2J1cyBpcyBlbmFibGVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlpX3Byb2JlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CisKKyNpZiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykKKwlCVUdfT04oYXVwLT5tYWNfaWQgPCAwIHx8IGF1cC0+bWFjX2lkID4gMSk7CisKKwlpZihhdXAtPm1hY19pZCA9PSAwKSB7IC8qIGdldCBQSFkwICovCisjIGlmIGRlZmluZWQoQVUxWFhYX1BIWTBfQUREUikKKwkJcGh5ZGV2ID0gYXVfbWFjc1tBVTFYWFhfUEhZMF9CVVNJRF0tPm1paV9idXMucGh5X21hcFtBVTFYWFhfUEhZMF9BRERSXTsKKyMgZWxzZQorCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKKwkJCWRldi0+bmFtZSk7CisJCXJldHVybiAwOworIyBlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFkwX0FERFIpICovCisJfSBlbHNlIGlmIChhdXAtPm1hY19pZCA9PSAxKSB7IC8qIGdldCBQSFkxICovCisjIGlmIGRlZmluZWQoQVUxWFhYX1BIWTFfQUREUikKKwkJcGh5ZGV2ID0gYXVfbWFjc1tBVTFYWFhfUEhZMV9CVVNJRF0tPm1paV9idXMucGh5X21hcFtBVTFYWFhfUEhZMV9BRERSXTsKKyMgZWxzZQorCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKKwkJCWRldi0+bmFtZSk7CisJCXJldHVybiAwOworIyBlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFkxX0FERFIpICovCisJfQorCisjZWxzZSAvKiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykgKi8KIAlpbnQgcGh5X2FkZHI7Ci0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLQlpbnQgcGh5X2ZvdW5kPTA7Ci0jZW5kaWYKIAotCS8qIHNlYXJjaCBmb3IgdG90YWwgb2YgMzIgcG9zc2libGUgbWlpIHBoeSBhZGRyZXNzZXMgKi8KLQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCAzMjsgcGh5X2FkZHIrKykgewotCQl1MTYgbWlpX3N0YXR1czsKLQkJdTE2IHBoeV9pZDAsIHBoeV9pZDE7Ci0JCWludCBpOwotCi0JCSNpZmRlZiBDT05GSUdfQkNNNTIyMl9EVUFMX1BIWQotCQkvKiBNYXNrIHRoZSBhbHJlYWR5IGZvdW5kIHBoeSwgdHJ5IG5leHQgb25lICovCi0JCWlmIChhdV9tYWNzWzBdLT5taWkgJiYgYXVfbWFjc1swXS0+bWlpLT5taWlfY29udHJvbF9yZWcpIHsKLQkJCWlmIChhdV9tYWNzWzBdLT5waHlfYWRkciA9PSBwaHlfYWRkcikKLQkJCQljb250aW51ZTsKKwkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIFBIWSBvbiB0aGUgY3VycmVudCBNQUMncyBNSUkgYnVzICovCisJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKQorCQlpZiAoYXVwLT5taWlfYnVzLnBoeV9tYXBbcGh5X2FkZHJdKSB7CisJCQlwaHlkZXYgPSBhdXAtPm1paV9idXMucGh5X21hcFtwaHlfYWRkcl07CisjIGlmICFkZWZpbmVkKEFVMVhYWF9QSFlfU0VBUkNIX0hJR0hFU1RfQUREUikKKwkJCWJyZWFrOyAvKiBicmVhayBvdXQgd2l0aCBmaXJzdCBvbmUgZm91bmQgKi8KKyMgZW5kaWYKIAkJfQotCQkjZW5kaWYKIAotCQltaWlfc3RhdHVzID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCQlpZiAobWlpX3N0YXR1cyA9PSAweGZmZmYgfHwgbWlpX3N0YXR1cyA9PSAweDAwMDApCi0JCQkvKiB0aGUgbWlpIGlzIG5vdCBhY2Nlc3NhYmxlLCB0cnkgbmV4dCBvbmUgKi8KLQkJCWNvbnRpbnVlOworIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX1NFQVJDSF9PTl9NQUMwKQorCS8qIHRyeSBoYXJkZXIgdG8gZmluZCBhIFBIWSAqLworCWlmICghcGh5ZGV2ICYmIChhdXAtPm1hY19pZCA9PSAxKSkgeworCQkvKiBubyBQSFkgZm91bmQsIG1heWJlIHdlIGhhdmUgYSBkdWFsIFBIWT8gKi8KKwkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjogbm8gUEhZIGZvdW5kIG9uIE1BQzEsICIKKwkJCSJsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMwLi4uXG4iKTsKIAotCQlwaHlfaWQwID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9QSFlfSUQwKTsKLQkJcGh5X2lkMSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfUEhZX0lEMSk7CisJCUJVR19PTighYXVfbWFjc1swXSk7CiAKLQkJLyogc2VhcmNoIG91ciBtaWkgdGFibGUgZm9yIHRoZSBjdXJyZW50IG1paSAqLyAKLQkJZm9yIChpID0gMDsgbWlpX2NoaXBfdGFibGVbaV0ucGh5X2lkMTsgaSsrKSB7Ci0JCQlpZiAocGh5X2lkMCA9PSBtaWlfY2hpcF90YWJsZVtpXS5waHlfaWQwICYmCi0JCQkgICAgcGh5X2lkMSA9PSBtaWlfY2hpcF90YWJsZVtpXS5waHlfaWQxKSB7Ci0JCQkJc3RydWN0IG1paV9waHkgKiBtaWlfcGh5ID0gYXVwLT5taWk7CisJCS8qIGZpbmQgdGhlIGZpcnN0IChsb3dlc3QgYWRkcmVzcykgbm9uLWF0dGFjaGVkIFBIWSBvbgorCQkgKiB0aGUgTUFDMCBNSUkgYnVzICovCisJCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykgeworCQkJc3RydWN0IHBoeV9kZXZpY2UgKmNvbnN0IHRtcF9waHlkZXYgPQorCQkJCWF1X21hY3NbMF0tPm1paV9idXMucGh5X21hcFtwaHlfYWRkcl07CiAKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgYXQgcGh5IGFkZHJlc3MgJWRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbWlpX2NoaXBfdGFibGVbaV0ubmFtZSwgCi0JCQkJICAgICAgIHBoeV9hZGRyKTsKLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwotCQkJCXBoeV9mb3VuZCA9IDE7Ci0jZW5kaWYKLQkJCQltaWlfcGh5LT5jaGlwX2luZm8gPSBtaWlfY2hpcF90YWJsZStpOwotCQkJCWF1cC0+cGh5X2FkZHIgPSBwaHlfYWRkcjsKLQkJCQlhdXAtPndhbnRfYXV0b25lZyA9IDE7Ci0JCQkJYXVwLT5waHlfb3BzID0gbWlpX2NoaXBfdGFibGVbaV0ucGh5X29wczsKLQkJCQlhdXAtPnBoeV9vcHMtPnBoeV9pbml0KGRldixwaHlfYWRkcik7CisJCQlpZiAoIXRtcF9waHlkZXYpCisJCQkJY29udGludWU7IC8qIG5vIFBIWSBoZXJlLi4uICovCiAKLQkJCQkvLyBDaGVjayBmb3IgZHVhbC1waHkgYW5kIHRoZW4gc3RvcmUgcmVxdWlyZWQgCi0JCQkJLy8gdmFsdWVzIGFuZCBzZXQgaW5kaWNhdG9ycy4gV2UgbmVlZCB0byBkbyAKLQkJCQkvLyB0aGlzIG5vdyBzaW5jZSBtZGlvX3tyZWFkLHdyaXRlfSBuZWVkIHRoZSAKLQkJCQkvLyBjb250cm9sIGFuZCBkYXRhIHJlZ2lzdGVyIGFkZHJlc3Nlcy4KLQkJCQkjaWZkZWYgQ09ORklHX0JDTTUyMjJfRFVBTF9QSFkKLQkJCQlpZiAoIG1paV9jaGlwX3RhYmxlW2ldLmR1YWxfcGh5KSB7CisJCQlpZiAodG1wX3BoeWRldi0+YXR0YWNoZWRfZGV2KQorCQkJCWNvbnRpbnVlOyAvKiBhbHJlYWR5IGNsYWltZWQgYnkgTUFDMCAqLwogCi0JCQkJCS8qIGFzc3VtZSBib3RoIHBoeXMgYXJlIGNvbnRyb2xsZWQgCi0JCQkJCSAqIHRocm91Z2ggTUFDMC4gQm9hcmQgc3BlY2lmaWM/ICovCi0JCQkJCQotCQkJCQkvKiBzYW5pdHkgY2hlY2sgKi8KLQkJCQkJaWYgKCFhdV9tYWNzWzBdIHx8ICFhdV9tYWNzWzBdLT5taWkpCi0JCQkJCQlyZXR1cm4gLTE7Ci0JCQkJCWF1cC0+bWlpLT5taWlfY29udHJvbF9yZWcgPSAodTMyICopCi0JCQkJCQkmYXVfbWFjc1swXS0+bWFjLT5taWlfY29udHJvbDsKLQkJCQkJYXVwLT5taWktPm1paV9kYXRhX3JlZyA9ICh1MzIgKikKLQkJCQkJCSZhdV9tYWNzWzBdLT5tYWMtPm1paV9kYXRhOwotCQkJCX0KLQkJCQkjZW5kaWYKLQkJCQlnb3RvIGZvdW5kOwotCQkJfQorCQkJcGh5ZGV2ID0gdG1wX3BoeWRldjsKKwkJCWJyZWFrOyAvKiBmb3VuZCBpdCAqLwogCQl9CiAJfQotZm91bmQ6CisjIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTFfU0VBUkNIX09USEVSX0JVUykgKi8KIAotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi0JLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0Y2gKLQkgICBUaGUgc2Vjb25kIE1BQyBkb2Vzbid0IHNlZSBhIFBIWSBjb25uZWN0ZWQuLi4gc28gd2UgbmVlZCB0bwotCSAgIHRyaWNrIGl0IGludG8gdGhpbmtpbmcgd2UgaGF2ZSBvbmUuCi0JCQotCSAgIElmIHRoaXMga2VybmVsIGlzIHJ1biBvbiBhbm90aGVyIEF1MTUwMCBkZXZlbG9wbWVudCBib2FyZAotCSAgIHRoZSBzdHViIHdpbGwgYmUgZm91bmQgYXMgd2VsbCBhcyB0aGUgYWN0dWFsIFBIWS4gSG93ZXZlciwKLQkgICB0aGUgbGFzdCBmb3VuZCBQSFkgd2lsbCBiZSB1c2VkLi4uIHVzdWFsbHkgYXQgQWRkciAzMSAoRGIxNTAwKS4JCi0JKi8KLQlpZiAoICghcGh5X2ZvdW5kKSApCi0JewotCQl1MTYgcGh5X2lkMCwgcGh5X2lkMTsKLQkJaW50IGk7Ci0KLQkJcGh5X2lkMCA9IDB4MTIzNDsKLQkJcGh5X2lkMSA9IDB4NTY3ODsKLQotCQkvKiBzZWFyY2ggb3VyIG1paSB0YWJsZSBmb3IgdGhlIGN1cnJlbnQgbWlpICovIAotCQlmb3IgKGkgPSAwOyBtaWlfY2hpcF90YWJsZVtpXS5waHlfaWQxOyBpKyspIHsKLQkJCWlmIChwaHlfaWQwID09IG1paV9jaGlwX3RhYmxlW2ldLnBoeV9pZDAgJiYKLQkJCSAgICBwaHlfaWQxID09IG1paV9jaGlwX3RhYmxlW2ldLnBoeV9pZDEpIHsKLQkJCQlzdHJ1Y3QgbWlpX3BoeSAqIG1paV9waHk7Ci0KLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgYXQgcGh5IGFkZHJlc3MgJWRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbWlpX2NoaXBfdGFibGVbaV0ubmFtZSwgCi0JCQkJICAgICAgIHBoeV9hZGRyKTsKLQkJCQltaWlfcGh5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1paV9waHkpLCAKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmIChtaWlfcGh5KSB7Ci0JCQkJCW1paV9waHktPmNoaXBfaW5mbyA9IG1paV9jaGlwX3RhYmxlK2k7Ci0JCQkJCWF1cC0+cGh5X2FkZHIgPSBwaHlfYWRkcjsKLQkJCQkJbWlpX3BoeS0+bmV4dCA9IGF1cC0+bWlpOwotCQkJCQlhdXAtPnBoeV9vcHMgPSAKLQkJCQkJCW1paV9jaGlwX3RhYmxlW2ldLnBoeV9vcHM7Ci0JCQkJCWF1cC0+bWlpID0gbWlpX3BoeTsKLQkJCQkJYXVwLT5waHlfb3BzLT5waHlfaW5pdChkZXYscGh5X2FkZHIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIAotCQkJCQkJCWRldi0+bmFtZSk7Ci0JCQkJCXJldHVybiAtMTsKLQkJCQl9Ci0JCQkJbWlpX3BoeS0+Y2hpcF9pbmZvID0gbWlpX2NoaXBfdGFibGUraTsKLQkJCQlhdXAtPnBoeV9hZGRyID0gcGh5X2FkZHI7Ci0JCQkJYXVwLT5waHlfb3BzID0gbWlpX2NoaXBfdGFibGVbaV0ucGh5X29wczsKLQkJCQlhdXAtPnBoeV9vcHMtPnBoeV9pbml0KGRldixwaHlfYWRkcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGF1cC0+bWFjX2lkID09IDApIHsKLQkJLyogdGhlIEJvc3BvcnVzIHBoeSByZXNwb25kcyB0byBhZGRyZXNzZXMgMC01IGJ1dCAKLQkJICogNSBpcyB0aGUgY29ycmVjdCBvbmUuCi0JCSAqLwotCQlhdXAtPnBoeV9hZGRyID0gNTsKLQl9Ci0jZW5kaWYKLQotCWlmIChhdXAtPm1paS0+Y2hpcF9pbmZvID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQXUxeCBObyBrbm93biBNSUkgdHJhbnNjZWl2ZXJzIGZvdW5kIVxuIiwKLQkJCQlkZXYtPm5hbWUpOworI2VuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKSAqLworCWlmICghcGh5ZGV2KSB7CisJCXByaW50ayAoS0VSTl9FUlIgRFJWX05BTUUgIjolczogbm8gUEhZIGZvdW5kXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVzaW5nICVzIGFzIGRlZmF1bHRcbiIsIAotCQkJZGV2LT5uYW1lLCBhdXAtPm1paS0+Y2hpcF9pbmZvLT5uYW1lKTsKKwkvKiBub3cgd2UgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSBwcm9wZXIgcGh5ZGV2LCB0byBhdHRhY2ggdG8uLi4gKi8KKwlCVUdfT04oIXBoeWRldik7CisJQlVHX09OKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLCAmYXUxMDAwX2FkanVzdF9saW5rLCAwKTsKKworCWlmIChJU19FUlIocGh5ZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5ZGV2KTsKKwl9CisKKwkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLworCXBoeWRldi0+c3VwcG9ydGVkICY9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmCisJCQkgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKKwkJCSAgICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKKwkJCSAgICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwKKwkJCSAgICAgIHwgU1VQUE9SVEVEX0F1dG9uZWcKKwkJCSAgICAgIC8qIHwgU1VQUE9SVEVEX1BhdXNlIHwgU1VQUE9SVEVEX0FzeW1fUGF1c2UgKi8KKwkJCSAgICAgIHwgU1VQUE9SVEVEX01JSQorCQkJICAgICAgfCBTVVBQT1JURURfVFApOworCisJcGh5ZGV2LT5hZHZlcnRpc2luZyA9IHBoeWRldi0+c3VwcG9ydGVkOworCisJYXVwLT5vbGRfbGluayA9IDA7CisJYXVwLT5vbGRfc3BlZWQgPSAwOworCWF1cC0+b2xkX2R1cGxleCA9IC0xOworCWF1cC0+cGh5X2RldiA9IHBoeWRldjsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgorCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDk3LDM1ICs0MzksMzggQEAKIAlhdV9zeW5jX2RlbGF5KDEwKTsKIH0KIAotCi1zdGF0aWMgdm9pZCByZXNldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlX3Jlc2V0KQogewotCWludCBpOwotCXUzMiBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CiAKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldCBtYWMsIGF1cCAleFxuIiwgCi0JCQkJZGV2LT5uYW1lLCAodW5zaWduZWQpYXVwKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQlpZiAoYXVwLT50aW1lci5mdW5jdGlvbiA9PSAmYXUxMDAwX3RpbWVyKSB7LyogY2hlY2sgaWYgdGltZXIgaW5pdHRlZCAqLwotCQlkZWxfdGltZXIoJmF1cC0+dGltZXIpOwotCX0KIAotCWhhcmRfc3RvcChkZXYpOwotCSNpZmRlZiBDT05GSUdfQkNNNTIyMl9EVUFMX1BIWQotCWlmIChhdXAtPm1hY19pZCAhPSAwKSB7Ci0JI2VuZGlmCi0JCS8qIElmIEJDTTUyMjIsIHdlIGNhbid0IGxlYXZlIE1BQzAgaW4gcmVzZXQgYmVjYXVzZSB0aGVuIAotCQkgKiB3ZSBjYW4ndCBhY2Nlc3MgdGhlIGR1YWwgcGh5IGZvciBFVEgxICovCisJaWYoZm9yY2VfcmVzZXQgfHwgKCFhdXAtPm1hY19lbmFibGVkKSkgewogCQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5BQkxFOwogCQlhdV9zeW5jX2RlbGF5KDIpOwotCQkqYXVwLT5lbmFibGUgPSAwOworCQkqYXVwLT5lbmFibGUgPSAoTUFDX0VOX1JFU0VUMCB8IE1BQ19FTl9SRVNFVDEgfCBNQUNfRU5fUkVTRVQyCisJCQkJfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFKTsKIAkJYXVfc3luY19kZWxheSgyKTsKLQkjaWZkZWYgQ09ORklHX0JDTTUyMjJfRFVBTF9QSFkKKworCQlhdXAtPm1hY19lbmFibGVkID0gMTsKIAl9Ci0JI2VuZGlmCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfbWFjX3VubG9ja2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlpbnQgaTsKKworCWhhcmRfc3RvcChkZXYpOworCisJKmF1cC0+ZW5hYmxlID0gTUFDX0VOX0NMT0NLX0VOQUJMRTsKKwlhdV9zeW5jX2RlbGF5KDIpOworCSphdXAtPmVuYWJsZSA9IDA7CisJYXVfc3luY19kZWxheSgyKTsKKwogCWF1cC0+dHhfZnVsbCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykgewogCQkvKiByZXNldCBjb250cm9sIGJpdHMgKi8KQEAgLTExMzUsOSArNDgwLDI2IEBACiAJCS8qIHJlc2V0IGNvbnRyb2wgYml0cyAqLwogCQlhdXAtPnR4X2RtYV9yaW5nW2ldLT5idWZmX3N0YXQgJj0gfjB4ZjsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlhdXAtPm1hY19lbmFibGVkID0gMDsKKwogfQogCitzdGF0aWMgdm9pZCByZXNldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc2V0IG1hYywgYXVwICV4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQpYXVwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworfQogCiAvKiAKICAqIFNldHVwIHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCAicmluZ3MiLiAgVGhlc2UgcG9pbnRlcnMgYXJlIHRoZSBhZGRyZXNzZXMKQEAgLTExNjAsMTIgKzUyMiwyNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHsKLQlpbnQgcG9ydDsKIAl1MzIgYmFzZV9hZGRyOwogCXUzMiBtYWNlbl9hZGRyOwogCWludCBpcnE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLX0gaWZsaXN0WzJdOworfSBpZmxpc3RbMl0gPSB7CisjaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKKwl7QVUxMDAwX0VUSDBfQkFTRSwgQVUxMDAwX01BQzBfRU5BQkxFLCBBVTEwMDBfTUFDMF9ETUFfSU5UfSwKKwl7QVUxMDAwX0VUSDFfQkFTRSwgQVUxMDAwX01BQzFfRU5BQkxFLCBBVTEwMDBfTUFDMV9ETUFfSU5UfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKKwl7QVUxMTAwX0VUSDBfQkFTRSwgQVUxMTAwX01BQzBfRU5BQkxFLCBBVTExMDBfTUFDMF9ETUFfSU5UfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKKwl7QVUxNTAwX0VUSDBfQkFTRSwgQVUxNTAwX01BQzBfRU5BQkxFLCBBVTE1MDBfTUFDMF9ETUFfSU5UfSwKKwl7QVUxNTAwX0VUSDFfQkFTRSwgQVUxNTAwX01BQzFfRU5BQkxFLCBBVTE1MDBfTUFDMV9ETUFfSU5UfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKKwl7QVUxNTUwX0VUSDBfQkFTRSwgQVUxNTUwX01BQzBfRU5BQkxFLCBBVTE1NTBfTUFDMF9ETUFfSU5UfSwKKwl7QVUxNTUwX0VUSDFfQkFTRSwgQVUxNTUwX01BQzFfRU5BQkxFLCBBVTE1NTBfTUFDMV9ETUFfSU5UfQorI2VuZGlmCit9OwogCiBzdGF0aWMgaW50IG51bV9pZnM7CiAKQEAgLTExNzYsNTggKzU1MywxNCBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7CiAJaW50IG5pID0gKGludCkoKGF1X3JlYWRsKFNZU19QSU5GVU5DKSAmICh1MzIpKFNZU19QRl9OSTIpKSA+PiA0KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBpLCBmb3VuZF9vbmUgPSAwOwogCi0Jc3dpdGNoIChjLT5jcHV0eXBlKSB7Ci0jaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKLQljYXNlIENQVV9BVTEwMDA6Ci0JCW51bV9pZnMgPSAyIC0gbmk7Ci0JCWlmbGlzdFswXS5iYXNlX2FkZHIgPSBBVTEwMDBfRVRIMF9CQVNFOwotCQlpZmxpc3RbMV0uYmFzZV9hZGRyID0gQVUxMDAwX0VUSDFfQkFTRTsKLQkJaWZsaXN0WzBdLm1hY2VuX2FkZHIgPSBBVTEwMDBfTUFDMF9FTkFCTEU7Ci0JCWlmbGlzdFsxXS5tYWNlbl9hZGRyID0gQVUxMDAwX01BQzFfRU5BQkxFOwotCQlpZmxpc3RbMF0uaXJxID0gQVUxMDAwX01BQzBfRE1BX0lOVDsKLQkJaWZsaXN0WzFdLmlycSA9IEFVMTAwMF9NQUMxX0RNQV9JTlQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKLQljYXNlIENQVV9BVTExMDA6Ci0JCW51bV9pZnMgPSAxIC0gbmk7Ci0JCWlmbGlzdFswXS5iYXNlX2FkZHIgPSBBVTExMDBfRVRIMF9CQVNFOwotCQlpZmxpc3RbMF0ubWFjZW5fYWRkciA9IEFVMTEwMF9NQUMwX0VOQUJMRTsKLQkJaWZsaXN0WzBdLmlycSA9IEFVMTEwMF9NQUMwX0RNQV9JTlQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKLQljYXNlIENQVV9BVTE1MDA6Ci0JCW51bV9pZnMgPSAyIC0gbmk7Ci0JCWlmbGlzdFswXS5iYXNlX2FkZHIgPSBBVTE1MDBfRVRIMF9CQVNFOwotCQlpZmxpc3RbMV0uYmFzZV9hZGRyID0gQVUxNTAwX0VUSDFfQkFTRTsKLQkJaWZsaXN0WzBdLm1hY2VuX2FkZHIgPSBBVTE1MDBfTUFDMF9FTkFCTEU7Ci0JCWlmbGlzdFsxXS5tYWNlbl9hZGRyID0gQVUxNTAwX01BQzFfRU5BQkxFOwotCQlpZmxpc3RbMF0uaXJxID0gQVUxNTAwX01BQzBfRE1BX0lOVDsKLQkJaWZsaXN0WzFdLmlycSA9IEFVMTUwMF9NQUMxX0RNQV9JTlQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKLQljYXNlIENQVV9BVTE1NTA6Ci0JCW51bV9pZnMgPSAyIC0gbmk7Ci0JCWlmbGlzdFswXS5iYXNlX2FkZHIgPSBBVTE1NTBfRVRIMF9CQVNFOwotCQlpZmxpc3RbMV0uYmFzZV9hZGRyID0gQVUxNTUwX0VUSDFfQkFTRTsKLQkJaWZsaXN0WzBdLm1hY2VuX2FkZHIgPSBBVTE1NTBfTUFDMF9FTkFCTEU7Ci0JCWlmbGlzdFsxXS5tYWNlbl9hZGRyID0gQVUxNTUwX01BQzFfRU5BQkxFOwotCQlpZmxpc3RbMF0uaXJxID0gQVUxNTUwX01BQzBfRE1BX0lOVDsKLQkJaWZsaXN0WzFdLmlycSA9IEFVMTU1MF9NQUMxX0RNQV9JTlQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJbnVtX2lmcyA9IDA7Ci0JfQorCW51bV9pZnMgPSBOVU1fRVRIX0lOVEVSRkFDRVMgLSBuaTsKKwogCWZvcihpID0gMDsgaSA8IG51bV9pZnM7IGkrKykgewotCQlkZXYgPSBhdTEwMDBfcHJvYmUoaWZsaXN0W2ldLmJhc2VfYWRkciwgaWZsaXN0W2ldLmlycSwgaSk7CisJCWRldiA9IGF1MTAwMF9wcm9iZShpKTsKIAkJaWZsaXN0W2ldLmRldiA9IGRldjsKIAkJaWYgKGRldikKIAkJCWZvdW5kX29uZSsrOwpAQCAtMTIzNywxNzggKzU3MCwzMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF1MTAwMF9zZXR1cF9hbmVnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZHZlcnRpc2UpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5wcml2OwotCXUxNiBjdGwsIGFkdjsKLQotCS8qIFNldHVwIHN0YW5kYXJkIGFkdmVydGlzZSAqLwotCWFkdiA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOwotCWFkdiAmPSB+KEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfMTAwQkFTRTQpOwotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikKLQkJYWR2IHw9IEFEVkVSVElTRV8xMEhBTEY7Ci0JaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwRlVMTDsKLQlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7Ci0JaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKLQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOwotCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQURWRVJUSVNFLCBhZHYpOwotCi0JLyogU3RhcnQvUmVzdGFydCBhbmVnICovCi0JY3RsID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IpOwotCWN0bCB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKLQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IsIGN0bCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdTEwMDBfc2V0dXBfZm9yY2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzcGVlZCwgaW50IGZkKQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsKLQl1MTYgY3RsOwotCi0JY3RsID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IpOwotCWN0bCAmPSB+KEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwIHwgQk1DUl9BTkVOQUJMRSk7Ci0KLQkvKiBGaXJzdCByZXNldCB0aGUgUEhZICovCi0JbWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9CTUNSLCBjdGwgfCBCTUNSX1JFU0VUKTsKLQotCS8qIFNlbGVjdCBzcGVlZCAmIGR1cGxleCAqLwotCXN3aXRjaCAoc3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJCWJyZWFrOwotCQljYXNlIFNQRUVEXzEwMDoKLQkJCWN0bCB8PSBCTUNSX1NQRUVEMTAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwMDoKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoZmQgPT0gRFVQTEVYX0ZVTEwpCi0JCWN0bCB8PSBCTUNSX0ZVTExEUExYOwotCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgY3RsKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1hdTEwMDBfc3RhcnRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnByaXY7Ci0JdTMyIGFkdmVydGlzZTsKLQlpbnQgYXV0b25lZzsKLQlpbnQgZm9yY2VkX3NwZWVkOwotCWludCBmb3JjZWRfZHVwbGV4OwotCi0JLyogRGVmYXVsdCBhZHZlcnRpc2UgKi8KLQlhZHZlcnRpc2UgPSBHRU5NSUlfREVGQVVMVF9BRFZFUlRJU0U7Ci0JYXV0b25lZyA9IGF1cC0+d2FudF9hdXRvbmVnOwotCWZvcmNlZF9zcGVlZCA9IFNQRUVEXzEwMDsKLQlmb3JjZWRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0KLQkvKiBTZXR1cCBsaW5rIHBhcmFtZXRlcnMgKi8KLQlpZiAoY21kKSB7Ci0JCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKLQkJCWFkdmVydGlzZSA9IGNtZC0+YWR2ZXJ0aXNpbmc7Ci0JCQlhdXRvbmVnID0gMTsKLQkJfSBlbHNlIHsKLQkJCWF1dG9uZWcgPSAwOwotCi0JCQlmb3JjZWRfc3BlZWQgPSBjbWQtPnNwZWVkOwotCQkJZm9yY2VkX2R1cGxleCA9IGNtZC0+ZHVwbGV4OwotCQl9Ci0JfQotCi0JLyogQ29uZmlndXJlIFBIWSAmIHN0YXJ0IGFuZWcgKi8KLQlhdXAtPndhbnRfYXV0b25lZyA9IGF1dG9uZWc7Ci0JaWYgKGF1dG9uZWcpCi0JCWF1MTAwMF9zZXR1cF9hbmVnKGRldiwgYWR2ZXJ0aXNlKTsKLQllbHNlCi0JCWF1MTAwMF9zZXR1cF9mb3JjZWQoZGV2LCBmb3JjZWRfc3BlZWQsIGZvcmNlZF9kdXBsZXgpOwotCW1vZF90aW1lcigmYXVwLT50aW1lciwgamlmZmllcyArIEhaKTsKLX0KKy8qCisgKiBldGh0b29sIG9wZXJhdGlvbnMKKyAqLwogCiBzdGF0aWMgaW50IGF1MTAwMF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5wcml2OwotCXUxNiBsaW5rLCBzcGVlZDsKIAotCWNtZC0+c3VwcG9ydGVkID0gR0VOTUlJX0RFRkFVTFRfRkVBVFVSRVM7Ci0JY21kLT5hZHZlcnRpc2luZyA9IEdFTk1JSV9ERUZBVUxUX0FEVkVSVElTRTsKLQljbWQtPnBvcnQgPSBQT1JUX01JSTsKLQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQljbWQtPnBoeV9hZGRyZXNzID0gYXVwLT5waHlfYWRkcjsKLQlzcGluX2xvY2tfaXJxKCZhdXAtPmxvY2spOwotCWNtZC0+YXV0b25lZyA9IGF1cC0+d2FudF9hdXRvbmVnOwotCWF1cC0+cGh5X29wcy0+cGh5X3N0YXR1cyhkZXYsIGF1cC0+cGh5X2FkZHIsICZsaW5rLCAmc3BlZWQpOwotCWlmICgoc3BlZWQgPT0gSUZfUE9SVF8xMDBCQVNFVFgpIHx8IChzcGVlZCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkpCi0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7Ci0JZWxzZSBpZiAoc3BlZWQgPT0gSUZfUE9SVF8xMEJBU0VUKQotCQljbWQtPnNwZWVkID0gU1BFRURfMTA7Ci0JaWYgKGxpbmsgJiYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkpCi0JCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JZWxzZQotCQljbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwotCXNwaW5fdW5sb2NrX2lycSgmYXVwLT5sb2NrKTsKLQlyZXR1cm4gMDsKKwlpZiAoYXVwLT5waHlfZGV2KQorCQlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChhdXAtPnBoeV9kZXYsIGNtZCk7CisKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBhdTEwMDBfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCSBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnByaXY7Ci0JICB1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gR0VOTUlJX0RFRkFVTFRfRkVBVFVSRVM7Ci0KLQkgaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkgcmV0dXJuIC1FUEVSTTsKLQotCSBpZiAoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFICYmIGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpCi0JCSByZXR1cm4gLUVJTlZBTDsKLQkgaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJiBjbWQtPmFkdmVydGlzaW5nID09IDApCi0JCSByZXR1cm4gLUVJTlZBTDsKLQkgaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQotCQkgcmV0dXJuIC1FSU5WQUw7Ci0JIGlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKQotCQkgc3dpdGNoIChjbWQtPnNwZWVkKSB7Ci0JCSBjYXNlIFNQRUVEXzEwOgotCQkJIGlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRiAmJgotCQkJCSAoZmVhdHVyZXMgJiBTVVBQT1JURURfMTBiYXNlVF9IYWxmKSA9PSAwKQotCQkJCSByZXR1cm4gLUVJTlZBTDsKLQkJCSBpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgJiYKLQkJCQkgKGZlYXR1cmVzICYgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCkgPT0gMCkKLQkJCQkgcmV0dXJuIC1FSU5WQUw7Ci0JCQkgYnJlYWs7Ci0JCSBjYXNlIFNQRUVEXzEwMDoKLQkJCSBpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYgJiYKLQkJCQkgKGZlYXR1cmVzICYgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpID09IDApCi0JCQkJIHJldHVybiAtRUlOVkFMOwotCQkJIGlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCAmJgotCQkJCSAoZmVhdHVyZXMgJiBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkgPT0gMCkKLQkJCQkgcmV0dXJuIC1FSU5WQUw7Ci0JCQkgYnJlYWs7Ci0JCSBkZWZhdWx0OgotCQkJIHJldHVybiAtRUlOVkFMOwotCQkgfQotCSBlbHNlIGlmICgoZmVhdHVyZXMgJiBTVVBQT1JURURfQXV0b25lZykgPT0gMCkKLQkJIHJldHVybiAtRUlOVkFMOwotCi0JIHNwaW5fbG9ja19pcnEoJmF1cC0+bG9jayk7Ci0JIGF1MTAwMF9zdGFydF9saW5rKGRldiwgY21kKTsKLQkgc3Bpbl91bmxvY2tfaXJxKCZhdXAtPmxvY2spOwotCSByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdTEwMDBfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsKIAotCWlmICghYXVwLT53YW50X2F1dG9uZWcpCi0JCXJldHVybiAtRUlOVkFMOwotCXNwaW5fbG9ja19pcnEoJmF1cC0+bG9jayk7Ci0JYXUxMDAwX3N0YXJ0X2xpbmsoZGV2LCBOVUxMKTsKLQlzcGluX3VubG9ja19pcnEoJmF1cC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGF1cC0+cGh5X2RldikKKwkJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQoYXVwLT5waHlfZGV2LCBjbWQpOworCisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNDIzLDIxICs2MDksMTQgQEAKIAlpbmZvLT5yZWdkdW1wX2xlbiA9IDA7CiB9CiAKLXN0YXRpYyB1MzIgYXUxMDAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIG5ldGlmX2NhcnJpZXJfb2soZGV2KTsKLX0KLQogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBhdTEwMDBfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGF1MTAwMF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IGF1MTAwMF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gYXUxMDAwX2dldF9kcnZpbmZvLAotCS5ud2F5X3Jlc2V0ID0gYXUxMDAwX253YXlfcmVzZXQsCi0JLmdldF9saW5rID0gYXUxMDAwX2dldF9saW5rCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqCi1hdTEwMDBfcHJvYmUodTMyIGlvYWRkciwgaW50IGlycSwgaW50IHBvcnRfbnVtKQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogYXUxMDAwX3Byb2JlKGludCBwb3J0X251bSkKIHsKIAlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkID0gMDsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IE5VTEw7CkBAIC0xNDQ1LDEwNiArNjI0LDExNSBAQAogCWRiX2Rlc3RfdCAqcERCLCAqcERCZnJlZTsKIAljaGFyICpwbWFjLCAqYXJncHRyOwogCWNoYXIgZXRoYWRkcls2XTsKLQlpbnQgaSwgZXJyOworCWludCBpcnEsIGksIGVycjsKKwl1MzIgYmFzZSwgbWFjZW47CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihDUEhZU0FERFIoaW9hZGRyKSwgTUFDX0lPU0laRSwgIkF1MXgwMCBFTkVUIikpCisJaWYgKHBvcnRfbnVtID49IE5VTV9FVEhfSU5URVJGQUNFUykKKyAJCXJldHVybiBOVUxMOworCisJYmFzZSAgPSBDUEhZU0FERFIoaWZsaXN0W3BvcnRfbnVtXS5iYXNlX2FkZHIgKTsKKwltYWNlbiA9IENQSFlTQUREUihpZmxpc3RbcG9ydF9udW1dLm1hY2VuX2FkZHIpOworCWlycSA9IGlmbGlzdFtwb3J0X251bV0uaXJxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUsICJBdTF4MDAgRU5FVCIpIHx8CisJICAgICFyZXF1ZXN0X21lbV9yZWdpb24obWFjZW4sIDQsICJBdTF4MDAgRU5FVCIpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKSAKKwlpZiAodmVyc2lvbl9wcmludGVkKysgPT0gMCkKIAkJcHJpbnRrKCIlcyB2ZXJzaW9uICVzICVzXG4iLCBEUlZfTkFNRSwgRFJWX1ZFUlNJT04sIERSVl9BVVRIT1IpOwogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSkpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgImF1MTAwMCBldGg6IGFsbG9jX2V0aGVyZGV2IGZhaWxlZFxuIik7ICAKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iLCBEUlZfTkFNRSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQXUxeF9ldGggQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UgZXJyICVkXG4iLAotCQkJCWVycik7CisJaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgZXJyb3IgJWRcbiIsCisJCQkJRFJWX05BTUUsIGVycik7CiAJCWZyZWVfbmV0ZGV2KGRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXByaW50aygiJXM6IEF1MXggRXRoZXJuZXQgZm91bmQgYXQgMHgleCwgaXJxICVkXG4iLCAKLQkJCWRldi0+bmFtZSwgaW9hZGRyLCBpcnEpOworCXByaW50aygiJXM6IEF1MXh4MCBFdGhlcm5ldCBmb3VuZCBhdCAweCV4LCBpcnEgJWRcbiIsCisJCWRldi0+bmFtZSwgYmFzZSwgaXJxKTsKIAogCWF1cCA9IGRldi0+cHJpdjsKIAogCS8qIEFsbG9jYXRlIHRoZSBkYXRhIGJ1ZmZlcnMgKi8KIAkvKiBTbm9vcGluZyB3b3JrcyBmaW5lIHdpdGggZXRoIG9uIGFsbCBhdTF4eHggKi8KLQlhdXAtPnZhZGRyID0gKHUzMilkbWFfYWxsb2Nfbm9uY29oZXJlbnQoTlVMTCwKLQkJCU1BWF9CVUZfU0laRSAqIChOVU1fVFhfQlVGRlMrTlVNX1JYX0JVRkZTKSwKLQkJCSZhdXAtPmRtYV9hZGRyLAotCQkJMCk7CisJYXVwLT52YWRkciA9ICh1MzIpZG1hX2FsbG9jX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqCisJCQkJCQkoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKKwkJCQkJCSZhdXAtPmRtYV9hZGRyLAkwKTsKIAlpZiAoIWF1cC0+dmFkZHIpIHsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpb2FkZHIpLCBNQUNfSU9TSVpFKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKCBiYXNlLCBNQUNfSU9TSVpFKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLCA0KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyogYXVwLT5tYWMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTUFDJ3MgcmVnaXN0ZXJzICovCi0JYXVwLT5tYWMgPSAodm9sYXRpbGUgbWFjX3JlZ190ICopKCh1bnNpZ25lZCBsb25nKWlvYWRkcik7CisJYXVwLT5tYWMgPSAodm9sYXRpbGUgbWFjX3JlZ190ICopaWZsaXN0W3BvcnRfbnVtXS5iYXNlX2FkZHI7CisKIAkvKiBTZXR1cCBzb21lIHZhcmlhYmxlcyBmb3IgcXVpY2sgcmVnaXN0ZXIgYWRkcmVzcyBhY2Nlc3MgKi8KLQlpZiAoaW9hZGRyID09IGlmbGlzdFswXS5iYXNlX2FkZHIpCi0JewotCQkvKiBjaGVjayBlbnYgdmFyaWFibGVzIGZpcnN0ICovCi0JCWlmICghZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcikpIHsgCisJYXVwLT5lbmFibGUgPSAodm9sYXRpbGUgdTMyICopaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyOworCWF1cC0+bWFjX2lkID0gcG9ydF9udW07CisJYXVfbWFjc1twb3J0X251bV0gPSBhdXA7CisKKwlpZiAocG9ydF9udW0gPT0gMCkgeworCQkvKiBDaGVjayB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZpcnN0ICovCisJCWlmIChnZXRfZXRoZXJuZXRfYWRkcihldGhhZGRyKSA9PSAwKQogCQkJbWVtY3B5KGF1MTAwMF9tYWNfYWRkciwgZXRoYWRkciwgc2l6ZW9mKGF1MTAwMF9tYWNfYWRkcikpOwotCQl9IGVsc2UgeworCQllbHNlIHsKIAkJCS8qIENoZWNrIGNvbW1hbmQgbGluZSAqLwogCQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCQlpZiAoKHBtYWMgPSBzdHJzdHIoYXJncHRyLCAiZXRoYWRkcj0iKSkgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBtYWMgYWRkcmVzcyBmb3VuZFxuIiwgCi0JCQkJCQlkZXYtPm5hbWUpOwotCQkJCS8qIHVzZSB0aGUgaGFyZCBjb2RlZCBtYWMgYWRkcmVzc2VzICovCi0JCQl9IGVsc2UgeworCQkJaWYgKChwbWFjID0gc3Ryc3RyKGFyZ3B0ciwgImV0aGFkZHI9IikpID09IE5VTEwpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIE1BQyBhZGRyZXNzIGZvdW5kXG4iLAorCQkJCQkJIGRldi0+bmFtZSk7CisJCQkJLyogVXNlIHRoZSBoYXJkIGNvZGVkIE1BQyBhZGRyZXNzZXMgKi8KKwkJCWVsc2UgewogCQkJCXN0cjJlYWRkcihldGhhZGRyLCBwbWFjICsgc3RybGVuKCJldGhhZGRyPSIpKTsKIAkJCQltZW1jcHkoYXUxMDAwX21hY19hZGRyLCBldGhhZGRyLCAKLQkJCQkJCXNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKKwkJCQkgICAgICAgc2l6ZW9mKGF1MTAwMF9tYWNfYWRkcikpOwogCQkJfQogCQl9Ci0JCQlhdXAtPmVuYWJsZSA9ICh2b2xhdGlsZSB1MzIgKikgCi0JCQkJKCh1bnNpZ25lZCBsb25nKWlmbGlzdFswXS5tYWNlbl9hZGRyKTsKLQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGF1MTAwMF9tYWNfYWRkciwgc2l6ZW9mKGF1MTAwMF9tYWNfYWRkcikpOworCiAJCXNldHVwX2h3X3JpbmdzKGF1cCwgTUFDMF9SWF9ETUFfQUREUiwgTUFDMF9UWF9ETUFfQUREUik7Ci0JCWF1cC0+bWFjX2lkID0gMDsKLQkJYXVfbWFjc1swXSA9IGF1cDsKLQl9Ci0JCWVsc2UKLQlpZiAoaW9hZGRyID09IGlmbGlzdFsxXS5iYXNlX2FkZHIpCi0JewotCQkJYXVwLT5lbmFibGUgPSAodm9sYXRpbGUgdTMyICopIAotCQkJCSgodW5zaWduZWQgbG9uZylpZmxpc3RbMV0ubWFjZW5fYWRkcik7Ci0JCW1lbWNweShkZXYtPmRldl9hZGRyLCBhdTEwMDBfbWFjX2FkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKLQkJZGV2LT5kZXZfYWRkcls0XSArPSAweDEwOworCX0gZWxzZSBpZiAocG9ydF9udW0gPT0gMSkKIAkJc2V0dXBfaHdfcmluZ3MoYXVwLCBNQUMxX1JYX0RNQV9BRERSLCBNQUMxX1RYX0RNQV9BRERSKTsKLQkJYXVwLT5tYWNfaWQgPSAxOwotCQlhdV9tYWNzWzFdID0gYXVwOwotCX0KLQllbHNlCi0JewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgaW9hZGRyXG4iLCBkZXYtPm5hbWUpOwotCX0KIAotCS8qIGJyaW5nIHRoZSBkZXZpY2Ugb3V0IG9mIHJlc2V0LCBvdGhlcndpc2UgcHJvYmluZyB0aGUgbWlpCi0JICogd2lsbCBoYW5nICovCi0JKmF1cC0+ZW5hYmxlID0gTUFDX0VOX0NMT0NLX0VOQUJMRTsKLQlhdV9zeW5jX2RlbGF5KDIpOwotCSphdXAtPmVuYWJsZSA9IE1BQ19FTl9SRVNFVDAgfCBNQUNfRU5fUkVTRVQxIHwgCi0JCU1BQ19FTl9SRVNFVDIgfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFOwotCWF1X3N5bmNfZGVsYXkoMik7CisJLyoKKwkgKiBBc3NpZ24gdG8gdGhlIEV0aGVybmV0IHBvcnRzIHR3byBjb25zZWN1dGl2ZSBNQUMgYWRkcmVzc2VzCisJICogdG8gbWF0Y2ggdGhvc2UgdGhhdCBhcmUgcHJpbnRlZCBvbiB0aGVpciBzdGlja2VycworCSAqLworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhdTEwMDBfbWFjX2FkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKKwlkZXYtPmRldl9hZGRyWzVdICs9IHBvcnRfbnVtOwogCi0JYXVwLT5taWkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX3BoeSksIEdGUF9LRVJORUwpOwotCWlmICghYXVwLT5taWkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIG1lbW9yeVxuIiwgZGV2LT5uYW1lKTsKLQkJZ290byBlcnJfb3V0OwotCX0KLQlhdXAtPm1paS0+bmV4dCA9IE5VTEw7Ci0JYXVwLT5taWktPmNoaXBfaW5mbyA9IE5VTEw7Ci0JYXVwLT5taWktPnN0YXR1cyA9IDA7Ci0JYXVwLT5taWktPm1paV9jb250cm9sX3JlZyA9IDA7Ci0JYXVwLT5taWktPm1paV9kYXRhX3JlZyA9IDA7CisJKmF1cC0+ZW5hYmxlID0gMDsKKwlhdXAtPm1hY19lbmFibGVkID0gMDsKKworCWF1cC0+bWlpX2J1cy5wcml2ID0gZGV2OworCWF1cC0+bWlpX2J1cy5yZWFkID0gbWRpb2J1c19yZWFkOworCWF1cC0+bWlpX2J1cy53cml0ZSA9IG1kaW9idXNfd3JpdGU7CisJYXVwLT5taWlfYnVzLnJlc2V0ID0gbWRpb2J1c19yZXNldDsKKwlhdXAtPm1paV9idXMubmFtZSA9ICJhdTEwMDBfZXRoX21paSI7CisJYXVwLT5taWlfYnVzLmlkID0gYXVwLT5tYWNfaWQ7CisJYXVwLT5taWlfYnVzLmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkqUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlmb3IoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7ICsraSkKKwkJYXVwLT5taWlfYnVzLmlycVtpXSA9IFBIWV9QT0xMOworCisJLyogaWYga25vd24sIHNldCBjb3JyZXNwb25kaW5nIFBIWSBJUlFzICovCisjaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCisjIGlmIGRlZmluZWQoQVUxWFhYX1BIWTBfSVJRKQorCWlmIChBVTFYWFhfUEhZMF9CVVNJRCA9PSBhdXAtPm1paV9idXMuaWQpCisJCWF1cC0+bWlpX2J1cy5pcnFbQVUxWFhYX1BIWTBfQUREUl0gPSBBVTFYWFhfUEhZMF9JUlE7CisjIGVuZGlmCisjIGlmIGRlZmluZWQoQVUxWFhYX1BIWTFfSVJRKQorCWlmIChBVTFYWFhfUEhZMV9CVVNJRCA9PSBhdXAtPm1paV9idXMuaWQpCisJCWF1cC0+bWlpX2J1cy5pcnFbQVUxWFhYX1BIWTFfQUREUl0gPSBBVTFYWFhfUEhZMV9JUlE7CisjIGVuZGlmCisjZW5kaWYKKwltZGlvYnVzX3JlZ2lzdGVyKCZhdXAtPm1paV9idXMpOwogCiAJaWYgKG1paV9wcm9iZShkZXYpICE9IDApIHsKIAkJZ290byBlcnJfb3V0OwpAQCAtMTU4MSw3ICs3NjksNyBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZhdXAtPmxvY2spOwotCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOworCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPm9wZW4gPSBhdTEwMDBfb3BlbjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGF1MTAwMF90eDsKQEAgLTE1OTAsNyArNzc4LDYgQEAKIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKIAlkZXYtPmRvX2lvY3RsID0gJmF1MTAwMF9pb2N0bDsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmYXUxMDAwX2V0aHRvb2xfb3BzKTsKLQlkZXYtPnNldF9jb25maWcgPSAmYXUxMDAwX3NldF9jb25maWc7CiAJZGV2LT50eF90aW1lb3V0ID0gYXUxMDAwX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOwogCkBAIC0xNjA2LDcgKzc5Myw3IEBACiAJLyogaGVyZSB3ZSBzaG91bGQgaGF2ZSBhIHZhbGlkIGRldiBwbHVzIGF1cC0+IHJlZ2lzdGVyIGFkZHJlc3NlcwogCSAqIHNvIHdlIGNhbiByZXNldCB0aGUgbWFjIHByb3Blcmx5LiovCiAJcmVzZXRfbWFjKGRldik7Ci0Ja2ZyZWUoYXVwLT5taWkpOworCiAJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykgewogCQlpZiAoYXVwLT5yeF9kYl9pbnVzZVtpXSkKIAkJCVJlbGVhc2VEQihhdXAsIGF1cC0+cnhfZGJfaW51c2VbaV0pOwpAQCAtMTYxNSwxMyArODAyLDEyIEBACiAJCWlmIChhdXAtPnR4X2RiX2ludXNlW2ldKQogCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtpXSk7CiAJfQotCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsCi0JCQlNQVhfQlVGX1NJWkUgKiAoTlVNX1RYX0JVRkZTK05VTV9SWF9CVUZGUyksCi0JCQkodm9pZCAqKWF1cC0+dmFkZHIsCi0JCQlhdXAtPmRtYV9hZGRyKTsKKwlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKiAoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKKwkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCWZyZWVfbmV0ZGV2KGRldik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpb2FkZHIpLCBNQUNfSU9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbiwgNCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE2NDAsMTkgKzgyNiwxNCBAQAogCXUzMiBmbGFnczsKIAlpbnQgaTsKIAl1MzIgY29udHJvbDsKLQl1MTYgbGluaywgc3BlZWQ7CiAKIAlpZiAoYXUxMDAwX2RlYnVnID4gNCkgCiAJCXByaW50aygiJXM6IGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCiAJLyogYnJpbmcgdGhlIGRldmljZSBvdXQgb2YgcmVzZXQgKi8KLQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5BQkxFOwotICAgICAgICBhdV9zeW5jX2RlbGF5KDIpOwotCSphdXAtPmVuYWJsZSA9IE1BQ19FTl9SRVNFVDAgfCBNQUNfRU5fUkVTRVQxIHwgCi0JCU1BQ19FTl9SRVNFVDIgfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFOwotCWF1X3N5bmNfZGVsYXkoMjApOworCWVuYWJsZV9tYWMoZGV2LCAxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKIAogCWF1cC0+bWFjLT5jb250cm9sID0gMDsKIAlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOwpAQCAtMTY2OCwxMiArODQ5LDE2IEBACiAJfQogCWF1X3N5bmMoKTsKIAotCWF1cC0+cGh5X29wcy0+cGh5X3N0YXR1cyhkZXYsIGF1cC0+cGh5X2FkZHIsICZsaW5rLCAmc3BlZWQpOwotCWNvbnRyb2wgPSBNQUNfRElTQUJMRV9SWF9PV04gfCBNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRTsKKwljb250cm9sID0gTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7CiAjaWZuZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgogCWNvbnRyb2wgfD0gTUFDX0JJR19FTkRJQU47CiAjZW5kaWYKLQlpZiAobGluayAmJiAoZGV2LT5pZl9wb3J0ID09IElGX1BPUlRfMTAwQkFTRUZYKSkgeworCWlmIChhdXAtPnBoeV9kZXYpIHsKKwkJaWYgKGF1cC0+cGh5X2Rldi0+bGluayAmJiAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKQorCQkJY29udHJvbCB8PSBNQUNfRlVMTF9EVVBMRVg7CisJCWVsc2UKKwkJCWNvbnRyb2wgfD0gTUFDX0RJU0FCTEVfUlhfT1dOOworCX0gZWxzZSB7IC8qIFBIWS1sZXNzIG9wLCBhc3N1bWUgZnVsbC1kdXBsZXggKi8KIAkJY29udHJvbCB8PSBNQUNfRlVMTF9EVVBMRVg7CiAJfQogCkBAIC0xNjg1LDU3ICs4NzAsODQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXUxMDAwX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkCithdTEwMDBfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwotCXVuc2lnbmVkIGNoYXIgaWZfcG9ydDsKLQl1MTYgbGluaywgc3BlZWQ7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGF1cC0+cGh5X2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFkZXYpIHsKLQkJLyogZmF0YWwgZXJyb3IsIGRvbid0IHJlc3RhcnQgdGhlIHRpbWVyICovCi0JCXByaW50ayhLRVJOX0VSUiAiYXUxMDAwX3RpbWVyIGVycm9yOiBOVUxMIGRldlxuIik7Ci0JCXJldHVybjsKKwlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7CisKKwlCVUdfT04oIWF1cC0+cGh5X2Rldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9zcGVlZCAhPSBwaHlkZXYtPnNwZWVkKSkgeworCQkvLyBzcGVlZCBjaGFuZ2VkCisKKwkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJY2FzZSBTUEVFRF8xMDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCA/Pz9cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOworCisJCXN0YXR1c19jaGFuZ2UgPSAxOwogCX0KIAotCWlmX3BvcnQgPSBkZXYtPmlmX3BvcnQ7Ci0JaWYgKGF1cC0+cGh5X29wcy0+cGh5X3N0YXR1cyhkZXYsIGF1cC0+cGh5X2FkZHIsICZsaW5rLCAmc3BlZWQpID09IDApIHsKLQkJaWYgKGxpbmspIHsKLQkJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwXG4iLCBkZXYtPm5hbWUpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQkJZGV2LT5pZl9wb3J0ID0gMDsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBkb3duXG4iLCBkZXYtPm5hbWUpOwotCQkJfQotCQl9Ci0JfQorCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKKwkJLy8gZHVwbGV4IG1vZGUgY2hhbmdlZAogCi0JaWYgKGxpbmsgJiYgKGRldi0+aWZfcG9ydCAhPSBpZl9wb3J0KSAmJiAKLQkJCShkZXYtPmlmX3BvcnQgIT0gSUZfUE9SVF9VTktOT1dOKSkgeworCQkvKiBzd2l0Y2hpbmcgZHVwbGV4IG1vZGUgcmVxdWlyZXMgdG8gZGlzYWJsZSByeCBhbmQgdHghICovCiAJCWhhcmRfc3RvcChkZXYpOwotCQlpZiAoZGV2LT5pZl9wb3J0ID09IElGX1BPUlRfMTAwQkFTRUZYKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogZ29pbmcgdG8gZnVsbCBkdXBsZXhcbiIsIAotCQkJCQlkZXYtPm5hbWUpOwotCQkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwotCQkJYXVfc3luY19kZWxheSgxKTsKLQkJfQotCQllbHNlIHsKLQkJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfRlVMTF9EVVBMRVg7Ci0JCQlhdV9zeW5jX2RlbGF5KDEpOwotCQl9CisKKwkJaWYgKERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4KQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgfCBNQUNfRlVMTF9EVVBMRVgpCisJCQkJCSAgICAgJiB+TUFDX0RJU0FCTEVfUlhfT1dOKTsKKwkJZWxzZQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgICYgfk1BQ19GVUxMX0RVUExFWCkKKwkJCQkJICAgICB8IE1BQ19ESVNBQkxFX1JYX09XTik7CisJCWF1X3N5bmNfZGVsYXkoMSk7CisKIAkJZW5hYmxlX3J4X3R4KGRldik7CisJCWF1cC0+b2xkX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCisJCXN0YXR1c19jaGFuZ2UgPSAxOwogCX0KIAotCWF1cC0+dGltZXIuZXhwaXJlcyA9IFJVTl9BVCgoMSpIWikpOyAKLQlhdXAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7Ci0JYXVwLT50aW1lci5mdW5jdGlvbiA9ICZhdTEwMDBfdGltZXI7IC8qIHRpbWVyIGhhbmRsZXIgKi8KLQlhZGRfdGltZXIoJmF1cC0+dGltZXIpOworCWlmKHBoeWRldi0+bGluayAhPSBhdXAtPm9sZF9saW5rKSB7CisJCS8vIGxpbmsgc3RhdGUgY2hhbmdlZAogCisJCWlmIChwaHlkZXYtPmxpbmspIC8vIGxpbmsgd2VudCB1cAorCQkJbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwkJZWxzZSB7IC8vIGxpbmsgd2VudCBkb3duCisJCQlhdXAtPm9sZF9zcGVlZCA9IDA7CisJCQlhdXAtPm9sZF9kdXBsZXggPSAtMTsKKwkJfQorCisJCWF1cC0+b2xkX2xpbmsgPSBwaHlkZXYtPmxpbms7CisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHN0YXR1c19jaGFuZ2UpIHsKKwkJaWYgKHBoeWRldi0+bGluaykKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwICglZC8lcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkLAorCQkJICAgICAgIERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4ID8gIkZ1bGwiIDogIkhhbGYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE3NDYsMjUgKzk1OCwyNiBAQAogCWlmIChhdTEwMDBfZGVidWcgPiA0KQogCQlwcmludGsoIiVzOiBvcGVuOiBkZXY9JXBcbiIsIGRldi0+bmFtZSwgZGV2KTsKIAorCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZhdTEwMDBfaW50ZXJydXB0LCAwLAorCQkJCQlkZXYtPm5hbWUsIGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAorCQkJCWRldi0+bmFtZSwgZGV2LT5pcnEpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwogCWlmICgocmV0dmFsID0gYXUxMDAwX2luaXQoZGV2KSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCi0JaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmF1MTAwMF9pbnRlcnJ1cHQsIDAsIAotCQkJCQlkZXYtPm5hbWUsIGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLCAKLQkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKLQkJcmV0dXJuIHJldHZhbDsKKwlpZiAoYXVwLT5waHlfZGV2KSB7CisJCS8qIGNhdXNlIHRoZSBQSFkgc3RhdGUgbWFjaGluZSB0byBzY2hlZHVsZSBhIGxpbmsgc3RhdGUgY2hlY2sgKi8KKwkJYXVwLT5waHlfZGV2LT5zdGF0ZSA9IFBIWV9DSEFOR0VMSU5LOworCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsKIAl9CiAKLQlpbml0X3RpbWVyKCZhdXAtPnRpbWVyKTsgLyogdXNlZCBpbiBpb2N0bCgpICovCi0JYXVwLT50aW1lci5leHBpcmVzID0gUlVOX0FUKCgzKkhaKSk7IAotCWF1cC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLQlhdXAtPnRpbWVyLmZ1bmN0aW9uID0gJmF1MTAwMF90aW1lcjsgLyogdGltZXIgaGFuZGxlciAqLwotCWFkZF90aW1lcigmYXVwLT50aW1lcik7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAogCWlmIChhdTEwMDBfZGVidWcgPiA0KQogCQlwcmludGsoIiVzOiBvcGVuOiBJbml0aWFsaXphdGlvbiBkb25lLlxuIiwgZGV2LT5uYW1lKTsKQEAgLTE3NzQsMTYgKzk4NywxOSBAQAogCiBzdGF0aWMgaW50IGF1MTAwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXUzMiBmbGFnczsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKIAogCWlmIChhdTEwMDBfZGVidWcgPiA0KQogCQlwcmludGsoIiVzOiBjbG9zZTogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CiAKLQlyZXNldF9tYWMoZGV2KTsKKwlpZiAoYXVwLT5waHlfZGV2KQorCQlwaHlfc3RvcChhdXAtPnBoeV9kZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCQorCisJcmVzZXRfbWFjX3VubG9ja2VkIChkZXYpOworCiAJLyogc3RvcCB0aGUgZGV2aWNlICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC0xODA1LDIxICsxMDIxLDE4IEBACiAJCWlmIChkZXYpIHsKIAkJCWF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwogCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQkJCWtmcmVlKGF1cC0+bWlpKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOVU1fUlhfRE1BOyBqKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBOVU1fUlhfRE1BOyBqKyspCiAJCQkJaWYgKGF1cC0+cnhfZGJfaW51c2Vbal0pCiAJCQkJCVJlbGVhc2VEQihhdXAsIGF1cC0+cnhfZGJfaW51c2Vbal0pOwotCQkJfQotCQkJZm9yIChqID0gMDsgaiA8IE5VTV9UWF9ETUE7IGorKykgeworCQkJZm9yIChqID0gMDsgaiA8IE5VTV9UWF9ETUE7IGorKykKIAkJCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtqXSkKIAkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtqXSk7Ci0JCQl9Ci0JCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLAotCQkJCQlNQVhfQlVGX1NJWkUgKiAoTlVNX1RYX0JVRkZTK05VTV9SWF9CVUZGUyksCi0JCQkJCSh2b2lkICopYXVwLT52YWRkciwKLQkJCQkJYXVwLT5kbWFfYWRkcik7CisgCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICoKKyAJCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCisgCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7CisgCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBNQUNfSU9TSVpFKTsKKyAJCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7CiAJCQlmcmVlX25ldGRldihkZXYpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpZmxpc3RbaV0uYmFzZV9hZGRyKSwgTUFDX0lPU0laRSk7CiAJCX0KIAl9CiB9CkBAIC0xODMwLDcgKzEwNDMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZhdXAtPnN0YXRzOwogCiAJaWYgKHN0YXR1cyAmIFRYX0ZSQU1FX0FCT1JURUQpIHsKLQkJaWYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkgeworCQlpZiAoIWF1cC0+cGh5X2RldiB8fCAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKSB7CiAJCQlpZiAoc3RhdHVzICYgKFRYX0pBQl9USU1FT1VUIHwgVFhfVU5ERVJSVU4pKSB7CiAJCQkJLyogYW55IG90aGVyIHR4IGVycm9ycyBhcmUgb25seSB2YWxpZAogCQkJCSAqIGluIGhhbGYgZHVwbGV4IG1vZGUgKi8KQEAgLTIxMDQsMTI2ICsxMzE3LDE1IEBACiAJfQogfQogCi0KIHN0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5wcml2OwotCXUxNiAqZGF0YSA9ICh1MTYgKikmcnEtPmlmcl9pZnJ1OwogCi0Jc3dpdGNoKGNtZCkgeyAKLQkJY2FzZSBTSU9DREVWUFJJVkFURToJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBQSFkgaW4gdXNlLiAqLwotCQljYXNlIFNJT0NHTUlJUEhZOgotCQkgICAgICAgIGlmICghbmV0aWZfcnVubmluZyhkZXYpKSByZXR1cm4gLUVJTlZBTDsKLQkJCWRhdGFbMF0gPSBhdXAtPnBoeV9hZGRyOwotCQljYXNlIFNJT0NERVZQUklWQVRFKzE6CS8qIFJlYWQgdGhlIHNwZWNpZmllZCBNSUkgcmVnaXN0ZXIuICovCi0JCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCQlkYXRhWzNdID0gIG1kaW9fcmVhZChkZXYsIGRhdGFbMF0sIGRhdGFbMV0pOyAKLQkJCXJldHVybiAwOwotCQljYXNlIFNJT0NERVZQUklWQVRFKzI6CS8qIFdyaXRlIHRoZSBzcGVjaWZpZWQgTUlJIHJlZ2lzdGVyICovCi0JCWNhc2UgU0lPQ1NNSUlSRUc6IAotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCXJldHVybiAtRVBFUk07Ci0JCQltZGlvX3dyaXRlKGRldiwgZGF0YVswXSwgZGF0YVsxXSxkYXRhWzJdKTsKLQkJCXJldHVybiAwOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7CiAKLX0KKwlpZiAoIWF1cC0+cGh5X2RldikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxlCiAKLQotc3RhdGljIGludCBhdTEwMDBfc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwotCXUxNiBjb250cm9sOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpICB7Ci0JCXByaW50aygiJXM6IHNldF9jb25maWcgY2FsbGVkOiBkZXYtPmlmX3BvcnQgJWQgbWFwLT5wb3J0ICV4XG4iLCAKLQkJCQlkZXYtPm5hbWUsIGRldi0+aWZfcG9ydCwgbWFwLT5wb3J0KTsKLQl9Ci0KLQlzd2l0Y2gobWFwLT5wb3J0KXsKLQkJY2FzZSBJRl9QT1JUX1VOS05PV046IC8qIHVzZSBhdXRvIGhlcmUgKi8gICAKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb25maWcgcGh5IGZvciBhbmVnXG4iLCAKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsKLQkJCS8qIExpbmsgRG93bjogdGhlIHRpbWVyIHdpbGwgYnJpbmcgaXQgdXAgKi8KLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCi0JCQkvKiByZWFkIGN1cnJlbnQgY29udHJvbCAqLwotCQkJY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJCWNvbnRyb2wgJj0gfihNSUlfQ05UTF9GRFggfCBNSUlfQ05UTF9GMTAwKTsKLQotCQkJLyogZW5hYmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIHJlc2V0IHRoZSBuZWdvdGlhdGlvbiAqLwotCQkJbWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MLCAKLQkJCQkJY29udHJvbCB8IE1JSV9DTlRMX0FVVE8gfCAKLQkJCQkJTUlJX0NOVExfUlNUX0FVVE8pOwotCi0JCQlicmVhazsKLSAgICAKLQkJY2FzZSBJRl9QT1JUXzEwQkFTRVQ6IC8qIDEwQmFzZVQgKi8gICAgICAgICAKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb25maWcgcGh5IGZvciAxMEJhc2VUXG4iLCAKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsKLQkKLQkJCS8qIExpbmsgRG93bjogdGhlIHRpbWVyIHdpbGwgYnJpbmcgaXQgdXAgKi8KLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0KLQkJCS8qIHNldCBTcGVlZCB0byAxME1icHMsIEhhbGYgRHVwbGV4ICovCi0JCQljb250cm9sID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wpOwotCQkJY29udHJvbCAmPSB+KE1JSV9DTlRMX0YxMDAgfCBNSUlfQ05UTF9BVVRPIHwgCi0JCQkJCU1JSV9DTlRMX0ZEWCk7Ci0JCi0JCQkvKiBkaXNhYmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIGZvcmNlIDEwTS9IRCBtb2RlKi8KLQkJCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgY29udHJvbCk7Ci0JCQlicmVhazsKLSAgICAKLQkJY2FzZSBJRl9QT1JUXzEwMEJBU0VUOiAvKiAxMDBCYXNlVCAqLwotCQljYXNlIElGX1BPUlRfMTAwQkFTRVRYOiAvKiAxMDBCYXNlVHggKi8gCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29uZmlnIHBoeSBmb3IgMTAwQmFzZVRYXG4iLCAKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsKLQkKLQkJCS8qIExpbmsgRG93bjogdGhlIHRpbWVyIHdpbGwgYnJpbmcgaXQgdXAgKi8KLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCi0JCQkvKiBzZXQgU3BlZWQgdG8gMTAwTWJwcywgSGFsZiBEdXBsZXggKi8KLQkJCS8qIGRpc2FibGUgYXV0byBuZWdvdGlhdGlvbiBhbmQgZW5hYmxlIDEwME1CaXQgTW9kZSAqLwotCQkJY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJCWNvbnRyb2wgJj0gfihNSUlfQ05UTF9BVVRPIHwgTUlJX0NOVExfRkRYKTsKLQkJCWNvbnRyb2wgfD0gTUlJX0NOVExfRjEwMDsKLQkJCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgY29udHJvbCk7Ci0JCQlicmVhazsKLSAgICAKLQkJY2FzZSBJRl9QT1JUXzEwMEJBU0VGWDogLyogMTAwQmFzZUZ4ICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29uZmlnIHBoeSBmb3IgMTAwQmFzZUZYXG4iLCAKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsKLQkKLQkJCS8qIExpbmsgRG93bjogdGhlIHRpbWVyIHdpbGwgYnJpbmcgaXQgdXAgKi8KLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCi0JCQkvKiBzZXQgU3BlZWQgdG8gMTAwTWJwcywgRnVsbCBEdXBsZXggKi8KLQkJCS8qIGRpc2FibGUgYXV0byBuZWdvdGlhdGlvbiBhbmQgZW5hYmxlIDEwME1CaXQgTW9kZSAqLwotCQkJY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJCWNvbnRyb2wgJj0gfk1JSV9DTlRMX0FVVE87Ci0JCQljb250cm9sIHw9ICBNSUlfQ05UTF9GMTAwIHwgTUlJX0NOVExfRkRYOwotCQkJbWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MLCBjb250cm9sKTsKLQkJCWJyZWFrOwotCQljYXNlIElGX1BPUlRfMTBCQVNFMjogLyogMTBCYXNlMiAqLwotCQljYXNlIElGX1BPUlRfQVVJOiAvKiBBVUkgKi8KLQkJLyogVGhlc2UgTW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWQgKGFyZSB0aGV5PykqLwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogMTBCYXNlMi9BVUkgbm90IHN1cHBvcnRlZCIsIAotCQkJCQlkZXYtPm5hbWUpOwotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJYnJlYWs7Ci0gICAgCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIG1lZGlhIHNlbGVjdGVkIiwgCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBoeV9taWlfaW9jdGwoYXVwLT5waHlfZGV2LCBpZl9taWkocnEpLCBjbWQpOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF1MTAwMF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaCBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaAppbmRleCA3ZjkzMjZlLi40MWMyZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCkBAIC00MCwxMjAgKzQwLDYgQEAKIAogI2RlZmluZSBNVUxUSUNBU1RfRklMVEVSX0xJTUlUIDY0CiAKLS8qIEZJWE1FIAotICogVGhlIFBIWSBkZWZpbmVzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIGZpbGUuCi0gKi8KLQotLyogTUlJIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUJTUlJX0NPTlRST0wgMHgwMDAwCi0jZGVmaW5lIE1JSV9TVEFUVVMgIDB4MDAwMQotI2RlZmluZSBNSUlfUEhZX0lEMCAweDAwMDIKLSNkZWZpbmUJTUlJX1BIWV9JRDEgMHgwMDAzCi0jZGVmaW5lIE1JSV9BTkFEViAgIDB4MDAwNAotI2RlZmluZSBNSUlfQU5MUEFSICAweDAwMDUKLSNkZWZpbmUgTUlJX0FFWFAgICAgMHgwMDA2Ci0jZGVmaW5lIE1JSV9BTkVYVCAgIDB4MDAwNwotI2RlZmluZSBNSUlfTFNJX1BIWV9DT05GSUcgMHgwMDExCi0vKiBTdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0xTSV9QSFlfU1RBVCAgIDB4MDAxMgotI2RlZmluZSBNSUlfQU1EX1BIWV9TVEFUICAgTUlJX0xTSV9QSFlfU1RBVAotI2RlZmluZSBNSUlfSU5URUxfUEhZX1NUQVQgMHgwMDExCi0KLSNkZWZpbmUgTUlJX0FVWF9DTlRSTCAgMHgwMDE4Ci0vKiBtaWkgcmVnaXN0ZXJzIHNwZWNpZmljIHRvIEFNRCA3OUM5MDEgKi8KLSNkZWZpbmUJTUlJX1NUQVRVU19TVU1NQVJZID0gMHgwMDE4Ci0KLS8qIE1JSSBDb250cm9sIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucy4gKi8KLSNkZWZpbmUJTUlJX0NOVExfRkRYICAgICAgMHgwMTAwCi0jZGVmaW5lIE1JSV9DTlRMX1JTVF9BVVRPIDB4MDIwMAotI2RlZmluZQlNSUlfQ05UTF9JU09MQVRFICAweDA0MDAKLSNkZWZpbmUgTUlJX0NOVExfUFdSRFdOICAgMHgwODAwCi0jZGVmaW5lCU1JSV9DTlRMX0FVVE8gICAgIDB4MTAwMAotI2RlZmluZSBNSUlfQ05UTF9GMTAwICAgICAweDIwMDAKLSNkZWZpbmUJTUlJX0NOVExfTFBCSyAgICAgMHg0MDAwCi0jZGVmaW5lIE1JSV9DTlRMX1JFU0VUICAgIDB4ODAwMAotCi0vKiBNSUkgU3RhdHVzIHJlZ2lzdGVyIGJpdCAgKi8KLSNkZWZpbmUJTUlJX1NUQVRfRVhUICAgICAgICAweDAwMDEgCi0jZGVmaW5lIE1JSV9TVEFUX0pBQiAgICAgICAgMHgwMDAyCi0jZGVmaW5lCU1JSV9TVEFUX0xJTksgICAgICAgMHgwMDA0Ci0jZGVmaW5lIE1JSV9TVEFUX0NBTl9BVVRPICAgMHgwMDA4Ci0jZGVmaW5lCU1JSV9TVEFUX0ZBVUxUICAgICAgMHgwMDEwIAotI2RlZmluZSBNSUlfU1RBVF9BVVRPX0RPTkUgIDB4MDAyMAotI2RlZmluZQlNSUlfU1RBVF9DQU5fVCAgICAgIDB4MDgwMAotI2RlZmluZSBNSUlfU1RBVF9DQU5fVF9GRFggIDB4MTAwMAotI2RlZmluZQlNSUlfU1RBVF9DQU5fVFggICAgIDB4MjAwMCAKLSNkZWZpbmUgTUlJX1NUQVRfQ0FOX1RYX0ZEWCAweDQwMDAKLSNkZWZpbmUJTUlJX1NUQVRfQ0FOX1Q0ICAgICAweDgwMDAKLQotCi0jZGVmaW5lCQlNSUlfSUQxX09VSV9MTwkJMHhGQzAwCS8qIGxvdyBiaXRzIG9mIE9VSSBtYXNrICovCi0jZGVmaW5lCQlNSUlfSUQxX01PREVMCQkweDAzRjAJLyogbW9kZWwgbnVtYmVyICovCi0jZGVmaW5lCQlNSUlfSUQxX1JFVgkJMHgwMDBGCS8qIG1vZGVsIG51bWJlciAqLwotCi0vKiBNSUkgTldBWSBSZWdpc3RlciBCaXRzIC4uLgotICAgdmFsaWQgZm9yIHRoZSBBTkFSIChBdXRvLU5lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQpIGFuZAotICAgQU5MUEFSIChBdXRvLU5lZ290aWF0aW9uIExpbmsgUGFydG5lcikgcmVnaXN0ZXJzICovCi0jZGVmaW5lCU1JSV9OV0FZX05PREVfU0VMIDB4MDAxZgotI2RlZmluZSBNSUlfTldBWV9DU01BX0NEICAweDAwMDEKLSNkZWZpbmUJTUlJX05XQVlfVAkgIDB4MDAyMAotI2RlZmluZSBNSUlfTldBWV9UX0ZEWCAgICAweDAwNDAKLSNkZWZpbmUJTUlJX05XQVlfVFggICAgICAgMHgwMDgwCi0jZGVmaW5lIE1JSV9OV0FZX1RYX0ZEWCAgIDB4MDEwMAotI2RlZmluZQlNSUlfTldBWV9UNCAgICAgICAweDAyMDAgCi0jZGVmaW5lIE1JSV9OV0FZX1BBVVNFICAgIDB4MDQwMCAKLSNkZWZpbmUJTUlJX05XQVlfUkYgICAgICAgMHgyMDAwIC8qIFJlbW90ZSBGYXVsdCAqLwotI2RlZmluZSBNSUlfTldBWV9BQ0sgICAgICAweDQwMDAgLyogUmVtb3RlIEFja25vd2xlZGdlICovCi0jZGVmaW5lCU1JSV9OV0FZX05QICAgICAgIDB4ODAwMCAvKiBOZXh0IFBhZ2UgKEVuYWJsZSkgKi8KLQotLyogbWlpIHN0c291dCByZWdpc3RlciBiaXRzICovCi0jZGVmaW5lCU1JSV9TVFNPVVRfTElOS19GQUlMIDB4NDAwMAotI2RlZmluZQlNSUlfU1RTT1VUX1NQRCAgICAgICAweDAwODAKLSNkZWZpbmUgTUlJX1NUU09VVF9EUExYICAgICAgMHgwMDQwCi0KLS8qIG1paSBzdHNpY3MgcmVnaXN0ZXIgYml0cyAqLwotI2RlZmluZQlNSUlfU1RTSUNTX1NQRCAgICAgICAweDgwMDAKLSNkZWZpbmUgTUlJX1NUU0lDU19EUExYICAgICAgMHg0MDAwCi0jZGVmaW5lCU1JSV9TVFNJQ1NfTElOS1NUUyAgIDB4MDAwMQotCi0vKiBtaWkgc3Rzc3VtIHJlZ2lzdGVyIGJpdHMgKi8KLSNkZWZpbmUJTUlJX1NUU1NVTV9MSU5LICAweDAwMDgKLSNkZWZpbmUgTUlJX1NUU1NVTV9EUExYICAweDAwMDQKLSNkZWZpbmUJTUlJX1NUU1NVTV9BVVRPICAweDAwMDIKLSNkZWZpbmUgTUlJX1NUU1NVTV9TUEQgICAweDAwMDEKLQotLyogbHNpIHBoeSBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0xTSV9QSFlfU1RBVF9GRFgJMHgwMDQwCi0jZGVmaW5lIE1JSV9MU0lfUEhZX1NUQVRfU1BECTB4MDA4MAotCi0vKiBhbWQgcGh5IHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBNSUlfQU1EX1BIWV9TVEFUX0ZEWAkweDA4MDAKLSNkZWZpbmUgTUlJX0FNRF9QSFlfU1RBVF9TUEQJMHgwNDAwCi0KLS8qIGludGVsIHBoeSBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0lOVEVMX1BIWV9TVEFUX0ZEWAkweDAyMDAKLSNkZWZpbmUgTUlJX0lOVEVMX1BIWV9TVEFUX1NQRAkweDQwMDAKLQotLyogQXV4aWxsaWFyeSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBNSUlfQVVYX0ZEWCAgICAgIDB4MDAwMQotI2RlZmluZSBNSUlfQVVYXzEwMCAgICAgIDB4MDAwMgotI2RlZmluZSBNSUlfQVVYX0YxMDAgICAgIDB4MDAwNAotI2RlZmluZSBNSUlfQVVYX0FORUcgICAgIDB4MDAwOAotCi10eXBlZGVmIHN0cnVjdCBtaWlfcGh5IHsKLQlzdHJ1Y3QgbWlpX3BoeSAqIG5leHQ7Ci0Jc3RydWN0IG1paV9jaGlwX2luZm8gKiBjaGlwX2luZm87Ci0JdTE2IHN0YXR1czsKLQl1MzIgKm1paV9jb250cm9sX3JlZzsKLQl1MzIgKm1paV9kYXRhX3JlZzsKLX0gbWlpX3BoeV90OwotCi1zdHJ1Y3QgcGh5X29wcyB7Ci0JaW50ICgqcGh5X2luaXQpIChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwotCWludCAoKnBoeV9yZXNldCkgKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7Ci0JaW50ICgqcGh5X3N0YXR1cykgKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgdTE2ICosIHUxNiAqKTsKLX07Ci0KIC8qIAogICogRGF0YSBCdWZmZXIgRGVzY3JpcHRvci4gRGF0YSBidWZmZXJzIG11c3QgYmUgYWxpZ25lZCBvbiAzMiBieXRlIAogICogYm91bmRhcnkgZm9yIGJvdGgsIHJlY2VpdmUgYW5kIHRyYW5zbWl0LgpAQCAtMjAwLDcgKzg2LDYgQEAKIAogCiBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgewotCQogCWRiX2Rlc3RfdCAqcERCZnJlZTsKIAlkYl9kZXN0X3QgZGJbTlVNX1JYX0JVRkZTK05VTV9UWF9CVUZGU107CiAJdm9sYXRpbGUgcnhfZG1hX3QgKnJ4X2RtYV9yaW5nW05VTV9SWF9ETUFdOwpAQCAtMjEzLDggKzk4LDE1IEBACiAJdTMyIHR4X2Z1bGw7CiAKIAlpbnQgbWFjX2lkOwotCW1paV9waHlfdCAqbWlpOwotCXN0cnVjdCBwaHlfb3BzICpwaHlfb3BzOworCisJaW50IG1hY19lbmFibGVkOyAgICAgICAvKiB3aGV0aGVyIE1BQyBpcyBjdXJyZW50bHkgZW5hYmxlZCBhbmQgcnVubmluZyAocmVxLiBmb3IgbWRpbykgKi8KKworCWludCBvbGRfbGluazsgICAgICAgICAgLyogdXNlZCBieSBhdTEwMDBfYWRqdXN0X2xpbmsgKi8KKwlpbnQgb2xkX3NwZWVkOworCWludCBvbGRfZHVwbGV4OworCisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXY7CisJc3RydWN0IG1paV9idXMgbWlpX2J1czsKIAkKIAkvKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGp1c3QgZm9yIHF1aWNrIGFjY2VzcyB0byBjZXJ0YWluIHJlZ3MgYWRkcmVzc2VzLiAqLwogCXZvbGF0aWxlIG1hY19yZWdfdCAqbWFjOyAgLyogbWFjIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAqLyAgIApAQCAtMjIzLDE0ICsxMTUsNiBAQAogCXUzMiB2YWRkcjsgICAgICAgICAgICAgICAgLyogdmlydHVhbCBhZGRyZXNzIG9mIHJ4L3R4IGJ1ZmZlcnMgICAqLwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7ICAgICAgLyogZG1hIGFkZHJlc3Mgb2YgcngvdHggYnVmZmVycyAgICAgICAqLwogCi0JdTggKmhhc2hfdGFibGU7Ci0JdTMyIGhhc2hfbW9kZTsKLQl1MzIgaW50cl93b3JrX2RvbmU7IC8qIG51bWJlciBvZiBSeCBhbmQgVHggcGt0cyBwcm9jZXNzZWQgaW4gdGhlIGlzciAqLwotCWludCBwaHlfYWRkcjsgICAgICAgICAgLyogcGh5IGFkZHJlc3MgKi8KLQl1MzIgb3B0aW9uczsgICAgICAgICAgIC8qIFVzZXItc2V0dGFibGUgbWlzYy4gZHJpdmVyIG9wdGlvbnMuICovCi0JdTMyIGRydl9mbGFnczsKLQlpbnQgd2FudF9hdXRvbmVnOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCXNwaW5sb2NrX3QgbG9jazsgICAgICAgLyogU2VyaWFsaXNlIGFjY2VzcyB0byBkZXZpY2UgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNTQxNjFhZS4uNzAyZDU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CkBAIC00OSwxNCArNTAsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CiAKICNpbmNsdWRlICJibngyLmgiCiAjaW5jbHVkZSAiYm54Ml9mdy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC40MCIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXkgMjIsIDIwMDYiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40LjQyIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1bmUgMTIsIDIwMDYiCiAKICNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQogCkBAIC0xODIwLDcgKzE4MjIsNyBAQAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBicC0+ZGV2KTsKIAogCQlpZiAoKGxlbiA+IChicC0+ZGV2LT5tdHUgKyBFVEhfSExFTikpICYmCi0JCQkoaHRvbnMoc2tiLT5wcm90b2NvbCkgIT0gMHg4MTAwKSkgeworCQkJKG50b2hzKHNrYi0+cHJvdG9jb2wpICE9IDB4ODEwMCkpIHsKIAogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJCWdvdG8gbmV4dF9yeDsKQEAgLTIwMDksNyArMjAxMSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIENhbGxlZCB3aXRoIHJ0bmxfbG9jayBmcm9tIHZsYW4gZnVuY3Rpb25zIGFuZCBhbHNvIGRldi0+eG1pdF9sb2NrCisvKiBDYWxsZWQgd2l0aCBydG5sX2xvY2sgZnJvbSB2bGFuIGZ1bmN0aW9ucyBhbmQgYWxzbyBuZXRpZl90eF9sb2NrCiAgKiBmcm9tIHNldF9tdWx0aWNhc3QuCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0yMDgzLDYgKzIwODUsOTIgQEAKIAlzcGluX3VubG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKIH0KIAorI2RlZmluZSBGV19CVUZfU0laRQkweDgwMDAKKworc3RhdGljIGludAorYm54Ml9ndW56aXBfaW5pdChzdHJ1Y3QgYm54MiAqYnApCit7CisJaWYgKChicC0+Z3VuemlwX2J1ZiA9IHZtYWxsb2MoRldfQlVGX1NJWkUpKSA9PSBOVUxMKQorCQlnb3RvIGd1bnppcF9ub21lbTE7CisKKwlpZiAoKGJwLT5zdHJtID0ga21hbGxvYyhzaXplb2YoKmJwLT5zdHJtKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCWdvdG8gZ3VuemlwX25vbWVtMjsKKworCWJwLT5zdHJtLT53b3Jrc3BhY2UgPSBrbWFsbG9jKHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCksIEdGUF9LRVJORUwpOworCWlmIChicC0+c3RybS0+d29ya3NwYWNlID09IE5VTEwpCisJCWdvdG8gZ3VuemlwX25vbWVtMzsKKworCXJldHVybiAwOworCitndW56aXBfbm9tZW0zOgorCWtmcmVlKGJwLT5zdHJtKTsKKwlicC0+c3RybSA9IE5VTEw7CisKK2d1bnppcF9ub21lbTI6CisJdmZyZWUoYnAtPmd1bnppcF9idWYpOworCWJwLT5ndW56aXBfYnVmID0gTlVMTDsKKworZ3VuemlwX25vbWVtMToKKwlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQ2Fubm90IGFsbG9jYXRlIGZpcm13YXJlIGJ1ZmZlciBmb3IgIgorCQkJICAgICJ1bmNvbXByZXNzaW9uLlxuIiwgYnAtPmRldi0+bmFtZSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkCitibngyX2d1bnppcF9lbmQoc3RydWN0IGJueDIgKmJwKQoreworCWtmcmVlKGJwLT5zdHJtLT53b3Jrc3BhY2UpOworCisJa2ZyZWUoYnAtPnN0cm0pOworCWJwLT5zdHJtID0gTlVMTDsKKworCWlmIChicC0+Z3VuemlwX2J1ZikgeworCQl2ZnJlZShicC0+Z3VuemlwX2J1Zik7CisJCWJwLT5ndW56aXBfYnVmID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2JueDJfZ3VuemlwKHN0cnVjdCBibngyICpicCwgdTggKnpidWYsIGludCBsZW4sIHZvaWQgKipvdXRidWYsIGludCAqb3V0bGVuKQoreworCWludCBuLCByYzsKKworCS8qIGNoZWNrIGd6aXAgaGVhZGVyICovCisJaWYgKCh6YnVmWzBdICE9IDB4MWYpIHx8ICh6YnVmWzFdICE9IDB4OGIpIHx8ICh6YnVmWzJdICE9IFpfREVGTEFURUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW4gPSAxMDsKKworI2RlZmluZSBGTkFNRQkweDgKKwlpZiAoemJ1ZlszXSAmIEZOQU1FKQorCQl3aGlsZSAoKHpidWZbbisrXSAhPSAwKSAmJiAobiA8IGxlbikpOworCisJYnAtPnN0cm0tPm5leHRfaW4gPSB6YnVmICsgbjsKKwlicC0+c3RybS0+YXZhaWxfaW4gPSBsZW4gLSBuOworCWJwLT5zdHJtLT5uZXh0X291dCA9IGJwLT5ndW56aXBfYnVmOworCWJwLT5zdHJtLT5hdmFpbF9vdXQgPSBGV19CVUZfU0laRTsKKworCXJjID0gemxpYl9pbmZsYXRlSW5pdDIoYnAtPnN0cm0sIC1NQVhfV0JJVFMpOworCWlmIChyYyAhPSBaX09LKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHpsaWJfaW5mbGF0ZShicC0+c3RybSwgWl9GSU5JU0gpOworCisJKm91dGxlbiA9IEZXX0JVRl9TSVpFIC0gYnAtPnN0cm0tPmF2YWlsX291dDsKKwkqb3V0YnVmID0gYnAtPmd1bnppcF9idWY7CisKKwlpZiAoKHJjICE9IFpfT0spICYmIChyYyAhPSBaX1NUUkVBTV9FTkQpKQorCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjogJXNcbiIsCisJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+c3RybS0+bXNnKTsKKworCXpsaWJfaW5mbGF0ZUVuZChicC0+c3RybSk7CisKKwlpZiAocmMgPT0gWl9TVFJFQU1fRU5EKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIHZvaWQKIGxvYWRfcnYycF9mdyhzdHJ1Y3QgYm54MiAqYnAsIHUzMiAqcnYycF9jb2RlLCB1MzIgcnYycF9jb2RlX2xlbiwKIAl1MzIgcnYycF9wcm9jKQpAQCAtMjA5Miw5ICsyMTgwLDkgQEAKIAogCiAJZm9yIChpID0gMDsgaSA8IHJ2MnBfY29kZV9sZW47IGkgKz0gOCkgewotCQlSRUdfV1IoYnAsIEJOWDJfUlYyUF9JTlNUUl9ISUdILCAqcnYycF9jb2RlKTsKKwkJUkVHX1dSKGJwLCBCTlgyX1JWMlBfSU5TVFJfSElHSCwgY3B1X3RvX2xlMzIoKnJ2MnBfY29kZSkpOwogCQlydjJwX2NvZGUrKzsKLQkJUkVHX1dSKGJwLCBCTlgyX1JWMlBfSU5TVFJfTE9XLCAqcnYycF9jb2RlKTsKKwkJUkVHX1dSKGJwLCBCTlgyX1JWMlBfSU5TVFJfTE9XLCBjcHVfdG9fbGUzMigqcnYycF9jb2RlKSk7CiAJCXJ2MnBfY29kZSsrOwogCiAJCWlmIChydjJwX3Byb2MgPT0gUlYyUF9QUk9DMSkgewpAQCAtMjEzNCw3ICsyMjIyLDcgQEAKIAkJaW50IGo7CiAKIAkJZm9yIChqID0gMDsgaiA8IChmdy0+dGV4dF9sZW4gLyA0KTsgaisrLCBvZmZzZXQgKz0gNCkgewotCQkJUkVHX1dSX0lORChicCwgb2Zmc2V0LCBmdy0+dGV4dFtqXSk7CisJCQlSRUdfV1JfSU5EKGJwLCBvZmZzZXQsIGNwdV90b19sZTMyKGZ3LT50ZXh0W2pdKSk7CiAJICAgICAgICB9CiAJfQogCkBAIC0yMTkwLDE1ICsyMjc4LDMyIEBACiAJUkVHX1dSX0lORChicCwgY3B1X3JlZy0+bW9kZSwgdmFsKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIGJueDJfaW5pdF9jcHVzKHN0cnVjdCBibngyICpicCkKIHsKIAlzdHJ1Y3QgY3B1X3JlZyBjcHVfcmVnOwogCXN0cnVjdCBmd19pbmZvIGZ3OworCWludCByYyA9IDA7CisJdm9pZCAqdGV4dDsKKwl1MzIgdGV4dF9sZW47CisKKwlpZiAoKHJjID0gYm54Ml9ndW56aXBfaW5pdChicCkpICE9IDApCisJCXJldHVybiByYzsKIAogCS8qIEluaXRpYWxpemUgdGhlIFJWMlAgcHJvY2Vzc29yLiAqLwotCWxvYWRfcnYycF9mdyhicCwgYm54Ml9ydjJwX3Byb2MxLCBzaXplb2YoYm54Ml9ydjJwX3Byb2MxKSwgUlYyUF9QUk9DMSk7Ci0JbG9hZF9ydjJwX2Z3KGJwLCBibngyX3J2MnBfcHJvYzIsIHNpemVvZihibngyX3J2MnBfcHJvYzIpLCBSVjJQX1BST0MyKTsKKwlyYyA9IGJueDJfZ3VuemlwKGJwLCBibngyX3J2MnBfcHJvYzEsIHNpemVvZihibngyX3J2MnBfcHJvYzEpLCAmdGV4dCwKKwkJCSAmdGV4dF9sZW4pOworCWlmIChyYykKKwkJZ290byBpbml0X2NwdV9lcnI7CisKKwlsb2FkX3J2MnBfZncoYnAsIHRleHQsIHRleHRfbGVuLCBSVjJQX1BST0MxKTsKKworCXJjID0gYm54Ml9ndW56aXAoYnAsIGJueDJfcnYycF9wcm9jMiwgc2l6ZW9mKGJueDJfcnYycF9wcm9jMiksICZ0ZXh0LAorCQkJICZ0ZXh0X2xlbik7CisJaWYgKHJjKQorCQlnb3RvIGluaXRfY3B1X2VycjsKKworCWxvYWRfcnYycF9mdyhicCwgdGV4dCwgdGV4dF9sZW4sIFJWMlBfUFJPQzIpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgUlggUHJvY2Vzc29yLiAqLwogCWNwdV9yZWcubW9kZSA9IEJOWDJfUlhQX0NQVV9NT0RFOwpAQCAtMjIyMiw3ICsyMzI3LDEzIEBACiAJZncudGV4dF9hZGRyID0gYm54Ml9SWFBfYjA2RndUZXh0QWRkcjsKIAlmdy50ZXh0X2xlbiA9IGJueDJfUlhQX2IwNkZ3VGV4dExlbjsKIAlmdy50ZXh0X2luZGV4ID0gMDsKLQlmdy50ZXh0ID0gYm54Ml9SWFBfYjA2RndUZXh0OworCisJcmMgPSBibngyX2d1bnppcChicCwgYm54Ml9SWFBfYjA2RndUZXh0LCBzaXplb2YoYm54Ml9SWFBfYjA2RndUZXh0KSwKKwkJCSAmdGV4dCwgJnRleHRfbGVuKTsKKwlpZiAocmMpCisJCWdvdG8gaW5pdF9jcHVfZXJyOworCisJZncudGV4dCA9IHRleHQ7CiAKIAlmdy5kYXRhX2FkZHIgPSBibngyX1JYUF9iMDZGd0RhdGFBZGRyOwogCWZ3LmRhdGFfbGVuID0gYm54Ml9SWFBfYjA2RndEYXRhTGVuOwpAQCAtMjI2OCw3ICsyMzc5LDEzIEBACiAJZncudGV4dF9hZGRyID0gYm54Ml9UWFBfYjA2RndUZXh0QWRkcjsKIAlmdy50ZXh0X2xlbiA9IGJueDJfVFhQX2IwNkZ3VGV4dExlbjsKIAlmdy50ZXh0X2luZGV4ID0gMDsKLQlmdy50ZXh0ID0gYm54Ml9UWFBfYjA2RndUZXh0OworCisJcmMgPSBibngyX2d1bnppcChicCwgYm54Ml9UWFBfYjA2RndUZXh0LCBzaXplb2YoYm54Ml9UWFBfYjA2RndUZXh0KSwKKwkJCSAmdGV4dCwgJnRleHRfbGVuKTsKKwlpZiAocmMpCisJCWdvdG8gaW5pdF9jcHVfZXJyOworCisJZncudGV4dCA9IHRleHQ7CiAKIAlmdy5kYXRhX2FkZHIgPSBibngyX1RYUF9iMDZGd0RhdGFBZGRyOwogCWZ3LmRhdGFfbGVuID0gYm54Ml9UWFBfYjA2RndEYXRhTGVuOwpAQCAtMjMxNCw3ICsyNDMxLDEzIEBACiAJZncudGV4dF9hZGRyID0gYm54Ml9UUEFUX2IwNkZ3VGV4dEFkZHI7CiAJZncudGV4dF9sZW4gPSBibngyX1RQQVRfYjA2RndUZXh0TGVuOwogCWZ3LnRleHRfaW5kZXggPSAwOwotCWZ3LnRleHQgPSBibngyX1RQQVRfYjA2RndUZXh0OworCisJcmMgPSBibngyX2d1bnppcChicCwgYm54Ml9UUEFUX2IwNkZ3VGV4dCwgc2l6ZW9mKGJueDJfVFBBVF9iMDZGd1RleHQpLAorCQkJICZ0ZXh0LCAmdGV4dF9sZW4pOworCWlmIChyYykKKwkJZ290byBpbml0X2NwdV9lcnI7CisKKwlmdy50ZXh0ID0gdGV4dDsKIAogCWZ3LmRhdGFfYWRkciA9IGJueDJfVFBBVF9iMDZGd0RhdGFBZGRyOwogCWZ3LmRhdGFfbGVuID0gYm54Ml9UUEFUX2IwNkZ3RGF0YUxlbjsKQEAgLTIzNjAsNyArMjQ4MywxMyBAQAogCWZ3LnRleHRfYWRkciA9IGJueDJfQ09NX2IwNkZ3VGV4dEFkZHI7CiAJZncudGV4dF9sZW4gPSBibngyX0NPTV9iMDZGd1RleHRMZW47CiAJZncudGV4dF9pbmRleCA9IDA7Ci0JZncudGV4dCA9IGJueDJfQ09NX2IwNkZ3VGV4dDsKKworCXJjID0gYm54Ml9ndW56aXAoYnAsIGJueDJfQ09NX2IwNkZ3VGV4dCwgc2l6ZW9mKGJueDJfQ09NX2IwNkZ3VGV4dCksCisJCQkgJnRleHQsICZ0ZXh0X2xlbik7CisJaWYgKHJjKQorCQlnb3RvIGluaXRfY3B1X2VycjsKKworCWZ3LnRleHQgPSB0ZXh0OwogCiAJZncuZGF0YV9hZGRyID0gYm54Ml9DT01fYjA2RndEYXRhQWRkcjsKIAlmdy5kYXRhX2xlbiA9IGJueDJfQ09NX2IwNkZ3RGF0YUxlbjsKQEAgLTIzODQsNiArMjUxMyw5IEBACiAKIAlsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWcsICZmdyk7CiAKK2luaXRfY3B1X2VycjoKKwlibngyX2d1bnppcF9lbmQoYnApOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludApAQCAtMzI1Niw3ICszMzg4LDkgQEAKIAkgKiBjb250ZXh0IGJsb2NrIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gZW5hYmxlZC4gKi8KIAlibngyX2luaXRfY29udGV4dChicCk7CiAKLQlibngyX2luaXRfY3B1cyhicCk7CisJaWYgKChyYyA9IGJueDJfaW5pdF9jcHVzKGJwKSkgIT0gMCkKKwkJcmV0dXJuIHJjOworCiAJYm54Ml9pbml0X252cmFtKGJwKTsKIAogCWJueDJfc2V0X21hY19hZGRyKGJwKTsKQEAgLTM1NTYsNyArMzY5MCw5IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlibngyX2luaXRfY2hpcChicCk7CisJaWYgKChyYyA9IGJueDJfaW5pdF9jaGlwKGJwKSkgIT0gMCkKKwkJcmV0dXJuIHJjOworCiAJYm54Ml9pbml0X3R4X3JpbmcoYnApOwogCWJueDJfaW5pdF9yeF9yaW5nKGJwKTsKIAlyZXR1cm4gMDsKQEAgLTQwMzQsNiArNDE3MCw4IEBACiAJbXNnID0gKHUzMikgKyticC0+ZndfZHJ2X3B1bHNlX3dyX3NlcTsKIAlSRUdfV1JfSU5EKGJwLCBicC0+c2htZW1fYmFzZSArIEJOWDJfRFJWX1BVTFNFX01CLCBtc2cpOwogCisJYnAtPnN0YXRzX2Jsay0+c3RhdF9Gd1J4RHJvcCA9IFJFR19SRF9JTkQoYnAsIEJOWDJfRldfUlhfRFJPUF9DT1VOVCk7CisKIAlpZiAoKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0VSREVTX0ZMQUcpICYmCiAJICAgIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwNikpIHsKIApAQCAtNDI1Miw3ICs0MzkwLDcgQEAKIH0KICNlbmRpZgogCi0vKiBDYWxsZWQgd2l0aCBkZXYtPnhtaXRfbG9jay4KKy8qIENhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2suCiAgKiBoYXJkX3N0YXJ0X3htaXQgaXMgcHNldWRvLWxvY2tsZXNzIC0gYSBsb2NrIGlzIG9ubHkgcmVxdWlyZWQgd2hlbgogICogdGhlIHR4IHF1ZXVlIGlzIGZ1bGwuIFRoaXMgd2F5LCB3ZSBnZXQgdGhlIGJlbmVmaXQgb2YgbG9ja2xlc3MKICAqIG9wZXJhdGlvbnMgbW9zdCBvZiB0aGUgdGltZSB3aXRob3V0IHRoZSBjb21wbGV4aXRpZXMgdG8gaGFuZGxlCkBAIC00MzEwLDcgKzQ0NDgsNyBAQAogCQlpcF90Y3BfbGVuID0gKHNrYi0+bmguaXBoLT5paGwgPDwgMikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CiAKIAkJc2tiLT5uaC5pcGgtPmNoZWNrID0gMDsKLQkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSBudG9ocyhtc3MgKyBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pOworCQlza2ItPm5oLmlwaC0+dG90X2xlbiA9IGh0b25zKG1zcyArIGlwX3RjcF9sZW4gKyB0Y3Bfb3B0X2xlbik7CiAJCXNrYi0+aC50aC0+Y2hlY2sgPQogCQkJfmNzdW1fdGNwdWRwX21hZ2ljKHNrYi0+bmguaXBoLT5zYWRkciwKIAkJCQkJICAgIHNrYi0+bmguaXBoLT5kYWRkciwKQEAgLTQ1MDQsNiArNDY0MiwxMCBAQAogCQluZXRfc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzICsKIAkJbmV0X3N0YXRzLT50eF9jYXJyaWVyX2Vycm9yczsKIAorCW5ldF9zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9CisJCSh1bnNpZ25lZCBsb25nKSAoc3RhdHNfYmxrLT5zdGF0X0lmSW5NQlVGRGlzY2FyZHMgKworCQlzdGF0c19ibGstPnN0YXRfRndSeERyb3ApOworCiAJcmV0dXJuIG5ldF9zdGF0czsKIH0KIApAQCAtNDk4Niw3ICs1MTI4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBCTlgyX05VTV9TVEFUUyA0NQorI2RlZmluZSBCTlgyX05VTV9TVEFUUyA0NgogCiBzdGF0aWMgc3RydWN0IHsKIAljaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwpAQCAtNTAzNiw2ICs1MTc4LDcgQEAKIAl7ICJyeF9tYWNfY3RybF9mcmFtZXMiIH0sCiAJeyAicnhfZmlsdGVyZWRfcGFja2V0cyIgfSwKIAl7ICJyeF9kaXNjYXJkcyIgfSwKKwl7ICJyeF9md19kaXNjYXJkcyIgfSwKIH07CiAKICNkZWZpbmUgU1RBVFNfT0ZGU0VUMzIob2Zmc2V0X25hbWUpIChvZmZzZXRvZihzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jaywgb2Zmc2V0X25hbWUpIC8gNCkKQEAgLTUwODYsNiArNTIyOSw3IEBACiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9NYWNDb250cm9sRnJhbWVzUmVjZWl2ZWQpLCAgICAgICAgICAgICAgICAgICAgCiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9JZkluRnJhbWVzTDJGaWx0ZXJEaXNjYXJkcyksICAgICAgICAgICAgICAgICAgCiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9JZkluTUJVRkRpc2NhcmRzKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9Gd1J4RHJvcCksCiB9OwogCiAvKiBzdGF0X0lmSENJbkJhZE9jdGV0cyBhbmQgc3RhdF9Eb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgYXJlCkBAIC01MDk2LDcgKzUyNDAsNyBAQAogCTQsMCw0LDQsNCw0LDQsNCw0LDQsCiAJNCw0LDQsNCw0LDQsNCw0LDQsNCwKIAk0LDQsNCw0LDQsNCw0LDQsNCw0LAotCTQsNCw0LDQsNCwKKwk0LDQsNCw0LDQsNCwKIH07CiAKIHN0YXRpYyB1OCBibngyXzU3MDhfc3RhdHNfbGVuX2FycltCTlgyX05VTV9TVEFUU10gPSB7CkBAIC01MTA0LDcgKzUyNDgsNyBAQAogCTQsNCw0LDQsNCw0LDQsNCw0LDQsCiAJNCw0LDQsNCw0LDQsNCw0LDQsNCwKIAk0LDQsNCw0LDQsNCw0LDQsNCw0LAotCTQsNCw0LDQsNCwKKwk0LDQsNCw0LDQsNCwKIH07CiAKICNkZWZpbmUgQk5YMl9OVU1fVEVTVFMgNgpAQCAtNTYzNCw3ICs1Nzc4LDkgQEAKIAkJfQogCX0KIAotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkKKwlpZiAoKENISVBfSUQoYnApID09IENISVBfSURfNTcwOF9BMCkgfHwKKwkgICAgKENISVBfSUQoYnApID09IENISVBfSURfNTcwOF9CMCkgfHwKKwkgICAgKENISVBfSUQoYnApID09IENISVBfSURfNTcwOF9CMSkpCiAJCWJwLT5mbGFncyB8PSBOT19XT0xfRkxBRzsKIAogCWlmIChDSElQX0lEKGJwKSA9PSBDSElQX0lEXzU3MDZfQTApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCBiODc5MjVmNi4uNTg0NWUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtMjMxLDYgKzIzMSw3IEBACiAJdTMyIHN0YXRfR2VuU3RhdDEzOwogCXUzMiBzdGF0X0dlblN0YXQxNDsKIAl1MzIgc3RhdF9HZW5TdGF0MTU7CisJdTMyIHN0YXRfRndSeERyb3A7CiB9OwogCiAKQEAgLTM0ODEsNiArMzQ4Miw4IEBACiAKICNkZWZpbmUgQk5YMl9DT01fU0NSQVRDSAkJCQkweDAwMTIwMDAwCiAKKyNkZWZpbmUgQk5YMl9GV19SWF9EUk9QX0NPVU5UCQkJCSAweDAwMTIwMDg0CisKIAogLyoKICAqICBjcF9yZWcgZGVmaW5pdGlvbgpAQCAtMzc0Nyw3ICszNzUwLDEyIEBACiAjZGVmaW5lIERNQV9SRUFEX0NIQU5TCTUKICNkZWZpbmUgRE1BX1dSSVRFX0NIQU5TCTMKIAotI2RlZmluZSBCQ01fUEFHRV9CSVRTCTEyCisvKiBVc2UgQ1BVIG5hdGl2ZSBwYWdlIHNpemUgdXAgdG8gMTZLIGZvciB0aGUgcmluZyBzaXplcy4gICovCisjaWYgKFBBR0VfU0hJRlQgPiAxNCkKKyNkZWZpbmUgQkNNX1BBR0VfQklUUwkxNAorI2Vsc2UKKyNkZWZpbmUgQkNNX1BBR0VfQklUUwlQQUdFX1NISUZUCisjZW5kaWYKICNkZWZpbmUgQkNNX1BBR0VfU0laRQkoMSA8PCBCQ01fUEFHRV9CSVRTKQogCiAjZGVmaW5lIFRYX0RFU0NfQ05UICAoQkNNX1BBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgdHhfYmQpKQpAQCAtMzc3MCw3ICszNzc4LDcgQEAKIAogI2RlZmluZSBSWF9SSU5HX0lEWCh4KSAoKHgpICYgYnAtPnJ4X21heF9yaW5nX2lkeCkKIAotI2RlZmluZSBSWF9SSU5HKHgpICgoKHgpICYgfk1BWF9SWF9ERVNDX0NOVCkgPj4gOCkKKyNkZWZpbmUgUlhfUklORyh4KSAoKCh4KSAmIH5NQVhfUlhfREVTQ19DTlQpID4+IChCQ01fUEFHRV9CSVRTIC0gNCkpCiAjZGVmaW5lIFJYX0lEWCh4KSAoKHgpICYgTUFYX1JYX0RFU0NfQ05UKQogCiAvKiBDb250ZXh0IHNpemUuICovCkBAIC00MDQ4LDYgKzQwNTYsOSBAQAogCXUzMgkJCWZsYXNoX3NpemU7CiAKIAlpbnQJCQlzdGF0dXNfc3RhdHNfc2l6ZTsKKworCXN0cnVjdCB6X3N0cmVhbV9zCSpzdHJtOworCXZvaWQJCQkqZ3VuemlwX2J1ZjsKIH07CiAKIHN0YXRpYyB1MzIgYm54Ml9yZWdfcmRfaW5kKHN0cnVjdCBibngyICpicCwgdTMyIG9mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyX2Z3LmggYi9kcml2ZXJzL25ldC9ibngyX2Z3LmgKaW5kZXggODE1ODk3NC4uMmQ3NTNkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Ml9mdy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJfZncuaApAQCAtNyw3ICs3LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGV4Y2VwdCBhcyBub3RlZCBiZWxvdy4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKLSAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1LCAyMDA2IEJyb2FkY29tIENvcnBvcmF0aW9uLgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCiAgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCkBAIC0yOCw5NDMgKzI4LDY0MSBAQAogc3RhdGljIGNvbnN0IGludCBibngyX0NPTV9iMDZGd0Jzc0xlbiA9IDB4ODg7CiBzdGF0aWMgY29uc3QgdTMyIGJueDJfQ09NX2IwNkZ3U2Jzc0FkZHIgPSAweDA4MDA1ODQwOwogc3RhdGljIGNvbnN0IGludCBibngyX0NPTV9iMDZGd1Nic3NMZW4gPSAweDFjOwotc3RhdGljIHUzMiBibngyX0NPTV9iMDZGd1RleHRbKDB4NTdiYy80KSArIDFdID0gewotCTB4MGEwMDAyMmQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4NjM2ZjZkMjAsIDB4MzIyZTM1MmUsCi0JMHgzODAwMDAwMCwgMHgwMjA1MDgwMiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAxNCwgMHgwMDAwMDAzMiwKLQkweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDAwMDAzZTgsIDB4MDAwMGVhNjAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MTAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4M2MwMjA4MDAsIDB4MjQ0MjU4NDAsCi0JMHgzYzAzMDgwMCwgMHgyNDYzNThlOCwgMHhhYzQwMDAwMCwgMHgwMDQzMjAyYiwgMHgxNDgwZmZmZCwgMHgyNDQyMDAwNCwKLQkweDNjMWQwODAwLCAweDM3YmQ3ZmZjLCAweDAzYTBmMDIxLCAweDNjMTAwODAwLCAweDI2MTAwOGI0LCAweDNjMWMwODAwLAotCTB4Mjc5YzU4NDAsIDB4MGUwMDAyZjcsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MjdiZGZmZTgsIDB4M2MxYTgwMDAsCi0JMHgzYzAyMDAwOCwgMHgwMzQyZDgyNSwgMHgzYzAzNjAxMCwgMHhhZmJmMDAxMCwgMHg4YzY1NTAwMCwgMHgzYzAyMDgwMCwKLQkweDI0NDcwZjMwLCAweDNjMDQwODAwLCAweDI0ODY1ODYwLCAweDI0MDJmZjdmLCAweDAwYTIyODI0LCAweDM0YTUzODBjLAotCTB4YWM2NTUwMDAsIDB4MDAwMDI4MjEsIDB4MjQwMjAwMzcsIDB4MjQwMzBjODAsIDB4YWY0MjAwMDgsIDB4YWY0MzAwMjQsCi0JMHhhY2M3MDAwMCwgMHgyNGE1MDAwMSwgMHgyY2EyMDAxNiwgMHgxNDQwZmZmYywgMHgyNGM2MDAwNCwgMHgyNDg0NTg2MCwKLQkweDNjMDIwODAwLCAweDI0NDIwZjNjLCAweDNjMDMwODAwLCAweDI0NjMwZTJjLCAweGFjODIwMDA0LCAweDNjMDIwODAwLAotCTB4MjQ0MjBhMmMsIDB4M2MwNTA4MDAsIDB4MjRhNTEyNjgsIDB4YWM4MjAwMGMsIDB4M2MwMjA4MDAsIDB4MjQ0MjQzZGMsCi0JMHhhYzgzMDAwOCwgMHgzYzAzMDgwMCwgMHgyNDYzMzY5OCwgMHhhYzgyMDAxNCwgMHgzYzAyMDgwMCwgMHgyNDQyM2MyNCwKLQkweGFjODMwMDE4LCAweGFjODMwMDFjLCAweDNjMDMwODAwLCAweDI0NjMwZjQ0LCAweGFjODIwMDI0LCAweDNjMDIwODAwLAotCTB4MjQ0MjQzYWMsIDB4YWM4MzAwMmMsIDB4M2MwMzA4MDAsIDB4MjQ2MzQzY2MsIDB4YWM4MjAwMzAsIDB4M2MwMjA4MDAsCi0JMHgyNDQyNDJmMCwgMHhhYzgzMDAzNCwgMHgzYzAzMDgwMCwgMHgyNDYzM2Q3OCwgMHhhYzgyMDAzYywgMHgzYzAyMDgwMCwKLQkweDI0NDIwZmQ0LCAweGFjODUwMDEwLCAweGFjODUwMDIwLCAweGFjODMwMDQwLCAweDBlMDAxMGI3LCAweGFjODIwMDUwLAotCTB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MjdiZGZmZTAsIDB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsCi0JMHhhZmJmMDAxOCwgMHhhZmIxMDAxNCwgMHg5MjAzMDAwYiwgMHgyNDAyMDAwMywgMHgxNDYyMDA1YiwgMHg5NjExMDAwOCwKLQkweDMyMjIwMDAxLCAweDEwNDAwMDA5LCAweDI3NDMwMDgwLCAweDhlMDIwMDAwLCAweDk2MDQwMDE0LCAweDAwMDIxMWMyLAotCTB4MDAwMjEwNDAsIDB4MDA2MjE4MjEsIDB4YTQ2NDAwMDAsIDB4MGEwMDAyZDAsIDB4M2MwMjA4MDAsIDB4M2MwMjA4MDAsCi0JMHg4YzQzMDAyMCwgMHgxMDYwMDAyYSwgMHgzYzAzMDgwMCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg5NzQyMDEwOCwKLQkweDhmODUwMDE4LCAweDk3NDMwMTBjLCAweDMwNDIwMDNlLCAweDAwMDIxNDAwLCAweDAwNjIxODI1LCAweGFjYTMwMDAwLAotCTB4OGY4NDAwMTgsIDB4OGY0MjAxMDAsIDB4YWM4MjAwMDQsIDB4OTc0MzAxMTYsIDB4OTc0MjAxMGUsIDB4OGY4NDAwMTgsCi0JMHgwMDAzMWMwMCwgMHgwMDQzMTAyNSwgMHhhYzgyMDAwOCwgMHg5NzQzMDExMCwgMHg5NzQ0MDExMiwgMHg4Zjg1MDAxOCwKLQkweDAwMDMxYzAwLCAweDAwODMyMDI1LCAweGFjYTQwMDBjLCAweDk3NDIwMTE0LCAweDhmODQwMDE4LCAweDMwNDJmZmZmLAotCTB4YWM4MjAwMTAsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTQsIDB4OGY4MjAwMTgsIDB4M2MwMzA4MDAsIDB4YWM0MDAwMTgsCi0JMHg5NDYyNThjZSwgMHg4Zjg0MDAxOCwgMHgzYzAzMjAwMCwgMHgwMDQzMTAyNSwgMHhhYzgyMDAxYywgMHgwZTAwMTRjYywKLQkweDI0MDQwMDAxLCAweDNjMDMwODAwLCAweDhjNjIwMDQwLCAweDI0NDIwMDAxLCAweGFjNjIwMDQwLCAweDNjMDIwODAwLAotCTB4OGM0MzAwNDQsIDB4MzIyNDAwMDQsIDB4MjQ2MzAwMDEsIDB4MTA4MDAwMTcsIDB4YWM0MzAwNDQsIDB4OGY0MjAyYjgsCi0JMHgwNDQzMDAwNywgMHg4ZTAyMDAyMCwgMHgzYzA0MDgwMCwgMHg4YzgzMDA2MCwgMHgyNDAyMDAwMSwgMHgyNDYzMDAwMSwKLQkweDBhMDAwMmYyLCAweGFjODMwMDYwLCAweDNjMDYwODAwLCAweDhjYzQwMDVjLCAweGFmNDIwMjgwLCAweDk2MDMwMDE2LAotCTB4MDAwMDEwMjEsIDB4YTc0MzAyODQsIDB4OGUwNTAwMDQsIDB4MjQ4NDAwMDEsIDB4M2MwMzEwMDAsIDB4YWY0NTAyODgsCi0JMHhhZjQzMDJiOCwgMHgwYTAwMDJmMiwgMHhhY2M0MDA1YywgMHgzMjIyMDAwMiwgMHgwYTAwMDJmMiwgMHgwMDAyMTAyYiwKLQkweDNjMDI2MDAwLCAweGFjNDAwODA4LCAweDAwMDAwMDBkLCAweDAwMDAxMDIxLCAweDhmYmYwMDE4LCAweDhmYjEwMDE0LAotCTB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmYzgsIDB4YWZiZjAwMzQsIDB4YWZiZTAwMzAsCi0JMHhhZmI3MDAyYywgMHhhZmI2MDAyOCwgMHhhZmI1MDAyNCwgMHhhZmI0MDAyMCwgMHhhZmIzMDAxYywgMHhhZmIyMDAxOCwKLQkweGFmYjEwMDE0LCAweDBlMDAwMjQ0LCAweGFmYjAwMDEwLCAweDNjMTcwODAwLCAweDNjMTYwODAwLCAweDI0MTEwMDIwLAotCTB4MjQxNTAwMzAsIDB4Mjc5NDAwMGMsIDB4Mjc5MzAwMDgsIDB4M2MxMjQwMDAsIDB4M2MxZTA4MDAsIDB4OGY4MjAwMDQsCi0JMHgzYzA0MDgwMCwgMHg4YzgzMDAyMCwgMHgxMDQzMDAwNSwgMHg4ZWUyMDBhNCwgMHhhZjgzMDAwNCwgMHgwZTAwMTU5MywKLQkweDAwMDAwMDAwLCAweDhlZTIwMGE0LCAweDhlYzMwMGEwLCAweDEwNDMwMDA0LCAweDI2YzQwMGEwLCAweDk0ODIwMDAyLAotCTB4YTc0MjAwOWUsIDB4YWVlMzAwYTQsIDB4OGY1MDAwMDAsIDB4MzIwMjAwMDcsIDB4MTA0MGZmZWUsIDB4MzIwMjAwMDEsCi0JMHgxMDQwMDAyYywgMHgzMjAyMDAwMiwgMHg4ZjQyMDEwMCwgMHhhZjQyMDAyMCwgMHg4ZjQzMDEwNCwgMHhhZjQzMDBhOCwKLQkweDkzNDIwMTBiLCAweDkzNjMwMDAwLCAweDMwNjMwMGZmLCAweDEwNzEwMDA1LCAweDMwNDQwMGZmLCAweDEwNzUwMDA2LAotCTB4MmM4MjAwMTYsIDB4MGEwMDAzMzMsIDB4MDAwMDAwMDAsIDB4YWY5NDAwMDAsIDB4MGEwMDAzMzQsIDB4MmM4MjAwMTYsCi0JMHhhZjkzMDAwMCwgMHgwYTAwMDMzNCwgMHgwMDAwMDAwMCwgMHhhZjgwMDAwMCwgMHgxNDQwMDAwNSwgMHgwMDA0MTg4MCwKLQkweDBlMDAwM2NjLCAweDAwMDAwMDAwLCAweDBhMDAwMzQwLCAweDAwMDAwMDAwLCAweDNjMDIwODAwLCAweDI0NDI1ODYwLAotCTB4MDA2MjE4MjEsIDB4OGM2MjAwMDAsIDB4MDA0MGY4MDksIDB4MDAwMDAwMDAsIDB4MTA0MDAwMDUsIDB4M2MwMzA4MDAsCi0JMHg4ZjQyMDEwNCwgMHgzYzAxNjAyMCwgMHhhYzIyMDAxNCwgMHgzYzAzMDgwMCwgMHg4YzYyMDAzNCwgMHhhZjUyMDEzOCwKLQkweDI0NDIwMDAxLCAweGFjNjIwMDM0LCAweDMyMDIwMDAyLCAweDEwNDAwMDFhLCAweDMyMDIwMDA0LCAweDhmNDIwMTQwLAotCTB4YWY0MjAwMjAsIDB4OTM2MzAwMDAsIDB4MzA2MzAwZmYsIDB4MTA3MTAwMDUsIDB4MDAwMDAwMDAsIDB4MTA3NTAwMDYsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMDM1ZCwgMHgwMDAwMDAwMCwgMHhhZjk0MDAwMCwgMHgwYTAwMDM1ZSwgMHgwMDAwMDAwMCwKLQkweGFmOTMwMDAwLCAweDBhMDAwMzVlLCAweDAwMDAwMDAwLCAweGFmODAwMDAwLCAweDBlMDAwYzdiLCAweDAwMDAwMDAwLAotCTB4M2MwNDA4MDAsIDB4OGM4MjAwMzgsIDB4YWY1MjAxNzgsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMzgsIDB4MzIwMjAwMDQsCi0JMHgxMDQwZmZhNCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDE4MCwgMHhhZjQyMDAyMCwgMHg5MzYzMDAwMCwgMHgzMDYzMDBmZiwKLQkweDEwNzEwMDA1LCAweDAwMDAwMDAwLCAweDEwNzUwMDA2LCAweDAwMDAwMDAwLCAweDBhMDAwMzc4LCAweDAwMDAwMDAwLAotCTB4YWY5NDAwMDAsIDB4MGEwMDAzNzksIDB4MDAwMDAwMDAsIDB4YWY5MzAwMDAsIDB4MGEwMDAzNzksIDB4MDAwMDAwMDAsCi0JMHhhZjgwMDAwMCwgMHg4ZjQzMDE4MCwgMHgyNDAyMGYwMCwgMHgxNDYyMDAwNSwgMHgwMDAwMDAwMCwgMHg4ZjQyMDE4OCwKLQkweGE3NDIwMDljLCAweDBhMDAwMzg3LCAweDhmYzIwMDNjLCAweDkzNjIwMDAwLCAweDE0NTEwMDA0LCAweDhmYzIwMDNjLAotCTB4MGUwMDBiYWQsIDB4MDAwMDAwMDAsIDB4OGZjMjAwM2MsIDB4YWY1MjAxYjgsIDB4MjQ0MjAwMDEsIDB4MGEwMDAzMGIsCi0JMHhhZmMyMDAzYywgMHgyN2JkZmZlOCwgMHhhZmJmMDAxMCwgMHg5NzQyMDEwOCwgMHgyNDAzMzAwMCwgMHgzMDQ0NzAwMCwKLQkweDEwODMwMDE2LCAweDI4ODIzMDAxLCAweDEwNDAwMDA3LCAweDI0MDI0MDAwLCAweDEwODAwMDBiLCAweDI0MDIyMDAwLAotCTB4MTA4MjAwMGMsIDB4MDAwMDAwMDAsIDB4MGEwMDAzYjMsIDB4MDAwMDAwMDAsIDB4MTA4MjAwMTAsIDB4MjQwMjUwMDAsCi0JMHgxMDgyMDAxMiwgMHgwMDAwMDAwMCwgMHgwYTAwMDNiMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwYTAwMDNiNSwKLQkweDAwMDAxMDIxLCAweDBlMDAwNDQyLCAweDAwMDAwMDAwLCAweDBhMDAwM2I2LCAweDhmYmYwMDEwLCAweDBlMDAwNDFhLAotCTB4MDAwMDAwMDAsIDB4MGEwMDAzYjUsIDB4MDAwMDEwMjEsIDB4MGUwMDA2NjksIDB4MDAwMDAwMDAsIDB4MGEwMDAzYjUsCi0JMHgwMDAwMTAyMSwgMHgwZTAwMTQ2NywgMHgwMDAwMDAwMCwgMHgwYTAwMDNiNSwgMHgwMDAwMTAyMSwgMHgwMDAwMDAwZCwKLQkweDAwMDAxMDIxLCAweDhmYmYwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDkzNjIwMDAwLCAweDI0MDMwMDIwLAotCTB4MzA0NDAwZmYsIDB4MTA4MzAwMDUsIDB4MjQwMjAwMzAsIDB4MTA4MjAwMDcsIDB4MDAwMDAwMDAsIDB4MGEwMDAzYzksCi0JMHgwMDAwMDAwMCwgMHgyNzgyMDAwYywgMHhhZjgyMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgyNzgyMDAwOCwKLQkweGFmODIwMDAwLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweGFmODAwMDAwLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMGQsIDB4MDNlMDAwMDgsIDB4MDAwMDEwMjEsIDB4MDNlMDAwMDgsIDB4MDAwMDEwMjEsIDB4Mjc0NDAxMDAsCi0JMHg5NDgzMDAwOCwgMHgzMDYyMDAwNCwgMHgxMDQwMDAxNywgMHgzMDYyMDAwMiwgMHg4ZjQyMDJiOCwgMHgwNDQzMDAwNywKLQkweDhjODIwMDIwLCAweDNjMDQwODAwLCAweDhjODMwMDYwLCAweDI0MDIwMDAxLCAweDI0NjMwMDAxLCAweDAzZTAwMDA4LAotCTB4YWM4MzAwNjAsIDB4YWY0MjAyODAsIDB4OTQ4MzAwMTYsIDB4M2MwNjA4MDAsIDB4YTc0MzAyODQsIDB4OGM4NTAwMDQsCi0JMHg4Y2M0MDA1YywgMHgwMDAwMTAyMSwgMHgzYzAzMTAwMCwgMHgyNDg0MDAwMSwgMHhhZjQ1MDI4OCwgMHhhZjQzMDJiOCwKLQkweDAzZTAwMDA4LCAweGFjYzQwMDVjLCAweDE0NDAwMDAzLCAweDNjMDQwODAwLCAweDAzZTAwMDA4LCAweDAwMDAxMDIxLAotCTB4OGM4MzAwODQsIDB4MjQwMjAwMDEsIDB4MjQ2MzAwMDEsIDB4MDNlMDAwMDgsIDB4YWM4MzAwODQsIDB4Mjc0NTAxMDAsCi0JMHgzYzA0MDgwMCwgMHg4YzgyMDA4OCwgMHg5NGEzMDAwYywgMHgyNDQyMDAwMSwgMHgwMDdhMTgyMSwgMHhhYzgyMDA4OCwKLQkweDhjYTQwMDE4LCAweDkwNjY0MDAwLCAweGFmNDQwMDM4LCAweDhjYTIwMDFjLCAweDI0MDNmZmY4LCAweDAwMDYzNjAwLAotCTB4MDA0MzEwMjQsIDB4MzQ0MjAwMDQsIDB4M2MwMzAwMDUsIDB4YWY0MjAwM2MsIDB4YWY0MzAwMzAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhhZjQ2MDQwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDNjMDIwMDA2LCAweDM0NDIwMDAxLCAweGFmNDIwMDMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4OGY0MjAwMDAsIDB4MzA0MjAwMTAsIDB4MTA0MGZmZmQsIDB4MDAwMDEwMjEsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsCi0JMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwgMHgyN2JkZmZlOCwgMHhhZmIwMDAxMCwgMHgyNzUwMDEwMCwgMHgxMDYwMDAxZSwKLQkweGFmYmYwMDE0LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODMwMDE4LCAweDhlMDIwMDE4LCAweGFjNjIwMDAwLAotCTB4OGY4NDAwMTgsIDB4OTYwMjAwMGMsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsCi0JMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAxNCwgMHg4Zjg0MDAxOCwKLQkweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweGFjODMwMDE4LCAweDk2MDIwMDA4LCAweDNjMDMwODAwLCAweDk0NjQ1OGNlLAotCTB4OGY4NTAwMTgsIDB4MDAwMjE0MDAsIDB4MDA0NDEwMjUsIDB4MjQwNDAwMDEsIDB4MGUwMDE0Y2MsIDB4YWNhMjAwMWMsCi0JMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgyN2JkZmZlOCwgMHhhZmIwMDAxMCwKLQkweDI3NTAwMTAwLCAweGFmYmYwMDE0LCAweDkyMDIwMDA5LCAweDE0NDAwMDAzLCAweDNjMDIwODAwLCAweDBhMDAwNDZjLAotCTB4MjQwMjAwMDEsIDB4OGM0MzAwMjAsIDB4MTA2MDAwMWYsIDB4MDAwMDEwMjEsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHg4ZjgzMDAxOCwgMHg4ZTAyMDAxOCwgMHhhYzYyMDAwMCwgMHg4Zjg0MDAxOCwgMHg5NjAyMDAwYywgMHhhYzgyMDAwNCwKLQkweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LCAweGFjNjAwMDEwLAotCTB4OGY4MjAwMTgsIDB4YWM0MDAwMTQsIDB4OGY4NDAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4YWM4MzAwMTgsCi0JMHg5NjAyMDAwOCwgMHgzYzAzMDgwMCwgMHg5NDY0NThjZSwgMHg4Zjg1MDAxOCwgMHgwMDAyMTQwMCwgMHgwMDQ0MTAyNSwKLQkweDI0MDQwMDAxLCAweDBlMDAxNGNjLCAweGFjYTIwMDFjLCAweDAwMDAxMDIxLCAweDhmYmYwMDE0LCAweDhmYjAwMDEwLAotCTB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwYjA4MDAsIDB4OGQ2ODA4YjAsIDB4M2MwNzA4MDAsIDB4MjRlNzAwYjAsCi0JMHgwMDA4NDkwMCwgMHgwMTI3MTgyMSwgMHhhYzY0MDAwMCwgMHg5MzYyMDAwNSwgMHg5NzY2MDAwOCwgMHgwMGU5NTAyMSwKLQkweDkzNjMwMDIzLCAweDkzNjQwMDNmLCAweDI1MDgwMDAxLCAweDAwMDIxNjAwLCAweDAwMDYzNDAwLCAweDAwNDYxMDI1LAotCTB4MDAwMzFhMDAsIDB4MDA0MzEwMjUsIDB4MDA4MjIwMjUsIDB4YWQ0NDAwMDQsIDB4OTM2MjAwN2UsIDB4OTM2NjAwN2YsCi0JMHg4ZjYzMDE3OCwgMHg5MzY0MDA3YSwgMHgwMDAyMTYwMCwgMHgwMDA2MzQwMCwgMHgwMDQ2MTAyNSwgMHgwMDAzMWEwMCwKLQkweDAwNDMxMDI1LCAweDAwODIyMDI1LCAweGFkNDQwMDA4LCAweDkzNjIwMDgwLCAweDkzNjMwMDdkLCAweDMxMDgwMDdmLAotCTB4MDE0MDM4MjEsIDB4YWQ2ODA4YjAsIDB4MDAwMjE2MDAsIDB4MDAwMzFjMDAsIDB4MDA0MzEwMjUsIDB4MDA0NTEwMjUsCi0JMHgwM2UwMDAwOCwgMHhhY2UyMDAwYywgMHgyN2JkZmZiOCwgMHhhZmIzMDAyYywgMHgwMDAwOTgyMSwgMHhhZmJlMDA0MCwKLQkweDAwMDBmMDIxLCAweGFmYjUwMDM0LCAweDI3NTUwMTAwLCAweGFmYmYwMDQ0LCAweGFmYjcwMDNjLCAweGFmYjYwMDM4LAotCTB4YWZiNDAwMzAsIDB4YWZiMjAwMjgsIDB4YWZiMTAwMjQsIDB4YWZiMDAwMjAsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsCi0JMHg5NmEyMDAwOCwgMHg4ZjU0MDEwMCwgMHg4ZWIxMDAxOCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAzNywgMHgwMmEwYjgyMSwKLQkweDhmNjMwMDU0LCAweDI2MjJmZmZmLCAweDAwNDMxMDIzLCAweDE4NDAwMDA2LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDAxNWMsIDB4MGEwMDA0ZTUsIDB4MDAwMDIwMjEsIDB4OGY2MjAwNGMsIDB4MDIyMjEwMjMsCi0JMHgxODQwMDAyOCwgMHgwMDAwMjAyMSwgMHg5MzY1MDEyMCwgMHg5MzY0MDEyMSwgMHgzYzAzMDgwMCwgMHg4YzYyMDA4YywKLQkweDMwODQwMGZmLCAweDI0NDIwMDAxLCAweDMwYTUwMGZmLCAweDAwODAzODIxLCAweDE0ODUwMDBiLCAweGFjNjIwMDhjLAotCTB4M2MwNDA4MDAsIDB4OGM4MzAwOTAsIDB4MjQ2MzAwMDEsIDB4YWM4MzAwOTAsIDB4OTM2MjAxMjIsIDB4MzA0MjAwMDEsCi0JMHgwMDAyMTAyMywgMHgzMDQyMDAwNSwgMHgwYTAwMDRlNSwgMHgzNDQ0MDAwNCwgMHgyNzY2MDEwMCwgMHgwMDA0MTA4MCwKLQkweDAwYzIxMDIxLCAweDhjNDMwMDAwLCAweDAyMjMxODIzLCAweDA0NjAwMDA0LCAweDI0ODIwMDAxLCAweDMwNDQwMDA3LAotCTB4MTQ4NWZmZjksIDB4MDAwNDEwODAsIDB4MTA4NzAwMDcsIDB4M2MwMzA4MDAsIDB4YTM2NDAxMjEsIDB4OGM2MjAwOTQsCi0JMHgyNDA0MDAwNSwgMHgyNDQyMDAwMSwgMHgwYTAwMDRlNSwgMHhhYzYyMDA5NCwgMHgyNDA0MDAwNCwgMHgwMDgwOTgyMSwKLQkweDkzNjIwMDNmLCAweDMwNDQwMGZmLCAweDM4ODMwMDE2LCAweDJjNjMwMDAxLCAweDM4ODIwMDEwLCAweDJjNDIwMDAxLAotCTB4MDA2MjE4MjUsIDB4MTQ2MDAwMGMsIDB4MjQwMjAwMDEsIDB4Mzg4MzAwMDgsIDB4MmM2MzAwMDEsIDB4Mzg4MjAwMTQsCi0JMHgyYzQyMDAwMSwgMHgwMDYyMTgyNSwgMHgxNDYwMDAwNSwgMHgyNDAyMDAwMSwgMHgyNDAyMDAxMiwgMHgxNDgyMDAwMiwKLQkweDAwMDAxMDIxLCAweDI0MDIwMDAxLCAweDEwNDAwMDA5LCAweDAwMDAwMDAwLCAweDhlYTIwMDIwLCAweDhmNjMwMDQwLAotCTB4MDA0MGIwMjEsIDB4MDA0MzEwMjMsIDB4NWM0MDAwMTAsIDB4OGY3NjAwNDAsIDB4MGEwMDA1MTEsIDB4MDAwMDAwMDAsCi0JMHg5MzQzMDEwYiwgMHgyNDAyMDAwNCwgMHgxNDYyMDAwYSwgMHg4ZWI2MDAyMCwgMHg4ZjYzMDA0MCwgMHgzYzAyMTAwMCwKLQkweDAwNzYxODIzLCAweDAwNDMxMDJhLCAweDEwNDAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLAotCTB4MjQwMDAyZmEsIDB4OTM0MzAxMGIsIDB4MjQwMjAwMDQsIDB4NTQ2MjAwMGIsIDB4OTZhMjAwMDgsIDB4MjQwMjAwMDEsCi0JMHhhZmEyMDAxMCwgMHg5NmEyMDAwOCwgMHgyNDAzMDAwMSwgMHhhZmEzMDAxOCwgMHg4ZWIyMDAxYywgMHgzNjczMDAwMiwKLQkweDMwNDIwMDIwLCAweDBhMDAwNTI2LCAweGFmYTIwMDE0LCAweDM2NzMwMDgwLCAweDMwNDIwMDAyLCAweDEwNDAwMDAzLAotCTB4YWZhMDAwMTgsIDB4MGEwMDA1MjYsIDB4OGViMjAwMWMsIDB4OGViMjAwMTQsIDB4MjQwMmZmZmIsIDB4MDI2MjgwMjQsCi0JMHgxMjAwMDAyYSwgMHgzYzAzMDgwMCwgMHg4YzYyMDAzMCwgMHgwMjAyMTAyNCwgMHgxMDQwMDAyNiwgMHgzYzAyMDgwMCwKLQkweDhjNDMwMDIwLCAweDEwNjAwMDI0LCAweDMyNjIwMDA0LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODMwMDE4LAotCTB4OGY0MjAxMDAsIDB4YWM2MjAwMDAsIDB4OGY4NDAwMTgsIDB4MDI0MDE4MjEsIDB4MzI2MjAwMDIsIDB4YWM5MDAwMDQsCi0JMHg4Zjg0MDAxOCwgMHg1NDQwMDAwMSwgMHgwMmMwMTgyMSwgMHhhYzgzMDAwOCwgMHg4ZjgzMDAxOCwgMHg4ZWUyMDAyMCwKLQkweGFjNjIwMDBjLCAweDhmODQwMDE4LCAweDhmNjIwMDQwLCAweGFjODIwMDEwLCAweDhmODMwMDE4LCAweDhlZTIwMDE4LAotCTB4YWM2MjAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsCi0JMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwgMHgzYzAyNDAxMCwgMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywKLQkweGFjYTMwMDFjLCAweDMyNjIwMDA0LCAweDEwNDAwMDYzLCAweDAwMDAzODIxLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4M2MwMzgwMDAsIDB4MDI4MjEwMjUsIDB4YTM2MDAwN2MsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDAyMywgMHgzMDQyMDA4MCwgMHgxMDQwMDAxMSwgMHgwMDAwMDAwMCwKLQkweDhmNjUwMDVjLCAweDhmNjMwMDRjLCAweDk3NjQwMDNjLCAweDhmNjIwMDY0LCAweDAwYTMyODIzLCAweDAwODUyODIxLAotCTB4MDBhMjEwMmIsIDB4NTQ0MDAwMDYsIDB4M2MwMjNmZmYsIDB4OTM2MjAwMjMsIDB4MzA0MjAwN2YsIDB4YTM2MjAwMjMsCi0JMHhhZjcxMDA2NCwgMHgzYzAyM2ZmZiwgMHgwYTAwMDU4MCwgMHgzNDQyZmZmZiwgMHg4ZjYyMDA1YywgMHgwMjIyMTAyMywKLQkweDA0NDAwMDExLCAweDAwMDAwMDAwLCAweDhmNjUwMDVjLCAweDhmNjMwMDY0LCAweDk3NjQwMDNjLCAweDNjMDIzZmZmLAotCTB4MzQ0MmZmZmYsIDB4YWY3MTAwNjQsIDB4MDBhMzI4MjMsIDB4MDA4NTI4MjEsIDB4MDA0NTEwMmIsIDB4MTA0MDAwMDQsCi0JMHgwMjI1MTAyMSwgMHgzYzA1M2ZmZiwgMHgzNGE1ZmZmZiwgMHgwMjI1MTAyMSwgMHhhZjYyMDA1YywgMHgyNDA3MDAwMSwKLQkweGFmNzEwMDRjLCAweDhmNjIwMDU0LCAweDE2MjIwMDA1LCAweDAwMDAwMDAwLCAweDkzNjIwMDIzLCAweDMwNDIwMDQwLAotCTB4MTA0MDAwMTcsIDB4MjQwMjAwMDEsIDB4OTc2MjAwNmEsIDB4MDAwMjI4ODAsIDB4NTBhMDAwMDEsIDB4MjQwNTAwMDEsCi0JMHg5NzYzMDA2OCwgMHg5MzY0MDA4MSwgMHgzYzAyMDgwMCwgMHg4YzQ2MDA0YywgMHgwMDY1MjgyMSwgMHgwMDg1MjgwNCwKLQkweDAwYzUxMDJiLCAweDU0NDAwMDAxLCAweDAwYTAzMDIxLCAweDNjMDIwODAwLCAweDhjNDQwMDUwLCAweDAwYzQxODJiLAotCTB4NTQ2MDAwMDEsIDB4MDBjMDIwMjEsIDB4OGY0MjAwNzQsIDB4MjQwM2ZmZmUsIDB4MDA4MzI4MjQsIDB4MDBhMjEwMjEsCi0JMHhhZjYyMDAwYywgMHg5MzYyMDA4MiwgMHgzMDQyMDA4MCwgMHg1MDQwMDAwMSwgMHhhMzYwMDA4MSwgMHgzYzAyODAwMCwKLQkweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweGFmNDIwMDIwLCAweDkzNjMwMDdlLCAweDkzNjIwMDdhLCAweDEwNjIwMDA0LAotCTB4MDAwMDAwMDAsIDB4MGUwMDEzYzQsIDB4MDAwMDAwMDAsIDB4MDA0MDM4MjEsIDB4NTRlMDAwMDEsIDB4MjQxZTAwMDEsCi0JMHg4ZjcwMDA0MCwgMHg4ZjYyMDA0MCwgMHgxNDUyMDAwMywgMHgwMDUyMTAyMywgMHgwYTAwMDViZiwgMHgwMDAwMTAyMSwKLQkweDI4NDIwMDAxLCAweDEwNDAwMDQxLCAweDhmYTIwMDEwLCAweDBlMDAwZmFlLCAweDAyNDAyMDIxLCAweGFmNzIwMDQwLAotCTB4OTM2MjAwM2UsIDB4MzA0MjAwMDEsIDB4MTQ0MDAwMGIsIDB4M2MwMjkwMDAsIDB4OTM2MjAwMjIsIDB4MjQ0MjAwMDEsCi0JMHhhMzYyMDAyMiwgMHg5MzYzMDAyMiwgMHgzYzAyMDgwMCwgMHg4YzQ0MDA5OCwgMHgwMDY0MTgyYiwgMHgxNDYwMDAyNywKLQkweDNjMDIwODAwLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLAotCTB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsCi0JMHgzNDQyMDAwMSwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwgMHgwMjgzMTgyNSwgMHhhZjQzMDAyMCwKLQkweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAyODAyMDIxLCAweDBlMDAwNDcwLCAweDI0MDUwMjczLCAweDBhMDAwNWYyLAotCTB4MjQwNTAwMDEsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsCi0JMHhhZjU0MDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHgyNDA1MDAwMSwgMHgyNDAyMDAwMSwgMHhhNzYyMDAxMiwKLQkweGEzNjAwMDIyLCAweDBhMDAwNWZlLCAweDJjYTIwMDAxLCAweDk3NDMwMDdhLCAweDk0NDQwMDJhLCAweDAwMDAyODIxLAotCTB4MDA2NDE4MjEsIDB4MzA2M2ZmZmUsIDB4YTc2MzAwMTIsIDB4MmNhMjAwMDEsIDB4MDAwMjEwMjMsIDB4MDNjMmYwMjQsCi0JMHg4ZmEyMDAxMCwgMHgxMDQwMDAwNCwgMHg4ZmEzMDAxNCwgMHgwZTAwMTNjMSwgMHgwMDAwMDAwMCwgMHg4ZmEzMDAxNCwKLQkweDEwNjAwMDAzLCAweDAwMDAwMDAwLCAweDBlMDAxMGViLCAweDAwMDAwMDAwLCAweDEzYzAwMDFmLCAweDNjMDI5MDAwLAotCTB4MzQ0MjAwMDEsIDB4MDI4MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwKLQkweDM0NjMwMDAxLCAweDAyODMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAyODAyMDIxLAotCTB4MGUwMDA0NzAsIDB4MjQwNTAzNmMsIDB4MGEwMDA2MmIsIDB4OGZhMjAwMTgsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjU0MDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwKLQkweDhmYTIwMDE4LCAweDUwNDAwMDJmLCAweDk2YTIwMDA4LCAweDhmNjIwMDQ4LCAweDhmNjMwMDI0LCAweDAwNzYxODIxLAotCTB4YWY2MzAwNDgsIDB4OTc2NDAwM2MsIDB4MDA1MDEwMjMsIDB4MDA0NDEwMmIsIDB4MTA0MDAwMjUsIDB4M2MwMjkwMDAsCi0JMHgzNDQyMDAwMSwgMHgzYzA0MDgwMCwgMHg4YzgzMDA4MCwgMHg4ZjQ1MDEwMCwgMHgzYzA2ODAwMCwgMHgyNDYzMDAwMSwKLQkweDAwYTIxMDI1LCAweGFjODMwMDgwLCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDYxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsIDB4MzQ0MjAwMDQsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsCi0JMHgzNDYzMDAwMSwgMHgwMGEzMTgyNSwgMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMGEwMjAyMSwKLQkweDBlMDAwNDcwLCAweDI0MDUwMzhhLCAweDBhMDAwNjViLCAweDk2YTIwMDA4LCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsIDB4YWY0NTAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsCi0JMHg5NmEyMDAwOCwgMHg4ZmJmMDA0NCwgMHg4ZmJlMDA0MCwgMHg4ZmI3MDAzYywgMHg4ZmI2MDAzOCwgMHg4ZmI1MDAzNCwKLQkweDhmYjQwMDMwLCAweDhmYjMwMDJjLCAweDhmYjIwMDI4LCAweDhmYjEwMDI0LCAweDhmYjAwMDIwLCAweDAwMDIxMDQyLAotCTB4MzA0MjAwMDEsIDB4MDNlMDAwMDgsIDB4MjdiZDAwNDgsIDB4MjdiZGZmZTAsIDB4YWZiZjAwMTgsIDB4OTc0MjAxMDgsCi0JMHgyNDAzMDAxOSwgMHgzMDQ0MDBmZiwgMHgxMDgzMDA2NSwgMHgyODgyMDAxYSwgMHgxMDQwMDAxYSwgMHgyODgyMDAwYSwKLQkweDEwNDAwMDBmLCAweDI4ODIwMDA4LCAweDEwNDAwMDQwLCAweDI0MDIwMDAxLCAweDEwODIwMDNhLCAweDI4ODIwMDAyLAotCTB4NTA0MDAwMDUsIDB4MjQwMjAwMDYsIDB4MTA4MDAwMzIsIDB4M2MwMjYwMDAsIDB4MGEwMDA2ZmIsIDB4MDAwMDAwMDAsCi0JMHgxMDgyMDAzZCwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmYiwgMHgwMDAwMDAwMCwgMHgyNDAyMDAwYiwgMHgxMDgyMDA0NCwKLQkweDI4ODIwMDBiLCAweDE0NDAwMDRiLCAweDI0MDIwMDBlLCAweDEwODIwMDQ1LCAweDAwMDAwMDAwLCAweDBhMDAwNmZiLAotCTB4MDAwMDAwMDAsIDB4MjQwMjAwMjAsIDB4MTA4MjAwNjIsIDB4Mjg4MjAwMjEsIDB4MTA0MDAwMGUsIDB4MjQwMjAwMWMsCi0JMHgxMDgyMDA0YywgMHgyODgyMDAxZCwgMHgxMDQwMDAwNSwgMHgyNDAyMDAxYiwgMHgxMDgyMDA0MywgMHgwMDAwMDAwMCwKLQkweDBhMDAwNmZiLCAweDAwMDAwMDAwLCAweDI0MDIwMDFmLCAweDEwODIwMDUwLCAweDAwMDAwMDAwLCAweDBhMDAwNmZiLAotCTB4MDAwMDAwMDAsIDB4MjQwMjAwYzEsIDB4MTA4MjAwNDIsIDB4Mjg4MjAwYzIsIDB4MTA0MDAwMDUsIDB4MjQwMjAwODAsCi0JMHgxMDgyMDAyMSwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmYiwgMHgwMDAwMDAwMCwgMHgyNDAyMDBjMiwgMHgxMDgyMDAzZCwKLQkweDI0MDIwMGM5LCAweDUwODIwMDQ5LCAweGFmYTAwMDEwLCAweDBhMDAwNmZiLCAweDAwMDAwMDAwLCAweDBlMDAxMTYzLAotCTB4YWM0MDA4MDgsIDB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0NDQ0NDgsIDB4M2MwMzA4MDAsCi0JMHhhYzY0MDA2NCwgMHgwZTAwMTE2MywgMHgwMDAwMDAwMCwgMHgzYzAyNjAwMCwgMHg4YzQ0NDQ0OCwgMHgzYzAzMDgwMCwKLQkweDBhMDAwNmZjLCAweGFjNjQwMDY4LCAweDhmNDQwMTAwLCAweDBlMDAwNmZmLCAweDAwMDAwMDAwLCAweDNjMDI2MDAwLAotCTB4OGM0NDQ0NDgsIDB4M2MwMzA4MDAsIDB4MGEwMDA2ZmMsIDB4YWM2NDAwNmMsIDB4MGUwMDExOTEsIDB4MDAwMDAwMDAsCi0JMHgwYTAwMDZmZCwgMHg4ZmJmMDAxOCwgMHg4ZjQ0MDEwMCwgMHgwZTAwMTFiYiwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmZCwKLQkweDhmYmYwMDE4LCAweDBlMDAxMjAyLCAweDAwMDAwMDAwLCAweDBhMDAwNmZkLCAweDhmYmYwMDE4LCAweDAwMDAwMDBkLAotCTB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsIDB4MGUwMDA4MjYsIDB4MDAwMDAwMDAsIDB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsCi0JMHg4ZjQ0MDEwMCwgMHgwZTAwMTI2NCwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmZCwgMHg4ZmJmMDAxOCwgMHgwZTAwMTM0ZSwKLQkweDAwMDAwMDAwLCAweDBhMDAwNmZkLCAweDhmYmYwMDE4LCAweDBlMDAwODdjLCAweDI3NDQwMTAwLCAweDBhMDAwNmZkLAotCTB4OGZiZjAwMTgsIDB4OGY2NDAwNDAsIDB4MGUwMDBmYWUsIDB4MDAwMDAwMDAsIDB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsCi0JMHg4ZjQ0MDEwMCwgMHgwZTAwMTA1OSwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmZCwgMHg4ZmJmMDAxOCwgMHgwZTAwMTQxNywKLQkweDAwMDAwMDAwLCAweDBhMDAwNmZkLCAweDhmYmYwMDE4LCAweGFmYTAwMDE0LCAweDhmNDQwMTAwLCAweDhmNDUwMTE4LAotCTB4OGY0NjAxMWMsIDB4MGUwMDE0MzksIDB4OGY0NzAxMjAsIDB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsIDB4MDAwMDAwMGQsCi0JMHg4ZmJmMDAxOCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxMCwgMHg5NzQyMDEwYywKLQkweDE0NDAwMDVlLCAweDAwODAzODIxLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAwZTIxMDI1LCAweGFmNDIwMDIwLAotCTB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwMjMsCi0JMHgzMDQyMDAxMCwgMHgxNDQwMDAyNiwgMHgzYzAzMDgwMCwgMHg4ZjYzMDA3NCwgMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwKLQkweDAwNjIxODI0LCAweGFmNjMwMDc0LCAweDkzNjIwMDA1LCAweDM0NDIwMDAxLCAweGEzNjIwMDA1LCAweDhmNjMwMDRjLAotCTB4OGY2MjAwNTQsIDB4MTA2MjAwMjEsIDB4MjQwNDAwMDEsIDB4OTc2MjAwNmEsIDB4MDAwMjI4ODAsIDB4NTBhMDAwMDEsCi0JMHgyNDA1MDAwMSwgMHg5NzYzMDA2OCwgMHg5MzY0MDA4MSwgMHgzYzAyMDgwMCwgMHg4YzQ2MDA0YywgMHgwMDY1MjgyMSwKLQkweDAwODUyODA0LCAweDAwYzUxMDJiLCAweDU0NDAwMDAxLCAweDAwYTAzMDIxLCAweDNjMDIwODAwLCAweDhjNDQwMDUwLAotCTB4MDBjNDE4MmIsIDB4NTQ2MDAwMDEsIDB4MDBjMDIwMjEsIDB4OGY0MjAwNzQsIDB4MjQwM2ZmZmUsIDB4MDA4MzI4MjQsCi0JMHgwMGEyMTAyMSwgMHhhZjYyMDAwYywgMHgwYTAwMDczZCwgMHgyNDA0MDAwMSwgMHg4YzYyMDBhOCwgMHgwMDAwMjAyMSwKLQkweDI0NDIwMDAxLCAweGFjNjIwMGE4LCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwNDRkLCAweDNjMDI4MDAwLAotCTB4MzQ0MjAwMDEsIDB4MDBlMjEwMjUsIDB4YWY0MjAwMjAsIDB4MTA4MDAwMWYsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMGUyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLAotCTB4MDBlMzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDBlMDIwMjEsIDB4MGUwMDA0NzAsCi0JMHgyNDA1MDQ1NSwgMHgwYTAwMDc2MSwgMHgwMDAwMDAwMCwgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNDcwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDBlMDAxMTYzLAotCTB4MDAwMDAwMDAsIDB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MjdiZGZmZDgsIDB4YWZiZjAwMjQsCi0JMHhhZmI0MDAyMCwgMHhhZmIzMDAxYywgMHhhZmIyMDAxOCwgMHhhZmIxMDAxNCwgMHhhZmIwMDAxMCwgMHg5MzYzMDAwNSwKLQkweDAwODA5ODIxLCAweDI0MDIwMDMwLCAweDMwNjMwMDMwLCAweDE0NjIwMGFjLCAweDAwYTBhMDIxLCAweDNjMDIwODAwLAotCTB4OGM0MzAwMjAsIDB4MTA2MDAwYTYsIDB4MDAwMDAwMDAsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MzAwMTgsCi0JMHhhYzczMDAwMCwgMHg5MzYyMDBjNCwgMHgzMDQyMDAwMiwgMHgxMDQwMDAwNCwgMHgyNDAyMDAwMSwgMHg4ZjgzMDAxOCwKLQkweDBhMDAwNzg0LCAweDAwMDAwMDAwLCAweDhmODMwMDE4LCAweDI0MDIwMDAzLCAweGFjNjIwMDA0LCAweDhmNjIwMGRjLAotCTB4OGY2MzAwNDAsIDB4MDA0MzEwMjMsIDB4MTg0MDAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsCi0JMHgyNDAwMDUwOSwgMHg4Zjg0MDAxOCwgMHg4ZjYyMDBkYywgMHhhYzgyMDAwOCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwYywKLQkweDhmODIwMDE4LCAweGFjNDAwMDEwLCAweDhmODMwMDE4LCAweDhmNjIwMDRjLCAweDNjMTAwODAwLCAweGFjNjIwMDE0LAotCTB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4MjYxMjU4YzAsIDB4MDAwMDIwMjEsIDB4YWNhMzAwMTgsCi0JMHg5NjQyMDAwZSwgMHg4Zjg1MDAxOCwgMHgzYzAzNDAxMCwgMHgwMDQzMTAyNSwgMHgwZTAwMTRjYywgMHhhY2EyMDAxYywKLQkweDhmODMwMDE4LCAweGFjNzMwMDAwLCAweDkzNjIwMDNlLCAweDkzNjMwMDNmLCAweDhmODQwMDE4LCAweDAwMDIxMjAwLAotCTB4MDA2MjE4MjUsIDB4YWM4MzAwMDQsIDB4OTM2MjAwODEsIDB4OTM2MzAwODIsIDB4OGY4NDAwMTgsIDB4MDAwMjE2MDAsCi0JMHgwMDAzMWMwMCwgMHgwMDQzMTAyNSwgMHhhYzgyMDAwOCwgMHg4ZjgzMDAxOCwgMHg4ZjYyMDA0MCwgMHhhYzYyMDAwYywKLQkweDhmODQwMDE4LCAweDhmNjIwMDQ4LCAweGFjODIwMDEwLCAweDhmNzEwMDRjLCAweDhmODIwMDE4LCAweGFjNTEwMDE0LAotCTB4OGY2MjAwNTAsIDB4OGY4NTAwMTgsIDB4MDA0MDE4MjEsIDB4MDIyMjEwMjMsIDB4NWM0MDAwMDEsIDB4MDIyMDE4MjEsCi0JMHgwMDAwMjAyMSwgMHhhY2EzMDAxOCwgMHg5NjQyMDAwZSwgMHg4Zjg1MDAxOCwgMHgzYzAzYzAwYiwgMHgwMDQzMTAyNSwKLQkweDBlMDAxNGNjLCAweGFjYTIwMDFjLCAweDhmNjIwMDU0LCAweDhmODQwMDE4LCAweDAwNDAxODIxLCAweDAyMjIxMDIzLAotCTB4NWM0MDAwMDEsIDB4MDIyMDE4MjEsIDB4YWM4MzAwMDAsIDB4OGY4NDAwMTgsIDB4OGY2MzAwNTgsIDB4YWM4MzAwMDQsCi0JMHg5MzYyMDAyMywgMHgzMDQyMDAxMCwgMHgxMDQwMDAwNCwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAxOCwgMHgwYTAwMDdkZCwKLQkweDhmNjIwMTQ4LCAweDhmODMwMDE4LCAweDhmNjIwMDVjLCAweGFjNjIwMDA4LCAweDhmODMwMDE4LCAweDhmNjIwMDYwLAotCTB4YWM2MjAwMGMsIDB4OGY4NDAwMTgsIDB4OGY2MjAwNjQsIDB4YWM4MjAwMTAsIDB4OTc2MzAwNjgsIDB4OTc2MjAwNmEsCi0JMHg4Zjg0MDAxOCwgMHgwMDAzMWMwMCwgMHgwMDQzMTAyNSwgMHhhYzgyMDAxNCwgMHg4Zjg1MDAxOCwgMHgwMDAwMjAyMSwKLQkweDI0MDJmZmZmLCAweDI2MDM1OGMwLCAweGFjYTIwMDE4LCAweDk0NjIwMDBlLCAweDhmODUwMDE4LCAweDNjMDNjMDBjLAotCTB4MDA0MzEwMjUsIDB4MGUwMDE0Y2MsIDB4YWNhMjAwMWMsIDB4OGY4NDAwMTgsIDB4OGY2MzAwMTgsIDB4YWM4MzAwMDAsCi0JMHg5MzYyMDBjNCwgMHgzMDQyMDAwMiwgMHgxMDQwMDAwNiwgMHgwMDAwMDAwMCwgMHg5NzYyMDBjOCwgMHg4ZjgzMDAxOCwKLQkweDMwNDJmZmZmLCAweDBhMDAwODAzLCAweGFjNjIwMDA0LCAweDhmODIwMDE4LCAweGFjNDAwMDA0LCAweDhmODMwMDE4LAotCTB4OGY2MjAwNmMsIDB4YWM2MjAwMDgsIDB4OGY4NDAwMTgsIDB4OGY2MjAwZGMsIDB4YWM4MjAwMGMsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAxMCwgMHg5MzYyMDAwNSwgMHg4ZjgzMDAxOCwgMHgwMDAyMTYwMCwgMHgwMDU0MTAyNSwgMHhhYzYyMDAxNCwKLQkweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDI2MDI1OGMwLCAweGFjYTMwMDE4LAotCTB4OTQ0MzAwMGUsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMGQsIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsCi0JMHgwZTAwMTIyZSwgMHgwMjYwMjAyMSwgMHg4ZmJmMDAyNCwgMHg4ZmI0MDAyMCwgMHg4ZmIzMDAxYywgMHg4ZmIyMDAxOCwKLQkweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDI4LCAweDI3YmRmZmUwLCAweGFmYjAwMDEwLAotCTB4Mjc1MDAxMDAsIDB4YWZiZjAwMTgsIDB4YWZiMTAwMTQsIDB4OTYwMzAwMGMsIDB4MjQwMjAwYzEsIDB4NTQ2MjAwMjQsCi0JMHg4ZTA0MDAwMCwgMHgzYzAyOTAwMCwgMHg4ZjQ1MDEwMCwgMHgzNDQyMDAwMSwgMHgzYzAzODAwMCwgMHgwMGEyMTAyNSwKLQkweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDdkLAotCTB4M2MwMzgwMDAsIDB4MzQ0MjAwMDQsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsIDB4MDBhMzE4MjUsCi0JMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMGEwMjAyMSwgMHgwZTAwMDQ3MCwgMHgyNDA1MDViMiwKLQkweDBhMDAwODc4LCAweDhmYmYwMDE4LCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLAotCTB4M2MwMzEwMDAsIDB4YWY0NTAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsIDB4MGEwMDA4NzgsIDB4OGZiZjAwMTgsCi0JMHg4ZjY1MDA0YywgMHgyNDA2MDAwMSwgMHgwZTAwMTJhMywgMHgyNDA3MDViZSwgMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwKLQkweDk2MTEwMDBjLCAweDEwNjAwMDFkLCAweDhlMTAwMDAwLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LAotCTB4YWM1MDAwMDAsIDB4OGY4NDAwMTgsIDB4MDAxMTE0MDAsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsCi0JMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4Zjg0MDAxOCwgMHgyNDAyMDVjMSwKLQkweGFjODIwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLAotCTB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTksIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsCi0JMHhhY2EzMDAxYywgMHg4ZmJmMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwKLQkweDI3YmRmZmIwLCAweGFmYjUwMDNjLCAweDAwMDBhODIxLCAweGFmYmUwMDQ4LCAweDAwMDBmMDIxLCAweGFmYjcwMDQ0LAotCTB4MDAwMGI4MjEsIDB4YWZiMzAwMzQsIDB4MDAwMDk4MjEsIDB4YWZiNjAwNDAsIDB4MDA4MGIwMjEsIDB4YWZiZjAwNGMsCi0JMHhhZmI0MDAzOCwgMHhhZmIyMDAzMCwgMHhhZmIxMDAyYywgMHhhZmIwMDAyOCwgMHhhZmEwMDAxMCwgMHg4ZjYyMDA0MCwKLQkweDhlYzMwMDE0LCAweDk2ZDEwMDBjLCAweDAwNDMxMDIzLCAweDA0NDEwMDI1LCAweDhlZDQwMDAwLCAweDMyMjIwNDAxLAotCTB4MTA0MDAzMGMsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsIDB4MDI4MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsCi0JMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwKLQkweDM0NDIwMDA0LCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLCAweDAyODMxODI1LCAweGFmNDMwMDIwLAotCTB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDI4MDIwMjEsIDB4MGUwMDA0NzAsIDB4MjQwNTA2NjQsIDB4MGEwMDBiYTIsCi0JMHg4ZmJmMDA0YywgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwKLQkweGFmNTQwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDBhMDAwYmEyLCAweDhmYmYwMDRjLCAweDMyMjIwMDEwLAotCTB4MTA0MDAwNmIsIDB4MDAwMDMwMjEsIDB4OTM2MjAwM2YsIDB4OTJjNjAwMGYsIDB4MzA0NTAwZmYsIDB4MjRjM2ZmZjgsCi0JMHgyYzYyMDAwZiwgMHgxMDQwMDA1NywgMHgzYzAyMDgwMCwgMHgyNDQyNTdjMCwgMHgwMDAzMTg4MCwgMHgwMDYyMTgyMSwKLQkweDhjNjQwMDAwLCAweDAwODAwMDA4LCAweDAwMDAwMDAwLCAweDM4YTIwMDEyLCAweDBhMDAwOTI0LCAweDAwMDJhODJiLAotCTB4MjQwMjAwMGUsIDB4MTRhMjAwMDQsIDB4MjQwMjAwMGMsIDB4MjQxNTAwMDEsIDB4MGEwMDA5MjQsIDB4MjQwNjAwMTAsCi0JMHgxMGEyMDA0OSwgMHgzOGEzMDAxMCwgMHgyYzYzMDAwMSwgMHgzOGEyMDAxNiwgMHgyYzQyMDAwMSwgMHgwMDYyMTgyNSwKLQkweDE0NjAwMDRkLCAweDAwMDBhODIxLCAweDI0MDIwMDE0LCAweDEwYTIwMDRhLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDA2OWMsIDB4MGEwMDA5MjQsIDB4MDAwMGE4MjEsIDB4MjQwMjAwMTYsIDB4MTRhMjAwMDUsCi0JMHgyNDAyMDAwYywgMHgyNDE1MDAwMSwgMHgyNDA2MDAxMCwgMHgwYTAwMDkyNCwgMHgzMjMxZmZmZCwgMHgxMGEyMDAzMiwKLQkweDM4YTMwMDEwLCAweDJjNjMwMDAxLCAweDM4YTIwMDBlLCAweDJjNDIwMDAxLCAweDAwNjIxODI1LCAweDE0NjAwMDM2LAotCTB4MDAwMGE4MjEsIDB4MjQwMjAwMTQsIDB4MTRhMjAwMDMsIDB4MjQxNTAwMDEsIDB4MGEwMDA5MjQsIDB4MjQwNjAwMTIsCi0JMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDZiYywgMHgwYTAwMDkyNCwgMHgwMDAwYTgyMSwgMHgyNDAyMDAwZSwKLQkweDE0YTIwMDA0LCAweDI0MDIwMDE2LCAweDI0MTUwMDAxLCAweDBhMDAwOTI0LCAweDMyMzFmZmZiLCAweDE0YTIwMDA0LAotCTB4MjQwMjAwMTQsIDB4MjQxNTAwMDEsIDB4MGEwMDA5MjQsIDB4MzIzMWZmZmQsIDB4NTRhMjAwMTMsIDB4OTJjMjAwMGUsCi0JMHgyNDE1MDAwMSwgMHgyNDA2MDAxMiwgMHgwYTAwMDkyNCwgMHgzMjMxZmZmZCwgMHgyNDAyMDAwYywgMHg1NGEyMDAwYywKLQkweDkyYzIwMDBlLCAweDkyYzMwMDBlLCAweDI0MDIwMDBhLCAweDEwNjIwMDA1LCAweDI0MTUwMDAxLCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDA2ZTgsIDB4MjQxNTAwMDEsIDB4MGEwMDA5MjQsIDB4MjQwNjAwMTQsIDB4OTJjMjAwMGUsCi0JMHgxNGEyMDAwMywgMHgwMDAwMDAwMCwgMHgwYTAwMDkyNCwgMHgyNDE1MDAwMSwgMHgxMGE2ZmZjMSwgMHgyNDAyMDAxMiwKLQkweDEwYTIwMDA1LCAweDAwMDBhODIxLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwNzA0LCAweDAwMDBhODIxLAotCTB4MTJhMDAwMjIsIDB4MzIyMjAwMDQsIDB4MTA0MDAwMDIsIDB4MjQwMjAwMDEsIDB4YWZhMjAwMTAsIDB4MzIyMzAxMDIsCi0JMHgyNDAyMDAwMiwgMHgxNDYyMDAwZiwgMHgwMDAwMDAwMCwgMHg5MmMyMDAwYSwgMHgzMDQyMDAyMCwgMHgxNDQwMDAwYiwKLQkweDAwMDAwMDAwLCAweDhmNjMwMDQ4LCAweDhmNjIwMDQwLCAweDE0NjIwMDA0LCAweDAwMDAwMDAwLCAweDhmNjIwMDQ4LAotCTB4MjQ0MjAwMDEsIDB4YWY2MjAwNDgsIDB4OGY2MjAwNDAsIDB4MjQ0MjAwMDEsIDB4YWY2MjAwNDAsIDB4YTM2NjAwM2YsCi0JMHgzOGMzMDAxMiwgMHgyYzYzMDAwMSwgMHgzOGMyMDAxMCwgMHgyYzQyMDAwMSwgMHgwMDYyMTgyNSwgMHgxMDYwMDAwNSwKLQkweDNjMDMwODAwLCAweDhjNjIwMDc0LCAweDI0NDIwMDAxLCAweDBlMDAxNDBkLCAweGFjNjIwMDc0LCAweDMyMjIwMDQwLAotCTB4MzIyMzAwMjAsIDB4YWZhMzAwMjAsIDB4MzIyMzAwODAsIDB4YWZhMzAwMjQsIDB4MzIyMzAwMDEsIDB4YWZhMzAwMTgsCi0JMHgzMjIzMDAwOCwgMHhhZmEzMDAxYywgMHgzMjIzMDEwMCwgMHgxMDQwMDBjNCwgMHhhZmEzMDAxNCwgMHg4ZWM2MDAxMCwKLQkweDhmNjMwMDU0LCAweDI0YzJmZmZmLCAweDAwNDMxMDIzLCAweDE4NDAwMDA2LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDAxNWMsIDB4MGEwMDA5ODksIDB4MDAwMDkwMjEsIDB4OGY2MjAwNGMsIDB4MDBjMjEwMjMsCi0JMHgxODQwMDAyOCwgMHgwMDAwOTAyMSwgMHg5MzY1MDEyMCwgMHg5MzY0MDEyMSwgMHgzYzAzMDgwMCwgMHg4YzYyMDA4YywKLQkweDMwODQwMGZmLCAweDI0NDIwMDAxLCAweDMwYTUwMGZmLCAweDAwODA0MDIxLCAweDE0ODUwMDBiLCAweGFjNjIwMDhjLAotCTB4M2MwNDA4MDAsIDB4OGM4MzAwOTAsIDB4MjQ2MzAwMDEsIDB4YWM4MzAwOTAsIDB4OTM2MjAxMjIsIDB4MzA0MjAwMDEsCi0JMHgwMDAyMTAyMywgMHgzMDQyMDAwNSwgMHgwYTAwMDk4OSwgMHgzNDUyMDAwNCwgMHgyNzY3MDEwMCwgMHgwMDA0MTA4MCwKLQkweDAwZTIxMDIxLCAweDhjNDMwMDAwLCAweDAwYzMxODIzLCAweDA0NjAwMDA0LCAweDI0ODIwMDAxLCAweDMwNDQwMDA3LAotCTB4MTQ4NWZmZjksIDB4MDAwNDEwODAsIDB4MTA4ODAwMDcsIDB4M2MwMzA4MDAsIDB4YTM2NDAxMjEsIDB4OGM2MjAwOTQsCi0JMHgyNDEyMDAwNSwgMHgyNDQyMDAwMSwgMHgwYTAwMDk4OSwgMHhhYzYyMDA5NCwgMHgyNDEyMDAwNCwgMHgzMjQyMDAwMSwKLQkweDEwNDAwMDIxLCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDhlZDAwMDAwLCAweDEwNjAwMDFjLCAweDhlZDMwMDEwLAotCTB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1MDAwMDAsIDB4OGY4NDAwMTgsIDB4MjQwMjAwMDEsCi0JMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwKLQkweGFjNjAwMDEwLCAweDhmODIwMDE4LCAweGFjNTMwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LAotCTB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTAsCi0JMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHgyNDEzMDAwMSwgMHgzMjQyMDAwNCwgMHgxMDQwMDA2OCwKLQkweDAwMDAzODIxLCAweDNjMDI5MDAwLCAweDhlYzYwMDEwLCAweDM0NDIwMDAxLCAweDNjMDM4MDAwLCAweDAyODIxMDI1LAotCTB4YTM2MDAwN2MsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsCi0JMHg5MzYyMDAyMywgMHgzMDQyMDA4MCwgMHgxMDQwMDAxMSwgMHgwMDAwMDAwMCwgMHg4ZjY1MDA1YywgMHg4ZjYzMDA0YywKLQkweDk3NjQwMDNjLCAweDhmNjIwMDY0LCAweDAwYTMyODIzLCAweDAwODUyODIxLCAweDAwYTIxMDJiLCAweDU0NDAwMDA2LAotCTB4M2MwMjNmZmYsIDB4OTM2MjAwMjMsIDB4MzA0MjAwN2YsIDB4YTM2MjAwMjMsIDB4YWY2NjAwNjQsIDB4M2MwMjNmZmYsCi0JMHgwYTAwMDlkYSwgMHgzNDQyZmZmZiwgMHg4ZjYyMDA1YywgMHgwMGMyMTAyMywgMHgwNDQwMDAxMSwgMHgwMDAwMDAwMCwKLQkweDhmNjUwMDVjLCAweDhmNjMwMDY0LCAweDk3NjQwMDNjLCAweDNjMDIzZmZmLCAweDM0NDJmZmZmLCAweGFmNjYwMDY0LAotCTB4MDBhMzI4MjMsIDB4MDA4NTI4MjEsIDB4MDA0NTEwMmIsIDB4MTA0MDAwMDQsIDB4MDBjNTEwMjEsIDB4M2MwNTNmZmYsCi0JMHgzNGE1ZmZmZiwgMHgwMGM1MTAyMSwgMHhhZjYyMDA1YywgMHgyNDA3MDAwMSwgMHhhZjY2MDA0YywgMHg4ZmEyMDAxMCwKLQkweDEwNDAwMDAzLCAweDAwMDAwMDAwLCAweGFmNjYwMDUwLCAweGFmNjYwMDU0LCAweDhmNjIwMDU0LCAweDE0YzIwMDA1LAotCTB4MDAwMDAwMDAsIDB4OTM2MjAwMjMsIDB4MzA0MjAwNDAsIDB4MTA0MDAwMTcsIDB4MjQwMjAwMDEsIDB4OTc2MjAwNmEsCi0JMHgwMDAyMjg4MCwgMHg1MGEwMDAwMSwgMHgyNDA1MDAwMSwgMHg5NzYzMDA2OCwgMHg5MzY0MDA4MSwgMHgzYzAyMDgwMCwKLQkweDhjNDYwMDRjLCAweDAwNjUyODIxLCAweDAwODUyODA0LCAweDAwYzUxMDJiLCAweDU0NDAwMDAxLCAweDAwYTAzMDIxLAotCTB4M2MwMjA4MDAsIDB4OGM0NDAwNTAsIDB4MDBjNDE4MmIsIDB4NTQ2MDAwMDEsIDB4MDBjMDIwMjEsIDB4OGY0MjAwNzQsCi0JMHgyNDAzZmZmZSwgMHgwMDgzMjgyNCwgMHgwMGEyMTAyMSwgMHhhZjYyMDAwYywgMHg5MzYyMDA4MiwgMHgzMDQyMDA4MCwKLQkweDUwNDAwMDAxLCAweGEzNjAwMDgxLCAweDNjMDI4MDAwLCAweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweGFmNDIwMDIwLAotCTB4OTM2MzAwN2UsIDB4OTM2MjAwN2EsIDB4MTA2MjAwMDUsIDB4MDBlMGI4MjEsIDB4MGUwMDEzYzQsIDB4MDAwMDAwMDAsCi0JMHgwMDQwMzgyMSwgMHgwMGUwYjgyMSwgMHg4ZmEzMDAyMCwgMHgxMDYwMDAwOSwgMHg4ZmEyMDAxMCwgMHg4ZWMyMDAxOCwKLQkweGFmNjIwMDE4LCAweDhlYzMwMDFjLCAweGFmNjMwMDFjLCAweDhlYzIwMDIwLCAweDI0MTcwMDAxLCAweGFmNjIwMDU4LAotCTB4OGZhMjAwMTAsIDB4MTA0MDAwNTcsIDB4OGZhMzAwMjQsIDB4OTM2MjAwMjMsIDB4MzA0MjAwNDAsIDB4MTA0MDAwNTMsCi0JMHgwMDAwMDAwMCwgMHgxNjYwMDAyMSwgMHgzYzEyMDgwMCwgMHg4ZTQyMDAyMCwgMHg4ZjcwMDA0YywgMHgxMDQwMDAxZSwKLQkweDI0MTMwMDAxLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTQwMDAwLCAweDhmODQwMDE4LAotCTB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwKLQkweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LAotCTB4M2MwMjQwMTAsIDB4MDA2MjE4MjUsIDB4YWNhMzAwMWMsIDB4MGUwMDE0Y2MsIDB4MjQxMzAwMDEsIDB4OGU0MjAwMjAsCi0JMHgxMDQwMDAxYywgMHg4ZWQwMDAwMCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAwMCwKLQkweDhmODMwMDE4LCAweGFjNjAwMDA0LCAweDhmODIwMDE4LCAweGFjNDAwMDA4LCAweDhmODMwMDE4LCAweGFjNjAwMDBjLAotCTB4OGY4MjAwMTgsIDB4YWM0MDAwMTAsIDB4OGY4MzAwMTgsIDB4MjQwMjA3OTgsIDB4YWM2MjAwMTQsIDB4OGY4NTAwMTgsCi0JMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwKLQkweDhmODUwMDE4LCAweDNjMDI0MDE5LCAweDAwNjIxODI1LCAweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDNjMDI5MDAwLAotCTB4MzQ0MjAwMDEsIDB4MDI4MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgyNDAyMDAwMSwgMHhhZjYyMDAwYywgMHg5MzYzMDAyMywgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwKLQkweDAyODIxMDI1LCAweDMwNjMwMGJmLCAweGEzNjMwMDIzLCAweGFmNDIwMDIwLCAweDhmYTMwMDI0LCAweDEwNjAwMDEyLAotCTB4OGZhMzAwMTgsIDB4OTM2MjAwN2MsIDB4MjQ0MjAwMDEsIDB4YTM2MjAwN2MsIDB4OTM2MzAwN2UsIDB4OTM2MjAwN2EsCi0JMHgxNDYyMDAwYiwgMHg4ZmEzMDAxOCwgMHg5MzYyMDA3YywgMHgzYzAzMDgwMCwgMHg4YzY0MDAyNCwgMHgwMDQ0MTAyYiwKLQkweDE0NDAwMDA1LCAweDhmYTMwMDE4LCAweDBlMDAxM2M0LCAweDAwMDAwMDAwLCAweDAyZTJiODI1LCAweDhmYTMwMDE4LAotCTB4MzA2MmZmZmYsIDB4MTA0MDAwMDMsIDB4MzIyMjAyMDAsIDB4MGEwMDBhOTQsIDB4MjQxZTAwMDQsIDB4MTA0MDAwMDMsCi0JMHgwMDAwMDAwMCwgMHgyNDFlMDA0MCwgMHgyNDE3MDAwMSwgMHgxMmEwMDBkMCwgMHgzMjIyMDAwMiwgMHgxMDQwMDBjZiwKLQkweDhmYTIwMDFjLCAweDkyYzIwMDBhLCAweDMwNDIwMDAyLCAweDUwNDAwMDNiLCAweDkyYzIwMDBhLCAweDkzNjIwMDIzLAotCTB4MzA0MjAwMDgsIDB4NTQ0MDAwMzcsIDB4OTJjMjAwMGEsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MTA2MDAwMjMsCi0JMHgzYzAyOTAwMCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4Zjg0MDAxOCwgMHg4ZWMzMDAwMCwgMHhhYzgzMDAwMCwKLQkweDkyYzIwMDBhLCAweDhmODMwMDE4LCAweDAwMDIxNjAwLCAweGFjNjIwMDA0LCAweDhmODQwMDE4LCAweDhmNjIwMDQwLAotCTB4YWM4MjAwMDgsIDB4OGY4NTAwMTgsIDB4OGY2MzAwNGMsIDB4YWNhMzAwMGMsIDB4OTM2MjAwM2YsIDB4OGY4NDAwMTgsCi0JMHgzMDQyMDBmZiwgMHhhYzgyMDAxMCwgMHg4ZjgzMDAxOCwgMHgzYzAyNjAwMCwgMHhhYzYwMDAxNCwgMHg4Zjg1MDAxOCwKLQkweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LAotCTB4M2MwMjQwMWEsIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMjgyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDkzNjMwMDIzLCAweDNjMDI4MDAwLCAweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweDM0NjMwMDA4LAotCTB4YTM2MzAwMjMsIDB4YWY0MjAwMjAsIDB4OTJjMjAwMGEsIDB4MzA0MjAwMjAsIDB4MTA0MDAwOGUsIDB4OGZhMjAwMWMsCi0JMHg5MzYyMDAyMywgMHgzMDQyMDAwMSwgMHgxNDQwMDAzNSwgMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwgMHgxMDYwMDAyMywKLQkweDNjMDI5MDAwLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODQwMDE4LCAweDhlYzMwMDAwLCAweGFjODMwMDAwLAotCTB4OTJjMjAwMGEsIDB4OGY4MzAwMTgsIDB4MDAwMjE2MDAsIDB4YWM2MjAwMDQsIDB4OGY4NDAwMTgsIDB4OGY2MjAwNDAsCi0JMHhhYzgyMDAwOCwgMHg4Zjg1MDAxOCwgMHg4ZjYzMDA0YywgMHhhY2EzMDAwYywgMHg5MzYyMDAzZiwgMHg4Zjg0MDAxOCwKLQkweDMwNDIwMGZmLCAweGFjODIwMDEwLCAweDhmODMwMDE4LCAweDNjMDI2MDAwLCAweGFjNjAwMDE0LCAweDhmODUwMDE4LAotCTB4OGM0MzQ0NDgsIDB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsCi0JMHgzYzAyNDAxYSwgMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwKLQkweDAyODIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OTM2MzAwMjMsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsIDB4MDI4MjEwMjUsIDB4MzQ2MzAwMDEsCi0JMHhhMzYzMDAyMywgMHhhZjQyMDAyMCwgMHg5MzYyMDAyMywgMHgzMDQyMDA0MCwgMHgxMDQwMDA1MiwgMHg4ZmEyMDAxYywKLQkweDE2NjAwMDIwLCAweDNjMTIwODAwLCAweDhlNDIwMDIwLCAweDhmNzAwMDRjLCAweDEwNDAwMDNjLCAweDNjMDI5MDAwLAotCTB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1NDAwMDAsIDB4OGY4NDAwMTgsIDB4MjQwMjAwMDEsCi0JMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwKLQkweGFjNjAwMDEwLCAweDhmODIwMDE4LCAweGFjNTAwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LAotCTB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTAsCi0JMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg4ZTQyMDAyMCwgMHgxMDQwMDAxZSwgMHgzYzAyOTAwMCwKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTQwMDAwLCAweDhmODQwMDE4LCAweDNjMDIwMDhkLAotCTB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAxMCwgMHg4Zjg0MDAxOCwgMHgyNDAyMDdlZSwgMHhhYzgyMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwKLQkweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LAotCTB4M2MwMjQwMTksIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMjgyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDkzNjMwMDIzLCAweDNjMDI4MDAwLCAweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweDMwNjMwMGJmLAotCTB4YTM2MzAwMjMsIDB4YWY0MjAwMjAsIDB4OGZhMjAwMWMsIDB4MTA0MDAwMGUsIDB4OGZhMjAwMTQsIDB4OTJjMjAwMGEsCi0JMHhhMzYyMDA4MiwgMHg1N2MwMDAwNSwgMHgzN2RlMDAwOCwgMHg4ZmEzMDAxNCwgMHgxMDYwMDAwNCwgMHgwMDAwMDAwMCwKLQkweDM3ZGUwMDA4LCAweDBhMDAwYjc1LCAweDI0MTcwMDAxLCAweDBlMDAxMmNmLCAweDAyODAyMDIxLCAweDhmYTIwMDE0LAotCTB4MTA0MDAwMDMsIDB4MDAwMDAwMDAsIDB4MzdkZTAwMTAsIDB4MjQxNzAwMDEsIDB4MTJlMDAwMjAsIDB4M2MwMjkwMDAsCi0JMHgzNDQyMDAwMSwgMHgwMjgyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwKLQkweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweDAzYzIxMDI1LCAweGEzNjIwMDdkLAotCTB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsIDB4MDI4MzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsCi0JMHgwMjgwMjAyMSwgMHgwZTAwMDQ3MCwgMHgyNDA1MDgyYSwgMHgwYTAwMGI5YiwgMHgwMDAwMDAwMCwgMHg4ZjQyMDFmOCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNTQwMWMwLCAweGEzNDIwMWM0LAotCTB4YWY0MzAxZjgsIDB4OTM2MzAwM2YsIDB4MjQwMjAwMTIsIDB4MTQ2MjAwMDQsIDB4OGZiZjAwNGMsIDB4MGUwMDE0MGQsCi0JMHgwMDAwMDAwMCwgMHg4ZmJmMDA0YywgMHg4ZmJlMDA0OCwgMHg4ZmI3MDA0NCwgMHg4ZmI2MDA0MCwgMHg4ZmI1MDAzYywKLQkweDhmYjQwMDM4LCAweDhmYjMwMDM0LCAweDhmYjIwMDMwLCAweDhmYjEwMDJjLCAweDhmYjAwMDI4LCAweDAzZTAwMDA4LAotCTB4MjdiZDAwNTAsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTQsIDB4YWZiMDAwMTAsIDB4OGY1MDAxODAsIDB4OTc0MjAxODQsCi0JMHgzMDQyMDIwMCwgMHgxNDQwMDAxNSwgMHgwMDAwMDAwMCwgMHg4ZjQzMDE4OCwgMHgzYzAyZmYwMCwgMHgwMDYyMTgyNCwKLQkweDNjMDIwMjAwLCAweDEwNjIwMDMxLCAweDAwNDMxMDJiLCAweDE0NDAwMDA3LCAweDNjMDIwMzAwLCAweDEwNjAwMDBiLAotCTB4M2MwMjAxMDAsIDB4MTA2MjAwMGQsIDB4MDAwMDAwMDAsIDB4MGEwMDBjMmMsIDB4MDAwMDAwMDAsIDB4MTA2MjAwMjcsCi0JMHgzYzAyMDQwMCwgMHgxMDYyMDAzZSwgMHgwMjAwMjAyMSwgMHgwYTAwMGMyYywgMHgwMDAwMDAwMCwgMHgwZTAwMGMzMSwKLQkweDAyMDAyMDIxLCAweDBhMDAwYzJlLCAweDhmYmYwMDE0LCAweDkzNjIwMDA1LCAweDMwNDIwMDIwLCAweDE0NDAwMDVlLAotCTB4OGZiZjAwMTQsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsIDB4MDIwMjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsCi0JMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDAwNSwgMHgzYzAzODAwMCwKLQkweDM0NjMwMDAxLCAweDAyMDMxODI1LCAweDM0NDIwMDIwLCAweGEzNjIwMDA1LCAweGFmNDMwMDIwLCAweDkzNjIwMDA1LAotCTB4MzA0MjAwMjAsIDB4MTQ0MDAwMDMsIDB4MDIwMDIwMjEsIDB4MDAwMDAwMGQsIDB4MDIwMDIwMjEsIDB4MGUwMDA3NjYsCi0JMHgyNDA1NTg1NCwgMHgwYTAwMGMyZSwgMHg4ZmJmMDAxNCwgMHg5MzYyMDAwNSwgMHgzMDQyMDAwMSwgMHgxMDQwMDAzZiwKLQkweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAyMDIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwMjMsIDB4MzQ0MjAwMDQsIDB4YTM2MjAwMjMsCi0JMHg5MzYzMDAwNSwgMHgzYzA0ODAwMCwgMHgzYzAyMDgwMCwgMHgzMDYzMDBmZSwgMHhhMzYzMDAwNSwgMHg4YzQzMDAyMCwKLQkweDM0ODQwMDAxLCAweDAyMDQyMDI1LCAweDBhMDAwYzBhLCAweGFmNDQwMDIwLCAweDAwMDAyODIxLCAweDAwMDAzMDIxLAotCTB4MGUwMDBmYjEsIDB4MjQwNzA4ZDksIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MTA2MDAwMjMsIDB4OGZiZjAwMTQsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAwMCwgMHg5MzYzMDA4MiwgMHg5MzYyMDAzZiwKLQkweDhmODQwMDE4LCAweDAwMDMxYTAwLCAweDAwNDMxMDI1LCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LAotCTB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTQsCi0JMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwKLQkweDk0NDM1OGNlLCAweDhmODUwMDE4LCAweDNjMDI0MDBhLCAweDAwNjIxODI1LCAweDBlMDAxNGNjLCAweGFjYTMwMDFjLAotCTB4MGEwMDBjMmUsIDB4OGZiZjAwMTQsIDB4MDAwMDAwMGQsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsCi0JMHgyN2JkMDAxOCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxMCwgMHg4ZjQyMDE4OCwgMHgwMDgwMzAyMSwgMHg5MzY0MDAwMCwKLQkweDI0MDMwMDIwLCAweDAwMDIxNDAyLCAweDEwODMwMDA4LCAweDMwNDUwMGZmLCAweDNjMDM2MDE4LCAweDhjNjI1MDAwLAotCTB4MzQ0MjA0MDAsIDB4YWM2MjUwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDA5NTUsIDB4OTM2MzAwM2YsCi0JMHgyNDAyMDAxMiwgMHgxNDYyMDAyMywgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwgMHgzYzAzODAwMCwgMHgwMGMyMTAyNSwKLQkweGFmNjUwMTc4LCAweGEzNjUwMDdhLCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsCi0JMHgwMGMzMTgyNSwgMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMGMwMjAyMSwgMHgwZTAwMDQ3MCwKLQkweDI0MDUwOTYzLCAweDBhMDAwYzc5LCAweDhmYmYwMDEwLCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsIDB4YWY0NjAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsIDB4MGEwMDBjNzksCi0JMHg4ZmJmMDAxMCwgMHg5MzYyMDA3ZSwgMHgxNDQ1MDAwZSwgMHgwMDAwMDAwMCwgMHg4ZjYyMDE3OCwgMHgxMDQ1MDAwYiwKLQkweDAwMDAwMDAwLCAweDhmODIwMDAwLCAweGFmNjUwMTc4LCAweDhmNjYwMTc4LCAweDhmNDQwMTgwLCAweDhmNjUwMDRjLAotCTB4OGM0MzAwMDAsIDB4MDA2MGY4MDksIDB4MzBjNjAwZmYsIDB4MGEwMDBjNzksIDB4OGZiZjAwMTAsIDB4YWY2NTAxNzgsCi0JMHg4ZmJmMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxMCwgMHg5MzYzMDAwMCwKLQkweDI0MDIwMDIwLCAweDEwNjIwMDA1LCAweDAwMDAwMDAwLCAweDkzNjMwMDAwLCAweDI0MDIwMDMwLCAweDE0NjIwMDRkLAotCTB4OGZiZjAwMTAsIDB4OTM0MjAxNDgsIDB4MjQ0NGZmZmYsIDB4MmM4MzAwMDUsIDB4MTA2MDAwNDcsIDB4M2MwMjA4MDAsCi0JMHgyNDQyNTgwMCwgMHgwMDA0MTg4MCwgMHgwMDYyMTgyMSwgMHg4YzY0MDAwMCwgMHgwMDgwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDhmNDMwMTQ0LCAweDhmNjIwMDBjLCAweDE0NjIwMDA2LCAweDI0MDIwMDAxLCAweGFmNjIwMDBjLCAweDBlMDAwZDU5LAotCTB4MDAwMDAwMDAsIDB4MGEwMDBjZDEsIDB4OGZiZjAwMTAsIDB4OGY2MjAwMGMsIDB4MGEwMDBjY2EsIDB4MDAwMDAwMDAsCi0JMHg5NzYzMDAxMCwgMHg4ZjQyMDE0NCwgMHgxNDQzMDAwNiwgMHgyNDAyMDAwMSwgMHhhNzYyMDAxMCwgMHgwZTAwMTM3YSwKLQkweDAwMDAwMDAwLCAweDBhMDAwY2QxLCAweDhmYmYwMDEwLCAweDk3NjIwMDEwLCAweDBhMDAwY2NhLCAweDAwMDAwMDAwLAotCTB4OTc2MzAwMTIsIDB4OGY0MjAxNDQsIDB4MTQ0MzAwMDYsIDB4MjQwMjAwMDEsIDB4YTc2MjAwMTIsIDB4MGUwMDEzOTUsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMGNkMSwgMHg4ZmJmMDAxMCwgMHg5NzYyMDAxMiwgMHgwYTAwMGNjYSwgMHgwMDAwMDAwMCwKLQkweDk3NjMwMDE0LCAweDhmNDIwMTQ0LCAweDE0NDMwMDA2LCAweDI0MDIwMDAxLCAweGE3NjIwMDE0LCAweDBlMDAxM2JiLAotCTB4MDAwMDAwMDAsIDB4MGEwMDBjZDEsIDB4OGZiZjAwMTAsIDB4OTc2MjAwMTQsIDB4MGEwMDBjY2EsIDB4MDAwMDAwMDAsCi0JMHg5NzYzMDAxNiwgMHg4ZjQyMDE0NCwgMHgxNDQzMDAwNiwgMHgyNDAyMDAwMSwgMHhhNzYyMDAxNiwgMHgwZTAwMTNiZSwKLQkweDAwMDAwMDAwLCAweDBhMDAwY2QxLCAweDhmYmYwMDEwLCAweDk3NjIwMDE2LCAweDE0NDAwMDA2LCAweDhmYmYwMDEwLAotCTB4M2MwMzA4MDAsIDB4OGM2MjAwNzAsIDB4MjQ0MjAwMDEsIDB4YWM2MjAwNzAsIDB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsCi0JMHgyN2JkMDAxOCwgMHgyN2JkZmZlMCwgMHgzYzAyOTAwMCwgMHhhZmJmMDAxYywgMHhhZmIyMDAxOCwgMHhhZmIxMDAxNCwKLQkweGFmYjAwMDEwLCAweDhmNTAwMTQwLCAweDM0NDIwMDAxLCAweDNjMDM4MDAwLCAweDAyMDIxMDI1LCAweGFmNDIwMDIwLAotCTB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMTIsIDB4MjQwMzAwODAsIDB4YTM2MjAwM2YsCi0JMHhhMzYzMDA4MiwgMHg5MzYyMDAyMywgMHgzMDQyMDA0MCwgMHgxMDQwMDAwNywgMHgwMDAwODgyMSwgMHg5MzYyMDAyMywKLQkweDI0MTEwMDAxLCAweDMwNDIwMGJmLCAweGEzNjIwMDIzLCAweDBhMDAwY2YwLCAweDNjMDI4MDAwLCAweDNjMDI4MDAwLAotCTB4MzQ0MjAwMDEsIDB4M2MwMzkwMDAsIDB4MzQ2MzAwMDEsIDB4M2MwNDgwMDAsIDB4MDIwMjEwMjUsIDB4MDIwMzE4MjUsCi0JMHhhZjQyMDAyMCwgMHhhZjQzMDAyMCwgMHg4ZjQyMDAyMCwgMHgwMDQ0MTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwKLQkweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweDM0NDIwMDIwLCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLAotCTB4MDIwMzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDIwMDIwMjEsIDB4MGUwMDA0NzAsCi0JMHgyNDA1MGE2MywgMHgwYTAwMGQxMywgMHgwMDAwMDAwMCwgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNTAwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDEyMjAwMDNmLAotCTB4M2MxMjA4MDAsIDB4OGU0MjAwMjAsIDB4OGY3MTAwNGMsIDB4MTA0MDAwM2MsIDB4OGZiZjAwMWMsIDB4MGUwMDE0OGUsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAwMCwgMHg4Zjg0MDAxOCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwKLQkweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LCAweGFjNjAwMDEwLAotCTB4OGY4MjAwMTgsIDB4YWM1MTAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4MjQwNDAwMDEsCi0JMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwgMHgzYzAyNDAxMCwgMHgwMDYyMTgyNSwKLQkweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDhlNDIwMDIwLCAweDEwNDAwMDFlLCAweDhmYmYwMDFjLCAweDBlMDAxNDhlLAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1MDAwMDAsIDB4OGY4NDAwMTgsIDB4M2MwMjAwOGQsIDB4YWM4MjAwMDQsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwKLQkweDhmODQwMDE4LCAweDI0MDIwYTZhLCAweGFjODIwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LAotCTB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTksCi0JMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg4ZmJmMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwKLQkweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDIwLCAweDI3YmRmZmU4LCAweGFmYmYwMDEwLCAweDkzNjIwMDgxLAotCTB4M2MwMzA4MDAsIDB4OGM2NDAwNDgsIDB4MDA0NDEwMmIsIDB4MTQ0MDAwMDUsIDB4MDAwMDAwMDAsIDB4MGUwMDBjZDMsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMGRhNCwgMHg4ZmJmMDAxMCwgMHg5MzYyMDA4MSwgMHgyNDQyMDAwMSwgMHgwZTAwMTNjNCwKLQkweGEzNjIwMDgxLCAweDk3NjMwMDZhLCAweDAwMDMyODgwLCAweDE0YTAwMDAyLCAweDAwNDAzODIxLCAweDI0MDUwMDAxLAotCTB4OTc2MzAwNjgsIDB4OTM2NDAwODEsIDB4M2MwMjA4MDAsIDB4OGM0NjAwNGMsIDB4MDA2NTI4MjEsIDB4MDA4NTI4MDQsCi0JMHgwMGM1MTAyYiwgMHg1NDQwMDAwMSwgMHgwMGEwMzAyMSwgMHgzYzAyMDgwMCwgMHg4YzQ0MDA1MCwgMHgwMGM0MTgyYiwKLQkweDU0NjAwMDAxLCAweDAwYzAyMDIxLCAweDhmNDIwMDc0LCAweDI0MDNmZmZlLCAweDAwODMyODI0LCAweDAwYTIxMDIxLAotCTB4YWY2MjAwMGMsIDB4MTBlMDAwMjEsIDB4M2MwMjkwMDAsIDB4OGY0NTAxNDAsIDB4MzQ0MjAwMDEsIDB4M2MwMzgwMDAsCi0JMHgwMGEyMTAyNSwgMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwKLQkweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweDM0NDIwMDA0LCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLAotCTB4MDBhMzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDBhMDIwMjEsIDB4MGUwMDA0NzAsCi0JMHgyNDA1MGE5MiwgMHgwYTAwMGRhNCwgMHg4ZmJmMDAxMCwgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNDUwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDhmYmYwMDEwLAotCTB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MjdiZGZmZDgsIDB4YWZiMzAwMWMsIDB4Mjc1MzAxMDAsIDB4YWZiZjAwMjQsCi0JMHhhZmI0MDAyMCwgMHhhZmIyMDAxOCwgMHhhZmIxMDAxNCwgMHhhZmIwMDAxMCwgMHg5NjYyMDAwOCwgMHgzYzE0MDgwMCwKLQkweDhmNTIwMTAwLCAweDMwNDIwMDAxLCAweDEwNDAwMGRhLCAweDAwMDAwMDAwLCAweDhlNzAwMDE4LCAweDhmNjMwMDU0LAotCTB4MjYwMmZmZmYsIDB4MDA0MzEwMjMsIDB4MTg0MDAwMDYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsCi0JMHgyNDAwMDE1YywgMHgwYTAwMGRlYSwgMHgwMDAwODgyMSwgMHg4ZjYyMDA0YywgMHgwMjAyMTAyMywgMHgxODQwMDAyOCwKLQkweDAwMDA4ODIxLCAweDkzNjUwMTIwLCAweDkzNjQwMTIxLCAweDNjMDMwODAwLCAweDhjNjIwMDhjLCAweDMwODQwMGZmLAotCTB4MjQ0MjAwMDEsIDB4MzBhNTAwZmYsIDB4MDA4MDM4MjEsIDB4MTQ4NTAwMGIsIDB4YWM2MjAwOGMsIDB4M2MwNDA4MDAsCi0JMHg4YzgzMDA5MCwgMHgyNDYzMDAwMSwgMHhhYzgzMDA5MCwgMHg5MzYyMDEyMiwgMHgzMDQyMDAwMSwgMHgwMDAyMTAyMywKLQkweDMwNDIwMDA1LCAweDBhMDAwZGVhLCAweDM0NTEwMDA0LCAweDI3NjYwMTAwLCAweDAwMDQxMDgwLCAweDAwYzIxMDIxLAotCTB4OGM0MzAwMDAsIDB4MDIwMzE4MjMsIDB4MDQ2MDAwMDQsIDB4MjQ4MjAwMDEsIDB4MzA0NDAwMDcsIDB4MTQ4NWZmZjksCi0JMHgwMDA0MTA4MCwgMHgxMDg3MDAwNywgMHgzYzAzMDgwMCwgMHhhMzY0MDEyMSwgMHg4YzYyMDA5NCwgMHgyNDExMDAwNSwKLQkweDI0NDIwMDAxLCAweDBhMDAwZGVhLCAweGFjNjIwMDk0LCAweDI0MTEwMDA0LCAweDMyMjIwMDAxLCAweDEwNDAwMDFlLAotCTB4OGU4MjAwMjAsIDB4MTA0MDAwMWQsIDB4MzIyMjAwMDQsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsCi0JMHhhYzUyMDAwMCwgMHg4Zjg0MDAxOCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwKLQkweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LCAweGFjNjAwMDEwLCAweDhmODIwMDE4LCAweGFjNTAwMDE0LAotCTB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsCi0JMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwgMHgzYzAyNDAxMCwgMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywKLQkweDMyMjIwMDA0LCAweDEwNDAwMDgxLCAweDAwMDAzODIxLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDNjMDM4MDAwLAotCTB4MDI0MjEwMjUsIDB4YTM2MDAwN2MsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg5MzYyMDAyMywgMHgzMDQyMDA4MCwgMHgxMDQwMDAxMSwgMHgwMDAwMDAwMCwgMHg4ZjY1MDA1YywKLQkweDhmNjMwMDRjLCAweDk3NjQwMDNjLCAweDhmNjIwMDY0LCAweDAwYTMyODIzLCAweDAwODUyODIxLCAweDAwYTIxMDJiLAotCTB4NTQ0MDAwMDYsIDB4M2MwMjNmZmYsIDB4OTM2MjAwMjMsIDB4MzA0MjAwN2YsIDB4YTM2MjAwMjMsIDB4YWY3MDAwNjQsCi0JMHgzYzAyM2ZmZiwgMHgwYTAwMGUzNywgMHgzNDQyZmZmZiwgMHg4ZjYyMDA1YywgMHgwMjAyMTAyMywgMHgwNDQwMDAxMSwKLQkweDAwMDAwMDAwLCAweDhmNjUwMDVjLCAweDhmNjMwMDY0LCAweDk3NjQwMDNjLCAweDNjMDIzZmZmLCAweDM0NDJmZmZmLAotCTB4YWY3MDAwNjQsIDB4MDBhMzI4MjMsIDB4MDA4NTI4MjEsIDB4MDA0NTEwMmIsIDB4MTA0MDAwMDQsIDB4MDIwNTEwMjEsCi0JMHgzYzA1M2ZmZiwgMHgzNGE1ZmZmZiwgMHgwMjA1MTAyMSwgMHhhZjYyMDA1YywgMHgyNDA3MDAwMSwgMHhhZjcwMDA0YywKLQkweDhmNjIwMDU0LCAweDE2MDIwMDA1LCAweDAwMDAwMDAwLCAweDkzNjIwMDIzLCAweDMwNDIwMDQwLCAweDEwNDAwMDE3LAotCTB4MjQwMjAwMDEsIDB4OTc2MjAwNmEsIDB4MDAwMjI4ODAsIDB4NTBhMDAwMDEsIDB4MjQwNTAwMDEsIDB4OTc2MzAwNjgsCi0JMHg5MzY0MDA4MSwgMHgzYzAyMDgwMCwgMHg4YzQ2MDA0YywgMHgwMDY1MjgyMSwgMHgwMDg1MjgwNCwgMHgwMGM1MTAyYiwKLQkweDU0NDAwMDAxLCAweDAwYTAzMDIxLCAweDNjMDIwODAwLCAweDhjNDQwMDUwLCAweDAwYzQxODJiLCAweDU0NjAwMDAxLAotCTB4MDBjMDIwMjEsIDB4OGY0MjAwNzQsIDB4MjQwM2ZmZmUsIDB4MDA4MzI4MjQsIDB4MDBhMjEwMjEsIDB4YWY2MjAwMGMsCi0JMHg5MzYyMDA4MiwgMHgzMDQyMDA4MCwgMHg1MDQwMDAwMSwgMHhhMzYwMDA4MSwgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwKLQkweDAyNDIxMDI1LCAweGFmNDIwMDIwLCAweDkzNjMwMDdlLCAweDkzNjIwMDdhLCAweDEwNjIwMDA0LCAweDAwMDAwMDAwLAotCTB4MGUwMDEzYzQsIDB4MDAwMDAwMDAsIDB4MDA0MDM4MjEsIDB4MTBlMDAwMWYsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMjQyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLAotCTB4MDI0MzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDI0MDIwMjEsIDB4MGUwMDA0NzAsCi0JMHgyNDA1MGIzZCwgMHgwYTAwMGU4ZCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNTIwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDkzNDIwMTBiLAotCTB4OTM0MzAxMGIsIDB4OGU4MjAwMjAsIDB4Mjc1MDAxMDAsIDB4Mzg2MzAwMDYsIDB4MTA0MDAwMjksIDB4MmM3MTAwMDEsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAxOCwgMHg4ZTAyMDAwMCwgMHhhYzYyMDAwMCwgMHg4Zjg0MDAxOCwKLQkweDk2MDIwMDA4LCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweDhlMDIwMDE0LCAweGFjNjIwMDA4LCAweDhmODUwMDE4LAotCTB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4YWNhMzAwMGMsIDB4OGY4NDAwMTgsIDB4OTYwMjAwMTIsIDB4YWM4MjAwMTAsCi0JMHg4Zjg1MDAxOCwgMHg4ZTAzMDAyMCwgMHhhY2EzMDAxNCwgMHg5NjAyMDAwYywgMHg5NjAzMDAwZSwgMHg4Zjg0MDAxOCwKLQkweDAwMDIxNDAwLCAweDAwNDMxMDI1LCAweGFjODIwMDE4LCAweDEyMjAwMDA1LCAweDNjMDIwODAwLCAweDk0NDM1OGNlLAotCTB4OGY4NDAwMTgsIDB4MGEwMDBlYjgsIDB4M2MwMjQwMTMsIDB4OTQ0MzU4Y2UsIDB4OGY4NDAwMTgsIDB4M2MwMjQwMTQsCi0JMHgwMDYyMTgyNSwgMHhhYzgzMDAxYywgMHgwZTAwMTRjYywgMHgyNDA0MDAwMSwgMHg4ZTcwMDAxNCwgMHg4ZjYyMDA0MCwKLQkweDE0NTAwMDAzLCAweDAwNTAxMDIzLCAweDBhMDAwZWMzLCAweDAwMDAxMDIxLCAweDI4NDIwMDAxLCAweDEwNDAwMDNhLAotCTB4MDAwMDAwMDAsIDB4MGUwMDBmYWUsIDB4MDIwMDIwMjEsIDB4YWY3MDAwNDAsIDB4OTM2MjAwM2UsIDB4MzA0MjAwMDEsCi0JMHgxNDQwMDAwYiwgMHgzYzAyOTAwMCwgMHg5MzYyMDAyMiwgMHgyNDQyMDAwMSwgMHhhMzYyMDAyMiwgMHg5MzYzMDAyMiwKLQkweDNjMDIwODAwLCAweDhjNDQwMDk4LCAweDAwNjQxODJiLCAweDE0NjAwMDI1LCAweDNjMDIwODAwLCAweDNjMDI5MDAwLAotCTB4MzQ0MjAwMDEsIDB4MDI0MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHgzNDQyMDAwMSwgMHhhMzYyMDA3ZCwKLQkweDhmNjQwMDc0LCAweDM0NjMwMDAxLCAweDAyNDMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLAotCTB4MDI0MDIwMjEsIDB4MGUwMDA0NzAsIDB4MjQwNTAyNzMsIDB4MGEwMDBlZjYsIDB4MjQwMjAwMDEsIDB4OGY0MjAxZjgsCi0JMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjUyMDFjMCwgMHhhMzQyMDFjNCwKLQkweGFmNDMwMWY4LCAweDI0MDIwMDAxLCAweGE3NjIwMDEyLCAweDBhMDAwZWZlLCAweGEzNjAwMDIyLCAweDk3NDMwMDdhLAotCTB4OTQ0NDAwMmEsIDB4MDA2NDE4MjEsIDB4MzA2M2ZmZmUsIDB4YTc2MzAwMTIsIDB4OTc0MjAxMDgsIDB4OGZiZjAwMjQsCi0JMHg4ZmI0MDAyMCwgMHg4ZmIzMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwMDAyMTA0MiwKLQkweDMwNDIwMDAxLCAweDAzZTAwMDA4LCAweDI3YmQwMDI4LCAweDI3YmRmZmUwLCAweGFmYjIwMDE4LCAweDNjMTIwODAwLAotCTB4OGU0MjAwMjAsIDB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsIDB4YWZiZjAwMWMsIDB4MTA0MDAwNDYsIDB4YWZiMTAwMTQsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4Zjg0MDAxOCwgMHg4ZTAyMDAwMCwgMHhhYzgyMDAwMCwgMHg5MzYzMDBiMSwKLQkweDkzNjIwMGM1LCAweDhmODUwMDE4LCAweDAwMDMxZTAwLCAweDAwMDIxNDAwLCAweDM0NDIwMTAwLCAweDAwNjIxODI1LAotCTB4YWNhMzAwMDQsIDB4OGY4NDAwMTgsIDB4OGUwMjAwMWMsIDB4YWM4MjAwMDgsIDB4OGY4MzAwMTgsIDB4OGY2MjAwNDgsCi0JMHhhYzYyMDAwYywgMHg4Zjg0MDAxOCwgMHg5NjAyMDAxMiwgMHhhYzgyMDAxMCwgMHg4ZjgzMDAxOCwgMHg4ZjYyMDA0MCwKLQkweDI0MDQwMDAxLCAweGFjNjIwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDNjMDIwODAwLAotCTB4MjQ1MTU4YzAsIDB4YWNhMzAwMTgsIDB4OTYyMzAwMGUsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTYsIDB4MDA2MjE4MjUsCi0JMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg5NjAzMDAwOCwgMHgzMDYzMDAxMCwgMHgxMDYwMDAxYywgMHg4ZTQyMDAyMCwKLQkweDEwNDAwMDFhLCAweDhlMTAwMDAwLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTAwMDAwLAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMDQsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMDgsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMGMsCi0JMHg4ZjgyMDAxOCwgMHhhYzQwMDAxMCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAzNjAwMCwKLQkweDhjNjM0NDQ4LCAweDI0MDQwMDAxLCAweGFjYTMwMDE4LCAweDk2MjIwMDBlLCAweDhmODUwMDE4LCAweDNjMDM0MDE1LAotCTB4MDA0MzEwMjUsIDB4MGUwMDE0Y2MsIDB4YWNhMjAwMWMsIDB4MDAwMDEwMjEsIDB4OGZiZjAwMWMsIDB4OGZiMjAwMTgsCi0JMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlMCwgMHhhZmIyMDAxOCwKLQkweDNjMTIwODAwLCAweDhlNDIwMDIwLCAweGFmYjAwMDEwLCAweDI3NTAwMTAwLCAweGFmYmYwMDFjLCAweDEwNDAwMDQxLAotCTB4YWZiMTAwMTQsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MzAwMTgsIDB4OGUwMjAwMDAsIDB4YWM2MjAwMDAsCi0JMHg4Zjg0MDAxOCwgMHgyNDAyMDEwMCwgMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwgMHg4ZTAyMDAxYywgMHhhYzYyMDAwOCwKLQkweDhmODQwMDE4LCAweDhlMDIwMDE4LCAweGFjODIwMDBjLCAweDhmODMwMDE4LCAweDk2MDIwMDEyLCAweGFjNjIwMDEwLAotCTB4OGY4NDAwMTgsIDB4OTYwMjAwMDgsIDB4YWM4MjAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsCi0JMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwgMHgyNDUxNThjMCwgMHhhY2EzMDAxOCwgMHg5NjIzMDAwZSwgMHg4Zjg1MDAxOCwKLQkweDNjMDI0MDE3LCAweDAwNjIxODI1LCAweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDk2MDMwMDA4LCAweDMwNjMwMDEwLAotCTB4MTA2MDAwMWMsIDB4OGU0MjAwMjAsIDB4MTA0MDAwMWEsIDB4OGUxMDAwMDAsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHg4ZjgyMDAxOCwgMHhhYzUwMDAwMCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwNCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwOCwKLQkweDhmODMwMDE4LCAweGFjNjAwMDBjLCAweDhmODIwMDE4LCAweGFjNDAwMDEwLCAweDhmODMwMDE4LCAweGFjNjAwMDE0LAotCTB4OGY4NTAwMTgsIDB4M2MwMzYwMDAsIDB4OGM2MzQ0NDgsIDB4MjQwNDAwMDEsIDB4YWNhMzAwMTgsIDB4OTYyMjAwMGUsCi0JMHg4Zjg1MDAxOCwgMHgzYzAzNDAxNSwgMHgwMDQzMTAyNSwgMHgwZTAwMTRjYywgMHhhY2EyMDAxYywgMHgwMDAwMTAyMSwKLQkweDhmYmYwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDIwLAotCTB4MjdiZGZmZjAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTAsIDB4MjdiZGZmZDAsIDB4YWZiMTAwMTQsIDB4MDA4MDg4MjEsCi0JMHhhZmI0MDAyMCwgMHgwMGMwYTAyMSwgMHhhZmJmMDAyOCwgMHhhZmI1MDAyNCwgMHhhZmIzMDAxYywgMHhhZmIyMDAxOCwKLQkweGFmYjAwMDEwLCAweDkzNjIwMDIzLCAweDAwZTBhODIxLCAweDMwNDIwMDQwLCAweDEwNDAwMDNlLCAweDMwYjNmZmZmLAotCTB4M2MxMjA4MDAsIDB4OGU0MjAwMjAsIDB4MTA0MDAwM2EsIDB4OGY3MDAwNGMsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHg4ZjgyMDAxOCwgMHhhYzUxMDAwMCwgMHg4Zjg0MDAxOCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwKLQkweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LCAweGFjNjAwMDEwLCAweDhmODIwMDE4LAotCTB4MjQwNDAwMDEsIDB4YWM1MDAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4M2MwMjA4MDAsCi0JMHgyNDUwNThjMCwgMHhhY2EzMDAxOCwgMHg5NjAzMDAwZSwgMHg4Zjg1MDAxOCwgMHgzYzAyNDAxMCwgMHgwMDYyMTgyNSwKLQkweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDhlNDMwMDIwLCAweDEwNjAwMDFiLCAweDAwMDAwMDAwLCAweDBlMDAxNDhlLAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1MTAwMDAsIDB4OGY4NDAwMTgsIDB4M2MwMjAwOGQsIDB4YWM4MjAwMDQsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwKLQkweDhmODIwMDE4LCAweGFjNTUwMDE0LCAweDhmODUwMDE4LCAweDNjMDM2MDAwLCAweDhjNjM0NDQ4LCAweDI0MDQwMDAxLAotCTB4YWNhMzAwMTgsIDB4OTYwMjAwMGUsIDB4OGY4NTAwMTgsIDB4M2MwMzQwMTksIDB4MDA0MzEwMjUsIDB4MGUwMDE0Y2MsCi0JMHhhY2EyMDAxYywgMHg5MzYyMDAyMywgMHgzMDQyMDAyMCwgMHgxNDQwMDAwMywgMHgzYzEyMDgwMCwgMHgxMjgwMDAzZiwKLQkweDNjMDI5MDAwLCAweDhlNDIwMDIwLCAweDhmNzAwMDRjLCAweDEwNDAwMDNiLCAweDNjMDI5MDAwLCAweDBlMDAxNDhlLAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1MTAwMDAsIDB4OGY4NDAwMTgsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwKLQkweDhmODIwMDE4LCAweDI0MDQwMDAxLCAweGFjNTAwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LAotCTB4M2MwMjA4MDAsIDB4MjQ1MDU4YzAsIDB4YWNhMzAwMTgsIDB4OTYwMzAwMGUsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTAsCi0JMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg4ZTQzMDAyMCwgMHgxMDYwMDAxYywgMHgzYzAyOTAwMCwKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTEwMDAwLCAweDhmODQwMDE4LCAweDAwMTMxNDAwLAotCTB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM3NTAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAzNjAwMCwgMHg4YzYzNDQ0OCwKLQkweDI0MDQwMDAxLCAweGFjYTMwMDE4LCAweDk2MDIwMDBlLCAweDhmODUwMDE4LCAweDNjMDM0MDFiLCAweDAwNDMxMDI1LAotCTB4MGUwMDE0Y2MsIDB4YWNhMjAwMWMsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsIDB4MDIyMjEwMjUsIDB4YWY0MjAwMjAsCi0JMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYzMDAyMywKLQkweDNjMDI4MDAwLCAweDM0NDIwMDAxLCAweDAyMjIxMDI1LCAweDhmYmYwMDI4LCAweDhmYjUwMDI0LCAweDhmYjQwMDIwLAotCTB4OGZiMzAwMWMsIDB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MzA2MzAwOWYsIDB4YTM2MzAwMjMsCi0JMHhhZjQyMDAyMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAzMCwgMHgyN2JkZmZlMCwgMHhhZmIxMDAxNCwgMHgyNzUxMDEwMCwKLQkweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweGFmYjAwMDEwLCAweDAwODA4MDIxLCAweDAyMDIxMDI1LCAweDNjMDM4MDAwLAotCTB4YWZiZjAwMTgsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsCi0JMHhhNzYwMDAwOCwgMHg4ZjYzMDA1YywgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHhhZjYzMDE0OCwgMHg4ZjY0MDA1MCwKLQkweDAyMDIxMDI1LCAweDNjMDM5MDAwLCAweGFmNjQwMTdjLCAweGFmNDIwMDIwLCAweDhmNDUwMTAwLCAweDM0NjMwMDAxLAotCTB4M2MwNDgwMDAsIDB4MDBhMzE4MjUsIDB4YWY0MzAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0NDEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHgzNDQyMDAwMSwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwKLQkweDM0NjMwMDAxLCAweDAwYTMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAwYTAyMDIxLAotCTB4MGUwMDA0NzAsIDB4MjQwNTBkZTUsIDB4MGEwMDEwOTMsIDB4M2MwMjA4MDAsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjQ1MDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwKLQkweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDEwNjAwMDFlLCAweDhmYmYwMDE4LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4OGY4MzAwMTgsIDB4YWM3MDAwMDAsIDB4OTYyMjAwMGMsIDB4OGY4NDAwMTgsIDB4MDAwMjE0MDAsIDB4YWM4MjAwMDQsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwKLQkweDhmODIwMDE4LCAweGFjNDAwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLAotCTB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMWYsIDB4MDA2MjE4MjUsCi0JMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg4ZmJmMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwKLQkweDI3YmQwMDIwLCAweDNjMDIwODAwLCAweDI0NDI0YzNjLCAweGFmODIwMDBjLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4MjdiZGZmZTgsIDB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsIDB4YWZiZjAwMTQsIDB4OGUwMjAwMWMsIDB4MTQ0MDAwMDMsCi0JMHgzYzAyMDgwMCwgMHgwMDAwMDAwZCwgMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwgMHgxMDYwMDAyMCwgMHgwMDAwMTAyMSwKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODMwMDE4LCAweDhlMDIwMDAwLCAweGFjNjIwMDAwLCAweDhmODQwMDE4LAotCTB4OGUwMjAwMWMsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4NDAwMTgsIDB4OGUwMjAwMTgsCi0JMHhhYzgyMDAwYywgMHg4Zjg1MDAxOCwgMHg5NjAyMDAxMiwgMHhhY2EyMDAxMCwgMHg4ZjgzMDAxOCwgMHgzYzAyNjAwMCwKLQkweGFjNjAwMDE0LCAweDhmODQwMDE4LCAweDhjNDM0NDQ4LCAweDNjMDIwODAwLCAweGFjODMwMDE4LCAweDk0NDM1OGNlLAotCTB4OGY4NDAwMTgsIDB4M2MwMjQwMTIsIDB4MDA2MjE4MjUsIDB4YWM4MzAwMWMsIDB4MGUwMDE0Y2MsIDB4MjQwNDAwMDEsCi0JMHgwMDAwMTAyMSwgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgzYzAyMDgwMCwKLQkweDk3NDMwMDc4LCAweDk0NDQwMDJlLCAweDAwMDAxMDIxLCAweDAwNjQxODIxLCAweDMwNjNmZmZlLCAweDAzZTAwMDA4LAotCTB4YTc2MzAwMTAsIDB4MjdiZGZmZjAsIDB4MDAwMDEwMjEsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTAsIDB4OGY0MjAxMDAsCi0JMHgzNDQyMDAwMSwgMHhhZjQyMDBhNCwgMHgwM2UwMDAwOCwgMHgwMDAwMTAyMSwgMHgyN2JkZmZlMCwgMHhhZmJmMDAxOCwKLQkweGFmYjEwMDE0LCAweGFmYjAwMDEwLCAweDkzNjIwMDdlLCAweDMwZDAwMGZmLCAweDE2MDIwMDMxLCAweDAwODA4ODIxLAotCTB4OGY2MjAxNzgsIDB4MTYwMjAwMmUsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2YsIDB4MTYwMjAwMmIsIDB4MDAwMDAwMDAsCi0JMHg5MzYyMDA3YSwgMHgxNjAyMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDlkMiwKLQkweDBlMDAxM2U2LCAweDAwMDAwMDAwLCAweDNjMDM5MDAwLCAweDM0NjMwMDAxLCAweDNjMDQ4MDAwLCAweDAyMjMxODI1LAotCTB4YTM3MDAwN2EsIDB4YWY0MzAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0NDEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsCi0JMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwgMHgwMjIzMTgyNSwKLQkweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAyMjAyMDIxLCAweDBlMDAwNDcwLCAweDI0MDUwOWRkLAotCTB4MGEwMDExMzgsIDB4OGZiZjAwMTgsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsCi0JMHgzYzAzMTAwMCwgMHhhZjUxMDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHgwYTAwMTEzOCwgMHg4ZmJmMDAxOCwKLQkweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwOWUyLCAweDhmYmYwMDE4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLAotCTB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZTgsIDB4MzBhNTAwZmYsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMDgwMzgyMSwgMHgwMGUyMTAyNSwgMHgzYzAzODAwMCwgMHhhZmJmMDAxMCwgMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweDAwYTIxMDI1LAotCTB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsIDB4MDBlMzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsCi0JMHgzYzAzODAwMCwgMHgwMGUwMjAyMSwgMHgwZTAwMDQ3MCwgMHgwMGMwMjgyMSwgMHgwYTAwMTE2MSwgMHg4ZmJmMDAxMCwKLQkweDhmNDIwMWY4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNDcwMWMwLAotCTB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsIDB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwMjA4MDAsCi0JMHg4YzQzMDAyMCwgMHgyN2JkZmZlOCwgMHhhZmIwMDAxMCwgMHgyNzUwMDEwMCwgMHgxMDYwMDAyNCwgMHhhZmJmMDAxNCwKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODMwMDE4LCAweDhlMDIwMDAwLCAweGFjNjIwMDAwLCAweDhmODQwMDE4LAotCTB4OGUwMjAwMDQsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4OGUwMjAwMTgsIDB4YWM2MjAwMDgsIDB4OGY4NDAwMTgsCi0JMHg4ZTAzMDAxYywgMHhhYzgzMDAwYywgMHg5NjAyMDAwYywgMHg5MjAzMDAwYSwgMHg4Zjg0MDAxOCwgMHgwMDAyMTQwMCwKLQkweDAwNDMxMDI1LCAweGFjODIwMDEwLCAweDhmODMwMDE4LCAweDNjMDI2MDAwLCAweGFjNjAwMDE0LCAweDhmODQwMDE4LAotCTB4OGM0MzQ0NDgsIDB4YWM4MzAwMTgsIDB4OTYwMjAwMDgsIDB4M2MwMzA4MDAsIDB4OTQ2NDU4Y2UsIDB4OGY4NTAwMTgsCi0JMHgwMDAyMTQwMCwgMHgwMDQ0MTAyNSwgMHgyNDA0MDAwMSwgMHgwZTAwMTRjYywgMHhhY2EyMDAxYywgMHg4ZmJmMDAxNCwKLQkweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDI3YmRmZmU4LAotCTB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsIDB4MTA2MDAwMjAsIDB4YWZiZjAwMTQsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHg4ZjgyMDAxOCwgMHhhYzQwMDAwMCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwNCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwOCwKLQkweDhmODMwMDE4LCAweGFjNjAwMDBjLCAweDk2MDIwMDBjLCAweDk2MDMwMDBlLCAweDhmODQwMDE4LCAweDAwMDIxNDAwLAotCTB4MDA0MzEwMjUsIDB4YWM4MjAwMTAsIDB4OGY4MzAwMTgsIDB4M2MwMjYwMDAsIDB4YWM2MDAwMTQsIDB4OGY4NDAwMTgsCi0JMHg4YzQzNDQ0OCwgMHhhYzgzMDAxOCwgMHg5NjAyMDAwOCwgMHgzYzAzMDgwMCwgMHg5NDY0NThjZSwgMHg4Zjg1MDAxOCwKLQkweDAwMDIxNDAwLCAweDAwNDQxMDI1LCAweDI0MDQwMDAxLCAweDBlMDAxNGNjLCAweGFjYTIwMDFjLCAweDhmYmYwMDE0LAotCTB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MjdiZGZmZTgsIDB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsCi0JMHhhZmJmMDAxNCwgMHg5NjAyMDAwYywgMHgxMDQwMDAyNCwgMHgwMDgwMjgyMSwgMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwKLQkweDEwNjAwMDNhLCAweDhmYmYwMDE0LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODQwMDE4LCAweDhlMDMwMDAwLAotCTB4YWM4MzAwMDAsIDB4OTYwMjAwMGMsIDB4OGY4NDAwMTgsIDB4MDAwMjE0MDAsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwKLQkweGFjNDAwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLAotCTB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMGIsIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsCi0JMHhhY2EzMDAxYywgMHgwYTAwMTFmZiwgMHg4ZmJmMDAxNCwgMHg5MzYyMDAwNSwgMHgzMDQyMDAxMCwgMHgxNDQwMDAxNSwKLQkweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAwYTIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4M2MwMzgwMDAsIDB4OTM2MjAwMDUsIDB4MzQ2MzAwMDEsCi0JMHgwMGEwMjAyMSwgMHgwMGEzMTgyNSwgMHgyNDA1NTg1MiwgMHgzNDQyMDAxMCwgMHhhMzYyMDAwNSwgMHgwZTAwMDc2NiwKLQkweGFmNDMwMDIwLCAweDBhMDAxMWZmLCAweDhmYmYwMDE0LCAweDAwMDAwMDBkLCAweDhmYmYwMDE0LCAweDhmYjAwMDEwLAotCTB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MjdiZGZmZTgsIDB4YWZiMDAwMTAsCi0JMHgyNzUwMDEwMCwgMHgxMDYwMDAyMiwgMHhhZmJmMDAxNCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4Zjg0MDAxOCwKLQkweDhlMDIwMDA0LCAweGFjODIwMDAwLCAweDk2MDMwMDBjLCAweDk3NjIwMDJjLCAweDhmODQwMDE4LCAweDAwMDMxYzAwLAotCTB4MDA0MzEwMjUsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwKLQkweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LAotCTB4M2MwMjQwMGUsIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4MGUwMDEyMmUsIDB4OGUwNDAwMDAsCi0JMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgzYzAzODAwMCwgMHg4ZjQyMDI3OCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNDQwMjQwLCAweGEzNDIwMjQ0LAotCTB4MDNlMDAwMDgsIDB4YWY0MzAyNzgsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MjdiZGZmZTAsIDB4YWZiMTAwMTQsCi0JMHgwMDgwODgyMSwgMHhhZmIyMDAxOCwgMHgwMGMwOTAyMSwgMHhhZmIwMDAxMCwgMHgzMGIwZmZmZiwgMHgxMDYwMDAxYywKLQkweGFmYmYwMDFjLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTEwMDAwLCAweDhmODQwMDE4LAotCTB4MDAxMDE0MDAsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzUyMDAxNCwgMHg4Zjg0MDAxOCwgMHgzYzAyNjAwMCwKLQkweDhjNDM0NDQ4LCAweDNjMDIwODAwLCAweGFjODMwMDE4LCAweDk0NDM1OGNlLCAweDhmODQwMDE4LCAweDNjMDI0MDE5LAotCTB4MDA2MjE4MjUsIDB4YWM4MzAwMWMsIDB4MGUwMDE0Y2MsIDB4MjQwNDAwMDEsIDB4OGZiZjAwMWMsIDB4OGZiMjAwMTgsCi0JMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlOCwgMHgyNzQ1MDEwMCwKLQkweGFmYmYwMDEwLCAweDk0YTMwMDBjLCAweDI0MDIwMGMxLCAweDE0NjIwMDMxLCAweDAwODAzMDIxLCAweDNjMDI5MDAwLAotCTB4MzQ0MjAwMDEsIDB4MDBjMjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHgzYzA0OTAwMCwgMHgzNDg0MDAwMSwgMHgzYzA1ODAwMCwKLQkweDI0MDMwMDEyLCAweDAwYzIxMDI1LCAweDAwYzQyMDI1LCAweGEzNjMwMDNmLCAweGFmNDIwMDIwLCAweGFmNDQwMDIwLAotCTB4OGY0MjAwMjAsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsCi0JMHgzNDQyMDAyMCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwgMHgwMGMzMTgyNSwgMHhhZjQzMDAyMCwKLQkweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAwYzAyMDIxLCAweDBlMDAwNDcwLCAweDI0MDUwOTA2LCAweDBhMDAxMmExLAotCTB4OGZiZjAwMTAsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsCi0JMHhhZjQ2MDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHgwYTAwMTJhMSwgMHg4ZmJmMDAxMCwgMHgwMGMwMjAyMSwKLQkweDk0YTUwMDBjLCAweDI0MDYwMDAxLCAweDBlMDAwZmIxLCAweDI0MDcwOTBlLCAweDhmYmYwMDEwLCAweDAzZTAwMDA4LAotCTB4MjdiZDAwMTgsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MjdiZGZmZTAsIDB4YWZiMDAwMTAsIDB4MDA4MDgwMjEsCi0JMHhhZmIyMDAxOCwgMHgwMGEwOTAyMSwgMHhhZmIxMDAxNCwgMHgzMGQxMDBmZiwgMHgxMDYwMDAxYywgMHhhZmJmMDAxYywKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTAwMDAwLCAweDhmODQwMDE4LCAweDI0MDIwMDAxLAotCTB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzUyMDAxNCwgMHg4Zjg0MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwKLQkweDNjMDIwODAwLCAweGFjODMwMDE4LCAweDk0NDM1OGNlLCAweDhmODQwMDE4LCAweDNjMDI0MDEwLCAweDAwNjIxODI1LAotCTB4YWM4MzAwMWMsIDB4MGUwMDE0Y2MsIDB4MDIyMDIwMjEsIDB4OGZiZjAwMWMsIDB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsCi0JMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxNCwgMHhhZmIwMDAxMCwKLQkweDkzNjIwMDA1LCAweDMwNDIwMDAxLCAweDEwNDAwMDM2LCAweDAwODA4MDIxLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4MDIwMjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg5MzYyMDAyMywgMHgzNDQyMDAwNCwgMHhhMzYyMDAyMywgMHg5MzYzMDAwNSwgMHgzYzA0ODAwMCwKLQkweDNjMDIwODAwLCAweDMwNjMwMGZlLCAweGEzNjMwMDA1LCAweDhjNDMwMDIwLCAweDM0ODQwMDAxLCAweDAyMDQyMDI1LAotCTB4YWY0NDAwMjAsIDB4MTA2MDAwMjAsIDB4OGZiZjAwMTQsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsCi0JMHhhYzUwMDAwMCwgMHg5MzYzMDA4MiwgMHg5MzYyMDAzZiwgMHg4Zjg0MDAxOCwgMHgwMDAzMWEwMCwgMHgwMDQzMTAyNSwKLQkweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LAotCTB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTQsIDB4OGY4NDAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsCi0JMHgzYzAyMDgwMCwgMHhhYzgzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg0MDAxOCwgMHgzYzAyNDAwYSwgMHgwMDYyMTgyNSwKLQkweGFjODMwMDFjLCAweDBlMDAxNGNjLCAweDI0MDQwMDAxLCAweDhmYmYwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LAotCTB4MjdiZDAwMTgsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MjdiZGZmZTAsIDB4YWZiMTAwMTQsIDB4MDA4MDg4MjEsCi0JMHhhZmIyMDAxOCwgMHgwMGEwOTAyMSwgMHhhZmIwMDAxMCwgMHgzMGQwMDBmZiwgMHgxMDYwMDAyZiwgMHhhZmJmMDAxYywKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTEwMDAwLCAweDhmODMwMDE4LCAweGFjNzAwMDA0LAotCTB4OGY4MjAwMTgsIDB4YWM1MjAwMDgsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMGMsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTAsCi0JMHg5NzYzMDA2YSwgMHgwMDAzMjg4MCwgMHg1MGEwMDAwMSwgMHgyNDA1MDAwMSwgMHg5NzYzMDA2OCwgMHg5MzY0MDA4MSwKLQkweDNjMDIwODAwLCAweDhjNDYwMDRjLCAweDAwNjUyODIxLCAweDAwODUyODA0LCAweDAwYzUxMDJiLCAweDU0NDAwMDAxLAotCTB4MDBhMDMwMjEsIDB4M2MwMjA4MDAsIDB4OGM0NDAwNTAsIDB4MDBjNDE4MmIsIDB4NTQ2MDAwMDEsIDB4MDBjMDIwMjEsCi0JMHg4ZjgzMDAxOCwgMHgyNDAyZmZmZSwgMHgwMDgyMjgyNCwgMHgzYzAyNjAwMCwgMHhhYzY1MDAxNCwgMHg4Zjg0MDAxOCwKLQkweDhjNDM0NDQ4LCAweDNjMDIwODAwLCAweGFjODMwMDE4LCAweDk0NDM1OGNlLCAweDhmODQwMDE4LCAweDNjMDI0MDExLAotCTB4MDA2MjE4MjUsIDB4YWM4MzAwMWMsIDB4MGUwMDE0Y2MsIDB4MjQwNDAwMDEsIDB4OGZiZjAwMWMsIDB4OGZiMjAwMTgsCi0JMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxNCwKLQkweGFmYjAwMDEwLCAweDhmNDQwMTAwLCAweDI3NTAwMTAwLCAweDhmNjUwMDUwLCAweDBlMDAxMGZjLCAweDkyMDYwMDFiLAotCTB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MTA2MDAwMWQsIDB4OGUxMDAwMTgsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHg4Zjg0MDAxOCwgMHg4ZjQyMDEwMCwgMHhhYzgyMDAwMCwgMHg4ZjgzMDAxOCwgMHhhYzcwMDAwNCwgMHg4Zjg0MDAxOCwKLQkweDhmNjIwMDUwLCAweGFjODIwMDA4LCAweDhmODMwMDE4LCAweGFjNjAwMDBjLCAweDhmODIwMDE4LCAweGFjNDAwMDEwLAotCTB4OGY4MzAwMTgsIDB4M2MwMjYwMDAsIDB4YWM2MDAwMTQsIDB4OGY4NTAwMTgsIDB4OGM0MzQ0NDgsIDB4MjQwNDAwMDEsCi0JMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwgMHgzYzAyNDAxYywgMHgwMDYyMTgyNSwKLQkweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDhmYmYwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LAotCTB4OGY0MzAyMzgsIDB4M2MwMjA4MDAsIDB4MDQ2MTAwMTMsIDB4OGM0NDAwOWMsIDB4MjQwNmZmZmUsIDB4M2MwNTA4MDAsCi0JMHgzYzAzODAwMCwgMHgyNDg0ZmZmZiwgMHgxNDgwMDAwOSwgMHgwMDAwMDAwMCwgMHg5NzQyMDA3OCwgMHg4Y2EzMDA3YywKLQkweDI0NDIwMDAxLCAweDAwNDYxMDI0LCAweDI0NjMwMDAxLCAweGE3NjIwMDEwLCAweDAzZTAwMDA4LCAweGFjYTMwMDdjLAotCTB4OGY0MjAyMzgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZjMsIDB4MjQ4NGZmZmYsIDB4OGY0MjAxNDAsIDB4M2MwMzEwMDAsCi0JMHhhZjQyMDIwMCwgMHgwM2UwMDAwOCwgMHhhZjQzMDIzOCwgMHgyN2JkZmZlOCwgMHgzYzAyOTAwMCwgMHhhZmJmMDAxMCwKLQkweDhmNDUwMTQwLCAweDM0NDIwMDAxLCAweDNjMDM4MDAwLCAweDAwYTIxMDI1LCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsIDB4MzQ0MjAwMDEsCi0JMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwgMHgwMGEzMTgyNSwgMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwKLQkweDNjMDM4MDAwLCAweDAwYTAyMDIxLCAweDBlMDAwNDcwLCAweDI0MDUwYWM3LCAweDBhMDAxM2I5LCAweDhmYmYwMDEwLAotCTB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsIDB4YWY0NTAxYzAsCi0JMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHg4ZmJmMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgwMDAwMDAwZCwKLQkweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDI0MDIwMDAxLAotCTB4MDNlMDAwMDgsIDB4YTc2MjAwMTAsIDB4OTM2MjAwM2YsIDB4MzA0NDAwZmYsIDB4Mzg4MzAwMGUsIDB4MmM2MzAwMDEsCi0JMHgzODgyMDAxMCwgMHgyYzQyMDAwMSwgMHgwMDYyMTgyNSwgMHgxNDYwMDAwMywgMHgyNDAyMDAxMiwgMHgxNDgyMDAwMywKLQkweDAwMDAwMDAwLCAweDAzZTAwMDA4LCAweDAwMDAxMDIxLCAweDkzNjMwMDdlLCAweDkzNjIwMDdhLCAweDE0NjIwMDA2LAotCTB4MDAwMDAwMDAsIDB4OTM2MzAwN2UsIDB4MjQwMjAwMDEsIDB4MjQ2MzAwMDEsIDB4MDNlMDAwMDgsIDB4YTM2MzAwN2UsCi0JMHg5MzYyMDA3ZSwgMHg4ZjYzMDE3OCwgMHgzMDQyMDBmZiwgMHgxNDQzMDAwNiwgMHgwMDAwMDAwMCwgMHg5MzYzMDAwYiwKLQkweDI0MDIwMDAxLCAweDI0NjMwMDAxLCAweDAzZTAwMDA4LCAweGEzNjMwMDBiLCAweDAzZTAwMDA4LCAweDAwMDAxMDIxLAotCTB4OTM2MjAwMGIsIDB4MTA0MDAwMjMsIDB4MDAwMDEwMjEsIDB4YTM2MDAwMGIsIDB4OTM2MjAwM2YsIDB4MzA0NDAwZmYsCi0JMHgzODgzMDAwZSwgMHgyYzYzMDAwMSwgMHgzODgyMDAxMCwgMHgyYzQyMDAwMSwgMHgwMDYyMTgyNSwgMHgxNDYwMDAxNywKLQkweDAwMDAxODIxLCAweDI0MDIwMDEyLCAweDEwODIwMDE0LCAweDAwMDAwMDAwLCAweDkzNjMwMDdlLCAweDkzNjIwMDdhLAotCTB4MTQ2MjAwMDcsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2UsIDB4MjQwMzAwMDEsIDB4MjQ0MjAwMDEsIDB4YTM2MjAwN2UsCi0JMHgwM2UwMDAwOCwgMHgwMDYwMTAyMSwgMHg5MzYyMDA3ZSwgMHg4ZjYzMDE3OCwgMHgzMDQyMDBmZiwgMHgxNDQzMDAwNSwKLQkweDAwMDAxODIxLCAweDkzNjIwMDBiLCAweDI0MDMwMDAxLCAweDI0NDIwMDAxLCAweGEzNjIwMDBiLCAweDAzZTAwMDA4LAotCTB4MDA2MDEwMjEsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4MjQwNDAwMDEsIDB4YWY2NDAwMGMsIDB4OGY2MzAwZGMsCi0JMHg4ZjYyMDBjYywgMHg1MDYyMDAwMSwgMHhhNzY0MDAxMCwgMHhhNzY0MDAxMiwgMHhhNzY0MDAxNCwgMHgwM2UwMDAwOCwKLQkweGE3NjQwMDE2LCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDI3YmRmZmU4LCAweDEwNjAwMDFiLCAweGFmYmYwMDEwLAotCTB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMDAsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDQsCi0JMHg4ZjgyMDAxOCwgMHhhYzQwMDAwOCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwYywgMHg4ZjgyMDAxOCwgMHhhYzQwMDAxMCwKLQkweDhmODMwMDE4LCAweDNjMDI2MDAwLCAweGFjNjAwMDE0LCAweDhmODQwMDE4LCAweDhjNDM0NDQ4LCAweDNjMDIwODAwLAotCTB4YWM4MzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NDAwMTgsIDB4M2MwMjQwMjAsIDB4MDA2MjE4MjUsIDB4YWM4MzAwMWMsCi0JMHgwZTAwMTRjYywgMHgyNDA0MDAwMSwgMHg4ZmJmMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgzYzAyMDgwMCwKLQkweDhjNDMwMDIwLCAweDI3YmRmZmUwLCAweGFmYjAwMDEwLCAweDAwYTA4MDIxLCAweGFmYjEwMDE0LCAweDAwYzA4ODIxLAotCTB4YWZiMjAwMTgsIDB4MDBlMDkwMjEsIDB4MTA2MDAwMWUsIDB4YWZiZjAwMWMsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHg4Zjg0MDAxOCwgMHg4ZjQyMDEwMCwgMHhhYzgyMDAwMCwgMHg4ZjgzMDAxOCwgMHhhYzcwMDAwNCwgMHg4ZjgyMDAxOCwKLQkweGFjNTEwMDA4LCAweDhmODMwMDE4LCAweGFjNzIwMDBjLCAweDhmODQwMDE4LCAweDhmYTIwMDMwLCAweGFjODIwMDEwLAotCTB4OGY4MzAwMTgsIDB4OGZhMjAwMzQsIDB4YWM2MjAwMTQsIDB4OGY4NDAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsCi0JMHgzYzAyMDgwMCwgMHhhYzgzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg0MDAxOCwgMHgzYzAyNDBjOSwgMHgwMDYyMTgyNSwKLQkweGFjODMwMDFjLCAweDBlMDAxNGNjLCAweDI0MDQwMDAxLCAweDhmYmYwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LAotCTB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MjdiZGZmZTgsCi0JMHhhZmIwMDAxMCwgMHgyNzUwMDEwMCwgMHgxMDYwMDAxZCwgMHhhZmJmMDAxNCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwKLQkweDhmODMwMDE4LCAweDhlMDIwMDA0LCAweGFjNjIwMDAwLCAweDhmODQwMDE4LCAweDhlMDIwMDE4LCAweGFjODIwMDA0LAotCTB4OGY4NTAwMTgsIDB4OGUwMjAwMDAsIDB4YWNhMjAwMDgsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMGMsIDB4OGY4MjAwMTgsCi0JMHhhYzQwMDAxMCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxNCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAxOCwgMHg5NjAzMDAwOCwKLQkweDNjMDIwODAwLCAweDk0NDQ1OGNlLCAweDhmODUwMDE4LCAweDAwMDMxYzAwLCAweDAwNjQxODI1LCAweDI0MDQwMDAxLAotCTB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsCi0JMHgzYzA2MDgwMCwgMHgyNGM1NThjMCwgMHgzYzAyMDAwYSwgMHgwMzQyMTgyMSwgMHg5NDY0MDAwNiwgMHg5NGEyMDAwYSwKLQkweDAwNDQxMDIzLCAweDAwMDIxNDAwLCAweDAwMDIxYzAzLCAweDA0NjEwMDA2LCAweGE0YTQwMDA2LCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDAwNWEsIDB4MGEwMDE0YTMsIDB4MjQwMjAwMDEsIDB4OGY4MjAwMTQsIDB4MDA2MjEwMmIsCi0JMHgxNDQwMDAwMiwgMHgwMDAwMTAyMSwgMHgyNDAyMDAwMSwgMHgzMDQyMDBmZiwgMHgxMDQwMDAxYywgMHgyNzRhMDQwMCwKLQkweDNjMDcwMDBhLCAweDNjMDIwODAwLCAweDI0NDU1OGMwLCAweDk0YTkwMDBhLCAweDhmODgwMDE0LCAweDAzNDcxMDIxLAotCTB4OTQ0MzAwMDYsIDB4MDA0MDIwMjEsIDB4YTRhMzAwMDYsIDB4OTQ4MjAwMDYsIDB4YTRhMjAwMDYsIDB4MDEyMjEwMjMsCi0JMHgwMDAyMTQwMCwgMHgwMDAyMTQwMywgMHgwNDQxMDAwNiwgMHgwMDQ4MTAyYiwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwKLQkweDI0MDAwMDVhLCAweDBhMDAxNGJlLCAweDI0MDIwMDAxLCAweDE0NDAwMDAyLCAweDAwMDAxMDIxLCAweDI0MDIwMDAxLAotCTB4MzA0MjAwZmYsIDB4MTQ0MGZmZWMsIDB4MDM0NzEwMjEsIDB4MjRjNDU4YzAsIDB4OGM4MjAwMTAsIDB4YWY0MjAwMzgsCi0JMHg4YzgzMDAxNCwgMHgzYzAyMDAwNSwgMHhhZjQzMDAzYywgMHhhZjQyMDAzMCwgMHhhZjgwMDAxMCwgMHhhZjhhMDAxOCwKLQkweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDI3YmRmZmUwLCAweDhmODIwMDEwLCAweDhmODUwMDE4LCAweDNjMDcwODAwLAotCTB4MjRlODU4YzAsIDB4YWZiZjAwMWMsIDB4YWZiMjAwMTgsIDB4YWZiMTAwMTQsIDB4YWZiMDAwMTAsIDB4OTUwMzAwMGEsCi0JMHg4ZDA2MDAxNCwgMHgwMDAwOTAyMSwgMHgzMDkwMDBmZiwgMHgwMGUwODgyMSwgMHgyNDQyMDAwMSwgMHgyNGE1MDAyMCwKLQkweDI0NjMwMDAxLCAweGFmODIwMDEwLCAweGFmODUwMDE4LCAweGE1MDMwMDBhLCAweDI0YzMwMDIwLCAweDNjMDI4MDAwLAotCTB4MDRjMTAwMDcsIDB4YWQwMzAwMTQsIDB4MDA2MjEwMjQsIDB4MTQ0MDAwMDUsIDB4MjYyMjU4YzAsIDB4OGQwMjAwMTAsCi0JMHgyNDQyMDAwMSwgMHhhZDAyMDAxMCwgMHgyNjIyNThjMCwgMHg5NDQ0MDAwYSwgMHg5NDQ1MDAxOCwgMHgwMDEwMTAyYiwKLQkweDAwYTQxODI2LCAweDJjNjMwMDAxLCAweDAwNjIxODI1LCAweDEwNjAwMDFjLCAweDNjMDMwMDA2LCAweDhmODIwMDEwLAotCTB4MjQxMjAwMDEsIDB4MDAwMjExNDAsIDB4MDA0MzEwMjUsIDB4YWY0MjAwMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyNzQ1MDQwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAxMCwgMHgxMDQwZmZmZCwgMHgyNjIyNThjMCwKLQkweDk0NDQwMDBhLCAweDk0NDMwMDE4LCAweGFmODAwMDEwLCAweGFmODUwMDE4LCAweDE0ODMwMDEyLCAweDI2Mjc1OGMwLAotCTB4MGUwMDE1NWEsIDB4MDAwMDAwMDAsIDB4MTYwMDAwMGUsIDB4MjYyNzU4YzAsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHgwYTAwMTUxNywgMHgyNjI3NThjMCwgMHgwMDA0MWMwMCwgMHgwMDAzMWMwMywgMHgwMDA1MTQwMCwgMHgwMDAyMTQwMywKLQkweDAwNjIxODIzLCAweDE4NjAwMDAyLCAweDNjMDI2MDAwLCAweGFjNDAwODA4LCAweDI2Mjc1OGMwLCAweDk0ZTIwMDBlLAotCTB4OTRlMzAwMGMsIDB4MjQ0MjAwMDEsIDB4YTRlMjAwMGUsIDB4MzA0MmZmZmYsIDB4NTA0MzAwMDEsIDB4YTRlMDAwMGUsCi0JMHgxMjAwMDAwNSwgMHgzYzAyMDAwYSwgMHg5NGUyMDAwYSwgMHhhNzQyMDBhMiwgMHgwYTAwMTU1NCwgMHgwMjQwMTAyMSwKLQkweDAzNDIxODIxLCAweDk0NjQwMDA2LCAweDk0ZTIwMDBhLCAweDAwNDQxMDIzLCAweDAwMDIxNDAwLCAweDAwMDIxYzAzLAotCTB4MDQ2MTAwMDYsIDB4YTRlNDAwMDYsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAwNWEsIDB4MGEwMDE1MzYsCi0JMHgyNDAyMDAwMSwgMHg4ZjgyMDAxNCwgMHgwMDYyMTAyYiwgMHgxNDQwMDAwMiwgMHgwMDAwMTAyMSwgMHgyNDAyMDAwMSwKLQkweDMwNDIwMGZmLCAweDEwNDAwMDFiLCAweDNjMDIwODAwLCAweDNjMDYwMDBhLCAweDI0NDU1OGMwLCAweDk0YTgwMDBhLAotCTB4OGY4NzAwMTQsIDB4MDM0NjEwMjEsIDB4OTQ0MzAwMDYsIDB4MDA0MDIwMjEsIDB4YTRhMzAwMDYsIDB4OTQ4MjAwMDYsCi0JMHhhNGEyMDAwNiwgMHgwMTAyMTAyMywgMHgwMDAyMTQwMCwgMHgwMDAyMTQwMywgMHgwNDQxMDAwNiwgMHgwMDQ3MTAyYiwKLQkweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMDVhLCAweDBhMDAxNTUwLCAweDI0MDIwMDAxLCAweDE0NDAwMDAyLAotCTB4MDAwMDEwMjEsIDB4MjQwMjAwMDEsIDB4MzA0MjAwZmYsIDB4MTQ0MGZmZWMsIDB4MDM0NjEwMjEsIDB4MDI0MDEwMjEsCi0JMHg4ZmJmMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwKLQkweDNjMDIwODAwLCAweDI0NDU1OGMwLCAweDk0YTMwMDFhLCAweDhjYTQwMDI0LCAweDAwNDAzMDIxLCAweDAwMDMxOGMwLAotCTB4MDA4MzIwMjEsIDB4YWY0NDAwM2MsIDB4OGNhMjAwMjAsIDB4YWY0MjAwMzgsIDB4M2MwMjAwNTAsIDB4MzQ0MjAwMDgsCi0JMHhhZjQyMDAzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAyMCwKLQkweDEwNDBmZmZkLCAweDAwMDAwMDAwLCAweDhmNDMwNDAwLCAweDI0YzY1OGMwLCAweGFjYzMwMDEwLCAweDhmNDIwNDA0LAotCTB4M2MwMzAwMjAsIDB4YWNjMjAwMTQsIDB4YWY0MzAwMzAsIDB4OTRjNDAwMTgsIDB4OTRjMzAwMWMsIDB4OTRjMjAwMWEsCi0JMHg5NGM1MDAxZSwgMHgwMDgzMjAyMSwgMHgyNDQyMDAwMSwgMHhhNGMyMDAxYSwgMHgzMDQyZmZmZiwgMHgxNDQ1MDAwMiwKLQkweGE0YzQwMDE4LCAweGE0YzAwMDFhLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDhmODIwMDEwLCAweDNjMDMwMDA2LAotCTB4MDAwMjExNDAsIDB4MDA0MzEwMjUsIDB4YWY0MjAwMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgyNzQzMDQwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAxMCwgMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwgMHhhZjgwMDAxMCwKLQkweGFmODMwMDE4LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDI3YmRmZmU4LCAweGFmYjAwMDEwLCAweDNjMTAwODAwLAotCTB4MjYxMDU4YzAsIDB4M2MwNTAwMGEsIDB4MDIwMDIwMjEsIDB4MDM0NTI4MjEsIDB4YWZiZjAwMTQsIDB4MGUwMDE1YjAsCi0JMHgyNDA2MDAwYSwgMHg5NjAyMDAwMiwgMHg5NjAzMDAxZSwgMHgzMDQyMDAwZiwgMHgyNDQyMDAwMywgMHgwMDQzMTgwNCwKLQkweDI0MDI3ZmZmLCAweDAwNDMxMDJiLCAweGFmODMwMDE0LCAweDEwNDAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDAwNDMsIDB4MGUwMDE1NWEsIDB4MDAwMDAwMDAsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsCi0JMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgxMGMwMDAwNywgMHgwMDAwMDAwMCwgMHg4Y2EyMDAwMCwgMHgyNGM2ZmZmZiwKLQkweDI0YTUwMDA0LCAweGFjODIwMDAwLCAweDE0YzBmZmZiLCAweDI0ODQwMDA0LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4MGEwMDE1YzEsIDB4MDBhMDEwMjEsIDB4YWM4NjAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjQ4NDAwMDQsCi0JMHgwMGEwMTAyMSwgMHgxNDQwZmZmYSwgMHgyNGE1ZmZmZiwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgzYzAzNjAwMCwKLQkweDhjNjQyYjdjLCAweDNjMDM2MDEwLCAweDhjNjU1M2ZjLCAweDAwMDQxNTgyLCAweDAwMDQyMzAyLCAweDMwODQwM2ZmLAotCTB4MDAwNTJkODIsIDB4MDA0NDEwMjYsIDB4MDAwMjEwMmIsIDB4MDAwNTI4MmIsIDB4MDA0NTEwMjUsIDB4MTQ0MDAwMGQsCi0JMHgzYzAyMDA1MCwgMHgzNDQyMDAwNCwgMHhhZjQwMDAzOCwgMHhhZjQwMDAzYywgMHhhZjQyMDAzMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDhmNDIwMDAwLCAweDMwNDIwMDIwLCAweDEwNDBmZmZkLCAweDNjMDIwMDIwLCAweGFmNDIwMDMwLAotCTB4MDAwMDAwMGQsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4M2MwMjAwNTAsIDB4MzQ0MjAwMDQsIDB4YWY0NDAwMzgsCi0JMHhhZjQ1MDAzYywgMHhhZjQyMDAzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAyMCwKLQkweDEwNDBmZmZkLCAweDNjMDIwMDIwLCAweGFmNDIwMDMwLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfTsKK3N0YXRpYyB1OCBibngyX0NPTV9iMDZGd1RleHRbXSA9IHsKKwkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweDA5LCAweDgzLCAweDQxLCAweDQ0LCAweDAwLCAweDAzLCAweDc0LCAweDY1LAorCTB4NzMsIDB4NzQsIDB4MzEsIDB4MmUsIDB4NjIsIDB4NjksIDB4NmUsIDB4MDAsIDB4ZWMsIDB4NWIsIDB4N2QsIDB4NmMsCisJMHg1YiwgMHhkNywgMHg3NSwgMHgzZiwgMHhlZiwgMHhmMSwgMHg1MSwgMHg3YSwgMHg5NiwgMHg2OCwgMHhmOSwgMHg5OSwKKwkweDdlLCAweDk2LCAweDU5LCAweDRmLCAweGIxLCAweDQ5LCAweGYxLCAweGM5LCAweGQyLCAweDYyLCAweDJkLCAweDYzLAorCTB4MzQsIDB4MzUsIDB4ZDEsIDB4M2EsIDB4MjYsIDB4NjYsIDB4NDgsIDB4ZGEsIDB4NzEsIDB4MzYsIDB4NjcsIDB4YTAsCisJMHgxZCwgMHgwNSwgMHg1MSwgMHg1MSwgMHhhZiwgMHhkMCwgMHg0OCwgMHhkOSwgMHhjZCwgMHhiMiwgMHgwYywgMHg3MywKKwkweDk2LCAweGI0LCAweDcwLCAweGJjLCAweGI0LCAweGExLCAweDI1LCAweDc5LCAweGY1LCAweDA2LCAweDQ1LCAweGNmLAorCTB4YjMsIDB4MzQsIDB4MzksIDB4YzAsIDB4ODIsIDB4NDEsIDB4MTAsIDB4OWQsIDB4M2EsIDB4N2YsIDB4MzAsIDB4YTUsCisJMHhlZCwgMHg3YywgMHgxOSwgMHhlOCwgMHgxMiwgMHgyOSwgMHhiMiwgMHg5MywgMHhiNSwgMHg0MywgMHhkMCwgMHhhNiwKKwkweDY4LCAweGZmLCAweGU4LCAweDhhLCAweDZlLCAweDMwLCAweDUyLCAweDBjLCAweGYzLCAweDNhLCAweGEwLCAweDMwLAorCTB4ZmEsIDB4YzcsIDB4ZTYsIDB4MmQsIDB4MWYsIDB4ZGMsIDB4ZWYsIDB4ZGMsIDB4NzcsIDB4MWYsIDB4ZjksIDB4NDgsCisJMHg1MSwgMHg5NiwgMHgxYywgMHgzNCwgMHg1ZCwgMHhiNywgMHg5OSwgMHg4MCwgMHhmMCwgMHhkZSwgMHhiZCwgMHhmNywKKwkweGJjLCAweDdiLCAweGNmLCAweDNkLCAweGRmLCAweGU3LCAweGRjLCAweGFiLCAweDVmLCAweDUzLCAweGE5LCAweDg1LAorCTB4ZTQsIDB4NmYsIDB4MmQsIDB4ZmUsIDB4YzIsIDB4N2YsIDB4ZjQsIDB4YzcsIDB4YjksIDB4ZGIsIDB4M2UsIDB4N2QsCisJMHg1YiwgMHgxZiwgMHg1ZSwgMHgwNywgMHg1NCwgMHhkZCwgMHhhZiwgMHg3MiwgMHhiZiwgMHgwZiwgMHg3ZiwgMHgyNiwKKwkweGZlLCAweGZhLCAweGU0LCAweDdiLCAweGEzLCAweDlmLCAweDgxLCAweGJmLCAweDJiLCAweDE4LCAweDFjLCAweGZlLAorCTB4MDksIDB4OTEsIDB4YjIsIDB4MGMsIDB4OGMsIDB4ZjcsIDB4NTcsIDB4MmUsIDB4NWYsIDB4N2YsIDB4OWMsIDB4MTcsCisJMHgwZSwgMHhhZiwgMHg2MiwgMHg5ZSwgMHg5YiwgMHhiZiwgMHg5YiwgMHhiZiwgMHg5YiwgMHhiZiwgMHg5YiwgMHhiZiwKKwkweDliLCAweGJmLCAweDliLCAweGJmLCAweDliLCAweGJmLCAweGZmLCAweDNmLCAweDNmLCAweDlmLCAweDEzLCAweDcyLAorCTB4ODgsIDB4OTgsIDB4ODUsIDB4ZmYsIDB4NDgsIDB4NTcsIDB4ZTMsIDB4ODksIDB4YTEsIDB4YTQsIDB4NDUsIDB4YmEsCisJMHgyZiwgMHg3ZSwgMHg2NSwgMHgyOCwgMHg2NywgMHgxMSwgMHgyNSwgMHg4YSwgMHhkYiwgMHhjMywgMHgyOSwgMHhmYSwKKwkweGIwLCAweDljLCAweDM3LCAweDM1LCAweGUyLCAweGZlLCAweDViLCAweGUyLCAweDFmLCAweDNjLCAweGZkLCAweGZhLAorCTB4OWQsIDB4OTEsIDB4YWIsIDB4YjMsIDB4M2UsIDB4ZDIsIDB4OGQsIDB4ZjgsIDB4Y2IsIDB4YmEsIDB4YjEsIDB4OGQsCisJMHhmNCwgMHgwZSwgMHg3YywgMHhmMywgMHg1YywgMHhmNywgMHg3ZiwgMHhhOCwgMHhkNCwgMHhlNiwgMHhjZSwgMHg3NSwKKwkweGE1LCAweGZjLCAweDdhLCAweDM3LCAweGU1LCAweDM3LCAweGM3LCAweDc1LCAweDUyLCAweGUzLCAweDVkLCAweDNmLAorCTB4NDgsIDB4ZmEsIDB4OGMsIDB4NjEsIDB4NWYsIDB4ZGMsIDB4YTAsIDB4ZjksIDB4MTIsIDB4NjUsIDB4MGUsIDB4NGMsCisJMHhmMCwgMHgxYSwgMHhiMSwgMHg3NSwgMHhmNywgMHg2MiwgMHgyZSwgMHgyZCwgMHgzZSwgMHgzYywgMHhmNCwgMHg2NywKKwkweGQ2LCAweGQzLCAweDY1LCAweGQ1LCAweGIyLCAweDdhLCAweGU2LCAweDI4LCAweDMwLCAweGYwLCAweDdjLCAweDNmLAorCTB4YzYsIDB4OGIsIDB4OTEsIDB4MWUsIDB4YTIsIDB4M2IsIDB4NDksIDB4YjUsIDB4ZjIsIDB4MDEsIDB4OWYsIDB4YTUsCisJMHg1MywgMHhiMiwgMHg2NCwgMHg1MSwgMHhhYSwgMHg0NCwgMHhmNCwgMHg3NywgMHg0NSwgMHg4NSwgMHg5ZSwgMHhiNywKKwkweGRhLCAweDY5LCAweGFlLCAweGY3LCAweDgzLCAweDcyLCAweDAyLCAweGI4LCAweGJjLCAweDZkLCAweDBkLCAweDBmLAorCTB4OGQsIDB4NWIsIDB4M2MsIDB4NTcsIDB4N2MsIDB4OWQsIDB4ODMsIDB4NmYsIDB4NmYsIDB4NWIsIDB4Y2UsIDB4ZDIsCisJMHg2OCwgMHhiNCwgMHhjOCwgMHg3ZCwgMHhiZCwgMHgyZCwgMHhkYywgMHhlNywgMHg4ZiwgMHgzZiwgMHgxYywgMHg3YywKKwkweGRlLCAweDBhLCAweGM4LCAweGJlLCAweDFmLCAweGE1LCAweDkyLCAweDk4LCAweDZmLCAweGFjLCAweGM4LCAweGIwLAorCTB4Y2YsIDB4ZGUsIDB4OTEsIDB4YjMsIDB4NGMsIDB4ZDksIDB4NmYsIDB4YzUsIDB4OTMsIDB4NTYsIDB4MDgsIDB4ZmQsCisJMHgxZCwgMHg3MiwgMHgyYywgMHhiZCwgMHgyZSwgMHg2NywgMHg1OSwgMHg3MiwgMHhhYywgMHg4OCwgMHg2ZiwgMHg3YSwKKwkweDY1LCAweGZmLCAweDNiLCAweGE5LCAweDljLCAweDE1LCAweDkzLCAweGZkLCAweDU3LCAweDkzLCAweDQ5LCAweGFiLAorCTB4NWYsIDB4ZjYsIDB4MWYsIDB4YmUsIDB4MmIsIDB4NjcsIDB4YzUsIDB4NjUsIDB4ZmYsIDB4ZjcsIDB4ODEsIDB4OGIsCisJMHg0MSwgMHhjNywgMHg4YSwgMHg2MSwgMHhmYywgMHgyNSwgMHgzMCwgMHhmZSwgMHg5YSwgMHg0MSwgMHg2ZCwgMHgxOSwKKwkweDhjLCAweDYxLCAweGVmLCAweGI2LCAweDRlLCAweDk3LCAweDdkLCAweDIxLCAweDdhLCAweGJkLCAweGZiLCAweDMyLAorCTB4NjgsIDB4NjMsIDB4ZDAsIDB4ZDksIDB4MTIsIDB4MjksIDB4OTksIDB4ZWUsIDB4MTAsIDB4NjgsIDB4NjIsIDB4ZDIsCisJMHhiOSwgMHg1MiwgMHgyYiwgMHhmOSwgMHg0ZSwgMHhmYSwgMHhiMCwgMHhlNywgMHhjZiwgMHg1MSwgMHhkNiwgMHhkNCwKKwkweDY5LCAweGZkLCAweDhjLCAweDQyLCAweDlkLCAweDdkLCAweDZiLCAweDI4LCAweDYxLCAweGU0LCAweDI5LCAweGQ1LAorCTB4OGQsIDB4MjgsIDB4NmUsIDB4ZDIsIDB4MjQsIDB4NmQsIDB4NjYsIDB4NzEsIDB4YmQsIDB4OGEsIDB4MWUsIDB4OTUsCisJMHgyMiwgMHhhMSwgMHgyYywgMHgyOCwgMHgzYywgMHg3MiwgMHhmYSwgMHg1ZCwgMHg4ZSwgMHgzOSwgMHhiMSwgMHgyNiwKKwkweGZmLCAweDg1LCAweDI5LCAweDM1LCAweDcxLCAweDJiLCAweDBkLCAweDFiLCAweDhjLCAweDBmLCAweDgwLCAweDA1LAorCTB4MWYsIDB4NzQsIDB4MjUsIDB4NzksIDB4MmEsIDB4NDQsIDB4YzcsIDB4ZWMsIDB4ODAsIDB4OTIsIDB4M2EsIDB4NzUsCisJMHgzNywgMHgyNSwgMHg2MywgMHg2NCwgMHhhYSwgMHhkNCwgMHgyNSwgMHhiZSwgMHgyZCwgMHgxNCwgMHg0MywgMHgzNCwKKwkweDZlLCAweDkzLCAweDkyLCAweGI0LCAweDk5LCAweDVlLCAweGVkLCAweDE4LCAweDZmLCAweDEzLCAweGIwLCAweGU4LAorCTB4ZWIsIDB4ZjAsIDB4NTEsIDB4OTcsIDB4OTEsIDB4MjIsIDB4OWQsIDB4NzEsIDB4NDYsIDB4N2YsIDB4NTAsIDB4NDksCisJMHg4YiwgMHgzOSwgMHg0NCwgMHg3ZiwgMHg3OCwgMHg4YywgMHgwMiwgMHg3NCwgMHhiYSwgMHg2OCwgMHg0YSwgMHhkOCwKKwkweDcyLCAweDM5LCAweDE5LCAweDMzLCAweDAwLCAweDA3LCAweGRhLCAweGQ5LCAweDI2LCAweDBkLCAweGUzLCAweDM5LAorCTB4NmEsIDB4ZjMsIDB4ZmEsIDB4MjEsIDB4YzgsIDB4Y2MsIDB4YjcsIDB4ODcsIDB4YjIsIDB4ZDMsIDB4NjIsIDB4YmUsCisJMHhiMCwgMHgyZiwgMHhjZSwgMHhmMywgMHg3NSwgMHgwMCwgMHhlZSwgMHgxZCwgMHhlMCwgMHhhNSwgMHg5MCwgMHgyNiwKKwkweDc4LCAweDk1LCAweGEwLCAweGVjLCAweDg0LCAweDAyLCAweDc5LCAweGMyLCAweDUzLCAweGQwLCAweDJkLCAweDBkLAorCTB4ZmMsIDB4MzUsIDB4YjIsIDB4ZmEsIDB4MTQsIDB4Y2EsIDB4NTksIDB4OWIsIDB4MjgsIDB4NmYsIDB4YTAsIDB4NWQsCisJMHhiYywgMHhhMCwgMHgyNiwgMHhlZCwgMHg2NiwgMHg0YSwgMHg2OSwgMHg2MSwgMHhlYywgMHg1ZiwgMHhjOCwgMHgwYSwKKwkweDhkLCAweGUxLCAweDFiLCAweGQ1LCAweDYyLCAweDk4LCAweDlmLCAweDYxLCAweGVmLCAweGMzLCAweDgyLCAweGZlLAorCTB4NGQsIDB4ZjEsIDB4ZmQsIDB4NzQsIDB4NjksIDB4MjIsIDB4YWYsIDB4MjYsIDB4NGIsIDB4ZWQsIDB4ZTQsIDB4OWIsCisJMHg4OSwgMHg0MCwgMHg5YSwgMHhjNywgMHhkNSwgMHhkNCwgMHgxOSwgMHg4ZCwgMHhmYywgMHg5MywgMHgwYSwgMHg0MSwKKwkweDNlLCAweDBjLCAweDVmLCAweGZjLCAweGI4LCAweGJhLCAweGIzLCAweDc0LCAweDQxLCAweDRkLCAweDk1LCAweGY4LAorCTB4MWIsIDB4YzAsIDB4MTYsIDB4NTUsIDB4ZDAsIDB4OTYsIDB4ZGYsIDB4YjcsIDB4ODMsIDB4OTYsIDB4MzQsIDB4YWMsCisJMHhjNiwgMHg3NSwgMHgzZCwgMHg1MSwgMHg2NCwgMHg5OSwgMHhlNSwgMHg2ZiwgMHhjMSwgMHgwZiwgMHhlYywgMHhlNSwKKwkweDljLCAweDBkLCAweGZlLCAweDA4LCAweDdlLCAweDg1LCAweGMxLCAweGFmLCAweDZmLCAweDgyLCAweDVmLCAweGZkLAorCTB4ZTAsIDB4NTMsIDB4OGMsIDB4ZGUsIDB4MjgsIDB4ZjUsIDB4ZDIsIDB4NmIsIDB4YTUsIDB4MWUsIDB4N2EsIDB4MTUsCisJMHgzMiwgMHhmOSwgMHg0YSwgMHgyOSwgMHg0YywgMHgyZiwgMHg5NywgMHgzYSwgMHhlOCwgMHhhNSwgMHg1MiwgMHg4OCwKKwkweGNlLCAweDBiLCAweDFlLCAweGE2LCAweDIxLCAweGZmLCAweDgyLCAweGFmLCAweGZhLCAweDI2LCAweGYwLCAweGE0LAorCTB4MWQsIDB4M2MsIDB4NTksIDB4MGYsIDB4NzksIDB4ZDksIDB4MDgsIDB4ZjksIDB4OWIsIDB4ZWUsIDB4ZDYsIDB4NjksCisJMHhhYSwgMHg5YiwgMHgxMiwgMHg0MSwgMHhmNCwgMHg2ZiwgMHg4OSwgMHg2YiwgMHg4MiwgMHg0ZSwgMHgxYSwgMHhjNiwKKwkweGM3LCAweDI2LCAweGZjLCAweDk0LCAweDMyLCAweDRlLCAweGQzLCAweDdiLCAweDkzLCAweDFhLCAweDhkLCAweDk1LAorCTB4YTYsIDB4MzYsIDB4M2EsIDB4N2MsIDB4ZTMsIDB4ZjYsIDB4MmMsIDB4NWQsIDB4NDQsIDB4NWYsIDB4Y2EsIDB4OTgsCisJMHhhNSwgMHg0YiwgMHhkYiwgMHg1NCwgMHgxYSwgMHg5ZCwgMHhmZSwgMHgxYiwgMHg0YSwgMHg5ZSwgMHgzOSwgMHg0ZCwKKwkweDNmLCAweGZlLCAweDNhLCAweDUxLCAweDA2LCAweDM0LCAweDUxLCAweGZiLCAweDdlLCAweDVhLCAweDRlLCAweDE4LAorCTB4YTAsIDB4NDUsIDB4NWYsIDB4YWYsIDB4OTAsIDB4MDgsIDB4YjUsIDB4OGYsIDB4NzksIDB4MTksIDB4ODYsIDB4YWUsCisJMHg2OCwgMHg0YSwgMHhjYSwgMHg3ZSwgMHgwMSwgMHhmYSwgMHhkMiwgMHhhYSwgMHgyNCwgMHhhNywgMHg4OCwgMHg3MiwKKwkweDUzLCAweDY1LCAweGNhLCAweGM1LCAweGZjLCAweGY0LCAweDk4LCAweDUxLCAweGE2LCAweDc0LCAweGFjLCAweDg5LAorCTB4YmUsIDB4NjgsIDB4YjQsIDB4ZDMsIDB4NjgsIDB4ZWYsIDB4NmYsIDB4ZjgsIDB4ZGMsIDB4NWMsIDB4NjUsIDB4YmEsCisJMHhkNCwgMHg4ZiwgMHg3NywgMHhlZSwgMHgyMywgMHg5YSwgMHgxMiwgMHhlZiwgMHg0ZSwgMHg3ZiwgMHhiZSwgMHhlNCwKKwkweGE3LCAweDg0LCAweDk5LCAweDBmLCAweDY5LCAweGY0LCAweDhlLCAweGNmLCAweGMxLCAweDI5LCAweGUxLCAweDhlLAorCTB4ODEsIDB4NTcsIDB4YzMsIDB4YjAsIDB4MGYsIDB4OGUsIDB4MGMsIDB4NjYsIDB4MjcsIDB4ZDYsIDB4NWMsIDB4NGIsCisJMHg4OCwgMHg2ZSwgMHhjMCwgMHgwYiwgMHhkOSwgMHhkMywgMHgxOCwgMHg4ZiwgMHg2MSwgMHgyNSwgMHg2ZSwgMHg1MiwKKwkweGE3LCAweGQwLCAweDhkLCAweDdlLCAweGMwLCAweDBjLCAweDI4LCAweGZiLCAweDRhLCAweGNjLCAweDZiLCAweGJjLAorCTB4MTcsIDB4MTksIDB4ZDcsIDB4Y2QsIDB4ODAsIDB4ZDUsIDB4ZjAsIDB4NGMsIDB4NDgsIDB4OWMsIDB4YmQsIDB4NzgsCisJMHhmMiwgMHg1YywgMHg4YywgMHgyNywgMHgzZiwgMHg3ZiwgMHhjZiwgMHg4MywgMHhlNywgMHhlNywgMHgyYiwgMHhlZiwKKwkweDUzLCAweDllLCAweGY3LCAweDdjLCAweGU5LCAweDRmLCAweDAzLCAweDBlLCAweDdlLCAweDRjLCAweGNmLCAweDAxLAorCTB4MWEsIDB4OWQsIDB4MzgsIDB4MmMsIDB4ZDcsIDB4YzIsIDB4N2IsIDB4OTEsIDB4ZDcsIDB4MzgsIDB4MGQsIDB4M2EsCisJMHgwOSwgMHhjOCwgMHgxNSwgMHhkNiwgMHgzYSwgMHhlYywgMHg1OSwgMHhlYiwgMHg0OSwgMHhjZiwgMHg1YSwgMHg0ZiwKKwkweDdhLCAweGQ2LCAweGNhLCAweDgzLCAweGI2LCAweGI0LCAweDRlLCAweGI1LCAweGZjLCAweGQwLCAweDUxLCAweGVlLAorCTB4MzksIDB4OGUsIDB4MzksIDB4OWYsIDB4MDMsIDB4NWYsIDB4YmUsIDB4MGEsIDB4OTgsIDB4MzgsIDB4MmQsIDB4ZGEsCisJMHhhMCwgMHhjNywgMHg5NCwgMHg0NiwgMHg3YiwgMHg0ZCwgMHg3ZSwgMHg3ZiwgMHhiMSwgMHhkNSwgMHhjMSwgMHg4YiwKKwkweGRmLCAweDJmLCAweDQ4LCAweDljLCAweDVhLCAweDFkLCAweGI4LCAweGQyLCAweDE1LCAweGExLCAweGZmLCAweGYzLAorCTB4MjUsIDB4ZDYsIDB4NGYsIDB4OGEsIDB4ZjksIDB4MmMsIDB4M2EsIDB4OTQsIDB4OGUsIDB4YjUsIDB4ZDMsIDB4OTgsCisJMHhhMSwgMHhjNCwgMHg0NiwgMHg3YiwgMHg5YSwgMHg5OSwgMHg4ZSwgMHgwOSwgMHhkNSwgMHg2YSwgMHg4NSwgMHgwZSwKKwkweDUwLCAweDU4LCAweDY1LCAweGRiLCAweDI1LCAweGYwLCAweDdiLCAweDQ5LCAweGUyLCAweDYxLCAweDcwLCAweDNiLAorCTB4YTMsIDB4NWEsIDB4YzEsIDB4YmEsIDB4N2UsIDB4OTYsIDB4ZGYsIDB4NTcsIDB4ZjAsIDB4Y2UsIDB4MzIsIDB4OWMsCisJMHhkNCwgMHg5YywgMHhiNSwgMHg1ZiwgMHg0NSwgMHg5YiwgMHhlZCwgMHhjZSwgMHg2NiwgMHhkOSwgMHg3NiwgMHhjNywKKwkweGZmLCAweGEwLCAweGE5LCAweGI2LCAweGZkLCAweDA1LCAweGIzLCAweGI2LCAweGVkLCAweGVhLCAweDgyLCAweGQ3LAorCTB4NjYsIDB4ZjEsIDB4ZGUsIDB4YzIsIDB4ZTQsIDB4YjMsIDB4NTgsIDB4OGUsIDB4ZmMsIDB4YzAsIDB4MzUsIDB4MDYsCisJMHgzZCwgMHg2YywgMHg5NiwgMHgzOCwgMHg3YywgMHg0YiwgMHhlMiwgMHgwMCwgMHg1YywgMHgwMSwgMHgzNywgMHg1YSwKKwkweGUyLCAweDZmLCAweDA0LCAweDRiLCAweGVhLCAweGRhLCAweDRjLCAweDQzLCAweGY3LCAweDdkLCAweGFkLCAweDE4LAorCTB4YmYsIDB4ZWMsIDB4ZTMsIDB4NzUsIDB4ZGMsIDB4MjcsIDB4MjksIDB4NjksIDB4ZTgsIDB4YzksIDB4ZDgsIDB4YjQsCisJMHg0NiwgMHhkOSwgMHhkOCwgMHgyNiwgMHgyMSwgMHhkNywgMHhkOSwgMHg1OCwgMHhkNSwgMHgwNiwgMHg4YywgMHg0ZSwKKwkweGQ0LCAweGRiLCAweDAwLCAweGZlLCAweDhlLCAweDZkLCAweDgwLCAweGEzLCAweGZiLCAweDYzLCAweGQzLCAweDZjLAorCTB4MGIsIDB4MWMsIDB4ZGQsIDB4M2YsIDB4MzYsIDB4YzEsIDB4MzYsIDB4NDEsIDB4Y2MsIDB4MDksIDB4ZmQsIDB4NjcsCisJMHgzYiwgMHhlMCwgMHhkYSwgMHgwMCwgMHhmZSwgMHg4NiwgMHg2ZCwgMHg4MCwgMHgwZiwgMHhmMiwgMHhjZCwgMHhmMywKKwkweGI5LCAweDZiLCAweDhmLCAweGQ3LCAweGNkLCAweDNiLCAweGNlLCAweGI2LCAweDQ1LCAweGQ5LCAweGQ5LCAweGNkLAorCTB4MzAsIDB4YzcsIDB4YjEsIDB4NzYsIDB4ODAsIDB4MGEsIDB4ZDMsIDB4Y2MsIDB4YzMsIDB4NDgsIDB4ZTgsIDB4MDgsCisJMHgxZCwgMHgxNywgMHgzNiwgMHhlZiwgMHhmNCwgMHgwNCwgMHgyNSwgMHgwZSwgMHg5ZSwgMHgxOCwgMHhhMCwgMHgzNCwKKwkweDZjLCAweGMwLCAweGRjLCAweGM0LCAweGI1LCAweDMyLCAweGY4LCAweDc4LCAweDQ3LCAweDEzLCAweDU5LCAweGIwLAorCTB4NzUsIDB4ZjAsIDB4OTMsIDB4ZmQsIDB4N2UsIDB4ZjIsIDB4YzUsIDB4ZTMsIDB4OTAsIDB4YjcsIDB4OTgsIDB4ZjAsCisJMHg1ZCwgMHhkNSwgMHg5ZiwgMHhhNiwgMHhlZCwgMHhhYSwgMHg2OSwgMHgzNywgMHhjMSwgMHgzZiwgMHg2MiwgMHhkZSwKKwkweGZlLCAweDk4LCAweDkwLCAweDRkLCAweGVmLCAweDJmLCAweDA5LCAweDFiLCAweDk0LCAweDhjLCAweDdkLCAweDA4LAorCTB4ZjksIDB4NzUsIDB4NjksIDB4ZTQsIDB4ZWEsIDB4MWYsIDB4ZGIsIDB4ZmEsIDB4MmIsIDB4MWUsIDB4MWYsIDB4YjIsCisJMHgwNSwgMHg3NiwgMHhkZiwgMHg4NCwgMHgzYywgMHhiOSwgMHg3NiwgMHg5ZiwgMHhlZCwgMHg3MSwgMHg4OCwgMHg2ZCwKKwkweDI2LCAweGY0LCAweDhkLCAweDZkLCAweDcwLCAweDgwLCAweGQ0LCAweDE5LCAweDRkLCAweGRhLCAweDY5LCAweDVkLAorCTB4ZGEsIDB4ZTksIDB4MDAsIDB4NmMsIDB4MzQsIDB4YjcsIDB4MGQsIDB4ZDksIDB4MzYsIDB4NDUsIDB4MWIsIDB4ZjYsCisJMHgxYSwgMHhmNiwgMHg3MCwgMHg3NywgMHgzYSwgMHgzNSwgMHhjMSwgMHhmZSwgMHgxMCwgMHhiZSwgMHg3YiwgMHg4NiwKKwkweDc1LCAweGY4LCAweGRiLCAweDQzLCAweDIzLCAweGQzLCAweGMyLCAweDA3LCAweGIwLCAweGZmLCAweDgwLCAweDY1LAorCTB4NjYsIDB4MWIsIDB4Y2UsIDB4YjYsIDB4MWMsIDB4ZmIsIDB4MmUsIDB4NjIsIDB4ZGQsIDB4OGEsIDB4YWQsIDB4NjQsCisJMHgzOSwgMHhmMSwgMHhlMiwgMHhjNSwgMHgzOCwgMHhhZCwgMHgyMSwgMHhmNSwgMHhhNCwgMHg0MywgMHg2YiwgMHgzNSwKKwkweGZlLCAweGE4LCAweDQ2LCAweDJkLCAweDRjLCAweDYzLCAweGM2LCAweDdmLCAweDJiLCAweDcwLCAweGU2LCAweDdkLAorCTB4ZmQsIDB4NGYsIDB4ZTAsIDB4Y2MsIDB4ZWIsIDB4ZDYsIDB4ZTMsIDB4NGQsIDB4N2EsIDB4NmIsIDB4ZmMsIDB4YWMsCisJMHhmZSwgMHhmMCwgMHgzMywgMHhhNCwgMHgzNywgMHhjNywgMHhjZiwgMHhkMiwgMHhiZiwgMHg1OCwgMHg3NCwgMHg5ZiwKKwkweDBlLCAweDNmLCAweGRiLCAweGFkLCAweGMwLCAweGNmLCAweDE2LCAweGExLCAweGVmLCAweDUzLCAweDNhLCAweDFkLAorCTB4M2MsIDB4MTUsIDB4YzksIDB4ZmMsIDB4MmIsIDB4NDUsIDB4NjEsIDB4M2YsIDB4NzYsIDB4ZDAsIDB4YzgsIDB4OTQsCisJMHg0MiwgMHg3YSwgMHgxNywgMHhiNSwgMHhjMywgMHg3ZiwgMHhmNCwgMHgzNywgMHg2MSwgMHhmZSwgMHg1ZCwgMHg0NCwKKwkweDliLCAweDFkLCAweGJmLCAweGQ5LCAweDE1LCAweDFlLCAweDA1LCAweGZmLCAweGQzLCAweDJmLCAweDdlLCAweDA1LAorCTB4ZGYsIDB4M2MsIDB4NGQsIDB4MDcsIDB4YTcsIDB4MGUsIDB4MmIsIDB4MzksIDB4ZmIsIDB4MDgsIDB4ZTAsIDB4OTcsCisJMHg4MywgMHhkNSwgMHgwMSwgMHg5YiwgMHgwNywgMHhlYywgMHg5NywgMHgzMSwgMHhlZiwgMHhkMywgMHhhNCwgMHhkZiwKKwkweDFlLCAweDE5LCAweDQ4LCAweDI4LCAweGMwLCAweGUzLCAweDQ1LCAweDAxLCAweDJmLCAweDdkLCAweDcxLCAweDk3LAorCTB4YjEsIDB4NTMsIDB4ZjAsIDB4M2YsIDB4NDAsIDB4ZWYsIDB4MTUsIDB4MmYsIDB4ODAsIDB4YmUsIDB4YmQsIDB4ZjAsCisJMHgzOSwgMHg5MSwgMHg2NywgMHg2MSwgMHg5MywgMHhlMSwgMHg4ZiwgMHgyMiwgMHg1NywgMHgzMSwgMHgyZCwgMHg3YywKKwkweDExLCAweDI5LCAweDBmLCAweDc2LCAweGE3LCAweDQxLCAweGVmLCAweDM4LCAweGZjLCAweGQzLCAweDAwLCAweGZjLAorCTB4NTMsIDB4MGMsIDB4YmUsIDB4YTksIDB4MDcsIDB4N2UsIDB4YzksIDB4ODIsIDB4NWYsIDB4MGEsIDB4ODMsIDB4MWYsCisJMHgwNiwgMHhjZCwgMHhjMiwgMHg0NywgMHhjZCwgMHg0MiwgMHhmZSwgMHhlNywgMHg2NiwgMHg0OCwgMHgxOSwgMHgwNCwKKwkweGFkLCAweGNmLCAweGMxLCAweDNmLCAweDI2LCAweDYzLCAweDc3LCAweDQyLCAweGNmLCAweDIyLCAweDE3LCAweDY2LAorCTB4ZDUsIDB4NDEsIDB4Y2EsIDB4YzEsIDB4OWYsIDB4NzcsIDB4NmUsIDB4OGIsIDB4NjIsIDB4YmQsIDB4MjYsIDB4NGEsCisJMHg4NCwgMHg1YywgMHgxZCwgMHhlNSwgMHhkZiwgMHg3ZSwgMHg4NSwgMHhhYywgMHg3ZiwgMHgwNiwgMHhlZiwgMHgyMiwKKwkweDYxLCAweGEyLCAweDNkLCAweDk0LCAweGI1LCAweGEzLCAweDQ2LCAweGE3LCAweGRhLCAweDAzLCAweDE4LCAweDZlLAorCTB4ODcsIDB4OTUsIDB4MDMsIDB4NTMsIDB4MTEsIDB4MDUsIDB4ZmIsIDB4MDMsIDB4Y2QsIDB4MjcsIDB4NjAsIDB4ZWIsCisJMHhjYiwgMHgzNCwgMHgxZSwgMHg2MywgMHgzZCwgMHgyOSwgMHhkMywgMHhmMywgMHhiMSwgMHhjOCwgMHg0MCwgMHg5ZSwKKwkweDVhLCAweGU5LCAweDk4LCAweDM5LCAweDIxLCAweDdjLCAweGJjLCAweDE2LCAweDNmLCAweDIxLCAweDc0LCAweDJjLAorCTB4NjcsIDB4ZTEsIDB4NTksIDB4ZWMsIDB4NTQsIDB4YjIsIDB4NTMsIDB4YmMsIDB4N2UsIDB4MTQsIDB4NWEsIDB4ZWUsCisJMHhjNywgMHg5MywgMHhlNywgMHgwNywgMHhkZCwgMHhmYSwgMHg0OSwgMHgzOSwgMHhkOCwgMHg5ZCwgMHg4NywgMHg3NywKKwkweDg4LCAweDE4LCAweDhiLCAweDU4LCAweDM5LCAweDM1LCAweDExLCAweDBkLCAweDQ1LCAweDU1LCAweDhkLCAweDg2LAorCTB4MzUsIDB4ODUsIDB4NDYsIDB4NjEsIDB4NmYsIDB4ZDIsIDB4YjEsIDB4ZmYsIDB4MmMsIDB4MWYsIDB4MzMsIDB4NzksCisJMHhiYywgMHg5OSwgMHhiZSwgMHgyYSwgMHhmYywgMHgwZCwgMHhkNiwgMHgyZSwgMHg0YywgMHg2MywgMHg1ZCwgMHgzZiwKKwkweGY4LCAweGNiLCAweGViLCAweGYyLCAweDNjLCAweDY4LCAweGMzLCAweGY2LCAweDZiLCAweDU2LCAweGU0LCAweGQ5LAorCTB4M2MsIDB4ZWQsIDB4MDAsIDB4NmQsIDB4ZDksIDB4NjYsIDB4YzEsIDB4M2UsIDB4MGMsIDB4NjAsIDB4ZWQsIDB4NWUsCisJMHhkOCwgMHg0ZiwgMHgzYywgMHg5MywgMHhiZCwgMHgxYywgMHgwNywgMHgwNSwgMHg2OCwgMHhkOCwgMHg2NCwgMHg3OSwKKwkweGQ0LCAweGU1LCAweDk4LCAweGU5LCAweDE5LCAweGYzLCAweGNiLCAweGIxLCAweDIwLCAweGZlLCAweGUwLCAweDdmLAorCTB4NGQsIDB4OTYsIDB4MTksIDB4NmUsIDB4NzMsIDB4NGMsIDB4YzYsIDB4MzQsIDB4MDksIDB4ZDMsIDB4ZGMsIDB4NjQsCisJMHgwMiwgMHgzNCwgMHg4YiwgMHg5YywgMHg0ZCwgMHgxMCwgMHhkMywgMHgwYywgMHg0NiwgMHg3YiwgMHg3ZiwgMHg4MiwKKwkweGJlLCAweDY0LCAweGFmLCAweGY3LCAweDNiLCAweGI2LCAweGIwLCAweDU1LCAweDQ5LCAweGMxLCAweDE3LCAweGE4LAorCTB4NTYsIDB4MGIsIDB4N2MsIDB4NDUsIDB4OTgsIDB4NWUsIDB4MTUsIDB4YjAsIDB4NjQsIDB4YTgsIDB4ZjEsIDB4NjgsCisJMHhlOCwgMHg0YiwgMHg3NCwgMHhhYiwgMHhiMCwgMHgxMSwgMHgwOSwgMHhjMywgMHg0YiwgMHhlMywgMHhmZiwgMHg1MiwKKwkweGM5LCAweDcyLCAweGJmLCAweDY5LCAweGE1LCAweGVjLCAweDIwLCAweGYzLCAweDg5LCAweGQ3LCAweDMzLCAweDY4LAorCTB4YWUsIDB4ZTQsIDB4YmMsIDB4ZmIsIDB4MTAsIDB4YTMsIDB4MTYsIDB4NjAsIDB4NmIsIDB4Y2UsIDB4NGYsIDB4YWEsCisJMHhmNCwgMHhmOCwgMHgxZCwgMHhmMCwgMHg2NSwgMHhiMSwgMHg2ZCwgMHg1OCwgMHhjYiwgMHhjNCwgMHg3OCwgMHgxZSwKKwkweDZkLCAweDE1LCAweDZkLCAweGU4LCAweDk5LCAweDExLCAweDAyLCAweDhmLCAweGI5LCAweDlmLCAweGUxLCAweDRjLAorCTB4ZmMsIDB4YmQsIDB4Y2YsIDB4YjEsIDB4NzUsIDB4M2UsIDB4YWIsIDB4ZGUsIDB4NGEsIDB4MTQsIDB4NjQsIDB4N2EsCisJMHhjNSwgMHg0MCwgMHgyYiwgMHhjYiwgMHg1MCwgMHhkNSwgMHg2ZCwgMHhjMiwgMHg1ZiwgMHgzYiwgMHhiNiwgMHhjNCwKKwkweDgyLCAweDJlLCAweGMyLCAweGU2LCAweGY2LCAweDc5LCAweDc1LCAweDkxLCAweGUzLCAweDA5LCAweDU3LCAweDE3LAorCTB4MjMsIDB4YTEsIDB4ODQsIDB4MGEsIDB4NWIsIDB4ZGMsIDB4YTcsIDB4ZDEsIDB4MDksIDB4ZDEsIDB4NTYsIDB4MjgsCisJMHgzMSwgMHgxOCwgMHgwOSwgMHgyZCwgMHhhOCwgMHgxYywgMHg0YiwgMHgzMywgMHg2YywgMHgxOCwgMHhmMSwgMHg0YSwKKwkweDQwLCAweGMyLCAweDIyLCAweDllLCAweGIzLCAweGRkLCAweDk4LCAweDMwLCAweDg0LCAweDdlLCAweDUzLCAweGY0LAorCTB4MWYsIDB4YWIsIDB4ZTgsIDB4YTgsIDB4MTMsIDB4ZmYsIDB4YTksIDB4ODgsIDB4MTEsIDB4MGIsIDB4ODgsIDB4MTEsCisJMHg1MywgMHg0MiwgMHg0NywgMHg4ZCwgMHgwNCwgMHg3MiwgMHgwNCwgMHhkMCwgMHhkYywgMHhkMSwgMHhjZiwgMHg0MiwKKwkweDkxLCAweDcxLCAweGM5LCAweGIxLCAweDVjLCAweDBlLCAweDAwLCAweDk5LCAweDEzLCAweDhlLCAweDdkLCAweGE0LAorCTB4M2MsIDB4YzcsIDB4OTEsIDB4YTMsIDB4ZWEsIDB4NTMsIDB4MzQsIDB4NWMsIDB4NjAsIDB4M2YsIDB4OGUsIDB4M2YsCisJMHg5YiwgMHg2ZCwgMHgyZCwgMHhlYywgMHhhMywgMHhmMCwgMHhjNSwgMHg1MSwgMHhmMCwgMHgzOSwgMHgwZiwgMHgxYSwKKwkweGFjLCAweDk3LCAweDc0LCAweGRkLCAweDRmLCAweDA3LCAweGVjLCAweDNkLCAweGEwLCAweDc5LCAweDljLCAweDQ2LAorCTB4NGUsIDB4OGQsIDB4YjAsIDB4Y2MsIDB4ZjYsIDB4MTQsIDB4MjgsIDB4ZDIsIDB4NzMsIDB4OGMsIDB4YjYsIDB4MWIsCisJMHg3MywgMHgyYywgMHhkZiwgMHg4MywgMHhlNSwgMHgxZCwgMHhlMCwgMHg4NSwgMHhkMCwgMHg1MSwgMHhjOCwgMHgyMCwKKwkweDY1LCAweDBiLCAweDIzLCAweGY0LCAweDU4LCAweDg5LCAweGZiLCAweGYyLCAweGEwLCAweDFkLCAweGUyLCAweGRhLAorCTB4ZmUsIDB4ZmQsIDB4NTIsIDB4Y2UsIDB4MzEsIDB4OWYsIDB4ZTYsIDB4Y2UsIDB4MzcsIDB4MjIsIDB4ZTcsIDB4NjMsCisJMHgzOCwgMHg4NiwgMHhlMSwgMHg2ZiwgMHhhYSwgMHhmMywgMHhlZSwgMHgxNCwgMHgzYywgMHg4ZCwgMHgxOCwgMHg1ZCwKKwkweDZhLCAweDc5LCAweDg3LCAweDFmLCAweGUzLCAweGNmLCAweGY3LCAweGYzLCAweDNiLCAweGU2LCAweDgxLCAweGVmLAorCTB4NmYsIDB4YjYsIDB4ZjYsIDB4MDAsIDB4NzYsIDB4MTAsIDB4NzMsIDB4ZmEsIDB4YTksIDB4YjMsIDB4ZGQsIDB4YzUsCisJMHgzNywgMHg4MSwgMHhiNSwgMHhkOSwgMHhjZiwgMHgzMSwgMHg5ZiwgMHgxZiwgMHhhMSwgMHhlYywgMHhhOSwgMHg3YywKKwkweDhmLCAweDBhLCAweDE5LCAweDliLCAweGNkLCAweDI4LCAweGU0LCAweGI3LCAweDFlLCAweGE2LCAweGRjLCAweGE5LAorCTB4YTMsIDB4NmMsIDB4MzcsIDB4NDAsIDB4YWIsIDB4M2QsIDB4YjQsIDB4NmIsIDB4MjIsIDB4ZDIsIDB4NzMsIDB4ODAsCisJMHgzNCwgMHhiMSwgMHhjZSwgMHg1YiwgMHgyNCwgMHhlOCwgMHgxZiwgMHg5YiwgMHgxNSwgMHhiZSwgMHgyMCwgMHg0MywKKwkweGU5LCAweDg5LCAweGVkLCAweGExLCAweDRiLCAweGU4LCAweDFiLCAweDFlLCAweDhjLCAweDg0LCAweDE3LCAweGU4LAorCTB4MDksIDB4ZDAsIDB4ZTUsIDB4MjMsIDB4ZjgsIDB4MjIsIDB4YWIsIDB4NjcsIDB4MGMsIDB4M2EsIDB4ODQsIDB4OWMsCisJMHgwYSwgMHhlYiwgMHg4ZiwgMHg0YSwgMHhkYSwgMHhlMCwgMHhiYiwgMHhjYywgMHg1MSwgMHhkMCwgMHg4ZiwgMHhmMiwKKwkweDBlLCAweDRkLCAweDk5LCAweDllLCAweDRjLCAweGNiLCAweGFmLCAweGMwLCAweGY2LCAweDFjLCAweDExLCAweGIxLAorCTB4NGIsIDB4NTYsIDB4ZDAsIDB4ZWUsIDB4ZDIsIDB4MDYsIDB4NDcsIDB4MGUsIDB4NjAsIDB4OGIsIDB4MzAsIDB4ZWYsCisJMHhlNSwgMHg0MSwgMHg4NSwgMHhiNiwgMHgyMCwgMHg0ZSwgMHgzZiwgMHgyNCwgMHg3OCwgMHhlYiwgMHhhMywgMHg3ZCwKKwkweDY2LCAweGQ0LCAweGQ4LCAweDQ3LCAweGYzLCAweDdlLCAweDI3LCAweDU2LCAweGMwLCAweDNjLCAweDNkLCAweGY3LAorCTB4NjAsIDB4MGYsIDB4OTAsIDB4NTMsIDB4ZmIsIDB4ZWIsIDB4ZWIsIDB4YTgsIDB4MmQsIDB4MTIsIDB4NGUsIDB4YTgsCisJMHgwOSwgMHhmYSwgMHg5MywgMHhkMiwgMHhkZCwgMHhlNCwgMHhlOCwgMHg3NywgMHgyYiwgMHhkYiwgMHg3ZSwgMHhmMCwKKwkweGIwLCAweGQzLCAweDY5LCAweDViLCAweDc4LCAweDE2LCAweDNhLCAweGIxLCAweDFlLCAweGUzLCAweGZlLCAweGFjLAorCTB4YzAsIDB4N2QsIDB4ODQsIDB4YmEsIDB4YTEsIDB4NmIsIDB4MjIsIDB4OGYsIDB4MzksIDB4NTEsIDB4OGIsIDB4MTcsCisJMHhmMywgMHhiYywgMHg5ZSwgMHhjZiwgMHg1ZiwgMHhjNiwgMHgzYywgMHhkYywgMHhjZiwgMHg3MCwgMHg3OCwgMHgyZiwKKwkweDNjLCAweDQxLCAweDIzLCAweDkwLCAweGM3LCAweDVjLCAweDdmLCAweDU3LCAweDY4LCAweDBjLCAweGRmLCAweGE0LAorCTB4NGEsIDB4NGQsIDB4NzQsIDB4NTQsIDB4ZTMsIDB4ZjEsIDB4NDgsIDB4MzgsIDB4YWYsIDB4MWUsIDB4NDIsIDB4ZGMsCisJMHhmMywgMHhiOCwgMHhlYSwgMHhiNywgMHg3ZSwgMHhlNiwgMHg2NywgMHhiZiwgMHhlMywgMHhiNywgMHhhZSwgMHgyOSwKKwkweGQ1LCAweGI5LCAweDEwLCAweDg3LCAweDhhLCAweGRjLCAweDYwLCAweDQxLCAweDE5LCAweDJjLCAweDVkLCAweDUyLAorCTB4OTIsIDB4ODUsIDB4NmIsIDB4NGEsIDB4YWEsIDB4YzQsIDB4MzAsIDB4OGUsIDB4Y2UsIDB4NjcsIDB4Y2YsIDB4NzQsCisJMHg4MiwgMHg0ZSwgMHgxZiwgMHg4OSwgMHhlZiwgMHhlNiwgMHg3YSwgMHg4ZiwgMHg1MCwgMHhlYSwgMHhkNCwgMHhhZCwKKwkweDk0LCAweDllLCAweGU2LCAweGJjLCAweDM0LCAweDAyLCAweDdjLCAweDNmLCAweDJhLCAweGU3LCAweDYyLCAweDQxLAorCTB4Y2EsIDB4OWQsIDB4ZTEsIDB4MzEsIDB4YjYsIDB4NWYsIDB4ZDYsIDB4ZDUsIDB4NDUsIDB4MWYsIDB4ZWYsIDB4OWYsCisJMHhmOSwgMHg2ZiwgMHg1MiwgMHhjMSwgMHg3ZSwgMHg1MywgMHhkMiwgMHg4ZiwgMHhkZiwgMHg3ZCwgMHg5YywgMHg5MywKKwkweGUxLCAweGY3LCAweDZmLCAweDg2LCAweGQzLCAweGI3LCAweDk1LCAweDE2LCAweDM2LCAweGRjLCAweGM4LCAweDNlLAorCTB4NTcsIDB4YjMsIDB4YzcsIDB4NDcsIDB4N2QsIDB4N2UsIDB4NmIsIDB4N2IsIDB4MTMsIDB4YjUsIDB4ODQsIDB4ODAsCisJMHhjMywgMHg0YSwgMHg3YiwgMHg2NCwgMHg5OCwgMHg1ZiwgMHg4NywgMHgxYywgMHhiMCwgMHg0ZCwgMHhkOSwgMHgwZCwKKwkweDdlLCAweDVhLCAweDZjLCAweGMzLCAweDYwLCAweDkzLCAweDc2LCAweDUzLCAweGFlLCAweGM0LCAweGIyLCAweDFkLAorCTB4MzUsIDB4MzIsIDB4OTAsIDB4YjEsIDB4MzQsIDB4NzUsIDB4YjEsIDB4MWUsIDB4YjksIDB4YmEsIDB4MDcsIDB4ZGIsCisJMHg5ZCwgMHg4NywgMHhlZCwgMHg0NiwgMHgzYywgMHg2NCwgMHg1MywgMHhiZSwgMHgyOSwgMHhjZSwgMHgzNiwgMHhiYywKKwkweDBiLCAweGIyLCAweDg1LCAweGJlLCAweDYyLCAweDU1LCAweDE3LCAweDc3LCAweDJkLCAweGMxLCAweDVkLCAweDViLAorCTB4YzIsIDB4YTMsIDB4MDIsIDB4ZDUsIDB4ZTIsIDB4M2YsIDB4NGIsIDB4OGMsIDB4ZmYsIDB4NWYsIDB4MDAsIDB4ZmYsCisJMHhjZiwgMHgwMSwgMHg3ZiwgMHhjNiwgMHhhOSwgMHgzMSwgMHhmZSwgMHgzYiwgMHgyYiwgMHhmOCwgMHgzMywgMHgwYywKKwkweGZjLCAweDFjLCAweDY0LCAweGYxLCAweDBkLCAweGU4LCAweGUyLCAweDZiLCAweDM2LCAweDdjLCAweDlkLCAweDBkLAorCTB4ZmYsIDB4NjcsIDB4YzMsIDB4ZGYsIDB4ZDksIDB4ZjAsIDB4OGIsIDB4MzYsIDB4N2MsIDB4MWUsIDB4ZjYsIDB4NzQsCisJMHgwZSwgMHgzNiwgMHhlOSwgMHhhYywgMHg5ZCwgMHgzNCwgMHg1OCwgMHg5ZiwgMHg5MiwgMHgzMSwgMHhmNiwgMHg5ZCwKKwkweGJiLCAweDY1LCAweGRlLCAweDFkLCAweDkyLCAweDcxLCAweGY3LCAweGE3LCAweDY0LCAweDJjLCAweDdiLCAweDAwLAorCTB4YjEsIDB4ZWMsIDB4NjYsIDB4MWEsIDB4ZWQsIDB4ZTEsIDB4OWMsIDB4YTQsIDB4MDUsIDB4Y2YsIDB4NzUsIDB4NzgsCisJMHgyMiwgMHg2ZSwgMHhlZCwgMHg0OSwgMHg0OCwgMHhiZCwgMHhmYywgMHgwYywgMHg2MiwgMHg1YywgMHhkOCwgMHhmZiwKKwkweDFlLCAweGU0LCAweDM3LCAweDE5LCAweGM0LCAweDZhLCAweDU2LCAweDFmLCAweGM3LCAweGU1LCAweGIwLCAweDY1LAorCTB4ZWYsIDB4MzcsIDB4MzksIDB4NzYsIDB4ZmUsIDB4MmUsIDB4MTksIDB4MDMsIDB4YmIsIDB4ZWQsIDB4NTYsIDB4YzAsCisJMHhhNCwgMHhkMSwgMHhkNywgMHg4YSwgMHg2ZiwgMHg3ZSwgMHgwNywgMHhiMiwgMHhkZiwgMHg4NiwgMHhmNiwgMHhjZSwKKwkweDNhLCAweDE4LCAweGU0LCAweGIzLCAweDU2LCAweDE2LCAweDdkLCAweDExLCAweGMwLCAweGI0LCAweDYxLCAweDlkLAorCTB4MGUsIDB4YjQsIDB4ZjcsIDB4YTAsIDB4N2QsIDB4OGIsIDB4YjMsIDB4OGUsIDB4ZjEsIDB4MmIsIDB4NjgsIDB4YTcsCisJMHhlYSwgMHhiZSwgMHhkOSwgMHg4YSwgMHhiZSwgMHg0YywgMHg1ZCwgMHhkZiwgMHg5YiwgMHhlOCwgMHg0YiwgMHhhMiwKKwkweDZmLCAweDUxLCAweDdlLCAweDk3LCAweDQ3LCAweDNiLCAweDUyLCAweDA3LCAweGIzLCAweDg4LCAweDNlLCAweGM2LAorCTB4ZjEsIDB4NWIsIDB4NzgsIDB4ZGUsIDB4NDcsIDB4YTMsIDB4MTksIDB4OGUsIDB4MDMsIDB4ZGMsIDB4YjEsIDB4ZGMsCisJMHg3YSwgMHg2YSwgMHhlMywgMHhkYywgMHhmNywgMHg0MywgMHgyMSwgMHgzYiwgMHhmMywgMHhkMiwgMHg0NiwgMHhhNywKKwkweDI3LCAweGQ4LCAweDRmLCAweDhjLCAweDIwLCAweGVlLCAweGUxLCAweDcxLCAweGUxLCAweDljLCAweDNjLCAweGZkLAorCTB4MWYsIDB4MDAsIDB4ZjYsIDB4NjEsIDB4OGMsIDB4MjEsIDB4NTYsIDB4YjcsIDB4Y2IsIDB4NGQsIDB4OGQsIDB4YzcsCisJMHgxZiwgMHhjNSwgMHhmOCwgMHg1ZiwgMHhjYSwgMHg2ZiwgMHgyYiwgMHg3MywgMHgwMywgMHhmZSwgMHgxYiwgMHg3NSwKKwkweDdkLCAweDZhLCAweGIwLCAweGI2LCAweGJkLCAweGQ2LCAweGYzLCAweGJlLCAweDRkLCAweDVmLCAweGZhLCAweGZkLAorCTB4NDgsIDB4MWQsIDB4ZmMsIDB4ZWYsIDB4NmUsIDB4YTgsIDB4NmQsIDB4M2YsIDB4YzUsIDB4ZGYsIDB4MjAsIDB4ODcsCisJMHg3MCwgMHhkYiwgMHgwOSwgMHhjOCwgMHgxZCwgMHhkYiwgMHhhNCwgMHhmYSwgMHg3OSwgMHgzZSwgMHg2YiwgMHhkNCwKKwkweGY2LCAweDZkLCAweDMyLCAweDZiLCAweGRiLCAweDFjLCAweDI3LCAweDMxLCAweDVjLCAweDA4LCAweGYyLCAweGRlLAorCTB4YTEsIDB4ZWMsIDB4YjIsIDB4N2YsIDB4MTMsIDB4ZTMsIDB4NjEsIDB4ZTUsIDB4NWUsIDB4ZGIsIDB4OGIsIDB4NjcsCisJMHg0OCwgMHhlNiwgMHg0NiwgMHhlMSwgMHg0YSwgMHhjYywgMHgzYiwgMHg1ZiwgMHgwYSwgMHg0MCwgMHhhZSwgMHgzZSwKKwkweDBmLCAweDllLCAweDczLCAweGRjLCAweDUzLCAweGQ1LCAweGYxLCAweGY3LCAweDY4LCAweDM5LCAweDFkLCAweDY3LAorCTB4MWYsIDB4YzAsIDB4MzEsIDB4ZmUsIDB4MzYsIDB4MTEsIDB4MWYsIDB4ZmIsIDB4ZTIsIDB4NGYsIDB4NzAsIDB4MGMsCisJMHhmNiwgMHhiNCwgMHhlMywgMHg1YiwgMHgyYywgMHhmOCwgMHg0MywgMHhiNCwgMHg0YiwgMHg3ZSwgMHhjNywgMHg2ZSwKKwkweDIyLCAweDlmLCAweGM4LCAweDE2LCAweGQ4LCAweDlmLCAweGIxLCAweDBmLCAweDg5LCAweGMwLCAweDRlLCAweGIzLAorCTB4MWYsIDB4ZmQsIDB4MjQsIDB4N2QsIDB4YzYsIDB4NWQsIDB4Y2QsIDB4NmMsIDB4ZmIsIDB4MzQsIDB4ZWIsIDB4MDUsCisJMHhjNCwgMHgwYiwgMHgxYywgMHhlNywgMHhiMSwgMHhlZCwgMHhjNiwgMHg3YiwgMHhkMSwgMHg4ZCwgMHg1NywgMHhlZSwKKwkweGQ3LCAweGM4LCAweGFhLCAweGZhLCAweDExLCAweDY3LCAweDhmLCAweDViLCAweDU5LCAweDM3LCAweDU2LCAweGIxLAorCTB4ZWYsIDB4YzYsIDB4YjYsIDB4ZWQsIDB4YzcsIDB4NzUsIDB4YjYsIDB4ZTEsIDB4YjIsIDB4YjAsIDB4MGQsIDB4MGYsCisJMHg2YSwgMHg3ZSwgMHhlYiwgMHhmNywgMHg5YiwgMHgxZCwgMHg3OSwgMHg2ZCwgMHg2YywgMHgxYiwgMHhlZSwgMHhhZCwKKwkweGQ4LCAweDA2LCAweDU3LCAweDVlLCAweGJkLCAweDc5LCAweGViLCAweDBmLCAweGMwLCAweDFiLCAweDBiLCAweGJjLAorCTB4YTksIDB4YWYsIDB4ZDUsIDB4NzAsIDB4OGUsIDB4ZTIsIDB4ODcsIDB4MWYsIDB4ZTIsIDB4MTgsIDB4OTEsIDB4NzMsCisJMHhkOSwgMHgxOCwgMHhlNSwgMHg2MiwgMHg0NSwgMHhjNCwgMHg2YSwgMHg5MSwgMHhkOSwgMHhkOSwgMHg0YSwgMHg4ZSwKKwkweGY1LCAweDM1LCAweDY5LCAweGJiLCAweDZiLCAweGUyLCAweDIyLCAweDdhLCAweGJjLCAweDc4LCAweDA5LCAweGY4LAorCTB4NzMsIDB4YmMsIDB4YTUsIDB4NDksIDB4MWIsIDB4YzEsIDB4ZmQsIDB4ZTMsIDB4MTIsIDB4NDcsIDB4N2UsIDB4ZTcsCisJMHgzYSwgMHgxZSwgMHg3YywgMHg2OSwgMHhmMSwgMHg0NywgMHhlMCwgMHgxNSwgMHhjNywgMHg3ZCwgMHg1MSwgMHgyNywKKwkweGRlLCAweGFiLCAweDg5LCAweGE5LCAweGQ3LCAweGY4LCAweGM5LCAweGUyLCAweDc4LCAweDg5LCAweDYxLCAweDc0LAorCTB4MTksIDB4MmYsIDB4MDUsIDB4NjQsIDB4NWUsIDB4NjMsIDB4YzgsIDB4M2MsIDB4ODcsIDB4NjMsIDB4NmQsIDB4YWUsCisJMHhiMSwgMHhkNiwgMHhjNywgMHg1MCwgMHgwYiwgMHg0MywgMHhjMSwgMHg2ZCwgMHhjYywgMHgxMywgMHg4ZSwgMHhhMSwKKwkweGRhLCAweDI4LCAweDM5LCAweGUzLCAweGM0LCAweDUwLCAweDRlLCAweDlkLCAweGNkLCAweGNkLCAweDcxLCAweDVjLAorCTB4NWMsIDB4ZDksIDB4MGYsIDB4ZWYsIDB4YzAsIDB4M2UsIDB4NDUsIDB4OWUsIDB4MTQsIDB4NzQsIDB4ZWEsIDB4N2YsCisJMHgxYSwgMHhlYywgMHhmNiwgMHg1MSwgMHhmNCwgMHg4ZiwgMHhiYSwgMHhmZCwgMHg5ZSwgMHg1YywgMHhjMywgMHhjNSwKKwkweDg1LCAweDdkLCAweGJkLCAweDFiLCAweGQzLCAweGVkLCAweDk2LCAweDMxLCAweDFkLCAweDYyLCAweDE4LCAweGRiLAorCTB4YzksIDB4YmIsIDB4ZjYsIDB4MTYsIDB4MzMsIDB4ZTgsIDB4ZTMsIDB4NzUsIDB4MTEsIDB4MWIsIDB4MTIsIDB4YzcsCisJMHg0OSwgMHg5MCwgMHhhZiwgMHhmZCwgMHg5MSwgMHg1MCwgMHg1OCwgMHhhZCwgMHhjNywgMHhhYiwgMHg3NSwgMHhhMSwKKwkweDE2LCAweGFmLCAweDQxLCAweGYxLCAweGRkLCAweGY4LCAweDkyLCAweGVmLCAweDQ4LCAweGM0LCAweDkyLCAweGUzLAorCTB4ZjYsIDB4MTAsIDB4ZTgsIDB4YzUsIDB4ZjgsIDB4YjksIDB4YmEsIDB4ZTEsIDB4YzYsIDB4YzksIDB4OGMsIDB4ZDMsCisJMHgzZiwgMHg4MiwgMHhjNiwgMHhiYiwgMHgxNSwgMHhmZSwgMHg3ZSwgMHhjYywgMHhkZSwgMHgyZiwgMHhlOCwgMHg5NiwKKwkweDE1LCAweGI4LCAweDBlLCAweDdiLCAweDcwLCAweDFkLCAweDkxLCAweGI4LCAweGIyLCAweDJlLCAweGIwLCAweDdlLAorCTB4NzgsIDB4NmIsIDB4OWEsIDB4YTYsIDB4ZDgsIDB4MWIsIDB4NzAsIDB4MGUsIDB4ZjMsIDB4YjksIDB4YjksIDB4NmEsCisJMHgyZCwgMHgwYywgMHhmOSwgMHhiNiwgMHhjMSwgMHgxZiwgMHgwMiwgMHhkNywgMHhhYywgMHg4OCwgMHg0MywgMHgwMywKKwkweDBiLCAweGY1LCAweDM0LCAweDFjLCAweGM3LCAweDVhLCAweDg4LCAweGRiLCAweDgxLCAweDhmLCAweGNiLCAweGYzLAorCTB4MjYsIDB4ODksIDB4Y2YsIDB4MzcsIDB4YzUsIDB4ZGMsIDB4NjMsIDB4YTIsIDB4MDYsIDB4ZWEsIDB4ZDMsIDB4MzksCisJMHg3NywgMHhjOSwgMHgwYSwgMHhkZSwgMHg2OSwgMHg5MiwgMHg3NywgMHg4ZiwgMHg1NiwgMHhmMCwgMHg3MywgMHg3OCwKKwkweDFjLCAweDkwLCAweDc0LCAweGU1LCAweGRjLCAweDk1LCAweDc1LCAweDVhLCAweGYwLCAweGE3LCAweDlkLCAweDczLAorCTB4ZDMsIDB4NDEsIDB4NmEsIDB4MTQsIDB4MjMsIDB4MmYsIDB4MGMsIDB4YTksIDB4ZGIsIDB4MWMsIDB4M2EsIDB4M2EsCisJMHgzMSwgMHhmMiwgMHhkYSwgMHhiYSwgMHgxOCwgMHhmOSwgMHhiNiwgMHgyMCwgMHhjNywgMHg1YSwgMHhjMywgMHg1MCwKKwkweDgyLCAweDc5LCAweGY4LCAweGJhLCAweDk3LCAweDZkLCAweGM4LCAweDM2LCAweDcwLCAweDNkLCAweDVmLCAweDUzLAorCTB4YmIsIDB4ZWMsIDB4NTksIDB4YTYsIDB4ZDYsIDB4MWMsIDB4MjAsIDB4ZGYsIDB4MGMsIDB4ZmIsIDB4MGUsIDB4MGIsCisJMHg3OSwgMHgwNiwgMHg5MSwgMHgzNiwgMHhjOSwgMHgzYSwgMHhjYiwgMHhiZSwgMHhiZCwgMHgxYSwgMHg2NywgMHhjZiwKKwkweDUxLCAweGEzLCAweDE4LCAweGZiLCAweDQ2LCAweGZkLCAweGZhLCAweDc5LCAweGJmLCAweGRmLCAweDNhLCAweGFjLAorCTB4M2IsIDB4MzYsIDB4NzMsIDB4MjUsIDB4YmYsIDB4ZWUsIDB4YzIsIDB4ZWQsIDB4NDEsIDB4OWMsIDB4YWQsIDB4NTAsCisJMHg5MywgMHg1NSwgMHhjMCwgMHhmZSwgMHhkZSwgMHhmMCwgMHgzNywgMHg1YiwgMHhhZSwgMHgyZSwgMHgwNiwgMHg2OCwKKwkweGZkLCAweGNjLCAweDJkLCAweDQyLCAweDFmLCAweDhkLCAweGM5LCAweGFhLCAweDNlLCAweDhlLCAweDgyLCAweDM3LAorCTB4MTksIDB4YTcsIDB4MDYsIDB4NjAsIDB4YWUsIDB4YTcsIDB4ZWIsIDB4ZDcsIDB4MGIsIDB4YzYsIDB4ZWQsIDB4MzcsCisJMHhmZCwgMHhhYSwgMHhlNSwgMHhjYSwgMHhjMCwgMHhmNSwgMHhmMiwgMHg5MSwgMHg0ZiwgMHhkNSwgMHhkMSwgMHhiYSwKKwkweDUxLCAweDRkLCAweGY4LCAweDJjLCAweGU4LCAweDFhLCAweDQ3LCAweGRlLCAweDFkLCAweDc5LCAweDgxLCAweDEwLAorCTB4M2IsIDB4MzksIDB4NzksIDB4NzgsIDB4MWEsIDB4YjksIDB4NzcsIDB4ZTQsIDB4MDIsIDB4ZTcsIDB4ZTMsIDB4NmUsCisJMHg3ZSwgMHhmZSwgMHg2YSwgMHgyOSwgMHg3MiwgMHgzNiwgMHg4ZiwgMHg5YywgMHg3OSwgMHgxZSwgMHgzOSwgMHhmOSwKKwkweGNiLCAweGM4LCAweGM5LCAweGNmLCAweDk3LCAweDdhLCAweDQxLCAweGZmLCAweDFlLCAweDk5LCAweDhmLCAweGIzLAorCTB4OGUsIDB4OTksIDB4NzQsIDB4MTEsIDB4YjksIDB4ZDMsIDB4NzcsIDB4NjcsIDB4ZDgsIDB4NDYsIDB4NzQsIDB4ZDEsCisJMHgzZCwgMHhjOCwgMHgzNSwgMHhiZSwgMHgzZiwgMHhhOSwgMHg2OCwgMHg5ZCwgMHg3ZCwgMHgwMSwgMHg1ZiwgMHhjMiwKKwkweGI4LCAweDkxLCAweDM4LCAweDcxLCAweDI5LCAweDRmLCAweDFhLCAweGM3LCAweDhhLCAweDIzLCAweDRkLCAweDdlLAorCTB4NmIsIDB4YWUsIDB4OTUsIDB4NWEsIDB4ZjYsIDB4MmMsIDB4Y2IsIDB4OTMsIDB4NmEsIDB4YWMsIDB4ZTgsIDB4YzIsCisJMHgxOSwgMHhkNCwgMHhkOSwgMHhmNywgMHg4NywgMHg5YywgMHhkYiwgMHhjNCwgMHg0OCwgMHhlNCwgMHhkMywgMHhlYiwKKwkweGU4LCAweGVkLCAweDkzLCAweDY1LCAweGRhLCAweDE5LCAweGJiLCAweDU2LCAweGJlLCAweDY4LCAweGFkLCAweGEzLAorCTB4NmMsIDB4ZWYsIDB4NDMsIDB4MzIsIDB4OTcsIDB4NWMsIDB4NzgsIDB4MjgsIDB4NjksIDB4ZTUsIDB4NDMsIDB4M2UsCisJMHhmNywgMHg3YywgMHg2MiwgMHg0MiwgMHg0NywgMHg4NCwgMHhjOCwgMHhiZiwgMHgyMCwgMHhjZCwgMHgwZCwgMHgyMCwKKwkweDcxLCAweDZlLCAweGQ5LCAweGZlLCAweDAyLCAweDFmLCAweDEwLCAweGIxLCAweDZkLCAweDljLCAweDMzLCAweDAzLAorCTB4YTIsIDB4ZDYsIDB4YjYsIDB4ZDEsIDB4ZTIsIDB4N2UsIDB4MDMsIDB4ZmMsIDB4YmUsIDB4OGYsIDB4ZTYsIDB4OTAsCisJMHg0MywgMHgxNCwgMHg0NCwgMHgxZSwgMHhkZSwgMHgwZSwgMHg3OCwgMHgzNywgMHgwZiwgMHhiZiwgMHgxZiwgMHhiOSwKKwkweDAxLCAweGQzLCAweGQ4LCAweDA0LCAweGZjLCAweDZmLCAweDAzLCAweGM2LCAweDZiLCAweDQzLCAweDlmLCAweDZiLAorCTB4MjIsIDB4ZjEsIDB4M2QsIDB4OGYsIDB4YjcsIDB4MTMsIDB4ZDcsIDB4NjUsIDB4YWIsIDB4ZjMsIDB4ZjIsIDB4OWMsCisJMHgzYywgMHhmNiwgMHg2MSwgMHhmOSwgMHhmNiwgMHhiZSwgMHgzZSwgMHhjZiwgMHhkYywgMHg2ZCwgMHg5ZSwgMHhiOSwKKwkweGVmLCAweGYwLCAweGNjLCAweGVkLCAweGMzLCAweGI3LCAweDJlLCAweDNlLCAweDQxLCAweDdjLCAweGViLCAweGFlLAorCTB4ZjEsIDB4YjcsIDB4OWUsIDB4MzUsIDB4NWMsIDB4ZGMsIDB4ZGIsIDB4M2QsIDB4YjgsIDB4YmYsIDB4OGYsIDB4ZjksCisJMHhiOSwgMHhjZiwgMHhmNCwgMHhmNCwgMHhmMSwgMHg5YSwgMHgxYiwgMHg2OCwgMHg2ZSwgMHhiMCwgMHg4ZCwgMHgxNiwKKwkweDRmLCAweDcyLCAweDVmLCAweGQwLCAweDgzLCAweDBiLCAweGUzLCAweDE3LCAweDkwLCAweDYzLCAweDZkLCAweDc0LAorCTB4ZjEsIDB4NjQsIDB4OGIsIDB4YzAsIDB4OWIsIDB4ZmQsIDB4ZjksIDB4YzYsIDB4Y2EsIDB4OWEsIDB4NTcsIDB4YjAsCisJMHhhNiwgMHgzYiwgMHg5NywgMHg4OSwgMHg2ZiwgMHgxOSwgMHg5NiwgMHhmMSwgMHhlMywgMHgzMSwgMHhlZSwgMHhlMywKKwkweGIxLCAweDM3LCAweGNiLCAweDVmLCAweDMzLCAweDgyLCAweGNlLCAweDllLCAweDBkLCAweGM2LCAweGNkLCAweGZkLAorCTB4NTYsIDB4NmIsIDB4MjYsIDB4OGIsIDB4ZGIsIDB4OWQsIDB4MzQsIDB4MWIsIDB4ZDQsIDB4YzAsIDB4MzcsIDB4NTUsCisJMHhmYSwgMHgyOCwgMHhhZSwgMHgyMywgMHhhOCwgMHg0YSwgMHhiNCwgMHg4ZiwgMHhmOSwgMHhiYywgMHg0ZSwgMHhkNiwKKwkweGFmLCAweDViLCAweDMwLCAweDZmLCAweGQ4LCAweGNkLCAweGQxLCAweDg4LCAweGU1LCAweDM4LCAweDI3LCAweGVjLAorCTB4YmUsIDB4MjYsIDB4YzcsIDB4ZDksIDB4ZWUsIDB4YjMsIDB4ZGYsIDB4YzcsIDB4NTMsIDB4YzgsIDB4YWEsIDB4M2MsCisJMHhhZiwgMHgyOSwgMHhlZCwgMHhhMCwgMHg4MywgMHg1MCwgMHhjZiwgMHg4YiwgMHhiMiwgMHg5ZSwgMHhiMiwgMHhlOCwKKwkweGFkLCAweDk5LCAweDE4LCAweDRlLCAweDFjLCAweGUzLCAweDljLCAweGVkLCAweGFjLCAweDg1LCAweGZlLCAweGUwLAorCTB4YmQsIDB4OTgsIDB4MDAsIDB4MWUsIDB4NjEsIDB4OGEsIDB4ZTIsIDB4YWYsIDB4NTAsIDB4Y2EsIDB4ZTMsIDB4NjksCisJMHhlMSwgMHhhOSwgMHhlMCwgMHhjOSwgMHhmNSwgMHgwYywgMHgxZCwgMHg0ZiwgMHhlOCwgMHgxOCwgMHhlYywgMHg1MywKKwkweGI0LCAweGVmLCAweDkyLCAweDkzLCAweDNmLCAweDQxLCAweDM3LCAweGRlLCAweDllLCAweDc0LCAweGVhLCAweDUxLAorCTB4OGIsIDB4ZDYsIDB4NzIsIDB4ZjUsIDB4YTgsIDB4M2YsIDB4NjcsIDB4OWUsIDB4OWMsIDB4NzAsIDB4ZWIsIDB4NTEsCisJMHg4YiwgMHgyNCwgMHhlYSwgMHg1MSwgMHgyNywgMHg1NiwgMHhhOCwgMHg0NywgMHgyNSwgMHg1NiwgMHg1ZiwgMHg4ZiwKKwkweGUyLCAweGY5LCAweDM1LCAweGRhLCAweGQ3LCAweDRmLCAweGNhLCAweDE3LCAweDY0LCAweDNkLCAweGVhLCAweDNkLAorCTB4NzIsIDB4ZWEsIDB4NTEsIDB4MTcsIDB4YTksIDB4NzEsIDB4M2QsIDB4ZWEsIDB4NzgsIDB4NWQsIDB4M2QsIDB4MmEsCisJMHgyOCwgMHhlYSwgMHg1MSwgMHgzYywgMHg4ZiwgMHg1MywgMHg4ZiwgMHgxMiwgMHhlZCwgMHhiZSwgMHg4OCwgMHhhNywKKwkweGVlLCAweDQyLCAweGY0LCAweGVlLCAweDY0LCAweDA3LCAweDY4LCAweDY2LCAweGQwLCAweGY3LCAweDFhLCAweGRhLAorCTB4MzQsIDB4NDUsIDB4YzgsIDB4ZGIsIDB4NGEsIDB4MzUsIDB4ZDAsIDB4MDcsIDB4NmUsIDB4YjgsIDB4YmUsIDB4YTIsCisJMHhkMCwgMHgwNiwgMHhjYywgMHg5YiwgMHhlYywgMHg3YiwgMHhkOCwgMHg1MywgMHg2MywgMHg2MSwgMHg5YSwgMHhmZiwKKwkweDYyLCAweGVhLCAweDJjLCAweDA3LCAweDQ1LCAweDlkLCAweGU1LCAweDg3LCAweDZiLCAweGJjLCAweDc1LCAweDk2LAorCTB4NDUsIDB4YmEsIDB4N2UsIDB4OWQsIDB4ZTUsIDB4NjAsIDB4ODMsIDB4M2EsIDB4Y2IsIDB4NWIsIDB4NTQsIDB4YWQsCisJMHhiMywgMHhiYywgMHg0NSwgMHhkNSwgMHgzYSwgMHhjYiwgMHhjMSwgMHgxMiwgMHhlNywgMHhlMiwgMHgzZSwgMHg4OSwKKwkweDVmLCAweDA2LCAweGVkLCAweDQxLCAweGYxLCAweGM3LCAweGI1LCAweDk3LCAweGM1LCAweGNhLCAweDFlLCAweDdlLAorCTB4ZDksIDB4NmEsIDB4MmYsIDB4NmMsIDB4MDMsIDB4MjIsIDB4MTcsIDB4MmUsIDB4ZDcsIDB4ZDQsIDB4NWUsIDB4YjgsCisJMHgwZCwgMHg5ZCwgMHhiMSwgMHhkNywgMHgwOCwgMHgxOSwgMHg5OSwgMHg4MywgMHg3ZiwgMHg1ZiwgMHg5YywgMHgwYywKKwkweDYxLCAweGNlLCAweDBlLCAweGY4LCAweDhjLCAweDBlLCAweGU0LCAweDA2LCAweDYxLCAweGI0LCAweDE1LCAweGRhLAorCTB4NjQsIDB4MGQsIDB4YTEsIDB4OGYsIDB4YzcsIDB4ZDksIDB4MGUsIDB4NDMsIDB4YjcsIDB4NmMsIDB4NzcsIDB4N2YsCisJMHgwZiwgMHg0OCwgMHgxYSwgMHg0NCwgMHg2OCwgMHhiOCwgMHg5ZCwgMHhmNCwgMHgyMCwgMHhmYiwgMHg4ZSwgMHhjOSwKKwkweDNkLCAweDc0LCAweGM4LCAweGRlLCAweDIyLCAweGY2LCAweGJkLCAweGMxLCAweGFhLCAweDk1LCAweGI5LCAweGMxLAorCTB4MWIsIDB4OTAsIDB4YjksIDB4Y2MsIDB4YWEsIDB4NjUsIDB4OGUsIDB4ZTUsIDB4Y2QsIDB4MzksIDB4ZjcsIDB4ZGQsCisJMHg2MCwgMHhmMSwgMHhmYSwgMHgxZCwgMHgwMiwgMHhhNywgMHg3NywgMHgxYiwgMHhjOCwgMHhmYiwgMHgxOCwgMHhlYywKKwkweDhlLCAweDMzLCAweGJmLCAweDJlLCAweGQ3LCAweGFiLCAweDhmLCAweDg3LCAweDlmLCAweDZkLCAweDY2LCAweGZmLAorCTB4YmQsIDB4NzIsIDB4M2QsIDB4YjEsIDB4ZGUsIDB4N2YsIDB4YWYsIDB4ZTQsIDB4NDcsIDB4MTUsIDB4NjEsIDB4OTMsCisJMHhiMywgMHgyNSwgMHhhZSwgMHhlZCwgMHg3YiwgMHhmOSwgMHgzMywgMHg4ZiwgMHg5YywgMHgwMCwgMHg3ZCwgMHg0MiwKKwkweDBmLCAweDk4LCAweGFlLCAweDQxLCAweGYwLCAweDAxLCAweGViLCAweGQ4LCAweDRmLCAweGM5LCAweDVhLCAweDE2LAorCTB4OWUsIDB4MDUsIDB4OTcsIDB4N2YsIDB4YWQsIDB4YjAsIDB4OTksIDB4ZWUsIDB4MTgsIDB4ZGIsIDB4MDEsIDB4MGIsCisJMHhmZSwgMHg4ZiwgMHhlYiwgMHgyOCwgMHg3YywgMHg4ZSwgMHhjYSwgMHhmZCwgMHgyZSwgMHg1ZiwgMHhiYiwgMHgyZSwKKwkweGJjLCAweGE3LCAweDcyLCAweGJiLCAweDVjLCAweGNlLCAweDhhLCAweDdhLCAweDJkLCAweGE5LCAweDlkLCAweDdkLAorCTB4ZDMsIDB4MmQsIDB4NmMsIDB4NmIsIDB4YjYsIDB4NTgsIDB4YWUsIDB4Y2MsIDB4MjYsIDB4ZjAsIDB4Y2UsIDB4N2MsCisJMHg3ZCwgMHgxNywgMHgzNiwgMHg5YywgMHhjZiwgMHhhYSwgMHhiZiwgMHgyMywgMHg2YSwgMHgwNCwgMHg3MywgMHgzNiwKKwkweGRiLCAweDZiLCAweDhlLCAweDQxLCAweDdmLCAweDBiLCAweGIyLCAweGM0LCAweGVmLCAweDUxLCAweDcxLCAweDJlLAorCTB4MjEsIDB4NmEsIDB4ZjgsIDB4ODMsIDB4ZGMsIDB4NzYsIDB4ZWQsIDB4NGEsIDB4OTQsIDB4ZWQsIDB4MzAsIDB4ZjYsCisJMHg1YywgMHhhNSwgMHgzMSwgMHhlMiwgMHgyMywgMHhjOCwgMHgwYywgMHhjNywgMHhiMSwgMHgwYywgMHhlNywgMHhjNiwKKwkweDllLCAweDlhLCAweGE3LCAweDY2LCAweGFiLCAweGNiLCAweGI4LCAweDg4LCAweDc1LCAweDM5LCAweDAwLCAweDlhLAorCTB4ZWQsIDB4MTAsIDB4MzEsIDB4ZWEsIDB4YjgsIDB4NWQsIDB4YTYsIDB4ZWEsIDB4MTksIDB4M2YsIDB4ZDMsIDB4ZGMsCisJMHgzOSwgMHhlNywgMHgzZiwgMHg2NiwgMHgyZiwgMHg0NywgMHhmYiwgMHhjZCwgMHgzNywgMHg0OCwgMHg3YiwgMHg0NywKKwkweDFmLCAweDZiLCAweGU5LCAweGFlLCAweDIzLCAweDdlLCAweDcxLCAweGU5LCAweGVlLCAweGZhLCAweGE4LCAweDQ5LAorCTB4NDksIDB4ODMsIDB4YTgsIDB4YWMsIDB4MmIsIDB4N2UsIDB4NWEsIDB4OWUsIDB4MjksIDB4ZmQsIDB4NWYsIDB4ZDgsCisJMHhhZiwgMHhlMiwgMHhkOSwgMHhhZiwgMHhhYiwgMHhiYiwgMHhmYiwgMHhlNCwgMHg3ZSwgMHhjMywgMHg3NSwgMHhiYSwKKwkweDFiLCAweDk3LCAweDc1LCAweGI5LCAweDVmLCAweDg0LCAweGVlLCAweGJhLCAweDdiLCAweGUyLCAweGI1LCAweGI3LAorCTB4NWMsIDB4NjcsIDB4ZGQsIDB4NjcsIDB4NDgsIDB4OGQsIDB4YWYsIDB4MTQsIDB4N2IsIDB4ZmYsIDB4YjQsIDB4ZjksCisJMHhlMywgMHhjNSwgMHhkZSwgMHgxZiwgMHg4NywgMHg5ZSwgMHg1ZSwgMHhiZCwgMHg2NSwgMHgxYSwgMHhiNiwgMHg4OSwKKwkweGI4LCAweGMyLCAweGQxLCAweDFmLCAweGQ4LCAweGUzLCAweDgyLCAweDlmLCAweDE2LCAweDFlLCAweGQyLCAweGU5LAorCTB4OWYsIDB4ZWUsIDB4ZTQsIDB4ZmEsIDB4YWMsIDB4MjYsIDB4NzMsIDB4N2MsIDB4NmUsIDB4N2YsIDB4YjEsIDB4OTUsCisJMHg2MywgMHhhYiwgMHg0ZCwgMHhkNiwgMHg3NywgMHg0NCwgMHg2ZSwgMHg5NSwgMHg1NywgMHg0ZCwgMHg4ZiwgMHgxZiwKKwkweDMxLCAweDMwLCAweGNlLCAweDYzLCAweDYxLCAweGJhLCAweDFjLCAweGJjLCAweDkxLCAweGI4LCAweGJjLCAweGNiLAorCTB4NTgsIDB4ZjQsIDB4YWQsIDB4MjYsIDB4MmUsIDB4YmYsIDB4NTUsIDB4ZjcsIDB4NWIsIDB4N2YsIDB4ZGQsIDB4N2EsCisJMHhiZCwgMHgzYSwgMHg0NywgMHgzNSwgMHgyZSwgMHhlNywgMHg3YywgMHgzZSwgMHhlOCwgMHhkNCwgMHgxOCwgMHg0YywKKwkweDhlLCAweGNmLCAweGQ3LCAweDRhLCAweDllLCAweGYwLCAweDNiLCAweDcyLCAweDExLCAweDFiLCAweDc5LCAweDA4LAorCTB4NjQsIDB4ZmMsIDB4NTUsIDB4YzgsIDB4Y2EsIDB4MmIsIDB4MzYsIDB4ZjIsIDB4MGUsIDB4MWIsIDB4ZjksIDB4ODgsCisJMHg4ZCwgMHhkYywgMHhjMywgMHg0NiwgMHhlZSwgMHg2MSwgMHhmNywgMHhjOCwgMHgxYywgMHgyNiwgMHgyMywgMHhlYiwKKwkweDU2LCAweDdjLCAweDQ2LCAweGNiLCAweGY5LCAweDYxLCAweDVlLCAweGM5LCAweGQ4LCAweGUzLCAweDdjLCAweDFmLAorCTB4NDEsIDB4NGQsIDB4YzYsIDB4MzYsIDB4Y2EsIDB4NzgsIDB4ZjAsIDB4MzgsIDB4ZGYsIDB4NzcsIDB4MjgsIDB4YWIsCisJMHg3MSwgMHhhZSwgMHg0NSwgMHg5MSwgMHhhYSwgMHhjNiwgMHg2ZiwgMHg4NywgMHg4ZiwgMHhkYSwgMHgwZSwgMHhiYywKKwkweDlhLCAweDc5LCAweGRjLCAweGE3LCAweGM2LCAweDViLCAweDk5LCAweDc2LCAweDhhLCAweDFhLCAweDVmLCAweDJiLAorCTB4Y2YsIDB4MGQsIDB4N2EsIDB4MDMsIDB4MGUsIDB4ZmUsIDB4ZGQsIDB4ZGMsIDB4ZDYsIDB4ZDQsIDB4ZjgsIDB4ZGQsCisJMHhlYywgMHhkMywgMHhjMiwgMHhhNCwgMHhiYSwgMHhmZCwgMHhiNywgMHgwNywgMHg5OCwgMHhhZSwgMHhhNCwgMHhkZSwKKwkweDE2LCAweGUwLCAweGI4LCAweDc2LCAweGRlLCAweGY2LCAweDhiLCAweDNiLCAweDA1LCAweGM5LCAweDE4LCAweGQ3LAorCTB4Y2MsIDB4YjgsIDB4NWQsIDB4YTUsIDB4YWIsIDB4YmEsIDB4MmMsIDB4NWQsIDB4ZmQsIDB4OTUsIDB4ZmEsIDB4M2YsCisJMHhkMywgMHhkMiwgMHhjNywgMHg3MCwgMHhhMiwgMHgzNiwgMHhjNiwgMHgzNCwgMHg3NSwgMHhlNywgMHhlMywgMHhmMywKKwkweDY2LCAweDVlLCAweDQ3LCAweGRjLCAweDYzLCAweGMwLCAweGYzLCAweDYwLCAweDMzLCAweGI1LCAweDBkLCAweDBlLAorCTB4ZjksIDB4MmQsIDB4ZWYsIDB4YmEsIDB4NmMsIDB4NDMsIDB4NzYsIDB4OTAsIDB4MzcsIDB4YzcsIDB4NWEsIDB4N2UsCisJMHhjZCwgMHhhOCwgMHgzOCwgMHgxYiwgMHg0OSwgMHhmNiwgMHg0NywgMHg4NSwgMHhlYywgMHhiMCwgMHhhYywgMHg2OSwKKwkweGUyLCAweGNlLCAweGQ1LCAweDQ3LCAweGUyLCAweDFlLCAweDA5LCAweGNiLCAweDE5LCAweGNiLCAweGYyLCAweDc4LAorCTB4N2YsIDB4NTcsIDB4NTgsIDB4NTMsIDB4NWIsIDB4YjAsIDB4NDYsIDB4OTgsIDB4ZDIsIDB4MjUsIDB4NzEsIDB4NTYsCisJMHg4MCwgMHg3YywgMHhlOSwgMHhkYywgMHgzYSwgMHg2YSwgMHhmYiwgMHgwNywgMHhiZCwgMHg5YSwgMHhjNywgMHg0NiwKKwkweDlkLCAweGIzLCAweDdhLCAweGJiLCAweGRlLCAweGZmLCAweDhkLCAweDhhLCAweDczLCAweDY1LCAweGM3LCAweDA2LAorCTB4YjksIDB4ZTcsIDB4YzMsIDB4YWIsIDB4M2IsIDB4ZmYsIDB4YmUsIDB4YmUsIDB4M2UsIDB4YjUsIDB4ZDQsIDB4ZDcsCisJMHgwZCwgMHgyNCwgMHgwZCwgMHg5OCwgMHgzNiwgMHg4ZCwgMHhjZiwgMHhlZSwgMHhlNywgMHg0YiwgMHg3YywgMHhhZiwKKwkweDI1LCAweDEyLCAweGUzLCAweGRjLCAweDZkLCAweDQ0LCAweGRjLCAweGY5LCAweDUwLCAweDIxLCAweDg1LCAweDNhLAorCTB4OGQsIDB4MTksIDB4OWMsIDB4ZjMsIDB4ODUsIDB4ODYsIDB4N2QsIDB4NzEsIDB4Y2EsIDB4NjQsIDB4MjcsIDB4NDgsCisJMHg0MywgMHhhYywgMHg5OCwgMHhhOSwgMHhkNiwgMHgwMywgMHgxZiwgMHg1YywgMHg0MywgMHg5NiwgMHgyYiwgMHg5NywKKwkweDUxLCAweGNlLCAweDFmLCAweDZhLCAweGNlLCAweGVkLCAweDE2LCAweGU5LCAweGIwLCAweDcyLCAweGEwLCAweDc0LAorCTB4ODQsIDB4MGUsIDB4MzQsIDB4OGMsIDB4MjksIDB4MWIsIDB4ZDcsIDB4MDMsIDB4MmYsIDB4ZDYsIDB4ZDUsIDB4MTQsCisJMHgxNiwgMHg0NCwgMHg0ZCwgMHgyMSwgMHhiNywgMHhjNiwgMHg2ZiwgMHgzZCwgMHgxOSwgMHg3MCwgMHhlZSwgMHhiNSwKKwkweDM0LCAweGQ2LCAweDkzLCAweDVkLCAweDE1LCAweDNkLCAweDcxLCAweGUxLCAweGY4LCAweDJjLCAweGJlLCAweDhkLAorCTB4NzYsIDB4OGEsIDB4YjUsIDB4MGUsIDB4MmIsIDB4NTksIDB4YmIsIDB4OTUsIDB4NzYsIDB4MWEsIDB4MGUsIDB4ZDYsCisJMHhhMywgMHgzNiwgMHhlMywgMHg3NSwgMHg1OCwgMHgzOSwgMHg2OCwgMHhlNywgMHg5NSwgMHhiNCwgMHhhOCwgMHgzZCwKKwkweDcwLCAweDhjLCAweGJmLCAweGU2LCAweGRhLCAweDMwLCAweDk1LCAweGU5LCAweGVkLCAweDk4LCAweGZiLCAweDNkLAorCTB4YzMsIDB4NzgsIDB4NmIsIDB4OGEsIDB4MmUsIDB4OWQsIDB4ZjgsIDB4MmUsIDB4NTEsIDB4NTgsIDB4ZTYsIDB4NmYsCisJMHhjZSwgMHg3YywgMHhiOSwgMHgyOSwgMHhhZSwgMHgyNSwgMHhkZSwgMHg4ZiwgMHhmZCwgMHgzMywgMHhmYywgMHg2ZSwKKwkweDI1LCAweDM5LCAweDU1LCAweDJlLCAweGE3LCAweDMxLCAweDNlLCAweGQ2LCAweDdiLCAweGFmLCAweGM4LCAweDhkLAorCTB4ZDQsIDB4MzgsIDB4MGQsIDB4NzEsIDB4OGUsIDB4YWMsIDB4MmQsIDB4YzksIDB4OTEsIDB4ZDMsIDB4ZDAsIDB4MzUsCisJMHhjNCwgMHgyMCwgMHg3NiwgMHgxMywgMHhiZSwgMHg3NSwgMHhlMywgMHg5MSwgMHhjZiwgMHhhZSwgMHg3NSwgMHg2NCwKKwkweGU0LCAweGJiLCAweDEyLCAweDBmLCAweDFlLCAweGZmLCAweGZiLCAweDgwLCAweDdiLCAweDBmLCAweDI4LCAweDc3LAorCTB4MmEsIDB4OGQsIDB4ZmQsIDB4MzcsIDB4NTEsIDB4Y2EsIDB4NzQsIDB4ZjIsIDB4YmIsIDB4ZWMsIDB4OTksIDB4MjMsCisJMHgxYiwgMHg2YSwgMHhlMSwgMHhkMSwgMHg3NywgMHhjYSwgMHg4NSwgMHgwZiwgMHhkNiwgMHhjMSwgMHhmMywgMHgxOSwKKwkweGQ3LCAweDVmLCAweGQ1LCAweGMxLCAweDA3LCAweDNkLCAweGYwLCAweDY2LCAweDFkLCAweDNjLCAweGUyLCAweGFlLAorCTB4MzMsIDB4ZGYsIDB4YTgsIDB4ODMsIDB4MzcsIDB4M2QsIDB4ZjAsIDB4ZWQsIDB4NzUsIDB4ZjAsIDB4ZWQsIDB4ODAsCisJMHg3ZiwgMHhhMywgMHgwZSwgMHgxZSwgMHg3ZCwgMHhhNywgMHg5MCwgMHgxMywgMHgwOCwgMHhkYSwgMHg3MCwgMHg4YywKKwkweDc0LCAweDQ4LCAweGU2LCAweDg5LCAweDc4LCAweDJlLCAweGI5LCAweDFmLCAweGM5LCAweGYyLCAweGQzLCAweDAxLAorCTB4MWEsIDB4N2IsIDB4ZWIsIDB4YjUsIDB4MDksIDB4ZDgsIDB4YTgsIDB4YWEsIDB4NGMsIDB4MzksIDB4ZmEsIDB4ZWEsCisJMHg5NSwgMHgyNSwgMHg5NiwgMHhiZCwgMHgzYywgMHhlNCwgMHgxNSwgMHg3YSwgMHg1NCwgMHg4MCwgMHgzZSwgMHgxNSwKKwkweDVjLCAweDVmLCAweGNhLCAweDc3LCAweGFhLCAweDIyLCAweGM3LCAweDFkLCAweDNkLCAweDU2LCAweDY4LCAweGJkLAorCTB4MzUsIDB4MmYsIDB4NzMsIDB4OTEsIDB4YWIsIDB4OGMsIDB4M2IsIDB4ZmMsIDB4ODYsIDB4ZWIsIDB4M2IsIDB4ZTgsCisJMHg4NCwgMHg2MywgMHg1NywgMHg1OCwgMHhiZiwgMHg3OSwgMHg3ZSwgMHg2OSwgMHg1ZiwgMHg0YSwgMHgyYywgMHg4NywKKwkweGNlLCAweDNhLCAweGU5LCAweDI1LCAweDMyLCAweDFiLCAweDVlLCAweDUyLCAweDc3LCAweGYxLCAweGQ1LCAweGQ5LAorCTB4NzcsIDB4MTIsIDB4ZjYsIDB4M2QsIDB4ZDcsIDB4ZTIsIDB4YjcsIDB4MzYsIDB4YWMsIDB4YmQsIDB4OWUsIDB4N2QsCisJMHhjZiwgMHg3OCwgMHhlYywgMHg3YiwgMHgzOCwgMHg1OCwgMHhmNSwgMHhmOSwgMHg4ZiwgMHgwOSwgMHg5ZiwgMHhkZiwKKwkweGQxLCAweGMwLCAweDY2LCAweGFjLCAweGRlLCAweGU3LCAweGVmLCAweGZkLCAweGQ4LCAweDNlLCAweDdmLCAweGI5LAorCTB4NzUsIDB4NTcsIDB4ZTMsIDB4ZjMsIDB4MWYsIDB4NjksIDB4ZjksIDB4NzgsIDB4M2UsIDB4OWYsIDB4ZDcsIDB4YWMsCisJMHhhZiwgMHg2NSwgMHg3YSwgMHhjZiwgMHg1OSwgMHg4ZSwgMHhjYSwgMHgxOCwgMHg3YiwgMHhiNywgMHgyNywgMHhjNiwKKwkweDY2LCAweGZjLCAweGJlLCAweDI3LCAweGVmLCAweDAyLCAweDllLCAweDVlLCAweGViLCAweGM4LCAweGRiLCAweDUxLAorCTB4MTksIDB4YTcsIDB4NzMsIDB4ZWMsIDB4OGQsIDB4ZjcsIDB4YzIsIDB4MjMsIDB4OTAsIDB4ZDEsIDB4N2MsIDB4OGYsCisJMHg4ZiwgMHg1NCwgMHg5YSwgMHgzNSwgMHg5ZCwgMHhiMywgMHhlZCwgMHg5ZiwgMHg2ZiwgMHhhZSwgMHgxNywgMHhhMSwKKwkweGNiLCAweGMyLCAweDlmLCAweDI0LCAweDNlLCAweDgxLCAweDVhLCAweGVhLCAweDQ5LCAweGM4LCAweDhmLCAweGJiLAorCTB4YWYsIDB4OTUsIDB4NmEsIDB4YTksIDB4ZjUsIDB4ZTcsIDB4MWYsIDB4N2MsIDB4ZWUsIDB4NDEsIDB4Y2EsIDB4MDMsCisJMHg5NSwgMHg3MywgMHgxMCwgMHhhZiwgMHg0ZSwgMHhlOSwgMHg5NCwgMHg5ZCwgMHgyMSwgMHhkZCwgMHg4YywgMHg5MywKKwkweGIyLCAweDhmLCAweDcxLCAweDhlLCAweGZkLCAweGIwLCAweDUyLCAweDZmLCAweDNmLCAweDI0LCAweDZiLCAweDMwLAorCTB4ZWEsIDB4YjIsIDB4NzcsIDB4ODIsIDB4N2UsIDB4MDIsIDB4N2MsIDB4NTgsIDB4YWYsIDB4OWMsIDB4MWEsIDB4OGMsCisJMHhlYSwgMHhkYywgMHgwOSwgMHgzYSwgMHhmZSwgMHhmMywgMHhiYiwgMHgxMywgMHhjNCwgMHhmMywgMHg2YiwgMHhiNCwKKwkweGI3LCAweGMxLCAweDlkLCAweDIwLCAweGRmLCAweDJhLCAweGVmLCAweDA0LCAweGFkLCAweDE3LCAweDM1LCAweDE4LAorCTB4OWUsIDB4YzcsIDB4YTksIDB4YzEsIDB4NzAsIDB4YmIsIDB4YjMsIDB4OGYsIDB4ZTUsIDB4M2EsIDB4NGMsIDB4YTMsCisJMHg5MywgMHhiNywgMHg4OCwgMHg3YiwgMHhhOCwgMHg5ZCwgMHg3ZCwgMHhiNSwgMHhmMiwgMHhiZCwgMHhlZiwgMHgxMywKKwkweDhkLCAweGE1LCAweDc5LCAweGJkLCAweGEzLCAweDBkLCAweGVmLCAweGI2LCAweDI0LCAweDNmLCAweGMxLCAweDlhLAorCTB4Y2IsIDB4MjEsIDB4NTEsIDB4NzMsIDB4YjksIDB4YjMsIDB4Y2QsIDB4NWIsIDB4NzMsIDB4NTEsIDB4NTcsIDB4YjgsCisJMHhkYiwgMHg3MiwgMHhhOCwgMHg0MSwgMHhjZCwgMHhjNSwgMHhlZiwgMHhiOSwgMHhkYiwgMHhlMiwgMHhmNywgMHhkYywKKwkweDZkLCAweDM5LCAweDI0LCAweGViLCAweDJiLCAweGVhLCAweDJmLCAweGQxLCAweGRkLCAweDk2LCAweGU0LCAweDhhLAorCTB4NzcsIDB4NWIsIDB4YjYsIDB4NGEsIDB4N2QsIDB4ZjUsIDB4YzIsIDB4YWYsIDB4ZmUsIDB4YmMsIDB4MzIsIDB4NTUsCisJMHg2NywgMHhlNywgMHgxMywgMHhjMiwgMHhjZSwgMHhkZiwgMHhkNSwgMHhlYSwgMHhiNywgMHg5ZSwgMHg2OSwgMHhiYiwKKwkweDllLCAweDlkLCAweGRmLCAweDU3LCAweGQxLCAweDUzLCAweGJlLCAweGEzLCAweGNkLCAweDc3LCAweGJlLCAweDU4LAorCTB4MTYsIDB4ZjksIDB4N2MsIDB4YTYsIDB4ODksIDB4NzIsIDB4MDMsIDB4YmYsIDB4MmEsIDB4NjgsIDB4ZjYsIDB4NTgsCisJMHg2ZiwgMHhlZCwgMHg5OSwgMHg2MywgMHhmNSwgMHg1ZSwgMHhhNCwgMHhlZSwgMHhiOSwgMHgxNywgMHg2OSwgMHhhMiwKKwkweDVmLCAweGFmLCAweGFiLCAweDg3LCAweDA0LCAweGU0LCAweGRkLCAweDdlLCAweGY4LCAweGMyLCAweDE5LCAweDQzLAorCTB4ZGEsIDB4NWUsIDB4YzQsIDB4NzAsIDB4OTgsIDB4YWUsIDB4NTAsIDB4ZTQsIDB4M2IsIDB4OTUsIDB4NmQsIDB4ZTQsCisJMHg5YiwgMHg3MSwgMHhjZSwgMHg0YiwgMHg1NCwgMHgxMSwgMHg2MywgMHg0MiwgMHg4ZSwgMHg4YiwgMHg3ZSwgMHhlMSwKKwkweDZmLCAweGQ0LCAweGI4LCAweDIzLCAweGIzLCAweGUzLCAweGY2LCAweDA1LCAweGUwLCAweGJmLCAweDIxLCAweDUxLAorCTB4NmQsIDB4OWIsIDB4OTUsIDB4NWEsIDB4Y2UsIDB4NTgsIDB4ZTUsIDB4MGUsIDB4YmYsIDB4MDksIDB4ZmIsIDB4ZTAsCisJMHhkYywgMHgwNywgMHhjYSwgMHg5OCwgMHg3YywgMHg2NywgMHhlNCwgMHg2MiwgMHg1YiwgMHhmNSwgMHgzZSwgMHhkMCwKKwkweDY3LCAweGE0LCAweDljLCAweDNhLCAweGY3LCAweDgxLCAweDQ4LCAweDRkLCAweDQwLCAweDNlLCAweDZlLCAweGU0LAorCTB4M2UsIDB4NTAsIDB4ZDcsIDB4OTIsIDB4ZmIsIDB4NDAsIDB4MmIsIDB4ZjMsIDB4NjYsIDB4ZTksIDB4N2QsIDB4YTAsCisJMHhjNiwgMHhmYywgMHhlMSwgMHhmYiwgMHg0MCwgMHhmZiwgMHhkZSwgMHhlNiwgMHhkYywgMHg0MywgMHg1ZCwgMHg4OSwKKwkweDNmLCAweDZlLCAweDljLCAweGY0LCAweDExLCAweGUwLCAweGY5LCAweDNlLCAweDUwLCAweGU1LCAweDFlLCAweDkwLAorCTB4ZTcsIDB4MGUsIDB4MTAsIDB4ZGYsIDB4MjUsIDB4NTksIDB4ZWUsIDB4MGMsIDB4Y2UsIDB4N2IsIDB4ZmYsIDB4YTQsCisJMHhhNywgMHg3MiwgMHhmZiwgMHhlNCwgMHg3YywgMHhjOSwgMHhmNSwgMHhlZCwgMHhlZSwgMHhiOSwgMHgxYywgMHhjNywKKwkweDM5LCAweGJiLCAweDQ0LCAweDhlLCAweDdhLCAweGFlLCAweDU0LCAweDViLCAweGMzLCAweDYwLCAweGJlLCAweDhmLAorCTB4MTYsIDB4Y2YsIDB4ODEsIDB4M2UsIDB4NmYsIDB4ODksIDB4ZGMsIDB4MDAsIDB4N2MsIDB4ZGUsIDB4ZTIsIDB4MjMsCisJMHhlNiwgMHgxZCwgMHgyOSwgMHhhMCwgMHg4YiwgMHgzOCwgMHhjYiwgMHg3NSwgMHhmOCwgMHhkZCwgMHgyMSwgMHg2NCwKKwkweGMxLCAweDkxLCAweDhiLCAweGRkLCAweDllLCAweGYzLCAweGQwLCAweGFhLCAweDFjLCAweDM4LCAweDY3LCAweGJhLAorCTB4MGUsIDB4ZWYsIDB4NmEsIDB4NjUsIDB4NDYsIDB4OWMsIDB4ZGQsIDB4MGMsIDB4ZWQsIDB4YjUsIDB4OWMsIDB4ZjMsCisJMHhjNiwgMHhhOCwgMHgzOCwgMHhiNywgMHg2ZCwgMHhhZiwgMHhiMywgMHg1YiwgMHgzYSwgMHhlNCwgMHgwNiwgMHgzMSwKKwkweDY3LCAweDhjLCAweGViLCAweGQ1LCAweDhjLCAweGZiLCAweDY2LCAweGMxLCAweGUzLCAweDQ2LCAweDY3LCAweDcxLAorCTB4MmIsIDB4ZDcsIDB4ZjEsIDB4ZGMsIDB4OWEsIDB4MGEsIDB4MjEsIDB4OTcsIDB4ZDgsIDB4OWQsIDB4Y2UsIDB4MDksCisJMHhiYiwgMHhlOSwgMHhhYywgMHhkZCwgMHgyOSwgMHhkNiwgMHhkZSwgMHg1OCwgMHg3NywgMHg5NiwgMHhjZCwgMHg3MiwKKwkweGI1LCAweDVjLCAweDRjLCAweDcwLCAweDNkLCAweDlhLCAweGRlLCAweGIzLCAweDg0LCAweGE2LCAweGI1LCAweGJhLAorCTB4ODQsIDB4ZGMsIDB4YjUsIDB4NjIsIDB4ZTMsIDB4M2IsIDB4MmEsIDB4YmEsIDB4MzQsIDB4MmUsIDB4ZWUsIDB4MjEsCisJMHhiYiwgMHhlNywgMHhiNSwgMHgwZSwgMHhmZCwgMHhhYSwgMHhiYSwgMHhiNywgMHg1YywgMHgzYywgMHg1MywgMHg0ZiwKKwkweGJmLCAweDRkLCAweGZmLCAweDRiLCAweGU4LCAweDc3LCAweDE1LCAweGY0LCAweGUzLCAweDc3LCAweDAzLCAweGVmLAorCTB4ZWYsIDB4OGEsIDB4N2EsIDB4YzAsIDB4YjksIDB4NTIsIDB4ZTQsIDB4NzgsIDB4OWUsIDB4MzgsIDB4NGUsIDB4ODgsCisJMHhjYywgMHgyZSwgMHg1MCwgMHgwZiwgMHhlOCwgMHhjOCwgMHhmZiwgMHhlYiwgMHhlMiwgMHhkZSwgMHg5ZCwgMHg2MCwKKwkweGZhLCAweGIyLCAweDdkLCAweDhmLCAweGJjLCAweDcwLCAweDk5LCAweGQ4LCAweGM2LCAweGRmLCAweDhkLCAweDdkLAorCTB4OTQsIDB4Y2IsIDB4MmYsIDB4YzUsIDB4NWMsIDB4ZmEsIDB4YjMsIDB4ZWUsIDB4NzMsIDB4OWQsIDB4YWEsIDB4NzYsCisJMHg1ZiwgMHg3YiwgMHg1NywgMHhlZCwgMHg1MywgMHgxZCwgMHhmOSwgMHhjYywgMHgzNCwgMHg5MCwgMHhjZiwgMHg4YywKKwkweGRjLCAweGEzLCAweDZmLCAweGE2LCAweDcxLCAweGJjLCAweDlhLCAweDlhLCAweGZjLCAweGVmLCAweDVlLCAweGFlLAorCTB4MjYsIDB4YjYsIDB4OGQsIDB4MjIsIDB4MGEsIDB4YmYsIDB4YWMsIDB4ZDcsIDB4NGUsIDB4ZTMsIDB4YTQsIDB4NjEsCisJMHg5MywgMHgzYSwgMHhhZCwgMHg2OSwgMHhkMiwgMHg2MCwgMHhjNywgMHg0YiwgMHgxMiwgMHgyOSwgMHhhNSwgMHhhNCwKKwkweDUyLCAweDU1LCAweDQ1LCAweDYwLCAweGE5LCAweDIxLCAweDRlLCAweGRhLCAweDBhLCAweDcxLCAweDcwLCAweDBiLAorCTB4NDgsIDB4NTEsIDB4YzUsIDB4MjEsIDB4NGQsIDB4ZDMsIDB4N2IsIDB4ODUsIDB4ODQsIDB4NTQsIDB4YTEsIDB4OGEsCisJMHg0NiwgMHg0ZSwgMHgwMiwgMHgxNSwgMHg0YSwgMHhlNSwgMHgwYSwgMHg5NiwgMHg3MiwgMHg0MSwgMHhhMiwgMHhkOCwKKwkweDhlLCAweDAyLCAweDUyLCAweDJhLCAweGY3LCAweGNhLCAweDg1LCAweGJhLCAweGJmLCAweDA4LCAweDg5LCAweDAzLAorCTB4NzAsIDB4MDYsIDB4MjksIDB4MmEsIDB4M2YsIDB4ZTIsIDB4YzAsIDB4OGQsIDB4MWIsIDB4NTQsIDB4NWQsIDB4ZGUsCisJMHgzNywgMHhiMywgMHg2MywgMHhhZiwgMHg3NywgMHhkNywgMHg4ZSwgMHgwMywgMHgxMSwgMHgwNywgMHgyNywgMHhiYiwKKwkweGY2LCAweGNjLCAweGNlLCAweGVjLCAweGNjLCAweDM3LCAweDZmLCAweGJlLCAweGY3LCAweDM3LCAweGZkLCAweGJlLAorCTB4NzgsIDB4OGQsIDB4NWEsIDB4ZGIsIDB4NWIsIDB4ZjMsIDB4NTUsIDB4ZWMsIDB4ZTcsIDB4YWYsIDB4MzcsIDB4MTgsCisJMHg1NywgMHhlZCwgMHhiYSwgMHhlNCwgMHhhOSwgMHhmNSwgMHhlMywgMHg5YSwgMHg3MiwgMHhkOSwgMHgxYiwgMHhmMCwKKwkweGZlLCAweGM3LCAweDY4LCAweDUxLCAweGQ4LCAweDg2LCAweDk0LCAweGFkLCAweGVlLCAweGM1LCAweDQwLCAweDliLAorCTB4ZDksIDB4ZmYsIDB4MzMsIDB4MTYsIDB4MDMsIDB4M2UsIDB4OWIsIDB4NjgsIDB4YWQsIDB4NmQsIDB4OGEsIDB4ZWQsCisJMHg3MSwgMHhkOSwgMHgxNiwgMHhkZSwgMHhkYSwgMHhjMiwgMHhiNiwgMHgxMCwgMHgzYywgMHgxNiwgMHhmZCwgMHg5ZSwKKwkweGIxLCAweGE4LCAweGM5LCAweGVhLCAweGExLCAweDE2LCAweGVkLCAweDc0LCAweDg4LCAweDIxLCAweGJmLCAweDlkLAorCTB4NjcsIDB4NmMsIDB4MDUsIDB4Y2EsIDB4Y2UsIDB4NGYsIDB4NWQsIDB4MzYsIDB4M2MsIDB4ZTAsIDB4NzMsIDB4ZGMsCisJMHg1OSwgMHhlYiwgMHhjMCwgMHgyNywgMHhiNSwgMHg5ZCwgMHgxYSwgMHg1MSwgMHhlZCwgMHgwMSwgMHg4ZiwgMHhjOSwKKwkweGM1LCAweDQ1LCAweDgyLCAweGJlLCAweDg2LCAweDM2LCAweGUzLCAweDgyLCAweGUzLCAweGZhLCAweDM5LCAweDE0LAorCTB4OGYsIDB4ZjEsIDB4ZmEsIDB4MWIsIDB4ODgsIDB4ZTUsIDB4NzAsIDB4ZGEsIDB4M2YsIDB4ZDksIDB4NzYsIDB4YWUsCisJMHg5YywgMHhlNSwgMHhiZCwgMHg0MiwgMHhkNCwgMHg2MywgMHhiZCwgMHhlZiwgMHg1MiwgMHhkYiwgMHg4MiwgMHhhOCwKKwkweDI3LCAweGUzLCAweDIwLCAweDFjLCAweDFkLCAweGQwLCAweGUxLCAweGUyLCAweDhkLCAweDc0LCAweDNmLCAweGZmLAorCTB4OWUsIDB4MTMsIDB4Y2MsIDB4ZGQsIDB4N2YsIDB4ZGQsIDB4MWQsIDB4MzYsIDB4M2YsIDB4MzQsIDB4NjQsIDB4YWUsCisJMHhkZSwgMHg1NiwgMHhkYywgMHg1ZCwgMHhkOSwgMHg4OSwgMHgwNiwgMHg4NSwgMHhhZiwgMHhjMSwgMHhhZCwgMHg3YiwKKwkweDQxLCAweDc2LCAweDVkLCAweGUwLCAweDNkLCAweDdjLCAweGE4LCAweGJhLCAweDdmLCAweGVmLCAweDg0LCAweDdkLAorCTB4ZTgsIDB4OTksIDB4MTYsIDB4NjIsIDB4MWQsIDB4NDQsIDB4OGUsIDB4ZTUsIDB4MmIsIDB4NTMsIDB4YzgsIDB4NDUsCisJMHhhYSwgMHhlNiwgMHhlZiwgMHg3OCwgMHhmMywgMHgzYywgMHgyMCwgMHgzZiwgMHg1NSwgMHg5ZSwgMHg4NywgMHhjYSwKKwkweDIzLCAweGM1LCAweDdiLCAweDI0LCAweDAyLCAweGYyLCAweDNjLCAweGRjLCAweDMyLCAweDE4LCAweGY1LCAweGVhLAorCTB4ZGYsIDB4YzMsIDB4MmQsIDB4N2YsIDB4NTcsIDB4MWMsIDB4ZjksIDB4NWIsIDB4ZjAsIDB4ZDgsIDB4ZTMsIDB4OTcsCisJMHhmMywgMHg2YSwgMHgyZCwgMHgyMCwgMHhlNywgMHg0MywgMHhmMSwgMHg5NCwgMHhkZSwgMHgwMCwgMHg5ZSwgMHgxMiwKKwkweDljLCAweGViLCAweGExLCAweGE1LCAweDJmLCAweGYyLCAweDVlLCAweDdlLCAweDA4LCAweDdiLCAweGI5LCAweDUxLAorCTB4OGIsIDB4ZTksIDB4OTUsIDB4NzIsIDB4ZjAsIDB4ZGMsIDB4M2EsIDB4NjQsIDB4YTIsIDB4Y2EsIDB4YjksIDB4ODEsCisJMHg1YywgMHg0NCwgMHgyYywgMHgzYywgMHhlNiwgMHhiYSwgMHhlNCwgMHg2MCwgMHgxMSwgMHhiZiwgMHhhOSwgMHg1OCwKKwkweDUyLCAweGE1LCAweDQ3LCAweGJkLCAweDIzLCAweGYyLCAweDBjLCAweGJlLCAweDFiLCAweDNmLCAweGNjLCAweDFjLAorCTB4MTgsIDB4ZjIsIDB4MTMsIDB4NzYsIDB4YTYsIDB4NDMsIDB4MGUsIDB4MWYsIDB4YmUsIDB4Y2MsIDB4YmYsIDB4OGQsCisJMHgzOSwgMHhkNywgMHg5MiwgMHg4YiwgMHhjYSwgMHg2YiwgMHhhNSwgMHg0YiwgMHhmZCwgMHhkMCwgMHg0MSwgMHhlNiwKKwkweDZmLCAweDBlLCAweDJmLCAweGFkLCAweGIzLCAweDQxLCAweGM0LCAweDUzLCAweGRhLCAweGRiLCAweDc0LCAweGExLAorCTB4ZDgsIDB4MGMsIDB4ODMsIDB4ZjUsIDB4ZjgsIDB4NGIsIDB4NzksIDB4MzgsIDB4NGYsIDB4NDIsIDB4NzAsIDB4OWUsCisJMHg5ZiwgMHgzYSwgMHhjMiwgMHhlNiwgMHg0NCwgMHg0ZiwgMHhiMywgMHgzOCwgMHg5YywgMHg1MywgMHg1NSwgMHhmYywKKwkweGE5LCAweDcyLCAweGFhLCAweDZmLCAweDhmLCAweDNhLCAweDEwLCAweGE3LCAweGU2LCAweGM3LCAweDA0LCAweGU2LAorCTB4MWYsIDB4ZmEsIDB4OWMsIDB4NWEsIDB4ODcsIDB4ZDAsIDB4ZWIsIDB4MTAsIDB4ZjMsIDB4ODcsIDB4NzYsIDB4OGQsCisJMHgwNiwgMHg2YiwgMHhiMCwgMHg2NiwgMHgxMywgMHgyZiwgMHg1MCwgMHgyYiwgMHhiMSwgMHg3ZiwgMHhjOSwgMHhkMSwKKwkweDBhLCAweDlkLCAweGVkLCAweDY5LCAweGE2LCAweGYzLCAweDllLCAweDA4LCAweGQ0LCAweDc5LCAweDgzLCAweDcyLAorCTB4YTQsIDB4Y2MsIDB4ODAsIDB4MWMsIDB4MjksIDB4MzcsIDB4MGUsIDB4NzUsIDB4MTcsIDB4MGUsIDB4ZTMsIDB4MmUsCisJMHgyZSwgMHgzMCwgMHhjMCwgMHhkYywgMHhiOSwgMHg4YiwgMHhmMSwgMHgwNCwgMHhlZSwgMHgxYywgMHhhNSwgMHhkMCwKKwkweDA3LCAweDZlLCAweGVlLCAweGVjLCAweGY3LCAweDEzLCAweDQ5LCAweDVjLCAweGZlLCAweGRiLCAweGRjLCAweGE5LAorCTB4YTAsIDB4N2UsIDB4MjcsIDB4N2MsIDB4ZmQsIDB4ODYsIDB4MWMsIDB4OWYsIDB4NmMsIDB4YzgsIDB4MTMsIDB4ODIsCisJMHgzOCwgMHhmZSwgMHg0ZSwgMHhmNywgMHhkMywgMHhiYiwgMHhmNiwgMHhkMSwgMHhhNiwgMHgwOSwgMHhmZCwgMHg3MCwKKwkweDc0LCAweGIxLCAweGJhLCAweGVlLCAweDVmLCAweGYwLCAweGQ5LCAweGI5LCAweGMxLCAweDY3LCAweDQzLCAweGMyLAorCTB4MjcsIDB4ZDcsIDB4MjUsIDB4ZjYsIDB4OTAsIDB4OWQsIDB4OTMsIDB4NjEsIDB4OWQsIDB4MWUsIDB4MTksIDB4NjYsCisJMHhmNywgMHhkNCwgMHhlYywgMHhmYywgMHg4OCwgMHgyMSwgMHhlYywgMHg3MywgMHg3NCwgMHgwZSwgMHhiOSwgMHhlZiwKKwkweDE0LCAweDFhLCAweGM2LCAweGE1LCAweGUyLCAweDNiLCAweGU5LCAweDFiLCAweDM4LCAweDc3LCAweDA0LCAweGIyLAorCTB4MWIsIDB4ZjIsIDB4ZmMsIDB4ZjQsIDB4NmMsIDB4ZDgsIDB4MzQsIDB4MWMsIDB4MWYsIDB4MDMsIDB4ZmMsIDB4MDgsCisJMHhjMCwgMHhhOSwgMHg3YSwgMHg3ZSwgMHg5MCwgMHgwZCwgMHgzZCwgMHg2OCwgMHgwZSwgMHg4NywgMHg3YywgMHg3MywKKwkweDI4LCAweGYxLCAweDA2LCAweDZlLCAweDhmLCAweDU4LCAweGJjLCAweDgzLCAweDllLCAweDM4LCAweGM1LCAweDlkLAorCTB4MTgsIDB4OTMsIDB4ZWUsIDB4ODAsIDB4NzgsIDB4NDEsIDB4YzQsIDB4ZmEsIDB4ZjksIDB4ZmEsIDB4Y2IsIDB4ZWYsCisJMHg3YywgMHg1MSwgMHhmMywgMHhhZiwgMHhhZCwgMHg0OSwgMHg2ZCwgMHhiYSwgMHgzYywgMHhhZCwgMHg0ZCwgMHgxNSwKKwkweDUxLCAweGVlLCAweGEyLCAweDU2LCAweGRiLCAweDk3LCAweDM2LCAweDVkLCAweDFjLCAweDExLCAweDdjLCAweDMwLAorCTB4NzksIDB4YWQsIDB4NDIsIDB4NzgsIDB4NGYsIDB4ZGIsIDB4YmUsIDB4MjUsIDB4YjgsIDB4ZWQsIDB4ODAsIDB4MGYsCisJMHhhYiwgMHg4YSwgMHg3MywgMHgxOCwgMHgyZCwgMHhiYywgMHg5NywgMHhiNCwgMHhiZCwgMHhiOCwgMHhiOSwgMHg4ZSwKKwkweDViLCAweGJlLCAweDNmLCAweDFkLCAweDIwLCAweGRmLCAweDliLCAweGQ5LCAweDBhLCAweDkxLCAweGJmLCAweDI5LAorCTB4ZTIsIDB4YjIsIDB4YTksIDB4NjgsIDB4MjEsIDB4ZGUsIDB4ZjEsIDB4MzAsIDB4ZTIsIDB4N2IsIDB4ZTEsIDB4ZDcsCisJMHhhOCwgMHg2MiwgMHhlMSwgMHg2ZSwgMHgzMCwgMHgxNiwgMHhhYSwgMHhmNiwgMHg2MCwgMHgxZCwgMHhiOSwgMHhhMywKKwkweDJjLCAweDhiLCAweGMzLCAweGU5LCAweDVlLCAweDBhLCAweDk5LCAweDI4LCAweGZmLCAweDZjLCAweGUyLCAweDNlLAorCTB4MWQsIDB4NzMsIDB4NzgsIDB4MDksIDB4ZmMsIDB4M2MsIDB4YjIsIDB4ZGUsIDB4NGMsIDB4MGIsIDB4NzYsIDB4ZTEsCisJMHg2MCwgMHg3ZiwgMHg0NiwgMHg4NCwgMHg2NSwgMHhmMywgMHg2NywgMHhiZCwgMHhhZCwgMHhmOSwgMHgzMywgMHg1NCwKKwkweDM5LCAweGQ0LCAweGVkLCAweGEyLCAweDM1LCAweDBiLCAweDcxLCAweDkyLCAweGYwLCAweDJmLCAweDc1LCAweDc3LAorCTB4YjQsIDB4OWIsIDB4NDEsIDB4ZjIsIDB4NGYsIDB4YzUsIDB4N2UsIDB4ODIsIDB4MWYsIDB4YzksIDB4YjksIDB4YmEsCisJMHg0MSwgMHg5OCwgMHgzYiwgMHg5YiwgMHhiZSwgMHg2ZiwgMHgzMCwgMHg1NywgMHhkYiwgMHhiMSwgMHgyOSwgMHgzNywKKwkweDlmLCAweDJiLCAweGMzLCAweDMzLCAweDU3LCAweGQ4LCAweDhiLCAweDlhLCAweGNkLCAweDk1LCAweGYyLCAweDQzLAorCTB4MmEsIDB4ZGYsIDB4ZGMsIDB4NTEsIDB4YzgsIDB4OTMsIDB4NDUsIDB4ZjcsIDB4NWMsIDB4ZWQsIDB4OGMsIDB4N2YsCisJMHg0ZSwgMHhjZSwgMHhkOSwgMHg0ZSwgMHhmYiwgMHhlMCwgMHgxYSwgMHg4ZiwgMHg0MywgMHgzNCwgMHhkMCwgMHg3NiwKKwkweDEyLCAweDJjLCAweDMzLCAweGZjLCAweDZiLCAweGViLCAweDg2LCAweDVjLCAweDViLCAweGNjLCAweDJiLCAweDllLAorCTB4NmYsIDB4YjgsIDB4YjYsIDB4YjAsIDB4MGYsIDB4NWMsIDB4NzAsIDB4ZjYsIDB4ODEsIDB4ZDMsIDB4M2UsIDB4N2QsCisJMHg1MSwgMHhkOSwgMHhiYywgMHhmZiwgMHhhYiwgMHhlZCwgMHgwZCwgMHhjZiwgMHg3ZCwgMHgyMiwgMHhjZSwgMHhlOSwKKwkweGM4LCAweDkxLCAweGRjLCAweDQ3LCAweGNlLCAweDM3LCAweGU0LCAweDYxLCAweDNkLCAweGRiLCAweDVjLCAweGE3LAorCTB4NmEsIDB4ZWUsIDB4OTEsIDB4NzMsIDB4MDEsIDB4NzksIDB4OTksIDB4YTUsIDB4ZjMsIDB4ZjksIDB4YzcsIDB4MDYsCisJMHg3NSwgMHhmNywgMHg1MywgMHhhNCwgMHgxYSwgMHhkMywgMHg3MiwgMHg0MCwgMHhmMCwgMHg2MSwgMHhiNywgMHhiZSwKKwkweGJjLCAweGVjLCAweGU0LCAweDI4LCAweGU2LCAweDVjLCAweDYzLCAweGIwLCAweDljLCAweGNmLCAweDM2LCAweDg5LAorCTB4YTcsIDB4NmYsIDB4MjUsIDB4OWUsIDB4NjMsIDB4YzAsIDB4MjMsIDB4MzcsIDB4YmQsIDB4NzMsIDB4MzUsIDB4YTEsCisJMHg2NSwgMHhmMiwgMHhhOCwgMHhiMywgMHg4NywgMHhjZSwgMHhlYSwgMHg5ZiwgMHhmMCwgMHgxOCwgMHgzZCwgMHhiMSwKKwkweDIzLCAweGUyLCAweDljLCAweDExLCAweGUwLCAweGQyLCAweGI2LCAweDk3LCAweGNkLCAweDBlLCAweDVhLCAweDk0LAorCTB4N2UsIDB4NDYsIDB4OWEsIDB4ZmEsIDB4ZjgsIDB4MTIsIDB4MTUsIDB4ODUsIDB4N2YsIDB4MGIsIDB4YjksIDB4NTEsCisJMHhiMCwgMHg3MSwgMHhjMywgMHg0NywgMHg4NywgMHhlNywgMHhmMCwgMHhmNywgMHgxYiwgMHgxMywgMHg4ZSwgMHhjYywKKwkweGZkLCAweDkzLCAweDMxLCAweDhjLCAweDdhLCAweDM4LCAweDBiLCAweDAxLCAweGViLCAweDlkLCAweDM0LCAweGM5LAorCTB4MzEsIDB4YjksIDB4MWQsIDB4NzEsIDB4NGUsIDB4ODAsIDB4OGMsIDB4Y2QsIDB4YmIsIDB4NWQsIDB4ZGUsIDB4OGUsCisJMHg0ZiwgMHhhMSwgMHg1NSwgMHhiZCwgMHhlNCwgMHhlYiwgMHg2OCwgMHhkOCwgMHhmYywgMHg3MiwgMHhjZiwgMHhmNiwKKwkweDdkLCAweDBhLCAweDJhLCAweDc3LCAweDVmLCAweDcxLCAweDU4LCAweDc1LCAweDJkLCAweDczLCAweDY5LCAweGMxLAorCTB4OTksIDB4ZTcsIDB4ZDcsIDB4NTUsIDB4ZGUsIDB4NmQsIDB4NzcsIDB4NDAsIDB4ZGUsIDB4NmQsIDB4ODgsIDB4ZTYsCisJMHg4NCwgMHhhZiwgMHgyZSwgMHg0NCwgMHgzOSwgMHg0NywgMHgzNywgMHg5MywgMHg5YywgMHg1YSwgMHhkOSwgMHg2YSwKKwkweDIzLCAweDRlLCAweGZjLCAweDI5LCAweGVlLCAweGRkLCAweDM5LCAweGY5LCAweDdjLCAweDVmLCAweDA0LCAweGNmLAorCTB4NDYsIDB4NGUsIDB4YjUsIDB4MmQsIDB4NjIsIDB4ZjEsIDB4MzMsIDB4YTIsIDB4NWMsIDB4YTcsIDB4YTcsIDB4MWMsCisJMHhkZiwgMHgxNywgMHhkNSwgMHgzMywgMHgzYiwgMHhiOSwgMHg3YywgMHg4YSwgMHg2NCwgMHgwZSwgMHg3ZCwgMHgyNywKKwkweGNkLCAweDE1LCAweDliLCAweGY1LCAweDZiLCAweDFmLCAweGUyLCAweDgxLCAweGUzLCAweGYwLCAweDk1LCAweDBhLAorCTB4YmYsIDB4OTUsIDB4YTEsIDB4ZmEsIDB4ODAsIDB4M2UsIDB4YjUsIDB4NTcsIDB4ZmIsIDB4MDQsIDB4ZjksIDB4MTQsCisJMHgxMiwgMHg3ZSwgMHgwNSwgMHhiZSwgMHg3NiwgMHhkYSwgMHg5OSwgMHgyMywgMHg3NywgMHhiZiwgMHhjMiwgMHhkYywKKwkweDJmLCAweDNjLCAweGE3LCAweGQzLCAweDU1LCAweGI2LCAweGQzLCAweDU1LCAweGI2LCAweDM2LCAweDVlLCAweDNhLAorCTB4ZWIsIDB4NTQsIDB4MGIsIDB4ZTUsIDB4MWYsIDB4NTksIDB4MmYsIDB4ZmQsIDB4NTYsIDB4ZDgsIDB4ZTYsIDB4ZTYsCisJMHhiMywgMHgwNiwgMHgyZCwgMHhhYywgMHhmNywgMHhmMiwgMHgyNywgMHhjNiwgMHgxZiwgMHg5NCwgMHhkYiwgMHhjYiwKKwkweGZmLCAweGRkLCAweDljLCAweGEyLCAweDVmLCAweGM0LCAweDAyLCAweGI2LCAweGNlLCAweDA3LCAweDgzLCAweGYxLAorCTB4MWYsIDB4YmMsIDB4NmUsIDB4MTMsIDB4MDEsIDB4ZWIsIDB4YjYsIDB4ZjksIDB4YmUsIDB4MjIsIDB4ZjcsIDB4OTMsCisJMHhlNCwgMHg5NSwgMHg4YSwgMHgyMywgMHhhZiwgMHgzNiwgMHg2OSwgMHhkMCwgMHgyNywgMHhhNywgMHg4MiwgMHhkNiwKKwkweDI5LCAweGZhLCAweDc4LCAweGNhLCAweGU5LCAweGUzLCAweDliLCAweGEyLCAweDNmLCAweGUzLCAweDU0LCAweGE4LAorCTB4ZTYsIDB4MGQsIDB4MWYsIDB4ZTEsIDB4ZWIsIDB4OTgsIDB4YjIsIDB4ZDEsIDB4MzUsIDB4OTAsIDB4YWIsIDB4ZGYsCisJMHg2YywgMHg0MywgMHhjNiwgMHgwNCwgMHg3MSwgMHhiMiwgMHgwMywgMHgwMSwgMHhmYSwgMHg4MCwgMHhlZSwgMHhkMiwKKwkweDA3LCAweGUyLCAweDU1LCAweDdkLCAweDYwLCAweDQ1LCAweGU4LCAweDA5LCAweGJiLCAweDFjLCAweDFkLCAweDM0LAorCTB4ZDgsIDB4MTYsIDB4OTcsIDB4Y2IsIDB4ZTMsIDB4Y2MsIDB4MWIsIDB4ZDgsIDB4ZjgsIDB4YTQsIDB4MWQsIDB4N2QsCisJMHhkYSwgMHhhYSwgMHg5ZSwgMHg5OSwgMHhjMywgMHhiYSwgMHg2NSwgMHg4ZCwgMHg0YiwgMHhmYiwgMHhlNSwgMHgwOSwKKwkweGNlLCAweGFjLCAweGE4LCAweGNjLCAweDNlLCAweDMwLCAweGEzLCAweGE0LCAweGE1LCAweDkzLCAweGYxLCAweGE5LAorCTB4NTAsIDB4ODQsIDB4MTYsIDB4YWMsIDB4MjgsIDB4MTUsIDB4YWMsIDB4MTQsIDB4NzMsIDB4NzAsIDB4ZjAsIDB4ZTMsCisJMHhkMCwgMHg4MCwgMHg0NiwgMHgxMSwgMHg5NiwgMHgzNSwgMHgxMSwgMHgyYSwgMHg5NSwgMHg5NCwgMHg0ZSwgMHg3NiwKKwkweDg2LCAweGM4LCAweDJjLCAweGM2LCAweGE0LCAweDBkLCAweDliLCAweDcxLCAweDlhLCAweDFmLCAweDMzLCAweGU2LAorCTB4NDksIDB4NDMsIDB4Y2MsIDB4OGIsIDB4OTMsIDB4YTMsIDB4MGUsIDB4MGMsIDB4OGEsIDB4MzgsIDB4NGIsIDB4ZmQsCisJMHhlNSwgMHg5MSwgMHgyOCwgMHhiNSwgMHhhNywgMHhhNSwgMHhjZCwgMHg2OCwgMHg4NiwgMHhkYiwgMHhmOCwgMHhjMiwKKwkweDhhLCAweGQxLCAweDk1LCAweDdjLCAweGQyLCAweDM4LCAweGMxLCAweGVkLCAweDY0LCAweGFjLCAweDY0LCAweDYyLAorCTB4OTIsIDB4OWYsIDB4NWQsIDB4MmMsIDB4NDUsIDB4MjgsIDB4NjcsIDB4NDUsIDB4YTgsIDB4NTAsIDB4NGEsIDB4MTksCisJMHg0MywgMHg2ZCwgMHhhMiwgMHhjZCwgMHgxOCwgMHhkYSwgMHg3YywgMHg0OSwgMHgxZiwgMHgzMywgMHg0ZSwgMHg5MiwKKwkweGJiLCAweGNkLCAweGFmLCAweDljLCAweDM2LCAweGJkLCAweDZkLCAweGZkLCAweDYxLCAweGUzLCAweGZlLCAweDQ0LAorCTB4YTgsIDB4MzIsIDB4N2IsIDB4OWYsIDB4ZjEsIDB4OTIsIDB4NWIsIDB4OWQsIDB4NjAsIDB4ZDksIDB4MTQsIDB4MTMsCisJMHg2NywgMHhkYiwgMHg2OCwgMHhlOSwgMHgzNCwgMHhjYiwgMHgxZCwgMHg5YywgMHg2ZCwgMHg2MSwgMHhkMCwgMHg2MiwKKwkweDM5LCAweDRlLCAweGVmLCAweDU3LCAweGVkLCAweDA3LCAweDEyLCAweDQzLCAweDM5LCAweDkxLCAweDQzLCAweDg0LAorCTB4MzMsIDB4MTcsIDB4MmEsIDB4YjMsIDB4YmYsIDB4OWIsIDB4NWUsIDB4N2YsIDB4M2YsIDB4ZWIsIDB4NWIsIDB4MWYsCisJMHhjNSwgMHgyOCwgMHg3MiwgMHgxNSwgMHg3MSwgMHhkZCwgMHgzNiwgMHg1ZCwgMHgxYiwgMHg0ZiwgMHg1ZSwgMHhkOSwKKwkweDE0LCAweDc5LCAweDY4LCAweDA5LCAweDVhLCAweDMzLCAweGE1LCAweDNjLCAweGNkLCAweDcxLCAweGY5LCAweDE1LAorCTB4OTQsIDB4NWIsIDB4NGIsIDB4ZDAsIDB4M2QsIDB4OTEsIDB4OGYsIDB4ZDYsIDB4NGUsIDB4NzcsIDB4ZjQsIDB4MTgsCisJMHg4NSwgMHg2ZSwgMHg5YSwgMHhjNiwgMHhiYywgMHhmMCwgMHgwYiwgMHg1NywgMHg2NiwgMHg4NywgMHg4NiwgMHgwZCwKKwkweGQyLCAweGFlLCAweGEyLCAweDFlLCAweGZmLCAweGJmLCAweDg5LCAweGZiLCAweDI4LCAweDYxLCAweDdlLCAweDY2LAorCTB4YWMsIDB4MzEsIDB4NWUsIDB4NDksIDB4YzMsIDB4ZjEsIDB4MTIsIDB4NjQsIDB4ZjMsIDB4NDEsIDB4ODksIDB4YTUsCisJMHgzOSwgMHgyMywgMHg0MiwgMHhkMCwgMHg1ZiwgMHg2MSwgMHg3YiwgMHhlYiwgMHgzNSwgMHgyNywgMHg3YiwgMHhhNCwKKwkweGZlLCAweGU0LCAweDNiLCAweDliLCAweDQzLCAweDlmLCAweDE5LCAweDcxLCAweDlmLCAweGNmLCAweDUxLCAweDdiLAorCTB4NjYsIDB4YzYsIDB4OTIsIDB4ZWYsIDB4YjksIDB4NTIsIDB4ZWUsIDB4YTUsIDB4MjUsIDB4NmUsIDB4N2IsIDB4NjQsCisJMHhmOCwgMHg4YywgMHg3MywgMHhhNiwgMHgwZiwgMHhmZiwgMHhkOSwgMHg4YiwgMHg3YiwgMHg4NSwgMHhiNywgMHg3ZCwKKwkweDdkLCAweDE0LCAweGM1LCAweDNkLCAweDBkLCAweGU4LCAweDNjLCAweGM3LCAweGIwLCAweGU5LCAweDg3LCAweGM1LAorCTB4YjgsIDB4YTcsIDB4ZTIsIDB4OTgsIDB4Y2IsIDB4YjksIDB4YjgsIDB4M2EsIDB4OTcsIDB4MDgsIDB4NjUsIDB4YmEsCisJMHhlOSwgMHg5MSwgMHhkNSwgMHg0NSwgMHgzZiwgMHg4YiwgMHhmMywgMHg0NywgMHhmOCwgMHhiYSwgMHg4NCwgMHg5YywKKwkweGEzLCAweDM2LCAweGNhLCAweDY0LCAweGJiLCAweDY5LCAweGIzLCAweDE0LCAweDY2LCAweDcxLCAweDA1LCAweGVjLAorCTB4NDQsIDB4YjksIDB4NGMsIDB4ODEsIDB4YTYsIDB4ZDYsIDB4NWYsIDB4ZWIsIDB4ODMsIDB4MWYsIDB4NjYsIDB4NTIsCisJMHhhYiwgMHg2MSwgMHhlOSwgMHg1MSwgMHgwMCwgMHg5NiwgMHg3ZSwgMHhhOSwgMHhjMywgMHhkMiwgMHhkMSwgMHhiZSwKKwkweGU2LCAweDU4LCAweGVhLCAweDc3LCAweDYyLCAweGQ2LCAweGEzLCAweDE0LCAweDcxLCAweDcwLCAweGY0LCAweDM5LAorCTB4ZTMsIDB4ZTgsIDB4M2QsIDB4YzYsIDB4ZDEsIDB4ZjEsIDB4MDYsIDB4MzgsIDB4ZDIsIDB4M2MsIDB4MzgsIDB4M2EsCisJMHg1MSwgMHg4NywgMHhhMywgMHg2YywgMHg1ZiwgMHgzMywgMHgxYywgMHgxZCwgMHgwZiwgMHhhMSwgMHhmZiwgMHhjZCwKKwkweGQ2LCAweDMyLCAweGZhLCAweGIwLCAweDlmLCAweDM5LCAweGJkLCAweDQ5LCAweGE1LCAweGQ1LCAweGU0LCAweGY4LAorCTB4MjQsIDB4NTUsIDB4OTAsIDB4NzMsIDB4OTIsIDB4NTgsIDB4YTIsIDB4YjQsIDB4ZTAsIDB4NzYsIDB4MDUsIDB4ODEsCisJMHhiZiwgMHgyYywgMHg4ZiwgMHhjOSwgMHhhZSwgMHgwNiwgMHhlNywgMHhhYSwgMHgyNCwgMHg5YywgMHg3OSwgMHg5MywKKwkweDczLCAweDk5LCAweGM5LCAweDU3LCAweDY2LCAweDFmLCAweDMyLCAweDM2LCAweGVlLCAweDZkLCAweGU4LCAweDNhLAorCTB4N2UsIDB4MGIsIDB4YjEsIDB4OGMsIDB4YmMsIDB4YmIsIDB4ODEsIDB4NzMsIDB4NWIsIDB4ZTIsIDB4NzQsIDB4ZGYsCisJMHgxYSwgMHhhMCwgMHg3YiwgMHhkNiwgMHg3ZSwgMHhiYSwgMHg2YiwgMHgwZCwgMHhkMiwgMHgwMywgMHgwYiwgMHg2ZCwKKwkweDYwLCAweDBlLCAweGY4LCAweDVlLCAweGNjLCAweDgxLCAweDQ2LCAweDMzLCAweDMxLCAweDJlLCAweDUzLCAweGRhLAorCTB4NGYsIDB4OTUsIDB4OTIsIDB4YzIsIDB4MzUsIDB4YjAsIDB4MDMsIDB4MGMsIDB4MzUsIDB4YzYsIDB4NGUsIDB4YTYsCisJMHgwZSwgMHgzYiwgMHhiMiwgMHgwZSwgMHgzMCwgMHhiMywgMHhlNCwgMHhiNywgMHhhZCwgMHhlZCwgMHgzMiwgMHhmOCwKKwkweDVkLCAweDBkLCAweGM2LCAweDU2LCAweDU4LCAweGM0LCAweDkxLCAweDI0LCAweDQ3LCAweDY3LCAweDQyLCAweDkwLAorCTB4NTksIDB4YjcsIDB4MTgsIDB4NTMsIDB4M2MsIDB4MTcsIDB4M2MsIDB4N2UsIDB4ZGEsIDB4ZjUsIDB4NDEsIDB4OTYsCisJMHgzOSwgMHg0ZiwgMHgwOSwgMHgxYiwgMHhmNCwgMHg5NCwgMHhhOSwgMHhjNywgMHgzMywgMHg2NCwgMHg1ZiwgMHhkNiwKKwkweGNjLCAweDMxLCAweDkxLCAweGViLCAweGI2LCAweDU0LCAweGY2LCAweDllLCAweDMxLCAweDkxLCAweGUxLCAweGIxLAorCTB4NTcsIDB4NzgsIDB4ZjQsIDB4Y2EsIDB4YTEsIDB4NzYsIDB4YWEsIDB4MzgsIDB4MzEsIDB4NGMsIDB4ODUsIDB4NTUsCisJMHhkYiwgMHg3ZSwgMHhjOCwgMHhmYywgMHg3ZiwgMHhjZCwgMHg4NCwgMHhjYywgMHhmZSwgMHhkYiwgMHhhZSwgMHhjNCwKKwkweDc0LCAweDVhLCAweDM2LCAweDU1LCAweGRmLCAweGVlLCAweDA4LCAweDdjLCAweDMxLCAweDQ3LCAweGE0LCAweDc3LAorCTB4MzcsIDB4YWEsIDB4YWYsIDB4YzQsIDB4YmYsIDB4ZTMsIDB4YmIsIDB4YmYsIDB4MDQsIDB4OTcsIDB4NTksIDB4YWIsCisJMHg5NiwgMHg4NSwgMHhlZCwgMHhmOCwgMHhkMiwgMHhkOCwgMHhjMiwgMHgyYSwgMHhjZSwgMHg3ZSwgMHg3YiwgMHhmYywKKwkweGVhLCAweGY5LCAweGQ1LCAweDVjLCAweDFmLCAweDRiLCAweGQ4LCAweDk0LCAweDRlLCAweDc2LCAweDY4LCAweDc5LAorCTB4M2MsIDB4ZjcsIDB4NWMsIDB4OTgsIDB4ODYsIDB4MTksIDB4OTcsIDB4MzgsIDB4ODMsIDB4NmIsIDB4NmMsIDB4MzQsCisJMHgyYywgMHhjZSwgMHgzOCwgMHhkOSwgMHhjZCwgMHg3OCwgMHhjOCwgMHgwYSwgMHgzYiwgMHhmZCwgMHhkNCwgMHg5MSwKKwkweDA5LCAweDlhLCAweDJjLCAweGE3LCAweGY5LCAweDUzLCAweDNmLCAweDdlLCAweGI1LCAweGI5LCAweGUzLCAweGUxLAorCTB4NDgsIDB4ZTMsIDB4MzcsIDB4MzcsIDB4ZmYsIDB4YTgsIDB4ZDUsIDB4OWQsIDB4ZTYsIDB4YmEsIDB4MzMsIDB4NWIsCisJMHhkNiwgMHg1NSwgMHhlNywgMHgxMiwgMHhmZCwgMHgwMywgMHg2OSwgMHhhZSwgMHgxYiwgMHhhMywgMHhiYywgMHg1NywKKwkweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyB1MzIgYm54Ml9DT01fYjA2RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CiBzdGF0aWMgdTMyIGJueDJfQ09NX2IwNkZ3Um9kYXRhWygweDU4LzQpICsgMV0gPSB7CkBAIC05ODksOTUyICs2ODcsMzY4IEBACiBzdGF0aWMgaW50IGJueDJfUlhQX2IwNkZ3QnNzTGVuID0gMHgxM2E0Owogc3RhdGljIHUzMiBibngyX1JYUF9iMDZGd1Nic3NBZGRyID0gMHgwODAwNThlMDsKIHN0YXRpYyBpbnQgYm54Ml9SWFBfYjA2RndTYnNzTGVuID0gMHgxYzsKLXN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndUZXh0WygweDU4OGMvNCkgKyAxXSA9IHsKLQkweDBhMDAwYzYxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDcyNzg3MDIwLCAweDMyMmUzNjJlLAotCTB4MzEwMDAwMDAsIDB4MDIwNjAxMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDBkLAotCTB4M2MwMjA4MDAsIDB4MjQ0MjU4ZTAsIDB4M2MwMzA4MDAsIDB4MjQ2MzZjYTQsIDB4YWM0MDAwMDAsIDB4MDA0MzIwMmIsCi0JMHgxNDgwZmZmZCwgMHgyNDQyMDAwNCwgMHgzYzFkMDgwMCwgMHgzN2JkN2ZmYywgMHgwM2EwZjAyMSwgMHgzYzEwMDgwMCwKLQkweDI2MTAzMTg0LCAweDNjMWMwODAwLCAweDI3OWM1OGUwLCAweDBlMDAxMDRhLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLAotCTB4MjdiZGZmZTgsIDB4YWZiMDAwMTAsIDB4YWZiZjAwMTQsIDB4MGUwMDBmMWQsIDB4MDA4MDgwMjEsIDB4MTQ0MDAwMGQsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAxMCwgMHgxMDQwMDAwNSwgMHgwMDAwMDAwMCwgMHg5NzQzMDExYywgMHg5NzQyMDExZSwKLQkweDBhMDAwYzg5LCAweDAwMDIxNDAwLCAweDk3NDMwMTFlLCAweDk3NDIwMTFjLCAweDAwMDIxNDAwLCAweDAwNjIxODI1LAotCTB4YWY4MzAwMDQsIDB4OGY4NDAwMDgsIDB4M2MwMjAwMjAsIDB4MzQ0MjQwMDAsIDB4MDA4MjE4MjQsIDB4NTQ2MjAwMDQsCi0JMHgzYzAyMDAyMCwgMHg4ZjgyMDAxNCwgMHgwYTAwMGM5YSwgMHgzNDQyMTAwMCwgMHgzNDQyODAwMCwgMHgwMDgyMTgyNCwKLQkweDE0NjIwMDA0LCAweDAwMDAwMDAwLCAweDhmODIwMDE0LCAweDM0NDI4MDAwLCAweGFmODIwMDE0LCAweDhmODIwMDA4LAotCTB4OTc0MzAxMGMsIDB4MDA0MDMwMjEsIDB4MzA0MjEwMDAsIDB4MTA0MDAwMTAsIDB4MzA2OWZmZmYsIDB4MzBjMjAwMjAsCi0JMHgxNDQwMDAwZSwgMHgyNDA3MDAwNSwgMHgzYzAyMTAwMCwgMHgwMGMyMTAyNCwgMHgxMDQwMDAwOSwgMHgzYzAzMGRmZiwKLQkweDM0NjNmZmZmLCAweDNjMDIwZTAwLCAweDAwYzIxMDI0LCAweDAwNjIxODJiLCAweDUwNjAwMDA0LCAweDI0MDcwMDAxLAotCTB4MGEwMDBjYjIsIDB4M2MwMjA4MDAsIDB4MjQwNzAwMDEsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMzQsIDB4MTQ2MDAwMWQsCi0JMHgwMDQwNTgyMSwgMHg4ZjgyMDAxNCwgMHgzMDQyNDAwMCwgMHgxNDQwMDAxYSwgMHgzYzAyMDAwMSwgMHgzYzAyMWYwMSwKLQkweDAwYzI0MDI0LCAweDNjMDMxMDAwLCAweDE1MDMwMDE1LCAweDNjMDIwMDAxLCAweDMxMjIwMjAwLCAweDE0NDAwMDEyLAotCTB4M2MwMjAwMDEsIDB4OTc0NDAxMGUsIDB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsIDB4OTc4NTAwMTYsIDB4MjQwMjAwMDIsCi0JMHgzNGUzMDAwMiwgMHhhZjQwMDE4MCwgMHhhNzQyMDE4YywgMHhhNzQzMDE4OCwgMHgyNDg0MDAwNCwgMHgzMGE1YmZmZiwKLQkweGE3NDQwMThlLCAweGE3NDUwMWE2LCAweGFmNDgwMWI4LCAweDBhMDAwZjE5LCAweDAwMDAxMDIxLCAweDNjMDIwMDAxLAotCTB4MDBjMjEwMjQsIDB4MTA0MDAwMmYsIDB4MDAwMDAwMDAsIDB4OTc0MjAxMGUsIDB4M2MwMzgwMDAsIDB4MzA0NmZmZmYsCi0JMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMywgMHhhMzQyMDE4YiwgMHg5Nzg0MDAwYSwKLQkweDhmODUwMDA0LCAweDhmODcwMDE0LCAweDI0MDIwMDgwLCAweDI0MDMwMDAyLCAweGFmNDIwMTgwLCAweDI0MDIwMDAzLAotCTB4YTc0MzAxOGMsIDB4YTc0NjAxOGUsIDB4YTc0MjAxODgsIDB4MzBlMjgwMDAsIDB4YTc0NDAxOTAsIDB4MTA0MDAwMGMsCi0JMHhhZjQ1MDFhOCwgMHg5MzQyMDExNiwgMHgzMDQyMDBmYywgMHgwMDVhMTAyMSwgMHgyNDQyNDAwNCwgMHg4YzQzMDAwMCwKLQkweDMwNjNmZmZmLCAweDE0NjAwMDA0LCAweDNjMDJmZmZmLCAweDM0NDI3ZmZmLCAweDAwZTIxMDI0LCAweGFmODIwMDE0LAotCTB4OTc4MjAwMTYsIDB4OTc0MzAxMGMsIDB4OGY0NDAxMDQsIDB4MzA0MmJmZmYsIDB4MDAwMzFjMDAsIDB4MzA4NGZmZmYsCi0JMHgwMDY0MTgyNSwgMHhhNzQyMDFhNiwgMHhhZjQzMDFhYywgMHgzYzAyMTAwMCwgMHhhZjQyMDFiOCwgMHgwYTAwMGYxOSwKLQkweDAwMDAxMDIxLCAweDhmODIwMDE0LCAweDMwNDM0MDAwLCAweDEwNjAwMDE2LCAweDAwNDA0MDIxLCAweDNjMDIwZjAwLAotCTB4MDBjMjEwMjQsIDB4MTQ0MDAwMTIsIDB4MDAwMDAwMDAsIDB4OTM0MjAxMTYsIDB4MzQ0MjQwMDAsIDB4MDM0MjE4MjEsCi0JMHg5NDY1MDAwMiwgMHgyY2EyMTM4OSwgMHgxMDQwMDAwYiwgMHgzYzAyMDgwMCwgMHgyNDQyNTkwMCwgMHgwMDA1MTk0MiwKLQkweDAwMDMxODgwLCAweDAwNjIxODIxLCAweDMwYTUwMDFmLCAweDhjNjQwMDAwLCAweDI0MDIwMDAxLCAweDAwYTIxMDA0LAotCTB4MDA4MjIwMjQsIDB4MDIwNDgwMjUsIDB4MTIwMDAwMzAsIDB4M2MwMjEwMDAsIDB4OTc0MjAxMGUsIDB4MzRlODAwMDIsCi0JMHgzYzAzODAwMCwgMHgyNDQyMDAwNCwgMHgzMDQ2ZmZmZiwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAzLCAweGEzNDIwMThiLCAweDk3ODQwMDBhLCAweDhmODUwMDA0LCAweDhmODcwMDE0LCAweDI0MDIwMTgwLAotCTB4MjQwMzAwMDIsIDB4YWY0MjAxODAsIDB4YTc0MzAxOGMsIDB4YTc0NjAxOGUsIDB4YTc0ODAxODgsIDB4MzBlMjgwMDAsCi0JMHhhNzQ0MDE5MCwgMHgxMDQwMDAwYywgMHhhZjQ1MDFhOCwgMHg5MzQyMDExNiwgMHgzMDQyMDBmYywgMHgwMDVhMTAyMSwKLQkweDI0NDI0MDA0LCAweDhjNDMwMDAwLCAweDMwNjNmZmZmLCAweDE0NjAwMDA0LCAweDNjMDJmZmZmLCAweDM0NDI3ZmZmLAotCTB4MDBlMjEwMjQsIDB4YWY4MjAwMTQsIDB4OTc4MjAwMTYsIDB4OTc0MzAxMGMsIDB4OGY0NDAxMDQsIDB4MzA0MmJmZmYsCi0JMHgwMDAzMWMwMCwgMHgzMDg0ZmZmZiwgMHgwMDY0MTgyNSwgMHhhNzQyMDFhNiwgMHhhZjQzMDFhYywgMHgzYzAyMTAwMCwKLQkweGFmNDIwMWI4LCAweDBhMDAwZjE5LCAweDAwMDAxMDIxLCAweDAwYzIxMDI0LCAweDEwNDAwMGMwLCAweDNjMDIwODAwLAotCTB4OGM0MzAwMzAsIDB4MTA2MDAwMzcsIDB4MzEwMjQwMDAsIDB4MTA0MDAwMzUsIDB4M2MwMzBmMDAsIDB4MDBjMzE4MjQsCi0JMHgzYzAyMDEwMCwgMHgwMDQzMTAyYiwgMHgxNDQwMDAzMSwgMHgzYzAzMDgwMCwgMHg5NzQyMDEwZSwgMHgzNGU4MDAwMiwKLQkweDNjMDM4MDAwLCAweDI0NDIwMDA0LCAweDMwNDZmZmZmLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsIDB4OTc4NDAwMGEsIDB4OGY4NTAwMDQsIDB4OGY4NzAwMTQsIDB4MjQwMjAwODAsCi0JMHgyNDAzMDAwMiwgMHhhZjQyMDE4MCwgMHhhNzQzMDE4YywgMHhhNzQ2MDE4ZSwgMHhhNzQ4MDE4OCwgMHgzMGUyODAwMCwKLQkweGE3NDQwMTkwLCAweDEwNDAwMDBjLCAweGFmNDUwMWE4LCAweDkzNDIwMTE2LCAweDMwNDIwMGZjLCAweDAwNWExMDIxLAotCTB4MjQ0MjQwMDQsIDB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsIDB4MTQ2MDAwMDQsIDB4M2MwMmZmZmYsIDB4MzQ0MjdmZmYsCi0JMHgwMGUyMTAyNCwgMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwgMHg5NzQzMDEwYywgMHg4ZjQ0MDEwNCwgMHgzMDQyYmZmZiwKLQkweDAwMDMxYzAwLCAweDMwODRmZmZmLCAweDAwNjQxODI1LCAweGE3NDIwMWE2LCAweGFmNDMwMWFjLCAweDNjMDIxMDAwLAotCTB4YWY0MjAxYjgsIDB4MGEwMDBmMTksIDB4MDAwMDEwMjEsIDB4M2MwMzA4MDAsIDB4OGM2MjAwMjQsIDB4MzA0MjAwMDgsCi0JMHgxMDQwMDAzNSwgMHgzNGVhMDAwMiwgMHgzYzAyMGYwMCwgMHgwMGMyMTAyNCwgMHgxNDQwMDAzMiwgMHg4ZDYyMDAzNCwKLQkweDMxMjIwMjAwLCAweDEwNDAwMDJmLCAweDhkNjIwMDM0LCAweDk3NDIwMTBlLCAweDMwZThmZmZiLCAweDNjMDM4MDAwLAotCTB4MjQ0MjAwMDQsIDB4MzA0NmZmZmYsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDMsCi0JMHhhMzQyMDE4YiwgMHg5Nzg0MDAwYSwgMHg4Zjg1MDAwNCwgMHg4Zjg3MDAxNCwgMHgyNDAyMDE4MCwgMHgyNDAzMDAwMiwKLQkweGFmNDIwMTgwLCAweGE3NDMwMThjLCAweGE3NDYwMThlLCAweGE3NDgwMTg4LCAweDMwZTI4MDAwLCAweGE3NDQwMTkwLAotCTB4MTA0MDAwMGMsIDB4YWY0NTAxYTgsIDB4OTM0MjAxMTYsIDB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsIDB4MjQ0MjQwMDQsCi0JMHg4YzQzMDAwMCwgMHgzMDYzZmZmZiwgMHgxNDYwMDAwNCwgMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwgMHgwMGUyMTAyNCwKLQkweGFmODIwMDE0LCAweDk3ODIwMDE2LCAweDk3NDMwMTBjLCAweDhmNDQwMTA0LCAweDMwNDJiZmZmLCAweDAwMDMxYzAwLAotCTB4MzA4NGZmZmYsIDB4MDA2NDE4MjUsIDB4YTc0MjAxYTYsIDB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsCi0JMHg4ZDYyMDAzNCwgMHg4Zjg2MDAwOCwgMHgxMDQwMDAxMiwgMHgzMGMyMDEwMCwgMHgxMDQwMDAxMCwgMHgzYzAyMGYwMCwKLQkweDAwYzIxMDI0LCAweDNjMDMwMjAwLCAweDEwNDMwMDBjLCAweDNjMDIwODAwLCAweDhjNDMwMDM4LCAweDhmODQwMDA0LAotCTB4M2MwMjA4MDAsIDB4MjQ0MjAwM2MsIDB4MjQ2M2ZmZmYsIDB4MDA4MzIwMjQsIDB4MDA4MjIwMjEsIDB4OTA4MzAwMDAsCi0JMHgyNDYzMDAwNCwgMHgwYTAwMGRlMSwgMHgwMDAzMjljMCwgMHgwMDAwMDAwMCwgMHgwMDA2MTYwMiwgMHgzMDQyMDAwZiwKLQkweDAwMDIyOWMwLCAweDNjMDRmYzAwLCAweDAwNDQxMDIxLCAweDNjMDMwMzAwLCAweDAwNjIxODJiLCAweDUwNjAwMDAxLAotCTB4MjQwNTA4MDAsIDB4OTc0MjAxMGUsIDB4MzE0OGZmZmYsIDB4M2MwMzgwMDAsIDB4MjQ0MjAwMDQsIDB4MzA0NmZmZmYsCi0JMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMywgMHhhMzQyMDE4YiwgMHg5NzgzMDAwYSwKLQkweDhmODQwMDA0LCAweDhmODcwMDE0LCAweDI0MDIwMDAyLCAweGFmNDUwMTgwLCAweGE3NDIwMThjLCAweGE3NDYwMThlLAotCTB4YTc0ODAxODgsIDB4MzBlMjgwMDAsIDB4YTc0MzAxOTAsIDB4MTA0MDAwMGMsIDB4YWY0NDAxYTgsIDB4OTM0MjAxMTYsCi0JMHgzMDQyMDBmYywgMHgwMDVhMTAyMSwgMHgyNDQyNDAwNCwgMHg4YzQzMDAwMCwgMHgzMDYzZmZmZiwgMHgxNDYwMDAwNCwKLQkweDNjMDJmZmZmLCAweDM0NDI3ZmZmLCAweDAwZTIxMDI0LCAweGFmODIwMDE0LCAweDk3ODIwMDE2LCAweDk3NDMwMTBjLAotCTB4OGY0NDAxMDQsIDB4MzA0MmJmZmYsIDB4MDAwMzFjMDAsIDB4MzA4NGZmZmYsIDB4MDA2NDE4MjUsIDB4YTc0MjAxYTYsCi0JMHhhZjQzMDFhYywgMHgzYzAyMTAwMCwgMHhhZjQyMDFiOCwgMHgwYTAwMGYxOSwgMHgwMDAwMTAyMSwgMHg4ZjQyNDAwMCwKLQkweDMwNDIwMTAwLCAweDEwNDAwMGQ1LCAweDNjMDIwODAwLCAweDhjNDQwMDI0LCAweDI0MDMwMDAxLCAweDE0ODMwMDJmLAotCTB4MDA0MDUwMjEsIDB4OTc0MjAxMGUsIDB4MzRlNzAwMDIsIDB4M2MwMzgwMDAsIDB4MjQ0MjAwMDQsIDB4MzA0NWZmZmYsCi0JMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMywgMHhhMzQyMDE4YiwgMHg5NzgzMDAwYSwKLQkweDhmODQwMDA0LCAweDhmODYwMDE0LCAweDI0MDIwMDAyLCAweGFmNDAwMTgwLCAweGE3NDIwMThjLCAweGE3NDUwMThlLAotCTB4YTc0NzAxODgsIDB4MzBjMjgwMDAsIDB4YTc0MzAxOTAsIDB4MTA0MDAwMGMsIDB4YWY0NDAxYTgsIDB4OTM0MjAxMTYsCi0JMHgzMDQyMDBmYywgMHgwMDVhMTAyMSwgMHgyNDQyNDAwNCwgMHg4YzQzMDAwMCwgMHgzMDYzZmZmZiwgMHgxNDYwMDAwNCwKLQkweDNjMDJmZmZmLCAweDM0NDI3ZmZmLCAweDAwYzIxMDI0LCAweGFmODIwMDE0LCAweDk3ODIwMDE2LCAweDk3NDMwMTBjLAotCTB4OGY0NDAxMDQsIDB4MzA0MmJmZmYsIDB4MDAwMzFjMDAsIDB4MzA4NGZmZmYsIDB4MDA2NDE4MjUsIDB4YTc0MjAxYTYsCi0JMHhhZjQzMDFhYywgMHgzYzAyMTAwMCwgMHhhZjQyMDFiOCwgMHgwYTAwMGYxOSwgMHgwMDAwMTAyMSwgMHgzMDgyMDAwMSwKLQkweDEwNDAwMDJlLCAweDMwZWIwMDA0LCAweDk3NDIwMTBlLCAweDMwZTlmZmZiLCAweDNjMDM4MDAwLCAweDI0NDIwMDA0LAotCTB4MzA0NWZmZmYsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsCi0JMHg5NzgzMDAwYSwgMHg4Zjg0MDAwNCwgMHg4Zjg2MDAxNCwgMHgyNDAyMDAwMiwgMHhhZjQwMDE4MCwgMHhhNzQyMDE4YywKLQkweGE3NDUwMThlLCAweGE3NDcwMTg4LCAweDMwYzI4MDAwLCAweGE3NDMwMTkwLCAweDEwNDAwMDBjLCAweGFmNDQwMWE4LAotCTB4OTM0MjAxMTYsIDB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsIDB4MjQ0MjQwMDQsIDB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsCi0JMHgxNDYwMDAwNCwgMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwgMHgwMGMyMTAyNCwgMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwKLQkweDk3NDMwMTBjLCAweDhmNDQwMTA0LCAweDMwNDJiZmZmLCAweDAwMDMxYzAwLCAweDMwODRmZmZmLCAweDAwNjQxODI1LAotCTB4YTc0MjAxYTYsIDB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsIDB4MzEyN2ZmZmYsIDB4OGQ0MjAwMjQsCi0JMHgzMDQyMDAwNCwgMHgxMDQwMDAzMCwgMHg4ZDQyMDAyNCwgMHg5NzQyMDEwZSwgMHgzMGU5ZmZmYiwgMHgzYzAzODAwMCwKLQkweDI0NDIwMDA0LCAweDMwNDZmZmZmLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAzLAotCTB4YTM0MjAxOGIsIDB4OTc4NDAwMGEsIDB4OGY4NTAwMDQsIDB4OGY4ODAwMTQsIDB4MjQwMjAxMDAsIDB4MjQwMzAwMDIsCi0JMHhhZjQyMDE4MCwgMHhhNzQzMDE4YywgMHhhNzQ2MDE4ZSwgMHhhNzQ3MDE4OCwgMHgzMTAyODAwMCwgMHhhNzQ0MDE5MCwKLQkweDEwNDAwMDBjLCAweGFmNDUwMWE4LCAweDkzNDIwMTE2LCAweDMwNDIwMGZjLCAweDAwNWExMDIxLCAweDI0NDI0MDA0LAotCTB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsIDB4MTQ2MDAwMDQsIDB4M2MwMmZmZmYsIDB4MzQ0MjdmZmYsIDB4MDEwMjEwMjQsCi0JMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwgMHg5NzQzMDEwYywgMHg4ZjQ0MDEwNCwgMHgzMDQyYmZmZiwgMHgwMDAzMWMwMCwKLQkweDMwODRmZmZmLCAweDAwNjQxODI1LCAweGE3NDIwMWE2LCAweGFmNDMwMWFjLCAweDNjMDIxMDAwLCAweGFmNDIwMWI4LAotCTB4MzEyN2ZmZmYsIDB4OGQ0MjAwMjQsIDB4MzA0MjAwMDgsIDB4MTA0MDAwMmQsIDB4MDAwMDAwMDAsIDB4OTc0MjAxMGUsCi0JMHgzYzAzODAwMCwgMHgyNDQyMDAwNCwgMHgzMDQ2ZmZmZiwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAzLCAweGEzNDIwMThiLCAweDk3ODQwMDBhLCAweDhmODUwMDA0LCAweDhmODgwMDE0LCAweDI0MDIwMTgwLAotCTB4MjQwMzAwMDIsIDB4YWY0MjAxODAsIDB4YTc0MzAxOGMsIDB4YTc0NjAxOGUsIDB4YTc0NzAxODgsIDB4MzEwMjgwMDAsCi0JMHhhNzQ0MDE5MCwgMHgxMDQwMDAwYywgMHhhZjQ1MDFhOCwgMHg5MzQyMDExNiwgMHgzMDQyMDBmYywgMHgwMDVhMTAyMSwKLQkweDI0NDI0MDA0LCAweDhjNDMwMDAwLCAweDMwNjNmZmZmLCAweDE0NjAwMDA0LCAweDNjMDJmZmZmLCAweDM0NDI3ZmZmLAotCTB4MDEwMjEwMjQsIDB4YWY4MjAwMTQsIDB4OTc4MjAwMTYsIDB4OTc0MzAxMGMsIDB4OGY0NDAxMDQsIDB4MzA0MmJmZmYsCi0JMHgwMDAzMWMwMCwgMHgzMDg0ZmZmZiwgMHgwMDY0MTgyNSwgMHhhNzQyMDFhNiwgMHhhZjQzMDFhYywgMHgzYzAyMTAwMCwKLQkweGFmNDIwMWI4LCAweDE1NjAwMDQxLCAweDAwMDAxMDIxLCAweDI3NDQwMTgwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjIwMDAsIDB4MjQwMzAwMDIsIDB4YTQ4MjAwMDgsIDB4YTA4MzAwMGIsCi0JMHhhNDgwMDAxMCwgMHgzYzAyMTAwMCwgMHhhZjQyMDFiOCwgMHgwYTAwMGYxOSwgMHgwMDAwMTAyMSwgMHgzYzAzMDgwMCwKLQkweDhjNjIwMDI0LCAweDMwNDIwMDAxLCAweDEwNDAwMDJlLCAweDAwMDAxMDIxLCAweDk3NDIwMTBlLCAweDM0ZTcwMDAyLAotCTB4M2MwMzgwMDAsIDB4MjQ0MjAwMDQsIDB4MzA0NWZmZmYsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMywgMHhhMzQyMDE4YiwgMHg5NzgzMDAwYSwgMHg4Zjg0MDAwNCwgMHg4Zjg2MDAxNCwgMHgyNDAyMDAwMiwKLQkweGFmNDAwMTgwLCAweGE3NDIwMThjLCAweGE3NDUwMThlLCAweGE3NDcwMTg4LCAweDMwYzI4MDAwLCAweGE3NDMwMTkwLAotCTB4MTA0MDAwMGMsIDB4YWY0NDAxYTgsIDB4OTM0MjAxMTYsIDB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsIDB4MjQ0MjQwMDQsCi0JMHg4YzQzMDAwMCwgMHgzMDYzZmZmZiwgMHgxNDYwMDAwNCwgMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwgMHgwMGMyMTAyNCwKLQkweGFmODIwMDE0LCAweDk3ODIwMDE2LCAweDk3NDMwMTBjLCAweDhmNDQwMTA0LCAweDMwNDJiZmZmLCAweDAwMDMxYzAwLAotCTB4MzA4NGZmZmYsIDB4MDA2NDE4MjUsIDB4YTc0MjAxYTYsIDB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsCi0JMHgwMDAwMTAyMSwgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHg4ZjRiMDA3MCwKLQkweDkzNDIwMTEyLCAweDhmODQwMDA4LCAweDAwMDIyODgyLCAweDMwODIwMTAwLCAweDE0NDAwMDAzLCAweDI0YTMwMDAzLAotCTB4MDNlMDAwMDgsIDB4MDAwMDEwMjEsIDB4MzA4MjQwMDAsIDB4MTA0MDAwMTAsIDB4Mjc0MjQwMDAsIDB4MDAwMzE4ODAsCi0JMHgwMDQzMTAyMSwgMHg4YzQ3MDAwMCwgMHgyNGEzMDAwNCwgMHgwMDAzMTg4MCwgMHgyNzQyNDAwMCwgMHgwMDQzMTAyMSwKLQkweDhjNDkwMDAwLCAweDkzNDMwMTE2LCAweDI3NDI0MDAwLCAweDMwNjMwMGZjLCAweDAwNDMxMDIxLCAweDhjNGEwMDAwLAotCTB4MGEwMDBmNDUsIDB4M2MwMzA4MDAsIDB4MzA4MjIwMDAsIDB4MTA0MGZmZWEsIDB4MDAwMzE4ODAsIDB4Mjc0MjQwMDAsCi0JMHgwMDQzMTAyMSwgMHg4YzQ3MDAwMCwgMHgyNGEzMDAwNCwgMHgwMDAzMTg4MCwgMHgyNzQyNDAwMCwgMHgwMDQzMTAyMSwKLQkweDhjNDkwMDAwLCAweDAwMDA1MDIxLCAweDNjMDMwODAwLCAweDI0NjgwMTAwLCAweDAwMDcxNjAyLCAweDAwMDIxMDgwLAotCTB4MDA0ODEwMjEsIDB4OGM0NjAwMDAsIDB4MDAwNzFiODIsIDB4MzA2MzAzZmMsIDB4MDEwMzE4MjEsIDB4OGM2NDA0MDAsCi0JMHgwMDA3MTE4MiwgMHgzMDQyMDNmYywgMHgwMTAyMTAyMSwgMHg4YzQ1MDgwMCwgMHgzMGUzMDBmZiwgMHgwMDAzMTg4MCwKLQkweDAxMDMxODIxLCAweDAwMDkxNjAyLCAweDAwMDIxMDgwLCAweDAxMDIxMDIxLCAweDAwYzQzMDI2LCAweDhjNjQwYzAwLAotCTB4OGM0MzEwMDAsIDB4MDBjNTMwMjYsIDB4MDAwOTEzODIsIDB4MzA0MjAzZmMsIDB4MDEwMjEwMjEsIDB4OGM0NTE0MDAsCi0JMHgzMTIyMDBmZiwgMHgwMDAyMTA4MCwgMHgwMTAyMTAyMSwgMHgwMGM0MzAyNiwgMHgwMGMzMzAyNiwgMHgwMDA5MTk4MiwKLQkweDMwNjMwM2ZjLCAweDAxMDMxODIxLCAweDhjNjQxODAwLCAweDhjNDMxYzAwLCAweDAwYzUzMDI2LCAweDAwYzQzMDI2LAotCTB4MTE0MDAwMTUsIDB4MDBjMzMwMjYsIDB4MDAwYTE2MDIsIDB4MDAwMjEwODAsIDB4MDEwMjEwMjEsIDB4OGM0MzIwMDAsCi0JMHgwMDBhMTM4MiwgMHgzMDQyMDNmYywgMHgwMTAyMTAyMSwgMHg4YzQ1MjQwMCwgMHgzMTQyMDBmZiwgMHgwMDAyMTA4MCwKLQkweDAxMDIxMDIxLCAweDAwYzMzMDI2LCAweDAwMGExOTgyLCAweDMwNjMwM2ZjLCAweDAxMDMxODIxLCAweDhjNjQyODAwLAotCTB4OGM0MzJjMDAsIDB4MDBjNTMwMjYsIDB4MDBjNDMwMjYsIDB4MDBjMzMwMjYsIDB4OGY0MzAwNzAsIDB4M2MwNTA4MDAsCi0JMHg4Y2E0MzEwMCwgMHgyYzgyMDAyMCwgMHgxMDQwMDAwOCwgMHgwMDZiNTgyMywgMHgzYzAyMDgwMCwgMHgyNDQyMzEwNCwKLQkweDAwMDQxODgwLCAweDAwNjIxODIxLCAweDI0ODIwMDAxLCAweGFjNmIwMDAwLCAweGFjYTIzMTAwLCAweGFmODYwMDA0LAotCTB4MDNlMDAwMDgsIDB4MjQwMjAwMDEsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTAsIDB4OGY0NjAxMjgsIDB4OGY4NDAwMTAsCi0JMHhhZjQ2MDAyMCwgMHg4ZjQ1MDEwNCwgMHg4ZjQyMDEwMCwgMHgyNDAzMDgwMCwgMHhhZjg1MDAwOCwgMHhhZjgyMDAxNCwKLQkweGFmNDMwMWI4LCAweDEwODAwMDBhLCAweDNjMDIwODAwLCAweDhjNDMwMDM0LCAweDEwNjAwMDA3LCAweDMwYTIyMDAwLAotCTB4MTA0MDAwMDUsIDB4MzRhMzAxMDAsIDB4OGY4MjAwMGMsIDB4YWY4MzAwMDgsIDB4MjQ0MjAwMDEsIDB4YWY4MjAwMGMsCi0JMHgzYzAyMDgwMCwgMHg4YzQzMDBjMCwgMHgxMDYwMDAwNiwgMHgzYzAzMDgwMCwgMHg4YzYyMDBjNCwgMHgyNDA0MDAwMSwKLQkweDI0NDIwMDAxLCAweDBhMDAwZmQ1LCAweGFjNjIwMGM0LCAweDhmODIwMDA4LCAweDNjMDMwMDEwLCAweDAwNDMxMDI0LAotCTB4MTQ0MDAwMDksIDB4M2MwMjAwMWYsIDB4M2MwMzA4MDAsIDB4OGM2MjAwMjAsIDB4MDAwMDIwMjEsIDB4MjQ0MjAwMDEsCi0JMHgwZTAwMGM3OCwgMHhhYzYyMDAyMCwgMHgwYTAwMGZkNSwgMHgwMDQwMjAyMSwgMHgzNDQyZmYwMCwgMHgxNGMyMDAwOSwKLQkweDI0MDNiZmZmLCAweDNjMDMwODAwLCAweDhjNjIwMDIwLCAweDI0MDQwMDAxLCAweDI0NDIwMDAxLCAweDBlMDAwYzc4LAotCTB4YWM2MjAwMjAsIDB4MGEwMDBmZDUsIDB4MDA0MDIwMjEsIDB4OGY4MjAwMTQsIDB4MDA0MzEwMjQsIDB4MTQ0MDAwMDYsCi0JMHgwMDAwMDAwMCwgMHhhZjQwMDA0OCwgMHgwZTAwMTFhOSwgMHhhZjQwMDA0MCwgMHgwYTAwMGZkNSwgMHgwMDQwMjAyMSwKLQkweDBlMDAxNTYzLCAweDAwMDAwMDAwLCAweDAwNDAyMDIxLCAweDEwODAwMDA1LCAweDNjMDI0MDAwLCAweDhmNDMwMTI0LAotCTB4M2MwMjYwMjAsIDB4YWM0MzAwMTQsIDB4M2MwMjQwMDAsIDB4YWY0MjAxMzgsIDB4MDAwMDAwMDAsIDB4OGZiZjAwMTAsCi0JMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgyN2JkZmZlMCwgMHhhZmJmMDAxOCwgMHhhZmIxMDAxNCwgMHhhZmIwMDAxMCwKLQkweDhmNDIwMTQwLCAweGFmNDIwMDIwLCAweDhmNDMwMTQ4LCAweDNjMDI3MDAwLCAweDAwNjIxODI0LCAweDNjMDIzMDAwLAotCTB4MTA2MjAwMjEsIDB4MDA0MzEwMmIsIDB4MTQ0MDAwMDYsIDB4M2MwMjQwMDAsIDB4M2MwMjIwMDAsIDB4MTA2MjAwMDksCi0JMHgzYzAyNDAwMCwgMHgwYTAwMTA0MCwgMHgwMDAwMDAwMCwgMHgxMDYyMDA0NSwgMHgzYzAyNTAwMCwgMHgxMDYyMDA0NywKLQkweDNjMDI0MDAwLCAweDBhMDAxMDQwLCAweDAwMDAwMDAwLCAweDI3NDQwMTgwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxNDgsIDB4MjQwMzAwMDIsIDB4YTA4MzAwMGIsCi0JMHgwMDAyMTQwMiwgMHhhNDgyMDAwOCwgMHg4ZjQzMDE0OCwgMHhhNDgzMDAxMCwgMHg4ZjQyMDE0NCwgMHgzYzAzMTAwMCwKLQkweGFjODIwMDI0LCAweGFmNDMwMWI4LCAweDBhMDAxMDQwLCAweDNjMDI0MDAwLCAweDhmNDIwMTQ4LCAweDI0MDMwMDAyLAotCTB4MzA0NGZmZmYsIDB4MDAwMjE0MDIsIDB4MzA1MDAwZmYsIDB4MTIwMzAwMGMsIDB4Mjc1MTAxODAsIDB4MmEwMjAwMDMsCi0JMHgxMDQwMDAwNSwgMHgyNDAyMDAwMywgMHgwNjAwMDAxZCwgMHgzNjA1MzAwMCwgMHgwYTAwMTAyNywgMHgzYzAzODAwMCwKLQkweDEyMDIwMDA3LCAweDAwMDAwMDAwLCAweDBhMDAxMDM0LCAweDAwMDAwMDAwLCAweDBlMDAxMTJjLCAweDAwMDAwMDAwLAotCTB4MGEwMDEwMjUsIDB4MDA0MDIwMjEsIDB4MGUwMDExM2UsIDB4MDAwMDAwMDAsIDB4MDA0MDIwMjEsIDB4MzYwNTMwMDAsCi0JMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHhhNjI1MDAwOCwKLQkweGEyMjIwMDBiLCAweGE2MjQwMDEwLCAweDhmNDIwMTQ0LCAweDNjMDMxMDAwLCAweGFlMjIwMDI0LCAweGFmNDMwMWI4LAotCTB4MGEwMDEwNDAsIDB4M2MwMjQwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAyYmYsIDB4MGEwMDEwNDAsCi0JMHgzYzAyNDAwMCwgMHgwZTAwMTQ0MSwgMHgwMDAwMDAwMCwgMHgwYTAwMTA0MCwgMHgzYzAyNDAwMCwgMHgwZTAwMTVlYSwKLQkweDAwMDAwMDAwLCAweDNjMDI0MDAwLCAweGFmNDIwMTc4LCAweDAwMDAwMDAwLCAweDhmYmYwMDE4LCAweDhmYjEwMDE0LAotCTB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjQwMjA4MDAsIDB4MDNlMDAwMDgsIDB4YWY0MjAxYjgsCi0JMHgyN2JkZmZlOCwgMHgzYzA0NjAwYywgMHhhZmJmMDAxNCwgMHhhZmIwMDAxMCwgMHg4YzgyNTAwMCwgMHgzYzFhODAwMCwKLQkweDI0MDNmZjdmLCAweDNjMTA2MDAwLCAweDAwNDMxMDI0LCAweDM0NDIzODBjLCAweDI0MDMwMDAzLCAweGFjODI1MDAwLAotCTB4M2MwMjAwMDgsIDB4YWY0MzAwMDgsIDB4OGUwNDA4MDgsIDB4MDM0MmQ4MjUsIDB4OGUwMjA4MDgsIDB4M2MwMzA4MDAsCi0JMHhhYzYwMDAyMCwgMHgzMDg0ZmZmMCwgMHgyYzg0MDAwMSwgMHgzMDQyZmZmMCwgMHgzODQyMDAxMCwgMHgyYzQyMDAwMSwKLQkweGFmODQwMDEwLCAweGFmODIwMDAwLCAweDBlMDAxNjBjLCAweDAwMDAwMDAwLCAweDBlMDAxNTYxLCAweDAwMDAwMDAwLAotCTB4M2MwMjA0MDAsIDB4MzQ0MjAwMGMsIDB4M2MwM2ZmZmYsIDB4MzQ2MzA4MDYsIDB4YWUwMjE5NDgsIDB4YWUwMzE5NGMsCi0JMHg4ZTAyMTk4MCwgMHgzNDQyMDIwMCwgMHhhZTAyMTk4MCwgMHg4ZjUwMDAwMCwgMHgzMjAyMDAwMywgMHgxMDQwZmZmZCwKLQkweDMyMDIwMDAxLCAweDEwNDAwMDA0LCAweDMyMDIwMDAyLCAweDBlMDAwZjkyLCAweDAwMDAwMDAwLCAweDMyMDIwMDAyLAotCTB4MTA0MGZmZjYsIDB4MDAwMDAwMDAsIDB4MGUwMDBmZTAsIDB4MDAwMDAwMDAsIDB4MGEwMDEwNzEsIDB4MDAwMDAwMDAsCi0JMHgyN2JkZmZlOCwgMHgzYzA0NjAwYywgMHhhZmJmMDAxNCwgMHhhZmIwMDAxMCwgMHg4YzgyNTAwMCwgMHgzYzFhODAwMCwKLQkweDI0MDNmZjdmLCAweDNjMTA2MDAwLCAweDAwNDMxMDI0LCAweDM0NDIzODBjLCAweDI0MDMwMDAzLCAweGFjODI1MDAwLAotCTB4M2MwMjAwMDgsIDB4YWY0MzAwMDgsIDB4OGUwNDA4MDgsIDB4MDM0MmQ4MjUsIDB4OGUwMjA4MDgsIDB4M2MwMzA4MDAsCi0JMHhhYzYwMDAyMCwgMHgzMDg0ZmZmMCwgMHgyYzg0MDAwMSwgMHgzMDQyZmZmMCwgMHgzODQyMDAxMCwgMHgyYzQyMDAwMSwKLQkweGFmODQwMDEwLCAweGFmODIwMDAwLCAweDBlMDAxNjBjLCAweDAwMDAwMDAwLCAweDBlMDAxNTYxLCAweDAwMDAwMDAwLAotCTB4M2MwMjA0MDAsIDB4MzQ0MjAwMGMsIDB4M2MwM2ZmZmYsIDB4MzQ2MzA4MDYsIDB4YWUwMjE5NDgsIDB4YWUwMzE5NGMsCi0JMHg4ZTAyMTk4MCwgMHg4ZmJmMDAxNCwgMHgzNDQyMDIwMCwgMHhhZTAyMTk4MCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwKLQkweDI3YmQwMDE4LCAweDAwODA0ODIxLCAweDMwYTVmZmZmLCAweDMwYzZmZmZmLCAweDMwZTdmZmZmLCAweDNjMDM4MDAwLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsIDB4OTc4MzAwMGEsCi0JMHg4Zjg0MDAwNCwgMHg4Zjg4MDAxNCwgMHhhZjQ5MDE4MCwgMHhhNzQ1MDE4YywgMHhhNzQ2MDE4ZSwgMHhhNzQ3MDE4OCwKLQkweDMxMDI4MDAwLCAweGE3NDMwMTkwLCAweDEwNDAwMDBjLCAweGFmNDQwMWE4LCAweDkzNDIwMTE2LCAweDMwNDIwMGZjLAotCTB4MDA1YTEwMjEsIDB4MjQ0MjQwMDQsIDB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsIDB4MTQ2MDAwMDQsIDB4M2MwMmZmZmYsCi0JMHgzNDQyN2ZmZiwgMHgwMTAyMTAyNCwgMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwgMHg5NzQzMDEwYywgMHg4ZjQ0MDEwNCwKLQkweDMwNDJiZmZmLCAweDAwMDMxYzAwLCAweDMwODRmZmZmLCAweDAwNjQxODI1LCAweGE3NDIwMWE2LCAweGFmNDMwMWFjLAotCTB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4Mjc0NDAxODAsIDB4M2MwMzgwMDAsCi0JMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMjAwMCwgMHgyNDAzMDAwMiwgMHhhNDgyMDAwOCwKLQkweGEwODMwMDBiLCAweGE0ODAwMDEwLCAweDNjMDIxMDAwLCAweGFmNDIwMWI4LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4Mjc0NDAxODAsIDB4M2MwMzgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsCi0JMHg4ZjQyMDE0OCwgMHgyNDAzMDAwMiwgMHhhMDgzMDAwYiwgMHgwMDAyMTQwMiwgMHhhNDgyMDAwOCwgMHg4ZjQzMDE0OCwKLQkweGE0ODMwMDEwLCAweDhmNDIwMTQ0LCAweDNjMDMxMDAwLCAweGFjODIwMDI0LCAweDAzZTAwMDA4LCAweGFmNDMwMWI4LAotCTB4MjdiZGZmZTAsIDB4YWZiZjAwMTgsIDB4YWZiMTAwMTQsIDB4YWZiMDAwMTAsIDB4OGY0MjAxNDgsIDB4MjQwMzAwMDIsCi0JMHgzMDQ0ZmZmZiwgMHgwMDAyMTQwMiwgMHgzMDUwMDBmZiwgMHgxMjAzMDAwYywgMHgyNzUxMDE4MCwgMHgyYTAyMDAwMywKLQkweDEwNDAwMDA1LCAweDI0MDIwMDAzLCAweDA2MDAwMDFkLCAweDM2MDUzMDAwLCAweDBhMDAxMTE3LCAweDNjMDM4MDAwLAotCTB4MTIwMjAwMDcsIDB4MDAwMDAwMDAsIDB4MGEwMDExMjQsIDB4MDAwMDAwMDAsIDB4MGUwMDExMmMsIDB4MDAwMDAwMDAsCi0JMHgwYTAwMTExNSwgMHgwMDQwMjAyMSwgMHgwZTAwMTEzZSwgMHgwMDAwMDAwMCwgMHgwMDQwMjAyMSwgMHgzNjA1MzAwMCwKLQkweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweGE2MjUwMDA4LAotCTB4YTIyMjAwMGIsIDB4YTYyNDAwMTAsIDB4OGY0MjAxNDQsIDB4M2MwMzEwMDAsIDB4YWUyMjAwMjQsIDB4YWY0MzAxYjgsCi0JMHgwYTAwMTEyOCwgMHg4ZmJmMDAxOCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDJiZiwgMHg4ZmJmMDAxOCwKLQkweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDIwLCAweDMwODRmZmZmLCAweDJjODIxMzg5LAotCTB4MTA0MDAwMGQsIDB4MDAwMDEwMjEsIDB4M2MwMzA4MDAsIDB4MjQ2MzU5MDAsIDB4MDAwNDI5NDIsIDB4MDAwNTI4ODAsCi0JMHgwMGEzMjgyMSwgMHgzMDg2MDAxZiwgMHg4Y2E0MDAwMCwgMHgyNDAzMDAwMSwgMHgwMGMzMTgwNCwgMHgwMDgzMjAyNSwKLQkweDAzZTAwMDA4LCAweGFjYTQwMDAwLCAweDAzZTAwMDA4LCAweDI0MDIwMDkxLCAweDMwODRmZmZmLCAweDJjODIxMzg5LAotCTB4MTA0MDAwMGUsIDB4MDAwMDEwMjEsIDB4M2MwMzA4MDAsIDB4MjQ2MzU5MDAsIDB4MDAwNDI5NDIsIDB4MDAwNTI4ODAsCi0JMHgwMGEzMjgyMSwgMHgzMDg2MDAxZiwgMHgyNDAzMDAwMSwgMHg4Y2E0MDAwMCwgMHgwMGMzMTgwNCwgMHgwMDAzMTgyNywKLQkweDAwODMyMDI0LCAweDAzZTAwMDA4LCAweGFjYTQwMDAwLCAweDAzZTAwMDA4LCAweDI0MDIwMDkxLCAweDk0ODIwMDBjLAotCTB4MjQ4NzAwMTQsIDB4MDAwMjEzMDIsIDB4MDAwMjEwODAsIDB4MDA4MjQwMjEsIDB4MDBlODE4MmIsIDB4MTA2MDAwNGYsCi0JMHgwMDAwMDAwMCwgMHg5MGUzMDAwMCwgMHgyYzYyMDAwOSwgMHgxMDQwMDA0NywgMHgzYzAyMDgwMCwgMHgyNDQyNTg5MCwKLQkweDAwMDMxODgwLCAweDAwNjIxODIxLCAweDhjNjQwMDAwLCAweDAwODAwMDA4LCAweDAwMDAwMDAwLCAweDBhMDAxMWE0LAotCTB4MjRlNzAwMDEsIDB4OTBlMzAwMDEsIDB4MjQwMjAwMGEsIDB4NTQ2MjAwMjQsIDB4MDEwMDM4MjEsIDB4MDEwNzEwMjMsCi0JMHgyYzQyMDAwYSwgMHg1NDQwMDAyMCwgMHgwMTAwMzgyMSwgMHgzYzA1MDgwMCwgMHg4Y2EyNmM5OCwgMHgyNGU3MDAwMiwKLQkweDM0NDIwMTAwLCAweGFjYTI2Yzk4LCAweDkwZTMwMDAwLCAweDkwZTIwMDAxLCAweDkwZTQwMDAyLCAweDkwZTYwMDAzLAotCTB4MjRlNzAwMDQsIDB4MjRhNTZjOTgsIDB4MDAwMzFlMDAsIDB4MDAwMjE0MDAsIDB4MDA2MjE4MjUsIDB4MDAwNDIyMDAsCi0JMHgwMDY0MTgyNSwgMHgwMDY2MTgyNSwgMHhhY2EzMDAwNCwgMHg5MGUyMDAwMCwgMHg5MGUzMDAwMSwgMHg5MGU0MDAwMiwKLQkweDkwZTYwMDAzLCAweDI0ZTcwMDA0LCAweDAwMDIxNjAwLCAweDAwMDMxYzAwLCAweDAwNDMxMDI1LCAweDAwMDQyMjAwLAotCTB4MDA0NDEwMjUsIDB4MDA0NjEwMjUsIDB4MGEwMDExYTQsIDB4YWNhMjAwMDgsIDB4OTBlMzAwMDEsIDB4MjQwMjAwMDQsCi0JMHgxMDYyMDAwZSwgMHgwMDYwMTAyMSwgMHgwYTAwMTE5ZSwgMHgwMTAwMTAyMSwgMHg5MGUzMDAwMSwgMHgyNDAyMDAwMywKLQkweDEwNjIwMDA4LCAweDAwNjAxMDIxLCAweDBhMDAxMTllLCAweDAxMDAxMDIxLCAweDkwZTMwMDAxLCAweDI0MDIwMDAyLAotCTB4MTQ2MjAwMDMsIDB4MDEwMDEwMjEsIDB4MDA2MDEwMjEsIDB4MDBlMjEwMjEsIDB4MGEwMDExYTQsIDB4MDA0MDM4MjEsCi0JMHg5MGUyMDAwMSwgMHgwYTAwMTFhNCwgMHgwMGUyMzgyMSwgMHgwMTAwMzgyMSwgMHgwMGU4MTAyYiwgMHg1NDQwZmZiNCwKLQkweDkwZTMwMDAwLCAweDAzZTAwMDA4LCAweDI0MDIwMDAxLCAweDI3YmRmZjkwLCAweDNjMDMwODAwLCAweGFmYmYwMDZjLAotCTB4YWZiZTAwNjgsIDB4YWZiNzAwNjQsIDB4YWZiNjAwNjAsIDB4YWZiNTAwNWMsIDB4YWZiNDAwNTgsIDB4YWZiMzAwNTQsCi0JMHhhZmIyMDA1MCwgMHhhZmIxMDA0YywgMHhhZmIwMDA0OCwgMHhhYzYwNmM5OCwgMHg5MzYyMDAyMywgMHgzMDQyMDAxMCwKLQkweDE0NDAwMjdjLCAweDI0MDIwMDAxLCAweDkzNDIwMTE2LCAweDkzNjMwMDA1LCAweDM0NDI0MDAwLCAweDMwNjMwMDAxLAotCTB4MTQ2MDAwMDUsIDB4MDM0MmIwMjEsIDB4MGUwMDE1ZTAsIDB4MDAwMDAwMDAsIDB4MGEwMDE0MzYsIDB4OGZiZjAwNmMsCi0JMHg5MzQyMDExMiwgMHg4ZjQzMDEwNCwgMHgzYzA0MDAyMCwgMHgzNDQyNDAwMCwgMHgwMDY0MTgyNCwgMHgxMDYwMDAxMiwKLQkweDAzNDIyODIxLCAweDI3NDUwMTgwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OGY0MjAxMjgsIDB4YWNhMjAwMDAsIDB4OGY2NDAwNDAsIDB4MjQwMzAwMDgsIDB4MjQwMjQwYzEsCi0JMHhhNGEyMDAwOCwgMHgyNDAyMDAwMiwgMHhhMGEyMDAwYiwgMHgzYzAyMTAwMCwgMHgwYTAwMTFmMSwgMHhhMGEzMDAwYSwKLQkweDhmNDIwMTA0LCAweDNjMDMwMDQwLCAweDAwNDMxMDI0LCAweDEwNDAwMDFkLCAweDNjMDM4MDAwLCAweDI3NDUwMTgwLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxMjgsIDB4YWNhMjAwMDAsCi0JMHg4ZjY0MDA0MCwgMHgyNDAzMDAxMCwgMHgyNDAyNDBjMSwgMHhhNGEyMDAwOCwgMHgyNDAyMDAwMiwgMHhhMGEzMDAwYSwKLQkweDI0MDMwMDA4LCAweGEwYTIwMDBiLCAweDNjMDIxMDAwLCAweGE0YTMwMDEwLCAweGEwYTAwMDEyLCAweGEwYTAwMDEzLAotCTB4YWNhMDAwMTQsIDB4YWNhMDAwMjQsIDB4YWNhMDAwMjgsIDB4YWNhMDAwMmMsIDB4YWNhNDAwMTgsIDB4MGUwMDE1ZTAsCi0JMHhhZjQyMDFiOCwgMHgwYTAwMTQzNiwgMHg4ZmJmMDA2YywgMHg4ZjgyMDAwMCwgMHgxMDQwMDAxNiwgMHgwMDAwMDAwMCwKLQkweDhmNDIwMTA0LCAweDNjMDMwMDAxLCAweDAwNDMxMDI0LCAweDEwNDAwMDExLCAweDAwMDAwMDAwLCAweDhjYTMwMDBjLAotCTB4OGY2MjAwMzAsIDB4MTQ2MjAyMmQsIDB4MjQwMjAwMDEsIDB4OGNhMzAwMTAsIDB4OGY2MjAwMmMsIDB4MTQ2MjAyMjksCi0JMHgyNDAyMDAwMSwgMHg5NzYzMDAzYSwgMHg5NmMyMDAwMCwgMHgxNDQzMDIyNSwgMHgyNDAyMDAwMSwgMHg5NzYzMDAzOCwKLQkweDk2YzIwMDAyLCAweDE0NDMwMjIxLCAweDI0MDIwMDAxLCAweGFmNDAwMDQ4LCAweGFmNDAwMDU0LCAweGFmNDAwMDQwLAotCTB4OGY3NDAwNDAsIDB4OGY2NTAwNDgsIDB4MDBiNDMwMjMsIDB4MDRjMTAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsCi0JMHgwMDAwMDAwMCwgMHgyNDAwMDFhZiwgMHg5NzQyMDExYSwgMHgzMDUyZmZmZiwgMHgxMjQwMDAwNCwgMHg4ZWQzMDAwNCwKLQkweDAyNzIxMDIxLCAweDBhMDAxMjI4LCAweDI0NTFmZmZmLCAweDAyNjA4ODIxLCAweDkyZDcwMDBkLCAweGE3YTAwMDIwLAotCTB4YTNhMDAwMWEsIDB4YWZhMDAwMjgsIDB4OTM2MjAwM2YsIDB4MzJlMzAwMDQsIDB4MTA2MDAwM2EsIDB4MzA1MDAwZmYsCi0JMHgyNDA0MDAxMiwgMHgxNjA0MDAwNiwgMHgyNDAyMDAwMSwgMHgzYzA0MDgwMCwgMHg4YzgzMDAyOCwgMHgyNDYzMDAwMSwKLQkweDBhMDAxMzI4LCAweGFjODMwMDI4LCAweDhmNjIwMDQ0LCAweDE2NjIwMDEwLCAweDI3YTYwMDEwLCAweDI3NDUwMTgwLAotCTB4M2MwMzgwMDAsIDB4MjQwMjAwMWEsIDB4YTdhMjAwMjAsIDB4MjQwMjAwMjAsIDB4YWZiNDAwMjgsIDB4YTNiMDAwMjIsCi0JMHhhM2E0MDAyMywgMHhhM2EyMDAxYSwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwKLQkweDBhMDAxMzBkLCAweDAwMDAwMDAwLCAweDhmNjIwMDQ0LCAweDAyNjIxMDIzLCAweDA0NDAwMDFhLCAweDAyNjUxMDIzLAotCTB4MDQ0MTAwZDksIDB4MjQwMjAwMDEsIDB4M2MwMjA4MDAsIDB4OGM0MzAwZDgsIDB4MTA2MDAwMDQsIDB4MjQwMjAwMDEsCi0JMHhhN2EyMDAyMCwgMHgwYTAwMTI1ZSwgMHhhZmI0MDAyOCwgMHgyNDAyMDAxYSwgMHhhN2EyMDAyMCwgMHgyNDAyMDAyMCwKLQkweGFmYjQwMDI4LCAweGEzYjAwMDIyLCAweGEzYTQwMDIzLCAweGEzYTIwMDFhLCAweDI3YTYwMDEwLCAweDI3NDUwMTgwLAotCTB4M2MwMzgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4MGEwMDEzMGQsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMTMyOCwgMHgyNDAyMDAwMSwgMHgwMjkzZjAyMywgMHgxYmMwMDAxNiwgMHgwMjVlMTAyYSwKLQkweDU0NDAwMDA3LCAweDMyZjcwMGZlLCAweDU3ZDIwMDBmLCAweDAyN2U5ODIxLCAweDMyZTIwMDAxLCAweDU0NDAwMDBjLAotCTB4MDI3ZTk4MjEsIDB4MzJmNzAwZmUsIDB4MDI0MGYwMjEsIDB4M2MwNDA4MDAsIDB4OGM4MzAwYzgsIDB4MDAwMDkwMjEsCi0JMHgyNDAyMDAwMSwgMHhhN2EyMDAyMCwgMHhhZmI0MDAyOCwgMHgyNDYzMDAwMSwgMHgwYTAwMTI4MiwgMHhhYzgzMDBjOCwKLQkweDAyNWUxMDIzLCAweDBhMDAxMjgyLCAweDMwNTJmZmZmLCAweDAwMDBmMDIxLCAweDI0YTJmZmZmLCAweDAyMjIxODIzLAotCTB4MTg2MDAwMWYsIDB4MDA3MjEwMmEsIDB4NTQ0MDAwMTksIDB4MDBhMDg4MjEsIDB4OTdhMjAwMjAsIDB4M2MwNDA4MDAsCi0JMHg4YzgzMDBjYywgMHhhZmI0MDAyOCwgMHgzNDQyMDAwMSwgMHgyNDYzMDAwMSwgMHhhN2EyMDAyMCwgMHgwMjc0MTAyNiwKLQkweDJjNDIwMDAxLCAweGFjODMwMGNjLCAweDJjYzMwMDAxLCAweDAwNDMxMDI0LCAweDE0NDAwMDBhLCAweDAyNDAxODIxLAotCTB4MjdhNjAwMTAsIDB4Mjc0NTAxODAsIDB4M2MwMzgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMTMwZCwgMHgwMDAwMDAwMCwgMHgwMGEwODgyMSwgMHgwMjQzMTAyMywgMHgzMDUyZmZmZiwKLQkweDBhMDAxMmFlLCAweDMyZjcwMGY2LCAweDAyNzQxMDIzLCAweDE4NDAwMDA4LCAweDk3YTIwMDIwLCAweDNjMDQwODAwLAotCTB4OGM4MzAwZDQsIDB4YWZiMzAwMjgsIDB4MzQ0MjA0MDAsIDB4MjQ2MzAwMDEsIDB4YTdhMjAwMjAsIDB4YWM4MzAwZDQsCi0JMHgzMmUyMDAwMiwgMHgxMDQwMDAxYywgMHgzMmUyMDAxMCwgMHg4ZjYyMDA0NCwgMHgxNjYyMDAwZCwgMHgyN2E2MDAxMCwKLQkweDk3YTIwMDIwLCAweDI3NDUwMTgwLCAweDNjMDM4MDAwLCAweGFmYjQwMDI4LCAweDM0NDIwMDAxLCAweGE3YTIwMDIwLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4MGEwMDEzMGQsIDB4MDAwMDAwMDAsCi0JMHg5N2EyMDAyMCwgMHgyNzQ1MDE4MCwgMHgzYzAzODAwMCwgMHhhZmI0MDAyOCwgMHgzNDQyMDAwMSwgMHhhN2EyMDAyMCwKLQkweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDBhMDAxMzBkLCAweDAwMDAwMDAwLAotCTB4NTQ0MDAwMDMsIDB4OGVkNTAwMDgsIDB4MGEwMDEzMjgsIDB4MjQwMjAwMDEsIDB4OGY2MzAwNTQsIDB4MjZhMmZmZmYsCi0JMHgwMDQzMTAyMywgMHgxODQwMDAxMSwgMHgyN2E2MDAxMCwgMHg5N2EyMDAyMCwgMHgzYzA0MDgwMCwgMHg4YzgzMDBkMCwKLQkweDI3NDUwMTgwLCAweDNjMDc4MDAwLCAweGFmYjQwMDI4LCAweDM0NDIwMDAxLCAweDI0NjMwMDAxLCAweGE3YTIwMDIwLAotCTB4YWM4MzAwZDAsIDB4OGY0MjAxYjgsIDB4MDA0NzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4MGEwMDEzMGQsCi0JMHgwMDAwMDAwMCwgMHgzMmUyMDAyMCwgMHgxMDQwMDAxMSwgMHgwMDAwMDAwMCwgMHg5NmMyMDAxMiwgMHgwMDUyMTAyYiwKLQkweDEwNDAwMDA4LCAweDk3YTIwMDIwLCAweDk2ZDIwMDEyLCAweDEyNDAwMDAzLCAweDAyNzIxMDIxLCAweDBhMDAxMmYyLAotCTB4MjQ1MWZmZmYsIDB4MDI2MDg4MjEsIDB4OTdhMjAwMjAsIDB4OTNhMzAwMWEsIDB4MzQ0MjAwMDgsIDB4MzQ2MzAwMDQsCi0JMHhhN2EyMDAyMCwgMHhhM2EzMDAxYSwgMHg4ZjQyMDEwNCwgMHgzYzAzMDA4MCwgMHgwMDQzMTAyNCwgMHgxMDQwMDAzNywKLQkweDNhMDMwMDBhLCAweDBlMDAxMTUxLCAweDAyYzAyMDIxLCAweDI0MDMwMDAyLCAweDE0NDMwMDJiLCAweDNjMDMwODAwLAotCTB4MjdhNjAwMTAsIDB4OTdhMjAwMjAsIDB4Mjc0NTAxODAsIDB4M2MwMzgwMDAsIDB4YWZiNDAwMjgsIDB4MzQ0MjAwMDEsCi0JMHhhN2EyMDAyMCwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDEyOCwKLQkweGFjYTIwMDAwLCAweDhjYzMwMDE4LCAweDI0MDI0MGMxLCAweGE0YTIwMDA4LCAweGFjYTMwMDE4LCAweDkwYzQwMDBhLAotCTB4MjQwMjAwMDIsIDB4YTBhMjAwMGIsIDB4YTBhNDAwMGEsIDB4OTRjMjAwMTAsIDB4YTRhMjAwMTAsIDB4OTBjMzAwMTIsCi0JMHhhMGEzMDAxMiwgMHg5MGMyMDAxMywgMHhhMGEyMDAxMywgMHg4Y2MzMDAxNCwgMHhhY2EzMDAxNCwgMHg4Y2MyMDAyNCwKLQkweGFjYTIwMDI0LCAweDhjYzMwMDI4LCAweGFjYTMwMDI4LCAweDhjYzQwMDJjLCAweDI0MDIwMDAxLCAweDNjMDMxMDAwLAotCTB4YWNhNDAwMmMsIDB4YWY0MzAxYjgsIDB4YWY0MDAwNDQsIDB4YWY0MDAwNTAsIDB4MGEwMDE0MzYsIDB4OGZiZjAwNmMsCi0JMHg4YzYyNmM5OCwgMHgzMDQyMDEwMCwgMHgxMDQwMDAwMywgMHgyNDYzNmM5OCwgMHg4YzYyMDAwNCwgMHhhZjYyMDE3YywKLQkweDNhMDMwMDBhLCAweDJjNjMwMDAxLCAweDNhMDIwMDBjLCAweDJjNDIwMDAxLCAweDAwNjIxODI1LCAweDE0NjAwMDAzLAotCTB4MjQwMjAwMGUsIDB4NTYwMjAwMzAsIDB4MDAwMDkwMjEsIDB4NTI0MDAwMDgsIDB4OTZjNDAwMGUsIDB4MTI0MDAwMDQsCi0JMHhhN2IyMDA0MCwgMHgwMjcyMTAyMSwgMHgwYTAwMTM0MywgMHgyNDUxZmZmZiwgMHgwMjYwODgyMSwgMHg5NmM0MDAwZSwKLQkweDkzNjMwMDM1LCAweDhmNjIwMDRjLCAweDAwNjQyMDA0LCAweDAwOTUyMDIxLCAweDAwODIxMDIzLCAweDE4NDAwMDE1LAotCTB4MDAwMDAwMDAsIDB4OGY2MjAwMTgsIDB4MDI2MjEwMjMsIDB4MWM0MDAwMTUsIDB4OTdhMjAwMjAsIDB4OGY2MjAwMTgsCi0JMHgxNjYyMDAxYywgMHgwMDAwMDAwMCwgMHg4ZjYyMDAxYywgMHgwMmEyMTAyMywgMHgxYzQwMDAwZSwgMHg5N2EyMDAyMCwKLQkweDhmNjIwMDFjLCAweDE2YTIwMDE1LCAweDAwMDAwMDAwLCAweDhmNjIwMDU4LCAweDAwODIxMDIzLCAweDE4NDAwMDExLAotCTB4OTdhMjAwMjAsIDB4MGEwMDEzNjQsIDB4YWZiMTAwMjgsIDB4OGY2MjAwNTgsIDB4MDA4MjEwMjMsIDB4MDQ0MTAwMGIsCi0JMHg5N2EyMDAyMCwgMHhhZmIxMDAyOCwgMHhhZmIzMDAzNCwgMHhhZmI1MDAzOCwgMHhhZmE0MDAzYywgMHgzNDQyMDAyMCwKLQkweDBhMDAxMzZkLCAweGE3YTIwMDIwLCAweDAyODA5ODIxLCAweDAyNjA4ODIxLCAweDhmNjQwMDU4LCAweDhmNjIwMDRjLAotCTB4MDJhMjEwMjMsIDB4MTg0MDAwMDksIDB4MDAwMDAwMDAsIDB4OGY2MjAwNTQsIDB4MDJhMjEwMjMsIDB4MWM0MDAwMDUsCi0JMHg5N2EyMDAyMCwgMHhhZmIxMDAyOCwgMHhhZmI1MDAyNCwgMHgwYTAwMTM4NSwgMHgzNDQyMDA0MCwgMHg5NzQyMDExYSwKLQkweDE0NDAwMDBjLCAweDI0MDIwMDE0LCAweDhmNjIwMDU4LCAweDE0ODIwMDA5LCAweDI0MDIwMDE0LCAweDhmNjMwMDRjLAotCTB4OGY2MjAwNTQsIDB4MTA2MjAwMDQsIDB4OTdhMjAwMjAsIDB4YWZiMTAwMjgsIDB4MzQ0MjAwODAsIDB4YTdhMjAwMjAsCi0JMHgyNDAyMDAxNCwgMHgxMjAyMDAwYSwgMHgyYTAyMDAxNSwgMHgxMDQwMDAwNSwgMHgyNDAyMDAwYywgMHgxMjAyMDAwNiwKLQkweDMyZTIwMDAxLCAweDBhMDAxM2M2LCAweDAwMDAwMDAwLCAweDI0MDIwMDE2LCAweDE2MDIwMDM1LCAweDMyZTIwMDAxLAotCTB4OGY2MjAwODQsIDB4MjQ0MjAwMDEsIDB4MTZhMjAwMzEsIDB4MzJlMjAwMDEsIDB4MjQwMjAwMTQsIDB4MTIwMjAwMjEsCi0JMHgyYTAyMDAxNSwgMHgxMDQwMDAwNSwgMHgyNDAyMDAwYywgMHgxMjAyMDAwOCwgMHgzMmUyMDAwMSwgMHgwYTAwMTNjNiwKLQkweDAwMDAwMDAwLCAweDI0MDIwMDE2LCAweDEyMDIwMDBjLCAweDMyZTIwMDAxLCAweDBhMDAxM2M2LCAweDAwMDAwMDAwLAotCTB4OTdhMzAwMjAsIDB4MjQwMjAwMGUsIDB4YWZiMTAwMjgsIDB4YTNiMDAwMjIsIDB4YTNhMjAwMjMsIDB4YWZiNTAwMjQsCi0JMHgzNDYzMDA1NCwgMHgwYTAwMTNjNSwgMHhhN2EzMDAyMCwgMHg5N2EyMDAyMCwgMHg5M2E0MDAxYSwgMHgyNDAzMDAxMCwKLQkweGFmYjEwMDI4LCAweGEzYjAwMDIyLCAweGEzYTMwMDIzLCAweGFmYjUwMDI0LCAweDM0NDIwMDVkLCAweDM0ODQwMDAyLAotCTB4YTdhMjAwMjAsIDB4MGEwMDEzYzUsIDB4YTNhNDAwMWEsIDB4OTdhMjAwMjAsIDB4MjQwMzAwMTIsIDB4YTNhMzAwMjMsCi0JMHg5M2EzMDAxYSwgMHhhZmIxMDAyOCwgMHhhM2IwMDAyMiwgMHhhZmI1MDAyNCwgMHgzMDQyZmZmZSwgMHgzNDQyMDA1YywKLQkweDM0NjMwMDAyLCAweGE3YTIwMDIwLCAweGEzYTMwMDFhLCAweDMyZTIwMDAxLCAweDEwNDAwMDMwLCAweDI0MDIwMDBjLAotCTB4MTIwMjAwMTMsIDB4MmEwMjAwMGQsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMGEsIDB4MTIwMjAwMDgsIDB4OTdhMjAwMjAsCi0JMHgwYTAwMTNmOCwgMHgzMmUyMDAwOSwgMHgyNDAyMDAwZSwgMHgxMjAyMDAxYiwgMHgzMmUyMDAwOSwgMHgwYTAwMTNmOSwKLQkweDAwMDIxMDJiLCAweDkzYTQwMDFhLCAweDI0MDMwMDA4LCAweGFmYjEwMDI4LCAweGEzYjAwMDIyLCAweGEzYTMwMDIzLAotCTB4MGEwMDEzZjQsIDB4MzQ0MjAwMTMsIDB4OTdhMzAwMjAsIDB4MzA2MjAwMDQsIDB4MTQ0MDAwMDUsIDB4OTNhMjAwMWEsCi0JMHgzNDYzMDAxYiwgMHhhN2EzMDAyMCwgMHgwYTAwMTNlNywgMHgyNDAzMDAxNiwgMHgzNDYzMDAxYiwgMHhhN2EzMDAyMCwKLQkweDI0MDMwMDEwLCAweGFmYjEwMDI4LCAweGEzYjAwMDIyLCAweGEzYTMwMDIzLCAweDM0NDIwMDAyLCAweDBhMDAxM2Y3LAotCTB4YTNhMjAwMWEsIDB4OTdhMjAwMjAsIDB4OTNhNDAwMWEsIDB4MjQwMzAwMTAsIDB4YWZiMTAwMjgsIDB4YTNiMDAwMjIsCi0JMHhhM2EzMDAyMywgMHgzNDQyMDAxYiwgMHgzNDg0MDAwMiwgMHhhN2EyMDAyMCwgMHhhM2E0MDAxYSwgMHgzMmUyMDAwOSwKLQkweDAwMDIxMDJiLCAweDAwMDIxMDIzLCAweDMwNDIwMDA3LCAweDEyNDAwMDE1LCAweDM0NDUwMDAzLCAweDhmODIwMDE4LAotCTB4MjQwMzA4MDAsIDB4Mjc0NDAxODAsIDB4MjQ0MjAwMDEsIDB4YWY4MjAwMTgsIDB4MjQwMjAwMDQsIDB4YWY0MzAxYjgsCi0JMHhhNDg1MDAwOCwgMHhhMDgyMDAwYiwgMHg5MzQzMDEyMCwgMHgwMDAwMzAyMSwgMHgzYzAyMTAwMCwgMHhhNDkyMDAwZSwKLQkweGFjOTUwMDI0LCAweGFjOTMwMDI4LCAweDAwN2UxODIxLCAweGE0ODMwMDBjLCAweGFmNDIwMWI4LCAweDBhMDAxNDEzLAotCTB4OTdhMjAwMjAsIDB4MjQwNjAwMDEsIDB4OTdhMjAwMjAsIDB4MTA0MDAwMjAsIDB4Mjc0NTAxODAsIDB4M2MwMzgwMDAsCi0JMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDEyOCwgMHhhY2EyMDAwMCwKLQkweDhmYTMwMDI4LCAweDI0MDI0MGMxLCAweGE0YTIwMDA4LCAweGFjYTMwMDE4LCAweDkzYTQwMDFhLCAweDI0MDIwMDAyLAotCTB4YTBhMjAwMGIsIDB4YTBhNDAwMGEsIDB4OTdhMjAwMjAsIDB4YTRhMjAwMTAsIDB4OTNhMzAwMjIsIDB4YTBhMzAwMTIsCi0JMHg5M2EyMDAyMywgMHhhMGEyMDAxMywgMHg4ZmEzMDAyNCwgMHhhY2EzMDAxNCwgMHg4ZmEyMDAzNCwgMHhhY2EyMDAyNCwKLQkweDhmYTMwMDM4LCAweGFjYTMwMDI4LCAweDhmYTIwMDNjLCAweDNjMDMxMDAwLCAweGFjYTIwMDJjLCAweGFmNDMwMWI4LAotCTB4MDBjMDEwMjEsIDB4OGZiZjAwNmMsIDB4OGZiZTAwNjgsIDB4OGZiNzAwNjQsIDB4OGZiNjAwNjAsIDB4OGZiNTAwNWMsCi0JMHg4ZmI0MDA1OCwgMHg4ZmIzMDA1NCwgMHg4ZmIyMDA1MCwgMHg4ZmIxMDA0YywgMHg4ZmIwMDA0OCwgMHgwM2UwMDAwOCwKLQkweDI3YmQwMDcwLCAweDhmNDcwMTQwLCAweDhmNDYwMTQ4LCAweDNjMDI4MDAwLCAweDAwYzI0MDI0LCAweDAwMDYyYzAyLAotCTB4MzBhMzAwZmYsIDB4MjQwMjAwMTksIDB4MTA2MjAwZTcsIDB4Mjc0NDAxODAsIDB4Mjg2MjAwMWEsIDB4MTA0MDAwMWYsCi0JMHgyNDAyMDAwOCwgMHgxMDYyMDBiZSwgMHgyODYyMDAwOSwgMHgxMDQwMDAwZCwgMHgyNDAyMDAwMSwgMHgxMDYyMDA0NiwKLQkweDI4NjIwMDAyLCAweDUwNDAwMDA1LCAweDI0MDIwMDA2LCAweDEwNjAwMDJlLCAweDAwYTAxODIxLCAweDBhMDAxNTVlLAotCTB4MDAwMDAwMDAsIDB4MTA2MjAwNWIsIDB4MDBhMDE4MjEsIDB4MGEwMDE1NWUsIDB4MDAwMDAwMDAsIDB4MjQwMjAwMGIsCi0JMHgxMDYyMDA4NCwgMHgyODYyMDAwYywgMHgxMDQwMDAwNSwgMHgyNDAyMDAwOSwgMHgxMDYyMDBiYywgMHgwMDA2MWMwMiwKLQkweDBhMDAxNTVlLCAweDAwMDAwMDAwLCAweDI0MDIwMDBlLCAweDEwNjIwMGI3LCAweDAwMDYxYzAyLCAweDBhMDAxNTVlLAotCTB4MDAwMDAwMDAsIDB4Mjg2MjAwMjEsIDB4MTA0MDAwMDksIDB4Mjg2MjAwMWYsIDB4MTA0MDAwYzEsIDB4MjQwMjAwMWIsCi0JMHgxMDYyMDBiZiwgMHgyNDAyMDAxYywgMHgxMDYyMDA5YSwgMHgwMDA2MWMwMiwgMHgwYTAwMTU1ZSwgMHgwMDAwMDAwMCwKLQkweDI0MDIwMGMyLCAweDEwNjIwMGNhLCAweDI4NjIwMGMzLCAweDEwNDAwMDA1LCAweDI0MDIwMDgwLCAweDEwNjIwMDVhLAotCTB4MDBhMDE4MjEsIDB4MGEwMDE1NWUsIDB4MDAwMDAwMDAsIDB4MjQwMjAwYzksIDB4MTA2MjAwY2QsIDB4MzBjNWZmZmYsCi0JMHgwYTAwMTU1ZSwgMHgwMDAwMDAwMCwgMHgzYzA1ODAwMCwgMHg4ZjQyMDFiOCwgMHgwMDQ1MTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAxLCAweGE0ODMwMDA4LCAweDI0MDMwMDAyLCAweGFjODcwMDAwLCAweGFjODAwMDA0LCAweGEwODIwMDBhLAotCTB4YTA4MzAwMGIsIDB4YTQ4NjAwMTAsIDB4OGY0MzAxNDQsIDB4M2MwMjEwMDAsIDB4YWM4MDAwMjgsIDB4YWM4MzAwMjQsCi0JMHgzYzAzNjAwMCwgMHhhZjQyMDFiOCwgMHgwM2UwMDAwOCwgMHhhYzYwMDgwOCwgMHgxMTAwMDAwOSwgMHgwMGEwMTgyMSwKLQkweDNjMDIwODAwLCAweDI0MDMwMDAyLCAweGEwNDM2Yzg4LCAweDI0NDI2Yzg4LCAweGFjNDcwMDA4LCAweDhmNDMwMTQ0LAotCTB4MDNlMDAwMDgsIDB4YWM0MzAwMDQsIDB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMiwgMHhhYzgwMDAwMCwgMHhhYzg3MDAwNCwgMHhhNDgzMDAwOCwgMHhhMDgyMDAwYSwgMHhhMDgyMDAwYiwKLQkweGE0ODYwMDEwLCAweGFjODAwMDI0LCAweDhmNDIwMTQ0LCAweDNjMDMxMDAwLCAweGFjODIwMDI4LCAweDNjMDI2MDAwLAotCTB4YWY0MzAxYjgsIDB4MDNlMDAwMDgsIDB4YWM0MDA4MDgsIDB4M2MwODA4MDAsIDB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsCi0JMHgwMDQ1MTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHhhYzg3MDAwMCwgMHg5MTAyNmM4OCwgMHgwMDAwMjgyMSwKLQkweDEwNDAwMDAyLCAweDI1MDc2Yzg4LCAweDhjZTUwMDA4LCAweGFjODUwMDA0LCAweGE0ODMwMDA4LCAweDkxMDM2Yzg4LAotCTB4MjQwMjAwMDIsIDB4YTA4MjAwMGIsIDB4YTQ4NjAwMTAsIDB4MzQ2MzAwMDEsIDB4YTA4MzAwMGEsIDB4OGY0MjAxNDQsCi0JMHhhYzgyMDAyNCwgMHg5MTAzNmM4OCwgMHgxMDYwMDAwMiwgMHgwMDAwMTAyMSwgMHg4Y2UyMDAwNCwgMHhhYzgyMDAyOCwKLQkweDNjMDIxMDAwLCAweGFmNDIwMWI4LCAweDNjMDI2MDAwLCAweGExMDA2Yzg4LCAweDAzZTAwMDA4LCAweGFjNDAwODA4LAotCTB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4YTA4MjAwMGIsCi0JMHhhNDgzMDAwOCwgMHhhNDg2MDAxMCwgMHg4ZjQyMDE0NCwgMHgzYzAzMTAwMCwgMHhhNDgyMDAxMiwgMHgwM2UwMDAwOCwKLQkweGFmNDMwMWI4LCAweDMwYzJmZmZmLCAweDE0NDAwMDI4LCAweDAwMDYxYzAyLCAweDkzNjIwMDA1LCAweDMwNDIwMDA0LAotCTB4MTQ0MDAwMjAsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsIDB4MDBlMjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsCi0JMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDAwNSwgMHgzYzAzODAwMCwKLQkweDM0NjMwMDAxLCAweDAwZTMxODI1LCAweDM0NDIwMDA0LCAweGEzNjIwMDA1LCAweGFmNDMwMDIwLCAweDkzNjIwMDA1LAotCTB4MzA0MjAwMDQsIDB4MTQ0MDAwMDMsIDB4M2MwMzgwMDAsIDB4MDAwMDAwMGQsIDB4M2MwMzgwMDAsIDB4OGY0MjAxYjgsCi0JMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwNSwgMHgzYzAzMTAwMCwgMHhhYzg3MDAwMCwgMHhhMDgyMDAwYiwKLQkweGFmNDMwMWI4LCAweDBhMDAxNTBkLCAweDAwMDYxYzAyLCAweDAwMDAwMDBkLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4MDAwNjFjMDIsIDB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDEsCi0JMHhhNDgzMDAwOCwgMHgyNDAzMDAwMiwgMHhhYzg3MDAwMCwgMHhhYzgwMDAwNCwgMHhhMDgyMDAwYSwgMHhhMDgzMDAwYiwKLQkweGE0ODYwMDEwLCAweDhmNDMwMTQ0LCAweDNjMDIxMDAwLCAweGFjODAwMDI4LCAweGFjODMwMDI0LCAweDAzZTAwMDA4LAotCTB4YWY0MjAxYjgsIDB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsCi0JMHhhYzgwMDAwMCwgMHhhYzg3MDAwNCwgMHhhNDgzMDAwOCwgMHhhMDgyMDAwYSwgMHhhMDgyMDAwYiwgMHhhNDg2MDAxMCwKLQkweGFjODAwMDI0LCAweDhmNDIwMTQ0LCAweDNjMDMxMDAwLCAweGFjODIwMDI4LCAweDAzZTAwMDA4LCAweGFmNDMwMWI4LAotCTB4MDAwNjFjMDIsIDB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDEsCi0JMHhhNDgzMDAwOCwgMHgyNDAzMDAwMiwgMHhhMDgyMDAwYSwgMHgzYzAyMTAwMCwgMHhhYzg3MDAwMCwgMHhhYzgwMDAwNCwKLQkweGEwODMwMDBiLCAweGE0ODYwMDEwLCAweGFjODAwMDI0LCAweGFjODAwMDI4LCAweDAzZTAwMDA4LCAweGFmNDIwMWI4LAotCTB4MDBhMDE4MjEsIDB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsCi0JMHhhYzg3MDAwMCwgMHhhYzgwMDAwNCwgMHhhNDgzMDAwOCwgMHhhMDgwMDAwYSwgMHgwYTAwMTUxOCwgMHhhMDgyMDAwYiwKLQkweDhmNDQwMTQ0LCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLAotCTB4MjQwMzQwYzksIDB4YWY0NzAxODAsIDB4YTM0MjAxOGIsIDB4M2MwMjEwMDAsIDB4YTc0MzAxODgsIDB4YWY0NDAxYTQsCi0JMHhhZjQ1MDFhOCwgMHhhZjQwMDFhYywgMHgwM2UwMDAwOCwgMHhhZjQyMDFiOCwgMHgwMDAwMDAwZCwgMHgwM2UwMDAwOCwKLQkweDAwMDAwMDAwLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDhmNDIwMTAwLCAweDMwNDIwMDNlLCAweDE0NDAwMDExLAotCTB4MjQwMjAwMDEsIDB4YWY0MDAwNDgsIDB4OGY0MjAxMDAsIDB4MzA0MjA3YzAsIDB4MTA0MDAwMDUsIDB4MDAwMDAwMDAsCi0JMHhhZjQwMDA0YywgMHhhZjQwMDA1MCwgMHgwM2UwMDAwOCwgMHgyNDAyMDAwMSwgMHhhZjQwMDA1NCwgMHhhZjQwMDA0MCwKLQkweDhmNDIwMTAwLCAweDMwNDIzODAwLCAweDU0NDAwMDAxLCAweGFmNDAwMDQ0LCAweDI0MDIwMDAxLCAweDAzZTAwMDA4LAotCTB4MDAwMDAwMDAsIDB4M2MwMzgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsCi0JMHgyNDAzNDBjOSwgMHhhZjQ0MDE4MCwgMHhhMzQyMDE4YiwgMHgzYzAyMTAwMCwgMHhhNzQzMDE4OCwgMHhhZjQ1MDFhNCwKLQkweGFmNDYwMWE4LCAweGFmNDcwMWFjLCAweDAzZTAwMDA4LCAweGFmNDIwMWI4LCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4MDA4MjIwMjUsIDB4YWY0NDAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHgwMDgyMjAyNSwKLQkweDAzZTAwMDA4LCAweGFmNDQwMDIwLCAweDMwODYwMGZmLCAweDI3NDUwMTgwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxMjgsIDB4YWNhMjAwMDAsIDB4OGY2NDAwNDAsCi0JMHgyNDAzMDAwOCwgMHgyNDAyNDBjMSwgMHhhNGEyMDAwOCwgMHgyNDAyMDAwMiwgMHhhMGEyMDAwYiwgMHgzYzAyMTAwMCwKLQkweGEwYTYwMDBhLCAweGE0YTMwMDEwLCAweGEwYTAwMDEyLCAweGEwYTAwMDEzLCAweGFjYTAwMDE0LCAweGFjYTAwMDI0LAotCTB4YWNhMDAwMjgsIDB4YWNhMDAwMmMsIDB4YWNhNDAwMTgsIDB4MDNlMDAwMDgsIDB4YWY0MjAxYjgsIDB4MjQwMjAwMDEsCi0JMHhhY2M0MDAwMCwgMHgwM2UwMDAwOCwgMHhhNGU1MDAwMCwgMHgyNDAyMDAwMSwgMHhhZjQwMDA0NCwgMHgwM2UwMDAwOCwKLQkweGFmNDAwMDUwLCAweDAwODAzMDIxLCAweDI3NDUwMTgwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxMjgsIDB4YWNhMjAwMDAsIDB4OGNjMzAwMTgsIDB4MjQwMjQwYzEsCi0JMHhhNGEyMDAwOCwgMHhhY2EzMDAxOCwgMHg5MGM0MDAwYSwgMHgyNDAyMDAwMiwgMHhhMGEyMDAwYiwgMHhhMGE0MDAwYSwKLQkweDk0YzIwMDEwLCAweGE0YTIwMDEwLCAweDkwYzMwMDEyLCAweGEwYTMwMDEyLCAweDkwYzIwMDEzLCAweGEwYTIwMDEzLAotCTB4OGNjMzAwMTQsIDB4YWNhMzAwMTQsIDB4OGNjMjAwMjQsIDB4YWNhMjAwMjQsIDB4OGNjMzAwMjgsIDB4YWNhMzAwMjgsCi0JMHg4Y2MyMDAyYywgMHgzYzAzMTAwMCwgMHhhY2EyMDAyYywgMHgyNDAyMDAwMSwgMHhhZjQzMDFiOCwgMHhhZjQwMDA0NCwKLQkweDAzZTAwMDA4LCAweGFmNDAwMDUwLCAweDI3YmRmZmU4LCAweGFmYmYwMDEwLCAweDBlMDAxMDQ3LCAweDAwMDAwMDAwLAotCTB4MDAwMDIwMjEsIDB4MGUwMDBjNzgsIDB4YWY0MDAxODAsIDB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsCi0JMHg4ZjQ2MDE0OCwgMHgyNzQ1MDE4MCwgMHgzYzAzODAwMCwgMHgwMDA2MTQwMiwgMHgzMDQ3MDBmZiwgMHg4ZjQyMDFiOCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDhmNDQwMTQwLCAweDAwMDYxMjAyLCAweDMwNDIwMGZmLAotCTB4MDAwNjFjMDIsIDB4YWNhMjAwMDQsIDB4MjQwMjAwMDIsIDB4YTRhMzAwMDgsIDB4MzBjMzAwZmYsIDB4YTBhMjAwMGIsCi0JMHhhY2EzMDAyNCwgMHgxMGUwMDAwYSwgMHhhY2E0MDAwMCwgMHgyOGUyMDAwNCwgMHgxNDQwMDAwNSwgMHgyNDAyMDAwMSwKLQkweDI0MDIwMDA1LCAweDU0ZTIwMDA1LCAweGEwYTAwMDBhLCAweDI0MDIwMDAxLCAweDBhMDAxNjA5LCAweGEwYTIwMDBhLAotCTB4YTBhMDAwMGEsIDB4M2MwMjEwMDAsIDB4MDNlMDAwMDgsIDB4YWY0MjAxYjgsIDB4MDNlMDAwMDgsIDB4MDAwMDEwMjEsCi0JMHgxMGMwMDAwNywgMHgwMDAwMDAwMCwgMHg4Y2EyMDAwMCwgMHgyNGM2ZmZmZiwgMHgyNGE1MDAwNCwgMHhhYzgyMDAwMCwKLQkweDE0YzBmZmZiLCAweDI0ODQwMDA0LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDBhMDAxNjFmLCAweDAwYTAxMDIxLAotCTB4YWM4NjAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjQ4NDAwMDQsIDB4MDBhMDEwMjEsIDB4MTQ0MGZmZmEsCi0JMHgyNGE1ZmZmZiwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9OyAKK3N0YXRpYyB1OCBibngyX1JYUF9iMDZGd1RleHRbXSA9IHsKKwkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweDA3LCAweDg3LCAweDQxLCAweDQ0LCAweDAwLCAweDAzLCAweDc0LCAweDY1LAorCTB4NzMsIDB4NzQsIDB4MzEsIDB4MmUsIDB4NjIsIDB4NjksIDB4NmUsIDB4MDAsIDB4ZWQsIDB4NWMsIDB4NWQsIDB4NmMsCisJMHgxYywgMHhkNywgMHg3NSwgMHgzZSwgMHhmMywgMHg0MywgMHg3MSwgMHg0OSwgMHg5MSwgMHhkNCwgMHg3MCwgMHhiOSwKKwkweDYyLCAweDU3LCAweDEyLCAweDY1LCAweGVkLCAweDhhLCAweDQzLCAweDcxLCAweDZkLCAweDMxLCAweGNlLCAweDUwLAorCTB4NTgsIDB4ZGIsIDB4ODIsIDB4YjEsIDB4NDgsIDB4YzcsIDB4YjMsIDB4YTQsIDB4YzgsIDB4MjQsIDB4MDIsIDB4NDIsCisJMHgxYiwgMHg0MiwgMHhhYiwgMHhhNCwgMHhhOSwgMHhjMSwgMHg5MCwgMHg3MiwgMHg5MSwgMHgyMiwgMHgyYywgMHhhMCwKKwkweDFhLCAweDc5LCAweGYwLCAweDQzLCAweDEwLCAweDJmLCAweDU2LCAweDNmLCAweGE2LCAweGQxLCAweDhkLCAweDk2LAorCTB4YjYsIDB4MWMsIDB4NTMsIDB4MDgsIDB4ODIsIDB4ODIsIDB4ZTUsIDB4NTIsIDB4NTIsIDB4MGIsIDB4MmMsIDB4YjQsCisJMHg5NiwgMHhlZCwgMHgzNiwgMHg3ZSwgMHhhOCwgMHgyMywgMHg5YSwgMHg5MiwgMHg4ZCwgMHhhNiwgMHg2OCwgMHg4MSwKKwkweDIyLCAweGFkLCAweGQxLCAweGY0LCAweDRkLCAweDk1LCAweDlhLCAweDRhLCAweDc1LCAweDVmLCAweGQ0LCAweGEyLAorCTB4NDgsIDB4ZGEsIDB4NDYsIDB4Y2QsIDB4ZjQsIDB4ZmIsIDB4ZWUsIDB4Y2MsIDB4ODgsIDB4ZDQsIDB4OWEsIDB4YjIsCisJMHgyYywgMHgzYiwgMHgwZCwgMHg2MiwgMHg3NCwgMHgwZSwgMHgzMCwgMHhkOCwgMHhiOSwgMHg3ZiwgMHhlNywgMHhlZiwKKwkweDllLCAweDczLCAweGVlLCAweDM5LCAweDc3LCAweDI4LCAweDdkLCAweGE1LCAweDQzLCAweGRhLCAweDI1LCAweDg0LAorCTB4NGUsIDB4M2MsIDB4OTksIDB4YzMsIDB4Y2YsIDB4M2MsIDB4ZmQsIDB4ZTAsIDB4YzMsIDB4MGYsIDB4ZWUsIDB4YzEsCisJMHhlYiwgMHhiMCwgMHhhMSwgMHg2ZCwgMHhkMCwgMHhhMywgMHhmZSwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwKKwkweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LCAweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LCAweDE4LCAweDYyLAorCTB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsCisJMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwKKwkweDYyLCAweDg4LCAweDIxLCAweDg2LCAweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LCAweDE4LCAweDYyLCAweDg4LAorCTB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4ZmYsIDB4ZWYsIDB4NjAsIDB4ODgsIDB4NTgsCisJMHhmYywgMHhlZCwgMHgwYywgMHgxZiwgMHg0OSwgMHhlOCwgMHg4NSwgMHhjYiwgMHgwNywgMHgzZCwgMHg1YiwgMHgxMiwKKwkweDQ2LCAweDYxLCAweDY5LCAweDY2LCAweGRhLCAweDE2LCAweDcxLCAweGViLCAweGJiLCAweDMzLCAweDQ1LCAweGY5LAorCTB4MWYsIDB4YmYsIDB4OTQsIDB4MzIsIDB4ODUsIDB4ZmQsIDB4ZGIsIDB4MGIsIDB4MzcsIDB4OWYsIDB4N2QsIDB4ZjMsCisJMHg5MSwgMHhlYywgMHg4ZCwgMHgwNSwgMHg0MywgMHgxMiwgMHg1NiwgMHhlMSwgMHhlOCwgMHhiMCwgMHhiNSwgMHg0YiwKKwkweDEyLCAweDdkLCAweDU4LCAweGYzLCAweGRkLCAweGMxLCAweGNmLCAweDU5LCAweGQyLCAweDE1LCAweGUxLCAweGJhLAorCTB4ZWUsIDB4YmYsIDB4MzksIDB4NjgsIDB4YzksIDB4MmIsIDB4OGQsIDB4OTQsIDB4NWMsIDB4NjgsIDB4NmMsIDB4ZGYsCisJMHgyNCwgMHg1ZCwgMHhkOSwgMHg1MiwgMHgwOSwgMHhmZCwgMHg2ZSwgMHg4YSwgMHhlMywgMHg5NiwgMHg5NCwgMHhhYiwKKwkweDJkLCAweGUyLCAweDJhLCAweGJhLCAweDdkLCAweDVhLCAweDcxLCAweGZlLCAweDNlLCAweGNkLCAweDliLCAweDdmLAorCTB4OWUsIDB4ZmYsIDB4MWUsIDB4MjQsIDB4YTUsIDB4Y2IsIDB4N2QsIDB4NjgsIDB4ZjcsIDB4YTEsIDB4Y2QsIDB4ZjcsCisJMHg4MSwgMHhmNCwgMHg5NCwgMHg5OCwgMHg3MiwgMHhhNCwgMHg5MSwgMHg5MCwgMHhhMywgMHhkNSwgMHg4YywgMHhlOCwKKwkweDA1LCAweDcxLCAweGJkLCAweGJjLCAweDlkLCAweDJlLCAweGEzLCAweDZmLCAweGVhLCAweDAwLCAweGRiLCAweDI5LAorCTB4ZTAsIDB4ZjksIDB4MGUsIDB4ZDcsIDB4NTksIDB4NWUsIDB4NWUsIDB4NGEsIDB4YjcsIDB4YzYsIDB4MTQsIDB4MGQsCisJMHg4ZSwgMHhiMSwgMHgwZiwgMHhiZiwgMHg1OCwgMHg1ZiwgMHhhZSwgMHg3NiwgMHgwMCwgMHg2ZiwgMHhkNiwgMHg3MSwKKwkweDQxLCAweGRjLCAweDczLCAweDJjLCAweGQwLCAweGY2LCAweGZkLCAweGRmLCAweDc1LCAweDMyLCAweGIyLCAweGUyLAorCTB4NzQsIDB4ODEsIDB4YTcsIDB4MTYsIDB4NjksIDB4YjUsIDB4YzUsIDB4ZDIsIDB4MGIsIDB4YjYsIDB4YjUsIDB4MjIsCisJMHg2ZCwgMHgxYywgMHhlYiwgMHgzNCwgMHgwYSwgMHhiZSwgMHgzZiwgMHg5ZCwgMHg5NywgMHhhZSwgMHhhMCwgMHg2ZiwKKwkweGI3LCAweGUyLCAweDYzLCAweDcyLCAweDQyLCAweGMzLCAweGJjLCAweDU3LCAweDQ5LCAweDBmLCAweDNhLCAweGUyLAorCTB4M2IsIDB4N2YsIDB4ZjMsIDB4NTIsIDB4YWMsIDB4NmMsIDB4OTcsIDB4YzksIDB4NTQsIDB4ZjYsIDB4YTAsIDB4MWIsCisJMHhkMCwgMHg3NCwgMHgzZCwgMHg2NywgMHgyYiwgMHg3MCwgMHg2YSwgMHhlMCwgMHg0ZiwgMHhkYiwgMHg4MSwgMHhmNSwKKwkweGVlLCAweDBhLCAweDY4LCAweDFhLCAweDg1LCAweGNkLCAweDYyLCAweDZjLCAweDY2LCAweDlmLCAweGU4LCAweDNiLAorCTB4ODcsIDB4OTMsIDB4ZTEsIDB4NzgsIDB4OTcsIDB4MzYsIDB4MzIsIDB4NmYsIDB4ODgsIDB4NmUsIDB4ZmYsIDB4ODEsCisJMHhlNiwgMHhkNSwgMHg3YSwgMHhlNSwgMHhkOCwgMHhiYywgMHg4ZSwgMHg3NywgMHg1ZCwgMHhhZSwgMHhlNiwgMHg0YiwKKwkweDlhLCAweGRiLCAweGE4LCAweDY4LCAweGRlLCAweGQ5LCAweDU5LCAweGFkLCAweDc4LCAweGQ2LCAweDk0LCAweGEzLAorCTB4YjYsIDB4N2YsIDB4ZTEsIDB4YjQsIDB4NzMsIDB4NDIsIDB4MWIsIDB4MzksIDB4N2IsIDB4NDYsIDB4MWIsIDB4M2QsCisJMHhmYiwgMHg4NiwgMHgzNiwgMHhkZSwgMHhkOCwgMHhiMiwgMHg0OSwgMHhkYSwgMHhiMywgMHhkMCwgMHgxZSwgMHg3MSwKKwkweDkwLCAweGJmLCAweDRmLCAweDg3LCAweGJhLCAweGVjLCAweGEyLCAweGRlLCAweDRhLCAweGU0LCAweDdkLCAweDlmLAorCTB4ZjMsIDB4ODYsIDB4ZTYsIDB4NTUsIDB4NmQsIDB4OGIsIDB4ZmIsIDB4ZTYsIDB4YTYsIDB4MjIsIDB4MWEsIDB4ZWQsCisJMHg3MiwgMHg3NCwgMHhkZSwgMHg5NCwgMHg2MywgMHhkNSwgMHg5NCwgMHgzYywgMHg1NywgMHgyZCwgMHgyOSwgMHg1YSwKKwkweDg2LCAweDVkLCAweGQyLCAweGJjLCAweDA2LCAweGM3LCAweDJiLCAweGEwLCAweDc1LCAweDQyLCAweGRiLCAweDA3LAorCTB4OWEsIDB4ZGUsIDB4NTksIDB4MjksIDB4NWQsIDB4NzEsIDB4ZTYsIDB4NDAsIDB4YWYsIDB4MDMsIDB4NzgsIDB4ZmYsCisJMHg1OCwgMHgxYiwgMHg2ZCwgMHhmNCwgMHg2YSwgMHhkZSwgMHhjOSwgMHg5YiwgMHhlMiwgMHgzOSwgMHg1OSwgMHhlYiwKKwkweDRiLCAweDYyLCAweGJhLCAweGIwLCAweDAxLCAweGM4LCAweDBjLCAweGZkLCAweDM4LCAweGQwLCAweDQ5LCAweGNhLAorCTB4ZjcsIDB4ZjUsIDB4ODIsIDB4ZmYsIDB4MmMsIDB4NzQsIDB4NmYsIDB4NWQsIDB4YTEsIDB4ZmMsIDB4OGQsIDB4NWUsCisJMHgyOSwgMHhjZiwgMHg1MywgMHhkNywgMHhhNiwgMHgzNiwgMHg1MiwgMHhmNSwgMHgyZiwgMHg3OCwgMHg4ZSwgMHhmNCwKKwkweDE5LCAweGUyLCAweGZiLCAweDQ3LCAweDlkLCAweDgxLCAweGY0LCAweDIxLCAweDM5LCAweDAzLCAweGRjLCAweDc1LAorCTB4YWQsIDB4ZDgsIDB4YTAsIDB4YWUsIDB4YzEsIDB4ZGYsIDB4MmQsIDB4MzksIDB4MDIsIDB4YmQsIDB4MTUsIDB4OWQsCisJMHg1ZSwgMHg5OSwgMHhiNCwgMHhiMiwgMHgyZSwgMHhmNiwgMHg2OCwgMHg1MywgMHgyMCwgMHg1NywgMHgzMiwgMHhiNCwKKwkweDE3LCAweGQyLCAweGU3LCAweGRlLCAweDY3LCAweGQzLCAweDllLCAweGExLCAweGNiLCAweDUzLCAweDJmLCAweDNkLAorCTB4ZGYsIDB4YjMsIDB4MzgsIDB4YjQsIDB4OTEsIDB4MzIsIDB4NDMsIDB4ZmYsIDB4ZjIsIDB4NDUsIDB4Y2YsIDB4ZjYsCisJMHhiNiwgMHhiNCwgMHg0OCwgMHgyOSwgMHg2ZCwgMHg0OCwgMHgxNiwgMHhmYiwgMHhiNCwgMHg0MywgMHg0ZSwgMHgzYiwKKwkweDIyLCAweDg3LCAweDJhLCAweGQwLCAweDhkLCAweDZkLCAweDVhLCAweDhiLCAweDYyLCAweDY3LCAweGNhLCAweDMyLAorCTB4NTAsIDB4MzIsIDB4NzUsIDB4NzQsIDB4MjYsIDB4NDksIDB4OTcsIDB4M2EsIDB4ZDIsIDB4ZTUsIDB4N2EsIDB4OWUsCisJMHg3YSwgMHhhMiwgMHgzZCwgMHg3ZiwgMHgyOCwgMHg1ZCwgMHg2OSwgMHhhYiwgMHhiYSwgMHg1YSwgMHhkNSwgMHhkMywKKwkweGY4LCAweDJmLCAweDVkLCAweDRmLCAweGQ0LCAweGM5LCAweDcyLCAweDI4LCAweGI3LCAweDAzLCAweGRjLCAweDhmLAorCTB4NDAsIDB4NWYsIDB4ZTIsIDB4ZWEsIDB4YzMsIDB4MGYsIDB4YjEsIDB4NmYsIDB4OTMsIDB4NTEsIDB4YjAsIDB4ZDMsCisJMHgxNywgMHg2MSwgMHgxNCwgMHg3YSwgMHg2MSwgMHgzNywgMHg2NCwgMHgxOSwgMHhhNiwgMHhlZSwgMHhlMCwgMHhjMywKKwkweDFmLCAweDQ5LCAweDVlLCAweGY5LCAweGQ1LCAweDkwLCAweDk3LCAweGZjLCAweGRiLCAweDMyLCAweDU1LCAweDQ5LAorCTB4ODAsIDB4MDYsIDB4NjUsIDB4ZDQsIDB4ZTUsIDB4YmQsIDB4N2MsIDB4NjQsIDB4MWIsIDB4N2IsIDB4MjAsIDB4NWYsCisJMHg1ZSwgMHhhNiwgMHhiZSwgMHg0NSwgMHg3ZiwgMHhhMiwgMHhmZCwgMHhmMywgMHg5ZCwgMHhiMiwgMHhmZSwgMHhjYywKKwkweGJmLCAweGVlLCAweDdjLCAweDkyLCAweGY2LCAweDk2LCAweDdjLCAweDI3LCAweGU0LCAweDc4LCAweDM1LCAweGM5LAorCTB4M2QsIDB4ZDQsIDB4NTYsIDB4NTQsIDB4NmMsIDB4OGEsIDB4NjQsIDB4MTQsIDB4ZGQsIDB4MjgsIDB4NzQsIDB4NDgsCisJMHg1MSwgMHhlZCwgMHhmNywgMHg1ZSwgMHhkMCwgMHg0MywgMHgyYywgMHhhOCwgMHhmMiwgMHhiZCwgMHhhMCwgMHg2NCwKKwkweDliLCAweGI2LCAweGVkLCAweGNjLCAweDExLCAweGM5LCAweGMyLCAweGJlLCAweDQ1LCAweDhlLCAweGNjLCAweDk5LAorCTB4MzIsIDB4NmQsIDB4ZmYsIDB4NjMsIDB4YTcsIDB4YjQsIDB4MmYsIDB4ZGYsIDB4NmYsIDB4YTgsIDB4YjgsIDB4YWUsCisJMHhmNywgMHg2ZSwgMHg5MCwgMHg0ZCwgMHhlMCwgMHg3NywgMHhmOSwgMHg3ZSwgMHg1ZCwgMHhlNCwgMHhhNiwgMHg1OSwKKwkweGM4LCAweDVhLCAweDIzLCAweDA4LCAweGY2LCAweDQ2LCAweDgxLCAweGIxLCAweDRjLCAweDQzLCAweDJjLCAweDkzLAorCTB4NDQsIDB4OGIsIDB4NGQsIDB4N2QsIDB4ZjksIDB4ZmUsIDB4ZjgsIDB4ZjAsIDB4ZGQsIDB4ZjUsIDB4NzUsIDB4NjQsCisJMHg5ZSwgMHhiNCwgMHhhOSwgMHgyZiwgMHhjNiwgMHhhOCwgMHgxMiwgMHhmNCwgMHhjMSwgMHhmOCwgMHg3NCwgMHhiYiwKKwkweGFlLCAweDhhLCAweGExLCAweGFlLCAweDQ2LCAweGZlLCAweGVmLCAweGVkLCAweGMyLCAweGY1LCAweGFhLCAweGEyLAorCTB4NzksIDB4Y2UsIDB4YmIsIDB4YTEsIDB4MmYsIDB4ZDgsIDB4MzIsIDB4MDIsIDB4N2YsIDB4MzcsIDB4ZWMsIDB4NGYsCisJMHhjYiwgMHg5MSwgMHg1NCwgMHg3NiwgMHhjMiwgMHg5NSwgMHhjMCwgMHhlNiwgMHhhZiwgMHhhZCwgMHhiMSwgMHhmOSwKKwkweGQxLCAweGJiLCAweGM4LCAweDc1LCAweDNjLCAweDk0LCAweGNiLCAweDBkLCAweGU1LCAweDFhLCAweDg1LCAweDVjLAorCTB4NjMsIDB4OTAsIDB4NmIsIDB4ZTUsIDB4MjMsIDB4YzgsIDB4YjUsIDB4ZjIsIDB4OTEsIDB4ZTUsIDB4ZDIsIDB4YTQsCisJMHhlYywgMHgzYywgMHgwOCwgMHg1YSwgMHhhNiwgMHhmYywgMHhhYiwgMHgxMywgMHhkOCwgMHhmMiwgMHhiZiwgMHgzOCwKKwkweDlmLCAweDE0LCAweDE5LCAweDdjLCAweDdmLCAweDcwLCAweGQ4LCAweDE2LCAweGVmLCAweDViLCAweGUwLCAweGQ1LAorCTB4NzEsIDB4NDAsIDB4OGIsIDB4ZWYsIDB4ZWYsIDB4OTcsIDB4ZTEsIDB4NmUsIDB4ZmUsIDB4MzgsIDB4OGIsIDB4N2QsCisJMHg1ZCwgMHhjZiwgMHgxZiwgMHgyOSwgMHg4NywgMHgzZSwgMHg3YywgMHhlZiwgMHhmZSwgMHhhOCwgMHg2YiwgMHgxZiwKKwkweDU1LCAweDBlLCAweGM2LCAweDljLCAweDRmLCAweDM1LCAweDlkLCAweGFiLCAweDFmLCAweDU2LCAweDg2LCAweGY1LAorCTB4NjMsIDB4Y2EsIDB4MmYsIDB4NGYsIDB4ODYsIDB4YzcsIDB4NjQsIDB4NzIsIDB4MzMsIDB4ZWQsIDB4YTksIDB4YTQsCisJMHg4ZCwgMHgwYywgMHg5MiwgMHhlZiwgMHhiNSwgMHhmYywgMHg0YSwgMHgyNiwgMHhlMCwgMHgwZCwgMHgzOSwgMHhkMSwKKwkweGQyLCAweDQ2LCAweDM5LCAweGIyLCAweDYwLCAweDQ5LCAweDY5LCAweGU5LCAweDRlLCAweDcxLCAweDU3LCAweDAzLAorCTB4NmYsIDB4YjQsIDB4NDcsIDB4ZjYsIDB4N2QsIDB4ZDIsIDB4N2MsIDB4MmEsIDB4YzgsIDB4MmIsIDB4MmUsIDB4NTQsCisJMHg5MSwgMHg4MywgMHg1NiwgMHgxMywgMHg3MiwgMHhkOSwgMHg0OCwgMHhjYiwgMHg5YiwgMHg4MywgMHg4NywgMHhlNSwKKwkweGYzLCAweGQ1LCAweDI0LCAweGU4LCAweDMxLCAweDlmLCAweDJjLCAweGU3LCAweDEwLCAweDE3LCAweGI1LCAweGIyLAorCTB4NjMsIDB4MDgsIDB4NzksIDB4YWYsIDB4ZDksIDB4OWMsIDB4MTMsIDB4YzQsIDB4OTYsIDB4NzIsIDB4MTAsIDB4ODMsCisJMHg1ZCwgMHg2ZiwgMHg1MCwgMHhlNSwgMHgxNCwgMHg5MCwgMHg0ZiwgMHg2NCwgMHgwYywgMHhiMSwgMHhiNywgMHg2NiwKKwkweGIzLCAweGNkLCAweGZlLCAweGEwLCAweGVmLCAweGIzLCAweDk1LCAweDVlLCAweGFkLCAweGM4LCAweGJjLCAweDY0LAorCTB4ZjAsIDB4YTYsIDB4NGMsIDB4M2IsIDB4NDEsIDB4ZGYsIDB4ZTcsIDB4MmEsIDB4YTMsIDB4OWIsIDB4OTgsIDB4MWYsCisJMHgxYSwgMHgwNSwgMHhjOSwgMHg5NCwgMHg5ZCwgMHhmNywgMHg3YywgMHhkNywgMHhiYSwgMHg3ZCwgMHhjZCwgMHhmYSwKKwkweDc4LCAweGIyLCAweDEzLCAweDgxLCAweGNlLCAweDQ1LCAweGZiLCAweGFhLCAweGFkLCAweGY3LCAweGI2LCAweDRhLAorCTB4MDksIDB4MjcsIDB4NWQsIDB4ZDYsIDB4MWEsIDB4NDcsIDB4ZTcsIDB4YmUsIDB4NGEsIDB4NzksIDB4NWIsIDB4YWIsCisJMHhkYywgMHgzNCwgMHg4MCwgMHgzZiwgMHg2ZCwgMHg2OCwgMHg2MiwgMHgxZSwgMHhhYSwgMHg5NCwgMHhiYiwgMHhkOSwKKwkweGE2LCAweGJlLCAweDc0LCAweDRkLCAweDEyLCAweGEzLCAweDE1LCAweDVmLCAweGFlLCAweDNhLCAweDQxLCAweGVlLAorCTB4NjMsIDB4NjgsIDB4N2EsIDB4NmYsIDB4NWIsIDB4YjgsIDB4NTYsIDB4ZDcsIDB4NzYsIDB4MzksIDB4OTcsIDB4NDQsCisJMHgzYSwgMHgwZSwgMHg1NSwgMHhjNCwgMHgyYSwgMHg1NiwgMHg3NiwgMHgzOSwgMHg2ZiwgMHg0YiwgMHhiOSwgMHhhNywKKwkweDZkLCAweDc1LCAweDVkLCAweDhhLCAweGViLCAweDc2LCAweDBlLCAweGFmLCAweDlkLCAweGJiLCAweGNiLCAweGI5LAorCTB4MjgsIDB4ZTUsIDB4MmQsIDB4NmQsIDB4YWIsIDB4YjQsIDB4ZDIsIDB4NTgsIDB4ZGIsIDB4MTcsIDB4YWMsIDB4ZTUsCisJMHhmOCwgMHg2NiwgMHg3MSwgMHhiYiwgMHgzOSwgMHg0NywgMHhlZiwgMHg2ZCwgMHhiZiwgMHg0NSwgMHg0MywgMHgzMiwKKwkweGM1LCAweDRhLCAweGI5LCAweGE3LCAweDdkLCAweDE1LCAweGFmLCAweDRkLCAweGJjLCAweGRlLCAweDFhLCAweGJjLAorCTB4YzQsIDB4ZDksIDB4YmUsIDB4OGEsIDB4MzMsIDB4MDcsIDB4OWMsIDB4NDMsIDB4YWIsIDB4MzgsIDB4MzksIDB4N2UsCisJMHg1OCwgMHg4YSwgMHgzOCwgMHhkMywgMHg1YSwgMHgwYSwgMHgzMiwgMHhiYywgMHg1NCwgMHhjOSwgMHg0OCwgMHg3OSwKKwkweDI4LCAweDAxLCAweGRkLCAweGY3LCAweDFmLCAweGZjLCAweDlhLCAweGFhLCAweDQzLCAweGNjLCAweDYxLCAweDBmLAorCTB4YmEsIDB4MzIsIDB4NTUsIDB4NWUsIDB4ODcsIDB4ZDgsIDB4MDgsIDB4ZGIsIDB4ZjgsIDB4NWEsIDB4NWQsIDB4ODYsCisJMHgxNywgMHhlYiwgMHhhNiwgMHgxYywgMHg2ZiwgMHg3MCwgMHhiZiwgMHg5OCwgMHhlMywgMHgwNSwgMHg3NSwgMHhjNiwKKwkweDg1LCAweDQ2LCAweDRlLCAweGRiLCAweDg3LCAweGJkLCAweDY2LCAweDlkLCAweGIwLCAweGFmLCAweDYxLCAweDZhLAorCTB4YTMsIDB4M2MsIDB4MWYsIDB4ODAsIDB4OTcsIDB4NzYsIDB4N2UsIDB4YWMsIDB4NDEsIDB4ZGIsIDB4NzksIDB4MDMsCisJMHhiNiwgMHg0MSwgMHhjZSwgMHhhMywgMHg5YywgMHhiZCwgMHg5NSwgMHhiOSwgMHg1MywgMHg2NiwgMHhkMSwgMHg1MSwKKwkweDc1LCAweDg4LCAweDU2LCAweGNiLCAweDc3LCAweDIwLCAweDA3LCAweDRkLCAweGEwLCAweGQ2LCAweDgwLCAweGNkLAorCTB4ZGIsIDB4NzgsIDB4NmYsIDB4NzAsIDB4ZGUsIDB4MzIsIDB4ZTYsIDB4NmQsIDB4ZTAsIDB4M2MsIDB4ZWMsIDB4Y2QsCisJMHgyNSwgMHhlNSwgMHgwZiwgMHhhNiwgMHhjZCwgMHhmMSwgMHg3NywgMHhiMSwgMHhjNywgMHg2OCwgMHhkNywgMHg1OSwKKwkweDU3LCAweDU4LCAweDAyLCAweDVmLCAweGMxLCAweDNlLCAweGEyLCAweDZlLCAweDQ4LCAweGVkLCAweDYwLCAweDdlLAorCTB4OGYsIDB4YjksIDB4MTksIDB4Y2MsIDB4Y2QsIDB4NjYsIDB4MTgsIDB4Y2YsIDB4M2QsIDB4ZmIsIDB4OTksIDB4MGUsCisJMHhlOSwgMHg0MiwgMHhiYiwgMHhjZSwgMHgzNSwgMHhkOSwgMHgwYywgMHg3MiwgMHg1YiwgMHhkZiwgMHhjYiwgMHhiNywKKwkweGM5LCAweDRhLCAweGNhLCAweGJmLCAweDYwLCAweGQ4LCAweGQxLCAweGRjLCAweDA4LCAweDZmLCAweGYzLCAweDVjLAorCTB4ZTYsIDB4YzUsIDB4YzQsIDB4YmQsIDB4MjEsIDB4Y2MsIDB4ODMsIDB4YzcsIDB4YzUsIDB4NmQsIDB4ZmMsIDB4NDksCisJMHhiNywgMHg3NCwgMHhiOSwgMHhmOCwgMHg4ZCwgMHhlNiwgMHg0YywgMHg2ZiwgMHgwZSwgMHg2YSwgMHgyZSwgMHhiZSwKKwkweGI3LCAweDUwLCAweDNlLCAweDE3LCAweGU3LCAweGExLCAweDU2LCAweGFjLCAweDY2LCAweDI2LCAweDU5LCAweDFmLAorCTB4MTUsIDB4ZWIsIDB4NmMsIDB4ZWYsIDB4ODUsIDB4M2YsIDB4MDQsIDB4NzUsIDB4ZDcsIDB4ODUsIDB4NWIsIDB4YmUsCisJMHg3MCwgMHgxOSwgMHg3YSwgMHg0YiwgMHg0MywgMHg2ZiwgMHgyOSwgMHgzOSwgMHhkZiwgMHg2MCwgMHg5ZCwgMHhlNiwKKwkweDQyLCAweDVmLCAweDE5LCAweGYxLCAweDFhLCAweGUzLCAweDU4LCAweDJiLCAweDg3LCAweDgxLCAweDAzLCAweDNhLAorCTB4MTcsIDB4NDcsIDB4MmYsIDB4NjQsIDB4NjUsIDB4Y2EsIDB4ZGEsIDB4MWQsIDB4ZjEsIDB4MDAsIDB4NWMsIDB4ODgsCisJMHgxZiwgMHg4NSwgMHgzNiwgMHhmNCwgMHhmMSwgMHgxZCwgMHg5YSwgMHg1MywgMHhmZiwgMHg4NiwgMHg3ZiwgMHg5NCwKKwkweGVkLCAweDA5LCAweGJkLCAweDMwLCAweGQ2LCAweGQ0LCAweGJmLCAweDZlLCAweGZjLCAweGExLCAweDFjLCAweDY4LAorCTB4MzMsIDB4MDYsIDB4MzEsIDB4ZmUsIDB4ZTgsIDB4YTgsIDB4ZjMsIDB4MTgsIDB4OGIsIDB4NDgsIDB4ZDcsIDB4OTIsCisJMHgyMywgMHg0YiwgMHgyMywgMHhkYywgMHgzNywgMHg4YiwgMHhmMSwgMHhhNywgMHg1YywgMHhlNywgMHg5ZSwgMHgyOSwKKwkweDVjLCAweGMwLCAweDE5LCAweGFkLCAweGYxLCAweGZkLCAweDExLCAweDg3LCAweDZiLCAweDdjLCAweDk5LCAweDcwLAorCTB4M2EsIDB4YzQsIDB4NDgsIDB4OTYsIDB4YjQsIDB4YzcsIDB4MDcsIDB4MTEsIDB4N2IsIDB4MWUsIDB4ZTAsIDB4M2UsCisJMHgzMiwgMHgwNiwgMHg2ZCwgMHgxNywgMHhiMCwgMHhlYSwgMHhiNCwgMHgzYywgMHgzYywgMHhjOCwgMHg3NSwgMHhhMCwKKwkweGRkLCAweDJhLCAweDdhLCAweDkyLCAweDM0LCAweGYzLCAweDIxLCAweDRmLCAweDQzLCAweGRkLCAweDgxLCAweGJlLAorCTB4MDYsIDB4YWMsIDB4NDAsIDB4N2YsIDB4OWYsIDB4ZTksIDB4NWUsIDB4ZDUsIDB4MWYsIDB4ZDcsIDB4MzUsIDB4ZjMsCisJMHhjYiwgMHgxOCwgMHg5NiwgMHg5MCwgMHg4MSwgMHgzMywgMHgxYiwgMHg2NSwgMHhlNywgMHhhMiwgMHgyNSwgMHhmNiwKKwkweDk5LCAweDU1LCAweGZlLCAweDc2LCAweDllLCAweDViLCAweGNiLCAweDVmLCAweGY0LCAweDdmLCAweDE1LCAweDVjLAorCTB4ZDAsIDB4YzUsIDB4OGUsIDB4ZmEsIDB4MWUsIDB4NGIsIDB4MDUsIDB4YjgsIDB4YTMsIDB4ZjYsIDB4N2IsIDB4ZTEsCisJMHg1ZSwgMHhmMSwgMHhmZCwgMHg5OSwgMHg3MCwgMHg0ZiwgMHhiMCwgMHgwNywgMHg4OCwgMHg5NSwgMHhlNywgMHg2ZiwKKwkweGM1LCAweGE5LCAweDBjLCAweGY2LCAweDA2LCAweGI2LCAweGE3LCAweGUyLCAweDExLCAweGUzLCAweDE4LCAweGVkLAorCTB4YmIsIDB4NjMsIDB4ZDIsIDB4MmMsIDB4YjAsIDB4OGUsIDB4ZTYsIDB4M2UsIDB4YzksIDB4NDQsIDB4YjksIDB4MjIsCisJMHhhNSwgMHhhZCwgMHg4NSwgMHg2NywgMHg3ZCwgMHhkOCwgMHhjZiwgMHhhNCwgMHhhNSwgMHg2YywgMHhhZiwgMHg2MywKKwkweGFmLCAweDk3LCAweDM3LCAweGEwLCAweDFiLCAweDhjLCAweGMxLCAweDI2LCAweGY1LCAweDQyLCAweDQyLCAweDhhLAorCTB4OGQsIDB4NDQsIDB4YzIsIDB4M2MsIDB4MzEsIDB4ZjAsIDB4MjMsIDB4Y2YsIDB4NDgsIDB4MjQsIDB4ZjQsIDB4MTMsCisJMHg4MSwgMHg5ZCwgMHg0ZCwgMHhkNiwgMHg2ZiwgMHgyMCwgMHg1NiwgMHg2YSwgMHg3MiwgMHg3NCwgMHhlOCwgMHg4NiwKKwkweGNmLCAweDFhLCAweGQ4LCAweGRiLCAweDBiLCAweDliLCAweDFiLCAweDgyLCAweGNmLCAweDgwLCAweDhmLCAweDcyLAorCTB4YTMsIDB4YTMsIDB4MzcsIDB4ZTAsIDB4ZWQsIDB4MmIsIDB4MTEsIDB4OGYsIDB4YTYsIDB4OGUsIDB4ZGMsIDB4ZDMsCisJMHhjYiwgMHhmYiwgMHhiZSwgMHg1MSwgMHhkOCwgMHg5MCwgMHg5OCwgMHhjZSwgMHg4ZiwgMHg2ZiwgMHhkMSwgMHhjZiwKKwkweGVkLCAweGRmLCAweDYyLCAweDljLCAweDJiLCAweDZkLCAweDAxLCAweDNlLCAweGRkLCAweGNiLCAweGUzLCAweGY3LAorCTB4OWMsIDB4YzgsIDB4NDQsIDB4MTUsIDB4M2EsIDB4ZGYsIDB4MDMsIDB4M2QsIDB4NTksIDB4ZjAsIDB4YzUsIDB4M2QsCisJMHhhNiwgMHhjYSwgMHhkMSwgMHhmNSwgMHgzZCwgMHgyZiwgMHg2ZSwgMHgwYSwgMHg3MCwgMHhmMCwgMHhmZCwgMHgyNywKKwkweDdlLCAweDcwLCAweDg2LCAweDVlLCAweDBlLCAweGZiLCAweDdlLCAweDNmLCAweGRjLCAweDg3LCAweDVmLCAweDQ1LAorCTB4YjksIDB4NzgsIDB4NWUsIDB4NDQsIDB4YjIsIDB4YWQsIDB4M2QsIDB4MzcsIDB4YjIsIDB4ZTMsIDB4MjUsIDB4OWMsCisJMHgzMywgMHhhNywgMHgxZCwgMHhkZiwgMHg3ZiwgMHgwNywgMHhjZiwgMHgzNSwgMHhhNywgMHhkOSwgMHg0NiwgMHhkZSwKKwkweDdmLCAweGY2LCAweDMxLCAweDA3LCAweGY4LCAweDJjLCAweGNlLCAweGJkLCAweGQxLCAweGE2LCAweGIzLCAweGZmLAorCTB4NWUsIDB4Y2YsIDB4YmQsIDB4N2IsIDB4M2YsIDB4ZmIsIDB4YzksIDB4ZjMsIDB4MWQsIDB4N2QsIDB4ZWYsIDB4MDMsCisJMHhjZSwgMHhmZSwgMHgwZiwgMHg1YywgMHg3NywgMHgwZiwgMHgzZSwgMHgxYiwgMHhkOCwgMHg2ZCwgMHhiMSwgMHhkMSwKKwkweDFjLCAweDVmLCAweGVlLCAweGQ1LCAweDdmLCAweDdmLCAweGFkLCAweGZiLCAweDc2LCAweGZmLCAweGI1LCAweGJiLAorCTB4NmYsIDB4ZjcsIDB4ZGYsIDB4Y2QsIDB4ZGQsIDB4YmYsIDB4MTgsIDB4ZmYsIDB4Y2QsIDB4MDEsIDB4MGYsIDB4N2QsCisJMHg3MCwgMHhhZCwgMHhmZiwgMHhhZSwgMHhlNywgMHg5MywgMHhkNCwgMHhmNywgMHhmMywgMHgzZCwgMHhlNSwgMHhhMSwKKwkweGNlLCAweDMwLCAweDFmLCAweDUyLCAweGU3LCAweGY1LCAweDE3LCAweGE3LCAweDZkLCAweGVmLCAweDdlLCAweDUzLAorCTB4NGEsIDB4YjksIDB4MTYsIDB4YzksIDB4ZTYsIDB4NmEsIDB4YjIsIDB4NDMsIDB4OGUsIDB4M2IsIDB4MjIsIDB4NGIsCisJMHhhYSwgMHgxNiwgMHgzMSwgMHg1MSwgMHg4YiwgMHgwZiwgMHhhMCwgMHgzZSwgMHgwYiwgMHhmNCwgMHhiYSwgMHhhNCwKKwkweGY0LCAweGYyLCAweDAyLCAweDc4LCAweDg5LCAweGYwLCAweDc0LCAweGRkLCAweDA1LCAweDBmLCAweDcxLCAweDEwLAorCTB4MTcsIDB4ZjEsIDB4MGMsIDB4ZTIsIDB4N2MsIDB4YjcsIDB4ZDcsIDB4YzEsIDB4ODUsIDB4NzMsIDB4ZWEsIDB4MjUsCisJMHhkNCwgMHg2NCwgMHhiNiwgMHhkZSwgMHhhMywgMHgwNywgMHg2NywgMHhiMiwgMHg1YiwgMHg5NiwgMHhkZCwgMHhlOSwKKwkweGViLCAweGYyLCAweDA1LCAweDllLCAweDU5LCAweDBhLCAweGFlLCAweGNlLCAweDIxLCAweDU2LCAweDBmLCAweDhkLAorCTB4ODUsIDB4NzUsIDB4ZDIsIDB4ZGMsIDB4NDEsIDB4Y2YsIDB4OGUsIDB4ZWUsIDB4NDksIDB4NzgsIDB4NDcsIDB4OTIsCisJMHg5MCwgMHg5MiwgMHg5YSwgMHhiNSwgMHgwNCwgMHgxZCwgMHg2OCwgMHg3MiwgMHgwZCwgMHg2NywgMHhkMCwgMHhkNSwKKwkweGI5LCAweDc2LCAweGUwLCAweDQ1LCAweGVlLCAweDc3LCAweDIwLCAweGJiLCAweDU3LCAweGI0LCAweDdlLCAweGFiLAorCTB4NTUsIDB4NmIsIDB4ODcsIDB4MmYsIDB4NjUsIDB4YzQsIDB4NTUsIDB4NmQsIDB4OWUsIDB4ZDMsIDB4YTcsIDB4NjYsCisJMHgxNiwgMHgyYiwgMHhjOCwgMHgwMywgMHg2ZCwgMHg5YywgMHhhZiwgMHg3OSwgMHhiYywgMHhkNywgMHg0OSwgMHg0MywKKwkweDkzLCAweDJiLCAweDczLCAweGJhLCAweGZjLCAweGQzLCAweDljLCAweDIxLCAweGZmLCAweDhjLCAweDNhLCAweGY0LAorCTB4OWEsIDB4N2QsIDB4NmEsIDB4ZTYsIDB4YjQsIDB4MmQsIDB4ZjcsIDB4ODEsIDB4ZDUsIDB4ZjAsIDB4MGUsIDB4NGYsCisJMHg3NiwgMHg5YSwgMHg0MiwgMHg1YiwgMHgxZCwgMHg0OCwgMHhmZiwgMHg4ZSwgMHgyMCwgMHhmZiwgMHhjMSwgMHg5YSwKKwkweDJiLCAweDczLCAweGE0LCAweGI1LCAweDc2LCAweDhkLCAweGY0LCAweDIyLCAweDFmLCAweDgzLCAweDVkLCAweDBmLAorCTB4MzAsIDB4MjcsIDB4ZTIsIDB4N2MsIDB4ZDQsIDB4YWIsIDB4MDMsIDB4ZDYsIDB4M2UsIDB4YzUsIDB4NWIsIDB4NDIsCisJMHgxNiwgMHhlYiwgMHg5YywgMHg2ZiwgMHg4MiwgMHhiNywgMHgyZSwgMHg5YywgMHgzMSwgMHg1OSwgMHg2YiwgMHg1MiwKKwkweGZlLCAweGIwLCAweDViLCAweGU1LCAweGFhLCAweDFhLCAweGZiLCAweDBkLCAweGI1LCAweGM3LCAweGVmLCAweGVmLAorCTB4ZTcsIDB4ZGUsIDB4MWIsIDB4MzIsIDB4OTUsIDB4NjIsIDB4OWIsIDB4NjMsIDB4NTksIDB4ZDQsIDB4OWMsIDB4YzQsCisJMHg5NywgMHhkZCwgMHhlYiwgMHgwYSwgMHg3OSwgMHgwZSwgMHhkZSwgMHhhZiwgMHgwOCwgMHg2NSwgMHhkYiwgMHg2ZCwKKwkweDVkLCAweDk3LCAweGQ3LCAweDdkLCAweGY3LCAweDAwLCAweGU1LCAweDg5LCAweDcyLCAweDhiLCAweDM5LCAweDlmLAorCTB4YjEsIDB4ZDgsIDB4MjgsIDB4Y2MsIDB4YzAsIDB4OGUsIDB4YmYsIDB4MmEsIDB4ZGYsIDB4NmYsIDB4MWMsIDB4OTIsCisJMHhlZiwgMHgzNSwgMHgyNiwgMHhlNSwgMHhjZiwgMHgxYSwgMHg1ZiwgMHg5NiwgMHgzZiwgMHg2ZCwgMHgxYywgMHg5NCwKKwkweGQ3LCAweDFiLCAweDA3LCAweGU0LCAweGI1LCAweGM2LCAweDg0LCAweGJjLCAweGRhLCAweGQ4LCAweDBmLCAweDFiLAorCTB4MWYsIDB4ODcsIDB4OGQsIDB4OWYsIDB4OWEsIDB4OTksIDB4YWMsIDB4ZjcsIDB4Y2IsIDB4ZDQsIDB4NDksIDB4YzQsCisJMHgyMCwgMHhlNywgMHgxYiwgMHhiYSwgMHhiYSwgMHhlMywgMHhiMywgMHhlOSwgMHhlNywgMHgyZCwgMHgzMiwgMHhhZCwKKwkweGVlLCAweGFmLCAweDM0LCAweGU0LCAweDg5LCAweDJkLCAweGJjLCAweDJiLCAweDdjLCAweGM1LCAweDMzLCAweDJlLAorCTB4ODcsIDB4ZjEsIDB4ZTgsIDB4ZTEsIDB4OTQsIDB4YjQsIDB4MDMsIDB4YmYsIDB4Y2EsIDB4NGIsIDB4NGQsIDB4OWUsCisJMHhkYiwgMHg2MiwgMHg4NiwgMHhmNywgMHg5YywgMHg4NywgMHgyNCwgMHhjOSwgMHhmYiwgMHhiMCwgMHg5YywgMHg2NywKKwkweGEwLCAweGRlLCAweDVlLCAweGQ3LCAweDI3LCAweDczLCAweGI0LCAweDY1LCAweGU4LCAweGM2LCAweDk1LCAweDQzLAorCTB4YjAsIDB4NTMsIDB4YzMsIDB4N2UsIDB4Y2IsIDB4YTUsIDB4MWUsIDB4MTYsIDB4OTcsIDB4MjgsIDB4ZjcsIDB4NDYsCisJMHg1OSwgMHg1YywgMHhhMCwgMHg2ZiwgMHhmZiwgMHgxYiwgMHg2NCwgMHg2YywgMHg5NywgMHhkYSwgMHg4MiwgMHg4OSwKKwkweGI5LCAweDZlLCAweDk4LCAweGFiLCAweDZjLCAweGE3LCAweDNkLCAweDAwLCAweDFmLCAweGYxLCAweDdlLCAweDEwLAorCTB4NGUsIDB4YWIsIDB4MDksIDB4MjcsIDB4ZjEsIDB4MjQsIDB4NTQsIDB4MGMsIDB4MDgsIDB4NzAsIDB4NWIsIDB4NTIsCisJMHg1YiwgMHg0YSwgMHhjYSwgMHhjMiwgMHg0MiwgMHgwZiwgMHg5ZSwgMHg5NCwgMHgyYywgMHhkNCwgMHg2ZCwgMHgzYywKKwkweDM5LCAweDNjLCAweDQzLCAweDc4LCAweGQyLCAweGIwLCAweDUzLCAweGNhLCAweGM4LCAweGQ4LCAweDEyLCAweGM5LAorCTB4ODgsIDB4NzgsIDB4NWMsIDB4ZWQsIDB4MGQsIDB4NmIsIDB4MmEsIDB4ZjIsIDB4YTMsIDB4ODUsIDB4ZmMsIDB4NzQsCisJMHg4NywgMHg3ZCwgMHgxZCwgMHg1MiwgMHhhYiwgMHgzOCwgMHgzMiwgMHg1NSwgMHhmZCwgMHg5NCwgMHgzZSwgMHhhNSwKKwkweDc0LCAweDA3LCAweGZjLCAweDk1LCAweDIxLCAweGI0LCAweGVmLCAweDBmLCAweGRiLCAweDhmLCAweGNhLCAweGY0LAorCTB4YmMsIDB4YzgsIDB4Y2EsIDB4Y2IsIDB4MDMsIDB4N2EsIDB4NTEsIDB4YjUsIDB4ZjcsIDB4YTIsIDB4YWQsIDB4YTMsCisJMHg5ZCwgMHgwZCwgMHhkYiwgMHhjYywgMHg4ZiwgMHgwZSwgMHhlMCwgMHg3MSwgMHhkNSwgMHhmMywgMHhmNSwgMHhlYSwKKwkweGI4LCAweDNjLCAweDU1LCAweGVkLCAweDc3LCAweDVlLCAweDg3LCAweGNkLCAweGJkLCAweDY1LCAweDQ2LCAweGY3LAorCTB4ZDIsIDB4MDQsIDB4MjQsIDB4NzksIDB4ZjYsIDB4NTYsIDB4NzUsIDB4ZjcsIDB4ZjEsIDB4MDQsIDB4ZTIsIDB4YWQsCisJMHg5YiwgMHgzNCwgMHhlNSwgMHg2ZiwgMHg0ZiwgMHg2NCwgMHhhZCwgMHhhNywgMHhmNSwgMHg1YywgMHg1MiwgMHhkYSwKKwkweDdkLCAweGZmLCAweDcxLCAweDNiLCAweDNiLCAweDNiLCAweGE5LCAweDc3LCAweGNhLCAweGRmLCAweGJmLCAweDk4LAorCTB4OTEsIDB4ODUsIDB4YjMsIDB4NWIsIDB4NjUsIDB4YTEsIDB4MDYsIDB4OTksIDB4MWEsIDB4YmYsIDB4OGUsIDB4N2QsCisJMHgzNSwgMHhlNSwgMHhlYSwgMHg5ZSwgMHg0NywgMHhiMSwgMHgyNywgMHg4YywgMHg1ZCwgMHg0OSwgMHhlNCwgMHg2YywKKwkweDFiLCAweGM0LCAweGVjLCAweDI1LCAweDVkLCAweDQ5LCAweDk4LCAweDg1LCAweDljLCAweDFjLCAweDgxLCAweGRmLAorCTB4NGYsIDB4ZGIsIDB4YjksIDB4MWUsIDB4NjksIDB4YzcsIDB4N2IsIDB4N2QsIDB4MDQsIDB4N2MsIDB4NWIsIDB4MzIsCisJMHhkNSwgMHg2YiwgMHhjOSwgMHg5OSwgMHhjMSwgMHg2OCwgMHhmZiwgMHhiNiwgMHg2MiwgMHg2ZSwgMHg0NiwgMHgxNiwKKwkweGNmLCAweDY2LCAweGYwLCAweDliLCAweDgzLCAweGZkLCAweGVjLCAweDk0LCAweDU3LCAweDZhLCAweGZkLCAweGIyLAorCTB4NTQsIDB4ZGIsIDB4MmEsIDB4OGIsIDB4YjUsIDB4ZTYsIDB4N2QsIDB4ZTgsIDB4ZWMsIDB4MDksIDB4ZTIsIDB4MWQsCisJMHhmMSwgMHhmNCwgMHg1YiwgMHg1MywgMHhmYSwgMHg1NiwgMHg3MSwgMHhjZCwgMHg3ZSwgMHhlYiwgMHgyOSwgMHhmZCwKKwkweDFmLCAweGU0LCAweDMxLCAweDMzLCAweGEwLCAweGE5LCAweDE3LCAweDdlLCAweGE0LCAweGVlLCAweDg0LCAweDI2LAorCTB4NzksIDB4ZjYsIDB4MmEsIDB4YmMsIDB4NGYsIDB4MjYsIDB4NDksIDB4ZmIsIDB4ZjUsIDB4YzYsIDB4MDcsIDB4ZDEsCisJMHg1OSwgMHhjYiwgMHhjZiwgMHg5ZCwgMHg2OCwgMHg1MiwgMHgwNiwgMHhlMiwgMHhlYywgMHhiZiwgMHg3MSwgMHg1MiwKKwkweGVmLCAweDk1LCAweGU1LCAweDZkLCAweDBmLCAweDU4LCAweDRmLCAweGVhLCAweGFkLCAweDg4LCAweDAxLCAweDNmLAorCTB4OTcsIDB4OWYsIDB4ZWUsIDB4ZDksIDB4MjQsIDB4M2YsIDB4ZmMsIDB4Y2QsIDB4ZWMsIDB4YTksIDB4NmYsIDB4MjIsCisJMHhkOSwgMHhiZiwgMHhiMiwgMHhhNywgMHg4MywgMHg3MSwgMHgwMSwgMHhlZiwgMHhlYywgMHhjZiwgMHhkZSwgMHg3MCwKKwkweDc1LCAweGVhLCAweGUxLCAweDJmLCAweGEwLCAweDg3LCAweGVjLCAweDljLCAweGJhLCAweDliLCAweDU2LCAweDNjLAorCTB4OTAsIDB4M2UsIDB4ZjUsIDB4NTIsIDB4MDYsIDB4NmYsIDB4MTgsIDB4YWIsIDB4ZjcsIDB4MDMsIDB4NTcsIDB4NTksCisJMHhlOSwgMHhmOSwgMHgwOSwgMHgyNywgMHg3YiwgMHgwMywgMHhlOSwgMHhiMCwgMHhiZiwgMHg2OCwgMHhmNywgMHhhNywKKwkweDc3LCAweGVhLCAweDNiLCAweDY0LCAweDMyLCAweGZkLCAweDgwLCAweGY1LCAweGI0LCAweDZjLCAweDIxLCAweGNlLAorCTB4ZDksIDB4MDUsIDB4YzEsIDB4ZGEsIDB4NzksIDB4ZTIsIDB4ZmIsIDB4MmIsIDB4ZTAsIDB4MGIsIDB4NzAsIDB4MjgsCisJMHhmZiwgMHg1MSwgMHgzOCwgMHg3NywgMHg1OSwgMHg1ZiwgMHhkNywgMHg3OSwgMHhjNiwgMHg2MywgMHgwYywgMHg3MSwKKwkweGUxLCAweGUyLCAweDEwLCAweDY1LCAweDQwLCAweDgyLCAweDk1LCAweGNhLCAweGE2LCAweDVkLCAweGZkLCAweGMzLAorCTB4YzgsIDB4NDcsIDB4ZmMsIDB4ZmQsIDB4NTYsIDB4NTEsIDB4MjcsIDB4MGYsIDB4ZTcsIDB4YzAsIDB4Y2IsIDB4NGYsCisJMHhjMCwgMHg3ZiwgMHgzZiwgMHg3MCwgMHhhMiwgMHhmNiwgMHg0OCwgMHg0NywgMHg3NCwgMHhmZiwgMHg0ZSwgMHhkMSwKKwkweDdkLCAweGFkLCAweDIxLCAweGU2LCAweDJhLCAweDVkLCAweGY0LCAweGQ1LCAweDc1LCAweGM4LCAweGRkLCAweDA3LAorCTB4N2IsIDB4YjUsIDB4ZjAsIDB4Y2IsIDB4YmQsIDB4ZTksIDB4MGMsIDB4ZjcsIDB4OTgsIDB4ZWIsIDB4MjIsIDB4YmEsCisJMHgxMSwgMHhiZiwgMHg1YywgMHg3MywgMHgyNywgMHgxZSwgMHhlZSwgMHg3NSwgMHgzZSwgMHhlYSwgMHhkNCwgMHgwMywKKwkweDA5LCAweDc5LCAweGY3LCAweDQ0LCAweGI0LCAweDM3LCAweDA3LCAweDY0LCAweGJhLCAweDBhLCAweGRkLCAweGVkLAorCTB4ZWEsIDB4MGYsIDB4ZmMsIDB4MjcsIDB4MWQsIDB4ZjEsIDB4NDAsIDB4ZGUsIDB4ZmYsIDB4MDYsIDB4YmMsIDB4MDcsCisJMHhiOCwgMHg1YiwgMHgwYiwgMHhjZCwgMHhiYSwgMHhjMywgMHg1OCwgMHgzZCwgMHhhMCwgMHgzMSwgMHhiNiwgMHgwZSwKKwkweDRmLCAweDU3LCAweGY2LCAweDQ0LCAweGJlLCAweDk4LCAweDg0LCAweDVmLCAweGVkLCAweGI2LCAweDllLCAweDEwLAorCTB4ZDYsIDB4NjMsIDB4YzQsIDB4OWIsIDB4OTQsIDB4MWYsIDB4YmUsIDB4MGMsIDB4MWUsIDB4OTIsIDB4ZjQsIDB4OTMsCisJMHg3ZiwgMHg1ZiwgMHhlMywgMHgyNywgMHgxYywgMHhkYiwgMHgyYSwgMHgzNSwgMHhkNCwgMHhkNCwgMHg1ZSwgMHhkZSwKKwkweDk0LCAweDY5LCAweDI1LCAweDAzLCAweGRhLCAweDM1LCAweGZhLCAweDc3LCAweDI5LCAweGY0LCAweGVmLCAweDQ3LAorCTB4ODAsIDB4YTMsIDB4NWQsIDB4OGMsIDB4NDcsIDB4MWYsIDB4YzcsIDB4NTksIDB4OWQsIDB4Y2QsIDB4MmMsIDB4ZWIsCisJMHhjYywgMHgwMywgMHg3NiwgMHg0YiwgMHg1MSwgMHhkZCwgMHg0ZiwgMHhkZiwgMHg4YiwgMHhlZSwgMHhhMiwgMHhkOCwKKwkweDk0LCAweDk2LCAweDhiLCAweDk1LCAweDI4LCAweDJlLCAweGE1LCAweDcxLCAweDllLCAweGI0LCAweGNiLCAweGE1LAorCTB4YjksIDB4MjgsIDB4ZTYsIDB4YjUsIDB4Y2IsIDB4MTIsIDB4ZjIsIDB4OWEsIDB4OTUsIDB4OTcsIDB4MmMsIDB4OGMsCisJMHgyNSwgMHhlNSwgMHhlMiwgMHg1YywgMHgxMiwgMHgzMSwgMHhhYiwgMHg0NywgMHg1NiwgMHhlNiwgMHg3YSwgMHgzMCwKKwkweDk2LCAweGMyLCAweGJhLCAweDE0LCAweGU2LCAweGRiLCAweGIyLCAweDUyLCAweGIxLCAweDgxLCAweDI3LCAweDg3LAorCTB4NzYsIDB4MGUsIDB4ZWQsIDB4MjEsIDB4YjksIDB4YTQsIDB4YmUsIDB4MTcsIDB4MzAsIDB4MmYsIDB4MTgsIDB4NDIsCisJMHhkYywgMHg2MiwgMHg1ZSwgMHgzMCwgMHg4MiwgMHgxOCwgMHgzMiwgMHg4MSwgMHgyNywgMHg4YSwgMHg1ZCwgMHhhNywKKwkweDY2LCAweGE2LCAweDJhLCAweGJjLCAweDczLCAweDg0LCAweDBlLCAweGFjLCAweDUzLCAweDMzLCAweGQzLCAweGI2LAorCTB4ODksIDB4YmEsIDB4ZWQsIDB4MWIsIDB4ZGEsIDB4NTQsIDB4ODMsIDB4NzIsIDB4NDEsIDB4YjcsIDB4NDMsIDB4MWQsCisJMHhhMiwgMHgzZiwgMHg0YSwgMHg5YiwgMHhlNCwgMHg3OSwgMHg2NywgMHgyMCwgMHhjNiwgMHg3NywgMHgwMSwgMHg5ZiwKKwkweDIzLCAweGZhLCAweDZmLCAweGQwLCAweDE3LCAweGEwLCAweGMzLCAweDI3LCAweGJhLCAweGU0LCAweGQyLCAweGNiLAorCTB4OGMsIDB4MzUsIDB4YWUsIDB4YmMsIDB4N2EsIDB4OTYsIDB4M2EsIDB4MmMsIDB4ZjYsIDB4YWMsIDB4ZWEsIDB4OTAsCisJMHg2MywgMHgwZiwgMHhlMSwgMHg4YywgMHhkOCwgMHgwZiwgMHg3YiwgMHgzMiwgMHgzMywgMHg4NywgMHg5MCwgMHhjYiwKKwkweDdjLCAweDFiLCAweGY2LCAweDU5LCAweDY2LCAweGNkLCAweDlkLCAweDBlLCAweDZhLCAweDg0LCAweDIwLCAweDA2LAorCTB4YTAsIDB4ZGQsIDB4NDcsIDB4NWQsIDB4YjEsIDB4ZGQsIDB4MDcsIDB4YmIsIDB4ZTMsIDB4NTgsIDB4OWYsIDB4MWEsCisJMHg1YiwgMHgwNCwgMHg4ZSwgMHg2MCwgMHg4YywgMHhlZCwgMHhjZCwgMHhiMiwgMHhhOCwgMHhjNiwgMHgwZSwgMHhhYSwKKwkweGIxLCAweGIyLCAweGIyLCAweDBmLCAweDhlLCAweDFkLCAweDUyLCAweGIxLCAweGU5LCAweDdjLCAweDIzLCAweGVhLAorCTB4ZGYsIDB4ODgsIDB4NTgsIDB4YzIsIDB4N2UsIDB4ZjYsIDB4ZTUsIDB4NjEsIDB4ZWIsIDB4N2IsIDB4NzEsIDB4YWUsCisJMHgxNSwgMHg2NCwgMHhhOSwgMHg4MSwgMHgzYSwgMHgzMCwgMHhmZiwgMHg3YiwgMHg5OCwgMHhjYiwgMHgzZCwgMHhjOCwKKwkweDllLCAweDJhLCAweGU5LCAweGU0LCAweGYxLCAweDIwLCAweGNlLCAweDgzLCAweGZkLCAweDIxLCAweGFkLCAweGI2LAorCTB4OTAsIDB4YWYsIDB4MDMsIDB4NjEsIDB4YmIsIDB4MjUsIDB4YTQsIDB4NGQsIDB4M2MsIDB4MzYsIDB4NzAsIDB4MWMsCisJMHhjMywgMHg1YSwgMHgxNywgMHgzOCwgMHgxOCwgMHg2MywgMHgxMSwgMHgyMywgMHg1MiwgMHgyOSwgMHhlOCwgMHg4MiwKKwkweDM0LCAweGRiLCAweGE0LCAweGFjLCAweGRlLCAweGY3LCAweGMzLCAweDc2LCAweGI5LCAweDE2LCAweDNhLCAweGI0LAorCTB4YTIsIDB4NzUsIDB4YTUsIDB4NzAsIDB4Y2YsIDB4NTMsIDB4ZWEsIDB4OWMsIDB4ZDEsIDB4OTMsIDB4OWIsIDB4YzMsCisJMHg5YywgMHgxMCwgMHg3YSwgMHg0NSwgMHg5YywgMHhkNSwgMHg5MywgMHg4YywgMHgzNywgMHhlZiwgMHg4NCwgMHg3NiwKKwkweGRhLCAweDhiLCAweGJlLCAweDg3LCAweDQ0LCAweGVmLCAweDY1LCAweGRmLCAweDUxLCAweGUwLCAweDYxLCAweGVkLAorCTB4M2MsIDB4MGMsIDB4OTksIDB4ZDksIDB4ZTYsIDB4ZmEsIDB4NmMsIDB4ZDMsIDB4ZmEsIDB4YzQsIDB4M2EsIDB4ZWIsCisJMHgzYiwgMHg5YSwgMHhmYSwgMHgzMiwgMHg1MiwgMHg5YiwgMHhlZiwgMHg1MiwgMHhmMSwgMHhmMiwgMHg3YywgMHgxOCwKKwkweDJmLCAweDE3LCAweDZiLCAweDk0LCAweDA1LCAweDdlLCAweDk2LCAweDdmLCAweDViLCAweGU5LCAweGEyLCAweDc2LAorCTB4MzYsIDB4YjAsIDB4ZjUsIDB4YTUsIDB4OTMsIDB4M2MsIDB4MTcsIDB4NTcsIDB4ZTcsIDB4ZDUsIDB4ZDQsIDB4YmMsCisJMHhkZiwgMHgwNiwgMHhmZiwgMHhiYSwgMHgxYywgMHg1NSwgMHgzMiwgMHg3MCwgMHgzZSwgMHhlNiwgMHhkNSwgMHgwMiwKKwkweGJmLCAweDMxLCAweDZjLCAweGNlLCAweGExLCAweDhmLCAweDQ0LCAweDZiLCAweDM4LCAweGZmLCAweGU3LCAweGE4LAorCTB4NTUsIDB4YmUsIDB4YWMsIDB4ZDYsIDB4YWMsIDB4ZmEsIDB4MGMsIDB4ZjksIDB4NzEsIDB4NDIsIDB4OWUsIDB4N2IsCisJMHhjMCwgMHg1ZiwgMHg2NywgMHgyOCwgMHg0MywgMHg3YiwgMHgyOCwgMHgwMywgMHhmMSwgMHhmZCwgMHgyNywgMHg3MCwKKwkweGI3LCAweDYxLCAweDFlLCAweDc5LCAweGRkLCAweDg2LCAweDNlLCAweGJlLCAweGZmLCAweDE3LCAweGZhLCAweDc2LAorCTB4MjMsIDB4ZmYsIDB4MjMsIDB4NmYsIDB4ODksIDB4MjYsIDB4ZGUsIDB4ZmUsIDB4MDMsIDB4NjMsIDB4M2QsIDB4NGEsCisJMHhiNywgMHgzNSwgMHhkNCwgMHgyNiwgMHg1MywgMHhiYywgMHhlZiwgMHg0OCwgMHhlMSwgMHgxYywgMHgzOCwgMHhiOSwKKwkweDRkLCAweGQxLCAweGFkLCAweDlkLCAweGJkLCAweDg2LCAweGYxLCAweDVlLCAweGFjLCAweDg5LCAweGRhLCAweGNkLAorCTB4YjIsIDB4ZTksIDB4NTgsIDB4ZmIsIDB4NTMsIDB4MjUsIDB4Y2YsIDB4NjIsIDB4ZWQsIDB4NGUsIDB4ZjIsIDB4NmYsCisJMHg1YiwgMHgyMywgMHgzYiwgMHhlNSwgMHgyNiwgMHg0ZiwgMHhlNCwgMHhhNywgMHgxZiwgMHg0ZiwgMHgyYiwgMHg3MiwKKwkweDIxLCAweGQ4LCAweDZkLCAweGQyLCAweDkwLCAweGQxLCAweDdjLCAweDlhLCAweGRmLCAweGY5LCAweDEyLCAweGJjLAorCTB4MTcsIDB4MWQsIDB4MTksIDB4ZTQsIDB4OWUsIDB4YTEsIDB4ZGQsIDB4NjAsIDB4NGUsIDB4NDcsIDB4N2YsIDB4NGIsCisJMHhjOCwgMHgzMSwgMHhkNCwgMHgyNCwgMHhlNSwgMHg4NSwgMHg4YywgMHg1NiwgMHgzYywgMHg5OSwgMHg0NSwgMHgxNiwKKwkweGFkLCAweGJlLCAweGQ1LCAweGM5LCAweDhiLCAweDRiLCAweGI2LCAweDdjLCAweDFiLCAweDdlLCAweDdhLCAweGIyLAorCTB4OWUsIDB4NGQsIDB4N2YsIDB4MTMsIDB4ZjksIDB4YzEsIDB4OTEsIDB4MjUsIDB4ZTYsIDB4MTMsIDB4M2QsIDB4MjksCisJMHg2NSwgMHg5YiwgMHhmMywgMHg5YSwgMHg2YywgMHg2MCwgMHg0YywgMHg5YiwgMHg0NywgMHg3ZSwgMHg2YSwgMHhkZCwKKwkweDJkLCAweDQ3LCAweDgyLCAweDlmLCAweDU3LCAweGQ3LCAweGM2LCAweDBjLCAweGNhLCAweGIxLCAweDM2LCAweDY2LAorCTB4MTAsIDB4MGYsIDB4NjMsIDB4YzYsIDB4NGUsIDB4ZWMsIDB4MTMsIDB4NjMsIDB4MDYsIDB4ZjYsIDB4ZmYsIDB4MjQsCisJMHg2MywgMHg4NiwgMHg4ZCwgMHg3NSwgMHg4YywgMHgxOSwgMHg3OSwgMHg1OSwgMHhhYywgMHgzMiwgMHg2NiwgMHhlYywKKwkweDQ1LCAweDliLCAweDMxLCAweGEzLCAweDgwLCAweDc2LCAweDEwLCAweDJmLCAweDE2LCAweDU1LCAweGJjLCAweGM4LAorCTB4NWEsIDB4Y2IsIDB4YzIsIDB4MzgsIDB4ODEsIDB4M2MsIDB4YjEsIDB4OGEsIDB4M2MsIDB4YjEsIDB4OGEsIDB4M2MsCisJMHhiMSwgMHg4YSwgMHgzYywgMHhiMSwgMHg4YSwgMHgzYywgMHgxMSwgMHhiNiwgMHhmZSwgMHg1YSwgMHgxNSwgMHg3OSwKKwkweDIyLCAweGZjLCAweGU3LCAweDNjLCAweDcyLCAweDkyLCAweGEwLCAweGE2LCAweDM4LCAweDhjLCAweDlhLCAweGMyLAorCTB4ZDUsIDB4YzYsIDB4YWEsIDB4ZTMsIDB4ZGEsIDB4YmUsIDB4MmEsIDB4NmEsIDB4NDMsIDB4ZjUsIDB4OWQsIDB4NTgsCisJMHgxZiwgMHhkYSwgMHg4MCwgMHhiYSwgMHhhOCwgMHhlNiwgMHg2YywgMHgwMSwgMHg1ZiwgMHhkNywgMHhlMCwgMHgxYiwKKwkweGQ0LCAweGQzLCAweDU2LCAweDk5LCAweGNhLCAweGVkLCAweDgwLCAweDdjLCAweGQ4LCAweDdmLCAweGZiLCAweGZiLAorCTB4ZTgsIDB4NDMsIDB4M2UsIDB4OWYsIDB4NjMsIDB4MGQsIDB4YzIsIDB4NzgsIDB4YjUsIDB4MGYsIDB4NmQsIDB4MWQsCisJMHg2ZCwgMHhlYywgMHhlOSwgMHgwNCwgMHg3YywgMHhjNCwgMHg3ZSwgMHg5MCwgMHhmOSwgMHg2MiwgMHg3YSwgMHg0MSwKKwkweDllLCAweGRjLCAweDFjLCAweGQ4LCAweGY0LCAweDZmLCAweDMxLCAweDI3LCAweDVlLCAweGQzLCAweGRlLCAweDg4LAorCTB4MzksIDB4ZjAsIDB4MTcsIDB4ZDgsIDB4OTcsIDB4NWEsIDB4MDMsIDB4NWMsIDB4YmEsIDB4ZmQsIDB4ZTcsIDB4YzQsCisJMHhkMSwgMHhiNywgMHhlMSwgMHhkNiwgMHgxYywgMHhkYSwgMHhkNSwgMHhmNywgMHg5YSwgMHhmYSwgMHhiMiwgMHg5OCwKKwkweGNmLCAweGVmLCAweGUyLCAweDNiLCAweGYwLCAweGZiLCAweDE2LCAweDdlLCAweDYxLCAweDc3LCAweGY2LCAweDA1LAorCTB4Y2MsIDB4ZTksIDB4YzMsIDB4ZWYsIDB4NzcsIDB4OWEsIDB4ZTYsIDB4NDIsIDB4MGEsIDB4ZmIsIDB4MmYsIDB4ZDEsCisJMHg3NywgMHgzMSwgMHhhNCwgMHhjMSwgMHg2ZiwgMHg4OSwgMHg1ZiwgMHg2YSwgMHhlMiwgMHhlMywgMHgwNywgMHhlOCwKKwkweGZiLCAweDZiLCAweGY0LCAweGY5LCAweGZlLCAweGRiLCAweDRlLCAweGQ0LCAweDI3LCAweGE1LCAweDk2LCAweDcwLAorCTB4ZWYsIDB4NDYsIDB4ZDUsIDB4ZGUsIDB4NjksIDB4Y2EsIDB4ZTYsIDB4OGYsIDB4MmMsIDB4ZTksIDB4YWEsIDB4MGUsCisJMHg3YSwgMHhhZSwgMHg4ZSwgMHhlYSwgMHgwOCwgMHg3MSwgMHhiZSwgMHhiYywgMHgxMCwgMHhkNCwgMHhhZCwgMHhjNywKKwkweDUxLCAweDczLCAweDE2LCAweGFiLCAweGI0LCAweDkxLCAweDFjLCAweGZhLCAweDZkLCAweDljLCAweDY5LCAweDMyLAorCTB4NjksIDB4ZGMsIDB4YWEsIDB4NjMsIDB4MTMsIDB4ODksIDB4YzksIDB4N2EsIDB4OWIsIDB4NDgsIDB4MzcsIDB4NjksCisJMHgzMiwgMHg0ZiwgMHgyMiwgMHg4ZSwgMHhkOSwgMHg5OSwgMHhlMiwgMHhjMiwgMHhlYywgMHg4YywgMHgwNywgMHg5YywKKwkweDYzLCAweDc1LCAweGFlLCAweGU1LCAweDNjLCAweDkzLCAweGY3LCAweDYzLCAweDRkLCAweDc0LCAweDY5LCAweDEzLAorCTB4NjAsIDB4MDYsIDB4ZjQsIDB4OWUsIDB4YWIsIDB4OTMsIDB4N2UsIDB4NDAsIDB4YjMsIDB4YWMsIDB4NjgsIDB4ZGEsCisJMHhlOCwgMHg4ZiwgMHhlYSwgMHhjNywgMHgxYywgMHg2YSwgMHg1ZCwgMHg5OSwgMHg2NCwgMHhlZCwgMHg1YywgMHgwYywKKwkweDY5LCAweGJhLCAweDc1LCAweDQ5LCAweDI0LCAweDBhLCAweGNkLCAweGY4LCAweDgyLCAweDhjLCAweGYzLCAweGI5LAorCTB4ZmEsIDB4ZWMsIDB4OGMsIDB4ZmUsIDB4NDIsIDB4MzYsIDB4YzcsIDB4M2IsIDB4MTEsIDB4ZDcsIDB4OWEsIDB4OWQsCisJMHg2OSwgMHgxZCwgMHg0OCwgMHhjOCwgMHg4ZiwgMHg5MSwgMHhiYiwgMHgxZCwgMHg1MywgMHgzNCwgMHg2NiwgMHg2NywKKwkweDhjLCAweDE3LCAweDAyLCAweDViLCAweDBjLCAweGU4LCAweGUwLCAweDNjLCAweGM5LCAweGI3LCAweDQzLCAweDRlLAorCTB4ZDIsIDB4NjIsIDB4NGQsIDB4MWQsIDB4OGMsIDB4NGYsIDB4YWEsIDB4N2EsIDB4ZDEsIDB4OTQsIDB4MmIsIDB4MTUsCisJMHg0NSwgMHgzYiwgMHhhYywgMHhkYiwgMHhjOSwgMHhjMywgMHhlYywgMHg4YywgMHhmYywgMHhkMSwgMHgyZCwgMHgxZSwKKwkweGQ2LCAweDkxLCAweDg3LCAweDc4LCAweDQ5LCAweDI3LCAweGQwLCAweDViLCAweGMwLCAweDdmLCAweDEyLCAweGY1LAorCTB4N2IsIDB4NTQsIDB4YWIsIDB4ZmIsIDB4ZmUsIDB4OGEsIDB4OTMsIDB4NDMsIDB4NWMsIDB4ZTAsIDB4M2UsIDB4YjYsCisJMHhhOCwgMHgzYywgMHhkNywgMHg3MywgMHgzMiwgMHhiYywgMHhlZiwgMHg5YiwgMHhlMywgMHhkZiwgMHgzOSwgMHg3OCwKKwkweGY5LCAweDAxLCAweGQ0LCAweDRkLCAweGJjLCAweDFiLCAweGE0LCAweDdmLCAweGUxLCAweGY3LCAweDM2LCAweGZmLAorCTB4ZTIsIDB4N2MsIDB4ZjYsIDB4OTMsIDB4ZTcsIDB4ODEsIDB4ZjQsIDB4NTUsIDB4ZjAsIDB4ZTcsIDB4ZTUsIDB4ZDEsCisJMHg4NywgMHg1OCwgMHg1MSwgMHg2YywgMHg0NCwgMHhiOCwgMHg3OCwgMHhjNywgMHhjZSwgMHgzOSwgMHgyYSwgMHhmZiwKKwkweDZlLCAweGYyLCAweGQxLCAweDk2LCAweGYwLCAweGRjLCAweGE1LCAweDhlLCAweGM4LCAweDI3LCAweGY5LCAweGU5LAorCTB4ODQsIDB4NGQsIDB4OTAsIDB4MTcsIDB4Y2UsIDB4OGYsIDB4ZWUsIDB4MjUsIDB4ZDgsIDB4ZmUsIDB4YjgsIDB4MzYsCisJMHgxMiwgMHhkZCwgMHhhOSwgMHg3ZCwgMHg5YywgMHgzZCwgMHg4ZiwgMHg3NCwgMHg3NiwgMHgzNywgMHg3ZSwgMHg4OCwKKwkweDgzLCAweGI0LCAweDIzLCAweGJlLCAweDIyLCAweDllLCAweDg4LCAweDhmLCAweGZjLCAweDQ0LCAweGJjLCAweDI4LAorCTB4MWIsIDB4NWQsIDB4OTcsIDB4OWYsIDB4NjAsIDB4NWQsIDB4YzAsIDB4NGYsIDB4NjksIDB4MjEsIDB4MGQsIDB4OWQsCisJMHg5MCwgMHhhNywgMHgxMSwgMHg2ZCwgMHhhNCwgMHhiYSwgMHhkZSwgMHgxZCwgMHhjNywgMHgwZiwgMHg1YywgMHhjNiwKKwkweGQ1LCAweGIxLCAweDA2LCAweGVmLCAweGExLCAweDQ4LCAweDk3LCAweDdmLCAweDNiLCAweGIyLCAweGE0LCAweDhkLAorCTB4MzQsIDB4ZjgsIDB4OWQsIDB4YTksIDB4YWUsIDB4YjksIDB4OGQsIDB4ODgsIDB4ZGUsIDB4NWEsIDB4OWQsIDB4NDYsCisJMHhiZiwgMHhiYywgMHgyYiwgMHhmZiwgMHgwYywgMHhmNiwgMHhhOSwgMHgzYiwgMHhmOCwgMHhiYiwgMHgxNCwgMHg1NSwKKwkweDQ3LCAweGIxLCAweDZmLCAweGI5LCAweGQ1LCAweDczLCAweGEyLCAweGJmLCAweGQzLCAweGQ5LCAweDFmLCAweGU2LAorCTB4NDMsIDB4NTEsIDB4NmQsIDB4MWMsIDB4ZDUsIDB4NTksIDB4ZWEsIDB4OWUsIDB4N2QsIDB4YWYsIDB4ZTcsIDB4NjgsCisJMHhjOCwgMHg0ZiwgMHg5OSwgMHgzMywgMHgwNSwgMHgzYSwgMHgwOCwgMHhmMSwgMHhkZSwgMHg5MSwgMHhjZiwgMHg5MSwKKwkweDI2LCAweDNlLCAweDQ3LCAweGMxLCAweGU3LCAweDNlLCAweGYwLCAweDM5LCAweDc2LCAweDhiLCAweGNmLCAweDViLAorCTB4YjYsIDB4OTcsIDB4MjksIDB4YzMsIDB4ZjYsIDB4NDYsIDB4ZDYsIDB4YjUsIDB4YmQsIDB4NTUsIDB4M2EsIDB4YWIsCisJMHg3MywgMHg4MywgMHhmYiwgMHg5YSwgMHg5MSwgMHg4NiwgMHgyZiwgMHhjNywgMHg5ZCwgMHg4ZiwgMHg1MywgMHgzNywKKwkweGI3LCAweGNiLCAweDk5LCAweDg1LCAweGJiLCAweGQ1LCAweGI3LCAweDExLCAweGFmLCAweDJhLCAweDc3LCAweDk0LAorCTB4NGIsIDB4ZjUsIDB4ODAsIDB4OWYsIDB4MWYsIDB4MmYsIDB4YjEsIDB4M2QsIDB4MTIsIDB4ZWEsIDB4OGEsIDB4M2EsCisJMHhjYiwgMHgzYSwgMHgyNSwgMHhiOSwgMHgxYiwgMHgyZiwgMHhiZiwgMHhmOCwgMHg5YywgMHg3NiwgMHhhNSwgMHgxMiwKKwkweDlkLCAweDRmLCAweDVhLCAweDc4LCAweGM2LCAweGFlLCAweGU1LCAweDI5LCAweGZhLCAweDZlLCAweDMyLCAweDY2LAorCTB4NDUsIDB4ZjcsIDB4NjcsIDB4MjIsIDB4ZmMsIDB4ZmUsIDB4YzAsIDB4ZWYsIDB4NzUsIDB4NmIsIDB4YmYsIDB4MTMsCisJMHhmMCwgMHg3YywgMHg4YSwgMHg3OCwgMHhkNywgMHg1MywgMHgzYywgMHg5ZiwgMHhjNiwgMHg5YywgMHg2NiwgMHgxOSwKKwkweDVjLCAweGQ4LCAweGE0LCAweDllLCAweGU0LCAweDk4LCAweGU3LCAweGQwLCAweDJmLCAweDRjLCAweGQwLCAweDBjLAorCTB4ZWUsIDB4ZGQsIDB4NmEsIDB4NGIsIDB4YmUsIDB4NWMsIDB4NzQsIDB4MzYsIDB4MDYsIDB4ZTcsIDB4MjgsIDB4NjQsCisJMHhiYSwgMHg2YywgMHhmMSwgMHhmZSwgMHgwYSwgMHgzMSwgMHg4YywgMHg2NywgMHg4MywgMHhiMiwgMHhiNSwgMHgxNiwKKwkweGY1LCAweDVjLCAweDM5LCAweGQwLCAweDBlLCAweDFkLCAweGIzLCAweGRkLCAweGQ2LCAweGNiLCAweGZiLCAweDBhLAorCTB4Y2EsIDB4YmMsIDB4YTAsIDB4ZjYsIDB4MjEsIDB4ZDIsIDB4NzEsIDB4ZjQsIDB4N2QsIDB4YWUsIDB4NTUsIDB4OTYsCisJMHhjMywgMHhiYiwgMHhhZCwgMHhjNSwgMHg4YSwgMHhlZiwgMHhiZiwgMHg4MywgMHgzYywgMHhmYywgMHgzNCwgMHg3NCwKKwkweDVmLCAweGFlLCAweGZmLCAweGNjLCAweDVmLCAweDRlLCAweGYxLCAweDZmLCAweGE1LCAweDIyLCAweDliLCAweGQ4LAorCTB4ZDEsIDB4Y2IsIDB4N2IsIDB4MjAsIDB4ZjgsIDB4OTYsIDB4MWMsIDB4YWYsIDB4ODcsIDB4NjUsIDB4YmYsIDB4NzAsCisJMHg5YywgMHg3ZCwgMHhmZiwgMHgwZCwgMHhiZSwgMHg3ZCwgMHhmZiwgMHhmNCwgMHhhYSwgMHg5ZCwgMHgwMiwgMHhmZSwKKwkweDE3LCAweDMzLCAweGUxLCAweDliLCAweGRkLCAweDkwLCAweDU4LCAweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CiBzdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3Um9kYXRhWygweDI4LzQpICsgMV0gPSB7CkBAIC0xOTQzLDM4NyArMTA1NywyNjQgQEAKIHN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndCc3NbKDB4MTNhNC80KSArIDFdID0geyAweDAgfTsKIHN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndTYnNzWygweDFjLzQpICsgMV0gPSB7IDB4MCB9OwogCi1zdGF0aWMgdTMyIGJueDJfcnYycF9wcm9jMVtdID0gewotCTB4MDAwMDAwMDgsIDB4YWMwMDAwMDEsIDB4MDAwMDAwMGMsIDB4MmY4MDAwMDEsIDB4MDAwMDAwMTAsIDB4MjEzZjAwMDQsCi0JMHgwMDAwMDAxMCwgMHgyMGJmMDAyYywgMHgwMDAwMDAxMCwgMHgyMDNmMDE0MywgMHgwMDAwMDAxOCwgMHg4MDAwZmZmZCwKLQkweDAwMDAwMDEwLCAweGIxYjhiMDE3LCAweDAwMDAwMDBiLCAweDJmZGYwMDAyLCAweDAwMDAwMDAwLCAweDAzZDgwMDAwLAotCTB4MDAwMDAwMDAsIDB4MmMzODAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwgMHgwMDAwMDAwOCwgMHgyZDgwMDEwOCwgMHgwMDAwMDAwOCwgMHgwMjAwMDAwMiwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDBmLCAweDQyZTAwMDFjLCAweDAwMDAwMDEwLCAweDkxODQwYTA4LAotCTB4MDAwMDAwMDgsIDB4MmM4MDAwYjAsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxNTAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAxMCwgMHgyYzYyMDAwMiwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDEyLCAweDAwMDAwMDBiLCAweDJmZGYwMDAyLCAweDAwMDAwMDBjLCAweDFmODAwMDAyLAotCTB4MDAwMDAwMDAsIDB4MmMwNzAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZmZTYsIDB4MDAwMDAwMDgsIDB4MDIwMDAwMDIsCi0JMHgwMDAwMDAwZiwgMHg0MmUwMDAxYywgMHgwMDAwMDAxMCwgMHg5MTg0MGEwOCwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDA4LCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTA4LAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMDQsCi0JMHgwMDAwMDAwYywgMHgxZjgwMDAwMiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmZkOSwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAyLCAweDAwMDAwMDBjLCAweDFmODAwMDAyLCAweDAwMDAwMDAwLCAweDJhZGYwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmEwMDAwMDUsIDB4MDAwMDAwMTgsIDB4ODAwMGZmZDQsIDB4MDAwMDAwMDgsIDB4MDIyNDAwMzAsCi0JMHgwMDAwMDAxOCwgMHgwMDA0MDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDAxNSwgMHgwMDAwMDAxOCwgMHg4MDAwMDAxNywKLQkweDAwMDAwMDE4LCAweDgwMDAwMDFiLCAweDAwMDAwMDE4LCAweDgwMDAwMDRjLCAweDAwMDAwMDE4LCAweDgwMDAwMDhjLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwMGYsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMGUsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMGQsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAwYywgMHgwMDAwMDAxOCwgMHg4MDAwMDBjMiwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwYSwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDA5LCAweDAwMDAwMDE4LCAweDgwMDAwMDA4LCAweDAwMDAwMDE4LCAweDgwMDAwMGZkLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwMDYsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMDUsIDB4MDAwMDAwMTgsIDB4ODAwMDAwZmYsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDEwNCwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwMiwgMHgwMDAwMDAxOCwgMHg4MDAwMDA5OCwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDAwLCAweDAwMDAwMDBjLCAweDFmODAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMTgsIDB4ODAwMGZmYmEsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsCi0JMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwgMHgwMDAwMDAwOCwgMHgyYTAwMDAwMiwgMHgwMDAwMDAxOCwgMHg4MDAwZmZiNSwKLQkweDAwMDAwMDEwLCAweGIxYTBiMDEyLCAweDAwMDAwMDBiLCAweDJmZGYwMDAyLCAweDAwMDAwMDAwLCAweDJjMjAwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmM4MDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsCi0JMHgwMDAwMDAwOCwgMHgyZDgwMDExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwKLQkweDAwMDAwMDBmLCAweDQ3NjAwMDA4LCAweDAwMDAwMDBmLCAweDA2MGUwMDAxLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGY1ODAwMDAsIDB4MDAwMDAwMDAsIDB4MGE2NDAwMDAsIDB4MDAwMDAwMDAsIDB4MGFlNTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYjY2MDAwMCwgMHgwMDAwMDAwMCwgMHgwZDYxMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDAxMywKLQkweDAwMDAwMDBmLCAweDQ3NjAwMDA4LCAweDAwMDAwMDBiLCAweDJmZGYwMDAyLCAweDAwMDAwMDA4LCAweDJjODAwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmQwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxMWMsCi0JMHgwMDAwMDAwZiwgMHgwNjBlMDAwMSwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwMCwgMHgwZjU4MDAwMCwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDAwLCAweDBhNjQwMDAwLCAweDAwMDAwMDAwLCAweDBhZTUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGI2NjAwMDAsIDB4MDAwMDAwMDAsIDB4MGQ2MTAwMDAsIDB4MDAwMDAwMDAsIDB4MDI2MjAwMDAsCi0JMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgzMDlhMDAwMCwgMHgwMDAwMDAwMCwgMHgzMTA0MDAwMCwKLQkweDAwMDAwMDAwLCAweDBjOTYxODAwLCAweDAwMDAwMDA5LCAweDBjOTlmZmZmLCAweDAwMDAwMDA0LCAweGNjOTkzNDAwLAotCTB4MDAwMDAwMTAsIDB4YjE5NjMyMDIsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDAsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsCi0JMHgwMDAwMDAxMCwgMHgwMDIyMDAwMiwgMHgwMDAwMDAwYywgMHgyOTUyMDAwMSwgMHgwMDAwMDAwYywgMHgyOTUyMDAwMCwKLQkweDAwMDAwMDA4LCAweDIyMDAwMDAxLCAweDAwMDAwMDBjLCAweDFmODAwMDAxLCAweDAwMDAwMDAwLCAweDJhZGYwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmEwMDAwMDMsIDB4MDAwMDAwMTgsIDB4ODAwMGZmODMsIDB4MDAwMDAwMTAsIDB4YjFhMGIwMWQsCi0JMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgyYzIwMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDA4LCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTUwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1ZjAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwMDAsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDAwMCwgMHgwMDAwMDAwOCwgMHgyZDgwMDEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDBmLCAweDQ3NjAwMDA4LCAweDAwMDAwMDAwLCAweDA2MGUwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDAsIDB4MGY1ODAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYTY0MDAwMCwgMHgwMDAwMDAwMCwgMHgwYWU1MDAwMCwgMHgwMDAwMDAwMCwgMHgwYjY3MDAwMCwKLQkweDAwMDAwMDAwLCAweDBkNjIwMDAwLCAweDAwMDAwMDAwLCAweDBjZTcxODAwLCAweDAwMDAwMDA5LCAweDBjOTlmZmZmLAotCTB4MDAwMDAwMDQsIDB4Y2M5OTM0MDAsIDB4MDAwMDAwMTAsIDB4YjE5NjMyMjAsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAxZSwgMHgwMDAwMDAwZiwgMHg0NzYwMDAwOCwgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwKLQkweDAwMDAwMDA4LCAweDJjODAwMGIwLCAweDAwMDAwMDA4LCAweDJkMDAwMDA4LCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmQ4MDAxMmMsIDB4MDAwMDAwMGYsIDB4MDYwZTAwMDEsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwZjU4MDAwMCwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTY0MDAwMCwKLQkweDAwMDAwMDAwLCAweDBhZTUwMDAwLCAweDAwMDAwMDAwLCAweDBiNjcwMDAwLCAweDAwMDAwMDAwLCAweDBkNjIwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDI2MzAwMDAsIDB4MDAwMDAwMGYsIDB4NDc2MjAwMTAsIDB4MDAwMDAwMDAsIDB4MGNlNzE4MDAsCi0JMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgzMTFhMDAwMCwgMHgwMDAwMDAwMCwgMHgzMTg0MDAwMCwKLQkweDAwMDAwMDBiLCAweGMyMDAwMGZmLCAweDAwMDAwMDAyLCAweDQyMDQwMDAwLCAweDAwMDAwMDAxLCAweDMxNjIwODAwLAotCTB4MDAwMDAwMGYsIDB4MDIwZTAwMTAsIDB4MDAwMDAwMDIsIDB4MzE2MjA4MDAsIDB4MDAwMDAwMDksIDB4MGM5OWZmZmYsCi0JMHgwMDAwMDAwNCwgMHhjYzk5MzQwMCwgMHgwMDAwMDAxMCwgMHhiMTk2MzIwMiwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMCwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDBjLCAweDFmODAwMDAxLCAweDAwMDAwMDBjLCAweDYxNDIwMDA2LAotCTB4MDAwMDAwMDgsIDB4MjIwMDAwMDgsIDB4MDAwMDAwMDAsIDB4MmFkZjAwMDAsIDB4MDAwMDAwMDgsIDB4MmEwMDAwMDQsCi0JMHgwMDAwMDAxOCwgMHg4MDAwZmY0MiwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwgMHgwMDAwMDAwOCwgMHgyZDAwMDAwOCwKLQkweDAwMDAwMDEwLCAweDkxYTBiMDA4LCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDBjLCAweDMxNjIwMDE4LAotCTB4MDAwMDAwMDgsIDB4MmQ4MDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsCi0JMHgwMDAwMDAwOCwgMHhhYzAwMDAwMSwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwZSwgMHgwMDAwMDAwMCwgMHgwMzgwYjAwMCwKLQkweDAwMDAwMDBiLCAweDJmZGYwMDAyLCAweDAwMDAwMDAwLCAweDJjMDA0MDAwLCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmQ4MDAxMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsCi0JMHgwMDAwMDAwYywgMHgzMTYyMDAxOCwgMHgwMDAwMDAwOCwgMHgyZDgwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDBiLCAweDJmZGYwMDAyLCAweDAwMDAwMDAwLCAweDJjMDAwZTAwLAotCTB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsIDB4MDAwMDAwMGMsIDB4MWY4MDAwMDEsIDB4MDAwMDAwMDgsIDB4MmEwMDAwMDcsCi0JMHgwMDAwMDAxOCwgMHg4MDAwZmYyNywgMHgwMDAwMDAxMCwgMHhiMWEwYjAxNiwgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwKLQkweDAwMDAwMDAwLCAweDAzZDgwMDAwLCAweDAwMDAwMDAwLCAweDJjMjAwMDAwLCAweDAwMDAwMDA4LCAweDJjODAwMGIwLAotCTB4MDAwMDAwMDgsIDB4MmQwMDAwMDgsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxNTAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgyMDVmMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDAwMCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTA4LCAweDAwMDAwMDA4LCAweDA3MDAwMDAxLAotCTB4MDAwMDAwMTAsIDB4YjVkZTFjMDAsIDB4MDAwMDAwMTAsIDB4MmM2MjAwMDIsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMGEsCi0JMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgyYzA3MDAwMCwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDE4LCAweDgwMDBmZjExLCAweDAwMDAwMDA4LCAweDJjODAwMGIwLAotCTB4MDAwMDAwMDgsIDB4MmQwMDAwMDgsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxMDgsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwKLQkweDAwMDAwMDAwLCAweDJhZGYwMDAwLCAweDAwMDAwMDA4LCAweDJhMDAwMDBhLCAweDAwMDAwMDE4LCAweDgwMDBmZjA3LAotCTB4MDAwMDAwMDAsIDB4ODIyNjU2MDAsIDB4MDAwMDAwMGYsIDB4NDcyMjAwMDgsIDB4MDAwMDAwMDksIDB4MDcwZTAwMGYsCi0JMHgwMDAwMDAwOCwgMHgwNzBlMDAwOCwgMHgwMDAwMDAwOCwgMHgwMjgwMDAwMSwgMHgwMDAwMDAwNywgMHgwMjg1MWMwMCwKLQkweDAwMDAwMDA4LCAweDgyODUwMDAxLCAweDAwMDAwMDAwLCAweDAyODQwYTAwLCAweDAwMDAwMDA3LCAweDQyODUxYzAwLAotCTB4MDAwMDAwMDMsIDB4YzNhYTUyMDAsIDB4MDAwMDAwMDAsIDB4MDNiMTBlMDAsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsCi0JMHgwMDAwMDAwZiwgMHgwZjI4MDAwNywgMHgwMDAwMDAwNywgMHg0YjA3MWMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDBmLCAweDBhOTYwMDAzLCAweDAwMDAwMDAwLCAweDBhOTU1YzAwLCAweDAwMDAwMDAwLCAweDRhMDA1YTAwLAotCTB4MDAwMDAwMDAsIDB4MGM5NjBhMDAsIDB4MDAwMDAwMDksIDB4MGM5OWZmZmYsIDB4MDAwMDAwMDgsIDB4MGQwMGZmZmYsCi0JMHgwMDAwMDAxMCwgMHhiMTk2MzIwMiwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwNSwgMHgwMDAwMDAxMCwgMHgwMDIyMDAyMCwKLQkweDAwMDAwMDAwLCAweDAyYTcwMDAwLCAweDAwMDAwMDEwLCAweGIxODUwMDAyLCAweDAwMDAwMDA4LCAweDgyODUwMjAwLAotCTB4MDAwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNhNjAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwNGUsCi0JMHgwMDAwMDAwMCwgMHgwNzJiMDAwMCwgMHgwMDAwMDAwMSwgMHg4NzhjMWMwMCwgMHgwMDAwMDAwMCwgMHg4NzBlMWUwMCwKLQkweDAwMDAwMDAwLCAweDg2MGMxZTAwLCAweDAwMDAwMDAwLCAweDAzMDYxZTAwLCAweDAwMDAwMDEwLCAweGIxOGUwMDAzLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwNDcsIDB4MDAwMDAwMTgsIDB4ODAwMGZmZmEsIDB4MDAwMDAwMTAsIDB4OTE4YzAwMDMsCi0JMHgwMDAwMDAxMCwgMHhiMTg3MDAwMiwgMHgwMDAwMDAxOCwgMHg4MDAwMDA0MywgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDAwLCAweDJhODYwMDAwLCAweDAwMDAwMDAwLCAweDIzMGMwMDAwLAotCTB4MDAwMDAwMDAsIDB4MmIwNzAwMDAsIDB4MDAwMDAwMTAsIDB4YjE4NzAwMGUsIDB4MDAwMDAwMDgsIDB4MmEwMDAwMDgsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAzYiwgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwgMHgwMDAwMDAwMCwgMHgyOGQxOGMwMCwKLQkweDAwMDAwMDAwLCAweDJhODYwMDAwLCAweDAwMDAwMDAwLCAweDIzMGMwMDAwLCAweDAwMDAwMDAwLCAweDJiMDcwMDAwLAotCTB4MDAwMDAwMTgsIDB4ODAwMGZmZjgsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsCi0JMHgwMDAwMDAwMCwgMHgyYWFiMDAwMCwgMHgwMDAwMDAwMCwgMHhhMzI2NTYwMCwgMHgwMDAwMDAwMCwgMHgyYjAwMDAwMCwKLQkweDAwMDAwMDBjLCAweDFmODAwMDAxLCAweDAwMDAwMDA4LCAweDJhMDAwMDA4LCAweDAwMDAwMDE4LCAweDgwMDBmZWM4LAotCTB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsIDB4MDAwMDAwMGMsIDB4MWY4MDAwMDEsCi0JMHgwMDAwMDAwOCwgMHgyYTAwMDAwOSwgMHgwMDAwMDAxOCwgMHg4MDAwZmVjMywgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDBjLCAweDFmODAwMDAxLCAweDAwMDAwMDAwLCAweDI5NDIwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmEwMDAwMDIsIDB4MDAwMDAwMTgsIDB4ODAwMGZlYmQsIDB4MDAwMDAwMTgsIDB4ODAwMGZlYmMsCi0JMHgwMDAwMDAxMCwgMHhiMWJjYjAxNiwgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgwM2Q4MDAwMCwKLQkweDAwMDAwMDAwLCAweDJjM2MwMDAwLCAweDAwMDAwMDA4LCAweDJjODAwMGIwLCAweDAwMDAwMDA4LCAweDJkMDAwMDA4LAotCTB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHgyMDVmMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDAwMCwgMHgwMDAwMDAwOCwgMHgyZDAwMDAwMCwKLQkweDAwMDAwMDA4LCAweDJkODAwMTA4LCAweDAwMDAwMDA4LCAweDA3MDAwMDAxLCAweDAwMDAwMDEwLCAweGI1ZGUxYzAwLAotCTB4MDAwMDAwMTAsIDB4MmM2MjAwMDIsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMGEsIDB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsCi0JMHgwMDAwMDAwMCwgMHgyYzA3MDAwMCwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMCwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwKLQkweDAwMDAwMDE4LCAweDgwMDBmZWE2LCAweDAwMDAwMDA4LCAweDJjODAwMGIwLCAweDAwMDAwMDA4LCAweDJkMDAwMDA4LAotCTB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxMDgsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDAsCi0JMHgwMDAwMDAwYywgMHgxZjgwMDAwMCwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwMCwgMHgyYWRmMDAwMCwKLQkweDAwMDAwMDA4LCAweDJhMDAwMDA2LCAweDAwMDAwMDE4LCAweDgwMDBmZTljLCAweDAwMDAwMDA4LCAweDAzMDUwMDA0LAotCTB4MDAwMDAwMDYsIDB4ODMwNDBjMDAsIDB4MDAwMDAwMDgsIDB4MDI4NTAyMDAsIDB4MDAwMDAwMDAsIDB4ODYwNTBjMDAsCi0JMHgwMDAwMDAwMSwgMHg4NjBjMGUwMCwgMHgwMDAwMDAwOCwgMHgwMjA0MDAwNCwgMHgwMDAwMDAwMCwgMHgwMjA0MTgwMCwKLQkweDAwMDAwMDAwLCAweDgzODcxODAwLCAweDAwMDAwMDE4LCAweDAwMDIwMDAwIH07CitzdGF0aWMgdTggYm54Ml9ydjJwX3Byb2MxW10gPSB7CisJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHg1ZSwgMHhkMCwgMHg0MSwgMHg0NCwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGM1LCAweDU2LCAweGNmLCAweDZiLAorCTB4MTMsIDB4NTEsIDB4MTAsIDB4OWUsIDB4ZWMsIDB4NmUsIDB4YjIsIDB4ZGIsIDB4NzQsIDB4YmIsIDB4MWIsIDB4MmIsCisJMHhkYSwgMHhhMCwgMHhiMSwgMHg4ZCwgMHg1MSwgMHg2YSwgMHg3ZiwgMHhhNCwgMHhiNCwgMHgxMSwgMHgwZiwgMHg4MiwKKwkweDQyLCAweDI1LCAweDNkLCAweDA0LCAweDU0LCAweDQ0LCAweDdhLCAweDI4LCAweDIyLCAweDgyLCAweDM2LCAweDhhLAorCTB4ZmUsIDB4MWIsIDB4YTEsIDB4M2YsIDB4ZDIsIDB4NGIsIDB4MTAsIDB4N2EsIDB4YjAsIDB4NTgsIDB4ZjEsIDB4NTAsCisJMHgxMCwgMHgyYSwgMHg2OCwgMHgwZiwgMHhjOSwgMHhhMSwgMHgyMCwgMHg1MiwgMHgxMSwgMHhkYSwgMHg4YiwgMHgwNywKKwkweDJmLCAweDQyLCAweDBmLCAweDdhLCAweDY5LCAweGJkLCAweGE4LCAweGZmLCAweDgyLCAweDA4LCAweDRkLCAweDdjLAorCTB4NmYsIDB4NjYsIDB4OWUsIDB4ZWUsIDB4NmUsIDB4YjIsIDB4NGQsIDB4MTUsIDB4YzEsIDB4ODUsIDB4ZjYsIDB4ZTMsCisJMHhiZCwgMHg5ZCwgMHg3OSwgMHgzMywgMHhmMywgMHhjZCwgMHgzNywgMHhmYiwgMHg2MiwgMHgwMSwgMHg0MCwgMHgwNCwKKwkweDYwLCAweGNkLCAweDQ2LCAweDJjLCAweDhkLCAweDI2LCAweDA0LCAweDFhLCAweDMwLCAweDdlLCAweDUyLCAweDYyLAorCTB4MTYsIDB4ZGUsIDB4YTYsIDB4MjUsIDB4NGUsIDB4NDQsIDB4YzYsIDB4ZDMsIDB4NDksIDB4ODEsIDB4N2IsIDB4MGQsCisJMHgyOCwgMHhjOSwgMHg3NSwgMHg0ZiwgMHhmNSwgMHg1NSwgMHhhZCwgMHg1MywgMHhhMCwgMHgwNiwgMHhiYiwgMHhhMywKKwkweDgwLCAweGNmLCAweDQ3LCAweDlkLCAweGYwLCAweDdjLCAweGQ2LCAweDQyLCAweDJjLCAweDMxLCAweGMyLCAweDQ4LAorCTB4MDIsIDB4NjEsIDB4N2IsIDB4NTEsIDB4YWUsIDB4YWQsIDB4NDgsIDB4NjksIDB4YzQsIDB4NDIsIDB4M2YsIDB4ZDAsCisJMHg2OCwgMHg3ZiwgMHg2NywgMHhkMSwgMHgxNSwgMHhmZiwgMHg1MywgMHhmMCwgMHgzOSwgMHgyZiwgMHhkNywgMHg1NiwKKwkweDdjLCAweDBlLCAweGVkLCAweGFhLCAweGVjLCAweDJmLCAweGZlLCAweGQwLCAweGZlLCAweGJhLCAweGYwLCAweDAzLAorCTB4N2UsIDB4OTQsIDB4NWYsIDB4MDIsIDB4Y2YsIDB4MjksIDB4NjYsIDB4NjUsIDB4NWUsIDB4ZGQsIDB4MjIsIDB4YTAsCisJMHhjYSwgMHhjNywgMHg0NiwgMHgyYywgMHhmNSwgMHg5MSwgMHhiNSwgMHg4OSwgMHhlZiwgMHhiZiwgMHg4YSwgMHhiYywKKwkweDU1LCAweGRjLCAweDc2LCAweGYxLCAweDgyLCAweGY5LCAweDA2LCAweGUzLCAweDI2LCAweDkxLCAweDFmLCAweDI4LAorCTB4ZjksIDB4ZTMsIDB4MDAsIDB4YzgsIDB4ZmQsIDB4NGYsIDB4OGQsIDB4NWYsIDB4ZmIsIDB4ODMsIDB4ZmUsIDB4ZjcsCisJMHhiYiwgMHg0MywgMHhmMiwgMHhiYywgMHgyOCwgMHhjMCwgMHg5MCwgMHhiNCwgMHhkYiwgMHhlNiwgMHg3YywgMHhjNiwKKwkweGUwLCAweGI0LCAweDk2LCAweGM0LCAweGY3LCAweDA2LCAweGZhLCAweDFmLCAweDExLCAweGU3LCAweDRhLCAweGVjLAorCTB4NjEsIDB4M2MsIDB4Y2UsIDB4NzgsIDB4OTUsIDB4YjEsIDB4YzIsIDB4ZTgsIDB4MzIsIDB4M2EsIDB4OGMsIDB4NWQsCisJMHg4YywgMHgzNiwgMHhlMywgMHgyNiwgMHg2MywgMHg5YywgMHhiMSwgMHg4MywgMHhkMSwgMHg2MiwgMHhkYywgMHg2MywKKwkweDhjLCAweDMxLCAweDQ2LCAweDE5LCAweDFiLCAweDhjLCAweDQ2LCAweDg0LCAweDUwLCAweGUzLCAweGY1LCAweDYzLAorCTB4NDYsIDB4ZTAsIDB4YmEsIDB4MjMsIDB4ODEsIDB4YmEsIDB4NWYsIDB4YjMsIDB4MmUsIDB4MjQsIDB4NmYsIDB4ZmMsCisJMHg3ZSwgMHg1MCwgMHhkOSwgMHgzMSwgMHhlZiwgMHg1OCwgMHhmNywgMHgzYSwgMHhkYiwgMHg3NSwgMHg1NywgMHg1NywKKwkweDAyLCAweGZhLCAweDQ5LCAweGVmLCAweGFiLCAweDliLCAweDU0LCAweDhiLCAweDNlLCAweGI4LCAweDU4LCAweGNmLAorCTB4OWQsIDB4ODIsIDB4OGIsIDB4NzEsIDB4OWMsIDB4MTgsIDB4ZWQsIDB4YWIsIDB4YjQsIDB4NmUsIDB4YjgsIDB4ODQsCisJMHhmNywgMHhlMiwgMHg4NCwgMHg1ZiwgMHgxOCwgMHhlZiwgMHg3NywgMHgxMiwgMHg0ZSwgMHg3NywgMHhjOSwgMHg3YywKKwkweDBlLCAweDhiLCAweDgwLCAweGVhLCAweDFjLCAweDk1LCAweDRmLCAweGJiLCAweDNjLCAweGMyLCAweGUyLCAweGE5LAorCTB4YmMsIDB4ZGEsIDB4YzUsIDB4MjUsIDB4MmMsIDB4NmEsIDB4ZmUsIDB4ZmEsIDB4OWYsIDB4OGMsIDB4MTEsIDB4MWEsCisJMHgzOSwgMHgyMiwgMHg3NSwgMHhjOSwgMHgxNiwgMHgzZCwgMHg4MywgMHg0NiwgMHg2MywgMHhkOSwgMHgzNiwgMHhlNCwKKwkweGZhLCAweGRjLCAweGYyLCAweDdiLCAweGQ0LCAweGZiLCAweGQ5LCAweGE1LCAweDFhLCAweGU3LCAweGU3LCAweDJhLAorCTB4OWUsIDB4NjksIDB4MGUsIDB4MzIsIDB4NDAsIDB4ZWIsIDB4NDksIDB4ZTQsIDB4MWQsIDB4MDQsIDB4NWEsIDB4YjgsCisJMHg4NiwgMHg4YywgMHhiZiwgMHg1ZiwgMHhhNCwgMHg0MywgMHg5ZCwgMHhmYiwgMHgzMSwgMHhjYiwgMHhmZCwgMHgzOCwKKwkweDExLCAweGQyLCAweDhmLCAweGIwLCAweGI5LCAweDY4LCAweDllLCAweGM3LCAweGRiLCAweGU5LCAweDIwLCAweDZmLAorCTB4NjEsIDB4ZjMsIDB4YTMsIDB4ZjgsIDB4YTYsIDB4ZGQsIDB4M2YsIDB4ZTUsIDB4ZjEsIDB4MDEsIDB4ZjMsIDB4NTgsCisJMHgyNCwgMHgxZSwgMHg5MywgMHhkZiwgMHg1YSwgMHhmMiwgMHg5NCwgMHhmNiwgMHhmMCwgMHgyNCwgMHhlYiwgMHhlYywKKwkweDBkLCAweGU5LCAweDczLCAweDU4LCAweDdkLCAweGQ5LCAweGJmLCAweGVlLCAweDczLCAweDIwLCAweDNmLCAweGI4LAorCTB4OGIsIDB4ZGYsIDB4OWIsIDB4MDQsIDB4MTQsIDB4MGIsIDB4MmEsIDB4NWYsIDB4M2YsIDB4Y2YsIDB4YzcsIDB4YTgsCisJMHhkZiwgMHgzMCwgMHg5NywgMHg5MywgMHhmYiwgMHg2MiwgMHhmZSwgMHgzNiwgMHgzNSwgMHg1YywgMHgxYiwgMHhmOSwKKwkweDg4LCAweDA0LCAweGFiLCAweDk4LCAweDIzLCAweDdmLCAweDQ3LCAweGQzLCAweDc4LCAweDdkLCAweDUwLCAweDVkLAorCTB4YTgsIDB4YmUsIDB4NGIsIDB4OGMsIDB4NDEsIDB4N2UsIDB4OWEsIDB4ZWIsIDB4Y2MsIDB4NTAsIDB4M2MsIDB4ZDIsCisJMHg4MSwgMHhjMSwgMHgzYSwgMHhjOCwgMHhmMywgMHhmNywgMHgyOCwgMHhjOCwgMHg4NywgMHg1NSwgMHg1ZCwgMHg1OSwKKwkweGY0LCAweGNlLCAweDc1LCAweDEyLCAweDhhLCAweDM5LCAweGQyLCAweDU1LCAweDczLCAweDVmLCAweDU5LCAweDZmLAorCTB4NmIsIDB4ZWEsIDB4YmIsIDB4ODQsIDB4ZGIsIDB4ZDUsIDB4OTIsIDB4ZWUsIDB4YWIsIDB4ZjcsIDB4MTIsIDB4NjQsCisJMHhiZCwgMHgzYywgMHg0NywgMHg1YSwgMHhlOCwgMHhhMywgMHg1ZCwgMHgxYywgMHhkZiwgMHg3OSwgMHgwZSwgMHg2NCwKKwkweDViLCAweDdkLCAweDZmLCAweDRjLCAweGFlLCAweGViLCAweDBjLCAweGViLCAweGZiLCAweDY4LCAweDkzLCAweGJlLAorCTB4ZDUsIDB4N2QsIDB4ZjUsIDB4ZWYsIDB4NzQsIDB4Y2UsIDB4ZjUsIDB4OWIsIDB4NjgsIDB4OTcsIDB4ZGEsIDB4NTksCisJMHhmNywgMHhkZSwgMHg0ZiwgMHg3MSwgMHhjZiwgMHhmZCwgMHg0NCwgMHg2ZSwgMHhhNiwgMHhjYSwgMHhiYiwgMHhjZiwKKwkweDdiLCAweGFmLCAweDFjLCAweDBhLCAweGU5LCAweDgzLCAweGY3LCAweDNlLCAweDBhLCAweGQ2LCAweGViLCAweGQ3LAorCTB4MjMsIDB4ZjUsIDB4MzUsIDB4Y2UsIDB4ZjUsIDB4OWIsIDB4MGQsIDB4ZWUsIDB4YzMsIDB4NTQsIDB4ZmYsIDB4MGMsCisJMHhlOSwgMHgzZiwgMHg1MywgMHg5MCwgMHhmYSwgMHg3MSwgMHhjMSwgMHgzMSwgMHhlOSwgMHg3YywgMHg0MiwgMHg3MSwKKwkweDhlLCAweDY2LCAweDYyLCAweGRlLCAweGYzLCAweDFhLCAweGFkLCAweGU3LCAweDY3LCAweGQwLCAweDJmLCAweDNlLAorCTB4YTcsIDB4ZjYsIDB4ZjMsIDB4NDgsIDB4ZDgsIDB4ZTQsIDB4OGIsIDB4MmQsIDB4ZTIsIDB4YmQsIDB4YTYsIDB4YWIsCisJMHhiOSwgMHg3MCwgMHg5MSwgMHhlZiwgMHgwMSwgMHg5NywgMHhlYywgMHhjYywgMHgyYiwgMHg4YSwgMHgyZiwgMHhiOSwKKwkweGFmLCAweGMzLCAweDEyLCAweGNkLCAweGM1LCAweGFkLCAweDQ3LCAweDg0LCAweDM3LCAweGUxLCAweDMyLCAweDlkLAorCTB4ZmIsIDB4ZmIsIDB4ZmIsIDB4NjYsIDB4MjEsIDB4NDIsIDB4OTcsIDB4NTcsIDB4YzcsIDB4NTEsIDB4YTEsIDB4NjMsCisJMHg5YywgMHg2MywgMHgyNSwgMHg1NywgMHg3OCwgMHhhZSwgMHgxMSwgMHg5ZiwgMHhmMywgMHhhNCwgMHg3MywgMHg4ZCwKKwkweGYzLCAweGMzLCAweGFiLCAweDQ1LCAweDNlLCAweGFiLCAweGJhLCAweGFjLCAweGY3LCAweDlhLCAweGQyLCAweDFkLAorCTB4MGMsIDB4OWIsIDB4MzgsIDB4M2YsIDB4YTksIDB4Y2EsIDB4MDIsIDB4MmUsIDB4N2IsIDB4MWQsIDB4NDYsIDB4YmIsCisJMHg0YywgMHgxOCwgMHhjMywgMHhmYywgMHg3NSwgMHg3OCwgMHg1OCwgMHg5MywgMHg3ZSwgMHgwNSwgMHhiZSwgMHhkZiwKKwkweDdlLCAweGIwLCAweDVlLCAweDc0LCAweGE4LCAweGYwLCAweGVmLCAweDhiLCAweDA1LCAweDdjLCAweDNmLCAweDAxLAorCTB4Y2QsIDB4ZjcsIDB4MWIsIDB4YzUsIDB4MjksIDB4MGYsIDB4MTEsIDB4ZGEsIDB4YTcsIDB4YjgsIDB4YWYsIDB4YzMsCisJMHhkMiwgMHhjZSwgMHgxMSwgMHg3ZSwgMHhkYywgMHgzZiwgMHhlYywgMHhjMywgMHgwNSwgMHg4ZiwgMHgzZiwgMHg0MiwKKwkweGU1LCAweGMzLCAweDQwLCAweDk4LCAweGJmLCAweGI0LCAweGZmLCAweGRlLCAweGUyLCAweDNlLCAweGE1LCAweGY3LAorCTB4MmYsIDB4YzksIDB4N2UsIDB4YWEsIDB4ZmYsIDB4MTksIDB4ZDcsIDB4M2YsIDB4ZWMsIDB4ZDUsIDB4YmQsIDB4OGEsCisJMHhmNywgMHhhZSwgMHhiZSwgMHhmZiwgMHg3ZCwgMHhkYywgMHhjMSwgMHg3NiwgMHg1YiwgMHhmYiwgMHhkOCwgMHhkMSwKKwkweGYxLCAweGY5LCAweDQxLCAweGVmLCAweGZkLCAweGZkLCAweGE2LCAweDRlLCAweDNjLCAweDZkLCAweGQ0LCAweGQ1LAorCTB4NWMsIDB4NmQsIDB4ODQsIDB4Y2MsIDB4ZDUsIDB4YzUsIDB4ZmYsIDB4M2EsIDB4NTcsIDB4MTAsIDB4OTgsIDB4YWIsCisJMHhkNSwgMHhmYSwgMHhjMSwgMHhlNiwgMHgwYSwgMHhiOCwgMHg3ZSwgMHgwOCwgMHg5OSwgMHhhYiwgMHgxOCwgMHhmMywKKwkweGYwLCAweDk0LCAweGNmLCAweDMzLCAweDIwLCAweGFhLCAweGM3LCAweGIwLCAweDdkLCAweGM2LCAweDJjLCAweGViLAorCTB4OTIsIDB4ZjQsIDB4NjgsIDB4NDcsIDB4Y2IsIDB4YTgsIDB4M2YsIDB4YzcsIDB4MmUsIDB4OTMsIDB4OWQsIDB4NDEsCisJMHhmYiwgMHg0OSwgMHg4NSwgMHgwYiwgMHhiMywgMHhmNCwgMHg3YiwgMHg0YSwgMHg4MywgMHg5ZiwgMHg5NCwgMHgxNSwKKwkweDEyLCAweDNkLCAweDgwLCAweDBiLCAweDAwLCAweDAwLCAweDAwIH07CiAKLXN0YXRpYyB1MzIgYm54Ml9ydjJwX3Byb2MyW10gPSB7Ci0JMHgwMDAwMDAwMCwgMHgyYTAwMDAwMCwgMHgwMDAwMDAxMCwgMHhiMWQ0MDAwMCwgMHgwMDAwMDAwOCwgMHgwMjU0MDAwMywKLQkweDAwMDAwMDE4LCAweDAwMDQwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDBhLCAweDAwMDAwMDE4LCAweDgwMDAwMDBhLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwMGUsIDB4MDAwMDAwMTgsIDB4ODAwMDAwNTYsIDB4MDAwMDAwMTgsIDB4ODAwMDAxYjksCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDFlMSwgMHgwMDAwMDAxOCwgMHg4MDAwMDE5YiwgMHgwMDAwMDAxOCwgMHg4MDAwMDFmOSwKLQkweDAwMDAwMDE4LCAweDgwMDAwMTlmLCAweDAwMDAwMDE4LCAweDgwMDAwMWE2LCAweDAwMDAwMDE4LCAweDgwMDAwMDAwLAotCTB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsIDB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDAsCi0JMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmZlZSwgMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDAwLCAweDJmODBhYTAwLAotCTB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MGQ2MTAwMDAsIDB4MDAwMDAwMDAsIDB4MDM2MjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyYzQwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMjYzOGMwMCwgMHgwMDAwMDAwMCwgMHgyNjQ2MDAwMCwKLQkweDAwMDAwMDEwLCAweDAwNDIwMDAyLCAweDAwMDAwMDA4LCAweDAyMDQwMDEyLCAweDAwMDAwMDEwLCAweGI5MDYwODM2LAotCTB4MDAwMDAwMDAsIDB4MGY1ODAwMDAsIDB4MDAwMDAwMDAsIDB4MGE2NDAwMDAsIDB4MDAwMDAwMDAsIDB4MGFlNTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYjY2MDAwMCwgMHgwMDAwMDAwMCwgMHgwYzAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwYjgwMDAwMCwKLQkweDAwMDAwMDEwLCAweDAwNDIwMDA5LCAweDAwMDAwMDA4LCAweDBjYzYwMDEyLCAweDAwMDAwMDA4LCAweDBmODAwMDAzLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsIDB4MDAwMDAwMDgsIDB4MjcxMTAwMTIsCi0JMHgwMDAwMDAwMCwgMHg2NjkwMDAwMCwgMHgwMDAwMDAwOCwgMHhhMzFiMDAxMiwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwOCwKLQkweDAwMDAwMDAwLCAweDBjYzYwMDAwLCAweDAwMDAwMDA4LCAweDBmODAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsIDB4MDAwMDAwMDAsIDB4MjcxMTAwMDAsIDB4MDAwMDAwMDAsIDB4NjY5MDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyMzFiMDAwMCwgMHgwMDAwMDAxMCwgMHhiMTk3MzIwZSwgMHgwMDAwMDAwMCwgMHgyNTk2MDAwMCwKLQkweDAwMDAwMDAwLCAweDAyMWIwMDAwLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDA4LCAweDBmODAwMDAzLAotCTB4MDAwMDAwMGMsIDB4Mjk4MDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMDAsIDB4MjJjNTA4MDAsCi0JMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwgMHgwMDAwMDAwMCwgMHgyNzAwMjIwMCwgMHgwMDAwMDAwMCwgMHgyNjgwMjAwMCwKLQkweDAwMDAwMDAwLCAweDIzMWIwMDAwLCAweDAwMDAwMDBjLCAweDY5NTIwMDAxLCAweDAwMDAwMDE4LCAweDgwMDBmZmYzLAotCTB4MDAwMDAwMTAsIDB4MDExMzAwMDIsIDB4MDAwMDAwMTAsIDB4YjE5ODAwMDMsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsCi0JMHgwMDAwMDAwOCwgMHgwZjgwMDAwNCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAwMywgMHgwMDAwMDAwOCwgMHgyYzgwMDAwYywKLQkweDAwMDAwMDA4LCAweDJkMDAwMDBjLCAweDAwMDAwMDEwLCAweDAwOWYwMDAwLCAweDAwMDAwMDAwLCAweDI1OTYwMDAwLAotCTB4MDAwMDAwMGMsIDB4Mjk4MDAwMDAsIDB4MDAwMDAwMDAsIDB4MzIxNDAwMDAsIDB4MDAwMDAwMDAsIDB4MzI5NTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgzMzE2MDAwMCwgMHgwMDAwMDAwMCwgMHgzMWUzMmUwMCwgMHgwMDAwMDAwOCwgMHgyZDgwMDAxMCwKLQkweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDE4LCAweDgwMDBmZmFjLCAweDAwMDAwMDAwLCAweDIzMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjVlNjAwMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMGIsIDB4MDAwMDAwMGMsIDB4Njk1MjAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMCwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmZhNSwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDAwLCAweDJmZDUwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDAsIDB4MDI3MDAwMDAsIDB4MDAwMDAwMDAsIDB4MGQ2MjAwMDAsCi0JMHgwMDAwMDAwMCwgMHhiYjYzMDgwMCwgMHgwMDAwMDAwMCwgMHgyYTAwMDAwMCwgMHgwMDAwMDAwOSwgMHgwNzYwMDBmZiwKLQkweDAwMDAwMDBmLCAweDJjMGUwMDA3LCAweDAwMDAwMDA4LCAweDJjODAwMDAwLCAweDAwMDAwMDA4LCAweDJkMDAwMDY0LAotCTB4MDAwMDAwMDgsIDB4MmQ4MDAxMWMsIDB4MDAwMDAwMDksIDB4MDY0MjAwMDIsIDB4MDAwMDAwMGMsIDB4NjE0MjAwMDEsCi0JMHgwMDAwMDAwMCwgMHgwZjQwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMmQwOGMwMCwgMHgwMDAwMDAwMCwgMHgyMzAwMDAwMCwKLQkweDAwMDAwMDA0LCAweDgyNmRhMDAwLCAweDAwMDAwMDAwLCAweDgzMDRhMDAwLCAweDAwMDAwMDAwLCAweDIyYzUwYzAwLAotCTB4MDAwMDAwMDAsIDB4MDM3NjAwMDAsIDB4MDAwMDAwMDQsIDB4ODM4NjBhMDAsIDB4MDAwMDAwMDAsIDB4ODM4NzBjMDAsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwMCwgMHgwMzdjMDAwMCwgMHgwMDAwMDAwMCwgMHg4MzdiMGMwMCwKLQkweDAwMDAwMDAxLCAweDgzMDYwZTAwLCAweDAwMDAwMDAwLCAweDgzODcwYzAwLCAweDAwMDAwMDAwLCAweDgyODUwZTAwLAotCTB4MDAwMDAwMTAsIDB4YjE4NjAwMTYsIDB4MDAwMDAwMGYsIDB4NDc2MTAwMTgsIDB4MDAwMDAwMDAsIDB4MDY4ZTAwMDAsCi0JMHgwMDAwMDAwZiwgMHg0NzY3MDAxMCwgMHgwMDAwMDAwZiwgMHg0N2UyMDAxMCwgMHgwMDAwMDAwMCwgMHg4NzBlMWUwMCwKLQkweDAwMDAwMDEwLCAweGI3MGUxYTEwLCAweDAwMDAwMDEwLCAweDBjZTcwMDBlLCAweDAwMDAwMDA4LCAweDIyMDAwMDA5LAotCTB4MDAwMDAwMDAsIDB4Mjg2ZDAwMDAsIDB4MDAwMDAwMGYsIDB4NjU2ODAwMTAsIDB4MDAwMDAwMDMsIDB4ZjY2Yzk0MDAsCi0JMHgwMDAwMDAxMCwgMHhiOTcyYTAwMywgMHgwMDAwMDAwYywgMHg3M2U3MDAxOSwgMHgwMDAwMDAwYywgMHgyMTQyMDAwNCwKLQkweDAwMDAwMDE4LCAweDgwMDAwMjNmLCAweDAwMDAwMDAwLCAweDM3ZWQwMDAwLCAweDAwMDAwMDBjLCAweDczZTcwMDFhLAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDgsIDB4MDAwMDAwMGMsIDB4NjE0MjAwMDQsCi0JMHgwMDAwMDAwMCwgMHgwMmY2MDAwMCwgMHgwMDAwMDAwNCwgMHg4Mjg0MGEwMCwgMHgwMDAwMDAxMCwgMHhiMTg0MGEyYiwKLQkweDAwMDAwMDEwLCAweDJkNjcwMDBhLCAweDAwMDAwMDEwLCAweGI5NmQwODA0LCAweDAwMDAwMDA0LCAweGI2ZWQwYTAwLAotCTB4MDAwMDAwMDAsIDB4MzdlZDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMjksIDB4MDAwMDAwMGMsIDB4NjE0MjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgzNzA0MDAwMCwgMHgwMDAwMDAwMCwgMHgzNzg1MDAwMCwgMHgwMDAwMDAwYywgMHgzM2U3MDAxYSwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDI0LCAweDAwMDAwMDEwLCAweGI5NmQwODA5LCAweDAwMDAwMDA0LCAweGI2ZWQwYTAwLAotCTB4MDAwMDAwMDAsIDB4MDM2ZDAwMDAsIDB4MDAwMDAwMDQsIDB4Yjc2ZTBjMDAsIDB4MDAwMDAwMTAsIDB4OTFlZTBjMWYsCi0JMHgwMDAwMDAwYywgMHg3M2U3MDAxYSwgMHgwMDAwMDAwNCwgMHhiNmVmMGMwMCwgMHgwMDAwMDAwMCwgMHgzN2VkMDAwMCwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDFiLCAweDAwMDAwMDBjLCAweDYxNDIwMDAwLCAweDAwMDAwMDEwLCAweGI3ZWUwYTA1LAotCTB4MDAwMDAwMTAsIDB4Yjk2ZjA4MTUsIDB4MDAwMDAwMDMsIDB4Yjc2ZTA4MDAsIDB4MDAwMDAwMDQsIDB4YjdlZjBhMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAxNSwgMHgwMDAwMDAxMCwgMHgwY2U3MDAwYywgMHgwMDAwMDAwOCwgMHgyMjAwMDAwOSwKLQkweDAwMDAwMDAwLCAweDI4NmQwMDAwLCAweDAwMDAwMDBmLCAweDY1NjgwMDEwLCAweDAwMDAwMDAzLCAweGY2NmM5NDAwLAotCTB4MDAwMDAwMTAsIDB4Yjk3MmEwMDMsIDB4MDAwMDAwMGMsIDB4NzNlNzAwMTksIDB4MDAwMDAwMGMsIDB4MjE0MjAwMDQsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDIxNSwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAwOCwKLQkweDAwMDAwMDBjLCAweDYxNDIwMDA0LCAweDAwMDAwMDAwLCAweDM3MDQwMDAwLCAweDAwMDAwMDAwLCAweDM3ODUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDM2ZDAwMDAsIDB4MDAwMDAwMDMsIDB4YjhmMTBjMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMDQsCi0JMHgwMDAwMDAwMCwgMHgwMjg0MDAwMCwgMHgwMDAwMDAwMiwgMHgyMTQyMTgwMCwgMHgwMDAwMDAwYywgMHg2MTQyMDAwMCwKLQkweDAwMDAwMDAwLCAweDI4NmQwMDAwLCAweDAwMDAwMDBmLCAweDY1ZWQwMDEwLCAweDAwMDAwMDA5LCAweDI2NmRmZmZmLAotCTB4MDAwMDAwMDAsIDB4MjMwMDAwMDAsIDB4MDAwMDAwMTAsIDB4YjE4NDBhM2QsIDB4MDAwMDAwMTAsIDB4MDE0MjAwMDIsCi0JMHgwMDAwMDAwNCwgMHhiOGYxMGEwMCwgMHgwMDAwMDAwMywgMHg4Mzc2MGEwMCwgMHgwMDAwMDAxMCwgMHhiODA0MGMzOSwKLQkweDAwMDAwMDEwLCAweGI3ZTYwODBhLCAweDAwMDAwMDAwLCAweDBhNjQwMDAwLCAweDAwMDAwMDAwLCAweDBhZTUwMDAwLAotCTB4MDAwMDAwMDksIDB4MGM2OGZmZmYsIDB4MDAwMDAwMDksIDB4MGI2N2ZmZmYsIDB4MDAwMDAwMDAsIDB4MGJlNjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYzg0MDAwMCwgMHgwMDAwMDAxMCwgMHhiMTk3MzIwYywgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMiwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDBhLCAweDAwMDAwMDAwLCAweDBhNmEwMDAwLCAweDAwMDAwMDAwLCAweDBhZWIwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGMwMDAwMDAsIDB4MDAwMDAwMDksIDB4MGI2Y2ZmZmYsIDB4MDAwMDAwMDAsIDB4MGJlOTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYzg0MDAwMCwgMHgwMDAwMDAxMCwgMHhiMTk3MzIwMywgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMiwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDAxLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDAwLCAweDBjODYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDY5ODAwMDAsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwgMHgwMDAwMDAxMCwgMHhiMTk3MzIxMCwgMHgwMDAwMDAwMCwgMHgyMzFiMDAwMCwKLQkweDAwMDAwMDAwLCAweDAyMDQzNjAwLCAweDAwMDAwMDAzLCAweDgzODRhMDAwLCAweDAwMDAwMDBmLCAweDY1ODcwMDEwLAotCTB4MDAwMDAwMDksIDB4MjYwN2ZmZmYsIDB4MDAwMDAwMDAsIDB4MjcxMTFhMDAsIDB4MDAwMDAwMDAsIDB4NjY5MDAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTAwMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDFkZSwgMHgwMDAwMDAwMCwgMHgwNjk4MDAwMCwKLQkweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDAwLCAweDIyYzU4YzAwLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLAotCTB4MDAwMDAwMDgsIDB4MGY4MDAwMDMsIDB4MDAwMDAwMTgsIDB4ODAwMGZmZjAsIDB4MDAwMDAwMDAsIDB4MDIwNDM2MDAsCi0JMHgwMDAwMDAwMCwgMHgyMzFiMDAwMCwgMHgwMDAwMDAwMywgMHg4Mzg0YTAwMCwgMHgwMDAwMDAwZiwgMHg2NTg3MDAxMCwKLQkweDAwMDAwMDA5LCAweDI2MDdmZmZmLCAweDAwMDAwMDAwLCAweDI3MTExYTAwLCAweDAwMDAwMDAwLCAweDY2OTAwMDAwLAotCTB4MDAwMDAwMGMsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTE4NDBhMDIsIDB4MDAwMDAwMDIsIDB4MjE0MjE4MDAsCi0JMHgwMDAwMDAwMCwgMHgzMjE0MDAwMCwgMHgwMDAwMDAwMCwgMHgzMjk1MDAwMCwgMHgwMDAwMDAwNSwgMHg3M2U3MmMwMCwKLQkweDAwMDAwMDA1LCAweDc0NjgzMDAwLCAweDAwMDAwMDAwLCAweDMzMTcwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMTM4LAotCTB4MDAwMDAwMTAsIDB4OTFjNjAwMDQsIDB4MDAwMDAwMDgsIDB4MDcwMDAwMDQsIDB4MDAwMDAwMTAsIDB4YjFjNDFjMDIsCi0JMHgwMDAwMDAxMCwgMHg5MTg0MGEwNCwgMHgwMDAwMDAxOCwgMHg4MDAwMDFjMywgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwKLQkweDAwMDAwMDAwLCAweDIyYzU4YzAwLCAweDAwMDAwMDEwLCAweGIxODQwYThlLCAweDAwMDAwMDBjLCAweDIxNDIwMDA2LAotCTB4MDAwMDAwMTAsIDB4MGNlNzAwMWEsIDB4MDAwMDAwMGYsIDB4NDM2ODAwMTAsIDB4MDAwMDAwMDAsIDB4MDNmMzBjMDAsCi0JMHgwMDAwMDAxMCwgMHg5MTg3MDg1MCwgMHgwMDAwMDAwZiwgMHg0NmVjMDAxMCwgMHgwMDAwMDAxMCwgMHhiNjhkMGM0ZSwKLQkweDAwMDAwMDAwLCAweDgzOGQwYzAwLCAweDAwMDAwMDAwLCAweGEzMDUwODAwLCAweDAwMDAwMDAxLCAweGEzNDYwZTAwLAotCTB4MDAwMDAwMDAsIDB4MDIwNDhjMDAsIDB4MDAwMDAwMTAsIDB4OTE4NDBhMDIsIDB4MDAwMDAwMDIsIDB4MjE0MjE4MDAsCi0JMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAwOCwgMHgwMDAwMDAwMywgMHg4Mzg0YTAwMCwKLQkweDAwMDAwMDBmLCAweDY1ODcwMDEwLCAweDAwMDAwMDA5LCAweDI2MDdmZmZmLCAweDAwMDAwMDAwLCAweDI3NzUwYzAwLAotCTB4MDAwMDAwMDAsIDB4NjZmNDAwMDAsIDB4MDAwMDAwMGMsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAxYWEsCi0JMHgwMDAwMDAwMCwgMHgwMzA2OGMwMCwgMHgwMDAwMDAwMywgMHhmNDY4MGMwMCwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwKLQkweDAwMDAwMDAwLCAweDIyYzU4YzAwLCAweDAwMDAwMDE4LCAweDgwMDBmZmU1LCAweDAwMDAwMDAwLCAweDM5NzYwMDAwLAotCTB4MDAwMDAwMDAsIDB4Mzk4NDAwMDAsIDB4MDAwMDAwMGMsIDB4MzNlNzAwMTksIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMzFlMDAwMCwgMHgwMDAwMDAwMCwgMHgwNzYwZmUwMCwgMHgwMDAwMDAwZiwgMHgwZjBlMDAwNywKLQkweDAwMDAwMDAwLCAweDgzODUwODAwLCAweDAwMDAwMDAwLCAweDBhN2QwMDAwLCAweDAwMDAwMDAwLCAweDBhZmUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGI3ZjAwMDAsIDB4MDAwMDAwMDAsIDB4MGQ3YTAwMDAsIDB4MDAwMDAwMDAsIDB4MGMwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYmZjMDAwMCwgMHgwMDAwMDAwMCwgMHgwYzk3MGUwMCwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMywKLQkweDAwMDAwMDBmLCAweDQ3NjcwMDEwLCAweDAwMDAwMDA4LCAweDA3MGUwMDAxLCAweDAwMDAwMDBiLCAweGMzODAwMGZmLAotCTB4MDAwMDAwMDIsIDB4NDM4NzAwMDAsIDB4MDAwMDAwMDEsIDB4MzNlNzBlMDAsIDB4MDAwMDAwMGYsIDB4MDM4ZTAwMTAsCi0JMHgwMDAwMDAwMiwgMHgzM2U3MGUwMCwgMHgwMDAwMDAwMCwgMHgyOGYzMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwKLQkweDAwMDAwMDAwLCAweDAyMDQzNjAwLCAweDAwMDAwMDEwLCAweDkxODQwYTAyLCAweDAwMDAwMDAyLCAweDIxNDIxODAwLAotCTB4MDAwMDAwMDgsIDB4MjIwMDAwMDYsIDB4MDAwMDAwMDAsIDB4MjMxYjAwMDAsIDB4MDAwMDAwMDAsIDB4MjNmZjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyNDFiMDAwMCwgMHgwMDAwMDAwMywgMHg4Mzg0YTAwMCwgMHgwMDAwMDAwZiwgMHg2NTg3MDAxMCwKLQkweDAwMDAwMDA5LCAweDI2MDdmZmZmLCAweDAwMDAwMDAwLCAweDI3MTEwMDAwLCAweDAwMDAwMDAwLCAweDI2OTAwMDAwLAotCTB4MDAwMDAwMGMsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAxN2UsIDB4MDAwMDAwMDMsIDB4ZjQ2ODM2MDAsCi0JMHgwMDAwMDAwMCwgMHgzYTEwMDAwMCwgMHgwMDAwMDAwMCwgMHgzYTkxMDAwMCwgMHgwMDAwMDAwMywgMHhmNjZjMjQwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDEwLCAweGIxOTIzNjA0LCAweDAwMDAwMDA4LCAweDBmODAwMDA0LAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsIDB4MDAwMDAwMDAsIDB4M2UxNzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgzZTk0MDAwMCwgMHgwMDAwMDAwMCwgMHgzZjE1MDAwMCwgMHgwMDAwMDAwMCwgMHgzZjk2MDAwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDAwLCAweDBmMDYwMDAwLCAweDAwMDAwMDEwLCAweDIwNTMwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjJjNTM2MDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZmYWMsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMzFlMDAwMCwgMHgwMDAwMDAwMCwgMHg4Mzg1MDgwMCwgMHgwMDAwMDAwOSwgMHgwNzYwMDBmZiwKLQkweDAwMDAwMDBmLCAweDBmMGUwMDA3LCAweDAwMDAwMDAwLCAweDBjMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhN2QwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGFmZTAwMDAsIDB4MDAwMDAwMDAsIDB4MGI3ZjAwMDAsIDB4MDAwMDAwMDAsIDB4MGQ3YTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYmZjMDAwMCwgMHgwMDAwMDAwMCwgMHgwYzk3MGUwMCwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMywKLQkweDAwMDAwMDBmLCAweDQ3NjcwMDEwLCAweDAwMDAwMDA4LCAweDA3MGUwMDAxLCAweDAwMDAwMDBiLCAweGMzODAwMGZmLAotCTB4MDAwMDAwMDIsIDB4NDM4NzAwMDAsIDB4MDAwMDAwMDEsIDB4MzNlNzBlMDAsIDB4MDAwMDAwMGYsIDB4MDM4ZTAwMTAsCi0JMHgwMDAwMDAwMiwgMHgzM2U3MGUwMCwgMHgwMDAwMDAwMCwgMHgzOTg0MDAwMCwgMHgwMDAwMDAwMywgMHhiOTcyMDgwMCwKLQkweDAwMDAwMDAwLCAweDI4ZjMwMDAwLCAweDAwMDAwMDBmLCAweDY1NjgwMDEwLCAweDAwMDAwMDEwLCAweDAwOWYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDIwNDM2MDAsIDB4MDAwMDAwMTAsIDB4OTE4NDBhMDIsIDB4MDAwMDAwMDIsIDB4MjE0MjE4MDAsCi0JMHgwMDAwMDAwOCwgMHgyMjAwMDAwNywgMHgwMDAwMDAwMCwgMHgyMzFiMDAwMCwgMHgwMDAwMDAwMCwgMHgyM2ZmMDAwMCwKLQkweDAwMDAwMDAwLCAweDI0MWIwMDAwLCAweDAwMDAwMDAzLCAweDgzODRhMDAwLCAweDAwMDAwMDBmLCAweDY1ODcwMDEwLAotCTB4MDAwMDAwMDksIDB4MjYwN2ZmZmYsIDB4MDAwMDAwMDAsIDB4MjcxMTAwMDAsIDB4MDAwMDAwMDAsIDB4MjY5MDAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTAwMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDE0NSwgMHgwMDAwMDAwMywgMHhmNDY4MzYwMCwKLQkweDAwMDAwMDAwLCAweDNhMTAwMDAwLCAweDAwMDAwMDAwLCAweDNhOTEwMDAwLCAweDAwMDAwMDAzLCAweGY2NmMyNDAwLAotCTB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMTAsIDB4YjE5MjM2MDQsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDQsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwgMHgwMDAwMDAwMCwgMHgzZTE3MDAwMCwKLQkweDAwMDAwMDAwLCAweDNlOTQwMDAwLCAweDAwMDAwMDAwLCAweDNmMTUwMDAwLCAweDAwMDAwMDAwLCAweDNmOTYwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDAsIDB4MGYwNjAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyMmM1MzYwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmY3MywgMHgwMDAwMDAxMCwgMHgwY2U3MDAwNSwKLQkweDAwMDAwMDA4LCAweDJjODAwMDBjLCAweDAwMDAwMDA4LCAweDJkMDAwMDcwLCAweDAwMDAwMDA4LCAweDJkODAwMDEwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1ZjAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAxMWQsCi0JMHgwMDAwMDAwMCwgMHgyYzFlMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiOCwgMHgwMDAwMDAwOCwgMHgyZDAwMDAxMCwKLQkweDAwMDAwMDA4LCAweDJkODAwMDQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLAotCTB4MDAwMDAwMTgsIDB4ODAwMGZlNWQsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsIDB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwMCwgMHgwZjAwODAwMCwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwNywKLQkweDAwMDAwMDE4LCAweDgwMDAwMDA2LCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDAwLCAweDJhMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMGYsIDB4MGY0NzAwMDcsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDgsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDExOSwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmU0ZiwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDAwLCAweDJmZDUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsIDB4MDAwMDAwMDksIDB4MDI2MWZmZmYsIDB4MDAwMDAwMGQsIDB4NzBlMTAwMDEsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDEwMSwgMHgwMDAwMDAwMCwgMHgyYzQwMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDBjNCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDFjLCAweDAwMDAwMDA4LCAweDJkODAwMDAxLCAweDAwMDAwMDA1LCAweDcwZTEwODAwLAotCTB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZlNDEsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwMCwgMHgyZmQ1MDAwMCwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwKLQkweDAwMDAwMDAwLCAweDAyNzAwMDAwLCAweDAwMDAwMDAwLCAweDBkNjIwMDAwLCAweDAwMDAwMDAwLCAweGJiNjMwODAwLAotCTB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MGY0MDAwMDAsIDB4MDAwMDAwMDAsIDB4MmM0MDAwMDAsCi0JMHgwMDAwMDAwYywgMHg3M2U3MDAxYiwgMHgwMDAwMDAxMCwgMHgwY2U3MDAwZSwgMHgwMDAwMDAwMCwgMHgyODZkMDAwMCwKLQkweDAwMDAwMDBmLCAweDY1ZWQwMDEwLCAweDAwMDAwMDA5LCAweDI2NmRmZmZmLCAweDAwMDAwMDE4LCAweDgwMDAwMDY5LAotCTB4MDAwMDAwMDgsIDB4MDIwMDAwMDQsIDB4MDAwMDAwMTAsIDB4OTFjNDA4MDMsIDB4MDAwMDAwMTgsIDB4ODAwMDAwZjYsCi0JMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDBlNSwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiOCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDEwLCAweDAwMDAwMDA4LCAweDJkODAwMDQ4LCAweDAwMDAwMDE4LCAweDgwMDAwMDA1LAotCTB4MDAwMDAwMDgsIDB4MmM4MDAwYzQsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMWMsIDB4MDAwMDAwMDgsIDB4MmQ4MDAwMDEsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgyMDVmMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDA0OCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDY4LCAweDAwMDAwMDA4LCAweDJkODAwMTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMDAsIDB4MjdmNjAwMDAsIDB4MDAwMDAwMTAsIDB4Yjg3YTllMDQsCi0JMHgwMDAwMDAwOCwgMHgyMjAwMDAwZCwgMHgwMDAwMDAxOCwgMHg4MDAwMDBlMiwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwKLQkweDAwMDAwMDE4LCAweDgwMDBmZTE4LCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MmZkNTAwMDAsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDAsIDB4MDI3MDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwZDYyMDAwMCwgMHgwMDAwMDAwMCwgMHhiYjYzMDgwMCwgMHgwMDAwMDAwMCwgMHgyYTAwMDAwMCwKLQkweDAwMDAwMDEwLCAweDBlNjcwMDExLCAweDAwMDAwMDAwLCAweDI4NmQwMDAwLCAweDAwMDAwMDBmLCAweDY1ZWQwMDEwLAotCTB4MDAwMDAwMDksIDB4MjY2ZGZmZmYsIDB4MDAwMDAwMDQsIDB4YjhmMWEwMDAsIDB4MDAwMDAwMDAsIDB4MGY0MDAwMDAsCi0JMHgwMDAwMDAwYywgMHg3M2U3MDAxYywgMHgwMDAwMDAxOCwgMHg4MDAwMDA0MCwgMHgwMDAwMDAwOCwgMHgwMjAwMDAwNCwKLQkweDAwMDAwMDEwLCAweDkxYzQwODAyLCAweDAwMDAwMDE4LCAweDgwMDAwMGNkLCAweDAwMDAwMDAwLCAweDJjMWUwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmM4MDAwYjgsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMTAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAwNDgsCi0JMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmRmZSwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDAwLCAweDAzNTUwMDAwLCAweDAwMDAwMDAwLCAweDA2NDYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDNkNjAwMDAsIDB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsIDB4MDAwMDAwMGYsIDB4MGY0ODAwMDcsCi0JMHgwMDAwMDAxMCwgMHhiMThjMDAyNywgMHgwMDAwMDAwZiwgMHg0NzQyMDAwOCwgMHgwMDAwMDAwOSwgMHgwNzBlMDAwZiwKLQkweDAwMDAwMDA4LCAweDA3MGUwMDA4LCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDA4LCAweDA5MDAwMDAxLAotCTB4MDAwMDAwMDcsIDB4MDkxMjFjMDAsIDB4MDAwMDAwMDMsIDB4Y2JjYTkyMDAsIDB4MDAwMDAwMDAsIDB4MGI5N2EyMDAsCi0JMHgwMDAwMDAwNywgMHg0YjE3MWMwMCwgMHgwMDAwMDAwZiwgMHgwYTk2MDAwMywgMHgwMDAwMDAwMCwgMHgwYTk1OWMwMCwKLQkweDAwMDAwMDAwLCAweDRhMDA5YTAwLCAweDAwMDAwMDA4LCAweDgyMTIwMDAxLCAweDAwMDAwMDAxLCAweDBjMTcwODAwLAotCTB4MDAwMDAwMDAsIDB4MDIxODAwMDAsIDB4MDAwMDAwMDAsIDB4MGM5NzE4MDAsIDB4MDAwMDAwMDgsIDB4MGQwMGZmZmYsCi0JMHgwMDAwMDAwOCwgMHgwZjgwMDAwNiwgMHgwMDAwMDAwYywgMHgyOTAwMDAwMCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAwMSwKLQkweDAwMDAwMDAwLCAweDIyYzUwYzAwLCAweDAwMDAwMDEwLCAweDAwOWYwMDAwLCAweDAwMDAwMDEwLCAweGIxOTczMjBiLAotCTB4MDAwMDAwMDAsIDB4MjMxYjAwMDAsIDB4MDAwMDAwMDAsIDB4MjcxMTA4MDAsIDB4MDAwMDAwMDAsIDB4NjY5MDAwMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDBhNCwgMHgwMDAwMDAwMCwgMHgwMjE4MDAwMCwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwKLQkweDAwMDAwMDAwLCAweDIyYzUzNjAwLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDA4LCAweDBmODAwMDA2LAotCTB4MDAwMDAwMTgsIDB4ODAwMGZmZjUsIDB4MDAwMDAwMTAsIDB4OTE4NzAwMDIsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMGEsCi0JMHgwMDAwMDAwMCwgMHgyMzFiMDAwMCwgMHgwMDAwMDAwMCwgMHgyNzExMDgwMCwgMHgwMDAwMDAwMCwgMHg2NjkwMDAwMCwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDk4LCAweDAwMDAwMDA4LCAweDAyMDAwMDBhLCAweDAwMDAwMDEwLCAweDkxYzQwODA0LAotCTB4MDAwMDAwMTAsIDB4MDJjMjAwMDMsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDgsCi0JMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmRjOSwgMHgwMDAwMDAwMCwgMHgwNjgyMDAwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDEwLCAweDBjZTcwMDI4LCAweDAwMDAwMDAwLCAweDAzNzIwMDAwLAotCTB4MDAwMDAwMDAsIDB4YTg3NjBjMDAsIDB4MDAwMDAwMDAsIDB4MGNmNjAwMDAsIDB4MDAwMDAwMTAsIDB4Yjg3MjMyMjQsCi0JMHgwMDAwMDAwMCwgMHgwMzQ0MDAwMCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAxMCwgMHgwMDAwMDAwMCwgMHgwM2NhMDAwMCwKLQkweDAwMDAwMDBmLCAweDY1NjgwMDEwLCAweDAwMDAwMDAwLCAweDBiY2YwMDAwLCAweDAwMDAwMDAwLCAweDI3ZjIwMDAwLAotCTB4MDAwMDAwMTAsIDB4YjdlZjMyMDMsIDB4MDAwMDAwMGMsIDB4MjE0MjAwMDQsIDB4MDAwMDAwMGMsIDB4NzNlNzAwMTksCi0JMHgwMDAwMDAwMCwgMHgwNzUyMDAwMCwgMHgwMDAwMDAwMCwgMHgyOTAwMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDA3ZSwKLQkweDAwMDAwMDA0LCAweGI5NzIzMjAwLCAweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDAwLCAweDIyMDYwMDAwLAotCTB4MDAwMDAwMGMsIDB4NjE0MjAwMDQsIDB4MDAwMDAwMDAsIDB4MjUwNzAwMDAsIDB4MDAwMDAwMDAsIDB4Mjc5NzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyOTBlMDAwMCwgMHgwMDAwMDAxMCwgMHgwY2U3MDAxMCwgMHgwMDAwMDAxMCwgMHhiODczMzIwZiwKLQkweDAwMDAwMDBmLCAweDQzNmMwMDEwLCAweDAwMDAwMDAwLCAweDAzZjMwYzAwLCAweDAwMDAwMDAwLCAweDAzZjMwMDAwLAotCTB4MDAwMDAwMDAsIDB4ODM5OTBlMDAsIDB4MDAwMDAwMDEsIDB4ODM4NjBlMDAsIDB4MDAwMDAwMDAsIDB4ODMwNjBlMDAsCi0JMHgwMDAwMDAwMywgMHhmNjZjMGMwMCwgMHgwMDAwMDAwMCwgMHgzOWYzMGUwMCwgMHgwMDAwMDAwMCwgMHgzYWY1MGUwMCwKLQkweDAwMDAwMDAwLCAweDdhNzQwMDAwLCAweDAwMDAwMDBmLCAweDQzNjgwMDEwLCAweDAwMDAwMDAxLCAweDgzODYwZTAwLAotCTB4MDAwMDAwMDAsIDB4ODMwNjBlMDAsIDB4MDAwMDAwMDMsIDB4ZjQ2ODBjMDAsIDB4MDAwMDAwMDAsIDB4Mjg2ZDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMzY5MDAwMCwgMHgwMDAwMDAxMCwgMHhiMWY2MGM1NCwgMHgwMDAwMDAwMCwgMHgwYTZhMDAwMCwKLQkweDAwMDAwMDAwLCAweDBhZWIwMDAwLCAweDAwMDAwMDA5LCAweDBiNmNmZmZmLCAweDAwMDAwMDAwLCAweDBjMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGJlOTAwMDAsIDB4MDAwMDAwMDMsIDB4OGNmNmEwMDAsIDB4MDAwMDAwMGMsIDB4MDk4MDAwMDIsCi0JMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwgMHgwMDAwMDAxMCwgMHhiODE3MzIwOSwgMHgwMDAwMDAwMCwgMHgzNTE0MDAwMCwKLQkweDAwMDAwMDAwLCAweDM1OTUwMDAwLCAweDAwMDAwMDA1LCAweDc2NmMyYzAwLCAweDAwMDAwMDAwLCAweDM0OTcwMDAwLAotCTB4MDAwMDAwMDQsIDB4YjhmMTJlMDAsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDQsCi0JMHgwMDAwMDAxOCwgMHg4MDAwZmZmNywgMHgwMDAwMDAwMCwgMHgwM2U5MDAwMCwgMHgwMDAwMDAxMCwgMHhiOGY2YTAxYSwKLQkweDAwMDAwMDEwLCAweDIwMTMwMDE5LCAweDAwMDAwMDEwLCAweGIxZjEwZTE4LCAweDAwMDAwMDAwLCAweDgzOTczMjAwLAotCTB4MDAwMDAwMDAsIDB4Mzg3MDBlMDAsIDB4MDAwMDAwMDAsIDB4YmI3NjBlMDAsIDB4MDAwMDAwMDAsIDB4MzdkMDAwMDAsCi0JMHgwMDAwMDAwYywgMHg3M2U3MDAxYSwgMHgwMDAwMDAwMywgMHhiOGYxYTAwMCwgMHgwMDAwMDAwMCwgMHgzMjE0MDAwMCwKLQkweDAwMDAwMDAwLCAweDMyOTUwMDAwLCAweDAwMDAwMDA1LCAweDczZTcyYzAwLCAweDAwMDAwMDAwLCAweDMzMTkwMDAwLAotCTB4MDAwMDAwMDUsIDB4NzQ2ODAwMDAsIDB4MDAwMDAwMTAsIDB4MGNlNzAwMGQsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDksCi0JMHgwMDAwMDAwMCwgMHgwNzUyMDAwMCwgMHgwMDAwMDAwMCwgMHgyOTAwMDAwMCwgMHgwMDAwMDAwYywgMHg3M2U3MDAxOSwKLQkweDAwMDAwMDBmLCAweDY1NjgwMDEwLCAweDAwMDAwMDBjLCAweDIxNDIwMDA0LCAweDAwMDAwMDE4LCAweDgwMDAwMDNjLAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMGMsIDB4NjE0MjAwMDQsIDB4MDAwMDAwMDAsIDB4MjkwZTAwMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAwMiwgMHgwMDAwMDAxMCwgMHg5MTk3MzIwNiwgMHgwMDAwMDAwMCwgMHgzNTE0MDAwMCwKLQkweDAwMDAwMDAwLCAweDM1OTUwMDAwLCAweDAwMDAwMDA1LCAweDc2NmMyYzAwLCAweDAwMDAwMDAwLCAweDM0OTkwMDAwLAotCTB4MDAwMDAwMDQsIDB4YjhmMTMyMDAsIDB4MDAwMDAwMDAsIDB4ODM2OTBjMDAsIDB4MDAwMDAwMTAsIDB4YjE4NjAwMTMsCi0JMHgwMDAwMDAwMCwgMHgyOGU5MDAwMCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAwNCwgMHgwMDAwMDAwMCwgMHgyM2VjMDAwMCwKLQkweDAwMDAwMDAwLCAweDAzNjkwMDAwLCAweDAwMDAwMDEwLCAweGI4NjYwYzA3LCAweDAwMDAwMDA5LCAweDAzNmNmZmZmLAotCTB4MDAwMDAwMDAsIDB4MzI2YTAwMDAsIDB4MDAwMDAwMDAsIDB4MzJlYjAwMDAsIDB4MDAwMDAwMDUsIDB4NzNlNzBjMDAsCi0JMHgwMDAwMDAwMCwgMHgzMzY5MDAwMCwgMHgwMDAwMDAwNSwgMHg3NDY4MDAwMCwgMHgwMDAwMDAwYywgMHg3M2U3MDAxYywKLQkweDAwMDAwMDAwLCAweDAzNjkwMDAwLCAweDAwMDAwMDEwLCAweGIxZjYwYzEyLCAweDAwMDAwMDEwLCAweGIxZDAwYzExLAotCTB4MDAwMDAwMGMsIDB4MjE0MjAwMDUsIDB4MDAwMDAwMGMsIDB4MzNlNzAwMWMsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMGUsCi0JMHgwMDAwMDAxMCwgMHgyZTY3MDAwZCwgMHgwMDAwMDAwMCwgMHgwMzY5MDAwMCwgMHgwMDAwMDAxMCwgMHhiMWY2MGMwYiwKLQkweDAwMDAwMDEwLCAweGIxZDAwYzBhLCAweDAwMDAwMDAwLCAweDAzNDQwMDAwLCAweDAwMDAwMDA4LCAweDIyMDAwMDBjLAotCTB4MDAwMDAwMDAsIDB4MDc1MjAwMDAsIDB4MDAwMDAwMDAsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMTUsCi0JMHgwMDAwMDAwYywgMHgzM2U3MDAxYywgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAwMCwgMHgyMjA2MDAwMCwKLQkweDAwMDAwMDAwLCAweDI5MGUwMDAwLCAweDAwMDAwMDE4LCAweDAwMGQwMDAwLCAweDAwMDAwMDAwLCAweDA2ODIwMDAwLAotCTB4MDAwMDAwMTAsIDB4MmRlNzAwMGQsIDB4MDAwMDAwMTAsIDB4MGNlNzAwMGMsIDB4MDAwMDAwMDAsIDB4MjdmMjAwMDAsCi0JMHgwMDAwMDAxMCwgMHhiOTZkOWUwYSwgMHgwMDAwMDAwMCwgMHhhODZkOWUwMCwgMHgwMDAwMDAwOSwgMHgwMzYxZmZmZiwKLQkweDAwMDAwMDEwLCAweGI3NTAwYzA3LCAweDAwMDAwMDA4LCAweDIyMDAwMDBmLCAweDAwMDAwMDBmLCAweDY1NjgwMDEwLAotCTB4MDAwMDAwMDAsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMDQsIDB4MDAwMDAwMGMsIDB4MzNlNzAwMWIsCi0JMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxOCwgMHgwMDBkMDAwMCwgMHgwMDAwMDAwMCwgMHgyYjgyMDAwMCwKLQkweDAwMDAwMDEwLCAweDIwZDIwMDJmLCAweDAwMDAwMDEwLCAweDAwNTIwMDJlLCAweDAwMDAwMDA5LCAweDA1NGUwMDA3LAotCTB4MDAwMDAwMTAsIDB4YjE4YTAwMmMsIDB4MDAwMDAwMDAsIDB4MDUwYThjMDAsIDB4MDAwMDAwMDgsIDB4ODUwYTAwMDgsCi0JMHgwMDAwMDAxMCwgMHg5MThhMDAyOSwgMHgwMDAwMDAwMywgMHhjNTAwODgwMCwgMHgwMDAwMDAwOCwgMHhhMzQ2MDAwMSwKLQkweDAwMDAwMDEwLCAweGIxYzYwMDA3LCAweDAwMDAwMDA4LCAweDIyMDAwMDAxLCAweDAwMDAwMDBjLCAweDI5ODAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMDAsIDB4Mjc0ZThjMDAsIDB4MDAwMDAwMDAsIDB4NjZjZDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyMmM1OGMwMCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAxNCwgMHgwMDAwMDAwMywgMHgyMmM1OGUwMCwKLQkweDAwMDAwMDAzLCAweDIzYzU4ZTAwLCAweDAwMDAwMDAzLCAweDIyYzU4ZTAwLCAweDAwMDAwMDAzLCAweDI2Y2Q5ZTAwLAotCTB4MDAwMDAwMDMsIDB4MjdjZDllMDAsIDB4MDAwMDAwMDMsIDB4MjZjZDllMDAsIDB4MDAwMDAwMDMsIDB4Mjc0ZWEwMDAsCi0JMHgwMDAwMDAwMywgMHgyODRlYTAwMCwgMHgwMDAwMDAwMywgMHgyNzRlYTAwMCwgMHgwMDAwMDAwYywgMHg2OTUyMDAwMCwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAwLCAweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDAzLCAweDIyYzU4ZTAwLAotCTB4MDAwMDAwMDMsIDB4MjNjNThlMDAsIDB4MDAwMDAwMDMsIDB4MjJjNThlMDAsIDB4MDAwMDAwMDMsIDB4MjZjZDllMDAsCi0JMHgwMDAwMDAwMywgMHgyN2NkOWUwMCwgMHgwMDAwMDAwMywgMHgyNmNkOWUwMCwgMHgwMDAwMDAwMywgMHgyNzRlYTAwMCwKLQkweDAwMDAwMDAzLCAweDI4NGVhMDAwLCAweDAwMDAwMDAzLCAweDI3NGVhMDAwLCAweDAwMDAwMDAwLCAweGEyYzU4YzAwLAotCTB4MDAwMDAwMDAsIDB4YTc0ZThjMDAsIDB4MDAwMDAwMDAsIDB4ZTZjZDAwMDAsIDB4MDAwMDAwMGYsIDB4NjIwYTAwMTAsCi0JMHgwMDAwMDAwOCwgMHgyMzQ2MDAwMSwgMHgwMDAwMDAwYywgMHgyOTgwMDAwMCwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwKLQkweDAwMDAwMDBjLCAweDI5NTIwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDAyLCAweDAwMDAwMDBjLCAweDI5ODAwMDAwLAotCTB4MDAwMDAwMTgsIDB4MDA1NzAwMDAgfTsKK3N0YXRpYyB1OCBibngyX3J2MnBfcHJvYzJbXSA9IHsKKwkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweDdlLCAweGQxLCAweDQxLCAweDQ0LCAweDAwLCAweDAzLCAweDc0LCAweDY1LAorCTB4NzMsIDB4NzQsIDB4MzEsIDB4MmUsIDB4NjIsIDB4NjksIDB4NmUsIDB4MDAsIDB4Y2QsIDB4NTgsIDB4NWIsIDB4NmMsCisJMHg1NCwgMHg1NSwgMHgxNCwgMHgzZCwgMHhmMywgMHhlOCwgMHhjYywgMHg5ZCwgMHhlOSwgMHhlZCwgMHg5ZCwgMHhmMiwKKwkweGIyLCAweDAzLCAweGFkLCAweDA4LCAweGU1LCAweGQxLCAweDU2LCAweDI5LCAweGU4LCAweDU0LCAweGFiLCAweDE4LAorCTB4MTUsIDB4MmMsIDB4NWEsIDB4OGMsIDB4MjYsIDB4NjgsIDB4ZjAsIDB4ZjksIDB4NjMsIDB4MTQsIDB4MDQsIDB4ZGEsCisJMHg5YSwgMHg1NiwgMHg5YiwgMHgxNiwgMHhmYiwgMHg4MSwgMHhhZiwgMHgwOSwgMHgxNCwgMHg2YSwgMHg0YywgMHgyNSwKKwkweGQ2LCAweDA4LCAweGM1LCAweDQ3LCAweGEwLCAweDExLCAweDFmLCAweDg0LCAweGYwLCAweGQzLCAweDFmLCAweDNiLAorCTB4OGQsIDB4N2YsIDB4MGEsIDB4MjQsIDB4NmEsIDB4ODgsIDB4YzQsIDB4YTgsIDB4OWYsIDB4MjQsIDB4NjgsIDB4YTAsCisJMHgyMSwgMHgwYSwgMHg1OCwgMHg4YiwgMHg2MywgMHg0YywgMHhiNCwgMHhmNSwgMHhlYywgMHhiZCwgMHhmNiwgMHhiOSwKKwkweDczLCAweGVmLCAweDZkLCAweDhiLCAweDFhLCAweGY5LCAweDcwLCAweDNlLCAweGJhLCAweDdiLCAweGNlLCAweGQ5LAorCTB4NjcsIDB4M2YsIDB4ZDYsIDB4ZGUsIDB4NjcsIDB4OWYsIDB4N2QsIDB4YWUsIDB4NTIsIDB4ZmMsIDB4YmIsIDB4YjYsCisJMHg5NCwgMHhjOSwgMHgzNywgMHg4MywgMHg5NiwgMHhmZSwgMHgxYiwgMHg1MSwgMHgwZiwgMHg4NSwgMHhkMywgMHgzYywKKwkweDhlLCAweDJhLCAweGEyLCAweDQ5LCAweGE1LCAweGIyLCAweDVlLCAweGVhLCAweDA4LCAweDdkLCAweDQ0LCAweGU4LAorCTB4NzAsIDB4MDgsIDB4ZjQsIDB4YjQsIDB4ZDAsIDB4NzcsIDB4ODQsIDB4ZmUsIDB4MmUsIDB4ZjQsIDB4ODAsIDB4ZDAsCisJMHgwZiwgMHg4NSwgMHhlYSwgMHg1ZiwgMHhkNiwgMHhkNiwgMHg3ZiwgMHhmNCwgMHhiMCwgMHg0NiwgMHg4OSwgMHg3ZSwKKwkweDFiLCAweGQzLCAweDM1LCAweGIwLCAweGUzLCAweGMxLCAweDA1LCAweGM0LCAweDc3LCAweDYxLCAweGEyLCAweGMwLAorCTB4ODcsIDB4ZjksIDB4NTMsIDB4N2QsIDB4YTAsIDB4ZDcsIDB4NjAsIDB4ZDcsIDB4ZTEsIDB4ZWMsIDB4MGEsIDB4YjMsCisJMHgxZiwgMHg2NCwgMHg0MywgMHgwOSwgMHhlOCwgMHhjNiwgMHgwOCwgMHhlOCwgMHhlYSwgMHg2NSwgMHg0YywgMHg3YSwKKwkweDlmLCAweDBhLCAweDYzLCAweGRjLCAweGI4LCAweDk0LCAweGY2LCAweDg3LCAweDU1LCAweDgzLCAweDIyLCAweDNmLAorCTB4NjcsIDB4YWEsIDB4NjgsIDB4OTgsIDB4YzYsIDB4ZjUsIDB4NTYsIDB4NmMsIDB4MTgsIDB4ZWIsIDB4OGYsIDB4YTUsCisJMHg0MCwgMHgzNywgMHgyNSwgMHg0MSwgMHhjZiwgMHgwOCwgMHhkZCwgMHg1MiwgMHgyYywgMHg3YSwgMHg2YywgMHgzMSwKKwkweGJmLCAweDk4LCAweGY2LCAweDI1LCAweDVjLCAweDM5LCAweGM3LCAweDZkLCAweGUwLCAweDk2LCAweDk1LCAweGZkLAorCTB4NGEsIDB4YzEsIDB4Y2UsIDB4MDMsIDB4YjIsIDB4M2UsIDB4YTMsIDB4MGEsIDB4YjMsIDB4YWYsIDB4NmYsIDB4YzEsCisJMHhiOCwgMHhmYywgMHgyMCwgMHhmOSwgMHhhNywgMHhmZiwgMHhjZiwgMHg2MiwgMHg3ZSwgMHhmYSwgMHhmZCwgMHhmOCwKKwkweDE1LCAweGY2LCAweDgzLCAweDk2LCAweDJmLCAweGEyLCAweDc1LCAweDI3LCAweGQzLCAweDNmLCAweDg4LCAweGYxLAorCTB4ZGUsIDB4MjUsIDB4MzIsIDB4MWYsIDB4MzYsIDB4ZjgsIDB4MTgsIDB4NzksIDB4NDEsIDB4NWMsIDB4OTksIDB4NTgsCisJMHhjNywgMHgyYSwgMHg3ZCwgMHhmMiwgMHgyYiwgMHgxNSwgMHhlNCwgMHgyZiwgMHhjOCwgMHgyZSwgMHgzNSwgMHhmMiwKKwkweDgxLCAweGZiLCAweGZhLCAweDE2LCAweGIyLCAweDczLCAweDRjLCAweGM3LCAweDAxLCAweGI4LCAweGNkLCAweDBhLAorCTB4OTUsIDB4YjIsIDB4ZGMsIDB4N2QsIDB4ODMsIDB4NWUsIDB4M2QsIDB4NTEsIDB4YWQsIDB4MDcsIDB4ZmEsIDB4NTQsCisJMHhhNSwgMHhjNSwgMHgyMCwgMHg2NSwgMHg5NywgMHg4MSwgMHhhYSwgMHg1YSwgMHhiZiwgMHgxZiwgMHg3YiwgMHg5NywKKwkweDE4LCAweDdiLCAweDMwLCAweDllLCAweDlkLCAweDAxLCAweGRkLCAweDIzLCAweGY0LCAweGFhLCAweDNhLCAweDI2LAorCTB4Y2IsIDB4N2YsIDB4YjgsIDB4YzEsIDB4NjIsIDB4MGMsIDB4YjIsIDB4YjUsIDB4ZGUsIDB4N2MsIDB4MzgsIDB4MzIsCisJMHg2MSwgMHhmMCwgMHg1MiwgMHg4YiwgMHg0MCwgMHhjZSwgMHgyZSwgMHgyMSwgMHgzZSwgMHgxZCwgMHg5YywgMHg0YSwKKwkweGM4LCAweDVkLCAweGRmLCAweDMyLCAweDU1LCAweDFlLCAweDdkLCAweDMwLCAweDQ1LCAweDFlLCAweDYxLCAweGZmLAorCTB4YjcsIDB4MmIsIDB4N2MsIDB4ZjksIDB4YTQsIDB4ZGEsIDB4MjUsIDB4NGYsIDB4MzYsIDB4MjIsIDB4OGYsIDB4YWMsCisJMHhhNywgMHgzZSwgMHg5MSwgMHg4NSwgMHg2YiwgMHgxMywgMHhmYSwgMHhjZiwgMHg4NCwgMHg3YSwgMHgzMiwgMHg0ZSwKKwkweDAxLCAweDhhLCAweDJiLCAweDg3LCAweGZkLCAweDUzLCAweGUyLCAweGU3LCAweDI2LCAweGVkLCAweDI3LCAweGQxLAorCTB4OGEsIDB4NTAsIDB4YjYsIDB4MzYsIDB4YzEsIDB4MzgsIDB4MzUsIDB4YzQsIDB4YTAsIDB4YWYsIDB4NjEsIDB4MDMsCisJMHhiNiwgMHhhZiwgMHg0NiwgMHg1YywgMHg3YiwgMHg0ZiwgMHg4NiwgMHg4ZCwgMHhmZCwgMHg1MSwgMHhmYSwgMHgzYiwKKwkweGQwLCAweGI2LCAweDlkLCAweDQ3LCAweDAzLCAweGQxLCAweDFkLCAweDRjLCAweGVkLCAweDYzLCAweDk1LCAweDU4LAorCTB4ZWUsIDB4OGEsIDB4ZjAsIDB4N2EsIDB4NzIsIDB4OTcsIDB4Y2MsIDB4ZjcsIDB4ZWMsIDB4ZjAsIDB4ZGIsIDB4ZmQsCisJMHgwMiwgMHhmMiwgMHhkYiwgMHg3ZSwgMHg3ZSwgMHg0NywgMHg4OCwgMHhhOCwgMHgxMywgMHg3MywgMHhmOSwgMHg5OCwKKwkweDNhLCAweDNiLCAweGI3LCAweDEzLCAweGZmLCAweDU1LCAweDZhLCAweGQ3LCAweDIwLCAweDI5LCAweDRlLCAweGFiLAorCTB4MGQsIDB4NmIsIDB4YjEsIDB4NmYsIDB4NzcsIDB4MmMsIDB4YzUsIDB4YjgsIDB4MzYsIDB4YWQsIDB4MDUsIDB4ZmQsCisJMHgxZSwgMHhmMywgMHhmMywgMHg5ZCwgMHgxZSwgMHhlMiwgMHgyZiwgMHg5ZCwgMHhlNywgMHgwYywgMHg3MSwgMHg1ZSwKKwkweGE5LCAweDExLCAweGNlLCAweGM3LCAweDA0LCAweDY1LCAweDA2LCAweGZmLCAweGRhLCAweGFhLCAweGMxLCAweGRmLAorCTB4YmMsIDB4OTksIDB4MTUsIDB4YmYsIDB4ZDksIDB4OWEsIDB4ZTcsIDB4M2MsIDB4MTgsIDB4ZTgsIDB4MTgsIDB4MjYsCisJMHgzZiwgMHhlNywgMHhhYSwgMHg5MSwgMHg0ZSwgMHhhMiwgMHg1MSwgMHhkNSwgMHhiMCwgMHg5MCwgMHhmMCwgMHg1ZSwKKwkweDE1LCAweDM2LCAweDcxLCAweDNhLCAweDdmLCAweDMzLCAweGNkLCAweGNmLCAweGQzLCAweGViLCAweDI2LCAweDFlLAorCTB4MjQsIDB4ZDcsIDB4OTIsIDB4NzgsIDB4NDUsIDB4NWQsIDB4N2MsIDB4ZjIsIDB4NjEsIDB4ZjgsIDB4ZGIsIDB4Y2QsCisJMHg3NiwgMHg1ZiwgMHg5NywgMHhlYywgMHhlNiwgMHhmYywgMHg0YSwgMHhhYSwgMHgyNiwgMHg4ZSwgMHg3ZiwgMHhkNCwKKwkweDZhLCAweDFiLCAweGM2LCAweGZhLCAweGY5LCAweDhmLCAweDhkLCAweDVjLCAweGQyLCAweDUzLCAweDIzLCAweDc1LAorCTB4NDQsIDB4YjksIDB4NzIsIDB4YTIsIDB4MzcsIDB4ODMsIDB4ZWUsIDB4MzQsIDB4N2EsIDB4ZWIsIDB4ODgsIDB4NmYsCisJMHhiMSwgMHg0MiwgMHhmZSwgMHgyNiwgMHgyNiwgMHhjOSwgMHg2OSwgMHgwMywgMHhjZSwgMHhmNiwgMHgzMywgMHhlYywKKwkweGY3LCAweDM1LCAweGY2LCAweDg1LCAweDNlLCAweDYzLCAweDJmLCAweGU2LCAweDJmLCAweGZhLCAweGY0LCAweDk1LAorCTB4N2IsIDB4ZjQsIDB4MTEsIDB4N2YsIDB4NTEsIDB4ZjIsIDB4MDIsIDB4ZWYsIDB4OWIsIDB4NjMsIDB4M2QsIDB4M2IsCisJMHhjYywgMHhiOCwgMHg1OCwgMHhjZiwgMHgwYywgMHg0MSwgMHhmZSwgMHhjNSwgMHgyMSwgMHhlMiwgMHg5ZiwgMHgyMywKKwkweDdhLCAweGVkLCAweGZmLCAweDg4LCAweGU3LCAweDljLCAweDMwLCAweGU0LCAweDRjLCAweDhmLCAweDVmLCAweGMxLAorCTB4NmYsIDB4ZTMsIDB4MTcsIDB4Y2IsIDB4YjUsIDB4NDcsIDB4NzMsIDB4NjksIDB4ZTYsIDB4MzMsIDB4ZjEsIDB4ZTgsCisJMHgwZSwgMHg3MywgMHgwMiwgMHhhNiwgMHgxYiwgMHgxNiwgMHhmYSwgMHg3MSwgMHgzMywgMHhmNiwgMHg5YywgMHhkZiwKKwkweGNjLCAweDc5LCAweDNlLCAweGQxLCAweDI2LCAweDc1LCAweDQwLCAweDcxLCAweDlkLCAweGI5LCAweDVkLCAweGUyLAorCTB4YTEsIDB4ZjMsIDB4M2EsIDB4MDQsIDB4ZmYsIDB4NDYsIDB4NzMsIDB4MmMsIDB4M2YsIDB4ZDksIDB4YzUsIDB4NzksCisJMHhiOSwgMHhkMiwgMHg4ZSwgMHhlNiwgMHgzOCwgMHg1ZSwgMHhkNiwgMHhkOSwgMHgyMSwgMHg2YywgMHgyYiwgMHhkNCwKKwkweDRmLCAweGM4LCAweDZiLCAweGI2LCAweDQxLCAweDliLCAweGE0LCAweDhlLCAweDllLCAweDE1LCAweGRhLCAweDZkLAorCTB4MzMsIDB4M2UsIDB4YmEsIDB4OGUsIDB4NTksIDB4MmMsIDB4M2YsIDB4OWIsIDB4MzIsIDB4ZjcsIDB4MGMsIDB4ZDYsCisJMHg5ZiwgMHgxNiwgMHgzOSwgMHgzZiwgMHgwYSwgMHg1NSwgMHgyMiwgMHhhNywgMHg1NSwgMHhmNiwgMHg5ZiwgMHhmMywKKwkweGM5LCAweDg5LCAweDA0LCAweGU0LCAweDg0LCAweDk0LCAweGMxLCAweGNkLCAweDljLCAweGVmLCAweDVkLCAweDUyLAorCTB4YmYsIDB4ZjcsIDB4YzUsIDB4YTYsIDB4YWIsIDB4YjcsIDB4N2MsIDB4MGUsIDB4ZGMsIDB4YmEsIDB4NWEsIDB4OGUsCisJMHgzYSwgMHg1MywgMHgxZiwgMHgwZCwgMHhiMywgMHhiZiwgMHgwMywgMHhkZCwgMHgzYiwgMHg4MCwgMHg1MywgMHg4ZiwKKwkweGUwLCAweDE0LCAweDA3LCAweDRlLCAweGYzLCAweDBhLCAweGY1LCAweDU5LCAweDE0LCAweGQ0LCAweDkwLCAweGZlLAorCTB4NTMsIDB4MjEsIDB4ZTMsIDB4YzcsIDB4YmUsIDB4OTgsIDB4YWYsIDB4ZmUsIDB4ZjYsIDB4OWEsIDB4ZmEsIDB4NWIsCisJMHhhOCwgMHhkMywgMHhjNCwgMHhmZiwgMHhiMywgMHhhOSwgMHg2ZiwgMHg1YSwgMHg5ZiwgMHhkMSwgMHhmZiwgMHg2ZiwKKwkweGY1LCAweDcyLCAweDljLCAweDkyLCAweGRkLCAweDdkLCAweDI2LCAweGNlLCAweDk4LCAweDJlLCAweGQ0LCAweGQ5LAorCTB4MjIsIDB4MjIsIDB4Y2IsIDB4NDYsIDB4M2EsIDB4OTksIDB4NWUsIDB4ZGYsIDB4YmMsIDB4MTUsIDB4ZjMsIDB4NjUsCisJMHg3YywgMHg0ZSwgMHg2ZSwgMHgwOSwgMHgwMSwgMHhhZiwgMHhhOCwgMHgzYSwgMHhkZSwgMHg4NywgMHhiYSwgMHhhZSwKKwkweGUyLCAweDJjLCAweGFmLCAweGUyLCAweDI4LCAweGM3LCAweDNmLCAweGFhLCAweGU1LCAweDEyLCAweGRmLCAweDY3LAorCTB4YTEsIDB4NDIsIDB4M2UsIDB4N2EsIDB4ZmQsIDB4ZDksIDB4YWQsIDB4ZjMsIDB4ODQsIDB4ZWMsIDB4ODgsIDB4ZTksCisJMHhiYywgMHhhNSwgMHhiMSwgMHgzZSwgMHg0NywgMHhiNiwgMHhlNCwgMHhmOSwgMHgxYSwgMHhlNiwgMHhiMywgMHhjNywKKwkweDIyLCAweDM0LCAweGZmLCAweDgwLCAweGQ1LCAweGQzLCAweDg3LCAweGY5LCAweDlmLCAweDFhLCAweDY5LCAweGJjLAorCTB4Y2UsIDB4N2UsIDB4MGQsIDB4ZTcsIDB4Y2MsIDB4N2UsIDB4MGQsIDB4ZjUsIDB4Y2IsIDB4MmEsIDB4M2EsIDB4ODgsCisJMHhiYSwgMHhkNiwgMHg3OCwgMHgxMCwgMHhmMiwgMHg3MSwgMHg0ZiwgMHg3YiwgMHhmZCwgMHhmMiwgMHhlMiwgMHg0NywKKwkweGU3LCAweGUxLCAweGIyLCAweDM4LCAweGQ5LCAweGNmLCAweDA5LCAweDRlLCAweDk3LCAweDdjLCAweGYxLCAweDM5LAorCTB4NmMsIDB4ZTIsIDB4ZDMsIDB4MWIsIDB4OTMsIDB4ZjMsIDB4ZDIsIDB4N2MsIDB4MjksIDB4ZTgsIDB4MTcsIDB4ZjEsCisJMHg5ZCwgMHg3MSwgMHhlZiwgMHg5ZCwgMHhhZSwgMHg5NSwgMHhhMCwgMHhkZCwgMHgyYiwgMHhlNSwgMHg5YywgMHhkNiwKKwkweGY5LCAweGYzLCAweDZiLCAweDNlLCAweGVhLCAweGYyLCAweGI4LCAweDdiLCAweDRmLCAweDIwLCAweGJmLCAweGFjLAorCTB4OWQsIDB4ZjAsIDB4NGIsIDB4YmQsIDB4MjgsIDB4NzksIDB4M2MsIDB4MmUsIDB4ZjQsIDB4NjUsIDB4YzksIDB4ZGYsCisJMHg2ZCwgMHhkMiwgMHhiNywgMHg5OCwgMHhmZSwgMHhlMiwgMHgwZiwgMHhjYywgMHgzYiwgMHhmZCwgMHg2ZSwgMHg1ZiwKKwkweDYwLCAweGVhLCAweDM2LCAweDhkLCAweDQzLCAweGNhLCAweDg5LCAweDEzLCAweDgzLCAweDM2LCAweGViLCAweDMzLAorCTB4MjQsIDB4NGEsIDB4Y2YsIDB4MWEsIDB4ZTAsIDB4MzUsIDB4NTIsIDB4MDcsIDB4YmUsIDB4ZGQsIDB4OTEsIDB4YjAsCisJMHg4YywgMHgyMSwgMHg2ZiwgMHhhYywgMHhkYSwgMHg3NywgMHgwZiwgMHhkNywgMHg0ZiwgMHhjNiwgMHg5MywgMHhlNCwKKwkweGM2LCAweGRjLCAweGZhLCAweDI0LCAweDc5LCAweGFmLCAweDI2LCAweDg0LCAweDk2LCAweDJmLCAweGJlLCAweDJjLAorCTB4YmUsIDB4ODUsIDB4ZmUsIDB4NjQsIDB4YTksIDB4MTcsIDB4ZGYsIDB4OTcsIDB4MzQsIDB4YmUsIDB4YmMsIDB4YWYsCisJMHhiZSwgMHhmOSwgMHgxMiwgMHhhNiwgMHg0YiwgMHg2ZiwgMHgwNSwgMHhlZCwgMHhiYiwgMHg5NSwgMHhlNywgMHgxNywKKwkweGEzLCAweGVlLCAweDExLCAweDdlLCAweDljLCAweDVmLCAweGY1LCAweDZmLCAweDBjLCAweDlhLCAweDdlLCAweDQyLAorCTB4ZjAsIDB4MDgsIDB4ZjQsIDB4NDEsIDB4NjUsIDB4NzcsIDB4ODAsIDB4YmUsIDB4MjksIDB4NzQsIDB4Y2UsIDB4MmEsCisJMHhkMCwgMHhiZCwgMHhhYiwgMHhmYywgMHg3MSwgMHg4OCwgMHhhNSwgMHg3YywgMHg3MSwgMHhhYywgMHg0NywgMHgxYywKKwkweDhmLCAweDRjLCAweDA0LCAweGViLCAweDgxLCAweGM0LCAweDRiLCAweGM3LCAweDI3LCAweDcwLCAweGJmLCAweDFiLAorCTB4ZmQsIDB4ZTIsIDB4Y2UsIDB4ZGYsIDB4YzUsIDB4ZWQsIDB4NGEsIDB4YzcsIDB4YWIsIDB4N2IsIDB4MjUsIDB4ZWUsCisJMHg5MywgMHgwZSwgMHhlOSwgMHg0YiwgMHhjNywgMHhkYywgMHhmYiwgMHhlMiwgMHg5ZiwgMHhjNCwgMHgzMSwgMHg3ZSwKKwkweDg1LCAweGUzLCAweDc4LCAweGY3LCAweGZmLCAweDJjLCAweDhlLCAweDlkLCAweDEyLCAweGM3LCAweDIyLCAweGI5LAorCTB4NTcsIDB4NGQsIDB4YmYsIDB4ZDksIDB4MmUsIDB4N2QsIDB4MTgsIDB4ZjUsIDB4OGQsIDB4N2UsIDB4YmQsIDB4NGYsCisJMHg3MCwgMHgxZiwgMHg3OCwgMHhiNSwgMHg1YiwgMHg4ZiwgMHhlNywgMHgzMywgMHg3ZiwgMHg0ZSwgMHhmNiwgMHg5NSwKKwkweGNhLCAweGJlLCAweDdiLCAweDI2LCAweGVkLCAweDNiLCAweGM1LCAweGY1LCAweGVlLCAweGYxLCAweGYxLCAweGM5LAorCTB4ZWYsIDB4MTUsIDB4OWYsIDB4OWQsIDB4NTksIDB4OTUsIDB4MDIsIDB4ZWUsIDB4YTgsIDB4ZTMsIDB4YjEsIDB4MjksCisJMHhkZSwgMHgzNywgMHg4NiwgMHgxZiwgMHhmOSwgMHhiNSwgMHgzNiwgMHg4NSwgMHhiYSwgMHgwNSwgMHhmZSwgMHhiOSwKKwkweDllLCAweDdhLCAweDRhLCAweGUzLCAweGZiLCAweGM3LCAweGE3LCAweGVmLCAweDU3LCAweDhkLCAweDNjLCAweGM0LAorCTB4NmQsIDB4NDMsIDB4YjgsIDB4ODQsIDB4ZjksIDB4NGUsIDB4YjcsIDB4ZjMsIDB4N2QsIDB4ZTcsIDB4ZmEsIDB4YjcsCisJMHg5YSwgMHhmZCwgMHgzYSwgMHgyYSwgMHhmZSwgMHg1NSwgMHg4OCwgMHg3ZiwgMHg3YSwgMHhiOSwgMHg5NiwgMHhlYiwKKwkweGJlLCAweDc1LCAweGJhLCAweGRkLCAweGViLCAweGRmLCAweDlkLCAweDk3LCAweGQxLCAweGY3LCAweDRmLCAweGZiLAorCTB4NjMsIDB4ZDEsIDB4OWIsIDB4MzIsIDB4ZmEsIDB4NDksIDB4NWUsIDB4YjksIDB4ZjQsIDB4N2QsIDB4ZDQsIDB4NGYsCisJMHg2MiwgMHg3ZSwgMHg3MiwgMHg5ZiwgMHg0MSwgMHhmYSwgMHg1YiwgMHgzNCwgMHg1ZSwgMHg3MiwgMHhkZiwgMHg3MCwKKwkweDNlLCAweDQ3LCAweGFjLCAweGEzLCAweDZjLCAweDU3LCAweDVlLCAweGY5LCAweDcxLCAweDM5LCAweDIzLCAweDdjLAorCTB4NTMsIDB4YzUsIDB4OGQsIDB4ZDYsIDB4OGIsIDB4NjQsIDB4N2QsIDB4MmEsIDB4YmYsIDB4YzUsIDB4NGUsIDB4MzcsCisJMHgxZiwgMHg2NCwgMHgxZiwgMHhmMywgMHgzNSwgMHgwYiwgMHg1ZiwgMHgzNCwgMHgzNCwgMHgzOSwgMHhmZSwgMHgxOCwKKwkweGU1LCAweGFiLCAweDM4LCAweGFmLCAweGY3LCAweDZmLCAweGNiLCAweDExLCAweDlmLCAweDc2LCAweDllLCAweGYzLAorCTB4ZjAsIDB4ZmIsIDB4ODAsIDB4N2QsIDB4ZTksIDB4MmIsIDB4ODAsIDB4MjMsIDB4ZjEsIDB4Y2QsIDB4NTAsIDB4NGQsCisJMHhjZSwgMHg3NCwgMHg3OCwgMHhlMSwgMHhkZCwgMHgzMCwgMHg5YSwgMHgzMywgMHg3OCwgMHhkYiwgMHhlYywgMHhlNywKKwkweDQ4LCAweDI3LCAweGU5LCAweDVmLCAweDFkLCAweGMwLCAweDMxLCAweDJjLCAweDM4LCAweDllLCAweDUwLCAweDdmLAorCTB4OWYsIDB4ZjcsIDB4YzYsIDB4MGYsIDB4NmYsIDB4NWUsIDB4OGMsIDB4ZmYsIDB4MTksIDB4Y2MsIDB4ZTMsIDB4ODcsCisJMHhlNSwgMHg1ZCwgMHhkZCwgMHgxOCwgMHgwMywgMHhmZCwgMHgyZSwgMHg2MiwgMHhlYywgMHg0NiwgMHg1ZSwgMHhkZiwKKwkweGMzLCAweGU3LCAweGI1LCAweDRhLCAweGY1LCAweGYyLCAweGJiLCAweGMzLCAweDUyLCAweDBkLCAweDZiLCAweGM5LAorCTB4ZWUsIDB4OTQsIDB4YWUsIDB4N2YsIDB4YzgsIDB4NzcsIDB4MjcsIDB4ZWUsIDB4YmQsIDB4YjcsIDB4NzUsIDB4MGQsCisJMHg0YywgMHhjNCwgMHg2OSwgMHg1OCwgMHgzMSwgMHgzMywgMHhjMSwgMHg4MiwgMHhkZSwgMHhmOCwgMHhlMiwgMHg0YiwKKwkweDVlLCAweDdlLCAweGFmLCAweGJmLCAweDE4LCAweGYzLCAweDY1LCAweGY3LCAweDkxLCAweDljLCAweDg4LCAweGRhLAorCTB4OGIsIDB4YmEsIDB4ZmIsIDB4ZWUsIDB4MWUsIDB4ZDAsIDB4YjcsIDB4ZDUsIDB4YmQsIDB4ZDgsIDB4M2YsIDB4NzMsCisJMHgzYiwgMHhkNywgMHg1MSwgMHhhYiwgMHg0YywgMHhmMiwgMHgyYiwgMHgwZCwgMHg1YywgMHhkMywgMHhhOCwgMHhjMywKKwkweDEzLCAweDEzLCAweGFhLCAweDA0LCAweGY3LCAweDlhLCAweDc5LCAweDA3LCAweGFiLCAweDFhLCAweGQxLCAweDhiLAorCTB4ZmEsIDB4NjgsIDB4MTcsIDB4ZGUsIDB4YzEsIDB4NDQsIDB4OGIsIDB4ODMsIDB4N2QsIDB4OWYsIDB4NTUsIDB4ZTgsCisJMHhhZiwgMHgwOCwgMHg4ZiwgMHhmNywgMHg1ZCwgMHgxYywgMHhkMywgMHhlMSwgMHg2MCwgMHg1ZCwgMHhmMiwgMHhmYSwKKwkweDE1LCAweDkzLCAweDczLCAweGZkLCAweGFiLCAweGZiLCAweDZlLCAweGVlLCAweGUxLCAweDdlLCAweDJhLCAweDE5LAorCTB4YWMsIDB4Y2IsIDB4MDEsIDB4ZjksIDB4ZmIsIDB4MjQsIDB4N2UsIDB4NDksIDB4ODksIDB4NWYsIDB4NTQsIDB4YzcsCisJMHgwZiwgMHhlZiwgMHhlZCwgMHg0ZiwgMHg3ZCwgMHhlZiwgMHg3YSwgMHhhYSwgMHgxYiwgMHhkZSwgMHhiYywgMHhmYiwKKwkweGZjLCAweDRmLCAweDYzLCAweGQ3LCAweGY2LCAweDk4LCAweGI3LCAweDBlLCAweDU3LCAweGJiLCAweGU3LCAweGFlLAorCTB4NDMsIDB4ZGUsIDB4OGIsIDB4NWQsIDB4ODcsIDB4MzAsIDB4Y2UsIDB4NzMsIDB4YmYsIDB4YmMsIDB4MzgsIDB4ZDMsCisJMHgyMSwgMHg3OSwgMHg3NCwgMHg1NywgMHg0NCwgMHhmMiwgMHg0MSwgMHhlYywgMHhmYiwgMHgyMiwgMHg2MiwgMHhlZSwKKwkweDFiLCAweDhjLCAweGJmLCAweDkyLCAweGZiLCAweGVlLCAweDk3LCAweDJhLCAweGY0LCAweGQ5LCAweDE3LCAweDg3LAorCTB4Y2MsIDB4ZmIsIDB4YzQsIDB4YmMsIDB4NTcsIDB4YjAsIDB4YmUsIDB4M2UsIDB4YWUsIDB4MDQsIDB4NjcsIDB4YmUsCisJMHhmZiwgMHhiNSwgMHgzZiwgMHg5YywgMHhhZiwgMHg5OSwgMHg4ZSwgMHg2MSwgMHgxZiwgMHg1ZSwgMHgyYSwgMHgxNiwKKwkweDc4LCAweGJmLCAweGM0LCAweGU1LCAweGZiLCAweDQ1LCAweGJmLCAweGUwLCAweGUxLCAweGYwLCAweGY5LCAweDI5LAorCTB4ZDUsIDB4ZjYsIDB4MTMsIDB4NGQsIDB4NjUsIDB4M2EsIDB4NzMsIDB4YjAsIDB4YTcsIDB4ZDUsIDB4ZWQsIDB4MjMsCisJMHhjMSwgMHgyNywgMHhkNCwgMHg3OSwgMHg0YiwgMHhkZSwgMHhjMSwgMHhmMiwgMHg1ZSwgMHhkNiwgMHhlZiwgMHg2MSwKKwkweGY0LCAweDczLCAweGFkLCAweDc5LCAweDhjLCAweGM3LCAweGQwLCAweGI3LCAweDM5LCAweGJmLCAweGNhLCAweGJkLAorCTB4YjUsIDB4NzUsIDB4OWIsIDB4ZTksIDB4NGIsIDB4YTcsIDB4ZGUsIDB4NjcsIDB4ZWUsIDB4YjksIDB4YjYsIDB4NmEsCisJMHhkMCwgMHgxNiwgMHhlZSwgMHg1YiwgMHgxZiwgMHhiMiwgMHhmMywgMHg5MiwgMHgxZiwgMHg4NSwgMHg3NywgMHg4OSwKKwkweGZmLCAweDNkLCAweDYyLCAweGZhLCAweDg1LCAweDczLCAweGM1LCAweGI4LCAweDY3LCAweGYzLCAweGJkLCAweDM0LAorCTB4YTEsIDB4ZGYsIDB4MjMsIDB4MDksIDB4NmYsIDB4OWUsIDB4MjUsIDB4MzIsIDB4NjUsIDB4ODIsIDB4ZmIsIDB4ZWMsCisJMHg5YiwgMHg0MCwgMHhmNywgMHhkYywgMHg4NCwgMHhiZSwgMHhiYywgMHhiNSwgMHg0YiwgMHg3MCwgMHhiOCwgMHg5MSwKKwkweDcxLCAweDViLCAweDNlLCAweDlhLCAweDBiLCAweDdlLCAweDY3LCAweDIxLCAweDVjLCAweDdmLCAweDczLCAweGZiLAorCTB4ZDEsIDB4NzMsIDB4NmMsIDB4ZDcsIDB4YmMsIDB4ODEsIDB4M2MsIDB4ZjMsIDB4Y2QsIDB4NTUsIDB4YjMsIDB4ZjgsCisJMHhmYywgMHhhNiwgMHg5ZCwgMHg1MSwgMHhkOCwgMHg5OSwgMHhlOSwgMHgxNywgMHhiZiwgMHhkYSwgMHg2ZiwgMHgwMSwKKwkweGVkLCAweDkyLCAweDNhLCAweDczLCAweGQyLCAweDdkLCAweDk3LCAweGMzLCAweDRlLCAweDUzLCAweDRmLCAweDI2LAorCTB4YmYsIDB4MTMsIDB4MzAsIDB4OWUsIDB4NWIsIDB4YzcsIDB4NjMsIDB4ZDUsIDB4YmMsIDB4OTUsIDB4ZTQsIDB4OTcsCisJMHg0YywgMHg3YSwgMHhjZiwgMHgxNiwgMHhlMiwgMHg2ZSwgMHhmMiwgMHhjMSwgMHhlNCwgMHg4ZiwgMHhmNywgMHgxZCwKKwkweDdiLCAweDliLCAweGE3LCAweDVlLCAweGZhLCAweGUzLCAweGVmLCAweDcwLCAweGJlLCAweDg0LCAweDY1LCAweDNkLAorCTB4OTYsIDB4ZTksIDB4ZWYsIDB4YmIsIDB4M2MsIDB4M2UsIDB4NmYsIDB4MDEsIDB4OWYsIDB4OGMsIDB4ZDgsIDB4NmQsCisJMHhiNywgMHhmMCwgMHgzYiwgMHg3NCwgMHg5NiwgMHhkYSwgMHgyNSwgMHhmMSwgMHgzOSwgMHg1NywgMHgyZCwgMHg3NSwKKwkweDUwLCAweGVjLCAweGZiLCAweDQ5LCAweGZhLCAweDFmLCAweGM0LCAweDMxLCAweDZlLCAweDZmLCAweGM5LCAweDQ5LAorCTB4ZGMsIDB4MjQsIDB4OGYsIDB4OWUsIDB4MTYsIDB4YmYsIDB4N2YsIDB4ODQsIDB4ZGYsIDB4YjYsIDB4ZjEsIDB4YmIsCisJMHhjNSwgMHhmNSwgMHhkYiwgMHhkNCwgMHg1OSwgMHhhZiwgMHg5YywgMHg5OSwgMHgzYSwgMHgxZiwgMHhiOCwgMHg1ZSwKKwkweGRiLCAweDI3LCAweGY5LCAweGRkLCAweDUzLCAweDI0LCAweGU3LCAweGExLCAweDQyLCAweGJlLCAweDNiLCAweDM4LAorCTB4ZTIsIDB4NGYsIDB4ODksIDB4NmEsIDB4NWEsIDB4ZWUsIDB4ZGQsIDB4NTcsIDB4MmMsIDB4ZmIsIDB4OTIsIDB4N2EsCisJMHgxZiwgMHhlNiwgMHg3MSwgMHhmZSwgMHhlYywgMHgyOSwgMHhmMCwgMHgzNCwgMHhkZiwgMHgxMSwgMHg4YywgMHhkYywKKwkweGUwLCAweDM5LCAweGYyLCAweGUyLCAweGM3LCAweDM3LCAweDEzLCAweGZmLCAweDUwLCAweDA3LCAweDc0LCAweDljLAorCTB4NmEsIDB4Y2QsIDB4ZjcsIDB4MDcsIDB4Y2MsIDB4ZTMsIDB4ZmMsIDB4MjYsIDB4ZjcsIDB4YjcsIDB4YTEsIDB4YWYsCisJMHhkYywgMHhkZiwgMHg3NiwgMHg0OCwgMHhmYSwgMHgwOCwgMHhjMSwgMHhlNSwgMHg4MSwgMHgyMSwgMHhiMiwgMHg0MywKKwkweGM3LCAweGFlLCAweGQyLCAweDdmLCAweGZlLCAweDYxLCAweDQ3LCAweDU0LCAweGVjLCAweDI4LCAweGY3LCAweGQ4LAorCTB4MTEsIDB4ZDAsIDB4N2IsIDB4MWQsIDB4Y2QsIDB4YWYsIDB4NTAsIDB4NWYsIDB4NzMsIDB4MWUsIDB4MmUsIDB4NTcsCisJMHhlYiwgMHgyOSwgMHg0NywgMHhmNCwgMHhiZCwgMHhiMCwgMHhhZSwgMHg4OCwgMHhjNiwgMHhjYiwgMHhkNCwgMHhhYiwKKwkweGYwLCAweGI3LCAweDM3LCAweDU5LCAweDg0LCAweDNhLCAweDk2LCAweGRjLCAweDQ5LCAweGYzLCAweDM1LCAweGVhLAorCTB4ZDUsIDB4M2UsIDB4MGUsIDB4YzQsIDB4MmIsIDB4ZWEsIDB4MTgsIDB4ZWEsIDB4NzMsIDB4ZTMsIDB4NDEsIDB4YjYsCisJMHg0NywgMHgxZCwgMHgxZiwgMHgzNCwgMHhmNSwgMHg3YSwgMHhjYSwgMHhlZiwgMHg5OCwgMHhiZCwgMHhlYiwgMHhhNCwKKwkweDVlLCAweDljLCAweGMwLCAweDc3LCAweDUxLCAweGZkLCAweDVlLCAweDIzLCAweGZlLCAweGQ5LCAweGU2LCAweDNkLAorCTB4YjgsIDB4ZmIsIDB4OTgsIDB4YTEsIDB4OGIsIDB4N2MsIDB4ZTMsIDB4ZmQsIDB4MjcsIDB4OTYsIDB4MGEsIDB4YWQsCisJMHhmMiwgMHg4ZCwgMHgwNywgMHhkNiwgMHg1NSwgMHgwOSwgMHhhZCwgMHgzNiwgMHhlMywgMHhlOSwgMHhiZSwgMHgyYiwKKwkweDVlLCAweDI5LCAweGY5LCAweDYyLCAweGY3LCAweDdiLCAweGUyLCAweGNmLCAweDQ3LCAweGUyLCAweGNmLCAweDU5LAorCTB4ZTAsIDB4OWYsIDB4ZGMsIDB4MjgsIDB4NzgsIDB4MmMsIDB4MGEsIDB4ZWEsIDB4MTcsIDB4YmIsIDB4ZGMsIDB4NzMsCisJMHg2MywgMHhkNiwgMHgxMSwgMHg4ZiwgMHg0NywgMHhkNSwgMHg1ZiwgMHgzZiwgMHg5NywgMHg4ZiwgMHgzMSwgMHhkOCwKKwkweDE3LCAweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3UmVsZWFzZU1ham9yID0gMHgxOwogc3RhdGljIGNvbnN0IGludCBibngyX1RQQVRfYjA2RndSZWxlYXNlTWlub3IgPSAweDA7CkBAIC0yMzM5LDIwMSArMTMzMCwxOTkgQEAKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3QnNzTGVuID0gMHgyNTA7CiBzdGF0aWMgY29uc3QgdTMyIGJueDJfVFBBVF9iMDZGd1Nic3NBZGRyID0gMHgwODAwMWE2MDsKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3U2Jzc0xlbiA9IDB4MzQ7Ci1zdGF0aWMgdTMyIGJueDJfVFBBVF9iMDZGd1RleHRbKDB4MTIyYy80KSArIDFdID0gewotCTB4MGEwMDAyMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4NzQ3MDYxNzQsIDB4MjAzMjJlMzUsCi0JMHgyZTMxMzEwMCwgMHgwMjA1MGIwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgxMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwgMHgzYzAyMDgwMCwKLQkweDI0NDIxYTYwLCAweDNjMDMwODAwLCAweDI0NjMxY2YwLCAweGFjNDAwMDAwLCAweDAwNDMyMDJiLCAweDE0ODBmZmZkLAotCTB4MjQ0MjAwMDQsIDB4M2MxZDA4MDAsIDB4MzdiZDJmZmMsIDB4MDNhMGYwMjEsIDB4M2MxMDA4MDAsIDB4MjYxMDA4NjAsCi0JMHgzYzFjMDgwMCwgMHgyNzljMWE2MCwgMHgwZTAwMDU0NiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHg4ZjgyMDAxMCwKLQkweDhjNDUwMDA4LCAweDI0MDMwODAwLCAweGFmNDMwMTc4LCAweDk3NDMwMTA0LCAweDNjMDIwMDA4LCAweGFmNDIwMTQwLAotCTB4OGY4MjAwMjQsIDB4MzA0MjAwMDEsIDB4MTA0MDAwMDcsIDB4MzA2OWZmZmYsIDB4MjQwMjAwMDIsIDB4MjUyM2ZmZmUsCi0JMHhhNzQyMDE0NiwgMHhhNzQzMDE0OCwgMHgwYTAwMDI0MiwgMHgzYzAyMDgwMCwgMHhhNzQwMDE0NiwgMHgzYzAyMDgwMCwKLQkweDhjNDMwODNjLCAweDE0NjAwMDBlLCAweDI0MDIwZjAwLCAweDhmODIwMDI0LCAweDMwNDMwMDIwLCAweDAwMDMxODJiLAotCTB4MDAwMzE4MjMsIDB4MzA2NTAwMDksIDB4MzA0MjBjMDAsIDB4MjQwMzA0MDAsIDB4MTQ0MzAwMDIsIDB4MzRhNDAwMDEsCi0JMHgzNGE0MDAwNSwgMHhhNzQ0MDE0YSwgMHgwYTAwMDI2NCwgMHgzYzAyMDgwMCwgMHg4ZjgzMDAxNCwgMHgxNDYyMDAwOCwKLQkweDAwMDAwMDAwLCAweDhmODIwMDI0LCAweDMwNDIwMDIwLCAweDAwMDIxMDJiLCAweDAwMDIxMDIzLCAweDMwNDIwMDBkLAotCTB4MGEwMDAyNjIsIDB4MzQ0MjAwMDUsIDB4OGY4MjAwMjQsIDB4MzA0MjAwMjAsIDB4MDAwMjEwMmIsIDB4MDAwMjEwMjMsCi0JMHgzMDQyMDAwOSwgMHgzNDQyMDAwMSwgMHhhNzQyMDE0YSwgMHgzYzAyMDgwMCwgMHg4YzQzMDgyMCwgMHg4Zjg0MDAyNCwKLQkweDNjMDIwMDQ4LCAweDAwNjIxODI1LCAweDMwODQwMDA2LCAweDI0MDIwMDAyLCAweDEwODIwMDBkLCAweDJjODIwMDAzLAotCTB4NTA0MDAwMDUsIDB4MjQwMjAwMDQsIDB4MTA4MDAwMTIsIDB4M2MwMjAwMDEsIDB4MGEwMDAyODQsIDB4MDAwMDAwMDAsCi0JMHgxMDgyMDAwNywgMHgyNDAyMDAwNiwgMHgxNDgyMDAwZiwgMHgzYzAyMDExMSwgMHgwYTAwMDI3YywgMHgwMDYyMTAyNSwKLQkweDBhMDAwMjdiLCAweDNjMDIwMTAxLCAweDNjMDIwMDExLCAweDAwNjIxMDI1LCAweDI0MDMwMDAxLCAweGFmNDIxMDAwLAotCTB4YWY4MzAwMjAsIDB4MGEwMDAyODQsIDB4MDAwMDAwMDAsIDB4MDA2MjEwMjUsIDB4YWY0MjEwMDAsIDB4YWY4MDAwMjAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAyMCwgMHgxMDYwMDAzZiwKLQkweDNjMDQ4MDAwLCAweDhmNDIxMDAwLCAweDAwNDQxMDI0LCAweDEwNDBmZmZkLCAweDAwMDAwMDAwLCAweDEwNjAwMDM5LAotCTB4MDAwMDAwMDAsIDB4OGY0MjEwMDAsIDB4M2MwMzAwMjAsIDB4MDA0MzEwMjQsIDB4MTA0MDAwMzQsIDB4MDAwMDAwMDAsCi0JMHg5NzQyMTAxNCwgMHgxNDQwMDAzMSwgMHgwMDAwMDAwMCwgMHg5NzQyMTAwOCwgMHg4Zjg0MDAxMCwgMHgyNDQyMDAwNiwKLQkweDAwMDI0MDgyLCAweDAwMDgxODgwLCAweDAwNjQzODIxLCAweDhjZTUwMDAwLCAweDMwNDMwMDAzLCAweDMwNDIwMDAxLAotCTB4MTA0MDAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MGEwMDAyYzMsIDB4MDAwODEwODAsIDB4NTQ2MDAwMGYsCi0JMHgzMGE1ZmZmZiwgMHgzYzA2ZmZmZiwgMHgwMGE2MjgyNCwgMHgwMDA1MTgyYiwgMHgwMGE2MTAyNiwgMHgwMDAyMTAyYiwKLQkweDAwNjIxODI0LCAweDEwNjAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMWZiLAotCTB4OGNlMjAwMDAsIDB4MGEwMDAyYzIsIDB4MDA0NjI4MjUsIDB4MDAwNTE4MmIsIDB4MzhhMmZmZmYsIDB4MDAwMjEwMmIsCi0JMHgwMDYyMTgyNCwgMHgxMDYwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDIwNSwKLQkweDhjZTIwMDAwLCAweDM0NDVmZmZmLCAweDAwMDgxMDgwLCAweDAwNDQxMDIxLCAweDNjMDMwODAwLCAweGFjNDUwMDAwLAotCTB4OGM2MjA4MzAsIDB4MjQ0MjAwMDEsIDB4YWM2MjA4MzAsIDB4OGY4NDAwMTgsIDB4MDEyMDI4MjEsIDB4MjQ4MjAwMDgsCi0JMHgzMDQyMWZmZiwgMHgyNDQzNDAwMCwgMHgwMzQzZDgyMSwgMHgzMGEzMDAwNywgMHhhZjg0MDAwYywgMHhhZjgyMDAxOCwKLQkweGFmNDIwMDg0LCAweDEwNjAwMDAyLCAweDI0YTIwMDA3LCAweDMwNDVmZmY4LCAweDhmODIwMDMwLCAweDhmODQwMDAwLAotCTB4MDA0NTE4MjEsIDB4YWY4MjAwMWMsIDB4MDA2NDEwMmIsIDB4YWY4MzAwMzAsIDB4MTQ0MDAwMDIsIDB4MDA2NDEwMjMsCi0JMHhhZjgyMDAzMCwgMHg4Zjg0MDAzMCwgMHgzNDAyODAwMCwgMHgwMDgyMTAyMSwgMHgwMzQyMTgyMSwgMHgzYzAyMTAwMCwKLQkweGFmODMwMDEwLCAweGFmNDQwMDgwLCAweDAzZTAwMDA4LCAweGFmNDIwMTc4LCAweDhmODMwMDI0LCAweDI3YmRmZmUwLAotCTB4YWZiZjAwMTgsIDB4YWZiMTAwMTQsIDB4MzA2MjAyMDAsIDB4MTQ0MDAwMDQsIDB4YWZiMDAwMTAsIDB4MDAwMDAwMGQsCi0JMHgwMDAwMDAwMCwgMHgyNDAwMDI0MiwgMHgwMDAzMWE4MiwgMHgzMDYzMDAwMywgMHgwMDAzMTBjMCwgMHgwMDQzMTAyMSwKLQkweDAwMDIxMDgwLCAweDAwNDMxMDIxLCAweDAwMDIxMDgwLCAweDNjMDMwODAwLCAweDI0NjMxYWEwLCAweDAwNDM4ODIxLAotCTB4OGUyNDAwMDAsIDB4MTA4MDAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAyNGQsCi0JMHg4Zjg1MDAxMCwgMHgyNDAyMDAwMSwgMHhhZTIyMDAwMCwgMHg4Y2E3MDAwOCwgMHhhMjIwMDAwNywgMHg4ZjYyMDAwNCwKLQkweDI2MzAwMDE0LCAweDAyMDAyMDIxLCAweDAwMDIxNDAyLCAweGEyMjIwMDA0LCAweDMwNDYwMGZmLCAweDI0YzYwMDA1LAotCTB4MGUwMDA2NzMsIDB4MDAwNjMwODIsIDB4OGY2MjAwMDQsIDB4YTYyMjAwMDgsIDB4OGY0MzAxMDgsIDB4M2MwMjEwMDAsCi0JMHgwMDYyMTgyNCwgMHgxMDYwMDAwOCwgMHgwMDAwMDAwMCwgMHg5NzQyMDEwNCwgMHg5MjIzMDAwNywgMHgyNDQyZmZlYywKLQkweDMwNDVmZmZmLCAweDM0NjMwMDAyLCAweDBhMDAwMzIxLCAweGEyMjMwMDA3LCAweDk3NDIwMTA0LCAweDI0NDJmZmYwLAotCTB4MzA0NWZmZmYsIDB4OGY2MjAwMDQsIDB4MzA0MmZmZmYsIDB4MmM0MjAwMTMsIDB4NTQ0MDAwMDUsIDB4OTIyMzAwMDcsCi0JMHg5MjIyMDAwNywgMHgzNDQyMDAwMSwgMHhhMjIyMDAwNywgMHg5MjIzMDAwNywgMHgyNDAyMDAwMSwgMHgxMDYyMDAwOSwKLQkweDI4NjIwMDAyLCAweDE0NDAwMDE0LCAweDI0MDIwMDAyLCAweDEwNjIwMDEyLCAweDI0MDIwMDAzLCAweDEwNjIwMDBhLAotCTB4MDAwMDAwMDAsIDB4MGEwMDAzNDIsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTAsIDB4OGM0MzAwMGMsIDB4M2MwNGZmZmYsCi0JMHgwMDY0MTgyNCwgMHgwMDY1MTgyNSwgMHgwYTAwMDM0MiwgMHhhYzQzMDAwYywgMHg4ZjgyMDAxMCwgMHg4YzQzMDAxMCwKLQkweDNjMDRmZmZmLCAweDAwNjQxODI0LCAweDAwNjUxODI1LCAweGFjNDMwMDEwLCAweDhmNjIwMDA0LCAweDMwNDJmZmZmLAotCTB4MjQ0MjAwMDIsIDB4MDAwMjEwODMsIDB4YTIyMjAwMDUsIDB4MzA0NTAwZmYsIDB4OGY4MjAwMTAsIDB4M2MwNGZmZmYsCi0JMHgwMDA1Mjg4MCwgMHgwMGEyMjgyMSwgMHg4Y2E3MDAwMCwgMHg5NjIyMDAwOCwgMHg5NzQzMDEwNCwgMHgwMGU0MjAyNCwKLQkweDI0NDIwMDAyLCAweDAwNjIxODIzLCAweDAwODMzODI1LCAweGFjYTcwMDAwLCAweDkyMjQwMDA1LCAweDAwMDQxMDgwLAotCTB4MDIwMjEwMjEsIDB4OTA0MzAwMDAsIDB4M2MwNWZmZjYsIDB4MzRhNWZmZmYsIDB4MzA2MzAwMGYsIDB4MDA4MzIwMjEsCi0JMHhhMjI0MDAwNiwgMHgzMDgyMDBmZiwgMHgyNDQyMDAwMywgMHgwMDAyMTA4MCwgMHgwMjAyMTAyMSwgMHg4YzQ2MDAwMCwKLQkweDMwODMwMGZmLCAweDhmODIwMDEwLCAweDNjMDRmZjNmLCAweDAwMDMxODgwLCAweDAwYzUzODI0LCAweDAwNjIxODIxLAotCTB4YWUyNjAwMGMsIDB4YWM2NzAwMGMsIDB4OGUyMjAwMGMsIDB4OTIyMzAwMDYsIDB4MzQ4NGZmZmYsIDB4MDA0NDEwMjQsCi0JMHgyNDYzMDAwMywgMHgwMDAzMTg4MCwgMHgwMjAzMTgyMSwgMHgwMGU0MjAyNCwgMHhhZTIyMDAwYywgMHhhYzY0MDAwMCwKLQkweDkyMjIwMDA2LCAweDI0NDIwMDA0LCAweDAwMDIxMDgwLCAweDAyMDIxMDIxLCAweDk0NDcwMDAyLCAweGFjNDcwMDAwLAotCTB4OTIyMzAwMDYsIDB4OGY4MjAwMTAsIDB4MDAwMzE4ODAsIDB4MDA2MjE4MjEsIDB4MjQwMjAwMTAsIDB4YWM2NzAwMTAsCi0JMHgyNDAzMDAwMiwgMHhhNzQyMDE0MCwgMHhhNzQwMDE0MiwgMHhhNzQwMDE0NCwgMHhhNzQzMDE0NiwgMHg5NzQyMDEwNCwKLQkweDI0MDMwMDAxLCAweDI0NDJmZmZlLCAweGE3NDIwMTQ4LCAweGE3NDMwMTRhLCAweDhmODIwMDI0LCAweDI0MDMwMDAyLAotCTB4MzA0NDAwMDYsIDB4MTA4MzAwMGQsIDB4MmM4MjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDQsIDB4MTA4MDAwMTEsCi0JMHgzYzAyMDAwOSwgMHgwYTAwMDNhNSwgMHgwMDAwMDAwMCwgMHgxMDgyMDAwNywgMHgyNDAyMDAwNiwgMHgxNDgyMDAwZCwKLQkweDNjMDIwMTE5LCAweDBhMDAwMzlmLCAweDI0MDMwMDAxLCAweDBhMDAwMzllLCAweDNjMDIwMTA5LCAweDNjMDIwMDE5LAotCTB4MjQwMzAwMDEsIDB4YWY0MjEwMDAsIDB4YWY4MzAwMjAsIDB4MGEwMDAzYTUsIDB4MDAwMDAwMDAsIDB4YWY0MjEwMDAsCi0JMHhhZjgwMDAyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg5MjIyMDAwNCwKLQkweDI0MDMwMDA4LCAweDhmODQwMDIwLCAweDI0NDIwMDAyLCAweDMwNDIwMDA3LCAweDAwNjIxODIzLCAweDMwNjMwMDA3LAotCTB4MTA4MDAwMDYsIDB4YWUyMzAwMTAsIDB4M2MwMzgwMDAsIDB4OGY0MjEwMDAsIDB4MDA0MzEwMjQsIDB4MTA0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhZjgyMDAwYywgMHgyNDQyMDAxMCwgMHgzMDQyMWZmZiwgMHhhZjgyMDAxOCwKLQkweGFmNDIwMDg0LCAweDk3NDMwMTA0LCAweDI0NDI0MDAwLCAweDAzNDJkODIxLCAweDMwNjNmZmZmLCAweDMwNjIwMDA3LAotCTB4MTA0MDAwMDIsIDB4MjQ2MjAwMDcsIDB4MzA0M2ZmZjgsIDB4OGY4MjAwMzAsIDB4OGY4NDAwMDAsIDB4MDA0MzE4MjEsCi0JMHhhZjgyMDAxYywgMHgwMDY0MTAyYiwgMHhhZjgzMDAzMCwgMHgxNDQwMDAwMiwgMHgwMDY0MTAyMywgMHhhZjgyMDAzMCwKLQkweDhmODQwMDMwLCAweDM0MDI4MDAwLCAweDhmYmYwMDE4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAweDAwODIxMDIxLAotCTB4MDM0MjE4MjEsIDB4M2MwMjEwMDAsIDB4YWY4MzAwMTAsIDB4YWY0NDAwODAsIDB4YWY0MjAxNzgsIDB4MDNlMDAwMDgsCi0JMHgyN2JkMDAyMCwgMHg4ZjgzMDAyNCwgMHgyN2JkZmZlMCwgMHhhZmJmMDAxOCwgMHhhZmIxMDAxNCwgMHgzMDYyMDIwMCwKLQkweDE0NDAwMDA0LCAweGFmYjAwMDEwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMmU0LCAweDAwMDMxYTgyLAotCTB4MzA2MzAwMDMsIDB4MDAwMzEwYzAsIDB4MDA0MzEwMjEsIDB4MDAwMjEwODAsIDB4MDA0MzEwMjEsIDB4MDAwMjEwODAsCi0JMHgzYzAzMDgwMCwgMHgyNDYzMWFhMCwgMHgwMDQzODAyMSwgMHg4ZTA0MDAwMCwgMHgxNDgwMDAwNCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMmU5LCAweDhmNjIwMDA0LCAweDA0NDEwMDA4LCAweDI2MDUwMDE0LAotCTB4OTIwMjAwMDYsIDB4OGUwMzAwMGMsIDB4MjQ0MjAwMDMsIDB4MDAwMjEwODAsIDB4MDBhMjEwMjEsIDB4YWM0MzAwMDAsCi0JMHhhZTAwMDAwMCwgMHg5MjAyMDAwNSwgMHgyNDQyMDAwMSwgMHgwMDAyMTA4MCwgMHgwMGEyMTAyMSwgMHg4YzQzMDAwMCwKLQkweDNjMDQwMDAxLCAweDAwNjQxODIxLCAweGFjNDMwMDAwLCAweDkyMDYwMDA0LCAweDI3NzEwMDA4LCAweDAyMjAyMDIxLAotCTB4MjRjNjAwMDUsIDB4MGUwMDA2NzMsIDB4MDAwNjMwODIsIDB4OTIwNDAwMDYsIDB4M2MwNTdmZmYsIDB4OGY2MjAwMDQsCi0JMHgwMDA0MjA4MCwgMHgwMDkxMjAyMSwgMHg4YzgzMDAwNCwgMHgzNGE1ZmZmZiwgMHgwMDQ1MTAyNCwgMHgwMDYyMTgyMSwKLQkweGFjODMwMDA0LCAweDkyMDUwMDA1LCAweDNjMDdmZmZmLCAweDkyMDQwMDA0LCAweDAwMDUyODgwLCAweDAwYjEyODIxLAotCTB4OGNhMzAwMDAsIDB4OTc0MjAxMDQsIDB4OTYwNjAwMDgsIDB4MDA2NzE4MjQsIDB4MDA0NDEwMjEsIDB4MDA0NjEwMjMsCi0JMHgzMDQyZmZmZiwgMHgwMDYyMTgyNSwgMHhhY2EzMDAwMCwgMHg5MjAzMDAwNywgMHgyNDAyMDAwMSwgMHgxMDYyMDAwYSwKLQkweDI4NjIwMDAyLCAweDE0NDAwMDFkLCAweDI0MDIwMDBhLCAweDI0MDIwMDAyLCAweDEwNjIwMDE5LCAweDI0MDIwMDAzLAotCTB4MTA2MjAwMGUsIDB4MjQwMjAwMGEsIDB4MGEwMDA0NDcsIDB4MDAwMDAwMDAsIDB4OTIwMjAwMDQsIDB4OTc0MzAxMDQsCi0JMHg4ZTI0MDAwYywgMHgwMDYyMTgyMSwgMHgyNDYzZmZmMiwgMHgzMDYzZmZmZiwgMHgwMDg3MjAyNCwgMHgwMDgzMjAyNSwKLQkweGFlMjQwMDBjLCAweDBhMDAwNDQ3LCAweDI0MDIwMDBhLCAweDkyMDIwMDA0LCAweDk3NDMwMTA0LCAweDhlMjQwMDEwLAotCTB4MDA2MjE4MjEsIDB4MjQ2M2ZmZWUsIDB4MzA2M2ZmZmYsIDB4MDA4NzIwMjQsIDB4MDA4MzIwMjUsIDB4YWUyNDAwMTAsCi0JMHgyNDAyMDAwYSwgMHhhNzQyMDE0MCwgMHg5NjAzMDAxMiwgMHg4Zjg0MDAyNCwgMHhhNzQzMDE0MiwgMHg5MjAyMDAwNCwKLQkweGE3NDIwMTQ0LCAweGE3NDAwMTQ2LCAweDk3NDMwMTA0LCAweDMwODQwMDA2LCAweDI0MDIwMDAxLCAweGE3NDMwMTQ4LAotCTB4YTc0MjAxNGEsIDB4MjQwMjAwMDIsIDB4MTA4MjAwMGQsIDB4MmM4MjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDQsCi0JMHgxMDgwMDAxMSwgMHgzYzAyMDA0MSwgMHgwYTAwMDQ2YywgMHgwMDAwMDAwMCwgMHgxMDgyMDAwNywgMHgyNDAyMDAwNiwKLQkweDE0ODIwMDBkLCAweDNjMDIwMTUxLCAweDBhMDAwNDY2LCAweDI0MDMwMDAxLCAweDBhMDAwNDY1LCAweDNjMDIwMTQxLAotCTB4M2MwMjAwNTEsIDB4MjQwMzAwMDEsIDB4YWY0MjEwMDAsIDB4YWY4MzAwMjAsIDB4MGEwMDA0NmMsIDB4MDAwMDAwMDAsCi0JMHhhZjQyMTAwMCwgMHhhZjgwMDAyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDhmODIwMDIwLCAweDhmODQwMDE4LCAweDEwNDAwMDA2LCAweDkyMDMwMDA0LCAweDNjMDU4MDAwLCAweDhmNDIxMDAwLAotCTB4MDA0NTEwMjQsIDB4MTA0MGZmZmQsIDB4MDAwMDAwMDAsIDB4MjQ2MzAwMGEsIDB4MzA2MjAwMDcsIDB4MTA0MDAwMDIsCi0JMHgyNDYyMDAwNywgMHgzMDQzMDNmOCwgMHgwMDgzMTAyMSwgMHgzMDQyMWZmZiwgMHhhZjg0MDAwYywgMHhhZjgyMDAxOCwKLQkweGFmNDIwMDg0LCAweDk3NDMwMTA0LCAweDI0NDI0MDAwLCAweDAzNDJkODIxLCAweDMwNjNmZmZmLCAweDMwNjIwMDA3LAotCTB4MTA0MDAwMDIsIDB4MjQ2MjAwMDcsIDB4MzA0M2ZmZjgsIDB4OGY4MjAwMzAsIDB4OGY4NDAwMDAsIDB4MDA0MzE4MjEsCi0JMHhhZjgyMDAxYywgMHgwMDY0MTAyYiwgMHhhZjgzMDAzMCwgMHgxNDQwMDAwMiwgMHgwMDY0MTAyMywgMHhhZjgyMDAzMCwKLQkweDhmODQwMDMwLCAweDM0MDI4MDAwLCAweDhmYmYwMDE4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAweDAwODIxMDIxLAotCTB4MDM0MjE4MjEsIDB4M2MwMjEwMDAsIDB4YWY4MzAwMTAsIDB4YWY0NDAwODAsIDB4YWY0MjAxNzgsIDB4MDNlMDAwMDgsCi0JMHgyN2JkMDAyMCwgMHg4ZjYyMDAwMCwgMHg5NzQzMDEwNCwgMHgzYzA0ODAwMCwgMHgzMDQ1ZmZmZiwgMHgzMDY2ZmZmZiwKLQkweDhmNDIwMTc4LCAweDAwNDQxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDBhLCAweDMwYTMwMDA3LCAweGE3NDIwMTQwLAotCTB4MjQwMjAwMDgsIDB4MDA0MzEwMjMsIDB4MzA0MjAwMDcsIDB4MjRhM2ZmZmUsIDB4YTc0MjAxNDIsIDB4YTc0MzAxNDQsCi0JMHhhNzQwMDE0NiwgMHhhNzQ2MDE0OCwgMHg4ZjQyMDEwOCwgMHg4ZjgzMDAyNCwgMHgzMDQyMDAyMCwgMHgwMDAyMTAyYiwKLQkweDAwMDIxMDIzLCAweDMwNDIwMDA5LCAweDM0NDIwMDAxLCAweDMwNjMwMDA2LCAweGE3NDIwMTRhLCAweDI0MDIwMDAyLAotCTB4MTA2MjAwMGQsIDB4MmM2MjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDQsIDB4MTA2MDAwMTEsIDB4M2MwMjAwNDEsCi0JMHgwYTAwMDRkNiwgMHgwMDAwMDAwMCwgMHgxMDYyMDAwNywgMHgyNDAyMDAwNiwgMHgxNDYyMDAwZCwgMHgzYzAyMDE1MSwKLQkweDBhMDAwNGQwLCAweDI0MDMwMDAxLCAweDBhMDAwNGNmLCAweDNjMDIwMTQxLCAweDNjMDIwMDUxLCAweDI0MDMwMDAxLAotCTB4YWY0MjEwMDAsIDB4YWY4MzAwMjAsIDB4MGEwMDA0ZDYsIDB4MDAwMDAwMDAsIDB4YWY0MjEwMDAsIDB4YWY4MDAwMjAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAyMCwgMHgyNGEzMDAwOCwKLQkweDhmODUwMDE4LCAweDEwNDAwMDA2LCAweDMwYzZmZmZmLCAweDNjMDQ4MDAwLCAweDhmNDIxMDAwLCAweDAwNDQxMDI0LAotCTB4MTA0MGZmZmQsIDB4MDAwMDAwMDAsIDB4MzA2M2ZmZmYsIDB4MzA2MjAwMDcsIDB4MTA0MDAwMDIsIDB4MjQ2MjAwMDcsCi0JMHgzMDQzZmZmOCwgMHgwMGEzMTAyMSwgMHgzMDQyMWZmZiwgMHgyNDQzNDAwMCwgMHgwMzQzZDgyMSwgMHgwMGMwMjAyMSwKLQkweDMwODMwMDA3LCAweGFmODUwMDBjLCAweGFmODIwMDE4LCAweGFmNDIwMDg0LCAweDEwNjAwMDAyLCAweDI0ODIwMDA3LAotCTB4MzA0NGZmZjgsIDB4OGY4MjAwMzAsIDB4OGY4NTAwMDAsIDB4MDA0NDE4MjEsIDB4YWY4MjAwMWMsIDB4MDA2NTEwMmIsCi0JMHhhZjgzMDAzMCwgMHgxNDQwMDAwMiwgMHgwMDY1MTAyMywgMHhhZjgyMDAzMCwgMHg4Zjg0MDAzMCwgMHgzNDAyODAwMCwKLQkweDNjMDMwODAwLCAweDhjNjUwODM0LCAweDAwODIxMDIxLCAweDAzNDIxODIxLCAweGFmODMwMDEwLCAweGFmNDQwMDgwLAotCTB4MTBhMDAwMDYsIDB4MjQwMjAwMGUsIDB4OTM4MzAwMmYsIDB4MTQ2MjAwMDQsIDB4M2MwMjEwMDAsIDB4MjQwMjA0M2YsCi0JMHhhNzQyMDE0OCwgMHgzYzAyMTAwMCwgMHgwM2UwMDAwOCwgMHhhZjQyMDE3OCwgMHg4ZjgyMDAyNCwgMHgzMDQyNDAwMCwKLQkweDEwNDAwMDA1LCAweDI0MDIwODAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwNDBlLCAweDI0MDIwODAwLAotCTB4YWY0MjAxNzgsIDB4OTc0NDAxMDQsIDB4M2MwMzAwMDgsIDB4YWY0MzAxNDAsIDB4OGY4MjAwMjQsIDB4MzA0MjAwMDEsCi0JMHgxMDQwMDAwNiwgMHgzMDg1ZmZmZiwgMHgyNDAyMDAwMiwgMHgyNGEzZmZmZSwgMHhhNzQyMDE0NiwgMHgwYTAwMDUyNiwKLQkweGE3NDMwMTQ4LCAweGE3NDAwMTQ2LCAweDhmODQwMDE4LCAweDI0MDIwMDBkLCAweGE3NDIwMTRhLCAweDI0ODMwMDA4LAotCTB4MzA2MzFmZmYsIDB4MjQ2MjQwMDAsIDB4MDM0MmQ4MjEsIDB4MzBhMjAwMDcsIDB4YWY4NDAwMGMsIDB4YWY4MzAwMTgsCi0JMHhhZjQzMDA4NCwgMHgxMDQwMDAwMiwgMHgyNGEyMDAwNywgMHgzMDQ1ZmZmOCwgMHg4ZjgyMDAzMCwgMHg4Zjg0MDAwMCwKLQkweDAwNDUxODIxLCAweGFmODIwMDFjLCAweDAwNjQxMDJiLCAweGFmODMwMDMwLCAweDE0NDAwMDAyLCAweDAwNjQxMDIzLAotCTB4YWY4MjAwMzAsIDB4OGY4NDAwMzAsIDB4MzQwMjgwMDAsIDB4MDA4MjEwMjEsIDB4MDM0MjE4MjEsIDB4M2MwMjEwMDAsCi0JMHhhZjgzMDAxMCwgMHhhZjQ0MDA4MCwgMHgwM2UwMDAwOCwgMHhhZjQyMDE3OCwgMHgyN2JkZmZlOCwgMHgzYzA0NjAwOCwKLQkweGFmYmYwMDE0LCAweGFmYjAwMDEwLCAweDhjODI1MDAwLCAweDNjMWE4MDAwLCAweDI0MDNmZjdmLCAweDM3NWI0MDAwLAotCTB4MDA0MzEwMjQsIDB4MzQ0MjM4MGMsIDB4YWM4MjUwMDAsIDB4OGY0MzAwMDgsIDB4M2MxMDA4MDAsIDB4Mzc0MjgwMDAsCi0JMHgzNDYzMDAwMSwgMHhhZjQzMDAwOCwgMHhhZjgyMDAxMCwgMHgzYzAyNjAxYywgMHhhZjgwMDAxOCwgMHhhZjQwMDA4MCwKLQkweGFmNDAwMDg0LCAweDhjNDUwMDA4LCAweDNjMDM2MDAwLCAweDhjNjIwODA4LCAweDNjMDQwODAwLCAweDNjMDMwMDgwLAotCTB4YWM4MzA4MjAsIDB4MzA0MmZmZjAsIDB4Mzg0MjAwMTAsIDB4MmM0MjAwMDEsIDB4YWY4NTAwMDAsIDB4YWY4MjAwMDQsCi0JMHgwZTAwMDY1OCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAwMSwgMHgxMDQwZmZmYiwgMHgwMDAwMDAwMCwKLQkweDhmNDMwMTA4LCAweDhmNDQwMTAwLCAweDMwNjIyMDAwLCAweGFmODMwMDI0LCAweGFmODQwMDE0LCAweDEwNDAwMDA0LAotCTB4OGUwMjA4MmMsIDB4MjQ0MjAwMDEsIDB4MGEwMDA1YzYsIDB4YWUwMjA4MmMsIDB4MzA2MjAyMDAsIDB4MTQ0MDAwMDMsCi0JMHgyNDAyMGYwMCwgMHgxNDgyMDAyNywgMHgyNDAyMGQwMCwgMHg5NzQyMDEwNCwgMHgxMDQwMDAxYywgMHgzMDYyNDAwMCwKLQkweDE0NDAwMDA1LCAweDAwMDAwMDAwLCAweDBlMDAwMjJmLCAweDAwMDAwMDAwLCAweDBhMDAwNWJiLCAweDAwMDAwMDAwLAotCTB4OGY2MjAwMDgsIDB4OGY2MzAwMDAsIDB4MjQwMjAwMzAsIDB4MDAwMzFlMDIsIDB4MzA2MzAwZjAsIDB4MTA2MjAwMDcsCi0JMHgyODYyMDAzMSwgMHgxNDQwMDAyZiwgMHgyNDAyMDA0MCwgMHgxMDYyMDAwNywgMHgwMDAwMDAwMCwgMHgwYTAwMDViYiwKLQkweDAwMDAwMDAwLCAweDBlMDAwMmU4LCAweDAwMDAwMDAwLCAweDBhMDAwNWJiLCAweDAwMDAwMDAwLCAweDBlMDAwM2RiLAotCTB4MDAwMDAwMDAsIDB4MGEwMDA1YmIsIDB4MDAwMDAwMDAsIDB4MzA2MjAwNDAsIDB4MTQ0MDAwMmIsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDRiMiwgMHgwYTAwMDVjNiwgMHgwMDAwMDAwMCwgMHgxNDgyMDAwZiwKLQkweDMwNjIwMDA2LCAweDk3NDIwMTA0LCAweDEwNDAwMDA1LCAweDMwNjIwMDQwLCAweDBlMDAwNTEwLCAweDAwMDAwMDAwLAotCTB4MGEwMDA1YmIsIDB4MDAwMDAwMDAsIDB4MTQ0MDAwMWIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsCi0JMHgyNDAwMDRjNCwgMHgwYTAwMDVjNiwgMHgwMDAwMDAwMCwgMHgxMDQwMDAwZSwgMHgzMDYyMTAwMCwgMHgxMDQwMDAwNSwKLQkweDAwMDAwMDAwLCAweDBlMDAwNjg4LCAweDAwMDAwMDAwLCAweDBhMDAwNWJiLCAweDAwMDAwMDAwLCAweDBlMDAwNGExLAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMmMsIDB4MjQ0MjAwMDEsIDB4YWY4MjAwMmMsIDB4MGEwMDA1YzYsIDB4MDAwMDAwMDAsCi0JMHgzMDYyMDA0MCwgMHgxNDQwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDRkYiwKLQkweDhmNDIwMTM4LCAweDNjMDM0MDAwLCAweDAwNDMxMDI1LCAweGFmNDIwMTM4LCAweDBhMDAwNTY2LCAweDAwMDAwMDAwLAotCTB4M2MwNDYwMDgsIDB4OGM4MzUwMDAsIDB4M2MxYTgwMDAsIDB4MjQwMmZmN2YsIDB4Mzc1YjQwMDAsIDB4MDA2MjE4MjQsCi0JMHgzNDYzMzgwYywgMHhhYzgzNTAwMCwgMHg4ZjQyMDAwOCwgMHgzYzA1NjAwMCwgMHgzYzAzNjAxYywgMHgzNDQyMDAwMSwKLQkweGFmNDIwMDA4LCAweDM3NDI4MDAwLCAweGFmODAwMDE4LCAweGFmODIwMDEwLCAweGFmNDAwMDgwLCAweGFmNDAwMDg0LAotCTB4OGM2NjAwMDgsIDB4OGNhMjA4MDgsIDB4M2MwNDA4MDAsIDB4M2MwMzAwODAsIDB4YWM4MzA4MjAsIDB4MzA0MmZmZjAsCi0JMHgzODQyMDAxMCwgMHgyYzQyMDAwMSwgMHhhZjg2MDAwMCwgMHhhZjgyMDAwNCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDMwODRmZmZmLCAweDMwODIwMDA3LCAweDEwNDAwMDAyLCAweDI0ODIwMDA3LCAweDMwNDRmZmY4LCAweDhmODIwMDE4LAotCTB4MDA0NDE4MjEsIDB4MzA2MzFmZmYsIDB4MjQ2NDQwMDAsIDB4MDM0NGQ4MjEsIDB4YWY4MjAwMGMsIDB4YWY4MzAwMTgsCi0JMHgwM2UwMDAwOCwgMHhhZjQzMDA4NCwgMHgzMDg0ZmZmZiwgMHgzMDgyMDAwNywgMHgxMDQwMDAwMiwgMHgyNDgyMDAwNywKLQkweDMwNDRmZmY4LCAweDhmODIwMDMwLCAweDhmODMwMDAwLCAweDAwNDQyMDIxLCAweGFmODIwMDFjLCAweDAwODMxMDJiLAotCTB4YWY4NDAwMzAsIDB4MTQ0MDAwMDIsIDB4MDA4MzEwMjMsIDB4YWY4MjAwMzAsIDB4OGY4MjAwMzAsIDB4MzQwMzgwMDAsCi0JMHgwMDQzMTgyMSwgMHgwMzQzMjAyMSwgMHhhZjg0MDAxMCwgMHgwM2UwMDAwOCwgMHhhZjQyMDA4MCwgMHg4ZjgzMDAyNCwKLQkweDI0MDIwMDAyLCAweDMwNjMwMDA2LCAweDEwNjIwMDBkLCAweDJjNjIwMDAzLCAweDUwNDAwMDA1LCAweDI0MDIwMDA0LAotCTB4MTA2MDAwMTIsIDB4M2MwMjAwMDEsIDB4MGEwMDA2MmEsIDB4MDAwMDAwMDAsIDB4MTA2MjAwMDcsIDB4MjQwMjAwMDYsCi0JMHgxNDYyMDAwZiwgMHgzYzAyMDExMSwgMHgwYTAwMDYyMiwgMHgwMDgyMTAyNSwgMHgwYTAwMDYyMSwgMHgzYzAyMDEwMSwKLQkweDNjMDIwMDExLCAweDAwODIxMDI1LCAweDI0MDMwMDAxLCAweGFmNDIxMDAwLCAweGFmODMwMDIwLCAweDBhMDAwNjJhLAotCTB4MDAwMDAwMDAsIDB4MDA4MjEwMjUsIDB4YWY0MjEwMDAsIDB4YWY4MDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAyMCwgMHgxMDQwMDAwNSwgMHgzYzAzODAwMCwKLQkweDhmNDIxMDAwLCAweDAwNDMxMDI0LCAweDEwNDBmZmZkLCAweDAwMDAwMDAwLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4OGY4MjAwMjQsIDB4MjdiZGZmZTgsIDB4MzA0MjQwMDAsIDB4MTQ0MDAwMDUsIDB4YWZiZjAwMTAsIDB4MGUwMDAyMmYsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMDY1NiwgMHg4ZmJmMDAxMCwgMHg4ZjYyMDAwOCwgMHg4ZjYzMDAwMCwgMHgyNDAyMDAzMCwKLQkweDAwMDMxZTAyLCAweDMwNjMwMGYwLCAweDEwNjIwMDA4LCAweDI4NjIwMDMxLCAweDE0NDAwMDBkLCAweDhmYmYwMDEwLAotCTB4MjQwMjAwNDAsIDB4MTA2MjAwMDcsIDB4MDAwMDAwMDAsIDB4MGEwMDA2NTYsIDB4MDAwMDAwMDAsIDB4MGUwMDAyZTgsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMDY1NiwgMHg4ZmJmMDAxMCwgMHgwZTAwMDNkYiwgMHgwMDAwMDAwMCwgMHg4ZmJmMDAxMCwKLQkweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDhmODQwMDI4LCAweDEwODAwMDBmLCAweDNjMDI2MDAwLCAweDhjNDMwYzNjLAotCTB4MzA2MzBmZmYsIDB4YWY4MzAwMDgsIDB4MTQ2MDAwMTEsIDB4MzA4MjAwMGYsIDB4MTA0MDAwMDUsIDB4MzA4MjAwZjAsCi0JMHgxMDQwMDAwMywgMHgzMDgyMGYwMCwgMHgxNDQwMDAwNiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwKLQkweDI0MDAwNTFhLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwNTFmLAotCTB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4YWY4MzAwMjgsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4MTBjMDAwMDcsCi0JMHgwMDAwMDAwMCwgMHg4Y2EyMDAwMCwgMHgyNGM2ZmZmZiwgMHgyNGE1MDAwNCwgMHhhYzgyMDAwMCwgMHgxNGMwZmZmYiwKLQkweDI0ODQwMDA0LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDBhMDAwNjg0LCAweDAwYTAxMDIxLCAweGFjODYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjQ4NDAwMDQsIDB4MDBhMDEwMjEsIDB4MTQ0MGZmZmEsIDB4MjRhNWZmZmYsCi0JMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH07CitzdGF0aWMgdTggYm54Ml9UUEFUX2IwNkZ3VGV4dFtdID0geworCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4NDcsIDB4ZDIsIDB4NDEsIDB4NDQsIDB4MDAsIDB4MDMsIDB4NzQsIDB4NjUsCisJMHg3MywgMHg3NCwgMHgzMSwgMHgyZSwgMHg2MiwgMHg2OSwgMHg2ZSwgMHgwMCwgMHhjNSwgMHg1NywgMHg0ZCwgMHg2OCwKKwkweDFjLCAweGU3LCAweDE5LCAweDdlLCAweGU3LCAweDc3LCAweDQ3LCAweDYyLCAweDI1LCAweDhkLCAweDkzLCAweDNkLAorCTB4YWMsIDB4NWQsIDB4YTUsIDB4OTksIDB4OTEsIDB4NDYsIDB4M2YsIDB4NTQsIDB4MjYsIDB4OWUsIDB4ODQsIDB4YTUsCisJMHg1NiwgMHg2MSwgMHgyMCwgMHhlMywgMHg5OSwgMHg5NSwgMHgyYywgMHgwYywgMHgwNSwgMHgwNywgMHg0MiwgMHgwOCwKKwkweGU0LCAweGIyLCAweDFkLCAweDQ5LCAweDM2LCAweDg1LCAweDFlLCAweDVhLCAweDlhLCAweDQzLCAweGEwLCAweDA1LAorCTB4MGYsIDB4MzMsIDB4ZWIsIDB4MzQsIDB4ODcsIDB4YzUsIDB4ZGIsIDB4YWEsIDB4YzUsIDB4YmUsIDB4OTQsIDB4ZDYsCisJMHg5NSwgMHhlYSwgMHhlOCwgMHhiMiwgMHg2OCwgMHhlMiwgMHg1MywgMHgwZiwgMHhjNSwgMHhkOCwgMHhiNCwgMHg1NCwKKwkweGQwLCAweDUzLCAweDdiLCAweDBhLCAweDg1LCAweDVjLCAweDRjLCAweDY5LCAweDIwLCAweDg1LCAweDEyLCAweDQ0LAorCTB4MGYsIDB4MjEsIDB4ZDQsIDB4YWQsIDB4YTcsIDB4Y2YsIDB4ZmIsIDB4Y2QsIDB4OGMsIDB4YmMsIDB4YmIsIDB4OTUsCisJMHg1YiwgMHgxZiwgMHgwMiwgMHgxNSwgMHhhYywgMHg2NiwgMHhlNiwgMHhmYiwgMHhkZSwgMHhmNywgMHhmYiwgMHg3OSwKKwkweDlmLCAweGU3LCAweDc5LCAweGJmLCAweGY3LCAweDZiLCAweGNhLCAweDM0LCAweDQ5LCAweGU1LCAweGRmLCAweDE0LAorCTB4N2UsIDB4NmYsIDB4N2YsIDB4ZTMsIDB4ZGIsIDB4NmYsIDB4N2YsIDB4ZjUsIDB4YTUsIDB4NTcsIDB4MmMsIDB4YTIsCisJMHg1NywgMHg1ZSwgMHg5MiwgMHg2NCwgMHg1ZCwgMHhhNiwgMHgyZiwgMHhlMCwgMHg0ZiwgMHgyMSwgMHgzMiwgMHhhYiwKKwkweGYxLCAweGY5LCAweDQ3LCAweDg2LCAweGVjLCAweDc1LCAweGNlLCAweDA0LCAweDBlLCAweDE5LCAweDhhLCAweDc3LAorCTB4MzQsIDB4YmIsIDB4ZTksIDB4MTAsIDB4ZjksIDB4ODMsIDB4MTUsIDB4MmIsIDB4YTQsIDB4N2YsIDB4ZTUsIDB4NzEsCisJMHg0MywgMHgyNSwgMHg2ZSwgMHg3ZiwgMHhjMSwgMHhmYiwgMHhlNywgMHhiOSwgMHg3YiwgMHhlNywgMHhlZCwgMHhhMywKKwkweGRiLCAweDBhLCAweDE5LCAweGE2LCAweGQ3LCAweDMxLCAweGNjLCAweDQ1LCAweDMyLCAweDY2LCAweGUxLCAweGYzLAorCTB4ZDMsIDB4YTUsIDB4NzUsIDB4OGQsIDB4YTYsIDB4YWIsIDB4YjEsIDB4NGMsIDB4NGEsIDB4ZmEsIDB4MDYsIDB4YWQsCisJMHhmNSwgMHgzMCwgMHg4ZSwgMHhmMywgMHg4ZSwgMHgxNCwgMHg2NiwgMHhhYSwgMHgxNCwgMHhkZSwgMHgzMiwgMHg0OCwKKwkweGY2LCAweDdjLCAweDI5LCAweGM4LCAweDFjLCAweGY0LCAweDQ5LCAweDE0LCAweGI4LCAweDM1LCAweGYyLCAweGNkLAorCTB4M2MsIDB4ZmYsIDB4YTYsIDB4MmIsIDB4OTMsIDB4ZWMsIDB4M2MsIDB4Y2UsIDB4ZTcsIDB4MTcsIDB4ZDYsIDB4YTUsCisJMHg2MCwgMHg3ZiwgMHg0MywgMHgwYSwgMHhmNywgMHgwMywgMHhkZSwgMHgzNywgMHhkNiwgMHhiMSwgMHgyZSwgMHhmOSwKKwkweGZiLCAweGZjLCAweGY0LCAweDhjLCAweGIwLCAweDM3LCAweDRkLCAweDlkLCAweDA2LCAweGNkLCAweGM4LCAweDBlLAorCTB4ZmIsIDB4NWEsIDB4MTQsIDB4YmEsIDB4MmIsIDB4NGQsIDB4ODUsIDB4ZTYsIDB4ZjEsIDB4OWIsIDB4YTAsIDB4NmQsCisJMHg5NywgMHhlYSwgMHg4MSwgMHg0YiwgMHhhYSwgMHhlMiwgMHhjOCwgMHgxNCwgMHgzNiwgMHgyNCwgMHhmYSwgMHg2NSwKKwkweDRiLCAweGMzLCAweGVmLCAweDkyLCAweGQ0LCAweGRlLCAweGRmLCAweDJhLCAweGM3LCAweDY5LCAweDUwLCAweDhhLAorCTB4YjUsIDB4NDQsIDB4MGQsIDB4NWUsIDB4NWIsIDB4ZTEsIDB4MWYsIDB4YjgsIDB4MmIsIDB4YTYsIDB4NGMsIDB4ZjMsCisJMHhmOCwgMHg0ZCwgMHhlMSwgMHgzZCwgMHg4MiwgMHg5ZCwgMHg0NiwgMHg0MSwgMHg2YiwgMHhiYywgMHg2ZiwgMHgwMiwKKwkweGVmLCAweDU4LCAweDI3LCAweGM2LCAweDBhLCAweGM0LCAweDNhLCAweDJjLCAweGFjLCAweGMzLCAweGExLCAweDZlLAorCTB4N2YsIDB4MDMsIDB4ZmIsIDB4NTgsIDB4NjgsIDB4NDYsIDB4YTQsIDB4NTMsIDB4NTcsIDB4YWMsIDB4N2QsIDB4OGEsCisJMHgxMiwgMHg1MywgMHhhMSwgMHhlNCwgMHhhYywgMHg0NiwgMHhmZSwgMHg2NSwgMHgxNSwgMHhkZiwgMHhjZiwgMHg1MSwKKwkweDZjLCAweDRhLCAweGIwLCAweGU5LCAweDk2LCAweGY4LCAweGQ1LCAweGQwLCAweGFmLCAweGEzLCAweDdkLCAweDg2LAorCTB4OTIsIDB4YzYsIDB4MjksIDB4NDksIDB4ZjYsIDB4YmUsIDB4OGYsIDB4ZjYsIDB4MDUsIDB4MzMsIDB4YTIsIDB4ZWYsCisJMHhlMSwgMHgyOSwgMHhlMSwgMHhmYiwgMHgxNCwgMHg4ZiwgMHg4NywgMHg2ZiwgMHg4OSwgMHgxNCwgMHg4NywgMHhjYywKKwkweDIwLCAweGIzLCAweDI4LCAweGNkLCAweDJhLCAweDVmLCAweDZlLCAweDJmLCAweGRhLCAweGUyLCAweDZjLCAweDFjLAorCTB4M2IsIDB4ZDgsIDB4ZjUsIDB4NWYsIDB4YTUsIDB4OGUsIDB4NDksIDB4YjEsIDB4ZWEsIDB4YzEsIDB4YTYsIDB4ZWYsCisJMHg5OCwgMHg2ZCwgMHhlMCwgMHhlNCwgMHgwYiwgMHgzYywgMHhiZiwgMHhjNiwgMHhlZCwgMHhmYywgMHg4NywgMHg3NiwKKwkweDhiLCAweDE0LCAweGNmLCAweDMxLCAweDQzLCAweDZhLCAweDUxLCAweGQxLCAweGQ3LCAweDMwLCAweDgzLCAweDViLAorCTB4MmYsIDB4OTMsIDB4MmYsIDB4ZTIsIDB4NjEsIDB4ZTAsIDB4ZGQsIDB4YzQsIDB4OWUsIDB4NzQsIDB4NjAsIDB4OWIsCisJMHhmOCwgMHgzMiwgMHhjNSwgMHg0ZCwgMHg4MywgMHhlYywgMHhkNSwgMHgyZCwgMHhmNCwgMHg3YywgMHhkYywgMHg1MywKKwkweDEwLCAweDY3LCAweGM2LCAweDQ5LCAweDJkLCAweGZkLCAweDE4LCAweGQ3LCAweGRmLCAweDYyLCAweDVkLCAweGIxLAorCTB4NjksIDB4ZDAsIDB4MGMsIDB4NzUsIDB4NWUsIDB4Y2YsIDB4ZjMsIDB4M2IsIDB4NmUsIDB4OWUsIDB4ZWIsIDB4OWUsCisJMHhiMywgMHhmYywgMHgzZSwgMHhhZCwgMHgzNCwgMHgzNSwgMHg1YSwgMHgzNCwgMHhmMSwgMHg0NCwgMHhkYywgMHgxYywKKwkweGM0LCAweDQ2LCAweDJkLCAweGU3LCAweDlmLCAweDJhLCAweGQ3LCAweGZhLCAweDQ4LCAweDQyLCAweGU4LCAweGU5LAorCTB4Y2YsIDB4YmQsIDB4ZGYsIDB4ZjAsIDB4ZGUsIDB4OTcsIDB4ZDcsIDB4ODUsIDB4N2QsIDB4OWUsIDB4ZWYsIDB4YWUsCisJMHgzZSwgMHhjZCwgMHg1ZSwgMHg5MywgMHgwYiwgMHhmYiwgMHgzYywgMHg1ZiwgMHg2YiwgMHhmMSwgMHg3YywgMHgzNiwKKwkweGY2LCAweGM2LCAweDljLCAweDI0LCAweDVhLCAweDFiLCAweGI4LCAweDQ2LCAweGQ0LCAweGMzLCAweGJhLCAweDFjLAorCTB4M2MsIDB4MDcsIDB4NGQsIDB4YWMsIDB4ZGQsIDB4NWUsIDB4YjYsIDB4MjQsIDB4ODMsIDB4MTIsIDB4MjcsIDB4N2YsCisJMHgxMSwgMHgzYywgMHhmMCwgMHg0MywgMHhjNywgMHhmZSwgMHg1MywgMHhhOCwgMHhkNCwgMHg2OCwgMHhjZiwgMHhhZCwKKwkweDUzLCAweDM3LCAweDZiLCAweDUyLCAweDkyLCAweDc1LCAweDI5LCAweGM4LCAweDY0LCAweDhjLCAweDVmLCAweGEzLAorCTB4NWQsIDB4ZTcsIDB4ZjMsIDB4N2MsIDB4Y2QsIDB4NzUsIDB4ODEsIDB4MzMsIDB4YjEsIDB4NWYsIDB4NzMsIDB4OGQsCisJMHg2NiwgMHhkMSwgMHhiZiwgMHg2MiwgMHg2ZSwgMHg5MSwgMHg4YiwgMHg5OCwgMHhjYiwgMHg4OCwgMHhjOSwgMHhiYywKKwkweDc4LCAweDRmLCAweDMyLCAweDE3LCAweGZkLCAweDE0LCAweGNiLCAweDJkLCAweGRiLCAweDRjLCAweGM4LCAweDZlLAorCTB4MDYsIDB4MGEsIDB4OTksIDB4YjIsIDB4NjcsIDB4YzIsIDB4MjYsIDB4YTYsIDB4NzYsIDB4NjYsIDB4ZDAsIDB4NDMsCisJMHhlNSwgMHgxZCwgMHhjMSwgMHhlMywgMHhiNCwgMHhmZiwgMHgzMCwgMHhiZiwgMHhiNywgMHhkNCwgMHhhNCwgMHhmYiwKKwkweDU5LCAweDgzLCAweGVlLCAweDY2LCAweDI0LCAweDQ3LCAweDFjLCAweGFiLCAweDg2LCAweDQ5LCAweDFmLCAweDY0LAorCTB4ZDUsIDB4M2UsIDB4YzAsIDB4NjUsIDB4MjcsIDB4MzksIDB4YTMsIDB4NDAsIDB4NjcsIDB4OWIsIDB4ZWUsIDB4MDMsCisJMHhiMCwgMHhjNCwgMHgwNiwgMHgwZSwgMHgzMSwgMHhmNiwgMHg1YywgMHgzZCwgMHg3OSwgMHg0ZiwgMHhiNywgMHhjZiwKKwkweDZjLCAweDNhLCAweGY2LCAweDdiLCAweDIxLCAweGIzLCAweGYzLCAweDg2LCAweDhhLCAweGQ2LCAweGUxLCAweDM4LAorCTB4N2MsIDB4MWQsIDB4ZmUsIDB4MjYsIDB4NWQsIDB4ODcsIDB4NWUsIDB4NjQsIDB4YzQsIDB4NjMsIDB4ZWUsIDB4YzAsCisJMHhhMCwgMHhmZCwgMHg1ZSwgMHg4ZCwgMHhhYywgMHg1ZCwgMHg5NSwgMHhhMiwgMHg3ZSwgMHg4MywgMHhkYywgMHg0NSwKKwkweGRiLCAweDIyLCAweDU5LCAweDZlLCAweGM4LCAweDg4LCAweGRmLCAweGRjLCAweDZlLCAweDRlLCAweGViLCAweGFlLAorCTB4NDYsIDB4ODcsIDB4Y2UsIDB4NzcsIDB4NzUsIDB4OWEsIDB4NGUsIDB4NWMsIDB4OWQsIDB4ZDgsIDB4YzYsIDB4YTAsCisJMHhiOSwgMHhmNywgMHgwZCwgMHgyOSwgMHhlYywgMHhmMywgMHhmYSwgMHgzOSwgMHhjZSwgMHg0NiwgMHgxOSwgMHg2NywKKwkweDU1LCAweDBhLCAweDZlLCAweGQ1LCAweDY4LCAweDdlLCAweGU3LCAweDZmLCAweDc5LCAweGUwLCAweDIwLCAweGM2LAorCTB4ZTAsIDB4ZjEsIDB4NjYsIDB4Y2IsIDB4NTYsIDB4NjgsIDB4MTIsIDB4NmQsIDB4YmIsIDB4ZGMsIDB4NzcsIDB4NTQsCisJMHhiNiwgMHhmMywgMHgxOCwgMHg3OSwgMHgxZSwgMHhiOCwgMHhjZiwgMHg1MywgMHhjMCwgMHhmYywgMHg3ZSwgMHg5ZCwKKwkweDdkLCAweDZhLCAweDM0LCAweGI3LCAweGMzLCAweGJhLCAweGMwLCAweDczLCAweDk3LCAweGJmLCAweDc5LCAweDZkLAorCTB4MTMsIDB4MTQsIDB4NjEsIDB4MzcsIDB4ZDEsIDB4NzIsIDB4MDMsIDB4ZmIsIDB4OTcsIDB4ODUsIDB4MDYsIDB4MjIsCisJMHhlYywgMHg1NiwgMHg3NiwgMHgyNiwgMHhmMSwgMHgxNCwgMHg3MSwgMHg1MCwgMHgwYSwgMHgzZSwgMHg3MywgMHg1ZSwKKwkweGE4LCAweDUzLCAweDA4LCAweDVjLCAweDU1LCAweGFjLCAweDY3LCAweDhiLCAweDE2LCAweDlhLCAweGRiLCAweGEyLAorCTB4MGYsIDB4NmQsIDB4MDMsIDB4ZWUsIDB4MzMsIDB4YzcsIDB4ZmEsIDB4ZjAsIDB4M2QsIDB4YTgsIDB4ZDYsIDB4MjAsCisJMHgwMywgMHhmMywgMHgxNCwgMHhiMywgMHg2OCwgMHg2MiwgMHhhZiwgMHg2YiwgMHgyZSwgMHhkYiwgMHhiMywgMHg2ZCwKKwkweGJjLCAweGFjLCAweDkxLCAweGJkLCAweGJjLCAweDhiLCAweGQxLCAweGY3LCAweDdiLCAweGQ4LCAweGVmLCAweDRkLAorCTB4Y2UsIDB4MzUsIDB4OGUsIDB4ZjUsIDB4MTcsIDB4NjIsIDB4ZmIsIDB4NzksIDB4ZWMsIDB4NzksIDB4NjEsIDB4MzUsCisJMHhlNSwgMHhiZSwgMHg4MSwgMHg0NiwgMHhjZSwgMHg0ZSwgMHg2YywgMHhhYSwgMHg4OCwgMHhiZCwgMHg4YywgMHhjMCwKKwkweDg3LCAweDNmLCAweGZjLCAweDJjLCAweGQ3LCAweDNjLCAweDcwLCAweGI4LCAweDM1LCAweDAzLCAweDZjLCAweDZjLAorCTB4MmIsIDB4ODUsIDB4OWUsIDB4MWQsIDB4OGMsIDB4OWIsIDB4YjgsIDB4MGEsIDB4ZmMsIDB4MGEsIDB4OGMsIDB4ZDgsCisJMHg2ZSwgMHhiZCwgMHg5NywgMHg1MywgMHgyYSwgMHhlNiwgMHhiYSwgMHhjNiwgMHg3MywgMHgyMSwgMHhlNywgMHgzOCwKKwkweGFiLCAweGJmLCAweDAzLCAweDI3LCAweDIyLCAweGFhLCAweGQzLCAweGUyLCAweDQxLCAweDlkLCAweGFlLCAweDBlLAorCTB4ZWEsIDB4MzQsIDB4NzcsIDB4NDMsIDB4NDcsIDB4MWMsIDB4ZjIsIDB4YmMsIDB4ZGIsIDB4NjIsIDB4MGQsIDB4MDIsCisJMHg2YiwgMHg4NywgMHhlZCwgMHhlYywgMHhhNiwgMHgyMiwgMHhmMywgMHgzYSwgMHhkMCwgMHg3ZiwgMHg0MCwgMHhiNCwKKwkweDM1LCAweGQwLCAweDExLCAweDM3LCAweDc1LCAweDY4LCAweDZjLCAweDk5LCAweDJlLCAweGZlLCAweDg0LCAweGU4LAorCTB4ZTIsIDB4ODAsIDB4N2QsIDB4NzksIDB4ZmMsIDB4YzIsIDB4MjcsIDB4YzIsIDB4OWUsIDB4NjUsIDB4NjAsIDB4N2UsCisJMHg3NSwgMHgyMCwgMHgyMywgMHgxZiwgMHgyMCwgMHg1ZiwgMHhlZSwgMHgwNywgMHhjOCwgMHg4MywgMHg2ZCwgMHhmYywKKwkweGQ2LCAweDkxLCAweDFiLCAweDE5LCAweDFiLCAweGNlLCAweDEzLCAweDhmLCAweDgxLCAweGNmLCAweDA2LCAweGZhLAorCTB4MmUsIDB4YTEsIDB4OGQsIDB4ZjMsIDB4MTYsIDB4ZGIsIDB4ZWEsIDB4ZDQsIDB4NzYsIDB4YTcsIDB4MjgsIDB4YWQsCisJMHg3MiwgMHg5MSwgMHhjOSwgMHhiOSwgMHhlOCwgMHgxNCwgMHhmOCwgMHgzNCwgMHg4MSwgMHhmYywgMHg3MiwgMHg0NywKKwkweDE5LCAweGNkLCAweDQ1LCAweGM4LCAweDU5LCAweDhkLCAweGQzLCAweGM4LCAweDNkLCAweDNmLCAweDQ3LCAweDNiLAorCTB4OGYsIDB4ZjcsIDB4MzMsIDB4M2MsIDB4MjcsIDB4ZjAsIDB4N2QsIDB4MWEsIDB4YjYsIDB4YzMsIDB4NzksIDB4YTgsCisJMHhmMiwgMHg3YiwgMHg1YSwgMHgwZSwgMHgwMiwgMHhlZiwgMHg3NiwgMHgwYywgMHhkOCwgMHg1YiwgMHhkMCwgMHgwYiwKKwkweGM3LCAweGJiLCAweDg2LCAweDdjLCAweGMxLCAweDMxLCAweGFmLCAweDIxLCAweGE2LCAweDNhLCAweGU2LCAweDM2LAorCTB4NjksIDB4ZmUsIDB4ODAsIDB4NjIsIDB4YTUsIDB4Y2MsIDB4NGYsIDB4ZTEsIDB4NzEsIDB4N2UsIDB4NmEsIDB4MGEsCisJMHgxZSwgMHgyNCwgMHg5OSwgMHgwOSwgMHgxZiwgMHhkNiwgMHg2ZCwgMHhhNSwgMHg1MywgMHhjNiwgMHg4ZSwgMHhmYywKKwkweDAwLCAweDFhLCAweDBlLCAweDk0LCAweDNjLCAweGRmLCAweGM0LCAweDE5LCAweDExLCAweDAxLCAweDc3LCAweDFmLAorCTB4ZGEsIDB4OGQsIDB4YTAsIDB4ZGQsIDB4NzAsIDB4NDgsIDB4YmIsIDB4ZTEsIDB4ZmYsIDB4ZDQsIDB4MmUsIDB4NzQsCisJMHgwOSwgMHg4ZCwgMHhkYywgMHgwNSwgMHhhNywgMHgzZSwgMHhlOCwgMHg5ZiwgMHhhNCwgMHg2MywgMHhkNiwgMHgzMCwKKwkweDZiLCAweGQ5LCAweGEyLCAweDdiLCAweDRiLCAweGNmLCAweGEyLCAweGU1LCAweGJmLCAweDNlLCAweGFiLCAweDk2LAorCTB4NjMsIDB4ZDYsIDB4YjIsIDB4Y2EsIDB4NWEsIDB4NmUsIDB4MGMsIDB4NmIsIDB4ZjksIDB4NTMsIDB4ZjgsIDB4MTcsCisJMHg5YSwgMHhiYywgMHhhMCwgMHgzNiwgMHg0OCwgMHg1YiwgMHgwNCwgMHgwZSwgMHgzYiwgMHg3NSwgMHg1MiwgMHg2ZSwKKwkweDNjLCAweGUxLCAweDFiLCAweDczLCAweDM4LCAweDFjLCAweGUwLCAweGRmLCAweDgxLCAweDg2LCAweDNlLCAweDY5LAorCTB4YjQsIDB4MWQsIDB4MzksIDB4NGYsIDB4ZjUsIDB4ZWMsIDB4ZTYsIDB4OTYsIDB4YjAsIDB4NTEsIDB4NDksIDB4NDcsCisJMHhkYywgMHhiZiwgMHhiMywgMHg2NCwgMHg1YiwgMHg5NiwgMHgzYywgMHhhYywgMHg3OSwgMHhhOCwgMHg3ZSwgMHgyNywKKwkweGJmLCAweGE2LCAweDc5LCAweDNjLCAweDRmLCAweDZjLCAweDgxLCAweGViLCAweGQ2LCAweDhmLCAweDgwLCAweDUxLAorCTB4ZGEsIDB4NjMsIDB4OWUsIDB4M2IsIDB4ZTYsIDB4OWEsIDB4ZTAsIDB4MTcsIDB4YmUsIDB4YTEsIDB4MDUsIDB4MGQsCisJMHg3YywgMHhhZCwgMHhjMSwgMHg0ZSwgMHhkZCwgMHgyOSwgMHhmNCwgMHg3MywgMHgxNywgMHhlMywgMHhlZSwgMHhmNSwKKwkweDk4LCAweDVmLCAweDA2LCAweGU5LCAweDM3LCAweDlkLCAweGU2LCAweDU1LCAweDkxLCAweDczLCAweGU3LCAweGNkLAorCTB4NzUsIDB4NjIsIDB4ZWQsIDB4ZjEsIDB4NzksIDB4ODcsIDB4ZmUsIDB4NDEsIDB4OGQsIDB4MTQsIDB4YTEsIDB4ZjcsCisJMHhjOSwgMHg1MiwgMHhlZiwgMHgyZiwgMHgyMCwgMHg0NiwgMHg5MywgMHhmOCwgMHg2NiwgMHhjZCwgMHg5ZiwgMHgyZSwKKwkweDM1LCAweDNmLCAweDhkLCAweDI3LCAweGI3LCAweDVkLCAweDU0LCAweDBiLCAweGVlLCAweDgwLCAweDg3LCAweDNiLAorCTB4OGMsIDB4NmIsIDB4MWQsIDB4ZjksIDB4OGQsIDB4ZTcsIDB4ZmYsIDB4N2IsIDB4YmUsIDB4ZTksIDB4MzAsIDB4YjYsCisJMHg4ZSwgMHhmNSwgMHgwMywgMHg1YSwgMHg4MCwgMHhlZSwgMHhkMCwgMHg3ZSwgMHhjMCwgMHhiNiwgMHhlYywgMHg1MywKKwkweGQ5LCAweDlhLCAweGE1LCAweGVkLCAweGE3LCAweDYzLCAweGI2LCAweDY4LCAweDNmLCAweDYwLCAweDNiLCAweGQ2LAorCTB4YzUsIDB4NzMsIDB4YTQsIDB4ZGMsIDB4ZTQsIDB4ZjMsIDB4MzgsIDB4NjAsIDB4NWQsIDB4YzAsIDB4YWYsIDB4OGQsCisJMHgzNiwgMHhhZSwgMHgxOSwgMHhkOCwgMHg5ZiwgMHhjZiwgMHg2NiwgMHg1ZSwgMHgyNywgMHhkNywgMHgxMywgMHg3YywKKwkweDdlLCAweDhmLCAweDlkLCAweGQzLCAweGM3LCAweGRhLCAweGI4LCAweDAwLCAweGJlLCAweDdmLCAweDRiLCAweGZkLAorCTB4NGYsIDB4NmQsIDB4YmMsIDB4MDYsIDB4MmQsIDB4NWMsIDB4NTEsIDB4MGIsIDB4NmQsIDB4NmMsIDB4ZTMsIDB4NzksCisJMHgwMSwgMHhkZiwgMHhhZiwgMHg4ZCwgMHg2OSwgMHhhMywgMHhmMiwgMHg3YiwgMHhmYSwgMHhmOSwgMHg5YywgMHhmNCwKKwkweDliLCAweGUyLCAweDZjLCAweGU1LCAweGY5LCAweDk0LCAweDFkLCAweDhhLCAweGI1LCAweDUyLCAweDA3LCAweDZiLAorCTB4YzcsIDB4M2EsIDB4OTgsIDB4NDQsIDB4YWUsIDB4MTgsIDB4ZTEsIDB4YjgsIDB4MTIsIDB4YmEsIDB4YjYsIDB4OTksCisJMHgxMiwgMHg2YiwgMHg2MiwgMHhmOCwgMHhmYywgMHhmYSwgMHg3ZiwgMHhlOSwgMHg4MiwgMHhjMCwgMHgyMywgMHgzMSwKKwkweDM3LCAweDZhLCAweDBjLCAweDNlLCAweDBmLCAweGYyLCAweGZjLCAweDhhLCAweDhiLCAweGZlLCAweGFhLCAweGQ2LAorCTB4MTAsIDB4ZDgsIDB4ZjMsIDB4NTksIDB4Y2IsIDB4NzgsIDB4YTAsIDB4YmUsIDB4NzMsIDB4ZTYsIDB4YTEsIDB4MDUsCisJMHhjZSwgMHgwMSwgMHg4ZiwgMHhmMywgMHgzZCwgMHgyNywgMHg0MCwgMHg1YiwgMHgxYiwgMHhmMSwgMHg2NywgMHg0YywKKwkweDM2LCAweGE0LCAweGY1LCAweDdkLCAweDgzLCAweGZkLCAweGEwLCAweGIzLCAweDkzLCAweDZhLCAweDJjLCAweDFkLAorCTB4OWEsIDB4N2EsIDB4ODIsIDB4MTMsIDB4ZjMsIDB4MjgsIDB4MWEsIDB4YzIsIDB4YTksIDB4MjMsIDB4NzAsIDB4ZmEsCisJMHhmMCwgMHgxOCwgMHhhNywgMHhhOCwgMHhjNCwgMHgyOSwgMHgxMiwgMHgzOCwgMHhmZCwgMHhiMSwgMHhjNCwgMHhlOSwKKwkweDBmLCAweDRmLCAweGMxLCAweGU5LCAweGMzLCAweDY3LCAweGMwLCAweGM5LCAweGEwLCAweDNkLCAweGE3LCAweDg5LAorCTB4NzMsIDB4NTYsIDB4MTcsIDB4MzUsIDB4ZTksIDB4YTEsIDB4N2IsIDB4NTIsIDB4NGQsIDB4NzUsIDB4NTIsIDB4ZGMsCisJMHg2ZCwgMHg3MywgMHg4ZiwgMHg4NiwgMHhlYiwgMHgwZSwgMHhkYiwgMHg3YSwgMHg4MCwgMHhmNSwgMHhhNSwgMHhjMCwKKwkweGVlLCAweGZhLCAweDU4LCAweGVkLCAweDkxLCAweGMwLCAweGJlLCAweDVkLCAweGUyLCAweDc0LCAweDFkLCAweDM4LAorCTB4YjUsIDB4NGIsIDB4OWMsIDB4YjYsIDB4ODcsIDB4NzAsIDB4ZGEsIDB4MWUsIDB4YzEsIDB4ODksIDB4ZjMsIDB4NDksCisJMHhjYiwgMHhkOCwgMHhlZSwgMHg1NSwgMHgxOCwgMHg1NSwgMHhmOCwgMHhlOCwgMHg3NCwgMHhkYiwgMHg5YywgMHhjNiwKKwkweGZlLCAweGNmLCAweDUxLCAweGZhLCAweDYzLCAweDk1LCAweGViLCAweDVhLCAweDYwLCAweGY3LCAweGFhLCAweDJhLAorCTB4OGIsIDB4ZjMsIDB4ODAsIDB4ZGYsIDB4OWYsIDB4ZDQsIDB4MjcsIDB4OTgsIDB4Y2IsIDB4MGYsIDB4NWMsIDB4OGUsCisJMHgyMywgMHhlYSwgMHg1NywgMHhhNywgMHhjYSwgMHg0MywgMHhjZiwgMHhhYiwgMHhhOCwgMHhhZCwgMHhmMCwgMHhjZCwKKwkweDM2LCAweGFhLCAweGQ0LCAweDg2LCAweGRlLCAweDE1LCAweGQ0LCAweGU1LCAweGUxLCAweDcxLCAweDVkLCAweDVlLAorCTB4YzQsIDB4ZTAsIDB4N2EsIDB4NTksIDB4OTcsIDB4ZWYsIDB4MzksIDB4NWMsIDB4OTcsIDB4MmYsIDB4NmEsIDB4MzQsCisJMHhiOSwgMHg1MSwgMHg2MiwgMHhjOSwgMHg5YywgMHg5ZSwgMHg0MiwgMHhkZiwgMHgyNSwgMHg4MSwgMHg3OSwgMHg4YSwKKwkweGZjLCAweGJkLCAweDg5LCAweGZkLCAweDQ3LCAweDgyLCAweDliLCAweGE4LCAweGIxLCAweDRhLCAweGRlLCAweGEyLAorCTB4ODYsIDB4YTUsIDB4MzAsIDB4MmIsIDB4NjIsIDB4ZjUsIDB4YzUsIDB4ZDYsIDB4NWQsIDB4OWYsIDB4MjAsIDB4NGYsCisJMHgxYiwgMHgxZCwgMHgxNSwgMHg3NSwgMHhmZCwgMHhmZCwgMHg4YywgMHhmMywgMHgzMywgMHg1ZCwgMHg0ZSwgMHg3YSwKKwkweDE0LCAweDlmLCAweGYxLCAweGFlLCAweGU1LCAweGMwLCAweGRjLCAweDdmLCAweGViLCAweDNjLCAweDlmLCAweDMzLAorCTB4ZjUsIDB4ZDUsIDB4YTAsIDB4ODUsIDB4ZjYsIDB4ODEsIDB4NDEsIDB4YTgsIDB4N2QsIDB4NzAsIDB4NGYsIDB4YTEsCisJMHgzOCwgMHgzOCwgMHgyZiwgMHhhMSwgMHhjNiwgMHhjMSwgMHgzNywgMHg3YywgMHg5MiwgMHg2YywgMHhiNiwgMHgyMywKKwkweDdiLCAweDRkLCAweDcwLCAweDIxLCAweDI2LCAweDFmLCAweGViLCAweGY0LCAweDMzLCAweDcxLCAweDU3LCAweGU5LAorCTB4MjgsIDB4OWUsIDB4ODEsIDB4ZGEsIDB4OTIsIDB4MGMsIDB4OWMsIDB4ZjMsIDB4ODgsIDB4ODksIDB4NjUsIDB4YTQsCisJMHgwMywgMHhkNCwgMHg0MSwgMHgzOCwgMHhmYiwgMHg4MywgMHg1NSwgMHhjNCwgMHhlNSwgMHgyYywgMHg3MCwgMHhjYiwKKwkweDU0LCAweGY4LCAweGJlLCAweGE5LCAweDE3LCAweGY3LCAweDFjLCAweDU0LCAweDM1LCAweDIyLCAweDVlLCAweDhmLAorCTB4NGEsIDB4N2UsIDB4ODgsIDB4M2EsIDB4NGIsIDB4NmEsIDB4ZjcsIDB4YzksIDB4OGEsIDB4NWMsIDB4ZjAsIDB4MWMsCisJMHhlNywgMHg0OCwgMHgzNywgMHhlMywgMHhkYSwgMHhmOSwgMHhhYywgMHgyMSwgMHhkZiwgMHhlMCwgMHg1YywgMHg3ZSwKKwkweDg4LCAweDE4LCAweGUyLCAweGZkLCAweDgwLCAweGNmLCAweDE2LCAweDg1LCAweGViLCAweDZmLCAweGRjLCAweDY3LAorCTB4OTYsIDB4OTAsIDB4NmIsIDB4NjgsIDB4MGEsIDB4NzksIDB4MGYsIDB4NzksIDB4NzcsIDB4OTYsIDB4NzEsIDB4ZjIsCisJMHgyMywgMHhjNiwgMHg0YiwgMHg5YywgMHgxYiwgMHhlNywgMHhlNCwgMHg2MiwgMHg5ZSwgMHg1ZiwgMHg2YiwgMHgwNSwKKwkweDdmLCAweDcxLCAweDg3LCAweDQxLCAweGZjLCAweDM2LCAweGZiLCAweDJlLCAweGU3LCAweGRiLCAweDJmLCAweDJiLAorCTB4NzQsIDB4NDQsIDB4ODIsIDB4OGYsIDB4ZTYsIDB4Y2IsIDB4YzgsIDB4YzMsIDB4ZTcsIDB4ZTAsIDB4ZTMsIDB4MGIsCisJMHgyZCwgMHgxNiwgMHhmNSwgMHg1NiwgMHhlNSwgMHhmMywgMHhjOSwgMHhkOCwgMHgxOCwgMHgxZiwgMHgyOSwgMHhhMywKKwkweGRmLCAweDNlLCAweGY4LCAweGJjLCAweDUyLCAweGNlLCAweDU3LCAweGYxLCAweGUzLCAweDU3LCAweGUwLCAweGM3LAorCTB4NjEsIDB4ZDksIDB4Y2YsIDB4NzcsIDB4MTYsIDB4MWQsIDB4MzYsIDB4YmMsIDB4M2UsIDB4ZTYsIDB4MTEsIDB4ZGIsCisJMHg5YiwgMHhkYSwgMHhlOCwgMHgxOCwgMHg1ZiwgMHgxYSwgMHhmMywgMHhmZiwgMHhmZCwgMHg5MCwgMHhmZiwgMHgzNCwKKwkweGVmLCAweGM5LCAweDhjLCAweDBhLCAweDBlLCAweGUyLCAweGVmLCAweDNkLCAweDdkLCAweGQ0LCAweGY3LCAweDE3LAorCTB4NmEsIDB4ZjEsIDB4N2QsIDB4YjYsIDB4ZTAsIDB4OWUsIDB4ODMsIDB4NjcsIDB4NzYsIDB4MzgsIDB4YjQsIDB4MzYsCisJMHg3NSwgMHg2YywgMHhlYywgMHg4NywgMHgxOCwgMHg3YiwgMHgxNSwgMHg3OSwgMHg4NCwgMHg3YywgMHgwNSwgMHg3NywKKwkweGE2LCAweDkwLCAweGYwLCAweDllLCAweDVkLCAweGE5LCAweGUyLCAweDAzLCAweDRlLCAweGQwLCAweGU1LCAweGI0LAorCTB4ZTQsIDB4ODIsIDB4NWMsIDB4NzAsIDB4ODEsIDB4ZWIsIDB4YjQsIDB4ZDUsIDB4NGQsIDB4NzAsIDB4MjEsIDB4MDUsCisJMHgxNywgMHhlMCwgMHhkNywgMHhkMSwgMHhiYywgMHg1OSwgMHhlMCwgMHhjYywgMHgzOSwgMHgwNywgMHhkZiwgMHgxOSwKKwkweGYzLCAweDgyLCAweDc5LCAweGMwLCAweDljLCAweDc4LCAweGMyLCAweDg1LCAweDJiLCAweDNkLCAweGMzLCAweGQ4LAorCTB4ZmQsIDB4MmYsIDB4M2MsIDB4NzgsIDB4NTcsIDB4ZjAsIDB4ODAsIDB4ZjksIDB4NTgsIDB4ZTQsIDB4ODUsIDB4MmUsCisJMHg3MCwgMHg0OCwgMHhjYSwgMHhiYywgMHg1MCwgMHhlOCwgMHg5YywgMHhlYiwgMHgxYiwgMHhkNiwgMHg3OCwgMHhhMSwKKwkweDhkLCAweDJkLCAweDY4LCAweGEzLCAweGFkLCAweDcwLCAweGJkLCAweGMzLCAweGJhLCAweDYwLCAweDNmLCAweGQ2LAorCTB4YzYsIDB4NDksIDB4N2UsIDB4ODUsIDB4NDYsIDB4ZDIsIDB4YmUsIDB4NmQsIDB4NTUsIDB4ZjksIDB4MjEsIDB4ODUsCisJMHgyZSwgMHhiYSwgMHhhNSwgMHg0NiwgMHhkMiwgMHg1MiwgMHgyMywgMHhiMCwgMHg4OSwgMHg5NSwgMHgxNiwgMHhlNywKKwkweDdhLCAweGRiLCAweDBhLCAweDkxLCAweDE3LCAweGJhLCAweDYyLCAweGNjLCAweDk4LCAweDhhLCAweDNiLCAweDA5LAorCTB4ZWIsIDB4OTYsIDB4ZjMsIDB4ZTksIDB4NTAsIDB4MWUsIDB4MmQsIDB4ZWYsIDB4YTUsIDB4MWQsIDB4NzEsIDB4MmYsCisJMHhmZCwgMHg4YSwgMHgzZSwgMHg5YSwgMHg0NywgMHg2NywgMHg5MCwgMHg0MywgMHhmOCwgMHg1ZSwgMHgzYSwgMHhhNywKKwkweGYzLCAweGJkLCAweDE0LCAweGJhLCAweGQzLCAweDg3LCAweGVmLCAweGE1LCAweGM5LCAweGM4LCAweGJkLCAweGI0LAorCTB4ZjIsIDB4ZTUsIDB4ZjYsIDB4OTMsIDB4ZjIsIDB4NjksIDB4MTUsIDB4MTMsIDB4Y2UsIDB4YTksIDB4MDIsIDB4ZjMsCisJMHgxMywgMHg2YSwgMHhiZiwgMHhjYSwgMHg4NiwgMHhmMywgMHgwZCwgMHg2YiwgMHhiOSwgMHhjYywgMHg1MSwgMHhhOCwKKwkweGI1LCAweGVlLCAweDY3LCAweDE1LCAweGU3LCAweGRmLCAweGMwLCAweDNjLCAweGY4LCAweGVlLCAweDlmLCAweGM0LAorCTB4NzksIDB4YTMsIDB4ZTQsIDB4ZmMsIDB4NTQsIDB4ZTEsIDB4ZDMsIDB4MWYsIDB4ZTYsIDB4ZmQsIDB4MWIsIDB4ZmEsCisJMHgyOCwgMHhlZiwgMHhhYiwgMHg3MSwgMHgyYSwgMHhkZSwgMHgxNywgMHg2MywgMHgzZSwgMHg1NCwgMHg5YSwgMHgzOCwKKwkweGRiLCAweDk2LCAweDkxLCAweDZiLCAweDY2LCAweGY4LCAweGJlLCAweDg1LCAweDVjLCAweGUwLCAweGQ1LCAweDcxLAorCTB4ZWYsIDB4OTgsIDB4ZTEsIDB4YjEsIDB4ZDMsIDB4MGMsIDB4ZTcsIDB4NGQsIDB4MDMsIDB4YmMsIDB4MTcsIDB4OWMsCisJMHgzZCwgMHgxMiwgMHhmNywgMHgwMSwgMHhhYywgMHg3YiwgMHg4NiwgMHhhYiwgMHhhYiwgMHg1MSwgMHgyZSwgMHhiZSwKKwkweDg4LCAweDBiLCAweDQ1LCAweGI1LCAweDk3LCAweGFhLCAweGNkLCAweDE5LCAweDZhLCAweDViLCAweDJlLCAweGIxLAorCTB4MmUsIDB4NjIsIDB4ZmQsIDB4YTAsIDB4YjgsIDB4OGYsIDB4ZDMsIDB4MmUsIDB4NmEsIDB4YjEsIDB4NDMsIDB4ZDQsCisJMHgzOSwgMHg3NywgMHg3MCwgMHg5ZiwgMHg0YiwgMHgwNiwgMHg4ZiwgMHhmMiwgMHgwNywgMHgwZCwgMHg5NSwgMHhiYSwKKwkweGM3LCAweDNlLCAweDVkLCAweGFjLCAweGQ3LCAweDM2LCAweDZmLCAweGUzLCAweGVkLCAweGRkLCAweDQxLCAweDE1LAorCTB4NTMsIDB4ZWUsIDB4ZTcsIDB4YjYsIDB4N2YsIDB4ZTAsIDB4YmMsIDB4NDUsIDB4MWQsIDB4MzcsIDB4MzIsIDB4NjcsCisJMHhmNSwgMHhjZSwgMHg3ZiwgMHhmZiwgMHgwNiwgMHg2MywgMHhlMSwgMHg0YiwgMHg3YiwgMHgzMCwgMHgxMiwgMHgwMCwKKwkweDAwLCAweDAwIH07CiAKIHN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3RGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9Owogc3RhdGljIHUzMiBibngyX1RQQVRfYjA2RndSb2RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKQEAgLTI1NTQsOTM5ICsxNTQzLDQyMiBAQAogc3RhdGljIGNvbnN0IGludCBibngyX1RYUF9iMDZGd0Jzc0xlbiA9IDB4MWM0Owogc3RhdGljIGNvbnN0IHUzMiBibngyX1RYUF9iMDZGd1Nic3NBZGRyID0gMHgwODAwNTc2MDsKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndTYnNzTGVuID0gMHgzODsKLXN0YXRpYyB1MzIgYm54Ml9UWFBfYjA2RndUZXh0WygweDU3NDgvNCkgKyAxXSA9IHsKLQkweDBhMDAwZDJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDc0Nzg3MDIwLCAweDMyMmUzNTJlLAotCTB4MzgwMDAwMDAsIDB4MDIwNTA4MDAsIDB4MDAwMDAwMGEsIDB4MDAwMDAzZTgsIDB4MDAwMGVhNjAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MTAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4M2MwMjA4MDAsCi0JMHgyNDQyNTc2MCwgMHgzYzAzMDgwMCwgMHgyNDYzNTk2NCwgMHhhYzQwMDAwMCwgMHgwMDQzMjAyYiwgMHgxNDgwZmZmZCwKLQkweDI0NDIwMDA0LCAweDNjMWQwODAwLCAweDM3YmQ3ZmZjLCAweDAzYTBmMDIxLCAweDNjMTAwODAwLCAweDI2MTAzNGIwLAotCTB4M2MxYzA4MDAsIDB4Mjc5YzU3NjAsIDB4MGUwMDBmNWIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4OGY4NDAwMTQsCi0JMHgyN2JkZmZlOCwgMHhhZmIxMDAxNCwgMHhhZmIwMDAxMCwgMHg4ZjQ2MDEwNCwgMHg4ZjgzMDAwOCwgMHg4Yzg1MDBhYywKLQkweGFmNDMwMDgwLCAweDk0ODIwMGE4LCAweGE3NDIwZTEwLCAweDk0ODMwMGFhLCAweGE3NDMwZTEyLCAweDhjODIwMGFjLAotCTB4YWY0MjBlMTgsIDB4OTc0MzBlMTAsIDB4YTc0MzBlMTQsIDB4OTc0MjBlMTIsIDB4MDAwMDgwMjEsIDB4YTc0MjBlMTYsCi0JMHg4ZjQzMGUxOCwgMHgwMDAwNjAyMSwgMHgwMGM1MzAyMywgMHhhZjQzMGUxYywgMHgxMGMwMDFhMiwgMHgyZDgyMDAwMSwKLQkweDNjMGUxMDAwLCAweDI0MTlmZmY4LCAweDI0MTEwMDEwLCAweDI0MGYwZjAwLCAweDNjMTg4MTAwLCAweDkzNjIwMDA4LAotCTB4MTA0MDAwMDksIDB4MDAwMDAwMDAsIDB4OTc2MjAwMTAsIDB4MDBjMjEwMmIsIDB4MTQ0MDAwMDUsIDB4MDAwMDAwMDAsCi0JMHg5NzYyMDAxMCwgMHgzMDQyZmZmZiwgMHgwYTAwMGQ2ZCwgMHhhZjQyMGUwMCwgMHhhZjQ2MGUwMCwgMHg4ZjQyMDAwMCwKLQkweDMwNDIwMDA4LCAweDEwNDBmZmZkLCAweDAwMDAwMDAwLCAweDk3NDIwZTA4LCAweDhmNDUwZTA0LCAweDMwNDRmZmZmLAotCTB4MzA4MjAwMDEsIDB4MTQ0MDAwMDUsIDB4MDAwMDAwMDAsIDB4MTRhMDAwMDUsIDB4MzA4M2EwNDAsIDB4MGEwMDBmMzQsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgzMDgzYTA0MCwgMHgyNDAyMDA0MCwgMHgxNDYyMDA0ZiwgMHgzMDgyYTAwMCwKLQkweDMwOGEwMDM2LCAweDhmODgwMDBjLCAweDMwODkwMDA4LCAweDI0MDIwODAwLCAweGFmNDIwMTc4LCAweDAxMDAxODIxLAotCTB4OTc0MjAwOGEsIDB4MDA0MzEwMjMsIDB4MjQ0MmZmZmYsIDB4MzA0MjFmZmYsIDB4MmM0MjAwMDgsIDB4MTQ0MGZmZmEsCi0JMHgwMGEwNjAyMSwgMHg4ZjgyMDAxOCwgMHgwMGNjMzAyMywgMHgyNDA3MDAwMSwgMHg4ZjgzMDAwOCwgMHgzMDRiMDBmZiwKLQkweDI0NDIwMDAxLCAweGFmODIwMDE4LCAweDI1MDI0MDAwLCAweDEwNmYwMDA1LCAweDAzNDIyMDIxLCAweDkzODIwMDEyLAotCTB4MzA0MjAwMDcsIDB4MDAwMjEyNDAsIDB4MzQ0NzAwMDEsIDB4MDAwYjE0MDAsIDB4M2MwMzAxMDAsIDB4MDA0MzEwMjUsCi0JMHhhYzgyMDAwMCwgMHg4ZjgzMDAxOCwgMHgwMGVhMzgyNSwgMHgxMTIwMDAwZiwgMHhhYzgzMDAwNCwgMHg5NzQzMGUwYSwKLQkweDhmODQwMDBjLCAweDAwZWUzODI1LCAweDI0MDIwMDBlLCAweDAwNzgxODI1LCAweGFmNDMwMTYwLCAweDI1ODMwMDA2LAotCTB4MjQ4NDAwMDgsIDB4MzA4NDFmZmYsIDB4YTc0MjAxNWEsIDB4YTc0MzAxNTgsIDB4YWY4NDAwMGMsIDB4MGEwMDBkYjcsCi0JMHgwMDAwMDAwMCwgMHg4ZjgzMDAwYywgMHgyNTgyMDAwMiwgMHhhNzQyMDE1OCwgMHgyNDYzMDAwOCwgMHgzMDYzMWZmZiwKLQkweGFmODMwMDBjLCAweDU0YzAwMDBmLCAweDhmNDIwZTE0LCAweDhmODIwMDA4LCAweDUwNGYwMDAyLCAweDI0MTAwMDAxLAotCTB4MzRlNzAwNDAsIDB4OTc0MjBlMTAsIDB4OTc0MzBlMTIsIDB4OGY4NTAwMTQsIDB4MDAwMjE0MDAsIDB4MDA2MjE4MjUsCi0JMHhhY2EzMDBhOCwgMHg4Zjg0MDAxNCwgMHg4ZjQyMGUxOCwgMHhhYzgyMDBhYywgMHg4ZjQyMGUxNCwgMHg4ZjQzMGUxYywKLQkweGFmNDIwMTQ0LCAweGFmNDMwMTQ4LCAweGEzNGIwMTUyLCAweGFmNDcwMTU0LCAweDBhMDAwZWZiLCAweGFmNGUwMTc4LAotCTB4MTA0MDAxNjUsIDB4MDAwMDAwMDAsIDB4OTM2MjAwMDgsIDB4NTA0MDAwMDgsIDB4YWZhNjAwMDgsIDB4OTc2MjAwMTAsCi0JMHgwMGEyMTAyYiwgMHgxMDQwMDAwMywgMHgzMDgyMDA0MCwgMHgxMDQwMDE1YywgMHgwMDAwMDAwMCwgMHhhZmE2MDAwOCwKLQkweGE3ODQwMDEwLCAweGFmODUwMDA0LCAweDkzNjIwMDA4LCAweDE0NDAwMDVmLCAweDI3YWMwMDA4LCAweGFmNjAwMDBjLAotCTB4OTc4MjAwMTAsIDB4MzA0MjQwMDAsIDB4MTA0MDAwMDIsIDB4MjQwMzAwMGUsIDB4MjQwMzAwMTYsIDB4YTM2MzAwMGEsCi0JMHgyNDAzNDAwNywgMHhhZjYzMDAxNCwgMHg5MzgyMDAxMiwgMHg4ZjYzMDAxNCwgMHgzMDQyMDAwNywgMHgwMDAyMTI0MCwKLQkweDAwNjIxODI1LCAweGFmNjMwMDE0LCAweDk3ODIwMDEwLCAweDhmNjMwMDE0LCAweDMwNDIwMDEwLCAweDAwNjIxODI1LAotCTB4YWY2MzAwMTQsIDB4OTc4MjAwMTAsIDB4MzA0MjAwMDgsIDB4NTA0MDAwMGUsIDB4MDAwMDI4MjEsIDB4OGY2MjAwMTQsCi0JMHgwMDRlMTAyNSwgMHhhZjYyMDAxNCwgMHg5NzQzMGUwYSwgMHgyNDAyMDAwZSwgMHgwMDc4MTgyNSwgMHhhZjYzMDAwNCwKLQkweGEzNjIwMDAyLCAweDkzNjMwMDBhLCAweDM0MDVmZmZjLCAweDI0NjMwMDA0LCAweDBhMDAwZTA2LCAweGEzNjMwMDBhLAotCTB4YWY2MDAwMDQsIDB4YTM2MDAwMDIsIDB4OTc4MjAwMTAsIDB4OTM2MzAwMGEsIDB4MzA0MjFmMDAsIDB4MDAwMjExODIsCi0JMHgyNDQyMDAyOCwgMHgwMDYyMTgyMSwgMHhhMzYzMDAwOSwgMHg5NzQyMGUwYywgMHhhNzYyMDAxMCwgMHg5MzYzMDAwOSwKLQkweDI0MDIwMDA4LCAweDI0NjMwMDAyLCAweDMwNjMwMDA3LCAweDAwNDMxMDIzLCAweDMwNDIwMDA3LCAweGEzNjIwMDBiLAotCTB4OTM2NDAwMDksIDB4OTc2MjAwMTAsIDB4OGY4OTAwMDQsIDB4OTc4MzAwMTAsIDB4MDA0NDEwMjEsIDB4MDBhMjEwMjEsCi0JMHgzMDYzMDA0MCwgMHgxMDYwMDAwNywgMHgzMDQ1ZmZmZiwgMHgwMGE5MTAyYiwgMHgxNDQwMDAwNSwgMHgwMTI1MTAyYiwKLQkweDNjMDY4MDAwLCAweDBhMDAwZTNhLCAweDAwMDA1ODIxLCAweDAxMjUxMDJiLCAweDU0NDAwMGM3LCAweDAwMDA2MDIxLAotCTB4OTc0MjBlMTQsIDB4YTc0MjBlMTAsIDB4OTc0MzBlMTYsIDB4YTc0MzBlMTIsIDB4OGY0MjBlMWMsIDB4YWY0MjBlMTgsCi0JMHhhZjQ1MGUwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAwOCwgMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5NzQyMGUwOCwKLQkweDAwYTA0ODIxLCAweGE3ODIwMDEwLCAweDhmNDMwZTA0LCAweDAwMDAzMDIxLCAweDI0MGIwMDAxLCAweGFmODMwMDA0LAotCTB4OTc2MjAwMTAsIDB4MGEwMDBlNGMsIDB4MzA0ZGZmZmYsIDB4OGY4OTAwMDQsIDB4OTc4MjAwMTAsIDB4MzA0MjAwNDAsCi0JMHgxMDQwMDAwNCwgMHgwMTIwNjgyMSwgMHgzYzA2ODAwMCwgMHgwYTAwMGU0YywgMHgwMDAwNTgyMSwgMHg5NzYzMDAxMCwKLQkweDhmODIwMDA0LCAweDEwNDMwMDAzLCAweDAwMDAzMDIxLCAweDBhMDAwZWVlLCAweDAwMDA2MDIxLCAweDI0MGIwMDAxLAotCTB4OGQ4MjAwMDAsIDB4MDA0OTEwMjMsIDB4MTQ0MDAwMGQsIDB4YWQ4MjAwMDAsIDB4OGY2MjAwMTQsIDB4MzQ0MjAwNDAsCi0JMHhhZjYyMDAxNCwgMHg5NzQzMGUxMCwgMHg5NzQyMGUxMiwgMHg4Zjg0MDAxNCwgMHgwMDAzMWMwMCwgMHgwMDQzMTAyNSwKLQkweGFjODIwMGE4LCAweDhmODMwMDE0LCAweDhmNDIwZTE4LCAweGFjNjIwMGFjLCAweDkzNjIwMDA4LCAweDE0NDAwMDNlLAotCTB4MDAwMDAwMDAsIDB4MjUyNjAwMDIsIDB4OGY4NDAwMGMsIDB4OTc0MzAwOGEsIDB4MzA2M2ZmZmYsIDB4YWZhMzAwMDAsCi0JMHg4ZmEyMDAwMCwgMHgwMDQ0MTAyMywgMHgyNDQyZmZmZiwgMHgzMDQyMWZmZiwgMHgyYzQyMDAxMCwgMHgxNDQwZmZmNywKLQkweDAwMDAwMDAwLCAweDhmODIwMDBjLCAweDhmODMwMDE4LCAweDAwMDIxMDgyLCAweDAwMDIxMDgwLCAweDI0NDI0MDAwLAotCTB4MDM0MjI4MjEsIDB4MDA2MDUwMjEsIDB4MjQ2MzAwMDEsIDB4MzE0MjAwZmYsIDB4MDAwMjE0MDAsIDB4YWY4MzAwMTgsCi0JMHgzYzAzMzIwMCwgMHgwMDQzMTAyNSwgMHhhY2EyMDAwMCwgMHg5MzYzMDAwOSwgMHg5MzYyMDAwYSwgMHgwMDAzMWMwMCwKLQkweDAwNDMxMDI1LCAweGFjYTIwMDA0LCAweDhmODMwMDE4LCAweGFjYTMwMDA4LCAweDk3ODIwMDEwLCAweDMwNDIwMDA4LAotCTB4MTA0MDAwMDIsIDB4MDBjMDQwMjEsIDB4MjUyODAwMDYsIDB4OTc0MzBlMTQsIDB4OTM2NDAwMDIsIDB4OGY0NTBlMWMsCi0JMHg4ZjY2MDAwNCwgMHg4ZjY3MDAxNCwgMHgzMDYzZmZmZiwgMHhhNzQzMDE0NCwgMHg5NzQyMGUxNiwgMHhhNzQyMDE0NiwKLQkweGFmNDUwMTQ4LCAweGEzNGEwMTUyLCAweDhmODIwMDBjLCAweDMwODQwMGZmLCAweGE3NDQwMTVhLCAweGFmNDYwMTYwLAotCTB4YTc0ODAxNTgsIDB4YWY0NzAxNTQsIDB4YWY0ZTAxNzgsIDB4MDA1MTEwMjEsIDB4MzA0MjFmZmYsIDB4YWY4MjAwMGMsCi0JMHgwYTAwMGVkOSwgMHg4ZDgyMDAwMCwgMHg5MzYyMDAwOSwgMHg5MzYzMDAwYiwgMHg4Zjg1MDAwYywgMHgyNDYzMDAwYSwKLQkweDAwNDM1MDIxLCAweDI1NDQwMDA3LCAweDAwOTkyMDI0LCAweDk3NDMwMDhhLCAweDMwNjNmZmZmLCAweGFmYTMwMDAwLAotCTB4OGZhMjAwMDAsIDB4MDA0NTEwMjMsIDB4MjQ0MmZmZmYsIDB4MzA0MjFmZmYsIDB4MDA0NDEwMmIsIDB4MTQ0MGZmZjcsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAwYywgMHg4Zjg0MDAxOCwgMHgwMDAyMTA4MiwgMHgwMDAyMTA4MCwgMHgyNDQyNDAwMCwKLQkweDAzNDIyODIxLCAweDAwODA0MDIxLCAweDI0ODQwMDAxLCAweGFmODQwMDE4LCAweDkzNjMwMDA5LCAweDMxMDIwMGZmLAotCTB4MDAwMjI0MDAsIDB4M2MwMjQxMDAsIDB4MjQ2MzAwMDIsIDB4MDA2MjE4MjUsIDB4MDA4MzIwMjUsIDB4YWNhNDAwMDAsCi0JMHg4ZjYyMDAwYywgMHgwMDQ2MTAyNSwgMHhhY2EyMDAwNCwgMHg5NzQzMGUxNCwgMHg5MzY0MDAwMiwgMHg4ZjQ1MGUxYywKLQkweDhmNjYwMDA0LCAweDhmNjcwMDE0LCAweDMwNjNmZmZmLCAweGE3NDMwMTQ0LCAweDk3NDIwZTE2LCAweDMwODQwMGZmLAotCTB4YTc0MjAxNDYsIDB4YWY0NTAxNDgsIDB4YTM0ODAxNTIsIDB4OGY4MzAwMGMsIDB4MjU0MjAwMDcsIDB4MDA1OTEwMjQsCi0JMHhhNzQ0MDE1YSwgMHhhZjQ2MDE2MCwgMHhhNzQ5MDE1OCwgMHhhZjQ3MDE1NCwgMHhhZjRlMDE3OCwgMHgwMDYyMTgyMSwKLQkweDMwNjMxZmZmLCAweGFmODMwMDBjLCAweDhkODIwMDAwLCAweDE0NDAwMDA1LCAweDAwMDAwMDAwLCAweDhmNjIwMDE0LAotCTB4MjQwM2ZmYmYsIDB4MDA0MzEwMjQsIDB4YWY2MjAwMTQsIDB4OGY2MjAwMGMsIDB4MDA0ZDEwMjEsIDB4YWY2MjAwMGMsCi0JMHg5MzYzMDAwOCwgMHgxNDYwMDAwOCwgMHgwMDAwMDAwMCwgMHgxMTYwMDAwNiwgMHgwMDAwMDAwMCwgMHg4ZjYzMDAxNCwKLQkweDNjMDJlZmZmLCAweDM0NDJmZmZlLCAweDAwNjIxODI0LCAweGFmNjMwMDE0LCAweGEzNmIwMDA4LCAweDAxMjA2MDIxLAotCTB4MTU4MDAwMGMsIDB4OGZhNjAwMDgsIDB4OTc0MjBlMTQsIDB4OTc0MzBlMTYsIDB4OGY4NTAwMTQsIDB4MDAwMjE0MDAsCi0JMHgwMDYyMTgyNSwgMHhhY2EzMDBhOCwgMHg4Zjg0MDAxNCwgMHg4ZjQyMGUxYywgMHhhYzgyMDBhYywgMHgwYTAwMGVmZCwKLQkweDJkODIwMDAxLCAweDE0YzBmZTY1LCAweDJkODIwMDAxLCAweDAwNTAxMDI1LCAweDEwNDAwMDU4LCAweDI0MDIwZjAwLAotCTB4OGY4MzAwMDgsIDB4MTQ2MjAwMjMsIDB4M2MwNDgwMDAsIDB4MTE4MDAwMDksIDB4M2MwMzgwMDAsIDB4OTc0MjBlMDgsCi0JMHgzMDQyMDA0MCwgMHgxNDQwMDAwNSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDMyYywKLQkweDNjMDM4MDAwLCAweDhmNDIwMTc4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDk3NDIwZTEwLAotCTB4M2MwMzA1MDAsIDB4MDA0MzEwMjUsIDB4YWY0MjAxNGMsIDB4OTc0MzBlMTQsIDB4YTc0MzAxNDQsIDB4OTc0MjBlMTYsCi0JMHhhNzQyMDE0NiwgMHg4ZjQzMGUxYywgMHgyNDAyMjAwMCwgMHhhZjQzMDE0OCwgMHgzYzAzMTAwMCwgMHhhMzQwMDE1MiwKLQkweGE3NDAwMTVhLCAweGFmNDAwMTYwLCAweGE3NDAwMTU4LCAweGFmNDIwMTU0LCAweGFmNDMwMTc4LCAweDhmODMwMDA4LAotCTB4M2MwNDgwMDAsIDB4OGY0MjAxNzgsIDB4MDA0NDEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjBmMDAsIDB4MTA2MjAwMTYsCi0JMHgwMDAwMDAwMCwgMHg5NzQyMGUxNCwgMHhhNzQyMDE0NCwgMHg5NzQzMGUxNiwgMHhhNzQzMDE0NiwgMHg4ZjQyMGUxYywKLQkweDNjMDMxMDAwLCAweGFmNDIwMTQ4LCAweDBhMDAwZjUxLCAweDI0MDIwMjQwLCAweDk3NDIwZTE0LCAweDk3NDMwZTE2LAotCTB4OGY4NDAwMTQsIDB4MDAwMjE0MDAsIDB4MDA2MjE4MjUsIDB4YWM4MzAwYTgsIDB4OGY4NTAwMTQsIDB4OGY0MjBlMWMsCi0JMHgwMDAwNjAyMSwgMHhhY2EyMDBhYywgMHgwYTAwMGVmZCwgMHgyZDgyMDAwMSwgMHhhZjQwMDE0YywgMHgxMTgwMDAwNywKLQkweDAwMDAwMDAwLCAweDk3NDIwZTEwLCAweGE3NDIwMTQ0LCAweDk3NDMwZTEyLCAweGE3NDMwMTQ2LCAweDBhMDAwZjRlLAotCTB4OGY0MjBlMTgsIDB4OTc0MjBlMTQsIDB4YTc0MjAxNDQsIDB4OTc0MzBlMTYsIDB4YTc0MzAxNDYsIDB4OGY0MjBlMWMsCi0JMHhhZjQyMDE0OCwgMHgyNDAyMDA0MCwgMHgzYzAzMTAwMCwgMHhhMzQwMDE1MiwgMHhhNzQwMDE1YSwgMHhhZjQwMDE2MCwKLQkweGE3NDAwMTU4LCAweGFmNDIwMTU0LCAweGFmNDMwMTc4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LAotCTB4MjdiZDAwMTgsIDB4MjdiZGZmZDAsIDB4M2MxYTgwMDAsIDB4M2MwNDIwZmYsIDB4MzQ4NGZmZmQsIDB4M2MwMjAwMDgsCi0JMHgwMzQyMTgyMSwgMHhhZmJmMDAyYywgMHhhZmI2MDAyOCwgMHhhZmI1MDAyNCwgMHhhZmI0MDAyMCwgMHhhZmIzMDAxYywKLQkweGFmYjIwMDE4LCAweGFmYjEwMDE0LCAweGFmYjAwMDEwLCAweGFmODMwMDE0LCAweGFmNDQwZTAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4M2MwMjAwZmYsIDB4MzQ0MmZmZmQsCi0JMHgzYzA0NjAwNCwgMHhhZjQyMGUwMCwgMHg4YzgzNTAwMCwgMHgyNDE2MDgwMCwgMHgyNDE1MGQwMCwgMHgzYzE0MDgwMCwKLQkweDI0MTMwZjAwLCAweDNjMTIwODAwLCAweDNjMTE0MDAwLCAweDI0MDJmZjdmLCAweDAwNjIxODI0LCAweDM0NjMzODBjLAotCTB4MjQwMjAwMDksIDB4YWM4MzUwMDAsIDB4YWY0MjAwMDgsIDB4YWY4MDAwMTgsIDB4YWY4MDAwMGMsIDB4MGUwMDE1NTksCi0JMHgwMDAwMDAwMCwgMHgwZTAwMGZmMCwgMHgwMDAwMDAwMCwgMHgzYzAyMDgwMCwgMHgyNDUwNTdjMCwgMHg4ZjQyMDAwMCwKLQkweDMwNDIwMDAxLCAweDEwNDBmZmZkLCAweDAwMDAwMDAwLCAweDhmNDQwMTAwLCAweGFmODQwMDA4LCAweGFmNDQwMDIwLAotCTB4YWY1NjAxNzgsIDB4OTM0MzAxMDgsIDB4YTM4MzAwMTIsIDB4OTM4MjAwMTIsIDB4MzA0MjAwMDEsIDB4MTA0MDAwMDgsCi0JMHgwMDAwMDAwMCwgMHg5MzgyMDAxMiwgMHgzMDQyMDAwNiwgMHgwMDAyMTEwMCwgMHgwZTAwMGQ0MywgMHgwMDUwZDgyMSwKLQkweDBhMDAwZmFjLCAweDAwMDAwMDAwLCAweDE0OTUwMDA1LCAweDAwMDAwMDAwLCAweDBlMDAwZDQzLCAweDI2OWI1ODQwLAotCTB4MGEwMDBmYWMsIDB4MDAwMDAwMDAsIDB4MTQ5MzAwMDUsIDB4MDAwMDAwMDAsIDB4MGUwMDBkNDMsIDB4MjY1YjU4NjAsCi0JMHgwYTAwMGZhYywgMHgwMDAwMDAwMCwgMHgwZTAwMTBlYSwgMHgwMDAwMDAwMCwgMHhhZjUxMDEzOCwgMHgwYTAwMGY4OSwKLQkweDAwMDAwMDAwLCAweDI3YmRmZmY4LCAweDMwODRmZmZmLCAweDI0ODIwMDA3LCAweDMwNDRmZmY4LCAweDhmODUwMDBjLAotCTB4OTc0MzAwOGEsIDB4MzA2M2ZmZmYsIDB4YWZhMzAwMDAsIDB4OGZhMjAwMDAsIDB4MDA0NTEwMjMsIDB4MjQ0MmZmZmYsCi0JMHgzMDQyMWZmZiwgMHgwMDQ0MTAyYiwgMHgxNDQwZmZmNywgMHgwMDAwMDAwMCwgMHg4ZjgyMDAwYywgMHgwMDAyMTA4MiwKLQkweDAwMDIxMDgwLCAweDI0NDI0MDAwLCAweDAzNDIxMDIxLCAweDAzZTAwMDA4LCAweDI3YmQwMDA4LCAweDMwODRmZmZmLAotCTB4OGY4MjAwMGMsIDB4MjQ4NDAwMDcsIDB4MzA4NGZmZjgsIDB4MDA0NDEwMjEsIDB4MzA0MjFmZmYsIDB4YWY4MjAwMGMsCi0JMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgyN2JkZmZlOCwgMHgzYzFhODAwMCwgMHgzYzA0MjBmZiwgMHgzNDg0ZmZmZCwKLQkweDNjMDIwMDA4LCAweDAzNDIxODIxLCAweGFmYmYwMDEwLCAweGFmODMwMDE0LCAweGFmNDQwZTAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4M2MwMjAwZmYsIDB4MzQ0MmZmZmQsCi0JMHgzYzA0NjAwNCwgMHhhZjQyMGUwMCwgMHg4YzgyNTAwMCwgMHgyNDAzZmY3ZiwgMHgwMDQzMTAyNCwgMHgzNDQyMzgwYywKLQkweDI0MDMwMDA5LCAweGFjODI1MDAwLCAweGFmNDMwMDA4LCAweGFmODAwMDE4LCAweGFmODAwMDBjLCAweDBlMDAxNTU5LAotCTB4MDAwMDAwMDAsIDB4MGUwMDBmZjAsIDB4MDAwMDAwMDAsIDB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsCi0JMHgyN2JkZmZlOCwgMHgzYzAyMDAwYSwgMHgwMzQyMTgyMSwgMHgzYzA0MDgwMCwgMHgyNDg0NTg4MCwgMHgyNDA1MDAxOSwKLQkweGFmYmYwMDEwLCAweGFmODMwMDI0LCAweDBlMDAxNTY1LCAweDAwMDAzMDIxLCAweDNjMDUwODAwLCAweDNjMDIwODAwLAotCTB4MjQ0MjUzMzAsIDB4YWNhMjU4ZTgsIDB4MjRhNTU4ZTgsIDB4M2MwMjA4MDAsIDB4MjQ0MjU0ZjgsIDB4M2MwMzA4MDAsCi0JMHgyNDYzNTUwYywgMHgzYzA0MDgwMCwgMHhhY2EyMDAwNCwgMHgzYzAyMDgwMCwgMHgyNDQyNTMzOCwgMHhhY2EzMDAwOCwKLQkweGFjODI1OTAwLCAweDI0ODQ1OTAwLCAweDNjMDIwODAwLCAweDI0NDI1M2M0LCAweDNjMDcwODAwLCAweDI0ZTc1NDA0LAotCTB4M2MwNjA4MDAsIDB4MjRjNjU1MjAsIDB4M2MwNTA4MDAsIDB4MjRhNTU0MzgsIDB4M2MwMzA4MDAsIDB4YWM4MjAwMDQsCi0JMHgzYzAyMDgwMCwgMHgyNDQyNTUyOCwgMHhhYzg3MDAwOCwgMHhhYzg2MDAwYywgMHhhYzg1MDAxMCwgMHhhYzYyNTkyMCwKLQkweDI0NjM1OTIwLCAweDhmYmYwMDEwLCAweDNjMDIwODAwLCAweDI0NDI1NTQwLCAweGFjNjIwMDA0LCAweDNjMDIwODAwLAotCTB4YWM2NzAwMDgsIDB4YWM2NjAwMGMsIDB4YWM2NTAwMTAsIDB4YWM0MDAwNDgsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsCi0JMHg5NzQzMDlkYSwgMHgwMDgwNDAyMSwgMHhhZDAzMDAwMCwgMHg4ZjQyMDlkYywgMHhhZDAyMDAwNCwgMHg4ZjQzMDllMCwKLQkweGFkMDMwMDA4LCAweDkzNDQwOWQ5LCAweDI0MDIwMDAxLCAweDMwODQwMDAzLCAweDEwODIwMDFmLCAweDMwYTkwMGZmLAotCTB4Mjg4MjAwMDIsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDIsIDB4MTA4MDAwMDksIDB4M2MwYTA4MDAsIDB4MGEwMDEwNzgsCi0JMHg5MzQyMDkzNCwgMHgxMDgyMDAwYiwgMHgyNDAyMDAwMywgMHgxMDgyMDAyNiwgMHgzYzBhMDgwMCwgMHgwYTAwMTA3OCwKLQkweDkzNDIwOTM0LCAweDk3NDIwOWU0LCAweDAwMDIxNDAwLCAweDM0NDIwODAwLCAweGFkMDIwMDBjLCAweDBhMDAxMDc3LAotCTB4MjUwODAwMTAsIDB4OTc0MjA5ZTQsIDB4MDAwMjE0MDAsIDB4MzQ0MjgxMDAsIDB4YWQwMjAwMGMsIDB4OTc0MzA5ZTgsCi0JMHgzYzBhMDgwMCwgMHgwMDAzMWMwMCwgMHgzNDYzMDgwMCwgMHhhZDAzMDAxMCwgMHgwYTAwMTA3NywgMHgyNTA4MDAxNCwKLQkweDk3NDQwOWU0LCAweDNjMDUwODAwLCAweDI0YTI1ODgwLCAweDk0NDMwMDFjLCAweDk0NDYwMDE0LCAweDk0NDcwMDEwLAotCTB4MDBhMDUwMjEsIDB4MjQwMjA4MDAsIDB4YWQwMDAwMTAsIDB4YWQwMjAwMTQsIDB4MDAwNDI0MDAsIDB4MDA2NjE4MjEsCi0JMHgwMDY3MTgyMywgMHgyNDYzZmZmMiwgMHgwMDgzMjAyNSwgMHhhZDA0MDAwYywgMHgwYTAwMTA3NywgMHgyNTA4MDAxOCwKLQkweDk3NDIwOWU0LCAweDNjMDUwODAwLCAweDAwMDIxNDAwLCAweDM0NDI4MTAwLCAweGFkMDIwMDBjLCAweDk3NDQwOWU4LAotCTB4MjRhMjU4ODAsIDB4OTQ0MzAwMWMsIDB4OTQ0NjAwMTQsIDB4OTQ0NzAwMTAsIDB4MDBhMDUwMjEsIDB4MjQwMjA4MDAsCi0JMHhhZDAwMDAxNCwgMHhhZDAyMDAxOCwgMHgwMDA0MjQwMCwgMHgwMDY2MTgyMSwgMHgwMDY3MTgyMywgMHgyNDYzZmZlZSwKLQkweDAwODMyMDI1LCAweGFkMDQwMDEwLCAweDI1MDgwMDFjLCAweDkzNDIwOTM0LCAweDkzNDUwOTIxLCAweDNjMDc0MDAwLAotCTB4MjU0NDU4ODAsIDB4OTQ4MzAwMTgsIDB4OTQ4NjAwMTQsIDB4MDAwMjEwODIsIDB4MDAwMjE2MDAsIDB4MDAwNTJjMDAsCi0JMHgwMGE3MjgyNSwgMHgwMDQ1MTAyNSwgMHgwMDY2MTgyMSwgMHgwMDQzMTAyNSwgMHhhZDAyMDAwMCwgMHg5NzgzMDAyYywKLQkweDk3NDIwOWVhLCAweDAwNjIxODIxLCAweDAwMDMxYzAwLCAweGFkMDMwMDA0LCAweDk3ODIwMDJjLCAweDI0NDIwMDAxLAotCTB4MzA0MjdmZmYsIDB4YTc4MjAwMmMsIDB4OTM0MzA5MjAsIDB4M2MwMjAwMDYsIDB4MDAwMzFlMDAsIDB4MDA2MjE4MjUsCi0JMHhhZDAzMDAwOCwgMHg4ZjQyMDkyYywgMHhhZDAyMDAwYywgMHg4ZjQzMDkzMCwgMHhhZDAzMDAxMCwgMHg4ZjQ0MDkzOCwKLQkweDI1MDgwMDE0LCAweGFkMDQwMDAwLCAweDhmODIwMDIwLCAweDExMjAwMDA0LCAweGFkMDIwMDA0LCAweDhmNDIwOTQwLAotCTB4MGEwMDEwYTEsIDB4MjQ0MmZmZmYsIDB4OGY0MjA5NDAsIDB4YWQwMjAwMDgsIDB4OGY0NDA5NDgsIDB4OGY0MjA5NDAsCi0JMHg5MzQzMDkzNiwgMHgwMDgyMzAyMywgMHgwMDY2MzAwNiwgMHgzNDAyZmZmZiwgMHgwMDQ2MTAyYiwgMHg1NDQwMDAwMSwKLQkweDM0MDZmZmZmLCAweDkzNDIwOTM3LCAweDI1NDQ1ODgwLCAweDkwODMwMDI0LCAweGFkMDAwMDEwLCAweDAwMDIxNzAwLAotCTB4MzQ2MzAwMTAsIDB4MDAwMzFjMDAsIDB4MDA0MzEwMjUsIDB4MDA0NjEwMjUsIDB4YWQwMjAwMGMsIDB4OGM4MzAwMDgsCi0JMHgxNDYwMDAzMSwgMHgyNTA4MDAxNCwgMHgzYzAyMDgwMCwgMHg4YzQzMDA0OCwgMHgxMDYwMDAyZCwgMHgwMDAwMDAwMCwKLQkweDkzNDIwMTBiLCAweGFkMDIwMDAwLCAweDhmODMwMDAwLCAweDhjNjIwMGIwLCAweGFkMDIwMDA0LCAweDhmODMwMDAwLAotCTB4OGM2MjAwYjQsIDB4YWQwMjAwMDgsIDB4OGY4MzAwMDAsIDB4OGM2MjAwYzAsIDB4YWQwMjAwMGMsIDB4OGY4MzAwMDAsCi0JMHg4YzYyMDBjNCwgMHhhZDAyMDAxMCwgMHg4ZjgzMDAwMCwgMHg4YzYyMDBjOCwgMHhhZDAyMDAxNCwgMHg4ZjgzMDAwMCwKLQkweDhjNjIwMGNjLCAweGFkMDIwMDE4LCAweDhmODMwMDAwLCAweDhjNjIwMGUwLCAweGFkMDIwMDFjLCAweDhmODMwMDAwLAotCTB4OGM2MjAwZTgsIDB4YWQwMjAwMjAsIDB4OGY4MzAwMDAsIDB4OGM2MjAwZjAsIDB4M2MwNDYwMGUsIDB4YWQwMjAwMjQsCi0JMHg4YzgyMDBkMCwgMHhhZDAyMDAyOCwgMHg4YzgzMDBkNCwgMHhhZDAzMDAyYywgMHg4ZjgyMDAyOCwgMHgzYzA0NjAxMiwKLQkweGFkMDIwMDMwLCAweDhjODIwMGE4LCAweGFkMDIwMDM0LCAweDhjODMwMGFjLCAweDNjMDI2MDAwLCAweGFkMDMwMDM4LAotCTB4OGM0MzQ0NDgsIDB4YWQwMzAwM2MsIDB4MDNlMDAwMDgsIDB4MDEwMDEwMjEsIDB4MjdiZGZmYTgsIDB4M2MwMjAwMDgsCi0JMHgwMzQyMzAyMSwgMHhhZmJmMDA1NCwgMHhhZmJlMDA1MCwgMHhhZmI3MDA0YywgMHhhZmI2MDA0OCwgMHhhZmI1MDA0NCwKLQkweGFmYjQwMDQwLCAweGFmYjMwMDNjLCAweGFmYjIwMDM4LCAweGFmYjEwMDM0LCAweGFmYjAwMDMwLCAweGFmODYwMDAwLAotCTB4MjQwMjAwNDAsIDB4YWY0MjA4MTQsIDB4YWY0MDA4MTAsIDB4OGY0MjA5NDQsIDB4OGY0MzA5NTAsIDB4OGY0NDA5NTQsCi0JMHg4ZjQ1MDk1YywgMHhhZjgyMDAzNCwgMHhhZjgzMDAyMCwgMHhhZjg0MDAxYywgMHhhZjg1MDAzMCwgMHg5MGMyMDAwMCwKLQkweDI0MDMwMDIwLCAweDMwNDQwMGZmLCAweDEwODMwMDA1LCAweDI0MDIwMDMwLCAweDEwODIwMDIyLCAweDNjMDMwODAwLAotCTB4MGEwMDExMzksIDB4OGM2MjAwMmMsIDB4MjQwMjAwODgsIDB4YWY0MjA4MTgsIDB4M2MwMjA4MDAsIDB4MjQ0MjU4ZTgsCi0JMHhhZmEyMDAyMCwgMHg5MzQzMDEwOSwgMHgzYzAyMDgwMCwgMHgxMDYwMDAwOSwgMHgyNDU3NTkwMCwgMHgzYzAyNjAwMCwKLQkweDI0MDMwMTAwLCAweGFjNDMwODFjLCAweDNjMDMwMDAxLCAweGFjNDMwODFjLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLAotCTB4MjQwMDAzNzYsIDB4OTM0MjAxMGEsIDB4MzA0MjAwODAsIDB4MTQ0MDAwMjEsIDB4MjQwMjA4MDAsIDB4M2MwMjYwMDAsCi0JMHgyNDAzMDEwMCwgMHhhYzQzMDgxYywgMHgzYzAzMDAwMSwgMHhhYzQzMDgxYywgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwKLQkweDI0MDAwMzdkLCAweDBhMDAxMTQxLCAweDI0MDIwODAwLCAweDkzNDMwMTA5LCAweDMwNjMwMDdmLCAweDAwMDMxMTQwLAotCTB4MDAwMzE4YzAsIDB4MDA0MzEwMjEsIDB4MjQ0MzAwODgsIDB4YWY0MzA4MTgsIDB4MDAwMDAwMGQsIDB4M2MwMjA4MDAsCi0JMHgyNDQyNTk0MCwgMHgzYzAzMDgwMCwgMHgyNDc3NTk1MCwgMHgwYTAwMTE0MCwgMHhhZmEyMDAyMCwgMHgyNDQyMDAwMSwKLQkweGFjNjIwMDJjLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMzk1LCAweDBhMDAxNGMxLCAweDhmYmYwMDU0LAotCTB4MjQwMjA4MDAsIDB4YWY0MjAxNzgsIDB4OGY0NTAxMDQsIDB4OGY0MjA5ODgsIDB4MDBhMjEwMjMsIDB4NTg0MDAwMDUsCi0JMHg4ZjQzMDlhMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDNiMSwgMHg4ZjQzMDlhMCwgMHgzYzEwMDgwMCwKLQkweGFlMDM1OGIwLCAweDhmNDIwOWE0LCAweDhmODMwMDIwLCAweDI2MDQ1OGIwLCAweDI0OTFmZmQwLCAweGFlMjIwMDM0LAotCTB4MDBhMjEwMjMsIDB4YWUyMzAwMjgsIDB4YWM4MmZmZDAsIDB4OGZhMzAwMjAsIDB4OGM2MjAwMDAsIDB4MDA0MGY4MDksCi0JMHgwMjAwYjAyMSwgMHgwMDQwOTAyMSwgMHgzMjQ0MDAxMCwgMHgzMjQyMDAwMiwgMHgxMDQwMDAwNywgMHhhZmE0MDAyNCwKLQkweDhlMjIwMDIwLCAweDMyNTMwMDQwLCAweDI0MDNmZmJmLCAweDAwNDMxMDI0LCAweDBhMDAxNDkzLCAweGFlMjIwMDIwLAotCTB4MzI0MjAwMjAsIDB4MTA0MDAwMDIsIDB4M2MwMjA4MDAsIDB4MjQ1NzU5MjAsIDB4MzI0MjAwMDEsIDB4MTQ0MDAwMDcsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAwOCwgMHhhZjQyMDA4MCwgMHg4ZWMzNThiMCwgMHhhZjQzMGUxMCwgMHg4ZTIyMDAzNCwKLQkweGFmNDIwZTE4LCAweDkzNDMwMTBiLCAweDkzNDIwOTA1LCAweDMwNDIwMDA4LCAweDEwNDAwMDNjLCAweDMwNzQwMGZmLAotCTB4OGY4MjAwMDAsIDB4OGM0MzAwNzQsIDB4MDQ2MDAwMGEsIDB4MDAwMDAwMDAsIDB4M2MwMjYwMDAsIDB4MjQwMzAxMDAsCi0JMHhhYzQzMDgxYywgMHgzYzAzMDAwMSwgMHhhYzQzMDgxYywgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDNlZCwKLQkweDhmODIwMDAwLCAweDkwNDQwMDdiLCAweDkzNDMwMTBhLCAweDE0ODMwMDI3LCAweDMyNTMwMDQwLCAweDAwMDAzODIxLAotCTB4MjQwNTIwMDAsIDB4M2MwOTA4MDAsIDB4M2MwMzgwMDAsIDB4OGY0MjAxNzgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHg4ZWMyNThiMCwgMHgyNmM0NThiMCwgMHgyNDg0ZmZkMCwgMHhhZjQyMDE0NCwgMHg4YzgyMDAzNCwgMHgzYzAzMDEwMCwKLQkweGFmNDIwMTQ4LCAweDI0MDIwMDQ3LCAweGFmNDMwMTRjLCAweGEzNDIwMTUyLCAweDhkMjMwMDMwLCAweDNjMDIxMDAwLAotCTB4YTc0NzAxNTgsIDB4YWY0NTAxNTQsIDB4YWY0MjAxNzgsIDB4OGM4NjAwMzQsIDB4MjQ2MzAwMDEsIDB4YWQyMzAwMzAsCi0JMHg5MzQyMDEwYSwgMHgzYzAzMDA0NywgMHhhZmE1MDAxNCwgMHgwMDAyMTYwMCwgMHgwMDQzMTAyNSwgMHgwMDQ3MTAyNSwKLQkweGFmYTIwMDEwLCAweDkzNDMwMTBiLCAweGFmYTMwMDE4LCAweDhmNDQwMTAwLCAweDhmNDUwMTA0LCAweDBlMDAxNTliLAotCTB4M2MwNzAxMDAsIDB4M2MwNTA4MDAsIDB4MjRhMjU4ODAsIDB4MGEwMDEyNTAsIDB4OGM0MzAwMjAsIDB4MzI4MjAwMDIsCi0JMHgxMDQwMDA1MCwgMHgwMDAwMDAwMCwgMHgwZTAwMTViOSwgMHgzMjUzMDA0MCwgMHgzYzAzOTAwMCwgMHgzNDYzMDAwMSwKLQkweDhmODIwMDA4LCAweDNjMDQ4MDAwLCAweDAwNDMxMDI1LCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDQxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY4MzAwMDAsIDB4OTA2MjAwMDUsIDB4MzQ0MjAwMDgsIDB4YTA2MjAwMDUsCi0JMHg4Zjg0MDAwMCwgMHg4YzgyMDA3NCwgMHgzYzAzODAwMCwgMHgwMDQzMTAyNSwgMHhhYzgyMDA3NCwgMHg5MDgzMDAwMCwKLQkweDI0MDIwMDIwLCAweDEwNjIwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwNDBiLAotCTB4OGY4MzAwMDgsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsIDB4MDA2MjE4MjUsIDB4YWY0MzAwMjAsIDB4OTA4NDAwN2IsCi0JMHg5MzQyMDEwYSwgMHgxNDgyMDAyOCwgMHgzYzAzMDgwMCwgMHgwMDAwMzgyMSwgMHgyNDA1MjAwMCwgMHgzYzA5MDgwMCwKLQkweDNjMDM4MDAwLCAweDhmNDIwMTc4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDhlYzI1OGIwLCAweDI2YzQ1OGIwLAotCTB4MjQ4NGZmZDAsIDB4YWY0MjAxNDQsIDB4OGM4MjAwMzQsIDB4M2MwMzAxMDAsIDB4YWY0MjAxNDgsIDB4MjQwMjAwNDYsCi0JMHhhZjQzMDE0YywgMHhhMzQyMDE1MiwgMHg4ZDIzMDAzMCwgMHgzYzAyMTAwMCwgMHhhNzQ3MDE1OCwgMHhhZjQ1MDE1NCwKLQkweGFmNDIwMTc4LCAweDhjODYwMDM0LCAweDI0NjMwMDAxLCAweGFkMjMwMDMwLCAweDkzNDIwMTBhLCAweDNjMDMwMDQ2LAotCTB4YWZhNTAwMTQsIDB4MDAwMjE2MDAsIDB4MDA0MzEwMjUsIDB4MDA0NzEwMjUsIDB4YWZhMjAwMTAsIDB4OTM0MzAxMGIsCi0JMHhhZmEzMDAxOCwgMHg4ZjQ0MDEwMCwgMHg4ZjQ1MDEwNCwgMHgwZTAwMTU5YiwgMHgzYzA3MDEwMCwgMHgzYzAzMDgwMCwKLQkweDI0NjI1ODgwLCAweDBhMDAxMjUwLCAweDhjNDMwMDIwLCAweDkzNDIwMTA4LCAweDMwNDIwMDEwLCAweDUwNDAwMDU2LAotCTB4OTM0MzA5M2YsIDB4OGY4NjAwMDAsIDB4OTBjMjAwN2YsIDB4OGNjMzAxNzgsIDB4MzA0ODAwZmYsIDB4MTUwMzAwMDQsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDQyNSwgMHg5MGMyMDA3ZSwgMHg5MGM0MDA4MCwKLQkweDAwMDgxYzAwLCAweDAwMDIxNjAwLCAweDAwNDMxMDI1LCAweDAwMDQyMjAwLCAweDkwYzMwMDdhLCAweDkwYzUwMDBhLAotCTB4MDA0NDEwMjUsIDB4MTEwNTAwMjgsIDB4MDA2MjM4MjUsIDB4YTBjODAwMGEsIDB4MDAwMDQwMjEsIDB4MjQwNTYwMDAsCi0JMHgzYzA5MDgwMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDE3OCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHg4ZWMyNThiMCwKLQkweDI2YzQ1OGIwLCAweDI0ODRmZmQwLCAweGFmNDIwMTQ0LCAweDhjODIwMDM0LCAweGFmNDIwMTQ4LCAweDI0MDIwMDUyLAotCTB4YWY0NzAxNGMsIDB4YTM0MjAxNTIsIDB4OGQyMzAwMzAsIDB4M2MwMjEwMDAsIDB4YTc0ODAxNTgsIDB4YWY0NTAxNTQsCi0JMHhhZjQyMDE3OCwgMHg4Yzg2MDAzNCwgMHgyNDYzMDAwMSwgMHhhZDIzMDAzMCwgMHg5MzQyMDEwYSwgMHgzYzAzMDA1MiwKLQkweGFmYTUwMDE0LCAweDAwMDIxNjAwLCAweDAwNDMxMDI1LCAweDAwNDgxMDI1LCAweGFmYTIwMDEwLCAweDkzNDMwMTBiLAotCTB4YWZhMzAwMTgsIDB4OGY0NDAxMDAsIDB4MGUwMDE1OWIsIDB4OGY0NTAxMDQsIDB4MGEwMDEyNGEsIDB4MDAwMDAwMDAsCi0JMHgzYzAyNjAwMCwgMHgyNDAzMDEwMCwgMHhhYzQzMDgxYywgMHgzYzAzMDAwMSwgMHhhYzQzMDgxYywgMHgwMDAwMDAwZCwKLQkweDAwMDAwMDAwLCAweDI0MDAwNDNlLCAweDE2ODAwMDA5LCAweDNjMDUwODAwLCAweDNjMDQwODAwLCAweDI0ODI1ODgwLAotCTB4OGM0MzAwMjAsIDB4MzI1MzAwNDAsIDB4MjQwNGZmYmYsIDB4MDA2NDE4MjQsIDB4MGEwMDE0OTMsIDB4YWM0MzAwMjAsCi0JMHg4Y2EyNTg4MCwgMHgxMDQwMDAwNSwgMHgzYzAzMDgwMCwgMHg4YzYyMDAzNCwgMHhhY2EwNTg4MCwgMHgyNDQyMDAwMSwKLQkweGFjNjIwMDM0LCAweDkzNDMwOTNmLCAweDI0MDIwMDEyLCAweDU0NjIwMDBlLCAweDk3NDIwOTA4LCAweDMyODIwMDM4LAotCTB4MTQ0MDAwMDksIDB4M2MwMzA4MDAsIDB4OGY4MzAwMDAsIDB4OGM2MjAwNGMsIDB4YWM2MjAwNWMsIDB4M2MwMjA4MDAsCi0JMHgyNDQ0NTg4MCwgMHg4YzgyMDAyMCwgMHgwYTAwMTI4NSwgMHgzMjUzMDA0MCwgMHhhYzYwNTg4MCwgMHg5NzQyMDkwOCwKLQkweDU0NDAwMDFjLCAweDk3NDIwOTA4LCAweDNjMDM5MDAwLCAweDM0NjMwMDAxLCAweDhmODIwMDA4LCAweDMyNTMwMDQwLAotCTB4M2MwNDgwMDAsIDB4MDA0MzEwMjUsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0NDEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgzYzAyODAwMCwgMHg4Zjg0MDAwMCwgMHg4Zjg1MDAwOCwgMHg4YzgzMDA1MCwgMHgzNDQyMDAwMSwgMHgwMGEyMjgyNSwKLQkweGFmODMwMDIwLCAweGFjODMwMDcwLCAweGFjODMwMDVjLCAweGFmNDUwMDIwLCAweDNjMDUwODAwLCAweDI0YTQ1ODgwLAotCTB4OGM4MjAwMjAsIDB4MjQwM2ZmYmYsIDB4MDA0MzEwMjQsIDB4MGEwMDE0OTMsIDB4YWM4MjAwMjAsIDB4MDAwMjExYzAsCi0JMHhhZjQyMDAyNCwgMHg5NzQyMDkwOCwgMHgzYzAzMDA4MCwgMHgzNDYzMDAwMywgMHgwMDAyMTFjMCwgMHhhZjQyMDgwYywKLQkweGFmNDMwODFjLCAweDk3NDIwOWVjLCAweDhmNDMwOWE0LCAweGE3ODIwMDJjLCAweDNjMDIwODAwLCAweDI0NDQ1ODgwLAotCTB4YWM4MzAwMmMsIDB4OTM0MjA5MzcsIDB4OTM0MzA5MzQsIDB4MDAwMjEwODAsIDB4MDA2MjE4MjEsIDB4YTQ4MzAwMTgsCi0JMHg5MzQyMDlkOCwgMHgzMjg1MDAzOCwgMHhhZmE1MDAyOCwgMHgwMDYyMTgyMSwgMHhhNDgzMDAxYSwgMHg5MzQyMDlkOCwKLQkweDkzNDMwOTM0LCAweDNjMWUwODAwLCAweDAwODA5ODIxLCAweDAwNDMxMDIxLCAweDI0NDIwMDEwLCAweGE0ODIwMDE2LAotCTB4MjQwMjAwMDYsIDB4YWU2MjAwMjAsIDB4OGZhMjAwMjgsIDB4MTA0MDAwMDMsIDB4MDAwMGE4MjEsIDB4MGEwMDEyZjAsCi0JMHgyNDEyMDAwOCwgMHg4ZjQyMDk1OCwgMHg4ZjgzMDAyMCwgMHg4Zjg0MDAzMCwgMHgwMDQzMTAyMywgMHgwMDgzMjAyMywKLQkweDA0ODAwMDAzLCAweGFlNjIwMDA0LCAweDA0NDEwMDAzLCAweDAwODIxMDJiLCAweDBhMDAxMmJjLCAweGFlNjAwMDA0LAotCTB4NTQ0MDAwMDEsIDB4YWU2NDAwMDQsIDB4OGVlMjAwMDAsIDB4MDA0MGY4MDksIDB4MDAwMDAwMDAsIDB4MDA0MDkwMjEsCi0JMHgzMjQyMDAwMSwgMHg1NDQwMDAxZSwgMHg4ZWUyMDAwNCwgMHg4ZTYzMDAwOCwgMHgxMDYwMDAyYiwgMHgzYzAyYzAwMCwKLQkweDAwNjIxMDI1LCAweGFmNDIwZTAwLCAweDhmNDIwMDAwLCAweDMwNDIwMDA4LCAweDEwNDBmZmZkLCAweDAwMDAwMDAwLAotCTB4OTc0MjBlMDgsIDB4YTc4MjAwMTAsIDB4OGY0MzBlMDQsIDB4OGU2MjAwMDgsIDB4YWY4MzAwMDQsIDB4OGY4NDAwMDQsCi0JMHgwMDQ0MTAyYiwgMHgxMDQwMDAwYiwgMHgyNDE1MDAwMSwgMHgyNDAyMDEwMCwgMHgzYzAxNjAwMCwgMHhhYzIyMDgxYywKLQkweDNjMDIwMDAxLCAweDNjMDE2MDAwLCAweGFjMjIwODFjLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwNGNkLAotCTB4MjQxNTAwMDEsIDB4OGVlMjAwMDQsIDB4MDA0MGY4MDksIDB4MDAwMDAwMDAsIDB4MDI0MjkwMjUsIDB4MzI0MjAwMDIsCi0JMHg1MDQwMDAxZCwgMHg4ZjQ3MDk0MCwgMHgxMmEwMDAwNiwgMHg4ZWMyNThiMCwgMHg4ZjgzMDAwMCwgMHhhYzYyMDBhOCwKLQkweDhmODQwMDAwLCAweDhlNjIwMDM0LCAweGFjODIwMGFjLCAweDMyNDIwMDA0LCAweDUwNDAwMDEzLCAweDhmNDcwOTQwLAotCTB4M2MwMjA4MDAsIDB4MzI4MzAwN2QsIDB4MTA2MDAxMTAsIDB4MjQ1NzU5MjAsIDB4MzI4MjAwMDEsIDB4NTA0MDAwMDYsCi0JMHgzNjUyMDAwMiwgMHg4ZjgzMDAzNCwgMHg4ZjQyMDk0MCwgMHgxMDYyMDEwOSwgMHgwMDAwMDAwMCwgMHgzNjUyMDAwMiwKLQkweDI0MDIwMDA4LCAweGE2NjAwMDEwLCAweGE2NjIwMDEyLCAweGFlNjAwMDA4LCAweGEyNjAwMDI0LCAweDhmNDcwOTQwLAotCTB4M2MwMzA4MDAsIDB4MjQ2ODU4ODAsIDB4OGQwMjAwMmMsIDB4OGQwNTAwMDgsIDB4OTUwNDAwMTAsIDB4OTUwNjAwMGEsCi0JMHg5NTAzMDAyNiwgMHgwMDQ1MTAyMSwgMHgwMDg2MjAyMSwgMHgwMDY0MTgyMSwgMHhhZjg3MDAzNCwgMHhhZDAyMDAyYywKLQkweDMyODIwMDMwLCAweDEwNDAwMDA4LCAweGE1MDMwMDE0LCAweDkxMDIwMDI0LCAweDMyOTEwMDQwLCAweDM0NDIwMDA0LAotCTB4YTEwMjAwMjQsIDB4YWY0MDAwNDgsIDB4MGEwMDEzNDUsIDB4M2MwNDA4MDAsIDB4OTM0MjA5MjMsIDB4MzA0MjAwMDIsCi0JMHgxMDQwMDAyOSwgMHgzMjkxMDA0MCwgMHg4ZjgzMDAwMCwgMHg4Zjg0MDAyMCwgMHg4YzYyMDA4NCwgMHgwMDQ0MTAyMywKLQkweDA0NDIwMDBhLCAweDNjMDM5MDAwLCAweDk1MDIwMDE0LCAweDhjNjMwMDg0LCAweDAwODIxMDIxLCAweDAwNjIxODIzLAotCTB4MWM2MDAwMDQsIDB4M2MwMzkwMDAsIDB4OTEwMjAwMjQsIDB4MzQ0MjAwMDEsIDB4YTEwMjAwMjQsIDB4MzQ2MzAwMDEsCi0JMHg4ZjgyMDAwOCwgMHgzMjkxMDA0MCwgMHgzYzA0ODAwMCwgMHgwMDQzMTAyNSwgMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwKLQkweDAwNDQxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDhmODQwMDAwLCAweDkwODMwMDNmLCAweDI0MDIwMDBhLAotCTB4MTA2MjAwMDUsIDB4MjQwMjAwMGMsIDB4OTA4MzAwM2YsIDB4MjQwMjAwMDgsIDB4MTQ2MjAwMDIsIDB4MjQwMjAwMTQsCi0JMHhhMDgyMDAzZiwgMHg4ZjgzMDAwOCwgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHgwMDYyMTgyNSwgMHhhZjQzMDAyMCwKLQkweDNjMDQwODAwLCAweDI0ODY1ODgwLCAweDk0YzIwMDEwLCAweDk0YzMwMDFhLCAweDhjYzQwMDA4LCAweDAwNDMyODIxLAotCTB4MTQ4MDAwMDYsIDB4YTRjNTAwMWMsIDB4M2MwMjA4MDAsIDB4OGM0MzAwNDgsIDB4MTA2MDAwMDIsIDB4MjRhMjAwNDAsCi0JMHhhNGMyMDAxYywgMHgyN2QwNTg4MCwgMHg5NjA0MDAxYywgMHg5NjAyMDAxMiwgMHgwMDgyMjAyMSwgMHgyNDg0MDAwMiwKLQkweDBlMDAwZmFmLCAweDMwODRmZmZmLCAweDhmODUwMDE4LCAweDAwYTAxODIxLCAweGEyMDMwMDI1LCAweDhlZTYwMDA4LAotCTB4MDA0MDIwMjEsIDB4MjRhNTAwMDEsIDB4YWY4NTAwMTgsIDB4MDBjMGY4MDksIDB4MDAwMDAwMDAsIDB4MDA0MDIwMjEsCi0JMHgwZTAwMTAyNiwgMHgwMjIwMjgyMSwgMHg4ZWUzMDAwYywgMHgwMDYwZjgwOSwgMHgwMDQwMjAyMSwgMHg5NjA0MDAxYywKLQkweDk2MDIwMDEyLCAweDAwODIyMDIxLCAweDI0ODQwMDAyLCAweDBlMDAwZmM1LCAweDMwODRmZmZmLCAweDhmYzI1ODgwLAotCTB4OGUwMzAwMDgsIDB4MDA0MzEwMjMsIDB4MTQ0MDAwMTIsIDB4YWZjMjU4ODAsIDB4NTQ2MDAwMDYsIDB4OGUwMjAwMjAsCi0JMHgzMjQzMDA0YSwgMHgyNDAyMDAwMiwgMHgxNDYyMDAwNSwgMHgwMDAwMDAwMCwgMHg4ZTAyMDAyMCwgMHgzNDQyMDA0MCwKLQkweDBhMDAxMzgyLCAweGFlMDIwMDIwLCAweDUyYTAwMDA2LCAweDM2NTIwMDAyLCAweDhlMDIwMDMwLCAweGFmNDIwZTEwLAotCTB4OGUwMzAwMzQsIDB4YWY0MzBlMTgsIDB4MzY1MjAwMDIsIDB4NTJhMDAwMDgsIDB4OTY2NzAwMTQsIDB4OGY4MzAwMDAsCi0JMHg4ZjQyMGUxMCwgMHhhYzYyMDBhOCwgMHg4Zjg0MDAwMCwgMHg4ZjQyMGUxOCwgMHhhYzgyMDBhYywgMHg5NjY3MDAxNCwKLQkweDkyNjgwMDI0LCAweDI0MDIwMDQwLCAweGFmNDIwODE0LCAweDhmODMwMDIwLCAweDhmODIwMDFjLCAweDAwNjcxODIxLAotCTB4MDA2MjEwMjMsIDB4YWY4MzAwMjAsIDB4MTg0MDAwMDgsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMDAsIDB4YWY4MzAwMWMsCi0JMHhhYzQzMDA1NCwgMHg1NGUwMDAwNSwgMHhhZjQwMDA0MCwgMHgwYTAwMTNhMCwgMHg4ZjQyMDk1YywgMHg1NGUwMDAwMSwKLQkweGFmNDAwMDQ0LCAweDhmNDIwOTVjLCAweDMxMDMwMDA4LCAweGFmODIwMDMwLCAweDEwNjAwMDFhLCAweDAwMDAwMDAwLAotCTB4OGY4NDAwMDAsIDB4OTA4MjAxMjAsIDB4OTA4MzAxMjEsIDB4MzA0NjAwZmYsIDB4MDBjMzE4MjMsIDB4MzA2MzAwMDcsCi0JMHgyNDAyMDAwNywgMHgxMDYyMDAwZSwgMHgwMDAwMDAwMCwgMHg5MDgyMDEyMiwgMHgzMDQyMDBmZSwgMHhhMDgyMDEyMiwKLQkweDhmODUwMDAwLCAweDAwMDYxODgwLCAweDhmODQwMDIwLCAweDI0YTIwMTAwLCAweDAwNDMxMDIxLCAweDI0YzMwMDAxLAotCTB4MzA2MzAwMDcsIDB4YWM0NDAwMDAsIDB4MGEwMDEzYmQsIDB4YTBhMzAxMjAsIDB4OTA4MjAxMjIsIDB4MzQ0MjAwMDEsCi0JMHhhMDgyMDEyMiwgMHgxNGUwMDAwMywgMHgzMTAyMDAwMSwgMHgxMDQwMDAzMSwgMHgzMjUxMDAwMiwgMHg4ZjgyMDAwMCwKLQkweDhjNDMwMDBjLCAweDMwNjMwMDAxLCAweDEwNjAwMDJjLCAweDMyNTEwMDAyLCAweDNjMDI5MDAwLCAweDhmODMwMDA4LAotCTB4MzQ0MjAwMDEsIDB4M2MwNDgwMDAsIDB4MDA2MjE4MjUsIDB4YWY0MzAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0NDEwMjQsCi0JMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg4Zjg3MDAwMCwgMHg4Y2UyMDAwYywgMHgzMDQyMDAwMSwgMHgxMDQwMDAxOCwKLQkweDAwMDAwMDAwLCAweDk0ZTIwMDZhLCAweDAwMDIyODgwLCAweDUwYTAwMDAxLCAweDI0MDUwMDAxLCAweDk0ZTMwMDY4LAotCTB4OTBlNDAwODEsIDB4M2MwMjA4MDAsIDB4OGM0NjAwMjQsIDB4MDA2NTI4MjEsIDB4MDA4NTI4MDQsIDB4MDBjNTEwMmIsCi0JMHg1NDQwMDAwMSwgMHgwMGEwMzAyMSwgMHgzYzAyMDgwMCwgMHg4YzQ0MDAyOCwgMHgwMGM0MTgyYiwgMHg1NDYwMDAwMSwKLQkweDAwYzAyMDIxLCAweDhmNDMwMDc0LCAweDI0MDJmZmZlLCAweDAwODIyODI0LCAweDAwYTMxODIxLCAweGFjZTMwMDBjLAotCTB4OGY4MzAwMDgsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsIDB4MDA2MjE4MjUsIDB4YWY0MzAwMjAsIDB4OGY4MjAwMjAsCi0JMHgzYzA1MDgwMCwgMHgyNGIwNTg4MCwgMHhhZTAyMDAyOCwgMHg4ZWUzMDAxMCwgMHgwMDYwZjgwOSwgMHgwMDAwMDAwMCwKLQkweDhmODIwMDI4LCAweDI0NDIwMDAxLCAweGFmODIwMDI4LCAweDEyYTAwMDA1LCAweGFmNDAwMDRjLCAweDhmNDIwZTEwLAotCTB4YWUwMjAwMzAsIDB4OGY0MzBlMTgsIDB4YWUwMzAwMzQsIDB4MTIyMGZlYTcsIDB4MjQwMjAwMDYsIDB4OGY4NzAwMjQsCi0JMHg5Nzg2MDAyYywgMHg4ZjgzMDAwMCwgMHg4ZjgyMDAzNCwgMHg4Zjg0MDAyMCwgMHg4Zjg1MDAxYywgMHgzMjUzMDA0MCwKLQkweGE0ZTYwMDJjLCAweGFjNjIwMDQ0LCAweDMyNDIwMDA4LCAweGFjNjQwMDUwLCAweGFjNjUwMDU0LCAweDEwNDAwMDdhLAotCTB4MzI4MjAwMjAsIDB4MTA0MDAwMjcsIDB4MzI5MTAwMTAsIDB4MDAwMDM4MjEsIDB4MjQwNTIwMDAsIDB4M2MwOTA4MDAsCi0JMHgzYzAzODAwMCwgMHg4ZjQyMDE3OCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHg4ZWMyNThiMCwgMHgyNmM0NThiMCwKLQkweDI0ODRmZmQwLCAweGFmNDIwMTQ0LCAweDhjODIwMDM0LCAweDNjMDMwNDAwLCAweGFmNDIwMTQ4LCAweDI0MDIwMDQxLAotCTB4YWY0MzAxNGMsIDB4YTM0MjAxNTIsIDB4OGQyMzAwMzAsIDB4M2MwMjEwMDAsIDB4YTc0NzAxNTgsIDB4YWY0NTAxNTQsCi0JMHhhZjQyMDE3OCwgMHg4Yzg2MDAzNCwgMHgyNDYzMDAwMSwgMHhhZDIzMDAzMCwgMHg5MzQyMDEwYSwgMHgzYzAzMDA0MSwKLQkweGFmYTUwMDE0LCAweDAwMDIxNjAwLCAweDAwNDMxMDI1LCAweDAwNDcxMDI1LCAweGFmYTIwMDEwLCAweDkzNDMwMTBiLAotCTB4YWZhMzAwMTgsIDB4OGY0NDAxMDAsIDB4OGY0NTAxMDQsIDB4MGUwMDE1OWIsIDB4M2MwNzA0MDAsIDB4MTIyMDAwMjgsCi0JMHgwMDAwMzgyMSwgMHgyNDA1MjAwMCwgMHgzYzA5MDgwMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDE3OCwgMHgwMDQzMTAyNCwKLQkweDE0NDBmZmZkLCAweDhlYzI1OGIwLCAweDI2YzQ1OGIwLCAweDI0ODRmZmQwLCAweGFmNDIwMTQ0LCAweDhjODIwMDM0LAotCTB4M2MwMzAzMDAsIDB4YWY0MjAxNDgsIDB4MjQwMjAwNGUsIDB4YWY0MzAxNGMsIDB4YTM0MjAxNTIsIDB4OGQyMzAwMzAsCi0JMHgzYzAyMTAwMCwgMHhhNzQ3MDE1OCwgMHhhZjQ1MDE1NCwgMHhhZjQyMDE3OCwgMHg4Yzg2MDAzNCwgMHgyNDYzMDAwMSwKLQkweGFkMjMwMDMwLCAweDkzNDIwMTBhLCAweDNjMDMwMDRlLCAweGFmYTUwMDE0LCAweDAwMDIxNjAwLCAweDAwNDMxMDI1LAotCTB4MDA0NzEwMjUsIDB4YWZhMjAwMTAsIDB4OTM0MzAxMGIsIDB4YWZhMzAwMTgsIDB4OGY0NDAxMDAsIDB4OGY0NTAxMDQsCi0JMHgwZTAwMTU5YiwgMHgzYzA3MDMwMCwgMHgwYTAwMTQ4YiwgMHg4ZmEyMDAyNCwgMHgzMjgyMDAwOCwgMHgxMDQwMDAyNiwKLQkweDI0MDUyMDAwLCAweDAwMDAzODIxLCAweDNjMDkwODAwLCAweDNjMDM4MDAwLCAweDhmNDIwMTc4LCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4OGVjMjU4YjAsIDB4MjZjNDU4YjAsIDB4MjQ4NGZmZDAsIDB4YWY0MjAxNDQsIDB4OGM4MjAwMzQsCi0JMHgzYzAzMDIwMCwgMHhhZjQyMDE0OCwgMHgyNDAyMDA0YiwgMHhhZjQzMDE0YywgMHhhMzQyMDE1MiwgMHg4ZDIzMDAzMCwKLQkweDNjMDIxMDAwLCAweGE3NDcwMTU4LCAweGFmNDUwMTU0LCAweGFmNDIwMTc4LCAweDhjODYwMDM0LCAweDI0NjMwMDAxLAotCTB4YWQyMzAwMzAsIDB4OTM0MjAxMGEsIDB4M2MwMzAwNGIsIDB4YWZhNTAwMTQsIDB4MDAwMjE2MDAsIDB4MDA0MzEwMjUsCi0JMHgwMDQ3MTAyNSwgMHhhZmEyMDAxMCwgMHg5MzQzMDEwYiwgMHhhZmEzMDAxOCwgMHg4ZjQ0MDEwMCwgMHg4ZjQ1MDEwNCwKLQkweDBlMDAxNTliLCAweDNjMDcwMjAwLCAweDhmYTIwMDI0LCAweDE0NDAwMDA0LCAweDhmYTMwMDIwLCAweDMyNDIwMDEwLAotCTB4MTA0MDAwMDQsIDB4MDAwMDAwMDAsIDB4OGM2MjAwMDQsIDB4MDA0MGY4MDksIDB4MDAwMDAwMDAsIDB4MTI2MDAwMDYsCi0JMHg4ZmE0MDAyMCwgMHg4YzgyMDAwOCwgMHgwMDQwZjgwOSwgMHgwMDAwMDAwMCwgMHgwYTAwMTRjMSwgMHg4ZmJmMDA1NCwKLQkweDNjMDMwODAwLCAweDhjNjI1OGEwLCAweDMwNDIwMDQwLCAweDE0NDAwMDIzLCAweDhmYmYwMDU0LCAweDAwMDAyODIxLAotCTB4MjQwNDAwNDAsIDB4OGY4NzAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAxNzgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHg4ZWMyNThiMCwgMHgyNmMzNThiMCwgMHgyNDYzZmZkMCwgMHhhZjQyMDE0NCwgMHg4YzYyMDAzNCwgMHhhZjQyMDE0OCwKLQkweDI0MDIwMDQ5LCAweGFmNDcwMTRjLCAweGEzNDIwMTUyLCAweDNjMDIxMDAwLCAweGE3NDUwMTU4LCAweGFmNDQwMTU0LAotCTB4YWY0MjAxNzgsIDB4OGM2NjAwMzQsIDB4OTM0MjAxMGEsIDB4M2MwMzAwNDksIDB4YWZhNDAwMTQsIDB4MDAwMjE2MDAsCi0JMHgwMDQzMTAyNSwgMHgwMDQ1MTAyNSwgMHhhZmEyMDAxMCwgMHg5MzQzMDEwYiwgMHhhZmEzMDAxOCwgMHg4ZjQ0MDEwMCwKLQkweDBlMDAxNTliLCAweDhmNDUwMTA0LCAweDhmYmYwMDU0LCAweDhmYmUwMDUwLCAweDhmYjcwMDRjLCAweDhmYjYwMDQ4LAotCTB4OGZiNTAwNDQsIDB4OGZiNDAwNDAsIDB4OGZiMzAwM2MsIDB4OGZiMjAwMzgsIDB4OGZiMTAwMzQsIDB4OGZiMDAwMzAsCi0JMHgwM2UwMDAwOCwgMHgyN2JkMDA1OCwgMHgwM2UwMDAwOCwgMHgwMDAwMTAyMSwgMHgzYzAyMDgwMCwgMHgyNDQzNTg4MCwKLQkweDhjNjUwMDA0LCAweDhjNDQ1ODgwLCAweDAwODUxODJiLCAweDEwNjAwMDAyLCAweDAwNDAzMDIxLCAweDAwODAyODIxLAotCTB4OTc0NDA5M2MsIDB4MDBhNDEwMmIsIDB4NTQ0MDAwMDEsIDB4MDBhMDIwMjEsIDB4OTM0MjA5MjMsIDB4MDAwNDE4MmIsCi0JMHgwMDAyMTA0MiwgMHgzMDQyMDAwMSwgMHgwMDQzMTAyNCwgMHgxMDQwMDAwZCwgMHgyNGMyNTg4MCwgMHg4Zjg1MDAwMCwKLQkweDhmODMwMDIwLCAweDhjYTIwMDg0LCAweDAwNDMxMDIzLCAweDA0NDIwMDA3LCAweDI0YzI1ODgwLCAweDhjYTIwMDg0LAotCTB4MDA2NDE4MjEsIDB4MDA0MzEwMjMsIDB4Mjg0MjAwMDEsIDB4MDA4MjIwMjMsIDB4MjRjMjU4ODAsIDB4YWM0NDAwMDgsCi0JMHhhNDQwMDAyNiwgMHgwM2UwMDAwOCwgMHgwMDAwMTAyMSwgMHg4Zjg1MDAwNCwgMHg5Nzg0MDAxMCwgMHgzYzAzMDgwMCwKLQkweDI0NjM1ODgwLCAweDI0MDIwMDA4LCAweGE0NjIwMDEyLCAweDhmODIwMDA0LCAweGE0NjAwMDEwLCAweDAwMDQyMGMyLAotCTB4MzA4NDAwMDgsIDB4MmM0MjAwMDEsIDB4MDAwMjEwMjMsIDB4MzA0MjAwMDYsIDB4YWM2NTAwMDgsIDB4MDNlMDAwMDgsCi0JMHhhMDY0MDAyNCwgMHgzYzAyMDgwMCwgMHgyNDQyNTg4MCwgMHg5MDQ1MDAyNSwgMHg5NDQzMDAxYywgMHgzYzAyMTEwMCwKLQkweGFjODAwMDA0LCAweDAwMDUyYzAwLCAweDI0NjMwMDAyLCAweDAwNjIxODI1LCAweDAwYTMyODI1LCAweDI0ODIwMDA4LAotCTB4MDNlMDAwMDgsIDB4YWM4NTAwMDAsIDB4MjdiZGZmZDgsIDB4M2MwMjA4MDAsIDB4MjQ0MjU4ODAsIDB4YWZiZjAwMjAsCi0JMHg5MDQ4MDAyNSwgMHg4YzQ0MDAwOCwgMHg4YzQ2MDAyMCwgMHg4Zjg3MDAyMCwgMHgzYzAzMDgwMCwgMHgzYzA1ODAwMCwKLQkweDhmNDIwMTc4LCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLCAweDhjNjI1OGIwLCAweDI0NjM1OGIwLCAweDI0NjlmZmQwLAotCTB4YWY0MjAxNDQsIDB4OGQyMjAwMzQsIDB4MzBjMzIwMDAsIDB4YWY0MjAxNDgsIDB4M2MwMjEwMDAsIDB4YWY0NzAxNGMsCi0JMHhhMzQ4MDE1MiwgMHhhNzQ0MDE1OCwgMHhhZjQ2MDE1NCwgMHhhZjQyMDE3OCwgMHgxMDYwMDAwNCwgMHgzYzAzMDgwMCwKLQkweDhjNjIwMDMwLCAweDI0NDIwMDAxLCAweGFjNjIwMDMwLCAweDkzNDIwMTBhLCAweDAwMDgxYzAwLCAweDMwODRmZmZmLAotCTB4YWZhNjAwMTQsIDB4MDAwMjE2MDAsIDB4MDA0MzEwMjUsIDB4MDA0NDEwMjUsIDB4YWZhMjAwMTAsIDB4OTM0MzAxMGIsCi0JMHhhZmEzMDAxOCwgMHg4ZjQ0MDEwMCwgMHg4ZjQ1MDEwNCwgMHgwZTAwMTU5YiwgMHg4ZDI2MDAzNCwgMHg4ZmJmMDAyMCwKLQkweDAzZTAwMDA4LCAweDI3YmQwMDI4LCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMTlkLCAweDAzZTAwMDA4LAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAxYTksIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsCi0JMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgzYzAyMDgwMCwgMHgyNDQyNTg4MCwgMHhhYzQwMDAwOCwgMHhhNDQwMDAyNiwKLQkweDAzZTAwMDA4LCAweDI0MDIwMDAxLCAweDNjMDIwODAwLCAweDI0NDI1ODgwLCAweDI0MDMwMDA4LCAweGFjNDAwMDA4LAotCTB4YTQ0MDAwMTAsIDB4YTQ0MzAwMTIsIDB4YTA0MDAwMjQsIDB4MDNlMDAwMDgsIDB4MjQwMjAwMDQsIDB4MDNlMDAwMDgsCi0JMHgwMDAwMTAyMSwgMHgxMGMwMDAwNywgMHgwMDAwMDAwMCwgMHg4Y2EyMDAwMCwgMHgyNGM2ZmZmZiwgMHgyNGE1MDAwNCwKLQkweGFjODIwMDAwLCAweDE0YzBmZmZiLCAweDI0ODQwMDA0LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDBhMDAxNTZjLAotCTB4MDBhMDEwMjEsIDB4YWM4NjAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjQ4NDAwMDQsIDB4MDBhMDEwMjEsCi0JMHgxNDQwZmZmYSwgMHgyNGE1ZmZmZiwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgzYzBhMDgwMCwgMHg4ZDQ5MDA2OCwKLQkweDNjMDUwODAwLCAweDI0YTUyMDk4LCAweDAwMDkzMTQwLCAweDAwYzUxMDIxLCAweGFjNDQwMDAwLCAweDhmNDQwZTA0LAotCTB4MDBhNjEwMjEsIDB4YWM0NDAwMDQsIDB4OTc0MzBlMDgsIDB4OTc0MjBlMGMsIDB4MDBhNjIwMjEsIDB4MDAwMzFjMDAsCi0JMHgwMDQzMTAyNSwgMHhhYzgyMDAwOCwgMHg4ZjQzMGUxMCwgMHgwMDgwMTAyMSwgMHhhYzQzMDAwYywgMHg4ZjQ0MGUxNCwKLQkweGFjNDQwMDEwLCAweDhmNDMwZTE4LCAweDNjMDgwMGZmLCAweGFjNDMwMDE0LCAweDhmNDcwZTFjLCAweDM1MDhmZmZmLAotCTB4MjUyOTAwMDEsIDB4YWM0NzAwMTgsIDB4M2MwNzA4MDAsIDB4OGNlMzAwNmMsIDB4OTM0NDAxMGEsIDB4M2MwMjYwMDAsCi0JMHgyNDYzMDAwMSwgMHhhY2UzMDA2YywgMHg4YzQzNDQ0OCwgMHgzMTI5MDA3ZiwgMHgwMGE2MjgyMSwgMHhhZDQ5MDA2OCwKLQkweDAwMDQyNjAwLCAweDAwNjgxODI0LCAweDAwODMyMDI1LCAweDAzZTAwMDA4LCAweGFjYTQwMDFjLCAweDhmYWMwMDEwLAotCTB4OGZhZDAwMTQsIDB4OGZhZTAwMTgsIDB4M2MwYjA4MDAsIDB4OGQ2YTAwNjAsIDB4M2MwODA4MDAsIDB4MjUwODAwODAsCi0JMHgwMDBhNDk0MCwgMHgwMTI4MTAyMSwgMHgwMTA5MTgyMSwgMHhhYzQ0MDAwMCwgMHgwMDYwMTAyMSwgMHhhYzY1MDAwNCwKLQkweGFjNDYwMDA4LCAweGFjNjcwMDBjLCAweGFjNGMwMDEwLCAweGFjNmQwMDE0LCAweDNjMDM2MDAwLCAweGFjNGUwMDE4LAotCTB4OGM2NTQ0NDgsIDB4M2MwNDA4MDAsIDB4OGM4MjAwNjQsIDB4MjU0YTAwMDEsIDB4MzE0YTAwZmYsIDB4MDEwOTQwMjEsCi0JMHhhZDZhMDA2MCwgMHgyNDQyMDAwMSwgMHhhYzgyMDA2NCwgMHgwM2UwMDAwOCwgMHhhZDA1MDAxYywgMHgzYzAzMDgwMCwKLQkweDNjMDkwODAwLCAweDhkMjUwMDcwLCAweDI0NjMzMGIwLCAweDhmNDYwMTAwLCAweDAwMDUzOTAwLCAweDAwZTMxMDIxLAotCTB4YWM0NjAwMDAsIDB4OGY0NDAxMDQsIDB4MDA2NzEwMjEsIDB4YWM0NDAwMDQsIDB4OGY0NjAxMDgsIDB4OGY4NDAwMTQsCi0JMHgyNGE1MDAwMSwgMHhhYzQ2MDAwOCwgMHg4Yzg4MDA3NCwgMHgzYzA2MDgwMCwgMHg4Y2MyMDA3NCwgMHgzMGE1MDAzZiwKLQkweDAwNjcxODIxLCAweGFkMjUwMDcwLCAweDI0NDIwMDAxLCAweGFjYzIwMDc0LCAweDAzZTAwMDA4LCAweGFjNjgwMDBjLAotCTB4MDAwMDAwMDAgfTsKK3N0YXRpYyB1OCBibngyX1RYUF9iMDZGd1RleHRbXSA9IHsKKwkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweDIxLCAweGQzLCAweDQxLCAweDQ0LCAweDAwLCAweDAzLCAweDc0LCAweDY1LAorCTB4NzMsIDB4NzQsIDB4MzEsIDB4MmUsIDB4NjIsIDB4NjksIDB4NmUsIDB4MDAsIDB4ZWQsIDB4NWMsIDB4NmQsIDB4NmMsCisJMHgxYiwgMHhmNywgMHg3OSwgMHg3ZiwgMHhlZSwgMHg4NSwgMHhkMiwgMHg1MSwgMHg5NiwgMHhlOSwgMHg5MywgMHhjMiwKKwkweDc4LCAweDZjLCAweGMwLCAweGE2LCAweDc3LCAweGQ2LCAweDUxLCAweDY2LCAweDIwLCAweGI1LCAweGEwLCAweDA1LAorCTB4MzYsIDB4NTUsIDB4ODcsIDB4NDMsIDB4NzMsIDB4M2UsIDB4NTIsIDB4MmYsIDB4NGUsIDB4NWMsIDB4NTcsIDB4NzEsCisJMHg5NCwgMHg4NiwgMHg2ZSwgMHgwZCwgMHg4YywgMHhhMCwgMHhlYywgMHhkOCwgMHhlYiwgMHg1YSwgMHgyYywgMHgxZiwKKwkweDhjLCAweGQ1LCAweDY4LCAweGQxLCAweDk5LCAweGExLCAweDY4LCAweGM3LCAweGM5LCAweDY4LCAweDUxLCAweGE5LAorCTB4ZTUsIDB4YTgsIDB4NDMsIDB4NTcsIDB4ODAsIDB4OTUsIDB4NjQsIDB4Y2IsIDB4MjksIDB4NGUsIDB4M2EsIDB4NjUsCisJMHhjYiwgMHgxNiwgMHgwYywgMHg1OCwgMHgxNiwgMHhjZCwgMHgyZiwgMHg1ZCwgMHgzZiwgMHg3NCwgMHg4MCwgMHgzZiwKKwkweGVjLCAweDQzLCAweDNhLCAweGVjLCAweDgzLCAweDkxLCAweDE0LCAweGFkLCAweDExLCAweDZjLCAweDU5LCAweGIwLAorCTB4MmYsIDB4MzMsIDB4ZDYsIDB4MjYsIDB4YjcsIDB4ZGYsIDB4NzMsIDB4NzcsIDB4OTQsIDB4OTUsIDB4YzQsIDB4NGUsCisJMHhhYiwgMHg3ZCwgMHhiZSwgMHgwNywgMHgyMCwgMHhlZSwgMHg3ZiwgMHhmZiwgMHhkNywgMHhlNywgMHhmZCwgMHhlNSwKKwkweDdmLCAweDkwLCAweDA2LCAweGI3LCAweDUzLCAweDE3LCAweDg1LCAweGIwLCAweDFkLCAweDNmLCAweGVkLCAweDk5LAorCTB4OTMsIDB4MjcsIDB4M2UsIDB4ZjcsIDB4ZjksIDB4Y2YsIDB4MGQsIDB4YTEsIDB4MzksIDB4NGMsIDB4NGEsIDB4NGMsCisJMHhlNCwgMHhjMSwgMHg1YiwgMHgxMiwgMHg1MSwgMHhmOSwgMHgxZCwgMHg4YSwgMHgyMCwgMHg4MiwgMHgwOCwgMHgyMiwKKwkweDg4LCAweDIwLCAweDgyLCAweDA4LCAweDIyLCAweDg4LCAweDIwLCAweDgyLCAweDA4LCAweDIyLCAweDg4LCAweDIwLAorCTB4ODIsIDB4MDgsIDB4MjIsIDB4ODgsIDB4MjAsIDB4ODIsIDB4MDgsIDB4MjIsIDB4ODgsIDB4MjAsIDB4ODIsIDB4MDgsCisJMHgyMiwgMHg4OCwgMHgyMCwgMHg4MiwgMHgwOCwgMHgyMiwgMHg4OCwgMHgyMCwgMHg4MiwgMHgwOCwgMHgyMiwgMHg4OCwKKwkweDIwLCAweDgyLCAweDA4LCAweDIyLCAweDg4LCAweDIwLCAweDgyLCAweDA4LCAweDIyLCAweDg4LCAweDIwLCAweDgyLAorCTB4MDgsIDB4MjIsIDB4ODgsIDB4MjAsIDB4ODIsIDB4MDgsIDB4MjIsIDB4ODgsIDB4MjAsIDB4ODIsIDB4MDgsIDB4MjIsCisJMHhmOCwgMHg5ZCwgMHgyMCwgMHgxMSwgMHhhOSwgMHhmYywgMHhkYywgMHgxZSwgMHhmZSwgMHg0OCwgMHgxMSwgMHhjZCwKKwkweGYyLCAweDUzLCAweGI2LCAweDQxLCAweDhhLCAweDY0LCAweDFlLCAweDM5LCAweDM0LCAweDY1LCAweDEwLCAweDU5LAorCTB4Y2UsIDB4ODAsIDB4NTYsIDB4YTAsIDB4ZjcsIDB4YmQsIDB4NmEsIDB4NTIsIDB4MjYsIDB4ZWUsIDB4ZmYsIDB4YjQsCisJMHhmOSwgMHhkYiwgMHg1MywgMHhhZiwgMHg3ZiwgMHg0MSwgMHg3ZiwgMHhhZiwgMHgyNSwgMHg5MSwgMHhhMiwgMHg5YSwKKwkweDZiLCAweDc5LCAweGI1LCAweDlmLCAweDk0LCAweDM0LCAweGQ2LCAweGZjLCAweGQ1LCAweGVlLCAweGFmLCAweGVmLAorCTB4YTAsIDB4NDQsIDB4N2IsIDB4YWYsIDB4MjQsIDB4ZDUsIDB4OWIsIDB4YjcsIDB4YmMsIDB4ZDcsIDB4NzcsIDB4MjcsCisJMHhlOSwgMHgxNSwgMHg1NywgMHhhNSwgMHgzNSwgMHg1NywgMHgxNiwgMHg0NiwgMHg5YiwgMHgwYSwgMHg0ZCwgMHgzNywKKwkweDFkLCAweDNhLCAweGRkLCAweGE4LCAweDUyLCAweGMxLCAweGJkLCAweDRjLCAweGI1LCAweDM5LCAweDM1LCAweDYxLAorCTB4MmYsIDB4ZmYsIDB4ODQsIDB4YTYsIDB4ZTcsIDB4N2EsIDB4MTMsIDB4ODUsIDB4NjUsIDB4ODcsIDB4NmEsIDB4OGQsCisJMHg1NCwgMHhjMiwgMHg3NiwgMHhkNSwgMHg0NCwgMHg2MSwgMHgzZSwgMHg4OSwgMHhmNywgMHhkZSwgMHg4NCwgMHgzZCwKKwkweGFmLCAweDU3LCAweDg5LCAweDc2LCAweDYyLCAweDRlLCAweDJhLCAweDUxLCAweDY4LCAweGVhLCAweDY1LCAweGEyLAorCTB4YmUsIDB4ZGMsIDB4NzUsIDB4NGEsIDB4MjcsIDB4MGEsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4YWUsIDB4MGEsIDB4NTQsCisJMHhmYiwgMHgyYywgMHhhOSwgMHgwOSwgMHhmMywgMHhiNiwgMHhmNywgMHgyOSwgMHg0MywgMHhhNSwgMHgxZSwgMHg4MywKKwkweDc2LCAweGVjLCAweDMwLCAweGU4LCAweGQ5LCAweDk0LCAweGE5LCAweDUwLCAweGU1LCAweDdjLCAweDljLCAweDJjLAorCTB4OWYsIDB4MjYsIDB4OTUsIDB4MmEsIDB4ZjMsIDB4MDMsIDB4ZWEsIDB4MTUsIDB4OGEsIDB4OTEsIDB4OTUsIDB4NmMsCisJMHhiZiwgMHg3YiwgMHg5ZSwgMHg5ZCwgMHhmYiwgMHgxNiwgMHhmZiwgMHg5ZCwgMHgxNiwgMHhjZSwgMHhhMiwgMHhjNCwKKwkweGE4LCAweDRiLCAweDY0LCAweDAzLCAweDJmLCAweDNiLCAweGY3LCAweGJlLCAweDE3LCAweGFjLCAweDUxLCAweDcwLAorCTB4YWUsIDB4OWMsIDB4MTgsIDB4NjksIDB4N2EsIDB4NWUsIDB4MzEsIDB4ODcsIDB4MzMsIDB4NzIsIDB4ZWQsIDB4YjUsCisJMHgzMSwgMHg2YSwgMHgyNSwgMHhhZCwgMHhkNiwgMHg3NCwgMHgyZSwgMHhiZiwgMHgyMywgMHhmOCwgMHgxYiwgMHgyZiwKKwkweGE2LCAweDkxLCAweGRmLCAweDJkLCAweDEyLCAweDhkLCAweGFmLCAweDUwLCAweDI1LCAweDQ5LCAweGFkLCAweDVhLAorCTB4ZWUsIDB4NjEsIDB4N2EsIDB4MjEsIDB4ZDcsIDB4NGQsIDB4NjcsIDB4YjEsIDB4ZGYsIDB4ZjMsIDB4MzksIDB4ZjAsCisJMHhkMSwgMHgzOCwgMHgyOSwgMHhkOCwgMHhhZSwgMHg5ZSwgMHgyMiwgMHhlMSwgMHgwNSwgMHhiMiwgMHhlNywgMHhmYiwKKwkweGQ0LCAweDAyLCAweGUxLCAweDZjLCAweGMzLCAweGZiLCAweDhjLCAweDlkLCAweGMzLCAweDc5LCAweDgzLCAweGZmLAorCTB4ZWIsIDB4NTksIDB4NDksIDB4YmQsIDB4ZGMsIDB4YTIsIDB4MTQsIDB4ZDUsIDB4OWEsIDB4N2QsIDB4YjksIDB4OWYsCisJMHg5MywgMHg0MCwgMHg5ZCwgMHgwNiwgMHhmMywgMHhjNywgMHhhMywgMHhjNywgMHg3MCwgMHhhZSwgMHg2ZCwgMHhhMCwKKwkweGRmLCAweDI1LCAweDRiLCAweGNjLCAweGM0LCAweGU4LCAweDRmLCAweDU1LCAweDVkLCAweGIzLCAweGE1LCAweDVlLAorCTB4YWEsIDB4OWQsIDB4ZWYsIDB4MDQsIDB4OWUsIDB4NTYsIDB4YWYsIDB4ODgsIDB4YjksIDB4NjMsIDB4NzksIDB4NGEsCisJMHg2ZSwgMHgyMywgMHgxMiwgMHgyNCwgMHgzMywgMHg4MywgMHg3ZCwgMHg4OSwgMHg2YSwgMHg0ZSwgMHgwYSwgMHg2YiwKKwkweDMzLCAweGMzLCAweGVmLCAweGQwLCAweDBlLCAweGQyLCAweDdhLCAweDY0LCAweDlhLCAweDc2LCAweGJhLCAweGMwLAorCTB4YzcsIDB4NmUsIDB4YzgsIDB4MjAsIDB4MzMsIDB4ZmMsIDB4MmUsIDB4ODQsIDB4MjIsIDB4MWEsIDB4OTksIDB4ZDQsCisJMHg0OSwgMHgyYSwgMHgwYiwgMHgwNSwgMHhiNywgMHg4MywgMHhhNiwgMHgzMywgMHgwYSwgMHhkNSwgMHg4MSwgMHg0NywKKwkweDNkLCAweGY3LCAweDM1LCAweGMxLCAweDVlLCAweDJlLCAweDA5LCAweDg1LCAweDY1LCAweGNjLCAweDczLCAweDVmLAorCTB4MGIsIDB4ZmYsIDB4NzYsIDB4YWQsIDB4MWIsIDB4ZmIsIDB4ODgsIDB4NTQsIDB4Y2IsIDB4OTQsIDB4MzAsIDB4YTYsCisJMHhkMCwgMHgxNCwgMHhlNiwgMHg0ZCwgMHg4MSwgMHhhNiwgMHg2OSwgMHg3NywgMHgwNywgMHhhZCwgMHg0ZiwgMHgyNiwKKwkweDEzLCAweGNjLCAweGFiLCAweDFhLCAweGM2LCAweGJmLCAweDMyLCAweDIxLCAweDkwLCAweDZhLCAweDU4LCAweGY0LAorCTB4ZWIsIDB4M2MsIDB4NjQsIDB4MzgsIDB4ZGYsIDB4Y2IsIDB4MzIsIDB4YTMsIDB4ZDMsIDB4NGQsIDB4NGEsIDB4OGEsCisJMHg5NCwgMHg0OSwgMHg1NSwgMHhlOCwgMHgzMiwgMHgyZCwgMHgzYSwgMHgyYywgMHg3ZiwgMHhjOCwgMHgxMywgMHhmMiwKKwkweGFlLCAweDM5LCAweGJjLCAweDBlLCAweDcyLCAweDZiLCAweDE2LCAweGMxLCAweDhmLCAweDcxLCAweGUwLCAweDcwLAorCTB4NTAsIDB4NzgsIDB4NmMsIDB4NzEsIDB4NTIsIDB4MTgsIDB4NzMsIDB4N2YsIDB4OTMsIDB4YTAsIDB4YWUsIDB4OTMsCisJMHhjMiwgMHgwMSwgMHhmNywgMHhhOCwgMHgxMCwgMHhmMiwgMHgxZSwgMHhiMiwgMHg1MywgMHhjOCwgMHg5YSwgMHg1MCwKKwkweGU4LCAweDkyLCAweDFiLCAweGM4LCAweDZlLCAweDAxLCAweGZhLCAweDY5LCAweGE5LCAweDE2LCAweGU0LCAweDcwLAorCTB4NzgsIDB4NjMsIDB4MGUsIDB4OGYsIDB4ZDUsIDB4OTcsIDB4NjUsIDB4M2EsIDB4ZWQsIDB4ZjIsIDB4ZmMsIDB4M2YsCisJMHg4MiwgMHg3YywgMHgxNCwgMHg3MiwgMHg3NiwgMHg3NywgMHg1MywgMHgxOSwgMHhmZCwgMHhiNSwgMHg3OSwgMHhiMiwKKwkweGVjLCAweDljLCAweDg4LCAweDM1LCAweDA5LCAweDkyLCAweDhjLCAweDlkLCAweGY4LCAweDc1LCAweGQxLCAweGQ0LAorCTB4NjIsIDB4YTcsIDB4MjUsIDB4MTksIDB4NDksIDB4OWEsIDB4NzIsIDB4OTksIDB4ODcsIDB4NzgsIDB4MzYsIDB4ZGIsCisJMHg3YywgMHg2NCwgMHg1YywgMHhiOSwgMHg5ZiwgMHhkNywgMHg3MSwgMHhiZiwgMHg4YSwgMHhmZSwgMHhjZCwgMHg3ZCwKKwkweGFjLCAweDE3LCAweDA5LCAweGUwLCAweGEzLCAweDY3LCAweDU5LCAweDlmLCAweDJiLCAweGNkLCAweDhjLCAweDdhLAorCTB4ODAsIDB4OWYsIDB4MmUsIDB4ZjMsIDB4YjYsIDB4Y2QsIDB4NTMsIDB4MTksIDB4NzMsIDB4NDUsIDB4YWEsIDB4MmMsCisJMHhlMiwgMHg5YywgMHhmMywgMHhiZiwgMHhmNSwgMHg2MiwgMHg3OSwgMHhiYywgMHgxYiwgMHgxZCwgMHhhMCwgMHg4YiwKKwkweGNmLCAweDk1LCAweDgxLCAweDkzLCAweDQ4LCAweGU1LCAweDQ1LCAweGRlLCAweDhiLCAweGM3LCAweDA5LCAweGIyLAorCTB4YWYsIDB4ZjUsIDB4ODgsIDB4OTQsIDB4ODUsIDB4N2MsIDB4NzUsIDB4OWMsIDB4MTMsIDB4YzcsIDB4OWMsIDB4NmUsCisJMHhmMCwgMHgwZiwgMHhiNCwgMHgyZSwgMHhhMywgMHgwZCwgMHhkYSwgMHg0NSwgMHg0MywgMHhjNCwgMHhmYSwgMHg0ZSwKKwkweDlhLCAweGNhLCAweGIxLCAweGJlLCAweDMwLCAweDllLCAweGRiLCAweGIwLCAweDc3LCAweDljLCAweDhlLCAweDljLAorCTB4NjcsIDB4N2UsIDB4YzgsIDB4ZjQsIDB4M2MsIDB4NzAsIDB4OWMsIDB4OWUsIDB4ZDcsIDB4ZDUsIDB4MjIsIDB4ZTksCisJMHhlMCwgMHg4ZCwgMHg4NSwgMHg3OSwgMHg5ZCwgMHg1NCwgMHg1NiwgMHgzZCwgMHg2ZiwgMHgyNCwgMHgzNywgMHhhMCwKKwkweGJlLCAweGVjLCAweGViLCAweGY5LCAweDgwLCAweDlhLCAweDExLCAweGE4LCAweGRhLCAweDYxLCAweGZlLCAweDIxLAorCTB4NzAsIDB4ZDAsIDB4NGIsIDB4NDQsIDB4ZmMsIDB4ZmUsIDB4Y2YsIDB4NjQsIDB4NGQsIDB4YjIsIDB4ZmQsIDB4MjQsCisJMHhmOSwgMHgyYywgMHhkOCwgMHhkMywgMHg0ZSwgMHhlMCwgMHhjZiwgMHgzNiwgMHg5NywgMHg4NiwgMHg1YywgMHg1MiwKKwkweGJlLCAweDFkLCAweDhjLCAweGRjLCAweGQ1LCAweDBlLCAweGY0LCAweGYxLCAweDE2LCAweDZjLCAweGE2LCAweGI2LAorCTB4MmMsIDB4YjMsIDB4ZmQsIDB4ZTUsIDB4YTAsIDB4NmUsIDB4YjQsIDB4Y2QsIDB4ODAsIDB4NmUsIDB4ZjksIDB4YjIsCisJMHhkOSwgMHg4ZiwgMHhmZCwgMHgzZCwgMHhlZiwgMHhjYiwgMHhiOSwgMHgwMCwgMHhhNywgMHhkYSwgMHhiYywgMHg4NSwKKwkweGI1LCAweDMyLCAweGY4LCAweGFlLCAweDFmLCAweGQ3LCAweGZjLCAweGYzLCAweGY3LCAweDg3LCAweGU3LCAweGFiLAorCTB4MzQsIDB4MDUsIDB4YmMsIDB4NmIsIDB4NGQsIDB4ODksIDB4MGEsIDB4MmEsIDB4ZWYsIDB4ZjEsIDB4MmUsIDB4ZjcsCisJMHg5NywgMHg4MywgMHhiZCwgMHhhMCwgMHhiNywgMHhlNywgMHhmYSwgMHhkNCwgMHg3ZCwgMHhiMCwgMHgyNSwgMHhiNiwKKwkweGIxLCAweGRhLCAweDBhLCAweGYzLCAweDE4LCAweGZiLCAweGU0LCAweDk5LCAweGM3LCAweGFhLCAweDhmLCAweGEzLAorCTB4M2QsIDB4Y2YsIDB4N2EsIDB4NDQsIDB4NjksIDB4ODksIDB4NTgsIDB4Y2YsIDB4MmYsIDB4YjMsIDB4MmUsIDB4NDEsCisJMHgzZiwgMHgwMywgMHhiZCwgMHhhYSwgMHgzOCwgMHgyYywgMHhmZiwgMHgyZiwgMHg4NSwgMHhmNiwgMHgyOSwgMHg1MiwKKwkweDdmLCAweDg2LCAweGY1LCAweGZkLCAweDA1LCAweDJhLCAweGMwLCAweGM2LCAweGE3LCAweDcwLCAweGQyLCAweDIyLAorCTB4NjgsIDB4NWEsIDB4NjgsIDB4ZjYsIDB4ODEsIDB4NTcsIDB4NmQsIDB4YmIsIDB4ODMsIDB4N2MsIDB4MDcsIDB4ZmYsCisJMHhjNywgMHgwYiwgMHhlNiwgMHg3NywgMHgwMywgMHgyNywgMHhiNiwgMHg5OSwgMHg5YSwgMHgyYSwgMHg1MiwgMHgxNSwKKwkweDNmLCAweGU4LCAweDhkLCAweGExLCAweDY3LCAweDZkLCAweDQ5LCAweDlmLCAweDI4LCAweDAzLCAweDM3LCAweGU4LAorCTB4M2QsIDB4ZDksIDB4N2IsIDB4NTgsIDB4OWYsIDB4MzEsIDB4YzcsIDB4YTUsIDB4YTEsIDB4YjYsIDB4OWQsIDB4MmQsCisJMHgzOCwgMHgyYywgMHhhNywgMHgyZSwgMHg5YywgMHhkYiwgMHhjNiwgMHg0OSwgMHg0NiwgMHgxZiwgMHhlZiwgMHhhMywKKwkweDQwLCAweGU3LCAweGRiLCAweDNhLCAweGMzLCAweGZhLCAweGE3LCAweDViLCAweGViLCAweGQ0LCAweDQxLCAweGQ5LAorCTB4MGMsIDB4N2MsIDB4ZDksIDB4YmMsIDB4MDgsIDB4ZjksIDB4YTUsIDB4ZTEsIDB4NTMsIDB4NjQsIDB4N2EsIDB4YmEsCisJMHg5OSwgMHhhNCwgMHg2MywgMHg0ZCwgMHhjNiwgMHhhZiwgMHgwOCwgMHhiYiwgMHg4MywgMHg2ZiwgMHg5YiwgMHgxZiwKKwkweDg1LCAweDlkLCAweDhkLCAweDBiLCAweDIzLCAweGIwLCAweDg5LCAweDQ3LCAweDE3LCAweDE5LCAweDI3LCAweDhmLAorCTB4ZDgsIDB4MmUsIDB4OGIsIDB4Y2IsIDB4NjUsIDB4NjEsIDB4ZDQsIDB4MmQsIDB4MDksIDB4ZTMsIDB4Y2IsIDB4NmMsCisJMHgyNywgMHg2YywgMHgyMywgMHhiYSwgMHhmYSwgMHgzOCwgMHgzMSwgMHgwZCwgMHg5OCwgMHhlMywgMHhmZSwgMHgyMiwKKwkweGMxLCAweGI2LCAweDVhLCAweDNiLCAweDE3LCAweDA3LCAweDFlLCAweGRiLCAweDgwLCAweDRmLCAweDM3LCAweDZjLAorCTB4MGYsIDB4ZmEsIDB4NjUsIDB4ZTgsIDB4MTMsIDB4YWMsIDB4MzMsIDB4YzUsIDB4OGMsIDB4YTEsIDB4ZmQsIDB4MjUsCisJMHg3ZCwgMHg5YywgMHgwZiwgMHgyMywgMHgxYiwgMHg3YywgMHgxOCwgMHgwMCwgMHg0ZiwgMHgzZSwgMHhjYywgMHg4NywKKwkweGZhLCAweGM3LCAweGY5LCAweDYwLCAweDU1LCAweGMxLCAweDg3LCAweDNhLCAweGZjLCAweDUwLCAweGRkLCAweDY1LAorCTB4OWEsIDB4M2QsIDB4MTIsIDB4ZjcsIDB4MTAsIDB4YjQsIDB4OTMsIDB4ZjYsIDB4OGEsIDB4MjYsIDB4ZWIsIDB4MjgsCisJMHhkYiwgMHg0OSwgMHg0NiwgMHg5YiwgMHhjNiwgMHgwZSwgMHg0YiwgMHg0ZSwgMHhiNywgMHg2ZiwgMHgxYiwgMHhhMywKKwkweDNlLCAweDJmLCAweDdlLCAweDE3LCAweGJkLCAweDRjLCAweGRmLCAweDFkLCAweDlhLCAweGM3LCAweDE3LCAweGQ5LAorCTB4ZGYsIDB4NDAsIDB4Y2YsIDB4MzMsIDB4ODYsIDB4N2EsIDB4ODgsIDB4ZWUsIDB4ZDAsIDB4YmQsIDB4ZWYsIDB4MGUsCisJMHhkZCwgMHgzOCwgMHhhNywgMHhlZCwgMHg4MywgMHg5OCwgMHhlNiwgMHhiNiwgMHgzZiwgMHg2NiwgMHg1ZCwgMHg3OSwKKwkweGMzLCAweDkzLCAweDBjLCAweDAzLCAweDMyLCAweDYwLCAweDdkLCAweDYxLCAweDFjLCAweDc0LCAweGY1LCAweGNiLAorCTB4YTAsIDB4YTcsIDB4MDIsIDB4YmYsIDB4YzAsIDB4YjYsIDB4NTQsIDB4ZjYsIDB4ZTcsIDB4NzUsIDB4NTAsIDB4YjksCisJMHgyNywgMHg5OCwgMHgzZiwgMHhkNSwgMHhmNCwgMHhmZSwgMHg0YiwgMHgzNCwgMHgzZiwgMHhmMCwgMHhlYywgMHhiYywKKwkweDExLCAweGRhLCAweGI4LCAweDQyLCAweDdmLCAweGIyLCAweGE4LCAweDk3LCAweDM1LCAweGExLCAweDliLCAweGFhLAorCTB4ZjcsIDB4YzMsIDB4YWYsIDB4MzQsIDB4ZDksIDB4M2UsIDB4NzYsIDB4ZGUsIDB4YzMsIDB4OTcsIDB4YTUsIDB4NDMsCisJMHg1ZiwgMHhmNiwgMHgzZSwgMHg3OCwgMHhjZiwgMHhiMSwgMHhlNywgMHhlOCwgMHgwNywgMHhlYiwgMHg0OSwgMHg3ZSwKKwkweDY2LCAweGQ0LCAweDA5LCAweDJhLCAweDcxLCAweGJjLCAweGQ5LCAweDIxLCAweGZhLCAweGZlLCAweGJiLCAweDhmLAorCTB4NjMsIDB4NDEsIDB4NTUsIDB4MzYsIDB4ZTMsIDB4NTQsIDB4ZWQsIDB4YTEsIDB4YWEsIDB4NjQsIDB4YjIsIDB4MWQsCisJMHhiMSwgMHg2ZCwgMHhiNCwgMHhmMSwgMHhkZSwgMHgxZSwgMHhjNiwgMHhkZCwgMHg0MSwgMHg4OSwgMHgwYywgMHgxZSwKKwkweDQ3LCAweDhjLCAweDY4LCAweDMyLCAweDBkLCAweGVmLCAweDg3LCAweGYyLCAweDYwLCAweDdmLCAweDRhLCAweGIxLAorCTB4NDAsIDB4ZGYsIDB4ZjYsIDB4YzMsIDB4NWYsIDB4MzIsIDB4M2YsIDB4MzcsIDB4ZWIsIDB4MGEsIDB4ZmIsIDB4NTEsCisJMHhkMiwgMHg0NCwgMHg4MywgMHhmZCwgMHgyOCwgMHhhOSwgMHg5MiwgMHg3OSwgMHg1MCwgMHhiMCwgMHgxNiwgMHhiZiwKKwkweDI2LCAweDU4LCAweGUwLCAweDliLCAweDA1LCAweGJlLCAweDU5LCAweGUwLCAweDliLCAweDBkLCAweGJlLCAweDE1LAorCTB4NWMsIDB4YzYsIDB4ODUsIDB4ZjEsIDB4MDgsIDB4ZjYsIDB4MmYsIDB4MDYsIDB4ZmIsIDB4MDMsIDB4YzcsIDB4OWQsCisJMHg1NCwgMHhmMSwgMHhlZCwgMHg5YiwgMHg2OSwgMHg4NSwgMHgzZiwgMHhmNiwgMHg3ZCwgMHhjMSwgMHhhOCwgMHgxMCwKKwkweGY4LCAweDAyLCAweGRlLCAweDZmLCAweDFjLCAweGViLCAweDFmLCAweDQ3LCAweDhjLCAweGIzLCAweDQ0LCAweGQxLAorCTB4YjgsIDB4YzMsIDB4OGYsIDB4ZmEsIDB4MjYsIDB4N2UsIDB4NGMsIDB4M2IsIDB4Y2MsIDB4MWYsIDB4OWUsIDB4Y2YsCisJMHg3NiwgMHhlYywgMHg0MCwgMHhlNiwgMHg2ZCwgMHg5ZSwgMHhlYywgMHgwNywgMHgwZSwgMHg5ZCwgMHg0YywgMHg3NywKKwkweDQ4LCAweDA3LCAweGVmLCAweGRmLCAweDFiLCAweGVlLCAweDdmLCAweDAwLCAweDdiLCAweGIyLCAweGRkLCAweGRlLAorCTB4ZWQsIDB4NWMsIDB4M2UsIDB4OTMsIDB4ZTMsIDB4ZTgsIDB4MjcsIDB4ZDEsIDB4ODMsIDB4M2MsIDB4MDIsIDB4N2UsCisJMHg2NiwgMHgwZCwgMHg3NiwgMHg3NiwgMHg1MywgMHg0YSwgMHhkMSwgMHhlYiwgMHhiYiwgMHg2ZiwgMHgyMCwgMHhiNywKKwkweGEwLCAweGVhLCAweDAzLCAweGE2LCAweGE3LCAweGM5LCAweGU2LCAweGZiLCAweDVlLCAweDNkLCAweDBmLCAweGRmLAorCTB4NjksIDB4ZWEsIDB4MjksIDB4NWIsIDB4MWEsIDB4YTQsIDB4MzcsIDB4ZGMsIDB4MmMsIDB4ZmQsIDB4OWQsIDB4NmIsCisJMHhkMCwgMHhkZiwgMHhiYSwgMHgxYSwgMHhiZCwgMHhlYSwgMHhhNiwgMHhlOSwgMHg2ZiwgMHhkYywgMHgxNCwgMHhmZCwKKwkweGI1LCAweGRiLCAweGNlLCAweDQzLCAweDkyLCAweGFjLCAweDQ3LCAweDg5LCAweGEyLCAweDdiLCAweGI3LCAweDVjLAorCTB4MDgsIDB4M2EsIDB4OGUsIDB4YmQsIDB4ZWMsIDB4YmMsIDB4NWMsIDB4OTYsIDB4NGQsIDB4M2YsIDB4M2YsIDB4OTgsCisJMHg5OCwgMHg2ZSwgMHg5MCwgMHhiMiwgMHhkMywgMHhhMCwgMHhlZCwgMHhmNywgMHgyMywgMHhlZiwgMHg0OSwgMHg5YSwKKwkweGI0LCAweGUzLCAweDNlLCAweDNjLCAweDdiLCAweDRkLCAweGIyLCAweDdhLCAweGNjLCAweDUzLCAweDllLCAweDY4LAorCTB4YjAsIDB4MWUsIDB4NzUsIDB4MGYsIDB4NGYsIDB4ZTUsIDB4ZTMsIDB4OGMsIDB4ZmIsIDB4YzQsIDB4MzQsIDB4ZmMsCisJMHg5MSwgMHg4ZCwgMHhiMywgMHhhYSwgMHhkMCwgMHhjNSwgMHhhYSwgMHg3YiwgMHhlOCwgMHhmZSwgMHgyMCwgMHgxNywKKwkweDdhLCAweDJmLCAweGNjLCAweDg5LCAweDM4LCAweGFmLCAweDVhLCAweDdmLCAweDZhLCAweGMyLCAweDYwLCAweDNmLAorCTB4MmIsIDB4NmMsIDB4ZjIsIDB4YjMsIDB4MjQsIDB4MTQsIDB4NDEsIDB4NTMsIDB4MWQsIDB4YjgsIDB4MTYsIDB4NDEsCisJMHhlNywgMHg1NywgMHg1ZCwgMHg0NSwgMHgyOCwgMHg5YywgMHhlZiwgMHhhNSwgMHhlOSwgMHg0NSwgMHg4ZSwgMHg1NSwKKwkweDNjLCAweDRmLCAweDA5LCAweDczLCAweDE5LCAweDdlLCAweGVmLCAweGMwLCAweDNiLCAweDIxLCAweDdlLCAweDE0LAorCTB4YjYsIDB4NTMsIDB4NDIsIDB4N2YsIDB4NzMsIDB4ODIsIDB4OWMsIDB4MzAsIDB4MTcsIDB4ODksIDB4ZDEsIDB4MDUsCisJMHg1ZiwgMHg3NywgMHhiOCwgMHhkZiwgMHgyYSwgMHhmZCwgMHhiMCwgMHhmZiwgMHg0ZSwgMHhmZiwgMHhmOSwgMHg4ZCwKKwkweGZlLCAweDcyLCAweGU5LCAweGViLCAweDFiLCAweGZkLCAweGVmLCAweGE4LCAweDAxLCAweDRlLCAweGMzLCAweGMyLAorCTB4ZTMsIDB4ZWUsIDB4ZjMsIDB4NjEsIDB4ZGYsIDB4NmQsIDB4ZjAsIDB4ZDMsIDB4ZjMsIDB4ZWEsIDB4ODgsIDB4MjcsCisJMHgzNSwgMHhlMywgMHgzNiwgMHg3MiwgMHgxZiwgMHhmNiwgMHgyOSwgMHg1YiwgMHhmMSwgMHgyMSwgMHgxZiwgMHhmMiwKKwkweDFmLCAweGFhLCAweDJkLCAweGIxLCAweDljLCAweDE0LCAweDBhLCAweGY2LCAweGU0LCAweGYxLCAweDRlLCAweGY4LAorCTB4OTIsIDB4ZGIsIDB4NjgsIDB4NzMsIDB4ZWMsIDB4NmEsIDB4ZmIsIDB4MzEsIDB4OWUsIDB4YzMsIDB4ZWIsIDB4NmYsCisJMHhkZCwgMHg0MywgMHg5NiwgMHgyYSwgMHg2NCwgMHhiOSwgMHgzNSwgMHg3OSwgMHhkNSwgMHgxYSwgMHhhNywgMHg0MiwKKwkweDlmLCAweGQwLCAweDNkLCAweDZjLCAweDQzLCAweDJlLCAweDEyLCAweGU0LCAweDUyLCAweDgzLCAweDVjLCAweDBhLAorCTB4ZjcsIDB4OTQsIDB4MGIsIDB4Y2UsIDB4ZDgsIDB4ZDAsIDB4MjksIDB4YzYsIDB4YTMsIDB4MmIsIDB4M2MsIDB4OWIsCisJMHgxNCwgMHhkOSwgMHhhYywgMHg5NiwgMHhlYSwgMHhjNiwgMHhhNywgMHgyOCwgMHg2NiwgMHgzMCwgMHgxZSwgMHgwNiwKKwkweGYwLCAweDM4LCAweDhhLCAweGI1LCAweDFjLCAweGMzLCAweDQ4LCAweDg5LCAweDk5LCAweDJjLCAweGNmLCAweGRjLAorCTB4MTMsIDB4YjYsIDB4NzEsIDB4YWIsIDB4YjQsIDB4ZTAsIDB4ZGMsIDB4MmEsIDB4NWQsIDB4MzQsIDB4ZjgsIDB4ZmQsCisJMHhmNiwgMHg2NCwgMHg5MCwgMHgzNywgMHg3NywgMHgzZiwgMHg4OSwgMHhiYywgMHgxOSwgMHhlYiwgMHhkOSwgMHgxZiwKKwkweDcyLCAweGZmLCAweDMwLCAweGU2LCAweDcxLCAweDdjLCAweGEwLCAweDQzLCAweDM1LCAweGZjLCAweGVhLCAweGZlLAorCTB4ZGMsIDB4NmIsIDB4NGYsIDB4ZjAsIDB4ZGMsIDB4NGUsIDB4NTMsIDB4OWUsIDB4ZmMsIDB4MzUsIDB4OWUsIDB4MWQsCisJMHhhNiwgMHhmNiwgMHhlNCwgMHg0ZiwgMHgwZCwgMHhkZSwgMHg3NywgMHg3OCwgMHhmMiwgMHhhMiwgMHhiZiwgMHgwNywKKwkweDYyLCAweGE2LCAweGJmLCAweDM2LCAweGZiLCAweDI0LCAweGFmLCAweDdkLCAweDBlLCAweDNlLCAweGY2LCAweDBjLAorCTB4ZTIsIDB4Y2IsIDB4NjksIDB4NDcsIDB4M2IsIDB4NTQsIDB4YzEsIDB4NmYsIDB4OGEsIDB4NzEsIDB4NmEsIDB4ZjIsCisJMHhiOCwgMHg4NSwgMHg3MSwgMHgxOSwgMHhiMSwgMHg5MCwgMHhkYiwgMHgwYSwgMHgxZCwgMHhjMywgMHhiYywgMHhhNywKKwkweDMxLCAweGVmLCAweGE4LCAweDMzLCAweDhlLCAweGJjLCAweGJkLCAweDRkLCAweGQ3LCAweGJmLCAweGM1LCAweDBiLAorCTB4ZjMsIDB4ZWMsIDB4Y2YsIDB4OTEsIDB4ZWQsIDB4YWYsIDB4ZmMsIDB4N2IsIDB4ZGMsIDB4ODYsIDB4NWYsIDB4MTYsCisJMHg1NywgMHg2ZSwgMHhjNiwgMHgwYiwgMHhhMCwgMHg1YiwgMHg1YSwgMHhmOSwgMHg0NSwgMHhiYywgMHgwOCwgMHgzZCwKKwkweDEzLCAweDBkLCAweDA5LCAweDdlLCAweGY5LCAweDMzLCAweDU0LCAweDUzLCAweDNkLCAweDdhLCAweDE5LCAweGYxLAorCTB4YWIsIDB4OTYsIDB4ODUsIDB4YmYsIDB4ODIsIDB4MzQsIDB4NDUsIDB4MDMsIDB4N2UsIDB4NGMsIDB4MjUsIDB4YTUsCisJMHhjYiwgMHgzYywgMHhhOSwgMHg1MiwgMHg1NywgMHgzZSwgMHg2ZSwgMHgyMywgMHhkZSwgMHhkNCwgMHg1NCwgMHgwOSwKKwkweGZkLCAweGZkLCAweDc4LCAweDZlLCAweGVlLCAweGZmLCAweDY1LCAweDFjLCAweDdlLCAweDBiLCAweDNlLCAweDgyLAorCTB4MTQsIDB4M2IsIDB4ZGYsIDB4OGQsIDB4ZmQsIDB4YmYsIDB4OGQsIDB4N2UsIDB4NGMsIDB4YzgsIDB4NmMsIDB4ZjQsCisJMHgzZiwgMHgxYiwgMHhmNCwgMHhkZiwgMHgwMiwgMHgyZSwgMHhiYywgMHg4ZSwgMHhlMywgMHgyNywgMHgyOSwgMHg1MywKKwkweDc5LCAweDE1LCAweDM4LCAweGYwLCAweGRjLCAweGE0LCAweDNmLCAweGI3LCAweDM4LCAweGNmLCAweDNjLCAweGE4LAorCTB4OTYsIDB4MTYsIDB4OGMsIDB4MzQsIDB4MTUsIDB4ZTYsIDB4OTIsIDB4MzQsIDB4M2EsIDB4YTcsIDB4ZDIsIDB4ZDgsCisJMHg5YywgMHgzZSwgMHhkMSwgMHg2MiwgMHhmYiwgMHgwMSwgMHhjZCwgMHg4NCwgMHgxYywgMHg0MSwgMHg1YywgMHgyMSwKKwkweDUwLCAweGFjLCAweGE3LCAweDllLCAweGE2LCAweGJlLCAweGQ0LCAweDMxLCAweGZhLCAweDZmLCAweDBmLCAweGIxLAorCTB4MDgsIDB4NzEsIDB4YTgsIDB4OWIsIDB4NjQsIDB4N2YsIDB4OWYsIDB4NTQsIDB4ZmIsIDB4NGMsIDB4OTYsIDB4ZDEsCisJMHg4NywgMHhjZSwgMHgyZCwgMHhjZSwgMHhkZiwgMHg2YiwgMHg1ZiwgMHgyOCwgMHhmMSwgMHg0YSwgMHhlYSwgMHgyMywKKwkweGZiLCAweGJlLCAweDFiLCAweGVlLCAweGFiLCAweDYyLCAweGRmLCAweDM0LCAweGY2LCAweDY0LCAweDFhLCAweGY1LAorCTB4ZjgsIDB4YzgsIDB4NzksIDB4YjIsIDB4M2EsIDB4ODEsIDB4NWYsIDB4MzEsIDB4ODMsIDB4OTgsIDB4OGYsIDB4N2QsCisJMHhjZSwgMHhjYywgMHhiMSwgMHhkZSwgMHhkMywgMHg0ZSwgMHhmYywgMHgwNiwgMHg2MywgMHg5NCwgMHhjOSwgMHgyZSwKKwkweDIzLCAweDI3LCAweDE4LCAweGYxLCAweGY3LCAweDA4LCAweGYyLCAweDA1LCAweDcxLCAweDY1LCAweDEwLCAweGY5LAorCTB4ZGEsIDB4M2IsIDB4YzAsIDB4ODcsIDB4ZTMsIDB4MTgsIDB4ZDMsIDB4MmMsIDB4ODMsIDB4ZGUsIDB4NDEsIDB4ZTQsCisJMHgwOSwgMHg5YywgMHhlMywgMHg3YiwgMHhhNywgMHhlYywgMHgxYywgMHhkYSwgMHhjYiwgMHg1YSwgMHhiYywgMHgwMCwKKwkweGRiLCAweDE2LCAweDRkLCAweDdhLCAweDUwLCAweGYyLCAweDdkLCAweDJjLCAweGNiLCAweDY1LCAweDEwLCAweDcyLAorCTB4NjIsIDB4YmMsIDB4NzMsIDB4OTAsIDB4MTMsIDB4ZjMsIDB4NjgsIDB4MzgsIDB4NWUsIDB4NmMsIDB4MzIsIDB4OGYsCisJMHgwOCwgMHhmOCwgMHg2OCwgMHhiMCwgMHgyNywgMHhkOSwgMHhjZiwgMHhmMywgMHhjNSwgMHgxNSwgMHgwYiwgMHhmMywKKwkweDdlLCAweGFjLCAweDcyLCAweDJlLCAweDY2LCAweDFiLCAweGRjLCAweDg2LCAweGVkLCAweGFjLCAweDhjLCAweDYzLAorCTB4MmUsIDB4YjcsIDB4MWYsIDB4YzYsIDB4YmUsIDB4N2QsIDB4YjksIDB4MWEsIDB4NzUsIDB4ZTQsIDB4OWUsIDB4ODYsCisJMHhkZCwgMHg4YSwgMHhmOSwgMHgwMSwgMHhjNCwgMHg2OCwgMHgwMSwgMHhiOSwgMHhhMCwgMHhlNywgMHg3NSwgMHhlNCwKKwkweGJmLCAweDAwLCAweDdhLCAweDk4LCAweDBlLCAweGU4LCAweGY1LCAweDJjLCAweGYzLCAweDk1LCAweGZlLCAweDQwLAorCTB4ZTQsIDB4NWMsIDB4MmQsIDB4ZGYsIDB4Y2UsIDB4NmIsIDB4MzgsIDB4OWUsIDB4ZjMsIDB4ZjksIDB4ODgsIDB4MjMsCisJMHg4ZCwgMHgzZCwgMHg4OCwgMHhhNSwgMHhmZSwgMHhkOSwgMHhkMCwgMHhiMSwgMHg3MSwgMHgyYSwgMHgzNCwgMHgzZSwKKwkweDhiLCAweDljLCAweDkzLCAweDZkLCAweDY3LCAweDliLCAweDYwLCAweDlmLCAweDY3LCAweDFhLCAweDA5LCAweGIxLAorCTB4NjYsIDB4OGQsIDB4MmEsIDB4MGQsIDB4MzksIDB4NmMsIDB4YmYsIDB4OGEsIDB4YjYsIDB4MTIsIDB4YjYsIDB4ZDcsCisJMHhkMSwgMHhlZSwgMHgwZSwgMHhkYiwgMHhkNywgMHhkMCwgMHg1NiwgMHhjMywgMHhmNiwgMHhjZiwgMHhkMCwgMHg0ZSwKKwkweDg2LCAweGVkLCAweDlmLCAweGEzLCAweDlkLCAweDBhLCAweGRiLCAweDM3LCAweGQxLCAweDRlLCAweDg3LCAweGVkLAorCTB4NWIsIDB4NjgsIDB4NmIsIDB4NjEsIDB4ZmIsIDB4M2QsIDB4YjQsIDB4MTMsIDB4YjAsIDB4NzMsIDB4MDMsIDB4ZWYsCisJMHgzNywgMHg1MCwgMHgyYiwgMHg2NiwgMHhmMSwgMHhmYywgMHg1NywgMHhlMCwgMHgzNiwgMHgwOCwgMHhkZSwgMHg2NCwKKwkweGMxLCAweDhmLCAweDVlLCAweDhjLCAweGU1LCAweGQwLCAweDg3LCAweDFjLCAweGIxLCAweDkxLCAweGM3LCAweGQzLAorCTB4YzEsIDB4MTgsIDB4OTUsIDB4NjEsIDB4N2IsIDB4MTgsIDB4MWYsIDB4MmYsIDB4MTYsIDB4MWEsIDB4MjYsIDB4OWUsCisJMHg2YywgMHgwZiwgMHhiYSwgMHg0YSwgMHhjMiwgMHg2NSwgMHhkOCwgMHhiOSwgMHhlZiwgMHg2MywgMHg3MiwgMHhiNiwKKwkweDM0LCAweDA5LCAweGRiLCAweDllLCAweGEwLCAweDdmLCAweDc0LCAweGY3LCAweGQzLCAweDZiLCAweGVlLCAweDM4LAorCTB4ZTIsIDB4NDYsIDB4MTEsIDB4NzEsIDB4YzMsIDB4NDIsIDB4ZGMsIDB4MzAsIDB4MTEsIDB4MzcsIDB4ODYsIDB4MTEsCisJMHgzNywgMHhmMiwgMHg4OCwgMHgxYiwgMHgzOSwgMHhjNCwgMHgwZCwgMHhhMiwgMHgzMywgMHg3ZSwgMHg4YywgMHg0YSwKKwkweDJhLCAweGE4LCAweDUxLCAweDE1LCAweGNiLCAweDJkLCAweDgyLCAweGJmLCAweDEzLCAweDkwLCAweGNkLCAweDI0LAorCTB4NzgsIDB4N2QsIDB4MzgsIDB4M2UsIDB4ZDIsIDB4Y2MsIDB4YzMsIDB4OWYsIDB4NjksIDB4ZjAsIDB4MTEsIDB4NjksCisJMHhmOCwgMHhmMiwgMHgxYywgMHg2YSwgMHgxMywgMHhhMiwgMHgyYiwgMHhiMywgMHgxYSwgMHhmYywgMHg4ZiwgMHg0NywKKwkweDQ1LCAweGM0LCAweGZlLCAweDY5LCAweDE1LCAweGI4LCAweDE5LCAweGJiLCAweDdjLCAweDliLCAweDkxLCAweGNjLAorCTB4MmYsIDB4ZjYsIDB4NTAsIDB4ZDcsIDB4MjAsIDB4ZTgsIDB4MzksIDB4OGIsIDB4YmUsIDB4MTQsIDB4ZjYsIDB4NjMsCisJMHhiZSwgMHhkZSwgMHgyYSwgMHhkOSwgMHg4NiwgMHg0NiwgMHgwYiwgMHg2ZSwgMHgxYywgMHhmZSwgMHg5ZiwgMHhkZiwKKwkweGUzLCAweGNjLCAweGUzLCAweDQzLCAweDRmLCAweDE5LCAweDRjLCAweDAzLCAweGVhLCAweDNjLCAweDIzLCAweGFkLAorCTB4MTQsIDB4MWMsIDB4ODEsIDB4MjQsIDB4OTMsIDB4OWYsIDB4ZWQsIDB4MWMsIDB4ZTIsIDB4Y2YsIDB4OTAsIDB4NDMsCisJMHg3NCwgMHg0MSwgMHgwNiwgMHg1NSwgMHhjNCwgMHgwNSwgMHg5ZCwgMHhmMywgMHgwYiwgMHhlOCwgMHhmMiwgMHgyNywKKwkweGNkLCAweGZmLCAweDFlLCAweGU2LCAweGVmLCAweGM1LCAweGQ5LCAweDNjLCAweDhmLCAweGNmLCAweDM5LCAweDg1LAorCTB4ZmEsIDB4YzEsIDB4ZWEsIDB4OTEsIDB4NjgsIDB4M2QsIDB4MjUsIDB4YTEsIDB4OWUsIDB4MjgsIDB4ZDAsIDB4NTksCisJMHgyYSwgMHgwMCwgMHg5ZiwgMHg4MiwgMHhkYiwgMHhiZSwgMHgwNywgMHhiMCwgMHgwZSwgMHgwNSwgMHhmZSwgMHg2YywKKwkweGUyLCAweGQwLCAweGI3LCAweDBkLCAweDBiLCAweGViLCAweDE4LCAweDNmLCAweGQ2LCAweDViLCAweGUwLCAweGJlLAorCTB4YjEsIDB4ZTcsIDB4MDUsIDB4ZWMsIDB4ZjksIDB4NGYsIDB4NDksIDB4ZWEsIDB4OWEsIDB4MGMsIDB4ZmMsIDB4OTEsCisJMHg1ZiwgMHhmMywgMHhjYSwgMHhjMiwgMHg0OCwgMHhmMywgMHgyYywgMHhmOCwgMHhkMywgMHg4NywgMHgxYSwgMHgwNSwKKwkweDdlLCAweGE0LCAweGQ0LCAweDAyLCAweDlmLCAweGRhLCAweGYzLCAweDVmLCAweGMxLCAweDdjLCAweDdlLCAweGY3LAorCTB4ZWYsIDB4MGUsIDB4NGEsIDB4ZDIsIDB4ZWEsIDB4MTIsIDB4ZTYsIDB4NjksIDB4YWMsIDB4M2YsIDB4MjUsIDB4YjksCisJMHhmZiwgMHg4NiwgMHhmNywgMHhhMiwgMHg5MSwgMHhhNywgMHg1ZCwgMHhhYiwgMHhiYywgMHgyZSwgMHg0YiwgMHg3ZCwKKwkweGFiLCAweDM3LCAweGJjLCAweDlhLCAweGEzLCAweGQxLCAweDYyLCAweDkzLCAweGMwLCAweGFiLCAweGY4LCAweDZkLAorCTB4OGIsIDB4ZjQsIDB4MzUsIDB4MTIsIDB4ZjUsIDB4NTksIDB4MGIsIDB4N2EsIDB4NWEsIDB4MWMsIDB4MTIsIDB4YzksCisJMHgxZSwgMHhlYSwgMHg4NCwgMHg4ZiwgMHgzMiwgMHg2OCwgMHgwOSwgMHg3YywgMHhkZiwgMHgzNSwgMHg2MywgMHhkMSwKKwkweDEzLCAweDQzLCAweGVkLCAweDdjLCAweDEwLCAweDUxLCAweDBmLCAweGI4LCAweGVlLCAweDVhLCAweGQ1LCAweDMwLAorCTB4ODcsIDB4NzMsIDB4NzEsIDB4YTYsIDB4NDUsIDB4MDMsIDB4MmYsIDB4ODUsIDB4NjAsIDB4OGQsIDB4MWYsIDB4YjMsCisJMHhiOCwgMHg4ZSwgMHgwNSwgMHhkZiwgMHhkYywgMHhiNSwgMHhkMiwgMHhkNSwgMHgxOSwgMHhkNCwgMHgxYSwgMHg5MCwKKwkweGYzLCAweGFlLCAweDE5LCAweGFlLCAweDg1LCAweGI2LCAweDgxLCAweDJmLCAweDMxLCAweGQ4LCAweDA2LCAweGU3LAorCTB4ZjEsIDB4MDgsIDB4ZjQsIDB4ZjAsIDB4ODcsIDB4MjcsIDB4ZTAsIDB4ZjEsIDB4NmIsIDB4Y2QsIDB4MTMsIDB4ZDAsCisJMHhmYiwgMHgyZSwgMHgyYSwgMHhjYiwgMHgzZSwgMHgxMSwgMHg5ZiwgMHhjMCwgMHhlMywgMHhmZiwgMHhlNCwgMHhiYywKKwkweDBlLCAweGYzLCAweGJmLCAweDRiLCAweGM1LCAweGQ5LCAweDJlLCAweGVjLCAweGI1LCAweDliLCAweGE2LCAweDkzLAorCTB4OGMsIDB4OWIsIDB4M2UsIDB4OGMsIDB4NDEsIDB4MmQsIDB4MDYsIDB4N2UsIDB4YzYsIDB4Y2QsIDB4OGYsIDB4ZTYsCisJMHg3ZCwgMHg2YiwgMHhhNSwgMHgyYiwgMHgzMywgMHg2YiwgMHhhNSwgMHg2YiwgMHhhMCwgMHhiZiwgMHg2ZSwgMHg3MCwKKwkweDhkLCAweDBjLCAweDVkLCAweDZhLCAweDcwLCAweDZkLCAweGNmLCAweDc5LCAweGQxLCAweDE4LCAweDc0LCAweDY0LAorCTB4YmYsIDB4NWYsIDB4MzMsIDB4ZGIsIDB4OGIsIDB4MzksIDB4ZWEsIDB4M2IsIDB4NDcsIDB4YWEsIDB4NjgsIDB4OTYsCisJMHg4NCwgMHgzMSwgMHhlNCwgMHg0NSwgMHgyMywgMHhlZSwgMHg0OSwgMHg3ZiwgMHhlZSwgMHg5OSwgMHgwNiwgMHhkNywKKwkweDJiLCAweDE4LCAweDViLCAweDYxLCAweDVkLCAweDE4LCAweDAzLCAweDNlLCAweDQ5LCAweGJhLCAweGU4LCAweGIyLAorCTB4NGYsIDB4MGEsIDB4ZWMsIDB4NzgsIDB4MGMsIDB4ZmMsIDB4NWEsIDB4ZjAsIDB4ZTksIDB4NGEsIDB4NzEsIDB4MWMsCisJMHg0NywgMHhiZSwgMHhjMSwgMHhmMiwgMHhmOSwgMHgyMSwgMHhjNywgMHg0MSwgMHhhMSwgMHhkMywgMHg2YywgMHhmYiwKKwkweGRiLCAweDg5LCAweDVlLCAweGU2LCAweDU5LCAweGExLCAweDAxLCAweGRmLCAweDNmLCAweDM0LCAweDExLCAweGU2LAorCTB4MWMsIDB4N2YsIDB4OGYsIDB4MzksIDB4OGMsIDB4M2IsIDB4Y2QsIDB4NGEsIDB4MjYsIDB4Y2UsIDB4YzgsIDB4MzMsCisJMHhjZiwgMHgzOCwgMHhhNywgMHhlNCwgMHg3ZCwgMHhjMSwgMHg1YiwgMHhmMCwgMHg3ZCwgMHg1MywgMHg2ZSwgMHhlOSwKKwkweGMzLCAweDc0LCAweDMzLCAweDQ2LCAweDk1LCAweDU5LCAweGYwLCAweDJlLCAweDhmLCAweDI3LCAweDljLCAweDZiLAorCTB4MWQsIDB4N2MsIDB4MDMsIDB4MmQsIDB4ZDUsIDB4MjAsIDB4OWYsIDB4M2QsIDB4YzEsIDB4MzEsIDB4MGQsIDB4ZmUsCisJMHgwNiwgMHgzNiwgMHhjZCwgMHgzMSwgMHg2YiwgMHhlMywgMHhkZSwgMHhjOSwgMHhmNywgMHgyNSwgMHgzMiwgMHgxOSwKKwkweDQxLCAweGNlLCAweDJhLCAweGUyLCAweDJjLCAweDNiLCAweGNmLCAweDdlLCAweDEwLCAweGY4LCAweGI4LCAweGRmLAorCTB4YTUsIDB4ZmEsIDB4MmMsIDB4ZDMsIDB4MDUsIDB4MWIsIDB4NGYsIDB4YjIsIDB4MmUsIDB4ZmUsIDB4N2YsIDB4ZjksCisJMHgzOCwgMHhiYSwgMHg0NSwgMHgzZSwgMHg4ZSwgMHg2ZSwgMHg5OSwgMHg4ZiwgMHgxMiwgMHhmOCwgMHg1OCwgMHhkOSwKKwkweGUwLCAweGEzLCAweDgyLCAweDNkLCAweGY4LCAweDNlLCAweGUxLCAweGFiLCAweDY0LCAweDRkLCAweDNjLCAweDAyLAorCTB4M2YsIDB4MGMsIDB4ZmYsIDB4ZDEsIDB4M2MsIDB4MDUsIDB4OWYsIDB4NzAsIDB4NTIsIDB4YjgsIDB4ZGEsIDB4ZjAsCisJMHg2OCwgMHgxYywgMHhiNSwgMHhiMiwgMHg3NCwgMHhmZiwgMHg2NiwgMHhmYSwgMHgzMywgMHhhMCwgMHhmZiwgMHhjZiwKKwkweDMxLCAweDVlLCAweGE1LCAweDZiLCAweGIzLCAweDk0LCAweDU2LCAweGE4LCAweDdkLCAweDJlLCAweGVkLCAweDkyLAorCTB4ZTksIDB4M2IsIDB4NzQsIDB4NzUsIDB4YjYsIDB4OGIsIDB4YWUsIDB4Y2YsIDB4NjYsIDB4YzAsIDB4ZWIsIDB4MmMsCisJMHhjNSwgMHg3YSwgMHgzMiwgMHhjMywgMHgxNSwgMHgxOCwgMHhmMSwgMHhjZiwgMHg1YSwgMHhiYSwgMHhjNSwgMHhiYSwKKwkweGY4LCAweGZiLCAweGYzLCAweDgyLCAweGY5LCAweDcwLCAweGQwLCAweGU3LCAweGMzLCAweGQ4LCAweDQ3LCAweGY4LAorCTB4MzAsIDB4N2UsIDB4NGYsIDB4M2UsIDB4MWMsIDB4ZmMsIDB4MTgsIDB4MWYsIDB4YzYsIDB4M2YsIDB4YzYsIDB4MDcsCisJMHhlNiwgMHgwMSwgMHhmMywgMHhlMiwgMHhkMSwgMHhkZSwgMHhmMCwgMHhmZiwgMHgxZiwgMHg3ZCwgMHg4MiwgMHg3ZCwKKwkweDdjLCAweDA5LCAweDc0LCAweDIyLCAweGE3LCAweGQ4LCAweDE5LCAweGU0LCAweDUwLCAweDljLCAweDYzLCAweGQ1LAorCTB4MGMsIDB4ZTYsIDB4NTcsIDB4NjAsIDB4YmYsIDB4MzIsIDB4NzIsIDB4ZWEsIDB4MjMsIDB4YTEsIDB4ZmQsIDB4MTYsCisJMHgxYywgMHhlOCwgMHg2NSwgMHgyMywgMHhlNiwgMHhkYiwgMHhhZiwgMHg2NCwgMHhlNiwgMHhlMSwgMHgwMywgMHhhYSwKKwkweGE1LCAweDk2LCAweGMzLCAweGZlLCAweDA3LCAweDZkLCAweDg3LCAweDc5LCAweGRhLCAweDBiLCAweDVhLCAweDEyLAorCTB4NTQsIDB4OTksIDB4NTQsIDB4MTAsIDB4NWYsIDB4ODcsIDB4YTEsIDB4YjcsIDB4NzEsIDB4ZGYsIDB4MDcsIDB4NGEsCisJMHgyNiwgMHhlYiwgMHhlMSwgMHg3ZSwgMHhjYywgMHgzZiwgMHgxYywgMHhlNiwgMHg0NSwgMHg4OCwgMHg3MywgMHgzOCwKKwkweGEzLCAweGQ2LCAweDM4LCAweDBkLCAweGZjLCAweGY4LCAweDljLCAweDZhLCAweGE5LCAweGVjLCAweGYwLCAweDlhLAorCTB4MzQsIDB4NjIsIDB4MjEsIDB4M2YsIDB4MzcsIDB4ZWIsIDB4YjcsIDB4YWYsIDB4ZWYsIDB4ZjcsIDB4ZDIsIDB4NzEsCisJMHhlOCwgMHgyNiwgMHhlYiwgMHhiNCwgMHg4MiwgMHhkYywgMHg3OCwgMHgwMiwgMHhmMSwgMHhjNSwgMHhkNywgMHhkMywKKwkweGVjLCAweDAyLCAweGIxLCAweGRmLCAweDdmLCAweDA2LCAweDc1LCAweGQxLCAweDYxLCAweGZjLCAweDM0LCAweDFhLAorCTB4NzEsIDB4MDMsIDB4OWIsIDB4NWEsIDB4ZjIsIDB4Y2YsIDB4ZmMsIDB4YjAsIDB4NGYsIDB4YWEsIDB4MzksIDB4ZWIsCisJMHhjOCwgMHhkZiwgMHgwZCwgMHhlYywgMHhjYiwgMHhlNywgMHg1NiwgMHhjMSwgMHgxYiwgMHgwOSwgMHhlNywgMHg3MiwKKwkweDVmLCAweDM3LCAweGUyLCAweDAwLCAweGY4LCAweGU0LCAweGZlLCAweDA3LCAweGZhLCAweDk3LCAweGUwLCAweDFmLAorCTB4MzksIDB4MmYsIDB4NjgsIDB4ZTMsIDB4OGUsIDB4MWMsIDB4YzIsIDB4ZTEsIDB4NzgsIDB4OWQsIDB4MDcsIDB4Y2QsCisJMHg5YywgMHg2MywgMHg3MywgMHgyZSwgMHg4MSwgMHhmYywgMHg2MywgMHhlOSwgMHg0ZCwgMHhmNCwgMHgwZCwgMHhkMywKKwkweGU5LCAweGExLCAweDJjLCAweGU0LCAweGMzLCAweDdkLCAweDBmLCAweDg0LCAweDdkLCAweDNjLCAweDhmLCAweDk0LAorCTB4MDcsIDB4NGQsIDB4ZmQsIDB4MDcsIDB4NTUsIDB4ZGYsIDB4YWYsIDB4NDMsIDB4MGYsIDB4NTEsIDB4ZjcsIDB4ZDUsCisJMHg5NiwgMHg5MCwgMHg2MywgMHgwMCwgMHhhNywgMHhjYSwgMHg2YSwgMHgxNiwgMHhiOSwgMHgzYywgMHhkZiwgMHhhYiwKKwkweGU5LCAweDk3LCAweDkxLCAweDA3LCAweDgzLCAweDI3LCAweDBhLCAweGY1LCAweDFhLCAweGE1LCAweGQwLCAweDBmLAorCTB4ZTcsIDB4NDAsIDB4MWYsIDB4ZGYsIDB4M2QsIDB4ZjUsIDB4MjEsIDB4ZjcsIDB4OTEsIDB4YzAsIDB4MDgsIDB4ZDgsCisJMHhlOSwgMHhhYSwgMHg0NCwgMHg3YiwgMHhlNSwgMHgwMSwgMHhiNSwgMHg0NiwgMHhmZiwgMHg4MCwgMHhiOSwgMHgzMiwKKwkweDk1LCAweDU3LCAweDM5LCAweDg3LCAweDkwLCAweGU5LCAweGM4LCAweDJhLCAweGQxLCAweDViLCAweDMzLCAweGVjLAorCTB4OTcsIDB4MTksIDB4ZDgsIDB4MmYsIDB4YjMsIDB4N2YsIDB4N2QsIDB4ZDAsIDB4MWYsIDB4N2IsIDB4NmIsIDB4MDYsCisJMHgzNSwgMHhmOCwgMHhjYywgMHgwMCwgMHhjNywgMHhiMCwgMHg3NSwgMHgxMSwgMHhiYywgMHg0NCwgMHhlZSwgMHhjMywKKwkweGY5LCAweGY5LCAweDVkLCAweGVlLCAweDk4LCAweGRhLCAweGY3LCAweDRiLCAweDBhLCAweDU1LCAweDY2LCAweGY4LAorCTB4NmUsIDB4NDksIDB4YzYsIDB4ZjksIDB4NWMsIDB4NWIsIDB4NmMsIDB4MDMsIDB4N2UsIDB4MDIsIDB4YTEsIDB4ZWUsCisJMHgxMiwgMHgzOCwgMHhhNiwgMHgwOSwgMHhkMCwgMHhhMSwgMHg1ZCwgMHg5MCwgMHgzZCwgMHhmOCwgMHgxZiwgMHhiNiwKKwkweGRiLCAweGZhLCAweGY0LCAweDJmLCAweGQwLCAweDI3LCAweDllLCAweDI3LCAweDZmLCAweGMyLCAweDI1LCAweDMzLAorCTB4NmIsIDB4OGIsIDB4MWMsIDB4MWYsIDB4M2UsIDB4MGQsIDB4ZGIsIDB4YjMsIDB4ZTIsIDB4NjMsIDB4Y2QsIDB4MGUsCisJMHg2YSwgMHhmNSwgMHhiMiwgMHgzZCwgMHhiMCwgMHg1ZSwgMHg1YywgMHg2NiwgMHg5ZCwgMHhjMCwgMHgxOSwgMHhkMCwKKwkweGExLCAweDE5LCAweGFlLCAweGU3LCAweDY1LCAweGNjLCAweGJiLCAweDJmLCAweDljLCAweGM3LCAweGZjLCAweGZlLAorCTB4MWUsIDB4NGQsIDB4MGYsIDB4YTksIDB4NDIsIDB4NTksIDB4MGQsIDB4ZTIsIDB4NDUsIDB4NmQsIDB4YTgsIDB4MDMsCisJMHg2MywgMHgyMiwgMHgxZCwgMHg3YywgMHgzOCwgMHg4ZiwgMHhiNSwgMHg5YywgMHg1MywgMHhjNSwgMHg4NSwgMHhjMCwKKwkweDZmLCAweDcxLCAweDFmLCAweGRmLCAweGQ3LCAweGE5LCAweDU0LCAweGJlLCAweGQ0LCAweDRiLCAweDk1LCAweDRiLAorCTB4MGEsIDB4ZjgsIDB4MDIsIDB4NDQsIDB4MTcsIDB4ODIsIDB4N2QsIDB4ZDgsIDB4MTcsIDB4MWMsIDB4ODcsIDB4ZGMsCisJMHhjNCwgMHg3MywgMHgwYSwgMHhjNSwgMHhjZSwgMHgyMSwgMHg4NywgMHhiYywgMHhkMCwgMHg0NSwgMHgxZCwgMHgxNywKKwkweGZhLCAweDQ5LCAweGJhLCAweGEwLCAweDczLCAweDdlLCAweGE4LCAweDlkLCAweDgxLCAweDBjLCAweDhmLCAweDUwLAorCTB4OWUsIDB4OWUsIDB4NzMsIDB4MDcsIDB4MzksIDB4YzcsIDB4YzMsIDB4MzksIDB4NWMsIDB4ZTcsIDB4MjUsIDB4NDksCisJMHg0MiwgMHhmMiwgMHgyZiwgMHhiZSwgMHg2OCwgMHhkMSwgMHg4YiwgMHg0MywgMHhjMCwgMHgyYiwgMHg4ZiwgMHhmNiwKKwkweDhmLCAweDkxLCAweGM3LCAweGJiLCAweDIzLCAweGY3LCAweDcxLCAweGNjLCAweDk2LCAweGNkLCAweDNlLCAweGM4LAorCTB4MTYsIDB4NzQsIDB4ZTUsIDB4MWUsIDB4ZjIsIDB4ZWYsIDB4NDQsIDB4NWYsIDB4MWMsIDB4NjIsIDB4N2EsIDB4MzQsCisJMHhkMCwgMHg1MiwgMHg4NywgMHhhZSwgMHhmMywgMHgzZCwgMHg1NywgMHgxNywgMHhkOSwgMHgzMiwgMHhlYiwgMHgzMiwKKwkweGYyLCAweGFhLCAweDBiLCAweDc1LCAweDlhLCAweDZhLCAweGU4LCAweDkwLCAweDU5LCAweDFmLCAweGY0LCAweDAyLAorCTB4MzIsIDB4NGIsIDB4NzMsIDB4M2YsIDB4ZWYsIDB4MmQsIDB4ODQsIDB4ZmIsIDB4ZGUsIDB4ZDEsIDB4ZjcsIDB4MTcsCisJMHhlZiwgMHhhZCwgMHhlZiwgMHgzZSwgMHhkNCwgMHg5YiwgMHg4ZiwgMHhjMCwgMHg2NywgMHhhMywgMHgyZSwgMHgzMiwKKwkweGUwLCAweGQzLCAweDU1LCAweGU0LCAweDcyLCAweDA2LCAweGJmLCAweDA3LCAweDc3LCAweDk1LCAweDE1LCAweGU0LAorCTB4ODUsIDB4ZmMsIDB4NWUsIDB4NmIsIDB4ZGQsIDB4Y2QsIDB4NzcsIDB4MDcsIDB4ZjYsIDB4N2QsIDB4MDYsIDB4M2MsCisJMHhiYSwgMHgzMiwgMHhmNywgMHgwMCwgMHg1ZCwgMHg5ZCwgMHg1MywgMHhlOCwgMHg1YSwgMHg0MywgMHhjZiwgMHgxNiwKKwkweGE4LCAweDgzLCAweGFhLCAweGM5LCAweDM0LCAweDVkLCAweDVmLCAweDZhLCAweGU3LCAweDkzLCAweDIyLCAweGY0LAorCTB4YzQsIDB4MjIsIDB4Y2UsIDB4Y2QsIDB4YWYsIDB4MmMsIDB4NTUsIDB4NGIsIDB4MzcsIDB4NzYsIDB4YTcsIDB4NDksCisJMHg3ZSwgMHgwOSwgMHhiNiwgMHhmZCwgMHg5MiwgMHhhZSwgMHhkNSwgMHhjMCwgMHhlNywgMHhiYSwgMHhlMSwgMHhhMiwKKwkweDU2LCAweGUzLCAweDNhLCAweDMyLCAweDA1LCAweGJiLCAweGQzLCAweDUzLCAweDJkLCAweGNhLCAweDkwLCAweGI0LAorCTB4YTAsIDB4ZDAsIDB4YWYsIDB4NjYsIDB4NzQsIDB4OGQsIDB4NzUsIDB4ZWUsIDB4YTIsIDB4ODEsIDB4N2UsIDB4MzcsCisJMHg3ZSwgMHg3YiwgMHgzZCwgMHhkMCwgMHg0MywgMHhmNCwgMHhmNSwgMHhhMywgMHhiZSwgMHhkNSwgMHhiMywgMHg5YSwKKwkweGQ4LCAweDRkLCAweDZmLCAweDQzLCAweDI3LCAweGNhLCAweDdlLCAweGRmLCAweDQ3LCAweGY3LCAweGJjLCAweDFlLAorCTB4ZWUsIDB4NTksIDB4MmQsIDB4NWQsIDB4ZTEsIDB4M2EsIDB4NjgsIDB4ODYsIDB4NzUsIDB4YmUsIDB4MTcsIDB4ZmUsCisJMHgwMywgMHhlZiwgMHg2ZSwgMHgwNywgMHg5NSwgMHgyNywgMHgxMSwgMHhhMywgMHg2NiwgMHgxZSwgMHhhNSwgMHhjMiwKKwkweDkwLCAweDE4LCAweGQwLCAweGVkLCAweGYzLCAweDgyLCAweGZiLCAweGY4LCAweDdlLCAweGIyLCAweDc2LCAweDFmLAorCTB4ZGIsIDB4YjIsIDB4YjgsIDB4MGEsIDB4YmQsIDB4M2EsIDB4YzgsIDB4N2EsIDB4ODAsIDB4ZGMsIDB4MGUsIDB4MzksCisJMHgwNCwgMHhmYiwgMHg0ZSwgMHgwOSwgMHgzOSwgMHg0NCwgMHhjMSwgMHgwZCwgMHg3NCwgMHhhMywgMHg3NSwgMHgzMCwKKwkweDQ5LCAweGM3LCAweDVlLCAweDYyLCAweDE5LCAweDYxLCAweDZjLCAweDQzLCAweGVmLCAweDM2LCAweGVlLCAweGM0LAorCTB4MzEsIDB4NjYsIDB4ZDAsIDB4ZjEsIDB4ZWYsIDB4YjcsIDB4NzMsIDB4NGEsIDB4YjYsIDB4YmQsIDB4MzQsIDB4ZTQsCisJMHhhMSwgMHhhMywgMHhmNiwgMHhlOCwgMHg1MywgMHgyYiwgMHhiZSwgMHg0ZiwgMHg4MSwgMHg0ZSwgMHhhNCwgMHgwMiwKKwkweDE5LCAweGQ0LCAweDMwLCAweDM2LCAweGVkLCAweDRlLCAweGMyLCAweDI3LCAweGM2LCAweGU4LCAweGU2LCAweGE0LAorCTB4MDUsIDB4OWQsIDB4NjgsIDB4MDEsIDB4ODcsIDB4YzMsIDB4NzEsIDB4YmUsIDB4NGIsIDB4YjgsIDB4MzksIDB4NTksCisJMHhjNCwgMHhmYiwgMHg2MSwgMHgzZiwgMHhmNywgMHg5NywgMHhmNiwgMHg0MCwgMHg5NywgMHhkYywgMHgwNywgMHhjMiwKKwkweGZjLCAweDljLCAweGNmLCAweGQzLCAweDg0LCAweGRhLCAweGFjLCAweDJlLCAweDRjLCAweGNmLCAweDdhLCAweDM0LAorCTB4OWEsIDB4ZWIsIDB4NGIsIDB4NWQsIDB4YTUsIDB4NGUsIDB4ZmYsIDB4Y2UsIDB4ZDgsIDB4ZjcsIDB4OWIsIDB4ZmUsCisJMHg5YywgMHg1ZCwgMHgxOCwgMHhmZiwgMHgwMCwgMHgzYSwgMHg4NSwgMHgyNywgMHhlMiwgMHhmNSwgMHhlOSwgMHg2NiwKKwkweDM1LCAweGQ1LCAweDQxLCAweGFjLCAweDUzLCAweDI0LCAweDJjLCAweDE4LCAweGVjLCAweDNiLCAweDA0LCAweGJhLAorCTB4ZWEsIDB4ZGYsIDB4NDcsIDB4MTMsIDB4MTUsIDB4OWQsIDB4ZDcsIDB4OTksIDB4NmUsIDB4NjEsIDB4YjEsIDB4YzUsCisJMHg2YiwgMHg1OCwgMHhjZSwgMHhiYywgMHg0NiwgMHhhMiwgMHg5YiwgMHg0OSwgMHhkOCwgMHhlNSwgMHg5ZSwgMHgzZCwKKwkweDdlLCAweGJkLCAweGY4LCAweGY4LCAweDEwLCAweGUzLCAweGRhLCAweDBkLCAweDk5LCAweDQyLCAweGJmLCAweDUwLAorCTB4ZGIsIDB4OTQsIDB4ODMsIDB4YmUsIDB4NTksIDB4YWUsIDB4NGQsIDB4YTcsIDB4ZjksIDB4ZGUsIDB4MjMsIDB4ZWYsCisJMHhlYiwgMHg1YSwgMHhhOCwgMHgxZiwgMHgxZiwgMHhkNywgMHhiNSwgMHhlNywgMHhiMCwgMHhmNiwgMHgyZCwgMHhmNiwKKwkweGFiLCAweDkwLCAweDc1LCAweGUwLCAweDIzLCAweGJlLCAweDQxLCAweDZmLCAweGNkLCAweDU1LCAweGIzLCAweGZjLAorCTB4Y2QsIDB4YTMsIDB4MzUsIDB4MjEsIDB4YTAsIDB4MTYsIDB4M2YsIDB4NGUsIDB4NmYsIDB4Y2YsIDB4M2QsIDB4NGIsCisJMHhiZiwgMHg5YywgMHg2NSwgMHhkZCwgMHgzMSwgMHg2OCwgMHgxNCwgMHhmYSwgMHg3NCwgMHg5NCwgMHhlNCwgMHhlYywKKwkweDY5LCAweDFhLCAweDUwLCAweGFmLCAweGZiLCAweGI1LCAweDhkLCAweDllLCAweGYzLCAweDZiLCAweDNhLCAweDMzLAorCTB4NGIsIDB4YzUsIDB4YzYsIDB4NDAsIDB4ZWEsIDB4MWEsIDB4ZmEsIDB4Y2EsIDB4OTMsIDB4YmEsIDB4YjYsIDB4OGUsCisJMHhkYywgMHhhMywgMHhkMCwgMHhmYywgMHg4MCwgMHhlZiwgMHg2YywgMHhiMiwgMHgzNSwgMHhkOCwgMHhkZSwgMHgyMiwKKwkweDZhLCAweDliLCAweGI3LCAweDlkLCAweGJiLCAweGU5LCAweDJjLCAweGQ3LCAweDU2LCAweDgxLCAweGZmLCAweDVlLAorCTB4MzMsIDB4NTAsIDB4NjMsIDB4YWMsIDB4YWEsIDB4YTEsIDB4MGUsIDB4MzEsIDB4NzAsIDB4OWQsIDB4YzEsIDB4ZjEsCisJMHgwNywgMHg0ZiwgMHgzNywgMHgwNiwgMHg5ZiwgMHhiMiwgMHgxZiwgMHg3YywgMHg2NywgMHhkOSwgMHg0MiwgMHhmZSwKKwkweGFiLCAweGZjLCAweDhkLCAweDBhLCAweGYyLCAweDVmLCAweDVkLCAweGZlLCAweDQwLCAweGViLCAweDY1LCAweDNmLAorCTB4NmIsIDB4ODAsIDB4OTYsIDB4NDEsIDB4M2EsIDB4MzMsIDB4Y2YsIDB4ZjIsIDB4NDcsIDB4ZWMsIDB4ZjUsIDB4ZWQsCisJMHgzNCwgMHgwZCwgMHhmZSwgMHg3MiwgMHg3YywgMHgxOSwgMHhhNCwgMHg1ZiwgMHgyZCwgMHgxNSwgMHhmZCwgMHhmYiwKKwkweDZiLCAweDFiLCAweGI5LCAweGQ2LCAweDExLCAweDY3LCAweDEyLCAweGY1LCAweGZhLCAweDc3LCAweDQwLCAweDJmLAorCTB4Y2UsIDB4MWUsIDB4ZGEsIDB4OGQsIDB4YTcsIDB4MGEsIDB4OWIsIDB4ZGMsIDB4NzIsIDB4OWUsIDB4MjMsIDB4MDcsCisJMHg3OSwgMHhjZSwgMHhkZSwgMHgyZCwgMHhlNiwgMHgzOSwgMHg3YiwgMHhiNywgMHg5MiwgMHhlNywgMHhjOCwgMHg5ZCwKKwkweGUwLCAweGFiLCAweGQ2LCAweGJiLCAweDY1LCAweGRjLCAweGE0LCAweDAwLCAweGI3LCAweDAzLCAweDViLCAweGM0LAorCTB4ZWQsIDB4YzAsIDB4NTYsIDB4NzAsIDB4OTMsIDB4M2EsIDB4Y2QsIDB4YmYsIDB4NDAsIDB4OGMsIDB4MzUsIDB4MTAsCisJMHhkYiwgMHhlMCwgMHhkNywgMHg4NiwgMHhmYSwgMHg1OSwgMHg3ZiwgMHg4MCwgMHhhMywgMHg4ZiwgMHhlYiwgMHhlZiwKKwkweDhiLCAweGE3LCAweDE4LCAweGUwLCAweGY5LCAweGQ4LCAweDE2LCAweGYxLCAweDdjLCAweDZjLCAweDJiLCAweDc4LAorCTB4OGEsIDB4OWQsIDB4MjYsIDB4ZTMsIDB4MjgsIDB4YzMsIDB4ZDcsIDB4NzAsIDB4NmQsIDB4ODMsIDB4ZDgsIDB4M2MsCisJMHgyNCwgMHg4NywgMHhiYSwgMHgyZSwgMHg4NywgMHg3NSwgMHgwZSwgMHgwMywgMHg3YywgMHg1MCwgMHhhZiwgMHg0NiwKKwkweDRiLCAweDRjLCAweGNiLCAweDQ2LCAweGRmLCAweDlkLCAweDNhLCAweDRiLCAweDMyLCAweDViLCAweGE1LCAweDRhLAorCTB4ODMsIDB4ZWYsIDB4OTUsIDB4ZmIsIDB4YjAsIDB4MGYsIDB4ZjcsIDB4ZjEsIDB4MzcsIDB4MmEsIDB4OGIsIDB4NjQsCisJMHhjNCwgMHhmNywgMHhlNywgMHg5YSwgMHg3NywgMHhhNywgMHhmNSwgMHgyYSwgMHg2OCwgMHg5ZCwgMHgwYSwgMHg2OSwKKwkweGFkLCAweGY4LCAweGI5LCAweGUwLCAweGJlLCAweDRkLCAweGI5LCAweDYwLCAweDQwLCAweGUzLCAweDA4LCAweDY4LAorCTB4MmMsIDB4ODYsIDB4MzQsIDB4M2UsIDB4ZGQsIDB4NjAsIDB4ZGEsIDB4ZjYsIDB4ZjksIDB4YjQsIDB4MmQsIDB4NmQsCisJMHhhMiwgMHg2ZCwgMHhlNCwgMHg5ZSwgMHhmOSwgMHgxZiwgMHhlMywgMHg4MSwgMHg1YSwgMHgxYSwgMHhiOSwgMHhkNywKKwkweDZiLCAweDRkLCAweGQ0LCAweGQyLCAweDRkLCAweGQ0LCAweGQyLCAweGQwLCAweGY3LCAweDU3LCAweDliLCAweGE4LAorCTB4YTUsIDB4OWIsIDB4YTgsIDB4YTUsIDB4NjEsIDB4MDcsIDB4YWYsIDB4YzAsIDB4NTYsIDB4ODIsIDB4M2IsIDB4ZGMsCisJMHgxMiwgMHg3MSwgMHgwZCwgMHhlZSwgMHhkNywgMHhlMywgMHgxNCwgMHhlNCwgMHgzOSwgMHgwNSwgMHhjNCwgMHhmMCwKKwkweGEzLCAweGM4LCAweGYxLCAweGQ4LCAweDZlLCAweDRmLCAweDEzLCAweGM3LCAweDA0LCAweDNkLCAweDg3LCAweDlhLAorCTB4MmYsIDB4NWIsIDB4MjUsIDB4MzMsIDB4NWUsIDB4OWMsIDB4MWYsIDB4NTAsIDB4OTcsIDB4MDIsIDB4ZmIsIDB4ZDYsCisJMHg1YSwgMHhjNCwgMHg3MSwgMHg3MCwgMHgyMCwgMHg4NSwgMHgwOCwgMHhhOSwgMHhiMiwgMHg1ZiwgMHhiMCwgMHg3MywKKwkweDRjLCAweGU3LCAweDc2LCAweGYwLCAweDEwLCAweGJlLCAweGRiLCAweDYwLCAweDFmLCAweGM2LCAweGJlLCAweGI0LAorCTB4NGUsIDB4MGIsIDB4OGQsIDB4ZjAsIDB4MWIsIDB4OWEsIDB4Y2MsIDB4ZmQsIDB4ZmMsIDB4Y2UsIDB4MzEsIDB4YjcsCisJMHhjZiwgMHhmNywgMHg2OSwgMHg3NiwgMHhiNiwgMHgwZiwgMHg3MSwgMHg4MCwgMHhmYiwgMHgxNSwgMHhmOCwgMHgzNSwKKwkweGU4LCAweGNhLCAweDUyLCAweDFiLCAweDE3LCAweDE5LCAweGViLCAweDU1LCAweGFhLCAweGNmLCAweDA3LCAweDMxLAorCTB4N2MsIDB4Y2EsIDB4ZTAsIDB4MzgsIDB4ODcsIDB4ZjgsIDB4YmUsIDB4YzQsIDB4ZGYsIDB4YjAsIDB4MTAsIDB4ZWIsCisJMHg5NywgMHhhZSwgMHg2OCwgMHgzMiwgMHg2YSwgMHhjNywgMHgzYSwgMHg3ZiwgMHhhMywgMHgxZCwgMHhlYywgMHhjMywKKwkweGY5LCAweDFkLCAweGZlLCAweDFkLCAweGVkLCAweDUxLCAweGZmLCAweGFlLCAweGNkLCAweGEwLCAweDIzLCAweGFkLAorCTB4ODAsIDB4MTYsIDB4ZGIsIDB4YzgsIDB4ZDAsIDB4YzgsIDB4MmMsIDB4ZGYsIDB4MzUsIDB4NTEsIDB4OGYsIDB4NjgsCisJMHhjYSwgMHg1NCwgMHg3NSwgMHhmOCwgMHg3ZSwgMHg2OCwgMHhlMywgMHhiYiwgMHg0OSwgMHg3NiwgMHg5MSwgMHhlYiwKKwkweDRmLCAweDIzLCAweGI4LCAweGZmLCAweDNjLCAweGVkLCAweGJjLCAweGM5LCAweGY3LCAweDlmLCAweGUxLCAweDNhLAorCTB4OGQsIDB4ZGUsIDB4NzAsIDB4MzMsIDB4MzQsIDB4OGUsIDB4ZjgsIDB4NWEsIDB4NmMsIDB4NjgsIDB4ZjAsIDB4NmYsCisJMHhiZSwgMHgzYywgMHgzOSwgMHhhNywgMHhhZCwgMHhjNiwgMHg0MiwgMHg5OSwgMHg4ZSwgMHg4NCwgMHgzMiwgMHhhZCwKKwkweDM0LCAweGQ2LCAweDgwLCAweGRmLCAweDBkLCAweGVmLCAweDhmLCAweDQzLCAweDk5LCAweGVlLCAweDNhLCAweDQ3LAorCTB4ZGEsIDB4ZDUsIDB4MWMsIDB4Y2IsIDB4OTUsIDB4NjUsIDB4MTksIDB4YzgsIDB4NzUsIDB4N2MsIDB4YjEsIDB4MjQsCisJMHgxNCwgMHgyMSwgMHhkMywgMHg1MSwgMHg1ZiwgMHhhNiwgMHgzMiwgMHhjNywgMHgwNSwgMHhlYywgMHg5NSwgMHg4MywKKwkweGZjLCAweGQ5LCAweDhmLCAweGUxLCAweGU5LCAweGIwLCAweDhjLCAweGI5LCAweGRlLCAweGUwLCAweDU4LCAweDk4LAorCTB4YTQsIDB4NGIsIDB4OWIsIDB4ZTQsIDB4NWMsIDB4YmMsIDB4YTcsIDB4MGUsIDB4ZTcsIDB4YTksIDB4ZmYsIDB4OWMsCisJMHgxNiwgMHhkZSwgMHg5YiwgMHg2NiwgMHgyMSwgMHhjNywgMHg3NiwgMHgyZSwgMHhmNiwgMHgyMywgMHg4MSwgMHg4YywKKwkweGY2LCAweDlkLCAweDZlLCAweGJiLCAweGVmLCAweGU1LCAweDRkLCAweDdkLCAweGVkLCAweDY3LCAweDliLCAweDU2LAorCTB4YzQsIDB4YjcsIDB4MGQsIDB4ZGUsIDB4ZjMsIDB4MWQsIDB4ZTQsIDB4OWQsIDB4N2UsIDB4YzksIDB4MWYsIDB4NTMsCisJMHgzMSwgMHhkNiwgMHg0YiwgMHg4NSwgMHgyNSwgMHg4MywgMHhhYywgMHgxNiwgMHhjZiwgMHg5MSwgMHg0OSwgMHgzNCwKKwkweGRhLCAweDcyLCAweGVhLCAweGE0LCAweGY1LCAweDMwLCAweGM2LCAweDJkLCAweDM0LCAweDNjLCAweGVmLCAweGE3LAorCTB4ZDAsIDB4OWQsIDB4OGIsIDB4NWMsIDB4NzcsIDB4M2IsIDB4YmYsIDB4ZjEsIDB4ZDYsIDB4OTMsIDB4YzgsIDB4MjEsCisJMHgzNywgMHhjZSwgMHhmYywgMHhlNiwgMHhmZCwgMHhkNCwgMHhhNSwgMHhhYiwgMHg4OCwgMHgwOSwgMHg3NCwgMHhjNiwKKwkweDA5LCAweDUxLCAweDIyLCAweDFlLCAweGU3LCAweDNlLCAweGZlLCAweDA2LCAweGVmLCAweDc5LCAweDE3LCAweDhkLAorCTB4M2IsIDB4NzgsIDB4NzUsIDB4OTksIDB4YzcsIDB4NjksIDB4ZGYsIDB4MzksIDB4ZjYsIDB4ZmYsIDB4M2YsIDB4ZDAsCisJMHgyZSwgMHgxYSwgMHhkNiwgMHg5ZSwgMHgzOCwgMHhmMiwgMHhlNywgMHhlYiwgMHhjNCwgMHhiMSwgMHg0ZiwgMHg0ZSwKKwkweDE0LCAweDliLCAweGJhLCAweDdhLCAweDA5LCAweDZiLCAweDhiLCAweDhlLCAweGMyLCAweGRmLCAweGQ2LCAweGY5LAorCTB4ZmIsIDB4YTgsIDB4NzYsIDB4ODksIDB4ZGEsIDB4ZjcsIDB4NjUsIDB4OTAsIDB4YTcsIDB4YTMsIDB4ZjIsIDB4NzcsCisJMHg1MiwgMHhiNSwgMHg4YSwgMHhkOCwgMHg1MiwgMHg3MCwgMHg5MiwgMHg5OCwgMHhhZiwgMHg2MiwgMHgyZSwgMHhjNywKKwkweDA1LCAweDhmLCAweDE0LCAweGQ4LCAweDUwLCAweGMxLCAweDQ5LCAweDI3LCAweGM2LCAweDlhLCAweDllLCAweGE3LAorCTB4N2MsIDB4NWUsIDB4YTAsIDB4ODcsIDB4MzIsIDB4MjksIDB4MWEsIDB4NzMsIDB4ZjgsIDB4ZmUsIDB4ZjcsIDB4OWIsCisJMHhmNCwgMHgzNiwgMHhlYywgMHhhYywgMHg3OCwgMHg5ZSwgMHg2YiwgMHgyNiwgMHhmNiwgMHgyOSwgMHg3OCwgMHg3NywKKwkweGY4LCAweGJlLCAweGVhLCAweDE0LCAweDNkLCAweGI0LCAweDQ3LCAweGNmLCAweDVlLCAweDIyLCAweGUwLCAweGIzLAorCTB4NDIsIDB4ZmQsIDB4NDgsIDB4NzIsIDB4NTMsIDB4YzcsIDB4ZmQsIDB4ZWYsIDB4NmQsIDB4OGMsIDB4NmIsIDB4OWEsCisJMHg5NiwgMHhjMCwgMHgxYiwgMHhhNywgMHg5OSwgMHhhNCwgMHg5NSwgMHg2NiwgMHg4YSwgMHg1NiwgMHhhMSwgMHgxZiwKKwkweGRiLCAweGNjLCAweDMyLCAweDdkLCAweDAzLCAweDc4LCAweDJiLCAweDY2LCAweDk1LCAweDk0LCAweDhjLCAweGI1LAorCTB4YWYsIDB4MGIsIDB4NzgsIDB4NjcsIDB4MDUsIDB4M2QsIDB4MTUsIDB4MTcsIDB4MTgsIDB4NzcsIDB4NWQsIDB4MmQsCisJMHgwMywgMHg2ZiwgMHhkNiwgMHhkMSwgMHg1MSwgMHhhNywgMHg5YiwgMHg4ZSwgMHg2MSwgMHhlZCwgMHg3ZSwgMHhlNCwKKwkweDFmLCAweGRmLCAweDcyLCAweGE4LCAweDJjLCAweDk5LCAweDI5LCAweDNhLCAweDgwLCAweGYzLCAweDhlLCAweDM2LAorCTB4MzgsIDB4NTcsIDB4M2IsIDB4MDIsIDB4NWYsIDB4MjMsIDB4ZDAsIDB4YTMsIDB4MTksIDB4OGYsIDB4MWUsIDB4ZGQsCisJMHhhMywgMHg1YiwgMHg3MSwgMHgwMSwgMHg3YiwgMHhhZSwgMHhiMCwgMHg5ZSwgMHhhMCwgMHhkZiwgMHgwOSwgMHhjZSwKKwkweDhkLCAweGFkLCAweGY4LCAweGJhLCAweDA4LCAweDdmLCAweGZhLCAweDBjLCAweDY1LCAweGNlLCAweGFkLCAweGU1LAorCTB4YTYsIDB4OTAsIDB4OWYsIDB4OGYsIDB4MzYsIDB4ZTksIDB4OGIsIDB4MzEsIDB4OWMsIDB4ZjcsIDB4MzYsIDB4ZjgsCisJMHgzNCwgMHhlYSwgMHhjOCwgMHgwMiwgMHhmMywgMHhlOSwgMHg1OCwgMHhjMCwgMHgyNywgMHg4YywgMHhmMSwgMHhiNywKKwkweDIzLCAweGNlLCAweGQxLCAweGY4LCAweGVjLCAweDEzLCAweDc0LCAweGI2LCAweGMxLCAweDc3LCAweGRkLCAweDI3LAorCTB4ZTgsIDB4NGEsIDB4ZTMsIDB4MTEsIDB4YmEsIDB4OTgsIDB4ZTMsIDB4NWMsIDB4MDcsIDB4ZmIsIDB4ZjgsIDB4NjcsCisJMHhhMCwgMHhjZiwgMHgzZiwgMHhhMywgMHg5YiwgMHg4ZSwgMHhmYiwgMHg3MiwgMHhmYSwgMHgzZiwgMHhjMywgMHgwNiwKKwkweGQwLCAweDcwLCAweDRjLCAweDU3LCAweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyB1MzIgYm54Ml9UWFBfYjA2RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CiBzdGF0aWMgdTMyIGJueDJfVFhQX2IwNkZ3Um9kYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA1NWQyMzY3Li44MTcxY2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTExOTksOCArMTE5OSw3IEBACiB9CiAKICNkZWZpbmUgQk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVMgXAotCShORVRJRl9GX1NHfE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX05PX0NTVU18TkVUSUZfRl9IV19DU1VNfFwKLQlORVRJRl9GX1RTT3xORVRJRl9GX1VGTykKKwkoTkVUSUZfRl9TRyB8IE5FVElGX0ZfQUxMX0NTVU0gfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVUZPKQogCiAvKiAKICAqIENvbXB1dGUgdGhlIGNvbW1vbiBkZXYtPmZlYXR1cmUgc2V0IGF2YWlsYWJsZSB0byBhbGwgc2xhdmVzLiAgU29tZQpAQCAtMTIxOCw5ICsxMjE3LDcgQEAKIAkJZmVhdHVyZXMgJj0gKHNsYXZlLT5kZXYtPmZlYXR1cmVzICYgQk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVMpOwogCiAJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfU0cpICYmIAotCSAgICAhKGZlYXR1cmVzICYgKE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCQkgIE5FVElGX0ZfTk9fQ1NVTSB8Ci0JCQkgIE5FVElGX0ZfSFdfQ1NVTSkpKQorCSAgICAhKGZlYXR1cmVzICYgTkVUSUZfRl9BTExfQ1NVTSkpCiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwogCiAJLyogCkBAIC00MTkxLDcgKzQxODgsNyBAQAogCSAqLwogCWJvbmRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAotCS8qIGRvbid0IGFjcXVpcmUgYm9uZCBkZXZpY2UncyB4bWl0X2xvY2sgd2hlbiAKKwkvKiBkb24ndCBhY3F1aXJlIGJvbmQgZGV2aWNlJ3MgbmV0aWZfdHhfbG9jayB3aGVuCiAJICogdHJhbnNtaXR0aW5nICovCiAJYm9uZF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IGFjNDhmNzUuLjM5ZjM2YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTQ4NzcsNyArNDg3Nyw3IEBACiAJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0YXRpYyBpbnQgY2FzX3ZlcnNpb25fcHJpbnRlZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjYXNyZWdfYmFzZSwgY2FzcmVnX2xlbjsKKwl1bnNpZ25lZCBsb25nIGNhc3JlZ19sZW47CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgY2FzICpjcDsKIAlpbnQgaSwgZXJyLCBwY2lfdXNpbmdfZGFjOwpAQCAtNDk3Miw3ICs0OTcyLDYgQEAKIAkJcGNpX3VzaW5nX2RhYyA9IDA7CiAJfQogCi0JY2FzcmVnX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJY2FzcmVnX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAKIAljcCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01MDI0LDcgKzUwMjMsNyBAQAogCWNwLT50aW1lcl90aWNrcyA9IDA7CiAKIAkvKiBnaXZlIHVzIGFjY2VzcyB0byBjYXNzaW5pIHJlZ2lzdGVycyAqLwotCWNwLT5yZWdzID0gaW9yZW1hcChjYXNyZWdfYmFzZSwgY2FzcmVnX2xlbik7CisJY3AtPnJlZ3MgPSBwY2lfaW9tYXAocGRldiwgMCwgY2FzcmVnX2xlbik7CiAJaWYgKGNwLT5yZWdzID09IDBVTCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnMsICIKIAkJICAgICAgICJhYm9ydGluZy5cbiIpOwpAQCAtNTEyMyw3ICs1MTIyLDcgQEAKIAkJY2FzX3NodXRkb3duKGNwKTsKIAltdXRleF91bmxvY2soJmNwLT5wbV9tdXRleCk7CiAKLQlpb3VubWFwKGNwLT5yZWdzKTsKKwlwY2lfaW91bm1hcChwZGV2LCBjcC0+cmVncyk7CiAKIAogZXJyX291dF9mcmVlX3JlczoKQEAgLTUxNzEsNyArNTE3MCw3IEBACiAjZW5kaWYKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgY2FzX2luaXRfYmxvY2spLAogCQkJICAgIGNwLT5pbml0X2Jsb2NrLCBjcC0+YmxvY2tfZHZtYSk7Ci0JaW91bm1hcChjcC0+cmVncyk7CisJcGNpX2lvdW5tYXAocGRldiwgY3AtPnJlZ3MpOwogCWZyZWVfbmV0ZGV2KGRldik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggMzFhYzAwMS4uZjM3MTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMjc4MCw2ICsyNzgwLDgwIEBACiAJCURQUklOVEsoUFJPQkUsRVJSLCAiRXJyb3IgZW5hYmxpbmcgd2FrZVxuIik7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBQQ0kgRXJyb3IgUmVjb3ZlcnkgaW5mcmFzdHJ1Y3R1cmUgIC0tLS0tLS0tLS0tLS0tICovCisvKioKKyAqIGUxMDBfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQuCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWVjdGlvbiBzdGF0ZQorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBlMTAwX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBTaW1pbGFyIHRvIGNhbGxpbmcgZTEwMF9kb3duKCksIGJ1dCBhdm9pZHMgYWRwYXRlciBJL08uICovCisJbmV0ZGV2LT5zdG9wKG5ldGRldik7CisKKwkvKiBEZXRhY2g7IHB1dCBuZXRpZiBpbnRvIHN0YXRlIHNpbWlsYXIgdG8gaG90cGx1ZyB1bnBsdWcuICovCisJbmV0aWZfcG9sbF9lbmFibGUobmV0ZGV2KTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKK30KKworLyoqCisgKiBlMTAwX2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2guCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGUxMDBfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlMTAwOiBDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJLyogT25seSBvbmUgZGV2aWNlIHBlciBjYXJkIGNhbiBkbyBhIHJlc2V0ICovCisJaWYgKDAgIT0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworCWUxMDBfaHdfcmVzZXQobmljKTsKKwllMTAwX3BoeV9pbml0KG5pYyk7CisKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworfQorCisvKioKKyAqIGUxMDBfaW9fcmVzdW1lIC0gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb25zCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogUmVzdW1lIG5vcm1hbCBvcGVyYXRpb25zIGFmdGVyIGFuIGVycm9yIHJlY292ZXJ5CisgKiBzZXF1ZW5jZSBoYXMgYmVlbiBjb21wbGV0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGUxMDBfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5pYyAqbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIGFjayBhbnkgcGVuZGluZyB3YWtlIGV2ZW50cywgZGlzYWJsZSBQTUUgKi8KKwlwY2lfZW5hYmxlX3dha2UocGRldiwgMCwgMCk7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQllMTAwX29wZW4obmV0ZGV2KTsKKwkJbW9kX3RpbWVyKCZuaWMtPndhdGNoZG9nLCBqaWZmaWVzKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGUxMDBfZXJyX2hhbmRsZXIgPSB7CisJLmVycm9yX2RldGVjdGVkID0gZTEwMF9pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCA9IGUxMDBfaW9fc2xvdF9yZXNldCwKKwkucmVzdW1lID0gZTEwMF9pb19yZXN1bWUsCit9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMF9kcml2ZXIgPSB7CiAJLm5hbWUgPSAgICAgICAgIERSVl9OQU1FLApAQCAtMjc5MSw2ICsyODY1LDcgQEAKIAkucmVzdW1lID0gICAgICAgZTEwMF9yZXN1bWUsCiAjZW5kaWYKIAkuc2h1dGRvd24gPSAgICAgZTEwMF9zaHV0ZG93biwKKwkuZXJyX2hhbmRsZXIgPSAmZTEwMF9lcnJfaGFuZGxlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGUxMDBfaW5pdF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZTEwMDAvTWFrZWZpbGUKaW5kZXggY2E5Zjg5NS4uNWRlYTJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyAKLSMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDAzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw2ICsyMiw3IEBACiAjIAogIyBDb250YWN0IEluZm9ybWF0aW9uOgogIyBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KKyMgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAjIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCAyODFkZTQxLi4yYmMzNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKQEAgLTIyLDYgKzIyLDcgQEAKICAgCiAgIENvbnRhY3QgSW5mb3JtYXRpb246CiAgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE0LDYgKzExNSw4IEBACiAvKiBTdXBwb3J0ZWQgUnggQnVmZmVyIFNpemVzICovCiAjZGVmaW5lIEUxMDAwX1JYQlVGRkVSXzEyOCAgIDEyOCAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KICNkZWZpbmUgRTEwMDBfUlhCVUZGRVJfMjU2ICAgMjU2ICAgIC8qIFVzZWQgZm9yIHBhY2tldCBzcGxpdCAqLworI2RlZmluZSBFMTAwMF9SWEJVRkZFUl81MTIgICA1MTIKKyNkZWZpbmUgRTEwMDBfUlhCVUZGRVJfMTAyNCAgMTAyNAogI2RlZmluZSBFMTAwMF9SWEJVRkZFUl8yMDQ4ICAyMDQ4CiAjZGVmaW5lIEUxMDAwX1JYQlVGRkVSXzQwOTYgIDQwOTYKICNkZWZpbmUgRTEwMDBfUlhCVUZGRVJfODE5MiAgODE5MgpAQCAtMzM0LDcgKzMzNyw2IEBACiAJYm9vbGVhbl90IGhhdmVfbXNpOwogI2VuZGlmCiAJLyogdG8gbm90IG1lc3MgdXAgY2FjaGUgYWxpZ25tZW50LCBhbHdheXMgYWRkIHRvIHRoZSBib3R0b20gKi8KLQlib29sZWFuX3QgdHhiMmI7CiAjaWZkZWYgTkVUSUZfRl9UU08KIAlib29sZWFuX3QgdHNvX2ZvcmNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggZDFjNzA1Yi4uNmVkN2Y1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtMjIsNiArMjIsNyBAQAogICAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKICAgTGludXggTklDUyA8bGludXgubmljc0BpbnRlbC5jb20+CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04NjQsOCArODY1LDggQEAKIGUxMDAwX2ludHJfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdWludDY0X3QgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLSAJdWludDMyX3QgbWFzaywgaT0wLCBzaGFyZWRfaW50ID0gVFJVRTsKLSAJdWludDMyX3QgaXJxID0gYWRhcHRlci0+cGRldi0+aXJxOworCXVpbnQzMl90IG1hc2ssIGk9MCwgc2hhcmVkX2ludCA9IFRSVUU7CisJdWludDMyX3QgaXJxID0gYWRhcHRlci0+cGRldi0+aXJxOwogCiAJKmRhdGEgPSAwOwogCkBAIC04OTEsMjIgKzg5MiwyMiBAQAogCQkvKiBJbnRlcnJ1cHQgdG8gdGVzdCAqLwogCQltYXNrID0gMSA8PCBpOwogCi0gCQlpZiAoIXNoYXJlZF9pbnQpIHsKLSAJCQkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgdG8gYmUgcmVwb3J0ZWQgaW4KLSAJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIHNhbWUKLSAJCQkgKiBpbnRlcnJ1cHQgYW5kIHNlZSBpZiBvbmUgZ2V0cyBwb3N0ZWQuICBJZgotIAkJCSAqIGFuIGludGVycnVwdCB3YXMgcG9zdGVkIHRvIHRoZSBidXMsIHRoZQotIAkJCSAqIHRlc3QgZmFpbGVkLgotIAkJCSAqLwotIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKLSAJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIG1hc2spOwotIAkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElDUywgbWFzayk7Ci0gCQkJbXNlY19kZWxheSgxMCk7CisJCWlmICghc2hhcmVkX2ludCkgeworCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGJlIHJlcG9ydGVkIGluCisJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIHNhbWUKKwkJCSAqIGludGVycnVwdCBhbmQgc2VlIGlmIG9uZSBnZXRzIHBvc3RlZC4gIElmCisJCQkgKiBhbiBpbnRlcnJ1cHQgd2FzIHBvc3RlZCB0byB0aGUgYnVzLCB0aGUKKwkJCSAqIHRlc3QgZmFpbGVkLgorCQkJICovCisJCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CisJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIG1hc2spOworCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSUNTLCBtYXNrKTsKKwkJCW1zZWNfZGVsYXkoMTApOwogCi0gCQkJaWYgKGFkYXB0ZXItPnRlc3RfaWNyICYgbWFzaykgewotIAkJCQkqZGF0YSA9IDM7Ci0gCQkJCWJyZWFrOwotIAkJCX0KKwkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKKwkJCQkqZGF0YSA9IDM7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCB0byBiZSByZXBvcnRlZCBpbgpAQCAtOTI1LDcgKzkyNiw3IEBACiAJCQlicmVhazsKIAkJfQogCi0gCQlpZiAoIXNoYXJlZF9pbnQpIHsKKwkJaWYgKCFzaGFyZWRfaW50KSB7CiAJCQkvKiBEaXNhYmxlIHRoZSBvdGhlciBpbnRlcnJ1cHRzIHRvIGJlIHJlcG9ydGVkIGluCiAJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIG90aGVyCiAJCQkgKiBpbnRlcnJ1cHRzIGFuZCBzZWUgaWYgYW55IGdldCBwb3N0ZWQuICBJZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKaW5kZXggNTIzYzJjOS4uMzk1OTAzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw2ICsyMiw3IEBACiAgIAogICBDb250YWN0IEluZm9ybWF0aW9uOgogICBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTc2NCw3ICs3NjUsNyBAQAogICAgIH0KIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKLSAgICAgICAgZTEwMDBfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOyAKKyAgICAgICAgZTEwMDBfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOwogICAgIH0KIAogICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CkBAIC04NjAsNyArODYxLDcgQEAKIAogICAgIGlmKGVlcHJvbV9kYXRhICE9IEVFUFJPTV9SRVNFUlZFRF9XT1JEKSB7CiAgICAgICAgIC8qIEFkanVzdCBTRVJERVMgb3V0cHV0IGFtcGxpdHVkZSBvbmx5LiAqLwotICAgICAgICBlZXByb21fZGF0YSAmPSBFRVBST01fU0VSREVTX0FNUExJVFVERV9NQVNLOyAKKyAgICAgICAgZWVwcm9tX2RhdGEgJj0gRUVQUk9NX1NFUkRFU19BTVBMSVRVREVfTUFTSzsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9FWFRfQ1RSTCwgZWVwcm9tX2RhdGEpOwogICAgICAgICBpZihyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC0xMjI3LDcgKzEyMjgsNyBAQAogCiAgICAgaWYgKGh3LT5waHlfcmVzZXRfZGlzYWJsZSkKICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7Ci0gICAgCisKICAgICByZXRfdmFsID0gZTEwMDBfcGh5X3Jlc2V0KGh3KTsKICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICBERUJVR09VVCgiRXJyb3IgUmVzZXR0aW5nIHRoZSBQSFlcbiIpOwpAQCAtMTM2OSw3ICsxMzcwLDcgQEAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cCIpOwogCiAgICAgaWYoIWh3LT5waHlfcmVzZXRfZGlzYWJsZSkgewotICAgICAgICAKKwogICAgICAgICAvKiBFbmFibGUgQ1JTIG9uIFRYIGZvciBoYWxmLWR1cGxleCBvcGVyYXRpb24uICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX01BQ19TUEVDX0NUUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKQEAgLTE1MTgsNyArMTUxOSw3IEBACiAKICAgICBpZihody0+cGh5X3Jlc2V0X2Rpc2FibGUpCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwotICAgIAorCiAgICAgLyogRW5hYmxlIENSUyBvbiBUWC4gVGhpcyBtdXN0IGJlIHNldCBmb3IgaGFsZi1kdXBsZXggb3BlcmF0aW9uLiAqLwogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAgICAgaWYocmV0X3ZhbCkKQEAgLTE2NjQsNyArMTY2NSw3IEBACiAqICAgICAgY29sbGlzaW9uIGRpc3RhbmNlIGluIHRoZSBUcmFuc21pdCBDb250cm9sIFJlZ2lzdGVyLgogKiAgIDIpIFNldCB1cCBmbG93IGNvbnRyb2wgb24gdGhlIE1BQyB0byB0aGF0IGVzdGFibGlzaGVkIHdpdGgKICogICAgICB0aGUgbGluayBwYXJ0bmVyLgotKiAgIDMpIENvbmZpZyBEU1AgdG8gaW1wcm92ZSBHaWdhYml0IGxpbmsgcXVhbGl0eSBmb3Igc29tZSBQSFkgcmV2aXNpb25zLiAgICAKKyogICAzKSBDb25maWcgRFNQIHRvIGltcHJvdmUgR2lnYWJpdCBsaW5rIHF1YWxpdHkgZm9yIHNvbWUgUEhZIHJldmlzaW9ucy4KICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE2NzMsNyArMTY3NCw3IEBACiB7CiAgICAgaW50MzJfdCByZXRfdmFsOwogICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfcG9zdGNvbmZpZyIpOwotICAgIAorCiAgICAgaWYoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KSB7CiAgICAgICAgIGUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CiAgICAgfSBlbHNlIHsKQEAgLTE2OTcsNyArMTY5OCw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCkBAIC0xNzUzLDExICsxNzU0LDExIEBACiAgICAgfQogCiAgICAgaWYoaHctPmF1dG9uZWcpIHsKLSAgICAgICAgLyogU2V0dXAgYXV0b25lZyBhbmQgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQgCi0gICAgICAgICAgKiBhbmQgcGVyZm9ybSBhdXRvbmVnb3RpYXRpb24gKi8gICAKKyAgICAgICAgLyogU2V0dXAgYXV0b25lZyBhbmQgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQKKyAgICAgICAgICAqIGFuZCBwZXJmb3JtIGF1dG9uZWdvdGlhdGlvbiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfY29wcGVyX2xpbmtfYXV0b25lZyhodyk7CiAgICAgICAgIGlmKHJldF92YWwpCi0gICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogUEhZIHdpbGwgYmUgc2V0IHRvIDEwSCwgMTBGLCAxMDBILG9yIDEwMEYKICAgICAgICAgICAqIGRlcGVuZGluZyBvbiB2YWx1ZSBmcm9tIGZvcmNlZF9zcGVlZF9kdXBsZXguICovCkBAIC0xNzg1LDcgKzE3ODYsNyBAQAogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvcHBlcl9saW5rX3Bvc3Rjb25maWcoaHcpOwogICAgICAgICAgICAgaWYocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBERUJVR09VVCgiVmFsaWQgbGluayBlc3RhYmxpc2hlZCEhIVxuIik7CiAgICAgICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKICAgICAgICAgfQpAQCAtMTk4Myw3ICsxOTg0LDcgQEAKIAogICAgIERFQlVHT1VUMSgiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhcbiIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCi0gICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBtaWlfMTAwMHRfY3RybF9yZWcpOyAgICAKKyAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsIG1paV8xMDAwdF9jdHJsX3JlZyk7CiAgICAgaWYocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKQEAgLTIyNzIsNyArMjI3Myw3IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5Iik7CiAKLSAgICAvKiA4MjU0NCBvciBuZXdlciBNQUMsIEF1dG8gU3BlZWQgRGV0ZWN0aW9uIHRha2VzIGNhcmUgb2YgCisgICAgLyogODI1NDQgb3IgbmV3ZXIgTUFDLCBBdXRvIFNwZWVkIERldGVjdGlvbiB0YWtlcyBjYXJlIG9mCiAgICAgKiBNQUMgc3BlZWQvZHVwbGV4IGNvbmZpZ3VyYXRpb24uKi8KICAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KQogICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKQEAgLTIyOTEsOSArMjI5Miw5IEBACiAgICAgaWYocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICBpZihwaHlfZGF0YSAmIE04OEUxMDAwX1BTU1JfRFBMWCkgCisgICAgaWYocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX0RQTFgpCiAgICAgICAgIGN0cmwgfD0gRTEwMDBfQ1RSTF9GRDsKLSAgICBlbHNlIAorICAgIGVsc2UKICAgICAgICAgY3RybCAmPSB+RTEwMDBfQ1RSTF9GRDsKIAogICAgIGUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CkBAIC0yNDkyLDEwICsyNDkzLDEwIEBACiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYoaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX2Z1bGwpIHsKICAgICAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfZnVsbDsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IEZVTEwuXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gRlVMTC5cbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGh3LT5mYyA9IGUxMDAwX2ZjX3J4X3BhdXNlOwotICAgICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBGb3IgcmVjZWl2aW5nIFBBVVNFIGZyYW1lcyBPTkxZLgpAQCAtMjUxMSw3ICsyNTEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogICAgICAgICAgICAgICAgICAgICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfQVNNX0RJUikpIHsKICAgICAgICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY190eF9wYXVzZTsKLSAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworICAgICAgICAgICAgICAgIERFQlVHT1VUKCJGbG93IENvbnRyb2wgPSBUWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogRm9yIHRyYW5zbWl0dGluZyBQQVVTRSBmcmFtZXMgT05MWS4KICAgICAgICAgICAgICAqCkBAIC0yNTI2LDcgKzI1MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAhKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogICAgICAgICAgICAgICAgICAgICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfQVNNX0RJUikpIHsKICAgICAgICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY19yeF9wYXVzZTsKLSAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworICAgICAgICAgICAgICAgIERFQlVHT1VUKCJGbG93IENvbnRyb2wgPSBSWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogUGVyIHRoZSBJRUVFIHNwZWMsIGF0IHRoaXMgcG9pbnQgZmxvdyBjb250cm9sIHNob3VsZCBiZQogICAgICAgICAgICAgICogZGlzYWJsZWQuICBIb3dldmVyLCB3ZSB3YW50IHRvIGNvbnNpZGVyIHRoYXQgd2UgY291bGQKQEAgLTI1NTIsMTAgKzI1NTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgIGh3LT5vcmlnaW5hbF9mYyA9PSBlMTAwMF9mY190eF9wYXVzZSkgfHwKICAgICAgICAgICAgICAgICAgICAgaHctPmZjX3N0cmljdF9pZWVlKSB7CiAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfbm9uZTsKLSAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gTk9ORS5cclxuIik7CisgICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IE5PTkUuXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfcnhfcGF1c2U7Ci0gICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKyAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogTm93IHdlIG5lZWQgdG8gZG8gb25lIGxhc3QgY2hlY2suLi4gIElmIHdlIGF1dG8tCkBAIC0yNTgwLDcgKzI1ODEsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdPVVQoIkNvcHBlciBQSFkgYW5kIEF1dG8gTmVnIGhhcyBub3QgY29tcGxldGVkLlxyXG4iKTsKKyAgICAgICAgICAgIERFQlVHT1VUKCJDb3BwZXIgUEhZIGFuZCBBdXRvIE5lZyBoYXMgbm90IGNvbXBsZXRlZC5cbiIpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwpAQCAtMjc2Myw3ICsyNzY0LDcgQEAKICAgICAgICAgICAgIGh3LT5hdXRvbmVnX2ZhaWxlZCA9IDE7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBERUJVR09VVCgiTk9UIFJYaW5nIC9DLywgZGlzYWJsZSBBdXRvTmVnIGFuZCBmb3JjZSBsaW5rLlxyXG4iKTsKKyAgICAgICAgREVCVUdPVVQoIk5PVCBSWGluZyAvQy8sIGRpc2FibGUgQXV0b05lZyBhbmQgZm9yY2UgbGluay5cbiIpOwogCiAgICAgICAgIC8qIERpc2FibGUgYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciAqLwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIChody0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOwpAQCAtMjc4OCw3ICsyNzg5LDcgQEAKICAgICBlbHNlIGlmKCgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKICAgICAgICAgICAgICAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpKSAmJgogICAgICAgICAgICAgKGN0cmwgJiBFMTAwMF9DVFJMX1NMVSkgJiYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpKSB7Ci0gICAgICAgIERFQlVHT1VUKCJSWGluZyAvQy8sIGVuYWJsZSBBdXRvTmVnIGFuZCBzdG9wIGZvcmNpbmcgbGluay5cclxuIik7CisgICAgICAgIERFQlVHT1VUKCJSWGluZyAvQy8sIGVuYWJsZSBBdXRvTmVnIGFuZCBzdG9wIGZvcmNpbmcgbGluay5cbiIpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIGh3LT50eGN3KTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCAoY3RybCAmIH5FMTAwMF9DVFJMX1NMVSkpOwogCkBAIC0yODUxLDEzICsyODUyLDEzIEBACiAKICAgICAgICAgaWYoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0ZEKSB7CiAgICAgICAgICAgICAqZHVwbGV4ID0gRlVMTF9EVVBMRVg7Ci0gICAgICAgICAgICBERUJVR09VVCgiRnVsbCBEdXBsZXhcclxuIik7CisgICAgICAgICAgICBERUJVR09VVCgiRnVsbCBEdXBsZXhcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgKmR1cGxleCA9IEhBTEZfRFVQTEVYOwotICAgICAgICAgICAgREVCVUdPVVQoIiBIYWxmIER1cGxleFxyXG4iKTsKKyAgICAgICAgICAgIERFQlVHT1VUKCIgSGFsZiBEdXBsZXhcbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdPVVQoIjEwMDAgTWJzLCBGdWxsIER1cGxleFxyXG4iKTsKKyAgICAgICAgREVCVUdPVVQoIjEwMDAgTWJzLCBGdWxsIER1cGxleFxuIik7CiAgICAgICAgICpzcGVlZCA9IFNQRUVEXzEwMDA7CiAgICAgICAgICpkdXBsZXggPSBGVUxMX0RVUExFWDsKICAgICB9CkBAIC0yODgzLDcgKzI4ODQsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmIAorICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSAmJgogICAgICAgICAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpKSB7CiAgICAgICAgIGlmICgqc3BlZWQgPT0gU1BFRURfMTAwMCkKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChodyk7CkBAIC0zMTU5LDcgKzMxNjAsNyBAQAogICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgc3dmdykpCiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKIAotICAgIGlmKChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fCAKKyAgICBpZigoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgfHwKICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikgJiYKICAgICAgICAocmVnX2FkZHIgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCkBAIC0zMjk4LDcgKzMyOTksNyBAQAogICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgc3dmdykpCiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKIAotICAgIGlmKChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fCAKKyAgICBpZigoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgfHwKICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikgJiYKICAgICAgICAocmVnX2FkZHIgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCkBAIC0zNDk2LDIyICszNDk3LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgLyogUmVhZCB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGFzc2VydCB0aGUgRTEwMDBfQ1RSTF9QSFlfUlNUCiAgICAgICAgICAqIGJpdC4gVGhlbiwgdGFrZSBpdCBvdXQgb2YgcmVzZXQuCi0gICAgICAgICAqIEZvciBwcmUtZTEwMDBfODI1NzEgaGFyZHdhcmUsIHdlIGRlbGF5IGZvciAxMG1zIGJldHdlZW4gdGhlIGFzc2VydCAKKyAgICAgICAgICogRm9yIHByZS1lMTAwMF84MjU3MSBoYXJkd2FyZSwgd2UgZGVsYXkgZm9yIDEwbXMgYmV0d2VlbiB0aGUgYXNzZXJ0CiAgICAgICAgICAqIGFuZCBkZWFzc2VydC4gIEZvciBlMTAwMF84MjU3MSBoYXJkd2FyZSBhbmQgbGF0ZXIsIHdlIGluc3RlYWQgZGVsYXkKICAgICAgICAgICogZm9yIDUwdXMgYmV0d2VlbiBhbmQgMTBtcyBhZnRlciB0aGUgZGVhc3NlcnRpb24uCiAgICAgICAgICAqLwogICAgICAgICBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwgfCBFMTAwMF9DVFJMX1BIWV9SU1QpOwogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaHctPm1hY190eXBlIDwgZTEwMDBfODI1NzEpIAorCisgICAgICAgIGlmIChody0+bWFjX3R5cGUgPCBlMTAwMF84MjU3MSkKICAgICAgICAgICAgIG1zZWNfZGVsYXkoMTApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1ZGVsYXkoMTAwKTsKLSAgICAgICAgCisKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOwotICAgICAgICAKKwogICAgICAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKQogICAgICAgICAgICAgbXNlY19kZWxheSgxMCk7CiAgICAgICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKQEAgLTM4MTUsNyArMzgxNiw3IEBACiAgICAgLyogQ2hlY2sgcG9sYXJpdHkgc3RhdHVzICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX2NoZWNrX3BvbGFyaXR5KGh3LCAmcG9sYXJpdHkpOwogICAgIGlmKHJldF92YWwpCi0gICAgICAgIHJldHVybiByZXRfdmFsOyAKKyAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgcGh5X2luZm8tPmNhYmxlX3BvbGFyaXR5ID0gcG9sYXJpdHk7CiAKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSk7CkBAIC00NTQwLDE0ICs0NTQxLDE0IEBACiAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRVJELCBlZXJkKTsKICAgICAgICAgZXJyb3IgPSBlMTAwMF9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBFMTAwMF9FRVBST01fUE9MTF9SRUFEKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZXJyb3IpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRhdGFbaV0gPSAoRTEwMDBfUkVBRF9SRUcoaHcsIEVFUkQpID4+IEUxMDAwX0VFUFJPTV9SV19SRUdfREFUQSk7Ci0gICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBlcnJvcjsKIH0KIApAQCAtNDU3MywyNCArNDU3NCwyNCBAQAogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9TV0ZXX1NZTkM7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgewotICAgICAgICByZWdpc3Rlcl92YWx1ZSA9IChkYXRhW2ldIDw8IEUxMDAwX0VFUFJPTV9SV19SRUdfREFUQSkgfCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKG9mZnNldCtpKSA8PCBFMTAwMF9FRVBST01fUldfQUREUl9TSElGVCkgfCAKKyAgICAgICAgcmVnaXN0ZXJfdmFsdWUgPSAoZGF0YVtpXSA8PCBFMTAwMF9FRVBST01fUldfUkVHX0RBVEEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKG9mZnNldCtpKSA8PCBFMTAwMF9FRVBST01fUldfQUREUl9TSElGVCkgfAogICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0VFUFJPTV9SV19SRUdfU1RBUlQ7CiAKICAgICAgICAgZXJyb3IgPSBlMTAwMF9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBFMTAwMF9FRVBST01fUE9MTF9XUklURSk7CiAgICAgICAgIGlmKGVycm9yKSB7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVXUiwgcmVnaXN0ZXJfdmFsdWUpOwotICAgICAgICAKKwogICAgICAgICBlcnJvciA9IGUxMDAwX3BvbGxfZWVyZF9lZXdyX2RvbmUoaHcsIEUxMDAwX0VFUFJPTV9QT0xMX1dSSVRFKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZXJyb3IpIHsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9ICAgICAgIAorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIEUxMDAwX1NXRldfRUVQX1NNKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC00NjEwLDcgKzQ2MTEsNyBAQAogICAgIGZvcihpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspIHsKICAgICAgICAgaWYoZWVyZCA9PSBFMTAwMF9FRVBST01fUE9MTF9SRUFEKQogICAgICAgICAgICAgcmVnID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFUkQpOwotICAgICAgICBlbHNlIAorICAgICAgICBlbHNlCiAgICAgICAgICAgICByZWcgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVXUik7CiAKICAgICAgICAgaWYocmVnICYgRTEwMDBfRUVQUk9NX1JXX1JFR19ET05FKSB7CkBAIC01MTM1LDcgKzUxMzYsNyBAQAogICAgIHVpbnQzMl90IGk7CiAgICAgdWludDMyX3QgbnVtX3Jhcl9lbnRyeTsKICAgICB1aW50MzJfdCBudW1fbXRhX2VudHJ5OwotICAgIAorCiAgICAgREVCVUdGVU5DKCJlMTAwMF9tY19hZGRyX2xpc3RfdXBkYXRlIik7CiAKICAgICAvKiBTZXQgdGhlIG5ldyBudW1iZXIgb2YgTUMgYWRkcmVzc2VzIHRoYXQgd2UgYXJlIGJlaW5nIHJlcXVlc3RlZCB0byB1c2UuICovCkBAIC02MjQwLDcgKzYyNDEsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBEb3duc2hpZnQgb2N1cmVkLgogICoKICAqIHJldHVybnM6IC0gRTEwMDBfRVJSX1hYWAotICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTIAorICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTCiAgKgogICogRm9yIHBoeSdzIG9sZGVyIHRoZW4gSUdQLCB0aGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBEb3duc2hpZnQgYml0IGluIHRoZSBQaHkKICAqIFNwZWNpZmljIFN0YXR1cyByZWdpc3Rlci4gIEZvciBJR1AgcGh5J3MsIGl0IHJlYWRzIHRoZSBEb3duZ3JhZGUgYml0IGluIHRoZQpAQCAtNjI1NSw3ICs2MjU2LDcgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY2hlY2tfZG93bnNoaWZ0Iik7CiAKLSAgICBpZihody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fCAKKyAgICBpZihody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fAogICAgICAgICBody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8yKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX0xJTktfSEVBTFRILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7CkBAIC02Njg0LDggKzY2ODUsOCBAQAogCiAKICAgICB9IGVsc2UgewotIAotICAgICAgICAgICAgcGh5X2RhdGEgfD0gSUdQMDJFMTAwMF9QTV9EMF9MUExVOyAgIAorCisgICAgICAgICAgICBwaHlfZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QwX0xQTFU7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgcGh5X2RhdGEpOwogICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC02Nzc3LDcgKzY3NzgsNyBAQAogZTEwMDBfaG9zdF9pZl9yZWFkX2Nvb2tpZShzdHJ1Y3QgZTEwMDBfaHcgKiBodywgdWludDhfdCAqYnVmZmVyKQogewogICAgIHVpbnQ4X3QgaTsKLSAgICB1aW50MzJfdCBvZmZzZXQgPSBFMTAwMF9NTkdfREhDUF9DT09LSUVfT0ZGU0VUOyAKKyAgICB1aW50MzJfdCBvZmZzZXQgPSBFMTAwMF9NTkdfREhDUF9DT09LSUVfT0ZGU0VUOwogICAgIHVpbnQ4X3QgbGVuZ3RoID0gRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX0xFTkdUSDsKIAogICAgIGxlbmd0aCA9IChsZW5ndGggPj4gMik7CkBAIC02Nzk2LDcgKzY3OTcsNyBAQAogICogYW5kIGFsc28gY2hlY2tzIHdoZXRoZXIgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgY29tcGxldGVkLgogICogSXQgYnVzeSB3YWl0cyBpbiBjYXNlIG9mIHByZXZpb3VzIGNvbW1hbmQgaXMgbm90IGNvbXBsZXRlZC4KICAqCi0gKiByZXR1cm5zOiAtIEUxMDAwX0VSUl9IT1NUX0lOVEVSRkFDRV9DT01NQU5EIGluIGNhc2UgaWYgaXMgbm90IHJlYWR5IG9yIAorICogcmV0dXJuczogLSBFMTAwMF9FUlJfSE9TVF9JTlRFUkZBQ0VfQ09NTUFORCBpbiBjYXNlIGlmIGlzIG5vdCByZWFkeSBvcgogICogICAgICAgICAgICB0aW1lb3V0CiAgKiAgICAgICAgICAtIEUxMDAwX1NVQ0NFU1MgZm9yIHN1Y2Nlc3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY4MjAsNyArNjgyMSw3IEBACiAgICAgICAgIG1zZWNfZGVsYXlfaXJxKDEpOwogICAgIH0KIAotICAgIGlmIChpID09IEUxMDAwX01OR19ESENQX0NPTU1BTkRfVElNRU9VVCkgeyAKKyAgICBpZiAoaSA9PSBFMTAwMF9NTkdfREhDUF9DT01NQU5EX1RJTUVPVVQpIHsKICAgICAgICAgREVCVUdPVVQoIlByZXZpb3VzIGNvbW1hbmQgdGltZW91dCBmYWlsZWQgLlxuIik7CiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0hPU1RfSU5URVJGQUNFX0NPTU1BTkQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggMTUwZTQ1ZS4uNDY3YzllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw2ICsyMiw3IEBACiAgIAogICBDb250YWN0IEluZm9ybWF0aW9uOgogICBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM3NCw3ICszNzUsNyBAQAogfTsKICNlbmRpZgogCi1pbnQzMl90IGUxMDAwX21uZ193cml0ZV9kaGNwX2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgdWludDhfdCAqYnVmZmVyLCAKK2ludDMyX3QgZTEwMDBfbW5nX3dyaXRlX2RoY3BfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50OF90ICpidWZmZXIsCiAJCQkJCQkJdWludDE2X3QgbGVuZ3RoKTsKIGJvb2xlYW5fdCBlMTAwMF9jaGVja19tbmdfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGJvb2xlYW5fdCBlMTAwMF9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKQEAgLTE4MDEsNyArMTgwMiw3IEBACiAgKiAgICAgICB2YWx1ZTIgPSBbMC4uNjQ1MTJdLCAgICBkZWZhdWx0PTQwOTYKICAqICAgICAgIHZhbHVlMyA9IFswLi42NDUxMl0sICAgIGRlZmF1bHQ9MAogICovCi0gICAgCisKICNkZWZpbmUgRTEwMDBfUFNSQ1RMX0JTSVpFMF9NQVNLICAgMHgwMDAwMDA3RgogI2RlZmluZSBFMTAwMF9QU1JDVExfQlNJWkUxX01BU0sgICAweDAwMDAzRjAwCiAjZGVmaW5lIEUxMDAwX1BTUkNUTF9CU0laRTJfTUFTSyAgIDB4MDAzRjAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA5N2U3MWE0Li5hMzczY2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw1MSArMjIsMTMgQEAKICAgCiAgIENvbnRhY3QgSW5mb3JtYXRpb246CiAgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZTEwMDAuaCIKIAotLyogQ2hhbmdlIExvZwotICogNy4wLjMzICAgICAgMy1GZWItMjAwNgotICogICBvIEFkZGVkIGFub3RoZXIgZml4IGZvciB0aGUgcGFzcyBmYWxzZSBjYXJyaWVyIGJpdAotICogNy4wLjMyICAgICAgMjQtSmFuLTIwMDYKLSAqICAgbyBOZWVkIHRvIHJlYnVpbGQgd2l0aCBub2V3IHZlcnNpb24gbnVtYmVyIGZvciB0aGUgcGFzcyBmYWxzZSBjYXJyaWVyIAotICogICAgIGZpeCBpbiBlMTAwMF9ody5jCi0gKiA3LjAuMzAgICAgICAxOC1KYW4tMjAwNgotICogICBvIGZpeHVwIGZvciB0c28gd29ya2Fyb3VuZCB0byBkaXNhYmxlIGl0IGZvciBwY2kteAotICogICBvIGZpeCBtZW0gbGVhayBvbiA4MjU0MgotICogICBvIGZpeGVzIGZvciAxMCBNYi9zIGNvbm5lY3Rpb25zIGFuZCBpbmNvcnJlY3Qgc3RhdHMKLSAqIDcuMC4yOCAgICAgIDAxLzA2LzIwMDYKLSAqICAgbyBoYXJkd2FyZSB3b3JrYXJvdW5kIHRvIG9ubHkgc2V0ICJzcGVlZCBtb2RlIiBiaXQgZm9yIDFHIGxpbmsuCi0gKiA3LjAuMjYgICAgICAxMi8yMy8yMDA1Ci0gKiAgIG8gd2FrZSBvbiBsYW4gc3VwcG9ydCBtb2RpZmllZCBmb3IgZGV2aWNlIElEIDEwQjUKLSAqICAgbyBmaXggZGhjcCArIHZsYW4gaXNzdWUgbm90IG1ha2luZyBpdCB0byB0aGUgaUFNVCBmaXJtd2FyZQotICogNy4wLjI0ICAgICAgMTIvOS8yMDA1Ci0gKiAgIG8gTmV3IGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBHaWdhYml0IE5JQyBlbWJlZGRlZCBpbiB0aGUgc291dGggYnJpZGdlCi0gKiAgIG8gRml4ZXMgdG8gdGhlIHJlY3ljbGluZyBsb2dpYyAoc2tiLT50YWlsKSBmcm9tIElCTSBMVEMKLSAqIDYuMy45CTEyLzE2LzIwMDUKLSAqICAgbyBpbmNvcnBvcmF0ZSBmaXggZm9yIHJlY3ljbGVkIHNrYnMgZnJvbSBJQk0gTFRDCi0gKiA2LjMuNwkxMS8xOC8yMDA1Ci0gKiAgIG8gSG9ub3IgZWVwcm9tIHNldHRpbmcgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBXYWtlIE9uIExhbgotICogNi4zLjUgCTExLzE3LzIwMDUKLSAqICAgbyBGaXggbWVtb3J5IGxlYWsgaW4gcnggcmluZyBoYW5kbGluZyBmb3IgUENJIEV4cHJlc3MgYWRhcHRlcnMKLSAqIDYuMy40CTExLzgvMDUKLSAqICAgbyBQYXRjaCBmcm9tIEplc3BlciBKdWhsIHRvIHJlbW92ZSByZWR1bmRhbnQgTlVMTCBjaGVja3MgZm9yIGtmcmVlCi0gKiA2LjMuMgk5LzIwLzA1Ci0gKiAgIG8gUmVuZGVyIGxvZ2ljIHRoYXQgc2V0cy9yZXNldHMgRFJWX0xPQUQgYXMgaW5saW5lIGZ1bmN0aW9ucyB0byAKLSAqICAgICBhdm9pZCBjb2RlIHJlcGxpY2F0aW9uLiBJZiBmL3cgaXMgQU1UIHRoZW4gc2V0IERSVl9MT0FEIG9ubHkgd2hlbgotICogICAgIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG9wZW4uCi0gKiAgIG8gSGFuZGxlIERSVl9MT0FEIHNldC9yZXNldCBpbiBjYXNlcyB3aGVyZSBBTVQgdXNlcyBWTEFOcy4KLSAqICAgbyBBZGp1c3QgUEJBIHBhcnRpb25pbmcgZm9yIEp1bWJvIGZyYW1lcyB1c2luZyBNVFUgc2l6ZSBhbmQgbm90Ci0gKiAgICAgcnhfYnVmZmVyX2xlbgotICogNi4zLjEJOS8xOS8wNQotICogICBvIFVzZSBhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciBpbiBUeCBIdW5nIERldGVjdCBsb2dpYyAKLSAqICAgICAgKGUxMDAwX2NsZWFuX3R4X2lycSkKLSAqICAgbyBTdXBwb3J0IGZvciA4MDg2OjEwQjUgZGV2aWNlIChRdWFkIFBvcnQpCi0gKi8KLQogY2hhciBlMTAwMF9kcml2ZXJfbmFtZVtdID0gImUxMDAwIjsKIHN0YXRpYyBjaGFyIGUxMDAwX2RyaXZlcl9zdHJpbmdbXSA9ICJJbnRlbChSKSBQUk8vMTAwMCBOZXR3b3JrIERyaXZlciI7CiAjaWZuZGVmIENPTkZJR19FMTAwMF9OQVBJCkBAIC03NCw5ICszNiw5IEBACiAjZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKICNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4wLjMzLWsyIkRSSVZFUk5BUEkKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjcuMC4zOC1rNCJEUklWRVJOQVBJCiBjaGFyIGUxMDAwX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKLXN0YXRpYyBjaGFyIGUxMDAwX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA1IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY2hhciBlMTAwMF9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiAvKiBlMTAwMF9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQogICoKQEAgLTIwOCw4ICsxNzAsOCBAQAogc3RhdGljIHZvaWQgZTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGUxMDAwX3Jlc2V0X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlMTAwMF9zbWFydHNwZWVkKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbmxpbmUgaW50IGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgaW50IGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgdm9pZCBlMTAwMF92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApOwogc3RhdGljIHZvaWQgZTEwMDBfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCk7CkBAIC0yMjcsNiArMTg5LDE2IEBACiBzdGF0aWMgdm9pZCBlMTAwMF9uZXRwb2xsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKICNlbmRpZgogCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBlMTAwMF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKyAgICAgICAgICAgICAgICAgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpOworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgZTEwMDBfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgdm9pZCBlMTAwMF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBlMTAwMF9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBlMTAwMF9pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCA9IGUxMDAwX2lvX3Nsb3RfcmVzZXQsCisJLnJlc3VtZSA9IGUxMDAwX2lvX3Jlc3VtZSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlMTAwMF9kcml2ZXIgPSB7CiAJLm5hbWUgICAgID0gZTEwMDBfZHJpdmVyX25hbWUsCkBAIC0yMzgsNyArMjEwLDggQEAKIAkuc3VzcGVuZCAgPSBlMTAwMF9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGUxMDAwX3Jlc3VtZSwKICNlbmRpZgotCS5zaHV0ZG93biA9IGUxMDAwX3NodXRkb3duCisJLnNodXRkb3duID0gZTEwMDBfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJmUxMDAwX2Vycl9oYW5kbGVyCiB9OwogCiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOwpAQCAtMjkzLDcgKzI2Niw3IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfaXJxX2Rpc2FibGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7CkBAIC0zMDcsNyArMjgwLDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBlMTAwMF9pcnFfZW5hYmxlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChsaWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgmYWRhcHRlci0+aXJxX3NlbSkpKSB7CkBAIC0zNDgsMTAgKzMyMSwxMCBAQAogICogRm9yIEFTRiBhbmQgUGFzcyBUaHJvdWdoIHZlcnNpb25zIG9mIGYvdyB0aGlzIG1lYW5zIHRoYXQgdGhlCiAgKiBkcml2ZXIgaXMgbm8gbG9uZ2VyIGxvYWRlZC4gRm9yIEFNVCB2ZXJzaW9uIChvbmx5IHdpdGggODI1NzMpIGkKICAqIG9mIHRoZSBmL3cgdGhpcyBtZWFucyB0aGF0IHRoZSBuZXRvd3JrIGkvZiBpcyBjbG9zZWQuCi0gKiAKKyAqCiAgKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAKK3N0YXRpYyB2b2lkCiBlMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdWludDMyX3QgY3RybF9leHQ7CkBAIC0zNjEsNiArMzM0LDcgQEAKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgorCWNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAJCWN0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMX0VYVCk7CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkxfRVhULAogCQkJCWN0cmxfZXh0ICYgfkUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEKTsKQEAgLTM3OSwxMyArMzUzLDEzIEBACiAgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKICAqIGUxMDAwX2dldF9od19jb250cm9sIHNldHMge0NUUkxfRVhUfEZXU019OkRSVl9MT0FEIGJpdC4KLSAqIEZvciBBU0YgYW5kIFBhc3MgVGhyb3VnaCB2ZXJzaW9ucyBvZiBmL3cgdGhpcyBtZWFucyB0aGF0IAotICogdGhlIGRyaXZlciBpcyBsb2FkZWQuIEZvciBBTVQgdmVyc2lvbiAob25seSB3aXRoIDgyNTczKSAKKyAqIEZvciBBU0YgYW5kIFBhc3MgVGhyb3VnaCB2ZXJzaW9ucyBvZiBmL3cgdGhpcyBtZWFucyB0aGF0CisgKiB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gRm9yIEFNVCB2ZXJzaW9uIChvbmx5IHdpdGggODI1NzMpCiAgKiBvZiB0aGUgZi93IHRoaXMgbWVhbnMgdGhhdCB0aGUgbmV0b3dyayBpL2YgaXMgb3Blbi4KLSAqIAorICoKICAqKi8KIAotc3RhdGljIGlubGluZSB2b2lkIAorc3RhdGljIHZvaWQKIGUxMDAwX2dldF9od19jb250cm9sKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXVpbnQzMl90IGN0cmxfZXh0OwpAQCAtMzk0LDYgKzM2OCw3IEBACiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzE6CiAJY2FzZSBlMTAwMF84MjU3MjoKKwljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogCQljdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTF9FWFQpOwogCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMX0VYVCwKIAkJCQljdHJsX2V4dCB8IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEKTsKQEAgLTQyMSw3ICszOTYsNyBAQAogCQl1aW50MTZfdCBtaWlfcmVnOwogCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgJm1paV9yZWcpOwogCQlpZiAobWlpX3JlZyAmIE1JSV9DUl9QT1dFUl9ET1dOKQotCQkJZTEwMDBfcGh5X3Jlc2V0KCZhZGFwdGVyLT5odyk7CisJCQllMTAwMF9waHlfaHdfcmVzZXQoJmFkYXB0ZXItPmh3KTsKIAl9CiAKIAllMTAwMF9zZXRfbXVsdGkobmV0ZGV2KTsKQEAgLTcxMSw4ICs2ODYsOCBAQAogCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiUEhZIHJlc2V0IGlzIGJsb2NrZWQgZHVlIHRvIFNPTC9JREVSIHNlc3Npb24uXG4iKTsKIAogCS8qIGlmIGtzcDMsIGluZGljYXRlIGlmIGl0J3MgcG9ydCBhIGJlaW5nIHNldHVwICovCi0JaWYgKHBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzICYmIAotCQkJZTEwMDBfa3NwM19wb3J0X2EgPT0gMCkgCisJaWYgKHBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzICYmCisJCQllMTAwMF9rc3AzX3BvcnRfYSA9PSAwKQogCQlhZGFwdGVyLT5rc3AzX3BvcnRfYSA9IDE7CiAJZTEwMDBfa3NwM19wb3J0X2ErKzsKIAkvKiBSZXNldCBmb3IgbXVsdGlwbGUgS1AzIGFkYXB0ZXJzICovCkBAIC03NDAsOSArNzE1LDkgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLSAJLyogaGFyZF9zdGFydF94bWl0IGlzIHNhZmUgYWdhaW5zdCBwYXJhbGxlbCBsb2NraW5nICovCi0gCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOyAKLSAKKwkvKiBoYXJkX3N0YXJ0X3htaXQgaXMgc2FmZSBhZ2FpbnN0IHBhcmFsbGVsIGxvY2tpbmcgKi8KKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKwogCWFkYXB0ZXItPmVuX21uZ19wdCA9IGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odyk7CiAKIAkvKiBiZWZvcmUgcmVhZGluZyB0aGUgRUVQUk9NLCByZXNldCB0aGUgY29udHJvbGxlciB0bwpAQCAtOTcyLDggKzk0Nyw4IEBACiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmh3LT5wY2lfY21kX3dvcmQpOwogCi0JYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzIwNDg7Ci0JYWRhcHRlci0+cnhfcHNfYnNpemUwID0gRTEwMDBfUlhCVUZGRVJfMjU2OworCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkU7CisJYWRhcHRlci0+cnhfcHNfYnNpemUwID0gRTEwMDBfUlhCVUZGRVJfMTI4OwogCWh3LT5tYXhfZnJhbWVfc2l6ZSA9IG5ldGRldi0+bXR1ICsKIAkJCSAgICAgRU5FVF9IRUFERVJfU0laRSArIEVUSEVSTkVUX0ZDU19TSVpFOwogCWh3LT5taW5fZnJhbWVfc2l6ZSA9IE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRTsKQEAgLTExODEsNyArMTE1Niw3IEBACiAgKiBAc3RhcnQ6IGFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIG1lbW9yeQogICogQGxlbjogbGVuZ3RoIG9mIG1lbW9yeQogICoqLwotc3RhdGljIGlubGluZSBib29sZWFuX3QKK3N0YXRpYyBib29sZWFuX3QKIGUxMDAwX2NoZWNrXzY0a19ib3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJICAgICAgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKQogewpAQCAtMTU5OSwxNCArMTU3NCwyMSBAQAogCQlyY3RsIHw9IEUxMDAwX1JDVExfTFBFOwogCiAJLyogU2V0dXAgYnVmZmVyIHNpemVzICovCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTcxKSB7Ci0JCS8qIFdlIGNhbiBub3cgc3BlY2lmeSBidWZmZXJzIGluIDFLIGluY3JlbWVudHMuCi0JCSAqIEJTSVpFIGFuZCBCU0VYIGFyZSBpZ25vcmVkIGluIHRoaXMgY2FzZS4gKi8KLQkJcmN0bCB8PSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuIDw8IDB4MTE7Ci0JfSBlbHNlIHsKLQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9TWl80MDk2OwotCQlyY3RsIHw9IEUxMDAwX1JDVExfQlNFWDsgCi0JCXN3aXRjaCAoYWRhcHRlci0+cnhfYnVmZmVyX2xlbikgeworCXJjdGwgJj0gfkUxMDAwX1JDVExfU1pfNDA5NjsKKwlyY3RsIHw9IEUxMDAwX1JDVExfQlNFWDsKKwlzd2l0Y2ggKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pIHsKKwkJY2FzZSBFMTAwMF9SWEJVRkZFUl8yNTY6CisJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMjU2OworCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9CU0VYOworCQkJYnJlYWs7CisJCWNhc2UgRTEwMDBfUlhCVUZGRVJfNTEyOgorCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzUxMjsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfQlNFWDsKKwkJCWJyZWFrOworCQljYXNlIEUxMDAwX1JYQlVGRkVSXzEwMjQ6CisJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMTAyNDsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfQlNFWDsKKwkJCWJyZWFrOwogCQljYXNlIEUxMDAwX1JYQlVGRkVSXzIwNDg6CiAJCWRlZmF1bHQ6CiAJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMjA0ODsKQEAgLTE2MjEsNyArMTYwMyw2IEBACiAJCWNhc2UgRTEwMDBfUlhCVUZGRVJfMTYzODQ6CiAJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMTYzODQ7CiAJCQlicmVhazsKLQkJfQogCX0KIAogI2lmbmRlZiBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQKQEAgLTE3MTUsNyArMTY5Niw3IEBACiAJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkgewogCQljdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMX0VYVCk7CiAJCS8qIFJlc2V0IGRlbGF5IHRpbWVycyBhZnRlciBldmVyeSBpbnRlcnJ1cHQgKi8KLQkJY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfQ0FOQzsKKwkJY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfSU5UX1RJTUVSX0NMUjsKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCQkvKiBBdXRvLU1hc2sgaW50ZXJydXB0cyB1cG9uIElDUiByZWFkLiAqLwogCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJMX0VYVF9JQU1FOwpAQCAtMTgwNyw3ICsxNzg4LDcgQEAKIAkJZTEwMDBfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBlMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewpAQCAtMjI0Nyw2ICsyMjI4LDcgQEAKIAogCWlmIChsaW5rKSB7CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlib29sZWFuX3QgdHhiMmIgPSAxOwogCQkJZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoJmFkYXB0ZXItPmh3LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfc3BlZWQsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+bGlua19kdXBsZXgpOwpAQCAtMjI2MCwyMyArMjI0MiwyMiBAQAogCQkJICogYW5kIGFkanVzdCB0aGUgdGltZW91dCBmYWN0b3IgKi8KIAkJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gYWRhcHRlci0+dHhfcXVldWVfbGVuOwogCQkJYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgPSAxOwotCQkJYWRhcHRlci0+dHhiMmIgPSAxOwogCQkJc3dpdGNoIChhZGFwdGVyLT5saW5rX3NwZWVkKSB7CiAJCQljYXNlIFNQRUVEXzEwOgotCQkJCWFkYXB0ZXItPnR4YjJiID0gMDsKKwkJCQl0eGIyYiA9IDA7CiAJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDsKIAkJCQlhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciA9IDg7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNQRUVEXzEwMDoKLQkJCQlhZGFwdGVyLT50eGIyYiA9IDA7CisJCQkJdHhiMmIgPSAwOwogCQkJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gMTAwOwogCQkJCS8qIG1heWJlIGFkZCBzb21lIHRpbWVvdXQgZmFjdG9yID8gKi8KIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSB8fCAKKwkJCWlmICgoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzEgfHwKIAkJCSAgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzIpICYmCi0JCQkgICAgYWRhcHRlci0+dHhiMmIgPT0gMCkgeworCQkJICAgIHR4YjJiID09IDApIHsKICNkZWZpbmUgU1BFRURfTU9ERV9CSVQgKDEgPDwgMjEpCiAJCQkJdWludDMyX3QgdGFyYzA7CiAJCQkJdGFyYzAgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRBUkMwKTsKQEAgLTI0MDAsNyArMjM4MSw3IEBACiAjZGVmaW5lIEUxMDAwX1RYX0ZMQUdTX1ZMQU5fTUFTSwkweGZmZmYwMDAwCiAjZGVmaW5lIEUxMDAwX1RYX0ZMQUdTX1ZMQU5fU0hJRlQJMTYKIAotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIGUxMDAwX3RzbyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcsCiAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI0MjIsNyArMjQwMyw3IEBACiAKIAkJaGRyX2xlbiA9ICgoc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSkgKyAoc2tiLT5oLnRoLT5kb2ZmIDw8IDIpKTsKIAkJbXNzID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKLQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfSVApKSB7CisJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgewogCQkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSAwOwogCQkJc2tiLT5uaC5pcGgtPmNoZWNrID0gMDsKIAkJCXNrYi0+aC50aC0+Y2hlY2sgPQpAQCAtMjQ4MCw3ICsyNDYxLDcgQEAKIAlyZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbGVhbl90CitzdGF0aWMgYm9vbGVhbl90CiBlMTAwMF90eF9jc3VtKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZywKICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI1MTYsNyArMjQ5Nyw3IEBACiAjZGVmaW5lIEUxMDAwX01BWF9UWERfUFdSCTEyCiAjZGVmaW5lIEUxMDAwX01BWF9EQVRBX1BFUl9UWEQJKDE8PEUxMDAwX01BWF9UWERfUFdSKQogCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogZTEwMDBfdHhfbWFwKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZywKICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZmlyc3QsIHVuc2lnbmVkIGludCBtYXhfcGVyX3R4ZCwKICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJfZnJhZ3MsIHVuc2lnbmVkIGludCBtc3MpCkBAIC0yNjI1LDcgKzI2MDYsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfdHhfcXVldWUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nLAogICAgICAgICAgICAgICAgaW50IHR4X2ZsYWdzLCBpbnQgY291bnQpCiB7CkBAIC0yNjg5LDcgKzI2NzAsNyBAQAogI2RlZmluZSBFMTAwMF9GSUZPX0hEUgkJCTB4MTAKICNkZWZpbmUgRTEwMDBfODI1NDdfUEFEX0xFTgkJMHgzRTAKIAotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1aW50MzJfdCBmaWZvX3NwYWNlID0gYWRhcHRlci0+dHhfZmlmb19zaXplIC0gYWRhcHRlci0+dHhfZmlmb19oZWFkOwpAQCAtMjcxNiw3ICsyNjk3LDcgQEAKIH0KIAogI2RlZmluZSBNSU5JTVVNX0RIQ1BfUEFDS0VUX1NJWkUgMjgyCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAgJmFkYXB0ZXItPmh3OwpAQCAtMjc2NCw3ICsyNzQ1LDcgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSAwOwogCXVuc2lnbmVkIGludCBtc3MgPSAwOwogCWludCBjb3VudCA9IDA7Ci0gCWludCB0c287CisJaW50IHRzbzsKIAl1bnNpZ25lZCBpbnQgZjsKIAlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKIApAQCAtMjc3Nyw3ICsyNzU4LDcgQEAKIAogI2lmZGVmIE5FVElGX0ZfVFNPCiAJbXNzID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKLQkvKiBUaGUgY29udHJvbGxlciBkb2VzIGEgc2ltcGxlIGNhbGN1bGF0aW9uIHRvIAorCS8qIFRoZSBjb250cm9sbGVyIGRvZXMgYSBzaW1wbGUgY2FsY3VsYXRpb24gdG8KIAkgKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gdGhlIEZJRk8gYmVmb3JlCiAJICogaW5pdGlhdGluZyB0aGUgRE1BIGZvciBlYWNoIGJ1ZmZlci4gIFRoZSBjYWxjIGlzOgogCSAqIDQgPSBjZWlsKGJ1ZmZlciBsZW4vbXNzKS4gIFRvIG1ha2Ugc3VyZSB3ZSBkb24ndApAQCAtMjgwMCw3ICsyNzgxLDcgQEAKIAkJCWNhc2UgZTEwMDBfODI1NzM6CiAJCQkJcHVsbF9zaXplID0gbWluKCh1bnNpZ25lZCBpbnQpNCwgc2tiLT5kYXRhX2xlbik7CiAJCQkJaWYgKCFfX3Bza2JfcHVsbF90YWlsKHNrYiwgcHVsbF9zaXplKSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgCisJCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCQkJIl9fcHNrYl9wdWxsX3RhaWwgZmFpbGVkLlxuIik7CiAJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0yOTAxLDcgKzI4ODIsNyBAQAogCS8qIE9sZCBtZXRob2Qgd2FzIHRvIGFzc3VtZSBJUHY0IHBhY2tldCBieSBkZWZhdWx0IGlmIFRTTyB3YXMgZW5hYmxlZC4KIAkgKiA4MjU3MSBoYXJkd2FyZSBzdXBwb3J0cyBUU08gY2FwYWJpbGl0aWVzIGZvciBJUHY2IGFzIHdlbGwuLi4KIAkgKiBubyBsb25nZXIgYXNzdW1lLCB3ZSBtdXN0LiAqLwotCWlmIChsaWtlbHkoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUCkpKQorCWlmIChsaWtlbHkoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpKQogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19JUFY0OwogCiAJZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCkBAIC0yOTgyLDggKzI5NjMsNyBAQAogCiAJLyogQWRhcHRlci1zcGVjaWZpYyBtYXggZnJhbWUgc2l6ZSBsaW1pdHMuICovCiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewotCWNhc2UgZTEwMDBfODI1NDJfcmV2Ml8wOgotCWNhc2UgZTEwMDBfODI1NDJfcmV2Ml8xOgorCWNhc2UgZTEwMDBfdW5kZWZpbmVkIC4uLiBlMTAwMF84MjU0Ml9yZXYyXzE6CiAJCWlmIChtYXhfZnJhbWUgPiBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHsKIAkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkp1bWJvIEZyYW1lcyBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMwMTcsMjcgKzI5OTcsMzIgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogTk9URTogZGV2X2FsbG9jX3NrYiByZXNlcnZlcyAxNiBieXRlcywgYW5kIHR5cGljYWxseSBORVRfSVBfQUxJR04KKwkgKiBtZWFucyB3ZSByZXNlcnZlIDIgbW9yZSwgdGhpcyBwdXNoZXMgdXMgdG8gYWxsb2NhdGUgZnJvbSB0aGUgbmV4dAorCSAqIGxhcmdlciBzbGFiIHNpemUKKwkgKiBpLmUuIFJYQlVGRkVSXzIwNDggLS0+IHNpemUtNDA5NiBzbGFiICovCiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPiBlMTAwMF84MjU0N19yZXZfMikgewotCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gbWF4X2ZyYW1lOwotCQlFMTAwMF9ST1VORFVQKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4sIDEwMjQpOwotCX0gZWxzZSB7Ci0JCWlmKHVubGlrZWx5KChhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTQzKSAmJgotCQkgICAobWF4X2ZyYW1lID4gTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFKSkpIHsKLQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkp1bWJvIEZyYW1lcyBub3Qgc3VwcG9ydGVkICIKLQkJCQkJICAgICJvbiA4MjU0MlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCWlmKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8yMDQ4KQotCQkJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8yMDQ4OwotCQkJZWxzZSBpZihtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfNDA5NikKLQkJCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfNDA5NjsKLQkJCWVsc2UgaWYobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzgxOTIpCi0JCQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzgxOTI7Ci0JCQllbHNlIGlmKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8xNjM4NCkKLQkJCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfMTYzODQ7Ci0JCX0KLQl9CisJaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8yNTYpCisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8yNTY7CisJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzUxMikKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzUxMjsKKwllbHNlIGlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfMTAyNCkKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzEwMjQ7CisJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzIwNDgpCisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8yMDQ4OworCWVsc2UgaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl80MDk2KQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfNDA5NjsKKwllbHNlIGlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfODE5MikKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzgxOTI7CisJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzE2Mzg0KQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfMTYzODQ7CisKKwkvKiBhZGp1c3QgYWxsb2NhdGlvbiBpZiBMUEUgcHJvdGVjdHMgdXMsIGFuZCB3ZSBhcmVuJ3QgdXNpbmcgU0JQICovCisjZGVmaW5lIE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFIDE1MjIKKwlpZiAoIWFkYXB0ZXItPmh3LnRiaV9jb21wYXRpYmlsaXR5X29uICYmCisJICAgICgobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgfHwKKwkgICAgIChtYXhfZnJhbWUgPT0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpKSkKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFOwogCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCkBAIC0zMDYwLDExICszMDQ1LDIxIEBACiBlMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50MTZfdCBwaHlfdG1wOwogCiAjZGVmaW5lIFBIWV9JRExFX0VSUk9SX0NPVU5UX01BU0sgMHgwMEZGCiAKKwkvKgorCSAqIFByZXZlbnQgc3RhdHMgdXBkYXRlIHdoaWxlIGFkYXB0ZXIgaXMgYmVpbmcgcmVzZXQsIG9yIGlmIHRoZSBwY2kKKwkgKiBjb25uZWN0aW9uIGlzIGRvd24uCisJICovCisJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gMCkKKwkJcmV0dXJuOworCWlmIChwZGV2LT5lcnJvcl9zdGF0ZSAmJiBwZGV2LT5lcnJvcl9zdGF0ZSAhPSBwY2lfY2hhbm5lbF9pb19ub3JtYWwpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAKIAkvKiB0aGVzZSBjb3VudGVycyBhcmUgbW9kaWZpZWQgZnJvbSBlMTAwMF9hZGp1c3RfdGJpX3N0YXRzLApAQCAtMzE2NSw3ICszMTYwLDYgQEAKIAkJYWRhcHRlci0+c3RhdHMuY3JjZXJycyArIGFkYXB0ZXItPnN0YXRzLmFsZ25lcnJjICsKIAkJYWRhcHRlci0+c3RhdHMucnVjICsgYWRhcHRlci0+c3RhdHMucm9jICsKIAkJYWRhcHRlci0+c3RhdHMuY2V4dGVycjsKLQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZHJvcHBlZCA9IDA7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5ydWMgKwogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+c3RhdHMucm9jOwogCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMuY3JjZXJyczsKQEAgLTMzOTEsMTMgKzMzODUsMTUgQEAKIAogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCi0Jc3Bpbl9sb2NrKCZ0eF9yaW5nLT50eF9sb2NrKTsKLQorI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAzMgogCWlmICh1bmxpa2VseShjbGVhbmVkICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJgotCQkgICAgbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwotCi0Jc3Bpbl91bmxvY2soJnR4X3JpbmctPnR4X2xvY2spOworCSAgICAgICAgICAgICBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpKSB7CisJCXNwaW5fbG9jaygmdHhfcmluZy0+dHhfbG9jayk7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgJiYKKwkJICAgIChFMTAwMF9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBUWF9XQUtFX1RIUkVTSE9MRCkpCisJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCXNwaW5fdW5sb2NrKCZ0eF9yaW5nLT50eF9sb2NrKTsKKwl9CiAKIAlpZiAoYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcpIHsKIAkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQpAQCAtMzQ0NSw3ICszNDQxLDcgQEAKICAqIEBza19idWZmOiAgICAgc29ja2V0IGJ1ZmZlciB3aXRoIHJlY2VpdmVkIGRhdGEKICAqKi8KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfcnhfY2hlY2tzdW0oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCSAgdWludDMyX3Qgc3RhdHVzX2VyciwgdWludDMyX3QgY3N1bSwKIAkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzU2Nyw3ICszNTYzLDggQEAKIAkJCQkgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKIAkJCQlsZW5ndGgtLTsKIAkJCX0gZWxzZSB7Ci0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCQkvKiByZWN5Y2xlICovCisJCQkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKIAkJCQlnb3RvIG5leHRfZGVzYzsKIAkJCX0KIAkJfQpAQCAtMzY3NSw2ICszNjcyLDcgQEAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKIAlyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19QUygqcnhfcmluZywgaSk7CiAJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLm1pZGRsZS5zdGF0dXNfZXJyb3IpOworCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCiAJd2hpbGUgKHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9ERCkgewogCQlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKQEAgLTM3MzMsOSArMzczMSw5IEBACiAKIAkJLyogcGFnZSBhbGxvYy9wdXQgdGFrZXMgdG9vIGxvbmcgYW5kIGVmZmVjdHMgc21hbGwgcGFja2V0CiAJCSAqIHRocm91Z2hwdXQsIHNvIHVuc3BsaXQgc21hbGwgcGFja2V0cyBhbmQgc2F2ZSB0aGUgYWxsb2MvcHV0Ki8KLQkJaWYgKGwxICYmICgobGVuZ3RoICsgbDEpIDwgRTEwMDBfQ0JfTEVOR1RIKSkgeworCQlpZiAobDEgJiYgKChsZW5ndGggKyBsMSkgPD0gYWRhcHRlci0+cnhfcHNfYnNpemUwKSkgewogCQkJdTggKnZhZGRyOwotCQkJLyogdGhlcmUgaXMgbm8gZG9jdW1lbnRhdGlvbiBhYm91dCBob3cgdG8gY2FsbCAKKwkJCS8qIHRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gYWJvdXQgaG93IHRvIGNhbGwKIAkJCSAqIGttYXBfYXRvbWljLCBzbyB3ZSBjYW4ndCBob2xkIHRoZSBtYXBwaW5nCiAJCQkgKiB2ZXJ5IGxvbmcgKi8KIAkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwZGV2LApAQCAtNDE1NSw3ICs0MTUzLDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCQlpZiAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQkJc3dpdGNoIChkYXRhLT5yZWdfbnVtKSB7CiAJCQljYXNlIFBIWV9DVFJMOgogCQkJCWlmIChtaWlfcmVnICYgTUlJX0NSX1BPV0VSX0RPV04pCkBAIC00NTE0LDIxICs0NTEyLDEzIEBACiAKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VDLCBFMTAwMF9XVUNfUE1FX0VOKTsKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VGQywgd3VmYyk7Ci0JCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOwotCQlpZiAocmV0dmFsKQotCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRXJyb3IgZW5hYmxpbmcgRDMgd2FrZVxuIik7Ci0JCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKLQkJaWYgKHJldHZhbCkKLQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIGNvbGQgd2FrZVxuIik7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CiAJfSBlbHNlIHsKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VDLCAwKTsKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VGQywgMCk7Ci0JCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwotCQlpZiAocmV0dmFsKQotCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRXJyb3IgZW5hYmxpbmcgRDMgd2FrZVxuIik7Ci0JCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKLQkJaWYgKHJldHZhbCkKLQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIGNvbGQgd2FrZVxuIik7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CiAJfQogCiAJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTQwICYmCkBAIC00NTM3LDEzICs0NTI3LDggQEAKIAkJaWYgKG1hbmMgJiBFMTAwMF9NQU5DX1NNQlVTX0VOKSB7CiAJCQltYW5jIHw9IEUxMDAwX01BTkNfQVJQX0VOOwogCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgTUFOQywgbWFuYyk7Ci0JCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKLQkJCWlmIChyZXR2YWwpCi0JCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRXJyb3IgZW5hYmxpbmcgRDMgd2FrZVxuIik7Ci0JCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7Ci0JCQlpZiAocmV0dmFsKQotCQkJCURQUklOVEsoUFJPQkUsIEVSUiwKLQkJCQkgICAgICAgICJFcnJvciBlbmFibGluZyBEMyBjb2xkIHdha2VcbiIpOworCQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CiAJCX0KIAl9CiAKQEAgLTQ1NTMsOSArNDUzOCw3IEBACiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKLQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQlpZiAocmV0dmFsKQotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFcnJvciBpbiBzZXR0aW5nIHBvd2VyIHN0YXRlXG4iKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU2NiwyMiArNDU0OSwxNSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCByZXR2YWw7CiAJdWludDMyX3QgbWFuYywgcmV0X3ZhbDsKIAotCXJldHZhbCA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlpZiAocmV0dmFsKQotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFcnJvciBpbiBzZXR0aW5nIHBvd2VyIHN0YXRlXG4iKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJZTEwMDBfcGNpX3Jlc3RvcmVfc3RhdGUoYWRhcHRlcik7CiAJcmV0X3ZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JcmV0dmFsID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7Ci0JaWYgKHJldHZhbCkKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRXJyb3IgZW5hYmxpbmcgRDMgd2FrZVxuIik7Ci0JcmV0dmFsID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwotCWlmIChyZXR2YWwpCi0JCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIGNvbGQgd2FrZVxuIik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7CiAJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VTLCB+MCk7CkBAIC00NjM1LDQgKzQ2MTEsMTAxIEBACiB9CiAjZW5kaWYKIAorLyoqCisgKiBlMTAwMF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZAorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVlY3Rpb24gc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgZTEwMDBfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWUxMDAwX2Rvd24oYWRhcHRlcik7CisKKwkvKiBSZXF1ZXN0IGEgc2xvdCBzbG90IHJlc2V0LiAqLworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCisvKioKKyAqIGUxMDAwX2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuIEltcGxlbWVudGF0aW9uCisgKiByZXNlbWJsZXMgdGhlIGZpcnN0LWhhbGYgb2YgdGhlIGUxMDAwX3Jlc3VtZSByb3V0aW5lLgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBlMTAwMF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlMTAwMDogQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXBjaV9lbmFibGVfd2FrZShwZGV2LCAzLCAwKTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgNCwgMCk7IC8qIDQgPT0gRDMgY29sZCAqLworCisJLyogUGVyZm9ybSBjYXJkIHJlc2V0IG9ubHkgb24gb25lIGluc3RhbmNlIG9mIHRoZSBjYXJkICovCisJaWYgKFBDSV9GVU5DIChwZGV2LT5kZXZmbikgIT0gMCkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKKworCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOworCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVUywgfjApOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworLyoqCisgKiBlMTAwMF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0CisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uIEltcGxlbWVudGF0aW9uIHJlc2VtYmxlcyB0aGUKKyAqIHNlY29uZC1oYWxmIG9mIHRoZSBlMTAwMF9yZXN1bWUgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgZTEwMDBfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7CisJdWludDMyX3QgbWFuYywgc3dzbTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJaWYgKGUxMDAwX3VwKGFkYXB0ZXIpKSB7CisJCQlwcmludGsoImUxMDAwOiBjYW4ndCBicmluZyBkZXZpY2UgYmFjayB1cCBhZnRlciByZXNldFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisKKwlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYKKwkgICAgYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCQltYW5jID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DKTsKKwkJbWFuYyAmPSB+KEUxMDAwX01BTkNfQVJQX0VOKTsKKwkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgTUFOQywgbWFuYyk7CisJfQorCisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJCXN3c20gPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNXU00pOworCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBTV1NNLAorCQkJCXN3c20gfCBFMTAwMF9TV1NNX0RSVl9MT0FEKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7Cit9CisKIC8qIGUxMDAwX21haW4uYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKaW5kZXggOTc5MGRiOS4uMDQ4ZDA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw2ICsyMiw3IEBACiAgIAogICBDb250YWN0IEluZm9ybWF0aW9uOgogICBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCmluZGV4IGUwYTRkMzcuLmU1NWY4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtMjIsNiArMjIsNyBAQAogICAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKICAgTGludXggTklDUyA8bGludXgubmljc0BpbnRlbC5jb20+CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcGljMTAwLmMgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKaW5kZXggMmY3Yjg2OC4uOGQ2ODBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMjEsMTUgKzIxLDE1IEBACiAJaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9lcGljMTAwLmh0bWwKIAogCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQorCiAJTGludXgga2VybmVsLXNwZWNpZmljIGNoYW5nZXM6Ci0JCisKIAlMSzEuMS4yIChqZ2FyemlrKToKIAkqIE1lcmdlIGJlY2tlciB2ZXJzaW9uIDEuMDkgKDQvMDgvMjAwMCkKIAogCUxLMS4xLjM6CiAJKiBNYWpvciBidWdmaXggdG8gMS4wOSBkcml2ZXIgKEZyYW5jaXMgUm9taWV1KQotCQorCiAJTEsxLjEuNCAoamdhcnppayk6CiAJKiBNZXJnZSBiZWNrZXIgdGVzdCB2ZXJzaW9uIDEuMDkgKDUvMjkvMjAwMCkKIApAQCAtNjYsNyArNjYsNyBAQAogCUxLMS4xLjE0IChLcnl6c3p0b2YgSGFsYXNhKToKIAkqIGZpeCBzcHVyaW91cyBiYWQgaW5pdGlhbGl6YXRpb25zCiAJKiBwb3VuZCBwaHkgYSBsYSBTTVNDJ3MgYXBwIG5vdGUgb24gdGhlIHN1YmplY3QKLQkKKwogCUFDMS4xLjE0YWMKIAkqIGZpeCBwb3dlciB1cC9kb3duIGZvciBldGh0b29sIHRoYXQgYnJva2UgaW4gMS4xMQogCkBAIC0yNDQsNyArMjQ0LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIGVwaWNfcGNpX3RibCk7CiAKLQkKKwogI2lmbmRlZiBVU0VfSU9fT1BTCiAjdW5kZWYgaW5iCiAjdW5kZWYgaW53CkBAIC0zNzAsNyArMzcwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXBpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotDAorCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVwaWNfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMzkyLDkgKzM5Miw5IEBACiAJCXByaW50ayAoS0VSTl9JTkZPICIlcyIgS0VSTl9JTkZPICIlcyIgS0VSTl9JTkZPICIlcyIsCiAJCQl2ZXJzaW9uLCB2ZXJzaW9uMiwgdmVyc2lvbjMpOwogI2VuZGlmCi0JCisKIAljYXJkX2lkeCsrOwotCQorCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC00MDUsNyArNDA1LDcgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGU7CiAJfQotCQorCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCWVwLT5wY2lfZGV2ID0gcGRldjsKIAllcC0+Y2hpcF9pZCA9IGNoaXBfaWR4OwogCWVwLT5jaGlwX2ZsYWdzID0gcGNpX2lkX3RibFtjaGlwX2lkeF0uZHJ2X2ZsYWdzOwotCWVwLT5pcnFfbWFzayA9IAorCWVwLT5pcnFfbWFzayA9CiAJCShlcC0+Y2hpcF9mbGFncyAmIFRZUEUyX0lOVFIgPyAgUENJQnVzRXJyMTc1IDogUENJQnVzRXJyMTcwKQogCQkgfCBDbnRGdWxsIHwgVHhVbmRlcnJ1biB8IEVwaWNOYXBpRXZlbnQ7CiAKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlnb3RvIG91dDsKIH0KLQwKKwogLyogU2VyaWFsIEVFUFJPTSBzZWN0aW9uLiAqLwogCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KQEAgLTcwOSw3ICs3MDksNyBAQAogCiAJb3V0dyh2YWx1ZSwgaW9hZGRyICsgTUlJRGF0YSk7CiAJb3V0bCgocGh5X2lkIDw8IDkpIHwgKGxvYyA8PCA0KSB8IE1JSV9XUklURU9QLCBpb2FkZHIgKyBNSUlDdHJsKTsKLQlmb3IgKGkgPSAxMDAwMDsgaSA+IDA7IGktLSkgeyAKKwlmb3IgKGkgPSAxMDAwMDsgaSA+IDA7IGktLSkgewogCQliYXJyaWVyKCk7CiAJCWlmICgoaW5sKGlvYWRkciArIE1JSUN0cmwpICYgTUlJX1dSSVRFT1ApID09IDApCiAJCQlicmVhazsKQEAgLTcxNyw3ICs3MTcsNyBAQAogCXJldHVybjsKIH0KIAotDAorCiBzdGF0aWMgaW50IGVwaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBlcGljX3ByaXZhdGUgKmVwID0gZGV2LT5wcml2OwpAQCAtNzYwLDcgKzc2MCw3IEBACiAjZW5kaWYKIAogCXVkZWxheSgyMCk7IC8qIExvb2tzIGxpa2UgRVBJSSBuZWVkcyB0aGF0IGlmIHlvdSB3YW50IHJlbGlhYmxlIFJYIGluaXQuIEZJWE1FOiBwY2kgcG9zdGluZyBidWc/ICovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCQlvdXRsKGNwdV90b19sZTE2KCgodTE2KilkZXYtPmRldl9hZGRyKVtpXSksIGlvYWRkciArIExBTjAgKyBpKjQpOwogCkBAIC04MDMsNyArODAzLDcgQEAKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwogCW91dGwoKGVwLT5jaGlwX2ZsYWdzICYgVFlQRTJfSU5UUiA/IFBDSUJ1c0VycjE3NSA6IFBDSUJ1c0VycjE3MCkKLQkJIHwgQ250RnVsbCB8IFR4VW5kZXJydW4gCisJCSB8IENudEZ1bGwgfCBUeFVuZGVycnVuCiAJCSB8IFJ4RXJyb3IgfCBSeEhlYWRlciB8IEVwaWNOYXBpRXZlbnQsIGlvYWRkciArIElOVE1BU0spOwogCiAJaWYgKGRlYnVnID4gMSkKQEAgLTgzMSw3ICs4MzEsNyBAQAogCXN0cnVjdCBlcGljX3ByaXZhdGUgKmVwID0gZGV2LT5wcml2OwogCiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKLQkKKwogCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCiAJb3V0bCgweDAwMDAwMDAwLCBpb2FkZHIgKyBJTlRNQVNLKTsKIAkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IERNQSBwcm9jZXNzZXMuICovCkBAIC05ODcsNyArOTg3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKIAkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSAwOwogCQllcC0+cnhfcmluZ1tpXS5idWZsZW5ndGggPSBjcHVfdG9fbGUzMihlcC0+cnhfYnVmX3N6KTsKLQkJZXAtPnJ4X3JpbmdbaV0ubmV4dCA9IGVwLT5yeF9yaW5nX2RtYSArIAorCQllcC0+cnhfcmluZ1tpXS5uZXh0ID0gZXAtPnJ4X3JpbmdfZG1hICsKIAkJCQkgICAgICAoaSsxKSpzaXplb2Yoc3RydWN0IGVwaWNfcnhfZGVzYyk7CiAJCWVwLT5yeF9za2J1ZmZbaV0gPSBOVUxMOwogCX0KQEAgLTEwMDIsNyArMTAwMiw3IEBACiAJCQlicmVhazsKIAkJc2tiLT5kZXYgPSBkZXY7CQkJLyogTWFyayBhcyBiZWluZyB1c2VkIGJ5IHRoaXMgZGV2aWNlLiAqLwogCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduIHRoZSBJUCBoZWFkZXIuICovCi0JCWVwLT5yeF9yaW5nW2ldLmJ1ZmFkZHIgPSBwY2lfbWFwX3NpbmdsZShlcC0+cGNpX2RldiwgCisJCWVwLT5yeF9yaW5nW2ldLmJ1ZmFkZHIgPSBwY2lfbWFwX3NpbmdsZShlcC0+cGNpX2RldiwKIAkJCXNrYi0+ZGF0YSwgZXAtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSBjcHVfdG9fbGUzMihEZXNjT3duKTsKIAl9CkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQllcC0+dHhfc2tidWZmW2ldID0gTlVMTDsKIAkJZXAtPnR4X3JpbmdbaV0udHhzdGF0dXMgPSAweDAwMDA7Ci0JCWVwLT50eF9yaW5nW2ldLm5leHQgPSBlcC0+dHhfcmluZ19kbWEgKyAKKwkJZXAtPnR4X3JpbmdbaV0ubmV4dCA9IGVwLT50eF9yaW5nX2RtYSArCiAJCQkoaSsxKSpzaXplb2Yoc3RydWN0IGVwaWNfdHhfZGVzYyk7CiAJfQogCWVwLT50eF9yaW5nW2ktMV0ubmV4dCA9IGVwLT50eF9yaW5nX2RtYTsKQEAgLTEwMjYsNyArMTAyNiw3IEBACiAJaW50IGVudHJ5LCBmcmVlX2NvdW50OwogCXUzMiBjdHJsX3dvcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKKwogCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7CiAJCXNrYiA9IHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKTsKIAkJaWYgKHNrYiA9PSBOVUxMKQpAQCAtMTA0Miw3ICsxMDQyLDcgQEAKIAllbnRyeSA9IGVwLT5jdXJfdHggJSBUWF9SSU5HX1NJWkU7CiAKIAllcC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKLQllcC0+dHhfcmluZ1tlbnRyeV0uYnVmYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCBza2ItPmRhdGEsIAorCWVwLT50eF9yaW5nW2VudHJ5XS5idWZhZGRyID0gcGNpX21hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwKIAkJIAkJCSAgICAgICAgICAgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAlpZiAoZnJlZV9jb3VudCA8IFRYX1FVRVVFX0xFTi8yKSB7LyogVHlwaWNhbCBwYXRoICovCiAJCWN0cmxfd29yZCA9IGNwdV90b19sZTMyKDB4MTAwMDAwKTsgLyogTm8gaW50ZXJydXB0ICovCkBAIC0xMTI2LDcgKzExMjYsNyBAQAogCiAJCS8qIEZyZWUgdGhlIG9yaWdpbmFsIHNrYi4gKi8KIAkJc2tiID0gZXAtPnR4X3NrYnVmZltlbnRyeV07Ci0JCXBjaV91bm1hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIGVwLT50eF9yaW5nW2VudHJ5XS5idWZhZGRyLCAKKwkJcGNpX3VubWFwX3NpbmdsZShlcC0+cGNpX2RldiwgZXAtPnR4X3JpbmdbZW50cnldLmJ1ZmFkZHIsCiAJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJZXAtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwpAQCAtMTI4MSw4ICsxMjgxLDggQEAKIAkJCQkJCQkgICAgICAgZXAtPnJ4X2J1Zl9zeiwKIAkJCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZShlcC0+cGNpX2RldiwgCi0JCQkJCWVwLT5yeF9yaW5nW2VudHJ5XS5idWZhZGRyLCAKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LAorCQkJCQllcC0+cnhfcmluZ1tlbnRyeV0uYnVmYWRkciwKIAkJCQkJZXAtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQlza2JfcHV0KHNrYiA9IGVwLT5yeF9za2J1ZmZbZW50cnldLCBwa3RfbGVuKTsKIAkJCQllcC0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CkBAIC0xMzA3LDcgKzEzMDcsNyBAQAogCQkJCWJyZWFrOwogCQkJc2tiLT5kZXYgPSBkZXY7CQkJLyogTWFyayBhcyBiZWluZyB1c2VkIGJ5IHRoaXMgZGV2aWNlLiAqLwogCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogQWxpZ24gSVAgb24gMTYgYnl0ZSBib3VuZGFyaWVzICovCi0JCQllcC0+cnhfcmluZ1tlbnRyeV0uYnVmYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCAKKwkJCWVwLT5yeF9yaW5nW2VudHJ5XS5idWZhZGRyID0gcGNpX21hcF9zaW5nbGUoZXAtPnBjaV9kZXYsCiAJCQkJc2tiLT5kYXRhLCBlcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJd29ya19kb25lKys7CiAJCX0KQEAgLTE0MDMsNyArMTQwMyw3IEBACiAJCWVwLT5yeF9yaW5nW2ldLnJ4c3RhdHVzID0gMDsJCS8qIE5vdCBvd25lZCBieSBFcGljIGNoaXAuICovCiAJCWVwLT5yeF9yaW5nW2ldLmJ1Zmxlbmd0aCA9IDA7CiAJCWlmIChza2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIGVwLT5yeF9yaW5nW2ldLmJ1ZmFkZHIsIAorCQkJcGNpX3VubWFwX3NpbmdsZShlcC0+cGNpX2RldiwgZXAtPnJ4X3JpbmdbaV0uYnVmYWRkciwKIAkJCQkgCSBlcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQl9CkBAIC0xNDE0LDcgKzE0MTQsNyBAQAogCQllcC0+dHhfc2tidWZmW2ldID0gTlVMTDsKIAkJaWYgKCFza2IpCiAJCQljb250aW51ZTsKLQkJcGNpX3VubWFwX3NpbmdsZShlcC0+cGNpX2RldiwgZXAtPnR4X3JpbmdbaV0uYnVmYWRkciwgCisJCXBjaV91bm1hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIGVwLT50eF9yaW5nW2ldLmJ1ZmFkZHIsCiAJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KQEAgLTE2MDcsNyArMTYwNyw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IGRldi0+cHJpdjsKLQkKKwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVFhfVE9UQUxfU0laRSwgZXAtPnR4X3JpbmcsIGVwLT50eF9yaW5nX2RtYSk7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9UT1RBTF9TSVpFLCBlcC0+cnhfcmluZywgZXAtPnJ4X3JpbmdfZG1hKTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCBmZWI1YjIyLi4wNGE1M2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtMTA3LDYgKzEwNyw4IEBACiAgKgkwLjUyOiAyMCBKYW4gMjAwNjogQWRkIE1TSS9NU0lYIHN1cHBvcnQuCiAgKgkwLjUzOiAxOSBNYXIgMjAwNjogRml4IGluaXQgZnJvbSBsb3cgcG93ZXIgbW9kZSBhbmQgYWRkIGh3IHJlc2V0LgogICoJMC41NDogMjEgTWFyIDIwMDY6IEZpeCBzcGluIGxvY2tzIGZvciBtdWx0aSBpcnFzIGFuZCBjbGVhbnVwLgorICoJMC41NTogMjIgTWFyIDIwMDY6IEFkZCBmbG93IGNvbnRyb2wgKHBhdXNlIGZyYW1lKS4KKyAqCTAuNTY6IDIyIE1hciAyMDA2OiBBZGRpdGlvbmFsIGV0aHRvb2wgY29uZmlnIGFuZCBtb2R1bGVwYXJhbSBzdXBwb3J0LgogICoKICAqIEtub3duIGJ1Z3M6CiAgKiBXZSBzdXNwZWN0IHRoYXQgb24gc29tZSBoYXJkd2FyZSBubyBUWCBkb25lIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZC4KQEAgLTExOCw3ICsxMjAsNyBAQAogICogREVWX05FRURfVElNRVJJUlEgd2lsbCBub3QgaGFybSB5b3Ugb24gc2FuZSBoYXJkd2FyZSwgb25seSBnZW5lcmF0aW5nIGEgZmV3CiAgKiBzdXBlcmZsdW91cyB0aW1lciBpbnRlcnJ1cHRzIGZyb20gdGhlIG5pYy4KICAqLwotI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNTQiCisjZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC41NiIKICNkZWZpbmUgRFJWX05BTUUJCQkiZm9yY2VkZXRoIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNjMsNiArMTY1LDkgQEAKICNkZWZpbmUgREVWX0hBU19NU0kgICAgICAgICAgICAgMHgwMDQwICAvKiBkZXZpY2Ugc3VwcG9ydHMgTVNJICovCiAjZGVmaW5lIERFVl9IQVNfTVNJX1ggICAgICAgICAgIDB4MDA4MCAgLyogZGV2aWNlIHN1cHBvcnRzIE1TSS1YICovCiAjZGVmaW5lIERFVl9IQVNfUE9XRVJfQ05UUkwgICAgIDB4MDEwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHBvd2VyIHNhdmluZ3MgKi8KKyNkZWZpbmUgREVWX0hBU19QQVVTRUZSQU1FX1RYICAgMHgwMjAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgdHggcGF1c2UgZnJhbWVzICovCisjZGVmaW5lIERFVl9IQVNfU1RBVElTVElDUyAgICAgIDB4MDQwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgREVWX0hBU19URVNUX0VYVEVOREVEICAgMHgwODAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgZXh0ZW5kZWQgZGlhZ25vc3RpYyB0ZXN0ICovCiAKIGVudW0gewogCU52UmVnSXJxU3RhdHVzID0gMHgwMDAsCkBAIC0yMDMsNiArMjA4LDcgQEAKIAlOdlJlZ01TSUlycU1hc2sgPSAweDAzMCwKICNkZWZpbmUgTlZSRUdfTVNJX1ZFQ1RPUl8wX0VOQUJMRUQgMHgwMQogCU52UmVnTWlzYzEgPSAweDA4MCwKKyNkZWZpbmUgTlZSRUdfTUlTQzFfUEFVU0VfVFgJMHgwMQogI2RlZmluZSBOVlJFR19NSVNDMV9IRAkJMHgwMgogI2RlZmluZSBOVlJFR19NSVNDMV9GT1JDRQkweDNiMGYzYwogCkBAIC0yMTQsOSArMjIwLDExIEBACiAjZGVmaW5lIE5WUkVHX1hNSVRTVEFUX0JVU1kJMHgwMQogCiAJTnZSZWdQYWNrZXRGaWx0ZXJGbGFncyA9IDB4OGMsCi0jZGVmaW5lIE5WUkVHX1BGRl9BTFdBWVMJMHg3RjAwMDgKKyNkZWZpbmUgTlZSRUdfUEZGX1BBVVNFX1JYCTB4MDgKKyNkZWZpbmUgTlZSRUdfUEZGX0FMV0FZUwkweDdGMDAwMAogI2RlZmluZSBOVlJFR19QRkZfUFJPTUlTQwkweDgwCiAjZGVmaW5lIE5WUkVHX1BGRl9NWUFERFIJMHgyMAorI2RlZmluZSBOVlJFR19QRkZfTE9PUEJBQ0sJMHgxMAogCiAJTnZSZWdPZmZsb2FkQ29uZmlnID0gMHg5MCwKICNkZWZpbmUgTlZSRUdfT0ZGTE9BRF9IT01FUEhZCTB4NjAxCkBAIC0yNzcsNiArMjg1LDkgQEAKICNkZWZpbmUgTlZSRUdfVFhSWENUTF9WTEFOSU5TCTB4MDAwODAKIAlOdlJlZ1R4UmluZ1BoeXNBZGRySGlnaCA9IDB4MTQ4LAogCU52UmVnUnhSaW5nUGh5c0FkZHJIaWdoID0gMHgxNEMsCisJTnZSZWdUeFBhdXNlRnJhbWUgPSAweDE3MCwKKyNkZWZpbmUgTlZSRUdfVFhfUEFVU0VGUkFNRV9ESVNBQkxFCTB4MWZmMDA4MAorI2RlZmluZSBOVlJFR19UWF9QQVVTRUZSQU1FX0VOQUJMRQkweDBjMDAwMzAKIAlOdlJlZ01JSVN0YXR1cyA9IDB4MTgwLAogI2RlZmluZSBOVlJFR19NSUlTVEFUX0VSUk9SCQkweDAwMDEKICNkZWZpbmUgTlZSRUdfTUlJU1RBVF9MSU5LQ0hBTkdFCTB4MDAwOApAQCAtMzI2LDYgKzMzNywzMyBAQAogI2RlZmluZSBOVlJFR19QT1dFUlNUQVRFX0QxCQkweDAwMDEKICNkZWZpbmUgTlZSRUdfUE9XRVJTVEFURV9EMgkJMHgwMDAyCiAjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEVfRDMJCTB4MDAwMworCU52UmVnVHhDbnQgPSAweDI4MCwKKwlOdlJlZ1R4WmVyb1JlWG10ID0gMHgyODQsCisJTnZSZWdUeE9uZVJlWG10ID0gMHgyODgsCisJTnZSZWdUeE1hbnlSZVhtdCA9IDB4MjhjLAorCU52UmVnVHhMYXRlQ29sID0gMHgyOTAsCisJTnZSZWdUeFVuZGVyZmxvdyA9IDB4Mjk0LAorCU52UmVnVHhMb3NzQ2FycmllciA9IDB4Mjk4LAorCU52UmVnVHhFeGNlc3NEZWYgPSAweDI5YywKKwlOdlJlZ1R4UmV0cnlFcnIgPSAweDJhMCwKKwlOdlJlZ1J4RnJhbWVFcnIgPSAweDJhNCwKKwlOdlJlZ1J4RXh0cmFCeXRlID0gMHgyYTgsCisJTnZSZWdSeExhdGVDb2wgPSAweDJhYywKKwlOdlJlZ1J4UnVudCA9IDB4MmIwLAorCU52UmVnUnhGcmFtZVRvb0xvbmcgPSAweDJiNCwKKwlOdlJlZ1J4T3ZlcmZsb3cgPSAweDJiOCwKKwlOdlJlZ1J4RkNTRXJyID0gMHgyYmMsCisJTnZSZWdSeEZyYW1lQWxpZ25FcnIgPSAweDJjMCwKKwlOdlJlZ1J4TGVuRXJyID0gMHgyYzQsCisJTnZSZWdSeFVuaWNhc3QgPSAweDJjOCwKKwlOdlJlZ1J4TXVsdGljYXN0ID0gMHgyY2MsCisJTnZSZWdSeEJyb2FkY2FzdCA9IDB4MmQwLAorCU52UmVnVHhEZWYgPSAweDJkNCwKKwlOdlJlZ1R4RnJhbWUgPSAweDJkOCwKKwlOdlJlZ1J4Q250ID0gMHgyZGMsCisJTnZSZWdUeFBhdXNlID0gMHgyZTAsCisJTnZSZWdSeFBhdXNlID0gMHgyZTQsCisJTnZSZWdSeERyb3BGcmFtZSA9IDB4MmU4LAogCU52UmVnVmxhbkNvbnRyb2wgPSAweDMwMCwKICNkZWZpbmUgTlZSRUdfVkxBTkNPTlRST0xfRU5BQkxFCTB4MjAwMAogCU52UmVnTVNJWE1hcDAgPSAweDNlMCwKQEAgLTQ0OSwxNiArNDg3LDE4IEBACiAvKiBHZW5lcmFsIGRyaXZlciBkZWZhdWx0cyAqLwogI2RlZmluZSBOVl9XQVRDSERPR19USU1FTwkoNSpIWikKIAotI2RlZmluZSBSWF9SSU5HCQkxMjgKLSNkZWZpbmUgVFhfUklORwkJMjU2Ci0vKiAKLSAqIElmIHlvdXIgbmljIG15c3RlcmlvdXNseSBoYW5ncyB0aGVuIHRyeSB0byByZWR1Y2UgdGhlIGxpbWl0cwotICogdG8gMS8wOiBJdCBtaWdodCBiZSByZXF1aXJlZCB0byBzZXQgTlZfVFhfTEFTVFBBQ0tFVCBpbiB0aGUKLSAqIGxhc3QgdmFsaWQgcmluZyBlbnRyeS4gQnV0IHRoaXMgd291bGQgYmUgaW1wb3NzaWJsZSB0bwotICogaW1wbGVtZW50IC0gcHJvYmFibHkgYSBkaXNhc3NlbWJseSBlcnJvci4KKyNkZWZpbmUgUlhfUklOR19ERUZBVUxUCQkxMjgKKyNkZWZpbmUgVFhfUklOR19ERUZBVUxUCQkyNTYKKyNkZWZpbmUgUlhfUklOR19NSU4JCTEyOAorI2RlZmluZSBUWF9SSU5HX01JTgkJNjQKKyNkZWZpbmUgUklOR19NQVhfREVTQ19WRVJfMQkxMDI0CisjZGVmaW5lIFJJTkdfTUFYX0RFU0NfVkVSXzJfMwkxNjM4NAorLyoKKyAqIERpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZ2V0IGFuZCBwdXQgcG9pbnRlcnMgZm9yIHRoZSB0eCByaW5nLgorICogVGhpcyBpcyB1c2VkIHRvIHRocm90dGxlIHRoZSBhbW91bnQgb2YgZGF0YSBvdXRzdGFuZGluZyBpbiB0aGUKKyAqIHR4IHJpbmcuCiAgKi8KLSNkZWZpbmUgVFhfTElNSVRfU1RPUAkyNTUKLSNkZWZpbmUgVFhfTElNSVRfU1RBUlQJMjU0CisjZGVmaW5lIFRYX0xJTUlUX0RJRkZFUkVOQ0UJMQogCiAvKiByeC90eCBtYWMgYWRkciArIHR5cGUgKyB2bGFuICsgYWxpZ24gKyBzbGFjayovCiAjZGVmaW5lIE5WX1JYX0hFQURFUlMJCSg2NCkKQEAgLTQ3Miw4ICs1MTIsOSBAQAogI2RlZmluZSBPT01fUkVGSUxMCSgxK0haLzIwKQogI2RlZmluZSBQT0xMX1dBSVQJKDErSFovMTAwKQogI2RlZmluZSBMSU5LX1RJTUVPVVQJKDMqSFopCisjZGVmaW5lIFNUQVRTX0lOVEVSVkFMCSgxMCpIWikKIAotLyogCisvKgogICogZGVzY192ZXIgdmFsdWVzOgogICogVGhlIG5pYyBzdXBwb3J0cyB0aHJlZSBkaWZmZXJlbnQgZGVzY3JpcHRvciB0eXBlczoKICAqIC0gREVTQ19WRVJfMTogT3JpZ2luYWwKQEAgLTUwNiwxMyArNTQ3LDEzIEBACiAjZGVmaW5lIFBIWV8xMDAwCTB4MgogI2RlZmluZSBQSFlfSEFMRgkweDEwMAogCi0vKiBGSVhNRTogTUlJIGRlZmluZXMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gPGxpbnV4L21paS5oPiAqLwotI2RlZmluZSBNSUlfMTAwMEJUX0NSCTB4MDkKLSNkZWZpbmUgTUlJXzEwMDBCVF9TUgkweDBhCi0jZGVmaW5lIEFEVkVSVElTRV8xMDAwRlVMTAkweDAyMDAKLSNkZWZpbmUgQURWRVJUSVNFXzEwMDBIQUxGCTB4MDEwMAotI2RlZmluZSBMUEFfMTAwMEZVTEwJMHgwODAwCi0jZGVmaW5lIExQQV8xMDAwSEFMRgkweDA0MDAKKyNkZWZpbmUgTlZfUEFVU0VGUkFNRV9SWF9DQVBBQkxFIDB4MDAwMQorI2RlZmluZSBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEUgMHgwMDAyCisjZGVmaW5lIE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFICAweDAwMDQKKyNkZWZpbmUgTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEUgIDB4MDAwOAorI2RlZmluZSBOVl9QQVVTRUZSQU1FX1JYX1JFUSAgICAgMHgwMDEwCisjZGVmaW5lIE5WX1BBVVNFRlJBTUVfVFhfUkVRICAgICAweDAwMjAKKyNkZWZpbmUgTlZfUEFVU0VGUkFNRV9BVVRPTkVHICAgIDB4MDA0MAogCiAvKiBNU0kvTVNJLVggZGVmaW5lcyAqLwogI2RlZmluZSBOVl9NU0lfWF9NQVhfVkVDVE9SUyAgOApAQCAtNTI3LDE1ICs1NjgsMTEwIEBACiAjZGVmaW5lIE5WX01TSV9YX1ZFQ1RPUl9UWCAgICAweDEKICNkZWZpbmUgTlZfTVNJX1hfVkVDVE9SX09USEVSIDB4MgogCisvKiBzdGF0aXN0aWNzICovCitzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgeworCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBudl9ldGh0b29sX3N0ciBudl9lc3RhdHNfc3RyW10gPSB7CisJeyAidHhfYnl0ZXMiIH0sCisJeyAidHhfemVyb19yZXhtdCIgfSwKKwl7ICJ0eF9vbmVfcmV4bXQiIH0sCisJeyAidHhfbWFueV9yZXhtdCIgfSwKKwl7ICJ0eF9sYXRlX2NvbGxpc2lvbiIgfSwKKwl7ICJ0eF9maWZvX2Vycm9ycyIgfSwKKwl7ICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKKwl7ICJ0eF9leGNlc3NfZGVmZXJyYWwiIH0sCisJeyAidHhfcmV0cnlfZXJyb3IiIH0sCisJeyAidHhfZGVmZXJyYWwiIH0sCisJeyAidHhfcGFja2V0cyIgfSwKKwl7ICJ0eF9wYXVzZSIgfSwKKwl7ICJyeF9mcmFtZV9lcnJvciIgfSwKKwl7ICJyeF9leHRyYV9ieXRlIiB9LAorCXsgInJ4X2xhdGVfY29sbGlzaW9uIiB9LAorCXsgInJ4X3J1bnQiIH0sCisJeyAicnhfZnJhbWVfdG9vX2xvbmciIH0sCisJeyAicnhfb3Zlcl9lcnJvcnMiIH0sCisJeyAicnhfY3JjX2Vycm9ycyIgfSwKKwl7ICJyeF9mcmFtZV9hbGlnbl9lcnJvciIgfSwKKwl7ICJyeF9sZW5ndGhfZXJyb3IiIH0sCisJeyAicnhfdW5pY2FzdCIgfSwKKwl7ICJyeF9tdWx0aWNhc3QiIH0sCisJeyAicnhfYnJvYWRjYXN0IiB9LAorCXsgInJ4X2J5dGVzIiB9LAorCXsgInJ4X3BhdXNlIiB9LAorCXsgInJ4X2Ryb3BfZnJhbWUiIH0sCisJeyAicnhfcGFja2V0cyIgfSwKKwl7ICJyeF9lcnJvcnNfdG90YWwiIH0KK307CisKK3N0cnVjdCBudl9ldGh0b29sX3N0YXRzIHsKKwl1NjQgdHhfYnl0ZXM7CisJdTY0IHR4X3plcm9fcmV4bXQ7CisJdTY0IHR4X29uZV9yZXhtdDsKKwl1NjQgdHhfbWFueV9yZXhtdDsKKwl1NjQgdHhfbGF0ZV9jb2xsaXNpb247CisJdTY0IHR4X2ZpZm9fZXJyb3JzOworCXU2NCB0eF9jYXJyaWVyX2Vycm9yczsKKwl1NjQgdHhfZXhjZXNzX2RlZmVycmFsOworCXU2NCB0eF9yZXRyeV9lcnJvcjsKKwl1NjQgdHhfZGVmZXJyYWw7CisJdTY0IHR4X3BhY2tldHM7CisJdTY0IHR4X3BhdXNlOworCXU2NCByeF9mcmFtZV9lcnJvcjsKKwl1NjQgcnhfZXh0cmFfYnl0ZTsKKwl1NjQgcnhfbGF0ZV9jb2xsaXNpb247CisJdTY0IHJ4X3J1bnQ7CisJdTY0IHJ4X2ZyYW1lX3Rvb19sb25nOworCXU2NCByeF9vdmVyX2Vycm9yczsKKwl1NjQgcnhfY3JjX2Vycm9yczsKKwl1NjQgcnhfZnJhbWVfYWxpZ25fZXJyb3I7CisJdTY0IHJ4X2xlbmd0aF9lcnJvcjsKKwl1NjQgcnhfdW5pY2FzdDsKKwl1NjQgcnhfbXVsdGljYXN0OworCXU2NCByeF9icm9hZGNhc3Q7CisJdTY0IHJ4X2J5dGVzOworCXU2NCByeF9wYXVzZTsKKwl1NjQgcnhfZHJvcF9mcmFtZTsKKwl1NjQgcnhfcGFja2V0czsKKwl1NjQgcnhfZXJyb3JzX3RvdGFsOworfTsKKworLyogZGlhZ25vc3RpY3MgKi8KKyNkZWZpbmUgTlZfVEVTVF9DT1VOVF9CQVNFIDMKKyNkZWZpbmUgTlZfVEVTVF9DT1VOVF9FWFRFTkRFRCA0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgbnZfZXRlc3RzX3N0cltdID0geworCXsgImxpbmsgICAgICAob25saW5lL29mZmxpbmUpIiB9LAorCXsgInJlZ2lzdGVyICAob2ZmbGluZSkgICAgICAgIiB9LAorCXsgImludGVycnVwdCAob2ZmbGluZSkgICAgICAgIiB9LAorCXsgImxvb3BiYWNrICAob2ZmbGluZSkgICAgICAgIiB9Cit9OworCitzdHJ1Y3QgcmVnaXN0ZXJfdGVzdCB7CisJdTMyIHJlZzsKKwl1MzIgbWFzazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfdGVzdCBudl9yZWdpc3RlcnNfdGVzdFtdID0geworCXsgTnZSZWdVbmtub3duU2V0dXBSZWc2LCAweDAxIH0sCisJeyBOdlJlZ01pc2MxLCAweDAzYyB9LAorCXsgTnZSZWdPZmZsb2FkQ29uZmlnLCAweDAzZmYgfSwKKwl7IE52UmVnTXVsdGljYXN0QWRkckEsIDB4ZmZmZmZmZmYgfSwKKwl7IE52UmVnVW5rbm93blNldHVwUmVnMywgMHgwZmYgfSwKKwl7IE52UmVnV2FrZVVwRmxhZ3MsIDB4MDc3NzcgfSwKKwl7IDAsMCB9Cit9OworCiAvKgogICogU01QIGxvY2tpbmc6CiAgKiBBbGwgaGFyZHdhcmUgYWNjZXNzIHVuZGVyIGRldi0+cHJpdi0+bG9jaywgZXhjZXB0IHRoZSBwZXJmb3JtYW5jZQogICogY3JpdGljYWwgcGFydHM6CiAgKiAtIHJ4IGlzIChwc2V1ZG8tKSBsb2NrbGVzczogaXQgcmVsaWVzIG9uIHRoZSBzaW5nbGUtdGhyZWFkaW5nIHByb3ZpZGVkCiAgKglieSB0aGUgYXJjaCBjb2RlIGZvciBpbnRlcnJ1cHRzLgotICogLSB0eCBzZXR1cCBpcyBsb2NrbGVzczogaXQgcmVsaWVzIG9uIGRldi0+eG1pdF9sb2NrLiBBY3R1YWwgc3VibWlzc2lvbgorICogLSB0eCBzZXR1cCBpcyBsb2NrbGVzczogaXQgcmVsaWVzIG9uIG5ldGlmX3R4X2xvY2suIEFjdHVhbCBzdWJtaXNzaW9uCiAgKgluZWVkcyBkZXYtPnByaXYtPmxvY2sgOi0oCi0gKiAtIHNldF9tdWx0aWNhc3RfbGlzdDogcHJlcGFyYXRpb24gbG9ja2xlc3MsIHJlbGllcyBvbiBkZXYtPnhtaXRfbG9jay4KKyAqIC0gc2V0X211bHRpY2FzdF9saXN0OiBwcmVwYXJhdGlvbiBsb2NrbGVzcywgcmVsaWVzIG9uIG5ldGlmX3R4X2xvY2suCiAgKi8KIAogLyogaW4gZGV2OiBiYXNlLCBpcnEgKi8KQEAgLTU0NSw2ICs2ODEsNyBAQAogCS8qIEdlbmVyYWwgZGF0YToKIAkgKiBMb2NraW5nOiBzcGluX2xvY2soJm5wLT5sb2NrKTsgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgbnZfZXRodG9vbF9zdGF0cyBlc3RhdHM7CiAJaW50IGluX3NodXRkb3duOwogCXUzMiBsaW5rc3BlZWQ7CiAJaW50IGR1cGxleDsKQEAgLTU1NCw2ICs2OTEsNyBAQAogCWludCB3b2xlbmFibGVkOwogCXVuc2lnbmVkIGludCBwaHlfb3VpOwogCXUxNiBnaWdhYml0OworCWludCBpbnRyX3Rlc3Q7CiAKIAkvKiBHZW5lcmFsIGRhdGE6IFJPIGZpZWxkcyAqLwogCWRtYV9hZGRyX3QgcmluZ19hZGRyOwpAQCAtNTczLDEzICs3MTEsMTUgQEAKIAkgKi8KIAlyaW5nX3R5cGUgcnhfcmluZzsKIAl1bnNpZ25lZCBpbnQgY3VyX3J4LCByZWZpbGxfcng7Ci0Jc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYnVmZltSWF9SSU5HXTsKLQlkbWFfYWRkcl90IHJ4X2RtYVtSWF9SSU5HXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYnVmZjsKKwlkbWFfYWRkcl90ICpyeF9kbWE7CiAJdW5zaWduZWQgaW50IHJ4X2J1Zl9zejsKIAl1bnNpZ25lZCBpbnQgcGt0X2xpbWl0OwogCXN0cnVjdCB0aW1lcl9saXN0IG9vbV9raWNrOwogCXN0cnVjdCB0aW1lcl9saXN0IG5pY19wb2xsOworCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRzX3BvbGw7CiAJdTMyIG5pY19wb2xsX2lycTsKKwlpbnQgcnhfcmluZ19zaXplOwogCiAJLyogbWVkaWEgZGV0ZWN0aW9uIHdvcmthcm91bmQuCiAJICogTG9ja2luZzogV2l0aGluIGlycSBoYW5kZXIgb3IgZGlzYWJsZV9pcnErc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC01OTEsMTAgKzczMSwxMyBAQAogCSAqLwogCXJpbmdfdHlwZSB0eF9yaW5nOwogCXVuc2lnbmVkIGludCBuZXh0X3R4LCBuaWNfdHg7Ci0Jc3RydWN0IHNrX2J1ZmYgKnR4X3NrYnVmZltUWF9SSU5HXTsKLQlkbWFfYWRkcl90IHR4X2RtYVtUWF9SSU5HXTsKLQl1bnNpZ25lZCBpbnQgdHhfZG1hX2xlbltUWF9SSU5HXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnR4X3NrYnVmZjsKKwlkbWFfYWRkcl90ICp0eF9kbWE7CisJdW5zaWduZWQgaW50ICp0eF9kbWFfbGVuOwogCXUzMiB0eF9mbGFnczsKKwlpbnQgdHhfcmluZ19zaXplOworCWludCB0eF9saW1pdF9zdGFydDsKKwlpbnQgdHhfbGltaXRfc3RvcDsKIAogCS8qIHZsYW4gZmllbGRzICovCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsYW5ncnA7CkBAIC02MDIsNiArNzQ1LDkgQEAKIAkvKiBtc2kvbXNpLXggZmllbGRzICovCiAJdTMyIG1zaV9mbGFnczsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2lfeF9lbnRyeVtOVl9NU0lfWF9NQVhfVkVDVE9SU107CisKKwkvKiBmbG93IGNvbnRyb2wgKi8KKwl1MzIgcGF1c2VfZmxhZ3M7CiB9OwogCiAvKgpAQCAtNjEyLDEyICs3NTgsMTQgQEAKIAogLyoKICAqIE9wdGltaXphdGlvbiBjYW4gYmUgZWl0aGVyIHRocm91cHV0IG1vZGUgb3IgY3B1IG1vZGUKLSAqIAorICoKICAqIFRocm91Z2hwdXQgTW9kZTogRXZlcnkgdHggYW5kIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4KICAqIENQVSBNb2RlOiBJbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuCiAgKi8KLSNkZWZpbmUgTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCAwCi0jZGVmaW5lIE5WX09QVElNSVpBVElPTl9NT0RFX0NQVSAgICAgICAgMQorZW51bSB7CisJTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCwKKwlOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUKK307CiBzdGF0aWMgaW50IG9wdGltaXphdGlvbl9tb2RlID0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVDsKIAogLyoKQEAgLTYzMCwxNCArNzc4LDMxIEBACiBzdGF0aWMgaW50IHBvbGxfaW50ZXJ2YWwgPSAtMTsKIAogLyoKLSAqIERpc2FibGUgTVNJIGludGVycnVwdHMKKyAqIE1TSSBpbnRlcnJ1cHRzCiAgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV9tc2kgPSAwOworZW51bSB7CisJTlZfTVNJX0lOVF9ESVNBQkxFRCwKKwlOVl9NU0lfSU5UX0VOQUJMRUQKK307CitzdGF0aWMgaW50IG1zaSA9IE5WX01TSV9JTlRfRU5BQkxFRDsKIAogLyoKLSAqIERpc2FibGUgTVNJWCBpbnRlcnJ1cHRzCisgKiBNU0lYIGludGVycnVwdHMKICAqLwotc3RhdGljIGludCBkaXNhYmxlX21zaXggPSAwOworZW51bSB7CisJTlZfTVNJWF9JTlRfRElTQUJMRUQsCisJTlZfTVNJWF9JTlRfRU5BQkxFRAorfTsKK3N0YXRpYyBpbnQgbXNpeCA9IE5WX01TSVhfSU5UX0VOQUJMRUQ7CisKKy8qCisgKiBETUEgNjRiaXQKKyAqLworZW51bSB7CisJTlZfRE1BXzY0QklUX0RJU0FCTEVELAorCU5WX0RNQV82NEJJVF9FTkFCTEVECit9Oworc3RhdGljIGludCBkbWFfNjRiaXQgPSBOVl9ETUFfNjRCSVRfRU5BQkxFRDsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmVfcHJpdiAqZ2V0X252cHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNjk3LDcgKzg2Miw3IEBACiAJCQl3cml0ZWwoKHUzMikgY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciksIGJhc2UgKyBOdlJlZ1J4UmluZ1BoeXNBZGRyKTsKIAkJfQogCQlpZiAocnh0eF9mbGFncyAmIE5WX1NFVFVQX1RYX1JJTkcpIHsKLQkJCXdyaXRlbCgodTMyKSBjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyICsgUlhfUklORypzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykpLCBiYXNlICsgTnZSZWdUeFJpbmdQaHlzQWRkcik7CisJCQl3cml0ZWwoKHUzMikgY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciArIG5wLT5yeF9yaW5nX3NpemUqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHIpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHJ4dHhfZmxhZ3MgJiBOVl9TRVRVUF9SWF9SSU5HKSB7CkBAIC03MDUsMTIgKzg3MCwzNyBAQAogCQkJd3JpdGVsKCh1MzIpIChjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyKSA+PiAzMiksIGJhc2UgKyBOdlJlZ1J4UmluZ1BoeXNBZGRySGlnaCk7CiAJCX0KIAkJaWYgKHJ4dHhfZmxhZ3MgJiBOVl9TRVRVUF9UWF9SSU5HKSB7Ci0JCQl3cml0ZWwoKHUzMikgY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciArIFJYX1JJTkcqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHIpOwotCQkJd3JpdGVsKCh1MzIpIChjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyICsgUlhfUklORypzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkpID4+IDMyKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHJIaWdoKTsKKwkJCXdyaXRlbCgodTMyKSBjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyICsgbnAtPnJ4X3Jpbmdfc2l6ZSpzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkpLCBiYXNlICsgTnZSZWdUeFJpbmdQaHlzQWRkcik7CisJCQl3cml0ZWwoKHUzMikgKGNwdV90b19sZTY0KG5wLT5yaW5nX2FkZHIgKyBucC0+cnhfcmluZ19zaXplKnNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSkgPj4gMzIpLCBiYXNlICsgTnZSZWdUeFJpbmdQaHlzQWRkckhpZ2gpOwogCQl9CiAJfQogfQogCitzdGF0aWMgdm9pZCBmcmVlX3JpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCisJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJCWlmKG5wLT5yeF9yaW5nLm9yaWcpCisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAobnAtPnJ4X3Jpbmdfc2l6ZSArIG5wLT50eF9yaW5nX3NpemUpLAorCQkJCQkgICAgbnAtPnJ4X3Jpbmcub3JpZywgbnAtPnJpbmdfYWRkcik7CisJfSBlbHNlIHsKKwkJaWYgKG5wLT5yeF9yaW5nLmV4KQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpICogKG5wLT5yeF9yaW5nX3NpemUgKyBucC0+dHhfcmluZ19zaXplKSwKKwkJCQkJICAgIG5wLT5yeF9yaW5nLmV4LCBucC0+cmluZ19hZGRyKTsKKwl9CisJaWYgKG5wLT5yeF9za2J1ZmYpCisJCWtmcmVlKG5wLT5yeF9za2J1ZmYpOworCWlmIChucC0+cnhfZG1hKQorCQlrZnJlZShucC0+cnhfZG1hKTsKKwlpZiAobnAtPnR4X3NrYnVmZikKKwkJa2ZyZWUobnAtPnR4X3NrYnVmZik7CisJaWYgKG5wLT50eF9kbWEpCisJCWtmcmVlKG5wLT50eF9kbWEpOworCWlmIChucC0+dHhfZG1hX2xlbikKKwkJa2ZyZWUobnAtPnR4X2RtYV9sZW4pOworfQorCiBzdGF0aWMgaW50IHVzaW5nX211bHRpX2lycXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CkBAIC04NjAsNyArMTA1MCw3IEBACiAKIAkvKiBzZXQgYWR2ZXJ0aXNlIHJlZ2lzdGVyICovCiAJcmVnID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKLQlyZWcgfD0gKEFEVkVSVElTRV8xMEhBTEZ8QURWRVJUSVNFXzEwRlVMTHxBRFZFUlRJU0VfMTAwSEFMRnxBRFZFUlRJU0VfMTAwRlVMTHwweDgwMHwweDQwMCk7CisJcmVnIHw9IChBRFZFUlRJU0VfMTBIQUxGfEFEVkVSVElTRV8xMEZVTEx8QURWRVJUSVNFXzEwMEhBTEZ8QURWRVJUSVNFXzEwMEZVTEx8QURWRVJUSVNFX1BBVVNFX0FTWU18QURWRVJUSVNFX1BBVVNFX0NBUCk7CiAJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCByZWcpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgd3JpdGUgdG8gYWR2ZXJ0aXNlIGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCXJldHVybiBQSFlfRVJST1I7CkBAIC04NzMsMTQgKzEwNjMsMTQgQEAKIAltaWlfc3RhdHVzID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTVNSLCBNSUlfUkVBRCk7CiAJaWYgKG1paV9zdGF0dXMgJiBQSFlfR0lHQUJJVCkgewogCQlucC0+Z2lnYWJpdCA9IFBIWV9HSUdBQklUOwotCQltaWlfY29udHJvbF8xMDAwID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIE1JSV9SRUFEKTsKKwkJbWlpX2NvbnRyb2xfMTAwMCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKIAkJbWlpX2NvbnRyb2xfMTAwMCAmPSB+QURWRVJUSVNFXzEwMDBIQUxGOwogCQlpZiAocGh5aW50ZXJmYWNlICYgUEhZX1JHTUlJKQogCQkJbWlpX2NvbnRyb2xfMTAwMCB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7CiAJCWVsc2UKIAkJCW1paV9jb250cm9sXzEwMDAgJj0gfkFEVkVSVElTRV8xMDAwRlVMTDsKIAotCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIG1paV9jb250cm9sXzEwMDApKSB7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBtaWlfY29udHJvbF8xMDAwKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCQlyZXR1cm4gUEhZX0VSUk9SOwogCQl9CkBAIC05MTgsNiArMTEwOCw4IEBACiAJCQlyZXR1cm4gUEhZX0VSUk9SOwogCQl9CiAJfQorCS8qIHNvbWUgcGh5cyBjbGVhciBvdXQgcGF1c2UgYWR2ZXJ0aXNtZW50IG9uIHJlc2V0LCBzZXQgaXQgYmFjayAqLworCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCByZWcpOwogCiAJLyogcmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCiAJbWlpX2NvbnRyb2wgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKQEAgLTEwNDcsNyArMTIzOSw3IEBACiAJd2hpbGUgKG5wLT5jdXJfcnggIT0gcmVmaWxsX3J4KSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJbnIgPSByZWZpbGxfcnggJSBSWF9SSU5HOworCQluciA9IHJlZmlsbF9yeCAlIG5wLT5yeF9yaW5nX3NpemU7CiAJCWlmIChucC0+cnhfc2tidWZmW25yXSA9PSBOVUxMKSB7CiAKIAkJCXNrYiA9IGRldl9hbGxvY19za2IobnAtPnJ4X2J1Zl9zeiArIE5WX1JYX0FMTE9DX1BBRCk7CkBAIC0xMDc2LDcgKzEyNjgsNyBAQAogCQlyZWZpbGxfcngrKzsKIAl9CiAJbnAtPnJlZmlsbF9yeCA9IHJlZmlsbF9yeDsKLQlpZiAobnAtPmN1cl9yeCAtIHJlZmlsbF9yeCA9PSBSWF9SSU5HKQorCWlmIChucC0+Y3VyX3J4IC0gcmVmaWxsX3J4ID09IG5wLT5yeF9yaW5nX3NpemUpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtMTExMCwxNCArMTMwMiwxNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbnZfaW5pdF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSAKK3N0YXRpYyB2b2lkIG52X2luaXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwogCi0JbnAtPmN1cl9yeCA9IFJYX1JJTkc7CisJbnAtPmN1cl9yeCA9IG5wLT5yeF9yaW5nX3NpemU7CiAJbnAtPnJlZmlsbF9yeCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFJYX1JJTkc7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKQogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCiAJCQlucC0+cnhfcmluZy5vcmlnW2ldLkZsYWdMZW4gPSAwOwogCSAgICAgICAgZWxzZQpAQCAtMTEzMCw3ICsxMzIyLDcgQEAKIAlpbnQgaTsKIAogCW5wLT5uZXh0X3R4ID0gbnAtPm5pY190eCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFRYX1JJTkc7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucC0+dHhfcmluZ19zaXplOyBpKyspIHsKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQogCQkJbnAtPnR4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuID0gMDsKIAkgICAgICAgIGVsc2UKQEAgLTExNzQsOCArMTM2Niw4IEBACiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgaTsKLQkKLQlmb3IgKGkgPSAwOyBpIDwgVFhfUklORzsgaSsrKSB7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnAtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKIAkJCW5wLT50eF9yaW5nLm9yaWdbaV0uRmxhZ0xlbiA9IDA7CiAJCWVsc2UKQEAgLTExODksNyArMTM4MSw3IEBACiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUlhfUklORzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5wLT5yeF9yaW5nX3NpemU7IGkrKykgewogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCiAJCQlucC0+cnhfcmluZy5vcmlnW2ldLkZsYWdMZW4gPSAwOwogCQllbHNlCkBAIC0xMjEzLDcgKzE0MDUsNyBAQAogCiAvKgogICogbnZfc3RhcnRfeG1pdDogZGV2LT5oYXJkX3N0YXJ0X3htaXQgZnVuY3Rpb24KLSAqIENhbGxlZCB3aXRoIGRldi0+eG1pdF9sb2NrIGhlbGQuCisgKiBDYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyBpbnQgbnZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTIyMSw4ICsxNDEzLDggQEAKIAl1MzIgdHhfZmxhZ3MgPSAwOwogCXUzMiB0eF9mbGFnc19leHRyYSA9IChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSA/IE5WX1RYX0xBU1RQQUNLRVQgOiBOVl9UWDJfTEFTVFBBQ0tFVCk7CiAJdW5zaWduZWQgaW50IGZyYWdtZW50cyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JdW5zaWduZWQgaW50IG5yID0gKG5wLT5uZXh0X3R4IC0gMSkgJSBUWF9SSU5HOwotCXVuc2lnbmVkIGludCBzdGFydF9uciA9IG5wLT5uZXh0X3R4ICUgVFhfUklORzsKKwl1bnNpZ25lZCBpbnQgbnIgPSAobnAtPm5leHRfdHggLSAxKSAlIG5wLT50eF9yaW5nX3NpemU7CisJdW5zaWduZWQgaW50IHN0YXJ0X25yID0gbnAtPm5leHRfdHggJSBucC0+dHhfcmluZ19zaXplOwogCXVuc2lnbmVkIGludCBpOwogCXUzMiBvZmZzZXQgPSAwOwogCXUzMiBiY250OwpAQCAtMTIzOCw3ICsxNDMwLDcgQEAKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAotCWlmICgobnAtPm5leHRfdHggLSBucC0+bmljX3R4ICsgZW50cmllcyAtIDEpID4gVFhfTElNSVRfU1RPUCkgeworCWlmICgobnAtPm5leHRfdHggLSBucC0+bmljX3R4ICsgZW50cmllcyAtIDEpID4gbnAtPnR4X2xpbWl0X3N0b3ApIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwpAQCAtMTI0Nyw3ICsxNDM5LDcgQEAKIAkvKiBzZXR1cCB0aGUgaGVhZGVyIGJ1ZmZlciAqLwogCWRvIHsKIAkJYmNudCA9IChzaXplID4gTlZfVFgyX1RTT19NQVhfU0laRSkgPyBOVl9UWDJfVFNPX01BWF9TSVpFIDogc2l6ZTsKLQkJbnIgPSAobnIgKyAxKSAlIFRYX1JJTkc7CisJCW5yID0gKG5yICsgMSkgJSBucC0+dHhfcmluZ19zaXplOwogCiAJCW5wLT50eF9kbWFbbnJdID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHNrYi0+ZGF0YSArIG9mZnNldCwgYmNudCwKIAkJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTI3NCw3ICsxNDY2LDcgQEAKIAogCQlkbyB7CiAJCQliY250ID0gKHNpemUgPiBOVl9UWDJfVFNPX01BWF9TSVpFKSA/IE5WX1RYMl9UU09fTUFYX1NJWkUgOiBzaXplOwotCQkJbnIgPSAobnIgKyAxKSAlIFRYX1JJTkc7CisJCQluciA9IChuciArIDEpICUgbnAtPnR4X3Jpbmdfc2l6ZTsKIAogCQkJbnAtPnR4X2RtYVtucl0gPSBwY2lfbWFwX3BhZ2UobnAtPnBjaV9kZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0K29mZnNldCwgYmNudCwKIAkJCQkJCSAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTMyMCw3ICsxNTEyLDcgQEAKIAl9IGVsc2UgewogCQlucC0+dHhfcmluZy5leFtzdGFydF9ucl0uVHhWbGFuID0gY3B1X3RvX2xlMzIodHhfZmxhZ3Nfdmxhbik7CiAJCW5wLT50eF9yaW5nLmV4W3N0YXJ0X25yXS5GbGFnTGVuIHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOwotCX0JCisJfQogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfeG1pdDogcGFja2V0ICVkIChlbnRyaWVzICVkKSBxdWV1ZWQgZm9yIHRyYW5zbWlzc2lvbi4gdHhfZmxhZ3NfZXh0cmE6ICV4XG4iLAogCQlkZXYtPm5hbWUsIG5wLT5uZXh0X3R4LCBlbnRyaWVzLCB0eF9mbGFnc19leHRyYSk7CkBAIC0xMzU2LDcgKzE1NDgsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAl3aGlsZSAobnAtPm5pY190eCAhPSBucC0+bmV4dF90eCkgewotCQlpID0gbnAtPm5pY190eCAlIFRYX1JJTkc7CisJCWkgPSBucC0+bmljX3R4ICUgbnAtPnR4X3Jpbmdfc2l6ZTsKIAogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCiAJCQlGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uRmxhZ0xlbik7CkBAIC0xMzk1LDE5ICsxNTg3LDE5IEBACiAJCQkJfSBlbHNlIHsKIAkJCQkJbnAtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQkJbnAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkJCX0JCQkJCisJCQkJfQogCQkJfQogCQl9CiAJCW52X3JlbGVhc2VfdHhza2IoZGV2LCBpKTsKIAkJbnAtPm5pY190eCsrOwogCX0KLQlpZiAobnAtPm5leHRfdHggLSBucC0+bmljX3R4IDwgVFhfTElNSVRfU1RBUlQpCisJaWYgKG5wLT5uZXh0X3R4IC0gbnAtPm5pY190eCA8IG5wLT50eF9saW1pdF9zdGFydCkKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCiAvKgogICogbnZfdHhfdGltZW91dDogZGV2LT50eF90aW1lb3V0IGZ1bmN0aW9uCi0gKiBDYWxsZWQgd2l0aCBkZXYtPnhtaXRfbG9jayBoZWxkLgorICogQ2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBoZWxkLgogICovCiBzdGF0aWMgdm9pZCBudl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNDM4LDEwICsxNjMwLDEwIEBACiAJCQkJCXJlYWRsKGJhc2UgKyBpICsgMjQpLCByZWFkbChiYXNlICsgaSArIDI4KSk7CiAJCX0KIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER1bXBpbmcgdHggcmluZ1xuIiwgZGV2LT5uYW1lKTsKLQkJZm9yIChpPTA7aTxUWF9SSU5HO2krPSA0KSB7CisJCWZvciAoaT0wO2k8bnAtPnR4X3Jpbmdfc2l6ZTtpKz0gNCkgewogCQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJTAzeDogJTA4eCAlMDh4IC8vICUwOHggJTA4eCAvLyAlMDh4ICUwOHggLy8gJTA4eCAlMDh4XG4iLAotCQkJCSAgICAgICBpLCAKKwkJCQkgICAgICAgaSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpXS5QYWNrZXRCdWZmZXIpLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLkZsYWdMZW4pLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krMV0uUGFja2V0QnVmZmVyKSwKQEAgLTE0NTIsNyArMTY0NCw3IEBACiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSszXS5GbGFnTGVuKSk7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiUwM3g6ICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4XG4iLAotCQkJCSAgICAgICBpLCAKKwkJCQkgICAgICAgaSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uUGFja2V0QnVmZmVySGlnaCksCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLlBhY2tldEJ1ZmZlckxvdyksCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLkZsYWdMZW4pLApAQCAtMTU1MCwxNSArMTc0MiwxNCBAQAogCXUzMiBGbGFnczsKIAl1MzIgdmxhbmZsYWdzID0gMDsKIAotCiAJZm9yICg7OykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlpbnQgbGVuOwogCQlpbnQgaTsKLQkJaWYgKG5wLT5jdXJfcnggLSBucC0+cmVmaWxsX3J4ID49IFJYX1JJTkcpCisJCWlmIChucC0+Y3VyX3J4IC0gbnAtPnJlZmlsbF9yeCA+PSBucC0+cnhfcmluZ19zaXplKQogCQkJYnJlYWs7CS8qIHdlIHNjYW5uZWQgdGhlIHdob2xlIHJpbmcgLSBkbyBub3QgY29udGludWUgKi8KIAotCQlpID0gbnAtPmN1cl9yeCAlIFJYX1JJTkc7CisJCWkgPSBucC0+Y3VyX3J4ICUgbnAtPnJ4X3Jpbmdfc2l6ZTsKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CiAJCQlGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5yeF9yaW5nLm9yaWdbaV0uRmxhZ0xlbik7CiAJCQlsZW4gPSBudl9kZXNjcl9nZXRsZW5ndGgoJm5wLT5yeF9yaW5nLm9yaWdbaV0sIG5wLT5kZXNjX3Zlcik7CkBAIC0xNjY1LDE0ICsxODU2LDE2IEBACiAJCQkJCX0KIAkJCQl9CiAJCQl9Ci0JCQlGbGFncyAmPSBOVl9SWDJfQ0hFQ0tTVU1NQVNLOwotCQkJaWYgKEZsYWdzID09IE5WX1JYMl9DSEVDS1NVTU9LMSB8fAotCQkJCQlGbGFncyA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzIgfHwKLQkJCQkJRmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0szKSB7Ci0JCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaHcgY2hlY2tzdW0gaGl0IS5cbiIsIGRldi0+bmFtZSk7Ci0JCQkJbnAtPnJ4X3NrYnVmZltpXS0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCQl9IGVsc2UgewotCQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGh3Y2hlY2tzdW0gbWlzcyEuXG4iLCBkZXYtPm5hbWUpOworCQkJaWYgKG5wLT50eHJ4Y3RsX2JpdHMgJiBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0spIHsKKwkJCQlGbGFncyAmPSBOVl9SWDJfQ0hFQ0tTVU1NQVNLOworCQkJCWlmIChGbGFncyA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzEgfHwKKwkJCQkgICAgRmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0syIHx8CisJCQkJICAgIEZsYWdzID09IE5WX1JYMl9DSEVDS1NVTU9LMykgeworCQkJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBodyBjaGVja3N1bSBoaXQhLlxuIiwgZGV2LT5uYW1lKTsKKwkJCQkJbnAtPnJ4X3NrYnVmZltpXS0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaHdjaGVja3N1bSBtaXNzIS5cbiIsIGRldi0+bmFtZSk7CisJCQkJfQogCQkJfQogCQl9CiAJCS8qIGdvdCBhIHZhbGlkIHBhY2tldCAtIGZvcndhcmQgaXQgdG8gdGhlIG5ldHdvcmsgY29yZSAqLwpAQCAtMTczNyw3ICsxOTMwLDcgQEAKIAkJICogQ2hhbmdpbmcgdGhlIE1UVSBpcyBhIHJhcmUgZXZlbnQsIGl0IHNob3VsZG4ndCBtYXR0ZXIuCiAJCSAqLwogCQludl9kaXNhYmxlX2lycShkZXYpOwotCQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJLyogc3RvcCBlbmdpbmVzICovCiAJCW52X3N0b3BfcngoZGV2KTsKQEAgLTE3NDcsMTggKzE5NDAsMTUgQEAKIAkJbnZfZHJhaW5fcngoZGV2KTsKIAkJbnZfZHJhaW5fdHgoZGV2KTsKIAkJLyogcmVpbml0IGRyaXZlciB2aWV3IG9mIHRoZSByeCBxdWV1ZSAqLwotCQludl9pbml0X3J4KGRldik7Ci0JCW52X2luaXRfdHgoZGV2KTsKLQkJLyogYWxsb2MgbmV3IHJ4IGJ1ZmZlcnMgKi8KIAkJc2V0X2J1ZnNpemUoZGV2KTsKLQkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKKwkJaWYgKG52X2luaXRfcmluZyhkZXYpKSB7CiAJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKIAkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQl9CiAJCS8qIHJlaW5pdCBuaWMgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KIAkJd3JpdGVsKG5wLT5yeF9idWZfc3osIGJhc2UgKyBOdlJlZ09mZmxvYWRDb25maWcpOwogCQlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKLQkJd3JpdGVsKCAoKFJYX1JJTkctMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChUWF9SSU5HLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwkJd3JpdGVsKCAoKG5wLT5yeF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKIAkJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CiAJCXBjaV9wdXNoKGJhc2UpOwogCQl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOwpAQCAtMTc2OCw3ICsxOTU4LDcgQEAKIAkJbnZfc3RhcnRfcngoZGV2KTsKIAkJbnZfc3RhcnRfdHgoZGV2KTsKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xODAzLDcgKzE5OTMsNyBAQAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAogCQkvKiBzdG9wIHJ4IGVuZ2luZSAqLwpAQCAtMTgxNSw3ICsyMDA1LDcgQEAKIAkJLyogcmVzdGFydCByeCBlbmdpbmUgKi8KIAkJbnZfc3RhcnRfcngoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCX0gZWxzZSB7CiAJCW52X2NvcHlfbWFjX3RvX2h3KGRldik7CiAJfQpAQCAtMTgyNCw3ICsyMDE0LDcgQEAKIAogLyoKICAqIG52X3NldF9tdWx0aWNhc3Q6IGRldi0+c2V0X211bHRpY2FzdCBmdW5jdGlvbgotICogQ2FsbGVkIHdpdGggZGV2LT54bWl0X2xvY2sgaGVsZC4KKyAqIENhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgaGVsZC4KICAqLwogc3RhdGljIHZvaWQgbnZfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTgzMiwxNiArMjAyMiwxNiBAQAogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIGFkZHJbMl07CiAJdTMyIG1hc2tbMl07Ci0JdTMyIHBmZjsKKwl1MzIgcGZmID0gcmVhZGwoYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpICYgTlZSRUdfUEZGX1BBVVNFX1JYOwogCiAJbWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7CiAJbWVtc2V0KG1hc2ssIDAsIHNpemVvZihtYXNrKSk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7Ci0JCXBmZiA9IE5WUkVHX1BGRl9QUk9NSVNDOworCQlwZmYgfD0gTlZSRUdfUEZGX1BST01JU0M7CiAJfSBlbHNlIHsKLQkJcGZmID0gTlZSRUdfUEZGX01ZQUREUjsKKwkJcGZmIHw9IE5WUkVHX1BGRl9NWUFERFI7CiAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19saXN0KSB7CiAJCQl1MzIgYWx3YXlzT2ZmWzJdOwpAQCAtMTg4Niw2ICsyMDc2LDM1IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiB9CiAKK3ZvaWQgbnZfdXBkYXRlX3BhdXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwYXVzZV9mbGFncykKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisKKwlucC0+cGF1c2VfZmxhZ3MgJj0gfihOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRSB8IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFKTsKKworCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX0NBUEFCTEUpIHsKKwkJdTMyIHBmZiA9IHJlYWRsKGJhc2UgKyBOdlJlZ1BhY2tldEZpbHRlckZsYWdzKSAmIH5OVlJFR19QRkZfUEFVU0VfUlg7CisJCWlmIChwYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFKSB7CisJCQl3cml0ZWwocGZmfE5WUkVHX1BGRl9QQVVTRV9SWCwgYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpOworCQkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOworCQl9IGVsc2UgeworCQkJd3JpdGVsKHBmZiwgYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpOworCQl9CisJfQorCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEUpIHsKKwkJdTMyIHJlZ21pc2MgPSByZWFkbChiYXNlICsgTnZSZWdNaXNjMSkgJiB+TlZSRUdfTUlTQzFfUEFVU0VfVFg7CisJCWlmIChwYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFKSB7CisJCQl3cml0ZWwoTlZSRUdfVFhfUEFVU0VGUkFNRV9FTkFCTEUsICBiYXNlICsgTnZSZWdUeFBhdXNlRnJhbWUpOworCQkJd3JpdGVsKHJlZ21pc2N8TlZSRUdfTUlTQzFfUEFVU0VfVFgsIGJhc2UgKyBOdlJlZ01pc2MxKTsKKwkJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbChOVlJFR19UWF9QQVVTRUZSQU1FX0RJU0FCTEUsICBiYXNlICsgTnZSZWdUeFBhdXNlRnJhbWUpOworCQkJd3JpdGVsKHJlZ21pc2MsIGJhc2UgKyBOdlJlZ01pc2MxKTsKKwkJfQorCX0KK30KKwogLyoqCiAgKiBudl91cGRhdGVfbGlua3NwZWVkOiBTZXR1cCB0aGUgTUFDIGFjY29yZGluZyB0byB0aGUgbGluayBwYXJ0bmVyCiAgKiBAZGV2OiBOZXR3b3JrIGRldmljZSB0byBiZSBjb25maWd1cmVkCkBAIC0xOTAxLDEyICsyMTIwLDE0IEBACiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCWludCBhZHYsIGxwYTsKKwlpbnQgYWR2ID0gMDsKKwlpbnQgbHBhID0gMDsKKwlpbnQgYWR2X2xwYSwgYWR2X3BhdXNlLCBscGFfcGF1c2U7CiAJaW50IG5ld2xzID0gbnAtPmxpbmtzcGVlZDsKIAlpbnQgbmV3ZHVwID0gbnAtPmR1cGxleDsKIAlpbnQgbWlpX3N0YXR1czsKIAlpbnQgcmV0dmFsID0gMDsKLQl1MzIgY29udHJvbF8xMDAwLCBzdGF0dXNfMTAwMCwgcGh5cmVnOworCXUzMiBjb250cm9sXzEwMDAsIHN0YXR1c18xMDAwLCBwaHlyZWcsIHBhdXNlX2ZsYWdzOwogCiAJLyogQk1TUl9MU1RBVFVTIGlzIGxhdGNoZWQsIHJlYWQgaXQgdHdpY2U6CiAJICogd2Ugd2FudCB0aGUgY3VycmVudCB2YWx1ZS4KQEAgLTE5NTIsMTAgKzIxNzMsMTUgQEAKIAkJZ290byBzZXRfc3BlZWQ7CiAJfQogCisJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKKwlscGEgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0xQQSwgTUlJX1JFQUQpOworCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3VwZGF0ZV9saW5rc3BlZWQ6IFBIWSBhZHZlcnRpc2VzIDB4JTA0eCwgbHBhIDB4JTA0eC5cbiIsCisJCQkJZGV2LT5uYW1lLCBhZHYsIGxwYSk7CisKIAlyZXR2YWwgPSAxOwogCWlmIChucC0+Z2lnYWJpdCA9PSBQSFlfR0lHQUJJVCkgewotCQljb250cm9sXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJXzEwMDBCVF9DUiwgTUlJX1JFQUQpOwotCQlzdGF0dXNfMTAwMCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfMTAwMEJUX1NSLCBNSUlfUkVBRCk7CisJCWNvbnRyb2xfMTAwMCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKKwkJc3RhdHVzXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX1NUQVQxMDAwLCBNSUlfUkVBRCk7CiAKIAkJaWYgKChjb250cm9sXzEwMDAgJiBBRFZFUlRJU0VfMTAwMEZVTEwpICYmCiAJCQkoc3RhdHVzXzEwMDAgJiBMUEFfMTAwMEZVTEwpKSB7CkBAIC0xOTY3LDI3ICsyMTkzLDIyIEBACiAJCX0KIAl9CiAKLQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOwotCWxwYSA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfTFBBLCBNSUlfUkVBRCk7Ci0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdXBkYXRlX2xpbmtzcGVlZDogUEhZIGFkdmVydGlzZXMgMHglMDR4LCBscGEgMHglMDR4LlxuIiwKLQkJCQlkZXYtPm5hbWUsIGFkdiwgbHBhKTsKLQogCS8qIEZJWE1FOiBoYW5kbGUgcGFyYWxsZWwgZGV0ZWN0aW9uIHByb3Blcmx5ICovCi0JbHBhID0gbHBhICYgYWR2OwotCWlmIChscGEgJiBMUEFfMTAwRlVMTCkgeworCWFkdl9scGEgPSBscGEgJiBhZHY7CisJaWYgKGFkdl9scGEgJiBMUEFfMTAwRlVMTCkgewogCQluZXdscyA9IE5WUkVHX0xJTktTUEVFRF9GT1JDRXxOVlJFR19MSU5LU1BFRURfMTAwOwogCQluZXdkdXAgPSAxOwotCX0gZWxzZSBpZiAobHBhICYgTFBBXzEwMEhBTEYpIHsKKwl9IGVsc2UgaWYgKGFkdl9scGEgJiBMUEFfMTAwSEFMRikgewogCQluZXdscyA9IE5WUkVHX0xJTktTUEVFRF9GT1JDRXxOVlJFR19MSU5LU1BFRURfMTAwOwogCQluZXdkdXAgPSAwOwotCX0gZWxzZSBpZiAobHBhICYgTFBBXzEwRlVMTCkgeworCX0gZWxzZSBpZiAoYWR2X2xwYSAmIExQQV8xMEZVTEwpIHsKIAkJbmV3bHMgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZSRUdfTElOS1NQRUVEXzEwOwogCQluZXdkdXAgPSAxOwotCX0gZWxzZSBpZiAobHBhICYgTFBBXzEwSEFMRikgeworCX0gZWxzZSBpZiAoYWR2X2xwYSAmIExQQV8xMEhBTEYpIHsKIAkJbmV3bHMgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZSRUdfTElOS1NQRUVEXzEwOwogCQluZXdkdXAgPSAwOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJhZCBhYmlsaXR5ICUwNHggLSBmYWxsaW5nIGJhY2sgdG8gMTBIRC5cbiIsIGRldi0+bmFtZSwgbHBhKTsKKwkJZHByaW50ayhLRVJOX0RFQlVHICIlczogYmFkIGFiaWxpdHkgJTA0eCAtIGZhbGxpbmcgYmFjayB0byAxMEhELlxuIiwgZGV2LT5uYW1lLCBhZHZfbHBhKTsKIAkJbmV3bHMgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZSRUdfTElOS1NQRUVEXzEwOwogCQluZXdkdXAgPSAwOwogCX0KQEAgLTIwMzAsNiArMjI1MSw0NiBAQAogCXdyaXRlbChucC0+bGlua3NwZWVkLCBiYXNlICsgTnZSZWdMaW5rU3BlZWQpOwogCXBjaV9wdXNoKGJhc2UpOwogCisJcGF1c2VfZmxhZ3MgPSAwOworCS8qIHNldHVwIHBhdXNlIGZyYW1lICovCisJaWYgKG5wLT5kdXBsZXggIT0gMCkgeworCQlpZiAobnAtPmF1dG9uZWcgJiYgbnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9BVVRPTkVHKSB7CisJCQlhZHZfcGF1c2UgPSBhZHYgJiAoQURWRVJUSVNFX1BBVVNFX0NBUHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOworCQkJbHBhX3BhdXNlID0gbHBhICYgKExQQV9QQVVTRV9DQVB8IExQQV9QQVVTRV9BU1lNKTsKKworCQkJc3dpdGNoIChhZHZfcGF1c2UpIHsKKwkJCWNhc2UgKEFEVkVSVElTRV9QQVVTRV9DQVApOgorCQkJCWlmIChscGFfcGF1c2UgJiBMUEFfUEFVU0VfQ0FQKSB7CisJCQkJCXBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOworCQkJCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9SRVEpCisJCQkJCQlwYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIChBRFZFUlRJU0VfUEFVU0VfQVNZTSk6CisJCQkJaWYgKGxwYV9wYXVzZSA9PSAoTFBBX1BBVVNFX0NBUHwgTFBBX1BBVVNFX0FTWU0pKQorCQkJCXsKKwkJCQkJcGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAoQURWRVJUSVNFX1BBVVNFX0NBUHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOgorCQkJCWlmIChscGFfcGF1c2UgJiBMUEFfUEFVU0VfQ0FQKQorCQkJCXsKKwkJCQkJcGF1c2VfZmxhZ3MgfD0gIE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOworCQkJCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9SRVEpCisJCQkJCQlwYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRTsKKwkJCQl9CisJCQkJaWYgKGxwYV9wYXVzZSA9PSBMUEFfUEFVU0VfQVNZTSkKKwkJCQl7CisJCQkJCXBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXBhdXNlX2ZsYWdzID0gbnAtPnBhdXNlX2ZsYWdzOworCQl9CisJfQorCW52X3VwZGF0ZV9wYXVzZShkZXYsIHBhdXNlX2ZsYWdzKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIwOTAsNyArMjM1MSw3IEBACiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQludl90eF9kb25lKGRldik7CiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQorCiAJCW52X3J4X3Byb2Nlc3MoZGV2KTsKIAkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKIAkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtMjA5OCw3ICsyMzU5LDcgQEAKIAkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJfQotCQkKKwogCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKIAkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKQEAgLTIxNjMsNyArMjQyNCw3IEBACiAJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJbnZfdHhfZG9uZShkZXYpOwogCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKLQkJCisKIAkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfVFhfRVJSKSkgewogCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2JhYmx5IFRYIGZhaWwuXG4iLAogCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwpAQCAtMjIwNiw3ICsyNDY3LDcgQEAKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcnggaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7CiAJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJCWJyZWFrOwotCQkKKwogCQludl9yeF9wcm9jZXNzKGRldik7CiAJCWlmIChudl9hbGxvY19yeChkZXYpKSB7CiAJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CkBAIC0yMjE0LDcgKzI0NzUsNyBAQAogCQkJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CiAJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJfQotCQkKKwogCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgewogCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KQEAgLTIyNTMsNyArMjUxNCw3IEBACiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOwogCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCiAJCQlicmVhazsKLQkJCisKIAkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSB7CiAJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQludl9saW5rX2lycShkZXYpOwpAQCAtMjI5MCw2ICsyNTUxLDE3NSBAQAogCXJldHVybiBJUlFfUkVUVkFMKGkpOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV90ZXN0KGludCBmb28sIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIGV2ZW50czsKKworCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfdGVzdFxuIiwgZGV2LT5uYW1lKTsKKworCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgeworCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOworCQl3cml0ZWwoTlZSRUdfSVJRX1RJTUVSLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCX0gZWxzZSB7CisJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOworCQl3cml0ZWwoTlZSRUdfSVJRX1RJTUVSLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwl9CisJcGNpX3B1c2goYmFzZSk7CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7CisJaWYgKCEoZXZlbnRzICYgTlZSRUdfSVJRX1RJTUVSKSkKKwkJcmV0dXJuIElSUV9SRVRWQUwoMCk7CisKKwlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwlucC0+aW50cl90ZXN0ID0gMTsKKwlzcGluX3VubG9jaygmbnAtPmxvY2spOworCisJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV90ZXN0IGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKKworCXJldHVybiBJUlFfUkVUVkFMKDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRfbXNpeF92ZWN0b3JfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2ZWN0b3IsIHUzMiBpcnFtYXNrKQoreworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJaW50IGk7CisJdTMyIG1zaXhtYXAgPSAwOworCisJLyogRWFjaCBpbnRlcnJ1cHQgYml0IGNhbiBiZSBtYXBwZWQgdG8gYSBNU0lYIHZlY3RvciAoNCBiaXRzKS4KKwkgKiBNU0lYTWFwMCByZXByZXNlbnRzIHRoZSBmaXJzdCA4IGludGVycnVwdHMgYW5kIE1TSVhNYXAxIHJlcHJlc2VudHMKKwkgKiB0aGUgcmVtYWluaW5nIDggaW50ZXJydXB0cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICgoaXJxbWFzayA+PiBpKSAmIDB4MSkgeworCQkJbXNpeG1hcCB8PSB2ZWN0b3IgPDwgKGkgPDwgMik7CisJCX0KKwl9CisJd3JpdGVsKHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhNYXAwKSB8IG1zaXhtYXAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKworCW1zaXhtYXAgPSAwOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKChpcnFtYXNrID4+IChpICsgOCkpICYgMHgxKSB7CisJCQltc2l4bWFwIHw9IHZlY3RvciA8PCAoaSA8PCAyKTsKKwkJfQorCX0KKwl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnTVNJWE1hcDEpIHwgbXNpeG1hcCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworfQorCitzdGF0aWMgaW50IG52X3JlcXVlc3RfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3Rlc3QpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJaW50IHJldCA9IDE7CisJaW50IGk7CisKKwlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIHsKKwkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7CisJCQlucC0+bXNpX3hfZW50cnlbaV0uZW50cnkgPSBpOworCQl9CisJCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5wLT5wY2lfZGV2LCBucC0+bXNpX3hfZW50cnksIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSkpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKKwkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUICYmICFpbnRyX3Rlc3QpIHsKKwkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgcnggaGFuZGxpbmcgKi8KKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLCAmbnZfbmljX2lycV9yeCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciByeCAlZFxuIiwgcmV0KTsKKwkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJCQkJCWdvdG8gb3V0X2VycjsKKwkJCQl9CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHR4IGhhbmRsaW5nICovCisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwgJm52X25pY19pcnFfdHgsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgdHggJWRcbiIsIHJldCk7CisJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOworCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9mcmVlX3J4OworCQkJCX0KKwkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgbGluayBhbmQgdGltZXIgaGFuZGxpbmcgKi8KKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yLCAmbnZfbmljX2lycV9vdGhlciwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciBsaW5rICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZnJlZV90eDsKKwkJCQl9CisJCQkJLyogbWFwIGludGVycnVwdHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2ZWN0b3IgKi8KKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDApOworCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMSk7CisJCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9SWCwgTlZSRUdfSVJRX1JYX0FMTCk7CisJCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9UWCwgTlZSRUdfSVJRX1RYX0FMTCk7CisJCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9PVEhFUiwgTlZSRUdfSVJRX09USEVSKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGFsbCBpbnRlcnJ1cHRzICovCisJCQkJaWYgKCghaW50cl90ZXN0ICYmCisJCQkJICAgICByZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB8fAorCQkJCSAgICAoaW50cl90ZXN0ICYmCisJCQkJICAgICByZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2lycV90ZXN0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZXJyOworCQkJCX0KKworCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHZlY3RvciAwICovCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworCQkJfQorCQl9CisJfQorCWlmIChyZXQgIT0gMCAmJiBucC0+bXNpX2ZsYWdzICYgTlZfTVNJX0NBUEFCTEUpIHsKKwkJaWYgKChyZXQgPSBwY2lfZW5hYmxlX21zaShucC0+cGNpX2RldikpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0VOQUJMRUQ7CisJCQlpZiAoKCFpbnRyX3Rlc3QgJiYgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCSAgICAoaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxX3Rlc3QsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOworCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOworCQkJCWdvdG8gb3V0X2VycjsKKwkJCX0KKworCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVjdG9yIDAgKi8KKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAwKTsKKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAxKTsKKwkJCS8qIGVuYWJsZSBtc2kgdmVjdG9yIDAgKi8KKwkJCXdyaXRlbChOVlJFR19NU0lfVkVDVE9SXzBfRU5BQkxFRCwgYmFzZSArIE52UmVnTVNJSXJxTWFzayk7CisJCX0KKwl9CisJaWYgKHJldCAhPSAwKSB7CisJCWlmICgoIWludHJfdGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB8fAorCQkgICAgKGludHJfdGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycV90ZXN0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApKQorCQkJZ290byBvdXRfZXJyOworCisJfQorCisJcmV0dXJuIDA7CitvdXRfZnJlZV90eDoKKwlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsIGRldik7CitvdXRfZnJlZV9yeDoKKwlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsIGRldik7CitvdXRfZXJyOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBudl9mcmVlX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwlpbnQgaTsKKworCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgeworCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKKwkJCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsIGRldik7CisJCX0KKwkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJZnJlZV9pcnEobnAtPnBjaV9kZXYtPmlycSwgZGV2KTsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkgeworCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKKwkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBudl9kb19uaWNfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwpAQCAtMjMyNiw3ICsyNzU2LDcgQEAKIAlucC0+bmljX3BvbGxfaXJxID0gMDsKIAogCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHN5bmNocm9uaXplX2lycShkZXYtPmlycSkgaGVyZT8gKi8KLQkKKwogCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKIAlwY2lfcHVzaChiYXNlKTsKIApAQCAtMjM1OSw2ICsyNzg5LDU2IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgbnZfZG9fc3RhdHNfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKworCW5wLT5lc3RhdHMudHhfYnl0ZXMgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhDbnQpOworCW5wLT5lc3RhdHMudHhfemVyb19yZXhtdCArPSByZWFkbChiYXNlICsgTnZSZWdUeFplcm9SZVhtdCk7CisJbnAtPmVzdGF0cy50eF9vbmVfcmV4bXQgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhPbmVSZVhtdCk7CisJbnAtPmVzdGF0cy50eF9tYW55X3JleG10ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4TWFueVJlWG10KTsKKwlucC0+ZXN0YXRzLnR4X2xhdGVfY29sbGlzaW9uICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4TGF0ZUNvbCk7CisJbnAtPmVzdGF0cy50eF9maWZvX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdUeFVuZGVyZmxvdyk7CisJbnAtPmVzdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdUeExvc3NDYXJyaWVyKTsKKwlucC0+ZXN0YXRzLnR4X2V4Y2Vzc19kZWZlcnJhbCArPSByZWFkbChiYXNlICsgTnZSZWdUeEV4Y2Vzc0RlZik7CisJbnAtPmVzdGF0cy50eF9yZXRyeV9lcnJvciArPSByZWFkbChiYXNlICsgTnZSZWdUeFJldHJ5RXJyKTsKKwlucC0+ZXN0YXRzLnR4X2RlZmVycmFsICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4RGVmKTsKKwlucC0+ZXN0YXRzLnR4X3BhY2tldHMgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhGcmFtZSk7CisJbnAtPmVzdGF0cy50eF9wYXVzZSArPSByZWFkbChiYXNlICsgTnZSZWdUeFBhdXNlKTsKKwlucC0+ZXN0YXRzLnJ4X2ZyYW1lX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVFcnIpOworCW5wLT5lc3RhdHMucnhfZXh0cmFfYnl0ZSArPSByZWFkbChiYXNlICsgTnZSZWdSeEV4dHJhQnl0ZSk7CisJbnAtPmVzdGF0cy5yeF9sYXRlX2NvbGxpc2lvbiArPSByZWFkbChiYXNlICsgTnZSZWdSeExhdGVDb2wpOworCW5wLT5lc3RhdHMucnhfcnVudCArPSByZWFkbChiYXNlICsgTnZSZWdSeFJ1bnQpOworCW5wLT5lc3RhdHMucnhfZnJhbWVfdG9vX2xvbmcgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhGcmFtZVRvb0xvbmcpOworCW5wLT5lc3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhPdmVyZmxvdyk7CisJbnAtPmVzdGF0cy5yeF9jcmNfZXJyb3JzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RkNTRXJyKTsKKwlucC0+ZXN0YXRzLnJ4X2ZyYW1lX2FsaWduX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVBbGlnbkVycik7CisJbnAtPmVzdGF0cy5yeF9sZW5ndGhfZXJyb3IgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhMZW5FcnIpOworCW5wLT5lc3RhdHMucnhfdW5pY2FzdCArPSByZWFkbChiYXNlICsgTnZSZWdSeFVuaWNhc3QpOworCW5wLT5lc3RhdHMucnhfbXVsdGljYXN0ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4TXVsdGljYXN0KTsKKwlucC0+ZXN0YXRzLnJ4X2Jyb2FkY2FzdCArPSByZWFkbChiYXNlICsgTnZSZWdSeEJyb2FkY2FzdCk7CisJbnAtPmVzdGF0cy5yeF9ieXRlcyArPSByZWFkbChiYXNlICsgTnZSZWdSeENudCk7CisJbnAtPmVzdGF0cy5yeF9wYXVzZSArPSByZWFkbChiYXNlICsgTnZSZWdSeFBhdXNlKTsKKwlucC0+ZXN0YXRzLnJ4X2Ryb3BfZnJhbWUgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhEcm9wRnJhbWUpOworCW5wLT5lc3RhdHMucnhfcGFja2V0cyA9CisJCW5wLT5lc3RhdHMucnhfdW5pY2FzdCArCisJCW5wLT5lc3RhdHMucnhfbXVsdGljYXN0ICsKKwkJbnAtPmVzdGF0cy5yeF9icm9hZGNhc3Q7CisJbnAtPmVzdGF0cy5yeF9lcnJvcnNfdG90YWwgPQorCQlucC0+ZXN0YXRzLnJ4X2NyY19lcnJvcnMgKworCQlucC0+ZXN0YXRzLnJ4X292ZXJfZXJyb3JzICsKKwkJbnAtPmVzdGF0cy5yeF9mcmFtZV9lcnJvciArCisJCShucC0+ZXN0YXRzLnJ4X2ZyYW1lX2FsaWduX2Vycm9yIC0gbnAtPmVzdGF0cy5yeF9leHRyYV9ieXRlKSArCisJCW5wLT5lc3RhdHMucnhfbGF0ZV9jb2xsaXNpb24gKworCQlucC0+ZXN0YXRzLnJ4X3J1bnQgKworCQlucC0+ZXN0YXRzLnJ4X2ZyYW1lX3Rvb19sb25nOworCisJaWYgKCFucC0+aW5fc2h1dGRvd24pCisJCW1vZF90aW1lcigmbnAtPnN0YXRzX3BvbGwsIGppZmZpZXMgKyBTVEFUU19JTlRFUlZBTCk7Cit9CisKIHN0YXRpYyB2b2lkIG52X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTIzODIsMTcgKzI4NjIsMTkgQEAKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIGZsYWdzID0gMDsKIAotCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAlpZiAod29saW5mby0+d29sb3B0cyA9PSAwKSB7Ci0JCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdXYWtlVXBGbGFncyk7CiAJCW5wLT53b2xlbmFibGVkID0gMDsKLQl9Ci0JaWYgKHdvbGluZm8tPndvbG9wdHMgJiBXQUtFX01BR0lDKSB7Ci0JCXdyaXRlbChOVlJFR19XQUtFVVBGTEFHU19FTkFCTEUsIGJhc2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsKKwl9IGVsc2UgaWYgKHdvbGluZm8tPndvbG9wdHMgJiBXQUtFX01BR0lDKSB7CiAJCW5wLT53b2xlbmFibGVkID0gMTsKKwkJZmxhZ3MgPSBOVlJFR19XQUtFVVBGTEFHU19FTkFCTEU7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCQl3cml0ZWwoZmxhZ3MsIGJhc2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yNDA2LDkgKzI4ODgsMTcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkvKiBXZSBkbyBub3QgdHJhY2sgbGluayBzcGVlZCAvIGR1cGxleCBzZXR0aW5nIGlmIHRoZQogCQkgKiBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIEZvcmNlIGEgbGluayBjaGVjayAqLwotCQludl91cGRhdGVfbGlua3NwZWVkKGRldik7CisJCWlmIChudl91cGRhdGVfbGlua3NwZWVkKGRldikpIHsKKwkJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJfQogCX0KLQlzd2l0Y2gobnAtPmxpbmtzcGVlZCAmIChOVlJFR19MSU5LU1BFRURfTUFTSykpIHsKKworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJc3dpdGNoKG5wLT5saW5rc3BlZWQgJiAoTlZSRUdfTElOS1NQRUVEX01BU0spKSB7CiAJCWNhc2UgTlZSRUdfTElOS1NQRUVEXzEwOgogCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKIAkJCWJyZWFrOwpAQCAtMjQxOCwxMCArMjkwOCwxNCBAQAogCQljYXNlIE5WUkVHX0xJTktTUEVFRF8xMDAwOgogCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOwogCQkJYnJlYWs7CisJCX0KKwkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCWlmIChucC0+ZHVwbGV4KQorCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJfSBlbHNlIHsKKwkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQotCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwotCWlmIChucC0+ZHVwbGV4KQotCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAogCWVjbWQtPmF1dG9uZWcgPSBucC0+YXV0b25lZzsKIApAQCAtMjQyOSwyMyArMjkyMywyMCBAQAogCWlmIChucC0+YXV0b25lZykgewogCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CiAJCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBNSUlfUkVBRCk7Ci0JfSBlbHNlIHsKLQkJYWR2ID0gbnAtPmZpeGVkX21vZGU7CisJCWlmIChhZHYgJiBBRFZFUlRJU0VfMTBIQUxGKQorCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7CisJCWlmIChhZHYgJiBBRFZFUlRJU0VfMTBGVUxMKQorCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGw7CisJCWlmIChhZHYgJiBBRFZFUlRJU0VfMTAwSEFMRikKKwkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKKwkJaWYgKGFkdiAmIEFEVkVSVElTRV8xMDBGVUxMKQorCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOworCQlpZiAobnAtPmdpZ2FiaXQgPT0gUEhZX0dJR0FCSVQpIHsKKwkJCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKKwkJCWlmIChhZHYgJiBBRFZFUlRJU0VfMTAwMEZVTEwpCisJCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKwkJfQogCX0KLQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwSEFMRikKLQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7Ci0JaWYgKGFkdiAmIEFEVkVSVElTRV8xMEZVTEwpCi0JCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOwotCWlmIChhZHYgJiBBRFZFUlRJU0VfMTAwSEFMRikKLQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOwotCWlmIChhZHYgJiBBRFZFUlRJU0VfMTAwRlVMTCkKLQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOwotCWlmIChucC0+YXV0b25lZyAmJiBucC0+Z2lnYWJpdCA9PSBQSFlfR0lHQUJJVCkgewotCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJXzEwMDBCVF9DUiwgTUlJX1JFQUQpOwotCQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwMDBGVUxMKQotCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKLQl9Ci0KIAllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEX0F1dG9uZWcgfAogCQlTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CiAJCVNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfApAQCAtMjQ5Nyw3ICsyOTg4LDE4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkvKiBzdG9wIGVuZ2luZXMgKi8KKwkJbnZfc3RvcF9yeChkZXYpOworCQludl9zdG9wX3R4KGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJfQorCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJaW50IGFkdiwgYm1jcjsKIApAQCAtMjUwNSw3ICszMDA3LDcgQEAKIAogCQkvKiBhZHZlcnRpc2Ugb25seSB3aGF0IGhhcyBiZWVuIHJlcXVlc3RlZCAqLwogCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOwotCQlhZHYgJj0gfihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFXzEwMEJBU0U0KTsKKwkJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCB8IEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTSk7CiAJCWlmIChlY21kLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMEhBTEY7CiAJCWlmIChlY21kLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKQpAQCAtMjUxNCwxNiArMzAxNiwyMiBAQAogCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOwogCQlpZiAoZWNtZC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpCiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7CisJCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX1JFUSkgIC8qIGZvciByeCB3ZSBzZXQgYm90aCBhZHZlcnRpc21lbnRzIGJ1dCBkaXNhYmxlIHR4IHBhdXNlICovCisJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKQorCQkJYWR2IHw9ICBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKIAkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7CiAKIAkJaWYgKG5wLT5naWdhYml0ID09IFBIWV9HSUdBQklUKSB7Ci0JCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJXzEwMDBCVF9DUiwgTUlJX1JFQUQpOworCQkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9DVFJMMTAwMCwgTUlJX1JFQUQpOwogCQkJYWR2ICY9IH5BRFZFUlRJU0VfMTAwMEZVTEw7CiAJCQlpZiAoZWNtZC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQogCQkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7Ci0JCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJXzEwMDBCVF9DUiwgYWR2KTsKKwkJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIGFkdik7CiAJCX0KIAorCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93bi5cbiIsIGRldi0+bmFtZSk7CiAJCWJtY3IgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKIAkJYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBibWNyKTsKQEAgLTI1MzQsNyArMzA0Miw3IEBACiAJCW5wLT5hdXRvbmVnID0gMDsKIAogCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOwotCQlhZHYgJj0gfihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFXzEwMEJBU0U0KTsKKwkJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCB8IEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTSk7CiAJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMCAmJiBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKIAkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKQEAgLTI1NDMsMzAgKzMwNTEsNDkgQEAKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKIAkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCAmJiBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7CisJCW5wLT5wYXVzZV9mbGFncyAmPSB+KE5WX1BBVVNFRlJBTUVfQVVUT05FR3xOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRXxOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRSk7CisJCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX1JFUSkgey8qIGZvciByeCB3ZSBzZXQgYm90aCBhZHZlcnRpc21lbnRzIGJ1dCBkaXNhYmxlIHR4IHBhdXNlICovCisJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKwkJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRTsKKwkJfQorCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9SRVEpIHsKKwkJCWFkdiB8PSAgQURWRVJUSVNFX1BBVVNFX0FTWU07CisJCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEU7CisJCX0KIAkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7CiAJCW5wLT5maXhlZF9tb2RlID0gYWR2OwogCiAJCWlmIChucC0+Z2lnYWJpdCA9PSBQSFlfR0lHQUJJVCkgewotCQkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIE1JSV9SRUFEKTsKKwkJCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKIAkJCWFkdiAmPSB+QURWRVJUSVNFXzEwMDBGVUxMOwotCQkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIGFkdik7CisJCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBhZHYpOwogCQl9CiAKIAkJYm1jciA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOwotCQlibWNyIHw9IH4oQk1DUl9BTkVOQUJMRXxCTUNSX1NQRUVEMTAwfEJNQ1JfRlVMTERQTFgpOwotCQlpZiAoYWR2ICYgKEFEVkVSVElTRV8xMEZVTEx8QURWRVJUSVNFXzEwMEZVTEwpKQorCQlibWNyICY9IH4oQk1DUl9BTkVOQUJMRXxCTUNSX1NQRUVEMTAwfEJNQ1JfU1BFRUQxMDAwfEJNQ1JfRlVMTERQTFgpOworCQlpZiAobnAtPmZpeGVkX21vZGUgJiAoQURWRVJUSVNFXzEwRlVMTHxBRFZFUlRJU0VfMTAwRlVMTCkpCiAJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7Ci0JCWlmIChhZHYgJiAoQURWRVJUSVNFXzEwMEhBTEZ8QURWRVJUSVNFXzEwMEZVTEwpKQorCQlpZiAobnAtPmZpeGVkX21vZGUgJiAoQURWRVJUSVNFXzEwMEhBTEZ8QURWRVJUSVNFXzEwMEZVTEwpKQogCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOwogCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIGJtY3IpOwotCi0JCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJaWYgKG5wLT5waHlfb3VpID09IFBIWV9PVUlfTUFSVkVMTCkgeworCQkJLyogcmVzZXQgdGhlIHBoeSAqLworCQkJaWYgKHBoeV9yZXNldChkZXYpKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSByZXNldCBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQkvKiBXYWl0IGEgYml0IGFuZCB0aGVuIHJlY29uZmlndXJlIHRoZSBuaWMuICovCiAJCQl1ZGVsYXkoMTApOwogCQkJbnZfbGlua2NoYW5nZShkZXYpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQludl9zdGFydF9yeChkZXYpOworCQludl9zdGFydF90eChkZXYpOworCQludl9lbmFibGVfaXJxKGRldik7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTk4LDI0ICszMTI1LDM5IEBACiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCWlmIChucC0+YXV0b25lZykgewogCQlpbnQgYm1jcjsKIAorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQludl9kaXNhYmxlX2lycShkZXYpOworCQkJc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCS8qIHN0b3AgZW5naW5lcyAqLworCQkJbnZfc3RvcF9yeChkZXYpOworCQkJbnZfc3RvcF90eChkZXYpOworCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBkb3duLlxuIiwgZGV2LT5uYW1lKTsKKwkJfQorCiAJCWJtY3IgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKIAkJYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBibWNyKTsKIAorCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQludl9zdGFydF9yeChkZXYpOworCQkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJCW52X2VuYWJsZV9pcnEoZGV2KTsKKwkJfQogCQlyZXQgPSAwOwogCX0gZWxzZSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIE5FVElGX0ZfVFNPCiBzdGF0aWMgaW50IG52X3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yNjIzLDkgKzMxNjUsNjQ0IEBACiAJaWYgKChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSkKIAkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3RzbyhkZXYsIHZhbHVlKTsKIAllbHNlCi0JCXJldHVybiB2YWx1ZSA/IC1FT1BOT1RTVVBQIDogMDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQotI2VuZGlmCisKK3N0YXRpYyB2b2lkIG52X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtKiByaW5nKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkgPyBSSU5HX01BWF9ERVNDX1ZFUl8xIDogUklOR19NQVhfREVTQ19WRVJfMl8zOworCXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOworCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKwlyaW5nLT50eF9tYXhfcGVuZGluZyA9IChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkgPyBSSU5HX01BWF9ERVNDX1ZFUl8xIDogUklOR19NQVhfREVTQ19WRVJfMl8zOworCisJcmluZy0+cnhfcGVuZGluZyA9IG5wLT5yeF9yaW5nX3NpemU7CisJcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKKwlyaW5nLT50eF9wZW5kaW5nID0gbnAtPnR4X3Jpbmdfc2l6ZTsKK30KKworc3RhdGljIGludCBudl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSogcmluZykKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTggKnJ4dHhfcmluZywgKnJ4X3NrYnVmZiwgKnR4X3NrYnVmZiwgKnJ4X2RtYSwgKnR4X2RtYSwgKnR4X2RtYV9sZW47CisJZG1hX2FkZHJfdCByaW5nX2FkZHI7CisKKwlpZiAocmluZy0+cnhfcGVuZGluZyA8IFJYX1JJTkdfTUlOIHx8CisJICAgIHJpbmctPnR4X3BlbmRpbmcgPCBUWF9SSU5HX01JTiB8fAorCSAgICByaW5nLT5yeF9taW5pX3BlbmRpbmcgIT0gMCB8fAorCSAgICByaW5nLT5yeF9qdW1ib19wZW5kaW5nICE9IDAgfHwKKwkgICAgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xICYmCisJICAgICAocmluZy0+cnhfcGVuZGluZyA+IFJJTkdfTUFYX0RFU0NfVkVSXzEgfHwKKwkgICAgICByaW5nLT50eF9wZW5kaW5nID4gUklOR19NQVhfREVTQ19WRVJfMSkpIHx8CisJICAgIChucC0+ZGVzY192ZXIgIT0gREVTQ19WRVJfMSAmJgorCSAgICAgKHJpbmctPnJ4X3BlbmRpbmcgPiBSSU5HX01BWF9ERVNDX1ZFUl8yXzMgfHwKKwkgICAgICByaW5nLT50eF9wZW5kaW5nID4gUklOR19NQVhfREVTQ19WRVJfMl8zKSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsb2NhdGUgbmV3IHJpbmdzICovCisJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJCXJ4dHhfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5wLT5wY2lfZGV2LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpICogKHJpbmctPnJ4X3BlbmRpbmcgKyByaW5nLT50eF9wZW5kaW5nKSwKKwkJCQkJICAgICZyaW5nX2FkZHIpOworCX0gZWxzZSB7CisJCXJ4dHhfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5wLT5wY2lfZGV2LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpICogKHJpbmctPnJ4X3BlbmRpbmcgKyByaW5nLT50eF9wZW5kaW5nKSwKKwkJCQkJICAgICZyaW5nX2FkZHIpOworCX0KKwlyeF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogcmluZy0+cnhfcGVuZGluZywgR0ZQX0tFUk5FTCk7CisJcnhfZG1hID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiByaW5nLT5yeF9wZW5kaW5nLCBHRlBfS0VSTkVMKTsKKwl0eF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogcmluZy0+dHhfcGVuZGluZywgR0ZQX0tFUk5FTCk7CisJdHhfZG1hID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiByaW5nLT50eF9wZW5kaW5nLCBHRlBfS0VSTkVMKTsKKwl0eF9kbWFfbGVuID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIHJpbmctPnR4X3BlbmRpbmcsIEdGUF9LRVJORUwpOworCWlmICghcnh0eF9yaW5nIHx8ICFyeF9za2J1ZmYgfHwgIXJ4X2RtYSB8fCAhdHhfc2tidWZmIHx8ICF0eF9kbWEgfHwgIXR4X2RtYV9sZW4pIHsKKwkJLyogZmFsbCBiYWNrIHRvIG9sZCByaW5ncyAqLworCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwkJCWlmKHJ4dHhfcmluZykKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAocmluZy0+cnhfcGVuZGluZyArIHJpbmctPnR4X3BlbmRpbmcpLAorCQkJCQkJICAgIHJ4dHhfcmluZywgcmluZ19hZGRyKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChyeHR4X3JpbmcpCisJCQkJcGNpX2ZyZWVfY29uc2lzdGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpICogKHJpbmctPnJ4X3BlbmRpbmcgKyByaW5nLT50eF9wZW5kaW5nKSwKKwkJCQkJCSAgICByeHR4X3JpbmcsIHJpbmdfYWRkcik7CisJCX0KKwkJaWYgKHJ4X3NrYnVmZikKKwkJCWtmcmVlKHJ4X3NrYnVmZik7CisJCWlmIChyeF9kbWEpCisJCQlrZnJlZShyeF9kbWEpOworCQlpZiAodHhfc2tidWZmKQorCQkJa2ZyZWUodHhfc2tidWZmKTsKKwkJaWYgKHR4X2RtYSkKKwkJCWtmcmVlKHR4X2RtYSk7CisJCWlmICh0eF9kbWFfbGVuKQorCQkJa2ZyZWUodHhfZG1hX2xlbik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW52X2Rpc2FibGVfaXJxKGRldik7CisJCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJLyogc3RvcCBlbmdpbmVzICovCisJCW52X3N0b3BfcngoZGV2KTsKKwkJbnZfc3RvcF90eChkZXYpOworCQludl90eHJ4X3Jlc2V0KGRldik7CisJCS8qIGRyYWluIHF1ZXVlcyAqLworCQludl9kcmFpbl9yeChkZXYpOworCQludl9kcmFpbl90eChkZXYpOworCQkvKiBkZWxldGUgcXVldWVzICovCisJCWZyZWVfcmluZ3MoZGV2KTsKKwl9CisKKwkvKiBzZXQgbmV3IHZhbHVlcyAqLworCW5wLT5yeF9yaW5nX3NpemUgPSByaW5nLT5yeF9wZW5kaW5nOworCW5wLT50eF9yaW5nX3NpemUgPSByaW5nLT50eF9wZW5kaW5nOworCW5wLT50eF9saW1pdF9zdG9wID0gcmluZy0+dHhfcGVuZGluZyAtIFRYX0xJTUlUX0RJRkZFUkVOQ0U7CisJbnAtPnR4X2xpbWl0X3N0YXJ0ID0gcmluZy0+dHhfcGVuZGluZyAtIFRYX0xJTUlUX0RJRkZFUkVOQ0UgLSAxOworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQlucC0+cnhfcmluZy5vcmlnID0gKHN0cnVjdCByaW5nX2Rlc2MqKXJ4dHhfcmluZzsKKwkJbnAtPnR4X3Jpbmcub3JpZyA9ICZucC0+cnhfcmluZy5vcmlnW25wLT5yeF9yaW5nX3NpemVdOworCX0gZWxzZSB7CisJCW5wLT5yeF9yaW5nLmV4ID0gKHN0cnVjdCByaW5nX2Rlc2NfZXgqKXJ4dHhfcmluZzsKKwkJbnAtPnR4X3JpbmcuZXggPSAmbnAtPnJ4X3JpbmcuZXhbbnAtPnJ4X3Jpbmdfc2l6ZV07CisJfQorCW5wLT5yeF9za2J1ZmYgPSAoc3RydWN0IHNrX2J1ZmYqKilyeF9za2J1ZmY7CisJbnAtPnJ4X2RtYSA9IChkbWFfYWRkcl90KilyeF9kbWE7CisJbnAtPnR4X3NrYnVmZiA9IChzdHJ1Y3Qgc2tfYnVmZioqKXR4X3NrYnVmZjsKKwlucC0+dHhfZG1hID0gKGRtYV9hZGRyX3QqKXR4X2RtYTsKKwlucC0+dHhfZG1hX2xlbiA9ICh1bnNpZ25lZCBpbnQqKXR4X2RtYV9sZW47CisJbnAtPnJpbmdfYWRkciA9IHJpbmdfYWRkcjsKKworCW1lbXNldChucC0+cnhfc2tidWZmLCAwLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYqKSAqIG5wLT5yeF9yaW5nX3NpemUpOworCW1lbXNldChucC0+cnhfZG1hLCAwLCBzaXplb2YoZG1hX2FkZHJfdCkgKiBucC0+cnhfcmluZ19zaXplKTsKKwltZW1zZXQobnAtPnR4X3NrYnVmZiwgMCwgc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+dHhfcmluZ19zaXplKTsKKwltZW1zZXQobnAtPnR4X2RtYSwgMCwgc2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnR4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT50eF9kbWFfbGVuLCAwLCBzaXplb2YodW5zaWduZWQgaW50KSAqIG5wLT50eF9yaW5nX3NpemUpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkvKiByZWluaXQgZHJpdmVyIHZpZXcgb2YgdGhlIHF1ZXVlcyAqLworCQlzZXRfYnVmc2l6ZShkZXYpOworCQlpZiAobnZfaW5pdF9yaW5nKGRldikpIHsKKwkJCWlmICghbnAtPmluX3NodXRkb3duKQorCQkJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CisJCX0KKworCQkvKiByZWluaXQgbmljIHZpZXcgb2YgdGhlIHF1ZXVlcyAqLworCQl3cml0ZWwobnAtPnJ4X2J1Zl9zeiwgYmFzZSArIE52UmVnT2ZmbG9hZENvbmZpZyk7CisJCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOworCQl3cml0ZWwoICgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAorCQkJYmFzZSArIE52UmVnUmluZ1NpemVzKTsKKwkJcGNpX3B1c2goYmFzZSk7CisJCXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJCXBjaV9wdXNoKGJhc2UpOworCisJCS8qIHJlc3RhcnQgZW5naW5lcyAqLworCQludl9zdGFydF9yeChkZXYpOworCQludl9zdGFydF90eChkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQludl9lbmFibGVfaXJxKGRldik7CisJfQorCXJldHVybiAwOworZXhpdDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgbnZfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSogcGF1c2UpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXBhdXNlLT5hdXRvbmVnID0gKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfQVVUT05FRykgIT0gMDsKKwlwYXVzZS0+cnhfcGF1c2UgPSAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9FTkFCTEUpICE9IDA7CisJcGF1c2UtPnR4X3BhdXNlID0gKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFKSAhPSAwOworfQorCitzdGF0aWMgaW50IG52X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0qIHBhdXNlKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGFkdiwgYm1jcjsKKworCWlmICgoIW5wLT5hdXRvbmVnICYmIG5wLT5kdXBsZXggPT0gMCkgfHwKKwkgICAgKG5wLT5hdXRvbmVnICYmICFwYXVzZS0+YXV0b25lZyAmJiBucC0+ZHVwbGV4ID09IDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW4gbm90IHNldCBwYXVzZSBzZXR0aW5ncyB3aGVuIGZvcmNlZCBsaW5rIGlzIGluIGhhbGYgZHVwbGV4LlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocGF1c2UtPnR4X3BhdXNlICYmICEobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9DQVBBQkxFKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCB0eCBwYXVzZSBmcmFtZXMuXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkvKiBzdG9wIGVuZ2luZXMgKi8KKwkJbnZfc3RvcF9yeChkZXYpOworCQludl9zdG9wX3R4KGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJfQorCisJbnAtPnBhdXNlX2ZsYWdzICY9IH4oTlZfUEFVU0VGUkFNRV9SWF9SRVF8TlZfUEFVU0VGUkFNRV9UWF9SRVEpOworCWlmIChwYXVzZS0+cnhfcGF1c2UpCisJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1JYX1JFUTsKKwlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9SRVE7CisKKwlpZiAobnAtPmF1dG9uZWcgJiYgcGF1c2UtPmF1dG9uZWcpIHsKKwkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfQVVUT05FRzsKKworCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOworCQlhZHYgJj0gfihBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOworCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpIC8qIGZvciByeCB3ZSBzZXQgYm90aCBhZHZlcnRpc21lbnRzIGJ1dCBkaXNhYmxlIHR4IHBhdXNlICovCisJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKQorCQkJYWR2IHw9ICBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKwkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd24uXG4iLCBkZXYtPm5hbWUpOworCQlibWNyID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CisJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJfSBlbHNlIHsKKwkJbnAtPnBhdXNlX2ZsYWdzICY9IH4oTlZfUEFVU0VGUkFNRV9BVVRPTkVHfE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFfE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFKTsKKwkJaWYgKHBhdXNlLT5yeF9wYXVzZSkKKwkJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRTsKKwkJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRTsKKworCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCW52X3VwZGF0ZV9saW5rc3BlZWQoZGV2KTsKKwkJZWxzZQorCQkJbnZfdXBkYXRlX3BhdXNlKGRldiwgbnAtPnBhdXNlX2ZsYWdzKTsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW52X3N0YXJ0X3J4KGRldik7CisJCW52X3N0YXJ0X3R4KGRldik7CisJCW52X2VuYWJsZV9pcnEoZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgbnZfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiAobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExfUlhDSEVDSykgIT0gMDsKK30KKworc3RhdGljIGludCBudl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJaW50IHJldGNvZGUgPSAwOworCisJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pIHsKKworCQlpZiAoKChucC0+dHhyeGN0bF9iaXRzICYgTlZSRUdfVFhSWENUTF9SWENIRUNLKSAmJiBkYXRhKSB8fAorCQkgICAgKCEobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExfUlhDSEVDSykgJiYgIWRhdGEpKSB7CisJCQkvKiBhbHJlYWR5IHNldCBvciB1bnNldCAqLworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoZGF0YSkgeworCQkJbnAtPnR4cnhjdGxfYml0cyB8PSBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7CisJCX0gZWxzZSBpZiAoIShucC0+dmxhbmN0bF9iaXRzICYgTlZSRUdfVkxBTkNPTlRST0xfRU5BQkxFKSkgeworCQkJbnAtPnR4cnhjdGxfYml0cyAmPSB+TlZSRUdfVFhSWENUTF9SWENIRUNLOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FuIG5vdCBkaXNhYmxlIHJ4IGNoZWNrc3VtIGlmIHZsYW4gaXMgZW5hYmxlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJCXdyaXRlbChucC0+dHhyeGN0bF9iaXRzLCBiYXNlICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiByZXRjb2RlOworfQorCitzdGF0aWMgaW50IG52X3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0oZGV2LCBkYXRhKTsKKwllbHNlCisJCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBudl9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKQorCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfc2coZGV2LCBkYXRhKTsKKwllbHNlCisJCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBudl9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDUykKKwkJcmV0dXJuIChzaXplb2Yoc3RydWN0IG52X2V0aHRvb2xfc3RhdHMpL3NpemVvZih1NjQpKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBudl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZXN0YXRzLCB1NjQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogdXBkYXRlIHN0YXRzICovCisJbnZfZG9fc3RhdHNfcG9sbCgodW5zaWduZWQgbG9uZylkZXYpOworCisJbWVtY3B5KGJ1ZmZlciwgJm5wLT5lc3RhdHMsIG52X2dldF9zdGF0c19jb3VudChkZXYpKnNpemVvZih1NjQpKTsKK30KKworc3RhdGljIGludCBudl9zZWxmX3Rlc3RfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfVEVTVF9FWFRFTkRFRCkKKwkJcmV0dXJuIE5WX1RFU1RfQ09VTlRfRVhURU5ERUQ7CisJZWxzZQorCQlyZXR1cm4gTlZfVEVTVF9DT1VOVF9CQVNFOworfQorCitzdGF0aWMgaW50IG52X2xpbmtfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IG1paV9zdGF0dXM7CisKKwltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNU1IsIE1JSV9SRUFEKTsKKwltaWlfc3RhdHVzID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTVNSLCBNSUlfUkVBRCk7CisKKwkvKiBjaGVjayBwaHkgbGluayBzdGF0dXMgKi8KKwlpZiAoIShtaWlfc3RhdHVzICYgQk1TUl9MU1RBVFVTKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBudl9yZWdpc3Rlcl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwlpbnQgaSA9IDA7CisJdTMyIG9yaWdfcmVhZCwgbmV3X3JlYWQ7CisKKwlkbyB7CisJCW9yaWdfcmVhZCA9IHJlYWRsKGJhc2UgKyBudl9yZWdpc3RlcnNfdGVzdFtpXS5yZWcpOworCisJCS8qIHhvciB3aXRoIG1hc2sgdG8gdG9nZ2xlIGJpdHMgKi8KKwkJb3JpZ19yZWFkIF49IG52X3JlZ2lzdGVyc190ZXN0W2ldLm1hc2s7CisKKwkJd3JpdGVsKG9yaWdfcmVhZCwgYmFzZSArIG52X3JlZ2lzdGVyc190ZXN0W2ldLnJlZyk7CisKKwkJbmV3X3JlYWQgPSByZWFkbChiYXNlICsgbnZfcmVnaXN0ZXJzX3Rlc3RbaV0ucmVnKTsKKworCQlpZiAoKG5ld19yZWFkICYgbnZfcmVnaXN0ZXJzX3Rlc3RbaV0ubWFzaykgIT0gKG9yaWdfcmVhZCAmIG52X3JlZ2lzdGVyc190ZXN0W2ldLm1hc2spKQorCQkJcmV0dXJuIDA7CisKKwkJLyogcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLworCQlvcmlnX3JlYWQgXj0gbnZfcmVnaXN0ZXJzX3Rlc3RbaV0ubWFzazsKKwkJd3JpdGVsKG9yaWdfcmVhZCwgYmFzZSArIG52X3JlZ2lzdGVyc190ZXN0W2ldLnJlZyk7CisKKwl9IHdoaWxlIChudl9yZWdpc3RlcnNfdGVzdFsrK2ldLnJlZyAhPSAwKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG52X2ludGVycnVwdF90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCByZXQgPSAxOworCWludCB0ZXN0Y250OworCXUzMiBzYXZlX21zaV9mbGFncywgc2F2ZV9wb2xsX2ludGVydmFsID0gMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJLyogZnJlZSBjdXJyZW50IGlycSAqLworCQludl9mcmVlX2lycShkZXYpOworCQlzYXZlX3BvbGxfaW50ZXJ2YWwgPSByZWFkbChiYXNlK052UmVnUG9sbGluZ0ludGVydmFsKTsKKwl9CisKKwkvKiBmbGFnIHRvIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlucC0+aW50cl90ZXN0ID0gMDsKKworCS8qIHNldHVwIHRlc3QgaXJxICovCisJc2F2ZV9tc2lfZmxhZ3MgPSBucC0+bXNpX2ZsYWdzOworCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX1ZFQ1RPUlNfTUFTSzsKKwlucC0+bXNpX2ZsYWdzIHw9IDB4MDAxOyAvKiBzZXR1cCAxIHZlY3RvciAqLworCWlmIChudl9yZXF1ZXN0X2lycShkZXYsIDEpKQorCQlyZXR1cm4gMDsKKworCS8qIHNldHVwIHRpbWVyIGludGVycnVwdCAqLworCXdyaXRlbChOVlJFR19QT0xMX0RFRkFVTFRfQ1BVLCBiYXNlICsgTnZSZWdQb2xsaW5nSW50ZXJ2YWwpOworCXdyaXRlbChOVlJFR19VTktTRVRVUDZfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWc2KTsKKworCW52X2VuYWJsZV9od19pbnRlcnJ1cHRzKGRldiwgTlZSRUdfSVJRX1RJTUVSKTsKKworCS8qIHdhaXQgZm9yIGF0IGxlYXN0IG9uZSBpbnRlcnJ1cHQgKi8KKwltc2xlZXAoMTAwKTsKKworCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKworCS8qIGZsYWcgc2hvdWxkIGJlIHNldCB3aXRoaW4gSVNSICovCisJdGVzdGNudCA9IG5wLT5pbnRyX3Rlc3Q7CisJaWYgKCF0ZXN0Y250KQorCQlyZXQgPSAyOworCisJbnZfZGlzYWJsZV9od19pbnRlcnJ1cHRzKGRldiwgTlZSRUdfSVJRX1RJTUVSKTsKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCisJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJZWxzZQorCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKworCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCisJbnZfZnJlZV9pcnEoZGV2KTsKKworCW5wLT5tc2lfZmxhZ3MgPSBzYXZlX21zaV9mbGFnczsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJd3JpdGVsKHNhdmVfcG9sbF9pbnRlcnZhbCwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKKwkJd3JpdGVsKE5WUkVHX1VOS1NFVFVQNl9WQUwsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzYpOworCQkvKiByZXN0b3JlIG9yaWdpbmFsIGlycSAqLworCQlpZiAobnZfcmVxdWVzdF9pcnEoZGV2LCAwKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbnZfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiLCAqcnhfc2tiOworCWRtYV9hZGRyX3QgdGVzdF9kbWFfYWRkcjsKKwl1MzIgdHhfZmxhZ3NfZXh0cmEgPSAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgPyBOVl9UWF9MQVNUUEFDS0VUIDogTlZfVFgyX0xBU1RQQUNLRVQpOworCXUzMiBGbGFnczsKKwlpbnQgbGVuLCBpLCBwa3RfbGVuOworCXU4ICpwa3RfZGF0YTsKKwl1MzIgZmlsdGVyX2ZsYWdzID0gMDsKKwl1MzIgbWlzYzFfZmxhZ3MgPSAwOworCWludCByZXQgPSAxOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQludl9kaXNhYmxlX2lycShkZXYpOworCQlmaWx0ZXJfZmxhZ3MgPSByZWFkbChiYXNlICsgTnZSZWdQYWNrZXRGaWx0ZXJGbGFncyk7CisJCW1pc2MxX2ZsYWdzID0gcmVhZGwoYmFzZSArIE52UmVnTWlzYzEpOworCX0gZWxzZSB7CisJCW52X3R4cnhfcmVzZXQoZGV2KTsKKwl9CisKKwkvKiByZWluaXQgZHJpdmVyIHZpZXcgb2YgdGhlIHJ4IHF1ZXVlICovCisJc2V0X2J1ZnNpemUoZGV2KTsKKwludl9pbml0X3JpbmcoZGV2KTsKKworCS8qIHNldHVwIGhhcmR3YXJlIGZvciBsb29wYmFjayAqLworCXdyaXRlbChOVlJFR19NSVNDMV9GT1JDRSwgYmFzZSArIE52UmVnTWlzYzEpOworCXdyaXRlbChOVlJFR19QRkZfQUxXQVlTIHwgTlZSRUdfUEZGX0xPT1BCQUNLLCBiYXNlICsgTnZSZWdQYWNrZXRGaWx0ZXJGbGFncyk7CisKKwkvKiByZWluaXQgbmljIHZpZXcgb2YgdGhlIHJ4IHF1ZXVlICovCisJd3JpdGVsKG5wLT5yeF9idWZfc3osIGJhc2UgKyBOdlJlZ09mZmxvYWRDb25maWcpOworCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOworCXdyaXRlbCggKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCisJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CisJcGNpX3B1c2goYmFzZSk7CisKKwkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLworCW52X3N0YXJ0X3J4KGRldik7CisJbnZfc3RhcnRfdHgoZGV2KTsKKworCS8qIHNldHVwIHBhY2tldCBmb3IgdHggKi8KKwlwa3RfbGVuID0gRVRIX0RBVEFfTEVOOworCXR4X3NrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbik7CisJcGt0X2RhdGEgPSBza2JfcHV0KHR4X3NrYiwgcGt0X2xlbik7CisJZm9yIChpID0gMDsgaSA8IHBrdF9sZW47IGkrKykKKwkJcGt0X2RhdGFbaV0gPSAodTgpKGkgJiAweGZmKTsKKwl0ZXN0X2RtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHR4X3NrYi0+ZGF0YSwKKwkJCQkgICAgICAgdHhfc2tiLT5lbmQtdHhfc2tiLT5kYXRhLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJCW5wLT50eF9yaW5nLm9yaWdbMF0uUGFja2V0QnVmZmVyID0gY3B1X3RvX2xlMzIodGVzdF9kbWFfYWRkcik7CisJCW5wLT50eF9yaW5nLm9yaWdbMF0uRmxhZ0xlbiA9IGNwdV90b19sZTMyKChwa3RfbGVuLTEpIHwgbnAtPnR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOworCX0gZWxzZSB7CisJCW5wLT50eF9yaW5nLmV4WzBdLlBhY2tldEJ1ZmZlckhpZ2ggPSBjcHVfdG9fbGU2NCh0ZXN0X2RtYV9hZGRyKSA+PiAzMjsKKwkJbnAtPnR4X3JpbmcuZXhbMF0uUGFja2V0QnVmZmVyTG93ID0gY3B1X3RvX2xlNjQodGVzdF9kbWFfYWRkcikgJiAweDBGRkZGRkZGRjsKKwkJbnAtPnR4X3JpbmcuZXhbMF0uRmxhZ0xlbiA9IGNwdV90b19sZTMyKChwa3RfbGVuLTEpIHwgbnAtPnR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOworCX0KKwl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOworCXBjaV9wdXNoKGdldF9od2Jhc2UoZGV2KSk7CisKKwltc2xlZXAoNTAwKTsKKworCS8qIGNoZWNrIGZvciByeCBvZiB0aGUgcGFja2V0ICovCisJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJCUZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3Jpbmcub3JpZ1swXS5GbGFnTGVuKTsKKwkJbGVuID0gbnZfZGVzY3JfZ2V0bGVuZ3RoKCZucC0+cnhfcmluZy5vcmlnWzBdLCBucC0+ZGVzY192ZXIpOworCisJfSBlbHNlIHsKKwkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5leFswXS5GbGFnTGVuKTsKKwkJbGVuID0gbnZfZGVzY3JfZ2V0bGVuZ3RoX2V4KCZucC0+cnhfcmluZy5leFswXSwgbnAtPmRlc2NfdmVyKTsKKwl9CisKKwlpZiAoRmxhZ3MgJiBOVl9SWF9BVkFJTCkgeworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpIHsKKwkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1IpCisJCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUikgeworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCWlmIChyZXQpIHsKKwkJaWYgKGxlbiAhPSBwa3RfbGVuKSB7CisJCQlyZXQgPSAwOworCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbG9vcGJhY2sgbGVuIG1pc21hdGNoICVkIHZzICVkXG4iLAorCQkJCWRldi0+bmFtZSwgbGVuLCBwa3RfbGVuKTsKKwkJfSBlbHNlIHsKKwkJCXJ4X3NrYiA9IG5wLT5yeF9za2J1ZmZbMF07CisJCQlmb3IgKGkgPSAwOyBpIDwgcGt0X2xlbjsgaSsrKSB7CisJCQkJaWYgKHJ4X3NrYi0+ZGF0YVtpXSAhPSAodTgpKGkgJiAweGZmKSkgeworCQkJCQlyZXQgPSAwOworCQkJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBsb29wYmFjayBwYXR0ZXJuIGNoZWNrIGZhaWxlZCBvbiBieXRlICVkXG4iLAorCQkJCQkJZGV2LT5uYW1lLCBpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbG9vcGJhY2sgLSBkaWQgbm90IHJlY2VpdmUgdGVzdCBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisJfQorCisJcGNpX3VubWFwX3BhZ2UobnAtPnBjaV9kZXYsIHRlc3RfZG1hX2FkZHIsCisJCSAgICAgICB0eF9za2ItPmVuZC10eF9za2ItPmRhdGEsCisJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwlkZXZfa2ZyZWVfc2tiX2FueSh0eF9za2IpOworCisJLyogc3RvcCBlbmdpbmVzICovCisJbnZfc3RvcF9yeChkZXYpOworCW52X3N0b3BfdHgoZGV2KTsKKwludl90eHJ4X3Jlc2V0KGRldik7CisJLyogZHJhaW4gcnggcXVldWUgKi8KKwludl9kcmFpbl9yeChkZXYpOworCW52X2RyYWluX3R4KGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXdyaXRlbChtaXNjMV9mbGFncywgYmFzZSArIE52UmVnTWlzYzEpOworCQl3cml0ZWwoZmlsdGVyX2ZsYWdzLCBiYXNlICsgTnZSZWdQYWNrZXRGaWx0ZXJGbGFncyk7CisJCW52X2VuYWJsZV9pcnEoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBudl9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfdGVzdCAqdGVzdCwgdTY0ICpidWZmZXIpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCByZXN1bHQ7CisJbWVtc2V0KGJ1ZmZlciwgMCwgbnZfc2VsZl90ZXN0X2NvdW50KGRldikqc2l6ZW9mKHU2NCkpOworCisJaWYgKCFudl9saW5rX3Rlc3QoZGV2KSkgeworCQl0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJCWJ1ZmZlclswXSA9IDE7CisJfQorCisJaWYgKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJCW52X2Rpc2FibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKKwkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgeworCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJCQl9IGVsc2UgeworCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCQkJfQorCQkJLyogc3RvcCBlbmdpbmVzICovCisJCQludl9zdG9wX3J4KGRldik7CisJCQludl9zdG9wX3R4KGRldik7CisJCQludl90eHJ4X3Jlc2V0KGRldik7CisJCQkvKiBkcmFpbiByeCBxdWV1ZSAqLworCQkJbnZfZHJhaW5fcngoZGV2KTsKKwkJCW52X2RyYWluX3R4KGRldik7CisJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCX0KKworCQlpZiAoIW52X3JlZ2lzdGVyX3Rlc3QoZGV2KSkgeworCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQkJYnVmZmVyWzFdID0gMTsKKwkJfQorCisJCXJlc3VsdCA9IG52X2ludGVycnVwdF90ZXN0KGRldik7CisJCWlmIChyZXN1bHQgIT0gMSkgeworCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQkJYnVmZmVyWzJdID0gMTsKKwkJfQorCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCS8qIGJhaWwgb3V0ICovCisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoIW52X2xvb3BiYWNrX3Rlc3QoZGV2KSkgeworCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQkJYnVmZmVyWzNdID0gMTsKKwkJfQorCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCS8qIHJlaW5pdCBkcml2ZXIgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KKwkJCXNldF9idWZzaXplKGRldik7CisJCQlpZiAobnZfaW5pdF9yaW5nKGRldikpIHsKKwkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKKwkJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKKwkJCX0KKwkJCS8qIHJlaW5pdCBuaWMgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KKwkJCXdyaXRlbChucC0+cnhfYnVmX3N6LCBiYXNlICsgTnZSZWdPZmZsb2FkQ29uZmlnKTsKKwkJCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOworCQkJd3JpdGVsKCAoKG5wLT5yeF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwkJCQliYXNlICsgTnZSZWdSaW5nU2l6ZXMpOworCQkJcGNpX3B1c2goYmFzZSk7CisJCQl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOworCQkJcGNpX3B1c2goYmFzZSk7CisJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLworCQkJbnZfc3RhcnRfcngoZGV2KTsKKwkJCW52X3N0YXJ0X3R4KGRldik7CisJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQkJbnZfZW5hYmxlX2h3X2ludGVycnVwdHMoZGV2LCBucC0+aXJxbWFzayk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG52X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpidWZmZXIpCit7CisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJbWVtY3B5KGJ1ZmZlciwgJm52X2VzdGF0c19zdHIsIG52X2dldF9zdGF0c19jb3VudChkZXYpKnNpemVvZihzdHJ1Y3QgbnZfZXRodG9vbF9zdHIpKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhfU1NfVEVTVDoKKwkJbWVtY3B5KGJ1ZmZlciwgJm52X2V0ZXN0c19zdHIsIG52X3NlbGZfdGVzdF9jb3VudChkZXYpKnNpemVvZihzdHJ1Y3QgbnZfZXRodG9vbF9zdHIpKTsKKwkJYnJlYWs7CisJfQorfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBudl9nZXRfZHJ2aW5mbywKQEAgLTI2MzgsMTAgKzM4MTUsMjMgQEAKIAkuZ2V0X3JlZ3MgPSBudl9nZXRfcmVncywKIAkubndheV9yZXNldCA9IG52X253YXlfcmVzZXQsCiAJLmdldF9wZXJtX2FkZHIgPSBldGh0b29sX29wX2dldF9wZXJtX2FkZHIsCi0jaWZkZWYgTkVUSUZfRl9UU08KIAkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IG52X3NldF90c28KLSNlbmRpZgorCS5zZXRfdHNvID0gbnZfc2V0X3RzbywKKwkuZ2V0X3JpbmdwYXJhbSA9IG52X2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0gPSBudl9zZXRfcmluZ3BhcmFtLAorCS5nZXRfcGF1c2VwYXJhbSA9IG52X2dldF9wYXVzZXBhcmFtLAorCS5zZXRfcGF1c2VwYXJhbSA9IG52X3NldF9wYXVzZXBhcmFtLAorCS5nZXRfcnhfY3N1bSA9IG52X2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSA9IG52X3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtID0gbnZfc2V0X3R4X2NzdW0sCisJLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgPSBudl9zZXRfc2csCisJLmdldF9zdHJpbmdzID0gbnZfZ2V0X3N0cmluZ3MsCisJLmdldF9zdGF0c19jb3VudCA9IG52X2dldF9zdGF0c19jb3VudCwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBudl9nZXRfZXRodG9vbF9zdGF0cywKKwkuc2VsZl90ZXN0X2NvdW50ID0gbnZfc2VsZl90ZXN0X2NvdW50LAorCS5zZWxmX3Rlc3QgPSBudl9zZWxmX3Rlc3QsCiB9OwogCiBzdGF0aWMgdm9pZCBudl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCkBAIC0yNjcyLDEzOSArMzg2Miw2IEBACiAJLyogbm90aGluZyB0byBkbyAqLwogfTsKIAotc3RhdGljIHZvaWQgc2V0X21zaXhfdmVjdG9yX21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmVjdG9yLCB1MzIgaXJxbWFzaykKLXsKLQl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCWludCBpOwotCXUzMiBtc2l4bWFwID0gMDsKLQotCS8qIEVhY2ggaW50ZXJydXB0IGJpdCBjYW4gYmUgbWFwcGVkIHRvIGEgTVNJWCB2ZWN0b3IgKDQgYml0cykuCi0JICogTVNJWE1hcDAgcmVwcmVzZW50cyB0aGUgZmlyc3QgOCBpbnRlcnJ1cHRzIGFuZCBNU0lYTWFwMSByZXByZXNlbnRzCi0JICogdGhlIHJlbWFpbmluZyA4IGludGVycnVwdHMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAoKGlycW1hc2sgPj4gaSkgJiAweDEpIHsKLQkJCW1zaXhtYXAgfD0gdmVjdG9yIDw8IChpIDw8IDIpOwotCQl9Ci0JfQotCXdyaXRlbChyZWFkbChiYXNlICsgTnZSZWdNU0lYTWFwMCkgfCBtc2l4bWFwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7Ci0KLQltc2l4bWFwID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmICgoaXJxbWFzayA+PiAoaSArIDgpKSAmIDB4MSkgewotCQkJbXNpeG1hcCB8PSB2ZWN0b3IgPDwgKGkgPDwgMik7Ci0JCX0KLQl9Ci0Jd3JpdGVsKHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhNYXAxKSB8IG1zaXhtYXAsIGJhc2UgKyBOdlJlZ01TSVhNYXAxKTsKLX0KLQotc3RhdGljIGludCBudl9yZXF1ZXN0X2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKLQl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCWludCByZXQgPSAxOwotCWludCBpOwotCi0JaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSyk7IGkrKykgewotCQkJbnAtPm1zaV94X2VudHJ5W2ldLmVudHJ5ID0gaTsKLQkJfQotCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpeChucC0+cGNpX2RldiwgbnAtPm1zaV94X2VudHJ5LCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykpKSA9PSAwKSB7Ci0JCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0VOQUJMRUQ7Ci0JCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkgewotCQkJCS8qIFJlcXVlc3QgaXJxIGZvciByeCBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsICZudl9uaWNfaXJxX3J4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHJ4ICVkXG4iLCByZXQpOwotCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKLQkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKLQkJCQkJZ290byBvdXRfZXJyOwotCQkJCX0KLQkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgdHggaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yLCAmbnZfbmljX2lycV90eCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciB0eCAlZFxuIiwgcmV0KTsKLQkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7Ci0JCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7Ci0JCQkJCWdvdG8gb3V0X2ZyZWVfcng7Ci0JCQkJfQotCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBsaW5rIGFuZCB0aW1lciBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IsICZudl9uaWNfaXJxX290aGVyLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGxpbmsgJWRcbiIsIHJldCk7Ci0JCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCQkJCQlnb3RvIG91dF9mcmVlX3R4OwotCQkJCX0KLQkJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB0aGVpciByZXNwZWN0aXZlIHZlY3RvciAqLwotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7Ci0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAxKTsKLQkJCQlzZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX1JYLCBOVlJFR19JUlFfUlhfQUxMKTsKLQkJCQlzZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX1RYLCBOVlJFR19JUlFfVFhfQUxMKTsKLQkJCQlzZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX09USEVSLCBOVlJFR19JUlFfT1RIRVIpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgYWxsIGludGVycnVwdHMgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7Ci0JCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7Ci0JCQkJCWdvdG8gb3V0X2VycjsKLQkJCQl9Ci0KLQkJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB2ZWN0b3IgMCAqLwotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7Ci0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAxKTsKLQkJCX0KLQkJfQotCX0KLQlpZiAocmV0ICE9IDAgJiYgbnAtPm1zaV9mbGFncyAmIE5WX01TSV9DQVBBQkxFKSB7Ci0JCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2kobnAtPnBjaV9kZXYpKSA9PSAwKSB7Ci0JCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9FTkFCTEVEOwotCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOwotCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOwotCQkJCWdvdG8gb3V0X2VycjsKLQkJCX0KLQotCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVjdG9yIDAgKi8KLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAwKTsKLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAxKTsKLQkJCS8qIGVuYWJsZSBtc2kgdmVjdG9yIDAgKi8KLQkJCXdyaXRlbChOVlJFR19NU0lfVkVDVE9SXzBfRU5BQkxFRCwgYmFzZSArIE52UmVnTVNJSXJxTWFzayk7Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKQotCQkJZ290byBvdXRfZXJyOwotCX0KLQotCXJldHVybiAwOwotb3V0X2ZyZWVfdHg6Ci0JZnJlZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yLCBkZXYpOwotb3V0X2ZyZWVfcng6Ci0JZnJlZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLCBkZXYpOwotb3V0X2VycjoKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgbnZfZnJlZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7Ci0JaW50IGk7Ci0KLQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpIHsKLQkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7Ci0JCQlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbaV0udmVjdG9yLCBkZXYpOwotCQl9Ci0JCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCX0gZWxzZSB7Ci0JCWZyZWVfaXJxKG5wLT5wY2lfZGV2LT5pcnEsIGRldik7Ci0JCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX0VOQUJMRUQpIHsKLQkJCXBjaV9kaXNhYmxlX21zaShucC0+cGNpX2Rldik7Ci0JCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKLQkJfQotCX0KLX0KLQogc3RhdGljIGludCBudl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI4MjksNiArMzg4Niw5IEBACiAKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnQWRhcHRlckNvbnRyb2wpOwogCisJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfQ0FQQUJMRSkKKwkJd3JpdGVsKE5WUkVHX1RYX1BBVVNFRlJBTUVfRElTQUJMRSwgIGJhc2UgKyBOdlJlZ1R4UGF1c2VGcmFtZSk7CisKIAkvKiAyKSBpbml0aWFsaXplIGRlc2NyaXB0b3IgcmluZ3MgKi8KIAlzZXRfYnVmc2l6ZShkZXYpOwogCW9vbSA9IG52X2luaXRfcmluZyhkZXYpOwpAQCAtMjg0NSw3ICszOTA1LDcgQEAKIAogCS8qIDQpIGdpdmUgaHcgcmluZ3MgKi8KIAlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKLQl3cml0ZWwoICgoUlhfUklORy0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKFRYX1JJTkctMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAorCXdyaXRlbCggKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CiAKIAkvKiA1KSBjb250aW51ZSBzZXR1cCAqLwpAQCAtMjg4Nyw3ICszOTQ3LDggQEAKIAkJCWJhc2UgKyBOdlJlZ0FkYXB0ZXJDb250cm9sKTsKIAl3cml0ZWwoTlZSRUdfTUlJU1BFRURfQklUOHxOVlJFR19NSUlERUxBWSwgYmFzZSArIE52UmVnTUlJU3BlZWQpOwogCXdyaXRlbChOVlJFR19VTktTRVRVUDRfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWc0KTsKLQl3cml0ZWwoTlZSRUdfV0FLRVVQRkxBR1NfVkFMLCBiYXNlICsgTnZSZWdXYWtlVXBGbGFncyk7CisJaWYgKG5wLT53b2xlbmFibGVkKQorCQl3cml0ZWwoTlZSRUdfV0FLRVVQRkxBR1NfRU5BQkxFICwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOwogCiAJaSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUpOwogCWlmICggKGkgJiBOVlJFR19QT1dFUlNUQVRFX1BPV0VSRURVUCkgPT0gMCkKQEAgLTI5MDMsNyArMzk2NCw3IEBACiAJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKIAlwY2lfcHVzaChiYXNlKTsKIAotCWlmIChudl9yZXF1ZXN0X2lycShkZXYpKSB7CisJaWYgKG52X3JlcXVlc3RfaXJxKGRldiwgMCkpIHsKIAkJZ290byBvdXRfZHJhaW47CiAJfQogCkBAIC0yOTQwLDYgKzQwMDEsMTEgQEAKIAl9CiAJaWYgKG9vbSkKIAkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKKworCS8qIHN0YXJ0IHN0YXRpc3RpY3MgdGltZXIgKi8KKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTKQorCQltb2RfdGltZXIoJm5wLT5zdGF0c19wb2xsLCBqaWZmaWVzICsgU1RBVFNfSU5URVJWQUwpOworCiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTI5NjAsNiArNDAyNiw3IEBACiAKIAlkZWxfdGltZXJfc3luYygmbnAtPm9vbV9raWNrKTsKIAlkZWxfdGltZXJfc3luYygmbnAtPm5pY19wb2xsKTsKKwlkZWxfdGltZXJfc3luYygmbnAtPnN0YXRzX3BvbGwpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTMwMTksNiArNDA4Niw5IEBACiAJaW5pdF90aW1lcigmbnAtPm5pY19wb2xsKTsKIAlucC0+bmljX3BvbGwuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAJbnAtPm5pY19wb2xsLmZ1bmN0aW9uID0gJm52X2RvX25pY19wb2xsOwkvKiB0aW1lciBoYW5kbGVyICovCisJaW5pdF90aW1lcigmbnAtPnN0YXRzX3BvbGwpOworCW5wLT5zdGF0c19wb2xsLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OworCW5wLT5zdGF0c19wb2xsLmZ1bmN0aW9uID0gJm52X2RvX3N0YXRzX3BvbGw7CS8qIHRpbWVyIGhhbmRsZXIgKi8KIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpOwogCWlmIChlcnIpIHsKQEAgLTMwMzMsNyArNDEwMyw3IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2Rpc2FibGU7CiAKLQlpZiAoaWQtPmRyaXZlcl9kYXRhICYgKERFVl9IQVNfVkxBTnxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkwpKQorCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiAoREVWX0hBU19WTEFOfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1MpKQogCQlucC0+cmVnaXN0ZXJfc2l6ZSA9IE5WX1BDSV9SRUdTWl9WRVIyOwogCWVsc2UKIAkJbnAtPnJlZ2lzdGVyX3NpemUgPSBOVl9QQ0lfUkVHU1pfVkVSMTsKQEAgLTMwNjUsMTYgKzQxMzUsMTggQEAKIAkJLyogcGFja2V0IGZvcm1hdCAzOiBzdXBwb3J0cyA0MC1iaXQgYWRkcmVzc2luZyAqLwogCQlucC0+ZGVzY192ZXIgPSBERVNDX1ZFUl8zOwogCQlucC0+dHhyeGN0bF9iaXRzID0gTlZSRUdfVFhSWENUTF9ERVNDXzM7Ci0JCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIERNQV8zOUJJVF9NQVNLKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiA2NC1iaXQgRE1BIGZhaWxlZCwgdXNpbmcgMzItYml0IGFkZHJlc3NpbmcgZm9yIGRldmljZSAlcy5cbiIsCi0JCQkJCXBjaV9uYW1lKHBjaV9kZXYpKTsKLQkJfSBlbHNlIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB1c2luZyBISUdIRE1BXG4iKTsKLQkJfQotCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaV9kZXYsIDB4MDAwMDAwN2ZmZmZmZmZmZlVMTCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogNjQtYml0IERNQSAoY29uc2lzdGVudCkgZmFpbGVkIGZvciBkZXZpY2UgJXMuXG4iLAotCQkJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJaWYgKGRtYV82NGJpdCkgeworCQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGNpX2RldiwgRE1BXzM5QklUX01BU0spKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiA2NC1iaXQgRE1BIGZhaWxlZCwgdXNpbmcgMzItYml0IGFkZHJlc3NpbmcgZm9yIGRldmljZSAlcy5cbiIsCisJCQkJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB1c2luZyBISUdIRE1BXG4iKTsKKwkJCX0KKwkJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpX2RldiwgRE1BXzM5QklUX01BU0spKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiA2NC1iaXQgRE1BIChjb25zaXN0ZW50KSBmYWlsZWQsIHVzaW5nIDMyLWJpdCByaW5nIGJ1ZmZlcnMgZm9yIGRldmljZSAlcy5cbiIsCisJCQkJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJCX0KIAkJfQogCX0gZWxzZSBpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19MQVJHRURFU0MpIHsKIAkJLyogcGFja2V0IGZvcm1hdCAyOiBzdXBwb3J0cyBqdW1ibyBmcmFtZXMgKi8KQEAgLTMxMDcsMTMgKzQxNzksMTkgQEAKIAl9CiAKIAlucC0+bXNpX2ZsYWdzID0gMDsKLQlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiAhZGlzYWJsZV9tc2kpIHsKKwlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiBtc2kpIHsKIAkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfQ0FQQUJMRTsKIAl9Ci0JaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSV9YKSAmJiAhZGlzYWJsZV9tc2l4KSB7CisJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSV9YKSAmJiBtc2l4KSB7CiAJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfQ0FQQUJMRTsKIAl9CiAKKwlucC0+cGF1c2VfZmxhZ3MgPSBOVl9QQVVTRUZSQU1FX1JYX0NBUEFCTEUgfCBOVl9QQVVTRUZSQU1FX1JYX1JFUSB8IE5WX1BBVVNFRlJBTUVfQVVUT05FRzsKKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QQVVTRUZSQU1FX1RYKSB7CisJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEUgfCBOVl9QQVVTRUZSQU1FX1RYX1JFUTsKKwl9CisKKwogCWVyciA9IC1FTk9NRU07CiAJbnAtPmJhc2UgPSBpb3JlbWFwKGFkZHIsIG5wLT5yZWdpc3Rlcl9zaXplKTsKIAlpZiAoIW5wLT5iYXNlKQpAQCAtMzEyMiwyMSArNDIwMCwzOCBAQAogCiAJZGV2LT5pcnEgPSBwY2lfZGV2LT5pcnE7CiAKKwlucC0+cnhfcmluZ19zaXplID0gUlhfUklOR19ERUZBVUxUOworCW5wLT50eF9yaW5nX3NpemUgPSBUWF9SSU5HX0RFRkFVTFQ7CisJbnAtPnR4X2xpbWl0X3N0b3AgPSBucC0+dHhfcmluZ19zaXplIC0gVFhfTElNSVRfRElGRkVSRU5DRTsKKwlucC0+dHhfbGltaXRfc3RhcnQgPSBucC0+dHhfcmluZ19zaXplIC0gVFhfTElNSVRfRElGRkVSRU5DRSAtIDE7CisKIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKIAkJbnAtPnJ4X3Jpbmcub3JpZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsCi0JCQkJCXNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSAqIChSWF9SSU5HICsgVFhfUklORyksCisJCQkJCXNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSAqIChucC0+cnhfcmluZ19zaXplICsgbnAtPnR4X3Jpbmdfc2l6ZSksCiAJCQkJCSZucC0+cmluZ19hZGRyKTsKIAkJaWYgKCFucC0+cnhfcmluZy5vcmlnKQogCQkJZ290byBvdXRfdW5tYXA7Ci0JCW5wLT50eF9yaW5nLm9yaWcgPSAmbnAtPnJ4X3Jpbmcub3JpZ1tSWF9SSU5HXTsKKwkJbnAtPnR4X3Jpbmcub3JpZyA9ICZucC0+cnhfcmluZy5vcmlnW25wLT5yeF9yaW5nX3NpemVdOwogCX0gZWxzZSB7CiAJCW5wLT5yeF9yaW5nLmV4ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldiwKLQkJCQkJc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpICogKFJYX1JJTkcgKyBUWF9SSU5HKSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpICogKG5wLT5yeF9yaW5nX3NpemUgKyBucC0+dHhfcmluZ19zaXplKSwKIAkJCQkJJm5wLT5yaW5nX2FkZHIpOwogCQlpZiAoIW5wLT5yeF9yaW5nLmV4KQogCQkJZ290byBvdXRfdW5tYXA7Ci0JCW5wLT50eF9yaW5nLmV4ID0gJm5wLT5yeF9yaW5nLmV4W1JYX1JJTkddOworCQlucC0+dHhfcmluZy5leCA9ICZucC0+cnhfcmluZy5leFtucC0+cnhfcmluZ19zaXplXTsKIAl9CisJbnAtPnJ4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+cnhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlucC0+cnhfZG1hID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiBucC0+cnhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlucC0+dHhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYqKSAqIG5wLT50eF9yaW5nX3NpemUsIEdGUF9LRVJORUwpOworCW5wLT50eF9kbWEgPSBrbWFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqIG5wLT50eF9yaW5nX3NpemUsIEdGUF9LRVJORUwpOworCW5wLT50eF9kbWFfbGVuID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIG5wLT50eF9yaW5nX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghbnAtPnJ4X3NrYnVmZiB8fCAhbnAtPnJ4X2RtYSB8fCAhbnAtPnR4X3NrYnVmZiB8fCAhbnAtPnR4X2RtYSB8fCAhbnAtPnR4X2RtYV9sZW4pCisJCWdvdG8gb3V0X2ZyZWVyaW5nOworCW1lbXNldChucC0+cnhfc2tidWZmLCAwLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYqKSAqIG5wLT5yeF9yaW5nX3NpemUpOworCW1lbXNldChucC0+cnhfZG1hLCAwLCBzaXplb2YoZG1hX2FkZHJfdCkgKiBucC0+cnhfcmluZ19zaXplKTsKKwltZW1zZXQobnAtPnR4X3NrYnVmZiwgMCwgc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+dHhfcmluZ19zaXplKTsKKwltZW1zZXQobnAtPnR4X2RtYSwgMCwgc2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnR4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT50eF9kbWFfbGVuLCAwLCBzaXplb2YodW5zaWduZWQgaW50KSAqIG5wLT50eF9yaW5nX3NpemUpOwogCiAJZGV2LT5vcGVuID0gbnZfb3BlbjsKIAlkZXYtPnN0b3AgPSBudl9jbG9zZTsKQEAgLTMyNTgsOSArNDM1Myw5IEBACiAJaWYgKGkgPT0gMzMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wZW46IENvdWxkIG5vdCBmaW5kIGEgdmFsaWQgUEhZLlxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpKTsKLQkJZ290byBvdXRfZnJlZXJpbmc7CisJCWdvdG8gb3V0X2Vycm9yOwogCX0KLQkKKwogCS8qIHJlc2V0IGl0ICovCiAJcGh5X2luaXQoZGV2KTsKIApAQCAtMzI3Miw3ICs0MzY3LDcgQEAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogdW5hYmxlIHRvIHJlZ2lzdGVyIG5ldGRldjogJWRcbiIsIGVycik7Ci0JCWdvdG8gb3V0X2ZyZWVyaW5nOworCQlnb3RvIG91dF9lcnJvcjsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZvcmNlZGV0aC5jOiBzdWJzeXN0ZW06ICUwNXg6JTA0eCBib3VuZCB0byAlc1xuIiwKIAkJCWRldi0+bmFtZSwgcGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSwKQEAgLTMyODAsMTQgKzQzNzUsMTAgQEAKIAogCXJldHVybiAwOwogCi1vdXRfZnJlZXJpbmc6Ci0JaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAoUlhfUklORyArIFRYX1JJTkcpLAotCQkJCSAgICBucC0+cnhfcmluZy5vcmlnLCBucC0+cmluZ19hZGRyKTsKLQllbHNlCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChSWF9SSU5HICsgVFhfUklORyksCi0JCQkJICAgIG5wLT5yeF9yaW5nLmV4LCBucC0+cmluZ19hZGRyKTsKK291dF9lcnJvcjoKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CitvdXRfZnJlZXJpbmc6CisJZnJlZV9yaW5ncyhkZXYpOwogb3V0X3VubWFwOgogCWlvdW5tYXAoZ2V0X2h3YmFzZShkZXYpKTsKIG91dF9yZWxyZWc6CkBAIC0zMzAzLDE1ICs0Mzk0LDExIEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgbnZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKIAkvKiBmcmVlIGFsbCBzdHJ1Y3R1cmVzICovCi0JaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAoUlhfUklORyArIFRYX1JJTkcpLCBucC0+cnhfcmluZy5vcmlnLCBucC0+cmluZ19hZGRyKTsKLQllbHNlCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChSWF9SSU5HICsgVFhfUklORyksIG5wLT5yeF9yaW5nLmV4LCBucC0+cmluZ19hZGRyKTsKKwlmcmVlX3JpbmdzKGRldik7CiAJaW91bm1hcChnZXRfaHdiYXNlKGRldikpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwpAQCAtMzM3NCwxMSArNDQ2MSw0MyBAQAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCX0sCisJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiksCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJfSwKKwl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3KSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwl9LAorCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTgpLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCX0sCisJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOSksCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJfSwKKwl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwKSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCX0sCisJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSksCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwl9LAorCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjIpLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJfSwKKwl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzKSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAogCX0sCiAJezAsfSwKIH07CkBAIC0zNDA4LDEwICs0NTI3LDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiIpOwogbW9kdWxlX3BhcmFtKHBvbGxfaW50ZXJ2YWwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1lciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7Ci1tb2R1bGVfcGFyYW0oZGlzYWJsZV9tc2ksIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfbXNpLCAiRGlzYWJsZSBNU0kgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRvIDEuIik7Ci1tb2R1bGVfcGFyYW0oZGlzYWJsZV9tc2l4LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX21zaXgsICJEaXNhYmxlIE1TSVggaW50ZXJydXB0cyBieSBzZXR0aW5nIHRvIDEuIik7Cittb2R1bGVfcGFyYW0obXNpLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtc2ksICJNU0kgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKK21vZHVsZV9wYXJhbShtc2l4LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtc2l4LCAiTVNJWCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkgc2V0dGluZyB0byAwLiIpOworbW9kdWxlX3BhcmFtKGRtYV82NGJpdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hXzY0Yml0LCAiSGlnaCBETUEgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKIAogTU9EVUxFX0FVVEhPUigiTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmV2ZXJzZSBFbmdpbmVlcmVkIG5Gb3JjZSBldGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDEwMmMxZjAuLmQxMjYwNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtMzA4LDkgKzMwOCw5IEBACiB7CiAJc3RydWN0IHNvY2thZGRyX2F4MjUgKnNhID0gYWRkcjsKIAotCXNwaW5fbG9ja19pcnEoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZzYS0+c2F4MjVfY2FsbCwgQVgyNV9BRERSX0xFTik7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc2Nyw5ICs3NjcsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlzcGluX2xvY2tfaXJxKCZkZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZhZGRyLCBBWDI1X0FERFJfTEVOKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCiAJCWVyciA9IDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKaW5kZXggZDgxYThlMS4uM2ViYmJlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCkBAIC0zNTcsOSArMzU3LDkgQEAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfYXgyNSAqc2EgPSBhZGRyOwogCi0Jc3Bpbl9sb2NrX2lycSgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgJnNhLT5zYXgyNV9jYWxsLCBBWDI1X0FERFJfTEVOKTsKLQlzcGluX3VubG9ja19pcnEoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtODg2LDkgKzg4Niw5IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXNwaW5fbG9ja19pcnEoJmRldi0+eG1pdF9sb2NrKTsKKwkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkciwgQVgyNV9BRERSX0xFTik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGV2LT54bWl0X2xvY2spOworCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAogCQllcnIgPSAwOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwLXBsdXMuYyBiL2RyaXZlcnMvbmV0L2hwLXBsdXMuYwppbmRleCAwZDdhNjI1Li5lMjZhM2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocC1wbHVzLmMKKysrIGIvZHJpdmVycy9uZXQvaHAtcGx1cy5jCkBAIC00NDYsNyArNDQ2LDcgQEAKIAogLyogVGhpcyBpcyBzZXQgdXAgc28gdGhhdCBvbmx5IGEgc2luZ2xlIGF1dG9wcm9iZSB0YWtlcyBwbGFjZSBwZXIgY2FsbC4KIElTQSBkZXZpY2UgYXV0b3Byb2JlcyBvbiBhIHJ1bm5pbmcgbWFjaGluZSBhcmUgbm90IHJlY29tbWVuZGVkLiAqLwotaW50CitpbnQgX19pbml0CiBpbml0X21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocC5jIGIvZHJpdmVycy9uZXQvaHAuYwppbmRleCBjZjlmYjM2Li41NTFhNzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwLmMKQEAgLTM4NCw3ICszODQsNyBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgZXRoZXJjYXJkIGlmIHNvbWV0aGluZyBzY3Jld3MgdXAuICovCi1zdGF0aWMgdm9pZAorc3RhdGljIHZvaWQgX19pbml0CiBocF9pbml0X2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaXJxID0gZGV2LT5pcnE7CkBAIC00MDksNyArNDA5LDcgQEAKIAogLyogVGhpcyBpcyBzZXQgdXAgc28gdGhhdCBvbmx5IGEgc2luZ2xlIGF1dG9wcm9iZSB0YWtlcyBwbGFjZSBwZXIgY2FsbC4KIElTQSBkZXZpY2UgYXV0b3Byb2JlcyBvbiBhIHJ1bm5pbmcgbWFjaGluZSBhcmUgbm90IHJlY29tbWVuZGVkLiAqLwotaW50CitpbnQgX19pbml0CiBpbml0X21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKaW5kZXggMDFhZDkwNC4uNTFmZDUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jCisrKyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKIG5ldC0zLWRyaXZlciBmb3IgdGhlIElCTSBMQU4gQWRhcHRlci9BCiAKIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtLCBhbmQgaXMgY292ZXJlZCBieSB0aGUKQEAgLTExLDkgKzExLDkgQEAKIFNLX0cxNiBhbmQgM0M1MjMgZHJpdmVyLgogCiBwYXBlciBzb3VyY2VzOgotICAnUEMgSGFyZHdhcmU6IEF1ZmJhdSwgRnVua3Rpb25zd2Vpc2UsIFByb2dyYW1taWVydW5nJyBieSAKKyAgJ1BDIEhhcmR3YXJlOiBBdWZiYXUsIEZ1bmt0aW9uc3dlaXNlLCBQcm9ncmFtbWllcnVuZycgYnkKICAgSGFucy1QZXRlciBNZXNzbWVyIGZvciB0aGUgYmFzaWMgTWljcm9jaGFubmVsIHN0dWZmCi0gIAorCiAgICdMaW51eCBHZXJhZXRldHJlaWJlcicgYnkgQWxsZXNhbmRybyBSdWJpbmksIEthbGxlIERhbGhlaW1lcgogICBmb3IgaGVscCBvbiBFdGhlcm5ldCBkcml2ZXIgcHJvZ3JhbW1pbmcKIApAQCAtMjcsMTQgKzI3LDE0IEBACiAKIHNwZWNpYWwgYWNrbm93bGVkZ2VtZW50cyB0bzoKICAgLSBCb2IgRWFnZXIgZm9yIGhlbHBpbmcgbWUgb3V0IHdpdGggZG9jdW1lbnRhdGlvbiBmcm9tIElCTQotICAtIEppbSBTaG9ybmV5IGZvciBoaXMgZW5kbGVzcyBwYXRpZW5jZSB3aXRoIG1lIHdoaWxlIEkgd2FzIHVzaW5nIAorICAtIEppbSBTaG9ybmV5IGZvciBoaXMgZW5kbGVzcyBwYXRpZW5jZSB3aXRoIG1lIHdoaWxlIEkgd2FzIHVzaW5nCiAgICAgaGltIGFzIGEgYmV0YSB0ZXN0ZXIgdG8gdHJhY2UgZG93biB0aGUgYWRkcmVzcyBmaWx0ZXIgYnVnIDstKQogCiAgIE1pc3NpbmcgdGhpbmdzOgogCiAgIC0+IHNldCBkZWJ1ZyBsZXZlbCB2aWEgaW9jdGwgaW5zdGVhZCBvZiBjb21waWxlLXRpbWUgc3dpdGNoZXMKICAgLT4gSSBkaWRuJ3QgZm9sbG93IHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgMi4xLngga2VybmVscywgc28gbXkKLSAgICAgYXNzdW1wdGlvbnMgYWJvdXQgd2hpY2ggdGhpbmdzIGNoYW5nZWQgd2l0aCB3aGljaCBrZXJuZWwgdmVyc2lvbiAKKyAgICAgYXNzdW1wdGlvbnMgYWJvdXQgd2hpY2ggdGhpbmdzIGNoYW5nZWQgd2l0aCB3aGljaCBrZXJuZWwgdmVyc2lvbgogICAgICBhcmUgcHJvYmFibHkgbm9uc2Vuc2UKIAogSGlzdG9yeToKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXByaXYtPnJyYXN0YXJ0ID0gcmFkZHIgPSBwcml2LT50eGJ1ZnN0YXJ0ICsgKFRYQlVGQ05UICogUEtUU0laRSk7CiAJcHJpdi0+cmRhc3RhcnQgPSBhZGRyID0gcHJpdi0+cnJhc3RhcnQgKyAocHJpdi0+cnhidWZjbnQgKiBzaXplb2YocnJhX3QpKTsKIAlwcml2LT5yeGJ1ZnN0YXJ0ID0gYmFkZHIgPSBwcml2LT5yZGFzdGFydCArIChwcml2LT5yeGJ1ZmNudCAqIHNpemVvZihyZGFfdCkpOwotCQorCiAJZm9yICh6ID0gMDsgeiA8IHByaXYtPnJ4YnVmY250OyB6KyspIHsKIAkJcnJhLnN0YXJ0bG8gPSBiYWRkcjsKIAkJcnJhLnN0YXJ0aGkgPSAwOwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCWxyZGFhZGRyID0gcHJpdi0+cmRhc3RhcnQgKyAocHJpdi0+bGFzdHJ4ZGVzY3IgKiBzaXplb2YocmRhX3QpKTsKIAkJbWVtY3B5X2Zyb21pbygmcmRhLCBwcml2LT5iYXNlICsgcmRhYWRkciwgc2l6ZW9mKHJkYV90KSk7CiAKLQkJLyogaXJvbiBvdXQgdXBwZXIgd29yZCBoYWx2ZXMgb2YgZmllbGRzIHdlIHVzZSAtIFNPTklDIHdpbGwgZHVwbGljYXRlIAorCQkvKiBpcm9uIG91dCB1cHBlciB3b3JkIGhhbHZlcyBvZiBmaWVsZHMgd2UgdXNlIC0gU09OSUMgd2lsbCBkdXBsaWNhdGUKIAkJICAgYml0cyAwLi4xNSB0byAxNi4uMzEgKi8KIAogCQlyZGEuc3RhdHVzICY9IDB4ZmZmZjsKQEAgLTgzNiw5ICs4MzYsOSBAQAogCWJhZGRyID0gcHJpdi0+dHhidWZzdGFydCArIChwcml2LT5uZXh0dHhkZXNjciAqIFBLVFNJWkUpOwogCW1lbWNweV90b2lvKHByaXYtPmJhc2UgKyBiYWRkciwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkvKiBjb3B5IGZpbGxlciBpbnRvIFJBTSAtIGluIGNhc2Ugd2UncmUgZmlsbGluZyB1cC4uLiAKKwkvKiBjb3B5IGZpbGxlciBpbnRvIFJBTSAtIGluIGNhc2Ugd2UncmUgZmlsbGluZyB1cC4uLgogCSAgIHdlJ3JlIGZpbGxpbmcgYSBiaXQgbW9yZSB0aGFuIG5lY2Vzc2FyeSwgYnV0IHRoYXQgZG9lc24ndCBoYXJtCi0JICAgc2luY2UgdGhlIGJ1ZmZlciBpcyBmYXIgbGFyZ2VyLi4uIAorCSAgIHNpbmNlIHRoZSBidWZmZXIgaXMgZmFyIGxhcmdlci4uLgogCSAgIFNvcnJ5IExpbnVzIGZvciB0aGUgZmlsbGVyIHN0cmluZyBidXQgSSBjb3VsZG4ndCByZXNpc3QgOy0pICovCiAKIAlpZiAodG1wbGVuID4gc2tiLT5sZW4pIHsKQEAgLTk1Miw3ICs5NTIsNyBAQAogCXByaXYtPnJlYWxpcnEgPSBpcnE7CiAJcHJpdi0+bWVkaXVtID0gbWVkaXVtOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQkJCisKIAogCS8qIHNldCBiYXNlICsgaXJxIGZvciB0aGlzIGRldmljZSAoaXJxIG5vdCBhbGxvY2F0ZWQgc28gZmFyKSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1sYW5hLmggYi9kcml2ZXJzL25ldC9pYm1sYW5hLmgKaW5kZXggNDU4ZWUyMi4uNmI1OGJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtbGFuYS5oCisrKyBiL2RyaXZlcnMvbmV0L2libWxhbmEuaApAQCAtMTcsNyArMTcsNyBAQAogLyogbWVkaWEgZW51bWVyYXRpb24gLSBkZWZpbmVkIGluIGEgd2F5IHRoYXQgaXQgZml0cyBvbnRvIHRoZSBMQU4vQSdzCiAgICBQT1MgcmVnaXN0ZXJzLi4uICovCiAKLXR5cGVkZWYgZW51bSB7IAordHlwZWRlZiBlbnVtIHsKIAlNZWRpYV8xMEJhc2VULCBNZWRpYV8xMEJhc2U1LAogCU1lZGlhX1Vua25vd24sIE1lZGlhXzEwQmFzZTIsIE1lZGlhX0NvdW50CiB9IGlibWxhbmFfbWVkaXVtOwpAQCAtMjcsNyArMjcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCBzbG90OwkJLyogTUNBLVNsb3QtIyAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0OwkvKiBwYWNrZXQgc3RhdGlzdGljcyAgICAgICAgICAgICovCi0JaW50IHJlYWxpcnE7CQkJLyogbWVtb3JpemVzIGFjdHVhbCBJUlEsIGV2ZW4gd2hlbiAKKwlpbnQgcmVhbGlycTsJCQkvKiBtZW1vcml6ZXMgYWN0dWFsIElSUSwgZXZlbiB3aGVuCiAJCQkJCSAgIGN1cnJlbnRseSBub3QgYWxsb2NhdGVkICAgICAgICAgICovCiAJaWJtbGFuYV9tZWRpdW0gbWVkaXVtOwkJLyogcGh5c2ljYWwgY2FubmVjdG9yICAgICAgICAgICAgICAgKi8KIAl1MzIgCXRkYXN0YXJ0LCB0eGJ1ZnN0YXJ0LAkvKiBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDEsNyArNDEsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH0gaWJtbGFuYV9wcml2OwogCi0vKiB0aGlzIGNhcmQgdXNlcyBxdWl0ZSBhIGxvdCBvZiBJL08gcG9ydHMuLi5sdWNraWx5IHRoZSBNQ0EgYnVzIGRlY29kZXMgCisvKiB0aGlzIGNhcmQgdXNlcyBxdWl0ZSBhIGxvdCBvZiBJL08gcG9ydHMuLi5sdWNraWx5IHRoZSBNQ0EgYnVzIGRlY29kZXMKICAgIGEgZnVsbCA2NEsgSS9PIHJhbmdlLi4uICovCiAKICNkZWZpbmUgSUJNX0xBTkFfSU9SQU5HRSAweGEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKaW5kZXggNTJkMDEwMi4uNjY2MzQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2libXZldGguYwpAQCAtMjQsNyArMjQsNyBAQAogLyogZm9yIHVzZSB3aXRoIElCTSBpL3BTZXJpZXMgTFBBUiBMaW51eC4gIEl0IHV0aWxpemVzIHRoZSBsb2dpY2FsIExBTiAgICAqLwogLyogb3B0aW9uIG9mIHRoZSBSUy82MDAwIFBsYXRmb3JtIEFyY2hpdGVjaHR1cmUgdG8gaW50ZXJmYWNlIHdpdGggdmlydHVhbCAqLwogLyogZXRoZXJuZXQgTklDcyB0aGF0IGFyZSBwcmVzZW50ZWQgdG8gdGhlIHBhcnRpdGlvbiBieSB0aGUgaHlwZXJ2aXNvci4gICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgIFRPRE86CkBAIC03OSw3ICs3OSw3IEBACiAjZWxzZQogI2RlZmluZSBpYm12ZXRoX2RlYnVnX3ByaW50a19ub19hZGFwdGVyKGZtdCwgYXJncy4uLikKICNkZWZpbmUgaWJtdmV0aF9kZWJ1Z19wcmludGsoZm10LCBhcmdzLi4uKQotI2RlZmluZSBpYm12ZXRoX2Fzc2VydChleHByKSAKKyNkZWZpbmUgaWJtdmV0aF9hc3NlcnQoZXhwcikKICNlbmRpZgogCiBzdGF0aWMgaW50IGlibXZldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTk2LDYgKzk2LDcgQEAKIHN0YXRpYyB2b2lkIGlibXZldGhfcHJvY191bnJlZ2lzdGVyX2FkYXB0ZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaWJtdmV0aF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBzdGF0aWMgaW5saW5lIHZvaWQgaWJtdmV0aF9yeHFfaGFydmVzdF9idWZmZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBrdHlwZV92ZXRoX3Bvb2w7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2RlZmluZSBJQk1WRVRIX1BST0NfRElSICJuZXQvaWJtdmV0aCIKQEAgLTEzMywxMiArMTM0LDEzIEBACiB9CiAKIC8qIHNldHVwIHRoZSBpbml0aWFsIHNldHRpbmdzIGZvciBhIGJ1ZmZlciBwb29sICovCi1zdGF0aWMgdm9pZCBpYm12ZXRoX2luaXRfYnVmZmVyX3Bvb2woc3RydWN0IGlibXZldGhfYnVmZl9wb29sICpwb29sLCB1MzIgcG9vbF9pbmRleCwgdTMyIHBvb2xfc2l6ZSwgdTMyIGJ1ZmZfc2l6ZSkKK3N0YXRpYyB2b2lkIGlibXZldGhfaW5pdF9idWZmZXJfcG9vbChzdHJ1Y3QgaWJtdmV0aF9idWZmX3Bvb2wgKnBvb2wsIHUzMiBwb29sX2luZGV4LCB1MzIgcG9vbF9zaXplLCB1MzIgYnVmZl9zaXplLCB1MzIgcG9vbF9hY3RpdmUpCiB7CiAJcG9vbC0+c2l6ZSA9IHBvb2xfc2l6ZTsKIAlwb29sLT5pbmRleCA9IHBvb2xfaW5kZXg7CiAJcG9vbC0+YnVmZl9zaXplID0gYnVmZl9zaXplOwogCXBvb2wtPnRocmVzaG9sZCA9IHBvb2xfc2l6ZSAvIDI7CisJcG9vbC0+YWN0aXZlID0gcG9vbF9hY3RpdmU7CiB9CiAKIC8qIGFsbG9jYXRlIGFuZCBzZXR1cCBhbiBidWZmZXIgcG9vbCAtIGNhbGxlZCBkdXJpbmcgb3BlbiAqLwpAQCAtMTQ2LDEzICsxNDgsMTMgQEAKIHsKIAlpbnQgaTsKIAotCXBvb2wtPmZyZWVfbWFwID0ga21hbGxvYyhzaXplb2YodTE2KSAqIHBvb2wtPnNpemUsIEdGUF9LRVJORUwpOyAKKwlwb29sLT5mcmVlX21hcCA9IGttYWxsb2Moc2l6ZW9mKHUxNikgKiBwb29sLT5zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmKCFwb29sLT5mcmVlX21hcCkgewogCQlyZXR1cm4gLTE7CiAJfQogCi0JcG9vbC0+ZG1hX2FkZHIgPSBrbWFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqIHBvb2wtPnNpemUsIEdGUF9LRVJORUwpOyAKKwlwb29sLT5kbWFfYWRkciA9IGttYWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICogcG9vbC0+c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYoIXBvb2wtPmRtYV9hZGRyKSB7CiAJCWtmcmVlKHBvb2wtPmZyZWVfbWFwKTsKIAkJcG9vbC0+ZnJlZV9tYXAgPSBOVUxMOwpAQCAtMTgwLDcgKzE4Miw2IEBACiAJYXRvbWljX3NldCgmcG9vbC0+YXZhaWxhYmxlLCAwKTsKIAlwb29sLT5wcm9kdWNlcl9pbmRleCA9IDA7CiAJcG9vbC0+Y29uc3VtZXJfaW5kZXggPSAwOwotCXBvb2wtPmFjdGl2ZSA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNCw3ICsyMTUsNyBAQAogCiAJCWZyZWVfaW5kZXggPSBwb29sLT5jb25zdW1lcl9pbmRleCsrICUgcG9vbC0+c2l6ZTsKIAkJaW5kZXggPSBwb29sLT5mcmVlX21hcFtmcmVlX2luZGV4XTsKLQkKKwogCQlpYm12ZXRoX2Fzc2VydChpbmRleCAhPSBJQk1fVkVUSF9JTlZBTElEX01BUCk7CiAJCWlibXZldGhfYXNzZXJ0KHBvb2wtPnNrYnVmZltpbmRleF0gPT0gTlVMTCk7CiAKQEAgLTIzMSwxMCArMjMyLDEwIEBACiAJCWRlc2MuZGVzYyA9IDA7CiAJCWRlc2MuZmllbGRzLnZhbGlkID0gMTsKIAkJZGVzYy5maWVsZHMubGVuZ3RoID0gcG9vbC0+YnVmZl9zaXplOwotCQlkZXNjLmZpZWxkcy5hZGRyZXNzID0gZG1hX2FkZHI7IAorCQlkZXNjLmZpZWxkcy5hZGRyZXNzID0gZG1hX2FkZHI7CiAKIAkJbHBhcl9yYyA9IGhfYWRkX2xvZ2ljYWxfbGFuX2J1ZmZlcihhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MsIGRlc2MuZGVzYyk7Ci0JCSAgICAKKwogCQlpZihscGFyX3JjICE9IEhfU1VDQ0VTUykgewogCQkJcG9vbC0+ZnJlZV9tYXBbZnJlZV9pbmRleF0gPSBpbmRleDsKIAkJCXBvb2wtPnNrYnVmZltpbmRleF0gPSBOVUxMOwpAQCAtMjUwLDEzICsyNTEsMTMgQEAKIAkJCWFkYXB0ZXItPnJlcGxlbmlzaF9hZGRfYnVmZl9zdWNjZXNzKys7CiAJCX0KIAl9Ci0gICAgCisKIAltYigpOwogCWF0b21pY19hZGQoYnVmZmVyc19hZGRlZCwgJihwb29sLT5hdmFpbGFibGUpKTsKIH0KIAogLyogcmVwbGVuaXNoIHJvdXRpbmUgKi8KLXN0YXRpYyB2b2lkIGlibXZldGhfcmVwbGVuaXNoX3Rhc2soc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcikgCitzdGF0aWMgdm9pZCBpYm12ZXRoX3JlcGxlbmlzaF90YXNrKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGk7CiAKQEAgLTI2NCw3ICsyNjUsNyBAQAogCiAJZm9yKGkgPSAwOyBpIDwgSWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspCiAJCWlmKGFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUpCi0JCQlpYm12ZXRoX3JlcGxlbmlzaF9idWZmZXJfcG9vbChhZGFwdGVyLCAKKwkJCWlibXZldGhfcmVwbGVuaXNoX2J1ZmZlcl9wb29sKGFkYXB0ZXIsCiAJCQkJCQkgICAgICZhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0pOwogCiAJYWRhcHRlci0+cnhfbm9fYnVmZmVyID0gKih1NjQqKSgoKGNoYXIqKWFkYXB0ZXItPmJ1ZmZlcl9saXN0X2FkZHIpICsgNDA5NiAtIDgpOwpAQCAtMzAxLDcgKzMwMiw2IEBACiAJCWtmcmVlKHBvb2wtPnNrYnVmZik7CiAJCXBvb2wtPnNrYnVmZiA9IE5VTEw7CiAJfQotCXBvb2wtPmFjdGl2ZSA9IDA7CiB9CiAKIC8qIHJlbW92ZSBhIGJ1ZmZlciBmcm9tIGEgcG9vbCAqLwpAQCAtMzcyLDcgKzM3Miw3IEBACiAJZGVzYy5maWVsZHMuYWRkcmVzcyA9IGFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtwb29sXS5kbWFfYWRkcltpbmRleF07CiAKIAlscGFyX3JjID0gaF9hZGRfbG9naWNhbF9sYW5fYnVmZmVyKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywgZGVzYy5kZXNjKTsKLQkJICAgIAorCiAJaWYobHBhcl9yYyAhPSBIX1NVQ0NFU1MpIHsKIAkJaWJtdmV0aF9kZWJ1Z19wcmludGsoImhfYWRkX2xvZ2ljYWxfbGFuX2J1ZmZlciBmYWlsZWQgZHVyaW5nIHJlY3ljbGUgcmM9JWxkIiwgbHBhcl9yYyk7CiAJCWlibXZldGhfcmVtb3ZlX2J1ZmZlcl9mcm9tX3Bvb2woYWRhcHRlciwgYWRhcHRlci0+cnhfcXVldWUucXVldWVfYWRkclthZGFwdGVyLT5yeF9xdWV1ZS5pbmRleF0uY29ycmVsYXRvcik7CkBAIC00MDcsNyArNDA3LDcgQEAKIAkJfQogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYWRhcHRlci0+YnVmZmVyX2xpc3RfYWRkcik7CiAJCWFkYXB0ZXItPmJ1ZmZlcl9saXN0X2FkZHIgPSBOVUxMOwotCX0gCisJfQogCiAJaWYoYWRhcHRlci0+ZmlsdGVyX2xpc3RfYWRkciAhPSBOVUxMKSB7CiAJCWlmKCFkbWFfbWFwcGluZ19lcnJvcihhZGFwdGVyLT5maWx0ZXJfbGlzdF9kbWEpKSB7CkBAIC00MzMsNyArNDMzLDkgQEAKIAl9CiAKIAlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspCi0JCWlibXZldGhfZnJlZV9idWZmZXJfcG9vbChhZGFwdGVyLCAmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldKTsKKwkJaWYgKGFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUpCisJCQlpYm12ZXRoX2ZyZWVfYnVmZmVyX3Bvb2woYWRhcHRlciwKKwkJCQkJCSAmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldKTsKIH0KIAogc3RhdGljIGludCBpYm12ZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTQ1MCwxMCArNDUyLDEwIEBACiAKIAlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspCiAJCXJ4cV9lbnRyaWVzICs9IGFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5zaXplOwotICAgIAorCiAJYWRhcHRlci0+YnVmZmVyX2xpc3RfYWRkciA9ICh2b2lkKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWFkYXB0ZXItPmZpbHRlcl9saXN0X2FkZHIgPSAodm9pZCopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLSAKKwogCWlmKCFhZGFwdGVyLT5idWZmZXJfbGlzdF9hZGRyIHx8ICFhZGFwdGVyLT5maWx0ZXJfbGlzdF9hZGRyKSB7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgZmlsdGVyIG9yIGJ1ZmZlciBsaXN0IHBhZ2VzXG4iKTsKIAkJaWJtdmV0aF9jbGVhbnVwKGFkYXB0ZXIpOwpAQCAtNDg5LDkgKzQ5MSw2IEBACiAJYWRhcHRlci0+cnhfcXVldWUubnVtX3Nsb3RzID0gcnhxX2VudHJpZXM7CiAJYWRhcHRlci0+cnhfcXVldWUudG9nZ2xlID0gMTsKIAotCS8qIGNhbGwgY2hhbmdlX210dSB0byBpbml0IHRoZSBidWZmZXIgcG9vbHMgYmFzZWQgaW4gaW5pdGlhbCBtdHUgKi8KLQlpYm12ZXRoX2NoYW5nZV9tdHUobmV0ZGV2LCBuZXRkZXYtPm10dSk7Ci0KIAltZW1jcHkoJm1hY19hZGRyZXNzLCBuZXRkZXYtPmRldl9hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAltYWNfYWRkcmVzcyA9IG1hY19hZGRyZXNzID4+IDE2OwogCkBAIC01MDQsNyArNTAzLDcgQEAKIAlpYm12ZXRoX2RlYnVnX3ByaW50aygiZmlsdGVyIGxpc3QgQCAweCVwXG4iLCBhZGFwdGVyLT5maWx0ZXJfbGlzdF9hZGRyKTsKIAlpYm12ZXRoX2RlYnVnX3ByaW50aygicmVjZWl2ZSBxICAgQCAweCVwXG4iLCBhZGFwdGVyLT5yeF9xdWV1ZS5xdWV1ZV9hZGRyKTsKIAotICAgIAorCiAJbHBhcl9yYyA9IGhfcmVnaXN0ZXJfbG9naWNhbF9sYW4oYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCQkgYWRhcHRlci0+YnVmZmVyX2xpc3RfZG1hLAogCQkJCQkgcnhxX2Rlc2MuZGVzYywKQEAgLTUxOSw3ICs1MTgsMTggQEAKIAkJCQkgICAgIHJ4cV9kZXNjLmRlc2MsCiAJCQkJICAgICBtYWNfYWRkcmVzcyk7CiAJCWlibXZldGhfY2xlYW51cChhZGFwdGVyKTsKLQkJcmV0dXJuIC1FTk9ORVQ7IAorCQlyZXR1cm4gLUVOT05FVDsKKwl9CisKKwlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspIHsKKwkJaWYoIWFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUpCisJCQljb250aW51ZTsKKwkJaWYgKGlibXZldGhfYWxsb2NfYnVmZmVyX3Bvb2woJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXSkpIHsKKwkJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2MgcG9vbFxuIik7CisJCQlhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYWN0aXZlID0gMDsKKwkJCWlibXZldGhfY2xlYW51cChhZGFwdGVyKTsKKwkJCXJldHVybiAtRU5PTUVNIDsKKwkJfQogCX0KIAogCWlibXZldGhfZGVidWdfcHJpbnRrKCJyZWdpc3RlcmluZyBpcnEgMHgleFxuIiwgbmV0ZGV2LT5pcnEpOwpAQCAtNTQ3LDEwICs1NTcsMTEgQEAKIHsKIAlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2LT5wcml2OwogCWxvbmcgbHBhcl9yYzsKLSAgICAKKwogCWlibXZldGhfZGVidWdfcHJpbnRrKCJjbG9zZSBzdGFydGluZ1xuIik7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJaWYgKCFhZGFwdGVyLT5wb29sX2NvbmZpZykKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCiAJZnJlZV9pcnEobmV0ZGV2LT5pcnEsIG5ldGRldik7CiAKQEAgLTY5NCw3ICs3MDUsNyBAQAogCQkJCQkgICAgIGRlc2NbNV0uZGVzYywKIAkJCQkJICAgICBjb3JyZWxhdG9yKTsKIAl9IHdoaWxlICgobHBhcl9yYyA9PSBIX0JVU1kpICYmIChyZXRyeV9jb3VudC0tKSk7Ci0gICAgCisKIAlpZihscGFyX3JjICE9IEhfU1VDQ0VTUyAmJiBscGFyX3JjICE9IEhfRFJPUFBFRCkgewogCQlpbnQgaTsKIAkJaWJtdmV0aF9lcnJvcl9wcmludGsoInR4OiBoX3NlbmRfbG9naWNhbF9sYW4gZmFpbGVkIHdpdGggcmM9JWxkXG4iLCBscGFyX3JjKTsKQEAgLTc4MCw3ICs3OTEsNyBAQAogCQkvKiBtb3JlIHdvcmsgdG8gZG8gLSByZXR1cm4gdGhhdCB3ZSBhcmUgbm90IGRvbmUgeWV0ICovCiAJCW5ldGRldi0+cXVvdGEgLT0gZnJhbWVzX3Byb2Nlc3NlZDsKIAkJKmJ1ZGdldCAtPSBmcmFtZXNfcHJvY2Vzc2VkOwotCQlyZXR1cm4gMTsgCisJCXJldHVybiAxOwogCX0KIAogCS8qIHdlIHRoaW5rIHdlIGFyZSBkb25lIC0gcmVlbmFibGUgaW50ZXJydXB0cywgdGhlbiBjaGVjayBvbmNlIG1vcmUgdG8gbWFrZSBzdXJlIHdlIGFyZSBkb25lICovCkBAIC04MDYsNyArODE3LDcgQEAKIH0KIAogc3RhdGljIGlycXJldHVybl90IGlibXZldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17ICAgCit7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldl9pbnN0YW5jZTsKIAlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKQEAgLTg2Miw3ICs4NzMsNyBAQAogCQkJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJoX211bHRpY2FzdF9jdHJsIHJjPSVsZCB3aGVuIGFkZGluZyBhbiBlbnRyeSB0byB0aGUgZmlsdGVyIHRhYmxlXG4iLCBscGFyX3JjKTsKIAkJCX0KIAkJfQotCQorCiAJCS8qIHJlLWVuYWJsZSBmaWx0ZXJpbmcgKi8KIAkJbHBhcl9yYyA9IGhfbXVsdGljYXN0X2N0cmwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCQkgICBJYm1WZXRoTWNhc3RFbmFibGVGaWx0ZXJpbmcsCkBAIC04NzYsNDYgKzg4NywyMiBAQAogc3RhdGljIGludCBpYm12ZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IGRldi0+cHJpdjsKKwlpbnQgbmV3X210dV9vaCA9IG5ld19tdHUgKyBJQk1WRVRIX0JVRkZfT0g7CiAJaW50IGk7Ci0JaW50IHByZXZfc21hbGxlciA9IDE7CiAKLQlpZiAoKG5ld19tdHUgPCA2OCkgfHwgCi0JICAgIChuZXdfbXR1ID4gKHBvb2xfc2l6ZVtJYm1WZXRoTnVtQnVmZmVyUG9vbHMtMV0pIC0gSUJNVkVUSF9CVUZGX09IKSkKKwlpZiAobmV3X210dSA8IElCTVZFVEhfTUFYX01UVSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBMb29rIGZvciBhbiBhY3RpdmUgYnVmZmVyIHBvb2wgdGhhdCBjYW4gaG9sZCB0aGUgbmV3IE1UVSAqLwogCWZvcihpID0gMDsgaTxJYm1WZXRoTnVtQnVmZmVyUG9vbHM7IGkrKykgewotCQlpbnQgYWN0aXZhdGUgPSAwOwotCQlpZiAobmV3X210dSA+IChwb29sX3NpemVbaV0gIC0gSUJNVkVUSF9CVUZGX09IKSkgeyAKLQkJCWFjdGl2YXRlID0gMTsKLQkJCXByZXZfc21hbGxlcj0gMTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwcmV2X3NtYWxsZXIpCi0JCQkJYWN0aXZhdGUgPSAxOwotCQkJcHJldl9zbWFsbGVyPSAwOworCQlpZiAoIWFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUpCisJCQljb250aW51ZTsKKwkJaWYgKG5ld19tdHVfb2ggPCBhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYnVmZl9zaXplKSB7CisJCQlkZXYtPm10dSA9IG5ld19tdHU7CisJCQlyZXR1cm4gMDsKIAkJfQotCi0JCWlmIChhY3RpdmF0ZSAmJiAhYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmFjdGl2ZSkgewotCQkJc3RydWN0IGlibXZldGhfYnVmZl9wb29sICpwb29sID0gCi0JCQkJCQkmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldOwotCQkJaWYoaWJtdmV0aF9hbGxvY19idWZmZXJfcG9vbChwb29sKSkgewotCQkJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2MgcG9vbFxuIik7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0JCQlhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYWN0aXZlID0gMTsKLQkJfSBlbHNlIGlmICghYWN0aXZhdGUgJiYgYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmFjdGl2ZSkgewotCQkJYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmFjdGl2ZSA9IDA7Ci0JCQloX2ZyZWVfbG9naWNhbF9sYW5fYnVmZmVyKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKLQkJCQkJICAodTY0KXBvb2xfc2l6ZVtpXSk7Ci0JCX0KLQogCX0KLQotCS8qIGtpY2sgdGhlIGludGVycnVwdCBoYW5kbGVyIHNvIHRoYXQgdGhlIG5ldyBidWZmZXIgcG9vbHMgZ2V0Ci0JICAgcmVwbGVuaXNoZWQgb3IgZGVhbGxvY2F0ZWQgKi8KLQlpYm12ZXRoX2ludGVycnVwdChkZXYtPmlycSwgZGV2LCBOVUxMKTsKLQotCWRldi0+bXR1ID0gbmV3X210dTsKLQlyZXR1cm4gMDsJCisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlibXZldGhfcHJvYmUoc3RydWN0IHZpb19kZXYgKmRldiwgY29uc3Qgc3RydWN0IHZpb19kZXZpY2VfaWQgKmlkKQpAQCAtOTI4LDcgKzkxNSw3IEBACiAJdW5zaWduZWQgaW50ICptY2FzdEZpbHRlclNpemVfcDsKIAogCi0JaWJtdmV0aF9kZWJ1Z19wcmludGtfbm9fYWRhcHRlcigiZW50ZXJpbmcgaWJtdmV0aF9wcm9iZSBmb3IgVUEgMHgleFxuIiwgCisJaWJtdmV0aF9kZWJ1Z19wcmludGtfbm9fYWRhcHRlcigiZW50ZXJpbmcgaWJtdmV0aF9wcm9iZSBmb3IgVUEgMHgleFxuIiwKIAkJCQkJZGV2LT51bml0X2FkZHJlc3MpOwogCiAJbWFjX2FkZHJfcCA9ICh1bnNpZ25lZCBjaGFyICopIHZpb19nZXRfYXR0cmlidXRlKGRldiwgVkVUSF9NQUNfQUREUiwgMCk7CkBAIC05MzcsNyArOTI0LDcgQEAKIAkJCQkiYXR0cmlidXRlXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwogCQlyZXR1cm4gMDsKIAl9Ci0JCisKIAltY2FzdEZpbHRlclNpemVfcD0gKHVuc2lnbmVkIGludCAqKSB2aW9fZ2V0X2F0dHJpYnV0ZShkZXYsIFZFVEhfTUNBU1RfRklMVEVSX1NJWkUsIDApOwogCWlmKCFtY2FzdEZpbHRlclNpemVfcCkgewogCQlwcmludGsoS0VSTl9FUlIgIiglczolMy4zZCkgRVJST1I6IENhbid0IGZpbmQgIgpAQCAtOTQ1LDcgKzkzMiw3IEBACiAJCQkJX19GSUxFX18sIF9fTElORV9fKTsKIAkJcmV0dXJuIDA7CiAJfQotCQorCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIpKTsKIAogCWlmKCFuZXRkZXYpCkBAIC05NjAsMTMgKzk0NywxNCBAQAogCWFkYXB0ZXItPnZkZXYgPSBkZXY7CiAJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwogCWFkYXB0ZXItPm1jYXN0RmlsdGVyU2l6ZT0gKm1jYXN0RmlsdGVyU2l6ZV9wOwotCQorCWFkYXB0ZXItPnBvb2xfY29uZmlnID0gMDsKKwogCS8qIAlTb21lIG9sZGVyIGJveGVzIHJ1bm5pbmcgUEhZUCBub24tbmF0aXZlbHkgaGF2ZSBhbiBPRiB0aGF0Ci0JCXJldHVybnMgYSA4LWJ5dGUgbG9jYWwtbWFjLWFkZHJlc3MgZmllbGQgKGFuZCB0aGUgZmlyc3QgCisJCXJldHVybnMgYSA4LWJ5dGUgbG9jYWwtbWFjLWFkZHJlc3MgZmllbGQgKGFuZCB0aGUgZmlyc3QKIAkJMiBieXRlcyBoYXZlIHRvIGJlIGlnbm9yZWQpIHdoaWxlIG5ld2VyIGJveGVzJyBPRiByZXR1cm4KLQkJYSA2LWJ5dGUgZmllbGQuIE5vdGUgdGhhdCBJRUVFIDEyNzUgc3BlY2lmaWVzIHRoYXQgCisJCWEgNi1ieXRlIGZpZWxkLiBOb3RlIHRoYXQgSUVFRSAxMjc1IHNwZWNpZmllcyB0aGF0CiAJCWxvY2FsLW1hYy1hZGRyZXNzIG11c3QgYmUgYSA2LWJ5dGUgZmllbGQuCi0JCVRoZSBSUEEgZG9jIHNwZWNpZmllcyB0aGF0IHRoZSBmaXJzdCBieXRlIG11c3QgYmUgMTBiLCBzbyAKKwkJVGhlIFJQQSBkb2Mgc3BlY2lmaWVzIHRoYXQgdGhlIGZpcnN0IGJ5dGUgbXVzdCBiZSAxMGIsIHNvCiAJCXdlJ2xsIGp1c3QgbG9vayBmb3IgaXQgdG8gc29sdmUgdGhpcyA4IHZzLiA2IGJ5dGUgZmllbGQgaXNzdWUgKi8KIAogCWlmICgoKm1hY19hZGRyX3AgJiAweDMpICE9IDB4MDIpCkBAIC05NzYsNyArOTY0LDcgQEAKIAltZW1jcHkoJmFkYXB0ZXItPm1hY19hZGRyLCBtYWNfYWRkcl9wLCA2KTsKIAogCWFkYXB0ZXItPmxpb2JuID0gZGV2LT5pb21tdV90YWJsZS0+aXRfaW5kZXg7Ci0JCisKIAluZXRkZXYtPmlycSA9IGRldi0+aXJxOwogCW5ldGRldi0+b3BlbiAgICAgICAgICAgICAgID0gaWJtdmV0aF9vcGVuOwogCW5ldGRldi0+cG9sbCAgICAgICAgICAgICAgID0gaWJtdmV0aF9wb2xsOwpAQCAtOTg5LDE0ICs5NzcsMjEgQEAKIAluZXRkZXYtPmV0aHRvb2xfb3BzICAgICAgICAgICA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAJbmV0ZGV2LT5jaGFuZ2VfbXR1ICAgICAgICAgPSBpYm12ZXRoX2NoYW5nZV9tdHU7CiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmZGV2LT5kZXYpOwotIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsgCisgCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5zdGF0c19sb2NrKTsKIAogCW1lbWNweSgmbmV0ZGV2LT5kZXZfYWRkciwgJmFkYXB0ZXItPm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAotCWZvcihpID0gMDsgaTxJYm1WZXRoTnVtQnVmZmVyUG9vbHM7IGkrKykKLQkJaWJtdmV0aF9pbml0X2J1ZmZlcl9wb29sKCZhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0sIGksIAotCQkJCQkgcG9vbF9jb3VudFtpXSwgcG9vbF9zaXplW2ldKTsKKwlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspIHsKKwkJc3RydWN0IGtvYmplY3QgKmtvYmogPSAmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmtvYmo7CisJCWlibXZldGhfaW5pdF9idWZmZXJfcG9vbCgmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLCBpLAorCQkJCQkgcG9vbF9jb3VudFtpXSwgcG9vbF9zaXplW2ldLAorCQkJCQkgcG9vbF9hY3RpdmVbaV0pOworCQlrb2JqLT5wYXJlbnQgPSAmZGV2LT5kZXYua29iajsKKwkJc3ByaW50Zihrb2JqLT5uYW1lLCAicG9vbCVkIiwgaSk7CisJCWtvYmotPmt0eXBlID0gJmt0eXBlX3ZldGhfcG9vbDsKKwkJa29iamVjdF9yZWdpc3Rlcihrb2JqKTsKKwl9CiAKIAlpYm12ZXRoX2RlYnVnX3ByaW50aygiYWRhcHRlciBAIDB4JXBcbiIsIGFkYXB0ZXIpOwogCkBAIC0xMDI1LDYgKzEwMjAsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKwlpbnQgaTsKKworCWZvcihpID0gMDsgaTxJYm1WZXRoTnVtQnVmZmVyUG9vbHM7IGkrKykKKwkJa29iamVjdF91bnJlZ2lzdGVyKCZhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0ua29iaik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCkBAIC0xMDQ4LDcgKzEwNDcsNyBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KElCTVZFVEhfUFJPQ19ESVIsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCAqaWJtdmV0aF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKSAKK3N0YXRpYyB2b2lkICppYm12ZXRoX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJaWYgKCpwb3MgPT0gMCkgewogCQlyZXR1cm4gKHZvaWQgKikxOwpAQCAtMTA2MywxOCArMTA2MiwxOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBpYm12ZXRoX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KSAKK3N0YXRpYyB2b2lkIGlibXZldGhfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiB9CiAKLXN0YXRpYyBpbnQgaWJtdmV0aF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikgCitzdGF0aWMgaW50IGlibXZldGhfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IHNlcS0+cHJpdmF0ZTsKIAljaGFyICpjdXJyZW50X21hYyA9ICgoY2hhciopICZhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyKTsKIAljaGFyICpmaXJtd2FyZV9tYWMgPSAoKGNoYXIqKSAmYWRhcHRlci0+bWFjX2FkZHIpIDsKIAogCXNlcV9wcmludGYoc2VxLCAiJXMgJXNcblxuIiwgaWJtdmV0aF9kcml2ZXJfc3RyaW5nLCBpYm12ZXRoX2RyaXZlcl92ZXJzaW9uKTsKLQkKKwogCXNlcV9wcmludGYoc2VxLCAiVW5pdCBBZGRyZXNzOiAgICAweCV4XG4iLCBhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MpOwogCXNlcV9wcmludGYoc2VxLCAiTElPQk46ICAgICAgICAgICAweCVseFxuIiwgYWRhcHRlci0+bGlvYm4pOwogCXNlcV9wcmludGYoc2VxLCAiQ3VycmVudCBNQUM6ICAgICAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKQEAgLTEwODMsNyArMTA4Miw3IEBACiAJc2VxX3ByaW50ZihzZXEsICJGaXJtd2FyZSBNQUM6ICAgICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAogCQkgICBmaXJtd2FyZV9tYWNbMF0sIGZpcm13YXJlX21hY1sxXSwgZmlybXdhcmVfbWFjWzJdLAogCQkgICBmaXJtd2FyZV9tYWNbM10sIGZpcm13YXJlX21hY1s0XSwgZmlybXdhcmVfbWFjWzVdKTsKLQkKKwogCXNlcV9wcmludGYoc2VxLCAiXG5BZGFwdGVyIFN0YXRpc3RpY3M6XG4iKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgVFg6ICBza2J1ZmZzIGxpbmVhcml6ZWQ6ICAgICAgICAgICVsZFxuIiwgYWRhcHRlci0+dHhfbGluZWFyaXplZCk7CiAJc2VxX3ByaW50ZihzZXEsICIgICAgICAgbXVsdGktZGVzY3JpcHRvciBzZW5kczogICAgICAlbGRcbiIsIGFkYXB0ZXItPnR4X211bHRpZGVzY19zZW5kKTsKQEAgLTEwOTUsNyArMTA5NCw3IEBACiAJc2VxX3ByaW50ZihzZXEsICIgICAgICAgYWRkIGJ1ZmZlciBmYWlsdXJlczogICAgICAgICAlbGRcbiIsIGFkYXB0ZXItPnJlcGxlbmlzaF9hZGRfYnVmZl9mYWlsdXJlKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgICAgICBpbnZhbGlkIGJ1ZmZlcnM6ICAgICAgICAgICAgICVsZFxuIiwgYWRhcHRlci0+cnhfaW52YWxpZF9idWZmZXIpOwogCXNlcV9wcmludGYoc2VxLCAiICAgICAgIG5vIGJ1ZmZlcnM6ICAgICAgICAgICAgICAgICAgJWxkXG4iLCBhZGFwdGVyLT5yeF9ub19idWZmZXIpOwotCQorCiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlibXZldGhfc2VxX29wcyA9IHsKQEAgLTExNTMsMTEgKzExNTIsMTEgQEAKIH0KIAogI2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi8KLXN0YXRpYyB2b2lkIGlibXZldGhfcHJvY19yZWdpc3Rlcl9hZGFwdGVyKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpIAorc3RhdGljIHZvaWQgaWJtdmV0aF9wcm9jX3JlZ2lzdGVyX2FkYXB0ZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcikKIHsKIH0KIAotc3RhdGljIHZvaWQgaWJtdmV0aF9wcm9jX3VucmVnaXN0ZXJfYWRhcHRlcihzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyKSAKK3N0YXRpYyB2b2lkIGlibXZldGhfcHJvY191bnJlZ2lzdGVyX2FkYXB0ZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcikKIHsKIH0KIHN0YXRpYyB2b2lkIGlibXZldGhfcHJvY19yZWdpc3Rlcl9kcml2ZXIodm9pZCkKQEAgLTExNjksNiArMTE2OCwxMzIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSB2ZXRoX2FjdGl2ZV9hdHRyOworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdmV0aF9udW1fYXR0cjsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHZldGhfc2l6ZV9hdHRyOworCitzdGF0aWMgc3NpemVfdCB2ZXRoX3Bvb2xfc2hvdyhzdHJ1Y3Qga29iamVjdCAqIGtvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwgY2hhciAqIGJ1ZikKK3sKKwlzdHJ1Y3QgaWJtdmV0aF9idWZmX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yoa29iaiwKKwkJCQkJCSAgICAgIHN0cnVjdCBpYm12ZXRoX2J1ZmZfcG9vbCwKKwkJCQkJCSAgICAgIGtvYmopOworCisJaWYgKGF0dHIgPT0gJnZldGhfYWN0aXZlX2F0dHIpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb29sLT5hY3RpdmUpOworCWVsc2UgaWYgKGF0dHIgPT0gJnZldGhfbnVtX2F0dHIpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb29sLT5zaXplKTsKKwllbHNlIGlmIChhdHRyID09ICZ2ZXRoX3NpemVfYXR0cikKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBvb2wtPmJ1ZmZfc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZldGhfcG9vbF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLAorY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpYm12ZXRoX2J1ZmZfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZihrb2JqLAorCQkJCQkJICAgICAgc3RydWN0IGlibXZldGhfYnVmZl9wb29sLAorCQkJCQkJICAgICAga29iaik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9CisJICAgIGNvbnRhaW5lcl9vZihrb2JqLT5wYXJlbnQsIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2LT5wcml2OworCWxvbmcgdmFsdWUgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWxvbmcgcmM7CisKKwlpZiAoYXR0ciA9PSAmdmV0aF9hY3RpdmVfYXR0cikgeworCQlpZiAodmFsdWUgJiYgIXBvb2wtPmFjdGl2ZSkgeworCQkJaWYoaWJtdmV0aF9hbGxvY19idWZmZXJfcG9vbChwb29sKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYm12ZXRoX2Vycm9yX3ByaW50aygidW5hYmxlIHRvIGFsbG9jIHBvb2xcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCXBvb2wtPmFjdGl2ZSA9IDE7CisJCQlhZGFwdGVyLT5wb29sX2NvbmZpZyA9IDE7CisJCQlpYm12ZXRoX2Nsb3NlKG5ldGRldik7CisJCQlhZGFwdGVyLT5wb29sX2NvbmZpZyA9IDA7CisJCQlpZiAoKHJjID0gaWJtdmV0aF9vcGVuKG5ldGRldikpKQorCQkJCXJldHVybiByYzsKKwkJfSBlbHNlIGlmICghdmFsdWUgJiYgcG9vbC0+YWN0aXZlKSB7CisJCQlpbnQgbXR1ID0gbmV0ZGV2LT5tdHUgKyBJQk1WRVRIX0JVRkZfT0g7CisJCQlpbnQgaTsKKwkJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGJ1ZmZlciBwb29sIHdpdGggYnVmZmVycyB0aGF0CisJCQkgICBjYW4gaG9sZCBhIHBhY2tldCBvZiB0aGUgc2l6ZSBvZiB0aGUgTVRVICovCisJCQlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspIHsKKwkJCQlpZiAocG9vbCA9PSAmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoIWFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChtdHUgPCBhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYnVmZl9zaXplKSB7CisJCQkJCXBvb2wtPmFjdGl2ZSA9IDA7CisJCQkJCWhfZnJlZV9sb2dpY2FsX2xhbl9idWZmZXIoYWRhcHRlci0+CisJCQkJCQkJCSAgdmRldi0+CisJCQkJCQkJCSAgdW5pdF9hZGRyZXNzLAorCQkJCQkJCQkgIHBvb2wtPgorCQkJCQkJCQkgIGJ1ZmZfc2l6ZSk7CisJCQkJfQorCQkJfQorCQkJaWYgKHBvb2wtPmFjdGl2ZSkgeworCQkJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJubyBhY3RpdmUgcG9vbCA+PSBNVFVcbiIpOworCQkJCXJldHVybiAtRVBFUk07CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGF0dHIgPT0gJnZldGhfbnVtX2F0dHIpIHsKKwkJaWYgKHZhbHVlIDw9IDAgfHwgdmFsdWUgPiBJQk1WRVRIX01BWF9QT09MX0NPVU5UKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UgeworCQkJYWRhcHRlci0+cG9vbF9jb25maWcgPSAxOworCQkJaWJtdmV0aF9jbG9zZShuZXRkZXYpOworCQkJYWRhcHRlci0+cG9vbF9jb25maWcgPSAwOworCQkJcG9vbC0+c2l6ZSA9IHZhbHVlOworCQkJaWYgKChyYyA9IGlibXZldGhfb3BlbihuZXRkZXYpKSkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKwl9IGVsc2UgaWYgKGF0dHIgPT0gJnZldGhfc2l6ZV9hdHRyKSB7CisJCWlmICh2YWx1ZSA8PSBJQk1WRVRIX0JVRkZfT0ggfHwgdmFsdWUgPiBJQk1WRVRIX01BWF9CVUZfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQllbHNlIHsKKwkJCWFkYXB0ZXItPnBvb2xfY29uZmlnID0gMTsKKwkJCWlibXZldGhfY2xvc2UobmV0ZGV2KTsKKwkJCWFkYXB0ZXItPnBvb2xfY29uZmlnID0gMDsKKwkJCXBvb2wtPmJ1ZmZfc2l6ZSA9IHZhbHVlOworCQkJaWYgKChyYyA9IGlibXZldGhfb3BlbihuZXRkZXYpKSkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwkvKiBraWNrIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBhbGxvY2F0ZS9kZWFsbG9jYXRlIHBvb2xzICovCisJaWJtdmV0aF9pbnRlcnJ1cHQobmV0ZGV2LT5pcnEsIG5ldGRldiwgTlVMTCk7CisJcmV0dXJuIGNvdW50OworfQorCisKKyNkZWZpbmUgQVRUUihfbmFtZSwgX21vZGUpICAgICAgXAorICAgICAgICBzdHJ1Y3QgYXR0cmlidXRlIHZldGhfIyNfbmFtZSMjX2F0dHIgPSB7ICAgICAgICAgICAgICAgXAorICAgICAgICAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSwgLm93bmVyID0gVEhJU19NT0RVTEUgXAorICAgICAgICB9OworCitzdGF0aWMgQVRUUihhY3RpdmUsIDA2NDQpOworc3RhdGljIEFUVFIobnVtLCAwNjQ0KTsKK3N0YXRpYyBBVFRSKHNpemUsIDA2NDQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHZldGhfcG9vbF9hdHRyc1tdID0geworCSZ2ZXRoX2FjdGl2ZV9hdHRyLAorCSZ2ZXRoX251bV9hdHRyLAorCSZ2ZXRoX3NpemVfYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgdmV0aF9wb29sX29wcyA9IHsKKwkuc2hvdyAgID0gdmV0aF9wb29sX3Nob3csCisJLnN0b3JlICA9IHZldGhfcG9vbF9zdG9yZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGt0eXBlX3ZldGhfcG9vbCA9IHsKKwkucmVsZWFzZSAgICAgICAgPSBOVUxMLAorCS5zeXNmc19vcHMgICAgICA9ICZ2ZXRoX3Bvb2xfb3BzLAorCS5kZWZhdWx0X2F0dHJzICA9IHZldGhfcG9vbF9hdHRycywKK307CisKKwogc3RhdGljIHN0cnVjdCB2aW9fZGV2aWNlX2lkIGlibXZldGhfZGV2aWNlX3RhYmxlW10gX19kZXZpbml0ZGF0YT0gewogCXsgIm5ldHdvcmsiLCAiSUJNLGwtbGFuIn0sCiAJeyAiIiwgIiIgfQpAQCAtMTE5OCw3ICsxMzIzLDcgQEAKIHsKIAl2aW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmlibXZldGhfZHJpdmVyKTsKIAlpYm12ZXRoX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoKTsKLX0JCit9CiAKIG1vZHVsZV9pbml0KGlibXZldGhfbW9kdWxlX2luaXQpOwogbW9kdWxlX2V4aXQoaWJtdmV0aF9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm12ZXRoLmggYi9kcml2ZXJzL25ldC9pYm12ZXRoLmgKaW5kZXggNDY5MTlhOC4uODM4NWJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtdmV0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2libXZldGguaApAQCAtNzUsMTAgKzc1LDEzIEBACiAKICNkZWZpbmUgSWJtVmV0aE51bUJ1ZmZlclBvb2xzIDUKICNkZWZpbmUgSUJNVkVUSF9CVUZGX09IIDIyIC8qIE92ZXJoZWFkOiAxNCBldGhlcm5ldCBoZWFkZXIgKyA4IG9wYXF1ZSBoYW5kbGUgKi8KKyNkZWZpbmUgSUJNVkVUSF9NQVhfTVRVIDY4CisjZGVmaW5lIElCTVZFVEhfTUFYX1BPT0xfQ09VTlQgNDA5NgorI2RlZmluZSBJQk1WRVRIX01BWF9CVUZfU0laRSAoMTAyNCAqIDEyOCkKIAotLyogcG9vbF9zaXplIHNob3VsZCBiZSBzb3J0ZWQgKi8KIHN0YXRpYyBpbnQgcG9vbF9zaXplW10gPSB7IDUxMiwgMTAyNCAqIDIsIDEwMjQgKiAxNiwgMTAyNCAqIDMyLCAxMDI0ICogNjQgfTsKIHN0YXRpYyBpbnQgcG9vbF9jb3VudFtdID0geyAyNTYsIDc2OCwgMjU2LCAyNTYsIDI1NiB9Oworc3RhdGljIGludCBwb29sX2FjdGl2ZVtdID0geyAxLCAxLCAwLCAwLCAwfTsKIAogI2RlZmluZSBJQk1fVkVUSF9JTlZBTElEX01BUCAoKHUxNikweGZmZmYpCiAKQEAgLTk0LDYgKzk3LDcgQEAKICAgICBkbWFfYWRkcl90ICpkbWFfYWRkcjsKICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnVmZjsKICAgICBpbnQgYWN0aXZlOworICAgIHN0cnVjdCBrb2JqZWN0IGtvYmo7CiB9OwogCiBzdHJ1Y3QgaWJtdmV0aF9yeF9xIHsKQEAgLTExOCw2ICsxMjIsNyBAQAogICAgIGRtYV9hZGRyX3QgZmlsdGVyX2xpc3RfZG1hOwogICAgIHN0cnVjdCBpYm12ZXRoX2J1ZmZfcG9vbCByeF9idWZmX3Bvb2xbSWJtVmV0aE51bUJ1ZmZlclBvb2xzXTsKICAgICBzdHJ1Y3QgaWJtdmV0aF9yeF9xIHJ4X3F1ZXVlOworICAgIGludCBwb29sX2NvbmZpZzsKIAogICAgIC8qIGFkYXB0ZXIgc3BlY2lmaWMgc3RhdHMgKi8KICAgICB1NjQgcmVwbGVuaXNoX3Rhc2tfY3ljbGVzOwpAQCAtMTM0LDcgKzEzOSw3IEBACiAgICAgc3BpbmxvY2tfdCBzdGF0c19sb2NrOwogfTsKIAotc3RydWN0IGlibXZldGhfYnVmX2Rlc2NfZmllbGRzIHsJCitzdHJ1Y3QgaWJtdmV0aF9idWZfZGVzY19maWVsZHMgewogICAgIHUzMiB2YWxpZCA6IDE7CiAgICAgdTMyIHRvZ2dsZSA6IDE7CiAgICAgdTMyIHJlc2VydmVkIDogNjsKQEAgLTE0Myw3ICsxNDgsNyBAQAogfTsKIAogdW5pb24gaWJtdmV0aF9idWZfZGVzYyB7Ci0gICAgdTY0IGRlc2M7CQorICAgIHU2NCBkZXNjOwogICAgIHN0cnVjdCBpYm12ZXRoX2J1Zl9kZXNjX2ZpZWxkcyBmaWVsZHM7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZmIuYyBiL2RyaXZlcnMvbmV0L2lmYi5jCmluZGV4IDMxZmIyZDcuLjJlMjIyZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lmYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lmYi5jCkBAIC03NiwxMyArNzYsMTMgQEAKIAlkcC0+c3RfdGFza19lbnRlcisrOwogCWlmICgoc2tiID0gc2tiX3BlZWsoJmRwLT50cSkpID09IE5VTEwpIHsKIAkJZHAtPnN0X3R4cV9yZWZsX3RyeSsrOwotCQlpZiAoc3Bpbl90cnlsb2NrKCZfZGV2LT54bWl0X2xvY2spKSB7CisJCWlmIChuZXRpZl90eF90cnlsb2NrKF9kZXYpKSB7CiAJCQlkcC0+c3RfcnhxX2VudGVyKys7CiAJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZkcC0+cnEpKSAhPSBOVUxMKSB7CiAJCQkJc2tiX3F1ZXVlX3RhaWwoJmRwLT50cSwgc2tiKTsKIAkJCQlkcC0+c3RfcngydHhfdHJhbisrOwogCQkJfQotCQkJc3Bpbl91bmxvY2soJl9kZXYtPnhtaXRfbG9jayk7CisJCQluZXRpZl90eF91bmxvY2soX2Rldik7CiAJCX0gZWxzZSB7CiAJCQkvKiByZXNjaGVkdWxlICovCiAJCQlkcC0+c3RfcnhxX25vdGVudGVyKys7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJfQogCX0KIAotCWlmIChzcGluX3RyeWxvY2soJl9kZXYtPnhtaXRfbG9jaykpIHsKKwlpZiAobmV0aWZfdHhfdHJ5bG9jayhfZGV2KSkgewogCQlkcC0+c3RfcnhxX2NoZWNrKys7CiAJCWlmICgoc2tiID0gc2tiX3BlZWsoJmRwLT5ycSkpID09IE5VTEwpIHsKIAkJCWRwLT50YXNrbGV0X3BlbmRpbmcgPSAwOwpAQCAtMTE4LDEwICsxMTgsMTAgQEAKIAkJCQluZXRpZl93YWtlX3F1ZXVlKF9kZXYpOwogCQl9IGVsc2UgewogCQkJZHAtPnN0X3J4cV9yc2NoKys7Ci0JCQlzcGluX3VubG9jaygmX2Rldi0+eG1pdF9sb2NrKTsKKwkJCW5ldGlmX3R4X3VubG9jayhfZGV2KTsKIAkJCWdvdG8gcmVzY2hlZDsKIAkJfQotCQlzcGluX3VubG9jaygmX2Rldi0+eG1pdF9sb2NrKTsKKwkJbmV0aWZfdHhfdW5sb2NrKF9kZXYpOwogCX0gZWxzZSB7CiByZXNjaGVkOgogCQlkcC0+dGFza2xldF9wZW5kaW5nID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZwppbmRleCBjZmY4NTk4Li5kMmNlNDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCkBAIC00MTcsNSArNDE3LDIwIEBACiAJICBhdmFpbGFibGUgY2FwYWJpbGl0aWVzIG1heSB2YXJ5IGZyb20gb25lIFBYQTJ4eCB0YXJnZXQgdG8KIAkgIGFub3RoZXIuCiAKK2NvbmZpZyBNQ1NfRklSCisJdHJpc3RhdGUgIk1vc0NoaXAgTUNTNzc4MCBJckRBLVVTQiBkb25nbGUiCisJZGVwZW5kcyBvbiBJUkRBICYmIFVTQiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBvciBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIE1vc0NoaXAKKwkgIE1DUzc3ODAgSXJEQS1VU0IgYnJpZGdlIGRldmljZSBkcml2ZXIuCisKKwkgIFVTQiBicmlkZ2UgYmFzZWQgb24gdGhlIE1vc0NoaXAgTUNTNzc4MCBkb24ndCBjb25mb3JtIHRvIHRoZQorCSAgSXJEQS1VU0IgZGV2aWNlIGNsYXNzIHNwZWNpZmljYXRpb24sIGFuZCB0aGVyZWZvcmUgbmVlZCB0aGVpcgorCSAgb3duIHNwZWNpZmljIGRyaXZlci4gVGhvc2UgZG9uZ2xlcyBzdXBwb3J0IFNJUiBhbmQgRklSICg0TWJwcykKKwkgIHNwZWVkcy4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZAorCSAgbWNzNzc4MC4KKwogZW5kbWVudQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQppbmRleCBjMWNlMjM5Li41YmUwOWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAKIG9iai0kKENPTkZJR19WTFNJX0ZJUikJCSs9IHZsc2lfaXIubwogb2JqLSQoQ09ORklHX1ZJQV9GSVIpCQkrPSB2aWEtaXJjYy5vCiBvYmotJChDT05GSUdfUFhBX0ZJQ1ApCSAgICAgICAgKz0gcHhhZmljcF9pci5vCitvYmotJChDT05GSUdfTUNTX0ZJUikJICAgICAgICArPSBtY3M3NzgwLm8KICMgT2xkIGRvbmdsZSBkcml2ZXJzIGZvciBvbGQgU0lSIGRyaXZlcnMKIG9iai0kKENPTkZJR19FU0lfRE9OR0xFX09MRCkJCSs9IGVzaS5vCiBvYmotJChDT05GSUdfVEVLUkFNX0RPTkdMRV9PTEQpCSs9IHRla3JhbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKaW5kZXggMmU3ODgyZS4uYmYxZmNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYwpAQCAtMzQsMTQgKzM0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9sZWdhY3kuaD4KLQogI2luY2x1ZGUgPG5ldC9pcmRhL3dyYXBwZXIuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4KQEAgLTUxLDcgKzQ5LDE5IEBACiAjZGVmaW5lIENISVBfSU9fRVhURU5UIDgKICNkZWZpbmUgQlJPS0VOX0RPTkdMRV9JRAogCi1zdGF0aWMgY2hhciAqZHJpdmVyX25hbWUgPSAiYWxpLWlyY2MiOworI2RlZmluZSBBTElfSVJDQ19EUklWRVJfTkFNRSAiYWxpLWlyY2MiCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KK3N0YXRpYyBpbnQgYWxpX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IGFsaV9pcmNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbGlfaXJjY19kcml2ZXIgPSB7CisJLnN1c3BlbmQJPSBhbGlfaXJjY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYWxpX2lyY2NfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IEFMSV9JUkNDX0RSSVZFUl9OQU1FLAorCX0sCit9OwogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogc3RhdGljIGludCBxb3NfbXR0X2JpdHMgPSAweDA3OyAgLyogMSBtcyBvciBtb3JlICovCkBAIC05NywxMCArMTA3LDcgQEAKIHN0YXRpYyBpbnQgIGFsaV9pcmNjX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgYWxpX2lyY2NfbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgYWxpX2lyY2NfbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIGludCAgYWxpX2lyY2NfcG1wcm9jKHN0cnVjdCBwbV9kZXYgKmRldiwgcG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgYWxpX2lyY2NfY2hhbmdlX3NwZWVkKHN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZiwgX191MzIgYmF1ZCk7Ci1zdGF0aWMgdm9pZCBhbGlfaXJjY19zdXNwZW5kKHN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZik7Ci1zdGF0aWMgdm9pZCBhbGlfaXJjY193YWtldXAoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYWxpX2lyY2NfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogU0lSIGZ1bmN0aW9uICovCkBAIC0xNDUsNiArMTUyLDE0IEBACiAJaW50IGkgPSAwOwogCQogCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0gU3RhcnQgLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWxpX2lyY2NfZHJpdmVyKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIElSREFfRVJST1IoIiVzLCBDYW4ndCByZWdpc3RlciBkcml2ZXIhXG4iLAorCQkJICAgQUxJX0lSQ0NfRFJJVkVSX05BTUUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKwogCQogCS8qIFByb2JlIGZvciBhbGwgdGhlIEFMaSBjaGlwc2V0cyB3ZSBrbm93IGFib3V0ICovCiAJZm9yIChjaGlwPSBjaGlwczsgY2hpcC0+bmFtZTsgY2hpcCsrLCBpKyspIApAQCAtMjE0LDYgKzIyOSwxMCBAQAogCX0JCQogCQkKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fRlVOQ1RJT05fXyk7CQkJCQkgICAJCQorCisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFsaV9pcmNjX2RyaXZlcik7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMjgsMTQgKzI0NywxNCBAQAogCWludCBpOwogCiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLSBTdGFydCAtLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18pOwkKLQkKLQlwbV91bnJlZ2lzdGVyX2FsbChhbGlfaXJjY19wbXByb2MpOwogCiAJZm9yIChpPTA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKGRldl9zZWxmW2ldKQogCQkJYWxpX2lyY2NfY2xvc2UoZGV2X3NlbGZbaV0pOwogCX0KIAkKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWxpX2lyY2NfZHJpdmVyKTsKKwogCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0tIEVuZCAtLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fKTsKIH0KIApAQCAtMjQ5LDcgKzI2OCw2IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGY7Ci0Jc3RydWN0IHBtX2RldiAqcG1kZXY7CiAJaW50IGRvbmdsZV9pZDsKIAlpbnQgZXJyOwogCQkJCkBAIC0yODQsNyArMzAyLDggQEAKICAgICAgICAgc2VsZi0+aW8uZmlmb19zaXplID0gMTY7CQkvKiBTSVI6IDE2LCBGSVI6IDMyIEJlbmphbWluIDIwMDAvMTEvMSAqLwogCQogCS8qIFJlc2VydmUgdGhlIGlvcG9ydHMgdGhhdCB3ZSBuZWVkICovCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihzZWxmLT5pby5maXJfYmFzZSwgc2VsZi0+aW8uZmlyX2V4dCwgZHJpdmVyX25hbWUpKSB7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzZWxmLT5pby5maXJfYmFzZSwgc2VsZi0+aW8uZmlyX2V4dCwKKwkJCSAgICBBTElfSVJDQ19EUklWRVJfTkFNRSkpIHsKIAkJSVJEQV9XQVJOSU5HKCIlcygpLCBjYW4ndCBnZXQgaW9iYXNlIG9mIDB4JTAzeFxuIiwgX19GVU5DVElPTl9fLAogCQkJc2VsZi0+aW8uZmlyX2Jhc2UpOwogCQllcnIgPSAtRU5PREVWOwpAQCAtMzU0LDEzICszNzMsMTAgQEAKIAogCS8qIENoZWNrIGRvbmdsZSBpZCAqLwogCWRvbmdsZV9pZCA9IGFsaV9pcmNjX3JlYWRfZG9uZ2xlX2lkKGksIGluZm8pOwotCUlSREFfTUVTU0FHRSgiJXMoKSwgJXMsIEZvdW5kIGRvbmdsZTogJXNcbiIsIF9fRlVOQ1RJT05fXywgZHJpdmVyX25hbWUsIGRvbmdsZV90eXBlc1tkb25nbGVfaWRdKTsKKwlJUkRBX01FU1NBR0UoIiVzKCksICVzLCBGb3VuZCBkb25nbGU6ICVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgQUxJX0lSQ0NfRFJJVkVSX05BTUUsIGRvbmdsZV90eXBlc1tkb25nbGVfaWRdKTsKIAkJCiAJc2VsZi0+aW8uZG9uZ2xlX2lkID0gZG9uZ2xlX2lkOwotCQotICAgICAgICBwbWRldiA9IHBtX3JlZ2lzdGVyKFBNX1NZU19ERVYsIFBNX1NZU19JUkRBLCBhbGlfaXJjY19wbXByb2MpOwotICAgICAgICBpZiAocG1kZXYpCi0gICAgICAgICAgICAgICAgcG1kZXYtPmRhdGEgPSBzZWxmOwogCiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18pOwogCQpAQCAtNTQ4LDEyICs1NjQsMTEgQEAKIAkvKiBTaG91bGQgYmUgMHgwMCBpbiB0aGUgTTE1MzUvTTE1MzVEICovCiAJaWYodmVyc2lvbiAhPSAweDAwKQogCXsKLQkJSVJEQV9FUlJPUigiJXMsIFdyb25nIGNoaXAgdmVyc2lvbiAlMDJ4XG4iLCBkcml2ZXJfbmFtZSwgdmVyc2lvbik7CisJCUlSREFfRVJST1IoIiVzLCBXcm9uZyBjaGlwIHZlcnNpb24gJTAyeFxuIiwKKwkJCSAgIEFMSV9JUkNDX0RSSVZFUl9OQU1FLCB2ZXJzaW9uKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkKLQkvLyBJUkRBX01FU1NBR0UoIiVzLCBGb3VuZCBjaGlwIGF0IGJhc2U9MHglMDN4XG4iLCBkcml2ZXJfbmFtZSwgaW5mby0+Y2ZnX2Jhc2UpOwotCQogCS8qIFNldCBGSVIgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KIAlzd2l0Y2hfYmFuayhpb2Jhc2UsIEJBTksxKTsKIAlvdXRiKFJYX0ZJRk9fVGhyZXNob2xkLCBpb2Jhc2UrRklSX0ZJRk9fVFIpOwpAQCAtNTgzLDcgKzU5OCw4IEBACiAJLyogU3dpdGNoIHRvIFNJUiBzcGFjZSAqLwogCUZJUjJTSVIoaW9iYXNlKTsKIAkKLQlJUkRBX01FU1NBR0UoIiVzLCBkcml2ZXIgbG9hZGVkIChCZW5qYW1pbiBLb25nKVxuIiwgZHJpdmVyX25hbWUpOworCUlSREFfTUVTU0FHRSgiJXMsIGRyaXZlciBsb2FkZWQgKEJlbmphbWluIEtvbmcpXG4iLAorCQkgICAgIEFMSV9JUkNDX0RSSVZFUl9OQU1FKTsKIAkKIAkvKiBFbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzICovIAogCS8vIG91dGIoVUFSVF9JRVJfUkRJLCBpb2Jhc2UrVUFSVF9JRVIpOyAvL2JlbmphbWluIDIwMDAvMTEvMjMgMDE6MjVQTQpAQCAtNjQ3LDcgKzY2Myw4IEBACiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLSBTdGFydCAtLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkKICAJaWYgKCFkZXYpIHsKLQkJSVJEQV9XQVJOSU5HKCIlczogaXJxICVkIGZvciB1bmtub3duIGRldmljZS5cbiIsIGRyaXZlcl9uYW1lLCBpcnEpOworCQlJUkRBX1dBUk5JTkcoIiVzOiBpcnEgJWQgZm9yIHVua25vd24gZGV2aWNlLlxuIiwKKwkJCSAgICAgQUxJX0lSQ0NfRFJJVkVSX05BTUUsIGlycSk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CQogCQpAQCAtMTMyOCw3ICsxMzQ1LDggQEAKIAkvKiBSZXF1ZXN0IElSUSBhbmQgaW5zdGFsbCBJbnRlcnJ1cHQgSGFuZGxlciAqLwogCWlmIChyZXF1ZXN0X2lycShzZWxmLT5pby5pcnEsIGFsaV9pcmNjX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpKSAKIAl7Ci0JCUlSREFfV0FSTklORygiJXMsIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnE9JWRcbiIsIGRyaXZlcl9uYW1lLAorCQlJUkRBX1dBUk5JTkcoIiVzLCB1bmFibGUgdG8gYWxsb2NhdGUgaXJxPSVkXG4iLAorCQkJICAgICBBTElfSVJDQ19EUklWRVJfTkFNRSwKIAkJCSAgICAgc2VsZi0+aW8uaXJxKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMTMzOCw3ICsxMzU2LDggQEAKIAkgKiBmYWlsdXJlLgogCSAqLwogCWlmIChyZXF1ZXN0X2RtYShzZWxmLT5pby5kbWEsIGRldi0+bmFtZSkpIHsKLQkJSVJEQV9XQVJOSU5HKCIlcywgdW5hYmxlIHRvIGFsbG9jYXRlIGRtYT0lZFxuIiwgZHJpdmVyX25hbWUsCisJCUlSREFfV0FSTklORygiJXMsIHVuYWJsZSB0byBhbGxvY2F0ZSBkbWE9JWRcbiIsCisJCQkgICAgIEFMSV9JUkNDX0RSSVZFUl9OQU1FLAogCQkJICAgICBzZWxmLT5pby5kbWEpOwogCQlmcmVlX2lycShzZWxmLT5pby5pcnEsIHNlbGYpOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTIxMDgsNjAgKzIxMjcsMzcgQEAKIAlyZXR1cm4gJnNlbGYtPnN0YXRzOwogfQogCi1zdGF0aWMgdm9pZCBhbGlfaXJjY19zdXNwZW5kKHN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZikKK3N0YXRpYyBpbnQgYWxpX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IC0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fRlVOQ1RJT05fXyApOworCXN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJCi0JSVJEQV9NRVNTQUdFKCIlcywgU3VzcGVuZGluZ1xuIiwgZHJpdmVyX25hbWUpOworCUlSREFfTUVTU0FHRSgiJXMsIFN1c3BlbmRpbmdcbiIsIEFMSV9JUkNDX0RSSVZFUl9OQU1FKTsKIAogCWlmIChzZWxmLT5pby5zdXNwZW5kZWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlhbGlfaXJjY19uZXRfY2xvc2Uoc2VsZi0+bmV0ZGV2KTsKIAogCXNlbGYtPmlvLnN1c3BlbmRlZCA9IDE7CiAJCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fICk7CQotfQotCi1zdGF0aWMgdm9pZCBhbGlfaXJjY193YWtldXAoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKQotewotCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0gU3RhcnQgLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fICk7Ci0JCi0JaWYgKCFzZWxmLT5pby5zdXNwZW5kZWQpCi0JCXJldHVybjsKLQkKLQlhbGlfaXJjY19uZXRfb3BlbihzZWxmLT5uZXRkZXYpOwotCQotCUlSREFfTUVTU0FHRSgiJXMsIFdha2luZyB1cFxuIiwgZHJpdmVyX25hbWUpOwotCi0Jc2VsZi0+aW8uc3VzcGVuZGVkID0gMDsKLQkKLQlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18gKTsJCi19Ci0KLXN0YXRpYyBpbnQgYWxpX2lyY2NfcG1wcm9jKHN0cnVjdCBwbV9kZXYgKmRldiwgcG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpCi17Ci0gICAgICAgIHN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZiA9IChzdHJ1Y3QgYWxpX2lyY2NfY2IqKSBkZXYtPmRhdGE7Ci0gICAgICAgIAotICAgICAgICBJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IC0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fRlVOQ1RJT05fXyApOwotCQotICAgICAgICBpZiAoc2VsZikgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocnFzdCkgewotICAgICAgICAgICAgICAgIGNhc2UgUE1fU1VTUEVORDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsaV9pcmNjX3N1c3BlbmQoc2VsZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFBNX1JFU1VNRToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsaV9pcmNjX3dha2V1cChzZWxmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fICk7CQotICAgICAgICAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhbGlfaXJjY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJCisJaWYgKCFzZWxmLT5pby5zdXNwZW5kZWQpCisJCXJldHVybiAwOworCQorCWFsaV9pcmNjX25ldF9vcGVuKHNlbGYtPm5ldGRldik7CisJCisJSVJEQV9NRVNTQUdFKCIlcywgV2FraW5nIHVwXG4iLCBBTElfSVJDQ19EUklWRVJfTkFNRSk7CisKKwlzZWxmLT5pby5zdXNwZW5kZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CiAKIC8qIEFMaSBDaGlwIEZ1bmN0aW9uICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwppbmRleCBjZDg3NTkzLi44NDRmYTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCkBAIC04Myw5ICs4Myw5IEBACiAJLyogRXh0ZW5kZWQgU3lzdGVtcywgSW5jLiwgIFhUTkRBY2Nlc3MgSXJEQSBVU0IgKEVTSS05Njg1KSAqLwogCXsgVVNCX0RFVklDRSgweDhlOSwgMHgxMDApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1BFRURfQlVHIHwgSVVDX05PX1dJTkRPVyB9LAogCS8qIFNpZ21hVGVsIFNUSVI0MjEwLzQyMjAvNDExNiBVU0IgSXJEQSAoVkZJUikgQnJpZGdlICovCi0JeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMTApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUl80MjEwIHwgSVVDX1NQRUVEX0JVRyB9LAotCXsgVVNCX0RFVklDRSgweDY2ZiwgMHg0MjIwKSwgLmRyaXZlcl9pbmZvID0gSVVDX1NUSVJfNDIxMCB8IElVQ19TUEVFRF9CVUcgfSwKLQl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDExNiksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSXzQyMTAgfCBJVUNfU1BFRURfQlVHIH0sCisJeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMTApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUjQyMVggfCBJVUNfU1BFRURfQlVHIH0sCisJeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMjApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUjQyMVggfCBJVUNfU1BFRURfQlVHIH0sCisJeyBVU0JfREVWSUNFKDB4NjZmLCAweDQxMTYpLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUjQyMVggfCBJVUNfU1BFRURfQlVHIH0sCiAJeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CiAJICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKIAkgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVBQX1NQRUMsCkBAIC0xNTQsNyArMTU0LDcgQEAKIAkgKiBhbmQgaWYgZWl0aGVyIHNwZWVkIG9yIHhib2ZzIChvciBib3RoKSBuZWVkcwogCSAqIHRvIGJlIGNoYW5nZWQuCiAJICovCi0JaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICYmCisJaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUjQyMVggJiYKIAkgICAgKChzZWxmLT5uZXdfc3BlZWQgIT0gLTEpIHx8IChzZWxmLT5uZXdfeGJvZnMgIT0gLTEpKSkgewogCiAJCS8qIFdpdGggU1RJUjQyMXgsIHNwZWVkIGFuZCB4Qk9GcyBtdXN0IGJlIHNldCBhdCB0aGUgc2FtZQpAQCAtMzE4LDcgKzMxOCw3IEBACiAJLyogU2V0IHRoZSBuZXcgc3BlZWQgYW5kIHhib2ZzIGluIHRoaXMgZmFrZSBmcmFtZSAqLwogCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBmcmFtZSwgMSk7CiAKLQlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkgeworCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVI0MjFYKSB7CiAJCWlmIChmcmFtZVswXSA9PSAwKSByZXR1cm4gOyAvLyBkbyBub3RoaW5nIGlmIG5vIGNoYW5nZQogCQlmcmFtZVsxXSA9IDA7IC8vIG90aGVyIHBhcmFtZXRlcnMgZG9uJ3QgY2hhbmdlIGhlcmUKIAkJZnJhbWVbMl0gPSAwOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAKIAkvKiBDaGFuZ2Ugc2V0dGluZyBmb3IgbmV4dCBmcmFtZSAqLwogCi0JaWYgKCBzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCApIHsKKwlpZiAoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSNDIxWCkgewogCQlfX3U4IHR1cm5hcm91bmRfdGltZTsKIAkJX191OCogZnJhbWU7CiAJCXR1cm5hcm91bmRfdGltZSA9IGdldF90dXJuYXJvdW5kX3RpbWUoIHNrYiApOwpAQCAtODk3LDEwICs4OTcsMTMgQEAKIAlkb2NvcHkgPSAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgSVJEQV9SWF9DT1BZX1RIUkVTSE9MRCk7CiAKIAkvKiBBbGxvY2F0ZSBhIG5ldyBza2IgKi8KLQlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkKLQkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVICsgVVNCX0lSREFfU0lHTUFURUxfSEVBREVSKTsKKwlpZiAoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSNDIxWCkKKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOgorCQkJCSAgICAgICBJUkRBX1NLQl9NQVhfTVRVICsKKwkJCQkgICAgICAgVVNCX0lSREFfU1RJUjQyMVhfSEVBREVSKTsKIAllbHNlCi0JCW5ld3NrYiA9IGRldl9hbGxvY19za2IoZG9jb3B5ID8gdXJiLT5hY3R1YWxfbGVuZ3RoIDogSVJEQV9TS0JfTUFYX01UVSk7CisJCW5ld3NrYiA9IGRldl9hbGxvY19za2IoZG9jb3B5ID8gdXJiLT5hY3R1YWxfbGVuZ3RoIDoKKwkJCQkgICAgICAgSVJEQV9TS0JfTUFYX01UVSk7CiAKIAlpZiAoIW5ld3NrYikgIHsKIAkJc2VsZi0+c3RhdHMucnhfZHJvcHBlZCsrOwpAQCAtMTAyMiwxODggKzEwMjUsMTQwIEBACiAJcmV0dXJuIDA7IC8qIEZvciBub3cgKi8KIH0KIAotCi0jZGVmaW5lIFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIgICAgICAgIlByb2R1Y3QgVmVyc2lvbjogIgotI2RlZmluZSBTVElSNDIxWF9QQVRDSF9DT01QT05FTlRfVkVSU0lPTl9TVFIgICAgICJDb21wb25lbnQgVmVyc2lvbjogIgotI2RlZmluZSBTVElSNDIxWF9QQVRDSF9EQVRBX1RBR19TVFIgICAgICAgICAgICAgICJTVE1QIgotI2RlZmluZSBTVElSNDIxWF9QQVRDSF9GSUxFX1ZFUlNJT05fTUFYX09GRlNFVCAgIDUxMiAgICAgLyogdmVyc2lvbiBpbmZvIGlzIGJlZm9yZSBoZXJlICovCi0jZGVmaW5lIFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVCAgICAgNTEyICAgICAvKiBwYXRjaCBpbWFnZSBzdGFydHMgYmVmb3JlIGhlcmUgKi8KLSNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfRklMRV9FTkRfT0ZfSEVBREVSX1RBRyAgICAweDFBICAgIC8qIG1hcmtzIGVuZCBvZiBwYXRjaCBmaWxlIGhlYWRlciAoUEMgRE9TIHRleHQgZmlsZSBFT0YgY2hhcmFjdGVyKSAqLworI2RlZmluZSBTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUiAgICAgIlByb2R1Y3QgVmVyc2lvbjogIgorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9TVE1QX1RBRyAgICAgICAgIlNUTVAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0NPREVfT0ZGU0VUICAgICA1MTIgLyogcGF0Y2ggaW1hZ2Ugc3RhcnRzIGJlZm9yZSBoZXJlICovCisvKiBtYXJrcyBlbmQgb2YgcGF0Y2ggZmlsZSBoZWFkZXIgKFBDIERPUyB0ZXh0IGZpbGUgRU9GIGNoYXJhY3RlcikgKi8KKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfRU5EX09GX0hEUl9UQUcgIDB4MUEKKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfQkxPQ0tfU0laRSAgICAgIDEwMjMKIAogLyoKLSAqIEtub3duIGZpcm13YXJlIHBhdGNoZXMgZm9yIFNUSVI0MjF4IGRvbmdsZXMKKyAqIEZ1bmN0aW9uIHN0aXI0MjF4X2Z3dXBsb2FkIChzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcGF0Y2gsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHBhdGNoX2xlbikKKyAqCisgKiAgIFVwbG9hZCBmaXJtd2FyZSBjb2RlIHRvIFNpZ21hVGVsIDQyMVggSVJEQS1VU0IgZG9uZ2xlCiAgKi8KLXN0YXRpYyBjaGFyICogc3RpcjQyMXhfcGF0Y2hlc1tdID0gewotCSI0MjEwMTAwMS5zYiIsCi0JIjQyMTAxMDAyLnNiIiwKLX07Ci0KLXN0YXRpYyBpbnQgc3RpcjQyMXhfZ2V0X3BhdGNoX3ZlcnNpb24odW5zaWduZWQgY2hhciAqIHBhdGNoLCBjb25zdCB1bnNpZ25lZCBsb25nIHBhdGNoX2xlbikKK3N0YXRpYyBpbnQgc3RpcjQyMXhfZndfdXBsb2FkKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZiwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqcGF0Y2gsCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBwYXRjaF9sZW4pCiB7Ci0JdW5zaWduZWQgaW50IHZlcnNpb25fb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgdmVyc2lvbl9tYWpvciwgdmVyc2lvbl9taW5vciwgdmVyc2lvbl9idWlsZDsKLQl1bnNpZ25lZCBjaGFyICogdmVyc2lvbl9zdGFydDsKLQlpbnQgdmVyc2lvbl9mb3VuZCA9IDA7CisgICAgICAgIGludCByZXQgPSAtRU5PTUVNOworICAgICAgICBpbnQgYWN0dWFsX2xlbiA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICB1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBhdGNoX2Jsb2NrOwogCi0JZm9yICh2ZXJzaW9uX29mZnNldCA9IDA7Ci0JICAgICB2ZXJzaW9uX29mZnNldCA8IFNUSVI0MjFYX1BBVENIX0ZJTEVfRU5EX09GX0hFQURFUl9UQUc7Ci0JICAgICB2ZXJzaW9uX29mZnNldCsrKSB7Ci0JCWlmICghbWVtY21wKHBhdGNoICsgdmVyc2lvbl9vZmZzZXQsCi0JCQkgICAgU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVJTSU9OX1NUUiwKLQkJCSAgICBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVJTSU9OX1NUUikgLSAxKSkgewotCQkJCSAgICB2ZXJzaW9uX2ZvdW5kID0gMTsKLQkJCQkgICAgdmVyc2lvbl9zdGFydCA9IHBhdGNoICsKLQkJCQkJICAgIHZlcnNpb25fb2Zmc2V0ICsKLQkJCQkJICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUlNJT05fU1RSKSAtIDE7Ci0JCQkJICAgIGJyZWFrOwotCQl9CisgICAgICAgIHBhdGNoX2Jsb2NrID0ga3phbGxvYyhTVElSNDIxWF9QQVRDSF9CTE9DS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAocGF0Y2hfYmxvY2sgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBicmVhayB1cCBwYXRjaCBpbnRvIDEwMjMtYnl0ZSBzZWN0aW9ucyAqLworCWZvciAoaSA9IDA7IGkgPCBwYXRjaF9sZW47IGkgKz0gYmxvY2tfc2l6ZSkgeworCQlibG9ja19zaXplID0gcGF0Y2hfbGVuIC0gaTsKKworCQlpZiAoYmxvY2tfc2l6ZSA+IFNUSVI0MjFYX1BBVENIX0JMT0NLX1NJWkUpCisJCQlibG9ja19zaXplID0gU1RJUjQyMVhfUEFUQ0hfQkxPQ0tfU0laRTsKKworCQkvKiB1cGxvYWQgdGhlIHBhdGNoIHNlY3Rpb24gKi8KKwkJbWVtY3B5KHBhdGNoX2Jsb2NrLCBwYXRjaCArIGksIGJsb2NrX3NpemUpOworCisJCXJldCA9IHVzYl9idWxrX21zZyhzZWxmLT51c2JkZXYsCisJCQkJICAgdXNiX3NuZGJ1bGtwaXBlKHNlbGYtPnVzYmRldiwKKwkJCQkJCSAgIHNlbGYtPmJ1bGtfb3V0X2VwKSwKKwkJCQkgICBwYXRjaF9ibG9jaywgYmxvY2tfc2l6ZSwKKwkJCQkgICAmYWN0dWFsX2xlbiwgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKwkJSVJEQV9ERUJVRygzLCIlcygpOiBCdWxrIHNlbmQgJXUgYnl0ZXMsIHJldD0lZFxuIiwKKwkJCSAgIF9fRlVOQ1RJT05fXywgYWN0dWFsX2xlbiwgcmV0KTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOwogCX0KIAotCS8qIFdlIGNvdWxkbid0IGZpbmQgYSBwcm9kdWN0IHZlcnNpb24gb24gdGhpcyBwYXRjaCAqLwotCWlmICghdmVyc2lvbl9mb3VuZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUocGF0Y2hfYmxvY2spOwogCi0JLyogTGV0J3MgY2hlY2sgaWYgdGhlIHByb2R1Y3QgdmVyc2lvbiBpcyBkb3R0ZWQgKi8KLQlpZiAodmVyc2lvbl9zdGFydFszXSAhPSAnLicgfHwKLQkgICAgdmVyc2lvbl9zdGFydFs3XSAhPSAnLicpCi0JCXJldHVybiAtRUlOVkFMOworICAgICAgICByZXR1cm4gcmV0OworIH0KIAotCXZlcnNpb25fbWFqb3IgPSBzaW1wbGVfc3RydG91bCh2ZXJzaW9uX3N0YXJ0LCBOVUxMLCAxMCk7Ci0JdmVyc2lvbl9taW5vciA9IHNpbXBsZV9zdHJ0b3VsKHZlcnNpb25fc3RhcnQgKyA0LCBOVUxMLCAxMCk7Ci0JdmVyc2lvbl9idWlsZCA9IHNpbXBsZV9zdHJ0b3VsKHZlcnNpb25fc3RhcnQgKyA4LCBOVUxMLCAxMCk7Ci0KLQlJUkRBX0RFQlVHKDIsICIlcygpLCBNYWpvcjogJWxkIE1pbm9yOiAlbGQgQnVpbGQ6ICVsZFxuIiwKLQkJICAgX19GVU5DVElPTl9fLAotCQkgICB2ZXJzaW9uX21ham9yLCB2ZXJzaW9uX21pbm9yLCB2ZXJzaW9uX2J1aWxkKTsKLQotCXJldHVybiAoKCh2ZXJzaW9uX21ham9yKSA8PCAxMikgKwotCQkoKHZlcnNpb25fbWlub3IpIDw8IDgpICsKLQkJKCh2ZXJzaW9uX2J1aWxkIC8gMTApIDw8IDQpICsKLQkJKHZlcnNpb25fYnVpbGQgJSAxMCkpOwotCi19Ci0KLQotc3RhdGljIGludCBzdGlyNDIxeF91cGxvYWRfcGF0Y2ggKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZiwKLQkJCQkgIHVuc2lnbmVkIGNoYXIgKiBwYXRjaCwKLQkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBwYXRjaF9sZW4pCi17Ci0gICAgaW50IHJldHZhbCA9IDA7Ci0gICAgaW50IGFjdHVhbF9sZW47Ci0gICAgdW5zaWduZWQgaW50IGkgPSAwLCBkb3dubG9hZF9hbW91bnQgPSAwOwotICAgIHVuc2lnbmVkIGNoYXIgKiBwYXRjaF9jaHVuazsKLQotICAgIElSREFfREVCVUcgKDIsICIlcygpLCBVcGxvYWRpbmcgU1RJUjQyMXggUGF0Y2hcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLSAgICBwYXRjaF9jaHVuayA9IGt6YWxsb2MoU1RJUjQyMVhfTUFYX1BBVENIX0RPV05MT0FEX1NJWkUsIEdGUF9LRVJORUwpOwotICAgIGlmIChwYXRjaF9jaHVuayA9PSBOVUxMKQotCSAgICByZXR1cm4gLUVOT01FTTsKLQotICAgIC8qIGJyZWFrIHVwIHBhdGNoIGludG8gMTAyMy1ieXRlIHNlY3Rpb25zICovCi0gICAgZm9yIChpID0gMDsgcmV0dmFsID49IDAgJiYgaSA8IHBhdGNoX2xlbjsgaSArPSBkb3dubG9hZF9hbW91bnQpIHsKLQkgICAgZG93bmxvYWRfYW1vdW50ID0gcGF0Y2hfbGVuIC0gaTsKLQkgICAgaWYgKGRvd25sb2FkX2Ftb3VudCA+IFNUSVI0MjFYX01BWF9QQVRDSF9ET1dOTE9BRF9TSVpFKQotCQkgICAgZG93bmxvYWRfYW1vdW50ID0gU1RJUjQyMVhfTUFYX1BBVENIX0RPV05MT0FEX1NJWkU7Ci0KLQkgICAgLyogZG93bmxvYWQgdGhlIHBhdGNoIHNlY3Rpb24gKi8KLQkgICAgbWVtY3B5KHBhdGNoX2NodW5rLCBwYXRjaCArIGksIGRvd25sb2FkX2Ftb3VudCk7Ci0KLQkgICAgcmV0dmFsID0gdXNiX2J1bGtfbXNnIChzZWxmLT51c2JkZXYsCi0JCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChzZWxmLT51c2JkZXYsCi0JCQkJCQkgICAgc2VsZi0+YnVsa19vdXRfZXApLAotCQkJCSAgIHBhdGNoX2NodW5rLCBkb3dubG9hZF9hbW91bnQsCi0JCQkJICAgJmFjdHVhbF9sZW4sIG1zZWNzX3RvX2ppZmZpZXMgKDUwMCkpOwotCSAgICBJUkRBX0RFQlVHICgyLCAiJXMoKSwgU2VudCAldSBieXRlc1xuIiwgX19GVU5DVElPTl9fLAotCQkJYWN0dWFsX2xlbik7Ci0JICAgIGlmIChyZXR2YWwgPT0gMCkKLQkJICAgIG1kZWxheSgxMCk7Ci0gICAgfQotCi0gICAga2ZyZWUocGF0Y2hfY2h1bmspOwotCi0gICAgaWYgKGkgIT0gcGF0Y2hfbGVuKSB7Ci0JICAgIElSREFfRVJST1IgKCIlcygpLCBQdXNoZWQgJWQgYnl0ZXMgKCE9IHBhdGNoX2xlbiAoJWQpKVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgaSwgcGF0Y2hfbGVuKTsKLQkgICAgcmV0dmFsID0gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAocmV0dmFsIDwgMCkKLQkgICAgLyogdG9kbyAtIG1hcmsgZGV2aWNlIGFzIG5vdCByZWFkeSAqLwotCSAgICBJUkRBX0VSUk9SICgiJXMoKSwgU1RJUjQyMXggcGF0Y2ggdXBsb2FkIGZhaWxlZCAoJWQpXG4iLAotCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOwotCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotCisvKgorICogRnVuY3Rpb24gc3RpcjQyMXhfcGF0Y2hfZGV2aWNlKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZikKKyAqCisgKiBHZXQgYSBmaXJtd2FyZSBjb2RlIGZyb20gdXNlcnNwYXNlIHVzaW5nIGhvdHBsdWcgcmVxdWVzdF9maXJtd2FyZSgpIGNhbGwKKyAgKi8KIHN0YXRpYyBpbnQgc3RpcjQyMXhfcGF0Y2hfZGV2aWNlKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZikKIHsKLQl1bnNpZ25lZCBpbnQgaSwgcGF0Y2hfZm91bmQgPSAwLCBkYXRhX2ZvdW5kID0gMCwgZGF0YV9vZmZzZXQ7Ci0JaW50IHBhdGNoX3ZlcnNpb24sIHJldCA9IDA7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIGNoYXIgc3RpcjQyMXhfZndfbmFtZVsxMV07CisgICAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmZ3X3ZlcnNpb25fcHRyOyAvKiBwb2ludGVyIHRvIHZlcnNpb24gc3RyaW5nICovCisJdW5zaWduZWQgbG9uZyBmd192ZXJzaW9uID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0aXI0MjF4X3BhdGNoZXMpOyBpKyspIHsKLQkJaWYocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHN0aXI0MjF4X3BhdGNoZXNbaV0sICZzZWxmLT51c2JkZXYtPmRldikgIT0gMCkgewotCQkJSVJEQV9FUlJPUiggIiVzKCksIFBhdGNoICVzIGlzIG5vdCBhdmFpbGFibGVcbiIsIF9fRlVOQ1RJT05fXywgc3RpcjQyMXhfcGF0Y2hlc1tpXSk7Ci0JCQljb250aW51ZTsKLQkJfQorICAgICAgICAvKgorICAgICAgICAgKiBLbm93biBmaXJtd2FyZSBwYXRjaCBmaWxlIG5hbWVzIGZvciBTVElSNDIxeCBkb25nbGVzCisgICAgICAgICAqIGFyZSAiNDIxMDEwMDEuc2IiIG9yICI0MjEwMTAwMi5zYiIKKyAgICAgICAgICovCisgICAgICAgIHNwcmludGYoc3RpcjQyMXhfZndfbmFtZSwgIjQyMTAlNFguc2IiLAorICAgICAgICAgICAgICAgIHNlbGYtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworICAgICAgICByZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgc3RpcjQyMXhfZndfbmFtZSwgJnNlbGYtPnVzYmRldi0+ZGV2KTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKIAotICAgICAgICAgICAgICAgIC8qIFdlIGZvdW5kIGEgcGF0Y2ggZnJvbSB1c2Vyc3BhY2UgKi8KLQkJcGF0Y2hfdmVyc2lvbiA9IHN0aXI0MjF4X2dldF9wYXRjaF92ZXJzaW9uIChmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUpOworICAgICAgICAvKiBXZSBnZXQgYSBwYXRjaCBmcm9tIHVzZXJzcGFjZSAqLworICAgICAgICBJUkRBX01FU1NBR0UoIiVzKCk6IFJlY2VpdmVkIGZpcm13YXJlICVzICgldSBieXRlcylcbiIsCisgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHN0aXI0MjF4X2Z3X25hbWUsIGZ3LT5zaXplKTsKIAotCQlpZiAocGF0Y2hfdmVyc2lvbiA8IDApIHsKLQkJCS8qIENvdWxkbid0IGZldGNoIGEgdmVyc2lvbiwgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBmaWxlICovCi0JCQlJUkRBX0VSUk9SKCIlcygpLCB2ZXJzaW9uIHBhcnNpbmcgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJcmV0ID0gcGF0Y2hfdmVyc2lvbjsKLQkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCQkJY29udGludWU7Ci0JCX0KKyAgICAgICAgcmV0ID0gLUVJTlZBTDsKIAotCQlpZiAocGF0Y2hfdmVyc2lvbiAhPSBzZWxmLT51c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSB7Ci0JCQkvKiBQYXRjaCB2ZXJzaW9uIGFuZCBkZXZpY2UgZG9uJ3QgbWF0Y2ggKi8KLQkJCUlSREFfRVJST1IgKCIlcygpLCB3cm9uZyBwYXRjaCB2ZXJzaW9uICglZCA8LT4gJWQpXG4iLAotCQkJCSAgICBfX0ZVTkNUSU9OX18sCi0JCQkJICAgIHBhdGNoX3ZlcnNpb24sIHNlbGYtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCQkJY29udGludWU7Ci0JCX0KKwkvKiBHZXQgdGhlIGJjZCBwcm9kdWN0IHZlcnNpb24gKi8KKyAgICAgICAgaWYgKCFtZW1jbXAoZnctPmRhdGEsIFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVIpIC0gMSkpIHsKKyAgICAgICAgICAgICAgICBmd192ZXJzaW9uX3B0ciA9IGZ3LT5kYXRhICsKKwkJCXNpemVvZihTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUikgLSAxOwogCi0JCS8qIElmIHdlJ3JlIGhlcmUsIHdlJ3ZlIGZvdW5kIGEgY29ycmVjdCBwYXRjaCAqLwotCQlwYXRjaF9mb3VuZCA9IDE7Ci0JCWJyZWFrOworICAgICAgICAgICAgICAgIC8qIExldCdzIGNoZWNrIGlmIHRoZSBwcm9kdWN0IHZlcnNpb24gaXMgZG90dGVkICovCisgICAgICAgICAgICAgICAgaWYgKGZ3X3ZlcnNpb25fcHRyWzNdID09ICcuJyAmJgorCQkgICAgZndfdmVyc2lvbl9wdHJbN10gPT0gJy4nKSB7CisJCQl1bnNpZ25lZCBsb25nIG1ham9yLCBtaW5vciwgYnVpbGQ7CisJCQltYWpvciA9IHNpbXBsZV9zdHJ0b3VsKGZ3X3ZlcnNpb25fcHRyLCBOVUxMLCAxMCk7CisJCQltaW5vciA9IHNpbXBsZV9zdHJ0b3VsKGZ3X3ZlcnNpb25fcHRyICsgNCwgTlVMTCwgMTApOworCQkJYnVpbGQgPSBzaW1wbGVfc3RydG91bChmd192ZXJzaW9uX3B0ciArIDgsIE5VTEwsIDEwKTsKIAotCX0KKwkJCWZ3X3ZlcnNpb24gPSAobWFqb3IgPDwgMTIpCisJCQkJKyAobWlub3IgPDwgOCkKKwkJCQkrICgoYnVpbGQgLyAxMCkgPDwgNCkKKwkJCQkrIChidWlsZCAlIDEwKTsKIAotCS8qIFdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBmaXJtd2FyZSwgbGV0J3MgbGVhdmUgKi8KLQlpZiAoIXBhdGNoX2ZvdW5kKQotCQlyZXR1cm4gcmV0OworCQkJSVJEQV9ERUJVRygzLCAiJXMoKTogRmlybXdhcmUgUHJvZHVjdCB2ZXJzaW9uICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBmd192ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotCS8qIFRoZSBhY3R1YWwgaW1hZ2Ugc3RhcnRzIGFmdGVyIHRoZSAiU1RNUCIga2V5d29yZCAqLwotCWZvciAoZGF0YV9vZmZzZXQgPSAwOyBkYXRhX29mZnNldCA8IFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVDsgZGF0YV9vZmZzZXQrKykgewotCQlpZiAoIW1lbWNtcChmd19lbnRyeS0+ZGF0YSArIGRhdGFfb2Zmc2V0LAotCQkJICAgIFNUSVI0MjFYX1BBVENIX0RBVEFfVEFHX1NUUiwKLQkJCSAgICBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUKSkpIHsKLQkJCUlSREFfREVCVUcoMiwgIiVzKCksIGZvdW5kIHBhdGNoIGRhdGEgZm9yIFNUSVI0MjF4IGF0IG9mZnNldCAlZFxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18sIGRhdGFfb2Zmc2V0KTsKLQkJCWRhdGFfZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisgICAgICAgIGlmIChzZWxmLT51c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlID09IGZ3X3ZlcnNpb24pIHsKKyAgICAgICAgICAgICAgICAvKgorCQkgKiBJZiB3ZSdyZSBoZXJlLCB3ZSd2ZSBmb3VuZCBhIGNvcnJlY3QgcGF0Y2gKKyAgICAgICAgICAgICAgICAgKiBUaGUgYWN0dWFsIGltYWdlIHN0YXJ0cyBhZnRlciB0aGUgIlNUTVAiIGtleXdvcmQKKyAgICAgICAgICAgICAgICAgKiBzbyBmb3J3YXJkIHRvIHRoZSBmaXJtd2FyZSBoZWFkZXIgdGFnCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgKGZ3LT5kYXRhW2ldICE9IFNUSVI0MjFYX1BBVENIX0VORF9PRl9IRFJfVEFHKQorCQkJICAgICAmJiAoaSA8IGZ3LT5zaXplKTsgaSsrKSA7CisgICAgICAgICAgICAgICAgLyogaGVyZSB3ZSBjaGVjayBmb3IgdGhlIG91dCBvZiBidWZmZXIgY2FzZSAqLworICAgICAgICAgICAgICAgIGlmICgoU1RJUjQyMVhfUEFUQ0hfRU5EX09GX0hEUl9UQUcgPT0gZnctPmRhdGFbaV0pCisgICAgICAgICAgICAgICAgICAgICYmIChpIDwgU1RJUjQyMVhfUEFUQ0hfQ09ERV9PRkZTRVQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1lbWNtcChmdy0+ZGF0YSArIGkgKyAxLCBTVElSNDIxWF9QQVRDSF9TVE1QX1RBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9TVE1QX1RBRykgLSAxKSkgewogCi0JLyogV2UgY291bGRuJ3QgZmluZCAiU1RNUCIgZnJvbSB0aGUgaGVhZGVyICovCi0JaWYgKCFkYXRhX2ZvdW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkvKiBXZSBjYW4gdXBsb2FkIHRoZSBwYXRjaCB0byB0aGUgdGFyZ2V0ICovCisJCQkJaSArPSBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfU1RNUF9UQUcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzdGlyNDIxeF9md191cGxvYWQoc2VsZiwgJmZ3LT5kYXRhW2ldLAorCQkJCQkJCSBmdy0+c2l6ZSAtIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0JLyogTGV0J3MgdXBsb2FkIHRoZSBwYXRjaCB0byB0aGUgdGFyZ2V0ICovCi0JcmV0ID0gc3RpcjQyMXhfdXBsb2FkX3BhdGNoKHNlbGYsCi0JCQkJICAgICZmd19lbnRyeS0+ZGF0YVtkYXRhX29mZnNldCArIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpXSwKLQkJCQkgICAgZndfZW50cnktPnNpemUgLSAoZGF0YV9vZmZzZXQgKyBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUKSkpOworICAgICAgICByZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAotCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCi0JcmV0dXJuIHJldDsKLQorICAgICAgICByZXR1cm4gcmV0OwogfQogCiAKQEAgLTE3MDIsMTIgKzE2NTcsMTIgQEAKIAlpbml0X3RpbWVyKCZzZWxmLT5yeF9kZWZlcl90aW1lcik7CiAKIAlzZWxmLT5jYXBhYmlsaXR5ID0gaWQtPmRyaXZlcl9pbmZvOwotCXNlbGYtPm5lZWRzcGF0Y2ggPSAoKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwKSAhPSAwKSA7CisJc2VsZi0+bmVlZHNwYXRjaCA9ICgoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSNDIxWCkgIT0gMCk7CiAKIAkvKiBDcmVhdGUgYWxsIG9mIHRoZSBuZWVkZWQgdXJicyAqLwotCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVJfNDIxMCkgeworCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVI0MjFYKSB7CiAJCXNlbGYtPm1heF9yeF91cmIgPSBJVV9TSUdNQVRFTF9NQVhfUlhfVVJCUzsKLQkJc2VsZi0+aGVhZGVyX2xlbmd0aCA9IFVTQl9JUkRBX1NJR01BVEVMX0hFQURFUjsKKwkJc2VsZi0+aGVhZGVyX2xlbmd0aCA9IFVTQl9JUkRBX1NUSVI0MjFYX0hFQURFUjsKIAl9IGVsc2UgewogCQlzZWxmLT5tYXhfcnhfdXJiID0gSVVfTUFYX1JYX1VSQlM7CiAJCXNlbGYtPmhlYWRlcl9sZW5ndGggPSBVU0JfSVJEQV9IRUFERVI7CkBAIC0xODEzLDggKzE3NjgsOCBAQAogCQkvKiBOb3cgd2UgZmV0Y2ggYW5kIHVwbG9hZCB0aGUgZmlybXdhcmUgcGF0Y2ggKi8KIAkJcmV0ID0gc3RpcjQyMXhfcGF0Y2hfZGV2aWNlKHNlbGYpOwogCQlzZWxmLT5uZWVkc3BhdGNoID0gKHJldCA8IDApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKCJwYXRjaF9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJaWYgKHNlbGYtPm5lZWRzcGF0Y2gpIHsKKwkJCUlSREFfRVJST1IoIlNUSVI0MjFYOiBDb3VsZG4ndCB1cGxvYWQgcGF0Y2hcbiIpOwogCQkJZ290byBlcnJfb3V0XzU7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCmluZGV4IGQ4MzNkYjUuLjZiMjI3MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKQEAgLTM0LDkgKzM0LDYgQEAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4gICAgICAvKiBzdHJ1Y3QgaXJsYXBfY2IgKi8KIAotI2RlZmluZSBQQVRDSF9GSUxFX1NJWkVfTUFYICAgICA2NTUzNgotI2RlZmluZSBQQVRDSF9GSUxFX1NJWkVfTUlOICAgICA4MAotCiAjZGVmaW5lIFJYX0NPUFlfVEhSRVNIT0xEIDIwMAogI2RlZmluZSBJUkRBX1VTQl9NQVhfTVRVIDIwNTEKICNkZWZpbmUgSVJEQV9VU0JfU1BFRURfTVRVIDY0CQkvKiBXZWlyZCwgYnV0IHdvcmsgbGlrZSB0aGlzICovCkBAIC0xMDcsMTQgKzEwNCwxNSBAQAogI2RlZmluZSBJVUNfU01BTExfUEtUCTB4MTAJLyogRGV2aWNlIGRvZXNuJ3QgYmVoYXZlIHdpdGggYmlnIFJ4IHBhY2tldHMgKi8KICNkZWZpbmUgSVVDX01BWF9XSU5ET1cJMHgyMAkvKiBEZXZpY2UgdW5kZXJlc3RpbWF0ZSB0aGUgUnggd2luZG93ICovCiAjZGVmaW5lIElVQ19NQVhfWEJPRlMJMHg0MAkvKiBEZXZpY2UgbmVlZCBtb3JlIHhib2ZzIHRoYW4gYWR2ZXJ0aXNlZCAqLwotI2RlZmluZSBJVUNfU1RJUl80MjEwCTB4ODAJLyogU2lnbWFUZWwgNDIxMC80MjIwLzQxMTYgVkZJUiAqLworI2RlZmluZSBJVUNfU1RJUjQyMVgJMHg4MAkvKiBTaWdtYVRlbCA0MjEwLzQyMjAvNDExNiBWRklSICovCiAKIC8qIFVTQiBjbGFzcyBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBVU0JfSVJEQV9IRUFERVIgICAgICAgICAgICAweDAxCiAjZGVmaW5lIFVTQl9DTEFTU19JUkRBICAgICAgICAgICAgIDB4MDIgLyogVVNCX0NMQVNTX0FQUF9TUEVDIHN1YmNsYXNzICovCiAjZGVmaW5lIFVTQl9EVF9JUkRBICAgICAgICAgICAgICAgIDB4MjEKLSNkZWZpbmUgVVNCX0lSREFfU0lHTUFURUxfSEVBREVSICAgMHgwMwotI2RlZmluZSBJVV9TSUdNQVRFTF9NQVhfUlhfVVJCUyAgICAoSVVfTUFYX0FDVElWRV9SWF9VUkJTICsgVVNCX0lSREFfU0lHTUFURUxfSEVBREVSKQorI2RlZmluZSBVU0JfSVJEQV9TVElSNDIxWF9IRUFERVIgICAweDAzCisjZGVmaW5lIElVX1NJR01BVEVMX01BWF9SWF9VUkJTICAgIChJVV9NQVhfQUNUSVZFX1JYX1VSQlMgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfSVJEQV9TVElSNDIxWF9IRUFERVIpCiAKIHN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgewogCV9fdTggIGJMZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NDI5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwpAQCAtMCwwICsxLDEwMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBGaWxlbmFtZTogICAgICBtY3M3NzgwLmMKKyogVmVyc2lvbjogICAgICAgMC40LWFscGhhCisqIERlc2NyaXB0aW9uOiAgIElyZGEgTW9zQ2hpcCBVU0IgRG9uZ2xlIERyaXZlcgorKiBBdXRob3JzOiAgICAgICBMdWthc3ogU3RlbG1hY2ggPHN0bG1hbkBwb2N6dGEuZm0+CisqIAkJIEJyaWFuIFB1Z2ggPGJwdWdoQGNzLnBkeC5lZHU+CisqCQkgSnVkeSBGaXNjaGJhY2ggPGpmaXNjaEBjcy5wZHguZWR1PgorKgorKiAgICAgICBCYXNlZCBvbiBzdGlyNDIwMCBkcml2ZXIsIGJ1dCBzb21lIHRoaW5ncyBkb25lIGRpZmZlcmVudGx5LgorKiAgICAgICBCYXNlZCBvbiBlYXJsaWVyIGRyaXZlciBieSBQYXVsIFN0ZXdhcnQgPHN0ZXdhcnRAcGFyYy5jb20+CisqCisqICAgICAgIENvcHlyaWdodCAoQykgMjAwMCwgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CisqICAgICAgIENvcHlyaWdodCAoQykgMjAwMSwgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIFN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPgorKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIEx1a2FzeiBTdGVsbWFjaCA8c3RsbWFuQHBvY3p0YS5mbT4KKyogICAgICAgQ29weXJpZ2h0IChDKSAyMDA1LCBCcmlhbiBQdWdoIDxicHVnaEBjcy5wZHguZWR1PgorKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIEp1ZHkgRmlzY2hiYWNoIDxqZmlzY2hAY3MucGR4LmVkdT4KKyoKKyogICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyogICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyogICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyogICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqICAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqICAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIE1DUzc3ODAgaXMgYSBzaW1wbGUgVVNCIHRvIElyREEgYnJpZGdlIGJ5IE1vc0NoaXAuIEl0IGlzIG5laXRoZXIKKyAqIGNvbXBhdGliaWxlIHdpdGggaXJkYS11c2Igbm9yIHdpdGggc3RpcjQyMDAuIEFsdGhvdWdoIGl0IGlzIHF1aXRlCisgKiBzaW1pbGFyIHRvIHRoZSBsYXRlciBhcyBmYXIgYXMgZ2VuZXJhbCBpZGVhIG9mIG9wZXJhdGlvbiBpcyBjb25jZXJuZWQuCisgKiBUaGF0IGlzIGl0IHJlcXVpcmVzIHRoZSBzb2Z0d2FyZSB0byBkbyBhbGwgdGhlIGZyYW1pbmcgam9iIGF0IFNJUiBzcGVlZHMuCisgKiBUaGUgaGFyZHdhcmUgZG9lcyB0YWtlIGNhcmUgb2YgdGhlIGZyYW1pbmcgYXQgTUlSIGFuZCBGSVIgc3BlZWRzLgorICogSXQgc3VwcG9ydHMgYWxsIHNwZWVkcyBmcm9tIDI0MDAgdGhyb3VnaCA0TWJwcworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL3dyYXBwZXIuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9jcmMuaD4KKworI2luY2x1ZGUgIm1jczc3ODAuaCIKKworI2RlZmluZSBNQ1NfVkVORE9SX0lEIDB4OTcxMAorI2RlZmluZSBNQ1NfUFJPRFVDVF9JRCAweDc3ODAKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1jc190YWJsZVtdID0geworCS8qIE1vc0NoaXAgQ29ycC4sICBNQ1M3NzgwIEZJUi1VU0IgQWRhcHRlciAqLworCXtVU0JfREVWSUNFKE1DU19WRU5ET1JfSUQsIE1DU19QUk9EVUNUX0lEKX0sCisJe30sCit9OworCitNT0RVTEVfQVVUSE9SKCJCcmlhbiBQdWdoIDxicHVnaEBjcy5wZHguZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJckRBLVVTQiBEb25nbGUgRHJpdmVyIGZvciBNb3NDaGlwIE1DUzc3ODAiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjNhbHBoYSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbWNzX3RhYmxlKTsKKworc3RhdGljIGludCBxb3NfbXR0X2JpdHMgPSAweDA3IC8qID4gMW1zICovIDsKK21vZHVsZV9wYXJhbShxb3NfbXR0X2JpdHMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHFvc19tdHRfYml0cywgIk1pbmltdW0gVHVybiBUaW1lIik7CisKK3N0YXRpYyBpbnQgcmVjZWl2ZV9tb2RlID0gMHgxOworbW9kdWxlX3BhcmFtKHJlY2VpdmVfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmVjZWl2ZV9tb2RlLAorCQkgIlJlY2VpdmUgbW9kZSBvZiB0aGUgZGV2aWNlICgxOmZhc3QsIDA6c2xvdywgZGVmYXVsdDoxKSIpOworCitzdGF0aWMgaW50IHNpcl90d2VhayA9IDE7Cittb2R1bGVfcGFyYW0oc2lyX3R3ZWFrLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzaXJfdHdlYWssCisJCSAiRGVmYXVsdCBwdWxzZSB3aWR0aCAoMToxLjZ1cywgMDozLzE2IGJpdCwgZGVmYXVsdDoxKS4iKTsKKworc3RhdGljIGludCB0cmFuc2NlaXZlcl90eXBlID0gTUNTX1RTQ19WSVNIQVk7Cittb2R1bGVfcGFyYW0odHJhbnNjZWl2ZXJfdHlwZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModHJhbnNjZWl2ZXJfdHlwZSwgIklSIHRyYW5zY2VpdmVyIHR5cGUsIHNlZSBtY3M3NzgwLmguIik7CisKK3N0cnVjdCB1c2JfZHJpdmVyIG1jc19kcml2ZXIgPSB7CisJLm5hbWUgPSAibWNzNzc4MCIsCisJLnByb2JlID0gbWNzX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gbWNzX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gbWNzX3RhYmxlLAorfTsKKworLyogc3BlZWQgZmxhZyBzZWxlY3Rpb24gYnkgZGlyZWN0IGFkZHJlc3NpbmcuCithZGRyID0gKHNwZWVkID4+IDgpICYgMHgwZgorCisweDEgICA1NzYwMAkgMHgyICAxMTUyMDAJIDB4NCAxMTUyMDAwCSAweDUgICAgOTYwMAorMHg2ICAgMzg0MDAJIDB4OSAgICAyNDAwCSAweGEgIDU3NjAwMAkgMHhiICAgMTkyMDAKKworNE1icHMgKG9yIDI0MDApIG11c3QgYmUgY2hlY2tlZCBzZXBhcmF0ZWx5LiBTaW5jZSBpdCBhbHNvIGhhcwordG8gYmUgcHJvZ3JhbW1lZCBpbiBhIGRpZmZlcmVudCBtYW5uZXIgdGhhdCBpcyBub3QgYSBiaWcgcHJvYmxlbS4KKyovCitzdGF0aWMgX191MTYgbWNzX3NwZWVkX3NldFsxNl0gPSB7IDAsCisJTUNTX1NQRUVEXzU3NjAwLAorCU1DU19TUEVFRF8xMTUyMDAsCisJMCwKKwlNQ1NfU1BFRURfMTE1MjAwMCwKKwlNQ1NfU1BFRURfOTYwMCwKKwlNQ1NfU1BFRURfMzg0MDAsCisJMCwgMCwKKwlNQ1NfU1BFRURfMjQwMCwKKwlNQ1NfU1BFRURfNTc2MDAwLAorCU1DU19TUEVFRF8xOTIwMCwKKwkwLCAwLCAwLAorfTsKKworLyogU2V0IGdpdmVuIDE2IGJpdCByZWdpc3RlciB3aXRoIGEgMTYgYml0IHZhbHVlLiBTZW5kIGNvbnRyb2wgbWVzc2FnZQorICogdG8gc2V0IGRvbmdsZSByZWdpc3Rlci4gKi8KK3N0YXRpYyBpbnQgbWNzX3NldF9yZWcoc3RydWN0IG1jc19jYiAqbWNzLCBfX3UxNiByZWcsIF9fdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gbWNzLT51c2JkZXY7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBNQ1NfV1JSRVEsCisJCQkgICAgICAgTUNTX1dSX1JUWVBFLCB2YWwsIHJlZywgTlVMTCwgMCwKKwkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKE1DU19DVFJMX1RJTUVPVVQpKTsKK30KKworLyogR2V0IDE2IGJpdCByZWdpc3RlciB2YWx1ZS4gU2VuZCBjb250b2wgbWVzc2FnZSB0byByZWFkIGRvbmdsZSByZWdpc3Rlci4gKi8KK3N0YXRpYyBpbnQgbWNzX2dldF9yZWcoc3RydWN0IG1jc19jYiAqbWNzLCBfX3UxNiByZWcsIF9fdTE2ICogdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtY3MtPnVzYmRldjsKKwlpbnQgcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIE1DU19SRFJFUSwKKwkJCQkgIE1DU19SRF9SVFlQRSwgMCwgcmVnLCB2YWwsIDIsCisJCQkJICBtc2Vjc190b19qaWZmaWVzKE1DU19DVFJMX1RJTUVPVVQpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFNldHVwIGEgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIG1jczc3ODAgYW5kIFRGRFUgY2hpcHMuICBJdCBpcyBkZXNjcmliZWQKKyAqIGluIG1vcmUgZGV0YWlsIGluIHRoZSBkYXRhIHNoZWV0LiAgVGhlIHNldHVwIHNlcXVlbmNlIHB1dHMgdGhlIHRoZQorICogdmlzaGF5IHRyYW5jZWl2ZXIgaW50byBoaWdoIHNwZWVkIG1vZGUuICBJdCB3aWxsIGFsc28gcmVjZWl2ZSBTSVIgc3BlZWQKKyAqIHBhY2tldHMgYnV0IGF0IHJlZHVjZWQgc2Vuc2l0aXZpdHkuCisgKi8KKworLyogMDogT0sgMTpFUlJPUiAqLworc3RhdGljIGlubGluZSBpbnQgbWNzX3NldHVwX3RyYW5zY2VpdmVyX3Zpc2hheShzdHJ1Y3QgbWNzX2NiICptY3MpCit7CisJaW50IHJldCA9IDA7CisJX191MTYgcnZhbDsKKworCS8qIG1jc19nZXRfcmVnIHNob3VsZCByZWFkIGV4YWN0bHkgdHdvIGJ5dGVzIGZyb20gdGhlIGRvbmdsZSAqLworCXJldCA9IG1jc19nZXRfcmVnKG1jcywgTUNTX1hDVlJfUkVHLCAmcnZhbCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAyKSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIFRoZSBNQ1NfWENWUl9DT05GIGJpdCBwdXRzIHRoZSB0cmFuc2NlaXZlciBpbnRvIGNvbmZpZ3VyYXRpb24KKwkgKiBtb2RlLiAgVGhlIE1DU19NT0RFMCBiaXQgbXVzdCBzdGFydCBvdXQgaGlnaCAoMSkgYW5kIHRoZW4KKwkgKiB0cmFuc2l0aW9uIHRvIGxvdyBhbmQgdGhlIE1DU19TVEZJUiBhbmQgTUNTX01PREUxIGJpdHMgbXVzdAorCSAqIGJlIGxvdy4KKwkgKi8KKwlydmFsIHw9IChNQ1NfTU9ERTAgfCBNQ1NfWENWUl9DT05GKTsKKwlydmFsICY9IH5NQ1NfU1RGSVI7CisJcnZhbCAmPSB+TUNTX01PREUxOworCXJldCA9IG1jc19zZXRfcmVnKG1jcywgTUNTX1hDVlJfUkVHLCBydmFsKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnJvcjsKKworCXJ2YWwgJj0gfk1DU19NT0RFMDsKKwlyZXQgPSBtY3Nfc2V0X3JlZyhtY3MsIE1DU19YQ1ZSX1JFRywgcnZhbCk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyb3I7CisKKwlydmFsICY9IH5NQ1NfWENWUl9DT05GOworCXJldCA9IG1jc19zZXRfcmVnKG1jcywgTUNTX1hDVlJfUkVHLCBydmFsKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IDA7CisJZXJyb3I6CisJCXJldHVybiByZXQ7Cit9CisKKy8qIFNldHVwIGEgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIG1jczc3ODAgYW5kIGFnaWxlbnQgY2hpcC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1jc19zZXR1cF90cmFuc2NlaXZlcl9hZ2lsZW50KHN0cnVjdCBtY3NfY2IgKm1jcykKK3sKKwlJUkRBX1dBUk5JTkcoIlRoaXMgdHJhbnNjZWl2ZXIgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKTsKKwlyZXR1cm4gMTsKK30KKworLyogU2V0dXAgYSBjb21tdW5pY2F0aW9uIGJldHdlZW4gbWNzNzc4MCBhbmQgc2hhcnAgY2hpcC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1jc19zZXR1cF90cmFuc2NlaXZlcl9zaGFycChzdHJ1Y3QgbWNzX2NiICptY3MpCit7CisJSVJEQV9XQVJOSU5HKCJUaGlzIHRyYW5zY2VpdmVyIHR5cGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIik7CisJcmV0dXJuIDE7Cit9CisKKy8qIENvbW1vbiBzZXR1cCBmb3IgYWxsIHRyYW5zY2VpdmVycyAqLworc3RhdGljIGlubGluZSBpbnQgbWNzX3NldHVwX3RyYW5zY2VpdmVyKHN0cnVjdCBtY3NfY2IgKm1jcykKK3sKKwlpbnQgcmV0ID0gMDsKKwlfX3UxNiBydmFsOworCWNoYXIgKm1zZzsKKworCW1zZyA9ICJCYXNpYyB0cmFuc2NlaXZlciBzZXR1cCBlcnJvci4iOworCisJLyogcmVhZCB2YWx1ZSBvZiBNT0RFIFJlZ2lzdGVyLCBzZXQgdGhlIERSSVZFUiBhbmQgUkVTRVQgYml0cworCSogYW5kIHdyaXRlIHZhbHVlIGJhY2sgb3V0IHRvIE1PREUgUmVnaXN0ZXIKKwkqLworCXJldCA9IG1jc19nZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCAmcnZhbCk7CisJaWYodW5saWtlbHkocmV0ICE9IDIpKQorCQlnb3RvIGVycm9yOworCXJ2YWwgfD0gTUNTX0RSSVZFUjsJLyogcHV0IHRoZSBtY3M3NzgwIGludG8gY29uZmlndXJhdGlvbiBtb2RlLiAqLworCXJldCA9IG1jc19zZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCBydmFsKTsKKwlpZih1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJcnZhbCA9IDA7CQkvKiBzZXQgbWluIHB1bHNlIHdpZHRoIHRvIDAgaW5pdGlhbGx5LiAqLworCXJldCA9IG1jc19zZXRfcmVnKG1jcywgTUNTX01JTlJYUFdfUkVHLCBydmFsKTsKKwlpZih1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gbWNzX2dldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsICZydmFsKTsKKwlpZih1bmxpa2VseShyZXQgIT0gMikpCisJCWdvdG8gZXJyb3I7CisKKwlydmFsICY9IH5NQ1NfRklSOwkvKiB0dXJuIG9mZiBmaXIgbW9kZS4gKi8KKwlpZihtY3MtPnNpcl90d2VhaykKKwkJcnZhbCB8PSBNQ1NfU0lSMTZVUzsJLyogMS42dXMgcHVsc2Ugd2lkdGggKi8KKwllbHNlCisJCXJ2YWwgJj0gfk1DU19TSVIxNlVTOwkvKiAzLzE2IGJpdCB0aW1lIHB1bHNlIHdpZHRoICovCisKKwkvKiBtYWtlIHN1cmUgYXNrIG1vZGUgYW5kIGJhY2sgdG8gYmFjayBwYWNrZXRzIGFyZSBvZmYuICovCisJcnZhbCAmPSB+KE1DU19CQlRHIHwgTUNTX0FTSyk7CisKKwlydmFsICY9IH5NQ1NfU1BFRURfTUFTSzsKKwlydmFsIHw9IE1DU19TUEVFRF85NjAwOwkJLyogbWFrZSBzdXJlIGluaXRpYWwgc3BlZWQgaXMgOTYwMC4gKi8KKwltY3MtPnNwZWVkID0gOTYwMDsKKwltY3MtPm5ld19zcGVlZCA9IDA7CQkvKiBuZXdfc3BlZWQgaXMgc2V0IHRvIDAgKi8KKwlydmFsICY9IH5NQ1NfUExMUFdETjsJCS8qIGRpc2FibGUgcG93ZXIgZG93bi4gKi8KKworCS8qIG1ha2Ugc3VyZSBkZXZpY2UgZGV0ZXJtaW5lcyBkaXJlY3Rpb24gYW5kIHRoYXQgdGhlIGF1dG8gc2VuZCBzaXAKKwkgKiBwdWxzZSBhcmUgb24uCisJICovCisJcnZhbCB8PSBNQ1NfRFREIHwgTUNTX1NJUEVOOworCisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsIHJ2YWwpOworCWlmKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyb3I7CisKKwltc2cgPSAidHJhbnNjZWl2ZXIgbW9kZWwgc3BlY2lmaWMgc2V0dXAgZXJyb3IuIjsKKwlzd2l0Y2ggKG1jcy0+dHJhbnNjZWl2ZXJfdHlwZSkgeworCWNhc2UgTUNTX1RTQ19WSVNIQVk6CisJCXJldCA9IG1jc19zZXR1cF90cmFuc2NlaXZlcl92aXNoYXkobWNzKTsKKwkJYnJlYWs7CisKKwljYXNlIE1DU19UU0NfU0hBUlA6CisJCXJldCA9IG1jc19zZXR1cF90cmFuc2NlaXZlcl9zaGFycChtY3MpOworCQlicmVhazsKKworCWNhc2UgTUNTX1RTQ19BR0lMRU5UOgorCQlyZXQgPSBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfYWdpbGVudChtY3MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUlSREFfV0FSTklORygiVW5rbm93biB0cmFuc2NlaXZlciB0eXBlOiAlZCIsCisJCQkgICAgIG1jcy0+dHJhbnNjZWl2ZXJfdHlwZSk7CisJCXJldCA9IDE7CisJfQorCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJLyogSWYgdHJhbnNjZWl2ZXIgaXMgbm90IFNIQVJQLCB0aGVuIGlmIHJlY2VpdmUgbW9kZSBzZXQKKwkqIG9uIHRoZSBSWEZBU1QgYml0IGluIHRoZSBYQ1ZSIFJlZ2lzdGVyIG90aGVyd2lzZSB1bnNldCBpdAorCSovCisJaWYgKG1jcy0+dHJhbnNjZWl2ZXJfdHlwZSAhPSBNQ1NfVFNDX1NIQVJQKSB7CisKKwkJcmV0ID0gbWNzX2dldF9yZWcobWNzLCBNQ1NfWENWUl9SRUcsICZydmFsKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAyKSkKKwkJCWdvdG8gZXJyb3I7CisJCWlmIChtY3MtPnJlY2VpdmVfbW9kZSkKKwkJCXJ2YWwgfD0gTUNTX1JYRkFTVDsKKwkJZWxzZQorCQkJcnZhbCAmPSB+TUNTX1JYRkFTVDsKKwkJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfWENWUl9SRUcsIHJ2YWwpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJbXNnID0gInRyYW5zY2VpdmVyIHJlc2V0LiI7CisKKwlyZXQgPSBtY3NfZ2V0X3JlZyhtY3MsIE1DU19NT0RFX1JFRywgJnJ2YWwpOworCWlmICh1bmxpa2VseShyZXQgIT0gMikpCisJCWdvdG8gZXJyb3I7CisKKwkvKiByZXNldCB0aGUgbWNzNzc4MCBzbyBhbGwgY2hhbmdlcyB0YWtlIGVmZmVjdC4gKi8KKwlydmFsICY9IH5NQ1NfUkVTRVQ7CisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsIHJ2YWwpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCWVsc2UKKwkJcmV0dXJuIHJldDsKKworZXJyb3I6CisJSVJEQV9FUlJPUigiJXMiLCBtc2cpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFdyYXBzIHRoZSBkYXRhIGluIGZvcm1hdCBmb3IgU0lSICovCitzdGF0aWMgaW5saW5lIGludCBtY3Nfd3JhcF9zaXJfc2tiKHN0cnVjdCBza19idWZmICpza2IsIF9fdTggKiBidWYpCit7CisJaW50IHdyYXBsZW47CisKKwkvKiAyOiBmdWxsIGZyYW1lIGxlbmd0aCwgaW5jbHVkaW5nICJ0aGUgbGVuZ3RoIiAqLworCXdyYXBsZW4gPSBhc3luY193cmFwX3NrYihza2IsIGJ1ZiArIDIsIDQwOTQpOworCisJd3JhcGxlbiArPSAyOworCWJ1ZlswXSA9IHdyYXBsZW4gJiAweGZmOworCWJ1ZlsxXSA9ICh3cmFwbGVuID4+IDgpICYgMHhmZjsKKworCXJldHVybiB3cmFwbGVuOworfQorCisvKiBXcmFwcyB0aGUgZGF0YSBpbiBmb3JtYXQgZm9yIEZJUiAqLworc3RhdGljIHVuc2lnbmVkIG1jc193cmFwX2Zpcl9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqYnVmKQoreworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCV9fdTMyIGZjcyA9IH4oY3JjMzJfbGUofjAsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pKTsKKworCS8qIGFkZCAyIGJ5dGVzIGZvciBsZW5ndGggdmFsdWUgYW5kIDQgYnl0ZXMgZm9yIGZjcy4gKi8KKwlsZW4gPSBza2ItPmxlbiArIDY7CisKKwkvKiBUaGUgbWNzNzc4MCByZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCB0d28gYnl0ZXMgYXJlIHRoZSBwYWNrZXQKKwkgKiBsZW5ndGggaW4gbGl0dGxlIGVuZGlhbiBvcmRlci4gIE5vdGU6IHRoZSBsZW5ndGggdmFsdWUgaW5jbHVkZXMKKwkgKiB0aGUgdHdvIGJ5dGVzIGZvciB0aGUgbGVuZ3RoIHZhbHVlIGl0c2VsZi4KKwkgKi8KKwlidWZbMF0gPSBsZW4gJiAweGZmOworCWJ1ZlsxXSA9IChsZW4gPj4gOCkgJiAweGZmOworCS8qIGNvcHkgdGhlIGRhdGEgaW50byB0aGUgdHggYnVmZmVyLiAqLworCW1lbWNweShidWYrMiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJLyogcHV0IHRoZSBmY3MgaW4gdGhlIGxhc3QgZm91ciBieXRlcyBpbiBsaXR0bGUgZW5kaWFuIG9yZGVyLiAqLworCWJ1ZltsZW4gLSA0XSA9IGZjcyAmIDB4ZmY7CisJYnVmW2xlbiAtIDNdID0gKGZjcyA+PiA4KSAmIDB4ZmY7CisJYnVmW2xlbiAtIDJdID0gKGZjcyA+PiAxNikgJiAweGZmOworCWJ1ZltsZW4gLSAxXSA9IChmY3MgPj4gMjQpICYgMHhmZjsKKworCXJldHVybiBsZW47Cit9CisKKy8qIFdyYXBzIHRoZSBkYXRhIGluIGZvcm1hdCBmb3IgTUlSICovCitzdGF0aWMgdW5zaWduZWQgbWNzX3dyYXBfbWlyX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICpidWYpCit7CisJX191MTYgZmNzID0gMDsKKwlpbnQgbGVuID0gc2tiLT5sZW4gKyA0OworCisJZmNzID0gfihpcmRhX2NhbGNfY3JjMTYofmZjcywgc2tiLT5kYXRhLCBza2ItPmxlbikpOworCS8qIHB1dCB0aGUgdG90YWwgcGFja2V0IGxlbmd0aCBpbiBmaXJzdC4gIE5vdGU6IHBhY2tldCBsZW5ndGgKKwkgKiB2YWx1ZSBpbmNsdWRlcyB0aGUgdHdvIGJ5dGVzIHRoYXQgaG9sZCB0aGUgcGFja2V0IGxlbmd0aAorCSAqIGl0c2VsZi4KKwkgKi8KKwlidWZbMF0gPSBsZW4gJiAweGZmOworCWJ1ZlsxXSA9IChsZW4gPj4gOCkgJiAweGZmOworCS8qIGNvcHkgdGhlIGRhdGEgKi8KKwltZW1jcHkoYnVmKzIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCS8qIHB1dCB0aGUgZmNzIGluIGxhc3QgdHdvIGJ5dGVzIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIuICovCisJYnVmW2xlbiAtIDJdID0gZmNzICYgMHhmZjsKKwlidWZbbGVuIC0gMV0gPSAoZmNzID4+IDgpICYgMHhmZjsKKworCXJldHVybiBsZW47Cit9CisKKy8qIFVud3JhcCByZWNlaXZlZCBwYWNrZXRzIGF0IE1JUiBzcGVlZC4gIEEgMTYgYml0IGNyY19jY2l0dCBjaGVja3N1bSBpcworICogdXNlZCBmb3IgdGhlIGZjcy4gIFdoZW4gcGVyZm9ybWVkIG92ZXIgdGhlIGVudGlyZSBwYWNrZXQgdGhlIHJlc3VsdAorICogc2hvdWxkIGJlIEdPT0RfRkNTID0gMHhmMGI4LiAgSGFuZHMgdGhlIHVud3JhcHBlZCBkYXRhIG9mZiB0byB0aGUgSXJEQQorICogbGF5ZXIgdmlhIGEgc2tfYnVmZi4KKyAqLworc3RhdGljIHZvaWQgbWNzX3Vud3JhcF9taXIoc3RydWN0IG1jc19jYiAqbWNzLCBfX3U4ICpidWYsIGludCBsZW4pCit7CisJX191MTYgZmNzOworCWludCBuZXdfbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBBc3N1bWUgdGhhdCB0aGUgZnJhbWVzIGFyZSBnb2luZyB0byBmaWxsIGEgc2luZ2xlIHBhY2tldAorCSAqIHJhdGhlciB0aGFuIHNwYW4gbXVsdGlwbGUgcGFja2V0cy4KKwkgKi8KKworCW5ld19sZW4gPSBsZW4gLSAyOworCWlmKHVubGlrZWx5KG5ld19sZW4gPD0gMCkpIHsKKwkJSVJEQV9FUlJPUigiJXMgc2hvcnQgZnJhbWUgbGVuZ3RoICVkXG4iLAorCQkJICAgICBtY3MtPm5ldGRldi0+bmFtZSwgbmV3X2xlbik7CisJCSsrbWNzLT5zdGF0cy5yeF9lcnJvcnM7CisJCSsrbWNzLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzOworCQlyZXR1cm47CisJfQorCWZjcyA9IDA7CisJZmNzID0gaXJkYV9jYWxjX2NyYzE2KH5mY3MsIGJ1ZiwgbGVuKTsKKworCWlmKGZjcyAhPSBHT09EX0ZDUykgeworCQlJUkRBX0VSUk9SKCJjcmMgZXJyb3IgY2FsYyAweCV4IGxlbiAlZFxuIiwKKwkJCSAgIGZjcywgbmV3X2xlbik7CisJCW1jcy0+c3RhdHMucnhfZXJyb3JzKys7CisJCW1jcy0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQlyZXR1cm47CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihuZXdfbGVuICsgMSk7CisJaWYodW5saWtlbHkoIXNrYikpIHsKKwkJKyttY3MtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisJCXJldHVybjsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIDEpOworCW1lbWNweShza2ItPmRhdGEsIGJ1ZiwgbmV3X2xlbik7CisJc2tiX3B1dChza2IsIG5ld19sZW4pOworCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVJEQSk7CisJc2tiLT5kZXYgPSBtY3MtPm5ldGRldjsKKworCW5ldGlmX3J4KHNrYik7CisKKwltY3MtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwltY3MtPnN0YXRzLnJ4X2J5dGVzICs9IG5ld19sZW47CisKKwlyZXR1cm47Cit9CisKKy8qIFVud3JhcCByZWNlaXZlZCBwYWNrZXRzIGF0IEZJUiBzcGVlZC4gIEEgMzIgYml0IGNyY19jY2l0dCBjaGVja3N1bSBpcworICogdXNlZCBmb3IgdGhlIGZjcy4gIEhhbmRzIHRoZSB1bndyYXBwZWQgZGF0YSBvZmYgdG8gdGhlIElyREEKKyAqIGxheWVyIHZpYSBhIHNrX2J1ZmYuCisgKi8KK3N0YXRpYyB2b2lkIG1jc191bndyYXBfZmlyKHN0cnVjdCBtY3NfY2IgKm1jcywgX191OCAqYnVmLCBpbnQgbGVuKQoreworCV9fdTMyIGZjczsKKwlpbnQgbmV3X2xlbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyogQXNzdW1lIHRoYXQgdGhlIGZyYW1lcyBhcmUgZ29pbmcgdG8gZmlsbCBhIHNpbmdsZSBwYWNrZXQKKwkgKiByYXRoZXIgdGhhbiBzcGFuIG11bHRpcGxlIHBhY2tldHMuICBUaGlzIGlzIG1vc3QgbGlrZWx5IGEgZmFsc2UKKwkgKiBhc3N1bXB0aW9uLgorCSAqLworCisJbmV3X2xlbiA9IGxlbiAtIDQ7CisJaWYodW5saWtlbHkobmV3X2xlbiA8PSAwKSkgeworCQlJUkRBX0VSUk9SKCIlcyBzaG9ydCBmcmFtZSBsZW5ndGggJWRcbiIsCisJCQkgICBtY3MtPm5ldGRldi0+bmFtZSwgbmV3X2xlbik7CisJCSsrbWNzLT5zdGF0cy5yeF9lcnJvcnM7CisJCSsrbWNzLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzOworCQlyZXR1cm47CisJfQorCisJZmNzID0gfihjcmMzMl9sZSh+MCwgYnVmLCBuZXdfbGVuKSk7CisJaWYoZmNzICE9IGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKHUzMiAqKShidWYrbmV3X2xlbikpKSkgeworCQlJUkRBX0VSUk9SKCJjcmMgZXJyb3IgY2FsYyAweCV4IGxlbiAlZFxuIiwgZmNzLCBuZXdfbGVuKTsKKwkJbWNzLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJbWNzLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCXJldHVybjsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKG5ld19sZW4gKyAxKTsKKwlpZih1bmxpa2VseSghc2tiKSkgeworCQkrK21jcy0+c3RhdHMucnhfZHJvcHBlZDsKKwkJcmV0dXJuOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgMSk7CisJbWVtY3B5KHNrYi0+ZGF0YSwgYnVmLCBuZXdfbGVuKTsKKwlza2JfcHV0KHNrYiwgbmV3X2xlbik7CisJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUkRBKTsKKwlza2ItPmRldiA9IG1jcy0+bmV0ZGV2OworCisJbmV0aWZfcngoc2tiKTsKKworCW1jcy0+c3RhdHMucnhfcGFja2V0cysrOworCW1jcy0+c3RhdHMucnhfYnl0ZXMgKz0gbmV3X2xlbjsKKworCXJldHVybjsKK30KKworCisvKiBBbGxvY2F0ZXMgdXJicyBmb3IgYm90aCByZWNlaXZlIGFuZCB0cmFuc21pdC4KKyAqIElmIGFsbG9jIGZhaWxzIHJldHVybiBlcnJvciBjb2RlIDAgKGZhaWwpIG90aGVyd2lzZQorICogcmV0dXJuIGVycm9yIGNvZGUgMSAoc3VjY2VzcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1jc19zZXR1cF91cmJzKHN0cnVjdCBtY3NfY2IgKm1jcykKK3sKKwltY3MtPnJ4X3VyYiA9IE5VTEw7CisKKwltY3MtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtY3MtPnR4X3VyYikKKwkJcmV0dXJuIDA7CisKKwltY3MtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtY3MtPnJ4X3VyYikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyogU2V0cyB1cCBzdGF0ZSB0byBiZSBpbml0aWFsbHkgb3V0c2lkZSBmcmFtZSwgZ2V0cyByZWNlaXZlIHVyYiwKKyAqIHNldHMgc3RhdHVzIHRvIHN1Y2Nlc3NmdWwgYW5kIHRoZW4gc3VibWl0cyB0aGUgdXJiIHRvIHN0YXJ0CisgKiByZWNlaXZpbmcgdGhlIGRhdGEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1jc19yZWNlaXZlX3N0YXJ0KHN0cnVjdCBtY3NfY2IgKm1jcykKK3sKKwltY3MtPnJ4X2J1ZmYuaW5fZnJhbWUgPSBGQUxTRTsKKwltY3MtPnJ4X2J1ZmYuc3RhdGUgPSBPVVRTSURFX0ZSQU1FOworCisJdXNiX2ZpbGxfYnVsa191cmIobWNzLT5yeF91cmIsIG1jcy0+dXNiZGV2LAorCQkJICB1c2JfcmN2YnVsa3BpcGUobWNzLT51c2JkZXYsIG1jcy0+ZXBfaW4pLAorCQkJICBtY3MtPmluX2J1ZiwgNDA5NiwgbWNzX3JlY2VpdmVfaXJxLCBtY3MpOworCisJbWNzLT5yeF91cmItPnN0YXR1cyA9IDA7CisJcmV0dXJuIHVzYl9zdWJtaXRfdXJiKG1jcy0+cnhfdXJiLCBHRlBfS0VSTkVMKTsKK30KKworLyogRmluZHMgdGhlIGluIGFuZCBvdXQgZW5kcG9pbnRzIGZvciB0aGUgbWNzIGNvbnRyb2wgYmxvY2sgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1jc19maW5kX2VuZHBvaW50cyhzdHJ1Y3QgbWNzX2NiICptY3MsCisJCQkJICAgICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLCBpbnQgZXBudW0pCit7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwkvKiBJZiBubyBwbGFjZSB0byBzdG9yZSB0aGUgZW5kcG9pbnRzIGp1c3QgcmV0dXJuICovCisJaWYgKCFlcCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGN5Y2xlIHRocm91Z2ggYWxsIGVuZHBvaW50cywgZmluZCB0aGUgZmlyc3QgdHdvIHRoYXQgYXJlIERJUl9JTiAqLworCWZvciAoaSA9IDA7IGkgPCBlcG51bTsgaSsrKSB7CisJCWlmIChlcFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJbWNzLT5lcF9pbiA9IGVwW2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJZWxzZQorCQkJbWNzLT5lcF9vdXQgPSBlcFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisKKwkJLyogTW9zQ2hpcCBzYXlzIHRoYXQgdGhlIGNoaXAgaGFzIG9ubHkgdHdvIGJ1bGsKKwkJICogZW5kcG9pbnRzLiBGaW5kIG9uZSBmb3IgZWFjaCBkaXJlY3Rpb24gYW5kIG1vdmUgb24uCisJCSAqLworCQlpZiAoKG1jcy0+ZXBfaW4gIT0gMCkgJiYgKG1jcy0+ZXBfb3V0ICE9IDApKSB7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtY3Nfc3BlZWRfd29yayh2b2lkICphcmcpCit7CisJc3RydWN0IG1jc19jYiAqbWNzID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3MtPm5ldGRldjsKKworCW1jc19zcGVlZF9jaGFuZ2UobWNzKTsKKwluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Cit9CisKKy8qIEZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgc3BlZWQgb2YgdGhlIG1jczc3ODAuICBGdWxseSBzdXBwb3J0cyBTSVIsCisgKiBNSVIsIGFuZCBGSVIgc3BlZWRzLgorICovCitzdGF0aWMgaW50IG1jc19zcGVlZF9jaGFuZ2Uoc3RydWN0IG1jc19jYiAqbWNzKQoreworCWludCByZXQgPSAwOworCWludCByc3QgPSAwOworCWludCBjbnQgPSAwOworCV9fdTE2IG5zcGVlZDsKKwlfX3UxNiBydmFsOworCisJbnNwZWVkID0gbWNzX3NwZWVkX3NldFsobWNzLT5uZXdfc3BlZWQgPj4gOCkgJiAweDBmXTsKKworCWRvIHsKKwkJbWNzX2dldF9yZWcobWNzLCBNQ1NfUkVTVl9SRUcsICZydmFsKTsKKwl9IHdoaWxlKGNudCsrIDwgMTAwICYmIChydmFsICYgTUNTX0lSSU5UWCkpOworCisJaWYoY250ID49IDEwMCkgeworCQlJUkRBX0VSUk9SKCJ1bmFibGUgdG8gY2hhbmdlIHNwZWVkIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWNzX2dldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsICZydmFsKTsKKworCS8qIE1JTlJYUFcgdmFsdWVzIHJlY29tZW5kZWQgYnkgTW9zQ2hpcCAqLworCWlmIChtY3MtPm5ld19zcGVlZCA8PSAxMTUyMDApIHsKKwkJcnZhbCAmPSB+TUNTX0ZJUjsKKworCQlpZiAoKHJzdCA9IChtY3MtPnNwZWVkID4gMTE1MjAwKSkpCisJCQltY3Nfc2V0X3JlZyhtY3MsIE1DU19NSU5SWFBXX1JFRywgMCk7CisKKwl9IGVsc2UgaWYgKG1jcy0+bmV3X3NwZWVkIDw9IDExNTIwMDApIHsKKwkJcnZhbCAmPSB+TUNTX0ZJUjsKKworCQlpZiAoKHJzdCA9ICEobWNzLT5zcGVlZCA9PSA1NzYwMDAgfHwgbWNzLT5zcGVlZCA9PSAxMTUyMDAwKSkpCisJCQltY3Nfc2V0X3JlZyhtY3MsIE1DU19NSU5SWFBXX1JFRywgNSk7CisKKwl9IGVsc2UgeworCQlydmFsIHw9IE1DU19GSVI7CisKKwkJaWYgKChyc3QgPSAobWNzLT5zcGVlZCAhPSA0MDAwMDAwKSkpCisJCQltY3Nfc2V0X3JlZyhtY3MsIE1DU19NSU5SWFBXX1JFRywgNSk7CisKKwl9CisKKwlydmFsICY9IH5NQ1NfU1BFRURfTUFTSzsKKwlydmFsIHw9IG5zcGVlZDsKKworCXJldCA9IG1jc19zZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCBydmFsKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnJvcjsKKworCWlmIChyc3QpCisJCXN3aXRjaCAobWNzLT50cmFuc2NlaXZlcl90eXBlKSB7CisJCWNhc2UgTUNTX1RTQ19WSVNIQVk6CisJCQlyZXQgPSBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfdmlzaGF5KG1jcyk7CisJCQlicmVhazsKKworCQljYXNlIE1DU19UU0NfU0hBUlA6CisJCQlyZXQgPSBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfc2hhcnAobWNzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTUNTX1RTQ19BR0lMRU5UOgorCQkJcmV0ID0gbWNzX3NldHVwX3RyYW5zY2VpdmVyX2FnaWxlbnQobWNzKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXQgPSAxOworCQkJSVJEQV9XQVJOSU5HKCJVbmtub3duIHRyYW5zY2VpdmVyIHR5cGU6ICVkIiwKKwkJCQkgICAgIG1jcy0+dHJhbnNjZWl2ZXJfdHlwZSk7CisJCX0KKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnJvcjsKKworCW1jc19nZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCAmcnZhbCk7CisJcnZhbCAmPSB+TUNTX1JFU0VUOworCXJldCA9IG1jc19zZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCBydmFsKTsKKworCW1jcy0+c3BlZWQgPSBtY3MtPm5ld19zcGVlZDsKKwllcnJvcjoKKwkJbWNzLT5uZXdfc3BlZWQgPSAwOworCQlyZXR1cm4gcmV0OworfQorCisvKiBJb2N0bCBjYWxscyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4gIENhbiBiZSBhbiBhcmVhIG9mIGZ1dHVyZSB3b3JrLiAqLworc3RhdGljIGludCBtY3NfbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJLyogc3RydWN0IGlmX2lyZGFfcmVxICppcnEgPSAoc3RydWN0IGlmX2lyZGFfcmVxICopcnE7ICovCisJLyogc3RydWN0IG1jc19jYiAqbWNzID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsgKi8KKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogTmV0d29yayBkZXZpY2UgaXMgdGFrZW4gZG93biwgZG9uZSBieSAiaWZjb25maWcgaXJkYTAgZG93biIgKi8KK3N0YXRpYyBpbnQgbWNzX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtY3NfY2IgKm1jcyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBTdG9wIHRyYW5zbWl0IHByb2Nlc3NpbmcgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBraWxsIGFuZCBmcmVlIHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBVUkJzICovCisJdXNiX2tpbGxfdXJiKG1jcy0+cnhfdXJiKTsKKwl1c2JfZnJlZV91cmIobWNzLT5yeF91cmIpOworCXVzYl9raWxsX3VyYihtY3MtPnR4X3VyYik7CisJdXNiX2ZyZWVfdXJiKG1jcy0+dHhfdXJiKTsKKworCS8qIFN0b3AgYW5kIHJlbW92ZSBpbnN0YW5jZSBvZiBJckxBUCAqLworCWlmIChtY3MtPmlybGFwKQorCQlpcmxhcF9jbG9zZShtY3MtPmlybGFwKTsKKworCW1jcy0+aXJsYXAgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKKy8qIE5ldHdvcmsgZGV2aWNlIGlzIHRha2VuIHVwLCBkb25lIGJ5ICJpZmNvbmZpZyBpcmRhMCB1cCIgKi8KK3N0YXRpYyBpbnQgbWNzX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG1jc19jYiAqbWNzID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwljaGFyIGh3bmFtZVsxNl07CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSB1c2JfY2xlYXJfaGFsdChtY3MtPnVzYmRldiwKKwkJCSAgICAgdXNiX3NuZGJ1bGtwaXBlKG1jcy0+dXNiZGV2LCBtY3MtPmVwX2luKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjE7CisJcmV0ID0gdXNiX2NsZWFyX2hhbHQobWNzLT51c2JkZXYsCisJCQkgICAgIHVzYl9yY3ZidWxrcGlwZShtY3MtPnVzYmRldiwgbWNzLT5lcF9vdXQpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yMTsKKworCXJldCA9IG1jc19zZXR1cF90cmFuc2NlaXZlcihtY3MpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3IxOworCisJcmV0ID0gLUVOT01FTTsKKworCS8qIEluaXRpYWxpemUgZm9yIFNJUi9GSVIgdG8gY29weSBkYXRhIGRpcmVjdGx5IGludG8gc2tiLiAgKi8KKwltY3MtPnJlY2VpdmluZyA9IDA7CisJbWNzLT5yeF9idWZmLnRydWVzaXplID0gSVJEQV9TS0JfTUFYX01UVTsKKwltY3MtPnJ4X2J1ZmYuc2tiID0gZGV2X2FsbG9jX3NrYihJUkRBX1NLQl9NQVhfTVRVKTsKKwlpZiAoIW1jcy0+cnhfYnVmZi5za2IpCisJCWdvdG8gZXJyb3IxOworCisJc2tiX3Jlc2VydmUobWNzLT5yeF9idWZmLnNrYiwgMSk7CisJbWNzLT5yeF9idWZmLmhlYWQgPSBtY3MtPnJ4X2J1ZmYuc2tiLT5kYXRhOworCWRvX2dldHRpbWVvZmRheSgmbWNzLT5yeF90aW1lKTsKKworCS8qCisJICogTm93IHRoYXQgZXZlcnl0aGluZyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHksCisJICogT3BlbiBuZXcgSXJMQVAgbGF5ZXIgaW5zdGFuY2UgdG8gdGFrZSBjYXJlIG9mIHVzLi4uCisJICogTm90ZSA6IHdpbGwgc2VuZCBpbW1lZGlhdGVseSBhIHNwZWVkIGNoYW5nZS4uLgorCSAqLworCXNwcmludGYoaHduYW1lLCAidXNiIyVkIiwgbWNzLT51c2JkZXYtPmRldm51bSk7CisJbWNzLT5pcmxhcCA9IGlybGFwX29wZW4obmV0ZGV2LCAmbWNzLT5xb3MsIGh3bmFtZSk7CisJaWYgKCFtY3MtPmlybGFwKSB7CisJCUlSREFfRVJST1IoIm1jczc3ODA6IGlybGFwX29wZW4gZmFpbGVkIik7CisJCWdvdG8gZXJyb3IyOworCX0KKworCWlmICghbWNzX3NldHVwX3VyYnMobWNzKSkKKwlnb3RvIGVycm9yMzsKKworCXJldCA9IG1jc19yZWNlaXZlX3N0YXJ0KG1jcyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjM7CisKKwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCXJldHVybiAwOworCisJZXJyb3IzOgorCQlpcmxhcF9jbG9zZShtY3MtPmlybGFwKTsKKwllcnJvcjI6CisJCWtmcmVlX3NrYihtY3MtPnJ4X2J1ZmYuc2tiKTsKKwllcnJvcjE6CisJCXJldHVybiByZXQ7Cit9CisKKworLyogR2V0IGRldmljZSBzdGF0cyBmb3IgL3Byb2MvbmV0L2RldiBhbmQgaWZjb25maWcgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbWNzX25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgbWNzX2NiICptY3MgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiAmbWNzLT5zdGF0czsKK30KKworLyogUmVjZWl2ZSBjYWxsYmFjayBmdW5jdGlvbi4gICovCitzdGF0aWMgdm9pZCBtY3NfcmVjZWl2ZV9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlfX3U4ICpieXRlczsKKwlzdHJ1Y3QgbWNzX2NiICptY3MgPSB1cmItPmNvbnRleHQ7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmICghbmV0aWZfcnVubmluZyhtY3MtPm5ldGRldikpCisJCXJldHVybjsKKworCWlmICh1cmItPnN0YXR1cykKKwkJcmV0dXJuOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKKwkJYnl0ZXMgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQkvKiBNQ1MgcmV0dXJucyBmcmFtZXMgd2l0aG91dCBCT0YgYW5kIEVPRgorCQkgKiBJIGFzc3VtZSBpdCByZXR1cm5zIHdob2xlIGZyYW1lcy4KKwkJICovCisJCS8qIFNJUiBzcGVlZCAqLworCQlpZihtY3MtPnNwZWVkIDwgNTc2MDAwKSB7CisJCQlhc3luY191bndyYXBfY2hhcihtY3MtPm5ldGRldiwgJm1jcy0+c3RhdHMsCisJCQkJICAmbWNzLT5yeF9idWZmLCAweGMwKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSsrKQorCQkJCWFzeW5jX3Vud3JhcF9jaGFyKG1jcy0+bmV0ZGV2LCAmbWNzLT5zdGF0cywKKwkJCQkJICAmbWNzLT5yeF9idWZmLCBieXRlc1tpXSk7CisKKwkJCWFzeW5jX3Vud3JhcF9jaGFyKG1jcy0+bmV0ZGV2LCAmbWNzLT5zdGF0cywKKwkJCQkgICZtY3MtPnJ4X2J1ZmYsIDB4YzEpOworCQl9CisJCS8qIE1JUiBzcGVlZCAqLworCQllbHNlIGlmKG1jcy0+c3BlZWQgPT0gNTc2MDAwIHx8IG1jcy0+c3BlZWQgPT0gMTE1MjAwMCkgeworCQkJbWNzX3Vud3JhcF9taXIobWNzLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQl9CisJCS8qIEZJUiBzcGVlZCAqLworCQllbHNlIHsKKwkJCW1jc191bndyYXBfZmlyKG1jcywgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJfQorCQltY3MtPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCWRvX2dldHRpbWVvZmRheSgmbWNzLT5yeF90aW1lKTsKKwl9CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworfQorCisvKiBUcmFuc21pdCBjYWxsYmFjayBmdW50aW9uLiAgKi8KK3N0YXRpYyB2b2lkIG1jc19zZW5kX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBtY3NfY2IgKm1jcyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG1jcy0+bmV0ZGV2OworCisJaWYgKHVubGlrZWx5KG1jcy0+bmV3X3NwZWVkKSkKKwkJc2NoZWR1bGVfd29yaygmbWNzLT53b3JrKTsKKwllbHNlCisJCW5ldGlmX3dha2VfcXVldWUobmRldik7Cit9CisKKy8qIFRyYW5zbWl0IGNhbGxiYWNrIGZ1bnRpb24uICAqLworc3RhdGljIGludCBtY3NfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1jc19jYiAqbWNzOworCWludCB3cmFwbGVuOworCWludCByZXQgPSAwOworCisKKwlpZiAoc2tiID09IE5VTEwgfHwgbmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJbWNzID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNzLT5sb2NrLCBmbGFncyk7CisKKwltY3MtPm5ld19zcGVlZCA9IGlyZGFfZ2V0X25leHRfc3BlZWQoc2tiKTsKKwlpZiAobGlrZWx5KG1jcy0+bmV3X3NwZWVkID09IG1jcy0+c3BlZWQpKQorCQltY3MtPm5ld19zcGVlZCA9IDA7CisKKwkvKiBTSVIgc3BlZWQgKi8KKwlpZihtY3MtPnNwZWVkIDwgNTc2MDAwKSB7CisJCXdyYXBsZW4gPSBtY3Nfd3JhcF9zaXJfc2tiKHNrYiwgbWNzLT5vdXRfYnVmKTsKKwl9CisJLyogTUlSIHNwZWVkICovCisJZWxzZSBpZihtY3MtPnNwZWVkID09IDU3NjAwMCB8fCBtY3MtPnNwZWVkID09IDExNTIwMDApIHsKKwkJd3JhcGxlbiA9IG1jc193cmFwX21pcl9za2Ioc2tiLCBtY3MtPm91dF9idWYpOworCX0KKwkvKiBGSVIgc3BlZWQgKi8KKwllbHNlIHsKKwkJd3JhcGxlbiA9IG1jc193cmFwX2Zpcl9za2Ioc2tiLCBtY3MtPm91dF9idWYpOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYihtY3MtPnR4X3VyYiwgbWNzLT51c2JkZXYsCisJCQkgIHVzYl9zbmRidWxrcGlwZShtY3MtPnVzYmRldiwgbWNzLT5lcF9vdXQpLAorCQkJICBtY3MtPm91dF9idWYsIHdyYXBsZW4sIG1jc19zZW5kX2lycSwgbWNzKTsKKworCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIobWNzLT50eF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQlJUkRBX0VSUk9SKCJmYWlsZWQgdHhfdXJiOiAlZCIsIHJldCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgLUVOT0RFVjoKKwkJY2FzZSAtRVBJUEU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1jcy0+c3RhdHMudHhfZXJyb3JzKys7CisJCQluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKKwkJfQorCX0gZWxzZSB7CisJCW1jcy0+c3RhdHMudHhfcGFja2V0cysrOworCQltY3MtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCX0KKworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY3MtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZSBpbiB0aGUKKyAqIHN5c3RlbS4gIE5lZWQgdG8gdmVyaWZ5IHRoZSBkZXZpY2UgYW5kIGlmIGl0IGlzLCB0aGVuIHN0YXJ0IGhhbmRsaW5nIGl0LgorICovCitzdGF0aWMgaW50IG1jc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgbWNzX2NiICptY3M7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwluZGV2ID0gYWxsb2NfaXJkYWRldihzaXplb2YoKm1jcykpOworCWlmICghbmRldikKKwkJZ290byBlcnJvcjE7CisKKwlJUkRBX0RFQlVHKDEsICJNQ1M3NzgwIFVTQi1JckRBIGJyaWRnZSBmb3VuZCBhdCAlZC4iLCB1ZGV2LT5kZXZudW0pOworCisJLyogd2hhdCBpcyBpdCByZWFseSBmb3I/ICovCisJU0VUX01PRFVMRV9PV05FUihuZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmaW50Zi0+ZGV2KTsKKworCXJldCA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHVkZXYpOworCWlmIChyZXQgIT0gMCkgeworCQlJUkRBX0VSUk9SKCJtY3M3NzgwOiB1c2IgcmVzZXQgY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjI7CisJfQorCisJbWNzID0gbmV0ZGV2X3ByaXYobmRldik7CisJbWNzLT51c2JkZXYgPSB1ZGV2OworCW1jcy0+bmV0ZGV2ID0gbmRldjsKKwlzcGluX2xvY2tfaW5pdCgmbWNzLT5sb2NrKTsKKworCS8qIEluaXRpYWxpemUgUW9TIGZvciB0aGlzIGRldmljZSAqLworCWlyZGFfaW5pdF9tYXhfcW9zX2NhcGFiaWxpZXMoJm1jcy0+cW9zKTsKKworCS8qIFRoYXQncyB0aGUgUnggY2FwYWJpbGl0eS4gKi8KKwltY3MtPnFvcy5iYXVkX3JhdGUuYml0cyAmPQorCSAgICBJUl8yNDAwIHwgSVJfOTYwMCB8IElSXzE5MjAwIHwgSVJfMzg0MDAgfCBJUl81NzYwMCB8IElSXzExNTIwMAorCQl8IElSXzU3NjAwMCB8IElSXzExNTIwMDAgfCAoSVJfNDAwMDAwMCA8PCA4KTsKKworCisJbWNzLT5xb3MubWluX3R1cm5fdGltZS5iaXRzICY9IHFvc19tdHRfYml0czsKKwlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZtY3MtPnFvcyk7CisKKwkvKiBTcGVlZCBjaGFuZ2Ugd29yayBpbml0aWFsaXNhdGlvbiovCisJSU5JVF9XT1JLKCZtY3MtPndvcmssIG1jc19zcGVlZF93b3JrLCBtY3MpOworCisJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCisJbmRldi0+aGFyZF9zdGFydF94bWl0ID0gbWNzX2hhcmRfeG1pdDsKKwluZGV2LT5vcGVuID0gbWNzX25ldF9vcGVuOworCW5kZXYtPnN0b3AgPSBtY3NfbmV0X2Nsb3NlOworCW5kZXYtPmdldF9zdGF0cyA9IG1jc19uZXRfZ2V0X3N0YXRzOworCW5kZXYtPmRvX2lvY3RsID0gbWNzX25ldF9pb2N0bDsKKworCWlmICghaW50Zi0+Y3VyX2FsdHNldHRpbmcpCisJCWdvdG8gZXJyb3IyOworCisJcmV0ID0gbWNzX2ZpbmRfZW5kcG9pbnRzKG1jcywgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LAorCQkJCSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycm9yMjsKKworCUlSREFfREVCVUcoMSwgIklyREE6IFJlZ2lzdGVyZWQgTW9zQ2hpcCBNQ1M3NzgwIGRldmljZSBhcyAlcyIsCisJCSAgIG5kZXYtPm5hbWUpOworCisJbWNzLT50cmFuc2NlaXZlcl90eXBlID0gdHJhbnNjZWl2ZXJfdHlwZTsKKwltY3MtPnNpcl90d2VhayA9IHNpcl90d2VhazsKKwltY3MtPnJlY2VpdmVfbW9kZSA9IHJlY2VpdmVfbW9kZTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWNzKTsKKwlyZXR1cm4gMDsKKworCWVycm9yMjoKKwkJZnJlZV9uZXRkZXYobmRldik7CisKKwllcnJvcjE6CisJCXJldHVybiByZXQ7Cit9CisKKy8qIFRoZSBjdXJyZW50IGRldmljZSBpcyByZW1vdmVkLCB0aGUgVVNCIGxheWVyIHRlbGxzIHVzIHRvIHNodXQgZG93bi4gKi8KK3N0YXRpYyB2b2lkIG1jc19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBtY3NfY2IgKm1jcyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoIW1jcykKKwkJcmV0dXJuOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KG1jcy0+bmV0ZGV2KTsKKwlmcmVlX25ldGRldihtY3MtPm5ldGRldik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCUlSREFfREVCVUcoMCwgIk1DUzc3ODAgbm93IGRpc2Nvbm5lY3RlZC4iKTsKK30KKworLyogTW9kdWxlIGluc2VydGlvbiAqLworc3RhdGljIGludCBfX2luaXQgbWNzX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmbWNzX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJSVJEQV9FUlJPUigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9Cittb2R1bGVfaW5pdChtY3NfaW5pdCk7CisKKy8qIE1vZHVsZSByZW1vdmFsICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbWNzX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmbWNzX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtY3NfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5oIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3MjNkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5oCkBAIC0wLDAgKzEsMTY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZW5hbWU6ICAgICAgbWNzNzc4MC5oCisqIFZlcnNpb246ICAgICAgIDAuMi1hbHBoYQorKiBEZXNjcmlwdGlvbjogICBJcmRhIE1vc0NoaXAgVVNCIERvbmdsZQorKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwKKyogQXV0aG9yczogICAgICAgTHVrYXN6IFN0ZWxtYWNoIDxzdGxtYW5AcG9jenRhLmZtPgorKgkJIEJyaWFuIFB1Z2ggPGJwdWdoQGNzLnBkeC5lZHU+CisqCisqICAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgTHVrYXN6IFN0ZWxtYWNoIDxzdGxtYW5AcG9jenRhLmZtPgorKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIEJyaWFuIFB1Z2ggPGJwdWdoQGNzLnBkeC5lZHU+CisqCisqICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisqICAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisqICAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisqICAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqCisqICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiAgICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiAgICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisqICAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqICAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqICAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisqICAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NQ1M3NzgwX0gKKyNkZWZpbmUgX01DUzc3ODBfSAorCisjZGVmaW5lIE1DU19NT0RFX1NJUgkJMAorI2RlZmluZSBNQ1NfTU9ERV9NSVIJCTEKKyNkZWZpbmUgTUNTX01PREVfRklSCQkyCisKKyNkZWZpbmUgTUNTX0NUUkxfVElNRU9VVAk1MDAKKyNkZWZpbmUgTUNTX1hNSVRfVElNRU9VVAk1MDAKKy8qIFBvc3NpYmxlIHRyYW5zY2VpdmVyIHR5cGVzICovCisjZGVmaW5lIE1DU19UU0NfVklTSEFZCQkwCS8qIFZpc2hheSBURkQsIGRlZmF1bHQgY2hvaWNlICovCisjZGVmaW5lIE1DU19UU0NfQUdJTEVOVAkJMQkvKiBBZ2lsZW50IDM2MDIvMzYwMCAqLworI2RlZmluZSBNQ1NfVFNDX1NIQVJQCQkyCS8qIFNoYXJwIEdQMlcxMDAwWVAgKi8KKworLyogUmVxdWVzdHMgKi8KKyNkZWZpbmUgTUNTX1JEX1JUWVBFIDB4QzAKKyNkZWZpbmUgTUNTX1dSX1JUWVBFIDB4NDAKKyNkZWZpbmUgTUNTX1JEUkVRICAgIDB4MEYKKyNkZWZpbmUgTUNTX1dSUkVRICAgIDB4MEUKKworLyogUmVnaXN0ZXIgMHgwMCAqLworI2RlZmluZSBNQ1NfTU9ERV9SRUcJMAorI2RlZmluZSBNQ1NfRklSCQkoKF9fdTE2KTB4MDAwMSkKKyNkZWZpbmUgTUNTX1NJUjE2VVMJKChfX3UxNikweDAwMDIpCisjZGVmaW5lIE1DU19CQlRHCSgoX191MTYpMHgwMDA0KQorI2RlZmluZSBNQ1NfQVNLCQkoKF9fdTE2KTB4MDAwOCkKKyNkZWZpbmUgTUNTX1BBUklUWQkoKF9fdTE2KTB4MDAxMCkKKworLyogU0lSL01JUiBzcGVlZCBjb25zdGFudHMgKi8KKyNkZWZpbmUgTUNTX1NQRUVEX1NISUZUCSAgICA1CisjZGVmaW5lIE1DU19TUEVFRF9NQVNLCSAgICAoKF9fdTE2KTB4MDBFMCkKKyNkZWZpbmUgTUNTX1NQRUVEKHgpCSAgICAoKHggJiBNQ1NfU1BFRURfTUFTSykgPj4gTUNTX1NQRUVEX1NISUZUKQorI2RlZmluZSBNQ1NfU1BFRURfMjQwMAkgICAgKCgwIDw8IE1DU19TUEVFRF9TSElGVCkgJiBNQ1NfU1BFRURfTUFTSykKKyNkZWZpbmUgTUNTX1NQRUVEXzk2MDAJICAgICgoMSA8PCBNQ1NfU1BFRURfU0hJRlQpICYgTUNTX1NQRUVEX01BU0spCisjZGVmaW5lIE1DU19TUEVFRF8xOTIwMAkgICAgKCgyIDw8IE1DU19TUEVFRF9TSElGVCkgJiBNQ1NfU1BFRURfTUFTSykKKyNkZWZpbmUgTUNTX1NQRUVEXzM4NDAwCSAgICAoKDMgPDwgTUNTX1NQRUVEX1NISUZUKSAmIE1DU19TUEVFRF9NQVNLKQorI2RlZmluZSBNQ1NfU1BFRURfNTc2MDAJICAgICgoNCA8PCBNQ1NfU1BFRURfU0hJRlQpICYgTUNTX1NQRUVEX01BU0spCisjZGVmaW5lIE1DU19TUEVFRF8xMTUyMDAgICAgKCg1IDw8IE1DU19TUEVFRF9TSElGVCkgJiBNQ1NfU1BFRURfTUFTSykKKyNkZWZpbmUgTUNTX1NQRUVEXzU3NjAwMCAgICAoKDYgPDwgTUNTX1NQRUVEX1NISUZUKSAmIE1DU19TUEVFRF9NQVNLKQorI2RlZmluZSBNQ1NfU1BFRURfMTE1MjAwMCAgICgoNyA8PCBNQ1NfU1BFRURfU0hJRlQpICYgTUNTX1NQRUVEX01BU0spCisKKyNkZWZpbmUgTUNTX1BMTFBXRE4JKChfX3UxNikweDAxMDApCisjZGVmaW5lIE1DU19EUklWRVIJKChfX3UxNikweDAyMDApCisjZGVmaW5lIE1DU19EVEQJCSgoX191MTYpMHgwNDAwKQorI2RlZmluZSBNQ1NfRElSCQkoKF9fdTE2KTB4MDgwMCkKKyNkZWZpbmUgTUNTX1NJUEVOCSgoX191MTYpMHgxMDAwKQorI2RlZmluZSBNQ1NfU0VORFNJUAkoKF9fdTE2KTB4MjAwMCkKKyNkZWZpbmUgTUNTX0NIR0RJUgkoKF9fdTE2KTB4NDAwMCkKKyNkZWZpbmUgTUNTX1JFU0VUCSgoX191MTYpMHg4MDAwKQorCisvKiBSZWdpc3RlciAweDAyICovCisjZGVmaW5lIE1DU19YQ1ZSX1JFRwkyCisjZGVmaW5lIE1DU19NT0RFMAkoKF9fdTE2KTB4MDAwMSkKKyNkZWZpbmUgTUNTX1NURklSCSgoX191MTYpMHgwMDAyKQorI2RlZmluZSBNQ1NfWENWUl9DT05GCSgoX191MTYpMHgwMDA0KQorI2RlZmluZSBNQ1NfUlhGQVNUCSgoX191MTYpMHgwMDA4KQorLyogVFhDVVIgWzY6NF0gKi8KKyNkZWZpbmUgTUNTX1RYQ1VSX1NISUZUCTQKKyNkZWZpbmUgTUNTX1RYQ1VSX01BU0sJKChfX3UxNikweDAwNzApCisjZGVmaW5lIE1DU19UWENVUih4KQkoKHggJiBNQ1NfVFhDVVJfTUFTSykgPj4gTUNTX1RYQ1VSX1NISUZUKQorI2RlZmluZSBNQ1NfU0VUVFhDVVIoeCx5KSBcCisJKCh4ICYgfk1DU19UWENVUl9NQVNLKSB8ICh5IDw8IE1DU19UWENVUl9TSElGVCkgJiBNQ1NfVFhDVVJfTUFTSykKKworI2RlZmluZSBNQ1NfTU9ERTEJKChfX3UxNikweDAwODApCisjZGVmaW5lIE1DU19TTU9ERTAJKChfX3UxNikweDAxMDApCisjZGVmaW5lIE1DU19TTU9ERTEJKChfX3UxNikweDAyMDApCisjZGVmaW5lIE1DU19JTlZUWAkoKF9fdTE2KTB4MDQwMCkKKyNkZWZpbmUgTUNTX0lOVlJYCSgoX191MTYpMHgwODAwKQorCisjZGVmaW5lIE1DU19NSU5SWFBXX1JFRwk0CisKKyNkZWZpbmUgTUNTX1JFU1ZfUkVHIDcKKyNkZWZpbmUgTUNTX0lSSU5UWAkoKF9fdTE2KTB4MDAwMSkKKyNkZWZpbmUgTUNTX0lSSU5SWAkoKF9fdTE2KTB4MDAwMikKKworc3RydWN0IG1jc19jYiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsJLyogaW5pdDogcHJvYmVfaXJkYSAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CS8qIG5ldHdvcmsgbGF5ZXIgKi8KKwlzdHJ1Y3QgaXJsYXBfY2IgKmlybGFwOwkvKiBUaGUgbGluayBsYXllciB3ZSBhcmUgYmluZGVkIHRvICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CS8qIG5ldHdvcmsgc3RhdGlzdGljcyAqLworCXN0cnVjdCBxb3NfaW5mbyBxb3M7CisJdW5zaWduZWQgaW50IHNwZWVkOwkvKiBDdXJyZW50IHNwZWVkICovCisJdW5zaWduZWQgaW50IG5ld19zcGVlZDsJLyogbmV3IHNwZWVkICovCisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsgLyogQ2hhbmdlIHNwZWVkIHdvcmsgKi8KKworCXN0cnVjdCBza19idWZmICp0eF9wZW5kaW5nOworCWNoYXIgaW5fYnVmWzQwOTZdOwkvKiB0cmFuc21pdC9yZWNlaXZlIGJ1ZmZlciAqLworCWNoYXIgb3V0X2J1Zls0MDk2XTsJLyogdHJhbnNtaXQvcmVjZWl2ZSBidWZmZXIgKi8KKwlfX3U4ICpmaWZvX3N0YXR1czsKKworCWlvYnVmZl90IHJ4X2J1ZmY7CS8qIHJlY2VpdmUgdW53cmFwIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgdGltZXZhbCByeF90aW1lOworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgcmVjZWl2aW5nOworCisJX191OCBlcF9pbjsKKwlfX3U4IGVwX291dDsKKworCXN0cnVjdCB1cmIgKnJ4X3VyYjsKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CisKKwlpbnQgdHJhbnNjZWl2ZXJfdHlwZTsKKwlpbnQgc2lyX3R3ZWFrOworCWludCByZWNlaXZlX21vZGU7Cit9OworCitzdGF0aWMgaW50IG1jc19zZXRfcmVnKHN0cnVjdCBtY3NfY2IgKm1jcywgX191MTYgcmVnLCBfX3UxNiB2YWwpOworc3RhdGljIGludCBtY3NfZ2V0X3JlZyhzdHJ1Y3QgbWNzX2NiICptY3MsIF9fdTE2IHJlZywgX191MTYgKiB2YWwpOworCitzdGF0aWMgaW5saW5lIGludCBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfdmlzaGF5KHN0cnVjdCBtY3NfY2IgKm1jcyk7CitzdGF0aWMgaW5saW5lIGludCBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfYWdpbGVudChzdHJ1Y3QgbWNzX2NiICptY3MpOworc3RhdGljIGlubGluZSBpbnQgbWNzX3NldHVwX3RyYW5zY2VpdmVyX3NoYXJwKHN0cnVjdCBtY3NfY2IgKm1jcyk7CitzdGF0aWMgaW5saW5lIGludCBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXIoc3RydWN0IG1jc19jYiAqbWNzKTsKK3N0YXRpYyBpbmxpbmUgaW50IG1jc193cmFwX3Npcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqIGJ1Zik7CitzdGF0aWMgdW5zaWduZWQgbWNzX3dyYXBfZmlyX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICpidWYpOworc3RhdGljIHVuc2lnbmVkIG1jc193cmFwX21pcl9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqYnVmKTsKK3N0YXRpYyB2b2lkIG1jc191bndyYXBfbWlyKHN0cnVjdCBtY3NfY2IgKm1jcywgX191OCAqYnVmLCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIG1jc191bndyYXBfZmlyKHN0cnVjdCBtY3NfY2IgKm1jcywgX191OCAqYnVmLCBpbnQgbGVuKTsKK3N0YXRpYyBpbmxpbmUgaW50IG1jc19zZXR1cF91cmJzKHN0cnVjdCBtY3NfY2IgKm1jcyk7CitzdGF0aWMgaW5saW5lIGludCBtY3NfcmVjZWl2ZV9zdGFydChzdHJ1Y3QgbWNzX2NiICptY3MpOworc3RhdGljIGlubGluZSBpbnQgbWNzX2ZpbmRfZW5kcG9pbnRzKHN0cnVjdCBtY3NfY2IgKm1jcywKKwkJCQkgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsIGludCBlcG51bSk7CisKK3N0YXRpYyBpbnQgbWNzX3NwZWVkX2NoYW5nZShzdHJ1Y3QgbWNzX2NiICptY3MpOworCitzdGF0aWMgaW50IG1jc19uZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CitzdGF0aWMgaW50IG1jc19uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgaW50IG1jc19uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbWNzX25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKK3N0YXRpYyB2b2lkIG1jc19yZWNlaXZlX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIG1jc19zZW5kX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgbWNzX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKworc3RhdGljIGludCBtY3NfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIG1jc19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworI2VuZGlmCQkJCS8qIF9NQ1M3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwppbmRleCAzMTg2N2U0Li5kNjFiMjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXAuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPgpAQCAtMTczLDkgKzE3NCw3IEBACiAgICAgICAgIHN0cnVjdCBxb3NfaW5mbyAgIHFvczsKIAl1bnNpZ25lZCAJICBzcGVlZDsJLyogQ3VycmVudCBzcGVlZCAqLwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgdGhyX3dhaXQ7CS8qIHRyYW5zbWl0IHRocmVhZCB3YWtldXAgKi8KLQlzdHJ1Y3QgY29tcGxldGlvbiB0aHJfZXhpdGVkOwotCXBpZF90CQkgIHRocl9waWQ7CisgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOyAgICAgLyogdHJhbnNtaXQgdGhyZWFkICovCiAKIAlzdHJ1Y3Qgc2tfYnVmZgkgICp0eF9wZW5kaW5nOwogCXZvaWQJCSAgKmlvX2J1ZjsJLyogdHJhbnNtaXQvcmVjZWl2ZSBidWZmZXIgKi8KQEAgLTU3Nyw3ICs1NzYsNyBAQAogCVNLQl9MSU5FQVJfQVNTRVJUKHNrYik7CiAKIAlza2IgPSB4Y2hnKCZzdGlyLT50eF9wZW5kaW5nLCBza2IpOwotCXdha2VfdXAoJnN0aXItPnRocl93YWl0KTsKKyAgICAgICAgd2FrZV91cF9wcm9jZXNzKHN0aXItPnRocmVhZCk7CiAJCiAJLyogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHVubGVzcyBzdG9wL3dha2V1cCBwcm9ibGVtICovCiAJaWYgKHVubGlrZWx5KHNrYikpIHsKQEAgLTc1MywxMyArNzUyLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3Rpci0+bmV0ZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlkYWVtb25pemUoIiVzIiwgZGV2LT5uYW1lKTsKLQlhbGxvd19zaWduYWwoU0lHVEVSTSk7Ci0KLQl3aGlsZSAobmV0aWZfcnVubmluZyhkZXYpCi0JICAgICAgICYmIG5ldGlmX2RldmljZV9wcmVzZW50KGRldikKLQkgICAgICAgJiYgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCXsKKyAgICAgICAgd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKICNpZmRlZiBDT05GSUdfUE0KIAkJLyogaWYgc3VzcGVuZGluZywgdGhlbiBwb3dlciBvZmYgYW5kIHdhaXQgKi8KIAkJaWYgKHVubGlrZWx5KGZyZWV6aW5nKGN1cnJlbnQpKSkgewpAQCAtODEzLDEwICs4MDYsMTEgQEAKIAkJfQogCiAJCS8qIHNsZWVwIGlmIG5vdGhpbmcgdG8gc2VuZCAqLwotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc3Rpci0+dGhyX3dhaXQsIHN0aXItPnR4X3BlbmRpbmcpOwotCX0KKyAgICAgICAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlKCk7CiAKLQljb21wbGV0ZV9hbmRfZXhpdCAoJnN0aXItPnRocl9leGl0ZWQsIDApOworCX0KKyAgICAgICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtODU5LDcgKzg1Myw3IEBACiAJCXdhcm4oIiVzOiB1c2IgcmVjZWl2ZSBzdWJtaXQgZXJyb3I6ICVkIiwKIAkJCXN0aXItPm5ldGRldi0+bmFtZSwgZXJyKTsKIAkJc3Rpci0+cmVjZWl2aW5nID0gMDsKLQkJd2FrZV91cCgmc3Rpci0+dGhyX3dhaXQpOworCQl3YWtlX3VwX3Byb2Nlc3Moc3Rpci0+dGhyZWFkKTsKIAl9CiB9CiAKQEAgLTkyOCwxMCArOTIyLDEwIEBACiAJfQogCiAJLyoqIFN0YXJ0IGtlcm5lbCB0aHJlYWQgZm9yIHRyYW5zbWl0LiAgKi8KLQlzdGlyLT50aHJfcGlkID0ga2VybmVsX3RocmVhZChzdGlyX3RyYW5zbWl0X3RocmVhZCwgc3RpciwKLQkJCQkgICAgICBDTE9ORV9GU3xDTE9ORV9GSUxFUyk7Ci0JaWYgKHN0aXItPnRocl9waWQgPCAwKSB7Ci0JCWVyciA9IHN0aXItPnRocl9waWQ7CisJc3Rpci0+dGhyZWFkID0ga3RocmVhZF9ydW4oc3Rpcl90cmFuc21pdF90aHJlYWQsIHN0aXIsCisJCQkJICAgIiVzIiwgc3Rpci0+bmV0ZGV2LT5uYW1lKTsKKyAgICAgICAgaWYgKElTX0VSUihzdGlyLT50aHJlYWQpKSB7CisgICAgICAgICAgICAgICAgZXJyID0gUFRSX0VSUihzdGlyLT50aHJlYWQpOwogCQllcnIoInN0aXI0MjAwOiB1bmFibGUgdG8gc3RhcnQga2VybmVsIHRocmVhZCIpOwogCQlnb3RvIGVycl9vdXQ2OwogCX0KQEAgLTk2OCw4ICs5NjIsNyBAQAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAogCS8qIEtpbGwgdHJhbnNtaXQgdGhyZWFkICovCi0Ja2lsbF9wcm9jKHN0aXItPnRocl9waWQsIFNJR1RFUk0sIDEpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnN0aXItPnRocl9leGl0ZWQpOworCWt0aHJlYWRfc3RvcChzdGlyLT50aHJlYWQpOwogCWtmcmVlKHN0aXItPmZpZm9fc3RhdHVzKTsKIAogCS8qIE1vcCB1cCByZWNlaXZlIHVyYidzICovCkBAIC0xMDg0LDkgKzEwNzcsNiBAQAogCXN0aXItPnFvcy5taW5fdHVybl90aW1lLmJpdHMgICAmPSBxb3NfbXR0X2JpdHM7CiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgmc3Rpci0+cW9zKTsKIAotCWluaXRfY29tcGxldGlvbiAoJnN0aXItPnRocl9leGl0ZWQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZzdGlyLT50aHJfd2FpdCk7Ci0KIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KIAluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHN0aXJfaGFyZF94bWl0OwogCW5ldC0+b3BlbiAgICAgICAgICAgID0gc3Rpcl9uZXRfb3BlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKaW5kZXggOTdhNDllMC4uZDcwYjllOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKQEAgLTk1OSw3ICs5NTksNyBAQAogCQkJICAgIHx8ICAobm93LnR2X3NlYz09cmVhZHkudHZfc2VjICYmIG5vdy50dl91c2VjPj1yZWFkeS50dl91c2VjKSkKIAkJCSAgICAJYnJlYWs7CiAJCQl1ZGVsYXkoMTAwKTsKLQkJCS8qIG11c3Qgbm90IHNsZWVwIGhlcmUgLSB3ZSBhcmUgY2FsbGVkIHVuZGVyIHhtaXRfbG9jayEgKi8KKwkJCS8qIG11c3Qgbm90IHNsZWVwIGhlcmUgLSBjYWxsZWQgdW5kZXIgbmV0aWZfdHhfbG9jayEgKi8KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2IvTWFrZWZpbGUKaW5kZXggN2M3YWZmMS4uYThhMmQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9peGdiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKICMgCi0jIENvcHlyaWdodChjKSAxOTk5IC0gMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaAppbmRleCBjODMyNzFiLi5hODNlZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaAorKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtODQsNyArODQsMTIgQEAKICNkZWZpbmUgSVhHQl9EQkcoYXJncy4uLikKICNlbmRpZgogCi0jZGVmaW5lIElYR0JfRVJSKGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiaXhnYjogIiBhcmdzKQorI2RlZmluZSBQRlggIml4Z2I6ICIKKyNkZWZpbmUgRFBSSU5USyhubGV2ZWwsIGtsZXZlbCwgZm10LCBhcmdzLi4uKSBcCisJKHZvaWQpKChORVRJRl9NU0dfIyNubGV2ZWwgJiBhZGFwdGVyLT5tc2dfZW5hYmxlKSAmJiBcCisJcHJpbnRrKEtFUk5fIyNrbGV2ZWwgUEZYICIlczogJXM6ICIgZm10LCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIFwKKwkJX19GVU5DVElPTl9fICwgIyMgYXJncykpCisKIAogLyogVFgvUlggZGVzY3JpcHRvciBkZWZpbmVzICovCiAjZGVmaW5lIERFRkFVTFRfVFhECSAyNTYKQEAgLTE3NSw2ICsxODAsNyBAQAogCXVpbnQ2NF90IGh3X2NzdW1fdHhfZ29vZDsKIAl1aW50NjRfdCBod19jc3VtX3R4X2Vycm9yOwogCXVpbnQzMl90IHR4X2ludF9kZWxheTsKKwl1aW50MzJfdCB0eF90aW1lb3V0X2NvdW50OwogCWJvb2xlYW5fdCB0eF9pbnRfZGVsYXlfZW5hYmxlOwogCWJvb2xlYW5fdCBkZXRlY3RfdHhfaHVuZzsKIApAQCAtMTkyLDcgKzE5OCw5IEBACiAKIAkvKiBzdHJ1Y3RzIGRlZmluZWQgaW4gaXhnYl9ody5oICovCiAJc3RydWN0IGl4Z2JfaHcgaHc7CisJdTE2IG1zZ19lbmFibGU7CiAJc3RydWN0IGl4Z2JfaHdfc3RhdHMgc3RhdHM7CisJdWludDMyX3QgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlib29sZWFuX3QgaGF2ZV9tc2k7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9lZS5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMKaW5kZXggNjYxYTQ2Yi4uODM1N2M1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9lZS5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmgKaW5kZXggNTE5MGFhOC4uYmY2ZmEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCmluZGV4IGQzOGFkZTUuLmNmMTliODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtNDQsNiArNDQsOCBAQAogZXh0ZXJuIHZvaWQgaXhnYl9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGl4Z2JfdXBkYXRlX3N0YXRzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCisjZGVmaW5lIElYR0JfQUxMX1JBUl9FTlRSSUVTIDE2CisKIHN0cnVjdCBpeGdiX3N0YXRzIHsKIAljaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiAJaW50IHNpemVvZl9zdGF0OwpAQCAtNzYsNiArNzgsNyBAQAogCXsidHhfaGVhcnRiZWF0X2Vycm9ycyIsIElYR0JfU1RBVChuZXRfc3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyl9LAogCXsidHhfd2luZG93X2Vycm9ycyIsIElYR0JfU1RBVChuZXRfc3RhdHMudHhfd2luZG93X2Vycm9ycyl9LAogCXsidHhfZGVmZXJyZWRfb2siLCBJWEdCX1NUQVQoc3RhdHMuZGMpfSwKKwl7InR4X3RpbWVvdXRfY291bnQiLCBJWEdCX1NUQVQodHhfdGltZW91dF9jb3VudCkgfSwKIAl7InJ4X2xvbmdfbGVuZ3RoX2Vycm9ycyIsIElYR0JfU1RBVChzdGF0cy5yb2MpfSwKIAl7InJ4X3Nob3J0X2xlbmd0aF9lcnJvcnMiLCBJWEdCX1NUQVQoc3RhdHMucnVjKX0sCiAjaWZkZWYgTkVUSUZfRl9UU08KQEAgLTExNyw2ICsxMjAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaXhnYl9zZXRfc3BlZWRfZHVwbGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJLyogYmUgb3B0aW1pc3RpYyBhYm91dCBvdXIgbGluaywgc2luY2Ugd2Ugd2VyZSB1cCBiZWZvcmUgKi8KKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gMTAwMDA7CisJYWRhcHRlci0+bGlua19kdXBsZXggPSBGVUxMX0RVUExFWDsKKwluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworfQorCiBzdGF0aWMgaW50CiBpeGdiX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CkBAIC0xMzAsMTIgKzE0Myw3IEBACiAJCWl4Z2JfZG93bihhZGFwdGVyLCBUUlVFKTsKIAkJaXhnYl9yZXNldChhZGFwdGVyKTsKIAkJaXhnYl91cChhZGFwdGVyKTsKLQkJLyogYmUgb3B0aW1pc3RpYyBhYm91dCBvdXIgbGluaywgc2luY2Ugd2Ugd2VyZSB1cCBiZWZvcmUgKi8KLQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDEwMDAwOwotCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOwotCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKLQkJCisJCWl4Z2Jfc2V0X3NwZWVkX2R1cGxleChuZXRkZXYpOwogCX0gZWxzZQogCQlpeGdiX3Jlc2V0KGFkYXB0ZXIpOwogCkBAIC0xODMsMTEgKzE5MSw3IEBACiAJaWYobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCWl4Z2JfZG93bihhZGFwdGVyLCBUUlVFKTsKIAkJaXhnYl91cChhZGFwdGVyKTsKLQkJLyogYmUgb3B0aW1pc3RpYyBhYm91dCBvdXIgbGluaywgc2luY2Ugd2Ugd2VyZSB1cCBiZWZvcmUgKi8KLQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDEwMDAwOwotCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOwotCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJaXhnYl9zZXRfc3BlZWRfZHVwbGV4KG5ldGRldik7CiAJfSBlbHNlCiAJCWl4Z2JfcmVzZXQoYWRhcHRlcik7CiAJCQpAQCAtMjEyLDExICsyMTYsNyBAQAogCWlmKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQlpeGdiX2Rvd24oYWRhcHRlcixUUlVFKTsKIAkJaXhnYl91cChhZGFwdGVyKTsKLQkJLyogYmUgb3B0aW1pc3RpYyBhYm91dCBvdXIgbGluaywgc2luY2Ugd2Ugd2VyZSB1cCBiZWZvcmUgKi8KLQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDEwMDAwOwotCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOwotCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJaXhnYl9zZXRfc3BlZWRfZHVwbGV4KG5ldGRldik7CiAJfSBlbHNlCiAJCWl4Z2JfcmVzZXQoYWRhcHRlcik7CiAJcmV0dXJuIDA7CkBAIC0yNTEsNiArMjUxLDE5IEBACiB9IAogI2VuZGlmIC8qIE5FVElGX0ZfVFNPICovCiAKK3N0YXRpYyB1aW50MzJfdAoraXhnYl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gYWRhcHRlci0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQKK2l4Z2Jfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IGRhdGEpCit7CisJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bXNnX2VuYWJsZSA9IGRhdGE7Cit9CiAjZGVmaW5lIElYR0JfR0VUX1NUQVQoX0FfLCBfUl8pIF9BXy0+c3RhdHMuX1JfCiAKIHN0YXRpYyBpbnQgCkBAIC0zMDMsNyArMzE2LDcgQEAKIAkqcmVnKysgPSBJWEdCX1JFQURfUkVHKGh3LCBSWENTVU0pOwkvKiAgMjAgKi8KIAogCS8qIHRoZXJlIGFyZSAxNiBSQVIgZW50cmllcyBpbiBoYXJkd2FyZSwgd2Ugb25seSB1c2UgMyAqLwotCWZvcihpID0gMDsgaSA8IDE2OyBpKyspIHsKKwlmb3IoaSA9IDA7IGkgPCBJWEdCX0FMTF9SQVJfRU5UUklFUzsgaSsrKSB7CiAJCSpyZWcrKyA9IElYR0JfUkVBRF9SRUdfQVJSQVkoaHcsIFJBTCwgKGkgPDwgMSkpOyAvKjIxLC4uLiw1MSAqLwogCQkqcmVnKysgPSBJWEdCX1JFQURfUkVHX0FSUkFZKGh3LCBSQUgsIChpIDw8IDEpKTsgLyoyMiwuLi4sNTIgKi8KIAl9CkBAIC01OTMsMTEgKzYwNiw3IEBACiAJCWFkYXB0ZXItPnR4X3JpbmcgPSB0eF9uZXc7CiAJCWlmKChlcnIgPSBpeGdiX3VwKGFkYXB0ZXIpKSkKIAkJCXJldHVybiBlcnI7Ci0JCS8qIGJlIG9wdGltaXN0aWMgYWJvdXQgb3VyIGxpbmssIHNpbmNlIHdlIHdlcmUgdXAgYmVmb3JlICovCi0JCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAxMDAwMDsKLQkJYWRhcHRlci0+bGlua19kdXBsZXggPSBGVUxMX0RVUExFWDsKLQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwotCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCWl4Z2Jfc2V0X3NwZWVkX2R1cGxleChuZXRkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzE0LDYgKzcyMyw4IEBACiAJLnNldF90eF9jc3VtID0gaXhnYl9zZXRfdHhfY3N1bSwKIAkuZ2V0X3NnCT0gZXRodG9vbF9vcF9nZXRfc2csCiAJLnNldF9zZwk9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfbXNnbGV2ZWwgPSBpeGdiX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsID0gaXhnYl9zZXRfbXNnbGV2ZWwsCiAjaWZkZWYgTkVUSUZfRl9UU08KIAkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKIAkuc2V0X3RzbyA9IGl4Z2Jfc2V0X3RzbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMKaW5kZXggNjIwY2FkNC4uZjdmYTEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmgKaW5kZXggMzgyYzYzMC4uY2I0NTY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKQEAgLTU3LDYgKzU3LDcgQEAKIHR5cGVkZWYgZW51bSB7CiAJaXhnYl9tZWRpYV90eXBlX3Vua25vd24gPSAwLAogCWl4Z2JfbWVkaWFfdHlwZV9maWJlciA9IDEsCisJaXhnYl9tZWRpYV90eXBlX2NvcHBlciA9IDIsCiAJaXhnYl9udW1fbWVkaWFfdHlwZXMKIH0gaXhnYl9tZWRpYV90eXBlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaWRzLmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaWRzLmgKaW5kZXggYWVlMjA3ZS4uNDBhMDg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2lkcy5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9pZHMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtNDMsNiArNDMsOCBAQAogI2RlZmluZSBJWEdCX1NVQkRFVklDRV9JRF9BMTFGICAgICAgMHhBMTFGICAgCiAjZGVmaW5lIElYR0JfU1VCREVWSUNFX0lEX0EwMUYgICAgICAweEEwMUYgICAKIAotI2VuZGlmIC8qICNpZm5kZWYgX0lYR0JfSURTX0hfICovCisjZGVmaW5lIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfQ1g0ICAgMHgxMDlFCisjZGVmaW5lIElYR0JfU1VCREVWSUNFX0lEX0EwMEMgIDB4QTAwQwogCisjZW5kaWYgLyogI2lmbmRlZiBfSVhHQl9JRFNfSF8gKi8KIC8qIEVuZCBvZiBGaWxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCBjZmQ2N2Q4Li41NzAwNmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKQEAgLTI4LDIyICsyOCw2IEBACiAKICNpbmNsdWRlICJpeGdiLmgiCiAKLS8qIENoYW5nZSBMb2cKLSAqIDEuMC45NiAwNC8xOS8wNQotICogLSBNYWtlIG5lZWRsZXNzbHkgZ2xvYmFsIGNvZGUgc3RhdGljIC0tIGJ1bmtAc3R1c3RhLmRlCi0gKiAtIGV0aHRvb2wgY2xlYW51cCAtLSBzaGVtbWluZ2VyQG9zZGwub3JnCi0gKiAtIFN1cHBvcnQgZm9yIE1PRFVMRV9WRVJTSU9OIC0tIGxpbnZpbGxlQHR1eGRyaXZlci5jb20KLSAqIC0gYWRkIHNrYl9oZWFkZXJfY2xvbmVkIGNoZWNrIHRvIHRoZSB0c28gcGF0aCAtLSBoZXJiZXJ0QGFwYW5hLm9yZy5hdQotICogMS4wLjg4IDAxLzA1LzA1Ci0gKiAtIGluY2x1ZGUgZml4IHRvIHRoZSBjb25kaXRpb24gdGhhdCBkZXRlcm1pbmVzIHdoZW4gdG8gcXVpdCBOQVBJIC0gUm9iZXJ0IE9sc3NvbgotICogLSB1c2UgbmV0aWZfcG9sbF97ZGlzYWJsZS9lbmFibGV9IHRvIHN5bmNocm9uaXplIGJldHdlZW4gTkFQSSBhbmQgaS9mIHVwL2Rvd24KLSAqIDEuMC44NCAxMC8yNi8wNAotICogLSByZXNldCBidWZmZXJfaW5mby0+ZG1hIGluIFR4IHJlc291cmNlIGNsZWFudXAgbG9naWMKLSAqIDEuMC44MyAxMC8xMi8wNAotICogLSBzcGFyc2UgY2xlYW51cCAtIHNoZW1taW5nZXJAb3NkbC5vcmcKLSAqIC0gZml4IHR4IHJlc291cmNlIGNsZWFudXAgbG9naWMKLSAqLwotCiBjaGFyIGl4Z2JfZHJpdmVyX25hbWVbXSA9ICJpeGdiIjsKIHN0YXRpYyBjaGFyIGl4Z2JfZHJpdmVyX3N0cmluZ1tdID0gIkludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIERyaXZlciI7CiAKQEAgLTUyLDkgKzM2LDkgQEAKICNlbHNlCiAjZGVmaW5lIERSSVZFUk5BUEkgIi1OQVBJIgogI2VuZGlmCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjEwMC1rMiJEUklWRVJOQVBJCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjEwOS1rMiJEUklWRVJOQVBJCiBjaGFyIGl4Z2JfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwotc3RhdGljIGNoYXIgaXhnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4iOworc3RhdGljIGNoYXIgaXhnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiAvKiBpeGdiX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlCiAgKgpAQCAtNjcsNiArNTEsOCBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl4Z2JfcGNpX3RibFtdID0gewogCXtJTlRFTF9WRU5ET1JfSUQsIElYR0JfREVWSUNFX0lEXzgyNTk3RVgsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtJTlRFTF9WRU5ET1JfSUQsIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfQ1g0LAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYX1NSLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0xSLCAgCkBAIC0xNDgsNiArMTM0LDExIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKKyNkZWZpbmUgREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVCAzCitzdGF0aWMgaW50IGRlYnVnID0gREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMD1ub25lLC4uLiwxNj1hbGwpIik7CisKIC8qIHNvbWUgZGVmaW5lcyBmb3IgY29udHJvbGxpbmcgZGVzY3JpcHRvciBmZXRjaGVzIGluIGgvdyAqLwogI2RlZmluZSBSWERDVExfV1RIUkVTSF9ERUZBVUxUIDE2CS8qIGNoaXAgd3JpdGVzIGJhY2sgYXQgdGhpcyBtYW55IG9yIFJYVDAgKi8KICNkZWZpbmUgUlhEQ1RMX1BUSFJFU0hfREVGQVVMVCAwCQkvKiBjaGlwIGNvbnNpZGVycyBwcmVmZWNoIGJlbG93CkBAIC0xOTYsNyArMTg3LDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBpeGdiX2lycV9kaXNhYmxlKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7CkBAIC0yMTAsNyArMjAxLDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBpeGdiX2lycV9lbmFibGUoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZihhdG9taWNfZGVjX2FuZF90ZXN0KCZhZGFwdGVyLT5pcnFfc2VtKSkgewpAQCAtMjMxLDYgKzIyMiw3IEBACiAKIAkvKiBoYXJkd2FyZSBoYXMgYmVlbiByZXNldCwgd2UgbmVlZCB0byByZWxvYWQgc29tZSB0aGluZ3MgKi8KIAorCWl4Z2JfcmFyX3NldChodywgbmV0ZGV2LT5kZXZfYWRkciwgMCk7CiAJaXhnYl9zZXRfbXVsdGkobmV0ZGV2KTsKIAogCWl4Z2JfcmVzdG9yZV92bGFuKGFkYXB0ZXIpOwpAQCAtMjQwLDYgKzIzMiw5IEBACiAJaXhnYl9jb25maWd1cmVfcngoYWRhcHRlcik7CiAJaXhnYl9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIpOwogCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBnZXQgdGhlIGhhcmR3YXJlIGludG8gYSBrbm93biBzdGF0ZSAqLworCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1DLCAweGZmZmZmZmZmKTsKKwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJewogCWJvb2xlYW5fdCBwY2l4ID0gKElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYgCkBAIC0yNDksNyArMjQ0LDcgQEAKIAlpZiAoIXBjaXgpCiAJICAgYWRhcHRlci0+aGF2ZV9tc2kgPSBGQUxTRTsKIAllbHNlIGlmKChlcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KSkpIHsKLQkJcHJpbnRrIChLRVJOX0VSUgorCQlEUFJJTlRLKFBST0JFLCBFUlIsCiAJCSAiVW5hYmxlIHRvIGFsbG9jYXRlIE1TSSBpbnRlcnJ1cHQgRXJyb3I6ICVkXG4iLCBlcnIpOwogCQlhZGFwdGVyLT5oYXZlX21zaSA9IEZBTFNFOwogCQkvKiBwcm9jZWVkIHRvIHRyeSB0byByZXF1ZXN0IHJlZ3VsYXIgaW50ZXJydXB0ICovCkBAIC0yNTksMTEgKzI1NCwxMSBAQAogI2VuZGlmCiAJaWYoKGVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgJml4Z2JfaW50ciwKIAkJCQkgIFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwKLQkJCQkgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSkpCisJCQkgICAgICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSkgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsCisJCSAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7Ci0KLQkvKiBkaXNhYmxlIGludGVycnVwdHMgYW5kIGdldCB0aGUgaGFyZHdhcmUgaW50byBhIGtub3duIHN0YXRlICovCi0JSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIDB4ZmZmZmZmZmYpOworCX0KIAogCWlmKChody0+bWF4X2ZyYW1lX3NpemUgIT0gbWF4X2ZyYW1lKSB8fAogCQkoaHctPm1heF9mcmFtZV9zaXplICE9CkBAIC0yODUsMTEgKzI4MCwxMiBAQAogCX0KIAogCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOwotCWl4Z2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAogI2lmZGVmIENPTkZJR19JWEdCX05BUEkKIAluZXRpZl9wb2xsX2VuYWJsZShuZXRkZXYpOwogI2VuZGlmCisJaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNiw3ICszMjIsNyBAQAogCiAJaXhnYl9hZGFwdGVyX3N0b3AoJmFkYXB0ZXItPmh3KTsKIAlpZighaXhnYl9pbml0X2h3KCZhZGFwdGVyLT5odykpCi0JCUlYR0JfREJHKCJpeGdiX2luaXRfaHcgZmFpbGVkLlxuIik7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIml4Z2JfaW5pdF9odyBmYWlsZWQuXG4iKTsKIH0KIAogLyoqCkBAIC0zNjMsNyArMzU5LDggQEAKIAl9IGVsc2UgewogCQlpZigoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHx8CiAJCSAgIChlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSkgewotCQkJSVhHQl9FUlIoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgIml4Z2I6IE5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOwogCQkJZ290byBlcnJfZG1hX21hc2s7CiAJCX0KIAkJcGNpX3VzaW5nX2RhYyA9IDA7CkBAIC0zODgsNiArMzg1LDcgQEAKIAlhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7CiAJYWRhcHRlci0+cGRldiA9IHBkZXY7CiAJYWRhcHRlci0+aHcuYmFjayA9IGFkYXB0ZXI7CisJYWRhcHRlci0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBERUZBVUxUX0RFQlVHX0xFVkVMX1NISUZUKTsKIAogCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgQkFSXzApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBCQVJfMCk7CkBAIC00MTYsNyArNDE0LDcgQEAKIAluZXRkZXYtPmNoYW5nZV9tdHUgPSAmaXhnYl9jaGFuZ2VfbXR1OwogCWl4Z2Jfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LT50eF90aW1lb3V0ID0gJml4Z2JfdHhfdGltZW91dDsKLQluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKICNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCiAJbmV0ZGV2LT5wb2xsID0gJml4Z2JfY2xlYW47CiAJbmV0ZGV2LT53ZWlnaHQgPSA2NDsKQEAgLTQyOCw2ICs0MjYsNyBAQAogCW5ldGRldi0+cG9sbF9jb250cm9sbGVyID0gaXhnYl9uZXRwb2xsOwogI2VuZGlmCiAKKwlzdHJjcHkobmV0ZGV2LT5uYW1lLCBwY2lfbmFtZShwZGV2KSk7CiAJbmV0ZGV2LT5tZW1fc3RhcnQgPSBtbWlvX3N0YXJ0OwogCW5ldGRldi0+bWVtX2VuZCA9IG1taW9fc3RhcnQgKyBtbWlvX2xlbjsKIAluZXRkZXYtPmJhc2VfYWRkciA9IGFkYXB0ZXItPmh3LmlvX2Jhc2U7CkBAIC00NDksNiArNDQ4LDkgQEAKICNpZmRlZiBORVRJRl9GX1RTTwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAjZW5kaWYKKyNpZmRlZiBORVRJRl9GX0xMVFgKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKyNlbmRpZgogCiAJaWYocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CkBAIC00NTYsNyArNDU4LDcgQEAKIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCiAKIAlpZighaXhnYl92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oJmFkYXB0ZXItPmh3KSkgewotCQlwcmludGsoS0VSTl9FUlIgIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiVGhlIEVFUFJPTSBDaGVja3N1bSBJcyBOb3QgVmFsaWRcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9lZXByb207CiAJfQpAQCAtNDY1LDYgKzQ2Nyw3IEBACiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBuZXRkZXYtPmRldl9hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAogCWlmKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+cGVybV9hZGRyKSkgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsICJJbnZhbGlkIE1BQyBBZGRyZXNzXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KQEAgLTQ3OCw2ICs0ODEsNyBAQAogCUlOSVRfV09SSygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrLAogCQkgICh2b2lkICgqKSh2b2lkICopKWl4Z2JfdHhfdGltZW91dF90YXNrLCBuZXRkZXYpOwogCisJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CiAJaWYoKGVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpKSkKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKQEAgLTQ4Niw4ICs0OTAsNyBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIENvbm5lY3Rpb25cbiIsCi0JCSAgIG5ldGRldi0+bmFtZSk7CisJRFBSSU5USyhQUk9CRSwgSU5GTywgIkludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIENvbm5lY3Rpb25cbiIpOwogCWl4Z2JfY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAkvKiByZXNldCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgbmV3IHNldHRpbmdzICovCiAKQEAgLTU1NywxNyArNTYwLDE3IEBACiAJaHctPnN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOwogCWh3LT5zdWJzeXN0ZW1faWQgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwogCi0JYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IElYR0JfUlhCVUZGRVJfMjA0ODsKLQogCWh3LT5tYXhfZnJhbWVfc2l6ZSA9IG5ldGRldi0+bXR1ICsgRU5FVF9IRUFERVJfU0laRSArIEVORVRfRkNTX0xFTkdUSDsKKwlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gaHctPm1heF9mcmFtZV9zaXplOwogCiAJaWYoKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWCkKLQkgICB8fChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfTFIpCi0JICAgfHwoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX1NSKSkKKwkgICB8fCAoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0NYNCkKKwkgICB8fCAoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0xSKQorCSAgIHx8IChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfU1IpKQogCQkJaHctPm1hY190eXBlID0gaXhnYl84MjU5NzsKIAllbHNlIHsKIAkJLyogc2hvdWxkIG5ldmVyIGhhdmUgbG9hZGVkIG9uIHRoaXMgZGV2aWNlICovCi0JCXByaW50ayhLRVJOX0VSUiAiaXhnYjogdW5zdXBwb3J0ZWQgZGV2aWNlIGlkXG4iKTsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAidW5zdXBwb3J0ZWQgZGV2aWNlIGlkXG4iKTsKIAl9CiAKIAkvKiBlbmFibGUgZmxvdyBjb250cm9sIHRvIGJlIHByb2dyYW1tZWQgKi8KQEAgLTY2NSw2ICs2NjgsOCBAQAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JfYnVmZmVyKSAqIHR4ZHItPmNvdW50OwogCXR4ZHItPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZighdHhkci0+YnVmZmVyX2luZm8pIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldCh0eGRyLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CkBAIC02NzcsNiArNjgyLDggQEAKIAl0eGRyLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhkci0+c2l6ZSwgJnR4ZHItPmRtYSk7CiAJaWYoIXR4ZHItPmRlc2MpIHsKIAkJdmZyZWUodHhkci0+YnVmZmVyX2luZm8pOworCQlEUFJJTlRLKFBST0JFLCBFUlIsCisJCSAiVW5hYmxlIHRvIGFsbG9jYXRlIHRyYW5zbWl0IGRlc2NyaXB0b3IgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldCh0eGRyLT5kZXNjLCAwLCB0eGRyLT5zaXplKTsKQEAgLTc1MCw2ICs3NTcsOCBAQAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JfYnVmZmVyKSAqIHJ4ZHItPmNvdW50OwogCXJ4ZHItPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZighcnhkci0+YnVmZmVyX2luZm8pIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSByZWNlaXZlIGRlc2NyaXB0b3IgcmluZ1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQocnhkci0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwpAQCAtNzYzLDYgKzc3Miw4IEBACiAKIAlpZighcnhkci0+ZGVzYykgewogCQl2ZnJlZShyeGRyLT5idWZmZXJfaW5mbyk7CisJCURQUklOVEsoUFJPQkUsIEVSUiwKKwkJICJVbmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9yc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQocnhkci0+ZGVzYywgMCwgcnhkci0+c2l6ZSk7CkBAIC03OTQsMjEgKzgwNSwxNCBAQAogCiAJcmN0bCB8PSBJWEdCX1JDVExfU0VDUkM7CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pIHsKLQljYXNlIElYR0JfUlhCVUZGRVJfMjA0ODoKLQlkZWZhdWx0OgorCWlmIChhZGFwdGVyLT5yeF9idWZmZXJfbGVuIDw9IElYR0JfUlhCVUZGRVJfMjA0OCkKIAkJcmN0bCB8PSBJWEdCX1JDVExfQlNJWkVfMjA0ODsKLQkJYnJlYWs7Ci0JY2FzZSBJWEdCX1JYQlVGRkVSXzQwOTY6CisJZWxzZSBpZiAoYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA8PSBJWEdCX1JYQlVGRkVSXzQwOTYpCiAJCXJjdGwgfD0gSVhHQl9SQ1RMX0JTSVpFXzQwOTY7Ci0JCWJyZWFrOwotCWNhc2UgSVhHQl9SWEJVRkZFUl84MTkyOgorCWVsc2UgaWYgKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPD0gSVhHQl9SWEJVRkZFUl84MTkyKQogCQlyY3RsIHw9IElYR0JfUkNUTF9CU0laRV84MTkyOwotCQlicmVhazsKLQljYXNlIElYR0JfUlhCVUZGRVJfMTYzODQ6CisJZWxzZSBpZiAoYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA8PSBJWEdCX1JYQlVGRkVSXzE2Mzg0KQogCQlyY3RsIHw9IElYR0JfUkNUTF9CU0laRV8xNjM4NDsKLQkJYnJlYWs7Ci0JfQogCiAJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMLCByY3RsKTsKIH0KQEAgLTg5OCwyMiArOTAyLDI1IEBACiAJYWRhcHRlci0+dHhfcmluZy5kZXNjID0gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogaXhnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJCQlzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlpZihidWZmZXJfaW5mby0+ZG1hKSB7Ci0JCXBjaV91bm1hcF9wYWdlKHBkZXYsCi0JCQkgICBidWZmZXJfaW5mby0+ZG1hLAotCQkJICAgYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKLQl9Ci0JaWYoYnVmZmVyX2luZm8tPnNrYikgeworCisJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpCisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCisJCSAgICAgICAgICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpCiAJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOwotCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKLQl9CisKKwlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwlidWZmZXJfaW5mby0+ZG1hID0gMDsKKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CisJLyogdGhlc2UgZmllbGRzIG11c3QgYWx3YXlzIGJlIGluaXRpYWxpemVkIGluIHR4CisJICogYnVmZmVyX2luZm8tPmxlbmd0aCA9IDA7CisJICogYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSAwOyAqLwogfQogCiAvKioKQEAgLTExMTIsOCArMTExOSw4IEBACiAKIAlpZihhZGFwdGVyLT5ody5saW5rX3VwKSB7CiAJCWlmKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIml4Z2I6ICVzIE5JQyBMaW5rIGlzIFVwICVkIE1icHMgJXNcbiIsCi0JCQkJICAgbmV0ZGV2LT5uYW1lLCAxMDAwMCwgIkZ1bGwgRHVwbGV4Iik7CisJCQlEUFJJTlRLKExJTkssIElORk8sCisJCQkgICAgICAgICJOSUMgTGluayBpcyBVcCAxMDAwMCBNYnBzIEZ1bGwgRHVwbGV4XG4iKTsKIAkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAxMDAwMDsKIAkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gRlVMTF9EVVBMRVg7CiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CkBAIC0xMTIzLDkgKzExMzAsNyBAQAogCQlpZihuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOwogCQkJYWRhcHRlci0+bGlua19kdXBsZXggPSAwOwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSAgICJpeGdiOiAlcyBOSUMgTGluayBpcyBEb3duXG4iLAotCQkJCSAgIG5ldGRldi0+bmFtZSk7CisJCQlEUFJJTlRLKExJTkssIElORk8sICJOSUMgTGluayBpcyBEb3duXG4iKTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKQEAgLTExNTgsNyArMTE2Myw3IEBACiAjZGVmaW5lIElYR0JfVFhfRkxBR1NfVkxBTgkJMHgwMDAwMDAwMgogI2RlZmluZSBJWEdCX1RYX0ZMQUdTX1RTTwkJMHgwMDAwMDAwNAogCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogaXhnYl90c28oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKICNpZmRlZiBORVRJRl9GX1RTTwpAQCAtMTIyMCw3ICsxMjI1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBib29sZWFuX3QKK3N0YXRpYyBib29sZWFuX3QKIGl4Z2JfdHhfY3N1bShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpeGdiX2NvbnRleHRfZGVzYyAqY29udGV4dF9kZXNjOwpAQCAtMTI1OCw3ICsxMjYzLDcgQEAKICNkZWZpbmUgSVhHQl9NQVhfVFhEX1BXUgkxNAogI2RlZmluZSBJWEdCX01BWF9EQVRBX1BFUl9UWEQJKDE8PElYR0JfTUFYX1RYRF9QV1IpCiAKLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBpeGdiX3R4X21hcChzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICB1bnNpZ25lZCBpbnQgZmlyc3QpCiB7CkBAIC0xMjg0LDYgKzEyODksNyBAQAogCQkJCXNpemUsCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSAwOwogCiAJCWxlbiAtPSBzaXplOwogCQlvZmZzZXQgKz0gc2l6ZTsKQEAgLTEzMDksNiArMTMxNSw3IEBACiAJCQkJCXNpemUsCiAJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSAwOwogCiAJCQlsZW4gLT0gc2l6ZTsKIAkJCW9mZnNldCArPSBzaXplOwpAQCAtMTMyMyw3ICsxMzMwLDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGl4Z2JfdHhfcXVldWUoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwgaW50IGNvdW50LCBpbnQgdmxhbl9pZCxpbnQgdHhfZmxhZ3MpCiB7CiAJc3RydWN0IGl4Z2JfZGVzY19yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmc7CkBAIC0xMzk1LDEzICsxNDAyLDI2IEBACiAJCXJldHVybiAwOwogCX0KIAorI2lmZGVmIE5FVElGX0ZfTExUWAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoIXNwaW5fdHJ5bG9jaygmYWRhcHRlci0+dHhfbG9jaykpIHsKKwkJLyogQ29sbGlzaW9uIC0gdGVsbCB1cHBlciBsYXllciB0byByZXF1ZXVlICovCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CisJfQorI2Vsc2UKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOworI2VuZGlmCisKIAlpZih1bmxpa2VseShJWEdCX0RFU0NfVU5VU0VEKCZhZGFwdGVyLT50eF9yaW5nKSA8IERFU0NfTkVFREVEKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CisKKyNpZm5kZWYgTkVUSUZfRl9MTFRYCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOworI2VuZGlmCiAKIAlpZihhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19WTEFOOwpAQCAtMTQxMywxMCArMTQzMywxMyBAQAogCXRzbyA9IGl4Z2JfdHNvKGFkYXB0ZXIsIHNrYik7CiAJaWYgKHRzbyA8IDApIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKyNpZmRlZiBORVRJRl9GX0xMVFgKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOworI2VuZGlmCiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0JaWYgKHRzbykKKwlpZiAobGlrZWx5KHRzbykpCiAJCXR4X2ZsYWdzIHw9IElYR0JfVFhfRkxBR1NfVFNPOwogCWVsc2UgaWYoaXhnYl90eF9jc3VtKGFkYXB0ZXIsIHNrYikpCiAJCXR4X2ZsYWdzIHw9IElYR0JfVFhfRkxBR1NfQ1NVTTsKQEAgLTE0MjYsNyArMTQ0OSwxNSBAQAogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKyNpZmRlZiBORVRJRl9GX0xMVFgKKwkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJaWYodW5saWtlbHkoSVhHQl9ERVNDX1VOVVNFRCgmYWRhcHRlci0+dHhfcmluZykgPCBERVNDX05FRURFRCkpCisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X2xvY2ssIGZsYWdzKTsKKworI2VuZGlmCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqCkBAIC0xNDQ4LDYgKzE0NzksNyBAQAogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCisJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOwogCWl4Z2JfZG93bihhZGFwdGVyLCBUUlVFKTsKIAlpeGdiX3VwKGFkYXB0ZXIpOwogfQpAQCAtMTQ4NiwyOCArMTUxOCwxNSBAQAogCiAJaWYoKG1heF9mcmFtZSA8IElYR0JfTUlOX0VORVRfRlJBTUVfU0laRV9XSVRIT1VUX0ZDUyArIEVORVRfRkNTX0xFTkdUSCkKIAkgICB8fCAobWF4X2ZyYW1lID4gSVhHQl9NQVhfSlVNQk9fRlJBTUVfU0laRSArIEVORVRfRkNTX0xFTkdUSCkpIHsKLQkJSVhHQl9FUlIoIkludmFsaWQgTVRVIHNldHRpbmdcbiIpOworCQlEUFJJTlRLKFBST0JFLCBFUlIsICJJbnZhbGlkIE1UVSBzZXR0aW5nICVkXG4iLCBuZXdfbXR1KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYoKG1heF9mcmFtZSA8PSBJWEdCX01BWF9FTkVUX0ZSQU1FX1NJWkVfV0lUSE9VVF9GQ1MgKyBFTkVUX0ZDU19MRU5HVEgpCi0JICAgfHwgKG1heF9mcmFtZSA8PSBJWEdCX1JYQlVGRkVSXzIwNDgpKSB7Ci0JCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBJWEdCX1JYQlVGRkVSXzIwNDg7Ci0KLQl9IGVsc2UgaWYobWF4X2ZyYW1lIDw9IElYR0JfUlhCVUZGRVJfNDA5NikgewotCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSVhHQl9SWEJVRkZFUl80MDk2OwotCi0JfSBlbHNlIGlmKG1heF9mcmFtZSA8PSBJWEdCX1JYQlVGRkVSXzgxOTIpIHsKLQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IElYR0JfUlhCVUZGRVJfODE5MjsKLQotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBJWEdCX1JYQlVGRkVSXzE2Mzg0OwotCX0KKwlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gbWF4X2ZyYW1lOwogCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCi0JaWYob2xkX21heF9mcmFtZSAhPSBtYXhfZnJhbWUgJiYgbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0KKwlpZiAoKG9sZF9tYXhfZnJhbWUgIT0gbWF4X2ZyYW1lKSAmJiBuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJaXhnYl9kb3duKGFkYXB0ZXIsIFRSVUUpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwogCX0KQEAgLTE3NjUsMjMgKzE3ODQsNDMgQEAKIAogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKLQlpZihjbGVhbmVkICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKLQkgICAoSVhHQl9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+IElYR0JfVFhfUVVFVUVfV0FLRSkpIHsKLQotCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkpIHsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKKwkJICAgIChJWEdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID4gSVhHQl9UWF9RVUVVRV9XQUtFKSkKKwkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfbG9jayk7CiAKIAlpZihhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgewogCQkvKiBkZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBGQUxTRTsKLQkJaWYodHhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hICYmCi0JCSAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCArIEhaKQorCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS5kbWEgJiYKKwkJICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgKyBIWikKIAkJICAgJiYgIShJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmCi0JCQlJWEdCX1NUQVRVU19UWE9GRikpCisJCSAgICAgICAgSVhHQl9TVEFUVVNfVFhPRkYpKSB7CisJCQkvKiBkZXRlY3RlZCBUeCB1bml0IGhhbmcgKi8KKwkJCURQUklOVEsoRFJWLCBFUlIsICJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKKwkJCQkJIiAgVERIICAgICAgICAgICAgICAgICAgPCV4PlxuIgorCQkJCQkiICBURFQgICAgICAgICAgICAgICAgICA8JXg+XG4iCisJCQkJCSIgIG5leHRfdG9fdXNlICAgICAgICAgIDwleD5cbiIKKwkJCQkJIiAgbmV4dF90b19jbGVhbiAgICAgICAgPCV4PlxuIgorCQkJCQkiYnVmZmVyX2luZm9bbmV4dF90b19jbGVhbl1cbiIKKwkJCQkJIiAgdGltZV9zdGFtcCAgICAgICAgICAgPCVseD5cbiIKKwkJCQkJIiAgbmV4dF90b193YXRjaCAgICAgICAgPCV4PlxuIgorCQkJCQkiICBqaWZmaWVzICAgICAgICAgICAgICA8JWx4PlxuIgorCQkJCQkiICBuZXh0X3RvX3dhdGNoLnN0YXR1cyA8JXg+XG4iLAorCQkJCUlYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBUREgpLAorCQkJCUlYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBURFQpLAorCQkJCXR4X3JpbmctPm5leHRfdG9fdXNlLAorCQkJCXR4X3JpbmctPm5leHRfdG9fY2xlYW4sCisJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wLAorCQkJCWVvcCwKKwkJCQlqaWZmaWVzLAorCQkJCWVvcF9kZXNjLT5zdGF0dXMpOwogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQl9CiAJfQogCiAJcmV0dXJuIGNsZWFuZWQ7CkBAIC0xNzk0LDcgKzE4MzMsNyBAQAogICogQHNrX2J1ZmY6IHNvY2tldCBidWZmZXIgd2l0aCByZWNlaXZlZCBkYXRhCiAgKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGl4Z2JfcnhfY2hlY2tzdW0oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwKIAkJIHN0cnVjdCBpeGdiX3J4X2Rlc2MgKnJ4X2Rlc2MsCiAJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTg1OCw2ICsxODk3LDcgQEAKICNlbmRpZgogCQlzdGF0dXMgPSByeF9kZXNjLT5zdGF0dXM7CiAJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCiAJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAKQEAgLTE5MDIsNiArMTk0MiwyNiBAQAogCQkJZ290byByeGRlc2NfZG9uZTsKIAkJfQogCisJCS8qIGNvZGUgYWRkZWQgZm9yIGNvcHlicmVhaywgdGhpcyBzaG91bGQgaW1wcm92ZQorCQkgKiBwZXJmb3JtYW5jZSBmb3Igc21hbGwgcGFja2V0cyB3aXRoIGxhcmdlIGFtb3VudHMKKwkJICogb2YgcmVhc3NlbWJseSBiZWluZyBkb25lIGluIHRoZSBzdGFjayAqLworI2RlZmluZSBJWEdCX0NCX0xFTkdUSCAyNTYKKwkJaWYgKGxlbmd0aCA8IElYR0JfQ0JfTEVOR1RIKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9CisJCQkgICAgZGV2X2FsbG9jX3NrYihsZW5ndGggKyBORVRfSVBfQUxJR04pOworCQkJaWYgKG5ld19za2IpIHsKKwkJCQlza2JfcmVzZXJ2ZShuZXdfc2tiLCBORVRfSVBfQUxJR04pOworCQkJCW5ld19za2ItPmRldiA9IG5ldGRldjsKKwkJCQltZW1jcHkobmV3X3NrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTiwKKwkJCQkgICAgICAgc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOLAorCQkJCSAgICAgICBsZW5ndGggKyBORVRfSVBfQUxJR04pOworCQkJCS8qIHNhdmUgdGhlIHNrYiBpbiBidWZmZXJfaW5mbyBhcyBnb29kICovCisJCQkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKKwkJCQlza2IgPSBuZXdfc2tiOworCQkJfQorCQl9CisJCS8qIGVuZCBjb3B5YnJlYWsgY29kZSAqLworCiAJCS8qIEdvb2QgUmVjZWl2ZSAqLwogCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIApAQCAtMTkzMSw3ICsxOTkxLDYgQEAKIHJ4ZGVzY19kb25lOgogCQkvKiBjbGVhbiB1cCBkZXNjcmlwdG9yLCBtaWdodCBiZSB3cml0dGVuIG92ZXIgYnkgaHcgKi8KIAkJcnhfZGVzYy0+c3RhdHVzID0gMDsKLQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAKIAkJLyogdXNlIHByZWZldGNoZWQgdmFsdWVzICovCiAJCXJ4X2Rlc2MgPSBuZXh0X3J4ZDsKQEAgLTE5NzEsMTIgKzIwMzAsMTggQEAKIAogCS8qIGxlYXZlIHRocmVlIGRlc2NyaXB0b3JzIHVudXNlZCAqLwogCXdoaWxlKC0tY2xlYW5jb3VudCA+IDIpIHsKLQkJcnhfZGVzYyA9IElYR0JfUlhfREVTQygqcnhfcmluZywgaSk7CisJCS8qIHJlY3ljbGUhIGl0cyBnb29kIGZvciB5b3UgKi8KKwkJaWYgKCEoc2tiID0gYnVmZmVyX2luZm8tPnNrYikpCisJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4KKwkJCSAgICAgICAgICAgICAgICAgICAgKyBORVRfSVBfQUxJR04pOworCQllbHNlIHsKKwkJCXNrYl90cmltKHNrYiwgMCk7CisJCQlnb3RvIG1hcF9za2I7CisJCX0KIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gKyBORVRfSVBfQUxJR04pOwotCi0JCWlmKHVubGlrZWx5KCFza2IpKSB7CisJCWlmICh1bmxpa2VseSghc2tiKSkgewogCQkJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZCAqLworCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE5OTAsMzMgKzIwNTUsMzYgQEAKIAogCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOwogCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKLQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQlwY2lfbWFwX3NpbmdsZShwZGV2LAotCQkJCSAgIHNrYi0+ZGF0YSwKLQkJCQkgICBhZGFwdGVyLT5yeF9idWZmZXJfbGVuLAotCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7CittYXBfc2tiOgorCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYi0+ZGF0YSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCisJCXJ4X2Rlc2MgPSBJWEdCX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOwogCQlyeF9kZXNjLT5idWZmX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKIAkJLyogZ3VhcmFudGVlIEREIGJpdCBub3Qgc2V0IG5vdyBiZWZvcmUgaC93IGdldHMgZGVzY3JpcHRvcgogCQkgKiB0aGlzIGlzIHRoZSByZXN0IG9mIHRoZSB3b3JrYXJvdW5kIGZvciBoL3cgZG91YmxlIAogCQkgKiB3cml0ZWJhY2suICovCiAJCXJ4X2Rlc2MtPnN0YXR1cyA9IDA7CiAKLQkJaWYoKGkgJiB+KG51bV9ncm91cF90YWlsX3dyaXRlcy0gMSkpID09IGkpIHsKLQkJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93Ci0JCQkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQotCQkJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKLQkJCSAqIHN1Y2ggYXMgSUEtNjQpLiAqLwotCQkJd21iKCk7Ci0KLQkJCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkRULCBpKTsKLQkJfQogCiAJCWlmKCsraSA9PSByeF9yaW5nLT5jb3VudCkgaSA9IDA7CiAJCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCX0KIAotCXJ4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKwlpZiAobGlrZWx5KHJ4X3JpbmctPm5leHRfdG9fdXNlICE9IGkpKSB7CisJCXJ4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKwkJaWYgKHVubGlrZWx5KGktLSA9PSAwKSkKKwkJCWkgPSAocnhfcmluZy0+Y291bnQgLSAxKTsKKworCQkvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdworCQkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCQkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLCBzdWNoCisJCSAqIGFzIElBLTY0KS4gKi8KKwkJd21iKCk7CisJCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkRULCBpKTsKKwl9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX29zZGVwLmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2Jfb3NkZXAuaAppbmRleCBkYmEyMDQ4Li5lZTk4MmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2Jfb3NkZXAuaAorKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2Jfb3NkZXAuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfcGFyYW0uYwppbmRleCA4YTgzZGZkLi4zOWZiZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfcGFyYW0uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfcGFyYW0uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtNzYsNyArNzYsNyBAQAogICogIC0gMiAtIFR4IG9ubHksIGdlbmVyYXRlIFBBVVNFIGZyYW1lcyBidXQgaWdub3JlIHRoZW0gb24gcmVjZWl2ZQogICogIC0gMyAtIEZ1bGwgRmxvdyBDb250cm9sIFN1cHBvcnQKICAqCi0gKiBEZWZhdWx0IFZhbHVlOiBSZWFkIGZsb3cgY29udHJvbCBzZXR0aW5ncyBmcm9tIHRoZSBFRVBST00KKyAqIERlZmF1bHQgVmFsdWU6IDIgLSBUeCBvbmx5IChzaWxpY29uIGJ1ZyBhdm9pZGFuY2UpCiAgKi8KIAogSVhHQl9QQVJBTShGbG93Q29udHJvbCwgIkZsb3cgQ29udHJvbCBzZXR0aW5nIik7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAqCiAgKiBWYWxpZCBSYW5nZTogMSAtIDY1NTM1IAogICoKLSAqIERlZmF1bHQgVmFsdWU6ICAyNTYgKDB4MTAwKQorICogRGVmYXVsdCBWYWx1ZTogIDY1NTM1ICgweGZmZmYpICh3ZSdsbCBzZW5kIGFuIHhvbiBpZiB3ZSByZWNvdmVyKQogICovCiAKIElYR0JfUEFSQU0oRkNSZXFUaW1lb3V0LCAiRmxvdyBDb250cm9sIFJlcXVlc3QgVGltZW91dCIpOwpAQCAtMTY1LDggKzE2NSw2IEBACiAKICNkZWZpbmUgWFNVTVJYX0RFRkFVTFQJCSBPUFRJT05fRU5BQkxFRAogCi0jZGVmaW5lIEZMT1dfQ09OVFJPTF9GVUxMCSAgIGl4Z2JfZmNfZnVsbAotI2RlZmluZSBGTE9XX0NPTlRST0xfREVGQVVMVCAgRkxPV19DT05UUk9MX0ZVTEwKICNkZWZpbmUgREVGQVVMVF9GQ1JUTAkgIAkJMHgyODAwMAogI2RlZmluZSBERUZBVUxUX0ZDUlRICQkJMHgzMDAwMAogI2RlZmluZSBNSU5fRkNSVEwJCQkgICAgICAwCkBAIC0xNzQsOSArMTcyLDkgQEAKICNkZWZpbmUgTUlOX0ZDUlRICQkJICAgICAgOAogI2RlZmluZSBNQVhfRkNSVEgJCQkweDNGRkYwCiAKLSNkZWZpbmUgREVGQVVMVF9GQ1BBVVNFCQkgIAkweDEwMAkvKiB0aGlzIG1heSBiZSB0b28gbG9uZyAqLwogI2RlZmluZSBNSU5fRkNQQVVTRQkJCSAgICAgIDEKICNkZWZpbmUgTUFYX0ZDUEFVU0UJCQkgMHhmZmZmCisjZGVmaW5lIERFRkFVTFRfRkNQQVVTRQkJICAJIDB4RkZGRiAvKiB0aGlzIG1heSBiZSB0b28gbG9uZyAqLwogCiBzdHJ1Y3QgaXhnYl9vcHRpb24gewogCWVudW0geyBlbmFibGVfb3B0aW9uLCByYW5nZV9vcHRpb24sIGxpc3Rfb3B0aW9uIH0gdHlwZTsKQEAgLTMzNiw3ICszMzQsNyBAQAogCQkJLnR5cGUgPSBsaXN0X29wdGlvbiwKIAkJCS5uYW1lID0gIkZsb3cgQ29udHJvbCIsCiAJCQkuZXJyICA9ICJyZWFkaW5nIGRlZmF1bHQgc2V0dGluZ3MgZnJvbSBFRVBST00iLAotCQkJLmRlZiAgPSBpeGdiX2ZjX2Z1bGwsCisJCQkuZGVmICA9IGl4Z2JfZmNfdHhfcGF1c2UsCiAJCQkuYXJnICA9IHsgLmwgPSB7IC5uciA9IExJU1RfTEVOKGZjX2xpc3QpLAogCQkJCQkgLnAgPSBmY19saXN0IH19CiAJCX07CkBAIC0zNjUsOCArMzYzLDggQEAKIAkJfSBlbHNlIHsKIAkJCWFkYXB0ZXItPmh3LmZjLmhpZ2hfd2F0ZXIgPSBvcHQuZGVmOwogCQl9Ci0JCWlmKCEoYWRhcHRlci0+aHcuZmMudHlwZSAmIGl4Z2JfZmNfcnhfcGF1c2UpICkKLQkJCXByaW50ayAoS0VSTl9JTkZPIAorCQlpZiAoIShhZGFwdGVyLT5ody5mYy50eXBlICYgaXhnYl9mY190eF9wYXVzZSkgKQorCQkJcHJpbnRrIChLRVJOX0lORk8KIAkJCQkiSWdub3JpbmcgUnhGQ0hpZ2hUaHJlc2ggd2hlbiBubyBSeEZDXG4iKTsKIAl9CiAJeyAvKiBSZWNlaXZlIEZsb3cgQ29udHJvbCBMb3cgVGhyZXNob2xkICovCkBAIC0zODUsOCArMzgzLDggQEAKIAkJfSBlbHNlIHsKIAkJCWFkYXB0ZXItPmh3LmZjLmxvd193YXRlciA9IG9wdC5kZWY7CiAJCX0KLQkJaWYoIShhZGFwdGVyLT5ody5mYy50eXBlICYgaXhnYl9mY19yeF9wYXVzZSkgKQotCQkJcHJpbnRrIChLRVJOX0lORk8gCisJCWlmICghKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3R4X3BhdXNlKSApCisJCQlwcmludGsgKEtFUk5fSU5GTwogCQkJCSJJZ25vcmluZyBSeEZDTG93VGhyZXNoIHdoZW4gbm8gUnhGQ1xuIik7CiAJfQogCXsgLyogRmxvdyBDb250cm9sIFBhdXNlIFRpbWUgUmVxdWVzdCovCkBAIC00MDYsMTIgKzQwNCwxMiBAQAogCQl9IGVsc2UgewogCQkJYWRhcHRlci0+aHcuZmMucGF1c2VfdGltZSA9IG9wdC5kZWY7CiAJCX0KLQkJaWYoIShhZGFwdGVyLT5ody5mYy50eXBlICYgaXhnYl9mY19yeF9wYXVzZSkgKQotCQkJcHJpbnRrIChLRVJOX0lORk8gCisJCWlmICghKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3R4X3BhdXNlKSApCisJCQlwcmludGsgKEtFUk5fSU5GTwogCQkJCSJJZ25vcmluZyBGQ1JlcVRpbWVvdXQgd2hlbiBubyBSeEZDXG4iKTsKIAl9CiAJLyogaGlnaCBsb3cgYW5kIHNwYWNpbmcgY2hlY2sgZm9yIHJ4IGZsb3cgY29udHJvbCB0aHJlc2hvbGRzICovCi0JaWYgKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3J4X3BhdXNlKSB7CisJaWYgKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3R4X3BhdXNlKSB7CiAJCS8qIGhpZ2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gbG93ICovCiAJCWlmIChhZGFwdGVyLT5ody5mYy5oaWdoX3dhdGVyIDwgKGFkYXB0ZXItPmh3LmZjLmxvd193YXRlciArIDgpKSB7CiAJCQkvKiBzZXQgZGVmYXVsdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDQxMWY0ZDguLjYyNWZmNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMTIwMCw3ICsxMjAwLDcgQEAKIAl9CiAKIAlpZiAoaGFzX3RpbnlfdW5hbGlnbmVkX2ZyYWdzKHNrYikpIHsKLQkJaWYgKChza2JfbGluZWFyaXplKHNrYiwgR0ZQX0FUT01JQykgIT0gMCkpIHsKKwkJaWYgKF9fc2tiX2xpbmVhcml6ZShza2IpKSB7CiAJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gbGluZWFyaXplIHRpbnkgIgogCQkJCQkidW5hbGlnbmVkIGZyYWdtZW50XG4iLCBkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY4OTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTXlyaWNvbSBNeXJpLTEwRyBldGhlcm5ldCBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX01ZUkkxMEdFKSArPSBteXJpMTBnZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWZlYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtMCwwICsxLDI4NjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBteXJpMTBnZS5jOiBNeXJpY29tIE15cmktMTBHIEV0aGVybmV0IGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTXlyaWNvbSwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTXlyaWNvbSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKgorICogSWYgdGhlIGVlcHJvbSBvbiB5b3VyIGJvYXJkIGlzIG5vdCByZWNlbnQgZW5vdWdoLCB5b3Ugd2lsbCBuZWVkIHRvIGdldCBhCisgKiBuZXdlciBmaXJtd2FyZSBpbWFnZSBhdDoKKyAqICAgaHR0cDovL3d3dy5teXJpLmNvbS9zY3MvZG93bmxvYWQtTXlyaTEwR0UuaHRtbAorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgIDxoZWxwQG15cmkuY29tPgorICogICBNeXJpY29tLCBJbmMuLCAzMjVOIFNhbnRhIEFuaXRhIEF2ZW51ZSwgQXJjYWRpYSwgQ0EgOTEwMDYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpZmRlZiBDT05GSUdfTVRSUgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm15cmkxMGdlX21jcC5oIgorI2luY2x1ZGUgIm15cmkxMGdlX21jcF9nZW5faGVhZGVyLmgiCisKKyNkZWZpbmUgTVlSSTEwR0VfVkVSU0lPTl9TVFIgIjEuMC4wIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIk15cmljb20gMTBHIGRyaXZlciAoMTBHYkUpIik7CitNT0RVTEVfQVVUSE9SKCJNYWludGFpbmVyOiBoZWxwQG15cmkuY29tIik7CitNT0RVTEVfVkVSU0lPTihNWVJJMTBHRV9WRVJTSU9OX1NUUik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKKyNkZWZpbmUgTVlSSTEwR0VfTUFYX0VUSEVSX01UVSA5MDE0CisKKyNkZWZpbmUgTVlSSTEwR0VfRVRIX1NUT1BQRUQgMAorI2RlZmluZSBNWVJJMTBHRV9FVEhfU1RPUFBJTkcgMQorI2RlZmluZSBNWVJJMTBHRV9FVEhfU1RBUlRJTkcgMgorI2RlZmluZSBNWVJJMTBHRV9FVEhfUlVOTklORyAzCisjZGVmaW5lIE1ZUkkxMEdFX0VUSF9PUEVOX0ZBSUxFRCA0CisKKyNkZWZpbmUgTVlSSTEwR0VfRUVQUk9NX1NUUklOR1NfU0laRSAyNTYKKyNkZWZpbmUgTVlSSTEwR0VfTUFYX1NFTkRfREVTQ19UU08gKCg2NTUzNiAvIDIwNDgpICogMikKKworI2RlZmluZSBNWVJJMTBHRV9OT19DT05GSVJNX0RBVEEgMHhmZmZmZmZmZgorI2RlZmluZSBNWVJJMTBHRV9OT19SRVNQT05TRV9SRVNVTFQgMHhmZmZmZmZmZgorCitzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmZmVyX3N0YXRlIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKGJ1cykKKwkgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKGxlbikKK307CisKK3N0cnVjdCBteXJpMTBnZV90eF9idWZmZXJfc3RhdGUgeworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGxhc3Q7CisJIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoYnVzKQorCSBERUNMQVJFX1BDSV9VTk1BUF9MRU4obGVuKQorfTsKKworc3RydWN0IG15cmkxMGdlX2NtZCB7CisJdTMyIGRhdGEwOworCXUzMiBkYXRhMTsKKwl1MzIgZGF0YTI7Cit9OworCitzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmIHsKKwlzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiBfX2lvbWVtICpsYW5haTsJLyogbGFuYWkgcHRyIGZvciByZWN2IHJpbmcgKi8KKwl1OCBfX2lvbWVtICp3Y19maWZvOwkvKiB3L2MgcnggZG1hIGFkZHIgZmlmbyBhZGRyZXNzICovCisJc3RydWN0IG1jcF9rcmVxX2V0aGVyX3JlY3YgKnNoYWRvdzsJLyogaG9zdCBzaGFkb3cgb2YgcmVjdiByaW5nICovCisJc3RydWN0IG15cmkxMGdlX3J4X2J1ZmZlcl9zdGF0ZSAqaW5mbzsKKwlpbnQgY250OworCWludCBhbGxvY19mYWlsOworCWludCBtYXNrOwkJLyogbnVtYmVyIG9mIHJ4IHNsb3RzIC0xICovCit9OworCitzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmIHsKKwlzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCBfX2lvbWVtICpsYW5haTsJLyogbGFuYWkgcHRyIGZvciBzZW5kcSAqLworCXU4IF9faW9tZW0gKndjX2ZpZm87CS8qIHcvYyBzZW5kIGZpZm8gYWRkcmVzcyAqLworCXN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kICpyZXFfbGlzdDsJLyogaG9zdCBzaGFkb3cgb2Ygc2VuZHEgKi8KKwljaGFyICpyZXFfYnl0ZXM7CisJc3RydWN0IG15cmkxMGdlX3R4X2J1ZmZlcl9zdGF0ZSAqaW5mbzsKKwlpbnQgbWFzazsJCS8qIG51bWJlciBvZiB0cmFuc21pdCBzbG90cyAtMSAgKi8KKwlpbnQgYm91bmRhcnk7CQkvKiBib3VuZGFyeSB0cmFuc21pdHMgY2Fubm90IGNyb3NzICovCisJaW50IHJlcSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CS8qIHRyYW5zbWl0IHNsb3RzIHN1Ym1pdHRlZCAgICAgKi8KKwlpbnQgcGt0X3N0YXJ0OwkJLyogcGFja2V0cyBzdGFydGVkICovCisJaW50IGRvbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkOwkvKiB0cmFuc21pdCBzbG90cyBjb21wbGV0ZWQgICAgICovCisJaW50IHBrdF9kb25lOwkJLyogcGFja2V0cyBjb21wbGV0ZWQgKi8KK307CisKK3N0cnVjdCBteXJpMTBnZV9yeF9kb25lIHsKKwlzdHJ1Y3QgbWNwX3Nsb3QgKmVudHJ5OworCWRtYV9hZGRyX3QgYnVzOworCWludCBjbnQ7CisJaW50IGlkeDsKK307CisKK3N0cnVjdCBteXJpMTBnZV9wcml2IHsKKwlpbnQgcnVubmluZzsJCS8qIHJ1bm5pbmc/ICAgICAgICAgICAgICovCisJaW50IGNzdW1fZmxhZzsJCS8qIHJ4X2NzdW1zPyAgICAgICAgICAgICovCisJc3RydWN0IG15cmkxMGdlX3R4X2J1ZiB0eDsJLyogdHJhbnNtaXQgcmluZyAgICAgICAgKi8KKwlzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmIHJ4X3NtYWxsOworCXN0cnVjdCBteXJpMTBnZV9yeF9idWYgcnhfYmlnOworCXN0cnVjdCBteXJpMTBnZV9yeF9kb25lIHJ4X2RvbmU7CisJaW50IHNtYWxsX2J5dGVzOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJdTggX19pb21lbSAqc3JhbTsKKwlpbnQgc3JhbV9zaXplOworCXVuc2lnbmVkIGxvbmcgYm9hcmRfc3BhbjsKKwl1bnNpZ25lZCBsb25nIGlvbWVtX2Jhc2U7CisJdTMyIF9faW9tZW0gKmlycV9jbGFpbTsKKwl1MzIgX19pb21lbSAqaXJxX2RlYXNzZXJ0OworCWNoYXIgKm1hY19hZGRyX3N0cmluZzsKKwlzdHJ1Y3QgbWNwX2NtZF9yZXNwb25zZSAqY21kOworCWRtYV9hZGRyX3QgY21kX2J1czsKKwlzdHJ1Y3QgbWNwX2lycV9kYXRhICpmd19zdGF0czsKKwlkbWFfYWRkcl90IGZ3X3N0YXRzX2J1czsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlpbnQgbXNpX2VuYWJsZWQ7CisJdW5zaWduZWQgaW50IGxpbmtfc3RhdGU7CisJdW5zaWduZWQgaW50IHJkbWFfdGFnc19hdmFpbGFibGU7CisJaW50IGludHJfY29hbF9kZWxheTsKKwl1MzIgX19pb21lbSAqaW50cl9jb2FsX2RlbGF5X3B0cjsKKwlpbnQgbXRycjsKKwlpbnQgd2FrZV9xdWV1ZTsKKwlpbnQgc3RvcF9xdWV1ZTsKKwlpbnQgZG93bl9jbnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZG93bl93cTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKwlpbnQgd2F0Y2hkb2dfdHhfZG9uZTsKKwlpbnQgd2F0Y2hkb2dfcmVzZXRzOworCWludCB0eF9saW5lYXJpemVkOworCWludCBwYXVzZTsKKwljaGFyICpmd19uYW1lOworCWNoYXIgZWVwcm9tX3N0cmluZ3NbTVlSSTEwR0VfRUVQUk9NX1NUUklOR1NfU0laRV07CisJY2hhciBmd192ZXJzaW9uWzEyOF07CisJdTggbWFjX2FkZHJbNl07CQkvKiBlZXByb20gbWFjIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIHNlcmlhbF9udW1iZXI7CisJaW50IHZlbmRvcl9zcGVjaWZpY19vZmZzZXQ7CisJdTMyIGRldmN0bDsKKwl1MTYgbXNpX2ZsYWdzOworCXUzMiBwbV9zdGF0ZVsxNl07CisJdTMyIHJlYWRfZG1hOworCXUzMiB3cml0ZV9kbWE7CisJdTMyIHJlYWRfd3JpdGVfZG1hOworfTsKKworc3RhdGljIGNoYXIgKm15cmkxMGdlX2Z3X3VuYWxpZ25lZCA9ICJteXJpMTBnZV9ldGhwX3o4ZS5kYXQiOworc3RhdGljIGNoYXIgKm15cmkxMGdlX2Z3X2FsaWduZWQgPSAibXlyaTEwZ2VfZXRoX3o4ZS5kYXQiOworCitzdGF0aWMgY2hhciAqbXlyaTEwZ2VfZndfbmFtZSA9IE5VTEw7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2VfZndfbmFtZSwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfZndfbmFtZSwgIkZpcm13YXJlIGltYWdlIG5hbWVcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX2VjcmNfZW5hYmxlID0gMTsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9lY3JjX2VuYWJsZSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfZWNyY19lbmFibGUsICJFbmFibGUgRXh0ZW5kZWQgQ1JDIG9uIFBDSS1FXG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9tYXhfaW50cl9zbG90cyA9IDEwMjQ7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2VfbWF4X2ludHJfc2xvdHMsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX21heF9pbnRyX3Nsb3RzLCAiSW50ZXJydXB0IHF1ZXVlIHNsb3RzXG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9zbWFsbF9ieXRlcyA9IC0xOwkvKiAtMSA9PSBhdXRvICovCittb2R1bGVfcGFyYW0obXlyaTEwZ2Vfc21hbGxfYnl0ZXMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9zbWFsbF9ieXRlcywgIlRocmVzaG9sZCBvZiBzbWFsbCBwYWNrZXRzXG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9tc2kgPSAxOwkvKiBlbmFibGUgbXNpIGJ5IGRlZmF1bHQgKi8KK21vZHVsZV9wYXJhbShteXJpMTBnZV9tc2ksIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX21zaSwgIkVuYWJsZSBNZXNzYWdlIFNpZ25hbGxlZCBJbnRlcnJ1cHRzXG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9pbnRyX2NvYWxfZGVsYXkgPSAyNTsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9pbnRyX2NvYWxfZGVsYXksIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX2ludHJfY29hbF9kZWxheSwgIkludGVycnVwdCBjb2FsZXNjaW5nIGRlbGF5XG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9mbG93X2NvbnRyb2wgPSAxOworbW9kdWxlX3BhcmFtKG15cmkxMGdlX2Zsb3dfY29udHJvbCwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfZmxvd19jb250cm9sLCAiUGF1c2UgcGFyYW1ldGVyXG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9kZWFzc2VydF93YWl0ID0gMTsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9kZWFzc2VydF93YWl0LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfZGVhc3NlcnRfd2FpdCwKKwkJICJXYWl0IHdoZW4gZGVhc3NlcnRpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX2ZvcmNlX2Zpcm13YXJlID0gMDsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9mb3JjZV9maXJtd2FyZSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfZm9yY2VfZmlybXdhcmUsCisJCSAiRm9yY2UgZmlybXdhcmUgdG8gYXNzdW1lIGFsaWduZWQgY29tcGxldGlvbnNcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX3NrYl9jcm9zc180ayA9IDA7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2Vfc2tiX2Nyb3NzXzRrLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2Vfc2tiX2Nyb3NzXzRrLAorCQkgIkNhbiBhIHNtYWxsIHNrYiBjcm9zcyBhIDRLQiBib3VuZGFyeT9cbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX2luaXRpYWxfbXR1ID0gTVlSSTEwR0VfTUFYX0VUSEVSX01UVSAtIEVUSF9ITEVOOworbW9kdWxlX3BhcmFtKG15cmkxMGdlX2luaXRpYWxfbXR1LCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9pbml0aWFsX210dSwgIkluaXRpYWwgTVRVXG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9uYXBpX3dlaWdodCA9IDY0OworbW9kdWxlX3BhcmFtKG15cmkxMGdlX25hcGlfd2VpZ2h0LCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9uYXBpX3dlaWdodCwgIlNldCBOQVBJIHdlaWdodFxuIik7CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2Vfd2F0Y2hkb2dfdGltZW91dCA9IDE7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2Vfd2F0Y2hkb2dfdGltZW91dCwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2Vfd2F0Y2hkb2dfdGltZW91dCwgIlNldCB3YXRjaGRvZyB0aW1lb3V0XG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV9tYXhfaXJxX2xvb3BzID0gMTA0ODU3NjsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9tYXhfaXJxX2xvb3BzLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9tYXhfaXJxX2xvb3BzLAorCQkgIlNldCBzdHVjayBsZWdhY3kgSVJRIGRldGVjdGlvbiB0aHJlc2hvbGRcbiIpOworCisjZGVmaW5lIE1ZUkkxMEdFX0ZXX09GRlNFVCAxMDI0KjEwMjQKKyNkZWZpbmUgTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKFgpIFwKKyhzaXplb2YgKFgpID09IDgpID8gKCh1MzIpKCh1NjQpKFgpID4+IDMyKSkgOiAoMCkKKyNkZWZpbmUgTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIoWCkgKCh1MzIpKFgpKQorCisjZGVmaW5lIG15cmkxMGdlX3Bpb19jb3B5KHRvLGZyb20sc2l6ZSkgX19pb3dyaXRlNjRfY29weSh0byxmcm9tLHNpemUvOCkKKworc3RhdGljIGludAorbXlyaTEwZ2Vfc2VuZF9jbWQoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgdTMyIGNtZCwKKwkJICBzdHJ1Y3QgbXlyaTEwZ2VfY21kICpkYXRhLCBpbnQgYXRvbWljKQoreworCXN0cnVjdCBtY3BfY21kICpidWY7CisJY2hhciBidWZfYnl0ZXNbc2l6ZW9mKCpidWYpICsgOF07CisJc3RydWN0IG1jcF9jbWRfcmVzcG9uc2UgKnJlc3BvbnNlID0gbWdwLT5jbWQ7CisJY2hhciBfX2lvbWVtICpjbWRfYWRkciA9IG1ncC0+c3JhbSArIE1YR0VGV19DTURfT0ZGU0VUOworCXUzMiBkbWFfbG93LCBkbWFfaGlnaCwgcmVzdWx0LCB2YWx1ZTsKKwlpbnQgc2xlZXBfdG90YWwgPSAwOworCisJLyogZW5zdXJlIGJ1ZiBpcyBhbGlnbmVkIHRvIDggYnl0ZXMgKi8KKwlidWYgPSAoc3RydWN0IG1jcF9jbWQgKilBTElHTigodW5zaWduZWQgbG9uZylidWZfYnl0ZXMsIDgpOworCisJYnVmLT5kYXRhMCA9IGh0b25sKGRhdGEtPmRhdGEwKTsKKwlidWYtPmRhdGExID0gaHRvbmwoZGF0YS0+ZGF0YTEpOworCWJ1Zi0+ZGF0YTIgPSBodG9ubChkYXRhLT5kYXRhMik7CisJYnVmLT5jbWQgPSBodG9ubChjbWQpOworCWRtYV9sb3cgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihtZ3AtPmNtZF9idXMpOworCWRtYV9oaWdoID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKG1ncC0+Y21kX2J1cyk7CisKKwlidWYtPnJlc3BvbnNlX2FkZHIubG93ID0gaHRvbmwoZG1hX2xvdyk7CisJYnVmLT5yZXNwb25zZV9hZGRyLmhpZ2ggPSBodG9ubChkbWFfaGlnaCk7CisJcmVzcG9uc2UtPnJlc3VsdCA9IE1ZUkkxMEdFX05PX1JFU1BPTlNFX1JFU1VMVDsKKwltYigpOworCW15cmkxMGdlX3Bpb19jb3B5KGNtZF9hZGRyLCBidWYsIHNpemVvZigqYnVmKSk7CisKKwkvKiB3YWl0IHVwIHRvIDE1bXMuIExvbmdlc3QgY29tbWFuZCBpcyB0aGUgRE1BIGJlbmNobWFyaywKKwkgKiB3aGljaCBpcyBjYXBwZWQgYXQgNW1zLCBidXQgcnVucyBmcm9tIGEgdGltZW91dCBoYW5kbGVyCisJICogdGhhdCBydW5zIGV2ZXJ5IDcuOG1zLiBTbyBhIDE1bXMgdGltZW91dCBsZWF2ZXMgdXMgd2l0aAorCSAqIGEgMi4ybXMgbWFyZ2luCisJICovCisJaWYgKGF0b21pYykgeworCQkvKiBpZiBhdG9taWMgaXMgc2V0LCBkbyBub3Qgc2xlZXAsCisJCSAqIGFuZCB0cnkgdG8gZ2V0IHRoZSBjb21wbGV0aW9uIHF1aWNrbHkKKwkJICogKDFtcyB3aWxsIGJlIGVub3VnaCBmb3IgdGhvc2UgY29tbWFuZHMpICovCisJCWZvciAoc2xlZXBfdG90YWwgPSAwOworCQkgICAgIHNsZWVwX3RvdGFsIDwgMTAwMAorCQkgICAgICYmIHJlc3BvbnNlLT5yZXN1bHQgPT0gTVlSSTEwR0VfTk9fUkVTUE9OU0VfUkVTVUxUOworCQkgICAgIHNsZWVwX3RvdGFsICs9IDEwKQorCQkJdWRlbGF5KDEwKTsKKwl9IGVsc2UgeworCQkvKiB1c2UgbXNsZWVwIGZvciBtb3N0IGNvbW1hbmQgKi8KKwkJZm9yIChzbGVlcF90b3RhbCA9IDA7CisJCSAgICAgc2xlZXBfdG90YWwgPCAxNQorCQkgICAgICYmIHJlc3BvbnNlLT5yZXN1bHQgPT0gTVlSSTEwR0VfTk9fUkVTUE9OU0VfUkVTVUxUOworCQkgICAgIHNsZWVwX3RvdGFsKyspCisJCQltc2xlZXAoMSk7CisJfQorCisJcmVzdWx0ID0gbnRvaGwocmVzcG9uc2UtPnJlc3VsdCk7CisJdmFsdWUgPSBudG9obChyZXNwb25zZS0+ZGF0YSk7CisJaWYgKHJlc3VsdCAhPSBNWVJJMTBHRV9OT19SRVNQT05TRV9SRVNVTFQpIHsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQlkYXRhLT5kYXRhMCA9IHZhbHVlOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwKKwkJCQkiY29tbWFuZCAlZCBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCWNtZCwgcmVzdWx0KTsKKwkJCXJldHVybiAtRU5YSU87CisJCX0KKwl9CisKKwlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwgImNvbW1hbmQgJWQgdGltZWQgb3V0LCByZXN1bHQgPSAlZFxuIiwKKwkJY21kLCByZXN1bHQpOworCXJldHVybiAtRUFHQUlOOworfQorCisvKgorICogVGhlIGVlcHJvbSBzdHJpbmdzIG9uIHRoZSBsYW5haVggaGF2ZSB0aGUgZm9ybWF0CisgKiBTTj14XDAKKyAqIE1BQz14Ong6eDp4Ong6eFwwCisgKiBQVDpkZGQgbW1tIHh4IHh4Onh4Onh4IHh4XDAKKyAqIFBWOmRkZCBtbW0geHggeHg6eHg6eHggeHhcMAorICovCitzdGF0aWMgaW50IG15cmkxMGdlX3JlYWRfbWFjX2FkZHIoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwljaGFyICpwdHIsICpsaW1pdDsKKwlpbnQgaTsKKworCXB0ciA9IG1ncC0+ZWVwcm9tX3N0cmluZ3M7CisJbGltaXQgPSBtZ3AtPmVlcHJvbV9zdHJpbmdzICsgTVlSSTEwR0VfRUVQUk9NX1NUUklOR1NfU0laRTsKKworCXdoaWxlICgqcHRyICE9ICdcMCcgJiYgcHRyIDwgbGltaXQpIHsKKwkJaWYgKG1lbWNtcChwdHIsICJNQUM9IiwgNCkgPT0gMCkgeworCQkJcHRyICs9IDQ7CisJCQltZ3AtPm1hY19hZGRyX3N0cmluZyA9IHB0cjsKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJCQlpZiAoKHB0ciArIDIpID4gbGltaXQpCisJCQkJCWdvdG8gYWJvcnQ7CisJCQkJbWdwLT5tYWNfYWRkcltpXSA9CisJCQkJICAgIHNpbXBsZV9zdHJ0b3VsKHB0ciwgJnB0ciwgMTYpOworCQkJCXB0ciArPSAxOworCQkJfQorCQl9CisJCWlmIChtZW1jbXAoKGNvbnN0IHZvaWQgKilwdHIsICJTTj0iLCAzKSA9PSAwKSB7CisJCQlwdHIgKz0gMzsKKwkJCW1ncC0+c2VyaWFsX251bWJlciA9IHNpbXBsZV9zdHJ0b3VsKHB0ciwgJnB0ciwgMTApOworCQl9CisJCXdoaWxlIChwdHIgPCBsaW1pdCAmJiAqcHRyKyspIDsKKwl9CisKKwlyZXR1cm4gMDsKKworYWJvcnQ6CisJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcGFyc2UgZWVwcm9tX3N0cmluZ3NcbiIpOworCXJldHVybiAtRU5YSU87Cit9CisKKy8qCisgKiBFbmFibGUgb3IgZGlzYWJsZSBwZXJpb2RpYyBSRE1BcyBmcm9tIHRoZSBob3N0IHRvIG1ha2UgY2VydGFpbgorICogY2hpcHNldHMgcmVzZW5kIGRyb3BwZWQgUENJZSBtZXNzYWdlcworICovCisKK3N0YXRpYyB2b2lkIG15cmkxMGdlX2R1bW15X3JkbWEoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgaW50IGVuYWJsZSkKK3sKKwljaGFyIF9faW9tZW0gKnN1Ym1pdDsKKwl1MzIgYnVmWzE2XTsKKwl1MzIgZG1hX2xvdywgZG1hX2hpZ2g7CisJaW50IGk7CisKKwkvKiBjbGVhciBjb25maXJtYXRpb24gYWRkciAqLworCW1ncC0+Y21kLT5kYXRhID0gMDsKKwltYigpOworCisJLyogc2VuZCBhIHJkbWEgY29tbWFuZCB0byB0aGUgUENJZSBlbmdpbmUsIGFuZCB3YWl0IGZvciB0aGUKKwkgKiByZXNwb25zZSBpbiB0aGUgY29uZmlybWF0aW9uIGFkZHJlc3MuICBUaGUgZmlybXdhcmUgc2hvdWxkCisJICogd3JpdGUgYSAtMSB0aGVyZSB0byBpbmRpY2F0ZSBpdCBpcyBhbGl2ZSBhbmQgd2VsbAorCSAqLworCWRtYV9sb3cgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihtZ3AtPmNtZF9idXMpOworCWRtYV9oaWdoID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKG1ncC0+Y21kX2J1cyk7CisKKwlidWZbMF0gPSBodG9ubChkbWFfaGlnaCk7CS8qIGNvbmZpcm0gYWRkciBNU1cgKi8KKwlidWZbMV0gPSBodG9ubChkbWFfbG93KTsJLyogY29uZmlybSBhZGRyIExTVyAqLworCWJ1ZlsyXSA9IGh0b25sKE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSk7CS8qIGNvbmZpcm0gZGF0YSAqLworCWJ1ZlszXSA9IGh0b25sKGRtYV9oaWdoKTsJLyogZHVtbXkgYWRkciBNU1cgKi8KKwlidWZbNF0gPSBodG9ubChkbWFfbG93KTsJLyogZHVtbXkgYWRkciBMU1cgKi8KKwlidWZbNV0gPSBodG9ubChlbmFibGUpOwkvKiBlbmFibGU/ICovCisKKwlzdWJtaXQgPSBtZ3AtPnNyYW0gKyAweGZjMDFjMDsKKworCW15cmkxMGdlX3Bpb19jb3B5KHN1Ym1pdCwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWZvciAoaSA9IDA7IG1ncC0+Y21kLT5kYXRhICE9IE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSAmJiBpIDwgMjA7IGkrKykKKwkJbXNsZWVwKDEpOworCWlmIChtZ3AtPmNtZC0+ZGF0YSAhPSBNWVJJMTBHRV9OT19DT05GSVJNX0RBVEEpCisJCWRldl9lcnIoJm1ncC0+cGRldi0+ZGV2LCAiZHVtbXkgcmRtYSAlcyBmYWlsZWRcbiIsCisJCQkoZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpKTsKK30KKworc3RhdGljIGludAorbXlyaTEwZ2VfdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwKKwkJCSAgIHN0cnVjdCBtY3BfZ2VuX2hlYWRlciAqaGRyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZ3AtPnBkZXYtPmRldjsKKwlpbnQgbWFqb3IsIG1pbm9yOworCisJLyogY2hlY2sgZmlybXdhcmUgdHlwZSAqLworCWlmIChudG9obChoZHItPm1jcF90eXBlKSAhPSBNQ1BfVFlQRV9FVEgpIHsKKwkJZGV2X2VycihkZXYsICJCYWQgZmlybXdhcmUgdHlwZTogMHgleFxuIiwgbnRvaGwoaGRyLT5tY3BfdHlwZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzYXZlIGZpcm13YXJlIHZlcnNpb24gZm9yIGV0aHRvb2wgKi8KKwlzdHJuY3B5KG1ncC0+ZndfdmVyc2lvbiwgaGRyLT52ZXJzaW9uLCBzaXplb2YobWdwLT5md192ZXJzaW9uKSk7CisKKwlzc2NhbmYobWdwLT5md192ZXJzaW9uLCAiJWQuJWQiLCAmbWFqb3IsICZtaW5vcik7CisKKwlpZiAoIShtYWpvciA9PSBNWEdFRldfVkVSU0lPTl9NQUpPUiAmJiBtaW5vciA9PSBNWEdFRldfVkVSU0lPTl9NSU5PUikpIHsKKwkJZGV2X2VycihkZXYsICJGb3VuZCBmaXJtd2FyZSB2ZXJzaW9uICVzXG4iLCBtZ3AtPmZ3X3ZlcnNpb24pOworCQlkZXZfZXJyKGRldiwgIkRyaXZlciBuZWVkcyAlZC4lZFxuIiwgTVhHRUZXX1ZFUlNJT05fTUFKT1IsCisJCQlNWEdFRldfVkVSU0lPTl9NSU5PUik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9sb2FkX2hvdHBsdWdfZmlybXdhcmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgdTMyICogc2l6ZSkKK3sKKwl1bnNpZ25lZCBjcmMsIHJlcmVhZF9jcmM7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbWdwLT5wZGV2LT5kZXY7CisJc3RydWN0IG1jcF9nZW5faGVhZGVyICpoZHI7CisJc2l6ZV90IGhkcl9vZmZzZXQ7CisJaW50IHN0YXR1czsKKworCWlmICgoc3RhdHVzID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG1ncC0+ZndfbmFtZSwgZGV2KSkgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGxvYWQgJXMgZmlybXdhcmUgaW1hZ2UgdmlhIGhvdHBsdWdcbiIsCisJCQltZ3AtPmZ3X25hbWUpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKKwl9CisKKwkvKiBjaGVjayBzaXplICovCisKKwlpZiAoZnctPnNpemUgPj0gbWdwLT5zcmFtX3NpemUgLSBNWVJJMTBHRV9GV19PRkZTRVQgfHwKKwkgICAgZnctPnNpemUgPCBNQ1BfSEVBREVSX1BUUl9PRkZTRVQgKyA0KSB7CisJCWRldl9lcnIoZGV2LCAiRmlybXdhcmUgc2l6ZSBpbnZhbGlkOiVkXG4iLCAoaW50KWZ3LT5zaXplKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBhYm9ydF93aXRoX2Z3OworCX0KKworCS8qIGNoZWNrIGlkICovCisJaGRyX29mZnNldCA9IG50b2hsKCoodTMyICopIChmdy0+ZGF0YSArIE1DUF9IRUFERVJfUFRSX09GRlNFVCkpOworCWlmICgoaGRyX29mZnNldCAmIDMpIHx8IGhkcl9vZmZzZXQgKyBzaXplb2YoKmhkcikgPiBmdy0+c2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIkJhZCBmaXJtd2FyZSBmaWxlXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBhYm9ydF93aXRoX2Z3OworCX0KKwloZHIgPSAodm9pZCAqKShmdy0+ZGF0YSArIGhkcl9vZmZzZXQpOworCisJc3RhdHVzID0gbXlyaTEwZ2VfdmFsaWRhdGVfZmlybXdhcmUobWdwLCBoZHIpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBhYm9ydF93aXRoX2Z3OworCisJY3JjID0gY3JjMzIofjAsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJaWYgKG1ncC0+dHguYm91bmRhcnkgPT0gMjA0OCkgeworCQkvKiBBdm9pZCBQQ0kgYnVyc3Qgb24gY2hpcHNldCB3aXRoIHVuYWxpZ25lZCBjb21wbGV0aW9ucy4gKi8KKwkJaW50IGk7CisJCV9faW9tZW0gdTMyICpwdHIgPSAoX19pb21lbSB1MzIgKikgKG1ncC0+c3JhbSArCisJCQkJCQkgICAgTVlSSTEwR0VfRldfT0ZGU0VUKTsKKwkJZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplIC8gNDsgaSsrKSB7CisJCQlfX3Jhd193cml0ZWwoKCh1MzIgKikgZnctPmRhdGEpW2ldLCBwdHIgKyBpKTsKKwkJCXdtYigpOworCQl9CisJfSBlbHNlIHsKKwkJbXlyaTEwZ2VfcGlvX2NvcHkobWdwLT5zcmFtICsgTVlSSTEwR0VfRldfT0ZGU0VULCBmdy0+ZGF0YSwKKwkJCQkgIGZ3LT5zaXplKTsKKwl9CisJLyogY29ycnVwdGlvbiBjaGVja2luZyBpcyBnb29kIGZvciBwYXJpdHkgcmVjb3ZlcnkgYW5kIGJ1Z2d5IGNoaXBzZXQgKi8KKwltZW1jcHlfZnJvbWlvKGZ3LT5kYXRhLCBtZ3AtPnNyYW0gKyBNWVJJMTBHRV9GV19PRkZTRVQsIGZ3LT5zaXplKTsKKwlyZXJlYWRfY3JjID0gY3JjMzIofjAsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJaWYgKGNyYyAhPSByZXJlYWRfY3JjKSB7CisJCWRldl9lcnIoZGV2LCAiQ1JDIGZhaWxlZChmdy1sZW49JXUpLCBnb3QgMHgleCAoZXhwZWN0IDB4JXgpXG4iLAorCQkJKHVuc2lnbmVkKWZ3LT5zaXplLCByZXJlYWRfY3JjLCBjcmMpOworCQlzdGF0dXMgPSAtRUlPOworCQlnb3RvIGFib3J0X3dpdGhfZnc7CisJfQorCSpzaXplID0gKHUzMikgZnctPnNpemU7CisKK2Fib3J0X3dpdGhfZnc6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKK2Fib3J0X3dpdGhfbm90aGluZzoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX2Fkb3B0X3J1bm5pbmdfZmlybXdhcmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgbWNwX2dlbl9oZWFkZXIgKmhkcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbWdwLT5wZGV2LT5kZXY7CisJY29uc3Qgc2l6ZV90IGJ5dGVzID0gc2l6ZW9mKHN0cnVjdCBtY3BfZ2VuX2hlYWRlcik7CisJc2l6ZV90IGhkcl9vZmZzZXQ7CisJaW50IHN0YXR1czsKKworCS8qIGZpbmQgcnVubmluZyBmaXJtd2FyZSBoZWFkZXIgKi8KKwloZHJfb2Zmc2V0ID0gbnRvaGwoX19yYXdfcmVhZGwobWdwLT5zcmFtICsgTUNQX0hFQURFUl9QVFJfT0ZGU0VUKSk7CisKKwlpZiAoKGhkcl9vZmZzZXQgJiAzKSB8fCBoZHJfb2Zmc2V0ICsgc2l6ZW9mKCpoZHIpID4gbWdwLT5zcmFtX3NpemUpIHsKKwkJZGV2X2VycihkZXYsICJSdW5uaW5nIGZpcm13YXJlIGhhcyBiYWQgaGVhZGVyIG9mZnNldCAoJWQpXG4iLAorCQkJKGludCloZHJfb2Zmc2V0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogY29weSBoZWFkZXIgb2YgcnVubmluZyBmaXJtd2FyZSBmcm9tIFNSQU0gdG8gaG9zdCBtZW1vcnkgdG8KKwkgKiB2YWxpZGF0ZSBmaXJtd2FyZSAqLworCWhkciA9IGttYWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOworCWlmIChoZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBtYWxsb2MgZmlybXdhcmUgaGRyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweV9mcm9taW8oaGRyLCBtZ3AtPnNyYW0gKyBoZHJfb2Zmc2V0LCBieXRlcyk7CisJc3RhdHVzID0gbXlyaTEwZ2VfdmFsaWRhdGVfZmlybXdhcmUobWdwLCBoZHIpOworCWtmcmVlKGhkcik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJY2hhciBfX2lvbWVtICpzdWJtaXQ7CisJdTMyIGJ1ZlsxNl07CisJdTMyIGRtYV9sb3csIGRtYV9oaWdoLCBzaXplOworCWludCBzdGF0dXMsIGk7CisKKwlzaXplID0gMDsKKwlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2hvdHBsdWdfZmlybXdhcmUobWdwLCAmc2l6ZSk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfd2FybigmbWdwLT5wZGV2LT5kZXYsICJob3RwbHVnIGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iKTsKKworCQkvKiBEbyBub3QgYXR0ZW1wdCB0byBhZG9wdCBmaXJtd2FyZSBpZiB0aGVyZQorCQkgKiB3YXMgYSBiYWQgY3JjICovCisJCWlmIChzdGF0dXMgPT0gLUVJTykKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJc3RhdHVzID0gbXlyaTEwZ2VfYWRvcHRfcnVubmluZ19maXJtd2FyZShtZ3ApOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCWRldl9lcnIoJm1ncC0+cGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gYWRvcHQgcnVubmluZyBmaXJtd2FyZVxuIik7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwKKwkJCSAiU3VjY2Vzc2Z1bGx5IGFkb3B0ZWQgcnVubmluZyBmaXJtd2FyZVxuIik7CisJCWlmIChtZ3AtPnR4LmJvdW5kYXJ5ID09IDQwOTYpIHsKKwkJCWRldl93YXJuKCZtZ3AtPnBkZXYtPmRldiwKKwkJCQkgIlVzaW5nIGZpcm13YXJlIGN1cnJlbnRseSBydW5uaW5nIG9uIE5JQyIKKwkJCQkgIi4gIEZvciBvcHRpbWFsXG4iKTsKKwkJCWRldl93YXJuKCZtZ3AtPnBkZXYtPmRldiwKKwkJCQkgInBlcmZvcm1hbmNlIGNvbnNpZGVyIGxvYWRpbmcgb3B0aW1pemVkICIKKwkJCQkgImZpcm13YXJlXG4iKTsKKwkJCWRldl93YXJuKCZtZ3AtPnBkZXYtPmRldiwgInZpYSBob3RwbHVnXG4iKTsKKwkJfQorCisJCW1ncC0+ZndfbmFtZSA9ICJhZG9wdGVkIjsKKwkJbWdwLT50eC5ib3VuZGFyeSA9IDIwNDg7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogY2xlYXIgY29uZmlybWF0aW9uIGFkZHIgKi8KKwltZ3AtPmNtZC0+ZGF0YSA9IDA7CisJbWIoKTsKKworCS8qIHNlbmQgYSByZWxvYWQgY29tbWFuZCB0byB0aGUgYm9vdHN0cmFwIE1DUCwgYW5kIHdhaXQgZm9yIHRoZQorCSAqICByZXNwb25zZSBpbiB0aGUgY29uZmlybWF0aW9uIGFkZHJlc3MuICBUaGUgZmlybXdhcmUgc2hvdWxkCisJICogd3JpdGUgYSAtMSB0aGVyZSB0byBpbmRpY2F0ZSBpdCBpcyBhbGl2ZSBhbmQgd2VsbAorCSAqLworCWRtYV9sb3cgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihtZ3AtPmNtZF9idXMpOworCWRtYV9oaWdoID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKG1ncC0+Y21kX2J1cyk7CisKKwlidWZbMF0gPSBodG9ubChkbWFfaGlnaCk7CS8qIGNvbmZpcm0gYWRkciBNU1cgKi8KKwlidWZbMV0gPSBodG9ubChkbWFfbG93KTsJLyogY29uZmlybSBhZGRyIExTVyAqLworCWJ1ZlsyXSA9IGh0b25sKE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSk7CS8qIGNvbmZpcm0gZGF0YSAqLworCisJLyogRklYOiBBbGwgbmV3ZXN0IGZpcm13YXJlIHNob3VsZCB1bi1wcm90ZWN0IHRoZSBib3R0b20gb2YKKwkgKiB0aGUgc3JhbSBiZWZvcmUgaGFuZG9mZi4gSG93ZXZlciwgdGhlIHZlcnkgZmlyc3QgaW50ZXJmYWNlcworCSAqIGRvIG5vdC4gVGhlcmVmb3JlIHRoZSBoYW5kb2ZmIGNvcHkgbXVzdCBza2lwIHRoZSBmaXJzdCA4IGJ5dGVzCisJICovCisJYnVmWzNdID0gaHRvbmwoTVlSSTEwR0VfRldfT0ZGU0VUICsgOCk7CS8qIHdoZXJlIHRoZSBjb2RlIHN0YXJ0cyAqLworCWJ1Zls0XSA9IGh0b25sKHNpemUgLSA4KTsJLyogbGVuZ3RoIG9mIGNvZGUgKi8KKwlidWZbNV0gPSBodG9ubCg4KTsJLyogd2hlcmUgdG8gY29weSB0byAqLworCWJ1Zls2XSA9IGh0b25sKDApOwkvKiB3aGVyZSB0byBqdW1wIHRvICovCisKKwlzdWJtaXQgPSBtZ3AtPnNyYW0gKyAweGZjMDAwMDsKKworCW15cmkxMGdlX3Bpb19jb3B5KHN1Ym1pdCwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCW1iKCk7CisJbXNsZWVwKDEpOworCW1iKCk7CisJaSA9IDA7CisJd2hpbGUgKG1ncC0+Y21kLT5kYXRhICE9IE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSAmJiBpIDwgMjApIHsKKwkJbXNsZWVwKDEpOworCQlpKys7CisJfQorCWlmIChtZ3AtPmNtZC0+ZGF0YSAhPSBNWVJJMTBHRV9OT19DT05GSVJNX0RBVEEpIHsKKwkJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsICJoYW5kb2ZmIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwgImhhbmRvZmYgY29uZmlybWVkXG4iKTsKKwlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgbWdwLT50eC5ib3VuZGFyeSAhPSA0MDk2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX3VwZGF0ZV9tYWNfYWRkcmVzcyhzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCB1OCAqIGFkZHIpCit7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJaW50IHN0YXR1czsKKworCWNtZC5kYXRhMCA9ICgoYWRkclswXSA8PCAyNCkgfCAoYWRkclsxXSA8PCAxNikKKwkJICAgICB8IChhZGRyWzJdIDw8IDgpIHwgYWRkclszXSk7CisKKwljbWQuZGF0YTEgPSAoKGFkZHJbNF0gPDwgOCkgfCAoYWRkcls1XSkpOworCisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfU0VUX01BQ19BRERSRVNTLCAmY21kLCAwKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX2NoYW5nZV9wYXVzZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBpbnQgcGF1c2UpCit7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJaW50IHN0YXR1cywgY3RsOworCisJY3RsID0gcGF1c2UgPyBNWEdFRldfRU5BQkxFX0ZMT1dfQ09OVFJPTCA6IE1YR0VGV19ESVNBQkxFX0ZMT1dfQ09OVFJPTDsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIGN0bCwgJmNtZCwgMCk7CisKKwlpZiAoc3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm15cmkxMGdlOiAlczogRmFpbGVkIHRvIHNldCBmbG93IGNvbnRyb2wgbW9kZVxuIiwKKwkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJbWdwLT5wYXVzZSA9IHBhdXNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXlyaTEwZ2VfY2hhbmdlX3Byb21pc2Moc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgaW50IHByb21pc2MsIGludCBhdG9taWMpCit7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJaW50IHN0YXR1cywgY3RsOworCisJY3RsID0gcHJvbWlzYyA/IE1YR0VGV19FTkFCTEVfUFJPTUlTQyA6IE1YR0VGV19ESVNBQkxFX1BST01JU0M7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBjdGwsICZjbWQsIGF0b21pYyk7CisJaWYgKHN0YXR1cykKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IEZhaWxlZCB0byBzZXQgcHJvbWlzYyBtb2RlXG4iLAorCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX3Jlc2V0KHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJaW50IHN0YXR1czsKKwlzaXplX3QgYnl0ZXM7CisJdTMyIGxlbjsKKworCS8qIHRyeSB0byBzZW5kIGEgcmVzZXQgY29tbWFuZCB0byB0aGUgY2FyZCB0byBzZWUgaWYgaXQKKwkgKiBpcyBhbGl2ZSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1JFU0VULCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsICJmYWlsZWQgcmVzZXRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIE5vdyBleGNoYW5nZSBpbmZvcm1hdGlvbiBhYm91dCBpbnRlcnJ1cHRzICAqLworCisJYnl0ZXMgPSBteXJpMTBnZV9tYXhfaW50cl9zbG90cyAqIHNpemVvZigqbWdwLT5yeF9kb25lLmVudHJ5KTsKKwltZW1zZXQobWdwLT5yeF9kb25lLmVudHJ5LCAwLCBieXRlcyk7CisJY21kLmRhdGEwID0gKHUzMikgYnl0ZXM7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9JTlRSUV9TSVpFLCAmY21kLCAwKTsKKwljbWQuZGF0YTAgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihtZ3AtPnJ4X2RvbmUuYnVzKTsKKwljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5yeF9kb25lLmJ1cyk7CisJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9TRVRfSU5UUlFfRE1BLCAmY21kLCAwKTsKKworCXN0YXR1cyB8PQorCSAgICBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfR0VUX0lSUV9BQ0tfT0ZGU0VULCAmY21kLCAwKTsKKwltZ3AtPmlycV9jbGFpbSA9IChfX2lvbWVtIHUzMiAqKSAobWdwLT5zcmFtICsgY21kLmRhdGEwKTsKKwlpZiAoIW1ncC0+bXNpX2VuYWJsZWQpIHsKKwkJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kCisJCSAgICAobWdwLCBNWEdFRldfQ01EX0dFVF9JUlFfREVBU1NFUlRfT0ZGU0VULCAmY21kLCAwKTsKKwkJbWdwLT5pcnFfZGVhc3NlcnQgPSAoX19pb21lbSB1MzIgKikgKG1ncC0+c3JhbSArIGNtZC5kYXRhMCk7CisKKwl9CisJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kCisJICAgIChtZ3AsIE1YR0VGV19DTURfR0VUX0lOVFJfQ09BTF9ERUxBWV9PRkZTRVQsICZjbWQsIDApOworCW1ncC0+aW50cl9jb2FsX2RlbGF5X3B0ciA9IChfX2lvbWVtIHUzMiAqKSAobWdwLT5zcmFtICsgY21kLmRhdGEwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsICJmYWlsZWQgc2V0IGludGVycnVwdCBwYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJX19yYXdfd3JpdGVsKGh0b25sKG1ncC0+aW50cl9jb2FsX2RlbGF5KSwgbWdwLT5pbnRyX2NvYWxfZGVsYXlfcHRyKTsKKworCS8qIFJ1biBhIHNtYWxsIERNQSB0ZXN0LgorCSAqIFRoZSBtYWdpYyBtdWx0aXBsaWVycyB0byB0aGUgbGVuZ3RoIHRlbGwgdGhlIGZpcm13YXJlCisJICogdG8gZG8gRE1BIHJlYWQsIHdyaXRlLCBvciByZWFkK3dyaXRlIHRlc3RzLiAgVGhlCisJICogcmVzdWx0cyBhcmUgcmV0dXJuZWQgaW4gY21kLmRhdGEwLiAgVGhlIHVwcGVyIDE2CisJICogYml0cyBvciB0aGUgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2YgdHJhbnNmZXJzIGNvbXBsZXRlZC4KKwkgKiBUaGUgbG93ZXIgMTYgYml0cyBpcyB0aGUgdGltZSBpbiAwLjV1cyB0aWNrcyB0aGF0IHRoZQorCSAqIHRyYW5zZmVycyB0b29rIHRvIGNvbXBsZXRlLgorCSAqLworCisJbGVuID0gbWdwLT50eC5ib3VuZGFyeTsKKworCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+cnhfZG9uZS5idXMpOworCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihtZ3AtPnJ4X2RvbmUuYnVzKTsKKwljbWQuZGF0YTIgPSBsZW4gKiAweDEwMDAwOworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0RNQV9URVNULCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzID09IDApCisJCW1ncC0+cmVhZF9kbWEgPSAoKGNtZC5kYXRhMCA+PiAxNikgKiBsZW4gKiAyKSAvCisJCSAgICAoY21kLmRhdGEwICYgMHhmZmZmKTsKKwllbHNlCisJCWRldl93YXJuKCZtZ3AtPnBkZXYtPmRldiwgIkRNQSByZWFkIGJlbmNobWFyayBmYWlsZWQ6ICVkXG4iLAorCQkJIHN0YXR1cyk7CisJY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIobWdwLT5yeF9kb25lLmJ1cyk7CisJY21kLmRhdGExID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKG1ncC0+cnhfZG9uZS5idXMpOworCWNtZC5kYXRhMiA9IGxlbiAqIDB4MTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19ETUFfVEVTVCwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cyA9PSAwKQorCQltZ3AtPndyaXRlX2RtYSA9ICgoY21kLmRhdGEwID4+IDE2KSAqIGxlbiAqIDIpIC8KKwkJICAgIChjbWQuZGF0YTAgJiAweGZmZmYpOworCWVsc2UKKwkJZGV2X3dhcm4oJm1ncC0+cGRldi0+ZGV2LCAiRE1BIHdyaXRlIGJlbmNobWFyayBmYWlsZWQ6ICVkXG4iLAorCQkJIHN0YXR1cyk7CisKKwljbWQuZGF0YTAgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihtZ3AtPnJ4X2RvbmUuYnVzKTsKKwljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5yeF9kb25lLmJ1cyk7CisJY21kLmRhdGEyID0gbGVuICogMHgxMDAwMTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19ETUFfVEVTVCwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cyA9PSAwKQorCQltZ3AtPnJlYWRfd3JpdGVfZG1hID0gKChjbWQuZGF0YTAgPj4gMTYpICogbGVuICogMiAqIDIpIC8KKwkJICAgIChjbWQuZGF0YTAgJiAweGZmZmYpOworCWVsc2UKKwkJZGV2X3dhcm4oJm1ncC0+cGRldi0+ZGV2LAorCQkJICJETUEgcmVhZC93cml0ZSBiZW5jaG1hcmsgZmFpbGVkOiAlZFxuIiwgc3RhdHVzKTsKKworCW1lbXNldChtZ3AtPnJ4X2RvbmUuZW50cnksIDAsIGJ5dGVzKTsKKworCS8qIHJlc2V0IG1jcC9kcml2ZXIgc2hhcmVkIHN0YXRlIGJhY2sgdG8gMCAqLworCW1ncC0+dHgucmVxID0gMDsKKwltZ3AtPnR4LmRvbmUgPSAwOworCW1ncC0+dHgucGt0X3N0YXJ0ID0gMDsKKwltZ3AtPnR4LnBrdF9kb25lID0gMDsKKwltZ3AtPnJ4X2JpZy5jbnQgPSAwOworCW1ncC0+cnhfc21hbGwuY250ID0gMDsKKwltZ3AtPnJ4X2RvbmUuaWR4ID0gMDsKKwltZ3AtPnJ4X2RvbmUuY250ID0gMDsKKwlzdGF0dXMgPSBteXJpMTBnZV91cGRhdGVfbWFjX2FkZHJlc3MobWdwLCBtZ3AtPmRldi0+ZGV2X2FkZHIpOworCW15cmkxMGdlX2NoYW5nZV9wcm9taXNjKG1ncCwgMCwgMCk7CisJbXlyaTEwZ2VfY2hhbmdlX3BhdXNlKG1ncCwgbWdwLT5wYXVzZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitteXJpMTBnZV9zdWJtaXRfOHJ4KHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2IF9faW9tZW0gKiBkc3QsCisJCSAgICBzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiAqc3JjKQoreworCXUzMiBsb3c7CisKKwlsb3cgPSBzcmMtPmFkZHJfbG93OworCXNyYy0+YWRkcl9sb3cgPSBETUFfMzJCSVRfTUFTSzsKKwlteXJpMTBnZV9waW9fY29weShkc3QsIHNyYywgOCAqIHNpemVvZigqc3JjKSk7CisJbWIoKTsKKwlzcmMtPmFkZHJfbG93ID0gbG93OworCV9fcmF3X3dyaXRlbChsb3csICZkc3QtPmFkZHJfbG93KTsKKwltYigpOworfQorCisvKgorICogU2V0IG9mIHJvdXRpbmVzIHRvIGdldCBhIG5ldyByZWNlaXZlIGJ1ZmZlci4gIEFueSBidWZmZXIgd2hpY2gKKyAqIGNyb3NzZXMgYSA0S0IgYm91bmRhcnkgbXVzdCBzdGFydCBvbiBhIDRLQiBib3VuZGFyeSBkdWUgdG8gUENJZQorICogd2RtYSByZXN0cmljdGlvbnMuIFdlIGFsc28gdHJ5IHRvIGFsaWduIGFueSBzbWFsbGVyIGFsbG9jYXRpb24gdG8KKyAqIGF0IGxlYXN0IGEgMTYgYnl0ZSBib3VuZGFyeSBmb3IgZWZmaWNpZW5jeS4gIFdlIGFzc3VtZSB0aGUgbGludXgKKyAqIG1lbW9yeSBhbGxvY2F0b3Igd29ya3MgYnkgcG93ZXJzIG9mIDIsIGFuZCB3aWxsIG5vdCByZXR1cm4gbWVtb3J5CisgKiBzbWFsbGVyIHRoYW4gMktCIHdoaWNoIGNyb3NzZXMgYSA0S0IgYm91bmRhcnkuICBJZiBpdCBkb2VzLCB3ZSBmYWxsCisgKiBiYWNrIHRvIGFsbG9jYXRpbmcgMnggYXMgbXVjaCBzcGFjZSBhcyByZXF1aXJlZC4KKyAqCisgKiBXZSBpbnRlbmQgdG8gcmVwbGFjZSBsYXJnZSAoPjRLQikgc2tiIGFsbG9jYXRpb25zIGJ5IHVzaW5nCisgKiBwYWdlcyBkaXJlY3RseSBhbmQgYnVpbGRpbmcgYSBmcmFnbGlzdCBpbiB0aGUgbmVhciBmdXR1cmUuCisgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbXlyaTEwZ2VfYWxsb2NfYmlnKGludCBieXRlcykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGxvbmcgZGF0YSwgcm91bmR1cDsKKworCXNrYiA9IGRldl9hbGxvY19za2IoYnl0ZXMgKyA0MDk2ICsgTVhHRUZXX1BBRCk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIENvcnJlY3Qgc2tiLT50cnVlc2l6ZSBzbyB0aGF0IHNvY2tldCBidWZmZXIKKwkgKiBhY2NvdW50aW5nIGlzIG5vdCBjb25mdXNlZCB0aGUgcm91bmRpbmcgd2UgbXVzdAorCSAqIGRvIHRvIHNhdGlzZnkgYWxpZ25tZW50IGNvbnN0cmFpbnRzLgorCSAqLworCXNrYi0+dHJ1ZXNpemUgLT0gNDA5NjsKKworCWRhdGEgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhKTsKKwlyb3VuZHVwID0gKC1kYXRhKSAmICg0MDk1KTsKKwlza2JfcmVzZXJ2ZShza2IsIHJvdW5kdXApOworCXJldHVybiBza2I7Cit9CisKKy8qIEFsbG9jYXRlIDJ4IGFzIG11Y2ggc3BhY2UgYXMgcmVxdWlyZWQgYW5kIHVzZSB3aGljaGV2ZXIgcG9ydGlvbgorICogZG9lcyBub3QgY3Jvc3MgYSA0S0IgYm91bmRhcnkgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm15cmkxMGdlX2FsbG9jX3NtYWxsX3NhZmUodW5zaWduZWQgaW50IGJ5dGVzKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBkYXRhLCBib3VuZGFyeTsKKworCXNrYiA9IGRldl9hbGxvY19za2IoMiAqIChieXRlcyArIE1YR0VGV19QQUQpIC0gMSk7CisJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBDb3JyZWN0IHNrYi0+dHJ1ZXNpemUgc28gdGhhdCBzb2NrZXQgYnVmZmVyCisJICogYWNjb3VudGluZyBpcyBub3QgY29uZnVzZWQgdGhlIHJvdW5kaW5nIHdlIG11c3QKKwkgKiBkbyB0byBzYXRpc2Z5IGFsaWdubWVudCBjb25zdHJhaW50cy4KKwkgKi8KKwlza2ItPnRydWVzaXplIC09IGJ5dGVzICsgTVhHRUZXX1BBRDsKKworCWRhdGEgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhKTsKKwlib3VuZGFyeSA9IChkYXRhICsgNDA5NVVMKSAmIH40MDk1VUw7CisJaWYgKChib3VuZGFyeSAtIGRhdGEpID49IChieXRlcyArIE1YR0VGV19QQUQpKQorCQlyZXR1cm4gc2tiOworCisJc2tiX3Jlc2VydmUoc2tiLCBib3VuZGFyeSAtIGRhdGEpOworCXJldHVybiBza2I7Cit9CisKKy8qIEFsbG9jYXRlIGp1c3QgZW5vdWdoIHNwYWNlLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGFsbG9jYXRlZAorICogc3BhY2UgZG9lcyBub3QgY3Jvc3MgYSA0S0IgYm91bmRhcnkgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm15cmkxMGdlX2FsbG9jX3NtYWxsKGludCBieXRlcykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGxvbmcgcm91bmR1cCwgZGF0YSwgZW5kOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihieXRlcyArIDE2ICsgTVhHRUZXX1BBRCk7CisJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSb3VuZCBhbGxvY2F0ZWQgYnVmZmVyIHRvIDE2IGJ5dGUgYm91bmRhcnkgKi8KKwlkYXRhID0gKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSk7CisJcm91bmR1cCA9ICgtZGF0YSkgJiAxNVVMOworCXNrYl9yZXNlcnZlKHNrYiwgcm91bmR1cCk7CisJLyogVmVyaWZ5IHRoYXQgdGhlIGRhdGEgYnVmZmVyIGRvZXMgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeSAqLworCWRhdGEgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhKTsKKwllbmQgPSBkYXRhICsgYnl0ZXMgKyBNWEdFRldfUEFEIC0gMTsKKwlpZiAodW5saWtlbHkoKChlbmQgPj4gMTIpICE9IChkYXRhID4+IDEyKSkgJiYgKGRhdGEgJiA0MDk1VUwpKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJICAgICAgICJteXJpMTBnZV9hbGxvY19zbWFsbDogc21hbGwgc2tiIGNyb3NzZWQgNEtCIGJvdW5kYXJ5XG4iKTsKKwkJbXlyaTEwZ2Vfc2tiX2Nyb3NzXzRrID0gMTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gbXlyaTEwZ2VfYWxsb2Nfc21hbGxfc2FmZShieXRlcyk7CisJfQorCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitteXJpMTBnZV9nZXRidWYoc3RydWN0IG15cmkxMGdlX3J4X2J1ZiAqcngsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYnl0ZXMsCisJCWludCBpZHgpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGJ1czsKKwlpbnQgbGVuLCByZXR2YWwgPSAwOworCisJYnl0ZXMgKz0gVkxBTl9ITEVOOwkvKiBhY2NvdW50IGZvciA4MDIuMXEgdmxhbiB0YWcgKi8KKworCWlmICgoYnl0ZXMgKyBNWEdFRldfUEFEKSA+ICg0MDk2IC0gMTYpIC8qIGxpbnV4IG92ZXJoZWFkICovICkKKwkJc2tiID0gbXlyaTEwZ2VfYWxsb2NfYmlnKGJ5dGVzKTsKKwllbHNlIGlmIChteXJpMTBnZV9za2JfY3Jvc3NfNGspCisJCXNrYiA9IG15cmkxMGdlX2FsbG9jX3NtYWxsX3NhZmUoYnl0ZXMpOworCWVsc2UKKwkJc2tiID0gbXlyaTEwZ2VfYWxsb2Nfc21hbGwoYnl0ZXMpOworCisJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgeworCQlyeC0+YWxsb2NfZmFpbCsrOworCQlyZXR2YWwgPSAtRU5PQlVGUzsKKwkJZ290byBkb25lOworCX0KKworCS8qIHNldCBsZW4gc28gdGhhdCBpdCBvbmx5IGNvdmVycyB0aGUgYXJlYSB3ZQorCSAqIG5lZWQgbWFwcGVkIGZvciBETUEgKi8KKwlsZW4gPSBieXRlcyArIE1YR0VGV19QQUQ7CisKKwlidXMgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlyeC0+aW5mb1tpZHhdLnNrYiA9IHNrYjsKKwlwY2lfdW5tYXBfYWRkcl9zZXQoJnJ4LT5pbmZvW2lkeF0sIGJ1cywgYnVzKTsKKwlwY2lfdW5tYXBfbGVuX3NldCgmcngtPmluZm9baWR4XSwgbGVuLCBsZW4pOworCXJ4LT5zaGFkb3dbaWR4XS5hZGRyX2xvdyA9IGh0b25sKE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKGJ1cykpOworCXJ4LT5zaGFkb3dbaWR4XS5hZGRyX2hpZ2ggPSBodG9ubChNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoYnVzKSk7CisKK2RvbmU6CisJLyogY29weSA4IGRlc2NyaXB0b3JzICg2NC1ieXRlcykgdG8gdGhlIG1jcCBhdCBhIHRpbWUgKi8KKwlpZiAoKGlkeCAmIDcpID09IDcpIHsKKwkJaWYgKHJ4LT53Y19maWZvID09IE5VTEwpCisJCQlteXJpMTBnZV9zdWJtaXRfOHJ4KCZyeC0+bGFuYWlbaWR4IC0gN10sCisJCQkJCSAgICAmcngtPnNoYWRvd1tpZHggLSA3XSk7CisJCWVsc2UgeworCQkJbWIoKTsKKwkJCW15cmkxMGdlX3Bpb19jb3B5KHJ4LT53Y19maWZvLAorCQkJCQkgICZyeC0+c2hhZG93W2lkeCAtIDddLCA2NCk7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG15cmkxMGdlX3ZsYW5faXBfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgaHdfY3N1bSkKK3sKKwlzdHJ1Y3Qgdmxhbl9oZHIgKnZoID0gKHN0cnVjdCB2bGFuX2hkciAqKShza2ItPmRhdGEpOworCisJaWYgKChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMjFRKSkgJiYKKwkgICAgKHZoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSB8fAorCSAgICAgdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7CisJCXNrYi0+Y3N1bSA9IGh3X2NzdW07CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK215cmkxMGdlX3J4X2RvbmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgc3RydWN0IG15cmkxMGdlX3J4X2J1ZiAqcngsCisJCSBpbnQgYnl0ZXMsIGludCBsZW4sIGludCBjc3VtKQoreworCWRtYV9hZGRyX3QgYnVzOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGlkeCwgdW5tYXBfbGVuOworCisJaWR4ID0gcngtPmNudCAmIHJ4LT5tYXNrOworCXJ4LT5jbnQrKzsKKworCS8qIHNhdmUgYSBwb2ludGVyIHRvIHRoZSByZWNlaXZlZCBza2IgKi8KKwlza2IgPSByeC0+aW5mb1tpZHhdLnNrYjsKKwlidXMgPSBwY2lfdW5tYXBfYWRkcigmcngtPmluZm9baWR4XSwgYnVzKTsKKwl1bm1hcF9sZW4gPSBwY2lfdW5tYXBfbGVuKCZyeC0+aW5mb1tpZHhdLCBsZW4pOworCisJLyogdHJ5IHRvIHJlcGxhY2UgdGhlIHJlY2VpdmVkIHNrYiAqLworCWlmIChteXJpMTBnZV9nZXRidWYocngsIG1ncC0+cGRldiwgYnl0ZXMsIGlkeCkpIHsKKwkJLyogZHJvcCB0aGUgZnJhbWUgLS0gdGhlIG9sZCBza2J1ZiBpcyByZS1jeWNsZWQgKi8KKwkJbWdwLT5zdGF0cy5yeF9kcm9wcGVkICs9IDE7CisJCXJldHVybiAwOworCX0KKworCS8qIHVubWFwIHRoZSByZWN2ZCBza2IgKi8KKwlwY2lfdW5tYXBfc2luZ2xlKG1ncC0+cGRldiwgYnVzLCB1bm1hcF9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkvKiBtY3AgaW1wbGljaXRseSBza2lwcyAxc3QgYnl0ZXMgc28gdGhhdCBwYWNrZXQgaXMgcHJvcGVybHkKKwkgKiBhbGlnbmVkICovCisJc2tiX3Jlc2VydmUoc2tiLCBNWEdFRldfUEFEKTsKKworCS8qIHNldCB0aGUgbGVuZ3RoIG9mIHRoZSBmcmFtZSAqLworCXNrYl9wdXQoc2tiLCBsZW4pOworCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbWdwLT5kZXYpOworCXNrYi0+ZGV2ID0gbWdwLT5kZXY7CisJaWYgKG1ncC0+Y3N1bV9mbGFnKSB7CisJCWlmICgoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUCkpIHx8CisJCSAgICAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUFY2KSkpIHsKKwkJCXNrYi0+Y3N1bSA9IG50b2hzKCh1MTYpIGNzdW0pOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9IVzsKKwkJfSBlbHNlCisJCQlteXJpMTBnZV92bGFuX2lwX2NzdW0oc2tiLCBudG9ocygodTE2KSBjc3VtKSk7CisJfQorCisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwltZ3AtPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteXJpMTBnZV90eF9kb25lKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AsIGludCBtY3BfaW5kZXgpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHggPSAmbWdwLT50eDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpZHgsIGxlbjsKKwlpbnQgbGltaXQgPSAwOworCisJd2hpbGUgKHR4LT5wa3RfZG9uZSAhPSBtY3BfaW5kZXgpIHsKKwkJaWR4ID0gdHgtPmRvbmUgJiB0eC0+bWFzazsKKwkJc2tiID0gdHgtPmluZm9baWR4XS5za2I7CisKKwkJLyogTWFyayBhcyBmcmVlICovCisJCXR4LT5pbmZvW2lkeF0uc2tiID0gTlVMTDsKKwkJaWYgKHR4LT5pbmZvW2lkeF0ubGFzdCkgeworCQkJdHgtPnBrdF9kb25lKys7CisJCQl0eC0+aW5mb1tpZHhdLmxhc3QgPSAwOworCQl9CisJCXR4LT5kb25lKys7CisJCWxlbiA9IHBjaV91bm1hcF9sZW4oJnR4LT5pbmZvW2lkeF0sIGxlbik7CisJCXBjaV91bm1hcF9sZW5fc2V0KCZ0eC0+aW5mb1tpZHhdLCBsZW4sIDApOworCQlpZiAoc2tiKSB7CisJCQltZ3AtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJbWdwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJaWYgKGxlbikKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsCisJCQkJCQkgcGNpX3VubWFwX2FkZHIoJnR4LT5pbmZvW2lkeF0sCisJCQkJCQkJCWJ1cyksIGxlbiwKKwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsZW4pCisJCQkJcGNpX3VubWFwX3BhZ2UocGRldiwKKwkJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKCZ0eC0+aW5mb1tpZHhdLAorCQkJCQkJCSAgICAgIGJ1cyksIGxlbiwKKwkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl9CisKKwkJLyogbGltaXQgcG90ZW50aWFsIGZvciBsaXZlbG9jayBieSBvbmx5IGhhbmRsaW5nCisJCSAqIDIgZnVsbCB0eCByaW5ncyBwZXIgY2FsbCAqLworCQlpZiAodW5saWtlbHkoKytsaW1pdCA+IDIgKiB0eC0+bWFzaykpCisJCQlicmVhazsKKwl9CisJLyogc3RhcnQgdGhlIHF1ZXVlIGlmIHdlJ3ZlIHN0b3BwZWQgaXQgKi8KKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChtZ3AtPmRldikKKwkgICAgJiYgdHgtPnJlcSAtIHR4LT5kb25lIDwgKHR4LT5tYXNrID4+IDEpKSB7CisJCW1ncC0+d2FrZV9xdWV1ZSsrOworCQluZXRpZl93YWtlX3F1ZXVlKG1ncC0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteXJpMTBnZV9jbGVhbl9yeF9kb25lKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AsIGludCAqbGltaXQpCit7CisJc3RydWN0IG15cmkxMGdlX3J4X2RvbmUgKnJ4X2RvbmUgPSAmbWdwLT5yeF9kb25lOworCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0cyA9IDA7CisJdW5zaWduZWQgbG9uZyByeF9vazsKKworCWludCBpZHggPSByeF9kb25lLT5pZHg7CisJaW50IGNudCA9IHJ4X2RvbmUtPmNudDsKKwl1MTYgbGVuZ3RoOworCXUxNiBjaGVja3N1bTsKKworCXdoaWxlIChyeF9kb25lLT5lbnRyeVtpZHhdLmxlbmd0aCAhPSAwICYmICpsaW1pdCAhPSAwKSB7CisJCWxlbmd0aCA9IG50b2hzKHJ4X2RvbmUtPmVudHJ5W2lkeF0ubGVuZ3RoKTsKKwkJcnhfZG9uZS0+ZW50cnlbaWR4XS5sZW5ndGggPSAwOworCQljaGVja3N1bSA9IG50b2hzKHJ4X2RvbmUtPmVudHJ5W2lkeF0uY2hlY2tzdW0pOworCQlpZiAobGVuZ3RoIDw9IG1ncC0+c21hbGxfYnl0ZXMpCisJCQlyeF9vayA9IG15cmkxMGdlX3J4X2RvbmUobWdwLCAmbWdwLT5yeF9zbWFsbCwKKwkJCQkJCSBtZ3AtPnNtYWxsX2J5dGVzLAorCQkJCQkJIGxlbmd0aCwgY2hlY2tzdW0pOworCQllbHNlCisJCQlyeF9vayA9IG15cmkxMGdlX3J4X2RvbmUobWdwLCAmbWdwLT5yeF9iaWcsCisJCQkJCQkgbWdwLT5kZXYtPm10dSArIEVUSF9ITEVOLAorCQkJCQkJIGxlbmd0aCwgY2hlY2tzdW0pOworCQlyeF9wYWNrZXRzICs9IHJ4X29rOworCQlyeF9ieXRlcyArPSByeF9vayAqICh1bnNpZ25lZCBsb25nKWxlbmd0aDsKKwkJY250Kys7CisJCWlkeCA9IGNudCAmIChteXJpMTBnZV9tYXhfaW50cl9zbG90cyAtIDEpOworCisJCS8qIGxpbWl0IHBvdGVudGlhbCBmb3IgbGl2ZWxvY2sgYnkgb25seSBoYW5kbGluZyBhCisJCSAqIGxpbWl0ZWQgbnVtYmVyIG9mIGZyYW1lcy4gKi8KKwkJKCpsaW1pdCktLTsKKwl9CisJcnhfZG9uZS0+aWR4ID0gaWR4OworCXJ4X2RvbmUtPmNudCA9IGNudDsKKwltZ3AtPnN0YXRzLnJ4X3BhY2tldHMgKz0gcnhfcGFja2V0czsKKwltZ3AtPnN0YXRzLnJ4X2J5dGVzICs9IHJ4X2J5dGVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXlyaTEwZ2VfY2hlY2tfc3RhdGJsb2NrKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IG1jcF9pcnFfZGF0YSAqc3RhdHMgPSBtZ3AtPmZ3X3N0YXRzOworCisJaWYgKHVubGlrZWx5KHN0YXRzLT5zdGF0c191cGRhdGVkKSkgeworCQlpZiAobWdwLT5saW5rX3N0YXRlICE9IHN0YXRzLT5saW5rX3VwKSB7CisJCQltZ3AtPmxpbmtfc3RhdGUgPSBzdGF0cy0+bGlua191cDsKKwkJCWlmIChtZ3AtPmxpbmtfc3RhdGUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJteXJpMTBnZTogJXM6IGxpbmsgdXBcbiIsCisJCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJCQluZXRpZl9jYXJyaWVyX29uKG1ncC0+ZGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAibXlyaTEwZ2U6ICVzOiBsaW5rIGRvd25cbiIsCisJCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJCQluZXRpZl9jYXJyaWVyX29mZihtZ3AtPmRldik7CisJCQl9CisJCX0KKwkJaWYgKG1ncC0+cmRtYV90YWdzX2F2YWlsYWJsZSAhPQorCQkgICAgbnRvaGwobWdwLT5md19zdGF0cy0+cmRtYV90YWdzX2F2YWlsYWJsZSkpIHsKKwkJCW1ncC0+cmRtYV90YWdzX2F2YWlsYWJsZSA9CisJCQkgICAgbnRvaGwobWdwLT5md19zdGF0cy0+cmRtYV90YWdzX2F2YWlsYWJsZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJteXJpMTBnZTogJXM6IFJETUEgdGltZWQgb3V0ISAiCisJCQkgICAgICAgIiVkIHRhZ3MgbGVmdFxuIiwgbWdwLT5kZXYtPm5hbWUsCisJCQkgICAgICAgbWdwLT5yZG1hX3RhZ3NfYXZhaWxhYmxlKTsKKwkJfQorCQltZ3AtPmRvd25fY250ICs9IHN0YXRzLT5saW5rX2Rvd247CisJCWlmIChzdGF0cy0+bGlua19kb3duKQorCQkJd2FrZV91cCgmbWdwLT5kb3duX3dxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbXlyaTEwZ2VfcnhfZG9uZSAqcnhfZG9uZSA9ICZtZ3AtPnJ4X2RvbmU7CisJaW50IGxpbWl0LCBvcmlnX2xpbWl0LCB3b3JrX2RvbmU7CisKKwkvKiBwcm9jZXNzIGFzIG1hbnkgcnggZXZlbnRzIGFzIE5BUEkgd2lsbCBhbGxvdyAqLworCWxpbWl0ID0gbWluKCpidWRnZXQsIG5ldGRldi0+cXVvdGEpOworCW9yaWdfbGltaXQgPSBsaW1pdDsKKwlteXJpMTBnZV9jbGVhbl9yeF9kb25lKG1ncCwgJmxpbWl0KTsKKwl3b3JrX2RvbmUgPSBvcmlnX2xpbWl0IC0gbGltaXQ7CisJKmJ1ZGdldCAtPSB3b3JrX2RvbmU7CisJbmV0ZGV2LT5xdW90YSAtPSB3b3JrX2RvbmU7CisKKwlpZiAocnhfZG9uZS0+ZW50cnlbcnhfZG9uZS0+aWR4XS5sZW5ndGggPT0gMCB8fCAhbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCW5ldGlmX3J4X2NvbXBsZXRlKG5ldGRldik7CisJCV9fcmF3X3dyaXRlbChodG9ubCgzKSwgbWdwLT5pcnFfY2xhaW0pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteXJpMTBnZV9pbnRyKGludCBpcnEsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IGFyZzsKKwlzdHJ1Y3QgbWNwX2lycV9kYXRhICpzdGF0cyA9IG1ncC0+Zndfc3RhdHM7CisJc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHggPSAmbWdwLT50eDsKKwl1MzIgc2VuZF9kb25lX2NvdW50OworCWludCBpOworCisJLyogbWFrZSBzdXJlIGl0IGlzIG91ciBJUlEsIGFuZCB0aGF0IHRoZSBETUEgaGFzIGZpbmlzaGVkICovCisJaWYgKHVubGlrZWx5KCFzdGF0cy0+dmFsaWQpKQorCQlyZXR1cm4gKElSUV9OT05FKTsKKworCS8qIGxvdyBiaXQgaW5kaWNhdGVzIHJlY2VpdmVzIGFyZSBwcmVzZW50LCBzbyBzY2hlZHVsZQorCSAqIG5hcGkgcG9sbCBoYW5kbGVyICovCisJaWYgKHN0YXRzLT52YWxpZCAmIDEpCisJCW5ldGlmX3J4X3NjaGVkdWxlKG1ncC0+ZGV2KTsKKworCWlmICghbWdwLT5tc2lfZW5hYmxlZCkgeworCQlfX3Jhd193cml0ZWwoMCwgbWdwLT5pcnFfZGVhc3NlcnQpOworCQlpZiAoIW15cmkxMGdlX2RlYXNzZXJ0X3dhaXQpCisJCQlzdGF0cy0+dmFsaWQgPSAwOworCQltYigpOworCX0gZWxzZQorCQlzdGF0cy0+dmFsaWQgPSAwOworCisJLyogV2FpdCBmb3IgSVJRIGxpbmUgdG8gZ28gbG93LCBpZiB1c2luZyBJTlR4ICovCisJaSA9IDA7CisJd2hpbGUgKDEpIHsKKwkJaSsrOworCQkvKiBjaGVjayBmb3IgdHJhbnNtaXQgY29tcGxldGVzIGFuZCByZWNlaXZlcyAqLworCQlzZW5kX2RvbmVfY291bnQgPSBudG9obChzdGF0cy0+c2VuZF9kb25lX2NvdW50KTsKKwkJaWYgKHNlbmRfZG9uZV9jb3VudCAhPSB0eC0+cGt0X2RvbmUpCisJCQlteXJpMTBnZV90eF9kb25lKG1ncCwgKGludClzZW5kX2RvbmVfY291bnQpOworCQlpZiAodW5saWtlbHkoaSA+IG15cmkxMGdlX21heF9pcnFfbG9vcHMpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJteXJpMTBnZTogJXM6IGlycSBzdHVjaz9cbiIsCisJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJc3RhdHMtPnZhbGlkID0gMDsKKwkJCXNjaGVkdWxlX3dvcmsoJm1ncC0+d2F0Y2hkb2dfd29yayk7CisJCX0KKwkJaWYgKGxpa2VseShzdGF0cy0+dmFsaWQgPT0gMCkpCisJCQlicmVhazsKKwkJY3B1X3JlbGF4KCk7CisJCWJhcnJpZXIoKTsKKwl9CisKKwlteXJpMTBnZV9jaGVja19zdGF0YmxvY2sobWdwKTsKKworCV9fcmF3X3dyaXRlbChodG9ubCgzKSwgbWdwLT5pcnFfY2xhaW0gKyAxKTsKKwlyZXR1cm4gKElSUV9IQU5ETEVEKTsKK30KKworc3RhdGljIGludAorbXlyaTEwZ2VfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwljbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK215cmkxMGdlX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzdHJsY3B5KGluZm8tPmRyaXZlciwgIm15cmkxMGdlIiwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgTVlSSTEwR0VfVkVSU0lPTl9TVFIsIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7CisJc3RybGNweShpbmZvLT5md192ZXJzaW9uLCBtZ3AtPmZ3X3ZlcnNpb24sIHNpemVvZihpbmZvLT5md192ZXJzaW9uKSk7CisJc3RybGNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobWdwLT5wZGV2KSwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7Cit9CisKK3N0YXRpYyBpbnQKK215cmkxMGdlX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwljb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IG1ncC0+aW50cl9jb2FsX2RlbGF5OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitteXJpMTBnZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwltZ3AtPmludHJfY29hbF9kZWxheSA9IGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOworCV9fcmF3X3dyaXRlbChodG9ubChtZ3AtPmludHJfY29hbF9kZWxheSksIG1ncC0+aW50cl9jb2FsX2RlbGF5X3B0cik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitteXJpMTBnZV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlwYXVzZS0+YXV0b25lZyA9IDA7CisJcGF1c2UtPnJ4X3BhdXNlID0gbWdwLT5wYXVzZTsKKwlwYXVzZS0+dHhfcGF1c2UgPSBtZ3AtPnBhdXNlOworfQorCitzdGF0aWMgaW50CitteXJpMTBnZV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAocGF1c2UtPnR4X3BhdXNlICE9IG1ncC0+cGF1c2UpCisJCXJldHVybiBteXJpMTBnZV9jaGFuZ2VfcGF1c2UobWdwLCBwYXVzZS0+dHhfcGF1c2UpOworCWlmIChwYXVzZS0+cnhfcGF1c2UgIT0gbWdwLT5wYXVzZSkKKwkJcmV0dXJuIG15cmkxMGdlX2NoYW5nZV9wYXVzZShtZ3AsIHBhdXNlLT50eF9wYXVzZSk7CisJaWYgKHBhdXNlLT5hdXRvbmVnICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXlyaTEwZ2VfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IG1ncC0+cnhfc21hbGwubWFzayArIDE7CisJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBtZ3AtPnJ4X2JpZy5tYXNrICsgMTsKKwlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBtZ3AtPnJ4X3NtYWxsLm1hc2sgKyAxOworCXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IHJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmc7CisJcmluZy0+cnhfcGVuZGluZyA9IHJpbmctPnJ4X21heF9wZW5kaW5nOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSByaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZzsKKwlyaW5nLT50eF9wZW5kaW5nID0gcmluZy0+dHhfbWF4X3BlbmRpbmc7Cit9CisKK3N0YXRpYyB1MzIgbXlyaTEwZ2VfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAobWdwLT5jc3VtX2ZsYWcpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2Vfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGNzdW1fZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAoY3N1bV9lbmFibGVkKQorCQltZ3AtPmNzdW1fZmxhZyA9IE1YR0VGV19GTEFHU19DS1NVTTsKKwllbHNlCisJCW1ncC0+Y3N1bV9mbGFnID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbXlyaTEwZ2VfZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0geworCSJyeF9wYWNrZXRzIiwgInR4X3BhY2tldHMiLCAicnhfYnl0ZXMiLCAidHhfYnl0ZXMiLCAicnhfZXJyb3JzIiwKKwkidHhfZXJyb3JzIiwgInJ4X2Ryb3BwZWQiLCAidHhfZHJvcHBlZCIsICJtdWx0aWNhc3QiLCAiY29sbGlzaW9ucyIsCisJInJ4X2xlbmd0aF9lcnJvcnMiLCAicnhfb3Zlcl9lcnJvcnMiLCAicnhfY3JjX2Vycm9ycyIsCisJInJ4X2ZyYW1lX2Vycm9ycyIsICJyeF9maWZvX2Vycm9ycyIsICJyeF9taXNzZWRfZXJyb3JzIiwKKwkidHhfYWJvcnRlZF9lcnJvcnMiLCAidHhfY2Fycmllcl9lcnJvcnMiLCAidHhfZmlmb19lcnJvcnMiLAorCSJ0eF9oZWFydGJlYXRfZXJyb3JzIiwgInR4X3dpbmRvd19lcnJvcnMiLAorCS8qIGRldmljZS1zcGVjaWZpYyBzdGF0cyAqLworCSJyZWFkX2RtYV9id19NQnMiLCAid3JpdGVfZG1hX2J3X01CcyIsICJyZWFkX3dyaXRlX2RtYV9id19NQnMiLAorCSJzZXJpYWxfbnVtYmVyIiwgInR4X3BrdF9zdGFydCIsICJ0eF9wa3RfZG9uZSIsCisJInR4X3JlcSIsICJ0eF9kb25lIiwgInJ4X3NtYWxsX2NudCIsICJyeF9iaWdfY250IiwKKwkid2FrZV9xdWV1ZSIsICJzdG9wX3F1ZXVlIiwgIndhdGNoZG9nX3Jlc2V0cyIsICJ0eF9saW5lYXJpemVkIiwKKwkibGlua191cCIsICJkcm9wcGVkX2xpbmtfb3ZlcmZsb3ciLCAiZHJvcHBlZF9saW5rX2Vycm9yX29yX2ZpbHRlcmVkIiwKKwkiZHJvcHBlZF9ydW50IiwgImRyb3BwZWRfb3ZlcnJ1biIsICJkcm9wcGVkX25vX3NtYWxsX2J1ZmZlciIsCisJImRyb3BwZWRfbm9fYmlnX2J1ZmZlciIKK307CisKKyNkZWZpbmUgTVlSSTEwR0VfTkVUX1NUQVRTX0xFTiAgICAgIDIxCisjZGVmaW5lIE1ZUkkxMEdFX1NUQVRTX0xFTiAgc2l6ZW9mKG15cmkxMGdlX2dzdHJpbmdzX3N0YXRzKSAvIEVUSF9HU1RSSU5HX0xFTgorCitzdGF0aWMgdm9pZAorbXlyaTEwZ2VfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwgdTggKiBkYXRhKQoreworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCW1lbWNweShkYXRhLCAqbXlyaTEwZ2VfZ3N0cmluZ3Nfc3RhdHMsCisJCSAgICAgICBzaXplb2YobXlyaTEwZ2VfZ3N0cmluZ3Nfc3RhdHMpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG15cmkxMGdlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJldHVybiBNWVJJMTBHRV9TVEFUU19MRU47Cit9CisKK3N0YXRpYyB2b2lkCitteXJpMTBnZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKiBkYXRhKQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1ZUkkxMEdFX05FVF9TVEFUU19MRU47IGkrKykKKwkJZGF0YVtpXSA9ICgodW5zaWduZWQgbG9uZyAqKSZtZ3AtPnN0YXRzKVtpXTsKKworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5yZWFkX2RtYTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+d3JpdGVfZG1hOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5yZWFkX3dyaXRlX2RtYTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+c2VyaWFsX251bWJlcjsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+dHgucGt0X3N0YXJ0OworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT50eC5wa3RfZG9uZTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+dHgucmVxOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT50eC5kb25lOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5yeF9zbWFsbC5jbnQ7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJ4X2JpZy5jbnQ7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPndha2VfcXVldWU7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnN0b3BfcXVldWU7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPndhdGNoZG9nX3Jlc2V0czsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+dHhfbGluZWFyaXplZDsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmxpbmtfdXApOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9saW5rX292ZXJmbG93KTsKKwlkYXRhW2krK10gPQorCSAgICAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfbGlua19lcnJvcl9vcl9maWx0ZXJlZCk7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX3J1bnQpOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9vdmVycnVuKTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfbm9fc21hbGxfYnVmZmVyKTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfbm9fYmlnX2J1ZmZlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbXlyaTEwZ2VfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncyA9IG15cmkxMGdlX2dldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8gPSBteXJpMTBnZV9nZXRfZHJ2aW5mbywKKwkuZ2V0X2NvYWxlc2NlID0gbXlyaTEwZ2VfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UgPSBteXJpMTBnZV9zZXRfY29hbGVzY2UsCisJLmdldF9wYXVzZXBhcmFtID0gbXlyaTEwZ2VfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtID0gbXlyaTEwZ2Vfc2V0X3BhdXNlcGFyYW0sCisJLmdldF9yaW5ncGFyYW0gPSBteXJpMTBnZV9nZXRfcmluZ3BhcmFtLAorCS5nZXRfcnhfY3N1bSA9IG15cmkxMGdlX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSA9IG15cmkxMGdlX3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKKwkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAorI2lmZGVmIE5FVElGX0ZfVFNPCisJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisjZW5kaWYKKwkuZ2V0X3N0cmluZ3MgPSBteXJpMTBnZV9nZXRfc3RyaW5ncywKKwkuZ2V0X3N0YXRzX2NvdW50ID0gbXlyaTEwZ2VfZ2V0X3N0YXRzX2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IG15cmkxMGdlX2dldF9ldGh0b29sX3N0YXRzCit9OworCitzdGF0aWMgaW50IG15cmkxMGdlX2FsbG9jYXRlX3JpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKKwlzdHJ1Y3QgbXlyaTEwZ2VfY21kIGNtZDsKKwlpbnQgdHhfcmluZ19zaXplLCByeF9yaW5nX3NpemU7CisJaW50IHR4X3JpbmdfZW50cmllcywgcnhfcmluZ19lbnRyaWVzOworCWludCBpLCBzdGF0dXM7CisJc2l6ZV90IGJ5dGVzOworCisJbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIGdldCByaW5nIHNpemVzICovCisKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfR0VUX1NFTkRfUklOR19TSVpFLCAmY21kLCAwKTsKKwl0eF9yaW5nX3NpemUgPSBjbWQuZGF0YTA7CisJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfUlhfUklOR19TSVpFLCAmY21kLCAwKTsKKwlyeF9yaW5nX3NpemUgPSBjbWQuZGF0YTA7CisKKwl0eF9yaW5nX2VudHJpZXMgPSB0eF9yaW5nX3NpemUgLyBzaXplb2Yoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQpOworCXJ4X3JpbmdfZW50cmllcyA9IHJ4X3Jpbmdfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgbWNwX2RtYV9hZGRyKTsKKwltZ3AtPnR4Lm1hc2sgPSB0eF9yaW5nX2VudHJpZXMgLSAxOworCW1ncC0+cnhfc21hbGwubWFzayA9IG1ncC0+cnhfYmlnLm1hc2sgPSByeF9yaW5nX2VudHJpZXMgLSAxOworCisJLyogYWxsb2NhdGUgdGhlIGhvc3Qgc2hhZG93IHJpbmdzICovCisKKwlieXRlcyA9IDggKyAoTVlSSTEwR0VfTUFYX1NFTkRfREVTQ19UU08gKyA0KQorCSAgICAqIHNpemVvZigqbWdwLT50eC5yZXFfbGlzdCk7CisJbWdwLT50eC5yZXFfYnl0ZXMgPSBremFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAobWdwLT50eC5yZXFfYnl0ZXMgPT0gTlVMTCkKKwkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CisKKwkvKiBlbnN1cmUgcmVxX2xpc3QgZW50cmllcyBhcmUgYWxpZ25lZCB0byA4IGJ5dGVzICovCisJbWdwLT50eC5yZXFfbGlzdCA9IChzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCAqKQorCSAgICBBTElHTigodW5zaWduZWQgbG9uZyltZ3AtPnR4LnJlcV9ieXRlcywgOCk7CisKKwlieXRlcyA9IHJ4X3JpbmdfZW50cmllcyAqIHNpemVvZigqbWdwLT5yeF9zbWFsbC5zaGFkb3cpOworCW1ncC0+cnhfc21hbGwuc2hhZG93ID0ga3phbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncC0+cnhfc21hbGwuc2hhZG93ID09IE5VTEwpCisJCWdvdG8gYWJvcnRfd2l0aF90eF9yZXFfYnl0ZXM7CisKKwlieXRlcyA9IHJ4X3JpbmdfZW50cmllcyAqIHNpemVvZigqbWdwLT5yeF9iaWcuc2hhZG93KTsKKwltZ3AtPnJ4X2JpZy5zaGFkb3cgPSBremFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAobWdwLT5yeF9iaWcuc2hhZG93ID09IE5VTEwpCisJCWdvdG8gYWJvcnRfd2l0aF9yeF9zbWFsbF9zaGFkb3c7CisKKwkvKiBhbGxvY2F0ZSB0aGUgaG9zdCBpbmZvIHJpbmdzICovCisKKwlieXRlcyA9IHR4X3JpbmdfZW50cmllcyAqIHNpemVvZigqbWdwLT50eC5pbmZvKTsKKwltZ3AtPnR4LmluZm8gPSBremFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAobWdwLT50eC5pbmZvID09IE5VTEwpCisJCWdvdG8gYWJvcnRfd2l0aF9yeF9iaWdfc2hhZG93OworCisJYnl0ZXMgPSByeF9yaW5nX2VudHJpZXMgKiBzaXplb2YoKm1ncC0+cnhfc21hbGwuaW5mbyk7CisJbWdwLT5yeF9zbWFsbC5pbmZvID0ga3phbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncC0+cnhfc21hbGwuaW5mbyA9PSBOVUxMKQorCQlnb3RvIGFib3J0X3dpdGhfdHhfaW5mbzsKKworCWJ5dGVzID0gcnhfcmluZ19lbnRyaWVzICogc2l6ZW9mKCptZ3AtPnJ4X2JpZy5pbmZvKTsKKwltZ3AtPnJ4X2JpZy5pbmZvID0ga3phbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncC0+cnhfYmlnLmluZm8gPT0gTlVMTCkKKwkJZ290byBhYm9ydF93aXRoX3J4X3NtYWxsX2luZm87CisKKwkvKiBGaWxsIHRoZSByZWNlaXZlIHJpbmdzICovCisKKwlmb3IgKGkgPSAwOyBpIDw9IG1ncC0+cnhfc21hbGwubWFzazsgaSsrKSB7CisJCXN0YXR1cyA9IG15cmkxMGdlX2dldGJ1ZigmbWdwLT5yeF9zbWFsbCwgbWdwLT5wZGV2LAorCQkJCQkgbWdwLT5zbWFsbF9ieXRlcywgaSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJteXJpMTBnZTogJXM6IGFsbG9jZWQgb25seSAlZCBzbWFsbCBidWZzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgaSk7CisJCQlnb3RvIGFib3J0X3dpdGhfcnhfc21hbGxfcmluZzsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPD0gbWdwLT5yeF9iaWcubWFzazsgaSsrKSB7CisJCXN0YXR1cyA9CisJCSAgICBteXJpMTBnZV9nZXRidWYoJm1ncC0+cnhfYmlnLCBtZ3AtPnBkZXYsCisJCQkJICAgIGRldi0+bXR1ICsgRVRIX0hMRU4sIGkpOworCQlpZiAoc3RhdHVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBhbGxvY2VkIG9ubHkgJWQgYmlnIGJ1ZnNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKKwkJCWdvdG8gYWJvcnRfd2l0aF9yeF9iaWdfcmluZzsKKwkJfQorCX0KKworCXJldHVybiAwOworCithYm9ydF93aXRoX3J4X2JpZ19yaW5nOgorCWZvciAoaSA9IDA7IGkgPD0gbWdwLT5yeF9iaWcubWFzazsgaSsrKSB7CisJCWlmIChtZ3AtPnJ4X2JpZy5pbmZvW2ldLnNrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkobWdwLT5yeF9iaWcuaW5mb1tpXS5za2IpOworCQlpZiAocGNpX3VubWFwX2xlbigmbWdwLT5yeF9iaWcuaW5mb1tpXSwgbGVuKSkKKwkJCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LAorCQkJCQkgcGNpX3VubWFwX2FkZHIoJm1ncC0+cnhfYmlnLmluZm9baV0sCisJCQkJCQkJYnVzKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfYmlnLmluZm9baV0sCisJCQkJCQkgICAgICAgbGVuKSwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJfQorCithYm9ydF93aXRoX3J4X3NtYWxsX3Jpbmc6CisJZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X3NtYWxsLm1hc2s7IGkrKykgeworCQlpZiAobWdwLT5yeF9zbWFsbC5pbmZvW2ldLnNrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkobWdwLT5yeF9zbWFsbC5pbmZvW2ldLnNrYik7CisJCWlmIChwY2lfdW5tYXBfbGVuKCZtZ3AtPnJ4X3NtYWxsLmluZm9baV0sIGxlbikpCisJCQlwY2lfdW5tYXBfc2luZ2xlKG1ncC0+cGRldiwKKwkJCQkJIHBjaV91bm1hcF9hZGRyKCZtZ3AtPnJ4X3NtYWxsLmluZm9baV0sCisJCQkJCQkJYnVzKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfc21hbGwuaW5mb1tpXSwKKwkJCQkJCSAgICAgICBsZW4pLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9CisJa2ZyZWUobWdwLT5yeF9iaWcuaW5mbyk7CisKK2Fib3J0X3dpdGhfcnhfc21hbGxfaW5mbzoKKwlrZnJlZShtZ3AtPnJ4X3NtYWxsLmluZm8pOworCithYm9ydF93aXRoX3R4X2luZm86CisJa2ZyZWUobWdwLT50eC5pbmZvKTsKKworYWJvcnRfd2l0aF9yeF9iaWdfc2hhZG93OgorCWtmcmVlKG1ncC0+cnhfYmlnLnNoYWRvdyk7CisKK2Fib3J0X3dpdGhfcnhfc21hbGxfc2hhZG93OgorCWtmcmVlKG1ncC0+cnhfc21hbGwuc2hhZG93KTsKKworYWJvcnRfd2l0aF90eF9yZXFfYnl0ZXM6CisJa2ZyZWUobWdwLT50eC5yZXFfYnl0ZXMpOworCW1ncC0+dHgucmVxX2J5dGVzID0gTlVMTDsKKwltZ3AtPnR4LnJlcV9saXN0ID0gTlVMTDsKKworYWJvcnRfd2l0aF9ub3RoaW5nOgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG15cmkxMGdlX2ZyZWVfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHg7CisJaW50IGksIGxlbiwgaWR4OworCisJbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPD0gbWdwLT5yeF9iaWcubWFzazsgaSsrKSB7CisJCWlmIChtZ3AtPnJ4X2JpZy5pbmZvW2ldLnNrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkobWdwLT5yeF9iaWcuaW5mb1tpXS5za2IpOworCQlpZiAocGNpX3VubWFwX2xlbigmbWdwLT5yeF9iaWcuaW5mb1tpXSwgbGVuKSkKKwkJCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LAorCQkJCQkgcGNpX3VubWFwX2FkZHIoJm1ncC0+cnhfYmlnLmluZm9baV0sCisJCQkJCQkJYnVzKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfYmlnLmluZm9baV0sCisJCQkJCQkgICAgICAgbGVuKSwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X3NtYWxsLm1hc2s7IGkrKykgeworCQlpZiAobWdwLT5yeF9zbWFsbC5pbmZvW2ldLnNrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkobWdwLT5yeF9zbWFsbC5pbmZvW2ldLnNrYik7CisJCWlmIChwY2lfdW5tYXBfbGVuKCZtZ3AtPnJ4X3NtYWxsLmluZm9baV0sIGxlbikpCisJCQlwY2lfdW5tYXBfc2luZ2xlKG1ncC0+cGRldiwKKwkJCQkJIHBjaV91bm1hcF9hZGRyKCZtZ3AtPnJ4X3NtYWxsLmluZm9baV0sCisJCQkJCQkJYnVzKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfc21hbGwuaW5mb1tpXSwKKwkJCQkJCSAgICAgICBsZW4pLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9CisKKwl0eCA9ICZtZ3AtPnR4OworCXdoaWxlICh0eC0+ZG9uZSAhPSB0eC0+cmVxKSB7CisJCWlkeCA9IHR4LT5kb25lICYgdHgtPm1hc2s7CisJCXNrYiA9IHR4LT5pbmZvW2lkeF0uc2tiOworCisJCS8qIE1hcmsgYXMgZnJlZSAqLworCQl0eC0+aW5mb1tpZHhdLnNrYiA9IE5VTEw7CisJCXR4LT5kb25lKys7CisJCWxlbiA9IHBjaV91bm1hcF9sZW4oJnR4LT5pbmZvW2lkeF0sIGxlbik7CisJCXBjaV91bm1hcF9sZW5fc2V0KCZ0eC0+aW5mb1tpZHhdLCBsZW4sIDApOworCQlpZiAoc2tiKSB7CisJCQltZ3AtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlpZiAobGVuKQorCQkJCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LAorCQkJCQkJIHBjaV91bm1hcF9hZGRyKCZ0eC0+aW5mb1tpZHhdLAorCQkJCQkJCQlidXMpLCBsZW4sCisJCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCX0gZWxzZSB7CisJCQlpZiAobGVuKQorCQkJCXBjaV91bm1hcF9wYWdlKG1ncC0+cGRldiwKKwkJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKCZ0eC0+aW5mb1tpZHhdLAorCQkJCQkJCSAgICAgIGJ1cyksIGxlbiwKKwkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl9CisJfQorCWtmcmVlKG1ncC0+cnhfYmlnLmluZm8pOworCisJa2ZyZWUobWdwLT5yeF9zbWFsbC5pbmZvKTsKKworCWtmcmVlKG1ncC0+dHguaW5mbyk7CisKKwlrZnJlZShtZ3AtPnJ4X2JpZy5zaGFkb3cpOworCisJa2ZyZWUobWdwLT5yeF9zbWFsbC5zaGFkb3cpOworCisJa2ZyZWUobWdwLT50eC5yZXFfYnl0ZXMpOworCW1ncC0+dHgucmVxX2J5dGVzID0gTlVMTDsKKwltZ3AtPnR4LnJlcV9saXN0ID0gTlVMTDsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKKwlzdHJ1Y3QgbXlyaTEwZ2VfY21kIGNtZDsKKwlpbnQgc3RhdHVzLCBiaWdfcG93MjsKKworCW1ncCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobWdwLT5ydW5uaW5nICE9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1NUQVJUSU5HOworCXN0YXR1cyA9IG15cmkxMGdlX3Jlc2V0KG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgcmVzZXRcbiIsIGRldi0+bmFtZSk7CisJCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIGRlY2lkZSB3aGF0IHNtYWxsIGJ1ZmZlciBzaXplIHRvIHVzZS4gIEZvciBnb29kIFRDUCByeAorCSAqIHBlcmZvcm1hbmNlLCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90IHJlY2VpdmUgMTUxNCBieXRlCisJICogZnJhbWVzIGludG8ganVtYm8gYnVmZmVycywgYXMgaXQgY29uZnVzZXMgdGhlIHNvY2tldCBidWZmZXIKKwkgKiBhY2NvdW50aW5nIGNvZGUsIGxlYWRpbmcgdG8gZHJvcHMgYW5kIGVycmF0aWMgcGVyZm9ybWFuY2UuCisJICovCisKKwlpZiAoZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKQorCQltZ3AtPnNtYWxsX2J5dGVzID0gMTI4OwkvKiBlbm91Z2ggZm9yIGEgVENQIGhlYWRlciAqLworCWVsc2UKKwkJbWdwLT5zbWFsbF9ieXRlcyA9IEVUSF9GUkFNRV9MRU47CS8qIGVub3VnaCBmb3IgYW4gRVRIX0RBVEFfTEVOIGZyYW1lICovCisKKwkvKiBPdmVycmlkZSB0aGUgc21hbGwgYnVmZmVyIHNpemU/ICovCisJaWYgKG15cmkxMGdlX3NtYWxsX2J5dGVzID4gMCkKKwkJbWdwLT5zbWFsbF9ieXRlcyA9IG15cmkxMGdlX3NtYWxsX2J5dGVzOworCisJLyogSWYgdGhlIHVzZXIgc2V0cyBhbiBvYnNjZW5lbHkgc21hbGwgTVRVLCBhZGp1c3QgdGhlIHNtYWxsCisJICogYnl0ZXMgZG93biB0byBuZWFybHkgbm90aGluZyAqLworCWlmIChtZ3AtPnNtYWxsX2J5dGVzID49IChkZXYtPm10dSArIEVUSF9ITEVOKSkKKwkJbWdwLT5zbWFsbF9ieXRlcyA9IDY0OworCisJLyogZ2V0IHRoZSBsYW5haSBwb2ludGVycyB0byB0aGUgc2VuZCBhbmQgcmVjZWl2ZSByaW5ncyAqLworCisJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfU0VORF9PRkZTRVQsICZjbWQsIDApOworCW1ncC0+dHgubGFuYWkgPQorCSAgICAoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgX19pb21lbSAqKShtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCisJc3RhdHVzIHw9CisJICAgIG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfU01BTExfUlhfT0ZGU0VULCAmY21kLCAwKTsKKwltZ3AtPnJ4X3NtYWxsLmxhbmFpID0KKwkgICAgKHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2IF9faW9tZW0gKikobWdwLT5zcmFtICsgY21kLmRhdGEwKTsKKworCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfR0VUX0JJR19SWF9PRkZTRVQsICZjbWQsIDApOworCW1ncC0+cnhfYmlnLmxhbmFpID0KKwkgICAgKHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2IF9faW9tZW0gKikobWdwLT5zcmFtICsgY21kLmRhdGEwKTsKKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBnZXQgcmluZyBzaXplcyBvciBsb2NhdGlvbnNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQltZ3AtPnJ1bm5pbmcgPSBNWVJJMTBHRV9FVEhfU1RPUFBFRDsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAobWdwLT5tdHJyID49IDApIHsKKwkJbWdwLT50eC53Y19maWZvID0gKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgMHgyMDAwMDA7CisJCW1ncC0+cnhfc21hbGwud2NfZmlmbyA9ICh1OCBfX2lvbWVtICopIG1ncC0+c3JhbSArIDB4MzAwMDAwOworCQltZ3AtPnJ4X2JpZy53Y19maWZvID0gKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgMHgzNDAwMDA7CisJfSBlbHNlIHsKKwkJbWdwLT50eC53Y19maWZvID0gTlVMTDsKKwkJbWdwLT5yeF9zbWFsbC53Y19maWZvID0gTlVMTDsKKwkJbWdwLT5yeF9iaWcud2NfZmlmbyA9IE5VTEw7CisJfQorCisJc3RhdHVzID0gbXlyaTEwZ2VfYWxsb2NhdGVfcmluZ3MoZGV2KTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gYWJvcnRfd2l0aF9ub3RoaW5nOworCisJLyogRmlybXdhcmUgbmVlZHMgdGhlIGJpZyBidWZmIHNpemUgYXMgYSBwb3dlciBvZiAyLiAgTGllIGFuZAorCSAqIHRlbGwgaGltIHRoZSBidWZmZXIgaXMgbGFyZ2VyLCBiZWNhdXNlIHdlIG9ubHkgdXNlIDEKKwkgKiBidWZmZXIvcGt0LCBhbmQgdGhlIG10dSB3aWxsIHByZXZlbnQgb3ZlcnJ1bnMuCisJICovCisJYmlnX3BvdzIgPSBkZXYtPm10dSArIEVUSF9ITEVOICsgTVhHRUZXX1BBRDsKKwl3aGlsZSAoKGJpZ19wb3cyICYgKGJpZ19wb3cyIC0gMSkpICE9IDApCisJCWJpZ19wb3cyKys7CisKKwkvKiBub3cgZ2l2ZSBmaXJtd2FyZSBidWZmZXJzIHNpemVzLCBhbmQgTVRVICovCisJY21kLmRhdGEwID0gZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTjsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX01UVSwgJmNtZCwgMCk7CisJY21kLmRhdGEwID0gbWdwLT5zbWFsbF9ieXRlczsKKwlzdGF0dXMgfD0KKwkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9TTUFMTF9CVUZGRVJfU0laRSwgJmNtZCwgMCk7CisJY21kLmRhdGEwID0gYmlnX3BvdzI7CisJc3RhdHVzIHw9CisJICAgIG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9TRVRfQklHX0JVRkZFUl9TSVpFLCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBDb3VsZG4ndCBzZXQgYnVmZmVyIHNpemVzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBhYm9ydF93aXRoX3JpbmdzOworCX0KKworCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+Zndfc3RhdHNfYnVzKTsKKwljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5md19zdGF0c19idXMpOworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9TRVRfU1RBVFNfRE1BLCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBDb3VsZG4ndCBzZXQgc3RhdHMgRE1BXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBhYm9ydF93aXRoX3JpbmdzOworCX0KKworCW1ncC0+bGlua19zdGF0ZSA9IC0xOworCW1ncC0+cmRtYV90YWdzX2F2YWlsYWJsZSA9IDE1OworCisJbmV0aWZfcG9sbF9lbmFibGUobWdwLT5kZXYpOwkvKiBtdXN0IGhhcHBlbiBwcmlvciB0byBhbnkgaXJxICovCisKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfRVRIRVJORVRfVVAsICZjbWQsIDApOworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IGJyaW5nIHVwIGxpbmtcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CisJfQorCisJbWdwLT53YWtlX3F1ZXVlID0gMDsKKwltZ3AtPnN0b3BfcXVldWUgPSAwOworCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9SVU5OSU5HOworCW1ncC0+d2F0Y2hkb2dfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBteXJpMTBnZV93YXRjaGRvZ190aW1lb3V0ICogSFo7CisJYWRkX3RpbWVyKCZtZ3AtPndhdGNoZG9nX3RpbWVyKTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJcmV0dXJuIDA7CisKK2Fib3J0X3dpdGhfcmluZ3M6CisJbXlyaTEwZ2VfZnJlZV9yaW5ncyhkZXYpOworCithYm9ydF93aXRoX25vdGhpbmc6CisJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1NUT1BQRUQ7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXN0cnVjdCBteXJpMTBnZV9jbWQgY21kOworCWludCBzdGF0dXMsIG9sZF9kb3duX2NudDsKKworCW1ncCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobWdwLT5ydW5uaW5nICE9IE1ZUkkxMEdFX0VUSF9SVU5OSU5HKQorCQlyZXR1cm4gMDsKKworCWlmIChtZ3AtPnR4LnJlcV9ieXRlcyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWRlbF90aW1lcl9zeW5jKCZtZ3AtPndhdGNoZG9nX3RpbWVyKTsKKwltZ3AtPnJ1bm5pbmcgPSBNWVJJMTBHRV9FVEhfU1RPUFBJTkc7CisJbmV0aWZfcG9sbF9kaXNhYmxlKG1ncC0+ZGV2KTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlvbGRfZG93bl9jbnQgPSBtZ3AtPmRvd25fY250OworCW1iKCk7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0VUSEVSTkVUX0RPV04sICZjbWQsIDApOworCWlmIChzdGF0dXMpCisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBDb3VsZG4ndCBicmluZyBkb3duIGxpbmtcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCisJd2FpdF9ldmVudF90aW1lb3V0KG1ncC0+ZG93bl93cSwgb2xkX2Rvd25fY250ICE9IG1ncC0+ZG93bl9jbnQsIEhaKTsKKwlpZiAob2xkX2Rvd25fY250ID09IG1ncC0+ZG93bl9jbnQpCisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzIG5ldmVyIGdvdCBkb3duIGlycVxuIiwgZGV2LT5uYW1lKTsKKworCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKKworCW15cmkxMGdlX2ZyZWVfcmluZ3MoZGV2KTsKKworCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEOworCXJldHVybiAwOworfQorCisvKiBjb3B5IGFuIGFycmF5IG9mIHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kJ3MgdG8gdGhlIG1jcC4gIENvcHkKKyAqIGJhY2t3YXJkcyBvbmUgYXQgYSB0aW1lIGFuZCBoYW5kbGUgcmluZyB3cmFwcyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK215cmkxMGdlX3N1Ym1pdF9yZXFfYmFja3dhcmRzKHN0cnVjdCBteXJpMTBnZV90eF9idWYgKnR4LAorCQkJICAgICAgc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgKnNyYywgaW50IGNudCkKK3sKKwlpbnQgaWR4LCBzdGFydGluZ19zbG90OworCXN0YXJ0aW5nX3Nsb3QgPSB0eC0+cmVxOworCXdoaWxlIChjbnQgPiAxKSB7CisJCWNudC0tOworCQlpZHggPSAoc3RhcnRpbmdfc2xvdCArIGNudCkgJiB0eC0+bWFzazsKKwkJbXlyaTEwZ2VfcGlvX2NvcHkoJnR4LT5sYW5haVtpZHhdLCAmc3JjW2NudF0sIHNpemVvZigqc3JjKSk7CisJCW1iKCk7CisJfQorfQorCisvKgorICogY29weSBhbiBhcnJheSBvZiBzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCdzIHRvIHRoZSBtY3AuICBDb3B5CisgKiBhdCBtb3N0IDMyIGJ5dGVzIGF0IGEgdGltZSwgc28gYXMgdG8gYXZvaWQgaW52b2x2aW5nIHRoZSBzb2Z0d2FyZQorICogcGlvIGhhbmRsZXIgaW4gdGhlIG5pYy4gICBXZSByZS13cml0ZSB0aGUgZmlyc3Qgc2VnbWVudCdzIGZsYWdzCisgKiB0byBtYXJrIHRoZW0gdmFsaWQgb25seSBhZnRlciB3cml0aW5nIHRoZSBlbnRpcmUgY2hhaW4uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitteXJpMTBnZV9zdWJtaXRfcmVxKHN0cnVjdCBteXJpMTBnZV90eF9idWYgKnR4LCBzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCAqc3JjLAorCQkgICAgaW50IGNudCkKK3sKKwlpbnQgaWR4LCBpOworCXN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kIF9faW9tZW0gKmRzdHAsICpkc3Q7CisJc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgKnNyY3A7CisJdTggbGFzdF9mbGFnczsKKworCWlkeCA9IHR4LT5yZXEgJiB0eC0+bWFzazsKKworCWxhc3RfZmxhZ3MgPSBzcmMtPmZsYWdzOworCXNyYy0+ZmxhZ3MgPSAwOworCW1iKCk7CisJZHN0ID0gZHN0cCA9ICZ0eC0+bGFuYWlbaWR4XTsKKwlzcmNwID0gc3JjOworCisJaWYgKChpZHggKyBjbnQpIDwgdHgtPm1hc2spIHsKKwkJZm9yIChpID0gMDsgaSA8IChjbnQgLSAxKTsgaSArPSAyKSB7CisJCQlteXJpMTBnZV9waW9fY29weShkc3RwLCBzcmNwLCAyICogc2l6ZW9mKCpzcmMpKTsKKwkJCW1iKCk7CS8qIGZvcmNlIHdyaXRlIGV2ZXJ5IDMyIGJ5dGVzICovCisJCQlzcmNwICs9IDI7CisJCQlkc3RwICs9IDI7CisJCX0KKwl9IGVsc2UgeworCQkvKiBzdWJtaXQgYWxsIGJ1dCB0aGUgZmlyc3QgcmVxdWVzdCwgYW5kIGVuc3VyZQorCQkgKiB0aGF0IGl0IGlzIHN1Ym1pdHRlZCBiZWxvdyAqLworCQlteXJpMTBnZV9zdWJtaXRfcmVxX2JhY2t3YXJkcyh0eCwgc3JjLCBjbnQpOworCQlpID0gMDsKKwl9CisJaWYgKGkgPCBjbnQpIHsKKwkJLyogc3VibWl0IHRoZSBmaXJzdCByZXF1ZXN0ICovCisJCW15cmkxMGdlX3Bpb19jb3B5KGRzdHAsIHNyY3AsIHNpemVvZigqc3JjKSk7CisJCW1iKCk7CQkvKiBiYXJyaWVyIGJlZm9yZSBzZXR0aW5nIHZhbGlkIGZsYWcgKi8KKwl9CisKKwkvKiByZS13cml0ZSB0aGUgbGFzdCAzMi1iaXRzIHdpdGggdGhlIHZhbGlkIGZsYWdzICovCisJc3JjLT5mbGFncyA9IGxhc3RfZmxhZ3M7CisJX19yYXdfd3JpdGVsKCooKHUzMiAqKSBzcmMgKyAzKSwgKHUzMiBfX2lvbWVtICopIGRzdCArIDMpOworCXR4LT5yZXEgKz0gY250OworCW1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbXlyaTEwZ2Vfc3VibWl0X3JlcV93YyhzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmICp0eCwKKwkJICAgICAgIHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kICpzcmMsIGludCBjbnQpCit7CisJdHgtPnJlcSArPSBjbnQ7CisJbWIoKTsKKwl3aGlsZSAoY250ID49IDQpIHsKKwkJbXlyaTEwZ2VfcGlvX2NvcHkodHgtPndjX2ZpZm8sIHNyYywgNjQpOworCQltYigpOworCQlzcmMgKz0gNDsKKwkJY250IC09IDQ7CisJfQorCWlmIChjbnQgPiAwKSB7CisJCS8qIHBhZCBpdCB0byA2NCBieXRlcy4gIFRoZSBzcmMgaXMgNjQgYnl0ZXMgYmlnZ2VyIHRoYW4gaXQKKwkJICogbmVlZHMgdG8gYmUgc28gdGhhdCB3ZSBkb24ndCBvdmVycnVuIGl0ICovCisJCW15cmkxMGdlX3Bpb19jb3B5KHR4LT53Y19maWZvICsgKGNudCA8PCAxOCksIHNyYywgNjQpOworCQltYigpOworCX0KK30KKworLyoKKyAqIFRyYW5zbWl0IGEgcGFja2V0LiAgV2UgbmVlZCB0byBzcGxpdCB0aGUgcGFja2V0IHNvIHRoYXQgYSBzaW5nbGUKKyAqIHNlZ21lbnQgZG9lcyBub3QgY3Jvc3MgbXlyaTEwZ2UtPnR4LmJvdW5kYXJ5LCBzbyB0aGlzIG1ha2VzIHNlZ21lbnQKKyAqIGNvdW50aW5nIHRyaWNreS4gIFNvIHJhdGhlciB0aGFuIHRyeSB0byBjb3VudCBzZWdtZW50cyB1cCBmcm9udCwgd2UKKyAqIGp1c3QgZ2l2ZSB1cCBpZiB0aGVyZSBhcmUgdG9vIGZldyBzZWdtZW50cyB0byBob2xkIGEgcmVhc29uYWJseQorICogZnJhZ21lbnRlZCBwYWNrZXQgY3VycmVudGx5IGF2YWlsYWJsZS4gIElmIHdlIHJ1bgorICogb3V0IG9mIHNlZ21lbnRzIHdoaWxlIHByZXBhcmluZyBhIHBhY2tldCBmb3IgRE1BLCB3ZSBqdXN0IGxpbmVhcml6ZQorICogaXQgYW5kIHRyeSBhZ2Fpbi4KKyAqLworCitzdGF0aWMgaW50IG15cmkxMGdlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCAqcmVxOworCXN0cnVjdCBteXJpMTBnZV90eF9idWYgKnR4ID0gJm1ncC0+dHg7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKKwlkbWFfYWRkcl90IGJ1czsKKwl1MzIgbG93LCBoaWdoX3N3YXBwZWQ7CisJdW5zaWduZWQgaW50IGxlbjsKKwlpbnQgaWR4LCBsYXN0X2lkeCwgYXZhaWwsIGZyYWdfY250LCBmcmFnX2lkeCwgY291bnQsIG1zcywgbWF4X3NlZ21lbnRzOworCXUxNiBwc2V1ZG9faGRyX29mZnNldCwgY2tzdW1fb2Zmc2V0OworCWludCBjdW1fbGVuLCBzZWdsZW4sIGJvdW5kYXJ5LCByZG1hX2NvdW50OworCXU4IGZsYWdzLCBvZGRfZmxhZzsKKworYWdhaW46CisJcmVxID0gdHgtPnJlcV9saXN0OworCWF2YWlsID0gdHgtPm1hc2sgLSAxIC0gKHR4LT5yZXEgLSB0eC0+ZG9uZSk7CisKKwltc3MgPSAwOworCW1heF9zZWdtZW50cyA9IE1YR0VGV19NQVhfU0VORF9ERVNDOworCisjaWZkZWYgTkVUSUZfRl9UU08KKwlpZiAoc2tiLT5sZW4gPiAoZGV2LT5tdHUgKyBFVEhfSExFTikpIHsKKwkJbXNzID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKKwkJaWYgKG1zcyAhPSAwKQorCQkJbWF4X3NlZ21lbnRzID0gTVlSSTEwR0VfTUFYX1NFTkRfREVTQ19UU087CisJfQorI2VuZGlmCQkJCS8qTkVUSUZfRl9UU08gKi8KKworCWlmICgodW5saWtlbHkoYXZhaWwgPCBtYXhfc2VnbWVudHMpKSkgeworCQkvKiB3ZSBhcmUgb3V0IG9mIHRyYW5zbWl0IHJlc291cmNlcyAqLworCQltZ3AtPnN0b3BfcXVldWUrKzsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBTZXR1cCBjaGVja3N1bSBvZmZsb2FkaW5nLCBpZiBuZWVkZWQgKi8KKwlja3N1bV9vZmZzZXQgPSAwOworCXBzZXVkb19oZHJfb2Zmc2V0ID0gMDsKKwlvZGRfZmxhZyA9IDA7CisJZmxhZ3MgPSAoTVhHRUZXX0ZMQUdTX05PX1RTTyB8IE1YR0VGV19GTEFHU19GSVJTVCk7CisJaWYgKGxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykpIHsKKwkJY2tzdW1fb2Zmc2V0ID0gKHNrYi0+aC5yYXcgLSBza2ItPmRhdGEpOworCQlwc2V1ZG9faGRyX29mZnNldCA9IChza2ItPmgucmF3ICsgc2tiLT5jc3VtKSAtIHNrYi0+ZGF0YTsKKwkJLyogSWYgdGhlIGhlYWRlcnMgYXJlIGV4Y2Vzc2l2ZWx5IGxhcmdlLCB0aGVuIHdlIG11c3QKKwkJICogZmFsbCBiYWNrIHRvIGEgc29mdHdhcmUgY2hlY2tzdW0gKi8KKwkJaWYgKHVubGlrZWx5KGNrc3VtX29mZnNldCA+IDI1NSB8fCBwc2V1ZG9faGRyX29mZnNldCA+IDEyNykpIHsKKwkJCWlmIChza2JfY2hlY2tzdW1faGVscChza2IsIDApKQorCQkJCWdvdG8gZHJvcDsKKwkJCWNrc3VtX29mZnNldCA9IDA7CisJCQlwc2V1ZG9faGRyX29mZnNldCA9IDA7CisJCX0gZWxzZSB7CisJCQlwc2V1ZG9faGRyX29mZnNldCA9IGh0b25zKHBzZXVkb19oZHJfb2Zmc2V0KTsKKwkJCW9kZF9mbGFnID0gTVhHRUZXX0ZMQUdTX0FMSUdOX09ERDsKKwkJCWZsYWdzIHw9IE1YR0VGV19GTEFHU19DS1NVTTsKKwkJfQorCX0KKworCWN1bV9sZW4gPSAwOworCisjaWZkZWYgTkVUSUZfRl9UU08KKwlpZiAobXNzKSB7CQkvKiBUU08gKi8KKwkJLyogdGhpcyByZW1vdmVzIGFueSBDS1NVTSBmbGFnIGZyb20gYmVmb3JlICovCisJCWZsYWdzID0gKE1YR0VGV19GTEFHU19UU09fSERSIHwgTVhHRUZXX0ZMQUdTX0ZJUlNUKTsKKworCQkvKiBuZWdhdGl2ZSBjdW1fbGVuIHNpZ25pZmllcyB0byB0aGUKKwkJICogc2VuZCBsb29wIHRoYXQgd2UgYXJlIHN0aWxsIGluIHRoZQorCQkgKiBoZWFkZXIgcG9ydGlvbiBvZiB0aGUgVFNPIHBhY2tldC4KKwkJICogVFNPIGhlYWRlciBtdXN0IGJlIGF0IG1vc3QgMTM0IGJ5dGVzIGxvbmcgKi8KKwkJY3VtX2xlbiA9IC0oKHNrYi0+aC5yYXcgLSBza2ItPmRhdGEpICsgKHNrYi0+aC50aC0+ZG9mZiA8PCAyKSk7CisKKwkJLyogZm9yIFRTTywgcHNldWRvX2hkcl9vZmZzZXQgaG9sZHMgbXNzLgorCQkgKiBUaGUgZmlybXdhcmUgZmlndXJlcyBvdXQgd2hlcmUgdG8gcHV0CisJCSAqIHRoZSBjaGVja3N1bSBieSBwYXJzaW5nIHRoZSBoZWFkZXIuICovCisJCXBzZXVkb19oZHJfb2Zmc2V0ID0gaHRvbnMobXNzKTsKKwl9IGVsc2UKKyNlbmRpZgkJCQkvKk5FVElGX0ZfVFNPICovCisJCS8qIE1hcmsgc21hbGwgcGFja2V0cywgYW5kIHBhZCBvdXQgdGlueSBwYWNrZXRzICovCisJaWYgKHNrYi0+bGVuIDw9IE1YR0VGV19TRU5EX1NNQUxMX1NJWkUpIHsKKwkJZmxhZ3MgfD0gTVhHRUZXX0ZMQUdTX1NNQUxMOworCisJCS8qIHBhZCBmcmFtZXMgdG8gYXQgbGVhc3QgRVRIX1pMRU4gYnl0ZXMgKi8KKwkJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgRVRIX1pMRU4pKSB7CisJCQlza2IgPSBza2JfcGFkdG8oc2tiLCBFVEhfWkxFTik7CisJCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCQkvKiBUaGUgcGFja2V0IGlzIGdvbmUsIHNvIHdlIG11c3QKKwkJCQkgKiByZXR1cm4gMCAqLworCQkJCW1ncC0+c3RhdHMudHhfZHJvcHBlZCArPSAxOworCQkJCXJldHVybiAwOworCQkJfQorCQkJLyogYWRqdXN0IHRoZSBsZW4gdG8gYWNjb3VudCBmb3IgdGhlIHplcm8gcGFkCisJCQkgKiBzbyB0aGF0IHRoZSBuaWMgY2FuIGtub3cgaG93IGxvbmcgaXQgaXMgKi8KKwkJCXNrYi0+bGVuID0gRVRIX1pMRU47CisJCX0KKwl9CisKKwkvKiBtYXAgdGhlIHNrYiBmb3IgRE1BICovCisJbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOworCWlkeCA9IHR4LT5yZXEgJiB0eC0+bWFzazsKKwl0eC0+aW5mb1tpZHhdLnNrYiA9IHNrYjsKKwlidXMgPSBwY2lfbWFwX3NpbmdsZShtZ3AtPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQoJnR4LT5pbmZvW2lkeF0sIGJ1cywgYnVzKTsKKwlwY2lfdW5tYXBfbGVuX3NldCgmdHgtPmluZm9baWR4XSwgbGVuLCBsZW4pOworCisJZnJhZ19jbnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCWZyYWdfaWR4ID0gMDsKKwljb3VudCA9IDA7CisJcmRtYV9jb3VudCA9IDA7CisKKwkvKiAicmRtYV9jb3VudCIgaXMgdGhlIG51bWJlciBvZiBSRE1BcyBiZWxvbmdpbmcgdG8gdGhlCisJICogY3VycmVudCBwYWNrZXQgQkVGT1JFIHRoZSBjdXJyZW50IHNlbmQgcmVxdWVzdC4gRm9yCisJICogbm9uLVRTTyBwYWNrZXRzLCB0aGlzIGlzIGVxdWFsIHRvICJjb3VudCIuCisJICogRm9yIFRTTyBwYWNrZXRzLCByZG1hX2NvdW50IG5lZWRzIHRvIGJlIHJlc2V0CisJICogdG8gMCBhZnRlciBhIHNlZ21lbnQgY3V0LgorCSAqCisJICogVGhlIHJkbWFfY291bnQgZmllbGQgb2YgdGhlIHNlbmQgcmVxdWVzdCBpcworCSAqIHRoZSBudW1iZXIgb2YgUkRNQXMgb2YgdGhlIHBhY2tldCBzdGFydGluZyBhdAorCSAqIHRoYXQgcmVxdWVzdC4gRm9yIFRTTyBzZW5kIHJlcXVlc3RzIHdpdGggb25lIG9yZSBtb3JlIGN1dHMKKwkgKiBpbiB0aGUgbWlkZGxlLCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgUkRNQXMgc3RhcnRpbmcKKwkgKiBhZnRlciB0aGUgbGFzdCBjdXQgaW4gdGhlIHJlcXVlc3QuIEFsbCBwcmV2aW91cworCSAqIHNlZ21lbnRzIGJlZm9yZSB0aGUgbGFzdCBjdXQgaW1wbGljaXRseSBoYXZlIDEgUkRNQS4KKwkgKgorCSAqIFNpbmNlIHRoZSBudW1iZXIgb2YgUkRNQXMgaXMgbm90IGtub3duIGJlZm9yZWhhbmQsCisJICogaXQgbXVzdCBiZSBmaWxsZWQtaW4gcmV0cm9hY3RpdmVseSAtIGFmdGVyIGVhY2gKKwkgKiBzZWdtZW50YXRpb24gY3V0IG9yIGF0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSBwYWNrZXQuCisJICovCisKKwl3aGlsZSAoMSkgeworCQkvKiBCcmVhayB0aGUgU0tCIG9yIEZyYWdtZW50IHVwIGludG8gcGllY2VzIHdoaWNoCisJCSAqIGRvIG5vdCBjcm9zcyBtZ3AtPnR4LmJvdW5kYXJ5ICovCisJCWxvdyA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKGJ1cyk7CisJCWhpZ2hfc3dhcHBlZCA9IGh0b25sKE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihidXMpKTsKKwkJd2hpbGUgKGxlbikgeworCQkJdTggZmxhZ3NfbmV4dDsKKwkJCWludCBjdW1fbGVuX25leHQ7CisKKwkJCWlmICh1bmxpa2VseShjb3VudCA9PSBtYXhfc2VnbWVudHMpKQorCQkJCWdvdG8gYWJvcnRfbGluZWFyaXplOworCisJCQlib3VuZGFyeSA9IChsb3cgKyB0eC0+Ym91bmRhcnkpICYgfih0eC0+Ym91bmRhcnkgLSAxKTsKKwkJCXNlZ2xlbiA9IGJvdW5kYXJ5IC0gbG93OworCQkJaWYgKHNlZ2xlbiA+IGxlbikKKwkJCQlzZWdsZW4gPSBsZW47CisJCQlmbGFnc19uZXh0ID0gZmxhZ3MgJiB+TVhHRUZXX0ZMQUdTX0ZJUlNUOworCQkJY3VtX2xlbl9uZXh0ID0gY3VtX2xlbiArIHNlZ2xlbjsKKyNpZmRlZiBORVRJRl9GX1RTTworCQkJaWYgKG1zcykgewkvKiBUU08gKi8KKwkJCQkocmVxIC0gcmRtYV9jb3VudCktPnJkbWFfY291bnQgPSByZG1hX2NvdW50ICsgMTsKKworCQkJCWlmIChsaWtlbHkoY3VtX2xlbiA+PSAwKSkgewkvKiBwYXlsb2FkICovCisJCQkJCWludCBuZXh0X2lzX2ZpcnN0LCBjaG9wOworCisJCQkJCWNob3AgPSAoY3VtX2xlbl9uZXh0ID4gbXNzKTsKKwkJCQkJY3VtX2xlbl9uZXh0ID0gY3VtX2xlbl9uZXh0ICUgbXNzOworCQkJCQluZXh0X2lzX2ZpcnN0ID0gKGN1bV9sZW5fbmV4dCA9PSAwKTsKKwkJCQkJZmxhZ3MgfD0gY2hvcCAqIE1YR0VGV19GTEFHU19UU09fQ0hPUDsKKwkJCQkJZmxhZ3NfbmV4dCB8PSBuZXh0X2lzX2ZpcnN0ICoKKwkJCQkJICAgIE1YR0VGV19GTEFHU19GSVJTVDsKKwkJCQkJcmRtYV9jb3VudCB8PSAtKGNob3AgfCBuZXh0X2lzX2ZpcnN0KTsKKwkJCQkJcmRtYV9jb3VudCArPSBjaG9wICYgIW5leHRfaXNfZmlyc3Q7CisJCQkJfSBlbHNlIGlmIChsaWtlbHkoY3VtX2xlbl9uZXh0ID49IDApKSB7CS8qIGhlYWRlciBlbmRzICovCisJCQkJCWludCBzbWFsbDsKKworCQkJCQlyZG1hX2NvdW50ID0gLTE7CisJCQkJCWN1bV9sZW5fbmV4dCA9IDA7CisJCQkJCXNlZ2xlbiA9IC1jdW1fbGVuOworCQkJCQlzbWFsbCA9IChtc3MgPD0gTVhHRUZXX1NFTkRfU01BTExfU0laRSk7CisJCQkJCWZsYWdzX25leHQgPSBNWEdFRldfRkxBR1NfVFNPX1BMRCB8CisJCQkJCSAgICBNWEdFRldfRkxBR1NfRklSU1QgfAorCQkJCQkgICAgKHNtYWxsICogTVhHRUZXX0ZMQUdTX1NNQUxMKTsKKwkJCQl9CisJCQl9CisjZW5kaWYJCQkJLyogTkVUSUZfRl9UU08gKi8KKwkJCXJlcS0+YWRkcl9oaWdoID0gaGlnaF9zd2FwcGVkOworCQkJcmVxLT5hZGRyX2xvdyA9IGh0b25sKGxvdyk7CisJCQlyZXEtPnBzZXVkb19oZHJfb2Zmc2V0ID0gcHNldWRvX2hkcl9vZmZzZXQ7CisJCQlyZXEtPnBhZCA9IDA7CS8qIGNvbXBsZXRlIHNvbGlkIDE2LWJ5dGUgYmxvY2s7IGRvZXMgdGhpcyBtYXR0ZXI/ICovCisJCQlyZXEtPnJkbWFfY291bnQgPSAxOworCQkJcmVxLT5sZW5ndGggPSBodG9ucyhzZWdsZW4pOworCQkJcmVxLT5ja3N1bV9vZmZzZXQgPSBja3N1bV9vZmZzZXQ7CisJCQlyZXEtPmZsYWdzID0gZmxhZ3MgfCAoKGN1bV9sZW4gJiAxKSAqIG9kZF9mbGFnKTsKKworCQkJbG93ICs9IHNlZ2xlbjsKKwkJCWxlbiAtPSBzZWdsZW47CisJCQljdW1fbGVuID0gY3VtX2xlbl9uZXh0OworCQkJZmxhZ3MgPSBmbGFnc19uZXh0OworCQkJcmVxKys7CisJCQljb3VudCsrOworCQkJcmRtYV9jb3VudCsrOworCQkJaWYgKHVubGlrZWx5KGNrc3VtX29mZnNldCA+IHNlZ2xlbikpCisJCQkJY2tzdW1fb2Zmc2V0IC09IHNlZ2xlbjsKKwkJCWVsc2UKKwkJCQlja3N1bV9vZmZzZXQgPSAwOworCQl9CisJCWlmIChmcmFnX2lkeCA9PSBmcmFnX2NudCkKKwkJCWJyZWFrOworCisJCS8qIG1hcCBuZXh0IGZyYWdtZW50IGZvciBETUEgKi8KKwkJaWR4ID0gKGNvdW50ICsgdHgtPnJlcSkgJiB0eC0+bWFzazsKKwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWdfaWR4XTsKKwkJZnJhZ19pZHgrKzsKKwkJbGVuID0gZnJhZy0+c2l6ZTsKKwkJYnVzID0gcGNpX21hcF9wYWdlKG1ncC0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJICAgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX2FkZHJfc2V0KCZ0eC0+aW5mb1tpZHhdLCBidXMsIGJ1cyk7CisJCXBjaV91bm1hcF9sZW5fc2V0KCZ0eC0+aW5mb1tpZHhdLCBsZW4sIGxlbik7CisJfQorCisJKHJlcSAtIHJkbWFfY291bnQpLT5yZG1hX2NvdW50ID0gcmRtYV9jb3VudDsKKyNpZmRlZiBORVRJRl9GX1RTTworCWlmIChtc3MpCisJCWRvIHsKKwkJCXJlcS0tOworCQkJcmVxLT5mbGFncyB8PSBNWEdFRldfRkxBR1NfVFNPX0xBU1Q7CisJCX0gd2hpbGUgKCEocmVxLT5mbGFncyAmIChNWEdFRldfRkxBR1NfVFNPX0NIT1AgfAorCQkJCQkgTVhHRUZXX0ZMQUdTX0ZJUlNUKSkpOworI2VuZGlmCisJaWR4ID0gKChjb3VudCAtIDEpICsgdHgtPnJlcSkgJiB0eC0+bWFzazsKKwl0eC0+aW5mb1tpZHhdLmxhc3QgPSAxOworCWlmICh0eC0+d2NfZmlmbyA9PSBOVUxMKQorCQlteXJpMTBnZV9zdWJtaXRfcmVxKHR4LCB0eC0+cmVxX2xpc3QsIGNvdW50KTsKKwllbHNlCisJCW15cmkxMGdlX3N1Ym1pdF9yZXFfd2ModHgsIHR4LT5yZXFfbGlzdCwgY291bnQpOworCXR4LT5wa3Rfc3RhcnQrKzsKKwlpZiAoKGF2YWlsIC0gY291bnQpIDwgTVhHRUZXX01BWF9TRU5EX0RFU0MpIHsKKwkJbWdwLT5zdG9wX3F1ZXVlKys7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJcmV0dXJuIDA7CisKK2Fib3J0X2xpbmVhcml6ZToKKwkvKiBGcmVlIGFueSBETUEgcmVzb3VyY2VzIHdlJ3ZlIGFsbG9jZWQgYW5kIGNsZWFyIG91dCB0aGUgc2tiCisJICogc2xvdCBzbyBhcyB0byBub3QgdHJpcCB1cCBhc3NlcnRpb25zLCBhbmQgdG8gYXZvaWQgYQorCSAqIGRvdWJsZS1mcmVlIGlmIGxpbmVhcml6aW5nIGZhaWxzICovCisKKwlsYXN0X2lkeCA9IChpZHggKyAxKSAmIHR4LT5tYXNrOworCWlkeCA9IHR4LT5yZXEgJiB0eC0+bWFzazsKKwl0eC0+aW5mb1tpZHhdLnNrYiA9IE5VTEw7CisJZG8geworCQlsZW4gPSBwY2lfdW5tYXBfbGVuKCZ0eC0+aW5mb1tpZHhdLCBsZW4pOworCQlpZiAobGVuKSB7CisJCQlpZiAodHgtPmluZm9baWR4XS5za2IgIT0gTlVMTCkKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKG1ncC0+cGRldiwKKwkJCQkJCSBwY2lfdW5tYXBfYWRkcigmdHgtPmluZm9baWR4XSwKKwkJCQkJCQkJYnVzKSwgbGVuLAorCQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZWxzZQorCQkJCXBjaV91bm1hcF9wYWdlKG1ncC0+cGRldiwKKwkJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKCZ0eC0+aW5mb1tpZHhdLAorCQkJCQkJCSAgICAgIGJ1cyksIGxlbiwKKwkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJcGNpX3VubWFwX2xlbl9zZXQoJnR4LT5pbmZvW2lkeF0sIGxlbiwgMCk7CisJCQl0eC0+aW5mb1tpZHhdLnNrYiA9IE5VTEw7CisJCX0KKwkJaWR4ID0gKGlkeCArIDEpICYgdHgtPm1hc2s7CisJfSB3aGlsZSAoaWR4ICE9IGxhc3RfaWR4KTsKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJteXJpMTBnZTogJXM6IFRTTyBidXQgd2FudGVkIHRvIGxpbmVhcml6ZT8hPyE/XG4iLAorCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQlnb3RvIGRyb3A7CisJfQorCisJaWYgKHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSkKKwkJZ290byBkcm9wOworCisJbWdwLT50eF9saW5lYXJpemVkKys7CisJZ290byBhZ2FpbjsKKworZHJvcDoKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCW1ncC0+c3RhdHMudHhfZHJvcHBlZCArPSAxOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbXlyaTEwZ2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuICZtZ3AtPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBteXJpMTBnZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvKiBjYW4gYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHRzLAorCSAqIHBhc3MgMSB0byBmb3JjZSBhdG9taWNpdHkgaW4gbXlyaTEwZ2Vfc2VuZF9jbWQoKSAqLworCW15cmkxMGdlX2NoYW5nZV9wcm9taXNjKG5ldGRldl9wcml2KGRldiksIGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQywgMSk7Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2Vfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IGFkZHI7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1czsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihzYS0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCXN0YXR1cyA9IG15cmkxMGdlX3VwZGF0ZV9tYWNfYWRkcmVzcyhtZ3AsIHNhLT5zYV9kYXRhKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBjaGFuZ2luZyBtYWMgYWRkcmVzcyBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBjaGFuZ2UgdGhlIGRldiBzdHJ1Y3R1cmUgKi8KKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgc2EtPnNhX2RhdGEsIDYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycm9yID0gMDsKKworCWlmICgobmV3X210dSA8IDY4KSB8fCAoRVRIX0hMRU4gKyBuZXdfbXR1ID4gTVlSSTEwR0VfTUFYX0VUSEVSX01UVSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IG5ldyBtdHUgKCVkKSBpcyBub3QgdmFsaWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIG5ld19tdHUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNoYW5naW5nIG10dSBmcm9tICVkIHRvICVkXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGRldi0+bXR1LCBuZXdfbXR1KTsKKwlpZiAobWdwLT5ydW5uaW5nKSB7CisJCS8qIGlmIHdlIGNoYW5nZSB0aGUgbXR1IG9uIGFuIGFjdGl2ZSBkZXZpY2UsIHdlIG11c3QKKwkJICogcmVzZXQgdGhlIGRldmljZSBzbyB0aGUgZmlybXdhcmUgc2VlcyB0aGUgY2hhbmdlICovCisJCW15cmkxMGdlX2Nsb3NlKGRldik7CisJCWRldi0+bXR1ID0gbmV3X210dTsKKwkJbXlyaTEwZ2Vfb3BlbihkZXYpOworCX0gZWxzZQorCQlkZXYtPm10dSA9IG5ld19tdHU7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBFbmFibGUgRUNSQyB0byBhbGlnbiBQQ0ktRSBDb21wbGV0aW9uIHBhY2tldHMgb24gYW4gOC1ieXRlIGJvdW5kYXJ5LgorICogT25seSBkbyBpdCBpZiB0aGUgYnJpZGdlIGlzIGEgcm9vdCBwb3J0IHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gZGlzdHVyYgorICogYW55IG90aGVyIGRldmljZSwgZXhjZXB0IGlmIGZvcmNlZCB3aXRoIG15cmkxMGdlX2VjcmNfZW5hYmxlID4gMS4KKyAqLworCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9DSzgwNF9QQ0lFCTB4MDA1ZAorCitzdGF0aWMgdm9pZCBteXJpMTBnZV9lbmFibGVfZWNyYyhzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBtZ3AtPnBkZXYtPmJ1cy0+c2VsZjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbWdwLT5wZGV2LT5kZXY7CisJdW5zaWduZWQgY2FwOworCXVuc2lnbmVkIGVycl9jYXA7CisJdTE2IHZhbDsKKwl1OCBleHRfdHlwZTsKKwlpbnQgcmV0OworCisJaWYgKCFteXJpMTBnZV9lY3JjX2VuYWJsZSB8fCAhYnJpZGdlKQorCQlyZXR1cm47CisKKwkvKiBjaGVjayB0aGF0IHRoZSBicmlkZ2UgaXMgYSByb290IHBvcnQgKi8KKwljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGJyaWRnZSwgUENJX0NBUF9JRF9FWFApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgY2FwICsgUENJX0NBUF9GTEFHUywgJnZhbCk7CisJZXh0X3R5cGUgPSAodmFsICYgUENJX0VYUF9GTEFHU19UWVBFKSA+PiA0OworCWlmIChleHRfdHlwZSAhPSBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUKSB7CisJCWlmIChteXJpMTBnZV9lY3JjX2VuYWJsZSA+IDEpIHsKKwkJCXN0cnVjdCBwY2lfZGV2ICpvbGRfYnJpZGdlID0gYnJpZGdlOworCisJCQkvKiBXYWxrIHRoZSBoaWVyYXJjaHkgdXAgdG8gdGhlIHJvb3QgcG9ydAorCQkJICogd2hlcmUgRUNSQyBoYXMgdG8gYmUgZW5hYmxlZCAqLworCQkJZG8geworCQkJCWJyaWRnZSA9IGJyaWRnZS0+YnVzLT5zZWxmOworCQkJCWlmICghYnJpZGdlKSB7CisJCQkJCWRldl9lcnIoZGV2LAorCQkJCQkJIkZhaWxlZCB0byBmaW5kIHJvb3QgcG9ydCIKKwkJCQkJCSIgdG8gZm9yY2UgRUNSQ1xuIik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJY2FwID0KKwkJCQkgICAgcGNpX2ZpbmRfY2FwYWJpbGl0eShicmlkZ2UsIFBDSV9DQVBfSURfRVhQKTsKKwkJCQlwY2lfcmVhZF9jb25maWdfd29yZChicmlkZ2UsCisJCQkJCQkgICAgIGNhcCArIFBDSV9DQVBfRkxBR1MsICZ2YWwpOworCQkJCWV4dF90eXBlID0gKHZhbCAmIFBDSV9FWFBfRkxBR1NfVFlQRSkgPj4gNDsKKwkJCX0gd2hpbGUgKGV4dF90eXBlICE9IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQpOworCisJCQlkZXZfaW5mbyhkZXYsCisJCQkJICJGb3JjaW5nIEVDUkMgb24gbm9uLXJvb3QgcG9ydCAlcyIKKwkJCQkgIiAoZW5hYmxpbmcgb24gcm9vdCBwb3J0ICVzKVxuIiwKKwkJCQkgcGNpX25hbWUob2xkX2JyaWRnZSksIHBjaV9uYW1lKGJyaWRnZSkpOworCQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsCisJCQkJIk5vdCBlbmFibGluZyBFQ1JDIG9uIG5vbi1yb290IHBvcnQgJXNcbiIsCisJCQkJcGNpX25hbWUoYnJpZGdlKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwljYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShicmlkZ2UsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CisJLyogbnZpZGlhIGV4dCBjYXAgaXMgbm90IGFsd2F5cyBsaW5rZWQgaW4gZXh0IGNhcCBjaGFpbiAqLworCWlmICghY2FwCisJICAgICYmIGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlZJRElBCisJICAgICYmIGJyaWRnZS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9DSzgwNF9QQ0lFKQorCQljYXAgPSAweDE2MDsKKworCWlmICghY2FwKQorCQlyZXR1cm47CisKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBjYXAgKyBQQ0lfRVJSX0NBUCwgJmVycl9jYXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgcmVhZGluZyBleHQtY29uZi1zcGFjZSBvZiAlc1xuIiwKKwkJCXBjaV9uYW1lKGJyaWRnZSkpOworCQlkZXZfZXJyKGRldiwgIlx0IHBjaT1ub21tY29uZiBpbiB1c2U/ICIKKwkJCSJvciBidWdneS9pbmNvbXBsZXRlL2Fic2VudCBBQ1BJIE1DRkcgYXR0cj9cbiIpOworCQlyZXR1cm47CisJfQorCWlmICghKGVycl9jYXAgJiBQQ0lfRVJSX0NBUF9FQ1JDX0dFTkMpKQorCQlyZXR1cm47CisKKwllcnJfY2FwIHw9IFBDSV9FUlJfQ0FQX0VDUkNfR0VORTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgY2FwICsgUENJX0VSUl9DQVAsIGVycl9jYXApOworCWRldl9pbmZvKGRldiwgIkVuYWJsZWQgRUNSQyBvbiB1cHN0cmVhbSBicmlkZ2UgJXNcbiIsIHBjaV9uYW1lKGJyaWRnZSkpOworCW1ncC0+dHguYm91bmRhcnkgPSA0MDk2OworCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X2FsaWduZWQ7Cit9CisKKy8qCisgKiBUaGUgTGFuYWkgWjhFIFBDSS1FIGludGVyZmFjZSBhY2hpZXZlcyBoaWdoZXIgUmVhZC1ETUEgdGhyb3VnaHB1dAorICogd2hlbiB0aGUgUENJLUUgQ29tcGxldGlvbiBwYWNrZXRzIGFyZSBhbGlnbmVkIG9uIGFuIDgtYnl0ZQorICogYm91bmRhcnkuICBTb21lIFBDSS1FIGNoaXAgc2V0cyBhbHdheXMgYWxpZ24gQ29tcGxldGlvbiBwYWNrZXRzOyBvbgorICogdGhlIG9uZXMgdGhhdCBkbyBub3QsIHRoZSBhbGlnbm1lbnQgY2FuIGJlIGVuZm9yY2VkIGJ5IGVuYWJsaW5nCisgKiBFQ1JDIGdlbmVyYXRpb24gKGlmIHN1cHBvcnRlZCkuCisgKgorICogV2hlbiBQQ0ktRSBDb21wbGV0aW9uIHBhY2tldHMgYXJlIG5vdCBhbGlnbmVkLCBpdCBpcyBhY3R1YWxseSBtb3JlCisgKiBlZmZpY2llbnQgdG8gbGltaXQgUmVhZC1ETUEgdHJhbnNhY3Rpb25zIHRvIDJLQiwgcmF0aGVyIHRoYW4gNEtCLgorICoKKyAqIElmIHRoZSBkcml2ZXIgY2FuIG5laXRoZXIgZW5hYmxlIEVDUkMgbm9yIHZlcmlmeSB0aGF0IGl0IGhhcworICogYWxyZWFkeSBiZWVuIGVuYWJsZWQsIHRoZW4gaXQgbXVzdCB1c2UgYSBmaXJtd2FyZSBpbWFnZSB3aGljaCB3b3JrcworICogYXJvdW5kIHVuYWxpZ25lZCBjb21wbGV0aW9uIHBhY2tldHMgKG15cmkxMGdlX2V0aHBfejhlLmRhdCksIGFuZCBpdAorICogc2hvdWxkIGFsc28gZW5zdXJlIHRoYXQgaXQgbmV2ZXIgZ2l2ZXMgdGhlIGRldmljZSBhIFJlYWQtRE1BIHdoaWNoIGlzCisgKiBsYXJnZXIgdGhhbiAyS0IgYnkgc2V0dGluZyB0aGUgdHguYm91bmRhcnkgdG8gMktCLiAgSWYgRUNSQyBpcworICogZW5hYmxlZCwgdGhlbiB0aGUgZHJpdmVyIHNob3VsZCB1c2UgdGhlIGFsaWduZWQgKG15cmkxMGdlX2V0aF96OGUuZGF0KQorICogZmlybXdhcmUgaW1hZ2UsIGFuZCBzZXQgdHguYm91bmRhcnkgdG8gNEtCLgorICovCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDIwMDBfUENJRQkweDAxMzIKKworc3RhdGljIHZvaWQgbXlyaTEwZ2Vfc2VsZWN0X2Zpcm13YXJlKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IG1ncC0+cGRldi0+YnVzLT5zZWxmOworCisJbWdwLT50eC5ib3VuZGFyeSA9IDIwNDg7CisJbWdwLT5md19uYW1lID0gbXlyaTEwZ2VfZndfdW5hbGlnbmVkOworCisJaWYgKG15cmkxMGdlX2ZvcmNlX2Zpcm13YXJlID09IDApIHsKKwkJbXlyaTEwZ2VfZW5hYmxlX2VjcmMobWdwKTsKKworCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHVwc3RyZWFtIGJyaWRnZSBpcyBrbm93biB0bworCQkgKiBwcm92aWRlIGFsaWduZWQgY29tcGxldGlvbnMgKi8KKwkJaWYgKGJyaWRnZQorCQkgICAgLyogU2VydmVyV29ya3MgSFQyMDAwL0hUMTAwMCAqLworCQkgICAgJiYgYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUworCQkgICAgJiYgYnJpZGdlLT5kZXZpY2UgPT0KKwkJICAgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMDAwX1BDSUUpIHsKKwkJCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwKKwkJCQkgIkFzc3VtaW5nIGFsaWduZWQgY29tcGxldGlvbnMgKDB4JXg6MHgleClcbiIsCisJCQkJIGJyaWRnZS0+dmVuZG9yLCBicmlkZ2UtPmRldmljZSk7CisJCQltZ3AtPnR4LmJvdW5kYXJ5ID0gNDA5NjsKKwkJCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X2FsaWduZWQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobXlyaTEwZ2VfZm9yY2VfZmlybXdhcmUgPT0gMSkgeworCQkJZGV2X2luZm8oJm1ncC0+cGRldi0+ZGV2LAorCQkJCSAiQXNzdW1pbmcgYWxpZ25lZCBjb21wbGV0aW9ucyAoZm9yY2VkKVxuIik7CisJCQltZ3AtPnR4LmJvdW5kYXJ5ID0gNDA5NjsKKwkJCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X2FsaWduZWQ7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbygmbWdwLT5wZGV2LT5kZXYsCisJCQkJICJBc3N1bWluZyB1bmFsaWduZWQgY29tcGxldGlvbnMgKGZvcmNlZClcbiIpOworCQkJbWdwLT50eC5ib3VuZGFyeSA9IDIwNDg7CisJCQltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md191bmFsaWduZWQ7CisJCX0KKwl9CisJaWYgKG15cmkxMGdlX2Z3X25hbWUgIT0gTlVMTCkgeworCQlkZXZfaW5mbygmbWdwLT5wZGV2LT5kZXYsICJvdmVycmlkaW5nIGZpcm13YXJlIHRvICVzXG4iLAorCQkJIG15cmkxMGdlX2Z3X25hbWUpOworCQltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md19uYW1lOworCX0KK30KKworc3RhdGljIHZvaWQgbXlyaTEwZ2Vfc2F2ZV9zdGF0ZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWdwLT5wZGV2OworCWludCBjYXA7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwkvKiBub3cgc2F2ZSBQQ0llIGFuZCBNU0kgc3RhdGUgdGhhdCBMaW51eCB3aWxsIG5vdAorCSAqIHNhdmUgZm9yIHVzICovCisJY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGNhcCArIFBDSV9FWFBfREVWQ1RMLCAmbWdwLT5kZXZjdGwpOworCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0kpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIGNhcCArIFBDSV9NU0lfRkxBR1MsICZtZ3AtPm1zaV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG15cmkxMGdlX3Jlc3RvcmVfc3RhdGUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1ncC0+cGRldjsKKwlpbnQgY2FwOworCisJLyogcmVzdG9yZSBQQ0llIGFuZCBNU0kgc3RhdGUgdGhhdCBsaW51eCB3aWxsIG5vdCAqLworCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgY2FwICsgUENJX0NBUF9JRF9FWFAsIG1ncC0+ZGV2Y3RsKTsKKwljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgY2FwICsgUENJX01TSV9GTEFHUywgbWdwLT5tc2lfZmxhZ3MpOworCisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBteXJpMTBnZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJbWdwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChtZ3AgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbmV0ZGV2ID0gbWdwLT5kZXY7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJteXJpMTBnZTogY2xvc2luZyAlc1xuIiwgbmV0ZGV2LT5uYW1lKTsKKwkJcnRubF9sb2NrKCk7CisJCW15cmkxMGdlX2Nsb3NlKG5ldGRldik7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCAwKTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIG1ncCk7CisJbXlyaTEwZ2Vfc2F2ZV9zdGF0ZShtZ3ApOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCBzdGF0dXM7CisJdTE2IHZlbmRvcjsKKworCW1ncCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAobWdwID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCW5ldGRldiA9IG1ncC0+ZGV2OworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7CS8qIHplcm9zIGNvbmYgc3BhY2UgYXMgYSBzaWRlIGVmZmVjdCAqLworCW1zbGVlcCg1KTsJCS8qIGdpdmUgY2FyZCB0aW1lIHRvIHJlc3BvbmQgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIFBDSV9WRU5ET1JfSUQsICZ2ZW5kb3IpOworCWlmICh2ZW5kb3IgPT0gMHhmZmZmKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBkZXZpY2UgZGlzYXBwZWFyZWQhXG4iLAorCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbXlyaTEwZ2VfcmVzdG9yZV9zdGF0ZShtZ3ApOworCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBteXJpMTBnZV9pbnRyLCBTQV9TSElSUSwKKwkJCSAgICAgbmV0ZGV2LT5uYW1lLCBtZ3ApOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgSVJRXG4iKTsKKwkJZ290byBhYm9ydF93aXRoX21zaTsKKwl9CisKKwlteXJpMTBnZV9yZXNldChtZ3ApOworCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCBtZ3AtPnR4LmJvdW5kYXJ5ICE9IDQwOTYpOworCisJLyogU2F2ZSBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGJlIHJlc3RvcmVkIGlmIHRoZQorCSAqIG5pYyByZXNldHMgZHVlIHRvIGEgcGFyaXR5IGVycm9yICovCisJbXlyaTEwZ2Vfc2F2ZV9zdGF0ZShtZ3ApOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlydG5sX2xvY2soKTsKKwkJbXlyaTEwZ2Vfb3BlbihuZXRkZXYpOworCQlydG5sX3VubG9jaygpOworCX0KKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisKKwlyZXR1cm4gMDsKKworYWJvcnRfd2l0aF9tc2k6CisJcmV0dXJuIC1FSU87CisKK30KKworI2VuZGlmCQkJCS8qIENPTkZJR19QTSAqLworCitzdGF0aWMgdTMyIG15cmkxMGdlX3JlYWRfcmVib290KHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJaW50IHZzID0gbWdwLT52ZW5kb3Jfc3BlY2lmaWNfb2Zmc2V0OworCXUzMiByZWJvb3Q7CisKKwkvKmVudGVyIHJlYWQzMiBtb2RlICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIHZzICsgMHgxMCwgMHgzKTsKKworCS8qcmVhZCBSRUJPT1RfU1RBVFVTICgweGZmZmZmZmYwKSAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgdnMgKyAweDE4LCAweGZmZmZmZmYwKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgdnMgKyAweDE0LCAmcmVib290KTsKKwlyZXR1cm4gcmVib290OworfQorCisvKgorICogVGhpcyB3YXRjaGRvZyBpcyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGJvYXJkIGhhcyBzdWZmZXJlZAorICogZnJvbSBhIHBhcml0eSBlcnJvciBhbmQgbmVlZHMgdG8gYmUgcmVjb3ZlcmVkLgorICovCitzdGF0aWMgdm9pZCBteXJpMTBnZV93YXRjaGRvZyh2b2lkICphcmcpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IGFyZzsKKwl1MzIgcmVib290OworCWludCBzdGF0dXM7CisJdTE2IGNtZCwgdmVuZG9yOworCisJbWdwLT53YXRjaGRvZ19yZXNldHMrKzsKKwlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwlpZiAoKGNtZCAmIFBDSV9DT01NQU5EX01BU1RFUikgPT0gMCkgeworCQkvKiBCdXMgbWFzdGVyIERNQSBkaXNhYmxlZD8gIENoZWNrIHRvIHNlZQorCQkgKiBpZiB0aGUgY2FyZCByZWJvb3RlZCBkdWUgdG8gYSBwYXJpdHkgZXJyb3IKKwkJICogRm9yIG5vdywganVzdCByZXBvcnQgaXQgKi8KKwkJcmVib290ID0gbXlyaTEwZ2VfcmVhZF9yZWJvb3QobWdwKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBOSUMgcmVib290ZWQgKDB4JXgpLCByZXNldHRpbmdcbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSwgcmVib290KTsKKwkJLyoKKwkJICogQSByZWJvb3RlZCBuaWMgd2lsbCBjb21lIGJhY2sgd2l0aCBjb25maWcgc3BhY2UgYXMKKwkJICogaXQgd2FzIGFmdGVyIHBvd2VyIHdhcyBhcHBsaWVkIHRvIFBDSWUgYnVzLgorCQkgKiBBdHRlbXB0IHRvIHJlc3RvcmUgY29uZmlnIHNwYWNlIHdoaWNoIHdhcyBzYXZlZAorCQkgKiB3aGVuIHRoZSBkcml2ZXIgd2FzIGxvYWRlZCwgb3IgdGhlIGxhc3QgdGltZSB0aGUKKwkJICogbmljIHdhcyByZXN1bWVkIGZyb20gcG93ZXIgc2F2aW5nIG1vZGUuCisJCSAqLworCQlteXJpMTBnZV9yZXN0b3JlX3N0YXRlKG1ncCk7CisJfSBlbHNlIHsKKwkJLyogaWYgd2UgZ2V0IGJhY2sgLTEncyBmcm9tIG91ciBzbG90LCBwZXJoYXBzIHNvbWVib2R5CisJCSAqIHBvd2VyZWQgb2ZmIG91ciBjYXJkLiAgRG9uJ3QgdHJ5IHRvIHJlc2V0IGl0IGluCisJCSAqIHRoaXMgY2FzZSAqLworCQlpZiAoY21kID09IDB4ZmZmZikgeworCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQobWdwLT5wZGV2LCBQQ0lfVkVORE9SX0lELCAmdmVuZG9yKTsKKwkJCWlmICh2ZW5kb3IgPT0gMHhmZmZmKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJteXJpMTBnZTogJXM6IGRldmljZSBkaXNhcHBlYXJlZCFcbiIsCisJCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJLyogUGVyaGFwcyBpdCBpcyBhIHNvZnR3YXJlIGVycm9yLiAgVHJ5IHRvIHJlc2V0ICovCisKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGRldmljZSB0aW1lb3V0LCByZXNldHRpbmdcbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIm15cmkxMGdlOiAlczogJWQgJWQgJWQgJWQgJWRcbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSwgbWdwLT50eC5yZXEsIG1ncC0+dHguZG9uZSwKKwkJICAgICAgIG1ncC0+dHgucGt0X3N0YXJ0LCBtZ3AtPnR4LnBrdF9kb25lLAorCQkgICAgICAgKGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5zZW5kX2RvbmVfY291bnQpKTsKKwkJbXNsZWVwKDIwMDApOworCQlwcmludGsoS0VSTl9JTkZPICJteXJpMTBnZTogJXM6ICVkICVkICVkICVkICVkXG4iLAorCQkgICAgICAgbWdwLT5kZXYtPm5hbWUsIG1ncC0+dHgucmVxLCBtZ3AtPnR4LmRvbmUsCisJCSAgICAgICBtZ3AtPnR4LnBrdF9zdGFydCwgbWdwLT50eC5wa3RfZG9uZSwKKwkJICAgICAgIChpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+c2VuZF9kb25lX2NvdW50KSk7CisJfQorCXJ0bmxfbG9jaygpOworCW15cmkxMGdlX2Nsb3NlKG1ncC0+ZGV2KTsKKwlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJZWxzZQorCQlteXJpMTBnZV9vcGVuKG1ncC0+ZGV2KTsKKwlydG5sX3VubG9jaygpOworfQorCisvKgorICogV2UgdXNlIG91ciBvd24gdGltZXIgcm91dGluZSByYXRoZXIgdGhhbiByZWx5aW5nIHVwb24KKyAqIG5ldGRldi0+dHhfdGltZW91dCBiZWNhdXNlIHdlIGhhdmUgYSB2ZXJ5IGxhcmdlIGhhcmR3YXJlIHRyYW5zbWl0CisgKiBxdWV1ZS4gIER1ZSB0byB0aGUgbGFyZ2UgcXVldWUsIHRoZSBuZXRkZXYtPnR4X3RpbWVvdXQgZnVuY3Rpb24KKyAqIGNhbm5vdCBkZXRlY3QgYSBOSUMgd2l0aCBhIHBhcml0eSBlcnJvciBpbiBhIHRpbWVseSBmYXNoaW9uIGlmIHRoZQorICogTklDIGlzIGxpZ2h0bHkgbG9hZGVkLgorICovCitzdGF0aWMgdm9pZCBteXJpMTBnZV93YXRjaGRvZ190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCisJbWdwID0gKHN0cnVjdCBteXJpMTBnZV9wcml2ICopYXJnOworCWlmIChtZ3AtPnR4LnJlcSAhPSBtZ3AtPnR4LmRvbmUgJiYKKwkgICAgbWdwLT50eC5kb25lID09IG1ncC0+d2F0Y2hkb2dfdHhfZG9uZSkKKwkJLyogbmljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgc3R1Y2suLiAqLworCQlzY2hlZHVsZV93b3JrKCZtZ3AtPndhdGNoZG9nX3dvcmspOworCWVsc2UKKwkJLyogcmVhcm0gdGltZXIgKi8KKwkJbW9kX3RpbWVyKCZtZ3AtPndhdGNoZG9nX3RpbWVyLAorCQkJICBqaWZmaWVzICsgbXlyaTEwZ2Vfd2F0Y2hkb2dfdGltZW91dCAqIEhaKTsKKworCW1ncC0+d2F0Y2hkb2dfdHhfZG9uZSA9IG1ncC0+dHguZG9uZTsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzaXplX3QgYnl0ZXM7CisJaW50IGk7CisJaW50IHN0YXR1cyA9IC1FTlhJTzsKKwlpbnQgY2FwOworCWludCBkYWNfZW5hYmxlZDsKKwl1MTYgdmFsOworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCptZ3ApKTsKKwlpZiAobmV0ZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwltZW1zZXQobWdwLCAwLCBzaXplb2YoKm1ncCkpOworCW1ncC0+ZGV2ID0gbmV0ZGV2OworCW1ncC0+cGRldiA9IHBkZXY7CisJbWdwLT5jc3VtX2ZsYWcgPSBNWEdFRldfRkxBR1NfQ0tTVU07CisJbWdwLT5wYXVzZSA9IG15cmkxMGdlX2Zsb3dfY29udHJvbDsKKwltZ3AtPmludHJfY29hbF9kZWxheSA9IG15cmkxMGdlX2ludHJfY29hbF9kZWxheTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZ3AtPmRvd25fd3EpOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9lbmFibGVfZGV2aWNlIGNhbGwgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBhYm9ydF93aXRoX25ldGRldjsKKwl9CisJbXlyaTEwZ2Vfc2VsZWN0X2Zpcm13YXJlKG1ncCk7CisKKwkvKiBGaW5kIHRoZSB2ZW5kb3Itc3BlY2lmaWMgY2FwIHNvIHdlIGNhbiBjaGVjaworCSAqIHRoZSByZWJvb3QgcmVnaXN0ZXIgbGF0ZXIgb24gKi8KKwltZ3AtPnZlbmRvcl9zcGVjaWZpY19vZmZzZXQKKwkgICAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7CisKKwkvKiBTZXQgb3VyIG1heCByZWFkIHJlcXVlc3QgdG8gNEtCICovCisJY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKGNhcCA8IDY0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkJhZCBQQ0lfQ0FQX0lEX0VYUCBsb2NhdGlvbiAlZFxuIiwgY2FwKTsKKwkJZ290byBhYm9ydF93aXRoX25ldGRldjsKKwl9CisJc3RhdHVzID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgY2FwICsgUENJX0VYUF9ERVZDVEwsICZ2YWwpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciAlZCByZWFkaW5nIFBDSV9FWFBfREVWQ1RMXG4iLAorCQkJc3RhdHVzKTsKKwkJZ290byBhYm9ydF93aXRoX25ldGRldjsKKwl9CisJdmFsID0gKHZhbCAmIH5QQ0lfRVhQX0RFVkNUTF9SRUFEUlEpIHwgKDUgPDwgMTIpOworCXN0YXR1cyA9IHBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBjYXAgKyBQQ0lfRVhQX0RFVkNUTCwgdmFsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgJWQgd3JpdGluZyBQQ0lfRVhQX0RFVkNUTFxuIiwKKwkJCXN0YXR1cyk7CisJCWdvdG8gYWJvcnRfd2l0aF9uZXRkZXY7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJZGFjX2VuYWJsZWQgPSAxOworCXN0YXR1cyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkYWNfZW5hYmxlZCA9IDA7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSI2NC1iaXQgcGNpIGFkZHJlc3MgbWFzayB3YXMgcmVmdXNlZCwgdHJ5aW5nIDMyLWJpdCIpOworCQlzdGF0dXMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwl9CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yICVkIHNldHRpbmcgRE1BIG1hc2tcbiIsIHN0YXR1cyk7CisJCWdvdG8gYWJvcnRfd2l0aF9uZXRkZXY7CisJfQorCW1ncC0+Y21kID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqbWdwLT5jbWQpLAorCQkJCSAgICAgICZtZ3AtPmNtZF9idXMsIEdGUF9LRVJORUwpOworCWlmIChtZ3AtPmNtZCA9PSBOVUxMKQorCQlnb3RvIGFib3J0X3dpdGhfbmV0ZGV2OworCisJbWdwLT5md19zdGF0cyA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKm1ncC0+Zndfc3RhdHMpLAorCQkJCQkgICAmbWdwLT5md19zdGF0c19idXMsIEdGUF9LRVJORUwpOworCWlmIChtZ3AtPmZ3X3N0YXRzID09IE5VTEwpCisJCWdvdG8gYWJvcnRfd2l0aF9jbWQ7CisKKwltZ3AtPmJvYXJkX3NwYW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCW1ncC0+aW9tZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwltZ3AtPm10cnIgPSAtMTsKKyNpZmRlZiBDT05GSUdfTVRSUgorCW1ncC0+bXRyciA9IG10cnJfYWRkKG1ncC0+aW9tZW1fYmFzZSwgbWdwLT5ib2FyZF9zcGFuLAorCQkJICAgICBNVFJSX1RZUEVfV1JDT01CLCAxKTsKKyNlbmRpZgorCS8qIEhhY2suICBuZWVkIHRvIGdldCByaWQgb2YgdGhlc2UgbWFnaWMgbnVtYmVycyAqLworCW1ncC0+c3JhbV9zaXplID0KKwkgICAgMiAqIDEwMjQgKiAxMDI0IC0gKDIgKiAoNDggKiAxMDI0KSArICgzMiAqIDEwMjQpKSAtIDB4MTAwOworCWlmIChtZ3AtPnNyYW1fc2l6ZSA+IG1ncC0+Ym9hcmRfc3BhbikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJib2FyZCBzcGFuICVsZCBieXRlcyB0b28gc21hbGxcbiIsCisJCQltZ3AtPmJvYXJkX3NwYW4pOworCQlnb3RvIGFib3J0X3dpdGhfd2M7CisJfQorCW1ncC0+c3JhbSA9IGlvcmVtYXAobWdwLT5pb21lbV9iYXNlLCBtZ3AtPmJvYXJkX3NwYW4pOworCWlmIChtZ3AtPnNyYW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgJWxkIGJ5dGVzIGF0IDB4JWx4XG4iLAorCQkJbWdwLT5ib2FyZF9zcGFuLCBtZ3AtPmlvbWVtX2Jhc2UpOworCQlzdGF0dXMgPSAtRU5YSU87CisJCWdvdG8gYWJvcnRfd2l0aF93YzsKKwl9CisJbWVtY3B5X2Zyb21pbyhtZ3AtPmVlcHJvbV9zdHJpbmdzLAorCQkgICAgICBtZ3AtPnNyYW0gKyBtZ3AtPnNyYW1fc2l6ZSAtIE1ZUkkxMEdFX0VFUFJPTV9TVFJJTkdTX1NJWkUsCisJCSAgICAgIE1ZUkkxMEdFX0VFUFJPTV9TVFJJTkdTX1NJWkUpOworCW1lbXNldChtZ3AtPmVlcHJvbV9zdHJpbmdzICsgTVlSSTEwR0VfRUVQUk9NX1NUUklOR1NfU0laRSAtIDIsIDAsIDIpOworCXN0YXR1cyA9IG15cmkxMGdlX3JlYWRfbWFjX2FkZHIobWdwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGFib3J0X3dpdGhfaW9yZW1hcDsKKworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQorCQluZXRkZXYtPmRldl9hZGRyW2ldID0gbWdwLT5tYWNfYWRkcltpXTsKKworCS8qIGFsbG9jYXRlIHJ4IGRvbmUgcmluZyAqLworCWJ5dGVzID0gbXlyaTEwZ2VfbWF4X2ludHJfc2xvdHMgKiBzaXplb2YoKm1ncC0+cnhfZG9uZS5lbnRyeSk7CisJbWdwLT5yeF9kb25lLmVudHJ5ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIGJ5dGVzLAorCQkJCQkJJm1ncC0+cnhfZG9uZS5idXMsIEdGUF9LRVJORUwpOworCWlmIChtZ3AtPnJ4X2RvbmUuZW50cnkgPT0gTlVMTCkKKwkJZ290byBhYm9ydF93aXRoX2lvcmVtYXA7CisJbWVtc2V0KG1ncC0+cnhfZG9uZS5lbnRyeSwgMCwgYnl0ZXMpOworCisJc3RhdHVzID0gbXlyaTEwZ2VfbG9hZF9maXJtd2FyZShtZ3ApOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZVxuIik7CisJCWdvdG8gYWJvcnRfd2l0aF9yeF9kb25lOworCX0KKworCXN0YXR1cyA9IG15cmkxMGdlX3Jlc2V0KG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCByZXNldFxuIik7CisJCWdvdG8gYWJvcnRfd2l0aF9maXJtd2FyZTsKKwl9CisKKwlpZiAobXlyaTEwZ2VfbXNpKSB7CisJCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpKHBkZXYpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkVycm9yICVkIHNldHRpbmcgdXAgTVNJOyBmYWxsaW5nIGJhY2sgdG8geFBJQ1xuIiwKKwkJCQlzdGF0dXMpOworCQllbHNlCisJCQltZ3AtPm1zaV9lbmFibGVkID0gMTsKKwl9CisKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG15cmkxMGdlX2ludHIsIFNBX1NISVJRLAorCQkJICAgICBuZXRkZXYtPm5hbWUsIG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQlnb3RvIGFib3J0X3dpdGhfZmlybXdhcmU7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1ncCk7CisJaWYgKChteXJpMTBnZV9pbml0aWFsX210dSArIEVUSF9ITEVOKSA+IE1ZUkkxMEdFX01BWF9FVEhFUl9NVFUpCisJCW15cmkxMGdlX2luaXRpYWxfbXR1ID0gTVlSSTEwR0VfTUFYX0VUSEVSX01UVSAtIEVUSF9ITEVOOworCWlmICgobXlyaTEwZ2VfaW5pdGlhbF9tdHUgKyBFVEhfSExFTikgPCA2OCkKKwkJbXlyaTEwZ2VfaW5pdGlhbF9tdHUgPSA2ODsKKwluZXRkZXYtPm10dSA9IG15cmkxMGdlX2luaXRpYWxfbXR1OworCW5ldGRldi0+b3BlbiA9IG15cmkxMGdlX29wZW47CisJbmV0ZGV2LT5zdG9wID0gbXlyaTEwZ2VfY2xvc2U7CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBteXJpMTBnZV94bWl0OworCW5ldGRldi0+Z2V0X3N0YXRzID0gbXlyaTEwZ2VfZ2V0X3N0YXRzOworCW5ldGRldi0+YmFzZV9hZGRyID0gbWdwLT5pb21lbV9iYXNlOworCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOworCW5ldGRldi0+Y2hhbmdlX210dSA9IG15cmkxMGdlX2NoYW5nZV9tdHU7CisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBteXJpMTBnZV9zZXRfbXVsdGljYXN0X2xpc3Q7CisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBteXJpMTBnZV9zZXRfbWFjX2FkZHJlc3M7CisJbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX1RTTzsKKwlpZiAoZGFjX2VuYWJsZWQpCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCW5ldGRldi0+cG9sbCA9IG15cmkxMGdlX3BvbGw7CisJbmV0ZGV2LT53ZWlnaHQgPSBteXJpMTBnZV9uYXBpX3dlaWdodDsKKworCS8qIFNhdmUgY29uZmlndXJhdGlvbiBzcGFjZSB0byBiZSByZXN0b3JlZCBpZiB0aGUKKwkgKiBuaWMgcmVzZXRzIGR1ZSB0byBhIHBhcml0eSBlcnJvciAqLworCW15cmkxMGdlX3NhdmVfc3RhdGUobWdwKTsKKwkvKiBSZXN0b3JlIHN0YXRlIGltbWVkaWF0ZWx5IHNpbmNlIHBjaV9zYXZlX21zaV9zdGF0ZSBkaXNhYmxlcyBNU0kgKi8KKwlteXJpMTBnZV9yZXN0b3JlX3N0YXRlKG1ncCk7CisKKwkvKiBTZXR1cCB0aGUgd2F0Y2hkb2cgdGltZXIgKi8KKwlzZXR1cF90aW1lcigmbWdwLT53YXRjaGRvZ190aW1lciwgbXlyaTEwZ2Vfd2F0Y2hkb2dfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZyltZ3ApOworCisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm15cmkxMGdlX2V0aHRvb2xfb3BzKTsKKwlJTklUX1dPUksoJm1ncC0+d2F0Y2hkb2dfd29yaywgbXlyaTEwZ2Vfd2F0Y2hkb2csIG1ncCk7CisJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lzdGVyX25ldGRldiBmYWlsZWQ6ICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIGFib3J0X3dpdGhfaXJxOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIm15cmkxMGdlOiAlczogJXMgSVJRICVkLCB0eCBibmRyeSAlZCwgZncgJXMsIFdDICVzXG4iLAorCSAgICAgICBuZXRkZXYtPm5hbWUsIChtZ3AtPm1zaV9lbmFibGVkID8gIk1TSSIgOiAieFBJQyIpLAorCSAgICAgICBwZGV2LT5pcnEsIG1ncC0+dHguYm91bmRhcnksIG1ncC0+ZndfbmFtZSwKKwkgICAgICAgKG1ncC0+bXRyciA+PSAwID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIikpOworCisJcmV0dXJuIDA7CisKK2Fib3J0X3dpdGhfaXJxOgorCWZyZWVfaXJxKHBkZXYtPmlycSwgbWdwKTsKKwlpZiAobWdwLT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCithYm9ydF93aXRoX2Zpcm13YXJlOgorCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCAwKTsKKworYWJvcnRfd2l0aF9yeF9kb25lOgorCWJ5dGVzID0gbXlyaTEwZ2VfbWF4X2ludHJfc2xvdHMgKiBzaXplb2YoKm1ncC0+cnhfZG9uZS5lbnRyeSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgYnl0ZXMsCisJCQkgIG1ncC0+cnhfZG9uZS5lbnRyeSwgbWdwLT5yeF9kb25lLmJ1cyk7CisKK2Fib3J0X3dpdGhfaW9yZW1hcDoKKwlpb3VubWFwKG1ncC0+c3JhbSk7CisKK2Fib3J0X3dpdGhfd2M6CisjaWZkZWYgQ09ORklHX01UUlIKKwlpZiAobWdwLT5tdHJyID49IDApCisJCW10cnJfZGVsKG1ncC0+bXRyciwgbWdwLT5pb21lbV9iYXNlLCBtZ3AtPmJvYXJkX3NwYW4pOworI2VuZGlmCisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCptZ3AtPmZ3X3N0YXRzKSwKKwkJCSAgbWdwLT5md19zdGF0cywgbWdwLT5md19zdGF0c19idXMpOworCithYm9ydF93aXRoX2NtZDoKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKm1ncC0+Y21kKSwKKwkJCSAgbWdwLT5jbWQsIG1ncC0+Y21kX2J1cyk7CisKK2Fib3J0X3dpdGhfbmV0ZGV2OgorCisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogbXlyaTEwZ2VfcmVtb3ZlCisgKgorICogRG9lcyB3aGF0IGlzIG5lY2Vzc2FyeSB0byBzaHV0ZG93biBvbmUgTXlyaW5ldCBkZXZpY2UuIENhbGxlZAorICogICBvbmNlIGZvciBlYWNoIE15cmluZXQgY2FyZCBieSB0aGUga2VybmVsIHdoZW4gYSBtb2R1bGUgaXMKKyAqICAgdW5sb2FkZWQuCisgKi8KK3N0YXRpYyB2b2lkIG15cmkxMGdlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc2l6ZV90IGJ5dGVzOworCisJbWdwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChtZ3AgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwluZXRkZXYgPSBtZ3AtPmRldjsKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgbWdwKTsKKwlpZiAobWdwLT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCisJbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIDApOworCisJYnl0ZXMgPSBteXJpMTBnZV9tYXhfaW50cl9zbG90cyAqIHNpemVvZigqbWdwLT5yeF9kb25lLmVudHJ5KTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBieXRlcywKKwkJCSAgbWdwLT5yeF9kb25lLmVudHJ5LCBtZ3AtPnJ4X2RvbmUuYnVzKTsKKworCWlvdW5tYXAobWdwLT5zcmFtKTsKKworI2lmZGVmIENPTkZJR19NVFJSCisJaWYgKG1ncC0+bXRyciA+PSAwKQorCQltdHJyX2RlbChtZ3AtPm10cnIsIG1ncC0+aW9tZW1fYmFzZSwgbWdwLT5ib2FyZF9zcGFuKTsKKyNlbmRpZgorCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqbWdwLT5md19zdGF0cyksCisJCQkgIG1ncC0+Zndfc3RhdHMsIG1ncC0+Zndfc3RhdHNfYnVzKTsKKworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqbWdwLT5jbWQpLAorCQkJICBtZ3AtPmNtZCwgbWdwLT5jbWRfYnVzKTsKKworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworfQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlSSUNPTV9NWVJJMTBHRV9aOEUgCTB4MDAwOAorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXlyaTEwZ2VfcGNpX3RibFtdID0geworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTVlSSUNPTSwgUENJX0RFVklDRV9JRF9NWVJJQ09NX01ZUkkxMEdFX1o4RSl9LAorCXswfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBteXJpMTBnZV9kcml2ZXIgPSB7CisJLm5hbWUgPSAibXlyaTEwZ2UiLAorCS5wcm9iZSA9IG15cmkxMGdlX3Byb2JlLAorCS5yZW1vdmUgPSBteXJpMTBnZV9yZW1vdmUsCisJLmlkX3RhYmxlID0gbXlyaTEwZ2VfcGNpX3RibCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IG15cmkxMGdlX3N1c3BlbmQsCisJLnJlc3VtZSA9IG15cmkxMGdlX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIF9faW5pdCBpbnQgbXlyaTEwZ2VfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczogVmVyc2lvbiAlc1xuIiwgbXlyaTEwZ2VfZHJpdmVyLm5hbWUsCisJICAgICAgIE1ZUkkxMEdFX1ZFUlNJT05fU1RSKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbXlyaTEwZ2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXlyaTEwZ2VfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgX19leGl0IHZvaWQgbXlyaTEwZ2VfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm15cmkxMGdlX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KG15cmkxMGdlX2NsZWFudXBfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcC5oIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2Y2FlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcC5oCkBAIC0wLDAgKzEsMjA1IEBACisjaWZuZGVmIF9fTVlSSTEwR0VfTUNQX0hfXworI2RlZmluZSBfX01ZUkkxMEdFX01DUF9IX18KKworI2RlZmluZSBNWEdFRldfVkVSU0lPTl9NQUpPUgkxCisjZGVmaW5lIE1YR0VGV19WRVJTSU9OX01JTk9SCTQKKworLyogOCBCeXRlcyAqLworc3RydWN0IG1jcF9kbWFfYWRkciB7CisJdTMyIGhpZ2g7CisJdTMyIGxvdzsKK307CisKKy8qIDQgQnl0ZXMgKi8KK3N0cnVjdCBtY3Bfc2xvdCB7CisJdTE2IGNoZWNrc3VtOworCXUxNiBsZW5ndGg7Cit9OworCisvKiA2NCBCeXRlcyAqLworc3RydWN0IG1jcF9jbWQgeworCXUzMiBjbWQ7CisJdTMyIGRhdGEwOwkJLyogd2lsbCBiZSBsb3cgcG9ydGlvbiBpZiBkYXRhID4gMzIgYml0cyAqLworCS8qIDggKi8KKwl1MzIgZGF0YTE7CQkvKiB3aWxsIGJlIGhpZ2ggcG9ydGlvbiBpZiBkYXRhID4gMzIgYml0cyAqLworCXUzMiBkYXRhMjsJCS8qIGN1cnJlbnRseSB1bnVzZWQuLiAqLworCS8qIDE2ICovCisJc3RydWN0IG1jcF9kbWFfYWRkciByZXNwb25zZV9hZGRyOworCS8qIDI0ICovCisJdTggcGFkWzQwXTsKK307CisKKy8qIDggQnl0ZXMgKi8KK3N0cnVjdCBtY3BfY21kX3Jlc3BvbnNlIHsKKwl1MzIgZGF0YTsKKwl1MzIgcmVzdWx0OworfTsKKworLyoKKyAqIGZsYWdzIHVzZWQgaW4gbWNwX2tyZXFfZXRoZXJfc2VuZF90OgorICoKKyAqIFRoZSBTTUFMTCBmbGFnIGlzIG9ubHkgbmVlZGVkIGluIHRoZSBmaXJzdCBzZWdtZW50LiBJdCBpcyByYWlzZWQKKyAqIGZvciBwYWNrZXRzIHRoYXQgYXJlIHRvdGFsIGxlc3Mgb3IgZXF1YWwgNTEyIGJ5dGVzLgorICoKKyAqIFRoZSBDS1NVTSBmbGFnIG11c3QgYmUgc2V0IGluIGFsbCBzZWdtZW50cy4KKyAqCisgKiBUaGUgUEFEREVEIGZsYWdzIGlzIHNldCBpZiB0aGUgcGFja2V0IG5lZWRzIHRvIGJlIHBhZGRlZCwgYW5kIGl0CisgKiBtdXN0IGJlIHNldCBmb3IgYWxsIHNlZ21lbnRzLgorICoKKyAqIFRoZSAgTVhHRUZXX0ZMQUdTX0FMSUdOX09ERCBtdXN0IGJlIHNldCBpZiB0aGUgY3VtdWxhdGl2ZQorICogbGVuZ3RoIG9mIGFsbCBwcmV2aW91cyBzZWdtZW50cyB3YXMgb2RkLgorICovCisKKyNkZWZpbmUgTVhHRUZXX0ZMQUdTX1NNQUxMICAgICAgMHgxCisjZGVmaW5lIE1YR0VGV19GTEFHU19UU09fSERSICAgIDB4MQorI2RlZmluZSBNWEdFRldfRkxBR1NfRklSU1QgICAgICAweDIKKyNkZWZpbmUgTVhHRUZXX0ZMQUdTX0FMSUdOX09ERCAgMHg0CisjZGVmaW5lIE1YR0VGV19GTEFHU19DS1NVTSAgICAgIDB4OAorI2RlZmluZSBNWEdFRldfRkxBR1NfVFNPX0xBU1QgICAweDgKKyNkZWZpbmUgTVhHRUZXX0ZMQUdTX05PX1RTTyAgICAgMHgxMAorI2RlZmluZSBNWEdFRldfRkxBR1NfVFNPX0NIT1AgICAweDEwCisjZGVmaW5lIE1YR0VGV19GTEFHU19UU09fUExEICAgIDB4MjAKKworI2RlZmluZSBNWEdFRldfU0VORF9TTUFMTF9TSVpFICAxNTIwCisjZGVmaW5lIE1YR0VGV19NQVhfTVRVICAgICAgICAgIDk0MDAKKwordW5pb24gbWNwX3Bzb19vcl9jdW1sZW4geworCXUxNiBwc2V1ZG9faGRyX29mZnNldDsKKwl1MTYgY3VtX2xlbjsKK307CisKKyNkZWZpbmUJTVhHRUZXX01BWF9TRU5EX0RFU0MgMTIKKyNkZWZpbmUgTVhHRUZXX1BBRAkgICAgMgorCisvKiAxNiBCeXRlcyAqLworc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgeworCXUzMiBhZGRyX2hpZ2g7CisJdTMyIGFkZHJfbG93OworCXUxNiBwc2V1ZG9faGRyX29mZnNldDsKKwl1MTYgbGVuZ3RoOworCXU4IHBhZDsKKwl1OCByZG1hX2NvdW50OworCXU4IGNrc3VtX29mZnNldDsJLyogd2hlcmUgdG8gc3RhcnQgY29tcHV0aW5nIGNrc3VtICovCisJdTggZmxhZ3M7CQkvKiBhcyBkZWZpbmVkIGFib3ZlICovCit9OworCisvKiA4IEJ5dGVzICovCitzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiB7CisJdTMyIGFkZHJfaGlnaDsKKwl1MzIgYWRkcl9sb3c7Cit9OworCisvKiBDb21tYW5kcyAqLworCisjZGVmaW5lIE1YR0VGV19DTURfT0ZGU0VUIDB4ZjgwMDAwCisKK2VudW0gbXlyaTEwZ2VfbWNwX2NtZF90eXBlIHsKKwlNWEdFRldfQ01EX05PTkUgPSAwLAorCS8qIFJlc2V0IHRoZSBtY3AsIGl0IGlzIGxlZnQgaW4gYSBzYWZlIHN0YXRlLCB3YWl0aW5nCisJICogZm9yIHRoZSBkcml2ZXIgdG8gc2V0IGFsbCBpdHMgcGFyYW1ldGVycyAqLworCU1YR0VGV19DTURfUkVTRVQsCisKKwkvKiBnZXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50IGZpcm13YXJlLi4KKwkgKiAobWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgZWVwcm9tIHN0cmluZ3MuLj8gKi8KKwlNWEdFRldfR0VUX01DUF9WRVJTSU9OLAorCisJLyogUGFyYW1ldGVycyB3aGljaCBtdXN0IGJlIHNldCBieSB0aGUgZHJpdmVyIGJlZm9yZSBpdCBjYW4KKwkgKiBpc3N1ZSBNWEdFRldfQ01EX0VUSEVSTkVUX1VQLiBUaGV5IHBlcnNpc3QgdW50aWwgdGhlIG5leHQKKwkgKiBNWEdFRldfQ01EX1JFU0VUIGlzIGlzc3VlZCAqLworCisJTVhHRUZXX0NNRF9TRVRfSU5UUlFfRE1BLAorCU1YR0VGV19DTURfU0VUX0JJR19CVUZGRVJfU0laRSwJLyogaW4gYnl0ZXMsIHBvd2VyIG9mIDIgKi8KKwlNWEdFRldfQ01EX1NFVF9TTUFMTF9CVUZGRVJfU0laRSwJLyogaW4gYnl0ZXMgKi8KKworCS8qIFBhcmFtZXRlcnMgd2hpY2ggcmVmZXIgdG8gbGFuYWkgU1JBTSBhZGRyZXNzZXMgd2hlcmUgdGhlCisJICogZHJpdmVyIG11c3QgaXNzdWUgUElPIHdyaXRlcyBmb3IgdmFyaW91cyB0aGluZ3MgKi8KKworCU1YR0VGV19DTURfR0VUX1NFTkRfT0ZGU0VULAorCU1YR0VGV19DTURfR0VUX1NNQUxMX1JYX09GRlNFVCwKKwlNWEdFRldfQ01EX0dFVF9CSUdfUlhfT0ZGU0VULAorCU1YR0VGV19DTURfR0VUX0lSUV9BQ0tfT0ZGU0VULAorCU1YR0VGV19DTURfR0VUX0lSUV9ERUFTU0VSVF9PRkZTRVQsCisKKwkvKiBQYXJhbWV0ZXJzIHdoaWNoIHJlZmVyIHRvIHJpbmdzIHN0b3JlZCBvbiB0aGUgTUNQLAorCSAqIGFuZCB3aG9zZSBzaXplIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG1jcCAqLworCisJTVhHRUZXX0NNRF9HRVRfU0VORF9SSU5HX1NJWkUsCS8qIGluIGJ5dGVzICovCisJTVhHRUZXX0NNRF9HRVRfUlhfUklOR19TSVpFLAkvKiBpbiBieXRlcyAqLworCisJLyogUGFyYW1ldGVycyB3aGljaCByZWZlciB0byByaW5ncyBzdG9yZWQgaW4gdGhlIGhvc3QsCisJICogYW5kIHdob3NlIHNpemUgaXMgY29udHJvbGxlZCBieSB0aGUgaG9zdC4gIE5vdGUgdGhhdAorCSAqIGFsbCBtdXN0IGJlIHBoeXNpY2FsbHkgY29udGlndW91cyBhbmQgbXVzdCBjb250YWluCisJICogYSBwb3dlciBvZiAyIG51bWJlciBvZiBlbnRyaWVzLiAgKi8KKworCU1YR0VGV19DTURfU0VUX0lOVFJRX1NJWkUsCS8qIGluIGJ5dGVzICovCisKKwkvKiBjb21tYW5kIHRvIGJyaW5nIGV0aGVybmV0IGludGVyZmFjZSB1cC4gIEFib3ZlIHBhcmFtZXRlcnMKKwkgKiAocGx1cyBtdHUgJiBtYWMgYWRkcmVzcykgbXVzdCBoYXZlIGJlZW4gZXhjaGFuZ2VkIHByaW9yCisJICogdG8gaXNzdWluZyB0aGlzIGNvbW1hbmQgICovCisJTVhHRUZXX0NNRF9FVEhFUk5FVF9VUCwKKworCS8qIGNvbW1hbmQgdG8gYnJpbmcgZXRoZXJuZXQgaW50ZXJmYWNlIGRvd24uICBObyBmdXJ0aGVyIHNlbmRzCisJICogb3IgcmVjZWl2ZXMgbWF5IGJlIHByb2Nlc3NlZCB1bnRpbCBhbiBNWEdFRldfQ01EX0VUSEVSTkVUX1VQCisJICogaXMgaXNzdWVkLCBhbmQgYWxsIGludGVycnVwdCBxdWV1ZXMgbXVzdCBiZSBmbHVzaGVkIHByaW9yCisJICogdG8gYWNrJ2luZyB0aGlzIGNvbW1hbmQgKi8KKworCU1YR0VGV19DTURfRVRIRVJORVRfRE9XTiwKKworCS8qIGNvbW1hbmRzIHRoZSBkcml2ZXIgbWF5IGlzc3VlIGxpdmUsIHdpdGhvdXQgcmVzZXR0aW5nCisJICogdGhlIG5pYy4gIE5vdGUgdGhhdCBpbmNyZWFzaW5nIHRoZSBtdHUgImxpdmUiIHNob3VsZAorCSAqIG9ubHkgYmUgZG9uZSBpZiB0aGUgZHJpdmVyIGhhcyBhbHJlYWR5IHN1cHBsaWVkIGJ1ZmZlcnMKKwkgKiBzdWZmaWNpZW50bHkgbGFyZ2UgdG8gaGFuZGxlIHRoZSBuZXcgbXR1LiAgRGVjcmVhc2luZworCSAqIHRoZSBtdHUgbGl2ZSBpcyBzYWZlICovCisKKwlNWEdFRldfQ01EX1NFVF9NVFUsCisJTVhHRUZXX0NNRF9HRVRfSU5UUl9DT0FMX0RFTEFZX09GRlNFVCwJLyogaW4gbWljcm9zZWNvbmRzICovCisJTVhHRUZXX0NNRF9TRVRfU1RBVFNfSU5URVJWQUwsCS8qIGluIG1pY3Jvc2Vjb25kcyAqLworCU1YR0VGV19DTURfU0VUX1NUQVRTX0RNQSwKKworCU1YR0VGV19FTkFCTEVfUFJPTUlTQywKKwlNWEdFRldfRElTQUJMRV9QUk9NSVNDLAorCU1YR0VGV19TRVRfTUFDX0FERFJFU1MsCisKKwlNWEdFRldfRU5BQkxFX0ZMT1dfQ09OVFJPTCwKKwlNWEdFRldfRElTQUJMRV9GTE9XX0NPTlRST0wsCisKKwkvKiBkbyBhIERNQSB0ZXN0CisJICogZGF0YTAsZGF0YTEgPSBETUEgYWRkcmVzcworCSAqIGRhdGEyICAgICAgID0gUkRNQSBsZW5ndGggKE1TSCksIFdETUEgbGVuZ3RoIChMU0gpCisJICogY29tbWFuZCByZXR1cm4gZGF0YSA9IHJlcGV0aXRpb25zIChNU0gpLCAwLjUtbXMgdGlja3MgKExTSCkKKwkgKi8KKwlNWEdFRldfRE1BX1RFU1QKK307CisKK2VudW0gbXlyaTEwZ2VfbWNwX2NtZF9zdGF0dXMgeworCU1YR0VGV19DTURfT0sgPSAwLAorCU1YR0VGV19DTURfVU5LTk9XTiwKKwlNWEdFRldfQ01EX0VSUk9SX1JBTkdFLAorCU1YR0VGV19DTURfRVJST1JfQlVTWSwKKwlNWEdFRldfQ01EX0VSUk9SX0VNUFRZLAorCU1YR0VGV19DTURfRVJST1JfQ0xPU0VELAorCU1YR0VGV19DTURfRVJST1JfSEFTSF9FUlJPUiwKKwlNWEdFRldfQ01EX0VSUk9SX0JBRF9QT1JULAorCU1YR0VGV19DTURfRVJST1JfUkVTT1VSQ0VTCit9OworCisvKiA0MCBCeXRlcyAqLworc3RydWN0IG1jcF9pcnFfZGF0YSB7CisJdTMyIHNlbmRfZG9uZV9jb3VudDsKKworCXUzMiBsaW5rX3VwOworCXUzMiBkcm9wcGVkX2xpbmtfb3ZlcmZsb3c7CisJdTMyIGRyb3BwZWRfbGlua19lcnJvcl9vcl9maWx0ZXJlZDsKKwl1MzIgZHJvcHBlZF9ydW50OworCXUzMiBkcm9wcGVkX292ZXJydW47CisJdTMyIGRyb3BwZWRfbm9fc21hbGxfYnVmZmVyOworCXUzMiBkcm9wcGVkX25vX2JpZ19idWZmZXI7CisJdTMyIHJkbWFfdGFnc19hdmFpbGFibGU7CisKKwl1OCB0eF9zdG9wcGVkOworCXU4IGxpbmtfZG93bjsKKwl1OCBzdGF0c191cGRhdGVkOworCXU4IHZhbGlkOworfTsKKworI2VuZGlmCQkJCS8qIF9fTVlSSTEwR0VfTUNQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcF9nZW5faGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3Zjc3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcF9nZW5faGVhZGVyLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBfX01ZUkkxMEdFX01DUF9HRU5fSEVBREVSX0hfXworI2RlZmluZSBfX01ZUkkxMEdFX01DUF9HRU5fSEVBREVSX0hfXworCisvKiB0aGlzIGZpbGUgZGVmaW5lIGEgc3RhbmRhcmQgaGVhZGVyIHVzZWQgYXMgYSBmaXJzdCBlbnRyeSBwb2ludCB0bworICogZXhjaGFuZ2UgaW5mb3JtYXRpb24gYmV0d2VlbiBmaXJtd2FyZS9kcml2ZXIgYW5kIGRyaXZlci4gIFRoZQorICogaGVhZGVyIHN0cnVjdHVyZSBjYW4gYmUgYW55d2hlcmUgaW4gdGhlIG1jcC4gSXQgd2lsbCB1c3VhbGx5IGJlIGluCisgKiB0aGUgLmRhdGEgc2VjdGlvbiwgYmVjYXVzZSBzb21lIGZpZWxkcyBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhdAorICogY29tcGlsZSB0aW1lLgorICogVGhlIDMyYml0IHdvcmQgYXQgb2Zmc2V0IE1YX0hFQURFUl9QVFJfT0ZGU0VUIGluIHRoZSBtY3AgbXVzdAorICogY29udGFpbnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIuCisgKgorICogVHlwaWNhbGx5IGEgTUNQIHdpbGwgc3RhcnQgd2l0aCB0aGUgZm9sbG93aW5nOgorICogLnRleHQKKyAqIC5zcGFjZSA1MiAgICAhIHRvIGhlbHAgY2F0Y2ggTUVNT1JZX0lOVCBlcnJvcnMKKyAqIGJ0IHN0YXJ0ICAgICAhIGp1bXAgdG8gcmVhbCBjb2RlCisgKiBub3AKKyAqIC5sb25nIF9nZW5fbWNwX2hlYWRlcgorICoKKyAqIFRoZSBzb3VyY2Ugd2lsbCBoYXZlIGEgZGVmaW5pdGlvbiBsaWtlOgorICoKKyAqIG1jcF9nZW5faGVhZGVyX3QgZ2VuX21jcF9oZWFkZXIgPSB7CisgKiAuaGVhZGVyX2xlbmd0aCA9IHNpemVvZihtY3BfZ2VuX2hlYWRlcl90KSwKKyAqIC5tY3BfdHlwZSA9IE1DUF9UWVBFX1hYWCwKKyAqIC52ZXJzaW9uID0gInNvbWV0aGluZyAkSWQ6IG1jcF9nZW5faGVhZGVyLmgsdiAxLjIgMjAwNi8wNS8xMyAxMDowNDozNSBiZ29nbGluIEV4cCAkIiwKKyAqIC5tY3BfZ2xvYmFscyA9ICh1bnNpZ25lZCkmR2xvYmFscworICogfTsKKyAqLworCisjZGVmaW5lIE1DUF9IRUFERVJfUFRSX09GRlNFVCAgMHgzYworCisjZGVmaW5lIE1DUF9UWVBFX01YIDB4NGQ1ODIwMjAJLyogIk1YICAiICovCisjZGVmaW5lIE1DUF9UWVBFX1BDSUUgMHg3MDYzNjk2NQkvKiAiUENJRSIgcGNpZS1vbmx5IE1DUCAqLworI2RlZmluZSBNQ1BfVFlQRV9FVEggMHg0NTU0NDgyMAkvKiAiRVRIICIgKi8KKyNkZWZpbmUgTUNQX1RZUEVfTUNQMCAweDRkNDM1MDMwCS8qICJNQ1AwIiAqLworCitzdHJ1Y3QgbWNwX2dlbl9oZWFkZXIgeworCS8qIHRoZSBmaXJzdCA0IGZpZWxkcyBhcmUgZmlsbGVkIGF0IGNvbXBpbGUgdGltZSAqLworCXVuc2lnbmVkIGhlYWRlcl9sZW5ndGg7CisJdW5zaWduZWQgbWNwX3R5cGU7CisJY2hhciB2ZXJzaW9uWzEyOF07CisJdW5zaWduZWQgbWNwX2dsb2JhbHM7CS8qIHBvaW50ZXIgdG8gbWNwLXR5cGUgc3BlY2lmaWMgc3RydWN0dXJlICovCisKKwkvKiBmaWxsZWQgYnkgdGhlIE1DUCBhdCBydW4tdGltZSAqLworCXVuc2lnbmVkIHNyYW1fc2l6ZTsKKwl1bnNpZ25lZCBzdHJpbmdfc3BlY3M7CS8qIGVpdGhlciB0aGUgb3JpZ2luYWwgU1RSSU5HX1NQRUNTIG9yIGEgc3VwZXJzZXQgKi8KKwl1bnNpZ25lZCBzdHJpbmdfc3BlY3NfbGVuOworCisJLyogRmllbGRzIGFib3ZlIHRoaXMgY29tbWVudCBhcmUgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50LgorCSAqCisJICogRmllbGRzIGJlbG93IHRoaXMgY29tbWVudCBhcmUgZXh0ZW5zaW9ucyBhZGRlZCBpbiBsYXRlciB2ZXJzaW9ucworCSAqIG9mIHRoaXMgc3RydWN0LCBkcml2ZXJzIHNob3VsZCBjb21wYXJlIHRoZSBoZWFkZXJfbGVuZ3RoIGFnYWluc3QKKwkgKiBvZmZzZXRvZihmaWVsZCkgdG8gY2hlY2sgd2V0aGVyIGEgZ2l2ZW4gTUNQIGltcGxlbWVudHMgdGhlbS4KKwkgKgorCSAqIE5ldmVyIHJlbW92ZSBhbnkgZmllbGQuICBLZWVwIGV2ZXJ5dGhpbmcgbmF0dXJhbGx5IGFsaWduLgorCSAqLworfTsKKworI2VuZGlmCQkJCS8qIF9fTVlSSTEwR0VfTUNQX0dFTl9IRUFERVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKaW5kZXggOTA2Mjc3NS4uMmU0ZWNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtMzE4LDEyICszMTgsMTIgQEAKIFRoZSByeCBwcm9jZXNzIG9ubHkgcnVucyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIEFjY2VzcyBmcm9tIG91dHNpZGUKIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBvbmx5IHBlcm1pdHRlZCBhZnRlciBkaXNhYmxlX2lycSgpLgogCi1UaGUgcnggcHJvY2VzcyB1c3VhbGx5IHJ1bnMgdW5kZXIgdGhlIGRldi0+eG1pdF9sb2NrLiBJZiBucC0+aW50cl90eF9yZWFwCitUaGUgcnggcHJvY2VzcyB1c3VhbGx5IHJ1bnMgdW5kZXIgdGhlIG5ldGlmX3R4X2xvY2suIElmIG5wLT5pbnRyX3R4X3JlYXAKIGlzIHNldCwgdGhlbiBhY2Nlc3MgaXMgcGVybWl0dGVkIHVuZGVyIHNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKS4KIAogVGh1cyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0aGF0IHdhbnQgdG8gYWNjZXNzIGV2ZXJ5dGhpbmcgbXVzdCBjYWxsCiAJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwotCXNwaW5fbG9ja19iaChkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAogSVYuIE5vdGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZS5jIGIvZHJpdmVycy9uZXQvbmUuYwppbmRleCBiMzI3NjUyLi45NjNhMTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZS5jCisrKyBiL2RyaXZlcnMvbmV0L25lLmMKQEAgLTgyOSw3ICs4MjksNyBAQAogaXMgYXQgYm9vdCkgYW5kIHNvIHRoZSBwcm9iZSB3aWxsIGdldCBjb25mdXNlZCBieSBhbnkgb3RoZXIgODM5MCBjYXJkcy4KIElTQSBkZXZpY2UgYXV0b3Byb2JlcyBvbiBhIHJ1bm5pbmcgbWFjaGluZSBhcmUgbm90IHJlY29tbWVuZGVkIGFueXdheS4gKi8KIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMi5jIGIvZHJpdmVycy9uZXQvbmUyLmMKaW5kZXggMmFhN2I3N2YuLmVlYmY1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMi5jCisrKyBiL2RyaXZlcnMvbmV0L25lMi5jCkBAIC03ODAsNyArNzgwLDcgQEAKIAogLyogTW9kdWxlIGNvZGUgZml4ZWQgYnkgRGF2aWQgV2VpbmVoYWxsICovCiAKLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IGQwOTBkZjQuLjY2MWJmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC0xMiw3ICsxMiw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzIC0tIGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0CiAKICAgICBwY25ldF9jcy5jIDEuMTUzIDIwMDMvMTEvMDkgMTg6NTM6MDkKLSAgICAKKwogICAgIFRoZSBuZXR3b3JrIGRyaXZlciBjb2RlIGlzIGJhc2VkIG9uIERvbmFsZCBCZWNrZXIncyBORTIwMDAgY29kZToKIAogICAgIFdyaXR0ZW4gMTk5MiwxOTkzIGJ5IERvbmFsZCBCZWNrZXIuCkBAIC0xNDYsNyArMTQ2LDcgQEAKICNkZWZpbmUgTUlJX1BIWUlEX1JFRzIJCTB4MDMKIAogc3RhdGljIGh3X2luZm9fdCBod19pbmZvW10gPSB7Ci0gICAgeyAvKiBBY2N0b24gRU4yMjEyICovIDB4MGZmMCwgMHgwMCwgMHgwMCwgMHhlOCwgREVMQVlfT1VUUFVUIH0sIAorICAgIHsgLyogQWNjdG9uIEVOMjIxMiAqLyAweDBmZjAsIDB4MDAsIDB4MDAsIDB4ZTgsIERFTEFZX09VVFBVVCB9LAogICAgIHsgLyogQWxsaWVkIFRlbGVzaXMgTEEtUENNICovIDB4MGZmMCwgMHgwMCwgMHgwMCwgMHhmNCwgMCB9LAogICAgIHsgLyogQVBFWCBNdWx0aUNhcmQgKi8gMHgwM2Y0LCAweDAwLCAweDIwLCAweGU1LCAwIH0sCiAgICAgeyAvKiBBU0FOVEUgRnJpZW5kbHlOZXQgKi8gMHg0OTEwLCAweDAwLCAweDAwLCAweDk0LApAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgeyAvKiBORTIwMDAgQ29tcGF0aWJsZSAqLyAweDBmZjAsIDB4MDAsIDB4YTAsIDB4MGMsIDAgfSwKICAgICB7IC8qIE5ldHdvcmsgR2VuZXJhbCBTbmlmZmVyICovIDB4MGZmMCwgMHgwMCwgMHgwMCwgMHg2NSwKICAgICAgIEhBU19NSVNDX1JFRyB8IEhBU19JQk1fTUlTQyB9LAotICAgIHsgLyogUGFuYXNvbmljIFZFTDIxMSAqLyAweDBmZjAsIDB4MDAsIDB4ODAsIDB4NDUsIAorICAgIHsgLyogUGFuYXNvbmljIFZFTDIxMSAqLyAweDBmZjAsIDB4MDAsIDB4ODAsIDB4NDUsCiAgICAgICBIQVNfTUlTQ19SRUcgfCBIQVNfSUJNX01JU0MgfSwKICAgICB7IC8qIFByZU1heCBQRS0yMDAgKi8gMHgwN2YwLCAweDAwLCAweDIwLCAweGUwLCAwIH0sCiAgICAgeyAvKiBSUFRJIEVQNDAwICovIDB4MDExMCwgMHgwMCwgMHg0MCwgMHg5NSwgMCB9LApAQCAtMzMwLDcgKzMzMCw3IEBACiAJZm9yIChqID0gMDsgaiA8IDY7IGorKykKIAkgICAgZGV2LT5kZXZfYWRkcltqXSA9IHJlYWRiKGJhc2UgKyAoajw8MSkpOwogICAgIH0KLSAgICAKKwogICAgIGlvdW5tYXAodmlydCk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwogICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCkBAIC00OTAsNyArNDkwLDcgQEAKIAlpZiAobGluay0+aW8uTnVtUG9ydHMyID4gMCkgewogCSAgICAvKiBmb3IgbWFzdGVyL3NsYXZlIG11bHRpZnVuY3Rpb24gY2FyZHMgKi8KIAkgICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSAKKwkgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQogCQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKIAl9CiAgICAgfSBlbHNlIHsKQEAgLTU0MywxOSArNTQzLDE5IEBACiAJbWFuZmlkID0gbGUxNl90b19jcHUoYnVmWzBdKTsKIAlwcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOwogICAgIH0KLSAgICAKKwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgd2hpbGUgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIHsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwogCWNpc3RwbF9pb190ICppbyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeS5pbyk7Ci0JCisKIAlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAogCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwIHx8CiAJCQljZmctPmluZGV4ID09IDAgfHwgY2ZnLT5pby5ud2luID09IDApCiAJCWdvdG8gbmV4dF9lbnRyeTsKLQkKKwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwogCS8qIEZvciBtdWx0aWZ1bmN0aW9uIGNhcmRzLCBieSBjb252ZW50aW9uLCB3ZSBjb25maWd1cmUgdGhlCiAJICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KQEAgLTU4NCw3ICs1ODQsNyBAQAogICAgIH0KIAogICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gICAgCisKICAgICBpZiAobGluay0+aW8uTnVtUG9ydHMyID09IDgpIHsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKIAlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwpAQCAtNTkyLDcgKzU5Miw3IEBACiAgICAgaWYgKChtYW5maWQgPT0gTUFORklEX0lCTSkgJiYKIAkocHJvZGlkID09IFBST0RJRF9JQk1fSE9NRV9BTkRfQVdBWSkpCiAJbGluay0+Y29uZi5Db25maWdJbmRleCB8PSAweDEwOwotICAgIAorCiAgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKICAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKQEAgLTYxNCw3ICs2MTQsNyBAQAogCWh3X2luZm8gPSBnZXRfYXg4ODE5MChsaW5rKTsKICAgICBpZiAoaHdfaW5mbyA9PSBOVUxMKQogCWh3X2luZm8gPSBnZXRfaHdpcmVkKGxpbmspOwotICAgIAorCiAgICAgaWYgKGh3X2luZm8gPT0gTlVMTCkgewogCXByaW50ayhLRVJOX05PVElDRSAicGNuZXRfY3M6IHVuYWJsZSB0byByZWFkIGhhcmR3YXJlIG5ldCIKIAkgICAgICAgIiBhZGRyZXNzIGZvciBpbyBiYXNlICUjM2x4XG4iLCBkZXYtPmJhc2VfYWRkcik7CkBAIC02MzEsNyArNjMxLDcgQEAKIAlpbmZvLT5mbGFncyAmPSB+VVNFX0JJR19CVUY7CiAgICAgaWYgKCF1c2VfYmlnX2J1ZikKIAlpbmZvLT5mbGFncyAmPSB+VVNFX0JJR19CVUY7Ci0gICAgCisKICAgICBpZiAoaW5mby0+ZmxhZ3MgJiBVU0VfQklHX0JVRikgewogCXN0YXJ0X3BnID0gU09DS0VUX1NUQVJUX1BHOwogCXN0b3BfcGcgPSBTT0NLRVRfU1RPUF9QRzsKQEAgLTkyOSw3ICs5MjksNyBAQAogICAgIGtpb19hZGRyX3QgbmljX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKICAgICB1X2NoYXIgdG1wOwotICAgIAorCiAgICAgaWYgKGluZm8tPmZsYWdzICYgSEFTX01JU0NfUkVHKSB7CiAJdG1wID0gaW5iX3AobmljX2Jhc2UgKyBQQ05FVF9NSVNDKSAmIH4zOwogCWlmIChkZXYtPmlmX3BvcnQgPT0gMikKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAKICAgICBlaV9jbG9zZShkZXYpOwogICAgIGZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotICAgIAorCiAgICAgbGluay0+b3Blbi0tOwogICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKICAgICBkZWxfdGltZXJfc3luYygmaW5mby0+d2F0Y2hkb2cpOwpAQCAtMTA1NCwxMiArMTA1NCwxMiBAQAogCXVkZWxheSgxMDApOwogICAgIH0KICAgICBvdXRiX3AoRU5JU1JfUkVTRVQsIG5pY19iYXNlICsgRU4wX0lTUik7IC8qIEFjayBpbnRyLiAqLwotICAgIAorCiAgICAgaWYgKGkgPT0gMTAwKQogCXByaW50ayhLRVJOX0VSUiAiJXM6IHBjbmV0X3Jlc2V0XzgzOTAoKSBkaWQgbm90IGNvbXBsZXRlLlxuIiwKIAkgICAgICAgZGV2LT5uYW1lKTsKICAgICBzZXRfbWlzY19yZWcoZGV2KTsKLSAgICAKKwogfSAvKiBwY25ldF9yZXNldF84MzkwICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIAkgICAgICAgZGV2LT5uYW1lLCBlaV9zdGF0dXMuZG1haW5nLCBlaV9zdGF0dXMuaXJxbG9jayk7CiAJcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGVpX3N0YXR1cy5kbWFpbmcgfD0gMHgwMTsKICAgICBvdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RBUlQsIG5pY19iYXNlICsgUENORVRfQ01EKTsKICAgICBvdXRiX3Aoc2l6ZW9mKHN0cnVjdCBlODM5MF9wa3RfaGRyKSwgbmljX2Jhc2UgKyBFTjBfUkNOVExPKTsKQEAgLTE0NTgsNyArMTQ1OCw3IEBACiAgICAgdm9pZCBfX2lvbWVtICp4ZmVyX3N0YXJ0ID0gZWlfc3RhdHVzLm1lbSArIChUWF9QQUdFUzw8OCkKIAkJCQkrIChyaW5nX3BhZ2UgPDwgOCkKIAkJCQktIChlaV9zdGF0dXMucnhfc3RhcnRfcGFnZSA8PCA4KTsKLSAgICAKKwogICAgIGNvcHlpbihoZHIsIHhmZXJfc3RhcnQsIHNpemVvZihzdHJ1Y3QgZTgzOTBfcGt0X2hkcikpOwogICAgIC8qIEZpeCBmb3IgYmlnIGVuZGlhbiBzeXN0ZW1zICovCiAgICAgaGRyLT5jb3VudCA9IGxlMTZfdG9fY3B1KGhkci0+Y291bnQpOwpAQCAtMTQ3Myw3ICsxNDczLDcgQEAKICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCA9IChUWF9QQUdFUzw8OCkgKyByaW5nX29mZnNldAogCQkJCS0gKGVpX3N0YXR1cy5yeF9zdGFydF9wYWdlIDw8IDgpOwogICAgIGNoYXIgKmJ1ZiA9IHNrYi0+ZGF0YTsKLSAgICAKKwogICAgIGlmIChvZmZzZXQgKyBjb3VudCA+IGVpX3N0YXR1cy5wcml2KSB7CiAJLyogV2UgbXVzdCB3cmFwIHRoZSBpbnB1dCBtb3ZlLiAqLwogCWludCBzZW1pX2NvdW50ID0gZWlfc3RhdHVzLnByaXYgLSBvZmZzZXQ7CkBAIC0xNTQxLDcgKzE1NDEsNyBAQAogCWluZm8tPmJhc2UgPSBOVUxMOyBsaW5rLT53aW4gPSBOVUxMOwogCWdvdG8gZmFpbGVkOwogICAgIH0KLSAgICAKKwogICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLT5iYXNlICsgb2Zmc2V0OwogICAgIGVpX3N0YXR1cy5wcml2ID0gcmVxLlNpemU7CiAgICAgZGV2LT5tZW1fc3RhcnQgPSAodV9sb25nKWVpX3N0YXR1cy5tZW07CkBAIC0xNzY4LDYgKzE3NjgsOCBAQAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiTkRDIiwgIkV0aGVybmV0IiwgMHgwMWM0M2FlMSwgMHgwMGIyZTk0MSwgIk5FMksuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJQTVggICAiLCAiUEUtMjAwIiwgMHgzNGYzZjFjOCwgMHgxMGI1OWY4YywgIlBFLTIwMC5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIlRBTUFSQUNLIiwgIkV0aGVybmV0IiwgMHhjZjQzNGZiYSwgMHgwMGIyZTk0MSwgInRhbWFyYWNrLmNpcyIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiRmFzdCBFdGhlcm5ldCIsICJDRiBTaXplIFBDIENhcmQiLCAiMS4wIiwKKwkJMHhiNGJlMTRlMywgMHg0M2FjMjM5YiwgMHgwODc3YjYyNyksCiAJUENNQ0lBX0RFVklDRV9OVUxMCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHBjbmV0X2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGZhMzliOTQuLmNkYTNlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC00NSw1ICs0NSwxMSBAQAogCS0tLWhlbHAtLS0KIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgY2lzODIwNAogCitjb25maWcgU01TQ19QSFkKKwl0cmlzdGF0ZSAiRHJpdmVycyBmb3IgU01TQyBQSFlzIgorCWRlcGVuZHMgb24gUEhZTElCCisJLS0taGVscC0tLQorCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSBMQU44M0MxODUgUEhZCisKIGVuZG1lbnUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCmluZGV4IGU0MTE2YTUuLmQ5NjE0MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfQ0lDQURBX1BIWSkJKz0gY2ljYWRhLm8KIG9iai0kKENPTkZJR19MWFRfUEhZKQkJKz0gbHh0Lm8KIG9iai0kKENPTkZJR19RU0VNSV9QSFkpCQkrPSBxc2VtaS5vCitvYmotJChDT05GSUdfU01TQ19QSFkpCQkrPSBzbXNjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogZHJpdmVycy9uZXQvcGh5L3Ntc2MuYworICoKKyAqIERyaXZlciBmb3IgU01TQyBQSFlzCisgKgorICogQXV0aG9yOiBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0YgMjkgLyogSW50ZXJydXB0IFNvdXJjZSBGbGFncyAqLworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lNICAzMCAvKiBJbnRlcnJ1cHQgTWFzayAqLworCisjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVDEgKDE8PDEpIC8qIEF1dG8tTmVnb3RpYXRpb24gUGFnZSBSZWNlaXZlZCAqLworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQyICgxPDwyKSAvKiBQYXJhbGxlbCBEZXRlY3Rpb24gRmF1bHQgKi8KKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UMyAoMTw8MykgLyogQXV0by1OZWdvdGlhdGlvbiBMUCBBY2sgKi8KKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNCAoMTw8NCkgLyogTGluayBEb3duICovCisjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVDUgKDE8PDUpIC8qIFJlbW90ZSBGYXVsdCBEZXRlY3RlZCAqLworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQ2ICgxPDw2KSAvKiBBdXRvLU5lZ290aWF0aW9uIGNvbXBsZXRlICovCisjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVDcgKDE8PDcpIC8qIEVORVJHWU9OICovCisKKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UX0FMTCAoMHgwZSkKKworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlRfUEhZTElCX0VWRU5UUyBcCisJKE1JSV9MQU44M0MxODVfSVNGX0lOVDYgfCBNSUlfTEFOODNDMTg1X0lTRl9JTlQ0KQorCisKK3N0YXRpYyBpbnQgbGFuODNjMTg1X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJjID0gcGh5X3dyaXRlIChwaHlkZXYsIE1JSV9MQU44M0MxODVfSU0sCisJCQkoKFBIWV9JTlRFUlJVUFRfRU5BQkxFRCA9PSBwaHlkZXYtPmludGVycnVwdHMpCisJCQk/IE1JSV9MQU44M0MxODVfSVNGX0lOVF9QSFlMSUJfRVZFTlRTCisJCQk6IDApKTsKKworCXJldHVybiByYyA8IDAgPyByYyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbGFuODNjMTg1X2Fja19pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgcmMgPSBwaHlfcmVhZCAocGh5ZGV2LCBNSUlfTEFOODNDMTg1X0lTRik7CisKKwlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOworfQorCitzdGF0aWMgaW50IGxhbjgzYzE4NV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXJldHVybiBsYW44M2MxODVfYWNrX2ludGVycnVwdCAocGh5ZGV2KTsKK30KKworCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbGFuODNjMTg1X2RyaXZlciA9IHsKKwkucGh5X2lkCQk9IDB4MDAwN2MwYTAsIC8qIE9VST0weDAwODAwZiwgTW9kZWwjPTB4MGEgKi8KKwkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAorCS5uYW1lCQk9ICJTTVNDIExBTjgzQzE4NSIsCisKKwkuZmVhdHVyZXMJPSAoUEhZX0JBU0lDX0ZFQVRVUkVTIHwgU1VQUE9SVEVEX1BhdXNlCisJCQkJfCBTVVBQT1JURURfQXN5bV9QYXVzZSksCisJLmZsYWdzCQk9IFBIWV9IQVNfSU5URVJSVVBUIHwgUEhZX0hBU19NQUdJQ0FORUcsCisKKwkvKiBiYXNpYyBmdW5jdGlvbnMgKi8KKwkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5jb25maWdfaW5pdAk9IGxhbjgzYzE4NV9jb25maWdfaW5pdCwKKworCS8qIElSUSByZWxhdGVkICovCisJLmFja19pbnRlcnJ1cHQJPSBsYW44M2MxODVfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBsYW44M2MxODVfY29uZmlnX2ludHIsCisKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsIH0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNtc2NfaW5pdCh2b2lkKQoreworCXJldHVybiBwaHlfZHJpdmVyX3JlZ2lzdGVyICgmbGFuODNjMTg1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbXNjX2V4aXQodm9pZCkKK3sKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW44M2MxODVfZHJpdmVyKTsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTVNDIFBIWSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhlcmJlcnQgVmFsZXJpbyBSaWVkZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoc21zY19pbml0KTsKK21vZHVsZV9leGl0KHNtc2NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCBiMjA3M2ZjLi4wMWNkOGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTE2MDksOCArMTYwOSw2IEBACiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXNrYiA9IG5zOwogCQl9Ci0JCWVsc2UgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiLT5sZW4pKQotCQkJZ290byBlcnI7CiAJCWVsc2UKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggMGFkMzMxMC4uOTk0NWNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xODQsNiArMTg0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDgxNjlfcGNpX3RibFtdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODE2OSksIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywJMHg4MTI5KSwgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywJMHg0MzAwKSwgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxNmVjLAkJCTB4MDExNiksIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0xJTktTWVMsCQkweDEwMzIsIFBDSV9BTllfSUQsIDB4MDAyNCwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8tcmVncy5oIGIvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKaW5kZXggMDAxNzliYy4uMGVmNTI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKQEAgLTE2Nyw2ICsxNjcsNyBAQAogCXU4IHVudXNlZDRbMHgwOF07CiAKIAl1NjQgZ3Bpb19pbnRfcmVnOworI2RlZmluZSBHUElPX0lOVF9SRUdfRFBfRVJSX0lOVCAgICAgICAgICAgICAgICBCSVQoMCkKICNkZWZpbmUgR1BJT19JTlRfUkVHX0xJTktfRE9XTiAgICAgICAgICAgICAgICAgQklUKDEpCiAjZGVmaW5lIEdQSU9fSU5UX1JFR19MSU5LX1VQICAgICAgICAgICAgICAgICAgIEJJVCgyKQogCXU2NCBncGlvX2ludF9tYXNrOwpAQCAtMTg3LDcgKzE4OCw3IEBACiAvKiBQSUMgQ29udHJvbCByZWdpc3RlcnMgKi8KIAl1NjQgcGljX2NvbnRyb2w7CiAjZGVmaW5lIFBJQ19DTlRMX1JYX0FMQVJNX01BUF8xICAgICAgICAgICAgICAgIEJJVCgwKQotI2RlZmluZSBQSUNfQ05UTF9TSEFSRURfU1BMSVRTKG4pICAgICAgICAgICAgICB2QklUKG4sMTEsNCkKKyNkZWZpbmUgUElDX0NOVExfU0hBUkVEX1NQTElUUyhuKSAgICAgICAgICAgICAgdkJJVChuLDExLDUpCiAKIAl1NjQgc3dhcHBlcl9jdHJsOwogI2RlZmluZSBTV0FQUEVSX0NUUkxfUElGX1JfRkUgICAgICAgICAgICAgICAgICBCSVQoMCkKQEAgLTI2Nyw2ICsyNjgsMjEgQEAKIAogCS8qIEdlbmVyYWwgQ29uZmlndXJhdGlvbiAqLwogCXU2NCBtZGlvX2NvbnRyb2w7CisjZGVmaW5lIE1ESU9fTU1EX0lORFhfQUREUih2YWwpCQl2QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIE1ESU9fTU1EX0RFVl9BRERSKHZhbCkJCXZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgTURJT19NTURfUE1BX0RFVl9BRERSCQkweDEKKyNkZWZpbmUgTURJT19NTURfUE1EX0RFVl9BRERSCQkweDEKKyNkZWZpbmUgTURJT19NTURfV0lTX0RFVl9BRERSCQkweDIKKyNkZWZpbmUgTURJT19NTURfUENTX0RFVl9BRERSCQkweDMKKyNkZWZpbmUgTURJT19NTURfUEhZWFNfREVWX0FERFIJCTB4NAorI2RlZmluZSBNRElPX01NU19QUlRfQUREUih2YWwpCQl2QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIE1ESU9fQ1RSTF9TVEFSVF9UUkFOUyh2YWwpCXZCSVQodmFsLCA1NiwgNCkKKyNkZWZpbmUgTURJT19PUCh2YWwpCQkJdkJJVCh2YWwsIDYwLCAyKQorI2RlZmluZSBNRElPX09QX0FERFJfVFJBTlMJCTB4MAorI2RlZmluZSBNRElPX09QX1dSSVRFX1RSQU5TCQkweDEKKyNkZWZpbmUgTURJT19PUF9SRUFEX1BPU1RfSU5DX1RSQU5TCTB4MgorI2RlZmluZSBNRElPX09QX1JFQURfVFJBTlMJCTB4MworI2RlZmluZSBNRElPX01ESU9fREFUQSh2YWwpCQl2QklUKHZhbCwgMzIsIDE2KQogCiAJdTY0IGR0eF9jb250cm9sOwogCkBAIC0yODQsOSArMzAwLDEzIEBACiAJdTY0IGdwaW9fY29udHJvbDsKICNkZWZpbmUgR1BJT19DVFJMX0dQSU9fMAkJQklUKDgpCiAJdTY0IG1pc2NfY29udHJvbDsKKyNkZWZpbmUgRVhUX1JFUV9FTgkJCUJJVCgxKQogI2RlZmluZSBNSVNDX0xJTktfU1RBQklMSVRZX1BSRCh2YWwpICAgdkJJVCh2YWwsMjksMykKIAotCXU4IHVudXNlZDdfMVsweDI0MCAtIDB4MjA4XTsKKwl1OCB1bnVzZWQ3XzFbMHgyMzAgLSAweDIwOF07CisKKwl1NjQgcGljX2NvbnRyb2wyOworCXU2NCBpbmlfZHBlcnJfY3RybDsKIAogCXU2NCB3cmVxX3NwbGl0X21hc2s7CiAjZGVmaW5lCVdSRVFfU1BMSVRfTUFTS19TRVRfTUFTSyh2YWwpCXZCSVQodmFsLCA1MiwgMTIpCkBAIC00OTMsNiArNTEzLDcgQEAKICNkZWZpbmUgUFJDX0NUUkxfTk9fU05PT1BfREVTQyAgICAgICAgICAgICAgICAgQklUKDIyKQogI2RlZmluZSBQUkNfQ1RSTF9OT19TTk9PUF9CVUZGICAgICAgICAgICAgICAgICBCSVQoMjMpCiAjZGVmaW5lIFBSQ19DVFJMX0JJTU9EQUxfSU5URVJSVVBUICAgICAgICAgICAgIEJJVCgzNykKKyNkZWZpbmUgUFJDX0NUUkxfR1JPVVBfUkVBRFMgICAgICAgICAgICAgICAgICAgQklUKDM4KQogI2RlZmluZSBQUkNfQ1RSTF9SWERfQkFDS09GRl9JTlRFUlZBTCh2YWwpICAgICB2QklUKHZhbCw0MCwyNCkKIAogCXU2NCBwcmNfYWxhcm1fYWN0aW9uOwpAQCAtNTQxLDcgKzU2MiwxMiBAQAogI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX0xMQ19DVFJMICAgICAgICAgIEJJVCgzKQogI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX0wyX0VSUiAgICAgICAgICAgIEJJVCg2KQogCi0JdTggdW51c2VkMTJbMHg3MDAgLSAweDFEOF07CisJdTY0IHVudXNlZF8xMV8xOworCisJdTY0IHJpbmdfYnVtcF9jb3VudGVyMTsKKwl1NjQgcmluZ19idW1wX2NvdW50ZXIyOworCisJdTggdW51c2VkMTJbMHg3MDAgLSAweDFGMF07CiAKIAl1NjQgcnhkbWFfZGVidWdfY3RybDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IDc5MjA4ZjQuLmNhYzlmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTI2LDE1ICsyNiwyMiBAQAogICoKICAqIFRoZSBtb2R1bGUgbG9hZGFibGUgcGFyYW1ldGVycyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBhbmQgYSBicmllZgogICogZXhwbGFpbmF0aW9uIG9mIGFsbCB0aGUgdmFyaWFibGVzLgorICoKICAqIHJ4X3JpbmdfbnVtIDogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm9ncmFtIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSByaW5ncyB1c2VkCiAgKiBpbiB0aGUgZHJpdmVyLgotICogcnhfcmluZ19zejogVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgZWFjaCByaW5nIGNhbiBoYXZlLiBUaGlzCi0gKiBpcyBhbHNvIGFuIGFycmF5IG9mIHNpemUgOC4KKyAqIHJ4X3Jpbmdfc3o6IFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgYmxvY2tzIGVhY2ggcmluZyBjYW4gaGF2ZS4KKyAqICAgICBUaGlzIGlzIGFsc28gYW4gYXJyYXkgb2Ygc2l6ZSA4LgogICogcnhfcmluZ19tb2RlOiBUaGlzIGRlZmluZXMgdGhlIG9wZXJhdGlvbiBtb2RlIG9mIGFsbCA4IHJpbmdzLiBUaGUgdmFsaWQKICAqCQl2YWx1ZXMgYXJlIDEsIDIgYW5kIDMuCiAgKiB0eF9maWZvX251bTogVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgVHggRklGT3MgdGhhdHMgdXNlZCBpbnQgdGhlIGRyaXZlci4KICAqIHR4X2ZpZm9fbGVuOiBUaGlzIHRvbyBpcyBhbiBhcnJheSBvZiA4LiBFYWNoIGVsZW1lbnQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mCiAgKiBUeCBkZXNjcmlwdG9ycyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBjb3JyZXNwb25kaW5nIEZJRk8uCisgKiBpbnRyX3R5cGU6IFRoaXMgZGVmaW5lcyB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQuIFRoZSB2YWx1ZXMgY2FuIGJlIDAoSU5UQSksCisgKiAgICAgMShNU0kpLCAyKE1TSV9YKS4gRGVmYXVsdCB2YWx1ZSBpcyAnMChJTlRBKScKKyAqIGxybzogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIExhcmdlIFJlY2VpdmUgT2ZmbG9hZCAoTFJPKSBvciBub3QuCisgKiAgICAgUG9zc2libGUgdmFsdWVzICcxJyBmb3IgZW5hYmxlICcwJyBmb3IgZGlzYWJsZS4gRGVmYXVsdCBpcyAnMCcKKyAqIGxyb19tYXhfcGt0czogVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIGNhbiBiZQorICogICAgIGFnZ3JlZ2F0ZWQgYXMgYSBzaW5nbGUgbGFyZ2UgcGFja2V0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC03MCw3ICs3Nyw3IEBACiAjaW5jbHVkZSAiczJpby5oIgogI2luY2x1ZGUgInMyaW8tcmVncy5oIgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMTEuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC4xNC4yIgogCiAvKiBTMmlvIERyaXZlciBuYW1lICYgdmVyc2lvbi4gKi8KIHN0YXRpYyBjaGFyIHMyaW9fZHJpdmVyX25hbWVbXSA9ICJOZXRlcmlvbiI7CkBAIC0xMDYsMTggKzExMywxNCBAQAogI2RlZmluZSBMT1cJMgogc3RhdGljIGlubGluZSBpbnQgcnhfYnVmZmVyX2xldmVsKG5pY190ICogc3AsIGludCByeGJfc2l6ZSwgaW50IHJpbmcpCiB7Ci0JaW50IGxldmVsID0gMDsKIAltYWNfaW5mb190ICptYWNfY29udHJvbDsKIAogCW1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKLQlpZiAoKG1hY19jb250cm9sLT5yaW5nc1tyaW5nXS5wa3RfY250IC0gcnhiX3NpemUpID4gMTYpIHsKLQkJbGV2ZWwgPSBMT1c7Ci0JCWlmIChyeGJfc2l6ZSA8PSByeGRfY291bnRbc3AtPnJ4ZF9tb2RlXSkgewotCQkJbGV2ZWwgPSBQQU5JQzsKLQkJfQotCX0KLQotCXJldHVybiBsZXZlbDsKKwlpZiAocnhiX3NpemUgPD0gcnhkX2NvdW50W3NwLT5yeGRfbW9kZV0pCisJCXJldHVybiBQQU5JQzsKKwllbHNlIGlmICgobWFjX2NvbnRyb2wtPnJpbmdzW3JpbmddLnBrdF9jbnQgLSByeGJfc2l6ZSkgPiAxNikKKwkJcmV0dXJuICBMT1c7CisJcmV0dXJuIDA7CiB9CiAKIC8qIEV0aHRvb2wgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIE1hY3Jvcy4gKi8KQEAgLTEzNiw3ICsxMzksMTEgQEAKIAl7InRtYWNfbWNzdF9mcm1zIn0sCiAJeyJ0bWFjX2Jjc3RfZnJtcyJ9LAogCXsidG1hY19wYXVzZV9jdHJsX2ZybXMifSwKKwl7InRtYWNfdHRsX29jdGV0cyJ9LAorCXsidG1hY191Y3N0X2ZybXMifSwKKwl7InRtYWNfbnVjc3RfZnJtcyJ9LAogCXsidG1hY19hbnlfZXJyX2ZybXMifSwKKwl7InRtYWNfdHRsX2xlc3NfZmJfb2N0ZXRzIn0sCiAJeyJ0bWFjX3ZsZF9pcF9vY3RldHMifSwKIAl7InRtYWNfdmxkX2lwIn0sCiAJeyJ0bWFjX2Ryb3BfaXAifSwKQEAgLTE1MSwxMyArMTU4LDI3IEBACiAJeyJybWFjX3ZsZF9tY3N0X2ZybXMifSwKIAl7InJtYWNfdmxkX2Jjc3RfZnJtcyJ9LAogCXsicm1hY19pbl9ybmdfbGVuX2Vycl9mcm1zIn0sCisJeyJybWFjX291dF9ybmdfbGVuX2Vycl9mcm1zIn0sCiAJeyJybWFjX2xvbmdfZnJtcyJ9LAogCXsicm1hY19wYXVzZV9jdHJsX2ZybXMifSwKKwl7InJtYWNfdW5zdXBfY3RybF9mcm1zIn0sCisJeyJybWFjX3R0bF9vY3RldHMifSwKKwl7InJtYWNfYWNjZXB0ZWRfdWNzdF9mcm1zIn0sCisJeyJybWFjX2FjY2VwdGVkX251Y3N0X2ZybXMifSwKIAl7InJtYWNfZGlzY2FyZGVkX2ZybXMifSwKKwl7InJtYWNfZHJvcF9ldmVudHMifSwKKwl7InJtYWNfdHRsX2xlc3NfZmJfb2N0ZXRzIn0sCisJeyJybWFjX3R0bF9mcm1zIn0sCiAJeyJybWFjX3VzaXplZF9mcm1zIn0sCiAJeyJybWFjX29zaXplZF9mcm1zIn0sCiAJeyJybWFjX2ZyYWdfZnJtcyJ9LAogCXsicm1hY19qYWJiZXJfZnJtcyJ9LAorCXsicm1hY190dGxfNjRfZnJtcyJ9LAorCXsicm1hY190dGxfNjVfMTI3X2ZybXMifSwKKwl7InJtYWNfdHRsXzEyOF8yNTVfZnJtcyJ9LAorCXsicm1hY190dGxfMjU2XzUxMV9mcm1zIn0sCisJeyJybWFjX3R0bF81MTJfMTAyM19mcm1zIn0sCisJeyJybWFjX3R0bF8xMDI0XzE1MThfZnJtcyJ9LAogCXsicm1hY19pcCJ9LAogCXsicm1hY19pcF9vY3RldHMifSwKIAl7InJtYWNfaGRyX2Vycl9pcCJ9LApAQCAtMTY2LDEyICsxODcsODIgQEAKIAl7InJtYWNfdGNwIn0sCiAJeyJybWFjX3VkcCJ9LAogCXsicm1hY19lcnJfZHJwX3VkcCJ9LAorCXsicm1hY194Z21paV9lcnJfc3ltIn0sCisJeyJybWFjX2ZybXNfcTAifSwKKwl7InJtYWNfZnJtc19xMSJ9LAorCXsicm1hY19mcm1zX3EyIn0sCisJeyJybWFjX2ZybXNfcTMifSwKKwl7InJtYWNfZnJtc19xNCJ9LAorCXsicm1hY19mcm1zX3E1In0sCisJeyJybWFjX2ZybXNfcTYifSwKKwl7InJtYWNfZnJtc19xNyJ9LAorCXsicm1hY19mdWxsX3EwIn0sCisJeyJybWFjX2Z1bGxfcTEifSwKKwl7InJtYWNfZnVsbF9xMiJ9LAorCXsicm1hY19mdWxsX3EzIn0sCisJeyJybWFjX2Z1bGxfcTQifSwKKwl7InJtYWNfZnVsbF9xNSJ9LAorCXsicm1hY19mdWxsX3E2In0sCisJeyJybWFjX2Z1bGxfcTcifSwKIAl7InJtYWNfcGF1c2VfY250In0sCisJeyJybWFjX3hnbWlpX2RhdGFfZXJyX2NudCJ9LAorCXsicm1hY194Z21paV9jdHJsX2Vycl9jbnQifSwKIAl7InJtYWNfYWNjZXB0ZWRfaXAifSwKIAl7InJtYWNfZXJyX3RjcCJ9LAorCXsicmRfcmVxX2NudCJ9LAorCXsibmV3X3JkX3JlcV9jbnQifSwKKwl7Im5ld19yZF9yZXFfcnRyeV9jbnQifSwKKwl7InJkX3J0cnlfY250In0sCisJeyJ3cl9ydHJ5X3JkX2Fja19jbnQifSwKKwl7IndyX3JlcV9jbnQifSwKKwl7Im5ld193cl9yZXFfY250In0sCisJeyJuZXdfd3JfcmVxX3J0cnlfY250In0sCisJeyJ3cl9ydHJ5X2NudCJ9LAorCXsid3JfZGlzY19jbnQifSwKKwl7InJkX3J0cnlfd3JfYWNrX2NudCJ9LAorCXsidHhwX3dyX2NudCJ9LAorCXsidHhkX3JkX2NudCJ9LAorCXsidHhkX3dyX2NudCJ9LAorCXsicnhkX3JkX2NudCJ9LAorCXsicnhkX3dyX2NudCJ9LAorCXsidHhmX3JkX2NudCJ9LAorCXsicnhmX3dyX2NudCJ9LAorCXsicm1hY190dGxfMTUxOV80MDk1X2ZybXMifSwKKwl7InJtYWNfdHRsXzQwOTZfODE5MV9mcm1zIn0sCisJeyJybWFjX3R0bF84MTkyX21heF9mcm1zIn0sCisJeyJybWFjX3R0bF9ndF9tYXhfZnJtcyJ9LAorCXsicm1hY19vc2l6ZWRfYWx0X2ZybXMifSwKKwl7InJtYWNfamFiYmVyX2FsdF9mcm1zIn0sCisJeyJybWFjX2d0X21heF9hbHRfZnJtcyJ9LAorCXsicm1hY192bGFuX2ZybXMifSwKKwl7InJtYWNfbGVuX2Rpc2NhcmQifSwKKwl7InJtYWNfZmNzX2Rpc2NhcmQifSwKKwl7InJtYWNfcGZfZGlzY2FyZCJ9LAorCXsicm1hY19kYV9kaXNjYXJkIn0sCisJeyJybWFjX3JlZF9kaXNjYXJkIn0sCisJeyJybWFjX3J0c19kaXNjYXJkIn0sCisJeyJybWFjX2luZ21fZnVsbF9kaXNjYXJkIn0sCisJeyJsaW5rX2ZhdWx0X2NudCJ9LAogCXsiXG4gRFJJVkVSIFNUQVRJU1RJQ1MifSwKIAl7InNpbmdsZV9iaXRfZWNjX2VycnMifSwKIAl7ImRvdWJsZV9iaXRfZWNjX2VycnMifSwKKwl7InBhcml0eV9lcnJfY250In0sCisJeyJzZXJpb3VzX2Vycl9jbnQifSwKKwl7InNvZnRfcmVzZXRfY250In0sCisJeyJmaWZvX2Z1bGxfY250In0sCisJeyJyaW5nX2Z1bGxfY250In0sCisJKCJhbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2giKSwKKwkoImFsYXJtX3RyYW5zY2VpdmVyX3RlbXBfbG93IiksCisJKCJhbGFybV9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaCIpLAorCSgiYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2xvdyIpLAorCSgiYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2giKSwKKwkoImFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9sb3ciKSwKKwkoIndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoIiksCisJKCJ3YXJuX3RyYW5zY2VpdmVyX3RlbXBfbG93IiksCisJKCJ3YXJuX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoIiksCisJKCJ3YXJuX2xhc2VyX2JpYXNfY3VycmVudF9sb3ciKSwKKwkoIndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2giKSwKKwkoIndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdyIpLAogCSgibHJvX2FnZ3JlZ2F0ZWRfcGt0cyIpLAogCSgibHJvX2ZsdXNoX2JvdGhfY291bnQiKSwKIAkoImxyb19vdXRfb2Zfc2VxdWVuY2VfcGt0cyIpLApAQCAtMjIwLDkgKzMxMSw3IEBACiAgKiB0aGUgWEFVSS4KICAqLwogCi0jZGVmaW5lIFNXSVRDSF9TSUdOCTB4QTVBNUE1QTVBNUE1QTVBNVVMTAogI2RlZmluZQlFTkRfU0lHTgkweDAKLQogc3RhdGljIGNvbnN0IHU2NCBoZXJjX2FjdF9kdHhfY2ZnW10gPSB7CiAJLyogU2V0IGFkZHJlc3MgKi8KIAkweDgwMDAwNTE1MzY3NTAwMDBVTEwsIDB4ODAwMDA1MTUzNjc1MDBFMFVMTCwKQEAgLTI0NCwzNyArMzMzLDE5IEBACiAJRU5EX1NJR04KIH07CiAKLXN0YXRpYyBjb25zdCB1NjQgeGVuYV9tZGlvX2NmZ1tdID0gewotCS8qIFJlc2V0IFBNQSBQTEwgKi8KLQkweEMwMDEwMTAwMDAwMDAwMDBVTEwsIDB4QzAwMTAxMDAwMDAwMDBFMFVMTCwKLQkweEMwMDEwMTAwMDA4MDAwRTRVTEwsCi0JLyogUmVtb3ZlIFJlc2V0IGZyb20gUE1BIFBMTCAqLwotCTB4QzAwMTAxMDAwMDAwMDAwMFVMTCwgMHhDMDAxMDEwMDAwMDAwMEUwVUxMLAotCTB4QzAwMTAxMDAwMDAwMDBFNFVMTCwKLQlFTkRfU0lHTgotfTsKLQogc3RhdGljIGNvbnN0IHU2NCB4ZW5hX2R0eF9jZmdbXSA9IHsKKwkvKiBTZXQgYWRkcmVzcyAqLwogCTB4ODAwMDA1MTUwMDAwMDAwMFVMTCwgMHg4MDAwMDUxNTAwMDAwMEUwVUxMLAotCTB4ODAwMDA1MTVEOTM1MDBFNFVMTCwgMHg4MDAxMDUxNTAwMDAwMDAwVUxMLAotCTB4ODAwMTA1MTUwMDAwMDBFMFVMTCwgMHg4MDAxMDUxNTAwMUUwMEU0VUxMLAorCS8qIFdyaXRlIGRhdGEgKi8KKwkweDgwMDAwNTE1RDkzNTAwMDRVTEwsIDB4ODAwMDA1MTVEOTM1MDBFNFVMTCwKKwkvKiBTZXQgYWRkcmVzcyAqLworCTB4ODAwMTA1MTUwMDAwMDAwMFVMTCwgMHg4MDAxMDUxNTAwMDAwMEUwVUxMLAorCS8qIFdyaXRlIGRhdGEgKi8KKwkweDgwMDEwNTE1MDAxRTAwMDRVTEwsIDB4ODAwMTA1MTUwMDFFMDBFNFVMTCwKKwkvKiBTZXQgYWRkcmVzcyAqLwogCTB4ODAwMjA1MTUwMDAwMDAwMFVMTCwgMHg4MDAyMDUxNTAwMDAwMEUwVUxMLAotCTB4ODAwMjA1MTVGMjEwMDBFNFVMTCwKLQkvKiBTZXQgUEFETE9PUEJBQ0tOICovCi0JMHg4MDAyMDUxNTAwMDAwMDAwVUxMLCAweDgwMDIwNTE1MDAwMDAwRTBVTEwsCi0JMHg4MDAyMDUxNUIyMDAwMEU0VUxMLCAweDgwMDMwNTE1MDAwMDAwMDBVTEwsCi0JMHg4MDAzMDUxNTAwMDAwMEUwVUxMLCAweDgwMDMwNTE1QjIwMDAwRTRVTEwsCi0JMHg4MDA0MDUxNTAwMDAwMDAwVUxMLCAweDgwMDQwNTE1MDAwMDAwRTBVTEwsCi0JMHg4MDA0MDUxNUIyMDAwMEU0VUxMLCAweDgwMDUwNTE1MDAwMDAwMDBVTEwsCi0JMHg4MDA1MDUxNTAwMDAwMEUwVUxMLCAweDgwMDUwNTE1QjIwMDAwRTRVTEwsCi0JU1dJVENIX1NJR04sCi0JLyogUmVtb3ZlIFBBRExPT1BCQUNLTiAqLwotCTB4ODAwMjA1MTUwMDAwMDAwMFVMTCwgMHg4MDAyMDUxNTAwMDAwMEUwVUxMLAotCTB4ODAwMjA1MTVGMjAwMDBFNFVMTCwgMHg4MDAzMDUxNTAwMDAwMDAwVUxMLAotCTB4ODAwMzA1MTUwMDAwMDBFMFVMTCwgMHg4MDAzMDUxNUYyMDAwMEU0VUxMLAotCTB4ODAwNDA1MTUwMDAwMDAwMFVMTCwgMHg4MDA0MDUxNTAwMDAwMEUwVUxMLAotCTB4ODAwNDA1MTVGMjAwMDBFNFVMTCwgMHg4MDA1MDUxNTAwMDAwMDAwVUxMLAotCTB4ODAwNTA1MTUwMDAwMDBFMFVMTCwgMHg4MDA1MDUxNUYyMDAwMEU0VUxMLAorCS8qIFdyaXRlIGRhdGEgKi8KKwkweDgwMDIwNTE1RjIxMDAwMDRVTEwsIDB4ODAwMjA1MTVGMjEwMDBFNFVMTCwKIAlFTkRfU0lHTgogfTsKIApAQCAtMzAzLDE1ICszNzQsMTUgQEAKIC8qIE1vZHVsZSBMb2FkYWJsZSBwYXJhbWV0ZXJzLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCB0eF9maWZvX251bSA9IDE7CiBzdGF0aWMgdW5zaWduZWQgaW50IHR4X2ZpZm9fbGVuW01BWF9UWF9GSUZPU10gPQotICAgIHtbMCAuLi4oTUFYX1RYX0ZJRk9TIC0gMSldID0gMCB9OworICAgIHtERUZBVUxUX0ZJRk9fMF9MRU4sIFsxIC4uLihNQVhfVFhfRklGT1MgLSAxKV0gPSBERUZBVUxUX0ZJRk9fMV83X0xFTn07CiBzdGF0aWMgdW5zaWduZWQgaW50IHJ4X3JpbmdfbnVtID0gMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnhfcmluZ19zeltNQVhfUlhfUklOR1NdID0KLSAgICB7WzAgLi4uKE1BWF9SWF9SSU5HUyAtIDEpXSA9IDAgfTsKKyAgICB7WzAgLi4uKE1BWF9SWF9SSU5HUyAtIDEpXSA9IFNNQUxMX0JMS19DTlR9Owogc3RhdGljIHVuc2lnbmVkIGludCBydHNfZnJtX2xlbltNQVhfUlhfUklOR1NdID0KICAgICB7WzAgLi4uKE1BWF9SWF9SSU5HUyAtIDEpXSA9IDAgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnhfcmluZ19tb2RlID0gMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdXNlX2NvbnRpbnVvdXNfdHhfaW50cnMgPSAxOwotc3RhdGljIHVuc2lnbmVkIGludCBybWFjX3BhdXNlX3RpbWUgPSA2NTUzNTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm1hY19wYXVzZV90aW1lID0gMHgxMDA7CiBzdGF0aWMgdW5zaWduZWQgaW50IG1jX3BhdXNlX3RocmVzaG9sZF9xMHEzID0gMTg3Owogc3RhdGljIHVuc2lnbmVkIGludCBtY19wYXVzZV90aHJlc2hvbGRfcTRxNyA9IDE4NzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hhcmVkX3NwbGl0czsKQEAgLTU0OSwxMSArNjIwLDYgQEAKIAkJCQkJcnhfYmxvY2tzLT5ibG9ja19kbWFfYWRkciArCiAJCQkJCShyeGRfc2l6ZVtuaWMtPnJ4ZF9tb2RlXSAqIGwpOwogCQkJfQotCi0JCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfYmxvY2tzW2pdLmJsb2NrX3ZpcnRfYWRkciA9Ci0JCQkJdG1wX3ZfYWRkcjsKLQkJCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3Nbal0uYmxvY2tfZG1hX2FkZHIgPQotCQkJCXRtcF9wX2FkZHI7CiAJCX0KIAkJLyogSW50ZXJsaW5raW5nIGFsbCBSeCBCbG9ja3MgKi8KIAkJZm9yIChqID0gMDsgaiA8IGJsa19jbnQ7IGorKykgewpAQCAtNzcyLDcgKzgzOCwyMSBAQAogCXJldHVybiBtb2RlOwogfQogCisjZGVmaW5lIE5FQ19WRU5JRCAgIDB4MTAzMworI2RlZmluZSBORUNfREVWSUQgICAweDAxMjUKK3N0YXRpYyBpbnQgczJpb19vbl9uZWNfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpzMmlvX3BkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnRkZXYgPSBOVUxMOworCXdoaWxlICgodGRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB0ZGV2KSkgIT0gTlVMTCkgeworCQlpZiAoKHRkZXYtPnZlbmRvciA9PSBORUNfVkVOSUQpICYmICh0ZGV2LT5kZXZpY2UgPT0gTkVDX0RFVklEKSl7CisJCQlpZiAodGRldi0+YnVzID09IHMyaW9fcGRldi0+YnVzLT5wYXJlbnQpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBpbnQgYnVzX3NwZWVkWzhdID0gezMzLCAxMzMsIDEzMywgMjAwLCAyNjYsIDEzMywgMjAwLCAyNjZ9OwogLyoqCiAgKiBzMmlvX3ByaW50X3BjaV9tb2RlIC0KICAqLwpAQCAtNzg5LDYgKzg2OSwxNCBAQAogCWlmICggdmFsNjQgJiBQQ0lfTU9ERV9VTktOT1dOX01PREUpCiAJCXJldHVybiAtMTsJLyogVW5rbm93biBQQ0kgbW9kZSAqLwogCisJY29uZmlnLT5idXNfc3BlZWQgPSBidXNfc3BlZWRbbW9kZV07CisKKwlpZiAoczJpb19vbl9uZWNfYnJpZGdlKG5pYy0+cGRldikpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGlzIG9uIFBDSS1FIGJ1c1xuIiwKKwkJCQkJCQluaWMtPmRldi0+bmFtZSk7CisJCXJldHVybiBtb2RlOworCX0KKwogCWlmICh2YWw2NCAmIFBDSV9NT0RFXzMyX0JJVFMpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGlzIG9uIDMyIGJpdCAiLCBuaWMtPmRldi0+bmFtZSk7CiAJfSBlbHNlIHsKQEAgLTc5OCwzNSArODg2LDI3IEBACiAJc3dpdGNoKG1vZGUpIHsKIAkJY2FzZSBQQ0lfTU9ERV9QQ0lfMzM6CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIjMzTUh6IFBDSSBidXNcbiIpOwotCQkJY29uZmlnLT5idXNfc3BlZWQgPSAzMzsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9NT0RFX1BDSV82NjoKIAkJCURCR19QUklOVChFUlJfREJHLCAiNjZNSHogUENJIGJ1c1xuIik7Ci0JCQljb25maWctPmJ1c19zcGVlZCA9IDEzMzsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9NT0RFX1BDSVhfTTFfNjY6CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIjY2TUh6IFBDSVgoTTEpIGJ1c1xuIik7Ci0JCQljb25maWctPmJ1c19zcGVlZCA9IDEzMzsgLyogSGVyYyBkb3VibGVzIHRoZSBjbG9jayByYXRlICovCiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfTU9ERV9QQ0lYX00xXzEwMDoKIAkJCURCR19QUklOVChFUlJfREJHLCAiMTAwTUh6IFBDSVgoTTEpIGJ1c1xuIik7Ci0JCQljb25maWctPmJ1c19zcGVlZCA9IDIwMDsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9NT0RFX1BDSVhfTTFfMTMzOgogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIxMzNNSHogUENJWChNMSkgYnVzXG4iKTsKLQkJCWNvbmZpZy0+YnVzX3NwZWVkID0gMjY2OwogCQkJYnJlYWs7CiAJCWNhc2UgUENJX01PREVfUENJWF9NMl82NjoKIAkJCURCR19QUklOVChFUlJfREJHLCAiMTMzTUh6IFBDSVgoTTIpIGJ1c1xuIik7Ci0JCQljb25maWctPmJ1c19zcGVlZCA9IDEzMzsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9NT0RFX1BDSVhfTTJfMTAwOgogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIyMDBNSHogUENJWChNMikgYnVzXG4iKTsKLQkJCWNvbmZpZy0+YnVzX3NwZWVkID0gMjAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUENJX01PREVfUENJWF9NMl8xMzM6CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIjI2Nk1IeiBQQ0lYKE0yKSBidXNcbiIpOwotCQkJY29uZmlnLT5idXNfc3BlZWQgPSAyNjY7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtMTsJLyogVW5zdXBwb3J0ZWQgYnVzIHNwZWVkICovCkBAIC04NTQsNyArOTM0LDcgQEAKIAlpbnQgaSwgajsKIAltYWNfaW5mb190ICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0JaW50IG1kaW9fY250ID0gMCwgZHR4X2NudCA9IDA7CisJaW50IGR0eF9jbnQgPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2hhcmU7CiAJaW50IG1lbV9zaXplOwogCkBAIC05MDEsMjAgKzk4MSw2IEBACiAJdmFsNjQgPSBkZXYtPm10dTsKIAl3cml0ZXEodkJJVCh2YWw2NCwgMiwgMTQpLCAmYmFyMC0+cm1hY19tYXhfcHlsZF9sZW4pOwogCi0JLyoKLQkgKiBDb25maWd1cmluZyB0aGUgWEFVSSBJbnRlcmZhY2Ugb2YgWGVuYS4KLQkgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQkgKiBUbyBDb25maWd1cmUgdGhlIFhlbmEncyBYQVVJLCBvbmUgaGFzIHRvIHdyaXRlIGEgc2VyaWVzCi0JICogb2YgNjQgYml0IHZhbHVlcyBpbnRvIHR3byByZWdpc3RlcnMgaW4gYSBwYXJ0aWN1bGFyCi0JICogc2VxdWVuY2UuIEhlbmNlIGEgbWFjcm8gJ1NXSVRDSF9TSUdOJyBoYXMgYmVlbiBkZWZpbmVkCi0JICogd2hpY2ggd2lsbCBiZSBkZWZpbmVkIGluIHRoZSBhcnJheSBvZiBjb25maWd1cmF0aW9uIHZhbHVlcwotCSAqICh4ZW5hX2R0eF9jZmcgJiB4ZW5hX21kaW9fY2ZnKSBhdCBhcHByb3ByaWF0ZSBwbGFjZXMKLQkgKiB0byBzd2l0Y2ggd3JpdGluZyBmcm9tIG9uZSByZWdzaXRlciB0byBhbm90aGVyLiBXZSBjb250aW51ZQotCSAqIHdyaXRpbmcgdGhlc2UgdmFsdWVzIHVudGlsIHdlIGVuY291bnRlciB0aGUgJ0VORF9TSUdOJyBtYWNyby4KLQkgKiBGb3IgZXhhbXBsZSwgQWZ0ZXIgbWFraW5nIGEgc2VyaWVzIG9mIDIxIHdyaXRlcyBpbnRvCi0JICogZHR4X2NvbnRyb2wgcmVnaXN0ZXIgdGhlICdTV0lUQ0hfU0lHTicgYXBwZWFycyBhbmQgaGVuY2Ugd2UKLQkgKiBzdGFydCB3cml0aW5nIGludG8gbWRpb19jb250cm9sIHVudGlsIHdlIGVuY291bnRlciBFTkRfU0lHTi4KLQkgKi8KIAlpZiAobmljLT5kZXZpY2VfdHlwZSAmIFhGUkFNRV9JSV9ERVZJQ0UpIHsKIAkJd2hpbGUgKGhlcmNfYWN0X2R0eF9jZmdbZHR4X2NudF0gIT0gRU5EX1NJR04pIHsKIAkJCVNQRUNJQUxfUkVHX1dSSVRFKGhlcmNfYWN0X2R0eF9jZmdbZHR4X2NudF0sCkBAIC05MjQsMzUgKzk5MCwxMSBAQAogCQkJZHR4X2NudCsrOwogCQl9CiAJfSBlbHNlIHsKLQkJd2hpbGUgKDEpIHsKLQkJICAgICAgZHR4X2NmZzoKLQkJCXdoaWxlICh4ZW5hX2R0eF9jZmdbZHR4X2NudF0gIT0gRU5EX1NJR04pIHsKLQkJCQlpZiAoeGVuYV9kdHhfY2ZnW2R0eF9jbnRdID09IFNXSVRDSF9TSUdOKSB7Ci0JCQkJCWR0eF9jbnQrKzsKLQkJCQkJZ290byBtZGlvX2NmZzsKLQkJCQl9Ci0JCQkJU1BFQ0lBTF9SRUdfV1JJVEUoeGVuYV9kdHhfY2ZnW2R0eF9jbnRdLAotCQkJCQkJICAmYmFyMC0+ZHR4X2NvbnRyb2wsIFVGKTsKLQkJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5kdHhfY29udHJvbCk7Ci0JCQkJZHR4X2NudCsrOwotCQkJfQotCQkgICAgICBtZGlvX2NmZzoKLQkJCXdoaWxlICh4ZW5hX21kaW9fY2ZnW21kaW9fY250XSAhPSBFTkRfU0lHTikgewotCQkJCWlmICh4ZW5hX21kaW9fY2ZnW21kaW9fY250XSA9PSBTV0lUQ0hfU0lHTikgewotCQkJCQltZGlvX2NudCsrOwotCQkJCQlnb3RvIGR0eF9jZmc7Ci0JCQkJfQotCQkJCVNQRUNJQUxfUkVHX1dSSVRFKHhlbmFfbWRpb19jZmdbbWRpb19jbnRdLAotCQkJCQkJICAmYmFyMC0+bWRpb19jb250cm9sLCBVRik7Ci0JCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+bWRpb19jb250cm9sKTsKLQkJCQltZGlvX2NudCsrOwotCQkJfQotCQkJaWYgKCh4ZW5hX2R0eF9jZmdbZHR4X2NudF0gPT0gRU5EX1NJR04pICYmCi0JCQkgICAgKHhlbmFfbWRpb19jZmdbbWRpb19jbnRdID09IEVORF9TSUdOKSkgewotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlnb3RvIGR0eF9jZmc7Ci0JCQl9CisJCXdoaWxlICh4ZW5hX2R0eF9jZmdbZHR4X2NudF0gIT0gRU5EX1NJR04pIHsKKwkJCVNQRUNJQUxfUkVHX1dSSVRFKHhlbmFfZHR4X2NmZ1tkdHhfY250XSwKKwkJCQkJICAmYmFyMC0+ZHR4X2NvbnRyb2wsIFVGKTsKKwkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmR0eF9jb250cm9sKTsKKwkJCWR0eF9jbnQrKzsKIAkJfQogCX0KIApAQCAtOTk0LDExICsxMDM2LDYgQEAKIAkJfQogCX0KIAotCS8qIEVuYWJsZSBUeCBGSUZPIHBhcnRpdGlvbiAwLiAqLwotCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnR4X2ZpZm9fcGFydGl0aW9uXzApOwotCXZhbDY0IHw9IEJJVCgwKTsJLyogVG8gZW5hYmxlIHRoZSBGSUZPIHBhcnRpdGlvbi4gKi8KLQl3cml0ZXEodmFsNjQsICZiYXIwLT50eF9maWZvX3BhcnRpdGlvbl8wKTsKLQogCS8qCiAJICogRGlzYWJsZSA0IFBDQ3MgZm9yIFhlbmExLCAyIGFuZCAzIGFzIHBlciBIL1cgYnVnCiAJICogU1hFLTAwOCBUUkFOU01JVCBETUEgQVJCSVRSQVRJT04gSVNTVUUuCkBAIC0xMTc3LDYgKzEyMTQsMTEgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogRW5hYmxlIFR4IEZJRk8gcGFydGl0aW9uIDAuICovCisJdmFsNjQgPSByZWFkcSgmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMCk7CisJdmFsNjQgfD0gKFRYX0ZJRk9fUEFSVElUSU9OX0VOKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT50eF9maWZvX3BhcnRpdGlvbl8wKTsKKwogCS8qIEZpbGxpbmcgdGhlIFJ4IHJvdW5kIHJvYmluIHJlZ2lzdGVycyBhcyBwZXIgdGhlCiAJICogbnVtYmVyIG9mIFJpbmdzIGFuZCBzdGVlcmluZyBiYXNlZCBvbiBRb1MuCiAgICAgICAgICAqLwpAQCAtMTU0NSwxOSArMTU4NywyNiBAQAogCXZhbDY0IHw9IFBJQ19DTlRMX1NIQVJFRF9TUExJVFMoc2hhcmVkX3NwbGl0cyk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cGljX2NvbnRyb2wpOwogCisJaWYgKG5pYy0+Y29uZmlnLmJ1c19zcGVlZCA9PSAyNjYpIHsKKwkJd3JpdGVxKFRYUkVRVE9fVkFMKDB4N2YpIHwgVFhSRVFUT19FTiwgJmJhcjAtPnR4cmVxdGltZW91dCk7CisJCXdyaXRlcSgweDAsICZiYXIwLT5yZWFkX3JldHJ5X2RlbGF5KTsKKwkJd3JpdGVxKDB4MCwgJmJhcjAtPndyaXRlX3JldHJ5X2RlbGF5KTsKKwl9CisKIAkvKgogCSAqIFByb2dyYW1taW5nIHRoZSBIZXJjIHRvIHNwbGl0IGV2ZXJ5IHdyaXRlIHRyYW5zYWN0aW9uCiAJICogdGhhdCBkb2VzIG5vdCBzdGFydCBvbiBhbiBBREIgdG8gcmVkdWNlIGRpc2Nvbm5lY3RzLgogCSAqLwogCWlmIChuaWMtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKLQkJdmFsNjQgPSBXUkVRX1NQTElUX01BU0tfU0VUX01BU0soMjU1KTsKLQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+d3JlcV9zcGxpdF9tYXNrKTsKLQl9Ci0KLQkvKiBTZXR0aW5nIExpbmsgc3RhYmlsaXR5IHBlcmlvZCB0byA2NCBtcyAqLyAKLQlpZiAobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7Ci0JCXZhbDY0ID0gTUlTQ19MSU5LX1NUQUJJTElUWV9QUkQoMyk7CisJCXZhbDY0ID0gRVhUX1JFUV9FTiB8IE1JU0NfTElOS19TVEFCSUxJVFlfUFJEKDMpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5taXNjX2NvbnRyb2wpOworCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5waWNfY29udHJvbDIpOworCQl2YWw2NCAmPSB+KEJJVCgxMyl8QklUKDE0KXxCSVQoMTUpKTsKKwkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cGljX2NvbnRyb2wyKTsKKwl9CisJaWYgKHN0cnN0cihuaWMtPnByb2R1Y3RfbmFtZSwgIkNYNCIpKSB7CisJCXZhbDY0ID0gVE1BQ19BVkdfSVBHKDB4MTcpOworCQl3cml0ZXEodmFsNjQsICZiYXIwLT50bWFjX2F2Z19pcGcpOwogCX0KIAogCXJldHVybiBTVUNDRVNTOwpAQCAtMTk0OCw2ICsxOTk3LDEwIEBACiAJCQl2YWw2NCB8PSBQUkNfQ1RSTF9SQ19FTkFCTEVEOwogCQllbHNlCiAJCQl2YWw2NCB8PSBQUkNfQ1RSTF9SQ19FTkFCTEVEIHwgUFJDX0NUUkxfUklOR19NT0RFXzM7CisJCWlmIChuaWMtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpCisJCQl2YWw2NCB8PSBQUkNfQ1RSTF9HUk9VUF9SRUFEUzsKKwkJdmFsNjQgJj0gflBSQ19DVFJMX1JYRF9CQUNLT0ZGX0lOVEVSVkFMKDB4RkZGRkZGKTsKKwkJdmFsNjQgfD0gUFJDX0NUUkxfUlhEX0JBQ0tPRkZfSU5URVJWQUwoMHgxMDAwKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cHJjX2N0cmxfbltpXSk7CiAJfQogCkBAIC0yMDE4LDYgKzIwNzEsMTMgQEAKIAl2YWw2NCB8PSBBREFQVEVSX0VPSV9UWF9PTjsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogCisJaWYgKHMyaW9fbGlua19mYXVsdF9pbmRpY2F0aW9uKG5pYykgPT0gTUFDX1JNQUNfRVJSX1RJTUVSKSB7CisJCS8qCisJCSAqIERvbnQgc2VlIGxpbmsgc3RhdGUgaW50ZXJydXB0cyBpbml0YWxseSBvbiBzb21lIHN3aXRjaGVzLAorCQkgKiBzbyBkaXJlY3RseSBzY2hlZHVsaW5nIHRoZSBsaW5rIHN0YXRlIHRhc2sgaGVyZS4KKwkJICovCisJCXNjaGVkdWxlX3dvcmsoJm5pYy0+c2V0X2xpbmtfdGFzayk7CisJfQogCS8qIFNYRS0wMDI6IEluaXRpYWxpemUgbGluayBhbmQgYWN0aXZpdHkgTEVEICovCiAJc3ViaWQgPSBuaWMtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CiAJaWYgKCgoc3ViaWQgJiAweEZGKSA+PSAweDA3KSAmJgpAQCAtMjAyOSwxMiArMjA4OSw2IEBACiAJCXdyaXRlcSh2YWw2NCwgKHZvaWQgX19pb21lbSAqKWJhcjAgKyAweDI3MDApOwogCX0KIAotCS8qCi0JICogRG9uJ3Qgc2VlIGxpbmsgc3RhdGUgaW50ZXJydXB0cyBvbiBjZXJ0YWluIHN3aXRjaGVzLCBzbwotCSAqIGRpcmVjdGx5IHNjaGVkdWxpbmcgYSBsaW5rIHN0YXRlIHRhc2sgZnJvbSBoZXJlLgotCSAqLwotCXNjaGVkdWxlX3dvcmsoJm5pYy0+c2V0X2xpbmtfdGFzayk7Ci0KIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIC8qKgpAQCAtMjEzNCw3ICsyMTg4LDcgQEAKIHsKIAlYRU5BX2Rldl9jb25maWdfdCBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXJlZ2lzdGVyIHU2NCB2YWw2NCA9IDA7Ci0JdTE2IGludGVycnVwdGlibGUsIGk7CisJdTE2IGludGVycnVwdGlibGU7CiAJbWFjX2luZm9fdCAqbWFjX2NvbnRyb2w7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwogCkBAIC0yMTQ3LDEyICsyMjAxLDEwIEBACiAJaW50ZXJydXB0aWJsZSB8PSBUWF9NQUNfSU5UUiB8IFJYX01BQ19JTlRSOwogCWVuX2Rpc19hYmxlX25pY19pbnRycyhuaWMsIGludGVycnVwdGlibGUsIERJU0FCTEVfSU5UUlMpOwogCi0JLyogIERpc2FibGUgUFJDcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+cHJjX2N0cmxfbltpXSk7Ci0JCXZhbDY0ICY9IH4oKHU2NCkgUFJDX0NUUkxfUkNfRU5BQkxFRCk7Ci0JCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnByY19jdHJsX25baV0pOwotCX0KKwkvKiBDbGVhcmluZyBBZGFwdGVyX0VuIGJpdCBvZiBBREFQVEVSX0NPTlRST0wgUmVnaXN0ZXIgKi8KKwl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOworCXZhbDY0ICY9IH4oQURBUFRFUl9DTlRMX0VOKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogfQogCiBzdGF0aWMgaW50IGZpbGxfcnhkXzNidWYobmljX3QgKm5pYywgUnhEX3QgKnJ4ZHAsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0yMjMxLDEzICsyMjgzLDEyIEBACiAJYWxsb2NfY250ID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLnBrdF9jbnQgLQogCSAgICBhdG9taWNfcmVhZCgmbmljLT5yeF9idWZzX2xlZnRbcmluZ19ub10pOwogCisJYmxvY2tfbm8xID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLnJ4X2N1cnJfZ2V0X2luZm8uYmxvY2tfaW5kZXg7CisJb2ZmMSA9IG1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5yeF9jdXJyX2dldF9pbmZvLm9mZnNldDsKIAl3aGlsZSAoYWxsb2NfdGFiIDwgYWxsb2NfY250KSB7CiAJCWJsb2NrX25vID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLnJ4X2N1cnJfcHV0X2luZm8uCiAJCSAgICBibG9ja19pbmRleDsKLQkJYmxvY2tfbm8xID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLnJ4X2N1cnJfZ2V0X2luZm8uCi0JCSAgICBibG9ja19pbmRleDsKIAkJb2ZmID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLnJ4X2N1cnJfcHV0X2luZm8ub2Zmc2V0OwotCQlvZmYxID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0OwogCiAJCXJ4ZHAgPSBtYWNfY29udHJvbC0+cmluZ3NbcmluZ19ub10uCiAJCQkJcnhfYmxvY2tzW2Jsb2NrX25vXS5yeGRzW29mZl0udmlydF9hZGRyOwpAQCAtMjMwNyw5ICsyMzU4LDkgQEAKIAkJCW1lbXNldChyeGRwLCAwLCBzaXplb2YoUnhEMV90KSk7CiAJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAJCQkoKFJ4RDFfdCopcnhkcCktPkJ1ZmZlcjBfcHRyID0gcGNpX21hcF9zaW5nbGUKLQkJCSAgICAobmljLT5wZGV2LCBza2ItPmRhdGEsIHNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlyeGRwLT5Db250cm9sXzIgJj0gKH5NQVNLX0JVRkZFUjBfU0laRV8xKTsKLQkJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMF9TSVpFXzEoc2l6ZSk7CisJCQkgICAgKG5pYy0+cGRldiwgc2tiLT5kYXRhLCBzaXplIC0gTkVUX0lQX0FMSUdOLAorCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzEoc2l6ZSAtIE5FVF9JUF9BTElHTik7CiAKIAkJfSBlbHNlIGlmIChuaWMtPnJ4ZF9tb2RlID49IFJYRF9NT0RFXzNBKSB7CiAJCQkvKgpAQCAtMjUxNiw3ICsyNTY3LDcgQEAKIAltYWNfaW5mb190ICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKLQl1NjQgdmFsNjQ7CisJdTY0IHZhbDY0ID0gMHhGRkZGRkZGRkZGRkZGRkZGVUxMOwogCWludCBpOwogCiAJYXRvbWljX2luYygmbmljLT5pc3JfY250KTsKQEAgLTI1MjgsOCArMjU3OSw4IEBACiAJCW5pYy0+cGt0c190b19wcm9jZXNzID0gZGV2LT5xdW90YTsKIAlvcmdfcGt0c190b19wcm9jZXNzID0gbmljLT5wa3RzX3RvX3Byb2Nlc3M7CiAKLQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5yeF90cmFmZmljX2ludCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfdHJhZmZpY19pbnQpOworCXZhbDY0ID0gcmVhZGwoJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKIAkJcnhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+cmluZ3NbaV0pOwpAQCAtMjU1NCw3ICsyNjA1LDggQEAKIAkJfQogCX0KIAkvKiBSZSBlbmFibGUgdGhlIFJ4IGludGVycnVwdHMuICovCi0JZW5fZGlzX2FibGVfbmljX2ludHJzKG5pYywgUlhfVFJBRkZJQ19JTlRSLCBFTkFCTEVfSU5UUlMpOworCXdyaXRlcSgweDAsICZiYXIwLT5yeF90cmFmZmljX21hc2spOworCXZhbDY0ID0gcmVhZGwoJmJhcjAtPnJ4X3RyYWZmaWNfbWFzayk7CiAJYXRvbWljX2RlYygmbmljLT5pc3JfY250KTsKIAlyZXR1cm4gMDsKIApAQCAtMjY2Niw2ICsyNzE4LDcgQEAKIAkJCQkJICgoUnhEM190KilyeGRwKS0+QnVmZmVyMl9wdHIsCiAJCQkJCSBkZXYtPm10dSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJfQorCQlwcmVmZXRjaChza2ItPmRhdGEpOwogCQlyeF9vc21faGFuZGxlcihyaW5nX2RhdGEsIHJ4ZHApOwogCQlnZXRfaW5mby5vZmZzZXQrKzsKIAkJcmluZ19kYXRhLT5yeF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IGdldF9pbmZvLm9mZnNldDsKQEAgLTI3MzcsNiArMjc5MCwxMCBAQAogCQlpZiAodHhkbHAtPkNvbnRyb2xfMSAmIFRYRF9UX0NPREUpIHsKIAkJCXVuc2lnbmVkIGxvbmcgbG9uZyBlcnI7CiAJCQllcnIgPSB0eGRscC0+Q29udHJvbF8xICYgVFhEX1RfQ09ERTsKKwkJCWlmIChlcnIgJiAweDEpIHsKKwkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJCQlwYXJpdHlfZXJyX2NudCsrOworCQkJfQogCQkJaWYgKChlcnIgPj4gNDgpID09IDB4QSkgewogCQkJCURCR19QUklOVChUWF9EQkcsICJUeEQgcmV0dXJuZWQgZHVlIFwKIHRvIGxvc3Mgb2YgbGlua1xuIik7CkBAIC0yNzYwLDcgKzI4MTcsOCBAQAogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCiAJCWdldF9pbmZvLm9mZnNldCsrOwotCQlnZXRfaW5mby5vZmZzZXQgJT0gZ2V0X2luZm8uZmlmb19sZW4gKyAxOworCQlpZiAoZ2V0X2luZm8ub2Zmc2V0ID09IGdldF9pbmZvLmZpZm9fbGVuICsgMSkKKwkJCWdldF9pbmZvLm9mZnNldCA9IDA7CiAJCXR4ZGxwID0gKFR4RF90ICopIGZpZm9fZGF0YS0+bGlzdF9pbmZvCiAJCSAgICBbZ2V0X2luZm8ub2Zmc2V0XS5saXN0X3ZpcnRfYWRkcjsKIAkJZmlmb19kYXRhLT50eF9jdXJyX2dldF9pbmZvLm9mZnNldCA9CkBAIC0yNzc0LDYgKzI4MzIsMjU2IEBACiB9CiAKIC8qKgorICogIHMyaW9fbWRpb193cml0ZSAtIEZ1bmN0aW9uIHRvIHdyaXRlIGluIHRvIE1ESU8gcmVnaXN0ZXJzCisgKiAgQG1tZF90eXBlIDogTU1EIHR5cGUgdmFsdWUgKFBNQS9QTUQvV0lTL1BDUy9QSFlYUykKKyAqICBAYWRkciAgICAgOiBhZGRyZXNzIHZhbHVlCisgKiAgQHZhbHVlICAgIDogZGF0YSB2YWx1ZQorICogIEBkZXYgICAgICA6IHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKKyAqICBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gd3JpdGUgdmFsdWVzIHRvIHRoZSBNRElPIHJlZ2lzdGVycworICogIE5PTkUKKyAqLworc3RhdGljIHZvaWQgczJpb19tZGlvX3dyaXRlKHUzMiBtbWRfdHlwZSwgdTY0IGFkZHIsIHUxNiB2YWx1ZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1NjQgdmFsNjQgPSAweDA7CisJbmljX3QgKnNwID0gZGV2LT5wcml2OworCVhFTkFfZGV2X2NvbmZpZ190ICpiYXIwID0gKFhFTkFfZGV2X2NvbmZpZ190ICopc3AtPmJhcjA7CisKKwkvL2FkZHJlc3MgdHJhbnNhY3Rpb24KKwl2YWw2NCA9IHZhbDY0IHwgTURJT19NTURfSU5EWF9BRERSKGFkZHIpCisJCQl8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQorCQkJfCBNRElPX01NU19QUlRfQUREUigweDApOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CisJdmFsNjQgPSB2YWw2NCB8IE1ESU9fQ1RSTF9TVEFSVF9UUkFOUygweEUpOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CisJdWRlbGF5KDEwMCk7CisKKwkvL0RhdGEgdHJhbnNhY3Rpb24KKwl2YWw2NCA9IDB4MDsKKwl2YWw2NCA9IHZhbDY0IHwgTURJT19NTURfSU5EWF9BRERSKGFkZHIpCisJCQl8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQorCQkJfCBNRElPX01NU19QUlRfQUREUigweDApCisJCQl8IE1ESU9fTURJT19EQVRBKHZhbHVlKQorCQkJfCBNRElPX09QKE1ESU9fT1BfV1JJVEVfVFJBTlMpOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CisJdmFsNjQgPSB2YWw2NCB8IE1ESU9fQ1RSTF9TVEFSVF9UUkFOUygweEUpOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CisJdWRlbGF5KDEwMCk7CisKKwl2YWw2NCA9IDB4MDsKKwl2YWw2NCA9IHZhbDY0IHwgTURJT19NTURfSU5EWF9BRERSKGFkZHIpCisJfCBNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkKKwl8IE1ESU9fTU1TX1BSVF9BRERSKDB4MCkKKwl8IE1ESU9fT1AoTURJT19PUF9SRUFEX1RSQU5TKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXVkZWxheSgxMDApOworCit9CisKKy8qKgorICogIHMyaW9fbWRpb19yZWFkIC0gRnVuY3Rpb24gdG8gd3JpdGUgaW4gdG8gTURJTyByZWdpc3RlcnMKKyAqICBAbW1kX3R5cGUgOiBNTUQgdHlwZSB2YWx1ZSAoUE1BL1BNRC9XSVMvUENTL1BIWVhTKQorICogIEBhZGRyICAgICA6IGFkZHJlc3MgdmFsdWUKKyAqICBAZGV2ICAgICAgOiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCisgKiAgRGVzY3JpcHRpb246CisgKiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgdmFsdWVzIHRvIHRoZSBNRElPIHJlZ2lzdGVycworICogIE5PTkUKKyAqLworc3RhdGljIHU2NCBzMmlvX21kaW9fcmVhZCh1MzIgbW1kX3R5cGUsIHU2NCBhZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXU2NCB2YWw2NCA9IDB4MDsKKwl1NjQgcnZhbDY0ID0gMHgwOworCW5pY190ICpzcCA9IGRldi0+cHJpdjsKKwlYRU5BX2Rldl9jb25maWdfdCAqYmFyMCA9IChYRU5BX2Rldl9jb25maWdfdCAqKXNwLT5iYXIwOworCisJLyogYWRkcmVzcyB0cmFuc2FjdGlvbiAqLworCXZhbDY0ID0gdmFsNjQgfCBNRElPX01NRF9JTkRYX0FERFIoYWRkcikKKwkJCXwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCisJCQl8IE1ESU9fTU1TX1BSVF9BRERSKDB4MCk7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKKwl2YWw2NCA9IHZhbDY0IHwgTURJT19DVFJMX1NUQVJUX1RSQU5TKDB4RSk7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKKwl1ZGVsYXkoMTAwKTsKKworCS8qIERhdGEgdHJhbnNhY3Rpb24gKi8KKwl2YWw2NCA9IDB4MDsKKwl2YWw2NCA9IHZhbDY0IHwgTURJT19NTURfSU5EWF9BRERSKGFkZHIpCisJCQl8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQorCQkJfCBNRElPX01NU19QUlRfQUREUigweDApCisJCQl8IE1ESU9fT1AoTURJT19PUF9SRUFEX1RSQU5TKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXVkZWxheSgxMDApOworCisJLyogUmVhZCB0aGUgdmFsdWUgZnJvbSByZWdzICovCisJcnZhbDY0ID0gcmVhZHEoJmJhcjAtPm1kaW9fY29udHJvbCk7CisJcnZhbDY0ID0gcnZhbDY0ICYgMHhGRkZGMDAwMDsKKwlydmFsNjQgPSBydmFsNjQgPj4gMTY7CisJcmV0dXJuIHJ2YWw2NDsKK30KKy8qKgorICogIHMyaW9fY2hrX3hwYWtfY291bnRlciAtIEZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHhwYWsgY291bnRlcnMKKyAqICBAY291bnRlciAgICAgIDogY291dGVyIHZhbHVlIHRvIGJlIHVwZGF0ZWQKKyAqICBAZmxhZyAgICAgICAgIDogZmxhZyB0byBpbmRpY2F0ZSB0aGUgc3RhdHVzCisgKiAgQHR5cGUgICAgICAgICA6IGNvdW50ZXIgdHlwZQorICogIERlc2NyaXB0aW9uOgorICogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgeHBhayBjb3VudGVycyB2YWx1ZQorICogIE5PTkUKKyAqLworCitzdGF0aWMgdm9pZCBzMmlvX2Noa194cGFrX2NvdW50ZXIodTY0ICpjb3VudGVyLCB1NjQgKiByZWdzX3N0YXQsIHUzMiBpbmRleCwgdTE2IGZsYWcsIHUxNiB0eXBlKQoreworCXU2NCBtYXNrID0gMHgzOworCXU2NCB2YWw2NDsKKwlpbnQgaTsKKwlmb3IoaSA9IDA7IGkgPGluZGV4OyBpKyspCisJCW1hc2sgPSBtYXNrIDw8IDB4MjsKKworCWlmKGZsYWcgPiAwKQorCXsKKwkJKmNvdW50ZXIgPSAqY291bnRlciArIDE7CisJCXZhbDY0ID0gKnJlZ3Nfc3RhdCAmIG1hc2s7CisJCXZhbDY0ID0gdmFsNjQgPj4gKGluZGV4ICogMHgyKTsKKwkJdmFsNjQgPSB2YWw2NCArIDE7CisJCWlmKHZhbDY0ID09IDMpCisJCXsKKwkJCXN3aXRjaCh0eXBlKQorCQkJeworCQkJY2FzZSAxOgorCQkJCURCR19QUklOVChFUlJfREJHLCAiVGFrZSBYZnJhbWUgTklDIG91dCBvZiAiCisJCQkJCSAgInNlcnZpY2UuIEV4Y2Vzc2l2ZSB0ZW1wZXJhdHVyZXMgbWF5ICIKKwkJCQkJICAicmVzdWx0IGluIHByZW1hdHVyZSB0cmFuc2NlaXZlciAiCisJCQkJCSAgImZhaWx1cmUgXG4iKTsKKwkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCURCR19QUklOVChFUlJfREJHLCAiVGFrZSBYZnJhbWUgTklDIG91dCBvZiAiCisJCQkJCSAgInNlcnZpY2UgRXhjZXNzaXZlIGJpYXMgY3VycmVudHMgbWF5ICIKKwkJCQkJICAiaW5kaWNhdGUgaW1taW5lbnQgbGFzZXIgZGlvZGUgIgorCQkJCQkgICJmYWlsdXJlIFxuIik7CisJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIlRha2UgWGZyYW1lIE5JQyBvdXQgb2YgIgorCQkJCQkgICJzZXJ2aWNlIEV4Y2Vzc2l2ZSBsYXNlciBvdXRwdXQgIgorCQkJCQkgICJwb3dlciBtYXkgc2F0dXJhdGUgZmFyLWVuZCAiCisJCQkJCSAgInJlY2VpdmVyXG4iKTsKKwkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIkluY29ycmVjdCBYUEFLIEFsYXJtICIKKwkJCQkJICAidHlwZSBcbiIpOworCQkJfQorCQkJdmFsNjQgPSAweDA7CisJCX0KKwkJdmFsNjQgPSB2YWw2NCA8PCAoaW5kZXggKiAweDIpOworCQkqcmVnc19zdGF0ID0gKCpyZWdzX3N0YXQgJiAofm1hc2spKSB8ICh2YWw2NCk7CisKKwl9IGVsc2UgeworCQkqcmVnc19zdGF0ID0gKnJlZ3Nfc3RhdCAmICh+bWFzayk7CisJfQorfQorCisvKioKKyAqICBzMmlvX3VwZHRfeHBha19jb3VudGVyIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSB4cGFrIGNvdW50ZXJzCisgKiAgQGRldiAgICAgICAgIDogcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdAorICogIERlc2NyaXB0aW9uOgorICogIFRoaXMgZnVuY3Rpb24gaXMgdG8gdXBhdGUgdGhlIHN0YXR1cyBvZiB0aGUgeHBhayBjb3VudGVycyB2YWx1ZQorICogIE5PTkUKKyAqLworc3RhdGljIHZvaWQgczJpb191cGR0X3hwYWtfY291bnRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXUxNiBmbGFnICA9IDB4MDsKKwl1MTYgdHlwZSAgPSAweDA7CisJdTE2IHZhbDE2ID0gMHgwOworCXU2NCB2YWw2NCA9IDB4MDsKKwl1NjQgYWRkciAgPSAweDA7CisKKwluaWNfdCAqc3AgPSBkZXYtPnByaXY7CisJU3RhdEluZm9fdCAqc3RhdF9pbmZvID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87CisKKwkvKiBDaGVjayB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBNRElPIHNsYXZlICovCisJYWRkciA9IDB4MDAwMDsKKwl2YWw2NCA9IDB4MDsKKwl2YWw2NCA9IHMyaW9fbWRpb19yZWFkKE1ESU9fTU1EX1BNQV9ERVZfQUREUiwgYWRkciwgZGV2KTsKKwlpZigodmFsNjQgPT0gMHhGRkZGKSB8fCAodmFsNjQgPT0gMHgwMDAwKSkKKwl7CisJCURCR19QUklOVChFUlJfREJHLCAiRVJSOiBNRElPIHNsYXZlIGFjY2VzcyBmYWlsZWQgLSAiCisJCQkgICJSZXR1cm5lZCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGZvciB0aGUgZXhwZWN0ZSB2YWx1ZSBvZiAyMDQwIGF0IFBNQSBhZGRyZXNzIDB4MDAwMCAqLworCWlmKHZhbDY0ICE9IDB4MjA0MCkKKwl7CisJCURCR19QUklOVChFUlJfREJHLCAiSW5jb3JyZWN0IHZhbHVlIGF0IFBNQSBhZGRyZXNzIDB4MDAwMCAtICIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJldHVybmVkOiAlbGx4LSBFeHBlY3RlZDogMHgyMDQwXG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIExvYWRpbmcgdGhlIERPTSByZWdpc3RlciB0byBNRElPIHJlZ2lzdGVyICovCisJYWRkciA9IDB4QTEwMDsKKwlzMmlvX21kaW9fd3JpdGUoTURJT19NTURfUE1BX0RFVl9BRERSLCBhZGRyLCB2YWwxNiwgZGV2KTsKKwl2YWw2NCA9IHMyaW9fbWRpb19yZWFkKE1ESU9fTU1EX1BNQV9ERVZfQUREUiwgYWRkciwgZGV2KTsKKworCS8qIFJlYWRpbmcgdGhlIEFsYXJtIGZsYWdzICovCisJYWRkciA9IDB4QTA3MDsKKwl2YWw2NCA9IDB4MDsKKwl2YWw2NCA9IHMyaW9fbWRpb19yZWFkKE1ESU9fTU1EX1BNQV9ERVZfQUREUiwgYWRkciwgZGV2KTsKKworCWZsYWcgPSBDSEVDS0JJVCh2YWw2NCwgMHg3KTsKKwl0eXBlID0gMTsKKwlzMmlvX2Noa194cGFrX2NvdW50ZXIoJnN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX3RyYW5zY2VpdmVyX3RlbXBfaGlnaCwKKwkJCQkmc3RhdF9pbmZvLT54cGFrX3N0YXQueHBha19yZWdzX3N0YXQsCisJCQkJMHgwLCBmbGFnLCB0eXBlKTsKKworCWlmKENIRUNLQklUKHZhbDY0LCAweDYpKQorCQlzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdysrOworCisJZmxhZyA9IENIRUNLQklUKHZhbDY0LCAweDMpOworCXR5cGUgPSAyOworCXMyaW9fY2hrX3hwYWtfY291bnRlcigmc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2gsCisJCQkJJnN0YXRfaW5mby0+eHBha19zdGF0LnhwYWtfcmVnc19zdGF0LAorCQkJCTB4MiwgZmxhZywgdHlwZSk7CisKKwlpZihDSEVDS0JJVCh2YWw2NCwgMHgyKSkKKwkJc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2xvdysrOworCisJZmxhZyA9IENIRUNLQklUKHZhbDY0LCAweDEpOworCXR5cGUgPSAzOworCXMyaW9fY2hrX3hwYWtfY291bnRlcigmc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2gsCisJCQkJJnN0YXRfaW5mby0+eHBha19zdGF0LnhwYWtfcmVnc19zdGF0LAorCQkJCTB4NCwgZmxhZywgdHlwZSk7CisKKwlpZihDSEVDS0JJVCh2YWw2NCwgMHgwKSkKKwkJc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdysrOworCisJLyogUmVhZGluZyB0aGUgV2FybmluZyBmbGFncyAqLworCWFkZHIgPSAweEEwNzQ7CisJdmFsNjQgPSAweDA7CisJdmFsNjQgPSBzMmlvX21kaW9fcmVhZChNRElPX01NRF9QTUFfREVWX0FERFIsIGFkZHIsIGRldik7CisKKwlpZihDSEVDS0JJVCh2YWw2NCwgMHg3KSkKKwkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl90cmFuc2NlaXZlcl90ZW1wX2hpZ2grKzsKKworCWlmKENIRUNLQklUKHZhbDY0LCAweDYpKQorCQlzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX3RyYW5zY2VpdmVyX3RlbXBfbG93Kys7CisKKwlpZihDSEVDS0JJVCh2YWw2NCwgMHgzKSkKKwkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaCsrOworCisJaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MikpCisJCXN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfYmlhc19jdXJyZW50X2xvdysrOworCisJaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MSkpCisJCXN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2grKzsKKworCWlmKENIRUNLQklUKHZhbDY0LCAweDApKQorCQlzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9sb3crKzsKK30KKworLyoqCiAgKiAgYWxhcm1faW50cl9oYW5kbGVyIC0gQWxhcm0gSW50ZXJycnVwdCBoYW5kbGVyCiAgKiAgQG5pYzogZGV2aWNlIHByaXZhdGUgdmFyaWFibGUKICAqICBEZXNjcmlwdGlvbjogSWYgdGhlIGludGVycnVwdCB3YXMgbmVpdGhlciBiZWNhdXNlIG9mIFJ4IHBhY2tldCBvciBUeApAQCAtMjc5MCw2ICszMDk4LDE4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBuaWMtPmRldjsKIAlYRU5BX2Rldl9jb25maWdfdCBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXJlZ2lzdGVyIHU2NCB2YWw2NCA9IDAsIGVycl9yZWcgPSAwOworCXU2NCBjbnQ7CisJaW50IGk7CisJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnJpbmdfZnVsbF9jbnQgPSAwOworCS8qIEhhbmRsaW5nIHRoZSBYUEFLIGNvdW50ZXJzIHVwZGF0ZSAqLworCWlmKG5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+eHBha19zdGF0LnhwYWtfdGltZXJfY291bnQgPCA3MjAwMCkgeworCQkvKiB3YWl0aW5nIGZvciBhbiBob3VyICovCisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+eHBha19zdGF0LnhwYWtfdGltZXJfY291bnQrKzsKKwl9IGVsc2UgeworCQlzMmlvX3VwZHRfeHBha19jb3VudGVyKGRldik7CisJCS8qIHJlc2V0IHRoZSBjb3VudCB0byB6ZXJvICovCisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+eHBha19zdGF0LnhwYWtfdGltZXJfY291bnQgPSAwOworCX0KIAogCS8qIEhhbmRsaW5nIGxpbmsgc3RhdHVzIGNoYW5nZSBlcnJvciBJbnRyICovCiAJaWYgKHMyaW9fbGlua19mYXVsdF9pbmRpY2F0aW9uKG5pYykgPT0gTUFDX1JNQUNfRVJSX1RJTUVSKSB7CkBAIC0yODE2LDYgKzMxMzYsOCBAQAogCQkJCQkgICAgIE1DX0VSUl9SRUdfTUlSSV9FQ0NfREJfRVJSXzEpKSB7CiAJCQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJCQkJc2NoZWR1bGVfd29yaygmbmljLT5yc3RfdGltZXJfdGFzayk7CisJCQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KKwkJCQkJCQlzb2Z0X3Jlc2V0X2NudCsrOwogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI4MjcsMTEgKzMxNDksMTMgQEAKIAkvKiBJbiBjYXNlIG9mIGEgc2VyaW91cyBlcnJvciwgdGhlIGRldmljZSB3aWxsIGJlIFJlc2V0LiAqLwogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnNlcnJfc291cmNlKTsKIAlpZiAodmFsNjQgJiBTRVJSX1NPVVJDRV9BTlkpIHsKKwkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnNlcmlvdXNfZXJyX2NudCsrOwogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgaW5kaWNhdGVzICIsIGRldi0+bmFtZSk7CiAJCURCR19QUklOVChFUlJfREJHLCAic2VyaW91cyBlcnJvciAlbGx4ISFcbiIsIAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlzY2hlZHVsZV93b3JrKCZuaWMtPnJzdF90aW1lcl90YXNrKTsKKwkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnNvZnRfcmVzZXRfY250Kys7CiAJfQogCiAJLyoKQEAgLTI4NDksNiArMzE3MywzNSBAQAogCQlhYyA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogCQlzY2hlZHVsZV93b3JrKCZuaWMtPnNldF9saW5rX3Rhc2spOwogCX0KKwkvKiBDaGVjayBmb3IgZGF0YSBwYXJpdHkgZXJyb3IgKi8KKwl2YWw2NCA9IHJlYWRxKCZiYXIwLT5waWNfaW50X3N0YXR1cyk7CisJaWYgKHZhbDY0ICYgUElDX0lOVF9HUElPKSB7CisJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X3JlZyk7CisJCWlmICh2YWw2NCAmIEdQSU9fSU5UX1JFR19EUF9FUlJfSU5UKSB7CisJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQucGFyaXR5X2Vycl9jbnQrKzsKKwkJCXNjaGVkdWxlX3dvcmsoJm5pYy0+cnN0X3RpbWVyX3Rhc2spOworCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnNvZnRfcmVzZXRfY250Kys7CisJCX0KKwl9CisKKwkvKiBDaGVjayBmb3IgcmluZyBmdWxsIGNvdW50ZXIgKi8KKwlpZiAobmljLT5kZXZpY2VfdHlwZSAmIFhGUkFNRV9JSV9ERVZJQ0UpIHsKKwkJdmFsNjQgPSByZWFkcSgmYmFyMC0+cmluZ19idW1wX2NvdW50ZXIxKTsKKwkJZm9yIChpPTA7IGk8NDsgaSsrKSB7CisJCQljbnQgPSAoIHZhbDY0ICYgdkJJVCgweEZGRkYsKGkqMTYpLDE2KSk7CisJCQljbnQgPj49IDY0IC0gKChpKzEpKjE2KTsKKwkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5yaW5nX2Z1bGxfY250CisJCQkJKz0gY250OworCQl9CisKKwkJdmFsNjQgPSByZWFkcSgmYmFyMC0+cmluZ19idW1wX2NvdW50ZXIyKTsKKwkJZm9yIChpPTA7IGk8NDsgaSsrKSB7CisJCQljbnQgPSAoIHZhbDY0ICYgdkJJVCgweEZGRkYsKGkqMTYpLDE2KSk7CisJCQljbnQgPj49IDY0IC0gKChpKzEpKjE2KTsKKwkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5yaW5nX2Z1bGxfY250CisJCQkJKz0gY250OworCQl9CisJfQogCiAJLyogT3RoZXIgdHlwZSBvZiBpbnRlcnJ1cHRzIGFyZSBub3QgYmVpbmcgaGFuZGxlZCBub3csICBUT0RPICovCiB9CkBAIC0yODY0LDIzICszMjE3LDI2IEBACiAgKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcyBhbmQgRkFJTFVSRSBvbiBmYWlsdXJlLgogICovCiAKLXN0YXRpYyBpbnQgd2FpdF9mb3JfY21kX2NvbXBsZXRlKG5pY190ICogc3ApCitzdGF0aWMgaW50IHdhaXRfZm9yX2NtZF9jb21wbGV0ZSh2b2lkICphZGRyLCB1NjQgYnVzeV9iaXQpCiB7Ci0JWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCWludCByZXQgPSBGQUlMVVJFLCBjbnQgPSAwOwogCXU2NCB2YWw2NDsKIAogCXdoaWxlIChUUlVFKSB7Ci0JCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKLQkJaWYgKCEodmFsNjQgJiBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORykpIHsKKwkJdmFsNjQgPSByZWFkcShhZGRyKTsKKwkJaWYgKCEodmFsNjQgJiBidXN5X2JpdCkpIHsKIAkJCXJldCA9IFNVQ0NFU1M7CiAJCQlicmVhazsKIAkJfQotCQltc2xlZXAoNTApOworCisJCWlmKGluX2ludGVycnVwdCgpKQorCQkJbWRlbGF5KDUwKTsKKwkJZWxzZQorCQkJbXNsZWVwKDUwKTsKKwogCQlpZiAoY250KysgPiAxMCkKIAkJCWJyZWFrOwogCX0KLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5MTksNiArMzI3NSw5IEBACiAJICogUENJIHdyaXRlIHRvIHN3X3Jlc2V0IHJlZ2lzdGVyIGlzIGRvbmUgYnkgdGhpcyB0aW1lLgogCSAqLwogCW1zbGVlcCgyNTApOworCWlmIChzdHJzdHIoc3AtPnByb2R1Y3RfbmFtZSwgIkNYNCIpKSB7CisJCW1zbGVlcCg3NTApOworCX0KIAogCS8qIFJlc3RvcmUgdGhlIFBDSSBzdGF0ZSBzYXZlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCiAJcGNpX3Jlc3RvcmVfc3RhdGUoc3AtPnBkZXYpOwpAQCAtMzEzNyw3ICszNDk2LDcgQEAKIAl1NjQgdmFsNjQ7CiAJaW50IGk7CiAKLQlmb3IgKGk9MDsgaTwgTUFYX1JFUVVFU1RFRF9NU0lfWDsgaSsrKSB7CisJZm9yIChpPTA7IGk8IG5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzOyBpKyspIHsKIAkJd3JpdGVxKG5pYy0+bXNpeF9pbmZvW2ldLmFkZHIsICZiYXIwLT54bXNpX2FkZHJlc3MpOwogCQl3cml0ZXEobmljLT5tc2l4X2luZm9baV0uZGF0YSwgJmJhcjAtPnhtc2lfZGF0YSk7CiAJCXZhbDY0ID0gKEJJVCg3KSB8IEJJVCgxNSkgfCB2QklUKGksIDI2LCA2KSk7CkBAIC0zMTU2LDcgKzM1MTUsNyBAQAogCWludCBpOwogCiAJLyogU3RvcmUgYW5kIGRpc3BsYXkgKi8KLQlmb3IgKGk9MDsgaTwgTUFYX1JFUVVFU1RFRF9NU0lfWDsgaSsrKSB7CisJZm9yIChpPTA7IGk8IG5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzOyBpKyspIHsKIAkJdmFsNjQgPSAoQklUKDE1KSB8IHZCSVQoaSwgMjYsIDYpKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+eG1zaV9hY2Nlc3MpOwogCQlpZiAod2FpdF9mb3JfbXNpeF90cmFucyhuaWMsIGkpKSB7CkBAIC0zMjg0LDE1ICszNjQzLDI0IEBACiAJCXdyaXRlcSh0eF9tYXQsICZiYXIwLT50eF9tYXQwX25bN10pOwogCX0KIAorCW5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzID0gMDsKIAlyZXQgPSBwY2lfZW5hYmxlX21zaXgobmljLT5wZGV2LCBuaWMtPmVudHJpZXMsIE1BWF9SRVFVRVNURURfTVNJX1gpOworCS8qIFdlIGZhaWwgaW5pdCBpZiBlcnJvciBvciB3ZSBnZXQgbGVzcyB2ZWN0b3JzIHRoYW4gbWluIHJlcXVpcmVkICovCisJaWYgKHJldCA+PSAobmljLT5jb25maWcudHhfZmlmb19udW0gKyBuaWMtPmNvbmZpZy5yeF9yaW5nX251bSArIDEpKSB7CisJCW5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzID0gcmV0OworCQlyZXQgPSBwY2lfZW5hYmxlX21zaXgobmljLT5wZGV2LCBuaWMtPmVudHJpZXMsIHJldCk7CisJfQogCWlmIChyZXQpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRW5hYmxpbmcgTVNJWCBmYWlsZWRcbiIsIG5pYy0+ZGV2LT5uYW1lKTsKIAkJa2ZyZWUobmljLT5lbnRyaWVzKTsKIAkJa2ZyZWUobmljLT5zMmlvX2VudHJpZXMpOwogCQluaWMtPmVudHJpZXMgPSBOVUxMOwogCQluaWMtPnMyaW9fZW50cmllcyA9IE5VTEw7CisJCW5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCWlmICghbmljLT5hdmFpbF9tc2l4X3ZlY3RvcnMpCisJCW5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzID0gTUFYX1JFUVVFU1RFRF9NU0lfWDsKIAogCS8qCiAJICogVG8gZW5hYmxlIE1TSS1YLCBNU0kgYWxzbyBuZWVkcyB0byBiZSBlbmFibGVkLCBkdWUgdG8gYSBidWcKQEAgLTMzMjUsOCArMzY5Myw2IEBACiB7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCWludCBlcnIgPSAwOwotCWludCBpOwotCXUxNiBtc2lfY29udHJvbDsgLyogVGVtcCB2YXJpYWJsZSAqLwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgeW91IGhhdmUgbGluayBvZmYgYnkgZGVmYXVsdCBldmVyeSB0aW1lCkBAIC0zMzM2LDExICszNzAyLDE0IEBACiAJc3AtPmxhc3RfbGlua19zdGF0ZSA9IDA7CiAKIAkvKiBJbml0aWFsaXplIEgvVyBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KLQlpZiAoczJpb19jYXJkX3VwKHNwKSkgeworCWVyciA9IHMyaW9fY2FyZF91cChzcCk7CisJaWYgKGVycikgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBIL1cgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAogCQkJICBkZXYtPm5hbWUpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGh3X2luaXRfZmFpbGVkOworCQlpZiAoZXJyID09IC1FTk9ERVYpCisJCQlnb3RvIGh3X2luaXRfZmFpbGVkOworCQllbHNlCisJCQlnb3RvIGh3X2VuYWJsZV9mYWlsZWQ7CiAJfQogCiAJLyogU3RvcmUgdGhlIHZhbHVlcyBvZiB0aGUgTVNJWCB0YWJsZSBpbiB0aGUgbmljX3Qgc3RydWN0dXJlICovCkBAIC0zMzU3LDYgKzM3MjYsOCBAQAogCQl9CiAJfQogCWlmIChzcC0+aW50cl90eXBlID09IE1TSV9YKSB7CisJCWludCBpOworCiAJCWZvciAoaT0xOyAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gTVNJWF9GTEcpOyBpKyspIHsKIAkJCWlmIChzcC0+czJpb19lbnRyaWVzW2ldLnR5cGUgPT0gTVNJWF9GSUZPX1RZUEUpIHsKIAkJCQlzcHJpbnRmKHNwLT5kZXNjMSwgIiVzOk1TSS1YLSVkLVRYIiwKQEAgLTM0MDksMjQgKzM3ODAsMjYgQEAKIGlzcl9yZWdpc3RyYXRpb25fZmFpbGVkOgogCWRlbF90aW1lcl9zeW5jKCZzcC0+YWxhcm1fdGltZXIpOwogCWlmIChzcC0+aW50cl90eXBlID09IE1TSV9YKSB7Ci0JCWlmIChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgewotCQkJZm9yIChpPTE7IChzcC0+czJpb19lbnRyaWVzW2ldLmluX3VzZSA9PSAKKwkJaW50IGk7CisJCXUxNiBtc2lfY29udHJvbDsgLyogVGVtcCB2YXJpYWJsZSAqLworCisJCWZvciAoaT0xOyAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gCiAJCQkJTVNJWF9SRUdJU1RFUkVEX1NVQ0NFU1MpOyBpKyspIHsKLQkJCQlpbnQgdmVjdG9yID0gc3AtPmVudHJpZXNbaV0udmVjdG9yOwotCQkJCXZvaWQgKmFyZyA9IHNwLT5zMmlvX2VudHJpZXNbaV0uYXJnOworCQkJaW50IHZlY3RvciA9IHNwLT5lbnRyaWVzW2ldLnZlY3RvcjsKKwkJCXZvaWQgKmFyZyA9IHNwLT5zMmlvX2VudHJpZXNbaV0uYXJnOwogCi0JCQkJZnJlZV9pcnEodmVjdG9yLCBhcmcpOwotCQkJfQotCQkJcGNpX2Rpc2FibGVfbXNpeChzcC0+cGRldik7Ci0KLQkJCS8qIFRlbXAgKi8KLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHNwLT5wZGV2LCAweDQyLCAmbXNpX2NvbnRyb2wpOwotCQkJbXNpX2NvbnRyb2wgJj0gMHhGRkZFOyAvKiBEaXNhYmxlIE1TSSAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNwLT5wZGV2LCAweDQyLCBtc2lfY29udHJvbCk7CisJCQlmcmVlX2lycSh2ZWN0b3IsIGFyZyk7CiAJCX0KKwkJcGNpX2Rpc2FibGVfbXNpeChzcC0+cGRldik7CisKKwkJLyogVGVtcCAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChzcC0+cGRldiwgMHg0MiwgJm1zaV9jb250cm9sKTsKKwkJbXNpX2NvbnRyb2wgJj0gMHhGRkZFOyAvKiBEaXNhYmxlIE1TSSAqLworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoc3AtPnBkZXYsIDB4NDIsIG1zaV9jb250cm9sKTsKIAl9CiAJZWxzZSBpZiAoc3AtPmludHJfdHlwZSA9PSBNU0kpCiAJCXBjaV9kaXNhYmxlX21zaShzcC0+cGRldik7Citod19lbmFibGVfZmFpbGVkOgogCXMyaW9fcmVzZXQoc3ApOwogaHdfaW5pdF9mYWlsZWQ6CiAJaWYgKHNwLT5pbnRyX3R5cGUgPT0gTVNJX1gpIHsKQEAgLTM0NTQsMzUgKzM4MjcsMTIgQEAKIHN0YXRpYyBpbnQgczJpb19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW5pY190ICpzcCA9IGRldi0+cHJpdjsKLQlpbnQgaTsKLQl1MTYgbXNpX2NvbnRyb2w7CiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkvKiBSZXNldCBjYXJkLCBraWxsIHRhc2tsZXQgYW5kIGZyZWUgVHggYW5kIFJ4IGJ1ZmZlcnMuICovCi0JczJpb19jYXJkX2Rvd24oc3ApOworCXMyaW9fY2FyZF9kb3duKHNwLCAxKTsKIAotCWlmIChzcC0+aW50cl90eXBlID09IE1TSV9YKSB7Ci0JCWlmIChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgewotCQkJZm9yIChpPTE7IChzcC0+czJpb19lbnRyaWVzW2ldLmluX3VzZSA9PSAKLQkJCQkJTVNJWF9SRUdJU1RFUkVEX1NVQ0NFU1MpOyBpKyspIHsKLQkJCQlpbnQgdmVjdG9yID0gc3AtPmVudHJpZXNbaV0udmVjdG9yOwotCQkJCXZvaWQgKmFyZyA9IHNwLT5zMmlvX2VudHJpZXNbaV0uYXJnOwotCi0JCQkJZnJlZV9pcnEodmVjdG9yLCBhcmcpOwotCQkJfQotCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoc3AtPnBkZXYsIDB4NDIsICZtc2lfY29udHJvbCk7Ci0JCQltc2lfY29udHJvbCAmPSAweEZGRkU7IC8qIERpc2FibGUgTVNJICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoc3AtPnBkZXYsIDB4NDIsIG1zaV9jb250cm9sKTsKLQotCQkJcGNpX2Rpc2FibGVfbXNpeChzcC0+cGRldik7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCWZyZWVfaXJxKHNwLT5wZGV2LT5pcnEsIGRldik7Ci0JCWlmIChzcC0+aW50cl90eXBlID09IE1TSSkKLQkJCXBjaV9kaXNhYmxlX21zaShzcC0+cGRldik7Ci0JfQkKIAlzcC0+ZGV2aWNlX2Nsb3NlX2ZsYWcgPSBUUlVFOwkvKiBEZXZpY2UgaXMgc2h1dCBkb3duLiAqLwogCXJldHVybiAwOwogfQpAQCAtMzU0NSw3ICszODk1LDggQEAKIAogCXF1ZXVlX2xlbiA9IG1hY19jb250cm9sLT5maWZvc1txdWV1ZV0udHhfY3Vycl9wdXRfaW5mby5maWZvX2xlbiArIDE7CiAJLyogQXZvaWQgInB1dCIgcG9pbnRlciBnb2luZyBiZXlvbmQgImdldCIgcG9pbnRlciAqLwotCWlmICh0eGRwLT5Ib3N0X0NvbnRyb2wgfHwgKCgocHV0X29mZiArIDEpICUgcXVldWVfbGVuKSA9PSBnZXRfb2ZmKSkgeworCWlmICh0eGRwLT5Ib3N0X0NvbnRyb2wgfHwKKwkJICAgKChwdXRfb2ZmKzEpID09IHF1ZXVlX2xlbiA/IDAgOiAocHV0X29mZisxKSkgPT0gZ2V0X29mZikgewogCQlEQkdfUFJJTlQoVFhfREJHLCAiRXJyb3IgaW4geG1pdCwgTm8gZnJlZSBUWERzLlxuIik7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMzY1NSwxMSArNDAwNiwxMyBAQAogCW1taW93YigpOwogCiAJcHV0X29mZisrOwotCXB1dF9vZmYgJT0gbWFjX2NvbnRyb2wtPmZpZm9zW3F1ZXVlXS50eF9jdXJyX3B1dF9pbmZvLmZpZm9fbGVuICsgMTsKKwlpZiAocHV0X29mZiA9PSBtYWNfY29udHJvbC0+Zmlmb3NbcXVldWVdLnR4X2N1cnJfcHV0X2luZm8uZmlmb19sZW4gKyAxKQorCQlwdXRfb2ZmID0gMDsKIAltYWNfY29udHJvbC0+Zmlmb3NbcXVldWVdLnR4X2N1cnJfcHV0X2luZm8ub2Zmc2V0ID0gcHV0X29mZjsKIAogCS8qIEF2b2lkICJwdXQiIHBvaW50ZXIgZ29pbmcgYmV5b25kICJnZXQiIHBvaW50ZXIgKi8KLQlpZiAoKChwdXRfb2ZmICsgMSkgJSBxdWV1ZV9sZW4pID09IGdldF9vZmYpIHsKKwlpZiAoKChwdXRfb2ZmKzEpID09IHF1ZXVlX2xlbiA/IDAgOiAocHV0X29mZisxKSkgPT0gZ2V0X29mZikgeworCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5maWZvX2Z1bGxfY250Kys7CiAJCURCR19QUklOVChUWF9EQkcsCiAJCQkgICJObyBmcmVlIFR4RHMgZm9yIHhtaXQsIFB1dDogMHgleCBHZXQ6MHgleFxuIiwKIAkJCSAgcHV0X29mZiwgZ2V0X29mZik7CkBAIC0zNzk1LDcgKzQxNDgsNiBAQAogCWF0b21pY19kZWMoJnNwLT5pc3JfY250KTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9Ci0KIHN0YXRpYyB2b2lkIHMyaW9fdHhwaWNfaW50cl9oYW5kbGUobmljX3QgKnNwKQogewogCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKQEAgLTM4MDYsNDEgKzQxNTgsNTYgQEAKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19pbnRfcmVnKTsKIAkJaWYgKCh2YWw2NCAmIEdQSU9fSU5UX1JFR19MSU5LX0RPV04pICYmCiAJCSAgICAodmFsNjQgJiBHUElPX0lOVF9SRUdfTElOS19VUCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHVuc3RhYmxlIHN0YXRlIHNvIGNsZWFyIGJvdGggdXAvZG93bgorCQkJICogaW50ZXJydXB0IGFuZCBhZGFwdGVyIHRvIHJlLWV2YWx1YXRlIHRoZSBsaW5rIHN0YXRlLgorCQkJICovCiAJCQl2YWw2NCB8PSAgR1BJT19JTlRfUkVHX0xJTktfRE9XTjsKIAkJCXZhbDY0IHw9IEdQSU9fSU5UX1JFR19MSU5LX1VQOwogCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfcmVnKTsKLQkJCWdvdG8gbWFza2luZzsKKwkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOworCQkJdmFsNjQgJj0gfihHUElPX0lOVF9NQVNLX0xJTktfVVAgfAorCQkJCSAgIEdQSU9fSU5UX01BU0tfTElOS19ET1dOKTsKKwkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9faW50X21hc2spOwogCQl9CisJCWVsc2UgaWYgKHZhbDY0ICYgR1BJT19JTlRfUkVHX0xJTktfVVApIHsKKwkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfc3RhdHVzKTsKKwkJCWlmICh2ZXJpZnlfeGVuYV9xdWllc2NlbmNlKHNwLCB2YWw2NCwKKwkJCQkJCSAgIHNwLT5kZXZpY2VfZW5hYmxlZF9vbmNlKSkgeworCQkJCS8qIEVuYWJsZSBBZGFwdGVyICovCisJCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKKwkJCQl2YWw2NCB8PSBBREFQVEVSX0NOVExfRU47CisJCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKKwkJCQl2YWw2NCB8PSBBREFQVEVSX0xFRF9PTjsKKwkJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOworCQkJCWlmICghc3AtPmRldmljZV9lbmFibGVkX29uY2UpCisJCQkJCXNwLT5kZXZpY2VfZW5hYmxlZF9vbmNlID0gMTsKIAotCQlpZiAoKChzcC0+bGFzdF9saW5rX3N0YXRlID09IExJTktfVVApICYmCi0JCQkodmFsNjQgJiBHUElPX0lOVF9SRUdfTElOS19ET1dOKSkgfHwKLQkJKChzcC0+bGFzdF9saW5rX3N0YXRlID09IExJTktfRE9XTikgJiYKLQkJKHZhbDY0ICYgR1BJT19JTlRfUkVHX0xJTktfVVApKSkgewotCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19pbnRfbWFzayk7Ci0JCQl2YWw2NCB8PSAgR1BJT19JTlRfTUFTS19MSU5LX0RPV047Ci0JCQl2YWw2NCB8PSBHUElPX0lOVF9NQVNLX0xJTktfVVA7Ci0JCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ncGlvX2ludF9tYXNrKTsKLQkJCXMyaW9fc2V0X2xpbmsoKHVuc2lnbmVkIGxvbmcpc3ApOwotCQl9Ci1tYXNraW5nOgotCQlpZiAoc3AtPmxhc3RfbGlua19zdGF0ZSA9PSBMSU5LX1VQKSB7Ci0JCQkvKmVuYWJsZSBkb3duIGludGVycnVwdCAqLwotCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19pbnRfbWFzayk7Ci0JCQkvKiB1bm1hc2tzIGxpbmsgZG93biBpbnRyICovCi0JCQl2YWw2NCAmPSAgfkdQSU9fSU5UX01BU0tfTElOS19ET1dOOwotCQkJLyogbWFza3MgbGluayB1cCBpbnRyICovCi0JCQl2YWw2NCB8PSBHUElPX0lOVF9NQVNLX0xJTktfVVA7Ci0JCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ncGlvX2ludF9tYXNrKTsKLQkJfSBlbHNlIHsKLQkJCS8qZW5hYmxlIFVQIEludGVycnVwdCAqLwotCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19pbnRfbWFzayk7Ci0JCQkvKiB1bm1hc2tzIGxpbmsgdXAgaW50ZXJydXB0ICovCi0JCQl2YWw2NCAmPSB+R1BJT19JTlRfTUFTS19MSU5LX1VQOwotCQkJLyogbWFza3MgbGluayBkb3duIGludGVycnVwdCAqLwotCQkJdmFsNjQgfD0gIEdQSU9fSU5UX01BU0tfTElOS19ET1dOOwotCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CisJCQkJczJpb19saW5rKHNwLCBMSU5LX1VQKTsKKwkJCQkvKgorCQkJCSAqIHVubWFzayBsaW5rIGRvd24gaW50ZXJydXB0IGFuZCBtYXNrIGxpbmstdXAKKwkJCQkgKiBpbnRyCisJCQkJICovCisJCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CisJCQkJdmFsNjQgJj0gfkdQSU9fSU5UX01BU0tfTElOS19ET1dOOworCQkJCXZhbDY0IHw9IEdQSU9fSU5UX01BU0tfTElOS19VUDsKKwkJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ncGlvX2ludF9tYXNrKTsKKworCQkJfQorCQl9ZWxzZSBpZiAodmFsNjQgJiBHUElPX0lOVF9SRUdfTElOS19ET1dOKSB7CisJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX3N0YXR1cyk7CisJCQlpZiAodmVyaWZ5X3hlbmFfcXVpZXNjZW5jZShzcCwgdmFsNjQsCisJCQkJCQkgICBzcC0+ZGV2aWNlX2VuYWJsZWRfb25jZSkpIHsKKwkJCQlzMmlvX2xpbmsoc3AsIExJTktfRE9XTik7CisJCQkJLyogTGluayBpcyBkb3duIHNvIHVubWFrcyBsaW5rIHVwIGludGVycnVwdCAqLworCQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOworCQkJCXZhbDY0ICY9IH5HUElPX0lOVF9NQVNLX0xJTktfVVA7CisJCQkJdmFsNjQgfD0gR1BJT19JTlRfTUFTS19MSU5LX0RPV047CisJCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CisJCQl9CiAJCX0KIAl9CisJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CiB9CiAKIC8qKgpAQCAtMzg2Myw3ICs0MjMwLDcgQEAKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCWludCBpOwotCXU2NCByZWFzb24gPSAwLCB2YWw2NDsKKwl1NjQgcmVhc29uID0gMCwgdmFsNjQsIG9yZ19tYXNrOwogCW1hY19pbmZvX3QgKm1hY19jb250cm9sOwogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKIApAQCAtMzg4Nyw0MyArNDI1NCw0MSBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCisJdmFsNjQgPSAweEZGRkZGRkZGRkZGRkZGRkZVTEw7CisJLyogU3RvcmUgY3VycmVudCBtYXNrIGJlZm9yZSBtYXNraW5nIGFsbCBpbnRlcnJ1cHRzICovCisJb3JnX21hc2sgPSByZWFkcSgmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CisKICNpZmRlZiBDT05GSUdfUzJJT19OQVBJCiAJaWYgKHJlYXNvbiAmIEdFTl9JTlRSX1JYVFJBRkZJQykgewogCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7Ci0JCQllbl9kaXNfYWJsZV9uaWNfaW50cnMoc3AsIFJYX1RSQUZGSUNfSU5UUiwKLQkJCQkJICAgICAgRElTQUJMRV9JTlRSUyk7CisJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCQkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYpOwogCQl9CiAJfQogI2Vsc2UKLQkvKiBJZiBJbnRyIGlzIGJlY2F1c2Ugb2YgUnggVHJhZmZpYyAqLwotCWlmIChyZWFzb24gJiBHRU5fSU5UUl9SWFRSQUZGSUMpIHsKLQkJLyoKLQkJICogcnhfdHJhZmZpY19pbnQgcmVnIGlzIGFuIFIxIHJlZ2lzdGVyLCB3cml0aW5nIGFsbCAxJ3MKLQkJICogd2lsbCBlbnN1cmUgdGhhdCB0aGUgYWN0dWFsIGludGVycnVwdCBjYXVzaW5nIGJpdCBnZXQncwotCQkgKiBjbGVhcmVkIGFuZCBoZW5jZSBhIHJlYWQgY2FuIGJlIGF2b2lkZWQuCi0JCSAqLwotCQl2YWw2NCA9IDB4RkZGRkZGRkZGRkZGRkZGRlVMTDsKLQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfdHJhZmZpY19pbnQpOwotCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCQlyeF9pbnRyX2hhbmRsZXIoJm1hY19jb250cm9sLT5yaW5nc1tpXSk7Ci0JCX0KKwkvKgorCSAqIFJ4IGhhbmRsZXIgaXMgY2FsbGVkIGJ5IGRlZmF1bHQsIHdpdGhvdXQgY2hlY2tpbmcgZm9yIHRoZQorCSAqIGNhdXNlIG9mIGludGVycnVwdC4KKwkgKiByeF90cmFmZmljX2ludCByZWcgaXMgYW4gUjEgcmVnaXN0ZXIsIHdyaXRpbmcgYWxsIDEncworCSAqIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgY2F1c2luZyBiaXQgZ2V0J3MKKwkgKiBjbGVhcmVkIGFuZCBoZW5jZSBhIHJlYWQgY2FuIGJlIGF2b2lkZWQuCisJICovCisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfdHJhZmZpY19pbnQpOworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJcnhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+cmluZ3NbaV0pOwogCX0KICNlbmRpZgogCi0JLyogSWYgSW50ciBpcyBiZWNhdXNlIG9mIFR4IFRyYWZmaWMgKi8KLQlpZiAocmVhc29uICYgR0VOX0lOVFJfVFhUUkFGRklDKSB7Ci0JCS8qCi0JCSAqIHR4X3RyYWZmaWNfaW50IHJlZyBpcyBhbiBSMSByZWdpc3Rlciwgd3JpdGluZyBhbGwgMSdzCi0JCSAqIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgY2F1c2luZyBiaXQgZ2V0J3MKLQkJICogY2xlYXJlZCBhbmQgaGVuY2UgYSByZWFkIGNhbiBiZSBhdm9pZGVkLgotCQkgKi8KLQkJdmFsNjQgPSAweEZGRkZGRkZGRkZGRkZGRkZVTEw7Ci0JCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR4X3RyYWZmaWNfaW50KTsKKwkvKgorCSAqIHR4X3RyYWZmaWNfaW50IHJlZyBpcyBhbiBSMSByZWdpc3Rlciwgd3JpdGluZyBhbGwgMSdzCisJICogd2lsbCBlbnN1cmUgdGhhdCB0aGUgYWN0dWFsIGludGVycnVwdCBjYXVzaW5nIGJpdCBnZXQncworCSAqIGNsZWFyZWQgYW5kIGhlbmNlIGEgcmVhZCBjYW4gYmUgYXZvaWRlZC4KKwkgKi8KKwl3cml0ZXEodmFsNjQsICZiYXIwLT50eF90cmFmZmljX2ludCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykKLQkJCXR4X2ludHJfaGFuZGxlcigmbWFjX2NvbnRyb2wtPmZpZm9zW2ldKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykKKwkJdHhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+Zmlmb3NbaV0pOwogCiAJaWYgKHJlYXNvbiAmIEdFTl9JTlRSX1RYUElDKQogCQlzMmlvX3R4cGljX2ludHJfaGFuZGxlKHNwKTsKQEAgLTM5NDksNiArNDMxNCw3IEBACiAJCQkJCURCR19QUklOVChFUlJfREJHLCAiIGluIElTUiEhXG4iKTsKIAkJCQkJY2xlYXJfYml0KDAsICgmc3AtPnRhc2tsZXRfc3RhdHVzKSk7CiAJCQkJCWF0b21pY19kZWMoJnNwLT5pc3JfY250KTsKKwkJCQkJd3JpdGVxKG9yZ19tYXNrLCAmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CiAJCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCQl9CiAJCQkJY2xlYXJfYml0KDAsICgmc3AtPnRhc2tsZXRfc3RhdHVzKSk7CkBAIC0zOTY0LDcgKzQzMzAsNyBAQAogCQl9CiAJfQogI2VuZGlmCi0KKwl3cml0ZXEob3JnX21hc2ssICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKIAlhdG9taWNfZGVjKCZzcC0+aXNyX2NudCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDA2Nyw3ICs0NDMzLDggQEAKIAkJICAgIFJNQUNfQUREUl9DTURfTUVNX09GRlNFVChNQUNfTUNfQUxMX01DX0FERFJfT0ZGU0VUKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCQkvKiBXYWl0IHRpbGwgY29tbWFuZCBjb21wbGV0ZXMgKi8KLQkJd2FpdF9mb3JfY21kX2NvbXBsZXRlKHNwKTsKKwkJd2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKKwkJCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORyk7CiAKIAkJc3AtPm1fY2FzdF9mbGcgPSAxOwogCQlzcC0+YWxsX211bHRpX3BvcyA9IE1BQ19NQ19BTExfTUNfQUREUl9PRkZTRVQ7CkBAIC00MDgyLDcgKzQ0NDksOCBAQAogCQkgICAgUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKHNwLT5hbGxfbXVsdGlfcG9zKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCQkvKiBXYWl0IHRpbGwgY29tbWFuZCBjb21wbGV0ZXMgKi8KLQkJd2FpdF9mb3JfY21kX2NvbXBsZXRlKHNwKTsKKwkJd2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKKwkJCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORyk7CiAKIAkJc3AtPm1fY2FzdF9mbGcgPSAwOwogCQlzcC0+YWxsX211bHRpX3BvcyA9IDA7CkBAIC00MTQ3LDcgKzQ1MTUsOCBAQAogCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCiAJCQkvKiBXYWl0IGZvciBjb21tYW5kIGNvbXBsZXRlcyAqLwotCQkJaWYgKHdhaXRfZm9yX2NtZF9jb21wbGV0ZShzcCkpIHsKKwkJCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAorCQkJCSAgICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HKSkgewogCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEFkZGluZyAiLAogCQkJCQkgIGRldi0+bmFtZSk7CiAJCQkJREJHX1BSSU5UKEVSUl9EQkcsICJNdWx0aWNhc3RzIGZhaWxlZFxuIik7CkBAIC00MTc3LDcgKzQ1NDYsOCBAQAogCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCiAJCQkvKiBXYWl0IGZvciBjb21tYW5kIGNvbXBsZXRlcyAqLwotCQkJaWYgKHdhaXRfZm9yX2NtZF9jb21wbGV0ZShzcCkpIHsKKwkJCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAorCQkJCSAgICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HKSkgewogCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEFkZGluZyAiLAogCQkJCQkgIGRldi0+bmFtZSk7CiAJCQkJREJHX1BSSU5UKEVSUl9EQkcsICJNdWx0aWNhc3RzIGZhaWxlZFxuIik7CkBAIC00MjIyLDcgKzQ1OTIsOCBAQAogCSAgICBSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQoMCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCS8qIFdhaXQgdGlsbCBjb21tYW5kIGNvbXBsZXRlcyAqLwotCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoc3ApKSB7CisJaWYgKHdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCisJCSAgICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HKSkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBzZXRfbWFjX2FkZHIgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gRkFJTFVSRTsKIAl9CkBAIC00NjE5LDYgKzQ5OTAsNDQgQEAKIAl9CiAJcmV0dXJuIHJldDsKIH0KK3N0YXRpYyB2b2lkIHMyaW9fdnBkX3JlYWQobmljX3QgKm5pYykKK3sKKwl1OCB2cGRfZGF0YVsyNTZdLGRhdGE7CisJaW50IGk9MCwgY250LCBmYWlsID0gMDsKKwlpbnQgdnBkX2FkZHIgPSAweDgwOworCisJaWYgKG5pYy0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgeworCQlzdHJjcHkobmljLT5wcm9kdWN0X25hbWUsICJYZnJhbWUgSUkgMTBHYkUgbmV0d29yayBhZGFwdGVyIik7CisJCXZwZF9hZGRyID0gMHg4MDsKKwl9CisJZWxzZSB7CisJCXN0cmNweShuaWMtPnByb2R1Y3RfbmFtZSwgIlhmcmFtZSBJIDEwR2JFIG5ldHdvcmsgYWRhcHRlciIpOworCQl2cGRfYWRkciA9IDB4NTA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPTQgKSB7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShuaWMtPnBkZXYsICh2cGRfYWRkciArIDIpLCBpKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUobmljLT5wZGV2LCAgKHZwZF9hZGRyICsgMiksICZkYXRhKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5pYy0+cGRldiwgKHZwZF9hZGRyICsgMyksIDApOworCQlmb3IgKGNudCA9IDA7IGNudCA8NTsgY250KyspIHsKKwkJCW1zbGVlcCgyKTsKKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5pYy0+cGRldiwgKHZwZF9hZGRyICsgMyksICZkYXRhKTsKKwkJCWlmIChkYXRhID09IDB4ODApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNudCA+PSA1KSB7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJlYWQgb2YgVlBEIGRhdGEgZmFpbGVkXG4iKTsKKwkJCWZhaWwgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5pYy0+cGRldiwgICh2cGRfYWRkciArIDQpLAorCQkJCSAgICAgICh1MzIgKikmdnBkX2RhdGFbaV0pOworCX0KKwlpZiAoKCFmYWlsKSAmJiAodnBkX2RhdGFbMV0gPCBWUERfUFJPRFVDVF9OQU1FX0xFTikpIHsKKwkJbWVtc2V0KG5pYy0+cHJvZHVjdF9uYW1lLCAwLCB2cGRfZGF0YVsxXSk7CisJCW1lbWNweShuaWMtPnByb2R1Y3RfbmFtZSwgJnZwZF9kYXRhWzNdLCB2cGRfZGF0YVsxXSk7CisJfQorfQogCiAvKioKICAqICBzMmlvX2V0aHRvb2xfZ2VlcHJvbSAgLSByZWFkcyB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBFZXByb20uCkBAIC00OTMxLDggKzUzNDAsMTAgQEAKIAl1NjQgdmFsNjQ7CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX3N0YXR1cyk7Ci0JaWYgKHZhbDY0ICYgQURBUFRFUl9TVEFUVVNfUk1BQ19MT0NBTF9GQVVMVCkKKwlpZighKExJTktfSVNfVVAodmFsNjQpKSkKIAkJKmRhdGEgPSAxOworCWVsc2UKKwkJKmRhdGEgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTEyLDcgKzU1MjMsNiBAQAogCWludCBpID0gMDsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJU3RhdEluZm9fdCAqc3RhdF9pbmZvID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87Ci0JdTY0IHRtcDsKIAogCXMyaW9fdXBkdF9zdGF0cyhzcCk7CiAJdG1wX3N0YXRzW2krK10gPQpAQCAtNTEyOSw5ICs1NTM5LDE5IEBACiAJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2Jjc3RfZnJtc19vZmxvdykgPDwgMzIgfAogCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfYmNzdF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19wYXVzZV9jdHJsX2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9CisgICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdHRsX29jdGV0c19vZmxvdykgPDwgMzIgfAorICAgICAgICAgICAgICAgIGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY190dGxfb2N0ZXRzKTsKKwl0bXBfc3RhdHNbaSsrXSA9CisgICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdWNzdF9mcm1zX29mbG93KSA8PCAzMiB8CisgICAgICAgICAgICAgICAgbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3Vjc3RfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPQorICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX251Y3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKKyAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfbnVjc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQogCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19hbnlfZXJyX2ZybXNfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2FueV9lcnJfZnJtcyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT50bWFjX3R0bF9sZXNzX2ZiX29jdGV0cyk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdmxkX2lwX29jdGV0cyk7CiAJdG1wX3N0YXRzW2krK10gPQogCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY192bGRfaXBfb2Zsb3cpIDw8IDMyIHwKQEAgLTUxNjMsMTEgKzU1ODMsMjcgQEAKIAkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdmxkX2Jjc3RfZnJtc19vZmxvdykgPDwgMzIgfAogCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdmxkX2Jjc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaW5fcm5nX2xlbl9lcnJfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfb3V0X3JuZ19sZW5fZXJyX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2xvbmdfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcGF1c2VfY3RybF9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191bnN1cF9jdHJsX2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9CisgICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsX29jdGV0c19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsX29jdGV0cyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0KKyAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF91Y3N0X2ZybXNfb2Zsb3cpCisJCTw8IDMyIHwgbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX3Vjc3RfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPQorICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX251Y3N0X2ZybXNfb2Zsb3cpCisgICAgICAgICAgICAgICAgIDw8IDMyIHwgbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX251Y3N0X2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KIAkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZGlzY2FyZGVkX2ZybXNfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Rpc2NhcmRlZF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPQorICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Ryb3BfZXZlbnRzX29mbG93KQorICAgICAgICAgICAgICAgICA8PCAzMiB8IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2V2ZW50cyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9sZXNzX2ZiX29jdGV0cyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9CiAJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3VzaXplZF9mcm1zX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191c2l6ZWRfZnJtcyk7CkBAIC01MTgwLDQwICs1NjE2LDEyOSBAQAogCXRtcF9zdGF0c1tpKytdID0KIAkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfamFiYmVyX2ZybXNfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2phYmJlcl9mcm1zKTsKLQl0bXBfc3RhdHNbaSsrXSA9ICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2lwX29mbG93KSA8PCAzMiB8CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzY0X2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfNjVfMTI3X2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfMTI4XzI1NV9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzI1Nl81MTFfZnJtcyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF81MTJfMTAyM19mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzEwMjRfMTUxOF9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2lwX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pcCk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaXBfb2N0ZXRzKTsKIAl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19oZHJfZXJyX2lwKTsKLQl0bXBfc3RhdHNbaSsrXSA9ICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Ryb3BfaXBfb2Zsb3cpIDw8IDMyIHwKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Ryb3BfaXBfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Ryb3BfaXApOwotCXRtcF9zdGF0c1tpKytdID0gKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaWNtcF9vZmxvdykgPDwgMzIgfAorCXRtcF9zdGF0c1tpKytdID0KKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaWNtcF9vZmxvdykgPDwgMzIgfAogCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaWNtcCk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdGNwKTsKLQl0bXBfc3RhdHNbaSsrXSA9ICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3VkcF9vZmxvdykgPDwgMzIgfAorCXRtcF9zdGF0c1tpKytdID0KKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdWRwX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191ZHApOwogCXRtcF9zdGF0c1tpKytdID0KIAkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZXJyX2RycF91ZHBfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Vycl9kcnBfdWRwKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY194Z21paV9lcnJfc3ltKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xMCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTEpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3EyKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xMyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTQpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3E1KTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xNik7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTcpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3EwKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xMSk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTIpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3EzKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xNCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTUpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3E2KTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xNyk7CiAJdG1wX3N0YXRzW2krK10gPQogCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19wYXVzZV9jbnRfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3BhdXNlX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfeGdtaWlfZGF0YV9lcnJfY250KTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfeGdtaWlfY3RybF9lcnJfY250KTsKIAl0bXBfc3RhdHNbaSsrXSA9CiAJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX2lwX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF9pcCk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZXJyX3RjcCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJkX3JlcV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5uZXdfcmRfcmVxX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPm5ld19yZF9yZXFfcnRyeV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yZF9ydHJ5X2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPndyX3J0cnlfcmRfYWNrX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPndyX3JlcV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5uZXdfd3JfcmVxX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPm5ld193cl9yZXFfcnRyeV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT53cl9ydHJ5X2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPndyX2Rpc2NfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cmRfcnRyeV93cl9hY2tfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dHhwX3dyX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnR4ZF9yZF9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT50eGRfd3JfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cnhkX3JkX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJ4ZF93cl9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT50eGZfcmRfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cnhmX3dyX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzE1MTlfNDA5NV9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzQwOTZfODE5MV9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzgxOTJfbWF4X2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfZ3RfbWF4X2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19vc2l6ZWRfYWx0X2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19qYWJiZXJfYWx0X2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19ndF9tYXhfYWx0X2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY192bGFuX2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19sZW5fZGlzY2FyZCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Zjc19kaXNjYXJkKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcGZfZGlzY2FyZCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2RhX2Rpc2NhcmQpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19yZWRfZGlzY2FyZCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3J0c19kaXNjYXJkKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaW5nbV9mdWxsX2Rpc2NhcmQpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bGlua19mYXVsdF9jbnQpOwogCXRtcF9zdGF0c1tpKytdID0gMDsKIAl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5zaW5nbGVfZWNjX2VycnM7CiAJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZG91YmxlX2VjY19lcnJzOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnBhcml0eV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnNlcmlvdXNfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5zb2Z0X3Jlc2V0X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5maWZvX2Z1bGxfY250OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJpbmdfZnVsbF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2g7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl90cmFuc2NlaXZlcl90ZW1wX2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2g7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9sb3c7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9vdXRwdXRfcG93ZXJfbG93OwogCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmNsdWJiZWRfZnJtc19jbnQ7CiAJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc2VuZGluZ19ib3RoOwogCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm91dG9mX3NlcXVlbmNlX3BrdHM7CiAJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZmx1c2hfbWF4X3BrdHM7Ci0JdG1wID0gMDsKIAlpZiAoc3RhdF9pbmZvLT5zd19zdGF0Lm51bV9hZ2dyZWdhdGlvbnMpIHsKLQkJdG1wID0gc3RhdF9pbmZvLT5zd19zdGF0LnN1bV9hdmdfcGt0c19hZ2dyZWdhdGVkOwotCQlkb19kaXYodG1wLCBzdGF0X2luZm8tPnN3X3N0YXQubnVtX2FnZ3JlZ2F0aW9ucyk7CisJCXU2NCB0bXAgPSBzdGF0X2luZm8tPnN3X3N0YXQuc3VtX2F2Z19wa3RzX2FnZ3JlZ2F0ZWQ7CisJCWludCBjb3VudCA9IDA7CisJCS8qIAorCQkgKiBTaW5jZSA2NC1iaXQgZGl2aWRlIGRvZXMgbm90IHdvcmsgb24gYWxsIHBsYXRmb3JtcywKKwkJICogZG8gcmVwZWF0ZWQgc3VidHJhY3Rpb24uCisJCSAqLworCQl3aGlsZSAodG1wID49IHN0YXRfaW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zKSB7CisJCQl0bXAgLT0gc3RhdF9pbmZvLT5zd19zdGF0Lm51bV9hZ2dyZWdhdGlvbnM7CisJCQljb3VudCsrOworCQl9CisJCXRtcF9zdGF0c1tpKytdID0gY291bnQ7CiAJfQotCXRtcF9zdGF0c1tpKytdID0gdG1wOworCWVsc2UKKwkJdG1wX3N0YXRzW2krK10gPSAwOwogfQogCiBzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTUzNTEsNyArNTg3Niw3IEBACiAKIAlkZXYtPm10dSA9IG5ld19tdHU7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlzMmlvX2NhcmRfZG93bihzcCk7CisJCXMyaW9fY2FyZF9kb3duKHNwLCAwKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlpZiAoczJpb19jYXJkX3VwKHNwKSkgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGJyaW5nIHVwIGZhaWxlZFxuIiwKQEAgLTU0ODksMTIgKzYwMTQsMTcyIEBACiAJY2xlYXJfYml0KDAsICYobmljLT5saW5rX3N0YXRlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHMyaW9fY2FyZF9kb3duKG5pY190ICogc3ApCitzdGF0aWMgaW50IHNldF9yeGRfYnVmZmVyX3BvaW50ZXIobmljX3QgKnNwLCBSeERfdCAqcnhkcCwgYnVmZkFkZF90ICpiYSwKKwkJCSAgIHN0cnVjdCBza19idWZmICoqc2tiLCB1NjQgKnRlbXAwLCB1NjQgKnRlbXAxLAorCQkJICAgdTY0ICp0ZW1wMiwgaW50IHNpemUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CisJc3RydWN0IHNrX2J1ZmYgKmZyYWdfbGlzdDsKKworCWlmICgoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpICYmIChyeGRwLT5Ib3N0X0NvbnRyb2wgPT0gMCkpIHsKKwkJLyogYWxsb2NhdGUgc2tiICovCisJCWlmICgqc2tiKSB7CisJCQlEQkdfUFJJTlQoSU5GT19EQkcsICJTS0IgaXMgbm90IE5VTExcbiIpOworCQkJLyoKKwkJCSAqIEFzIFJ4IGZyYW1lIGFyZSBub3QgZ29pbmcgdG8gYmUgcHJvY2Vzc2VkLAorCQkJICogdXNpbmcgc2FtZSBtYXBwZWQgYWRkcmVzcyBmb3IgdGhlIFJ4ZAorCQkJICogYnVmZmVyIHBvaW50ZXIKKwkJCSAqLworCQkJKChSeEQxX3QqKXJ4ZHApLT5CdWZmZXIwX3B0ciA9ICp0ZW1wMDsKKwkJfSBlbHNlIHsKKwkJCSpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOworCQkJaWYgKCEoKnNrYikpIHsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBPdXQgb2YgIiwgZGV2LT5uYW1lKTsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIm1lbW9yeSB0byBhbGxvY2F0ZSBTS0JzXG4iKTsKKwkJCQlyZXR1cm4gLUVOT01FTSA7CisJCQl9CisJCQkvKiBzdG9yaW5nIHRoZSBtYXBwZWQgYWRkciBpbiBhIHRlbXAgdmFyaWFibGUKKwkJCSAqIHN1Y2ggaXQgd2lsbCBiZSB1c2VkIGZvciBuZXh0IHJ4ZCB3aG9zZQorCQkJICogSG9zdCBDb250cm9sIGlzIE5VTEwKKwkJCSAqLworCQkJKChSeEQxX3QqKXJ4ZHApLT5CdWZmZXIwX3B0ciA9ICp0ZW1wMCA9CisJCQkJcGNpX21hcF9zaW5nbGUoIHNwLT5wZGV2LCAoKnNrYiktPmRhdGEsCisJCQkJCXNpemUgLSBORVRfSVBfQUxJR04sCisJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZykgKCpza2IpOworCQl9CisJfSBlbHNlIGlmICgoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSAmJiAocnhkcC0+SG9zdF9Db250cm9sID09IDApKSB7CisJCS8qIFR3byBidWZmZXIgTW9kZSAqLworCQlpZiAoKnNrYikgeworCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIyX3B0ciA9ICp0ZW1wMjsKKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMF9wdHIgPSAqdGVtcDA7CisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyID0gKnRlbXAxOworCQl9IGVsc2UgeworCQkJKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjJfcHRyID0gKnRlbXAyID0KKwkJCQlwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwgKCpza2IpLT5kYXRhLAorCQkJCQkgICAgICAgZGV2LT5tdHUgKyA0LAorCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMF9wdHIgPSAqdGVtcDAgPQorCQkJCXBjaV9tYXBfc2luZ2xlKCBzcC0+cGRldiwgYmEtPmJhXzAsIEJVRjBfTEVOLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSAoKnNrYik7CisKKwkJCS8qIEJ1ZmZlci0xIHdpbGwgYmUgZHVtbXkgYnVmZmVyIG5vdCB1c2VkICovCisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyID0gKnRlbXAxID0KKwkJCQlwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwgYmEtPmJhXzEsIEJVRjFfTEVOLAorCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfQorCX0gZWxzZSBpZiAoKHJ4ZHAtPkhvc3RfQ29udHJvbCA9PSAwKSkgeworCQkvKiBUaHJlZSBidWZmZXIgbW9kZSAqLworCQlpZiAoKnNrYikgeworCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIwX3B0ciA9ICp0ZW1wMDsKKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMV9wdHIgPSAqdGVtcDE7CisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjJfcHRyID0gKnRlbXAyOworCQl9IGVsc2UgeworCQkJKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CisKKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMF9wdHIgPSAqdGVtcDAgPQorCQkJCXBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCBiYS0+YmFfMCwgQlVGMF9MRU4sCisJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJLyogQnVmZmVyLTEgcmVjZWl2ZXMgTDMvTDQgaGVhZGVycyAqLworCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIxX3B0ciA9ICp0ZW1wMSA9CisJCQkJcGNpX21hcF9zaW5nbGUoIHNwLT5wZGV2LCAoKnNrYiktPmRhdGEsCisJCQkJCQlsM2w0aGRyX3NpemUgKyA0LAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCS8qCisJCQkgKiBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdCB3aWxsIGhhdmUgTDQKKwkJCSAqIGRhdGEgcGF5bG9hZAorCQkJICovCisJCQlza2Jfc2hpbmZvKCpza2IpLT5mcmFnX2xpc3QgPSBkZXZfYWxsb2Nfc2tiKGRldi0+bXR1ICsKKwkJCQkJCQkJICAgQUxJR05fU0laRSk7CisJCQlpZiAoc2tiX3NoaW5mbygqc2tiKS0+ZnJhZ19saXN0ID09IE5VTEwpIHsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBkZXZfYWxsb2Nfc2tiIFwKKwkJCQkJICBmYWlsZWRcbiAiLCBkZXYtPm5hbWUpOworCQkJCXJldHVybiAtRU5PTUVNIDsKKwkJCX0KKwkJCWZyYWdfbGlzdCA9IHNrYl9zaGluZm8oKnNrYiktPmZyYWdfbGlzdDsKKwkJCWZyYWdfbGlzdC0+bmV4dCA9IE5VTEw7CisJCQkvKgorCQkJICogQnVmZmVyLTIgcmVjZWl2ZXMgTDQgZGF0YSBwYXlsb2FkCisJCQkgKi8KKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMl9wdHIgPSAqdGVtcDIgPQorCQkJCXBjaV9tYXBfc2luZ2xlKCBzcC0+cGRldiwgZnJhZ19saXN0LT5kYXRhLAorCQkJCQkJZGV2LT5tdHUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBzZXRfcnhkX2J1ZmZlcl9zaXplKG5pY190ICpzcCwgUnhEX3QgKnJ4ZHAsIGludCBzaXplKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzcC0+ZGV2OworCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkgeworCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzEoIHNpemUgLSBORVRfSVBfQUxJR04pOworCX0gZWxzZSBpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSB7CisJCXJ4ZHAtPkNvbnRyb2xfMiA9IFNFVF9CVUZGRVIwX1NJWkVfMyhCVUYwX0xFTik7CisJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMV9TSVpFXzMoMSk7CisJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMl9TSVpFXzMoIGRldi0+bXR1ICsgNCk7CisJfSBlbHNlIHsKKwkJcnhkcC0+Q29udHJvbF8yID0gU0VUX0JVRkZFUjBfU0laRV8zKEJVRjBfTEVOKTsKKwkJcnhkcC0+Q29udHJvbF8yIHw9IFNFVF9CVUZGRVIxX1NJWkVfMyhsM2w0aGRyX3NpemUgKyA0KTsKKwkJcnhkcC0+Q29udHJvbF8yIHw9IFNFVF9CVUZGRVIyX1NJWkVfMyhkZXYtPm10dSk7CisJfQorfQorCitzdGF0aWMgIGludCByeGRfb3duZXJfYml0X3Jlc2V0KG5pY190ICpzcCkKK3sKKwlpbnQgaSwgaiwgaywgYmxrX2NudCA9IDAsIHNpemU7CisJbWFjX2luZm9fdCAqIG1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmc3AtPmNvbmZpZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKKwlSeERfdCAqcnhkcCA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJYnVmZkFkZF90ICpiYSA9IE5VTEw7CisJdTY0IHRlbXAwXzY0ID0gMCwgdGVtcDFfNjQgPSAwLCB0ZW1wMl82NCA9IDA7CisKKwkvKiBDYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gcmluZyBtb2RlICovCisJc2l6ZSA9IGRldi0+bXR1ICsgSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX1NJWkUgKworCQlIRUFERVJfODAyXzJfU0laRSArIEhFQURFUl9TTkFQX1NJWkU7CisJaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8xKQorCQlzaXplICs9IE5FVF9JUF9BTElHTjsKKwllbHNlIGlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpCisJCXNpemUgPSBkZXYtPm10dSArIEFMSUdOX1NJWkUgKyBCVUYwX0xFTiArIDQ7CisJZWxzZQorCQlzaXplID0gbDNsNGhkcl9zaXplICsgQUxJR05fU0laRSArIEJVRjBfTEVOICsgNDsKKworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJYmxrX2NudCA9IGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLworCQkJKHJ4ZF9jb3VudFtzcC0+cnhkX21vZGVdICsxKTsKKworCQlmb3IgKGogPSAwOyBqIDwgYmxrX2NudDsgaisrKSB7CisJCQlmb3IgKGsgPSAwOyBrIDwgcnhkX2NvdW50W3NwLT5yeGRfbW9kZV07IGsrKykgeworCQkJCXJ4ZHAgPSBtYWNfY29udHJvbC0+cmluZ3NbaV0uCisJCQkJCXJ4X2Jsb2Nrc1tqXS5yeGRzW2tdLnZpcnRfYWRkcjsKKwkJCQlpZihzcC0+cnhkX21vZGUgPj0gUlhEX01PREVfM0EpCisJCQkJCWJhID0gJm1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXVtrXTsKKwkJCQlzZXRfcnhkX2J1ZmZlcl9wb2ludGVyKHNwLCByeGRwLCBiYSwKKwkJCQkJCSAgICAgICAmc2tiLCh1NjQgKikmdGVtcDBfNjQsCisJCQkJCQkgICAgICAgKHU2NCAqKSZ0ZW1wMV82NCwKKwkJCQkJCSAgICAgICAodTY0ICopJnRlbXAyXzY0LCBzaXplKTsKKworCQkJCXNldF9yeGRfYnVmZmVyX3NpemUoc3AsIHJ4ZHAsIHNpemUpOworCQkJCXdtYigpOworCQkJCS8qIGZsaXAgdGhlIE93bmVyc2hpcCBiaXQgdG8gSGFyZHdhcmUgKi8KKwkJCQlyeGRwLT5Db250cm9sXzEgfD0gUlhEX09XTl9YRU5BOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkIHMyaW9fY2FyZF9kb3duKG5pY190ICogc3AsIGludCBmbGFnKQogewogCWludCBjbnQgPSAwOwogCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXJlZ2lzdGVyIHU2NCB2YWw2NCA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CiAKIAlkZWxfdGltZXJfc3luYygmc3AtPmFsYXJtX3RpbWVyKTsKIAkvKiBJZiBzMmlvX3NldF9saW5rIHRhc2sgaXMgZXhlY3V0aW5nLCB3YWl0IHRpbGwgaXQgY29tcGxldGVzLiAqLwpAQCAtNTUwNSwxMiArNjE5MCw1MSBAQAogCiAJLyogZGlzYWJsZSBUeCBhbmQgUnggdHJhZmZpYyBvbiB0aGUgTklDICovCiAJc3RvcF9uaWMoc3ApOworCWlmIChmbGFnKSB7CisJCWlmIChzcC0+aW50cl90eXBlID09IE1TSV9YKSB7CisJCQlpbnQgaTsKKwkJCXUxNiBtc2lfY29udHJvbDsKKworCQkJZm9yIChpPTE7IChzcC0+czJpb19lbnRyaWVzW2ldLmluX3VzZSA9PQorCQkJCU1TSVhfUkVHSVNURVJFRF9TVUNDRVNTKTsgaSsrKSB7CisJCQkJaW50IHZlY3RvciA9IHNwLT5lbnRyaWVzW2ldLnZlY3RvcjsKKwkJCQl2b2lkICphcmcgPSBzcC0+czJpb19lbnRyaWVzW2ldLmFyZzsKKworCQkJCWZyZWVfaXJxKHZlY3RvciwgYXJnKTsKKwkJCX0KKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHNwLT5wZGV2LCAweDQyLCAmbXNpX2NvbnRyb2wpOworCQkJbXNpX2NvbnRyb2wgJj0gMHhGRkZFOyAvKiBEaXNhYmxlIE1TSSAqLworCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNwLT5wZGV2LCAweDQyLCBtc2lfY29udHJvbCk7CisJCQlwY2lfZGlzYWJsZV9tc2l4KHNwLT5wZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWZyZWVfaXJxKHNwLT5wZGV2LT5pcnEsIGRldik7CisJCQlpZiAoc3AtPmludHJfdHlwZSA9PSBNU0kpCisJCQkJcGNpX2Rpc2FibGVfbXNpKHNwLT5wZGV2KTsKKwkJfQorCX0KKwkvKiBXYWl0aW5nIHRpbGwgYWxsIEludGVycnVwdCBoYW5kbGVycyBhcmUgY29tcGxldGUgKi8KKwljbnQgPSAwOworCWRvIHsKKwkJbXNsZWVwKDEwKTsKKwkJaWYgKCFhdG9taWNfcmVhZCgmc3AtPmlzcl9jbnQpKQorCQkJYnJlYWs7CisJCWNudCsrOworCX0gd2hpbGUoY250IDwgNSk7CiAKIAkvKiBLaWxsIHRhc2tsZXQuICovCiAJdGFza2xldF9raWxsKCZzcC0+dGFzayk7CiAKIAkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIFF1aWVzY2VudCBhbmQgdGhlbiBSZXNldCB0aGUgTklDICovCiAJZG8geworCQkvKiBBcyBwZXIgdGhlIEhXIHJlcXVpcmVtZW50IHdlIG5lZWQgdG8gcmVwbGVuaXNoIHRoZQorCQkgKiByZWNlaXZlIGJ1ZmZlciB0byBhdm9pZCB0aGUgcmluZyBidW1wLiBTaW5jZSB0aGVyZSBpcworCQkgKiBubyBpbnRlbnRpb24gb2YgcHJvY2Vzc2luZyB0aGUgUnggZnJhbWUgYXQgdGhpcyBwb2ludHdlIGFyZQorCQkgKiBqdXN0IHNldHR0aW5nIHRoZSBvd25lcnNoaXAgYml0IG9mIHJ4ZCBpbiBFYWNoIFJ4CisJCSAqIHJpbmcgdG8gSFcgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgYnVmZmVyIHNpemUKKwkJICogYmFzZWQgb24gdGhlIHJpbmcgbW9kZQorCQkgKi8KKwkJcnhkX293bmVyX2JpdF9yZXNldChzcCk7CisKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9zdGF0dXMpOwogCQlpZiAodmVyaWZ5X3hlbmFfcXVpZXNjZW5jZShzcCwgdmFsNjQsIHNwLT5kZXZpY2VfZW5hYmxlZF9vbmNlKSkgewogCQkJYnJlYWs7CkBAIC01NTI4LDE1ICs2MjUyLDYgQEAKIAl9IHdoaWxlICgxKTsKIAlzMmlvX3Jlc2V0KHNwKTsKIAotCS8qIFdhaXRpbmcgdGlsbCBhbGwgSW50ZXJydXB0IGhhbmRsZXJzIGFyZSBjb21wbGV0ZSAqLwotCWNudCA9IDA7Ci0JZG8gewotCQltc2xlZXAoMTApOwotCQlpZiAoIWF0b21pY19yZWFkKCZzcC0+aXNyX2NudCkpCi0JCQlicmVhazsKLQkJY250Kys7Ci0JfSB3aGlsZShjbnQgPCA1KTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZzcC0+dHhfbG9jaywgZmxhZ3MpOwogCS8qIEZyZWUgYWxsIFR4IGJ1ZmZlcnMgKi8KIAlmcmVlX3R4X2J1ZmZlcnMoc3ApOwpAQCAtNTYzNyw3ICs2MzUyLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCi0JczJpb19jYXJkX2Rvd24oc3ApOworCXMyaW9fY2FyZF9kb3duKHNwLCAwKTsKIAlpZiAoczJpb19jYXJkX3VwKHNwKSkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgYnJpbmcgdXAgZmFpbGVkXG4iLAogCQkJICBkZXYtPm5hbWUpOwpAQCAtNTY2Nyw2ICs2MzgyLDcgQEAKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJc2NoZWR1bGVfd29yaygmc3AtPnJzdF90aW1lcl90YXNrKTsKKwkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuc29mdF9yZXNldF9jbnQrKzsKIAl9CiB9CiAKQEAgLTU2OTUsMTggKzY0MTEsMzMgQEAKIAkJKCh1bnNpZ25lZCBsb25nKSByeGRwLT5Ib3N0X0NvbnRyb2wpOwogCWludCByaW5nX25vID0gcmluZ19kYXRhLT5yaW5nX25vOwogCXUxNiBsM19jc3VtLCBsNF9jc3VtOworCXVuc2lnbmVkIGxvbmcgbG9uZyBlcnIgPSByeGRwLT5Db250cm9sXzEgJiBSWERfVF9DT0RFOwogCWxyb190ICpscm87CiAKIAlza2ItPmRldiA9IGRldjsKLQlpZiAocnhkcC0+Q29udHJvbF8xICYgUlhEX1RfQ09ERSkgewotCQl1bnNpZ25lZCBsb25nIGxvbmcgZXJyID0gcnhkcC0+Q29udHJvbF8xICYgUlhEX1RfQ09ERTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUnggZXJyb3IgVmFsdWU6IDB4JWxseFxuIiwKLQkJCSAgZGV2LT5uYW1lLCBlcnIpOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXNwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCWF0b21pY19kZWMoJnNwLT5yeF9idWZzX2xlZnRbcmluZ19ub10pOwotCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAwOwotCQlyZXR1cm4gMDsKKworCWlmIChlcnIpIHsKKwkJLyogQ2hlY2sgZm9yIHBhcml0eSBlcnJvciAqLworCQlpZiAoZXJyICYgMHgxKSB7CisJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5wYXJpdHlfZXJyX2NudCsrOworCQl9CisKKwkJLyoKKwkJKiBEcm9wIHRoZSBwYWNrZXQgaWYgYmFkIHRyYW5zZmVyIGNvZGUuIEV4Y2VwdGlvbiBiZWluZworCQkqIDB4NSwgd2hpY2ggY291bGQgYmUgZHVlIHRvIHVuc3VwcG9ydGVkIElQdjYgZXh0ZW5zaW9uIGhlYWRlci4KKwkJKiBJbiB0aGlzIGNhc2UsIHdlIGxldCBzdGFjayBoYW5kbGUgdGhlIHBhY2tldC4KKwkJKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCBzaW5jZSBjaGVja3N1bSB3aWxsIGJlIGluY29ycmVjdCwKKwkJKiBzdGFjayB3aWxsIHZhbGlkYXRlIHRoZSBzYW1lLgorCQkqLworCQlpZiAoZXJyICYmICgoZXJyID4+IDQ4KSAhPSAweDUpKSB7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBSeCBlcnJvciBWYWx1ZTogMHglbGx4XG4iLAorCQkJCWRldi0+bmFtZSwgZXJyKTsKKwkJCXNwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlhdG9taWNfZGVjKCZzcC0+cnhfYnVmc19sZWZ0W3Jpbmdfbm9dKTsKKwkJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCS8qIFVwZGF0aW5nIHN0YXRpc3RpY3MgKi8KQEAgLTU3OTIsNiArNjUyMyw5IEBACiAJCQkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOwogCQkJCQkJZ290byBzZW5kX3VwOwogCQkJCQljYXNlIDA6IC8qIHNlc3Npb25zIGV4Y2VlZGVkICovCisJCQkJCWNhc2UgLTE6IC8qIG5vbi1UQ1Agb3Igbm90CisJCQkJCQkgICogTDIgYWdncmVnYXRhYmxlCisJCQkJCQkgICovCiAJCQkJCWNhc2UgNTogLyoKIAkJCQkJCSAqIEZpcnN0IHBrdCBpbiBzZXNzaW9uIG5vdAogCQkJCQkJICogTDMvTDQgYWdncmVnYXRhYmxlCkBAIC01OTE4LDEzICs2NjUyLDYgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoc3AtPnBkZXYsIFBDSV9DT01NQU5ELAogCQkJICAgICAgKHBjaV9jbWQgfCBQQ0lfQ09NTUFORF9QQVJJVFkpKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChzcC0+cGRldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKLQotCS8qIEZvcmNpYmx5IGRpc2FibGluZyByZWxheGVkIG9yZGVyaW5nIGNhcGFiaWxpdHkgb2YgdGhlIGNhcmQuICovCi0JcGNpeF9jbWQgJj0gMHhmZmZkOwotCXBjaV93cml0ZV9jb25maWdfd29yZChzcC0+cGRldiwgUENJWF9DT01NQU5EX1JFR0lTVEVSLAotCQkJICAgICAgcGNpeF9jbWQpOwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHNwLT5wZGV2LCBQQ0lYX0NPTU1BTkRfUkVHSVNURVIsCi0JCQkgICAgICYocGNpeF9jbWQpKTsKIH0KIAogTU9EVUxFX0FVVEhPUigiUmFnaGF2ZW5kcmEgS291c2hpayA8cmFnaGF2ZW5kcmEua291c2hpa0BuZXRlcmlvbi5jb20+Iik7CkBAIC01OTU0LDYgKzY2ODEsNTUgQEAKIG1vZHVsZV9wYXJhbShscm8sIGludCwgMCk7CiBtb2R1bGVfcGFyYW0obHJvX21heF9wa3RzLCBpbnQsIDApOwogCitzdGF0aWMgaW50IHMyaW9fdmVyaWZ5X3Bhcm0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4ICpkZXZfaW50cl90eXBlKQoreworCWlmICggdHhfZmlmb19udW0gPiA4KSB7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIG51bWJlciBvZiBUeCBmaWZvcyBub3QgIgorCQkJICJzdXBwb3J0ZWRcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERlZmF1bHQgdG8gOCBUeCBmaWZvc1xuIik7CisJCXR4X2ZpZm9fbnVtID0gODsKKwl9CisJaWYgKCByeF9yaW5nX251bSA+IDgpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBSZXF1ZXN0ZWQgbnVtYmVyIG9mIFJ4IHJpbmdzIG5vdCAiCisJCQkgInN1cHBvcnRlZFxuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogRGVmYXVsdCB0byA4IFJ4IHJpbmdzXG4iKTsKKwkJcnhfcmluZ19udW0gPSA4OworCX0KKyNpZmRlZiBDT05GSUdfUzJJT19OQVBJCisJaWYgKCpkZXZfaW50cl90eXBlICE9IElOVEEpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBOQVBJIGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gIgorCQkJICAiTVNJL01TSS1YIGlzIGVuYWJsZWQuIERlZmF1bHRpbmcgdG8gSU5UQVxuIik7CisJCSpkZXZfaW50cl90eXBlID0gSU5UQTsKKwl9CisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAoKmRldl9pbnRyX3R5cGUgIT0gSU5UQSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFRoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQiCisJCQkgICJNU0kvTVNJLVguIERlZmF1bHRpbmcgdG8gSU5UQVxuIik7CisJCSpkZXZfaW50cl90eXBlID0gSU5UQTsKKwl9CisjZWxzZQorCWlmICgqZGV2X2ludHJfdHlwZSA+IE1TSV9YKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogV3JvbmcgaW50cl90eXBlIHJlcXVlc3RlZC4gIgorCQkJICAiRGVmYXVsdGluZyB0byBJTlRBXG4iKTsKKwkJKmRldl9pbnRyX3R5cGUgPSBJTlRBOworCX0KKyNlbmRpZgorCWlmICgoKmRldl9pbnRyX3R5cGUgPT0gTVNJX1gpICYmCisJCQkoKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0hFUkNfV0lOKSAmJgorCQkJKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0hFUkNfVU5JKSkpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBYZnJhbWUgSSBkb2VzIG5vdCBzdXBwb3J0IE1TSV9YLiAiIAorCQkJCQkiRGVmYXVsdGluZyB0byBJTlRBXG4iKTsKKwkJKmRldl9pbnRyX3R5cGUgPSBJTlRBOworCX0KKwlpZiAocnhfcmluZ19tb2RlID4gMykgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCByaW5nIG1vZGUgbm90IHN1cHBvcnRlZFxuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogRGVmYXVsdGluZyB0byAzLWJ1ZmZlciBtb2RlXG4iKTsKKwkJcnhfcmluZ19tb2RlID0gMzsKKwl9CisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKIC8qKgogICogIHMyaW9faW5pdF9uaWMgLSBJbml0aWFsaXphdGlvbiBvZiB0aGUgYWRhcHRlciAuCiAgKiAgQHBkZXYgOiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgUENJIHJlbGF0ZWQgaW5mb3JtYXRpb24gb2YgdGhlIGRldmljZS4KQEAgLTU5ODQsMTUgKzY3NjAsOCBAQAogCWludCBtb2RlOwogCXU4IGRldl9pbnRyX3R5cGUgPSBpbnRyX3R5cGU7CiAKLSNpZmRlZiBDT05GSUdfUzJJT19OQVBJCi0JaWYgKGRldl9pbnRyX3R5cGUgIT0gSU5UQSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIk5BUEkgY2Fubm90IGJlIGVuYWJsZWQgd2hlbiBNU0kvTVNJLVggXAotaXMgZW5hYmxlZC4gRGVmYXVsdGluZyB0byBJTlRBXG4iKTsKLQkJZGV2X2ludHJfdHlwZSA9IElOVEE7Ci0JfQotCWVsc2UKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJOQVBJIHN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZFxuIik7Ci0jZW5kaWYKKwlpZiAoKHJldCA9IHMyaW9fdmVyaWZ5X3Bhcm0ocGRldiwgJmRldl9pbnRyX3R5cGUpKSkKKwkJcmV0dXJuIHJldDsKIAogCWlmICgocmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7CiAJCURCR19QUklOVChFUlJfREJHLApAQCAtNjAxNywxNCArNjc4Niw2IEBACiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCi0JaWYgKChkZXZfaW50cl90eXBlID09IE1TSV9YKSAmJiAKLQkJCSgocGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfSEVSQ19XSU4pICYmCi0JCQkocGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfSEVSQ19VTkkpKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIlhmcmFtZSBJIGRvZXMgbm90IHN1cHBvcnQgTVNJX1guIFwKLURlZmF1bHRpbmcgdG8gSU5UQVxuIik7Ci0JCWRldl9pbnRyX3R5cGUgPSBJTlRBOwotCX0KIAlpZiAoZGV2X2ludHJfdHlwZSAhPSBNU0lfWCkgewogCQlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBzMmlvX2RyaXZlcl9uYW1lKSkgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICJSZXF1ZXN0IFJlZ2lvbnMgZmFpbGVkXG4iKSwKQEAgLTYxMDAsOCArNjg2MSw2IEBACiAJY29uZmlnID0gJnNwLT5jb25maWc7CiAKIAkvKiBUeCBzaWRlIHBhcmFtZXRlcnMuICovCi0JaWYgKHR4X2ZpZm9fbGVuWzBdID09IDApCi0JCXR4X2ZpZm9fbGVuWzBdID0gREVGQVVMVF9GSUZPX0xFTjsgLyogRGVmYXVsdCB2YWx1ZS4gKi8KIAljb25maWctPnR4X2ZpZm9fbnVtID0gdHhfZmlmb19udW07CiAJZm9yIChpID0gMDsgaSA8IE1BWF9UWF9GSUZPUzsgaSsrKSB7CiAJCWNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuID0gdHhfZmlmb19sZW5baV07CkBAIC02MTI1LDggKzY4ODQsNiBAQAogCWNvbmZpZy0+bWF4X3R4ZHMgPSBNQVhfU0tCX0ZSQUdTICsgMjsKIAogCS8qIFJ4IHNpZGUgcGFyYW1ldGVycy4gKi8KLQlpZiAocnhfcmluZ19zelswXSA9PSAwKQotCQlyeF9yaW5nX3N6WzBdID0gU01BTExfQkxLX0NOVDsgLyogRGVmYXVsdCB2YWx1ZS4gKi8KIAljb25maWctPnJ4X3JpbmdfbnVtID0gcnhfcmluZ19udW07CiAJZm9yIChpID0gMDsgaSA8IE1BWF9SWF9SSU5HUzsgaSsrKSB7CiAJCWNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgPSByeF9yaW5nX3N6W2ldICoKQEAgLTYyNjcsOCArNzAyNCw4IEBACiAJdmFsNjQgPSBSTUFDX0FERFJfQ01EX01FTV9SRCB8IFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKIAkgICAgUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKDAgKyBNQUNfTUFDX0FERFJfU1RBUlRfT0ZGU0VUKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7Ci0Jd2FpdF9mb3JfY21kX2NvbXBsZXRlKHNwKTsKLQorCXdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCisJCSAgICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HKTsKIAl0bXA2NCA9IHJlYWRxKCZiYXIwLT5ybWFjX2FkZHJfZGF0YTBfbWVtKTsKIAltYWNfZG93biA9ICh1MzIpIHRtcDY0OwogCW1hY191cCA9ICh1MzIpICh0bXA2NCA+PiAzMik7CkBAIC02MzIyLDgyICs3MDc5LDYzIEBACiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gcmVnaXN0ZXJfZmFpbGVkOwogCX0KLQotCWlmIChzcC0+ZGV2aWNlX3R5cGUgJiBYRlJBTUVfSUlfREVWSUNFKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IE5ldGVyaW9uIFhmcmFtZSBJSSAxMEdiRSBhZGFwdGVyICIsCi0JCQkgIGRldi0+bmFtZSk7Ci0JCURCR19QUklOVChFUlJfREJHLCAiKHJldiAlZCksIFZlcnNpb24gJXMiLAorCXMyaW9fdnBkX3JlYWQoc3ApOworCURCR19QUklOVChFUlJfREJHLCAiJXM6IE5ldGVyaW9uICVzIixkZXYtPm5hbWUsIHNwLT5wcm9kdWN0X25hbWUpOworCURCR19QUklOVChFUlJfREJHLCAiKHJldiAlZCksIERyaXZlciB2ZXJzaW9uICVzXG4iLAogCQkJCWdldF94ZW5hX3Jldl9pZChzcC0+cGRldiksCiAJCQkJczJpb19kcml2ZXJfdmVyc2lvbik7Ci0JCXN3aXRjaChzcC0+aW50cl90eXBlKSB7Ci0JCQljYXNlIElOVEE6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIsIEludHIgdHlwZSBJTlRBIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1TSToKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiwgSW50ciB0eXBlIE1TSSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNU0lfWDoKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiwgSW50ciB0eXBlIE1TSS1YIik7Ci0JCQkJYnJlYWs7Ci0JCX0KLQotCQlEQkdfUFJJTlQoRVJSX0RCRywgIlxuQ29weXJpZ2h0KGMpIDIwMDItMjAwNSBOZXRlcmlvbiBJbmMuXG4iKTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJNQUMgQUREUjogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJREJHX1BSSU5UKEVSUl9EQkcsICJDb3B5cmlnaHQoYykgMjAwMi0yMDA1IE5ldGVyaW9uIEluYy5cbiIpOworCURCR19QUklOVChFUlJfREJHLCAiJXM6IE1BQyBBRERSOiAiCisJCQkgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgZGV2LT5uYW1lLAogCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzBdLAogCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzFdLAogCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzJdLAogCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzNdLAogCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzRdLAogCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzVdKTsKKwlpZiAoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkgewogCQltb2RlID0gczJpb19wcmludF9wY2lfbW9kZShzcCk7CiAJCWlmIChtb2RlIDwgMCkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgVW5zdXBwb3J0ZWQgUENJIGJ1cyBtb2RlICIpOworCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgVW5zdXBwb3J0ZWQgUENJIGJ1cyBtb2RlXG4iKTsKIAkJCXJldCA9IC1FQkFEU0xUOworCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJCWdvdG8gc2V0X3N3YXBfZmFpbGVkOwogCQl9Ci0JfSBlbHNlIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTmV0ZXJpb24gWGZyYW1lIEkgMTBHYkUgYWRhcHRlciAiLAotCQkJICBkZXYtPm5hbWUpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgIihyZXYgJWQpLCBWZXJzaW9uICVzIiwKLQkJCQkJZ2V0X3hlbmFfcmV2X2lkKHNwLT5wZGV2KSwKLQkJCQkJczJpb19kcml2ZXJfdmVyc2lvbik7Ci0JCXN3aXRjaChzcC0+aW50cl90eXBlKSB7Ci0JCQljYXNlIElOVEE6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIsIEludHIgdHlwZSBJTlRBIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1TSToKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiwgSW50ciB0eXBlIE1TSSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNU0lfWDoKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiwgSW50ciB0eXBlIE1TSS1YIik7Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJREJHX1BSSU5UKEVSUl9EQkcsICJcbkNvcHlyaWdodChjKSAyMDAyLTIwMDUgTmV0ZXJpb24gSW5jLlxuIik7Ci0JCURCR19QUklOVChFUlJfREJHLCAiTUFDIEFERFI6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzBdLAotCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzFdLAotCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzJdLAotCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzNdLAotCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzRdLAotCQkJICBzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzVdKTsKIAl9Ci0JaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogMi1CdWZmZXIgbW9kZSBzdXBwb3J0IGhhcyBiZWVuICIKLQkJCSAgImVuYWJsZWRcbiIsZGV2LT5uYW1lKTsKLQlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNBKQotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiAzLUJ1ZmZlciBtb2RlIHN1cHBvcnQgaGFzIGJlZW4gIgotCQkJICAiZW5hYmxlZFxuIixkZXYtPm5hbWUpOwotCisJc3dpdGNoKHNwLT5yeGRfbW9kZSkgeworCQljYXNlIFJYRF9NT0RFXzE6CisJCSAgICBEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiAxLUJ1ZmZlciByZWNlaXZlIG1vZGUgZW5hYmxlZFxuIiwKKwkJCQkJCWRldi0+bmFtZSk7CisJCSAgICBicmVhazsKKwkJY2FzZSBSWERfTU9ERV8zQjoKKwkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IDItQnVmZmVyIHJlY2VpdmUgbW9kZSBlbmFibGVkXG4iLAorCQkJCQkJZGV2LT5uYW1lKTsKKwkJICAgIGJyZWFrOworCQljYXNlIFJYRF9NT0RFXzNBOgorCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogMy1CdWZmZXIgcmVjZWl2ZSBtb2RlIGVuYWJsZWRcbiIsCisJCQkJCQlkZXYtPm5hbWUpOworCQkgICAgYnJlYWs7CisJfQorI2lmZGVmIENPTkZJR19TMklPX05BUEkKKwlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBOQVBJIGVuYWJsZWRcbiIsIGRldi0+bmFtZSk7CisjZW5kaWYKKwlzd2l0Y2goc3AtPmludHJfdHlwZSkgeworCQljYXNlIElOVEE6CisJCSAgICBEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBJbnRlcnJ1cHQgdHlwZSBJTlRBXG4iLCBkZXYtPm5hbWUpOworCQkgICAgYnJlYWs7CisJCWNhc2UgTVNJOgorCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogSW50ZXJydXB0IHR5cGUgTVNJXG4iLCBkZXYtPm5hbWUpOworCQkgICAgYnJlYWs7CisJCWNhc2UgTVNJX1g6CisJCSAgICBEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBJbnRlcnJ1cHQgdHlwZSBNU0ktWFxuIiwgZGV2LT5uYW1lKTsKKwkJICAgIGJyZWFrOworCX0KIAlpZiAoc3AtPmxybykKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTGFyZ2UgcmVjZWl2ZSBvZmZsb2FkIGVuYWJsZWRcbiIsCi0JCQlkZXYtPm5hbWUpOworCQkJICBkZXYtPm5hbWUpOwogCiAJLyogSW5pdGlhbGl6ZSBkZXZpY2UgbmFtZSAqLwotCXN0cmNweShzcC0+bmFtZSwgZGV2LT5uYW1lKTsKLQlpZiAoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkKLQkJc3RyY2F0KHNwLT5uYW1lLCAiOiBOZXRlcmlvbiBYZnJhbWUgSUkgMTBHYkUgYWRhcHRlciIpOwotCWVsc2UKLQkJc3RyY2F0KHNwLT5uYW1lLCAiOiBOZXRlcmlvbiBYZnJhbWUgSSAxMEdiRSBhZGFwdGVyIik7CisJc3ByaW50ZihzcC0+bmFtZSwgIiVzIE5ldGVyaW9uICVzIiwgZGV2LT5uYW1lLCBzcC0+cHJvZHVjdF9uYW1lKTsKIAogCS8qIEluaXRpYWxpemUgYmltb2RhbCBJbnRlcnJ1cHRzICovCiAJc3AtPmNvbmZpZy5iaW1vZGFsID0gYmltb2RhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uaCBiL2RyaXZlcnMvbmV0L3MyaW8uaAppbmRleCAwYTBiNWIyLi4zMjAzNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby5oCkBAIC0zMSw2ICszMSw4IEBACiAjZGVmaW5lIFNVQ0NFU1MgMAogI2RlZmluZSBGQUlMVVJFIC0xCiAKKyNkZWZpbmUgQ0hFQ0tCSVQodmFsdWUsIG5iaXQpICh2YWx1ZSAmICgxIDw8IG5iaXQpKQorCiAvKiBNYXhpbXVtIHRpbWUgdG8gZmxpY2tlciBMRUQgd2hlbiBhc2tlZCB0byBpZGVudGlmeSBOSUMgdXNpbmcgZXRodG9vbCAqLwogI2RlZmluZSBNQVhfRkxJQ0tFUl9USU1FCTYwMDAwIC8qIDYwIFNlY3MgKi8KIApAQCAtNzgsNiArODAsMTEgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2luZ2xlX2VjY19lcnJzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBkb3VibGVfZWNjX2VycnM7CisJdW5zaWduZWQgbG9uZyBsb25nIHBhcml0eV9lcnJfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBzZXJpb3VzX2Vycl9jbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHNvZnRfcmVzZXRfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBmaWZvX2Z1bGxfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyByaW5nX2Z1bGxfY250OwogCS8qIExSTyBzdGF0aXN0aWNzICovCiAJdW5zaWduZWQgbG9uZyBsb25nIGNsdWJiZWRfZnJtc19jbnQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIHNlbmRpbmdfYm90aDsKQEAgLTg3LDYgKzk0LDI1IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG51bV9hZ2dyZWdhdGlvbnM7CiB9IHN3U3RhdF90OwogCisvKiBYcGFrIHJlbGVhdGVkIGFsYXJtIGFuZCB3YXJuaW5ncyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NCBhbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2g7CisJdTY0IGFsYXJtX3RyYW5zY2VpdmVyX3RlbXBfbG93OworCXU2NCBhbGFybV9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaDsKKwl1NjQgYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2xvdzsKKwl1NjQgYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2g7CisJdTY0IGFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9sb3c7CisJdTY0IHdhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoOworCXU2NCB3YXJuX3RyYW5zY2VpdmVyX3RlbXBfbG93OworCXU2NCB3YXJuX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoOworCXU2NCB3YXJuX2xhc2VyX2JpYXNfY3VycmVudF9sb3c7CisJdTY0IHdhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2g7CisJdTY0IHdhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdzsKKwl1NjQgeHBha19yZWdzX3N0YXQ7CisJdTMyIHhwYWtfdGltZXJfY291bnQ7Cit9IHhwYWtTdGF0X3Q7CisKKwogLyogVGhlIHN0YXRpc3RpY3MgYmxvY2sgb2YgWGVuYSAqLwogdHlwZWRlZiBzdHJ1Y3Qgc3RhdF9ibG9jayB7CiAvKiBUeCBNQUMgc3RhdGlzdGljcyBjb3VudGVycy4gKi8KQEAgLTI2Myw3ICsyODksOSBAQAogCXUzMiBybWFjX2FjY2VwdGVkX2lwX29mbG93OwogCXUzMiByZXNlcnZlZF8xNDsKIAl1MzIgbGlua19mYXVsdF9jbnQ7CisJdTggIGJ1ZmZlclsyMF07CiAJc3dTdGF0X3Qgc3dfc3RhdDsKKwl4cGFrU3RhdF90IHhwYWtfc3RhdDsKIH0gU3RhdEluZm9fdDsKIAogLyoKQEAgLTY1OSw3ICs2ODcsOCBAQAogfSB1c3JfYWRkcl90OwogCiAvKiBEZWZhdWx0IFR1bmFibGUgcGFyYW1ldGVycyBvZiB0aGUgTklDLiAqLwotI2RlZmluZSBERUZBVUxUX0ZJRk9fTEVOIDQwOTYKKyNkZWZpbmUgREVGQVVMVF9GSUZPXzBfTEVOIDQwOTYKKyNkZWZpbmUgREVGQVVMVF9GSUZPXzFfN19MRU4gNTEyCiAjZGVmaW5lIFNNQUxMX0JMS19DTlQJMzAKICNkZWZpbmUgTEFSR0VfQkxLX0NOVAkxMDAKIApAQCAtNzMyLDcgKzc2MSw3IEBACiAJaW50IGRldmljZV9jbG9zZV9mbGFnOwogCWludCBkZXZpY2VfZW5hYmxlZF9vbmNlOwogCi0JY2hhciBuYW1lWzUwXTsKKwljaGFyIG5hbWVbNjBdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGFza2xldF9zdGF0dXM7CiAKQEAgLTgwMyw2ICs4MzIsOCBAQAogCWNoYXIgZGVzYzFbMzVdOwogCWNoYXIgZGVzYzJbMzVdOwogCisJaW50IGF2YWlsX21zaXhfdmVjdG9yczsgLyogTm8uIG9mIE1TSS1YIHZlY3RvcnMgZ3JhbnRlZCBieSBzeXN0ZW0gKi8KKwogCXN0cnVjdCBtc2l4X2luZm9fc3QgbXNpeF9pbmZvWzB4M2ZdOwogCiAjZGVmaW5lIFhGUkFNRV9JX0RFVklDRQkJMQpAQCAtODI0LDYgKzg1NSw4IEBACiAJc3BpbmxvY2tfdAlyeF9sb2NrOwogCWF0b21pY190CWlzcl9jbnQ7CiAJdTY0ICp1Zm9faW5fYmFuZF92OworI2RlZmluZSBWUERfUFJPRFVDVF9OQU1FX0xFTiA1MAorCXU4ICBwcm9kdWN0X25hbWVbVlBEX1BST0RVQ1RfTkFNRV9MRU5dOwogfTsKIAogI2RlZmluZSBSRVNFVF9FUlJPUiAxOwpAQCAtODQ4LDI4ICs4ODEsMzIgQEAKIAl3cml0ZWwoKHUzMikgKHZhbCksIGFkZHIpOwogCXdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7CiB9CisjZW5kaWYKIAotLyogSW4gMzIgYml0IG1vZGVzLCBzb21lIHJlZ2lzdGVycyBoYXZlIHRvIGJlIHdyaXR0ZW4gaW4gYQotICogcGFydGljdWxhciBvcmRlciB0byBleHBlY3QgY29ycmVjdCBoYXJkd2FyZSBvcGVyYXRpb24uIFRoZQotICogbWFjcm8gU1BFQ0lBTF9SRUdfV1JJVEUgaXMgdXNlZCB0byBwZXJmb3JtIHN1Y2ggb3JkZXJlZAotICogd3JpdGVzLiBEZWZpbmVzIFVGIChVcHBlciBGaXJzdCkgYW5kIExGIChMb3dlciBGaXJzdCkgd2lsbAotICogYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZXF1aXJlZCB3cml0ZSBvcmRlci4KKy8qIAorICogU29tZSByZWdpc3RlcnMgaGF2ZSB0byBiZSB3cml0dGVuIGluIGEgcGFydGljdWxhciBvcmRlciB0byAKKyAqIGV4cGVjdCBjb3JyZWN0IGhhcmR3YXJlIG9wZXJhdGlvbi4gVGhlIG1hY3JvIFNQRUNJQUxfUkVHX1dSSVRFIAorICogaXMgdXNlZCB0byBwZXJmb3JtIHN1Y2ggb3JkZXJlZCB3cml0ZXMuIERlZmluZXMgVUYgKFVwcGVyIEZpcnN0KSAKKyAqIGFuZCBMRiAoTG93ZXIgRmlyc3QpIHdpbGwgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZXF1aXJlZCB3cml0ZSBvcmRlci4KICAqLwogI2RlZmluZSBVRgkxCiAjZGVmaW5lIExGCTIKIHN0YXRpYyBpbmxpbmUgdm9pZCBTUEVDSUFMX1JFR19XUklURSh1NjQgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIsIGludCBvcmRlcikKIHsKKwl1MzIgcmV0OworCiAJaWYgKG9yZGVyID09IExGKSB7CiAJCXdyaXRlbCgodTMyKSAodmFsKSwgYWRkcik7CisJCXJldCA9IHJlYWRsKGFkZHIpOwogCQl3cml0ZWwoKHUzMikgKHZhbCA+PiAzMiksIChhZGRyICsgNCkpOworCQlyZXQgPSByZWFkbChhZGRyICsgNCk7CiAJfSBlbHNlIHsKIAkJd3JpdGVsKCh1MzIpICh2YWwgPj4gMzIpLCAoYWRkciArIDQpKTsKKwkJcmV0ID0gcmVhZGwoYWRkciArIDQpOwogCQl3cml0ZWwoKHUzMikgKHZhbCksIGFkZHIpOworCQlyZXQgPSByZWFkbChhZGRyKTsKIAl9CiB9Ci0jZWxzZQotI2RlZmluZSBTUEVDSUFMX1JFR19XUklURSh2YWwsIGFkZHIsIGR1bW15KSB3cml0ZXEodmFsLCBhZGRyKQotI2VuZGlmCiAKIC8qICBJbnRlcnJ1cHQgcmVsYXRlZCB2YWx1ZXMgb2YgWGVuYSAqLwogCkBAIC05NjUsNyArMTAwMiw3IEBACiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyB2b2lkIHMyaW9fc2V0X2xpbmsodW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyBpbnQgczJpb19zZXRfc3dhcHBlcihuaWNfdCAqIHNwKTsKLXN0YXRpYyB2b2lkIHMyaW9fY2FyZF9kb3duKG5pY190ICpuaWMpOworc3RhdGljIHZvaWQgczJpb19jYXJkX2Rvd24obmljX3QgKm5pYywgaW50IGZsYWcpOwogc3RhdGljIGludCBzMmlvX2NhcmRfdXAobmljX3QgKm5pYyk7CiBzdGF0aWMgaW50IGdldF94ZW5hX3Jldl9pZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3htc2lfZGF0YShuaWNfdCAqbmljKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggZjVhM2JmNC4uZDA1ODc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTEsNiArMSw2IEBACiAvKiBzaXM5MDAuYzogQSBTaVMgOTAwLzcwMTYgUENJIEZhc3QgRXRoZXJuZXQgZHJpdmVyIGZvciBMaW51eC4KICAgIENvcHlyaWdodCAxOTk5IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycG9yYXRpb24gCi0gICBSZXZpc2lvbjoJMS4wOC4wOSBTZXAuIDE5IDIwMDUKKyAgIFJldmlzaW9uOgkxLjA4LjEwIEFwci4gMiAyMDA2CiAgICAKICAgIE1vZGlmaWVkIGZyb20gdGhlIGRyaXZlciB3aGljaCBpcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlci4KICAgIApAQCAtMTcsOSArMTcsMTAgQEAKICAgIFNpUyA3MDE0IFNpbmdsZSBDaGlwIDEwMEJBU0UtVFgvMTBCQVNFLVQgUGh5c2ljYWwgTGF5ZXIgU29sdXRpb24sCiAgICBwcmVsaW1pbmFyeSBSZXYuIDEuMCBKYW4uIDE4LCAxOTk4CiAKKyAgIFJldiAxLjA4LjEwIEFwci4gIDIgMjAwNiBEYW5pZWxlIFZlbnphbm8gYWRkIHZsYW4gKGp1bWJvIHBhY2tldHMpIHN1cHBvcnQKICAgIFJldiAxLjA4LjA5IFNlcC4gMTkgMjAwNSBEYW5pZWxlIFZlbnphbm8gYWRkIFdha2Ugb24gTEFOIHN1cHBvcnQKICAgIFJldiAxLjA4LjA4IEphbi4gMjIgMjAwNSBEYW5pZWxlIFZlbnphbm8gdXNlIG5ldGlmX21zZyBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzCi0gICBSZXYgMS4wOC4wNyBOb3YuICAyIDIwMDMgRGFuaWVsZSBWZW56YW5vIDx3ZWJ2ZW56YUBsaWJlcm8uaXQ+IGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0CisgICBSZXYgMS4wOC4wNyBOb3YuICAyIDIwMDMgRGFuaWVsZSBWZW56YW5vIDx2ZW56YUBicm93bmhhdC5vcmc+IGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0CiAgICBSZXYgMS4wOC4wNiBTZXAuIDI0IDIwMDIgTXVmYXNhIFlhbmcgYnVnIGZpeCBmb3IgVHggdGltZW91dCAmIGFkZCBTaVM5NjMgc3VwcG9ydAogICAgUmV2IDEuMDguMDUgSnVuLiAgNiAyMDAyIE11ZmFzYSBZYW5nIGJ1ZyBmaXggZm9yIHJlYWRfZWVwcm9tICYgVHggZGVzY3JpcHRvciBvdmVyLWJvdW5kYXJ5CiAgICBSZXYgMS4wOC4wNCBBcHIuIDI1IDIwMDIgTXVmYXNhIFlhbmcgPG11ZmFzYUBzaXMuY29tLnR3PiBhZGRlZCBTaVM5NjIgc3VwcG9ydApAQCAtNzcsNyArNzgsNyBAQAogI2luY2x1ZGUgInNpczkwMC5oIgogCiAjZGVmaW5lIFNJUzkwMF9NT0RVTEVfTkFNRSAic2lzOTAwIgotI2RlZmluZSBTSVM5MDBfRFJWX1ZFUlNJT04gInYxLjA4LjA5IFNlcC4gMTkgMjAwNSIKKyNkZWZpbmUgU0lTOTAwX0RSVl9WRVJTSU9OICJ2MS4wOC4xMCBBcHIuIDIgMjAwNiIKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogS0VSTl9JTkZPICJzaXM5MDAuYzogIiBTSVM5MDBfRFJWX1ZFUlNJT04gIlxuIjsKQEAgLTE0MDIsNiArMTQwMywxMSBAQAogCQlyeF9mbGFncyB8PSBSeEFUWDsKIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKKwkvKiBDYW4gYWNjZXB0IEp1bWJvIHBhY2tldCAqLworCXJ4X2ZsYWdzIHw9IFJ4QUpBQjsKKyNlbmRpZgorCiAJb3V0bCAodHhfZmxhZ3MsIGlvYWRkciArIHR4Y2ZnKTsKIAlvdXRsIChyeF9mbGFncywgaW9hZGRyICsgcnhjZmcpOwogfQpAQCAtMTcxNCwxOCArMTcyMCwyNiBAQAogCiAJd2hpbGUgKHJ4X3N0YXR1cyAmIE9XTikgewogCQl1bnNpZ25lZCBpbnQgcnhfc2l6ZTsKKwkJdW5zaWduZWQgaW50IGRhdGFfc2l6ZTsKIAogCQlpZiAoLS1yeF93b3JrX2xpbWl0IDwgMCkKIAkJCWJyZWFrOwogCi0JCXJ4X3NpemUgPSAocnhfc3RhdHVzICYgRFNJWkUpIC0gQ1JDX1NJWkU7CisJCWRhdGFfc2l6ZSA9IHJ4X3N0YXR1cyAmIERTSVpFOworCQlyeF9zaXplID0gZGF0YV9zaXplIC0gQ1JDX1NJWkU7CisKKyNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKKwkJLyogYGBUT09MT05HJycgZmxhZyBtZWFucyBqdW1ibyBwYWNrZXQgcmVjaXZlZC4gKi8KKwkJaWYgKChyeF9zdGF0dXMgJiBUT09MT05HKSAmJiBkYXRhX3NpemUgPD0gTUFYX0ZSQU1FX1NJWkUpCisJCQlyeF9zdGF0dXMgJj0gKH4gKCh1bnNpZ25lZCBpbnQpVE9PTE9ORykpOworI2VuZGlmCiAKIAkJaWYgKHJ4X3N0YXR1cyAmIChBQk9SVHxPVkVSUlVOfFRPT0xPTkd8UlVOVHxSWElTRVJSfENSQ0VSUnxGQUVSUikpIHsKIAkJCS8qIGNvcnJ1cHRlZCBwYWNrZXQgcmVjZWl2ZWQgKi8KIAkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHNpc19wcml2KSkKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvcnJ1cHRlZCBwYWNrZXQgIgotCQkJCSAgICAgICAicmVjZWl2ZWQsIGJ1ZmZlciBzdGF0dXMgPSAweCU4Ljh4LlxuIiwKLQkJCQkgICAgICAgbmV0X2Rldi0+bmFtZSwgcnhfc3RhdHVzKTsKKwkJCQkgICAgICAgInJlY2VpdmVkLCBidWZmZXIgc3RhdHVzID0gMHglOC44eC8lZC5cbiIsCisJCQkJICAgICAgIG5ldF9kZXYtPm5hbWUsIHJ4X3N0YXR1cywgZGF0YV9zaXplKTsKIAkJCXNpc19wcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChyeF9zdGF0dXMgJiBPVkVSUlVOKQogCQkJCXNpc19wcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmggYi9kcml2ZXJzL25ldC9zaXM5MDAuaAppbmRleCA1MDMyMzk0Li40ODM0ZTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuaAorKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuaApAQCAtMzEwLDggKzMxMCwxNCBAQAogI2RlZmluZSBDUkNfU0laRSAgICAgICAgICAgICAgICA0CiAjZGVmaW5lIE1BQ19IRUFERVJfU0laRSAgICAgICAgIDE0CiAKLSNkZWZpbmUgVFhfQlVGX1NJWkUgICAgIDE1MzYKLSNkZWZpbmUgUlhfQlVGX1NJWkUgICAgIDE1MzYKKyNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKKyNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUgICgxNTE4ICsgNCkKKyNlbHNlCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAxNTE4CisjZW5kaWYgLyogQ09ORklHX1ZMQU5fODAyXzFRICovCisKKyNkZWZpbmUgVFhfQlVGX1NJWkUgICAgIChNQVhfRlJBTUVfU0laRSsxOCkKKyNkZWZpbmUgUlhfQlVGX1NJWkUgICAgIChNQVhfRlJBTUVfU0laRSsxOCkKIAogI2RlZmluZSBOVU1fVFhfREVTQyAgICAgMTYgICAgICAJLyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzLiAqLwogI2RlZmluZSBOVU1fUlhfREVTQyAgICAgMTYgICAgICAgCS8qIE51bWJlciBvZiBSeCBkZXNjcmlwdG9yIHJlZ2lzdGVycy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCA1Y2E1YTFiLi41MzZkZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC00NCwxMiArNDQsMTMgQEAKICNpbmNsdWRlICJza2dlLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJza2dlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjYiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICIgIgogCiAjZGVmaW5lIERFRkFVTFRfVFhfUklOR19TSVpFCTEyOAogI2RlZmluZSBERUZBVUxUX1JYX1JJTkdfU0laRQk1MTIKICNkZWZpbmUgTUFYX1RYX1JJTkdfU0laRQkxMDI0CisjZGVmaW5lIFRYX0xPV19XQVRFUgkJKE1BWF9TS0JfRlJBR1MgKyAxKQogI2RlZmluZSBNQVhfUlhfUklOR19TSVpFCTQwOTYKICNkZWZpbmUgUlhfQ09QWV9USFJFU0hPTEQJMTI4CiAjZGVmaW5lIFJYX0JVRl9TSVpFCQkxNTM2CkBAIC00MDEsNyArNDAyLDcgQEAKIAlpbnQgZXJyOwogCiAJaWYgKHAtPnJ4X3BlbmRpbmcgPT0gMCB8fCBwLT5yeF9wZW5kaW5nID4gTUFYX1JYX1JJTkdfU0laRSB8fAotCSAgICBwLT50eF9wZW5kaW5nIDwgTUFYX1NLQl9GUkFHUysxIHx8IHAtPnR4X3BlbmRpbmcgPiBNQVhfVFhfUklOR19TSVpFKQorCSAgICBwLT50eF9wZW5kaW5nIDwgVFhfTE9XX1dBVEVSIHx8IHAtPnR4X3BlbmRpbmcgPiBNQVhfVFhfUklOR19TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNrZ2UtPnJ4X3JpbmcuY291bnQgPSBwLT5yeF9wZW5kaW5nOwpAQCAtNjAzLDcgKzYwNCw3IEBACiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CiAJaW50IHBvcnQgPSBza2dlLT5wb3J0OwogCi0Jc3Bpbl9sb2NrX2JoKCZody0+cGh5X2xvY2spOworCW11dGV4X2xvY2soJmh3LT5waHlfbXV0ZXgpOwogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpIHsKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgTEVEX01PREVfT0ZGOgpAQCAtNjYzLDcgKzY2NCw3IEBACiAJCQkJICAgICBQSFlfTV9MRURfTU9fUlgoTU9fTEVEX09OKSk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKIH0KIAogLyogYmxpbmsgTEVEJ3MgZm9yIGZpbmRpbmcgYm9hcmQgKi8KQEAgLTIwMzgsNyArMjAzOSw3IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShza2dlLT5uZXRkZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHNrZ2UtPm5ldGRldik7CiAKLQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfbG9jaygmaHctPnBoeV9tdXRleCk7CiAJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykgewogCQlnZW5lc2lzX3Jlc2V0KGh3LCBwb3J0KTsKIAkJZ2VuZXNpc19tYWNfaW5pdChodywgcG9ydCk7CkBAIC0yMDQ2LDcgKzIwNDcsNyBAQAogCQl5dWtvbl9yZXNldChodywgcG9ydCk7CiAJCXl1a29uX2luaXQoaHcsIHBvcnQpOwogCX0KLQlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwltdXRleF91bmxvY2soJmh3LT5waHlfbXV0ZXgpOwogfQogCiAvKiBCYXNpYyBNSUkgc3VwcG9ydCAqLwpAQCAtMjA2NywxMiArMjA2OCwxMiBAQAogCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU0lPQ0dNSUlSRUc6IHsKIAkJdTE2IHZhbCA9IDA7Ci0JCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmaHctPnBoeV9tdXRleCk7CiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCiAJCQllcnIgPSBfX3htX3BoeV9yZWFkKGh3LCBza2dlLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgJnZhbCk7CiAJCWVsc2UKIAkJCWVyciA9IF9fZ21fcGh5X3JlYWQoaHcsIHNrZ2UtPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLCAmdmFsKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJCW11dGV4X3VubG9jaygmaHctPnBoeV9tdXRleCk7CiAJCWRhdGEtPnZhbF9vdXQgPSB2YWw7CiAJCWJyZWFrOwogCX0KQEAgLTIwODEsMTQgKzIwODIsMTQgQEAKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJCW11dGV4X2xvY2soJmh3LT5waHlfbXV0ZXgpOwogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQogCQkJZXJyID0geG1fcGh5X3dyaXRlKGh3LCBza2dlLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKIAkJCQkgICBkYXRhLT52YWxfaW4pOwogCQllbHNlCiAJCQllcnIgPSBnbV9waHlfd3JpdGUoaHcsIHNrZ2UtPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLAogCQkJCSAgIGRhdGEtPnZhbF9pbik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZody0+cGh5X2xvY2spOworCQltdXRleF91bmxvY2soJmh3LT5waHlfbXV0ZXgpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTIxOTEsMTIgKzIxOTIsMTIgQEAKIAkJZ290byBmcmVlX3J4X3Jpbmc7CiAKIAkvKiBJbml0aWFsaXplIE1BQyAqLwotCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwltdXRleF9sb2NrKCZody0+cGh5X211dGV4KTsKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQogCQlnZW5lc2lzX21hY19pbml0KGh3LCBwb3J0KTsKIAllbHNlCiAJCXl1a29uX21hY19pbml0KGh3LCBwb3J0KTsKLQlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwltdXRleF91bmxvY2soJmh3LT5waHlfbXV0ZXgpOwogCiAJLyogQ29uZmlndXJlIFJBTWJ1ZmZlcnMgKi8KIAljaHVuayA9IGh3LT5yYW1fc2l6ZSAvICgoaHctPnBvcnRzICsgMSkqMik7CkBAIC0yMzAyLDIxICsyMzAzLDIwIEBACiB7CiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7Ci0Jc3RydWN0IHNrZ2VfcmluZyAqcmluZyA9ICZza2dlLT50eF9yaW5nOwogCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7CiAJc3RydWN0IHNrZ2VfdHhfZGVzYyAqdGQ7CiAJaW50IGk7CiAJdTMyIGNvbnRyb2wsIGxlbjsKIAl1NjQgbWFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlza2IgPSBza2JfcGFkdG8oc2tiLCBFVEhfWkxFTik7CiAJaWYgKCFza2IpCiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAKLQlpZiAoIXNwaW5fdHJ5bG9jaygmc2tnZS0+dHhfbG9jaykpIHsKKwlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZza2dlLT50eF9sb2NrLCBmbGFncykpCiAJCS8qIENvbGxpc2lvbiAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLwogCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9CiAKIAlpZiAodW5saWtlbHkoc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKIAkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKQEAgLTIzMjUsMTIgKzIzMjUsMTMgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnNrZ2UtPnR4X2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza2dlLT50eF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQllID0gcmluZy0+dG9fdXNlOworCWUgPSBza2dlLT50eF9yaW5nLnRvX3VzZTsKIAl0ZCA9IGUtPmRlc2M7CisJQlVHX09OKHRkLT5jb250cm9sICYgQk1VX09XTik7CiAJZS0+c2tiID0gc2tiOwogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJbWFwID0gcGNpX21hcF9zaW5nbGUoaHctPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTIzNzEsOCArMjM3MiwxMCBAQAogCQkJCQkgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQkJZSA9IGUtPm5leHQ7Ci0JCQllLT5za2IgPSBOVUxMOworCQkJZS0+c2tiID0gc2tiOwogCQkJdGYgPSBlLT5kZXNjOworCQkJQlVHX09OKHRmLT5jb250cm9sICYgQk1VX09XTik7CisKIAkJCXRmLT5kbWFfbG8gPSBtYXA7CiAJCQl0Zi0+ZG1hX2hpID0gKHU2NCkgbWFwID4+IDMyOwogCQkJcGNpX3VubWFwX2FkZHJfc2V0KGUsIG1hcGFkZHIsIG1hcCk7CkBAIC0yMzg5LDU2ICsyMzkyLDY4IEBACiAKIAlza2dlX3dyaXRlOChodywgUV9BRERSKHR4cWFkZHJbc2tnZS0+cG9ydF0sIFFfQ1NSKSwgQ1NSX1NUQVJUKTsKIAotCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKHNrZ2UpKQorCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNrZ2UpKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXRkLCBsZW4gJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGUgLSByaW5nLT5zdGFydCwgc2tiLT5sZW4pOworCQkgICAgICAgZGV2LT5uYW1lLCBlIC0gc2tnZS0+dHhfcmluZy5zdGFydCwgc2tiLT5sZW4pOwogCi0JcmluZy0+dG9fdXNlID0gZS0+bmV4dDsKLQlpZiAoc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPD0gTUFYX1NLQl9GUkFHUyArIDEpIHsKKwlza2dlLT50eF9yaW5nLnRvX3VzZSA9IGUtPm5leHQ7CisJaWYgKHNrZ2VfYXZhaWwoJnNrZ2UtPnR4X3JpbmcpIDw9IFRYX0xPV19XQVRFUikgewogCQlwcl9kZWJ1ZygiJXM6IHRyYW5zbWl0IHF1ZXVlIGZ1bGxcbiIsIGRldi0+bmFtZSk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAKLQltbWlvd2IoKTsKLQlzcGluX3VubG9jaygmc2tnZS0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgdm9pZCBza2dlX3R4X2NvbXBsZXRlKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UsIHN0cnVjdCBza2dlX2VsZW1lbnQgKmxhc3QpCisKKy8qIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlaW5nIGVsZW1lbnQgKi8KK3N0YXRpYyB2b2lkIHNrZ2VfdHhfZnJlZShzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlLCBzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplLAorCQkJIHUzMiBjb250cm9sKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2tnZS0+aHctPnBkZXY7Ci0Jc3RydWN0IHNrZ2VfZWxlbWVudCAqZTsKIAotCWZvciAoZSA9IHNrZ2UtPnR4X3JpbmcudG9fY2xlYW47IGUgIT0gbGFzdDsgZSA9IGUtPm5leHQpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGUtPnNrYjsKLQkJaW50IGk7CisJQlVHX09OKCFlLT5za2IpOwogCi0JCWUtPnNrYiA9IE5VTEw7CisJLyogc2tiIGhlYWRlciB2cy4gZnJhZ21lbnQgKi8KKwlpZiAoY29udHJvbCAmIEJNVV9TVEYpCiAJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIoZSwgbWFwYWRkciksCi0JCQkJIHNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCSBwY2lfdW5tYXBfbGVuKGUsIG1hcGxlbiksCisJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCWVsc2UKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIoZSwgbWFwYWRkciksCisJCQkgICAgICAgcGNpX3VubWFwX2xlbihlLCBtYXBsZW4pLAorCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKLQkJCWUgPSBlLT5uZXh0OwotCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIoZSwgbWFwYWRkciksCi0JCQkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSwKLQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCX0KKwlpZiAoY29udHJvbCAmIEJNVV9FT0YpIHsKKwkJaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9kb25lKHNrZ2UpKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHR4IGRvbmUgc2xvdCAldGRcbiIsCisJCQkgICAgICAgc2tnZS0+bmV0ZGV2LT5uYW1lLCBlIC0gc2tnZS0+dHhfcmluZy5zdGFydCk7CiAKLQkJZGV2X2tmcmVlX3NrYihza2IpOworCQlkZXZfa2ZyZWVfc2tiX2FueShlLT5za2IpOwogCX0KLQlza2dlLT50eF9yaW5nLnRvX2NsZWFuID0gZTsKKwllLT5za2IgPSBOVUxMOwogfQogCisvKiBGcmVlIGFsbCBidWZmZXJzIGluIHRyYW5zbWl0IHJpbmcgKi8KIHN0YXRpYyB2b2lkIHNrZ2VfdHhfY2xlYW4oc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKIHsKKwlzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfYmgoJnNrZ2UtPnR4X2xvY2spOwotCXNrZ2VfdHhfY29tcGxldGUoc2tnZSwgc2tnZS0+dHhfcmluZy50b191c2UpOworCXNwaW5fbG9ja19pcnFzYXZlKCZza2dlLT50eF9sb2NrLCBmbGFncyk7CisJZm9yIChlID0gc2tnZS0+dHhfcmluZy50b19jbGVhbjsgZSAhPSBza2dlLT50eF9yaW5nLnRvX3VzZTsgZSA9IGUtPm5leHQpIHsKKwkJc3RydWN0IHNrZ2VfdHhfZGVzYyAqdGQgPSBlLT5kZXNjOworCQlza2dlX3R4X2ZyZWUoc2tnZSwgZSwgdGQtPmNvbnRyb2wpOworCQl0ZC0+Y29udHJvbCA9IDA7CisJfQorCisJc2tnZS0+dHhfcmluZy50b19jbGVhbiA9IGU7CiAJbmV0aWZfd2FrZV9xdWV1ZShza2dlLT5uZXRkZXYpOwotCXNwaW5fdW5sb2NrX2JoKCZza2dlLT50eF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza2dlLT50eF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNrZ2VfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjY2NCwzMiArMjY3OSwyOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBza2dlX3R4X2RvbmUoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKKy8qIEZyZWUgYWxsIGJ1ZmZlcnMgaW4gVHggcmluZyB3aGljaCBhcmUgbm8gbG9uZ2VyIG93bmVkIGJ5IGRldmljZSAqLworc3RhdGljIHZvaWQgc2tnZV90eGlycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza2dlX3JpbmcgKnJpbmcgPSAmc2tnZS0+dHhfcmluZzsKLQlzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplLCAqbGFzdDsKKwlzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplOworCisJcm1iKCk7CiAKIAlzcGluX2xvY2soJnNrZ2UtPnR4X2xvY2spOwotCWxhc3QgPSByaW5nLT50b19jbGVhbjsKIAlmb3IgKGUgPSByaW5nLT50b19jbGVhbjsgZSAhPSByaW5nLT50b191c2U7IGUgPSBlLT5uZXh0KSB7CiAJCXN0cnVjdCBza2dlX3R4X2Rlc2MgKnRkID0gZS0+ZGVzYzsKIAogCQlpZiAodGQtPmNvbnRyb2wgJiBCTVVfT1dOKQogCQkJYnJlYWs7CiAKLQkJaWYgKHRkLT5jb250cm9sICYgQk1VX0VPRikgewotCQkJbGFzdCA9IGUtPm5leHQ7Ci0JCQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X2RvbmUoc2tnZSkpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHR4IGRvbmUgc2xvdCAldGRcbiIsCi0JCQkJICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgZSAtIHJpbmctPnN0YXJ0KTsKLQkJfQorCQlza2dlX3R4X2ZyZWUoc2tnZSwgZSwgdGQtPmNvbnRyb2wpOwogCX0KKwlza2dlLT50eF9yaW5nLnRvX2NsZWFuID0gZTsKIAotCXNrZ2VfdHhfY29tcGxldGUoc2tnZSwgbGFzdCk7Ci0KLQlza2dlX3dyaXRlOChza2dlLT5odywgUV9BRERSKHR4cWFkZHJbc2tnZS0+cG9ydF0sIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKLQotCWlmIChza2dlX2F2YWlsKCZza2dlLT50eF9yaW5nKSA+IE1BWF9TS0JfRlJBR1MgKyAxKQorCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHNrZ2UtPm5ldGRldikKKwkgICAgJiYgc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPiBUWF9MT1dfV0FURVIpCiAJCW5ldGlmX3dha2VfcXVldWUoc2tnZS0+bmV0ZGV2KTsKIAogCXNwaW5fdW5sb2NrKCZza2dlLT50eF9sb2NrKTsKQEAgLTI3MDQsOCArMjcxNSw2IEBACiAJaW50IHRvX2RvID0gbWluKGRldi0+cXVvdGEsICpidWRnZXQpOwogCWludCB3b3JrX2RvbmUgPSAwOwogCi0Jc2tnZV90eF9kb25lKHNrZ2UpOwotCiAJZm9yIChlID0gcmluZy0+dG9fY2xlYW47IHByZWZldGNoKGUtPm5leHQpLCB3b3JrX2RvbmUgPCB0b19kbzsgZSA9IGUtPm5leHQpIHsKIAkJc3RydWN0IHNrZ2VfcnhfZGVzYyAqcmQgPSBlLT5kZXNjOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMjczNywxMCArMjc0NiwxMiBAQAogCQlyZXR1cm4gMTsgLyogbm90IGRvbmUgKi8KIAogCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7Ci0JbW1pb3diKCk7CiAKLSAgCWh3LT5pbnRyX21hc2sgfD0gc2tnZS0+cG9ydCA9PSAwID8gKElTX1IxX0Z8SVNfWEExX0YpIDogKElTX1IyX0Z8SVNfWEEyX0YpOworCXNwaW5fbG9ja19pcnEoJmh3LT5od19sb2NrKTsKKwlody0+aW50cl9tYXNrIHw9IHJ4aXJxbWFza1tza2dlLT5wb3J0XTsKICAgCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CisJbW1pb3diKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZody0+aHdfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NDcsMTYgKzI4NTgsMTYgQEAKIH0KIAogLyoKLSAqIEludGVycnVwdCBmcm9tIFBIWSBhcmUgaGFuZGxlZCBpbiB0YXNrbGV0IChzb2Z0IGlycSkKKyAqIEludGVycnVwdCBmcm9tIFBIWSBhcmUgaGFuZGxlZCBpbiB3b3JrIHF1ZXVlCiAgKiBiZWNhdXNlIGFjY2Vzc2luZyBwaHkgcmVnaXN0ZXJzIHJlcXVpcmVzIHNwaW4gd2FpdCB3aGljaCBtaWdodAogICogY2F1c2UgZXhjZXNzIGludGVycnVwdCBsYXRlbmN5LgogICovCi1zdGF0aWMgdm9pZCBza2dlX2V4dGlycSh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBza2dlX2V4dGlycSh2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHNrZ2VfaHcgKmh3ID0gKHN0cnVjdCBza2dlX2h3ICopIGRhdGE7CisJc3RydWN0IHNrZ2VfaHcgKmh3ID0gYXJnOwogCWludCBwb3J0OwogCi0Jc3Bpbl9sb2NrKCZody0+cGh5X2xvY2spOworCW11dGV4X2xvY2soJmh3LT5waHlfbXV0ZXgpOwogCWZvciAocG9ydCA9IDA7IHBvcnQgPCBody0+cG9ydHM7IHBvcnQrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltwb3J0XTsKIAkJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yODY4LDEwICsyODc5LDEyIEBACiAJCQkJYmNvbV9waHlfaW50cihza2dlKTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmaHctPnBoeV9sb2NrKTsKKwltdXRleF91bmxvY2soJmh3LT5waHlfbXV0ZXgpOwogCisJc3Bpbl9sb2NrX2lycSgmaHctPmh3X2xvY2spOwogCWh3LT5pbnRyX21hc2sgfD0gSVNfRVhUX1JFRzsKIAlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOworCXNwaW5fdW5sb2NrX2lycSgmaHctPmh3X2xvY2spOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2tnZV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0yODg0LDU0ICsyODk3LDY4IEBACiAJaWYgKHN0YXR1cyA9PSAwKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKKwlzcGluX2xvY2soJmh3LT5od19sb2NrKTsKKwlzdGF0dXMgJj0gaHctPmludHJfbWFzazsKIAlpZiAoc3RhdHVzICYgSVNfRVhUX1JFRykgewogCQlody0+aW50cl9tYXNrICY9IH5JU19FWFRfUkVHOwotCQl0YXNrbGV0X3NjaGVkdWxlKCZody0+ZXh0X3Rhc2tsZXQpOworCQlzY2hlZHVsZV93b3JrKCZody0+cGh5X3dvcmspOwogCX0KIAotCWlmIChzdGF0dXMgJiAoSVNfUjFfRnxJU19YQTFfRikpIHsKKwlpZiAoc3RhdHVzICYgSVNfWEExX0YpIHsKKwkJc2tnZV93cml0ZTgoaHcsIFFfQUREUihRX1hBMSwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOworCQlza2dlX3R4aXJxKGh3LT5kZXZbMF0pOworCX0KKworCWlmIChzdGF0dXMgJiBJU19SMV9GKSB7CiAJCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIoUV9SMSwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOwotCQlody0+aW50cl9tYXNrICY9IH4oSVNfUjFfRnxJU19YQTFfRik7CisJCWh3LT5pbnRyX21hc2sgJj0gfklTX1IxX0Y7CiAJCW5ldGlmX3J4X3NjaGVkdWxlKGh3LT5kZXZbMF0pOwogCX0KIAotCWlmIChzdGF0dXMgJiAoSVNfUjJfRnxJU19YQTJfRikpIHsKLQkJc2tnZV93cml0ZTgoaHcsIFFfQUREUihRX1IyLCBRX0NTUiksIENTUl9JUlFfQ0xfRik7Ci0JCWh3LT5pbnRyX21hc2sgJj0gfihJU19SMl9GfElTX1hBMl9GKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoaHctPmRldlsxXSk7Ci0JfQotCi0JaWYgKGxpa2VseSgoc3RhdHVzICYgaHctPmludHJfbWFzaykgPT0gMCkpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQotCWlmIChzdGF0dXMgJiBJU19QQV9UT19SWDEpIHsKLQkJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGh3LT5kZXZbMF0pOwotCQkrK3NrZ2UtPm5ldF9zdGF0cy5yeF9vdmVyX2Vycm9yczsKLQkJc2tnZV93cml0ZTE2KGh3LCBCM19QQV9DVFJMLCBQQV9DTFJfVE9fUlgxKTsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgSVNfUEFfVE9fUlgyKSB7Ci0JCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2WzFdKTsKLQkJKytza2dlLT5uZXRfc3RhdHMucnhfb3Zlcl9lcnJvcnM7Ci0JCXNrZ2Vfd3JpdGUxNihodywgQjNfUEFfQ1RSTCwgUEFfQ0xSX1RPX1JYMik7Ci0JfQotCiAJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1RYMSkKIAkJc2tnZV93cml0ZTE2KGh3LCBCM19QQV9DVFJMLCBQQV9DTFJfVE9fVFgxKTsKIAotCWlmIChzdGF0dXMgJiBJU19QQV9UT19UWDIpCi0JCXNrZ2Vfd3JpdGUxNihodywgQjNfUEFfQ1RSTCwgUEFfQ0xSX1RPX1RYMik7CisJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1JYMSkgeworCQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoaHctPmRldlswXSk7CisKKwkJKytza2dlLT5uZXRfc3RhdHMucnhfb3Zlcl9lcnJvcnM7CisJCXNrZ2Vfd3JpdGUxNihodywgQjNfUEFfQ1RSTCwgUEFfQ0xSX1RPX1JYMSk7CisJfQorCiAKIAlpZiAoc3RhdHVzICYgSVNfTUFDMSkKIAkJc2tnZV9tYWNfaW50cihodywgMCk7CiAKLQlpZiAoc3RhdHVzICYgSVNfTUFDMikKLQkJc2tnZV9tYWNfaW50cihodywgMSk7CisJaWYgKGh3LT5kZXZbMV0pIHsKKwkJaWYgKHN0YXR1cyAmIElTX1hBMl9GKSB7CisJCQlza2dlX3dyaXRlOChodywgUV9BRERSKFFfWEEyLCBRX0NTUiksIENTUl9JUlFfQ0xfRik7CisJCQlza2dlX3R4aXJxKGh3LT5kZXZbMV0pOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIElTX1IyX0YpIHsKKwkJCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIoUV9SMiwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOworCQkJaHctPmludHJfbWFzayAmPSB+SVNfUjJfRjsKKwkJCW5ldGlmX3J4X3NjaGVkdWxlKGh3LT5kZXZbMV0pOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1JYMikgeworCQkJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGh3LT5kZXZbMV0pOworCQkJKytza2dlLT5uZXRfc3RhdHMucnhfb3Zlcl9lcnJvcnM7CisJCQlza2dlX3dyaXRlMTYoaHcsIEIzX1BBX0NUUkwsIFBBX0NMUl9UT19SWDIpOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1RYMikKKwkJCXNrZ2Vfd3JpdGUxNihodywgQjNfUEFfQ1RSTCwgUEFfQ0xSX1RPX1RYMik7CisKKwkJaWYgKHN0YXR1cyAmIElTX01BQzIpCisJCQlza2dlX21hY19pbnRyKGh3LCAxKTsKKwl9CiAKIAlpZiAoc3RhdHVzICYgSVNfSFdfRVJSKQogCQlza2dlX2Vycm9yX2lycShodyk7CiAKIAlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOworCXNwaW5fdW5sb2NrKCZody0+aHdfbG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yOTU3LDcgKzI5ODQsNyBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0Jc3Bpbl9sb2NrX2JoKCZody0+cGh5X2xvY2spOworCW11dGV4X2xvY2soJmh3LT5waHlfbXV0ZXgpOwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAJbWVtY3B5X3RvaW8oaHctPnJlZ3MgKyBCMl9NQUNfMSArIHBvcnQqOCwKIAkJICAgIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKQEAgLTI5NzAsNyArMjk5Nyw3IEBACiAJCWdtYV9zZXRfYWRkcihodywgcG9ydCwgR01fU1JDX0FERFJfMUwsIGRldi0+ZGV2X2FkZHIpOwogCQlnbWFfc2V0X2FkZHIoaHcsIHBvcnQsIEdNX1NSQ19BRERSXzJMLCBkZXYtPmRldl9hZGRyKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzA4Miw2ICszMTA5LDcgQEAKIAllbHNlCiAJCWh3LT5yYW1fc2l6ZSA9IHQ4ICogNDA5NjsKIAorCXNwaW5fbG9ja19pbml0KCZody0+aHdfbG9jayk7CiAJaHctPmludHJfbWFzayA9IElTX0hXX0VSUiB8IElTX0VYVF9SRUcgfCBJU19QT1JUXzE7CiAJaWYgKGh3LT5wb3J0cyA+IDEpCiAJCWh3LT5pbnRyX21hc2sgfD0gSVNfUE9SVF8yOwpAQCAtMzE1MCwxNCArMzE3OCwxNCBAQAogCiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKIAotCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwltdXRleF9sb2NrKCZody0+cGh5X211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKIAkJCWdlbmVzaXNfcmVzZXQoaHcsIGkpOwogCQllbHNlCiAJCQl5dWtvbl9yZXNldChodywgaSk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZody0+cGh5X2xvY2spOworCW11dGV4X3VubG9jaygmaHctPnBoeV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzMDUsOCArMzMzMyw4IEBACiAJfQogCiAJaHctPnBkZXYgPSBwZGV2OwotCXNwaW5fbG9ja19pbml0KCZody0+cGh5X2xvY2spOwotCXRhc2tsZXRfaW5pdCgmaHctPmV4dF90YXNrbGV0LCBza2dlX2V4dGlycSwgKHVuc2lnbmVkIGxvbmcpIGh3KTsKKwltdXRleF9pbml0KCZody0+cGh5X211dGV4KTsKKwlJTklUX1dPUksoJmh3LT5waHlfd29yaywgc2tnZV9leHRpcnEsIGh3KTsKIAogCWh3LT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgMHg0MDAwKTsKIAlpZiAoIWh3LT5yZWdzKSB7CkBAIC0zMzM0LDYgKzMzNjIsMTQgQEAKIAlpZiAoKGRldiA9IHNrZ2VfZGV2aW5pdChodywgMCwgdXNpbmdfZGFjKSkgPT0gTlVMTCkKIAkJZ290byBlcnJfb3V0X2xlZF9vZmY7CiAKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGJhZCAoemVybz8pIGV0aGVybmV0IGFkZHJlc3MgaW4gcm9tXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CisJfQorCisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIiwKQEAgLTMzODgsMTEgKzM0MjQsMTUgQEAKIAlkZXYwID0gaHctPmRldlswXTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYwKTsKIAorCXNwaW5fbG9ja19pcnEoJmh3LT5od19sb2NrKTsKKwlody0+aW50cl9tYXNrID0gMDsKIAlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOworCXNwaW5fdW5sb2NrX2lycSgmaHctPmh3X2xvY2spOworCiAJc2tnZV93cml0ZTE2KGh3LCBCMF9MRUQsIExFRF9TVEFUX09GRik7CiAJc2tnZV93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1JTVF9TRVQpOwogCi0JdGFza2xldF9raWxsKCZody0+ZXh0X3Rhc2tsZXQpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlmcmVlX2lycShwZGV2LT5pcnEsIGh3KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5oIGIvZHJpdmVycy9uZXQvc2tnZS5oCmluZGV4IDFmMWNlODguLmVkMTlmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuaAorKysgYi9kcml2ZXJzL25ldC9za2dlLmgKQEAgLTIzODgsNiArMjM4OCw3IEBACiBzdHJ1Y3Qgc2tnZV9odyB7CiAJdm9pZCBfX2lvbWVtICAJICAgICAqcmVnczsKIAlzdHJ1Y3QgcGNpX2RldgkgICAgICpwZGV2OworCXNwaW5sb2NrX3QJICAgICBod19sb2NrOwogCXUzMgkJICAgICBpbnRyX21hc2s7CiAJc3RydWN0IG5ldF9kZXZpY2UgICAgKmRldlsyXTsKIApAQCAtMjM5OSw5ICsyNDAwLDggQEAKIAl1MzIJICAgICAJICAgICByYW1fc2l6ZTsKIAl1MzIJICAgICAJICAgICByYW1fb2Zmc2V0OwogCXUxNgkJICAgICBwaHlfYWRkcjsKLQotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBleHRfdGFza2xldDsKLQlzcGlubG9ja190CSAgICAgcGh5X2xvY2s7CisJc3RydWN0IHdvcmtfc3RydWN0ICAgcGh5X3dvcms7CisJc3RydWN0IG11dGV4CSAgICAgcGh5X211dGV4OwogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggOTU5MTA5Ni4uZmJhMWU0ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTE4NywxMiArMTg3LDExIEBACiAJcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBpbnQgc2t5Ml9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHNreTJfaHcgKmh3LCBwY2lfcG93ZXJfdCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNreTJfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBza3kyX2h3ICpodywgcGNpX3Bvd2VyX3Qgc3RhdGUpCiB7CiAJdTE2IHBvd2VyX2NvbnRyb2w7CiAJdTMyIHJlZzE7CiAJaW50IHZhdXg7Ci0JaW50IHJldCA9IDA7CiAKIAlwcl9kZWJ1Zygic2t5Ml9zZXRfcG93ZXJfc3RhdGUgJWRcbiIsIHN0YXRlKTsKIAlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKQEAgLTI3NSwxMiArMjc0LDEwIEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlVua25vd24gcG93ZXIgc3RhdGUgJWRcbiIsIHN0YXRlKTsKLQkJcmV0ID0gLTE7CiAJfQogCiAJc2t5Ml9wY2lfd3JpdGUxNihodywgaHctPnBtX2NhcCArIFBDSV9QTV9DVFJMLCBwb3dlcl9jb250cm9sKTsKIAlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9waHlfcmVzZXQoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0KQpAQCAtMjE2NCw2ICsyMTYxLDEzIEBACiAvKiBJZiBpZGxlIHRoZW4gZm9yY2UgYSBmYWtlIHNvZnQgTkFQSSBwb2xsIG9uY2UgYSBzZWNvbmQKICAqIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIHNoYXJpbmcgYW4gZWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0LgogICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml9pZGxlX3N0YXJ0KHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwlpZiAoaWRsZV90aW1lb3V0ID4gMCkKKwkJbW9kX3RpbWVyKCZody0+aWRsZV90aW1lciwKKwkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaWRsZV90aW1lb3V0KSk7Cit9CisKIHN0YXRpYyB2b2lkIHNreTJfaWRsZSh1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSAoc3RydWN0IHNreTJfaHcgKikgYXJnOwpAQCAtMjE4Myw2ICsyMTg3LDkgQEAKIAlpbnQgd29ya19kb25lID0gMDsKIAl1MzIgc3RhdHVzID0gc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0VJU1IpOwogCisJaWYgKCF+c3RhdHVzKQorCQlnb3RvIG91dDsKKwogCWlmIChzdGF0dXMgJiBZMl9JU19IV19FUlIpCiAJCXNreTJfaHdfaW50cihodyk7CiAKQEAgLTIyMTksNyArMjIyNiw3IEBACiAKIAlpZiAoc2t5Ml9tb3JlX3dvcmsoaHcpKQogCQlyZXR1cm4gMTsKLQorb3V0OgogCW5ldGlmX3J4X2NvbXBsZXRlKGRldjApOwogCiAJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwpAQCAtMjI0OCw4ICsyMjU1LDEwIEBACiBzdGF0aWMgdm9pZCBza3kyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2MCA9IHNreTItPmh3LT5kZXZbMF07CiAKLQlza3kyX2ludHIoc2t5Mi0+aHctPnBkZXYtPmlycSwgc2t5Mi0+aHcsIE5VTEwpOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikgJiYgX19uZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldjApKQorCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldjApOwogfQogI2VuZGlmCiAKQEAgLTMzNTAsOSArMzM1OSw3IEBACiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBZMl9JU19CQVNFKTsKIAogCXNldHVwX3RpbWVyKCZody0+aWRsZV90aW1lciwgc2t5Ml9pZGxlLCAodW5zaWduZWQgbG9uZykgaHcpOwotCWlmIChpZGxlX3RpbWVvdXQgPiAwKQotCQltb2RfdGltZXIoJmh3LT5pZGxlX3RpbWVyLAotCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpZGxlX3RpbWVvdXQpKTsKKwlza3kyX2lkbGVfc3RhcnQoaHcpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKIApAQCAtMzQyNSw4ICszNDMyLDE0IEBACiB7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpOworCXBjaV9wb3dlcl90IHBzdGF0ZSA9IHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCWlmICghKHBzdGF0ZSA9PSBQQ0lfRDNob3QgfHwgcHN0YXRlID09IFBDSV9EM2NvbGQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlbF90aW1lcl9zeW5jKCZody0+aWRsZV90aW1lcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CiAKIAkJaWYgKGRldikgewpAQCAtMzQzNSwxMCArMzQ0OCwxNCBAQAogCiAJCQlza3kyX2Rvd24oZGV2KTsKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwkJCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOwogCQl9CiAJfQogCi0JcmV0dXJuIHNreTJfc2V0X3Bvd2VyX3N0YXRlKGh3LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlza3kyX3NldF9wb3dlcl9zdGF0ZShodywgcHN0YXRlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBza3kyX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTM0NDgsMjcgKzM0NjUsMzEgQEAKIAogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOwotCWVyciA9IHNreTJfc2V0X3Bvd2VyX3N0YXRlKGh3LCBQQ0lfRDApOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCXNreTJfc2V0X3Bvd2VyX3N0YXRlKGh3LCBQQ0lfRDApOwogCiAJZXJyID0gc2t5Ml9yZXNldChodyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBZMl9JU19CQVNFKTsKKworCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltpXTsKIAkJaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJCW5ldGlmX3BvbGxfZW5hYmxlKGRldik7CisKIAkJCWVyciA9IHNreTJfdXAoZGV2KTsKIAkJCWlmIChlcnIpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY291bGQgbm90IHVwOiAlZFxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwogCQkJCWRldl9jbG9zZShkZXYpOwotCQkJCWJyZWFrOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAJfQorCisJc2t5Ml9pZGxlX3N0YXJ0KGh3KTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYwppbmRleCAzZGIzMGNkLi41YjRlODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYworKysgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYwpAQCAtNTUzLDcgKzU1Myw3IEBACiAKIC8qIFRoaXMgaXMgc2V0IHVwIHNvIHRoYXQgb25seSBhIHNpbmdsZSBhdXRvcHJvYmUgdGFrZXMgcGxhY2UgcGVyIGNhbGwuCiBJU0EgZGV2aWNlIGF1dG9wcm9iZXMgb24gYSBydW5uaW5nIG1hY2hpbmUgYXJlIG5vdCByZWNvbW1lbmRlZC4gKi8KLWludAoraW50IF9faW5pdAogaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMKaW5kZXggYjNlMzk3ZC4uZmY5YmQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYworKysgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jCkBAIC00MjEsNyArNDIxLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU01DIFVsdHJhMzIgRUlTQSBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ4NzAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCkBAIC0wLDAgKzEsMjMwNyBAQAorLyoKKyAqIHNtYzkxMXguYworICogVGhpcyBpcyBhIGRyaXZlciBmb3IgU01TQydzIExBTjkxMXs1LDYsNyw4fSBzaW5nbGUtY2hpcCBFdGhlcm5ldCBkZXZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBTZW5zb3JpYSBDb3JwCisgKgkgICBEZXJpdmVkIGZyb20gdGhlIHVuaWZpZWQgU01DOTF4IGRyaXZlciBieSBOaWNvbGFzIFBpdHJlCisgKgkgICBhbmQgdGhlIHNtc2M5MTF4LmMgcmVmZXJlbmNlIGRyaXZlciBieSBTTVNDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIEFyZ3VtZW50czoKKyAqCSB3YXRjaGRvZyAgPSBUWCB3YXRjaGRvZyB0aW1lb3V0CisgKgkgdHhfZmlmb19rYiA9IFNpemUgb2YgVFggRklGTyBpbiBLQgorICoKKyAqIEhpc3Rvcnk6CisgKgkgIDA0LzE2LzA1CUR1c3RpbiBNY0ludGlyZQkJIEluaXRpYWwgdmVyc2lvbgorICovCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPQorCSAic21jOTExeC5jOiB2MS4wIDA0LTE2LTIwMDUgYnkgRHVzdGluIE1jSW50aXJlIDxkdXN0aW5Ac2Vuc29yaWEuY29tPlxuIjsKKworLyogRGVidWdnaW5nIG9wdGlvbnMgKi8KKyNkZWZpbmUgRU5BQkxFX1NNQ19ERUJVR19SWAkJMAorI2RlZmluZSBFTkFCTEVfU01DX0RFQlVHX1RYCQkwCisjZGVmaW5lIEVOQUJMRV9TTUNfREVCVUdfRE1BCQkwCisjZGVmaW5lIEVOQUJMRV9TTUNfREVCVUdfUEtUUwkJMAorI2RlZmluZSBFTkFCTEVfU01DX0RFQlVHX01JU0MJCTAKKyNkZWZpbmUgRU5BQkxFX1NNQ19ERUJVR19GVU5DCQkwCisKKyNkZWZpbmUgU01DX0RFQlVHX1JYCQkoKEVOQUJMRV9TTUNfREVCVUdfUlgJPyAxIDogMCkgPDwgMCkKKyNkZWZpbmUgU01DX0RFQlVHX1RYCQkoKEVOQUJMRV9TTUNfREVCVUdfVFgJPyAxIDogMCkgPDwgMSkKKyNkZWZpbmUgU01DX0RFQlVHX0RNQQkJKChFTkFCTEVfU01DX0RFQlVHX0RNQQk/IDEgOiAwKSA8PCAyKQorI2RlZmluZSBTTUNfREVCVUdfUEtUUwkJKChFTkFCTEVfU01DX0RFQlVHX1BLVFMgPyAxIDogMCkgPDwgMykKKyNkZWZpbmUgU01DX0RFQlVHX01JU0MJCSgoRU5BQkxFX1NNQ19ERUJVR19NSVNDID8gMSA6IDApIDw8IDQpCisjZGVmaW5lIFNNQ19ERUJVR19GVU5DCQkoKEVOQUJMRV9TTUNfREVCVUdfRlVOQyA/IDEgOiAwKSA8PCA1KQorCisjaWZuZGVmIFNNQ19ERUJVRworI2RlZmluZSBTTUNfREVCVUcJICggU01DX0RFQlVHX1JYCSAgfCBcCisJCQkgICBTTUNfREVCVUdfVFgJICB8IFwKKwkJCSAgIFNNQ19ERUJVR19ETUEgIHwgXAorCQkJICAgU01DX0RFQlVHX1BLVFMgfCBcCisJCQkgICBTTUNfREVCVUdfTUlTQyB8IFwKKwkJCSAgIFNNQ19ERUJVR19GVU5DICAgXAorCQkJICkKKyNlbmRpZgorCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSAic21jOTExeC5oIgorCisvKgorICogVHJhbnNtaXQgdGltZW91dCwgZGVmYXVsdCA1IHNlY29uZHMuCisgKi8KK3N0YXRpYyBpbnQgd2F0Y2hkb2cgPSA1MDAwOworbW9kdWxlX3BhcmFtKHdhdGNoZG9nLCBpbnQsIDA0MDApOworTU9EVUxFX1BBUk1fREVTQyh3YXRjaGRvZywgInRyYW5zbWl0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIik7CisKK3N0YXRpYyBpbnQgdHhfZmlmb19rYj04OworbW9kdWxlX3BhcmFtKHR4X2ZpZm9fa2IsIGludCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHR4X2ZpZm9fa2IsInRyYW5zbWl0IEZJRk8gc2l6ZSBpbiBLQiAoMTx4PDE1KShkZWZhdWx0PTgpIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiB0aGUgZHJpdmVyLiAgSWYgeW91IGFyZSBjaGFuZ2luZyBhbnl0aGluZworICogaGVyZSB3aXRoIHRoZSBTTUMgc3R1ZmYsIHlvdSBzaG91bGQgaGF2ZSB0aGUgZGF0YXNoZWV0IGFuZCBrbm93CisgKiB3aGF0IHlvdSBhcmUgZG9pbmcuCisgKi8KKyNkZWZpbmUgQ0FSRE5BTUUgInNtYzkxMXgiCisKKy8qCisgKiBVc2UgcG93ZXItZG93biBmZWF0dXJlIG9mIHRoZSBjaGlwCisgKi8KKyNkZWZpbmUgUE9XRVJfRE9XTgkJIDEKKworCisvKiBzdG9yZSB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgZHJpdmVyLi4gKi8KK3N0cnVjdCBzbWM5MTF4X2xvY2FsIHsKKwkvKgorCSAqIElmIEkgaGF2ZSB0byB3YWl0IHVudGlsIHRoZSBETUEgaXMgZmluaXNoZWQgYW5kIHJlYWR5IHRvIHJlbG9hZCBhCisJICogcGFja2V0LCBJIHdpbGwgc3RvcmUgdGhlIHNrYnVmZiBoZXJlLiBUaGVuLCB0aGUgRE1BIHdpbGwgc2VuZCBpdAorCSAqIG91dCBhbmQgZnJlZSBpdC4KKwkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqcGVuZGluZ190eF9za2I7CisKKwkvKgorCSAqIHRoZXNlIGFyZSB0aGluZ3MgdGhhdCB0aGUga2VybmVsIHdhbnRzIG1lIHRvIGtlZXAsIHNvIHVzZXJzCisJICogY2FuIGZpbmQgb3V0IHNlbWktdXNlbGVzcyBzdGF0aXN0aWNzIG9mIGhvdyB3ZWxsIHRoZSBjYXJkIGlzCisJICogcGVyZm9ybWluZworCSAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCisJLyogdmVyc2lvbi9yZXZpc2lvbiBvZiB0aGUgU01DOTExeCBjaGlwICovCisJdTE2IHZlcnNpb247CisJdTE2IHJldmlzaW9uOworCisJLyogRklGTyBzaXplcyAqLworCWludCB0eF9maWZvX2tiOworCWludCB0eF9maWZvX3NpemU7CisJaW50IHJ4X2ZpZm9fc2l6ZTsKKwlpbnQgYWZjX2NmZzsKKworCS8qIENvbnRhaW5zIHRoZSBjdXJyZW50IGFjdGl2ZSByZWNlaXZlL3BoeSBtb2RlICovCisJaW50IGN0bF9yZmR1cGx4OworCWludCBjdGxfcnNwZWVkOworCisJdTMyIG1zZ19lbmFibGU7CisJdTMyIHBoeV90eXBlOworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWk7CisKKwkvKiB3b3JrIHF1ZXVlICovCisJc3RydWN0IHdvcmtfc3RydWN0IHBoeV9jb25maWd1cmU7CisJaW50IHdvcmtfcGVuZGluZzsKKworCWludCB0eF90aHJvdHRsZTsKKwlzcGlubG9ja190IGxvY2s7CisKKyNpZmRlZiBTTUNfVVNFX0RNQQorCS8qIERNQSBuZWVkcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2hpcCAqLworCXVfbG9uZyBwaHlzYWRkcjsKKwlpbnQgcnhkbWE7CisJaW50IHR4ZG1hOworCWludCByeGRtYV9hY3RpdmU7CisJaW50IHR4ZG1hX2FjdGl2ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9yeF9za2I7CisJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfdHhfc2tiOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKyNlbmRpZgorfTsKKworI2lmIFNNQ19ERUJVRyA+IDAKKyNkZWZpbmUgREJHKG4sIGFyZ3MuLi4pCQkJCSBcCisJZG8gewkJCQkJIFwKKwkJaWYgKFNNQ19ERUJVRyAmIChuKSkJCSBcCisJCQlwcmludGsoYXJncyk7CQkgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgUFJJTlRLKGFyZ3MuLi4pICAgcHJpbnRrKGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcobiwgYXJncy4uLikgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBSSU5USyhhcmdzLi4uKSAgIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCisjZW5kaWYKKworI2lmIFNNQ19ERUJVR19QS1RTID4gMAorc3RhdGljIHZvaWQgUFJJTlRfUEtUKHVfY2hhciAqYnVmLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCWludCByZW1haW5kZXI7CisJaW50IGxpbmVzOworCisJbGluZXMgPSBsZW5ndGggLyAxNjsKKwlyZW1haW5kZXIgPSBsZW5ndGggJSAxNjsKKworCWZvciAoaSA9IDA7IGkgPCBsaW5lcyA7IGkgKyspIHsKKwkJaW50IGN1cjsKKwkJZm9yIChjdXIgPSAwOyBjdXIgPCA4OyBjdXIrKykgeworCQkJdV9jaGFyIGEsIGI7CisJCQlhID0gKmJ1ZisrOworCQkJYiA9ICpidWYrKzsKKwkJCXByaW50aygiJTAyeCUwMnggIiwgYSwgYik7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVtYWluZGVyLzIgOyBpKyspIHsKKwkJdV9jaGFyIGEsIGI7CisJCWEgPSAqYnVmKys7CisJCWIgPSAqYnVmKys7CisJCXByaW50aygiJTAyeCUwMnggIiwgYSwgYik7CisJfQorCXByaW50aygiXG4iKTsKK30KKyNlbHNlCisjZGVmaW5lIFBSSU5UX1BLVCh4Li4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKworLyogdGhpcyBlbmFibGVzIGFuIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU01DX0VOQUJMRV9JTlQoeCkgZG8gewkJCQlcCisJdW5zaWduZWQgaW50ICBfX21hc2s7CQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIF9fZmxhZ3MpOwkJXAorCV9fbWFzayA9IFNNQ19HRVRfSU5UX0VOKCk7CQkJXAorCV9fbWFzayB8PSAoeCk7CQkJCQlcCisJU01DX1NFVF9JTlRfRU4oX19tYXNrKTsJCQkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJXAorfSB3aGlsZSAoMCkKKworLyogdGhpcyBkaXNhYmxlcyBhbiBpbnRlcnJ1cHQgZnJvbSB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU01DX0RJU0FCTEVfSU5UKHgpIGRvIHsJCQkJXAorCXVuc2lnbmVkIGludCAgX19tYXNrOwkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJCVwKKwlfX21hc2sgPSBTTUNfR0VUX0lOVF9FTigpOwkJCVwKKwlfX21hc2sgJj0gfih4KTsJCQkJCVwKKwlTTUNfU0VUX0lOVF9FTihfX21hc2spOwkJCQlcCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIF9fZmxhZ3MpOwlcCit9IHdoaWxlICgwKQorCisvKgorICogdGhpcyBkb2VzIGEgc29mdCByZXNldCBvbiB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIHNtYzkxMXhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IHJlZywgdGltZW91dD0wLCByZXNldHM9MTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJLyoJIFRha2Ugb3V0IG9mIFBNIHNldHRpbmcgZmlyc3QgKi8KKwlpZiAoKFNNQ19HRVRfUE1UX0NUUkwoKSAmIFBNVF9DVFJMX1JFQURZXykgPT0gMCkgeworCQkvKiBXcml0ZSB0byB0aGUgYnl0ZXRlc3Qgd2lsbCB0YWtlIG91dCBvZiBwb3dlcmRvd24gKi8KKwkJU01DX1NFVF9CWVRFX1RFU1QoMCk7CisJCXRpbWVvdXQ9MTA7CisJCWRvIHsKKwkJCXVkZWxheSgxMCk7CisJCQlyZWcgPSBTTUNfR0VUX1BNVF9DVFJMKCkgJiBQTVRfQ1RSTF9SRUFEWV87CisJCX0gd2hpbGUgKCB0aW1lb3V0LS0gJiYgIXJlZyk7CisJCWlmICh0aW1lb3V0ID09IDApIHsKKwkJCVBSSU5USygiJXM6IHNtYzkxMXhfcmVzZXQgdGltZW91dCB3YWl0aW5nIGZvciBQTSByZXN0b3JlXG4iLCBkZXYtPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCVNNQ19TRVRfSU5UX0VOKDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAocmVzZXRzLS0pIHsKKwkJU01DX1NFVF9IV19DRkcoSFdfQ0ZHX1NSU1RfKTsKKwkJdGltZW91dD0xMDsKKwkJZG8geworCQkJdWRlbGF5KDEwKTsKKwkJCXJlZyA9IFNNQ19HRVRfSFdfQ0ZHKCk7CisJCQkvKiBJZiBjaGlwIGluZGljYXRlcyByZXNldCB0aW1lb3V0IHRoZW4gdHJ5IGFnYWluICovCisJCQlpZiAocmVnICYgSFdfQ0ZHX1NSU1RfVE9fKSB7CisJCQkJUFJJTlRLKCIlczogY2hpcCByZXNldCB0aW1lb3V0LCByZXRyeWluZy4uLlxuIiwgZGV2LT5uYW1lKTsKKwkJCQlyZXNldHMrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAoIHRpbWVvdXQtLSAmJiAocmVnICYgSFdfQ0ZHX1NSU1RfKSk7CisJfQorCWlmICh0aW1lb3V0ID09IDApIHsKKwkJUFJJTlRLKCIlczogc21jOTExeF9yZXNldCB0aW1lb3V0IHdhaXRpbmcgZm9yIHJlc2V0XG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJLyogbWFrZSBzdXJlIEVFUFJPTSBoYXMgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgc2V0dGluZyBHUElPX0NGRyAqLworCXRpbWVvdXQ9MTAwMDsKKwl3aGlsZSAoIHRpbWVvdXQtLSAmJiAoU01DX0dFVF9FMlBfQ01EKCkgJiBFMlBfQ01EX0VQQ19CVVNZXykpIHsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKHRpbWVvdXQgPT0gMCl7CisJCVBSSU5USygiJXM6IHNtYzkxMXhfcmVzZXQgdGltZW91dCB3YWl0aW5nIGZvciBFRVBST00gYnVzeVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEluaXRpYWxpemUgaW50ZXJydXB0cyAqLworCVNNQ19TRVRfSU5UX0VOKDApOworCVNNQ19BQ0tfSU5UKC0xKTsKKworCS8qIFJlc2V0IHRoZSBGSUZPIGxldmVsIGFuZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KKwlTTUNfU0VUX0hXX0NGRygobHAtPnR4X2ZpZm9fa2IgJiAweEYpIDw8IDE2KTsKKy8vVE9ETzogRmlndXJlIG91dCB3aGF0IGFwcHJvcHJpYXRlIHBhdXNlIHRpbWUgaXMKKwlTTUNfU0VUX0ZMT1coRkxPV19GQ1BUXyB8IEZMT1dfRkNFTl8pOworCVNNQ19TRVRfQUZDX0NGRyhscC0+YWZjX2NmZyk7CisKKworCS8qIFNldCB0byBMRUQgb3V0cHV0cyAqLworCVNNQ19TRVRfR1BJT19DRkcoMHg3MDA3MDAwMCk7CisKKwkvKgorCSAqIERlYXNzZXJ0IElSUSBmb3IgMSoxMHVzIGZvciBlZGdlIHR5cGUgaW50ZXJydXB0cworCSAqIGFuZCBkcml2ZSBJUlEgcGluIHB1c2gtcHVsbAorCSAqLworCVNNQ19TRVRfSVJRX0NGRyggKDEgPDwgMjQpIHwgSU5UX0NGR19JUlFfRU5fIHwgSU5UX0NGR19JUlFfVFlQRV8gKTsKKworCS8qIGNsZWFyIGFueXRoaW5nIHNhdmVkICovCisJaWYgKGxwLT5wZW5kaW5nX3R4X3NrYiAhPSBOVUxMKSB7CisJCWRldl9rZnJlZV9za2IgKGxwLT5wZW5kaW5nX3R4X3NrYik7CisJCWxwLT5wZW5kaW5nX3R4X3NrYiA9IE5VTEw7CisJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJfQorfQorCisvKgorICogRW5hYmxlIEludGVycnVwdHMsIFJlY2VpdmUsIGFuZCBUcmFuc21pdAorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBtYXNrLCBjZmcsIGNyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlTTUNfU0VUX01BQ19BRERSKGRldi0+ZGV2X2FkZHIpOworCisJLyogRW5hYmxlIFRYICovCisJY2ZnID0gU01DX0dFVF9IV19DRkcoKTsKKwljZmcgJj0gSFdfQ0ZHX1RYX0ZJRl9TWl8gfCAweEZGRjsKKwljZmcgfD0gSFdfQ0ZHX1NGXzsKKwlTTUNfU0VUX0hXX0NGRyhjZmcpOworCVNNQ19TRVRfRklGT19UREEoMHhGRik7CisJLyogVXBkYXRlIFRYIHN0YXRzIG9uIGV2ZXJ5IDY0IHBhY2tldHMgcmVjZWl2ZWQgb3IgZXZlcnkgMSBzZWMgKi8KKwlTTUNfU0VUX0ZJRk9fVFNMKDY0KTsKKwlTTUNfU0VUX0dQVF9DRkcoR1BUX0NGR19USU1FUl9FTl8gfCAxMDAwMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlTTUNfR0VUX01BQ19DUihjcik7CisJY3IgfD0gTUFDX0NSX1RYRU5fIHwgTUFDX0NSX0hCRElTXzsKKwlTTUNfU0VUX01BQ19DUihjcik7CisJU01DX1NFVF9UWF9DRkcoVFhfQ0ZHX1RYX09OXyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKworCS8qIEFkZCAyIGJ5dGUgcGFkZGluZyB0byBzdGFydCBvZiBwYWNrZXRzICovCisJU01DX1NFVF9SWF9DRkcoKDI8PDgpICYgUlhfQ0ZHX1JYRE9GRl8pOworCisJLyogVHVybiBvbiByZWNlaXZlciBhbmQgZW5hYmxlIFJYICovCisJaWYgKGNyICYgTUFDX0NSX1JYRU5fKQorCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJlY2VpdmVyIGFscmVhZHkgZW5hYmxlZFxuIiwgZGV2LT5uYW1lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCVNNQ19TRVRfTUFDX0NSKCBjciB8IE1BQ19DUl9SWEVOXyApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBJbnRlcnJ1cHQgb24gZXZlcnkgcmVjZWl2ZWQgcGFja2V0ICovCisJU01DX1NFVF9GSUZPX1JTQSgweDAxKTsKKwlTTUNfU0VUX0ZJRk9fUlNMKDB4MDApOworCisJLyogbm93LCBlbmFibGUgaW50ZXJydXB0cyAqLworCW1hc2sgPSBJTlRfRU5fVERGQV9FTl8gfCBJTlRfRU5fVFNGTF9FTl8gfCBJTlRfRU5fUlNGTF9FTl8gfAorCQlJTlRfRU5fR1BUX0lOVF9FTl8gfCBJTlRfRU5fUlhERkhfSU5UX0VOXyB8IElOVF9FTl9SWEVfRU5fIHwKKwkJSU5UX0VOX1BIWV9JTlRfRU5fOworCWlmIChJU19SRVZfQShscC0+cmV2aXNpb24pKQorCQltYXNrfD1JTlRfRU5fUkRGTF9FTl87CisJZWxzZSB7CisJCW1hc2t8PUlOVF9FTl9SREZPX0VOXzsKKwl9CisJU01DX0VOQUJMRV9JTlQobWFzayk7Cit9CisKKy8qCisgKiB0aGlzIHB1dHMgdGhlIGRldmljZSBpbiBhbiBpbmFjdGl2ZSBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGNyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBDQVJETkFNRSwgX19GVU5DVElPTl9fKTsKKworCS8qIERpc2FibGUgSVJRJ3MgKi8KKwlTTUNfU0VUX0lOVF9FTigwKTsKKworCS8qIFR1cm4gb2YgUnggYW5kIFRYICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJU01DX0dFVF9NQUNfQ1IoY3IpOworCWNyICY9IH4oTUFDX0NSX1RYRU5fIHwgTUFDX0NSX1JYRU5fIHwgTUFDX0NSX0hCRElTXyk7CisJU01DX1NFVF9NQUNfQ1IoY3IpOworCVNNQ19TRVRfVFhfQ0ZHKFRYX0NGR19TVE9QX1RYXyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtYzkxMXhfZHJvcF9wa3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBmaWZvX2NvdW50LCB0aW1lb3V0LCByZWc7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMgfCBTTUNfREVCVUdfUlgsICIlczogLS0+ICVzXG4iLCBDQVJETkFNRSwgX19GVU5DVElPTl9fKTsKKwlmaWZvX2NvdW50ID0gU01DX0dFVF9SWF9GSUZPX0lORigpICYgMHhGRkZGOworCWlmIChmaWZvX2NvdW50IDw9IDQpIHsKKwkJLyogTWFudWFsbHkgZHVtcCB0aGUgcGFja2V0IGRhdGEgKi8KKwkJd2hpbGUgKGZpZm9fY291bnQtLSkKKwkJCVNNQ19HRVRfUlhfRklGTygpOworCX0gZWxzZQkgeworCQkvKiBGYXN0IGZvcndhcmQgdGhyb3VnaCB0aGUgYmFkIHBhY2tldCAqLworCQlTTUNfU0VUX1JYX0RQX0NUUkwoUlhfRFBfQ1RSTF9GRldEX0JVU1lfKTsKKwkJdGltZW91dD01MDsKKwkJZG8geworCQkJdWRlbGF5KDEwKTsKKwkJCXJlZyA9IFNNQ19HRVRfUlhfRFBfQ1RSTCgpICYgUlhfRFBfQ1RSTF9GRldEX0JVU1lfOworCQl9IHdoaWxlICggdGltZW91dC0tICYmIHJlZyk7CisJCWlmICh0aW1lb3V0ID09IDApIHsKKwkJCVBSSU5USygiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgUlggZmFzdCBmb3J3YXJkXG4iLCBkZXYtPm5hbWUpOworCQl9CisJfQorfQorCisvKgorICogVGhpcyBpcyB0aGUgcHJvY2VkdXJlIHRvIGhhbmRsZSB0aGUgcmVjZWlwdCBvZiBhIHBhY2tldC4KKyAqIEl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgY2hlY2tpbmcgZm9yIHBhY2tldCBwcmVzZW5jZSBpbgorICogdGhlIFJYIHN0YXR1cyBGSUZPLgkgSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc3BpbiBsb2NrCisgKiBhbHJlYWR5IGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAkgc21jOTExeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IHBrdF9sZW4sIHN0YXR1czsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMgfCBTTUNfREVCVUdfUlgsICIlczogLS0+ICVzXG4iLAorCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gU01DX0dFVF9SWF9TVFNfRklGTygpOworCURCRyhTTUNfREVCVUdfUlgsICIlczogUnggcGt0IGxlbiAlZCBzdGF0dXMgMHglMDh4IFxuIiwKKwkJZGV2LT5uYW1lLCAoc3RhdHVzICYgMHgzZmZmMDAwMCkgPj4gMTYsIHN0YXR1cyAmIDB4YzAwMGZmZmYpOworCXBrdF9sZW4gPSAoc3RhdHVzICYgUlhfU1RTX1BLVF9MRU5fKSA+PiAxNjsKKwlpZiAoc3RhdHVzICYgUlhfU1RTX0VTXykgeworCQkvKiBEZWFsIHdpdGggYSBiYWQgcGFja2V0ICovCisJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX1NUU19DUkNfRVJSXykKKwkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWVsc2UgeworCQkJaWYgKHN0YXR1cyAmIFJYX1NUU19MRU5fRVJSXykKKwkJCQlscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIFJYX1NUU19NQ0FTVF8pCisJCQkJbHAtPnN0YXRzLm11bHRpY2FzdCsrOworCQl9CisJCS8qIFJlbW92ZSB0aGUgYmFkIHBhY2tldCBkYXRhIGZyb20gdGhlIFJYIEZJRk8gKi8KKwkJc21jOTExeF9kcm9wX3BrdChkZXYpOworCX0gZWxzZSB7CisJCS8qIFJlY2VpdmUgYSB2YWxpZCBwYWNrZXQgKi8KKwkJLyogQWxsb2MgYSBidWZmZXIgd2l0aCBleHRyYSByb29tIGZvciBETUEgYWxpZ25tZW50ICovCisJCXNrYj1kZXZfYWxsb2Nfc2tiKHBrdF9sZW4rMzIpOworCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CisJCQlQUklOVEsoICIlczogTG93IG1lbW9yeSwgcmN2ZCBwYWNrZXQgZHJvcHBlZC5cbiIsCisJCQkJZGV2LT5uYW1lKTsKKwkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlzbWM5MTF4X2Ryb3BfcGt0KGRldik7CisJCQlyZXR1cm47CisJCX0KKwkJLyogQWxpZ24gSVAgaGVhZGVyIHRvIDMyIGJpdHMKKwkJICogTm90ZSB0aGF0IHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCB0byBhZGQgYSAyCisJCSAqIGJ5dGUgcGFkZGluZyB0byB0aGUgcGFja2V0IHN0YXJ0LCBzbyB3ZSByZWFsbHkKKwkJICogd2FudCB0byB3cml0ZSB0byB0aGUgb3JpZ25hbCBkYXRhIHBvaW50ZXIgKi8KKwkJZGF0YSA9IHNrYi0+ZGF0YTsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJc2tiX3B1dChza2IscGt0X2xlbi00KTsKKyNpZmRlZiBTTUNfVVNFX0RNQQorCQl7CisJCXVuc2lnbmVkIGludCBmaWZvOworCQkvKiBMb3dlciB0aGUgRklGTyB0aHJlc2hvbGQgaWYgcG9zc2libGUgKi8KKwkJZmlmbyA9IFNNQ19HRVRfRklGT19JTlQoKTsKKwkJaWYgKGZpZm8gJiAweEZGKSBmaWZvLS07CisJCURCRyhTTUNfREVCVUdfUlgsICIlczogU2V0dGluZyBSWCBzdGF0IEZJRk8gdGhyZXNob2xkIHRvICVkXG4iLAorCQkJZGV2LT5uYW1lLCBmaWZvICYgMHhmZik7CisJCVNNQ19TRVRfRklGT19JTlQoZmlmbyk7CisJCS8qIFNldHVwIFJYIERNQSAqLworCQlTTUNfU0VUX1JYX0NGRyhSWF9DRkdfUlhfRU5EX0FMR04xNl8gfCAoKDI8PDgpICYgUlhfQ0ZHX1JYRE9GRl8pKTsKKwkJbHAtPnJ4ZG1hX2FjdGl2ZSA9IDE7CisJCWxwLT5jdXJyZW50X3J4X3NrYiA9IHNrYjsKKwkJU01DX1BVTExfREFUQShkYXRhLCAocGt0X2xlbisyKzE1KSAmIH4xNSk7CisJCS8qIFBhY2tldCBwcm9jZXNzaW5nIGRlZmVycmVkIHRvIERNQSBSWCBpbnRlcnJ1cHQgKi8KKwkJfQorI2Vsc2UKKwkJU01DX1NFVF9SWF9DRkcoUlhfQ0ZHX1JYX0VORF9BTEdONF8gfCAoKDI8PDgpICYgUlhfQ0ZHX1JYRE9GRl8pKTsKKwkJU01DX1BVTExfREFUQShkYXRhLCBwa3RfbGVuKzIrMyk7CisKKwkJREJHKFNNQ19ERUJVR19QS1RTLCAiJXM6IFJlY2VpdmVkIHBhY2tldFxuIiwgZGV2LT5uYW1lLCk7CisJCVBSSU5UX1BLVChkYXRhLCAoKHBrdF9sZW4gLSA0KSA8PSA2NCkgPyBwa3RfbGVuIC0gNCA6IDY0KTsKKwkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJc2tiLT5kZXYgPSBkZXY7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCW5ldGlmX3J4KHNrYik7CisJCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuLTQ7CisjZW5kaWYKKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB0byBhY3R1YWxseSBzZW5kIGEgcGFja2V0IHRvIHRoZSBjaGlwLgorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X2hhcmR3YXJlX3NlbmRfcGt0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGNtZEEsIGNtZEIsIGxlbjsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRyhTTUNfREVCVUdfRlVOQyB8IFNNQ19ERUJVR19UWCwgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwlCVUdfT04obHAtPnBlbmRpbmdfdHhfc2tiID09IE5VTEwpOworCisJc2tiID0gbHAtPnBlbmRpbmdfdHhfc2tiOworCWxwLT5wZW5kaW5nX3R4X3NrYiA9IE5VTEw7CisKKwkvKiBjbWRBIHsyNToyNF0gZGF0YSBhbGlnbm1lbnQgWzIwOjE2XSBzdGFydCBvZmZzZXQgWzEwOjBdIGJ1ZmZlciBsZW5ndGggKi8KKwkvKiBjbWRCIHszMToxNl0gcGt0IHRhZyBbMTA6MF0gbGVuZ3RoICovCisjaWZkZWYgU01DX1VTRV9ETUEKKwkvKiAxNiBieXRlIGJ1ZmZlciBhbGlnbm1lbnQgbW9kZSAqLworCWJ1ZiA9IChjaGFyKikoKHUzMikoc2tiLT5kYXRhKSAmIH4weEYpOworCWxlbiA9IChza2ItPmxlbiArIDB4RiArICgodTMyKXNrYi0+ZGF0YSAmIDB4RikpICYgfjB4RjsKKwljbWRBID0gKDE8PDI0KSB8ICgoKHUzMilza2ItPmRhdGEgJiAweEYpPDwxNikgfAorCQkJVFhfQ01EX0FfSU5UX0ZJUlNUX1NFR18gfCBUWF9DTURfQV9JTlRfTEFTVF9TRUdfIHwKKwkJCXNrYi0+bGVuOworI2Vsc2UKKwlidWYgPSAoY2hhciopKCh1MzIpc2tiLT5kYXRhICYgfjB4Myk7CisJbGVuID0gKHNrYi0+bGVuICsgMyArICgodTMyKXNrYi0+ZGF0YSAmIDMpKSAmIH4weDM7CisJY21kQSA9ICgoKHUzMilza2ItPmRhdGEgJiAweDMpIDw8IDE2KSB8CisJCQlUWF9DTURfQV9JTlRfRklSU1RfU0VHXyB8IFRYX0NNRF9BX0lOVF9MQVNUX1NFR18gfAorCQkJc2tiLT5sZW47CisjZW5kaWYKKwkvKiB0YWcgaXMgcGFja2V0IGxlbmd0aCBzbyB3ZSBjYW4gdXNlIHRoaXMgaW4gc3RhdHMgdXBkYXRlIGxhdGVyICovCisJY21kQiA9IChza2ItPmxlbiAgPDwgMTYpIHwgKHNrYi0+bGVuICYgMHg3RkYpOworCisJREJHKFNNQ19ERUJVR19UWCwgIiVzOiBUWCBQS1QgTEVOR1RIIDB4JTA0eCAoJWQpIEJVRiAweCVwIENNREEgMHglMDh4IENNREIgMHglMDh4XG4iLAorCQkgZGV2LT5uYW1lLCBsZW4sIGxlbiwgYnVmLCBjbWRBLCBjbWRCKTsKKwlTTUNfU0VUX1RYX0ZJRk8oY21kQSk7CisJU01DX1NFVF9UWF9GSUZPKGNtZEIpOworCisJREJHKFNNQ19ERUJVR19QS1RTLCAiJXM6IFRyYW5zbWl0dGVkIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKKwlQUklOVF9QS1QoYnVmLCBsZW4gPD0gNjQgPyBsZW4gOiA2NCk7CisKKwkvKiBTZW5kIHBrdCB2aWEgUElPIG9yIERNQSAqLworI2lmZGVmIFNNQ19VU0VfRE1BCisJbHAtPmN1cnJlbnRfdHhfc2tiID0gc2tiOworCVNNQ19QVVNIX0RBVEEoYnVmLCBsZW4pOworCS8qIERNQSBjb21wbGV0ZSBJUlEgd2lsbCBmcmVlIGJ1ZmZlciBhbmQgc2V0IGppZmZpZXMgKi8KKyNlbHNlCisJU01DX1BVU0hfREFUQShidWYsIGxlbik7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2X2tmcmVlX3NrYihza2IpOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJaWYgKCFscC0+dHhfdGhyb3R0bGUpIHsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCVNNQ19FTkFCTEVfSU5UKElOVF9FTl9UREZBX0VOXyB8IElOVF9FTl9UU0ZMX0VOXyk7Cit9CisKKy8qCisgKiBTaW5jZSBJIGFtIG5vdCBzdXJlIGlmIEkgd2lsbCBoYXZlIGVub3VnaCByb29tIGluIHRoZSBjaGlwJ3MgcmFtCisgKiB0byBzdG9yZSB0aGUgcGFja2V0LCBJIGNhbGwgdGhpcyByb3V0aW5lIHdoaWNoIGVpdGhlciBzZW5kcyBpdAorICogbm93LCBvciBzZXQgdGhlIGNhcmQgdG8gZ2VuZXJhdGVzIGFuIGludGVycnVwdCB3aGVuIHJlYWR5CisgKiBmb3IgdGhlIHBhY2tldC4KKyAqLworc3RhdGljIGludCBzbWM5MTF4X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgZnJlZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKFNNQ19ERUJVR19GVU5DIHwgU01DX0RFQlVHX1RYLCAiJXM6IC0tPiAlc1xuIiwKKwkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJQlVHX09OKGxwLT5wZW5kaW5nX3R4X3NrYiAhPSBOVUxMKTsKKworCWZyZWUgPSBTTUNfR0VUX1RYX0ZJRk9fSU5GKCkgJiBUWF9GSUZPX0lORl9UREZSRUVfOworCURCRyhTTUNfREVCVUdfVFgsICIlczogVFggZnJlZSBzcGFjZSAlZFxuIiwgZGV2LT5uYW1lLCBmcmVlKTsKKworCS8qIFR1cm4gb2ZmIHRoZSBmbG93IHdoZW4gcnVubmluZyBvdXQgb2Ygc3BhY2UgaW4gRklGTyAqLworCWlmIChmcmVlIDw9IFNNQzkxMVhfVFhfRklGT19MT1dfVEhSRVNIT0xEKSB7CisJCURCRyhTTUNfREVCVUdfVFgsICIlczogRGlzYWJsaW5nIGRhdGEgZmxvdyBkdWUgdG8gbG93IEZJRk8gc3BhY2UgKCVkKVxuIiwKKwkJCWRldi0+bmFtZSwgZnJlZSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQkvKiBSZWVuYWJsZSB3aGVuIGF0IGxlYXN0IDEgcGFja2V0IG9mIHNpemUgTVRVIHByZXNlbnQgKi8KKwkJU01DX1NFVF9GSUZPX1REQSgoU01DOTExWF9UWF9GSUZPX0xPV19USFJFU0hPTEQpLzY0KTsKKwkJbHAtPnR4X3Rocm90dGxlID0gMTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCX0KKworCS8qIERyb3AgcGFja2V0cyB3aGVuIHdlIHJ1biBvdXQgb2Ygc3BhY2UgaW4gVFggRklGTworCSAqIEFjY291bnQgZm9yIG92ZXJoZWFkIHJlcXVpcmVkIGZvcjoKKwkgKgorCSAqCSAgVHggY29tbWFuZCB3b3JkcwkJCSA4IGJ5dGVzCisJICoJICBTdGFydCBvZmZzZXQJCQkJIDE1IGJ5dGVzCisJICoJICBFbmQgcGFkZGluZwkJCQkgMTUgYnl0ZXMKKwkgKi8KKwlpZiAodW5saWtlbHkoZnJlZSA8IChza2ItPmxlbiArIDggKyAxNSArIDE1KSkpIHsKKwkJcHJpbnRrKCIlczogTm8gVHggZnJlZSBzcGFjZSAlZCA8ICVkXG4iLAorCQkJZGV2LT5uYW1lLCBmcmVlLCBza2ItPmxlbik7CisJCWxwLT5wZW5kaW5nX3R4X3NrYiA9IE5VTEw7CisJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJbHAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBTTUNfVVNFX0RNQQorCXsKKwkJLyogSWYgdGhlIERNQSBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhlbiBkZWZlciB0aGlzIHBhY2tldCBUeCB1bnRpbAorCQkgKiB0aGUgRE1BIElSUSBzdGFydHMgaXQKKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlpZiAobHAtPnR4ZG1hX2FjdGl2ZSkgeworCQkJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19ETUEsICIlczogVHggRE1BIHJ1bm5pbmcsIGRlZmVycmluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisJCQlscC0+cGVuZGluZ190eF9za2IgPSBza2I7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlEQkcoU01DX0RFQlVHX1RYIHwgU01DX0RFQlVHX0RNQSwgIiVzOiBBY3RpdmF0aW5nIFR4IERNQVxuIiwgZGV2LT5uYW1lKTsKKwkJCWxwLT50eGRtYV9hY3RpdmUgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJfQorI2VuZGlmCisJbHAtPnBlbmRpbmdfdHhfc2tiID0gc2tiOworCXNtYzkxMXhfaGFyZHdhcmVfc2VuZF9wa3QoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBoYW5kbGVzIGEgVFggc3RhdHVzIGludGVycnVwdCwgd2hpY2ggaXMgb25seSBjYWxsZWQgd2hlbjoKKyAqIC0gYSBUWCBlcnJvciBvY2N1cnJlZCwgb3IKKyAqIC0gVFggb2YgYSBwYWNrZXQgY29tcGxldGVkLgorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCB0eF9zdGF0dXM7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMgfCBTTUNfREVCVUdfVFgsICIlczogLS0+ICVzXG4iLAorCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBDb2xsZWN0IHRoZSBUWCBzdGF0dXMgKi8KKwl3aGlsZSAoKChTTUNfR0VUX1RYX0ZJRk9fSU5GKCkgJiBUWF9GSUZPX0lORl9UU1VTRURfKSA+PiAxNikgIT0gMCkgeworCQlEQkcoU01DX0RFQlVHX1RYLCAiJXM6IFR4IHN0YXQgRklGTyB1c2VkIDB4JTA0eFxuIiwKKwkJCWRldi0+bmFtZSwKKwkJCShTTUNfR0VUX1RYX0ZJRk9fSU5GKCkgJiBUWF9GSUZPX0lORl9UU1VTRURfKSA+PiAxNik7CisJCXR4X3N0YXR1cyA9IFNNQ19HRVRfVFhfU1RTX0ZJRk8oKTsKKwkJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJbHAtPnN0YXRzLnR4X2J5dGVzKz10eF9zdGF0dXM+PjE2OworCQlEQkcoU01DX0RFQlVHX1RYLCAiJXM6IFR4IEZJRk8gdGFnIDB4JTA0eCBzdGF0dXMgMHglMDR4XG4iLAorCQkJZGV2LT5uYW1lLCAodHhfc3RhdHVzICYgMHhmZmZmMDAwMCkgPj4gMTYsCisJCQl0eF9zdGF0dXMgJiAweDAwMDBmZmZmKTsKKwkJLyogY291bnQgVHggZXJyb3JzLCBidXQgaWdub3JlIGxvc3QgY2FycmllciBlcnJvcnMgd2hlbiBpbgorCQkgKiBmdWxsLWR1cGxleCBtb2RlICovCisJCWlmICgodHhfc3RhdHVzICYgVFhfU1RTX0VTXykgJiYgIShscC0+Y3RsX3JmZHVwbHggJiYKKwkJICAgICEodHhfc3RhdHVzICYgMHgwMDAwMDMwNikpKSB7CisJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJCX0KKwkJaWYgKHR4X3N0YXR1cyAmIFRYX1NUU19NQU5ZX0NPTExfKSB7CisJCQlscC0+c3RhdHMuY29sbGlzaW9ucys9MTY7CisJCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJfSBlbHNlIHsKKwkJCWxwLT5zdGF0cy5jb2xsaXNpb25zKz0odHhfc3RhdHVzICYgVFhfU1RTX0NPTExfQ05UXykgPj4gMzsKKwkJfQorCQkvKiBjYXJyaWVyIGVycm9yIG9ubHkgaGFzIG1lYW5pbmcgZm9yIGhhbGYtZHVwbGV4IGNvbW11bmljYXRpb24gKi8KKwkJaWYgKCh0eF9zdGF0dXMgJiAoVFhfU1RTX0xPQ18gfCBUWF9TVFNfTk9fQ0FSUl8pKSAmJgorCQkgICAgIWxwLT5jdGxfcmZkdXBseCkgeworCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKHR4X3N0YXR1cyAmIFRYX1NUU19MQVRFX0NPTExfKSB7CisJCQlscC0+c3RhdHMuY29sbGlzaW9ucysrOworCQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCX0KKwl9Cit9CisKKworLyotLS1QSFkgQ09OVFJPTCBBTkQgQ09ORklHVVJBVElPTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBSZWFkcyBhIHJlZ2lzdGVyIGZyb20gdGhlIE1JSSBNYW5hZ2VtZW50IHNlcmlhbCBpbnRlcmZhY2UKKyAqLworCitzdGF0aWMgaW50IHNtYzkxMXhfcGh5X3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeWFkZHIsIGludCBwaHlyZWcpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGh5ZGF0YTsKKworCVNNQ19HRVRfTUlJKHBoeXJlZywgcGh5YWRkciwgcGh5ZGF0YSk7CisKKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogcGh5YWRkcj0weCV4LCBwaHlyZWc9MHglMDJ4LCBwaHlkYXRhPTB4JTA0eFxuIiwKKwkJX19GVU5DVElPTl9fLCBwaHlhZGRyLCBwaHlyZWcsIHBoeWRhdGEpOworCXJldHVybiBwaHlkYXRhOworfQorCisKKy8qCisgKiBXcml0ZXMgYSByZWdpc3RlciB0byB0aGUgTUlJIE1hbmFnZW1lbnQgc2VyaWFsIGludGVyZmFjZQorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZywKKwkJCWludCBwaHlkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisKKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogcGh5YWRkcj0weCV4LCBwaHlyZWc9MHgleCwgcGh5ZGF0YT0weCV4XG4iLAorCQlfX0ZVTkNUSU9OX18sIHBoeWFkZHIsIHBoeXJlZywgcGh5ZGF0YSk7CisKKwlTTUNfU0VUX01JSShwaHlyZWcsIHBoeWFkZHIsIHBoeWRhdGEpOworfQorCisvKgorICogRmluZHMgYW5kIHJlcG9ydHMgdGhlIFBIWSBhZGRyZXNzICgxMTUgYW5kIDExNyBoYXZlIGV4dGVybmFsCisgKiBQSFkgaW50ZXJmYWNlIDExOCBoYXMgaW50ZXJuYWwgb25seQorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9kZXRlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHBoeWFkZHI7CisJdW5zaWduZWQgaW50IGNmZywgaWQxLCBpZDI7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlscC0+cGh5X3R5cGUgPSAwOworCisJLyoKKwkgKiBTY2FuIGFsbCAzMiBQSFkgYWRkcmVzc2VzIGlmIG5lY2Vzc2FyeSwgc3RhcnRpbmcgYXQKKwkgKiBQSFkjMSB0byBQSFkjMzEsIGFuZCB0aGVuIFBIWSMwIGxhc3QuCisJICovCisJc3dpdGNoKGxwLT52ZXJzaW9uKSB7CisJCWNhc2UgMHgxMTU6CisJCWNhc2UgMHgxMTc6CisJCQljZmcgPSBTTUNfR0VUX0hXX0NGRygpOworCQkJaWYgKGNmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKKwkJCQljZmcgJj0gfkhXX0NGR19QSFlfQ0xLX1NFTF87CisJCQkJY2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9DTEtfRElTXzsKKwkJCQlTTUNfU0VUX0hXX0NGRyhjZmcpOworCQkJCXVkZWxheSgxMCk7IC8qIFdhaXQgZm9yIGNsb2NrcyB0byBzdG9wICovCisKKwkJCQljZmcgfD0gSFdfQ0ZHX0VYVF9QSFlfRU5fOworCQkJCVNNQ19TRVRfSFdfQ0ZHKGNmZyk7CisJCQkJdWRlbGF5KDEwKTsgLyogV2FpdCBmb3IgY2xvY2tzIHRvIHN0b3AgKi8KKworCQkJCWNmZyAmPSB+SFdfQ0ZHX1BIWV9DTEtfU0VMXzsKKwkJCQljZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0VYVF9QSFlfOworCQkJCVNNQ19TRVRfSFdfQ0ZHKGNmZyk7CisJCQkJdWRlbGF5KDEwKTsgLyogV2FpdCBmb3IgY2xvY2tzIHRvIHN0b3AgKi8KKworCQkJCWNmZyB8PSBIV19DRkdfU01JX1NFTF87CisJCQkJU01DX1NFVF9IV19DRkcoY2ZnKTsKKworCQkJCWZvciAocGh5YWRkciA9IDE7IHBoeWFkZHIgPCAzMjsgKytwaHlhZGRyKSB7CisKKwkJCQkJLyogUmVhZCB0aGUgUEhZIGlkZW50aWZpZXJzICovCisJCQkJCVNNQ19HRVRfUEhZX0lEMShwaHlhZGRyICYgMzEsIGlkMSk7CisJCQkJCVNNQ19HRVRfUEhZX0lEMihwaHlhZGRyICYgMzEsIGlkMik7CisKKwkJCQkJLyogTWFrZSBzdXJlIGl0IGlzIGEgdmFsaWQgaWRlbnRpZmllciAqLworCQkJCQlpZiAoaWQxICE9IDB4MDAwMCAmJiBpZDEgIT0gMHhmZmZmICYmCisJCQkJCSAgICBpZDEgIT0gMHg4MDAwICYmIGlkMiAhPSAweDAwMDAgJiYKKwkJCQkJICAgIGlkMiAhPSAweGZmZmYgJiYgaWQyICE9IDB4ODAwMCkgeworCQkJCQkJLyogU2F2ZSB0aGUgUEhZJ3MgYWRkcmVzcyAqLworCQkJCQkJbHAtPm1paS5waHlfaWQgPSBwaHlhZGRyICYgMzE7CisJCQkJCQlscC0+cGh5X3R5cGUgPSBpZDEgPDwgMTYgfCBpZDI7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJZGVmYXVsdDoKKwkJCS8qIEludGVybmFsIG1lZGlhIG9ubHkgKi8KKwkJCVNNQ19HRVRfUEhZX0lEMSgxLCBpZDEpOworCQkJU01DX0dFVF9QSFlfSUQyKDEsIGlkMik7CisJCQkvKiBTYXZlIHRoZSBQSFkncyBhZGRyZXNzICovCisJCQlscC0+bWlpLnBoeV9pZCA9IDE7CisJCQlscC0+cGh5X3R5cGUgPSBpZDEgPDwgMTYgfCBpZDI7CisJfQorCisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IHBoeV9pZDE9MHgleCwgcGh5X2lkMj0weCV4IHBoeWFkZHI9MHglZFxuIiwKKwkJZGV2LT5uYW1lLCBpZDEsIGlkMiwgbHAtPm1paS5waHlfaWQpOworfQorCisvKgorICogU2V0cyB0aGUgUEhZIHRvIGEgY29uZmlndXJhdGlvbiBhcyBkZXRlcm1pbmVkIGJ5IHRoZSB1c2VyLgorICogQ2FsbGVkIHdpdGggc3Bpbl9sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgc21jOTExeF9waHlfZml4ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHBoeWFkZHIgPSBscC0+bWlpLnBoeV9pZDsKKwlpbnQgYm1jcjsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCS8qIEVudGVyIExpbmsgRGlzYWJsZSBzdGF0ZSAqLworCVNNQ19HRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisJYm1jciB8PSBCTUNSX1BET1dOOworCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisKKwkvKgorCSAqIFNldCBvdXIgZml4ZWQgY2FwYWJpbGl0aWVzCisJICogRGlzYWJsZSBhdXRvLW5lZ290aWF0aW9uCisJICovCisJYm1jciAmPSB+Qk1DUl9BTkVOQUJMRTsKKwlpZiAobHAtPmN0bF9yZmR1cGx4KQorCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisKKwlpZiAobHAtPmN0bF9yc3BlZWQgPT0gMTAwKQorCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDA7CisKKwkvKiBXcml0ZSBvdXIgY2FwYWJpbGl0aWVzIHRvIHRoZSBwaHkgY29udHJvbCByZWdpc3RlciAqLworCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisKKwkvKiBSZS1Db25maWd1cmUgdGhlIFJlY2VpdmUvUGh5IENvbnRyb2wgcmVnaXN0ZXIgKi8KKwlibWNyICY9IH5CTUNSX1BET1dOOworCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIHNtYzkxMXhfcGh5X3Jlc2V0IC0gcmVzZXQgdGhlIHBoeQorICogQGRldjogbmV0IGRldmljZQorICogQHBoeTogcGh5IGFkZHJlc3MKKyAqCisgKiBJc3N1ZSBhIHNvZnR3YXJlIHJlc2V0IGZvciB0aGUgc3BlY2lmaWVkIFBIWSBhbmQKKyAqIHdhaXQgdXAgdG8gMTAwbXMgZm9yIHRoZSByZXNldCB0byBjb21wbGV0ZS4JIFdlIHNob3VsZAorICogbm90IGFjY2VzcyB0aGUgUEhZIGZvciA1MG1zIGFmdGVyIGlzc3VpbmcgdGhlIHJlc2V0LgorICoKKyAqIFRoZSB0aW1lIHRvIHdhaXQgYXBwZWFycyB0byBiZSBkZXBlbmRlbnQgb24gdGhlIFBIWS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc21jOTExeF9waHlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeSkKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlcygpXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlyZWcgPSBTTUNfR0VUX1BNVF9DVFJMKCk7CisJcmVnICY9IH4weGZmZmZmMDMwOworCXJlZyB8PSBQTVRfQ1RSTF9QSFlfUlNUXzsKKwlTTUNfU0VUX1BNVF9DVFJMKHJlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKHRpbWVvdXQgPSAyOyB0aW1lb3V0OyB0aW1lb3V0LS0pIHsKKwkJbXNsZWVwKDUwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCXJlZyA9IFNNQ19HRVRfUE1UX0NUUkwoKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCEocmVnICYgUE1UX0NUUkxfUEhZX1JTVF8pKSB7CisJCQkvKiBleHRyYSBkZWxheSByZXF1aXJlZCBiZWNhdXNlIHRoZSBwaHkgbWF5CisJCQkgKiBub3QgYmUgY29tcGxldGVkIHdpdGggaXRzIHJlc2V0CisJCQkgKiB3aGVuIFBIWV9CQ1JfUkVTRVRfIGlzIGNsZWFyZWQuIDI1NnVzCisJCQkgKiBzaG91bGQgc3VmZmljZSwgYnV0IHVzZSA1MDB1cyB0byBiZSBzYWZlCisJCQkgKi8KKwkJCXVkZWxheSg1MDApOworCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZWcgJiBQTVRfQ1RSTF9QSFlfUlNUXzsKK30KKworLyoKKyAqIHNtYzkxMXhfcGh5X3Bvd2VyZG93biAtIHBvd2VyZG93biBwaHkKKyAqIEBkZXY6IG5ldCBkZXZpY2UKKyAqIEBwaHk6IHBoeSBhZGRyZXNzCisgKgorICogUG93ZXIgZG93biB0aGUgc3BlY2lmaWVkIFBIWQorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9wb3dlcmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBibWNyOworCisJLyogRW50ZXIgTGluayBEaXNhYmxlIHN0YXRlICovCisJU01DX0dFVF9QSFlfQk1DUihwaHksIGJtY3IpOworCWJtY3IgfD0gQk1DUl9QRE9XTjsKKwlTTUNfU0VUX1BIWV9CTUNSKHBoeSwgYm1jcik7Cit9CisKKy8qCisgKiBzbWM5MTF4X3BoeV9jaGVja19tZWRpYSAtIGNoZWNrIHRoZSBtZWRpYSBzdGF0dXMgYW5kIGFkanVzdCBCTUNSCisgKiBAZGV2OiBuZXQgZGV2aWNlCisgKiBAaW5pdDogc2V0IHRydWUgZm9yIGluaXRpYWxpc2F0aW9uCisgKgorICogU2VsZWN0IGR1cGxleCBtb2RlIGRlcGVuZGluZyBvbiBuZWdvdGlhdGlvbiBzdGF0ZS4JVGhpcworICogYWxzbyB1cGRhdGVzIG91ciBjYXJyaWVyIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9jaGVja19tZWRpYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5pdCkKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHBoeWFkZHIgPSBscC0+bWlpLnBoeV9pZDsKKwl1bnNpZ25lZCBpbnQgYm1jciwgY3I7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAobWlpX2NoZWNrX21lZGlhKCZscC0+bWlpLCBuZXRpZl9tc2dfbGluayhscCksIGluaXQpKSB7CisJCS8qIGR1cGxleCBzdGF0ZSBoYXMgY2hhbmdlZCAqLworCQlTTUNfR0VUX1BIWV9CTUNSKHBoeWFkZHIsIGJtY3IpOworCQlTTUNfR0VUX01BQ19DUihjcik7CisJCWlmIChscC0+bWlpLmZ1bGxfZHVwbGV4KSB7CisJCQlEQkcoU01DX0RFQlVHX01JU0MsICIlczogQ29uZmlndXJpbmcgZm9yIGZ1bGwtZHVwbGV4IG1vZGVcbiIsIGRldi0+bmFtZSk7CisJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisJCQljciB8PSBNQUNfQ1JfUkNWT1dOXzsKKwkJfSBlbHNlIHsKKwkJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBDb25maWd1cmluZyBmb3IgaGFsZi1kdXBsZXggbW9kZVxuIiwgZGV2LT5uYW1lKTsKKwkJCWJtY3IgJj0gfkJNQ1JfRlVMTERQTFg7CisJCQljciAmPSB+TUFDX0NSX1JDVk9XTl87CisJCX0KKwkJU01DX1NFVF9QSFlfQk1DUihwaHlhZGRyLCBibWNyKTsKKwkJU01DX1NFVF9NQUNfQ1IoY3IpOworCX0KK30KKworLyoKKyAqIENvbmZpZ3VyZXMgdGhlIHNwZWNpZmllZCBQSFkgdGhyb3VnaCB0aGUgTUlJIG1hbmFnZW1lbnQgaW50ZXJmYWNlCisgKiB1c2luZyBBdXRvbmVnb3RpYXRpb24uCisgKiBDYWxscyBzbWM5MTF4X3BoeV9maXhlZCgpIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBjZXJ0YWluIGNvbmZpZy4KKyAqIElmIFJQQyBBTkVHIGJpdCBpcyBzZXQsIHRoZSBtZWRpYSBzZWxlY3Rpb24gaXMgZGVwZW5kZW50IHB1cmVseSBvbgorICogdGhlIHNlbGVjdGlvbiBieSB0aGUgTUlJIChlaXRoZXIgaW4gdGhlIE1JSSBCTUNSIHJlZyBvciB0aGUgcmVzdWx0CisgKiBvZiBhdXRvbmVnb3RpYXRpb24uKSAgSWYgdGhlIFJQQyBBTkVHIGJpdCBpcyBjbGVhcmVkLCB0aGUgc2VsZWN0aW9uCisgKiBpcyBjb250cm9sbGVkIGJ5IHRoZSBSUEMgU1BFRUQgYW5kIFJQQyBEUExYIGJpdHMuCisgKi8KK3N0YXRpYyB2b2lkIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlpbnQgcGh5YWRkciA9IGxwLT5taWkucGh5X2lkOworCWludCBteV9waHlfY2FwczsgLyogTXkgUEhZIGNhcGFiaWxpdGllcyAqLworCWludCBteV9hZF9jYXBzOyAvKiBNeSBBZHZlcnRpc2VkIGNhcGFiaWxpdGllcyAqLworCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiBwaHlfdHlwZSBpcyB6ZXJvLgorCSAqLworCWlmIChscC0+cGh5X3R5cGUgPT0gMCkKKwkJIGdvdG8gc21jOTExeF9waHlfY29uZmlndXJlX2V4aXQ7CisKKwlpZiAoc21jOTExeF9waHlfcmVzZXQoZGV2LCBwaHlhZGRyKSkgeworCQlwcmludGsoIiVzOiBQSFkgcmVzZXQgdGltZWQgb3V0XG4iLCBkZXYtPm5hbWUpOworCQlnb3RvIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZV9leGl0OworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogRW5hYmxlIFBIWSBJbnRlcnJ1cHRzIChmb3IgcmVnaXN0ZXIgMTgpCisJICogSW50ZXJydXB0cyBsaXN0ZWQgaGVyZSBhcmUgZW5hYmxlZAorCSAqLworCVNNQ19TRVRfUEhZX0lOVF9NQVNLKHBoeWFkZHIsIFBIWV9JTlRfTUFTS19FTkVSR1lfT05fIHwKKwkJIFBIWV9JTlRfTUFTS19BTkVHX0NPTVBfIHwgUEhZX0lOVF9NQVNLX1JFTU9URV9GQVVMVF8gfAorCQkgUEhZX0lOVF9NQVNLX0xJTktfRE9XTl8pOworCisJLyogSWYgdGhlIHVzZXIgcmVxdWVzdGVkIG5vIGF1dG8gbmVnLCB0aGVuIGdvIHNldCBoaXMgcmVxdWVzdCAqLworCWlmIChscC0+bWlpLmZvcmNlX21lZGlhKSB7CisJCXNtYzkxMXhfcGh5X2ZpeGVkKGRldik7CisJCWdvdG8gc21jOTExeF9waHlfY29uZmlndXJlX2V4aXQ7CisJfQorCisJLyogQ29weSBvdXIgY2FwYWJpbGl0aWVzIGZyb20gTUlJX0JNU1IgdG8gTUlJX0FEVkVSVElTRSAqLworCVNNQ19HRVRfUEhZX0JNU1IocGh5YWRkciwgbXlfcGh5X2NhcHMpOworCWlmICghKG15X3BoeV9jYXBzICYgQk1TUl9BTkVHQ0FQQUJMRSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQXV0byBuZWdvdGlhdGlvbiBOT1Qgc3VwcG9ydGVkXG4iKTsKKwkJc21jOTExeF9waHlfZml4ZWQoZGV2KTsKKwkJZ290byBzbWM5MTF4X3BoeV9jb25maWd1cmVfZXhpdDsKKwl9CisKKwkvKiBDU01BIGNhcGFibGUgdy8gYm90aCBwYXVzZXMgKi8KKwlteV9hZF9jYXBzID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU07CisKKwlpZiAobXlfcGh5X2NhcHMgJiBCTVNSXzEwMEJBU0U0KQorCQlteV9hZF9jYXBzIHw9IEFEVkVSVElTRV8xMDBCQVNFNDsKKwlpZiAobXlfcGh5X2NhcHMgJiBCTVNSXzEwMEZVTEwpCisJCW15X2FkX2NhcHMgfD0gQURWRVJUSVNFXzEwMEZVTEw7CisJaWYgKG15X3BoeV9jYXBzICYgQk1TUl8xMDBIQUxGKQorCQlteV9hZF9jYXBzIHw9IEFEVkVSVElTRV8xMDBIQUxGOworCWlmIChteV9waHlfY2FwcyAmIEJNU1JfMTBGVUxMKQorCQlteV9hZF9jYXBzIHw9IEFEVkVSVElTRV8xMEZVTEw7CisJaWYgKG15X3BoeV9jYXBzICYgQk1TUl8xMEhBTEYpCisJCW15X2FkX2NhcHMgfD0gQURWRVJUSVNFXzEwSEFMRjsKKworCS8qIERpc2FibGUgY2FwYWJpbGl0aWVzIG5vdCBzZWxlY3RlZCBieSBvdXIgdXNlciAqLworCWlmIChscC0+Y3RsX3JzcGVlZCAhPSAxMDApCisJCW15X2FkX2NhcHMgJj0gfihBRFZFUlRJU0VfMTAwQkFTRTR8QURWRVJUSVNFXzEwMEZVTEx8QURWRVJUSVNFXzEwMEhBTEYpOworCisJIGlmICghbHAtPmN0bF9yZmR1cGx4KQorCQlteV9hZF9jYXBzICY9IH4oQURWRVJUSVNFXzEwMEZVTEx8QURWRVJUSVNFXzEwRlVMTCk7CisKKwkvKiBVcGRhdGUgb3VyIEF1dG8tTmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKi8KKwlTTUNfU0VUX1BIWV9NSUlfQURWKHBoeWFkZHIsIG15X2FkX2NhcHMpOworCWxwLT5taWkuYWR2ZXJ0aXNpbmcgPSBteV9hZF9jYXBzOworCisJLyoKKwkgKiBSZWFkIHRoZSByZWdpc3RlciBiYWNrLgkgV2l0aG91dCB0aGlzLCBpdCBhcHBlYXJzIHRoYXQgd2hlbgorCSAqIGF1dG8tbmVnb3RpYXRpb24gaXMgcmVzdGFydGVkLCBzb21ldGltZXMgaXQgaXNuJ3QgcmVhZHkgYW5kCisJICogdGhlIGxpbmsgZG9lcyBub3QgY29tZSB1cC4KKwkgKi8KKwl1ZGVsYXkoMTApOworCVNNQ19HRVRfUEhZX01JSV9BRFYocGh5YWRkciwgc3RhdHVzKTsKKworCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBwaHkgY2Fwcz0weCUwNHhcbiIsIGRldi0+bmFtZSwgbXlfcGh5X2NhcHMpOworCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBwaHkgYWR2ZXJ0aXNlZCBjYXBzPTB4JTA0eFxuIiwgZGV2LT5uYW1lLCBteV9hZF9jYXBzKTsKKworCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiBwcm9jZXNzIGluIG9yZGVyIHRvIGFkdmVydGlzZSBteSBjYXBzICovCisJU01DX1NFVF9QSFlfQk1DUihwaHlhZGRyLCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCisJc21jOTExeF9waHlfY2hlY2tfbWVkaWEoZGV2LCAxKTsKKworc21jOTExeF9waHlfY29uZmlndXJlX2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlscC0+d29ya19wZW5kaW5nID0gMDsKK30KKworLyoKKyAqIHNtYzkxMXhfcGh5X2ludGVycnVwdAorICoKKyAqIFB1cnBvc2U6ICBIYW5kbGUgaW50ZXJydXB0cyByZWxhdGluZyB0byBQSFkgcmVnaXN0ZXIgMTguIFRoaXMgaXMKKyAqCSBjYWxsZWQgZnJvbSB0aGUgImhhcmQiIGludGVycnVwdCBoYW5kbGVyIHVuZGVyIG91ciBwcml2YXRlIHNwaW5sb2NrLgorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHBoeWFkZHIgPSBscC0+bWlpLnBoeV9pZDsKKwlpbnQgc3RhdHVzOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGxwLT5waHlfdHlwZSA9PSAwKQorCQlyZXR1cm47CisKKwlzbWM5MTF4X3BoeV9jaGVja19tZWRpYShkZXYsIDApOworCS8qIHJlYWQgdG8gY2xlYXIgc3RhdHVzIGJpdHMgKi8KKwlTTUNfR0VUX1BIWV9JTlRfU1JDKHBoeWFkZHIsc3RhdHVzKTsKKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogUEhZIGludGVycnVwdCBzdGF0dXMgMHglMDR4XG4iLAorCQlkZXYtPm5hbWUsIHN0YXR1cyAmIDB4ZmZmZik7CisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IEFGQ19DRkcgMHglMDh4XG4iLAorCQlkZXYtPm5hbWUsIFNNQ19HRVRfQUZDX0NGRygpKTsKK30KKworLyotLS0gRU5EIFBIWSBDT05UUk9MIEFORCBDT05GSUdVUkFUSU9OLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIHJvdXRpbmUgb2YgdGhlIGRyaXZlciwgdG8gaGFuZGxlIHRoZSBkZXZpY2Ugd2hlbgorICogaXQgbmVlZHMgc29tZSBhdHRlbnRpb24uCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzbWM5MTF4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCBzdGF0dXMsIG1hc2ssIHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IHJ4X292ZXJydW49MCwgY3IsIHBrdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCisJLyogU3B1cmlvdXMgaW50ZXJydXB0IGNoZWNrICovCisJaWYgKChTTUNfR0VUX0lSUV9DRkcoKSAmIChJTlRfQ0ZHX0lSUV9JTlRfIHwgSU5UX0NGR19JUlFfRU5fKSkgIT0KKwkJKElOVF9DRkdfSVJRX0lOVF8gfCBJTlRfQ0ZHX0lSUV9FTl8pKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwltYXNrID0gU01DX0dFVF9JTlRfRU4oKTsKKwlTTUNfU0VUX0lOVF9FTigwKTsKKworCS8qIHNldCBhIHRpbWVvdXQgdmFsdWUsIHNvIEkgZG9uJ3Qgc3RheSBoZXJlIGZvcmV2ZXIgKi8KKwl0aW1lb3V0ID0gODsKKworCisJZG8geworCQlzdGF0dXMgPSBTTUNfR0VUX0lOVCgpOworCisJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBJTlQgMHglMDh4IE1BU0sgMHglMDh4IE9VVFNJREUgTUFTSyAweCUwOHhcbiIsCisJCQlkZXYtPm5hbWUsIHN0YXR1cywgbWFzaywgc3RhdHVzICYgfm1hc2spOworCisJCXN0YXR1cyAmPSBtYXNrOworCQlpZiAoIXN0YXR1cykKKwkJCWJyZWFrOworCisJCS8qIEhhbmRsZSBTVyBpbnRlcnJ1cHQgY29uZGl0aW9uICovCisJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1NXX0lOVF8pIHsKKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfU1dfSU5UXyk7CisJCQltYXNrICY9IH5JTlRfRU5fU1dfSU5UX0VOXzsKKwkJfQorCQkvKiBIYW5kbGUgdmFyaW91cyBlcnJvciBjb25kaXRpb25zICovCisJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1JYRV8pIHsKKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfUlhFXyk7CisJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCX0KKwkJaWYgKHN0YXR1cyAmIElOVF9TVFNfUlhERkhfSU5UXykgeworCQkJU01DX0FDS19JTlQoSU5UX1NUU19SWERGSF9JTlRfKTsKKwkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKz1TTUNfR0VUX1JYX0RST1AoKTsKKwkJIH0KKwkJLyogVW5kb2N1bWVudGVkIGludGVycnVwdC13aGF0IGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBoZXJlPyAqLworCQlpZiAoc3RhdHVzICYgSU5UX1NUU19SWERGX0lOVF8pIHsKKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfUlhERl9JTlRfKTsKKwkJfQorCisJCS8qIFJ4IERhdGEgRklGTyBleGNlZWRzIHNldCBsZXZlbCAqLworCQlpZiAoc3RhdHVzICYgSU5UX1NUU19SREZMXykgeworCQkJaWYgKElTX1JFVl9BKGxwLT5yZXZpc2lvbikpIHsKKwkJCQlyeF9vdmVycnVuPTE7CisJCQkJU01DX0dFVF9NQUNfQ1IoY3IpOworCQkJCWNyICY9IH5NQUNfQ1JfUlhFTl87CisJCQkJU01DX1NFVF9NQUNfQ1IoY3IpOworCQkJCURCRyhTTUNfREVCVUdfUlgsICIlczogUlggb3ZlcnJ1blxuIiwgZGV2LT5uYW1lKTsKKwkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQl9CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1JERkxfKTsKKwkJfQorCQlpZiAoc3RhdHVzICYgSU5UX1NUU19SREZPXykgeworCQkJaWYgKCFJU19SRVZfQShscC0+cmV2aXNpb24pKSB7CisJCQkJU01DX0dFVF9NQUNfQ1IoY3IpOworCQkJCWNyICY9IH5NQUNfQ1JfUlhFTl87CisJCQkJU01DX1NFVF9NQUNfQ1IoY3IpOworCQkJCXJ4X292ZXJydW49MTsKKwkJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJYIG92ZXJydW5cbiIsIGRldi0+bmFtZSk7CisJCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQkJfQorCQkJU01DX0FDS19JTlQoSU5UX1NUU19SREZPXyk7CisJCX0KKwkJLyogSGFuZGxlIHJlY2VpdmUgY29uZGl0aW9uICovCisJCWlmICgoc3RhdHVzICYgSU5UX1NUU19SU0ZMXykgfHwgcnhfb3ZlcnJ1bikgeworCQkJdW5zaWduZWQgaW50IGZpZm87CisJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJYIGlycVxuIiwgZGV2LT5uYW1lKTsKKwkJCWZpZm8gPSBTTUNfR0VUX1JYX0ZJRk9fSU5GKCk7CisJCQlwa3RzID0gKGZpZm8gJiBSWF9GSUZPX0lORl9SWFNVU0VEXykgPj4gMTY7CisJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJ4IEZJRk8gcGt0cyAlZCwgYnl0ZXMgJWRcbiIsCisJCQkJZGV2LT5uYW1lLCBwa3RzLCBmaWZvICYgMHhGRkZGICk7CisJCQlpZiAocGt0cyAhPSAwKSB7CisjaWZkZWYgU01DX1VTRV9ETUEKKwkJCQl1bnNpZ25lZCBpbnQgZmlmbzsKKwkJCQlpZiAobHAtPnJ4ZG1hX2FjdGl2ZSl7CisJCQkJCURCRyhTTUNfREVCVUdfUlggfCBTTUNfREVCVUdfRE1BLAorCQkJCQkJIiVzOiBSWCBETUEgYWN0aXZlXG4iLCBkZXYtPm5hbWUpOworCQkJCQkvKiBUaGUgRE1BIGlzIGFscmVhZHkgcnVubmluZyBzbyB1cCB0aGUgSVJRIHRocmVzaG9sZCAqLworCQkJCQlmaWZvID0gU01DX0dFVF9GSUZPX0lOVCgpICYgfjB4RkY7CisJCQkJCWZpZm8gfD0gcGt0cyAmIDB4RkY7CisJCQkJCURCRyhTTUNfREVCVUdfUlgsCisJCQkJCQkiJXM6IFNldHRpbmcgUlggc3RhdCBGSUZPIHRocmVzaG9sZCB0byAlZFxuIiwKKwkJCQkJCWRldi0+bmFtZSwgZmlmbyAmIDB4ZmYpOworCQkJCQlTTUNfU0VUX0ZJRk9fSU5UKGZpZm8pOworCQkJCX0gZWxzZQorI2VuZGlmCisJCQkJc21jOTExeF9yY3YoZGV2KTsKKwkJCX0KKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfUlNGTF8pOworCQl9CisJCS8qIEhhbmRsZSB0cmFuc21pdCBGSUZPIGF2YWlsYWJsZSAqLworCQlpZiAoc3RhdHVzICYgSU5UX1NUU19UREZBXykgeworCQkJREJHKFNNQ19ERUJVR19UWCwgIiVzOiBUWCBkYXRhIEZJRk8gc3BhY2UgYXZhaWxhYmxlIGlycVxuIiwgZGV2LT5uYW1lKTsKKwkJCVNNQ19TRVRfRklGT19UREEoMHhGRik7CisJCQlscC0+dHhfdGhyb3R0bGUgPSAwOworI2lmZGVmIFNNQ19VU0VfRE1BCisJCQlpZiAoIWxwLT50eGRtYV9hY3RpdmUpCisjZW5kaWYKKwkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1RERkFfKTsKKwkJfQorCQkvKiBIYW5kbGUgdHJhbnNtaXQgZG9uZSBjb25kaXRpb24gKi8KKyNpZiAxCisJCWlmIChzdGF0dXMgJiAoSU5UX1NUU19UU0ZMXyB8IElOVF9TVFNfR1BUX0lOVF8pKSB7CisJCQlEQkcoU01DX0RFQlVHX1RYIHwgU01DX0RFQlVHX01JU0MsCisJCQkJIiVzOiBUeCBzdGF0IEZJRk8gbGltaXQgKCVkKSAvR1BUIGlycVxuIiwKKwkJCQlkZXYtPm5hbWUsIChTTUNfR0VUX0ZJRk9fSU5UKCkgJiAweDAwZmYwMDAwKSA+PiAxNik7CisJCQlzbWM5MTF4X3R4KGRldik7CisJCQlTTUNfU0VUX0dQVF9DRkcoR1BUX0NGR19USU1FUl9FTl8gfCAxMDAwMCk7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1RTRkxfKTsKKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfVFNGTF8gfCBJTlRfU1RTX0dQVF9JTlRfKTsKKwkJfQorI2Vsc2UKKwkJaWYgKHN0YXR1cyAmIElOVF9TVFNfVFNGTF8pIHsKKwkJCURCRyhTTUNfREVCVUdfVFgsICIlczogVFggc3RhdHVzIEZJRk8gbGltaXQgKCVkKSBpcnEgXG4iLCBkZXYtPm5hbWUsICk7CisJCQlzbWM5MTF4X3R4KGRldik7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1RTRkxfKTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBJTlRfU1RTX0dQVF9JTlRfKSB7CisJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IElSUV9DRkcgMHglMDh4IEZJRk9fSU5UIDB4JTA4eCBSWF9DRkcgMHglMDh4XG4iLAorCQkJCWRldi0+bmFtZSwKKwkJCQlTTUNfR0VUX0lSUV9DRkcoKSwKKwkJCQlTTUNfR0VUX0ZJRk9fSU5UKCksCisJCQkJU01DX0dFVF9SWF9DRkcoKSk7CisJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJ4IFN0YXQgRklGTyBVc2VkIDB4JTAyeCAiCisJCQkJIkRhdGEgRklGTyBVc2VkIDB4JTA0eCBTdGF0IEZJRk8gMHglMDh4XG4iLAorCQkJCWRldi0+bmFtZSwKKwkJCQkoU01DX0dFVF9SWF9GSUZPX0lORigpICYgMHgwMGZmMDAwMCkgPj4gMTYsCisJCQkJU01DX0dFVF9SWF9GSUZPX0lORigpICYgMHhmZmZmLAorCQkJCVNNQ19HRVRfUlhfU1RTX0ZJRk9fUEVFSygpKTsKKwkJCVNNQ19TRVRfR1BUX0NGRyhHUFRfQ0ZHX1RJTUVSX0VOXyB8IDEwMDAwKTsKKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfR1BUX0lOVF8pOworCQl9CisjZW5kaWYKKworCQkvKiBIYW5kbGUgUEhZIGludGVydXB0IGNvbmRpdGlvbiAqLworCQlpZiAoc3RhdHVzICYgSU5UX1NUU19QSFlfSU5UXykgeworCQkJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IFBIWSBpcnFcbiIsIGRldi0+bmFtZSk7CisJCQlzbWM5MTF4X3BoeV9pbnRlcnJ1cHQoZGV2KTsKKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfUEhZX0lOVF8pOworCQl9CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCS8qIHJlc3RvcmUgbWFzayBzdGF0ZSAqLworCVNNQ19TRVRfSU5UX0VOKG1hc2spOworCisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IEludGVycnVwdCBkb25lICglZCBsb29wcylcbiIsCisJCWRldi0+bmFtZSwgOC10aW1lb3V0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwlEQkcoMywgIiVzOiBJbnRlcnJ1cHQgZG9uZSAoJWQgbG9vcHMpXG4iLCBkZXYtPm5hbWUsIDgtdGltZW91dCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBTTUNfVVNFX0RNQQorc3RhdGljIHZvaWQKK3NtYzkxMXhfdHhfZG1hX2lycShpbnQgZG1hLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpza2IgPSBscC0+Y3VycmVudF90eF9za2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCURCRyhTTUNfREVCVUdfVFggfCBTTUNfREVCVUdfRE1BLCAiJXM6IFRYIERNQSBpcnEgaGFuZGxlclxuIiwgZGV2LT5uYW1lKTsKKwkvKiBDbGVhciB0aGUgRE1BIGludGVycnVwdCBzb3VyY2VzICovCisJU01DX0RNQV9BQ0tfSVJRKGRldiwgZG1hKTsKKwlCVUdfT04oc2tiID09IE5VTEwpOworCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdHhfZG1hYnVmLCB0eF9kbWFsZW4sIERNQV9UT19ERVZJQ0UpOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJbHAtPmN1cnJlbnRfdHhfc2tiID0gTlVMTDsKKwlpZiAobHAtPnBlbmRpbmdfdHhfc2tiICE9IE5VTEwpCisJCXNtYzkxMXhfaGFyZHdhcmVfc2VuZF9wa3QoZGV2KTsKKwllbHNlIHsKKwkJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19ETUEsCisJCQkiJXM6IE5vIHBlbmRpbmcgVHggcGFja2V0cy4gRE1BIGRpc2FibGVkXG4iLCBkZXYtPm5hbWUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJbHAtPnR4ZG1hX2FjdGl2ZSA9IDA7CisJCWlmICghbHAtPnR4X3Rocm90dGxlKSB7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlEQkcoU01DX0RFQlVHX1RYIHwgU01DX0RFQlVHX0RNQSwKKwkJIiVzOiBUWCBETUEgaXJxIGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKK30KK3N0YXRpYyB2b2lkCitzbWM5MTF4X3J4X2RtYV9pcnEoaW50IGRtYSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpza2IgPSBscC0+Y3VycmVudF9yeF9za2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcGt0czsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwlEQkcoU01DX0RFQlVHX1JYIHwgU01DX0RFQlVHX0RNQSwgIiVzOiBSWCBETUEgaXJxIGhhbmRsZXJcbiIsIGRldi0+bmFtZSk7CisJLyogQ2xlYXIgdGhlIERNQSBpbnRlcnJ1cHQgc291cmNlcyAqLworCVNNQ19ETUFfQUNLX0lSUShkZXYsIGRtYSk7CisJZG1hX3VubWFwX3NpbmdsZShOVUxMLCByeF9kbWFidWYsIHJ4X2RtYWxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlCVUdfT04oc2tiID09IE5VTEwpOworCWxwLT5jdXJyZW50X3J4X3NrYiA9IE5VTEw7CisJUFJJTlRfUEtUKHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJc2tiLT5kZXYgPSBkZXY7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwluZXRpZl9yeChza2IpOworCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJcGt0cyA9IChTTUNfR0VUX1JYX0ZJRk9fSU5GKCkgJiBSWF9GSUZPX0lORl9SWFNVU0VEXykgPj4gMTY7CisJaWYgKHBrdHMgIT0gMCkgeworCQlzbWM5MTF4X3JjdihkZXYpOworCX1lbHNlIHsKKwkJbHAtPnJ4ZG1hX2FjdGl2ZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJREJHKFNNQ19ERUJVR19SWCB8IFNNQ19ERUJVR19ETUEsCisJCSIlczogUlggRE1BIGlycSBjb21wbGV0ZWQuIERNQSBSWCBGSUZPIFBLVFMgJWRcbiIsCisJCWRldi0+bmFtZSwgcGt0cyk7Cit9CisjZW5kaWYJIC8qIFNNQ19VU0VfRE1BICovCisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoKKyAqIFBvbGxpbmcgcmVjZWl2ZSAtIHVzZWQgYnkgbmV0Y29uc29sZSBhbmQgb3RoZXIgZGlhZ25vc3RpYyB0b29scworICogdG8gYWxsb3cgbmV0d29yayBpL28gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlzbWM5MTF4X2ludGVycnVwdChkZXYtPmlycSwgZGV2LCBOVUxMKTsKKwllbmFibGVfaXJxKGRldi0+aXJxKTsKK30KKyNlbmRpZgorCisvKiBPdXIgd2F0Y2hkb2cgdGltZWQgb3V0LiBDYWxsZWQgYnkgdGhlIG5ldHdvcmtpbmcgbGF5ZXIgKi8KK3N0YXRpYyB2b2lkIHNtYzkxMXhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlpbnQgc3RhdHVzLCBtYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBTTUNfR0VUX0lOVCgpOworCW1hc2sgPSBTTUNfR0VUX0lOVF9FTigpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IElOVCAweCUwMnggTUFTSyAweCUwMnggXG4iLAorCQlkZXYtPm5hbWUsIHN0YXR1cywgbWFzayk7CisKKwkvKiBEdW1wIHRoZSBjdXJyZW50IFRYIEZJRk8gY29udGVudHMgYW5kIHJlc3RhcnQgKi8KKwltYXNrID0gU01DX0dFVF9UWF9DRkcoKTsKKwlTTUNfU0VUX1RYX0NGRyhtYXNrIHwgVFhfQ0ZHX1RYU19EVU1QXyB8IFRYX0NGR19UWERfRFVNUF8pOworCS8qCisJICogUmVjb25maWd1cmluZyB0aGUgUEhZIGRvZXNuJ3Qgc2VlbSBsaWtlIGEgYmFkIGlkZWEgaGVyZSwgYnV0CisJICogc21jOTExeF9waHlfY29uZmlndXJlKCkgY2FsbHMgbXNsZWVwKCkgd2hpY2ggY2FsbHMgc2NoZWR1bGVfdGltZW91dCgpCisJICogd2hpY2ggY2FsbHMgc2NoZWR1bGUoKS4JIEhlbmNlIHdlIHVzZSBhIHdvcmsgcXVldWUuCisJICovCisJaWYgKGxwLT5waHlfdHlwZSAhPSAwKSB7CisJCWlmIChzY2hlZHVsZV93b3JrKCZscC0+cGh5X2NvbmZpZ3VyZSkpIHsKKwkJCWxwLT53b3JrX3BlbmRpbmcgPSAxOworCQl9CisJfQorCisJLyogV2UgY2FuIGFjY2VwdCBUWCBwYWNrZXRzIGFnYWluICovCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHdpbGwsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIHBhc3NlZCB0byBpdCwKKyAqIGVpdGhlciBtYWtlIGl0IGFjY2VwdCBtdWx0aWNhc3QgcGFja2V0cywgZ28gaW50bworICogcHJvbWlzY3VvdXMgbW9kZSAoZm9yIFRDUERVTVAgYW5kIGNvdXNpbnMpIG9yIGFjY2VwdAorICogYSBzZWxlY3Qgc2V0IG9mIG11bHRpY2FzdCBwYWNrZXRzCisgKi8KK3N0YXRpYyB2b2lkIHNtYzkxMXhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBtdWx0aWNhc3RfdGFibGVbMl07CisJdW5zaWduZWQgaW50IG1jciwgdXBkYXRlX211bHRpY2FzdCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiB0YWJsZSBmb3IgZmxpcHBpbmcgdGhlIG9yZGVyIG9mIDUgYml0cyAqLworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGludmVydDVbXSA9CisJCXsweDAwLCAweDEwLCAweDA4LCAweDE4LCAweDA0LCAweDE0LCAweDBDLCAweDFDLAorCQkgMHgwMiwgMHgxMiwgMHgwQSwgMHgxQSwgMHgwNiwgMHgxNiwgMHgwRSwgMHgxRSwKKwkJIDB4MDEsIDB4MTEsIDB4MDksIDB4MTksIDB4MDUsIDB4MTUsIDB4MEQsIDB4MUQsCisJCSAweDAzLCAweDEzLCAweDBCLCAweDFCLCAweDA3LCAweDE3LCAweDBGLCAweDFGfTsKKworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJU01DX0dFVF9NQUNfQ1IobWNyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCisJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBSQ1JfUFJNU1xuIiwgZGV2LT5uYW1lKTsKKwkJbWNyIHw9IE1BQ19DUl9QUk1TXzsKKwl9CisJLyoKKwkgKiBIZXJlLCBJIGFtIHNldHRpbmcgdGhpcyB0byBhY2NlcHQgYWxsIG11bHRpY2FzdCBwYWNrZXRzLgorCSAqIEkgZG9uJ3QgbmVlZCB0byB6ZXJvIHRoZSBtdWx0aWNhc3QgdGFibGUsIGJlY2F1c2UgdGhlIGZsYWcgaXMKKwkgKiBjaGVja2VkIGJlZm9yZSB0aGUgdGFibGUgaXMKKwkgKi8KKwllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IGRldi0+bWNfY291bnQgPiAxNikgeworCQlEQkcoU01DX0RFQlVHX01JU0MsICIlczogUkNSX0FMTVVMXG4iLCBkZXYtPm5hbWUpOworCQltY3IgfD0gTUFDX0NSX01DUEFTXzsKKwl9CisKKwkvKgorCSAqIFRoaXMgc2V0cyB0aGUgaW50ZXJuYWwgaGFyZHdhcmUgdGFibGUgdG8gZmlsdGVyIG91dCB1bndhbnRlZAorCSAqIG11bHRpY2FzdCBwYWNrZXRzIGJlZm9yZSB0aGV5IHRha2UgdXAgbWVtb3J5LgorCSAqCisJICogVGhlIFNNQyBjaGlwIHVzZXMgYSBoYXNoIHRhYmxlIHdoZXJlIHRoZSBoaWdoIDYgYml0cyBvZiB0aGUgQ1JDIG9mCisJICogYWRkcmVzcyBhcmUgdGhlIG9mZnNldCBpbnRvIHRoZSB0YWJsZS4JSWYgdGhhdCBiaXQgaXMgMSwgdGhlbiB0aGUKKwkgKiBtdWx0aWNhc3QgcGFja2V0IGlzIGFjY2VwdGVkLiAgT3RoZXJ3aXNlLCBpdCdzIGRyb3BwZWQgc2lsZW50bHkuCisJICoKKwkgKiBUbyB1c2UgdGhlIDYgYml0cyBhcyBhbiBvZmZzZXQgaW50byB0aGUgdGFibGUsIHRoZSBoaWdoIDEgYml0IGlzCisJICogdGhlIG51bWJlciBvZiB0aGUgMzIgYml0IHJlZ2lzdGVyLCB3aGlsZSB0aGUgbG93IDUgYml0cyBhcmUgdGhlIGJpdAorCSAqIHdpdGhpbiB0aGF0IHJlZ2lzdGVyLgorCSAqLworCWVsc2UgaWYgKGRldi0+bWNfY291bnQpICB7CisJCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmN1cl9hZGRyOworCisJCS8qIFNldCB0aGUgSGFzaCBwZXJmZWMgbW9kZSAqLworCQltY3IgfD0gTUFDX0NSX0hQRklMVF87CisKKwkJLyogc3RhcnQgd2l0aCBhIHRhYmxlIG9mIGFsbCB6ZXJvczogcmVqZWN0IGFsbCAqLworCQltZW1zZXQobXVsdGljYXN0X3RhYmxlLCAwLCBzaXplb2YobXVsdGljYXN0X3RhYmxlKSk7CisKKwkJY3VyX2FkZHIgPSBkZXYtPm1jX2xpc3Q7CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGN1cl9hZGRyID0gY3VyX2FkZHItPm5leHQpIHsKKwkJCWludCBwb3NpdGlvbjsKKworCQkJLyogZG8gd2UgaGF2ZSBhIHBvaW50ZXIgaGVyZT8gKi8KKwkJCWlmICghY3VyX2FkZHIpCisJCQkJYnJlYWs7CisJCQkvKiBtYWtlIHN1cmUgdGhpcyBpcyBhIG11bHRpY2FzdCBhZGRyZXNzIC0KKwkJCQlzaG91bGRuJ3QgdGhpcyBiZSBhIGdpdmVuIGlmIHdlIGhhdmUgaXQgaGVyZSA/ICovCisJCQlpZiAoISgqY3VyX2FkZHItPmRtaV9hZGRyICYgMSkpCisJCQkJIGNvbnRpbnVlOworCisJCQkvKiBvbmx5IHVzZSB0aGUgbG93IG9yZGVyIGJpdHMgKi8KKwkJCXBvc2l0aW9uID0gY3JjMzJfbGUofjAsIGN1cl9hZGRyLT5kbWlfYWRkciwgNikgJiAweDNmOworCisJCQkvKiBkbyBzb21lIG1lc3N5IHN3YXBwaW5nIHRvIHB1dCB0aGUgYml0IGluIHRoZSByaWdodCBzcG90ICovCisJCQltdWx0aWNhc3RfdGFibGVbaW52ZXJ0NVtwb3NpdGlvbiYweDFGXSYweDFdIHw9CisJCQkJKDE8PGludmVydDVbKHBvc2l0aW9uPj4xKSYweDFGXSk7CisJCX0KKworCQkvKiBiZSBzdXJlIEkgZ2V0IHJpZCBvZiBmbGFncyBJIG1pZ2h0IGhhdmUgc2V0ICovCisJCW1jciAmPSB+KE1BQ19DUl9QUk1TXyB8IE1BQ19DUl9NQ1BBU18pOworCisJCS8qIG5vdywgdGhlIHRhYmxlIGNhbiBiZSBsb2FkZWQgaW50byB0aGUgY2hpcHNldCAqLworCQl1cGRhdGVfbXVsdGljYXN0ID0gMTsKKwl9IGVsc2UJIHsKKwkJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IH4oTUFDX0NSX1BSTVNffE1BQ19DUl9NQ1BBU18pXG4iLAorCQkJZGV2LT5uYW1lKTsKKwkJbWNyICY9IH4oTUFDX0NSX1BSTVNfIHwgTUFDX0NSX01DUEFTXyk7CisKKwkJLyoKKwkJICogc2luY2UgSSdtIGRpc2FibGluZyBhbGwgbXVsdGljYXN0IGVudGlyZWx5LCBJIG5lZWQgdG8KKwkJICogY2xlYXIgdGhlIG11bHRpY2FzdCBsaXN0CisJCSAqLworCQltZW1zZXQobXVsdGljYXN0X3RhYmxlLCAwLCBzaXplb2YobXVsdGljYXN0X3RhYmxlKSk7CisJCXVwZGF0ZV9tdWx0aWNhc3QgPSAxOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCVNNQ19TRVRfTUFDX0NSKG1jcik7CisJaWYgKHVwZGF0ZV9tdWx0aWNhc3QpIHsKKwkJREJHKFNNQ19ERUJVR19NSVNDLAorCQkJIiVzOiB1cGRhdGUgbWNhc3QgaGFzaCB0YWJsZSAweCUwOHggMHglMDh4XG4iLAorCQkJZGV2LT5uYW1lLCBtdWx0aWNhc3RfdGFibGVbMF0sIG11bHRpY2FzdF90YWJsZVsxXSk7CisJCVNNQ19TRVRfSEFTSEwobXVsdGljYXN0X3RhYmxlWzBdKTsKKwkJU01DX1NFVF9IQVNISChtdWx0aWNhc3RfdGFibGVbMV0pOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworfQorCisKKy8qCisgKiBPcGVuIGFuZCBJbml0aWFsaXplIHRoZSBib2FyZAorICoKKyAqIFNldCB1cCBldmVyeXRoaW5nLCByZXNldCB0aGUgY2FyZCwgZXRjLi4KKyAqLworc3RhdGljIGludAorc21jOTExeF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBhZGRyZXNzIGlzIHZhbGlkLiAgSWYgaXRzIG5vdCwgcmVmdXNlCisJICogdG8gYnJpbmcgdGhlIGRldmljZSB1cC4JIFRoZSB1c2VyIG11c3Qgc3BlY2lmeSBhbgorCSAqIGFkZHJlc3MgdXNpbmcgaWZjb25maWcgZXRoMCBodyBldGhlciB4eDp4eDp4eDp4eDp4eDp4eAorCSAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgeworCQlQUklOVEsoIiVzOiBubyB2YWxpZCBldGhlcm5ldCBodyBhZGRyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZXNldCB0aGUgaGFyZHdhcmUgKi8KKwlzbWM5MTF4X3Jlc2V0KGRldik7CisKKwkvKiBDb25maWd1cmUgdGhlIFBIWSwgaW5pdGlhbGl6ZSB0aGUgbGluayBzdGF0ZSAqLworCXNtYzkxMXhfcGh5X2NvbmZpZ3VyZShkZXYpOworCisJLyogVHVybiBvbiBUeCArIFJ4ICovCisJc21jOTExeF9lbmFibGUoZGV2KTsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNtYzkxMXhfY2xvc2UKKyAqCisgKiB0aGlzIG1ha2VzIHRoZSBib2FyZCBjbGVhbiB1cCBldmVyeXRoaW5nIHRoYXQgaXQgY2FuCisgKiBhbmQgbm90IHRhbGsgdG8gdGhlIG91dHNpZGUgd29ybGQuCSBDYXVzZWQgYnkKKyAqIGFuICdpZmNvbmZpZyBldGhYIGRvd24nCisgKi8KK3N0YXRpYyBpbnQgc21jOTExeF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKwlzbWM5MTF4X3NodXRkb3duKGRldik7CisKKwlpZiAobHAtPnBoeV90eXBlICE9IDApIHsKKwkJLyogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBubyBjYWxscyB0bworCQkgKiBzbWM5MTF4X3BoeV9jb25maWd1cmUgYXJlIHBlbmRpbmcuCisKKwkJICogZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSBjYW5ub3QgYmUgY2FsbGVkIGJlY2F1c2Ugd2UKKwkJICogYXJlIHJ1bm5pbmcgd2l0aCB0aGUgbmV0bGluayBzZW1hcGhvcmUgaGVsZCAoZnJvbQorCQkgKiBkZXZpbmV0X2lvY3RsKCkpIGFuZCB0aGUgcGVuZGluZyB3b3JrIHF1ZXVlCisJCSAqIGNvbnRhaW5zIGxpbmt3YXRjaF9ldmVudCgpIChzY2hlZHVsZWQgYnkKKwkJICogbmV0aWZfY2Fycmllcl9vZmYoKSBhYm92ZSkuIGxpbmt3YXRjaF9ldmVudCgpIGFsc28KKwkJICogd2FudHMgdGhlIG5ldGxpbmsgc2VtYXBob3JlLgorCQkgKi8KKwkJd2hpbGUgKGxwLT53b3JrX3BlbmRpbmcpCisJCQlzY2hlZHVsZSgpOworCQlzbWM5MTF4X3BoeV9wb3dlcmRvd24oZGV2LCBscC0+bWlpLnBoeV9pZCk7CisJfQorCisJaWYgKGxwLT5wZW5kaW5nX3R4X3NrYikgeworCQlkZXZfa2ZyZWVfc2tiKGxwLT5wZW5kaW5nX3R4X3NrYik7CisJCWxwLT5wZW5kaW5nX3R4X3NrYiA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBjYXJkIG9wZW4gb3IgY2xvc2VkLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNtYzkxMXhfcXVlcnlfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisKKwlyZXR1cm4gJmxwLT5zdGF0czsKK30KKworLyoKKyAqIEV0aHRvb2wgc3VwcG9ydAorICovCitzdGF0aWMgaW50CitzbWM5MTF4X2V0aHRvb2xfZ2V0c2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCByZXQsIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCWNtZC0+bWF4dHhwa3QgPSAxOworCWNtZC0+bWF4cnhwa3QgPSAxOworCisJaWYgKGxwLT5waHlfdHlwZSAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBtaWlfZXRodG9vbF9nc2V0KCZscC0+bWlpLCBjbWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkJU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX0FVSTsKKworCQlpZiAobHAtPmN0bF9yc3BlZWQgPT0gMTApCisJCQljbWQtPnNwZWVkID0gU1BFRURfMTA7CisJCWVsc2UgaWYgKGxwLT5jdGxfcnNwZWVkID09IDEwMCkKKwkJCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisKKwkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQlpZiAobHAtPm1paS5waHlfaWQ9PTEpCisJCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwkJZWxzZQorCQkJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CisJCWNtZC0+cG9ydCA9IDA7CisJCVNNQ19HRVRfUEhZX1NQRUNJQUwobHAtPm1paS5waHlfaWQsIHN0YXR1cyk7CisJCWNtZC0+ZHVwbGV4ID0KKwkJCShzdGF0dXMgJiAoUEhZX1NQRUNJQUxfU1BEXzEwRlVMTF8gfCBQSFlfU1BFQ0lBTF9TUERfMTAwRlVMTF8pKSA/CisJCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzbWM5MTF4X2V0aHRvb2xfc2V0c2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobHAtPnBoeV90eXBlICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IG1paV9ldGh0b29sX3NzZXQoJmxwLT5taWksIGNtZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJaWYgKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUgfHwKKwkJCWNtZC0+c3BlZWQgIT0gU1BFRURfMTAgfHwKKwkJCShjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJiBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgfHwKKwkJCShjbWQtPnBvcnQgIT0gUE9SVF9UUCAmJiBjbWQtPnBvcnQgIT0gUE9SVF9BVUkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbHAtPmN0bF9yZmR1cGx4ID0gY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEw7CisKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorc21jOTExeF9ldGh0b29sX2dldGRydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgQ0FSRE5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIHZlcnNpb24sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7CisJc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2LT5jbGFzc19kZXYuZGV2LT5idXNfaWQsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworfQorCitzdGF0aWMgaW50IHNtYzkxMXhfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobHAtPnBoeV90eXBlICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IG1paV9ud2F5X3Jlc3RhcnQoJmxwLT5taWkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgc21jOTExeF9ldGh0b29sX2dldG1zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gbHAtPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIHNtYzkxMXhfZXRodG9vbF9zZXRtc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlscC0+bXNnX2VuYWJsZSA9IGxldmVsOworfQorCitzdGF0aWMgaW50IHNtYzkxMXhfZXRodG9vbF9nZXRyZWdzbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogU3lzdGVtIHJlZ3MgKyBNQUMgcmVncyArIFBIWSByZWdzICovCisJcmV0dXJuICgoKEUyUF9DTUQgLSBJRF9SRVYpLzQgKyAxKSArCisJCQkoV1VDU1IgLSBNQUNfQ1IpKzEgKyAzMikgKiBzaXplb2YodTMyKTsKK30KKworc3RhdGljIHZvaWQgc21jOTExeF9ldGh0b29sX2dldHJlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCQkJCQkgc3RydWN0IGV0aHRvb2xfcmVncyogcmVncywgdm9pZCAqYnVmKQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWcsaSxqPTA7CisJdTMyICpkYXRhID0gKHUzMiopYnVmOworCisJcmVncy0+dmVyc2lvbiA9IGxwLT52ZXJzaW9uOworCWZvcihpPUlEX1JFVjtpPD1FMlBfQ01EO2krPTQpIHsKKwkJZGF0YVtqKytdID0gU01DX2lubChpb2FkZHIsaSk7CisJfQorCWZvcihpPU1BQ19DUjtpPD1XVUNTUjtpKyspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCVNNQ19HRVRfTUFDX0NTUihpLCByZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCQlkYXRhW2orK10gPSByZWc7CisJfQorCWZvcihpPTA7aTw9MzE7aSsrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlTTUNfR0VUX01JSShpLCBscC0+bWlpLnBoeV9pZCwgcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZGF0YVtqKytdID0gcmVnICYgMHhGRkZGOworCX0KK30KKworc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfd2FpdF9lZXByb21fcmVhZHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCWludCBlMnBfY21kOworCisJZTJwX2NtZCA9IFNNQ19HRVRfRTJQX0NNRCgpOworCWZvcih0aW1lb3V0PTEwOyhlMnBfY21kICYgRTJQX0NNRF9FUENfQlVTWV8pICYmIHRpbWVvdXQ7IHRpbWVvdXQtLSkgeworCQlpZiAoZTJwX2NtZCAmIEUyUF9DTURfRVBDX1RJTUVPVVRfKSB7CisJCQlQUklOVEsoIiVzOiAlcyB0aW1lb3V0IHdhaXRpbmcgZm9yIEVFUFJPTSB0byByZXNwb25kXG4iLAorCQkJCWRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCW1kZWxheSgxKTsKKwkJZTJwX2NtZCA9IFNNQ19HRVRfRTJQX0NNRCgpOworCX0KKwlpZiAodGltZW91dCA9PSAwKSB7CisJCVBSSU5USygiJXM6ICVzIHRpbWVvdXQgd2FpdGluZyBmb3IgRUVQUk9NIENNRCBub3QgYnVzeVxuIiwKKwkJCWRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbWM5MTF4X2V0aHRvb2xfd3JpdGVfZWVwcm9tX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJCQkJCQkJCWludCBjbWQsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHJldDsKKworCWlmICgocmV0ID0gc21jOTExeF9ldGh0b29sX3dhaXRfZWVwcm9tX3JlYWR5KGRldikpIT0wKQorCQlyZXR1cm4gcmV0OworCVNNQ19TRVRfRTJQX0NNRChFMlBfQ01EX0VQQ19CVVNZXyB8CisJCSgoY21kKSAmICgweDc8PDI4KSkgfAorCQkoKGFkZHIpICYgMHhGRikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbWM5MTF4X2V0aHRvb2xfcmVhZF9lZXByb21fYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJCQkJCQkJCXU4ICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHJldDsKKworCWlmICgocmV0ID0gc21jOTExeF9ldGh0b29sX3dhaXRfZWVwcm9tX3JlYWR5KGRldikpIT0wKQorCQlyZXR1cm4gcmV0OworCSpkYXRhID0gU01DX0dFVF9FMlBfREFUQSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbWM5MTF4X2V0aHRvb2xfd3JpdGVfZWVwcm9tX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCQkJCQkJCQkgdTggZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IHNtYzkxMXhfZXRodG9vbF93YWl0X2VlcHJvbV9yZWFkeShkZXYpKSE9MCkKKwkJcmV0dXJuIHJldDsKKwlTTUNfU0VUX0UyUF9EQVRBKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtYzkxMXhfZXRodG9vbF9nZXRlZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCQkJCSAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQoreworCXU4IGVlYnVmW1NNQzkxMVhfRUVQUk9NX0xFTl07CisJaW50IGksIHJldDsKKworCWZvcihpPTA7aTxTTUM5MTFYX0VFUFJPTV9MRU47aSsrKSB7CisJCWlmICgocmV0PXNtYzkxMXhfZXRodG9vbF93cml0ZV9lZXByb21fY21kKGRldiwgRTJQX0NNRF9FUENfQ01EX1JFQURfLCBpICkpIT0wKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKChyZXQ9c21jOTExeF9ldGh0b29sX3JlYWRfZWVwcm9tX2J5dGUoZGV2LCAmZWVidWZbaV0pKSE9MCkKKwkJCXJldHVybiByZXQ7CisJCX0KKwltZW1jcHkoZGF0YSwgZWVidWYrZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+bGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfc2V0ZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkJCQkgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJaW50IGksIHJldDsKKworCS8qIEVuYWJsZSBlcmFzZSAqLworCWlmICgocmV0PXNtYzkxMXhfZXRodG9vbF93cml0ZV9lZXByb21fY21kKGRldiwgRTJQX0NNRF9FUENfQ01EX0VXRU5fLCAwICkpIT0wKQorCQlyZXR1cm4gcmV0OworCWZvcihpPWVlcHJvbS0+b2Zmc2V0O2k8KGVlcHJvbS0+b2Zmc2V0K2VlcHJvbS0+bGVuKTtpKyspIHsKKwkJLyogZXJhc2UgYnl0ZSAqLworCQlpZiAoKHJldD1zbWM5MTF4X2V0aHRvb2xfd3JpdGVfZWVwcm9tX2NtZChkZXYsIEUyUF9DTURfRVBDX0NNRF9FUkFTRV8sIGkgKSkhPTApCisJCQlyZXR1cm4gcmV0OworCQkvKiB3cml0ZSBieXRlICovCisJCWlmICgocmV0PXNtYzkxMXhfZXRodG9vbF93cml0ZV9lZXByb21fYnl0ZShkZXYsICpkYXRhKSkhPTApCisJCQkgcmV0dXJuIHJldDsKKwkJaWYgKChyZXQ9c21jOTExeF9ldGh0b29sX3dyaXRlX2VlcHJvbV9jbWQoZGV2LCBFMlBfQ01EX0VQQ19DTURfV1JJVEVfLCBpICkpIT0wKQorCQkJcmV0dXJuIHJldDsKKwkJfQorCSByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCSByZXR1cm4gU01DOTExWF9FRVBST01fTEVOOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHNtYzkxMXhfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkgPSBzbWM5MTF4X2V0aHRvb2xfZ2V0c2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkgPSBzbWM5MTF4X2V0aHRvb2xfc2V0c2V0dGluZ3MsCisJLmdldF9kcnZpbmZvCSA9IHNtYzkxMXhfZXRodG9vbF9nZXRkcnZpbmZvLAorCS5nZXRfbXNnbGV2ZWwJID0gc21jOTExeF9ldGh0b29sX2dldG1zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJID0gc21jOTExeF9ldGh0b29sX3NldG1zZ2xldmVsLAorCS5ud2F5X3Jlc2V0ID0gc21jOTExeF9ldGh0b29sX253YXlyZXNldCwKKwkuZ2V0X2xpbmsJID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3JlZ3NfbGVuCSA9IHNtYzkxMXhfZXRodG9vbF9nZXRyZWdzbGVuLAorCS5nZXRfcmVncwkgPSBzbWM5MTF4X2V0aHRvb2xfZ2V0cmVncywKKwkuZ2V0X2VlcHJvbV9sZW4gPSBzbWM5MTF4X2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbSA9IHNtYzkxMXhfZXRodG9vbF9nZXRlZXByb20sCisJLnNldF9lZXByb20gPSBzbWM5MTF4X2V0aHRvb2xfc2V0ZWVwcm9tLAorfTsKKworLyoKKyAqIHNtYzkxMXhfZmluZGlycQorICoKKyAqIFRoaXMgcm91dGluZSBoYXMgYSBzaW1wbGUgcHVycG9zZSAtLSBtYWtlIHRoZSBTTUMgY2hpcCBnZW5lcmF0ZSBhbgorICogaW50ZXJydXB0LCBzbyBhbiBhdXRvLWRldGVjdCByb3V0aW5lIGNhbiBkZXRlY3QgaXQsIGFuZCBmaW5kIHRoZSBJUlEsCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNtYzkxMXhfZmluZGlycSh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgdGltZW91dCA9IDIwOworCXVuc2lnbmVkIGxvbmcgY29va2llOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiLS0+ICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJY29va2llID0gcHJvYmVfaXJxX29uKCk7CisKKwkvKgorCSAqIEZvcmNlIGEgU1cgaW50ZXJydXB0CisJICovCisKKwlTTUNfU0VUX0lOVF9FTihJTlRfRU5fU1dfSU5UX0VOXyk7CisKKwkvKgorCSAqIFdhaXQgdW50aWwgcG9zaXRpdmUgdGhhdCB0aGUgaW50ZXJydXB0IGhhcyBiZWVuIGdlbmVyYXRlZAorCSAqLworCWRvIHsKKwkJaW50IGludF9zdGF0dXM7CisJCXVkZWxheSgxMCk7CisJCWludF9zdGF0dXMgPSBTTUNfR0VUX0lOVF9FTigpOworCQlpZiAoaW50X3N0YXR1cyAmIElOVF9FTl9TV19JTlRfRU5fKQorCQkJIGJyZWFrOwkJLyogZ290IHRoZSBpbnRlcnJ1cHQgKi8KKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJLyoKKwkgKiB0aGVyZSBpcyByZWFsbHkgbm90aGluZyB0aGF0IEkgY2FuIGRvIGhlcmUgaWYgdGltZW91dCBmYWlscywKKwkgKiBhcyBhdXRvaXJxX3JlcG9ydCB3aWxsIHJldHVybiBhIDAgYW55d2F5LCB3aGljaCBpcyB3aGF0IEkKKwkgKiB3YW50IGluIHRoaXMgY2FzZS4JIFBsdXMsIHRoZSBjbGVhbiB1cCBpcyBuZWVkZWQgaW4gYm90aAorCSAqIGNhc2VzLgorCSAqLworCisJLyogYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMgYWdhaW4gKi8KKwlTTUNfU0VUX0lOVF9FTigwKTsKKworCS8qIGFuZCByZXR1cm4gd2hhdCBJIGZvdW5kICovCisJcmV0dXJuIHByb2JlX2lycV9vZmYoY29va2llKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBzbWM5MTF4X3Byb2JlKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQorICoKKyAqIFB1cnBvc2U6CisgKgkgVGVzdHMgdG8gc2VlIGlmIGEgZ2l2ZW4gaW9hZGRyIHBvaW50cyB0byBhbiBTTUM5MTF4IGNoaXAuCisgKgkgUmV0dXJucyBhIDAgb24gc3VjY2VzcworICoKKyAqIEFsZ29yaXRobToKKyAqCSAoMSkgc2VlIGlmIHRoZSBlbmRpYW4gd29yZCBpcyBPSworICoJICgxKSBzZWUgaWYgSSByZWNvZ25pemUgdGhlIGNoaXAgSUQgaW4gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVyCisgKgorICogSGVyZSBJIGRvIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gdGFza3MuCisgKgorICogbyAgSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIGlmIG5lZWRlZAorICogbyAgcHJpbnQgb3V0IG15IHZhbml0eSBtZXNzYWdlIGlmIG5vdCBkb25lIHNvIGFscmVhZHkKKyAqIG8gIHByaW50IG91dCB3aGF0IHR5cGUgb2YgaGFyZHdhcmUgaXMgZGV0ZWN0ZWQKKyAqIG8gIHByaW50IG91dCB0aGUgZXRoZXJuZXQgYWRkcmVzcworICogbyAgZmluZCB0aGUgSVJRCisgKiBvICBzZXQgdXAgbXkgcHJpdmF0ZSBkYXRhCisgKiBvICBjb25maWd1cmUgdGhlIGRldiBzdHJ1Y3R1cmUgd2l0aCBteSBzdWJyb3V0aW5lcworICogbyAgYWN0dWFsbHkgR1JBQiB0aGUgaXJxLgorICogbyAgR1JBQiB0aGUgcmVnaW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNtYzkxMXhfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaSwgcmV0dmFsOworCXVuc2lnbmVkIGludCB2YWwsIGNoaXBfaWQsIHJldmlzaW9uOworCWNvbnN0IGNoYXIgKnZlcnNpb25fc3RyaW5nOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJLyogRmlyc3QsIHNlZSBpZiB0aGUgZW5kaWFuIHdvcmQgaXMgcmVjb2duaXplZCAqLworCXZhbCA9IFNNQ19HRVRfQllURV9URVNUKCk7CisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IGVuZGlhbiBwcm9iZSByZXR1cm5lZCAweCUwNHhcbiIsIENBUkROQU1FLCB2YWwpOworCWlmICh2YWwgIT0gMHg4NzY1NDMyMSkgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgY2hpcCBlbmRpYW4gMHgwOCV4XG4iLHZhbCk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKgorCSAqIGNoZWNrIGlmIHRoZSByZXZpc2lvbiByZWdpc3RlciBpcyBzb21ldGhpbmcgdGhhdCBJCisJICogcmVjb2duaXplLglUaGVzZSBtaWdodCBuZWVkIHRvIGJlIGFkZGVkIHRvIGxhdGVyLAorCSAqIGFzIGZ1dHVyZSByZXZpc2lvbnMgY291bGQgYmUgYWRkZWQuCisJICovCisJY2hpcF9pZCA9IFNNQ19HRVRfUE4oKTsKKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogaWQgcHJvYmUgcmV0dXJuZWQgMHglMDR4XG4iLCBDQVJETkFNRSwgY2hpcF9pZCk7CisJZm9yKGk9MDtjaGlwX2lkc1tpXS5pZCAhPSAwOyBpKyspIHsKKwkJaWYgKGNoaXBfaWRzW2ldLmlkID09IGNoaXBfaWQpIGJyZWFrOworCX0KKwlpZiAoIWNoaXBfaWRzW2ldLmlkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBjaGlwIElEICUwNHhcbiIsIGNoaXBfaWQpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXZlcnNpb25fc3RyaW5nID0gY2hpcF9pZHNbaV0ubmFtZTsKKworCXJldmlzaW9uID0gU01DX0dFVF9SRVYoKTsKKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogcmV2aXNpb24gPSAweCUwNHhcbiIsIENBUkROQU1FLCByZXZpc2lvbik7CisKKwkvKiBBdCB0aGlzIHBvaW50IEknbGwgYXNzdW1lIHRoYXQgdGhlIGNoaXAgaXMgYW4gU01DOTExeC4gKi8KKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogRm91bmQgYSAlc1xuIiwgQ0FSRE5BTUUsIGNoaXBfaWRzW2ldLm5hbWUpOworCisJLyogVmFsaWRhdGUgdGhlIFRYIEZJRk8gc2l6ZSByZXF1ZXN0ZWQgKi8KKwlpZiAoKHR4X2ZpZm9fa2IgPCAyKSB8fCAodHhfZmlmb19rYiA+IDE0KSkgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgVFggRklGTyBzaXplIHJlcXVlc3RlZCAlZFxuIiwgdHhfZmlmb19rYik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKiBmaWxsIGluIHNvbWUgb2YgdGhlIGZpZWxkcyAqLworCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOworCWxwLT52ZXJzaW9uID0gY2hpcF9pZHNbaV0uaWQ7CisJbHAtPnJldmlzaW9uID0gcmV2aXNpb247CisJbHAtPnR4X2ZpZm9fa2IgPSB0eF9maWZvX2tiOworCS8qIFJldmVyc2UgY2FsY3VsYXRlIHRoZSBSWCBGSUZPIHNpemUgZnJvbSB0aGUgVFggKi8KKwlscC0+dHhfZmlmb19zaXplPShscC0+dHhfZmlmb19rYjw8MTApIC0gNTEyOworCWxwLT5yeF9maWZvX3NpemU9ICgoMHg0MDAwIC0gNTEyIC0gbHAtPnR4X2ZpZm9fc2l6ZSkgLyAxNikgKiAxNTsKKworCS8qIFNldCB0aGUgYXV0b21hdGljIGZsb3cgY29udHJvbCB2YWx1ZXMgKi8KKwlzd2l0Y2gobHAtPnR4X2ZpZm9fa2IpIHsKKwkJLyoKKwkJICoJIEFGQ19ISSBpcyBhYm91dCAoKFJ4IERhdGEgRmlmbyBTaXplKSoyLzMpLzY0CisJCSAqCSBBRkNfTE8gaXMgQUZDX0hJLzIKKwkJICoJIEJBQ0tfRFVSIGlzIGFib3V0IDV1UyooQUZDX0xPKSByb3VuZGVkIGRvd24KKwkJICovCisJCWNhc2UgMjovKiAxMzQ0MCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDhDNDZBRjticmVhazsKKwkJY2FzZSAzOi8qIDEyNDgwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwODI0MTlGO2JyZWFrOworCQljYXNlIDQ6LyogMTE1MjAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDA3ODNDOUY7YnJlYWs7CisJCWNhc2UgNTovKiAxMDU2MCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDZFMzc0RjticmVhazsKKwkJY2FzZSA2Oi8qIDk2MDAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDA2NDMyOEY7YnJlYWs7CisJCWNhc2UgNzovKiA4NjQwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwNUEyRDdGO2JyZWFrOworCQljYXNlIDg6LyogNzY4MCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDUwMjg3RjticmVhazsKKwkJY2FzZSA5Oi8qIDY3MjAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDA0NjIzNkY7YnJlYWs7CisJCWNhc2UgMTA6LyogNTc2MCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDNDMUU2RjticmVhazsKKwkJY2FzZSAxMTovKiA0ODAwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwMzIxOTVGO2JyZWFrOworCQkvKgorCQkgKgkgQUZDX0hJIGlzIH4xNTIwIGJ5dGVzIGxlc3MgdGhhbiBSWCBEYXRhIEZpZm8gU2l6ZQorCQkgKgkgQUZDX0xPIGlzIEFGQ19ISS8yCisJCSAqCSBCQUNLX0RVUiBpcyBhYm91dCA1dVMqKEFGQ19MTykgcm91bmRlZCBkb3duCisJCSAqLworCQljYXNlIDEyOi8qIDM4NDAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDAyNDEyNEY7YnJlYWs7CisJCWNhc2UgMTM6LyogMjg4MCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDE1MDczRjticmVhazsKKwkJY2FzZSAxNDovKiAxOTIwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwMDYwMzJGO2JyZWFrOworCQkgZGVmYXVsdDoKKwkJCSBQUklOVEsoIiVzOiBFUlJPUiAtLSBubyBBRkNfQ0ZHIHNldHRpbmcgZm91bmQiLAorCQkJCWRldi0+bmFtZSk7CisJCQkgYnJlYWs7CisJfQorCisJREJHKFNNQ19ERUJVR19NSVNDIHwgU01DX0RFQlVHX1RYIHwgU01DX0RFQlVHX1JYLAorCQkiJXM6IHR4X2ZpZm8gJWQgcnhfZmlmbyAlZCBhZmNfY2ZnIDB4JTA4eFxuIiwgQ0FSRE5BTUUsCisJCWxwLT50eF9maWZvX3NpemUsIGxwLT5yeF9maWZvX3NpemUsIGxwLT5hZmNfY2ZnKTsKKworCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJU01DX0dFVF9NQUNfQUREUihkZXYtPmRldl9hZGRyKTsKKworCS8qIG5vdywgcmVzZXQgdGhlIGNoaXAsIGFuZCBwdXQgaXQgaW50byBhIGtub3duIHN0YXRlICovCisJc21jOTExeF9yZXNldChkZXYpOworCisJLyoKKwkgKiBJZiBkZXYtPmlycSBpcyAwLCB0aGVuIHRoZSBkZXZpY2UgaGFzIHRvIGJlIGJhbmdlZCBvbiB0byBzZWUKKwkgKiB3aGF0IHRoZSBJUlEgaXMuCisJICoKKwkgKiBTcGVjaWZ5aW5nIGFuIElSUSBpcyBkb25lIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgdXNlciBrbm93cworCSAqIHdoYXQgKHMpaGUgaXMgZG9pbmcuICBObyBjaGVja2luZyBpcyBkb25lISEhIQorCSAqLworCWlmIChkZXYtPmlycSA8IDEpIHsKKwkJaW50IHRyaWFsczsKKworCQl0cmlhbHMgPSAzOworCQl3aGlsZSAodHJpYWxzLS0pIHsKKwkJCWRldi0+aXJxID0gc21jOTExeF9maW5kaXJxKGlvYWRkcik7CisJCQlpZiAoZGV2LT5pcnEpCisJCQkJYnJlYWs7CisJCQkvKiBraWNrIHRoZSBjYXJkIGFuZCB0cnkgYWdhaW4gKi8KKwkJCXNtYzkxMXhfcmVzZXQoZGV2KTsKKwkJfQorCX0KKwlpZiAoZGV2LT5pcnEgPT0gMCkgeworCQlwcmludGsoIiVzOiBDb3VsZG4ndCBhdXRvZGV0ZWN0IHlvdXIgSVJRLiBVc2UgaXJxPXh4LlxuIiwKKwkJCWRldi0+bmFtZSk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dDsKKwl9CisJZGV2LT5pcnEgPSBpcnFfY2Fub25pY2FsaXplKGRldi0+aXJxKTsKKworCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGV0aGVybmV0IHZhbHVlcy4gKi8KKwlldGhlcl9zZXR1cChkZXYpOworCisJZGV2LT5vcGVuID0gc21jOTExeF9vcGVuOworCWRldi0+c3RvcCA9IHNtYzkxMXhfY2xvc2U7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzbWM5MTF4X2hhcmRfc3RhcnRfeG1pdDsKKwlkZXYtPnR4X3RpbWVvdXQgPSBzbWM5MTF4X3RpbWVvdXQ7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOworCWRldi0+Z2V0X3N0YXRzID0gc21jOTExeF9xdWVyeV9zdGF0aXN0aWNzOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc21jOTExeF9zZXRfbXVsdGljYXN0X2xpc3Q7CisJZGV2LT5ldGh0b29sX29wcyA9ICZzbWM5MTF4X2V0aHRvb2xfb3BzOworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBzbWM5MTF4X3BvbGxfY29udHJvbGxlcjsKKyNlbmRpZgorCisJSU5JVF9XT1JLKCZscC0+cGh5X2NvbmZpZ3VyZSwgc21jOTExeF9waHlfY29uZmlndXJlLCBkZXYpOworCWxwLT5taWkucGh5X2lkX21hc2sgPSAweDFmOworCWxwLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKKwlscC0+bWlpLmZvcmNlX21lZGlhID0gMDsKKwlscC0+bWlpLmZ1bGxfZHVwbGV4ID0gMDsKKwlscC0+bWlpLmRldiA9IGRldjsKKwlscC0+bWlpLm1kaW9fcmVhZCA9IHNtYzkxMXhfcGh5X3JlYWQ7CisJbHAtPm1paS5tZGlvX3dyaXRlID0gc21jOTExeF9waHlfd3JpdGU7CisKKwkvKgorCSAqIExvY2F0ZSB0aGUgcGh5LCBpZiBhbnkuCisJICovCisJc21jOTExeF9waHlfZGV0ZWN0KGRldik7CisKKwkvKiBTZXQgZGVmYXVsdCBwYXJhbWV0ZXJzICovCisJbHAtPm1zZ19lbmFibGUgPSBORVRJRl9NU0dfTElOSzsKKwlscC0+Y3RsX3JmZHVwbHggPSAxOworCWxwLT5jdGxfcnNwZWVkID0gMTAwOworCisJLyogR3JhYiB0aGUgSVJRICovCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZzbWM5MTF4X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9vdXQ7CisKKwlzZXRfaXJxX3R5cGUoZGV2LT5pcnEsIElSUVRfRkFMTElORyk7CisKKyNpZmRlZiBTTUNfVVNFX0RNQQorCWxwLT5yeGRtYSA9IFNNQ19ETUFfUkVRVUVTVChkZXYsIHNtYzkxMXhfcnhfZG1hX2lycSk7CisJbHAtPnR4ZG1hID0gU01DX0RNQV9SRVFVRVNUKGRldiwgc21jOTExeF90eF9kbWFfaXJxKTsKKwlscC0+cnhkbWFfYWN0aXZlID0gMDsKKwlscC0+dHhkbWFfYWN0aXZlID0gMDsKKwlkZXYtPmRtYSA9IGxwLT5yeGRtYTsKKyNlbmRpZgorCisJcmV0dmFsID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKHJldHZhbCA9PSAwKSB7CisJCS8qIG5vdywgcHJpbnQgb3V0IHRoZSBjYXJkIGluZm8sIGluIGEgc2hvcnQgZm9ybWF0Li4gKi8KKwkJcHJpbnRrKCIlczogJXMgKHJldiAlZCkgYXQgJSNseCBJUlEgJWQiLAorCQkJZGV2LT5uYW1lLCB2ZXJzaW9uX3N0cmluZywgbHAtPnJldmlzaW9uLAorCQkJZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKKworI2lmZGVmIFNNQ19VU0VfRE1BCisJCWlmIChscC0+cnhkbWEgIT0gLTEpCisJCQlwcmludGsoIiBSWERNQSAlZCAiLCBscC0+cnhkbWEpOworCisJCWlmIChscC0+dHhkbWEgIT0gLTEpCisJCQlwcmludGsoIlRYRE1BICVkIiwgbHAtPnR4ZG1hKTsKKyNlbmRpZgorCQlwcmludGsoIlxuIik7CisJCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgeworCQkJcHJpbnRrKCIlczogSW52YWxpZCBldGhlcm5ldCBNQUMgYWRkcmVzcy4gUGxlYXNlICIKKwkJCQkJInNldCB1c2luZyBpZmNvbmZpZ1xuIiwgZGV2LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFByaW50IHRoZSBFdGhlcm5ldCBhZGRyZXNzICovCisJCQlwcmludGsoIiVzOiBFdGhlcm5ldCBhZGRyOiAiLCBkZXYtPm5hbWUpOworCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCQlwcmludGsoIiUyLjJ4OiIsIGRldi0+ZGV2X2FkZHJbaV0pOworCQkJcHJpbnRrKCIlMi4yeFxuIiwgZGV2LT5kZXZfYWRkcls1XSk7CisJCX0KKworCQlpZiAobHAtPnBoeV90eXBlID09IDApIHsKKwkJCVBSSU5USygiJXM6IE5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKKwkJfSBlbHNlIGlmICgobHAtPnBoeV90eXBlICYgfjB4ZmYpID09IExBTjkxMVhfSU5URVJOQUxfUEhZX0lEKSB7CisJCQlQUklOVEsoIiVzOiBMQU45MTF4IEludGVybmFsIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCVBSSU5USygiJXM6IEV4dGVybmFsIFBIWSAweCUwOHhcbiIsIGRldi0+bmFtZSwgbHAtPnBoeV90eXBlKTsKKwkJfQorCX0KKworZXJyX291dDoKKyNpZmRlZiBTTUNfVVNFX0RNQQorCWlmIChyZXR2YWwpIHsKKwkJaWYgKGxwLT5yeGRtYSAhPSAtMSkgeworCQkJU01DX0RNQV9GUkVFKGRldiwgbHAtPnJ4ZG1hKTsKKwkJfQorCQlpZiAobHAtPnR4ZG1hICE9IC0xKSB7CisJCQlTTUNfRE1BX0ZSRUUoZGV2LCBscC0+dHhkbWEpOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIHNtYzkxMXhfaW5pdCh2b2lkKQorICoKKyAqCSAgT3V0cHV0OgorICoJIDAgLS0+IHRoZXJlIGlzIGEgZGV2aWNlCisgKgkgYW55dGhpbmcgZWxzZSwgZXJyb3IKKyAqLworc3RhdGljIGludCBzbWM5MTF4X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCAqYWRkcjsKKwlpbnQgcmV0OworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiLS0+ICVzXG4iLCAgX19GVU5DVElPTl9fKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUmVxdWVzdCB0aGUgcmVnaW9ucy4KKwkgKi8KKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBTTUM5MTFYX0lPX0VYVEVOVCwgQ0FSRE5BTUUpKSB7CisJCSByZXQgPSAtRUJVU1k7CisJCSBnb3RvIG91dDsKKwl9CisKKwluZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBzbWM5MTF4X2xvY2FsKSk7CisJaWYgKCFuZGV2KSB7CisJCXByaW50aygiJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBkZXZpY2UuXG4iLCBDQVJETkFNRSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcmVsZWFzZV8xOworCX0KKwlTRVRfTU9EVUxFX09XTkVSKG5kZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOworCisJbmRldi0+ZG1hID0gKHVuc2lnbmVkIGNoYXIpLTE7CisJbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCWFkZHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIFNNQzkxMVhfSU9fRVhURU5UKTsKKwlpZiAoIWFkZHIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byByZWxlYXNlX2JvdGg7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmRldik7CisJcmV0ID0gc21jOTExeF9wcm9iZShuZGV2LCAodW5zaWduZWQgbG9uZylhZGRyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJCWlvdW5tYXAoYWRkcik7CityZWxlYXNlX2JvdGg6CisJCWZyZWVfbmV0ZGV2KG5kZXYpOworcmVsZWFzZV8xOgorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgU01DOTExWF9JT19FWFRFTlQpOworb3V0OgorCQlwcmludGsoIiVzOiBub3QgZm91bmQgKCVkKS5cbiIsIENBUkROQU1FLCByZXQpOworCX0KKyNpZmRlZiBTTUNfVVNFX0RNQQorCWVsc2UgeworCQlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwkJbHAtPnBoeXNhZGRyID0gcmVzLT5zdGFydDsKKwkJbHAtPmRldiA9ICZwZGV2LT5kZXY7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNtYzkxMXhfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICItLT4gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKworCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7CisKKyNpZmRlZiBTTUNfVVNFX0RNQQorCXsKKwkJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJCWlmIChscC0+cnhkbWEgIT0gLTEpIHsKKwkJCVNNQ19ETUFfRlJFRShkZXYsIGxwLT5yeGRtYSk7CisJCX0KKwkJaWYgKGxwLT50eGRtYSAhPSAtMSkgeworCQkJU01DX0RNQV9GUkVFKGRldiwgbHAtPnR4ZG1hKTsKKwkJfQorCX0KKyNlbmRpZgorCWlvdW5tYXAoKHZvaWQgKiluZGV2LT5iYXNlX2FkZHIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIFNNQzkxMVhfSU9fRVhURU5UKTsKKworCWZyZWVfbmV0ZGV2KG5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtYzkxMXhfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiLS0+ICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChuZGV2KSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpOworCQkJc21jOTExeF9zaHV0ZG93bihuZGV2KTsKKyNpZiBQT1dFUl9ET1dOCisJCQkvKiBTZXQgRDIgLSBFbmVyZ3kgZGV0ZWN0IG9ubHkgc2V0dGluZyAqLworCQkJU01DX1NFVF9QTVRfQ1RSTCgyPDwxMik7CisjZW5kaWYKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIi0tPiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAobmRldikgeworCQlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQkJc21jOTExeF9yZXNldChuZGV2KTsKKwkJCXNtYzkxMXhfZW5hYmxlKG5kZXYpOworCQkJaWYgKGxwLT5waHlfdHlwZSAhPSAwKQorCQkJCXNtYzkxMXhfcGh5X2NvbmZpZ3VyZShuZGV2KTsKKwkJCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtYzkxMXhfZHJpdmVyID0geworCS5wcm9iZQkJID0gc21jOTExeF9kcnZfcHJvYmUsCisJLnJlbW92ZQkgPSBzbWM5MTF4X2Rydl9yZW1vdmUsCisJLnN1c3BlbmQJID0gc21jOTExeF9kcnZfc3VzcGVuZCwKKwkucmVzdW1lCSA9IHNtYzkxMXhfZHJ2X3Jlc3VtZSwKKwkuZHJpdmVyCSA9IHsKKwkJLm5hbWUJID0gQ0FSRE5BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNtYzkxMXhfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNtYzkxMXhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNtYzkxMXhfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbWM5MTF4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNtYzkxMXhfaW5pdCk7Cittb2R1bGVfZXhpdChzbWM5MTF4X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5oIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmE3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKQEAgLTAsMCArMSw4MzUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLiBzbWM5MTF4LmggLSBtYWNyb3MgZm9yIFNNU0MncyBMQU45MTF7NSw2LDcsOH0gc2luZ2xlLWNoaXAgRXRoZXJuZXQgZGV2aWNlLgorIC4KKyAuIENvcHlyaWdodCAoQykgMjAwNSBTZW5zb3JpYSBDb3JwLgorIC4gRGVyaXZlZCBmcm9tIHRoZSB1bmlmaWVkIFNNQzkxeCBkcml2ZXIgYnkgTmljb2xhcyBQaXRyZQorIC4KKyAuIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgLiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIC4gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAuIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgLgorIC4gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgLiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIC4gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIC4gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAuCisgLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIC4gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAuIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAuCisgLiBJbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBmaWxlIHdhcyBvYnRhaW5lZCBmcm9tIHRoZSBMQU45MTE4CisgLiBtYW51YWwgZnJvbSBTTUMuICBUbyBnZXQgYSBjb3B5LCBpZiB5b3UgcmVhbGx5IHdhbnQgb25lLCB5b3UgY2FuIGZpbmQKKyAuIGluZm9ybWF0aW9uIHVuZGVyIHd3dy5zbXNjLmNvbS4KKyAuCisgLiBBdXRob3JzCisgLgkgRHVzdGluIE1jSW50aXJlCQkgPGR1c3RpbkBzZW5zb3JpYS5jb20+CisgLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZuZGVmIF9TTUM5MTFYX0hfCisjZGVmaW5lIF9TTUM5MTFYX0hfCisKKy8qCisgKiBVc2UgdGhlIERNQSBmZWF0dXJlIG9uIFBYQSBjaGlwcworICovCisjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCisgICNkZWZpbmUgU01DX1VTRV9QWEFfRE1BCTEKKyAgI2RlZmluZSBTTUNfVVNFXzE2QklUCQkwCisgICNkZWZpbmUgU01DX1VTRV8zMkJJVAkJMQorI2VuZGlmCisKKworLyoKKyAqIERlZmluZSB0aGUgYnVzIHdpZHRoIHNwZWNpZmljIElPIG1hY3JvcworICovCisKKyNpZglTTUNfVVNFXzE2QklUCisjZGVmaW5lIFNNQ19pbmIoYSwgcikJCQkgcmVhZGIoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW53KGEsIHIpCQkJIHJlYWR3KChhKSArIChyKSkKKyNkZWZpbmUgU01DX2lubChhLCByKQkJCSAoKFNNQ19pbncoYSwgcikgJiAweEZGRkYpKyhTTUNfaW53KGErMiwgcik8PDE2KSkKKyNkZWZpbmUgU01DX291dGIodiwgYSwgcikJCSB3cml0ZWIodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKQkJIHdyaXRldyh2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRsKHYsIGEsIHIpIAkJCSBcCisJZG97CQkJCQkgXAorCQkgd3JpdGVsKHYgJiAweEZGRkYsIChhKSArIChyKSk7CSBcCisJCSB3cml0ZWwodiA+PiAxNiwgKGEpICsgKHIpICsgMik7IFwKKwkgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJIHJlYWRzdygoc2hvcnQqKSgoYSkgKyAocikpLCBwLCBsKjIpCisjZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKQkgd3JpdGVzdygoc2hvcnQqKSgoYSkgKyAocikpLCBwLCBsKjIpCisKKyNlbGlmCVNNQ19VU0VfMzJCSVQKKyNkZWZpbmUgU01DX2luYihhLCByKQkJIHJlYWRiKChhKSArIChyKSkKKyNkZWZpbmUgU01DX2ludyhhLCByKQkJIHJlYWR3KChhKSArIChyKSkKKyNkZWZpbmUgU01DX2lubChhLCByKQkJIHJlYWRsKChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dGIodiwgYSwgcikJIHdyaXRlYih2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRsKHYsIGEsIHIpCSB3cml0ZWwodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKQkgcmVhZHNsKChpbnQqKSgoYSkgKyAocikpLCBwLCBsKQorI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJIHdyaXRlc2woKGludCopKChhKSArIChyKSksIHAsIGwpCisKKyNlbmRpZiAvKiBTTUNfVVNFXzE2QklUICovCisKKworCisjaWYJIFNNQ19VU0VfUFhBX0RNQQorI2RlZmluZSBTTUNfVVNFX0RNQQorCisvKgorICogRGVmaW5lIHRoZSByZXF1ZXN0IGFuZCBmcmVlIGZ1bmN0aW9ucworICogVGhlc2UgYXJlIHVuZm9ydHVuYXRlbHkgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFzIG5vIGdlbmVyaWMgYWxsb2NhdGlvbgorICogbWVjaGFuaXNtIGV4aXRzCisgKi8KKyNkZWZpbmUgU01DX0RNQV9SRVFVRVNUKGRldiwgaGFuZGxlcikgXAorCSBweGFfcmVxdWVzdF9kbWEoZGV2LT5uYW1lLCBETUFfUFJJT19MT1csIGhhbmRsZXIsIGRldikKKworI2RlZmluZSBTTUNfRE1BX0ZSRUUoZGV2LCBkbWEpIFwKKwkgcHhhX2ZyZWVfZG1hKGRtYSkKKworI2RlZmluZSBTTUNfRE1BX0FDS19JUlEoZGV2LCBkbWEpCQkJCQlcCit7CQkJCQkJCQkJXAorCWlmIChEQ1NSKGRtYSkgJiBEQ1NSX0JVU0VSUikgewkJCQkJXAorCQlwcmludGsoIiVzOiBETUEgJWQgYnVzIGVycm9yIVxuIiwgZGV2LT5uYW1lLCBkbWEpOwlcCisJfQkJCQkJCQkJXAorCURDU1IoZG1hKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsJCVwKK30KKworLyoKKyAqIFVzZSBhIERNQSBmb3IgUlggYW5kIFRYIHBhY2tldHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCitzdGF0aWMgZG1hX2FkZHJfdCByeF9kbWFidWYsIHR4X2RtYWJ1ZjsKK3N0YXRpYyBpbnQgcnhfZG1hbGVuLCB0eF9kbWFsZW47CisKKyNpZmRlZiBTTUNfaW5zbAorI3VuZGVmIFNNQ19pbnNsCisjZGVmaW5lIFNNQ19pbnNsKGEsIHIsIHAsIGwpIFwKKwlzbWNfcHhhX2RtYV9pbnNsKGxwLT5kZXYsIGEsIGxwLT5waHlzYWRkciwgciwgbHAtPnJ4ZG1hLCBwLCBsKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NtY19weGFfZG1hX2luc2woc3RydWN0IGRldmljZSAqZGV2LCB1X2xvbmcgaW9hZGRyLCB1X2xvbmcgcGh5c2FkZHIsCisJCWludCByZWcsIGludCBkbWEsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCS8qIDY0IGJpdCBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSB0byBtZW1vcnkgRE1BICovCisJaWYgKChsb25nKWJ1ZiAmIDQpIHsKKwkJKigodTMyICopYnVmKSA9IFNNQ19pbmwoaW9hZGRyLCByZWcpOworCQlidWYgKz0gNDsKKwkJbGVuLS07CisJfQorCisJbGVuICo9IDQ7CisJcnhfZG1hYnVmID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWYsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlyeF9kbWFsZW4gPSBsZW47CisJRENTUihkbWEpID0gRENTUl9OT0RFU0M7CisJRFRBRFIoZG1hKSA9IHJ4X2RtYWJ1ZjsKKwlEU0FEUihkbWEpID0gcGh5c2FkZHIgKyByZWc7CisJRENNRChkbWEpID0gKERDTURfSU5DVFJHQUREUiB8IERDTURfQlVSU1QzMiB8CisJCURDTURfV0lEVEg0IHwgRENNRF9FTkRJUlFFTiB8IChEQ01EX0xFTkdUSCAmIHJ4X2RtYWxlbikpOworCURDU1IoZG1hKSA9IERDU1JfTk9ERVNDIHwgRENTUl9SVU47Cit9CisjZW5kaWYKKworI2lmZGVmIFNNQ19pbnN3CisjdW5kZWYgU01DX2luc3cKKyNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkgXAorCXNtY19weGFfZG1hX2luc3cobHAtPmRldiwgYSwgbHAtPnBoeXNhZGRyLCByLCBscC0+cnhkbWEsIHAsIGwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc21jX3B4YV9kbWFfaW5zdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVfbG9uZyBpb2FkZHIsIHVfbG9uZyBwaHlzYWRkciwKKwkJaW50IHJlZywgaW50IGRtYSwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJLyogNjQgYml0IGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgbWVtb3J5IHRvIG1lbW9yeSBETUEgKi8KKwl3aGlsZSAoKGxvbmcpYnVmICYgNikgeworCQkqKCh1MTYgKilidWYpID0gU01DX2ludyhpb2FkZHIsIHJlZyk7CisJCWJ1ZiArPSAyOworCQlsZW4tLTsKKwl9CisKKwlsZW4gKj0gMjsKKwlyeF9kbWFidWYgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCXJ4X2RtYWxlbiA9IGxlbjsKKwlEQ1NSKGRtYSkgPSBEQ1NSX05PREVTQzsKKwlEVEFEUihkbWEpID0gcnhfZG1hYnVmOworCURTQURSKGRtYSkgPSBwaHlzYWRkciArIHJlZzsKKwlEQ01EKGRtYSkgPSAoRENNRF9JTkNUUkdBRERSIHwgRENNRF9CVVJTVDMyIHwKKwkJRENNRF9XSURUSDIgfCBEQ01EX0VORElSUUVOIHwgKERDTURfTEVOR1RIICYgcnhfZG1hbGVuKSk7CisJRENTUihkbWEpID0gRENTUl9OT0RFU0MgfCBEQ1NSX1JVTjsKK30KKyNlbmRpZgorCisjaWZkZWYgU01DX291dHNsCisjdW5kZWYgU01DX291dHNsCisjZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKSBcCisJIHNtY19weGFfZG1hX291dHNsKGxwLT5kZXYsIGEsIGxwLT5waHlzYWRkciwgciwgbHAtPnR4ZG1hLCBwLCBsKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NtY19weGFfZG1hX291dHNsKHN0cnVjdCBkZXZpY2UgKmRldiwgdV9sb25nIGlvYWRkciwgdV9sb25nIHBoeXNhZGRyLAorCQlpbnQgcmVnLCBpbnQgZG1hLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwkvKiA2NCBiaXQgYWxpZ25tZW50IGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgdG8gbWVtb3J5IERNQSAqLworCWlmICgobG9uZylidWYgJiA0KSB7CisJCVNNQ19vdXRsKCooKHUzMiAqKWJ1ZiksIGlvYWRkciwgcmVnKTsKKwkJYnVmICs9IDQ7CisJCWxlbi0tOworCX0KKworCWxlbiAqPSA0OworCXR4X2RtYWJ1ZiA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYnVmLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCXR4X2RtYWxlbiA9IGxlbjsKKwlEQ1NSKGRtYSkgPSBEQ1NSX05PREVTQzsKKwlEU0FEUihkbWEpID0gdHhfZG1hYnVmOworCURUQURSKGRtYSkgPSBwaHlzYWRkciArIHJlZzsKKwlEQ01EKGRtYSkgPSAoRENNRF9JTkNTUkNBRERSIHwgRENNRF9CVVJTVDMyIHwKKwkJRENNRF9XSURUSDQgfCBEQ01EX0VORElSUUVOIHwgKERDTURfTEVOR1RIICYgdHhfZG1hbGVuKSk7CisJRENTUihkbWEpID0gRENTUl9OT0RFU0MgfCBEQ1NSX1JVTjsKK30KKyNlbmRpZgorCisjaWZkZWYgU01DX291dHN3CisjdW5kZWYgU01DX291dHN3CisjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKSBcCisJc21jX3B4YV9kbWFfb3V0c3cobHAtPmRldiwgYSwgbHAtPnBoeXNhZGRyLCByLCBscC0+dHhkbWEsIHAsIGwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc21jX3B4YV9kbWFfb3V0c3coc3RydWN0IGRldmljZSAqZGV2LCB1X2xvbmcgaW9hZGRyLCB1X2xvbmcgcGh5c2FkZHIsCisJCSAgaW50IHJlZywgaW50IGRtYSwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJLyogNjQgYml0IGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgbWVtb3J5IHRvIG1lbW9yeSBETUEgKi8KKwl3aGlsZSAoKGxvbmcpYnVmICYgNikgeworCQlTTUNfb3V0dygqKCh1MTYgKilidWYpLCBpb2FkZHIsIHJlZyk7CisJCWJ1ZiArPSAyOworCQlsZW4tLTsKKwl9CisKKwlsZW4gKj0gMjsKKwl0eF9kbWFidWYgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgbGVuLCBETUFfVE9fREVWSUNFKTsKKwl0eF9kbWFsZW4gPSBsZW47CisJRENTUihkbWEpID0gRENTUl9OT0RFU0M7CisJRFNBRFIoZG1hKSA9IHR4X2RtYWJ1ZjsKKwlEVEFEUihkbWEpID0gcGh5c2FkZHIgKyByZWc7CisJRENNRChkbWEpID0gKERDTURfSU5DU1JDQUREUiB8IERDTURfQlVSU1QzMiB8CisJCURDTURfV0lEVEgyIHwgRENNRF9FTkRJUlFFTiB8IChEQ01EX0xFTkdUSCAmIHR4X2RtYWxlbikpOworCURDU1IoZG1hKSA9IERDU1JfTk9ERVNDIHwgRENTUl9SVU47Cit9CisjZW5kaWYKKworI2VuZGlmCSAvKiBTTUNfVVNFX1BYQV9ETUEgKi8KKworCisvKiBDaGlwIFBhcmFtZXRlcnMgYW5kIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisKKyNkZWZpbmUgU01DOTExWF9UWF9GSUZPX0xPV19USFJFU0hPTEQJKDE1MzYqMikKKworI2RlZmluZSBTTUM5MTFYX0lPX0VYVEVOVAkgMHgxMDAKKworI2RlZmluZSBTTUM5MTFYX0VFUFJPTV9MRU4JIDcKKworLyogQmVsb3cgYXJlIHRoZSByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXQgZGVmaW5pdGlvbnMKKyAqIG9mIHRoZSBMYW45MTF4IG1lbW9yeSBzcGFjZQorICovCisjZGVmaW5lIFJYX0RBVEFfRklGTwkJICgweDAwKQorCisjZGVmaW5lIFRYX0RBVEFfRklGTwkJICgweDIwKQorI2RlZmluZQlUWF9DTURfQV9JTlRfT05fQ09NUF8JCSgweDgwMDAwMDAwKQorI2RlZmluZQlUWF9DTURfQV9JTlRfQlVGX0VORF9BTEdOXwkoMHgwMzAwMDAwMCkKKyNkZWZpbmUJVFhfQ01EX0FfSU5UXzRfQllURV9BTEdOXwkoMHgwMDAwMDAwMCkKKyNkZWZpbmUJVFhfQ01EX0FfSU5UXzE2X0JZVEVfQUxHTl8JKDB4MDEwMDAwMDApCisjZGVmaW5lCVRYX0NNRF9BX0lOVF8zMl9CWVRFX0FMR05fCSgweDAyMDAwMDAwKQorI2RlZmluZQlUWF9DTURfQV9JTlRfREFUQV9PRkZTRVRfCSgweDAwMUYwMDAwKQorI2RlZmluZQlUWF9DTURfQV9JTlRfRklSU1RfU0VHXwkJKDB4MDAwMDIwMDApCisjZGVmaW5lCVRYX0NNRF9BX0lOVF9MQVNUX1NFR18JCSgweDAwMDAxMDAwKQorI2RlZmluZQlUWF9DTURfQV9CVUZfU0laRV8JCSgweDAwMDAwN0ZGKQorI2RlZmluZQlUWF9DTURfQl9QS1RfVEFHXwkJKDB4RkZGRjAwMDApCisjZGVmaW5lCVRYX0NNRF9CX0FERF9DUkNfRElTQUJMRV8JKDB4MDAwMDIwMDApCisjZGVmaW5lCVRYX0NNRF9CX0RJU0FCTEVfUEFERElOR18JKDB4MDAwMDEwMDApCisjZGVmaW5lCVRYX0NNRF9CX1BLVF9CWVRFX0xFTkdUSF8JKDB4MDAwMDA3RkYpCisKKyNkZWZpbmUgUlhfU1RBVFVTX0ZJRk8JCSgweDQwKQorI2RlZmluZQlSWF9TVFNfUEtUX0xFTl8JCQkoMHgzRkZGMDAwMCkKKyNkZWZpbmUJUlhfU1RTX0VTXwkJCSgweDAwMDA4MDAwKQorI2RlZmluZQlSWF9TVFNfQkNTVF8JCQkoMHgwMDAwMjAwMCkKKyNkZWZpbmUJUlhfU1RTX0xFTl9FUlJfCQkJKDB4MDAwMDEwMDApCisjZGVmaW5lCVJYX1NUU19SVU5UX0VSUl8JCSgweDAwMDAwODAwKQorI2RlZmluZQlSWF9TVFNfTUNBU1RfCQkJKDB4MDAwMDA0MDApCisjZGVmaW5lCVJYX1NUU19UT09fTE9OR18JCSgweDAwMDAwMDgwKQorI2RlZmluZQlSWF9TVFNfQ09MTF8JCQkoMHgwMDAwMDA0MCkKKyNkZWZpbmUJUlhfU1RTX0VUSF9UWVBFXwkJKDB4MDAwMDAwMjApCisjZGVmaW5lCVJYX1NUU19XRE9HX1RNVF8JCSgweDAwMDAwMDEwKQorI2RlZmluZQlSWF9TVFNfTUlJX0VSUl8JCQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUJUlhfU1RTX0RSSUJCTElOR18JCSgweDAwMDAwMDA0KQorI2RlZmluZQlSWF9TVFNfQ1JDX0VSUl8JCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgUlhfU1RBVFVTX0ZJRk9fUEVFSyAJKDB4NDQpCisjZGVmaW5lIFRYX1NUQVRVU19GSUZPCQkoMHg0OCkKKyNkZWZpbmUJVFhfU1RTX1RBR18JCQkoMHhGRkZGMDAwMCkKKyNkZWZpbmUJVFhfU1RTX0VTXwkJCSgweDAwMDA4MDAwKQorI2RlZmluZQlUWF9TVFNfTE9DXwkJCSgweDAwMDAwODAwKQorI2RlZmluZQlUWF9TVFNfTk9fQ0FSUl8JCQkoMHgwMDAwMDQwMCkKKyNkZWZpbmUJVFhfU1RTX0xBVEVfQ09MTF8JCSgweDAwMDAwMjAwKQorI2RlZmluZQlUWF9TVFNfTUFOWV9DT0xMXwkJKDB4MDAwMDAxMDApCisjZGVmaW5lCVRYX1NUU19DT0xMX0NOVF8JCSgweDAwMDAwMDc4KQorI2RlZmluZQlUWF9TVFNfTUFOWV9ERUZFUl8JCSgweDAwMDAwMDA0KQorI2RlZmluZQlUWF9TVFNfVU5ERVJSVU5fCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUJVFhfU1RTX0RFRkVSUkVEXwkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRYX1NUQVRVU19GSUZPX1BFRUsJKDB4NEMpCisjZGVmaW5lIElEX1JFVgkJCSgweDUwKQorI2RlZmluZQlJRF9SRVZfQ0hJUF9JRF8JCQkoMHhGRkZGMDAwMCkgIC8qIFJPICovCisjZGVmaW5lCUlEX1JFVl9SRVZfSURfCQkJKDB4MDAwMEZGRkYpICAvKiBSTyAqLworCisjZGVmaW5lIElOVF9DRkcJCQkoMHg1NCkKKyNkZWZpbmUJSU5UX0NGR19JTlRfREVBU18JCSgweEZGMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9DRkdfSU5UX0RFQVNfQ0xSXwkJKDB4MDAwMDQwMDApCisjZGVmaW5lCUlOVF9DRkdfSU5UX0RFQVNfU1RTXwkJKDB4MDAwMDIwMDApCisjZGVmaW5lCUlOVF9DRkdfSVJRX0lOVF8JCSgweDAwMDAxMDAwKSAgLyogUk8gKi8KKyNkZWZpbmUJSU5UX0NGR19JUlFfRU5fCQkJKDB4MDAwMDAxMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0NGR19JUlFfUE9MXwkJKDB4MDAwMDAwMTApICAvKiBSL1cgTm90IEFmZmVjdGVkIGJ5IFNXIFJlc2V0ICovCisjZGVmaW5lCUlOVF9DRkdfSVJRX1RZUEVfCQkoMHgwMDAwMDAwMSkgIC8qIFIvVyBOb3QgQWZmZWN0ZWQgYnkgU1cgUmVzZXQgKi8KKworI2RlZmluZSBJTlRfU1RTCQkJKDB4NTgpCisjZGVmaW5lCUlOVF9TVFNfU1dfSU5UXwkJCSgweDgwMDAwMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1RYU1RPUF9JTlRfCQkoMHgwMjAwMDAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19SWFNUT1BfSU5UXwkJKDB4MDEwMDAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUlhERkhfSU5UXwkJKDB4MDA4MDAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUlhERl9JTlRfCQkoMHgwMDQwMDAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19UWF9JT0NfCQkJKDB4MDAyMDAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUlhEX0lOVF8JCSgweDAwMTAwMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX0dQVF9JTlRfCQkoMHgwMDA4MDAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19QSFlfSU5UXwkJKDB4MDAwNDAwMDApICAvKiBSTyAqLworI2RlZmluZQlJTlRfU1RTX1BNRV9JTlRfCQkoMHgwMDAyMDAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19UWFNPXwkJCSgweDAwMDEwMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1JXVF8JCQkoMHgwMDAwODAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19SWEVfCQkJKDB4MDAwMDQwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfVFhFXwkJCSgweDAwMDAyMDAwKSAgLyogUi9XQyAqLworLy8jZGVmaW5lCUlOVF9TVFNfRVJYXwkJKDB4MDAwMDEwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfVERGVV8JCQkoMHgwMDAwMDgwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19UREZPXwkJCSgweDAwMDAwNDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1RERkFfCQkJKDB4MDAwMDAyMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfVFNGRl8JCQkoMHgwMDAwMDEwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19UU0ZMXwkJCSgweDAwMDAwMDgwKSAgLyogUi9XQyAqLworLy8jZGVmaW5lCUlOVF9TVFNfUlhERl8JCSgweDAwMDAwMDQwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1JERk9fCQkJKDB4MDAwMDAwNDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUkRGTF8JCQkoMHgwMDAwMDAyMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19SU0ZGXwkJCSgweDAwMDAwMDEwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1JTRkxfCQkJKDB4MDAwMDAwMDgpICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfR1BJTzJfSU5UXwkJKDB4MDAwMDAwMDQpICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfR1BJTzFfSU5UXwkJKDB4MDAwMDAwMDIpICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfR1BJTzBfSU5UXwkJKDB4MDAwMDAwMDEpICAvKiBSL1dDICovCisKKyNkZWZpbmUgSU5UX0VOCQkJKDB4NUMpCisjZGVmaW5lCUlOVF9FTl9TV19JTlRfRU5fCQkoMHg4MDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fVFhTVE9QX0lOVF9FTl8JCSgweDAyMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9SWFNUT1BfSU5UX0VOXwkJKDB4MDEwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1JYREZIX0lOVF9FTl8JCSgweDAwODAwMDAwKSAgLyogUi9XICovCisvLyNkZWZpbmUJSU5UX0VOX1JYREZfSU5UX0VOXwkJKDB4MDA0MDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RJT0NfSU5UX0VOXwkJKDB4MDAyMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1JYRF9JTlRfRU5fCQkoMHgwMDEwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fR1BUX0lOVF9FTl8JCSgweDAwMDgwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9QSFlfSU5UX0VOXwkJKDB4MDAwNDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1BNRV9JTlRfRU5fCQkoMHgwMDAyMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fVFhTT19FTl8JCQkoMHgwMDAxMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUldUX0VOXwkJCSgweDAwMDA4MDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9SWEVfRU5fCQkJKDB4MDAwMDQwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RYRV9FTl8JCQkoMHgwMDAwMjAwMCkgIC8qIFIvVyAqLworLy8jZGVmaW5lCUlOVF9FTl9FUlhfRU5fCQkJKDB4MDAwMDEwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RERlVfRU5fCQkJKDB4MDAwMDA4MDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RERk9fRU5fCQkJKDB4MDAwMDA0MDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RERkFfRU5fCQkJKDB4MDAwMDAyMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RTRkZfRU5fCQkJKDB4MDAwMDAxMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RTRkxfRU5fCQkJKDB4MDAwMDAwODApICAvKiBSL1cgKi8KKy8vI2RlZmluZQlJTlRfRU5fUlhERl9FTl8JCQkoMHgwMDAwMDA0MCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUkRGT19FTl8JCQkoMHgwMDAwMDA0MCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUkRGTF9FTl8JCQkoMHgwMDAwMDAyMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUlNGRl9FTl8JCQkoMHgwMDAwMDAxMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUlNGTF9FTl8JCQkoMHgwMDAwMDAwOCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fR1BJTzJfSU5UXwkJKDB4MDAwMDAwMDQpICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX0dQSU8xX0lOVF8JCSgweDAwMDAwMDAyKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9HUElPMF9JTlRfCQkoMHgwMDAwMDAwMSkgIC8qIFIvVyAqLworCisjZGVmaW5lIEJZVEVfVEVTVAkJKDB4NjQpCisjZGVmaW5lIEZJRk9fSU5UCQkoMHg2OCkKKyNkZWZpbmUJRklGT19JTlRfVFhfQVZBSUxfTEVWRUxfCSgweEZGMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUZJRk9fSU5UX1RYX1NUU19MRVZFTF8JCSgweDAwRkYwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUZJRk9fSU5UX1JYX0FWQUlMX0xFVkVMXwkoMHgwMDAwRkYwMCkgIC8qIFIvVyAqLworI2RlZmluZQlGSUZPX0lOVF9SWF9TVFNfTEVWRUxfCQkoMHgwMDAwMDBGRikgIC8qIFIvVyAqLworCisjZGVmaW5lIFJYX0NGRwkJCSgweDZDKQorI2RlZmluZQlSWF9DRkdfUlhfRU5EX0FMR05fCQkoMHhDMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJUlhfQ0ZHX1JYX0VORF9BTEdONF8JCSgweDAwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlSWF9DRkdfUlhfRU5EX0FMR04xNl8JCSgweDQwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlSWF9DRkdfUlhfRU5EX0FMR04zMl8JCSgweDgwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCVJYX0NGR19SWF9ETUFfQ05UXwkJKDB4MEZGRjAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJUlhfQ0ZHX1JYX0RVTVBfCQkJKDB4MDAwMDgwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJUlhfQ0ZHX1JYRE9GRl8JCQkoMHgwMDAwMUYwMCkgIC8qIFIvVyAqLworLy8jZGVmaW5lCVJYX0NGR19SWEJBRF8JCQkoMHgwMDAwMDAwMSkgIC8qIFIvVyAqLworCisjZGVmaW5lIFRYX0NGRwkJCSgweDcwKQorLy8jZGVmaW5lCVRYX0NGR19UWF9ETUFfTFZMXwkJKDB4RTAwMDAwMDApCSAvKiBSL1cgKi8KKy8vI2RlZmluZQlUWF9DRkdfVFhfRE1BX0NOVF8JCSgweDBGRkYwMDAwKQkgLyogUi9XIFNlbGYgQ2xlYXJpbmcgKi8KKyNkZWZpbmUJVFhfQ0ZHX1RYU19EVU1QXwkJKDB4MDAwMDgwMDApICAvKiBTZWxmIENsZWFyaW5nICovCisjZGVmaW5lCVRYX0NGR19UWERfRFVNUF8JCSgweDAwMDA0MDAwKSAgLyogU2VsZiBDbGVhcmluZyAqLworI2RlZmluZQlUWF9DRkdfVFhTQU9fCQkJKDB4MDAwMDAwMDQpICAvKiBSL1cgKi8KKyNkZWZpbmUJVFhfQ0ZHX1RYX09OXwkJCSgweDAwMDAwMDAyKSAgLyogUi9XICovCisjZGVmaW5lCVRYX0NGR19TVE9QX1RYXwkJCSgweDAwMDAwMDAxKSAgLyogU2VsZiBDbGVhcmluZyAqLworCisjZGVmaW5lIEhXX0NGRwkJCSgweDc0KQorI2RlZmluZQlIV19DRkdfVFRNXwkJCSgweDAwMjAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUhXX0NGR19TRl8JCQkoMHgwMDEwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlIV19DRkdfVFhfRklGX1NaXwkJKDB4MDAwRjAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSFdfQ0ZHX1RSXwkJCSgweDAwMDAzMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUhXX0NGR19QSFlfQ0xLX1NFTF8JCSgweDAwMDAwMDYwKSAgLyogUi9XICovCisjZGVmaW5lCQkgSFdfQ0ZHX1BIWV9DTEtfU0VMX0lOVF9QSFlfIAkoMHgwMDAwMDAwMCkgLyogUi9XICovCisjZGVmaW5lCQkgSFdfQ0ZHX1BIWV9DTEtfU0VMX0VYVF9QSFlfIAkoMHgwMDAwMDAyMCkgLyogUi9XICovCisjZGVmaW5lCQkgSFdfQ0ZHX1BIWV9DTEtfU0VMX0NMS19ESVNfIAkoMHgwMDAwMDA0MCkgLyogUi9XICovCisjZGVmaW5lCUhXX0NGR19TTUlfU0VMXwkJCSgweDAwMDAwMDEwKSAgLyogUi9XICovCisjZGVmaW5lCUhXX0NGR19FWFRfUEhZX0RFVF8JCSgweDAwMDAwMDA4KSAgLyogUk8gKi8KKyNkZWZpbmUJSFdfQ0ZHX0VYVF9QSFlfRU5fCQkoMHgwMDAwMDAwNCkgIC8qIFIvVyAqLworI2RlZmluZQlIV19DRkdfMzJfMTZfQklUX01PREVfCQkoMHgwMDAwMDAwNCkgIC8qIFJPICovCisjZGVmaW5lCUhXX0NGR19TUlNUX1RPXwkJCSgweDAwMDAwMDAyKSAgLyogUk8gKi8KKyNkZWZpbmUJSFdfQ0ZHX1NSU1RfCQkJKDB4MDAwMDAwMDEpICAvKiBTZWxmIENsZWFyaW5nICovCisKKyNkZWZpbmUgUlhfRFBfQ1RSTAkJKDB4NzgpCisjZGVmaW5lCVJYX0RQX0NUUkxfUlhfRkZXRF8JCSgweDgwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCVJYX0RQX0NUUkxfRkZXRF9CVVNZXwkJKDB4ODAwMDAwMDApICAvKiBSTyAqLworCisjZGVmaW5lIFJYX0ZJRk9fSU5GCQkoMHg3QykKKyNkZWZpbmUJIFJYX0ZJRk9fSU5GX1JYU1VTRURfCQkoMHgwMEZGMDAwMCkgIC8qIFJPICovCisjZGVmaW5lCSBSWF9GSUZPX0lORl9SWERVU0VEXwkJKDB4MDAwMEZGRkYpICAvKiBSTyAqLworCisjZGVmaW5lIFRYX0ZJRk9fSU5GCQkoMHg4MCkKKyNkZWZpbmUJVFhfRklGT19JTkZfVFNVU0VEXwkJKDB4MDBGRjAwMDApICAvKiBSTyAqLworI2RlZmluZQlUWF9GSUZPX0lORl9UREZSRUVfCQkoMHgwMDAwRkZGRikgIC8qIFJPICovCisKKyNkZWZpbmUgUE1UX0NUUkwJCSgweDg0KQorI2RlZmluZQlQTVRfQ1RSTF9QTV9NT0RFXwkJKDB4MDAwMDMwMDApICAvKiBTZWxmIENsZWFyaW5nICovCisjZGVmaW5lCVBNVF9DVFJMX1BIWV9SU1RfCQkoMHgwMDAwMDQwMCkgIC8qIFNlbGYgQ2xlYXJpbmcgKi8KKyNkZWZpbmUJUE1UX0NUUkxfV09MX0VOXwkJKDB4MDAwMDAyMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJUE1UX0NUUkxfRURfRU5fCQkJKDB4MDAwMDAxMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJUE1UX0NUUkxfUE1FX1RZUEVfCQkoMHgwMDAwMDA0MCkgIC8qIFIvVyBOb3QgQWZmZWN0ZWQgYnkgU1cgUmVzZXQgKi8KKyNkZWZpbmUJUE1UX0NUUkxfV1VQU18JCQkoMHgwMDAwMDAzMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJCVBNVF9DVFJMX1dVUFNfTk9XQUtFXwkJKDB4MDAwMDAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCQlQTVRfQ1RSTF9XVVBTX0VEXwkJKDB4MDAwMDAwMTApICAvKiBSL1dDICovCisjZGVmaW5lCQlQTVRfQ1RSTF9XVVBTX1dPTF8JCSgweDAwMDAwMDIwKSAgLyogUi9XQyAqLworI2RlZmluZQkJUE1UX0NUUkxfV1VQU19NVUxUSV8JCSgweDAwMDAwMDMwKSAgLyogUi9XQyAqLworI2RlZmluZQlQTVRfQ1RSTF9QTUVfSU5EXwkJKDB4MDAwMDAwMDgpICAvKiBSL1cgKi8KKyNkZWZpbmUJUE1UX0NUUkxfUE1FX1BPTF8JCSgweDAwMDAwMDA0KSAgLyogUi9XICovCisjZGVmaW5lCVBNVF9DVFJMX1BNRV9FTl8JCSgweDAwMDAwMDAyKSAgLyogUi9XIE5vdCBBZmZlY3RlZCBieSBTVyBSZXNldCAqLworI2RlZmluZQlQTVRfQ1RSTF9SRUFEWV8JCQkoMHgwMDAwMDAwMSkgIC8qIFJPICovCisKKyNkZWZpbmUgR1BJT19DRkcJCSgweDg4KQorI2RlZmluZQlHUElPX0NGR19MRUQzX0VOXwkJKDB4NDAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfTEVEMl9FTl8JCSgweDIwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0xFRDFfRU5fCQkoMHgxMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19HUElPMl9JTlRfUE9MXwkJKDB4MDQwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJTzFfSU5UX1BPTF8JCSgweDAyMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU8wX0lOVF9QT0xfCQkoMHgwMTAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19FRVBSX0VOXwkJKDB4MDA3MDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0JVRjJfCQkoMHgwMDA0MDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19HUElPQlVGMV8JCSgweDAwMDIwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9CVUYwXwkJKDB4MDAwMTAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0RJUjJfCQkoMHgwMDAwMDQwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19HUElPRElSMV8JCSgweDAwMDAwMjAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9ESVIwXwkJKDB4MDAwMDAxMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0Q0XwkJKDB4MDAwMDAwMTApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0QzXwkJKDB4MDAwMDAwMDgpICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0QyXwkJKDB4MDAwMDAwMDQpICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0QxXwkJKDB4MDAwMDAwMDIpICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0QwXwkJKDB4MDAwMDAwMDEpICAvKiBSL1cgKi8KKworI2RlZmluZSBHUFRfQ0ZHCQkJKDB4OEMpCisjZGVmaW5lCUdQVF9DRkdfVElNRVJfRU5fCQkoMHgyMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUFRfQ0ZHX0dQVF9MT0FEXwkJKDB4MDAwMEZGRkYpICAvKiBSL1cgKi8KKworI2RlZmluZSBHUFRfQ05UCQkJKDB4OTApCisjZGVmaW5lCUdQVF9DTlRfR1BUX0NOVF8JCSgweDAwMDBGRkZGKSAgLyogUk8gKi8KKworI2RlZmluZSBFTkRJQU4JCQkoMHg5OCkKKyNkZWZpbmUgRlJFRV9SVU4JCSgweDlDKQorI2RlZmluZSBSWF9EUk9QCQkJKDB4QTApCisjZGVmaW5lIE1BQ19DU1JfQ01ECQkoMHhBNCkKKyNkZWZpbmUJIE1BQ19DU1JfQ01EX0NTUl9CVVNZXwkJKDB4ODAwMDAwMDApICAvKiBTZWxmIENsZWFyaW5nICovCisjZGVmaW5lCSBNQUNfQ1NSX0NNRF9SX05PVF9XXwkJKDB4NDAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJIE1BQ19DU1JfQ01EX0NTUl9BRERSXwkJKDB4MDAwMDAwRkYpICAvKiBSL1cgKi8KKworI2RlZmluZSBNQUNfQ1NSX0RBVEEJCSgweEE4KQorI2RlZmluZSBBRkNfQ0ZHCQkJKDB4QUMpCisjZGVmaW5lCQlBRkNfQ0ZHX0FGQ19ISV8JCQkoMHgwMEZGMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJQUZDX0NGR19BRkNfTE9fCQkJKDB4MDAwMEZGMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJCUFGQ19DRkdfQkFDS19EVVJfCQkoMHgwMDAwMDBGMCkgIC8qIFIvVyAqLworI2RlZmluZQkJQUZDX0NGR19GQ01VTFRfCQkJKDB4MDAwMDAwMDgpICAvKiBSL1cgKi8KKyNkZWZpbmUJCUFGQ19DRkdfRkNCUkRfCQkJKDB4MDAwMDAwMDQpICAvKiBSL1cgKi8KKyNkZWZpbmUJCUFGQ19DRkdfRkNBRERfCQkJKDB4MDAwMDAwMDIpICAvKiBSL1cgKi8KKyNkZWZpbmUJCUFGQ19DRkdfRkNBTllfCQkJKDB4MDAwMDAwMDEpICAvKiBSL1cgKi8KKworI2RlZmluZSBFMlBfQ01ECQkJKDB4QjApCisjZGVmaW5lCUUyUF9DTURfRVBDX0JVU1lfCQkoMHg4MDAwMDAwMCkgIC8qIFNlbGYgQ2xlYXJpbmcgKi8KKyNkZWZpbmUJRTJQX0NNRF9FUENfQ01EXwkJCSgweDcwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlFMlBfQ01EX0VQQ19DTURfUkVBRF8JCSgweDAwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlFMlBfQ01EX0VQQ19DTURfRVdEU18JCSgweDEwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlFMlBfQ01EX0VQQ19DTURfRVdFTl8JCSgweDIwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlFMlBfQ01EX0VQQ19DTURfV1JJVEVfCQkoMHgzMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJRTJQX0NNRF9FUENfQ01EX1dSQUxfCQkoMHg0MDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJRTJQX0NNRF9FUENfQ01EX0VSQVNFXwkJKDB4NTAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJCUUyUF9DTURfRVBDX0NNRF9FUkFMXwkJKDB4NjAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJCUUyUF9DTURfRVBDX0NNRF9SRUxPQURfCQkoMHg3MDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlFMlBfQ01EX0VQQ19USU1FT1VUXwkJKDB4MDAwMDAyMDApICAvKiBSTyAqLworI2RlZmluZQlFMlBfQ01EX01BQ19BRERSX0xPQURFRF8JKDB4MDAwMDAxMDApICAvKiBSTyAqLworI2RlZmluZQlFMlBfQ01EX0VQQ19BRERSXwkJKDB4MDAwMDAwRkYpICAvKiBSL1cgKi8KKworI2RlZmluZSBFMlBfREFUQQkJKDB4QjQpCisjZGVmaW5lCUUyUF9EQVRBX0VFUFJPTV9EQVRBXwkJKDB4MDAwMDAwRkYpICAvKiBSL1cgKi8KKy8qIGVuZCBvZiBMQU4gcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0IGRlZmluaXRpb25zICovCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1BQyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKEluZGlyZWN0IEFkZHJlc3MpCisgKiBPZmZzZXQgKHRocm91Z2ggdGhlIE1BQ19DU1IgQ01EIGFuZCBEQVRBIHBvcnQpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKi8KKyNkZWZpbmUgTUFDX0NSCQkJKDB4MDEpICAvKiBSL1cgKi8KKworLyogTUFDX0NSIC0gTUFDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUFDX0NSX1JYQUxMXwkJCSgweDgwMDAwMDAwKQorLy8gVE9ETzogZGVsZXRlIHRoaXMgYml0PyBJdCBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBkYXRhIHNoZWV0LgorI2RlZmluZSBNQUNfQ1JfSEJESVNfCQkJKDB4MTAwMDAwMDApCisjZGVmaW5lIE1BQ19DUl9SQ1ZPV05fCQkJKDB4MDA4MDAwMDApCisjZGVmaW5lIE1BQ19DUl9MT09QQktfCQkJKDB4MDAyMDAwMDApCisjZGVmaW5lIE1BQ19DUl9GRFBYXwkJCSgweDAwMTAwMDAwKQorI2RlZmluZSBNQUNfQ1JfTUNQQVNfCQkJKDB4MDAwODAwMDApCisjZGVmaW5lIE1BQ19DUl9QUk1TXwkJCSgweDAwMDQwMDAwKQorI2RlZmluZSBNQUNfQ1JfSU5WRklMVF8JCQkoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTUFDX0NSX1BBU1NCQURfCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIE1BQ19DUl9IRklMVF8JCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUgTUFDX0NSX0hQRklMVF8JCQkoMHgwMDAwMjAwMCkKKyNkZWZpbmUgTUFDX0NSX0xDT0xMXwkJCSgweDAwMDAxMDAwKQorI2RlZmluZSBNQUNfQ1JfQkNBU1RfCQkJKDB4MDAwMDA4MDApCisjZGVmaW5lIE1BQ19DUl9ESVNSVFlfCQkJKDB4MDAwMDA0MDApCisjZGVmaW5lIE1BQ19DUl9QQURTVFJfCQkJKDB4MDAwMDAxMDApCisjZGVmaW5lIE1BQ19DUl9CT0xNVF9NQVNLXwkJKDB4MDAwMDAwQzApCisjZGVmaW5lIE1BQ19DUl9ERkNIS18JCQkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUFDX0NSX1RYRU5fCQkJKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1BQ19DUl9SWEVOXwkJCSgweDAwMDAwMDA0KQorCisjZGVmaW5lIEFERFJICQkJKDB4MDIpCSAgLyogUi9XIG1hc2sgMHgwMDAwRkZGRlVMICovCisjZGVmaW5lIEFERFJMCQkJKDB4MDMpCSAgLyogUi9XIG1hc2sgMHhGRkZGRkZGRlVMICovCisjZGVmaW5lIEhBU0hICQkJKDB4MDQpCSAgLyogUi9XICovCisjZGVmaW5lIEhBU0hMCQkJKDB4MDUpCSAgLyogUi9XICovCisKKyNkZWZpbmUgTUlJX0FDQwkJCSgweDA2KQkgIC8qIFIvVyAqLworI2RlZmluZSBNSUlfQUNDX1BIWV9BRERSXwkJKDB4MDAwMEY4MDApCisjZGVmaW5lIE1JSV9BQ0NfTUlJUklOREFfCQkoMHgwMDAwMDdDMCkKKyNkZWZpbmUgTUlJX0FDQ19NSUlfV1JJVEVfCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgTUlJX0FDQ19NSUlfQlVTWV8JCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIE1JSV9EQVRBCQkoMHgwNykJICAvKiBSL1cgbWFzayAweDAwMDBGRkZGVUwgKi8KKworI2RlZmluZSBGTE9XCQkJKDB4MDgpCSAgLyogUi9XICovCisjZGVmaW5lIEZMT1dfRkNQVF8JCQkoMHhGRkZGMDAwMCkKKyNkZWZpbmUgRkxPV19GQ1BBU1NfCQkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIEZMT1dfRkNFTl8JCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgRkxPV19GQ0JTWV8JCQkoMHgwMDAwMDAwMSkKKworI2RlZmluZSBWTEFOMQkJCSgweDA5KQkgIC8qIFIvVyBtYXNrIDB4MDAwMEZGRkZVTCAqLworI2RlZmluZSBWTEFOMV9WVEkxXwkJCSgweDAwMDBmZmZmKQorCisjZGVmaW5lIFZMQU4yCQkJKDB4MEEpCSAgLyogUi9XIG1hc2sgMHgwMDAwRkZGRlVMICovCisjZGVmaW5lIFZMQU4yX1ZUSTJfCQkJKDB4MDAwMGZmZmYpCisKKyNkZWZpbmUgV1VGRgkJCSgweDBCKQkgIC8qIFdPICovCisKKyNkZWZpbmUgV1VDU1IJCQkoMHgwQykJICAvKiBSL1cgKi8KKyNkZWZpbmUgV1VDU1JfR1VFXwkJCSgweDAwMDAwMjAwKQorI2RlZmluZSBXVUNTUl9XVUZSXwkJCSgweDAwMDAwMDQwKQorI2RlZmluZSBXVUNTUl9NUFJfCQkJKDB4MDAwMDAwMjApCisjZGVmaW5lIFdVQ1NSX1dBS0VfRU5fCQkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIFdVQ1NSX01QRU5fCQkJKDB4MDAwMDAwMDIpCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2hpcCBTcGVjaWZpYyBNSUkgRGVmaW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQaHkgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0IGRlZmluaXRpb25zCisgKgorICovCisKKyNkZWZpbmUgUEhZX01PREVfQ1RSTF9TVFMJKCh1MzIpMTcpCS8qIE1vZGUgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX0ZBU1RSSVBfCSAgKCh1MTYpMHg0MDAwKQorI2RlZmluZSBNT0RFX0NUUkxfU1RTX0VEUFdSRE9XTl8JICgodTE2KTB4MjAwMCkKKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX0xPV1NRRU5fCSAgICgodTE2KTB4MDgwMCkKKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX01EUFJFQlBfCSAgICgodTE2KTB4MDQwMCkKKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX0ZBUkxPT1BCQUNLXyAgKCh1MTYpMHgwMjAwKQorLy8jZGVmaW5lIE1PREVfQ1RSTF9TVFNfRkFTVEVTVF8JICAgKCh1MTYpMHgwMTAwKQorLy8jZGVmaW5lIE1PREVfQ1RSTF9TVFNfUkVGQ0xLRU5fCSAgICgodTE2KTB4MDAxMCkKKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX1BIWUFEQlBfCSAgICgodTE2KTB4MDAwOCkKKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX0ZPUkNFX0dfTElOS18gKCh1MTYpMHgwMDA0KQorI2RlZmluZSBNT0RFX0NUUkxfU1RTX0VORVJHWU9OXwkgCSgodTE2KTB4MDAwMikKKworI2RlZmluZSBQSFlfSU5UX1NSQwkJCSgodTMyKTI5KQorI2RlZmluZSBQSFlfSU5UX1NSQ19FTkVSR1lfT05fCQkJKCh1MTYpMHgwMDgwKQorI2RlZmluZSBQSFlfSU5UX1NSQ19BTkVHX0NPTVBfCQkJKCh1MTYpMHgwMDQwKQorI2RlZmluZSBQSFlfSU5UX1NSQ19SRU1PVEVfRkFVTFRfCQkoKHUxNikweDAwMjApCisjZGVmaW5lIFBIWV9JTlRfU1JDX0xJTktfRE9XTl8JCQkoKHUxNikweDAwMTApCisjZGVmaW5lIFBIWV9JTlRfU1JDX0FORUdfTFBfQUNLXwkJKCh1MTYpMHgwMDA4KQorI2RlZmluZSBQSFlfSU5UX1NSQ19QQVJfREVUX0ZBVUxUXwkJKCh1MTYpMHgwMDA0KQorI2RlZmluZSBQSFlfSU5UX1NSQ19BTkVHX1BHUlhfCQkJKCh1MTYpMHgwMDAyKQorCisjZGVmaW5lIFBIWV9JTlRfTUFTSwkJCSgodTMyKTMwKQorI2RlZmluZSBQSFlfSU5UX01BU0tfRU5FUkdZX09OXwkJCSgodTE2KTB4MDA4MCkKKyNkZWZpbmUgUEhZX0lOVF9NQVNLX0FORUdfQ09NUF8JCQkoKHUxNikweDAwNDApCisjZGVmaW5lIFBIWV9JTlRfTUFTS19SRU1PVEVfRkFVTFRfCQkoKHUxNikweDAwMjApCisjZGVmaW5lIFBIWV9JTlRfTUFTS19MSU5LX0RPV05fCQkJKCh1MTYpMHgwMDEwKQorI2RlZmluZSBQSFlfSU5UX01BU0tfQU5FR19MUF9BQ0tfCQkoKHUxNikweDAwMDgpCisjZGVmaW5lIFBIWV9JTlRfTUFTS19QQVJfREVUX0ZBVUxUXwkJKCh1MTYpMHgwMDA0KQorI2RlZmluZSBQSFlfSU5UX01BU0tfQU5FR19QR1JYXwkJCSgodTE2KTB4MDAwMikKKworI2RlZmluZSBQSFlfU1BFQ0lBTAkJCSgodTMyKTMxKQorI2RlZmluZSBQSFlfU1BFQ0lBTF9BTkVHX0RPTkVfCQkJKCh1MTYpMHgxMDAwKQorI2RlZmluZSBQSFlfU1BFQ0lBTF9SRVNfCQkJKCh1MTYpMHgwMDQwKQorI2RlZmluZSBQSFlfU1BFQ0lBTF9SRVNfTUFTS18JCQkoKHUxNikweDBGRTEpCisjZGVmaW5lIFBIWV9TUEVDSUFMX1NQRF8JCQkoKHUxNikweDAwMUMpCisjZGVmaW5lIFBIWV9TUEVDSUFMX1NQRF8xMEhBTEZfCQkJKCh1MTYpMHgwMDA0KQorI2RlZmluZSBQSFlfU1BFQ0lBTF9TUERfMTBGVUxMXwkJCSgodTE2KTB4MDAxNCkKKyNkZWZpbmUgUEhZX1NQRUNJQUxfU1BEXzEwMEhBTEZfCQkoKHUxNikweDAwMDgpCisjZGVmaW5lIFBIWV9TUEVDSUFMX1NQRF8xMDBGVUxMXwkJKCh1MTYpMHgwMDE4KQorCisjZGVmaW5lIExBTjkxMVhfSU5URVJOQUxfUEhZX0lECQkoMHgwMDA3QzAwMCkKKworLyogQ2hpcCBJRCB2YWx1ZXMgKi8KKyNkZWZpbmUgQ0hJUF85MTE1CTB4MTE1CisjZGVmaW5lIENISVBfOTExNgkweDExNgorI2RlZmluZSBDSElQXzkxMTcJMHgxMTcKKyNkZWZpbmUgQ0hJUF85MTE4CTB4MTE4CisKK3N0cnVjdCBjaGlwX2lkIHsKKwl1MTYgaWQ7CisJY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2hpcF9pZCBjaGlwX2lkc1tdID0gIHsKKwl7IENISVBfOTExNSwgIkxBTjkxMTUiIH0sCisJeyBDSElQXzkxMTYsICJMQU45MTE2IiB9LAorCXsgQ0hJUF85MTE3LCAiTEFOOTExNyIgfSwKKwl7IENISVBfOTExOCwgIkxBTjkxMTgiIH0sCisJeyAwLCBOVUxMIH0sCit9OworCisjZGVmaW5lIElTX1JFVl9BKHgpCSgoeCAmIDB4RkZGRik9PTApCisKKy8qCisgKiBNYWNyb3MgdG8gYWJzdHJhY3QgcmVnaXN0ZXIgYWNjZXNzIGFjY29yZGluZyB0byB0aGUgZGF0YSBidXMKKyAqIGNhcGFiaWxpdGllcy4gIFBsZWFzZSB1c2UgdGhvc2UgYW5kIG5vdCB0aGUgaW4vb3V0IHByaW1pdGl2ZXMuCisgKi8KKy8qIEZJRk8gcmVhZC93cml0ZSBtYWNyb3MgKi8KKyNkZWZpbmUgU01DX1BVU0hfREFUQShwLCBsKQlTTUNfb3V0c2woIGlvYWRkciwgVFhfREFUQV9GSUZPLCBwLCAobCkgPj4gMiApCisjZGVmaW5lIFNNQ19QVUxMX0RBVEEocCwgbCkJU01DX2luc2wgKCBpb2FkZHIsIFJYX0RBVEFfRklGTywgcCwgKGwpID4+IDIgKQorI2RlZmluZSBTTUNfU0VUX1RYX0ZJRk8oeCkgCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFRYX0RBVEFfRklGTyApCisjZGVmaW5lIFNNQ19HRVRfUlhfRklGTygpCVNNQ19pbmwoIGlvYWRkciwgUlhfREFUQV9GSUZPICkKKworCisvKiBJL08gbWFwcGVkIHJlZ2lzdGVyIHJlYWQvd3JpdGUgbWFjcm9zICovCisjZGVmaW5lIFNNQ19HRVRfVFhfU1RTX0ZJRk8oKQkJU01DX2lubCggaW9hZGRyLCBUWF9TVEFUVVNfRklGTyApCisjZGVmaW5lIFNNQ19HRVRfUlhfU1RTX0ZJRk8oKQkJU01DX2lubCggaW9hZGRyLCBSWF9TVEFUVVNfRklGTyApCisjZGVmaW5lIFNNQ19HRVRfUlhfU1RTX0ZJRk9fUEVFSygpCVNNQ19pbmwoIGlvYWRkciwgUlhfU1RBVFVTX0ZJRk9fUEVFSyApCisjZGVmaW5lIFNNQ19HRVRfUE4oKQkJCShTTUNfaW5sKCBpb2FkZHIsIElEX1JFViApID4+IDE2KQorI2RlZmluZSBTTUNfR0VUX1JFVigpCQkJKFNNQ19pbmwoIGlvYWRkciwgSURfUkVWICkgJiAweEZGRkYpCisjZGVmaW5lIFNNQ19HRVRfSVJRX0NGRygpCQlTTUNfaW5sKCBpb2FkZHIsIElOVF9DRkcgKQorI2RlZmluZSBTTUNfU0VUX0lSUV9DRkcoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIElOVF9DRkcgKQorI2RlZmluZSBTTUNfR0VUX0lOVCgpCQkJU01DX2lubCggaW9hZGRyLCBJTlRfU1RTICkKKyNkZWZpbmUgU01DX0FDS19JTlQoeCkJCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBJTlRfU1RTICkKKyNkZWZpbmUgU01DX0dFVF9JTlRfRU4oKQkJU01DX2lubCggaW9hZGRyLCBJTlRfRU4gKQorI2RlZmluZSBTTUNfU0VUX0lOVF9FTih4KQkJU01DX291dGwoIHgsIGlvYWRkciwgSU5UX0VOICkKKyNkZWZpbmUgU01DX0dFVF9CWVRFX1RFU1QoKQkJU01DX2lubCggaW9hZGRyLCBCWVRFX1RFU1QgKQorI2RlZmluZSBTTUNfU0VUX0JZVEVfVEVTVCh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgQllURV9URVNUICkKKyNkZWZpbmUgU01DX0dFVF9GSUZPX0lOVCgpCQlTTUNfaW5sKCBpb2FkZHIsIEZJRk9fSU5UICkKKyNkZWZpbmUgU01DX1NFVF9GSUZPX0lOVCh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgRklGT19JTlQgKQorI2RlZmluZSBTTUNfU0VUX0ZJRk9fVERBKHgpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJXAorCQlpbnQgX19tYXNrOwkJCQkJXAorCQlsb2NhbF9pcnFfc2F2ZShfX2ZsYWdzKTsJCQlcCisJCV9fbWFzayA9IFNNQ19HRVRfRklGT19JTlQoKSAmIH4oMHhGRjw8MjQpOwlcCisJCVNNQ19TRVRfRklGT19JTlQoIF9fbWFzayB8ICh4KTw8MjQgKTsJCVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoX19mbGFncyk7CQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIFNNQ19TRVRfRklGT19UU0woeCkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQlcCisJCWludCBfX21hc2s7CQkJCQlcCisJCWxvY2FsX2lycV9zYXZlKF9fZmxhZ3MpOwkJCVwKKwkJX19tYXNrID0gU01DX0dFVF9GSUZPX0lOVCgpICYgfigweEZGPDwxNik7CVwKKwkJU01DX1NFVF9GSUZPX0lOVCggX19tYXNrIHwgKCgoeCkgJiAweEZGKTw8MTYpKTsJXAorCQlsb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX1NFVF9GSUZPX1JTQSh4KQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKKwkJaW50IF9fbWFzazsJCQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJXAorCQlfX21hc2sgPSBTTUNfR0VUX0ZJRk9fSU5UKCkgJiB+KDB4RkY8PDgpOwlcCisJCVNNQ19TRVRfRklGT19JTlQoIF9fbWFzayB8ICgoKHgpICYgMHhGRik8PDgpKTsJXAorCQlsb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX1NFVF9GSUZPX1JTTCh4KQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKKwkJaW50IF9fbWFzazsJCQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJXAorCQlfX21hc2sgPSBTTUNfR0VUX0ZJRk9fSU5UKCkgJiB+MHhGRjsJCVwKKwkJU01DX1NFVF9GSUZPX0lOVCggX19tYXNrIHwgKCh4KSAmIDB4RkYpKTsJXAorCQlsb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX0dFVF9SWF9DRkcoKQkJU01DX2lubCggaW9hZGRyLCBSWF9DRkcgKQorI2RlZmluZSBTTUNfU0VUX1JYX0NGRyh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgUlhfQ0ZHICkKKyNkZWZpbmUgU01DX0dFVF9UWF9DRkcoKQkJU01DX2lubCggaW9hZGRyLCBUWF9DRkcgKQorI2RlZmluZSBTTUNfU0VUX1RYX0NGRyh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgVFhfQ0ZHICkKKyNkZWZpbmUgU01DX0dFVF9IV19DRkcoKQkJU01DX2lubCggaW9hZGRyLCBIV19DRkcgKQorI2RlZmluZSBTTUNfU0VUX0hXX0NGRyh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgSFdfQ0ZHICkKKyNkZWZpbmUgU01DX0dFVF9SWF9EUF9DVFJMKCkJCVNNQ19pbmwoIGlvYWRkciwgUlhfRFBfQ1RSTCApCisjZGVmaW5lIFNNQ19TRVRfUlhfRFBfQ1RSTCh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgUlhfRFBfQ1RSTCApCisjZGVmaW5lIFNNQ19HRVRfUE1UX0NUUkwoKQkJU01DX2lubCggaW9hZGRyLCBQTVRfQ1RSTCApCisjZGVmaW5lIFNNQ19TRVRfUE1UX0NUUkwoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFBNVF9DVFJMICkKKyNkZWZpbmUgU01DX0dFVF9HUElPX0NGRygpCQlTTUNfaW5sKCBpb2FkZHIsIEdQSU9fQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9HUElPX0NGRyh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgR1BJT19DRkcgKQorI2RlZmluZSBTTUNfR0VUX1JYX0ZJRk9fSU5GKCkJCVNNQ19pbmwoIGlvYWRkciwgUlhfRklGT19JTkYgKQorI2RlZmluZSBTTUNfU0VUX1JYX0ZJRk9fSU5GKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBSWF9GSUZPX0lORiApCisjZGVmaW5lIFNNQ19HRVRfVFhfRklGT19JTkYoKQkJU01DX2lubCggaW9hZGRyLCBUWF9GSUZPX0lORiApCisjZGVmaW5lIFNNQ19TRVRfVFhfRklGT19JTkYoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFRYX0ZJRk9fSU5GICkKKyNkZWZpbmUgU01DX0dFVF9HUFRfQ0ZHKCkJCVNNQ19pbmwoIGlvYWRkciwgR1BUX0NGRyApCisjZGVmaW5lIFNNQ19TRVRfR1BUX0NGRyh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgR1BUX0NGRyApCisjZGVmaW5lIFNNQ19HRVRfUlhfRFJPUCgpCQlTTUNfaW5sKCBpb2FkZHIsIFJYX0RST1AgKQorI2RlZmluZSBTTUNfU0VUX1JYX0RST1AoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFJYX0RST1AgKQorI2RlZmluZSBTTUNfR0VUX01BQ19DTUQoKQkJU01DX2lubCggaW9hZGRyLCBNQUNfQ1NSX0NNRCApCisjZGVmaW5lIFNNQ19TRVRfTUFDX0NNRCh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgTUFDX0NTUl9DTUQgKQorI2RlZmluZSBTTUNfR0VUX01BQ19EQVRBKCkJCVNNQ19pbmwoIGlvYWRkciwgTUFDX0NTUl9EQVRBICkKKyNkZWZpbmUgU01DX1NFVF9NQUNfREFUQSh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgTUFDX0NTUl9EQVRBICkKKyNkZWZpbmUgU01DX0dFVF9BRkNfQ0ZHKCkJCVNNQ19pbmwoIGlvYWRkciwgQUZDX0NGRyApCisjZGVmaW5lIFNNQ19TRVRfQUZDX0NGRyh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgQUZDX0NGRyApCisjZGVmaW5lIFNNQ19HRVRfRTJQX0NNRCgpCQlTTUNfaW5sKCBpb2FkZHIsIEUyUF9DTUQgKQorI2RlZmluZSBTTUNfU0VUX0UyUF9DTUQoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEUyUF9DTUQgKQorI2RlZmluZSBTTUNfR0VUX0UyUF9EQVRBKCkJCVNNQ19pbmwoIGlvYWRkciwgRTJQX0RBVEEgKQorI2RlZmluZSBTTUNfU0VUX0UyUF9EQVRBKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBFMlBfREFUQSApCisKKy8qIE1BQyByZWdpc3RlciByZWFkL3dyaXRlIG1hY3JvcyAqLworI2RlZmluZSBTTUNfR0VUX01BQ19DU1IoYSx2KQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKKwkJU01DX1NFVF9NQUNfQ01EKE1BQ19DU1JfQ01EX0NTUl9CVVNZXyB8CQkJXAorCQkJTUFDX0NTUl9DTURfUl9OT1RfV18gfCAoYSkgKTsJCQlcCisJCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKKwkJdiA9IFNNQ19HRVRfTUFDX0RBVEEoKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBTTUNfU0VUX01BQ19DU1IoYSx2KQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKKwkJU01DX1NFVF9NQUNfREFUQSh2KTsJCQkJCVwKKwkJU01DX1NFVF9NQUNfQ01EKE1BQ19DU1JfQ01EX0NTUl9CVVNZXyB8IChhKSApOwkJXAorCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX0dFVF9NQUNfQ1IoeCkJU01DX0dFVF9NQUNfQ1NSKCBNQUNfQ1IsIHggKQorI2RlZmluZSBTTUNfU0VUX01BQ19DUih4KQlTTUNfU0VUX01BQ19DU1IoIE1BQ19DUiwgeCApCisjZGVmaW5lIFNNQ19HRVRfQUREUkgoeCkJU01DX0dFVF9NQUNfQ1NSKCBBRERSSCwgeCApCisjZGVmaW5lIFNNQ19TRVRfQUREUkgoeCkJU01DX1NFVF9NQUNfQ1NSKCBBRERSSCwgeCApCisjZGVmaW5lIFNNQ19HRVRfQUREUkwoeCkJU01DX0dFVF9NQUNfQ1NSKCBBRERSTCwgeCApCisjZGVmaW5lIFNNQ19TRVRfQUREUkwoeCkJU01DX1NFVF9NQUNfQ1NSKCBBRERSTCwgeCApCisjZGVmaW5lIFNNQ19HRVRfSEFTSEgoeCkJU01DX0dFVF9NQUNfQ1NSKCBIQVNISCwgeCApCisjZGVmaW5lIFNNQ19TRVRfSEFTSEgoeCkJU01DX1NFVF9NQUNfQ1NSKCBIQVNISCwgeCApCisjZGVmaW5lIFNNQ19HRVRfSEFTSEwoeCkJU01DX0dFVF9NQUNfQ1NSKCBIQVNITCwgeCApCisjZGVmaW5lIFNNQ19TRVRfSEFTSEwoeCkJU01DX1NFVF9NQUNfQ1NSKCBIQVNITCwgeCApCisjZGVmaW5lIFNNQ19HRVRfTUlJX0FDQyh4KQlTTUNfR0VUX01BQ19DU1IoIE1JSV9BQ0MsIHggKQorI2RlZmluZSBTTUNfU0VUX01JSV9BQ0MoeCkJU01DX1NFVF9NQUNfQ1NSKCBNSUlfQUNDLCB4ICkKKyNkZWZpbmUgU01DX0dFVF9NSUlfREFUQSh4KQlTTUNfR0VUX01BQ19DU1IoIE1JSV9EQVRBLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9NSUlfREFUQSh4KQlTTUNfU0VUX01BQ19DU1IoIE1JSV9EQVRBLCB4ICkKKyNkZWZpbmUgU01DX0dFVF9GTE9XKHgpCQlTTUNfR0VUX01BQ19DU1IoIEZMT1csIHggKQorI2RlZmluZSBTTUNfU0VUX0ZMT1coeCkJCVNNQ19TRVRfTUFDX0NTUiggRkxPVywgeCApCisjZGVmaW5lIFNNQ19HRVRfVkxBTjEoeCkJU01DX0dFVF9NQUNfQ1NSKCBWTEFOMSwgeCApCisjZGVmaW5lIFNNQ19TRVRfVkxBTjEoeCkJU01DX1NFVF9NQUNfQ1NSKCBWTEFOMSwgeCApCisjZGVmaW5lIFNNQ19HRVRfVkxBTjIoeCkJU01DX0dFVF9NQUNfQ1NSKCBWTEFOMiwgeCApCisjZGVmaW5lIFNNQ19TRVRfVkxBTjIoeCkJU01DX1NFVF9NQUNfQ1NSKCBWTEFOMiwgeCApCisjZGVmaW5lIFNNQ19TRVRfV1VGRih4KQkJU01DX1NFVF9NQUNfQ1NSKCBXVUZGLCB4ICkKKyNkZWZpbmUgU01DX0dFVF9XVUNTUih4KQlTTUNfR0VUX01BQ19DU1IoIFdVQ1NSLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9XVUNTUih4KQlTTUNfU0VUX01BQ19DU1IoIFdVQ1NSLCB4ICkKKworLyogUEhZIHJlZ2lzdGVyIHJlYWQvd3JpdGUgbWFjcm9zICovCisjZGVmaW5lIFNNQ19HRVRfTUlJKGEscGh5LHYpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXUzMiBfX3Y7CQkJCQlcCisJCWRvIHsJCQkJCQlcCisJCQlTTUNfR0VUX01JSV9BQ0MoX192KTsJCQlcCisJCX0gd2hpbGUgKCBfX3YgJiBNSUlfQUNDX01JSV9CVVNZXyApOwkJXAorCQlTTUNfU0VUX01JSV9BQ0MoICgocGh5KTw8MTEpIHwgKChhKTw8NikgfAlcCisJCQlNSUlfQUNDX01JSV9CVVNZXyk7CQkJXAorCQlkbyB7CQkJCQkJXAorCQkJU01DX0dFVF9NSUlfQUNDKF9fdik7CQkJXAorCQl9IHdoaWxlICggX192ICYgTUlJX0FDQ19NSUlfQlVTWV8gKTsJCVwKKwkJU01DX0dFVF9NSUlfREFUQSh2KTsJCQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIFNNQ19TRVRfTUlJKGEscGh5LHYpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXUzMiBfX3Y7CQkJCQlcCisJCWRvIHsJCQkJCQlcCisJCQlTTUNfR0VUX01JSV9BQ0MoX192KTsJCQlcCisJCX0gd2hpbGUgKCBfX3YgJiBNSUlfQUNDX01JSV9CVVNZXyApOwkJXAorCQlTTUNfU0VUX01JSV9EQVRBKHYpOwkJCQlcCisJCVNNQ19TRVRfTUlJX0FDQyggKChwaHkpPDwxMSkgfCAoKGEpPDw2KSB8CVwKKwkJCU1JSV9BQ0NfTUlJX0JVU1lfCSB8CQlcCisJCQlNSUlfQUNDX01JSV9XUklURV8gICk7CQkJXAorCQlkbyB7CQkJCQkJXAorCQkJU01DX0dFVF9NSUlfQUNDKF9fdik7CQkJXAorCQl9IHdoaWxlICggX192ICYgTUlJX0FDQ19NSUlfQlVTWV8gKTsJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBTTUNfR0VUX1BIWV9CTUNSKHBoeSx4KQkJU01DX0dFVF9NSUkoIE1JSV9CTUNSLCBwaHksIHggKQorI2RlZmluZSBTTUNfU0VUX1BIWV9CTUNSKHBoeSx4KQkJU01DX1NFVF9NSUkoIE1JSV9CTUNSLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9CTVNSKHBoeSx4KQkJU01DX0dFVF9NSUkoIE1JSV9CTVNSLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9JRDEocGh5LHgpCQlTTUNfR0VUX01JSSggTUlJX1BIWVNJRDEsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX0lEMihwaHkseCkJCVNNQ19HRVRfTUlJKCBNSUlfUEhZU0lEMiwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX0dFVF9QSFlfTUlJX0FEVihwaHkseCkJU01DX0dFVF9NSUkoIE1JSV9BRFZFUlRJU0UsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19TRVRfUEhZX01JSV9BRFYocGh5LHgpCVNNQ19TRVRfTUlJKCBNSUlfQURWRVJUSVNFLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9NSUlfTFBBKHBoeSx4KQlTTUNfR0VUX01JSSggTUlJX0xQQSwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX1NFVF9QSFlfTUlJX0xQQShwaHkseCkJU01DX1NFVF9NSUkoIE1JSV9MUEEsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX0NUUkxfU1RTKHBoeSx4KQlTTUNfR0VUX01JSSggUEhZX01PREVfQ1RSTF9TVFMsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19TRVRfUEhZX0NUUkxfU1RTKHBoeSx4KQlTTUNfU0VUX01JSSggUEhZX01PREVfQ1RSTF9TVFMsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX0lOVF9TUkMocGh5LHgpCVNNQ19HRVRfTUlJKCBQSFlfSU5UX1NSQywgcGh5LCB4ICkKKyNkZWZpbmUgU01DX1NFVF9QSFlfSU5UX1NSQyhwaHkseCkJU01DX1NFVF9NSUkoIFBIWV9JTlRfU1JDLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9JTlRfTUFTSyhwaHkseCkJU01DX0dFVF9NSUkoIFBIWV9JTlRfTUFTSywgcGh5LCB4ICkKKyNkZWZpbmUgU01DX1NFVF9QSFlfSU5UX01BU0socGh5LHgpCVNNQ19TRVRfTUlJKCBQSFlfSU5UX01BU0ssIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX1NQRUNJQUwocGh5LHgpCVNNQ19HRVRfTUlJKCBQSFlfU1BFQ0lBTCwgcGh5LCB4ICkKKworCisKKy8qIE1pc2MgcmVhZC93cml0ZSBtYWNyb3MgKi8KKworI2lmbmRlZiBTTUNfR0VUX01BQ19BRERSCisjZGVmaW5lIFNNQ19HRVRfTUFDX0FERFIoYWRkcikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fdjsJCQkJXAorCQkJCQkJCQlcCisJCVNNQ19HRVRfTUFDX0NTUihBRERSTCwgX192KTsJCQlcCisJCWFkZHJbMF0gPSBfX3Y7IGFkZHJbMV0gPSBfX3YgPj4gODsJCVwKKwkJYWRkclsyXSA9IF9fdiA+PiAxNjsgYWRkclszXSA9IF9fdiA+PiAyNDsJXAorCQlTTUNfR0VUX01BQ19DU1IoQUREUkgsIF9fdik7CQkJXAorCQlhZGRyWzRdID0gX192OyBhZGRyWzVdID0gX192ID4+IDg7CQlcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIFNNQ19TRVRfTUFDX0FERFIoYWRkcikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJIFNNQ19TRVRfTUFDX0NTUihBRERSTCwJCQkJXAorCQkJCSBhZGRyWzBdIHwJCQlcCisJCQkJKGFkZHJbMV0gPDwgOCkgfAkJXAorCQkJCShhZGRyWzJdIDw8IDE2KSB8CQlcCisJCQkJKGFkZHJbM10gPDwgMjQpKTsJCVwKKwkJIFNNQ19TRVRfTUFDX0NTUihBRERSSCwgYWRkcls0XXwoYWRkcls1XSA8PCA4KSk7XAorCX0gd2hpbGUgKDApCisKKworI2RlZmluZSBTTUNfV1JJVEVfRUVQUk9NX0NNRChjbWQsIGFkZHIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3aGlsZSAoU01DX0dFVF9FMlBfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJCVNNQ19TRVRfTUFDX0NNRChNQUNfQ1NSX0NNRF9SX05PVF9XXyB8IGEgKTsJCVwKKwkJd2hpbGUgKFNNQ19HRVRfTUFDX0NNRCgpICYgTUFDX0NTUl9DTURfQ1NSX0JVU1lfKTsJXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZgkgLyogX1NNQzkxMVhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxOTQuYyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwppbmRleCBmODY2OTdkLi42Y2YxNmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTE5NC5jCkBAIC03MzIsMTIgKzczMiw5IEBACiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBzbWNfaW5pdChpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBzbWNfbG9jYWwpKTsKLQlzdGF0aWMgc3RydWN0IGRldmxpc3QgKnNtY2RldiA9IHNtY19kZXZsaXN0OworCXN0cnVjdCBkZXZsaXN0ICpzbWNkZXYgPSBzbWNfZGV2bGlzdDsKIAlpbnQgZXJyID0gMDsKIAotI2lmbmRlZiBOT19BVVRPUFJPQkUKLQlzbWNkZXYgPSBzbWNfZGV2bGlzdDsKLSNlbmRpZgogCWlmICghZGV2KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIApAQCAtMTYwNyw3ICsxNjA0LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiU01DIDk5MTk0IElSUSBudW1iZXIiKTsKIE1PRFVMRV9QQVJNX0RFU0MoaWZwb3J0LCAiU01DIDk5MTk0IGludGVyZmFjZSBwb3J0ICgwLWRlZmF1bHQsIDEtVFAsIDItQVVJKSIpOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpZiAoaW8gPT0gMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCBlMWJlMWFmLi5mNzJhNGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMTI5LDYgKzEyOSwyNCBAQAogI2RlZmluZSBTTUNfaW5zYihhLCByLCBwLCBsKQlyZWFkc2IoKGEpICsgKHIpLCBwLCAobCkpCiAjZGVmaW5lIFNNQ19vdXRzYihhLCByLCBwLCBsKQl3cml0ZXNiKChhKSArIChyKSwgcCwgKGwpKQogCisjZWxpZglkZWZpbmVkKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKQorCisjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMAorI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVAkxCisjZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUCTAKKyNkZWZpbmUgU01DX0lPX1NISUZUCQkwCisjZGVmaW5lIFNNQ19OT1dBSVQJCTEKKyNkZWZpbmUgU01DX1VTRV9QWEFfRE1BCQkxCisKKyNkZWZpbmUgU01DX2luYihhLCByKQkJcmVhZGIoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW53KGEsIHIpCQlyZWFkdygoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbmwoYSwgcikJCXJlYWRsKChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dGIodiwgYSwgcikJd3JpdGViKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dHcodiwgYSwgcikJd3JpdGV3KHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dGwodiwgYSwgcikJd3JpdGVsKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkJcmVhZHN3KChhKSArIChyKSwgcCwgbCkKKyNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCXdyaXRlc3coKGEpICsgKHIpLCBwLCBsKQorCiAjZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX0lOTk9LT00pIHx8IFwKIAlkZWZpbmVkKENPTkZJR19NQUNIX01BSU5TVE9ORSkgfHwgXAogCWRlZmluZWQoQ09ORklHX0FSQ0hfUFhBX0lEUCkgfHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCmluZGV4IGIyZGRkNWUuLjkyODJiNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKQEAgLTM0NSw5ICszNDUsOSBAQAogCiBzdGF0aWMgaW50IGJjbTU0NjFfZW5hYmxlX2ZpYmVyKHN0cnVjdCBtaWlfcGh5KiBwaHkpCiB7Ci0gICAgICAgIHBoeV93cml0ZShwaHksIE1JSV9OQ09ORklHLCAweGZjMGMpOwotICAgICAgICBwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgMHg0MTQwKTsKLSAgICAgICAgcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4ZmMwYik7CisJcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4ZmMwYyk7CisJcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIDB4NDE0MCk7CisJcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4ZmMwYik7CiAJcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIDB4MDE0MCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggNDlhZDYwYi4uYjJkZGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTY5LDggKzY5LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNTgiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWF5IDIyLCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNjAiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVuZSAxNywgMjAwNiIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC0yMjksNiArMjI5LDggQEAKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NU0sCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODYsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODcsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODdNLApAQCAtMjk2NSw2ICsyOTY3LDI3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyogVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgd2Ugc3VzcGVjdCB0aGF0IHRoZSBzeXN0ZW0gY2hpcHNldCBpcyByZS0KKyAqIG9yZGVyaW5nIHRoZSBzZXF1ZW5jZSBvZiBNTUlPIHRvIHRoZSB0eCBzZW5kIG1haWxib3guIFRoZSBzeW1wdG9tCisgKiBpcyBib2d1cyB0eCBjb21wbGV0aW9ucy4gV2UgdHJ5IHRvIHJlY292ZXIgYnkgc2V0dGluZyB0aGUKKyAqIFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUiBmbGFnIGFuZCByZXNldHRpbmcgdGhlIGNoaXAgbGF0ZXIKKyAqIGluIHRoZSB3b3JrcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIHRnM190eF9yZWNvdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCUJVR19PTigodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUikgfHwKKwkgICAgICAgdHAtPndyaXRlMzJfdHhfbWJveCA9PSB0ZzNfd3JpdGVfaW5kaXJlY3RfbWJveCk7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IFRoZSBzeXN0ZW0gbWF5IGJlIHJlLW9yZGVyaW5nIG1lbW9yeS0iCisJICAgICAgICJtYXBwZWQgSS9PIGN5Y2xlcyB0byB0aGUgbmV0d29yayBkZXZpY2UsIGF0dGVtcHRpbmcgdG8gIgorCSAgICAgICAicmVjb3Zlci4gUGxlYXNlIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB0aGUgZHJpdmVyIG1haW50YWluZXIgIgorCSAgICAgICAiYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iLCB0cC0+ZGV2LT5uYW1lKTsKKworCXNwaW5fbG9jaygmdHAtPmxvY2spOworCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORzsKKwlzcGluX3VubG9jaygmdHAtPmxvY2spOworfQorCiAvKiBUaWdvbjMgbmV2ZXIgcmVwb3J0cyBwYXJ0aWFsIHBhY2tldCBzZW5kcy4gIFNvIHdlIGRvIG5vdAogICogbmVlZCBzcGVjaWFsIGxvZ2ljIHRvIGhhbmRsZSBTS0JzIHRoYXQgaGF2ZSBub3QgaGFkIGFsbAogICogb2YgdGhlaXIgZnJhZ3Mgc2VudCB5ZXQsIGxpa2UgU3VuR0VNIGRvZXMuCkBAIC0yOTc3LDkgKzMwMDAsMTMgQEAKIAl3aGlsZSAoc3dfaWR4ICE9IGh3X2lkeCkgewogCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpyaSA9ICZ0cC0+dHhfYnVmZmVyc1tzd19pZHhdOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmktPnNrYjsKLQkJaW50IGk7CisJCWludCBpLCB0eF9idWcgPSAwOwogCi0JCUJVR19PTihza2IgPT0gTlVMTCk7CisJCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpIHsKKwkJCXRnM190eF9yZWNvdmVyKHRwKTsKKwkJCXJldHVybjsKKwkJfQorCiAJCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsCiAJCQkJIHBjaV91bm1hcF9hZGRyKHJpLCBtYXBwaW5nKSwKIAkJCQkgc2tiX2hlYWRsZW4oc2tiKSwKQEAgLTI5OTAsMTAgKzMwMTcsOSBAQAogCQlzd19pZHggPSBORVhUX1RYKHN3X2lkeCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgewotCQkJQlVHX09OKHN3X2lkeCA9PSBod19pZHgpOwotCiAJCQlyaSA9ICZ0cC0+dHhfYnVmZmVyc1tzd19pZHhdOwotCQkJQlVHX09OKHJpLT5za2IgIT0gTlVMTCk7CisJCQlpZiAodW5saWtlbHkocmktPnNrYiAhPSBOVUxMIHx8IHN3X2lkeCA9PSBod19pZHgpKQorCQkJCXR4X2J1ZyA9IDE7CiAKIAkJCXBjaV91bm1hcF9wYWdlKHRwLT5wZGV2LAogCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihyaSwgbWFwcGluZyksCkBAIC0zMDA0LDYgKzMwMzAsMTEgQEAKIAkJfQogCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCQlpZiAodW5saWtlbHkodHhfYnVnKSkgeworCQkJdGczX3R4X3JlY292ZXIodHApOworCQkJcmV0dXJuOworCQl9CiAJfQogCiAJdHAtPnR4X2NvbnMgPSBzd19pZHg7CkBAIC0zMzMxLDYgKzMzNjIsMTEgQEAKIAkvKiBydW4gVFggY29tcGxldGlvbiB0aHJlYWQgKi8KIAlpZiAoc2Jsay0+aWR4WzBdLnR4X2NvbnN1bWVyICE9IHRwLT50eF9jb25zKSB7CiAJCXRnM190eCh0cCk7CisJCWlmICh1bmxpa2VseSh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykpIHsKKwkJCW5ldGlmX3J4X2NvbXBsZXRlKG5ldGRldik7CisJCQlzY2hlZHVsZV93b3JrKCZ0cC0+cmVzZXRfdGFzayk7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCS8qIHJ1biBSWCB0aHJlYWQsIHdpdGhpbiB0aGUgYm91bmRzIHNldCBieSBOQVBJLgpAQCAtMzM5MSwxMiArMzQyNywxMCBAQAogCWlmIChpcnFfc3luYykKIAkJdGczX2lycV9xdWllc2NlKHRwKTsKIAlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKLQlzcGluX2xvY2soJnRwLT50eF9sb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRnM19mdWxsX3VubG9jayhzdHJ1Y3QgdGczICp0cCkKIHsKLQlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CiB9CiAKQEAgLTM1NzksNiArMzYxMywxMyBAQAogCXJlc3RhcnRfdGltZXIgPSB0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1JFU1RBUlRfVElNRVI7CiAJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1JFU1RBUlRfVElNRVI7CiAKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkcpIHsKKwkJdHAtPndyaXRlMzJfdHhfbWJveCA9IHRnM193cml0ZTMyX3R4X21ib3g7CisJCXRwLT53cml0ZTMyX3J4X21ib3ggPSB0ZzNfd3JpdGVfZmx1c2hfcmVnMzI7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSOworCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HOworCX0KKwogCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAwKTsKIAl0ZzNfaW5pdF9odyh0cCwgMSk7CiAKQEAgLTM3MTgsMTQgKzM3NTksMTEgQEAKIAogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAKLQkvKiBObyBCSCBkaXNhYmxpbmcgZm9yIHR4X2xvY2sgaGVyZS4gIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkCi0JICogY29udGV4dCBhbmQgVFggcmVjbGFpbSBydW5zIHZpYSB0cC0+cG9sbCBpbnNpZGUgb2YgYSBzb2Z0d2FyZQorCS8qIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkIGNvbnRleHQgd2l0aCBuZXRpZl90eF9sb2NrCisJICogYW5kIFRYIHJlY2xhaW0gcnVucyB2aWEgdHAtPnBvbGwgaW5zaWRlIG9mIGEgc29mdHdhcmUKIAkgKiBpbnRlcnJ1cHQuICBGdXJ0aGVybW9yZSwgSVJRIHByb2Nlc3NpbmcgcnVucyBsb2NrbGVzcyBzbyB3ZSBoYXZlCiAJICogbm8gSVJRIGNvbnRleHQgZGVhZGxvY2tzIHRvIHdvcnJ5IGFib3V0IGVpdGhlci4gIFJlam9pY2UhCiAJICovCi0JaWYgKCFzcGluX3RyeWxvY2soJnRwLT50eF9sb2NrKSkKLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KIAlpZiAodW5saWtlbHkoVFhfQlVGRlNfQVZBSUwodHApIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CkBAIC0zNzM0LDcgKzM3NzIsNiBAQAogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gIgogCQkJICAgICAgICJxdWV1ZSBhd2FrZSFcbiIsIGRldi0+bmFtZSk7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnRwLT50eF9sb2NrKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIApAQCAtMzgxNywxNSArMzg1NCwxNiBAQAogCXR3MzJfdHhfbWJveCgoTUFJTEJPWF9TTkRIT1NUX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVyksIGVudHJ5KTsKIAogCXRwLT50eF9wcm9kID0gZW50cnk7Ci0JaWYgKFRYX0JVRkZTX0FWQUlMKHRwKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKSB7CisJaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKHRwKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKSkgeworCQlzcGluX2xvY2soJnRwLT50eF9sb2NrKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlpZiAoVFhfQlVGRlNfQVZBSUwodHApID4gVEczX1RYX1dBS0VVUF9USFJFU0gpCiAJCQluZXRpZl93YWtlX3F1ZXVlKHRwLT5kZXYpOworCQlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCX0KIAogb3V0X3VubG9jazoKICAgICAJbW1pb3diKCk7Ci0Jc3Bpbl91bmxvY2soJnRwLT50eF9sb2NrKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0zODQ0LDE0ICszODgyLDExIEBACiAKIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCi0JLyogTm8gQkggZGlzYWJsaW5nIGZvciB0eF9sb2NrIGhlcmUuICBXZSBhcmUgcnVubmluZyBpbiBCSCBkaXNhYmxlZAotCSAqIGNvbnRleHQgYW5kIFRYIHJlY2xhaW0gcnVucyB2aWEgdHAtPnBvbGwgaW5zaWRlIG9mIGEgc29mdHdhcmUKKwkvKiBXZSBhcmUgcnVubmluZyBpbiBCSCBkaXNhYmxlZCBjb250ZXh0IHdpdGggbmV0aWZfdHhfbG9jaworCSAqIGFuZCBUWCByZWNsYWltIHJ1bnMgdmlhIHRwLT5wb2xsIGluc2lkZSBvZiBhIHNvZnR3YXJlCiAJICogaW50ZXJydXB0LiAgRnVydGhlcm1vcmUsIElSUSBwcm9jZXNzaW5nIHJ1bnMgbG9ja2xlc3Mgc28gd2UgaGF2ZQogCSAqIG5vIElSUSBjb250ZXh0IGRlYWRsb2NrcyB0byB3b3JyeSBhYm91dCBlaXRoZXIuICBSZWpvaWNlIQogCSAqLwotCWlmICghc3Bpbl90cnlsb2NrKCZ0cC0+dHhfbG9jaykpCi0JCXJldHVybiBORVRERVZfVFhfTE9DS0VEOyAKLQogCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkpIHsKIAkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTM4NjAsNyArMzg5NSw2IEBACiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiAiCiAJCQkgICAgICAgInF1ZXVlIGF3YWtlIVxuIiwgZGV2LT5uYW1lKTsKIAkJfQotCQlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0zOTk4LDE1ICs0MDMyLDE2IEBACiAJdHczMl90eF9tYm94KChNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XKSwgZW50cnkpOwogCiAJdHAtPnR4X3Byb2QgPSBlbnRyeTsKLQlpZiAoVFhfQlVGRlNfQVZBSUwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpIHsKKwlpZiAodW5saWtlbHkoVFhfQlVGRlNfQVZBSUwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CisJCXNwaW5fbG9jaygmdHAtPnR4X2xvY2spOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWlmIChUWF9CVUZGU19BVkFJTCh0cCkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCkKIAkJCW5ldGlmX3dha2VfcXVldWUodHAtPmRldik7CisJCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CiAJfQogCiBvdXRfdW5sb2NrOgogICAgIAltbWlvd2IoKTsKLQlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKQEAgLTQ0ODUsOSArNDUyMCw4IEBACiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgdGczX3dyaXRlX3NpZ19wcmVfcmVzZXQoc3RydWN0IHRnMyAqdHAsIGludCBraW5kKQogewotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpKQotCQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YLAotCQkJICAgICAgTklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpOworCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1gsCisJCSAgICAgIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1hfTUFHSUMxKTsKIAogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FTRl9ORVdfSEFORFNIQUtFKSB7CiAJCXN3aXRjaCAoa2luZCkgewpAQCAtNDU2OCwxMyArNDYwMiwxMiBAQAogCXZvaWQgKCp3cml0ZV9vcCkoc3RydWN0IHRnMyAqLCB1MzIsIHUzMik7CiAJaW50IGk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkgewotCQl0ZzNfbnZyYW1fbG9jayh0cCk7Ci0JCS8qIE5vIG1hdGNoaW5nIHRnM19udnJhbV91bmxvY2soKSBhZnRlciB0aGlzIGJlY2F1c2UKLQkJICogY2hpcCByZXNldCBiZWxvdyB3aWxsIHVuZG8gdGhlIG52cmFtIGxvY2suCi0JCSAqLwotCQl0cC0+bnZyYW1fbG9ja19jbnQgPSAwOwotCX0KKwl0ZzNfbnZyYW1fbG9jayh0cCk7CisKKwkvKiBObyBtYXRjaGluZyB0ZzNfbnZyYW1fdW5sb2NrKCkgYWZ0ZXIgdGhpcyBiZWNhdXNlCisJICogY2hpcCByZXNldCBiZWxvdyB3aWxsIHVuZG8gdGhlIG52cmFtIGxvY2suCisJICovCisJdHAtPm52cmFtX2xvY2tfY250ID0gMDsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MiB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fApAQCAtNDcyNywyMCArNDc2MCwyNSBAQAogCQl0dzMyX2YoTUFDX01PREUsIDApOwogCXVkZWxheSg0MCk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkgewotCQkvKiBXYWl0IGZvciBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0byBjb21wbGV0ZS4gKi8KLQkJZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Ci0JCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1gsICZ2YWwpOwotCQkJaWYgKHZhbCA9PSB+TklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpCi0JCQkJYnJlYWs7Ci0JCQl1ZGVsYXkoMTApOwotCQl9Ci0JCWlmIChpID49IDEwMDAwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGczX3Jlc2V0X2h3IHRpbWVkIG91dCBmb3IgJXMsICIKLQkJCSAgICAgICAiZmlybXdhcmUgd2lsbCBub3QgcmVzdGFydCBtYWdpYz0lMDh4XG4iLAotCQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHZhbCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCS8qIFdhaXQgZm9yIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlLiAqLworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1gsICZ2YWwpOworCQlpZiAodmFsID09IH5OSUNfU1JBTV9GSVJNV0FSRV9NQk9YX01BR0lDMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKworCS8qIENoaXAgbWlnaHQgbm90IGJlIGZpdHRlZCB3aXRoIGZpcm1hcmUuICBTb21lIFN1biBvbmJvYXJkCisJICogcGFydHMgYXJlIGNvbmZpZ3VyZWQgbGlrZSB0aGF0LiAgU28gZG9uJ3Qgc2lnbmFsIHRoZSB0aW1lb3V0CisJICogb2YgdGhlIGFib3ZlIGxvb3AgYXMgYW4gZXJyb3IsIGJ1dCBkbyByZXBvcnQgdGhlIGxhY2sgb2YKKwkgKiBydW5uaW5nIGZpcm13YXJlIG9uY2UuCisJICovCisJaWYgKGkgPj0gMTAwMDAwICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRCkpIHsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQ7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBObyBmaXJtd2FyZSBydW5uaW5nLlxuIiwKKwkJICAgICAgIHRwLT5kZXYtPm5hbWUpOwogCX0KIAogCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykgJiYKQEAgLTkwNzUsOSArOTExMyw2IEBACiB7CiAJaW50IGo7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkKLQkJcmV0dXJuOwotCiAJdHczMl9mKEdSQ19FRVBST01fQUREUiwKIAkgICAgIChFRVBST01fQUREUl9GU01fUkVTRVQgfAogCSAgICAgIChFRVBST01fREVGQVVMVF9DTE9DS19QRVJJT0QgPDwKQEAgLTkyMTAsMTEgKzkyNDUsNiBAQAogewogCWludCByZXQ7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBdHRlbXB0IHRvIGRvIG52cmFtX3JlYWQgb24gU3VuIDU3MFhcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pKQogCQlyZXR1cm4gdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIHZhbCk7CiAKQEAgLTk0NDcsMTEgKzk0NzcsNiBAQAogewogCWludCByZXQ7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBdHRlbXB0IHRvIGRvIG52cmFtX3dyaXRlIG9uIFN1biA1NzBYXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVCkgewogCQl0dzMyX2YoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCAmCiAJCSAgICAgICB+R1JDX0xDTENUUkxfR1BJT19PVVRQVVQxKTsKQEAgLTk1NzgsMTUgKzk2MDMsMTkgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUlTQ19IT1NUX0NUUkwsCiAJCQkgICAgICAgdHAtPm1pc2NfaG9zdF9jdHJsKTsKIAorCS8qIFRoZSBtZW1vcnkgYXJiaXRlciBoYXMgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciBmb3IgU1JBTSBhY2Nlc3NlcworCSAqIHRvIHN1Y2NlZWQuICBOb3JtYWxseSBvbiBwb3dlcnVwIHRoZSB0ZzMgY2hpcCBmaXJtd2FyZSB3aWxsIG1ha2UKKwkgKiBzdXJlIGl0IGlzIGVuYWJsZWQsIGJ1dCBvdGhlciBlbnRpdGllcyBzdWNoIGFzIHN5c3RlbSBuZXRib290CisJICogY29kZSBtaWdodCBkaXNhYmxlIGl0LgorCSAqLworCXZhbCA9IHRyMzIoTUVNQVJCX01PREUpOworCXR3MzIoTUVNQVJCX01PREUsIHZhbCB8IE1FTUFSQl9NT0RFX0VOQUJMRSk7CisKIAl0cC0+cGh5X2lkID0gUEhZX0lEX0lOVkFMSUQ7CiAJdHAtPmxlZF9jdHJsID0gTEVEX0NUUkxfTU9ERV9QSFlfMTsKIAotCS8qIERvIG5vdCBldmVuIHRyeSBwb2tpbmcgYXJvdW5kIGluIGhlcmUgb24gU3VuIHBhcnRzLiAgKi8KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkgewotCQkvKiBBbGwgU1VOIGNoaXBzIGFyZSBidWlsdC1pbiBMT01zLiAqLwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOwotCQlyZXR1cm47Ci0JfQorCS8qIEFzc3VtZSBhbiBvbmJvYXJkIGRldmljZSBieSBkZWZhdWx0LiAgKi8KKwl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOwogCiAJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX1NJRywgJnZhbCk7CiAJaWYgKHZhbCA9PSBOSUNfU1JBTV9EQVRBX1NJR19NQUdJQykgewpAQCAtOTY4Niw2ICs5NzE1LDggQEAKIAogCQlpZiAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0VFUFJPTV9XUCkKIAkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7CisJCWVsc2UKKwkJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOwogCiAJCWlmIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfQVNGX0VOQUJMRSkgewogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FTkFCTEVfQVNGOwpAQCAtOTgzNCwxNiArOTg2NSw4IEBACiAJaW50IGk7CiAJdTMyIG1hZ2ljOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpIHsKLQkJLyogU3VuIGRlY2lkZWQgbm90IHRvIHB1dCB0aGUgbmVjZXNzYXJ5IGJpdHMgaW4gdGhlCi0JCSAqIE5WUkFNIG9mIHRoZWlyIG9uYm9hcmQgdGczIHBhcnRzIDooCi0JCSAqLwotCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAiU3VuIDU3MFgiKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweDAsICZtYWdpYykpCi0JCXJldHVybjsKKwkJZ290byBvdXRfbm90X2ZvdW5kOwogCiAJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpIHsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA0KSB7CkBAIC05ODc0LDYgKzk4OTcsOSBAQAogCQkJCQlicmVhazsKIAkJCQltc2xlZXAoMSk7CiAJCQl9CisJCQlpZiAoISh0bXAxNiAmIDB4ODAwMCkpCisJCQkJZ290byBvdXRfbm90X2ZvdW5kOworCiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIHZwZF9jYXAgKyBQQ0lfVlBEX0RBVEEsCiAJCQkJCSAgICAgICZ0bXApOwogCQkJdG1wID0gY3B1X3RvX2xlMzIodG1wKTsKQEAgLTk5NjUsMzcgKzk5OTEsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TUEFSQzY0Ci1zdGF0aWMgaW50IF9fZGV2aW5pdCB0ZzNfaXNfc3VuXzU3MFgoc3RydWN0IHRnMyAqdHApCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGRldjsKLQlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwID0gcGRldi0+c3lzZGF0YTsKLQotCWlmIChwY3AgIT0gTlVMTCkgewotCQlpbnQgbm9kZSA9IHBjcC0+cHJvbV9ub2RlOwotCQl1MzIgdmVuaWQ7Ci0JCWludCBlcnI7Ci0KLQkJZXJyID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCAic3Vic3lzdGVtLXZlbmRvci1pZCIsCi0JCQkJICAgICAgIChjaGFyICopICZ2ZW5pZCwgc2l6ZW9mKHZlbmlkKSk7Ci0JCWlmIChlcnIgPT0gMCB8fCBlcnIgPT0gLTEpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKHZlbmlkID09IFBDSV9WRU5ET1JfSURfU1VOKQotCQkJcmV0dXJuIDE7Ci0KLQkJLyogVEczIGNoaXBzIG9uYm9hcmQgdGhlIFN1bkJsYWRlLTI1MDAgZG9uJ3QgaGF2ZSB0aGUKLQkJICogc3Vic3lzdGVtLXZlbmRvci1pZCBzZXQgdG8gUENJX1ZFTkRPUl9JRF9TVU4gYnV0IHRoZXkKLQkJICogYXJlIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIG5vbi1TdW4gdmFyaWFudHMgYnkgYmVpbmcKLQkJICogbmFtZWQgIm5ldHdvcmsiIGJ5IHRoZSBmaXJtd2FyZS4gIE5vbi1TdW4gY2FyZHMgd2lsbAotCQkgKiBzaG93IHVwIGFzIGJlaW5nIG5hbWVkICJldGhlcm5ldCIuCi0JCSAqLwotCQlpZiAoIXN0cmNtcChwY3AtPnByb21fbmFtZSwgIm5ldHdvcmsiKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0ZzNfZ2V0X2ludmFyaWFudHMoc3RydWN0IHRnMyAqdHApCiB7CiAJc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHdyaXRlX3Jlb3JkZXJfY2hpcHNldHNbXSA9IHsKQEAgLTEwMDEyLDExICsxMDAwNyw2IEBACiAJdTE2IHBjaV9jbWQ7CiAJaW50IGVycjsKIAotI2lmZGVmIENPTkZJR19TUEFSQzY0Ci0JaWYgKHRnM19pc19zdW5fNTcwWCh0cCkpCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1NVTl81NzBYOwotI2VuZGlmCi0KIAkvKiBGb3JjZSBtZW1vcnkgd3JpdGUgaW52YWxpZGF0ZSBvZmYuICBJZiB3ZSBsZWF2ZSBpdCBvbiwKIAkgKiB0aGVuIG9uIDU3MDBfQlggY2hpcHMgd2UgaGF2ZSB0byBlbmFibGUgYSB3b3JrYXJvdW5kLgogCSAqIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHNldCB0aGUgVEczUENJX0RNQV9SV19DVFJMIGJvdW5kYXJ5CkBAIC0xMDMxMiw4ICsxMDMwMiw3IEBACiAJaWYgKHRwLT53cml0ZTMyID09IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMiB8fAogCSAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpICYmCiAJICAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKLQkgICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSkpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkKKwkgICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSkpKQogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRzsKIAogCS8qIEdldCBlZXByb20gaHcgY29uZmlnIGJlZm9yZSBjYWxsaW5nIHRnM19zZXRfcG93ZXJfc3RhdGUoKS4KQEAgLTEwNTk0LDggKzEwNTgzLDcgQEAKICNlbmRpZgogCiAJbWFjX29mZnNldCA9IDB4N2M7Ci0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCAmJgotCSAgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMRzJfU1VOXzU3MFgpKSB8fAorCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHx8CiAJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CiAJCWlmICh0cjMyKFRHM1BDSV9EVUFMX01BQ19DVFJMKSAmIERVQUxfTUFDX0NUUkxfSUQpCiAJCQltYWNfb2Zmc2V0ID0gMHhjYzsKQEAgLTEwNjIyLDggKzEwNjEwLDcgQEAKIAl9CiAJaWYgKCFhZGRyX29rKSB7CiAJCS8qIE5leHQsIHRyeSBOVlJBTS4gKi8KLQkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEcyX1NVTl81NzBYKSAmJgotCQkgICAgIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgorCQlpZiAoIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgogCQkgICAgIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgNCwgJmxvKSkgewogCQkJZGV2LT5kZXZfYWRkclswXSA9ICgoaGkgPj4gMTYpICYgMHhmZik7CiAJCQlkZXYtPmRldl9hZGRyWzFdID0gKChoaSA+PiAyNCkgJiAweGZmKTsKQEAgLTExMjkxLDcgKzExMjc4LDYgQEAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gdGczX3ZsYW5fcnhfcmVnaXN0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDBlMjliODg1Li44MjA5ZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMjA3NCwxMiArMjA3NCwyMiBAQAogCiAJLyogU01QIGxvY2tpbmcgc3RyYXRlZ3k6CiAJICoKLQkgKiBsb2NrOiBIZWxkIGR1cmluZyBhbGwgb3BlcmF0aW9ucyBleGNlcHQgVFggcGFja2V0Ci0JICogICAgICAgcHJvY2Vzc2luZy4KKwkgKiBsb2NrOiBIZWxkIGR1cmluZyByZXNldCwgUEhZIGFjY2VzcywgdGltZXIsIGFuZCB3aGVuCisJICogICAgICAgdXBkYXRpbmcgdGczX2ZsYWdzIGFuZCB0ZzNfZmxhZ3MyLgogCSAqCi0JICogdHhfbG9jazogSGVsZCBkdXJpbmcgdGczX3N0YXJ0X3htaXQgYW5kIHRnM190eAorCSAqIHR4X2xvY2s6IEhlbGQgZHVyaW5nIHRnM19zdGFydF94bWl0IGFuZCB0ZzNfdHggb25seQorCSAqICAgICAgICAgIHdoZW4gY2FsbGluZyBuZXRpZl9bc3RhcnR8c3RvcF1fcXVldWUuCisJICogICAgICAgICAgdGczX3N0YXJ0X3htaXQgaXMgcHJvdGVjdGVkIGJ5IG5ldGlmX3R4X2xvY2suCiAJICoKIAkgKiBCb3RoIG9mIHRoZXNlIGxvY2tzIGFyZSB0byBiZSBoZWxkIHdpdGggQkggc2FmZXR5LgorCSAqCisJICogQmVjYXVzZSB0aGUgSVJRIGhhbmRsZXIsIHRnM19wb2xsLCBhbmQgdGczX3N0YXJ0X3htaXQKKwkgKiBhcmUgcnVubmluZyBsb2NrbGVzcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlbHkKKwkgKiBxdWllc2NlIHRoZSBjaGlwIHdpdGggdGczX25ldGlmX3N0b3AgYW5kIHRnM19mdWxsX2xvY2sKKwkgKiBiZWZvcmUgcmVjb25maWd1cmluZyB0aGUgZGV2aWNlLgorCSAqCisJICogaW5kaXJlY3RfbG9jazogSGVsZCB3aGVuIGFjY2Vzc2luZyByZWdpc3RlcnMgaW5kaXJlY3RseQorCSAqICAgICAgICAgICAgICAgIHdpdGggSVJRIGRpc2FibGluZy4KIAkgKi8KIAlzcGlubG9ja190CQkJbG9jazsKIAlzcGlubG9ja190CQkJaW5kaXJlY3RfbG9jazsKQEAgLTIxNTUsMTEgKzIxNjUsNyBAQAogI2RlZmluZSBURzNfRkxBR19FTkFCTEVfQVNGCQkweDAwMDAwMDIwCiAjZGVmaW5lIFRHM19GTEFHXzU3MDFfUkVHX1dSSVRFX0JVRwkweDAwMDAwMDQwCiAjZGVmaW5lIFRHM19GTEFHX1BPTExfU0VSREVTCQkweDAwMDAwMDgwCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2KQogI2RlZmluZSBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVIJMHgwMDAwMDEwMAotI2Vsc2UKLSNkZWZpbmUgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSCTAJLyogZGlzYWJsZXMgY29kZSB0b28gKi8KLSNlbmRpZgogI2RlZmluZSBURzNfRkxBR19QQ0lYX1RBUkdFVF9IV0JVRwkweDAwMDAwMjAwCiAjZGVmaW5lIFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQgkweDAwMDAwNDAwCiAjZGVmaW5lIFRHM19GTEFHX1dPTF9FTkFCTEUJCTB4MDAwMDA4MDAKQEAgLTIxNzIsNiArMjE3OCw3IEBACiAjZGVmaW5lIFRHM19GTEFHX1BDSV9ISUdIX1NQRUVECQkweDAwMDQwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1BDSV8zMkJJVAkJMHgwMDA4MDAwMAogI2RlZmluZSBURzNfRkxBR19TUkFNX1VTRV9DT05GSUcJMHgwMDEwMDAwMAorI2RlZmluZSBURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HCTB4MDAyMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfU0VSREVTX1dPTF9DQVAJCTB4MDA0MDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUJMHgwMDgwMDAwMAogI2RlZmluZSBURzNfRkxBR18xMF8xMDBfT05MWQkJMHgwMTAwMDAwMApAQCAtMjE4NCw3ICsyMTkxLDcgQEAKICNkZWZpbmUgVEczX0ZMQUdfSU5JVF9DT01QTEVURQkJMHg4MDAwMDAwMAogCXUzMgkJCQl0ZzNfZmxhZ3MyOwogI2RlZmluZSBURzNfRkxHMl9SRVNUQVJUX1RJTUVSCQkweDAwMDAwMDAxCi0jZGVmaW5lIFRHM19GTEcyX1NVTl81NzBYCQkweDAwMDAwMDAyCisvKgkJCQkJMHgwMDAwMDAwMiBhdmFpbGFibGUgKi8KICNkZWZpbmUgVEczX0ZMRzJfTk9fRVRIX1dJUkVfU1BFRUQJMHgwMDAwMDAwNAogI2RlZmluZSBURzNfRkxHMl9JU181Nzg4CQkweDAwMDAwMDA4CiAjZGVmaW5lIFRHM19GTEcyX01BWF9SWFBFTkRfNjQJCTB4MDAwMDAwMTAKQEAgLTIyMTYsNiArMjIyMyw3IEBACiAjZGVmaW5lIFRHM19GTEcyX0hXX1RTTwkJCShURzNfRkxHMl9IV19UU09fMSB8IFRHM19GTEcyX0hXX1RTT18yKQogI2RlZmluZSBURzNfRkxHMl8xU0hPVF9NU0kJCTB4MTAwMDAwMDAKICNkZWZpbmUgVEczX0ZMRzJfUEhZX0pJVFRFUl9CVUcJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQJMHg0MDAwMDAwMAogCiAJdTMyCQkJCXNwbGl0X21vZGVfbWF4X3JlcXM7CiAjZGVmaW5lIFNQTElUX01PREVfNTcwNF9NQVhfUkVRCQkzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKaW5kZXggZTNkZDE0NC4uNWY3NDNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwpAQCAtMjI3LDEyICsyMjcsMTIgQEAKIAlTUk9NQzBJbmZvTGVhZgkJPSAyNywKIAlNZWRpYUJsb2NrTWFzawkJPSAweDNmLAogCU1lZGlhQ3VzdG9tQ1NScwkJPSAoMSA8PCA2KSwKLQkKKwogCS8qIFBDSVBNIGJpdHMgKi8KIAlQTV9TbGVlcAkJPSAoMSA8PCAzMSksCiAJUE1fU25vb3plCQk9ICgxIDw8IDMwKSwKIAlQTV9NYXNrCQkJPSBQTV9TbGVlcCB8IFBNX1Nub296ZSwKLQkKKwogCS8qIFNJQVN0YXR1cyBiaXRzICovCiAJTldheVN0YXRlCQk9ICgxIDw8IDE0KSB8ICgxIDw8IDEzKSB8ICgxIDw8IDEyKSwKIAlOV2F5UmVzdGFydAkJPSAoMSA8PCAxMiksCkBAIC04NTgsNyArODU4LDcgQEAKIAkJCXJldHVybjsKIAkJY3B1X3JlbGF4KCk7CiAJfQotCQorCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRpbWVvdXQgZXhwaXJlZCBzdG9wcGluZyBETUFcbiIsIGRlLT5kZXYtPm5hbWUpOwogfQogCkBAIC05MzEsNyArOTMxLDcgQEAKIAkJbWFjbW9kZSB8PSBGdWxsRHVwbGV4OwogCWVsc2UKIAkJbWFjbW9kZSAmPSB+RnVsbER1cGxleDsKLQkKKwogCWlmIChuZXRpZl9tc2dfbGluayhkZSkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCBsaW5rICVzXG4iCiAJCSAgICAgICBLRVJOX0lORk8gIiVzOiAgICBtb2RlIDB4JXgsIHNpYSAweCV4LDB4JXgsMHgleCwweCV4XG4iCkBAIC05NjYsOSArOTY2LDkgQEAKIAl1MzIgc3RhdHVzID0gZHIzMihTSUFTdGF0dXMpOwogCXVuc2lnbmVkIGludCBjYXJyaWVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAljYXJyaWVyID0gKHN0YXR1cyAmIE5ldEN4bkVycikgPyAwIDogMTsKLQkJCisKIAlpZiAoY2FycmllcikgewogCQlpZiAoZGUtPm1lZGlhX3R5cGUgIT0gREVfTUVESUFfQVVJICYmIChzdGF0dXMgJiBMaW5rRmFpbFN0YXR1cykpCiAJCQlnb3RvIG5vX2xpbmtfeWV0OwpAQCAtOTg1LDcgKzk4NSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlkZV9saW5rX2Rvd24oZGUpOwkKKwlkZV9saW5rX2Rvd24oZGUpOwogCiAJaWYgKGRlLT5tZWRpYV9sb2NrKQogCQlyZXR1cm47CkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCQkJcmV0dXJuIDA7CiAJCWJyZWFrOwogCX0KLQkKKwogCXJldHVybiAxOwogfQogCkBAIC0xMDUwLDkgKzEwNTAsOSBAQAogCXUzMiBzdGF0dXMgPSBkcjMyKFNJQVN0YXR1cyk7CiAJdW5zaWduZWQgaW50IGNhcnJpZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKKwogCWNhcnJpZXIgPSAoc3RhdHVzICYgTmV0Q3huRXJyKSA/IDAgOiAxOwotCQkKKwogCWlmIChjYXJyaWVyKSB7CiAJCWlmICgoZGUtPm1lZGlhX3R5cGUgPT0gREVfTUVESUFfVFBfQVVUTyB8fAogCQkgICAgIGRlLT5tZWRpYV90eXBlID09IERFX01FRElBX1RQIHx8CkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JZGVfbGlua19kb3duKGRlKTsJCisJZGVfbGlua19kb3duKGRlKTsKIAogCS8qIGlmIG1lZGlhIHR5cGUgbG9ja2VkLCBkb24ndCBzd2l0Y2ggbWVkaWEgKi8KIAlpZiAoZGUtPm1lZGlhX2xvY2spCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCQl1MzIgbmV4dF9zdGF0ZXNbXSA9IHsgREVfTUVESUFfQVVJLCBERV9NRURJQV9CTkMsIERFX01FRElBX1RQX0FVVE8gfTsKIAkJZGVfbmV4dF9tZWRpYShkZSwgbmV4dF9zdGF0ZXMsIEFSUkFZX1NJWkUobmV4dF9zdGF0ZXMpKTsKIAl9Ci0JCisKIHNldF9tZWRpYToKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGUtPmxvY2ssIGZsYWdzKTsKIAlkZV9zdG9wX3J4dHgoZGUpOwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAkJbW9kX3RpbWVyKCZkZS0+bWVkaWFfdGltZXIsIGppZmZpZXMgKyBERV9USU1FUl9MSU5LKTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCUJVR19PTighKHN0YXR1cyAmIExpbmtGYWlsKSk7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZS0+ZGV2KSkgewpAQCAtMTIyNyw3ICsxMjI3LDcgQEAKIAlpbnQgcmM7CiAKIAlkZV9hZGFwdGVyX3dha2UoZGUpOwotCQorCiAJbWFjbW9kZSA9IGRyMzIoTWFjTW9kZSkgJiB+TWFjTW9kZUNsZWFyOwogCiAJcmMgPSBkZV9yZXNldF9tYWMoZGUpOwpAQCAtMTQxMyw3ICsxNDEzLDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZS0+bG9jaywgZmxhZ3MpOwotCQorCiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAKIAlkZV9mcmVlX3JpbmdzKGRlKTsKQEAgLTE0NDEsNyArMTQ0MSw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmRlLT5sb2NrKTsKIAllbmFibGVfaXJxKGRldi0+aXJxKTsKLQkJCisKIAkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50cy4gKi8KIAlfX2RlX2dldF9zdGF0cyhkZSk7CiAKQEAgLTE0NTEsNyArMTQ1MSw3IEBACiAJZGVfaW5pdF9yaW5ncyhkZSk7CiAKIAlkZV9pbml0X2h3KGRlKTsKLQkKKwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIApAQCAtMTQ1OSw3ICsxNDU5LDcgQEAKIHsKIAlpbnQgaTsKIAl1MzIgKnJidWYgPSAodTMyICopYnVmOwotCQorCiAJLyogcmVhZCBhbGwgQ1NScyAqLwogCWZvciAoaSA9IDA7IGkgPCBERV9OVU1fUkVHUzsgaSsrKQogCQlyYnVmW2ldID0gZHIzMihpICogOCk7CkBAIC0xNDc0LDcgKzE0NzQsNyBAQAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAllY21kLT5waHlfYWRkcmVzcyA9IDA7CiAJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBkZS0+bWVkaWFfYWR2ZXJ0aXNlOwotCQorCiAJc3dpdGNoIChkZS0+bWVkaWFfdHlwZSkgewogCWNhc2UgREVfTUVESUFfQVVJOgogCQllY21kLT5wb3J0ID0gUE9SVF9BVUk7CkBAIC0xNDg5LDcgKzE0ODksNyBAQAogCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwOwogCQlicmVhazsKIAl9Ci0JCisKIAlpZiAoZHIzMihNYWNNb2RlKSAmIEZ1bGxEdXBsZXgpCiAJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCWVsc2UKQEAgLTE1MjksNyArMTUyOSw3IEBACiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKIAkgICAgKCEoZWNtZC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEX0F1dG9uZWcpKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JCisKIAlzd2l0Y2ggKGVjbWQtPnBvcnQpIHsKIAljYXNlIFBPUlRfQVVJOgogCQluZXdfbWVkaWEgPSBERV9NRURJQV9BVUk7CkBAIC0xNTU0LDIyICsxNTU0LDIyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCQorCiAJbWVkaWFfbG9jayA9IChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSA/IDAgOiAxOwotCQorCiAJaWYgKChuZXdfbWVkaWEgPT0gZGUtPm1lZGlhX3R5cGUpICYmCiAJICAgIChtZWRpYV9sb2NrID09IGRlLT5tZWRpYV9sb2NrKSAmJgogCSAgICAoZWNtZC0+YWR2ZXJ0aXNpbmcgPT0gZGUtPm1lZGlhX2FkdmVydGlzZSkpCiAJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGNoYW5nZSAqLwotCSAgICAKKwogCWRlX2xpbmtfZG93bihkZSk7CiAJZGVfc3RvcF9yeHR4KGRlKTsKLQkKKwogCWRlLT5tZWRpYV90eXBlID0gbmV3X21lZGlhOwogCWRlLT5tZWRpYV9sb2NrID0gbWVkaWFfbG9jazsKIAlkZS0+bWVkaWFfYWR2ZXJ0aXNlID0gZWNtZC0+YWR2ZXJ0aXNpbmc7CiAJZGVfc2V0X21lZGlhKGRlKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xODE3LDcgKzE4MTcsNyBAQAogCWNhc2UgMHgwMjA0OiAgZGUtPm1lZGlhX3R5cGUgPSBERV9NRURJQV9UUF9GRDsgYnJlYWs7CiAJZGVmYXVsdDogZGUtPm1lZGlhX3R5cGUgPSBERV9NRURJQV9UUF9BVVRPOyBicmVhazsKIAl9Ci0JCisKIAlpZiAobmV0aWZfbXNnX3Byb2JlKGRlKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZGUlZDogU1JPTSBsZWFmIG9mZnNldCAldSwgZGVmYXVsdCBtZWRpYSAlc1xuIiwKIAkJICAgICAgIGRlLT5ib2FyZF9pZHgsIG9mcywKQEAgLTE4ODYsNyArMTg4Niw3IEBACiAJCQkJICAgICAgIGRlLT5tZWRpYVtpZHhdLmNzcjEzLAogCQkJCSAgICAgICBkZS0+bWVkaWFbaWR4XS5jc3IxNCwKIAkJCQkgICAgICAgZGUtPm1lZGlhW2lkeF0uY3NyMTUpOwotCQkJCSAgICAgICAKKwogCQl9IGVsc2UgaWYgKG5ldGlmX21zZ19wcm9iZShkZSkpCiAJCQlwcmludGsoIlxuIik7CiAKQEAgLTIxMTgsNyArMjExOCw3IEBACiAKIAkJc3Bpbl91bmxvY2tfaXJxKCZkZS0+bG9jayk7CiAJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwotCQkKKwogCQkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50cy4gKi8KIAkJX19kZV9nZXRfc3RhdHMoZGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCBmNTYwOTQxLi5kYThiZDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTQxLDExICs0MSwxMSBAQAogICAgIERpZ2l0YWwgU2VtaWNvbmR1Y3RvciAgIFNST00gICBTcGVjaWZpY2F0aW9uLiAgICBUaGUgIGRyaXZlciAgIGN1cnJlbnRseQogICAgIHJlY29nbmlzZXMgdGhlIGZvbGxvd2luZyBjaGlwczoKIAotICAgICAgICBEQzIxMDQwICAobm8gU1JPTSkgCi0JREMyMTA0MVtBXSAgCi0JREMyMTE0MFtBXSAKLQlEQzIxMTQyIAotCURDMjExNDMgCisgICAgICAgIERDMjEwNDAgIChubyBTUk9NKQorCURDMjEwNDFbQV0KKwlEQzIxMTQwW0FdCisJREMyMTE0MgorCURDMjExNDMKIAogICAgIFNvIGZhciB0aGUgZHJpdmVyIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5nIGNhcmRzOgogCkBAIC01NSw3ICs1NSw3IEBACiAJU01DODQzMgogCVNNQzkzMzIgKHcvbmV3IFNST00pCiAJWk5ZWDMxWzQ1XQotCVpOWVgzNDYgMTAvMTAwIDQgcG9ydCAoY2FuIGFjdCBhcyBhIDEwLzEwMCBicmlkZ2UhKSAKKwlaTllYMzQ2IDEwLzEwMCA0IHBvcnQgKGNhbiBhY3QgYXMgYSAxMC8xMDAgYnJpZGdlISkKIAogICAgIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIGEgcmVsYXRpdmVseSBidXN5IG5ldHdvcmsgdXNpbmcgdGhlIERFNDI1LAogICAgIERFNDM0LCBERTQzNSBhbmQgREU1MDAgY2FyZHMgYW5kIGJlbmNobWFya2VkIHdpdGggJ3R0Y3AnOiBpdCB0cmFuc2ZlcnJlZApAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgbG9hZGluZyBieToKIAogICAgICAgICAgICAgICAgICAgIGluc21vZCBkZTR4NSBpbz0weGdoaCAgICAgICAgICAgd2hlcmUgZyA9IGJ1cyBudW1iZXIKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhoID0gZGV2aWNlIG51bWJlciAgIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGggPSBkZXZpY2UgbnVtYmVyCiAKICAgICAgICBOQjogYXV0b3Byb2JpbmcgZm9yIG1vZHVsZXMgaXMgbm93IHN1cHBvcnRlZCBieSBkZWZhdWx0LiBZb3UgbWF5IGp1c3QKICAgICAgICAgICAgdXNlOgpAQCAtMTIwLDExICsxMjAsMTEgQEAKICAgICA0KSBpZiB5b3UgYXJlIHdhbnRpbmcgdG8gYWRkIGEgbmV3ICBjYXJkLCBnb3RvIDUuIE90aGVyd2lzZSwgcmVjb21waWxlIGEKICAgICBrZXJuZWwgd2l0aCB0aGUgZGU0eDUgY29uZmlndXJhdGlvbiB0dXJuZWQgb2ZmIGFuZCByZWJvb3QuCiAgICAgNSkgaW5zbW9kIGRlNHg1IFtpbz0weGdoaF0KLSAgICA2KSBydW4gdGhlIG5ldCBzdGFydHVwIGJpdHMgZm9yIHlvdXIgbmV3IGV0aD8/IGludGVyZmFjZShzKSBtYW51YWxseSAKLSAgICAodXN1YWxseSAvZXRjL3JjLmluZXRbMTJdIGF0IGJvb3QgdGltZSkuIAorICAgIDYpIHJ1biB0aGUgbmV0IHN0YXJ0dXAgYml0cyBmb3IgeW91ciBuZXcgZXRoPz8gaW50ZXJmYWNlKHMpIG1hbnVhbGx5CisgICAgKHVzdWFsbHkgL2V0Yy9yYy5pbmV0WzEyXSBhdCBib290IHRpbWUpLgogICAgIDcpIGVuam95IQogCi0gICAgVG8gdW5sb2FkIGEgbW9kdWxlLCB0dXJuIG9mZiB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UocykgCisgICAgVG8gdW5sb2FkIGEgbW9kdWxlLCB0dXJuIG9mZiB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UocykKICAgICAnaWZjb25maWcgZXRoPz8gZG93bicgdGhlbiAncm1tb2QgZGU0eDUnLgogCiAgICAgQXV0b21lZGlhIGRldGVjdGlvbiBpcyBpbmNsdWRlZCBzbyB0aGF0IGluICBwcmluY2lwYWwgeW91IGNhbiBkaXNjb25uZWN0CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICBCeSAgZGVmYXVsdCwgIHRoZSBkcml2ZXIgd2lsbCAgbm93ICAgYXV0b2RldGVjdCBhbnkgIERFQ2NoaXAgYmFzZWQgY2FyZC4KICAgICBTaG91bGQgeW91IGhhdmUgYSBuZWVkIHRvIHJlc3RyaWN0IHRoZSBkcml2ZXIgdG8gRElHSVRBTCBvbmx5IGNhcmRzLCB5b3UKICAgICBjYW4gY29tcGlsZSB3aXRoIGEgIERFQ19PTkxZIGRlZmluZSwgb3IgaWYgIGxvYWRpbmcgYXMgYSBtb2R1bGUsIHVzZSB0aGUKLSAgICAnZGVjX29ubHk9MScgIHBhcmFtZXRlci4gCisgICAgJ2RlY19vbmx5PTEnICBwYXJhbWV0ZXIuCiAKICAgICBJJ3ZlIGNoYW5nZWQgdGhlIHRpbWluZyByb3V0aW5lcyB0byAgdXNlIHRoZSBrZXJuZWwgdGltZXIgYW5kIHNjaGVkdWxpbmcKICAgICBmdW5jdGlvbnMgIHNvIHRoYXQgdGhlICBoYW5ncyAgYW5kIG90aGVyIGFzc29ydGVkIHByb2JsZW1zIHRoYXQgb2NjdXJyZWQKQEAgLTIwNCw3ICsyMDQsNyBAQAogICAgIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBhbGxvd2VkOgogCiAgICAgICAgICAgICBmZHggICAgICAgIGZvciBmdWxsIGR1cGxleAotCSAgICBhdXRvc2Vuc2UgIHRvIHNldCB0aGUgbWVkaWEvc3BlZWQ7IHdpdGggdGhlIGZvbGxvd2luZyAKKwkgICAgYXV0b3NlbnNlICB0byBzZXQgdGhlIG1lZGlhL3NwZWVkOyB3aXRoIHRoZSBmb2xsb3dpbmcKIAkgICAgICAgICAgICAgICBzdWItcGFyYW1ldGVyczoKIAkJICAgICAgIFRQLCBUUF9OVywgQk5DLCBBVUksIEJOQ19BVUksIDEwME1iLCAxME1iLCBBVVRPCiAKQEAgLTIzNSwxNCArMjM1LDE0IEBACiAgICAgdGhpcyAgYXV0b21hdGljYWxseSAgb3IgaW5jbHVkZSAgI2RlZmluZSBERTRYNV9GT1JDRV9FSVNBICBvbiBvciAgYmVmb3JlCiAgICAgbGluZSAxMDQwIGluIHRoZSBkcml2ZXIuCiAKLSAgICBUTyBETzogCisgICAgVE8gRE86CiAgICAgLS0tLS0tCiAKICAgICBSZXZpc2lvbiBIaXN0b3J5CiAgICAgLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgVmVyc2lvbiAgIERhdGUgICAgICAgIERlc2NyaXB0aW9uCi0gIAorCiAgICAgICAwLjEgICAgIDE3LU5vdi05NCAgIEluaXRpYWwgd3JpdGluZy4gQUxQSEEgY29kZSByZWxlYXNlLgogICAgICAgMC4yICAgICAxMy1KYW4tOTUgICBBZGRlZCBQQ0kgc3VwcG9ydCBmb3IgREU0MzUncy4KICAgICAgIDAuMjEgICAgMTktSmFuLTk1ICAgQWRkZWQgYXV0byBtZWRpYSBkZXRlY3Rpb24uCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCSAgQWRkIHJlcXVlc3QvcmVsZWFzZV9yZWdpb24gY29kZS4KIAkJCSAgQWRkIGxvYWRhYmxlIG1vZHVsZXMgc3VwcG9ydCBmb3IgUENJLgogCQkJICBDbGVhbiB1cCBsb2FkYWJsZSBtb2R1bGVzIHN1cHBvcnQuCi0gICAgICAwLjIzICAgIDI4LUZlYi05NSAgIEFkZGVkIERDMjEwNDEgYW5kIERDMjExNDAgc3VwcG9ydC4gCisgICAgICAwLjIzICAgIDI4LUZlYi05NSAgIEFkZGVkIERDMjEwNDEgYW5kIERDMjExNDAgc3VwcG9ydC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4IG1pc3NlZCBmcmFtZSBjb3VudGVyIHZhbHVlIGFuZCBpbml0aWFsaXNhdGlvbi4KIAkJCSAgRml4ZWQgRUlTQSBwcm9iZS4KICAgICAgIDAuMjQgICAgMTEtQXByLTk1ICAgQ2hhbmdlIGRlbGF5IHJvdXRpbmUgdG8gdXNlIDxsaW51eC91ZGVsYXk+LgpAQCAtMjgwLDcgKzI4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBrZXJuZWwgdGltZXIgY29kZSAoaC93IGlzIHRvbyBmbGFreSkuCiAJCQkgIEFkZCBNSUkgYmFzZWQgUEhZIGF1dG9zZW5zZS4KIAkJCSAgQWRkIG5ldyBtdWx0aWNhc3RpbmcgY29kZS4KLQkJCSAgQWRkIG5ldyBhdXRvc2Vuc2UgYWxnb3JpdGhtcyBmb3IgbWVkaWEvbW9kZSAKKwkJCSAgQWRkIG5ldyBhdXRvc2Vuc2UgYWxnb3JpdGhtcyBmb3IgbWVkaWEvbW9kZQogCQkJICBzZWxlY3Rpb24gdXNpbmcga2VybmVsIHNjaGVkdWxpbmcvdGltaW5nLgogCQkJICBSZS1mb3JtYXR0ZWQuCiAJCQkgIE1hZGUgY2hhbmdlcyBzdWdnZXN0ZWQgYnkgPGplZmZAcm91dGVyLnBhdGNoLm5ldD46CkBAIC0zMDcsMTAgKzMwNywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgQWNjdG9uIHRvIHRoZSBsaXN0IG9mIGJyb2tlbiBjYXJkcy4KIAkJCSAgRml4IFRYIHVuZGVyLXJ1biBidWcgZm9yIG5vbiBEQzIxMTQwIGNoaXBzLgogCQkJICBGaXggYm9vdCBjb21tYW5kIHByb2JlIGJ1ZyBpbiBhbGxvY19kZXZpY2UoKSBhcwotCQkJICAgcmVwb3J0ZWQgYnkgPGtvZW4uZ2FkZXluZUBiYXJjby5jb20+IGFuZCAKKwkJCSAgIHJlcG9ydGVkIGJ5IDxrb2VuLmdhZGV5bmVAYmFyY28uY29tPiBhbmQKIAkJCSAgIDxvcmF2YUBuZXRoZXIudGt5Lmh1dC5maT4uCiAJCQkgIEFkZCBjYWNoZSBsb2NrcyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gYXMKLQkJCSAgIHJlcG9ydGVkIGJ5IDxjc2RAbWljcm9wbGV4LmNvbT4gYW5kIAorCQkJICAgcmVwb3J0ZWQgYnkgPGNzZEBtaWNyb3BsZXguY29tPiBhbmQKIAkJCSAgIDxiYWJhQGJlY2ttYW4udWl1Yy5lZHU+LgogCQkJICBVcGdyYWRlZCBhbGxvY19kZXZpY2UoKSBjb2RlLgogICAgICAgMC40MzEgIDI4LUp1bi05NiAgICBGaXggcG90ZW50aWFsIGJ1ZyBpbiBxdWV1ZV9wa3QoKSBmcm9tIGRpc2N1c3Npb24KQEAgLTMyMiw3ICszMjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGxvb3BiYWNrIHBhY2tldC4KICAgICAgIDAuNDQyICAgOS1TZXAtOTYgICAgSW5jbHVkZSBBVUkgaW4gZGMyMTA0MSBtZWRpYSBwcmludG91dC4gQnVnIHJlcG9ydGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA8YmhhdEBtdW5kb29rLmNzLm11Lk9aLkFVPgotICAgICAgMC40NSAgICA4LURlYy05NiAgICBJbmNsdWRlIGVuZGlhbiBmdW5jdGlvbnMgZm9yIFBQQyB1c2UsIGZyb20gd29yayAKKyAgICAgIDAuNDUgICAgOC1EZWMtOTYgICAgSW5jbHVkZSBlbmRpYW4gZnVuY3Rpb25zIGZvciBQUEMgdXNlLCBmcm9tIHdvcmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IDxjb3J0QGNzLm5tdC5lZHU+IGFuZCA8Zy50aG9tYXNAb3Blbmdyb3VwLm9yZz4uCiAgICAgICAwLjQ1MSAgMjgtRGVjLTk2ICAgIEFkZGVkIGZpeCB0byBhbGxvdyBhdXRvcHJvYmUgZm9yIG1vZHVsZXMgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24gZnJvbSA8bWphY29iQGZlcmFsLmNvbT4uCkBAIC0zNDYsMTQgKzM0NiwxNCBAQAogCQkJICAgPHBhdWJlcnRAaXJhbS5lcz4uCiAgICAgICAwLjUyICAgMjYtQXByLTk3ICAgIFNvbWUgY2hhbmdlcyBtYXkgbm90IGNyZWRpdCB0aGUgcmlnaHQgcGVvcGxlIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGlzayBjcmFzaCBtZWFudCBJIGxvc3Qgc29tZSBtYWlsLgotCQkJICBDaGFuZ2UgUlggaW50ZXJydXB0IHJvdXRpbmUgdG8gZHJvcCByYXRoZXIgdGhhbiAKLQkJCSAgIGRlZmVyIHBhY2tldHMgdG8gYXZvaWQgaGFuZyByZXBvcnRlZCBieSAKKwkJCSAgQ2hhbmdlIFJYIGludGVycnVwdCByb3V0aW5lIHRvIGRyb3AgcmF0aGVyIHRoYW4KKwkJCSAgIGRlZmVyIHBhY2tldHMgdG8gYXZvaWQgaGFuZyByZXBvcnRlZCBieQogCQkJICAgPGcudGhvbWFzQG9wZW5ncm91cC5vcmc+LgogCQkJICBGaXggc3JvbV9leGVjKCkgdG8gcmV0dXJuIGZvciBDT01QQUNUIGFuZCB0eXBlIDEKIAkJCSAgIGluZm9ibG9ja3MuCiAJCQkgIEFkZGVkIERDMjExNDIgYW5kIERDMjExNDMgZnVuY3Rpb25zLgogCQkJICBBZGRlZCBieXRlIGNvdW50ZXJzIGZyb20gPHBoaWxAdGF6ZW5kYS5kZW1vbi5jby51az4KLQkJCSAgQWRkZWQgU0FfSU5URVJSVVBUIHRlbXBvcmFyeSBmaXggZnJvbSAKKwkJCSAgQWRkZWQgU0FfSU5URVJSVVBUIHRlbXBvcmFyeSBmaXggZnJvbQogCQkJICAgPG1qYWNvYkBmZXJhbC5jb20+LgogICAgICAgMC41MyAgIDEyLU5vdi05NyAgICBGaXggdGhlICpfcHJvYmUoKSB0byBpbmNsdWRlICdldGg/PycgbmFtZSBkdXJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBsb2FkOiBidWcgcmVwb3J0ZWQgYnkKQEAgLTM2MywxMCArMzYzLDEwIEBACiAJCQkgIE1ha2UgYWJvdmUgc2VhcmNoIGluZGVwZW5kZW50IG9mIEJJT1MgZGV2aWNlIHNjYW4KIAkJCSAgIGRpcmVjdGlvbi4KIAkJCSAgQ29tcGxldGVkIERDMjExNFsyM10gYXV0b3NlbnNlIGZ1bmN0aW9ucy4KLSAgICAgIDAuNTMxICAyMS1EZWMtOTcgICAgRml4IERFNTAwLVhBIDEwME1iL3MgYnVnIHJlcG9ydGVkIGJ5IAorICAgICAgMC41MzEgIDIxLURlYy05NyAgICBGaXggREU1MDAtWEEgMTAwTWIvcyBidWcgcmVwb3J0ZWQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb2JpbkBpbnRlcmNvcmUuY29tCiAJCQkgIEZpeCB0eXBlMV9pbmZvYmxvY2soKSBidWcgaW50cm9kdWNlZCBpbiAwLjUzLCBmcm9tCi0JCQkgICBwcm9ibGVtIHJlcG9ydHMgYnkgCisJCQkgICBwcm9ibGVtIHJlcG9ydHMgYnkKIAkJCSAgIDxwYXJtZWVAcG9zdGVjc3MubmNyZnJhbi5mcmFuY2UubmNyLmNvbT4gYW5kCiAJCQkgICA8am9AaWNlLmRpbGxpbmdlbi5iYXluZXQuZGU+LgogCQkJICBBZGRlZCBhcmd1bWVudCBsaXN0IHRvIHNldCB1cCBlYWNoIGJvYXJkIGZyb20gZWl0aGVyCkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJCSAgQWRkZWQgZ2VuZXJpYyBNSUkgUEhZIGZ1bmN0aW9uYWxpdHkgdG8gZGVhbCB3aXRoCiAJCQkgICBuZXdlciBQSFkgY2hpcHMuCiAJCQkgIEZpeCB0aGUgbWVzcyBpbiAyLjEuNjcuCi0gICAgICAwLjUzMiAgIDUtSmFuLTk4ICAgIEZpeCBidWcgaW4gbWlpX2dldF9waHkoKSByZXBvcnRlZCBieSAKKyAgICAgIDAuNTMyICAgNS1KYW4tOTggICAgRml4IGJ1ZyBpbiBtaWlfZ2V0X3BoeSgpIHJlcG9ydGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVkaGF0QGNvY29jby5uZXQ+LgogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXggYnVnIGluIHBjaV9wcm9iZSgpIGZvciA2NCBiaXQgc3lzdGVtcyByZXBvcnRlZAogCQkJICAgYnkgPGJlbGxpb3R0QGFjY2Vzc29uZS5jb20+LgpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCQkgICB2ZXJzaW9uLiBJIGhvcGUgbm90aGluZyBpcyBicm9rZW4uLi4KICAgICAgICAgICAJCSAgQWRkIFRYIGRvbmUgaW50ZXJydXB0IG1vZGlmaWNhdGlvbiBmcm9tIHN1Z2dlc3Rpb24KIAkJCSAgIGJ5IDxBdXN0aW4uRG9ubmVsbHlAY2wuY2FtLmFjLnVrPi4KLQkJCSAgRml4IGlzX2FuY19jYXBhYmxlKCkgYnVnIHJlcG9ydGVkIGJ5IAorCQkJICBGaXggaXNfYW5jX2NhcGFibGUoKSBidWcgcmVwb3J0ZWQgYnkKIAkJCSAgIDxBdXN0aW4uRG9ubmVsbHlAY2wuY2FtLmFjLnVrPi4KIAkJCSAgRml4IHR5cGVbMTNdX2luZm9ibG9jaygpIGJ1ZzogZHVyaW5nIE1JSSBzZWFyY2gsIFBIWQogCQkJICAgbHAtPnJzdCBub3QgcnVuIGJlY2F1c2UgbHAtPmlibiBub3QgaW5pdGlhbGlzZWQgLQpAQCAtNDEzLDcgKzQxMyw3IEBACiAJCQkgIEFkZCBhbl9leGNlcHRpb24oKSBmb3Igb2xkIFpZTlgzNDYgYW5kIGZpeCBjb21waWxlCiAJCQkgICB3YXJuaW5nIG9uIFBQQyAmIFNQQVJDLCBmcm9tIDxlY2RAc2t5bmV0LmJlPi4KIAkJCSAgRml4IGxhc3RQQ0kgdG8gY29ycmVjdGx5IHdvcmsgd2l0aCBjb21waWxlZCBpbgotCQkJICAga2VybmVscyBhbmQgbW9kdWxlcyBmcm9tIGJ1ZyByZXBvcnQgYnkgCisJCQkgICBrZXJuZWxzIGFuZCBtb2R1bGVzIGZyb20gYnVnIHJlcG9ydCBieQogCQkJICAgPFpsYXRrby5DYWx1c2ljQENBUk5ldC5ocj4gZXQgYWwuCiAgICAgICAwLjU0MiAgMTUtU2VwLTk4ICAgIEZpeCBkYzIxMTR4X2F1dG9jb25mKCkgdG8gc3RvcCBtdWx0aXBsZSBtZXNzYWdlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBtZWRpYSBpcyB1bmNvbm5lY3RlZC4KQEAgLTQyNSw3ICs0MjUsNyBAQAogICAgICAgMC41NDQgICA4LU1heS05OSAgICBGaXggZm9yIGJ1Z2d5IFNST00gaW4gTW90b3JvbGEgZW1iZWRkZWQgYm9hcmRzIHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIDIxMTQzIGJ5IDxtbXBvcnRlckBob21lLmNvbT4uCiAJCQkgIENoYW5nZSBQQ0kvRUlTQSBidXMgcHJvYmluZyBvcmRlci4KLSAgICAgIDAuNTQ1ICAyOC1Ob3YtOTkgICAgRnVydGhlciBNb3RvIFNST00gYnVnIGZpeCBmcm9tIAorICAgICAgMC41NDUgIDI4LU5vdi05OSAgICBGdXJ0aGVyIE1vdG8gU1JPTSBidWcgZml4IGZyb20KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtcG9ydGVyQGVuZy5tY2QubW90LmNvbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIGRvdWJsZSBjaGVja2luZyBmb3IgREVCVUdfUlggaW4gZGU0eDVfZGJnX3J4KCkKIAkJCSAgIGZyb20gcmVwb3J0IGJ5IDxnZWVydEBsaW51eC1tNjhrLm9yZz4KQEAgLTQzNCw4ICs0MzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgJ3BiJywgb24gYSBub24gZGU0eDUgUENJIGRldmljZSwgaW4gdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBhIFBDSSBicmlkZ2UgKERFQyBjaGlwIDIxMTUyKS4gVGhlIHZhbHVlIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGInIGlzIG5vdyBvbmx5IGluaXRpYWxpemVkIGlmIGEgZGU0eDUgY2hpcCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudC4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZnJhbmNlQGhhbmRoZWxkcy5vcmc+ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZnJhbmNlQGhhbmRoZWxkcy5vcmc+CiAgICAgICAwLjU0NyAgMDgtTm92LTAxICAgIFVzZSBsaWJyYXJ5IGNyYzMyIGZ1bmN0aW9ucyBieSA8TWF0dF9Eb21zY2hAZGVsbC5jb20+CiAgICAgICAwLjU0OCAgMzAtQXVnLTAzICAgIEJpZyAyLjYgY2xlYW51cC4gUG9ydGVkIHRvIFBDSS9FSVNBIHByb2JpbmcgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljIERNQSBBUElzLiBGaXhlZCBERTQyNSBzdXBwb3J0IG9uIEFscGhhLgpAQCAtNTg0LDcgKzU4NCw3IEBACiAKIC8qCiAqKiBBbGxvdyBwZXIgYWRhcHRlciBzZXQgdXAuIEZvciBtb2R1bGVzIHRoaXMgaXMgc2ltcGx5IGEgY29tbWFuZCBsaW5lCi0qKiBwYXJhbWV0ZXIsIGUuZy46IAorKiogcGFyYW1ldGVyLCBlLmcuOgogKiogaW5zbW9kIGRlNHg1IGFyZ3M9J2V0aDE6ZmR4IGF1dG9zZW5zZT1CTkMgZXRoMDphdXRvc2Vuc2U9MTAwTWInLgogKioKICoqIEZvciBhIGNvbXBpbGVkIGluIGRyaXZlciwgcGxhY2UgZS5nLgpAQCAtNjU1LDcgKzY1NSw3IEBACiAqKiBNZW1vcnkgQWxpZ25tZW50LiBFYWNoIGRlc2NyaXB0b3IgaXMgNCBsb25nd29yZHMgbG9uZy4gVG8gZm9yY2UgYQogKiogcGFydGljdWxhciBhbGlnbm1lbnQgb24gdGhlIFRYIGRlc2NyaXB0b3IsIGFkanVzdCBERVNDX1NLSVBfTEVOIGFuZAogKiogREVTQ19BTElHTi4gQUxJR04gYWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBwcml2YXRlIG1lbW9yeSBhcmVhCi0qKiBhbmQgaGVuY2UgdGhlIFJYIGRlc2NyaXB0b3IgcmluZydzIGZpcnN0IGVudHJ5LiAKKyoqIGFuZCBoZW5jZSB0aGUgUlggZGVzY3JpcHRvciByaW5nJ3MgZmlyc3QgZW50cnkuCiAqLwogI2RlZmluZSBERTRYNV9BTElHTjQgICAgICAoKHVfbG9uZyk0IC0gMSkgICAgIC8qIDEgbG9uZ3dvcmQgYWxpZ24gKi8KICNkZWZpbmUgREU0WDVfQUxJR044ICAgICAgKCh1X2xvbmcpOCAtIDEpICAgICAvKiAyIGxvbmd3b3JkIGFsaWduICovCkBAIC0xMDgxLDggKzEwODEsOCBAQAogICAgIG1kZWxheSgyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGZvciAybXMgKi9cCiB9CiAKLQwKLXN0YXRpYyBpbnQgX19kZXZpbml0IAorCitzdGF0aWMgaW50IF9fZGV2aW5pdAogZGU0eDVfaHdfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2xvbmcgaW9iYXNlLCBzdHJ1Y3QgZGV2aWNlICpnZW5kZXYpCiB7CiAgICAgY2hhciBuYW1lW0RFNFg1X05BTUVfTEVOR1RIICsgMV07CkBAIC0xMTAyLDEyICsxMTAyLDEyIEBACiAgICAgbWRlbGF5KDEwKTsKIAogICAgIFJFU0VUX0RFNFg1OwotICAgIAorCiAgICAgaWYgKChpbmwoREU0WDVfU1RTKSAmIChTVFNfVFMgfCBTVFNfUlMpKSAhPSAwKSB7CiAJcmV0dXJuIC1FTlhJTzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcmR3YXJlIGNvdWxkIG5vdCByZXNldCAqLwogICAgIH0KLSAgICAKLSAgICAvKiAKKworICAgIC8qCiAgICAgKiogTm93IGZpbmQgb3V0IHdoYXQga2luZCBvZiBEQzIxMDQwL0RDMjEwNDEvREMyMTE0MCBib2FyZCB3ZSBoYXZlLgogICAgICovCiAgICAgbHAtPnVzZVNST00gPSBGQUxTRTsKQEAgLTExMTYsMjEgKzExMTYsMjEgQEAKICAgICB9IGVsc2UgewogCUVJU0Ffc2lnbmF0dXJlKG5hbWUsIGdlbmRldik7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCpuYW1lID09ICdcMCcpIHsgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgZm91bmQgYSBib2FyZCBzaWduYXR1cmUgKi8KIAlyZXR1cm4gLUVOWElPOwogICAgIH0KLSAgICAKKwogICAgIGRldi0+YmFzZV9hZGRyID0gaW9iYXNlOwogICAgIHByaW50ayAoIiVzOiAlcyBhdCAweCUwNGx4IiwgZ2VuZGV2LT5idXNfaWQsIG5hbWUsIGlvYmFzZSk7Ci0gICAgCisKICAgICBwcmludGsoIiwgaC93IGFkZHJlc3MgIik7CiAgICAgc3RhdHVzID0gZ2V0X2h3X2FkZHIoZGV2KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU4gLSAxOyBpKyspIHsgICAgIC8qIGdldCB0aGUgZXRoZXJuZXQgYWRkci4gKi8KIAlwcmludGsoIiUyLjJ4OiIsIGRldi0+ZGV2X2FkZHJbaV0pOwogICAgIH0KICAgICBwcmludGsoIiUyLjJ4LFxuIiwgZGV2LT5kZXZfYWRkcltpXSk7Ci0gICAgCisKICAgICBpZiAoc3RhdHVzICE9IDApIHsKIAlwcmludGsoIiAgICAgIHdoaWNoIGhhcyBhbiBFdGhlcm5ldCBQUk9NIENSQyBlcnJvci5cbiIpOwogCXJldHVybiAtRU5YSU87CkBAIC0xMTcxLDEwICsxMTcxLDEwIEBACiAJfQogCiAJbHAtPnR4X3JpbmcgPSBscC0+cnhfcmluZyArIE5VTV9SWF9ERVNDOwotCSAgICAKKwogCS8qCiAJKiogU2V0IHVwIHRoZSBSWCBkZXNjcmlwdG9yIHJpbmcgKEludGVscykKLQkqKiBBbGxvY2F0ZSBjb250aWd1b3VzIHJlY2VpdmUgYnVmZmVycywgbG9uZyB3b3JkIGFsaWduZWQgKEFscGhhcykgCisJKiogQWxsb2NhdGUgY29udGlndW91cyByZWNlaXZlIGJ1ZmZlcnMsIGxvbmcgd29yZCBhbGlnbmVkIChBbHBoYXMpCiAJKi8KICNpZiAhZGVmaW5lZChfX2FscGhhX18pICYmICFkZWZpbmVkKF9fcG93ZXJwY19fKSAmJiAhZGVmaW5lZChfX3NwYXJjX3Y5X18pICYmICFkZWZpbmVkKERFNFg1X0RPX01FTUNQWSkKIAlmb3IgKGk9MDsgaTxOVU1fUlhfREVTQzsgaSsrKSB7CkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCiAJbHAtPnJ4UmluZ1NpemUgPSBOVU1fUlhfREVTQzsKIAlscC0+dHhSaW5nU2l6ZSA9IE5VTV9UWF9ERVNDOwotCSAgICAKKwogCS8qIFdyaXRlIHRoZSBlbmQgb2YgbGlzdCBtYXJrZXIgdG8gdGhlIGRlc2NyaXB0b3IgbGlzdHMgKi8KIAlscC0+cnhfcmluZ1tscC0+cnhSaW5nU2l6ZSAtIDFdLmRlczEgfD0gY3B1X3RvX2xlMzIoUkRfUkVSKTsKIAlscC0+dHhfcmluZ1tscC0+dHhSaW5nU2l6ZSAtIDFdLmRlczEgfD0gY3B1X3RvX2xlMzIoVERfVEVSKTsKQEAgLTEyMTksNyArMTIxOSw3IEBACiAJb3V0bChscC0+ZG1hX3JpbmdzLCBERTRYNV9SUkJBKTsKIAlvdXRsKGxwLT5kbWFfcmluZ3MgKyBOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgZGU0eDVfZGVzYyksCiAJICAgICBERTRYNV9UUkJBKTsKLQkgICAgCisKIAkvKiBJbml0aWFsaXNlIHRoZSBJUlEgbWFzayBhbmQgRW5hYmxlL0Rpc2FibGUgKi8KIAlscC0+aXJxX21hc2sgPSBJTVJfUklNIHwgSU1SX1RJTSB8IElNUl9UVU0gfCBJTVJfVU5NOwogCWxwLT5pcnFfZW4gICA9IElNUl9OSU0gfCBJTVJfQUlNOwpAQCAtMTI1Miw3ICsxMjUyLDcgQEAKIAlpZiAoKGxwLT5jaGlwc2V0ICE9IERDMjEwNDApICYmIChscC0+Y2hpcHNldCAhPSBEQzIxMDQxKSkgewogCSAgICBtaWlfZ2V0X3BoeShkZXYpOwogCX0KLQkKKwogI2lmbmRlZiBfX3NwYXJjX3Y5X18KIAlwcmludGsoIiAgICAgIGFuZCByZXF1aXJlcyBJUlElZCAocHJvdmlkZWQgYnkgJXMpLlxuIiwgZGV2LT5pcnEsCiAjZWxzZQpAQCAtMTI2MCwxMSArMTI2MCwxMSBAQAogI2VuZGlmCiAJICAgICAgICgobHAtPmJ1cyA9PSBQQ0kpID8gIlBDSSBCSU9TIiA6ICJFSVNBIENORkciKSk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGRlNHg1X2RlYnVnICYgREVCVUdfVkVSU0lPTikgewogCXByaW50ayh2ZXJzaW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKiBUaGUgREU0WDUtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KICAgICBTRVRfTU9EVUxFX09XTkVSKGRldik7CiAgICAgU0VUX05FVERFVl9ERVYoZGV2LCBnZW5kZXYpOwpAQCAtMTI3NCwyMyArMTI3NCwyMyBAQAogICAgIGRldi0+Z2V0X3N0YXRzID0gJmRlNHg1X2dldF9zdGF0czsKICAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7CiAgICAgZGV2LT5kb19pb2N0bCA9ICZkZTR4NV9pb2N0bDsKLSAgICAKKwogICAgIGRldi0+bWVtX3N0YXJ0ID0gMDsKLSAgICAKKwogICAgIC8qIEZpbGwgaW4gdGhlIGdlbmVyaWMgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwogICAgIGlmICgoc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2IChkZXYpKSkgewogCSAgICBkbWFfZnJlZV9jb2hlcmVudCAoZ2VuZGV2LCBscC0+ZG1hX3NpemUsCiAJCQkgICAgICAgbHAtPnJ4X3JpbmcsIGxwLT5kbWFfcmluZ3MpOwogCSAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICAKKwogICAgIC8qIExldCB0aGUgYWRhcHRlciBzbGVlcCB0byBzYXZlIHBvd2VyICovCiAgICAgeWF3bihkZXYsIFNMRUVQKTsKLSAgICAKKwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLQwKKwogc3RhdGljIGludAogZGU0eDVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTMxMiwxNSArMTMxMiwxNSBAQAogICAgICovCiAgICAgeWF3bihkZXYsIFdBS0VVUCk7CiAKLSAgICAvKiAKLSAgICAqKiBSZS1pbml0aWFsaXplIHRoZSBERTRYNS4uLiAKKyAgICAvKgorICAgICoqIFJlLWluaXRpYWxpemUgdGhlIERFNFg1Li4uCiAgICAgKi8KICAgICBzdGF0dXMgPSBkZTR4NV9pbml0KGRldik7CiAgICAgc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKICAgICBscC0+c3RhdGUgPSBPUEVOOwogICAgIGRlNHg1X2RiZ19vcGVuKGRldik7Ci0gICAgCi0gICAgaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAodm9pZCAqKWRlNHg1X2ludGVycnVwdCwgU0FfU0hJUlEsIAorCisgICAgaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAodm9pZCAqKWRlNHg1X2ludGVycnVwdCwgU0FfU0hJUlEsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscC0+YWRhcHRlcl9uYW1lLCBkZXYpKSB7CiAJcHJpbnRrKCJkZTR4NV9vcGVuKCk6IFJlcXVlc3RlZCBJUlElZCBpcyBidXN5IC0gYXR0ZW1waW5nIEZBU1QvU0hBUkUuLi4iLCBkZXYtPmlycSk7CiAJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZTR4NV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLApAQCAtMTM0MCwxMSArMTM0MCwxMSBAQAogCiAgICAgbHAtPmludGVycnVwdCA9IFVOTUFTS19JTlRFUlJVUFRTOwogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotICAgIAorCiAgICAgU1RBUlRfREU0WDU7Ci0JCisKICAgICBkZTR4NV9zZXR1cF9pbnRyKGRldik7Ci0gICAgCisKICAgICBpZiAoZGU0eDVfZGVidWcgJiBERUJVR19PUEVOKSB7CiAJcHJpbnRrKCJcdHN0czogIDB4JTA4eFxuIiwgaW5sKERFNFg1X1NUUykpOwogCXByaW50aygiXHRibXI6ICAweCUwOHhcbiIsIGlubChERTRYNV9CTVIpKTsKQEAgLTEzNTUsNyArMTM1NSw3IEBACiAJcHJpbnRrKCJcdHN0cnI6IDB4JTA4eFxuIiwgaW5sKERFNFg1X1NUUlIpKTsKIAlwcmludGsoIlx0c2lncjogMHglMDh4XG4iLCBpbmwoREU0WDVfU0lHUikpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEzNjksMTUgKzEzNjksMTUgQEAKICovCiBzdGF0aWMgaW50CiBkZTR4NV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17ICAKK3sKICAgICAvKiBMb2NrIG91dCBvdGhlciBwcm9jZXNzZXMgd2hpbHN0IHNldHRpbmcgdXAgdGhlIGhhcmR3YXJlICovCiAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgIAorCiAgICAgZGU0eDVfc3dfcmVzZXQoZGV2KTsKLSAgICAKKwogICAgIC8qIEF1dG9jb25maWd1cmUgdGhlIGNvbm5lY3RlZCBwb3J0ICovCiAgICAgYXV0b2NvbmZfbWVkaWEoZGV2KTsKLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMzg4LDcgKzEzODgsNyBAQAogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgaSwgaiwgc3RhdHVzID0gMDsKICAgICBzMzIgYm1yLCBvbXI7Ci0gICAgCisKICAgICAvKiBTZWxlY3QgdGhlIE1JSSBvciBTUkwgcG9ydCBub3cgYW5kIFJFU0VUIHRoZSBNQUMgKi8KICAgICBpZiAoIWxwLT51c2VTUk9NKSB7CiAJaWYgKGxwLT5waHlbbHAtPmFjdGl2ZV0uaWQgIT0gMCkgewpAQCAtMTM5OSw3ICsxMzk5LDcgQEAKIAlkZTR4NV9zd2l0Y2hfbWFjX3BvcnQoZGV2KTsKICAgICB9CiAKLSAgICAvKiAKKyAgICAvKgogICAgICoqIFNldCB0aGUgcHJvZ3JhbW1hYmxlIGJ1cnN0IGxlbmd0aCB0byA4IGxvbmd3b3JkcyBmb3IgYWxsIHRoZSBEQzIxMTQwCiAgICAgKiogRmFzdGVybmV0IGNoaXBzIGFuZCA0IGxvbmd3b3JkcyBmb3IgYWxsIG90aGVyczogRE1BIGVycm9ycyByZXN1bHQKICAgICAqKiB3aXRob3V0IHRoZXNlIHZhbHVlcy4gQ2FjaGUgYWxpZ24gMTYgbG9uZy4KQEAgLTE0MTYsMjMgKzE0MTYsMjMgQEAKICAgICBvdXRsKGxwLT5kbWFfcmluZ3MsIERFNFg1X1JSQkEpOwogICAgIG91dGwobHAtPmRtYV9yaW5ncyArIE5VTV9SWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBkZTR4NV9kZXNjKSwKIAkgREU0WDVfVFJCQSk7Ci0gICAgCisKICAgICBscC0+cnhfbmV3ID0gbHAtPnJ4X29sZCA9IDA7CiAgICAgbHAtPnR4X25ldyA9IGxwLT50eF9vbGQgPSAwOwotICAgIAorCiAgICAgZm9yIChpID0gMDsgaSA8IGxwLT5yeFJpbmdTaXplOyBpKyspIHsKIAlscC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBjcHVfdG9fbGUzMihSX09XTik7CiAgICAgfQotICAgIAorCiAgICAgZm9yIChpID0gMDsgaSA8IGxwLT50eFJpbmdTaXplOyBpKyspIHsKIAlscC0+dHhfcmluZ1tpXS5zdGF0dXMgPSBjcHVfdG9fbGUzMigwKTsKICAgICB9Ci0gICAgCisKICAgICBiYXJyaWVyKCk7CiAKICAgICAvKiBCdWlsZCB0aGUgc2V0dXAgZnJhbWUgZGVwZW5kaW5nIG9uIGZpbHRlcmluZyBtb2RlICovCiAgICAgU2V0TXVsdGljYXN0RmlsdGVyKGRldik7Ci0gICAgCisKICAgICBsb2FkX3BhY2tldChkZXYsIGxwLT5zZXR1cF9mcmFtZSwgUEVSRkVDVF9GfFREX1NFVHxTRVRVUF9GUkFNRV9MRU4sIChzdHJ1Y3Qgc2tfYnVmZiAqKTEpOwogICAgIG91dGwob21yfE9NUl9TVCwgREU0WDVfT01SKTsKIApAQCAtMTQ0NSwxOCArMTQ0NSwxOCBAQAogICAgIG91dGwob21yLCBERTRYNV9PTVIpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3AgZXZlcnl0aGluZyEgKi8KIAogICAgIGlmIChqID09IDApIHsKLQlwcmludGsoIiVzOiBTZXR1cCBmcmFtZSB0aW1lZCBvdXQsIHN0YXR1cyAlMDh4XG4iLCBkZXYtPm5hbWUsIAorCXByaW50aygiJXM6IFNldHVwIGZyYW1lIHRpbWVkIG91dCwgc3RhdHVzICUwOHhcbiIsIGRldi0+bmFtZSwKIAkgICAgICAgaW5sKERFNFg1X1NUUykpOwogCXN0YXR1cyA9IC1FSU87CiAgICAgfQotICAgIAorCiAgICAgbHAtPnR4X25ldyA9ICgrK2xwLT50eF9uZXcpICUgbHAtPnR4UmluZ1NpemU7CiAgICAgbHAtPnR4X29sZCA9IGxwLT50eF9uZXc7CiAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi0vKiAKKy8qCiAqKiBXcml0ZXMgYSBzb2NrZXQgYnVmZmVyIGFkZHJlc3MgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHRyYW5zbWl0IGRlc2NyaXB0b3IuCiAqLwogc3RhdGljIGludApAQCAtMTQ2OSw5ICsxNDY5LDkgQEAKIAogICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKICAgICBpZiAobHAtPnR4X2VuYWJsZSA9PSBOTykgeyAgICAgICAgICAgICAgICAgICAvKiBDYW5ub3Qgc2VuZCBmb3Igbm93ICovCi0JcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJcmV0dXJuIC0xOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgKiogQ2xlYW4gb3V0IHRoZSBUWCByaW5nIGFzeW5jaHJvbm91c2x5IHRvIGludGVycnVwdHMgLSBzb21ldGltZXMgdGhlCiAgICAgKiogaW50ZXJydXB0cyBhcmUgbG9zdCBieSBkZWxheWVkIGRlc2NyaXB0b3Igc3RhdHVzIHVwZGF0ZXMgcmVsYXRpdmUgdG8KQEAgLTE0ODIsNyArMTQ4Miw3IEBACiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogICAgIC8qIFRlc3QgaWYgY2FjaGUgaXMgYWxyZWFkeSBsb2NrZWQgLSByZXF1ZXVlIHNrYiBpZiBzbyAqLwotICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopJmxwLT5jYWNoZS5sb2NrKSAmJiAhbHAtPmludGVycnVwdCkgCisgICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQgKikmbHAtPmNhY2hlLmxvY2spICYmICFscC0+aW50ZXJydXB0KQogCXJldHVybiAtMTsKIAogICAgIC8qIFRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZyBmdWxsIG9yIHN0YWxlIHNrYiAqLwpAQCAtMTUwOSwxMCArMTUwOSwxMCBAQAogCSAgICBsb2FkX3BhY2tldChkZXYsIHNrYi0+ZGF0YSwgVERfSUMgfCBURF9MUyB8IFREX0ZTIHwgc2tiLT5sZW4sIHNrYik7CiAgCSAgICBscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJICAgIG91dGwoUE9MTF9ERU1BTkQsIERFNFg1X1RQRCk7LyogU3RhcnQgdGhlIFRYICovCi0JCQorCiAJICAgIGxwLT50eF9uZXcgPSAoKytscC0+dHhfbmV3KSAlIGxwLT50eFJpbmdTaXplOwogCSAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJICAgIAorCiAJICAgIGlmIChUWF9CVUZGU19BVkFJTCkgewogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOyAgICAgICAgIC8qIEFub3RoZXIgcGt0IG1heSBiZSBxdWV1ZWQgKi8KIAkgICAgfQpAQCAtMTUyMSwxNSArMTUyMSwxNSBAQAogCX0KIAlpZiAoc2tiKSBkZTR4NV9wdXRiX2NhY2hlKGRldiwgc2tiKTsKICAgICB9Ci0gICAgCisKICAgICBscC0+Y2FjaGUubG9jayA9IDA7CiAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCiAvKgotKiogVGhlIERFNFg1IGludGVycnVwdCBoYW5kbGVyLiAKLSoqIAorKiogVGhlIERFNFg1IGludGVycnVwdCBoYW5kbGVyLgorKioKICoqIEkvTyBSZWFkL1dyaXRlcyB0aHJvdWdoIGludGVybWVkaWF0ZSBQQ0kgYnJpZGdlcyBhcmUgbmV2ZXIgJ3Bvc3RlZCcsCiAqKiBzbyB0aGF0IHRoZSBhc3NlcnRlZCBpbnRlcnJ1cHQgYWx3YXlzIGhhcyBzb21lIHJlYWwgZGF0YSB0byB3b3JrIHdpdGggLQogKiogaWYgdGhlc2UgSS9PIGFjY2Vzc2VzIGFyZSBldmVyIGNoYW5nZWQgdG8gbWVtb3J5IGFjY2Vzc2VzLCBlbnN1cmUgdGhlCkBAIC0xNTQ2LDcgKzE1NDYsNyBAQAogICAgIHMzMiBpbXIsIG9tciwgc3RzLCBsaW1pdDsKICAgICB1X2xvbmcgaW9iYXNlOwogICAgIHVuc2lnbmVkIGludCBoYW5kbGVkID0gMDsKLSAgICAKKwogICAgIGlmIChkZXYgPT0gTlVMTCkgewogCXByaW50ayAoImRlNHg1X2ludGVycnVwdCgpOiBpcnEgJWQgZm9yIHVua25vd24gZGV2aWNlLlxuIiwgaXJxKTsKIAlyZXR1cm4gSVJRX05PTkU7CkBAIC0xNTU0LDM1ICsxNTU0LDM1IEBACiAgICAgbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHNwaW5fbG9jaygmbHAtPmxvY2spOwogICAgIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCQorCiAgICAgRElTQUJMRV9JUlFzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBub24gcmUtZW50cmFuY3kgKi8KIAogICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KE1BU0tfSU5URVJSVVBUUywgKHZvaWQqKSAmbHAtPmludGVycnVwdCkpCiAJcHJpbnRrKCIlczogUmUtZW50ZXJpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLlxuIiwgZGV2LT5uYW1lKTsKIAogICAgIHN5bmNocm9uaXplX2lycShkZXYtPmlycSk7Ci0JCisKICAgICBmb3IgKGxpbWl0PTA7IGxpbWl0PDg7IGxpbWl0KyspIHsKIAlzdHMgPSBpbmwoREU0WDVfU1RTKTsgICAgICAgICAgICAvKiBSZWFkIElSUSBzdGF0dXMgKi8KIAlvdXRsKHN0cywgREU0WDVfU1RTKTsgICAgICAgICAgICAvKiBSZXNldCB0aGUgYm9hcmQgaW50ZXJydXB0cyAqLwotCSAgICAKKwogCWlmICghKHN0cyAmIGxwLT5pcnFfbWFzaykpIGJyZWFrOy8qIEFsbCBkb25lICovCiAJaGFuZGxlZCA9IDE7Ci0JICAgIAorCiAJaWYgKHN0cyAmIChTVFNfUkkgfCBTVFNfUlUpKSAgICAgLyogUnggaW50ZXJydXB0IChwYWNrZXRbc10gYXJyaXZlZCkgKi8KIAkgIGRlNHg1X3J4KGRldik7Ci0JICAgIAorCiAJaWYgKHN0cyAmIChTVFNfVEkgfCBTVFNfVFUpKSAgICAgLyogVHggaW50ZXJydXB0IChwYWNrZXQgc2VudCkgKi8KLQkgIGRlNHg1X3R4KGRldik7IAotCSAgICAKKwkgIGRlNHg1X3R4KGRldik7CisKIAlpZiAoc3RzICYgU1RTX0xORikgeyAgICAgICAgICAgICAvKiBUUCBMaW5rIGhhcyBmYWlsZWQgKi8KIAkgICAgbHAtPmlycV9tYXNrICY9IH5JTVJfTEZNOwogCX0KLQkgICAgCisKIAlpZiAoc3RzICYgU1RTX1VORikgeyAgICAgICAgICAgICAvKiBUcmFuc21pdCB1bmRlcnJ1biAqLwogCSAgICBkZTR4NV90eHVyKGRldik7CiAJfQotCSAgICAKKwogCWlmIChzdHMgJiBTVFNfU0UpIHsgICAgICAgICAgICAgIC8qIEJ1cyBFcnJvciAqLwogCSAgICBTVE9QX0RFNFg1OwogCSAgICBwcmludGsoIiVzOiBGYXRhbCBidXMgZXJyb3Igb2NjdXJyZWQsIHN0cz0lIzh4LCBkZXZpY2Ugc3RvcHBlZC5cbiIsCkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogICAgIGxwLT5pbnRlcnJ1cHQgPSBVTk1BU0tfSU5URVJSVVBUUzsKICAgICBFTkFCTEVfSVJRczsKICAgICBzcGluX3VubG9jaygmbHAtPmxvY2spOwotICAgIAorCiAgICAgcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKQEAgLTE2MTQsMTEgKzE2MTQsMTEgQEAKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IGVudHJ5OwogICAgIHMzMiBzdGF0dXM7Ci0gICAgCisKICAgICBmb3IgKGVudHJ5PWxwLT5yeF9uZXc7IChzMzIpbGUzMl90b19jcHUobHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk+PTA7CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5PWxwLT5yeF9uZXcpIHsKIAlzdGF0dXMgPSAoczMyKWxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOwotCQorCiAJaWYgKGxwLT5yeF9vdmYpIHsKIAkgICAgaWYgKGlubChERTRYNV9NRkMpICYgTUZDX0ZPQ00pIHsKIAkJZGU0eDVfcnhfb3ZmYyhkZXYpOwpAQCAtMTYyOSw3ICsxNjI5LDcgQEAKIAlpZiAoc3RhdHVzICYgUkRfRlMpIHsgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBzdGFydCBvZiBmcmFtZSAqLwogCSAgICBscC0+cnhfb2xkID0gZW50cnk7CiAJfQotCQorCiAJaWYgKHN0YXR1cyAmIFJEX0xTKSB7ICAgICAgICAgICAgICAgICAvKiBWYWxpZCBmcmFtZSBzdGF0dXMgKi8KIAkgICAgaWYgKGxwLT50eF9lbmFibGUpIGxwLT5saW5rT0srKzsKIAkgICAgaWYgKHN0YXR1cyAmIFJEX0VTKSB7CSAgICAgIC8qIFRoZXJlIHdhcyBhbiBlcnJvci4gKi8KQEAgLTE2NDYsOSArMTY0Niw5IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXNob3J0IHBrdF9sZW4gPSAoc2hvcnQpKGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpCiAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAxNikgLSA0OwotCQkKKwogCQlpZiAoKHNrYiA9IGRlNHg1X2FsbG9jX3J4X2J1ZmYoZGV2LCBlbnRyeSwgcGt0X2xlbikpID09IE5VTEwpIHsKLQkJICAgIHByaW50aygiJXM6IEluc3VmZmljaWVudCBtZW1vcnk7IG51a2luZyBwYWNrZXQuXG4iLCAKKwkJICAgIHByaW50aygiJXM6IEluc3VmZmljaWVudCBtZW1vcnk7IG51a2luZyBwYWNrZXQuXG4iLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUpOwogCQkgICAgbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfSBlbHNlIHsKQEAgLTE2NTgsMTQgKzE2NTgsMTQgQEAKIAkJICAgIHNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7CiAJCSAgICBkZTR4NV9sb2NhbF9zdGF0cyhkZXYsIHNrYi0+ZGF0YSwgcGt0X2xlbik7CiAJCSAgICBuZXRpZl9yeChza2IpOwotCQkgICAgCisKIAkJICAgIC8qIFVwZGF0ZSBzdGF0cyAqLwogCQkgICAgZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJICAgIGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAgCQkgICAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCX0KIAkgICAgfQotCSAgICAKKwogCSAgICAvKiBDaGFuZ2UgYnVmZmVyIG93bmVyc2hpcCBmb3IgdGhpcyBmcmFtZSwgYmFjayB0byB0aGUgYWRhcHRlciAqLwogCSAgICBmb3IgKDtscC0+cnhfb2xkIT1lbnRyeTtscC0+cnhfb2xkPSgrK2xwLT5yeF9vbGQpJWxwLT5yeFJpbmdTaXplKSB7CiAJCWxwLT5yeF9yaW5nW2xwLT5yeF9vbGRdLnN0YXR1cyA9IGNwdV90b19sZTMyKFJfT1dOKTsKQEAgLTE2NzQsMTMgKzE2NzQsMTMgQEAKIAkgICAgbHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyA9IGNwdV90b19sZTMyKFJfT1dOKTsKIAkgICAgYmFycmllcigpOwogCX0KLQkKKwogCS8qCiAJKiogVXBkYXRlIGVudHJ5IGluZm9ybWF0aW9uCiAJKi8KIAlscC0+cnhfbmV3ID0gKCsrbHAtPnJ4X25ldykgJSBscC0+cnhSaW5nU2l6ZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTcwNSwyMCArMTcwNSwyMCBAQAogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgZW50cnk7CiAgICAgczMyIHN0YXR1czsKLSAgICAKKwogICAgIGZvciAoZW50cnkgPSBscC0+dHhfb2xkOyBlbnRyeSAhPSBscC0+dHhfbmV3OyBlbnRyeSA9IGxwLT50eF9vbGQpIHsKIAlzdGF0dXMgPSAoczMyKWxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMpOwogCWlmIChzdGF0dXMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIG5vdCBzZW50IHlldCAqLwogCSAgICBicmVhazsKIAl9IGVsc2UgaWYgKHN0YXR1cyAhPSAweDdmZmZmZmZmKSB7ICAgIC8qIE5vdCBzZXR1cCBmcmFtZSAqLwogCSAgICBpZiAoc3RhdHVzICYgVERfRVMpIHsgICAgICAgICAgICAgLyogQW4gZXJyb3IgaGFwcGVuZWQgKi8KLQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOyAKKwkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgVERfTkMpIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgVERfTEMpIGxwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBURF9VRikgbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBURF9FQykgbHAtPnBrdFN0YXRzLmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKys7CiAJCWlmIChzdGF0dXMgJiBURF9ERSkgbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JICAgIAorCiAJCWlmIChUWF9QS1RfUEVORElORykgewogCQkgICAgb3V0bChQT0xMX0RFTUFORCwgREU0WDVfVFBEKTsvKiBSZXN0YXJ0IGEgc3RhbGxlZCBUWCAqLwogCQl9CkBAIC0xNzI3LDE0ICsxNzI3LDE0IEBACiAJCWlmIChscC0+dHhfZW5hYmxlKSBscC0+bGlua09LKys7CiAJICAgIH0KIAkgICAgLyogVXBkYXRlIHRoZSBjb2xsaXNpb24gY291bnRlciAqLwotCSAgICBscC0+c3RhdHMuY29sbGlzaW9ucyArPSAoKHN0YXR1cyAmIFREX0VDKSA/IDE2IDogCisJICAgIGxwLT5zdGF0cy5jb2xsaXNpb25zICs9ICgoc3RhdHVzICYgVERfRUMpID8gMTYgOgogCQkJCSAgICAgICAgICAgICAgICAgICAgICAoKHN0YXR1cyAmIFREX0NDKSA+PiAzKSk7CiAKIAkgICAgLyogRnJlZSB0aGUgYnVmZmVyLiAqLwogCSAgICBpZiAobHAtPnR4X3NrYltlbnRyeV0gIT0gTlVMTCkKIAkgICAgCWRlNHg1X2ZyZWVfdHhfYnVmZihscCwgZW50cnkpOwogCX0KLQkKKwogCS8qIFVwZGF0ZSBhbGwgdGhlIHBvaW50ZXJzICovCiAJbHAtPnR4X29sZCA9ICgrK2xwLT50eF9vbGQpICUgbHAtPnR4UmluZ1NpemU7CiAgICAgfQpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAKIAllbHNlCiAJICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAgICAgfQotCQorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE3NTUsOSArMTc1NSw5IEBACiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBpbnQgbmV4dF90aWNrID0gREU0WDVfQVVUT1NFTlNFX01TOwotICAgIAorCiAgICAgZGlzYWJsZV9hc3QoZGV2KTsKLSAgICAKKwogICAgIGlmIChscC0+dXNlU1JPTSkgewogCW5leHRfdGljayA9IHNyb21fYXV0b2NvbmYoZGV2KTsKICAgICB9IGVsc2UgaWYgKGxwLT5jaGlwc2V0ID09IERDMjExNDApIHsKQEAgLTE3NjksNyArMTc2OSw3IEBACiAgICAgfQogICAgIGxwLT5saW5rT0sgPSAwOwogICAgIGVuYWJsZV9hc3QoZGV2LCBuZXh0X3RpY2spOwotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE3OTIsMTEgKzE3OTIsMTEgQEAKIAl9CiAJb3V0bChvbXIgfCBPTVJfU1QgfCBPTVJfU1IsIERFNFg1X09NUik7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBkZTR4NV9yeF9vdmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE4MTMsNyArMTgxMyw3IEBACiAgICAgfQogCiAgICAgb3V0bChvbXIsIERFNFg1X09NUik7Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTgyMywyMiArMTgyMywyMiBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIHMzMiBpbXIsIG9tcjsKLSAgICAKKwogICAgIGRpc2FibGVfYXN0KGRldik7CiAKICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgCisKICAgICBpZiAoZGU0eDVfZGVidWcgJiBERUJVR19DTE9TRSkgewogCXByaW50aygiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICU4Ljh4LlxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBpbmwoREU0WDVfU1RTKSk7CiAgICAgfQotICAgIAotICAgIC8qIAorCisgICAgLyoKICAgICAqKiBXZSBzdG9wIHRoZSBERTRYNSBoZXJlLi4uIG1hc2sgaW50ZXJydXB0cyBhbmQgc3RvcCBUWCAmIFJYCiAgICAgKi8KICAgICBESVNBQkxFX0lSUXM7CiAgICAgU1RPUF9ERTRYNTsKLSAgICAKKwogICAgIC8qIEZyZWUgdGhlIGFzc29jaWF0ZWQgaXJxICovCiAgICAgZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAgICAgbHAtPnN0YXRlID0gQ0xPU0VEOwpAQCAtMTg0NiwxMCArMTg0NiwxMCBAQAogICAgIC8qIEZyZWUgYW55IHNvY2tldCBidWZmZXJzICovCiAgICAgZGU0eDVfZnJlZV9yeF9idWZmcyhkZXYpOwogICAgIGRlNHg1X2ZyZWVfdHhfYnVmZnMoZGV2KTsKLSAgICAKKwogICAgIC8qIFB1dCB0aGUgYWRhcHRlciB0byBzbGVlcCB0byBzYXZlIHBvd2VyICovCiAgICAgeWF3bihkZXYsIFNMRUVQKTsKLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xODU4LDkgKzE4NTgsOSBAQAogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotICAgIAorCiAgICAgbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSAoaW50KShpbmwoREU0WDVfTUZDKSAmIChNRkNfT1ZGTCB8IE1GQ19DTlRSKSk7Ci0gICAgCisKICAgICByZXR1cm4gJmxwLT5zdGF0czsKIH0KIApAQCAtMTg4Niw3ICsxODg2LDcgQEAKIAkgICAgICAgKCooczE2ICopJmJ1Zls0XSA9PSAqKHMxNiAqKSZkZXYtPmRldl9hZGRyWzRdKSkgewogICAgICAgICBscC0+cGt0U3RhdHMudW5pY2FzdCsrOwogICAgIH0KLQkJCisKICAgICBscC0+cGt0U3RhdHMuYmluc1swXSsrOyAgICAgICAvKiBEdXBsaWNhdGVzIHN0YXRzLnJ4X3BhY2tldHMgKi8KICAgICBpZiAobHAtPnBrdFN0YXRzLmJpbnNbMF0gPT0gMCkgeyAvKiBSZXNldCBjb3VudGVycyAqLwogICAgICAgICBtZW1zZXQoKGNoYXIgKikmbHAtPnBrdFN0YXRzLCAwLCBzaXplb2YobHAtPnBrdFN0YXRzKSk7CkBAIC0xOTM3LDExICsxOTM3LDExIEBACiAJICAgIG9tciA9IGlubChERTRYNV9PTVIpOwogCSAgICBvbXIgfD0gT01SX1BSOwogCSAgICBvdXRsKG9tciwgREU0WDVfT01SKTsKLQl9IGVsc2UgeyAKKwl9IGVsc2UgewogCSAgICBTZXRNdWx0aWNhc3RGaWx0ZXIoZGV2KTsKLQkgICAgbG9hZF9wYWNrZXQoZGV2LCBscC0+c2V0dXBfZnJhbWUsIFREX0lDIHwgUEVSRkVDVF9GIHwgVERfU0VUIHwgCisJICAgIGxvYWRfcGFja2V0KGRldiwgbHAtPnNldHVwX2ZyYW1lLCBURF9JQyB8IFBFUkZFQ1RfRiB8IFREX1NFVCB8CiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFVQX0ZSQU1FX0xFTiwgKHN0cnVjdCBza19idWZmICopMSk7Ci0JICAgIAorCiAJICAgIGxwLT50eF9uZXcgPSAoKytscC0+dHhfbmV3KSAlIGxwLT50eFJpbmdTaXplOwogCSAgICBvdXRsKFBPTExfREVNQU5ELCBERTRYNV9UUEQpOyAgICAgICAvKiBTdGFydCB0aGUgVFggKi8KIAkgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CkBAIC0xOTY5LDIwICsxOTY5LDIwIEBACiAgICAgb21yID0gaW5sKERFNFg1X09NUik7CiAgICAgb21yICY9IH4oT01SX1BSIHwgT01SX1BNKTsKICAgICBwYSA9IGJ1aWxkX3NldHVwX2ZyYW1lKGRldiwgQUxMKTsgICAgICAgIC8qIEJ1aWxkIHRoZSBiYXNpYyBmcmFtZSAqLwotICAgIAorCiAgICAgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDE0KSkgewogCW9tciB8PSBPTVJfUE07ICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXNzIGFsbCBtdWx0aWNhc3RzICovCiAgICAgfSBlbHNlIGlmIChscC0+c2V0dXBfZiA9PSBIQVNIX1BFUkYpIHsgICAvKiBIYXNoIEZpbHRlcmluZyAqLwogCWZvciAoaT0wO2k8ZGV2LT5tY19jb3VudDtpKyspIHsgICAgICAvKiBmb3IgZWFjaCBhZGRyZXNzIGluIHRoZSBsaXN0ICovCiAJICAgIGFkZHJzPWRtaS0+ZG1pX2FkZHI7CiAJICAgIGRtaT1kbWktPm5leHQ7Ci0JICAgIGlmICgoKmFkZHJzICYgMHgwMSkgPT0gMSkgeyAgICAgIC8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLyAKKwkgICAgaWYgKCgqYWRkcnMgJiAweDAxKSA9PSAxKSB7ICAgICAgLyogbXVsdGljYXN0IGFkZHJlc3M/ICovCiAJCWNyYyA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgYWRkcnMpOwogCQloYXNoY29kZSA9IGNyYyAmIEhBU0hfQklUUzsgIC8qIGhhc2hjb2RlIGlzIDkgTFNiIG9mIENSQyAqLwotCQkKKwogCQlieXRlID0gaGFzaGNvZGUgPj4gMzsgICAgICAgIC8qIGJpdFszLThdIC0+IGJ5dGUgaW4gZmlsdGVyICovCiAJCWJpdCA9IDEgPDwgKGhhc2hjb2RlICYgMHgwNyk7LyogYml0WzAtMl0gLT4gYml0IGluIGJ5dGUgKi8KLQkJCisKIAkJYnl0ZSA8PD0gMTsgICAgICAgICAgICAgICAgICAvKiBjYWxjIG9mZnNldCBpbnRvIHNldHVwIGZyYW1lICovCiAJCWlmIChieXRlICYgMHgwMikgewogCQkgICAgYnl0ZSAtPSAxOwpAQCAtMTk5NCwxNCArMTk5NCwxNCBAQAogCWZvciAoaj0wOyBqPGRldi0+bWNfY291bnQ7IGorKykgewogCSAgICBhZGRycz1kbWktPmRtaV9hZGRyOwogCSAgICBkbWk9ZG1pLT5uZXh0OwotCSAgICBmb3IgKGk9MDsgaTxFVEhfQUxFTjsgaSsrKSB7IAorCSAgICBmb3IgKGk9MDsgaTxFVEhfQUxFTjsgaSsrKSB7CiAJCSoocGEgKyAoaSYxKSkgPSAqYWRkcnMrKzsKIAkJaWYgKGkgJiAweDAxKSBwYSArPSA0OwogCSAgICB9CiAJfQogICAgIH0KICAgICBvdXRsKG9tciwgREU0WDVfT01SKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtMjAzMSwxOCArMjAzMSwxOCBAQAogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gcmVsZWFzZV9yZWdfMTsKIAl9Ci0JCisKIAlpZiAoIShkZXYgPSBhbGxvY19ldGhlcmRldiAoc2l6ZW9mIChzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSkpKSkgewogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQlnb3RvIHJlbGVhc2VfcmVnXzI7CiAJfQogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCWNmaWQgPSAodTMyKSBpbmwoUENJX0NGSUQpOwogCWxwLT5jZnJ2ID0gKHVfc2hvcnQpIGlubChQQ0lfQ0ZSVik7CiAJZGV2aWNlID0gKGNmaWQgPj4gOCkgJiAweDAwZmZmZjAwOwogCXZlbmRvciA9ICh1X3Nob3J0KSBjZmlkOwotCSAgICAKKwogCS8qIFJlYWQgdGhlIEVJU0EgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KIAlyZWd2YWwgPSBpbmIoRUlTQV9SRUcwKSAmIChFUjBfSU5UTCB8IEVSMF9JTlRUKTsKICNpZmRlZiBDT05GSUdfQUxQSEEKQEAgLTIwNTAsNyArMjA1MCw3IEBACiAJICogY2FyZSBhYm91dCB0aGUgRUlTQSBjb25maWd1cmF0aW9uLCBhbmQgdGh1cyBkb2Vzbid0CiAJICogY29uZmlndXJlIHRoZSBQTFggYnJpZGdlIHByb3Blcmx5LiBPaCB3ZWxsLi4uIFNpbXBseSBtaW1pYwogCSAqIHRoZSBFSVNBIGNvbmZpZyBmaWxlIHRvIHNvcnQgaXQgb3V0LiAqLwotCQorCiAJLyogRUlTQSBSRUcxOiBBc3NlcnQgRGVjQ2hpcCAyMTA0MCBIVyBSZXNldCAqLwogCW91dGIgKEVSMV9JQU0gfCAxLCBFSVNBX1JFRzEpOwogCW1kZWxheSAoMSk7CkBAIC0yMDYxLDEyICsyMDYxLDEyIEBACiAKIAkvKiBFSVNBIFJFRzM6IFIvVyBCdXJzdCBUcmFuc2ZlciBFbmFibGUgKi8KIAlvdXRiIChFUjNfQldFIHwgRVIzX0JSRSwgRUlTQV9SRUczKTsKLQkKKwogCS8qIDMyX2JpdCBzbGF2ZS9tYXN0ZXIsIFByZWVtcHQgVGltZT0yMyBiY2xrcywgVW5sYXRjaGVkIEludGVycnVwdCAqLwogCW91dGIgKEVSMF9CU1cgfCBFUjBfQk1XIHwgRVIwX0VQVCB8IHJlZ3ZhbCwgRUlTQV9SRUcwKTsKICNlbmRpZgogCWlycSA9IGRlNHg1X2lycVsocmVndmFsID4+IDEpICYgMHgwM107Ci0JCisKIAlpZiAoaXNfREMyMTE0eCkgewogCSAgICBkZXZpY2UgPSAoKGxwLT5jZnJ2ICYgQ0ZSVl9STikgPCBEQzIxMTR4X0JSSyA/IERDMjExNDIgOiBEQzIxMTQzKTsKIAl9CkBAIC0yMDc3LDcgKzIwNzcsNyBAQAogCW91dGwoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NQVNURVIsIFBDSV9DRkNTKTsKIAlvdXRsKDB4MDAwMDYwMDAsIFBDSV9DRkxUKTsKIAlvdXRsKGlvYmFzZSwgUENJX0NCSU8pOwotCSAgICAKKwogCURldmljZVByZXNlbnQoZGV2LCBFSVNBX0FQUk9NKTsKIAogCWRldi0+aXJxID0gaXJxOwpAQCAtMjEwMiw3ICsyMTAyLDcgQEAKIAogCWRldiA9IGRldmljZS0+ZHJpdmVyX2RhdGE7CiAJaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0JCisKIAl1bnJlZ2lzdGVyX25ldGRldiAoZGV2KTsKIAlmcmVlX25ldGRldiAoZGV2KTsKIAlyZWxlYXNlX3JlZ2lvbiAoaW9iYXNlICsgREU0WDVfRUlTQV9JT19QT1JUUywgREU0WDVfRUlTQV9UT1RBTF9TSVpFKTsKQEAgLTIxMzEsMTEgKzIxMzEsMTEgQEAKIAogLyoKICoqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGN1cnJlbnQgYnVzICh3aGljaCBpcyA+MCkgZm9yIGEgREVDY2hpcCB3aXRoIGFuCi0qKiBTUk9NLCBzbyB0aGF0IGluIG11bHRpcG9ydCBjYXJkcyB0aGF0IGhhdmUgb25lIFNST00gc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgCisqKiBTUk9NLCBzbyB0aGF0IGluIG11bHRpcG9ydCBjYXJkcyB0aGF0IGhhdmUgb25lIFNST00gc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUKICoqIERFQ2NoaXBzLCB3ZSBjYW4gZmluZCB0aGUgYmFzZSBTUk9NIGlycmVzcGVjdGl2ZSBvZiB0aGUgQklPUyBzY2FuIGRpcmVjdGlvbi4KICoqIEZvciBzaW5nbGUgcG9ydCBjYXJkcyB0aGlzIGlzIGEgdGltZSB3YXN0ZXIuLi4KICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgCitzdGF0aWMgdm9pZCBfX2RldmluaXQKIHNyb21fc2VhcmNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogICAgIHVfY2hhciBwYjsKQEAgLTIxNjMsNyArMjE2Myw3IEBACiAJLyogU2V0IHRoZSBkZXZpY2UgbnVtYmVyIGluZm9ybWF0aW9uICovCiAJbHAtPmRldmljZSA9IFBDSV9TTE9UKHRoaXNfZGV2LT5kZXZmbik7CiAJbHAtPmJ1c19udW0gPSBwYjsKLQkgICAgCisKIAkvKiBTZXQgdGhlIGNoaXBzZXQgaW5mb3JtYXRpb24gKi8KIAlpZiAoaXNfREMyMTE0eCkgewogCSAgICBkZXZpY2UgPSAoKGNmcnYgJiBDRlJWX1JOKSA8IERDMjExNHhfQlJLID8gREMyMTE0MiA6IERDMjExNDMpOwpAQCAtMjE3Niw3ICsyMTc2LDcgQEAKIAkvKiBGZXRjaCB0aGUgSVJRIHRvIGJlIHVzZWQgKi8KIAlpcnEgPSB0aGlzX2Rldi0+aXJxOwogCWlmICgoaXJxID09IDApIHx8IChpcnEgPT0gMHhmZikgfHwgKChpbnQpaXJxID09IC0xKSkgY29udGludWU7Ci0JICAgIAorCiAJLyogQ2hlY2sgaWYgSS9PIGFjY2Vzc2VzIGFyZSBlbmFibGVkICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQodGhpc19kZXYsIFBDSV9DT01NQU5ELCAmc3RhdHVzKTsKIAlpZiAoIShzdGF0dXMgJiBQQ0lfQ09NTUFORF9JTykpIGNvbnRpbnVlOwpAQCAtMjI1NCw3ICsyMjU0LDcgQEAKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAJbHAtPmJ1cyA9IFBDSTsKIAlscC0+YnVzX251bSA9IDA7Ci0JCisKIAkvKiBTZWFyY2ggZm9yIGFuIFNST00gb24gdGhpcyBidXMgKi8KIAlpZiAobHAtPmJ1c19udW0gIT0gcGIpIHsKIAkgICAgbHAtPmJ1c19udW0gPSBwYjsKQEAgLTIyNjcsNyArMjI2Nyw3IEBACiAJLyogU2V0IHRoZSBkZXZpY2UgbnVtYmVyIGluZm9ybWF0aW9uICovCiAJbHAtPmRldmljZSA9IGRldl9udW07CiAJbHAtPmJ1c19udW0gPSBwYjsKLQkKKwogCS8qIFNldCB0aGUgY2hpcHNldCBpbmZvcm1hdGlvbiAqLwogCWlmIChpc19EQzIxMTR4KSB7CiAJICAgIGRldmljZSA9ICgobHAtPmNmcnYgJiBDRlJWX1JOKSA8IERDMjExNHhfQlJLID8gREMyMTE0MiA6IERDMjExNDMpOwpAQCAtMjI4Myw3ICsyMjgzLDcgQEAKIAkJZXJyb3IgPSAtRU5PREVWOwogCQlnb3RvIGZyZWVfZGV2OwogCX0KLQkgICAgCisKIAkvKiBDaGVjayBpZiBJL08gYWNjZXNzZXMgYW5kIEJ1cyBNYXN0ZXJpbmcgYXJlIGVuYWJsZWQgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJnN0YXR1cyk7CiAjaWZkZWYgX19wb3dlcnBjX18KQEAgLTIzMjIsNyArMjMyMiw3IEBACiAJfQogCiAJZGV2LT5pcnEgPSBpcnE7Ci0JCisKIAlpZiAoKGVycm9yID0gZGU0eDVfaHdfaW5pdChkZXYsIGlvYmFzZSwgJnBkZXYtPmRldikpKSB7CiAJCWdvdG8gcmVsZWFzZTsKIAl9CkBAIC0yMzc3LDcgKzIzNzcsNyBAQAogKiogQXV0byBjb25maWd1cmUgdGhlIG1lZGlhIGhlcmUgcmF0aGVyIHRoYW4gc2V0dGluZyB0aGUgcG9ydCBhdCBjb21waWxlCiAqKiB0aW1lLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IGRlNHg1X2luaXQoKSBhbmQgd2hlbiBhIGxvc3Mgb2YgbWVkaWEgaXMKICoqIGRldGVjdGVkIChleGNlc3NpdmUgY29sbGlzaW9ucywgbG9zcyBvZiBjYXJyaWVyLCBubyBjYXJyaWVyIG9yIGxpbmsgZmFpbAotKiogW1RQXSBvciBubyByZWNlbnQgcmVjZWl2ZSBhY3Rpdml0eSkgdG8gY2hlY2sgd2hldGhlciB0aGUgdXNlciBoYXMgYmVlbiAKKyoqIFtUUF0gb3Igbm8gcmVjZW50IHJlY2VpdmUgYWN0aXZpdHkpIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGJlZW4KICoqIHNuZWFreSBhbmQgY2hhbmdlZCB0aGUgcG9ydCBvbiB1cy4KICovCiBzdGF0aWMgaW50CkBAIC0yNDA1LDcgKzI0MDUsNyBAQAogICAgIH0KIAogICAgIGVuYWJsZV9hc3QoZGV2LCBuZXh0X3RpY2spOwotICAgIAorCiAgICAgcmV0dXJuIChscC0+bWVkaWEpOwogfQogCkBAIC0yNDI4LDcgKzI0MjgsNyBAQAogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgbmV4dF90aWNrID0gREU0WDVfQVVUT1NFTlNFX01TOwogICAgIHMzMiBpbXI7Ci0gICAgCisKICAgICBzd2l0Y2ggKGxwLT5tZWRpYSkgewogICAgIGNhc2UgSU5JVDoKIAlESVNBQkxFX0lSUXM7CkBAIC0yNDQ3LDM2ICsyNDQ3LDM2IEBACiAJbHAtPmxvY2FsX3N0YXRlID0gMDsKIAluZXh0X3RpY2sgPSBkYzIxMDQwX2F1dG9jb25mKGRldik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIFRQOgotCW5leHRfdGljayA9IGRjMjEwNDBfc3RhdGUoZGV2LCAweDhmMDEsIDB4ZmZmZiwgMHgwMDAwLCAzMDAwLCBCTkNfQVVJLCAKKwluZXh0X3RpY2sgPSBkYzIxMDQwX3N0YXRlKGRldiwgMHg4ZjAxLCAweGZmZmYsIDB4MDAwMCwgMzAwMCwgQk5DX0FVSSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUF9TVVNQRUNULCB0ZXN0X3RwKTsKIAlicmVhazsKLQkKKwogICAgIGNhc2UgVFBfU1VTUEVDVDoKIAluZXh0X3RpY2sgPSBkZTR4NV9zdXNwZWN0X3N0YXRlKGRldiwgMTAwMCwgVFAsIHRlc3RfdHAsIGRjMjEwNDBfYXV0b2NvbmYpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBCTkM6CiAgICAgY2FzZSBBVUk6CiAgICAgY2FzZSBCTkNfQVVJOgotCW5leHRfdGljayA9IGRjMjEwNDBfc3RhdGUoZGV2LCAweDhmMDksIDB4MDcwNSwgMHgwMDA2LCAzMDAwLCBFWFRfU0lBLCAKKwluZXh0X3RpY2sgPSBkYzIxMDQwX3N0YXRlKGRldiwgMHg4ZjA5LCAweDA3MDUsIDB4MDAwNiwgMzAwMCwgRVhUX1NJQSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOQ19BVUlfU1VTUEVDVCwgcGluZ19tZWRpYSk7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEJOQ19BVUlfU1VTUEVDVDoKIAluZXh0X3RpY2sgPSBkZTR4NV9zdXNwZWN0X3N0YXRlKGRldiwgMTAwMCwgQk5DX0FVSSwgcGluZ19tZWRpYSwgZGMyMTA0MF9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEVYVF9TSUE6Ci0JbmV4dF90aWNrID0gZGMyMTA0MF9zdGF0ZShkZXYsIDB4MzA0MSwgMHgwMDAwLCAweDAwMDYsIDMwMDAsIAorCW5leHRfdGljayA9IGRjMjEwNDBfc3RhdGUoZGV2LCAweDMwNDEsIDB4MDAwMCwgMHgwMDA2LCAzMDAwLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQywgRVhUX1NJQV9TVVNQRUNULCBwaW5nX21lZGlhKTsKIAlicmVhazsKLQkKKwogICAgIGNhc2UgRVhUX1NJQV9TVVNQRUNUOgogCW5leHRfdGljayA9IGRlNHg1X3N1c3BlY3Rfc3RhdGUoZGV2LCAxMDAwLCBFWFRfU0lBLCBwaW5nX21lZGlhLCBkYzIxMDQwX2F1dG9jb25mKTsKIAlicmVhazsKLQkKKwogICAgIGNhc2UgTkM6CiAJLyogZGVmYXVsdCB0byBUUCBmb3IgYWxsICovCiAJcmVzZXRfaW5pdF9zaWEoZGV2LCAweDhmMDEsIDB4ZmZmZiwgMHgwMDAwKTsKQEAgLTI0ODgsMTMgKzI0ODgsMTMgQEAKIAlscC0+dHhfZW5hYmxlID0gTk87CiAJYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIG5leHRfdGljazsKIH0KIAogc3RhdGljIGludAogZGMyMTA0MF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY3NyMTMsIGludCBjc3IxNCwgaW50IGNzcjE1LCBpbnQgdGltZW91dCwKLQkgICAgICBpbnQgbmV4dF9zdGF0ZSwgaW50IHN1c3BlY3Rfc3RhdGUsIAorCSAgICAgIGludCBuZXh0X3N0YXRlLCBpbnQgc3VzcGVjdF9zdGF0ZSwKIAkgICAgICBpbnQgKCpmbikoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KSkKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjUwNyw3ICsyNTA3LDcgQEAKIAlscC0+bG9jYWxfc3RhdGUrKzsKIAluZXh0X3RpY2sgPSA1MDA7CiAJYnJlYWs7Ci0JICAgIAorCiAgICAgY2FzZSAxOgogCWlmICghbHAtPnR4X2VuYWJsZSkgewogCSAgICBsaW5rQmFkID0gZm4oZGV2LCB0aW1lb3V0KTsKQEAgLTI1MjcsNyArMjUyNyw3IEBACiAJfQogCWJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBuZXh0X3RpY2s7CiB9CiAKQEAgLTI1ODIsNyArMjU4Miw3IEBACiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIHMzMiBzdHMsIGlycXMsIGlycV9tYXNrLCBpbXIsIG9tcjsKICAgICBpbnQgbmV4dF90aWNrID0gREU0WDVfQVVUT1NFTlNFX01TOwotICAgIAorCiAgICAgc3dpdGNoIChscC0+bWVkaWEpIHsKICAgICBjYXNlIElOSVQ6CiAJRElTQUJMRV9JUlFzOwpAQCAtMjYwMyw3ICsyNjAzLDcgQEAKIAlscC0+bG9jYWxfc3RhdGUgPSAwOwogCW5leHRfdGljayA9IGRjMjEwNDFfYXV0b2NvbmYoZGV2KTsKIAlicmVhazsKLQkKKwogICAgIGNhc2UgVFBfTlc6CiAJaWYgKGxwLT50aW1lb3V0IDwgMCkgewogCSAgICBvbXIgPSBpbmwoREU0WDVfT01SKTsvKiBTZXQgdXAgZnVsbCBkdXBsZXggZm9yIHRoZSBhdXRvbmVnb3RpYXRlICovCkBAIC0yNjIzLDcgKzI2MjMsNyBAQAogCSAgICBuZXh0X3RpY2sgPSBkYzIxMDQxX2F1dG9jb25mKGRldik7CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBBTlM6CiAJaWYgKCFscC0+dHhfZW5hYmxlKSB7CiAJICAgIGlycXMgPSBTVFNfTE5QOwpAQCAtMjY0NSwxMSArMjY0NSwxMSBAQAogCSAgICBuZXh0X3RpY2sgPSAzMDAwOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgQU5TX1NVU1BFQ1Q6CiAJbmV4dF90aWNrID0gZGU0eDVfc3VzcGVjdF9zdGF0ZShkZXYsIDEwMDAsIEFOUywgdGVzdF90cCwgZGMyMTA0MV9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIFRQOgogCWlmICghbHAtPnR4X2VuYWJsZSkgewogCSAgICBpZiAobHAtPnRpbWVvdXQgPCAwKSB7CkBAIC0yNjc5LDExICsyNjc5LDExIEBACiAJICAgIG5leHRfdGljayA9IDMwMDA7CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBUUF9TVVNQRUNUOgogCW5leHRfdGljayA9IGRlNHg1X3N1c3BlY3Rfc3RhdGUoZGV2LCAxMDAwLCBUUCwgdGVzdF90cCwgZGMyMTA0MV9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEFVSToKIAlpZiAoIWxwLT50eF9lbmFibGUpIHsKIAkgICAgaWYgKGxwLT50aW1lb3V0IDwgMCkgewpAQCAtMjcwOSwxMSArMjcwOSwxMSBAQAogCSAgICBuZXh0X3RpY2sgPSAzMDAwOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgQVVJX1NVU1BFQ1Q6CiAJbmV4dF90aWNrID0gZGU0eDVfc3VzcGVjdF9zdGF0ZShkZXYsIDEwMDAsIEFVSSwgcGluZ19tZWRpYSwgZGMyMTA0MV9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEJOQzoKIAlzd2l0Y2ggKGxwLT5sb2NhbF9zdGF0ZSkgewogCWNhc2UgMDoKQEAgLTI3MzEsNyArMjczMSw3IEBACiAJCW5leHRfdGljayA9IGRjMjEwNDFfYXV0b2NvbmYoZGV2KTsKIAkgICAgfQogCSAgICBicmVhazsKLQkgICAgCisKIAljYXNlIDE6CiAJICAgIGlmICghbHAtPnR4X2VuYWJsZSkgewogCQlpZiAoKHN0cyA9IHBpbmdfbWVkaWEoZGV2LCAzMDAwKSkgPCAwKSB7CkBAIC0yNzUxLDExICsyNzUxLDExIEBACiAJICAgIGJyZWFrOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgQk5DX1NVU1BFQ1Q6CiAJbmV4dF90aWNrID0gZGU0eDVfc3VzcGVjdF9zdGF0ZShkZXYsIDEwMDAsIEJOQywgcGluZ19tZWRpYSwgZGMyMTA0MV9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIE5DOgogCW9tciA9IGlubChERTRYNV9PTVIpOyAgICAvKiBTZXQgdXAgZnVsbCBkdXBsZXggZm9yIHRoZSBhdXRvbmVnb3RpYXRlICovCiAJb3V0bChvbXIgfCBPTVJfRkRYLCBERTRYNV9PTVIpOwpAQCAtMjc2OCw3ICsyNzY4LDcgQEAKIAlscC0+dHhfZW5hYmxlID0gTk87CiAJYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIG5leHRfdGljazsKIH0KIApAQCAtMjc4NCw5ICsyNzg0LDkgQEAKICAgICBpbnQgYW5hLCBhbmxwYSwgY2FwLCBjciwgc2xuaywgc3I7CiAgICAgaW50IG5leHRfdGljayA9IERFNFg1X0FVVE9TRU5TRV9NUzsKICAgICB1X2xvbmcgaW1yLCBvbXIsIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotICAgIAorCiAgICAgc3dpdGNoKGxwLT5tZWRpYSkgewotICAgIGNhc2UgSU5JVDogCisgICAgY2FzZSBJTklUOgogICAgICAgICBpZiAobHAtPnRpbWVvdXQgPCAwKSB7CiAJICAgIERJU0FCTEVfSVJRczsKIAkgICAgbHAtPnR4X2VuYWJsZSA9IEZBTFNFOwpAQCAtMjgxMyw3ICsyODEzLDcgQEAKIAkJICAgIGxwLT5tZWRpYSA9IF8xMDBNYjsKIAkJfSBlbHNlIGlmIChscC0+YXV0b3NlbnNlID09IF8xME1iKSB7CiAJCSAgICBscC0+bWVkaWEgPSBfMTBNYjsKLQkJfSBlbHNlIGlmICgobHAtPmF1dG9zZW5zZSA9PSBBVVRPKSAmJiAKKwkJfSBlbHNlIGlmICgobHAtPmF1dG9zZW5zZSA9PSBBVVRPKSAmJgogCQkJICAgICAgICAgICAgKChzcj1pc19hbmNfY2FwYWJsZShkZXYpKSAmIE1JSV9TUl9BTkMpKSB7CiAJCSAgICBhbmEgPSAoKChzciA+PiA2KSAmIE1JSV9BTkFfVEFGKSB8IE1JSV9BTkFfQ1NNQSk7CiAJCSAgICBhbmEgJj0gKGxwLT5mZHggPyB+MCA6IH5NSUlfQU5BX0ZEQU0pOwpAQCAtMjgzMSw3ICsyODMxLDcgQEAKIAkgICAgbmV4dF90aWNrID0gZGMyMTE0MG1fYXV0b2NvbmYoZGV2KTsKIAl9CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEFOUzoKIAlzd2l0Y2ggKGxwLT5sb2NhbF9zdGF0ZSkgewogCWNhc2UgMDoKQEAgLTI4NTEsNyArMjg1MSw3IEBACiAJCW5leHRfdGljayA9IGRjMjExNDBtX2F1dG9jb25mKGRldik7CiAJICAgIH0KIAkgICAgYnJlYWs7Ci0JICAgIAorCiAJY2FzZSAxOgogCSAgICBpZiAoKHNyPXRlc3RfbWlpX3JlZyhkZXYsIE1JSV9TUiwgTUlJX1NSX0FTU0MsIFRSVUUsIDIwMDApKSA8IDApIHsKIAkJbmV4dF90aWNrID0gc3IgJiB+VElNRVJfQ0I7CkBAIC0yODYyLDcgKzI4NjIsNyBAQAogCQkgICAgbHAtPnRtcCA9IE1JSV9TUl9BU1NDOwogCQkgICAgYW5scGEgPSBtaWlfcmQoTUlJX0FOTFBBLCBscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsIERFNFg1X01JSSk7CiAJCSAgICBhbmEgPSBtaWlfcmQoTUlJX0FOQSwgbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLCBERTRYNV9NSUkpOwotCQkgICAgaWYgKCEoYW5scGEgJiBNSUlfQU5MUEFfUkYpICYmIAorCQkgICAgaWYgKCEoYW5scGEgJiBNSUlfQU5MUEFfUkYpICYmCiAJCQkgKGNhcCA9IGFubHBhICYgTUlJX0FOTFBBX1RBRiAmIGFuYSkpIHsKIAkJCWlmIChjYXAgJiBNSUlfQU5BXzEwME0pIHsKIAkJCSAgICBscC0+ZmR4ID0gKChhbmEgJiBhbmxwYSAmIE1JSV9BTkFfRkRBTSAmIE1JSV9BTkFfMTAwTSkgPyBUUlVFIDogRkFMU0UpOwpAQCAtMjg3OSwxMCArMjg3OSwxMCBAQAogCSAgICBicmVhazsKIAl9CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIFNQRF9ERVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hvb3NlIDEwTWIvcyBvciAxMDBNYi9zICovCiAgICAgICAgIGlmIChscC0+dGltZW91dCA8IDApIHsKLQkgICAgbHAtPnRtcCA9IChscC0+cGh5W2xwLT5hY3RpdmVdLmlkID8gTUlJX1NSX0xLUyA6IAorCSAgICBscC0+dG1wID0gKGxwLT5waHlbbHAtPmFjdGl2ZV0uaWQgPyBNSUlfU1JfTEtTIDoKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+Z2VwX3JkKGRldikgJiBHRVBfTE5QKSk7CiAJICAgIFNFVF8xMDBNYl9QREVUOwogCX0KQEAgLTI4OTksNyArMjg5OSw3IEBACiAJICAgIG5leHRfdGljayA9IGRjMjExNDBtX2F1dG9jb25mKGRldik7CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBfMTAwTWI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCAxMDBNYi9zICovCiAgICAgICAgIG5leHRfdGljayA9IDMwMDA7CiAJaWYgKCFscC0+dHhfZW5hYmxlKSB7CkBAIC0yOTMzLDcgKzI5MzMsNyBAQAogCSAgICB9CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBOQzoKICAgICAgICAgaWYgKGxwLT5tZWRpYSAhPSBscC0+Y19tZWRpYSkgewogCSAgICBkZTR4NV9kYmdfbWVkaWEoZGV2KTsKQEAgLTI5NDMsNyArMjk0Myw3IEBACiAJbHAtPnR4X2VuYWJsZSA9IEZBTFNFOwogCWJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBuZXh0X3RpY2s7CiB9CiAKQEAgLTMwMDIsNyArMzAwMiw3IEBACiAJCWxwLT5tZWRpYSA9IEFVSTsKIAkgICAgfSBlbHNlIHsKIAkJbHAtPm1lZGlhID0gU1BEX0RFVDsKLQkJaWYgKChscC0+aW5mb2Jsb2NrX21lZGlhID09IEFOUykgJiYgCisJCWlmICgobHAtPmluZm9ibG9ja19tZWRpYSA9PSBBTlMpICYmCiAJCSAgICAgICAgICAgICAgICAgICAgKChzcj1pc19hbmNfY2FwYWJsZShkZXYpKSAmIE1JSV9TUl9BTkMpKSB7CiAJCSAgICBhbmEgPSAoKChzciA+PiA2KSAmIE1JSV9BTkFfVEFGKSB8IE1JSV9BTkFfQ1NNQSk7CiAJCSAgICBhbmEgJj0gKGxwLT5mZHggPyB+MCA6IH5NSUlfQU5BX0ZEQU0pOwpAQCAtMzAxNCw3ICszMDE0LDcgQEAKIAkgICAgbmV4dF90aWNrID0gZGMyMTE0eF9hdXRvY29uZihkZXYpOwogICAgICAgICB9CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEFOUzoKIAlzd2l0Y2ggKGxwLT5sb2NhbF9zdGF0ZSkgewogCWNhc2UgMDoKQEAgLTMwMzQsNyArMzAzNCw3IEBACiAJCW5leHRfdGljayA9IGRjMjExNHhfYXV0b2NvbmYoZGV2KTsKIAkgICAgfQogCSAgICBicmVhazsKLQkgICAgCisKIAljYXNlIDE6CiAJICAgIGlmICgoc3I9dGVzdF9taWlfcmVnKGRldiwgTUlJX1NSLCBNSUlfU1JfQVNTQywgVFJVRSwgMjAwMCkpIDwgMCkgewogCQluZXh0X3RpY2sgPSBzciAmIH5USU1FUl9DQjsKQEAgLTMwNDUsNyArMzA0NSw3IEBACiAJCSAgICBscC0+dG1wID0gTUlJX1NSX0FTU0M7CiAJCSAgICBhbmxwYSA9IG1paV9yZChNSUlfQU5MUEEsIGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkciwgREU0WDVfTUlJKTsKIAkJICAgIGFuYSA9IG1paV9yZChNSUlfQU5BLCBscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsIERFNFg1X01JSSk7Ci0JCSAgICBpZiAoIShhbmxwYSAmIE1JSV9BTkxQQV9SRikgJiYgCisJCSAgICBpZiAoIShhbmxwYSAmIE1JSV9BTkxQQV9SRikgJiYKIAkJCSAoY2FwID0gYW5scGEgJiBNSUlfQU5MUEFfVEFGICYgYW5hKSkgewogCQkJaWYgKGNhcCAmIE1JSV9BTkFfMTAwTSkgewogCQkJICAgIGxwLT5mZHggPSAoKGFuYSAmIGFubHBhICYgTUlJX0FOQV9GREFNICYgTUlJX0FOQV8xMDBNKSA/IFRSVUUgOiBGQUxTRSk7CkBAIC0zMDg3LDExICszMDg3LDExIEBACiAJICAgIG5leHRfdGljayA9IDMwMDA7CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBBVUlfU1VTUEVDVDoKIAluZXh0X3RpY2sgPSBkZTR4NV9zdXNwZWN0X3N0YXRlKGRldiwgMTAwMCwgQVVJLCBwaW5nX21lZGlhLCBkYzIxMTR4X2F1dG9jb25mKTsKIAlicmVhazsKLQkKKwogICAgIGNhc2UgQk5DOgogCXN3aXRjaCAobHAtPmxvY2FsX3N0YXRlKSB7CiAJY2FzZSAwOgpAQCAtMzEwOSw3ICszMTA5LDcgQEAKIAkJbmV4dF90aWNrID0gZGMyMTE0eF9hdXRvY29uZihkZXYpOwogCSAgICB9CiAJICAgIGJyZWFrOwotCSAgICAKKwogCWNhc2UgMToKIAkgICAgaWYgKCFscC0+dHhfZW5hYmxlKSB7CiAJCWlmICgoc3RzID0gcGluZ19tZWRpYShkZXYsIDMwMDApKSA8IDApIHsKQEAgLTMxMzAsMTEgKzMxMzAsMTEgQEAKIAkgICAgYnJlYWs7CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBCTkNfU1VTUEVDVDoKIAluZXh0X3RpY2sgPSBkZTR4NV9zdXNwZWN0X3N0YXRlKGRldiwgMTAwMCwgQk5DLCBwaW5nX21lZGlhLCBkYzIxMTR4X2F1dG9jb25mKTsKIAlicmVhazsKLQkKKwogICAgIGNhc2UgU1BEX0RFVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaG9vc2UgMTBNYi9zIG9yIDEwME1iL3MgKi8KIAkgIGlmIChzcm9tX21hcF9tZWRpYShkZXYpIDwgMCkgewogCSAgICAgIGxwLT50Y291bnQrKzsKQEAgLTMxNjEsNyArMzE2MSw3IEBACiAJICAgICAgbmV4dF90aWNrID0gZGMyMTE0eF9hdXRvY29uZihkZXYpOwogCSAgfSBlbHNlIGlmICgoKGxwLT5tZWRpYSA9PSBfMTAwTWIpICYmIGlzXzEwMF91cChkZXYpKSB8fAogCQkgICAgICgoKGxwLT5tZWRpYSA9PSBfMTBNYikgfHwgKGxwLT5tZWRpYSA9PSBUUCkgfHwKLQkJICAgICAgIChscC0+bWVkaWEgPT0gQk5DKSAgIHx8IChscC0+bWVkaWEgPT0gQVVJKSkgJiYgCisJCSAgICAgICAobHAtPm1lZGlhID09IEJOQykgICB8fCAobHAtPm1lZGlhID09IEFVSSkpICYmCiAJCSAgICAgIGlzXzEwX3VwKGRldikpKSB7CiAJICAgICAgbmV4dF90aWNrID0gZGMyMTE0eF9hdXRvY29uZihkZXYpOwogCSAgfSBlbHNlIHsKQEAgLTMxNjksNyArMzE2OSw3IEBACiAJICAgICAgbHAtPm1lZGlhID0gSU5JVDsKIAkgIH0KIAkgIGJyZWFrOwotCQorCiAgICAgY2FzZSBfMTBNYjoKICAgICAgICAgbmV4dF90aWNrID0gMzAwMDsKIAlpZiAoIWxwLT50eF9lbmFibGUpIHsKQEAgLTMyMDgsNyArMzIwOCw3IEBACiAJbHAtPm1lZGlhID0gSU5JVDsKIAlicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gbmV4dF90aWNrOwogfQogCkBAIC0zMjMxLDcgKzMyMzEsNyBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKICAgICBscC0+ZmR4ID0gMDsKLSAgICBpZiAobHAtPmluZm9ibG9ja19tZWRpYSA9PSBscC0+bWVkaWEpIAorICAgIGlmIChscC0+aW5mb2Jsb2NrX21lZGlhID09IGxwLT5tZWRpYSkKICAgICAgIHJldHVybiAwOwogCiAgICAgc3dpdGNoKGxwLT5pbmZvYmxvY2tfbWVkaWEpIHsKQEAgLTMyNzAsNyArMzI3MCw3IEBACiAgICAgICBjYXNlIFNST01fMTAwQkFTRUZGOgogCWlmICghbHAtPnBhcmFtcy5mZHgpIHJldHVybiAtMTsKIAlscC0+ZmR4ID0gVFJVRTsKLSAgICAgIGNhc2UgU1JPTV8xMDBCQVNFRjogCisgICAgICBjYXNlIFNST01fMTAwQkFTRUY6CiAJaWYgKGxwLT5wYXJhbXMuZmR4ICYmICFscC0+ZmR4KSByZXR1cm4gLTE7CiAJbHAtPm1lZGlhID0gXzEwME1iOwogCWJyZWFrOwpAQCAtMzI4MCw4ICszMjgwLDggQEAKIAlscC0+ZmR4ID0gbHAtPnBhcmFtcy5mZHg7CiAJYnJlYWs7CiAKLSAgICAgIGRlZmF1bHQ6IAotCXByaW50aygiJXM6IEJhZCBtZWRpYSBjb2RlIFslZF0gZGV0ZWN0ZWQgaW4gU1JPTSFcbiIsIGRldi0+bmFtZSwgCisgICAgICBkZWZhdWx0OgorCXByaW50aygiJXM6IEJhZCBtZWRpYSBjb2RlIFslZF0gZGV0ZWN0ZWQgaW4gU1JPTSFcbiIsIGRldi0+bmFtZSwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwLT5pbmZvYmxvY2tfbWVkaWEpOwogCXJldHVybiAtMTsKIAlicmVhazsKQEAgLTMzNTksNyArMzM1OSw3IEBACiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgczMyIHN0cywgY3NyMTI7Ci0gICAgCisKICAgICBpZiAobHAtPnRpbWVvdXQgPCAwKSB7CiAJbHAtPnRpbWVvdXQgPSBtc2VjLzEwMDsKIAlpZiAoIWxwLT51c2VTUk9NKSB7ICAgICAgLyogQWxyZWFkeSBkb25lIGlmIGJ5IFNST00sIGVsc2UgZGMyMTA0WzAxXSAqLwpAQCAtMzM3MiwyMiArMzM3MiwyMiBAQAogCS8qIGNsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMgKi8KIAlzdHMgPSBpbmwoREU0WDVfU1RTKTsKIAlvdXRsKHN0cywgREU0WDVfU1RTKTsKLQkKKwogCS8qIGNsZWFyIGNzcjEyIE5SQSBhbmQgU1JBIGJpdHMgKi8KIAlpZiAoKGxwLT5jaGlwc2V0ID09IERDMjEwNDEpIHx8IGxwLT51c2VTUk9NKSB7CiAJICAgIGNzcjEyID0gaW5sKERFNFg1X1NJU1IpOwogCSAgICBvdXRsKGNzcjEyLCBERTRYNV9TSVNSKTsKIAl9CiAgICAgfQotICAgIAorCiAgICAgc3RzID0gaW5sKERFNFg1X1NUUykgJiB+VElNRVJfQ0I7Ci0gICAgCisKICAgICBpZiAoIShzdHMgJiBpcnFzKSAmJiAtLWxwLT50aW1lb3V0KSB7CiAJc3RzID0gMTAwIHwgVElNRVJfQ0I7CiAgICAgfSBlbHNlIHsKIAlscC0+dGltZW91dCA9IC0xOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzdHM7CiB9CiAKQEAgLTMzOTcsMTEgKzMzOTcsMTEgQEAKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgc2lzcjsKLSAgICAKKwogICAgIGlmIChscC0+dGltZW91dCA8IDApIHsKIAlscC0+dGltZW91dCA9IG1zZWMvMTAwOwogICAgIH0KLSAgICAKKwogICAgIHNpc3IgPSAoaW5sKERFNFg1X1NJU1IpICYgflRJTUVSX0NCKSAmIChTSVNSX0xLRiB8IFNJU1JfTkNSKTsKIAogICAgIGlmIChzaXNyICYmIC0tbHAtPnRpbWVvdXQpIHsKQEAgLTM0MDksNyArMzQwOSw3IEBACiAgICAgfSBlbHNlIHsKIAlscC0+dGltZW91dCA9IC0xOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzaXNyOwogfQogCkBAIC0zNDM2LDcgKzM0MzYsNyBAQAogCSAgICBscC0+dGltZW91dCA9IG1zZWMvU0FNUExFX0lOVEVSVkFMOwogCX0KICAgICB9Ci0gICAgCisKICAgICBpZiAobHAtPnBoeVtscC0+YWN0aXZlXS5pZCB8fCBscC0+dXNlU1JPTSkgewogCWdlcCA9IGlzXzEwMF91cChkZXYpIHwgaXNfc3BkXzEwMChkZXYpOwogICAgIH0gZWxzZSB7CkBAIC0zNDQ3LDcgKzM0NDcsNyBAQAogICAgIH0gZWxzZSB7CiAJbHAtPnRpbWVvdXQgPSAtMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZ2VwOwogfQogCkBAIC0zNDU5LDEzICszNDU5LDEzIEBACiAgICAgaWYgKGxwLT50aW1lb3V0IDwgMCkgewogCWxwLT50aW1lb3V0ID0gMTsKICAgICB9Ci0gICAgCisKICAgICBpZiAobHAtPnRpbWVvdXQtLSkgewogCXJldHVybiBUSU1FUl9DQjsKICAgICB9IGVsc2UgewogCWxwLT50aW1lb3V0ID0gLTE7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM0NzksMjEgKzM0NzksMjEgQEAKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIGludCB0ZXN0OwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICAKKwogICAgIGlmIChscC0+dGltZW91dCA8IDApIHsKIAlscC0+dGltZW91dCA9IG1zZWMvMTAwOwogICAgIH0KLSAgICAKKwogICAgIGlmIChwb2wpIHBvbCA9IH4wOwogICAgIHJlZyA9IG1paV9yZCgodV9jaGFyKXJlZywgbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLCBERTRYNV9NSUkpICYgbWFzazsKICAgICB0ZXN0ID0gKHJlZyBeIHBvbCkgJiBtYXNrOwotICAgIAorCiAgICAgaWYgKHRlc3QgJiYgLS1scC0+dGltZW91dCkgewogCXJlZyA9IDEwMCB8IFRJTUVSX0NCOwogICAgIH0gZWxzZSB7CiAJbHAtPnRpbWVvdXQgPSAtMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcmVnOwogfQogCkBAIC0zNTAzLDcgKzM1MDMsNyBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCBzcGQ7Ci0gICAgCisKICAgICBpZiAobHAtPnVzZU1JSSkgewogCXNwZCA9IG1paV9yZChscC0+cGh5W2xwLT5hY3RpdmVdLnNwZC5yZWcsIGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkciwgREU0WDVfTUlJKTsKIAlzcGQgPSB+KHNwZCBeIGxwLT5waHlbbHAtPmFjdGl2ZV0uc3BkLnZhbHVlKTsKQEAgLTM1MTcsNyArMzUxNyw3IEBACiAJc3BkID0gKGxwLT5hc0JpdFZhbGlkICYgKGxwLT5hc1BvbGFyaXR5IF4gKGdlcF9yZChkZXYpICYgbHAtPmFzQml0KSkpIHwKIAkgICAgICAgICAgKGxwLT5saW5rT0sgJiB+bHAtPmFzQml0VmFsaWQpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzcGQ7CiB9CiAKQEAgLTM1MjYsNyArMzUyNiw3IEBACiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgCisKICAgICBpZiAobHAtPnVzZU1JSSkgewogCS8qIERvdWJsZSByZWFkIGZvciBzdGlja3kgYml0cyAmIHRlbXBvcmFyeSBkcm9wcyAqLwogCW1paV9yZChNSUlfU1IsIGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkciwgREU0WDVfTUlJKTsKQEAgLTM1NDcsNyArMzU0Nyw3IEBACiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgCisKICAgICBpZiAobHAtPnVzZU1JSSkgewogCS8qIERvdWJsZSByZWFkIGZvciBzdGlja3kgYml0cyAmIHRlbXBvcmFyeSBkcm9wcyAqLwogCW1paV9yZChNSUlfU1IsIGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkciwgREU0WDVfTUlJKTsKQEAgLTM1NzAsNyArMzU3MCw3IEBACiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgCisKICAgICBpZiAobHAtPnBoeVtscC0+YWN0aXZlXS5pZCAmJiAoIWxwLT51c2VTUk9NIHx8IGxwLT51c2VNSUkpKSB7CiAJcmV0dXJuIChtaWlfcmQoTUlJX1NSLCBscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsIERFNFg1X01JSSkpOwogICAgIH0gZWxzZSBpZiAoKGxwLT5jaGlwc2V0ICYgfjB4MDBmZikgPT0gREMyMTE0eCkgewpAQCAtMzU5MCwyNCArMzU5MCwyNCBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCBzaXNyOwotICAgIAorCiAgICAgaWYgKGxwLT50aW1lb3V0IDwgMCkgewogCWxwLT50aW1lb3V0ID0gbXNlYy8xMDA7Ci0JCisKIAlscC0+dG1wID0gbHAtPnR4X25ldzsgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHJpbmcgcG9zaXRpb24gKi8KIAlsb2FkX3BhY2tldChkZXYsIGxwLT5mcmFtZSwgVERfTFMgfCBURF9GUyB8IHNpemVvZihscC0+ZnJhbWUpLCAoc3RydWN0IHNrX2J1ZmYgKikxKTsKIAlscC0+dHhfbmV3ID0gKCsrbHAtPnR4X25ldykgJSBscC0+dHhSaW5nU2l6ZTsKIAlvdXRsKFBPTExfREVNQU5ELCBERTRYNV9UUEQpOwogICAgIH0KLSAgICAKKwogICAgIHNpc3IgPSBpbmwoREU0WDVfU0lTUik7CiAKLSAgICBpZiAoKCEoc2lzciAmIFNJU1JfTkNSKSkgJiYgCi0JKChzMzIpbGUzMl90b19jcHUobHAtPnR4X3JpbmdbbHAtPnRtcF0uc3RhdHVzKSA8IDApICYmIAorICAgIGlmICgoIShzaXNyICYgU0lTUl9OQ1IpKSAmJgorCSgoczMyKWxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2xwLT50bXBdLnN0YXR1cykgPCAwKSAmJgogCSAoLS1scC0+dGltZW91dCkpIHsKIAlzaXNyID0gMTAwIHwgVElNRVJfQ0I7CiAgICAgfSBlbHNlIHsKLQlpZiAoKCEoc2lzciAmIFNJU1JfTkNSKSkgJiYgCisJaWYgKCghKHNpc3IgJiBTSVNSX05DUikpICYmCiAJICAgICEobGUzMl90b19jcHUobHAtPnR4X3JpbmdbbHAtPnRtcF0uc3RhdHVzKSAmIChUX09XTiB8IFREX0VTKSkgJiYKIAkgICAgbHAtPnRpbWVvdXQpIHsKIAkgICAgc2lzciA9IDA7CkBAIC0zNjE2LDcgKzM2MTYsNyBAQAogCX0KIAlscC0+dGltZW91dCA9IC0xOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzaXNyOwogfQogCkBAIC0zNjY4LDcgKzM2NjgsNyBAQAogICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmVhciBidWZmZXIgKi8KIAltZW1jcHkoc2tiX3B1dChwLGxlbiksbHAtPnJ4X2J1ZnMgKyBscC0+cnhfb2xkICogUlhfQlVGRl9TWixsZW4pOwogICAgIH0KLQkJICAgIAorCiAgICAgcmV0dXJuIHA7CiAjZW5kaWYKIH0KQEAgLTM3NTEsMjMgKzM3NTEsMjMgQEAKIAlvdXRsKGxwLT5kbWFfcmluZ3MsIERFNFg1X1JSQkEpOwogCW91dGwobHAtPmRtYV9yaW5ncyArIE5VTV9SWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBkZTR4NV9kZXNjKSwKIAkgICAgIERFNFg1X1RSQkEpOwotICAgIAorCiAJbHAtPnJ4X25ldyA9IGxwLT5yeF9vbGQgPSAwOwogCWxwLT50eF9uZXcgPSBscC0+dHhfb2xkID0gMDsKLSAgICAKKwogCWZvciAoaSA9IDA7IGkgPCBscC0+cnhSaW5nU2l6ZTsgaSsrKSB7CiAJICAgIGxwLT5yeF9yaW5nW2ldLnN0YXR1cyA9IGNwdV90b19sZTMyKFJfT1dOKTsKIAl9Ci0gICAgCisKIAlmb3IgKGkgPSAwOyBpIDwgbHAtPnR4UmluZ1NpemU7IGkrKykgewogCSAgICBscC0+dHhfcmluZ1tpXS5zdGF0dXMgPSBjcHVfdG9fbGUzMigwKTsKIAl9Ci0gICAgCisKIAliYXJyaWVyKCk7CiAJbHAtPmNhY2hlLnNhdmVfY250LS07CiAJU1RBUlRfREU0WDU7CiAgICAgfQotICAgICAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtMzc5Miw3ICszNzkyLDcgQEAKIAkgICAgZ2VwX3dyKGxwLT5jYWNoZS5nZXBjLCBkZXYpOwogCSAgICBnZXBfd3IobHAtPmNhY2hlLmdlcCwgZGV2KTsKIAl9IGVsc2UgewotCSAgICByZXNldF9pbml0X3NpYShkZXYsIGxwLT5jYWNoZS5jc3IxMywgbHAtPmNhY2hlLmNzcjE0LCAKKwkgICAgcmVzZXRfaW5pdF9zaWEoZGV2LCBscC0+Y2FjaGUuY3NyMTMsIGxwLT5jYWNoZS5jc3IxNCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHAtPmNhY2hlLmNzcjE1KTsKIAl9CiAJYnJlYWs7CkBAIC0zODU0LDI1ICszODU0LDI1IEBACiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgczMyIHN0cywgYW5zOwotICAgIAorCiAgICAgaWYgKGxwLT50aW1lb3V0IDwgMCkgewogCWxwLT50aW1lb3V0ID0gbXNlYy8xMDA7CiAJb3V0bChpcnFfbWFzaywgREU0WDVfSU1SKTsKLQkKKwogCS8qIGNsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMgKi8KIAlzdHMgPSBpbmwoREU0WDVfU1RTKTsKIAlvdXRsKHN0cywgREU0WDVfU1RTKTsKICAgICB9Ci0gICAgCisKICAgICBhbnMgPSBpbmwoREU0WDVfU0lTUikgJiBTSVNSX0FOUzsKICAgICBzdHMgPSBpbmwoREU0WDVfU1RTKSAmIH5USU1FUl9DQjsKLSAgICAKKwogICAgIGlmICghKHN0cyAmIGlycXMpICYmIChhbnMgXiBBTlNfTldPSykgJiYgLS1scC0+dGltZW91dCkgewogCXN0cyA9IDEwMCB8IFRJTUVSX0NCOwogICAgIH0gZWxzZSB7CiAJbHAtPnRpbWVvdXQgPSAtMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc3RzOwogfQogCkBAIC0zODgyLDcgKzM4ODIsNyBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIHMzMiBpbXIsIHN0czsKLSAgICAKKwogICAgIGlmIChpbmwoREU0WDVfT01SKSAmIE9NUl9TUikgeyAgIC8qIE9ubHkgdW5tYXNrIGlmIFRYL1JYIGlzIGVuYWJsZWQgKi8KIAlpbXIgPSAwOwogCVVOTUFTS19JUlFzOwpAQCAtMzg5MCw3ICszODkwLDcgQEAKIAlvdXRsKHN0cywgREU0WDVfU1RTKTsKIAlFTkFCTEVfSVJRczsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTM5MzYsMTcgKzM5MzYsMTcgQEAKIHsKICAgICBpbnQgaTsKICAgICBjaGFyICpidWYgPSBmcmFtZTsKLSAgICAKKwogICAgIGZvciAoaT0wOyBpPEVUSF9BTEVOOyBpKyspIHsgICAgICAgICAgICAgLyogVXNlIHRoaXMgc291cmNlIGFkZHJlc3MgKi8KIAkqYnVmKysgPSBkZXYtPmRldl9hZGRyW2ldOwogICAgIH0KICAgICBmb3IgKGk9MDsgaTxFVEhfQUxFTjsgaSsrKSB7ICAgICAgICAgICAgIC8qIFVzZSB0aGlzIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KIAkqYnVmKysgPSBkZXYtPmRldl9hZGRyW2ldOwogICAgIH0KLSAgICAKKwogICAgICpidWYrKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IGxlbmd0aCAoMiBieXRlcykgKi8KICAgICAqYnVmKysgPSAxOwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC0zOTc4LDcgKzM5NzgsNyBAQAogUENJX3NpZ25hdHVyZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHApCiB7CiAgICAgaW50IGksIHN0YXR1cyA9IDAsIHNpZ2xlbiA9IHNpemVvZihkZTR4NV9zaWduYXR1cmVzKS9zaXplb2YoY19jaGFyICopOwotICAgIAorCiAgICAgaWYgKGxwLT5jaGlwc2V0ID09IERDMjEwNDApIHsKIAlzdHJjcHkobmFtZSwgIkRFNDM0LzUiKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNDAwNyw3ICs0MDA3LDcgQEAKICAgICB9IGVsc2UgaWYgKChscC0+Y2hpcHNldCAmIH4weDAwZmYpID09IERDMjExNHgpIHsKIAlscC0+dXNlU1JPTSA9IFRSVUU7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDAyNCw3ICs0MDI0LDcgQEAKIHsKICAgICBpbnQgaSwgaj0wOwogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgCisKICAgICBpZiAobHAtPmNoaXBzZXQgPT0gREMyMTA0MCkgewogCWlmIChscC0+YnVzID09IEVJU0EpIHsKIAkgICAgZW5ldF9hZGRyX3JzdChhcHJvbV9hZGRyKTsgLyogUmVzZXQgRXRoZXJuZXQgQWRkcmVzcyBST00gUG9pbnRlciAqLwpAQCAtNDA0OSw3ICs0MDQ5LDcgQEAKIAl9CiAJZGU0eDVfZGJnX3Nyb20oKHN0cnVjdCBkZTR4NV9zcm9tICopJmxwLT5zcm9tKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTQwNzEsMTEgKzQwNzEsMTEgQEAKICAgICBzaG9ydCBzaWdMZW5ndGg9MDsKICAgICBzOCBkYXRhOwogICAgIGludCBpLCBqOwotICAgIAorCiAgICAgZGV2Lmxsc2lnLmEgPSBFVEhfUFJPTV9TSUc7CiAgICAgZGV2Lmxsc2lnLmIgPSBFVEhfUFJPTV9TSUc7CiAgICAgc2lnTGVuZ3RoID0gc2l6ZW9mKHUzMikgPDwgMTsKLSAgICAKKwogICAgIGZvciAoaT0wLGo9MDtqPHNpZ0xlbmd0aCAmJiBpPFBST0JFX0xFTkdUSCtzaWdMZW5ndGgtMTtpKyspIHsKIAlkYXRhID0gaW5iKGFwcm9tX2FkZHIpOwogCWlmIChkZXYuU2lnW2pdID09IGRhdGEpIHsgICAgLyogdHJhY2sgc2lnbmF0dXJlICovCkBAIC00MDg4LDcgKzQwODgsNyBAQAogCSAgICB9CiAJfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDExMSw3ICs0MTExLDcgQEAKICAgICBmb3IgKGk9MCxrPTAsaj0wO2o8MztqKyspIHsKIAlrIDw8PSAxOwogCWlmIChrID4gMHhmZmZmKSBrLT0weGZmZmY7Ci0JCisKIAlpZiAobHAtPmJ1cyA9PSBQQ0kpIHsKIAkgICAgaWYgKGxwLT5jaGlwc2V0ID09IERDMjEwNDApIHsKIAkJd2hpbGUgKCh0bXAgPSBpbmwoREU0WDVfQVBST00pKSA8IDApOwpAQCAtNDEzMywxMSArNDEzMywxMSBAQAogCSAgICBrICs9ICh1X3Nob3J0KSAoKHRtcCA9IGluYihFSVNBX0FQUk9NKSkgPDwgOCk7CiAJICAgIGRldi0+ZGV2X2FkZHJbaSsrXSA9ICh1X2NoYXIpIHRtcDsKIAl9Ci0JCisKIAlpZiAoayA+IDB4ZmZmZikgay09MHhmZmZmOwogICAgIH0KICAgICBpZiAoayA9PSAweGZmZmYpIGs9MDsKLSAgICAKKwogICAgIGlmIChscC0+YnVzID09IFBDSSkgewogCWlmIChscC0+Y2hpcHNldCA9PSBEQzIxMDQwKSB7CiAJICAgIHdoaWxlICgodG1wID0gaW5sKERFNFg1X0FQUk9NKSkgPCAwKTsKQEAgLTQxNTYsNyArNDE1Niw3IEBACiAgICAgc3JvbV9yZXBhaXIoZGV2LCBicm9rZW4pOwogCiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCi0gICAgLyogCisgICAgLyoKICAgICAqKiBJZiB0aGUgYWRkcmVzcyBzdGFydHMgd2l0aCAwMCBhMCwgd2UgaGF2ZSB0byBiaXQtcmV2ZXJzZQogICAgICoqIGVhY2ggYnl0ZSBvZiB0aGUgYWRkcmVzcy4KICAgICAqLwpAQCAtNDI0NSw3ICs0MjQ1LDcgQEAKIAogICAgIGZvciAodG1wPTAsaT0wOyBpPEVUSF9BTEVOOyBpKyspIHRtcCArPSAodV9jaGFyKWRldi0+ZGV2X2FkZHJbaV07CiAgICAgaWYgKCh0bXAgPT0gMCkgfHwgKHRtcCA9PSAweDVmYSkpIHsKLQlpZiAoKGxwLT5jaGlwc2V0ID09IGxhc3QuY2hpcHNldCkgJiYgCisJaWYgKChscC0+Y2hpcHNldCA9PSBsYXN0LmNoaXBzZXQpICYmCiAJICAgIChscC0+YnVzX251bSA9PSBsYXN0LmJ1cykgJiYgKGxwLT5idXNfbnVtID4gMCkpIHsKIAkgICAgZm9yIChpPTA7IGk8RVRIX0FMRU47IGkrKykgZGV2LT5kZXZfYWRkcltpXSA9IGxhc3QuYWRkcltpXTsKIAkgICAgZm9yIChpPUVUSF9BTEVOLTE7IGk+MjsgLS1pKSB7CkBAIC00Mjc1LDcgKzQyNzUsNyBAQAogc3RhdGljIGludAogYW5fZXhjZXB0aW9uKHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCkKIHsKLSAgICBpZiAoKCoodV9zaG9ydCAqKWxwLT5zcm9tLnN1Yl92ZW5kb3JfaWQgPT0gMHgwMGMwKSAmJiAKKyAgICBpZiAoKCoodV9zaG9ydCAqKWxwLT5zcm9tLnN1Yl92ZW5kb3JfaWQgPT0gMHgwMGMwKSAmJgogCSgqKHVfc2hvcnQgKilscC0+c3JvbS5zdWJfc3lzdGVtX2lkID09IDB4OTVlMCkpIHsKIAlyZXR1cm4gLTE7CiAgICAgfQpAQCAtNDI5MCwxMSArNDI5MCwxMSBAQAogc3JvbV9yZCh1X2xvbmcgYWRkciwgdV9jaGFyIG9mZnNldCkKIHsKICAgICBzZW5kdG9fc3JvbShTUk9NX1JEIHwgU1JPTV9TUiwgYWRkcik7Ci0gICAgCisKICAgICBzcm9tX2xhdGNoKFNST01fUkQgfCBTUk9NX1NSIHwgRFRfQ1MsIGFkZHIpOwogICAgIHNyb21fY29tbWFuZChTUk9NX1JEIHwgU1JPTV9TUiB8IERUX0lOIHwgRFRfQ1MsIGFkZHIpOwogICAgIHNyb21fYWRkcmVzcyhTUk9NX1JEIHwgU1JPTV9TUiB8IERUX0NTLCBhZGRyLCBvZmZzZXQpOwotICAgIAorCiAgICAgcmV0dXJuIHNyb21fZGF0YShTUk9NX1JEIHwgU1JPTV9TUiB8IERUX0NTLCBhZGRyKTsKIH0KIApAQCAtNDMwNCw3ICs0MzA0LDcgQEAKICAgICBzZW5kdG9fc3JvbShjb21tYW5kLCBhZGRyKTsKICAgICBzZW5kdG9fc3JvbShjb21tYW5kIHwgRFRfQ0xLLCBhZGRyKTsKICAgICBzZW5kdG9fc3JvbShjb21tYW5kLCBhZGRyKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDMxNCw3ICs0MzE0LDcgQEAKICAgICBzcm9tX2xhdGNoKGNvbW1hbmQsIGFkZHIpOwogICAgIHNyb21fbGF0Y2goY29tbWFuZCwgYWRkcik7CiAgICAgc3JvbV9sYXRjaCgoY29tbWFuZCAmIDB4MDAwMGZmMDApIHwgRFRfQ1MsIGFkZHIpOwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC00MzIyLDE1ICs0MzIyLDE1IEBACiBzcm9tX2FkZHJlc3ModV9pbnQgY29tbWFuZCwgdV9sb25nIGFkZHIsIHVfY2hhciBvZmZzZXQpCiB7CiAgICAgaW50IGksIGE7Ci0gICAgCisKICAgICBhID0gb2Zmc2V0IDw8IDI7CiAgICAgZm9yIChpPTA7IGk8NjsgaSsrLCBhIDw8PSAxKSB7CiAJc3JvbV9sYXRjaChjb21tYW5kIHwgKChhICYgMHg4MCkgPyBEVF9JTiA6IDApLCBhZGRyKTsKICAgICB9CiAgICAgdWRlbGF5KDEpOwotICAgIAorCiAgICAgaSA9IChnZXRmcm9tX3Nyb20oYWRkcikgPj4gMykgJiAweDAxOwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC00MzQwLDE3ICs0MzQwLDE3IEBACiAgICAgaW50IGk7CiAgICAgc2hvcnQgd29yZCA9IDA7CiAgICAgczMyIHRtcDsKLSAgICAKKwogICAgIGZvciAoaT0wOyBpPDE2OyBpKyspIHsKIAlzZW5kdG9fc3JvbShjb21tYW5kICB8IERUX0NMSywgYWRkcik7CiAJdG1wID0gZ2V0ZnJvbV9zcm9tKGFkZHIpOwogCXNlbmR0b19zcm9tKGNvbW1hbmQsIGFkZHIpOwotCQorCiAJd29yZCA9ICh3b3JkIDw8IDEpIHwgKCh0bXAgPj4gMykgJiAweDAxKTsKICAgICB9Ci0gICAgCisKICAgICBzZW5kdG9fc3JvbShjb21tYW5kICYgMHgwMDAwZmYwMCwgYWRkcik7Ci0gICAgCisKICAgICByZXR1cm4gd29yZDsKIH0KIApAQCAtNDM1OSwxMyArNDM1OSwxMyBAQAogc3JvbV9idXN5KHVfaW50IGNvbW1hbmQsIHVfbG9uZyBhZGRyKQogewogICAgc2VuZHRvX3Nyb20oKGNvbW1hbmQgJiAweDAwMDBmZjAwKSB8IERUX0NTLCBhZGRyKTsKLSAgIAorCiAgICB3aGlsZSAoISgoZ2V0ZnJvbV9zcm9tKGFkZHIpID4+IDMpICYgMHgwMSkpIHsKICAgICAgICBtZGVsYXkoMSk7CiAgICB9Ci0gICAKKwogICAgc2VuZHRvX3Nyb20oY29tbWFuZCAmIDB4MDAwMGZmMDAsIGFkZHIpOwotICAgCisKICAgIHJldHVybjsKIH0KICovCkBAIC00Mzc1LDcgKzQzNzUsNyBAQAogewogICAgIG91dGwoY29tbWFuZCwgYWRkcik7CiAgICAgdWRlbGF5KDEpOwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC00MzgzLDEwICs0MzgzLDEwIEBACiBnZXRmcm9tX3Nyb20odV9sb25nIGFkZHIpCiB7CiAgICAgczMyIHRtcDsKLSAgICAKKwogICAgIHRtcCA9IGlubChhZGRyKTsKICAgICB1ZGVsYXkoMSk7Ci0gICAgCisKICAgICByZXR1cm4gdG1wOwogfQogCkBAIC00NDAzLDcgKzQ0MDMsNyBAQAogICAgIH0KICAgICBpZiAoaSA9PSBJTkZPTEVBRl9TSVpFKSB7CiAJbHAtPnVzZVNST00gPSBGQUxTRTsKLQlwcmludGsoIiVzOiBDYW5ub3QgZmluZCBjb3JyZWN0IGNoaXBzZXQgZm9yIFNST00gZGVjb2RpbmchXG4iLCAKKwlwcmludGsoIiVzOiBDYW5ub3QgZmluZCBjb3JyZWN0IGNoaXBzZXQgZm9yIFNST00gZGVjb2RpbmchXG4iLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUpOwogCXJldHVybiAtRU5YSU87CiAgICAgfQpAQCAtNDQyMCw3ICs0NDIwLDcgQEAKIAl9CiAJaWYgKGkgPT0gMCkgewogCSAgICBscC0+dXNlU1JPTSA9IEZBTFNFOwotCSAgICBwcmludGsoIiVzOiBDYW5ub3QgZmluZCBjb3JyZWN0IFBDSSBkZXZpY2UgWyVkXSBmb3IgU1JPTSBkZWNvZGluZyFcbiIsIAorCSAgICBwcmludGsoIiVzOiBDYW5ub3QgZmluZCBjb3JyZWN0IFBDSSBkZXZpY2UgWyVkXSBmb3IgU1JPTSBkZWNvZGluZyFcbiIsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGxwLT5kZXZpY2UpOwogCSAgICByZXR1cm4gLUVOWElPOwogCX0KQEAgLTQ0OTQsOSArNDQ5NCw5IEBACiAgICAgaWYgKCgobHAtPmlibiAhPSAxKSAmJiAobHAtPmlibiAhPSAzKSAmJiAobHAtPmlibiAhPSA1KSkgfHwgIWNvdW50KSByZXR1cm47CiAKICAgICBpZiAobHAtPmNoaXBzZXQgIT0gREMyMTE0MCkgUkVTRVRfU0lBOwotIAorCiAgICAgd2hpbGUgKGNvdW50LS0pIHsKLQlnZXBfd3IoKChscC0+Y2hpcHNldD09REMyMTE0MCkgJiYgKGxwLT5pYm4hPTUpID8gCisJZ2VwX3dyKCgobHAtPmNoaXBzZXQ9PURDMjExNDApICYmIChscC0+aWJuIT01KSA/CiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA6IFRXSURETEUodysrKSksIGRldik7CiAJbWRlbGF5KDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm1zIHBlciBhY3Rpb24gKi8KICAgICB9CkBAIC00NTE0LDEzICs0NTE0LDEzIEBACiAqKiB1bmxlc3MgSSBpbXBsZW1lbnQgdGhlIERDMjEwNDEgU1JPTSBmdW5jdGlvbnMuIFRoZXJlJ3Mgbm8gbmVlZAogKiogc2luY2UgdGhlIGV4aXN0aW5nIGNvZGUgd2lsbCBiZSBzYXRpc2ZhY3RvcnkgZm9yIGFsbCBib2FyZHMuCiAqLwotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIGRjMjEwNDFfaW5mb2xlYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICByZXR1cm4gREU0WDVfQVVUT1NFTlNFX01TOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogZGMyMTE0MF9pbmZvbGVhZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NTU4LDcgKzQ1NTgsNyBAQAogICAgIHJldHVybiBuZXh0X3RpY2sgJiB+VElNRVJfQ0I7CiB9CiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBkYzIxMTQyX2luZm9sZWFmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ1OTMsNyArNDU5Myw3IEBACiAgICAgcmV0dXJuIG5leHRfdGljayAmIH5USU1FUl9DQjsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIGRjMjExNDNfaW5mb2xlYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDYzMSw3ICs0NjMxLDcgQEAKICoqIFRoZSBjb21wYWN0IGluZm9ibG9jayBpcyBvbmx5IGRlc2lnbmVkIGZvciBEQzIxMTQwW0FdIGNoaXBzLCBzbwogKiogd2UnbGwgcmV1c2UgdGhlIGRjMjExNDBtX2F1dG9jb25mIGZ1bmN0aW9uLiBOb24gTUlJIG1lZGlhIG9ubHkuCiAqLwotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIGNvbXBhY3RfaW5mb2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfY2hhciBjb3VudCwgdV9jaGFyICpwKQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NjcxLDcgKzQ2NzEsNyBAQAogLyoKICoqIFRoaXMgYmxvY2sgZGVzY3JpYmVzIG5vbiBNSUkgbWVkaWEgZm9yIHRoZSBEQzIxMTQwW0FdIG9ubHkuCiAqLwotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHR5cGUwX2luZm9ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgY291bnQsIHVfY2hhciAqcCkKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDcxMSw3ICs0NzExLDcgQEAKIAogLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB1bmRlciBjb25zdHJ1Y3Rpb24hICovCiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB0eXBlMV9pbmZvYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyIGNvdW50LCB1X2NoYXIgKnApCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ3NTAsNyArNDc1MCw3IEBACiAgICAgcmV0dXJuIGRjMjExNDBtX2F1dG9jb25mKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB0eXBlMl9pbmZvYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyIGNvdW50LCB1X2NoYXIgKnApCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ3OTEsNyArNDc5MSw3IEBACiAgICAgcmV0dXJuIGRjMjExNHhfYXV0b2NvbmYoZGV2KTsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHR5cGUzX2luZm9ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgY291bnQsIHVfY2hhciAqcCkKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDgzMyw3ICs0ODMzLDcgQEAKICAgICByZXR1cm4gZGMyMTE0eF9hdXRvY29uZihkZXYpOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdHlwZTRfaW5mb2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfY2hhciBjb3VudCwgdV9jaGFyICpwKQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00ODc4LDcgKzQ4NzgsNyBAQAogKiogVGhpcyBibG9jayB0eXBlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciByZXNldHRpbmcgZXh0ZXJuYWwgZGV2aWNlcwogKiogKGNoaXBzKSB0aHJvdWdoIHRoZSBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXIuCiAqLwotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHR5cGU1X2luZm9ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgY291bnQsIHVfY2hhciAqcCkKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDkxNiw3ICs0OTE2LDcgQEAKICAgICBtaWlfYWRkcmVzcyhwaHlhZGRyLCBpb2FkZHIpOyAgICAgICAgICAvKiBQSFkgYWRkcmVzcyB0byBiZSBhY2Nlc3NlZCAgICAgKi8KICAgICBtaWlfYWRkcmVzcyhwaHlyZWcsIGlvYWRkcik7ICAgICAgICAgICAvKiBQSFkgUmVnaXN0ZXIgdG8gcmVhZCAgICAgICAgICAgKi8KICAgICBtaWlfdGEoTUlJX1NUUkQsIGlvYWRkcik7ICAgICAgICAgICAgICAvKiBUdXJuIGFyb3VuZCB0aW1lIC0gMiBNREMgICAgICAgKi8KLSAgICAKKwogICAgIHJldHVybiBtaWlfcmRhdGEoaW9hZGRyKTsgICAgICAgICAgICAgIC8qIFJlYWQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAqLwogfQogCkBAIC00OTMxLDcgKzQ5MzEsNyBAQAogICAgIG1paV90YShNSUlfU1RXUiwgaW9hZGRyKTsgICAgICAgICAgICAgIC8qIFR1cm4gYXJvdW5kIHRpbWUgLSAyIE1EQyAgICAgICAqLwogICAgIGRhdGEgPSBtaWlfc3dhcChkYXRhLCAxNik7ICAgICAgICAgICAgIC8qIFN3YXAgZGF0YSBiaXQgb3JkZXJpbmcgICAgICAgICAqLwogICAgIG1paV93ZGF0YShkYXRhLCAxNiwgaW9hZGRyKTsgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgICAgICAgICAgICAgICAgICAgICAqLwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC00OTQwLDEyICs0OTQwLDEyIEBACiB7CiAgICAgaW50IGk7CiAgICAgczMyIHRtcCA9IDA7Ci0gICAgCisKICAgICBmb3IgKGk9MDsgaTwxNjsgaSsrKSB7CiAJdG1wIDw8PSAxOwogCXRtcCB8PSBnZXRmcm9tX21paShNSUlfTVJEIHwgTUlJX1JELCBpb2FkZHIpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0bXA7CiB9CiAKQEAgLTQ5NTMsMTIgKzQ5NTMsMTIgQEAKIG1paV93ZGF0YShpbnQgZGF0YSwgaW50IGxlbiwgdV9sb25nIGlvYWRkcikKIHsKICAgICBpbnQgaTsKLSAgICAKKwogICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CiAJc2VuZHRvX21paShNSUlfTVdSIHwgTUlJX1dSLCBkYXRhLCBpb2FkZHIpOwogCWRhdGEgPj49IDE7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC00OTY2LDEzICs0OTY2LDEzIEBACiBtaWlfYWRkcmVzcyh1X2NoYXIgYWRkciwgdV9sb25nIGlvYWRkcikKIHsKICAgICBpbnQgaTsKLSAgICAKKwogICAgIGFkZHIgPSBtaWlfc3dhcChhZGRyLCA1KTsKICAgICBmb3IgKGk9MDsgaTw1OyBpKyspIHsKIAlzZW5kdG9fbWlpKE1JSV9NV1IgfCBNSUlfV1IsIGFkZHIsIGlvYWRkcik7CiAJYWRkciA+Pj0gMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTQ5ODAsMTIgKzQ5ODAsMTIgQEAKIG1paV90YSh1X2xvbmcgcncsIHVfbG9uZyBpb2FkZHIpCiB7CiAgICAgaWYgKHJ3ID09IE1JSV9TVFdSKSB7Ci0Jc2VuZHRvX21paShNSUlfTVdSIHwgTUlJX1dSLCAxLCBpb2FkZHIpOyAgCi0Jc2VuZHRvX21paShNSUlfTVdSIHwgTUlJX1dSLCAwLCBpb2FkZHIpOyAgCisJc2VuZHRvX21paShNSUlfTVdSIHwgTUlJX1dSLCAxLCBpb2FkZHIpOworCXNlbmR0b19taWkoTUlJX01XUiB8IE1JSV9XUiwgMCwgaW9hZGRyKTsKICAgICB9IGVsc2UgewogCWdldGZyb21fbWlpKE1JSV9NUkQgfCBNSUlfUkQsIGlvYWRkcik7ICAgICAgICAvKiBUcmktc3RhdGUgTURJTyAqLwogICAgIH0KLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDk5MywxMyArNDk5MywxMyBAQAogbWlpX3N3YXAoaW50IGRhdGEsIGludCBsZW4pCiB7CiAgICAgaW50IGksIHRtcCA9IDA7Ci0gICAgCisKICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgewogCXRtcCA8PD0gMTsKIAl0bXAgfD0gKGRhdGEgJiAxKTsKIAlkYXRhID4+PSAxOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0bXA7CiB9CiAKQEAgLTUwMDcsMTMgKzUwMDcsMTMgQEAKIHNlbmR0b19taWkodTMyIGNvbW1hbmQsIGludCBkYXRhLCB1X2xvbmcgaW9hZGRyKQogewogICAgIHUzMiBqOwotICAgIAorCiAgICAgaiA9IChkYXRhICYgMSkgPDwgMTc7CiAgICAgb3V0bChjb21tYW5kIHwgaiwgaW9hZGRyKTsKICAgICB1ZGVsYXkoMSk7CiAgICAgb3V0bChjb21tYW5kIHwgTUlJX01EQyB8IGosIGlvYWRkcik7CiAgICAgdWRlbGF5KDEpOwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC01MDI0LDcgKzUwMjQsNyBAQAogICAgIHVkZWxheSgxKTsKICAgICBvdXRsKGNvbW1hbmQgfCBNSUlfTURDLCBpb2FkZHIpOwogICAgIHVkZWxheSgxKTsKLSAgICAKKwogICAgIHJldHVybiAoKGlubChpb2FkZHIpID4+IDE5KSAmIDEpOwogfQogCkBAIC01MDg1LDcgKzUwODUsNyBAQAogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgaSwgaiwgaywgbiwgbGltaXQ9c2l6ZW9mKHBoeV9pbmZvKS9zaXplb2Yoc3RydWN0IHBoeV90YWJsZSk7CiAgICAgaW50IGlkOwotICAgIAorCiAgICAgbHAtPmFjdGl2ZSA9IDA7CiAgICAgbHAtPnVzZU1JSSA9IFRSVUU7CiAKQEAgLTUwOTQsNyArNTA5NCw3IEBACiAJbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyID0gaTsKIAlpZiAoaT09MCkgbisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgY3ljbGVzICovCiAJd2hpbGUgKGRlNHg1X3Jlc2V0X3BoeShkZXYpPDApIHVkZWxheSgxMDApOy8qIFdhaXQgZm9yIHJlc2V0ICovCi0JaWQgPSBtaWlfZ2V0X291aShpLCBERTRYNV9NSUkpOyAKKwlpZCA9IG1paV9nZXRfb3VpKGksIERFNFg1X01JSSk7CiAJaWYgKChpZCA9PSAwKSB8fCAoaWQgPT0gNjU1MzUpKSBjb250aW51ZTsgIC8qIFZhbGlkIElEPyAqLwogCWZvciAoaj0wOyBqPGxpbWl0OyBqKyspIHsgICAgICAgICAgICAgICAgICAvKiBTZWFyY2ggUEhZIHRhYmxlICovCiAJICAgIGlmIChpZCAhPSBwaHlfaW5mb1tqXS5pZCkgY29udGludWU7ICAgIC8qIElEIG1hdGNoPyAqLwpAQCAtNTEzMyw3ICs1MTMzLDcgQEAKIAlmb3IgKGs9MDsgbHAtPnBoeVtrXS5pZCAmJiAoayA8IERFNFg1X01BWF9QSFkpOyBrKyspIHsgLypGb3IgZWFjaCBQSFkqLwogCSAgICBtaWlfd3IoTUlJX0NSX1JTVCwgTUlJX0NSLCBscC0+cGh5W2tdLmFkZHIsIERFNFg1X01JSSk7CiAJICAgIHdoaWxlIChtaWlfcmQoTUlJX0NSLCBscC0+cGh5W2tdLmFkZHIsIERFNFg1X01JSSkgJiBNSUlfQ1JfUlNUKTsKLQkgICAgCisKIAkgICAgZGU0eDVfZGJnX21paShkZXYsIGspOwogCX0KICAgICB9CkBAIC01MTQ4LDEyICs1MTQ4LDEyIEBACiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBpbnQgaTsKICAgICBjaGFyICpwYSA9IGxwLT5zZXR1cF9mcmFtZTsKLSAgICAKKwogICAgIC8qIEluaXRpYWxpc2UgdGhlIHNldHVwIGZyYW1lICovCiAgICAgaWYgKG1vZGUgPT0gQUxMKSB7CiAJbWVtc2V0KGxwLT5zZXR1cF9mcmFtZSwgMCwgU0VUVVBfRlJBTUVfTEVOKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAobHAtPnNldHVwX2YgPT0gSEFTSF9QRVJGKSB7CiAJZm9yIChwYT1scC0+c2V0dXBfZnJhbWUrSU1QRVJGX1BBX09GRlNFVCwgaT0wOyBpPEVUSF9BTEVOOyBpKyspIHsKIAkgICAgKihwYSArIGkpID0gZGV2LT5kZXZfYWRkcltpXTsgICAgICAgICAgICAgICAgIC8qIEhvc3QgYWRkcmVzcyAqLwpAQCAtNTE3MCw3ICs1MTcwLDcgQEAKIAkgICAgaWYgKGkgJiAweDAxKSBwYSArPSA0OwogCX0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcGE7ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRzIHRvIHRoZSBuZXh0IGVudHJ5ICovCiB9CiAKQEAgLTUxNzgsNyArNTE3OCw3IEBACiBlbmFibGVfYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB0aW1lX291dCkKIHsKICAgICB0aW1lb3V0KGRldiwgKHZvaWQgKikmZGU0eDVfYXN0LCAodV9sb25nKWRldiwgdGltZV9vdXQpOwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC01MTg2LDkgKzUxODYsOSBAQAogZGlzYWJsZV9hc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIAorCiAgICAgZGVsX3RpbWVyKCZscC0+dGltZXIpOwotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC01MjA3LDEwICs1MjA3LDEwIEBACiAgICAgb21yIHw9IGxwLT5pbmZvYmxvY2tfY3NyNjsKICAgICBpZiAob21yICYgT01SX1BTKSBvbXIgfD0gT01SX0hCRDsKICAgICBvdXRsKG9tciwgREU0WDVfT01SKTsKLSAgICAKKwogICAgIC8qIFNvZnQgUmVzZXQgKi8KICAgICBSRVNFVF9ERTRYNTsKLSAgICAKKwogICAgIC8qIFJlc3RvcmUgdGhlIEdFUCAtIGVzcGVjaWFsbHkgZm9yIENPTVBBQ1QgYW5kIFR5cGUgMCBJbmZvYmxvY2tzICovCiAgICAgaWYgKGxwLT5jaGlwc2V0ID09IERDMjExNDApIHsKIAlnZXBfd3IobHAtPmNhY2hlLmdlcGMsIGRldik7CkBAIC01MjYzLDIxICs1MjYzLDIxIEBACiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBpbnQgZHQ7Ci0gICAgCisKICAgICAvKiBGaXJzdCwgY2FuY2VsIGFueSBwZW5kaW5nIHRpbWVyIGV2ZW50cyAqLwogICAgIGRlbF90aW1lcigmbHAtPnRpbWVyKTsKLSAgICAKKwogICAgIC8qIENvbnZlcnQgbXNlYyB0byB0aWNrcyAqLwogICAgIGR0ID0gKG1zZWMgKiBIWikgLyAxMDAwOwogICAgIGlmIChkdD09MCkgZHQ9MTsKLSAgICAKKwogICAgIC8qIFNldCB1cCB0aW1lciAqLwogICAgIGluaXRfdGltZXIoJmxwLT50aW1lcik7CiAgICAgbHAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgZHQ7CiAgICAgbHAtPnRpbWVyLmZ1bmN0aW9uID0gZm47CiAgICAgbHAtPnRpbWVyLmRhdGEgPSBkYXRhOwogICAgIGFkZF90aW1lcigmbHAtPnRpbWVyKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNTM3NSw3ICs1Mzc1LDcgQEAKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIGludCBpOwotICAgIAorCiAgICAgaWYgKGRlNHg1X2RlYnVnICYgREVCVUdfT1BFTikgewogCXByaW50aygiJXM6IGRlNHg1IG9wZW5pbmcgd2l0aCBpcnEgJWRcbiIsZGV2LT5uYW1lLGRldi0+aXJxKTsKIAlwcmludGsoIlx0cGh5c2ljYWwgYWRkcmVzczogIik7CkBAIC01NDEzLDExICs1NDEzLDExIEBACiAJICAgIH0KIAl9CiAJcHJpbnRrKCIuLi4weCU4Ljh4XG4iLCBsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tpXS5idWYpKTsKLQlwcmludGsoIlJpbmcgc2l6ZTogXG5SWDogJWRcblRYOiAlZFxuIiwgCi0JICAgICAgIChzaG9ydClscC0+cnhSaW5nU2l6ZSwgCi0JICAgICAgIChzaG9ydClscC0+dHhSaW5nU2l6ZSk7IAorCXByaW50aygiUmluZyBzaXplOiBcblJYOiAlZFxuVFg6ICVkXG4iLAorCSAgICAgICAoc2hvcnQpbHAtPnJ4UmluZ1NpemUsCisJICAgICAgIChzaG9ydClscC0+dHhSaW5nU2l6ZSk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC01NDI2LDcgKzU0MjYsNyBAQAogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotICAgIAorCiAgICAgaWYgKGRlNHg1X2RlYnVnICYgREVCVUdfTUlJKSB7CiAJcHJpbnRrKCJcbk1JSSBkZXZpY2UgYWRkcmVzczogJWRcbiIsIGxwLT5waHlba10uYWRkcik7CiAJcHJpbnRrKCJNSUkgQ1I6ICAleFxuIixtaWlfcmQoTUlJX0NSLGxwLT5waHlba10uYWRkcixERTRYNV9NSUkpKTsKQEAgLTU0NDUsNyArNTQ0NSw3IEBACiAJICAgIHByaW50aygiTUlJIDIwOiAgJXhcbiIsbWlpX3JkKDB4MTQsbHAtPnBoeVtrXS5hZGRyLERFNFg1X01JSSkpOwogCX0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTU0NTMsMTcgKzU0NTMsMTcgQEAKIGRlNHg1X2RiZ19tZWRpYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgCisKICAgICBpZiAobHAtPm1lZGlhICE9IGxwLT5jX21lZGlhKSB7CiAJaWYgKGRlNHg1X2RlYnVnICYgREVCVUdfTUVESUEpIHsKIAkgICAgcHJpbnRrKCIlczogbWVkaWEgaXMgJXMlc1xuIiwgZGV2LT5uYW1lLAogCQkgICAobHAtPm1lZGlhID09IE5DICA/ICJ1bmNvbm5lY3RlZCwgbGluayBkb3duIG9yIGluY29tcGF0aWJsZSBjb25uZWN0aW9uIiA6CiAJCSAgICAobHAtPm1lZGlhID09IFRQICA/ICJUUCIgOgogCQkgICAgIChscC0+bWVkaWEgPT0gQU5TID8gIlRQL053YXkiIDoKLQkJICAgICAgKGxwLT5tZWRpYSA9PSBCTkMgPyAiQk5DIiA6IAotCQkgICAgICAgKGxwLT5tZWRpYSA9PSBBVUkgPyAiQVVJIiA6IAotCQkJKGxwLT5tZWRpYSA9PSBCTkNfQVVJID8gIkJOQy9BVUkiIDogCi0JCQkgKGxwLT5tZWRpYSA9PSBFWFRfU0lBID8gIkVYVCBTSUEiIDogCisJCSAgICAgIChscC0+bWVkaWEgPT0gQk5DID8gIkJOQyIgOgorCQkgICAgICAgKGxwLT5tZWRpYSA9PSBBVUkgPyAiQVVJIiA6CisJCQkobHAtPm1lZGlhID09IEJOQ19BVUkgPyAiQk5DL0FVSSIgOgorCQkJIChscC0+bWVkaWEgPT0gRVhUX1NJQSA/ICJFWFQgU0lBIiA6CiAJCQkgIChscC0+bWVkaWEgPT0gXzEwME1iICA/ICIxMDBNYi9zIiA6CiAJCQkgICAobHAtPm1lZGlhID09IF8xME1iICAgPyAiMTBNYi9zIiA6CiAJCQkgICAgIj8/PyIKQEAgLTU0NzEsNyArNTQ3MSw3IEBACiAJfQogCWxwLT5jX21lZGlhID0gbHAtPm1lZGlhOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNTU1NCw3ICs1NTU0LDcgQEAKIAl1MzIgbHZhbFszNl07CiAgICAgfSB0bXA7CiAgICAgdV9sb25nIGZsYWdzID0gMDsKLSAgICAKKwogICAgIHN3aXRjaChpb2MtPmNtZCkgewogICAgIGNhc2UgREU0WDVfR0VUX0hXQUREUjogICAgICAgICAgIC8qIEdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLwogCWlvYy0+bGVuID0gRVRIX0FMRU47CkBAIC01NTc1LDcgKzU1NzUsNyBAQAogCX0KIAlidWlsZF9zZXR1cF9mcmFtZShkZXYsIFBIWVNfQUREUl9PTkxZKTsKIAkvKiBTZXQgdXAgdGhlIGRlc2NyaXB0b3IgYW5kIGdpdmUgb3duZXJzaGlwIHRvIHRoZSBjYXJkICovCi0JbG9hZF9wYWNrZXQoZGV2LCBscC0+c2V0dXBfZnJhbWUsIFREX0lDIHwgUEVSRkVDVF9GIHwgVERfU0VUIHwgCisJbG9hZF9wYWNrZXQoZGV2LCBscC0+c2V0dXBfZnJhbWUsIFREX0lDIHwgUEVSRkVDVF9GIHwgVERfU0VUIHwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVVBfRlJBTUVfTEVOLCAoc3RydWN0IHNrX2J1ZmYgKikxKTsKIAlscC0+dHhfbmV3ID0gKCsrbHAtPnR4X25ldykgJSBscC0+dHhSaW5nU2l6ZTsKIAlvdXRsKFBPTExfREVNQU5ELCBERTRYNV9UUEQpOyAgICAgICAgICAgICAgICAvKiBTdGFydCB0aGUgVFggKi8KQEAgLTU2MTcsOCArNTYxNyw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJbWVtY3B5KCZzdGF0YnVmLCAmbHAtPnBrdFN0YXRzLCBpb2MtPmxlbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlpZiAoY29weV90b191c2VyKGlvYy0+ZGF0YSwgJnN0YXRidWYsIGlvYy0+bGVuKSkgCi0JCXJldHVybiAtRUZBVUxUOyAKKwlpZiAoY29weV90b191c2VyKGlvYy0+ZGF0YSwgJnN0YXRidWYsIGlvYy0+bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJYnJlYWs7CiAgICAgfQogICAgIGNhc2UgREU0WDVfQ0xSX1NUQVRTOiAgICAgICAgICAgIC8qIFplcm8gb3V0IHRoZSBkcml2ZXIgc3RhdGlzdGljcyAqLwpAQCAtNTY1Miw5ICs1NjUyLDkgQEAKIAlpb2MtPmxlbiA9IGo7CiAJaWYgKGNvcHlfdG9fdXNlcihpb2MtPmRhdGEsIHRtcC5hZGRyLCBpb2MtPmxlbikpIHJldHVybiAtRUZBVUxUOwogCWJyZWFrOwotCQorCiAjZGVmaW5lIERFNFg1X0RVTVAgICAgICAgICAgICAgIDB4MGYgLyogRHVtcCB0aGUgREU0WDUgU3RhdHVzICovCi0vKgkKKy8qCiAgICAgICBjYXNlIERFNFg1X0RVTVA6CiAJaiA9IDA7CiAJdG1wLmFkZHJbaisrXSA9IGRldi0+aXJxOwpAQCAtNTY2NCw3ICs1NjY0LDcgQEAKIAl0bXAuYWRkcltqKytdID0gbHAtPnJ4UmluZ1NpemU7CiAJdG1wLmx2YWxbaj4+Ml0gPSAobG9uZylscC0+cnhfcmluZzsgais9NDsKIAl0bXAubHZhbFtqPj4yXSA9IChsb25nKWxwLT50eF9yaW5nOyBqKz00OwotCQorCiAJZm9yIChpPTA7aTxscC0+cnhSaW5nU2l6ZS0xO2krKyl7CiAJICAgIGlmIChpIDwgMykgewogCQl0bXAubHZhbFtqPj4yXSA9IChsb25nKSZscC0+cnhfcmluZ1tpXS5zdGF0dXM7IGorPTQ7CkBAIC01Njc3LDcgKzU2NzcsNyBAQAogCSAgICB9CiAJfQogCXRtcC5sdmFsW2o+PjJdID0gKGxvbmcpJmxwLT50eF9yaW5nW2ldLnN0YXR1czsgais9NDsKLQkKKwogCWZvciAoaT0wO2k8bHAtPnJ4UmluZ1NpemUtMTtpKyspewogCSAgICBpZiAoaSA8IDMpIHsKIAkJdG1wLmx2YWxbaj4+Ml0gPSAoczMyKWxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLmJ1Zik7IGorPTQ7CkBAIC01NjkwLDE0ICs1NjkwLDE0IEBACiAJICAgIH0KIAl9CiAJdG1wLmx2YWxbaj4+Ml0gPSAoczMyKWxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2ldLmJ1Zik7IGorPTQ7Ci0JCisKIAlmb3IgKGk9MDtpPGxwLT5yeFJpbmdTaXplO2krKyl7CiAJICAgIHRtcC5sdmFsW2o+PjJdID0gbGUzMl90b19jcHUobHAtPnJ4X3JpbmdbaV0uc3RhdHVzKTsgais9NDsKIAl9CiAJZm9yIChpPTA7aTxscC0+dHhSaW5nU2l6ZTtpKyspewogCSAgICB0bXAubHZhbFtqPj4yXSA9IGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2ldLnN0YXR1cyk7IGorPTQ7CiAJfQotCQorCiAJdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfQk1SKTsgIGorPTQ7CiAJdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfVFBEKTsgIGorPTQ7CiAJdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfUlBEKTsgIGorPTQ7CkBAIC01NzA2LDE4ICs1NzA2LDE4IEBACiAJdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfU1RTKTsgIGorPTQ7CiAJdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfT01SKTsgIGorPTQ7CiAJdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfSU1SKTsgIGorPTQ7Ci0JdG1wLmx2YWxbaj4+Ml0gPSBscC0+Y2hpcHNldDsgais9NDsgCisJdG1wLmx2YWxbaj4+Ml0gPSBscC0+Y2hpcHNldDsgais9NDsKIAlpZiAobHAtPmNoaXBzZXQgPT0gREMyMTE0MCkgewogCSAgICB0bXAubHZhbFtqPj4yXSA9IGdlcF9yZChkZXYpOyAgais9NDsKIAl9IGVsc2UgewogCSAgICB0bXAubHZhbFtqPj4yXSA9IGlubChERTRYNV9TSVNSKTsgais9NDsKIAkgICAgdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfU0lDUik7IGorPTQ7CiAJICAgIHRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X1NUUlIpOyBqKz00OwotCSAgICB0bXAubHZhbFtqPj4yXSA9IGlubChERTRYNV9TSUdSKTsgais9NDsgCisJICAgIHRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X1NJR1IpOyBqKz00OwogCX0KLQl0bXAubHZhbFtqPj4yXSA9IGxwLT5waHlbbHAtPmFjdGl2ZV0uaWQ7IGorPTQ7IAorCXRtcC5sdmFsW2o+PjJdID0gbHAtPnBoeVtscC0+YWN0aXZlXS5pZDsgais9NDsKIAlpZiAobHAtPnBoeVtscC0+YWN0aXZlXS5pZCAmJiAoIWxwLT51c2VTUk9NIHx8IGxwLT51c2VNSUkpKSB7Ci0JICAgIHRtcC5sdmFsW2o+PjJdID0gbHAtPmFjdGl2ZTsgais9NDsgCisJICAgIHRtcC5sdmFsW2o+PjJdID0gbHAtPmFjdGl2ZTsgais9NDsKIAkgICAgdG1wLmx2YWxbaj4+Ml09bWlpX3JkKE1JSV9DUixscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsREU0WDVfTUlJKTsgais9NDsKIAkgICAgdG1wLmx2YWxbaj4+Ml09bWlpX3JkKE1JSV9TUixscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsREU0WDVfTUlJKTsgais9NDsKIAkgICAgdG1wLmx2YWxbaj4+Ml09bWlpX3JkKE1JSV9JRDAsbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLERFNFg1X01JSSk7IGorPTQ7CkBAIC01NzM0LDEwICs1NzM0LDEwIEBACiAJCXRtcC5sdmFsW2o+PjJdPW1paV9yZCgweDE0LGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkcixERTRYNV9NSUkpOyBqKz00OwogCSAgICB9CiAJfQotCQorCiAJdG1wLmFkZHJbaisrXSA9IGxwLT50eFJpbmdTaXplOwogCXRtcC5hZGRyW2orK10gPSBuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldik7Ci0JCisKIAlpb2MtPmxlbiA9IGo7CiAJaWYgKGNvcHlfdG9fdXNlcihpb2MtPmRhdGEsIHRtcC5hZGRyLCBpb2MtPmxlbikpIHJldHVybiAtRUZBVUxUOwogCWJyZWFrOwpAQCAtNTc0Niw3ICs1NzQ2LDcgQEAKICAgICBkZWZhdWx0OgogCXJldHVybiAtRU9QTk9UU1VQUDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5oIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuaAppbmRleCBhZDM3YTQwLi41NzIyNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5oCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmgKQEAgLTM4LDExICszOCwxMSBAQAogLyoKICoqIEVJU0EgUmVnaXN0ZXIgQWRkcmVzcyBNYXAKICovCi0jZGVmaW5lIEVJU0FfSUQgICAgICBpb2Jhc2UrMHgwYzgwICAgLyogRUlTQSBJRCBSZWdpc3RlcnMgKi8gCi0jZGVmaW5lIEVJU0FfSUQwICAgICBpb2Jhc2UrMHgwYzgwICAgLyogRUlTQSBJRCBSZWdpc3RlciAwICovIAotI2RlZmluZSBFSVNBX0lEMSAgICAgaW9iYXNlKzB4MGM4MSAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMSAqLyAKLSNkZWZpbmUgRUlTQV9JRDIgICAgIGlvYmFzZSsweDBjODIgICAvKiBFSVNBIElEIFJlZ2lzdGVyIDIgKi8gCi0jZGVmaW5lIEVJU0FfSUQzICAgICBpb2Jhc2UrMHgwYzgzICAgLyogRUlTQSBJRCBSZWdpc3RlciAzICovIAorI2RlZmluZSBFSVNBX0lEICAgICAgaW9iYXNlKzB4MGM4MCAgIC8qIEVJU0EgSUQgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVJU0FfSUQwICAgICBpb2Jhc2UrMHgwYzgwICAgLyogRUlTQSBJRCBSZWdpc3RlciAwICovCisjZGVmaW5lIEVJU0FfSUQxICAgICBpb2Jhc2UrMHgwYzgxICAgLyogRUlTQSBJRCBSZWdpc3RlciAxICovCisjZGVmaW5lIEVJU0FfSUQyICAgICBpb2Jhc2UrMHgwYzgyICAgLyogRUlTQSBJRCBSZWdpc3RlciAyICovCisjZGVmaW5lIEVJU0FfSUQzICAgICBpb2Jhc2UrMHgwYzgzICAgLyogRUlTQSBJRCBSZWdpc3RlciAzICovCiAjZGVmaW5lIEVJU0FfQ1IgICAgICBpb2Jhc2UrMHgwYzg0ICAgLyogRUlTQSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEVJU0FfUkVHMCAgICBpb2Jhc2UrMHgwYzg4ICAgLyogRUlTQSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgRUlTQV9SRUcxICAgIGlvYmFzZSsweDBjODkgICAvKiBFSVNBIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwpAQCAtMTAwOCw4ICsxMDA4LDggQEAKIAl1bnNpZ25lZCBjaGFyICBfX3VzZXIgKmRhdGE7ICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyICovCiB9OwogCi0vKiAKLSoqIFJlY29nbmlzZWQgY29tbWFuZHMgZm9yIHRoZSBkcml2ZXIgCisvKgorKiogUmVjb2duaXNlZCBjb21tYW5kcyBmb3IgdGhlIGRyaXZlcgogKi8KICNkZWZpbmUgREU0WDVfR0VUX0hXQUREUgkweDAxIC8qIEdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLwogI2RlZmluZSBERTRYNV9TRVRfSFdBRERSCTB4MDIgLyogU2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKaW5kZXggNzRlOTA3NS4uYmE1YjExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwpAQCAtNTAsNyArNTAsNyBAQAogICAgIGZvcmdldCB0byB1bm1hcCBQQ0kgbWFwcGVkIHNrYnMuCiAKICAgICBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgotICAgIEFkZGVkIG5ldyBQQ0kgaWRlbnRpZmllcnMgcHJvdmlkZWQgYnkgQ2xlYXIgWmhhbmcgYXQgQUxpIAorICAgIEFkZGVkIG5ldyBQQ0kgaWRlbnRpZmllcnMgcHJvdmlkZWQgYnkgQ2xlYXIgWmhhbmcgYXQgQUxpCiAgICAgZm9yIHRoZWlyIDE1NjMgZXRoZXJuZXQgZGV2aWNlLgogCiAgICAgVE9ETwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwppbmRleCBmYmQ5YWI2Li41ZmZiZDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwpAQCAtOTYsMTEgKzk2LDExIEBACiAgKiB0dWxpcF9idWlsZF9mYWtlX21lZGlhdGFibGUgLSBCdWlsZCBhIGZha2UgbWVkaWF0YWJsZSBlbnRyeS4KICAqIEB0cDogUHRyIHRvIHRoZSB0dWxpcCBwcml2YXRlIGRhdGEuCiAgKgotICogU29tZSBjYXJkcyBsaWtlIHRoZSAzeDUgSFNDIGNhcmRzIChKMzUxNEEpIGRvIG5vdCBoYXZlIGEgc3RhbmRhcmQgCisgKiBTb21lIGNhcmRzIGxpa2UgdGhlIDN4NSBIU0MgY2FyZHMgKEozNTE0QSkgZG8gbm90IGhhdmUgYSBzdGFuZGFyZAogICogc3JvbSBhbmQgY2FuIG5vdCBiZSBoYW5kbGVkIHVuZGVyIHRoZSBmaXh1cCByb3V0aW5lLiAgVGhlc2UgY2FyZHMKLSAqIHN0aWxsIG5lZWQgYSB2YWxpZCBtZWRpYXRhYmxlIGVudHJ5IGZvciBjb3JyZWN0IGNzcjEyIHNldHVwIGFuZCAKKyAqIHN0aWxsIG5lZWQgYSB2YWxpZCBtZWRpYXRhYmxlIGVudHJ5IGZvciBjb3JyZWN0IGNzcjEyIHNldHVwIGFuZAogICogbWlpIGhhbmRsaW5nLgotICogCisgKgogICogU2luY2UgdGhpcyBpcyBjdXJyZW50bHkgYSBwYXJpc2MtbGludXggc3BlY2lmaWMgZnVuY3Rpb24sIHRoZQogICogI2lmZGVmIF9faHBwYV9fIHNob3VsZCBjb21wbGV0ZWx5IG9wdGltaXplIHRoaXMgZnVuY3Rpb24gYXdheSBmb3IKICAqIG5vbi1wYXJpc2MgaGFyZHdhcmUuCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJdHAtPmZsYWdzIHw9IEhBU19QSFlfSVJROwogCQl0cC0+Y3NyMTJfc2hhZG93ID0gLTE7CiAJfQotI2VuZGlmIAorI2VuZGlmCiB9CiAKIHZvaWQgX19kZXZpbml0IHR1bGlwX3BhcnNlX2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwppbmRleCBiYjM1NTgxLi5kYTRmNzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwpAQCAtMTM5LDIyICsxMzksMjIgQEAKIAkJfQogICAgICAgICAgICAgICAgLyogQWNrbm93bGVkZ2UgY3VycmVudCBSWCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KICAgICAgICAgICAgICAgIGlvd3JpdGUzMigoUnhJbnRyIHwgUnhOb0J1ZiksIHRwLT5iYXNlX2FkZHIgKyBDU1I1KTsKLSAKLSAKKworCiAgICAgICAgICAgICAgICAvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0IGlzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KICAgICAgICAgICAgICAgIHdoaWxlICggISAodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyAmIGNwdV90b19sZTMyKERlc2NPd25lZCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMzMiBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKLSAKLSAKKworCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUgPT0gdHAtPmN1cl9yeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAKKwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHVsaXBfZGVidWcgPiA1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTguOHguXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1yeF93b3JrX2xpbWl0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5vdF9kb25lOwotIAorCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHgzODAwODMwMCkgIT0gMHgwMzAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweDM4MDAwMzAwKSAhPSAweDAzMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotICAKKwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBrdF9sZW4gPiAxNTE4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLApAQCAtMjEzLDcgKzIxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgIC8qIFBhc3MgdXAgdGhlIHNrYiBhbHJlYWR5IG9uIHRoZSBSeCByaW5nLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGVtcCA9IHNrYl9wdXQoc2tiID0gdHAtPnJ4X2J1ZmZlcnNbZW50cnldLnNrYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9sZW4pOwotICAKKwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAtPnJ4X2J1ZmZlcnNbZW50cnldLm1hcHBpbmcgIT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSkpIHsKQEAgLTIyNSwxNyArMjI1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2ItPmhlYWQsIHRlbXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0gIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LCB0cC0+cnhfYnVmZmVyc1tlbnRyeV0ubWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtUX0JVRl9TWiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLSAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5yeF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnJ4X2J1ZmZlcnNbZW50cnldLm1hcHBpbmcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0gCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CkBAIC0yNDUsMTIgKzI0NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9ICgrK3RwLT5jdXJfcngpICUgUlhfUklOR19TSVpFOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAtPmN1cl9yeCAtIHRwLT5kaXJ0eV9yeCA+IFJYX1JJTkdfU0laRS80KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1bGlwX3JlZmlsbF9yeChkZXYpOwotIAorCiAgICAgICAgICAgICAgICAgfQotIAorCiAgICAgICAgICAgICAgICAvKiBOZXcgYWNrIHN0cmF0ZWd5Li4uIGlycSBkb2VzIG5vdCBhY2sgUnggYW55IGxvbmdlcgogICAgICAgICAgICAgICAgICAgaG9wZWZ1bGx5IHRoaXMgaGVscHMgKi8KLSAKKwogICAgICAgICAgICAgICAgLyogUmVhbGx5IGJhZCB0aGluZ3MgY2FuIGhhcHBlbiBoZXJlLi4uIElmIG5ldyBwYWNrZXQgYXJyaXZlcwogICAgICAgICAgICAgICAgICogYW5kIGFuIGlycSBhcnJpdmVzICh0eCBvciBqdXN0IGR1ZSB0byBvY2Nhc2lvbmFsbHkgdW5zZXQKICAgICAgICAgICAgICAgICAqIG1hc2spLCBpdCB3aWxsIGJlIGFja2VkIGJ5IGlycSBoYW5kbGVyLCBidXQgbmV3IHRocmVhZApAQCAtMjU5LDI4ICsyNTksMjggQEAKICAgICAgICAgICAgICAgICAqIHRvbW9ycm93IChuaWdodCAwMTEwMjkpLiBJZiBpdCB3aWxsIG5vdCBmYWlsLCB3ZSB3b24KICAgICAgICAgICAgICAgICAqIGZpbmFsbHk6IGFtb3VudCBvZiBJTyBkaWQgbm90IGluY3JlYXNlIGF0IGFsbC4gKi8KICAgICAgICB9IHdoaWxlICgoaW9yZWFkMzIodHAtPmJhc2VfYWRkciArIENTUjUpICYgUnhJbnRyKSk7Ci0gCisKIGRvbmU6Ci0gCisKICAjaWZkZWYgQ09ORklHX1RVTElQX05BUElfSFdfTUlUSUdBVElPTgotICAKKwogICAgICAgICAgIC8qIFdlIHVzZSB0aGlzIHNpbXBsaXN0aWMgc2NoZW1lIGZvciBJTS4gSXQncyBwcm92ZW4gYnkKICAgICAgICAgICAgICByZWFsIGxpZmUgaW5zdGFsbGF0aW9ucy4gV2UgY2FuIGhhdmUgSU0gZW5hYmxlZAotICAgICAgICAgICAgY29udGludWVzbHkgYnV0IHRoaXMgd291bGQgY2F1c2UgdW5uZWNlc3NhcnkgbGF0ZW5jeS4gCi0gICAgICAgICAgICBVbmZvcnR1bmVseSB3ZSBjYW4ndCB1c2UgYWxsIHRoZSBORVRfUlhfKiBmZWVkYmFjayBoZXJlLiAKLSAgICAgICAgICAgIFRoaXMgd291bGQgdHVybiBvbiBJTSBmb3IgZGV2aWNlcyB0aGF0IGlzIG5vdCBjb250cmlidXRpbmcgCi0gICAgICAgICAgICB0byBiYWNrbG9nIGNvbmdlc3Rpb24gd2l0aCB1bm5lY2Vzc2FyeSBsYXRlbmN5LiAKLSAgCisgICAgICAgICAgICBjb250aW51ZXNseSBidXQgdGhpcyB3b3VsZCBjYXVzZSB1bm5lY2Vzc2FyeSBsYXRlbmN5LgorICAgICAgICAgICAgVW5mb3J0dW5lbHkgd2UgY2FuJ3QgdXNlIGFsbCB0aGUgTkVUX1JYXyogZmVlZGJhY2sgaGVyZS4KKyAgICAgICAgICAgIFRoaXMgd291bGQgdHVybiBvbiBJTSBmb3IgZGV2aWNlcyB0aGF0IGlzIG5vdCBjb250cmlidXRpbmcKKyAgICAgICAgICAgIHRvIGJhY2tsb2cgY29uZ2VzdGlvbiB3aXRoIHVubmVjZXNzYXJ5IGxhdGVuY3kuCisKICAgICAgICAgICAgICBXZSBtb25pdG9yIHRoZSB0aGUgZGV2aWNlIFJYLXJpbmcgYW5kIGhhdmU6Ci0gIAorCiAgICAgICAgICAgICAgSFcgSW50ZXJydXB0IE1pdGlnYXRpb24gZWl0aGVyIE9OIG9yIE9GRi4KLSAgCi0gICAgICAgICAgICBPTjogIE1vcmUgdGhlbiAxIHBrdCByZWNlaXZlZCAocGVyIGludHIuKSBPUiB3ZSBhcmUgZHJvcHBpbmcgCisKKyAgICAgICAgICAgIE9OOiAgTW9yZSB0aGVuIDEgcGt0IHJlY2VpdmVkIChwZXIgaW50ci4pIE9SIHdlIGFyZSBkcm9wcGluZwogICAgICAgICAgICAgIE9GRjogT25seSAxIHBrdCByZWNlaXZlZAotICAgICAgICAgICAgCisKICAgICAgICAgICAgICBOb3RlLiBXZSBvbmx5IHVzZSBtaW4gYW5kIG1heCAoMCwgMTUpIHNldHRpbmdzIGZyb20gbWl0X3RhYmxlICovCi0gIAotICAKKworCiAgICAgICAgICAgaWYoIHRwLT5mbGFncyAmICBIQVNfSU5UUl9NSVRJR0FUSU9OKSB7CiAgICAgICAgICAgICAgICAgIGlmKCByZWNlaXZlZCA+IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICEgdHAtPm1pdF9vbiApIHsKQEAgLTI5NywyMCArMjk3LDIwIEBACiAgICAgICAgICAgfQogCiAjZW5kaWYgLyogQ09ORklHX1RVTElQX05BUElfSFdfTUlUSUdBVElPTiAqLwotIAorCiAgICAgICAgICBkZXYtPnF1b3RhIC09IHJlY2VpdmVkOwogICAgICAgICAgKmJ1ZGdldCAtPSByZWNlaXZlZDsKLSAKKwogICAgICAgICAgdHVsaXBfcmVmaWxsX3J4KGRldik7Ci0gICAgICAgICAKKwogICAgICAgICAgLyogSWYgUlggcmluZyBpcyBub3QgZnVsbCB3ZSBhcmUgb3V0IG9mIG1lbW9yeS4gKi8KICAgICAgICAgIGlmICh0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKSBnb3RvIG9vbTsKLSAKKwogICAgICAgICAgLyogUmVtb3ZlIHVzIGZyb20gcG9sbGluZyBsaXN0IGFuZCBlbmFibGUgUlggaW50ci4gKi8KLSAKKwogICAgICAgICAgbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKICAgICAgICAgIGlvd3JpdGUzMih0dWxpcF90YmxbdHAtPmNoaXBfaWRdLnZhbGlkX2ludHJzLCB0cC0+YmFzZV9hZGRyK0NTUjcpOwotIAorCiAgICAgICAgICAvKiBUaGUgbGFzdCBvcCBoYXBwZW5zIGFmdGVyIHBvbGwgY29tcGxldGlvbi4gV2hpY2ggbWVhbnMgdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAqIDEuIGl0IGNhbiByYWNlIHdpdGggZGlzYWJsaW5nIGlycXMgaW4gaXJxIGhhbmRsZXIKICAgICAgICAgICAqIDIuIGl0IGNhbiByYWNlIHdpdGggZGlzZS9lbmFibGluZyBpcnFzIGluIG90aGVyIHBvbGwgdGhyZWFkcwpAQCAtMzIxLDkgKzMyMSw5IEBACiAgICAgICAgICAgKiBkdWUgdG8gcmFjZXMgaW4gbWFza2luZyBhbmQgZHVlIHRvIHRvbyBsYXRlIGFja2luZyBvZiBhbHJlYWR5CiAgICAgICAgICAgKiBwcm9jZXNzZWQgaXJxcy4gQnV0IGl0IG11c3Qgbm90IHJlc3VsdCBpbiBsb3NpbmcgZXZlbnRzLgogICAgICAgICAgICovCi0gCisKICAgICAgICAgIHJldHVybiAwOwotIAorCiAgbm90X2RvbmU6CiAgICAgICAgICBpZiAoIXJlY2VpdmVkKSB7CiAKQEAgLTMzMSwyOSArMzMxLDI5IEBACiAgICAgICAgICB9CiAgICAgICAgICBkZXYtPnF1b3RhIC09IHJlY2VpdmVkOwogICAgICAgICAgKmJ1ZGdldCAtPSByZWNlaXZlZDsKLSAKKwogICAgICAgICAgaWYgKHRwLT5jdXJfcnggLSB0cC0+ZGlydHlfcnggPiBSWF9SSU5HX1NJWkUvMiB8fAogICAgICAgICAgICAgIHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpCiAgICAgICAgICAgICAgICAgIHR1bGlwX3JlZmlsbF9yeChkZXYpOwotIAorCiAgICAgICAgICBpZiAodHAtPnJ4X2J1ZmZlcnNbdHAtPmRpcnR5X3J4ICUgUlhfUklOR19TSVpFXS5za2IgPT0gTlVMTCkgZ290byBvb207Ci0gCisKICAgICAgICAgIHJldHVybiAxOwotIAotIAorCisKICBvb206ICAgIC8qIEV4ZWN1dGVkIHdpdGggUlggaW50cyBkaXNhYmxlZCAqLwotIAotICAgICAgICAgCisKKwogICAgICAgICAgLyogU3RhcnQgdGltZXIsIHN0b3AgcG9sbGluZywgYnV0IGRvIG5vdCBlbmFibGUgcnggaW50ZXJydXB0cy4gKi8KICAgICAgICAgIG1vZF90aW1lcigmdHAtPm9vbV90aW1lciwgamlmZmllcysxKTsKLSAgICAgICAKKwogICAgICAgICAgLyogVGhpbms6IHRpbWVyX3BlbmRpbmcoKSB3YXMgYW4gZXhwbGljaXQgc2lnbmF0dXJlIG9mIGJ1Zy4KICAgICAgICAgICAqIFRpbWVyIGNhbiBiZSBwZW5kaW5nIG5vdyBidXQgZmlyZWQgYW5kIGNvbXBsZXRlZAogICAgICAgICAgICogYmVmb3JlIHdlIGRpZCBuZXRpZl9yeF9jb21wbGV0ZSgpLiBTZWU/IFdlIHdvdWxkIGxvc2UgaXQuICovCi0gCisKICAgICAgICAgIC8qIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgcG9sbGluZyBsaXN0ICovCiAgICAgICAgICBuZXRpZl9yeF9jb21wbGV0ZShkZXYpOwotIAorCiAgICAgICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTIxLDkgKzUyMSw5IEBACiAJLyogTGV0J3Mgc2VlIHdoZXRoZXIgdGhlIGludGVycnVwdCByZWFsbHkgaXMgZm9yIHVzICovCiAJY3NyNSA9IGlvcmVhZDMyKGlvYWRkciArIENTUjUpOwogCi0gICAgICAgIGlmICh0cC0+ZmxhZ3MgJiBIQVNfUEhZX0lSUSkgCisgICAgICAgIGlmICh0cC0+ZmxhZ3MgJiBIQVNfUEhZX0lSUSkKIAkgICAgICAgIGhhbmRsZWQgPSBwaHlfaW50ZXJydXB0IChkZXYpOwotICAgIAorCiAJaWYgKChjc3I1ICYgKE5vcm1hbEludHJ8QWJub3JtYWxJbnRyKSkgPT0gMCkKIAkJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiAKQEAgLTUzOCwxNyArNTM4LDE3IEBACiAJCQkvKiBNYXNrIFJYIGludHJzIGFuZCBhZGQgdGhlIGRldmljZSB0byBwb2xsIGxpc3QuICovCiAJCQlpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycyZ+UnhQb2xsSW50LCBpb2FkZHIgKyBDU1I3KTsKIAkJCW5ldGlmX3J4X3NjaGVkdWxlKGRldik7Ci0JCQkKKwogCQkJaWYgKCEoY3NyNSZ+KEFibm9ybWFsSW50cnxOb3JtYWxJbnRyfFJ4UG9sbEludHxUUExua1Bhc3MpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJfQotCQkKKwogICAgICAgICAgICAgICAgLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBzb3VyY2VzIHdlIGhhbmRsZSBoZXJlIEFTQVAKICAgICAgICAgICAgICAgICAgIHRoZSBwb2xsIGZ1bmN0aW9uIGRvZXMgUnggYW5kIFJ4Tm9CdWYgYWNraW5nICovCi0JCQorCiAJCWlvd3JpdGUzMihjc3I1ICYgMHgwMDAxZmYzZiwgaW9hZGRyICsgQ1NSNSk7CiAKLSNlbHNlIAorI2Vsc2UKIAkJLyogQWNrbm93bGVkZ2UgYWxsIG9mIHRoZSBjdXJyZW50IGludGVycnVwdCBzb3VyY2VzIEFTQVAuICovCiAJCWlvd3JpdGUzMihjc3I1ICYgMHgwMDAxZmZmZiwgaW9hZGRyICsgQ1NSNSk7CiAKQEAgLTU1OSwxMSArNTU5LDExIEBACiAJCX0KIAogI2VuZGlmIC8qICBDT05GSUdfVFVMSVBfTkFQSSAqLwotCQkKKwogCQlpZiAodHVsaXBfZGVidWcgPiA0KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnRlcnJ1cHQgIGNzcjU9JSM4Ljh4IG5ldyBjc3I1PSUjOC44eC5cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBjc3I1LCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7Ci0JCQorCiAKIAkJaWYgKGNzcjUgJiAoVHhOb0J1ZiB8IFR4RGllZCB8IFR4SW50ciB8IFRpbWVySW50KSkgewogCQkJdW5zaWduZWQgaW50IGRpcnR5X3R4OwpAQCAtNzM3LDE3ICs3MzcsMTcgQEAKICNpZmRlZiBDT05GSUdfVFVMSVBfTkFQSQogCQlpZiAocnhkKQogCQkJY3NyNSAmPSB+UnhQb2xsSW50OwotCX0gd2hpbGUgKChjc3I1ICYgKFR4Tm9CdWYgfCAKLQkJCSAgVHhEaWVkIHwgCi0JCQkgIFR4SW50ciB8IAorCX0gd2hpbGUgKChjc3I1ICYgKFR4Tm9CdWYgfAorCQkJICBUeERpZWQgfAorCQkJICBUeEludHIgfAogCQkJICBUaW1lckludCB8CiAJCQkgIC8qIEFibm9ybWFsIGludHIuICovCi0JCQkgIFJ4RGllZCB8IAotCQkJICBUeEZJRk9VbmRlcmZsb3cgfCAKLQkJCSAgVHhKYWJiZXIgfCAKLQkJCSAgVFBMbmtGYWlsIHwgIAorCQkJICBSeERpZWQgfAorCQkJICBUeEZJRk9VbmRlcmZsb3cgfAorCQkJICBUeEphYmJlciB8CisJCQkgIFRQTG5rRmFpbCB8CiAJCQkgIFN5dGVtRXJyb3IgKSkgIT0gMCk7Ci0jZWxzZSAKKyNlbHNlCiAJfSB3aGlsZSAoKGNzcjUgJiAoTm9ybWFsSW50cnxBYm5vcm1hbEludHIpKSAhPSAwKTsKIAogCXR1bGlwX3JlZmlsbF9yeChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKaW5kZXggZjUzMzk2Zi4uZTliYzJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPm1paV9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0JCQorCiAJLyogRXN0YWJsaXNoIHN5bmMgYnkgc2VuZGluZyAzMiBsb2dpYyBvbmVzLiAqLwogCWZvciAoaSA9IDMyOyBpID49IDA7IGktLSkgewogCQlpb3dyaXRlMzIoTURJT19FTkIgfCBNRElPX0RBVEFfV1JJVEUxLCBtZGlvX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKaW5kZXggMDVkMmQ5Ni4uZDI1MDIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCkBAIC0yNTksNyArMjU5LDcgQEAKICAgIFRoZXJlIGFyZSBubyBpbGwgZWZmZWN0cyBmcm9tIHRvby1sYXJnZSByZWNlaXZlIHJpbmdzLiAqLwogCiAjZGVmaW5lIFRYX1JJTkdfU0laRQkzMgotI2RlZmluZSBSWF9SSU5HX1NJWkUJMTI4IAorI2RlZmluZSBSWF9SSU5HX1NJWkUJMTI4CiAjZGVmaW5lIE1FRElBX01BU0sgICAgIDMxCiAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwppbmRleCBjNjdjOTEyLi5jYWJkZjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC0xMjI0LDcgKzEyMjQsNyBAQAogICoJQ2hpcHMgdGhhdCBoYXZlIHRoZSBNUk0vcmVzZXJ2ZWQgYml0IHF1aXJrIGFuZCB0aGUgYnVyc3QgcXVpcmsuIFRoYXQKICAqCWlzIHRoZSBETTkxMFggYW5kIHRoZSBvbiBjaGlwIFVMaSBkZXZpY2VzCiAgKi8KLSAKKwogc3RhdGljIGludCB0dWxpcF91bGlfZG1fcXVpcmsoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaWYgKHBkZXYtPnZlbmRvciA9PSAweDEyODIgJiYgcGRldi0+ZGV2aWNlID09IDB4OTEwMikKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJICovCiAKIAkvKiAxLiBJbnRlbCBTYXR1cm4uIFN3aXRjaCB0byA4IGxvbmcgd29yZHMgYnVyc3QsIDggbG9uZyB3b3JkIGNhY2hlCi0JICAgICAgYWxpZ25lZC4gIEFyaWVzIG1pZ2h0IG5lZWQgdGhpcyB0b28uIFRoZSBTYXR1cm4gZXJyYXRhIGFyZSBub3QgCisJICAgICAgYWxpZ25lZC4gIEFyaWVzIG1pZ2h0IG5lZWQgdGhpcyB0b28uIFRoZSBTYXR1cm4gZXJyYXRhIGFyZSBub3QKIAkgICAgICBwcmV0dHkgcmVhZGluZyBidXQgdGhhbmtmdWxseSBpdCdzIGFuIG9sZCA0ODYgY2hpcHNldC4KIAogCSAgIDIuIFRoZSBkcmVhZGVkIFNpUzQ5NiA0ODYgY2hpcHNldC4gU2FtZSB3b3JrYXJvdW5kIGFzIEludGVsCkBAIC0xNDgzLDE0ICsxNDgzLDYgQEAKIAkJCXNhX29mZnNldCA9IDI7CQkvKiBHcnJyLCBkYW1uIE1hdHJveCBib2FyZHMuICovCiAJCQltdWx0aXBvcnRfY250ID0gNDsKIAkJfQotI2lmZGVmIENPTkZJR19EREI1NDc2Ci0JCWlmICgocGRldi0+YnVzLT5udW1iZXIgPT0gMCkgJiYgKFBDSV9TTE9UKHBkZXYtPmRldmZuKSA9PSA2KSkgewotCQkJLyogRERCNTQ3NiBNQUMgYWRkcmVzcyBpbiBmaXJzdCBFRVBST00gbG9jYXRpb25zLiAqLwotICAgICAgICAgICAgICAgICAgICAgICBzYV9vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtZWRpYSB0YWJsZSBlaXRoZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgdHAtPmZsYWdzICY9IH5IQVNfTUVESUFfVEFCTEU7Ci0gICAgICAgICAgICAgICB9Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfRERCNTQ3NwogICAgICAgICAgICAgICAgaWYgKChwZGV2LT5idXMtPm51bWJlciA9PSAwKSAmJiAoUENJX1NMT1QocGRldi0+ZGV2Zm4pID09IDQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEREQjU0NzcgTUFDIGFkZHJlc3MgaW4gZmlyc3QgRUVQUk9NIGxvY2F0aW9ucy4gKi8KQEAgLTE1MDAsNyArMTQ5Miw3IEBACiAgICAgICAgICAgICAgICB9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUlQU19DT0JBTFQKLSAgICAgICAgICAgICAgIGlmICgocGRldi0+YnVzLT5udW1iZXIgPT0gMCkgJiYgCisgICAgICAgICAgICAgICBpZiAoKHBkZXYtPmJ1cy0+bnVtYmVyID09IDApICYmCiAgICAgICAgICAgICAgICAgICAgKChQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0gNykgfHwKICAgICAgICAgICAgICAgICAgICAgKFBDSV9TTE9UKHBkZXYtPmRldmZuKSA9PSAxMikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvYmFsdCBNQUMgYWRkcmVzcyBpbiBmaXJzdCBFRVBST00gbG9jYXRpb25zLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCmluZGV4IDIzOGU5YzcuLjhiM2EyOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKQEAgLTksNyArOSw3IEBACiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLSAgICAKKwogKi8KIAogI2RlZmluZSBEUlZfTkFNRQkidWxpNTI2eCIKQEAgLTE4NSw3ICsxODUsNyBAQAogCiAJLyogTklDIFNST00gZGF0YSAqLwogCXVuc2lnbmVkIGNoYXIgc3JvbVsxMjhdOwotCXU4IGluaXQ7CQorCXU4IGluaXQ7CiB9OwogCiBlbnVtIHVsaTUyNnhfb2Zmc2V0cyB7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYjsJLyogYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgaSwgZXJyOwotCQorCiAJVUxJNTI2WF9EQlVHKDAsICJ1bGk1MjZ4X2luaXRfb25lKCkiLCAwKTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCkBAIC0zMTYsNyArMzE2LDcgQEAKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X25vbWVtOwogCX0KLQkKKwogCWRiLT5maXJzdF90eF9kZXNjID0gKHN0cnVjdCB0eF9kZXNjICopIGRiLT5kZXNjX3Bvb2xfcHRyOwogCWRiLT5maXJzdF90eF9kZXNjX2RtYSA9IGRiLT5kZXNjX3Bvb2xfZG1hX3B0cjsKIAlkYi0+YnVmX3Bvb2xfc3RhcnQgPSBkYi0+YnVmX3Bvb2xfcHRyOwpAQCAtMzI0LDE0ICszMjQsMTQgQEAKIAogCWRiLT5jaGlwX2lkID0gZW50LT5kcml2ZXJfZGF0YTsKIAlkYi0+aW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCQorCiAJZGItPnBkZXYgPSBwZGV2OwogCWRiLT5pbml0ID0gMTsKLQkKKwogCWRldi0+YmFzZV9hZGRyID0gZGItPmlvYWRkcjsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQkKKwogCS8qIFJlZ2lzdGVyIHNvbWUgbmVjZXNzYXJ5IGZ1bmN0aW9ucyAqLwogCWRldi0+b3BlbiA9ICZ1bGk1MjZ4X29wZW47CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmdWxpNTI2eF9zdGFydF94bWl0OwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAJc3Bpbl9sb2NrX2luaXQoJmRiLT5sb2NrKTsKIAotCQkKKwogCS8qIHJlYWQgNjQgd29yZCBzcm9tIGRhdGEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKIAkJKCh1MTYgKikgZGItPnNyb20pW2ldID0gY3B1X3RvX2xlMTYocmVhZF9zcm9tX3dvcmQoZGItPmlvYWRkciwgaSkpOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJCWdvdG8gZXJyX291dF9yZXM7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogVUxpIE0lMDRseCBhdCBwY2klcywiLGRldi0+bmFtZSxlbnQtPmRyaXZlcl9kYXRhID4+IDE2LHBjaV9uYW1lKHBkZXYpKTsKLQkKKwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCXByaW50aygiJWMlMDJ4IiwgaSA/ICc6JyA6ICcgJywgZGV2LT5kZXZfYWRkcltpXSk7CiAJcHJpbnRrKCIsIGlycSAlZC5cbiIsIGRldi0+aXJxKTsKQEAgLTM4OSw3ICszODksNyBAQAogCWlmKGRiLT5kZXNjX3Bvb2xfcHRyKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgdHhfZGVzYykgKiBERVNDX0FMTF9DTlQgKyAweDIwLAogCQkJZGItPmRlc2NfcG9vbF9wdHIsIGRiLT5kZXNjX3Bvb2xfZG1hX3B0cik7Ci0JCQkKKwogCWlmKGRiLT5idWZfcG9vbF9wdHIgIT0gTlVMTCkKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBUWF9CVUZfQUxMT0MgKiBUWF9ERVNDX0NOVCArIDQsCiAJCQlkYi0+YnVmX3Bvb2xfcHRyLCBkYi0+YnVmX3Bvb2xfZG1hX3B0cik7CkBAIC00MzMsNyArNDMzLDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB1bGk1MjZ4X2JvYXJkX2luZm8gKmRiID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCVVMSTUyNlhfREJVRygwLCAidWxpNTI2eF9vcGVuIiwgMCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnVsaTUyNnhfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJLyogQ1I2IG9wZXJhdGlvbiBtb2RlIGRlY2lzaW9uICovCiAJZGItPmNyNl9kYXRhIHw9IFVMSTUyNlhfVFhUSF8yNTY7CiAJZGItPmNyMF9kYXRhID0gQ1IwX0RFRkFVTFQ7Ci0JCisKIAkvKiBJbml0aWFsaXplIFVMSTUyNlggYm9hcmQgKi8KIAl1bGk1MjZ4X2luaXQoZGV2KTsKIApAQCAtNjA0LDcgKzYwNCw3IEBACiAJLyogUmVzdG9yZSBDUjcgdG8gZW5hYmxlIGludGVycnVwdCAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiAJb3V0bChkYi0+Y3I3X2RhdGEsIGRldi0+YmFzZV9hZGRyICsgRENSNyk7Ci0JCisKIAkvKiBmcmVlIHRoaXMgU0tCICovCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCkBAIC03ODIsNyArNzgyLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCByeGxlbjsKIAl1MzIgcmRlczA7Ci0JCisKIAlyeHB0ciA9IGRiLT5yeF9yZWFkeV9wdHI7CiAKIAl3aGlsZShkYi0+cnhfYXZhaWxfY250KSB7CkBAIC04MjEsNyArODIxLDcgQEAKIAkJCWlmICggIShyZGVzMCAmIDB4ODAwMCkgfHwKIAkJCQkoKGRiLT5jcjZfZGF0YSAmIENSNl9QTSkgJiYgKHJ4bGVuPjYpKSApIHsKIAkJCQlza2IgPSByeHB0ci0+cnhfc2tiX3B0cjsKLQkJCisKIAkJCQkvKiBHb29kIHBhY2tldCwgc2VuZCB0byB1cHBlciBsYXllciAqLwogCQkJCS8qIFNob3JzdCBwYWNrZXQgdXNlZCBuZXcgU0tCICovCiAJCQkJaWYgKCAocnhsZW4gPCBSWF9DT1BZX1NJWkUpICYmCkBAIC04NDEsNyArODQxLDcgQEAKIAkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJCWRiLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQkJZGItPnN0YXRzLnJ4X2J5dGVzICs9IHJ4bGVuOwotCQkJCQorCiAJCQl9IGVsc2UgewogCQkJCS8qIFJldXNlIFNLQiBidWZmZXIgd2hlbiB0aGUgcGFja2V0IGlzIGVycm9yICovCiAJCQkJVUxJNTI2WF9EQlVHKDAsICJSZXVzZSBTSyBidWZmZXIsIHJkZXMwIiwgcmRlczApOwpAQCAtOTExLDcgKzkxMSw3IEBACiAJICAgICAgICAgICAgICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKIAkgICAgICAgICAgICAgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAogCSAgICAgICAgICAgICAgICAgICBTVVBQT1JURURfTUlJKTsKLQkJCisKIAllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CiAJICAgICAgICAgICAgICAgICAgIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKIAkgICAgICAgICAgICAgICAgICAgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKQEAgLTkyNCwxMyArOTI0LDEzIEBACiAJZWNtZC0+cGh5X2FkZHJlc3MgPSBkYi0+cGh5X2FkZHI7CiAKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7Ci0JCQorCiAJZWNtZC0+c3BlZWQgPSAxMDsKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkKKwogCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1IRiB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCiAJewotCQllY21kLT5zcGVlZCA9IDEwMDsgICAgICAgICAgICAgICAKKwkJZWNtZC0+c3BlZWQgPSAxMDA7CiAJfQogCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwTUZEIHx8IGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1GRCkKIAl7CkBAIC05MzksMTEgKzkzOSwxMSBAQAogCWlmKGRiLT5saW5rX2ZhaWxlZCkKIAl7CiAJCWVjbWQtPnNwZWVkID0gLTE7Ci0JCWVjbWQtPmR1cGxleCA9IC0xOwkKKwkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQotCQorCiAJaWYgKGRiLT5tZWRpYV9tb2RlICYgVUxJNTI2WF9BVVRPKQotCXsJCisJewogCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CiAJfQogfQpAQCAtOTY0LDE1ICs5NjQsMTUgQEAKIAogc3RhdGljIGludCBuZXRkZXZfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKSB7CiAJc3RydWN0IHVsaTUyNnhfYm9hcmRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJVUxpX2V0aHRvb2xfZ3NldChucCwgY21kKTsKLQkKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTMyIG5ldGRldl9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CiAJc3RydWN0IHVsaTUyNnhfYm9hcmRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkKKwogCWlmKG5wLT5saW5rX2ZhaWxlZCkKIAkJcmV0dXJuIDA7CiAJZWxzZQpAQCAtMTAwNSwxMSArMTAwNSwxMSBAQAogCXN0cnVjdCB1bGk1MjZ4X2JvYXJkX2luZm8gKmRiID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBUbXBTcGVlZD0xMDsKLQkKKwogCS8vVUxJNTI2WF9EQlVHKDAsICJ1bGk1MjZ4X3RpbWVyKCkiLCAwKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKIAotCQorCiAJLyogRHluYW1pYyByZXNldCBVTEk1MjZYIDogc3lzdGVtIGVycm9yIG9yIHRyYW5zbWl0IHRpbWUtb3V0ICovCiAJdG1wX2NyOCA9IGlubChkYi0+aW9hZGRyICsgRENSOCk7CiAJaWYgKCAoZGItPmludGVydmFsX3J4X2NudD09MCkgJiYgKHRtcF9jcjgpICkgewpAQCAtMTAyMSw5ICsxMDIxLDkgQEAKIAkvKiBUWCBwb2xsaW5nIGtpY2sgbW9uaXRvciAqLwogCWlmICggZGItPnR4X3BhY2tldF9jbnQgJiYKIAkgICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2LT50cmFuc19zdGFydCArIFVMSTUyNlhfVFhfS0lDSykgKSB7Ci0JCW91dGwoMHgxLCBkZXYtPmJhc2VfYWRkciArIERDUjEpOyAgIC8vIFR4IHBvbGxpbmcgYWdhaW4gCisJCW91dGwoMHgxLCBkZXYtPmJhc2VfYWRkciArIERDUjEpOyAgIC8vIFR4IHBvbGxpbmcgYWdhaW4KIAotCQkvLyBUWCBUaW1lb3V0IAorCQkvLyBUWCBUaW1lb3V0CiAJCWlmICggdGltZV9hZnRlcihqaWZmaWVzLCBkZXYtPnRyYW5zX3N0YXJ0ICsgVUxJNTI2WF9UWF9USU1FT1VUKSApIHsKIAkJCWRiLT5yZXNldF9UWHRpbWVvdXQrKzsKIAkJCWRiLT53YWl0X3Jlc2V0ID0gMTsKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJCQkJdWxpNTI2eF9zZW5zZV9zcGVlZChkYikgKQogCQkJCWRiLT5saW5rX2ZhaWxlZCA9IDE7CiAJCQl1bGk1MjZ4X3Byb2Nlc3NfbW9kZShkYik7Ci0JCQkKKwogCQkJaWYoZGItPmxpbmtfZmFpbGVkPT0wKQogCQkJewogCQkJCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1IRiB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCkBAIC0xNDA0LDcgKzE0MDQsNyBAQAogCXBoeV9tb2RlID0gcGh5X3JlYWQoZGItPmlvYWRkciwgZGItPnBoeV9hZGRyLCAxLCBkYi0+Y2hpcF9pZCk7CiAKIAlpZiAoIChwaHlfbW9kZSAmIDB4MjQpID09IDB4MjQgKSB7Ci0JCQorCiAJCXBoeV9tb2RlID0gKChwaHlfcmVhZChkYi0+aW9hZGRyLCBkYi0+cGh5X2FkZHIsIDUsIGRiLT5jaGlwX2lkKSAmIDB4MDFlMCk8PDcpOwogCQlpZihwaHlfbW9kZSYweDgwMDApCiAJCQlwaHlfbW9kZSA9IDB4ODAwMDsKQEAgLTE0MTQsNyArMTQxNCw3IEBACiAJCQlwaHlfbW9kZSA9IDB4MjAwMDsKIAkJZWxzZQogCQkJcGh5X21vZGUgPSAweDEwMDA7Ci0JCQorCiAJCS8qIHByaW50ayhEUlZfTkFNRSAiOiBQaHlfbW9kZSAleCAiLHBoeV9tb2RlKTsgKi8KIAkJc3dpdGNoIChwaHlfbW9kZSkgewogCQljYXNlIDB4MTAwMDogZGItPm9wX21vZGUgPSBVTEk1MjZYXzEwTUhGOyBicmVhazsKQEAgLTE0NDIsNyArMTQ0Miw3IEBACiBzdGF0aWMgdm9pZCB1bGk1MjZ4X3NldF9waHl4Y2VyKHN0cnVjdCB1bGk1MjZ4X2JvYXJkX2luZm8gKmRiKQogewogCXUxNiBwaHlfcmVnOwotCQorCiAJLyogUGh5eGNlciBjYXBhYmlsaXR5IHNldHRpbmcgKi8KIAlwaHlfcmVnID0gcGh5X3JlYWQoZGItPmlvYWRkciwgZGItPnBoeV9hZGRyLCA0LCBkYi0+Y2hpcF9pZCkgJiB+MHgwMWUwOwogCkBAIC0xNDU3LDcgKzE0NTcsNyBAQAogCQljYXNlIFVMSTUyNlhfMTAwTUhGOiBwaHlfcmVnIHw9IDB4ODA7IGJyZWFrOwogCQljYXNlIFVMSTUyNlhfMTAwTUZEOiBwaHlfcmVnIHw9IDB4MTAwOyBicmVhazsKIAkJfQotCQkKKwogCX0KIAogICAJLyogV3JpdGUgbmV3IGNhcGFiaWxpdHkgdG8gUGh5eGNlciBSZWc0ICovCkBAIC0xNTU2LDcgKzE1NTYsNyBAQAogCS8qIFdyaXRlIGEgd29yZCBkYXRhIHRvIFBIWSBjb250cm9sbGVyICovCiAJZm9yICggaSA9IDB4ODAwMDsgaSA+IDA7IGkgPj49IDEpCiAJCXBoeV93cml0ZV8xYml0KGlvYWRkciwgcGh5X2RhdGEgJiBpID8gUEhZX0RBVEFfMSA6IFBIWV9EQVRBXzAsIGNoaXBfaWQpOwotCQorCiB9CiAKIApAQCAtMTU3NCw3ICsxNTc0LDcgQEAKIAkJcmV0dXJuIHBoeV9yZWFkYnlfY3IxMChpb2Jhc2UsIHBoeV9hZGRyLCBvZmZzZXQpOwogCS8qIE01MjYxL001MjYzIENoaXAgKi8KIAlpb2FkZHIgPSBpb2Jhc2UgKyBEQ1I5OwotCQorCiAJLyogU2VuZCAzMyBzeW5jaHJvbml6YXRpb24gY2xvY2sgdG8gUGh5IGNvbnRyb2xsZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzU7IGkrKykKIAkJcGh5X3dyaXRlXzFiaXQoaW9hZGRyLCBQSFlfREFUQV8xLCBjaGlwX2lkKTsKQEAgLTE2MTAsNyArMTYxMCw3IEBACiBzdGF0aWMgdTE2IHBoeV9yZWFkYnlfY3IxMCh1bnNpZ25lZCBsb25nIGlvYmFzZSwgdTggcGh5X2FkZHIsIHU4IG9mZnNldCkKIHsKIAl1bnNpZ25lZCBsb25nIGlvYWRkcixjcjEwX3ZhbHVlOwotCQorCiAJaW9hZGRyID0gaW9iYXNlICsgRENSMTA7CiAJY3IxMF92YWx1ZSA9IHBoeV9hZGRyOwogCWNyMTBfdmFsdWUgPSAoY3IxMF92YWx1ZTw8NSkgKyBvZmZzZXQ7CkBAIC0xNjI5LDcgKzE2MjksNyBAQAogc3RhdGljIHZvaWQgcGh5X3dyaXRlYnlfY3IxMCh1bnNpZ25lZCBsb25nIGlvYmFzZSwgdTggcGh5X2FkZHIsIHU4IG9mZnNldCwgdTE2IHBoeV9kYXRhKQogewogCXVuc2lnbmVkIGxvbmcgaW9hZGRyLGNyMTBfdmFsdWU7Ci0JCisKIAlpb2FkZHIgPSBpb2Jhc2UgKyBEQ1IxMDsKIAljcjEwX3ZhbHVlID0gcGh5X2FkZHI7CiAJY3IxMF92YWx1ZSA9IChjcjEwX3ZhbHVlPDw1KSArIG9mZnNldDsKQEAgLTE2NTksNyArMTY1OSw3IEBACiBzdGF0aWMgdTE2IHBoeV9yZWFkXzFiaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIHUzMiBjaGlwX2lkKQogewogCXUxNiBwaHlfZGF0YTsKLQkKKwogCW91dGwoMHg1MDAwMCAsIGlvYWRkcik7CiAJdWRlbGF5KDEpOwogCXBoeV9kYXRhID0gKCBpbmwoaW9hZGRyKSA+PiAxOSApICYgMHgxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKaW5kZXggMTM2YTcwYy4uOGZlYTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCkBAIC0zOCwxMiArMzgsMTIgQEAKIAkJCUNvcHlyaWdodCAoQykgMjAwMSBNYW5mcmVkIFNwcmF1bAogICAJKiBldGh0b29sIHN1cHBvcnQgKGpnYXJ6aWspCiAJKiBSZXBsYWNlIHNvbWUgTUlJLXJlbGF0ZWQgbWFnaWMgbnVtYmVycyB3aXRoIGNvbnN0YW50cyAoamdhcnppaykKLSAgCisKIAlUT0RPOgogCSogZW5hYmxlIHBjaV9wb3dlcl9vZmYKIAkqIFdha2UtT24tTEFOCiAqLwotICAKKwogI2RlZmluZSBEUlZfTkFNRQkid2luYm9uZC04NDAiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAxLWQiCiAjZGVmaW5lIERSVl9SRUxEQVRFCSJOb3YtMTctMjAwMSIKQEAgLTU3LDcgKzU3LDcgQEAKIGMtaGVscC1zeW1ib2w6IENPTkZJR19XSU5CT05EXzg0MAogYy1oZWxwOiBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIFdpbmJvbmQgVzg5Yzg0MCBjaGlwLiAgSXQgYWxzbyB3b3JrcyB3aXRoCiBjLWhlbHA6IHRoZSBUWDk4ODIgY2hpcCBvbiB0aGUgQ29tcGV4IFJMMTAwLUFUWCBib2FyZC4KLWMtaGVscDogTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhbmQgdXBkYXRlcyBhcmUgYXZhaWxhYmxlIGZyb20gCitjLWhlbHA6IE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gYW5kIHVwZGF0ZXMgYXJlIGF2YWlsYWJsZSBmcm9tCiBjLWhlbHA6IGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZHJpdmVycy5odG1sCiAqLwogCkBAIC0yMDcsNyArMjA3LDcgQEAKIAogKi8KIAotDAorCiAKIC8qCiAgIFBDSSBwcm9iZSB0YWJsZS4KQEAgLTM3NCw3ICszNzQsNyBAQAogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiBzdGF0aWMgaW50ICBuZXRkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLQwKKwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3ODQwX3Byb2JlMSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtNDM0LDcgKzQzNCw3IEBACiAJbnAtPm1paV9pZi5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7CiAJbnAtPm1paV9pZi5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsKIAlucC0+YmFzZV9hZGRyID0gaW9hZGRyOwotCQorCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlpZiAoZGV2LT5tZW1fc3RhcnQpCkBAIC01MTAsNyArNTEwLDcgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotDAorCiAvKiBSZWFkIHRoZSBFRVBST00gYW5kIE1JSSBNYW5hZ2VtZW50IERhdGEgSS9PIChNRElPKSBpbnRlcmZhY2VzLiAgVGhlc2UgYXJlCiAgICBvZnRlbiBzZXJpYWwgYml0IHN0cmVhbXMgZ2VuZXJhdGVkIGJ5IHRoZSBob3N0IHByb2Nlc3Nvci4KICAgIFRoZSBleGFtcGxlIGJlbG93IGlzIGZvciB0aGUgY29tbW9uIDkzYzQ2IEVFUFJPTSwgNjQgMTYgYml0IHdvcmRzLiAqLwpAQCAtNjYwLDcgKzY2MCw3IEBACiAJcmV0dXJuOwogfQogCi0MCisKIHN0YXRpYyBpbnQgbmV0ZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTczMSw3ICs3MzEsNyBAQAogCQkJCWRldi0+bmFtZSwgbnAtPnBoeXNbMF0pOwogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJfQotCQorCiAJaWYgKChucC0+bWlpICYgfjB4ZikgPT0gTUlJX0RBVklDT01fRE05MTAxKSB7CiAJCS8qIElmIHRoZSBsaW5rIHBhcnRuZXIgZG9lc24ndCBzdXBwb3J0IGF1dG9uZWdvdGlhdGlvbgogCQkgKiB0aGUgTUlJIGRldGVjdHMgaXQncyBhYmlsaXRpZXMgd2l0aCB0aGUgInBhcmFsbGVsIGRldGVjdGlvbiIuCkBAIC03NjEsNyArNzYxLDcgQEAKIAkJcmVzdWx0IHw9IDB4MjAwMDAwMDA7CiAJaWYgKHJlc3VsdCAhPSBucC0+Y3NyNiAmJiBkZWJ1ZykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgJWRNQml0LSVzLWR1cGxleCBiYXNlZCBvbiBNSUkjJWRcbiIsCi0JCQkJIGRldi0+bmFtZSwgZmFzdGV0aCA/IDEwMCA6IDEwLCAKKwkJCQkgZGV2LT5uYW1lLCBmYXN0ZXRoID8gMTAwIDogMTAsCiAJCQkgICAJZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLCBucC0+cGh5c1swXSk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTk0Nyw3ICs5NDcsNyBAQAogCWlvd3JpdGUzMihpLCBpb2FkZHIgKyBQQ0lCdXNDZmcpOwogCiAJbnAtPmNzcjYgPSAwOwotCS8qIDEyOCBieXRlIFR4IHRocmVzaG9sZDsgCisJLyogMTI4IGJ5dGUgVHggdGhyZXNob2xkOwogCQlUcmFuc21pdCBvbjsgUmVjZWl2ZSBvbjsgKi8KIAl1cGRhdGVfY3NyNihkZXYsIDB4MDAwMjIwMDIgfCB1cGRhdGVfbGluayhkZXYpIHwgX19zZXRfcnhfbW9kZShkZXYpKTsKIApAQCAtMTU4NCw3ICsxNTg0LDcgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3ODQwX3JlbW92ZTEgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JCisKIAlpZiAoZGV2KSB7CiAJCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwpAQCAtMTYwNSwxMSArMTYwNSwxMSBAQAogICogLSBnZXRfc3RhdHM6CiAgKiAJc3Bpbl9sb2NrX2lycShucC0+bG9jayksIGRvZXNuJ3QgdG91Y2ggaHcgaWYgbm90IHByZXNlbnQKICAqIC0gaGFyZF9zdGFydF94bWl0OgotICogCW5ldGlmX3N0b3BfcXVldWUgKyBzcGluX3VubG9ja193YWl0KCZkZXYtPnhtaXRfbG9jayk7CisgKiAJc3luY2hyb25pemVfaXJxICsgbmV0aWZfdHhfZGlzYWJsZTsKICAqIC0gdHhfdGltZW91dDoKLSAqIAluZXRpZl9kZXZpY2VfZGV0YWNoICsgc3Bpbl91bmxvY2tfd2FpdCgmZGV2LT54bWl0X2xvY2spOworICogCW5ldGlmX2RldmljZV9kZXRhY2ggKyBuZXRpZl90eF9kaXNhYmxlOwogICogLSBzZXRfbXVsdGljYXN0X2xpc3QKLSAqIAluZXRpZl9kZXZpY2VfZGV0YWNoICsgc3Bpbl91bmxvY2tfd2FpdCgmZGV2LT54bWl0X2xvY2spOworICogCW5ldGlmX2RldmljZV9kZXRhY2ggKyBuZXRpZl90eF9kaXNhYmxlOwogICogLSBpbnRlcnJ1cHQgaGFuZGxlcgogICogCWRvZXNuJ3QgdG91Y2ggaHcgaWYgbm90IHByZXNlbnQsIHN5bmNocm9uaXplX2lycSB3YWl0cyBmb3IKICAqIAlydW5uaW5nIGluc3RhbmNlcyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCkBAIC0xNjM1LDExICsxNjM1LDEwIEBACiAJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAkJdXBkYXRlX2NzcjYoZGV2LCAwKTsKIAkJaW93cml0ZTMyKDAsIGlvYWRkciArIEludHJFbmFibGUpOwotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCi0JCXNwaW5fdW5sb2NrX3dhaXQoJmRldi0+eG1pdF9sb2NrKTsKIAkJc3luY2hyb25pemVfaXJxKGRldi0+aXJxKTsKKwkJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwogCQogCQlucC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBpb3JlYWQzMihpb2FkZHIgKyBSeE1pc3NlZCkgJiAweGZmZmY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKaW5kZXggNTYzNDQxMC4uNjNjMjE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qCi0gKiB4aXJjb21fY2I6IEEgZHJpdmVyIGZvciB0aGUgKHR1bGlwLWxpa2UpIFhpcmNvbSBDYXJkYnVzIGV0aGVybmV0IGNhcmRzIAorICogeGlyY29tX2NiOiBBIGRyaXZlciBmb3IgdGhlICh0dWxpcC1saWtlKSBYaXJjb20gQ2FyZGJ1cyBldGhlcm5ldCBjYXJkcwogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgKEMpIGJ5IHRoZSByZXNwZWN0aXZlIGF1dGhvcnMsIGFuZCBsaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKiBMaWNlbnNlLgogICoKICAqIFdyaXR0ZW4gYnkgQXJqYW4gdmFuIGRlIFZlbiBmb3IgUmVkIEhhdCwgSW5jLgotICogQmFzZWQgb24gd29yayBieSBKZWZmIEdhcnppaywgRG91ZyBMZWRmb3JkIGFuZCBEb25hbGQgQmVja2VyIAorICogQmFzZWQgb24gd29yayBieSBKZWZmIEdhcnppaywgRG91ZyBMZWRmb3JkIGFuZCBEb25hbGQgQmVja2VyCiAgKgogICogIAlUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCiAgKiAgICAgIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCkBAIC05Myw3ICs5Myw3IEBACiAKIAl1bnNpZ25lZCBsb25nIGlvX3BvcnQ7CiAJaW50IG9wZW47Ci0JCisKIAkvKiB0cmFuc21pdF91c2VkIGlzIHRoZSByb3RhdGluZyBjb3VudGVyIHRoYXQgaW5kaWNhdGVzIHdoaWNoIHRyYW5zbWl0CiAJICAgZGVzY3JpcHRvciBoYXMgdG8gYmUgdXNlZCBuZXh0ICovCiAJaW50IHRyYW5zbWl0X3VzZWQ7CkBAIC0xNTMsMTAgKzE1MywxMCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHhpcmNvbV9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgeGlyY29tX29wcyA9IHsKLQkubmFtZQkJPSAieGlyY29tX2NiIiwgCi0JLmlkX3RhYmxlCT0geGlyY29tX3BjaV90YWJsZSwgCi0JLnByb2JlCQk9IHhpcmNvbV9wcm9iZSwgCi0JLnJlbW92ZQkJPSB4aXJjb21fcmVtb3ZlLCAKKwkubmFtZQkJPSAieGlyY29tX2NiIiwKKwkuaWRfdGFibGUJPSB4aXJjb21fcGNpX3RhYmxlLAorCS5wcm9iZQkJPSB4aXJjb21fcHJvYmUsCisJLnJlbW92ZQkJPSB4aXJjb21fcmVtb3ZlLAogCS5zdXNwZW5kID1OVUxMLAogCS5yZXN1bWUgPU5VTEwKIH07CkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJCWJ1ZmZlcltpMisrXT0nMSc7CiAJCWVsc2UKIAkJCWJ1ZmZlcltpMisrXT0nMCc7Ci0JCWlmICgoaSYzKT09MCkgCisJCWlmICgoaSYzKT09MCkKIAkJCWJ1ZmZlcltpMisrXT0nICc7CiAJfQogCXByaW50aygiJXNcbiIsYnVmZmVyKTsKQEAgLTE5NiwxMCArMTk2LDEwIEBACiAKIC8qIHhpcmNvbV9wcm9iZSBpcyB0aGUgY29kZSB0aGF0IGdldHMgY2FsbGVkIG9uIGRldmljZSBpbnNlcnRpb24uCiAgICBpdCBzZXRzIHVwIHRoZSBoYXJkd2FyZSBhbmQgcmVnaXN0ZXJzIHRoZSBkZXZpY2UgdG8gdGhlIG5ldHdvcmtsYXllci4KLSAgIAorCiAgICBUT0RPOiBTZW5kIDEgb3IgMiAiZHVtbXkiIHBhY2tldHMgaGVyZSBhcyB0aGUgY2FyZCBzZWVtcyB0byBkaXNjYXJkIHRoZQogICAgICAgICAgZmlyc3QgdHdvIHBhY2tldHMgdGhhdCBnZXQgc2VuZCwgYW5kIHB1bXAgaGF0ZXMgdGhhdC4KLSAgICAgICAgIAorCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHhpcmNvbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewpAQCAtMjA5LDcgKzIwOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCB0bXAxNjsKIAllbnRlcigieGlyY29tX3Byb2JlIik7Ci0JCisKIAkvKiBGaXJzdCBkbyB0aGUgUENJIGluaXRpYWxpc2F0aW9uICovCiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCkBAIC0yMTcsMjQgKzIxNywyNCBAQAogCiAJLyogZGlzYWJsZSBhbGwgcG93ZXJtYW5hZ2VtZW50ICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfUE9XRVJNR01ULCAweDAwMDApOwotCQorCiAJcGNpX3NldF9tYXN0ZXIocGRldik7IC8qIFdoeSBpc24ndCB0aGlzIGRvbmUgYnkgcGNpX2VuYWJsZV9kZXZpY2UgPyovCiAKLQkvKiBjbGVhciBQQ0kgc3RhdHVzLCBpZiBhbnkgKi8gCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQgKHBkZXYsUENJX1NUQVRVUywgJnRtcDE2KTsgCisJLyogY2xlYXIgUENJIHN0YXR1cywgaWYgYW55ICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQgKHBkZXYsUENJX1NUQVRVUywgJnRtcDE2KTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQgKHBkZXYsIFBDSV9TVEFUVVMsdG1wMTYpOwotCQorCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmY2hpcF9yZXYpOwotCQorCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIDEyOCwgInhpcmNvbV9jYiIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAieGlyY29tX3Byb2JlOiBmYWlsZWQgdG8gYWxsb2NhdGUgaW8tcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogCisJLyoKIAkgICBCZWZvcmUgY2hhbmdpbmcgdGhlIGhhcmR3YXJlLCBhbGxvY2F0ZSB0aGUgbWVtb3J5LgogCSAgIFRoaXMgd2F5LCB3ZSBjYW4gZmFpbCBncmFjZWZ1bGx5IGlmIG5vdCBlbm91Z2ggbWVtb3J5Ci0JICAgaXMgYXZhaWxhYmxlLiAKKwkgICBpcyBhdmFpbGFibGUuCiAJICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSkpOwogCWlmICghZGV2KSB7CkBAIC0yNDIsMTMgKzI0MiwxMyBAQAogCQlnb3RvIGRldmljZV9mYWlsOwogCX0KIAlwcml2YXRlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCS8qIEFsbG9jYXRlIHRoZSBzZW5kL3JlY2VpdmUgYnVmZmVycyAqLwogCXByaXZhdGUtPnJ4X2J1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsODE5MiwmcHJpdmF0ZS0+cnhfZG1hX2hhbmRsZSk7CiAJaWYgKHByaXZhdGUtPnJ4X2J1ZmZlciA9PSBOVUxMKSB7CiAgCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogbm8gbWVtb3J5IGZvciByeCBidWZmZXIgXG4iKTsKIAkJZ290byByeF9idWZfZmFpbDsKLQl9CQorCX0KIAlwcml2YXRlLT50eF9idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LDgxOTIsJnByaXZhdGUtPnR4X2RtYV9oYW5kbGUpOwogCWlmIChwcml2YXRlLT50eF9idWZmZXIgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogbm8gbWVtb3J5IGZvciB0eCBidWZmZXIgXG4iKTsKQEAgLTI2NSwxMSArMjY1LDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUtPmxvY2spOwogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCWRldi0+YmFzZV9hZGRyID0gcHJpdmF0ZS0+aW9fcG9ydDsKLQkKKwogCWluaXRpYWxpemVfY2FyZChwcml2YXRlKTsKIAlyZWFkX21hY19hZGRyZXNzKHByaXZhdGUpOwogCXNldHVwX2Rlc2NyaXB0b3JzKHByaXZhdGUpOwotCQorCiAJZGV2LT5vcGVuID0gJnhpcmNvbV9vcGVuOwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnhpcmNvbV9zdGFydF94bWl0OwogCWRldi0+c3RvcCA9ICZ4aXJjb21fY2xvc2U7CkBAIC0yODUsMTkgKzI4NSwxOSBAQAogCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQuXG4iKTsKIAkJZ290byByZWdfZmFpbDsKIAl9Ci0JCQorCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFhpcmNvbSBjYXJkYnVzIHJldmlzaW9uICVpIGF0IGlycSAlaSBcbiIsIGRldi0+bmFtZSwgY2hpcF9yZXYsIHBkZXYtPmlycSk7CiAJLyogc3RhcnQgdGhlIHRyYW5zbWl0dGVyIHRvIGdldCBhIGhlYXJ0YmVhdCAqLwogCS8qIFRPRE86IHNlbmQgMiBkdW1teSBwYWNrZXRzIGhlcmUgKi8KIAl0cmFuc2NlaXZlcl92b29kb28ocHJpdmF0ZSk7Ci0JCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdmF0ZS0+bG9jayxmbGFncyk7CiAJYWN0aXZhdGVfdHJhbnNtaXR0ZXIocHJpdmF0ZSk7CiAJYWN0aXZhdGVfcmVjZWl2ZXIocHJpdmF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdmF0ZS0+bG9jayxmbGFncyk7Ci0JCisKIAl0cmlnZ2VyX3JlY2VpdmUocHJpdmF0ZSk7Ci0JCisKIAlsZWF2ZSgieGlyY29tX3Byb2JlIik7CiAJcmV0dXJuIDA7CiAKQEAgLTMzMiw3ICszMzIsNyBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWxlYXZlKCJ4aXJjb21fcmVtb3ZlIik7Ci19IAorfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGlyY29tX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMzQ2LDExICszNDYsMTEgQEAKIAlzcGluX2xvY2soJmNhcmQtPmxvY2spOwogCXN0YXR1cyA9IGlubChjYXJkLT5pb19wb3J0K0NTUjUpOwogCi0jaWZkZWYgREVCVUcJCisjaWZkZWYgREVCVUcKIAlwcmludF9iaW5hcnkoc3RhdHVzKTsKIAlwcmludGsoInR4IHN0YXR1cyAweCUwOHggMHglMDh4IFxuIixjYXJkLT50eF9idWZmZXJbMF0sY2FyZC0+dHhfYnVmZmVyWzRdKTsKIAlwcmludGsoInJ4IHN0YXR1cyAweCUwOHggMHglMDh4IFxuIixjYXJkLT5yeF9idWZmZXJbMF0sY2FyZC0+cnhfYnVmZmVyWzRdKTsKLSNlbmRpZgkKKyNlbmRpZgogCS8qIEhhbmRsZSBzaGFyZWQgaXJxIGFuZCBob3RwbHVnICovCiAJaWYgKHN0YXR1cyA9PSAwIHx8IHN0YXR1cyA9PSAweGZmZmZmZmZmKSB7CiAJCXNwaW5fdW5sb2NrKCZjYXJkLT5sb2NrKTsKQEAgLTM2NiwyMSArMzY2LDIxIEBACiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCWVsc2UKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQorCiAJfQogCi0JLyogQ2xlYXIgYWxsIHJlbWFpbmluZyBpbnRlcnJ1cHRzICovCQorCS8qIENsZWFyIGFsbCByZW1haW5pbmcgaW50ZXJydXB0cyAqLwogCXN0YXR1cyB8PSAweGZmZmZmZmZmOyAvKiBGSVhNRTogbWFrZSB0aGlzIGNsZWFyIG9ubHkgdGhlCiAJCQkJICAgICAgICByZWFsIGV4aXN0aW5nIGJpdHMgKi8KIAlvdXRsKHN0YXR1cyxjYXJkLT5pb19wb3J0K0NTUjUpOwotCQogCi0JZm9yIChpPTA7aTxOVU1ERVNDUklQVE9SUztpKyspIAorCisJZm9yIChpPTA7aTxOVU1ERVNDUklQVE9SUztpKyspCiAJCWludmVzdGlnYXRlX3dyaXRlX2Rlc2NyaXB0b3IoZGV2LGNhcmQsaSxidWZmZXJvZmZzZXRzW2ldKTsKLQlmb3IgKGk9MDtpPE5VTURFU0NSSVBUT1JTO2krKykgCisJZm9yIChpPTA7aTxOVU1ERVNDUklQVE9SUztpKyspCiAJCWludmVzdGlnYXRlX3JlYWRfZGVzY3JpcHRvcihkZXYsY2FyZCxpLGJ1ZmZlcm9mZnNldHNbaV0pOwogCi0JCisKIAlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CiAJbGVhdmUoInhpcmNvbV9pbnRlcnJ1cHQiKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zOTMsMzggKzM5MywzOCBAQAogCWludCBuZXh0ZGVzY3JpcHRvcjsKIAlpbnQgZGVzYzsKIAllbnRlcigieGlyY29tX3N0YXJ0X3htaXQiKTsKLQkKKwogCWNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLGZsYWdzKTsKLQkKKwogCS8qIEZpcnN0IHNlZSBpZiB3ZSBjYW4gZnJlZSBzb21lIGRlc2NyaXB0b3JzICovCi0JZm9yIChkZXNjPTA7ZGVzYzxOVU1ERVNDUklQVE9SUztkZXNjKyspIAorCWZvciAoZGVzYz0wO2Rlc2M8TlVNREVTQ1JJUFRPUlM7ZGVzYysrKQogCQlpbnZlc3RpZ2F0ZV93cml0ZV9kZXNjcmlwdG9yKGRldixjYXJkLGRlc2MsYnVmZmVyb2Zmc2V0c1tkZXNjXSk7Ci0JCi0JCisKKwogCW5leHRkZXNjcmlwdG9yID0gKGNhcmQtPnRyYW5zbWl0X3VzZWQgKzEpICUgKE5VTURFU0NSSVBUT1JTKTsKIAlkZXNjID0gY2FyZC0+dHJhbnNtaXRfdXNlZDsKLQkKKwogCS8qIG9ubHkgc2VuZCB0aGUgcGFja2V0IGlmIHRoZSBkZXNjcmlwdG9yIGlzIGZyZWUgKi8KIAlpZiAoY2FyZC0+dHhfYnVmZmVyWzQqZGVzY109PTApIHsKIAkJCS8qIENvcHkgdGhlIHBhY2tldCBkYXRhOyB6ZXJvIHRoZSBtZW1vcnkgZmlyc3QgYXMgdGhlIGNhcmQKIAkJCSAgIHNvbWV0aW1lcyBzZW5kcyBtb3JlIHRoYW4geW91IGFzayBpdCB0by4gKi8KLQkJCQorCiAJCQltZW1zZXQoJmNhcmQtPnR4X2J1ZmZlcltidWZmZXJvZmZzZXRzW2Rlc2NdLzRdLDAsMTUzNik7CiAJCQltZW1jcHkoJihjYXJkLT50eF9idWZmZXJbYnVmZmVyb2Zmc2V0c1tkZXNjXS80XSksc2tiLT5kYXRhLHNrYi0+bGVuKTsKLQkKLQkKKworCiAJCQkvKiBGSVhNRTogVGhlIHNwZWNpZmljYXRpb24gdGVsbHMgdXMgdGhhdCB0aGUgbGVuZ3RoIHdlIHNlbmQgSEFTIHRvIGJlIGEgbXVsdGlwbGUgb2YKIAkJCSAgIDQgYnl0ZXMuICovCi0JCQkgICAKKwogCQkJY2FyZC0+dHhfYnVmZmVyWzQqZGVzYysxXSA9IHNrYi0+bGVuOwogCQkJaWYgKGRlc2MgPT0gTlVNREVTQ1JJUFRPUlMtMSkKIAkJCQljYXJkLT50eF9idWZmZXJbNCpkZXNjKzFdIHw9ICgxPDwyNSk7ICAvKiBiaXQgMjU6IGxhc3QgZGVzY3JpcHRvciBvZiB0aGUgcmluZyAqLwogCiAJCQljYXJkLT50eF9idWZmZXJbNCpkZXNjKzFdIHw9IDB4RjAwMDAwMDA7Ci0JCQkJCQkgLyogMHhGMC4uLiBtZWFucyB3YW50IGludGVycnVwdHMqLyAKKwkJCQkJCSAvKiAweEYwLi4uIG1lYW5zIHdhbnQgaW50ZXJydXB0cyovCiAJCQljYXJkLT50eF9za2JbZGVzY10gPSBza2I7Ci0JCQkKKwogCQkJd21iKCk7CiAJCQkvKiBUaGlzIGdpdmVzIHRoZSBkZXNjcmlwdG9yIHRvIHRoZSBjYXJkICovCiAJCQljYXJkLT50eF9idWZmZXJbNCpkZXNjXSA9IDB4ODAwMDAwMDA7CkBAIC00MzMsMTggKzQzMywxOCBAQAogCQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJCX0KIAkJCWNhcmQtPnRyYW5zbWl0X3VzZWQgPSBuZXh0ZGVzY3JpcHRvcjsKLQkJCWxlYXZlKCJ4aXJjb20tc3RhcnRfeG1pdCAtIHNlbnQiKTsJCisJCQlsZWF2ZSgieGlyY29tLXN0YXJ0X3htaXQgLSBzZW50Iik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLGZsYWdzKTsKIAkJCXJldHVybiAwOwogCX0KLQkKKwogCiAKIAkvKiBVaCBvaC4uLiBubyBmcmVlIGRlc2NyaXB0b3IuLi4gZHJvcCB0aGUgcGFja2V0ICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssZmxhZ3MpOwogCXRyaWdnZXJfdHJhbnNtaXQoY2FyZCk7Ci0JCisKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJCWxlYXZlKCJ4aXJjb21fb3BlbiAtIE5vIElSUSIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQkKKwogCXhpcmNvbV91cCh4cCk7CiAJeHAtPm9wZW4gPSAxOwogCWxlYXZlKCJ4aXJjb21fb3BlbiIpOwpAQCAtNDczLDMxICs0NzMsMzEgQEAKIHsKIAlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKKwogCWVudGVyKCJ4aXJjb21fY2xvc2UiKTsKIAljYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7IC8qIHdlIGRvbid0IHdhbnQgbmV3IHBhY2tldHMgKi8KIAotCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssZmxhZ3MpOwotCQorCiAJZGlzYWJsZV9hbGxfaW50ZXJydXB0cyhjYXJkKTsKLSNpZiAwCQorI2lmIDAKIAkvKiBXZSBjYW4gZW5hYmxlIHRoaXMgYWdhaW4gb25jZSB3ZSBzZW5kIGR1bW15IHBhY2tldHMgb24gaWZjb25maWcgZXRoWCB1cCAqLwogCWRlYWN0aXZhdGVfcmVjZWl2ZXIoY2FyZCk7CiAJZGVhY3RpdmF0ZV90cmFuc21pdHRlcihjYXJkKTsKLSNlbmRpZgkKKyNlbmRpZgogCXJlbW92ZV9kZXNjcmlwdG9ycyhjYXJkKTsKLQkKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssZmxhZ3MpOwotCQorCiAJY2FyZC0+b3BlbiA9IDA7CiAJZnJlZV9pcnEoZGV2LT5pcnEsZGV2KTsKLQkKKwogCWxlYXZlKCJ4aXJjb21fY2xvc2UiKTsKLQkKKwogCXJldHVybiAwOwotCQorCiB9CiAKIApAQCAtNTA2LDggKzUwNiw4IEBACiB7CiAgICAgICAgIHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgICAgIHJldHVybiAmY2FyZC0+c3RhdHM7Ci19IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorfQorCiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgeGlyY29tX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTQwLDcgKzU0MCw3IEBACiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1IwKTsKIAogCi0JdmFsID0gMDsJCS8qIFZhbHVlIDB4MDAgaXMgYSBzYWZlIGFuZCBjb25zZXJ2YXRpdmUgdmFsdWUgCisJdmFsID0gMDsJCS8qIFZhbHVlIDB4MDAgaXMgYSBzYWZlIGFuZCBjb25zZXJ2YXRpdmUgdmFsdWUKIAkJCQkgICBmb3IgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1IwKTsKIApAQCAtNjE3LDIzICs2MTcsMjMgQEAKIAogCQkvKiBSeCBEZXNjcjI6IGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcgogCQkgICB3ZSBzdG9yZSB0aGUgYnVmZmVyIGF0IHRoZSAybmQgaGFsZiBvZiB0aGUgcGFnZSAqLwotCQorCiAJCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgY2FyZC0+cnhfZG1hX2hhbmRsZTsKIAkJY2FyZC0+cnhfYnVmZmVyW2kqNCArIDJdID0gY3B1X3RvX2xlMzIoYWRkcmVzcyArIGJ1ZmZlcm9mZnNldHNbaV0pOwogCQkvKiBSeCBEZXNjMzogYWRkcmVzcyBvZiAybmQgYnVmZmVyIC0+IDAgKi8KIAkJY2FyZC0+cnhfYnVmZmVyW2kqNCArIDNdID0gMDsKIAl9Ci0JCisKIAl3bWIoKTsKIAkvKiBXcml0ZSB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmcgYWRkcmVzcyB0byB0aGUgY2FyZCAqLwogCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgY2FyZC0+cnhfZG1hX2hhbmRsZTsKLQl2YWwgPSBjcHVfdG9fbGUzMihhZGRyZXNzKTsgCisJdmFsID0gY3B1X3RvX2xlMzIoYWRkcmVzcyk7CiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1IzKTsJLyogUmVjZWl2ZSBkZXNjciBsaXN0IGFkZHJlc3MgKi8KIAogCiAJLyogdHJhbnNtaXQgZGVzY3JpcHRvcnMgKi8KIAltZW1zZXQoY2FyZC0+dHhfYnVmZmVyLCAwLCAxMjgpOwkvKiBjbGVhciB0aGUgZGVzY3JpcHRvcnMgKi8KLQkKKwogCWZvciAoaT0wO2k8TlVNREVTQ1JJUFRPUlM7aSsrICkgewogCQkvKiBUeCBEZXNjcjA6IEVtcHR5LCB3ZSBvd24gaXQsIG5vIGVycm9ycyAtPiAweDAwMDAwMDAwICovCiAJCWNhcmQtPnR4X2J1ZmZlcltpKjQgKyAwXSA9IDB4MDAwMDAwMDA7CkBAIC02NDEsNyArNjQxLDcgQEAKIAkJY2FyZC0+dHhfYnVmZmVyW2kqNCArIDFdID0gMTUzNjsKIAkJaWYgKGk9PU5VTURFU0NSSVBUT1JTLTEpCiAJCQljYXJkLT50eF9idWZmZXJbaSo0ICsgMV0gfD0gKDEgPDwgMjUpOyAvKiBiaXQgMjUgaXMgImxhc3QgZGVzY3JpcHRvciIgKi8KLQkJCisKIAkJLyogVHggRGVzY3IyOiBhZGRyZXNzIG9mIHRoZSBidWZmZXIKIAkJICAgd2Ugc3RvcmUgdGhlIGJ1ZmZlciBhdCB0aGUgMm5kIGhhbGYgb2YgdGhlIHBhZ2UgKi8KIAkJYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSBjYXJkLT50eF9kbWFfaGFuZGxlOwpAQCAtNzQ4LDcgKzc0OCw3IEBACiBhY3RpdmF0ZV9yZWNlaXZlciBlbmFibGVzIHRoZSByZWNlaXZlciBvbiB0aGUgY2FyZC4KIEJlZm9yZSBiZWluZyBhbGxvd2VkIHRvIGFjdGl2ZSB0aGUgcmVjZWl2ZXIsIHRoZSByZWNlaXZlcgogbXVzdCBiZSBjb21wbGV0ZWx5IGRlLWFjdGl2YXRlZC4gVG8gYWNoaWV2ZSB0aGlzLAotdGhpcyBjb2RlIGFjdHVhbGx5IGRpc2FibGVzIHRoZSByZWNlaXZlciBmaXJzdDsgdGhlbiBpdCB3YWl0cyBmb3IgdGhlIAordGhpcyBjb2RlIGFjdHVhbGx5IGRpc2FibGVzIHRoZSByZWNlaXZlciBmaXJzdDsgdGhlbiBpdCB3YWl0cyBmb3IgdGhlCiByZWNlaXZlciB0byBiZWNvbWUgaW5hY3RpdmUsIHRoZW4gaXQgYWN0aXZhdGVzIHRoZSByZWNlaXZlciBhbmQgdGhlbgogaXQgd2FpdHMgZm9yIHRoZSByZWNlaXZlciB0byBiZSBhY3RpdmUuCiAKQEAgLTc2MiwxMyArNzYyLDEzIEBACiAKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CS8qIE9wZXJhdGlvbiBtb2RlICovCi0JCisKIAkvKiBJZiB0aGUgImFjdGl2ZSIgYml0IGlzIHNldCBhbmQgdGhlIHJlY2VpdmVyIGlzIGFscmVhZHkKIAkgICBhY3RpdmUsIG5vIG5lZWQgdG8gZG8gdGhlIGV4cGVuc2l2ZSB0aGluZyAqLwogCWlmICgodmFsJjIpICYmIChyZWNlaXZlX2FjdGl2ZShjYXJkKSkpCiAJCXJldHVybjsKLQkKLQkKKworCiAJdmFsID0gdmFsICYgfjI7CQkvKiBkaXNhYmxlIHRoZSByZWNlaXZlciAqLwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNik7CiAKQEAgLTgwNSw3ICs4MDUsNyBAQAogCiAvKgogZGVhY3RpdmF0ZV9yZWNlaXZlciBkaXNhYmxlcyB0aGUgcmVjZWl2ZXIgb24gdGhlIGNhcmQuCi1UbyBhY2hpZXZlIHRoaXMgdGhpcyBjb2RlIGRpc2FibGVzIHRoZSByZWNlaXZlciBmaXJzdDsgCitUbyBhY2hpZXZlIHRoaXMgdGhpcyBjb2RlIGRpc2FibGVzIHRoZSByZWNlaXZlciBmaXJzdDsKIHRoZW4gaXQgd2FpdHMgZm9yIHRoZSByZWNlaXZlciB0byBiZWNvbWUgaW5hY3RpdmUuCiAKIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KQEAgLTg0MCw3ICs4NDAsNyBAQAogYWN0aXZhdGVfdHJhbnNtaXR0ZXIgZW5hYmxlcyB0aGUgdHJhbnNtaXR0ZXIgb24gdGhlIGNhcmQuCiBCZWZvcmUgYmVpbmcgYWxsb3dlZCB0byBhY3RpdmUgdGhlIHRyYW5zbWl0dGVyLCB0aGUgdHJhbnNtaXR0ZXIKIG11c3QgYmUgY29tcGxldGVseSBkZS1hY3RpdmF0ZWQuIFRvIGFjaGlldmUgdGhpcywKLXRoaXMgY29kZSBhY3R1YWxseSBkaXNhYmxlcyB0aGUgdHJhbnNtaXR0ZXIgZmlyc3Q7IHRoZW4gaXQgd2FpdHMgZm9yIHRoZSAKK3RoaXMgY29kZSBhY3R1YWxseSBkaXNhYmxlcyB0aGUgdHJhbnNtaXR0ZXIgZmlyc3Q7IHRoZW4gaXQgd2FpdHMgZm9yIHRoZQogdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGluYWN0aXZlLCB0aGVuIGl0IGFjdGl2YXRlcyB0aGUgdHJhbnNtaXR0ZXIgYW5kIHRoZW4KIGl0IHdhaXRzIGZvciB0aGUgdHJhbnNtaXR0ZXIgdG8gYmUgYWN0aXZlIGFnYWluLgogCkBAIC04NTYsNyArODU2LDcgQEAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjYpOwkvKiBPcGVyYXRpb24gbW9kZSAqLwogCiAJLyogSWYgdGhlICJhY3RpdmUiIGJpdCBpcyBzZXQgYW5kIHRoZSByZWNlaXZlciBpcyBhbHJlYWR5Ci0JICAgYWN0aXZlLCBubyBuZWVkIHRvIGRvIHRoZSBleHBlbnNpdmUgdGhpbmcgKi8JIAorCSAgIGFjdGl2ZSwgbm8gbmVlZCB0byBkbyB0aGUgZXhwZW5zaXZlIHRoaW5nICovCiAJaWYgKCh2YWwmKDE8PDEzKSkgJiYgKHRyYW5zbWl0X2FjdGl2ZShjYXJkKSkpCiAJCXJldHVybjsKIApAQCAtODk2LDcgKzg5Niw3IEBACiAKIC8qCiBkZWFjdGl2YXRlX3RyYW5zbWl0dGVyIGRpc2FibGVzIHRoZSB0cmFuc21pdHRlciBvbiB0aGUgY2FyZC4KLVRvIGFjaGlldmUgdGhpcyB0aGlzIGNvZGUgZGlzYWJsZXMgdGhlIHRyYW5zbWl0dGVyIGZpcnN0OyAKK1RvIGFjaGlldmUgdGhpcyB0aGlzIGNvZGUgZGlzYWJsZXMgdGhlIHRyYW5zbWl0dGVyIGZpcnN0OwogdGhlbiBpdCB3YWl0cyBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBpbmFjdGl2ZS4KIAogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgpAQCAtOTkwLDcgKzk5MCw3IEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAllbnRlcigiZW5hYmxlX2FsbF9pbnRlcnJ1cHRzIik7Ci0JCisKIAl2YWwgPSAwOwkJCQkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I3KTsKIApAQCAtMTAzMSw4ICsxMDMxLDggQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWVudGVyKCJlbmFibGVfcHJvbWlzYyIpOwogCi0JdmFsID0gaW5sKGNhcmQtPmlvX3BvcnQgKyBDU1I2KTsJCi0JdmFsID0gdmFsIHwgKDEgPDwgNik7CQorCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CisJdmFsID0gdmFsIHwgKDEgPDwgNik7CiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I2KTsKIAogCWxlYXZlKCJlbmFibGVfcHJvbWlzYyIpOwpAQCAtMTA0Miw3ICsxMDQyLDcgQEAKIAogCiAKLS8qIAorLyoKIGxpbmtfc3RhdHVzKCkgY2hlY2tzIHRoZSB0aGUgbGlua3Mgc3RhdHVzIGFuZCB3aWxsIHJldHVybiAwIGZvciBubyBsaW5rLCAxMCBmb3IgMTBtYml0IGxpbmsgYW5kIDEwMCBmb3IuLiBndWVzcyB3aGF0LgogCiBNdXN0IGJlIGNhbGxlZCBpbiBsb2NrZWQgc3RhdGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCkBAIC0xMDUxLDE1ICsxMDUxLDE1IEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAllbnRlcigibGlua19zdGF0dXMiKTsKLQkKKwogCXZhbCA9IGluYihjYXJkLT5pb19wb3J0ICsgQ1NSMTIpOwotCQorCiAJaWYgKCEodmFsJigxPDwyKSkpICAvKiBiaXQgMiBpcyAwIGZvciAxMG1iaXQgbGluaywgMSBmb3Igbm90IGFuIDEwbWJpdCBsaW5rICovCiAJCXJldHVybiAxMDsKIAlpZiAoISh2YWwmKDE8PDEpKSkgIC8qIGJpdCAxIGlzIDAgZm9yIDEwMG1iaXQgbGluaywgMSBmb3Igbm90IGFuIDEwMG1iaXQgbGluayAqLwogCQlyZXR1cm4gMTAwOwotCQkKLQkvKiBJZiB3ZSBnZXQgaGVyZSAtPiBubyBsaW5rIGF0IGFsbCAqLwkKKworCS8qIElmIHdlIGdldCBoZXJlIC0+IG5vIGxpbmsgYXQgYWxsICovCiAKIAlsZWF2ZSgibGlua19zdGF0dXMiKTsKIAlyZXR1cm4gMDsKQEAgLTEwNzEsNyArMTA3MSw3IEBACiAKIC8qCiAgIHJlYWRfbWFjX2FkZHJlc3MoKSByZWFkcyB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgTklDIGFuZCBzdG9yZXMgaXQgaW4gdGhlICJkZXYiIHN0cnVjdHVyZS4KLSAKKwogICBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUgc3BpbmxvY2sgaXRzZWxmIGFuZCBjYW4sIGFzIGEgcmVzdWx0LCBub3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsdC4KICAqLwogc3RhdGljIHZvaWQgcmVhZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpCkBAIC0xMDgxLDcgKzEwODEsNyBAQAogCWludCBpOwogCiAJZW50ZXIoInJlYWRfbWFjX2FkZHJlc3MiKTsKLQkJCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJb3V0bCgxIDw8IDEyLCBjYXJkLT5pb19wb3J0ICsgQ1NSOSk7CS8qIGVuYWJsZSBib290IHJvbSBhY2Nlc3MgKi8KQEAgLTEwOTUsNyArMTA5NSw3IEBACiAJCW91dGwoaSArIDMsIGNhcmQtPmlvX3BvcnQgKyBDU1IxMCk7CiAJCWRhdGFfY291bnQgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjkpICYgMHhmZjsKIAkJaWYgKCh0dXBsZSA9PSAweDIyKSAmJiAoZGF0YV9pZCA9PSAweDA0KSAmJiAoZGF0YV9jb3VudCA9PSAweDA2KSkgewotCQkJLyogCisJCQkvKgogCQkJICogVGhpcyBpcyBpdC4gIFdlIGhhdmUgdGhlIGRhdGEgd2Ugd2FudC4KIAkJCSAqLwogCQkJZm9yIChqID0gMDsgaiA8IDY7IGorKykgewpAQCAtMTEzNiwxMiArMTEzNiwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKIAlvdXRsKDB4MDAwOCwgY2FyZC0+aW9fcG9ydCArIENTUjE1KTsKLSAgICAgICAgdWRlbGF5KDI1KTsgIAorICAgICAgICB1ZGVsYXkoMjUpOwogICAgICAgICBvdXRsKDB4YTgwNTAwMDAsIGNhcmQtPmlvX3BvcnQgKyBDU1IxNSk7CiAgICAgICAgIHVkZWxheSgyNSk7CiAgICAgICAgIG91dGwoMHhhMDBmMDAwMCwgY2FyZC0+aW9fcG9ydCArIENTUjE1KTsKICAgICAgICAgdWRlbGF5KDI1KTsKLSAgICAgICAgCisKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUoY2FyZC0+ZGV2KTsKQEAgLTExNjMsMTUgKzExNjMsMTUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKLQkKKwogCWVuYWJsZV9saW5rX2ludGVycnVwdChjYXJkKTsKIAllbmFibGVfdHJhbnNtaXRfaW50ZXJydXB0KGNhcmQpOwogCWVuYWJsZV9yZWNlaXZlX2ludGVycnVwdChjYXJkKTsKIAllbmFibGVfY29tbW9uX2ludGVycnVwdHMoY2FyZCk7CiAJZW5hYmxlX3Byb21pc2MoY2FyZCk7Ci0JCisKIAkvKiBUaGUgY2FyZCBjYW4gaGF2ZSByZWNlaXZlZCBwYWNrZXRzIGFscmVhZHksIHJlYWQgdGhlbSBhd2F5IG5vdyAqLwotCWZvciAoaT0wO2k8TlVNREVTQ1JJUFRPUlM7aSsrKSAKKwlmb3IgKGk9MDtpPE5VTURFU0NSSVBUT1JTO2krKykKIAkJaW52ZXN0aWdhdGVfcmVhZF9kZXNjcmlwdG9yKGNhcmQtPmRldixjYXJkLGksYnVmZmVyb2Zmc2V0c1tpXSk7CiAKIApAQCAtMTE4NSwxNSArMTE4NSwxNSBAQAogLyogQnVmZmVyb2Zmc2V0IGlzIGluIEJZVEVTICovCiBzdGF0aWMgdm9pZCBpbnZlc3RpZ2F0ZV9yZWFkX2Rlc2NyaXB0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQsIGludCBkZXNjbnIsIHVuc2lnbmVkIGludCBidWZmZXJvZmZzZXQpCiB7Ci0JCWludCBzdGF0dXM7CQkKLQkJCisJCWludCBzdGF0dXM7CisKIAkJZW50ZXIoImludmVzdGlnYXRlX3JlYWRfZGVzY3JpcHRvciIpOwogCQlzdGF0dXMgPSBjYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdOwotCQkKKwogCQlpZiAoKHN0YXR1cyA+IDApKSB7CS8qIHBhY2tldCByZWNlaXZlZCAqLwotCQkKKwogCQkJLyogVE9ETzogZGlzY2FyZCBlcnJvciBwYWNrZXRzICovCi0JCQkKKwogCQkJc2hvcnQgcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CS8qIG1pbnVzIDQsIHdlIGRvbid0IHdhbnQgdGhlIENSQyAqLwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTIxNiw3ICsxMjE2LDcgQEAKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQljYXJkLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQljYXJkLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwotCQkJCisKIAkJICAgICAgb3V0OgogCQkJLyogZ2l2ZSB0aGUgYnVmZmVyIGJhY2sgdG8gdGhlIGNhcmQgKi8KIAkJCWNhcmQtPnJ4X2J1ZmZlcls0KmRlc2Nucl0gPSAgMHg4MDAwMDAwMDsKQEAgLTEyMzQsOSArMTIzNCw5IEBACiAJCWludCBzdGF0dXM7CiAKIAkJZW50ZXIoImludmVzdGlnYXRlX3dyaXRlX2Rlc2NyaXB0b3IiKTsKLQkJCisKIAkJc3RhdHVzID0gY2FyZC0+dHhfYnVmZmVyWzQqZGVzY25yXTsKLSNpZiAwCQkKKyNpZiAwCiAJCWlmIChzdGF0dXMgJiAweDgwMDApIHsJLyogTWFqb3IgZXJyb3IgKi8KIAkJCXByaW50ayhLRVJOX0VSUiAiTWFqb3IgdHJhbnNtaXQgZXJyb3Igc3RhdHVzICV4IFxuIiwgc3RhdHVzKTsKIAkJCWNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0gPSAwOwpAQCAtMTI1OCw3ICsxMjU4LDcgQEAKIAkJfQogCiAJCWxlYXZlKCJpbnZlc3RpZ2F0ZV93cml0ZV9kZXNjcmlwdG9yIik7Ci0JCQorCiB9CiAKIApAQCAtMTI3MSw4ICsxMjcxLDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB4aXJjb21fZXhpdCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmeGlyY29tX29wcyk7Ci19IAorfQogCi1tb2R1bGVfaW5pdCh4aXJjb21faW5pdCkgCittb2R1bGVfaW5pdCh4aXJjb21faW5pdCkKIG1vZHVsZV9leGl0KHhpcmNvbV9leGl0KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGVkMWY4MzcuLjJlYjZiNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC0xODk5LDYgKzE4OTksMTMgQEAKIAogCWludCBwa3RsZW4gPSBza2ItPmxlbjsKIAorI2lmZGVmIFZFTE9DSVRZX1pFUk9fQ09QWV9TVVBQT1JUCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPiA2ICYmIF9fc2tiX2xpbmVhcml6ZShza2IpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CiAKIAlpbmRleCA9IHZwdHItPnRkX2N1cnJbcW51bV07CkBAIC0xOTE0LDggKzE5MjEsNiBAQAogCSAqLwogCWlmIChwa3RsZW4gPCBFVEhfWkxFTikgewogCQkvKiBDYW5ub3Qgb2NjdXIgdW50aWwgWkMgc3VwcG9ydCAqLwotCQlpZihza2JfbGluZWFyaXplKHNrYiwgR0ZQX0FUT01JQykpCi0JCQlyZXR1cm4gMDsgCiAJCXBrdGxlbiA9IEVUSF9aTEVOOwogCQltZW1jcHkodGRpbmZvLT5idWYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQltZW1zZXQodGRpbmZvLT5idWYgKyBza2ItPmxlbiwgMCwgRVRIX1pMRU4gLSBza2ItPmxlbik7CkBAIC0xOTMzLDcgKzE5MzgsNiBAQAogCQlpbnQgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAkJdGRpbmZvLT5za2IgPSBza2I7CiAJCWlmIChuZnJhZ3MgPiA2KSB7Ci0JCQlza2JfbGluZWFyaXplKHNrYiwgR0ZQX0FUT01JQyk7CiAJCQltZW1jcHkodGRpbmZvLT5idWYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQkJdGRpbmZvLT5za2JfZG1hWzBdID0gdGRpbmZvLT5idWZfZG1hOwogCQkJdGRfcHRyLT50ZGVzYzAucGt0c2l6ZSA9IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmggYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaAppbmRleCBkOWE3NzRiLi5mMWIyNjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaAorKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaApAQCAtMzA3LDcgKzMwNyw3IEBACiAjZGVmaW5lIFRYX1FVRVVFX05PICAgICAgICAgNAogCiAjZGVmaW5lIE1BWF9IV19NSUJfQ09VTlRFUiAgMzIKLSNkZWZpbmUgVkVMT0NJVFlfTUlOX01UVSAgICAoMTUxNC0xNCkKKyNkZWZpbmUgVkVMT0NJVFlfTUlOX01UVSAgICAoNjQpCiAjZGVmaW5lIFZFTE9DSVRZX01BWF9NVFUgICAgKDkwMDApCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggZWJhOGU1Yy4uZjQ4NWE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtNTAsMTAgKzUwLDYgQEAKIHN0YXRpYyBpbnQgcGNpX2Nsb2NrX2ZyZXEgPSAzMzAwMDAwMDsKICNkZWZpbmUgQ0xPQ0tfQkFTRSBwY2lfY2xvY2tfZnJlcQogCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfR09SQU1PCTB4MTBCNQkvKiB1c2VzIFBMWDo5MDUwIElEIC0gdGhpcyBjYXJkCSovCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENJMjAwU1lOCTB4OTA1MAkvKiBkb2Vzbid0IGhhdmUgaXRzIG93biBJRAkqLwotCi0KIC8qCiAgKiAgICAgIFBMWCBQQ0k5MDUyIGxvY2FsIGNvbmZpZ3VyYXRpb24gYW5kIHNoYXJlZCBydW50aW1lIHJlZ2lzdGVycy4KICAqICAgICAgVGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIDkwNTIgcmVnaXN0ZXJzIChtZW1vcnkgbWFwcGVkKS4KQEAgLTI2Miw3ICsyNTgsNyBAQAogCWludCBpOwogCWNhcmRfdCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWZvcihpID0gMDsgaSA8IDI7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogCQlpZiAoY2FyZC0+cG9ydHNbaV0uY2FyZCkgewogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnRfdG9fZGV2KCZjYXJkLT5wb3J0c1tpXSk7CiAJCQl1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7CkBAIC0zODUsNiArMzgxLDE1IEBACiAJICAgICAgICIgJXUgUlggcGFja2V0cyByaW5nc1xuIiwgcmFtc2l6ZSAvIDEwMjQsIHJhbXBoeXMsCiAJICAgICAgIHBkZXYtPmlycSwgY2FyZC0+dHhfcmluZ19idWZmZXJzLCBjYXJkLT5yeF9yaW5nX2J1ZmZlcnMpOwogCisJaWYgKHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QTFhfOTA1MCkgeworCQlwcmludGsoS0VSTl9FUlIgIkRldGVjdGVkIFBDSTIwMFNZTiBjYXJkIHdpdGggb2xkICIKKwkJICAgICAgICJjb25maWd1cmF0aW9uIGRhdGEuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTZWUgPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvIgorCQkgICAgICAgImxpbnV4L3V0aWxzL25ldC9oZGxjL3BjaTIwMHN5bi8+IGZvciB1cGRhdGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJUaGUgY2FyZCB3aWxsIHN0b3Agd29ya2luZyB3aXRoIgorCQkgICAgICAgIiBmdXR1cmUgdmVyc2lvbnMgb2YgTGludXggaWYgbm90IHVwZGF0ZWQuXG4iKTsKKwl9CisKIAlpZiAoY2FyZC0+dHhfcmluZ19idWZmZXJzIDwgMSkgewogCQlwcmludGsoS0VSTl9FUlIgInBjaTIwMHN5bjogUkFNIHRlc3QgZmFpbGVkXG4iKTsKIAkJcGNpMjAwX3BjaV9yZW1vdmVfb25lKHBkZXYpOwpAQCAtMzk2LDcgKzQwMSw3IEBACiAJd3JpdGV3KHJlYWR3KHApIHwgMHgwMDQwLCBwKTsKIAogCS8qIEFsbG9jYXRlIElSUSAqLwotCWlmKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc2NhX2ludHIsIFNBX1NISVJRLCBkZXZuYW1lLCBjYXJkKSkgeworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNjYV9pbnRyLCBTQV9TSElSUSwgZGV2bmFtZSwgY2FyZCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNpMjAwc3luOiBjb3VsZCBub3QgYWxsb2NhdGUgSVJRJWQuXG4iLAogCQkgICAgICAgcGRldi0+aXJxKTsKIAkJcGNpMjAwX3BjaV9yZW1vdmVfb25lKHBkZXYpOwpAQCAtNDA2LDcgKzQxMSw3IEBACiAKIAlzY2FfaW5pdChjYXJkLCAwKTsKIAotCWZvcihpID0gMDsgaSA8IDI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJcG9ydF90ICpwb3J0ID0gJmNhcmQtPnBvcnRzW2ldOwogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydF90b19kZXYocG9ydCk7CiAJCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKQEAgLTQyNSw3ICs0MzAsNyBAQAogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CiAJCXBvcnQtPmNhcmQgPSBjYXJkOwotCQlpZihyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7CisJCWlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInBjaTIwMHN5bjogdW5hYmxlIHRvIHJlZ2lzdGVyIGhkbGMgIgogCQkJICAgICAgICJkZXZpY2VcbiIpOwogCQkJcG9ydC0+Y2FyZCA9IE5VTEw7CkBAIC00NDUsOCArNDUwLDEwIEBACiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaTIwMF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfR09SQU1PLCBQQ0lfREVWSUNFX0lEX1BDSTIwMFNZTiwgUENJX0FOWV9JRCwKLQkgIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLCBQQ0lfVkVORE9SX0lEX1BMWCwKKwkgIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsIDAsIDAsIDAgfSwKKwl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLCBQQ0lfVkVORE9SX0lEX1BMWCwKKwkgIFBDSV9ERVZJQ0VfSURfUExYX1BDSTIwMFNZTiwgMCwgMCwgMCB9LAogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggZTA4NzRjYi4uMzBlYzIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0yMzUsNyArMjM1LDM1IEBACiAJICBwcm9taXNjdW91cyBtb2RlIHZpYSB0aGUgV2lyZWxlc3MgVG9vbCdzIE1vbml0b3IgbW9kZS4gIFdoaWxlIGluIHRoaXMKIAkgIG1vZGUsIG5vIHBhY2tldHMgY2FuIGJlIHNlbnQuCiAKLWNvbmZpZyBJUFdfUU9TCitjb25maWcgSVBXMjIwMF9SQURJT1RBUAorCWJvb2wgIkVuYWJsZSByYWRpb3RhcCBmb3JtYXQgODAyLjExIHJhdyBwYWNrZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElQVzIyMDBfTU9OSVRPUgorCitjb25maWcgSVBXMjIwMF9QUk9NSVNDVU9VUworCWJvb2wgIkVuYWJsZSBjcmVhdGlvbiBvZiBhIFJGIHJhZGlvdGFwIHByb21pc2N1b3VzIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIElQVzIyMDBfTU9OSVRPUgorCXNlbGVjdCBJUFcyMjAwX1JBRElPVEFQCisJLS0taGVscC0tLQorICAgICAgICAgIEVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGEgc2Vjb25kIGludGVyZmFjZSBwcmVmaXhlZCAncnRhcCcuIAorICAgICAgICAgIFRoaXMgc2Vjb25kIGludGVyZmFjZSB3aWxsIHByb3ZpZGUgZXZlcnkgcmVjZWl2ZWQgaW4gcmFkaW90YXAKKwkgIGZvcm1hdC4KKworICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGZvciBwZXJmb3JtaW5nIHdpcmVsZXNzIG5ldHdvcmsgYW5hbHlzaXMgd2hpbGUKKyAgICAgICAgICBtYWludGFpbmluZyBhbiBhY3RpdmUgYXNzb2NpYXRpb24uCisKKyAgICAgICAgICBFeGFtcGxlIHVzYWdlOgorCisgICAgICAgICAgICAlIG1vZHByb2JlIGlwdzIyMDAgcnRhcF9pZmFjZT0xCisgICAgICAgICAgICAlIGlmY29uZmlnIHJ0YXAwIHVwCisgICAgICAgICAgICAlIHRldGhlcmVhbCAtaSBydGFwMAorCisgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5ICdydGFwX2lmYWNlPTEnIGFzIGEgbW9kdWxlIHBhcmFtZXRlciB0aGVuIAorICAgICAgICAgIHRoZSBydGFwIGludGVyZmFjZSB3aWxsIG5vdCBiZSBjcmVhdGVkIGFuZCB5b3Ugd2lsbCBuZWVkIHRvIHR1cm4gCisgICAgICAgICAgaXQgb24gdmlhIHN5c2ZzOgorCQorICAgICAgICAgICAgJSBlY2hvIDEgPiAvc3lzL2J1cy9wY2kvZHJpdmVycy9pcHcyMjAwLyovcnRhcF9pZmFjZQorCitjb25maWcgSVBXMjIwMF9RT1MKICAgICAgICAgYm9vbCAiRW5hYmxlIFFvUyBzdXBwb3J0IgogICAgICAgICBkZXBlbmRzIG9uIElQVzIyMDAgJiYgRVhQRVJJTUVOVEFMCiAKQEAgLTUwMyw2ICs1MzEsMjMgQEAKIAkgIHNheSBNIGhlcmUgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4uICBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBwcmlzbTU0LmtvLgogCitjb25maWcgVVNCX1pEMTIwMQorCXRyaXN0YXRlICJVU0IgWkQxMjAxIGJhc2VkIFdpcmVsZXNzIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIE5FVF9SQURJTworCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugd2lyZWxlc3MgTEFOIGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBaeURBUworCSAgWkQxMjAxIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsCisJICB0eXBpY2FsbHkgb24gd2xhbjAuCisKKwkgIFRoZSB6ZDEyMDEgZGV2aWNlIHJlcXVpcmVzIGV4dGVybmFsIGZpcm13YXJlIHRvIGJlIGxvYWRlZC4KKwkgIFRoaXMgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly9saW51eC1sYzEwMDAyMC5zb3VyY2Vmb3JnZS5uZXQvCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHpkMTIwMS4KKwogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGM4Njc3OTguLjUxMjYwM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC00MCwzICs0MCw1IEBACiAjIDE2LWJpdCB3aXJlbGVzcyBQQ01DSUEgY2xpZW50IGRyaXZlcnMKIG9iai0kKENPTkZJR19QQ01DSUFfUkFZQ1MpCSs9IHJheV9jcy5vCiBvYmotJChDT05GSUdfUENNQ0lBX1dMMzUwMSkJKz0gd2wzNTAxX2NzLm8KKworb2JqLSQoQ09ORklHX1VTQl9aRDEyMDEpCSs9IHpkMTIwMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggMDA3NjRkZC4uNDA2OWI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogCiAjaW5jbHVkZSAiYWlyby5oIgogCkBAIC00NjcsNiArNDY4LDggQEAKICNkZWZpbmUgUklEX0VDSE9URVNUX1JFU1VMVFMgMHhGRjcxCiAjZGVmaW5lIFJJRF9CU1NMSVNURklSU1QgMHhGRjcyCiAjZGVmaW5lIFJJRF9CU1NMSVNUTkVYVCAgMHhGRjczCisjZGVmaW5lIFJJRF9XUEFfQlNTTElTVEZJUlNUIDB4RkY3NAorI2RlZmluZSBSSURfV1BBX0JTU0xJU1RORVhUICAweEZGNzUKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXUxNiBjbWQ7CkBAIC03MzksNiArNzQyLDE0IEBACiAJdTE2IGV4dFNvZnRDYXA7CiB9IENhcGFiaWxpdHlSaWQ7CiAKKworLyogT25seSBwcmVzZW50IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgdTE2IHVua25vd25bNF07CisgIHU4IGZpeGVkWzEyXTsgLyogV0xBTiBtYW5hZ2VtZW50IGZyYW1lICovCisgIHU4IGllcFs2MjRdOworfSBCU1NMaXN0UmlkRXh0cmE7CisKIHR5cGVkZWYgc3RydWN0IHsKICAgdTE2IGxlbjsKICAgdTE2IGluZGV4OyAvKiBGaXJzdCBpcyAwIGFuZCAweGZmZmYgbWVhbnMgZW5kIG9mIGxpc3QgKi8KQEAgLTc2Nyw2ICs3NzgsOSBAQAogICB9IGZoOwogICB1MTYgZHNDaGFubmVsOwogICB1MTYgYXRpbVdpbmRvdzsKKworICAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLworICBCU1NMaXN0UmlkRXh0cmEgZXh0cmE7CiB9IEJTU0xpc3RSaWQ7CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTExNDAsOCArMTE1NCw2IEBACiAJY2hhciBkZWZpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OwogICAgICAgICBzcGlubG9ja190IGF1eF9sb2NrOwotICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotI2RlZmluZSBGTEFHX1BST01JU0MJOAkvKiBJRkZfUFJPTUlTQyAweDEwMCAtIGluY2x1ZGUvbGludXgvaWYuaCAqLwogI2RlZmluZSBGTEFHX1JBRElPX09GRgkwCS8qIFVzZXIgZGlzYWJsaW5nIG9mIE1BQyAqLwogI2RlZmluZSBGTEFHX1JBRElPX0RPV04JMQkvKiBpZnVwL2lmZG93biBkaXNhYmxpbmcgb2YgTUFDICovCiAjZGVmaW5lIEZMQUdfUkFESU9fTUFTSyAweDAzCkBAIC0xMTUxLDYgKzExNjMsNyBAQAogI2RlZmluZSBGTEFHX1VQREFURV9NVUxUSSA1CiAjZGVmaW5lIEZMQUdfVVBEQVRFX1VOSSA2CiAjZGVmaW5lIEZMQUdfODAyXzExCTcKKyNkZWZpbmUgRkxBR19QUk9NSVNDCTgJLyogSUZGX1BST01JU0MgMHgxMDAgLSBpbmNsdWRlL2xpbnV4L2lmLmggKi8KICNkZWZpbmUgRkxBR19QRU5ESU5HX1hNSVQgOQogI2RlZmluZSBGTEFHX1BFTkRJTkdfWE1JVDExIDEwCiAjZGVmaW5lIEZMQUdfTVBJCTExCkBAIC0xMTU4LDE3ICsxMTcxLDE5IEBACiAjZGVmaW5lIEZMQUdfQ09NTUlUCTEzCiAjZGVmaW5lIEZMQUdfUkVTRVQJMTQKICNkZWZpbmUgRkxBR19GTEFTSElORwkxNQotI2RlZmluZSBKT0JfTUFTSwkweDJmZjAwMDAKLSNkZWZpbmUgSk9CX0RJRQkJMTYKLSNkZWZpbmUgSk9CX1hNSVQJMTcKLSNkZWZpbmUgSk9CX1hNSVQxMQkxOAotI2RlZmluZSBKT0JfU1RBVFMJMTkKLSNkZWZpbmUgSk9CX1BST01JU0MJMjAKLSNkZWZpbmUgSk9CX01JQwkJMjEKLSNkZWZpbmUgSk9CX0VWRU5UCTIyCi0jZGVmaW5lIEpPQl9BVVRPV0VQCTIzCi0jZGVmaW5lIEpPQl9XU1RBVFMJMjQKLSNkZWZpbmUgSk9CX1NDQU5fUkVTVUxUUyAgMjUKKyNkZWZpbmUgRkxBR19XUEFfQ0FQQUJMRQkxNgorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZGVmaW5lIEpPQl9ESUUJMAorI2RlZmluZSBKT0JfWE1JVAkxCisjZGVmaW5lIEpPQl9YTUlUMTEJMgorI2RlZmluZSBKT0JfU1RBVFMJMworI2RlZmluZSBKT0JfUFJPTUlTQwk0CisjZGVmaW5lIEpPQl9NSUMJNQorI2RlZmluZSBKT0JfRVZFTlQJNgorI2RlZmluZSBKT0JfQVVUT1dFUAk3CisjZGVmaW5lIEpPQl9XU1RBVFMJOAorI2RlZmluZSBKT0JfU0NBTl9SRVNVTFRTICA5CisJdW5zaWduZWQgbG9uZyBqb2JzOwogCWludCAoKmJhcF9yZWFkKShzdHJ1Y3QgYWlyb19pbmZvKiwgdTE2ICpwdTE2RHN0LCBpbnQgYnl0ZWxlbiwKIAkJCWludCB3aGljaGJhcCk7CiAJdW5zaWduZWQgc2hvcnQgKmZsYXNoOwpAQCAtMTIwOCw2ICsxMjIzLDExIEBACiAjZGVmaW5lCVBDSV9TSEFSRURfTEVOCQkyKk1QSV9NQVhfRklEUypQS1RTSVpFK1JJRFNJWkUKIAljaGFyCQkJcHJvY19uYW1lW0lGTkFNU0laXTsKIAorCS8qIFdQQS1yZWxhdGVkIHN0dWZmICovCisJdW5zaWduZWQgaW50IGJzc0xpc3RGaXJzdDsKKwl1bnNpZ25lZCBpbnQgYnNzTGlzdE5leHQ7CisJdW5zaWduZWQgaW50IGJzc0xpc3RSaWRMZW47CisKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfZnJlZV9saXN0OwogCUJTU0xpc3RFbGVtZW50ICpuZXR3b3JrczsKQEAgLTEyNjQsNyArMTI4NCw3IEBACiB7CiAJTUlDUmlkIG1pY19yaWQ7CiAKLQljbGVhcl9iaXQoSk9CX01JQywgJmFpLT5mbGFncyk7CisJY2xlYXJfYml0KEpPQl9NSUMsICZhaS0+am9icyk7CiAJUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9NSUMsICZtaWNfcmlkLCBzaXplb2YobWljX3JpZCksIDApOwogCXVwKCZhaS0+c2VtKTsKIApAQCAtMTcwNSwyNCArMTcyNSwyNCBAQAogc3RhdGljIGludCByZWFkQlNTTGlzdFJpZChzdHJ1Y3QgYWlyb19pbmZvICphaSwgaW50IGZpcnN0LAogCQkgICAgICBCU1NMaXN0UmlkICpsaXN0KSB7CiAJaW50IHJjOwotCQkJQ21kIGNtZDsKLQkJCVJlc3AgcnNwOworCUNtZCBjbWQ7CisJUmVzcCByc3A7CiAKIAlpZiAoZmlyc3QgPT0gMSkgewotCQkJaWYgKGFpLT5mbGFncyAmIEZMQUdfUkFESU9fTUFTSykgcmV0dXJuIC1FTkVURE9XTjsKLQkJCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0JCQljbWQuY21kPUNNRF9MSVNUQlNTOwotCQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYWktPnNlbSkpCi0JCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJCWlzc3VlY29tbWFuZChhaSwgJmNtZCwgJnJzcCk7Ci0JCQl1cCgmYWktPnNlbSk7Ci0JCQkvKiBMZXQgdGhlIGNvbW1hbmQgdGFrZSBlZmZlY3QgKi8KLQkJCWFpLT50YXNrID0gY3VycmVudDsKLQkJCXNzbGVlcCgzKTsKLQkJCWFpLT50YXNrID0gTlVMTDsKLQkJfQotCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIGZpcnN0ID8gUklEX0JTU0xJU1RGSVJTVCA6IFJJRF9CU1NMSVNUTkVYVCwKLQkJCSAgICBsaXN0LCBzaXplb2YoKmxpc3QpLCAxKTsKKwkJaWYgKGFpLT5mbGFncyAmIEZMQUdfUkFESU9fTUFTSykgcmV0dXJuIC1FTkVURE9XTjsKKwkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwkJY21kLmNtZD1DTURfTElTVEJTUzsKKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYWktPnNlbSkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQlpc3N1ZWNvbW1hbmQoYWksICZjbWQsICZyc3ApOworCQl1cCgmYWktPnNlbSk7CisJCS8qIExldCB0aGUgY29tbWFuZCB0YWtlIGVmZmVjdCAqLworCQlhaS0+dGFzayA9IGN1cnJlbnQ7CisJCXNzbGVlcCgzKTsKKwkJYWktPnRhc2sgPSBOVUxMOworCX0KKwlyYyA9IFBDNDUwMF9yZWFkcmlkKGFpLCBmaXJzdCA/IGFpLT5ic3NMaXN0Rmlyc3QgOiBhaS0+YnNzTGlzdE5leHQsCisJCQkgICAgbGlzdCwgYWktPmJzc0xpc3RSaWRMZW4sIDEpOwogCiAJbGlzdC0+bGVuID0gbGUxNl90b19jcHUobGlzdC0+bGVuKTsKIAlsaXN0LT5pbmRleCA9IGxlMTZfdG9fY3B1KGxpc3QtPmluZGV4KTsKQEAgLTIxMTIsNyArMjEzMiw3IEBACiAJaW50IGZpZCA9IHByaXYtPnhtaXQuZmlkOwogCXUzMiAqZmlkcyA9IHByaXYtPmZpZHM7CiAKLQljbGVhcl9iaXQoSk9CX1hNSVQsICZwcml2LT5mbGFncyk7CisJY2xlYXJfYml0KEpPQl9YTUlULCAmcHJpdi0+am9icyk7CiAJY2xlYXJfYml0KEZMQUdfUEVORElOR19YTUlULCAmcHJpdi0+ZmxhZ3MpOwogCXN0YXR1cyA9IHRyYW5zbWl0XzgwMl8zX3BhY2tldCAocHJpdiwgZmlkc1tmaWRdLCBza2ItPmRhdGEpOwogCXVwKCZwcml2LT5zZW0pOwpAQCAtMjE2Miw3ICsyMTgyLDcgQEAKIAlpZiAoZG93bl90cnlsb2NrKCZwcml2LT5zZW0pICE9IDApIHsKIAkJc2V0X2JpdChGTEFHX1BFTkRJTkdfWE1JVCwgJnByaXYtPmZsYWdzKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlzZXRfYml0KEpPQl9YTUlULCAmcHJpdi0+ZmxhZ3MpOworCQlzZXRfYml0KEpPQl9YTUlULCAmcHJpdi0+am9icyk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+dGhyX3dhaXQpOwogCX0gZWxzZQogCQlhaXJvX2VuZF94bWl0KGRldik7CkBAIC0yMTc3LDcgKzIxOTcsNyBAQAogCWludCBmaWQgPSBwcml2LT54bWl0MTEuZmlkOwogCXUzMiAqZmlkcyA9IHByaXYtPmZpZHM7CiAKLQljbGVhcl9iaXQoSk9CX1hNSVQxMSwgJnByaXYtPmZsYWdzKTsKKwljbGVhcl9iaXQoSk9CX1hNSVQxMSwgJnByaXYtPmpvYnMpOwogCWNsZWFyX2JpdChGTEFHX1BFTkRJTkdfWE1JVDExLCAmcHJpdi0+ZmxhZ3MpOwogCXN0YXR1cyA9IHRyYW5zbWl0XzgwMl8xMV9wYWNrZXQgKHByaXYsIGZpZHNbZmlkXSwgc2tiLT5kYXRhKTsKIAl1cCgmcHJpdi0+c2VtKTsKQEAgLTIyMzMsNyArMjI1Myw3IEBACiAJaWYgKGRvd25fdHJ5bG9jaygmcHJpdi0+c2VtKSAhPSAwKSB7CiAJCXNldF9iaXQoRkxBR19QRU5ESU5HX1hNSVQxMSwgJnByaXYtPmZsYWdzKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlzZXRfYml0KEpPQl9YTUlUMTEsICZwcml2LT5mbGFncyk7CisJCXNldF9iaXQoSk9CX1hNSVQxMSwgJnByaXYtPmpvYnMpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPnRocl93YWl0KTsKIAl9IGVsc2UKIAkJYWlyb19lbmRfeG1pdDExKGRldik7CkBAIC0yMjQ0LDcgKzIyNjQsNyBAQAogCVN0YXRzUmlkIHN0YXRzX3JpZDsKIAl1MzIgKnZhbHMgPSBzdGF0c19yaWQudmFsczsKIAotCWNsZWFyX2JpdChKT0JfU1RBVFMsICZhaS0+ZmxhZ3MpOworCWNsZWFyX2JpdChKT0JfU1RBVFMsICZhaS0+am9icyk7CiAJaWYgKGFpLT5wb3dlci5ldmVudCkgewogCQl1cCgmYWktPnNlbSk7CiAJCXJldHVybjsKQEAgLTIyNzIsMTAgKzIyOTIsMTAgQEAKIHsKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9ICBkZXYtPnByaXY7CiAKLQlpZiAoIXRlc3RfYml0KEpPQl9TVEFUUywgJmxvY2FsLT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KEpPQl9TVEFUUywgJmxvY2FsLT5qb2JzKSkgewogCQkvKiBHZXQgc3RhdHMgb3V0IG9mIHRoZSBjYXJkIGlmIGF2YWlsYWJsZSAqLwogCQlpZiAoZG93bl90cnlsb2NrKCZsb2NhbC0+c2VtKSAhPSAwKSB7Ci0JCQlzZXRfYml0KEpPQl9TVEFUUywgJmxvY2FsLT5mbGFncyk7CisJCQlzZXRfYml0KEpPQl9TVEFUUywgJmxvY2FsLT5qb2JzKTsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbG9jYWwtPnRocl93YWl0KTsKIAkJfSBlbHNlCiAJCQlhaXJvX3JlYWRfc3RhdHMobG9jYWwpOwpAQCAtMjI5MCw3ICsyMzEwLDcgQEAKIAogCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJY21kLmNtZD1DTURfU0VUTU9ERTsKLQljbGVhcl9iaXQoSk9CX1BST01JU0MsICZhaS0+ZmxhZ3MpOworCWNsZWFyX2JpdChKT0JfUFJPTUlTQywgJmFpLT5qb2JzKTsKIAljbWQucGFybTA9KGFpLT5mbGFncyZJRkZfUFJPTUlTQykgPyBQUk9NSVNDIDogTk9QUk9NSVNDOwogCWlzc3VlY29tbWFuZChhaSwgJmNtZCwgJnJzcCk7CiAJdXAoJmFpLT5zZW0pOwpAQCAtMjMwMiw3ICsyMzIyLDcgQEAKIAlpZiAoKGRldi0+ZmxhZ3MgXiBhaS0+ZmxhZ3MpICYgSUZGX1BST01JU0MpIHsKIAkJY2hhbmdlX2JpdChGTEFHX1BST01JU0MsICZhaS0+ZmxhZ3MpOwogCQlpZiAoZG93bl90cnlsb2NrKCZhaS0+c2VtKSAhPSAwKSB7Ci0JCQlzZXRfYml0KEpPQl9QUk9NSVNDLCAmYWktPmZsYWdzKTsKKwkJCXNldF9iaXQoSk9CX1BST01JU0MsICZhaS0+am9icyk7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFpLT50aHJfd2FpdCk7CiAJCX0gZWxzZQogCQkJYWlyb19zZXRfcHJvbWlzYyhhaSk7CkBAIC0yMzgwLDcgKzI0MDAsNyBAQAogCQl9CiAJCWNsZWFyX2JpdChGTEFHX1JFR0lTVEVSRUQsICZhaS0+ZmxhZ3MpOwogCX0KLQlzZXRfYml0KEpPQl9ESUUsICZhaS0+ZmxhZ3MpOworCXNldF9iaXQoSk9CX0RJRSwgJmFpLT5qb2JzKTsKIAlraWxsX3Byb2MoYWktPnRocl9waWQsIFNJR1RFUk0sIDEpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFpLT50aHJfZXhpdGVkKTsKIApAQCAtMjcwMSwxNCArMjcyMSwxNCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIE1BWF9ORVRXT1JLX0NPVU5UCTY0CisjZGVmaW5lIEFJUk9fTUFYX05FVFdPUktfQ09VTlQJNjQKIHN0YXRpYyBpbnQgYWlyb19uZXR3b3Jrc19hbGxvY2F0ZShzdHJ1Y3QgYWlyb19pbmZvICphaSkKIHsKIAlpZiAoYWktPm5ldHdvcmtzKQogCQlyZXR1cm4gMDsKIAogCWFpLT5uZXR3b3JrcyA9Ci0JICAgIGt6YWxsb2MoTUFYX05FVFdPUktfQ09VTlQgKiBzaXplb2YoQlNTTGlzdEVsZW1lbnQpLAorCSAgICBremFsbG9jKEFJUk9fTUFYX05FVFdPUktfQ09VTlQgKiBzaXplb2YoQlNTTGlzdEVsZW1lbnQpLAogCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhaS0+bmV0d29ya3MpIHsKIAkJYWlyb19wcmludF93YXJuKGFpLT5kZXYtPm5hbWUsICJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYmVhY29ucyIpOwpAQCAtMjczMiwxMSArMjc1MiwzMyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmFpLT5uZXR3b3JrX2ZyZWVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFpLT5uZXR3b3JrX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTkVUV09SS19DT1VOVDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBSVJPX01BWF9ORVRXT1JLX0NPVU5UOyBpKyspCiAJCWxpc3RfYWRkX3RhaWwoJmFpLT5uZXR3b3Jrc1tpXS5saXN0LAogCQkJICAgICAgJmFpLT5uZXR3b3JrX2ZyZWVfbGlzdCk7CiB9CiAKK3N0YXRpYyBpbnQgYWlyb190ZXN0X3dwYV9jYXBhYmxlKHN0cnVjdCBhaXJvX2luZm8gKmFpKQoreworCWludCBzdGF0dXM7CisJQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOworCWNvbnN0IGNoYXIgKm5hbWUgPSBhaS0+ZGV2LT5uYW1lOworCisJc3RhdHVzID0gcmVhZENhcGFiaWxpdHlSaWQoYWksICZjYXBfcmlkLCAxKTsKKwlpZiAoc3RhdHVzICE9IFNVQ0NFU1MpIHJldHVybiAwOworCisJLyogT25seSBmaXJtd2FyZSB2ZXJzaW9ucyA1LjMwLjE3IG9yIGJldHRlciBjYW4gZG8gV1BBICovCisJaWYgKChjYXBfcmlkLnNvZnRWZXIgPiAweDUzMCkKKwkgIHx8ICgoY2FwX3JpZC5zb2Z0VmVyID09IDB4NTMwKSAmJiAoY2FwX3JpZC5zb2Z0U3ViVmVyID49IDE3KSkpIHsKKwkJYWlyb19wcmludF9pbmZvKG5hbWUsICJXUEEgaXMgc3VwcG9ydGVkLiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBObyBXUEEgc3VwcG9ydCAqLworCWFpcm9fcHJpbnRfaW5mbyhuYW1lLCAiV1BBIHVuc3VwcG9ydGVkIChvbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTciCisJCSIgYW5kIGdyZWF0ZXIgc3VwcG9ydCBXUEEuICBEZXRlY3RlZCAlcykiLCBjYXBfcmlkLnByb2RWZXIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKl9pbml0X2Fpcm9fY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCBpbnQgcG9ydCwKIAkJCQkJICAgaW50IGlzX3BjbWNpYSwgc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkJICAgc3RydWN0IGRldmljZSAqZG1kZXYgKQpAQCAtMjc1OSw2ICsyODAxLDcgQEAKIAlhaSA9IGRldi0+cHJpdjsKIAlhaS0+d2lmaWRldiA9IE5VTEw7CiAJYWktPmZsYWdzID0gMDsKKwlhaS0+am9icyA9IDA7CiAJYWktPmRldiA9IGRldjsKIAlpZiAocGNpICYmIChwY2ktPmRldmljZSA9PSAweDUwMDAgfHwgcGNpLT5kZXZpY2UgPT0gMHhhNTA0KSkgewogCQlhaXJvX3ByaW50X2RiZyhkZXYtPm5hbWUsICJGb3VuZCBhbiBNUEkzNTAgY2FyZCIpOwpAQCAtMjgzOCw2ICsyODgxLDE4IEBACiAJCXNldF9iaXQoRkxBR19GTEFTSElORywgJmFpLT5mbGFncyk7CiAJfQogCisJLyogVGVzdCBmb3IgV1BBIHN1cHBvcnQgKi8KKwlpZiAoYWlyb190ZXN0X3dwYV9jYXBhYmxlKGFpKSkgeworCQlzZXRfYml0KEZMQUdfV1BBX0NBUEFCTEUsICZhaS0+ZmxhZ3MpOworCQlhaS0+YnNzTGlzdEZpcnN0ID0gUklEX1dQQV9CU1NMSVNURklSU1Q7CisJCWFpLT5ic3NMaXN0TmV4dCA9IFJJRF9XUEFfQlNTTElTVE5FWFQ7CisJCWFpLT5ic3NMaXN0UmlkTGVuID0gc2l6ZW9mKEJTU0xpc3RSaWQpOworCX0gZWxzZSB7CisJCWFpLT5ic3NMaXN0Rmlyc3QgPSBSSURfQlNTTElTVEZJUlNUOworCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfQlNTTElTVE5FWFQ7CisJCWFpLT5ic3NMaXN0UmlkTGVuID0gc2l6ZW9mKEJTU0xpc3RSaWQpIC0gc2l6ZW9mKEJTU0xpc3RSaWRFeHRyYSk7CisJfQorCiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmMpIHsKIAkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiQ291bGRuJ3QgcmVnaXN0ZXJfbmV0ZGV2Iik7CkBAIC0yODc1LDcgKzI5MzAsNyBAQAogZXJyX291dF91bmxpbms6CiAJZGVsX2Fpcm9fZGV2KGRldik7CiBlcnJfb3V0X3RocjoKLQlzZXRfYml0KEpPQl9ESUUsICZhaS0+ZmxhZ3MpOworCXNldF9iaXQoSk9CX0RJRSwgJmFpLT5qb2JzKTsKIAlraWxsX3Byb2MoYWktPnRocl9waWQsIFNJR1RFUk0sIDEpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFpLT50aHJfZXhpdGVkKTsKIGVycl9vdXRfZnJlZToKQEAgLTI5MzMsNyArMjk4OCw3IEBACiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwogCVN0YXR1c1JpZCBzdGF0dXNfcmlkOwogCi0JY2xlYXJfYml0KEpPQl9FVkVOVCwgJmFpLT5mbGFncyk7CisJY2xlYXJfYml0KEpPQl9FVkVOVCwgJmFpLT5qb2JzKTsKIAlQQzQ1MDBfcmVhZHJpZChhaSwgUklEX1NUQVRVUywgJnN0YXR1c19yaWQsIHNpemVvZihzdGF0dXNfcmlkKSwgMCk7CiAJdXAoJmFpLT5zZW0pOwogCXdycXUuZGF0YS5sZW5ndGggPSAwOwpAQCAtMjk0Nyw3ICszMDAyLDcgQEAKIAogc3RhdGljIHZvaWQgYWlyb19wcm9jZXNzX3NjYW5fcmVzdWx0cyAoc3RydWN0IGFpcm9faW5mbyAqYWkpIHsKIAl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0JQlNTTGlzdFJpZCBCU1NMaXN0OworCUJTU0xpc3RSaWQgYnNzOwogCWludCByYzsKIAlCU1NMaXN0RWxlbWVudCAqIGxvb3BfbmV0OwogCUJTU0xpc3RFbGVtZW50ICogdG1wX25ldDsKQEAgLTI5NjAsMTUgKzMwMTUsMTUgQEAKIAl9CiAKIAkvKiBUcnkgdG8gcmVhZCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIHNjYW4gcmVzdWx0ICovCi0JcmMgPSBQQzQ1MDBfcmVhZHJpZChhaSwgUklEX0JTU0xJU1RGSVJTVCwgJkJTU0xpc3QsIHNpemVvZihCU1NMaXN0KSwgMCk7Ci0JaWYoKHJjKSB8fCAoQlNTTGlzdC5pbmRleCA9PSAweGZmZmYpKSB7CisJcmMgPSBQQzQ1MDBfcmVhZHJpZChhaSwgYWktPmJzc0xpc3RGaXJzdCwgJmJzcywgYWktPmJzc0xpc3RSaWRMZW4sIDApOworCWlmKChyYykgfHwgKGJzcy5pbmRleCA9PSAweGZmZmYpKSB7CiAJCS8qIE5vIHNjYW4gcmVzdWx0cyAqLwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBSZWFkIGFuZCBwYXJzZSBhbGwgZW50cmllcyAqLwogCXRtcF9uZXQgPSBOVUxMOwotCXdoaWxlKCghcmMpICYmIChCU1NMaXN0LmluZGV4ICE9IDB4ZmZmZikpIHsKKwl3aGlsZSgoIXJjKSAmJiAoYnNzLmluZGV4ICE9IDB4ZmZmZikpIHsKIAkJLyogR3JhYiBhIG5ldHdvcmsgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KIAkJaWYgKCFsaXN0X2VtcHR5KCZhaS0+bmV0d29ya19mcmVlX2xpc3QpKSB7CiAJCQl0bXBfbmV0ID0gbGlzdF9lbnRyeShhaS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCwKQEAgLTI5NzcsMTkgKzMwMzIsMTkgQEAKIAkJfQogCiAJCWlmICh0bXBfbmV0ICE9IE5VTEwpIHsKLQkJCW1lbWNweSh0bXBfbmV0LCAmQlNTTGlzdCwgc2l6ZW9mKHRtcF9uZXQtPmJzcykpOworCQkJbWVtY3B5KHRtcF9uZXQsICZic3MsIHNpemVvZih0bXBfbmV0LT5ic3MpKTsKIAkJCWxpc3RfYWRkX3RhaWwoJnRtcF9uZXQtPmxpc3QsICZhaS0+bmV0d29ya19saXN0KTsKIAkJCXRtcF9uZXQgPSBOVUxMOwogCQl9CiAKIAkJLyogUmVhZCBuZXh0IGVudHJ5ICovCi0JCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9CU1NMSVNUTkVYVCwKLQkJCQkgICAgJkJTU0xpc3QsIHNpemVvZihCU1NMaXN0KSwgMCk7CisJCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIGFpLT5ic3NMaXN0TmV4dCwKKwkJCQkgICAgJmJzcywgYWktPmJzc0xpc3RSaWRMZW4sIDApOwogCX0KIAogb3V0OgogCWFpLT5zY2FuX3RpbWVvdXQgPSAwOwotCWNsZWFyX2JpdChKT0JfU0NBTl9SRVNVTFRTLCAmYWktPmZsYWdzKTsKKwljbGVhcl9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFpLT5qb2JzKTsKIAl1cCgmYWktPnNlbSk7CiAKIAkvKiBTZW5kIGFuIGVtcHR5IGV2ZW50IHRvIHVzZXIgc3BhY2UuCkBAIC0zMDE5LDEwICszMDc0LDEwIEBACiAJCS8qIG1ha2Ugc3dzdXNwIGhhcHB5IHdpdGggb3VyIHRocmVhZCAqLwogCQl0cnlfdG9fZnJlZXplKCk7CiAKLQkJaWYgKHRlc3RfYml0KEpPQl9ESUUsICZhaS0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoSk9CX0RJRSwgJmFpLT5qb2JzKSkKIAkJCWJyZWFrOwogCi0JCWlmIChhaS0+ZmxhZ3MgJiBKT0JfTUFTSykgeworCQlpZiAoYWktPmpvYnMpIHsKIAkJCWxvY2tlZCA9IGRvd25faW50ZXJydXB0aWJsZSgmYWktPnNlbSk7CiAJCX0gZWxzZSB7CiAJCQl3YWl0X3F1ZXVlX3Qgd2FpdDsKQEAgLTMwMzEsMTYgKzMwODYsMTYgQEAKIAkJCWFkZF93YWl0X3F1ZXVlKCZhaS0+dGhyX3dhaXQsICZ3YWl0KTsKIAkJCWZvciAoOzspIHsKIAkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJCWlmIChhaS0+ZmxhZ3MgJiBKT0JfTUFTSykKKwkJCQlpZiAoYWktPmpvYnMpCiAJCQkJCWJyZWFrOwogCQkJCWlmIChhaS0+ZXhwaXJlcyB8fCBhaS0+c2Nhbl90aW1lb3V0KSB7CiAJCQkJCWlmIChhaS0+c2Nhbl90aW1lb3V0ICYmCiAJCQkJCQkJdGltZV9hZnRlcl9lcShqaWZmaWVzLGFpLT5zY2FuX3RpbWVvdXQpKXsKLQkJCQkJCXNldF9iaXQoSk9CX1NDQU5fUkVTVUxUUywmYWktPmZsYWdzKTsKKwkJCQkJCXNldF9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFpLT5qb2JzKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9IGVsc2UgaWYgKGFpLT5leHBpcmVzICYmCiAJCQkJCQkJdGltZV9hZnRlcl9lcShqaWZmaWVzLGFpLT5leHBpcmVzKSl7Ci0JCQkJCQlzZXRfYml0KEpPQl9BVVRPV0VQLCZhaS0+ZmxhZ3MpOworCQkJCQkJc2V0X2JpdChKT0JfQVVUT1dFUCwgJmFpLT5qb2JzKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKQEAgLTMwNjksNyArMzEyNCw3IEBACiAJCWlmIChsb2NrZWQpCiAJCQljb250aW51ZTsKIAotCQlpZiAodGVzdF9iaXQoSk9CX0RJRSwgJmFpLT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KEpPQl9ESUUsICZhaS0+am9icykpIHsKIAkJCXVwKCZhaS0+c2VtKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMDc5LDIzICszMTM0LDIzIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICh0ZXN0X2JpdChKT0JfWE1JVCwgJmFpLT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChKT0JfWE1JVCwgJmFpLT5qb2JzKSkKIAkJCWFpcm9fZW5kX3htaXQoZGV2KTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1hNSVQxMSwgJmFpLT5mbGFncykpCisJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9YTUlUMTEsICZhaS0+am9icykpCiAJCQlhaXJvX2VuZF94bWl0MTEoZGV2KTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1NUQVRTLCAmYWktPmZsYWdzKSkKKwkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1NUQVRTLCAmYWktPmpvYnMpKQogCQkJYWlyb19yZWFkX3N0YXRzKGFpKTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1dTVEFUUywgJmFpLT5mbGFncykpCisJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9XU1RBVFMsICZhaS0+am9icykpCiAJCQlhaXJvX3JlYWRfd2lyZWxlc3Nfc3RhdHMoYWkpOwotCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfUFJPTUlTQywgJmFpLT5mbGFncykpCisJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9QUk9NSVNDLCAmYWktPmpvYnMpKQogCQkJYWlyb19zZXRfcHJvbWlzYyhhaSk7Ci0JCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9NSUMsICZhaS0+ZmxhZ3MpKQorCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfTUlDLCAmYWktPmpvYnMpKQogCQkJbWljaW5pdChhaSk7Ci0JCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9FVkVOVCwgJmFpLT5mbGFncykpCisJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9FVkVOVCwgJmFpLT5qb2JzKSkKIAkJCWFpcm9fc2VuZF9ldmVudChkZXYpOwotCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfQVVUT1dFUCwgJmFpLT5mbGFncykpCisJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9BVVRPV0VQLCAmYWktPmpvYnMpKQogCQkJdGltZXJfZnVuYyhkZXYpOwotCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfU0NBTl9SRVNVTFRTLCAmYWktPmZsYWdzKSkKKwkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFpLT5qb2JzKSkKIAkJCWFpcm9fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoYWkpOwogCQllbHNlICAvKiBTaG91bGRuJ3QgZ2V0IGhlcmUsIGJ1dCB3ZSBtYWtlIHN1cmUgdG8gdW5sb2NrICovCiAJCQl1cCgmYWktPnNlbSk7CkBAIC0zMTMzLDcgKzMxODgsNyBAQAogCQlpZiAoIHN0YXR1cyAmIEVWX01JQyApIHsKIAkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfTUlDICk7CiAJCQlpZiAodGVzdF9iaXQoRkxBR19NSUNfQ0FQQUJMRSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQlzZXRfYml0KEpPQl9NSUMsICZhcHJpdi0+ZmxhZ3MpOworCQkJCXNldF9iaXQoSk9CX01JQywgJmFwcml2LT5qb2JzKTsKIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7CiAJCQl9CiAJCX0KQEAgLTMxODcsNyArMzI0Miw3IEBACiAJCQkJc2V0X2JpdChGTEFHX1VQREFURV9NVUxUSSwgJmFwcml2LT5mbGFncyk7CiAKIAkJCQlpZiAoZG93bl90cnlsb2NrKCZhcHJpdi0+c2VtKSAhPSAwKSB7Ci0JCQkJCXNldF9iaXQoSk9CX0VWRU5ULCAmYXByaXYtPmZsYWdzKTsKKwkJCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhcHJpdi0+am9icyk7CiAJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKIAkJCQl9IGVsc2UKIAkJCQkJYWlyb19zZW5kX2V2ZW50KGRldik7CkBAIC01NDg1LDcgKzU1NDAsNyBAQAogCXVwKCZhcHJpdi0+c2VtKTsKIAogLyogU2NoZWR1bGUgY2hlY2sgdG8gc2VlIGlmIHRoZSBjaGFuZ2Ugd29ya2VkICovCi0JY2xlYXJfYml0KEpPQl9BVVRPV0VQLCAmYXByaXYtPmZsYWdzKTsKKwljbGVhcl9iaXQoSk9CX0FVVE9XRVAsICZhcHJpdi0+am9icyk7CiAJYXByaXYtPmV4cGlyZXMgPSBSVU5fQVQoSFoqMyk7CiB9CiAKQEAgLTY4NzYsNyArNjkzMSw3IEBACiAJfQogCXJhbmdlLT5udW1fdHhwb3dlciA9IGk7CiAJcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX01XQVRUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDEyOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDE5OwogCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwogCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MSUZFVElNRTsKIAlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKQEAgLTcxNTIsNiArNzIwNyw3IEBACiAJdTE2CQkJY2FwYWJpbGl0aWVzOwogCWNoYXIgKgkJCWN1cnJlbnRfdmFsOwkvKiBGb3IgcmF0ZXMgKi8KIAlpbnQJCQlpOworCWNoYXIgKgkJYnVmOwogCiAJLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CkBAIC03MjM4LDggKzcyOTQsNjkgQEAKIAlpZigoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCiAJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKIAotCS8qIFRoZSBvdGhlciBkYXRhIGluIHRoZSBzY2FuIHJlc3VsdCBhcmUgbm90IHJlYWxseQotCSAqIGludGVyZXN0aW5nLCBzbyBmb3Igbm93IGRyb3AgaXQgLSBKZWFuIElJICovCisJLyogQmVhY29uIGludGVydmFsICovCisJYnVmID0ga21hbGxvYygzMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZikgeworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJc3ByaW50ZihidWYsICJiY25faW50PSVkIiwgYnNzLT5iZWFjb25JbnRlcnZhbCk7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBidWYpOworCQlrZnJlZShidWYpOworCX0KKworCS8qIFB1dCBXUEEvUlNOIEluZm9ybWF0aW9uIEVsZW1lbnRzIGludG8gdGhlIGV2ZW50IHN0cmVhbSAqLworCWlmICh0ZXN0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKSkgeworCQl1bnNpZ25lZCBpbnQgbnVtX251bGxfaWVzID0gMDsKKwkJdTE2IGxlbmd0aCA9IHNpemVvZiAoYnNzLT5leHRyYS5pZXApOworCQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqaW5mb19lbGVtZW50ID0KKwkJCShzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqKSAmYnNzLT5leHRyYS5pZXA7CisKKwkJd2hpbGUgKChsZW5ndGggPj0gc2l6ZW9mKCppbmZvX2VsZW1lbnQpKSAmJiAobnVtX251bGxfaWVzIDwgMikpIHsKKwkJCWlmIChzaXplb2YoKmluZm9fZWxlbWVudCkgKyBpbmZvX2VsZW1lbnQtPmxlbiA+IGxlbmd0aCkgeworCQkJCS8qIEludmFsaWQgZWxlbWVudCwgZG9uJ3QgY29udGludWUgcGFyc2luZyBJRSAqLworCQkJCWJyZWFrOworCQkJfQorCisJCQlzd2l0Y2ggKGluZm9fZWxlbWVudC0+aWQpIHsKKwkJCWNhc2UgTUZJRV9UWVBFX1NTSUQ6CisJCQkJLyogVHdvIHplcm8tbGVuZ3RoIFNTSUQgZWxlbWVudHMKKwkJCQkgKiBtZWFuIHdlJ3JlIGRvbmUgcGFyc2luZyBlbGVtZW50cyAqLworCQkJCWlmICghaW5mb19lbGVtZW50LT5sZW4pCisJCQkJCW51bV9udWxsX2llcysrOworCQkJCWJyZWFrOworCisJCQljYXNlIE1GSUVfVFlQRV9HRU5FUklDOgorCQkJCWlmIChpbmZvX2VsZW1lbnQtPmxlbiA+PSA0ICYmCisJCQkJICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXSA9PSAweDAwICYmCisJCQkJICAgIGluZm9fZWxlbWVudC0+ZGF0YVsxXSA9PSAweDUwICYmCisJCQkJICAgIGluZm9fZWxlbWVudC0+ZGF0YVsyXSA9PSAweGYyICYmCisJCQkJICAgIGluZm9fZWxlbWVudC0+ZGF0YVszXSA9PSAweDAxKSB7CisJCQkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gbWluKGluZm9fZWxlbWVudC0+bGVuICsgMiwKKwkJCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7CisJCQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJCSZpd2UsIChjaGFyICopIGluZm9fZWxlbWVudCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIE1GSUVfVFlQRV9SU046CisJCQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJCQlpd2UudS5kYXRhLmxlbmd0aCA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiArIDIsCisJCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7CisJCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkmaXdlLCAoY2hhciAqKSBpbmZvX2VsZW1lbnQpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCisJCQlsZW5ndGggLT0gc2l6ZW9mKCppbmZvX2VsZW1lbnQpICsgaW5mb19lbGVtZW50LT5sZW47CisJCQlpbmZvX2VsZW1lbnQgPQorCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqKSZpbmZvX2VsZW1lbnQtPgorCQkJICAgIGRhdGFbaW5mb19lbGVtZW50LT5sZW5dOworCQl9CisJfQogCXJldHVybiBjdXJyZW50X2V2OwogfQogCkBAIC03NTIxLDcgKzc2MzgsNyBAQAogCXUzMiAqdmFscyA9IHN0YXRzX3JpZC52YWxzOwogCiAJLyogR2V0IHN0YXRzIG91dCBvZiB0aGUgY2FyZCAqLwotCWNsZWFyX2JpdChKT0JfV1NUQVRTLCAmbG9jYWwtPmZsYWdzKTsKKwljbGVhcl9iaXQoSk9CX1dTVEFUUywgJmxvY2FsLT5qb2JzKTsKIAlpZiAobG9jYWwtPnBvd2VyLmV2ZW50KSB7CiAJCXVwKCZsb2NhbC0+c2VtKTsKIAkJcmV0dXJuOwpAQCAtNzU2NSwxMCArNzY4MiwxMCBAQAogewogCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gIGRldi0+cHJpdjsKIAotCWlmICghdGVzdF9iaXQoSk9CX1dTVEFUUywgJmxvY2FsLT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KEpPQl9XU1RBVFMsICZsb2NhbC0+am9icykpIHsKIAkJLyogR2V0IHN0YXRzIG91dCBvZiB0aGUgY2FyZCBpZiBhdmFpbGFibGUgKi8KIAkJaWYgKGRvd25fdHJ5bG9jaygmbG9jYWwtPnNlbSkgIT0gMCkgewotCQkJc2V0X2JpdChKT0JfV1NUQVRTLCAmbG9jYWwtPmZsYWdzKTsKKwkJCXNldF9iaXQoSk9CX1dTVEFUUywgJmxvY2FsLT5qb2JzKTsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbG9jYWwtPnRocl93YWl0KTsKIAkJfSBlbHNlCiAJCQlhaXJvX3JlYWRfd2lyZWxlc3Nfc3RhdHMobG9jYWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAppbmRleCAyZTgzMDgzLi5lNjZmZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaApAQCAtNjQ1LDcgKzY0NSw2IEBACiAJdW5zaWduZWQgaW50IGlycTsKIAogCXZvaWQgX19pb21lbSAqbW1pb19hZGRyOwotCXVuc2lnbmVkIGludCBtbWlvX2xlbjsKIAogCS8qIERvIG5vdCB1c2UgdGhlIGxvY2sgZGlyZWN0bHkuIFVzZSB0aGUgYmNtNDN4eF9sb2NrKiBoZWxwZXIKIAkgKiBmdW5jdGlvbnMsIHRvIGJlIE1NSU8tc2FmZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCmluZGV4IDM1YTRmY2IuLjc0OTdmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYwpAQCAtOTIsNyArOTIsNyBAQAogCWZhcHBlbmQoInN1YnN5c3RlbV92ZW5kb3I6IDB4JTA0eCAgIHN1YnN5c3RlbV9kZXZpY2U6IDB4JTA0eFxuIiwKIAkJcGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSk7CiAJZmFwcGVuZCgiSVJROiAlZFxuIiwgYmNtLT5pcnEpOwotCWZhcHBlbmQoIm1taW9fYWRkcjogMHglcCAgIG1taW9fbGVuOiAldVxuIiwgYmNtLT5tbWlvX2FkZHIsIGJjbS0+bW1pb19sZW4pOworCWZhcHBlbmQoIm1taW9fYWRkcjogMHglcFxuIiwgYmNtLT5tbWlvX2FkZHIpOwogCWZhcHBlbmQoImNoaXBfaWQ6IDB4JTA0eCAgIGNoaXBfcmV2OiAweCUwMnhcbiIsIGJjbS0+Y2hpcF9pZCwgYmNtLT5jaGlwX3Jldik7CiAJaWYgKChiY20tPmNvcmVfODAyMTFbMF0ucmV2ID49IDMpICYmIChiY200M3h4X3JlYWQzMihiY20sIDB4MDE1OCkgJiAoMSA8PCAxNikpKQogCQlmYXBwZW5kKCJSYWRpbyBkaXNhYmxlZCBieSBoYXJkd2FyZSFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKaW5kZXggN2VkMThjYS4uNzM2ZGRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCkBAIC0xMjgsMTMgKzEyOCwxNSBAQAogCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiY200M3h4X3BjaV90YmxbXSA9IHsKIAkvKiBCcm9hZGNvbSA0MzAzIDgwMi4xMWIgKi8KIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCQkvKiBCcm9hZGNvbSA0MzA3IDgwMi4xMWIgKi8KKwkvKiBCcm9hZGNvbSA0MzA3IDgwMi4xMWIgKi8KIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCQkvKiBCcm9hZGNvbSA0MzE4IDgwMi4xMWIvZyAqLworCS8qIEJyb2FkY29tIDQzMTggODAyLjExYi9nICovCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwkvKiBCcm9hZGNvbSA0MzE5IDgwMi4xMWEvYi9nICovCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAkvKiBCcm9hZGNvbSA0MzA2IDgwMi4xMWIvZyAqLwogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JCS8qIEJyb2FkY29tIDQzMDYgODAyLjExYSAqLworCS8qIEJyb2FkY29tIDQzMDYgODAyLjExYSAqLwogLy8JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAkvKiBCcm9hZGNvbSA0MzA5IDgwMi4xMWEvYi9nICovCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKQEAgLTMyOTksOCArMzMwMSw3IEBACiAKIAliY200M3h4X2NoaXBzZXRfZGV0YWNoKGJjbSk7CiAJLyogRG8gX25vdF8gYWNjZXNzIHRoZSBjaGlwLCBhZnRlciBpdCBpcyBkZXRhY2hlZC4gKi8KLQlpb3VubWFwKGJjbS0+bW1pb19hZGRyKTsKLQkKKwlwY2lfaW91bm1hcChwY2lfZGV2LCBiY20tPm1taW9fYWRkcik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAKQEAgLTMzOTAsNDAgKzMzOTEsMjYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGJjbS0+bmV0X2RldjsKIAlpbnQgZXJyOwogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19mbGFncywgbW1pb19sZW47CiAJdTMyIGNvcmVtYXNrOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gd2FrZSB1cCBwY2kgZGV2aWNlICglaSlcbiIsIGVycik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBjaV9lbmFibGVfZGV2aWNlKCkgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCk7Ci0JbW1pb19mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwY2lfZGV2LCAwKTsKLQltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMCk7Ci0JaWYgKCEobW1pb19mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXMsIHJlZ2lvbiAjMCBub3QgYW4gTU1JTyByZXNvdXJjZSwgYWJvcnRpbmdcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3BjaV9kaXNhYmxlOwotCX0KIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaV9kZXYsIEtCVUlMRF9NT0ROQU1FKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICJjb3VsZCBub3QgYWNjZXNzIFBDSSByZXNvdXJjZXMgKCVpKVxuIiwgZXJyKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGNpX3JlcXVlc3RfcmVnaW9ucygpIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlOwogCX0KIAkvKiBlbmFibGUgUENJIGJ1cy1tYXN0ZXJpbmcgKi8KIAlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKLQliY20tPm1taW9fYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWJjbS0+bW1pb19hZGRyID0gcGNpX2lvbWFwKHBjaV9kZXYsIDAsIH4wVUwpOwogCWlmICghYmNtLT5tbWlvX2FkZHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGNpX2lvbWFwKCkgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfcGNpX3JlbGVhc2U7CiAJfQotCWJjbS0+bW1pb19sZW4gPSBtbWlvX2xlbjsKIAluZXRfZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyliY20tPm1taW9fYWRkcjsKIAogCWJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMTYoYmNtLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKQEAgLTM1MTcsNyArMzUwNCw3IEBACiBlcnJfY2hpcHNldF9kZXRhY2g6CiAJYmNtNDN4eF9jaGlwc2V0X2RldGFjaChiY20pOwogZXJyX2lvdW5tYXA6Ci0JaW91bm1hcChiY20tPm1taW9fYWRkcik7CisJcGNpX2lvdW5tYXAocGNpX2RldiwgYmNtLT5tbWlvX2FkZHIpOwogZXJyX3BjaV9yZWxlYXNlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7CiBlcnJfcGNpX2Rpc2FibGU6CkBAIC0zNTY4LDcgKzM1NTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGtleWlkeDsKIAkKLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggInNldCBzZWN1cml0eSBjYWxsZWRcbiIpOworCWRwcmludGsoS0VSTl9JTkZPIFBGWCAic2V0IHNlY3VyaXR5IGNhbGxlZCIpOwogCiAJYmNtNDN4eF9sb2NrX21taW8oYmNtLCBmbGFncyk7CiAKQEAgLTM1ODEsMjQgKzM1NjgsMjUgQEAKIAkKIAlpZiAoc2VjLT5mbGFncyAmIFNFQ19BQ1RJVkVfS0VZKSB7CiAJCXNlY2luZm8tPmFjdGl2ZV9rZXkgPSBzZWMtPmFjdGl2ZV9rZXk7Ci0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiICAgLmFjdGl2ZV9rZXkgPSAlZFxuIiwgc2VjLT5hY3RpdmVfa2V5KTsKKwkJZHByaW50aygiLCAuYWN0aXZlX2tleSA9ICVkIiwgc2VjLT5hY3RpdmVfa2V5KTsKIAl9CiAJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfVU5JQ0FTVF9HUk9VUCkgewogCQlzZWNpbmZvLT51bmljYXN0X3VzZXNfZ3JvdXAgPSBzZWMtPnVuaWNhc3RfdXNlc19ncm91cDsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICIgICAudW5pY2FzdF91c2VzX2dyb3VwID0gJWRcbiIsIHNlYy0+dW5pY2FzdF91c2VzX2dyb3VwKTsKKwkJZHByaW50aygiLCAudW5pY2FzdF91c2VzX2dyb3VwID0gJWQiLCBzZWMtPnVuaWNhc3RfdXNlc19ncm91cCk7CiAJfQogCWlmIChzZWMtPmZsYWdzICYgU0VDX0xFVkVMKSB7CiAJCXNlY2luZm8tPmxldmVsID0gc2VjLT5sZXZlbDsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICIgICAubGV2ZWwgPSAlZFxuIiwgc2VjLT5sZXZlbCk7CisJCWRwcmludGsoIiwgLmxldmVsID0gJWQiLCBzZWMtPmxldmVsKTsKIAl9CiAJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5BQkxFRCkgewogCQlzZWNpbmZvLT5lbmFibGVkID0gc2VjLT5lbmFibGVkOwotCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgIC5lbmFibGVkID0gJWRcbiIsIHNlYy0+ZW5hYmxlZCk7CisJCWRwcmludGsoIiwgLmVuYWJsZWQgPSAlZCIsIHNlYy0+ZW5hYmxlZCk7CiAJfQogCWlmIChzZWMtPmZsYWdzICYgU0VDX0VOQ1JZUFQpIHsKIAkJc2VjaW5mby0+ZW5jcnlwdCA9IHNlYy0+ZW5jcnlwdDsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICIgICAuZW5jcnlwdCA9ICVkXG4iLCBzZWMtPmVuY3J5cHQpOworCQlkcHJpbnRrKCIsIC5lbmNyeXB0ID0gJWQiLCBzZWMtPmVuY3J5cHQpOwogCX0KKwlkcHJpbnRrKCJcbiIpOwogCWlmIChiY20tPmluaXRpYWxpemVkICYmICFiY20tPmllZWUtPmhvc3RfZW5jcnlwdCkgewogCQlpZiAoc2VjaW5mby0+ZW5hYmxlZCkgewogCQkJLyogdXBsb2FkIFdFUCBrZXlzIHRvIGhhcmR3YXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9oZXJtZXMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5jCmluZGV4IDM0NmM2ZmUuLjJhYTJmMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5jCkBAIC0xMjEsMTIgKzEyMSw2IEBACiAJaHctPmlvYmFzZSA9IGFkZHJlc3M7CiAJaHctPnJlZ19zcGFjaW5nID0gcmVnX3NwYWNpbmc7CiAJaHctPmludGVuID0gMHgwOwotCi0jaWZkZWYgSEVSTUVTX0RFQlVHX0JVRkZFUgotCWh3LT5kYnVmcCA9IDA7Ci0JbWVtc2V0KCZody0+ZGJ1ZiwgMHhmZiwgc2l6ZW9mKGh3LT5kYnVmKSk7Ci0JbWVtc2V0KCZody0+cHJvZmlsZSwgMCwgc2l6ZW9mKGh3LT5wcm9maWxlKSk7Ci0jZW5kaWYKIH0KIAogaW50IGhlcm1lc19pbml0KGhlcm1lc190ICpodykKQEAgLTM0NywxOSArMzQxLDYgQEAKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnKGh3LCBvcmVnKTsKIAl9CiAKLSNpZmRlZiBIRVJNRVNfREVCVUdfQlVGRkVSCi0JaHctPnByb2ZpbGVbSEVSTUVTX0JBUF9CVVNZX1RJTUVPVVQgLSBrXSsrOwotCi0JaWYgKGsgPCBIRVJNRVNfQkFQX0JVU1lfVElNRU9VVCkgewotCQlzdHJ1Y3QgaGVybWVzX2RlYnVnX2VudHJ5ICplID0gCi0JCQkmaHctPmRidWZbKGh3LT5kYnVmcCsrKSAlIEhFUk1FU19ERUJVR19CVUZTSVpFXTsKLQkJZS0+YmFwID0gYmFwOwotCQllLT5pZCA9IGlkOwotCQllLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCWUtPmN5Y2xlcyA9IEhFUk1FU19CQVBfQlVTWV9USU1FT1VUIC0gazsKLQl9Ci0jZW5kaWYKLQogCWlmIChyZWcgJiBIRVJNRVNfT0ZGU0VUX0JVU1kpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCkBAIC00MTksOCArNDAwLDcgQEAKIH0KIAogLyogV3JpdGUgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBjaGlwJ3MgYnVmZmVyLCB2aWEgdGhlCi0gKiBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZSBjYWxsZXIncyBwcm9ibGVtLiBsZW4KLSAqIG11c3QgYmUgZXZlbi4KKyAqIEJBUC4gU3luY2hyb25pemF0aW9uL3NlcmlhbGl6YXRpb24gaXMgdGhlIGNhbGxlcidzIHByb2JsZW0uCiAgKgogICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQogICovCkBAIC00MzAsNyArNDEwLDcgQEAKIAlpbnQgZHJlZyA9IGJhcCA/IEhFUk1FU19EQVRBMSA6IEhFUk1FU19EQVRBMDsKIAlpbnQgZXJyID0gMDsKIAotCWlmICggKGxlbiA8IDApIHx8IChsZW4gJSAyKSApCisJaWYgKGxlbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2JhcF9zZWVrKGh3LCBiYXAsIGlkLCBvZmZzZXQpOwpAQCAtNDM4LDQ5ICs0MTgsMTIgQEAKIAkJZ290byBvdXQ7CiAJCiAJLyogQWN0dWFsbHkgZG8gdGhlIHRyYW5zZmVyICovCi0JaGVybWVzX3dyaXRlX3dvcmRzKGh3LCBkcmVnLCBidWYsIGxlbi8yKTsKKwloZXJtZXNfd3JpdGVfYnl0ZXMoaHcsIGRyZWcsIGJ1ZiwgbGVuKTsKIAogIG91dDoJCiAJcmV0dXJuIGVycjsKIH0KIAotLyogV3JpdGUgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBjaGlwJ3MgYnVmZmVyIHdpdGggcGFkZGluZyBpZgotICogbmVjY2Vzc2FyeSwgdmlhIHRoZSBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZQotICogY2FsbGVyJ3MgcHJvYmxlbS4gbGVuIG11c3QgYmUgZXZlbi4KLSAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pLCAwIG9uIHN1Y2Nlc3MsID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCi0gKi8KLWludCBoZXJtZXNfYmFwX3B3cml0ZV9wYWQoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGRhdGFfbGVuLCBpbnQgbGVuLAotCQkgICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpCi17Ci0JaW50IGRyZWcgPSBiYXAgPyBIRVJNRVNfREFUQTEgOiBIRVJNRVNfREFUQTA7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAobGVuIDwgMCB8fCBsZW4gJSAyIHx8IGRhdGFfbGVuID4gbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVyciA9IGhlcm1lc19iYXBfc2VlayhodywgYmFwLCBpZCwgb2Zmc2V0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCS8qIFRyYW5zZmVyIGFsbCB0aGUgY29tcGxldGUgd29yZHMgb2YgZGF0YSAqLwotCWhlcm1lc193cml0ZV93b3JkcyhodywgZHJlZywgYnVmLCBkYXRhX2xlbi8yKTsKLQkvKiBJZiB0aGVyZSBpcyBhbiBvZGQgYnl0ZSBsZWZ0IG92ZXIgcGFkIGFuZCB0cmFuc2ZlciBpdCAqLwotCWlmIChkYXRhX2xlbiAmIDEpIHsKLQkJdTggZW5kWzJdOwotCQllbmRbMV0gPSAwOwotCQllbmRbMF0gPSAoKHVuc2lnbmVkIGNoYXIgKilidWYpW2RhdGFfbGVuIC0gMV07Ci0JCWhlcm1lc193cml0ZV93b3JkcyhodywgZHJlZywgZW5kLCAxKTsKLQkJZGF0YV9sZW4gKys7Ci0JfQotCS8qIE5vdyBzZW5kIHplcm9zIGZvciB0aGUgcGFkZGluZyAqLwotCWlmIChkYXRhX2xlbiA8IGxlbikKLQkJaGVybWVzX2NsZWFyX3dvcmRzKGh3LCBkcmVnLCAobGVuIC0gZGF0YV9sZW4pIC8gMik7Ci0JLyogQ29tcGxldGUgKi8KLSBvdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogLyogUmVhZCBhIExlbmd0aC1UeXBlLVZhbHVlIHJlY29yZCBmcm9tIHRoZSBjYXJkLgogICoKICAqIElmIGxlbmd0aCBpcyBOVUxMLCB3ZSBpZ25vcmUgdGhlIGxlbmd0aCByZWFkIGZyb20gdGhlIGNhcmQsIGFuZApAQCAtNTUzLDcgKzQ5Niw3IEBACiAKIAljb3VudCA9IGxlbmd0aCAtIDE7CiAKLQloZXJtZXNfd3JpdGVfd29yZHMoaHcsIGRyZWcsIHZhbHVlLCBjb3VudCk7CisJaGVybWVzX3dyaXRlX2J5dGVzKGh3LCBkcmVnLCB2YWx1ZSwgY291bnQgPDwgMSk7CiAKIAllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9BQ0NFU1MgfCBIRVJNRVNfQ01EX1dSSVRFLCAKIAkJCQlyaWQsIE5VTEwpOwpAQCAtNTY4LDcgKzUxMSw2IEBACiAKIEVYUE9SVF9TWU1CT0woaGVybWVzX2JhcF9wcmVhZCk7CiBFWFBPUlRfU1lNQk9MKGhlcm1lc19iYXBfcHdyaXRlKTsKLUVYUE9SVF9TWU1CT0woaGVybWVzX2JhcF9wd3JpdGVfcGFkKTsKIEVYUE9SVF9TWU1CT0woaGVybWVzX3JlYWRfbHR2KTsKIEVYUE9SVF9TWU1CT0woaGVybWVzX3dyaXRlX2x0dik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmgKaW5kZXggNzY0NGY3Mi4uOGUzZjBlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmgKQEAgLTMyOCwxNiArMzI4LDYgQEAKIAl1OCBhZGRyW0hFUk1FU19NQVhfTVVMVElDQVNUXVtFVEhfQUxFTl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLy8gI2RlZmluZSBIRVJNRVNfREVCVUdfQlVGRkVSIDEKLSNkZWZpbmUgSEVSTUVTX0RFQlVHX0JVRlNJWkUgNDA5Ngotc3RydWN0IGhlcm1lc19kZWJ1Z19lbnRyeSB7Ci0JaW50IGJhcDsKLQl1MTYgaWQsIG9mZnNldDsKLQlpbnQgY3ljbGVzOwotfTsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQogLyogVGltZW91dHMgKi8KICNkZWZpbmUgSEVSTUVTX0JBUF9CVVNZX1RJTUVPVVQgKDEwMDAwKSAvKiBJbiBpdGVyYXRpb25zIG9mIH4xdXMgKi8KIApAQCAtMzQ3LDE0ICszMzcsNyBAQAogCWludCByZWdfc3BhY2luZzsKICNkZWZpbmUgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcJMAogI2RlZmluZSBIRVJNRVNfMzJCSVRfUkVHU1BBQ0lORwkxCi0KIAl1MTYgaW50ZW47IC8qIFdoaWNoIGludGVycnVwdHMgc2hvdWxkIGJlIGVuYWJsZWQ/ICovCi0KLSNpZmRlZiBIRVJNRVNfREVCVUdfQlVGRkVSCi0Jc3RydWN0IGhlcm1lc19kZWJ1Z19lbnRyeSBkYnVmW0hFUk1FU19ERUJVR19CVUZTSVpFXTsKLQl1bnNpZ25lZCBsb25nIGRidWZwOwotCXVuc2lnbmVkIGxvbmcgcHJvZmlsZVtIRVJNRVNfQkFQX0JVU1lfVElNRU9VVCsxXTsKLSNlbmRpZgogfSBoZXJtZXNfdDsKIAogLyogUmVnaXN0ZXIgYWNjZXNzIGNvbnZlbmllbmNlIG1hY3JvcyAqLwpAQCAtMzc2LDggKzM1OSw2IEBACiAJCSAgICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpOwogaW50IGhlcm1lc19iYXBfcHdyaXRlKGhlcm1lc190ICpodywgaW50IGJhcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuLAogCQkJdTE2IGlkLCB1MTYgb2Zmc2V0KTsKLWludCBoZXJtZXNfYmFwX3B3cml0ZV9wYWQoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCBjb25zdCB2b2lkICpidWYsCi0JCQl1bnNpZ25lZCBkYXRhX2xlbiwgaW50IGxlbiwgdTE2IGlkLCB1MTYgb2Zmc2V0KTsKIGludCBoZXJtZXNfcmVhZF9sdHYoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB1MTYgcmlkLCB1bnNpZ25lZCBidWZsZW4sCiAJCSAgICB1MTYgKmxlbmd0aCwgdm9pZCAqYnVmKTsKIGludCBoZXJtZXNfd3JpdGVfbHR2KGhlcm1lc190ICpodywgaW50IGJhcCwgdTE2IHJpZCwKQEAgLTQyNSwxMCArNDA2LDEzIEBACiAJaW9yZWFkMTZfcmVwKGh3LT5pb2Jhc2UgKyBvZmYsIGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX3dyaXRlX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc193cml0ZV9ieXRlcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGNvdW50KQogewogCW9mZiA9IG9mZiA8PCBody0+cmVnX3NwYWNpbmc7Ci0JaW93cml0ZTE2X3JlcChody0+aW9iYXNlICsgb2ZmLCBidWYsIGNvdW50KTsKKwlpb3dyaXRlMTZfcmVwKGh3LT5pb2Jhc2UgKyBvZmYsIGJ1ZiwgY291bnQgPj4gMSk7CisJaWYgKHVubGlrZWx5KGNvdW50ICYgMSkpCisJCWlvd3JpdGU4KGJ1Zltjb3VudCAtIDFdLCBody0+aW9iYXNlICsgb2ZmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc19jbGVhcl93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwgdW5zaWduZWQgY291bnQpCkBAIC00NjIsMjEgKzQ0Niw0IEBACiAJcmV0dXJuIEhFUk1FU19XUklURV9SRUNPUkQoaHcsIGJhcCwgcmlkLCAmcmVjKTsKIH0KIAotI2Vsc2UgLyogISBfX0tFUk5FTF9fICovCi0KLS8qIFRoZXNlIGFyZSBwcm92aWRlZCBmb3IgdGhlIGJlbmVmaXQgb2YgdXNlcnNwYWNlIGRyaXZlcnMgYW5kIHRlc3RpbmcgcHJvZ3JhbXMKLSAgIHdoaWNoIHVzZSBpb3Blcm0oKSBvciBpb3BsKCkgKi8KLQotI2RlZmluZSBoZXJtZXNfcmVhZF9yZWcoYmFzZSwgb2ZmKSAoaW53KChiYXNlKSArIChvZmYpKSkKLSNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZyhiYXNlLCBvZmYsIHZhbCkgKG91dHcoKHZhbCksIChiYXNlKSArIChvZmYpKSkKLQotI2RlZmluZSBoZXJtZXNfcmVhZF9yZWduKGJhc2UsIG5hbWUpIChoZXJtZXNfcmVhZF9yZWcoKGJhc2UpLCBIRVJNRVNfIyNuYW1lKSkKLSNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZ24oYmFzZSwgbmFtZSwgdmFsKSAoaGVybWVzX3dyaXRlX3JlZygoYmFzZSksIEhFUk1FU18jI25hbWUsICh2YWwpKSkKLQotLyogTm90ZSB0aGF0IGZvciB0aGUgbmV4dCB0d28sIHRoZSBjb3VudCBpcyBpbiAxNi1iaXQgd29yZHMsIG5vdCBieXRlcyAqLwotI2RlZmluZSBoZXJtZXNfcmVhZF9kYXRhKGJhc2UsIG9mZiwgYnVmLCBjb3VudCkgKGluc3coKGJhc2UpICsgKG9mZiksIChidWYpLCAoY291bnQpKSkKLSNkZWZpbmUgaGVybWVzX3dyaXRlX2RhdGEoYmFzZSwgb2ZmLCBidWYsIGNvdW50KSAob3V0c3coKGJhc2UpICsgKG9mZiksIChidWYpLCAoY291bnQpKSkKLQotI2VuZGlmIC8qICEgX19LRVJORUxfXyAqLwotCiAjZW5kaWYgIC8qIF9IRVJNRVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCmluZGV4IDA2YTUyMTQuLjRhNWJlNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKQEAgLTUzNCw1ICs1MzQsNCBAQAogfQogCiAKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2R1bXBfdHhfODAyMTEpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCmluZGV4IDA2YzNmYTMuLmJhMTMxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKQEAgLTMyNzYsMTcgKzMyNzYsNiBAQAogRVhQT1JUX1NZTUJPTChob3N0YXBfaW5pdF9hcF9wcm9jKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX2ZyZWVfZGF0YSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9jaGVja19zdGFfZndfdmVyc2lvbik7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF9oYW5kbGVfc3RhX3R4KTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2hhbmRsZV9zdGFfcmVsZWFzZSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9oYW5kbGVfc3RhX3R4X2V4Yyk7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF91cGRhdGVfc3RhX3BzKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2hhbmRsZV9zdGFfcngpOwotRVhQT1JUX1NZTUJPTChob3N0YXBfaXNfc3RhX2Fzc29jKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2lzX3N0YV9hdXRob3JpemVkKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2FkZF9zdGEpOwotRVhQT1JUX1NZTUJPTChob3N0YXBfdXBkYXRlX3JhdGVzKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2FkZF93ZHNfbGlua3MpOwotRVhQT1JUX1NZTUJPTChob3N0YXBfd2RzX2xpbmtfb3Blcik7CiAjaWZuZGVmIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2RlYXV0aF9hbGxfc3Rhcyk7CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCmluZGV4IDU1YmVkOTIuLmRiMDNkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKQEAgLTg4MSw2ICs4ODEsMTIgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigKIAkJIlpvb21BaXIgMTFNYnBzIEhpZ2giLCAiUmF0ZSB3aXJlbGVzcyBOZXR3b3JraW5nIiwKIAkJMHgyNzNmZTNkYiwgMHgzMmExZWFlZSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAorCQkiUHJldGVjIiwgIkNvbXBhY3RXTEFOIENhcmQgODAyLjExYiIsICIyLjUiLAorCQkweDFjYWRkM2U1LCAweGU2OTc2MzZjLCAweDdhNWJmY2YxKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoCisJCSJVLlMuIFJvYm90aWNzIiwgIklFRUUgODAyLjExYiBQQy1DQVJEIiwgIlZlcnNpb24gMDEuMDIiLAorCQkweGM3YjhkZjlkLCAweDE3MDBkMDg3LCAweDRiNzRiYWEwKSwKIAlQQ01DSUFfREVWSUNFX05VTEwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgaG9zdGFwX2NzX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCmluZGV4IDhkZDRjNDQuLjkzNzg2ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCkBAIC0xMTI1LDExICsxMTI1LDkgQEAKIEVYUE9SVF9TWU1CT0woaG9zdGFwX2R1bXBfcnhfaGVhZGVyKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX2R1bXBfdHhfaGVhZGVyKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwXzgwMjExX2hlYWRlcl9wYXJzZSk7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9wcmlzbV9oZWFkZXJfcGFyc2UpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfODAyMTFfZ2V0X2hkcmxlbik7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9nZXRfc3RhdHMpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0dXBfZGV2KTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX3Byb2MpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0X211bHRpY2FzdF9saXN0X3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9ob3N0YXBkKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9ob3N0YXBkX3N0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggYmNhODljZi4uMzlmODJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtMzMsNyArMzMsNDQgQEAKICNpbmNsdWRlICJpcHcyMjAwLmgiCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jZGVmaW5lIElQVzIyMDBfVkVSU0lPTiAiZ2l0LTEuMS4xIgorCisjaWZuZGVmIEtCVUlMRF9FWFRNT0QKKyNkZWZpbmUgVksgImsiCisjZWxzZQorI2RlZmluZSBWSworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRworI2RlZmluZSBWRCAiZCIKKyNlbHNlCisjZGVmaW5lIFZECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKKyNkZWZpbmUgVk0gIm0iCisjZWxzZQorI2RlZmluZSBWTQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworI2RlZmluZSBWUCAicCIKKyNlbHNlCisjZGVmaW5lIFZQCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCisjZGVmaW5lIFZSICJyIgorI2Vsc2UKKyNkZWZpbmUgVlIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCisjZGVmaW5lIFZRICJxIgorI2Vsc2UKKyNkZWZpbmUgVlEKKyNlbmRpZgorCisjZGVmaW5lIElQVzIyMDBfVkVSU0lPTiAiMS4xLjIiIFZLIFZEIFZNIFZQIFZSIFZRCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgUFJPL1dpcmVsZXNzIDIyMDAvMjkxNSBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElQVzIyMDBfVkVSU0lPTgpAQCAtNDYsNyArODMsOSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGNtZGxvZyA9IDA7CisjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIHN0YXRpYyBpbnQgZGVidWcgPSAwOworI2VuZGlmCiBzdGF0aWMgaW50IGNoYW5uZWwgPSAwOwogc3RhdGljIGludCBtb2RlID0gMDsKIApAQCAtNjEsOCArMTAwLDE0IEBACiBzdGF0aWMgY29uc3QgY2hhciBpcHdfbW9kZXNbXSA9IHsKIAknYScsICdiJywgJ2cnLCAnPycKIH07CitzdGF0aWMgaW50IGFudGVubmEgPSBDRkdfU1lTX0FOVEVOTkFfQk9USDsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKK3N0YXRpYyBpbnQgcnRhcF9pZmFjZSA9IDA7ICAgICAvKiBkZWY6IDAgLS0gZG8gbm90IGNyZWF0ZSBydGFwIGludGVyZmFjZSAqLworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogc3RhdGljIGludCBxb3NfZW5hYmxlID0gMDsKIHN0YXRpYyBpbnQgcW9zX2J1cnN0X2VuYWJsZSA9IDA7CiBzdGF0aWMgaW50IHFvc19ub19hY2tfbWFzayA9IDA7CkBAIC0xMjYsNyArMTcxLDcgQEAKIAkJCQkgICAgICAgKnFvc19wYXJhbSk7CiBzdGF0aWMgaW50IGlwd19zZW5kX3Fvc19pbmZvX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CiAJCQkJICAgICAqcW9zX3BhcmFtKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmlwd19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpOwpAQCAtMTI2OSw2ICsxMzE0LDEwNSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoY21kX2xvZywgU19JUlVHTywgc2hvd19jbWRfbG9nLCBOVUxMKTsKIAorI2lmZGVmIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTCitzdGF0aWMgdm9pZCBpcHdfcHJvbV9mcmVlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdik7CitzdGF0aWMgaW50IGlwd19wcm9tX2FsbG9jKHN0cnVjdCBpcHdfcHJpdiAqcHJpdik7CitzdGF0aWMgc3NpemVfdCBzdG9yZV9ydGFwX2lmYWNlKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCWludCByYyA9IDA7CisKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoYnVmWzBdKSB7CisJY2FzZSAnMCc6CisJCWlmICghcnRhcF9pZmFjZSkKKwkJCXJldHVybiBjb3VudDsKKworCQlpZiAobmV0aWZfcnVubmluZyhwcml2LT5wcm9tX25ldF9kZXYpKSB7CisJCQlJUFdfV0FSTklORygiSW50ZXJmYWNlIGlzIHVwLiAgQ2Fubm90IHVucmVnaXN0ZXIuXG4iKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCisJCWlwd19wcm9tX2ZyZWUocHJpdik7CisJCXJ0YXBfaWZhY2UgPSAwOworCQlicmVhazsKKworCWNhc2UgJzEnOgorCQlpZiAocnRhcF9pZmFjZSkKKwkJCXJldHVybiBjb3VudDsKKworCQlyYyA9IGlwd19wcm9tX2FsbG9jKHByaXYpOworCQlpZiAoIXJjKQorCQkJcnRhcF9pZmFjZSA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJjKSB7CisJCUlQV19FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIHByb21pc2N1b3VzIG5ldHdvcmsgIgorCQkJICAiZGV2aWNlIChlcnJvciAlZCkuXG4iLCByYyk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3J0YXBfaWZhY2Uoc3RydWN0IGRldmljZSAqZCwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlpZiAocnRhcF9pZmFjZSkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCBwcml2LT5wcm9tX25ldF9kZXYtPm5hbWUpOworCWVsc2UgeworCQlidWZbMF0gPSAnLSc7CisJCWJ1ZlsxXSA9ICcxJzsKKwkJYnVmWzJdID0gJ1wwJzsKKwkJcmV0dXJuIDM7CisJfQorfQorCitzdGF0aWMgREVWSUNFX0FUVFIocnRhcF9pZmFjZSwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcnRhcF9pZmFjZSwKKwkJICAgc3RvcmVfcnRhcF9pZmFjZSk7CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3J0YXBfZmlsdGVyKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCisJaWYgKCFwcml2LT5wcm9tX3ByaXYpIHsKKwkJSVBXX0VSUk9SKCJBdHRlbXB0aW5nIHRvIHNldCBmaWx0ZXIgd2l0aG91dCAiCisJCQkgICJydGFwX2lmYWNlIGVuYWJsZWQuXG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlwcml2LT5wcm9tX3ByaXYtPmZpbHRlciA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKworCUlQV19ERUJVR19JTkZPKCJTZXR0aW5nIHJ0YXAgZmlsdGVyIHRvICIgQklUX0ZNVDE2ICJcbiIsCisJCSAgICAgICBCSVRfQVJHMTYocHJpdi0+cHJvbV9wcml2LT5maWx0ZXIpKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19ydGFwX2ZpbHRlcihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0WCIsCisJCSAgICAgICBwcml2LT5wcm9tX3ByaXYgPyBwcml2LT5wcm9tX3ByaXYtPmZpbHRlciA6IDApOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocnRhcF9maWx0ZXIsIFNfSVdVU1IgfCBTX0lSVVNSLCBzaG93X3J0YXBfZmlsdGVyLAorCQkgICBzdG9yZV9ydGFwX2ZpbHRlcik7CisjZW5kaWYKKwogc3RhdGljIHNzaXplX3Qgc2hvd19zY2FuX2FnZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY2hhciAqYnVmKQogewpAQCAtMjAyNSwxNiArMjE2OSwxMSBAQAogCXJldHVybiBpcHdfc2VuZF9jbWRfc2ltcGxlKHByaXYsIElQV19DTURfSE9TVF9DT01QTEVURSk7CiB9CiAKLXN0YXRpYyBpbnQgaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXB3X3N5c19jb25maWcgKmNvbmZpZykKK3N0YXRpYyBpbnQgaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7Ci0JaWYgKCFwcml2IHx8ICFjb25maWcpIHsKLQkJSVBXX0VSUk9SKCJJbnZhbGlkIGFyZ3NcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIGlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9TWVNURU1fQ09ORklHLCBzaXplb2YoKmNvbmZpZyksCi0JCQkJY29uZmlnKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1NZU1RFTV9DT05GSUcsCisJCQkJc2l6ZW9mKHByaXYtPnN5c19jb25maWcpLAorCQkJCSZwcml2LT5zeXNfY29uZmlnKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9zc2lkKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggKiBzc2lkLCBpbnQgbGVuKQpAQCAtMzEwNCwxMCArMzI0MywxMCBAQAogCiAKIHN0cnVjdCBpcHdfZncgewotCXUzMiB2ZXI7Ci0JdTMyIGJvb3Rfc2l6ZTsKLQl1MzIgdWNvZGVfc2l6ZTsKLQl1MzIgZndfc2l6ZTsKKwlfX2xlMzIgdmVyOworCV9fbGUzMiBib290X3NpemU7CisJX19sZTMyIHVjb2RlX3NpemU7CisJX19sZTMyIGZ3X3NpemU7CiAJdTggZGF0YVswXTsKIH07CiAKQEAgLTMxMzEsOCArMzI3MCw4IEBACiAKIAlmdyA9ICh2b2lkICopKCpyYXcpLT5kYXRhOwogCi0JaWYgKCgqcmF3KS0+c2l6ZSA8IHNpemVvZigqZncpICsKLQkgICAgZnctPmJvb3Rfc2l6ZSArIGZ3LT51Y29kZV9zaXplICsgZnctPmZ3X3NpemUpIHsKKwlpZiAoKCpyYXcpLT5zaXplIDwgc2l6ZW9mKCpmdykgKyBsZTMyX3RvX2NwdShmdy0+Ym9vdF9zaXplKSArCisJICAgIGxlMzJfdG9fY3B1KGZ3LT51Y29kZV9zaXplKSArIGxlMzJfdG9fY3B1KGZ3LT5md19zaXplKSkgewogCQlJUFdfRVJST1IoIiVzIGlzIHRvbyBzbWFsbCBvciBjb3JydXB0ICglemQpXG4iLAogCQkJICBuYW1lLCAoKnJhdyktPnNpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyMzcsOCArMzM3Niw5IEBACiAKIAlmdyA9ICh2b2lkICopcmF3LT5kYXRhOwogCWJvb3RfaW1nID0gJmZ3LT5kYXRhWzBdOwotCXVjb2RlX2ltZyA9ICZmdy0+ZGF0YVtmdy0+Ym9vdF9zaXplXTsKLQlmd19pbWcgPSAmZnctPmRhdGFbZnctPmJvb3Rfc2l6ZSArIGZ3LT51Y29kZV9zaXplXTsKKwl1Y29kZV9pbWcgPSAmZnctPmRhdGFbbGUzMl90b19jcHUoZnctPmJvb3Rfc2l6ZSldOworCWZ3X2ltZyA9ICZmdy0+ZGF0YVtsZTMyX3RvX2NwdShmdy0+Ym9vdF9zaXplKSArCisJCQkgICBsZTMyX3RvX2NwdShmdy0+dWNvZGVfc2l6ZSldOwogCiAJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJvcjsKQEAgLTMyNzIsNyArMzQxMiw3IEBACiAJCQlJUFdfTklDX1NSQU1fVVBQRVJfQk9VTkQgLSBJUFdfTklDX1NSQU1fTE9XRVJfQk9VTkQpOwogCiAJLyogRE1BIHRoZSBpbml0aWFsIGJvb3QgZmlybXdhcmUgaW50byB0aGUgZGV2aWNlICovCi0JcmMgPSBpcHdfbG9hZF9maXJtd2FyZShwcml2LCBib290X2ltZywgZnctPmJvb3Rfc2l6ZSk7CisJcmMgPSBpcHdfbG9hZF9maXJtd2FyZShwcml2LCBib290X2ltZywgbGUzMl90b19jcHUoZnctPmJvb3Rfc2l6ZSkpOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBib290IGZpcm13YXJlOiAlZFxuIiwgcmMpOwogCQlnb3RvIGVycm9yOwpAQCAtMzI5NCw3ICszNDM0LDcgQEAKIAlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9SVywgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUpOwogCiAJLyogRE1BIHRoZSB1Y29kZSBpbnRvIHRoZSBkZXZpY2UgKi8KLQlyYyA9IGlwd19sb2FkX3Vjb2RlKHByaXYsIHVjb2RlX2ltZywgZnctPnVjb2RlX3NpemUpOworCXJjID0gaXB3X2xvYWRfdWNvZGUocHJpdiwgdWNvZGVfaW1nLCBsZTMyX3RvX2NwdShmdy0+dWNvZGVfc2l6ZSkpOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCB1Y29kZTogJWRcbiIsIHJjKTsKIAkJZ290byBlcnJvcjsKQEAgLTMzMDQsNyArMzQ0NCw3IEBACiAJaXB3X3N0b3BfbmljKHByaXYpOwogCiAJLyogRE1BIGJzcyBmaXJtd2FyZSBpbnRvIHRoZSBkZXZpY2UgKi8KLQlyYyA9IGlwd19sb2FkX2Zpcm13YXJlKHByaXYsIGZ3X2ltZywgZnctPmZ3X3NpemUpOworCXJjID0gaXB3X2xvYWRfZmlybXdhcmUocHJpdiwgZndfaW1nLCBsZTMyX3RvX2NwdShmdy0+Zndfc2l6ZSkpOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBmaXJtd2FyZTogJWRcbiIsIHJjKTsKIAkJZ290byBlcnJvcjsKQEAgLTM3MDAsNyArMzg0MCwxNyBAQAogc3RhdGljIHZvaWQgaXB3X3N5c3RlbV9jb25maWcodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwotCWlwd19zZW5kX3N5c3RlbV9jb25maWcocHJpdiwgJnByaXYtPnN5c19jb25maWcpOworCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwlpZiAocHJpdi0+cHJvbV9uZXRfZGV2ICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAxOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMTsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDE7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDE7CisJfQorI2VuZGlmCisKKwlpcHdfc2VuZF9zeXN0ZW1fY29uZmlnKHByaXYpOwogfQogCiBzdHJ1Y3QgaXB3X3N0YXR1c19jb2RlIHsKQEAgLTM3NzEsNiArMzkyMSwxMyBAQAogCW1lbXNldChhdmcsIDAsIHNpemVvZigqYXZnKSk7CiB9CiAKKyNkZWZpbmUgREVQVEhfUlNTSSA4CisjZGVmaW5lIERFUFRIX05PSVNFIDE2CitzdGF0aWMgczE2IGV4cG9uZW50aWFsX2F2ZXJhZ2UoczE2IHByZXZfYXZnLCBzMTYgdmFsLCB1OCBkZXB0aCkKK3sKKwlyZXR1cm4gKChkZXB0aC0xKSpwcmV2X2F2ZyArICB2YWwpL2RlcHRoOworfQorCiBzdGF0aWMgdm9pZCBhdmVyYWdlX2FkZChzdHJ1Y3QgYXZlcmFnZSAqYXZnLCBzMTYgdmFsKQogewogCWF2Zy0+c3VtIC09IGF2Zy0+ZW50cmllc1thdmctPnBvc107CkBAIC0zODAwLDggKzM5NTcsOCBAQAogCXByaXYtPnF1YWxpdHkgPSAwOwogCiAJYXZlcmFnZV9pbml0KCZwcml2LT5hdmVyYWdlX21pc3NlZF9iZWFjb25zKTsKLQlhdmVyYWdlX2luaXQoJnByaXYtPmF2ZXJhZ2VfcnNzaSk7Ci0JYXZlcmFnZV9pbml0KCZwcml2LT5hdmVyYWdlX25vaXNlKTsKKwlwcml2LT5leHBfYXZnX3Jzc2kgPSAtNjA7CisJcHJpdi0+ZXhwX2F2Z19ub2lzZSA9IC04NSArIDB4MTAwOwogCiAJcHJpdi0+bGFzdF9yYXRlID0gMDsKIAlwcml2LT5sYXN0X21pc3NlZF9iZWFjb25zID0gMDsKQEAgLTQwMDgsNyArNDE2NSw3IEBACiAJSVBXX0RFQlVHX1NUQVRTKCJUeCBxdWFsaXR5ICAgOiAlM2QlJSAoJXUgZXJyb3JzLCAldSBwYWNrZXRzKVxuIiwKIAkJCXR4X3F1YWxpdHksIHR4X2ZhaWx1cmVzX2RlbHRhLCB0eF9wYWNrZXRzX2RlbHRhKTsKIAotCXJzc2kgPSBhdmVyYWdlX3ZhbHVlKCZwcml2LT5hdmVyYWdlX3Jzc2kpOworCXJzc2kgPSBwcml2LT5leHBfYXZnX3Jzc2k7CiAJc2lnbmFsX3F1YWxpdHkgPQogCSAgICAoMTAwICoKIAkgICAgIChwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgLSBwcml2LT5pZWVlLT53b3JzdF9yc3NpKSAqCkBAIC00MTg1LDcgKzQzNDIsNyBAQAogCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKIAkJCQkJCSAgICZwcml2LT5zeXN0ZW1fY29uZmlnKTsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAjZGVmaW5lIElQV19HRVRfUEFDS0VUX1NUWVBFKHgpIFdMQU5fRkNfR0VUX1NUWVBFKCBcCiAJCQkgbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSh4KSktPmZyYW1lX2N0bCkpCiAJCQkJCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FVVEgpICYmCkBAIC00NDgyLDYgKzQ2MzksMjQgQEAKIAkJCQkgJiYgcHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpCiAJCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwKIAkJCQkJCSAgICZwcml2LT5yZXF1ZXN0X3NjYW4sIEhaKTsKKworCQkJLyogU2VuZCBhbiBlbXB0eSBldmVudCB0byB1c2VyIHNwYWNlLgorCQkJICogV2UgZG9uJ3Qgc2VuZCB0aGUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgZXZlbnQgYmVjYXVzZQorCQkJICogaXQgd291bGQgcmVxdWlyZSB1cyB0byBkbyBjb21wbGV4IHRyYW5zY29kaW5nLCBhbmQKKwkJCSAqIHdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIHdvcmsgZG9uZSBpbiB0aGUgaXJxIGhhbmRsZXIKKwkJCSAqIFVzZSBhIHJlcXVlc3QgdG8gZXh0cmFjdCB0aGUgZGF0YS4KKwkJCSAqIEFsc28sIHdlIGdlbmVyYXRlIHRoaXMgZXZlbiBmb3IgYW55IHNjYW4sIHJlZ2FyZGxlc3MKKwkJCSAqIG9uIGhvdyB0aGUgc2NhbiB3YXMgaW5pdGlhdGVkLiBVc2VyIHNwYWNlIGNhbiBqdXN0CisJCQkgKiBzeW5jIG9uIHBlcmlvZGljIHNjYW4gdG8gZ2V0IGZyZXNoIGRhdGEuLi4KKwkJCSAqIEplYW4gSUkgKi8KKwkJCWlmICh4LT5zdGF0dXMgPT0gU0NBTl9DT01QTEVURURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCisJCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPm5ldF9kZXYsIFNJT0NHSVdTQ0FOLAorCQkJCQkJICAgICZ3cnF1LCBOVUxMKTsKKwkJCX0KIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ1NzcsMTEgKzQ3NTIsMTAgQEAKIAogCWNhc2UgSE9TVF9OT1RJRklDQVRJT05fTk9JU0VfU1RBVFM6ewogCQkJaWYgKG5vdGlmLT5zaXplID09IHNpemVvZih1MzIpKSB7Ci0JCQkJcHJpdi0+bGFzdF9ub2lzZSA9Ci0JCQkJICAgICh1OCkgKGxlMzJfdG9fY3B1KG5vdGlmLT51Lm5vaXNlLnZhbHVlKSAmCi0JCQkJCSAgMHhmZik7Ci0JCQkJYXZlcmFnZV9hZGQoJnByaXYtPmF2ZXJhZ2Vfbm9pc2UsCi0JCQkJCSAgICBwcml2LT5sYXN0X25vaXNlKTsKKwkJCQlwcml2LT5leHBfYXZnX25vaXNlID0KKwkJCQkgICAgZXhwb25lbnRpYWxfYXZlcmFnZShwcml2LT5leHBfYXZnX25vaXNlLAorCQkJCSAgICAodTgpIChsZTMyX3RvX2NwdShub3RpZi0+dS5ub2lzZS52YWx1ZSkgJiAweGZmKSwKKwkJCQkgICAgREVQVEhfTk9JU0UpOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC02MTcwLDggKzYzNDQsNiBAQAogewogCS8qIG1ha2Ugc3VyZSBXUEEgaXMgZW5hYmxlZCAqLwogCWlwd193cGFfZW5hYmxlKHByaXYsIDEpOwotCi0JaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKIH0KIAogc3RhdGljIGludCBpcHdfc2V0X3Jzbl9jYXBhKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKQEAgLTYzNjUsNiArNjUzNyw3IEBACiAKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJCXJldCA9IGlwd193cGFfZW5hYmxlKHByaXYsIHBhcmFtLT52YWx1ZSk7CisJCWlwd19kaXNhc3NvY2lhdGUocHJpdik7CiAJCWJyZWFrOwogCiAJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgpAQCAtNjUwNiw3ICs2Njc5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAKIC8qIFFvUyAqLwogLyoKQEAgLTY4NTMsNjEgKzcwMjYsNTUgQEAKIAlyZXR1cm4gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV0gLSAxOwogfQogCi0vKgotKiBhZGQgUW9TIHBhcmFtZXRlciB0byB0aGUgVFggY29tbWFuZAotKi8KLXN0YXRpYyBpbnQgaXB3X3Fvc19zZXRfdHhfcXVldWVfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJCXUxNiBwcmlvcml0eSwKLQkJCQkJc3RydWN0IHRmZF9kYXRhICp0ZmQsIHU4IHVuaWNhc3QpCitzdGF0aWMgaW50IGlwd19pc19xb3NfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJldCA9IDA7Ci0JaW50IHR4X3F1ZXVlX2lkID0gMDsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgKnFvc19kYXRhID0gTlVMTDsKIAlpbnQgYWN0aXZlLCBzdXBwb3J0ZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCAqZGFkZHIgPSBza2ItPmRhdGEgKyBFVEhfQUxFTjsKKwlpbnQgdW5pY2FzdCA9ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkYWRkcik7CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpCiAJCXJldHVybiAwOwogCiAJcW9zX2RhdGEgPSAmcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwotCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgewogCQlpZiAodW5pY2FzdCA9PSAwKQogCQkJcW9zX2RhdGEtPmFjdGl2ZSA9IDA7CiAJCWVsc2UKIAkJCXFvc19kYXRhLT5hY3RpdmUgPSBxb3NfZGF0YS0+c3VwcG9ydGVkOwogCX0KLQogCWFjdGl2ZSA9IHFvc19kYXRhLT5hY3RpdmU7CiAJc3VwcG9ydGVkID0gcW9zX2RhdGEtPnN1cHBvcnRlZDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKLQogCUlQV19ERUJVR19RT1MoIlFvUyAgJWQgbmV0d29yayBpcyBRb1MgYWN0aXZlICVkICBzdXBwb3J0ZWQgJWQgICIKIAkJICAgICAgInVuaWNhc3QgJWRcbiIsCiAJCSAgICAgIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUsIGFjdGl2ZSwgc3VwcG9ydGVkLCB1bmljYXN0KTsKLQlpZiAoYWN0aXZlICYmIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpIHsKLQkJcmV0ID0gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV07Ci0JCXR4X3F1ZXVlX2lkID0gcmV0IC0gMTsKLQkJSVBXX0RFQlVHX1FPUygiUW9TIHBhY2tldCBwcmlvcml0eSBpcyAlZCBcbiIsIHByaW9yaXR5KTsKLQkJaWYgKHByaW9yaXR5IDw9IDcpIHsKLQkJCXRmZC0+dHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9RT1NfRU5BQkxFRDsKLQkJCXRmZC0+dGZkLnRmZF8yNi5tY2hkci5xb3NfY3RybCA9IHByaW9yaXR5OwotCQkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLmZyYW1lX2N0bCB8PQotCQkJICAgIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKKwlpZiAoYWN0aXZlICYmIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpCisJCXJldHVybiAxOwogCi0JCQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX25vX2Fja19tYXNrICYKLQkJCSAgICAoMVVMIDw8IHR4X3F1ZXVlX2lkKSkgewotCQkJCXRmZC0+dHhfZmxhZ3MgJj0gfkRDVF9GTEFHX0FDS19SRVFEOwotCQkJCXRmZC0+dGZkLnRmZF8yNi5tY2hkci5xb3NfY3RybCB8PQotCQkJCSAgICBDVFJMX1FPU19OT19BQ0s7Ci0JCQl9Ci0JCX0KKwlyZXR1cm4gMDsKKworfQorLyoKKyogYWRkIFFvUyBwYXJhbWV0ZXIgdG8gdGhlIFRYIGNvbW1hbmQKKyovCitzdGF0aWMgaW50IGlwd19xb3Nfc2V0X3R4X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCQl1MTYgcHJpb3JpdHksCisJCQkJCXN0cnVjdCB0ZmRfZGF0YSAqdGZkKQoreworCWludCB0eF9xdWV1ZV9pZCA9IDA7CisKKworCXR4X3F1ZXVlX2lkID0gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV0gLSAxOworCXRmZC0+dHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9RT1NfRU5BQkxFRDsKKworCWlmIChwcml2LT5xb3NfZGF0YS5xb3Nfbm9fYWNrX21hc2sgJiAoMVVMIDw8IHR4X3F1ZXVlX2lkKSkgeworCQl0ZmQtPnR4X2ZsYWdzICY9IH5EQ1RfRkxBR19BQ0tfUkVRRDsKKwkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLnFvc19jdHJsIHw9IENUUkxfUU9TX05PX0FDSzsKIAl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNjk3Nyw3ICs3MTQ0LDcgQEAKIAkJCQlxb3NfcGFyYW0pOwogfQogCi0jZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9RT1MgKi8KIAogc3RhdGljIGludCBpcHdfYXNzb2NpYXRlX25ldHdvcmsoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCkBAIC03MTE2LDcgKzcyODMsNyBAQAogCWVsc2UKIAkJcHJpdi0+c3lzX2NvbmZpZy5hbnN3ZXJfYnJvYWRjYXN0X3NzaWRfcHJvYmUgPSAwOwogCi0JZXJyID0gaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2LCAmcHJpdi0+c3lzX2NvbmZpZyk7CisJZXJyID0gaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2KTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19IQygiQXR0ZW1wdCB0byBzZW5kIHN5cyBjb25maWcgY29tbWFuZCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIGVycjsKQEAgLTcxNDEsNyArNzMwOCw3IEBACiAKIAlwcml2LT5hc3NvY19uZXR3b3JrID0gbmV0d29yazsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAJaXB3X3Fvc19hc3NvY2lhdGlvbihwcml2LCBuZXR3b3JrKTsKICNlbmRpZgogCkBAIC03NDE1LDcgKzc1ODIsNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9SQURJT1RBUAogc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkJICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCiAJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQpAQCAtNzQzMiwxNSArNzU5OSw3IEBACiAJLyogTWFnaWMgc3RydWN0IHRoYXQgc2xvdHMgaW50byB0aGUgcmFkaW90YXAgaGVhZGVyIC0tIG5vIHJlYXNvbgogCSAqIHRvIGJ1aWxkIHRoaXMgbWFudWFsbHkgZWxlbWVudCBieSBlbGVtZW50LCB3ZSBjYW4gd3JpdGUgaXQgbXVjaAogCSAqIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB3ZSBjYW4gcGFyc2UgaXQuIE9SREVSIE1BVFRFUlMgSEVSRSAqLwotCXN0cnVjdCBpcHdfcnRfaGRyIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgcnRfaGRyOwotCQl1OCBydF9mbGFnczsJLyogcmFkaW90YXAgcGFja2V0IGZsYWdzICovCi0JCXU4IHJ0X3JhdGU7CS8qIHJhdGUgaW4gNTAwa2IvcyAqLwotCQl1MTYgcnRfY2hhbm5lbDsJLyogY2hhbm5lbCBpbiBtaHogKi8KLQkJdTE2IHJ0X2NoYml0bWFzazsJLyogY2hhbm5lbCBiaXRmaWVsZCAqLwotCQlzOCBydF9kYm1zaWduYWw7CS8qIHNpZ25hbCBpbiBkYk0sIGtsdWdlZCB0byBzaWduZWQgKi8KLQkJdTggcnRfYW50ZW5uYTsJLyogYW50ZW5uYSBudW1iZXIgKi8KLQl9ICppcHdfcnQ7CisJc3RydWN0IGlwd19ydF9oZHIgKmlwd19ydDsKIAogCXNob3J0IGxlbiA9IGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpOwogCkBAIC03NDk0LDkgKzc2NTMsMTEgQEAKIAkvKiBCaWcgYml0ZmllbGQgb2YgYWxsIHRoZSBmaWVsZHMgd2UgcHJvdmlkZSBpbiByYWRpb3RhcCAqLwogCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPQogCSAgICAoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkgfAogCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKIAkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CiAJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSkgfAogCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEpKTsKIAogCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLwpAQCAtNzU4Miw2ICs3NzQzLDIxNyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworI2RlZmluZSBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcG9uc2UoZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgXAorICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCApCisKKyNkZWZpbmUgaWVlZTgwMjExX2lzX21hbmFnZW1lbnQoZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpCisKKyNkZWZpbmUgaWVlZTgwMjExX2lzX2NvbnRyb2woZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkKKworI2RlZmluZSBpZWVlODAyMTFfaXNfZGF0YShmYykgXAorICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKKworI2RlZmluZSBpZWVlODAyMTFfaXNfYXNzb2NfcmVxdWVzdChmYykgXAorICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKQorCisjZGVmaW5lIGllZWU4MDIxMV9pc19yZWFzc29jX3JlcXVlc3QoZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKQorCitzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX3Byb21pc2N1b3VzX3J4KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGlwd19yeF9mcmFtZSAqZnJhbWUgPSAmcGt0LT51LmZyYW1lOworCXN0cnVjdCBpcHdfcnRfaGRyICppcHdfcnQ7CisKKwkvKiBGaXJzdCBjYWNoZSBhbnkgaW5mb3JtYXRpb24gd2UgbmVlZCBiZWZvcmUgd2Ugb3ZlcndyaXRlCisJICogdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoZSBza2IgZnJvbSB0aGUgaGFyZHdhcmUgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXUxNiBjaGFubmVsID0gZnJhbWUtPnJlY2VpdmVkX2NoYW5uZWw7CisJdTggcGh5X2ZsYWdzID0gZnJhbWUtPmFudGVubmFBbmRQaHk7CisJczggc2lnbmFsID0gZnJhbWUtPnJzc2lfZGJtIC0gSVBXX1JTU0lfVE9fREJNOworCXM4IG5vaXNlID0gZnJhbWUtPm5vaXNlOworCXU4IHJhdGUgPSBmcmFtZS0+cmF0ZTsKKwlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKTsKKwl1NjQgdHNmID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBoZHJfb25seSA9IDA7CisJdTE2IGZpbHRlciA9IHByaXYtPnByb21fcHJpdi0+ZmlsdGVyOworCisJLyogSWYgdGhlIGZpbHRlciBpcyBzZXQgdG8gbm90IGluY2x1ZGUgUnggZnJhbWVzIHRoZW4gcmV0dXJuICovCisJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX1JYKQorCQlyZXR1cm47CisKKwkvKiBXZSByZWNlaXZlZCBkYXRhIGZyb20gdGhlIEhXLCBzbyBzdG9wIHRoZSB3YXRjaGRvZyAqLworCXByaXYtPnByb21fbmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJaWYgKHVubGlrZWx5KChsZW4gKyBJUFdfUlhfRlJBTUVfU0laRSkgPiBza2JfdGFpbHJvb20ocnhiLT5za2IpKSkgeworCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlJUFdfREVCVUdfRFJPUCgiQ29ycnVwdGlvbiBkZXRlY3RlZCEgT2ggbm8hXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPnByb21fbmV0X2RldikpKSB7CisJCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIExpYnBjYXAgMC45LjMrIGNhbiBoYW5kbGUgdmFyaWFibGUgbGVuZ3RoIHJhZGlvdGFwLCBzbyB3ZSdsbCB1c2UKKwkgKiB0aGF0IG5vdyAqLworCWlmIChsZW4gPiBJUFdfUlhfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSB7CisJCS8qIEZJWE1FOiBTaG91bGQgYWxsb2MgYmlnZ2VyIHNrYiBpbnN0ZWFkICovCisJCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgdG9vIGxhcmdlIHBhY2tldCBpbiBtb25pdG9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWhkciA9ICh2b2lkICopcnhiLT5za2ItPmRhdGEgKyBJUFdfUlhfRlJBTUVfU0laRTsKKwlpZiAoaWVlZTgwMjExX2lzX21hbmFnZW1lbnQoaGRyLT5mcmFtZV9jdGwpKSB7CisJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19NR01UKQorCQkJcmV0dXJuOworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTUdNVF9IRUFERVJfT05MWSkKKwkJCWhkcl9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19jb250cm9sKGhkci0+ZnJhbWVfY3RsKSkgeworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fQ1RMKQorCQkJcmV0dXJuOworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fQ1RMX0hFQURFUl9PTkxZKQorCQkJaGRyX29ubHkgPSAxOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jdGwpKSB7CisJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19EQVRBKQorCQkJcmV0dXJuOworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fREFUQV9IRUFERVJfT05MWSkKKwkJCWhkcl9vbmx5ID0gMTsKKwl9CisKKwkvKiBDb3B5IHRoZSBTS0Igc2luY2UgdGhpcyBpcyBmb3IgdGhlIHByb21pc2N1b3VzIHNpZGUgKi8KKwlza2IgPSBza2JfY29weShyeGItPnNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCUlQV19FUlJPUigic2tiX2Nsb25lIGZhaWxlZCBmb3IgcHJvbWlzY3VvdXMgY29weS5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogY29weSB0aGUgZnJhbWUgZGF0YSB0byB3cml0ZSBhZnRlciB3aGVyZSB0aGUgcmFkaW90YXAgaGVhZGVyIGdvZXMgKi8KKwlpcHdfcnQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKworCWlmIChoZHJfb25seSkKKwkJbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jdGwpOworCisJbWVtY3B5KGlwd19ydC0+cGF5bG9hZCwgaGRyLCBsZW4pOworCisJLyogWmVybyB0aGUgcmFkaW90YXAgc3RhdGljIGJ1ZmZlciAgLi4uICBXZSBvbmx5IG5lZWQgdG8gemVybyB0aGUgYnl0ZXMKKwkgKiBOT1QgcGFydCBvZiBvdXIgcmVhbCBoZWFkZXIsIHNhdmVzIGEgbGl0dGxlIHRpbWUuCisJICoKKwkgKiBObyBsb25nZXIgbmVjZXNzYXJ5IHNpbmNlIHdlIGZpbGwgaW4gYWxsIG91ciBkYXRhLiAgUHVyZ2UgYmVmb3JlCisJICogbWVyZ2luZyBwYXRjaCBvZmZpY2lhbGx5LgorCSAqIG1lbXNldChyeGItPnNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkciksIDAsCisJICogICAgICAgIElFRUU4MDIxMV9SQURJT1RBUF9IRFJMRU4gLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKTsKKwkgKi8KKworCWlwd19ydC0+cnRfaGRyLml0X3ZlcnNpb24gPSBQS1RIRFJfUkFESU9UQVBfVkVSU0lPTjsKKwlpcHdfcnQtPnJ0X2hkci5pdF9wYWQgPSAwOwkvKiBhbHdheXMgZ29vZCB0byB6ZXJvICovCisJaXB3X3J0LT5ydF9oZHIuaXRfbGVuID0gc2l6ZW9mKCppcHdfcnQpOwkvKiB0b3RhbCBoZWFkZXIrZGF0YSAqLworCisJLyogU2V0IHRoZSBzaXplIG9mIHRoZSBza2IgdG8gdGhlIHNpemUgb2YgdGhlIGZyYW1lICovCisJc2tiX3B1dChza2IsIGlwd19ydC0+cnRfaGRyLml0X2xlbiArIGxlbik7CisKKwkvKiBCaWcgYml0ZmllbGQgb2YgYWxsIHRoZSBmaWVsZHMgd2UgcHJvdmlkZSBpbiByYWRpb3RhcCAqLworCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPQorCSAgICAoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKKwkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEpKTsKKworCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLworCWlwd19ydC0+cnRfZmxhZ3MgPSAwOworCisJaXB3X3J0LT5ydF90c2YgPSB0c2Y7CisKKwkvKiBDb252ZXJ0IHRvIERCTSAqLworCWlwd19ydC0+cnRfZGJtc2lnbmFsID0gc2lnbmFsOworCWlwd19ydC0+cnRfZGJtbm9pc2UgPSBub2lzZTsKKworCS8qIENvbnZlcnQgdGhlIGNoYW5uZWwgZGF0YSBhbmQgc2V0IHRoZSBmbGFncyAqLworCWlwd19ydC0+cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGllZWU4MDIxMWNoYW4ybWh6KGNoYW5uZWwpKTsKKwlpZiAoY2hhbm5lbCA+IDE0KSB7CS8qIDgwMi4xMWEgKi8KKwkJaXB3X3J0LT5ydF9jaGJpdG1hc2sgPQorCQkgICAgY3B1X3RvX2xlMTYoKElFRUU4MDIxMV9DSEFOX09GRE0gfCBJRUVFODAyMTFfQ0hBTl81R0haKSk7CisJfSBlbHNlIGlmIChwaHlfZmxhZ3MgJiAoMSA8PCA1KSkgewkvKiA4MDIuMTFiICovCisJCWlwd19ydC0+cnRfY2hiaXRtYXNrID0KKwkJICAgIGNwdV90b19sZTE2KChJRUVFODAyMTFfQ0hBTl9DQ0sgfCBJRUVFODAyMTFfQ0hBTl8yR0haKSk7CisJfSBlbHNlIHsJCS8qIDgwMi4xMWcgKi8KKwkJaXB3X3J0LT5ydF9jaGJpdG1hc2sgPQorCQkgICAgKElFRUU4MDIxMV9DSEFOX09GRE0gfCBJRUVFODAyMTFfQ0hBTl8yR0haKTsKKwl9CisKKwkvKiBzZXQgdGhlIHJhdGUgaW4gbXVsdGlwbGVzIG9mIDUwMGsvcyAqLworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgSVBXX1RYX1JBVEVfMU1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAyOworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzJNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gNDsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV81TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDEwOworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzZNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMTI7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfOU1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAxODsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8xMU1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAyMjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8xMk1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAyNDsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8xOE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAzNjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8yNE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSA0ODsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8zNk1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSA3MjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV80OE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSA5NjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV81NE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAxMDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIGFudGVubmEgbnVtYmVyICovCisJaXB3X3J0LT5ydF9hbnRlbm5hID0gKHBoeV9mbGFncyAmIDMpOworCisJLyogc2V0IHRoZSBwcmVhbWJsZSBmbGFnIGlmIHdlIGhhdmUgaXQgKi8KKwlpZiAocGh5X2ZsYWdzICYgKDEgPDwgNikpCisJCWlwd19ydC0+cnRfZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfU0hPUlRQUkU7CisKKwlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHNrYi0+bGVuKTsKKworCWlmICghaWVlZTgwMjExX3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgc2tiLCBzdGF0cykpIHsKKwkJcHJpdi0+cHJvbV9wcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBpc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIpCiB7CkBAIC03ODA4LDE1ICs4MTgwLDIxIEBACiAKIAkJCQlwcml2LT5yeF9wYWNrZXRzKys7CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCWlmIChwcml2LT5wcm9tX25ldF9kZXYgJiYgbmV0aWZfcnVubmluZyhwcml2LT5wcm9tX25ldF9kZXYpKQorCQlpcHdfaGFuZGxlX3Byb21pc2N1b3VzX3J4KHByaXYsIHJ4YiwgJnN0YXRzKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogCQkJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKLQkJCQkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHByaXYsCi0JCQkJCQkJCSAgICAgICByeGIsCi0JCQkJCQkJCSAgICAgICAmc3RhdHMpOworI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCisKKyAgICAgICAgICAgICAgICBpcHdfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3IocHJpdiwKKwkJCQkJICAgICAgIHJ4YiwKKwkJCQkJICAgICAgICZzdGF0cyk7CiAjZWxzZQotCQkJCQlpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIHJ4YiwKLQkJCQkJCQkgICAgICAgJnN0YXRzKTsKKwkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldChwcml2LCByeGIsCisJCQkJICAgICAgICZzdGF0cyk7CiAjZW5kaWYKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNzgzNyw5ICs4MjE1LDkgQEAKIAkJCQlpZiAobmV0d29ya19wYWNrZXQgJiYgcHJpdi0+YXNzb2NfbmV0d29yaykgewogCQkJCQlwcml2LT5hc3NvY19uZXR3b3JrLT5zdGF0cy5yc3NpID0KIAkJCQkJICAgIHN0YXRzLnJzc2k7Ci0JCQkJCWF2ZXJhZ2VfYWRkKCZwcml2LT5hdmVyYWdlX3Jzc2ksCi0JCQkJCQkgICAgc3RhdHMucnNzaSk7Ci0JCQkJCXByaXYtPmxhc3RfcnhfcnNzaSA9IHN0YXRzLnJzc2k7CisJCQkJCXByaXYtPmV4cF9hdmdfcnNzaSA9CisJCQkJCSAgICBleHBvbmVudGlhbF9hdmVyYWdlKHByaXYtPmV4cF9hdmdfcnNzaSwKKwkJCQkJICAgIHN0YXRzLnJzc2ksIERFUFRIX1JTU0kpOwogCQkJCX0KIAogCQkJCUlQV19ERUJVR19SWCgiRnJhbWU6IGxlbj0ldVxuIiwKQEAgLTc5ODIsMTAgKzgzNjAsMTAgQEAKIAkJSVBXX0RFQlVHX0lORk8oIkJpbmQgdG8gc3RhdGljIGNoYW5uZWwgJWRcbiIsIGNoYW5uZWwpOwogCQkvKiBUT0RPOiBWYWxpZGF0ZSB0aGF0IHByb3ZpZGVkIGNoYW5uZWwgaXMgaW4gcmFuZ2UgKi8KIAl9Ci0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKIAlpcHdfcW9zX2luaXQocHJpdiwgcW9zX2VuYWJsZSwgcW9zX2J1cnN0X2VuYWJsZSwKIAkJICAgICBidXJzdF9kdXJhdGlvbl9DQ0ssIGJ1cnN0X2R1cmF0aW9uX09GRE0pOwotI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIDE6CkBAIC03OTk2LDcgKzgzNzQsNyBAQAogI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKIAljYXNlIDI6CiAJCXByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX01PTklUT1I7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9SQURJT1RBUAorI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCiAJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwogI2Vsc2UKIAkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CkBAIC04MjUxLDcgKzg2MjksNyBAQAogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCiAJaWYgKHdycXUtPm1vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9SQURJT1RBUAogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKICNlbHNlCiAJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwpAQCAtODM3OSw3ICs4NzU3LDggQEAKIAkvKiBFdmVudCBjYXBhYmlsaXR5IChrZXJuZWwgKyBkcml2ZXIpICovCiAJcmFuZ2UtPmV2ZW50X2NhcGFbMF0gPSAoSVdfRVZFTlRfQ0FQQV9LXzAgfAogCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXVEhSU1BZKSB8Ci0JCQkJSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkpOworCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApIHwKKwkJCQlJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKIAlyYW5nZS0+ZXZlbnRfY2FwYVsxXSA9IElXX0VWRU5UX0NBUEFfS18xOwogCiAJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CkBAIC04NzM0LDYgKzkxMTMsNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmJpdHJhdGUudmFsdWUgPSBwcml2LT5sYXN0X3JhdGU7CisJd3JxdS0+Yml0cmF0ZS5maXhlZCA9IChwcml2LT5jb25maWcgJiBDRkdfRklYRURfUkFURSkgPyAxIDogMDsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlJUFdfREVCVUdfV1goIkdFVCBSYXRlIC0+ICVkIFxuIiwgd3JxdS0+Yml0cmF0ZS52YWx1ZSk7CiAJcmV0dXJuIDA7CkBAIC05MzUxLDcgKzk3MzEsNyBAQAogCUlQV19ERUJVR19XWCgiU0VUIE1PTklUT1I6ICVkICVkXG4iLCBlbmFibGUsIHBhcm1zWzFdKTsKIAlpZiAoZW5hYmxlKSB7CiAJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9SQURJT1RBUAogCQkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7CiAjZWxzZQogCQkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CkBAIC05NTc5LDggKzk5NTksOCBAQAogCX0KIAogCXdzdGF0cy0+cXVhbC5xdWFsID0gcHJpdi0+cXVhbGl0eTsKLQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBhdmVyYWdlX3ZhbHVlKCZwcml2LT5hdmVyYWdlX3Jzc2kpOwotCXdzdGF0cy0+cXVhbC5ub2lzZSA9IGF2ZXJhZ2VfdmFsdWUoJnByaXYtPmF2ZXJhZ2Vfbm9pc2UpOworCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHByaXYtPmV4cF9hdmdfcnNzaTsKKwl3c3RhdHMtPnF1YWwubm9pc2UgPSBwcml2LT5leHBfYXZnX25vaXNlOwogCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQgfCBJV19RVUFMX0xFVkVMX1VQREFURUQgfAogCSAgICBJV19RVUFMX05PSVNFX1VQREFURUQgfCBJV19RVUFMX0RCTTsKIApAQCAtOTYwOCw3ICs5OTg4LDkgQEAKIAlzeXNfY29uZmlnLT5kaXNhYmxlX3VuaWNhc3RfZGVjcnlwdGlvbiA9IDE7CiAJc3lzX2NvbmZpZy0+ZXhjbHVkZV9tdWx0aWNhc3RfdW5lbmNyeXB0ZWQgPSAwOwogCXN5c19jb25maWctPmRpc2FibGVfbXVsdGljYXN0X2RlY3J5cHRpb24gPSAxOwotCXN5c19jb25maWctPmFudGVubmFfZGl2ZXJzaXR5ID0gQ0ZHX1NZU19BTlRFTk5BX1NMT1dfRElWOworCWlmIChhbnRlbm5hIDwgQ0ZHX1NZU19BTlRFTk5BX0JPVEggfHwgYW50ZW5uYSA+IENGR19TWVNfQU5URU5OQV9CKQorCQlhbnRlbm5hID0gQ0ZHX1NZU19BTlRFTk5BX0JPVEg7CisJc3lzX2NvbmZpZy0+YW50ZW5uYV9kaXZlcnNpdHkgPSBhbnRlbm5hOwogCXN5c19jb25maWctPnBhc3NfY3JjX3RvX2hvc3QgPSAwOwkvKiBUT0RPOiBTZWUgaWYgMSBnaXZlcyB1cyBGQ1MgKi8KIAlzeXNfY29uZmlnLT5kb3QxMWdfYXV0b19kZXRlY3Rpb24gPSAwOwogCXN5c19jb25maWctPmVuYWJsZV9jdHNfdG9fc2VsZiA9IDA7CkBAIC05NjQ3LDExICsxMDAyOSwxMSBAQAogc3RhdGljIGludCBpcHdfdHhfc2tiKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiwKIAkJCSAgICAgaW50IHByaSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopCisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKQogCSAgICB0eGItPmZyYWdtZW50c1swXS0+ZGF0YTsKIAlpbnQgaSA9IDA7CiAJc3RydWN0IHRmZF9mcmFtZSAqdGZkOwotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAJaW50IHR4X2lkID0gaXB3X2dldF90eF9xdWV1ZV9udW1iZXIocHJpdiwgcHJpKTsKIAlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eF9pZF07CiAjZWxzZQpAQCAtOTY2Miw5ICsxMDA0NCw5IEBACiAJdTE2IHJlbWFpbmluZ19ieXRlczsKIAlpbnQgZmM7CiAKKwloZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKIAlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKIAljYXNlIElXX01PREVfQURIT0M6Ci0JCWhkcl9sZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOwogCQl1bmljYXN0ID0gIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOwogCQlpZCA9IGlwd19maW5kX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7CiAJCWlmIChpZCA9PSBJUFdfSU5WQUxJRF9TVEFUSU9OKSB7CkBAIC05NjgxLDcgKzEwMDYzLDYgQEAKIAljYXNlIElXX01PREVfSU5GUkE6CiAJZGVmYXVsdDoKIAkJdW5pY2FzdCA9ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIzKTsKLQkJaGRyX2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CiAJCWlkID0gMDsKIAkJYnJlYWs7CiAJfQpAQCAtOTc1OSw5ICsxMDE0MCwxMCBAQAogCQkvKiBObyBoYXJkd2FyZSBlbmNyeXB0aW9uICovCiAJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzIHw9IERDVF9GTEFHX05PX1dFUDsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCi0JaXB3X3Fvc19zZXRfdHhfcXVldWVfY29tbWFuZChwcml2LCBwcmksICYodGZkLT51LmRhdGEpLCB1bmljYXN0KTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUworCWlmIChmYyAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkKKwkJaXB3X3Fvc19zZXRfdHhfcXVldWVfY29tbWFuZChwcml2LCBwcmksICYodGZkLT51LmRhdGEpKTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9RT1MgKi8KIAogCS8qIHBheWxvYWQgKi8KIAl0ZmQtPnUuZGF0YS5udW1fY2h1bmtzID0gY3B1X3RvX2xlMzIobWluKCh1OCkgKE5VTV9URkRfQ0hVTktTIC0gMiksCkBAIC05ODQxLDEyICsxMDIyMywxMiBAQAogc3RhdGljIGludCBpcHdfbmV0X2lzX3F1ZXVlX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAJaW50IHR4X2lkID0gaXB3X2dldF90eF9xdWV1ZV9udW1iZXIocHJpdiwgcHJpKTsKIAlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eF9pZF07CiAjZWxzZQogCXN0cnVjdCBjbHgyX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxWzBdOwotI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKIAlpZiAoaXB3X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpIDwgdHhxLT5xLmhpZ2hfbWFyaykKIAkJcmV0dXJuIDE7CkBAIC05ODU0LDYgKzEwMjM2LDg4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9wcm9taXNjdW91c190eChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIGR1bW15c3RhdHM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1OCBuOworCXUxNiBmaWx0ZXIgPSBwcml2LT5wcm9tX3ByaXYtPmZpbHRlcjsKKwlpbnQgaGRyX29ubHkgPSAwOworCisJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX1RYKQorCQlyZXR1cm47CisKKwltZW1zZXQoJmR1bW15c3RhdHMsIDAsIHNpemVvZihkdW1teXN0YXRzKSk7CisKKwkvKiBGaWx0ZXJpbmcgb2YgZnJhZ21lbnQgY2hhaW5zIGlzIGRvbmUgYWdhaW5zIHRoZSBmaXJzdCBmcmFnbWVudCAqLworCWhkciA9ICh2b2lkICopdHhiLT5mcmFnbWVudHNbMF0tPmRhdGE7CisJaWYgKGllZWU4MDIxMV9pc19tYW5hZ2VtZW50KGhkci0+ZnJhbWVfY3RsKSkgeworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fTUdNVCkKKwkJCXJldHVybjsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX01HTVRfSEVBREVSX09OTFkpCisJCQloZHJfb25seSA9IDE7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfY29udHJvbChoZHItPmZyYW1lX2N0bCkpIHsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX0NUTCkKKwkJCXJldHVybjsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX0NUTF9IRUFERVJfT05MWSkKKwkJCWhkcl9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY3RsKSkgeworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fREFUQSkKKwkJCXJldHVybjsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX0RBVEFfSEVBREVSX09OTFkpCisJCQloZHJfb25seSA9IDE7CisJfQorCisJZm9yKG49MDsgbjx0eGItPm5yX2ZyYWdzOyArK24pIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNyYyA9IHR4Yi0+ZnJhZ21lbnRzW25dOworCQlzdHJ1Y3Qgc2tfYnVmZiAqZHN0OworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRfaGRyOworCQlpbnQgbGVuOworCisJCWlmIChoZHJfb25seSkgeworCQkJaGRyID0gKHZvaWQgKilzcmMtPmRhdGE7CisJCQlsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2N0bCk7CisJCX0gZWxzZQorCQkJbGVuID0gc3JjLT5sZW47CisKKwkJZHN0ID0gYWxsb2Nfc2tiKAorCQkJbGVuICsgSUVFRTgwMjExX1JBRElPVEFQX0hEUkxFTiwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KSBjb250aW51ZTsKKworCQlydF9oZHIgPSAodm9pZCAqKXNrYl9wdXQoZHN0LCBzaXplb2YoKnJ0X2hkcikpOworCisJCXJ0X2hkci0+aXRfdmVyc2lvbiA9IFBLVEhEUl9SQURJT1RBUF9WRVJTSU9OOworCQlydF9oZHItPml0X3BhZCA9IDA7CisJCXJ0X2hkci0+aXRfcHJlc2VudCA9IDA7IC8qIGFmdGVyIGFsbCwgaXQncyBqdXN0IGFuIGlkZWEgKi8KKwkJcnRfaGRyLT5pdF9wcmVzZW50IHw9ICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCk7CisKKwkJKih1MTYqKXNrYl9wdXQoZHN0LCBzaXplb2YodTE2KSkgPSBjcHVfdG9fbGUxNigKKwkJCWllZWU4MDIxMWNoYW4ybWh6KHByaXYtPmNoYW5uZWwpKTsKKwkJaWYgKHByaXYtPmNoYW5uZWwgPiAxNCkgCS8qIDgwMi4xMWEgKi8KKwkJCSoodTE2Kilza2JfcHV0KGRzdCwgc2l6ZW9mKHUxNikpID0KKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfQ0hBTl9PRkRNIHwKKwkJCQkJICAgICBJRUVFODAyMTFfQ0hBTl81R0haKTsKKwkJZWxzZSBpZiAocHJpdi0+aWVlZS0+bW9kZSA9PSBJRUVFX0IpIC8qIDgwMi4xMWIgKi8KKwkJCSoodTE2Kilza2JfcHV0KGRzdCwgc2l6ZW9mKHUxNikpID0KKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfQ0hBTl9DQ0sgfAorCQkJCQkgICAgIElFRUU4MDIxMV9DSEFOXzJHSFopOworCQllbHNlIAkJLyogODAyLjExZyAqLworCQkJKih1MTYqKXNrYl9wdXQoZHN0LCBzaXplb2YodTE2KSkgPQorCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9DSEFOX09GRE0gfAorCQkJCSBJRUVFODAyMTFfQ0hBTl8yR0haKTsKKworCQlydF9oZHItPml0X2xlbiA9IGRzdC0+bGVuOworCisJCW1lbWNweShza2JfcHV0KGRzdCwgbGVuKSwgc3JjLT5kYXRhLCBsZW4pOworCisJCWlmICghaWVlZTgwMjExX3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgZHN0LCAmZHVtbXlzdGF0cykpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShkc3QpOworCX0KK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGlwd19uZXRfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKIHsKQEAgLTk4NzEsNiArMTAzMzUsMTEgQEAKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCWlmIChydGFwX2lmYWNlICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkKKwkJaXB3X2hhbmRsZV9wcm9taXNjdW91c190eChwcml2LCB0eGIpOworI2VuZGlmCisKIAlyZXQgPSBpcHdfdHhfc2tiKHByaXYsIHR4YiwgcHJpKTsKIAlpZiAocmV0ID09IE5FVERFVl9UWF9PSykKIAkJX19pcHdfbGVkX2FjdGl2aXR5X29uKHByaXYpOwpAQCAtMTAxNjksMTAgKzEwNjM4LDEwIEBACiAJSU5JVF9XT1JLKCZwcml2LT5tZXJnZV9uZXR3b3JrcywKIAkJICAodm9pZCAoKikodm9pZCAqKSlpcHdfbWVyZ2VfYWRob2NfbmV0d29yaywgcHJpdik7CiAKLSNpZmRlZiBDT05GSUdfSVBXX1FPUworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogCUlOSVRfV09SSygmcHJpdi0+cW9zX2FjdGl2YXRlLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfcW9zX2FjdGl2YXRlLAogCQkgIHByaXYpOwotI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKIAl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCiAJCSAgICAgaXB3X2lycV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwcml2KTsKQEAgLTEwMzE4LDEyICsxMDc4NywyMSBAQAogCQkJICAgIHw9IENGR19CVF9DT0VYSVNURU5DRV9PT0I7CiAJfQogCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwlpZiAocHJpdi0+cHJvbV9uZXRfZGV2ICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAxOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMTsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDE7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDE7CisJfQorI2VuZGlmCisKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQogCQlwcml2LT5zeXNfY29uZmlnLmFuc3dlcl9icm9hZGNhc3Rfc3NpZF9wcm9iZSA9IDE7CiAJZWxzZQogCQlwcml2LT5zeXNfY29uZmlnLmFuc3dlcl9icm9hZGNhc3Rfc3NpZF9wcm9iZSA9IDA7CiAKLQlpZiAoaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2LCAmcHJpdi0+c3lzX2NvbmZpZykpCisJaWYgKGlwd19zZW5kX3N5c3RlbV9jb25maWcocHJpdikpCiAJCWdvdG8gZXJyb3I7CiAKIAlpbml0X3N1cHBvcnRlZF9yYXRlcyhwcml2LCAmcHJpdi0+cmF0ZXMpOwpAQCAtMTAzMzUsMTAgKzEwODEzLDEwIEBACiAJCWlmIChpcHdfc2VuZF9ydHNfdGhyZXNob2xkKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpKQogCQkJZ290byBlcnJvcjsKIAl9Ci0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKIAlJUFdfREVCVUdfUU9TKCJRb1M6IGNhbGwgaXB3X3Fvc19hY3RpdmF0ZVxuIik7CiAJaXB3X3Fvc19hY3RpdmF0ZShwcml2LCBOVUxMKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiAJaWYgKGlwd19zZXRfcmFuZG9tX3NlZWQocHJpdikpCiAJCWdvdG8gZXJyb3I7CkBAIC0xMDYzOSw2ICsxMTExNyw3IEBACiAJCWlmIChwcml2LT5jbWRsb2cgPT0gTlVMTCkgewogCQkJSVBXX0VSUk9SKCJFcnJvciBhbGxvY2F0aW5nICVkIGNvbW1hbmQgbG9nIGVudHJpZXMuXG4iLAogCQkJCSAgY21kbG9nKTsKKwkJCXJldHVybiAtRU5PTUVNOwogCQl9IGVsc2UgewogCQkJbWVtc2V0KHByaXYtPmNtZGxvZywgMCwgc2l6ZW9mKCpwcml2LT5jbWRsb2cpICogY21kbG9nKTsKIAkJCXByaXYtPmNtZGxvZ19sZW4gPSBjbWRsb2c7CkBAIC0xMDg2MCw2ICsxMTMzOSwxMCBAQAogCSZkZXZfYXR0cl9sZWQuYXR0ciwKIAkmZGV2X2F0dHJfc3BlZWRfc2Nhbi5hdHRyLAogCSZkZXZfYXR0cl9uZXRfc3RhdHMuYXR0ciwKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCSZkZXZfYXR0cl9ydGFwX2lmYWNlLmF0dHIsCisJJmRldl9hdHRyX3J0YXBfZmlsdGVyLmF0dHIsCisjZW5kaWYKIAlOVUxMCiB9OwogCkBAIC0xMDg2OCw2ICsxMTM1MSwxMDkgQEAKIAkuYXR0cnMgPSBpcHdfc3lzZnNfZW50cmllcywKIH07CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworc3RhdGljIGludCBpcHdfcHJvbV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OworCisJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5vcGVuXG4iKTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAxOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMTsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDE7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDE7CisKKwkJaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfcHJvbV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OworCisJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5zdG9wXG4iKTsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAwOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMDsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDA7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDA7CisKKwkJaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlJUFdfREVCVUdfSU5GTygicHJvbSBkZXYtPnhtaXRcbiIpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXB3X3Byb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcmV0dXJuICZwcm9tX3ByaXYtPmllZWUtPnN0YXRzOworfQorCitzdGF0aWMgaW50IGlwd19wcm9tX2FsbG9jKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKHByaXYtPnByb21fbmV0X2RldikKKwkJcmV0dXJuIC1FUEVSTTsKKworCXByaXYtPnByb21fbmV0X2RldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2Yoc3RydWN0IGlwd19wcm9tX3ByaXYpKTsKKwlpZiAocHJpdi0+cHJvbV9uZXRfZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+cHJvbV9wcml2ID0gaWVlZTgwMjExX3ByaXYocHJpdi0+cHJvbV9uZXRfZGV2KTsKKwlwcml2LT5wcm9tX3ByaXYtPmllZWUgPSBuZXRkZXZfcHJpdihwcml2LT5wcm9tX25ldF9kZXYpOworCXByaXYtPnByb21fcHJpdi0+cHJpdiA9IHByaXY7CisKKwlzdHJjcHkocHJpdi0+cHJvbV9uZXRfZGV2LT5uYW1lLCAicnRhcCVkIik7CisKKwlwcml2LT5wcm9tX25ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworCXByaXYtPnByb21fbmV0X2Rldi0+b3BlbiA9IGlwd19wcm9tX29wZW47CisJcHJpdi0+cHJvbV9uZXRfZGV2LT5zdG9wID0gaXB3X3Byb21fc3RvcDsKKwlwcml2LT5wcm9tX25ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19wcm9tX2dldF9zdGF0czsKKwlwcml2LT5wcm9tX25ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlwd19wcm9tX2hhcmRfc3RhcnRfeG1pdDsKKworCXByaXYtPnByb21fcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfTU9OSVRPUjsKKworCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7CisJaWYgKHJjKSB7CisJCWZyZWVfaWVlZTgwMjExKHByaXYtPnByb21fbmV0X2Rldik7CisJCXByaXYtPnByb21fbmV0X2RldiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXB3X3Byb21fZnJlZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJaWYgKCFwcml2LT5wcm9tX25ldF9kZXYpCisJCXJldHVybjsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7CisJZnJlZV9pZWVlODAyMTEocHJpdi0+cHJvbV9uZXRfZGV2KTsKKworCXByaXYtPnByb21fbmV0X2RldiA9IE5VTEw7Cit9CisKKyNlbmRpZgorCisKIHN0YXRpYyBpbnQgaXB3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTEwOTU5LDExICsxMTU0NSwxMiBAQAogCXByaXYtPmllZWUtPnNldF9zZWN1cml0eSA9IHNoaW1fX3NldF9zZWN1cml0eTsKIAlwcml2LT5pZWVlLT5pc19xdWV1ZV9mdWxsID0gaXB3X25ldF9pc19xdWV1ZV9mdWxsOwogCi0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKKwlwcml2LT5pZWVlLT5pc19xb3NfYWN0aXZlID0gaXB3X2lzX3Fvc19hY3RpdmU7CiAJcHJpdi0+aWVlZS0+aGFuZGxlX3Byb2JlX3Jlc3BvbnNlID0gaXB3X2hhbmRsZV9iZWFjb247CiAJcHJpdi0+aWVlZS0+aGFuZGxlX2JlYWNvbiA9IGlwd19oYW5kbGVfcHJvYmVfcmVzcG9uc2U7CiAJcHJpdi0+aWVlZS0+aGFuZGxlX2Fzc29jX3Jlc3BvbnNlID0gaXB3X2hhbmRsZV9hc3NvY19yZXNwb25zZTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CkBAIC0xMDk5Nyw2ICsxMTU4NCwxOCBAQAogCQlnb3RvIG91dF9yZW1vdmVfc3lzZnM7CiAJfQogCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwlpZiAocnRhcF9pZmFjZSkgeworCSAgICAgICAgZXJyID0gaXB3X3Byb21fYWxsb2MocHJpdik7CisJCWlmIChlcnIpIHsKKwkJCUlQV19FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIHByb21pc2N1b3VzIG5ldHdvcmsgIgorCQkJCSAgImRldmljZSAoZXJyb3IgJWQpLlxuIiwgZXJyKTsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPm5ldF9kZXYpOworCQkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOworCQl9CisJfQorI2VuZGlmCisKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IERldGVjdGVkIGdlb2dyYXBoeSAlcyAoJWQgODAyLjExYmcgIgogCSAgICAgICAiY2hhbm5lbHMsICVkIDgwMi4xMWEgY2hhbm5lbHMpXG4iLAogCSAgICAgICBwcml2LT5pZWVlLT5nZW8ubmFtZSwgcHJpdi0+aWVlZS0+Z2VvLmJnX2NoYW5uZWxzLApAQCAtMTEwNzYsNiArMTE2NzUsMTAgQEAKIAkJcHJpdi0+ZXJyb3IgPSBOVUxMOwogCX0KIAorI2lmZGVmIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTCisJaXB3X3Byb21fZnJlZShwcml2KTsKKyNlbmRpZgorCiAJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlpb3VubWFwKHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CkBAIC0xMTIwMCw3ICsxMTgwMywxMiBAQAogbW9kdWxlX3BhcmFtKGNoYW5uZWwsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNoYW5uZWwsICJjaGFubmVsIHRvIGxpbWl0IGFzc29jaWF0ZSB0byAoZGVmYXVsdCAwIFtBTlldKSIpOwogCi0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworbW9kdWxlX3BhcmFtKHJ0YXBfaWZhY2UsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJ0YXBfaWZhY2UsICJjcmVhdGUgdGhlIHJ0YXAgaW50ZXJmYWNlICgxIC0gY3JlYXRlLCBkZWZhdWx0IDApIik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogbW9kdWxlX3BhcmFtKHFvc19lbmFibGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHFvc19lbmFibGUsICJlbmFibGUgYWxsIFFvUyBmdW5jdGlvbmFsaXRpcyIpOwogCkBAIC0xMTIxNSw3ICsxMTgyMyw3IEBACiAKIG1vZHVsZV9wYXJhbShidXJzdF9kdXJhdGlvbl9PRkRNLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidXJzdF9kdXJhdGlvbl9PRkRNLCAic2V0IE9GRE0gYnVyc3QgdmFsdWUiKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogbW9kdWxlX3BhcmFtKG1vZGUsIGludCwgMDQ0NCk7CkBAIC0xMTIzOCw1ICsxMTg0Niw4IEBACiBtb2R1bGVfcGFyYW0ocm9hbWluZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mocm9hbWluZywgImVuYWJsZSByb2FtaW5nIHN1cHBvcnQgKGRlZmF1bHQgb24pIik7CiAKK21vZHVsZV9wYXJhbShhbnRlbm5hLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbnRlbm5hLCAic2VsZWN0IGFudGVubmEgMT1NYWluLCAzPUF1eCwgZGVmYXVsdCAwIFtib3RoXSwgMj1zbG93X2RpdmVyc2l0eSAoY2hvb3NlIHRoZSBvbmUgd2l0aCBsb3dlciBiYWNrZ3JvdW5kIG5vaXNlKSIpOworCiBtb2R1bGVfZXhpdChpcHdfZXhpdCk7CiBtb2R1bGVfaW5pdChpcHdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKaW5kZXggNGI5ODA0OS4uNjA0NGMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaApAQCAtNzg5LDcgKzc4OSw3IEBACiAJdTggYnRfY29leGlzdF9jb2xsaXNpb25fdGhyOwogCXU4IHNpbGVuY2VfdGhyZXNob2xkOwogCXU4IGFjY2VwdF9hbGxfbWdtdF9iY3ByOwotCXU4IGFjY2VwdF9hbGxfbWd0bV9mcmFtZXM7CisJdTggYWNjZXB0X2FsbF9tZ210X2ZyYW1lczsKIAl1OCBwYXNzX25vaXNlX3N0YXRzX3RvX2hvc3Q7CiAJdTggcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0xMTIyLDYgKzExMjIsNTIgQEAKIAl1OCBwYXlsb2FkWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCitlbnVtIGlwd19wcm9tX2ZpbHRlciB7CisJSVBXX1BST01fQ1RMX0hFQURFUl9PTkxZID0gKDEgPDwgMCksCisJSVBXX1BST01fTUdNVF9IRUFERVJfT05MWSA9ICgxIDw8IDEpLAorCUlQV19QUk9NX0RBVEFfSEVBREVSX09OTFkgPSAoMSA8PCAyKSwKKwlJUFdfUFJPTV9BTExfSEVBREVSX09OTFkgPSAweGYsIC8qIGJpdHMgMC4uMyAqLworCUlQV19QUk9NX05PX1RYID0gKDEgPDwgNCksCisJSVBXX1BST01fTk9fUlggPSAoMSA8PCA1KSwKKwlJUFdfUFJPTV9OT19DVEwgPSAoMSA8PCA2KSwKKwlJUFdfUFJPTV9OT19NR01UID0gKDEgPDwgNyksCisJSVBXX1BST01fTk9fREFUQSA9ICgxIDw8IDgpLAorfTsKKworc3RydWN0IGlwd19wcml2Oworc3RydWN0IGlwd19wcm9tX3ByaXYgeworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKKwllbnVtIGlwd19wcm9tX2ZpbHRlciBmaWx0ZXI7CisJaW50IHR4X3BhY2tldHM7CisJaW50IHJ4X3BhY2tldHM7Cit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFcyMjAwX1JBRElPVEFQKSB8fCBkZWZpbmVkKENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTKQorLyogTWFnaWMgc3RydWN0IHRoYXQgc2xvdHMgaW50byB0aGUgcmFkaW90YXAgaGVhZGVyIC0tIG5vIHJlYXNvbgorICogdG8gYnVpbGQgdGhpcyBtYW51YWxseSBlbGVtZW50IGJ5IGVsZW1lbnQsIHdlIGNhbiB3cml0ZSBpdCBtdWNoCisgKiBtb3JlIGVmZmljaWVudGx5IHRoYW4gd2UgY2FuIHBhcnNlIGl0LiBPUkRFUiBNQVRURVJTIEhFUkUKKyAqCisgKiBXaGVuIHNlbnQgdG8gdXMgdmlhIHRoZSBzaW11bGF0ZWQgUnggaW50ZXJmYWNlIGluIHN5c2ZzLCB0aGUgZW50aXJlCisgKiBzdHJ1Y3R1cmUgaXMgcHJvdmlkZWQgcmVnYXJkbGVzcyBvZiBhbnkgYml0cyB1bnNldC4KKyAqLworc3RydWN0IGlwd19ydF9oZHIgeworCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHJ0X2hkcjsKKwl1NjQgcnRfdHNmOyAgICAgIC8qIFRTRiAqLworCXU4IHJ0X2ZsYWdzOwkvKiByYWRpb3RhcCBwYWNrZXQgZmxhZ3MgKi8KKwl1OCBydF9yYXRlOwkvKiByYXRlIGluIDUwMGtiL3MgKi8KKwl1MTYgcnRfY2hhbm5lbDsJLyogY2hhbm5lbCBpbiBtaHogKi8KKwl1MTYgcnRfY2hiaXRtYXNrOwkvKiBjaGFubmVsIGJpdGZpZWxkICovCisJczggcnRfZGJtc2lnbmFsOwkvKiBzaWduYWwgaW4gZGJNLCBrbHVnZWQgdG8gc2lnbmVkICovCisJczggcnRfZGJtbm9pc2U7CisJdTggcnRfYW50ZW5uYTsJLyogYW50ZW5uYSBudW1iZXIgKi8KKwl1OCBwYXlsb2FkWzBdOyAgLyogcGF5bG9hZC4uLiAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZW5kaWYKKwogc3RydWN0IGlwd19wcml2IHsKIAkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKQEAgLTExMzMsNiArMTE3OSwxMiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwogCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwkvKiBQcm9taXNjdW91cyBtb2RlICovCisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcHJvbV9uZXRfZGV2OworI2VuZGlmCisKIAkvKiBwY2kgaGFyZHdhcmUgYWRkcmVzcyBzdXBwb3J0ICovCiAJdm9pZCBfX2lvbWVtICpod19iYXNlOwogCXVuc2lnbmVkIGxvbmcgaHdfbGVuOwpAQCAtMTE1MywxMSArMTIwNSw5IEBACiAJdTMyIGNvbmZpZzsKIAl1MzIgY2FwYWJpbGl0eTsKIAotCXU4IGxhc3RfcnhfcnNzaTsKLQl1OCBsYXN0X25vaXNlOwogCXN0cnVjdCBhdmVyYWdlIGF2ZXJhZ2VfbWlzc2VkX2JlYWNvbnM7Ci0Jc3RydWN0IGF2ZXJhZ2UgYXZlcmFnZV9yc3NpOwotCXN0cnVjdCBhdmVyYWdlIGF2ZXJhZ2Vfbm9pc2U7CisJczE2IGV4cF9hdmdfcnNzaTsKKwlzMTYgZXhwX2F2Z19ub2lzZTsKIAl1MzIgcG9ydF90eXBlOwogCWludCByeF9idWZzX21pbjsJICAvKio8IG1pbmltdW0gbnVtYmVyIG9mIGJ1ZnMgaW4gUnggcXVldWUgKi8KIAlpbnQgcnhfcGVuZF9tYXg7CSAgLyoqPCBtYXhpbXVtIHBlbmRpbmcgYnVmZmVycyBmb3Igb25lIElSUSAqLwpAQCAtMTMwOCw2ICsxMzU4LDI5IEBACiAKIC8qIGRlYnVnIG1hY3JvcyAqLwogCisvKiBEZWJ1ZyBhbmQgcHJpbnRmIHN0cmluZyBleHBhbnNpb24gaGVscGVycyBmb3IgcHJpbnRpbmcgYml0ZmllbGRzICovCisjZGVmaW5lIEJJVF9GTVQ4ICIlYyVjJWMlYy0lYyVjJWMlYyIKKyNkZWZpbmUgQklUX0ZNVDE2IEJJVF9GTVQ4ICI6IiBCSVRfRk1UOAorI2RlZmluZSBCSVRfRk1UMzIgQklUX0ZNVDE2ICIgIiBCSVRfRk1UMTYKKworI2RlZmluZSBCSVRDKHgseSkgKCgoeD4+eSkmMSk/JzEnOicwJykKKyNkZWZpbmUgQklUX0FSRzgoeCkgXAorQklUQyh4LDcpLEJJVEMoeCw2KSxCSVRDKHgsNSksQklUQyh4LDQpLFwKK0JJVEMoeCwzKSxCSVRDKHgsMiksQklUQyh4LDEpLEJJVEMoeCwwKQorCisjZGVmaW5lIEJJVF9BUkcxNih4KSBcCitCSVRDKHgsMTUpLEJJVEMoeCwxNCksQklUQyh4LDEzKSxCSVRDKHgsMTIpLFwKK0JJVEMoeCwxMSksQklUQyh4LDEwKSxCSVRDKHgsOSksQklUQyh4LDgpLFwKK0JJVF9BUkc4KHgpCisKKyNkZWZpbmUgQklUX0FSRzMyKHgpIFwKK0JJVEMoeCwzMSksQklUQyh4LDMwKSxCSVRDKHgsMjkpLEJJVEMoeCwyOCksXAorQklUQyh4LDI3KSxCSVRDKHgsMjYpLEJJVEMoeCwyNSksQklUQyh4LDI0KSxcCitCSVRDKHgsMjMpLEJJVEMoeCwyMiksQklUQyh4LDIxKSxCSVRDKHgsMjApLFwKK0JJVEMoeCwxOSksQklUQyh4LDE4KSxCSVRDKHgsMTcpLEJJVEMoeCwxNiksXAorQklUX0FSRzE2KHgpCisKKwogI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiAjZGVmaW5lIElQV19ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCiBkbyB7IGlmIChpcHdfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKaW5kZXggYzJkMGIwOS4uOGEzMWI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwpAQCAtMjAxLDQxICsyMDEsMTIgQEAKIC8qIERhdGEgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogVXNlZCBpbiBFdmVudCBoYW5kbGluZy4KLSAqIFdlIGF2b2lkIG5lc3RlZCBzdHJ1Y3R1cmVzIGFzIHRoZXkgYnJlYWsgb24gQVJNIC0tIE1vdXN0YWZhICovCi1zdHJ1Y3QgaGVybWVzX3R4X2Rlc2NyaXB0b3JfODAyXzExIHsKLQkvKiBoZXJtZXNfdHhfZGVzY3JpcHRvciAqLwotCV9fbGUxNiBzdGF0dXM7Ci0JX19sZTE2IHJlc2VydmVkMTsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotCV9fbGUzMiBzd19zdXBwb3J0OwotCXU4IHJldHJ5X2NvdW50OwotCXU4IHR4X3JhdGU7Ci0JX19sZTE2IHR4X2NvbnRyb2w7Ci0KLQkvKiBpZWVlODAyMTFfaGRyICovCisvKiBCZWdpbm5pbmcgb2YgdGhlIFR4IGRlc2NyaXB0b3IsIHVzZWQgaW4gVHhFeGMgaGFuZGxpbmcgKi8KK3N0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSB7CisJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CiAJX19sZTE2IGZyYW1lX2N0bDsKIAlfX2xlMTYgZHVyYXRpb25faWQ7CiAJdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggYWRkcjRbRVRIX0FMRU5dOwotCi0JX19sZTE2IGRhdGFfbGVuOwotCi0JLyogZXRoaGRyICovCi0JdTggaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIgKi8KLQl1OCBoX3NvdXJjZVtFVEhfQUxFTl07CS8qIHNvdXJjZSBldGhlciBhZGRyICAgICovCi0JX19iZTE2IGhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAqLwotCi0JLyogcDgwMjJfaGRyICovCi0JdTggZHNhcDsKLQl1OCBzc2FwOwotCXU4IGN0cmw7Ci0JdTggb3VpWzNdOwotCi0JX19iZTE2IGV0aGVydHlwZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBSeCBmcmFtZSBoZWFkZXIgZXhjZXB0IGNvbXBhdGliaWxpdHkgODAyLjMgaGVhZGVyICovCkBAIC00NTAsNTMgKzQyMSwzOSBAQAogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyID0gMDsKIAl1MTYgdHhmaWQgPSBwcml2LT50eGZpZDsKLQljaGFyICpwOwogCXN0cnVjdCBldGhoZHIgKmVoOwotCWludCBsZW4sIGRhdGFfbGVuLCBkYXRhX29mZjsKKwlpbnQgZGF0YV9vZmY7CiAJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAlpZiAoISBuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVHggb24gc3RvcHBlZCBkZXZpY2UhXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAkKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggd2hpbGUgdHJhbnNtaXR0ZXIgYnVzeSFcbiIsIAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAkKIAlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3htaXQoKSBjYWxsZWQgd2hpbGUgaHdfdW5hdmFpbGFibGVcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwotCQlUUkFDRV9FWElUKGRldi0+bmFtZSk7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCiAJaWYgKCEgbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8IChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikpIHsKIAkJLyogT29wcywgdGhlIGZpcm13YXJlIGhhc24ndCBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0ICh0aGlzIHNlZW1zIHRvIGJlIHRoZQogICAgICAgICAgICAgICAgICAgIHNhZmVzdCBhcHByb2FjaCkuICovCi0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlUUkFDRV9FWElUKGRldi0+bmFtZSk7Ci0JCXJldHVybiAwOworCQlnb3RvIGRyb3A7CiAJfQogCi0JLyogTGVuZ3RoIG9mIHRoZSBwYWNrZXQgYm9keSAqLwotCS8qIEZJWE1FOiB3aGF0IGlmIHRoZSBza2IgaXMgc21hbGxlciB0aGFuIHRoaXM/ICovCi0JbGVuID0gbWF4X3QoaW50LCBBTElHTihza2ItPmxlbiwgMiksIEVUSF9aTEVOKTsKLQlza2IgPSBza2JfcGFkdG8oc2tiLCBsZW4pOwotCWlmIChza2IgPT0gTlVMTCkKLQkJZ290byBmYWlsOwotCWxlbiAtPSBFVEhfSExFTjsKKwkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCisJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pCisJCWdvdG8gZHJvcDsKIAogCWVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAKQEAgLTUwNyw4ICs0NjQsNyBAQAogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCBkZXNjcmlwdG9yICIKIAkJCSAgICAgICAidG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJZ290byBmYWlsOworCQlnb3RvIGJ1c3k7CiAJfQogCiAJLyogQ2xlYXIgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGRhdGEgbGVuZ3RoIGZpZWxkcyAtIHNvbWUKQEAgLTUxOSw1MCArNDc1LDM4IEBACiAKIAkvKiBFbmNhcHN1bGF0ZSBFdGhlcm5ldC1JSSBmcmFtZXMgKi8KIAlpZiAobnRvaHMoZWgtPmhfcHJvdG8pID4gRVRIX0RBVEFfTEVOKSB7IC8qIEV0aGVybmV0LUlJIGZyYW1lICovCi0JCXN0cnVjdCBoZWFkZXJfc3RydWN0IGhkcjsKLQkJZGF0YV9sZW4gPSBsZW47Ci0JCWRhdGFfb2ZmID0gSEVSTUVTXzgwMl8zX09GRlNFVCArIHNpemVvZihoZHIpOwotCQlwID0gc2tiLT5kYXRhICsgRVRIX0hMRU47CisJCXN0cnVjdCBoZWFkZXJfc3RydWN0IHsKKwkJCXN0cnVjdCBldGhoZHIgZXRoOwkvKiA4MDIuMyBoZWFkZXIgKi8KKwkJCXU4IGVuY2FwWzZdOwkJLyogODAyLjIgaGVhZGVyICovCisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhkcjsKIAotCQkvKiA4MDIuMyBoZWFkZXIgKi8KLQkJbWVtY3B5KGhkci5kZXN0LCBlaC0+aF9kZXN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShoZHIuc3JjLCBlaC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKLQkJaGRyLmxlbiA9IGh0b25zKGRhdGFfbGVuICsgRU5DQVBTX09WRVJIRUFEKTsKLQkJCi0JCS8qIDgwMi4yIGhlYWRlciAqLwotCQltZW1jcHkoJmhkci5kc2FwLCAmZW5jYXBzX2hkciwgc2l6ZW9mKGVuY2Fwc19oZHIpKTsKLQkJCQotCQloZHIuZXRoZXJ0eXBlID0gZWgtPmhfcHJvdG87Ci0JCWVyciAgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZoZHIsIHNpemVvZihoZHIpLAotCQkJCQkgdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQpOworCQkvKiBTdHJpcCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIGZyb20gdGhlIGRhdGEgKi8KKwkJc2tiX3B1bGwoc2tiLCAyICogRVRIX0FMRU4pOworCQlkYXRhX29mZiA9IEhFUk1FU184MDJfMl9PRkZTRVQgKyBzaXplb2YoZW5jYXBzX2hkcik7CisKKwkJLyogQW5kIG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGhlYWRlciAqLworCQltZW1jcHkoJmhkci5ldGgsIGVoLCAyICogRVRIX0FMRU4pOworCQloZHIuZXRoLmhfcHJvdG8gPSBodG9ucyhzaXplb2YoZW5jYXBzX2hkcikgKyBza2ItPmxlbik7CisJCW1lbWNweShoZHIuZW5jYXAsIGVuY2Fwc19oZHIsIHNpemVvZihlbmNhcHNfaGRyKSk7CisKKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmaGRyLCBzaXplb2YoaGRyKSwKKwkJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQpOwogCQlpZiAoZXJyKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgcGFja2V0ICIKIAkJCQkgICAgICAgImhlYWRlciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gYnVzeTsKIAkJfQotCQkvKiBBY3R1YWwgeGZlciBsZW5ndGggLSBhbGxvdyBmb3IgcGFkZGluZyAqLwotCQlsZW4gPSBBTElHTihkYXRhX2xlbiwgMik7Ci0JCWlmIChsZW4gPCBFVEhfWkxFTiAtIEVUSF9ITEVOKQotCQkJbGVuID0gRVRIX1pMRU4gLSBFVEhfSExFTjsKIAl9IGVsc2UgeyAvKiBJRUVFIDgwMi4zIGZyYW1lICovCi0JCWRhdGFfbGVuID0gbGVuICsgRVRIX0hMRU47CiAJCWRhdGFfb2ZmID0gSEVSTUVTXzgwMl8zX09GRlNFVDsKLQkJcCA9IHNrYi0+ZGF0YTsKLQkJLyogQWN0dWFsIHhmZXIgbGVuZ3RoIC0gcm91bmQgdXAgZm9yIG9kZCBsZW5ndGggcGFja2V0cyAqLwotCQlsZW4gPSBBTElHTihkYXRhX2xlbiwgMik7Ci0JCWlmIChsZW4gPCBFVEhfWkxFTikKLQkJCWxlbiA9IEVUSF9aTEVOOwogCX0KIAotCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlX3BhZChodywgVVNFUl9CQVAsIHAsIGRhdGFfbGVuLCBsZW4sCisJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJCXR4ZmlkLCBkYXRhX29mZik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIHBhY2tldCB0byBCQVBcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJZ290byBmYWlsOworCQlnb3RvIGJ1c3k7CiAJfQogCiAJLyogRmluYWxseSwgd2UgYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHNlbmQgKi8KQEAgLTU3NSwyNSArNTE5LDI3IEBACiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB0cmFuc21pdHRpbmcgcGFja2V0XG4iLAogCQkJCWRldi0+bmFtZSwgZXJyKTsKLQkJc3RhdHMtPnR4X2Vycm9ycysrOwotCQlnb3RvIGZhaWw7CisJCWdvdG8gYnVzeTsKIAl9CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gZGF0YV9vZmYgKyBkYXRhX2xlbjsKKwlzdGF0cy0+dHhfYnl0ZXMgKz0gZGF0YV9vZmYgKyBza2ItPmxlbjsKKwlnb3RvIG9rOwogCisgZHJvcDoKKwlzdGF0cy0+dHhfZXJyb3JzKys7CisJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKworIG9rOgogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAotCVRSQUNFX0VYSVQoZGV2LT5uYW1lKTsKLQotCXJldHVybiAwOwotIGZhaWw6Ci0JVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCisgYnVzeToKKwlpZiAoZXJyID09IC1FSU8pCisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKIHN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCkBAIC02MjksNyArNTc1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CiAJdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpOwogCXUxNiBzdGF0dXM7Ci0Jc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yXzgwMl8xMSBoZHI7CisJc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIGhkcjsKIAlpbnQgZXJyID0gMDsKIAogCWlmIChmaWQgPT0gRFVNTVlfRklEKQpAQCAtNjM3LDggKzU4Myw3IEBACiAKIAkvKiBSZWFkIHBhcnQgb2YgdGhlIGZyYW1lIGhlYWRlciAtIHdlIG5lZWQgc3RhdHVzIGFuZCBhZGRyMSAqLwogCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZoZHIsCi0JCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yXzgwMl8xMSwKLQkJCQkJYWRkcjIpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEpLAogCQkJICAgICAgIGZpZCwgMCk7CiAKIAloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKQEAgLTY1OCw3ICs2MDMsNyBAQAogCSAqIGV4Y2VlZGVkLCBiZWNhdXNlIHRoYXQncyB0aGUgb25seSBzdGF0dXMgdGhhdCByZWFsbHkgbWVhbgogCSAqIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIG5vZGUgd2VudCBhd2F5LgogCSAqIE90aGVyIGVycm9ycyBtZWFucyB0aGF0ICp3ZSogc2NyZXdlZCB1cC4gLSBKZWFuIElJICovCi0Jc3RhdHVzID0gbGUxNl90b19jcHUoaGRyLnN0YXR1cyk7CisJc3RhdHVzID0gbGUxNl90b19jcHUoaGRyLmRlc2Muc3RhdHVzKTsKIAlpZiAoc3RhdHVzICYgKEhFUk1FU19UWFNUQVRfUkVUUllFUlIgfCBIRVJNRVNfVFhTVEFUX0FHRURFUlIpKSB7CiAJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKIApAQCAtMTM5OCwxNiArMTM0MywxMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb3Jpbm9jb19hbGxvY2F0ZV9maWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyOwogCi0JZXJyID0gaGVybWVzX2luaXQoaHcpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOwogCWlmIChlcnIgPT0gLUVJTyAmJiBwcml2LT5uaWNidWZfc2l6ZSA+IFRYX05JQ0JVRl9TSVpFX0JVRykgewogCQkvKiBUcnkgd29ya2Fyb3VuZCBmb3Igb2xkIFN5bWJvbCBmaXJtd2FyZSBidWcgKi8KQEAgLTE0MjYsNiArMTM2NywxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKK2ludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfaW5pdChodyk7CisJaWYgKCFlcnIpCisJCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQogewogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKQEAgLTE4MzMsNyArMTc4Nyw5IEBACiAJLyogU2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KIAlwcml2LT5wcm9taXNjdW91cyA9IDA7CiAJcHJpdi0+bWNfY291bnQgPSAwOwotCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsgLyogRklYTUU6IHdoYXQgYWJvdXQgdGhlIHhtaXRfbG9jayAqLworCisJLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLworCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI3MiwxNCArMjIyOCwxMiBAQAogCXUxNiByZWNsZW47CiAJaW50IGxlbjsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAkvKiBObyBuZWVkIHRvIGxvY2ssIHRoZSBod191bmF2YWlsYWJsZSBmbGFnIGlzIGFscmVhZHkgc2V0IGluCiAJICogYWxsb2Nfb3Jpbm9jb2RldigpICovCiAJcHJpdi0+bmljYnVmX3NpemUgPSBJRUVFODAyMTFfRlJBTUVfTEVOICsgRVRIX0hMRU47CiAKIAkvKiBJbml0aWFsaXplIHRoZSBmaXJtd2FyZSAqLwotCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CisJZXJyID0gaGVybWVzX2luaXQoaHcpOwogCWlmIChlcnIgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwpAQCAtMjMzNyw2ICsyMjkxLDEzIEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gbmFtZSBcIiVzXCJcbiIsIGRldi0+bmFtZSwgcHJpdi0+bmljayk7CiAKKwllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIE5JQyBidWZmZXIhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogR2V0IGFsbG93ZWQgY2hhbm5lbHMgKi8KIAllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DSEFOTkVMTElTVCwKIAkJCQkgICZwcml2LT5jaGFubmVsX21hc2spOwpAQCAtMjQyNyw3ICsyMzg4LDYgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlYWR5XG4iLCBkZXYtPm5hbWUpOwogCiAgb3V0OgotCVRSQUNFX0VYSVQoZGV2LT5uYW1lKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNzk1LDggKzI3NTUsNiBAQAogCWludCBudW1yYXRlczsKIAlpbnQgaSwgazsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAlycnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwogCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwogCkBAIC0yODg2LDggKzI4NDQsNiBAQAogCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CiAJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIElXRVZUWERST1ApOwogCi0JVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNjksOCArMzAyNSw2IEBACiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCWVyciA9IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHByaXYsICZhY3RpdmUsIGVzc2lkYnVmKTsKIAkJaWYgKGVycikKQEAgLTMwODUsOCArMzAzOSw2IEBACiAJZXJxLT5mbGFncyA9IDE7CiAJZXJxLT5sZW5ndGggPSBzdHJsZW4oZXNzaWRidWYpICsgMTsKIAotCVRSQUNFX0VYSVQoZGV2LT5uYW1lKTsKLQkKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM0Nyw2OSArNDI5OSw2IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZiAwCi1zdGF0aWMgdm9pZCBzaG93X3J4X2ZyYW1lKHN0cnVjdCBvcmlub2NvX3J4ZnJhbWVfaGRyICpmcmFtZSkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiUlggZGVzY3JpcHRvcjpcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHN0YXR1cyAgICAgID0gMHglMDR4XG4iLCBmcmFtZS0+ZGVzYy5zdGF0dXMpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHRpbWUgICAgICAgID0gMHglMDh4XG4iLCBmcmFtZS0+ZGVzYy50aW1lKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBzaWxlbmNlICAgICA9IDB4JTAyeFxuIiwgZnJhbWUtPmRlc2Muc2lsZW5jZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgc2lnbmFsICAgICAgPSAweCUwMnhcbiIsIGZyYW1lLT5kZXNjLnNpZ25hbCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgcmF0ZSAgICAgICAgPSAweCUwMnhcbiIsIGZyYW1lLT5kZXNjLnJhdGUpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHJ4ZmxvdyAgICAgID0gMHglMDJ4XG4iLCBmcmFtZS0+ZGVzYy5yeGZsb3cpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHJlc2VydmVkICAgID0gMHglMDh4XG4iLCBmcmFtZS0+ZGVzYy5yZXNlcnZlZCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiSUVFRSA4MDIuMTEgaGVhZGVyOlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgZnJhbWVfY3RsICAgPSAweCUwNHhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMTEuZnJhbWVfY3RsKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBkdXJhdGlvbl9pZCA9IDB4JTA0eFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5kdXJhdGlvbl9pZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjEgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMVswXSwgZnJhbWUtPnA4MDIxMS5hZGRyMVsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMVsyXSwgZnJhbWUtPnA4MDIxMS5hZGRyMVszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMVs0XSwgZnJhbWUtPnA4MDIxMS5hZGRyMVs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjIgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMlswXSwgZnJhbWUtPnA4MDIxMS5hZGRyMlsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMlsyXSwgZnJhbWUtPnA4MDIxMS5hZGRyMlszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMls0XSwgZnJhbWUtPnA4MDIxMS5hZGRyMls1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjMgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyM1swXSwgZnJhbWUtPnA4MDIxMS5hZGRyM1sxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyM1syXSwgZnJhbWUtPnA4MDIxMS5hZGRyM1szXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyM1s0XSwgZnJhbWUtPnA4MDIxMS5hZGRyM1s1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgc2VxX2N0bCAgICAgPSAweCUwNHhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMTEuc2VxX2N0bCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjQgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyNFswXSwgZnJhbWUtPnA4MDIxMS5hZGRyNFsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyNFsyXSwgZnJhbWUtPnA4MDIxMS5hZGRyNFszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyNFs0XSwgZnJhbWUtPnA4MDIxMS5hZGRyNFs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgZGF0YV9sZW4gICAgPSAweCUwNHhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMTEuZGF0YV9sZW4pOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIklFRUUgODAyLjMgaGVhZGVyOlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgZGVzdCAgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfZGVzdFswXSwgZnJhbWUtPnA4MDIzLmhfZGVzdFsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfZGVzdFsyXSwgZnJhbWUtPnA4MDIzLmhfZGVzdFszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfZGVzdFs0XSwgZnJhbWUtPnA4MDIzLmhfZGVzdFs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgc3JjICAgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfc291cmNlWzBdLCBmcmFtZS0+cDgwMjMuaF9zb3VyY2VbMV0sCi0JICAgICAgIGZyYW1lLT5wODAyMy5oX3NvdXJjZVsyXSwgZnJhbWUtPnA4MDIzLmhfc291cmNlWzNdLAotCSAgICAgICBmcmFtZS0+cDgwMjMuaF9zb3VyY2VbNF0sIGZyYW1lLT5wODAyMy5oX3NvdXJjZVs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgbGVuICAgICAgICAgPSAweCUwNHhcbiIsIGZyYW1lLT5wODAyMy5oX3Byb3RvKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJJRUVFIDgwMi4yIExMQy9TTkFQIGhlYWRlcjpcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIERTQVAgICAgICAgID0gMHglMDJ4XG4iLCBmcmFtZS0+cDgwMjIuZHNhcCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgU1NBUCAgICAgICAgPSAweCUwMnhcbiIsIGZyYW1lLT5wODAyMi5zc2FwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBjdHJsICAgICAgICA9IDB4JTAyeFxuIiwgZnJhbWUtPnA4MDIyLmN0cmwpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIE9VSSAgICAgICAgID0gJTAyeDolMDJ4OiUwMnhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMi5vdWlbMF0sIGZyYW1lLT5wODAyMi5vdWlbMV0sIGZyYW1lLT5wODAyMi5vdWlbMl0pOwotCXByaW50ayhLRVJOX0RFQlVHICIgIGV0aGVydHlwZSAgPSAweCUwNHhcbiIsIGZyYW1lLT5ldGhlcnR5cGUpOwotfQotI2VuZGlmIC8qIDAgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTW9kdWxlIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmgKaW5kZXggZjVkODU2ZC4uMTZkYjNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgX09SSU5PQ09fSAogI2RlZmluZSBfT1JJTk9DT19ICiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMTVyYzMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjE1IgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KQEAgLTMwLDIwICszMCw2IEBACiAJY2hhciBkYXRhW09SSU5PQ09fTUFYX0tFWV9TSVpFXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgaGVhZGVyX3N0cnVjdCB7Ci0JLyogODAyLjMgKi8KLQl1OCBkZXN0W0VUSF9BTEVOXTsKLQl1OCBzcmNbRVRIX0FMRU5dOwotCV9fYmUxNiBsZW47Ci0JLyogODAyLjIgKi8KLQl1OCBkc2FwOwotCXU4IHNzYXA7Ci0JdTggY3RybDsKLQkvKiBTTkFQICovCi0JdTggb3VpWzNdOwotCXVuc2lnbmVkIHNob3J0IGV0aGVydHlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiB0eXBlZGVmIGVudW0gewogCUZJUk1XQVJFX1RZUEVfQUdFUkUsCiAJRklSTVdBUkVfVFlQRV9JTlRFUlNJTCwKQEAgLTEzMiw5ICsxMTgsNiBAQAogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLwogCi0jZGVmaW5lIFRSQUNFX0VOVEVSKGRldm5hbWUpIERFQlVHKDIsICIlczogLT4gJXMoKVxuIiwgZGV2bmFtZSwgX19GVU5DVElPTl9fKTsKLSNkZWZpbmUgVFJBQ0VfRVhJVChkZXZuYW1lKSAgREVCVUcoMiwgIiVzOiA8LSAlcygpXG4iLCBkZXZuYW1lLCBfX0ZVTkNUSU9OX18pOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBFeHBvcnRlZCBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKaW5kZXggNDM0ZjdkNy4uYjJhZWM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwpAQCAtMTQ3LDE0ICsxNDcsMTEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAorCWlmIChsaW5rLT5kZXZfbm9kZSkKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwogCW9yaW5vY29fY3NfcmVsZWFzZShsaW5rKTsKIAotCURFQlVHKDAsIFBGWCAiZGV0YWNoOiBsaW5rPSVwIGxpbmstPmRldl9ub2RlPSVwXG4iLCBsaW5rLCBsaW5rLT5kZXZfbm9kZSk7Ci0JaWYgKGxpbmstPmRldl9ub2RlKSB7Ci0JCURFQlVHKDAsIFBGWCAiQWJvdXQgdG8gdW5yZWdpc3RlciBuZXQgZGV2aWNlICVwXG4iLAotCQkgICAgICBkZXYpOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCX0KIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIH0JCQkJLyogb3Jpbm9jb19jc19kZXRhY2ggKi8KIApAQCAtMTc4LDEzICsxNzUsMTAgQEAKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CiAJdV9jaGFyIGJ1Zls2NF07CiAJY29uZmlnX2luZm9fdCBjb25mOwotCWNpc2luZm9fdCBpbmZvOwogCXR1cGxlX3QgdHVwbGU7CiAJY2lzcGFyc2VfdCBwYXJzZTsKIAl2b2lkIF9faW9tZW0gKm1lbTsKIAotCUNTX0NIRUNLKFZhbGlkYXRlQ0lTLCBwY21jaWFfdmFsaWRhdGVfY2lzKGxpbmssICZpbmZvKSk7Ci0KIAkvKgogCSAqIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMKIAkgKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KQEAgLTIzNCwxMiArMjI4LDYgQEAKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CiAKLQkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwotCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLQkJfQotCiAJCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLwogCQkvKiBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLwogCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgewpAQCAtMzU1LDE5ICszNDMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5kZXggMHglMDJ4OiAiLAotCSAgICAgICBkZXYtPm5hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwotCWlmIChsaW5rLT5jb25mLlZwcCkKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwIC8gMTAsCi0JCSAgICAgICBsaW5rLT5jb25mLlZwcCAlIDEwKTsKLQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOwotCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlcywgaXJxICVkLCBpbyAiCisJICAgICAgICIweCUwNHgtMHglMDR4XG4iLCBkZXYtPm5hbWUsIGRldi0+Y2xhc3NfZGV2LmRldi0+YnVzX2lkLAorCSAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNDM2LDcgKzQxNSw2IEBACiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CiAJCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CkBAIC00NDYsNyArNDI0LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CkBAIC00NTgsMTAgKzQzNiwxMCBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJCX0KIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fbm9ydGVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX25vcnRlbC5jCmluZGV4IGQxYTY3MGIuLjc0YjlkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fbm9ydGVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19ub3J0ZWwuYwpAQCAtMSw5ICsxLDggQEAKIC8qIG9yaW5vY29fbm9ydGVsLmMKLSAqIAorICoKICAqIERyaXZlciBmb3IgUHJpc20gSUkgZGV2aWNlcyB3aGljaCB3b3VsZCB1c3VhbGx5IGJlIGRyaXZlbiBieSBvcmlub2NvX2NzLAogICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBQQ0ktdG8tUENNQ0lBIGFkYXB0ZXIgdXNlZCBpbgogICogTm9ydGVsIGVtb2JpbGl0eSwgU3ltYm9sIExBLTQxMTMgYW5kIFN5bWJvbCBMQS00MTIzLgotICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBOb3J0ZWwgUENJLVBDTUNJQS1BZGFwdGVyLiAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVG9iaWFzIEhvZmZtYW5uCiAgKiAgICAgICAgICAgKEMpIDIwMDMgQ2hyaXN0b3BoIEp1bmdlZ2dlciA8ZGlzZG9zQHRyYXVtNDA0LmRlPgpAQCAtNTAsNjcgKzQ5LDYyIEBACiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgogCiAjaW5jbHVkZSAib3Jpbm9jby5oIgorI2luY2x1ZGUgIm9yaW5vY29fcGNpLmgiCiAKICNkZWZpbmUgQ09SX09GRlNFVCAgICAoMHhlMCkJLyogQ09SIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KICNkZWZpbmUgQ09SX1ZBTFVFICAgICAoQ09SX0xFVkVMX1JFUSB8IENPUl9GVU5DX0VOQSkJLyogRW5hYmxlIFBDIGNhcmQgd2l0aCBpbnRlcnJ1cHQgaW4gbGV2ZWwgdHJpZ2dlciAqLwogCiAKLS8qIE5vcnRlbCBzcGVjaWZpYyBkYXRhICovCi1zdHJ1Y3Qgbm9ydGVsX3BjaV9jYXJkIHsKLQl1bnNpZ25lZCBsb25nIGlvYmFzZTE7Ci0JdW5zaWduZWQgbG9uZyBpb2Jhc2UyOwotfTsKLQogLyoKLSAqIERvIGEgc29mdCByZXNldCBvZiB0aGUgUENJIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCisgKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCiAgKiBXZSBuZWVkIHRoaXMgdG8gZ2V0IGdvaW5nLi4uCiAgKiBUaGlzIGlzIHRoZSBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQgaXMgc3Ryb25nbHkgaW5zcGlyZWQgZnJvbSB3bGFuLW5nCiAgKgogICogTm90ZSBiaXMgOiBEb24ndCB0cnkgdG8gYWNjZXNzIEhFUk1FU19DTUQgZHVyaW5nIHRoZSByZXNldCBwaGFzZS4KICAqIEl0IGp1c3Qgd29uJ3Qgd29yayAhCiAgKi8KLXN0YXRpYyBpbnQgbm9ydGVsX3BjaV9jb3JfcmVzZXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyBpbnQgb3Jpbm9jb19ub3J0ZWxfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IG5vcnRlbF9wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CisJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCi0JLyogQXNzZXJ0IHRoZSByZXNldCB1bnRpbCB0aGUgY2FyZCBub3RpY2UgKi8KLQlvdXR3X3AoOCwgY2FyZC0+aW9iYXNlMSArIDIpOwotCWludyhjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7Ci0Jb3V0d19wKDB4ODAsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKKwkvKiBBc3NlcnQgdGhlIHJlc2V0IHVudGlsIHRoZSBjYXJkIG5vdGljZXMgKi8KKwlpb3dyaXRlMTYoOCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CisJaW9yZWFkMTYoY2FyZC0+YXR0cl9pbyArIENPUl9PRkZTRVQpOworCWlvd3JpdGUxNigweDgwLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCiAJLyogR2l2ZSB0aW1lIGZvciB0aGUgY2FyZCB0byByZWNvdmVyIGZyb20gdGhpcyBoYXJkIGVmZm9ydCAqLwotCW91dHdfcCgwLCBjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7Ci0Jb3V0d19wKDAsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKKwlpb3dyaXRlMTYoMCwgY2FyZC0+YXR0cl9pbyArIENPUl9PRkZTRVQpOworCWlvd3JpdGUxNigwLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCi0JLyogc2V0IENPUiBhcyB1c3VhbCAqLwotCW91dHdfcChDT1JfVkFMVUUsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKLQlvdXR3X3AoQ09SX1ZBTFVFLCBjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7CisJLyogU2V0IENPUiBhcyB1c3VhbCAqLworCWlvd3JpdGUxNihDT1JfVkFMVUUsIGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUKTsKKwlpb3dyaXRlMTYoQ09SX1ZBTFVFLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCi0Jb3V0d19wKDB4MjI4LCBjYXJkLT5pb2Jhc2UxICsgMik7CisJaW93cml0ZTE2KDB4MjI4LCBjYXJkLT5icmlkZ2VfaW8gKyAyKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5vcnRlbF9wY2lfaHdfaW5pdChzdHJ1Y3Qgbm9ydGVsX3BjaV9jYXJkICpjYXJkKQorc3RhdGljIGludCBvcmlub2NvX25vcnRlbF9od19pbml0KHN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkKQogewogCWludCBpOwogCXUzMiByZWc7CiAKLQkvKiBzZXR1cCBicmlkZ2UgKi8KLQlpZiAoaW53KGNhcmQtPmlvYmFzZTEpICYgMSkgeworCS8qIFNldHVwIGJyaWRnZSAqLworCWlmIChpb3JlYWQxNihjYXJkLT5icmlkZ2VfaW8pICYgMSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJicmcxIGFuc3dlcjEgd3JvbmdcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlvdXR3X3AoMHgxMTgsIGNhcmQtPmlvYmFzZTEgKyAyKTsKLQlvdXR3X3AoMHgxMDgsIGNhcmQtPmlvYmFzZTEgKyAyKTsKKwlpb3dyaXRlMTYoMHgxMTgsIGNhcmQtPmJyaWRnZV9pbyArIDIpOworCWlvd3JpdGUxNigweDEwOCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CiAJbWRlbGF5KDMwKTsKLQlvdXR3X3AoMHg4LCBjYXJkLT5pb2Jhc2UxICsgMik7CisJaW93cml0ZTE2KDB4OCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CiAJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKIAkJbWRlbGF5KDMwKTsKLQkJaWYgKGludyhjYXJkLT5pb2Jhc2UxKSAmIDB4MTApIHsKKwkJaWYgKGlvcmVhZDE2KGNhcmQtPmJyaWRnZV9pbykgJiAweDEwKSB7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTExOCw0MiArMTEyLDQyIEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJyZzEgdGltZWQgb3V0XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKGludyhjYXJkLT5pb2Jhc2UyICsgMHhlMCkgJiAxKSB7CisJaWYgKGlvcmVhZDE2KGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUKSAmIDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYnJnMiBhbnN3ZXIxIHdyb25nXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKGludyhjYXJkLT5pb2Jhc2UyICsgMHhlMikgJiAxKSB7CisJaWYgKGlvcmVhZDE2KGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUICsgMikgJiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJyZzIgYW5zd2VyMiB3cm9uZ1xuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCWlmIChpbncoY2FyZC0+aW9iYXNlMiArIDB4ZTQpICYgMSkgeworCWlmIChpb3JlYWQxNihjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCArIDQpICYgMSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJicmcyIGFuc3dlcjMgd3JvbmdcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCS8qIHNldCB0aGUgUENNQ0lBIENPUi1SZWdpc3RlciAqLwotCW91dHdfcChDT1JfVkFMVUUsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKKwkvKiBTZXQgdGhlIFBDTUNJQSBDT1IgcmVnaXN0ZXIgKi8KKwlpb3dyaXRlMTYoQ09SX1ZBTFVFLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwotCXJlZyA9IGludyhjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7CisJcmVnID0gaW9yZWFkMTYoY2FyZC0+YXR0cl9pbyArIENPUl9PRkZTRVQpOwogCWlmIChyZWcgIT0gQ09SX1ZBTFVFKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIHNldHRpbmcgQ09SIHZhbHVlIChyZWc9JXgpXG4iLAogCQkgICAgICAgcmVnKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQkvKiBzZXQgbGVkcyAqLwotCW91dHdfcCgxLCBjYXJkLT5pb2Jhc2UxICsgMTApOworCS8qIFNldCBMRURzICovCisJaW93cml0ZTE2KDEsIGNhcmQtPmJyaWRnZV9pbyArIDEwKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBub3J0ZWxfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IG9yaW5vY29fbm9ydGVsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwotCXN0cnVjdCBub3J0ZWxfcGNpX2NhcmQgKmNhcmQ7CisJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl2b2lkIF9faW9tZW0gKmlvbWVtOworCXZvaWQgX19pb21lbSAqaGVybWVzX2lvLCAqYnJpZGdlX2lvLCAqYXR0cl9pbzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKQEAgLTE2MiwxOSArMTU2LDM0IEBACiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7Ci0JaWYgKGVyciAhPSAwKSB7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGZhaWxfcmVzb3VyY2VzOwogCX0KIAotCWlvbWVtID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOwotCWlmICghaW9tZW0pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsX21hcF9pbzsKKwlicmlkZ2VfaW8gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCFicmlkZ2VfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBicmlkZ2UgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBmYWlsX21hcF9icmlkZ2U7CisJfQorCisJYXR0cl9pbyA9IHBjaV9pb21hcChwZGV2LCAxLCAwKTsKKwlpZiAoIWF0dHJfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBQQ01DSUEgYXR0cmlidXRlc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfYXR0cjsKKwl9CisKKwloZXJtZXNfaW8gPSBwY2lfaW9tYXAocGRldiwgMiwgMCk7CisJaWYgKCFoZXJtZXNfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBjaGlwc2V0IHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfaGVybWVzOwogCX0KIAogCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlICovCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCBub3J0ZWxfcGNpX2Nvcl9yZXNldCk7CisJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCBvcmlub2NvX25vcnRlbF9jb3JfcmVzZXQpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xODMsMTYgKzE5MiwxMiBAQAogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7Ci0JY2FyZC0+aW9iYXNlMSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQljYXJkLT5pb2Jhc2UyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCWRldi0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCWNhcmQtPmJyaWRnZV9pbyA9IGJyaWRnZV9pbzsKKwljYXJkLT5hdHRyX2lvID0gYXR0cl9pbzsKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGlvbWVtLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkRldGVjdGVkIE5vcnRlbCBQQ0kgZGV2aWNlIGF0ICVzIGlycTolZCwgIgotCSAgICAgICAiaW8gYWRkcjoweCVseFxuIiwgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSwgZGV2LT5iYXNlX2FkZHIpOworCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgU0FfU0hJUlEsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKQEAgLTIwMSwyMSArMjA2LDE5IEBACiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBmYWlsX2lycTsKIAl9Ci0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKLQllcnIgPSBub3J0ZWxfcGNpX2h3X2luaXQoY2FyZCk7CisJZXJyID0gb3Jpbm9jb19ub3J0ZWxfaHdfaW5pdChjYXJkKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQllcnIgPSBub3J0ZWxfcGNpX2Nvcl9yZXNldChwcml2KTsKKwllcnIgPSBvcmlub2NvX25vcnRlbF9jb3JfcmVzZXQocHJpdik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbml0aWFsIHJlc2V0IGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKQEAgLTIyMyw2ICsyMjYsOCBAQAogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAogCXJldHVybiAwOwogCkBAIC0yMzQsOSArMjM5LDE1IEBACiAJZnJlZV9vcmlub2NvZGV2KGRldik7CiAKICBmYWlsX2FsbG9jOgotCXBjaV9pb3VubWFwKHBkZXYsIGlvbWVtKTsKKwlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwogCi0gZmFpbF9tYXBfaW86CisgZmFpbF9tYXBfaGVybWVzOgorCXBjaV9pb3VubWFwKHBkZXYsIGF0dHJfaW8pOworCisgZmFpbF9tYXBfYXR0cjoKKwlwY2lfaW91bm1hcChwZGV2LCBicmlkZ2VfaW8pOworCisgZmFpbF9tYXBfYnJpZGdlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKICBmYWlsX3Jlc291cmNlczoKQEAgLTI0NSwyNiArMjU2LDI3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IG5vcnRlbF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBvcmlub2NvX25vcnRlbF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5vcnRlbF9wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CisJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCi0JLyogY2xlYXIgbGVkcyAqLwotCW91dHdfcCgwLCBjYXJkLT5pb2Jhc2UxICsgMTApOworCS8qIENsZWFyIExFRHMgKi8KKwlpb3dyaXRlMTYoMCwgY2FyZC0+YnJpZGdlX2lvICsgMTApOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfb3Jpbm9jb2RldihkZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3LmlvYmFzZSk7CisJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YXR0cl9pbyk7CisJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YnJpZGdlX2lvKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbm9ydGVsX3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fbm9ydGVsX2lkX3RhYmxlW10gPSB7CiAJLyogTm9ydGVsIGVtb2JpbGl0eSBQQ0kgKi8KIAl7MHgxMjZjLCAweDgwMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBTeW1ib2wgTEEtNDEyMyBQQ0kgKi8KQEAgLTI3MiwxMyArMjg0LDE1IEBACiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBub3J0ZWxfcGNpX2lkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX25vcnRlbF9pZF90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBub3J0ZWxfcGNpX2RyaXZlciA9IHsKLQkubmFtZSA9IERSSVZFUl9OQU1FLAotCS5pZF90YWJsZSA9IG5vcnRlbF9wY2lfaWRfdGFibGUsCi0JLnByb2JlID0gbm9ydGVsX3BjaV9pbml0X29uZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3Aobm9ydGVsX3BjaV9yZW1vdmVfb25lKSwKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvcmlub2NvX25vcnRlbF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb19ub3J0ZWxfaWRfdGFibGUsCisJLnByb2JlCQk9IG9yaW5vY29fbm9ydGVsX2luaXRfb25lLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb19ub3J0ZWxfcmVtb3ZlX29uZSksCisJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb3Jpbm9jb19wY2lfcmVzdW1lLAogfTsKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KQEAgLTI4OCwyMCArMzAyLDE5IEBACiAgICAgKCJEcml2ZXIgZm9yIHdpcmVsZXNzIExBTiBjYXJkcyB1c2luZyB0aGUgTm9ydGVsIFBDSSBicmlkZ2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAotc3RhdGljIGludCBfX2luaXQgbm9ydGVsX3BjaV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvcmlub2NvX25vcnRlbF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCB2ZXJzaW9uKTsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZub3J0ZWxfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmb3Jpbm9jb19ub3J0ZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG5vcnRlbF9wY2lfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fbm9ydGVsX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5vcnRlbF9wY2lfZHJpdmVyKTsKLQlzc2xlZXAoMSk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZvcmlub2NvX25vcnRlbF9kcml2ZXIpOwogfQogCi1tb2R1bGVfaW5pdChub3J0ZWxfcGNpX2luaXQpOwotbW9kdWxlX2V4aXQobm9ydGVsX3BjaV9leGl0KTsKK21vZHVsZV9pbml0KG9yaW5vY29fbm9ydGVsX2luaXQpOworbW9kdWxlX2V4aXQob3Jpbm9jb19ub3J0ZWxfZXhpdCk7CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuYwppbmRleCA1MzYyYzIxLi4xYzEwNWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qIG9yaW5vY29fcGNpLmMKICAqIAotICogRHJpdmVyIGZvciBQcmlzbSBJSSBkZXZpY2VzIHRoYXQgaGF2ZSBhIGRpcmVjdCBQQ0kgaW50ZXJmYWNlCi0gKiAoaS5lLiwgbm90IGluIGEgUGNtY2lhIG9yIFBMWCBicmlkZ2UpCisgKiBEcml2ZXIgZm9yIFByaXNtIDIuNS8zIGRldmljZXMgdGhhdCBoYXZlIGEgZGlyZWN0IFBDSSBpbnRlcmZhY2UKKyAqIChpLmUuIHRoZXNlIGFyZSBub3QgUENNQ0lBIGNhcmRzIGluIGEgUENNQ0lBLXRvLVBDSSBicmlkZ2UpLgorICogVGhlIGNhcmQgY29udGFpbnMgb25seSBvbmUgUENJIHJlZ2lvbiwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSB1c3VhbAorICogaGVybWVzIHJlZ2lzdGVycywgYXMgd2VsbCBhcyB0aGUgQ09SIHJlZ2lzdGVyLgogICoKLSAqIFNwZWNpZmljYWxseSBoZXJlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIExpbmtzeXMgV01QMTEKLSAqCi0gKiBDdXJyZW50IG1haW50YWluZXJzIChhcyBvZiAyOSBTZXB0ZW1iZXIgMjAwMykgYXJlOgorICogQ3VycmVudCBtYWludGFpbmVycyBhcmU6CiAgKiAJUGF2ZWwgUm9za2luIDxwcm9za2kgQVQgZ251Lm9yZz4KICAqIGFuZAlEYXZpZCBHaWJzb24gPGhlcm1lcyBBVCBnaWJzb24uZHJvcGJlYXIuaWQuYXU+CiAgKgpAQCAtNDEsNTQgKzQxLDYgQEAKICAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCiAgKi8KIAotLyoKLSAqIFRoZW9yeSBvZiBvcGVyYXRpb24uLi4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE1heWJlIHlvdSBoYWQgYSBsb29rIGluIG9yaW5vY29fcGx4LiBXZWxsLCB0aGlzIGlzIHRvdGFsbHkgZGlmZmVyZW50Li4uCi0gKgotICogVGhlIGNhcmQgY29udGFpbnMgb25seSBvbmUgUENJIHJlZ2lvbiwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSB1c3VhbAotICogaGVybWVzIHJlZ2lzdGVycy4KLSAqCi0gKiBUaGUgZHJpdmVyIHdpbGwgbWVtb3J5IG1hcCB0aGlzIHJlZ2lvbiBpbiBub3JtYWwgbWVtb3J5LiBCZWNhdXNlCi0gKiB0aGUgaGVybWVzIHJlZ2lzdGVycyBhcmUgbWFwcGVkIGluIG5vcm1hbCBtZW1vcnkgYW5kIG5vdCBpbiBJU0EgSS9PCi0gKiBwb3N0IHNwYWNlLCB3ZSBjYW4ndCB1c2UgdGhlIHVzdWFsIGludy9vdXR3IG1hY3JvcyBhbmQgd2UgbmVlZCB0bwotICogdXNlIHJlYWR3L3dyaXRldy4KLSAqIFRoaXMgc2xpZ2h0IGRpZmZlcmVuY2UgZm9yY2UgdXMgdG8gY29tcGlsZSBvdXIgb3duIHZlcnNpb24gb2YKLSAqIGhlcm1lcy5jIHdpdGggdGhlIHJlZ2lzdGVyIGFjY2VzcyBtYWNybyBjaGFuZ2VkLiBUaGF0J3MgYSBiaXQKLSAqIGhhY2tpc2ggYnV0IHdvcmtzIGZpbmUuCi0gKgotICogTm90ZSB0aGF0IHRoZSBQQ0kgcmVnaW9uIGlzIHByZXR0eSBiaWcgKDRLKS4gVGhhdCdzIG11Y2ggbW9yZSB0aGFuCi0gKiB0aGUgdXN1YWwgc2V0IG9mIGhlcm1lcyByZWdpc3RlciAoMHgwIC0+IDB4M0UpLiBJJ3ZlIGdvdCBhIHN0cm9uZwotICogc3VzcGljaW9uIHRoYXQgdGhlIHdob2xlIG1lbW9yeSBzcGFjZSBvZiB0aGUgYWRhcHRlciBpcyBpbiBmYWN0IGluCi0gKiB0aGlzIHJlZ2lvbi4gQWNjZXNzaW5nIGRpcmVjdGx5IHRoZSBhZGFwdGVyIG1lbW9yeSBpbnN0ZWFkIG9mIGdvaW5nCi0gKiB0aHJvdWdoIHRoZSB1c3VhbCByZWdpc3RlciB3b3VsZCBzcGVlZCB1cCBzaWduaWZpY2FudGVseSB0aGUKLSAqIG9wZXJhdGlvbnMuLi4KLSAqCi0gKiBGaW5hbGx5LCB0aGUgY2FyZCBsb29rcyBsaWtlIHRoaXMgOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgQnVzICAwLCBkZXZpY2UgIDE0LCBmdW5jdGlvbiAgMDoKLSAgICBOZXR3b3JrIGNvbnRyb2xsZXI6IFBDSSBkZXZpY2UgMTI2MDozODczIChIYXJyaXMgU2VtaWNvbmR1Y3RvcikgKHJldiAxKS4KLSAgICAgIElSUSAxMS4KLSAgICAgIE1hc3RlciBDYXBhYmxlLiAgTGF0ZW5jeT0yNDguICAKLSAgICAgIFByZWZldGNoYWJsZSAzMiBiaXQgbWVtb3J5IGF0IDB4ZmZiY2MwMDAgWzB4ZmZiY2NmZmZdLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTAwOjBlLjAgTmV0d29yayBjb250cm9sbGVyOiBIYXJyaXMgU2VtaWNvbmR1Y3RvcjogVW5rbm93biBkZXZpY2UgMzg3MyAocmV2IDAxKQotICAgICAgICBTdWJzeXN0ZW06IFVua25vd24gZGV2aWNlIDE3Mzc6Mzg3NAotICAgICAgICBDb250cm9sOiBJL08rIE1lbSsgQnVzTWFzdGVyKyBTcGVjQ3ljbGUtIE1lbVdJTlYtIFZHQVNub29wLSBQYXJFcnItIFN0ZXBwaW5nLSBTRVJSLSBGYXN0QjJCLQotICAgICAgICBTdGF0dXM6IENhcCsgNjZNaHotIFVERi0gRmFzdEIyQisgUGFyRXJyLSBERVZTRUw9bWVkaXVtID5UQWJvcnQtIDxUQWJvcnQtIDxNQWJvcnQtID5TRVJSLSA8UEVSUi0KLSAgICAgICAgTGF0ZW5jeTogMjQ4IHNldCwgY2FjaGUgbGluZSBzaXplIDA4Ci0gICAgICAgIEludGVycnVwdDogcGluIEEgcm91dGVkIHRvIElSUSAxMQotICAgICAgICBSZWdpb24gMDogTWVtb3J5IGF0IGZmYmNjMDAwICgzMi1iaXQsIHByZWZldGNoYWJsZSkgW3NpemU9NEtdCi0gICAgICAgIENhcGFiaWxpdGllczogW2RjXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMgotICAgICAgICAgICAgICAgIEZsYWdzOiBQTUVDbGstIEF1eFB3ci0gRFNJLSBEMSsgRDIrIFBNRSsKLSAgICAgICAgICAgICAgICBTdGF0dXM6IEQwIFBNRS1FbmFibGUtIERTZWw9MCBEU2NhbGU9MCBQTUUtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFRoYXQncyBhbGwuLgotICoKLSAqIEplYW4gSUkKLSAqLwotCiAjZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvX3BjaSIKICNkZWZpbmUgUEZYIERSSVZFUl9OQU1FICI6ICIKIApAQCAtMTAwLDEyICs1MiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSAib3Jpbm9jby5oIgorI2luY2x1ZGUgIm9yaW5vY29fcGNpLmgiCiAKLS8qIEFsbCB0aGUgbWFnaWMgdGhlcmUgaXMgZnJvbSB3bGFuLW5nICovCi0vKiBNYWdpYyBvZmZzZXQgb2YgdGhlIHJlc2V0IHJlZ2lzdGVyIG9mIHRoZSBQQ0kgY2FyZCAqLworLyogT2Zmc2V0IG9mIHRoZSBDT1IgcmVnaXN0ZXIgb2YgdGhlIFBDSSBjYXJkICovCiAjZGVmaW5lIEhFUk1FU19QQ0lfQ09SCQkoMHgyNikKLS8qIE1hZ2ljIGJpdG1hc2sgdG8gcmVzZXQgdGhlIGNhcmQgKi8KKworLyogQml0bWFzayB0byByZXNldCB0aGUgY2FyZCAqLwogI2RlZmluZSBIRVJNRVNfUENJX0NPUl9NQVNLCSgweDAwODApCisKIC8qIE1hZ2ljIHRpbWVvdXRzIGZvciBkb2luZyB0aGUgcmVzZXQuCiAgKiBUaG9zZSB0aW1lcyBhcmUgc3RyYWlnaHQgZnJvbSB3bGFuLW5nLCBhbmQgaXQgaXMgY2xhaW1lZCB0aGF0IHRoZXkKICAqIGFyZSBuZWNlc3NhcnkuIEFsYW4gd2lsbCBraWxsIG1lLiBUYWtlIHlvdXIgdGltZSBhbmQgZ3JhYiBhIGNvZmZlZS4gKi8KQEAgLTExMywxMyArNjcsOCBAQAogI2RlZmluZSBIRVJNRVNfUENJX0NPUl9PRkZUCSg1MDApCQkvKiBtcyAqLwogI2RlZmluZSBIRVJNRVNfUENJX0NPUl9CVVNZVAkoNTAwKQkJLyogbXMgKi8KIAotLyogT3Jpbm9jbyBQQ0kgc3BlY2lmaWMgZGF0YSAqLwotc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgewotCXZvaWQgX19pb21lbSAqcGNpX2lvYWRkcjsKLX07Ci0KIC8qCi0gKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIFBDSSBjYXJkIHVzaW5nIHRoZSBDb25maWd1cmF0aW9uIE9wdGlvbiBSZWdpc3RlcgorICogRG8gYSBzb2Z0IHJlc2V0IG9mIHRoZSBjYXJkIHVzaW5nIHRoZSBDb25maWd1cmF0aW9uIE9wdGlvbiBSZWdpc3RlcgogICogV2UgbmVlZCB0aGlzIHRvIGdldCBnb2luZy4uLgogICogVGhpcyBpcyB0aGUgcGFydCBvZiB0aGUgY29kZSB0aGF0IGlzIHN0cm9uZ2x5IGluc3BpcmVkIGZyb20gd2xhbi1uZwogICoKQEAgLTEzMSwxNCArODAsMTMgQEAKICAqIE5vdGUgYmlzIDogRG9uJ3QgdHJ5IHRvIGFjY2VzcyBIRVJNRVNfQ01EIGR1cmluZyB0aGUgcmVzZXQgcGhhc2UuCiAgKiBJdCBqdXN0IHdvbid0IHdvcmsgIQogICovCi1zdGF0aWMgaW50Ci1vcmlub2NvX3BjaV9jb3JfcmVzZXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyBpbnQgb3Jpbm9jb19wY2lfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXVuc2lnbmVkIGxvbmcJdGltZW91dDsKLQl1MTYJcmVnOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MTYgcmVnOwogCi0JLyogQXNzZXJ0IHRoZSByZXNldCB1bnRpbCB0aGUgY2FyZCBub3RpY2UgKi8KKwkvKiBBc3NlcnQgdGhlIHJlc2V0IHVudGlsIHRoZSBjYXJkIG5vdGljZXMgKi8KIAloZXJtZXNfd3JpdGVfcmVnbihodywgUENJX0NPUiwgSEVSTUVTX1BDSV9DT1JfTUFTSyk7CiAJbWRlbGF5KEhFUk1FU19QQ0lfQ09SX09OVCk7CiAKQEAgLTE2MywxOSArMTExLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBJbml0aWFsaXNlIGEgY2FyZC4gTW9zdGx5IHNpbWlsYXIgdG8gUExYIGNvZGUuCi0gKi8KIHN0YXRpYyBpbnQgb3Jpbm9jb19wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjaV9pb3JhbmdlOwotCXUxNiBfX2lvbWVtICpwY2lfaW9hZGRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHBjaV9pb2xlbjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gTlVMTDsKKwlpbnQgZXJyOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKmhlcm1lc19pbzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKQEAgLTE4NCwzOSArMTI3LDMyIEBACiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7Ci0JaWYgKGVyciAhPSAwKSB7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGZhaWxfcmVzb3VyY2VzOwogCX0KIAotCS8qIFJlc291cmNlIDAgaXMgbWFwcGVkIHRvIHRoZSBoZXJtZXMgcmVnaXN0ZXJzICovCi0JcGNpX2lvcmFuZ2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JcGNpX2lvbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKLQlwY2lfaW9hZGRyID0gaW9yZW1hcChwY2lfaW9yYW5nZSwgcGNpX2lvbGVuKTsKLQlpZiAoIXBjaV9pb3JhbmdlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZW1hcCBoYXJkd2FyZSByZWdpc3RlcnNcbiIpOwotCQlnb3RvIGZhaWxfbWFwOworCWhlcm1lc19pbyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIWhlcm1lc19pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVtYXAgY2hpcHNldCByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWxfbWFwX2hlcm1lczsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBuZXR3b3JrIGRldmljZSAqLwogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgb3Jpbm9jb19wY2lfY29yX3Jlc2V0KTsKLQlpZiAoISBkZXYpIHsKKwlpZiAoIWRldikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfYWxsb2M7CiAJfQogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7Ci0JY2FyZC0+cGNpX2lvYWRkciA9IHBjaV9pb2FkZHI7Ci0JZGV2LT5tZW1fc3RhcnQgPSBwY2lfaW9yYW5nZTsKLQlkZXYtPm1lbV9lbmQgPSBwY2lfaW9yYW5nZSArIHBjaV9pb2xlbiAtIDE7CiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKLQloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBwY2lfaW9hZGRyLCBIRVJNRVNfMzJCSVRfUkVHU1BBQ0lORyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkRldGVjdGVkIGRldmljZSAlcywgbWVtOjB4JWx4LTB4JWx4LCBpcnEgJWRcbiIsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpLCBkZXYtPm1lbV9zdGFydCwgZGV2LT5tZW1fZW5kLCBwZGV2LT5pcnEpOworCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzMyQklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgU0FfU0hJUlEsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKQEAgLTIyNSw5ICsxNjEsNyBAQAogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbF9pcnE7CiAJfQotCWRldi0+aXJxID0gcGRldi0+aXJxOwogCi0JLyogUGVyZm9ybSBhIENPUiByZXNldCB0byBzdGFydCB0aGUgY2FyZCAqLwogCWVyciA9IG9yaW5vY29fcGNpX2Nvcl9yZXNldChwcml2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkluaXRpYWwgcmVzZXQgZmFpbGVkXG4iKTsKQEAgLTIzNiwxMSArMTcwLDEzIEBACiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAogCXJldHVybiAwOwogCkBAIC0yNTIsOSArMTg4LDkgQEAKIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIAogIGZhaWxfYWxsb2M6Ci0JaW91bm1hcChwY2lfaW9hZGRyKTsKKwlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwogCi0gZmFpbF9tYXA6CisgZmFpbF9tYXBfaGVybWVzOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKICBmYWlsX3Jlc291cmNlczoKQEAgLTI2Nyw4NyArMjAzLDE3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9vcmlub2NvZGV2KGRldik7Ci0JaW91bm1hcChjYXJkLT5wY2lfaW9hZGRyKTsKKwlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi1zdGF0aWMgaW50IG9yaW5vY29fcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQkKLQotCWVyciA9IG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaHdfdW5hdmFpbGFibGUgb24gb3Jpbm9jb19wY2lfc3VzcGVuZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogb3Jpbm9jb19wY2lfc3VzcGVuZCgpOiBFcnJvciAlZCBkb3duaW5nIGludGVyZmFjZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE9yaW5vY28tUENJIHdha2luZyB1cFxuIiwgZGV2LT5uYW1lKTsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0KLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlIG9uIG9yaW5vY29fcGNpX3Jlc3VtZSgpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkIG9uIG9yaW5vY29fcGNpX3Jlc3VtZSgpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQl9Ci0JCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3BjaV9wY2lfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3BjaV9pZF90YWJsZVtdID0gewogCS8qIEludGVyc2lsIFByaXNtIDMgKi8KIAl7MHgxMjYwLCAweDM4NzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBJbnRlcnNpbCBQcmlzbSAyLjUgKi8KQEAgLTM1NywxMSArMjIzLDExIEBACiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX3BjaV9wY2lfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG9yaW5vY29fcGNpX2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9yaW5vY29fcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuaWRfdGFibGUJPSBvcmlub2NvX3BjaV9wY2lfaWRfdGFibGUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb19wY2lfaWRfdGFibGUsCiAJLnByb2JlCQk9IG9yaW5vY29fcGNpX2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb19wY2lfcmVtb3ZlX29uZSksCiAJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViMWUwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qIG9yaW5vY29fcGNpLmgKKyAqIAorICogQ29tbW9uIGNvZGUgZm9yIGFsbCBPcmlub2NvIGRyaXZlcnMgZm9yIFBDSSBkZXZpY2VzLCBpbmNsdWRpbmcKKyAqIGJvdGggbmF0aXZlIFBDSSBhbmQgUENNQ0lBLXRvLVBDSSBicmlkZ2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgUGF2ZWwgUm9za2luLgorICogU2VlIG9yaW5vY28uYyBmb3IgbGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9PUklOT0NPX1BDSV9ICisjZGVmaW5lIF9PUklOT0NPX1BDSV9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworLyogRHJpdmVyIHNwZWNpZmljIGRhdGEgKi8KK3N0cnVjdCBvcmlub2NvX3BjaV9jYXJkIHsKKwl2b2lkIF9faW9tZW0gKmJyaWRnZV9pbzsKKwl2b2lkIF9faW9tZW0gKmF0dHJfaW87Cit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG9yaW5vY29fcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWVyciA9IG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGxvY2sgaGFyZHdhcmUgZm9yIHN1c3BlbmRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGVycm9yICVkIGJyaW5naW5nIGludGVyZmFjZSBkb3duICIKKwkJICAgICAgICJmb3Igc3VzcGVuZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQorCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKworCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CisJCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKKwlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAorCQkJICBkZXYtPm5hbWUsIGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmUtYWxsb2NhdGUgSVJRIG9uIHJlc3VtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlICIKKwkJICAgICAgICJvbiByZXN1bWVcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCisJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKKworCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZCBvbiByZXN1bWVcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCX0KKwkKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG9yaW5vY29fcGNpX3N1c3BlbmQgTlVMTAorI2RlZmluZSBvcmlub2NvX3BjaV9yZXN1bWUgTlVMTAorI2VuZGlmCisKKyNlbmRpZiAvKiBfT1JJTk9DT19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGx4LmMKaW5kZXggMjEwZTczNy4uODRmNjk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wbHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BseC5jCkBAIC0zLDcgKzMsNyBAQAogICogRHJpdmVyIGZvciBQcmlzbSBJSSBkZXZpY2VzIHdoaWNoIHdvdWxkIHVzdWFsbHkgYmUgZHJpdmVuIGJ5IG9yaW5vY29fY3MsCiAgKiBidXQgYXJlIGNvbm5lY3RlZCB0byB0aGUgUENJIGJ1cyBieSBhIFBMWDkwNTIuCiAgKgotICogQ3VycmVudCBtYWludGFpbmVycyAoYXMgb2YgMjkgU2VwdGVtYmVyIDIwMDMpIGFyZToKKyAqIEN1cnJlbnQgbWFpbnRhaW5lcnMgYXJlOgogICogCVBhdmVsIFJvc2tpbiA8cHJvc2tpIEFUIGdudS5vcmc+CiAgKiBhbmQJRGF2aWQgR2lic29uIDxoZXJtZXMgQVQgZ2lic29uLmRyb3BiZWFyLmlkLmF1PgogICoKQEAgLTMwLDM4ICszMCwxOCBAQAogICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlCiAgKiBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCi0KLSAqIENhdXRpb246IHRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBwcm9iYWJseSBidWdneS4gIEZvciBzdWNjZXNzIGFuZAotICogZmFpbHVyZSByZXBvcnRzIGZvciBkaWZmZXJlbnQgY2FyZHMgYW5kIGFkYXB0b3JzLCBzZWUKLSAqIG9yaW5vY29fcGx4X3BjaV9pZF90YWJsZSBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUuICBJZiB5b3UgaGF2ZSBhCi0gKiBjYXJkIHdlIGRvbid0IGhhdmUgdGhlIFBDSSBpZCBmb3IsIGFuZCBsb29rcyBsaWtlIGl0IHNob3VsZCB3b3JrLAotICogZHJvcCBtZSBtYWlsIHdpdGggdGhlIGlkIGFuZCAiaXQgd29ya3MiLyJpdCBkb2Vzbid0IHdvcmsiLgogICoKLSAqIE5vdGU6IGlmIGV2ZXJ5dGhpbmcgZ2V0cyBkZXRlY3RlZCBmaW5lIGJ1dCBpdCBkb2Vzbid0IGFjdHVhbGx5IHNlbmQKLSAqIG9yIHJlY2VpdmUgcGFja2V0cywgeW91ciBmaXJzdCBwb3J0IG9mIGNhbGwgc2hvdWxkIHByb2JhYmx5IGJlIHRvCi0gKiB0cnkgbmV3ZXIgZmlybXdhcmUgaW4gdGhlIGNhcmQuICBFc3BlY2lhbGx5IGlmIHlvdSdyZSBkb2luZyBBZC1Ib2MKLSAqIG1vZGVzLgotICoKLSAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG9yaW5vY28uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCi0gKiBhbGxvY2F0aW9uIHN0dWZmLiAgVGhlIGV4cGxhbmF0aW9uIGJlbG93IGlzIGNvdXJ0ZXN5IG9mIFJ5YW4gTmllbWkKLSAqIG9uIHRoZSBsaW51eC13bGFuLW5nIGxpc3QgYXQKLSAqIGh0dHA6Ly9hcmNoaXZlcy5uZW9oYXBzaXMuY29tL2FyY2hpdmVzL2Rldi9saW51eC13bGFuLzIwMDEtcTEvMDAyNi5odG1sCi0gKgotICogVGhlIFBMWDkwNTItYmFzZWQgY2FyZHMgKFdMMTEwMDAgYW5kIHNldmVyYWwgb3RoZXJzKSBhcmUgYQotICogZGlmZmVyZW50IGJlYXN0IHRoYW4gdGhlIHVzdWFsIFBDTUNJQS1iYXNlZCBQUklTTTIgY29uZmlndXJhdGlvbgotICogZXhwZWN0ZWQgYnkgd2xhbi1uZy4gIEhlcmUncyB0aGUgZ2VuZXJhbCBkZXRhaWxzIG9uIGhvdyB0aGUgV0wxMTAwMAotICogUENJIGFkYXB0ZXIgd29ya3M6CisgKiBIZXJlJ3MgdGhlIGdlbmVyYWwgZGV0YWlscyBvbiBob3cgdGhlIFBMWDkwNTIgYWRhcHRlciB3b3JrczoKICAqCiAgKiAtIFR3byBQQ0kgSS9PIGFkZHJlc3Mgc3BhY2VzLCBvbmUgMHg4MCBsb25nIHdoaWNoIGNvbnRhaW5zIHRoZQogICogUExYOTA1MiByZWdpc3RlcnMsIGFuZCBvbmUgdGhhdCdzIDB4NDAgbG9uZyBtYXBwZWQgdG8gdGhlIFBDTUNJQQogICogc2xvdCBJL08gYWRkcmVzcyBzcGFjZS4KICAqCi0gKiAtIE9uZSBQQ0kgbWVtb3J5IGFkZHJlc3Mgc3BhY2UsIG1hcHBlZCB0byB0aGUgUENNQ0lBIG1lbW9yeSBzcGFjZQorICogLSBPbmUgUENJIG1lbW9yeSBhZGRyZXNzIHNwYWNlLCBtYXBwZWQgdG8gdGhlIFBDTUNJQSBhdHRyaWJ1dGUgc3BhY2UKICAqIChjb250YWluaW5nIHRoZSBDSVMpLgogICoKLSAqIEFmdGVyIGlkZW50aWZ5aW5nIHRoZSBJL08gYW5kIG1lbW9yeSBzcGFjZSwgeW91IGNhbiByZWFkIHRocm91Z2gKLSAqIHRoZSBtZW1vcnkgc3BhY2UgdG8gY29uZmlybSB0aGUgQ0lTJ3MgZGV2aWNlIElEIG9yIG1hbnVmYWN0dXJlciBJRAotICogdG8gbWFrZSBzdXJlIGl0J3MgdGhlIGV4cGVjdGVkIGNhcmQuICBxS2VlcCBpbiBtaW5kIHRoYXQgdGhlIFBDTUNJQQorICogVXNpbmcgdGhlIGxhdGVyLCB5b3UgY2FuIHJlYWQgdGhyb3VnaCB0aGUgQ0lTIGRhdGEgdG8gbWFrZSBzdXJlIHRoZQorICogY2FyZCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGRyaXZlci4gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIFBDTUNJQQogICogc3BlYyBzcGVjaWZpZXMgdGhlIENJUyBhcyB0aGUgbG93ZXIgOCBiaXRzIG9mIGVhY2ggd29yZCByZWFkIGZyb20KICAqIHRoZSBDSVMsIHNvIHRvIHJlYWQgdGhlIGJ5dGVzIG9mIHRoZSBDSVMsIHJlYWQgZXZlcnkgb3RoZXIgYnl0ZQogICogKDAsMiw0LC4uLikuIFBhc3NpbmcgdGhhdCB0ZXN0LCB5b3UgbmVlZCB0byBlbmFibGUgdGhlIEkvTyBhZGRyZXNzCkBAIC03MSw3ICs1MSw3IEBACiAgKiB3aXRoaW4gdGhlIFBDSSBtZW1vcnkgc3BhY2UuIFdyaXRlIDB4NDEgdG8gdGhlIENPUiByZWdpc3RlciB0bwogICogZW5hYmxlIEkvTyBtb2RlIGFuZCB0byBzZWxlY3QgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRvCiAgKiBjb25maXJtIHlvdSBhY3R1YWxseSBzdWNjZWVkZWQsIHJlYWQgdGhlIENPUiByZWdpc3RlciBiYWNrIGFuZCBtYWtlCi0gKiBzdXJlIGl0IGFjdHVhbGx5IGdvdCBzZXQgdG8gMHg0MSwgaW5jYXNlIHlvdSBoYXZlIGFuIHVuZXhwZWN0ZWQKKyAqIHN1cmUgaXQgYWN0dWFsbHkgZ290IHNldCB0byAweDQxLCBpbiBjYXNlIHlvdSBoYXZlIGFuIHVuZXhwZWN0ZWQKICAqIGNhcmQgaW5zZXJ0ZWQuCiAgKgogICogRm9sbG93aW5nIHRoYXQsIHlvdSBjYW4gdHJlYXQgdGhlIHNlY29uZCBQQ0kgSS9PIGFkZHJlc3Mgc3BhY2UgKHRoZQpAQCAtMTAxLDE2ICs4MSw2IEBACiAgKiB0aGF0LCBJJ3ZlIGhvdC1zd2FwcGVkIGEgbnVtYmVyIG9mIHRpbWVzIGR1cmluZyBkZWJ1Z2dpbmcgYW5kCiAgKiBkcml2ZXIgZGV2ZWxvcG1lbnQgZm9yIHZhcmlvdXMgcmVhc29ucyAoc3R1Y2sgV0FJVCMgbGluZSBhZnRlciB0aGUKICAqIHJhZGlvIGNhcmQncyBmaXJtd2FyZSBsb2NrcyB1cCkuCi0gKgotICogSG9wZSB0aGlzIGlzIGVub3VnaCBpbmZvIGZvciBzb21lb25lIHRvIGFkZCBQTFg5MDUyIHN1cHBvcnQgdG8gdGhlCi0gKiB3bGFuLW5nIGNhcmQuIEluIHRoZSBjYXNlIG9mIHRoZSBXTDExMDAwLCB0aGUgUENJIElEJ3MgYXJlCi0gKiAweDE2MzkvMHgwMjAwLCB3aXRoIG1hdGNoaW5nIHN1YnN5c3RlbSBJRCdzLiBPdGhlciBQTFg5MDUyLWJhc2VkCi0gKiBtYW51ZmFjdHVyZXJzIG90aGVyIHRoYW4gRXVtaXRjb20gKG9yIG9uIGNhcmRzIG90aGVyIHRoYW4gdGhlCi0gKiBXTDExMDAwKSBtYXkgaGF2ZSBkaWZmZXJlbnQgUENJIElEJ3MuCi0gKgotICogSWYgYW55b25lIG5lZWRzIGFueSBtb3JlIHNwZWNpZmljIGluZm8sIGxldCBtZSBrbm93LiBJIGhhdmVuJ3QgaGFkCi0gKiB0aW1lIHRvIGltcGxlbWVudCBzdXBwb3J0IG15c2VsZiB5ZXQsIGFuZCB3aXRoIHRoZSB3YXkgdGhpbmdzIGFyZQotICogZ29pbmcsIG1pZ2h0IG5vdCBoYXZlIHRpbWUgZm9yIGEgd2hpbGUuLgogICovCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm9yaW5vY29fcGx4IgpAQCAtMTI1LDYgKzk1LDcgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CiAKICNpbmNsdWRlICJvcmlub2NvLmgiCisjaW5jbHVkZSAib3Jpbm9jb19wY2kuaCIKIAogI2RlZmluZSBDT1JfT0ZGU0VUCSgweDNlMCkJLyogQ09SIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KICNkZWZpbmUgQ09SX1ZBTFVFCShDT1JfTEVWRUxfUkVRIHwgQ09SX0ZVTkNfRU5BKSAvKiBFbmFibGUgUEMgY2FyZCB3aXRoIGludGVycnVwdCBpbiBsZXZlbCB0cmlnZ2VyICovCkBAIC0xMzQsMzAgKzEwNSwyMCBAQAogI2RlZmluZSBQTFhfSU5UQ1NSCQkweDRjIC8qIEludGVycnVwdCBDb250cm9sICYgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFBMWF9JTlRDU1JfSU5URU4JKDE8PDYpIC8qIEludGVycnVwdCBFbmFibGUgYml0ICovCiAKLXN0YXRpYyBjb25zdCB1OCBjaXNfbWFnaWNbXSA9IHsKLQkweDAxLCAweDAzLCAweDAwLCAweDAwLCAweGZmLCAweDE3LCAweDA0LCAweDY3Ci19OwotCi0vKiBPcmlub2NvIFBMWCBzcGVjaWZpYyBkYXRhICovCi1zdHJ1Y3Qgb3Jpbm9jb19wbHhfY2FyZCB7Ci0Jdm9pZCBfX2lvbWVtICphdHRyX21lbTsKLX07Ci0KIC8qCiAgKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCiAgKi8KIHN0YXRpYyBpbnQgb3Jpbm9jb19wbHhfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBvcmlub2NvX3BseF9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKLQl1OCBfX2lvbWVtICphdHRyX21lbSA9IGNhcmQtPmF0dHJfbWVtOworCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTE2IHJlZzsKIAotCXdyaXRlYihDT1JfVkFMVUUgfCBDT1JfUkVTRVQsIGF0dHJfbWVtICsgQ09SX09GRlNFVCk7CisJaW93cml0ZTgoQ09SX1ZBTFVFIHwgQ09SX1JFU0VULCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCi0Jd3JpdGViKENPUl9WQUxVRSwgYXR0cl9tZW0gKyBDT1JfT0ZGU0VUKTsKKwlpb3dyaXRlOChDT1JfVkFMVUUsIGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUKTsKIAltZGVsYXkoMSk7CiAKIAkvKiBKdXN0IGluIGNhc2UsIHdhaXQgbW9yZSB1bnRpbCB0aGUgY2FyZCBpcyBubyBsb25nZXIgYnVzeSAqLwpAQCAtMTY4LDcgKzEyOSw3IEBACiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJfQogCi0JLyogRGlkIHdlIHRpbWVvdXQgPyAqLworCS8qIFN0aWxsIGJ1c3k/ICovCiAJaWYgKHJlZyAmIEhFUk1FU19DTURfQlVTWSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJCdXN5IHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKQEAgLTE3NywyMCArMTM4LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb3Jpbm9jb19wbHhfaHdfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCkKK3sKKwlpbnQgaTsKKwl1MzIgY3NyX3JlZzsKKwlzdGF0aWMgY29uc3QgdTggY2lzX21hZ2ljW10gPSB7CisJCTB4MDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MTcsIDB4MDQsIDB4NjcKKwl9OworCisJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVM6ICIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXByaW50aygiJTAyWDoiLCBpb3JlYWQ4KGNhcmQtPmF0dHJfaW8gKyAoaSA8PCAxKSkpOworCX0KKwlwcmludGsoIlxuIik7CisKKwkvKiBWZXJpZnkgd2hldGhlciBhIHN1cHBvcnRlZCBQQyBjYXJkIGlzIHByZXNlbnQgKi8KKwkvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBiZSBzbWFydGVkIGFib3V0IHRoaXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNpc19tYWdpYyk7IGkrKykgeworCQlpZiAoY2lzX21hZ2ljW2ldICE9IGlvcmVhZDgoY2FyZC0+YXR0cl9pbyArIChpIDw8IDEpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGhlIENJUyB2YWx1ZSBvZiBQcmlzbTIgUEMgIgorCQkJICAgICAgICJjYXJkIGlzIHVuZXhwZWN0ZWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwkvKiBiam9lcm46IFdlIG5lZWQgdG8gdGVsbCB0aGUgY2FyZCB0byBlbmFibGUgaW50ZXJydXB0cywgaW4KKwkgICBjYXNlIHRoZSBzZXJpYWwgZXByb20gZGlkbid0IGRvIHRoaXMgYWxyZWFkeS4gIFNlZSB0aGUKKwkgICBQTFg5MDUyIGRhdGEgYm9vaywgcDgtMSBhbmQgOC0yNCBmb3IgcmVmZXJlbmNlLiAqLworCWNzcl9yZWcgPSBpb3JlYWQzMihjYXJkLT5icmlkZ2VfaW8gKyBQTFhfSU5UQ1NSKTsKKwlpZiAoIShjc3JfcmVnICYgUExYX0lOVENTUl9JTlRFTikpIHsKKwkJY3NyX3JlZyB8PSBQTFhfSU5UQ1NSX0lOVEVOOworCQlpb3dyaXRlMzIoY3NyX3JlZywgY2FyZC0+YnJpZGdlX2lvICsgUExYX0lOVENTUik7CisJCWNzcl9yZWcgPSBpb3JlYWQzMihjYXJkLT5icmlkZ2VfaW8gKyBQTFhfSU5UQ1NSKTsKKwkJaWYgKCEoY3NyX3JlZyAmIFBMWF9JTlRDU1JfSU5URU4pKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZW5hYmxlIGludGVycnVwdHNcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBvcmlub2NvX3BseF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWludCBlcnIgPSAwOwotCXU4IF9faW9tZW0gKmF0dHJfbWVtID0gTlVMTDsKLQl1MzIgY3NyX3JlZywgcGx4X2FkZHI7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0Jc3RydWN0IG9yaW5vY29fcGx4X2NhcmQgKmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBwY2NhcmRfaW9hZGRyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjY2FyZF9pb2xlbiA9IDA7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0JaW50IGk7CisJaW50IGVycjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OworCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpoZXJtZXNfaW8sICphdHRyX2lvLCAqYnJpZGdlX2lvOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewpAQCAtMTk5LDMwICsxOTUsMzAgQEAKIAl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKLQlpZiAoZXJyICE9IDApIHsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZmFpbF9yZXNvdXJjZXM7CiAJfQogCi0JLyogUmVzb3VyY2UgMSBpcyBtYXBwZWQgdG8gUExYLXNwZWNpZmljIHJlZ2lzdGVycyAqLwotCXBseF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCWJyaWRnZV9pbyA9IHBjaV9pb21hcChwZGV2LCAxLCAwKTsKKwlpZiAoIWJyaWRnZV9pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIGJyaWRnZSByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWxfbWFwX2JyaWRnZTsKKwl9CiAKLQkvKiBSZXNvdXJjZSAyIGlzIG1hcHBlZCB0byB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBtZW1vcnkgKi8KLQlhdHRyX21lbSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLAotCQkJICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSk7Ci0JaWYgKCFhdHRyX21lbSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVtYXAgUENNQ0lBIHNwYWNlXG4iKTsKKwlhdHRyX2lvID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOworCWlmICghYXR0cl9pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIFBDTUNJQSBhdHRyaWJ1dGVzXG4iKTsKKwkJZXJyID0gLUVJTzsKIAkJZ290byBmYWlsX21hcF9hdHRyOwogCX0KIAotCS8qIFJlc291cmNlIDMgaXMgbWFwcGVkIHRvIHRoZSBQQ01DSUEgSS9PIGFkZHJlc3Mgc3BhY2UgKi8KLQlwY2NhcmRfaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDMpOwotCXBjY2FyZF9pb2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMyk7Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMywgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsX21hcF9pbzsKKwloZXJtZXNfaW8gPSBwY2lfaW9tYXAocGRldiwgMywgMCk7CisJaWYgKCFoZXJtZXNfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBjaGlwc2V0IHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfaGVybWVzOwogCX0KIAogCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlICovCkBAIC0yMzUsMTYgKzIzMSwxMiBAQAogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7Ci0JY2FyZC0+YXR0cl9tZW0gPSBhdHRyX21lbTsKLQlkZXYtPmJhc2VfYWRkciA9IHBjY2FyZF9pb2FkZHI7CisJY2FyZC0+YnJpZGdlX2lvID0gYnJpZGdlX2lvOworCWNhcmQtPmF0dHJfaW8gPSBhdHRyX2lvOwogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0JaGVybWVzX3N0cnVjdF9pbml0KCZwcml2LT5odywgbWVtLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkRldGVjdGVkIE9yaW5vY28vUHJpc20yIFBMWCBkZXZpY2UgIgotCSAgICAgICAiYXQgJXMgaXJxOiVkLCBpbyBhZGRyOjB4JWx4XG4iLCBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxLAotCSAgICAgICBwY2NhcmRfaW9hZGRyKTsKKwloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBoZXJtZXNfaW8sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAogCQkJICBkZXYtPm5hbWUsIGRldik7CkBAIC0yNTMsMjAgKzI0NSwxMSBAQAogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbF9pcnE7CiAJfQotCWRldi0+aXJxID0gcGRldi0+aXJxOwogCi0JLyogYmpvZXJuOiBXZSBuZWVkIHRvIHRlbGwgdGhlIGNhcmQgdG8gZW5hYmxlIGludGVycnVwdHMsIGluCi0JICAgY2FzZSB0aGUgc2VyaWFsIGVwcm9tIGRpZG4ndCBkbyB0aGlzIGFscmVhZHkuICBTZWUgdGhlCi0JICAgUExYOTA1MiBkYXRhIGJvb2ssIHA4LTEgYW5kIDgtMjQgZm9yIHJlZmVyZW5jZS4gKi8KLQljc3JfcmVnID0gaW5sKHBseF9hZGRyICsgUExYX0lOVENTUik7Ci0JaWYgKCEoY3NyX3JlZyAmIFBMWF9JTlRDU1JfSU5URU4pKSB7Ci0JCWNzcl9yZWcgfD0gUExYX0lOVENTUl9JTlRFTjsKLQkJb3V0bChjc3JfcmVnLCBwbHhfYWRkciArIFBMWF9JTlRDU1IpOwotCQljc3JfcmVnID0gaW5sKHBseF9hZGRyICsgUExYX0lOVENTUik7Ci0JCWlmICghKGNzcl9yZWcgJiBQTFhfSU5UQ1NSX0lOVEVOKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGVuYWJsZSBpbnRlcnJ1cHRzXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQorCWVyciA9IG9yaW5vY29fcGx4X2h3X2luaXQoY2FyZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJIYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWw7CiAJfQogCiAJZXJyID0gb3Jpbm9jb19wbHhfY29yX3Jlc2V0KHByaXYpOwpAQCAtMjc1LDIzICsyNTgsNiBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVM6ICIpOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXByaW50aygiJTAyWDoiLCByZWFkYihhdHRyX21lbSArIDIqaSkpOwotCX0KLQlwcmludGsoIlxuIik7Ci0KLQkvKiBWZXJpZnkgd2hldGhlciBhIHN1cHBvcnRlZCBQQyBjYXJkIGlzIHByZXNlbnQgKi8KLQkvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBiZSBzbWFydGVkIGFib3V0IHRoaXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNpc19tYWdpYyk7IGkrKykgewotCQlpZiAoY2lzX21hZ2ljW2ldICE9IHJlYWRiKGF0dHJfbWVtICsyKmkpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGUgQ0lTIHZhbHVlIG9mIFByaXNtMiBQQyAiCi0JCQkgICAgICAgImNhcmQgaXMgdW5leHBlY3RlZFxuIik7Ci0JCQllcnIgPSAtRUlPOwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOwpAQCAtMjk5LDYgKzI2NSw4IEBACiAJfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXNcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgcGNpX25hbWUocGRldikpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTMxMCwxMiArMjc4LDE1IEBACiAJZnJlZV9vcmlub2NvZGV2KGRldik7CiAKICBmYWlsX2FsbG9jOgotCXBjaV9pb3VubWFwKHBkZXYsIG1lbSk7CisJcGNpX2lvdW5tYXAocGRldiwgaGVybWVzX2lvKTsKIAotIGZhaWxfbWFwX2lvOgotCWlvdW5tYXAoYXR0cl9tZW0pOworIGZhaWxfbWFwX2hlcm1lczoKKwlwY2lfaW91bm1hcChwZGV2LCBhdHRyX2lvKTsKIAogIGZhaWxfbWFwX2F0dHI6CisJcGNpX2lvdW5tYXAocGRldiwgYnJpZGdlX2lvKTsKKworIGZhaWxfbWFwX2JyaWRnZToKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCiAgZmFpbF9yZXNvdXJjZXM6CkBAIC0zMjgsMjMgKzI5OSwyMCBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcGx4X2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwotCXU4IF9faW9tZW0gKmF0dHJfbWVtID0gY2FyZC0+YXR0cl9tZW07Ci0KLQlCVUdfT04oISBkZXYpOworCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwotCWlvdW5tYXAoYXR0cl9tZW0pOworCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmF0dHJfaW8pOworCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmJyaWRnZV9pbyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fcGx4X3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fcGx4X2lkX3RhYmxlW10gPSB7CiAJezB4MTExYSwgMHgxMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCS8qIFNpZW1lbnMgU3BlZWRTdHJlYW0gU1MxMDIzICovCiAJezB4MTM4NSwgMHg0MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCS8qIE5ldGdlYXIgTUEzMDEgKi8KIAl7MHgxNWU4LCAweDAxMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwJLyogQ29ycmVnYSAgLSBkb2VzIHRoaXMgd29yaz8gKi8KQEAgLTM2MiwxMyArMzMwLDE1IEBACiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX3BseF9wY2lfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG9yaW5vY29fcGx4X2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9yaW5vY29fcGx4X2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuaWRfdGFibGUJPSBvcmlub2NvX3BseF9wY2lfaWRfdGFibGUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb19wbHhfaWRfdGFibGUsCiAJLnByb2JlCQk9IG9yaW5vY29fcGx4X2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb19wbHhfcmVtb3ZlX29uZSksCisJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb3Jpbm9jb19wY2lfcmVzdW1lLAogfTsKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KQEAgLTM4OCw3ICszNTgsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fcGx4X2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm9yaW5vY29fcGx4X2RyaXZlcik7Ci0Jc3NsZWVwKDEpOwogfQogCiBtb2R1bGVfaW5pdChvcmlub2NvX3BseF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fdG1kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3RtZC5jCmluZGV4IDVlNjhiNzAuLmQyYjRkZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fdG1kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb190bWQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIG9yaW5vY29fdG1kLmMKLSAqIAorICoKICAqIERyaXZlciBmb3IgUHJpc20gSUkgZGV2aWNlcyB3aGljaCB3b3VsZCB1c3VhbGx5IGJlIGRyaXZlbiBieSBvcmlub2NvX2NzLAogICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBUTUQ3MTYwLiAKICAqCkBAIC0yNiwyNSArMjYsMTMgQEAKICAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQogICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCiAgKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotCi0gKiBDYXV0aW9uOiB0aGlzIGlzIGV4cGVyaW1lbnRhbCBhbmQgcHJvYmFibHkgYnVnZ3kuICBGb3Igc3VjY2VzcyBhbmQKLSAqIGZhaWx1cmUgcmVwb3J0cyBmb3IgZGlmZmVyZW50IGNhcmRzIGFuZCBhZGFwdG9ycywgc2VlCi0gKiBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGUgbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgSWYgeW91IGhhdmUgYQotICogY2FyZCB3ZSBkb24ndCBoYXZlIHRoZSBQQ0kgaWQgZm9yLCBhbmQgbG9va3MgbGlrZSBpdCBzaG91bGQgd29yaywKLSAqIGRyb3AgbWUgbWFpbCB3aXRoIHRoZSBpZCBhbmQgIml0IHdvcmtzIi8iaXQgZG9lc24ndCB3b3JrIi4KLSAqCi0gKiBOb3RlOiBpZiBldmVyeXRoaW5nIGdldHMgZGV0ZWN0ZWQgZmluZSBidXQgaXQgZG9lc24ndCBhY3R1YWxseSBzZW5kCi0gKiBvciByZWNlaXZlIHBhY2tldHMsIHlvdXIgZmlyc3QgcG9ydCBvZiBjYWxsIHNob3VsZCBwcm9iYWJseSBiZSB0byAgIAotICogdHJ5IG5ld2VyIGZpcm13YXJlIGluIHRoZSBjYXJkLiAgRXNwZWNpYWxseSBpZiB5b3UncmUgZG9pbmcgQWQtSG9jCi0gKiBtb2RlcwogICoKICAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG9yaW5vY28uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCiAgKiBhbGxvY2F0aW9uIHN0dWZmLgogICoKICAqIFRoaXMgZHJpdmVyIGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIG9yaW5vY29fcGx4IGRyaXZlci4gVGhlIG1haW4KLSAqIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgVE1EIGNoaXAgaGFzIG9ubHkgSU8gcG9ydCByYW5nZXMgYW5kIG5vCi0gKiBtZW1vcnkgc3BhY2UsIGkuZS4gIG5vIGFjY2VzcyB0byB0aGUgQ0lTLiBDb21wYXJlZCB0byB0aGUgUExYIGNoaXAsCi0gKiB0aGUgaW8gcmFuZ2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBleGNoYW5nZWQuCisgKiBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIFRNRCBjaGlwIGhhcyBvbmx5IElPIHBvcnQgcmFuZ2VzIGFuZCBkb2Vzbid0CisgKiBwcm92aWRlIGFjY2VzcyB0byB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBzcGFjZS4KICAqCiAgKiBQaGVlY29tIHNlbGxzIGNhcmRzIHdpdGggdGhlIFRNRCBjaGlwIGFzICJBU0lDIHZlcnNpb24iCiAgKi8KQEAgLTYxLDMyICs0OSwyNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KIAogI2luY2x1ZGUgIm9yaW5vY28uaCIKKyNpbmNsdWRlICJvcmlub2NvX3BjaS5oIgogCiAjZGVmaW5lIENPUl9WQUxVRQkoQ09SX0xFVkVMX1JFUSB8IENPUl9GVU5DX0VOQSkgLyogRW5hYmxlIFBDIGNhcmQgd2l0aCBpbnRlcnJ1cHQgaW4gbGV2ZWwgdHJpZ2dlciAqLwogI2RlZmluZSBDT1JfUkVTRVQgICAgICgweDgwKQkvKiByZXNldCBiaXQgaW4gdGhlIENPUiByZWdpc3RlciAqLwogI2RlZmluZSBUTURfUkVTRVRfVElNRQkoNTAwKQkvKiBtaWxsaXNlY29uZHMgKi8KIAotLyogT3Jpbm9jbyBUTUQgc3BlY2lmaWMgZGF0YSAqLwotc3RydWN0IG9yaW5vY29fdG1kX2NhcmQgewotCXUzMiB0bWRfaW87Ci19OwotCi0KIC8qCiAgKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCiAgKi8KIHN0YXRpYyBpbnQgb3Jpbm9jb190bWRfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBvcmlub2NvX3RtZF9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKLQl1MzIgYWRkciA9IGNhcmQtPnRtZF9pbzsKKwlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXUxNiByZWc7CiAKLQlvdXRiKENPUl9WQUxVRSB8IENPUl9SRVNFVCwgYWRkcik7CisJaW93cml0ZTgoQ09SX1ZBTFVFIHwgQ09SX1JFU0VULCBjYXJkLT5icmlkZ2VfaW8pOwogCW1kZWxheSgxKTsKIAotCW91dGIoQ09SX1ZBTFVFLCBhZGRyKTsKKwlpb3dyaXRlOChDT1JfVkFMVUUsIGNhcmQtPmJyaWRnZV9pbyk7CiAJbWRlbGF5KDEpOwogCiAJLyogSnVzdCBpbiBjYXNlLCB3YWl0IG1vcmUgdW50aWwgdGhlIGNhcmQgaXMgbm8gbG9uZ2VyIGJ1c3kgKi8KQEAgLTk3LDcgKzc5LDcgQEAKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKIAl9CiAKLQkvKiBEaWQgd2UgdGltZW91dCA/ICovCisJLyogU3RpbGwgYnVzeT8gKi8KIAlpZiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkJ1c3kgdGltZW91dFxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwpAQCAtMTEwLDExICs5MiwxMSBAQAogc3RhdGljIGludCBvcmlub2NvX3RtZF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWludCBlcnIgPSAwOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBOVUxMOwotCXN0cnVjdCBvcmlub2NvX3RtZF9jYXJkICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCXZvaWQgX19pb21lbSAqbWVtOworCWludCBlcnI7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqaGVybWVzX2lvLCAqYnJpZGdlX2lvOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewpAQCAtMTIzLDIwICsxMDUsMjggQEAKIAl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKLQlpZiAoZXJyICE9IDApIHsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZmFpbF9yZXNvdXJjZXM7CiAJfQogCi0JbWVtID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOwotCWlmICghIG1lbSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfaW9tYXA7CisJYnJpZGdlX2lvID0gcGNpX2lvbWFwKHBkZXYsIDEsIDApOworCWlmICghYnJpZGdlX2lvKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgYnJpZGdlIHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfYnJpZGdlOworCX0KKworCWhlcm1lc19pbyA9IHBjaV9pb21hcChwZGV2LCAyLCAwKTsKKwlpZiAoIWhlcm1lc19pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIGNoaXBzZXQgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBmYWlsX21hcF9oZXJtZXM7CiAJfQogCiAJLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgKi8KIAlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksIG9yaW5vY29fdG1kX2Nvcl9yZXNldCk7Ci0JaWYgKCEgZGV2KSB7CisJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2FsbG9jOwpAQCAtMTQ0LDE2ICsxMzQsMTEgQEAKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwotCWNhcmQtPnRtZF9pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQlkZXYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwljYXJkLT5icmlkZ2VfaW8gPSBicmlkZ2VfaW87CiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKLQloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBtZW0sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKLQotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiRGV0ZWN0ZWQgT3Jpbm9jby9QcmlzbTIgVE1EIGRldmljZSAiCi0JICAgICAgICJhdCAlcyBpcnE6JWQsIGlvIGFkZHI6MHglbHhcbiIsIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEsCi0JICAgICAgIGRldi0+YmFzZV9hZGRyKTsKKwloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBoZXJtZXNfaW8sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAogCQkJICBkZXYtPm5hbWUsIGRldik7CkBAIC0xNjIsNyArMTQ3LDYgQEAKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGZhaWxfaXJxOwogCX0KLQlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCWVyciA9IG9yaW5vY29fdG1kX2Nvcl9yZXNldChwcml2KTsKIAlpZiAoZXJyKSB7CkBAIC0xNzcsNiArMTYxLDggQEAKIAl9CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlc1xuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTg4LDkgKzE3NCwxMiBAQAogCWZyZWVfb3Jpbm9jb2RldihkZXYpOwogCiAgZmFpbF9hbGxvYzoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOworCXBjaV9pb3VubWFwKHBkZXYsIGhlcm1lc19pbyk7CiAKLSBmYWlsX2lvbWFwOgorIGZhaWxfbWFwX2hlcm1lczoKKwlwY2lfaW91bm1hcChwZGV2LCBicmlkZ2VfaW8pOworCisgZmFpbF9tYXBfYnJpZGdlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKICBmYWlsX3Jlc291cmNlczoKQEAgLTIwMywzMSArMTkyLDMyIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OwotCi0JQlVHX09OKCEgZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9vcmlub2NvZGV2KGRldik7CiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+aHcuaW9iYXNlKTsKKwlwY2lfaW91bm1hcChwZGV2LCBjYXJkLT5icmlkZ2VfaW8pOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3RtZF9pZF90YWJsZVtdID0gewogCXsweDE1ZTgsIDB4MDEzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LCAgICAgIC8qIE5EQyBhbmQgT0VNcywgZS5nLiBwaGVlY29tICovCiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG9yaW5vY29fdG1kX2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9yaW5vY29fdG1kX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuaWRfdGFibGUJPSBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb190bWRfaWRfdGFibGUsCiAJLnByb2JlCQk9IG9yaW5vY29fdG1kX2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb190bWRfcmVtb3ZlX29uZSksCisJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb3Jpbm9jb19wY2lfcmVzdW1lLAogfTsKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KQEAgLTI0NSw3ICsyMzUsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fdG1kX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm9yaW5vY29fdG1kX2RyaXZlcik7Ci0Jc3NsZWVwKDEpOwogfQogCiBtb2R1bGVfaW5pdChvcmlub2NvX3RtZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IGY3Yjc3Y2UuLjdmOWFhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbCBmaXJtd2FyZSwgc3VjaCBhcwotICogU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaCBjYXJkcyBieSBTb2NrZXQKKyAqIFN5bWJvbCBXaXJlbGVzcyBOZXR3b3JrZXIgTEE0MTM3LCBDb21wYWN0Rmxhc2ggY2FyZHMgYnkgU29ja2V0CiAgKiBDb21tdW5pY2F0aW9ucyBhbmQgSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCLgogICoKICAqIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBTeW1ib2wgZmlybXdhcmUgZG93bmxvYWQuICBUaGUgcmVzdCBpcyBoYW5kbGVkCkBAIC0xMjAsOCArMTIwLDggQEAKICAqIEVhY2ggYmxvY2sgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLgogICovCiBzdHJ1Y3QgZGJsb2NrIHsKLQlfX2xlMzIgX2FkZHI7CQkvKiBhZGFwdGVyIGFkZHJlc3Mgd2hlcmUgdG8gd3JpdGUgdGhlIGJsb2NrICovCi0JX19sZTE2IF9sZW47CQkvKiBsZW5ndGggb2YgdGhlIGRhdGEgb25seSwgaW4gYnl0ZXMgKi8KKwlfX2xlMzIgYWRkcjsJCS8qIGFkYXB0ZXIgYWRkcmVzcyB3aGVyZSB0byB3cml0ZSB0aGUgYmxvY2sgKi8KKwlfX2xlMTYgbGVuOwkJLyogbGVuZ3RoIG9mIHRoZSBkYXRhIG9ubHksIGluIGJ5dGVzICovCiAJY2hhciBkYXRhWzBdOwkJLyogZGF0YSB0byBiZSB3cml0dGVuICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTMxLDkgKzEzMSw5IEBACiAgKiBpdGVtcyB3aXRoIG1hdGNoaW5nIElEIHNob3VsZCBiZSB3cml0dGVuLgogICovCiBzdHJ1Y3QgcGRyIHsKLQlfX2xlMzIgX2lkOwkJLyogcmVjb3JkIElEICovCi0JX19sZTMyIF9hZGRyOwkJLyogYWRhcHRlciBhZGRyZXNzIHdoZXJlIHRvIHdyaXRlIHRoZSBkYXRhICovCi0JX19sZTMyIF9sZW47CQkvKiBleHBlY3RlZCBsZW5ndGggb2YgdGhlIGRhdGEsIGluIGJ5dGVzICovCisJX19sZTMyIGlkOwkJLyogcmVjb3JkIElEICovCisJX19sZTMyIGFkZHI7CQkvKiBhZGFwdGVyIGFkZHJlc3Mgd2hlcmUgdG8gd3JpdGUgdGhlIGRhdGEgKi8KKwlfX2xlMzIgbGVuOwkJLyogZXhwZWN0ZWQgbGVuZ3RoIG9mIHRoZSBkYXRhLCBpbiBieXRlcyAqLwogCWNoYXIgbmV4dFswXTsJCS8qIG5leHQgUERSIHN0YXJ0cyBoZXJlICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTQ0LDggKzE0NCw4IEBACiAgKiBiZSBwbHVnZ2VkIGludG8gdGhlIHNlY29uZGFyeSBmaXJtd2FyZS4KICAqLwogc3RydWN0IHBkaSB7Ci0JX19sZTE2IF9sZW47CQkvKiBsZW5ndGggb2YgSUQgYW5kIGRhdGEsIGluIHdvcmRzICovCi0JX19sZTE2IF9pZDsJCS8qIHJlY29yZCBJRCAqLworCV9fbGUxNiBsZW47CQkvKiBsZW5ndGggb2YgSUQgYW5kIGRhdGEsIGluIHdvcmRzICovCisJX19sZTE2IGlkOwkJLyogcmVjb3JkIElEICovCiAJY2hhciBkYXRhWzBdOwkJLyogcGx1ZyBkYXRhICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTU0LDQ0ICsxNTQsNDQgQEAKIHN0YXRpYyBpbmxpbmUgdTMyCiBkYmxvY2tfYWRkcihjb25zdCBzdHJ1Y3QgZGJsb2NrICpibGspCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KGJsay0+X2FkZHIpOworCXJldHVybiBsZTMyX3RvX2NwdShibGstPmFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMgogZGJsb2NrX2xlbihjb25zdCBzdHJ1Y3QgZGJsb2NrICpibGspCiB7Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KGJsay0+X2xlbik7CisJcmV0dXJuIGxlMTZfdG9fY3B1KGJsay0+bGVuKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIKIHBkcl9pZChjb25zdCBzdHJ1Y3QgcGRyICpwZHIpCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+X2lkKTsKKwlyZXR1cm4gbGUzMl90b19jcHUocGRyLT5pZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyCiBwZHJfYWRkcihjb25zdCBzdHJ1Y3QgcGRyICpwZHIpCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+X2FkZHIpOworCXJldHVybiBsZTMyX3RvX2NwdShwZHItPmFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMgogcGRyX2xlbihjb25zdCBzdHJ1Y3QgcGRyICpwZHIpCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+X2xlbik7CisJcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+bGVuKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIKIHBkaV9pZChjb25zdCBzdHJ1Y3QgcGRpICpwZGkpCiB7Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KHBkaS0+X2lkKTsKKwlyZXR1cm4gbGUxNl90b19jcHUocGRpLT5pZCk7CiB9CiAKIC8qIFJldHVybiBsZW5ndGggb2YgdGhlIGRhdGEgb25seSwgaW4gYnl0ZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyCiBwZGlfbGVuKGNvbnN0IHN0cnVjdCBwZGkgKnBkaSkKIHsKLQlyZXR1cm4gMiAqIChsZTE2X3RvX2NwdShwZGktPl9sZW4pIC0gMSk7CisJcmV0dXJuIDIgKiAobGUxNl90b19jcHUocGRpLT5sZW4pIC0gMSk7CiB9CiAKIApAQCAtMzQzLDggKzM0Myw3IEBACiAKIAkvKiBkbyB0aGUgYWN0dWFsIHBsdWdnaW5nICovCiAJc3BlY3RydW1fYXV4X3NldGFkZHIoaHcsIHBkcl9hZGRyKHBkcikpOwotCWhlcm1lc193cml0ZV93b3JkcyhodywgSEVSTUVTX0FVWERBVEEsIHBkaS0+ZGF0YSwKLQkJCSAgIHBkaV9sZW4ocGRpKSAvIDIpOworCWhlcm1lc193cml0ZV9ieXRlcyhodywgSEVSTUVTX0FVWERBVEEsIHBkaS0+ZGF0YSwgcGRpX2xlbihwZGkpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDI0LDggKzQyMyw4IEBACiAKIAl3aGlsZSAoZGJsb2NrX2FkZHIoYmxrKSAhPSBCTE9DS19FTkQpIHsKIAkJc3BlY3RydW1fYXV4X3NldGFkZHIoaHcsIGJsa2FkZHIpOwotCQloZXJtZXNfd3JpdGVfd29yZHMoaHcsIEhFUk1FU19BVVhEQVRBLCBibGstPmRhdGEsCi0JCQkJICAgYmxrbGVuIC8gMik7CisJCWhlcm1lc193cml0ZV9ieXRlcyhodywgSEVSTUVTX0FVWERBVEEsIGJsay0+ZGF0YSwKKwkJCQkgICBibGtsZW4pOwogCiAJCWJsayA9IChzdHJ1Y3QgZGJsb2NrICopICZibGstPmRhdGFbYmxrbGVuXTsKIAkJYmxrYWRkciA9IGRibG9ja19hZGRyKGJsayk7CkBAIC02MjYsMTQgKzYyNSwxMSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCisJaWYgKGxpbmstPmRldl9ub2RlKQorCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCiAJc3BlY3RydW1fY3NfcmVsZWFzZShsaW5rKTsKIAotCURFQlVHKDAsIFBGWCAiZGV0YWNoOiBsaW5rPSVwIGxpbmstPmRldl9ub2RlPSVwXG4iLCBsaW5rLCBsaW5rLT5kZXZfbm9kZSk7Ci0JaWYgKGxpbmstPmRldl9ub2RlKSB7Ci0JCURFQlVHKDAsIFBGWCAiQWJvdXQgdG8gdW5yZWdpc3RlciBuZXQgZGV2aWNlICVwXG4iLAotCQkgICAgICBkZXYpOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCX0KIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIH0JCQkJLyogc3BlY3RydW1fY3NfZGV0YWNoICovCiAKQEAgLTY1MywxMyArNjQ5LDEwIEBACiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwogCXVfY2hhciBidWZbNjRdOwogCWNvbmZpZ19pbmZvX3QgY29uZjsKLQljaXNpbmZvX3QgaW5mbzsKIAl0dXBsZV90IHR1cGxlOwogCWNpc3BhcnNlX3QgcGFyc2U7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKLQlDU19DSEVDSyhWYWxpZGF0ZUNJUywgcGNtY2lhX3ZhbGlkYXRlX2NpcyhsaW5rLCAmaW5mbykpOwotCiAJLyoKIAkgKiBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzCiAJICogY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCkBAIC03MDksMTIgKzcwMiw2IEBACiAJCQlnb3RvIG5leHRfZW50cnk7CiAJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwogCi0JCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7Ci0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKLQkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0JCX0KLQogCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KIAkJLyogTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KIAkJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKQEAgLTgzNSwxOSArODIyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KIAogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluZGV4IDB4JTAyeDogIiwKLQkgICAgICAgZGV2LT5uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKLQlpZiAobGluay0+Y29uZi5WcHApCi0JCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcCAvIDEwLAotCQkgICAgICAgbGluay0+Y29uZi5WcHAgJSAxMCk7Ci0JcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXMsIGlycSAlZCwgaW8gIgorCSAgICAgICAiMHglMDR4LTB4JTA0eFxuIiwgZGV2LT5uYW1lLCBkZXYtPmNsYXNzX2Rldi5kZXYtPmJ1c19pZCwKKwkgICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTg4OCwxMSArODY2LDEwIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAogCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CiAJaWYgKGVycikKQEAgLTkwMiw5ICs4NzksOSBAQAogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAlwcml2LT5od191bmF2YWlsYWJsZSsrOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTkzMiw3ICs5MDksNyBAQAogCSIgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiwgZXQgYWwpIjsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHNwZWN0cnVtX2NzX2lkc1tdID0gewotCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI2YywgMHgwMDAxKSwgLyogU3ltYm9sIFNwZWN0cnVtMjQgTEE0MTAwICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjZjLCAweDAwMDEpLCAvKiBTeW1ib2wgU3BlY3RydW0yNCBMQTQxMzcgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMDQsIDB4MDAwMSksIC8qIFNvY2tldCBDb21tdW5pY2F0aW9ucyBDRiAqLwogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJbnRlbCIsICJQUk8vV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDgxNmNjODE1LCAweDZmYmY0NTlhKSwgLyogMjAxMUIsIG5vdCAyMDExICovCiAJUENNQ0lBX0RFVklDRV9OVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCA5YjFlNGVkLi42NjJlY2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGludCBhcCA9IDA7CS8qIEFyZSB3ZSBhbiBBUCBvciBhIG5vcm1hbCBzdGF0aW9uPyAqLworc3RhdGljIGludCBhcDsJLyogQXJlIHdlIGFuIEFQIG9yIGEgbm9ybWFsIHN0YXRpb24/ICovCiAKICNkZWZpbmUgWkQxMjAxX1ZFUlNJT04JIjAuMTUiCiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyBpbnQgemQxMjAxX2Z3X3VwbG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgYXBmdykKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwotCWNoYXIqIGRhdGE7CisJY2hhciAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxlbjsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgcmV0OwpAQCAtNjUsNyArNjUsNyBAQAogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gbG9hZCAlcyBmaXJtd2FyZSBmaWxlIVxuIiwgZndmaWxlKTsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJNYWtlIHN1cmUgdGhlIGhvdHBsdWcgZmlybXdhcmUgbG9hZGVyIGlzIGluc3RhbGxlZC5cbiIpOwotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkdvdG8gaHR0cDovL2xpbnV4LWxjMTAwMDIwLnNvdXJjZWZvcmdlLm5ldCBmb3IgbW9yZSBpbmZvXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJHb3RvIGh0dHA6Ly9saW51eC1sYzEwMDAyMC5zb3VyY2Vmb3JnZS5uZXQgZm9yIG1vcmUgaW5mby5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtOTQsMTIgKzk0LDEyIEBACiAJICAgIFVTQl9ESVJfT1VUIHwgMHg0MCwgMCwgMCwgTlVMTCwgMCwgWkQxMjAxX0ZXX1RJTUVPVVQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGV4aXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIAllcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgMHg0LAogCSAgICBVU0JfRElSX0lOIHwgMHg0MCwgMCwwLCAmcmV0LCBzaXplb2YocmV0KSwgWkQxMjAxX0ZXX1RJTUVPVVQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGV4aXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIAlpZiAocmV0ICYgMHg4MCkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXQ7CkBAIC0xNjYsMTMgKzE2NiwxMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB6ZC0+dXNiLCB1c2Jfc25kYnVsa3BpcGUoemQtPnVzYiwgemQtPmVuZHBfb3V0MiksCi0JICAgICBjb21tYW5kLCAxNiwgemQxMjAxX3VzYmZyZWUsIHpkKTsKKwkJCSAgY29tbWFuZCwgMTYsIHpkMTIwMV91c2JmcmVlLCB6ZCk7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0KSB7CiAJCWtmcmVlKGNvbW1hbmQpOwogCQl1c2JfZnJlZV91cmIodXJiKTsKIAl9Ci0JCisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTYsNyArMzE2LDcgQEAKIAkJZmMgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSZkYXRhW2RhdGFsZW4tMTZdKTsKIAkJc2VxID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikmZGF0YVtkYXRhbGVuLTI0XSk7CiAKLQkJaWYoemQtPm1vbml0b3IpIHsKKwkJaWYgKHpkLT5tb25pdG9yKSB7CiAJCQlpZiAoZGF0YWxlbiA8IDI0KQogCQkJCWdvdG8gcmVzdWJtaXQ7CiAJCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKGRhdGFsZW4rMjQpKSkKQEAgLTM2NCw3ICszNjQsNyBAQAogCQkJCWdvdG8gcmVzdWJtaXQ7CiAJCQl9CiAJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShmcmFnLCBub2RlLCAmemQtPmZyYWdsaXN0LCBmbm9kZSkKLQkJCQlpZihmcmFnLT5zZXEgPT0gKHNlcSZJRUVFODAyMTFfU0NUTF9TRVEpKQorCQkJCWlmIChmcmFnLT5zZXEgPT0gKHNlcSZJRUVFODAyMTFfU0NUTF9TRVEpKQogCQkJCQlicmVhazsKIAkJCWlmICghZnJhZykKIAkJCQlnb3RvIHJlc3VibWl0OwpAQCAtMzc2LDcgKzM3Niw2IEBACiAJCQkJZ290byByZXN1Ym1pdDsKIAkJCWhsaXN0X2RlbF9pbml0KCZmcmFnLT5mbm9kZSk7CiAJCQlrZnJlZShmcmFnKTsKLQkJCS8qIEZhbGx0aHJvdWdoICovCiAJCX0gZWxzZSB7CiAJCQlpZiAoZGF0YWxlbjwxNCkKIAkJCQlnb3RvIHJlc3VibWl0OwpAQCAtNDIyLDcgKzQyMSw3IEBACiAJaW50IHJpZF9maWQ7CiAJaW50IGxlbmd0aDsKIAl1bnNpZ25lZCBjaGFyICpwZGF0YTsKLQkKKwogCXpkLT5yeGRhdGFzID0gMDsKIAllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0FDQ0VTUywgcmlkLCAwLCAwKTsKIAlpZiAoZXJyKQpAQCAtNDcxLDExICs0NzAsMTEgQEAKIAlsZW5ndGggPSB6ZC0+cnhsZW47CiAKIAlkbyB7Ci0JCWludCAgYWN0dWFsX2xlbmd0aDsKKwkJaW50IGFjdHVhbF9sZW5ndGg7CiAKIAkJYWN0dWFsX2xlbmd0aCA9IChsZW5ndGggPiA2NCkgPyA2NCA6IGxlbmd0aDsKIAotCQlpZihwZGF0YVswXSAhPSAweDMpIHsKKwkJaWYgKHBkYXRhWzBdICE9IDB4MykgewogCQkJZGV2X2RiZygmemQtPnVzYi0+ZGV2LCAiUnggUmVzb3VyY2UgcGFja2V0IHR5cGUgZXJyb3I6ICUwMlhcbiIsCiAJCQkgICAgcGRhdGFbMF0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODcsMTEgKzQ4NiwxMCBAQAogCQl9CiAKIAkJLyogU2tpcCB0aGUgNCBieXRlcyBoZWFkZXIgKFJJRCBsZW5ndGggYW5kIFJJRCkgKi8KLQkJaWYoaSA9PSAwKSB7CisJCWlmIChpID09IDApIHsKIAkJCXBkYXRhICs9IDg7CiAJCQlhY3R1YWxfbGVuZ3RoIC09IDg7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlwZGF0YSArPSA0OwogCQkJYWN0dWFsX2xlbmd0aCAtPSA0OwogCQl9CkBAIC02MjAsNyArNjE4LDcgQEAKIAlzaG9ydCBtYXg7CiAJX19sZTE2IHpkbWF4OwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQkKKwogCWJ1ZmZlciA9IGt6YWxsb2MoWkQxMjAxX1JYU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjMyLDcgKzYzMCw3IEBACiAJZXJyID0gdXNiX3N1Ym1pdF91cmIoemQtPnJ4X3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfYnVmZmVyOwotCQorCiAJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9JTklULCAwLCAwLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl91cmI7CkBAIC02ODQsNyArNjgyLDcgQEAKIHN0YXRpYyBpbnQgemQxMjAxX2Rpc2FibGUoc3RydWN0IHpkMTIwMSAqemQpCiB7CiAJaW50IGVycjsKLQkKKwogCWlmICghemQtPm1hY19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAlpZiAoemQtPm1vbml0b3IpIHsKQEAgLTc2NCw3ICs3NjIsNiBAQAogc3RhdGljIGludCB6ZDEyMDFfbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxNSw3ICs5MTIsNiBAQAogICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQogewogCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTFiIik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAxMywxMSArMTAwOSwxMCBAQAogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCX0KLQl6ZC0+bW9uaXRvcj1tb25pdG9yOworCXpkLT5tb25pdG9yID0gbW9uaXRvcjsKIAkvKiBJZiBtb25pdG9yIG1vZGUgaXMgc2V0IHdlIGRvbid0IGFjdHVhbGx5IHR1cm4gaXQgb24gaGVyZSBzaW5jZSBpdAogCSAqIGlzIGRvbmUgZHVyaW5nIG1hYyByZXNldCBhbnl3YXkgKHNlZSB6ZDEyMDFfbWFjX2VuYWJsZSkuCiAJICovCi0KIAl6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKIAogCXJldHVybiAwOwpAQCAtMTExNyw3ICsxMTEyLDcgQEAKIAkJemQtPml3c3RhdHMucXVhbC51cGRhdGVkID0gMjsKIAl9CiAKLQlyZXR1cm4gemQxMjAxX2dldGNvbmZpZyh6ZCxaRDEyMDFfUklEX0NVUlJFTlRCU1NJRCxhcF9hZGRyLT5zYV9kYXRhLDYpOworCXJldHVybiB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NVUlJFTlRCU1NJRCwgYXBfYWRkci0+c2FfZGF0YSwgNik7CiB9CiAKIHN0YXRpYyBpbnQgemQxMjAxX3NldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xMjc1LDcgKzEyNzAsNyBAQAogCWlmICghcnJxLT5maXhlZCkgeyAvKiBBbHNvIGVuYWJsZSBhbGwgbG93ZXIgYml0cmF0ZXMgKi8KIAkJcmF0ZSB8PSByYXRlLTE7CiAJfQotCQorCiAJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX1RYUkFURUNOVEwsIHJhdGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xNDg2LDcgKzE0ODEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVycS0+ZmxhZ3MgfD0gaSsxOwotCQorCiAJZXJxLT5sZW5ndGggPSB6ZC0+ZW5jb2RlX2tleWxlbltpXTsKIAltZW1jcHkoa2V5LCB6ZC0+ZW5jb2RlX2tleXNbaV0sIGVycS0+bGVuZ3RoKTsKIApAQCAtMTUyOSwxMSArMTUyNCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIG91dDoKLQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE1FTkFCTEVELCBlbmFibGVkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQTUVOQUJMRUQsIGVuYWJsZWQpOwogfQogCiBzdGF0aWMgaW50IHpkMTIwMV9nZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTE2MjcsMTUgKzE2MTgsMTEgQEAKICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKLQlpbnQgZXJyOwogCiAJaWYgKCF6ZC0+YXApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZIT1NUQVVUSCwgcnJxLT52YWx1ZSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkhPU1RBVVRILCBycnEtPnZhbHVlKTsKIH0KIAogc3RhdGljIGludCB6ZDEyMDFfZ2V0X2hvc3RhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xNzQ0LDcgKzE3MzEsNyBAQAogewogCXN0cnVjdCB6ZDEyMDEgKnpkOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2I7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCXNob3J0IHBvcnR0eXBlOwogCWNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzJdOwogCkBAIC0xNzczLDkgKzE3NjAsNyBAQAogCWlmICghemQtPnJ4X3VyYiB8fCAhemQtPnR4X3VyYikKIAkJZ290byBlcnJfemQ7CiAKLQlmb3IoaSA9IDA7IGk8MTAwOyBpKyspCi0JCXVkZWxheSgxMDAwKTsKLQorCW1kZWxheSgxMDApOwogCWVyciA9IHpkMTIwMV9kcnZyX3N0YXJ0KHpkKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl96ZDsKQEAgLTE4MzMsNyArMTgxOCw3IEBACiAJCWdvdG8gZXJyX25ldDsKIAlkZXZfaW5mbygmdXNiLT5kZXYsICIlczogWkQxMjAxIFVTQiBXaXJlbGVzcyBpbnRlcmZhY2VcbiIsCiAJICAgIHpkLT5kZXYtPm5hbWUpOwotCQorCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHpkKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL25ldC96ZDEyMDEuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCAxNDU2NzU5Li4xMGUxYTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0yODUsOSArMjg1LDkgQEAKICAqIERlZmF1bHQgcmVzdW1lIG1ldGhvZCBmb3IgZGV2aWNlcyB0aGF0IGhhdmUgbm8gZHJpdmVyIHByb3ZpZGVkIHJlc3VtZSwKICAqIG9yIG5vdCBldmVuIGEgZHJpdmVyIGF0IGFsbC4KICAqLwotc3RhdGljIHZvaWQgcGNpX2RlZmF1bHRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIGludCBwY2lfZGVmYXVsdF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHJlc3RvcmUgdGhlIFBDSSBjb25maWcgc3BhY2UgKi8KIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKQEAgLTI5NywxOCArMjk3LDIxIEBACiAJLyogaWYgdGhlIGRldmljZSB3YXMgYnVzbWFzdGVyIGJlZm9yZSB0aGUgc3VzcGVuZCwgbWFrZSBpdCBidXNtYXN0ZXIgYWdhaW4gKi8KIAlpZiAocGNpX2Rldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgcGNpX2RldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKIHsKKwlpbnQgZXJyb3I7CiAJc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBwY2lfZHJpdmVyICogZHJ2ID0gcGNpX2Rldi0+ZHJpdmVyOwogCiAJaWYgKGRydiAmJiBkcnYtPnJlc3VtZSkKLQkJZHJ2LT5yZXN1bWUocGNpX2Rldik7CisJCWVycm9yID0gZHJ2LT5yZXN1bWUocGNpX2Rldik7CiAJZWxzZQotCQlwY2lfZGVmYXVsdF9yZXN1bWUocGNpX2Rldik7Ci0JcmV0dXJuIDA7CisJCWVycm9yID0gcGNpX2RlZmF1bHRfcmVzdW1lKHBjaV9kZXYpOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDIzMjlmOTQuLmZkZTQxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0xNjQsNyArMTY0LDYgQEAKIAlyZXR1cm4gX19wY2lfYnVzX2ZpbmRfY2FwKGJ1cywgZGV2Zm4sIGhkcl90eXBlICYgMHg3ZiwgY2FwKTsKIH0KIAotI2lmIDAKIC8qKgogICogcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgLSBGaW5kIGFuIGV4dGVuZGVkIGNhcGFiaWxpdHkKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKQEAgLTIxMiw3ICsyMTEsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgIC8qICAwICAqLworRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkpOwogCiAvKioKICAqIHBjaV9maW5kX3BhcmVudF9yZXNvdXJjZSAtIHJldHVybiByZXNvdXJjZSByZWdpb24gb2YgcGFyZW50IGJ1cyBvZiBnaXZlbiByZWdpb24KQEAgLTQ2MSw5ICs0NjAsMjMgQEAKIHBjaV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaW50IGk7CisJaW50IHZhbDsKIAotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldixpICogNCwgZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCS8qCisJICogVGhlIEJhc2UgQWRkcmVzcyByZWdpc3RlciBzaG91bGQgYmUgcHJvZ3JhbW1lZCBiZWZvcmUgdGhlIGNvbW1hbmQKKwkgKiByZWdpc3RlcihzKQorCSAqLworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBpICogNCwgJnZhbCk7CisJCWlmICh2YWwgIT0gZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQTTogV3JpdGluZyBiYWNrIGNvbmZpZyBzcGFjZSBvbiAiCisJCQkJImRldmljZSAlcyBhdCBvZmZzZXQgJXggKHdhcyAleCwgd3JpdGluZyAleClcbiIsCisJCQkJcGNpX25hbWUoZGV2KSwgaSwKKwkJCQl2YWwsIChpbnQpZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsaSAqIDQsCisJCQkJZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCQl9CisJfQogCXBjaV9yZXN0b3JlX21zaV9zdGF0ZShkZXYpOwogCXBjaV9yZXN0b3JlX21zaXhfc3RhdGUoZGV2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDkwZDRkMGUuLjY3NzVhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgUy8zOTAgbmV0d29yayBkZXZpY2VzCiAjCiAKLWN0Yy1vYmpzIDo9IGN0Y21haW4ubyBjdGN0dHkubyBjdGNkYnVnLm8KK2N0Yy1vYmpzIDo9IGN0Y21haW4ubyBjdGNkYnVnLm8KIAogb2JqLSQoQ09ORklHX0lVQ1YpICs9IGl1Y3Yubwogb2JqLSQoQ09ORklHX05FVElVQ1YpICs9IG5ldGl1Y3YubyBmc20ubwpAQCAtMTAsNiArMTAsNyBAQAogb2JqLSQoQ09ORklHX0NUQykgKz0gY3RjLm8gZnNtLm8gY3UzMDg4Lm8KIG9iai0kKENPTkZJR19MQ1MpICs9IGxjcy5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfQ0xBVykgKz0gY2xhdy5vIGN1MzA4OC5vCitvYmotJChDT05GSUdfTVBDKSArPSBjdGNtcGMubyBmc20ubyBjdTMwODgubwogcWV0aC15IDo9IHFldGhfbWFpbi5vIHFldGhfbXBjLm8gcWV0aF9zeXMubyBxZXRoX2VkZHAubyAKIHFldGgtJChDT05GSUdfUFJPQ19GUykgKz0gcWV0aF9wcm9jLm8KIG9iai0kKENPTkZJR19RRVRIKSArPSBxZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKaW5kZXggZmU5ODZhZi4uMjBjOGViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKQEAgLTYsNyArNiw3IEBACiAgKiBGaXhlcyBieSA6IEpvY2hlbiBS9mhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKICAqICAgICAgICAgICAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CiAJICAgICAgUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCi0gKiBEcml2ZXIgTW9kZWwgc3R1ZmYgYnkgOiBDb3JuZWxpYSBIdWNrIDxodWNrY0BkZS5pYm0uY29tPgorICogRHJpdmVyIE1vZGVsIHN0dWZmIGJ5IDogQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPgogICoKICAqIERvY3VtZW50YXRpb24gdXNlZDoKICAqICAtIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIChJQk0gZG9jIzogU0EyMi03MjAxLTA2KQpAQCAtNjUsNyArNjUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAKLSNpbmNsdWRlICJjdGN0dHkuaCIKICNpbmNsdWRlICJmc20uaCIKICNpbmNsdWRlICJjdTMwODguaCIKIApAQCAtNDc5LDEwICs0NzgsNyBAQAogCQlza2ItPmRldiA9IHBza2ItPmRldjsKIAkJc2tiLT5wcm90b2NvbCA9IHBza2ItPnByb3RvY29sOwogCQlwc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJaWYgKGNoLT5wcm90b2NvbCA9PSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJY3RjX3R0eV9uZXRpZl9yeChza2IpOwotCQllbHNlCi0JCQluZXRpZl9yeF9uaShza2IpOworCQluZXRpZl9yeF9uaShza2IpOwogCQkvKioKIAkJICogU3VjY2Vzc2Z1bCByeDsgcmVzZXQgbG9nZmxhZ3MKIAkJICovCkBAIC01NTcsOCArNTUzLDcgQEAKIAlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKIAlpZiAoc2Vuc2UgJiBTTlMwX0lOVEVSVkVOVElPTl9SRVEpIHsKIAkJaWYgKHNlbnNlICYgMHgwMSkgewotCQkJaWYgKGNoLT5wcm90b2NvbCAhPSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJCWN0Y19wcl9kZWJ1ZygiJXM6IEludGVyZmFjZSBkaXNjLiBvciBTZWwuIHJlc2V0ICIKKwkJCWN0Y19wcl9kZWJ1ZygiJXM6IEludGVyZmFjZSBkaXNjLiBvciBTZWwuIHJlc2V0ICIKIAkJCQkJIihyZW1vdGUpXG4iLCBjaC0+aWQpOwogCQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX1VDX1JDUkVTRVQsIGNoKTsKIAkJfSBlbHNlIHsKQEAgLTIwMzQsNyArMjAyOSw2IEBACiBkZXZfYWN0aW9uX2NodXAoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgYXJnOwotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKIAogCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwogCXN3aXRjaCAoZnNtX2dldHN0YXRlKGZpKSkgewpAQCAtMjA0OSw4ICsyMDQzLDYgQEAKIAkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKIAkJCQljdGNfcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAogCQkJCQkgICAgZGV2LT5uYW1lKTsKLQkJCQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJCQkJY3RjX3R0eV9zZXRjYXJyaWVyKGRldiwgMSk7CiAJCQkJY3RjX2NsZWFyX2J1c3koZGV2KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjA1OSw4ICsyMDUxLDYgQEAKIAkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKIAkJCQljdGNfcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAogCQkJCQkgICAgZGV2LT5uYW1lKTsKLQkJCQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJCQkJY3RjX3R0eV9zZXRjYXJyaWVyKGRldiwgMSk7CiAJCQkJY3RjX2NsZWFyX2J1c3koZGV2KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjA4NiwxNCArMjA3NiwxMCBAQAogc3RhdGljIHZvaWQKIGRldl9hY3Rpb25fY2hkb3duKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGFyZzsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXZwdHIgPSBkZXYtPnByaXY7CiAKIAlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKIAlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShmaSkpIHsKIAkJY2FzZSBERVZfU1RBVEVfUlVOTklORzoKLQkJCWlmIChwcml2cHRyLT5wcm90b2NvbCA9PSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJCWN0Y190dHlfc2V0Y2FycmllcihkZXYsIDApOwogCQkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWERPV04pCiAJCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1RYKTsKIAkJCWVsc2UKQEAgLTIzOTcsOCArMjM4Myw2IEBACiAJICovCiAJaWYgKGZzbV9nZXRzdGF0ZShwcml2cHRyLT5mc20pICE9IERFVl9TVEFURV9SVU5OSU5HKSB7CiAJCWZzbV9ldmVudChwcml2cHRyLT5mc20sIERFVl9FVkVOVF9TVEFSVCwgZGV2KTsKLQkJaWYgKHByaXZwdHItPnByb3RvY29sID09IENUQ19QUk9UT19MSU5VWF9UVFkpCi0JCQlyZXR1cm4gLUVCVVNZOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXByaXZwdHItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcHJpdnB0ci0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC0yNjA4LDIwICsyNTkyLDEzIEBACiAJaWYgKCFkZXYpCiAJCXJldHVybjsKIAlwcml2cHRyID0gKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXY7Ci0JaWYgKHByaXZwdHItPnByb3RvY29sICE9IENUQ19QUk9UT19MSU5VWF9UVFkpCi0JCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZWxzZQotCQljdGNfdHR5X3VucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIH0KIAogc3RhdGljIGludAogY3RjX25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXZwdHIgPSAoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdjsKLQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWVsc2UKLQkJcmV0dXJuIGN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjY2Nyw3ICsyNjQ0LDkgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PREVWOwogCXNzY2FuZihidWYsICIldSIsICZ2YWx1ZSk7Ci0JaWYgKCh2YWx1ZSA8IDApIHx8ICh2YWx1ZSA+IENUQ19QUk9UT19NQVgpKQorCWlmICghKCh2YWx1ZSA9PSBDVENfUFJPVE9fUzM5MCkgIHx8CisJICAgICAgKHZhbHVlID09IENUQ19QUk9UT19MSU5VWCkgfHwKKwkgICAgICAodmFsdWUgPT0gQ1RDX1BST1RPX09TMzkwKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXByaXYtPnByb3RvY29sID0gdmFsdWU7CiAKQEAgLTI4OTcsMTAgKzI4NzYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJc3RybGNweShkZXYtPm5hbWUsICJjdGN0dHklZCIsIElGTkFNU0laKTsKLQllbHNlCi0JCXN0cmxjcHkoZGV2LT5uYW1lLCAiY3RjJWQiLCBJRk5BTVNJWik7CisJc3RybGNweShkZXYtPm5hbWUsICJjdGMlZCIsIElGTkFNU0laKTsKIAogCWZvciAoZGlyZWN0aW9uID0gUkVBRDsgZGlyZWN0aW9uIDw9IFdSSVRFOyBkaXJlY3Rpb24rKykgewogCQlwcml2cHRyLT5jaGFubmVsW2RpcmVjdGlvbl0gPQpAQCAtMzA0Niw3ICszMDIyLDYgQEAKIHsKIAlEQkZfVEVYVChzZXR1cCwgMywgX19GVU5DVElPTl9fKTsKIAl1bnJlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKCZjdGNfZ3JvdXBfZHJpdmVyKTsKLQljdGNfdHR5X2NsZWFudXAoKTsKIAljdGNfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKIAljdGNfcHJfaW5mbygiQ1RDIGRyaXZlciB1bmxvYWRlZFxuIik7CiB9CkBAIC0zMDczLDEwICszMDQ4LDggQEAKIAkJY3RjX3ByX2NyaXQoImN0Y19pbml0IGZhaWxlZCB3aXRoIGN0Y19yZWdpc3Rlcl9kYmZfdmlld3MgcmMgPSAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JY3RjX3R0eV9pbml0KCk7CiAJcmV0ID0gcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoJmN0Y19ncm91cF9kcml2ZXIpOwogCWlmIChyZXQpIHsKLQkJY3RjX3R0eV9jbGVhbnVwKCk7CiAJCWN0Y191bnJlZ2lzdGVyX2RiZl92aWV3cygpOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmggYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uaAppbmRleCBkMmU4MzVjLi43ZjMwNWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uaApAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vY2N3Z3JvdXAuaD4KIAotI2luY2x1ZGUgImN0Y3R0eS5oIgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCiAjaW5jbHVkZSAiZnNtLmgiCiAjaW5jbHVkZSAiY3UzMDg4LmgiCiAKQEAgLTUwLDkgKzUyLDcgQEAKIAogI2RlZmluZSBDVENfUFJPVE9fUzM5MCAgICAgICAgICAwCiAjZGVmaW5lIENUQ19QUk9UT19MSU5VWCAgICAgICAgIDEKLSNkZWZpbmUgQ1RDX1BST1RPX0xJTlVYX1RUWSAgICAgMgogI2RlZmluZSBDVENfUFJPVE9fT1MzOTAgICAgICAgICAzCi0jZGVmaW5lIENUQ19QUk9UT19NQVggICAgICAgICAgIDMKIAogI2RlZmluZSBDVENfQlVGU0laRV9MSU1JVCAgICAgICA2NTUzNQogI2RlZmluZSBDVENfQlVGU0laRV9ERUZBVUxUICAgICAzMjc2OApAQCAtMjU3LDE1ICsyNTcsMTMgQEAKIGN0Y19jbGVhcl9idXN5KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogCWNsZWFyX2JpdCgwLCAmKCgoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdiktPnRidXN5KSk7Ci0JaWYgKCgoc3RydWN0IGN0Y19wcml2ICopZGV2LT5wcml2KS0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50CiBjdGNfdGVzdF9hbmRfc2V0X2J1c3koc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCiB7Ci0JaWYgKCgoc3RydWN0IGN0Y19wcml2ICopZGV2LT5wcml2KS0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+dGJ1c3kpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y3R0eS5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1NGQxZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y3R0eS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI1OSArMCwwIEBACi0vKgotICogQ1RDIC8gRVNDT04gbmV0d29yayBkcml2ZXIsIHR0eSBpbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqIEF1dGhvcihzKTogRnJpdHogRWxmZXJ0IChlbGZlcnRAZGUuaWJtLmNvbSwgZmVsZmVydEBtaWxsZW51eC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+Ci0jaW5jbHVkZSAiY3RjdHR5LmgiCi0jaW5jbHVkZSAiY3RjZGJ1Zy5oIgotCi0jZGVmaW5lIENUQ19UVFlfTUFKT1IgICAgICAgNDMKLSNkZWZpbmUgQ1RDX1RUWV9NQVhfREVWSUNFUyA2NAotCi0jZGVmaW5lIENUQ19BU1lOQ19NQUdJQyAgICAgICAgICAweDQ5MzQ0QzAxIC8qIGZvciBwYXJhbm9pYS1jaGVja2luZyAgICAgICAgKi8KLSNkZWZpbmUgQ1RDX0FTWU5DX0lOSVRJQUxJWkVEICAgIDB4ODAwMDAwMDAgLyogcG9ydCB3YXMgaW5pdGlhbGl6ZWQgICAgICAgICAqLwotI2RlZmluZSBDVENfQVNZTkNfTk9STUFMX0FDVElWRSAgMHgyMDAwMDAwMCAvKiBOb3JtYWwgZGV2aWNlIGFjdGl2ZSAgICAgICAgICovCi0jZGVmaW5lIENUQ19BU1lOQ19DTE9TSU5HICAgICAgICAweDA4MDAwMDAwIC8qIFNlcmlhbCBwb3J0IGlzIGNsb3NpbmcgICAgICAgKi8KLSNkZWZpbmUgQ1RDX0FTWU5DX0NUU19GTE9XICAgICAgIDB4MDQwMDAwMDAgLyogRG8gQ1RTIGZsb3cgY29udHJvbCAgICAgICAgICAqLwotI2RlZmluZSBDVENfQVNZTkNfQ0hFQ0tfQ0QgICAgICAgMHgwMjAwMDAwMCAvKiBpLmUuLCBDTE9DQUwgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENUQ19BU1lOQ19IVVBfTk9USUZZICAgICAgICAgMHgwMDAxIC8qIE5vdGlmeSB0dHkgb24gaGFuZ3Vwcy9jbG9zZXMgKi8KLSNkZWZpbmUgQ1RDX0FTWU5DX05FVERFVl9PUEVOICAgICAgICAweDAwMDIgLyogVW5kZXJseWluZyBuZXRkZXYgaXMgb3BlbiAgICAqLwotI2RlZmluZSBDVENfQVNZTkNfVFhfTElORVNUQVQgICAgICAgIDB4MDAwNCAvKiBNdXN0IHNlbmQgbGluZSBzdGF0dXMgICAgICAgICovCi0jZGVmaW5lIENUQ19BU1lOQ19TUExJVF9URVJNSU9TICAgICAgMHgwMDA4IC8qIFNlcC4gdGVybWlvcyBmb3IgZGlhbGluL291dCAgKi8KLSNkZWZpbmUgQ1RDX1RUWV9YTUlUX1NJWkUgICAgICAgICAgICAgIDEwMjQgLyogRGVmYXVsdCBidWZzaXplIGZvciB3cml0ZSAgICAqLwotI2RlZmluZSBDVENfU0VSSUFMX1hNSVRfTUFYICAgICAgICAgICAgNDAwMCAvKiBNYXhpbXVtIGJ1ZnNpemUgZm9yIHdyaXRlICAgICovCi0KLS8qIFByaXZhdGUgZGF0YSAoc2ltaWxhciB0byBhc3luY19zdHJ1Y3QgaW4gPGxpbnV4L3NlcmlhbC5oPikgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgaW50CQkJbWFnaWM7Ci0gIGludAkJCWZsYWdzOwkJIC8qIGRlZmluZWQgaW4gdHR5LmggICAgICAgICAgICAgICAqLwotICBpbnQJCQltY3I7CQkgLyogTW9kZW0gY29udHJvbCByZWdpc3RlciAgICAgICAgICovCi0gIGludCAgICAgICAgICAgICAgICAgICBtc3I7ICAgICAgICAgICAgIC8qIE1vZGVtIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAqLwotICBpbnQgICAgICAgICAgICAgICAgICAgbHNyOyAgICAgICAgICAgICAvKiBMaW5lIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgKi8KLSAgaW50CQkJbGluZTsKLSAgaW50CQkJY291bnQ7CQkgLyogIyBvZiBmZCBvbiBkZXZpY2UgICAgICAgICAgICAgICovCi0gIGludAkJCWJsb2NrZWRfb3BlbjsJIC8qICMgb2YgYmxvY2tlZCBvcGVucyAgICAgICAgICAgICAqLwotICBzdHJ1Y3QgbmV0X2RldmljZSAgICAgKm5ldGRldjsKLSAgc3RydWN0IHNrX2J1ZmZfaGVhZCAgIHR4X3F1ZXVlOyAgICAgICAgLyogdHJhbnNtaXQgcXVldWUgICAgICAgICAgICAgICAgICovCi0gIHN0cnVjdCBza19idWZmX2hlYWQgICByeF9xdWV1ZTsgICAgICAgIC8qIHJlY2VpdmUgcXVldWUgICAgICAgICAgICAgICAgICAqLwotICBzdHJ1Y3QgdHR5X3N0cnVjdCAJKnR0eTsgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGNvcnJlc3BvbmRpbmcgdHR5ICAgKi8KLSAgd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OwotICB3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwotICBzdHJ1Y3Qgc2VtYXBob3JlICAgICAgd3JpdGVfc2VtOwotICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKLSAgc3RydWN0IHRpbWVyX2xpc3QgICAgIHN0b3B0aW1lcjsKLX0gY3RjX3R0eV9pbmZvOwotCi0vKiBEZXNjcmlwdGlvbiBvZiBvbmUgQ1RDLXR0eSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBzdHJ1Y3QgdHR5X2RyaXZlciAgKmN0Y190dHlfZGV2aWNlOwkJICAgLyogdHR5LWRldmljZSAgICAgICAgICAgICAqLwotICBjdGNfdHR5X2luZm8gICAgICAgaW5mb1tDVENfVFRZX01BWF9ERVZJQ0VTXTsJICAgLyogUHJpdmF0ZSBkYXRhICAgICAgICAgICAqLwotfSBjdGNfdHR5X2RyaXZlcjsKLQotc3RhdGljIGN0Y190dHlfZHJpdmVyICpkcml2ZXI7Ci0KLS8qIExlYXZlIHRoaXMgdW5jaGFuZ2VkIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBkbyEgKi8KLSNkZWZpbmUgTU9ERU1fUEFSQU5PSUFfQ0hFQ0sKLSNkZWZpbmUgTU9ERU1fRE9fUkVTVEFSVAotCi0jZGVmaW5lIENUQ19UVFlfTkFNRSAiY3RjdHR5IgotCi1zdGF0aWMgX191MzIgY3RjX3R0eV9tYWdpYyA9IENUQ19BU1lOQ19NQUdJQzsKLXN0YXRpYyBpbnQgY3RjX3R0eV9zaHV0dGluZ2Rvd24gPSAwOwotCi1zdGF0aWMgc3BpbmxvY2tfdCBjdGNfdHR5X2xvY2s7Ci0KLS8qIGN0Y190dHlfdHJ5X3JlYWQoKSBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gY3RjX3R0eV9yY3Zfc2tiKCkKLSAqIHRvIHN0dWZmIGluY29taW5nIGRhdGEgZGlyZWN0bHkgaW50byBhIHR0eSdzIGZsaXAtYnVmZmVyLiBJZiB0aGUKLSAqIGZsaXAgYnVmZmVyIGlzIGZ1bGwsIHRoZSBwYWNrZXQgZ2V0cyBxdWV1ZWQgdXAuCi0gKgotICogUmV0dXJuOgotICogIDEgPSBTdWNjZXNzCi0gKiAgMCA9IEZhaWx1cmUsIGRhdGEgaGFzIHRvIGJlIGJ1ZmZlcmVkIGFuZCBsYXRlciBwcm9jZXNzZWQgYnkKLSAqICAgICAgY3RjX3R0eV9yZWFkbW9kZW0oKS4KLSAqLwotc3RhdGljIGludAotY3RjX3R0eV90cnlfcmVhZChjdGNfdHR5X2luZm8gKiBpbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBsZW47Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQotCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwotCWlmICgodHR5ID0gaW5mby0+dHR5KSkgewotCQlpZiAoaW5mby0+bWNyICYgVUFSVF9NQ1JfUlRTKSB7Ci0JCQlsZW4gPSBza2ItPmxlbjsKLQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBza2ItPmRhdGEsIGxlbik7Ci0JCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogY3RjX3R0eV9yZWFkbW9kZW0oKSBpcyBjYWxsZWQgcGVyaW9kaWNhbGx5IGZyb20gd2l0aGluIHRpbWVyLWludGVycnVwdC4KLSAqIEl0IHRyaWVzIGdldHRpbmcgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlIGFuIHN0dWZmIGl0IGludG8KLSAqIHRoZSB0dHkncyBmbGlwLWJ1ZmZlci4KLSAqLwotc3RhdGljIGludAotY3RjX3R0eV9yZWFkbW9kZW0oY3RjX3R0eV9pbmZvICppbmZvKQotewotCWludCByZXQgPSAxOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQlpZiAoKHR0eSA9IGluZm8tPnR0eSkpIHsKLQkJaWYgKGluZm8tPm1jciAmIFVBUlRfTUNSX1JUUykgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCQkJaWYgKChza2IgPSBza2JfZGVxdWV1ZSgmaW5mby0+cnhfcXVldWUpKSkgewotCQkJCWludCBsZW4gPSBza2ItPmxlbjsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgc2tiLT5kYXRhLCBsZW4pOwotCQkJCXNrYl9wdWxsKHNrYiwgbGVuKTsKLQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQkJCWlmIChza2ItPmxlbiA+IDApCi0JCQkJCXNrYl9xdWV1ZV9oZWFkKCZpbmZvLT5yeF9xdWV1ZSwgc2tiKTsKLQkJCQllbHNlIHsKLQkJCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQkJCXJldCA9ICFza2JfcXVldWVfZW1wdHkoJmluZm8tPnJ4X3F1ZXVlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZAotY3RjX3R0eV9zZXRjYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBvbikKLXsKLQlpbnQgaTsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmICgoIWRyaXZlcikgfHwgY3RjX3R0eV9zaHV0dGluZ2Rvd24pCi0JCXJldHVybjsKLQlmb3IgKGkgPSAwOyBpIDwgQ1RDX1RUWV9NQVhfREVWSUNFUzsgaSsrKQotCQlpZiAoZHJpdmVyLT5pbmZvW2ldLm5ldGRldiA9PSBuZXRkZXYpIHsKLQkJCWN0Y190dHlfaW5mbyAqaW5mbyA9ICZkcml2ZXItPmluZm9baV07Ci0JCQlpZiAob24pCi0JCQkJaW5mby0+bXNyIHw9IFVBUlRfTVNSX0RDRDsKLQkJCWVsc2UKLQkJCQlpbmZvLT5tc3IgJj0gflVBUlRfTVNSX0RDRDsKLQkJCWlmICgoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfQ0hFQ0tfQ0QpICYmICghb24pKQotCQkJCXR0eV9oYW5ndXAoaW5mby0+dHR5KTsKLQkJfQotfQotCi12b2lkCi1jdGNfdHR5X25ldGlmX3J4KHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IGk7Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gTlVMTDsKLQotCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwotCWlmICghc2tiKQotCQlyZXR1cm47Ci0JaWYgKCghc2tiLT5kZXYpIHx8ICghZHJpdmVyKSB8fCBjdGNfdHR5X3NodXR0aW5nZG93bikgewotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybjsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IENUQ19UVFlfTUFYX0RFVklDRVM7IGkrKykKLQkJaWYgKGRyaXZlci0+aW5mb1tpXS5uZXRkZXYgPT0gc2tiLT5kZXYpIHsKLQkJCWluZm8gPSAmZHJpdmVyLT5pbmZvW2ldOwotCQkJYnJlYWs7Ci0JCX0KLQlpZiAoIWluZm8pIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCWlmIChza2ItPmxlbiA8IDYpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCWlmIChtZW1jbXAoc2tiLT5kYXRhLCAmY3RjX3R0eV9tYWdpYywgc2l6ZW9mKF9fdTMyKSkpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKF9fdTMyKSk7Ci0KLQlpID0gKigoaW50ICopc2tiLT5kYXRhKTsKLQlza2JfcHVsbChza2IsIHNpemVvZihpbmZvLT5tY3IpKTsKLQlpZiAoaSAmIFVBUlRfTUNSX1JUUykgewotCQlpbmZvLT5tc3IgfD0gVUFSVF9NU1JfQ1RTOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfQ1RTX0ZMT1cpCi0JCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAwOwotCX0gZWxzZSB7Ci0JCWluZm8tPm1zciAmPSB+VUFSVF9NU1JfQ1RTOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfQ1RTX0ZMT1cpCi0JCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAxOwotCX0KLQlpZiAoaSAmIFVBUlRfTUNSX0RUUikKLQkJaW5mby0+bXNyIHw9IFVBUlRfTVNSX0RTUjsKLQllbHNlCi0JCWluZm8tPm1zciAmPSB+VUFSVF9NU1JfRFNSOwotCWlmIChza2ItPmxlbiA8PSAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCS8qIFRyeSB0byBkZWxpdmVyIGRpcmVjdGx5IHZpYSB0dHktZmxpcC1idWYgaWYgcXVldWUgaXMgZW1wdHkgKi8KLQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZpbmZvLT5yeF9xdWV1ZSkpCi0JCWlmIChjdGNfdHR5X3RyeV9yZWFkKGluZm8sIHNrYikpCi0JCQlyZXR1cm47Ci0JLyogRGlyZWN0IGRlbGl2ZXIgZmFpbGVkIG9yIHF1ZXVlIHdhc24ndCBlbXB0eS4KLQkgKiBRdWV1ZSB1cCBmb3IgbGF0ZXIgZGVxdWV1ZWluZyB2aWEgdGltZXItaXJxLgotCSAqLwotCXNrYl9xdWV1ZV90YWlsKCZpbmZvLT5yeF9xdWV1ZSwgc2tiKTsKLQkvKiBTY2hlZHVsZSBkZXF1ZXVpbmcgKi8KLQl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50YXNrbGV0KTsKLX0KLQotc3RhdGljIGludAotY3RjX3R0eV90aW50KGN0Y190dHlfaW5mbyAqIGluZm8pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kZXF1ZXVlKCZpbmZvLT50eF9xdWV1ZSk7Ci0JaW50IHN0b3BwZWQgPSAoaW5mby0+dHR5LT5od19zdG9wcGVkIHx8IGluZm8tPnR0eS0+c3RvcHBlZCk7Ci0JaW50IHdha2UgPSAxOwotCWludCByYzsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmICghaW5mby0+bmV0ZGV2KSB7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19UWF9MSU5FU1RBVCkgewotCQlpbnQgc2tiX3JlcyA9IGluZm8tPm5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICsKLQkJCXNpemVvZihpbmZvLT5tY3IpICsgc2l6ZW9mKF9fdTMyKTsKLQkJLyogSWYgd2UgbXVzdCB1cGRhdGUgbGluZSBzdGF0dXMsCi0JCSAqIGNyZWF0ZSBhbiBlbXB0eSBkdW1teSBza2IgYW5kIGluc2VydCBpdC4KLQkJICovCi0JCWlmIChza2IpCi0JCQlza2JfcXVldWVfaGVhZCgmaW5mby0+dHhfcXVldWUsIHNrYik7Ci0KLQkJc2tiID0gZGV2X2FsbG9jX3NrYihza2JfcmVzKTsKLQkJaWYgKCFza2IpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY3RjX3R0eTogT3V0IG9mIG1lbW9yeSBpbiAlcyVkIHRpbnRcbiIsCi0JCQkgICAgICAgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCXNrYl9yZXNlcnZlKHNrYiwgc2tiX3Jlcyk7Ci0JCXN0b3BwZWQgPSAwOwotCQl3YWtlID0gMDsKLQl9Ci0JaWYgKCFza2IpCi0JCXJldHVybiAwOwotCWlmIChzdG9wcGVkKSB7Ci0JCXNrYl9xdWV1ZV9oZWFkKCZpbmZvLT50eF9xdWV1ZSwgc2tiKTsKLQkJcmV0dXJuIDE7Ci0JfQotI2lmIDAKLQlpZiAoc2tiLT5sZW4gPiAwKQotCQlwcmludGsoS0VSTl9ERUJVRyAidGludDogJWQgJTAyeFxuIiwgc2tiLT5sZW4sICooc2tiLT5kYXRhKSk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9ERUJVRyAidGludDogJWQgU1RBVFxuIiwgc2tiLT5sZW4pOwotI2VuZGlmCi0JbWVtY3B5KHNrYl9wdXNoKHNrYiwgc2l6ZW9mKGluZm8tPm1jcikpLCAmaW5mby0+bWNyLCBzaXplb2YoaW5mby0+bWNyKSk7Ci0JbWVtY3B5KHNrYl9wdXNoKHNrYiwgc2l6ZW9mKF9fdTMyKSksICZjdGNfdHR5X21hZ2ljLCBzaXplb2YoX191MzIpKTsKLQlyYyA9IGluZm8tPm5ldGRldi0+aGFyZF9zdGFydF94bWl0KHNrYiwgaW5mby0+bmV0ZGV2KTsKLQlpZiAocmMpIHsKLQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoaW5mby0+bWNyKSArIHNpemVvZihfX3UzMikpOwotCQlpZiAoc2tiLT5sZW4gPiAwKQotCQkJc2tiX3F1ZXVlX2hlYWQoJmluZm8tPnR4X3F1ZXVlLCBza2IpOwotCQllbHNlCi0JCQlrZnJlZV9za2Ioc2tiKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OwotCi0JCWluZm8tPmZsYWdzICY9IH5DVENfQVNZTkNfVFhfTElORVNUQVQ7Ci0JCWlmICh0dHkpIHsKLQkJCXR0eV93YWtldXAodHR5KTsKLQkJfQotCX0KLQlyZXR1cm4gKHNrYl9xdWV1ZV9lbXB0eSgmaW5mby0+dHhfcXVldWUpID8gMCA6IDEpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTW9kZW0tZnVuY3Rpb25zCi0gKgotICogbW9zdGx5ICJzdG9sZW4iIGZyb20gb3JpZ2luYWwgTGludXgtc2VyaWFsLmMgYW5kIGZyaWVuZHMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSBpbnQKLWN0Y190dHlfcGFyYW5vaWFfY2hlY2soY3RjX3R0eV9pbmZvICogaW5mbywgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcm91dGluZSkKLXsKLSNpZmRlZiBNT0RFTV9QQVJBTk9JQV9DSEVDSwotCWlmICghaW5mbykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNfdHR5OiBudWxsIGluZm9fc3RydWN0IGZvciAlcyBpbiAlc1xuIiwKLQkJICAgICAgIG5hbWUsIHJvdXRpbmUpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKGluZm8tPm1hZ2ljICE9IENUQ19BU1lOQ19NQUdJQykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNfdHR5OiBiYWQgbWFnaWMgZm9yIGluZm8gc3RydWN0ICVzIGluICVzXG4iLAotCQkgICAgICAgbmFtZSwgcm91dGluZSk7Ci0JCXJldHVybiAxOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3R0eV9pbmplY3QoY3RjX3R0eV9pbmZvICppbmZvLCBjaGFyIGMpCi17Ci0JaW50IHNrYl9yZXM7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmIChjdGNfdHR5X3NodXR0aW5nZG93bikKLQkJcmV0dXJuOwotCXNrYl9yZXMgPSBpbmZvLT5uZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiArIHNpemVvZihpbmZvLT5tY3IpICsKLQkJc2l6ZW9mKF9fdTMyKSArIDE7Ci0Jc2tiID0gZGV2X2FsbG9jX3NrYihza2JfcmVzKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY3RjX3R0eTogT3V0IG9mIG1lbW9yeSBpbiAlcyVkIHR4X2luamVjdFxuIiwKLQkJICAgICAgIENUQ19UVFlfTkFNRSwgaW5mby0+bGluZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBza2JfcmVzKTsKLQkqKHNrYl9wdXQoc2tiLCAxKSkgPSBjOwotCXNrYl9xdWV1ZV9oZWFkKCZpbmZvLT50eF9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50YXNrbGV0KTsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y190dHlfdHJhbnNtaXRfc3RhdHVzKGN0Y190dHlfaW5mbyAqaW5mbykKLXsKLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQlpZiAoY3RjX3R0eV9zaHV0dGluZ2Rvd24pCi0JCXJldHVybjsKLQlpbmZvLT5mbGFncyB8PSBDVENfQVNZTkNfVFhfTElORVNUQVQ7Ci0JdGFza2xldF9zY2hlZHVsZSgmaW5mby0+dGFza2xldCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGNfdHR5X2NoYW5nZV9zcGVlZChjdGNfdHR5X2luZm8gKiBpbmZvKQotewotCXVuc2lnbmVkIGludCBjZmxhZzsKLQl1bnNpZ25lZCBpbnQgcXVvdDsKLQlpbnQgaTsKLQotCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCi0JCXJldHVybjsKLQljZmxhZyA9IGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQotCXF1b3QgPSBpID0gY2ZsYWcgJiBDQkFVRDsKLQlpZiAoaSAmIENCQVVERVgpIHsKLQkJaSAmPSB+Q0JBVURFWDsKLQkJaWYgKGkgPCAxIHx8IGkgPiAyKQotCQkJaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DQkFVREVYOwotCQllbHNlCi0JCQlpICs9IDE1OwotCX0KLQlpZiAocXVvdCkgewotCQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfRFRSOwotCQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfUlRTOwotCQljdGNfdHR5X3RyYW5zbWl0X3N0YXR1cyhpbmZvKTsKLQl9IGVsc2UgewotCQlpbmZvLT5tY3IgJj0gflVBUlRfTUNSX0RUUjsKLQkJaW5mby0+bWNyICY9IH5VQVJUX01DUl9SVFM7Ci0JCWN0Y190dHlfdHJhbnNtaXRfc3RhdHVzKGluZm8pOwotCQlyZXR1cm47Ci0JfQotCi0JLyogQ1RTIGZsb3cgY29udHJvbCBmbGFnIGFuZCBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cyAqLwotCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKLQkJaW5mby0+ZmxhZ3MgfD0gQ1RDX0FTWU5DX0NUU19GTE9XOwotCX0gZWxzZQotCQlpbmZvLT5mbGFncyAmPSB+Q1RDX0FTWU5DX0NUU19GTE9XOwotCWlmIChjZmxhZyAmIENMT0NBTCkKLQkJaW5mby0+ZmxhZ3MgJj0gfkNUQ19BU1lOQ19DSEVDS19DRDsKLQllbHNlIHsKLQkJaW5mby0+ZmxhZ3MgfD0gQ1RDX0FTWU5DX0NIRUNLX0NEOwotCX0KLX0KLQotc3RhdGljIGludAotY3RjX3R0eV9zdGFydHVwKGN0Y190dHlfaW5mbyAqIGluZm8pCi17Ci0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0lOSVRJQUxJWkVEKQotCQlyZXR1cm4gMDsKLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fT1BFTgotCXByaW50ayhLRVJOX0RFQlVHICJzdGFydGluZyB1cCAlcyVkIC4uLlxuIiwgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lKTsKLSNlbmRpZgotCS8qCi0JICogTm93LCBpbml0aWFsaXplIHRoZSBVQVJUCi0JICovCi0JaW5mby0+bWNyID0gVUFSVF9NQ1JfRFRSIHwgVUFSVF9NQ1JfUlRTIHwgVUFSVF9NQ1JfT1VUMjsKLQlpZiAoaW5mby0+dHR5KQotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7Ci0JLyoKLQkgKiBhbmQgc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQKLQkgKi8KLQljdGNfdHR5X2NoYW5nZV9zcGVlZChpbmZvKTsKLQotCWluZm8tPmZsYWdzIHw9IENUQ19BU1lOQ19JTklUSUFMSVpFRDsKLQlpZiAoIShpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19ORVRERVZfT1BFTikpCi0JCWluZm8tPm5ldGRldi0+b3BlbihpbmZvLT5uZXRkZXYpOwotCWluZm8tPmZsYWdzIHw9IENUQ19BU1lOQ19ORVRERVZfT1BFTjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y190dHlfc3RvcGRldih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKWRhdGE7Ci0KLQlpZiAoKCFpbmZvKSB8fCAoIWluZm8tPm5ldGRldikgfHwKLQkgICAgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0lOSVRJQUxJWkVEKSkKLQkJcmV0dXJuOwotCWluZm8tPm5ldGRldi0+c3RvcChpbmZvLT5uZXRkZXYpOwotCWluZm8tPmZsYWdzICY9IH5DVENfQVNZTkNfTkVUREVWX09QRU47Ci19Ci0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgd2lsbCBzaHV0ZG93biBhIHNlcmlhbCBwb3J0OyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgYW5kCi0gKiBEVFIgaXMgZHJvcHBlZCBpZiB0aGUgaGFuZ3VwIG9uIGNsb3NlIHRlcm1pbyBmbGFnIGlzIG9uLgotICovCi1zdGF0aWMgdm9pZAotY3RjX3R0eV9zaHV0ZG93bihjdGNfdHR5X2luZm8gKiBpbmZvKQotewotCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotCWlmICghKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0lOSVRJQUxJWkVEKSkKLQkJcmV0dXJuOwotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcgIlNodXR0aW5nIGRvd24gJXMlZCAuLi4uXG4iLCBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUpOwotI2VuZGlmCi0JaW5mby0+bXNyICY9IH5VQVJUX01TUl9SSTsKLQlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQotCQlpbmZvLT5tY3IgJj0gfihVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9SVFMpOwotCWlmIChpbmZvLT50dHkpCi0JCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7Ci0JbW9kX3RpbWVyKCZpbmZvLT5zdG9wdGltZXIsIGppZmZpZXMgKyAoMTAgKiBIWikpOwotCXNrYl9xdWV1ZV9wdXJnZSgmaW5mby0+dHhfcXVldWUpOwotCXNrYl9xdWV1ZV9wdXJnZSgmaW5mby0+cnhfcXVldWUpOwotCWluZm8tPmZsYWdzICY9IH5DVENfQVNZTkNfSU5JVElBTElaRUQ7Ci19Ci0KLS8qIGN0Y190dHlfd3JpdGUoKSBpcyB0aGUgbWFpbiBzZW5kLXJvdXRpbmUuIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSB1cHBlcgotICogbGV2ZWxzIHdpdGhpbiB0aGUga2VybmVsIHRvIHBlcmZvcm0gc2VuZGluZyBkYXRhLiBEZXBlbmRpbmcgb24gdGhlCi0gKiBvbmxpbmUtZmxhZyBpdCBlaXRoZXIgZGlyZWN0cyBvdXRwdXQgdG8gdGhlIGF0LWNvbW1hbmQtaW50ZXJwcmV0ZXIgb3IKLSAqIHRvIHRoZSBsb3dlciBsZXZlbC4gQWRkaXRpb25hbCB0YXNrcyBkb25lIGhlcmU6Ci0gKiAgLSBJZiBvbmxpbmUsIGNoZWNrIGZvciBlc2NhcGUtc2VxdWVuY2UgKCsrKykKLSAqICAtIElmIHNlbmRpbmcgYXVkaW8tZGF0YSwgY2FsbCBjdGNfdHR5X0RMRWRvd24oKSB0byBwYXJzZSBETEUtY29kZXMuCi0gKiAgLSBJZiByZWNlaXZpbmcgYXVkaW8tZGF0YSwgY2FsbCBjdGNfdHR5X2VuZF92cngoKSB0byBhYm9ydCBpZiBuZWVkZWQuCi0gKiAgLSBJZiBkaWFsaW5nLCBhYm9ydCBkaWFsLgotICovCi1zdGF0aWMgaW50Ci1jdGNfdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVfY2hhciAqIGJ1ZiwgaW50IGNvdW50KQotewotCWludCBjOwotCWludCB0b3RhbCA9IDA7Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCi0JREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGN0Y190dHlfc2h1dHRpbmdkb3duKQotCQlnb3RvIGV4OwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfd3JpdGUiKSkKLQkJZ290byBleDsKLQlpZiAoIXR0eSkKLQkJZ290byBleDsKLQlpZiAoIWluZm8tPm5ldGRldikgewotCQl0b3RhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXg7Ci0JfQotCXdoaWxlICgxKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCWludCBza2JfcmVzOwotCi0JCWMgPSAoY291bnQgPCBDVENfVFRZX1hNSVRfU0laRSkgPyBjb3VudCA6IENUQ19UVFlfWE1JVF9TSVpFOwotCQlpZiAoYyA8PSAwKQotCQkJYnJlYWs7Ci0KLQkJc2tiX3JlcyA9IGluZm8tPm5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICsgc2l6ZW9mKGluZm8tPm1jcikgKwotCQkJKyBzaXplb2YoX191MzIpOwotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYl9yZXMgKyBjKTsKLQkJaWYgKCFza2IpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY3RjX3R0eTogT3V0IG9mIG1lbW9yeSBpbiAlcyVkIHdyaXRlXG4iLAotCQkJICAgICAgIENUQ19UVFlfTkFNRSwgaW5mby0+bGluZSk7Ci0JCQlicmVhazsKLQkJfQotCQlza2JfcmVzZXJ2ZShza2IsIHNrYl9yZXMpOwotCQltZW1jcHkoc2tiX3B1dChza2IsIGMpLCBidWYsIGMpOwotCQlza2JfcXVldWVfdGFpbCgmaW5mby0+dHhfcXVldWUsIHNrYik7Ci0JCWJ1ZiArPSBjOwotCQl0b3RhbCArPSBjOwotCQljb3VudCAtPSBjOwotCX0KLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmaW5mby0+dHhfcXVldWUpKSB7Ci0JCWluZm8tPmxzciAmPSB+VUFSVF9MU1JfVEVNVDsKLQkJdGFza2xldF9zY2hlZHVsZSgmaW5mby0+dGFza2xldCk7Ci0JfQotZXg6Ci0JREJGX1RFWFQodHJhY2UsIDYsIF9fRlVOQ1RJT05fXyk7Ci0JcmV0dXJuIHRvdGFsOwotfQotCi1zdGF0aWMgaW50Ci1jdGNfdHR5X3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X3dyaXRlX3Jvb20iKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIENUQ19UVFlfWE1JVF9TSVpFOwotfQotCi1zdGF0aWMgaW50Ci1jdGNfdHR5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWN0Y190dHlfaW5mbyAqaW5mbyA9IChjdGNfdHR5X2luZm8gKikgdHR5LT5kcml2ZXJfZGF0YTsKLQotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfY2hhcnNfaW5fYnVmZmVyIikpCi0JCXJldHVybiAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3R0eV9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm87Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmICghdHR5KQotCQlnb3RvIGV4OwotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQlpbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfZmx1c2hfYnVmZmVyIikpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JCWdvdG8gZXg7Ci0JfQotCXNrYl9xdWV1ZV9wdXJnZSgmaW5mby0+dHhfcXVldWUpOwotCWluZm8tPmxzciB8PSBVQVJUX0xTUl9URU1UOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQl0dHlfd2FrZXVwKHR0eSk7Ci1leDoKLQlEQkZfVEVYVF8odHJhY2UsIDIsICJleDogJXMgIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGNfdHR5X2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGN0Y190dHlfc2h1dHRpbmdkb3duKQotCQlyZXR1cm47Ci0JaWYgKGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV9mbHVzaF9jaGFycyIpKQotCQlyZXR1cm47Ci0JaWYgKHR0eS0+c3RvcHBlZCB8fCB0dHktPmh3X3N0b3BwZWQgfHwgc2tiX3F1ZXVlX2VtcHR5KCZpbmZvLT50eF9xdWV1ZSkpCi0JCXJldHVybjsKLQl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50YXNrbGV0KTsKLX0KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogY3RjX3R0eV90aHJvdHRsZSgpCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgdXBwZXItbGF5ZXIgdHR5IGxheWVyIHRvIHNpZ25hbCB0aGF0Ci0gKiBpbmNvbWluZyBjaGFyYWN0ZXJzIHNob3VsZCBiZSB0aHJvdHRsZWQuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIHZvaWQKLWN0Y190dHlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X3Rocm90dGxlIikpCi0JCXJldHVybjsKLQlpbmZvLT5tY3IgJj0gflVBUlRfTUNSX1JUUzsKLQlpZiAoSV9JWE9GRih0dHkpKQotCQljdGNfdHR5X2luamVjdChpbmZvLCBTVE9QX0NIQVIodHR5KSk7Ci0JY3RjX3R0eV90cmFuc21pdF9zdGF0dXMoaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGNfdHR5X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X3VudGhyb3R0bGUiKSkKLQkJcmV0dXJuOwotCWluZm8tPm1jciB8PSBVQVJUX01DUl9SVFM7Ci0JaWYgKElfSVhPRkYodHR5KSkKLQkJY3RjX3R0eV9pbmplY3QoaW5mbywgU1RBUlRfQ0hBUih0dHkpKTsKLQljdGNfdHR5X3RyYW5zbWl0X3N0YXR1cyhpbmZvKTsKLX0KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogY3RjX3R0eV9pb2N0bCgpIGFuZCBmcmllbmRzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKgotICogY3RjX3R0eV9nZXRfbHNyX2luZm8gLSBnZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgaW5mbwotICoKLSAqIFB1cnBvc2U6IExldCB1c2VyIGNhbGwgaW9jdGwoKSB0byBnZXQgaW5mbyB3aGVuIHRoZSBVQVJUIHBoeXNpY2FsbHkKLSAqICAgICAgICAgIGlzIGVtcHRpZWQuICBPbiBidXMgdHlwZXMgbGlrZSBSUzQ4NSwgdGhlIHRyYW5zbWl0dGVyIG11c3QKLSAqICAgICAgICAgIHJlbGVhc2UgdGhlIGJ1cyBhZnRlciB0cmFuc21pdHRpbmcuIFRoaXMgbXVzdCBiZSBkb25lIHdoZW4KLSAqICAgICAgICAgIHRoZSB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBpcyBlbXB0eSwgbm90IGJlIGRvbmUgd2hlbiB0aGUKLSAqICAgICAgICAgIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgaXMgZW1wdHkuICBUaGlzIGZ1bmN0aW9uYWxpdHkKLSAqICAgICAgICAgIGFsbG93cyBSUzQ4NSBkcml2ZXIgdG8gYmUgd3JpdHRlbiBpbiB1c2VyIHNwYWNlLgotICovCi1zdGF0aWMgaW50Ci1jdGNfdHR5X2dldF9sc3JfaW5mbyhjdGNfdHR5X2luZm8gKiBpbmZvLCB1aW50IF9fdXNlciAqdmFsdWUpCi17Ci0JdV9jaGFyIHN0YXR1czsKLQl1aW50IHJlc3VsdDsKLQl1bG9uZyBmbGFnczsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQlzdGF0dXMgPSBpbmZvLT5sc3I7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JcmVzdWx0ID0gKChzdGF0dXMgJiBVQVJUX0xTUl9URU1UKSA/IFRJT0NTRVJfVEVNVCA6IDApOwotCXB1dF91c2VyKHJlc3VsdCwgdmFsdWUpOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgY3RjX3R0eV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0JdV9jaGFyIGNvbnRyb2wsCi0JIHN0YXR1czsKLQl1aW50IHJlc3VsdDsKLQl1bG9uZyBmbGFnczsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfaW9jdGwiKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKQotCQlyZXR1cm4gLUVJTzsKLQotCWNvbnRyb2wgPSBpbmZvLT5tY3I7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotCXN0YXR1cyA9IGluZm8tPm1zcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQlyZXN1bHQgPSAoKGNvbnRyb2wgJiBVQVJUX01DUl9SVFMpID8gVElPQ01fUlRTIDogMCkKLQkgICAgfCAoKGNvbnRyb2wgJiBVQVJUX01DUl9EVFIpID8gVElPQ01fRFRSIDogMCkKLQkgICAgfCAoKHN0YXR1cyAmIFVBUlRfTVNSX0RDRCkgPyBUSU9DTV9DQVIgOiAwKQotCSAgICB8ICgoc3RhdHVzICYgVUFSVF9NU1JfUkkpID8gVElPQ01fUk5HIDogMCkKLQkgICAgfCAoKHN0YXR1cyAmIFVBUlRfTVNSX0RTUikgPyBUSU9DTV9EU1IgOiAwKQotCSAgICB8ICgoc3RhdHVzICYgVUFSVF9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWN0Y190dHlfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV9pb2N0bCIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHNldCAmIFRJT0NNX1JUUykKLQkJaW5mby0+bWNyIHw9IFVBUlRfTUNSX1JUUzsKLQlpZiAoc2V0ICYgVElPQ01fRFRSKQotCQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfRFRSOwotCi0JaWYgKGNsZWFyICYgVElPQ01fUlRTKQotCQlpbmZvLT5tY3IgJj0gflVBUlRfTUNSX1JUUzsKLQlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCi0JCWluZm8tPm1jciAmPSB+VUFSVF9NQ1JfRFRSOwotCi0JaWYgKChzZXQgfCBjbGVhcikgJiAoVElPQ01fUlRTfFRJT0NNX0RUUikpCi0JCWN0Y190dHlfdHJhbnNtaXRfc3RhdHVzKGluZm8pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jdGNfdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotCSAgICAgICB1aW50IGNtZCwgdWxvbmcgYXJnKQotewotCWN0Y190dHlfaW5mbyAqaW5mbyA9IChjdGNfdHR5X2luZm8gKikgdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQgZXJyb3I7Ci0JaW50IHJldHZhbDsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfaW9jdGwiKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKQotCQlyZXR1cm4gLUVJTzsKLQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFRDU0JSSzogICAvKiBTVklEIHZlcnNpb246IG5vbi16ZXJvIGFyZyAtLT4gbm8gYnJlYWsgKi8KLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fSU9DVEwKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlcyVkIGlvY3RsIFRDU0JSS1xuIiwgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lKTsKLSNlbmRpZgotCQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlyZXR1cm4gcmV0dmFsOwotCQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgVENTQlJLUDogIC8qIHN1cHBvcnQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fSU9DVEwKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlcyVkIGlvY3RsIFRDU0JSS1BcbiIsIENUQ19UVFlfTkFNRSwgaW5mby0+bGluZSk7Ci0jZW5kaWYKLQkJCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKLQkJCWlmIChyZXR2YWwpCi0JCQkJcmV0dXJuIHJldHZhbDsKLQkJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKLQkJCXJldHVybiAwOwotCQljYXNlIFRJT0NHU09GVENBUjoKLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fSU9DVEwKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlcyVkIGlvY3RsIFRJT0NHU09GVENBUlxuIiwgQ1RDX1RUWV9OQU1FLAotCQkJICAgICAgIGluZm8tPmxpbmUpOwotI2VuZGlmCi0JCQllcnJvciA9IHB1dF91c2VyKENfQ0xPQ0FMKHR0eSkgPyAxIDogMCwgKHVsb25nIF9fdXNlciAqKSBhcmcpOwotCQkJcmV0dXJuIGVycm9yOwotCQljYXNlIFRJT0NTU09GVENBUjoKLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fSU9DVEwKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlcyVkIGlvY3RsIFRJT0NTU09GVENBUlxuIiwgQ1RDX1RUWV9OQU1FLAotCQkJICAgICAgIGluZm8tPmxpbmUpOwotI2VuZGlmCi0JCQllcnJvciA9IGdldF91c2VyKGFyZywgKHVsb25nIF9fdXNlciAqKSBhcmcpOwotCQkJaWYgKGVycm9yKQotCQkJCXJldHVybiBlcnJvcjsKLQkJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9Ci0JCQkgICAgKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiB+Q0xPQ0FMKSB8Ci0JCQkgICAgIChhcmcgPyBDTE9DQUwgOiAwKSk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBUSU9DU0VSR0VUTFNSOgkvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fSU9DVEwKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlcyVkIGlvY3RsIFRJT0NTRVJHRVRMU1JcbiIsIENUQ19UVFlfTkFNRSwKLQkJCSAgICAgICBpbmZvLT5saW5lKTsKLSNlbmRpZgotCQkJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZih1aW50KSkpCi0JCQkJcmV0dXJuIGN0Y190dHlfZ2V0X2xzcl9pbmZvKGluZm8sICh1aW50IF9fdXNlciAqKSBhcmcpOwotCQkJZWxzZQotCQkJCXJldHVybiAtRUZBVUxUOwotCQlkZWZhdWx0OgotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9JT0NUTAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlVOS05PV04gaW9jdGwgMHglMDh4IG9uICVzJWRcbiIsIGNtZCwKLQkJCSAgICAgICBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUpOwotI2VuZGlmCi0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y190dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQotewotCWN0Y190dHlfaW5mbyAqaW5mbyA9IChjdGNfdHR5X2luZm8gKikgdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQljdGNfdHR5X2NoYW5nZV9zcGVlZChpbmZvKTsKLQotCS8qIEhhbmRsZSB0cmFuc2l0aW9uIHRvIEIwICovCi0JaWYgKChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSAmJiAhKGNmbGFnICYgQ0JBVUQpKSB7Ci0JCWluZm8tPm1jciAmPSB+KFVBUlRfTUNSX0RUUnxVQVJUX01DUl9SVFMpOwotCQljdGNfdHR5X3RyYW5zbWl0X3N0YXR1cyhpbmZvKTsKLQl9Ci0KLQkvKiBIYW5kbGUgdHJhbnNpdGlvbiBmcm9tIEIwIHRvIG90aGVyICovCi0JaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgJiYgKGNmbGFnICYgQ0JBVUQpKSB7Ci0JCWluZm8tPm1jciB8PSBVQVJUX01DUl9EVFI7Ci0JCWlmICghKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHx8Ci0gICAgICAgICAgICAgICAgICAgICF0ZXN0X2JpdChUVFlfVEhST1RUTEVELCAmdHR5LT5mbGFncykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPm1jciB8PSBVQVJUX01DUl9SVFM7Ci0gICAgICAgICAgICAgICAgfQotCQljdGNfdHR5X3RyYW5zbWl0X3N0YXR1cyhpbmZvKTsKLQl9Ci0KLQkvKiBIYW5kbGUgdHVybmluZyBvZmYgQ1JUU0NUUyAqLwotCWlmICgob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSAmJgotICAgICAgICAgICAgISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSkKLSAgICAgICAgICAgICAgICB0dHktPmh3X3N0b3BwZWQgPSAwOwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBjdGNfdHR5X29wZW4oKSBhbmQgZnJpZW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbnQKLWN0Y190dHlfYmxvY2tfdGlsX3JlYWR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwLCBjdGNfdHR5X2luZm8gKmluZm8pCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgTlVMTCk7Ci0JaW50IGRvX2Nsb2NhbCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0dmFsOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JLyoKLQkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY2xvc2VkLCB0aGVuIGJsb2NrCi0JICogdW50aWwgaXQncyBkb25lLCBhbmQgdGhlbiB0cnkgYWdhaW4uCi0JICovCi0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKLQkgICAgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0NMT1NJTkcpKSB7Ci0JCWlmIChpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19DTE9TSU5HKQotCQkJd2FpdF9ldmVudChpbmZvLT5jbG9zZV93YWl0LAotCQkJCSAgICEoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfQ0xPU0lORykpOwotI2lmZGVmIE1PREVNX0RPX1JFU1RBUlQKLQkJaWYgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0hVUF9OT1RJRlkpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJZWxzZQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLSNlbHNlCi0JCXJldHVybiAtRUFHQUlOOwotI2VuZGlmCi0JfQotCS8qCi0JICogSWYgbm9uLWJsb2NraW5nIG1vZGUgaXMgc2V0LCB0aGVuIG1ha2UgdGhlIGNoZWNrIHVwIGZyb250Ci0JICogYW5kIHRoZW4gZXhpdC4KLQkgKi8KLQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAotCSAgICAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpKSB7Ci0JCWluZm8tPmZsYWdzIHw9IENUQ19BU1lOQ19OT1JNQUxfQUNUSVZFOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKLQkJZG9fY2xvY2FsID0gMTsKLQkvKgotCSAqIEJsb2NrIHdhaXRpbmcgZm9yIHRoZSBjYXJyaWVyIGRldGVjdCBhbmQgdGhlIGxpbmUgdG8gYmVjb21lCi0JICogZnJlZSAoaS5lLiwgbm90IGluIHVzZSBieSB0aGUgY2FsbG91dCkuICBXaGlsZSB3ZSBhcmUgaW4KLQkgKiB0aGlzIGxvb3AsIGluZm8tPmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0Ci0JICogY3RjX3R0eV9jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuICBXZSByZXN0b3JlIGl0IHVwb24KLQkgKiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgotCSAqLwotCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfYmxvY2tfdGlsX3JlYWR5IGJlZm9yZSBibG9jazogJXMlZCwgY291bnQgPSAlZFxuIiwKLQkgICAgICAgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0jZW5kaWYKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JaWYgKCEodHR5X2h1bmdfdXBfcChmaWxwKSkpCi0JCWluZm8tPmNvdW50LS07Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JaW5mby0+YmxvY2tlZF9vcGVuKys7Ci0Jd2hpbGUgKDEpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKLQkJICAgICEoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSU5JVElBTElaRUQpKSB7Ci0jaWZkZWYgTU9ERU1fRE9fUkVTVEFSVAotCQkJaWYgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0hVUF9OT1RJRlkpCi0JCQkJcmV0dmFsID0gLUVBR0FJTjsKLQkJCWVsc2UKLQkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7Ci0jZWxzZQotCQkJcmV0dmFsID0gLUVBR0FJTjsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfQ0xPU0lORykgJiYKLQkJICAgIChkb19jbG9jYWwgfHwgKGluZm8tPm1zciAmIFVBUlRfTVNSX0RDRCkpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJCWJyZWFrOwotCQl9Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQkJcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfYmxvY2tfdGlsX3JlYWR5IGJsb2NraW5nOiAlcyVkLCBjb3VudCA9ICVkXG4iLAotCQkgICAgICAgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0jZW5kaWYKLQkJc2NoZWR1bGUoKTsKLQl9Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwotCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJaW5mby0+Y291bnQrKzsKLQlpbmZvLT5ibG9ja2VkX29wZW4tLTsKLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fT1BFTgotCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X2Jsb2NrX3RpbF9yZWFkeSBhZnRlciBibG9ja2luZzogJXMlZCwgY291bnQgPSAlZFxuIiwKLQkgICAgICAgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0jZW5kaWYKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCWluZm8tPmZsYWdzIHw9IENUQ19BU1lOQ19OT1JNQUxfQUNUSVZFOwotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBhIHNlcmlhbCBwb3J0IGlzIG9wZW5lZC4gIEl0Ci0gKiBlbmFibGVzIGludGVycnVwdHMgZm9yIGEgc2VyaWFsIHBvcnQsIGxpbmtpbmcgaW4gaXRzIGFzeW5jIHN0cnVjdHVyZSBpbnRvCi0gKiB0aGUgSVJRIGNoYWluLiAgIEl0IGFsc28gcGVyZm9ybXMgdGhlIHNlcmlhbC1zcGVjaWZpYwotICogaW5pdGlhbGl6YXRpb24gZm9yIHRoZSB0dHkgc3RydWN0dXJlLgotICovCi1zdGF0aWMgaW50Ci1jdGNfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvOwotCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCWludCByZXR2YWwsCi0JIGxpbmU7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlsaW5lID0gdHR5LT5pbmRleDsKLQlpZiAobGluZSA8IDAgfHwgbGluZSA+IENUQ19UVFlfTUFYX0RFVklDRVMpCi0JCXJldHVybiAtRU5PREVWOwotCWluZm8gPSAmZHJpdmVyLT5pbmZvW2xpbmVdOwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfb3BlbiIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIWluZm8tPm5ldGRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQlwcmludGsoS0VSTl9ERUJVRyAiY3RjX3R0eV9vcGVuICVzLCBjb3VudCA9ICVkXG4iLCB0dHktPm5hbWUsCi0JICAgICAgIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIHNhdmVmbGFncyk7Ci0JaW5mby0+Y291bnQrKzsKLQl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT50dHkgPSB0dHk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBzYXZlZmxhZ3MpOwotCS8qCi0JICogU3RhcnQgdXAgc2VyaWFsIHBvcnQKLQkgKi8KLQlyZXR2YWwgPSBjdGNfdHR5X3N0YXJ0dXAoaW5mbyk7Ci0JaWYgKHJldHZhbCkgewotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X29wZW4gcmV0dXJuIGFmdGVyIHN0YXJ0dXBcbiIpOwotI2VuZGlmCi0JCXJldHVybiByZXR2YWw7Ci0JfQotCXJldHZhbCA9IGN0Y190dHlfYmxvY2tfdGlsX3JlYWR5KHR0eSwgZmlscCwgaW5mbyk7Ci0JaWYgKHJldHZhbCkgewotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X29wZW4gcmV0dXJuIGFmdGVyIGN0Y190dHlfYmxvY2tfdGlsX3JlYWR5IFxuIik7Ci0jZW5kaWYKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQlwcmludGsoS0VSTl9ERUJVRyAiY3RjX3R0eV9vcGVuICVzIHN1Y2Nlc3NmdWwuLi5cbiIsIHR0eS0+bmFtZSk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y190dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCXVsb25nIGZsYWdzOwotCXVsb25nIHRpbWVvdXQ7Ci0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKCFpbmZvIHx8IGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV9jbG9zZSIpKQotCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X2Nsb3NlIHJldHVybiBhZnRlciB0dHlfaHVuZ191cF9wXG4iKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+Y291bnQgIT0gMSkpIHsKLQkJLyoKLQkJICogVWgsIG9oLiAgdHR5LT5jb3VudCBpcyAxLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0dHkKLQkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBJbmZvLT5jb3VudCBzaG91bGQgYWx3YXlzCi0JCSAqIGJlIG9uZSBpbiB0aGVzZSBjb25kaXRpb25zLiAgSWYgaXQncyBncmVhdGVyIHRoYW4KLQkJICogb25lLCB3ZSd2ZSBnb3QgcmVhbCBwcm9ibGVtcywgc2luY2UgaXQgbWVhbnMgdGhlCi0JCSAqIHNlcmlhbCBwb3J0IHdvbid0IGJlIHNodXRkb3duLgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJjdGNfdHR5X2Nsb3NlOiBiYWQgcG9ydCBjb3VudDsgdHR5LT5jb3VudCBpcyAxLCAiCi0JCSAgICAgICAiaW5mby0+Y291bnQgaXMgJWRcbiIsIGluZm8tPmNvdW50KTsKLQkJaW5mby0+Y291bnQgPSAxOwotCX0KLQlpZiAoLS1pbmZvLT5jb3VudCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjdGNfdHR5X2Nsb3NlOiBiYWQgcG9ydCBjb3VudCBmb3IgJXMlZDogJWRcbiIsCi0JCSAgICAgICBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLQkJaW5mby0+Y291bnQgPSAwOwotCX0KLQlpZiAoaW5mby0+Y291bnQpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X2Nsb3NlIGFmdGVyIGluZm8tPmNvdW50ICE9IDBcbiIpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JaW5mby0+ZmxhZ3MgfD0gQ1RDX0FTWU5DX0NMT1NJTkc7Ci0JdHR5LT5jbG9zaW5nID0gMTsKLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgd2Ugc3RvcCBhY2NlcHRpbmcgaW5wdXQuICBUbyBkbyB0aGlzLCB3ZQotCSAqIGRpc2FibGUgdGhlIHJlY2VpdmUgbGluZSBzdGF0dXMgaW50ZXJydXB0cywgYW5kIHRlbGwgdGhlCi0JICogaW50ZXJydXB0IGRyaXZlciB0byBzdG9wIGNoZWNraW5nIHRoZSBkYXRhIHJlYWR5IGJpdCBpbiB0aGUKLQkgKiBsaW5lIHN0YXR1cyByZWdpc3Rlci4KLQkgKi8KLQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSU5JVElBTElaRUQpIHsKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDMwKkhaKTsgLyogMzAgc2Vjb25kcyB0aW1lb3V0ICovCi0JCS8qCi0JCSAqIEJlZm9yZSB3ZSBkcm9wIERUUiwgbWFrZSBzdXJlIHRoZSBVQVJUIHRyYW5zbWl0dGVyCi0JCSAqIGhhcyBjb21wbGV0ZWx5IGRyYWluZWQ7IHRoaXMgaXMgZXNwZWNpYWxseQotCQkgKiBpbXBvcnRhbnQgaWYgdGhlcmUgaXMgYSB0cmFuc21pdCBGSUZPIQotCQkgKi8KLQkJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKLQkJd2hpbGUgKCEoaW5mby0+bHNyICYgVUFSVF9MU1JfVEVNVCkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotCQkJbXNsZWVwKDUwMCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLHRpbWVvdXQpKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCWN0Y190dHlfc2h1dGRvd24oaW5mbyk7Ci0JaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpIHsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZpbmZvLT50eF9xdWV1ZSk7Ci0JCWluZm8tPmxzciB8PSBVQVJUX0xTUl9URU1UOwotCX0KLQl0dHlfbGRpc2NfZmx1c2godHR5KTsKLQlpbmZvLT50dHkgPSAwOwotCXR0eS0+Y2xvc2luZyA9IDA7Ci0JaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgewotCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7Ci0JfQotCWluZm8tPmZsYWdzICY9IH4oQ1RDX0FTWU5DX05PUk1BTF9BQ1RJVkUgfCBDVENfQVNZTkNfQ0xPU0lORyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5jbG9zZV93YWl0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fT1BFTgotCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X2Nsb3NlIG5vcm1hbCBleGl0XG4iKTsKLSNlbmRpZgotfQotCi0vKgotICogY3RjX3R0eV9oYW5ndXAoKSAtLS0gY2FsbGVkIGJ5IHR0eV9oYW5ndXAoKSB3aGVuIGEgaGFuZ3VwIGlzIHNpZ25hbGVkLgotICovCi1zdGF0aWMgdm9pZAotY3RjX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nIHNhdmVmbGFnczsKLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X2hhbmd1cCIpKQotCQlyZXR1cm47Ci0JY3RjX3R0eV9zaHV0ZG93bihpbmZvKTsKLQlpbmZvLT5jb3VudCA9IDA7Ci0JaW5mby0+ZmxhZ3MgJj0gfkNUQ19BU1lOQ19OT1JNQUxfQUNUSVZFOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIHNhdmVmbGFncyk7Ci0JaW5mby0+dHR5ID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGNfdHR5X2xvY2ssIHNhdmVmbGFncyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwotfQotCi0KLS8qCi0gKiBGb3IgYWxsIG9ubGluZSB0dHkncywgdHJ5IHNlbmRpbmcgZGF0YSB0bwotICogdGhlIGxvd2VyIGxldmVscy4KLSAqLwotc3RhdGljIHZvaWQKLWN0Y190dHlfdGFzayh1bnNpZ25lZCBsb25nIGFyZykKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAodm9pZCAqKWFyZzsKLQl1bnNpZ25lZCBsb25nIHNhdmVmbGFnczsKLQlpbnQgYWdhaW47Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBzYXZlZmxhZ3MpOwotCWlmICgoIWN0Y190dHlfc2h1dHRpbmdkb3duKSAmJiBpbmZvKSB7Ci0JCWFnYWluID0gY3RjX3R0eV90aW50KGluZm8pOwotCQlpZiAoIWFnYWluKQotCQkJaW5mby0+bHNyIHw9IFVBUlRfTFNSX1RFTVQ7Ci0JCWFnYWluIHw9IGN0Y190dHlfcmVhZG1vZGVtKGluZm8pOwotCQlpZiAoYWdhaW4pIHsKLQkJCXRhc2tsZXRfc2NoZWR1bGUoJmluZm8tPnRhc2tsZXQpOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBjdGNfb3BzID0gewotCS5vcGVuID0gY3RjX3R0eV9vcGVuLAotCS5jbG9zZSA9IGN0Y190dHlfY2xvc2UsCi0JLndyaXRlID0gY3RjX3R0eV93cml0ZSwKLQkuZmx1c2hfY2hhcnMgPSBjdGNfdHR5X2ZsdXNoX2NoYXJzLAotCS53cml0ZV9yb29tID0gY3RjX3R0eV93cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIgPSBjdGNfdHR5X2NoYXJzX2luX2J1ZmZlciwKLQkuZmx1c2hfYnVmZmVyID0gY3RjX3R0eV9mbHVzaF9idWZmZXIsCi0JLmlvY3RsID0gY3RjX3R0eV9pb2N0bCwKLQkudGhyb3R0bGUgPSBjdGNfdHR5X3Rocm90dGxlLAotCS51bnRocm90dGxlID0gY3RjX3R0eV91bnRocm90dGxlLAotCS5zZXRfdGVybWlvcyA9IGN0Y190dHlfc2V0X3Rlcm1pb3MsCi0JLmhhbmd1cCA9IGN0Y190dHlfaGFuZ3VwLAotCS50aW9jbWdldCA9IGN0Y190dHlfdGlvY21nZXQsCi0JLnRpb2Ntc2V0ID0gY3RjX3R0eV90aW9jbXNldCwKLX07Ci0KLWludAotY3RjX3R0eV9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0JY3RjX3R0eV9pbmZvICppbmZvOwotCXN0cnVjdCB0dHlfZHJpdmVyICpkZXZpY2U7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMiwgX19GVU5DVElPTl9fKTsKLQlkcml2ZXIgPSBrbWFsbG9jKHNpemVvZihjdGNfdHR5X2RyaXZlciksIEdGUF9LRVJORUwpOwotCWlmIChkcml2ZXIgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJPdXQgb2YgbWVtb3J5IGluIGN0Y190dHlfbW9kZW1faW5pdFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQltZW1zZXQoZHJpdmVyLCAwLCBzaXplb2YoY3RjX3R0eV9kcml2ZXIpKTsKLQlkZXZpY2UgPSBhbGxvY190dHlfZHJpdmVyKENUQ19UVFlfTUFYX0RFVklDRVMpOwotCWlmICghZGV2aWNlKSB7Ci0JCWtmcmVlKGRyaXZlcik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgaW4gY3RjX3R0eV9tb2RlbV9pbml0XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGV2aWNlLT5kZXZmc19uYW1lID0gImN0Yy8iIENUQ19UVFlfTkFNRTsKLQlkZXZpY2UtPm5hbWUgPSBDVENfVFRZX05BTUU7Ci0JZGV2aWNlLT5tYWpvciA9IENUQ19UVFlfTUFKT1I7Ci0JZGV2aWNlLT5taW5vcl9zdGFydCA9IDA7Ci0JZGV2aWNlLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKLQlkZXZpY2UtPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0JZGV2aWNlLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JZGV2aWNlLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKLQlkZXZpY2UtPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKLQlkZXZpY2UtPmRyaXZlcl9uYW1lID0gImN0Y190dHkiLAotCXR0eV9zZXRfb3BlcmF0aW9ucyhkZXZpY2UsICZjdGNfb3BzKTsKLQlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihkZXZpY2UpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImN0Y190dHk6IENvdWxkbid0IHJlZ2lzdGVyIHNlcmlhbC1kZXZpY2VcbiIpOwotCQlwdXRfdHR5X2RyaXZlcihkZXZpY2UpOwotCQlrZnJlZShkcml2ZXIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWRyaXZlci0+Y3RjX3R0eV9kZXZpY2UgPSBkZXZpY2U7Ci0JZm9yIChpID0gMDsgaSA8IENUQ19UVFlfTUFYX0RFVklDRVM7IGkrKykgewotCQlpbmZvID0gJmRyaXZlci0+aW5mb1tpXTsKLQkJaW5pdF9NVVRFWCgmaW5mby0+d3JpdGVfc2VtKTsKLQkJdGFza2xldF9pbml0KCZpbmZvLT50YXNrbGV0LCBjdGNfdHR5X3Rhc2ssCi0JCQkJKHVuc2lnbmVkIGxvbmcpIGluZm8pOwotCQlpbmZvLT5tYWdpYyA9IENUQ19BU1lOQ19NQUdJQzsKLQkJaW5mby0+bGluZSA9IGk7Ci0JCWluZm8tPnR0eSA9IDA7Ci0JCWluZm8tPmNvdW50ID0gMDsKLQkJaW5mby0+YmxvY2tlZF9vcGVuID0gMDsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+b3Blbl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmluZm8tPnR4X3F1ZXVlKTsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaW5mby0+cnhfcXVldWUpOwotCQlpbml0X3RpbWVyKCZpbmZvLT5zdG9wdGltZXIpOwotCQlpbmZvLT5zdG9wdGltZXIuZnVuY3Rpb24gPSBjdGNfdHR5X3N0b3BkZXY7Ci0JCWluZm8tPnN0b3B0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaW5mbzsKLQkJaW5mby0+bWNyID0gVUFSVF9NQ1JfUlRTOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1jdGNfdHR5X3JlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0JaW50IHR0eW51bTsKLQljaGFyICplcnI7Ci0JY2hhciAqcDsKLQotCURCRl9URVhUKHRyYWNlLCAyLCBfX0ZVTkNUSU9OX18pOwotCWlmICgoIWRldikgfHwgKCFkZXYtPm5hbWUpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjdGNfdHR5X3JlZ2lzdGVyX25ldGRldiBjYWxsZWQgIgotCQkgICAgICAgIndpdGggTlVMTCBkZXYgb3IgTlVMTCBkZXYtbmFtZVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqCUlmIHRoZSBuYW1lIGlzIGEgZm9ybWF0IHN0cmluZyB0aGUgY2FsbGVyIHdhbnRzIHVzIHRvCi0JICoJZG8gYSBuYW1lIGFsbG9jYXRpb24gOiBmb3JtYXQgc3RyaW5nIG11c3QgZW5kIHdpdGggJWQKLQkgKi8KLQlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkKLQl7Ci0JCWludCBlcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7CS8vIGRldi0+bmFtZSBpcyBjaGFuZ2VkIGJ5IHRoaXMKLQkJaWYgKGVyciA8IDApIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJkZXZfYWxsb2MgcmV0dXJuZWQgZXJyb3IgJWRcbiIsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQl9Ci0KLQlmb3IgKHAgPSBkZXYtPm5hbWU7IHAgJiYgKCgqcCA8ICcwJykgfHwgKCpwID4gJzknKSk7IHArKyk7Ci0JdHR5bnVtID0gc2ltcGxlX3N0cnRvdWwocCwgJmVyciwgMCk7Ci0JaWYgKCh0dHludW0gPCAwKSB8fCAodHR5bnVtID49IENUQ19UVFlfTUFYX0RFVklDRVMpIHx8Ci0JICAgIChlcnIgJiYgKmVycikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2IGNhbGxlZCAiCi0JCSAgICAgICAid2l0aCBudW1iZXIgaW4gbmFtZSAnJXMnXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChkcml2ZXItPmluZm9bdHR5bnVtXS5uZXRkZXYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2IGNhbGxlZCAiCi0JCSAgICAgICAiZm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBkZXZpY2UgJyVzJ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZHJpdmVyLT5pbmZvW3R0eW51bV0ubmV0ZGV2ID0gZGV2OwotCXJldHVybiAwOwotfQotCi12b2lkCi1jdGNfdHR5X3VucmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIHNhdmVmbGFnczsKLQljdGNfdHR5X2luZm8gKmluZm8gPSBOVUxMOwotCi0JREJGX1RFWFQodHJhY2UsIDIsIF9fRlVOQ1RJT05fXyk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgQ1RDX1RUWV9NQVhfREVWSUNFUzsgaSsrKQotCQlpZiAoZHJpdmVyLT5pbmZvW2ldLm5ldGRldiA9PSBkZXYpIHsKLQkJCWluZm8gPSAmZHJpdmVyLT5pbmZvW2ldOwotCQkJYnJlYWs7Ci0JCX0KLQlpZiAoaW5mbykgewotCQlpbmZvLT5uZXRkZXYgPSBOVUxMOwotCQlza2JfcXVldWVfcHVyZ2UoJmluZm8tPnR4X3F1ZXVlKTsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZpbmZvLT5yeF9xdWV1ZSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLX0KLQotdm9pZAotY3RjX3R0eV9jbGVhbnVwKHZvaWQpIHsKLQl1bnNpZ25lZCBsb25nIHNhdmVmbGFnczsKLQotCURCRl9URVhUKHRyYWNlLCAyLCBfX0ZVTkNUSU9OX18pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIHNhdmVmbGFncyk7Ci0JY3RjX3R0eV9zaHV0dGluZ2Rvd24gPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLT5jdGNfdHR5X2RldmljZSk7Ci0JcHV0X3R0eV9kcml2ZXIoZHJpdmVyLT5jdGNfdHR5X2RldmljZSk7Ci0Ja2ZyZWUoZHJpdmVyKTsKLQlkcml2ZXIgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuaCBiL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNTRkYzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDVEMgLyBFU0NPTiBuZXR3b3JrIGRyaXZlciwgdHR5IGludGVyZmFjZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogQXV0aG9yKHMpOiBGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9DVENUVFlfSF8KLSNkZWZpbmUgX0NUQ1RUWV9IXwotCi0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0KLWV4dGVybiBpbnQgIGN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgY3RjX3R0eV91bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLWV4dGVybiB2b2lkIGN0Y190dHlfbmV0aWZfcngoc3RydWN0IHNrX2J1ZmYgKik7Ci1leHRlcm4gaW50ICBjdGNfdHR5X2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBjdGNfdHR5X2NsZWFudXAodm9pZCk7Ci1leHRlcm4gdm9pZCBjdGNfdHR5X3NldGNhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IGIwNDZmZmEuLmRlOWJhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC00Mjk3LDYgKzQyOTcsNyBAQAogaW50IGF0YV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NVU1BFTkRFRCkgeworCQlhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKTsKIAkJYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAyMDAwMDApOwogCQlhcC0+ZmxhZ3MgJj0gfkFUQV9GTEFHX1NVU1BFTkRFRDsKIAkJYXRhX3NldF9tb2RlKGFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCmluZGV4IDliOGJjYTEuLmYxNmY5MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwpAQCAtMjAzNSw2ICsyMDM1LDcgQEAKIHN0YXRpYyB2b2lkIG12X2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogRW50ZXJpbmcgbXZfZW5nX3RpbWVvdXRcbiIsYXAtPmlkKTsKIAlEUFJJTlRLKCJBbGwgcmVncyBAIHN0YXJ0IG9mIGVuZ190aW1lb3V0XG4iKTsKQEAgLTIwNDYsOCArMjA0NywxMCBAQAogCSAgICAgICBhcC0+aG9zdF9zZXQtPm1taW9fYmFzZSwgYXAsIHFjLCBxYy0+c2NzaWNtZCwKIAkgICAgICAgJnFjLT5zY3NpY21kLT5jbW5kKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKIAltdl9lcnJfaW50cihhcCwgMCk7CiAJbXZfc3RvcF9hbmRfcmVzZXQoYXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCiAJV0FSTl9PTighKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSk7CiAJaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggYWNkZTg4Ni4uZmFmZTdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMTg1LDYgKzE4NSw5IEBACiAJLyogU2VsZWN0IFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAqLwogCXB4YTI3eF9vaGNpX3NlbGVjdF9wbW0oaW5mLT5wb3J0X21vZGUpOwogCisJaWYgKGluZi0+cG93ZXJfYnVkZ2V0KQorCQloY2QtPnBvd2VyX2J1ZGdldCA9IGluZi0+cG93ZXJfYnVkZ2V0OworCiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKIAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnCmluZGV4IGVmZDZjYTcuLjA1NDA1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnCkBAIC0zMDEsMjEgKzMwMSw0IEBACiAJICBzb21lIGNhc2VzIENEQyBNRExNKSBwcm90b2NvbCwgbm90ICJnX2V0aGVyIi4KIAogCi1jb25maWcgVVNCX1pEMTIwMQotCXRyaXN0YXRlICJVU0IgWkQxMjAxIGJhc2VkIFdpcmVsZXNzIGRldmljZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1JBRElPCi0Jc2VsZWN0IEZXX0xPQURFUgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSB3aXJlbGVzcyBMQU4gYWRhcHRlcnMgYmFzZWQgb24gdGhlIFp5REFTCi0JICBaRDEyMDEgY2hpcC4KLQotCSAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSwKLQkgIHR5cGljYWxseSBvbiB3bGFuMC4KLQkgIAotCSAgVGhlIHpkMTIwMSBkZXZpY2UgcmVxdWlyZXMgZXh0ZXJuYWwgZmlybXdhcmUgdG8gYmUgbG9hZGVkLgotCSAgVGhpcyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL2xpbnV4LWxjMTAwMDIwLnNvdXJjZWZvcmdlLm5ldC8KLQkgIAotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgemQxMjAxLgotCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9uZXQvTWFrZWZpbGUKaW5kZXggYTIxZTZlYS4uMTYwZjE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL25ldC9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNiBAQAogb2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCkJKz0gY2RjX3N1YnNldC5vCiBvYmotJChDT05GSUdfVVNCX05FVF9aQVVSVVMpCSs9IHphdXJ1cy5vCiBvYmotJChDT05GSUdfVVNCX1VTQk5FVCkJKz0gdXNibmV0Lm8KLW9iai0kKENPTkZJR19VU0JfWkQxMjAxKQkrPSB6ZDEyMDEubwogCiBpZmVxICgkKENPTkZJR19VU0JfREVCVUcpLHkpCiBFWFRSQV9DRkxBR1MgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDQ1ODcwODcuLjU2NDE0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTc0Myw3ICs3NDMsNyBAQAogCiBjb25maWcgRkJfSU5URUwKIAl0cmlzdGF0ZSAiSW50ZWwgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEZCICYmIEVYUEVSSU1FTlRBTCAmJiBQQ0kgJiYgWDg2XzMyCisJZGVwZW5kcyBvbiBGQiAmJiBFWFBFUklNRU5UQUwgJiYgUENJICYmIFg4NgogCXNlbGVjdCBBR1AKIAlzZWxlY3QgQUdQX0lOVEVMCiAJc2VsZWN0IEZCX01PREVfSEVMUEVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaCBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmgKaW5kZXggZGEyOWQwMC4uNDY5YjA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYi5oCkBAIC04LDkgKzgsOSBAQAogCiAKIC8qKiogVmVyc2lvbi9uYW1lICoqKi8KLSNkZWZpbmUgSU5URUxGQl9WRVJTSU9OCQkJIjAuOS4yIgorI2RlZmluZSBJTlRFTEZCX1ZFUlNJT04JCQkiMC45LjQiCiAjZGVmaW5lIElOVEVMRkJfTU9EVUxFX05BTUUJCSJpbnRlbGZiIgotI2RlZmluZSBTVVBQT1JURURfQ0hJUFNFVFMJCSI4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNIgorI2RlZmluZSBTVVBQT1JURURfQ0hJUFNFVFMJCSI4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLzk0NUcvOTQ1R00iCiAKIAogLyoqKiBEZWJ1Zy9mZWF0dXJlIGRlZmluZXMgKioqLwpAQCAtNTIsMTEgKzUyLDE0IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODY1RwkweDI1NzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHCTB4MjU4MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNCTB4MjU5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUcJMHgyNzcyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R00JMHgyN0EyCiAKIC8qIFNpemUgb2YgTU1JTyByZWdpb24gKi8KICNkZWZpbmUgSU5URUxfUkVHX1NJWkUJCQkweDgwMDAwCiAKICNkZWZpbmUgU1RSSURFX0FMSUdOTUVOVAkJMTYKKyNkZWZpbmUgU1RSSURFX0FMSUdOTUVOVF9JOVhYCQk2NAogCiAjZGVmaW5lIFBBTEVUVEVfOF9FTlRSSUVTCQkyNTYKIApAQCAtMTI1LDcgKzEyOCw5IEBACiAJSU5URUxfODU1R01FLAogCUlOVEVMXzg2NUcsCiAJSU5URUxfOTE1RywKLQlJTlRFTF85MTVHTQorCUlOVEVMXzkxNUdNLAorCUlOVEVMXzk0NUcsCisJSU5URUxfOTQ1R00sCiB9OwogCiBzdHJ1Y3QgaW50ZWxmYl9od3N0YXRlIHsKQEAgLTI3Nyw4ICsyODIsMTMgQEAKIAogCS8qIGRyaXZlciByZWdpc3RlcmVkICovCiAJaW50IHJlZ2lzdGVyZWQ7CisJCisJLyogaW5kZXggaW50byBwbGxzICovCisJaW50IHBsbF9pbmRleDsKIH07CiAKKyNkZWZpbmUgSVNfSTlYWChkaW5mbykgKCgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzkxNUcpfHwoZGluZm8tPmNoaXBzZXQgPT0gSU5URUxfOTE1R00pfHwoKGRpbmZvKS0+Y2hpcHNldCA9PSBJTlRFTF85NDVHKXx8KGRpbmZvLT5jaGlwc2V0PT1JTlRFTF85NDVHTSkpCisKIC8qKiogZnVuY3Rpb24gcHJvdG90eXBlcyAqKiovCiAKIGV4dGVybiBpbnQgaW50ZWxmYl92YXJfdG9fZGVwdGgoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKaW5kZXggOTk1YjQ3Yy4uMDc2ZmE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCkBAIC0xLDExICsxLDEyIEBACiAvKgogICogaW50ZWxmYgogICoKLSAqIExpbnV4IGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgSW50ZWwoUikgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTQotICogaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwcy4KKyAqIExpbnV4IGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgSW50ZWwoUikgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTS8KKyAqIDk0NUcvOTQ1R00gaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwcy4KICAqCiAgKiBDb3B5cmlnaHQgqSAyMDAyLCAyMDAzIERhdmlkIERhd2VzIDxkYXdlc0B4ZnJlZTg2Lm9yZz4KICAqICAgICAgICAgICAgICAgICAgIDIwMDQgU3lsdmFpbiBNZXllcgorICogICAgICAgICAgICAgICAgICAgMjAwNiBEYXZpZCBBaXJsaWUKICAqCiAgKiBUaGlzIGRyaXZlciBjb25zaXN0cyBvZiB0d28gcGFydHMuICBUaGUgZmlyc3QgcGFydCAoaW50ZWxmYmRydi5jKSBwcm92aWRlcwogICogdGhlIGJhc2ljIGZiZGV2IGludGVyZmFjZXMsIGlzIGRlcml2ZWQgaW4gcGFydCBmcm9tIHRoZSByYWRlb25mYiBhbmQKQEAgLTEzMSw2ICsxMzIsNyBAQAogCiAjaW5jbHVkZSAiaW50ZWxmYi5oIgogI2luY2x1ZGUgImludGVsZmJody5oIgorI2luY2x1ZGUgIi4uL2VkaWQuaCIKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGdldF9pbml0aWFsX21vZGUoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8pOwogc3RhdGljIHZvaWQgdXBkYXRlX2RpbmZvKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLApAQCAtMTgyLDYgKzE4NCw4IEBACiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzg2NUcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBJTlRFTEZCX0NMQVNTX01BU0ssIElOVEVMXzg2NUcgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTE1RywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTE1RyB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTE1R00gfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTQ1RyB9LAorCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTQ1R00gfSwKIAl7IDAsIH0KIH07CiAKQEAgLTI2MSw3ICsyNjUsNyBAQAogCiAjaWZuZGVmIE1PRFVMRQogI2RlZmluZSBPUFRfRVFVQUwob3B0LCBuYW1lKSAoIXN0cm5jbXAob3B0LCBuYW1lLCBzdHJsZW4obmFtZSkpKQotI2RlZmluZSBPUFRfSU5UVkFMKG9wdCwgbmFtZSkgc2ltcGxlX3N0cnRvdWwob3B0ICsgc3RybGVuKG5hbWUpLCBOVUxMLCAwKQorI2RlZmluZSBPUFRfSU5UVkFMKG9wdCwgbmFtZSkgc2ltcGxlX3N0cnRvdWwob3B0ICsgc3RybGVuKG5hbWUpICsgMSwgTlVMTCwgMCkKICNkZWZpbmUgT1BUX1NUUlZBTChvcHQsIG5hbWUpIChvcHQgKyBzdHJsZW4obmFtZSkpCiAKIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgKgpAQCAtNTQ2LDExICs1NTAsMTEgQEAKIAogCS8qIFNldCBiYXNlIGFkZHJlc3Nlcy4gKi8KIAlpZiAoKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTE1RykgfHwKLQkJCShlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNKSkgeworCSAgICAoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTSkgfHwKKwkgICAgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RykgIHx8CisJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNKSkgewogCQlhcGVydHVyZV9iYXIgPSAyOwogCQltbWlvX2JhciA9IDA7Ci0JCS8qIERpc2FibGUgSFcgY3Vyc29yIG9uIDkxNUcvTSAobm90IGltcGxlbWVudGVkIHlldCkgKi8KLQkJaHdjdXJzb3IgPSAwOwogCX0KIAlkaW5mby0+YXBlcnR1cmUucGh5c2ljYWwgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYXBlcnR1cmVfYmFyKTsKIAlkaW5mby0+YXBlcnR1cmUuc2l6ZSAgICAgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGFwZXJ0dXJlX2Jhcik7CkBAIC01ODQsOCArNTg4LDcgQEAKIAkvKiBHZXQgdGhlIGNoaXBzZXQgaW5mby4gKi8KIAlkaW5mby0+cGNpX2NoaXBzZXQgPSBwZGV2LT5kZXZpY2U7CiAKLQlpZiAoaW50ZWxmYmh3X2dldF9jaGlwc2V0KHBkZXYsICZkaW5mby0+bmFtZSwgJmRpbmZvLT5jaGlwc2V0LAotCQkJCSAgJmRpbmZvLT5tb2JpbGUpKSB7CisJaWYgKGludGVsZmJod19nZXRfY2hpcHNldChwZGV2LCBkaW5mbykpIHsKIAkJY2xlYW51cChkaW5mbyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTEwMjksMTcgKzEwMzIsNDQgQEAKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8pKTsKIAkJbXNyYyA9IDU7CiAJfSBlbHNlIHsKLQkJaWYgKG1vZGUpIHsKLQkJCW1zcmMgPSBmYl9maW5kX21vZGUodmFyLCBkaW5mby0+aW5mbywgbW9kZSwKLQkJCQkJICAgIHZlc2FfbW9kZXMsIFZFU0FfTU9ERURCX1NJWkUsCi0JCQkJCSAgICBOVUxMLCAwKTsKLQkJCWlmIChtc3JjKQotCQkJCW1zcmMgfD0gODsKKwkJY29uc3QgdTggKmVkaWRfcyA9IGZiX2Zpcm13YXJlX2VkaWQoJmRpbmZvLT5wZGV2LT5kZXYpOworCQl1OCAqZWRpZF9kID0gTlVMTDsKKworCQlpZiAoZWRpZF9zKSB7CisJCQllZGlkX2QgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKGVkaWRfZCkgeworCQkJCW1lbWNweShlZGlkX2QsIGVkaWRfcywgRURJRF9MRU5HVEgpOworCQkJCWZiX2VkaWRfdG9fbW9uc3BlY3MoZWRpZF9kLAorCQkJCQkJICAgICZkaW5mby0+aW5mby0+bW9uc3BlY3MpOworCQkJCWtmcmVlKGVkaWRfZCk7CisJCQl9CiAJCX0KKworCQlpZiAobW9kZSkgeworCQkJcHJpbnRrKCJpbnRlbGZiOiBMb29raW5nIGZvciBtb2RlIGluIHByaXZhdGUgIgorCQkJICAgICAgICJkYXRhYmFzZVxuIik7CisJCQltc3JjID0gZmJfZmluZF9tb2RlKHZhciwgZGluZm8tPmluZm8sIG1vZGUsCisJCQkJCSAgICBkaW5mby0+aW5mby0+bW9uc3BlY3MubW9kZWRiLAorCQkJCQkgICAgZGluZm8tPmluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4sCisJCQkJCSAgICBOVUxMLCAwKTsKKworCQkJaWYgKG1zcmMgJiYgbXNyYyA+IDEpIHsKKwkJCQlwcmludGsoImludGVsZmI6IE5vIG1vZGUgaW4gcHJpdmF0ZSBkYXRhYmFzZSwgIgorCQkJCSAgICAgICAiaW50ZWxmYjogbG9va2luZyBmb3IgbW9kZSBpbiBnbG9iYWwgIgorCQkJCSAgICAgICAiZGF0YWJhc2UgIik7CisJCQkJbXNyYyA9IGZiX2ZpbmRfbW9kZSh2YXIsIGRpbmZvLT5pbmZvLCBtb2RlLAorCQkJCQkJICAgIE5VTEwsIDAsIE5VTEwsIDApOworCisJCQkJaWYgKG1zcmMpCisJCQkJCW1zcmMgfD0gODsKKwkJCX0KKworCQl9CisKIAkJaWYgKCFtc3JjKSB7CiAJCQltc3JjID0gZmJfZmluZF9tb2RlKHZhciwgZGluZm8tPmluZm8sIFBSRUZFUlJFRF9NT0RFLAotCQkJCQkgICAgdmVzYV9tb2RlcywgVkVTQV9NT0RFREJfU0laRSwKLQkJCQkJICAgIE5VTEwsIDApOworCQkJCQkgICAgTlVMTCwgMCwgTlVMTCwgMCk7CiAJCX0KIAl9CiAKQEAgLTExMzksNyArMTE2OSwxMCBAQAogCX0KIAogCS8qIE1ha2Ugc3VyZSB0aGUgbGluZSBsZW5ndGggaXMgYSBhbGlnbmVkIGNvcnJlY3RseS4gKi8KLQlkaW5mby0+cGl0Y2ggPSBST1VORF9VUF9UTyhkaW5mby0+cGl0Y2gsIFNUUklERV9BTElHTk1FTlQpOworCWlmIChJU19JOVhYKGRpbmZvKSkKKwkJZGluZm8tPnBpdGNoID0gUk9VTkRfVVBfVE8oZGluZm8tPnBpdGNoLCBTVFJJREVfQUxJR05NRU5UX0k5WFgpOworCWVsc2UKKwkJZGluZm8tPnBpdGNoID0gUk9VTkRfVVBfVE8oZGluZm8tPnBpdGNoLCBTVFJJREVfQUxJR05NRU5UKTsKIAogCWlmIChGSVhFRF9NT0RFKGRpbmZvKSkKIAkJZGluZm8tPnBpdGNoID0gZGluZm8tPmluaXRpYWxfcGl0Y2g7CkBAIC0xMTYyLDE2ICsxMTk1LDMzIEBACiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHY7CiAJc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm87CiAJc3RhdGljIGludCBmaXJzdCA9IDE7CisJaW50IGk7CisJLyogR29vZCBwaXRjaGVzIHRvIGFsbG93IHRpbGluZy4gIERvbid0IGNhcmUgYWJvdXQgcGl0Y2hlcyA8IDEwMjQuICovCisJc3RhdGljIGNvbnN0IGludCBwaXRjaGVzW10gPSB7CisJCTEyOCAqIDgsCisJCTEyOCAqIDE2LAorCQkxMjggKiAzMiwKKwkJMTI4ICogNjQsCisJCTAKKwl9OwogCiAJREJHX01TRygiaW50ZWxmYl9jaGVja192YXI6IGFjY2VsX2ZsYWdzIGlzICVkXG4iLCB2YXItPmFjY2VsX2ZsYWdzKTsKIAogCWRpbmZvID0gR0VUX0RJTkZPKGluZm8pOwogCisJLyogdXBkYXRlIHRoZSBwaXRjaCAqLwogCWlmIChpbnRlbGZiaHdfdmFsaWRhdGVfbW9kZShkaW5mbywgdmFyKSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXYgPSAqdmFyOwogCisJZm9yIChpID0gMDsgcGl0Y2hlc1tpXSAhPSAwOyBpKyspIHsKKwkJaWYgKHBpdGNoZXNbaV0gPj0gdi54cmVzX3ZpcnR1YWwpIHsKKwkJCXYueHJlc192aXJ0dWFsID0gcGl0Y2hlc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJLyogQ2hlY2sgZm9yIGEgc3VwcG9ydGVkIGJwcC4gKi8KIAlpZiAodi5iaXRzX3Blcl9waXhlbCA8PSA4KSB7CiAJCXYuYml0c19wZXJfcGl4ZWwgPSA4OwpAQCAtMTQ2Nyw3ICsxNTE3LDcgQEAKIGludGVsZmJfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpCiB7CiAgICAgICAgIHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvID0gR0VUX0RJTkZPKGluZm8pOwotCisJdTMyIHBoeXNpY2FsOwogI2lmIFZFUkJPU0UgPiAwCiAJREJHX01TRygiaW50ZWxmYl9jdXJzb3JcbiIpOwogI2VuZGlmCkBAIC0xNDc4LDcgKzE1MjgsMTAgQEAKIAlpbnRlbGZiaHdfY3Vyc29yX2hpZGUoZGluZm8pOwogCiAJLyogSWYgWEZyZWUga2lsbGVkIHRoZSBjdXJzb3IgLSByZXN0b3JlIGl0ICovCi0JaWYgKElOUkVHKENVUlNPUl9BX0JBU0VBRERSKSAhPSBkaW5mby0+Y3Vyc29yLm9mZnNldCA8PCAxMikgeworCXBoeXNpY2FsID0gKGRpbmZvLT5tb2JpbGUgfHwgSVNfSTlYWChkaW5mbykpID8gZGluZm8tPmN1cnNvci5waHlzaWNhbCA6CisJCSAgIChkaW5mby0+Y3Vyc29yLm9mZnNldCA8PCAxMik7CisKKwlpZiAoSU5SRUcoQ1VSU09SX0FfQkFTRUFERFIpICE9IHBoeXNpY2FsKSB7CiAJCXUzMiBmZywgYmc7CiAKIAkJREJHX01TRygidGhlIGN1cnNvciB3YXMga2lsbGVkIC0gcmVzdG9yZSBpdCAhIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKaW5kZXggNjI0YzRiYy4uNDI2Yjc0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKQEAgLTQwLDY4ICs0MCwxMTAgQEAKICNpbmNsdWRlICJpbnRlbGZiLmgiCiAjaW5jbHVkZSAiaW50ZWxmYmh3LmgiCiAKK3N0cnVjdCBwbGxfbWluX21heCB7CisJaW50IG1pbl9tLCBtYXhfbSwgbWluX20xLCBtYXhfbTE7CisJaW50IG1pbl9tMiwgbWF4X20yLCBtaW5fbiwgbWF4X247CisJaW50IG1pbl9wLCBtYXhfcCwgbWluX3AxLCBtYXhfcDE7CisJaW50IG1pbl92Y28sIG1heF92Y28sIHBfdHJhbnNpdGlvbl9jbGssIHJlZl9jbGs7CisJaW50IHBfaW5jX2xvLCBwX2luY19oaTsKK307CisKKyNkZWZpbmUgUExMU19JOHh4IDAKKyNkZWZpbmUgUExMU19JOXh4IDEKKyNkZWZpbmUgUExMU19NQVggMgorCitzdGF0aWMgc3RydWN0IHBsbF9taW5fbWF4IHBsbHNbUExMU19NQVhdID0geworCXsgMTA4LCAxNDAsIDE4LCAyNiwKKwkgIDYsIDE2LCAzLCAxNiwKKwkgIDQsIDEyOCwgMCwgMzEsCisJICA5MzAwMDAsIDE0MDAwMDAsIDE2NTAwMCwgNDgwMDAsCisJICA0LCAyIH0sIC8vSTh4eAorCisJeyA3NSwgMTIwLCAxMCwgMjAsCisJICA1LCA5LCA0LCA3LAorCSAgNSwgODAsIDEsIDgsCisJICAxNDAwMDAwLCAyODAwMDAwLCAyMDAwMDAsIDk2MDAwLAorCSAgMTAsIDUgfSAgLy9JOXh4Cit9OworCiBpbnQKLWludGVsZmJod19nZXRfY2hpcHNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3QgY2hhciAqKm5hbWUsIGludCAqY2hpcHNldCwKLQkJICAgICAgaW50ICptb2JpbGUpCitpbnRlbGZiaHdfZ2V0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKQogewogCXUzMiB0bXA7Ci0KLQlpZiAoIXBkZXYgfHwgIW5hbWUgfHwgIWNoaXBzZXQgfHwgIW1vYmlsZSkKKwlpZiAoIXBkZXYgfHwgIWRpbmZvKQogCQlyZXR1cm4gMTsKIAogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgzME06Ci0JCSpuYW1lID0gIkludGVsKFIpIDgzME0iOwotCQkqY2hpcHNldCA9IElOVEVMXzgzME07Ci0JCSptb2JpbGUgPSAxOworCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA4MzBNIjsKKwkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF84MzBNOworCQlkaW5mby0+bW9iaWxlID0gMTsKKwkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTh4eDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg0NUc6Ci0JCSpuYW1lID0gIkludGVsKFIpIDg0NUciOwotCQkqY2hpcHNldCA9IElOVEVMXzg0NUc7Ci0JCSptb2JpbGUgPSAwOworCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA4NDVHIjsKKwkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF84NDVHOworCQlkaW5mby0+bW9iaWxlID0gMDsKKwkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTh4eDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg1WEdNOgogCQl0bXAgPSAwOwotCQkqbW9iaWxlID0gMTsKKwkJZGluZm8tPm1vYmlsZSA9IDE7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k4eHg7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBJTlRFTF84NVhfQ0FQSUQsICZ0bXApOwogCQlzd2l0Y2ggKCh0bXAgPj4gSU5URUxfODVYX1ZBUklBTlRfU0hJRlQpICYKIAkJCUlOVEVMXzg1WF9WQVJJQU5UX01BU0spIHsKIAkJY2FzZSBJTlRFTF9WQVJfODU1R01FOgotCQkJKm5hbWUgPSAiSW50ZWwoUikgODU1R01FIjsKLQkJCSpjaGlwc2V0ID0gSU5URUxfODU1R01FOworCQkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgODU1R01FIjsKKwkJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfODU1R01FOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSU5URUxfVkFSXzg1NUdNOgotCQkJKm5hbWUgPSAiSW50ZWwoUikgODU1R00iOwotCQkJKmNoaXBzZXQgPSBJTlRFTF84NTVHTTsKKwkJCWRpbmZvLT5uYW1lID0gIkludGVsKFIpIDg1NUdNIjsKKwkJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfODU1R007CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF9WQVJfODUyR01FOgotCQkJKm5hbWUgPSAiSW50ZWwoUikgODUyR01FIjsKLQkJCSpjaGlwc2V0ID0gSU5URUxfODUyR01FOworCQkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgODUyR01FIjsKKwkJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfODUyR01FOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSU5URUxfVkFSXzg1MkdNOgotCQkJKm5hbWUgPSAiSW50ZWwoUikgODUyR00iOwotCQkJKmNoaXBzZXQgPSBJTlRFTF84NTJHTTsKKwkJCWRpbmZvLT5uYW1lID0gIkludGVsKFIpIDg1MkdNIjsKKwkJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfODUyR007CiAJCQlyZXR1cm4gMDsKIAkJZGVmYXVsdDoKLQkJCSpuYW1lID0gIkludGVsKFIpIDg1MkdNLzg1NUdNIjsKLQkJCSpjaGlwc2V0ID0gSU5URUxfODVYR007CisJCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA4NTJHTS84NTVHTSI7CisJCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzg1WEdNOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg2NUc6Ci0JCSpuYW1lID0gIkludGVsKFIpIDg2NUciOwotCQkqY2hpcHNldCA9IElOVEVMXzg2NUc7Ci0JCSptb2JpbGUgPSAwOworCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA4NjVHIjsKKwkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF84NjVHOworCQlkaW5mby0+bW9iaWxlID0gMDsKKwkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTh4eDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUc6Ci0JCSpuYW1lID0gIkludGVsKFIpIDkxNUciOwotCQkqY2hpcHNldCA9IElOVEVMXzkxNUc7Ci0JCSptb2JpbGUgPSAwOworCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA5MTVHIjsKKwkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF85MTVHOworCQlkaW5mby0+bW9iaWxlID0gMDsKKwkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTl4eDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNOgotCQkqbmFtZSA9ICJJbnRlbChSKSA5MTVHTSI7Ci0JCSpjaGlwc2V0ID0gSU5URUxfOTE1R007Ci0JCSptb2JpbGUgPSAxOworCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA5MTVHTSI7CisJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfOTE1R007CisJCWRpbmZvLT5tb2JpbGUgPSAxOworCQlkaW5mby0+cGxsX2luZGV4ID0gUExMU19JOXh4OworCQlyZXR1cm4gMDsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RzoKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTQ1RyI7CisJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfOTQ1RzsKKwkJZGluZm8tPm1vYmlsZSA9IDA7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k5eHg7CisJCXJldHVybiAwOworCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTToKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTQ1R00iOworCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzk0NUdNOworCQlkaW5mby0+bW9iaWxlID0gMTsKKwkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTl4eDsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDE7CkBAIC0xMTQsNiArMTU2LDcgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKIAl1MTYgdG1wOworCWludCBzdG9sZW5fb3ZlcmhlYWQ7CiAKIAlpZiAoIXBkZXYgfHwgIWFwZXJ0dXJlX3NpemUgfHwgIXN0b2xlbl9zaXplKQogCQlyZXR1cm4gMTsKQEAgLTEyOCwyMSArMTcxLDQxIEBACiAJdG1wID0gMDsKIAlwY2lfcmVhZF9jb25maWdfd29yZChicmlkZ2VfZGV2LCBJTlRFTF9HTUNIX0NUUkwsICZ0bXApOwogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgzME06Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg0NUc6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUc6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTToKKwkJLyogOTE1IGFuZCA5NDUgY2hpcHNldHMgc3VwcG9ydCBhIDI1Nk1CIGFwZXJ0dXJlLgorCQkgICBBcGVydHVyZSBzaXplIGlzIGRldGVybWluZWQgYnkgaW5zcGVjdGVkIHRoZQorCQkgICBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFwZXJ0dXJlLiAqLworCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpICYgMHgwODAwMDAwMCkKKwkJCSphcGVydHVyZV9zaXplID0gTUIoMTI4KTsKKwkJZWxzZQorCQkJKmFwZXJ0dXJlX3NpemUgPSBNQigyNTYpOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlpZiAoKHRtcCAmIElOVEVMX0dNQ0hfTUVNX01BU0spID09IElOVEVMX0dNQ0hfTUVNXzY0TSkKIAkJCSphcGVydHVyZV9zaXplID0gTUIoNjQpOwogCQllbHNlCiAJCQkqYXBlcnR1cmVfc2l6ZSA9IE1CKDEyOCk7CisJCWJyZWFrOworCX0KKworCS8qIFN0b2xlbiBtZW1vcnkgc2l6ZSBpcyByZWR1Y2VkIGJ5IHRoZSBHVFQgYW5kIHRoZSBwb3B1cC4KKwkgICBHVFQgaXMgMUsgcGVyIE1CIG9mIGFwZXJ0dXJlIHNpemUsIGFuZCBwb3B1cCBpcyA0Sy4gKi8KKwlzdG9sZW5fb3ZlcmhlYWQgPSAoKmFwZXJ0dXJlX3NpemUgLyBNQigxKSkgKyA0OworCXN3aXRjaChwZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODMwTToKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODQ1RzoKIAkJc3dpdGNoICh0bXAgJiBJTlRFTF84MzBfR01DSF9HTVNfTUFTSykgewogCQljYXNlIElOVEVMXzgzMF9HTUNIX0dNU19TVE9MRU5fNTEyOgotCQkJKnN0b2xlbl9zaXplID0gS0IoNTEyKSAtIEtCKDEzMik7CisJCQkqc3RvbGVuX3NpemUgPSBLQig1MTIpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzgzMF9HTUNIX0dNU19TVE9MRU5fMTAyNDoKLQkJCSpzdG9sZW5fc2l6ZSA9IE1CKDEpIC0gS0IoMTMyKTsKKwkJCSpzdG9sZW5fc2l6ZSA9IE1CKDEpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzgzMF9HTUNIX0dNU19TVE9MRU5fODE5MjoKLQkJCSpzdG9sZW5fc2l6ZSA9IE1CKDgpIC0gS0IoMTMyKTsKKwkJCSpzdG9sZW5fc2l6ZSA9IE1CKDgpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzgzMF9HTUNIX0dNU19MT0NBTDoKIAkJCUVSUl9NU0coIm9ubHkgbG9jYWwgbWVtb3J5IGZvdW5kXG4iKTsKQEAgLTE1NywyOCArMjIwLDI3IEBACiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJKmFwZXJ0dXJlX3NpemUgPSBNQigxMjgpOwogCQlzd2l0Y2ggKHRtcCAmIElOVEVMXzg1NV9HTUNIX0dNU19NQVNLKSB7CiAJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xTToKLQkJCSpzdG9sZW5fc2l6ZSA9IE1CKDEpIC0gS0IoMTMyKTsKKwkJCSpzdG9sZW5fc2l6ZSA9IE1CKDEpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fNE06Ci0JCQkqc3RvbGVuX3NpemUgPSBNQig0KSAtIEtCKDEzMik7CisJCQkqc3RvbGVuX3NpemUgPSBNQig0KSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzhNOgotCQkJKnN0b2xlbl9zaXplID0gTUIoOCkgLSBLQigxMzIpOworCQkJKnN0b2xlbl9zaXplID0gTUIoOCkgLSBLQihzdG9sZW5fb3ZlcmhlYWQpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xNk06Ci0JCQkqc3RvbGVuX3NpemUgPSBNQigxNikgLSBLQigxMzIpOworCQkJKnN0b2xlbl9zaXplID0gTUIoMTYpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMzJNOgotCQkJKnN0b2xlbl9zaXplID0gTUIoMzIpIC0gS0IoMTMyKTsKKwkJCSpzdG9sZW5fc2l6ZSA9IE1CKDMyKSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF85MTVHX0dNQ0hfR01TX1NUT0xFTl80OE06Ci0JCQkqc3RvbGVuX3NpemUgPSBNQig0OCkgLSBLQigxMzIpOworCQkJKnN0b2xlbl9zaXplID0gTUIoNDgpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzY0TToKLQkJCSpzdG9sZW5fc2l6ZSA9IE1CKDY0KSAtIEtCKDEzMik7CisJCQkqc3RvbGVuX3NpemUgPSBNQig2NCkgLSBLQihzdG9sZW5fb3ZlcmhlYWQpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX0RJU0FCTEVEOgogCQkJRVJSX01TRygidmlkZW8gbWVtb3J5IGlzIGRpc2FibGVkXG4iKTsKQEAgLTUyOSwxMiArNTkxLDYzIEBACiB9CiAKIAorc3RhdGljIGludCBjYWxjX3ZjbG9jazMoaW50IGluZGV4LCBpbnQgbSwgaW50IG4sIGludCBwKQoreworCWlmIChwID09IDAgfHwgbiA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcGxsc1tpbmRleF0ucmVmX2NsayAqIG0gLyBuIC8gcDsKK30KKworc3RhdGljIGludCBjYWxjX3ZjbG9jayhpbnQgaW5kZXgsIGludCBtMSwgaW50IG0yLCBpbnQgbiwgaW50IHAxLCBpbnQgcDIsIGludCBsdmRzKQoreworCXN0cnVjdCBwbGxfbWluX21heCAqcGxsID0gJnBsbHNbaW5kZXhdOworCXUzMiBtLCB2Y28sIHA7CisKKwltID0gKDUgKiAobTEgKyAyKSkgKyAobTIgKyAyKTsKKwluICs9IDI7CisJdmNvID0gcGxsLT5yZWZfY2xrICogbSAvIG47CisKKwlpZiAoaW5kZXggPT0gUExMU19JOHh4KSB7CisJCXAgPSAoKHAxICsgMikgKiAoMSA8PCAocDIgKyAxKSkpOworCX0gZWxzZSB7CisJCXAgPSAoKHAxKSAqIChwMiA/IDUgOiAxMCkpOworCX0KKwlyZXR1cm4gdmNvIC8gcDsKK30KKworc3RhdGljIHZvaWQKK2ludGVsZmJod19nZXRfcDFwMihzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbywgaW50IGRwbGwsIGludCAqb19wMSwgaW50ICpvX3AyKQoreworCWludCBwMSwgcDI7CisKKwlpZiAoSVNfSTlYWChkaW5mbykpIHsKKwkJaWYgKGRwbGwgJiBEUExMX1AxX0ZPUkNFX0RJVjIpCisJCQlwMSA9IDE7CisJCWVsc2UKKwkJCXAxID0gKGRwbGwgPj4gRFBMTF9QMV9TSElGVCkgJiAweGZmOworCQkKKwkJcDEgPSBmZnMocDEpOworCisJCXAyID0gKGRwbGwgPj4gRFBMTF9JOVhYX1AyX1NISUZUKSAmIERQTExfUDJfTUFTSzsKKwl9IGVsc2UgeworCQlpZiAoZHBsbCAmIERQTExfUDFfRk9SQ0VfRElWMikKKwkJCXAxID0gMDsKKwkJZWxzZQorCQkJcDEgPSAoZHBsbCA+PiBEUExMX1AxX1NISUZUKSAmIERQTExfUDFfTUFTSzsKKwkJcDIgPSAoZHBsbCA+PiBEUExMX1AyX1NISUZUKSAmIERQTExfUDJfTUFTSzsKKwl9CisKKwkqb19wMSA9IHAxOworCSpvX3AyID0gcDI7Cit9CisKKwogdm9pZAogaW50ZWxmYmh3X3ByaW50X2h3X3N0YXRlKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLCBzdHJ1Y3QgaW50ZWxmYl9od3N0YXRlICpodykKIHsKICNpZiBSRUdEVU1QCiAJaW50IGksIG0xLCBtMiwgbiwgcDEsIHAyOwotCisJaW50IGluZGV4ID0gZGluZm8tPnBsbF9pbmRleDsKIAlEQkdfTVNHKCJpbnRlbGZiaHdfcHJpbnRfaHdfc3RhdGVcbiIpOwogCiAJaWYgKCFodyB8fCAhZGluZm8pCkBAIC01NDcsMjYgKzY2MCwyMiBAQAogCW4gPSAoaHctPnZnYTBfZGl2aXNvciA+PiBGUF9OX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0xID0gKGh3LT52Z2EwX2Rpdmlzb3IgPj4gRlBfTTFfRElWSVNPUl9TSElGVCkgJiBGUF9ESVZJU09SX01BU0s7CiAJbTIgPSAoaHctPnZnYTBfZGl2aXNvciA+PiBGUF9NMl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKLQlpZiAoaHctPnZnYV9wZCAmIFZHQVBEXzBfUDFfRk9SQ0VfRElWMikKLQkJcDEgPSAwOwotCWVsc2UKLQkJcDEgPSAoaHctPnZnYV9wZCA+PiBWR0FQRF8wX1AxX1NISUZUKSAmIERQTExfUDFfTUFTSzsKLQlwMiA9IChody0+dmdhX3BkID4+IFZHQVBEXzBfUDJfU0hJRlQpICYgRFBMTF9QMl9NQVNLOworCisJaW50ZWxmYmh3X2dldF9wMXAyKGRpbmZvLCBody0+dmdhX3BkLCAmcDEsICZwMik7CisKIAlwcmludGsoIglWR0EwOiAobTEsIG0yLCBuLCBwMSwgcDIpID0gKCVkLCAlZCwgJWQsICVkLCAlZClcbiIsCi0JCW0xLCBtMiwgbiwgcDEsIHAyKTsKLQlwcmludGsoIglWR0EwOiBjbG9jayBpcyAlZFxuIiwgQ0FMQ19WQ0xPQ0sobTEsIG0yLCBuLCBwMSwgcDIpKTsKKwkgICAgICAgbTEsIG0yLCBuLCBwMSwgcDIpOworCXByaW50aygiCVZHQTA6IGNsb2NrIGlzICVkXG4iLAorCSAgICAgICBjYWxjX3ZjbG9jayhpbmRleCwgbTEsIG0yLCBuLCBwMSwgcDIsIDApKTsKIAogCW4gPSAoaHctPnZnYTFfZGl2aXNvciA+PiBGUF9OX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0xID0gKGh3LT52Z2ExX2Rpdmlzb3IgPj4gRlBfTTFfRElWSVNPUl9TSElGVCkgJiBGUF9ESVZJU09SX01BU0s7CiAJbTIgPSAoaHctPnZnYTFfZGl2aXNvciA+PiBGUF9NMl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKLQlpZiAoaHctPnZnYV9wZCAmIFZHQVBEXzFfUDFfRk9SQ0VfRElWMikKLQkJcDEgPSAwOwotCWVsc2UKLQkJcDEgPSAoaHctPnZnYV9wZCA+PiBWR0FQRF8xX1AxX1NISUZUKSAmIERQTExfUDFfTUFTSzsKLQlwMiA9IChody0+dmdhX3BkID4+IFZHQVBEXzFfUDJfU0hJRlQpICYgRFBMTF9QMl9NQVNLOworCisJaW50ZWxmYmh3X2dldF9wMXAyKGRpbmZvLCBody0+dmdhX3BkLCAmcDEsICZwMik7CiAJcHJpbnRrKCIJVkdBMTogKG0xLCBtMiwgbiwgcDEsIHAyKSA9ICglZCwgJWQsICVkLCAlZCwgJWQpXG4iLAotCQltMSwgbTIsIG4sIHAxLCBwMik7Ci0JcHJpbnRrKCIJVkdBMTogY2xvY2sgaXMgJWRcbiIsIENBTENfVkNMT0NLKG0xLCBtMiwgbiwgcDEsIHAyKSk7CisJICAgICAgIG0xLCBtMiwgbiwgcDEsIHAyKTsKKwlwcmludGsoIglWR0ExOiBjbG9jayBpcyAlZFxuIiwgY2FsY192Y2xvY2soaW5kZXgsIG0xLCBtMiwgbiwgcDEsIHAyLCAwKSk7CiAKIAlwcmludGsoIglEUExMX0E6CQkJMHglMDh4XG4iLCBody0+ZHBsbF9hKTsKIAlwcmludGsoIglEUExMX0I6CQkJMHglMDh4XG4iLCBody0+ZHBsbF9iKTsKQEAgLTU3OCwzNCArNjg3LDMwIEBACiAJbiA9IChody0+ZnBhMCA+PiBGUF9OX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0xID0gKGh3LT5mcGEwID4+IEZQX00xX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0yID0gKGh3LT5mcGEwID4+IEZQX00yX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwotCWlmIChody0+ZHBsbF9hICYgRFBMTF9QMV9GT1JDRV9ESVYyKQotCQlwMSA9IDA7Ci0JZWxzZQotCQlwMSA9IChody0+ZHBsbF9hID4+IERQTExfUDFfU0hJRlQpICYgRFBMTF9QMV9NQVNLOwotCXAyID0gKGh3LT5kcGxsX2EgPj4gRFBMTF9QMl9TSElGVCkgJiBEUExMX1AyX01BU0s7CisKKwlpbnRlbGZiaHdfZ2V0X3AxcDIoZGluZm8sIGh3LT5kcGxsX2EsICZwMSwgJnAyKTsKKwogCXByaW50aygiCVBMTEEwOiAobTEsIG0yLCBuLCBwMSwgcDIpID0gKCVkLCAlZCwgJWQsICVkLCAlZClcbiIsCi0JCW0xLCBtMiwgbiwgcDEsIHAyKTsKLQlwcmludGsoIglQTExBMDogY2xvY2sgaXMgJWRcbiIsIENBTENfVkNMT0NLKG0xLCBtMiwgbiwgcDEsIHAyKSk7CisJICAgICAgIG0xLCBtMiwgbiwgcDEsIHAyKTsKKwlwcmludGsoIglQTExBMDogY2xvY2sgaXMgJWRcbiIsIGNhbGNfdmNsb2NrKGluZGV4LCBtMSwgbTIsIG4sIHAxLCBwMiwgMCkpOwogCiAJbiA9IChody0+ZnBhMSA+PiBGUF9OX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0xID0gKGh3LT5mcGExID4+IEZQX00xX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0yID0gKGh3LT5mcGExID4+IEZQX00yX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwotCWlmIChody0+ZHBsbF9hICYgRFBMTF9QMV9GT1JDRV9ESVYyKQotCQlwMSA9IDA7Ci0JZWxzZQotCQlwMSA9IChody0+ZHBsbF9hID4+IERQTExfUDFfU0hJRlQpICYgRFBMTF9QMV9NQVNLOwotCXAyID0gKGh3LT5kcGxsX2EgPj4gRFBMTF9QMl9TSElGVCkgJiBEUExMX1AyX01BU0s7CisKKwlpbnRlbGZiaHdfZ2V0X3AxcDIoZGluZm8sIGh3LT5kcGxsX2EsICZwMSwgJnAyKTsKKwogCXByaW50aygiCVBMTEExOiAobTEsIG0yLCBuLCBwMSwgcDIpID0gKCVkLCAlZCwgJWQsICVkLCAlZClcbiIsCi0JCW0xLCBtMiwgbiwgcDEsIHAyKTsKLQlwcmludGsoIglQTExBMTogY2xvY2sgaXMgJWRcbiIsIENBTENfVkNMT0NLKG0xLCBtMiwgbiwgcDEsIHAyKSk7CisJICAgICAgIG0xLCBtMiwgbiwgcDEsIHAyKTsKKwlwcmludGsoIglQTExBMTogY2xvY2sgaXMgJWRcbiIsIGNhbGNfdmNsb2NrKGluZGV4LCBtMSwgbTIsIG4sIHAxLCBwMiwgMCkpOwogCiAjaWYgMAogCXByaW50aygiCVBBTEVUVEVfQTpcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBQQUxFVFRFXzhfRU5UUklFUykKLQkJcHJpbnRrKCIJJTNkOgkweCUwOHhcbiIsIGksIGh3LT5wYWxldHRlX2FbaV07CisJCXByaW50aygiCSUzZDoJMHglMDh4XG4iLCBpLCBody0+cGFsZXR0ZV9hW2ldKTsKIAlwcmludGsoIglQQUxFVFRFX0I6XG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgUEFMRVRURV84X0VOVFJJRVMpCi0JCXByaW50aygiCSUzZDoJMHglMDh4XG4iLCBpLCBody0+cGFsZXR0ZV9iW2ldOworCQlwcmludGsoIgklM2Q6CTB4JTA4eFxuIiwgaSwgaHctPnBhbGV0dGVfYltpXSk7CiAjZW5kaWYKIAogCXByaW50aygiCUhUT1RBTF9BOgkJMHglMDh4XG4iLCBody0+aHRvdGFsX2EpOwpAQCAtNjgwLDExICs3ODUsMTEgQEAKIAl9CiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQlwcmludGsoIglTV0YzJWQJCQkweCUwOHhcbiIsIGksCi0JCQlody0+c3dmM3hbaV0pOworCQkgICAgICAgaHctPnN3ZjN4W2ldKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJcHJpbnRrKCIJRkVOQ0UlZAkJCTB4JTA4eFxuIiwgaSwKLQkJCWh3LT5mZW5jZVtpXSk7CisJCSAgICAgICBody0+ZmVuY2VbaV0pOwogCiAJcHJpbnRrKCIJSU5TVFBNCQkJMHglMDh4XG4iLCBody0+aW5zdHBtKTsKIAlwcmludGsoIglNRU1fTU9ERQkJMHglMDh4XG4iLCBody0+bWVtX21vZGUpOwpAQCAtNjk1LDQzICs4MDAsNTggQEAKICNlbmRpZgogfQogCisKKwogLyogU3BsaXQgdGhlIE0gcGFyYW1ldGVyIGludG8gTTEgYW5kIE0yLiAqLwogc3RhdGljIGludAotc3BsaXRtKHVuc2lnbmVkIGludCBtLCB1bnNpZ25lZCBpbnQgKnJldG0xLCB1bnNpZ25lZCBpbnQgKnJldG0yKQorc3BsaXRtKGludCBpbmRleCwgdW5zaWduZWQgaW50IG0sIHVuc2lnbmVkIGludCAqcmV0bTEsIHVuc2lnbmVkIGludCAqcmV0bTIpCiB7CiAJaW50IG0xLCBtMjsKKwlpbnQgdGVzdG07CisJc3RydWN0IHBsbF9taW5fbWF4ICpwbGwgPSAmcGxsc1tpbmRleF07CiAKLQltMSA9IChtIC0gMiAtIChNSU5fTTIgKyBNQVhfTTIpIC8gMikgLyA1IC0gMjsKLQlpZiAobTEgPCBNSU5fTTEpCi0JCW0xID0gTUlOX00xOwotCWlmIChtMSA+IE1BWF9NMSkKLQkJbTEgPSBNQVhfTTE7Ci0JbTIgPSBtIC0gNSAqIChtMSArIDIpIC0gMjsKLQlpZiAobTIgPCBNSU5fTTIgfHwgbTIgPiBNQVhfTTIgfHwgbTIgPj0gbTEpIHsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlIHsKLQkJKnJldG0xID0gKHVuc2lnbmVkIGludCltMTsKLQkJKnJldG0yID0gKHVuc2lnbmVkIGludCltMjsKLQkJcmV0dXJuIDA7CisJLyogbm8gcG9pbnQgb3B0aW1pc2luZyB0b28gbXVjaCAtIGJydXRlIGZvcmNlIG0gKi8KKwlmb3IgKG0xID0gcGxsLT5taW5fbTE7IG0xIDwgcGxsLT5tYXhfbTEgKyAxOyBtMSsrKSB7CisJCWZvciAobTIgPSBwbGwtPm1pbl9tMjsgbTIgPCBwbGwtPm1heF9tMiArIDE7IG0yKyspIHsKKwkJCXRlc3RtID0gKDUgKiAobTEgKyAyKSkgKyAobTIgKyAyKTsKKwkJCWlmICh0ZXN0bSA9PSBtKSB7CisJCQkJKnJldG0xID0gKHVuc2lnbmVkIGludCltMTsKKwkJCQkqcmV0bTIgPSAodW5zaWduZWQgaW50KW0yOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CiAJfQorCXJldHVybiAxOwogfQogCiAvKiBTcGxpdCB0aGUgUCBwYXJhbWV0ZXIgaW50byBQMSBhbmQgUDIuICovCiBzdGF0aWMgaW50Ci1zcGxpdHAodW5zaWduZWQgaW50IHAsIHVuc2lnbmVkIGludCAqcmV0cDEsIHVuc2lnbmVkIGludCAqcmV0cDIpCitzcGxpdHAoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcCwgdW5zaWduZWQgaW50ICpyZXRwMSwgdW5zaWduZWQgaW50ICpyZXRwMikKIHsKIAlpbnQgcDEsIHAyOworCXN0cnVjdCBwbGxfbWluX21heCAqcGxsID0gJnBsbHNbaW5kZXhdOworCisJaWYgKGluZGV4ID09IFBMTFNfSTl4eCkgeworCQlwMiA9IChwICUgMTApID8gMSA6IDA7CisKKwkJcDEgPSBwIC8gKHAyID8gNSA6IDEwKTsKKworCQkqcmV0cDEgPSAodW5zaWduZWQgaW50KXAxOworCQkqcmV0cDIgPSAodW5zaWduZWQgaW50KXAyOworCQlyZXR1cm4gMDsKKwl9CiAKIAlpZiAocCAlIDQgPT0gMCkKIAkJcDIgPSAxOwogCWVsc2UKIAkJcDIgPSAwOwogCXAxID0gKHAgLyAoMSA8PCAocDIgKyAxKSkpIC0gMjsKLQlpZiAocCAlIDQgPT0gMCAmJiBwMSA8IE1JTl9QMSkgeworCWlmIChwICUgNCA9PSAwICYmIHAxIDwgcGxsLT5taW5fcDEpIHsKIAkJcDIgPSAwOwogCQlwMSA9IChwIC8gKDEgPDwgKHAyICsgMSkpKSAtIDI7CiAJfQotCWlmIChwMSAgPCBNSU5fUDEgfHwgcDEgPiBNQVhfUDEgfHwgKHAxICsgMikgKiAoMSA8PCAocDIgKyAxKSkgIT0gcCkgeworCWlmIChwMSA8IHBsbC0+bWluX3AxIHx8IHAxID4gcGxsLT5tYXhfcDEgfHwKKwkgICAgKHAxICsgMikgKiAoMSA8PCAocDIgKyAxKSkgIT0gcCkgewogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQkqcmV0cDEgPSAodW5zaWduZWQgaW50KXAxOwpAQCAtNzQxLDE0ICs4NjEsMTUgQEAKIH0KIAogc3RhdGljIGludAotY2FsY19wbGxfcGFyYW1zKGludCBjbG9jaywgdTMyICpyZXRtMSwgdTMyICpyZXRtMiwgdTMyICpyZXRuLCB1MzIgKnJldHAxLAorY2FsY19wbGxfcGFyYW1zKGludCBpbmRleCwgaW50IGNsb2NrLCB1MzIgKnJldG0xLCB1MzIgKnJldG0yLCB1MzIgKnJldG4sIHUzMiAqcmV0cDEsCiAJCXUzMiAqcmV0cDIsIHUzMiAqcmV0Y2xvY2spCiB7Ci0JdTMyIG0xLCBtMiwgbiwgcDEsIHAyLCBuMTsKLQl1MzIgZl92Y28sIHAsIHBfYmVzdCA9IDAsIG0sIGZfb3V0OworCXUzMiBtMSwgbTIsIG4sIHAxLCBwMiwgbjEsIHRlc3RtOworCXUzMiBmX3ZjbywgcCwgcF9iZXN0ID0gMCwgbSwgZl9vdXQgPSAwOwogCXUzMiBlcnJfbWF4LCBlcnJfdGFyZ2V0LCBlcnJfYmVzdCA9IDEwMDAwMDAwOwogCXUzMiBuX2Jlc3QgPSAwLCBtX2Jlc3QgPSAwLCBmX2Jlc3QsIGZfZXJyOwotCXUzMiBwX21pbiwgcF9tYXgsIHBfaW5jLCBkaXZfbWluLCBkaXZfbWF4OworCXUzMiBwX21pbiwgcF9tYXgsIHBfaW5jLCBkaXZfbWF4OworCXN0cnVjdCBwbGxfbWluX21heCAqcGxsID0gJnBsbHNbaW5kZXhdOwogCiAJLyogQWNjZXB0IDAuNSUgZGlmZmVyZW5jZSwgYnV0IGFpbSBmb3IgMC4xJSAqLwogCWVycl9tYXggPSA1ICogY2xvY2sgLyAxMDAwOwpAQCAtNzU2LDU4ICs4NzcsNTYgQEAKIAogCURCR19NU0coIkNsb2NrIGlzICVkXG4iLCBjbG9jayk7CiAKLQlkaXZfbWF4ID0gTUFYX1ZDT19GUkVRIC8gY2xvY2s7Ci0JZGl2X21pbiA9IFJPVU5EX1VQX1RPKE1JTl9WQ09fRlJFUSwgY2xvY2spIC8gY2xvY2s7CisJZGl2X21heCA9IHBsbC0+bWF4X3ZjbyAvIGNsb2NrOwogCi0JaWYgKGNsb2NrIDw9IFBfVFJBTlNJVElPTl9DTE9DSykKLQkJcF9pbmMgPSA0OwotCWVsc2UKLQkJcF9pbmMgPSAyOwotCXBfbWluID0gUk9VTkRfVVBfVE8oZGl2X21pbiwgcF9pbmMpOworCXBfaW5jID0gKGNsb2NrIDw9IHBsbC0+cF90cmFuc2l0aW9uX2NsaykgPyBwbGwtPnBfaW5jX2xvIDogcGxsLT5wX2luY19oaTsKKwlwX21pbiA9IHBfaW5jOwogCXBfbWF4ID0gUk9VTkRfRE9XTl9UTyhkaXZfbWF4LCBwX2luYyk7Ci0JaWYgKHBfbWluIDwgTUlOX1ApCi0JCXBfbWluID0gNDsKLQlpZiAocF9tYXggPiBNQVhfUCkKLQkJcF9tYXggPSAxMjg7CisJaWYgKHBfbWluIDwgcGxsLT5taW5fcCkKKwkJcF9taW4gPSBwbGwtPm1pbl9wOworCWlmIChwX21heCA+IHBsbC0+bWF4X3ApCisJCXBfbWF4ID0gcGxsLT5tYXhfcDsKIAogCURCR19NU0coInAgcmFuZ2UgaXMgJWQtJWQgKCVkKVxuIiwgcF9taW4sIHBfbWF4LCBwX2luYyk7CiAKIAlwID0gcF9taW47CiAJZG8gewotCQlpZiAoc3BsaXRwKHAsICZwMSwgJnAyKSkgeworCQlpZiAoc3BsaXRwKGluZGV4LCBwLCAmcDEsICZwMikpIHsKIAkJCVdSTl9NU0coImNhbm5vdCBzcGxpdCBwID0gJWRcbiIsIHApOwogCQkJcCArPSBwX2luYzsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCW4gPSBNSU5fTjsKKwkJbiA9IHBsbC0+bWluX247CiAJCWZfdmNvID0gY2xvY2sgKiBwOwogCiAJCWRvIHsKLQkJCW0gPSBST1VORF9VUF9UTyhmX3ZjbyAqIG4sIFBMTF9SRUZDTEspIC8gUExMX1JFRkNMSzsKLQkJCWlmIChtIDwgTUlOX00pCi0JCQkJbSA9IE1JTl9NOwotCQkJaWYgKG0gPiBNQVhfTSkKLQkJCQltID0gTUFYX007Ci0JCQlmX291dCA9IENBTENfVkNMT0NLMyhtLCBuLCBwKTsKLQkJCWlmIChzcGxpdG0obSwgJm0xLCAmbTIpKSB7Ci0JCQkJV1JOX01TRygiY2Fubm90IHNwbGl0IG0gPSAlZFxuIiwgbSk7Ci0JCQkJbisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGNsb2NrID4gZl9vdXQpCi0JCQkJZl9lcnIgPSBjbG9jayAtIGZfb3V0OwotCQkJZWxzZQotCQkJCWZfZXJyID0gZl9vdXQgLSBjbG9jazsKKwkJCW0gPSBST1VORF9VUF9UTyhmX3ZjbyAqIG4sIHBsbC0+cmVmX2NsaykgLyBwbGwtPnJlZl9jbGs7CisJCQlpZiAobSA8IHBsbC0+bWluX20pCisJCQkJbSA9IHBsbC0+bWluX20gKyAxOworCQkJaWYgKG0gPiBwbGwtPm1heF9tKQorCQkJCW0gPSBwbGwtPm1heF9tIC0gMTsKKwkJCWZvciAodGVzdG0gPSBtIC0gMTsgdGVzdG0gPD0gbTsgdGVzdG0rKykgeworCQkJCWZfb3V0ID0gY2FsY192Y2xvY2szKGluZGV4LCBtLCBuLCBwKTsKKwkJCQlpZiAoc3BsaXRtKGluZGV4LCB0ZXN0bSwgJm0xLCAmbTIpKSB7CisJCQkJCVdSTl9NU0coImNhbm5vdCBzcGxpdCBtID0gJWRcbiIsIG0pOworCQkJCQluKys7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoY2xvY2sgPiBmX291dCkKKwkJCQkJZl9lcnIgPSBjbG9jayAtIGZfb3V0OworCQkJCWVsc2UvKiBzbGlnaHRseSBiaWFzIHRoZSBlcnJvciBmb3IgYmlnZ2VyIGNsb2NrcyAqLworCQkJCQlmX2VyciA9IGZfb3V0IC0gY2xvY2sgKyAxOwogCi0JCQlpZiAoZl9lcnIgPCBlcnJfYmVzdCkgewotCQkJCW1fYmVzdCA9IG07Ci0JCQkJbl9iZXN0ID0gbjsKLQkJCQlwX2Jlc3QgPSBwOwotCQkJCWZfYmVzdCA9IGZfb3V0OwotCQkJCWVycl9iZXN0ID0gZl9lcnI7CisJCQkJaWYgKGZfZXJyIDwgZXJyX2Jlc3QpIHsKKwkJCQkJbV9iZXN0ID0gdGVzdG07CisJCQkJCW5fYmVzdCA9IG47CisJCQkJCXBfYmVzdCA9IHA7CisJCQkJCWZfYmVzdCA9IGZfb3V0OworCQkJCQllcnJfYmVzdCA9IGZfZXJyOworCQkJCX0KIAkJCX0KIAkJCW4rKzsKLQkJfSB3aGlsZSAoKG4gPD0gTUFYX04pICYmIChmX291dCA+PSBjbG9jaykpOworCQl9IHdoaWxlICgobiA8PSBwbGwtPm1heF9uKSAmJiAoZl9vdXQgPj0gY2xvY2spKTsKIAkJcCArPSBwX2luYzsKIAl9IHdoaWxlICgocCA8PSBwX21heCkpOwogCkBAIC04MTgsMjEgKzkzNywyMiBAQAogCW0gPSBtX2Jlc3Q7CiAJbiA9IG5fYmVzdDsKIAlwID0gcF9iZXN0OwotCXNwbGl0bShtLCAmbTEsICZtMik7Ci0Jc3BsaXRwKHAsICZwMSwgJnAyKTsKKwlzcGxpdG0oaW5kZXgsIG0sICZtMSwgJm0yKTsKKwlzcGxpdHAoaW5kZXgsIHAsICZwMSwgJnAyKTsKIAluMSA9IG4gLSAyOwogCiAJREJHX01TRygibSwgbiwgcDogJWQgKCVkLCVkKSwgJWQgKCVkKSwgJWQgKCVkLCVkKSwgIgogCQkiZjogJWQgKCVkKSwgVkNPOiAlZFxuIiwKIAkJbSwgbTEsIG0yLCBuLCBuMSwgcCwgcDEsIHAyLAotCQlDQUxDX1ZDTE9DSzMobSwgbiwgcCksIENBTENfVkNMT0NLKG0xLCBtMiwgbjEsIHAxLCBwMiksCi0JCUNBTENfVkNMT0NLMyhtLCBuLCBwKSAqIHApOworCQljYWxjX3ZjbG9jazMoaW5kZXgsIG0sIG4sIHApLAorCQljYWxjX3ZjbG9jayhpbmRleCwgbTEsIG0yLCBuMSwgcDEsIHAyLCAwKSwKKwkJY2FsY192Y2xvY2szKGluZGV4LCBtLCBuLCBwKSAqIHApOwogCSpyZXRtMSA9IG0xOwogCSpyZXRtMiA9IG0yOwogCSpyZXRuID0gbjE7CiAJKnJldHAxID0gcDE7CiAJKnJldHAyID0gcDI7Ci0JKnJldGNsb2NrID0gQ0FMQ19WQ0xPQ0sobTEsIG0yLCBuMSwgcDEsIHAyKTsKKwkqcmV0Y2xvY2sgPSBjYWxjX3ZjbG9jayhpbmRleCwgbTEsIG0yLCBuMSwgcDEsIHAyLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtODYwLDYgKzk4MCw3IEBACiAJdTMyIHZzeW5jX3N0YXJ0LCB2c3luY19lbmQsIHZibGFua19zdGFydCwgdmJsYW5rX2VuZCwgdnRvdGFsLCB2YWN0aXZlOwogCXUzMiB2c3luY19wb2wsIGhzeW5jX3BvbDsKIAl1MzIgKnZzLCAqdmIsICp2dCwgKmhzLCAqaGIsICpodCwgKnNzLCAqcGlwZV9jb25mOworCXUzMiBzdHJpZGVfYWxpZ25tZW50OwogCiAJREJHX01TRygiaW50ZWxmYmh3X21vZGVfdG9faHdcbiIpOwogCkBAIC05MjksNyArMTA1MCw4IEBACiAJLyogRGVzaXJlZCBjbG9jayBpbiBrSHogKi8KIAljbG9ja190YXJnZXQgPSAxMDAwMDAwMDAwIC8gdmFyLT5waXhjbG9jazsKIAotCWlmIChjYWxjX3BsbF9wYXJhbXMoY2xvY2tfdGFyZ2V0LCAmbTEsICZtMiwgJm4sICZwMSwgJnAyLCAmY2xvY2spKSB7CisJaWYgKGNhbGNfcGxsX3BhcmFtcyhkaW5mby0+cGxsX2luZGV4LCBjbG9ja190YXJnZXQsICZtMSwgJm0yLAorCQkJICAgICZuLCAmcDEsICZwMiwgJmNsb2NrKSkgewogCQlXUk5fTVNHKCJjYWxjX3BsbF9wYXJhbXMgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtOTQ5LDcgKzEwNzEsMTQgQEAKIAkqZHBsbCAmPSB+RFBMTF9QMV9GT1JDRV9ESVYyOwogCSpkcGxsICY9IH4oKERQTExfUDJfTUFTSyA8PCBEUExMX1AyX1NISUZUKSB8CiAJCSAgIChEUExMX1AxX01BU0sgPDwgRFBMTF9QMV9TSElGVCkpOwotCSpkcGxsIHw9IChwMiA8PCBEUExMX1AyX1NISUZUKSB8IChwMSA8PCBEUExMX1AxX1NISUZUKTsKKworCWlmIChJU19JOVhYKGRpbmZvKSkgeworCQkqZHBsbCB8PSAocDIgPDwgRFBMTF9JOVhYX1AyX1NISUZUKTsKKwkJKmRwbGwgfD0gKDEgPDwgKHAxIC0gMSkpIDw8IERQTExfUDFfU0hJRlQ7CisJfSBlbHNlIHsKKwkJKmRwbGwgfD0gKHAyIDw8IERQTExfUDJfU0hJRlQpIHwgKHAxIDw8IERQTExfUDFfU0hJRlQpOworCX0KKwogCSpmcDAgPSAobiA8PCBGUF9OX0RJVklTT1JfU0hJRlQpIHwKIAkgICAgICAgKG0xIDw8IEZQX00xX0RJVklTT1JfU0hJRlQpIHwKIAkgICAgICAgKG0yIDw8IEZQX00yX0RJVklTT1JfU0hJRlQpOwpAQCAtMTA1NCw3ICsxMTgzLDcgQEAKIAkqc3MgPSAoaGFjdGl2ZSA8PCBTUkNfU0laRV9IT1JJWl9TSElGVCkgfAogCSAgICAgICh2YWN0aXZlIDw8IFNSQ19TSVpFX1ZFUlRfU0hJRlQpOwogCi0JaHctPmRpc3BfYV9zdHJpZGUgPSB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OworCWh3LT5kaXNwX2Ffc3RyaWRlID0gZGluZm8tPnBpdGNoOwogCURCR19NU0coInBpdGNoIGlzICVkXG4iLCBody0+ZGlzcF9hX3N0cmlkZSk7CiAKIAlody0+ZGlzcF9hX2Jhc2UgPSBody0+ZGlzcF9hX3N0cmlkZSAqIHZhci0+eW9mZnNldCArCkBAIC0xMDYzLDkgKzExOTIsMTEgQEAKIAlody0+ZGlzcF9hX2Jhc2UgKz0gZGluZm8tPmZiLm9mZnNldCA8PCAxMjsKIAogCS8qIENoZWNrIHN0cmlkZSBhbGlnbm1lbnQuICovCi0JaWYgKGh3LT5kaXNwX2Ffc3RyaWRlICUgU1RSSURFX0FMSUdOTUVOVCAhPSAwKSB7CisJc3RyaWRlX2FsaWdubWVudCA9IElTX0k5WFgoZGluZm8pID8gU1RSSURFX0FMSUdOTUVOVF9JOVhYIDoKKwkJCQkJICAgIFNUUklERV9BTElHTk1FTlQ7CisJaWYgKGh3LT5kaXNwX2Ffc3RyaWRlICUgc3RyaWRlX2FsaWdubWVudCAhPSAwKSB7CiAJCVdSTl9NU0coImRpc3BsYXkgc3RyaWRlICVkIGhhcyBiYWQgYWxpZ25tZW50ICVkXG4iLAotCQkJaHctPmRpc3BfYV9zdHJpZGUsIFNUUklERV9BTElHTk1FTlQpOworCQkJaHctPmRpc3BfYV9zdHJpZGUsIHN0cmlkZV9hbGlnbm1lbnQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTEwODcsNiArMTIxOCw3IEBACiAJdTMyIGhzeW5jX3JlZywgaHRvdGFsX3JlZywgaGJsYW5rX3JlZzsKIAl1MzIgdnN5bmNfcmVnLCB2dG90YWxfcmVnLCB2YmxhbmtfcmVnOwogCXUzMiBzcmNfc2l6ZV9yZWc7CisJdTMyIGNvdW50LCB0bXBfdmFsWzNdOwogCiAJLyogQXNzdW1lIHNpbmdsZSBwaXBlLCBkaXNwbGF5IHBsYW5lIEEsIGFuYWxvZyBDUlQuICovCiAKQEAgLTExNTUsNiArMTI4NywyNyBAQAogCQlzcmNfc2l6ZV9yZWcgPSBTUkNfU0laRV9BOwogCX0KIAorCS8qIHR1cm4gb2ZmIHBpcGUgKi8KKwl0bXAgPSBJTlJFRyhwaXBlX2NvbmZfcmVnKTsKKwl0bXAgJj0gflBJUEVDT05GX0VOQUJMRTsKKwlPVVRSRUcocGlwZV9jb25mX3JlZywgdG1wKTsKKworCWNvdW50ID0gMDsKKwlkbyB7CisJCXRtcF92YWxbY291bnQlM10gPSBJTlJFRygweDcwMDAwKTsKKwkJaWYgKCh0bXBfdmFsWzBdID09IHRtcF92YWxbMV0pICYmICh0bXBfdmFsWzFdPT10bXBfdmFsWzJdKSkKKwkJCWJyZWFrOworCQljb3VudCsrOworCQl1ZGVsYXkoMSk7CisJCWlmIChjb3VudCAlIDIwMCA9PSAwKSB7CisJCQl0bXAgPSBJTlJFRyhwaXBlX2NvbmZfcmVnKTsKKwkJCXRtcCAmPSB+UElQRUNPTkZfRU5BQkxFOworCQkJT1VUUkVHKHBpcGVfY29uZl9yZWcsIHRtcCk7CisJCX0KKwl9IHdoaWxlKGNvdW50IDwgMjAwMCk7CisKKwlPVVRSRUcoQURQQSwgSU5SRUcoQURQQSkgJiB+QURQQV9EQUNfRU5BQkxFKTsKKwogCS8qIERpc2FibGUgcGxhbmVzIEEgYW5kIEIuICovCiAJdG1wID0gSU5SRUcoRFNQQUNOVFIpOwogCXRtcCAmPSB+RElTUFBMQU5FX1BMQU5FX0VOQUJMRTsKQEAgLTExNjMsMTkgKzEzMTYsMjEgQEAKIAl0bXAgJj0gfkRJU1BQTEFORV9QTEFORV9FTkFCTEU7CiAJT1VUUkVHKERTUEJDTlRSLCB0bXApOwogCi0JLyogV2FpdCBmb3IgdmJsYW5rLiAgRm9yIG5vdywganVzdCB3YWl0IGZvciBhIDUwSHogY3ljbGUgKDIwbXMpKSAqLworCS8qIFdhaXQgZm9yIHZibGFuay4gRm9yIG5vdywganVzdCB3YWl0IGZvciBhIDUwSHogY3ljbGUgKDIwbXMpKSAqLwogCW1kZWxheSgyMCk7CiAKKwlPVVRSRUcoRFZPQiwgSU5SRUcoRFZPQikgJiB+UE9SVF9FTkFCTEUpOworCU9VVFJFRyhEVk9DLCBJTlJFRyhEVk9DKSAmIH5QT1JUX0VOQUJMRSk7CisJT1VUUkVHKEFEUEEsIElOUkVHKEFEUEEpICYgfkFEUEFfREFDX0VOQUJMRSk7CisKIAkvKiBEaXNhYmxlIFN5bmMgKi8KIAl0bXAgPSBJTlJFRyhBRFBBKTsKIAl0bXAgJj0gfkFEUEFfRFBNU19DT05UUk9MX01BU0s7CiAJdG1wIHw9IEFEUEFfRFBNU19EMzsKIAlPVVRSRUcoQURQQSwgdG1wKTsKIAotCS8qIHR1cm4gb2ZmIHBpcGUgKi8KLQl0bXAgPSBJTlJFRyhwaXBlX2NvbmZfcmVnKTsKLQl0bXAgJj0gflBJUEVDT05GX0VOQUJMRTsKLQlPVVRSRUcocGlwZV9jb25mX3JlZywgdG1wKTsKKwkvKiBkbyBzb21lIGZ1bmt5IG1hZ2ljIC0geHl6enkgKi8KKwlPVVRSRUcoMHg2MTIwNCwgMHhhYmNkMDAwMCk7CiAKIAkvKiB0dXJuIG9mZiBQTEwgKi8KIAl0bXAgPSBJTlJFRyhkcGxsX3JlZyk7CkBAIC0xMTgzLDEwICsxMzM4LDIzIEBACiAJT1VUUkVHKGRwbGxfcmVnLCB0bXApOwogCiAJLyogU2V0IFBMTCBwYXJhbWV0ZXJzICovCi0JT1VUUkVHKGRwbGxfcmVnLCAqZHBsbCAmIH5EUExMX1ZDT19FTkFCTEUpOwogCU9VVFJFRyhmcDBfcmVnLCAqZnAwKTsKIAlPVVRSRUcoZnAxX3JlZywgKmZwMSk7CiAKKwkvKiBFbmFibGUgUExMICovCisJT1VUUkVHKGRwbGxfcmVnLCAqZHBsbCk7CisKKwkvKiBTZXQgRFZPcyBCL0MgKi8KKwlPVVRSRUcoRFZPQiwgaHctPmR2b2IpOworCU9VVFJFRyhEVk9DLCBody0+ZHZvYyk7CisKKwkvKiB1bmRvIGZ1bmt5IG1hZ2ljICovCisJT1VUUkVHKDB4NjEyMDQsIDB4MDAwMDAwMDApOworCisJLyogU2V0IEFEUEEgKi8KKwlPVVRSRUcoQURQQSwgSU5SRUcoQURQQSkgfCBBRFBBX0RBQ19FTkFCTEUpOworCU9VVFJFRyhBRFBBLCAoaHctPmFkcGEgJiB+KEFEUEFfRFBNU19DT05UUk9MX01BU0spKSB8IEFEUEFfRFBNU19EMyk7CisKIAkvKiBTZXQgcGlwZSBwYXJhbWV0ZXJzICovCiAJT1VUUkVHKGhzeW5jX3JlZywgKmhzKTsKIAlPVVRSRUcoaGJsYW5rX3JlZywgKmhiKTsKQEAgLTExOTYsMTggKzEzNjQsNiBAQAogCU9VVFJFRyh2dG90YWxfcmVnLCAqdnQpOwogCU9VVFJFRyhzcmNfc2l6ZV9yZWcsICpzcyk7CiAKLQkvKiBTZXQgRFZPcyBCL0MgKi8KLQlPVVRSRUcoRFZPQiwgaHctPmR2b2IpOwotCU9VVFJFRyhEVk9DLCBody0+ZHZvYyk7Ci0KLQkvKiBTZXQgQURQQSAqLwotCU9VVFJFRyhBRFBBLCAoaHctPmFkcGEgJiB+KEFEUEFfRFBNU19DT05UUk9MX01BU0spKSB8IEFEUEFfRFBNU19EMyk7Ci0KLQkvKiBFbmFibGUgUExMICovCi0JdG1wID0gSU5SRUcoZHBsbF9yZWcpOwotCXRtcCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0JT1VUUkVHKGRwbGxfcmVnLCB0bXApOwotCiAJLyogRW5hYmxlIHBpcGUgKi8KIAlPVVRSRUcocGlwZV9jb25mX3JlZywgKnBpcGVfY29uZiB8IFBJUEVDT05GX0VOQUJMRSk7CiAKQEAgLTEyMzEsNyArMTM4Nyw3IEBACiAJCQlPVVRSRUcoRFNQQUNOVFIsCiAJCQkgICAgICAgaHctPmRpc3BfYV9jdHJsfERJU1BQTEFORV9QTEFORV9FTkFCTEUpOwogCQkJbWRlbGF5KDEpOwotICAgICAgICAgICAgICB9CisJCX0KIAl9CiAKIAlPVVRSRUcoRFNQQUNOVFIsIGh3LT5kaXNwX2FfY3RybCAmIH5ESVNQUExBTkVfUExBTkVfRU5BQkxFKTsKQEAgLTE2MTYsNyArMTc3Miw3IEBACiAJREJHX01TRygiaW50ZWxmYmh3X2N1cnNvcl9pbml0XG4iKTsKICNlbmRpZgogCi0JaWYgKGRpbmZvLT5tb2JpbGUpIHsKKwlpZiAoZGluZm8tPm1vYmlsZSB8fCBJU19JOVhYKGRpbmZvKSkgewogCQlpZiAoIWRpbmZvLT5jdXJzb3IucGh5c2ljYWwpCiAJCQlyZXR1cm47CiAJCXRtcCA9IElOUkVHKENVUlNPUl9BX0NPTlRST0wpOwpAQCAtMTY0OSw3ICsxODA1LDcgQEAKICNlbmRpZgogCiAJZGluZm8tPmN1cnNvcl9vbiA9IDA7Ci0JaWYgKGRpbmZvLT5tb2JpbGUpIHsKKwlpZiAoZGluZm8tPm1vYmlsZSB8fCBJU19JOVhYKGRpbmZvKSkgewogCQlpZiAoIWRpbmZvLT5jdXJzb3IucGh5c2ljYWwpCiAJCQlyZXR1cm47CiAJCXRtcCA9IElOUkVHKENVUlNPUl9BX0NPTlRST0wpOwpAQCAtMTY3OSw3ICsxODM1LDcgQEAKIAlpZiAoZGluZm8tPmN1cnNvcl9ibGFua2VkKQogCQlyZXR1cm47CiAKLQlpZiAoZGluZm8tPm1vYmlsZSkgeworCWlmIChkaW5mby0+bW9iaWxlIHx8IElTX0k5WFgoZGluZm8pKSB7CiAJCWlmICghZGluZm8tPmN1cnNvci5waHlzaWNhbCkKIAkJCXJldHVybjsKIAkJdG1wID0gSU5SRUcoQ1VSU09SX0FfQ09OVFJPTCk7CkBAIC0xNzA1LDE0ICsxODYxLDE4IEBACiAjZW5kaWYKIAogCS8qCi0JICogU2V0cyB0aGUgcG9zaXRpb24uICBUaGUgY29vcmRpbmF0ZXMgYXJlIGFzc3VtZWQgdG8gYWxyZWFkeQotCSAqIGhhdmUgYW55IG9mZnNldCBhZGp1c3RlZC4gIEFzc3VtZSB0aGF0IHRoZSBjdXJzb3IgaXMgbmV2ZXIKKwkgKiBTZXRzIHRoZSBwb3NpdGlvbi4gVGhlIGNvb3JkaW5hdGVzIGFyZSBhc3N1bWVkIHRvIGFscmVhZHkKKwkgKiBoYXZlIGFueSBvZmZzZXQgYWRqdXN0ZWQuIEFzc3VtZSB0aGF0IHRoZSBjdXJzb3IgaXMgbmV2ZXIKIAkgKiBjb21wbGV0ZWx5IG9mZi1zY3JlZW4sIGFuZCB0aGF0IHgsIHkgYXJlIGFsd2F5cyA+PSAwLgogCSAqLwogCiAJdG1wID0gKCh4ICYgQ1VSU09SX1BPU19NQVNLKSA8PCBDVVJTT1JfWF9TSElGVCkgfAogCSAgICAgICgoeSAmIENVUlNPUl9QT1NfTUFTSykgPDwgQ1VSU09SX1lfU0hJRlQpOwogCU9VVFJFRyhDVVJTT1JfQV9QT1NJVElPTiwgdG1wKTsKKworCWlmIChJU19JOVhYKGRpbmZvKSkgeworCQlPVVRSRUcoQ1VSU09SX0FfQkFTRUFERFIsIGRpbmZvLT5jdXJzb3IucGh5c2ljYWwpOworCX0KIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5oIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5oCmluZGV4IGJhMTkyMDEuLjEwYWNkYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogI2RlZmluZSBEUExMX1ZHQV9NT0RFX0RJU0FCTEUJCSgxIDw8IDI4KQogI2RlZmluZSBEUExMX1AyX01BU0sJCQkxCiAjZGVmaW5lIERQTExfUDJfU0hJRlQJCQkyMworI2RlZmluZSBEUExMX0k5WFhfUDJfU0hJRlQgICAgICAgICAgICAgIDI0CiAjZGVmaW5lIERQTExfUDFfRk9SQ0VfRElWMgkJKDEgPDwgMjEpCiAjZGVmaW5lIERQTExfUDFfTUFTSwkJCTB4MWYKICNkZWZpbmUgRFBMTF9QMV9TSElGVAkJCTE2CkBAIC0xNTUsMjkgKzE1Niw4IEBACiAvKiBQTEwgcGFyYW1ldGVycyAodGhlc2UgYXJlIGZvciA4NTJHTS84NTVHTS84NjVHLCBjaGVjayBlYXJsaWVyIGNoaXBzKS4gKi8KIC8qIENsb2NrIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2Yga0h6ICovCiAjZGVmaW5lIFBMTF9SRUZDTEsJCTQ4MDAwCi0jZGVmaW5lIE1JTl9WQ09fRlJFUQkJOTMwMDAwCi0jZGVmaW5lIE1BWF9WQ09fRlJFUQkJMTQwMDAwMAogI2RlZmluZSBNSU5fQ0xPQ0sJCTI1MDAwCiAjZGVmaW5lIE1BWF9DTE9DSwkJMzUwMDAwCi0jZGVmaW5lIFBfVFJBTlNJVElPTl9DTE9DSwkxNjUwMDAKLSNkZWZpbmUgTUlOX00JCQkxMDgKLSNkZWZpbmUgTUFYX00JCQkxNDAKLSNkZWZpbmUgTUlOX00xCQkJMTgKLSNkZWZpbmUgTUFYX00xCQkJMjYKLSNkZWZpbmUgTUlOX00yCQkJNgotI2RlZmluZSBNQVhfTTIJCQkxNgotI2RlZmluZSBNSU5fUAkJCTQKLSNkZWZpbmUgTUFYX1AJCQkxMjgKLSNkZWZpbmUgTUlOX1AxCQkJMAotI2RlZmluZSBNQVhfUDEJCQkzMQotI2RlZmluZSBNSU5fTgkJCTMKLSNkZWZpbmUgTUFYX04JCQkxNgotCi0jZGVmaW5lIENBTENfVkNMT0NLKG0xLCBtMiwgbiwgcDEsIHAyKSBcCi0gICAgICAgICgoUExMX1JFRkNMSyAqICg1ICogKChtMSkgKyAyKSArICgobTIpICsgMikpIC8gKChuKSArIDIpKSAvIFwKLSAgICAgICAgKCgocDEpICsgMikgKiAoMSA8PCAocDIgKyAxKSkpKQotCi0jZGVmaW5lIENBTENfVkNMT0NLMyhtLCBuLCBwKQkoKFBMTF9SRUZDTEsgKiAobSkgLyAobikpIC8gKHApKQogCiAvKiBUd28gcGlwZXMgKi8KICNkZWZpbmUgUElQRV9BCQkJMApAQCAtNTIyLDggKzUwMiw3IEBACiAKIAogLyogZnVuY3Rpb24gcHJvdG95cGVzICovCi1leHRlcm4gaW50IGludGVsZmJod19nZXRfY2hpcHNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3QgY2hhciAqKm5hbWUsCi0JCQkJIGludCAqY2hpcHNldCwgaW50ICptb2JpbGUpOworZXh0ZXJuIGludCBpbnRlbGZiaHdfZ2V0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKTsKIGV4dGVybiBpbnQgaW50ZWxmYmh3X2dldF9tZW1vcnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCAqYXBlcnR1cmVfc2l6ZSwKIAkJCQlpbnQgKnN0b2xlbl9zaXplKTsKIGV4dGVybiBpbnQgaW50ZWxmYmh3X2NoZWNrX25vbl9jcnQoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8pOwpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCAwOThjMTJiLi42YTBiOWFkIDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtNjU0LDkgKzY1NCwxMCBAQAogCQkJCSAgICAgd3JpdGVfdG9fdm0sIDAsICZwYWdlc1tjdXJfcGFnZV0sIE5VTEwpOwogCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCi0JCWlmIChyZXQgPCBsb2NhbF9ucl9wYWdlcykKKwkJaWYgKHJldCA8IGxvY2FsX25yX3BhZ2VzKSB7CisJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBvdXRfdW5tYXA7Ci0KKwkJfQogCiAJCW9mZnNldCA9IHVhZGRyICYgflBBR0VfTUFTSzsKIAkJZm9yIChqID0gY3VyX3BhZ2U7IGogPCBwYWdlX2xpbWl0OyBqKyspIHsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDZmOTljMGEuLmFiNjFhOGIgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtNzU1LDYgKzc1NSw3IEBACiAJaWYgKHJlcXVlc3QtPmZsX3R5cGUgPT0gRl9VTkxDSykKIAkJZ290byBvdXQ7CiAKKwllcnJvciA9IC1FTk9NRU07CiAJbmV3X2ZsID0gbG9ja3NfYWxsb2NfbG9jaygpOwogCWlmIChuZXdfZmwgPT0gTlVMTCkKIAkJZ290byBvdXQ7CkBAIC03ODEsNiArNzgyLDcgQEAKIAlsb2Nrc19jb3B5X2xvY2sobmV3X2ZsLCByZXF1ZXN0KTsKIAlsb2Nrc19pbnNlcnRfbG9jaygmaW5vZGUtPmlfZmxvY2ssIG5ld19mbCk7CiAJbmV3X2ZsID0gTlVMTDsKKwllcnJvciA9IDA7CiAKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL29oY2kuaAppbmRleCA3ZGE4OTU2Li5lODQ4YTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9vaGNpLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgUE1NX05QU19NT0RFICAgICAgICAgICAxCiAjZGVmaW5lIFBNTV9HTE9CQUxfTU9ERSAgICAgICAgMgogI2RlZmluZSBQTU1fUEVSUE9SVF9NT0RFICAgICAgIDMKKworCWludCBwb3dlcl9idWRnZXQ7CiB9OwogCiBleHRlcm4gdm9pZCBweGFfc2V0X29oY2lfaW5mbyhzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmggYi9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCmluZGV4IDEzODZhZjEuLjBjYzZjNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hZGRyc3BhY2UuaApAQCAtMTMzLDU3ICsxMzMsMjIgQEAKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX05FVkFEQSkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1RYNDlYWCkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX01JUFM2NCkKLSNkZWZpbmUgS1VTSVpFCQlfTExDT05TVF8oMHgwMDAwMDEwMDAwMDAwMDAwKQkvKiAyXl40MCAqLwotI2RlZmluZSBLVVNJWkVfNjQJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogMl5eNDAgKi8KLSNkZWZpbmUgSzBTSVpFCQlfTExDT05TVF8oMHgwMDAwMDAxMDAwMDAwMDAwKQkvKiAyXl4zNiAqLwotI2RlZmluZSBLMVNJWkUJCV9MTENPTlNUXygweDAwMDAwMDEwMDAwMDAwMDApCS8qIDJeXjM2ICovCi0jZGVmaW5lIEsyU0laRQkJX0xMQ09OU1RfKDB4MDAwMDAwZmY4MDAwMDAwMCkKLSNkZWZpbmUgS1NFR1NJWkUJX0xMQ09OU1RfKDB4MDAwMDAwZmY4MDAwMDAwMCkJLyogbWF4IHN5c3NlZ3N6ICovCiAjZGVmaW5lIFRPX1BIWVNfTUFTSwlfTExDT05TVF8oMHgwMDAwMDAwZmZmZmZmZmZmKQkvKiAyXl4zNiAtIDEgKi8KICNlbmRpZgogCiAjaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9SODAwMCkKIC8qIFdlIGtlZXAgS1VTSVpFIGNvbnNpc3RlbnQgd2l0aCBSNDAwMCBmb3Igbm93ICgyXl40MCkgaW5zdGVhZCBvZiAoMl5eNDgpICovCi0jZGVmaW5lIEtVU0laRQkJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogMl5eNDAgKi8KLSNkZWZpbmUgS1VTSVpFXzY0CV9MTENPTlNUXygweDAwMDAwMTAwMDAwMDAwMDApCS8qIDJeXjQwICovCi0jZGVmaW5lIEswU0laRQkJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogMl5eNDAgKi8KLSNkZWZpbmUgSzFTSVpFCQlfTExDT05TVF8oMHgwMDAwMDEwMDAwMDAwMDAwKQkvKiAyXl40MCAqLwotI2RlZmluZSBLMlNJWkUJCV9MTENPTlNUXygweDAwMDEwMDAwMDAwMDAwMDApCi0jZGVmaW5lIEtTRUdTSVpFCV9MTENPTlNUXygweDAwMDAwMTAwMDAwMDAwMDApCS8qIG1heCBzeXNzZWdzeiAqLwogI2RlZmluZSBUT19QSFlTX01BU0sJX0xMQ09OU1RfKDB4MDAwMDAwZmZmZmZmZmZmZikJLyogMl5eNDAgLSAxICovCiAjZW5kaWYKIAogI2lmIGRlZmluZWQgKENPTkZJR19DUFVfUjEwMDAwKQotI2RlZmluZSBLVVNJWkUJCV9MTENPTlNUXygweDAwMDAwMTAwMDAwMDAwMDApCS8qIDJeXjQwICovCi0jZGVmaW5lIEtVU0laRV82NAlfTExDT05TVF8oMHgwMDAwMDEwMDAwMDAwMDAwKQkvKiAyXl40MCAqLwotI2RlZmluZSBLMFNJWkUJCV9MTENPTlNUXygweDAwMDAwMTAwMDAwMDAwMDApCS8qIDJeXjQwICovCi0jZGVmaW5lIEsxU0laRQkJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogMl5eNDAgKi8KLSNkZWZpbmUgSzJTSVpFCQlfTExDT05TVF8oMHgwMDAwMGZmZjgwMDAwMDAwKQotI2RlZmluZSBLU0VHU0laRQlfTExDT05TVF8oMHgwMDAwMGZmZjgwMDAwMDAwKQkvKiBtYXggc3lzc2Vnc3ogKi8KICNkZWZpbmUgVE9fUEhZU19NQVNLCV9MTENPTlNUXygweDAwMDAwMGZmZmZmZmZmZmYpCS8qIDJeXjQwIC0gMSAqLwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0IxKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0IxQSkKLSNkZWZpbmUgS1VTSVpFCQlfTExDT05TVF8oMHgwMDAwMTAwMDAwMDAwMDAwKQkvKiAyXl40NCAqLwotI2RlZmluZSBLVVNJWkVfNjQJX0xMQ09OU1RfKDB4MDAwMDEwMDAwMDAwMDAwMCkJLyogMl5eNDQgKi8KLSNkZWZpbmUgSzBTSVpFCQlfTExDT05TVF8oMHgwMDAwMTAwMDAwMDAwMDAwKQkvKiAyXl40NCAqLwotI2RlZmluZSBLMVNJWkUJCV9MTENPTlNUXygweDAwMDAxMDAwMDAwMDAwMDApCS8qIDJeXjQ0ICovCi0jZGVmaW5lIEsyU0laRQkJX0xMQ09OU1RfKDB4MDAwMGZmZmY4MDAwMDAwMCkKLSNkZWZpbmUgS1NFR1NJWkUJX0xMQ09OU1RfKDB4MDAwMGZmZmY4MDAwMDAwMCkJLyogbWF4IHN5c3NlZ3N6ICovCiAjZGVmaW5lIFRPX1BIWVNfTUFTSwlfTExDT05TVF8oMHgwMDAwMGZmZmZmZmZmZmZmKQkvKiAyXl40NCAtIDEgKi8KICNlbmRpZgogCi0vKgotICogRnVydGhlciBuYW1lcyBmb3IgU0dJIHNvdXJjZSBjb21wYXRpYmlsaXR5LiAgVGhlc2UgYXJlIHN0b2xlbiBmcm9tCi0gKiBJUklYJ3MgPHN5cy9taXBzX2FkZHJzcGFjZS5oPi4KLSAqLwotI2RlZmluZSBLVUJBU0UJCV9MTENPTlNUXygwKQotI2RlZmluZSBLVVNJWkVfMzIJX0xMQ09OU1RfKDB4MDAwMDAwMDA4MDAwMDAwMCkJLyogS1VTSVpFCi0JCQkJCQkJICAgZm9yIGEgMzIgYml0IHByb2MgKi8KLSNkZWZpbmUgSzBCQVNFX0VYTF9XUglfTExDT05TVF8oMHhhODAwMDAwMDAwMDAwMDAwKQkvKiBleGNsdXNpdmUgb24gd3JpdGUgKi8KLSNkZWZpbmUgSzBCQVNFX05PTkNPSAlfTExDT05TVF8oMHg5ODAwMDAwMDAwMDAwMDAwKQkvKiBub25jb2hlcmVudCAqLwotI2RlZmluZSBLMEJBU0VfRVhMCV9MTENPTlNUXygweGEwMDAwMDAwMDAwMDAwMDApCS8qIGV4Y2x1c2l2ZSAqLwotCiAjaWZuZGVmIENPTkZJR19DUFVfUjgwMDAKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXBtLmggYi9pbmNsdWRlL2FzbS1taXBzL2FwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzY5MjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FwbS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIC0qLSBsaW51eC1jIC0qLQorICoKKyAqIChDKSAyMDAzIHplY2tlQGhhbmRoZWxkcy5vcmcKKyAqCisgKiBHUEwgdmVyc2lvbiAyCisgKgorICogYmFzZWQgb24gYXJjaC9hcm0va2VybmVsL2FwbS5jCisgKiBmYWN0b3Igb3V0IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgYXJjaGl0ZWN0dXJlcyB0byBwcm92aWRlCisgKiBhcG0gc3RhdHVzCisgKgorICoKKyAqLworI2lmbmRlZiBNSVBTX0FTTV9TQTExMDBfQVBNX0gKKyNkZWZpbmUgTUlQU19BU01fU0ExMTAwX0FQTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZ2V0cyBmaWxsZWQgaW4gYnkgdGhlIG1hY2hpbmUgc3BlY2lmaWMgJ2dldF9wb3dlcl9zdGF0dXMnCisgKiBpbXBsZW1lbnRhdGlvbi4gIEFueSBmaWVsZHMgd2hpY2ggYXJlIG5vdCBzZXQgZGVmYXVsdCB0byBhIHNhZmUgdmFsdWUuCisgKi8KK3N0cnVjdCBhcG1fcG93ZXJfaW5mbyB7CisJdW5zaWduZWQgY2hhcglhY19saW5lX3N0YXR1czsKKyNkZWZpbmUgQVBNX0FDX09GRkxJTkUJCQkwCisjZGVmaW5lIEFQTV9BQ19PTkxJTkUJCQkxCisjZGVmaW5lIEFQTV9BQ19CQUNLVVAJCQkyCisjZGVmaW5lIEFQTV9BQ19VTktOT1dOCQkJMHhmZgorCisJdW5zaWduZWQgY2hhcgliYXR0ZXJ5X3N0YXR1czsKKyNkZWZpbmUgQVBNX0JBVFRFUllfU1RBVFVTX0hJR0gJCTAKKyNkZWZpbmUgQVBNX0JBVFRFUllfU1RBVFVTX0xPVwkJMQorI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfQ1JJVElDQUwJMgorI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfQ0hBUkdJTkcJMworI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfTk9UX1BSRVNFTlQJNAorI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfVU5LTk9XTgkweGZmCisKKwl1bnNpZ25lZCBjaGFyCWJhdHRlcnlfZmxhZzsKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19ISUdICQkoMSA8PCAwKQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0xPVwkJKDEgPDwgMSkKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19DUklUSUNBTAkoMSA8PCAyKQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0NIQVJHSU5HCSgxIDw8IDMpCisjZGVmaW5lIEFQTV9CQVRURVJZX0ZMQUdfTk9UX1BSRVNFTlQJKDEgPDwgNykKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19VTktOT1dOCTB4ZmYKKworCWludAkJYmF0dGVyeV9saWZlOworCWludAkJdGltZTsKKwlpbnQJCXVuaXRzOworI2RlZmluZSBBUE1fVU5JVFNfTUlOUwkJCTAKKyNkZWZpbmUgQVBNX1VOSVRTX1NFQ1MJCQkxCisjZGVmaW5lIEFQTV9VTklUU19VTktOT1dOCQktMQorCit9OworCisvKgorICogVGhpcyBhbGxvd3MgbWFjaGluZXMgdG8gcHJvdmlkZSB0aGVpciBvd24gImFwbSBnZXQgcG93ZXIgc3RhdHVzIiBmdW5jdGlvbi4KKyAqLworZXh0ZXJuIHZvaWQgKCphcG1fZ2V0X3Bvd2VyX3N0YXR1cykoc3RydWN0IGFwbV9wb3dlcl9pbmZvICopOworCisvKgorICogUXVldWUgYW4gZXZlbnQgKEFQTV9TWVNfU1VTUEVORCBvciBBUE1fQ1JJVElDQUxfU1VTUEVORCkKKyAqLwordm9pZCBhcG1fcXVldWVfZXZlbnQoYXBtX2V2ZW50X3QgZXZlbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tMzIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tMzIuaAppbmRleCAxMWRhZjVjLi41ZGUzOTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLTMyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby0zMi5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8YXNtL2ZwcmVnZGVmLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAKLQkubWFjcm8JZnB1X3NhdmVfZG91YmxlIHRocmVhZCBzdGF0dXMgdG1wMT10MCB0bXAyCisJLm1hY3JvCWZwdV9zYXZlX2RvdWJsZSB0aHJlYWQgc3RhdHVzIHRtcDE9dDAKIAljZmMxCVx0bXAxLCAgZmNyMzEKIAlzZGMxCSRmMCwgIFRIUkVBRF9GUFIwKFx0aHJlYWQpCiAJc2RjMQkkZjIsICBUSFJFQURfRlBSMihcdGhyZWFkKQpAQCAtNzAsNyArNzAsNyBAQAogCXN3CVx0bXAsIFRIUkVBRF9GQ1IzMShcdGhyZWFkKQogCS5lbmRtCiAKLQkubWFjcm8JZnB1X3Jlc3RvcmVfZG91YmxlIHRocmVhZCB0bXA9dDAKKwkubWFjcm8JZnB1X3Jlc3RvcmVfZG91YmxlIHRocmVhZCBzdGF0dXMgdG1wPXQwCiAJbHcJXHRtcCwgVEhSRUFEX0ZDUjMxKFx0aHJlYWQpCiAJbGRjMQkkZjAsICBUSFJFQURfRlBSMChcdGhyZWFkKQogCWxkYzEJJGYyLCAgVEhSRUFEX0ZQUjIoXHRocmVhZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tNjQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tNjQuaAppbmRleCA1NTljMzU1Li4yMjVmZWVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLTY0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby02NC5oCkBAIC01MywxMiArNTMsMTIgQEAKIAlzZGMxCSRmMzEsIFRIUkVBRF9GUFIzMShcdGhyZWFkKQogCS5lbmRtCiAKLQkubWFjcm8JZnB1X3NhdmVfZG91YmxlIHRocmVhZCBzdGF0dXMgdG1wMSB0bXAyCi0Jc2xsCVx0bXAyLCBcdG1wMSwgNQotCWJnZXoJXHRtcDIsIDJmCisJLm1hY3JvCWZwdV9zYXZlX2RvdWJsZSB0aHJlYWQgc3RhdHVzIHRtcAorCXNsbAlcdG1wLCBcc3RhdHVzLCA1CisJYmdleglcdG1wLCAyZgogCWZwdV9zYXZlXzE2b2RkIFx0aHJlYWQKIDI6Ci0JZnB1X3NhdmVfMTZldmVuIFx0aHJlYWQgXHRtcDEJCQkjIGNsb2JiZXJzIHQxCisJZnB1X3NhdmVfMTZldmVuIFx0aHJlYWQgXHRtcAogCS5lbmRtCiAKIAkubWFjcm8JZnB1X3Jlc3RvcmVfMTZldmVuIHRocmVhZCB0bXA9dDAKQEAgLTEwMSwxMyArMTAxLDEyIEBACiAJbGRjMQkkZjMxLCBUSFJFQURfRlBSMzEoXHRocmVhZCkKIAkuZW5kbQogCi0JLm1hY3JvCWZwdV9yZXN0b3JlX2RvdWJsZSB0aHJlYWQgdG1wCi0JbWZjMAl0MCwgQ1AwX1NUQVRVUwotCXNsbAl0MSwgdDAsIDUKLQliZ2V6CXQxLCAxZgkJCQkjIDE2IHJlZ2lzdGVyIG1vZGU/CisJLm1hY3JvCWZwdV9yZXN0b3JlX2RvdWJsZSB0aHJlYWQgc3RhdHVzIHRtcAorCXNsbAlcdG1wLCBcc3RhdHVzLCA1CisJYmdleglcdG1wLCAxZgkJCQkjIDE2IHJlZ2lzdGVyIG1vZGU/CiAKLQlmcHVfcmVzdG9yZV8xNm9kZCBhMAotMToJZnB1X3Jlc3RvcmVfMTZldmVuIGEwLCB0MAkJIyBjbG9iYmVycyB0MAorCWZwdV9yZXN0b3JlXzE2b2RkIFx0aHJlYWQKKzE6CWZwdV9yZXN0b3JlXzE2ZXZlbiBcdGhyZWFkIFx0bXAKIAkuZW5kbQogCiAJLm1hY3JvCWNwdV9zYXZlX25vbnNjcmF0Y2ggdGhyZWFkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKaW5kZXggMTRmYzg4Zi4uM2I3NDVlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaApAQCAtMjE3LDYgKzIxNywxMyBAQAogICovCiAjZGVmaW5lIE1BQ0hfR1JPVVBfVElUQU4gICAgICAgMjIJLyogUE1DLVNpZXJyYSBUaXRhbgkJKi8KICNkZWZpbmUgIE1BQ0hfVElUQU5fWU9TRU1JVEUJMQkvKiBQTUMtU2llcnJhIFlvc2VtaXRlCQkqLworI2RlZmluZSAgTUFDSF9USVRBTl9FWENJVEUJMgkvKiBCYXNsZXIgZVhjaXRlCQkqLworCisvKgorICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIE5FQyBFTU1BMlJICisgKi8KKyNkZWZpbmUgTUFDSF9HUk9VUF9ORUNfRU1NQTJSSCAyNQkvKiBORUMgRU1NQTJSSCAod2FzIDIzKQkJKi8KKyNkZWZpbmUgIE1BQ0hfTkVDX01BUktFSU5TCTAJLyogTkVDIEVNTUEyUkggTWFyay1laW5zCSovCiAKICNkZWZpbmUgQ0xfU0laRQkJCUNPTU1BTkRfTElORV9TSVpFCiAKQEAgLTI1OCw0ICsyNjUsMTAgQEAKICAqIFJlZ2lzdGVycyBhMCwgYTEsIGEzIGFuZCBhNCBhcyBwYXNzZWQgdG8gdGhlIGtlbnJlbCBlbnRyeSBieSBmaXJtd2FyZQogICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBmd19hcmcwLCBmd19hcmcxLCBmd19hcmcyLCBmd19hcmczOworCisvKgorICogUGxhdGZvcm0gbWVtb3J5IGRldGVjdGlvbiBob29rIGNhbGxlZCBieSBzZXR1cF9hcmNoCisgKi8KK2V4dGVybiB2b2lkIHBsYXRfbWVtX3NldHVwKHZvaWQpOworCiAjZW5kaWYgLyogX0FTTV9CT09USU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjUwNzQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNTA3NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDA5YWMyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZGRiNTA3NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLyoKLSAqICBpbmNsdWRlL2FzbS1taXBzL2RkYjUwNzQuaCAtLSBORUMgRERCIFZyYy01MDc0IGRlZmluaXRpb25zCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgotICogICAgICAgICAgICAgICAgICAgICBTb255IFNvZnR3YXJlIERldmVsb3BtZW50IENlbnRlciBFdXJvcGUgKFNEQ0UpLCBCcnVzc2VscwotICovCi0KLWV4dGVybiB2b2lkIGRkYjUwNzRfbGVkX2hleChpbnQgaGV4KTsKLWV4dGVybiB2b2lkIGRkYjUwNzRfbGVkX2QyKGludCBvbik7Ci1leHRlcm4gdm9pZCBkZGI1MDc0X2xlZF9kMyhpbnQgb24pOwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTA3NC5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjUwNzQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkODgzMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTA3NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqICBpbmNsdWRlL2FzbS1taXBzL2RkYjUwNzQuaCAtLSBORUMgRERCIFZyYy01MDc0IGRlZmluaXRpb25zCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgotICogICAgICAgICAgICAgICAgICAgICBTb255IFNvZnR3YXJlIERldmVsb3BtZW50IENlbnRlciBFdXJvcGUgKFNEQ0UpLCBCcnVzc2VscwotICovCi0KLSNpZm5kZWYgX0FTTV9EREI1WFhYX0REQjUwNzRfSAotI2RlZmluZSBfQVNNX0REQjVYWFhfRERCNTA3NF9ICi0KLSNpbmNsdWRlIDxhc20vbmlsZTQuaD4KLQotI2RlZmluZSBEREJfU0RSQU1fU0laRSAgICAgIDB4MDQwMDAwMDAgICAgICAvKiA2NE1CICovCi0KLSNkZWZpbmUgRERCX1BDSV9JT19CQVNFICAgICAweDA2MDAwMDAwCi0jZGVmaW5lIEREQl9QQ0lfSU9fU0laRSAgICAgMHgwMjAwMDAwMCAgICAgIC8qIDMyIE1CICovCi0KLSNkZWZpbmUgRERCX1BDSV9NRU1fQkFTRSAgICAweDA4MDAwMDAwCi0jZGVmaW5lIEREQl9QQ0lfTUVNX1NJWkUgICAgMHgwODAwMDAwMCAgLyogMTI4IE1CICovCi0KLSNkZWZpbmUgRERCX1BDSV9DT05GSUdfQkFTRSBEREJfUENJX01FTV9CQVNFCi0jZGVmaW5lIEREQl9QQ0lfQ09ORklHX1NJWkUgRERCX1BDSV9NRU1fU0laRQotCi0jZGVmaW5lIE5JTEU0X1BDSV9JT19CQVNFICAgMHhhNjAwMDAwMAotI2RlZmluZSBOSUxFNF9QQ0lfTUVNX0JBU0UgIDB4YTgwMDAwMDAKLSNkZWZpbmUgTklMRTRfUENJX0NGR19CQVNFICBOSUxFNF9QQ0lfTUVNX0JBU0UKLSNkZWZpbmUgRERCX1BDSV9JQUNLX0JBU0UgTklMRTRfUENJX0lPX0JBU0UKLQotI2RlZmluZSBOSUxFNF9JUlFfQkFTRSBOVU1fSTgyNTlfSU5URVJSVVBUUwotI2RlZmluZSBDUFVfSVJRX0JBU0UgKE5VTV9OSUxFNF9JTlRFUlJVUFRTICsgTklMRTRfSVJRX0JBU0UpCi0jZGVmaW5lIENQVV9OSUxFNF9DQVNDQURFIDIKLQotZXh0ZXJuIHZvaWQgZGRiNTA3NF9sZWRfaGV4KGludCBoZXgpOwotZXh0ZXJuIHZvaWQgZGRiNTA3NF9sZWRfZDIoaW50IG9uKTsKLWV4dGVybiB2b2lkIGRkYjUwNzRfbGVkX2QzKGludCBvbik7Ci0KLWV4dGVybiB2b2lkIG5pbGU0X2lycV9zZXR1cCh1MzIgYmFzZSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1NDc2LmggYi9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ni5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzIzMzkwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1NDc2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIGhlYWRlciBmaWxlIHNwZWNpZmljIGZvciBkZGI1NDc2Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotLyoKLSAqICBNZW1vcnkgbWFwIChwaHlzaWNhbCBhZGRyZXNzKQotICoKLSAqICBOb3RlIG1vc3Qgb2YgdGhlIGZvbGxvd2luZyBhZGRyZXNzIG11c3QgYmUgcHJvcGVybHkgYWxpZ25lZCBieSB0aGUKLSAqICBjb3JyZXNwb25kaW5nIHNpemUuICBGb3IgZXhhbXBsZSwgaWYgUENJX0lPX1NJWkUgaXMgMTZNQiwgdGhlbgotICogIFBDSV9JT19CQVNFIG11c3QgYmUgYWxpZ25lZCBhbG9uZyAxNk1CIGJvdW5kYXJ5LgotICovCi0jZGVmaW5lIEREQl9TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIEREQl9TRFJBTV9TSVpFCQkweDA0MDAwMDAwICAgICAgLyogNjRNQiAqLwotCi0jZGVmaW5lCUREQl9EQ1MzX0JBU0UJCTB4MDQwMDAwMDAJLyogZmxhc2ggMSAqLwotI2RlZmluZQlEREJfRENTM19TSVpFCQkweDAxMDAwMDAwCS8qIDE2TUIgKi8KLQotI2RlZmluZQlEREJfRENTMl9CQVNFCQkweDA1MDAwMDAwCS8qIGZsYXNoIDIgKi8KLSNkZWZpbmUJRERCX0RDUzJfU0laRQkJMHgwMTAwMDAwMAkvKiAxNk1CICovCi0KLSNkZWZpbmUgRERCX1BDSV9JT19CQVNFCQkweDA2MDAwMDAwCi0jZGVmaW5lIEREQl9QQ0lfSU9fU0laRQkJMHgwMjAwMDAwMCAgICAgIC8qIDMyIE1CICovCi0KLSNkZWZpbmUJRERCX1BDSV9NRU1fQkFTRQkweDA4MDAwMDAwCi0jZGVmaW5lCUREQl9QQ0lfTUVNX1NJWkUJMHgwODAwMDAwMAkvKiAxMjggTUIgKi8KLQotI2RlZmluZQlEREJfRENTNV9CQVNFCQkweDEzMDAwMDAwCS8qIEREQiBzdGF0dXMgcmVncyAqLwotI2RlZmluZQlEREJfRENTNV9TSVpFCQkweDAwMjAwMDAwCS8qIDJNQiwgOC1iaXQgKi8KLQotI2RlZmluZQlEREJfRENTNF9CQVNFCQkweDE0MDAwMDAwCS8qIEREQiBjb250cm9sIHJlZ3MgKi8KLSNkZWZpbmUJRERCX0RDUzRfU0laRQkJMHgwMDIwMDAwMAkvKiAyTUIsIDgtYml0ICovCi0KLSNkZWZpbmUgRERCX0lOVENTX0JBU0UJCTB4MWZhMDAwMDAgICAgICAvKiBWUkM1NDc2IGNvbnRyb2wgcmVncyAqLwotI2RlZmluZSBEREJfSU5UQ1NfU0laRQkJMHgwMDIwMDAwMCAgICAgIC8qIDJNQiAqLwotCi0jZGVmaW5lIEREQl9CT09UQ1NfQkFTRSAgICAgICAgIDB4MWZjMDAwMDAgICAgICAvKiBCb290IFJPTSAvIEVQUk9NIC9GbGFzaCAqLwotI2RlZmluZSBEREJfQk9PVENTX1NJWkUgICAgICAgICAweDAwMjAwMDAwICAgICAgLyogMiBNQiAtIGRvYyBzYXlzIDRNQiAqLwotCi0KLS8qIGFsaWFzZXMgKi8KLSNkZWZpbmUJRERCX1BDSV9DT05GSUdfQkFTRQlEREJfUENJX01FTV9CQVNFCi0jZGVmaW5lCUREQl9QQ0lfQ09ORklHX1NJWkUJRERCX1BDSV9NRU1fU0laRQotCi0vKiBQQ0kgaW50ciBhY2sgc2hhcmUgUENJVzAgd2l0aCBQQ0kgSU8gKi8KLSNkZWZpbmUJRERCX1BDSV9JQUNLX0JBU0UJRERCX1BDSV9JT19CQVNFCi0KLS8qCi0gKiBJbnRlcnJ1cHQgbWFwcGluZwotICoKLSAqIFdlIGhhdmUgdGhyZWUgaW50ZXJydXB0IGNvbnRyb2xsZXJzOgotICoKLSAqICAgLiBDUFUgaXRzZWxmIC0gOCBzb3VyY2VzCi0gKiAgIC4gaTgyNTkgLSAxNiBzb3VyY2VzCi0gKiAgIC4gdnJjNTQ3NiAtIDE2IHNvdXJjZXMKLSAqCi0gKiAgVGhleSBjb25uZWN0ZWQgYXMgZm9sbG93czoKLSAqICAgIGFsbCB2cmM1NDc2IGludGVycnVwdHMgYXJlIHJvdXRlZCB0byBjcHUgSVAyIChieSBzb2Z0d2FyZSBzZXR0aW5nKQotICogICAgYWxsIGkyODY5IGFyZSByb3V0ZWQgdG8gSU5UQyBpbiB2cmM1NDc2IChieSBoYXJkd2FyZSBjb25uZWN0aW9uKQotICoKLSAqICBBbGwgVlJDNTQ3NiBQQ0kgaW50ZXJydXB0cyBhcmUgbGV2ZWwtdHJpZ2dlcmVkIChubyBhY2sgbmVlZGVkKS4KLSAqICBBbGwgUENJIGlycSBidXQgSU5UQyBhcmUgYWN0aXZlIGxvdy4KLSAqLwotCi0vKgotICogaXJxIG51bWJlciBibG9jayBhc3NpZ25tZW50Ci0gKi8KLQotI2RlZmluZQlOVU1fQ1BVX0lSUQkJOAotI2RlZmluZQlOVU1fSTgyNTlfSVJRCQkxNgotI2RlZmluZQlOVU1fVlJDNTQ3Nl9JUlEJCTE2Ci0KLSNkZWZpbmUJRERCX0lSUV9CQVNFCQkwCi0KLSNkZWZpbmUJSTgyNTlfSVJRX0JBU0UJCUREQl9JUlFfQkFTRQotI2RlZmluZQlWUkM1NDc2X0lSUV9CQVNFCShJODI1OV9JUlFfQkFTRSArIE5VTV9JODI1OV9JUlEpCi0jZGVmaW5lCUNQVV9JUlFfQkFTRQkJKFZSQzU0NzZfSVJRX0JBU0UgKyBOVU1fVlJDNTQ3Nl9JUlEpCi0KLS8qCi0gKiB2cmM1NDc2IGlycSBkZWZzLCBzZWUgcGFnZSA1Mi02NCBvZiBWcmM1MDc0IHN5c3RlbSBjb250cm9sbGVyIG1hbnVhbAotICovCi0KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfQ1BDRQkwCS8qIGNwdSBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfQ05URAkxCS8qIGNwdSBubyB0YXJnZXQgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfTUNFCQkyCS8qIG1lbW9yeSBjaGVjayBlcnJvciAqLwotI2RlZmluZSBWUkM1NDc2X0lSUV9ETUEJCTMJLyogRE1BICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX1VBUlQJNAkvKiB2cmM1NDc2IGJ1aWx0aW4gVUFSVCwgbm90IHVzZWQgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfV0RPRwk1CS8qIHdhdGNoZG9nIHRpbWVyICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0dQVAkJNgkvKiBnZW5lcmFsIHB1cnBvc2UgdGltZXIgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfTEJSVAk3CS8qIGxvY2FsIGJ1cyByZWFkIHRpbWVvdXQgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfSU5UQQk4CS8qIFBDSSBJTlQgI0EgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfSU5UQgk5CS8qIFBDSSBJTlQgI0IgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfSU5UQwkxMAkvKiBQQ0kgSU5UICNDICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0lOVEQJMTEJLyogUENJIElOVCAjRCAqLwotI2RlZmluZSBWUkM1NDc2X0lSUV9JTlRFCTEyCS8qIFBDSSBJTlQgI0UgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfUkVTRVJWRURfMTMJMTMJLyogcmVzZXJ2ZWQgICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX1BDSVMJMTQJLyogUENJIFNFUlIgIyAgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfUENJCQkxNQkvKiBQQ0kgaW50ZXJuYWwgZXJyb3IgKi8KLQotLyoKLSAqIGkyODU5IGlycSBhc3NpZ25tZW50Ci0gKi8KLSNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzAJMAotI2RlZmluZSBJODI1OV9JUlFfS0VZQk9BUkQJMQkvKiBNMTU0MyBkZWZhdWx0ICovCi0jZGVmaW5lIEk4MjU5X0lSUV9DQVNDQURFCTIKLSNkZWZpbmUgSTgyNTlfSVJRX1VBUlRfQgkzCS8qIE0xNTQzIGRlZmF1bHQsIG1heSBjb25mbGljdCB3aXRoIFJUQyBhY2NvcmRpbmcgdG8gc2NoZW1hdGljIGRpYWdyYW0gICovCi0jZGVmaW5lIEk4MjU5X0lSUV9VQVJUX0EJNAkvKiBNMTU0MyBkZWZhdWx0ICovCi0jZGVmaW5lIEk4MjU5X0lSUV9QQVJBTExFTAk1CS8qIE0xNTQzIGRlZmF1bHQgKi8KLSNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzYJNgotI2RlZmluZSBJODI1OV9JUlFfUkVTRVJWRURfNwk3Ci0jZGVmaW5lIEk4MjU5X0lSUV9SVEMJCTgJLyogd2hvIHNldCB0aGlzPyAqLwotI2RlZmluZSBJODI1OV9JUlFfVVNCCQk5CS8qIGRkYl9zZXR1cCAqLwotI2RlZmluZSBJODI1OV9JUlFfUE1VCQkxMAkvKiBkZGJfc2V0dXAgKi8KLSNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzExCTExCi0jZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8xMgkxMgkvKiBtMTU0M19pcnFfc2V0dXAgKi8KLSNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzEzCTEzCi0jZGVmaW5lIEk4MjU5X0lSUV9IREMxCQkxNAkvKiBkZWZhdWx0IGFuZCBkZGJfc2V0dXAgKi8KLSNkZWZpbmUgSTgyNTlfSVJRX0hEQzIJCTE1CS8qIGRlZmF1bHQgKi8KLQotCi0vKgotICogbWlzYwotICovCi0jZGVmaW5lCVZSQzU0NzZfSTgyNTlfQ0FTQ0FERQlWUkM1NDc2X0lSUV9JTlRDCi0jZGVmaW5lCUNQVV9WUkM1NDc2X0NBU0NBREUJMgotCi0jZGVmaW5lIGlzX2k4MjU5X2lycShpcnEpICAgICAgICgoaXJxKSA8IE5VTV9JODI1OV9JUlEpCi0jZGVmaW5lIG5pbGU0X3RvX2lycShuKSAgICAgICAgICgobikrTlVNX0k4MjU5X0lSUSkKLSNkZWZpbmUgaXJxX3RvX25pbGU0KG4pICAgICAgICAgKChuKS1OVU1fSTgyNTlfSVJRKQotCi0vKgotICogbG93LWxldmVsIGlycSBmdW5jdGlvbnMKLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIG5pbGU0X21hcF9pcnEoaW50IG5pbGU0X2lycSwgaW50IGNwdV9pcnEpOwotZXh0ZXJuIHZvaWQgbmlsZTRfbWFwX2lycV9hbGwoaW50IGNwdV9pcnEpOwotZXh0ZXJuIHZvaWQgbmlsZTRfZW5hYmxlX2lycShpbnQgbmlsZTRfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X2Rpc2FibGVfaXJxKGludCBuaWxlNF9pcnEpOwotZXh0ZXJuIHZvaWQgbmlsZTRfZGlzYWJsZV9pcnFfYWxsKHZvaWQpOwotZXh0ZXJuIHUxNiBuaWxlNF9nZXRfaXJxX3N0YXQoaW50IGNwdV9pcnEpOwotZXh0ZXJuIHZvaWQgbmlsZTRfZW5hYmxlX2lycV9vdXRwdXQoaW50IGNwdV9pcnEpOwotZXh0ZXJuIHZvaWQgbmlsZTRfZGlzYWJsZV9pcnFfb3V0cHV0KGludCBjcHVfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KGludCBwY2lfaXJxLCBpbnQgaGlnaCk7Ci1leHRlcm4gdm9pZCBuaWxlNF9zZXRfcGNpX2lycV9sZXZlbF9vcl9lZGdlKGludCBwY2lfaXJxLCBpbnQgbGV2ZWwpOwotZXh0ZXJuIHZvaWQgbmlsZTRfY2xlYXJfaXJxKGludCBuaWxlNF9pcnEpOwotZXh0ZXJuIHZvaWQgbmlsZTRfY2xlYXJfaXJxX21hc2sodTMyIG1hc2spOwotZXh0ZXJuIHU4IG5pbGU0X2k4MjU5X2lhY2sodm9pZCk7Ci1leHRlcm4gdm9pZCBuaWxlNF9kdW1wX2lycV9zdGF0dXModm9pZCk7ICAgICAgICAvKiBEZWJ1ZyAqLwotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmggYi9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNXh4eC5oCmluZGV4IDg3M2MwM2YuLjJmMWIxOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjV4eHguaApAQCAtMTc0LDEzICsxNzQsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGRiX3N5bmModm9pZCkKIHsKLS8qIFRoZSBEREI1MDc0IGRvZXNuJ3Qgc2VlbSB0byBsaWtlIHRoZXNlIGFjY2Vzc2VzLiBUaGV5IGtpbGwgdGhlIGJvYXJkIG9uCi0gKiBpbnRlcnJ1cHQgbG9hZAotICovCi0jaWZuZGVmIENPTkZJR19EREI1MDc0CiAgICAgdm9sYXRpbGUgdTMyICpwID0gKHZvbGF0aWxlIHUzMiAqKTB4YmZjMDAwMDA7CiAgICAgKHZvaWQpKCpwKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGRiX291dDMyKHUzMiBvZmZzZXQsIHUzMiB2YWwpCkBAIC0yNjAsMTEgKzI1NSw3IEBACiAvKgogICogaW5jbHVkZSB0aGUgYm9hcmQgZGVwZW5kZW50IHBhcnQKICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0REQjUwNzQpCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTA3NC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfRERCNTQ3NikKLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1NDc2Lmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19EREI1NDc3KQorI2lmIGRlZmluZWQoQ09ORklHX0REQjU0NzcpCiAjaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTQ3Ny5oPgogI2Vsc2UKICNlcnJvciAiVW5rbm93biBEREIgYm9hcmQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9lbW1hMnJoL2VtbWEycmguaCBiL2luY2x1ZGUvYXNtLW1pcHMvZW1tYTJyaC9lbW1hMnJoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiOGRmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZW1tYTJyaC9lbW1hMnJoLmgKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tbWlwcy9lbW1hMnJoL2VtbWEycmguaAorICogICAgICBUaGlzIGZpbGUgaXMgRU1NQTJSSCBjb21tb24gaGVhZGVyLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA1LTIwMDYKKyAqCisgKiAgVGhpcyBmaWxlIGJhc2VkIG9uIGluY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKKyAqICAgICAgICAgIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0VNTUEyUkhfRU1NQTJSSF9ICisjZGVmaW5lIF9fQVNNX0VNTUEyUkhfRU1NQTJSSF9ICisKKy8qCisgKiBFTU1BMlJIIHJlZ2lzdGVycworICovCisjZGVmaW5lIFJFR0JBU0UgMHgxMDAwMDAwMAorCisjZGVmaW5lIEVNTUEyUkhfQkhJRl9TVFJBUF8wCSgweDAwMDAxMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfSU5UX1NUXzAJKDB4MDAwMDMwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfQkhJRl9JTlRfU1RfMQkoMHgwMDAwMzQrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0lOVF9TVF8yCSgweDAwMDAzOCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfSU5UX0VOXzAJKDB4MDAwMDQwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfQkhJRl9JTlRfRU5fMQkoMHgwMDAwNDQrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0lOVF9FTl8yCSgweDAwMDA0OCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfSU5UMV9FTl8wCSgweDAwMDA1MCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfSU5UMV9FTl8xCSgweDAwMDA1NCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfSU5UMV9FTl8yCSgweDAwMDA1OCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfU1dfSU5UCSgweDAwMDA3MCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfU1dfSU5UX0VOCSgweDAwMDA4MCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfU1dfSU5UX0NMUgkoMHgwMDAwOTArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX01BSU5fQ1RSTAkoMHgwMDAwYjQrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0VYQ0VQVF9WRUNUX0JBU0VfQUREUkVTUwkoMHgwMDAwYzArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9HUElPX0RJUgkoMHgxMTBkMjArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9HUElPX0lOVF9TVAkoMHgxMTBkMzArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9HUElPX0lOVF9NQVNLCSgweDExMGQzYytSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0dQSU9fSU5UX01PREUJKDB4MTEwZDQ4K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfR1BJT19JTlRfQ05EX0EJKDB4MTEwZDU0K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfR1BJT19JTlRfQ05EX0IJKDB4MTEwZDYwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUEJSRF9JTlRfRU4JKDB4MTAwMDEwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUEJSRF9DTEtTRUwJKDB4MTAwMDI4K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUEZVUjBfQkFTRQkoMHgxMDEwMDArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QRlVSMV9CQVNFCSgweDEwMjAwMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BGVVIyX0JBU0UJKDB4MTAzMDAwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUElJQzBfQkFTRQkoMHgxMDcwMDArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QSUlDMV9CQVNFCSgweDEwODAwMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BJSUMyX0JBU0UJKDB4MTA5MDAwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUENJX0NPTlRST0wJKDB4MjAwMDAwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUENJX0FSQklUX0NUUgkoMHgyMDAwMDQrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfSVdJTjBfQ1RSCSgweDIwMDAxMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BDSV9JV0lOMV9DVFIJKDB4MjAwMDE0K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUENJX0lOSVRfRVNXUAkoMHgyMDAwMTgrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfSU5UCQkoMHgyMDAwMjArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfSU5UX0VOCSgweDIwMDAyNCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BDSV9UV0lOX0NUUgkoMHgyMDAwMzArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfVFdJTl9CQURSCSgweDIwMDAzNCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BDSV9UV0lOMF9EQURSCSgweDIwMDAzOCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BDSV9UV0lOMV9EQURSCSgweDIwMDAzYytSRUdCQVNFKQorCisvKgorICogIE1lbW9yeSBtYXAgKHBoeXNpY2FsIGFkZHJlc3MpCisgKgorICogIE5vdGUgbW9zdCBvZiB0aGUgZm9sbG93aW5nIGFkZHJlc3MgbXVzdCBiZSBwcm9wZXJseSBhbGlnbmVkIGJ5IHRoZQorICogIGNvcnJlc3BvbmRpbmcgc2l6ZS4gIEZvciBleGFtcGxlLCBpZiBQQ0lfSU9fU0laRSBpcyAxNk1CLCB0aGVuCisgKiAgUENJX0lPX0JBU0UgbXVzdCBiZSBhbGlnbmVkIGFsb25nIDE2TUIgYm91bmRhcnkuCisgKi8KKworLyogdGhlIGFjdHVhbCByYW0gc2l6ZSBpcyBkZXRlY3RlZCBhdCBydW4tdGltZSAqLworI2RlZmluZSBFTU1BMlJIX1JBTV9CQVNFCTB4MDAwMDAwMDAKKyNkZWZpbmUgRU1NQTJSSF9SQU1fU0laRQkweDEwMDAwMDAwCS8qIGxlc3MgdGhhbiAyNTZNQiAqLworCisjZGVmaW5lIEVNTUEyUkhfSU9fQkFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBFTU1BMlJIX0lPX1NJWkUJCTB4MDEwMDAwMDAJLyogMTYgTUIgKi8KKworI2RlZmluZSBFTU1BMlJIX0dFTkVSQUxJT19CQVNFCTB4MTEwMDAwMDAKKyNkZWZpbmUgRU1NQTJSSF9HRU5FUkFMSU9fU0laRQkweDAxMDAwMDAwCS8qIDE2IE1CICovCisKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfSU9fQkFTRQkweDEyMDAwMDAwCisjZGVmaW5lIEVNTUEyUkhfUENJX0lPX1NJWkUJMHgwMjAwMDAwMAkvKiAzMiBNQiAqLworCisjZGVmaW5lIEVNTUEyUkhfUENJX01FTV9CQVNFCTB4MTQwMDAwMDAKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfTUVNX1NJWkUJMHgwODAwMDAwMAkvKiAxMjggTUIgKi8KKworI2RlZmluZSBFTU1BMlJIX1JPTV9CQVNFCTB4MWMwMDAwMDAKKyNkZWZpbmUgRU1NQTJSSF9ST01fU0laRQkweDA0MDAwMDAwCS8qIDY0IE1CICovCisKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfQ09ORklHX0JBU0UJRU1NQTJSSF9QQ0lfSU9fQkFTRQorI2RlZmluZSBFTU1BMlJIX1BDSV9DT05GSUdfU0laRQlFTU1BMlJIX1BDSV9JT19TSVpFCisKKyNkZWZpbmUgTlVNX0NQVV9JUlEJCTgKKyNkZWZpbmUgTlVNX0VNTUEyUkhfSVJRCQk5NgorCisjZGVmaW5lIENQVV9FTU1BMlJIX0NBU0NBREUJMgorI2RlZmluZSBFTU1BMlJIX0lSUV9CQVNFCTAKKworLyoKKyAqIGVtbWEycmggaXJxIGRlZnMKKyAqLworCisjZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDAJKDAgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxCSgxICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMgkoMiArIEVNTUEyUkhfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDMJKDMgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0CSg0ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNQkoNSArIEVNTUEyUkhfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDYJKDYgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ3CSg3ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UOAkoOCArIEVNTUEyUkhfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDkJKDkgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMAkoMTAgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMQkoMTEgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMgkoMTIgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMwkoMTMgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNAkoMTQgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNQkoMTUgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNgkoMTYgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNwkoMTcgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxOAkoMTggKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxOQkoMTkgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMAkoMjAgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMQkoMjEgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMgkoMjIgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMwkoMjMgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNAkoMjQgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNQkoMjUgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNgkoMjYgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNwkoMjcgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyOAkoMjggKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyOQkoMjkgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMAkoMzAgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMQkoMzEgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMgkoMzIgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMwkoMzMgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNAkoMzQgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNQkoMzUgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNgkoMzYgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNwkoMzcgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzOAkoMzggKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzOQkoMzkgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MAkoNDAgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MQkoNDEgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MgkoNDIgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MwkoNDMgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NAkoNDQgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NQkoNDUgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NgkoNDYgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NwkoNDcgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0OAkoNDggKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0OQkoNDkgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MAkoNTAgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MQkoNTEgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MgkoNTIgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MwkoNTMgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NAkoNTQgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NQkoNTUgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NgkoNTYgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NwkoNTcgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1OAkoNTggKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1OQkoNTkgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MAkoNjAgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MQkoNjEgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MgkoNjIgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MwkoNjMgKyBFTU1BMlJIX0lSUV9CQVNFKQorCisjZGVmaW5lIEVNTUEyUkhfSVJRX1BGVVIwCUVNTUEyUkhfSVJRX0lOVDQ5CisjZGVmaW5lIEVNTUEyUkhfSVJRX1BGVVIxCUVNTUEyUkhfSVJRX0lOVDUwCisjZGVmaW5lIEVNTUEyUkhfSVJRX1BGVVIyCUVNTUEyUkhfSVJRX0lOVDUxCisjZGVmaW5lIEVNTUEyUkhfSVJRX1BJSUMwCUVNTUEyUkhfSVJRX0lOVDU2CisjZGVmaW5lIEVNTUEyUkhfSVJRX1BJSUMxCUVNTUEyUkhfSVJRX0lOVDU3CisjZGVmaW5lIEVNTUEyUkhfSVJRX1BJSUMyCUVNTUEyUkhfSVJRX0lOVDU4CisKKy8qCisgKiAgRU1NQTJSSCBSZWdpc3RlciBBY2Nlc3MKKyAqLworCisjZGVmaW5lIEVNTUEyUkhfQkFTRSAoMHhhMDAwMDAwMCkKKworc3RhdGljIGlubGluZSB2b2lkIGVtbWEycmhfc3luYyh2b2lkKQoreworCXZvbGF0aWxlIHUzMiAqcCA9ICh2b2xhdGlsZSB1MzIgKikweGJmYzAwMDAwOworCSh2b2lkKSgqcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbW1hMnJoX291dDMyKHUzMiBvZmZzZXQsIHUzMiB2YWwpCit7CisJKih2b2xhdGlsZSB1MzIgKikoRU1NQTJSSF9CQVNFIHwgb2Zmc2V0KSA9IHZhbDsKKwllbW1hMnJoX3N5bmMoKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZW1tYTJyaF9pbjMyKHUzMiBvZmZzZXQpCit7CisJdTMyIHZhbCA9ICoodm9sYXRpbGUgdTMyICopKEVNTUEyUkhfQkFTRSB8IG9mZnNldCk7CisJZW1tYTJyaF9zeW5jKCk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVtbWEycmhfb3V0MTYodTMyIG9mZnNldCwgdTE2IHZhbCkKK3sKKwkqKHZvbGF0aWxlIHUxNiAqKShFTU1BMlJIX0JBU0UgfCBvZmZzZXQpID0gdmFsOworCWVtbWEycmhfc3luYygpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBlbW1hMnJoX2luMTYodTMyIG9mZnNldCkKK3sKKwl1MTYgdmFsID0gKih2b2xhdGlsZSB1MTYgKikoRU1NQTJSSF9CQVNFIHwgb2Zmc2V0KTsKKwllbW1hMnJoX3N5bmMoKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW1tYTJyaF9vdXQ4KHUzMiBvZmZzZXQsIHU4IHZhbCkKK3sKKwkqKHZvbGF0aWxlIHU4ICopKEVNTUEyUkhfQkFTRSB8IG9mZnNldCkgPSB2YWw7CisJZW1tYTJyaF9zeW5jKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZW1tYTJyaF9pbjgodTMyIG9mZnNldCkKK3sKKwl1OCB2YWwgPSAqKHZvbGF0aWxlIHU4ICopKEVNTUEyUkhfQkFTRSB8IG9mZnNldCk7CisJZW1tYTJyaF9zeW5jKCk7CisJcmV0dXJuIHZhbDsKK30KKworLyoqCisgKiBJSUMgcmVnaXN0ZXJzIG1hcAorICoqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDTlQgLSBDb250cm9sIHJlZ2lzdGVyICgwMEggUi9XKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNQVCAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1RUICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBQ0tFICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFdUSU0gICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1BJRSAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBXUkVMICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIExSRUwgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSUlDRSAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDTlRfUkVTRVJWRUQgICAgMHgwMDAwMDBmZgkvKiByZXNlcnZlZCBiaXQgMCAqLworCisjZGVmaW5lIEkyQ19FTU1BX1NUQVJUICAgICAgKElJQ0UgfCBTVFQpCisjZGVmaW5lIEkyQ19FTU1BX1NUT1AgICAgICAgKElJQ0UgfCBTUFQpCisjZGVmaW5lIEkyQ19FTU1BX1JFUFNUQVJUICAgSTJDX0VNTUFfU1RBUlQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogU1RBIC0gU3RhdHVzIHJlZ2lzdGVyICgxMEggUmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBNU1RTICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFMRCAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVhDICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDT0kgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFRSQyAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQUNLRCAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTVEQgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNQRCAgICAgICAgIDB4MDAwMDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQ1NFTCAtIENsb2NrIHNlbGVjdCByZWdpc3RlciAoMjBIIFIvVykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGQ0wgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE5ENTAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ0xEICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBEQUQgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNNQyAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgREZDICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDTCAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIENTRUxfUkVTRVJWRUQgICAweDAwMDAwMGZmCS8qIHJlc2VydmVkIGJpdCAwICovCisKKyNkZWZpbmUgRkFTVDM5NyAgICAgMHgwMDAwMDA4YgorI2RlZmluZSBGQVNUMjk3ICAgICAweDAwMDAwMDhhCisjZGVmaW5lIEZBU1QzNDcgICAgIDB4MDAwMDAwMGIKKyNkZWZpbmUgRkFTVDI2MCAgICAgMHgwMDAwMDAwYQorI2RlZmluZSBGQVNUMTMwICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNUQU5EQVJEMTA4IDB4MDAwMDAwODMKKyNkZWZpbmUgU1RBTkRBUkQ4MyAgMHgwMDAwMDA4MgorI2RlZmluZSBTVEFOREFSRDk1ICAweDAwMDAwMDAzCisjZGVmaW5lIFNUQU5EQVJENzMgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1RBTkRBUkQzNiAgMHgwMDAwMDAwMQorI2RlZmluZSBTVEFOREFSRDcxICAweDAwMDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFNWQSAtIFNsYXZlIGFkZHJlc3MgcmVnaXN0ZXIgKDMwSCBSL1cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1ZBICAgICAgICAgMHgwMDAwMDBmZQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTSFIgLSBTaGlmdCByZWdpc3RlciAoNDBIIFIvVykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNSICAgICAgICAgIDB4MDAwMDAwZmYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogSU5UIC0gSW50ZXJydXB0IHJlZ2lzdGVyICg1MEggUi9XKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogSU5UTSAtIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyICg2MEggUi9XKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBJTlRFMCAgICAgICAweDAwMDAwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNkZWZpbmUgSTJDX0VNTUFfQ05UICAgICAgICAgICAgMHgwMAorI2RlZmluZSBJMkNfRU1NQV9TVEEgICAgICAgICAgICAweDEwCisjZGVmaW5lIEkyQ19FTU1BX0NTRUwgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgSTJDX0VNTUFfU1ZBICAgICAgICAgICAgMHgzMAorI2RlZmluZSBJMkNfRU1NQV9TSFIgICAgICAgICAgICAweDQwCisjZGVmaW5lIEkyQ19FTU1BX0lOVCAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgSTJDX0VNTUFfSU5UTSAgICAgICAgICAgMHg2MAorCisvKgorICogaW5jbHVkZSB0aGUgYm9hcmQgZGVwZW5kZW50IHBhcnQKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX01BUktFSU5TKQorI2luY2x1ZGUgPGFzbS9lbW1hMnJoL21hcmtlaW5zLmg+CisjZWxzZQorI2Vycm9yICJVbmtub3duIEVNTUEyUkggYm9hcmQhIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9FTU1BMlJIX0VNTUEyUkhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9lbW1hMnJoL21hcmtlaW5zLmggYi9pbmNsdWRlL2FzbS1taXBzL2VtbWEycmgvbWFya2VpbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE3NjY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9lbW1hMnJoL21hcmtlaW5zLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1taXBzL2VtbWEycmgvbWFya2VpbnMuaAorICogICAgICBUaGlzIGZpbGUgaXMgRU1NQTJSSCBib2FyZCBkZXBlbmRlZCBoZWFkZXIuCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDUtMjAwNgorICoKKyAqICBUaGlzIGZpbGUgYmFzZWQgb24gaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjV4eHguaAorICogICAgICAgICAgQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBNQVJLRUlOU19ICisjZGVmaW5lIE1BUktFSU5TX0gKKworI2RlZmluZSBOVU1fRU1NQTJSSF9JUlFfU1cJMzIKKyNkZWZpbmUgTlVNX0VNTUEyUkhfSVJRX0dQSU8JMzIKKworI2RlZmluZSBFTU1BMlJIX1NXX0NBU0NBREUJKEVNTUEyUkhfSVJRX0lOVDcgLSBFTU1BMlJIX0lSUV9JTlQwKQorI2RlZmluZSBFTU1BMlJIX0dQSU9fQ0FTQ0FERQkoRU1NQTJSSF9JUlFfSU5UNDYgLSBFTU1BMlJIX0lSUV9JTlQwKQorCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0JBU0UJKEVNTUEyUkhfSVJRX0JBU0UgKyBOVU1fRU1NQTJSSF9JUlEpCisjZGVmaW5lIEVNTUEyUkhfR1BJT19JUlFfQkFTRQkoRU1NQTJSSF9TV19JUlFfQkFTRSArIE5VTV9FTU1BMlJIX0lSUV9TVykKKyNkZWZpbmUgQ1BVX0lSUV9CQVNFCQkoRU1NQTJSSF9HUElPX0lSUV9CQVNFICsgTlVNX0VNTUEyUkhfSVJRX0dQSU8pCisKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMAkoMCtFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxCSgxK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDIJKDIrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMwkoMytFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQ0CSg0K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDUJKDUrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UNgkoNitFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQ3CSg3K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDgJKDgrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UOQkoOStFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxMAkoMTArRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTEJKDExK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDEyCSgxMitFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxMwkoMTMrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTQJKDE0K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDE1CSgxNStFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxNgkoMTYrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTcJKDE3K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDE4CSgxOCtFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxOQkoMTkrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjAJKDIwK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDIxCSgyMStFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyMgkoMjIrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjMJKDIzK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDI0CSgyNCtFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyNQkoMjUrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjYJKDI2K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDI3CSgyNytFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyOAkoMjgrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjkJKDI5K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDMwCSgzMCtFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQzMQkoMzErRU1NQTJSSF9TV19JUlFfQkFTRSkKKworI2RlZmluZSBNQVJLRUlOU19QQ0lfSVJRX0lOVEEJRU1NQTJSSF9HUElPX0lSUV9CQVNFKzE1CisjZGVmaW5lIE1BUktFSU5TX1BDSV9JUlFfSU5UQglFTU1BMlJIX0dQSU9fSVJRX0JBU0UrMTYKKyNkZWZpbmUgTUFSS0VJTlNfUENJX0lSUV9JTlRDCUVNTUEyUkhfR1BJT19JUlFfQkFTRSsxNworI2RlZmluZSBNQVJLRUlOU19QQ0lfSVJRX0lOVEQJRU1NQTJSSF9HUElPX0lSUV9CQVNFKzE4CisKKyNlbmRpZiAvKiBDT05GSUdfTUFSS0VJTlMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmggYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCmluZGV4IGIwZjUwMDEuLjhiZjUxMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaApAQCAtMTM4LDEwICsxMzgsOSBAQAogCWlmIChjcHVfaGFzX2ZwdSkgewogCQlpZiAoKHRzayA9PSBjdXJyZW50KSAmJiBfX2lzX2ZwdV9vd25lcigpKQogCQkJX3NhdmVfZnAoY3VycmVudCk7Ci0JCXJldHVybiB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHI7CiAJfQogCi0JcmV0dXJuIHRzay0+dGhyZWFkLmZwdS5zb2Z0LmZwcjsKKwlyZXR1cm4gdHNrLT50aHJlYWQuZnB1LmZwcjsKIH0KIAogI2VuZGlmIC8qIF9BU01fRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1X2VtdWxhdG9yLmggYi9pbmNsdWRlL2FzbS1taXBzL2ZwdV9lbXVsYXRvci5oCmluZGV4IDE2Y2I0ZDEuLjI3MzFjMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1X2VtdWxhdG9yLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHVfZW11bGF0b3IuaApAQCAtMTIsOCArMTIsOCBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICoKLSAqIEZ1cnRoZXIgcHJpdmF0ZSBkYXRhIGZvciB3aGljaCBubyBzcGFjZSBleGlzdHMgaW4gbWlwc19mcHVfc29mdF9zdHJ1Y3QuCi0gKiBUaGlzIHNob3VsZCBiZSBzdWJzdW1lZCBpbnRvIHRoZSBtaXBzX2ZwdV9zb2Z0X3N0cnVjdCBzdHJ1Y3R1cmUgYXMKKyAqIEZ1cnRoZXIgcHJpdmF0ZSBkYXRhIGZvciB3aGljaCBubyBzcGFjZSBleGlzdHMgaW4gbWlwc19mcHVfc3RydWN0LgorICogVGhpcyBzaG91bGQgYmUgc3Vic3VtZWQgaW50byB0aGUgbWlwc19mcHVfc3RydWN0IHN0cnVjdHVyZSBhcwogICogZGVmaW5lZCBpbiBwcm9jZXNzb3IuaCBhcyBzb29uIGFzIHRoZSBhYnN1cmQgd2lyZWQgYWJzb2x1dGUgYXNzZW1ibGVyCiAgKiBvZmZzZXRzIGJlY29tZSBkeW5hbWljIGF0IGNvbXBpbGUgdGltZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmgKaW5kZXggMTJkMTE4Zi4uMWY5NDY0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZnV0ZXguaApAQCAtMjIsNTEgKzIyLDUzIEBACiAJCSIJLnNldAlwdXNoCQkJCVxuIglcCiAJCSIJLnNldAlub2F0CQkJCVxuIglcCiAJCSIJLnNldAltaXBzMwkJCQlcbiIJXAotCQkiMToJbGwJJTEsICglMykJIyBfX2Z1dGV4X2F0b21pY19vcAlcbiIgXAorCQkiMToJbGwJJTEsICU0CSMgX19mdXRleF9hdG9taWNfb3AJXG4iCVwKIAkJIgkuc2V0CW1pcHMwCQkJCVxuIglcCiAJCSIJIiBpbnNuCSIJCQkJXG4iCVwKIAkJIgkuc2V0CW1pcHMzCQkJCVxuIglcCi0JCSIyOglzYwkkMSwgKCUzKQkJCVxuIglcCisJCSIyOglzYwkkMSwgJTIJCQkJXG4iCVwKIAkJIgliZXF6bAkkMSwgMWIJCQkJXG4iCVwKIAkJX19GVVRFWF9TTVBfU1lOQwkJCQkJXAogCQkiMzoJCQkJCQlcbiIJXAogCQkiCS5zZXQJcG9wCQkJCVxuIglcCiAJCSIJLnNldAltaXBzMAkJCQlcbiIJXAogCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAotCQkiNDoJbGkJJTAsICU1CQkJCVxuIglcCisJCSI0OglsaQklMCwgJTYJCQkJXG4iCVwKIAkJIglqCTJiCQkJCVxuIglcCiAJCSIJLnByZXZpb3VzCQkJCVxuIglcCiAJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJXG4iCVwKIAkJIgkiX19VQV9BRERSICJcdDFiLCA0YgkJCVxuIglcCiAJCSIJIl9fVUFfQUREUiAiXHQyYiwgNGIJCQlcbiIJXAogCQkiCS5wcmV2aW91cwkJCQlcbiIJXAotCQk6ICI9ciIgKHJldCksICI9ciIgKG9sZHZhbCkJCQkJXAotCQk6ICIwIiAoMCksICJyIiAodWFkZHIpLCAiSnIiIChvcGFyZyksICJpIiAoLUVGQVVMVCkpOwlcCisJCTogIj1yIiAocmV0KSwgIj0mciIgKG9sZHZhbCksICI9UiIgKCp1YWRkcikJCVwKKwkJOiAiMCIgKDApLCAiUiIgKCp1YWRkciksICJKciIgKG9wYXJnKSwgImkiICgtRUZBVUxUKQlcCisJCTogIm1lbW9yeSIpOwkJCQkJCVwKIAl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgewkJCQkJXAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKIAkJIgkuc2V0CXB1c2gJCQkJXG4iCVwKIAkJIgkuc2V0CW5vYXQJCQkJXG4iCVwKIAkJIgkuc2V0CW1pcHMzCQkJCVxuIglcCi0JCSIxOglsbAklMSwgKCUzKQkjIF9fZnV0ZXhfYXRvbWljX29wCVxuIiBcCisJCSIxOglsbAklMSwgJTQJIyBfX2Z1dGV4X2F0b21pY19vcAlcbiIJXAogCQkiCS5zZXQJbWlwczAJCQkJXG4iCVwKIAkJIgkiIGluc24JIgkJCQlcbiIJXAogCQkiCS5zZXQJbWlwczMJCQkJXG4iCVwKLQkJIjI6CXNjCSQxLCAoJTMpCQkJXG4iCVwKKwkJIjI6CXNjCSQxLCAlMgkJCQlcbiIJXAogCQkiCWJlcXoJJDEsIDFiCQkJCVxuIglcCiAJCV9fRlVURVhfU01QX1NZTkMJCQkJCVwKIAkJIjM6CQkJCQkJXG4iCVwKIAkJIgkuc2V0CXBvcAkJCQlcbiIJXAogCQkiCS5zZXQJbWlwczAJCQkJXG4iCVwKIAkJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiCQkJXG4iCVwKLQkJIjQ6CWxpCSUwLCAlNQkJCQlcbiIJXAorCQkiNDoJbGkJJTAsICU2CQkJCVxuIglcCiAJCSIJagkyYgkJCQlcbiIJXAogCQkiCS5wcmV2aW91cwkJCQlcbiIJXAogCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCVxuIglcCiAJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQlcbiIJXAogCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJXG4iCVwKIAkJIgkucHJldmlvdXMJCQkJXG4iCVwKLQkJOiAiPXIiIChyZXQpLCAiPXIiIChvbGR2YWwpCQkJCVwKLQkJOiAiMCIgKDApLCAiciIgKHVhZGRyKSwgIkpyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpKTsJXAorCQk6ICI9ciIgKHJldCksICI9JnIiIChvbGR2YWwpLCAiPVIiICgqdWFkZHIpCQlcCisJCTogIjAiICgwKSwgIlIiICgqdWFkZHIpLCAiSnIiIChvcGFyZyksICJpIiAoLUVGQVVMVCkJXAorCQk6ICJtZW1vcnkiKTsJCQkJCQlcCiAJfSBlbHNlCQkJCQkJCQlcCiAJCXJldCA9IC1FTk9TWVM7CQkJCQkJXAogfQpAQCAtODksMjMgKzkxLDIzIEBACiAKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBGVVRFWF9PUF9TRVQ6Ci0JCV9fZnV0ZXhfYXRvbWljX29wKCJtb3ZlCSQxLCAlejQiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJX19mdXRleF9hdG9taWNfb3AoIm1vdmUJJDEsICV6NSIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwogCQlicmVhazsKIAogCWNhc2UgRlVURVhfT1BfQUREOgotCQlfX2Z1dGV4X2F0b21pY19vcCgiYWRkdQkkMSwgJTEsICV6NCIsCisJCV9fZnV0ZXhfYXRvbWljX29wKCJhZGR1CSQxLCAlMSwgJXo1IiwKIAkJICAgICAgICAgICAgICAgICAgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgRlVURVhfT1BfT1I6Ci0JCV9fZnV0ZXhfYXRvbWljX29wKCJvcgkkMSwgJTEsICV6NCIsCisJCV9fZnV0ZXhfYXRvbWljX29wKCJvcgkkMSwgJTEsICV6NSIsCiAJCSAgICAgICAgICAgICAgICAgIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwogCQlicmVhazsKIAljYXNlIEZVVEVYX09QX0FORE46Ci0JCV9fZnV0ZXhfYXRvbWljX29wKCJhbmQJJDEsICUxLCAlejQiLAorCQlfX2Z1dGV4X2F0b21pY19vcCgiYW5kCSQxLCAlMSwgJXo1IiwKIAkJICAgICAgICAgICAgICAgICAgcmV0LCBvbGR2YWwsIHVhZGRyLCB+b3BhcmcpOwogCQlicmVhazsKIAljYXNlIEZVVEVYX09QX1hPUjoKLQkJX19mdXRleF9hdG9taWNfb3AoInhvcgkkMSwgJTEsICV6NCIsCisJCV9fZnV0ZXhfYXRvbWljX29wKCJ4b3IJJDEsICUxLCAlejUiLAogCQkgICAgICAgICAgICAgICAgICByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kZGI1MDc0L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGRiNTA3NC9tYzE0NjgxOHJ0Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWI5YWNiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kZGI1MDc0L21jMTQ2ODE4cnRjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAwMyBieSBSYWxmIEJhZWNobGUKLSAqCi0gKiBSVEMgcm91dGluZXMgZm9yIFBDIHN0eWxlIGF0dGFjaGVkIERhbGxhcyBjaGlwLgotICovCi0jaWZuZGVmIF9fQVNNX01BQ0hfRERCNTA3NF9NQzE0NjgxOFJUQ19ICi0jZGVmaW5lIF9fQVNNX01BQ0hfRERCNTA3NF9NQzE0NjgxOFJUQ19ICi0KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1MDc0Lmg+Ci0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi0jZGVmaW5lIFJUQ19QT1JUKHgpCSgweDcwICsgKHgpKQotI2RlZmluZSBSVENfSVJRCQk4Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBDTU9TX1JFQUQodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoS1NFRzFBRERSKEREQl9QQ0lfTUVNX0JBU0UpK2FkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgQ01PU19XUklURSh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoS1NFRzFBRERSKEREQl9QQ0lfTUVNX0JBU0UpK2FkZHIpID0gZGF0YTsKLX0KLQotI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCi0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0REQjUwNzRfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRlYy9wYXJhbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRlYy9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTRmMGUzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kZWMvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9ERUNfUEFSQU1fSAotI2RlZmluZSBfX0FTTV9NQUNIX0RFQ19QQVJBTV9ICi0KLS8qCi0gKiBsb2cyKEhaKSwgY2hhbmdlIHRoaXMgaGVyZSBpZiB5b3Ugd2FudCBhbm90aGVyIEhaIHZhbHVlLiBUaGlzIGlzIGFsc28KLSAqIHVzZWQgaW4gZGVjX3RpbWVfaW5pdC4gIE1pbmltdW0gaXMgMSwgTWF4aW11bSBpcyAxNS4KLSAqLwotI2RlZmluZSBMT0dfMl9IWiA3Ci0jZGVmaW5lIEhaICgxIDw8IExPR18yX0haKQotCi0jZW5kaWYgLyogX19BU01fTUFDSF9ERUNfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWVtbWEycmgvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZW1tYTJyaC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U2NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWVtbWEycmgvaXJxLmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0VNTUEyUkhfSVJRX0gKKyNkZWZpbmUgX19BU01fTUFDSF9FTU1BMlJIX0lSUV9ICisKKyNkZWZpbmUgTlJfSVJRUwkyNTYKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfRU1NQTJSSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiNzZiMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX0VYQ0lURV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorI2RlZmluZSBfX0FTTV9NQUNIX0VYQ0lURV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisvKgorICogQmFzbGVyIGVYY2l0ZSBoYXMgYW4gUk05MTIyIHByb2Nlc3Nvci4KKyAqLworI2RlZmluZSBjcHVfaGFzX3dhdGNoCQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkwCisjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTAKKyNkZWZpbmUgY3B1X2hhc192Y2UJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkwCisjZGVmaW5lIGNwdV9oYXNfcHJlZmV0Y2gJMQorI2RlZmluZSBjcHVfaGFzX21jaGVjawkJMAorI2RlZmluZSBjcHVfaGFzX2VqdGFnCQkwCisKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkxCisjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJMAorI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJMAorI2RlZmluZSBjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMJMAorI2RlZmluZSBjcHVfaGFzX2RzcAkJMAorI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJMAorCisjZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0cwkJMQorCisjZGVmaW5lIGNwdV9oYXNfc3Vic2V0X3BjYWNoZXMJMAorCisjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKKyNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQkzMgorI2RlZmluZSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpCTMyCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0VYQ0lURV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvZXhjaXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyNjEwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvZXhjaXRlLmgKQEAgLTAsMCArMSwxNTUgQEAKKyNpZm5kZWYgX19FWENJVEVfSF9fCisjZGVmaW5lIF9fRVhDSVRFX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBFWENJVEVfQ1BVX0VYVF9DTE9DSyAxMDAwMDAwMDAKKworI2lmICFkZWZpbmVkKF9fQVNTRU1CTEVSX18pCit2b2lkIF9faW5pdCBleGNpdGVfa2dkYl9pbml0KHZvaWQpOwordm9pZCBleGNpdGVfcHJvY2ZzX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1zaXplOworZXh0ZXJuIGNoYXIgbW9kZXR0eVtdOworZXh0ZXJuIHUzMiB1bml0X2lkOworI2VuZGlmCisKKy8qIEJhc2UgbmFtZSBmb3IgWElDQVAgZGV2aWNlcyAqLworI2RlZmluZSBYSUNBUF9OQU1FCSJ4aWNhcF9ncGkiCisKKy8qIE9DRCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIExLQjAJCTB4MDAzOAorI2RlZmluZSBMS0I1CQkweDAxMjgKKyNkZWZpbmUgTEtNNQkJMHgwMTJDCisjZGVmaW5lIExLQjcJCTB4MDEzOAorI2RlZmluZSBMS003CQkweDAxM2MKKyNkZWZpbmUgTEtCOAkJMHgwMTQwCisjZGVmaW5lIExLTTgJCTB4MDE0NAorI2RlZmluZSBMS0I5CQkweDAxNDgKKyNkZWZpbmUgTEtNOQkJMHgwMTRjCisjZGVmaW5lIExLQjEwCQkweDAxNTAKKyNkZWZpbmUgTEtNMTAJCTB4MDE1NAorI2RlZmluZSBMS0IxMQkJMHgwMTU4CisjZGVmaW5lIExLTTExCQkweDAxNWMKKyNkZWZpbmUgTEtCMTIJCTB4MDE2MAorI2RlZmluZSBMS00xMgkJMHgwMTY0CisjZGVmaW5lIExLQjEzCQkweDAxNjgKKyNkZWZpbmUgTEtNMTMJCTB4MDE2YworI2RlZmluZSBMRFAwCQkweDAyMDAKKyNkZWZpbmUgTERQMQkJMHgwMjEwCisjZGVmaW5lIExEUDIJCTB4MDIyMAorI2RlZmluZSBMRFAzCQkweDAyMzAKKyNkZWZpbmUgSU5UUElOMAkJMHgwQTQwCisjZGVmaW5lIElOVFBJTjEJCTB4MEE0NAorI2RlZmluZSBJTlRQSU4yCQkweDBBNDgKKyNkZWZpbmUgSU5UUElOMwkJMHgwQTRDCisjZGVmaW5lIElOVFBJTjQJCTB4MEE1MAorI2RlZmluZSBJTlRQSU41CQkweDBBNTQKKyNkZWZpbmUgSU5UUElONgkJMHgwQTU4CisjZGVmaW5lIElOVFBJTjcJCTB4MEE1QworCisKKworCisvKiBUSVRBTiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENQUlIJCTB4MDAwNAorI2RlZmluZSBDUERTUgkJMHgwMDA4CisjZGVmaW5lIENQVEMwUgkJMHgwMDBjCisjZGVmaW5lIENQVEMxUgkJMHgwMDEwCisjZGVmaW5lIENQQ0ZHMAkJMHgwMDIwCisjZGVmaW5lIENQQ0ZHMQkJMHgwMDI0CisjZGVmaW5lIENQRFNUMEEJCTB4MDAyOAorI2RlZmluZSBDUERTVDBCCQkweDAwMmMKKyNkZWZpbmUgQ1BEU1QxQQkJMHgwMDMwCisjZGVmaW5lIENQRFNUMUIJCTB4MDAzNAorI2RlZmluZSBDUFhEU1RBCQkweDAwMzgKKyNkZWZpbmUgQ1BYRFNUQgkJMHgwMDNjCisjZGVmaW5lIENQWENJU1JBCTB4MDA0OAorI2RlZmluZSBDUFhDSVNSQgkweDAwNGMKKyNkZWZpbmUgQ1BHSUcwRVIJMHgwMDUwCisjZGVmaW5lIENQR0lHMUVSCTB4MDA1NAorI2RlZmluZSBDUEdSV0wJCTB4MDA2OAorI2RlZmluZSBDUFVSU0xNVAkweDAwZjgKKyNkZWZpbmUgVUFDRkcJCTB4MDIwMAorI2RlZmluZSBVQUlOVFMJCTB4MDIwNAorI2RlZmluZSBTRFJYRkNJRQkweDQ4MjgKKyNkZWZpbmUgU0RUWEZDSUUJMHg0OTI4CisjZGVmaW5lIElOVFAwU3RhdHVzMAkweDFCMDAKKyNkZWZpbmUgSU5UUDBNYXNrMAkweDFCMDQKKyNkZWZpbmUgSU5UUDBTZXQwCTB4MUIwOAorI2RlZmluZSBJTlRQMENsZWFyMAkweDFCMEMKKyNkZWZpbmUgR1hDRkcJCTB4NTAwMAorI2RlZmluZSBHWERNQURSUEZYCTB4NTAxOAorI2RlZmluZSBHWERNQV9ERVNDQURSCTB4NTAxYworI2RlZmluZSBHWENIMFRERVNTVFJUCTB4NTA1NAorCisvKiBJUlEgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTk1JQ09ORklHCQkweGFjMAorI2RlZmluZSBUSVRBTl9NU0dJTlQJMHhjNAorI2RlZmluZSBUSVRBTl9JUlEJKChUSVRBTl9NU0dJTlQgLyAweDIwKSArIDIpCisjZGVmaW5lIEZQR0EwX01TR0lOVAkweDVhCisjZGVmaW5lIEZQR0EwX0lSUQkoKEZQR0EwX01TR0lOVCAvIDB4MjApICsgMikKKyNkZWZpbmUgRlBHQTFfTVNHSU5UCTB4N2IKKyNkZWZpbmUgRlBHQTFfSVJRCSgoRlBHQTFfTVNHSU5UIC8gMHgyMCkgKyAyKQorI2RlZmluZSBQSFlfTVNHSU5UCTB4OWMKKyNkZWZpbmUgUEhZX0lSUQkJKChQSFlfTVNHSU5UICAgLyAweDIwKSArIDIpCisKKyNpZiBkZWZpbmVkKENPTkZJR19CQVNMRVJfRVhDSVRFX1BST1RPVFlQRSkKKy8qIFByZS1yZWxlYXNlIHVuaXRzIHVzZWQgaW50ZXJydXB0IHBpbiAjOSAqLworI2RlZmluZSBVU0JfSVJRCQkxMQorI2Vsc2UKKy8qIFJlLWRlc2lnbmVkIHVuaXRzIHVzZSBpbnRlcnJ1cHQgcGluICMxICovCisjZGVmaW5lIFVTQl9NU0dJTlQJMHgzOQorI2RlZmluZSBVU0JfSVJRCQkoKFVTQl9NU0dJTlQgLyAweDIwKSArIDIpCisjZW5kaWYKKyNkZWZpbmUgVElNRVJfSVJRCTEyCisKKworLyogRGV2aWNlIGFkZHJlc3MgcmFuZ2VzICovCisjZGVmaW5lIEVYQ0lURV9PRkZTX09DRAkJMHgxZmZmYzAwMAorI2RlZmluZQlFWENJVEVfU0laRV9PQ0QJCSgxNiAqIDEwMjQpCisjZGVmaW5lIEVYQ0lURV9QSFlTX09DRAkJQ1BIWVNBRERSKEVYQ0lURV9PRkZTX09DRCkKKyNkZWZpbmUgRVhDSVRFX0FERFJfT0NECQlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX09DRCkKKworI2RlZmluZSBFWENJVEVfT0ZGU19TQ1JBTSAJMHgxZmZmYTAwMAorI2RlZmluZQlFWENJVEVfU0laRV9TQ1JBTQkoOCA8PCAxMCkKKyNkZWZpbmUgRVhDSVRFX1BIWVNfU0NSQU0gCUNQSFlTQUREUihFWENJVEVfT0ZGU19TQ1JBTSkKKyNkZWZpbmUgRVhDSVRFX0FERFJfU0NSQU0gCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfU0NSQU0pCisKKyNkZWZpbmUgRVhDSVRFX09GRlNfUENJX0lPCTB4MWZmZjgwMDAKKyNkZWZpbmUJRVhDSVRFX1NJWkVfUENJX0lPCSg4IDw8IDEwKQorI2RlZmluZSBFWENJVEVfUEhZU19QQ0lfSU8JQ1BIWVNBRERSKEVYQ0lURV9PRkZTX1BDSV9JTykKKyNkZWZpbmUgRVhDSVRFX0FERFJfUENJX0lPIAlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX1BDSV9JTykKKworI2RlZmluZSBFWENJVEVfT0ZGU19USVRBTgkweDFmZmYwMDAwCisjZGVmaW5lIEVYQ0lURV9TSVpFX1RJVEFOCSgzMiA8PCAxMCkKKyNkZWZpbmUgRVhDSVRFX1BIWVNfVElUQU4JQ1BIWVNBRERSKEVYQ0lURV9PRkZTX1RJVEFOKQorI2RlZmluZSBFWENJVEVfQUREUl9USVRBTglDS1NFRzFBRERSKEVYQ0lURV9PRkZTX1RJVEFOKQorCisjZGVmaW5lIEVYQ0lURV9PRkZTX1BDSV9NRU0JMHgxZmZlMDAwMAorI2RlZmluZSBFWENJVEVfU0laRV9QQ0lfTUVNCSg2NCA8PCAxMCkKKyNkZWZpbmUgRVhDSVRFX1BIWVNfUENJX01FTQlDUEhZU0FERFIoRVhDSVRFX09GRlNfUENJX01FTSkKKyNkZWZpbmUgRVhDSVRFX0FERFJfUENJX01FTQlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX1BDSV9NRU0pCisKKyNkZWZpbmUgRVhDSVRFX09GRlNfRlBHQQkweDFmZmRjMDAwCisjZGVmaW5lIEVYQ0lURV9TSVpFX0ZQR0EJKDE2IDw8IDEwKQorI2RlZmluZSBFWENJVEVfUEhZU19GUEdBCUNQSFlTQUREUihFWENJVEVfT0ZGU19GUEdBKQorI2RlZmluZSBFWENJVEVfQUREUl9GUEdBCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfRlBHQSkKKworI2RlZmluZSBFWENJVEVfT0ZGU19OQU5ECTB4MWZmZDgwMDAKKyNkZWZpbmUgRVhDSVRFX1NJWkVfTkFORAkoMTYgPDwgMTApCisjZGVmaW5lIEVYQ0lURV9QSFlTX05BTkQJQ1BIWVNBRERSKEVYQ0lURV9PRkZTX05BTkQpCisjZGVmaW5lIEVYQ0lURV9BRERSX05BTkQJQ0tTRUcxQUREUihFWENJVEVfT0ZGU19OQU5EKQorCisjZGVmaW5lIEVYQ0lURV9PRkZTX0JPT1RST00JMHgxZjAwMDAwMAorI2RlZmluZSBFWENJVEVfU0laRV9CT09UUk9NCSg4IDw8IDIwKQorI2RlZmluZSBFWENJVEVfUEhZU19CT09UUk9NCUNQSFlTQUREUihFWENJVEVfT0ZGU19CT09UUk9NKQorI2RlZmluZSBFWENJVEVfQUREUl9CT09UUk9NCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfQk9PVFJPTSkKKworLyogRlBHQSBhZGRyZXNzIG9mZnNldHMgKi8KKyNkZWZpbmUgRVhDSVRFX0ZQR0FfRFBSCQkweDAxMDQJLyogZHVhbC1wb3J0ZWQgcmFtICovCisjZGVmaW5lIEVYQ0lURV9GUEdBX1NZU0NUTAkweDAyMDAJLyogc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIgYmxvY2sgKi8KKworI2VuZGlmIC8qIF9fRVhDSVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGVfbmFuZGZsYXNoLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL2V4Y2l0ZV9uYW5kZmxhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNmNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGVfbmFuZGZsYXNoLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fRVhDSVRFX05BTkRGTEFTSF9IX18KKyNkZWZpbmUgX19FWENJVEVfTkFOREZMQVNIX0hfXworCisvKiBSZXNvdXJjZSBuYW1lcyAqLworI2RlZmluZSBFWENJVEVfTkFOREZMQVNIX1JFU09VUkNFX1JFR1MJImV4Y2l0ZV9uYW5kZmxhc2hfcmVncyIKKworI2VuZGlmIC8qIF9fRVhDSVRFX05BTkRGTEFTSF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvcm05a19ldGguaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvcm05a19ldGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcwNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9ybTlrX2V0aC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZiAhZGVmaW5lZChfX1JNOUtfRVRIX0hfXykKKyNkZWZpbmUgX19STTlLX0VUSF9IX18KKworI2RlZmluZSBSTTlLX0dFX05BTUUJCQkicm05a19nZSIKKworLyogUmVzb3VyY2UgbmFtZXMgKi8KKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9NQUMgICAgICAJInJtOWtfZ2VfbWFjIgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX01TVEFUICAgICAgCSJybTlrX2dlX21zdGF0IgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX1BLVFBST0MJInJtOWtfZ2VfcGt0cHJvYyIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9YRE1BCQkicm05a19nZV94ZG1hIgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0ZJRk9fUlggIAkicm05a19nZV9maWZvX3J4IgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0ZJRk9fVFggIAkicm05a19nZV9maWZvX3R4IgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0ZJRk9NRU1fUlggIAkicm05a19nZV9maWZvX21lbW9yeV9yeCIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9GSUZPTUVNX1RYICAJInJtOWtfZ2VfZmlmb19tZW1vcnlfdHgiCisjZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfUEhZICAgICAgCSJybTlrX2dlX3BoeSIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9ETUFERVNDX1JYICAJInJtOWtfZ2VfZG1hZGVzY19yeCIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9ETUFERVNDX1RYICAJInJtOWtfZ2VfZG1hZGVzY190eCIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9JUlFfTUFJTgkicm05a19nZV9pcnFfbWFpbiIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9JUlFfUEhZCSJybTlrX2dlX2lycV9waHkiCisjZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfR1BJX1NMSUNFCSJybTlrX2dlX2dwaV9zbGljZSIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9NRElPX0NIQU5ORUwJInJtOWtfZ2VfbWRpb19jaGFubmVsIgorCisjZW5kaWYgLyogIWRlZmluZWQoX19STTlLX0VUSF9IX18pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL3JtOWtfd2R0LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL3JtOWtfd2R0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhM2MwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvcm05a193ZHQuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fUk05S19XRFRfSF9fCisjZGVmaW5lIF9fUk05S19XRFRfSF9fCisKKy8qIERldmljZSBuYW1lICovCisjZGVmaW5lIFdEVF9OQU1FCQkid2R0X2dwaSIKKworLyogUmVzb3VyY2UgbmFtZXMgKi8KKyNkZWZpbmUgV0RUX1JFU09VUkNFX1JFR1MJImV4Y2l0ZV93YXRjaGRvZ19yZWdzIgorI2RlZmluZSBXRFRfUkVTT1VSQ0VfSVJRCSJleGNpdGVfd2F0Y2hkb2dfaXJxIgorI2RlZmluZSBXRFRfUkVTT1VSQ0VfQ09VTlRFUgkiZXhjaXRlX3dhdGNoZG9nX2NvdW50ZXIiCisKKyNlbmRpZiAvKiBfX1JNOUtfV0RUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9ybTlrX3hpY2FwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL3JtOWtfeGljYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDk1Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9ybTlrX3hpY2FwLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfX0VYQ0lURV9YSUNBUF9IX18KKyNkZWZpbmUgX19FWENJVEVfWElDQVBfSF9fCisKKworLyogUmVzb3VyY2UgbmFtZXMgKi8KKyNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfRklGT19SWAkJInhpY2FwX2ZpZm9fcngiCisjZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0ZJRk9fVFgJCSJ4aWNhcF9maWZvX3R4IgorI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9YRE1BIAkJInhpY2FwX3hkbWEiCisjZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0RNQURFU0MJCSJ4aWNhcF9kbWFkZXNjIgorI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9QS1RQUk9DICAJInhpY2FwX3BrdHByb2MiCisjZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0lSUQkJInhpY2FwX2lycSIKKyNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfR1BJX1NMSUNFCSJ4aWNhcF9ncGlfc2xpY2UiCisjZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0ZJRk9fQkxLCQkieGljYXBfZmlmb19ibG9ja3MiCisjZGVmaW5lIFhJQ0FQX1JFU09VUkNFX1BLVF9TVFJFQU0JInhpY2FwX3BrdF9zdHJlYW0iCisKKyNlbmRpZiAvKiBfX0VYQ0lURV9YSUNBUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGQxMmY5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9ICi0KLSNkZWZpbmUgSFoJCTEwMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IDJhMzdiZWQuLmY3YzVkYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0xMyw3ICsxMyw3IEBACiAgKi8KICNkZWZpbmUgY3B1X2hhc190bGIJCTEKICNkZWZpbmUgY3B1X2hhc180a2V4CQkxCi0jZGVmaW5lIGNwdV9oYXNfNGtjYWNoZQkJMQorI2RlZmluZSBjcHVfaGFzXzRrX2NhY2hlCTEKICNkZWZpbmUgY3B1X2hhc19mcHUJCTEKICNkZWZpbmUgY3B1X2hhc18zMmZwcgkJMQogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggMmQyZjViOS4uMTljMmQxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTMxLDYgKzMxLDkgQEAKICNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCiAjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCiAKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkxCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJMQorCiAjZGVmaW5lIGNwdV9oYXNfc3Vic2V0X3BjYWNoZXMJMQogCiAjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggMzYwNzBiNS4uZjBlZjFhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTM4LDYgKzM4LDggQEAKICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCiAjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCiAjZGVmaW5lIGNwdV9oYXNfZHNwCQkwCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJMQorCiAKICNkZWZpbmUgY3B1X2hhc19taXBzMzJyMQkwCiAjZGVmaW5lIGNwdV9oYXNfbWlwczMycjIJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovcGFyYW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYXp6L3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTc2M2EuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9KQVpaX1BBUkFNX0gKLSNkZWZpbmUgX19BU01fTUFDSF9KQVpaX1BBUkFNX0gKLQotLyoKLSAqIEphenogaXMgY3VycmVudGx5IHVzaW5nIHRoZSBpbnRlcm5hbCAxMDBIeiB0aW1lciBvZiB0aGUgUjQwMzAKLSAqLwotI2RlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0pBWlpfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCBlMDZhZjZjLi4xMmM5MzcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMTcsNyArMTcsNyBAQAogI2lmZGVmIENPTkZJR19DUFVfTUlQUzMyCiAjZGVmaW5lIGNwdV9oYXNfdGxiCQkxCiAjZGVmaW5lIGNwdV9oYXNfNGtleAkJMQotI2RlZmluZSBjcHVfaGFzXzRrY2FjaGUJCTEKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCiAvKiAjZGVmaW5lIGNwdV9oYXNfZnB1CQk/ICovCiAvKiAjZGVmaW5lIGNwdV9oYXNfMzJmcHIJPyAqLwogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpZmRlZiBDT05GSUdfQ1BVX01JUFM2NAogI2RlZmluZSBjcHVfaGFzX3RsYgkJMQogI2RlZmluZSBjcHVfaGFzXzRrZXgJCTEKLSNkZWZpbmUgY3B1X2hhc180a2NhY2hlCQkxCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJMQogLyogI2RlZmluZSBjcHVfaGFzX2ZwdQkJPyAqLwogLyogI2RlZmluZSBjcHVfaGFzXzMyZnByCT8gKi8KICNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1ZWY2ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBieSBSYWxmIEJhZWNobGUKLSAqLwotI2lmbmRlZiBfX0FTTV9NQUNIX01JUFNfUEFSQU1fSAotI2RlZmluZSBfX0FTTV9NQUNIX01JUFNfUEFSQU1fSAotCi0jZGVmaW5lIEhaCQkxMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfTUlQU19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcWVtdS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXFlbXUvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzMGVlNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcWVtdS9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBieSBSYWxmIEJhZWNobGUKLSAqLwotI2lmbmRlZiBfX0FTTV9NQUNIX1FFTVVfUEFSQU1fSAotI2RlZmluZSBfX0FTTV9NQUNIX1FFTVVfUEFSQU1fSAotCi0jZGVmaW5lIEhaCQkxMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfUUVNVV9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggOTFlN2NmNS4uMTE0MTBhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybTIwMC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMTQsNyArMTQsNyBAQAogCiAjZGVmaW5lIGNwdV9oYXNfdGxiCQkxCiAjZGVmaW5lIGNwdV9oYXNfNGtleAkJMQotI2RlZmluZSBjcHVfaGFzXzRrY2FjaGUJCTEKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCiAjZGVmaW5lIGNwdV9oYXNfZnB1CQkxCiAjZGVmaW5lIGNwdV9oYXNfMzJmcHIJCTEKICNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkxCkBAIC0zNSwxMCArMzUsOCBAQAogI2RlZmluZSBjcHVfaGFzX25vZnB1ZXgJCTAKICNkZWZpbmUgY3B1X2hhc182NGJpdHMJCTEKIAotI2RlZmluZSBjcHVfaGFzX3N1YnNldF9wY2FjaGVzCTAJLyogTm8gUy1jYWNoZSBvbiBSNTAwMCBJIHRoaW5rIC4uLiAgKi8KICNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkzMgogI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCTMyCi0jZGVmaW5lIGNwdV9zY2FjaGVfbGluZV9zaXplKCkJMAkvKiBObyBTLWNhY2hlIG9uIFI1MDAwIEkgdGhpbmsgLi4uICAqLwogCiAjZGVmaW5lIGNwdV9oYXNfbWlwczMycjEJMAogI2RlZmluZSBjcHVfaGFzX21pcHMzMnIyCTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaW0vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtc2ltL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IGNhZGJlOGUuLmQ5NjUzZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaW0vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXNpbS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMTYsNyArMTYsNyBAQAogI2lmZGVmIENPTkZJR19DUFVfTUlQUzMyCiAjZGVmaW5lIGNwdV9oYXNfdGxiCQkxCiAjZGVmaW5lIGNwdV9oYXNfNGtleAkJMQotI2RlZmluZSBjcHVfaGFzXzRrY2FjaGUJCTEKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCiAjZGVmaW5lIGNwdV9oYXNfZnB1CQkwCiAvKiAjZGVmaW5lIGNwdV9oYXNfMzJmcHIJPyAqLwogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKQEAgLTQxLDcgKzQxLDcgQEAKICNpZmRlZiBDT05GSUdfQ1BVX01JUFM2NAogI2RlZmluZSBjcHVfaGFzX3RsYgkJMQogI2RlZmluZSBjcHVfaGFzXzRrZXgJCTEKLSNkZWZpbmUgY3B1X2hhc180a2NhY2hlCQkxCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJMQogLyogI2RlZmluZSBjcHVfaGFzX2ZwdQkJPyAqLwogLyogI2RlZmluZSBjcHVfaGFzXzMyZnByCT8gKi8KICNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtd3JwcG1jL21hY2gtZ3Q2NDEyMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXdycHBtYy9tYWNoLWd0NjQxMjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkyMDVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXdycHBtYy9tYWNoLWd0NjQxMjAuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogVGhpcyBpcyBhIGRpcmVjdCBjb3B5IG9mIHRoZSBldjk2MTAwLmggZmlsZSwgd2l0aCBhIGdsb2JhbAorICogc2VhcmNoIGFuZCByZXBsYWNlLiAgVGhlIG51bWJlcnMgYXJlIHRoZSBzYW1lLgorICoKKyAqIFRoZSByZWFzb24gSSdtIGR1cGxpY2F0aW5nIHRoaXMgaXMgc28gdGhhdCB0aGUgNjQxMjAvOTYxMDAKKyAqIGRlZmluZXMgd29uJ3QgYmUgY29uZnVzaW5nIGluIHRoZSBzb3VyY2UgY29kZS4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX0dUNjQxMjBfSAorI2RlZmluZSBfX0FTTV9NSVBTX0dUNjQxMjBfSAorCisvKgorICogVGhpcyBpcyB0aGUgQ1BVIHBoeXNpY2FsIG1lbW9yeSBtYXAgb2YgUFBNQyBCb2FyZDoKKyAqCisgKiAgICAweDAwMDAwMDAwLTB4MDNGRkZGRkYgICAgICAtIDY0TUIgU0RSQU0gKFNDU1swXSMpCisgKiAgICAweDFDMDAwMDAwLTB4MUMwMDAwMDAgICAgICAtIExFRCAoQ1MwKQorICogICAgMHgxQzgwMDAwMC0weDFDODAwMDA3ICAgICAgLSBVQVJUIDE2NTUwIHBvcnQgKENTMSkKKyAqICAgIDB4MUYwMDAwMDAtMHgxRjAwMDAwMCAgICAgIC0gTWFpbEJveCAoQ1MzKQorICogICAgMHgxRkMwMDAwMC0weDIwMDAwMDAwICAgICAgLSA0TUIgRmxhc2ggKEJPT1QgQ1MpCisgKi8KKworI2RlZmluZSBXUlBQTUNfU0RSQU1fU0NTMF9CQVNFCTB4MDAwMDAwMDAKKyNkZWZpbmUgV1JQUE1DX1NEUkFNX1NDUzBfU0laRQkweDA0MDAwMDAwCisKKyNkZWZpbmUgV1JQUE1DX1VBUlQxNjU1MF9CQVNFCTB4MUM4MDAwMDAKKyNkZWZpbmUgV1JQUE1DX1VBUlQxNjU1MF9DTE9DSwkzNjg2NDAwIC8qIDMuNjhNSFogKi8KKworI2RlZmluZSBXUlBQTUNfTEVEX0JBU0UJCTB4MUMwMDAwMDAKKyNkZWZpbmUgV1JQUE1DX01CT1hfQkFTRQkweDFGMDAwMDAwCisKKyNkZWZpbmUgV1JQUE1DX0JPT1RST01fQkFTRQkweDFGQzAwMDAwCisjZGVmaW5lIFdSUFBNQ19CT09UUk9NX1NJWkUJMHgwMDQwMDAwMCAvKiA0TSBGbGFzaCAqLworCisjZGVmaW5lIFdSUFBNQ19NSVBTX1RJTUVSX0lSUQk3IC8qIE1JUFMgY29tcGFyZS9jb3VudCB0aW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgV1JQUE1DX1VBUlQxNjU1MF9JUlEJNgorI2RlZmluZSBXUlBQTUNfUENJX0lOVEFfSVJRCTMKKworLyoKKyAqIFBDSSBCdXMgSS9PIGFuZCBNZW1vcnkgcmVzb3VyY2VzIGFsbG9jYXRpb24KKyAqCisgKiBOT1RFOiBXZSBvbmx5IGhhdmUgUENJXzAgaG9zZSBpbnRlcmZhY2UKKyAqLworI2RlZmluZSBHVF9QQ0lfTUVNX0JBU0UJMHgxMzAwMDAwMFVMCisjZGVmaW5lIEdUX1BDSV9NRU1fU0laRQkweDAyMDAwMDAwVUwKKyNkZWZpbmUgR1RfUENJX0lPX0JBU0UJMHgxMTAwMDAwMFVMCisjZGVmaW5lIEdUX1BDSV9JT19TSVpFCTB4MDIwMDAwMDBVTAorI2RlZmluZSBHVF9JU0FfSU9fQkFTRQlQQ0lfSU9fQkFTRQorCisvKgorICogUENJIGludGVycnVwdHMgd2lsbCBjb21lIGluIG9uIGVpdGhlciB0aGUgSU5UQSBvciBJTlREIGludGVycnVwcyBsaW5lcywKKyAqIHdoaWNoIGFyZSBtYXBwZWQgdG8gdGhlICMyIGFuZCAjNSBpbnRlcnJ1cHQgcGlucyBvZiB0aGUgTUlQUy4gIE9uIG91cgorICogYm9hcmRzLCB0aGV5IGFsbCBlaXRoZXIgY29tZSBpbiBvbiBJbnREIG9yIHRoZXkgYWxsIGNvbWUgaW4gb24gSW50QSwgdGhleQorICogYXJlbid0IG1peGVkLiBUaGVyZSBjYW4gYmUgbnVtZXJvdXMgUENJIGludGVycnVwdHMsIHNvIHdlIGtlZXAgYSBsaXN0IG9mIHRoZQorICogInJlcXVlc3RlZCIgaW50ZXJydXB0IG51bWJlcnMgYW5kIGdvIHRocm91Z2ggdGhlIGxpc3Qgd2hlbmV2ZXIgd2UgZ2V0IGFuCisgKiBJbnRBL0QuCisgKgorICogSW50ZXJydXB0cyA8IDggYXJlIGRpcmVjdGx5IHdpcmVkIHRvIHRoZSBwcm9jZXNzb3I7IFBDSSBJTlRBIGlzIDggYW5kCisgKiBJTlREIGlzIDExLgorICovCisjZGVmaW5lIEdUX1RJTUVSCTQKKyNkZWZpbmUgR1RfSU5UQQkJMgorI2RlZmluZSBHVF9JTlRECQk1CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBHVDY0MTIwIGludGVybmFsIHJlZ2lzdGVyIHNwYWNlIGJhc2UgYWRkcmVzcworICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBndDY0MTIwX2Jhc2U7CisKKyNkZWZpbmUgR1Q2NDEyMF9CQVNFCShndDY0MTIwX2Jhc2UpCisKKy8qIGRlZmluZSBXUlBQTUNfRUFSTFlfREVCVUcgdG8gZW5hYmxlIGVhcmx5IG91dHB1dCBzb21ldGhpbmcgdG8gVUFSVCAqLworI3VuZGVmIFdSUFBNQ19FQVJMWV9ERUJVRworCisjaWZkZWYgV1JQUE1DX0VBUkxZX0RFQlVHCitleHRlcm4gdm9pZCB3cnBwbWNfbGVkX29uKGludCBtYXNrKTsKK2V4dGVybiB2b2lkIHdycHBtY19sZWRfb2ZmKGludCBtYXNrKTsKK2V4dGVybiB2b2lkIHdycHBtY19lYXJseV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworI2Vsc2UKKyNkZWZpbmUgd3JwcG1jX2Vhcmx5X3ByaW50ayhmbXQsIC4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYgLyogV1JQUE1DX0VBUkxZX0RFQlVHICovCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9NSVBTX0dUNjQxMjBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCmluZGV4IDVhZjc1MTcuLjk4YjY4MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKQEAgLTE0NTEsMTIgKzE0NTEsMTAgQEAKIHsKIAlpZiAoKHByZXZpb3VzICYgX19FTVRfRU5BQkxFKSkKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIJLnNldAlub3Jlb3JkZXIJCQkJXG4iCiAJCSIJLnNldAltaXBzMzJyMgkJCQlcbiIKIAkJIgkud29yZAkweDQxNjAwYmUxCQkjIGVtdAkJXG4iCiAJCSIJZWhiCQkJCQkJXG4iCi0JCSIJLnNldAltaXBzMAkJCQkJXG4iCi0JCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIpOworCQkiCS5zZXQJbWlwczAJCQkJCVxuIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2VoYih2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW16b25lLmgKaW5kZXggN2JkZTQ0My4uZjZiZDJlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21tem9uZS5oCkBAIC0xNCwxNyArMTQsNiBAQAogI2RlZmluZSBrdmFkZHJfdG9fbmlkKGt2YWRkcikJcGFfdG9fbmlkKF9fcGEoa3ZhZGRyKSkKICNkZWZpbmUgcGZuX3RvX25pZChwZm4pCQlwYV90b19uaWQoKHBmbikgPDwgUEFHRV9TSElGVCkKIAotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJCQkJCVwKLSh7CQkJCQkJCQlcCi0gCXVuc2lnbmVkIGxvbmcgX19wZm4gPSAocGZuKTsJCQkJXAotIAlpbnQgX19uID0gcGZuX3RvX25pZChfX3Bmbik7CQkJCVwKLQkoKF9fbiA+PSAwKSA/IChfX3BmbiA8IE5PREVfREFUQShfX24pLT5ub2RlX3N0YXJ0X3BmbiArCVwKLQkJICAgICAgIE5PREVfREFUQShfX24pLT5ub2RlX3NwYW5uZWRfcGFnZXMpIDogMCk7XAotfSkKLQotLyogWFhYOiBGSVhNRSAtLSB3bGkgKi8KLSNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgwKQotCiAjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwogCiAjZW5kaWYgLyogX0FTTV9NTVpPTkVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKaW5kZXggNDAzNWVjNy4uM2QyNjJjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKQEAgLTE0NSw2ICsxNDUsMjUgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRkxBVE1FTQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMpCisKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3BmbiA9IChwZm4pOwkJCQkJXAorCWludCBfX24gPSBwZm5fdG9fbmlkKF9fcGZuKTsJCQkJCVwKKwkoKF9fbiA+PSAwKSA/IChfX3BmbiA8IE5PREVfREFUQShfX24pLT5ub2RlX3N0YXJ0X3BmbiArCQlcCisJICAgICAgICAgICAgICAgICAgICAgICBOT0RFX0RBVEEoX19uKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQlcCisJICAgICAgICAgICAgOiAwKTsJCQkJCQlcCit9KQorCisjZWxzZQorI2Vycm9yIFByb3ZpZGUgYSBkZWZpbml0aW9uIG9mIHBmbl92YWxpZAorI2VuZGlmCisKICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhcmFtLmgKaW5kZXggMmJlYWQ4Mi4uMWQ5YmI4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGFyYW0uaApAQCAtMTEsNyArMTEsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jIGluY2x1ZGUgPHBhcmFtLmg+CQkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLworIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCiAjIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KICMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BjaS9icmlkZ2UuaAppbmRleCBiNGVlOTk1Li4wYzQ1ZTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BjaS9icmlkZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BjaS9icmlkZ2UuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3h0YWxrL3h3aWRnZXQuaD4JCS8qIGdlbmVyaWMgd2lkZ2V0IGhlYWRlciAqLworI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgogCiAvKiBJL08gcGFnZSBzaXplICovCiAKQEAgLTg0OCw0ICs4NDksNiBAQAogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfYnJpZGdlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiBpbnQgcmVxdWVzdF9icmlkZ2VfaXJxKHN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqYmMpOwogCitleHRlcm4gc3RydWN0IHBjaV9vcHMgYnJpZGdlX3BjaV9vcHM7CisKICNlbmRpZiAvKiBfQVNNX1BDSV9CUklER0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAppbmRleCBkMGFmMmEzLi5iZTc1Y2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaApAQCAtMzc5LDkgKzM3OSw3IEBACiAJX191cGRhdGVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpOwogfQogCi0jaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHXzY0QklUX1BIWVNfQUREUgogZXh0ZXJuIGludCByZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaAppbmRleCAwZmI3NWYwLi44MzkzNjQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKQEAgLTcxLDExICs3MSw2IEBACiAKIHR5cGVkZWYgX191NjQgZnB1cmVnX3Q7CiAKLXN0cnVjdCBtaXBzX2ZwdV9oYXJkX3N0cnVjdCB7Ci0JZnB1cmVnX3QJZnByW05VTV9GUFVfUkVHU107Ci0JdW5zaWduZWQgaW50CWZjcjMxOwotfTsKLQogLyoKICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gYWRkIHNvbWUgbW9yZSBmaWVsZHMgZm9yIGVtdWxhdG9yIHN0YXRpc3RpY3MsIGJ1dCB0aGVyZQogICogYXJlIGEgbnVtYmVyIG9mIGZpeGVkIG9mZnNldHMgaW4gb2Zmc2V0LmggYW5kIGVsc2V3aGVyZSB0aGF0IHdvdWxkIGhhdmUgdG8KQEAgLTgzLDE4ICs3OCwxMyBAQAogICogdGhlIEZQVSBlbXVsYXRvciBmb3Igbm93LiAgU2VlIGFzbS1taXBzL2ZwdV9lbXVsYXRvci5oLgogICovCiAKLXN0cnVjdCBtaXBzX2ZwdV9zb2Z0X3N0cnVjdCB7CitzdHJ1Y3QgbWlwc19mcHVfc3RydWN0IHsKIAlmcHVyZWdfdAlmcHJbTlVNX0ZQVV9SRUdTXTsKIAl1bnNpZ25lZCBpbnQJZmNyMzE7CiB9OwogCi11bmlvbiBtaXBzX2ZwdV91bmlvbiB7Ci0gICAgICAgIHN0cnVjdCBtaXBzX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOwotICAgICAgICBzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3Qgc29mdDsKLX07Ci0KICNkZWZpbmUgSU5JVF9GUFUgeyBcCi0Je3swLH0sfSBcCisJezAsfSBcCiB9CiAKICNkZWZpbmUgTlVNX0RTUF9SRUdTICAgNgpAQCAtMTMzLDcgKzEyMyw3IEBACiAJdW5zaWduZWQgbG9uZyBjcDBfc3RhdHVzOwogCiAJLyogU2F2ZWQgZnB1L2ZwdSBlbXVsYXRvciBzdHVmZi4gKi8KLQl1bmlvbiBtaXBzX2ZwdV91bmlvbiBmcHU7CisJc3RydWN0IG1pcHNfZnB1X3N0cnVjdCBmcHU7CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKIAkvKiBFbXVsYXRlZCBpbnN0cnVjdGlvbiBjb3VudCAqLwogCXVuc2lnbmVkIGxvbmcgZW11bGF0ZWRfZnA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3FlbXUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcWVtdS5oCmluZGV4IDkwNWMzOTUuLjUzMWNhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcWVtdS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcWVtdS5oCkBAIC0yMSw0ICsyMSwxMCBAQAogICovCiAjZGVmaW5lIFFFTVVfQzBfQ09VTlRFUl9DTE9DSwkxMDAwMDAwMDAKIAorLyoKKyAqIE1hZ2ljIHFlbXUgc3lzdGVtIGNvbnRyb2wgbG9jYXRpb24uCisgKi8KKyNkZWZpbmUgUUVNVV9SRVNUQVJUX1JFRwkweEJGQkYwMDAwCisjZGVmaW5lIFFFTVVfSEFMVF9SRUcJCTB4QkZCRjAwMDQKKwogI2VuZGlmIC8qIF9fQVNNX1FFTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ybTlrLW9jZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9ybTlrLW9jZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjgwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3JtOWstb2NkLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZiAhZGVmaW5lZChfQVNNX1JNOUtfT0NEX0gpCisjZGVmaW5lIF9BU01fUk05S19PQ0RfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitleHRlcm4gdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogY29uc3Qgb2NkX2Jhc2U7CitleHRlcm4gdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogY29uc3QgdGl0YW5fYmFzZTsKKworI2RlZmluZSBvY2RfYWRkcihfX3hfXykJCShvY2RfYmFzZSArIChfX3hfXykpCisjZGVmaW5lIHRpdGFuX2FkZHIoX194X18pCSh0aXRhbl9iYXNlICsgKF9feF9fKSkKKyNkZWZpbmUgc2NyYW1fYWRkcihfX3hfXykJKHNjcmFtX2Jhc2UgKyAoX194X18pKQorCisvKiBPQ0QgcmVnaXN0ZXIgYWNjZXNzICovCisjZGVmaW5lIG9jZF9yZWFkbChfX29mZnNfXykgX19yYXdfcmVhZGwob2NkX2FkZHIoX19vZmZzX18pKQorI2RlZmluZSBvY2RfcmVhZHcoX19vZmZzX18pIF9fcmF3X3JlYWR3KG9jZF9hZGRyKF9fb2Zmc19fKSkKKyNkZWZpbmUgb2NkX3JlYWRiKF9fb2Zmc19fKSBfX3Jhd19yZWFkYihvY2RfYWRkcihfX29mZnNfXykpCisjZGVmaW5lIG9jZF93cml0ZWwoX192YWxfXywgX19vZmZzX18pIFwKKwlfX3Jhd193cml0ZWwoKF9fdmFsX18pLCBvY2RfYWRkcihfX29mZnNfXykpCisjZGVmaW5lIG9jZF93cml0ZXcoX192YWxfXywgX19vZmZzX18pIFwKKwlfX3Jhd193cml0ZXcoKF9fdmFsX18pLCBvY2RfYWRkcihfX29mZnNfXykpCisjZGVmaW5lIG9jZF93cml0ZWIoX192YWxfXywgX19vZmZzX18pIFwKKwlfX3Jhd193cml0ZWIoKF9fdmFsX18pLCBvY2RfYWRkcihfX29mZnNfXykpCisKKy8qIFRJVEFOIHJlZ2lzdGVyIGFjY2VzcyAtIDMyIGJpdC13aWRlIG9ubHkgKi8KKyNkZWZpbmUgdGl0YW5fcmVhZGwoX19vZmZzX18pIF9fcmF3X3JlYWRsKHRpdGFuX2FkZHIoX19vZmZzX18pKQorI2RlZmluZSB0aXRhbl93cml0ZWwoX192YWxfXywgX19vZmZzX18pIFwKKwlfX3Jhd193cml0ZWwoKF9fdmFsX18pLCB0aXRhbl9hZGRyKF9fb2Zmc19fKSkKKworLyogUHJvdGVjdCBhY2Nlc3MgdG8gc2hhcmVkIFRJVEFOIHJlZ2lzdGVycyAqLworZXh0ZXJuIHNwaW5sb2NrX3QgdGl0YW5fbG9jazsKK2V4dGVybiBpbnQgdGl0YW5faXJxZmxhZ3M7CisjZGVmaW5lIGxvY2tfdGl0YW5fcmVncygpIHNwaW5fbG9ja19pcnFzYXZlKCZ0aXRhbl9sb2NrLCB0aXRhbl9pcnFmbGFncykKKyNkZWZpbmUgdW5sb2NrX3RpdGFuX3JlZ3MoKSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aXRhbl9sb2NrLCB0aXRhbl9pcnFmbGFncykKKworI2VuZGlmCS8qICFkZWZpbmVkKF9BU01fUk05S19PQ0RfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYWRkcnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYWRkcnMuaAppbmRleCAyYjVjZWYxLi42YzhhNTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FkZHJzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hZGRycy5oCkBAIC0yNywxMyArMjcsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQkvKiBGSVhNRSAqLwotI2RlZmluZSBQU19VSU5UX0NBU1QJCShfX3BzdW5zaWduZWRfdCkKLSNkZWZpbmUgVUlOVDY0X0NBU1QJCShfX3VpbnQ2NF90KQotI2Vsc2UJLyogQ09ORklHX1NHSV9JTyAqLwogI2RlZmluZSBQU19VSU5UX0NBU1QJCSh1bnNpZ25lZCBsb25nKQogI2RlZmluZSBVSU5UNjRfQ0FTVAkJKHVuc2lnbmVkIGxvbmcpCi0jZW5kaWYJLyogQ09ORklHX1NHSV9JTyAqLwogCiAjZGVmaW5lIEhVQlJFR19DQVNUCQkodm9sYXRpbGUgaHVicmVnX3QgKikKIApAQCAtMjUzLDE0ICsyNDgsNiBAQAogICogZm9yIF94LgogICovCiAKLSNpZmRlZiBfU1RBTkRBTE9ORQotCi0vKiBETyBOT1QgVVNFIFRIRVNFIERJUkVDVExZIElOIFRIRSBLRVJORUwuIFNFRSBCRUxPVy4gKi8KLSNkZWZpbmUgTE9DQUxfSFVCKF94KQkJKEhVQlJFR19DQVNUIChJQUxJQVNfQkFTRSArIChfeCkpKQotI2RlZmluZSBSRU1PVEVfSFVCKF9uLCBfeCkJKEhVQlJFR19DQVNUIChOT0RFX1NXSU5fQkFTRShfbiwgMSkgKwlcCi0JCQkJCSAgICAgIDB4ODAwMDAwICsgKF94KSkpCi0jZW5kaWYgLyogX1NUQU5EQUxPTkUgKi8KLQogLyoKICAqIFdBUk5JTkc6CiAgKglXaGVuIGNlcnRhaW4gSHViIGNoaXAgd29ya2Fyb3VuZCBhcmUgZGVmaW5lZCwgaXQncyBub3Qgc3VmZmljaWVudApAQCAtMzI3LDIwICszMTQsNiBAQAogCVBIWVNfVE9fSzAoTk9ERV9PRkZTRVQobmFzaWQpIHwgQVJDU19TUEJfT0ZGU0VUKQogI2RlZmluZSBBUkNTX1NQQl9TSVpFCQkweDA0MDAKIAotI2lmZGVmIF9TVEFOREFMT05FCi0KLSNkZWZpbmUgQVJDU19UVkVDVE9SX09GRlNFVAkweDI4MDAKLSNkZWZpbmUgQVJDU19QVkVDVE9SX09GRlNFVAkweDJjMDAKLQotLyoKLSAqIFRoZXNlIGFkZHJlc3NlcyBhcmUgdXNlZCBieSB0aGUgbWFzdGVyIENQVSB0byBpbnN0YWxsIHRoZSB0cmFuc2ZlcgotICogYW5kIHByaXZhdGUgdmVjdG9ycy4gIEFsbCBvdGhlcnMgdXNlIHRoZSBTUEIgdG8gZmluZCB0aGVtLgotICovCi0jZGVmaW5lIFRWQUREUgkoTk9ERV9DQUNfQkFTRShnZXRfbmFzaWQoKSkgKyBBUkNTX1RWRUNUT1JfT0ZGU0VUKQotI2RlZmluZSBQVkFERFIJKE5PREVfQ0FDX0JBU0UoZ2V0X25hc2lkKCkpICsgQVJDU19QVkVDVE9SX09GRlNFVCkKLQotI2VuZGlmIC8qIF9TVEFOREFMT05FICovCi0KICNkZWZpbmUgS0xESVJfT0ZGU0VUCQkweDIwMDAKICNkZWZpbmUgS0xESVJfQUREUihuYXNpZCkJCQkJCQlcCiAJVE9fTk9ERV9VTkNBQygobmFzaWQpLCBLTERJUl9PRkZTRVQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9zbjBfZnJ1LmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2ZydS5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLW1pcHMvc24vc24wL3NuMF9mcnUuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tbWlwcy9zbi9mcnUuaAppbmRleCA4MmM2Mzc3Li5iM2UzNjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9zbjBfZnJ1LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9mcnUuaApAQCAtNiwxMCArNiwxMCBAQAogICogRGVyaXZlZCBmcm9tIElSSVggPHN5cy9TTi9TTjAvc24wX2ZydS5oPgogICoKICAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDE5OTkgU2lsY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMpCiAgKi8KLSNpZm5kZWYgX0FTTV9TTl9TTjBfU04wX0ZSVV9ICi0jZGVmaW5lIF9BU01fU05fU04wX1NOMF9GUlVfSAorI2lmbmRlZiBfX0FTTV9TTl9GUlVfSAorI2RlZmluZSBfX0FTTV9TTl9GUlVfSAogCiAjZGVmaW5lIE1BWF9ESU1NUwkJCTgJIC8qIG1heCAjIG9mIGRpbW0gYmFua3MgKi8KICNkZWZpbmUgTUFYX1BDSURFVgkJCTgJIC8qIG1heCAjIG9mIHBjaSBkZXZpY2VzIG9uIGEgcGNpIGJ1cyAqLwpAQCAtNDEsNCArNDEsNCBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IHRoZSBwY2kgZGV2IGlzIGJhZCAqLwogfSBrZl9wY2lfYnVzX3Q7CiAKLSNlbmRpZiAvKiBfQVNNX1NOX1NOMF9TTjBfRlJVX0ggKi8KKyNlbmRpZiAvKiBfX0FTTV9TTl9GUlVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCmluZGV4IDk3MDlmZjcuLmRjNzA2MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmgKQEAgLTM3LDcgKzM3LDcgQEAKIC8vI2luY2x1ZGUgPHN5cy9TTi9yb3V0ZXIuaD4KIC8vIFhYWCBTdG9sZW4gZnJvbSA8c3lzL1NOL3JvdXRlci5oPjoKICNkZWZpbmUgTUFYX1JPVVRFUl9QT1JUUyAoNikgICAgLyogTWF4LiBudW1iZXIgb2YgcG9ydHMgb24gYSByb3V0ZXIgKi8KLSNpbmNsdWRlIDxhc20vc24vc24wL3NuMF9mcnUuaD4KKyNpbmNsdWRlIDxhc20vc24vZnJ1Lmg+CiAvLyNpbmNsdWRlIDxzeXMvZ3JhcGguaD4KIC8vI2luY2x1ZGUgPHN5cy94dGFsay94Ym93Lmg+CiAKQEAgLTU0LDMyICs1NCwyMSBAQAogI2luY2x1ZGUgPGFzbS9zbi9hZ2VudC5oPgogI2luY2x1ZGUgPGFzbS9hcmMvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXJjL2hpbnYuaD4KLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pIHx8IGRlZmluZWQoQ09ORklHX1NHSV9JUDM1KQorI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JUDM1KQogLy8gVGhlIGhhY2sgZmlsZSBoYXMgdG8gYmUgYmVmb3JlIHZlY3RvciBhbmQgYWZ0ZXIgc24wX2ZydS4uLi4KICNpbmNsdWRlIDxhc20vaGFjay5oPgogI2luY2x1ZGUgPGFzbS9zbi92ZWN0b3IuaD4KICNpbmNsdWRlIDxhc20veHRhbGsveHRhbGsuaD4KLSNlbmRpZiAvKiBDT05GSUdfU0dJX0lPIHx8IENPTkZJR19TR0lfSVAzNSAqLworI2VuZGlmIC8qIENPTkZJR19TR0lfSVAzNSAqLwogI2VuZGlmIC8qIENPTkZJR19TR0lfSVAyNyB8fCBDT05GSUdfU0dJX0lQMzUgKi8KIAogI2RlZmluZSBLTENGR0lORk9fTUFHSUMJMHhiZWVkYmFiZQogCi0jaWZkZWYgRlJVVEVTVAotdHlwZWRlZiB1NjQga2xjb25mX29mZl90OwotI2Vsc2UKIHR5cGVkZWYgczMyIGtsY29uZl9vZmZfdDsKLSNlbmRpZgogCiAvKgogICogU29tZSBJTVBPUlRBTlQgT0ZGU0VUUy4gVGhlc2UgYXJlIHRoZSBvZmZzZXRzIG9uIGFsbCBOT0RFUy4KICAqLwotI2lmIDAKLSNkZWZpbmUgUkFNQkFTRSAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBBUkNTU1BCX09GRiAgICAgICAgICAgICAweDEwMDAgLyogc2hpZnQgaXQgdG8gc3lzL2FyY3Mvc3BiLmggKi8KLQotI2RlZmluZSBPRkZfSFdHUkFQSCAJCTAKLSNlbmRpZgotCiAjZGVmaW5lCU1BWF9NT0RVTEVfSUQJCTI1NQogI2RlZmluZSBTSVpFX1BBRAkJNDA5NiAvKiA0ayBwYWRkaW5nIGZvciBzdHJ1Y3R1cmVzICovCiAvKgpAQCAtMTM0LDE1ICsxMjMsOSBAQAogCiAKIHR5cGVkZWYgc3RydWN0IGNvbnNvbGVfcyB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQkvKiBGSVhNRSAqLwotCV9fcHN1bnNpZ25lZF90IAl1YXJ0X2Jhc2U7Ci0JX19wc3Vuc2lnbmVkX3QgCWNvbmZpZ19iYXNlOwotCV9fcHN1bnNpZ25lZF90IAltZW1vcnlfYmFzZTsKLSNlbHNlCiAJdW5zaWduZWQgbG9uZyAJdWFydF9iYXNlOwogCXVuc2lnbmVkIGxvbmcgCWNvbmZpZ19iYXNlOwogCXVuc2lnbmVkIGxvbmcgCW1lbW9yeV9iYXNlOwotI2VuZGlmCiAJc2hvcnQJCWJhdWQ7CiAJc2hvcnQJCWZsYWc7CiAJaW50CQl0eXBlOwpAQCAtMTc0LDEwICsxNTcsNiBAQAogCiAKICNkZWZpbmUgS0xfQ09ORklHX0hEUihfbmFzaWQpIAkoKGtsX2NvbmZpZ19oZHJfdCAqKShLTENPTkZJR19BRERSKF9uYXNpZCkpKQotI2lmIDAKLSNkZWZpbmUgS0xfQ09ORklHX01BTExPQ19IRFIoX25hc2lkKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChLTF9DT05GSUdfSERSKF9uYXNpZCktPmNoX21hbGxvY19oZHIpCi0jZW5kaWYKICNkZWZpbmUgS0xfQ09ORklHX0lORk9fT0ZGU0VUKF9uYXNpZCkJCQkJCVwKICAgICAgICAgKEtMX0NPTkZJR19IRFIoX25hc2lkKS0+Y2hfYm9hcmRfaW5mbykKICNkZWZpbmUgS0xfQ09ORklHX0lORk9fU0VUX09GRlNFVChfbmFzaWQsIF9vZmYpCQkJCVwKQEAgLTE5NywyMyArMTc2LDEzIEBACiAKIC8qIC0tLSBOZXcgTWFjcm9zIGZvciB0aGUgY2hhbmdlZCBrbF9jb25maWdfaGRyX3Qgc3RydWN0dXJlIC0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQotI2RlZmluZSBQVFJfQ0hfTUFMTE9DX0hEUihfaykgICAoKGtsY19tYWxsb2NfaGRyX3QgKilcCi0JCQkoKF9fcHN1bnNpZ25lZF90KV9rICsgKF9rLT5jaF9tYWxsb2NfaGRyX29mZikpKQotI2Vsc2UKICNkZWZpbmUgUFRSX0NIX01BTExPQ19IRFIoX2spICAgKChrbGNfbWFsbG9jX2hkcl90ICopXAogCQkJKHVuc2lnbmVkIGxvbmcpX2sgKyAoX2stPmNoX21hbGxvY19oZHJfb2ZmKSkpCi0jZW5kaWYKIAogI2RlZmluZSBLTF9DT05GSUdfQ0hfTUFMTE9DX0hEUihfbikgICBQVFJfQ0hfTUFMTE9DX0hEUihLTF9DT05GSUdfSERSKF9uKSkKIAotI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JTykKLSNkZWZpbmUgUFRSX0NIX0NPTlNfSU5GTyhfaykJKChjb25zb2xlX3QgKilcCi0JCQkoKF9fcHN1bnNpZ25lZF90KV9rICsgKF9rLT5jaF9jb25zX29mZikpKQotI2Vsc2UKICNkZWZpbmUgUFRSX0NIX0NPTlNfSU5GTyhfaykJKChjb25zb2xlX3QgKilcCiAJCQkoKHVuc2lnbmVkIGxvbmcpX2sgKyAoX2stPmNoX2NvbnNfb2ZmKSkpCi0jZW5kaWYKIAogI2RlZmluZSBLTF9DT05GSUdfQ0hfQ09OU19JTkZPKF9uKSAgIFBUUl9DSF9DT05TX0lORk8oS0xfQ09ORklHX0hEUihfbikpCiAKQEAgLTQ5MCwxNCArNDU5LDYgQEAKICNkZWZpbmUgS0xDRl9OVU1fQ09NUFMoX2JyZCkJKChfYnJkKS0+YnJkX251bWNvbXB0cykKICNkZWZpbmUgS0xDRl9NT0RVTEVfSUQoX2JyZCkJKChfYnJkKS0+YnJkX21vZHVsZSkKIAotI2lmZGVmIEZSVVRFU1QKLQotI2RlZmluZSBLTENGX05FWFQoX2JyZCkgCQkoKF9icmQpLT5icmRfbmV4dCA/IChsYm9hcmRfdCAqKSgoX2JyZCktPmJyZF9uZXh0KTogIE5VTEwpCi0jZGVmaW5lIEtMQ0ZfQ09NUChfYnJkLCBfbmR4KSAgIAkoa2xpbmZvX3QgKikoKF9icmQpLT5icmRfY29tcHRzWyhfbmR4KV0pCi0jZGVmaW5lIEtMQ0ZfQ09NUF9FUlJPUihfYnJkLCBfY29tcCkgICAJKF9icmQgPSBfYnJkICwgKF9jb21wKS0+ZXJyaW5mbykKLQotI2Vsc2UKLQogI2RlZmluZSBLTENGX05FWFQoX2JyZCkgCVwKICAgICAgICAgKChfYnJkKS0+YnJkX25leHQgPyAJXAogCSAobGJvYXJkX3QgKikoTk9ERV9PRkZTRVRfVE9fSzEoTkFTSURfR0VUKF9icmQpLCAoX2JyZCktPmJyZF9uZXh0KSk6XApAQCAtNTA5LDggKzQ3MCw2IEBACiAjZGVmaW5lIEtMQ0ZfQ09NUF9FUlJPUihfYnJkLCBfY29tcCkJXAogICAgICAgICAgICAgICAgKE5PREVfT0ZGU0VUX1RPX0sxKE5BU0lEX0dFVChfYnJkKSwgKF9jb21wKS0+ZXJyaW5mbykpCiAKLSNlbmRpZgotCiAjZGVmaW5lIEtMQ0ZfQ09NUF9UWVBFKF9jb21wKQkoKF9jb21wKS0+c3RydWN0X3R5cGUpCiAjZGVmaW5lIEtMQ0ZfQlJJREdFX1dfSUQoX2NvbXApCSgoX2NvbXApLT5waHlzaWQpCS8qIFdpZGdldCBJRCAqLwogCkBAIC02MzEsMTggKzU5MCw2IEBACiAJa2xjb25mX29mZl90CXBvcnRfb2Zmc2V0OwogfSBrbHBvcnRfdDsKIAotI2lmIDAKLS8qCi0gKiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUga2xwb3J0X3MgYnV0IGluc3RlYWQgb2YgaGF2aW5nIGEgY29tcG9uYW50Ci0gKiBvZmZzZXQgaXQgaGFzIGEgYm9hcmQgb2Zmc2V0LgotICovCi10eXBlZGVmIHN0cnVjdCBrbHhib3dfcG9ydF9zIHsKLQluYXNpZF90CQlwb3J0X25hc2lkOwotCXVuc2lnbmVkIGNoYXIJcG9ydF9mbGFnOwotCWtsY29uZl9vZmZfdAlib2FyZF9vZmZzZXQ7Ci19IGtseGJvd19wb3J0X3Q7Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3Qga2xjcHVfcyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDUFUgKi8KIAlrbGluZm9fdCAJY3B1X2luZm87CiAJdW5zaWduZWQgc2hvcnQgCWNwdV9wcmlkOwkvKiBQcm9jZXNzb3IgUFJJRCB2YWx1ZSAqLwpAQCAtOTQ1LDM2ICs4OTIsNiBAQAogZXh0ZXJuIGxib2FyZF90ICpmaW5kX2xib2FyZF9jbGFzcyhsYm9hcmRfdCAqc3RhcnQsIHVuc2lnbmVkIGNoYXIgYnJkX2NsYXNzKTsKIAogCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQotZXh0ZXJuIHh3aWRnZXRudW1fdCBub2RldmVydGV4X3dpZGdldG51bV9nZXQodmVydGV4X2hkbF90IG5vZGVfdnR4KTsKLWV4dGVybiB2ZXJ0ZXhfaGRsX3Qgbm9kZXZlcnRleF94Ym93X3BlZXJfZ2V0KHZlcnRleF9oZGxfdCBub2RlX3Z0eCk7Ci1leHRlcm4gbGJvYXJkX3QgKmZpbmRfZ2Z4cGlwZShpbnQgcGlwZW51bSk7Ci1leHRlcm4gdm9pZCBzZXR1cF9nZnhwaXBlX2xpbmsodmVydGV4X2hkbF90IHZoZGwsaW50IHBpcGVudW0pOwotZXh0ZXJuIGxib2FyZF90ICpmaW5kX2xib2FyZF9tb2R1bGVfY2xhc3MobGJvYXJkX3QgKnN0YXJ0LCBtb2R1bGVpZF90IG1vZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBicmRfY2xhc3MpOwotZXh0ZXJuIGxib2FyZF90ICpmaW5kX25pY19sYm9hcmQobGJvYXJkX3QgKiwgbmljX3QpOwotZXh0ZXJuIGxib2FyZF90ICpmaW5kX25pY190eXBlX2xib2FyZChuYXNpZF90LCB1bnNpZ25lZCBjaGFyLCBuaWNfdCk7Ci1leHRlcm4gbGJvYXJkX3QgKmZpbmRfbGJvYXJkX21vZHNsb3QobGJvYXJkX3QgKnN0YXJ0LCBtb2R1bGVpZF90IG1vZCwgc2xvdGlkX3Qgc2xvdCk7Ci1leHRlcm4gbGJvYXJkX3QgKmZpbmRfbGJvYXJkX21vZHVsZShsYm9hcmRfdCAqc3RhcnQsIG1vZHVsZWlkX3QgbW9kKTsKLWV4dGVybiBsYm9hcmRfdCAqZ2V0X2JvYXJkX25hbWUobmFzaWRfdCBuYXNpZCwgbW9kdWxlaWRfdCBtb2QsIHNsb3RpZF90IHNsb3QsIGNoYXIgKm5hbWUpOwotZXh0ZXJuIGludAljb25maWdfZmluZF9uaWNfcm91dGVyKG5hc2lkX3QsIG5pY190LCBsYm9hcmRfdCAqKiwga2xyb3VfdCoqKTsKLWV4dGVybiBpbnQJY29uZmlnX2ZpbmRfbmljX2h1YihuYXNpZF90LCBuaWNfdCwgbGJvYXJkX3QgKiosIGtsaHViX3QqKik7Ci1leHRlcm4gaW50CWNvbmZpZ19maW5kX3hib3cobmFzaWRfdCwgbGJvYXJkX3QgKiosIGtseGJvd190KiopOwotZXh0ZXJuIGtsY3B1X3QgKmdldF9jcHVpbmZvKGNwdWlkX3QgY3B1KTsKLWV4dGVybiBpbnQgCXVwZGF0ZV9rbGNmZ19jcHVpbmZvKG5hc2lkX3QsIGludCk7Ci1leHRlcm4gdm9pZCAJYm9hcmRfdG9fcGF0aChsYm9hcmRfdCAqYnJkLCBjaGFyICpwYXRoKTsKLWV4dGVybiBtb2R1bGVpZF90IGdldF9tb2R1bGVfaWQobmFzaWRfdCBuYXNpZCk7Ci1leHRlcm4gdm9pZCAJbmljX25hbWVfY29udmVydChjaGFyICpvbGRfbmFtZSwgY2hhciAqbmV3X25hbWUpOwotZXh0ZXJuIGludCAJbW9kdWxlX2JyZHMobmFzaWRfdCBuYXNpZCwgbGJvYXJkX3QgKiptb2R1bGVfYnJkcywgaW50IG4pOwotZXh0ZXJuIGxib2FyZF90ICpicmRfZnJvbV9rZXkodWxvbmdfdCBrZXkpOwotZXh0ZXJuIHZvaWQgCWRldmljZV9jb21wb25lbnRfY2Fub25pY2FsX25hbWVfZ2V0KGxib2FyZF90ICosa2xpbmZvX3QgKiwKLQkJCQkJCSAgICBjaGFyICopOwotZXh0ZXJuIGludAlib2FyZF9zZXJpYWxfbnVtYmVyX2dldChsYm9hcmRfdCAqLGNoYXIgKik7Ci1leHRlcm4gaW50CWlzX21hc3Rlcl9iYXNlaW8obmFzaWRfdCxtb2R1bGVpZF90LHNsb3RpZF90KTsKLWV4dGVybiBuYXNpZF90CWdldF9hY3R1YWxfbmFzaWQobGJvYXJkX3QgKmJyZCkgOwotZXh0ZXJuIG5ldF92ZWNfdCBrbGNmZ19kaXNjb3Zlcl9yb3V0ZShsYm9hcmRfdCAqLCBsYm9hcmRfdCAqLCBpbnQpOwotI2Vsc2UJLyogQ09ORklHX1NHSV9JTyAqLwogZXh0ZXJuIGtsY3B1X3QgKnNuX2dldF9jcHVpbmZvKGNwdWlkX3QgY3B1KTsKLSNlbmRpZgkvKiBDT05GSUdfU0dJX0lPICovCiAKICNlbmRpZiAvKiBfQVNNX1NOX0tMQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaAppbmRleCBmMGVmYWIxLi45N2FkNTJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2tsZGlyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGRpci5oCkBAIC0xMywxMCArMTMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pCi0jaW5jbHVkZSA8YXNtL2hhY2suaD4KLSNlbmRpZgotCiAvKgogICogVGhlIGtsZGlyIG1lbW9yeSBhcmVhIHJlc2lkZXMgYXQgYSBmaXhlZCBwbGFjZSBpbiBlYWNoIG5vZGUncyBtZW1vcnkgYW5kCiAgKiBwcm92aWRlcyBwb2ludGVycyB0byBtb3N0IG90aGVyIElQMjcgbWVtb3J5IGFyZWFzLiAgVGhpcyBhbGxvd3MgdXMgdG8KQEAgLTEzNiw4ICsxMzIsNiBAQAogI2RlZmluZSBLTERJUl9PRkZfU1RSSURFCQkweDI4CiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLSNpZiAhZGVmaW5lZChDT05GSUdfU0dJX0lPKQotCiAvKgogICogVGhpcyBpcyBkZWZpbmVkIGhlcmUgYmVjYXVzZSBJUDI3X1NZTU1PTl9TVEtfU0laRSBtdXN0IGJlIGF0IGxlYXN0IHdoYXQKICAqIHdlIGRlZmluZSBoZXJlLiAgU2luY2UgaXQncyBzZXQgdXAgaW4gdGhlIHByb20uICBXZSBjYW4ndCByZWRlZmluZSBpdCBsYXRlcgpAQCAtMTQ3LDcgKzE0MSw3IEBACiAgKi8KICNkZWZpbmUgU1lNTU9OX1NUQUNLX1NJWkUJCTB4ODAwMAogCi0jaWYgZGVmaW5lZCAoUFJPTSkgfHwgZGVmaW5lZCAoU0FCTEUpCisjaWYgZGVmaW5lZCAoUFJPTSkKIAogLyoKICAqIFRoZXNlIGRlZmluZXMgYXJlIHByb20gdmVyc2lvbiBkZXBlbmRlbnQuICBObyBjb2RlIG90aGVyIHRoYW4gdGhlIElQMjcKQEAgLTE4NCw3ICsxNzgsNyBAQAogI2RlZmluZSBJUDI3X0ZSRUVNRU1fQ09VTlQJCTEKICNkZWZpbmUgSVAyN19GUkVFTUVNX1NUUklERQkJMAogCi0jZW5kaWYgLyogUFJPTSB8fCBTQUJMRSovCisjZW5kaWYgLyogUFJPTSAqLwogLyoKICAqIFRoZXJlIHdpbGwgYmUgb25seSBvbmUgb2YgdGhlc2UgaW4gYSBwYXJ0aXRpb24gc28gdGhlIElPNiBtdXN0IHNldCBpdCB1cC4KICAqLwpAQCAtMjA3LDE3ICsyMDEsMTEgQEAKICNkZWZpbmUgS0xESVJfRU5UX1NJWkUJCQkweDQwCiAjZGVmaW5lIEtMRElSX01BWF9FTlRSSUVTCQkoMHg0MDAgLyAweDQwKQogCi0jZW5kaWYJLyogIUNPTkZJR19TR0lfSU8gKi8KLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHR5cGVkZWYgc3RydWN0IGtsZGlyX2VudF9zIHsKIAl1NjQJCW1hZ2ljOwkJLyogSW5kaWNhdGVzIHZhbGlkaXR5IG9mIGVudHJ5ICAgICAgKi8KIAlvZmZfdAkJb2Zmc2V0OwkJLyogT2Zmc2V0IGZyb20gc3RhcnQgb2Ygbm9kZSBzcGFjZSAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pCS8qIEZJWE1FICovCi0JX19wc3Vuc2lnbmVkX3QJcG9pbnRlcjsJLyogUG9pbnRlciB0byBhcmVhIGluIHNvbWUgY2FzZXMgICAgKi8KLSNlbHNlCiAJdW5zaWduZWQgbG9uZwlwb2ludGVyOwkvKiBQb2ludGVyIHRvIGFyZWEgaW4gc29tZSBjYXNlcyAgICAqLwotI2VuZGlmCiAJc2l6ZV90CQlzaXplOwkJLyogU2l6ZSBpbiBieXRlcyAJCSAgICAqLwogCXU2NAkJY291bnQ7CQkvKiBSZXBlYXQgY291bnQgaWYgYXJyYXksIDEgaWYgbm90ICAqLwogCXNpemVfdAkJc3RyaWRlOwkJLyogU3RyaWRlIGlmIGFycmF5LCAwIGlmIG5vdCAgICAgICAgKi8KQEAgLTIyNywyMiArMjE1LDQgQEAKIH0ga2xkaXJfZW50X3Q7CiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQotCi0jZGVmaW5lIEtMRElSX0VOVF9TSVpFCQkJMHg0MAotI2RlZmluZSBLTERJUl9NQVhfRU5UUklFUwkJKDB4NDAwIC8gMHg0MCkKLQotLyoKLSAqIFRoZSBhY3R1YWwgb2Zmc2V0cyBvZiBlYWNoIG1lbW9yeSBhcmVhIGFyZSBtYWNoaW5lLWRlcGVuZGVudAotICovCi0jaWZkZWYgQ09ORklHX1NHSV9JUDI3Ci0vLyBOb3QgeWV0ICNpbmNsdWRlIDxhc20vc24vc24wL2tsZGlyLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TR0lfSVAzNSkKLSNpbmNsdWRlIDxhc20vc24vc24xL2tsZGlyLmg+Ci0jZWxzZQotI2Vycm9yICJrbGRpci5oIGlzIGN1cnJlbnRseSBkZWZpbmVkIGZvciBJUDI3IGFuZCBJUDM1IHBsYXRmb3JtcyBvbmx5IgotI2VuZGlmCi0KLSNlbmRpZgkvKiBDT05GSUdfU0dJX0lPICovCi0KICNlbmRpZiAvKiBfQVNNX1NOX0tMRElSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FkZHJzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hZGRycy5oCmluZGV4IDM5ODgxNTYuLjJjNGI3NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FkZHJzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYWRkcnMuaApAQCAtNDksNyArNDksNyBAQAogICogc28gZm9yIG5vdyB3ZSBqdXN0IHVzZSBkZWZpbmVzIGJyYWNrZXRlZCBieSBhbiBpZmRlZi4KICAqLwogCi0jaWZkZWYgQ09ORklHX1NHSV9TTjBfTl9NT0RFCisjaWZkZWYgQ09ORklHX1NHSV9TTl9OX01PREUKIAogI2RlZmluZSBOT0RFX1NJWkVfQklUUwkJMzEKICNkZWZpbmUgQldJTl9TSVpFX0JJVFMJCTI4CkBAIC02Myw3ICs2Myw3IEBACiAjZGVmaW5lIEJERElSX1VQUEVSX01BU0sJKFVJTlQ2NF9DQVNUIDB4N2ZmZmYgPDwgMTApCiAjZGVmaW5lIEJERUNDX1VQUEVSX01BU0sJKFVJTlQ2NF9DQVNUIDB4M2ZmZmZmZiA8PCAzKQogCi0jZWxzZSAvKiAhZGVmaW5lZChDT05GSUdfU0dJX1NOMF9OX01PREUpLCBhc3N1bWUgdGhhdCBNLW1vZGUgaXMgZGVzaXJlZCAqLworI2Vsc2UgLyogIWRlZmluZWQoQ09ORklHX1NHSV9TTl9OX01PREUpLCBhc3N1bWUgdGhhdCBNLW1vZGUgaXMgZGVzaXJlZCAqLwogCiAjZGVmaW5lIE5PREVfU0laRV9CSVRTCQkzMgogI2RlZmluZSBCV0lOX1NJWkVfQklUUwkJMjkKQEAgLTc3LDcgKzc3LDcgQEAKICNkZWZpbmUgQkRESVJfVVBQRVJfTUFTSwkoVUlOVDY0X0NBU1QgMHhmZmZmZiA8PCAxMCkKICNkZWZpbmUgQkRFQ0NfVVBQRVJfTUFTSwkoVUlOVDY0X0NBU1QgMHg3ZmZmZmZmIDw8IDMpCiAKLSNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU0dJX1NOMF9OX01PREUpICovCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NHSV9TTl9OX01PREUpICovCiAKICNkZWZpbmUgTk9ERV9BRERSU1BBQ0VfU0laRQkoVUlOVDY0X0NBU1QgMSA8PCBOT0RFX1NJWkVfQklUUykKIApAQCAtODUsMTUgKzg1LDE1IEBACiAjZGVmaW5lIE5BU0lEX0dFVChfcGEpCQkoaW50KSAoKFVJTlQ2NF9DQVNUIChfcGEpID4+CQlcCiAJCQkJCU5BU0lEX1NIRlQpICYgTkFTSURfQklUTUFTSykKIAotI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogCiAjZGVmaW5lIE5PREVfU1dJTl9CQVNFKG5hc2lkLCB3aWRnZXQpCQkJCQlcCiAJKCh3aWRnZXQgPT0gMCkgPyBOT0RFX0JXSU5fQkFTRSgobmFzaWQpLCBTV0lOMF9CSUdXSU4pCQlcCiAJOiBSQVdfTk9ERV9TV0lOX0JBU0UobmFzaWQsIHdpZGdldCkpCi0jZWxzZSAvKiBfX0FTU0VNQkxZX18gfHwgX1NUQU5EQUxPTkUgKi8KKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwogI2RlZmluZSBOT0RFX1NXSU5fQkFTRShuYXNpZCwgd2lkZ2V0KSBcCiAgICAgIChOT0RFX0lPX0JBU0UobmFzaWQpICsgKFVJTlQ2NF9DQVNUICh3aWRnZXQpIDw8IFNXSU5fU0laRV9CSVRTKSkKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gfHwgX1NUQU5EQUxPTkUgKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgcGVydGFpbiB0byB0aGUgSU8gc3BlY2lhbCBhZGRyZXNzCkBAIC0xNDMsMTIgKzE0Myw3IEBACiAjZGVmaW5lIFNOMF9XSURHRVRfQkFTRShfbmFzaWQsIF93aWQpCShOT0RFX1NXSU5fQkFTRSgoX25hc2lkKSwgKF93aWQpKSkKIAogLyogVHVybiBvbiBzYWJsZSBsb2dnaW5nIGZvciB0aGUgcHJvY2Vzc29ycyB3aG9zZSBiaXRzIGFyZSBzZXQuICovCi0jaWZkZWYgU0FCTEUKLSNkZWZpbmUgU0FCTEVfTE9HX1RSSUdHRVIoX21hcCkJXAotCQkqKCh2b2xhdGlsZSBodWJyZWdfdCAqKShJT19CQVNFICsgMHgxN2ZmZmYwKSkgPSAoX21hcCkKLSNlbHNlCiAjZGVmaW5lIFNBQkxFX0xPR19UUklHR0VSKF9tYXApCi0jZW5kaWYgLyogU0FCTEUgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgS0VSTl9OTUlfQUREUihuYXNpZCwgc2xpY2UpCQkJCQlcCkBAIC0yODEsNzYgKzI3Niw2IEBACiAKICNkZWZpbmUgX0FSQ1NQUk9NCiAKLSNpZmRlZiBfU1RBTkRBTE9ORQotCi0vKgotICogVGhlIFBST00gbmVlZHMgdG8gcGFzcyB0aGUgZGV2aWNlIGJhc2UgYWRkcmVzcyBhbmQgdGhlCi0gKiBkZXZpY2UgcGNpIGNmZyBzcGFjZSBhZGRyZXNzIHRvIHRoZSBkZXZpY2UgZHJpdmVycyBkdXJpbmcKLSAqIGluc3RhbGwuIFRoZSBDT01QT05FTlQtPktleSBmaWVsZCBpcyB1c2VkIGZvciB0aGlzIHB1cnBvc2UuCi0gKiBNYWNyb3MgbmVlZGVkIGJ5IFNOMCBkZXZpY2UgZHJpdmVycyB0byBjb252ZXJ0IHRoZQotICogQ09NUE9ORU5ULT5LZXkgZmllbGQgdG8gdGhlIHJlc3BlY3RpdmUgYmFzZSBhZGRyZXNzLgotICogS2V5IGZpZWxkIGxvb2tzIGFzIGZvbGxvd3M6Ci0gKgotICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogIHxkZXZuYXNpZCB8IHdpZGdldCAgfHBjaWlkIHxodWJ3aWRpZHxoc3RuYXNpZCB8IGFkYXAgfAotICogIHwgICAyICAgICB8ICAgMSAgICAgfCAgMSAgIHwgICAxICAgIHwgICAgMiAgICB8ICAgMSAgfAotICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgIHwgICAgICAgICB8ICAgICAgfAotICogIDY0ICAgICAgICA0OCAgICAgICAgNDAgICAgIDMyICAgICAgIDI0ICAgICAgICA4ICAgICAgMAotICoKLSAqIFRoZXNlIGFyZSB1c2VkIGJ5IHN0YW5kYWxvbmUgZHJpdmVycyB0aWxsIHRoZSBpbyBpbmZyYXN0cnVjdHVyZQotICogaXMgaW4gcGxhY2UuCi0gKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2RlZmluZSB1Y2hhciB1bnNpZ25lZCBjaGFyCi0KLSNkZWZpbmUgS0VZX0RFVk5BU0lEX1NIRlQgIDQ4Ci0jZGVmaW5lIEtFWV9XSURJRF9TSEZUCSAgIDQwCi0jZGVmaW5lIEtFWV9QQ0lJRF9TSEZUCSAgIDMyCi0jZGVmaW5lIEtFWV9IVUJXSURfU0hGVAkgICAyNAotI2RlZmluZSBLRVlfSFNUTkFTSURfU0hGVCAgOAotCi0jZGVmaW5lIE1LX1NOMF9LRVkobmFzaWQsIHdpZGlkLCBwY2lpZCkgXAotCQkJKCgoKF9fcHN1bnNpZ25lZF90KW5hc2lkKTw8IEtFWV9ERVZOQVNJRF9TSEZUIHxcCi0JCQkJKChfX3BzdW5zaWduZWRfdCl3aWRpZCkgPDwgS0VZX1dJRElEX1NIRlQpIHxcCi0JCQkJKChfX3BzdW5zaWduZWRfdClwY2lpZCkgPDwgS0VZX1BDSUlEX1NIRlQpCi0KLSNkZWZpbmUgQUREX0hVQldJRF9LRVkoa2V5LGh1YndpZClcCi0JCQkoa2V5fD0oKF9fcHN1bnNpZ25lZF90KWh1YndpZCA8PCBLRVlfSFVCV0lEX1NIRlQpKQotCi0jZGVmaW5lIEFERF9IU1ROQVNJRF9LRVkoa2V5LGhzdG5hc2lkKVwKLQkJCShrZXl8PSgoX19wc3Vuc2lnbmVkX3QpaHN0bmFzaWQgPDwgS0VZX0hTVE5BU0lEX1NIRlQpKQotCi0jZGVmaW5lIEdFVF9ERVZOQVNJRF9GUk9NX0tFWShrZXkpCSgoc2hvcnQpKGtleSA+PiBLRVlfREVWTkFTSURfU0hGVCkpCi0jZGVmaW5lIEdFVF9XSURJRF9GUk9NX0tFWShrZXkpCQkoKHVjaGFyKShrZXkgPj4gS0VZX1dJRElEX1NIRlQpKQotI2RlZmluZSBHRVRfUENJSURfRlJPTV9LRVkoa2V5KQkJKCh1Y2hhcikoa2V5ID4+IEtFWV9QQ0lJRF9TSEZUKSkKLSNkZWZpbmUgR0VUX0hVQldJRF9GUk9NX0tFWShrZXkpCSgodWNoYXIpKGtleSA+PiBLRVlfSFVCV0lEX1NIRlQpKQotI2RlZmluZSBHRVRfSFNUTkFTSURfRlJPTV9LRVkoa2V5KQkoKHNob3J0KShrZXkgPj4gS0VZX0hTVE5BU0lEX1NIRlQpKQotCi0jZGVmaW5lIFBDSV82NF9UQVJHSURfU0hGVAkJNjAKLQotI2RlZmluZSBHRVRfUENJQkFTRV9GUk9NX0tFWShrZXkpICAoTk9ERV9TV0lOX0JBU0UoR0VUX0RFVk5BU0lEX0ZST01fS0VZKGtleSksXAotCQkJCQlHRVRfV0lESURfRlJPTV9LRVkoa2V5KSlcCi0JCQkJCXwgQlJJREdFX0RFVklPKEdFVF9QQ0lJRF9GUk9NX0tFWShrZXkpKSkKLQotI2RlZmluZSBHRVRfUENJQ0ZHQkFTRV9GUk9NX0tFWShrZXkpIFwKLQkJCShOT0RFX1NXSU5fQkFTRShHRVRfREVWTkFTSURfRlJPTV9LRVkoa2V5KSxcCi0JCQkgICAgICBHRVRfV0lESURfRlJPTV9LRVkoa2V5KSlcCi0JCQl8IEJSSURHRV9UWVBFMF9DRkdfREVWKEdFVF9QQ0lJRF9GUk9NX0tFWShrZXkpKSkKLQotI2RlZmluZSBHRVRfV0lEQkFTRV9GUk9NX0tFWShrZXkpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChOT0RFX1NXSU5fQkFTRShHRVRfREVWTkFTSURfRlJPTV9LRVkoa2V5KSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfV0lESURfRlJPTV9LRVkoa2V5KSkpCi0KLSNkZWZpbmUgUFVUX0lOU1RBTExfU1RBVFVTKGMscykJCWMtPlJldmlzaW9uID0gcwotI2RlZmluZSBHRVRfSU5TVEFMTF9TVEFUVVMoYykJCWMtPlJldmlzaW9uCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBfU1RBTkRBTE9ORSAqLwotCiAjaWYgZGVmaW5lZCAoSFVCX0VSUl9TVFNfV0FSKQogCiAjZGVmaW5lIEVSUl9TVFNfV0FSX1JFR0lTVEVSCUlJT19JSUJVU0VSUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYXJjaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYXJjaC5oCmluZGV4IGZiNzg3NzMuLmY3YzQzZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hcmNoLmgKQEAgLTEzLDggKzEzLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCi0jaWZuZGVmIFNBQkxFCi0KICNpZm5kZWYgU04wWFhMICAvKiAxMjggY3B1IFNNUCBtYXggKi8KIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyB0aGF0IGNhbiBiZSBwYXJ0IG9mIGEga2VybmVsLgpAQCAtNTQsMjUgKzUyLDE2IEBACiAgKi8KICNkZWZpbmUgTUFYX1BBUlRJVElPTlMJCU1BWF9SRUdJT05TCiAKLQotI2Vsc2UKLQotI2RlZmluZSBNQVhfQ09NUEFDVF9OT0RFUwk0Ci0jZGVmaW5lIE1BWF9OQVNJRFMJCTQKLSNkZWZpbmUgTUFYQ1BVUwkJCTgKLQotI2VuZGlmCi0KICNkZWZpbmUgTkFTSURfTUFTS19CWVRFUwkoKE1BWF9OQVNJRFMgKyA3KSAvIDgpCiAKIC8qCiAgKiBTbG90IGNvbnN0YW50cyBmb3IgU04wCiAgKi8KLSNpZmRlZiBDT05GSUdfU0dJX1NOMF9OX01PREUKKyNpZmRlZiBDT05GSUdfU0dJX1NOX05fTU9ERQogI2RlZmluZSBNQVhfTUVNX1NMT1RTICAgMTYgICAgICAgICAgICAgICAgICAgICAgLyogbWF4IHNsb3RzIHBlciBub2RlICovCi0jZWxzZSAvKiAhQ09ORklHX1NHSV9TTjBfTl9NT0RFLCBhc3N1bWUgTV9NT0RFICovCisjZWxzZSAvKiAhQ09ORklHX1NHSV9TTl9OX01PREUsIGFzc3VtZSBDT05GSUdfU0dJX1NOX01fTU9ERSAqLwogI2RlZmluZSBNQVhfTUVNX1NMT1RTICAgMzIgICAgICAgICAgICAgICAgICAgICAgLyogbWF4IHNsb3RzIHBlciBub2RlICovCi0jZW5kaWYgLyogZGVmaW5lZChOX01PREUpICovCisjZW5kaWYgLyogQ09ORklHX1NHSV9TTl9NX01PREUgKi8KIAogI2RlZmluZSBTTE9UX1NISUZUICAgICAgCSgyNykKICNkZWZpbmUgU0xPVF9NSU5fTUVNX1NJWkUJKDMyKjEwMjQqMTAyNCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Yi5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViLmgKaW5kZXggZjVkYmJhNi4uM2UyMjhmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViLmgKQEAgLTMxLDEwICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJuaS5oPgogLy8jaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJjb3JlLmg+CiAKLSNpZmRlZiBTQUJMRQotI2RlZmluZSBJUDI3X05PX0hVQlVBUlRfSU5UCTEKLSNlbmRpZgotCiAvKiBUcmFuc2xhdGlvbiBvZiB1bmNhY2hlZCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lCVVBVFRSX0hTUEVDCTAKICNkZWZpbmUJVUFUVFJfSU8JMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1YmlvLmgKaW5kZXggZjMxNGRhMi4uZWY5MWIzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJpby5oCkBAIC00ODYsMjIgKzQ4Niw2IEBACiAjZGVmaW5lIElDUkJOX0FfQ0VSUl9TSEZUCTU0CiAjZGVmaW5lIElDUkJOX0FfRVJSX01BU0sJMHgzZmYKIAotI2lmIDAJLyogRGlzYWJsZWQsIHRoaXMgY2F1c2VzIG5hbWVzcGFjZSBwb2x1dGlvbiBhbmQgYnJlYWsgYWxsbW9kY29uZmlnICovCi0vKgotICogRWFzeSBhY2Nlc3MgbWFjcm9zLgotICovCi0jZGVmaW5lCWFfZXJyb3IJCWljcmJhX2ZpZWxkc19zLmVycm9yCi0jZGVmaW5lCWFfZWNvZGUJCWljcmJhX2ZpZWxkc19zLmVjb2RlCi0jZGVmaW5lCWFfbG5ldHVjZQlpY3JiYV9maWVsZHNfcy5sbmV0dWNlCi0jZGVmaW5lCWFfbWFyawkJaWNyYmFfZmllbGRzX3MubWFyawotI2RlZmluZQlhX3hlcnIJCWljcmJhX2ZpZWxkc19zLnhlcnIKLSNkZWZpbmUJYV9zaWRuCQlpY3JiYV9maWVsZHNfcy5zaWRuCi0jZGVmaW5lCWFfdG51bQkJaWNyYmFfZmllbGRzX3MudG51bQotI2RlZmluZQlhX2FkZHIJCWljcmJhX2ZpZWxkc19zLmFkZHIKLSNkZWZpbmUJYV92YWxpZAkJaWNyYmFfZmllbGRzX3MudmFsaWQKLSNkZWZpbmUJYV9pb3cJCWljcmJhX2ZpZWxkc19zLmlvdwotI2VuZGlmCi0KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNkZWZpbmUJSUlPX0lDUkJfQUREUl9TSEZUCTIJLyogU2hpZnQgdG8gZ2V0IHByb3BlciBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJtZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaAppbmRleCBhNjZkZWY0Li4xMDA2YWEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJtZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Ym1kLmgKQEAgLTkyLDcgKzkyLDcgQEAKICNkZWZpbmUgTURfVVJFRzFfMTQJCTB4MjIwMGYwIC8qIHVDb250cm9sbGVyL1VBUlQgMSByZWdpc3RlciAgICAgKi8KICNkZWZpbmUgTURfVVJFRzFfMTUJCTB4MjIwMGY4IC8qIHVDb250cm9sbGVyL1VBUlQgMSByZWdpc3RlciAgICAgKi8KIAotI2lmZGVmIENPTkZJR19TR0lfU04wX05fTU9ERQorI2lmZGVmIENPTkZJR19TR0lfU05fTl9NT0RFCiAjZGVmaW5lIE1EX01FTV9CQU5LUwkJNAkgLyogNCBiYW5rcyBvZiBtZW1vcnkgbWF4IGluIE4gbW9kZSAqLwogI2Vsc2UKICNkZWZpbmUgTURfTUVNX0JBTktTCQk4CSAvKiA4IGJhbmtzIG9mIG1lbW9yeSBtYXggaW4gTSBtb2RlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJwaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVicGkuaAppbmRleCAzNTViYmE4Li5lMzlmNWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJwaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1YnBpLmgKQEAgLTM5OCwyNCArMzk4LDYgQEAKIAogLyogUElfUlRfRklMVEVSX0NUUkwgbWFzayBhbmQgc2hpZnQgZGVmaW5pdGlvbnMgKi8KIAotI2lmIDAKLS8qCi0gKiBYWFggLSBUaGlzIHJlZ2lzdGVyJ3MgZGVmaW5pdGlvbiBoYXMgY2hhbmdlZCwgYnV0IGl0J3Mgb25seSBpbXBsZW1lbnRlZAotICogaW4gSHViIDIuCi0gKi8KLSNkZWZpbmUgUFJGQ19EUk9QX0NPVU5UX1NIRlQJMjcKLSNkZWZpbmUgUFJGQ19EUk9QX0NPVU5UX01BU0sJKFVJTlQ2NF9DQVNUIDB4M2ZmIDw8IDI3KQotI2RlZmluZSBQUkZDX0RST1BfQ1RSX1NIRlQJMTgKLSNkZWZpbmUgUFJGQ19EUk9QX0NUUl9NQVNLCShVSU5UNjRfQ0FTVCAweDFmZiA8PCAxOCkKLSNkZWZpbmUgUFJGQ19NQVNLX0VOQUJMRV9TSEZUCTEwCi0jZGVmaW5lIFBSRkNfTUFTS19FTkFCTEVfTUFTSwkoVUlOVDY0X0NBU1QgMHg3ZiA8PCAxMCkKLSNkZWZpbmUgUFJGQ19NQVNLX0NUUl9TSEZUCTIKLSNkZWZpbmUgUFJGQ19NQVNLX0NUUl9NQVNLCShVSU5UNjRfQ0FTVCAweGZmIDw8IDIpCi0jZGVmaW5lIFBSRkNfT0ZGU0VUX1NIRlQJMAotI2RlZmluZSBQUkZDX09GRlNFVF9NQVNLCShVSU5UNjRfQ0FTVCAzKQotI2VuZGlmIC8qIDAgKi8KLQotCiAvKgogICogQml0cyBmb3IgTkFDS19DTlRfQS9CIGFuZCBOQUNLX0NNUAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9pcDI3LmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9pcDI3LmgKaW5kZXggYWRlMGU5Ny4uM2M5N2UwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaXAyNy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2lwMjcuaApAQCAtNiw3ICs2LDcgQEAKICAqIERlcml2ZWQgZnJvbSBJUklYIDxzeXMvU04vU04wL0lQMjcuaD4uCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDYgYnkgUmFsZiBCYWVjaGxlCiAgKi8KICNpZm5kZWYgX0FTTV9TTl9TTjBfSVAyN19ICiAjZGVmaW5lIF9BU01fU05fU04wX0lQMjdfSApAQCAtODIsMTEgKzgyLDQgQEAKICNkZWZpbmUgU0VORF9OTUkoX25hc2lkLCBfc2xpY2UpCVwKICAgICAgICAgICBSRU1PVEVfSFVCX1MoKF9uYXNpZCksICAoUElfTk1JX0EgKyAoKF9zbGljZSkgKiBQSV9OTUlfT0ZGU0VUKSksIDEpCiAKLS8qIFNhbml0eSBoYXp6YXJkIC4uLiAgQmVsb3cgYWxsIHRoZSBPcmlnaW4gaGFja3MgYXJlIGZvbGxvd2luZy4gICovCi0KLSNkZWZpbmUgU04wMF9CUklER0UJCTB4OTIwMDAwMDAwODAwMDAwMAotI2RlZmluZSBTTjAwSV9CUklER0UwCQkweDkyMDAwMDAwMGIwMDAwMDAKLSNkZWZpbmUgU04wMElfQlJJREdFMQkJMHg5MjAwMDAwMDBlMDAwMDAwCi0jZGVmaW5lIFNOMDBJX0JSSURHRTIJCTB4OTIwMDAwMDAwZjAwMDAwMAotCiAjZW5kaWYgLyogX0FTTV9TTl9TTjBfSVAyN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbmkuaAppbmRleCBiM2JjNjk4Li5iOWJhNTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc25pLmgKQEAgLTE1LDkgKzE1LDYgQEAKIC8qCiAgKiBBU0lDIFBDSSByZWdpc3RlcnMgZm9yIGxpdHRsZSBlbmRpYW4gY29uZmlndXJhdGlvbi4KICAqLwotI2lmbmRlZiBfX01JUFNFTF9fCi0jZXJyb3IgIkZpeCBtZSBmb3IgYmlnIGVuZGlhbiIKLSNlbmRpZgogI2RlZmluZSBQQ0lNVF9VQ09ORgkJMHhiZmZmMDAwMAogI2RlZmluZSBQQ0lNVF9JT0FEVElNRU9VVDIJMHhiZmZmMDAwOAogI2RlZmluZSBQQ0lNVF9JT01FTUNPTkYJCTB4YmZmZjAwMTAKQEAgLTUxLDkgKzQ4LDkgQEAKICNkZWZpbmUgUENJTVRfUENJX0NPTkYJCTB4YmZmZjAxMDAKIAogLyoKLSAqIERhdGEgcG9ydCBmb3IgdGhlIFBDSSBidXMuCisgKiBEYXRhIHBvcnQgZm9yIHRoZSBQQ0kgYnVzIGluIElPIHNwYWNlCiAgKi8KLSNkZWZpbmUgUENJTVRfQ09ORklHX0RBVEEJMHhiNDAwMGNmYworI2RlZmluZSBQQ0lNVF9DT05GSUdfREFUQQkweDBjZmMKIAogLyoKICAqIEJvYXJkIHNwZWNpZmljIHJlZ2lzdGVycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy93YXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmgKaW5kZXggYWQzNzRiZC4uNzA2MzZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy93YXIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3dhci5oCkBAIC0xNzIsNyArMTcyLDggQEAKICAqIE9uIHRoZSBSTTkwMDAgdGhlcmUgaXMgYSBwcm9ibGVtIHdoaWNoIG1ha2VzIHRoZSBDcmVhdGVEaXJ0eUV4Y2x1c2l2ZQogICogY2FjaGUgb3BlcmF0aW9uIHVudXNhYmxlIG9uIFNNUCBzeXN0ZW1zLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYKSB8fCBkZWZpbmVkKENPTkZJR19QTUNfWU9TRU1JVEUpCisjaWYgZGVmaW5lZChDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYKSB8fCBkZWZpbmVkKENPTkZJR19QTUNfWU9TRU1JVEUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19CQVNMRVJfRVhDSVRFKQogI2RlZmluZSAgUk05MDAwX0NERVhfU01QX1dBUgkJMQogI2VuZGlmCiAKQEAgLTE4Miw3ICsxODMsNyBAQAogICogYmVpbmcgZmV0Y2hlZCBtYXkgY2FzZSBzcHVyaW91cyBleGNlcHRpb25zLgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYKSB8fCBkZWZpbmVkKENPTkZJR19NT01FTkNPX09DRUxPVF8zKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfUE1DX1lPU0VNSVRFKQorICAgIGRlZmluZWQoQ09ORklHX1BNQ19ZT1NFTUlURSkgfHwgZGVmaW5lZChDT05GSUdfQkFTTEVSX0VYQ0lURSkKICNkZWZpbmUgSUNBQ0hFX1JFRklMTFNfV09SS0FST1VORF9XQVIJMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaAppbmRleCA5ZmNmMDE2Li5mNjI2NWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCkBAIC0zMjksNyArMzI5LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfQ0VMTAkoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBcCiAJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAotCSAgICBDUFVfRlRSX0NUUkwgfCBDUFVfRlRSX1BBVVNFX1pFUk8pCisJICAgIENQVV9GVFJfQ1RSTCB8IENQVV9GVFJfUEFVU0VfWkVSTyB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKICNkZWZpbmUgQ1BVX0ZUUlNfQ09NUEFUSUJMRQkoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggNzIxMzcxMy4uMDg3MzRlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTExNyw2ICsxMTcsMTAgQEAKIGV4dGVybiB2b2lkIGNvbnNvbGVfc3RhcnQoc3RydWN0IGNvbnNvbGUgKik7CiBleHRlcm4gaW50IGlzX2NvbnNvbGVfbG9ja2VkKHZvaWQpOwogCisvKiBTdXNwZW5kIGFuZCByZXN1bWUgY29uc29sZSBtZXNzYWdlcyBvdmVyIFBNIGV2ZW50cyAqLworZXh0ZXJuIHZvaWQgc3VzcGVuZF9jb25zb2xlKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzdW1lX2NvbnNvbGUodm9pZCk7CisKIC8qIFNvbWUgZGVidWcgc3R1YiB0byBjYXRjaCBzb21lIG9mIHRoZSBvYnZpb3VzIHJhY2VzIGluIHRoZSBWVCBjb2RlICovCiAjaWYgMQogI2RlZmluZSBXQVJOX0NPTlNPTEVfVU5MT0NLRUQoKQlXQVJOX09OKCFpc19jb25zb2xlX2xvY2tlZCgpICYmICFvb3BzX2luX3Byb2dyZXNzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiMjM2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwNCAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisjaWZuZGVmIERNQUVOR0lORV9ICisjZGVmaW5lIERNQUVOR0lORV9ICisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklHX0RNQV9FTkdJTkUKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKworLyoqCisgKiBlbnVtIGRtYV9ldmVudCAtIHJlc291cmNlIFBOUC9wb3dlciBtYW5hZ21lbnQgZXZlbnRzCisgKiBARE1BX1JFU09VUkNFX1NVU1BFTkQ6IERNQSBkZXZpY2UgZ29pbmcgaW50byBsb3cgcG93ZXIgc3RhdGUKKyAqIEBETUFfUkVTT1VSQ0VfUkVTVU1FOiBETUEgZGV2aWNlIHJldHVybmluZyB0byBmdWxsIHBvd2VyCisgKiBARE1BX1JFU09VUkNFX0FEREVEOiBETUEgZGV2aWNlIGFkZGVkIHRvIHRoZSBzeXN0ZW0KKyAqIEBETUFfUkVTT1VSQ0VfUkVNT1ZFRDogRE1BIGRldmljZSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbQorICovCitlbnVtIGRtYV9ldmVudCB7CisJRE1BX1JFU09VUkNFX1NVU1BFTkQsCisJRE1BX1JFU09VUkNFX1JFU1VNRSwKKwlETUFfUkVTT1VSQ0VfQURERUQsCisJRE1BX1JFU09VUkNFX1JFTU9WRUQsCit9OworCisvKioKKyAqIHR5cGVkZWYgZG1hX2Nvb2tpZV90CisgKgorICogaWYgZG1hX2Nvb2tpZV90IGlzID4wIGl0J3MgYSBETUEgcmVxdWVzdCBjb29raWUsIDwwIGl0J3MgYW4gZXJyb3IgY29kZQorICovCit0eXBlZGVmIHMzMiBkbWFfY29va2llX3Q7CisKKyNkZWZpbmUgZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpICgoY29va2llKSA8IDAgPyAxIDogMCkKKworLyoqCisgKiBlbnVtIGRtYV9zdGF0dXMgLSBETUEgdHJhbnNhY3Rpb24gc3RhdHVzCisgKiBARE1BX1NVQ0NFU1M6IHRyYW5zYWN0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyAqIEBETUFfSU5fUFJPR1JFU1M6IHRyYW5zYWN0aW9uIG5vdCB5ZXQgcHJvY2Vzc2VkCisgKiBARE1BX0VSUk9SOiB0cmFuc2FjdGlvbiBmYWlsZWQKKyAqLworZW51bSBkbWFfc3RhdHVzIHsKKwlETUFfU1VDQ0VTUywKKwlETUFfSU5fUFJPR1JFU1MsCisJRE1BX0VSUk9SLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgZG1hX2NoYW5fcGVyY3B1IC0gdGhlIHBlci1DUFUgcGFydCBvZiBzdHJ1Y3QgZG1hX2NoYW4KKyAqIEByZWZjb3VudDogbG9jYWxfdCB1c2VkIGZvciBvcGVuLWNvZGVkICJiaWdyZWYiIGNvdW50aW5nCisgKiBAbWVtY3B5X2NvdW50OiB0cmFuc2FjdGlvbiBjb3VudGVyCisgKiBAYnl0ZXNfdHJhbnNmZXJyZWQ6IGJ5dGUgY291bnRlcgorICovCisKK3N0cnVjdCBkbWFfY2hhbl9wZXJjcHUgeworCWxvY2FsX3QgcmVmY291bnQ7CisJLyogc3RhdHMgKi8KKwl1bnNpZ25lZCBsb25nIG1lbWNweV9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3RyYW5zZmVycmVkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZG1hX2NoYW4gLSBkZXZpY2VzIHN1cHBseSBETUEgY2hhbm5lbHMsIGNsaWVudHMgdXNlIHRoZW0KKyAqIEBjbGllbnQ6IHB0ciB0byB0aGUgY2xpZW50IHVzZXIgb2YgdGhpcyBjaGFuLCB3aWxsIGJlIE5VTEwgd2hlbiB1bnVzZWQKKyAqIEBkZXZpY2U6IHB0ciB0byB0aGUgZG1hIGRldmljZSB3aG8gc3VwcGxpZXMgdGhpcyBjaGFubmVsLCBhbHdheXMgIU5VTEwKKyAqIEBjb29raWU6IGxhc3QgY29va2llIHZhbHVlIHJldHVybmVkIHRvIGNsaWVudAorICogQGNoYW5faWQ6CisgKiBAY2xhc3NfZGV2OgorICogQHJlZmNvdW50OiBrcmVmLCB1c2VkIGluICJiaWdyZWYiIHNsb3ctbW9kZQorICogQHNsb3dfcmVmOgorICogQHJjdToKKyAqIEBjbGllbnRfbm9kZTogdXNlZCB0byBhZGQgdGhpcyB0byB0aGUgY2xpZW50IGNoYW4gbGlzdAorICogQGRldmljZV9ub2RlOiB1c2VkIHRvIGFkZCB0aGlzIHRvIHRoZSBkZXZpY2UgY2hhbiBsaXN0CisgKiBAbG9jYWw6IHBlci1jcHUgcG9pbnRlciB0byBhIHN0cnVjdCBkbWFfY2hhbl9wZXJjcHUKKyAqLworc3RydWN0IGRtYV9jaGFuIHsKKwlzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2U7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKworCS8qIHN5c2ZzICovCisJaW50IGNoYW5faWQ7CisJc3RydWN0IGNsYXNzX2RldmljZSBjbGFzc19kZXY7CisKKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKwlpbnQgc2xvd19yZWY7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKworCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X25vZGU7CisJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2Vfbm9kZTsKKwlzdHJ1Y3QgZG1hX2NoYW5fcGVyY3B1ICpsb2NhbDsKK307CisKK3ZvaWQgZG1hX2NoYW5fY2xlYW51cChzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2hhbl9nZXQoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCWlmICh1bmxpa2VseShjaGFuLT5zbG93X3JlZikpCisJCWtyZWZfZ2V0KCZjaGFuLT5yZWZjb3VudCk7CisJZWxzZSB7CisJCWxvY2FsX2luYygmKHBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBnZXRfY3B1KCkpLT5yZWZjb3VudCkpOworCQlwdXRfY3B1KCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NoYW5fcHV0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlpZiAodW5saWtlbHkoY2hhbi0+c2xvd19yZWYpKQorCQlrcmVmX3B1dCgmY2hhbi0+cmVmY291bnQsIGRtYV9jaGFuX2NsZWFudXApOworCWVsc2UgeworCQlsb2NhbF9kZWMoJihwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgZ2V0X2NwdSgpKS0+cmVmY291bnQpKTsKKwkJcHV0X2NwdSgpOworCX0KK30KKworLyoKKyAqIHR5cGVkZWYgZG1hX2V2ZW50X2NhbGxiYWNrIC0gZnVuY3Rpb24gcG9pbnRlciB0byBhIERNQSBldmVudCBjYWxsYmFjaworICovCit0eXBlZGVmIHZvaWQgKCpkbWFfZXZlbnRfY2FsbGJhY2spIChzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50LAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGVudW0gZG1hX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiBzdHJ1Y3QgZG1hX2NsaWVudCAtIGluZm8gb24gdGhlIGVudGl0eSBtYWtpbmcgdXNlIG9mIERNQSBzZXJ2aWNlcworICogQGV2ZW50X2NhbGxiYWNrOiBmdW5jIHB0ciB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMKKyAqIEBjaGFuX2NvdW50OiBudW1iZXIgb2YgY2hhbnMgYWxsb2NhdGVkCisgKiBAY2hhbnNfZGVzaXJlZDogbnVtYmVyIG9mIGNoYW5zIHJlcXVlc3RlZC4gQ2FuIGJlICsvLSBjaGFuX2NvdW50CisgKiBAbG9jazogcHJvdGVjdHMgYWNjZXNzIHRvIHRoZSBjaGFubmVscyBsaXN0CisgKiBAY2hhbm5lbHM6IHRoZSBsaXN0IG9mIERNQSBjaGFubmVscyBhbGxvY2F0ZWQKKyAqIEBnbG9iYWxfbm9kZTogbGlzdF9oZWFkIGZvciBnbG9iYWwgZG1hX2NsaWVudF9saXN0CisgKi8KK3N0cnVjdCBkbWFfY2xpZW50IHsKKwlkbWFfZXZlbnRfY2FsbGJhY2sJZXZlbnRfY2FsbGJhY2s7CisJdW5zaWduZWQgaW50CQljaGFuX2NvdW50OworCXVuc2lnbmVkIGludAkJY2hhbnNfZGVzaXJlZDsKKworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAljaGFubmVsczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWdsb2JhbF9ub2RlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZG1hX2RldmljZSAtIGluZm8gb24gdGhlIGVudGl0eSBzdXBwbHlpbmcgRE1BIHNlcnZpY2VzCisgKiBAY2hhbmNudDogaG93IG1hbnkgRE1BIGNoYW5uZWxzIGFyZSBzdXBwb3J0ZWQKKyAqIEBjaGFubmVsczogdGhlIGxpc3Qgb2Ygc3RydWN0IGRtYV9jaGFuCisgKiBAZ2xvYmFsX25vZGU6IGxpc3RfaGVhZCBmb3IgZ2xvYmFsIGRtYV9kZXZpY2VfbGlzdAorICogQHJlZmNvdW50OgorICogQGRvbmU6CisgKiBAZGV2X2lkOgorICogT3RoZXIgZnVuYyBwdHJzOiB1c2VkIHRvIG1ha2UgdXNlIG9mIHRoaXMgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzCisgKi8KK3N0cnVjdCBkbWFfZGV2aWNlIHsKKworCXVuc2lnbmVkIGludCBjaGFuY250OworCXN0cnVjdCBsaXN0X2hlYWQgY2hhbm5lbHM7CisJc3RydWN0IGxpc3RfaGVhZCBnbG9iYWxfbm9kZTsKKworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisKKwlpbnQgZGV2X2lkOworCisJaW50ICgqZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworCXZvaWQgKCpkZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcykoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKwlkbWFfY29va2llX3QgKCpkZXZpY2VfbWVtY3B5X2J1Zl90b19idWYpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCXZvaWQgKmRlc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbik7CisJZG1hX2Nvb2tpZV90ICgqZGV2aWNlX21lbWNweV9idWZfdG9fcGcpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2b2lkICprZGF0YSwKKwkJCXNpemVfdCBsZW4pOworCWRtYV9jb29raWVfdCAoKmRldmljZV9tZW1jcHlfcGdfdG9fcGcpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCXN0cnVjdCBwYWdlICpkZXN0X3BnLCB1bnNpZ25lZCBpbnQgZGVzdF9vZmYsCisJCQlzdHJ1Y3QgcGFnZSAqc3JjX3BnLCB1bnNpZ25lZCBpbnQgc3JjX29mZiwgc2l6ZV90IGxlbik7CisJZW51bSBkbWFfc3RhdHVzICgqZGV2aWNlX21lbWNweV9jb21wbGV0ZSkoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgZG1hX2Nvb2tpZV90ICpsYXN0LAorCQkJZG1hX2Nvb2tpZV90ICp1c2VkKTsKKwl2b2lkICgqZGV2aWNlX21lbWNweV9pc3N1ZV9wZW5kaW5nKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworfTsKKworLyogLS0tIHB1YmxpYyBETUEgZW5naW5lIEFQSSAtLS0gKi8KKworc3RydWN0IGRtYV9jbGllbnQgKmRtYV9hc3luY19jbGllbnRfcmVnaXN0ZXIoZG1hX2V2ZW50X2NhbGxiYWNrIGV2ZW50X2NhbGxiYWNrKTsKK3ZvaWQgZG1hX2FzeW5jX2NsaWVudF91bnJlZ2lzdGVyKHN0cnVjdCBkbWFfY2xpZW50ICpjbGllbnQpOwordm9pZCBkbWFfYXN5bmNfY2xpZW50X2NoYW5fcmVxdWVzdChzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50LAorCQl1bnNpZ25lZCBpbnQgbnVtYmVyKTsKKworLyoqCisgKiBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19idWYgLSBvZmZsb2FkZWQgY29weSBiZXR3ZWVuIHZpcnR1YWwgYWRkcmVzc2VzCisgKiBAY2hhbjogRE1BIGNoYW5uZWwgdG8gb2ZmbG9hZCBjb3B5IHRvCisgKiBAZGVzdDogZGVzdGluYXRpb24gYWRkcmVzcyAodmlydHVhbCkKKyAqIEBzcmM6IHNvdXJjZSBhZGRyZXNzICh2aXJ0dWFsKQorICogQGxlbjogbGVuZ3RoCisgKgorICogQm90aCBAZGVzdCBhbmQgQHNyYyBtdXN0IGJlIG1hcHBhYmxlIHRvIGEgYnVzIGFkZHJlc3MgYWNjb3JkaW5nIHRvIHRoZQorICogRE1BIG1hcHBpbmcgQVBJIHJ1bGVzIGZvciBzdHJlYW1pbmcgbWFwcGluZ3MuCisgKiBCb3RoIEBkZXN0IGFuZCBAc3JjIG11c3Qgc3RheSBtZW1vcnkgcmVzaWRlbnQgKGtlcm5lbCBtZW1vcnkgb3IgbG9ja2VkCisgKiB1c2VyIHNwYWNlIHBhZ2VzKQorICovCitzdGF0aWMgaW5saW5lIGRtYV9jb29raWVfdCBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19idWYoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCXZvaWQgKmRlc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikKK3sKKwlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5ieXRlc190cmFuc2ZlcnJlZCArPSBsZW47CisJcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGNwdSktPm1lbWNweV9jb3VudCsrOworCXB1dF9jcHUoKTsKKworCXJldHVybiBjaGFuLT5kZXZpY2UtPmRldmljZV9tZW1jcHlfYnVmX3RvX2J1ZihjaGFuLCBkZXN0LCBzcmMsIGxlbik7Cit9CisKKy8qKgorICogZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcgLSBvZmZsb2FkZWQgY29weQorICogQGNoYW46IERNQSBjaGFubmVsIHRvIG9mZmxvYWQgY29weSB0bworICogQHBhZ2U6IGRlc3RpbmF0aW9uIHBhZ2UKKyAqIEBvZmZzZXQ6IG9mZnNldCBpbiBwYWdlIHRvIGNvcHkgdG8KKyAqIEBrZGF0YTogc291cmNlIGFkZHJlc3MgKHZpcnR1YWwpCisgKiBAbGVuOiBsZW5ndGgKKyAqCisgKiBCb3RoIEBwYWdlL0BvZmZzZXQgYW5kIEBrZGF0YSBtdXN0IGJlIG1hcHBhYmxlIHRvIGEgYnVzIGFkZHJlc3MgYWNjb3JkaW5nCisgKiB0byB0aGUgRE1BIG1hcHBpbmcgQVBJIHJ1bGVzIGZvciBzdHJlYW1pbmcgbWFwcGluZ3MuCisgKiBCb3RoIEBwYWdlL0BvZmZzZXQgYW5kIEBrZGF0YSBtdXN0IHN0YXkgbWVtb3J5IHJlc2lkZW50IChrZXJuZWwgbWVtb3J5IG9yCisgKiBsb2NrZWQgdXNlciBzcGFjZSBwYWdlcykKKyAqLworc3RhdGljIGlubGluZSBkbWFfY29va2llX3QgZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2b2lkICprZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5ieXRlc190cmFuc2ZlcnJlZCArPSBsZW47CisJcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGNwdSktPm1lbWNweV9jb3VudCsrOworCXB1dF9jcHUoKTsKKworCXJldHVybiBjaGFuLT5kZXZpY2UtPmRldmljZV9tZW1jcHlfYnVmX3RvX3BnKGNoYW4sIHBhZ2UsIG9mZnNldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZGF0YSwgbGVuKTsKK30KKworLyoqCisgKiBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19wZyAtIG9mZmxvYWRlZCBjb3B5CisgKiBAY2hhbjogRE1BIGNoYW5uZWwgdG8gb2ZmbG9hZCBjb3B5IHRvCisgKiBAZGVzdF9wYWdlOiBkZXN0aW5hdGlvbiBwYWdlCisgKiBAZGVzdF9vZmY6IG9mZnNldCBpbiBwYWdlIHRvIGNvcHkgdG8KKyAqIEBzcmNfcGFnZTogc291cmNlIHBhZ2UKKyAqIEBzcmNfb2ZmOiBvZmZzZXQgaW4gcGFnZSB0byBjb3B5IGZyb20KKyAqIEBsZW46IGxlbmd0aAorICoKKyAqIEJvdGggQGRlc3RfcGFnZS9AZGVzdF9vZmYgYW5kIEBzcmNfcGFnZS9Ac3JjX29mZiBtdXN0IGJlIG1hcHBhYmxlIHRvIGEgYnVzCisgKiBhZGRyZXNzIGFjY29yZGluZyB0byB0aGUgRE1BIG1hcHBpbmcgQVBJIHJ1bGVzIGZvciBzdHJlYW1pbmcgbWFwcGluZ3MuCisgKiBCb3RoIEBkZXN0X3BhZ2UvQGRlc3Rfb2ZmIGFuZCBAc3JjX3BhZ2UvQHNyY19vZmYgbXVzdCBzdGF5IG1lbW9yeSByZXNpZGVudAorICogKGtlcm5lbCBtZW1vcnkgb3IgbG9ja2VkIHVzZXIgc3BhY2UgcGFnZXMpCisgKi8KK3N0YXRpYyBpbmxpbmUgZG1hX2Nvb2tpZV90IGRtYV9hc3luY19tZW1jcHlfcGdfdG9fcGcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCXN0cnVjdCBwYWdlICpkZXN0X3BnLCB1bnNpZ25lZCBpbnQgZGVzdF9vZmYsIHN0cnVjdCBwYWdlICpzcmNfcGcsCisJdW5zaWduZWQgaW50IHNyY19vZmYsIHNpemVfdCBsZW4pCit7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgY3B1KS0+Ynl0ZXNfdHJhbnNmZXJyZWQgKz0gbGVuOworCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5tZW1jcHlfY291bnQrKzsKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfbWVtY3B5X3BnX3RvX3BnKGNoYW4sIGRlc3RfcGcsIGRlc3Rfb2ZmLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3BnLCBzcmNfb2ZmLCBsZW4pOworfQorCisvKioKKyAqIGRtYV9hc3luY19tZW1jcHlfaXNzdWVfcGVuZGluZyAtIGZsdXNoIHBlbmRpbmcgY29waWVzIHRvIEhXCisgKiBAY2hhbjoKKyAqCisgKiBUaGlzIGFsbG93cyBkcml2ZXJzIHRvIHB1c2ggY29waWVzIHRvIEhXIGluIGJhdGNoZXMsCisgKiByZWR1Y2luZyBNTUlPIHdyaXRlcyB3aGVyZSBwb3NzaWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRtYV9hc3luY19tZW1jcHlfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJcmV0dXJuIGNoYW4tPmRldmljZS0+ZGV2aWNlX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworfQorCisvKioKKyAqIGRtYV9hc3luY19tZW1jcHlfY29tcGxldGUgLSBwb2xsIGZvciB0cmFuc2FjdGlvbiBjb21wbGV0aW9uCisgKiBAY2hhbjogRE1BIGNoYW5uZWwKKyAqIEBjb29raWU6IHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gY2hlY2sgc3RhdHVzIG9mCisgKiBAbGFzdDogcmV0dXJucyBsYXN0IGNvbXBsZXRlZCBjb29raWUsIGNhbiBiZSBOVUxMCisgKiBAdXNlZDogcmV0dXJucyBsYXN0IGlzc3VlZCBjb29raWUsIGNhbiBiZSBOVUxMCisgKgorICogSWYgQGxhc3QgYW5kIEB1c2VkIGFyZSBwYXNzZWQgaW4sIHVwb24gcmV0dXJuIHRoZXkgcmVmbGVjdCB0aGUgZHJpdmVyCisgKiBpbnRlcm5hbCBzdGF0ZSBhbmQgY2FuIGJlIHVzZWQgd2l0aCBkbWFfYXN5bmNfaXNfY29tcGxldGUoKSB0byBjaGVjaworICogdGhlIHN0YXR1cyBvZiBtdWx0aXBsZSBjb29raWVzIHdpdGhvdXQgcmUtY2hlY2tpbmcgaGFyZHdhcmUgc3RhdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBkbWFfc3RhdHVzIGRtYV9hc3luY19tZW1jcHlfY29tcGxldGUoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCWRtYV9jb29raWVfdCBjb29raWUsIGRtYV9jb29raWVfdCAqbGFzdCwgZG1hX2Nvb2tpZV90ICp1c2VkKQoreworCXJldHVybiBjaGFuLT5kZXZpY2UtPmRldmljZV9tZW1jcHlfY29tcGxldGUoY2hhbiwgY29va2llLCBsYXN0LCB1c2VkKTsKK30KKworLyoqCisgKiBkbWFfYXN5bmNfaXNfY29tcGxldGUgLSB0ZXN0IGEgY29va2llIGFnYWluc3QgY2hhbiBzdGF0ZQorICogQGNvb2tpZTogdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byB0ZXN0IHN0YXR1cyBvZgorICogQGxhc3RfY29tcGxldGU6IGxhc3Qga25vdyBjb21wbGV0ZWQgdHJhbnNhY3Rpb24KKyAqIEBsYXN0X3VzZWQ6IGxhc3QgY29va2llIHZhbHVlIGhhbmRlZCBvdXQKKyAqCisgKiBkbWFfYXN5bmNfaXNfY29tcGxldGUoKSBpcyB1c2VkIGluIGRtYV9hc3luY19tZW1jcHlfY29tcGxldGUoKQorICogdGhlIHRlc3QgbG9naWMgaXMgc2VwZXJhdGVkIGZvciBsaWdodHdlaWdodCB0ZXN0aW5nIG9mIG11bHRpcGxlIGNvb2tpZXMKKyAqLworc3RhdGljIGlubGluZSBlbnVtIGRtYV9zdGF0dXMgZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGRtYV9jb29raWVfdCBjb29raWUsCisJCQlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZSwgZG1hX2Nvb2tpZV90IGxhc3RfdXNlZCkKK3sKKwlpZiAobGFzdF9jb21wbGV0ZSA8PSBsYXN0X3VzZWQpIHsKKwkJaWYgKChjb29raWUgPD0gbGFzdF9jb21wbGV0ZSkgfHwgKGNvb2tpZSA+IGxhc3RfdXNlZCkpCisJCQlyZXR1cm4gRE1BX1NVQ0NFU1M7CisJfSBlbHNlIHsKKwkJaWYgKChjb29raWUgPD0gbGFzdF9jb21wbGV0ZSkgJiYgKGNvb2tpZSA+IGxhc3RfdXNlZCkpCisJCQlyZXR1cm4gRE1BX1NVQ0NFU1M7CisJfQorCXJldHVybiBETUFfSU5fUFJPR1JFU1M7Cit9CisKKworLyogLS0tIERNQSBkZXZpY2UgLS0tICovCisKK2ludCBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpOwordm9pZCBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZSk7CisKKy8qIC0tLSBIZWxwZXIgaW92LWxvY2tpbmcgZnVuY3Rpb25zIC0tLSAqLworCitzdHJ1Y3QgZG1hX3BhZ2VfbGlzdCB7CisJY2hhciAqYmFzZV9hZGRyZXNzOworCWludCBucl9wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworfTsKKworc3RydWN0IGRtYV9waW5uZWRfbGlzdCB7CisJaW50IG5yX2lvdmVjczsKKwlzdHJ1Y3QgZG1hX3BhZ2VfbGlzdCBwYWdlX2xpc3RbMF07Cit9OworCitzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0ICpkbWFfcGluX2lvdmVjX3BhZ2VzKHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3QgbGVuKTsKK3ZvaWQgZG1hX3VucGluX2lvdmVjX3BhZ2VzKHN0cnVjdCBkbWFfcGlubmVkX2xpc3QqIHBpbm5lZF9saXN0KTsKKworZG1hX2Nvb2tpZV90IGRtYV9tZW1jcHlfdG9faW92ZWMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0ICpwaW5uZWRfbGlzdCwgdW5zaWduZWQgY2hhciAqa2RhdGEsIHNpemVfdCBsZW4pOworZG1hX2Nvb2tpZV90IGRtYV9tZW1jcHlfcGdfdG9faW92ZWMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0ICpwaW5uZWRfbGlzdCwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZV90IGxlbik7CisKKyNlbmRpZiAvKiBDT05GSUdfRE1BX0VOR0lORSAqLworI2VuZGlmIC8qIERNQUVOR0lORV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyby5oIGIvaW5jbHVkZS9saW51eC9pMm8uaAppbmRleCBkZDdkNjI3Li5jMTE1ZTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyby5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJvLmgKQEAgLTExMTQsOCArMTExNCwxMSBAQAogCiAJbW1zZy0+bWZhID0gcmVhZGwoYy0+aW5fcG9ydCk7CiAJaWYgKHVubGlrZWx5KG1tc2ctPm1mYSA+PSBjLT5pbl9xdWV1ZS5sZW4pKSB7CisJCXUzMiBtZmEgPSBtbXNnLT5tZmE7CisKIAkJbWVtcG9vbF9mcmVlKG1tc2csIGMtPmluX21zZy5tZW1wb29sKTsKLQkJaWYobW1zZy0+bWZhID09IEkyT19RVUVVRV9FTVBUWSkKKworCQlpZiAobWZhID09IEkyT19RVUVVRV9FTVBUWSkKIAkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggMjhmNGYzYi4uODk5YzNkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTE2OSw3ICsxNjksNyBAQAogc3RydWN0IGlwX21jX2xpc3QKIHsKIAlzdHJ1Y3QgaW5fZGV2aWNlCSppbnRlcmZhY2U7Ci0JdW5zaWduZWQgbG9uZwkJbXVsdGlhZGRyOworCV9fYmUzMgkJCW11bHRpYWRkcjsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdAkqc291cmNlczsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdAkqdG9tYjsKIAl1bnNpZ25lZCBpbnQJCXNmbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGY0MTY5YmIuLmU0MzJiNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogCiBzdHJ1Y3QgZGl2ZXJ0X2JsazsKIHN0cnVjdCB2bGFuX2dyb3VwOwpAQCAtMzExLDYgKzMxMiw5IEBACiAjZGVmaW5lIE5FVElGX0ZfTExUWAkJNDA5NgkvKiBMb2NrTGVzcyBUWCAqLwogI2RlZmluZSBORVRJRl9GX1VGTyAgICAgICAgICAgICA4MTkyICAgIC8qIENhbiBvZmZsb2FkIFVEUCBMYXJnZSBTZW5kKi8KIAorI2RlZmluZSBORVRJRl9GX0dFTl9DU1VNCShORVRJRl9GX05PX0NTVU0gfCBORVRJRl9GX0hXX0NTVU0pCisjZGVmaW5lIE5FVElGX0ZfQUxMX0NTVU0JKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfR0VOX0NTVU0pCisKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV4dF9zY2hlZDsKIAogCS8qIEludGVyZmFjZSBpbmRleC4gVW5pcXVlIGRldmljZSBpZGVudGlmaWVyCSovCkBAIC00MDYsNyArNDEwLDcgQEAKICAqIE9uZSBwYXJ0IGlzIG1vc3RseSB1c2VkIG9uIHhtaXQgcGF0aCAoZGV2aWNlKQogICovCiAJLyogaGFyZF9zdGFydF94bWl0IHN5bmNocm9uaXplciAqLwotCXNwaW5sb2NrX3QJCXhtaXRfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCXNwaW5sb2NrX3QJCV94bWl0X2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAkvKiBjcHUgaWQgb2YgcHJvY2Vzc29yIGVudGVyZWQgdG8gaGFyZF9zdGFydF94bWl0IG9yIC0xLAogCSAgIGlmIG5vYm9keSBlbnRlcmVkIHRoZXJlLgogCSAqLwpAQCAtNTkzLDYgKzU5Nyw5IEBACiAJc3RydWN0IHNrX2J1ZmYJCSpjb21wbGV0aW9uX3F1ZXVlOwogCiAJc3RydWN0IG5ldF9kZXZpY2UJYmFja2xvZ19kZXY7CS8qIFNvcnJ5LiA4KSAqLworI2lmZGVmIENPTkZJR19ORVRfRE1BCisJc3RydWN0IGRtYV9jaGFuCQkqbmV0X2RtYTsKKyNlbmRpZgogfTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzb2Z0bmV0X2RhdGEsc29mdG5ldF9kYXRhKTsKQEAgLTg4OSwxMSArODk2LDQzIEBACiAJY2xlYXJfYml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfdHhfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNwaW5fbG9jaygmZGV2LT5feG1pdF9sb2NrKTsKKwlkZXYtPnhtaXRfbG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X2xvY2tfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfYmgoJmRldi0+X3htaXRfbG9jayk7CisJZGV2LT54bWl0X2xvY2tfb3duZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3R4X3RyeWxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyID0gc3Bpbl90cnlsb2NrKCZkZXYtPl94bWl0X2xvY2spOworCWlmICghZXJyKQorCQlkZXYtPnhtaXRfbG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfdHhfdW5sb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT54bWl0X2xvY2tfb3duZXIgPSAtMTsKKwlzcGluX3VubG9jaygmZGV2LT5feG1pdF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X3VubG9ja19iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+X3htaXRfbG9jayk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogfQogCiAvKiBUaGVzZSBmdW5jdGlvbnMgbGl2ZSBlbHNld2hlcmUgKGRyaXZlcnMvbmV0L25ldF9pbml0LmMsIGJ1dCByZWxhdGVkKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCmluZGV4IDNmZjg4YzguLmQyZTRiZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKQEAgLTY5LDYgKzY5LDEwIEBACiAJLyogQ29ubmVjdGlvbiBpcyBkeWluZyAocmVtb3ZlZCBmcm9tIGxpc3RzKSwgY2FuIG5vdCBiZSB1bnNldC4gKi8KIAlJUFNfRFlJTkdfQklUID0gOSwKIAlJUFNfRFlJTkcgPSAoMSA8PCBJUFNfRFlJTkdfQklUKSwKKworCS8qIENvbm5lY3Rpb24gaGFzIGZpeGVkIHRpbWVvdXQuICovCisJSVBTX0ZJWEVEX1RJTUVPVVRfQklUID0gMTAsCisJSVBTX0ZJWEVEX1RJTUVPVVQgPSAoMSA8PCBJUFNfRklYRURfVElNRU9VVF9CSVQpLAogfTsKIAogLyogQ29ubmVjdGlvbiB0cmFja2luZyBldmVudCBiaXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKaW5kZXggNjY4ZWM5NC4uYjU4ODNjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaApAQCAtMjcsMTMgKzI3LDE1IEBACiAJQ1RBX1NUQVRVUywKIAlDVEFfUFJPVE9JTkZPLAogCUNUQV9IRUxQLAotCUNUQV9OQVQsCisJQ1RBX05BVF9TUkMsCisjZGVmaW5lIENUQV9OQVQJQ1RBX05BVF9TUkMJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KIAlDVEFfVElNRU9VVCwKIAlDVEFfTUFSSywKIAlDVEFfQ09VTlRFUlNfT1JJRywKIAlDVEFfQ09VTlRFUlNfUkVQTFksCiAJQ1RBX1VTRSwKIAlDVEFfSUQsCisJQ1RBX05BVF9EU1QsCiAJX19DVEFfTUFYCiB9OwogI2RlZmluZSBDVEFfTUFYIChfX0NUQV9NQVggLSAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiZDc1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKKyNkZWZpbmUgX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0CisKK2VudW0geworCUNPTk5TRUNNQVJLX1NBVkUgPSAxLAorCUNPTk5TRUNNQVJLX1JFU1RPUkUsCit9OworCitzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8geworCXVfaW50OF90IG1vZGU7Cit9OworCisjZW5kaWYgLypfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNmYmZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX1hUX1NFQ01BUktfSF90YXJnZXQKKyNkZWZpbmUgX1hUX1NFQ01BUktfSF90YXJnZXQKKworLyoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB2YXJpb3VzIHNlY3VyaXR5IHN1YnN5c3RlbXMgKGJ1dCBub3QKKyAqIGF0IHRoZSBzYW1lIHRpbWUpLgorICoKKyAqICdtb2RlJyByZWZlcnMgdG8gdGhlIHNwZWNpZmljIHNlY3VyaXR5IHN1YnN5c3RlbSB3aGljaCB0aGUKKyAqIHBhY2tldHMgYXJlIGJlaW5nIG1hcmtlZCBmb3IuCisgKi8KKyNkZWZpbmUgU0VDTUFSS19NT0RFX1NFTAkweDAxCQkvKiBTRUxpbnV4ICovCisjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWAkyNTYKKworc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyB7CisJdV9pbnQzMl90IHNlbHNpZDsKKwljaGFyIHNlbGN0eFtTRUNNQVJLX1NFTENUWF9NQVhdOworfTsKKworc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm8geworCXVfaW50OF90IG1vZGU7CisJdW5pb24geworCQlzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfc2VsaW51eF9pbmZvIHNlbDsKKwl9IHU7Cit9OworCisjZW5kaWYgLypfWFRfU0VDTUFSS19IX3RhcmdldCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkN2ZkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfWFRfUVVPVEFfSAorI2RlZmluZSBfWFRfUVVPVEFfSAorCitlbnVtIHh0X3F1b3RhX2ZsYWdzIHsKKwlYVF9RVU9UQV9JTlZFUlQJCT0gMHgxLAorfTsKKyNkZWZpbmUgWFRfUVVPVEFfTUFTSwkJMHgxCisKK3N0cnVjdCB4dF9xdW90YV9pbmZvIHsKKwl1X2ludDMyX3QJCWZsYWdzOworCXVfaW50MzJfdAkJcGFkOworCWFsaWduZWRfdTY0CQlxdW90YTsKKwlzdHJ1Y3QgeHRfcXVvdGFfaW5mbwkqbWFzdGVyOworfTsKKworI2VuZGlmIC8qIF9YVF9RVU9UQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNDRlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9YVF9TVEFUSVNUSUNfSAorI2RlZmluZSBfWFRfU1RBVElTVElDX0gKKworZW51bSB4dF9zdGF0aXN0aWNfbW9kZSB7CisJWFRfU1RBVElTVElDX01PREVfUkFORE9NLAorCVhUX1NUQVRJU1RJQ19NT0RFX05USCwKKwlfX1hUX1NUQVRJU1RJQ19NT0RFX01BWAorfTsKKyNkZWZpbmUgWFRfU1RBVElTVElDX01PREVfTUFYIChfX1hUX1NUQVRJU1RJQ19NT0RFX01BWCAtIDEpCisKK2VudW0geHRfc3RhdGlzdGljX2ZsYWdzIHsKKwlYVF9TVEFUSVNUSUNfSU5WRVJUCQk9IDB4MSwKK307CisjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLCQkweDEKKworc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvIHsKKwl1X2ludDE2X3QJCQltb2RlOworCXVfaW50MTZfdAkJCWZsYWdzOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50MzJfdAlwcm9iYWJpbGl0eTsKKwkJfSByYW5kb207CisJCXN0cnVjdCB7CisJCQl1X2ludDMyX3QJZXZlcnk7CisJCQl1X2ludDMyX3QJcGFja2V0OworCQkJdV9pbnQzMl90CWNvdW50OworCQl9IG50aDsKKwl9IHU7CisJc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvCSptYXN0ZXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmIC8qIF9YVF9TVEFUSVNUSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKaW5kZXggZDU0ZDdiMi4uZTBlOTk1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCkBAIC0xMjEsNiArMTIxLDEwIEBACiAJdV9pbnQzMl90IG1hcms7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU0VDTUFSSworCXVfaW50MzJfdCBzZWNtYXJrOworI2VuZGlmCisKIAkvKiBUcmF2ZXJzZWQgb2Z0ZW4sIHNvIGhvcGVmdWxseSBpbiBkaWZmZXJlbnQgY2FjaGVsaW5lIHRvIHRvcCAqLwogCS8qIFRoZXNlIGFyZSBteSB0dXBsZXM7IG9yaWdpbmFsIGFuZCByZXBseSAqLwogCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGVfaGFzaCB0dXBsZWhhc2hbSVBfQ1RfRElSX01BWF07CkBAIC0xNTQsNiArMTU4LDcgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKICNpZmRlZiBDT05GSUdfSVBfTkZfTkFUX05FRURFRAorCXVfaW50MzJfdCBzYXZlZF9pcDsKIAkvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwZXItcHJvdG8gcGFydCwgdXNlZCB0byBtYXAgdGhlCiAJICogZXhwZWN0ZWQgY29ubmVjdGlvbiB0aGUgd2F5IHRoZSByZWNpcGllbnQgZXhwZWN0cy4gKi8KIAl1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gc2F2ZWRfcHJvdG87CkBAIC0yOTMsNiArMjk4LDcgQEAKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGludCBpcF9jb25udHJhY2tfaHRhYmxlX3NpemU7CitleHRlcm4gaW50IGlwX2Nvbm50cmFja19jaGVja3N1bTsKICAKICNkZWZpbmUgQ09OTlRSQUNLX1NUQVRfSU5DKGNvdW50KSAoX19nZXRfY3B1X3ZhcihpcF9jb25udHJhY2tfc3RhdCkuY291bnQrKykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCmluZGV4IGVhY2U4NmIuLjNjYmZmNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKQEAgLTcxLDYgKzcxLDEzIEBACiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKIAkJCSAgICAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAogCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CitleHRlcm4gaW50ICgqbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJICAgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJCSAgICAgICB1X2ludDE2X3QgcG9ydCwKKwkJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwogZXh0ZXJuIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCiAJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAogCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaAppbmRleCBjYzk4ZjdhLi4zZDRhNzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmgKQEAgLTEsNCArMSw0IEBACi0vKiBHZW5lcmF0ZWQgYnkgSmluZyBNaW4gWmhhbydzIEFTTi4xIHBhcnNlciwgTWFyIDE1IDIwMDYKKy8qIEdlbmVyYXRlZCBieSBKaW5nIE1pbiBaaGFvJ3MgQVNOLjEgcGFyc2VyLCBBcHIgMjAgMjAwNgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgKgpAQCAtNDEyLDYgKzQxMiw3IEBACiAJCWVGYWNpbGl0eV9VVUlFX2Rlc3RpbmF0aW9uSW5mbyA9ICgxIDw8IDE0KSwKIAkJZUZhY2lsaXR5X1VVSUVfaDI0NVNlY3VyaXR5TW9kZSA9ICgxIDw8IDEzKSwKIAl9IG9wdGlvbnM7CisJVHJhbnNwb3J0QWRkcmVzcyBhbHRlcm5hdGl2ZUFkZHJlc3M7CiAJRmFjaWxpdHlSZWFzb24gcmVhc29uOwogCVRyYW5zcG9ydEFkZHJlc3MgaDI0NUFkZHJlc3M7CiAJRmFjaWxpdHlfVVVJRV9mYXN0U3RhcnQgZmFzdFN0YXJ0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2lwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTNkYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2lwLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfX0lQX0NPTk5UUkFDS19TSVBfSF9fCisjZGVmaW5lIF9fSVBfQ09OTlRSQUNLX1NJUF9IX18KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgU0lQX1BPUlQJNTA2MAorI2RlZmluZSBTSVBfVElNRU9VVAkzNjAwCisKKyNkZWZpbmUgUE9TX1ZJQQkJMAorI2RlZmluZSBQT1NfQ09OVEFDVAkxCisjZGVmaW5lIFBPU19DT05URU5UCTIKKyNkZWZpbmUgUE9TX01FRElBCTMKKyNkZWZpbmUgUE9TX09XTkVSCTQKKyNkZWZpbmUgUE9TX0NPTk5FQ1RJT04JNQorI2RlZmluZSBQT1NfUkVRX0hFQURFUgk2CisjZGVmaW5lIFBPU19TRFBfSEVBREVSCTcKKworc3RydWN0IHNpcF9oZWFkZXJfbmZvIHsKKwljb25zdCBjaGFyCSpsbmFtZTsKKwljb25zdCBjaGFyCSpzbmFtZTsKKwljb25zdCBjaGFyCSpsbl9zdHI7CisJc2l6ZV90CQlsbmxlbjsKKwlzaXplX3QJCXNubGVuOworCXNpemVfdAkJbG5fc3RybGVuOworCWludAkJKCptYXRjaF9sZW4pKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Cit9OworCitleHRlcm4gdW5zaWduZWQgaW50ICgqaXBfbmF0X3NpcF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIpOworZXh0ZXJuIHVuc2lnbmVkIGludCAoKmlwX25hdF9zZHBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZHB0cik7CisKK2V4dGVybiBpbnQgY3Rfc2lwX2dldF9pbmZvKGNvbnN0IGNoYXIgKmRwdHIsIHNpemVfdCBkbGVuLAorCQkJICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwKKwkJCSAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCisJCQkgICBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gKmhuZm8pOworZXh0ZXJuIGludCBjdF9zaXBfbG5sZW4oY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqbGltaXQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmN0X3NpcF9zZWFyY2goY29uc3QgY2hhciAqbmVlZGxlLCBjb25zdCBjaGFyICpoYXlzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZWVkbGVfbGVuLCBzaXplX3QgaGF5c3RhY2tfbGVuKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19JUF9DT05OVFJBQ0tfU0lQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCmluZGV4IDQ4NzdlMzUuLjkzNmVmODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKQEAgLTUwLDcgKzUwLDcgQEAKIGV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKTsKIGV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX3N1cHBvcnRfc2V0KHUzMiBmbGFncyk7CiAjZWxzZQotI2lmICFkZWZpbmVkKGFjcGlfc3RhdHVzKQorI2lmICFkZWZpbmVkKEFFX0VSUk9SKQogdHlwZWRlZiB1MzIgCQlhY3BpX3N0YXR1czsKICNkZWZpbmUgQUVfRVJST1IgICAgICAJKGFjcGlfc3RhdHVzKSAoMHgwMDAxKQogI2VuZGlmICAgIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggM2E2YTRlMy4uNmZkMzZjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC00NDIsNiArNDQyLDcgQEAKIHN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zbG90ICh1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pOwogaW50IHBjaV9maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOwogaW50IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggcG9zLCBpbnQgY2FwKTsKK2ludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CiBzdHJ1Y3QgcGNpX2J1cyAqIHBjaV9maW5kX25leHRfYnVzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpmcm9tKTsKIAogc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfZGV2aWNlICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CkBAIC02NjIsNiArNjYzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfZmluZF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKSB7cmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggcG9zdCwgaW50IGNhcCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApIHtyZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiBOVUxMOyB9CiAKIC8qIFBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCByb3V0aW5lcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA1OTBkYzZkLi5iY2ZlOWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtOTM1LDYgKzkzNSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0RKSU5OX0lUT08JMHgxMTUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1I3NTMJCTB4MTE1MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9PTElURUMJMHgxMTg3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1BDSTIwMFNZTgkweDMxOTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfOTA1MAkJMHg5MDUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYXzkwODAJCTB4OTA4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9HVEVLX1NFUklBTDIJMHhhMDAxCkBAIC0xMTgyLDYgKzExODMsMTQgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzExMDAgICAgICAgICAweDAzNEUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0ICAgICAgICAgICAgICAweDAzNzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1ICAgICAgICAgICAgICAweDAzNzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE2ICAgICAgICAgICAgICAweDAzRTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3ICAgICAgICAgICAgICAweDAzRTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE4ICAgICAgICAgICAgICAweDAzRUUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5ICAgICAgICAgICAgICAweDAzRUYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwICAgICAgICAgICAgICAweDA0NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIxICAgICAgICAgICAgICAweDA0NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyICAgICAgICAgICAgICAweDA0NTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzICAgICAgICAgICAgICAweDA0NTMKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lNUwkJMHgxMGUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU1TX1RUMTI4CQkweDkxMjgKQEAgLTE4MjcsNiArMTgzNiw3IEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQU1TVU5HCQkweDE0NGQKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX01ZUklDT00JCTB4MTRjMQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVElUQU4JCTB4MTREMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzAxMEwJMHg4MDAxCkBAIC0xODg3LDYgKzE4OTcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxRgkweDE2N2UKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4N00JMHgxNjkzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODIJMHgxNjk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODYJMHgxNjlhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODcJMHgxNjliCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODgJMHgxNjljCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODkJMHgxNjlkCkBAIC0yMDQzLDYgKzIwNTQsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgwOTYwX1JQCTB4MTk2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCCTB4MWEyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCCTB4MWEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVQJMHgxYTM4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wCTB4MjQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMQkweDI0MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzMJMHgyNDEzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IGJhYzBmYjMuLmQ1ZGQ0NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0xNTksNyArMTU5LDcgQEAKIHN0cnVjdCBzYWRiX3hfa21wcml2YXRlIHsKIAl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2xlbjsKIAl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2V4dHR5cGU7Ci0JdV9pbnQzMl90CXNhZGJfeF9rbXByaXZhdGVfcmVzZXJ2ZWQ7CisJdWludDMyX3QJc2FkYl94X2ttcHJpdmF0ZV9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbXByaXZhdGUpID09IDggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDFiYWI0OGYuLjRkZmIxYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTgwNSwzMSArODA1LDM3IEBACiAgKgl1c2VkIGJ5IHRoZSBYRlJNIHN5c3RlbS4KICAqCUBzZWNfY3R4IGNvbnRhaW5zIHRoZSBzZWN1cml0eSBjb250ZXh0IGluZm9ybWF0aW9uIGJlaW5nIHByb3ZpZGVkIGJ5CiAgKgl0aGUgdXNlci1sZXZlbCBwb2xpY3kgdXBkYXRlIHByb2dyYW0gKGUuZy4sIHNldGtleSkuCi0gKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgeHAtPnNlbGVjdG9yLnNlY3VyaXR5IGZpZWxkLgorICoJQWxsb2NhdGUgYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlIHhwLT5zZWN1cml0eSBmaWVsZC4KICAqCVRoZSBzZWN1cml0eSBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gdGhlIHhmcm1fcG9saWN5IGlzCiAgKglhbGxvY2F0ZWQuCiAgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKG1lbW9yeSB0byBhbGxvY2F0ZSwgbGVnYWwgY29udGV4dCkKICAqIEB4ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eToKICAqCUBvbGQgY29udGFpbnMgYW4gZXhpc3RpbmcgeGZybV9wb2xpY3kgaW4gdGhlIFNQRC4KICAqCUBuZXcgY29udGFpbnMgYSBuZXcgeGZybV9wb2xpY3kgYmVpbmcgY2xvbmVkIGZyb20gb2xkLgotICoJQWxsb2NhdGUgYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlIG5ldy0+c2VsZWN0b3Iuc2VjdXJpdHkgZmllbGQKLSAqCXRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG9sZC0+c2VsZWN0b3Iuc2VjdXJpdHkgZmllbGQuCisgKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgbmV3LT5zZWN1cml0eSBmaWVsZAorICoJdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb2xkLT5zZWN1cml0eSBmaWVsZC4KICAqCVJldHVybiAwIGlmIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCAobWVtb3J5IHRvIGFsbG9jYXRlKS4KICAqIEB4ZnJtX3BvbGljeV9mcmVlX3NlY3VyaXR5OgogICoJQHhwIGNvbnRhaW5zIHRoZSB4ZnJtX3BvbGljeQotICoJRGVhbGxvY2F0ZSB4cC0+c2VsZWN0b3Iuc2VjdXJpdHkuCisgKglEZWFsbG9jYXRlIHhwLT5zZWN1cml0eS4KKyAqIEB4ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHk6CisgKglAeHAgY29udGFpbnMgdGhlIHhmcm1fcG9saWN5LgorICoJQXV0aG9yaXplIGRlbGV0aW9uIG9mIHhwLT5zZWN1cml0eS4KICAqIEB4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5OgogICoJQHggY29udGFpbnMgdGhlIHhmcm1fc3RhdGUgYmVpbmcgYWRkZWQgdG8gdGhlIFNlY3VyaXR5IEFzc29jaWF0aW9uCiAgKglEYXRhYmFzZSBieSB0aGUgWEZSTSBzeXN0ZW0uCiAgKglAc2VjX2N0eCBjb250YWlucyB0aGUgc2VjdXJpdHkgY29udGV4dCBpbmZvcm1hdGlvbiBiZWluZyBwcm92aWRlZCBieQogICoJdGhlIHVzZXItbGV2ZWwgU0EgZ2VuZXJhdGlvbiBwcm9ncmFtIChlLmcuLCBzZXRrZXkgb3IgcmFjb29uKS4KLSAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSB4LT5zZWwuc2VjdXJpdHkgZmllbGQuICBUaGUKKyAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSB4LT5zZWN1cml0eSBmaWVsZC4gIFRoZQogICoJc2VjdXJpdHkgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCB3aGVuIHRoZSB4ZnJtX3N0YXRlIGlzCiAgKglhbGxvY2F0ZWQuCiAgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKG1lbW9yeSB0byBhbGxvY2F0ZSwgbGVnYWwgY29udGV4dCkuCiAgKiBAeGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5OgogICoJQHggY29udGFpbnMgdGhlIHhmcm1fc3RhdGUuCi0gKglEZWFsbG9jYXRlIHg+c2VsLnNlY3VyaXR5LgorICoJRGVhbGxvY2F0ZSB4LT5zZWN1cml0eS4KKyAqIEB4ZnJtX3N0YXRlX2RlbGV0ZV9zZWN1cml0eToKKyAqCUB4IGNvbnRhaW5zIHRoZSB4ZnJtX3N0YXRlLgorICoJQXV0aG9yaXplIGRlbGV0aW9uIG9mIHgtPnNlY3VyaXR5LgogICogQHhmcm1fcG9saWN5X2xvb2t1cDoKICAqCUB4cCBjb250YWlucyB0aGUgeGZybV9wb2xpY3kgZm9yIHdoaWNoIHRoZSBhY2Nlc3MgY29udHJvbCBpcyBiZWluZwogICoJY2hlY2tlZC4KQEAgLTEyOTgsOCArMTMwNCwxMCBAQAogCWludCAoKnhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKIAlpbnQgKCp4ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldyk7CiAJdm9pZCAoKnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKKwlpbnQgKCp4ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKIAlpbnQgKCp4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCk7CiAJdm9pZCAoKnhmcm1fc3RhdGVfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKKwlpbnQgKCp4ZnJtX3N0YXRlX2RlbGV0ZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIAlpbnQgKCp4ZnJtX3BvbGljeV9sb29rdXApKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHUzMiBza19zaWQsIHU4IGRpcik7CiAjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSAqLwogCkBAIC0yOTM0LDExICsyOTQyLDIxIEBACiAJc2VjdXJpdHlfb3BzLT54ZnJtX3BvbGljeV9mcmVlX3NlY3VyaXR5KHhwKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9wb2xpY3lfZGVsZXRlX3NlY3VyaXR5KHhwKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KQogewogCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkoeCwgc2VjX2N0eCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fc3RhdGVfZGVsZXRlX3NlY3VyaXR5KHgpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfeGZybV9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewogCXNlY3VyaXR5X29wcy0+eGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5KHgpOwpAQCAtMjk2Myw2ICsyOTgxLDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCiB7CiAJcmV0dXJuIDA7CkBAIC0yOTcyLDYgKzI5OTUsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB1MzIgc2tfc2lkLCB1OCBkaXIpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXguaCBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCmluZGV4IDQwNDdiY2QuLmFhZDRlMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCkBAIC0xMTgsNiArMTE4LDI3IEBACiAgKi8KIHZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKTsKIAorLyoqCisgKiAgICAgc2VsaW51eF9zdHJpbmdfdG9fc2lkIC0gbWFwIGEgc2VjdXJpdHkgY29udGV4dCBzdHJpbmcgdG8gYSBzZWN1cml0eSBJRAorICogICAgIEBzdHI6IHRoZSBzZWN1cml0eSBjb250ZXh0IHN0cmluZyB0byBiZSBtYXBwZWQKKyAqICAgICBAc2lkOiBJRCB2YWx1ZSByZXR1cm5lZCB2aWEgdGhpcy4KKyAqCisgKiAgICAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIHdpdGggdGhlIFNJRCBzdG9yZWQgaW4gc2lkLiAgQSB2YWx1ZQorICogICAgIG9mIHplcm8gZm9yIHNpZCBpbmRpY2F0ZXMgbm8gU0lEIGNvdWxkIGJlIGRldGVybWluZWQgKGJ1dCBubyBlcnJvcgorICogICAgIG9jY3VycmVkKS4KKyAqLworaW50IHNlbGludXhfc3RyaW5nX3RvX3NpZChjaGFyICpzdHIsIHUzMiAqc2lkKTsKKworLyoqCisgKiAgICAgc2VsaW51eF9yZWxhYmVsX3BhY2tldF9wZXJtaXNzaW9uIC0gY2hlY2sgcGVybWlzc2lvbiB0byByZWxhYmVsIGEgcGFja2V0CisgKiAgICAgQHNpZDogSUQgdmFsdWUgdG8gYmUgYXBwbGllZCB0byBuZXR3b3JrIHBhY2tldCAodmlhIFNFQ01BUkssIG1vc3QgbGlrZWx5KQorICoKKyAqICAgICBSZXR1cm5zIDAgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGxhYmVsIHBhY2tldHMgd2l0aCB0aGUKKyAqICAgICBzdXBwbGllZCBzZWN1cml0eSBJRC4gIE5vdGUgdGhhdCBpdCBpcyBpbXBsaWNpdCB0aGF0IHRoZSBwYWNrZXQgaXMgYWx3YXlzCisgKiAgICAgYmVpbmcgcmVsYWJlbGVkIGZyb20gdGhlIGRlZmF1bHQgdW5sYWJsZWQgdmFsdWUsIGFuZCB0aGF0IHRoZSBhY2Nlc3MKKyAqICAgICBjb250cm9sIGRlY2lzaW9uIGlzIG1hZGUgaW4gdGhlIEFWQy4KKyAqLworaW50IHNlbGludXhfcmVsYWJlbF9wYWNrZXRfcGVybWlzc2lvbih1MzIgc2lkKTsKIAogI2Vsc2UKIApAQCAtMTcyLDYgKzE5MywxNyBAQAogCSpzaWQgPSAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X3N0cmluZ190b19zaWQoY29uc3QgY2hhciAqc3RyLCB1MzIgKnNpZCkKK3sKKyAgICAgICAqc2lkID0gMDsKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9yZWxhYmVsX3BhY2tldF9wZXJtaXNzaW9uKHUzMiBzaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX1NFTElOVVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZjhmMjM0Ny4uOTNlNGRiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGV4dHNlYXJjaC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogCiAjZGVmaW5lIEhBVkVfQUxMT0NfU0tCCQkvKiBGb3IgdGhlIGRyaXZlcnMgdG8ga25vdyAqLwogI2RlZmluZSBIQVZFX0FMSUdOQUJMRV9TS0IJLyogRGl0dG8gOCkJCSAgICovCkBAIC0yMDksNiArMjEwLDcgQEAKICAqCUBuZl9icmlkZ2U6IFNhdmVkIGRhdGEgYWJvdXQgYSBicmlkZ2VkIGZyYW1lIC0gc2VlIGJyX25ldGZpbHRlci5jCiAgKglAdGNfaW5kZXg6IFRyYWZmaWMgY29udHJvbCBpbmRleAogICoJQHRjX3ZlcmQ6IHRyYWZmaWMgY29udHJvbCB2ZXJkaWN0CisgKglAc2VjbWFyazogc2VjdXJpdHkgbWFya2luZwogICovCiAKIHN0cnVjdCBza19idWZmIHsKQEAgLTI4NSw2ICsyODcsMTIgQEAKIAlfX3UxNgkJCXRjX3ZlcmQ7CS8qIHRyYWZmaWMgY29udHJvbCB2ZXJkaWN0ICovCiAjZW5kaWYKICNlbmRpZgorI2lmZGVmIENPTkZJR19ORVRfRE1BCisJZG1hX2Nvb2tpZV90CQlkbWFfY29va2llOworI2VuZGlmCisjaWZkZWYgQ09ORklHX05FVFdPUktfU0VDTUFSSworCV9fdTMyCQkJc2VjbWFyazsKKyNlbmRpZgogCiAKIAkvKiBUaGVzZSBlbGVtZW50cyBtdXN0IGJlIGF0IHRoZSBlbmQsIHNlZSBhbGxvY19za2IoKSBmb3IgZGV0YWlscy4gICovCkBAIC05NjcsMTUgKzk3NSwxNiBAQAogI2RlZmluZSBORVRfU0tCX1BBRAkxNgogI2VuZGlmCiAKLWV4dGVybiBpbnQgX19fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4sIGludCByZWFsbG9jKTsKK2V4dGVybiBpbnQgX19fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWlmICghc2tiLT5kYXRhX2xlbikgewotCQlza2ItPmxlbiAgPSBsZW47Ci0JCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YSArIGxlbjsKLQl9IGVsc2UKLQkJX19fcHNrYl90cmltKHNrYiwgbGVuLCAwKTsKKwlpZiAodW5saWtlbHkoc2tiLT5kYXRhX2xlbikpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKwlza2ItPmxlbiAgPSBsZW47CisJc2tiLT50YWlsID0gc2tiLT5kYXRhICsgbGVuOwogfQogCiAvKioKQEAgLTk4NSw2ICs5OTQsNyBAQAogICoKICAqCUN1dCB0aGUgbGVuZ3RoIG9mIGEgYnVmZmVyIGRvd24gYnkgcmVtb3ZpbmcgZGF0YSBmcm9tIHRoZSB0YWlsLiBJZgogICoJdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IHVuZGVyIHRoZSBsZW5ndGggc3BlY2lmaWVkIGl0IGlzIG5vdCBtb2RpZmllZC4KKyAqCVRoZSBza2IgbXVzdCBiZSBsaW5lYXIuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtOTk1LDEyICsxMDA1LDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaWYgKCFza2ItPmRhdGFfbGVuKSB7Ci0JCXNrYi0+bGVuICA9IGxlbjsKLQkJc2tiLT50YWlsID0gc2tiLT5kYXRhK2xlbjsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiBfX19wc2tiX3RyaW0oc2tiLCBsZW4sIDEpOworCWlmIChza2ItPmRhdGFfbGVuKQorCQlyZXR1cm4gX19fcHNrYl90cmltKHNrYiwgbGVuKTsKKwlfX3NrYl90cmltKHNrYiwgbGVuKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCkBAIC0xMTYxLDE4ICsxMTY5LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9fc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBfX3Bza2JfcHVsbF90YWlsKHNrYiwgc2tiLT5kYXRhX2xlbikgPyAwIDogLUVOT01FTTsKK30KKwogLyoqCiAgKglza2JfbGluZWFyaXplIC0gY29udmVydCBwYWdlZCBza2IgdG8gbGluZWFyIG9uZQogICoJQHNrYjogYnVmZmVyIHRvIGxpbmFyaXplCi0gKglAZ2ZwOiBhbGxvY2F0aW9uIG1vZGUKICAqCiAgKglJZiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeSAtRU5PTUVNIGlzIHJldHVybmVkLCBvdGhlcndpc2UgemVybwogICoJaXMgcmV0dXJuZWQgYW5kIHRoZSBvbGQgc2tiIGRhdGEgcmVsZWFzZWQuCiAgKi8KLWV4dGVybiBpbnQgX19za2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcCk7Ci1zdGF0aWMgaW5saW5lIGludCBza2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcCkKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gX19za2JfbGluZWFyaXplKHNrYiwgZ2ZwKTsKKwlyZXR1cm4gc2tiX2lzX25vbmxpbmVhcihza2IpID8gX19za2JfbGluZWFyaXplKHNrYikgOiAwOworfQorCisvKioKKyAqCXNrYl9saW5lYXJpemVfY293IC0gbWFrZSBzdXJlIHNrYiBpcyBsaW5lYXIgYW5kIHdyaXRhYmxlCisgKglAc2tiOiBidWZmZXIgdG8gcHJvY2VzcworICoKKyAqCUlmIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5IC1FTk9NRU0gaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB6ZXJvCisgKglpcyByZXR1cm5lZCBhbmQgdGhlIG9sZCBza2IgZGF0YSByZWxlYXNlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tiX2xpbmVhcml6ZV9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiX2lzX25vbmxpbmVhcihza2IpIHx8IHNrYl9jbG9uZWQoc2tiKSA/CisJICAgICAgIF9fc2tiX2xpbmVhcml6ZShza2IpIDogMDsKIH0KIAogLyoqCkBAIC0xMzk2LDUgKzE0MjAsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fQogI2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVIgKi8KIAorI2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUksKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfY29weV9zZWNtYXJrKHN0cnVjdCBza19idWZmICp0bywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pCit7CisJdG8tPnNlY21hcmsgPSBmcm9tLT5zZWNtYXJrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2luaXRfc2VjbWFyayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYi0+c2VjbWFyayA9IDA7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNrYl9jb3B5X3NlY21hcmsoc3RydWN0IHNrX2J1ZmYgKnRvLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSkKK3sgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2luaXRfc2VjbWFyayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreyB9CisjZW5kaWYKKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkvKiBfTElOVVhfU0tCVUZGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDc2ZWFlZmYuLmNlZTk0NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtMzEzLDYgKzMxMyw3IEBACiAJTkVUX05GX0NPTk5UUkFDS19GUkFHNl9USU1FT1VUPTI5LAogCU5FVF9ORl9DT05OVFJBQ0tfRlJBRzZfTE9XX1RIUkVTSD0zMCwKIAlORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0hJR0hfVEhSRVNIPTMxLAorCU5FVF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU09MzIsCiB9OwogCiAvKiAvcHJvYy9zeXMvbmV0L2lwdjQgKi8KQEAgLTQwMyw2ICs0MDQsOCBAQAogIAlORVRfVENQX01UVV9QUk9CSU5HPTExMywKIAlORVRfVENQX0JBU0VfTVNTPTExNCwKIAlORVRfSVBWNF9UQ1BfV09SS0FST1VORF9TSUdORURfV0lORE9XUz0xMTUsCisJTkVUX1RDUF9ETUFfQ09QWUJSRUFLPTExNiwKKwlORVRfVENQX1NMT1dfU1RBUlRfQUZURVJfSURMRT0xMTcsCiB9OwogCiBlbnVtIHsKQEAgLTQ5MSw2ICs0OTQsNyBAQAogIAlORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0Q9MjUsCiAgCU5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQ9MjYsCiAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0NPVU5UPTI3LAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19DSEVDS1NVTT0yOCwKIH07CiAgCiAvKiAvcHJvYy9zeXMvbmV0L2lwdjYgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oCmluZGV4IDU0MmQzOTUuLmM5MGRhYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC90Y3AuaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBfTElOVVhfVENQX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiBzdHJ1Y3QgdGNwaGRyIHsKQEAgLTIzMyw2ICsyMzQsMTMgQEAKIAkJc3RydWN0IGlvdmVjCQkqaW92OwogCQlpbnQJCQltZW1vcnk7CiAJCWludAkJCWxlbjsKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCQkvKiBtZW1iZXJzIGZvciBhc3luYyBjb3B5ICovCisJCXN0cnVjdCBkbWFfY2hhbgkJKmRtYV9jaGFuOworCQlpbnQJCQl3YWtldXA7CisJCXN0cnVjdCBkbWFfcGlubmVkX2xpc3QJKnBpbm5lZF9saXN0OworCQlkbWFfY29va2llX3QJCWRtYV9jb29raWU7CisjZW5kaWYKIAl9IHVjb3B5OwogCiAJX191MzIJc25kX3dsMTsJLyogU2VxdWVuY2UgZm9yIHdpbmRvdyB1cGRhdGUJCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IDZiNDJjYzQuLjQ2YTE1YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0xMTgsNiArMTE4LDEwIEBACiAJWEZSTV9TSEFSRV9VTklRVUUJLyogVXNlIG9uY2UgKi8KIH07CiAKKyNkZWZpbmUgWEZSTV9NT0RFX1RSQU5TUE9SVCAwCisjZGVmaW5lIFhGUk1fTU9ERV9UVU5ORUwgMQorI2RlZmluZSBYRlJNX01PREVfTUFYIDIKKwogLyogTmV0bGluayBjb25maWd1cmF0aW9uIG1lc3NhZ2VzLiAgKi8KIGVudW0gewogCVhGUk1fTVNHX0JBU0UgPSAweDEwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAppbmRleCBkNTkyNmJmLi5kNTE0Nzc3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogQVJSQVlfU0laRSAqLwogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAKLSNkZWZpbmUgSUVFRTgwMjExX1ZFUlNJT04gImdpdC0xLjEuNyIKKyNkZWZpbmUgSUVFRTgwMjExX1ZFUlNJT04gImdpdC0xLjEuMTMiCiAKICNkZWZpbmUgSUVFRTgwMjExX0RBVEFfTEVOCQkyMzA0CiAvKiBNYXhpbXVtIHNpemUgZm9yIHRoZSBNQS1VTklUREFUQSBwcmltaXRpdmUsIDgwMi4xMSBzdGFuZGFyZCBzZWN0aW9uCkBAIC0xMDQsNiArMTA0LDkgQEAKICNkZWZpbmUgSUVFRTgwMjExX1NDVExfRlJBRwkJMHgwMDBGCiAjZGVmaW5lIElFRUU4MDIxMV9TQ1RMX1NFUQkJMHhGRkYwCiAKKy8qIFFPUyBjb250cm9sICovCisjZGVmaW5lIElFRUU4MDIxMV9RQ1RMX1RJRAkJMHgwMDBGCisKIC8qIGRlYnVnIG1hY3JvcyAqLwogCiAjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwpAQCAtMTA3NSw2ICsxMDc4LDcgQEAKIAogCWludCAoKmhhbmRsZV9tYW5hZ2VtZW50KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBuZXR3b3JrLCB1MTYgdHlwZSk7CisJaW50ICgqaXNfcW9zX2FjdGl2ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCiAJLyogVHlwaWNhbCBTVEEgbWV0aG9kcyAqLwogCWludCAoKmhhbmRsZV9hdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCkBAIC0xMjQzLDcgKzEyNDcsOCBAQAogZXh0ZXJuIGludCBpZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV90eGJfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqKTsKIGV4dGVybiBpbnQgaWVlZTgwMjExX3R4X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmZyYW1lLCBpbnQgbGVuKTsKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpmcmFtZSwgaW50IGhkcl9sZW4sCisJCQkgICAgICBpbnQgdG90YWxfbGVuLCBpbnQgZW5jcnlwdF9tcGR1KTsKIAogLyogaWVlZTgwMjExX3J4LmMgKi8KIGV4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCmluZGV4IDA1MmVkNTkuLjdhNDgzYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKQEAgLTg2LDYgKzg2LDkgQEAKIAkKIAkvKiBCU1NJRCB3ZSdyZSB0cnlpbmcgdG8gYXNzb2NpYXRlIHRvICovCiAJY2hhciBic3NpZFtFVEhfQUxFTl07CisKKwkvKiBSYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIG5ldHdvcmsgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gc3VwcG9ydGVkX3JhdGVzOwogCQogCS8qIHNvbWUgZmxhZ3MuCiAJICogc3RhdGljX2Vzc2lkIGlzIHZhbGlkIGlmIHRoZSBlc3NpZCBpcyBjb25zdGFudCwKQEAgLTEzMiwyMyArMTM1LDI2IEBACiBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzIHsKIAkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgbXVsdGljYXN0IGZyYW1lcy4gKi8KIAl1OCBtY2FzdF9yYXRlOwotCS8qIFRoZSBCaXQtUmF0ZSB0byBiZSB1c2VkIGZvciBtdWx0aWNhc3QgZmFsbGJhY2sKLQkgKiAoSWYgdGhlIGRldmljZSBzdXBwb3J0cyBmYWxsYmFjayBhbmQgaGFyZHdhcmUtcmV0cnkpCi0JICovCi0JdTggbWNhc3RfZmFsbGJhY2s7CisKKwkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgbXVsdGljYXN0IG1hbmFnZW1lbnQgZnJhbWVzLiAqLworCXU4IG1ndF9tY2FzdF9yYXRlOworCiAJLyogVGhlIEJpdC1SYXRlIHRvIGJlIHVzZWQgZm9yIGFueSBvdGhlciAobm9ybWFsKSBkYXRhIHBhY2tldC4gKi8KIAl1OCBkZWZhdWx0X3JhdGU7CiAJLyogVGhlIEJpdC1SYXRlIHRvIGJlIHVzZWQgZm9yIGRlZmF1bHQgZmFsbGJhY2sKIAkgKiAoSWYgdGhlIGRldmljZSBzdXBwb3J0cyBmYWxsYmFjayBhbmQgaGFyZHdhcmUtcmV0cnkpCiAJICovCiAJdTggZGVmYXVsdF9mYWxsYmFjazsKKworCS8qIFRoaXMgaXMgdGhlIHJhdGUgdGhhdCB0aGUgdXNlciBhc2tlZCBmb3IgKi8KKwl1OCB1c2VyX3JhdGU7CiB9OwogCiAvKiBCaXRzIGZvciB0eHJhdGVzX2NoYW5nZSBjYWxsYmFjay4gKi8KICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVAkJKDEgPDwgMCkgLyogZGVmYXVsdF9yYXRlICovCiAjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFRfRkJBQ0sJKDEgPDwgMSkgLyogZGVmYXVsdF9mYWxsYmFjayAqLwogI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19NQ0FTVAkJKDEgPDwgMikgLyogbWNhc3RfcmF0ZSAqLwotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19NQ0FTVF9GQkFDSwkJKDEgPDwgMykgLyogbWNhc3RfZmFsbGJhY2sgKi8KKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUdUX01DQVNUCQkoMSA8PCAzKSAvKiBtZ3RfbWNhc3RfcmF0ZSAqLwogCiBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgewogCS8qIDgwMi4xMSBzdHJ1Y3R1cmUgZm9yIGRhdGEgc3R1ZmYgKi8KQEAgLTI1MCw2ICsyNTYsMjggQEAKICAqIE5vdGUgdGhhdCB0aGUgcmF0ZXMgbmVlZCB0byBiZSBzb3J0ZWQuICovCiBleHRlcm4gdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NldF9yYXRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjb3VudCwgdTggKnJhdGVzKTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGFkdmlzZXMgeW91IHRoZSByYXRlIGF0IHdoaWNoIGEgZnJhbWUgc2hvdWxkIGJlCisgKiB0cmFuc21pdHRlZCBhdC4gKi8KK3N0YXRpYyBpbmxpbmUgdTggaWVlZTgwMjExc29mdG1hY19zdWdnZXN0X3R4cmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwkJCQkJCSBpbnQgaXNfbXVsdGljYXN0LAorCQkJCQkJIGludCBpc19tZ3QpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyAqdHhyYXRlcyA9ICZtYWMtPnR4cmF0ZXM7CisKKwlpZiAoIW1hYy0+YXNzb2NpYXRlZCkKKwkJcmV0dXJuIHR4cmF0ZXMtPm1ndF9tY2FzdF9yYXRlOworCisJLyogV2UgYXJlIGFzc29jaWF0ZWQsIHNlbmRpbmcgdW5pY2FzdCBmcmFtZSAqLworCWlmICghaXNfbXVsdGljYXN0KQorCQlyZXR1cm4gdHhyYXRlcy0+ZGVmYXVsdF9yYXRlOworCisJLyogV2UgYXJlIGFzc29jaWF0ZWQsIHNlbmRpbmcgbXVsdGljYXN0IGZyYW1lICovCisJaWYgKGlzX21ndCkKKwkJcmV0dXJuIHR4cmF0ZXMtPm1ndF9tY2FzdF9yYXRlOworCWVsc2UKKwkJcmV0dXJuIHR4cmF0ZXMtPm1jYXN0X3JhdGU7Cit9CisKIC8qIFN0YXJ0IHRoZSBTb2Z0TUFDLiBDYWxsIHRoaXMgYWZ0ZXIgeW91IGluaXRpYWxpemVkIHRoZSBkZXZpY2UKICAqIGFuZCBpdCBpcyByZWFkeSB0byBydW4uCiAgKi8KQEAgLTI4Miw3ICszMTAsNyBAQAogICoJLSBjb250ZXh0IHNldCB0byB0aGUgY29udGV4dCBkYXRhIHlvdSB3YW50IHBhc3NlZAogICogVGhlIHJldHVybiB2YWx1ZSBpcyAwLCBvciBhbiBlcnJvci4KICAqLwotdHlwZWRlZiB2b2lkICgqbm90aWZ5X2Z1bmN0aW9uX3B0cikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqY29udGV4dCk7Cit0eXBlZGVmIHZvaWQgKCpub3RpZnlfZnVuY3Rpb25fcHRyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZXZlbnRfdHlwZSwgdm9pZCAqY29udGV4dCk7CiAKICNkZWZpbmUgaWVlZTgwMjExc29mdG1hY19ub3RpZnkoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0KSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9nZnAoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0LCBHRlBfS0VSTkVMKTsKICNkZWZpbmUgaWVlZTgwMjExc29mdG1hY19ub3RpZnlfYXRvbWljKGRldiwgZXZlbnQsIGZ1biwgY29udGV4dCkgaWVlZTgwMjExc29mdG1hY19ub3RpZnlfZ2ZwKGRldiwgZXZlbnQsIGZ1biwgY29udGV4dCwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjX3d4LmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjX3d4LmgKaW5kZXggM2UwYmU0NS4uNGVlM2FkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hY193eC5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWNfd3guaApAQCAtOTEsNCArOTEsOSBAQAogCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCiAJCQkgICAgICBjaGFyICpleHRyYSk7CitleHRlcm4gaW50CitpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkgICAgIGNoYXIgKmV4dHJhKTsKICNlbmRpZiAvKiBfSUVFRTgwMjExU09GVE1BQ19XWCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggM2QyZTVjYS4uZWFkMjMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC0xNDcsNyArMTQ3LDYgQEAKIHN0cnVjdCBpcHY0X2NvbmZpZwogewogCWludAlsb2dfbWFydGlhbnM7Ci0JaW50CWF1dG9jb25maWc7CiAJaW50CW5vX3BtdHVfZGlzYzsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19pZi5oIGIvaW5jbHVkZS9uZXQvbGxjX2lmLmgKaW5kZXggMDkwZWFhMC4uYzYwODgxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2lmLmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX2lmLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2xsYy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2xsYy5oPgogCiAjZGVmaW5lIExMQ19EQVRBVU5JVF9QUklNCTEKQEAgLTYxLDggKzYyLDYgQEAKICNkZWZpbmUgTExDX1NUQVRVU19DT05GTElDVAk3IC8qIGRpc2Nvbm5lY3QgY29ubiAqLwogI2RlZmluZSBMTENfU1RBVFVTX1JFU0VUX0RPTkUJOCAvKiAgKi8KIAotZXh0ZXJuIHU4IGxsY19tYWNfbnVsbF92YXJbSUZIV0FERFJMRU5dOwotCiAvKioKICAqICAgICAgbGxjX21hY19udWxsIC0gZGV0ZXJtaW5lcyBpZiBhIGFkZHJlc3MgaXMgYSBudWxsIG1hYyBhZGRyZXNzCiAgKiAgICAgIEBtYWM6IE1hYyBhZGRyZXNzIHRvIHRlc3QgaWYgbnVsbC4KQEAgLTcwLDE2ICs2OSwyMCBAQAogICogICAgICBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gYWRkcmVzcyBpcyBhIG51bGwgbWFjIGFkZHJlc3MuICBSZXR1cm5zIDAgaWYgdGhlCiAgKiAgICAgIGFkZHJlc3MgaXMgbm90IGEgbnVsbCBtYWMsIDEgaWYgdGhlIGFkZHJlc3MgaXMgYSBudWxsIG1hYy4KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGxsY19tYWNfbnVsbCh1OCAqbWFjKQorc3RhdGljIGlubGluZSBpbnQgbGxjX21hY19udWxsKGNvbnN0IHU4ICptYWMpCiB7Ci0JcmV0dXJuICFtZW1jbXAobWFjLCBsbGNfbWFjX251bGxfdmFyLCBJRkhXQUREUkxFTik7CisJcmV0dXJuIGlzX3plcm9fZXRoZXJfYWRkcihtYWMpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgbGxjX2FkZHJhbnkoc3RydWN0IGxsY19hZGRyICphZGRyKQorc3RhdGljIGlubGluZSBpbnQgbGxjX2FkZHJhbnkoY29uc3Qgc3RydWN0IGxsY19hZGRyICphZGRyKQogewogCXJldHVybiBsbGNfbWFjX251bGwoYWRkci0+bWFjKSAmJiAhYWRkci0+bHNhcDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbGxjX21hY19tdWx0aWNhc3QoY29uc3QgdTggKm1hYykKK3sKKwlyZXR1cm4gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWFjKTsKK30KIC8qKgogICoJbGxjX21hY19tYXRjaCAtIGRldGVybWluZXMgaWYgdHdvIG1hYyBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lCiAgKglAbWFjMTogRmlyc3QgbWFjIGFkZHJlc3MgdG8gY29tcGFyZS4KQEAgLTg5LDkgKzkyLDkgQEAKICAqCWlzIG5vdCBhIGNvbXBsZXRlIG1hdGNoIHVwIHRvIGxlbiwgMSBpZiBhIGNvbXBsZXRlIG1hdGNoIHVwIHRvIGxlbiBpcwogICoJZm91bmQuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBsbGNfbWFjX21hdGNoKHU4ICptYWMxLCB1OCAqbWFjMikKK3N0YXRpYyBpbmxpbmUgaW50IGxsY19tYWNfbWF0Y2goY29uc3QgdTggKm1hYzEsIGNvbnN0IHU4ICptYWMyKQogewotCXJldHVybiAhbWVtY21wKG1hYzEsIG1hYzIsIElGSFdBRERSTEVOKTsKKwlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihtYWMxLCBtYWMyKTsKIH0KIAogZXh0ZXJuIGludCBsbGNfZXN0YWJsaXNoX2Nvbm5lY3Rpb24oc3RydWN0IHNvY2sgKnNrLCB1OCAqbG1hYywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGRtYS5oIGIvaW5jbHVkZS9uZXQvbmV0ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3NjBlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGRtYS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwNCAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisjaWZuZGVmIE5FVERNQV9ICisjZGVmaW5lIE5FVERNQV9ICisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklHX05FVF9ETUEKKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2NoYW4gKmdldF9zb2Z0bmV0X2RtYSh2b2lkKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKwlyY3VfcmVhZF9sb2NrKCk7CisJY2hhbiA9IHJjdV9kZXJlZmVyZW5jZShfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YS5uZXRfZG1hKSk7CisJaWYgKGNoYW4pCisJCWRtYV9jaGFuX2dldChjaGFuKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY2hhbjsKK30KKworaW50IGRtYV9za2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhzdHJ1Y3QgZG1hX2NoYW4qIGNoYW4sCisJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIHN0cnVjdCBpb3ZlYyAqdG8sCisJCXNpemVfdCBsZW4sIHN0cnVjdCBkbWFfcGlubmVkX2xpc3QgKnBpbm5lZF9saXN0KTsKKworI2VuZGlmIC8qIENPTkZJR19ORVRfRE1BICovCisjZW5kaWYgLyogTkVURE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAppbmRleCA5MTYwMTNjLi40MTExMTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC0xMTQsNiArMTE0LDEwIEBACiAJdV9pbnQzMl90IG1hcms7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSworCXVfaW50MzJfdCBzZWNtYXJrOworI2VuZGlmCisKIAkvKiBTdG9yYWdlIHJlc2VydmVkIGZvciBvdGhlciBtb2R1bGVzOiAqLwogCXVuaW9uIG5mX2Nvbm50cmFja19wcm90byBwcm90bzsKIApAQCAtMjg1LDYgKzI4OSw3IEBACiB9CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworZXh0ZXJuIGludCBuZl9jb25udHJhY2tfY2hlY2tzdW07CiAKICNkZWZpbmUgTkZfQ1RfU1RBVF9JTkMoY291bnQpIChfX2dldF9jcHVfdmFyKG5mX2Nvbm50cmFja19zdGF0KS5jb3VudCsrKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21wYXQuaAppbmRleCAzY2FjMTlmLi5mMWIxNDgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0LmgKQEAgLTIwLDYgKzIwLDE5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLICovCiAKKyNpZmRlZiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NFQ01BUksKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90ICpuZl9jdF9nZXRfc2VjbWFyayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICB1X2ludDMyX3QgKmN0aW5mbykKK3sKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCA9IGlwX2Nvbm50cmFja19nZXQoc2tiLCBjdGluZm8pOworCisJaWYgKGN0KQorCQlyZXR1cm4gJmN0LT5zZWNtYXJrOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0lQX05GX0NPTk5UUkFDS19TRUNNQVJLICovCisKICNpZmRlZiBDT05GSUdfSVBfTkZfQ1RfQUNDVAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2NvdW50ZXIgKgogbmZfY3RfZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCkBAIC03MCw2ICs4MywxOSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyAqLwogCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdCAqbmZfY3RfZ2V0X3NlY21hcmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgdV9pbnQzMl90ICpjdGluZm8pCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgY3RpbmZvKTsKKworCWlmIChjdCkKKwkJcmV0dXJuICZjdC0+c2VjbWFyazsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyAqLworCiAjaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyICoKIG5mX2N0X2dldF9jb3VudGVycyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmF3LmggYi9pbmNsdWRlL25ldC9yYXcuaAppbmRleCBlNjdiMjhhLi5kODM1NzFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yYXcuaAorKysgYi9pbmNsdWRlL25ldC9yYXcuaApAQCAtMzYsNyArMzYsNyBAQAogCiAKIGV4dGVybiBzdHJ1Y3Qgc29jayAqX19yYXdfdjRfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgbnVtLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHJhZGRyLCB1bnNpZ25lZCBsb25nIGxhZGRyLAorCQkJCSAgICBfX2JlMzIgcmFkZHIsIF9fYmUzMiBsYWRkciwKIAkJCQkgICAgaW50IGRpZik7CiAKIGV4dGVybiBpbnQgcmF3X3Y0X2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqaXBoLCBpbnQgaGFzaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IGFhNjAzM2MuLmIyYjQwZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC0yNTUsNyArMjU1LDcgQEAKICNkZWZpbmUgU0NUUF9ERUJVR19QUklOVEtfSVBBRERSKHdoYXRldmVyLi4uKQogI2RlZmluZSBTQ1RQX0VOQUJMRV9ERUJVRwogI2RlZmluZSBTQ1RQX0RJU0FCTEVfREVCVUcKLSNkZWZpbmUgU0NUUF9BU1NFUlQoZXhwciwgc3RyLCBmdW5jKQorI2RlZmluZSBTQ1RQX0FTU0VSVChleHByLCBzdHIsIGZ1bmMpIEJVR19PTighKGV4cHIpKQogCiAjZW5kaWYgLyogU0NUUF9ERUJVRyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDdmNGZlYTEuLjVmNjkxNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC01NTUsNyArNTU1LDggQEAKIAlpbnQJCSgqdG9fYWRkcl9wYXJhbSkgKGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqLAogCQkJCQkgIHVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqKTsgCiAJaW50CQkoKmFkZHJfdmFsaWQpCSh1bmlvbiBzY3RwX2FkZHIgKiwKLQkJCQkJIHN0cnVjdCBzY3RwX3NvY2sgKik7CisJCQkJCSBzdHJ1Y3Qgc2N0cF9zb2NrICosCisJCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIAlzY3RwX3Njb3BlX3QJKCpzY29wZSkgKHVuaW9uIHNjdHBfYWRkciAqKTsKIAl2b2lkCQkoKmluYWRkcl9hbnkpCSh1bmlvbiBzY3RwX2FkZHIgKiwgdW5zaWduZWQgc2hvcnQpOwogCWludAkJKCppc19hbnkpCShjb25zdCB1bmlvbiBzY3RwX2FkZHIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggYzlmYWQ2Zi4uOTY1NjVmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMTMyLDYgKzEzMiw3IEBACiAgICoJQHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHMKICAgKglAc2tfd21lbV9hbGxvYzogdHJhbnNtaXQgcXVldWUgYnl0ZXMgY29tbWl0dGVkCiAgICoJQHNrX3dyaXRlX3F1ZXVlOiBQYWNrZXQgc2VuZGluZyBxdWV1ZQorICAqCUBza19hc3luY193YWl0X3F1ZXVlOiBETUEgY29waWVkIHBhY2tldHMKICAgKglAc2tfb21lbV9hbGxvYzogIm8iIGlzICJvcHRpb24iIG9yICJvdGhlciIKICAgKglAc2tfd21lbV9xdWV1ZWQ6IHBlcnNpc3RlbnQgcXVldWUgc2l6ZQogICAqCUBza19mb3J3YXJkX2FsbG9jOiBzcGFjZSBhbGxvY2F0ZWQgZm9yd2FyZApAQCAtMjA1LDYgKzIwNiw3IEBACiAJYXRvbWljX3QJCXNrX29tZW1fYWxsb2M7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlza19yZWNlaXZlX3F1ZXVlOwogCXN0cnVjdCBza19idWZmX2hlYWQJc2tfd3JpdGVfcXVldWU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlza19hc3luY193YWl0X3F1ZXVlOwogCWludAkJCXNrX3dtZW1fcXVldWVkOwogCWludAkJCXNrX2ZvcndhcmRfYWxsb2M7CiAJZ2ZwX3QJCQlza19hbGxvY2F0aW9uOwpAQCAtODcxLDEwICs4NzMsNyBAQAogCQlpZiAoZmlsdGVyKSB7CiAJCQl1bnNpZ25lZCBpbnQgcGt0X2xlbiA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLAogCQkJCQkJCSAgICAgZmlsdGVyLT5sZW4pOwotCQkJaWYgKCFwa3RfbGVuKQotCQkJCWVyciA9IC1FUEVSTTsKLQkJCWVsc2UKLQkJCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOworCQkJZXJyID0gcGt0X2xlbiA/IHBza2JfdHJpbShza2IsIHBrdF9sZW4pIDogLUVQRVJNOwogCQl9CiAKIAkJaWYgKG5lZWRsb2NrKQpAQCAtMTI3MSwxMSArMTI3MCwyMiBAQAogICogVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBvciB3aXRoIHRoZSBzb2NrZXQKICAqIGxvY2tlZCBzbyB0aGF0IHRoZSBza19idWZmIHF1ZXVlIG9wZXJhdGlvbiBpcyBvay4KICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2tfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCisjaWZkZWYgQ09ORklHX05FVF9ETUEKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNvcGllZF9lYXJseSkKK3sKKwlfX3NrYl91bmxpbmsoc2tiLCAmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCWlmICghY29waWVkX2Vhcmx5KQorCQlfX2tmcmVlX3NrYihza2IpOworCWVsc2UKKwkJX19za2JfcXVldWVfdGFpbCgmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUsIHNrYik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNrX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY29waWVkX2Vhcmx5KQogewogCV9fc2tiX3VubGluayhza2IsICZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJX19rZnJlZV9za2Ioc2tiKTsKIH0KKyNlbmRpZgogCiBleHRlcm4gdm9pZCBzb2NrX2VuYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgc29ja19nZXRfdGltZXN0YW1wKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggM2M5ODlkYi4uYmZjNzFmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogCiAjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfdGltZXdhaXRfc29jay5oPgpAQCAtMjE4LDYgKzIxOSw3IEBACiBleHRlcm4gaW50IHN5c2N0bF90Y3BfdHdfcmV1c2U7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfZnJ0bzsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9kbWFfY29weWJyZWFrOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX25vbWV0cmljc19zYXZlOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX21vZGVyYXRlX3JjdmJ1ZjsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3I7CkBAIC0yMjUsNiArMjI3LDcgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9tdHVfcHJvYmluZzsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9iYXNlX21zczsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF93b3JrYXJvdW5kX3NpZ25lZF93aW5kb3dzOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZTsKIAogZXh0ZXJuIGF0b21pY190IHRjcF9tZW1vcnlfYWxsb2NhdGVkOwogZXh0ZXJuIGF0b21pY190IHRjcF9zb2NrZXRzX2FsbG9jYXRlZDsKQEAgLTI5Myw2ICsyOTYsOCBAQAogCiBleHRlcm4gdm9pZAkJCXRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBzb2NrICpzayk7CiAKK2V4dGVybiB2b2lkCQkJdGNwX2NsZWFudXBfcmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCBjb3BpZWQpOworCiBleHRlcm4gaW50CQkJdGNwX3R3c2tfdW5pcXVlKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCXN0cnVjdCBzb2NrICpza3R3LCB2b2lkICp0d3ApOwogCkBAIC02MjgsNyArNjMzLDcgQEAKIAkvKiByZXR1cm4gc2xvdyBzdGFydCB0aHJlc2hvbGQgKHJlcXVpcmVkKSAqLwogCXUzMiAoKnNzdGhyZXNoKShzdHJ1Y3Qgc29jayAqc2spOwogCS8qIGxvd2VyIGJvdW5kIGZvciBjb25nZXN0aW9uIHdpbmRvdyAob3B0aW9uYWwpICovCi0JdTMyICgqbWluX2N3bmQpKHN0cnVjdCBzb2NrICpzayk7CisJdTMyICgqbWluX2N3bmQpKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiAJLyogZG8gbmV3IGN3bmQgY2FsY3VsYXRpb24gKHJlcXVpcmVkKSAqLwogCXZvaWQgKCpjb25nX2F2b2lkKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssCiAJCQkgICB1MzIgcnR0LCB1MzIgaW5fZmxpZ2h0LCBpbnQgZ29vZF9hY2spOwpAQCAtNjYzLDcgKzY2OCw3IEBACiBleHRlcm4gdTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdm9pZCB0Y3BfcmVub19jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywKIAkJCQl1MzIgcnR0LCB1MzIgaW5fZmxpZ2h0LCBpbnQgZmxhZyk7Ci1leHRlcm4gdTMyIHRjcF9yZW5vX21pbl9jd25kKHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdTMyIHRjcF9yZW5vX21pbl9jd25kKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubzsKIAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9zZXRfY2Ffc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1OCBjYV9zdGF0ZSkKQEAgLTgxNyw2ICs4MjIsMTIgQEAKIAl0cC0+dWNvcHkubGVuID0gMDsKIAl0cC0+dWNvcHkubWVtb3J5ID0gMDsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ0cC0+dWNvcHkucHJlcXVldWUpOworI2lmZGVmIENPTkZJR19ORVRfRE1BCisJdHAtPnVjb3B5LmRtYV9jaGFuID0gTlVMTDsKKwl0cC0+dWNvcHkud2FrZXVwID0gMDsKKwl0cC0+dWNvcHkucGlubmVkX2xpc3QgPSBOVUxMOworCXRwLT51Y29weS5kbWFfY29va2llID0gMDsKKyNlbmRpZgogfQogCiAvKiBQYWNrZXQgaXMgYWRkZWQgdG8gVkotc3R5bGUgcHJlcXVldWUgZm9yIHByb2Nlc3NpbmcgaW4gcHJvY2VzcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IGFmYTUwOGQuLjljNWVlOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxuZXQvaXA2X2ZpYi5oPgogCiAjZGVmaW5lIFhGUk1fQUxJR044KGxlbikJKCgobGVuKSArIDcpICYgfjcpCisjZGVmaW5lIE1PRFVMRV9BTElBU19YRlJNX01PREUoZmFtaWx5LCBlbmNhcCkgXAorCU1PRFVMRV9BTElBUygieGZybS1tb2RlLSIgX19zdHJpbmdpZnkoZmFtaWx5KSAiLSIgX19zdHJpbmdpZnkoZW5jYXApKQogCiBleHRlcm4gc3RydWN0IHNvY2sgKnhmcm1fbmw7CiBleHRlcm4gdTMyIHN5c2N0bF94ZnJtX2FldmVudF9ldGltZTsKQEAgLTE2NCw2ICsxNjYsNyBAQAogCS8qIFJlZmVyZW5jZSB0byBkYXRhIGNvbW1vbiB0byBhbGwgdGhlIGluc3RhbmNlcyBvZiB0aGlzCiAJICogdHJhbnNmb3JtZXIuICovCiAJc3RydWN0IHhmcm1fdHlwZQkqdHlwZTsKKwlzdHJ1Y3QgeGZybV9tb2RlCSptb2RlOwogCiAJLyogU2VjdXJpdHkgY29udGV4dCAqLwogCXN0cnVjdCB4ZnJtX3NlY19jdHgJKnNlY3VyaXR5OwpAQCAtMjA0LDggKzIwNyw4IEBACiBzdHJ1Y3QgeGZybV9kc3Q7CiBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHsKIAl1bnNpZ25lZCBzaG9ydAkJZmFtaWx5OwotCXJ3bG9ja190CQlsb2NrOwotCXN0cnVjdCB4ZnJtX3R5cGVfbWFwCSp0eXBlX21hcDsKKwlzdHJ1Y3QgeGZybV90eXBlCSp0eXBlX21hcFtJUFBST1RPX01BWF07CisJc3RydWN0IHhmcm1fbW9kZQkqbW9kZV9tYXBbWEZSTV9NT0RFX01BWF07CiAJc3RydWN0IGRzdF9vcHMJCSpkc3Rfb3BzOwogCXZvaWQJCQkoKmdhcmJhZ2VfY29sbGVjdCkodm9pZCk7CiAJaW50CQkJKCpkc3RfbG9va3VwKShzdHJ1Y3QgeGZybV9kc3QgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpOwpAQCAtMjMyLDcgKzIzNSw2IEBACiAKIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyB7CiAJdW5zaWduZWQgc2hvcnQJCWZhbWlseTsKLQlyd2xvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpzdGF0ZV9ieWRzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpzdGF0ZV9ieXNwaTsKIAlpbnQJCQkoKmluaXRfZmxhZ3MpKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKQEAgLTI2NCwxNiArMjY2LDI0IEBACiAJdTMyCQkJKCpnZXRfbWF4X3NpemUpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCBzaXplKTsKIH07CiAKLXN0cnVjdCB4ZnJtX3R5cGVfbWFwIHsKLQlyd2xvY2tfdAkJbG9jazsKLQlzdHJ1Y3QgeGZybV90eXBlCSptYXBbMjU2XTsKLX07Ci0KIGV4dGVybiBpbnQgeGZybV9yZWdpc3Rlcl90eXBlKHN0cnVjdCB4ZnJtX3R5cGUgKnR5cGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gaW50IHhmcm1fdW5yZWdpc3Rlcl90eXBlKHN0cnVjdCB4ZnJtX3R5cGUgKnR5cGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gc3RydWN0IHhmcm1fdHlwZSAqeGZybV9nZXRfdHlwZSh1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiB2b2lkIHhmcm1fcHV0X3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSk7CiAKK3N0cnVjdCB4ZnJtX21vZGUgeworCWludCAoKmlucHV0KShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCXVuc2lnbmVkIGludCBlbmNhcDsKK307CisKK2V4dGVybiBpbnQgeGZybV9yZWdpc3Rlcl9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUsIGludCBmYW1pbHkpOworZXh0ZXJuIGludCB4ZnJtX3VucmVnaXN0ZXJfbW9kZShzdHJ1Y3QgeGZybV9tb2RlICptb2RlLCBpbnQgZmFtaWx5KTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9tb2RlICp4ZnJtX2dldF9tb2RlKHVuc2lnbmVkIGludCBlbmNhcCwgaW50IGZhbWlseSk7CitleHRlcm4gdm9pZCB4ZnJtX3B1dF9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUpOworCiBzdHJ1Y3QgeGZybV90bXBsCiB7CiAvKiBpZCBpbiB0ZW1wbGF0ZSBpcyBpbnRlcnByZXRlZCBhczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmggYi9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjViYTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVm9sdGFpcmUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBTb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciBvbmUgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlczoKKyAqCisgKiAxKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJDb21tb24gUHVibGljIExpY2Vuc2UgMS4wIiBhIGNvcHkgb2Ygd2hpY2ggaXMKKyAqICAgIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvY3BsLnBocC4KKyAqCisgKiAyKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJUaGUgQlNEIExpY2Vuc2UiIGEgY29weSBvZiB3aGljaCBpcworICogICAgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuCisgKgorICogMykgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIiBhCisgKiAgICBjb3B5IG9mIHdoaWNoIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwLgorICoKKyAqIExpY2Vuc2VlIGhhcyB0aGUgcmlnaHQgdG8gY2hvb3NlIG9uZSBvZiB0aGUgYWJvdmUgbGljZW5zZXMuCisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgb25lIG9mIHRoZSBsaWNlbnNlIG5vdGljZXMuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCBvbmUgb2YgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICovCisKKyNpZiAhZGVmaW5lZChJQl9BRERSX0gpCisjZGVmaW5lIElCX0FERFJfSAorCisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisKK3N0cnVjdCByZG1hX2Rldl9hZGRyIHsKKwl1bnNpZ25lZCBjaGFyIHNyY19kZXZfYWRkcltNQVhfQUREUl9MRU5dOworCXVuc2lnbmVkIGNoYXIgZHN0X2Rldl9hZGRyW01BWF9BRERSX0xFTl07CisJdW5zaWduZWQgY2hhciBicm9hZGNhc3RbTUFYX0FERFJfTEVOXTsKKwllbnVtIGliX25vZGVfdHlwZSBkZXZfdHlwZTsKK307CisKKy8qKgorICogcmRtYV90cmFuc2xhdGVfaXAgLSBUcmFuc2xhdGUgYSBsb2NhbCBJUCBhZGRyZXNzIHRvIGFuIFJETUEgaGFyZHdhcmUKKyAqICAgYWRkcmVzcy4KKyAqLworaW50IHJkbWFfdHJhbnNsYXRlX2lwKHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyKTsKKworLyoqCisgKiByZG1hX3Jlc29sdmVfaXAgLSBSZXNvbHZlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gSVAgYWRkcmVzc2VzIHRvCisgKiAgIFJETUEgaGFyZHdhcmUgYWRkcmVzc2VzLgorICogQHNyY19hZGRyOiBBbiBvcHRpb25hbCBzb3VyY2UgYWRkcmVzcyB0byB1c2UgaW4gdGhlIHJlc29sdXRpb24uICBJZiBhCisgKiAgIHNvdXJjZSBhZGRyZXNzIGlzIG5vdCBwcm92aWRlZCwgYSB1c2FibGUgYWRkcmVzcyB3aWxsIGJlIHJldHVybmVkIHZpYQorICogICB0aGUgY2FsbGJhY2suCisgKiBAZHN0X2FkZHI6IFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRvIHJlc29sdmUuCisgKiBAYWRkcjogQSByZWZlcmVuY2UgdG8gYSBkYXRhIGxvY2F0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSByZXNvbHZlZAorICogICBhZGRyZXNzZXMuICBUaGUgZGF0YSBsb2NhdGlvbiBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgY2FsbGJhY2sgaGFzCisgKiAgIGJlZW4gaW52b2tlZC4KKyAqIEB0aW1lb3V0X21zOiBBbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciB0aGUgYWRkcmVzcyByZXNvbHV0aW9uIHRvIGNvbXBsZXRlLgorICogQGNhbGxiYWNrOiBDYWxsIGludm9rZWQgb25jZSBhZGRyZXNzIHJlc29sdXRpb24gaGFzIGNvbXBsZXRlZCwgdGltZWQgb3V0LAorICogICBvciBiZWVuIGNhbmNlbGVkLiAgQSBzdGF0dXMgb2YgMCBpbmRpY2F0ZXMgc3VjY2Vzcy4KKyAqIEBjb250ZXh0OiBVc2VyLXNwZWNpZmllZCBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsbC4KKyAqLworaW50IHJkbWFfcmVzb2x2ZV9pcChzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIsIGludCB0aW1lb3V0X21zLAorCQkgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLCBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJCSAgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIsIHZvaWQgKmNvbnRleHQpLAorCQkgICAgdm9pZCAqY29udGV4dCk7CisKK3ZvaWQgcmRtYV9hZGRyX2NhbmNlbChzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwX2FkZHJfc2l6ZShzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJcmV0dXJuIGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNiA/CisJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSA6IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBpYl9hZGRyX2dldF9wa2V5KHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcikKK3sKKwlyZXR1cm4gKCh1MTYpZGV2X2FkZHItPmJyb2FkY2FzdFs4XSA8PCA4KSB8ICh1MTYpZGV2X2FkZHItPmJyb2FkY2FzdFs5XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfc2V0X3BrZXkoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB1MTYgcGtleSkKK3sKKwlkZXZfYWRkci0+YnJvYWRjYXN0WzhdID0gcGtleSA+PiA4OworCWRldl9hZGRyLT5icm9hZGNhc3RbOV0gPSAodW5zaWduZWQgY2hhcikgcGtleTsKK30KKworc3RhdGljIGlubGluZSB1bmlvbiBpYl9naWQgKmliX2FkZHJfZ2V0X3NnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyKQoreworCXJldHVybiAJKHVuaW9uIGliX2dpZCAqKSAoZGV2X2FkZHItPnNyY19kZXZfYWRkciArIDQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWJfYWRkcl9zZXRfc2dpZChzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsCisJCQkJICAgIHVuaW9uIGliX2dpZCAqZ2lkKQoreworCW1lbWNweShkZXZfYWRkci0+c3JjX2Rldl9hZGRyICsgNCwgZ2lkLCBzaXplb2YgKmdpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5pb24gaWJfZ2lkICppYl9hZGRyX2dldF9kZ2lkKHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcikKK3sKKwlyZXR1cm4gCSh1bmlvbiBpYl9naWQgKikgKGRldl9hZGRyLT5kc3RfZGV2X2FkZHIgKyA0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfc2V0X2RnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAorCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3sKKwltZW1jcHkoZGV2X2FkZHItPmRzdF9kZXZfYWRkciArIDQsIGdpZCwgc2l6ZW9mICpnaWQpOworfQorCisjZW5kaWYgLyogSUJfQUREUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfY2FjaGUuaCBiL2luY2x1ZGUvcmRtYS9pYl9jYWNoZS5oCmluZGV4IDViZjk4MzQuLmYxNzlkMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9jYWNoZS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9jYWNoZS5oCkBAIC0xMDIsNCArMTAyLDE3IEBACiAJCQl1MTYgICAgICAgICAgICAgICAgICBwa2V5LAogCQkJdTE2ICAgICAgICAgICAgICAgICAqaW5kZXgpOwogCisvKioKKyAqIGliX2dldF9jYWNoZWRfbG1jIC0gUmV0dXJucyBhIGNhY2hlZCBsbWMgdGFibGUgZW50cnkKKyAqIEBkZXZpY2U6IFRoZSBkZXZpY2UgdG8gcXVlcnkuCisgKiBAcG9ydF9udW06IFRoZSBwb3J0IG51bWJlciBvZiB0aGUgZGV2aWNlIHRvIHF1ZXJ5LgorICogQGxtYzogVGhlIGxtYyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBwb3J0IGZvciB0aGF0IGRldmljZS4KKyAqCisgKiBpYl9nZXRfY2FjaGVkX2xtYygpIGZldGNoZXMgdGhlIHNwZWNpZmllZCBsbWMgdGFibGUgZW50cnkgc3RvcmVkIGluCisgKiB0aGUgbG9jYWwgc29mdHdhcmUgY2FjaGUuCisgKi8KK2ludCBpYl9nZXRfY2FjaGVkX2xtYyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCisJCSAgICAgIHU4ICAgICAgICAgICAgICAgIHBvcnRfbnVtLAorCQkgICAgICB1OCAgICAgICAgICAgICAgICAqbG1jKTsKKwogI2VuZGlmIC8qIF9JQl9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfY20uaCBiL2luY2x1ZGUvcmRtYS9pYl9jbS5oCmluZGV4IDBhOWZjZDUuLmM5YjQ3MzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9jbS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9jbS5oCkBAIC0zMiw3ICszMiw3IEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgKiBTT0ZUV0FSRS4KICAqCi0gKiAkSWQ6IGliX2NtLmggMjczMCAyMDA1LTA2LTI4IDE2OjQzOjAzWiBzZWFuLmhlZnR5ICQKKyAqICRJZDogaWJfY20uaCA0MzExIDIwMDUtMTItMDUgMTg6NDI6MDFaIHNlYW4uaGVmdHkgJAogICovCiAjaWYgIWRlZmluZWQoSUJfQ01fSCkKICNkZWZpbmUgSUJfQ01fSApAQCAtMTAyLDcgKzEwMiw4IEBACiAJSUJfQ01fQVBSX0lORk9fTEVOR1RICQkgPSA3MiwKIAlJQl9DTV9TSURSX1JFUV9QUklWQVRFX0RBVEFfU0laRSA9IDIxNiwKIAlJQl9DTV9TSURSX1JFUF9QUklWQVRFX0RBVEFfU0laRSA9IDEzNiwKLQlJQl9DTV9TSURSX1JFUF9JTkZPX0xFTkdUSAkgPSA3MgorCUlCX0NNX1NJRFJfUkVQX0lORk9fTEVOR1RICSA9IDcyLAorCUlCX0NNX0NPTVBBUkVfU0laRQkJID0gNjQKIH07CiAKIHN0cnVjdCBpYl9jbV9pZDsKQEAgLTIzOCw3ICsyMzksNiBAQAogCXUzMgkJCXFwbjsKIAl2b2lkCQkJKmluZm87CiAJdTgJCQlpbmZvX2xlbjsKLQogfTsKIAogc3RydWN0IGliX2NtX2V2ZW50IHsKQEAgLTMxNyw2ICszMTcsMTUgQEAKIAogI2RlZmluZSBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRjAwMDAwMDAwMDAwMDAwVUxMKQogI2RlZmluZSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCBfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDIwMDAwMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSUQJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAwMDAwMDAwMDEwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lEX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGRkZGRkZGRkYwMDAwMDBVTEwpCisjZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lECV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAwMDEwMDAwVUxMKQorI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGRkYwMDAwVUxMKQorCitzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhIHsKKwl1OCAgZGF0YVtJQl9DTV9DT01QQVJFX1NJWkVdOworCXU4ICBtYXNrW0lCX0NNX0NPTVBBUkVfU0laRV07Cit9OwogCiAvKioKICAqIGliX2NtX2xpc3RlbiAtIEluaXRpYXRlcyBsaXN0ZW5pbmcgb24gdGhlIHNwZWNpZmllZCBzZXJ2aWNlIElEIGZvcgpAQCAtMzMwLDEwICszMzksMTIgQEAKICAqICAgcmFuZ2Ugb2Ygc2VydmljZSBJRHMuICBJZiBzZXQgdG8gMCwgdGhlIHNlcnZpY2UgSUQgaXMgbWF0Y2hlZAogICogICBleGFjdGx5LiAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiAlc2VydmljZV9pZCBpcyBzZXQgdG8KICAqICAgSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQuCisgKiBAY29tcGFyZV9kYXRhOiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gIEl0IHNwZWNpZmllcyBkYXRhIHRoYXQgbXVzdAorICogICBhcHBlYXIgaW4gdGhlIHByaXZhdGUgZGF0YSBvZiBhIGNvbm5lY3Rpb24gcmVxdWVzdCBmb3IgdGhlIHNwZWNpZmllZAorICogICBsaXN0ZW4gcmVxdWVzdC4KICAqLwotaW50IGliX2NtX2xpc3RlbihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLAotCQkgX19iZTY0IHNlcnZpY2VfaWQsCi0JCSBfX2JlNjQgc2VydmljZV9tYXNrKTsKK2ludCBpYl9jbV9saXN0ZW4oc3RydWN0IGliX2NtX2lkICpjbV9pZCwgX19iZTY0IHNlcnZpY2VfaWQsIF9fYmU2NCBzZXJ2aWNlX21hc2ssCisJCSBzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhICpjb21wYXJlX2RhdGEpOwogCiBzdHJ1Y3QgaWJfY21fcmVxX3BhcmFtIHsKIAlzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMJKnByaW1hcnlfcGF0aDsKQEAgLTUzNSw3ICs1NDYsNiBAQAogCWNvbnN0IHZvaWQJCSpwcml2YXRlX2RhdGE7CiAJdTgJCQlwcml2YXRlX2RhdGFfbGVuOwogCXU4CQkJbWF4X2NtX3JldHJpZXM7Ci0JdTE2CQkJcGtleTsKIH07CiAKIC8qKgpAQCAtNTU5LDcgKzU2OSw3IEBACiB9OwogCiAvKioKLSAqIGliX3NlbmRfY21fc2lkcl9yZXAgLSBTZW5kcyBhIHNlcnZpY2UgSUQgcmVzb2x1dGlvbiByZXF1ZXN0IHRvIHRoZQorICogaWJfc2VuZF9jbV9zaWRyX3JlcCAtIFNlbmRzIGEgc2VydmljZSBJRCByZXNvbHV0aW9uIHJlcGx5IHRvIHRoZQogICogICByZW1vdGUgbm9kZS4KICAqIEBjbV9pZDogQ29tbXVuaWNhdGlvbiBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVjZWl2ZWQgc2VydmljZSBJRAogICogICByZXNvbHV0aW9uIHJlcXVlc3QuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfbWFyc2hhbGwuaCBiL2luY2x1ZGUvcmRtYS9pYl9tYXJzaGFsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YmY0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3JkbWEvaWJfbWFyc2hhbGwuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZiAhZGVmaW5lZChJQl9VU0VSX01BUlNIQUxMX0gpCisjZGVmaW5lIElCX1VTRVJfTUFSU0hBTExfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvaWJfc2EuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3VzZXJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3VzZXJfc2EuaD4KKwordm9pZCBpYl9jb3B5X3FwX2F0dHJfdG9fdXNlcihzdHJ1Y3QgaWJfdXZlcmJzX3FwX2F0dHIgKmRzdCwKKwkJCSAgICAgc3RydWN0IGliX3FwX2F0dHIgKnNyYyk7CisKK3ZvaWQgaWJfY29weV9wYXRoX3JlY190b191c2VyKHN0cnVjdCBpYl91c2VyX3BhdGhfcmVjICpkc3QsCisJCQkgICAgICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnNyYyk7CisKK3ZvaWQgaWJfY29weV9wYXRoX3JlY19mcm9tX3VzZXIoc3RydWN0IGliX3NhX3BhdGhfcmVjICpkc3QsCisJCQkJc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgKnNyYyk7CisKKyNlbmRpZiAvKiBJQl9VU0VSX01BUlNIQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9zYS5oIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKaW5kZXggYWQ2M2MyMS4uYzk5ZTQ0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3NhLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKQEAgLTM3MCw1ICszNzAsMTIgQEAKIAkJCQkJY29udGV4dCwgcXVlcnkpOwogfQogCisvKioKKyAqIGliX2luaXRfYWhfZnJvbV9wYXRoIC0gSW5pdGlhbGl6ZSBhZGRyZXNzIGhhbmRsZSBhdHRyaWJ1dGVzIGJhc2VkIG9uIGFuIFNBCisgKiAgIHBhdGggcmVjb3JkLgorICovCitpbnQgaWJfaW5pdF9haF9mcm9tX3BhdGgoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKKwkJCSBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnJlYywKKwkJCSBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cik7CiAKICNlbmRpZiAvKiBJQl9TQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfc21pLmggYi9pbmNsdWRlL3JkbWEvaWJfc21pLmgKaW5kZXggODdmNjA3My4uZjI5YWYxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3NtaS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9zbWkuaApAQCAtODUsNiArODUsNDIgQEAKICNkZWZpbmUgSUJfU01QX0FUVFJfTEVEX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAzMSkKICNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX01BU0sJCQlfX2NvbnN0YW50X2h0b25zKDB4RkYwMCkKIAorc3RydWN0IGliX3BvcnRfaW5mbyB7CisJX19iZTY0IG1rZXk7CisJX19iZTY0IGdpZF9wcmVmaXg7CisJX19iZTE2IGxpZDsKKwlfX2JlMTYgc21fbGlkOworCV9fYmUzMiBjYXBfbWFzazsKKwlfX2JlMTYgZGlhZ19jb2RlOworCV9fYmUxNiBta2V5X2xlYXNlX3BlcmlvZDsKKwl1OCBsb2NhbF9wb3J0X251bTsKKwl1OCBsaW5rX3dpZHRoX2VuYWJsZWQ7CisJdTggbGlua193aWR0aF9zdXBwb3J0ZWQ7CisJdTggbGlua193aWR0aF9hY3RpdmU7CisJdTggbGlua3NwZWVkX3BvcnRzdGF0ZTsJCQkvKiA0IGJpdHMsIDQgYml0cyAqLworCXU4IHBvcnRwaHlzc3RhdGVfbGlua2Rvd247CQkvKiA0IGJpdHMsIDQgYml0cyAqLworCXU4IG1rZXlwcm90X3Jlc3ZfbG1jOwkJCS8qIDIgYml0cywgMywgMyAqLworCXU4IGxpbmtzcGVlZGFjdGl2ZV9lbmFibGVkOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCBuZWlnaGJvcm10dV9tYXN0ZXJzbXNsOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCB2bGNhcF9pbml0dHlwZTsJCQkvKiA0IGJpdHMsIDQgYml0cyAqLworCXU4IHZsX2hpZ2hfbGltaXQ7CisJdTggdmxfYXJiX2hpZ2hfY2FwOworCXU4IHZsX2FyYl9sb3dfY2FwOworCXU4IGluaXR0eXBlcmVwbHlfbXR1Y2FwOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCB2bHN0YWxsY250X2hvcWxpZmU7CQkJLyogMyBiaXRzLCA1IGJpdHMgKi8KKwl1OCBvcGVyYXRpb25hbHZsX3BlaV9wZW9fZnBpX2ZwbzsJLyogNCBiaXRzLCAxLCAxLCAxLCAxICovCisJX19iZTE2IG1rZXlfdmlvbGF0aW9uczsKKwlfX2JlMTYgcGtleV92aW9sYXRpb25zOworCV9fYmUxNiBxa2V5X3Zpb2xhdGlvbnM7CisJdTggZ3VpZF9jYXA7CisJdTggY2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0bzsJCS8qIDEgYml0LCAyIGJpdHMsIDUgKi8KKwl1OCByZXN2X3Jlc3B0aW1ldmFsdWU7CQkJLyogMyBiaXRzLCA1IGJpdHMgKi8KKwl1OCBsb2NhbHBoeWVycm9yc19vdmVycnVuZXJyb3JzOwkvKiA0IGJpdHMsIDQgYml0cyAqLworCV9fYmUxNiBtYXhfY3JlZGl0X2hpbnQ7CisJdTggcmVzdjsKKwl1OCBsaW5rX3JvdW5kdHJpcF9sYXRlbmN5WzNdOworfTsKKwogc3RhdGljIGlubGluZSB1OAogaWJfZ2V0X3NtcF9kaXJlY3Rpb24oc3RydWN0IGliX3NtcCAqc21wKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfY20uaCBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX2NtLmgKaW5kZXggMTliZTExNi4uMDY2YzIwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl9jbS5oCkBAIC0zMCwxMyArMzAsMTMgQEAKICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICAqIFNPRlRXQVJFLgogICoKLSAqICRJZDogaWJfdXNlcl9jbS5oIDI1NzYgMjAwNS0wNi0wOSAxNzowMDozMFogbGlib3IgJAorICogJElkOiBpYl91c2VyX2NtLmggNDAxOSAyMDA1LTExLTExIDAwOjMzOjA5WiBzZWFuLmhlZnR5ICQKICAqLwogCiAjaWZuZGVmIElCX1VTRVJfQ01fSAogI2RlZmluZSBJQl9VU0VSX0NNX0gKIAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3NhLmg+CiAKICNkZWZpbmUgSUJfVVNFUl9DTV9BQklfVkVSU0lPTiA0CiAKQEAgLTExMCw1OCArMTEwLDYgQEAKIAlfX3UzMiBxcF9zdGF0ZTsKIH07CiAKLXN0cnVjdCBpYl91Y21fYWhfYXR0ciB7Ci0JX191OAlncmhfZGdpZFsxNl07Ci0JX191MzIJZ3JoX2Zsb3dfbGFiZWw7Ci0JX191MTYJZGxpZDsKLQlfX3UxNglyZXNlcnZlZDsKLQlfX3U4CWdyaF9zZ2lkX2luZGV4OwotCV9fdTgJZ3JoX2hvcF9saW1pdDsKLQlfX3U4CWdyaF90cmFmZmljX2NsYXNzOwotCV9fdTgJc2w7Ci0JX191OAlzcmNfcGF0aF9iaXRzOwotCV9fdTgJc3RhdGljX3JhdGU7Ci0JX191OAlpc19nbG9iYWw7Ci0JX191OAlwb3J0X251bTsKLX07Ci0KLXN0cnVjdCBpYl91Y21faW5pdF9xcF9hdHRyX3Jlc3AgewotCV9fdTMyCXFwX2F0dHJfbWFzazsKLQlfX3UzMglxcF9zdGF0ZTsKLQlfX3UzMgljdXJfcXBfc3RhdGU7Ci0JX191MzIJcGF0aF9tdHU7Ci0JX191MzIJcGF0aF9taWdfc3RhdGU7Ci0JX191MzIJcWtleTsKLQlfX3UzMglycV9wc247Ci0JX191MzIJc3FfcHNuOwotCV9fdTMyCWRlc3RfcXBfbnVtOwotCV9fdTMyCXFwX2FjY2Vzc19mbGFnczsKLQotCXN0cnVjdCBpYl91Y21fYWhfYXR0cglhaF9hdHRyOwotCXN0cnVjdCBpYl91Y21fYWhfYXR0cglhbHRfYWhfYXR0cjsKLQotCS8qIGliX3FwX2NhcCAqLwotCV9fdTMyCW1heF9zZW5kX3dyOwotCV9fdTMyCW1heF9yZWN2X3dyOwotCV9fdTMyCW1heF9zZW5kX3NnZTsKLQlfX3UzMgltYXhfcmVjdl9zZ2U7Ci0JX191MzIJbWF4X2lubGluZV9kYXRhOwotCi0JX191MTYJcGtleV9pbmRleDsKLQlfX3UxNglhbHRfcGtleV9pbmRleDsKLQlfX3U4CWVuX3NxZF9hc3luY19ub3RpZnk7Ci0JX191OAlzcV9kcmFpbmluZzsKLQlfX3U4CW1heF9yZF9hdG9taWM7Ci0JX191OAltYXhfZGVzdF9yZF9hdG9taWM7Ci0JX191OAltaW5fcm5yX3RpbWVyOwotCV9fdTgJcG9ydF9udW07Ci0JX191OAl0aW1lb3V0OwotCV9fdTgJcmV0cnlfY250OwotCV9fdTgJcm5yX3JldHJ5OwotCV9fdTgJYWx0X3BvcnRfbnVtOwotCV9fdTgJYWx0X3RpbWVvdXQ7Ci19OwotCiBzdHJ1Y3QgaWJfdWNtX2xpc3RlbiB7CiAJX19iZTY0IHNlcnZpY2VfaWQ7CiAJX19iZTY0IHNlcnZpY2VfbWFzazsKQEAgLTE4MCwyOCArMTI4LDYgQEAKIAlfX3U4ICByZXNlcnZlZFszXTsKIH07CiAKLXN0cnVjdCBpYl91Y21fcGF0aF9yZWMgewotCV9fdTggIGRnaWRbMTZdOwotCV9fdTggIHNnaWRbMTZdOwotCV9fYmUxNiBkbGlkOwotCV9fYmUxNiBzbGlkOwotCV9fdTMyIHJhd190cmFmZmljOwotCV9fYmUzMiBmbG93X2xhYmVsOwotCV9fdTMyIHJldmVyc2libGU7Ci0JX191MzIgbXR1OwotCV9fYmUxNiBwa2V5OwotCV9fdTggIGhvcF9saW1pdDsKLQlfX3U4ICB0cmFmZmljX2NsYXNzOwotCV9fdTggIG51bWJfcGF0aDsKLQlfX3U4ICBzbDsKLQlfX3U4ICBtdHVfc2VsZWN0b3I7Ci0JX191OCAgcmF0ZV9zZWxlY3RvcjsKLQlfX3U4ICByYXRlOwotCV9fdTggIHBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3I7Ci0JX191OCAgcGFja2V0X2xpZmVfdGltZTsKLQlfX3U4ICBwcmVmZXJlbmNlOwotfTsKLQogc3RydWN0IGliX3VjbV9yZXEgewogCV9fdTMyIGlkOwogCV9fdTMyIHFwbjsKQEAgLTI3NCw3ICsyMDAsNyBAQAogCV9fYmU2NCBzaWQ7CiAJX191NjQgZGF0YTsKIAlfX3U2NCBwYXRoOwotCV9fdTE2IHBrZXk7CisJX191MTYgcmVzZXJ2ZWRfcGtleTsKIAlfX3U4ICBsZW47CiAJX191OCAgbWF4X2NtX3JldHJpZXM7CiAJX191OCAgcmVzZXJ2ZWRbNF07CkBAIC0zMDQsOCArMjMwLDggQEAKIH07CiAKIHN0cnVjdCBpYl91Y21fcmVxX2V2ZW50X3Jlc3AgewotCXN0cnVjdCBpYl91Y21fcGF0aF9yZWMgcHJpbWFyeV9wYXRoOwotCXN0cnVjdCBpYl91Y21fcGF0aF9yZWMgYWx0ZXJuYXRlX3BhdGg7CisJc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgcHJpbWFyeV9wYXRoOworCXN0cnVjdCBpYl91c2VyX3BhdGhfcmVjIGFsdGVybmF0ZV9wYXRoOwogCV9fYmU2NCAgICAgICAgICAgICAgICAgcmVtb3RlX2NhX2d1aWQ7CiAJX191MzIgICAgICAgICAgICAgICAgICByZW1vdGVfcWtleTsKIAlfX3UzMiAgICAgICAgICAgICAgICAgIHJlbW90ZV9xcG47CkBAIC0zNDksNyArMjc1LDcgQEAKIH07CiAKIHN0cnVjdCBpYl91Y21fbGFwX2V2ZW50X3Jlc3AgewotCXN0cnVjdCBpYl91Y21fcGF0aF9yZWMgcGF0aDsKKwlzdHJ1Y3QgaWJfdXNlcl9wYXRoX3JlYyBwYXRoOwogfTsKIAogc3RydWN0IGliX3VjbV9hcHJfZXZlbnRfcmVzcCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdXNlcl9zYS5oIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTkxMjAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfc2EuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgSUJfVVNFUl9TQV9ICisjZGVmaW5lIElCX1VTRVJfU0FfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgeworCV9fdTgJZGdpZFsxNl07CisJX191OAlzZ2lkWzE2XTsKKwlfX2JlMTYJZGxpZDsKKwlfX2JlMTYJc2xpZDsKKwlfX3UzMglyYXdfdHJhZmZpYzsKKwlfX2JlMzIJZmxvd19sYWJlbDsKKwlfX3UzMglyZXZlcnNpYmxlOworCV9fdTMyCW10dTsKKwlfX2JlMTYJcGtleTsKKwlfX3U4CWhvcF9saW1pdDsKKwlfX3U4CXRyYWZmaWNfY2xhc3M7CisJX191OAludW1iX3BhdGg7CisJX191OAlzbDsKKwlfX3U4CW10dV9zZWxlY3RvcjsKKwlfX3U4CXJhdGVfc2VsZWN0b3I7CisJX191OAlyYXRlOworCV9fdTgJcGFja2V0X2xpZmVfdGltZV9zZWxlY3RvcjsKKwlfX3U4CXBhY2tldF9saWZlX3RpbWU7CisJX191OAlwcmVmZXJlbmNlOworfTsKKworI2VuZGlmIC8qIElCX1VTRVJfU0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKaW5kZXggMzM4ZWQ0My4uN2I1MzcyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCkBAIC0zMiw3ICszMiw3IEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgKiBTT0ZUV0FSRS4KICAqCi0gKiAkSWQ6IGliX3VzZXJfdmVyYnMuaCAyNzA4IDIwMDUtMDYtMjQgMTc6Mjc6MjFaIHJvbGFuZCAkCisgKiAkSWQ6IGliX3VzZXJfdmVyYnMuaCA0MDE5IDIwMDUtMTEtMTEgMDA6MzM6MDlaIHNlYW4uaGVmdHkgJAogICovCiAKICNpZm5kZWYgSUJfVVNFUl9WRVJCU19ICkBAIC0zMjMsNiArMzIzLDY0IEBACiAJX191MzIgYXN5bmNfZXZlbnRzX3JlcG9ydGVkOwogfTsKIAorc3RydWN0IGliX3V2ZXJic19nbG9iYWxfcm91dGUgeworCV9fdTggIGRnaWRbMTZdOworCV9fdTMyIGZsb3dfbGFiZWw7CisJX191OCAgc2dpZF9pbmRleDsKKwlfX3U4ICBob3BfbGltaXQ7CisJX191OCAgdHJhZmZpY19jbGFzczsKKwlfX3U4ICByZXNlcnZlZDsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciB7CisJc3RydWN0IGliX3V2ZXJic19nbG9iYWxfcm91dGUgZ3JoOworCV9fdTE2IGRsaWQ7CisJX191OCAgc2w7CisJX191OCAgc3JjX3BhdGhfYml0czsKKwlfX3U4ICBzdGF0aWNfcmF0ZTsKKwlfX3U4ICBpc19nbG9iYWw7CisJX191OCAgcG9ydF9udW07CisJX191OCAgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX3FwX2F0dHIgeworCV9fdTMyCXFwX2F0dHJfbWFzazsKKwlfX3UzMglxcF9zdGF0ZTsKKwlfX3UzMgljdXJfcXBfc3RhdGU7CisJX191MzIJcGF0aF9tdHU7CisJX191MzIJcGF0aF9taWdfc3RhdGU7CisJX191MzIJcWtleTsKKwlfX3UzMglycV9wc247CisJX191MzIJc3FfcHNuOworCV9fdTMyCWRlc3RfcXBfbnVtOworCV9fdTMyCXFwX2FjY2Vzc19mbGFnczsKKworCXN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciBhaF9hdHRyOworCXN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciBhbHRfYWhfYXR0cjsKKworCS8qIGliX3FwX2NhcCAqLworCV9fdTMyCW1heF9zZW5kX3dyOworCV9fdTMyCW1heF9yZWN2X3dyOworCV9fdTMyCW1heF9zZW5kX3NnZTsKKwlfX3UzMgltYXhfcmVjdl9zZ2U7CisJX191MzIJbWF4X2lubGluZV9kYXRhOworCisJX191MTYJcGtleV9pbmRleDsKKwlfX3UxNglhbHRfcGtleV9pbmRleDsKKwlfX3U4CWVuX3NxZF9hc3luY19ub3RpZnk7CisJX191OAlzcV9kcmFpbmluZzsKKwlfX3U4CW1heF9yZF9hdG9taWM7CisJX191OAltYXhfZGVzdF9yZF9hdG9taWM7CisJX191OAltaW5fcm5yX3RpbWVyOworCV9fdTgJcG9ydF9udW07CisJX191OAl0aW1lb3V0OworCV9fdTgJcmV0cnlfY250OworCV9fdTgJcm5yX3JldHJ5OworCV9fdTgJYWx0X3BvcnRfbnVtOworCV9fdTgJYWx0X3RpbWVvdXQ7CisJX191OAlyZXNlcnZlZFs1XTsKK307CisKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwIHsKIAlfX3U2NCByZXNwb25zZTsKIAlfX3U2NCB1c2VyX2hhbmRsZTsKQEAgLTU0MSwyNiArNTk5LDYgQEAKIAlfX3UzMiBiYWRfd3I7CiB9OwogCi1zdHJ1Y3QgaWJfdXZlcmJzX2dsb2JhbF9yb3V0ZSB7Ci0JX191OCAgZGdpZFsxNl07Ci0JX191MzIgZmxvd19sYWJlbDsKLQlfX3U4ICBzZ2lkX2luZGV4OwotCV9fdTggIGhvcF9saW1pdDsKLQlfX3U4ICB0cmFmZmljX2NsYXNzOwotCV9fdTggIHJlc2VydmVkOwotfTsKLQotc3RydWN0IGliX3V2ZXJic19haF9hdHRyIHsKLQlzdHJ1Y3QgaWJfdXZlcmJzX2dsb2JhbF9yb3V0ZSBncmg7Ci0JX191MTYgZGxpZDsKLQlfX3U4ICBzbDsKLQlfX3U4ICBzcmNfcGF0aF9iaXRzOwotCV9fdTggIHN0YXRpY19yYXRlOwotCV9fdTggIGlzX2dsb2JhbDsKLQlfX3U4ICBwb3J0X251bTsKLQlfX3U4ICByZXNlcnZlZDsKLX07Ci0KIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX2FoIHsKIAlfX3U2NCByZXNwb25zZTsKIAlfX3U2NCB1c2VyX2hhbmRsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggNmJiZjFiMy4uZWUxZjNhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTI2MCw3ICsyNjAsOCBAQAogCUlCX0VWRU5UX1NNX0NIQU5HRSwKIAlJQl9FVkVOVF9TUlFfRVJSLAogCUlCX0VWRU5UX1NSUV9MSU1JVF9SRUFDSEVELAotCUlCX0VWRU5UX1FQX0xBU1RfV1FFX1JFQUNIRUQKKwlJQl9FVkVOVF9RUF9MQVNUX1dRRV9SRUFDSEVELAorCUlCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSCiB9OwogCiBzdHJ1Y3QgaWJfZXZlbnQgewpAQCAtNjk2LDggKzY5NywxMiBAQAogc3RydWN0IGliX3VvYmplY3QgewogCXU2NAkJCXVzZXJfaGFuZGxlOwkvKiBoYW5kbGUgZ2l2ZW4gdG8gdXMgYnkgdXNlcnNwYWNlICovCiAJc3RydWN0IGliX3Vjb250ZXh0ICAgICAqY29udGV4dDsJLyogYXNzb2NpYXRlZCB1c2VyIGNvbnRleHQgKi8KKwl2b2lkCQkgICAgICAgKm9iamVjdDsJCS8qIGNvbnRhaW5pbmcgb2JqZWN0ICovCiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogbGluayB0byBjb250ZXh0J3MgbGlzdCAqLwogCXUzMgkJCWlkOwkJLyogaW5kZXggaW50byBrZXJuZWwgaWRyICovCisJc3RydWN0IGtyZWYJCXJlZjsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlCW11dGV4OwkJLyogcHJvdGVjdHMgLmxpdmUgKi8KKwlpbnQJCQlsaXZlOwogfTsKIAogc3RydWN0IGliX3VtZW0gewpAQCAtODI3LDYgKzgzMiw3IEBACiAJc3RydWN0IGliX2V2ZW50X2hhbmRsZXIgZXZlbnRfaGFuZGxlcjsKIAlzdHJ1Y3QgaWJfcGtleV9jYWNoZSAgKipwa2V5X2NhY2hlOwogCXN0cnVjdCBpYl9naWRfY2FjaGUgICAqKmdpZF9jYWNoZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICpsbWNfY2FjaGU7CiB9OwogCiBzdHJ1Y3QgaWJfZGV2aWNlIHsKQEAgLTEwODYsNiArMTA5MiwyMCBAQAogc3RydWN0IGliX2FoICppYl9jcmVhdGVfYWgoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpOwogCiAvKioKKyAqIGliX2luaXRfYWhfZnJvbV93YyAtIEluaXRpYWxpemVzIGFkZHJlc3MgaGFuZGxlIGF0dHJpYnV0ZXMgZnJvbSBhCisgKiAgIHdvcmsgY29tcGxldGlvbi4KKyAqIEBkZXZpY2U6IERldmljZSBvbiB3aGljaCB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBhcnJpdmVkLgorICogQHBvcnRfbnVtOiBQb3J0IG9uIHdoaWNoIHRoZSByZWNlaXZlZCBtZXNzYWdlIGFycml2ZWQuCisgKiBAd2M6IFdvcmsgY29tcGxldGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlY2VpdmVkIG1lc3NhZ2UuCisgKiBAZ3JoOiBSZWZlcmVuY2VzIHRoZSByZWNlaXZlZCBnbG9iYWwgcm91dGUgaGVhZGVyLiAgVGhpcyBwYXJhbWV0ZXIgaXMKKyAqICAgaWdub3JlZCB1bmxlc3MgdGhlIHdvcmsgY29tcGxldGlvbiBpbmRpY2F0ZXMgdGhhdCB0aGUgR1JIIGlzIHZhbGlkLgorICogQGFoX2F0dHI6IFJldHVybmVkIGF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGFuIGFkZHJlc3MKKyAqICAgaGFuZGxlIGZvciByZXBseWluZyB0byB0aGUgbWVzc2FnZS4KKyAqLworaW50IGliX2luaXRfYWhfZnJvbV93YyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLCBzdHJ1Y3QgaWJfd2MgKndjLAorCQkgICAgICAgc3RydWN0IGliX2dyaCAqZ3JoLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cik7CisKKy8qKgogICogaWJfY3JlYXRlX2FoX2Zyb21fd2MgLSBDcmVhdGVzIGFuIGFkZHJlc3MgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUKICAqICAgc2VuZGVyIG9mIHRoZSBzcGVjaWZpZWQgd29yayBjb21wbGV0aW9uLgogICogQHBkOiBUaGUgcHJvdGVjdGlvbiBkb21haW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBhZGRyZXNzIGhhbmRsZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmggYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMmM2M2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFZvbHRhaXJlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZXM6CisgKgorICogMSkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiQ29tbW9uIFB1YmxpYyBMaWNlbnNlIDEuMCIgYSBjb3B5IG9mIHdoaWNoIGlzCisgKiAgICBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2NwbC5waHAuCisgKgorICogMikgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiVGhlIEJTRCBMaWNlbnNlIiBhIGNvcHkgb2Ygd2hpY2ggaXMKKyAqICAgIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwLgorICoKKyAqIDMpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiIgYQorICogICAgY29weSBvZiB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocC4KKyAqCisgKiBMaWNlbnNlZSBoYXMgdGhlIHJpZ2h0IHRvIGNob29zZSBvbmUgb2YgdGhlIGFib3ZlIGxpY2Vuc2VzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIG9uZSBvZiB0aGUgbGljZW5zZSBub3RpY2VzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgb25lIG9mIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqLworCisjaWYgIWRlZmluZWQoUkRNQV9DTV9IKQorI2RlZmluZSBSRE1BX0NNX0gKKworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPHJkbWEvaWJfYWRkci5oPgorI2luY2x1ZGUgPHJkbWEvaWJfc2EuaD4KKworLyoKKyAqIFVwb24gcmVjZWl2aW5nIGEgZGV2aWNlIHJlbW92YWwgZXZlbnQsIHVzZXJzIG11c3QgZGVzdHJveSB0aGUgYXNzb2NpYXRlZAorICogUkRNQSBpZGVudGlmaWVyIGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIHdpdGggdGhlIGRldmljZS4KKyAqLworZW51bSByZG1hX2NtX2V2ZW50X3R5cGUgeworCVJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRCwKKwlSRE1BX0NNX0VWRU5UX0FERFJfRVJST1IsCisJUkRNQV9DTV9FVkVOVF9ST1VURV9SRVNPTFZFRCwKKwlSRE1BX0NNX0VWRU5UX1JPVVRFX0VSUk9SLAorCVJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNULAorCVJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVNQT05TRSwKKwlSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfRVJST1IsCisJUkRNQV9DTV9FVkVOVF9VTlJFQUNIQUJMRSwKKwlSRE1BX0NNX0VWRU5UX1JFSkVDVEVELAorCVJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQsCisJUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQsCisJUkRNQV9DTV9FVkVOVF9ERVZJQ0VfUkVNT1ZBTCwKK307CisKK2VudW0gcmRtYV9wb3J0X3NwYWNlIHsKKwlSRE1BX1BTX1NEUCAgPSAweDAwMDEsCisJUkRNQV9QU19UQ1AgID0gMHgwMTA2LAorCVJETUFfUFNfVURQICA9IDB4MDExMSwKKwlSRE1BX1BTX1NDVFAgPSAweDAxODMKK307CisKK3N0cnVjdCByZG1hX2FkZHIgeworCXN0cnVjdCBzb2NrYWRkciBzcmNfYWRkcjsKKwl1OAkJc3JjX3BhZFtzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgLQorCQkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpXTsKKwlzdHJ1Y3Qgc29ja2FkZHIgZHN0X2FkZHI7CisJdTgJCWRzdF9wYWRbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpIC0KKwkJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyKV07CisJc3RydWN0IHJkbWFfZGV2X2FkZHIgZGV2X2FkZHI7Cit9OworCitzdHJ1Y3QgcmRtYV9yb3V0ZSB7CisJc3RydWN0IHJkbWFfYWRkciBhZGRyOworCXN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqcGF0aF9yZWM7CisJaW50IG51bV9wYXRoczsKK307CisKK3N0cnVjdCByZG1hX2NtX2V2ZW50IHsKKwllbnVtIHJkbWFfY21fZXZlbnRfdHlwZQkgZXZlbnQ7CisJaW50CQkJIHN0YXR1czsKKwl2b2lkCQkJKnByaXZhdGVfZGF0YTsKKwl1OAkJCSBwcml2YXRlX2RhdGFfbGVuOworfTsKKworc3RydWN0IHJkbWFfY21faWQ7CisKKy8qKgorICogcmRtYV9jbV9ldmVudF9oYW5kbGVyIC0gQ2FsbGJhY2sgdXNlZCB0byByZXBvcnQgdXNlciBldmVudHMuCisgKgorICogTm90ZXM6IFVzZXJzIG1heSBub3QgY2FsbCByZG1hX2Rlc3Ryb3lfaWQgZnJvbSB0aGlzIGNhbGxiYWNrIHRvIGRlc3Ryb3kKKyAqICAgdGhlIHBhc3NlZCBpbiBpZCwgb3IgYSBjb3JyZXNwb25kaW5nIGxpc3RlbiBpZC4gIFJldHVybmluZyBhCisgKiAgIG5vbi16ZXJvIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrIHdpbGwgZGVzdHJveSB0aGUgcGFzc2VkIGluIGlkLgorICovCit0eXBlZGVmIGludCAoKnJkbWFfY21fZXZlbnRfaGFuZGxlcikoc3RydWN0IHJkbWFfY21faWQgKmlkLAorCQkJCSAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworc3RydWN0IHJkbWFfY21faWQgeworCXN0cnVjdCBpYl9kZXZpY2UJKmRldmljZTsKKwl2b2lkCQkJKmNvbnRleHQ7CisJc3RydWN0IGliX3FwCQkqcXA7CisJcmRtYV9jbV9ldmVudF9oYW5kbGVyCSBldmVudF9oYW5kbGVyOworCXN0cnVjdCByZG1hX3JvdXRlCSByb3V0ZTsKKwllbnVtIHJkbWFfcG9ydF9zcGFjZQkgcHM7CisJdTgJCQkgcG9ydF9udW07Cit9OworCisvKioKKyAqIHJkbWFfY3JlYXRlX2lkIC0gQ3JlYXRlIGFuIFJETUEgaWRlbnRpZmllci4KKyAqCisgKiBAZXZlbnRfaGFuZGxlcjogVXNlciBjYWxsYmFjayBpbnZva2VkIHRvIHJlcG9ydCBldmVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogICByZXR1cm5lZCByZG1hX2lkLgorICogQGNvbnRleHQ6IFVzZXIgc3BlY2lmaWVkIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZC4KKyAqIEBwczogUkRNQSBwb3J0IHNwYWNlLgorICovCitzdHJ1Y3QgcmRtYV9jbV9pZCAqcmRtYV9jcmVhdGVfaWQocmRtYV9jbV9ldmVudF9oYW5kbGVyIGV2ZW50X2hhbmRsZXIsCisJCQkJICB2b2lkICpjb250ZXh0LCBlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcyk7CisKK3ZvaWQgcmRtYV9kZXN0cm95X2lkKHN0cnVjdCByZG1hX2NtX2lkICppZCk7CisKKy8qKgorICogcmRtYV9iaW5kX2FkZHIgLSBCaW5kIGFuIFJETUEgaWRlbnRpZmllciB0byBhIHNvdXJjZSBhZGRyZXNzIGFuZAorICogICBhc3NvY2lhdGVkIFJETUEgZGV2aWNlLCBpZiBuZWVkZWQuCisgKgorICogQGlkOiBSRE1BIGlkZW50aWZpZXIuCisgKiBAYWRkcjogTG9jYWwgYWRkcmVzcyBpbmZvcm1hdGlvbi4gIFdpbGRjYXJkIHZhbHVlcyBhcmUgcGVybWl0dGVkLgorICoKKyAqIFRoaXMgYXNzb2NpYXRlcyBhIHNvdXJjZSBhZGRyZXNzIHdpdGggdGhlIFJETUEgaWRlbnRpZmllciBiZWZvcmUgY2FsbGluZworICogcmRtYV9saXN0ZW4uICBJZiBhIHNwZWNpZmljIGxvY2FsIGFkZHJlc3MgaXMgZ2l2ZW4sIHRoZSBSRE1BIGlkZW50aWZpZXIgd2lsbAorICogYmUgYm91bmQgdG8gYSBsb2NhbCBSRE1BIGRldmljZS4KKyAqLworaW50IHJkbWFfYmluZF9hZGRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHNvY2thZGRyICphZGRyKTsKKworLyoqCisgKiByZG1hX3Jlc29sdmVfYWRkciAtIFJlc29sdmUgZGVzdGluYXRpb24gYW5kIG9wdGlvbmFsIHNvdXJjZSBhZGRyZXNzZXMKKyAqICAgZnJvbSBJUCBhZGRyZXNzZXMgdG8gYW4gUkRNQSBhZGRyZXNzLiAgSWYgc3VjY2Vzc2Z1bCwgdGhlIHNwZWNpZmllZAorICogICByZG1hX2NtX2lkIHdpbGwgYmUgYm91bmQgdG8gYSBsb2NhbCBkZXZpY2UuCisgKgorICogQGlkOiBSRE1BIGlkZW50aWZpZXIuCisgKiBAc3JjX2FkZHI6IFNvdXJjZSBhZGRyZXNzIGluZm9ybWF0aW9uLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwuCisgKiBAZHN0X2FkZHI6IERlc3RpbmF0aW9uIGFkZHJlc3MgaW5mb3JtYXRpb24uCisgKiBAdGltZW91dF9tczogVGltZSB0byB3YWl0IGZvciByZXNvbHV0aW9uIHRvIGNvbXBsZXRlLgorICovCitpbnQgcmRtYV9yZXNvbHZlX2FkZHIoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLCBpbnQgdGltZW91dF9tcyk7CisKKy8qKgorICogcmRtYV9yZXNvbHZlX3JvdXRlIC0gUmVzb2x2ZSB0aGUgUkRNQSBhZGRyZXNzIGJvdW5kIHRvIHRoZSBSRE1BIGlkZW50aWZpZXIKKyAqICAgaW50byByb3V0ZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbi4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBvbiB0aGUgY2xpZW50IHNpZGUgb2YgYSBjb25uZWN0aW9uLgorICogVXNlcnMgbXVzdCBoYXZlIGZpcnN0IGNhbGxlZCByZG1hX3Jlc29sdmVfYWRkciB0byByZXNvbHZlIGEgZHN0X2FkZHIKKyAqIGludG8gYW4gUkRNQSBhZGRyZXNzIGJlZm9yZSBjYWxsaW5nIHRoaXMgcm91dGluZS4KKyAqLworaW50IHJkbWFfcmVzb2x2ZV9yb3V0ZShzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCB0aW1lb3V0X21zKTsKKworLyoqCisgKiByZG1hX2NyZWF0ZV9xcCAtIEFsbG9jYXRlIGEgUVAgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIHRoZSBzcGVjaWZpZWQgUkRNQQorICogaWRlbnRpZmllci4KKyAqCisgKiBRUHMgYWxsb2NhdGVkIHRvIGFuIHJkbWFfY21faWQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHRyYW5zaXRpb25lZCBieSB0aGUgQ01BCisgKiB0aHJvdWdoIHRoZWlyIHN0YXRlcy4KKyAqLworaW50IHJkbWFfY3JlYXRlX3FwKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IGliX3BkICpwZCwKKwkJICAgc3RydWN0IGliX3FwX2luaXRfYXR0ciAqcXBfaW5pdF9hdHRyKTsKKworLyoqCisgKiByZG1hX2Rlc3Ryb3lfcXAgLSBEZWFsbG9jYXRlIHRoZSBRUCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBSRE1BCisgKiBpZGVudGlmaWVyLgorICoKKyAqIFVzZXJzIG11c3QgZGVzdHJveSBhbnkgUVAgYXNzb2NpYXRlZCB3aXRoIGFuIFJETUEgaWRlbnRpZmllciBiZWZvcmUKKyAqIGRlc3Ryb3lpbmcgdGhlIFJETUEgSUQuCisgKi8KK3ZvaWQgcmRtYV9kZXN0cm95X3FwKHN0cnVjdCByZG1hX2NtX2lkICppZCk7CisKKy8qKgorICogcmRtYV9pbml0X3FwX2F0dHIgLSBJbml0aWFsaXplcyB0aGUgUVAgYXR0cmlidXRlcyBmb3IgdXNlIGluIHRyYW5zaXRpb25pbmcKKyAqICAgdG8gYSBzcGVjaWZpZWQgUVAgc3RhdGUuCisgKiBAaWQ6IENvbW11bmljYXRpb24gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIFFQIGF0dHJpYnV0ZXMgdG8KKyAqICAgaW5pdGlhbGl6ZS4KKyAqIEBxcF9hdHRyOiBPbiBpbnB1dCwgc3BlY2lmaWVzIHRoZSBkZXNpcmVkIFFQIHN0YXRlLiAgT24gb3V0cHV0LCB0aGUKKyAqICAgbWFuZGF0b3J5IGFuZCBkZXNpcmVkIG9wdGlvbmFsIGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQgaW4gb3JkZXIgdG8KKyAqICAgbW9kaWZ5IHRoZSBRUCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlLgorICogQHFwX2F0dHJfbWFzazogVGhlIFFQIGF0dHJpYnV0ZSBtYXNrIHRoYXQgbWF5IGJlIHVzZWQgdG8gdHJhbnNpdGlvbiB0aGUKKyAqICAgUVAgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZS4KKyAqCisgKiBVc2VycyBtdXN0IHNldCB0aGUgQHFwX2F0dHItPnFwX3N0YXRlIHRvIHRoZSBkZXNpcmVkIFFQIHN0YXRlLiAgVGhpcyBjYWxsCisgKiB3aWxsIHNldCBhbGwgcmVxdWlyZWQgYXR0cmlidXRlcyBmb3IgdGhlIGdpdmVuIHRyYW5zaXRpb24sIGFsb25nIHdpdGgKKyAqIGtub3duIG9wdGlvbmFsIGF0dHJpYnV0ZXMuICBVc2VycyBtYXkgb3ZlcnJpZGUgdGhlIGF0dHJpYnV0ZXMgcmV0dXJuZWQgZnJvbQorICogdGhpcyBjYWxsIGJlZm9yZSBjYWxsaW5nIGliX21vZGlmeV9xcC4KKyAqCisgKiBVc2VycyB0aGF0IHdpc2ggdG8gaGF2ZSB0aGVpciBRUCBhdXRvbWF0aWNhbGx5IHRyYW5zaXRpb25lZCB0aHJvdWdoIGl0cworICogc3RhdGVzIGNhbiBhc3NvY2lhdGUgYSBRUCB3aXRoIHRoZSByZG1hX2NtX2lkIGJ5IGNhbGxpbmcgcmRtYV9jcmVhdGVfcXAoKS4KKyAqLworaW50IHJkbWFfaW5pdF9xcF9hdHRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IGliX3FwX2F0dHIgKnFwX2F0dHIsCisJCSAgICAgICBpbnQgKnFwX2F0dHJfbWFzayk7CisKK3N0cnVjdCByZG1hX2Nvbm5fcGFyYW0geworCWNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YTsKKwl1OCBwcml2YXRlX2RhdGFfbGVuOworCXU4IHJlc3BvbmRlcl9yZXNvdXJjZXM7CisJdTggaW5pdGlhdG9yX2RlcHRoOworCXU4IGZsb3dfY29udHJvbDsKKwl1OCByZXRyeV9jb3VudDsJCS8qIGlnbm9yZWQgd2hlbiBhY2NlcHRpbmcgKi8KKwl1OCBybnJfcmV0cnlfY291bnQ7CisJLyogRmllbGRzIGJlbG93IGlnbm9yZWQgaWYgYSBRUCBpcyBjcmVhdGVkIG9uIHRoZSByZG1hX2NtX2lkLiAqLworCXU4IHNycTsKKwl1MzIgcXBfbnVtOworCWVudW0gaWJfcXBfdHlwZSBxcF90eXBlOworfTsKKworLyoqCisgKiByZG1hX2Nvbm5lY3QgLSBJbml0aWF0ZSBhbiBhY3RpdmUgY29ubmVjdGlvbiByZXF1ZXN0LgorICoKKyAqIFVzZXJzIG11c3QgaGF2ZSByZXNvbHZlZCBhIHJvdXRlIGZvciB0aGUgcmRtYV9jbV9pZCB0byBjb25uZWN0IHdpdGgKKyAqIGJ5IGhhdmluZyBjYWxsZWQgcmRtYV9yZXNvbHZlX3JvdXRlIGJlZm9yZSBjYWxsaW5nIHRoaXMgcm91dGluZS4KKyAqLworaW50IHJkbWFfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pOworCisvKioKKyAqIHJkbWFfbGlzdGVuIC0gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHBhc3NpdmUgc2lkZSB0bworICogICBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuCisgKgorICogVXNlcnMgbXVzdCBoYXZlIGJvdW5kIHRoZSByZG1hX2NtX2lkIHRvIGEgbG9jYWwgYWRkcmVzcyBieSBjYWxsaW5nCisgKiByZG1hX2JpbmRfYWRkciBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCisgKi8KK2ludCByZG1hX2xpc3RlbihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCBiYWNrbG9nKTsKKworLyoqCisgKiByZG1hX2FjY2VwdCAtIENhbGxlZCB0byBhY2NlcHQgYSBjb25uZWN0aW9uIHJlcXVlc3Qgb3IgcmVzcG9uc2UuCisgKiBAaWQ6IENvbm5lY3Rpb24gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuCisgKiBAY29ubl9wYXJhbTogSW5mb3JtYXRpb24gbmVlZGVkIHRvIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbi4gIFRoaXMgbXVzdCBiZQorICogICBwcm92aWRlZCBpZiBhY2NlcHRpbmcgYSBjb25uZWN0aW9uIHJlcXVlc3QuICBJZiBhY2NlcHRpbmcgYSBjb25uZWN0aW9uCisgKiAgIHJlc3BvbnNlLCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIE5VTEwuCisgKgorICogVHlwaWNhbGx5LCB0aGlzIHJvdXRpbmUgaXMgb25seSBjYWxsZWQgYnkgdGhlIGxpc3RlbmVyIHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24KKyAqIHJlcXVlc3QuICBJdCBtdXN0IGFsc28gYmUgY2FsbGVkIG9uIHRoZSBhY3RpdmUgc2lkZSBvZiBhIGNvbm5lY3Rpb24gaWYgdGhlCisgKiB1c2VyIGlzIHBlcmZvcm1pbmcgdGhlaXIgb3duIFFQIHRyYW5zaXRpb25zLgorICovCitpbnQgcmRtYV9hY2NlcHQoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtKTsKKworLyoqCisgKiByZG1hX3JlamVjdCAtIENhbGxlZCB0byByZWplY3QgYSBjb25uZWN0aW9uIHJlcXVlc3Qgb3IgcmVzcG9uc2UuCisgKi8KK2ludCByZG1hX3JlamVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJdTggcHJpdmF0ZV9kYXRhX2xlbik7CisKKy8qKgorICogcmRtYV9kaXNjb25uZWN0IC0gVGhpcyBmdW5jdGlvbiBkaXNjb25uZWN0cyB0aGUgYXNzb2NpYXRlZCBRUCBhbmQKKyAqICAgdHJhbnNpdGlvbnMgaXQgaW50byB0aGUgZXJyb3Igc3RhdGUuCisgKi8KK2ludCByZG1hX2Rpc2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkKTsKKworI2VuZGlmIC8qIFJETUFfQ01fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvcmRtYV9jbV9pYi5oIGIvaW5jbHVkZS9yZG1hL3JkbWFfY21faWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGMzYWYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yZG1hL3JkbWFfY21faWIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIFNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzOgorICoKKyAqIDEpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkNvbW1vbiBQdWJsaWMgTGljZW5zZSAxLjAiIGEgY29weSBvZiB3aGljaCBpcworICogICAgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9jcGwucGhwLgorICoKKyAqIDIpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIlRoZSBCU0QgTGljZW5zZSIgYSBjb3B5IG9mIHdoaWNoIGlzCisgKiAgICBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4KKyAqCisgKiAzKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIiIGEKKyAqICAgIGNvcHkgb2Ygd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHAuCisgKgorICogTGljZW5zZWUgaGFzIHRoZSByaWdodCB0byBjaG9vc2Ugb25lIG9mIHRoZSBhYm92ZSBsaWNlbnNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCBvbmUgb2YgdGhlIGxpY2Vuc2Ugbm90aWNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIG9uZSBvZiB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFJETUFfQ01fSUJfSCkKKyNkZWZpbmUgUkRNQV9DTV9JQl9ICisKKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworLyoqCisgKiByZG1hX3NldF9pYl9wYXRocyAtIE1hbnVhbGx5IHNldHMgdGhlIHBhdGggcmVjb3JkcyB1c2VkIHRvIGVzdGFibGlzaCBhCisgKiAgIGNvbm5lY3Rpb24uCisgKiBAaWQ6IENvbm5lY3Rpb24gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuCisgKiBAcGF0aF9yZWM6IFJlZmVyZW5jZSB0byB0aGUgcGF0aCByZWNvcmQKKyAqCisgKiBUaGlzIGNhbGwgcGVybWl0cyBhIHVzZXIgdG8gc3BlY2lmeSByb3V0aW5nIGluZm9ybWF0aW9uIGZvciByZG1hX2NtX2lkJ3MKKyAqIGJvdW5kIHRvIEluZmluaWJhbmQgZGV2aWNlcy4gIEl0IGlzIGNhbGxlZCBvbiB0aGUgY2xpZW50IHNpZGUgb2YgYQorICogY29ubmVjdGlvbiBhbmQgcmVwbGFjZXMgdGhlIGNhbGwgdG8gcmRtYV9yZXNvbHZlX3JvdXRlLgorICovCitpbnQgcmRtYV9zZXRfaWJfcGF0aHMoc3RydWN0IHJkbWFfY21faWQgKmlkLAorCQkgICAgICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnBhdGhfcmVjLCBpbnQgbnVtX3BhdGhzKTsKKworI2VuZGlmIC8qIFJETUFfQ01fSUJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3NycC5oIGIvaW5jbHVkZS9zY3NpL3NycC5oCmluZGV4IDYzN2Y3N2UuLmFkMTc4ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zcnAuaAorKysgYi9pbmNsdWRlL3Njc2kvc3JwLmgKQEAgLTg3LDYgKzg3LDExIEBACiAJU1JQX0xPR0lOX1JFSl9DSEFOTkVMX0xJTUlUX1JFQUNIRUQJCT0gMHgwMDAxMDAwNgogfTsKIAorZW51bSB7CisJU1JQX1JFVjEwX0lCX0lPX0NMQVNTCT0gMHhmZjAwLAorCVNSUF9SRVYxNkFfSUJfSU9fQ0xBU1MJPSAweDAxMDAKK307CisKIHN0cnVjdCBzcnBfZGlyZWN0X2J1ZiB7CiAJX19iZTY0CXZhOwogCV9fYmUzMglrZXk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCBlOTViOTMyLi5lMDZkMGMxIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTg4MSwxNCArODgxLDYgQEAKIAogCXRzay0+ZmxhZ3MgfD0gUEZfRVhJVElORzsKIAotCS8qCi0JICogTWFrZSBzdXJlIHdlIGRvbid0IHRyeSB0byBwcm9jZXNzIGFueSB0aW1lciBmaXJpbmdzCi0JICogd2hpbGUgd2UgYXJlIGFscmVhZHkgZXhpdGluZy4KLQkgKi8KLSAJdHNrLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0gCXRzay0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXRzay0+aXRfc2NoZWRfZXhwaXJlcyA9IDA7Ci0KIAlpZiAodW5saWtlbHkoaW5fYXRvbWljKCkpKQogCQlwcmludGsoS0VSTl9JTkZPICJub3RlOiAlc1slZF0gZXhpdGVkIHdpdGggcHJlZW1wdF9jb3VudCAlZFxuIiwKIAkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCA1MjBmNmM1Li5kMzhkOWVjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTU1NSw5ICs1NTUsNiBAQAogCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGk7CiAKLQlpZiAoQ1BVQ0xPQ0tfUEVSVEhSRUFEKHRpbWVyLT5pdF9jbG9jaykJJiYgKHAtPmZsYWdzICYgUEZfRVhJVElORykpCi0JCXJldHVybjsKLQogCWhlYWQgPSAoQ1BVQ0xPQ0tfUEVSVEhSRUFEKHRpbWVyLT5pdF9jbG9jaykgPwogCQlwLT5jcHVfdGltZXJzIDogcC0+c2lnbmFsLT5jcHVfdGltZXJzKTsKIAloZWFkICs9IENQVUNMT0NLX1dISUNIKHRpbWVyLT5pdF9jbG9jayk7CkBAIC0xMTczLDYgKzExNzAsOSBAQAogCQl9CiAJCXQgPSB0c2s7CiAJCWRvIHsKKwkJCWlmICh1bmxpa2VseSh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKQorCQkJCWNvbnRpbnVlOworCiAJCQl0aWNrcyA9IGNwdXRpbWVfYWRkKGNwdXRpbWVfYWRkKHQtPnV0aW1lLCB0LT5zdGltZSksCiAJCQkJCSAgICBwcm9mX2xlZnQpOwogCQkJaWYgKCFjcHV0aW1lX2VxKHByb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgpAQCAtMTE5MywxMSArMTE5Myw3IEBACiAJCQkJCSAgICAgIHQtPml0X3NjaGVkX2V4cGlyZXMgPiBzY2hlZCkpIHsKIAkJCQl0LT5pdF9zY2hlZF9leHBpcmVzID0gc2NoZWQ7CiAJCQl9Ci0KLQkJCWRvIHsKLQkJCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCQl9IHdoaWxlICh1bmxpa2VseSh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKTsKLQkJfSB3aGlsZSAodCAhPSB0c2spOworCQl9IHdoaWxlICgodCA9IG5leHRfdGhyZWFkKHQpKSAhPSB0c2spOwogCX0KIH0KIApAQCAtMTI4OSwzMCArMTI4NSwzMCBAQAogCiAjdW5kZWYJVU5FWFBJUkVECiAKLQlCVUdfT04odHNrLT5leGl0X3N0YXRlKTsKLQogCS8qCiAJICogRG91YmxlLWNoZWNrIHdpdGggbG9ja3MgaGVsZC4KIAkgKi8KIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCXNwaW5fbG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlpZiAobGlrZWx5KHRzay0+c2lnbmFsICE9IE5VTEwpKSB7CisJCXNwaW5fbG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCS8qCi0JICogSGVyZSB3ZSB0YWtlIG9mZiB0c2stPmNwdV90aW1lcnNbTl0gYW5kIHRzay0+c2lnbmFsLT5jcHVfdGltZXJzW05dCi0JICogYWxsIHRoZSB0aW1lcnMgdGhhdCBhcmUgZmlyaW5nLCBhbmQgcHV0IHRoZW0gb24gdGhlIGZpcmluZyBsaXN0LgotCSAqLwotCWNoZWNrX3RocmVhZF90aW1lcnModHNrLCAmZmlyaW5nKTsKLQljaGVja19wcm9jZXNzX3RpbWVycyh0c2ssICZmaXJpbmcpOworCQkvKgorCQkgKiBIZXJlIHdlIHRha2Ugb2ZmIHRzay0+Y3B1X3RpbWVyc1tOXSBhbmQgdHNrLT5zaWduYWwtPmNwdV90aW1lcnNbTl0KKwkJICogYWxsIHRoZSB0aW1lcnMgdGhhdCBhcmUgZmlyaW5nLCBhbmQgcHV0IHRoZW0gb24gdGhlIGZpcmluZyBsaXN0LgorCQkgKi8KKwkJY2hlY2tfdGhyZWFkX3RpbWVycyh0c2ssICZmaXJpbmcpOworCQljaGVja19wcm9jZXNzX3RpbWVycyh0c2ssICZmaXJpbmcpOwogCi0JLyoKLQkgKiBXZSBtdXN0IHJlbGVhc2UgdGhlc2UgbG9ja3MgYmVmb3JlIHRha2luZyBhbnkgdGltZXIncyBsb2NrLgotCSAqIFRoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2Ugd2l0aCB0aW1lciBkZWxldGlvbiBoZXJlLCBhcyB0aGUKLQkgKiBzaWdsb2NrIG5vdyBwcm90ZWN0cyBvdXIgcHJpdmF0ZSBmaXJpbmcgbGlzdC4gIFdlIGhhdmUgc2V0Ci0JICogdGhlIGZpcmluZyBmbGFnIGluIGVhY2ggdGltZXIsIHNvIHRoYXQgYSBkZWxldGlvbiBhdHRlbXB0Ci0JICogdGhhdCBnZXRzIHRoZSB0aW1lciBsb2NrIGJlZm9yZSB3ZSBkbyB3aWxsIGdpdmUgaXQgdXAgYW5kCi0JICogc3BpbiB1bnRpbCB3ZSd2ZSB0YWtlbiBjYXJlIG9mIHRoYXQgdGltZXIgYmVsb3cuCi0JICovCi0Jc3Bpbl91bmxvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJCS8qCisJCSAqIFdlIG11c3QgcmVsZWFzZSB0aGVzZSBsb2NrcyBiZWZvcmUgdGFraW5nIGFueSB0aW1lcidzIGxvY2suCisJCSAqIFRoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2Ugd2l0aCB0aW1lciBkZWxldGlvbiBoZXJlLCBhcyB0aGUKKwkJICogc2lnbG9jayBub3cgcHJvdGVjdHMgb3VyIHByaXZhdGUgZmlyaW5nIGxpc3QuICBXZSBoYXZlIHNldAorCQkgKiB0aGUgZmlyaW5nIGZsYWcgaW4gZWFjaCB0aW1lciwgc28gdGhhdCBhIGRlbGV0aW9uIGF0dGVtcHQKKwkJICogdGhhdCBnZXRzIHRoZSB0aW1lciBsb2NrIGJlZm9yZSB3ZSBkbyB3aWxsIGdpdmUgaXQgdXAgYW5kCisJCSAqIHNwaW4gdW50aWwgd2UndmUgdGFrZW4gY2FyZSBvZiB0aGF0IHRpbWVyIGJlbG93LgorCQkgKi8KKwkJc3Bpbl91bmxvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJfQogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCBhNmQ5ZWY0Li4wYTkwN2YwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTg2LDYgKzg2LDcgQEAKIAkJCWdvdG8gVGhhdzsKIAl9CiAKKwlzdXNwZW5kX2NvbnNvbGUoKTsKIAlpZiAoKGVycm9yID0gZGV2aWNlX3N1c3BlbmQoUE1TR19TVVNQRU5EKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTb21lIGRldmljZXMgZmFpbGVkIHRvIHN1c3BlbmRcbiIpOwogCQlnb3RvIEZpbmlzaDsKQEAgLTEzMyw2ICsxMzQsNyBAQAogc3RhdGljIHZvaWQgc3VzcGVuZF9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewogCWRldmljZV9yZXN1bWUoKTsKKwlyZXN1bWVfY29uc29sZSgpOwogCXRoYXdfcHJvY2Vzc2VzKCk7CiAJZW5hYmxlX25vbmJvb3RfY3B1cygpOwogCWlmIChwbV9vcHMgJiYgcG1fb3BzLT5maW5pc2gpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggYzA1NmYzMy4uMTlhOTU1NiAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtNjcsNiArNjcsNyBAQAogICogZHJpdmVyIHN5c3RlbS4KICAqLwogc3RhdGljIERFQ0xBUkVfTVVURVgoY29uc29sZV9zZW0pOworc3RhdGljIERFQ0xBUkVfTVVURVgoc2Vjb25kYXJ5X2NvbnNvbGVfc2VtKTsKIHN0cnVjdCBjb25zb2xlICpjb25zb2xlX2RyaXZlcnM7CiAvKgogICogVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIG1lc3MgdGhhdCBpcyB0aGUgVlQgY29kZSBieQpAQCAtNzYsNyArNzcsNyBAQAogICogcGF0aCBpbiB0aGUgY29uc29sZSBjb2RlIHdoZXJlIHdlIGVuZCB1cCBpbiBwbGFjZXMgSSB3YW50CiAgKiBsb2NrZWQgd2l0aG91dCB0aGUgY29uc29sZSBzZW1wYWhvcmUgaGVsZAogICovCi1zdGF0aWMgaW50IGNvbnNvbGVfbG9ja2VkOworc3RhdGljIGludCBjb25zb2xlX2xvY2tlZCwgY29uc29sZV9zdXNwZW5kZWQ7CiAKIC8qCiAgKiBsb2didWZfbG9jayBwcm90ZWN0cyBsb2dfYnVmLCBsb2dfc3RhcnQsIGxvZ19lbmQsIGNvbl9zdGFydCBhbmQgbG9nZ2VkX2NoYXJzCkBAIC02OTgsNiArNjk5LDIzIEBACiB9CiAKIC8qKgorICogc3VzcGVuZF9jb25zb2xlIC0gc3VzcGVuZCB0aGUgY29uc29sZSBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGRpc2FibGVzIHByaW50aygpIHdoaWxlIHdlIGdvIGludG8gc3VzcGVuZCBzdGF0ZXMKKyAqLwordm9pZCBzdXNwZW5kX2NvbnNvbGUodm9pZCkKK3sKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9zdXNwZW5kZWQgPSAxOworfQorCit2b2lkIHJlc3VtZV9jb25zb2xlKHZvaWQpCit7CisJY29uc29sZV9zdXNwZW5kZWQgPSAwOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKK30KKworLyoqCiAgKiBhY3F1aXJlX2NvbnNvbGVfc2VtIC0gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCiAgKgogICogQWNxdWlyZXMgYSBzZW1hcGhvcmUgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCkBAIC03MDgsNiArNzI2LDEwIEBACiB2b2lkIGFjcXVpcmVfY29uc29sZV9zZW0odm9pZCkKIHsKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCWlmIChjb25zb2xlX3N1c3BlbmRlZCkgeworCQlkb3duKCZzZWNvbmRhcnlfY29uc29sZV9zZW0pOworCQlyZXR1cm47CisJfQogCWRvd24oJmNvbnNvbGVfc2VtKTsKIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAxOwpAQCAtNzUwLDYgKzc3MiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgX2Nvbl9zdGFydCwgX2xvZ19lbmQ7CiAJdW5zaWduZWQgbG9uZyB3YWtlX2tsb2dkID0gMDsKIAorCWlmIChjb25zb2xlX3N1c3BlbmRlZCkgeworCQl1cCgmc2Vjb25kYXJ5X2NvbnNvbGVfc2VtKTsKKwkJcmV0dXJuOworCX0KIAlmb3IgKCA7IDsgKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCQl3YWtlX2tsb2dkIHw9IGxvZ19zdGFydCAtIGxvZ19lbmQ7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4MTg0MzQyLi43OTdlZWYzIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTE3ODAsNiArMTc4MCw3IEBACiAJaWYgKCFzaW1wbGVfZW1wdHkoZGVudHJ5KSkKIAkJcmV0dXJuIC1FTk9URU1QVFk7CiAKKwlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKIAlkaXItPmlfbmxpbmstLTsKIAlyZXR1cm4gc2htZW1fdW5saW5rKGRpciwgZGVudHJ5KTsKIH0KQEAgLTIxMDIsNiArMjEwMyw3IEBACiAJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOwogCXNiLT5zX21hZ2ljID0gVE1QRlNfTUFHSUM7CiAJc2ItPnNfb3AgPSAmc2htZW1fb3BzOworCXNiLT5zX3RpbWVfZ3JhbiA9IDE7CiAKIAlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IG1vZGUsIDApOwogCWlmICghaW5vZGUpCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDQ2NDlhNjMuLjQ0MGE3MzMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogbG9vcF9hZ2FpbjoKIAl0b3RhbF9zY2FubmVkID0gMDsKIAlucl9yZWNsYWltZWQgPSAwOwotCXNjLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGUsCisJc2MubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZTsKIAlzYy5ucl9tYXBwZWQgPSByZWFkX3BhZ2Vfc3RhdGUobnJfbWFwcGVkKTsKIAogCWluY19wYWdlX3N0YXRlKHBhZ2VvdXRydW4pOwpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCA0MTkzY2RjLi5jNmNlYzVhIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtNjYsNiArNjYsMTMgQEAKIAogZW5kaWYgIyBpZiBJTkVUCiAKK2NvbmZpZyBORVRXT1JLX1NFQ01BUksKKwlib29sICJTZWN1cml0eSBNYXJraW5nIgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzZWN1cml0eSBtYXJraW5nIG9mIG5ldHdvcmsgcGFja2V0cywgc2ltaWxhcgorCSAgdG8gbmZtYXJrLCBidXQgZGVzaWduYXRlZCBmb3Igc2VjdXJpdHkgcHVycG9zZXMuCisJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgorCiBtZW51Y29uZmlnIE5FVEZJTFRFUgogCWJvb2wgIk5ldHdvcmsgcGFja2V0IGZpbHRlcmluZyAocmVwbGFjZXMgaXBjaGFpbnMpIgogCS0tLWhlbHAtLS0KQEAgLTIxNSw2ICsyMjIsMjEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwa3RnZW4uCiAKK2NvbmZpZyBORVRfVENQUFJPQkUKKwl0cmlzdGF0ZSAiVENQIGNvbm5lY3Rpb24gcHJvYmluZyIKKwlkZXBlbmRzIG9uIElORVQgJiYgRVhQRVJJTUVOVEFMICYmIFBST0NfRlMgJiYgS1BST0JFUworCS0tLWhlbHAtLS0KKwlUaGlzIG1vZHVsZSBhbGxvd3MgZm9yIGNhcHR1cmluZyB0aGUgY2hhbmdlcyB0byBUQ1AgY29ubmVjdGlvbgorCXN0YXRlIGluIHJlc3BvbnNlIHRvIGluY29taW5nIHBhY2tldHMuIEl0IGlzIHVzZWQgZm9yIGRlYnVnZ2luZworCVRDUCBjb25nZXN0aW9uIGF2b2lkYW5jZSBtb2R1bGVzLiBJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZAorCXdoYXQgd2FzIGp1c3Qgc2FpZCwgeW91IGRvbid0IG5lZWQgaXQ6IHNheSBOLgorCisJRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIGNhbiBiZSBmb3VuZAorCWF0IGh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL1RjcFByb2JlCisKKwlUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRjcF9wcm9iZS4KKwogZW5kbWVudQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IDcyZDg1MjkuLmY5MmY5YzkgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC05OCw3ICs5OCw3IEBACiAJCXByaW50ayhLRVJOX0NSSVQgIiFjbGlwX3ZjYy0+ZW50cnkgKGNsaXBfdmNjICVwKVxuIiwgY2xpcF92Y2MpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fbG9ja19iaCgmZW50cnktPm5laWdoLT5kZXYtPnhtaXRfbG9jayk7CS8qIGJsb2NrIGNsaXBfc3RhcnRfeG1pdCgpICovCisJbmV0aWZfdHhfbG9ja19iaChlbnRyeS0+bmVpZ2gtPmRldik7CS8qIGJsb2NrIGNsaXBfc3RhcnRfeG1pdCgpICovCiAJZW50cnktPm5laWdoLT51c2VkID0gamlmZmllczsKIAlmb3IgKHdhbGsgPSAmZW50cnktPnZjY3M7ICp3YWxrOyB3YWxrID0gJigqd2FsayktPm5leHQpCiAJCWlmICgqd2FsayA9PSBjbGlwX3ZjYykgewpAQCAtMTIyLDcgKzEyMiw3IEBACiAJcHJpbnRrKEtFUk5fQ1JJVCAiQVRNQVJQOiB1bmxpbmtfY2xpcF92Y2MgZmFpbGVkIChlbnRyeSAlcCwgdmNjICIKIAkgICAgICAgIjB4JXApXG4iLCBlbnRyeSwgY2xpcF92Y2MpOwogICAgICAgb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZlbnRyeS0+bmVpZ2gtPmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZW50cnktPm5laWdoLT5kZXYpOwogfQogCiAvKiBUaGUgbmVpZ2hib3VyIGVudHJ5IG4tPmxvY2sgaXMgaGVsZC4gKi8KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvTWFrZWZpbGUgYi9uZXQvYnJpZGdlL01ha2VmaWxlCmluZGV4IDU5NTU2ZTQuLmY0NDRjMTIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvTWFrZWZpbGUKKysrIGIvbmV0L2JyaWRnZS9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogYnJpZGdlLXkJOj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFwKIAkJCWJyX2lvY3RsLm8gYnJfbm90aWZ5Lm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcCi0JCQlicl9zdHBfaWYubyBicl9zdHBfdGltZXIubworCQkJYnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vCiAKIGJyaWRnZS0kKENPTkZJR19TWVNGUykgKz0gYnJfc3lzZnNfaWYubyBicl9zeXNmc19ici5vCiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnIuYyBiL25ldC9icmlkZ2UvYnIuYwppbmRleCAxMmRhMjFhLi42NTQ0MDFjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyLmMKKysrIGIvbmV0L2JyaWRnZS9ici5jCkBAIC0zMCwzNiArMzAsNDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgYnJfaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKIAlicl9zdHBfc2FwID0gbGxjX3NhcF9vcGVuKExMQ19TQVBfQlNQQU4sIGJyX3N0cF9yY3YpOwogCWlmICghYnJfc3RwX3NhcCkgewogCQlwcmludGsoS0VSTl9FUlIgImJyaWRnZTogY2FuJ3QgcmVnaXN0ZXIgc2FwIGZvciBTVFBcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJfQogCiAJYnJfZmRiX2luaXQoKTsKIAotI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCi0JaWYgKGJyX25ldGZpbHRlcl9pbml0KCkpCi0JCXJldHVybiAxOwotI2VuZGlmCisJZXJyID0gYnJfbmV0ZmlsdGVyX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQxOworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZicl9kZXZpY2Vfbm90aWZpZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDI7CisKKwlicl9uZXRsaW5rX2luaXQoKTsKIAlicmlvY3RsX3NldChicl9pb2N0bF9kZXZpY2VsZXNzX3N0dWIpOwogCWJyX2hhbmRsZV9mcmFtZV9ob29rID0gYnJfaGFuZGxlX2ZyYW1lOwogCiAJYnJfZmRiX2dldF9ob29rID0gYnJfZmRiX2dldDsKIAlicl9mZGJfcHV0X2hvb2sgPSBicl9mZGJfcHV0OwogCi0JcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZicl9kZXZpY2Vfbm90aWZpZXIpOwotCiAJcmV0dXJuIDA7CisKK2Vycl9vdXQyOgorCWJyX25ldGZpbHRlcl9maW5pKCk7CitlcnJfb3V0MToKKwlsbGNfc2FwX3B1dChicl9zdHBfc2FwKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYnJfZGVpbml0KHZvaWQpCiB7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGJyX3N0cF9zYXAtPnJjdl9mdW5jLCBOVUxMKTsKIAotI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCisJYnJfbmV0bGlua19maW5pKCk7CiAJYnJfbmV0ZmlsdGVyX2ZpbmkoKTsKLSNlbmRpZgogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZicl9kZXZpY2Vfbm90aWZpZXIpOwogCWJyaW9jdGxfc2V0KE5VTEwpOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCAwYzg4YTJhLi4yYWZkYzdjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTE0NSw5ICsxNDUsOSBAQAogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoZGF0YSkKLQkJYnItPmZlYXR1cmVfbWFzayB8PSBORVRJRl9GX0lQX0NTVU07CisJCWJyLT5mZWF0dXJlX21hc2sgfD0gTkVUSUZfRl9OT19DU1VNOwogCWVsc2UKLQkJYnItPmZlYXR1cmVfbWFzayAmPSB+TkVUSUZfRl9JUF9DU1VNOworCQlici0+ZmVhdHVyZV9tYXNrICY9IH5ORVRJRl9GX0FMTF9DU1VNOwogCiAJYnJfZmVhdHVyZXNfcmVjb21wdXRlKGJyKTsKIAlyZXR1cm4gMDsKQEAgLTE4NSw1ICsxODUsNSBAQAogCWRldi0+cHJpdl9mbGFncyA9IElGRl9FQlJJREdFOwogCiAgCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVAotIAkJfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSVBfQ1NVTTsKKyAJCXwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX05PX0NTVU07CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCmluZGV4IDU2ZjNhYTQuLjBkY2EwMjcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCisrKyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCkBAIC0yMCwxNCArMjAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg+CiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgogCisvKiBEb24ndCBmb3J3YXJkIHBhY2tldHMgdG8gb3JpZ2luYXRpbmcgcG9ydCBvciBmb3J3YXJkaW5nIGRpYXNhYmxlZCAqLwogc3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgCiAJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHNrYi0+ZGV2ID09IHAtPmRldiB8fAotCSAgICBwLT5zdGF0ZSAhPSBCUl9TVEFURV9GT1JXQVJESU5HKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOworCXJldHVybiAoc2tiLT5kZXYgIT0gcC0+ZGV2ICYmIHAtPnN0YXRlID09IEJSX1NUQVRFX0ZPUldBUkRJTkcpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBhY2tldF9sZW5ndGgoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTU1LDEwICs1Miw5IEBACiAKIGludCBicl9mb3J3YXJkX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCU5GX0hPT0soUEZfQlJJREdFLCBORl9CUl9QT1NUX1JPVVRJTkcsIHNrYiwgTlVMTCwgc2tiLT5kZXYsCi0JCQlicl9kZXZfcXVldWVfcHVzaF94bWl0KTsKKwlyZXR1cm4gTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX1BPU1RfUk9VVElORywgc2tiLCBOVUxMLCBza2ItPmRldiwKKwkJICAgICAgIGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpOwogCi0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fYnJfZGVsaXZlcihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0bywgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCBmNWQ0N2JmLi5mZGVjNzczIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zNzIsMTIgKzM3MiwxNyBAQAogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJdW5zaWduZWQgbG9uZyBmZWF0dXJlcywgY2hlY2tzdW07CiAKLQlmZWF0dXJlcyA9IGJyLT5mZWF0dXJlX21hc2sgJn4gTkVUSUZfRl9JUF9DU1VNOwotCWNoZWNrc3VtID0gYnItPmZlYXR1cmVfbWFzayAmIE5FVElGX0ZfSVBfQ1NVTTsKKwljaGVja3N1bSA9IGJyLT5mZWF0dXJlX21hc2sgJiBORVRJRl9GX0FMTF9DU1VNID8gTkVUSUZfRl9OT19DU1VNIDogMDsKKwlmZWF0dXJlcyA9IGJyLT5mZWF0dXJlX21hc2sgJiB+TkVUSUZfRl9BTExfQ1NVTTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmJyLT5wb3J0X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCEocC0+ZGV2LT5mZWF0dXJlcyAKLQkJICAgICAgJiAoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfTk9fQ1NVTXxORVRJRl9GX0hXX0NTVU0pKSkKKwkJaWYgKGNoZWNrc3VtICYgTkVUSUZfRl9OT19DU1VNICYmCisJCSAgICAhKHAtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pKQorCQkJY2hlY2tzdW0gXj0gTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9IV19DU1VNOworCQlpZiAoY2hlY2tzdW0gJiBORVRJRl9GX0hXX0NTVU0gJiYKKwkJICAgICEocC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkpCisJCQljaGVja3N1bSBePSBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX0lQX0NTVU07CisJCWlmICghKHAtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pKQogCQkJY2hlY2tzdW0gPSAwOwogCQlmZWF0dXJlcyAmPSBwLT5kZXYtPmZlYXR1cmVzOwogCX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IDNkYTkyNjQuLjNlNDFmOWQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNDA3LDEyICs0MDcsOCBAQAogCWlmIChwa3RfbGVuIHx8IGhkci0+bmV4dGhkciAhPSBORVhUSERSX0hPUCkgewogCQlpZiAocGt0X2xlbiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgPiBza2ItPmxlbikKIAkJCWdvdG8gaW5oZHJfZXJyb3I7Ci0JCWlmIChwa3RfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSA8IHNrYi0+bGVuKSB7Ci0JCQlpZiAoX19wc2tiX3RyaW0oc2tiLCBwa3RfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCi0JCQkJZ290byBpbmhkcl9lcnJvcjsKLQkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCX0KKwkJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHBrdF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKKwkJCWdvdG8gaW5oZHJfZXJyb3I7CiAJfQogCWlmIChoZHItPm5leHRoZHIgPT0gTkVYVEhEUl9IT1AgJiYgY2hlY2tfaGJoX2xlbihza2IpKQogCQlnb3RvIGluaGRyX2Vycm9yOwpAQCAtNDk1LDExICs0OTEsNyBAQAogCWlmIChza2ItPmxlbiA8IGxlbiB8fCBsZW4gPCA0ICogaXBoLT5paGwpCiAJCWdvdG8gaW5oZHJfZXJyb3I7CiAKLQlpZiAoc2tiLT5sZW4gPiBsZW4pIHsKLQkJX19wc2tiX3RyaW0oc2tiLCBsZW4pOwotCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpCi0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JfQorCXBza2JfdHJpbV9yY3N1bShza2IsIGxlbik7CiAKIAluZl9icmlkZ2VfcHV0KHNrYi0+bmZfYnJpZGdlKTsKIAlpZiAoIW5mX2JyaWRnZV9hbGxvYyhza2IpKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODFkN2QxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKglCcmlkZ2UgbmV0bGluayBjb250cm9sIGludGVyZmFjZQorICoKKyAqCUF1dGhvcnM6CisgKglTdGVwaGVuIEhlbW1pbmdlcgkJPHNoZW1taW5nZXJAb3NkbC5vcmc+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgorCisvKgorICogQ3JlYXRlIG9uZSBuZXRsaW5rIG1lc3NhZ2UgZm9yIG9uZSBpbnRlcmZhY2UKKyAqIENvbnRhaW5zIHBvcnQgYW5kIG1hc3RlciBpbmZvIGFzIHdlbGwgYXMgY2FycmllciBhbmQgYnJpZGdlIHN0YXRlLgorICovCitzdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCQkgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtPmJyOworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7CisJc3RydWN0IGlmaW5mb21zZyAqcjsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwl1bnNpZ25lZCBjaGFyICpiID0gc2tiLT50YWlsOworCXUzMiBtdHUgPSBkZXYtPm10dTsKKwl1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBkZXYtPm9wZXJzdGF0ZSA6IElGX09QRVJfRE9XTjsKKwl1OCBwb3J0c3RhdGUgPSBwb3J0LT5zdGF0ZTsKKworCXByX2RlYnVnKCJicl9maWxsX2luZm8gZXZlbnQgJWQgcG9ydCAlcyBtYXN0ZXIgJXNcbiIsCisJCSBldmVudCwgZGV2LT5uYW1lLCBici0+ZGV2LT5uYW1lKTsKKworCW5saCA9IE5MTVNHX05FVyhza2IsIHBpZCwgc2VxLCBldmVudCwgc2l6ZW9mKCpyKSwgZmxhZ3MpOworCXIgPSBOTE1TR19EQVRBKG5saCk7CisJci0+aWZpX2ZhbWlseSA9IEFGX0JSSURHRTsKKwlyLT5fX2lmaV9wYWQgPSAwOworCXItPmlmaV90eXBlID0gZGV2LT50eXBlOworCXItPmlmaV9pbmRleCA9IGRldi0+aWZpbmRleDsKKwlyLT5pZmlfZmxhZ3MgPSBkZXZfZ2V0X2ZsYWdzKGRldik7CisJci0+aWZpX2NoYW5nZSA9IDA7CisKKwlSVEFfUFVUKHNrYiwgSUZMQV9JRk5BTUUsIHN0cmxlbihkZXYtPm5hbWUpKzEsIGRldi0+bmFtZSk7CisKKwlSVEFfUFVUKHNrYiwgSUZMQV9NQVNURVIsIHNpemVvZihpbnQpLCAmYnItPmRldi0+aWZpbmRleCk7CisKKwlpZiAoZGV2LT5hZGRyX2xlbikKKwkJUlRBX1BVVChza2IsIElGTEFfQUREUkVTUywgZGV2LT5hZGRyX2xlbiwgZGV2LT5kZXZfYWRkcik7CisKKwlSVEFfUFVUKHNrYiwgSUZMQV9NVFUsIHNpemVvZihtdHUpLCAmbXR1KTsKKwlpZiAoZGV2LT5pZmluZGV4ICE9IGRldi0+aWZsaW5rKQorCQlSVEFfUFVUKHNrYiwgSUZMQV9MSU5LLCBzaXplb2YoaW50KSwgJmRldi0+aWZsaW5rKTsKKworCisJUlRBX1BVVChza2IsIElGTEFfT1BFUlNUQVRFLCBzaXplb2Yob3BlcnN0YXRlKSwgJm9wZXJzdGF0ZSk7CisKKwlpZiAoZXZlbnQgPT0gUlRNX05FV0xJTkspCisJCVJUQV9QVVQoc2tiLCBJRkxBX1BST1RJTkZPLCBzaXplb2YocG9ydHN0YXRlKSwgJnBvcnRzdGF0ZSk7CisKKwlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIGI7CisKKwlyZXR1cm4gc2tiLT5sZW47CisKK25sbXNnX2ZhaWx1cmU6CitydGF0dHJfZmFpbHVyZToKKworCXNrYl90cmltKHNrYiwgYiAtIHNrYi0+ZGF0YSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBOb3RpZnkgbGlzdGVuZXJzIG9mIGEgY2hhbmdlIGluIHBvcnQgaW5mb3JtYXRpb24KKyAqLwordm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnIgPSAtRU5PTUVNOworCisJcHJfZGVidWcoImJyaWRnZSBub3RpZnkgZXZlbnQ9JWRcbiIsIGV2ZW50KTsKKwlza2IgPSBhbGxvY19za2IoTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpICsgMTI4KSwKKwkJCUdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIGN1cnJlbnQtPnBpZCwgMCwgZXZlbnQsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2tmcmVlOworCisJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IFJUTkxHUlBfTElOSzsKKwluZXRsaW5rX2Jyb2FkY2FzdChydG5sLCBza2IsIDAsIFJUTkxHUlBfTElOSywgR0ZQX0FUT01JQyk7CisJcmV0dXJuOworCitlcnJfa2ZyZWU6CisJa2ZyZWVfc2tiKHNrYik7CitlcnJfb3V0OgorCW5ldGxpbmtfc2V0X2VycihydG5sLCAwLCBSVE5MR1JQX0xJTkssIGVycik7Cit9CisKKy8qCisgKiBEdW1wIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwb3J0cywgaW4gcmVzcG9uc2UgdG8gR0VUTElOSworICovCitzdGF0aWMgaW50IGJyX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpZHg7CisJaW50IHNfaWR4ID0gY2ItPmFyZ3NbMF07CisJaW50IGVyciA9IDA7CisKKwlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOworCWZvciAoZGV2ID0gZGV2X2Jhc2UsIGlkeCA9IDA7IGRldjsgZGV2ID0gZGV2LT5uZXh0KSB7CisJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBkZXYtPmJyX3BvcnQ7CisKKwkJLyogbm90IGEgYnJpZGdlIHBvcnQgKi8KKwkJaWYgKCFwKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkeCA8IHNfaWR4KQorCQkJY29udGludWU7CisKKwkJZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKKwkJCQkgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV0xJTkssIE5MTV9GX01VTFRJKTsKKwkJaWYgKGVyciA8PSAwKQorCQkJYnJlYWs7CisJCSsraWR4OworCX0KKwlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CisKKwljYi0+YXJnc1swXSA9IGlkeDsKKworCXJldHVybiBza2ItPmxlbjsKK30KKworLyoKKyAqIENoYW5nZSBzdGF0ZSBvZiBwb3J0IChpZSBmcm9tIGZvcndhcmRpbmcgdG8gYmxvY2tpbmcgZXRjKQorICogVXNlZCBieSBzcGFubmluZyB0cmVlIGluIHVzZXIgc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgYnJfcnRtX3NldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCit7CisJc3RydWN0IHJ0YXR0ciAgKipydGEgPSBhcmc7CisJc3RydWN0IGlmaW5mb21zZyAqaWZtID0gTkxNU0dfREFUQShubGgpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKKwl1OCBuZXdfc3RhdGU7CisKKwlpZiAoaWZtLT5pZmlfZmFtaWx5ICE9IEFGX0JSSURHRSkKKwkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CisKKwkvKiBNdXN0IHBhc3MgdmFsaWQgc3RhdGUgYXMgUFJPVElORk8gKi8KKwlpZiAocnRhW0lGTEFfUFJPVElORk8tMV0pIHsKKwkJdTggKnBzdGF0ZSA9IFJUQV9EQVRBKHJ0YVtJRkxBX1BST1RJTkZPLTFdKTsKKwkJbmV3X3N0YXRlID0gKnBzdGF0ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV3X3N0YXRlID4gQlJfU1RBVEVfQkxPQ0tJTkcpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmluZCBicmlkZ2UgcG9ydCAqLworCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleChpZm0tPmlmaV9pbmRleCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcCA9IGRldi0+YnJfcG9ydDsKKwlpZiAoIXApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaWYga2VybmVsIFNUUCBpcyBydW5uaW5nLCBkb24ndCBhbGxvdyBjaGFuZ2VzICovCisJaWYgKHAtPmJyLT5zdHBfZW5hYmxlZCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikgJiYgbmV3X3N0YXRlICE9IEJSX1NUQVRFX0RJU0FCTEVEKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJcC0+c3RhdGUgPSBuZXdfc3RhdGU7CisJYnJfbG9nX3N0YXRlKHApOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsgYnJpZGdlX3J0bmV0bGlua190YWJsZVtSVE1fTlJfTVNHVFlQRVNdID0geworCVtSVE1fR0VUTElOSyAtIFJUTV9CQVNFXSA9IHsgLmR1bXBpdAk9IGJyX2R1bXBfaWZpbmZvLCB9LAorCVtSVE1fU0VUTElOSyAtIFJUTV9CQVNFXSA9IHsgLmRvaXQgICAgICA9IGJyX3J0bV9zZXRsaW5rLCB9LAorfTsKKwordm9pZCBfX2luaXQgYnJfbmV0bGlua19pbml0KHZvaWQpCit7CisJcnRuZXRsaW5rX2xpbmtzW1BGX0JSSURHRV0gPSBicmlkZ2VfcnRuZXRsaW5rX3RhYmxlOworfQorCit2b2lkIF9fZXhpdCBicl9uZXRsaW5rX2Zpbmkodm9pZCkKK3sKKwlydG5ldGxpbmtfbGlua3NbUEZfQlJJREdFXSA9IE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMgYi9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCmluZGV4IGE0M2E5YzEuLjIwMjc4NDkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKKysrIGIvbmV0L2JyaWRnZS9icl9ub3RpZnkuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KIAogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKIApAQCAtNDksNiArNTAsNyBAQAogCiAJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKIAkJYnJfZmRiX2NoYW5nZWFkZHIocCwgZGV2LT5kZXZfYWRkcik7CisJCWJyX2lmaW5mb19ub3RpZnkoUlRNX05FV0xJTkssIHApOwogCQlicl9zdHBfcmVjYWxjdWxhdGVfYnJpZGdlX2lkKGJyKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggODZlY2VhNy4uYzQ5MWZiMiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2RlZmluZSBCUl9QT1JUX0RFQk9VTkNFIChIWi8xMCkKIAotI2RlZmluZSBCUl9WRVJTSU9OCSIyLjEiCisjZGVmaW5lIEJSX1ZFUlNJT04JIjIuMiIKIAogdHlwZWRlZiBzdHJ1Y3QgYnJpZGdlX2lkIGJyaWRnZV9pZDsKIHR5cGVkZWYgc3RydWN0IG1hY19hZGRyIG1hY19hZGRyOwpAQCAtMTkyLDggKzE5MiwxMyBAQAogZXh0ZXJuIGludCBicl9pb2N0bF9kZXZpY2VsZXNzX3N0dWIodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiAKIC8qIGJyX25ldGZpbHRlci5jICovCisjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIGV4dGVybiBpbnQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBicl9uZXRmaWx0ZXJfZmluaSh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIGJyX25ldGZpbHRlcl9pbml0KCkJKDApCisjZGVmaW5lIGJyX25ldGZpbHRlcl9maW5pKCkJZG8geyB9IHdoaWxlKDApCisjZW5kaWYKIAogLyogYnJfc3RwLmMgKi8KIGV4dGVybiB2b2lkIGJyX2xvZ19zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTsKQEAgLTIzMiw2ICsyMzcsMTEgQEAKIGV4dGVybiB2b2lkICgqYnJfZmRiX3B1dF9ob29rKShzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmVudCk7CiAKIAorLyogYnJfbmV0bGluay5jICovCitleHRlcm4gdm9pZCBicl9uZXRsaW5rX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBicl9uZXRsaW5rX2Zpbmkodm9pZCk7CitleHRlcm4gdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7CisKICNpZmRlZiBDT05GSUdfU1lTRlMKIC8qIGJyX3N5c2ZzX2lmLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgc3lzZnNfb3BzIGJycG9ydF9zeXNmc19vcHM7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jIGIvbmV0L2JyaWRnZS9icl9zdHBfaWYuYwppbmRleCAyM2RlYTE0Li4xNGNkMDI1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAKICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZV9zdHAuaCIKQEAgLTg2LDYgKzg3LDcgQEAKIHZvaWQgYnJfc3RwX2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApCiB7CiAJYnJfaW5pdF9wb3J0KHApOworCWJyX2lmaW5mb19ub3RpZnkoUlRNX05FV0xJTkssIHApOwogCWJyX3BvcnRfc3RhdGVfc2VsZWN0aW9uKHAtPmJyKTsKIH0KIApAQCAtOTksNiArMTAxLDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogcG9ydCAlaSglcykgZW50ZXJpbmcgJXMgc3RhdGVcbiIsCiAJICAgICAgIGJyLT5kZXYtPm5hbWUsIHAtPnBvcnRfbm8sIHAtPmRldi0+bmFtZSwgImRpc2FibGVkIik7CiAKKwlicl9pZmluZm9fbm90aWZ5KFJUTV9ERUxMSU5LLCBwKTsKKwogCXdhc3Jvb3QgPSBicl9pc19yb290X2JyaWRnZShicik7CiAJYnJfYmVjb21lX2Rlc2lnbmF0ZWRfcG9ydChwKTsKIAlwLT5zdGF0ZSA9IEJSX1NUQVRFX0RJU0FCTEVEOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCA3OWZlMTJjLi5lOWJkMjQ2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQorKysgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtMTYsMyArMTYsNCBAQAogb2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICs9IHBrdGdlbi5vCiBvYmotJChDT05GSUdfV0lSRUxFU1NfRVhUKSArPSB3aXJlbGVzcy5vCiBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vCitvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gdXNlcl9kbWEubwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA0ZmJhNTQ5Li5hYjM5ZmUxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAKIC8qCiAgKglUaGUgbGlzdCBvZiBwYWNrZXQgdHlwZXMgd2Ugd2lsbCByZWNlaXZlIChhcyBvcHBvc2VkIHRvIGRpc2NhcmQpCkBAIC0xNDgsNiArMTQ5LDEyIEBACiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBwdHlwZV9iYXNlWzE2XTsJLyogMTYgd2F5IGhhc2hlZCBsaXN0ICovCiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBwdHlwZV9hbGw7CQkvKiBUYXBzICovCiAKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorc3RhdGljIHN0cnVjdCBkbWFfY2xpZW50ICpuZXRfZG1hX2NsaWVudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmV0X2RtYV9jb3VudDsKK3N0YXRpYyBzcGlubG9ja190IG5ldF9kbWFfZXZlbnRfbG9jazsKKyNlbmRpZgorCiAvKgogICogVGhlIEBkZXZfYmFzZSBsaXN0IGlzIHByb3RlY3RlZCBieSBAZGV2X2Jhc2VfbG9jayBhbmQgdGhlIHJ0bmwKICAqIHNlbWFwaG9yZS4KQEAgLTEyMTUsNzUgKzEyMjIsMTUgQEAKICNkZWZpbmUgaWxsZWdhbF9oaWdoZG1hKGRldiwgc2tiKQkoMCkKICNlbmRpZgogCi0vKiBLZWVwIGhlYWQgdGhlIHNhbWU6IHJlcGxhY2UgZGF0YSAqLwotaW50IF9fc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaykKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQl1OCAqZGF0YTsKLQlsb25nIG9mZnNldDsKLQlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpuaW5mbzsKLQlpbnQgaGVhZGVybGVuID0gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwotCWludCBleHBhbmQgPSAoc2tiLT50YWlsICsgc2tiLT5kYXRhX2xlbikgLSBza2ItPmVuZDsKLQotCWlmIChza2Jfc2hhcmVkKHNrYikpCi0JCUJVRygpOwotCi0JaWYgKGV4cGFuZCA8PSAwKQotCQlleHBhbmQgPSAwOwotCi0Jc2l6ZSA9IHNrYi0+ZW5kIC0gc2tiLT5oZWFkICsgZXhwYW5kOwotCXNpemUgPSBTS0JfREFUQV9BTElHTihzaXplKTsKLQlkYXRhID0ga21hbGxvYyhzaXplICsgc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pLCBnZnBfbWFzayk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIENvcHkgZW50aXJlIHRoaW5nICovCi0JaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCAtaGVhZGVybGVuLCBkYXRhLCBoZWFkZXJsZW4gKyBza2ItPmxlbikpCi0JCUJVRygpOwotCi0JLyogU2V0IHVwIHNoaW5mbyAqLwotCW5pbmZvID0gKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8qKShkYXRhICsgc2l6ZSk7Ci0JYXRvbWljX3NldCgmbmluZm8tPmRhdGFyZWYsIDEpOwotCW5pbmZvLT50c29fc2l6ZSA9IHNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemU7Ci0JbmluZm8tPnRzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2VnczsKLQluaW5mby0+bnJfZnJhZ3MgPSAwOwotCW5pbmZvLT5mcmFnX2xpc3QgPSBOVUxMOwotCi0JLyogT2Zmc2V0IGJldHdlZW4gdGhlIHR3byBpbiBieXRlcyAqLwotCW9mZnNldCA9IGRhdGEgLSBza2ItPmhlYWQ7Ci0KLQkvKiBGcmVlIG9sZCBkYXRhLiAqLwotCXNrYl9yZWxlYXNlX2RhdGEoc2tiKTsKLQotCXNrYi0+aGVhZCA9IGRhdGE7Ci0Jc2tiLT5lbmQgID0gZGF0YSArIHNpemU7Ci0KLQkvKiBTZXQgdXAgbmV3IHBvaW50ZXJzICovCi0Jc2tiLT5oLnJhdyAgICs9IG9mZnNldDsKLQlza2ItPm5oLnJhdyAgKz0gb2Zmc2V0OwotCXNrYi0+bWFjLnJhdyArPSBvZmZzZXQ7Ci0Jc2tiLT50YWlsICAgICs9IG9mZnNldDsKLQlza2ItPmRhdGEgICAgKz0gb2Zmc2V0OwotCi0JLyogV2UgYXJlIG5vIGxvbmdlciBhIGNsb25lLCBldmVuIGlmIHdlIHdlcmUuICovCi0Jc2tiLT5jbG9uZWQgICAgPSAwOwotCi0Jc2tiLT50YWlsICAgICArPSBza2ItPmRhdGFfbGVuOwotCXNrYi0+ZGF0YV9sZW4gID0gMDsKLQlyZXR1cm4gMDsKLX0KLQogI2RlZmluZSBIQVJEX1RYX0xPQ0soZGV2LCBjcHUpIHsJCQlcCiAJaWYgKChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MTFRYKSA9PSAwKSB7CVwKLQkJc3Bpbl9sb2NrKCZkZXYtPnhtaXRfbG9jayk7CQlcCi0JCWRldi0+eG1pdF9sb2NrX293bmVyID0gY3B1OwkJXAorCQluZXRpZl90eF9sb2NrKGRldik7CQkJXAogCX0JCQkJCQlcCiB9CiAKICNkZWZpbmUgSEFSRF9UWF9VTkxPQ0soZGV2KSB7CQkJCVwKIAlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xMVFgpID09IDApIHsJXAotCQlkZXYtPnhtaXRfbG9ja19vd25lciA9IC0xOwkJXAotCQlzcGluX3VubG9jaygmZGV2LT54bWl0X2xvY2spOwkJXAorCQluZXRpZl90eF91bmxvY2soZGV2KTsJCQlcCiAJfQkJCQkJCVwKIH0KIApAQCAtMTMyMSw3ICsxMjY4LDcgQEAKIAogCWlmIChza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdCAmJgogCSAgICAhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0ZSQUdMSVNUKSAmJgotCSAgICBfX3NrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSkKKwkgICAgX19za2JfbGluZWFyaXplKHNrYikpCiAJCWdvdG8gb3V0X2tmcmVlX3NrYjsKIAogCS8qIEZyYWdtZW50ZWQgc2tiIGlzIGxpbmVhcml6ZWQgaWYgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgU0csCkBAIC0xMzMwLDE0ICsxMjc3LDE0IEBACiAJICovCiAJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgJiYKIAkgICAgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cpIHx8IGlsbGVnYWxfaGlnaGRtYShkZXYsIHNrYikpICYmCi0JICAgIF9fc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpKQorCSAgICBfX3NrYl9saW5lYXJpemUoc2tiKSkKIAkJZ290byBvdXRfa2ZyZWVfc2tiOwogCiAJLyogSWYgcGFja2V0IGlzIG5vdCBjaGVja3N1bW1lZCBhbmQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQKIAkgKiBjaGVja3N1bW1pbmcgZm9yIHRoaXMgcHJvdG9jb2wsIGNvbXBsZXRlIGNoZWNrc3VtbWluZyBoZXJlLgogCSAqLwogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyAmJgotCSAgICAoIShkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfTk9fQ1NVTSkpICYmCisJICAgICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dFTl9DU1VNKSAmJgogCSAgICAgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkgfHwKIAkgICAgICBza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSkpKQogCSAgICAgIAlpZiAoc2tiX2NoZWNrc3VtX2hlbHAoc2tiLCAwKSkKQEAgLTEzODIsOCArMTMyOSw4IEBACiAJLyogVGhlIGRldmljZSBoYXMgbm8gcXVldWUuIENvbW1vbiBjYXNlIGZvciBzb2Z0d2FyZSBkZXZpY2VzOgogCSAgIGxvb3BiYWNrLCBhbGwgdGhlIHNvcnRzIG9mIHR1bm5lbHMuLi4KIAotCSAgIFJlYWxseSwgaXQgaXMgdW5saWtlbHkgdGhhdCB4bWl0X2xvY2sgcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgaGVyZS4KLQkgICAoZi5lLiBsb29wYmFjayBhbmQgSVAgdHVubmVscyBhcmUgY2xlYW4gaWdub3Jpbmcgc3RhdGlzdGljcworCSAgIFJlYWxseSwgaXQgaXMgdW5saWtlbHkgdGhhdCBuZXRpZl90eF9sb2NrIHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5CisJICAgaGVyZS4gIChmLmUuIGxvb3BiYWNrIGFuZCBJUCB0dW5uZWxzIGFyZSBjbGVhbiBpZ25vcmluZyBzdGF0aXN0aWNzCiAJICAgY291bnRlcnMuKQogCSAgIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlLCB0aGF0IHRoZXkgcmVseSBvbiBwcm90ZWN0aW9uCiAJICAgbWFkZSBieSB1cyBoZXJlLgpAQCAtMTg0Niw2ICsxNzkzLDE5IEBACiAJCX0KIAl9CiBvdXQ6CisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwkvKgorCSAqIFRoZXJlIG1heSBub3QgYmUgYW55IG1vcmUgc2tfYnVmZnMgY29taW5nIHJpZ2h0IG5vdywgc28gcHVzaAorCSAqIGFueSBwZW5kaW5nIERNQSBjb3BpZXMgdG8gaGFyZHdhcmUKKwkgKi8KKwlpZiAobmV0X2RtYV9jbGllbnQpIHsKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNoYW4sICZuZXRfZG1hX2NsaWVudC0+Y2hhbm5lbHMsIGNsaWVudF9ub2RlKQorCQkJZG1hX2FzeW5jX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisjZW5kaWYKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcmV0dXJuOwogCkBAIC0yNzg1LDcgKzI3NDUsNyBAQAogCUJVR19PTihkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5JTklUSUFMSVpFRCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2LT54bWl0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXYtPl94bWl0X2xvY2spOwogCWRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+aW5ncmVzc19sb2NrKTsKQEAgLTI4MjksOSArMjc4OSw3IEBACiAKIAkvKiBGaXggaWxsZWdhbCBTRytDU1VNIGNvbWJpbmF0aW9ucy4gKi8KIAlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJgotCSAgICAhKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNIHwKLQkJCSAgICAgICBORVRJRl9GX05PX0NTVU0gfAotCQkJICAgICAgIE5FVElGX0ZfSFdfQ1NVTSkpKSB7CisJICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKSB7CiAJCXByaW50aygiJXM6IERyb3BwaW5nIE5FVElGX0ZfU0cgc2luY2Ugbm8gY2hlY2tzdW0gZmVhdHVyZS5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwpAQCAtMzMwMCw2ICszMjU4LDg4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorLyoqCisgKiBuZXRfZG1hX3JlYmFsYW5jZSAtCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgYWxsb2NhdGVkIHRvIHRoZSBuZXRfZG1hX2NsaWVudAorICogY2hhbmdlcy4gIFRoZSBuZXRfZG1hX2NsaWVudCB0cmllcyB0byBoYXZlIG9uZSBETUEgY2hhbm5lbCBwZXIgQ1BVLgorICovCitzdGF0aWMgdm9pZCBuZXRfZG1hX3JlYmFsYW5jZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHUsIGksIG47CisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCisJbG9ja19jcHVfaG90cGx1ZygpOworCisJaWYgKG5ldF9kbWFfY291bnQgPT0gMCkgeworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihwZXJfY3B1KHNvZnRuZXRfZGF0YS5uZXRfZG1hLCBjcHUpLCBOVUxMKTsKKwkJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJCXJldHVybjsKKwl9CisKKwlpID0gMDsKKwljcHUgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJm5ldF9kbWFfY2xpZW50LT5jaGFubmVscywgY2xpZW50X25vZGUpIHsKKwkJbiA9ICgobnVtX29ubGluZV9jcHVzKCkgLyBuZXRfZG1hX2NvdW50KQorCQkgICArIChpIDwgKG51bV9vbmxpbmVfY3B1cygpICUgbmV0X2RtYV9jb3VudCkgPyAxIDogMCkpOworCisJCXdoaWxlKG4pIHsKKwkJCXBlcl9jcHUoc29mdG5ldF9kYXRhLm5ldF9kbWEsIGNwdSkgPSBjaGFuOworCQkJY3B1ID0gbmV4dF9jcHUoY3B1LCBjcHVfb25saW5lX21hcCk7CisJCQluLS07CisJCX0KKwkJaSsrOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXVubG9ja19jcHVfaG90cGx1ZygpOworfQorCisvKioKKyAqIG5ldGRldl9kbWFfZXZlbnQgLSBldmVudCBjYWxsYmFjayBmb3IgdGhlIG5ldF9kbWFfY2xpZW50CisgKiBAY2xpZW50OiBzaG91bGQgYWx3YXlzIGJlIG5ldF9kbWFfY2xpZW50CisgKiBAY2hhbjoKKyAqIEBldmVudDoKKyAqLworc3RhdGljIHZvaWQgbmV0ZGV2X2RtYV9ldmVudChzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJZW51bSBkbWFfZXZlbnQgZXZlbnQpCit7CisJc3Bpbl9sb2NrKCZuZXRfZG1hX2V2ZW50X2xvY2spOworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIERNQV9SRVNPVVJDRV9BRERFRDoKKwkJbmV0X2RtYV9jb3VudCsrOworCQluZXRfZG1hX3JlYmFsYW5jZSgpOworCQlicmVhazsKKwljYXNlIERNQV9SRVNPVVJDRV9SRU1PVkVEOgorCQluZXRfZG1hX2NvdW50LS07CisJCW5ldF9kbWFfcmViYWxhbmNlKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmbmV0X2RtYV9ldmVudF9sb2NrKTsKK30KKworLyoqCisgKiBuZXRkZXZfZG1hX3JlZ2lzZXIgLSByZWdpc3RlciB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYXMgYSBETUEgY2xpZW50CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5ldGRldl9kbWFfcmVnaXN0ZXIodm9pZCkKK3sKKwlzcGluX2xvY2tfaW5pdCgmbmV0X2RtYV9ldmVudF9sb2NrKTsKKwluZXRfZG1hX2NsaWVudCA9IGRtYV9hc3luY19jbGllbnRfcmVnaXN0ZXIobmV0ZGV2X2RtYV9ldmVudCk7CisJaWYgKG5ldF9kbWFfY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZG1hX2FzeW5jX2NsaWVudF9jaGFuX3JlcXVlc3QobmV0X2RtYV9jbGllbnQsIG51bV9vbmxpbmVfY3B1cygpKTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKK3N0YXRpYyBpbnQgX19pbml0IG5ldGRldl9kbWFfcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQorI2VuZGlmIC8qIENPTkZJR19ORVRfRE1BICovCiAKIC8qCiAgKglJbml0aWFsaXplIHRoZSBERVYgbW9kdWxlLiBBdCBib290IHRpbWUgdGhpcyB3YWxrcyB0aGUgZGV2aWNlIGxpc3QgYW5kCkBAIC0zMzUzLDYgKzMzOTMsOCBAQAogCQlhdG9taWNfc2V0KCZxdWV1ZS0+YmFja2xvZ19kZXYucmVmY250LCAxKTsKIAl9CiAKKwluZXRkZXZfZG1hX3JlZ2lzdGVyKCk7CisKIAlkZXZfYm9vdF9waGFzZSA9IDA7CiAKIAlvcGVuX3NvZnRpcnEoTkVUX1RYX1NPRlRJUlEsIG5ldF90eF9hY3Rpb24sIE5VTEwpOwpAQCAtMzM3MSw3ICszNDEzLDYgQEAKIEVYUE9SVF9TWU1CT0woX19kZXZfZ2V0X2J5X2luZGV4KTsKIEVYUE9SVF9TWU1CT0woX19kZXZfZ2V0X2J5X25hbWUpOwogRVhQT1JUX1NZTUJPTChfX2Rldl9yZW1vdmVfcGFjayk7Ci1FWFBPUlRfU1lNQk9MKF9fc2tiX2xpbmVhcml6ZSk7CiBFWFBPUlRfU1lNQk9MKGRldl92YWxpZF9uYW1lKTsKIEVYUE9SVF9TWU1CT0woZGV2X2FkZF9wYWNrKTsKIEVYUE9SVF9TWU1CT0woZGV2X2FsbG9jX25hbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X21jYXN0LmMgYi9uZXQvY29yZS9kZXZfbWNhc3QuYwppbmRleCAwNWQ2MDg1MC4uYzU3ZDg4NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X21jYXN0LmMKKysrIGIvbmV0L2NvcmUvZGV2X21jYXN0LmMKQEAgLTYyLDcgKzYyLDcgQEAKICAqCURldmljZSBtYyBsaXN0cyBhcmUgY2hhbmdlZCBieSBiaCBhdCBsZWFzdCBpZiBJUHY2IGlzIGVuYWJsZWQsCiAgKglzbyB0aGF0IGl0IG11c3QgYmUgYmggcHJvdGVjdGVkLgogICoKLSAqCVdlIGJsb2NrIGFjY2Vzc2VzIHRvIGRldmljZSBtYyBmaWx0ZXJzIHdpdGggZGV2LT54bWl0X2xvY2suCisgKglXZSBibG9jayBhY2Nlc3NlcyB0byBkZXZpY2UgbWMgZmlsdGVycyB3aXRoIG5ldGlmX3R4X2xvY2suCiAgKi8KIAogLyoKQEAgLTkzLDkgKzkzLDkgQEAKIAogdm9pZCBkZXZfbWNfdXBsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCV9fZGV2X21jX3VwbG9hZChkZXYpOwotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiB9CiAKIC8qCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSwgKipkbWlwOwogCi0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCiAJZm9yIChkbWlwID0gJmRldi0+bWNfbGlzdDsgKGRtaSA9ICpkbWlwKSAhPSBOVUxMOyBkbWlwID0gJmRtaS0+bmV4dCkgewogCQkvKgpAQCAtMTM5LDEzICsxMzksMTMgQEAKIAkJCSAqLwogCQkJX19kZXZfbWNfdXBsb2FkKGRldik7CiAJCQkKLQkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCWVyciA9IC1FTk9FTlQ7CiBkb25lOgotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlkbWkxID0ga21hbGxvYyhzaXplb2YoKmRtaSksIEdGUF9BVE9NSUMpOwogCi0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCWZvciAoZG1pID0gZGV2LT5tY19saXN0OyBkbWkgIT0gTlVMTDsgZG1pID0gZG1pLT5uZXh0KSB7CiAJCWlmIChtZW1jbXAoZG1pLT5kbWlfYWRkciwgYWRkciwgZG1pLT5kbWlfYWRkcmxlbikgPT0gMCAmJgogCQkgICAgZG1pLT5kbWlfYWRkcmxlbiA9PSBhbGVuKSB7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAl9CiAKIAlpZiAoKGRtaSA9IGRtaTEpID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1jcHkoZG1pLT5kbWlfYWRkciwgYWRkciwgYWxlbik7CkBAIC0xODksMTEgKzE4OSwxMSBAQAogCiAJX19kZXZfbWNfdXBsb2FkKGRldik7CiAJCi0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAlyZXR1cm4gMDsKIAogZG9uZToKLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCWtmcmVlKGRtaTEpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMDQsNyArMjA0LDcgQEAKIAogdm9pZCBkZXZfbWNfZGlzY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkKIAl3aGlsZSAoZGV2LT5tY19saXN0ICE9IE5VTEwpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICp0bXAgPSBkZXYtPm1jX2xpc3Q7CkBAIC0yMTUsNyArMjE1LDcgQEAKIAl9CiAJZGV2LT5tY19jb3VudCA9IDA7CiAKLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdjsKIAotCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAlmb3IgKG0gPSBkZXYtPm1jX2xpc3Q7IG07IG0gPSBtLT5uZXh0KSB7CiAJCWludCBpOwogCkBAIC0yNjIsNyArMjYyLDcgQEAKIAogCQlzZXFfcHV0YyhzZXEsICdcbicpOwogCX0KLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggZTZmNzYxMC4uMzNjZTdlZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMzAsNyArMzAsNyBAQAogCiB1MzIgZXRodG9vbF9vcF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hXX0NTVU0pKSAhPSAwOworCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pICE9IDA7CiB9CiAKIGludCBldGh0b29sX29wX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQpAQCAtNTUxLDkgKzU1MSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGVkYXRhLmRhdGEgJiYgCi0JICAgICEoZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU0gfAotCQkJICAgICAgIE5FVElGX0ZfTk9fQ1NVTSB8Ci0JCQkgICAgICAgTkVUSUZfRl9IV19DU1VNKSkpCisJICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBfX2V0aHRvb2xfc2V0X3NnKGRldiwgZWRhdGEuZGF0YSk7CkBAIC01OTEsNyArNTg5LDcgQEAKIAogc3RhdGljIGludCBldGh0b29sX2dldF91Zm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKQogewotCXN0cnVjdCBldGh0b29sX3ZhbHVlIGVkYXRhID0geyBFVEhUT09MX0dUU08gfTsKKwlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YSA9IHsgRVRIVE9PTF9HVUZPIH07CiAKIAlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF91Zm8pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTYwMCw2ICs1OTgsNyBAQAogCQkgcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CisKIHN0YXRpYyBpbnQgZXRodG9vbF9zZXRfdWZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCBlOGUwNWNlLi45Y2I3ODE4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0yNzMsMjQgKzI3MywyMSBAQAogCiAJZG8gewogCQlucGluZm8tPnRyaWVzLS07Ci0JCXNwaW5fbG9jaygmbnAtPmRldi0+eG1pdF9sb2NrKTsKLQkJbnAtPmRldi0+eG1pdF9sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCQluZXRpZl90eF9sb2NrKG5wLT5kZXYpOwogCiAJCS8qCiAJCSAqIG5ldHdvcmsgZHJpdmVycyBkbyBub3QgZXhwZWN0IHRvIGJlIGNhbGxlZCBpZiB0aGUgcXVldWUgaXMKIAkJICogc3RvcHBlZC4KIAkJICovCiAJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5wLT5kZXYpKSB7Ci0JCQlucC0+ZGV2LT54bWl0X2xvY2tfb3duZXIgPSAtMTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+ZGV2LT54bWl0X2xvY2spOworCQkJbmV0aWZfdHhfdW5sb2NrKG5wLT5kZXYpOwogCQkJbmV0cG9sbF9wb2xsKG5wKTsKIAkJCXVkZWxheSg1MCk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXN0YXR1cyA9IG5wLT5kZXYtPmhhcmRfc3RhcnRfeG1pdChza2IsIG5wLT5kZXYpOwotCQlucC0+ZGV2LT54bWl0X2xvY2tfb3duZXIgPSAtMTsKLQkJc3Bpbl91bmxvY2soJm5wLT5kZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X3VubG9jayhucC0+ZGV2KTsKIAogCQkvKiBzdWNjZXNzICovCiAJCWlmKCFzdGF0dXMpIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggYzIzZTljMC4uNjdlZDE0ZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTI4OTcsNyArMjg5Nyw3IEBACiAJCX0KIAl9CiAKLQlzcGluX2xvY2tfYmgoJm9kZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChvZGV2KTsKIAlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQob2RldikpIHsKIAogCQlhdG9taWNfaW5jKCYocGt0X2Rldi0+c2tiLT51c2VycykpOwpAQCAtMjk0Miw3ICsyOTQyLDcgQEAKIAkJcGt0X2Rldi0+bmV4dF90eF9ucyA9IDA7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJm9kZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKG9kZXYpOwogCiAJLyogSWYgcGt0X2Rldi0+Y291bnQgaXMgemVybywgdGhlbiBydW4gZm9yZXZlciAqLwogCWlmICgocGt0X2Rldi0+Y291bnQgIT0gMCkgJiYgKHBrdF9kZXYtPnNvZmFyID49IHBrdF9kZXYtPmNvdW50KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBmYjM3NzBmLi5iYjcyMTBmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJbi0+dGNfdmVyZCA9IENMUl9UQ19NVU5HRUQobi0+dGNfdmVyZCk7CiAJQyhpbnB1dF9kZXYpOwogI2VuZGlmCi0KKwlza2JfY29weV9zZWNtYXJrKG4sIHNrYik7CiAjZW5kaWYKIAlDKHRydWVzaXplKTsKIAlhdG9taWNfc2V0KCZuLT51c2VycywgMSk7CkBAIC01MjYsNiArNTI2LDcgQEAKICNlbmRpZgogCW5ldy0+dGNfaW5kZXgJPSBvbGQtPnRjX2luZGV4OwogI2VuZGlmCisJc2tiX2NvcHlfc2VjbWFyayhuZXcsIG9sZCk7CiAJYXRvbWljX3NldCgmbmV3LT51c2VycywgMSk7CiAJc2tiX3NoaW5mbyhuZXcpLT50c29fc2l6ZSA9IHNrYl9zaGluZm8ob2xkKS0+dHNvX3NpemU7CiAJc2tiX3NoaW5mbyhuZXcpLT50c29fc2VncyA9IHNrYl9zaGluZm8ob2xkKS0+dHNvX3NlZ3M7CkBAIC04MDAsMTIgKzgwMSwxMCBAQAogCXJldHVybiBuc2tiOwogfQkKICAKLS8qIFRyaW1zIHNrYiB0byBsZW5ndGggbGVuLiBJdCBjYW4gY2hhbmdlIHNrYiBwb2ludGVycywgaWYgInJlYWxsb2MiIGlzIDEuCi0gKiBJZiByZWFsbG9jPT0wIGFuZCB0cmltbWluZyBpcyBpbXBvc3NpYmxlIHdpdGhvdXQgY2hhbmdlIG9mIGRhdGEsCi0gKiBpdCBpcyBCVUcoKS4KKy8qIFRyaW1zIHNrYiB0byBsZW5ndGggbGVuLiBJdCBjYW4gY2hhbmdlIHNrYiBwb2ludGVycy4KICAqLwogCi1pbnQgX19fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4sIGludCByZWFsbG9jKQoraW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCBvZmZzZXQgPSBza2JfaGVhZGxlbihza2IpOwogCWludCBuZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwpAQCAtODE1LDcgKzgxNCw2IEBACiAJCWludCBlbmQgPSBvZmZzZXQgKyBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCWlmIChlbmQgPiBsZW4pIHsKIAkJCWlmIChza2JfY2xvbmVkKHNrYikpIHsKLQkJCQlCVUdfT04oIXJlYWxsb2MpOwogCQkJCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpCiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGVkMmFmZGIuLjVkODIwYzMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTgzMiw2ICs4MzIsOSBAQAogCQlhdG9taWNfc2V0KCZuZXdzay0+c2tfb21lbV9hbGxvYywgMCk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm5ld3NrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbmV3c2stPnNrX3dyaXRlX3F1ZXVlKTsKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCQlza2JfcXVldWVfaGVhZF9pbml0KCZuZXdzay0+c2tfYXN5bmNfd2FpdF9xdWV1ZSk7CisjZW5kaWYKIAogCQlyd2xvY2tfaW5pdCgmbmV3c2stPnNrX2RzdF9sb2NrKTsKIAkJcndsb2NrX2luaXQoJm5ld3NrLT5za19jYWxsYmFja19sb2NrKTsKQEAgLTEzODMsNiArMTM4Niw5IEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2stPnNrX3JlY2VpdmVfcXVldWUpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNrLT5za193cml0ZV9xdWV1ZSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2stPnNrX2Vycm9yX3F1ZXVlKTsKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNrLT5za19hc3luY193YWl0X3F1ZXVlKTsKKyNlbmRpZgogCiAJc2stPnNrX3NlbmRfaGVhZAk9CU5VTEw7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3VzZXJfZG1hLmMgYi9uZXQvY29yZS91c2VyX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Yzk4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvY29yZS91c2VyX2RtYS5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgYmFzZWQgb24gbmV0L2NvcmUvZGF0YWdyYW0uYyBhbmQgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKworLyoKKyAqIFRoaXMgY29kZSBhbGxvd3MgdGhlIG5ldCBzdGFjayB0byBtYWtlIHVzZSBvZiBhIERNQSBlbmdpbmUgZm9yCisgKiBza2IgdG8gaW92ZWMgY29waWVzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4gLyogZm9yIEJVR19UUkFQICovCisjaW5jbHVkZSA8bmV0L3RjcC5oPgorCisjZGVmaW5lIE5FVF9ETUFfREVGQVVMVF9DT1BZQlJFQUsgNDA5NgorCitpbnQgc3lzY3RsX3RjcF9kbWFfY29weWJyZWFrID0gTkVUX0RNQV9ERUZBVUxUX0NPUFlCUkVBSzsKKworLyoqCisgKglkbWFfc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMgLSBDb3B5IGEgZGF0YWdyYW0gdG8gYW4gaW92ZWMuCisgKglAc2tiIC0gYnVmZmVyIHRvIGNvcHkKKyAqCUBvZmZzZXQgLSBvZmZzZXQgaW4gdGhlIGJ1ZmZlciB0byBzdGFydCBjb3B5aW5nIGZyb20KKyAqCUBpb3ZlYyAtIGlvIHZlY3RvciB0byBjb3B5IHRvCisgKglAbGVuIC0gYW1vdW50IG9mIGRhdGEgdG8gY29weSBmcm9tIGJ1ZmZlciB0byBpb3ZlYworICoJQHBpbm5lZF9saXN0IC0gbG9ja2VkIGlvdmVjIGJ1ZmZlciBkYXRhCisgKgorICoJTm90ZTogdGhlIGlvdmVjIGlzIG1vZGlmaWVkIGR1cmluZyB0aGUgY29weS4KKyAqLworaW50IGRtYV9za2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBzdHJ1Y3QgaW92ZWMgKnRvLAorCQkJc2l6ZV90IGxlbiwgc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqcGlubmVkX2xpc3QpCit7CisJaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTsKKwlpbnQgaSwgY29weSA9IHN0YXJ0IC0gb2Zmc2V0OworCWRtYV9jb29raWVfdCBjb29raWUgPSAwOworCisJLyogQ29weSBoZWFkZXIuICovCisJaWYgKGNvcHkgPiAwKSB7CisJCWlmIChjb3B5ID4gbGVuKQorCQkJY29weSA9IGxlbjsKKwkJY29va2llID0gZG1hX21lbWNweV90b19pb3ZlYyhjaGFuLCB0bywgcGlubmVkX2xpc3QsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2ItPmRhdGEgKyBvZmZzZXQsIGNvcHkpOworCQlpZiAoY29va2llIDwgMCkKKwkJCWdvdG8gZmF1bHQ7CisJCWxlbiAtPSBjb3B5OworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGVuZDsKKwkJb2Zmc2V0ICs9IGNvcHk7CisJfQorCisJLyogQ29weSBwYWdlZCBhcHBlbmRpeC4gSG1tLi4uIHdoeSBkb2VzIHRoaXMgbG9vayBzbyBjb21wbGljYXRlZD8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCWludCBlbmQ7CisKKwkJQlVHX1RSQVAoc3RhcnQgPD0gb2Zmc2V0ICsgbGVuKTsKKworCQllbmQgPSBzdGFydCArIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKKwkJY29weSA9IGVuZCAtIG9mZnNldDsKKwkJaWYgKChjb3B5ID0gZW5kIC0gb2Zmc2V0KSA+IDApIHsKKwkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gZnJhZy0+cGFnZTsKKworCQkJaWYgKGNvcHkgPiBsZW4pCisJCQkJY29weSA9IGxlbjsKKworCQkJY29va2llID0gZG1hX21lbWNweV9wZ190b19pb3ZlYyhjaGFuLCB0bywgcGlubmVkX2xpc3QsIHBhZ2UsCisJCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0ICsgb2Zmc2V0IC0gc3RhcnQsIGNvcHkpOworCQkJaWYgKGNvb2tpZSA8IDApCisJCQkJZ290byBmYXVsdDsKKwkJCWxlbiAtPSBjb3B5OworCQkJaWYgKGxlbiA9PSAwKQorCQkJCWdvdG8gZW5kOworCQkJb2Zmc2V0ICs9IGNvcHk7CisJCX0KKwkJc3RhcnQgPSBlbmQ7CisJfQorCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0KSB7CisJCXN0cnVjdCBza19idWZmICpsaXN0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CisKKwkJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCQlpbnQgZW5kOworCisJCQlCVUdfVFJBUChzdGFydCA8PSBvZmZzZXQgKyBsZW4pOworCisJCQllbmQgPSBzdGFydCArIGxpc3QtPmxlbjsKKwkJCWNvcHkgPSBlbmQgLSBvZmZzZXQ7CisJCQlpZiAoY29weSA+IDApIHsKKwkJCQlpZiAoY29weSA+IGxlbikKKwkJCQkJY29weSA9IGxlbjsKKwkJCQljb29raWUgPSBkbWFfc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoY2hhbiwgbGlzdCwKKwkJCQkgICAgICAgICAgICAgICAgb2Zmc2V0IC0gc3RhcnQsIHRvLCBjb3B5LAorCQkJCSAgICAgICAgICAgICAgICBwaW5uZWRfbGlzdCk7CisJCQkJaWYgKGNvb2tpZSA8IDApCisJCQkJCWdvdG8gZmF1bHQ7CisJCQkJbGVuIC09IGNvcHk7CisJCQkJaWYgKGxlbiA9PSAwKQorCQkJCQlnb3RvIGVuZDsKKwkJCQlvZmZzZXQgKz0gY29weTsKKwkJCX0KKwkJCXN0YXJ0ID0gZW5kOworCQl9CisJfQorCitlbmQ6CisJaWYgKCFsZW4pIHsKKwkJc2tiLT5kbWFfY29va2llID0gY29va2llOworCQlyZXR1cm4gY29va2llOworCX0KKworZmF1bHQ6CisgCXJldHVybiAtRUZBVUxUOworfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmMgYi9uZXQvZGNjcC9hY2t2ZWMuYwppbmRleCBiNTk4MWU1Li44YzIxMWM1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuYworKysgYi9uZXQvZGNjcC9hY2t2ZWMuYwpAQCAtNDUyLDYgKzQ1Miw3IEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkJCSAgICAgIGF2ci0+ZGNjcGF2cl9hY2tfYWNrbm8pOwogCQkJCWRjY3BfYWNrdmVjX3Rocm93X3JlY29yZChhdiwgYXZyKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJCS8qCiAJCQkgKiBJZiBpdCB3YXNuJ3QgcmVjZWl2ZWQsIGNvbnRpbnVlIHNjYW5uaW5nLi4uIHdlIG1pZ2h0CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm90by5jIGIvbmV0L2RjY3AvcHJvdG8uYwppbmRleCAyZTBlZTgzLi41MzE3ZmQzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm90by5jCisrKyBiL25ldC9kY2NwL3Byb3RvLmMKQEAgLTcxOSw3ICs3MTksNyBAQAogCQl9CiAJCWRjY3BfcHJfZGVidWcoInBhY2tldF90eXBlPSVzXG4iLAogCQkJICAgICAgZGNjcF9wYWNrZXRfbmFtZShkaC0+ZGNjcGhfdHlwZSkpOwotCQlza19lYXRfc2tiKHNrLCBza2IpOworCQlza19lYXRfc2tiKHNrLCBza2IsIDApOwogdmVyaWZ5X3NvY2tfc3RhdHVzOgogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7CiAJCQlsZW4gPSAwOwpAQCAtNzczLDcgKzc3Myw3IEBACiAJCX0KIAlmb3VuZF9maW5fb2s6CiAJCWlmICghKGZsYWdzICYgTVNHX1BFRUspKQotCQkJc2tfZWF0X3NrYihzaywgc2tiKTsKKwkJCXNrX2VhdF9za2Ioc2ssIHNrYiwgMCk7CiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uc3BfaW4uYyBiL25ldC9kZWNuZXQvZG5fbnNwX2luLmMKaW5kZXggNTQ3NTIzYi4uYTJiYTlkYiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9uc3BfaW4uYworKysgYi9uZXQvZGVjbmV0L2RuX25zcF9pbi5jCkBAIC04MDEsOCArODAxLDcgQEAKIAkJICogV2UgbGluZWFyaXplIGV2ZXJ5dGhpbmcgZXhjZXB0IGRhdGEgc2VnbWVudHMgaGVyZS4KIAkJICovCiAJCWlmIChjYi0+bnNwX2ZsYWdzICYgfjB4NjApIHsKLQkJCWlmICh1bmxpa2VseShza2JfaXNfbm9ubGluZWFyKHNrYikpICYmCi0JCQkgICAgc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpICE9IDApCisJCQlpZiAodW5saWtlbHkoc2tiX2xpbmVhcml6ZShza2IpKSkKIAkJCQlnb3RvIGZyZWVfb3V0OwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCBlMTcyY2Y5Li41YWJmNzA1IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC02MjksOCArNjI5LDcgQEAKIAkJCXBhZGxlbik7CiAKICAgICAgICAgaWYgKGZsYWdzICYgRE5fUlRfUEtUX0NOVEwpIHsKLQkJaWYgKHVubGlrZWx5KHNrYl9pc19ub25saW5lYXIoc2tiKSkgJiYKLQkJICAgIHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKQorCQlpZiAodW5saWtlbHkoc2tiX2xpbmVhcml6ZShza2IpKSkKIAkJCWdvdG8gZHVtcF9pdDsKIAogICAgICAgICAgICAgICAgIHN3aXRjaChmbGFncyAmIEROX1JUX0NOVExfTVNLKSB7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggOTNkZWY5NC4uM2ZhNWRmMiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtNTAxLDggKzUwMSwxMSBAQAogc3RhdGljIHZvaWQgbWljaGFlbF9taWNfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHU4ICogaGRyKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIxMTsKKwl1MTYgc3R5cGU7CiAKIAloZHIxMSA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwlzdHlwZSAgPSBXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdShoZHIxMS0+ZnJhbWVfY3RsKSk7CisKIAlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhkcjExLT5mcmFtZV9jdGwpICYKIAkJKElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpKSB7CiAJY2FzZSBJRUVFODAyMTFfRkNUTF9UT0RTOgpAQCAtNTIzLDcgKzUyNiwxMyBAQAogCQlicmVhazsKIAl9CiAKLQloZHJbMTJdID0gMDsJCS8qIHByaW9yaXR5ICovCisJaWYgKHN0eXBlICYgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKSB7CisJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICpxb3NoZHIgPQorCQkJKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICopc2tiLT5kYXRhOworCQloZHJbMTJdID0gbGUxNl90b19jcHUocW9zaGRyLT5xb3NfY3RsKSAmIElFRUU4MDIxMV9RQ1RMX1RJRDsKKwl9IGVsc2UKKwkJaGRyWzEyXSA9IDA7CQkvKiBwcmlvcml0eSAqLworCiAJaGRyWzEzXSA9IGhkclsxNF0gPSBoZHJbMTVdID0gMDsJLyogcmVzZXJ2ZWQgKi8KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggNjA0YjdiMC4uMmJmNTY3ZiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0zNjksNyArMzY5LDYgQEAKIAogCS8qIFB1dCB0aGlzIGNvZGUgaGVyZSBzbyB0aGF0IHdlIGF2b2lkIGR1cGxpY2F0aW5nIGl0IGluIGFsbAogCSAqIFJ4IHBhdGhzLiAtIEplYW4gSUkgKi8KLSNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAjaWZkZWYgSVdfV0lSRUxFU1NfU1BZCQkvKiBkZWZpbmVkIGluIGl3X2hhbmRsZXIuaCAqLwogCS8qIElmIHNweSBtb25pdG9yaW5nIG9uICovCiAJaWYgKGllZWUtPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKSB7CkBAIC0zOTgsNyArMzk3LDYgQEAKIAkJd2lyZWxlc3Nfc3B5X3VwZGF0ZShpZWVlLT5kZXYsIGhkci0+YWRkcjIsICZ3c3RhdHMpOwogCX0KICNlbmRpZgkJCQkvKiBJV19XSVJFTEVTU19TUFkgKi8KLSNlbmRpZgkJCQkvKiBDT05GSUdfV0lSRUxFU1NfRVhUICovCiAKICNpZmRlZiBOT1RfWUVUCiAJaG9zdGFwX3VwZGF0ZV9yeF9zdGF0cyhsb2NhbC0+YXAsIGhkciwgcnhfc3RhdHMpOwpAQCAtMTY5Miw4ICsxNjkwLDggQEAKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1CiAJCQkJCQkgICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOwogCi0JCUlFRUU4MDIxMV9XQVJOSU5HKCIlczogSUVFRTgwMjExX1JFQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAotCQkJCSAgaWVlZS0+ZGV2LT5uYW1lKTsKKwkJSUVFRTgwMjExX0RFQlVHX01HTVQoIiVzOiBJRUVFODAyMTFfUkVBU1NPQ19SRVEgcmVjZWl2ZWRcbiIsCisJCQkJICAgICBpZWVlLT5kZXYtPm5hbWUpOwogCQlpZiAoaWVlZS0+aGFuZGxlX3JlYXNzb2NfcmVxdWVzdCAhPSBOVUxMKQogCQkJaWVlZS0+aGFuZGxlX3JlYXNzb2NfcmVxdWVzdChpZWVlLT5kZXYsCiAJCQkJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0ICopCkBAIC0xNzA1LDggKzE3MDMsOCBAQAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAKLQkJSUVFRTgwMjExX1dBUk5JTkcoIiVzOiBJRUVFODAyMTFfQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAotCQkJCSAgaWVlZS0+ZGV2LT5uYW1lKTsKKwkJSUVFRTgwMjExX0RFQlVHX01HTVQoIiVzOiBJRUVFODAyMTFfQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAorCQkJCSAgICAgaWVlZS0+ZGV2LT5uYW1lKTsKIAkJaWYgKGllZWUtPmhhbmRsZV9hc3NvY19yZXF1ZXN0ICE9IE5VTEwpCiAJCQlpZWVlLT5oYW5kbGVfYXNzb2NfcmVxdWVzdChpZWVlLT5kZXYpOwogCQlicmVhazsKQEAgLTE3MjIsMTAgKzE3MjAsMTAgQEAKIAkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIFVOS05PV04gKCVkKVxuIiwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1CiAJCQkJCQkgICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOwotCQlJRUVFODAyMTFfV0FSTklORygiJXM6IFVua25vd24gbWFuYWdlbWVudCBwYWNrZXQ6ICVkXG4iLAotCQkJCSAgaWVlZS0+ZGV2LT5uYW1lLAotCQkJCSAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKLQkJCQkJCSAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CisJCUlFRUU4MDIxMV9ERUJVR19NR01UKCIlczogVW5rbm93biBtYW5hZ2VtZW50IHBhY2tldDogJWRcbiIsCisJCQkJICAgICBpZWVlLT5kZXYtPm5hbWUsCisJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdQorCQkJCQkJICAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkpKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggOGI0MzMyZi4uNmE1ZGUxYiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC0yMjAsMTMgKzIyMCw0MyBAQAogCXJldHVybiB0eGI7CiB9CiAKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGV0aGhkciAqZXRoOworCXN0cnVjdCBpcGhkciAqaXA7CisKKwlldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKKwlpZiAoZXRoLT5oX3Byb3RvICE9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApKQorCQlyZXR1cm4gMDsKKworCWlwID0gc2tiLT5uaC5pcGg7CisJc3dpdGNoIChpcC0+dG9zICYgMHhmYykgeworCWNhc2UgMHgyMDoKKwkJcmV0dXJuIDI7CisJY2FzZSAweDQwOgorCQlyZXR1cm4gMTsKKwljYXNlIDB4NjA6CisJCXJldHVybiAzOworCWNhc2UgMHg4MDoKKwkJcmV0dXJuIDQ7CisJY2FzZSAweGEwOgorCQlyZXR1cm4gNTsKKwljYXNlIDB4YzA6CisJCXJldHVybiA2OworCWNhc2UgMHhlMDoKKwkJcmV0dXJuIDc7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiAvKiBJbmNvbWluZyBza2IgaXMgY29udmVydGVkIHRvIGEgdHhiIHdoaWNoIGNvbnNpc3RzIG9mCiAgKiBhIGJsb2NrIG9mIDgwMi4xMSBmcmFnbWVudCBwYWNrZXRzIChzdG9yZWQgYXMgc2ticykgKi8KIGludCBpZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqZnJhZ19oZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKmZyYWdfaGRyOwogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplLAogCSAgICBydHNfcmVxdWlyZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIzNCw5ICsyNjQsMTAgQEAKIAlpbnQgZXRoZXJfdHlwZSwgZW5jcnlwdCwgaG9zdF9lbmNyeXB0LCBob3N0X2VuY3J5cHRfbXNkdSwgaG9zdF9idWlsZF9pdjsKIAlpbnQgYnl0ZXMsIGZjLCBoZHJfbGVuOwogCXN0cnVjdCBza19idWZmICpza2JfZnJhZzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXIgPSB7CS8qIEVuc3VyZSB6ZXJvIGluaXRpYWxpemVkICovCisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgaGVhZGVyID0gey8qIEVuc3VyZSB6ZXJvIGluaXRpYWxpemVkICovCiAJCS5kdXJhdGlvbl9pZCA9IDAsCi0JCS5zZXFfY3RsID0gMAorCQkuc2VxX2N0bCA9IDAsCisJCS5xb3NfY3RsID0gMAogCX07CiAJdTggZGVzdFtFVEhfQUxFTl0sIHNyY1tFVEhfQUxFTl07CiAJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKQEAgLTI4MiwxMiArMzEzLDYgQEAKIAltZW1jcHkoZGVzdCwgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJbWVtY3B5KHNyYywgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAotCS8qIEFkdmFuY2UgdGhlIFNLQiB0byB0aGUgc3RhcnQgb2YgdGhlIHBheWxvYWQgKi8KLQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0KLQkvKiBEZXRlcm1pbmUgdG90YWwgYW1vdW50IG9mIHN0b3JhZ2UgcmVxdWlyZWQgZm9yIFRYQiBwYWNrZXRzICovCi0JYnl0ZXMgPSBza2ItPmxlbiArIFNOQVBfU0laRSArIHNpemVvZih1MTYpOwotCiAJaWYgKGhvc3RfZW5jcnlwdCB8fCBob3N0X2J1aWxkX2l2KQogCQlmYyA9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX0RBVEEgfAogCQkgICAgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwpAQCAtMzA2LDkgKzMzMSwyMyBAQAogCQltZW1jcHkoaGVhZGVyLmFkZHIyLCBzcmMsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhlYWRlci5hZGRyMywgaWVlZS0+YnNzaWQsIEVUSF9BTEVOKTsKIAl9Ci0JaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKIAloZHJfbGVuID0gSUVFRTgwMjExXzNBRERSX0xFTjsKIAorCWlmIChpZWVlLT5pc19xb3NfYWN0aXZlICYmIGllZWUtPmlzX3Fvc19hY3RpdmUoZGV2LCBza2IpKSB7CisJCWZjIHw9IElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKKwkJaGRyX2xlbiArPSAyOworCisJCXNrYi0+cHJpb3JpdHkgPSBpZWVlODAyMTFfY2xhc3NpZnkoc2tiKTsKKwkJaGVhZGVyLnFvc19jdGwgfD0gc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RQ1RMX1RJRDsKKwl9CisJaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKworCS8qIEFkdmFuY2UgdGhlIFNLQiB0byB0aGUgc3RhcnQgb2YgdGhlIHBheWxvYWQgKi8KKwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisKKwkvKiBEZXRlcm1pbmUgdG90YWwgYW1vdW50IG9mIHN0b3JhZ2UgcmVxdWlyZWQgZm9yIFRYQiBwYWNrZXRzICovCisJYnl0ZXMgPSBza2ItPmxlbiArIFNOQVBfU0laRSArIHNpemVvZih1MTYpOworCiAJLyogRW5jcnlwdCBtc2R1IGZpcnN0IG9uIHRoZSB3aG9sZSBkYXRhIHBhY2tldC4gKi8KIAlpZiAoKGhvc3RfZW5jcnlwdCB8fCBob3N0X2VuY3J5cHRfbXNkdSkgJiYKIAkgICAgY3J5cHQgJiYgY3J5cHQtPm9wcyAmJiBjcnlwdC0+b3BzLT5lbmNyeXB0X21zZHUpIHsKQEAgLTQwMiw3ICs0NDEsNyBAQAogCWlmIChydHNfcmVxdWlyZWQpIHsKIAkJc2tiX2ZyYWcgPSB0eGItPmZyYWdtZW50c1swXTsKIAkJZnJhZ19oZHIgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopc2tiX3B1dChza2JfZnJhZywgaGRyX2xlbik7CisJCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKilza2JfcHV0KHNrYl9mcmFnLCBoZHJfbGVuKTsKIAogCQkvKgogCQkgKiBTZXQgaGVhZGVyIGZyYW1lX2N0bCB0byB0aGUgUlRTLgpAQCAtNDMzLDcgKzQ3Miw3IEBACiAJCQkJICAgIGNyeXB0LT5vcHMtPmV4dHJhX21wZHVfcHJlZml4X2xlbik7CiAKIAkJZnJhZ19oZHIgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopc2tiX3B1dChza2JfZnJhZywgaGRyX2xlbik7CisJCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKilza2JfcHV0KHNrYl9mcmFnLCBoZHJfbGVuKTsKIAkJbWVtY3B5KGZyYWdfaGRyLCAmaGVhZGVyLCBoZHJfbGVuKTsKIAogCQkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBmcmFnbWVudCwgdGhlbiBhZGQgdGhlIE1PUkVGUkFHUwpAQCAtNTE2LDcgKzU1NSw4IEBACiAvKiBJbmNvbWluZyA4MDIuMTEgc3RydWN1cmUgaXMgY29udmVydGVkIHRvIGEgVFhCCiAgKiBhIGJsb2NrIG9mIDgwMi4xMSBmcmFnbWVudCBwYWNrZXRzIChzdG9yZWQgYXMgc2ticykgKi8KIGludCBpZWVlODAyMTFfdHhfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZnJhbWUsIGludCBsZW4pCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZnJhbWUsIGludCBoZHJfbGVuLCBpbnQgdG90YWxfbGVuLAorCQkgICAgICAgaW50IGVuY3J5cHRfbXBkdSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTI2LDYgKzU2Niw5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogCisJaWYgKGVuY3J5cHRfbXBkdSAmJiAhaWVlZS0+c2VjLmVuY3J5cHQpCisJCWVuY3J5cHRfbXBkdSA9IDA7CisKIAkvKiBJZiB0aGVyZSBpcyBubyBkcml2ZXIgaGFuZGxlciB0byB0YWtlIHRoZSBUWEIsIGRvbnQnIGJvdGhlcgogCSAqIGNyZWF0aW5nIGl0Li4uICovCiAJaWYgKCFpZWVlLT5oYXJkX3N0YXJ0X3htaXQpIHsKQEAgLTUzMywzMiArNTc2LDQxIEBACiAJCWdvdG8gc3VjY2VzczsKIAl9CiAKLQlpZiAodW5saWtlbHkobGVuIDwgMjQpKSB7CisJaWYgKHVubGlrZWx5KHRvdGFsX2xlbiA8IDI0KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc2tiIHRvbyBzbWFsbCAoJWQpLlxuIiwKLQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgbGVuKTsKKwkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgdG90YWxfbGVuKTsKIAkJZ290byBzdWNjZXNzOwogCX0KIAorCWlmIChlbmNyeXB0X21wZHUpCisJCWZyYW1lLT5mcmFtZV9jdGwgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwogCS8qIFdoZW4gd2UgYWxsb2NhdGUgdGhlIFRYQiB3ZSBhbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSByZXNlcnZlCiAJICogYW5kIGZ1bGwgZnJhZ21lbnQgYnl0ZXMgKGJ5dGVzX3Blcl9mcmFnIGRvZXNuJ3QgaW5jbHVkZSBwcmVmaXgsCiAJICogcG9zdGZpeCwgaGVhZGVyLCBGQ1MsIGV0Yy4pICovCi0JdHhiID0gaWVlZTgwMjExX2FsbG9jX3R4YigxLCBsZW4sIGllZWUtPnR4X2hlYWRyb29tLCBHRlBfQVRPTUlDKTsKKwl0eGIgPSBpZWVlODAyMTFfYWxsb2NfdHhiKDEsIHRvdGFsX2xlbiwgaWVlZS0+dHhfaGVhZHJvb20sIEdGUF9BVE9NSUMpOwogCWlmICh1bmxpa2VseSghdHhiKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IGFsbG9jYXRlIFRYQlxuIiwKIAkJICAgICAgIGllZWUtPmRldi0+bmFtZSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAl0eGItPmVuY3J5cHRlZCA9IDA7Ci0JdHhiLT5wYXlsb2FkX3NpemUgPSBsZW47CisJdHhiLT5wYXlsb2FkX3NpemUgPSB0b3RhbF9sZW47CiAKIAlza2JfZnJhZyA9IHR4Yi0+ZnJhZ21lbnRzWzBdOwogCi0JbWVtY3B5KHNrYl9wdXQoc2tiX2ZyYWcsIGxlbiksIGZyYW1lLCBsZW4pOworCW1lbWNweShza2JfcHV0KHNrYl9mcmFnLCB0b3RhbF9sZW4pLCBmcmFtZSwgdG90YWxfbGVuKTsKIAogCWlmIChpZWVlLT5jb25maWcgJgogCSAgICAoQ0ZHX0lFRUU4MDIxMV9DT01QVVRFX0ZDUyB8IENGR19JRUVFODAyMTFfUkVTRVJWRV9GQ1MpKQogCQlza2JfcHV0KHNrYl9mcmFnLCA0KTsKIAorCS8qIFRvIGF2b2lkIG92ZXJjb21wbGljYXRpbmcgdGhpbmdzLCB3ZSBkbyB0aGUgY29ybmVyLWNhc2UgZnJhbWUKKwkgKiBlbmNyeXB0aW9uIGluIHNvZnR3YXJlLiBUaGUgb25seSByZWFsIHNpdHVhdGlvbiB3aGVyZSBlbmNyeXB0aW9uIGlzCisJICogbmVlZGVkIGhlcmUgaXMgZHVyaW5nIHNvZnR3YXJlLWJhc2VkIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24uICovCisJaWYgKGVuY3J5cHRfbXBkdSkKKwkJaWVlZTgwMjExX2VuY3J5cHRfZnJhZ21lbnQoaWVlZSwgc2tiX2ZyYWcsIGhkcl9sZW4pOworCiAgICAgICBzdWNjZXNzOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggYjg4NWZkMS4uYTc4YzRmOCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC01MCw3ICs1MCw4IEBACiAJY2hhciAqcDsKIAlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwogCWludCBpLCBqOwotCXU4IG1heF9yYXRlLCByYXRlOworCWNoYXIgKmN1cnJlbnRfdmFsOwkvKiBGb3IgcmF0ZXMgKi8KKwl1OCByYXRlOwogCiAJLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CkBAIC0xMDcsOSArMTA4LDEzIEBACiAJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgbmV0d29yay0+c3NpZCk7CiAKIAkvKiBBZGQgYmFzaWMgYW5kIGV4dGVuZGVkIHJhdGVzICovCi0JbWF4X3JhdGUgPSAwOwotCXAgPSBjdXN0b207Ci0JcCArPSBzbnByaW50ZihwLCBNQVhfQ1VTVE9NX0xFTiAtIChwIC0gY3VzdG9tKSwgIiBSYXRlcyAoTWIvcyk6ICIpOworCS8qIFJhdGUgOiBzdHVmZmluZyBtdWx0aXBsZSB2YWx1ZXMgaW4gYSBzaW5nbGUgZXZlbnQgcmVxdWlyZSBhIGJpdAorCSAqIG1vcmUgb2YgbWFnaWMgLSBKZWFuIElJICovCisJY3VycmVudF92YWwgPSBzdGFydCArIElXX0VWX0xDUF9MRU47CisJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbmV0d29yay0+cmF0ZXNfbGVuOykgewogCQlpZiAoaiA8IG5ldHdvcmstPnJhdGVzX2V4X2xlbiAmJgogCQkgICAgKChuZXR3b3JrLT5yYXRlc19leFtqXSAmIDB4N0YpIDwKQEAgLTExNywyOCArMTIyLDIxIEBACiAJCQlyYXRlID0gbmV0d29yay0+cmF0ZXNfZXhbaisrXSAmIDB4N0Y7CiAJCWVsc2UKIAkJCXJhdGUgPSBuZXR3b3JrLT5yYXRlc1tpKytdICYgMHg3RjsKLQkJaWYgKHJhdGUgPiBtYXhfcmF0ZSkKLQkJCW1heF9yYXRlID0gcmF0ZTsKLQkJcCArPSBzbnByaW50ZihwLCBNQVhfQ1VTVE9NX0xFTiAtIChwIC0gY3VzdG9tKSwKLQkJCSAgICAgICIlZCVzICIsIHJhdGUgPj4gMSwgKHJhdGUgJiAxKSA/ICIuNSIgOiAiIik7CisJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCisJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKHJhdGUgJiAweDdmKSAqIDUwMDAwMCk7CisJCS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKwkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShzdGFydCwgY3VycmVudF92YWwsIHN0b3AsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAJfQogCWZvciAoOyBqIDwgbmV0d29yay0+cmF0ZXNfZXhfbGVuOyBqKyspIHsKIAkJcmF0ZSA9IG5ldHdvcmstPnJhdGVzX2V4W2pdICYgMHg3RjsKLQkJcCArPSBzbnByaW50ZihwLCBNQVhfQ1VTVE9NX0xFTiAtIChwIC0gY3VzdG9tKSwKLQkJCSAgICAgICIlZCVzICIsIHJhdGUgPj4gMSwgKHJhdGUgJiAxKSA/ICIuNSIgOiAiIik7Ci0JCWlmIChyYXRlID4gbWF4X3JhdGUpCi0JCQltYXhfcmF0ZSA9IHJhdGU7CisJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCisJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKHJhdGUgJiAweDdmKSAqIDUwMDAwMCk7CisJCS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKwkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShzdGFydCwgY3VycmVudF92YWwsIHN0b3AsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAJfQotCi0JaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKLQlpd2UudS5iaXRyYXRlLnZhbHVlID0gbWF4X3JhdGUgKiA1MDAwMDA7Ci0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLQotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7CisJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IHJhdGUgKi8KKwlpZigoY3VycmVudF92YWwgLSBzdGFydCkgPiBJV19FVl9MQ1BfTEVOKQorCQlzdGFydCA9IGN1cnJlbnRfdmFsOwogCiAJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLwogCWl3ZS5jbWQgPSBJV0VWUVVBTDsKQEAgLTUwNSw3ICs1MDMsNyBAQAogCWxlbiA9IHNlYy0+a2V5X3NpemVzW2tleV07CiAJbWVtY3B5KGtleWJ1Ziwgc2VjLT5rZXlzW2tleV0sIGxlbik7CiAKLQllcnEtPmxlbmd0aCA9IChsZW4gPj0gMCA/IGxlbiA6IDApOworCWVycS0+bGVuZ3RoID0gbGVuOwogCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CiAKIAlpZiAoaWVlZS0+b3Blbl93ZXApCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9LY29uZmlnCmluZGV4IGYyYTI3Y2MuLjI4MTE2NTEgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9LY29uZmlnCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCXRyaXN0YXRlICJTb2Z0d2FyZSBNQUMgYWRkLW9uIHRvIHRoZSBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIgogCWRlcGVuZHMgb24gSUVFRTgwMjExICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBXSVJFTEVTU19FWFQKKwlzZWxlY3QgSUVFRTgwMjExX0NSWVBUX1dFUAogCS0tLWhlbHAtLS0KIAlUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBzb2Z0d2FyZSBNQUMgYWRkb24KIAlmb3IgdGhlIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2suCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYwppbmRleCA1N2VhOWY2Li41ZTlhOTA2IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKQEAgLTgyLDUxICs4Miw1MiBAQAogCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURV9USU1FT1VULCBOVUxMKTsKIH0KIAotLyogU2VuZHMgb3V0IGEgZGlzYXNzb2NpYXRpb24gcmVxdWVzdCB0byB0aGUgZGVzaXJlZCBBUCAqLwotc3RhdGljIHZvaWQKLWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHUxNiByZWFzb24pCit2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJaWYgKG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nKQorCQljYW5jZWxfZGVsYXllZF93b3JrKCZtYWMtPmFzc29jaW5mby50aW1lb3V0KTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG1hYy0+ZGV2KTsKKworCW1hYy0+YXNzb2NpYXRlZCA9IDA7CisJbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOworCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKKwlpZWVlODAyMTFzb2Z0bWFjX2luaXRfdHhyYXRlcyhtYWMpOworCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVELCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKK30KKworLyogU2VuZHMgb3V0IGEgZGlzYXNzb2NpYXRpb24gcmVxdWVzdCB0byB0aGUgZGVzaXJlZCBBUCAqLwordm9pZAoraWVlZTgwMjExc29mdG1hY19zZW5kX2Rpc2Fzc29jX3JlcShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTE2IHJlYXNvbikKK3sKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpmb3VuZDsKIAogCWlmIChtYWMtPmFzc29jaW5mby5ic3N2YWxpZCAmJiBtYWMtPmFzc29jaWF0ZWQpIHsKIAkJZm91bmQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKG1hYywgbWFjLT5hc3NvY2luZm8uYnNzaWQpOwogCQlpZiAoZm91bmQpCiAJCQlpZWVlODAyMTFzb2Z0bWFjX3NlbmRfbWd0X2ZyYW1lKG1hYywgZm91bmQsIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQywgcmVhc29uKTsKLQl9IGVsc2UgaWYgKG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nKSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJm1hYy0+YXNzb2NpbmZvLnRpbWVvdXQpOwogCX0KIAotCS8qIENoYW5nZSBvdXIgc3RhdGUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JLyogRG8gTk9UIGNsZWFyIGJzc3ZhbGlkIGFzIHRoYXQgd2lsbCBicmVhayBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3dvcmshICovCi0JbWFjLT5hc3NvY2lhdGVkID0gMDsKLQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7Ci0JaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2MobWFjKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIHdlX3N1cHBvcnRfYWxsX2Jhc2ljX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1OCAqZnJvbSwgdTggZnJvbV9sZW4pCiB7Ci0JaW50IGlkeCwgc2VhcmNoLCBmb3VuZDsKLQl1OCByYXRlLCBzZWFyY2hfcmF0ZTsKKwlpbnQgaWR4OworCXU4IHJhdGU7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IChmcm9tX2xlbik7IGlkeCsrKSB7CiAJCXJhdGUgPSAoZnJvbSlbaWR4XTsKIAkJaWYgKCEocmF0ZSAmIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spKQogCQkJY29udGludWU7Ci0JCWZvdW5kID0gMDsKIAkJcmF0ZSAmPSB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSzsKLQkJZm9yIChzZWFyY2ggPSAwOyBzZWFyY2ggPCBtYWMtPnJhdGVzaW5mby5jb3VudDsgc2VhcmNoKyspIHsKLQkJCXNlYXJjaF9yYXRlID0gbWFjLT5yYXRlc2luZm8ucmF0ZXNbc2VhcmNoXTsKLQkJCXNlYXJjaF9yYXRlICY9IH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLOwotCQkJaWYgKHJhdGUgPT0gc2VhcmNoX3JhdGUpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZCkKKwkJaWYgKCFpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mb19yYXRlX3N1cHBvcnRlZCgmbWFjLT5yYXRlc2luZm8sIHJhdGUpKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtMTYzLDEyICsxNjQsMjggQEAKIH0KIAogc3RhdGljIHZvaWQKLWllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmNvbnRleHQpCitpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBldmVudF90eXBlLCB2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3dvcmsoKHZvaWQqKW1hYyk7CiB9CiAKK3N0YXRpYyB2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeV9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBldmVudF90eXBlLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCXN3aXRjaCAoZXZlbnRfdHlwZSkgeworCWNhc2UgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIRU5USUNBVEVEOgorCQlpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3dvcmsoKHZvaWQqKW1hYyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIX0ZBSUxFRDoKKwljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9USU1FT1VUOgorCQlpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKG1hYyk7CisJCWJyZWFrOworCX0KK30KKwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaGFuZGxlIHVzZXJzcGFjZSByZXF1ZXN0cyAoYXN5bmNocm9ub3VzbHkpICovCiB2b2lkCiBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3dvcmsodm9pZCAqZCkKQEAgLTE3NiwxNCArMTkzLDE4IEBACiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICopZDsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpmb3VuZCA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXQgPSBOVUxMLCAqYmVzdCA9IE5VTEw7CisJaW50IGJzc3ZhbGlkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKKwkvKiBpZWVlODAyMTFfZGlzYXNzb2MgbWlnaHQgY2xlYXIgdGhpcyAqLworCWJzc3ZhbGlkID0gbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQ7CisKIAkvKiBtZWggKi8KIAlpZiAobWFjLT5hc3NvY2lhdGVkKQotCQlpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKG1hYywgV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKTsKKwkJaWVlZTgwMjExc29mdG1hY19zZW5kX2Rpc2Fzc29jX3JlcShtYWMsIFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCk7CiAKIAkvKiB0cnkgdG8gZmluZCB0aGUgcmVxdWVzdGVkIG5ldHdvcmsgaW4gb3VyIGxpc3QsIGlmIHdlIGZvdW5kIG9uZSBhbHJlYWR5ICovCi0JaWYgKG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkIHx8IG1hYy0+YXNzb2NpbmZvLmJzc2ZpeGVkKQorCWlmIChic3N2YWxpZCB8fCBtYWMtPmFzc29jaW5mby5ic3NmaXhlZCkKIAkJZm91bmQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKG1hYywgbWFjLT5hc3NvY2luZm8uYnNzaWQpOwkKIAkKIAkvKiBTZWFyY2ggdGhlIGllZWU4MDIxMSBuZXR3b3JrcyBmb3IgdGhpcyBuZXR3b3JrIGlmIHdlIGRpZG4ndCBmaW5kIGl0IGJ5IGJzc2lkLApAQCAtMjQ0LDcgKzI2NSw3IEBACiAJCQkgKiBNYXliZSB3ZSBjYW4gaG9wZSB0byBoYXZlIG1vcmUgbWVtb3J5IGFmdGVyIHNjYW5uaW5nIGZpbmlzaGVzIDspCiAJCQkgKi8KIAkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiQXNzb2NpYXRlOiBTY2FubmluZyBmb3IgbmV0d29ya3MgZmlyc3QuXG4iKTsKLQkJCWllZWU4MDIxMXNvZnRtYWNfbm90aWZ5KG1hYy0+ZGV2LCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX1NDQU5fRklOSVNIRUQsIGllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfbm90aWZ5LCBOVUxMKTsKKwkJCWllZWU4MDIxMXNvZnRtYWNfbm90aWZ5KG1hYy0+ZGV2LCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX1NDQU5fRklOSVNIRUQsIGllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfbm90aWZ5X3NjYW4sIE5VTEwpOwogCQkJaWYgKGllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2NhbihtYWMpKQogCQkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiQXNzb2NpYXRlOiBmYWlsZWQgdG8gaW5pdGlhdGUgc2Nhbi4gSXMgZGV2aWNlIHVwP1xuIik7CiAJCQlyZXR1cm47CkBAIC0yNzksNyArMzAwLDcgQEAKIAkJICogb3RoZXJ3aXNlIGFkZGluZyB0aGUgbm90aWZpY2F0aW9uIHdvdWxkIGJlIHJhY3kuICovCiAJCWlmICghaWVlZTgwMjExc29mdG1hY19hdXRoX3JlcShtYWMsIGZvdW5kKSkgewogCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJjYW5ub3QgYXNzb2NpYXRlIHdpdGhvdXQgYmVpbmcgYXV0aGVudGljYXRlZCwgcmVxdWVzdGVkIGF1dGhlbnRpY2F0aW9uXG4iKTsKLQkJCWllZWU4MDIxMXNvZnRtYWNfbm90aWZ5X2ludGVybmFsKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BTlksIGZvdW5kLCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeSwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJCQlpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9pbnRlcm5hbChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQU5ZLCBmb3VuZCwgaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfYXV0aCwgTlVMTCwgR0ZQX0tFUk5FTCk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGtsKEtFUk5fV0FSTklORyBQRlggIk5vdCBhdXRoZW50aWNhdGVkLCBidXQgcmVxdWVzdGluZyBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIEdpdmluZyB1cCB0byBhc3NvY2lhdGVcbiIpOwogCQkJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX0ZBSUxFRCwgZm91bmQpOwpAQCAtMjk3LDYgKzMxOCw5IEBACiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQogewogCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKKwltYWMtPmFzc29jaW5mby5zdXBwb3J0ZWRfcmF0ZXMgPSBuZXQtPnN1cHBvcnRlZF9yYXRlczsKKwlpZWVlODAyMTFzb2Z0bWFjX3JlY2FsY190eHJhdGVzKG1hYyk7CisKIAltYWMtPmFzc29jaWF0ZWQgPSAxOwogCWlmIChtYWMtPnNldF9ic3NpZF9maWx0ZXIpCiAJCW1hYy0+c2V0X2Jzc2lkX2ZpbHRlcihtYWMtPmRldiwgbmV0LT5ic3NpZCk7CkBAIC0zODAsNyArNDA0LDYgQEAKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqZGlzYXNzb2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkoIW1hYy0+cnVubmluZykpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzkyLDE0ICs0MTUsMTEgQEAKIAkJcmV0dXJuIDA7CiAKIAlkcHJpbnRrKEtFUk5fSU5GTyBQRlggImdvdCBkaXNhc3NvYyBmcmFtZVxuIik7Ci0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOwotCW1hYy0+YXNzb2NpYXRlZCA9IDA7Ci0JaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQsIE5VTEwpOworCWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2MobWFjKTsKKworCS8qIHRyeSB0byByZWFzc29jaWF0ZSAqLwogCXNjaGVkdWxlX3dvcmsoJm1hYy0+YXNzb2NpbmZvLndvcmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYwppbmRleCAwNmUzMzI2Li45MGI4NDg0IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCkBAIC0xMDcsNiArMTA3LDcgQEAKIAlwcmludGtsKEtFUk5fV0FSTklORyBQRlggIkF1dGhlbnRpY2F0aW9uIHRpbWVkIG91dCB3aXRoICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhuZXQtPmJzc2lkKSk7CiAJLyogUmVtb3ZlIHRoaXMgaXRlbSBmcm9tIHRoZSBxdWV1ZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwluZXQtPmF1dGhlbnRpY2F0aW5nID0gMDsKIAlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9USU1FT1VULCBuZXQpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmF1dGgtPndvcmspOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZS4uLiAqLwogCWxpc3RfZGVsKCZhdXRoLT5saXN0KTsKQEAgLTIxMiwxMyArMjEzLDEzIEBACiAJCQlhcS0+c3RhdGUgPSBJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX1JFU1BPTlNFOyAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCi0JCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBjaGFubmVsIGZvciB0aGlzIG5ldHdvcmsgKi8KLQkJCW1hYy0+c2V0X2NoYW5uZWwobWFjLT5kZXYsIG5ldC0+Y2hhbm5lbCk7Ci0JCQkKLQkJCS8qIFNlbmQgb3VyIHJlc3BvbnNlIChIb3cgdG8gZW5jcnlwdD8pICovCisJCQkvKiBTZW5kIG91ciByZXNwb25zZSAqLwogCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIGFxLT5uZXQsIElFRUU4MDIxMV9TVFlQRV9BVVRILCBhcS0+c3RhdGUpOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gMDsKIAkJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX1BBU1M6CisJCQlrZnJlZShuZXQtPmNoYWxsZW5nZSk7CisJCQluZXQtPmNoYWxsZW5nZSA9IE5VTEw7CisJCQluZXQtPmNoYWxsZW5nZV9sZW4gPSAwOwogCQkJLyogQ2hlY2sgdGhlIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZSAqLwogCQkJc3dpdGNoKGF1dGgtPnN0YXR1cykgewogCQkJY2FzZSBXTEFOX1NUQVRVU19TVUNDRVNTOgpAQCAtMjI5LDYgKzIzMCw3IEBACiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CiAJCQkJcHJpbnRrbChLRVJOX05PVElDRSBQRlggIlNoYXJlZCBLZXkgQXV0aGVudGljYXRpb24gY29tcGxldGVkIHdpdGggIk1BQ19GTVQiXG4iLCAKIAkJCQkJTUFDX0FSRyhuZXQtPmJzc2lkKSk7CisJCQkJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSEVOVElDQVRFRCwgbmV0KTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJcHJpbnRrbChLRVJOX05PVElDRSBQRlggIlNoYXJlZCBLZXkgQXV0aGVudGljYXRpb24gd2l0aCAiTUFDX0ZNVCIgZmFpbGVkLCBlcnJvciBjb2RlOiAlaVxuIiwgCkBAIC0yNzksNiArMjgxLDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3B0cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyogZGVhdXRoZW50aWNhdGlvbiBpbXBsaWVzIGRpc2Fzc29jaWF0aW9uICovCisJaWVlZTgwMjExc29mdG1hY19kaXNhc3NvYyhtYWMpOworCiAJLyogTG9jayBhbmQgcmVzZXQgc3RhdHVzIGZsYWdzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCW5ldC0+YXV0aGVudGljYXRpbmcgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMKaW5kZXggOGNjOGYzZi4uZjM0ZmEyZSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jCkBAIC0zOCw3ICszOCw4IEBACiAgKiBUaGUgZXZlbnQgY29udGV4dCBpcyBwcml2YXRlIGFuZCBjYW4gb25seSBiZSB1c2VkIGZyb20KICAqIHdpdGhpbiB0aGlzIG1vZHVsZS4gSXRzIG1lYW5pbmcgdmFyaWVzIHdpdGggdGhlIGV2ZW50CiAgKiB0eXBlOgotICogIFNDQU5fRklOSVNIRUQ6CW5vIHNwZWNpYWwgbWVhbmluZworICogIFNDQU5fRklOSVNIRUQsCisgKiAgRElTQVNTT0NJQVRFRDoJTlVMTAogICogIEFTU09DSUFURUQsCiAgKiAgQVNTT0NJQVRFX0ZBSUxFRCwKICAqICBBU1NPQ0lBVEVfVElNRU9VVCwKQEAgLTU5LDE1ICs2MCwxNSBAQAogICovCiAKIHN0YXRpYyBjaGFyICpldmVudF9kZXNjcmlwdGlvbnNbSUVFRTgwMjExU09GVE1BQ19FVkVOVF9MQVNUKzFdID0gewotCSJzY2FuIGZpbmlzaGVkIiwKLQkiYXNzb2NpYXRlZCIsCisJTlVMTCwgLyogc2NhbiBmaW5pc2hlZCAqLworCU5VTEwsIC8qIGFzc29jaWF0ZWQgKi8KIAkiYXNzb2NpYXRpbmcgZmFpbGVkIiwKIAkiYXNzb2NpYXRpbmcgdGltZWQgb3V0IiwKIAkiYXV0aGVudGljYXRlZCIsCiAJImF1dGhlbnRpY2F0aW5nIGZhaWxlZCIsCiAJImF1dGhlbnRpY2F0aW5nIHRpbWVkIG91dCIsCiAJImFzc29jaWF0aW5nIGZhaWxlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIG5ldHdvcmsgd2FzIGZvdW5kIiwKLQkiZGlzYXNzb2NpYXRlZCIsCisJTlVMTCwgLyogZGlzYXNzb2NpYXRlZCAqLwogfTsKIAogCkBAIC03Nyw3ICs3OCw3IEBACiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXZlbnQgZXZlbnQgPSAqKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50KikgZDsKIAlrZnJlZShkKTsKIAkKLQlldmVudC5mdW4oZXZlbnQubWFjLT5kZXYsIGV2ZW50LmNvbnRleHQpOworCWV2ZW50LmZ1bihldmVudC5tYWMtPmRldiwgZXZlbnQuZXZlbnRfdHlwZSwgZXZlbnQuY29udGV4dCk7CiB9CiAKIGludApAQCAtMTM2LDMwICsxMzcsMjQgQEAKIAkJaW50IHdlX2V2ZW50OwogCQljaGFyICptc2cgPSBOVUxMOwogCisJCW1lbXNldCgmd3JxdSwgJ1wwJywgc2l6ZW9mICh1bmlvbiBpd3JlcV9kYXRhKSk7CisKIAkJc3dpdGNoKGV2ZW50KSB7CiAJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVEOgogCQkJbmV0d29yayA9IChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICopZXZlbnRfY3R4OwotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOwogCQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCAmbmV0d29yay0+YnNzaWRbMF0sIEVUSF9BTEVOKTsKLQkJCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCQl3ZV9ldmVudCA9IFNJT0NHSVdBUDsKLQkJCWJyZWFrOworCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVEOgotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOwotCQkJbWVtc2V0KCZ3cnF1LCAnXDAnLCBzaXplb2YgKHVuaW9uIGl3cmVxX2RhdGEpKTsKIAkJCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJCQl3ZV9ldmVudCA9IFNJT0NHSVdBUDsKIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfU0NBTl9GSU5JU0hFRDoKLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKLQkJCW1lbXNldCgmd3JxdSwgJ1wwJywgc2l6ZW9mICh1bmlvbiBpd3JlcV9kYXRhKSk7CiAJCQl3ZV9ldmVudCA9IFNJT0NHSVdTQ0FOOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQltc2cgPSBldmVudF9kZXNjcmlwdGlvbnNbZXZlbnRdOworCQkJaWYgKCFtc2cpCisJCQkJbXNnID0gIlNPRlRNQUMgRVZFTlQgQlVHIjsKIAkJCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKIAkJCXdlX2V2ZW50ID0gSVdFVkNVU1RPTTsKIAkJCWJyZWFrOwpAQCAtMTcyLDYgKzE2Nyw5IEBACiAJCQlpZiAoKGV2ZW50cHRyLT5ldmVudF90eXBlID09IGV2ZW50IHx8IGV2ZW50cHRyLT5ldmVudF90eXBlID09IC0xKQogCQkJCSYmIChldmVudHB0ci0+ZXZlbnRfY29udGV4dCA9PSBOVUxMIHx8IGV2ZW50cHRyLT5ldmVudF9jb250ZXh0ID09IGV2ZW50X2N0eCkpIHsKIAkJCQlsaXN0X2RlbCgmZXZlbnRwdHItPmxpc3QpOworCQkJCS8qIFVzZXIgbWF5IGhhdmUgc3Vic2NyaWJlZCB0byBBTlkgZXZlbnQsIHNvCisJCQkJICogd2UgdGVsbCB0aGVtIHdoaWNoIGV2ZW50IHRyaWdnZXJlZCBpdC4gKi8KKwkJCQlldmVudHB0ci0+ZXZlbnRfdHlwZSA9IGV2ZW50OwogCQkJCXNjaGVkdWxlX3dvcmsoJmV2ZW50cHRyLT53b3JrKTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKaW5kZXggY2M2Y2Q1Ni4uMDk1NDE2MSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCkBAIC0xNDksNiArMTQ5LDU2IEBACiAJICogc2hvdWxkbid0IHRoZSBzZXF1ZW5jZSBudW1iZXIgYmUgaW4gaWVlZTgwMjExPyAqLwogfQogCitzdGF0aWMgdTE2CitpZWVlODAyMTFzb2Z0bWFjX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpCit7CisJdTE2IGNhcGFiaWxpdHkgPSAwOworCisJLyogRVNTIGFuZCBJQlNTIGJpdHMgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbW9kZSAqLworCXN3aXRjaCAobWFjLT5pZWVlLT5pd19tb2RlKSB7CisJY2FzZSBJV19NT0RFX0lORlJBOgorCQljYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0VTUyk7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJY2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0FVVE86CisJCWNhcGFiaWxpdHkgPSBuZXQtPmNhcGFiaWxpdGllcyAmCisJCQkoV0xBTl9DQVBBQklMSVRZX0VTU3xXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGJsZWguIHdlIGRvbid0IGV2ZXIgZ28gdG8gdGhlc2UgbW9kZXMgKi8KKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCBpd19tb2RlIVxuIik7CisJCWJyZWFrOworCX0KKworCS8qIENGIFBvbGxhYmxlIC8gQ0YgUG9sbCBSZXF1ZXN0ICovCisJLyogTmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQsIGZvciBub3csIHRoZSAwJ3MgPT0gbm90IHN1cHBvcnRlZCAqLworCisJLyogUHJpdmFjeSBCaXQgKi8KKwljYXBhYmlsaXR5IHw9IG1hYy0+aWVlZS0+c2VjLmxldmVsID8KKwkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIDogMDsKKworCS8qIFNob3J0IFByZWFtYmxlICovCisJLyogQWx3YXlzIHN1cHBvcnRlZDogd2UgcHJvYmFibHkgd29uJ3QgZXZlciBiZSBwb3dlcmluZyBkZXZpY2VzIHdoaWNoCisJICogZG9udCBzdXBwb3J0IHRoaXMuLi4gKi8KKwljYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKKworCS8qIFBCQ0MgKi8KKwkvKiBOb3Qgd2lkZWx5IHVzZWQgKi8KKworCS8qIENoYW5uZWwgQWdpbGl0eSAqLworCS8qIE5vdCB3aWRlbHkgdXNlZCAqLworCisJLyogU2hvcnQgU2xvdCAqLworCS8qIFdpbGwgYmUgaW1wbGVtZW50ZWQgbGF0ZXIgKi8KKworCS8qIERTU1MtT0ZETSAqLworCS8qIE5vdCB3aWRlbHkgdXNlZCAqLworCisJcmV0dXJuIGNhcGFiaWxpdHk7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ3JlYXRlIE1hbmFnZW1lbnQgcGFja2V0cwpAQCAtMTc5LDI3ICsyMjksNiBAQAogCQlyZXR1cm4gMDsKIAlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKIAotCS8qIEZpbGwgaW4gY2FwYWJpbGl0eSBJbmZvICovCi0Jc3dpdGNoIChtYWMtPmllZWUtPml3X21vZGUpIHsKLQljYXNlIElXX01PREVfSU5GUkE6Ci0JCSgqcGt0KS0+Y2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9FU1MpOwotCQlicmVhazsKLQljYXNlIElXX01PREVfQURIT0M6Ci0JCSgqcGt0KS0+Y2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0FVVE86Ci0JCSgqcGt0KS0+Y2FwYWJpbGl0eSA9IG5ldC0+Y2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1N8V0xBTl9DQVBBQklMSVRZX0lCU1MpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBibGVoLiB3ZSBkb24ndCBldmVyIGdvIHRvIHRoZXNlIG1vZGVzICovCi0JCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgaXdfbW9kZSFcbiIpOwotCQlicmVhazsKLQl9Ci0JLyogTmVlZCB0byBhZGQgdGhpcwotCSgqcGt0KS0+Y2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNob3J0X3Nsb3QgPyAKLQkJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpIDogMDsKLQkgKi8KLQkoKnBrdCktPmNhcGFiaWxpdHkgfD0gbWFjLT5pZWVlLT5zZWMubGV2ZWwgPyBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgOiAwOwogCS8qIEZpbGwgaW4gTGlzdGVuIEludGVydmFsICg/KSAqLwogCSgqcGt0KS0+bGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYoMTApOwogCQpAQCAtMjM5LDE3ICsyNjgsOSBAQAogCQlyZXR1cm4gMDsKIAlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEsIG5ldC0+YnNzaWQsIG5ldC0+YnNzaWQpOwogCi0JLyogRmlsbCBpbiBjYXBhYmlsaXR5IEluZm8gKi8KLQkoKnBrdCktPmNhcGFiaWxpdHkgPSBtYWMtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIgPyAKLQkJCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfRVNTKSA6Ci0JCQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0lCU1MpOwotCS8qCi0JKCpwa3QpLT5jYXBhYmlsaXR5IHw9IG1hYy0+aWVlZS0+c2hvcnRfc2xvdCA/IAotCQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkgOiAwOwotCSAqLwotCSgqcGt0KS0+Y2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNlYy5sZXZlbCA/Ci0JCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgOiAwOwotCQkKKwkvKiBGaWxsIGluIHRoZSBjYXBhYmlsaXRpZXMgKi8KKwkoKnBrdCktPmNhcGFiaWxpdHkgPSBpZWVlODAyMTFzb2Z0bWFjX2NhcGFiaWxpdGllcyhtYWMsIG5ldCk7CisKIAkvKiBGaWxsIGluIExpc3RlbiBJbnRlcnZhbCAoPykgKi8KIAkoKnBrdCktPmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KDEwKTsKIAkvKiBGaWxsIGluIHRoZSBjdXJyZW50IEFQIE1BQyAqLwpAQCAtMjY4LDI2ICsyODksMjcgQEAKIHN0YXRpYyB1MzIKIGllZWU4MDIxMXNvZnRtYWNfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKipwa3QsIAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsCi0JdTE2IHRyYW5zYWN0aW9uLCB1MTYgc3RhdHVzKQorCXUxNiB0cmFuc2FjdGlvbiwgdTE2IHN0YXR1cywgaW50ICplbmNyeXB0X21wZHUpCiB7CiAJdTggKmRhdGE7CisJaW50IGF1dGhfbW9kZSA9IG1hYy0+aWVlZS0+c2VjLmF1dGhfbW9kZTsKKwlpbnQgaXNfc2hhcmVkX3Jlc3BvbnNlID0gKGF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWQorCQkmJiB0cmFuc2FjdGlvbiA9PSBJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX1JFU1BPTlNFKTsKKwogCS8qIEFsbG9jYXRlIFBhY2tldCAqLwogCSgqcGt0KSA9IChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKilpZWVlODAyMTFzb2Z0bWFjX2FsbG9jX21ndCgKIAkJMiArCQkvKiBBdXRoIEFsZ29yaXRobSAqLwogCQkyICsJCS8qIEF1dGggVHJhbnNhY3Rpb24gU2VxICovCiAJCTIgKwkJLyogU3RhdHVzIENvZGUgKi8KIAkJIC8qIENoYWxsZW5nZSBUZXh0IElFICovCi0JCW1hYy0+aWVlZS0+b3Blbl93ZXAgPyAwIDogCi0JCTEgKyAxICsgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4KLQkpOwkKKwkJaXNfc2hhcmVkX3Jlc3BvbnNlID8gMCA6IDEgKyAxICsgbmV0LT5jaGFsbGVuZ2VfbGVuCisJKTsKIAlpZiAodW5saWtlbHkoKCpwa3QpID09IE5VTEwpKQogCQlyZXR1cm4gMDsKIAlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCBJRUVFODAyMTFfU1RZUEVfQVVUSCwgbmV0LT5ic3NpZCwgbmV0LT5ic3NpZCk7CiAJCQogCS8qIEFsZ29yaXRobSAqLwotCSgqcGt0KS0+YWxnb3JpdGhtID0gbWFjLT5pZWVlLT5vcGVuX3dlcCA/IAotCQljcHVfdG9fbGUxNihXTEFOX0FVVEhfT1BFTikgOgotCQljcHVfdG9fbGUxNihXTEFOX0FVVEhfU0hBUkVEX0tFWSk7CisJKCpwa3QpLT5hbGdvcml0aG0gPSBjcHVfdG9fbGUxNihhdXRoX21vZGUpOwogCS8qIFRyYW5zYWN0aW9uICovCiAJKCpwa3QpLT50cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHRyYW5zYWN0aW9uKTsKIAkvKiBTdGF0dXMgKi8KQEAgLTI5NSwxOCArMzE3LDIwIEBACiAJCiAJZGF0YSA9ICh1OCAqKSgqcGt0KS0+aW5mb19lbGVtZW50OwogCS8qIENoYWxsZW5nZSBUZXh0ICovCi0JaWYoIW1hYy0+aWVlZS0+b3Blbl93ZXApeworCWlmIChpc19zaGFyZWRfcmVzcG9uc2UpIHsKIAkJKmRhdGEgPSBNRklFX1RZUEVfQ0hBTExFTkdFOwogCQlkYXRhKys7CiAJCQogCQkvKiBDb3B5IHRoZSBjaGFsbGVuZ2UgaW4gKi8KLQkJLy8gKmRhdGEgPSBjaGFsbGVuZ2UgbGVuZ3RoCi0JCS8vIGRhdGEgKz0gc2l6ZW9mKHUxNik7Ci0JCS8vIG1lbWNweShkYXRhLCBjaGFsbGVuZ2UsIGNoYWxsZW5nZSBsZW5ndGgpOwotCQkvLyBkYXRhICs9IGNoYWxsZW5nZSBsZW5ndGg7Ci0JCQotCQkvKiBBZGQgdGhlIGZ1bGwgc2l6ZSB0byB0aGUgcGFja2V0IGxlbmd0aCAqLwotCX0KKwkJKmRhdGEgPSBuZXQtPmNoYWxsZW5nZV9sZW47CisJCWRhdGErKzsKKwkJbWVtY3B5KGRhdGEsIG5ldC0+Y2hhbGxlbmdlLCBuZXQtPmNoYWxsZW5nZV9sZW4pOworCQlkYXRhICs9IG5ldC0+Y2hhbGxlbmdlX2xlbjsKKworCQkvKiBNYWtlIHN1cmUgdGhpcyBmcmFtZSBnZXRzIGVuY3J5cHRlZCB3aXRoIHRoZSBzaGFyZWQga2V5ICovCisJCSplbmNyeXB0X21wZHUgPSAxOworCX0gZWxzZQorCQkqZW5jcnlwdF9tcGR1ID0gMDsKIAogCS8qIFJldHVybiB0aGUgcGFja2V0IHNpemUgKi8KIAlyZXR1cm4gKGRhdGEgLSAodTggKikoKnBrdCkpOwpAQCAtMzk2LDYgKzQyMCw3IEBACiB7CiAJdm9pZCAqcGt0ID0gTlVMTDsKIAl1MzIgcGt0X3NpemUgPSAwOworCWludCBlbmNyeXB0X21wZHUgPSAwOwogCiAJc3dpdGNoKHR5cGUpIHsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE6CkBAIC00MDUsNyArNDMwLDcgQEAKIAkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX3JlYXNzb2NfcmVxKChzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKikoJnBrdCksIG1hYywgKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKilwdHJhcmcpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCQlwa3Rfc2l6ZSA9IGllZWU4MDIxMXNvZnRtYWNfYXV0aCgoc3RydWN0IGllZWU4MDIxMV9hdXRoICoqKSgmcGt0KSwgbWFjLCAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKXB0cmFyZywgKHUxNikoYXJnICYgMHhGRkZGKSwgKHUxNikgKGFyZyA+PiAxNikpOworCQlwa3Rfc2l6ZSA9IGllZWU4MDIxMXNvZnRtYWNfYXV0aCgoc3RydWN0IGllZWU4MDIxMV9hdXRoICoqKSgmcGt0KSwgbWFjLCAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKXB0cmFyZywgKHUxNikoYXJnICYgMHhGRkZGKSwgKHUxNikgKGFyZyA+PiAxNiksICZlbmNyeXB0X21wZHUpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CkBAIC00MzQsNTIgKzQ1OSw4IEBACiAJICogb3IgZ2V0IHJpZCBvZiBpdCBhbGx0b2dldGhlcj8KIAkgKiBEb2VzIHRoaXMgd29yayBmb3IgeW91IG5vdz8KIAkgKi8KLQlpZWVlODAyMTFfdHhfZnJhbWUobWFjLT5pZWVlLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwa3QsIHBrdF9zaXplKTsKLQotCWtmcmVlKHBrdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogQ3JlYXRlIGFuIHJ0cy9jdHMgZnJhbWUgKi8KLXN0YXRpYyB1MzIKLWllZWU4MDIxMXNvZnRtYWNfcnRzX2N0cyhzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqKnBrdCwKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0LCAKLQl1MzIgdHlwZSkKLXsKLQkvKiBBbGxvY2F0ZSBQYWNrZXQgKi8KLQkoKnBrdCkgPSBrbWFsbG9jKElFRUU4MDIxMV8yQUREUl9MRU4sIEdGUF9BVE9NSUMpOwkKLQltZW1zZXQoKnBrdCwgMCwgSUVFRTgwMjExXzJBRERSX0xFTik7Ci0JaWYoKCpwa3QpID09IE5VTEwpCi0JCXJldHVybiAwOwotCWllZWU4MDIxMXNvZnRtYWNfaGRyXzJhZGRyKG1hYywgKCpwa3QpLCB0eXBlLCBuZXQtPmJzc2lkKTsKLQlyZXR1cm4gSUVFRTgwMjExXzJBRERSX0xFTjsKLX0KLQotCi0vKiBTZW5kcyBhIGNvbnRyb2wgcGFja2V0ICovCi1zdGF0aWMgaW50Ci1pZWVlODAyMTFzb2Z0bWFjX3NlbmRfY3RsX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCwgdTMyIHR5cGUsIHUzMiBhcmcpCi17Ci0Jdm9pZCAqcGt0ID0gTlVMTDsKLQl1MzIgcGt0X3NpemUgPSAwOwotCQotCXN3aXRjaCh0eXBlKSB7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUlRTOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX3J0c19jdHMoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyICoqKSgmcGt0KSwgbWFjLCBuZXQsIHR5cGUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGtsKEtFUk5fREVCVUcgUEZYICJVbnN1cHBvcnRlZCBDb250cm9sIEZyYW1lIHR5cGU6ICVpXG4iLCB0eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYocGt0X3NpemUgPT0gMCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JCi0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBpZWVlODAyMTEgbGF5ZXIgZm9yIHR4ICovCi0JaWVlZTgwMjExX3R4X2ZyYW1lKG1hYy0+aWVlZSwgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHBrdCwgcGt0X3NpemUpOworCWllZWU4MDIxMV90eF9mcmFtZShtYWMtPmllZWUsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBrdCwKKwkJSUVFRTgwMjExXzNBRERSX0xFTiwgcGt0X3NpemUsIGVuY3J5cHRfbXBkdSk7CiAKIAlrZnJlZShwa3QpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYwppbmRleCA2MjUyYmUyLi40YjJlNTdkIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiaWVlZTgwMjExc29mdG1hY19wcml2LmgiCiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTFzb2Z0bWFjKGludCBzaXplb2ZfcHJpdikKIHsKQEAgLTYxLDE0ICs2Miw2IEBACiAJc29mdG1hYy0+d2FpdF9mb3Jfc2NhbiA9IGllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2Nhbl9pbXBsZW1lbnRhdGlvbjsKIAlzb2Z0bWFjLT5zdG9wX3NjYW4gPSBpZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2Nhbl9pbXBsZW1lbnRhdGlvbjsKIAotCS8vVE9ETzogVGhlIG1jYXN0IHJhdGUgaGFzIHRvIGJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5IHNvbWV3aGVyZSAoaW4gc2Nhbm5pbmcsIGFzc29jaWF0aW9uLiBOb3Qgc3VyZS4uLikKLQkvLyAgICAgIEl0IGhhcyB0byBiZSBzZXQgdG8gdGhlIGhpZ2hlc3QgcmF0ZSBhbGwgc3RhdGlvbnMgaW4gdGhlIGN1cnJlbnQgbmV0d29yayBjYW4gaGFuZGxlLgotCXNvZnRtYWMtPnR4cmF0ZXMubWNhc3RfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0Jc29mdG1hYy0+dHhyYXRlcy5tY2FzdF9mYWxsYmFjayA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0JLyogVGhpcyBpcyByZWFzc2lnbmVkIGluIGllZWU4MDIxMXNvZnRtYWNfc3RhcnQgdG8gc2FuZSB2YWx1ZXMuICovCi0Jc29mdG1hYy0+dHhyYXRlcy5kZWZhdWx0X3JhdGUgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCXNvZnRtYWMtPnR4cmF0ZXMuZGVmYXVsdF9mYWxsYmFjayA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0KIAkvKiB0byBzdGFydCB3aXRoLCB3ZSBjYW4ndCBzZW5kIGFueXRoaW5nIC4uLiAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCkBAIC0xNzAsMTUgKzE2Myw4MiBAQAogCX0KIH0KIAotdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm9fcmF0ZV9zdXBwb3J0ZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyaSwgdTggcmF0ZSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisJaW50IHNlYXJjaDsKKwl1OCBzZWFyY2hfcmF0ZTsKKworCWZvciAoc2VhcmNoID0gMDsgc2VhcmNoIDwgcmktPmNvdW50OyBzZWFyY2grKykgeworCQlzZWFyY2hfcmF0ZSA9IHJpLT5yYXRlc1tzZWFyY2hdOworCQlzZWFyY2hfcmF0ZSAmPSB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSzsKKwkJaWYgKHJhdGUgPT0gc2VhcmNoX3JhdGUpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRmluZHMgdGhlIGhpZ2hlc3QgcmF0ZSB3aGljaCBpczoKKyAqICAxLiBQcmVzZW50IGluIHJpIChvcHRpb25hbGx5IGEgYmFzaWMgcmF0ZSkKKyAqICAyLiBTdXBwb3J0ZWQgYnkgdGhlIGRldmljZQorICogIDMuIExlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdXNlci1kZWZpbmVkIHJhdGUKKyAqLworc3RhdGljIHU4IGhpZ2hlc3Rfc3VwcG9ydGVkX3JhdGUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyaSwgaW50IGJhc2ljX29ubHkpCit7CisJdTggdXNlcl9yYXRlID0gbWFjLT50eHJhdGVzLnVzZXJfcmF0ZTsKKwlpbnQgaTsKKworCWlmIChyaS0+Y291bnQgPT0gMCkgeworCQlkcHJpbnRrKEtFUk5fRVJSIFBGWCAiZW1wdHkgcmF0ZXNpbmZvP1xuIik7CisJCXJldHVybiBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COworCX0KKworCWZvciAoaSA9IHJpLT5jb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXU4IHJhdGUgPSByaS0+cmF0ZXNbaV07CisJCWlmIChiYXNpY19vbmx5ICYmICEocmF0ZSAmIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spKQorCQkJY29udGludWU7CisJCXJhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7CisJCWlmIChyYXRlID4gdXNlcl9yYXRlKQorCQkJY29udGludWU7CisJCWlmIChpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mb19yYXRlX3N1cHBvcnRlZCgmbWFjLT5yYXRlc2luZm8sIHJhdGUpKQorCQkJcmV0dXJuIHJhdGU7CisJfQorCisJLyogSWYgd2UgaGF2ZW4ndCBmb3VuZCBhIHN1aXRhYmxlIHJhdGUgYnkgbm93LCBqdXN0IHRydXN0IHRoZSB1c2VyICovCisJcmV0dXJuIHVzZXJfcmF0ZTsKK30KKwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3JlY2FsY190eHJhdGVzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgKnR4cmF0ZXMgPSAmbWFjLT50eHJhdGVzOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgb2xkcmF0ZXM7CisJdTMyIGNoYW5nZSA9IDA7CisKKwlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKKwkJb2xkcmF0ZXMgPSBtYWMtPnR4cmF0ZXM7CisKKwljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVDsKKwl0eHJhdGVzLT5kZWZhdWx0X3JhdGUgPSBoaWdoZXN0X3N1cHBvcnRlZF9yYXRlKG1hYywgJm1hYy0+YXNzb2NpbmZvLnN1cHBvcnRlZF9yYXRlcywgMCk7CisKKwljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSzsKKwl0eHJhdGVzLT5kZWZhdWx0X2ZhbGxiYWNrID0gbG93ZXJfcmF0ZShtYWMsIHR4cmF0ZXMtPmRlZmF1bHRfcmF0ZSk7CisKKwljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUNBU1Q7CisJdHhyYXRlcy0+bWNhc3RfcmF0ZSA9IGhpZ2hlc3Rfc3VwcG9ydGVkX3JhdGUobWFjLCAmbWFjLT5hc3NvY2luZm8uc3VwcG9ydGVkX3JhdGVzLCAxKTsKKworCWlmIChtYWMtPnR4cmF0ZXNfY2hhbmdlKQorCQltYWMtPnR4cmF0ZXNfY2hhbmdlKG1hYy0+ZGV2LCBjaGFuZ2UsICZvbGRyYXRlcyk7CisKK30KKwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX2luaXRfdHhyYXRlcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYykKK3sKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG1hYy0+aWVlZTsKIAl1MzIgY2hhbmdlID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzICp0eHJhdGVzID0gJm1hYy0+dHhyYXRlczsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzIG9sZHJhdGVzOwogCi0JaWVlZTgwMjExc29mdG1hY19zdGFydF9jaGVja19yYXRlcyhtYWMpOwotCiAJLyogVE9ETzogV2UgbmVlZCBzb21lIGtpbmQgb2Ygc3RhdGUgbWFjaGluZSB0byBsb3dlciB0aGUgZGVmYXVsdCByYXRlcwogCSAqICAgICAgIGlmIHdlIGxvb3NlIHRvbyBtYW55IHBhY2tldHMuCiAJICovCkBAIC0xOTMsMjIgKzI1MywzNyBAQAogCSAgIG1vcmUgcmVsaWFibGUuIE5vdGUgc2ltaWxhciBsb2dpYyBpbgogCSAgIGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X3JhdGUoKSAqLwkgCiAJaWYgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04pIHsKLQkJbWFjLT50eHJhdGVzLmRlZmF1bHRfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COwotCQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVDsKLQkJbWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2sgPSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COwotCQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSzsKKwkJdHhyYXRlcy0+dXNlcl9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzExTUI7CiAJfSBlbHNlIGlmIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgewotCQltYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1COwotCQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVDsKLQkJbWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2sgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI7Ci0JCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUX0ZCQUNLOworCQl0eHJhdGVzLT51c2VyX3JhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI7CiAJfSBlbHNlCiAJCWFzc2VydCgwKTsKKworCXR4cmF0ZXMtPmRlZmF1bHRfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7CisJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7CisKKwl0eHJhdGVzLT5kZWZhdWx0X2ZhbGxiYWNrID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSzsKKworCXR4cmF0ZXMtPm1jYXN0X3JhdGUgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COworCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19NQ0FTVDsKKworCXR4cmF0ZXMtPm1ndF9tY2FzdF9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUdUX01DQVNUOworCiAJaWYgKG1hYy0+dHhyYXRlc19jaGFuZ2UpCi0JCW1hYy0+dHhyYXRlc19jaGFuZ2UoZGV2LCBjaGFuZ2UsICZvbGRyYXRlcyk7CisJCW1hYy0+dHhyYXRlc19jaGFuZ2UobWFjLT5kZXYsIGNoYW5nZSwgJm9sZHJhdGVzKTsKIAogCW1hYy0+cnVubmluZyA9IDE7CiB9CisKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCWllZWU4MDIxMXNvZnRtYWNfc3RhcnRfY2hlY2tfcmF0ZXMobWFjKTsKKwlpZWVlODAyMTFzb2Z0bWFjX2luaXRfdHhyYXRlcyhtYWMpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY19zdGFydCk7CiAKIHZvaWQgaWVlZTgwMjExc29mdG1hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmggYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmgKaW5kZXggNjVkOTgxNi4uZmExZjhlMyAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfcHJpdi5oCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3ByaXYuaApAQCAtMTE2LDcgKzExNiwxMCBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Vzc2lkICplc3NpZCk7CiAKIC8qIFJhdGVzIHJlbGF0ZWQgKi8KK2ludCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mb19yYXRlX3N1cHBvcnRlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gKnJpLCB1OCByYXRlKTsKIHU4IGllZWU4MDIxMXNvZnRtYWNfbG93ZXJfcmF0ZV9kZWx0YShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSwgaW50IGRlbHRhKTsKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19pbml0X3R4cmF0ZXMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpOwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3JlY2FsY190eHJhdGVzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKTsKIHN0YXRpYyBpbmxpbmUgdTggbG93ZXJfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSkgewogCXJldHVybiBpZWVlODAyMTFzb2Z0bWFjX2xvd2VyX3JhdGVfZGVsdGEobWFjLCByYXRlLCAxKTsKIH0KQEAgLTE1MCw2ICsxNTMsOCBAQAogaW50IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX3JlYXNzb2NfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAogCQkJCSAgICAgICAgc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgKiByZWFzc29jKTsKIHZvaWQgaWVlZTgwMjExc29mdG1hY19hc3NvY190aW1lb3V0KHZvaWQgKmQpOwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NlbmRfZGlzYXNzb2NfcmVxKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1MTYgcmVhc29uKTsKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyk7CiAKIC8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExc29mdG1hY19zY2FuX2hhbmRsZXJzX2NoZWNrX3NlbGYoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSkKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCmluZGV4IDI3ZWRiMmIuLjIyYWE2MTkgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwpAQCAtMjExLDggKzIxMSw4IEBACiAJaWYgKGlzX29mZG0gJiYgIShpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCW1hYy0+dHhyYXRlcy5kZWZhdWx0X3JhdGUgPSByYXRlOwotCW1hYy0+dHhyYXRlcy5kZWZhdWx0X2ZhbGxiYWNrID0gbG93ZXJfcmF0ZShtYWMsIHJhdGUpOworCW1hYy0+dHhyYXRlcy51c2VyX3JhdGUgPSByYXRlOworCWllZWU4MDIxMXNvZnRtYWNfcmVjYWxjX3R4cmF0ZXMobWFjKTsKIAllcnIgPSAwOwogCiBvdXRfdW5sb2NrOgkKQEAgLTQzMSwzICs0MzEsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X2dlbmllKTsKIAoraW50CitpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOworCXUxNiByZWFzb24gPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0OworCisJaWYgKG1lbWNtcChtYWMtPmFzc29jaW5mby5ic3NpZCwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ3eF9zZXRfbWxtZTogcmVxdWVzdGVkIG9wZXJhdGlvbiBvbiBuZXQgd2UgZG9uJ3QgdXNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChtbG1lLT5jbWQpIHsKKwljYXNlIElXX01MTUVfREVBVVRIOgorCQluZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZChtYWMsIG1sbWUtPmFkZHIuc2FfZGF0YSk7CisJCWlmICghbmV0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInd4X3NldF9tbG1lOiB3ZSBzaG91bGQga25vdyB0aGUgbmV0IGhlcmUuLi5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIGllZWU4MDIxMXNvZnRtYWNfZGVhdXRoX3JlcShtYWMsIG5ldCwgcmVhc29uKTsKKwljYXNlIElXX01MTUVfRElTQVNTT0M6CisJCWllZWU4MDIxMXNvZnRtYWNfc2VuZF9kaXNhc3NvY19yZXEobWFjLCByZWFzb24pOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9zZXRfbWxtZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCBlNDBmNzUzLi5kYTMzMzkzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTQxNCw2ICs0MTQsMjQgQEAKIAl0cmlzdGF0ZQogCWRlZmF1bHQgbgogCitjb25maWcgSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUCisJdHJpc3RhdGUgIklQOiBJUHNlYyB0cmFuc3BvcnQgbW9kZSIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgWEZSTQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIElQc2VjIHRyYW5zcG9ydCBtb2RlLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgSU5FVF9YRlJNX01PREVfVFVOTkVMCisJdHJpc3RhdGUgIklQOiBJUHNlYyB0dW5uZWwgbW9kZSIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgWEZSTQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIElQc2VjIHR1bm5lbCBtb2RlLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgSU5FVF9ESUFHCiAJdHJpc3RhdGUgIklORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSIKIAlkZWZhdWx0IHkKQEAgLTUzMiw2ICs1NTAsMzggQEAKIAlwcm9wZXJ0aWVzLCB0aG91Z2ggaXMga25vd24gdG8gaGF2ZSBmYWlybmVzcyBpc3N1ZXMuCiAJU2VlIGh0dHA6Ly93d3ctbGNlLmVuZy5jYW0uYWMudWsvfmN0azIxL3NjYWxhYmxlLwogCitjb25maWcgVENQX0NPTkdfTFAKKwl0cmlzdGF0ZSAiVENQIExvdyBQcmlvcml0eSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwlUQ1AgTG93IFByaW9yaXR5IChUQ1AtTFApLCBhIGRpc3RyaWJ1dGVkIGFsZ29yaXRobSB3aG9zZSBnb2FsIGlzCisJdG8gdXRpbGl6YSBvbmx5IHRoZSBleGNlc3MgbmV0d29yayBiYW5kd2lkdGggYXMgY29tcGFyZWQgdG8gdGhlCisJYGBmYWlyIHNoYXJlYGAgb2YgYmFuZHdpZHRoIGFzIHRhcmdldGVkIGJ5IFRDUC4KKwlTZWUgaHR0cDovL3d3dy1lY2UucmljZS5lZHUvbmV0d29ya3MvVENQLUxQLworCitjb25maWcgVENQX0NPTkdfVkVOTworCXRyaXN0YXRlICJUQ1AgVmVubyIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwlUQ1AgVmVubyBpcyBhIHNlbmRlci1zaWRlIG9ubHkgZW5oYW5jZW1lbnQgb2YgVENQIHRvIG9idGFpbiBiZXR0ZXIKKwl0aHJvdWdocHV0IG92ZXIgd2lyZWxlc3MgbmV0d29ya3MuIFRDUCBWZW5vIG1ha2VzIHVzZSBvZiBzdGF0ZQorCWRpc3Rpbmd1aXNoaW5nIHRvIGNpcmN1bXZlbnQgdGhlIGRpZmZpY3VsdCBqdWRnbWVudCBvZiB0aGUgcGFja2V0IGxvc3MKKwl0eXBlLiBUQ1AgVmVubyBjdXRzIGRvd24gbGVzcyBjb25nZXN0aW9uIHdpbmRvdyBpbiByZXNwb25zZSB0byByYW5kb20KKwlsb3NzIHBhY2tldHMuCisJU2VlIGh0dHA6Ly93d3cubnR1LmVkdS5zZy9ob21lNS9aSE9VMDAyMi9wYXBlcnMvQ1BGdTAzYS5wZGYKKworY29uZmlnIFRDUF9DT05HX0NPTVBPVU5ECisJdHJpc3RhdGUgIlRDUCBDb21wb3VuZCIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwlUQ1AgQ29tcG91bmQgaXMgYSBzZW5kZXItc2lkZSBvbmx5IGNoYW5nZSB0byBUQ1AgdGhhdCB1c2VzCisJYSBtaXhlZCBSZW5vL1ZlZ2FzIGFwcHJvYWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3duZC4KKwlGb3IgZnVydGhlciBkZXRhaWxzIGxvb2sgaGVyZToKKwkgIGZ0cDovL2Z0cC5yZXNlYXJjaC5taWNyb3NvZnQuY29tL3B1Yi90ci9UUi0yMDA1LTg2LnBkZgorCiBlbmRtZW51CiAKIGNvbmZpZyBUQ1BfQ09OR19CSUMKZGlmZiAtLWdpdCBhL25ldC9pcHY0L01ha2VmaWxlIGIvbmV0L2lwdjQvTWFrZWZpbGUKaW5kZXggOWVmNTBhMC4uMzhiODAzOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDggQEAKIG9iai0kKENPTkZJR19JTkVUX0lQQ09NUCkgKz0gaXBjb21wLm8KIG9iai0kKENPTkZJR19JTkVUX1hGUk1fVFVOTkVMKSArPSB4ZnJtNF90dW5uZWwubwogb2JqLSQoQ09ORklHX0lORVRfVFVOTkVMKSArPSB0dW5uZWw0Lm8KK29iai0kKENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQpICs9IHhmcm00X21vZGVfdHJhbnNwb3J0Lm8KK29iai0kKENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwpICs9IHhmcm00X21vZGVfdHVubmVsLm8KIG9iai0kKENPTkZJR19JUF9QTlApICs9IGlwY29uZmlnLm8KIG9iai0kKENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfUlIpICs9IG11bHRpcGF0aF9yci5vCiBvYmotJChDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX1JBTkRPTSkgKz0gbXVsdGlwYXRoX3JhbmRvbS5vCkBAIC0zNCw2ICszNiw3IEBACiBvYmotJChDT05GSUdfSU5FVF9ESUFHKSArPSBpbmV0X2RpYWcubyAKIG9iai0kKENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEKSArPSBtdWx0aXBhdGgubwogb2JqLSQoQ09ORklHX0lORVRfVENQX0RJQUcpICs9IHRjcF9kaWFnLm8KK29iai0kKENPTkZJR19ORVRfVENQUFJPQkUpICs9IHRjcF9wcm9iZS5vCiBvYmotJChDT05GSUdfVENQX0NPTkdfQklDKSArPSB0Y3BfYmljLm8KIG9iai0kKENPTkZJR19UQ1BfQ09OR19DVUJJQykgKz0gdGNwX2N1YmljLm8KIG9iai0kKENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCkgKz0gdGNwX3dlc3R3b29kLm8KQEAgLTQxLDcgKzQ0LDEwIEBACiBvYmotJChDT05GSUdfVENQX0NPTkdfSFlCTEEpICs9IHRjcF9oeWJsYS5vCiBvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgKz0gdGNwX2h0Y3Aubwogb2JqLSQoQ09ORklHX1RDUF9DT05HX1ZFR0FTKSArPSB0Y3BfdmVnYXMubworb2JqLSQoQ09ORklHX1RDUF9DT05HX1ZFTk8pICs9IHRjcF92ZW5vLm8KIG9iai0kKENPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRSkgKz0gdGNwX3NjYWxhYmxlLm8KK29iai0kKENPTkZJR19UQ1BfQ09OR19MUCkgKz0gdGNwX2xwLm8KK29iai0kKENPTkZJR19UQ1BfQ09OR19DT01QT1VORCkgKz0gdGNwX2NvbXBvdW5kLm8KIAogb2JqLSQoQ09ORklHX1hGUk0pICs9IHhmcm00X3BvbGljeS5vIHhmcm00X3N0YXRlLm8geGZybTRfaW5wdXQubyBcCiAJCSAgICAgIHhmcm00X291dHB1dC5vCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9haDQuYyBiL25ldC9pcHY0L2FoNC5jCmluZGV4IGUyZTQ3NzEuLmM3NzgyMjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FoNC5jCisrKyBiL25ldC9pcHY0L2FoNC5jCkBAIC0xMTksNiArMTE5LDcgQEAKIHN0YXRpYyBpbnQgYWhfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGFoX2hsZW47CisJaW50IGlobDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlzdHJ1Y3QgaXBfYXV0aF9oZHIgKmFoOwogCXN0cnVjdCBhaF9kYXRhICphaHA7CkBAIC0xNDksMTMgKzE1MCwxNCBAQAogCWFoID0gKHN0cnVjdCBpcF9hdXRoX2hkciopc2tiLT5kYXRhOwogCWlwaCA9IHNrYi0+bmguaXBoOwogCi0JbWVtY3B5KHdvcmtfYnVmLCBpcGgsIGlwaC0+aWhsKjQpOworCWlobCA9IHNrYi0+ZGF0YSAtIHNrYi0+bmgucmF3OworCW1lbWNweSh3b3JrX2J1ZiwgaXBoLCBpaGwpOwogCiAJaXBoLT50dGwgPSAwOwogCWlwaC0+dG9zID0gMDsKIAlpcGgtPmZyYWdfb2ZmID0gMDsKIAlpcGgtPmNoZWNrID0gMDsKLQlpZiAoaXBoLT5paGwgIT0gNSkgeworCWlmIChpaGwgPiBzaXplb2YoKmlwaCkpIHsKIAkJdTMyIGR1bW15OwogCQlpZiAoaXBfY2xlYXJfbXV0YWJsZV9vcHRpb25zKGlwaCwgJmR1bW15KSkKIAkJCWdvdG8gb3V0OwpAQCAtMTY0LDcgKzE2Niw3IEBACiAJCXU4IGF1dGhfZGF0YVtNQVhfQUhfQVVUSF9MRU5dOwogCQkKIAkJbWVtY3B5KGF1dGhfZGF0YSwgYWgtPmF1dGhfZGF0YSwgYWhwLT5pY3ZfdHJ1bmNfbGVuKTsKLQkJc2tiX3B1c2goc2tiLCBza2ItPmRhdGEgLSBza2ItPm5oLnJhdyk7CisJCXNrYl9wdXNoKHNrYiwgaWhsKTsKIAkJYWhwLT5pY3YoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOwogCQlpZiAobWVtY21wKGFoLT5hdXRoX2RhdGEsIGF1dGhfZGF0YSwgYWhwLT5pY3ZfdHJ1bmNfbGVuKSkgewogCQkJeC0+c3RhdHMuaW50ZWdyaXR5X2ZhaWxlZCsrOwpAQCAtMTcyLDExICsxNzQsOCBAQAogCQl9CiAJfQogCSgoc3RydWN0IGlwaGRyKil3b3JrX2J1ZiktPnByb3RvY29sID0gYWgtPm5leHRoZHI7Ci0Jc2tiLT5uaC5yYXcgPSBza2JfcHVsbChza2IsIGFoX2hsZW4pOwotCW1lbWNweShza2ItPm5oLnJhdywgd29ya19idWYsIGlwaC0+aWhsKjQpOwotCXNrYi0+bmguaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOwotCXNrYl9wdWxsKHNrYiwgc2tiLT5uaC5pcGgtPmlobCo0KTsKLQlza2ItPmgucmF3ID0gc2tiLT5kYXRhOworCXNrYi0+aC5yYXcgPSBtZW1jcHkoc2tiLT5uaC5yYXcgKz0gYWhfaGxlbiwgd29ya19idWYsIGlobCk7CisJX19za2JfcHVsbChza2IsIGFoX2hsZW4gKyBpaGwpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCA5ZDE4ODFjLi45YmJkZDQ0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCisrKyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMTQzLDEwICsxNDMsOSBAQAogCWludCBhbGVuID0gZXNwLT5hdXRoLmljdl90cnVuY19sZW47CiAJaW50IGVsZW4gPSBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikgLSBlc3AtPmNvbmYuaXZsZW4gLSBhbGVuOwogCWludCBuZnJhZ3M7Ci0JaW50IGVuY2FwX2xlbiA9IDA7CisJaW50IGlobDsKIAl1OCBuZXh0aGRyWzJdOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JdTggd29ya2J1Zls2MF07CiAJaW50IHBhZGxlbjsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikpKQpAQCAtMTc3LDcgKzE3Niw2IEBACiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJZXNwaCA9IChzdHJ1Y3QgaXBfZXNwX2hkciopc2tiLT5kYXRhOwotCWlwaCA9IHNrYi0+bmguaXBoOwogCiAJLyogR2V0IGl2ZWMuIFRoaXMgY2FuIGJlIHdyb25nLCBjaGVjayBhZ2FpbnN0IGFub3RoZXIgaW1wbHMuICovCiAJaWYgKGVzcC0+Y29uZi5pdmxlbikKQEAgLTIwNCwxMiArMjAyLDEyIEBACiAKIAkvKiAuLi4gY2hlY2sgcGFkZGluZyBiaXRzIGhlcmUuIFNpbGx5LiA6LSkgKi8gCiAKKwlpcGggPSBza2ItPm5oLmlwaDsKKwlpaGwgPSBpcGgtPmlobCAqIDQ7CisKIAlpZiAoeC0+ZW5jYXApIHsKIAkJc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXAgPSB4LT5lbmNhcDsKLQkJc3RydWN0IHVkcGhkciAqdWg7Ci0KLQkJdWggPSAoc3RydWN0IHVkcGhkciAqKShpcGggKyAxKTsKLQkJZW5jYXBfbGVuID0gKHZvaWQqKWVzcGggLSAodm9pZCopdWg7CisJCXN0cnVjdCB1ZHBoZHIgKnVoID0gKHZvaWQgKikoc2tiLT5uaC5yYXcgKyBpaGwpOwogCiAJCS8qCiAJCSAqIDEpIGlmIHRoZSBOQVQtVCBwZWVyJ3MgSVAgb3IgcG9ydCBjaGFuZ2VkIHRoZW4KQEAgLTI0NiwxMSArMjQ0LDcgQEAKIAogCWlwaC0+cHJvdG9jb2wgPSBuZXh0aGRyWzFdOwogCXBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gYWxlbiAtIHBhZGxlbiAtIDIpOwotCW1lbWNweSh3b3JrYnVmLCBza2ItPm5oLnJhdywgaXBoLT5paGwqNCk7Ci0Jc2tiLT5oLnJhdyA9IHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSArIGVzcC0+Y29uZi5pdmxlbik7Ci0Jc2tiLT5uaC5yYXcgKz0gZW5jYXBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSArIGVzcC0+Y29uZi5pdmxlbjsKLQltZW1jcHkoc2tiLT5uaC5yYXcsIHdvcmtidWYsIGlwaC0+aWhsKjQpOwotCXNrYi0+bmguaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOworCXNrYi0+aC5yYXcgPSBfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCplc3BoKSArIGVzcC0+Y29uZi5pdmxlbikgLSBpaGw7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCBjZGRlOTYzLi4zMTM4N2FiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtNjY2LDMgKzY2Niw0IEBACiB9CiAKIEVYUE9SVF9TWU1CT0woaW5ldF9hZGRyX3R5cGUpOworRVhQT1JUX1NZTUJPTChpcF9kZXZfZmluZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMmEwNDU1OS4uMDE3OTAwMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNzMwLDcgKzczMCw2IEBACiBzdGF0aWMgdm9pZCBpY21wX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7Ci0JdW5zaWduZWQgbG9uZyBpcDsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKQogCQlnb3RvIG91dF9lcnI7CkBAIC03NDIsNyArNzQxLDYgQEAKIAkJZ290byBvdXQ7CiAKIAlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwotCWlwID0gaXBoLT5kYWRkcjsKIAogCXN3aXRjaCAoc2tiLT5oLmljbXBoLT5jb2RlICYgNykgewogCWNhc2UgSUNNUF9SRURJUl9ORVQ6CkBAIC03NTIsNyArNzUwLDggQEAKIAkJICovCiAJY2FzZSBJQ01QX1JFRElSX0hPU1Q6CiAJY2FzZSBJQ01QX1JFRElSX0hPU1RUT1M6Ci0JCWlwX3J0X3JlZGlyZWN0KHNrYi0+bmguaXBoLT5zYWRkciwgaXAsIHNrYi0+aC5pY21waC0+dW4uZ2F0ZXdheSwKKwkJaXBfcnRfcmVkaXJlY3Qoc2tiLT5uaC5pcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJICAgICAgIHNrYi0+aC5pY21waC0+dW4uZ2F0ZXdheSwKIAkJCSAgICAgICBpcGgtPnNhZGRyLCBza2ItPmRldik7CiAJCWJyZWFrOwogICAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IGQ1MTIyMzkuLmFiNjgwYzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTIzNjEsNyArMjM2MSw3IEBACiAJCX0KIAogCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICJcdFx0XHRcdCUwOGxYICU1ZCAlZDolMDhsWFx0XHQlZFxuIiwKKwkJCSAgICJcdFx0XHRcdCUwOFggJTVkICVkOiUwOGxYXHRcdCVkXG4iLAogCQkJICAgaW0tPm11bHRpYWRkciwgaW0tPnVzZXJzLAogCQkJICAgaW0tPnRtX3J1bm5pbmcsIGltLT50bV9ydW5uaW5nID8KIAkJCSAgIGppZmZpZXNfdG9fY2xvY2tfdChpbS0+dGltZXIuZXhwaXJlcy1qaWZmaWVzKSA6IDAsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggMDkyM2FkZDEuLjlmMGJiNTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYworKysgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCiB0b29fbWFueV9ob3BzOgogICAgICAgICAvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovCisgICAgICAgIElQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAgICAgICAgIGljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGNmZjljM2EuLjg1MzhhYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC00MTAsNiArNDEwLDcgQEAKIAluZl9icmlkZ2VfZ2V0KHRvLT5uZl9icmlkZ2UpOwogI2VuZGlmCiAjZW5kaWYKKwlza2JfY29weV9zZWNtYXJrKHRvLCBmcm9tKTsKIH0KIAogLyoKQEAgLTgzOSw3ICs4NDAsNyBAQAogCSAqLwogCWlmICh0cmFuc2hkcmxlbiAmJgogCSAgICBsZW5ndGggKyBmcmFnaGVhZGVybGVuIDw9IG10dSAmJgotCSAgICBydC0+dS5kc3QuZGV2LT5mZWF0dXJlcyYoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfTk9fQ1NVTXxORVRJRl9GX0hXX0NTVU0pICYmCisJICAgIHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9BTExfQ1NVTSAmJgogCSAgICAhZXh0aGRybGVuKQogCQljc3VtbW9kZSA9IENIRUNLU1VNX0hXOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IDk1Mjc4YjIuLjNlZDhiNTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC00NSw3ICs0NSw2IEBACiBzdGF0aWMgaW50IGlwY29tcF9kZWNvbXByZXNzKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBlcnIsIHBsZW4sIGRsZW47Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwY29tcF9kYXRhICppcGNkID0geC0+ZGF0YTsKIAl1OCAqc3RhcnQsICpzY3JhdGNoOwogCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CkBAIC03NCw4ICs3Myw2IEBACiAJCQogCXNrYl9wdXQoc2tiLCBkbGVuIC0gcGxlbik7CiAJbWVtY3B5KHNrYi0+ZGF0YSwgc2NyYXRjaCwgZGxlbik7Ci0JaXBoID0gc2tiLT5uaC5pcGg7Ci0JaXBoLT50b3RfbGVuID0gaHRvbnMoZGxlbiArIGlwaC0+aWhsICogNCk7CiBvdXQ6CQogCXB1dF9jcHUoKTsKIAlyZXR1cm4gZXJyOwpAQCAtODMsMzQgKzgwLDIxIEBACiAKIHN0YXRpYyBpbnQgaXBjb21wX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXU4IG5leHRoZHI7Ci0JaW50IGVyciA9IDA7CisJaW50IGVyciA9IC1FTk9NRU07CiAJc3RydWN0IGlwaGRyICppcGg7Ci0JdW5pb24gewotCQlzdHJ1Y3QgaXBoZHIJaXBoOwotCQljaGFyIAkJYnVmWzYwXTsKLQl9IHRtcF9pcGg7CisJc3RydWN0IGlwX2NvbXBfaGRyICppcGNoOwogCi0KLQlpZiAoKHNrYl9pc19ub25saW5lYXIoc2tiKSB8fCBza2JfY2xvbmVkKHNrYikpICYmCi0JICAgIHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSB7Ci0JICAgIAllcnIgPSAtRU5PTUVNOworCWlmIChza2JfbGluZWFyaXplX2Nvdyhza2IpKQogCSAgICAJZ290byBvdXQ7Ci0JfQogCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJLyogUmVtb3ZlIGlwY29tcCBoZWFkZXIgYW5kIGRlY29tcHJlc3Mgb3JpZ2luYWwgcGF5bG9hZCAqLwkKIAlpcGggPSBza2ItPm5oLmlwaDsKLQltZW1jcHkoJnRtcF9pcGgsIGlwaCwgaXBoLT5paGwgKiA0KTsKLQluZXh0aGRyID0gKih1OCAqKXNrYi0+ZGF0YTsKLQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBfY29tcF9oZHIpKTsKLQlza2ItPm5oLnJhdyArPSBzaXplb2Yoc3RydWN0IGlwX2NvbXBfaGRyKTsKLQltZW1jcHkoc2tiLT5uaC5yYXcsICZ0bXBfaXBoLCB0bXBfaXBoLmlwaC5paGwgKiA0KTsKLQlpcGggPSBza2ItPm5oLmlwaDsKLQlpcGgtPnRvdF9sZW4gPSBodG9ucyhudG9ocyhpcGgtPnRvdF9sZW4pIC0gc2l6ZW9mKHN0cnVjdCBpcF9jb21wX2hkcikpOwotCWlwaC0+cHJvdG9jb2wgPSBuZXh0aGRyOwotCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJaXBjaCA9ICh2b2lkICopc2tiLT5kYXRhOworCWlwaC0+cHJvdG9jb2wgPSBpcGNoLT5uZXh0aGRyOworCXNrYi0+aC5yYXcgPSBza2ItPm5oLnJhdyArIHNpemVvZigqaXBjaCk7CisJX19za2JfcHVsbChza2IsIHNpemVvZigqaXBjaCkpOwogCWVyciA9IGlwY29tcF9kZWNvbXByZXNzKHgsIHNrYik7CiAKIG91dDoJCkBAIC0xNzEsMTAgKzE1NSw4IEBACiAJCWdvdG8gb3V0X29rOwogCX0KIAotCWlmICgoc2tiX2lzX25vbmxpbmVhcihza2IpIHx8IHNrYl9jbG9uZWQoc2tiKSkgJiYKLQkgICAgc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpICE9IDApIHsKKwlpZiAoc2tiX2xpbmVhcml6ZV9jb3coc2tiKSkKIAkJZ290byBvdXRfb2s7Ci0JfQogCQogCWVyciA9IGlwY29tcF9jb21wcmVzcyh4LCBza2IpOwogCWlwaCA9IHNrYi0+bmguaXBoOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBkNDA3MjUzLi5lMWQ3ZjVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtNTUsNiArNTUsMTggQEAKIAkgIG9mIHBhY2tldHMsIGJ1dCB0aGlzIG1hcmsgdmFsdWUgaXMga2VwdCBpbiB0aGUgY29ubnRyYWNrIHNlc3Npb24KIAkgIGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcGFja2V0cy4KIAkKK2NvbmZpZyBJUF9ORl9DT05OVFJBQ0tfU0VDTUFSSworCWJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyAmJiBORVRXT1JLX1NFQ01BUksKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHNlY3VyaXR5IG1hcmtpbmdzIHRvIGJlIGFwcGxpZWQgdG8KKwkgIGNvbm5lY3Rpb25zLiAgVHlwaWNhbGx5IHRoZXkgYXJlIGNvcGllZCB0byBjb25uZWN0aW9ucyBmcm9tCisJICBwYWNrZXRzIHVzaW5nIHRoZSBDT05OU0VDTUFSSyB0YXJnZXQgYW5kIGNvcGllZCBiYWNrIGZyb20KKwkgIGNvbm5lY3Rpb25zIHRvIHBhY2tldHMgd2l0aCB0aGUgc2FtZSB0YXJnZXQsIHdpdGggdGhlIHBhY2tldHMKKwkgIGJlaW5nIG9yaWdpbmFsbHkgbGFiZWxlZCB2aWEgU0VDTUFSSy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCiBjb25maWcgSVBfTkZfQ09OTlRSQUNLX0VWRU5UUwogCWJvb2wgIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIElQX05GX0NPTk5UUkFDSwpAQCAtMTQyLDYgKzE1NCw4IEBACiBjb25maWcgSVBfTkZfQU1BTkRBCiAJdHJpc3RhdGUgIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSworCXNlbGVjdCBURVhUU0VBUkNICisJc2VsZWN0IFRFWFRTRUFSQ0hfS01QCiAJaGVscAogCSAgSWYgeW91IGFyZSBydW5uaW5nIHRoZSBBbWFuZGEgYmFja3VwIHBhY2thZ2UgPGh0dHA6Ly93d3cuYW1hbmRhLm9yZy8+CiAJICBvbiB0aGlzIG1hY2hpbmUgb3IgbWFjaGluZXMgdGhhdCB3aWxsIGJlIE1BU1FVRVJBREVEIHRocm91Z2ggdGhpcwpAQCAtMTgxLDE0ICsxOTUsMjYgQEAKIAkgIFdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBzdXBwb3J0IEguMzIzIG9uIGEgY29ubmVjdGlvbiB0cmFja2luZy9OQVQKIAkgIGZpcmV3YWxsLgogCi0JICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBSQVMsIEZhc3Qtc3RhcnQsIEguMjQ1IHR1bm5lbGxpbmcsIFJUUC9SVENQCi0JICBhbmQgVC4xMjAgYmFzZWQgZGF0YSBhbmQgYXBwbGljYXRpb25zIGluY2x1ZGluZyBhdWRpbywgdmlkZW8sIEZBWCwKLQkgIGNoYXQsIHdoaXRlYm9hcmQsIGZpbGUgdHJhbnNmZXIsIGV0Yy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZQotCSAgc2VlIGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8uCisJICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBSQVMsIEZhc3QgU3RhcnQsIEguMjQ1IFR1bm5lbGxpbmcsIENhbGwKKwkgIEZvcndhcmRpbmcsIFJUUC9SVENQIGFuZCBULjEyMCBiYXNlZCBhdWRpbywgdmlkZW8sIGZheCwgY2hhdCwKKwkgIHdoaXRlYm9hcmQsIGZpbGUgdHJhbnNmZXIsIGV0Yy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZQorCSAgdmlzaXQgaHR0cDovL25hdGgzMjMuc291cmNlZm9yZ2UubmV0Ly4KIAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5ICdNJyBoZXJlIGFuZCByZWFkCiAJICBEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0LiAgSWYgdW5zdXJlLCBzYXkgJ04nLgogCitjb25maWcgSVBfTkZfU0lQCisJdHJpc3RhdGUgIlNJUCBwcm90b2NvbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNJUCBpcyBhbiBhcHBsaWNhdGlvbi1sYXllciBjb250cm9sIHByb3RvY29sIHRoYXQgY2FuIGVzdGFibGlzaCwKKwkgIG1vZGlmeSwgYW5kIHRlcm1pbmF0ZSBtdWx0aW1lZGlhIHNlc3Npb25zIChjb25mZXJlbmNlcykgc3VjaCBhcworCSAgSW50ZXJuZXQgdGVsZXBob255IGNhbGxzLiBXaXRoIHRoZSBpcF9jb25udHJhY2tfc2lwIGFuZAorCSAgdGhlIGlwX25hdF9zaXAgbW9kdWxlcyB5b3UgY2FuIHN1cHBvcnQgdGhlIHByb3RvY29sIG9uIGEgY29ubmVjdGlvbgorCSAgdHJhY2tpbmcvTkFUaW5nIGZpcmV3YWxsLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIElQX05GX1FVRVVFCiAJdHJpc3RhdGUgIklQIFVzZXJzcGFjZSBxdWV1ZWluZyB2aWEgTkVUTElOSyAoT0JTT0xFVEUpIgogCWhlbHAKQEAgLTUwMSw2ICs1MjcsMTIgQEAKIAlkZWZhdWx0IElQX05GX05BVCBpZiBJUF9ORl9IMzIzPXkKIAlkZWZhdWx0IG0gaWYgSVBfTkZfSDMyMz1tCiAKK2NvbmZpZyBJUF9ORl9OQVRfU0lQCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTIT1uICYmIElQX05GX0NPTk5UUkFDSyE9biAmJiBJUF9ORl9OQVQhPW4KKwlkZWZhdWx0IElQX05GX05BVCBpZiBJUF9ORl9TSVA9eQorCWRlZmF1bHQgbSBpZiBJUF9ORl9TSVA9bQorCiAjIG1hbmdsZSArIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9NQU5HTEUKIAl0cmlzdGF0ZSAiUGFja2V0IG1hbmdsaW5nIgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDQ2MWNiMWUuLjNkZWQ0YTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcgQEAKIG9iai0kKENPTkZJR19JUF9ORl9URlRQKSArPSBpcF9jb25udHJhY2tfdGZ0cC5vCiBvYmotJChDT05GSUdfSVBfTkZfRlRQKSArPSBpcF9jb25udHJhY2tfZnRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9JUkMpICs9IGlwX2Nvbm50cmFja19pcmMubworb2JqLSQoQ09ORklHX0lQX05GX1NJUCkgKz0gaXBfY29ubnRyYWNrX3NpcC5vCiBvYmotJChDT05GSUdfSVBfTkZfTkVUQklPU19OUykgKz0gaXBfY29ubnRyYWNrX25ldGJpb3NfbnMubwogCiAjIE5BVCBoZWxwZXJzIApAQCAtNDAsNiArNDEsNyBAQAogb2JqLSQoQ09ORklHX0lQX05GX05BVF9URlRQKSArPSBpcF9uYXRfdGZ0cC5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX0ZUUCkgKz0gaXBfbmF0X2Z0cC5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX0lSQykgKz0gaXBfbmF0X2lyYy5vCitvYmotJChDT05GSUdfSVBfTkZfTkFUX1NJUCkgKz0gaXBfbmF0X3NpcC5vCiAKICMgZ2VuZXJpYyBJUCB0YWJsZXMgCiBvYmotJChDT05GSUdfSVBfTkZfSVBUQUJMRVMpICs9IGlwX3RhYmxlcy5vCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCBhNjA0YjFjLi4wYTdiZDdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMKQEAgLTE3LDMzICsxNywyOSBAQAogICoJdGhpcyB2YWx1ZS4KICAqCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RleHRzZWFyY2guaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+Ci0jaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8bmV0L3VkcC5oPgogCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19hbWFuZGEuaD4KIAogc3RhdGljIHVuc2lnbmVkIGludCBtYXN0ZXJfdGltZW91dCA9IDMwMDsKK3N0YXRpYyBjaGFyICp0c19hbGdvID0gImttcCI7CiAKIE1PRFVMRV9BVVRIT1IoIkJyaWFuIEouIE11cnJlbGwgPG5ldGZpbHRlckBpbnRlcmxpbnguYmMuY2E+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFtYW5kYSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogbW9kdWxlX3BhcmFtKG1hc3Rlcl90aW1lb3V0LCB1aW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWFzdGVyX3RpbWVvdXQsICJ0aW1lb3V0IGZvciB0aGUgbWFzdGVyIGNvbm5lY3Rpb24iKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zW10gPSB7ICJEQVRBICIsICJNRVNHICIsICJJTkRFWCAiIH07Ci0KLS8qIFRoaXMgaXMgc2xvdywgYnV0IGl0J3Mgc2ltcGxlLiAtLVJSICovCi1zdGF0aWMgY2hhciAqYW1hbmRhX2J1ZmZlcjsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYW1hbmRhX2J1ZmZlcl9sb2NrKTsKK21vZHVsZV9wYXJhbSh0c19hbGdvLCBjaGFycCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRzX2FsZ28sICJ0ZXh0c2VhcmNoIGFsZ29yaXRobSB0byB1c2UgKGRlZmF1bHQga21wKSIpOwogCiB1bnNpZ25lZCBpbnQgKCppcF9uYXRfYW1hbmRhX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKQEAgLTUyLDEyICs0OCw0OCBAQAogCQkJCSAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHApOwogRVhQT1JUX1NZTUJPTF9HUEwoaXBfbmF0X2FtYW5kYV9ob29rKTsKIAorZW51bSBhbWFuZGFfc3RyaW5ncyB7CisJU0VBUkNIX0NPTk5FQ1QsCisJU0VBUkNIX05FV0xJTkUsCisJU0VBUkNIX0RBVEEsCisJU0VBUkNIX01FU0csCisJU0VBUkNIX0lOREVYLAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJY2hhcgkJCSpzdHJpbmc7CisJc2l6ZV90CQkJbGVuOworCXN0cnVjdCB0c19jb25maWcJKnRzOworfSBzZWFyY2hbXSA9IHsKKwlbU0VBUkNIX0NPTk5FQ1RdID0geworCQkuc3RyaW5nCT0gIkNPTk5FQ1QgIiwKKwkJLmxlbgk9IDgsCisJfSwKKwlbU0VBUkNIX05FV0xJTkVdID0geworCQkuc3RyaW5nCT0gIlxuIiwKKwkJLmxlbgk9IDEsCisJfSwKKwlbU0VBUkNIX0RBVEFdID0geworCQkuc3RyaW5nCT0gIkRBVEEgIiwKKwkJLmxlbgk9IDUsCisJfSwKKwlbU0VBUkNIX01FU0ddID0geworCQkuc3RyaW5nCT0gIk1FU0cgIiwKKwkJLmxlbgk9IDUsCisJfSwKKwlbU0VBUkNIX0lOREVYXSA9IHsKKwkJLnN0cmluZyA9ICJJTkRFWCAiLAorCQkubGVuCT0gNiwKKwl9LAorfTsKKwogc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICoqcHNrYiwKICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCiB7CisJc3RydWN0IHRzX3N0YXRlIHRzOwogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHA7Ci0JY2hhciAqZGF0YSwgKmRhdGFfbGltaXQsICp0bXA7Ci0JdW5zaWduZWQgaW50IGRhdGFvZmYsIGk7CisJdW5zaWduZWQgaW50IGRhdGFvZmYsIHN0YXJ0LCBzdG9wLCBvZmYsIGk7CisJY2hhciBwYnVmW3NpemVvZigiNjU1MzUiKV0sICp0bXA7CiAJdV9pbnQxNl90IHBvcnQsIGxlbjsKIAlpbnQgcmV0ID0gTkZfQUNDRVBUOwogCkBAIC03NywyOSArMTA5LDM0IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCi0Jc3Bpbl9sb2NrX2JoKCZhbWFuZGFfYnVmZmVyX2xvY2spOwotCXNrYl9jb3B5X2JpdHMoKnBza2IsIGRhdGFvZmYsIGFtYW5kYV9idWZmZXIsICgqcHNrYiktPmxlbiAtIGRhdGFvZmYpOwotCWRhdGEgPSBhbWFuZGFfYnVmZmVyOwotCWRhdGFfbGltaXQgPSBhbWFuZGFfYnVmZmVyICsgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZjsKLQkqZGF0YV9saW1pdCA9ICdcMCc7Ci0KLQkvKiBTZWFyY2ggZm9yIHRoZSBDT05ORUNUIHN0cmluZyAqLwotCWRhdGEgPSBzdHJzdHIoZGF0YSwgIkNPTk5FQ1QgIik7Ci0JaWYgKCFkYXRhKQorCW1lbXNldCgmdHMsIDAsIHNpemVvZih0cykpOworCXN0YXJ0ID0gc2tiX2ZpbmRfdGV4dCgqcHNrYiwgZGF0YW9mZiwgKCpwc2tiKS0+bGVuLAorCQkJICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cywgJnRzKTsKKwlpZiAoc3RhcnQgPT0gVUlOVF9NQVgpCiAJCWdvdG8gb3V0OwotCWRhdGEgKz0gc3RybGVuKCJDT05ORUNUICIpOworCXN0YXJ0ICs9IGRhdGFvZmYgKyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjsKIAotCS8qIE9ubHkgc2VhcmNoIGZpcnN0IGxpbmUuICovCQotCWlmICgodG1wID0gc3RyY2hyKGRhdGEsICdcbicpKSkKLQkJKnRtcCA9ICdcMCc7CisJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisJc3RvcCA9IHNrYl9maW5kX3RleHQoKnBza2IsIHN0YXJ0LCAoKnBza2IpLT5sZW4sCisJCQkgICAgIHNlYXJjaFtTRUFSQ0hfTkVXTElORV0udHMsICZ0cyk7CisJaWYgKHN0b3AgPT0gVUlOVF9NQVgpCisJCWdvdG8gb3V0OworCXN0b3AgKz0gc3RhcnQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb25ucyk7IGkrKykgewotCQljaGFyICptYXRjaCA9IHN0cnN0cihkYXRhLCBjb25uc1tpXSk7Ci0JCWlmICghbWF0Y2gpCisJZm9yIChpID0gU0VBUkNIX0RBVEE7IGkgPD0gU0VBUkNIX0lOREVYOyBpKyspIHsKKwkJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisJCW9mZiA9IHNrYl9maW5kX3RleHQoKnBza2IsIHN0YXJ0LCBzdG9wLCBzZWFyY2hbaV0udHMsICZ0cyk7CisJCWlmIChvZmYgPT0gVUlOVF9NQVgpCiAJCQljb250aW51ZTsKLQkJdG1wID0gZGF0YSA9IG1hdGNoICsgc3RybGVuKGNvbm5zW2ldKTsKLQkJcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKGRhdGEsICZkYXRhLCAxMCk7Ci0JCWxlbiA9IGRhdGEgLSB0bXA7CisJCW9mZiArPSBzdGFydCArIHNlYXJjaFtpXS5sZW47CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YocGJ1ZikgLSAxLCBzdG9wIC0gb2ZmKTsKKwkJaWYgKHNrYl9jb3B5X2JpdHMoKnBza2IsIG9mZiwgcGJ1ZiwgbGVuKSkKKwkJCWJyZWFrOworCQlwYnVmW2xlbl0gPSAnXDAnOworCisJCXBvcnQgPSBzaW1wbGVfc3RydG91bChwYnVmLCAmdG1wLCAxMCk7CisJCWxlbiA9IHRtcCAtIHBidWY7CiAJCWlmIChwb3J0ID09IDAgfHwgbGVuID4gNSkKIAkJCWJyZWFrOwogCkBAIC0xMjUsOCArMTYyLDcgQEAKIAkJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gMHhGRkZGOwogCiAJCWlmIChpcF9uYXRfYW1hbmRhX2hvb2spCi0JCQlyZXQgPSBpcF9uYXRfYW1hbmRhX2hvb2socHNrYiwgY3RpbmZvLAotCQkJCQkJIHRtcCAtIGFtYW5kYV9idWZmZXIsCisJCQlyZXQgPSBpcF9uYXRfYW1hbmRhX2hvb2socHNrYiwgY3RpbmZvLCBvZmYgLSBkYXRhb2ZmLAogCQkJCQkJIGxlbiwgZXhwKTsKIAkJZWxzZSBpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgIT0gMCkKIAkJCXJldCA9IE5GX0RST1A7CkBAIC0xMzQsMTIgKzE3MCwxMSBAQAogCX0KIAogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhbWFuZGFfYnVmZmVyX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXBfY29ubnRyYWNrX2hlbHBlciBhbWFuZGFfaGVscGVyID0gewotCS5tYXhfZXhwZWN0ZWQgPSBBUlJBWV9TSVpFKGNvbm5zKSwKKwkubWF4X2V4cGVjdGVkID0gMywKIAkudGltZW91dCA9IDE4MCwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuaGVscCA9IGhlbHAsCkBAIC0xNTUsMjYgKzE5MCwzNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfY29ubnRyYWNrX2FtYW5kYV9maW5pKHZvaWQpCiB7CisJaW50IGk7CisKIAlpcF9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJmFtYW5kYV9oZWxwZXIpOwotCWtmcmVlKGFtYW5kYV9idWZmZXIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlYXJjaCk7IGkrKykKKwkJdGV4dHNlYXJjaF9kZXN0cm95KHNlYXJjaFtpXS50cyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGlwX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKQogewotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAotCWFtYW5kYV9idWZmZXIgPSBrbWFsbG9jKDY1NTM2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFtYW5kYV9idWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0ID0gaXBfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1hbmRhX2hlbHBlcik7Ci0JaWYgKHJldCA8IDApIHsKLQkJa2ZyZWUoYW1hbmRhX2J1ZmZlcik7Ci0JCXJldHVybiByZXQ7CisJcmV0ID0gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZWFyY2gpOyBpKyspIHsKKwkJc2VhcmNoW2ldLnRzID0gdGV4dHNlYXJjaF9wcmVwYXJlKHRzX2FsZ28sIHNlYXJjaFtpXS5zdHJpbmcsCisJCQkJCQkgIHNlYXJjaFtpXS5sZW4sCisJCQkJCQkgIEdGUF9LRVJORUwsIFRTX0FVVE9MT0FEKTsKKwkJaWYgKHNlYXJjaFtpXS50cyA9PSBOVUxMKQorCQkJZ290byBlcnI7CiAJfQorCXJldCA9IGlwX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmFtYW5kYV9oZWxwZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKIAlyZXR1cm4gMDsKIAotCitlcnI6CisJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChzZWFyY2hbaV0udHMpCisJCQl0ZXh0c2VhcmNoX2Rlc3Ryb3koc2VhcmNoW2ldLnRzKTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogbW9kdWxlX2luaXQoaXBfY29ubnRyYWNrX2FtYW5kYV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKaW5kZXggYTI5N2RhNy4uN2U0Y2Y5YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKQEAgLTcyNCw2ICs3MjQsOSBAQAogCQkvKiB0aGlzIGlzIHVnbHksIGJ1dCB0aGVyZSBpcyBubyBvdGhlciBwbGFjZSB3aGVyZSB0byBwdXQgaXQgKi8KIAkJY29ubnRyYWNrLT5uYXQubWFzcV9pbmRleCA9IGV4cC0+bWFzdGVyLT5uYXQubWFzcV9pbmRleDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU0VDTUFSSworCQljb25udHJhY2stPnNlY21hcmsgPSBleHAtPm1hc3Rlci0+c2VjbWFyazsKKyNlbmRpZgogCQluZl9jb25udHJhY2tfZ2V0KCZjb25udHJhY2stPm1hc3Rlci0+Y3RfZ2VuZXJhbCk7CiAJCUNPTk5UUkFDS19TVEFUX0lOQyhleHBlY3RfbmV3KTsKIAl9IGVsc2UgewpAQCAtMTEzMCw2ICsxMTMzLDEyIEBACiAKIAl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAKKwkvKiBPbmx5IHVwZGF0ZSBpZiB0aGlzIGlzIG5vdCBhIGZpeGVkIHRpbWVvdXQgKi8KKwlpZiAodGVzdF9iaXQoSVBTX0ZJWEVEX1RJTUVPVVRfQklULCAmY3QtPnN0YXR1cykpIHsKKwkJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CisJCXJldHVybjsKKwl9CisKIAkvKiBJZiBub3QgaW4gaGFzaCB0YWJsZSwgdGltZXIgd2lsbCBub3QgYmUgYWN0aXZlIHlldCAqLwogCWlmICghaXNfY29uZmlybWVkKGN0KSkgewogCQljdC0+dGltZW91dC5leHBpcmVzID0gZXh0cmFfamlmZmllczsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCmluZGV4IDNlNTQyYmYuLjRkY2Y1MjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYwpAQCAtNTYsMzcgKzU2LDQ4IEBACiBzdGF0aWMgaW50IHRyeV9lcHN2X3Jlc3BvbnNlKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCB1X2ludDMyX3QgW10sIGNoYXIpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cF9zZWFyY2ggewotCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiAJY29uc3QgY2hhciAqcGF0dGVybjsKIAlzaXplX3QgcGxlbjsKIAljaGFyIHNraXA7CiAJY2hhciB0ZXJtOwogCWVudW0gaXBfY3RfZnRwX3R5cGUgZnRwdHlwZTsKIAlpbnQgKCpnZXRudW0pKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCB1X2ludDMyX3RbXSwgY2hhcik7Ci19IHNlYXJjaFtdID0gewotCXsKLQkJSVBfQ1RfRElSX09SSUdJTkFMLAotCQkiUE9SVCIsCXNpemVvZigiUE9SVCIpIC0gMSwgJyAnLCAnXHInLAotCQlJUF9DVF9GVFBfUE9SVCwKLQkJdHJ5X3JmYzk1OSwKK30gc2VhcmNoW0lQX0NUX0RJUl9NQVhdWzJdID0geworCVtJUF9DVF9ESVJfT1JJR0lOQUxdID0geworCQl7CisJCQkucGF0dGVybgk9ICAiUE9SVCIsCisJCQkucGxlbgkJPSBzaXplb2YoIlBPUlQiKSAtIDEsCisJCQkuc2tpcAkJPSAnICcsCisJCQkudGVybQkJPSAnXHInLAorCQkJLmZ0cHR5cGUJPSBJUF9DVF9GVFBfUE9SVCwKKwkJCS5nZXRudW0JCT0gdHJ5X3JmYzk1OSwKKwkJfSwKKwkJeworCQkJLnBhdHRlcm4JPSAiRVBSVCIsCisJCQkucGxlbgkJPSBzaXplb2YoIkVQUlQiKSAtIDEsCisJCQkuc2tpcAkJPSAnICcsCisJCQkudGVybQkJPSAnXHInLAorCQkJLmZ0cHR5cGUJPSBJUF9DVF9GVFBfRVBSVCwKKwkJCS5nZXRudW0JCT0gdHJ5X2VwcnQsCisJCX0sCiAJfSwKLQl7Ci0JCUlQX0NUX0RJUl9SRVBMWSwKLQkJIjIyNyAiLAlzaXplb2YoIjIyNyAiKSAtIDEsICcoJywgJyknLAotCQlJUF9DVF9GVFBfUEFTViwKLQkJdHJ5X3JmYzk1OSwKLQl9LAotCXsKLQkJSVBfQ1RfRElSX09SSUdJTkFMLAotCQkiRVBSVCIsIHNpemVvZigiRVBSVCIpIC0gMSwgJyAnLCAnXHInLAotCQlJUF9DVF9GVFBfRVBSVCwKLQkJdHJ5X2VwcnQsCi0JfSwKLQl7Ci0JCUlQX0NUX0RJUl9SRVBMWSwKLQkJIjIyOSAiLCBzaXplb2YoIjIyOSAiKSAtIDEsICcoJywgJyknLAotCQlJUF9DVF9GVFBfRVBTViwKLQkJdHJ5X2Vwc3ZfcmVzcG9uc2UsCisJW0lQX0NUX0RJUl9SRVBMWV0gPSB7CisJCXsKKwkJCS5wYXR0ZXJuCT0gIjIyNyAiLAorCQkJLnBsZW4JCT0gc2l6ZW9mKCIyMjcgIikgLSAxLAorCQkJLnNraXAJCT0gJygnLAorCQkJLnRlcm0JCT0gJyknLAorCQkJLmZ0cHR5cGUJPSBJUF9DVF9GVFBfUEFTViwKKwkJCS5nZXRudW0JCT0gdHJ5X3JmYzk1OSwKKwkJfSwKKwkJeworCQkJLnBhdHRlcm4JPSAiMjI5ICIsCisJCQkucGxlbgkJPSBzaXplb2YoIjIyOSAiKSAtIDEsCisJCQkuc2tpcAkJPSAnKCcsCisJCQkudGVybQkJPSAnKScsCisJCQkuZnRwdHlwZQk9IElQX0NUX0ZUUF9FUFNWLAorCQkJLmdldG51bQkJPSB0cnlfZXBzdl9yZXNwb25zZSwKKwkJfSwKIAl9LAogfTsKIApAQCAtMzQ2LDE3ICszNTcsMTUgQEAKIAlhcnJheVsyXSA9IChudG9obChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwKSA+PiA4KSAmIDB4RkY7CiAJYXJyYXlbM10gPSBudG9obChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwKSAmIDB4RkY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZWFyY2gpOyBpKyspIHsKLQkJaWYgKHNlYXJjaFtpXS5kaXIgIT0gZGlyKSBjb250aW51ZTsKLQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlYXJjaFtkaXJdKTsgaSsrKSB7CiAJCWZvdW5kID0gZmluZF9wYXR0ZXJuKGZiX3B0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKLQkJCQkgICAgIHNlYXJjaFtpXS5wYXR0ZXJuLAotCQkJCSAgICAgc2VhcmNoW2ldLnBsZW4sCi0JCQkJICAgICBzZWFyY2hbaV0uc2tpcCwKLQkJCQkgICAgIHNlYXJjaFtpXS50ZXJtLAorCQkJCSAgICAgc2VhcmNoW2Rpcl1baV0ucGF0dGVybiwKKwkJCQkgICAgIHNlYXJjaFtkaXJdW2ldLnBsZW4sCisJCQkJICAgICBzZWFyY2hbZGlyXVtpXS5za2lwLAorCQkJCSAgICAgc2VhcmNoW2Rpcl1baV0udGVybSwKIAkJCQkgICAgICZtYXRjaG9mZiwgJm1hdGNobGVuLAogCQkJCSAgICAgYXJyYXksCi0JCQkJICAgICBzZWFyY2hbaV0uZ2V0bnVtKTsKKwkJCQkgICAgIHNlYXJjaFtkaXJdW2ldLmdldG51bSk7CiAJCWlmIChmb3VuZCkgYnJlYWs7CiAJfQogCWlmIChmb3VuZCA9PSAtMSkgewpAQCAtMzY2LDcgKzM3NSw3IEBACiAJCSAgIHRoaXMgY2FzZS4gKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50aygiY29ubnRyYWNrX2Z0cDogcGFydGlhbCAlcyAldSsldVxuIiwKLQkJCSAgICAgICBzZWFyY2hbaV0ucGF0dGVybiwKKwkJCSAgICAgICBzZWFyY2hbZGlyXVtpXS5wYXR0ZXJuLAogCQkJICAgICAgIG50b2hsKHRoLT5zZXEpLCBkYXRhbGVuKTsKIAkJcmV0ID0gTkZfRFJPUDsKIAkJZ290byBvdXQ7CkBAIC00MjYsNyArNDM1LDcgQEAKIAkvKiBOb3csIE5BVCBtaWdodCB3YW50IHRvIG1hbmdsZSB0aGUgcGFja2V0LCBhbmQgcmVnaXN0ZXIgdGhlCiAJICogKHBvc3NpYmx5IGNoYW5nZWQpIGV4cGVjdGF0aW9uIGl0c2VsZi4gKi8KIAlpZiAoaXBfbmF0X2Z0cF9ob29rKQotCQlyZXQgPSBpcF9uYXRfZnRwX2hvb2socHNrYiwgY3RpbmZvLCBzZWFyY2hbaV0uZnRwdHlwZSwKKwkJcmV0ID0gaXBfbmF0X2Z0cF9ob29rKHBza2IsIGN0aW5mbywgc2VhcmNoW2Rpcl1baV0uZnRwdHlwZSwKIAkJCQkgICAgICBtYXRjaG9mZiwgbWF0Y2hsZW4sIGV4cCwgJnNlcSk7CiAJZWxzZSB7CiAJCS8qIENhbid0IGV4cGVjdCB0aGlzPyAgQmVzdCB0byBkcm9wIHBhY2tldCBub3cuICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKaW5kZXggNTE4ZjU4MS4uMDY2NTY3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KIAogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awpAQCAtMzgsNiArNDAsMTIgQEAKIG1vZHVsZV9wYXJhbShna3JvdXRlZF9vbmx5LCBpbnQsIDA2MDApOwogTU9EVUxFX1BBUk1fREVTQyhna3JvdXRlZF9vbmx5LCAib25seSBhY2NlcHQgY2FsbHMgZnJvbSBnYXRla2VlcGVyIik7CiAKK3N0YXRpYyBpbnQgY2FsbGZvcndhcmRfZmlsdGVyID0gMTsKK21vZHVsZV9wYXJhbShjYWxsZm9yd2FyZF9maWx0ZXIsIGJvb2wsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhjYWxsZm9yd2FyZF9maWx0ZXIsICJvbmx5IGNyZWF0ZSBjYWxsIGZvcndhcmRpbmcgZXhwZWN0YXRpb25zICIKKwkJICAgICAgICAgICAgICAgICAgICAgImlmIGJvdGggZW5kcG9pbnRzIGFyZSBvbiBkaWZmZXJlbnQgc2lkZXMgIgorCQkJCSAgICAgIihkZXRlcm1pbmVkIGJ5IHJvdXRpbmcgaW5mb3JtYXRpb24pIik7CisKIC8qIEhvb2tzIGZvciBOQVQgKi8KIGludCAoKnNldF9oMjQ1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCiAJCQkgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCkBAIC03Nyw2ICs4NSwxMiBAQAogCQkgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCiAJCSAgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKIAkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOworaW50ICgqbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCXN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQl1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAorCQkJCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogZXhwKTsKIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAogCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCiAJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLApAQCAtNjgzLDYgKzY5Nyw5MiBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIEZvcndhcmRpbmcgZGVjbGFyYXRpb24gKi8KK3ZvaWQgaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCSAgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGV4cGVjdF9jYWxsZm9yd2FyZGluZyhzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkcikKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCByZXQgPSAwOworCXVfaW50MzJfdCBpcDsKKwl1X2ludDE2X3QgcG9ydDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwID0gTlVMTDsKKworCS8qIFJlYWQgYWx0ZXJuYXRpdmVBZGRyZXNzICovCisJaWYgKCFnZXRfaDIyNV9hZGRyKCpkYXRhLCBhZGRyLCAmaXAsICZwb3J0KSB8fCBwb3J0ID09IDApCisJCXJldHVybiAwOworCisJLyogSWYgdGhlIGNhbGxpbmcgcGFydHkgaXMgb24gdGhlIHNhbWUgc2lkZSBvZiB0aGUgZm9yd2FyZC10byBwYXJ0eSwKKwkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRoZSBzZWNvbmQgY2FsbCAqLworCWlmIChjYWxsZm9yd2FyZF9maWx0ZXIpIHsKKwkJc3RydWN0IHJ0YWJsZSAqcnQxLCAqcnQyOworCQlzdHJ1Y3QgZmxvd2kgZmwxID0geworCQkJLmZsNF9kc3QgPSBpcCwKKwkJfTsKKwkJc3RydWN0IGZsb3dpIGZsMiA9IHsKKwkJCS5mbDRfZHN0ID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXAsCisJCX07CisKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJnJ0MSwgJmZsMSkgPT0gMCkgeworCQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJnJ0MiwgJmZsMikgPT0gMCkgeworCQkJCWlmIChydDEtPnJ0X2dhdGV3YXkgPT0gcnQyLT5ydF9nYXRld2F5ICYmCisJCQkJICAgIHJ0MS0+dS5kc3QuZGV2ICA9PSBydDItPnUuZHN0LmRldikKKwkJCQkJcmV0ID0gMTsKKwkJCQlkc3RfcmVsZWFzZSgmcnQyLT51LmRzdCk7CisJCQl9CisJCQlkc3RfcmVsZWFzZSgmcnQxLT51LmRzdCk7CisJCX0KKwkJaWYgKHJldCkgeworCQkJREVCVUdQKCJpcF9jdF9xOTMxOiBDYWxsIEZvcndhcmRpbmcgbm90IHRyYWNrZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBDcmVhdGUgZXhwZWN0IGZvciB0aGUgc2Vjb25kIGNhbGwgbGVnICovCisJaWYgKChleHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCWV4cC0+dHVwbGUuc3JjLmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCA9IDA7CisJZXhwLT50dXBsZS5kc3QuaXAgPSBpcDsKKwlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMocG9ydCk7CisJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKwlleHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOworCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKKwlleHAtPmZsYWdzID0gMDsKKworCWlmIChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwICE9CisJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwICYmIG5hdF9jYWxsZm9yd2FyZGluZ19ob29rKSB7CisJCS8qIE5lZWQgTkFUICovCisJCXJldCA9IG5hdF9jYWxsZm9yd2FyZGluZ19ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICAgIGFkZHIsIHBvcnQsIGV4cCk7CisJfSBlbHNlIHsJCS8qIENvbm50cmFjayBvbmx5ICovCisJCWV4cC0+ZXhwZWN0Zm4gPSBpcF9jb25udHJhY2tfcTkzMV9leHBlY3Q7CisKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKKwkJCURFQlVHUCgiaXBfY3RfcTkzMTogZXhwZWN0IENhbGwgRm9yd2FyZGluZyAiCisJCQkgICAgICAgIiV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCQkJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5zcmMuaXApLAorCQkJICAgICAgIG50b2hzKGV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCQkJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5kc3QuaXApLAorCQkJICAgICAgIG50b2hzKGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQpKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtMTsKKwl9CisKKwlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCisJcmV0dXJuIHJldDsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHByb2Nlc3Nfc2V0dXAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKIAkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKQEAgLTg3OCw2ICs5NzgsMTUgQEAKIAogCURFQlVHUCgiaXBfY3RfcTkzMTogRmFjaWxpdHlcbiIpOwogCisJaWYgKGZhY2lsaXR5LT5yZWFzb24uY2hvaWNlID09IGVGYWNpbGl0eVJlYXNvbl9jYWxsRm9yd2FyZGVkKSB7CisJCWlmIChmYWNpbGl0eS0+b3B0aW9ucyAmIGVGYWNpbGl0eV9VVUlFX2FsdGVybmF0aXZlQWRkcmVzcykKKwkJCXJldHVybiBleHBlY3RfY2FsbGZvcndhcmRpbmcocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJCSAgICAgZGF0YW9mZiwKKwkJCQkJCSAgICAgJmZhY2lsaXR5LT4KKwkJCQkJCSAgICAgYWx0ZXJuYXRpdmVBZGRyZXNzKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGZhY2lsaXR5LT5vcHRpb25zICYgZUZhY2lsaXR5X1VVSUVfaDI0NUFkZHJlc3MpIHsKIAkJcmV0ID0gZXhwZWN0X2gyNDUocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKIAkJCQkgICZmYWNpbGl0eS0+aDI0NUFkZHJlc3MpOwpAQCAtMTY3Nyw3ICsxNzg2LDYgQEAKIAkJZmluaSgpOwogCQlyZXR1cm4gcmV0OwogCX0KLQogCURFQlVHUCgiaXBfY3RfaDMyMzogaW5pdCBzdWNjZXNzXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OTYsNiArMTgwNCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChuYXRfcnRwX3J0Y3BfaG9vayk7CiBFWFBPUlRfU1lNQk9MX0dQTChuYXRfdDEyMF9ob29rKTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5hdF9oMjQ1X2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X2NhbGxmb3J3YXJkaW5nX2hvb2spOwogRVhQT1JUX1NZTUJPTF9HUEwobmF0X3E5MzFfaG9vayk7CiAKIE1PRFVMRV9BVVRIT1IoIkppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuYwppbmRleCAwMjJjNDdiLi40YjM1OTYxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5jCkBAIC0xLDQgKzEsNCBAQAotLyogR2VuZXJhdGVkIGJ5IEppbmcgTWluIFpoYW8ncyBBU04uMSBwYXJzZXIsIE1hciAxNSAyMDA2CisvKiBHZW5lcmF0ZWQgYnkgSmluZyBNaW4gWmhhbydzIEFTTi4xIHBhcnNlciwgQXByIDIwIDIwMDYKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICoKQEAgLTEwNjksOCArMTA2OSw4IEBACiAKIHN0YXRpYyBmaWVsZF90IF9GYWNpbGl0eV9VVUlFW10gPSB7CS8qIFNFUVVFTkNFICovCiAJe0ZOQU1FKCJwcm90b2NvbElkZW50aWZpZXIiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAotCXtGTkFNRSgiYWx0ZXJuYXRpdmVBZGRyZXNzIikgQ0hPSUNFLCAzLCA3LCA3LCBTS0lQIHwgRVhUIHwgT1BULCAwLAotCSBfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJhbHRlcm5hdGl2ZUFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCwKKwkgb2Zmc2V0b2YoRmFjaWxpdHlfVVVJRSwgYWx0ZXJuYXRpdmVBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LAogCXtGTkFNRSgiYWx0ZXJuYXRpdmVBbGlhc0FkZHJlc3MiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKIAkgX0ZhY2lsaXR5X1VVSUVfYWx0ZXJuYXRpdmVBbGlhc0FkZHJlc3N9LAogCXtGTkFNRSgiY29uZmVyZW5jZUlEIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDAxYmQ3Y2EuLjMzODkxYmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCkBAIC0zOTksMzggKzM5OSw1NCBAQAogc3RhdGljIGludCBjdG5ldGxpbmtfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJREVCVUdQKCJlbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChjYi0+YXJnc1sxXSkKKwkJaXBfY29ubnRyYWNrX3B1dCgoc3RydWN0IGlwX2Nvbm50cmFjayAqKWNiLT5hcmdzWzFdKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogY3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gTlVMTDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwgKmxhc3Q7CiAJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBsaXN0X2hlYWQgKmk7Ci0JdV9pbnQzMl90ICppZCA9ICh1X2ludDMyX3QgKikgJmNiLT5hcmdzWzFdOwogCiAJREVCVUdQKCJlbnRlcmVkICVzLCBsYXN0IGJ1Y2tldD0lbHUgaWQ9JXVcbiIsIF9fRlVOQ1RJT05fXywgCiAJCQljYi0+YXJnc1swXSwgKmlkKTsKIAogCXJlYWRfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwotCWZvciAoOyBjYi0+YXJnc1swXSA8IGlwX2Nvbm50cmFja19odGFibGVfc2l6ZTsgY2ItPmFyZ3NbMF0rKywgKmlkID0gMCkgeworCWZvciAoOyBjYi0+YXJnc1swXSA8IGlwX2Nvbm50cmFja19odGFibGVfc2l6ZTsgY2ItPmFyZ3NbMF0rKykgeworcmVzdGFydDoKKwkJbGFzdCA9IChzdHJ1Y3QgaXBfY29ubnRyYWNrICopY2ItPmFyZ3NbMV07CiAJCWxpc3RfZm9yX2VhY2hfcHJldihpLCAmaXBfY29ubnRyYWNrX2hhc2hbY2ItPmFyZ3NbMF1dKSB7CiAJCQloID0gKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGVfaGFzaCAqKSBpOwogCQkJaWYgKERJUkVDVElPTihoKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCiAJCQkJY29udGludWU7CiAJCQljdCA9IHR1cGxlaGFzaF90b19jdHJhY2soaCk7Ci0JCQlpZiAoY3QtPmlkIDw9ICppZCkKLQkJCQljb250aW51ZTsKKwkJCWlmIChsYXN0ICE9IE5VTEwpIHsKKwkJCQlpZiAoY3QgPT0gbGFzdCkgeworCQkJCQlpcF9jb25udHJhY2tfcHV0KGxhc3QpOworCQkJCQljYi0+YXJnc1sxXSA9IDA7CisJCQkJCWxhc3QgPSBOVUxMOworCQkJCX0gZWxzZQorCQkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmIChjdG5ldGxpbmtfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgIAljYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCQlJUENUTkxfTVNHX0NUX05FVywKLQkJCQkJCTEsIGN0KSA8IDApCisJCQkJCQkxLCBjdCkgPCAwKSB7CisJCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOworCQkJCWNiLT5hcmdzWzFdID0gKHVuc2lnbmVkIGxvbmcpY3Q7CiAJCQkJZ290byBvdXQ7Ci0JCQkqaWQgPSBjdC0+aWQ7CisJCQl9CisJCX0KKwkJaWYgKGxhc3QgIT0gTlVMTCkgeworCQkJaXBfY29ubnRyYWNrX3B1dChsYXN0KTsKKwkJCWNiLT5hcmdzWzFdID0gMDsKKwkJCWdvdG8gcmVzdGFydDsKIAkJfQogCX0KLW91dDoJCitvdXQ6CiAJcmVhZF91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCURFQlVHUCgibGVhdmluZywgbGFzdCBidWNrZXQ9JWx1IGlkPSV1XG4iLCBjYi0+YXJnc1swXSwgKmlkKTsKQEAgLTYyOSw3ICs2NDUsNyBAQAogfTsKIAogc3RhdGljIGlubGluZSBpbnQKLWN0bmV0bGlua19wYXJzZV9uYXQoc3RydWN0IG5mYXR0ciAqY2RhW10sCitjdG5ldGxpbmtfcGFyc2VfbmF0KHN0cnVjdCBuZmF0dHIgKm5hdCwKIAkJICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCBzdHJ1Y3QgaXBfbmF0X3JhbmdlICpyYW5nZSkKIHsKIAlzdHJ1Y3QgbmZhdHRyICp0YltDVEFfTkFUX01BWF07CkBAIC02MzksNyArNjU1LDcgQEAKIAogCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwogCQotCW5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIENUQV9OQVRfTUFYLCBjZGFbQ1RBX05BVC0xXSk7CisJbmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX05BVF9NQVgsIG5hdCk7CiAKIAlpZiAobmZhdHRyX2JhZF9zaXplKHRiLCBDVEFfTkFUX01BWCwgY3RhX21pbl9uYXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg1NCwzOSArODcwLDMwIEBACiAJCS8qIEFTU1VSRUQgYml0IGNhbiBvbmx5IGJlIHNldCAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjZGFbQ1RBX05BVC0xXSkgeworCWlmIChjZGFbQ1RBX05BVF9TUkMtMV0gfHwgY2RhW0NUQV9OQVRfRFNULTFdKSB7CiAjaWZuZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECiAJCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKLQkJdW5zaWduZWQgaW50IGhvb2tudW07CiAJCXN0cnVjdCBpcF9uYXRfcmFuZ2UgcmFuZ2U7CiAKLQkJaWYgKGN0bmV0bGlua19wYXJzZV9uYXQoY2RhLCBjdCwgJnJhbmdlKSA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlERUJVR1AoIk5BVDogJXUuJXUuJXUuJXUtJXUuJXUuJXUuJXU6JXUtJXVcbiIsIAotCQkgICAgICAgTklQUVVBRChyYW5nZS5taW5faXApLCBOSVBRVUFEKHJhbmdlLm1heF9pcCksCi0JCSAgICAgICBodG9ucyhyYW5nZS5taW4uYWxsKSwgaHRvbnMocmFuZ2UubWF4LmFsbCkpOwotCQkKLQkJLyogVGhpcyBpcyB0cmlja3kgYnV0IGl0IHdvcmtzLiBpcF9uYXRfc2V0dXBfaW5mbyBuZWVkcyB0aGUKLQkJICogaG9vayBudW1iZXIgYXMgcGFyYW1ldGVyLCBzbyBsZXQncyBkbyB0aGUgY29ycmVjdCAKLQkJICogY29udmVyc2lvbiBhbmQgcnVuIGF3YXkgKi8KLQkJaWYgKHN0YXR1cyAmIElQU19TUkNfTkFUX0RPTkUpCi0JCQlob29rbnVtID0gTkZfSVBfUE9TVF9ST1VUSU5HOyAvKiBJUF9OQVRfTUFOSVBfU1JDICovCi0JCWVsc2UgaWYgKHN0YXR1cyAmIElQU19EU1RfTkFUX0RPTkUpCi0JCQlob29rbnVtID0gTkZfSVBfUFJFX1JPVVRJTkc7ICAvKiBJUF9OQVRfTUFOSVBfRFNUICovCi0JCWVsc2UgCi0JCQlyZXR1cm4gLUVJTlZBTDsgLyogTWlzc2luZyBOQVQgZmxhZ3MgKi8KLQotCQlERUJVR1AoIk5BVCBzdGF0dXM6ICVsdVxuIiwgCi0JCSAgICAgICBzdGF0dXMgJiAoSVBTX05BVF9NQVNLIHwgSVBTX05BVF9ET05FX01BU0spKTsKLQkJCi0JCWlmIChpcF9uYXRfaW5pdGlhbGl6ZWQoY3QsIEhPT0syTUFOSVAoaG9va251bSkpKQotCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCWlwX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIGhvb2tudW0pOwotCi0gICAgICAgICAgICAgICAgREVCVUdQKCJOQVQgc3RhdHVzIGFmdGVyIHNldHVwX2luZm86ICVsdVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3QtPnN0YXR1cyAmIChJUFNfTkFUX01BU0sgfCBJUFNfTkFUX0RPTkVfTUFTSykpOworCQlpZiAoY2RhW0NUQV9OQVRfRFNULTFdKSB7CisJCQlpZiAoY3RuZXRsaW5rX3BhcnNlX25hdChjZGFbQ1RBX05BVF9EU1QtMV0sIGN0LAorCQkJCQkJJnJhbmdlKSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoaXBfbmF0X2luaXRpYWxpemVkKGN0LAorCQkJCQkgICAgICAgSE9PSzJNQU5JUChORl9JUF9QUkVfUk9VVElORykpKQorCQkJCXJldHVybiAtRUVYSVNUOworCQkJaXBfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgTkZfSVBfUFJFX1JPVVRJTkcpOworCQl9CisJCWlmIChjZGFbQ1RBX05BVF9TUkMtMV0pIHsKKwkJCWlmIChjdG5ldGxpbmtfcGFyc2VfbmF0KGNkYVtDVEFfTkFUX1NSQy0xXSwgY3QsCisJCQkJCQkmcmFuZ2UpIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChpcF9uYXRfaW5pdGlhbGl6ZWQoY3QsCisJCQkJCSAgICAgICBIT09LMk1BTklQKE5GX0lQX1BPU1RfUk9VVElORykpKQorCQkJCXJldHVybiAtRUVYSVNUOworCQkJaXBfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgTkZfSVBfUE9TVF9ST1VUSU5HKTsKKwkJfQogI2VuZGlmCiAJfQogCkBAIC0xMTA2LDcgKzExMTMsNyBAQAogCS8qIGltcGxpY2l0ICdlbHNlJyAqLwogCiAJLyogd2Ugb25seSBhbGxvdyBuYXQgY29uZmlnIGZvciBuZXcgY29ubnRyYWNrcyAqLwotCWlmIChjZGFbQ1RBX05BVC0xXSkgeworCWlmIChjZGFbQ1RBX05BVF9TUkMtMV0gfHwgY2RhW0NUQV9OQVRfRFNULTFdKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCA1Njc5NDc5Li4yMWVlMTI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMKQEAgLTc3LDEwICs3NywxMCBAQAogfQogCiAvKiBsb29rIHVwIHRoZSBzb3VyY2Uga2V5IGZvciBhIGdpdmVuIHR1cGxlICovCi1zdGF0aWMgdV9pbnQzMl90IGdyZV9rZXltYXBfbG9va3VwKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQpCitzdGF0aWMgX19iZTE2IGdyZV9rZXltYXBfbG9va3VwKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQpCiB7CiAJc3RydWN0IGlwX2N0X2dyZV9rZXltYXAgKmttOwotCXVfaW50MzJfdCBrZXkgPSAwOworCV9fYmUxNiBrZXkgPSAwOwogCiAJcmVhZF9sb2NrX2JoKCZpcF9jdF9ncmVfbG9jayk7CiAJa20gPSBMSVNUX0ZJTkQoJmdyZV9rZXltYXBfbGlzdCwgZ3JlX2tleV9jbXBmbiwKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQkJICAgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJc3RydWN0IGdyZV9oZHJfcHB0cCBfcGdyZWhkciwgKnBncmVoZHI7Ci0JdV9pbnQzMl90IHNyY2tleTsKKwlfX2JlMTYgc3Jja2V5OwogCXN0cnVjdCBncmVfaGRyIF9ncmVoZHIsICpncmVoZHI7CiAKIAkvKiBmaXJzdCBvbmx5IGRlbGluZWFyaXplIG9sZCBSRkMxNzAxIEdSRSBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggZDhiMTRhOS4uMjNmMWM1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCX0KIAogCS8qIFNlZSBpcF9jb25udHJhY2tfcHJvdG9fdGNwLmMgKi8KLQlpZiAoaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORyAmJgorCWlmIChpcF9jb25udHJhY2tfY2hlY2tzdW0gJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORyAmJgogCSAgICBuZl9pcF9jaGVja3N1bShza2IsIGhvb2tudW0sIHNrYi0+bmguaXBoLT5paGwgKiA0LCAwKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggMDYyYjI1Mi4uYzVjMmNlNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC04NzAsNyArODcwLDcgQEAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqLwogCS8qIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJaWYgKGlwX2Nvbm50cmFja19jaGVja3N1bSAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgaXBoLT5paGwgKiA0LCBJUFBST1RPX1RDUCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKaW5kZXggNzA4OTk4Ni4uOWIyYzE2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkgKiBiZWNhdXNlIHRoZSBzZW1hbnRpYyBvZiBDSEVDS1NVTV9IVyBpcyBkaWZmZXJlbnQgdGhlcmUgCiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KLQlpZiAoaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORyAmJgorCWlmIChpcF9jb25udHJhY2tfY2hlY2tzdW0gJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORyAmJgogCSAgICBuZl9pcF9jaGVja3N1bShza2IsIGhvb2tudW0sIGlwaC0+aWhsICogNCwgSVBQUk9UT19VRFApKSB7CiAJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1VEUCkpCiAJCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3NpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjODdjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3NpcC5jCkBAIC0wLDAgKzEsNDcxIEBACisvKiBTSVAgZXh0ZW5zaW9uIGZvciBJUCBjb25uZWN0aW9uIHRyYWNraW5nLgorICoKKyAqIChDKSAyMDA1IGJ5IENocmlzdGlhbiBIZW50c2NoZWwgPGNoZW50c2NoZWxAYXJuZXQuY29tLmFyPgorICogYmFzZWQgb24gUlIncyBpcF9jb25udHJhY2tfZnRwLmMgYW5kIG90aGVyIG1vZHVsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2lwLmg+CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIEhlbnRzY2hlbCA8Y2hlbnRzY2hlbEBhcm5ldC5jb20uYXI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNJUCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciIpOworCisjZGVmaW5lIE1BWF9QT1JUUwk4CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTsKK3N0YXRpYyBpbnQgcG9ydHNfYzsKK21vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmcG9ydHNfYywgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCAicG9ydCBudW1iZXJzIG9mIHNpcCBzZXJ2ZXJzIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgPSBTSVBfVElNRU9VVDsKK21vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpcF90aW1lb3V0LCAidGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvbiIpOworCit1bnNpZ25lZCBpbnQgKCppcF9uYXRfc2lwX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQljb25zdCBjaGFyICoqZHB0cik7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9uYXRfc2lwX2hvb2spOworCit1bnNpZ25lZCBpbnQgKCppcF9uYXRfc2RwX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJCWNvbnN0IGNoYXIgKmRwdHIpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBfbmF0X3NkcF9ob29rKTsKKworaW50IGN0X3NpcF9nZXRfaW5mbyhjb25zdCBjaGFyICpkcHRyLCBzaXplX3QgZGxlbiwKKwkJCQl1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLAorCQkJCXVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCisJCQkJc3RydWN0IHNpcF9oZWFkZXJfbmZvICpobmZvKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9nZXRfaW5mbyk7CisKKworc3RhdGljIGludCBkaWdpdHNfbGVuKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KTsKK3N0YXRpYyBpbnQgZXBhZGRyX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCk7CitzdGF0aWMgaW50IHNrcF9kaWdpdHNfbGVuKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KTsKK3N0YXRpYyBpbnQgc2twX2VwYWRkcl9sZW4oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpOworCitzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gY3Rfc2lwX2hkcnNbXSA9IHsKKwl7IAkvKiBWaWEgaGVhZGVyICovCisJCS5sbmFtZQkJPSAiVmlhOiIsCisJCS5sbmxlbgkJPSBzaXplb2YoIlZpYToiKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJcbnY6IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJcbnY6IikgLSAxLCAvKiByZmMzMjYxICJcclxuIiAqLworCQkubG5fc3RyCQk9ICJVRFAgIiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiVURQICIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4sCisJfSwKKwl7IAkvKiBDb250YWN0IGhlYWRlciAqLworCQkubG5hbWUJCT0gIkNvbnRhY3Q6IiwKKwkJLmxubGVuCQk9IHNpemVvZigiQ29udGFjdDoiKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJcbm06IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJcbm06IikgLSAxLAorCQkubG5fc3RyCQk9ICJzaXA6IiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigic2lwOiIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IHNrcF9lcGFkZHJfbGVuCisJfSwKKwl7IAkvKiBDb250ZW50IGxlbmd0aCBoZWFkZXIgKi8KKwkJLmxuYW1lCQk9ICJDb250ZW50LUxlbmd0aDoiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJDb250ZW50LUxlbmd0aDoiKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJcbmw6IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJcbmw6IikgLSAxLAorCQkubG5fc3RyCQk9ICI6IiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiOiIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IHNrcF9kaWdpdHNfbGVuCisJfSwKKwl7CS8qIFNEUCBtZWRpYSBpbmZvICovCisJCS5sbmFtZQkJPSAiXG5tPSIsCisJCS5sbmxlbgkJPSBzaXplb2YoIlxubT0iKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJtPSIsCisJCS5zbmxlbgkJPSBzaXplb2YoIlxybT0iKSAtIDEsCisJCS5sbl9zdHIJCT0gImF1ZGlvICIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoImF1ZGlvICIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IGRpZ2l0c19sZW4KKwl9LAorCXsgCS8qIFNEUCBvd25lciBhZGRyZXNzKi8KKwkJLmxuYW1lCQk9ICJcbm89IiwKKwkJLmxubGVuCQk9IHNpemVvZigiXG5vPSIpIC0gMSwKKwkJLnNuYW1lCQk9ICJccm89IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJvPSIpIC0gMSwKKwkJLmxuX3N0cgkJPSAiSU4gSVA0ICIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoIklOIElQNCAiKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCisJfSwKKwl7IAkvKiBTRFAgY29ubmVjdGlvbiBpbmZvICovCisJCS5sbmFtZQkJPSAiXG5jPSIsCisJCS5sbmxlbgkJPSBzaXplb2YoIlxuYz0iKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJjPSIsCisJCS5zbmxlbgkJPSBzaXplb2YoIlxyYz0iKSAtIDEsCisJCS5sbl9zdHIJCT0gIklOIElQNCAiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJJTiBJUDQgIikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbgorCX0sCisJeyAJLyogUmVxdWVzdHMgaGVhZGVycyAqLworCQkubG5hbWUJCT0gInNpcDoiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAorCQkuc25hbWUJCT0gInNpcDoiLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJzaXA6IikgLSAxLCAvKiB5ZXMsIGkga25vdy4uIDspICovCisJCS5sbl9zdHIJCT0gIkAiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJAIikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbgorCX0sCisJeyAJLyogU0RQIHZlcnNpb24gaGVhZGVyICovCisJCS5sbmFtZQkJPSAiXG52PSIsCisJCS5sbmxlbgkJPSBzaXplb2YoIlxudj0iKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJ2PSIsCisJCS5zbmxlbgkJPSBzaXplb2YoIlxydj0iKSAtIDEsCisJCS5sbl9zdHIJCT0gIj0iLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCI9IikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZGlnaXRzX2xlbgorCX0KK307CitFWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfaGRycyk7CisKKy8qIGdldCBsaW5lIGxlbmdodCB1bnRpbCBmaXJzdCBDUiBvciBMRiBzZWVuLiAqLworaW50IGN0X3NpcF9sbmxlbihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpsaW1pdCkKK3sKKwljb25zdCBjaGFyICprID0gbGluZTsKKworCXdoaWxlICgobGluZSA8PSBsaW1pdCkgJiYgKCpsaW5lID09ICdccicgfHwgKmxpbmUgPT0gJ1xuJykpCisJCWxpbmUrKzsKKworCXdoaWxlIChsaW5lIDw9IGxpbWl0KSB7CisJCWlmICgqbGluZSA9PSAnXHInIHx8ICpsaW5lID09ICdcbicpCisJCQlicmVhazsKKwkJbGluZSsrOworCX0KKwlyZXR1cm4gbGluZSAtIGs7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfbG5sZW4pOworCisvKiBMaW5lYXIgc3RyaW5nIHNlYXJjaCwgY2FzZSBzZW5zaXRpdmUuICovCitjb25zdCBjaGFyICpjdF9zaXBfc2VhcmNoKGNvbnN0IGNoYXIgKm5lZWRsZSwgY29uc3QgY2hhciAqaGF5c3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZWVkbGVfbGVuLCBzaXplX3QgaGF5c3RhY2tfbGVuKQoreworCWNvbnN0IGNoYXIgKmxpbWl0ID0gaGF5c3RhY2sgKyAoaGF5c3RhY2tfbGVuIC0gbmVlZGxlX2xlbik7CisKKwl3aGlsZSAoaGF5c3RhY2sgPD0gbGltaXQpIHsKKwkJaWYgKG1lbWNtcChoYXlzdGFjaywgbmVlZGxlLCBuZWVkbGVfbGVuKSA9PSAwKQorCQkJcmV0dXJuIGhheXN0YWNrOworCQloYXlzdGFjaysrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9zZWFyY2gpOworCitzdGF0aWMgaW50IGRpZ2l0c19sZW4oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpCit7CisJaW50IGxlbiA9IDA7CisJd2hpbGUgKGRwdHIgPD0gbGltaXQgJiYgaXNkaWdpdCgqZHB0cikpIHsKKwkJZHB0cisrOworCQlsZW4rKzsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyogZ2V0IGRpZ2l0cyBsZW5naHQsIHNraXBpbmcgYmxhbmsgc3BhY2VzLiAqLworc3RhdGljIGludCBza3BfZGlnaXRzX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCkKK3sKKwlmb3IgKDsgZHB0ciA8PSBsaW1pdCAmJiAqZHB0ciA9PSAnICc7IGRwdHIrKykKKwkJKCpzaGlmdCkrKzsKKworCXJldHVybiBkaWdpdHNfbGVuKGRwdHIsIGxpbWl0LCBzaGlmdCk7Cit9CisKKy8qIFNpbXBsZSBpcGFkZHIgcGFyc2VyLi4gKi8KK3N0YXRpYyBpbnQgcGFyc2VfaXBhZGRyKGNvbnN0IGNoYXIgKmNwLAljb25zdCBjaGFyICoqZW5kcCwKKwkJCXVfaW50MzJfdCAqaXBhZGRyLCBjb25zdCBjaGFyICpsaW1pdCkKK3sKKwl1bnNpZ25lZCBsb25nIGludCB2YWw7CisJaW50IGksIGRpZ2l0ID0gMDsKKworCWZvciAoaSA9IDAsICppcGFkZHIgPSAwOyBjcCA8PSBsaW1pdCAmJiBpIDwgNDsgaSsrKSB7CisJCWRpZ2l0ID0gMDsKKwkJaWYgKCFpc2RpZ2l0KCpjcCkpCisJCQlicmVhazsKKworCQl2YWwgPSBzaW1wbGVfc3RydG91bChjcCwgKGNoYXIgKiopJmNwLCAxMCk7CisJCWlmICh2YWwgPiAweEZGKQorCQkJcmV0dXJuIC0xOworCisJCSgodV9pbnQ4X3QgKilpcGFkZHIpW2ldID0gdmFsOworCQlkaWdpdCA9IDE7CisKKwkJaWYgKCpjcCAhPSAnLicpCisJCQlicmVhazsKKwkJY3ArKzsKKwl9CisJaWYgKCFkaWdpdCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGVuZHApCisJCSplbmRwID0gY3A7CisKKwlyZXR1cm4gMDsKK30KKworLyogc2tpcCBpcCBhZGRyZXNzLiByZXR1cm5zIGl0IGxlbmdodC4gKi8KK3N0YXRpYyBpbnQgZXBhZGRyX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCkKK3sKKwljb25zdCBjaGFyICphdXggPSBkcHRyOworCXVfaW50MzJfdCBpcDsKKworCWlmIChwYXJzZV9pcGFkZHIoZHB0ciwgJmRwdHIsICZpcCwgbGltaXQpIDwgMCkgeworCQlERUJVR1AoImlwOiAlcyBwYXJzZSBmYWlsZWQuIVxuIiwgZHB0cik7CisJCXJldHVybiAwOworCX0KKworCS8qIFBvcnQgbnVtYmVyICovCisJaWYgKCpkcHRyID09ICc6JykgeworCQlkcHRyKys7CisJCWRwdHIgKz0gZGlnaXRzX2xlbihkcHRyLCBsaW1pdCwgc2hpZnQpOworCX0KKwlyZXR1cm4gZHB0ciAtIGF1eDsKK30KKworLyogZ2V0IGFkZHJlc3MgbGVuZ3RoLCBza2lwaW5nIHVzZXIgaW5mby4gKi8KK3N0YXRpYyBpbnQgc2twX2VwYWRkcl9sZW4oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpCit7CisJaW50IHMgPSAqc2hpZnQ7CisKKwlmb3IgKDsgZHB0ciA8PSBsaW1pdCAmJiAqZHB0ciAhPSAnQCc7IGRwdHIrKykKKwkJKCpzaGlmdCkrKzsKKworCWlmICgqZHB0ciA9PSAnQCcpIHsKKwkJZHB0cisrOworCQkoKnNoaWZ0KSsrOworCX0gZWxzZQorCQkqc2hpZnQgPSBzOworCisJcmV0dXJuIGVwYWRkcl9sZW4oZHB0ciwgbGltaXQsIHNoaWZ0KTsKK30KKworLyogUmV0dXJucyAwIGlmIG5vdCBmb3VuZCwgLTEgZXJyb3IgcGFyc2luZy4gKi8KK2ludCBjdF9zaXBfZ2V0X2luZm8oY29uc3QgY2hhciAqZHB0ciwgc2l6ZV90IGRsZW4sCisJCSAgICB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLAorCQkgICAgdW5zaWduZWQgaW50ICptYXRjaGxlbiwKKwkJICAgIHN0cnVjdCBzaXBfaGVhZGVyX25mbyAqaG5mbykKK3sKKwljb25zdCBjaGFyICpsaW1pdCwgKmF1eCwgKmsgPSBkcHRyOworCWludCBzaGlmdCA9IDA7CisKKwlsaW1pdCA9IGRwdHIgKyAoZGxlbiAtIGhuZm8tPmxubGVuKTsKKworCXdoaWxlIChkcHRyIDw9IGxpbWl0KSB7CisJCWlmICgoc3RybmNtcChkcHRyLCBobmZvLT5sbmFtZSwgaG5mby0+bG5sZW4pICE9IDApICYmCisJCSAgICAoc3RybmNtcChkcHRyLCBobmZvLT5zbmFtZSwgaG5mby0+c25sZW4pICE9IDApKSB7CisJCQlkcHRyKys7CisJCQljb250aW51ZTsKKwkJfQorCQlhdXggPSBjdF9zaXBfc2VhcmNoKGhuZm8tPmxuX3N0ciwgZHB0ciwgaG5mby0+bG5fc3RybGVuLAorCQkgICAgICAgICAgICAgICAgICAgIGN0X3NpcF9sbmxlbihkcHRyLCBsaW1pdCkpOworCQlpZiAoIWF1eCkgeworCQkJREVCVUdQKCInJXMnIG5vdCBmb3VuZCBpbiAnJXMnLlxuIiwgaG5mby0+bG5fc3RyLAorCQkJICAgICAgIGhuZm8tPmxuYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlhdXggKz0gaG5mby0+bG5fc3RybGVuOworCisJCSptYXRjaGxlbiA9IGhuZm8tPm1hdGNoX2xlbihhdXgsIGxpbWl0LCAmc2hpZnQpOworCQlpZiAoISptYXRjaGxlbikKKwkJCXJldHVybiAtMTsKKworCQkqbWF0Y2hvZmYgPSAoYXV4IC0gaykgKyBzaGlmdDsKKworCQlERUJVR1AoIiVzIG1hdGNoIHN1Y2NlZWRlZCEgLSBsZW46ICV1XG4iLCBobmZvLT5sbmFtZSwKKwkJICAgICAgICptYXRjaGxlbik7CisJCXJldHVybiAxOworCX0KKwlERUJVR1AoIiVzIGhlYWRlciBub3QgZm91bmQuXG4iLCBobmZvLT5sbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgdV9pbnQzMl90IGlwYWRkciwgdV9pbnQxNl90IHBvcnQsCisJCQkgICAgY29uc3QgY2hhciAqZHB0cikKK3sKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldDsKKworCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpOworCWlmIChleHAgPT0gTlVMTCkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlleHAtPnR1cGxlLnNyYy5pcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmlwOworCWV4cC0+dHVwbGUuc3JjLnUudWRwLnBvcnQgPSAwOworCWV4cC0+dHVwbGUuZHN0LmlwID0gaXBhZGRyOworCWV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0KTsKKwlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOworCisJZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLnNyYy51LnVkcC5wb3J0ID0gMDsKKwlleHAtPm1hc2suZHN0LmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suZHN0LnUudWRwLnBvcnQgPSAweEZGRkY7CisJZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CisKKwlleHAtPmV4cGVjdGZuID0gTlVMTDsKKwlleHAtPmZsYWdzID0gMDsKKworCWlmIChpcF9uYXRfc2RwX2hvb2spCisJCXJldCA9IGlwX25hdF9zZHBfaG9vayhwc2tiLCBjdGluZm8sIGV4cCwgZHB0cik7CisJZWxzZSB7CisJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQorCQkJcmV0ID0gTkZfRFJPUDsKKwkJZWxzZQorCQkJcmV0ID0gTkZfQUNDRVBUOworCX0KKwlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBkYXRhbGVuOworCWNvbnN0IGNoYXIgKmRwdHI7CisJaW50IHJldCA9IE5GX0FDQ0VQVDsKKwlpbnQgbWF0Y2hvZmYsIG1hdGNobGVuOworCXVfaW50MzJfdCBpcGFkZHI7CisJdV9pbnQxNl90IHBvcnQ7CisKKwkvKiBObyBEYXRhID8gKi8KKwlkYXRhb2ZmID0gKCpwc2tiKS0+bmguaXBoLT5paGwqNCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlpZiAoZGF0YW9mZiA+PSAoKnBza2IpLT5sZW4pIHsKKwkJREVCVUdQKCJza2ItPmxlbiA9ICV1XG4iLCAoKnBza2IpLT5sZW4pOworCQlyZXR1cm4gTkZfQUNDRVBUOworICAgICAgICB9CisKKwlpcF9jdF9yZWZyZXNoKGN0LCAqcHNrYiwgc2lwX3RpbWVvdXQgKiBIWik7CisKKwlpZiAoIXNrYl9pc19ub25saW5lYXIoKnBza2IpKQorCQlkcHRyID0gKCpwc2tiKS0+ZGF0YSArIGRhdGFvZmY7CisJZWxzZSB7CisJCURFQlVHUCgiQ29weSBvZiBza2J1ZmYgbm90IHN1cHBvcnRlZCB5ZXQuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGlwX25hdF9zaXBfaG9vaykgeworCQlpZiAoIWlwX25hdF9zaXBfaG9vayhwc2tiLCBjdGluZm8sIGN0LCAmZHB0cikpIHsKKwkJCXJldCA9IE5GX0RST1A7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEFmdGVyIHRoaXMgcG9pbnQgTkFULCBjb3VsZCBoYXZlIG1hbmdsZWQgc2tiLCBzbworCSAgIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgcGF5bG9hZCBsZW5naHQuICovCisJZGF0YWxlbiA9ICgqcHNrYiktPmxlbiAtIGRhdGFvZmY7CisKKwlpZiAoZGF0YWxlbiA8IChzaXplb2YoIlNJUC8yLjAgMjAwIikgLSAxKSkKKwkJZ290byBvdXQ7CisKKwkvKiBSVFAgaW5mbyBvbmx5IGluIHNvbWUgU0RQIHBrdHMgKi8KKwlpZiAobWVtY21wKGRwdHIsICJJTlZJVEUiLCBzaXplb2YoIklOVklURSIpIC0gMSkgIT0gMCAmJgorCSAgICBtZW1jbXAoZHB0ciwgIlNJUC8yLjAgMjAwIiwgc2l6ZW9mKCJTSVAvMi4wIDIwMCIpIC0gMSkgIT0gMCkgeworCQlnb3RvIG91dDsKKwl9CisJLyogR2V0IGlwIGFuZCBwb3J0IGFkZHJlc3MgZnJvbSBTRFAgcGFja2V0LiAqLworCWlmIChjdF9zaXBfZ2V0X2luZm8oZHB0ciwgZGF0YWxlbiwgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sCisJICAgICAgICAgICAgICAgICAgICAmY3Rfc2lwX2hkcnNbUE9TX0NPTk5FQ1RJT05dKSA+IDApIHsKKworCQkvKiBXZSdsbCBkcm9wIG9ubHkgaWYgdGhlcmUgYXJlIHBhcnNlIHByb2JsZW1zLiAqLworCQlpZiAocGFyc2VfaXBhZGRyKGRwdHIgKyBtYXRjaG9mZiwgTlVMTCwgJmlwYWRkciwKKwkJICAgICAgICAgICAgICAgICBkcHRyICsgZGF0YWxlbikgPCAwKSB7CisJCQlyZXQgPSBORl9EUk9QOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGN0X3NpcF9nZXRfaW5mbyhkcHRyLCBkYXRhbGVuLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAmY3Rfc2lwX2hkcnNbUE9TX01FRElBXSkgPiAwKSB7CisKKwkJCXBvcnQgPSBzaW1wbGVfc3RydG91bChkcHRyICsgbWF0Y2hvZmYsIE5VTEwsIDEwKTsKKwkJCWlmIChwb3J0IDwgMTAyNCkgeworCQkJCXJldCA9IE5GX0RST1A7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlyZXQgPSBzZXRfZXhwZWN0ZWRfcnRwKHBza2IsIGN0LCBjdGluZm8sCisJCQkJCSAgICAgICBpcGFkZHIsIHBvcnQsIGRwdHIpOworCQl9CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBfY29ubnRyYWNrX2hlbHBlciBzaXBbTUFYX1BPUlRTXTsKK3N0YXRpYyBjaGFyIHNpcF9uYW1lc1tNQVhfUE9SVFNdWzEwXTsKKworc3RhdGljIHZvaWQgZmluaSh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBwb3J0c19jOyBpKyspIHsKKwkJREVCVUdQKCJ1bnJlZ2lzdGVyaW5nIGhlbHBlciBmb3IgcG9ydCAlZFxuIiwgcG9ydHNbaV0pOworCQlpcF9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJnNpcFtpXSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisJaW50IGksIHJldDsKKwljaGFyICp0bXBuYW1lOworCisJaWYgKHBvcnRzX2MgPT0gMCkKKwkJcG9ydHNbcG9ydHNfYysrXSA9IFNJUF9QT1JUOworCisJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykgeworCQkvKiBDcmVhdGUgaGVscGVyIHN0cnVjdHVyZSAqLworCQltZW1zZXQoJnNpcFtpXSwgMCwgc2l6ZW9mKHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyKSk7CisKKwkJc2lwW2ldLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOworCQlzaXBbaV0udHVwbGUuc3JjLnUudWRwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7CisJCXNpcFtpXS5tYXNrLnNyYy51LnVkcC5wb3J0ID0gMHhGRkZGOworCQlzaXBbaV0ubWFzay5kc3QucHJvdG9udW0gPSAweEZGOworCQlzaXBbaV0ubWF4X2V4cGVjdGVkID0gMTsKKwkJc2lwW2ldLnRpbWVvdXQgPSAzICogNjA7IC8qIDMgbWludXRlcyAqLworCQlzaXBbaV0ubWUgPSBUSElTX01PRFVMRTsKKwkJc2lwW2ldLmhlbHAgPSBzaXBfaGVscDsKKworCQl0bXBuYW1lID0gJnNpcF9uYW1lc1tpXVswXTsKKwkJaWYgKHBvcnRzW2ldID09IFNJUF9QT1JUKQorCQkJc3ByaW50Zih0bXBuYW1lLCAic2lwIik7CisJCWVsc2UKKwkJCXNwcmludGYodG1wbmFtZSwgInNpcC0lZCIsIGkpOworCQlzaXBbaV0ubmFtZSA9IHRtcG5hbWU7CisKKwkJREVCVUdQKCJwb3J0ICMlZDogJWRcbiIsIGksIHBvcnRzW2ldKTsKKworCQlyZXQgPSBpcF9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZzaXBbaV0pOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoIkVSUk9SIHJlZ2lzdGVyaW5nIGhlbHBlciBmb3IgcG9ydCAlZFxuIiwKKwkJCQlwb3J0c1tpXSk7CisJCQlmaW5pKCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA5MjlkNjFmLi44ODQ0NWFhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtMTg5LDYgKzE4OSwxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TRUNNQVJLCisJaWYgKHNlcV9wcmludGYocywgInNlY21hcms9JXUgIiwgY29ubnRyYWNrLT5zZWNtYXJrKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisjZW5kaWYKKwogCWlmIChzZXFfcHJpbnRmKHMsICJ1c2U9JXVcbiIsIGF0b21pY19yZWFkKCZjb25udHJhY2stPmN0X2dlbmVyYWwudXNlKSkpCiAJCXJldHVybiAtRU5PU1BDOwogCkBAIC00MTcsNyArNDIyLDcgQEAKIAogCS8qIFRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgaGVscGVyOiBhcyB0aGUgcGFja2V0IGdvZXMgb3V0LiAqLwogCWN0ID0gaXBfY29ubnRyYWNrX2dldCgqcHNrYiwgJmN0aW5mbyk7Ci0JaWYgKGN0ICYmIGN0LT5oZWxwZXIpIHsKKwlpZiAoY3QgJiYgY3QtPmhlbHBlciAmJiBjdGluZm8gIT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKSB7CiAJCXVuc2lnbmVkIGludCByZXQ7CiAJCXJldCA9IGN0LT5oZWxwZXItPmhlbHAocHNrYiwgY3QsIGN0aW5mbyk7CiAJCWlmIChyZXQgIT0gTkZfQUNDRVBUKQpAQCAtNTY0LDYgKzU2OSw4IEBACiBzdGF0aWMgaW50IGxvZ19pbnZhbGlkX3Byb3RvX21pbiA9IDA7CiBzdGF0aWMgaW50IGxvZ19pbnZhbGlkX3Byb3RvX21heCA9IDI1NTsKIAoraW50IGlwX2Nvbm50cmFja19jaGVja3N1bSA9IDE7CisKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaXBfY3Rfc3lzY3RsX2hlYWRlcjsKIAogc3RhdGljIGN0bF90YWJsZSBpcF9jdF9zeXNjdGxfdGFibGVbXSA9IHsKQEAgLTU5Miw2ICs1OTksMTQgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU0sCisJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfY2hlY2tzdW0iLAorCQkuZGF0YQkJPSAmaXBfY29ubnRyYWNrX2NoZWNrc3VtLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CiAJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVCwKIAkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja190Y3BfdGltZW91dF9zeW5fc2VudCIsCiAJCS5kYXRhCQk9ICZpcF9jdF90Y3BfdGltZW91dF9zeW5fc2VudCwKQEAgLTk0Niw2ICs5NjEsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX3Byb3RvX2ZpbmRfZ2V0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlwX2Nvbm50cmFja19wcm90b19wdXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoX19pcF9jb25udHJhY2tfcHJvdG9fZmluZCk7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9jb25udHJhY2tfY2hlY2tzdW0pOwogI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTktfTU9EVUxFKQogRVhQT1JUX1NZTUJPTF9HUEwoaXBfY3RfcG9ydF90dXBsZV90b19uZmF0dHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCmluZGV4IGQ0NTY2M2QuLjQxOWI4NzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKQEAgLTQ4Nyw2ICs0ODcsODAgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBpcF9uYXRfY2FsbGZvcndhcmRpbmdfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCQkJIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKQoreworCXN0cnVjdCBpcF9uYXRfcmFuZ2UgcmFuZ2U7CisKKwkvKiBUaGlzIG11c3QgYmUgYSBmcmVzaCBvbmUuICovCisJQlVHX09OKG5ldy0+c3RhdHVzICYgSVBTX05BVF9ET05FX01BU0spOworCisJLyogQ2hhbmdlIHNyYyB0byB3aGVyZSBtYXN0ZXIgc2VuZHMgdG8gKi8KKwlyYW5nZS5mbGFncyA9IElQX05BVF9SQU5HRV9NQVBfSVBTOworCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcCA9IG5ldy0+dHVwbGVoYXNoWyF0aGlzLT5kaXJdLnR1cGxlLnNyYy5pcDsKKworCS8qIGhvb2sgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpdCBoYXMgdG8gZG8gc291cmNlIG1hbmlwICovCisJaXBfbmF0X3NldHVwX2luZm8obmV3LCAmcmFuZ2UsIE5GX0lQX1BPU1RfUk9VVElORyk7CisKKwkvKiBGb3IgRFNUIG1hbmlwLCBtYXAgcG9ydCBoZXJlIHRvIHdoZXJlIGl0J3MgZXhwZWN0ZWQuICovCisJcmFuZ2UuZmxhZ3MgPSAoSVBfTkFUX1JBTkdFX01BUF9JUFMgfCBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKTsKKwlyYW5nZS5taW4gPSByYW5nZS5tYXggPSB0aGlzLT5zYXZlZF9wcm90bzsKKwlyYW5nZS5taW5faXAgPSByYW5nZS5tYXhfaXAgPSB0aGlzLT5zYXZlZF9pcDsKKworCS8qIGhvb2sgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpdCBoYXMgdG8gZG8gZGVzdGluYXRpb24gbWFuaXAgKi8KKwlpcF9uYXRfc2V0dXBfaW5mbyhuZXcsICZyYW5nZSwgTkZfSVBfUFJFX1JPVVRJTkcpOworCisJaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KG5ldywgdGhpcyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBuYXRfY2FsbGZvcndhcmRpbmcoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgICAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVfaW50MTZfdCBuYXRlZF9wb3J0OworCisJLyogU2V0IGV4cGVjdGF0aW9ucyBmb3IgTkFUICovCisJZXhwLT5zYXZlZF9pcCA9IGV4cC0+dHVwbGUuZHN0LmlwOworCWV4cC0+dHVwbGUuZHN0LmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CisJZXhwLT5zYXZlZF9wcm90by50Y3AucG9ydCA9IGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQ7CisJZXhwLT5leHBlY3RmbiA9IGlwX25hdF9jYWxsZm9yd2FyZGluZ19leHBlY3Q7CisJZXhwLT5kaXIgPSAhZGlyOworCisJLyogVHJ5IHRvIGdldCBzYW1lIHBvcnQ6IGlmIG5vdCwgdHJ5IHRvIGNoYW5nZSBpdC4gKi8KKwlmb3IgKG5hdGVkX3BvcnQgPSBwb3J0OyBuYXRlZF9wb3J0ICE9IDA7IG5hdGVkX3BvcnQrKykgeworCQlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7CisJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG5hdGVkX3BvcnQgPT0gMCkgewkvKiBObyBwb3J0IGF2YWlsYWJsZSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJpcF9uYXRfcTkzMTogb3V0IG9mIFRDUCBwb3J0c1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIE1vZGlmeSBzaWduYWwgKi8KKwlpZiAoIXNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwgYWRkciwKKwkJCSAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwLAorCQkJICAgbmF0ZWRfcG9ydCkgPT0gMCkgeworCQlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHApOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU3VjY2VzcyAqLworCURFQlVHUCgiaXBfbmF0X3E5MzE6IGV4cGVjdCBDYWxsIEZvcndhcmRpbmcgIgorCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5zcmMuaXApLCBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLmRzdC5pcCksIG50b2hzKGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQpKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKIHsKIAlCVUdfT04oc2V0X2gyNDVfYWRkcl9ob29rICE9IE5VTEwpOwpAQCAtNDk2LDYgKzU3MCw3IEBACiAJQlVHX09OKG5hdF9ydHBfcnRjcF9ob29rICE9IE5VTEwpOwogCUJVR19PTihuYXRfdDEyMF9ob29rICE9IE5VTEwpOwogCUJVR19PTihuYXRfaDI0NV9ob29rICE9IE5VTEwpOworCUJVR19PTihuYXRfY2FsbGZvcndhcmRpbmdfaG9vayAhPSBOVUxMKTsKIAlCVUdfT04obmF0X3E5MzFfaG9vayAhPSBOVUxMKTsKIAogCXNldF9oMjQ1X2FkZHJfaG9vayA9IHNldF9oMjQ1X2FkZHI7CkBAIC01MDUsNiArNTgwLDcgQEAKIAluYXRfcnRwX3J0Y3BfaG9vayA9IG5hdF9ydHBfcnRjcDsKIAluYXRfdDEyMF9ob29rID0gbmF0X3QxMjA7CiAJbmF0X2gyNDVfaG9vayA9IG5hdF9oMjQ1OworCW5hdF9jYWxsZm9yd2FyZGluZ19ob29rID0gbmF0X2NhbGxmb3J3YXJkaW5nOwogCW5hdF9xOTMxX2hvb2sgPSBuYXRfcTkzMTsKIAogCURFQlVHUCgiaXBfbmF0X2gzMjM6IGluaXQgc3VjY2Vzc1xuIik7CkBAIC01MjEsNiArNTk3LDcgQEAKIAluYXRfcnRwX3J0Y3BfaG9vayA9IE5VTEw7CiAJbmF0X3QxMjBfaG9vayA9IE5VTEw7CiAJbmF0X2gyNDVfaG9vayA9IE5VTEw7CisJbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2sgPSBOVUxMOwogCW5hdF9xOTMxX2hvb2sgPSBOVUxMOwogCXN5bmNocm9uaXplX25ldCgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zaXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc2lwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmYmE2MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc2lwLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qIFNJUCBleHRlbnNpb24gZm9yIFVEUCBOQVQgYWx0ZXJhdGlvbi4KKyAqCisgKiAoQykgMjAwNSBieSBDaHJpc3RpYW4gSGVudHNjaGVsIDxjaGVudHNjaGVsQGFybmV0LmNvbS5hcj4KKyAqIGJhc2VkIG9uIFJSJ3MgaXBfbmF0X2Z0cC5jIGFuZCBvdGhlciBtb2R1bGVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3NpcC5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gSGVudHNjaGVsIDxjaGVudHNjaGVsQGFybmV0LmNvbS5hcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0lQIE5BVCBoZWxwZXIiKTsKKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitleHRlcm4gc3RydWN0IHNpcF9oZWFkZXJfbmZvIGN0X3NpcF9oZHJzW107CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWFuZ2xlX3NpcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCBzaXplX3QgZGxlbiwKKwkJCQkgICAgICBjaGFyICpidWZmZXIsIGludCBidWZmbGVuLAorCQkJCSAgICAgIHN0cnVjdCBzaXBfaGVhZGVyX25mbyAqaG5mbykKK3sKKwl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sIG1hdGNob2ZmOworCisJaWYgKGN0X3NpcF9nZXRfaW5mbygqZHB0ciwgZGxlbiwgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sIGhuZm8pIDw9IDApCisJCXJldHVybiAwOworCisJaWYgKCFpcF9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaG9mZiwgbWF0Y2hsZW4sIGJ1ZmZlciwgYnVmZmxlbikpCisJCXJldHVybiAwOworCisJLyogV2UgbmVlZCB0byByZWxvYWQgdGhpcy4gVGhhbmtzIFBhdHJpY2suICovCisJKmRwdHIgPSAoKnBza2IpLT5kYXRhICsgKCpwc2tiKS0+bmguaXBoLT5paGwqNCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2lwKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0cikKK3sKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLm5ubi5ubm4ubm5uOm5ubm5uIildOworCXVuc2lnbmVkIGludCBidWZmbGVuLCBkYXRhb2ZmOworCXVfaW50MzJfdCBpcDsKKwl1X2ludDE2X3QgcG9ydDsKKworCWRhdGFvZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCisJaXAgICA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwOworCXBvcnQgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51LnVkcC5wb3J0OworCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1OiV1IiwgTklQUVVBRChpcCksIG50b2hzKHBvcnQpKTsKKworCS8qIHNob3J0IHBhY2tldCA/ICovCisJaWYgKCgoKnBza2IpLT5sZW4gLSBkYXRhb2ZmKSA8IChzaXplb2YoIlNJUC8yLjAiKSAtIDEpKQorCQlyZXR1cm4gMDsKKworCS8qIEJhc2ljIHJ1bGVzOiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLiAqLworCWlmIChtZW1jbXAoKmRwdHIsICJTSVAvMi4wIiwgc2l6ZW9mKCJTSVAvMi4wIikgLSAxKSA9PSAwKSB7CisJCWNvbnN0IGNoYXIgKmF1eDsKKworCQlpZiAoKGN0aW5mbykgPCBJUF9DVF9JU19SRVBMWSkgeworCQkJbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwKKwkJCSAgICAgICAgICAgICAgICAgICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCisJCQkgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZsZW4sCisJCQkgICAgICAgICAgICAgICAgICAmY3Rfc2lwX2hkcnNbUE9TX0NPTlRBQ1RdKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKCFtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCBkcHRyLAorCQkJCSAgICAgICAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19WSUFdKSkKKwkJCXJldHVybiAwOworCisJCS8qIFRoaXMgc2VhcmNoIHNob3VsZCBpZ25vcmUgY2FzZSwgYnV0IGxhdGVyLi4gKi8KKwkJYXV4ID0gY3Rfc2lwX3NlYXJjaCgiQ1NlcToiLCAqZHB0ciwgc2l6ZW9mKCJDU2VxOiIpIC0gMSwKKwkJICAgICAgICAgICAgICAgICAgICAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmKTsKKwkJaWYgKCFhdXgpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoIWN0X3NpcF9zZWFyY2goIlJFR0lTVEVSIiwgYXV4LCBzaXplb2YoIlJFR0lTVEVSIiksCisJCSAgICBjdF9zaXBfbG5sZW4oYXV4LCAqZHB0ciArICgqcHNrYiktPmxlbiAtIGRhdGFvZmYpKSkKKwkJCXJldHVybiAxOworCisJCXJldHVybiBtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCBkcHRyLAorCQkJCQkgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwKKwkJCQkJICZjdF9zaXBfaGRyc1tQT1NfQ09OVEFDVF0pOworCX0KKwlpZiAoKGN0aW5mbykgPCBJUF9DVF9JU19SRVBMWSkgeworCQlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsIGRwdHIsCisJCQkJICAgICAgICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX1ZJQV0pKQorCQkJcmV0dXJuIDA7CisKKwkJLyogTWFuZ2xlIENvbnRhY3QgaWYgZXhpc3RzIG9ubHkuIC0gd2F0Y2ggdWRwX25hdF9tYW5nbGUoKSEgKi8KKwkJbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkJICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX0NPTlRBQ1RdKTsKKwkJcmV0dXJuIDE7CisJfQorCS8qIFRoaXMgbWFuZ2xlIHJlcXVlc3RzIGhlYWRlcnMuICovCisJcmV0dXJuIG1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsIGRwdHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgIGN0X3NpcF9sbmxlbigqZHB0ciwKKwkJCQkgICAgICAgICAgICAgICpkcHRyICsgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiksCisJICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19SRVFfSEVBREVSXSk7Cit9CisKK3N0YXRpYyBpbnQgbWFuZ2xlX2NvbnRlbnRfbGVuKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICAgICBjb25zdCBjaGFyICpkcHRyKQoreworCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBtYXRjaG9mZiwgbWF0Y2hsZW47CisJY2hhciBidWZmZXJbc2l6ZW9mKCI2NTUzNiIpXTsKKwlpbnQgYnVmZmxlbjsKKworCWRhdGFvZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCisJLyogR2V0IGFjdHVhbCBTRFAgbGVuZ2h0ICovCisJaWYgKGN0X3NpcF9nZXRfaW5mbyhkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLCAmbWF0Y2hvZmYsCisJICAgICAgICAgICAgICAgICAgICAmbWF0Y2hsZW4sICZjdF9zaXBfaGRyc1tQT1NfU0RQX0hFQURFUl0pID4gMCkgeworCisJCS8qIHNpbmNlIGN0X3NpcF9nZXRfaW5mbygpIGdpdmUgdXMgYSBwb2ludGVyIHBhc3NpbmcgJ3Y9JworCQkgICB3ZSBuZWVkIHRvIGFkZCAyIGJ5dGVzIGluIHRoaXMgY291bnQuICovCisJCWludCBjX2xlbiA9ICgqcHNrYiktPmxlbiAtIGRhdGFvZmYgLSBtYXRjaG9mZiArIDI7CisKKwkJLyogTm93LCB1cGRhdGUgU0RQIGxlbmdodCAqLworCQlpZiAoY3Rfc2lwX2dldF9pbmZvKGRwdHIsICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsICZtYXRjaG9mZiwKKwkJICAgICAgICAgICAgICAgICAgICAmbWF0Y2hsZW4sICZjdF9zaXBfaGRyc1tQT1NfQ09OVEVOVF0pID4gMCkgeworCisJCQlidWZmbGVuID0gc3ByaW50ZihidWZmZXIsICIldSIsIGNfbGVuKTsKKworCQkJcmV0dXJuIGlwX25hdF9tYW5nbGVfdWRwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLAorCQkJCQkJCW1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJCQkJCQlidWZmZXIsIGJ1ZmZsZW4pOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1hbmdsZV9zZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgICAgIHVfaW50MzJfdCBuZXdpcCwgdV9pbnQxNl90IHBvcnQsCisJCQkgICAgICAgY29uc3QgY2hhciAqZHB0cikKK3sKKwljaGFyIGJ1ZmZlcltzaXplb2YoIm5ubi5ubm4ubm5uLm5ubiIpXTsKKwl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgYnVmZmxlbjsKKworCWRhdGFvZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCisJLyogTWFuZ2xlIG93bmVyIGFuZCBjb250YWN0IGluZm8uICovCisJYnVmZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUuJXUuJXUuJXUiLCBOSVBRVUFEKG5ld2lwKSk7CisJaWYgKCFtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCAmZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19PV05FUl0pKQorCQlyZXR1cm4gMDsKKworCWlmICghbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgJmRwdHIsICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCisJICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZsZW4sICZjdF9zaXBfaGRyc1tQT1NfQ09OTkVDVElPTl0pKQorCQlyZXR1cm4gMDsKKworCS8qIE1hbmdsZSBtZWRpYSBwb3J0LiAqLworCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgcG9ydCk7CisJaWYgKCFtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCAmZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19NRURJQV0pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4ocHNrYiwgY3RpbmZvLCBjdCwgZHB0cik7Cit9CisKKy8qIFNvLCB0aGlzIHBhY2tldCBoYXMgaGl0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1hdGNoaW5nIGNvZGUuCisgICBNYW5nbGUgaXQsIGFuZCBjaGFuZ2UgdGhlIGV4cGVjdGF0aW9uIHRvIG1hdGNoIHRoZSBuZXcgdmVyc2lvbi4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkcHRyKQoreworCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gZXhwLT5tYXN0ZXI7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwl1X2ludDMyX3QgbmV3aXA7CisJdV9pbnQxNl90IHBvcnQ7CisKKwlERUJVR1AoImlwX25hdF9zZHAoKTpcbiIpOworCisJLyogQ29ubmVjdGlvbiB3aWxsIGNvbWUgZnJvbSByZXBseSAqLworCW5ld2lwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CisKKwlleHAtPnR1cGxlLmRzdC5pcCA9IG5ld2lwOworCWV4cC0+c2F2ZWRfcHJvdG8udWRwLnBvcnQgPSBleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0OworCWV4cC0+ZGlyID0gIWRpcjsKKworCS8qIFdoZW4geW91IHNlZSB0aGUgcGFja2V0LCB3ZSBuZWVkIHRvIE5BVCBpdCB0aGUgc2FtZSBhcyB0aGUKKwkgICB0aGlzIG9uZS4gKi8KKwlleHAtPmV4cGVjdGZuID0gaXBfbmF0X2ZvbGxvd19tYXN0ZXI7CisKKwkvKiBUcnkgdG8gZ2V0IHNhbWUgcG9ydDogaWYgbm90LCB0cnkgdG8gY2hhbmdlIGl0LiAqLworCWZvciAocG9ydCA9IG50b2hzKGV4cC0+c2F2ZWRfcHJvdG8udWRwLnBvcnQpOyBwb3J0ICE9IDA7IHBvcnQrKykgeworCQlleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCk7CisJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHBvcnQgPT0gMCkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlpZiAoIW1hbmdsZV9zZHAocHNrYiwgY3RpbmZvLCBjdCwgbmV3aXAsIHBvcnQsIGRwdHIpKSB7CisJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJCXJldHVybiBORl9EUk9QOworCX0KKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQoreworCWlwX25hdF9zaXBfaG9vayA9IE5VTEw7CisJaXBfbmF0X3NkcF9ob29rID0gTlVMTDsKKwkvKiBNYWtlIHN1cmUgbm9vbmUgY2FsbHMgaXQsIG1lYW53aGlsZS4gKi8KKwlzeW5jaHJvbml6ZV9uZXQoKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQoreworCUJVR19PTihpcF9uYXRfc2lwX2hvb2spOworCUJVR19PTihpcF9uYXRfc2RwX2hvb2spOworCWlwX25hdF9zaXBfaG9vayA9IGlwX25hdF9zaXA7CisJaXBfbmF0X3NkcF9ob29rID0gaXBfbmF0X3NkcDsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggYzMzMjQ0Mi4uZDIwZDU1NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTEzNDgsNCArMTM0OCw0IEBACiBtb2R1bGVfaW5pdChpcF9uYXRfc25tcF9iYXNpY19pbml0KTsKIG1vZHVsZV9leGl0KGlwX25hdF9zbm1wX2Jhc2ljX2ZpbmkpOwogCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2MDApOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2MDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggYWFkOWQyOC4uZGJjODNjNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC0yNDEsMjUgKzI0MSwxNyBAQAogCXN0cnVjdCBpcGhkciAqaXBoID0gc2tiLT5uaC5pcGg7CiAJdW5zaWduZWQgbG9uZyBoYXNodmFsOwogCXVfaW50MTZfdCBzcG9ydCwgZHBvcnQ7Ci0Jc3RydWN0IHRjcGhkciAqdGg7Ci0Jc3RydWN0IHVkcGhkciAqdWg7Ci0Jc3RydWN0IGljbXBoZHIgKmloOworCXVfaW50MTZfdCAqcG9ydHM7CiAKIAlzd2l0Y2ggKGlwaC0+cHJvdG9jb2wpIHsKIAljYXNlIElQUFJPVE9fVENQOgotCQl0aCA9ICh2b2lkICopaXBoK2lwaC0+aWhsKjQ7Ci0JCXNwb3J0ID0gbnRvaHModGgtPnNvdXJjZSk7Ci0JCWRwb3J0ID0gbnRvaHModGgtPmRlc3QpOwotCQlicmVhazsKIAljYXNlIElQUFJPVE9fVURQOgotCQl1aCA9ICh2b2lkICopaXBoK2lwaC0+aWhsKjQ7Ci0JCXNwb3J0ID0gbnRvaHModWgtPnNvdXJjZSk7Ci0JCWRwb3J0ID0gbnRvaHModWgtPmRlc3QpOwotCQlicmVhazsKKwljYXNlIElQUFJPVE9fU0NUUDoKKwljYXNlIElQUFJPVE9fRENDUDoKIAljYXNlIElQUFJPVE9fSUNNUDoKLQkJaWggPSAodm9pZCAqKWlwaCtpcGgtPmlobCo0OwotCQlzcG9ydCA9IG50b2hzKGloLT51bi5lY2hvLmlkKTsKLQkJZHBvcnQgPSAoaWgtPnR5cGU8PDgpfGloLT5jb2RlOworCQlwb3J0cyA9ICh2b2lkICopaXBoK2lwaC0+aWhsKjQ7CisJCXNwb3J0ID0gcG9ydHNbMF07CisJCWRwb3J0ID0gcG9ydHNbMV07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCmluZGV4IDBiYmEzYzIuLjQzMWEzY2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwpAQCAtMTQ3LDYgKzE0Nyw3IEBACiAJLyogVGhpcyBwYWNrZXQgd2lsbCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG90aGVyOiBjbGVhciBuZiBmaWVsZHMgKi8KIAluZl9yZXNldChuc2tiKTsKIAluc2tiLT5uZm1hcmsgPSAwOworCXNrYl9pbml0X3NlY21hcmsobnNrYik7CiAKIAl0Y3BoID0gKHN0cnVjdCB0Y3BoZHIgKikoKHVfaW50MzJfdCopbnNrYi0+bmguaXBoICsgbnNrYi0+bmguaXBoLT5paGwpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYwppbmRleCA3YzY4MzZjLi45Mjk4MGFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMKQEAgLTI4LDkgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvdGNwLmg+Ci0jaW5jbHVkZSA8bGludXgvdWRwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2N0cC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTgzLDYgKzgwLDcgQEAKIAkvKiB1c2VkIGludGVybmFsbHkgKi8KIAlzcGlubG9ja190IGxvY2s7CQkvKiBsb2NrIGZvciBsaXN0X2hlYWQgKi8KIAl1X2ludDMyX3Qgcm5kOwkJCS8qIHJhbmRvbSBzZWVkIGZvciBoYXNoICovCisJaW50IHJuZF9pbml0aWFsaXplZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsJLyogdGltZXIgZm9yIGdjICovCiAJYXRvbWljX3QgY291bnQ7CQkJLyogbnVtYmVyIGVudHJpZXMgaW4gdGFibGUgKi8KIApAQCAtMTM3LDggKzEzNSwxMCBAQAogCiAJLyogaW5pdGlhbGl6ZSBoYXNoIHdpdGggcmFuZG9tIHZhbCBhdCB0aGUgdGltZSB3ZSBhbGxvY2F0ZQogCSAqIHRoZSBmaXJzdCBoYXNodGFibGUgZW50cnkgKi8KLQlpZiAoIWh0LT5ybmQpCisJaWYgKCFodC0+cm5kX2luaXRpYWxpemVkKSB7CiAJCWdldF9yYW5kb21fYnl0ZXMoJmh0LT5ybmQsIDQpOworCQlodC0+cm5kX2luaXRpYWxpemVkID0gMTsKKwl9CiAKIAlpZiAoaHQtPmNmZy5tYXggJiYKIAkgICAgYXRvbWljX3JlYWQoJmh0LT5jb3VudCkgPj0gaHQtPmNmZy5tYXgpIHsKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiAJYXRvbWljX3NldCgmaGluZm8tPmNvdW50LCAwKTsKIAlhdG9taWNfc2V0KCZoaW5mby0+dXNlLCAxKTsKLQloaW5mby0+cm5kID0gMDsKKwloaW5mby0+cm5kX2luaXRpYWxpemVkID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmaGluZm8tPmxvY2spOwogCWhpbmZvLT5wZGUgPSBjcmVhdGVfcHJvY19lbnRyeShtaW5mby0+bmFtZSwgMCwgaGFzaGxpbWl0X3Byb2NkaXIpOwogCWlmICghaGluZm8tPnBkZSkgewpAQCAtMzgxLDQ5ICszODEsNiBAQAogCQlkaC0+cmF0ZWluZm8uY3JlZGl0ID0gZGgtPnJhdGVpbmZvLmNyZWRpdF9jYXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdldF9wb3J0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCAKLQkJCSAgICB1MTYgcG9ydHNbMl0pCi17Ci0JdW5pb24gewotCQlzdHJ1Y3QgdGNwaGRyIHRoOwotCQlzdHJ1Y3QgdWRwaGRyIHVoOwotCQlzY3RwX3NjdHBoZHJfdCBzY3RwaDsKLQl9IGhkcl91LCAqcHRyX3U7Ci0KLQkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwotCWlmIChvZmZzZXQpCi0JCXJldHVybiAxOwotCi0JLyogTXVzdCBiZSBiaWcgZW5vdWdoIHRvIHJlYWQgcG9ydHMgKGJvdGggVURQIGFuZCBUQ1AgaGF2ZQotCSAgIHRoZW0gYXQgdGhlIHN0YXJ0KS4gKi8KLQlwdHJfdSA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNrYi0+bmguaXBoLT5paGwqNCwgOCwgJmhkcl91KTsgCi0JaWYgKCFwdHJfdSkKLQkJcmV0dXJuIDE7Ci0KLQlzd2l0Y2ggKHNrYi0+bmguaXBoLT5wcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJcG9ydHNbMF0gPSBwdHJfdS0+dGguc291cmNlOwotCQkJcG9ydHNbMV0gPSBwdHJfdS0+dGguZGVzdDsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJcG9ydHNbMF0gPSBwdHJfdS0+dWguc291cmNlOwotCQkJcG9ydHNbMV0gPSBwdHJfdS0+dWguZGVzdDsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fU0NUUDoKLQkJCXBvcnRzWzBdID0gcHRyX3UtPnNjdHBoLnNvdXJjZTsKLQkJCXBvcnRzWzFdID0gcHRyX3UtPnNjdHBoLmRlc3Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIGFsbCBvdGhlciBwcm90b2NvbHMgZG9uJ3Qgc3VwcHJvdCBwZXItcG9ydCBoYXNoCi0JCQkgKiBidWNrZXRzICovCi0JCQlwb3J0c1swXSA9IHBvcnRzWzFdID0gMDsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQKIGhhc2hsaW1pdF9tYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCkBAIC00NDksOCArNDA2LDIyIEBACiAJCWRzdC5zcmNfaXAgPSBza2ItPm5oLmlwaC0+c2FkZHI7CiAJaWYgKGhpbmZvLT5jZmcubW9kZSAmIElQVF9IQVNITElNSVRfSEFTSF9EUFQKIAkgICAgfHxoaW5mby0+Y2ZnLm1vZGUgJiBJUFRfSEFTSExJTUlUX0hBU0hfU1BUKSB7Ci0JCXVfaW50MTZfdCBwb3J0c1syXTsKLQkJaWYgKGdldF9wb3J0cyhza2IsIG9mZnNldCwgcG9ydHMpKSB7CisJCXVfaW50MTZfdCBfcG9ydHNbMl0sICpwb3J0czsKKworCQlzd2l0Y2ggKHNrYi0+bmguaXBoLT5wcm90b2NvbCkgeworCQljYXNlIElQUFJPVE9fVENQOgorCQljYXNlIElQUFJPVE9fVURQOgorCQljYXNlIElQUFJPVE9fU0NUUDoKKwkJY2FzZSBJUFBST1RPX0RDQ1A6CisJCQlwb3J0cyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNrYi0+bmguaXBoLT5paGwqNCwKKwkJCQkJCSAgIHNpemVvZihfcG9ydHMpLCAmX3BvcnRzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJX3BvcnRzWzBdID0gX3BvcnRzWzFdID0gMDsKKwkJCXBvcnRzID0gX3BvcnRzOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFwb3J0cykgewogCQkJLyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJIAkgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi8KIAkJCSpob3Rkcm9wID0gMTsKQEAgLTU2MSw3ICs1MzIsNyBAQAogaGFzaGxpbWl0X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAogCQkgIHVuc2lnbmVkIGludCBtYXRjaHNpemUpCiB7Ci0Jc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqciA9IChzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICopIG1hdGNoaW5mbzsKKwlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICpyID0gbWF0Y2hpbmZvOwogCiAJaHRhYmxlX3B1dChyLT5oaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYwppbmRleCBiODQ3ZWU0Li42MWEyMTM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKQEAgLTEsMTAwNyArMSw0OTkgQEAKLS8qIEtlcm5lbCBtb2R1bGUgdG8gY2hlY2sgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIGhhcyBiZWVuIHNlZW4gcmVjZW50bHkuICovCi0vKiBDb3B5cmlnaHQgMjAwMi0yMDAzLCBTdGVwaGVuIEZyb3N0LCAyLjUueCBwb3J0IGJ5IGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZyAqLwotLyogQXV0aG9yOiBTdGVwaGVuIEZyb3N0IDxzZnJvc3RAc25vd21hbi5uZXQ+ICovCi0vKiBQcm9qZWN0IFBhZ2U6IGh0dHA6Ly9zbm93bWFuLm5ldC9wcm9qZWN0cy9pcHRfcmVjZW50LyAqLwotLyogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCwgVmVyc2lvbiAyICovCi0vKiBUaGlzIGNvcHlyaWdodCBkb2VzIG5vdCBjb3ZlciB1c2VyIHByb2dyYW1zIHRoYXQgdXNlIGtlcm5lbCBzZXJ2aWNlcwotICogYnkgbm9ybWFsIHN5c3RlbSBjYWxscy4gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgb2YgdGhlIG9sZCBpcHRfcmVjZW50IG1vZHVsZSwgd2hpY2ggY2FycmllZCB0aGUKKyAqIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlOgorICoKKyAqIEF1dGhvcjogU3RlcGhlbiBGcm9zdCA8c2Zyb3N0QHNub3dtYW4ubmV0PgorICogQ29weXJpZ2h0IDIwMDItMjAwMywgU3RlcGhlbiBGcm9zdCwgMi41LnggcG9ydCBieSBsYWZvcmdlQG5ldGZpbHRlci5vcmcKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlY2VudC5oPgogCi0jdW5kZWYgREVCVUcKLSNkZWZpbmUgSEFTSF9MT0cgOQorTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklQIHRhYmxlcyByZWNlbnRseSBzZWVuIG1hdGNoaW5nIG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vKiBEZWZhdWx0cywgdGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIG1vZHVsZSBjb21tYW5kLWxpbmUuICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGlwX2xpc3RfdG90ID0gMTAwOwogc3RhdGljIHVuc2lnbmVkIGludCBpcF9wa3RfbGlzdF90b3QgPSAyMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbGlzdF9oYXNoX3NpemUgPSAwOwogc3RhdGljIHVuc2lnbmVkIGludCBpcF9saXN0X3Blcm1zID0gMDY0NDsKLSNpZmRlZiBERUJVRwotc3RhdGljIGludCBkZWJ1ZyA9IDE7Ci0jZW5kaWYKLQotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiICIgUkVDRU5UX1ZFUiAiOiBTdGVwaGVuIEZyb3N0IDxzZnJvc3RAc25vd21hbi5uZXQ+LiAgaHR0cDovL3Nub3dtYW4ubmV0L3Byb2plY3RzL2lwdF9yZWNlbnQvXG4iOwotCi1NT0RVTEVfQVVUSE9SKCJTdGVwaGVuIEZyb3N0IDxzZnJvc3RAc25vd21hbi5uZXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIklQIHRhYmxlcyByZWNlbnRseSBzZWVuIG1hdGNoaW5nIG1vZHVsZSAiIFJFQ0VOVF9WRVIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogbW9kdWxlX3BhcmFtKGlwX2xpc3RfdG90LCB1aW50LCAwNDAwKTsKIG1vZHVsZV9wYXJhbShpcF9wa3RfbGlzdF90b3QsIHVpbnQsIDA0MDApOwogbW9kdWxlX3BhcmFtKGlwX2xpc3RfaGFzaF9zaXplLCB1aW50LCAwNDAwKTsKIG1vZHVsZV9wYXJhbShpcF9saXN0X3Blcm1zLCB1aW50LCAwNDAwKTsKLSNpZmRlZiBERUJVRwotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0Iik7Ci0jZW5kaWYKLU1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF90b3QsIm51bWJlciBvZiBJUHMgdG8gcmVtZW1iZXIgcGVyIGxpc3QiKTsKLU1PRFVMRV9QQVJNX0RFU0MoaXBfcGt0X2xpc3RfdG90LCJudW1iZXIgb2YgcGFja2V0cyBwZXIgSVAgdG8gcmVtZW1iZXIiKTsKLU1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF9oYXNoX3NpemUsInNpemUgb2YgaGFzaCB0YWJsZSB1c2VkIHRvIGxvb2sgdXAgSVBzIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGlwX2xpc3RfcGVybXMsInBlcm1pc3Npb25zIG9uIC9wcm9jL25ldC9pcHRfcmVjZW50LyogZmlsZXMiKTsKK01PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF90b3QsICJudW1iZXIgb2YgSVBzIHRvIHJlbWVtYmVyIHBlciBsaXN0Iik7CitNT0RVTEVfUEFSTV9ERVNDKGlwX3BrdF9saXN0X3RvdCwgIm51bWJlciBvZiBwYWNrZXRzIHBlciBJUCB0byByZW1lbWJlciAobWF4LiAyNTUpIik7CitNT0RVTEVfUEFSTV9ERVNDKGlwX2xpc3RfaGFzaF9zaXplLCAic2l6ZSBvZiBoYXNoIHRhYmxlIHVzZWQgdG8gbG9vayB1cCBJUHMiKTsKK01PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF9wZXJtcywgInBlcm1pc3Npb25zIG9uIC9wcm9jL25ldC9pcHRfcmVjZW50LyogZmlsZXMiKTsKIAotLyogU3RydWN0dXJlIG9mIG91ciBsaXN0IG9mIHJlY2VudGx5IHNlZW4gYWRkcmVzc2VzLiAqLwotc3RydWN0IHJlY2VudF9pcF9saXN0IHsKLQl1X2ludDMyX3QgYWRkcjsKLQl1X2ludDhfdCAgdHRsOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9zZWVuOwotCXVuc2lnbmVkIGxvbmcgKmxhc3RfcGt0czsKLQl1X2ludDMyX3Qgb2xkZXN0X3BrdDsKLQl1X2ludDMyX3QgaGFzaF9lbnRyeTsKLQl1X2ludDMyX3QgdGltZV9wb3M7CisKK3N0cnVjdCByZWNlbnRfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxydV9saXN0OworCXVfaW50MzJfdAkJYWRkcjsKKwl1X2ludDhfdAkJdHRsOworCXVfaW50OF90CQlpbmRleDsKKwl1X2ludDE2X3QJCW5zdGFtcHM7CisJdW5zaWduZWQgbG9uZwkJc3RhbXBzWzBdOwogfTsKIAotc3RydWN0IHRpbWVfaW5mb19saXN0IHsKLQl1X2ludDMyX3QgcG9zaXRpb247Ci0JdV9pbnQzMl90IHRpbWU7Ci19OwotCi0vKiBTdHJ1Y3R1cmUgb2Ygb3VyIGxpbmtlZCBsaXN0IG9mIHRhYmxlcyBvZiByZWNlbnQgbGlzdHMuICovCi1zdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcyB7Ci0JY2hhciBuYW1lW0lQVF9SRUNFTlRfTkFNRV9MRU5dOwotCWludCBjb3VudDsKLQlpbnQgdGltZV9wb3M7Ci0Jc3RydWN0IHJlY2VudF9pcF9saXN0ICp0YWJsZTsKLQlzdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcyAqbmV4dDsKLQlzcGlubG9ja190IGxpc3RfbG9jazsKLQlpbnQgKmhhc2hfdGFibGU7Ci0Jc3RydWN0IHRpbWVfaW5mb19saXN0ICp0aW1lX2luZm87CitzdHJ1Y3QgcmVjZW50X3RhYmxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJY2hhcgkJCW5hbWVbSVBUX1JFQ0VOVF9OQU1FX0xFTl07CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnN0YXR1c19wcm9jOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jOworI2VuZGlmCisJdW5zaWduZWQgaW50CQlyZWZjbnQ7CisJdW5zaWduZWQgaW50CQllbnRyaWVzOworCXN0cnVjdCBsaXN0X2hlYWQJbHJ1X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlpcGhhc2hbMF07CiB9OwogCi0vKiBPdXIgY3VycmVudCBsaXN0IG9mIGFkZHJlc3NlcyB3ZSBoYXZlIHJlY2VudGx5IHNlZW4uCi0gKiBPbmx5IGFkZGVkIHRvIG9uIGEgLS1zZXQsIGFuZCBvbmx5IHVwZGF0ZWQgb24gLS1zZXQgfHwgLS11cGRhdGUgCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcyAqcl90YWJsZXMgPSBOVUxMOwotCi0vKiBXZSBwcm90ZWN0IHJfbGlzdCB3aXRoIHRoaXMgc3BpbmxvY2sgc28gdHdvIHByb2Nlc3NvcnMgYXJlIG5vdCBtb2RpZnlpbmcKLSAqIHRoZSBsaXN0IGF0IHRoZSBzYW1lIHRpbWUuIAotICovCitzdGF0aWMgTElTVF9IRUFEKHRhYmxlcyk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJlY2VudF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgocmVjZW50X211dGV4KTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKiBPdXIgL3Byb2MvbmV0L2lwdF9yZWNlbnQgZW50cnkgKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmV0X2lwdF9yZWNlbnQgPSBOVUxMOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY19kaXI7CitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwlyZWNlbnRfZm9wczsKICNlbmRpZgogCi0vKiBGdW5jdGlvbiBkZWNsYXJhdGlvbiBmb3IgbGF0ZXIuICovCitzdGF0aWMgdV9pbnQzMl90IGhhc2hfcm5kOworc3RhdGljIGludCBoYXNoX3JuZF9pbml0dGVkOworCitzdGF0aWMgdW5zaWduZWQgaW50IHJlY2VudF9lbnRyeV9oYXNoKHVfaW50MzJfdCBhZGRyKQoreworCWlmICghaGFzaF9ybmRfaW5pdHRlZCkgeworCQlnZXRfcmFuZG9tX2J5dGVzKCZoYXNoX3JuZCwgNCk7CisJCWhhc2hfcm5kX2luaXR0ZWQgPSAxOworCX0KKwlyZXR1cm4gamhhc2hfMXdvcmQoYWRkciwgaGFzaF9ybmQpICYgKGlwX2xpc3RfaGFzaF9zaXplIC0gMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVjZW50X2VudHJ5ICoKK3JlY2VudF9lbnRyeV9sb29rdXAoY29uc3Qgc3RydWN0IHJlY2VudF90YWJsZSAqdGFibGUsIHVfaW50MzJfdCBhZGRyLCB1X2ludDhfdCB0dGwpCit7CisJc3RydWN0IHJlY2VudF9lbnRyeSAqZTsKKwl1bnNpZ25lZCBpbnQgaDsKKworCWggPSByZWNlbnRfZW50cnlfaGFzaChhZGRyKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZ0YWJsZS0+aXBoYXNoW2hdLCBsaXN0KQorCQlpZiAoZS0+YWRkciA9PSBhZGRyICYmICh0dGwgPT0gZS0+dHRsIHx8ICF0dGwgfHwgIWUtPnR0bCkpCisJCQlyZXR1cm4gZTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVjZW50X2VudHJ5X3JlbW92ZShzdHJ1Y3QgcmVjZW50X3RhYmxlICp0LCBzdHJ1Y3QgcmVjZW50X2VudHJ5ICplKQoreworCWxpc3RfZGVsKCZlLT5saXN0KTsKKwlsaXN0X2RlbCgmZS0+bHJ1X2xpc3QpOworCWtmcmVlKGUpOworCXQtPmVudHJpZXMtLTsKK30KKworc3RhdGljIHN0cnVjdCByZWNlbnRfZW50cnkgKgorcmVjZW50X2VudHJ5X2luaXQoc3RydWN0IHJlY2VudF90YWJsZSAqdCwgdV9pbnQzMl90IGFkZHIsIHVfaW50OF90IHR0bCkKK3sKKwlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplOworCisJaWYgKHQtPmVudHJpZXMgPj0gaXBfbGlzdF90b3QpIHsKKwkJZSA9IGxpc3RfZW50cnkodC0+bHJ1X2xpc3QubmV4dCwgc3RydWN0IHJlY2VudF9lbnRyeSwgbHJ1X2xpc3QpOworCQlyZWNlbnRfZW50cnlfcmVtb3ZlKHQsIGUpOworCX0KKwllID0ga21hbGxvYyhzaXplb2YoKmUpICsgc2l6ZW9mKGUtPnN0YW1wc1swXSkgKiBpcF9wa3RfbGlzdF90b3QsCisJCSAgICBHRlBfQVRPTUlDKTsKKwlpZiAoZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwllLT5hZGRyICAgICAgPSBhZGRyOworCWUtPnR0bCAgICAgICA9IHR0bDsKKwllLT5zdGFtcHNbMF0gPSBqaWZmaWVzOworCWUtPm5zdGFtcHMgICA9IDE7CisJZS0+aW5kZXggICAgID0gMTsKKwlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmdC0+aXBoYXNoW3JlY2VudF9lbnRyeV9oYXNoKGFkZHIpXSk7CisJbGlzdF9hZGRfdGFpbCgmZS0+bHJ1X2xpc3QsICZ0LT5scnVfbGlzdCk7CisJdC0+ZW50cmllcysrOworCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCByZWNlbnRfZW50cnlfdXBkYXRlKHN0cnVjdCByZWNlbnRfdGFibGUgKnQsIHN0cnVjdCByZWNlbnRfZW50cnkgKmUpCit7CisJZS0+c3RhbXBzW2UtPmluZGV4KytdID0gamlmZmllczsKKwlpZiAoZS0+aW5kZXggPiBlLT5uc3RhbXBzKQorCQllLT5uc3RhbXBzID0gZS0+aW5kZXg7CisJZS0+aW5kZXggJT0gaXBfcGt0X2xpc3RfdG90OworCWxpc3RfbW92ZV90YWlsKCZlLT5scnVfbGlzdCwgJnQtPmxydV9saXN0KTsKK30KKworc3RhdGljIHN0cnVjdCByZWNlbnRfdGFibGUgKnJlY2VudF90YWJsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVjZW50X3RhYmxlICp0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdGFibGVzLCBsaXN0KQorCQlpZiAoIXN0cmNtcCh0LT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiB0OworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZWNlbnRfdGFibGVfZmx1c2goc3RydWN0IHJlY2VudF90YWJsZSAqdCkKK3sKKwlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplLCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpcF9saXN0X2hhc2hfc2l6ZTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCAmdC0+aXBoYXNoW2ldLCBsaXN0KQorCQkJcmVjZW50X2VudHJ5X3JlbW92ZSh0LCBlKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQKLW1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0gICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0gICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKLSAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKLSAgICAgIGludCBvZmZzZXQsCi0gICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKLSAgICAgIGludCAqaG90ZHJvcCk7Ci0KLS8qIEZ1bmN0aW9uIHRvIGhhc2ggYSBnaXZlbiBhZGRyZXNzIGludG8gdGhlIGhhc2ggdGFibGUgb2YgdGFibGVfc2l6ZSBzaXplICovCi1zdGF0aWMgaW50IGhhc2hfZnVuYyh1bnNpZ25lZCBpbnQgYWRkciwgaW50IHRhYmxlX3NpemUpCitpcHRfcmVjZW50X21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCBjb25zdCB2b2lkICptYXRjaGluZm8sCisJCSBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgaW50ICpob3Rkcm9wKQogewotCWludCByZXN1bHQgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZSA9IGFkZHI7Ci0JZG8geyByZXN1bHQgXj0gdmFsdWU7IH0gd2hpbGUoKHZhbHVlID4+PSBIQVNIX0xPRykpOwotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiAlZCA9IGhhc2hfZnVuYygldSwlZClcbiIsCi0JCQkgcmVzdWx0ICYgKHRhYmxlX3NpemUgLSAxKSwKLQkJCSBhZGRyLAotCQkJIHRhYmxlX3NpemUpOwotI2VuZGlmCi0KLQlyZXR1cm4ocmVzdWx0ICYgKHRhYmxlX3NpemUgLSAxKSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotLyogVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hpY2ggcHJvZHVjZXMgdGhlIG91dHB1dCBmb3Igb3VyIC9wcm9jIG91dHB1dAotICogaW50ZXJmYWNlIHdoaWNoIGxpc3RzIGVhY2ggSVAgYWRkcmVzcywgdGhlIGxhc3Qgc2VlbiB0aW1lIGFuZCB0aGUgCi0gKiBvdGhlciByZWNlbnQgdGltZXMgdGhlIGFkZHJlc3Mgd2FzIHNlZW4uCi0gKi8KLQotc3RhdGljIGludCBpcF9yZWNlbnRfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbiA9IDAsIGNvdW50LCBsYXN0X2xlbiA9IDAsIHBrdF9jb3VudDsKLQlvZmZfdCBwb3MgPSAwOwotCW9mZl90IGJlZ2luID0gMDsKLQlzdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcyAqY3Vycl90YWJsZTsKLQotCWN1cnJfdGFibGUgPSAoc3RydWN0IHJlY2VudF9pcF90YWJsZXMqKSBkYXRhOwotCi0Jc3Bpbl9sb2NrX2JoKCZjdXJyX3RhYmxlLT5saXN0X2xvY2spOwotCWZvcihjb3VudCA9IDA7IGNvdW50IDwgaXBfbGlzdF90b3Q7IGNvdW50KyspIHsKLQkJaWYoIWN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5hZGRyKSBjb250aW51ZTsKLQkJbGFzdF9sZW4gPSBsZW47Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sInNyYz0ldS4ldS4ldS4ldSAiLE5JUFFVQUQoY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmFkZHIpKTsKLQkJbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwidHRsOiAldSAiLGN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS50dGwpOwotCQlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCJsYXN0X3NlZW46ICVsdSAiLGN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5sYXN0X3NlZW4pOwotCQlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCJvbGRlc3RfcGt0OiAldSAiLGN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5vbGRlc3RfcGt0KTsKLQkJbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwibGFzdF9wa3RzOiAlbHUiLGN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5sYXN0X3BrdHNbMF0pOwotCQlmb3IocGt0X2NvdW50ID0gMTsgcGt0X2NvdW50IDwgaXBfcGt0X2xpc3RfdG90OyBwa3RfY291bnQrKykgewotCQkJaWYoIWN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5sYXN0X3BrdHNbcGt0X2NvdW50XSkgYnJlYWs7Ci0JCQlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCIsICVsdSIsY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmxhc3RfcGt0c1twa3RfY291bnRdKTsKLQkJfQotCQlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCJcbiIpOwotCQlwb3MgPSBiZWdpbiArIGxlbjsKLQkJaWYocG9zIDwgb2Zmc2V0KSB7IGxlbiA9IDA7IGJlZ2luID0gcG9zOyB9Ci0JCWlmKHBvcyA+IG9mZnNldCArIGxlbmd0aCkgeyBsZW4gPSBsYXN0X2xlbjsgYnJlYWs7IH0KLQl9Ci0KLQkqc3RhcnQgPSBidWZmZXIgKyAob2Zmc2V0IC0gYmVnaW4pOwotCWxlbiAtPSAob2Zmc2V0IC0gYmVnaW4pOwotCWlmKGxlbiA+IGxlbmd0aCkgbGVuID0gbGVuZ3RoOwotCi0Jc3Bpbl91bmxvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotLyogaXBfcmVjZW50X2N0cmwgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciB1c2VycyB0byBtb2RpZnkgdGhlIHRhYmxlCi0gKiBkaXJlY3RseS4gIFRoaXMgYWxsb3dzIGFkZGluZyBlbnRyaWVzLCByZW1vdmluZyBlbnRyaWVzLCBhbmQKLSAqIGZsdXNoaW5nIHRoZSBlbnRpcmUgdGFibGUuCi0gKiBUaGlzIGlzIGRvbmUgYnkgb3BlbmluZyB1cCB0aGUgYXBwcm9wcmlhdGUgdGFibGUgZm9yIHdyaXRpbmcgYW5kCi0gKiBzZW5kaW5nIG9uZSBvZjoKLSAqIHh4Lnh4Lnh4Lnh4ICAgLS0gQWRkIGVudHJ5IHRvIHRhYmxlIHdpdGggY3VycmVudCB0aW1lCi0gKiAreHgueHgueHgueHggIC0tIEFkZCBlbnRyeSB0byB0YWJsZSB3aXRoIGN1cnJlbnQgdGltZQotICogLXh4Lnh4Lnh4Lnh4ICAtLSBSZW1vdmUgZW50cnkgZnJvbSB0YWJsZQotICogY2xlYXIgICAgICAgICAtLSBGbHVzaCB0YWJsZSwgcmVtb3ZlIGFsbCBlbnRyaWVzCi0gKi8KLQotc3RhdGljIGludCBpcF9yZWNlbnRfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmlucHV0LCB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKmRhdGEpCi17Ci0Jc3RhdGljIGNvbnN0IHVfaW50MzJfdCBtYXhbNF0gPSB7IDB4ZmZmZmZmZmYsIDB4ZmZmZmZmLCAweGZmZmYsIDB4ZmYgfTsKLQl1X2ludDMyX3QgdmFsOwotCWludCBiYXNlLCB1c2VkID0gMDsKLQljaGFyIGMsICpjcDsKLQl1bmlvbiBpYWRkciB7Ci0JCXVpbnQ4X3QgYnl0ZXNbNF07Ci0JCXVpbnQzMl90IHdvcmQ7Ci0JfSByZXM7Ci0JdWludDhfdCAqcHAgPSByZXMuYnl0ZXM7Ci0JaW50IGRpZ2l0OwotCi0JY2hhciBidWZmZXJbMjBdOwotCWludCBsZW4sIGNoZWNrX3NldCA9IDAsIGNvdW50OwotCXVfaW50MzJfdCBhZGRyID0gMDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpcHRfcmVjZW50X2luZm8gKmluZm87Ci0Jc3RydWN0IHJlY2VudF9pcF90YWJsZXMgKmN1cnJfdGFibGU7Ci0KLQljdXJyX3RhYmxlID0gKHN0cnVjdCByZWNlbnRfaXBfdGFibGVzKikgZGF0YTsKLQotCWlmKHNpemUgPiAyMCkgbGVuID0gMjA7IGVsc2UgbGVuID0gc2l6ZTsKLQotCWlmKGNvcHlfZnJvbV91c2VyKGJ1ZmZlcixpbnB1dCxsZW4pKSByZXR1cm4gLUVGQVVMVDsKLQotCWlmKGxlbiA8IDIwKSBidWZmZXJbbGVuXSA9ICdcMCc7Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGlwX3JlY2VudF9jdHJsIGxlbjogJWQsIGlucHV0OiBgJS4yMHMnXG4iLGxlbixidWZmZXIpOwotI2VuZGlmCi0KLQljcCA9IGJ1ZmZlcjsKLQl3aGlsZShpc3NwYWNlKCpjcCkpIHsgY3ArKzsgdXNlZCsrOyBpZih1c2VkID49IGxlbi01KSByZXR1cm4gdXNlZDsgfQotCi0JLyogQ2hlY2sgaWYgd2UgYXJlIGFza2VkIHRvIGZsdXNoIHRoZSBlbnRpcmUgdGFibGUgKi8KLQlpZighbWVtY21wKGNwLCJjbGVhciIsNSkpIHsKLQkJdXNlZCArPSA1OwotCQlzcGluX2xvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0JCWN1cnJfdGFibGUtPnRpbWVfcG9zID0gMDsKLQkJZm9yKGNvdW50ID0gMDsgY291bnQgPCBpcF9saXN0X2hhc2hfc2l6ZTsgY291bnQrKykgewotCQkJY3Vycl90YWJsZS0+aGFzaF90YWJsZVtjb3VudF0gPSAtMTsKLQkJfQotCQlmb3IoY291bnQgPSAwOyBjb3VudCA8IGlwX2xpc3RfdG90OyBjb3VudCsrKSB7Ci0JCQljdXJyX3RhYmxlLT50YWJsZVtjb3VudF0ubGFzdF9zZWVuID0gMDsKLQkJCWN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5hZGRyID0gMDsKLQkJCWN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS50dGwgPSAwOwotCQkJbWVtc2V0KGN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5sYXN0X3BrdHMsMCxpcF9wa3RfbGlzdF90b3Qqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJCWN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5vbGRlc3RfcGt0ID0gMDsKLQkJCWN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS50aW1lX3BvcyA9IDA7Ci0JCQljdXJyX3RhYmxlLT50aW1lX2luZm9bY291bnRdLnBvc2l0aW9uID0gY291bnQ7Ci0JCQljdXJyX3RhYmxlLT50aW1lX2luZm9bY291bnRdLnRpbWUgPSAwOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZjdXJyX3RhYmxlLT5saXN0X2xvY2spOwotCQlyZXR1cm4gdXNlZDsKLQl9Ci0KLSAgICAgICAgY2hlY2tfc2V0ID0gSVBUX1JFQ0VOVF9TRVQ7Ci0Jc3dpdGNoKCpjcCkgewotCQljYXNlICcrJzogY2hlY2tfc2V0ID0gSVBUX1JFQ0VOVF9TRVQ7IGNwKys7IHVzZWQrKzsgYnJlYWs7Ci0JCWNhc2UgJy0nOiBjaGVja19zZXQgPSBJUFRfUkVDRU5UX1JFTU9WRTsgY3ArKzsgdXNlZCsrOyBicmVhazsKLQkJZGVmYXVsdDogaWYoIWlzZGlnaXQoKmNwKSkgcmV0dXJuICh1c2VkKzEpOyBicmVhazsKLQl9Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGlwX3JlY2VudF9jdHJsIGNwOiBgJWMnLCBjaGVja19zZXQ6ICVkXG4iLCpjcCxjaGVja19zZXQpOwotI2VuZGlmCi0JLyogR2V0IGFkZHIgKGVmZmVjdGl2ZWx5IGluZXRfYXRvbigpKSAqLwotCS8qIFNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIGxpYmMsIGEgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCBmb3IgZG9pbmcKLQkgKiB0aGlzIHdvdWxkLCBvZiBjb3Vyc2UsIGJlIGdyZWF0bHkgcHJlZmVycmVkLCBidXQgb3VyIG9wdGlvbnMgYXBwZWFyCi0JICogdG8gYmUgcmF0aGVyIGxpbWl0ZWQsIHNvIHdlIHdpbGwganVzdCBkbyBpdCBvdXJzZWx2ZXMgaGVyZS4KLQkgKi8KLQlyZXMud29yZCA9IDA7Ci0KLQljID0gKmNwOwotCWZvcig7OykgewotCQlpZighaXNkaWdpdChjKSkgcmV0dXJuIHVzZWQ7Ci0JCXZhbCA9IDA7IGJhc2UgPSAxMDsgZGlnaXQgPSAwOwotCQlpZihjID09ICcwJykgewotCQkJYyA9ICorK2NwOwotCQkJaWYoYyA9PSAneCcgfHwgYyA9PSAnWCcpIGJhc2UgPSAxNiwgYyA9ICorK2NwOwotCQkJZWxzZSB7IGJhc2UgPSA4OyBkaWdpdCA9IDE7IH0KLQkJfQotCQlmb3IoOzspIHsKLQkJCWlmKGlzYXNjaWkoYykgJiYgaXNkaWdpdChjKSkgewotCQkJCWlmKGJhc2UgPT0gOCAmJiAoYyA9PSAnOCcgfHwgYyA9PSAnMCcpKSByZXR1cm4gdXNlZDsKLQkJCQl2YWwgPSAodmFsICogYmFzZSkgKyAoYyAtICcwJyk7Ci0JCQkJYyA9ICorK2NwOwotCQkJCWRpZ2l0ID0gMTsKLQkJCX0gZWxzZSBpZihiYXNlID09IDE2ICYmIGlzYXNjaWkoYykgJiYgaXN4ZGlnaXQoYykpIHsKLQkJCQl2YWwgPSAodmFsIDw8IDQpIHwgKGMgKyAxMCAtIChpc2xvd2VyKGMpID8gJ2EnIDogJ0EnKSk7Ci0JCQkJYyA9ICorK2NwOwotCQkJCWRpZ2l0ID0gMTsKLQkJCX0gZWxzZSBicmVhazsKLQkJfQotCQlpZihjID09ICcuJykgewotCQkJaWYocHAgPiByZXMuYnl0ZXMgKyAyIHx8IHZhbCA+IDB4ZmYpIHJldHVybiB1c2VkOwotCQkJKnBwKysgPSB2YWw7Ci0JCQljID0gKisrY3A7Ci0JCX0gZWxzZSBicmVhazsKLQl9Ci0JdXNlZCA9IGNwIC0gYnVmZmVyOwotCWlmKGMgIT0gJ1wwJyAmJiAoIWlzYXNjaWkoYykgfHwgIWlzc3BhY2UoYykpKSByZXR1cm4gdXNlZDsKLQlpZihjID09ICdcbicpIHVzZWQrKzsKLQlpZighZGlnaXQpIHJldHVybiB1c2VkOwotCi0JaWYodmFsID4gbWF4W3BwIC0gcmVzLmJ5dGVzXSkgcmV0dXJuIHVzZWQ7Ci0JYWRkciA9IHJlcy53b3JkIHwgaHRvbmwodmFsKTsKLQotCWlmKCFhZGRyICYmIGNoZWNrX3NldCA9PSBJUFRfUkVDRU5UX1NFVCkgcmV0dXJuIHVzZWQ7Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGlwX3JlY2VudF9jdHJsIGM6ICVjLCBhZGRyOiAldSB1c2VkOiAlZFxuIixjLGFkZHIsdXNlZCk7Ci0jZW5kaWYKLQotCS8qIFNldCB1cCBhbmQganVzdCBjYWxsIG1hdGNoICovCi0JaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHRfcmVjZW50X2luZm8pLEdGUF9LRVJORUwpOwotCWlmKCFpbmZvKSB7IHJldHVybiAtRU5PTUVNOyB9Ci0JaW5mby0+c2Vjb25kcyA9IDA7Ci0JaW5mby0+aGl0X2NvdW50ID0gMDsKLQlpbmZvLT5jaGVja19zZXQgPSBjaGVja19zZXQ7Ci0JaW5mby0+aW52ZXJ0ID0gMDsKLQlpbmZvLT5zaWRlID0gSVBUX1JFQ0VOVF9TT1VSQ0U7Ci0Jc3RybmNweShpbmZvLT5uYW1lLGN1cnJfdGFibGUtPm5hbWUsSVBUX1JFQ0VOVF9OQU1FX0xFTik7Ci0JaW5mby0+bmFtZVtJUFRfUkVDRU5UX05BTUVfTEVOLTFdID0gJ1wwJzsKLQotCXNrYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmKSxHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikgewotCQl1c2VkID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV9pbmZvOwotCX0KLQlza2ItPm5oLmlwaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGhkciksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2ItPm5oLmlwaCkgewotCQl1c2VkID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV9za2I7Ci0JfQotCi0Jc2tiLT5uaC5pcGgtPnNhZGRyID0gYWRkcjsKLQlza2ItPm5oLmlwaC0+ZGFkZHIgPSAwOwotCS8qIENsZWFyIHR0bCBzaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGl0ICovCi0Jc2tiLT5uaC5pcGgtPnR0bCA9IDA7Ci0JbWF0Y2goc2tiLE5VTEwsTlVMTCxOVUxMLGluZm8sMCwwLE5VTEwpOwotCi0Ja2ZyZWUoc2tiLT5uaC5pcGgpOwotb3V0X2ZyZWVfc2tiOgotCWtmcmVlKHNrYik7Ci1vdXRfZnJlZV9pbmZvOgotCWtmcmVlKGluZm8pOwotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBMZWF2aW5nIGlwX3JlY2VudF9jdHJsIGFkZHI6ICV1IHVzZWQ6ICVkXG4iLGFkZHIsdXNlZCk7Ci0jZW5kaWYKLQlyZXR1cm4gdXNlZDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0KLS8qICdtYXRjaCcgaXMgb3VyIHByaW1hcnkgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGUga2VybmVsIHdoZW5ldmVyIGEgcnVsZSBpcwotICogaGl0IHdpdGggb3VyIG1vZHVsZSBhcyBhbiBvcHRpb24gdG8gaXQuCi0gKiBXaGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBkZXBlbmRzIG9uIHdoYXQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCBvZiBpdCBieQotICogdGhlIHVzZXI6Ci0gKiAtLXNldCAtLSBBZGQgb3IgdXBkYXRlIGxhc3Qgc2VlbiB0aW1lIG9mIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgcGFja2V0Ci0gKiAgIC0tIG1hdGNoaW5mby0+Y2hlY2tfc2V0ID09IElQVF9SRUNFTlRfU0VUCi0gKiAtLXJjaGVjayAtLSBKdXN0IGNoZWNrIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyBpbiB0aGUgbGlzdAotICogICAtLSBtYXRjaGluZm8tPmNoZWNrX3NldCA9PSBJUFRfUkVDRU5UX0NIRUNLCi0gKiAtLXVwZGF0ZSAtLSBJZiB0aGUgc291cmNlIGFkZHJlc3MgaXMgaW4gdGhlIGxpc3QsIHVwZGF0ZSBsYXN0X3NlZW4KLSAqICAgLS0gbWF0Y2hpbmZvLT5jaGVja19zZXQgPT0gSVBUX1JFQ0VOVF9VUERBVEUKLSAqIC0tcmVtb3ZlIC0tIElmIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyBpbiB0aGUgbGlzdCwgcmVtb3ZlIGl0Ci0gKiAgIC0tIG1hdGNoaW5mby0+Y2hlY2tfc2V0ID09IElQVF9SRUNFTlRfUkVNT1ZFCi0gKiAtLXNlY29uZHMgLS0gT3B0aW9uIHRvIC0tcmNoZWNrLy0tdXBkYXRlLCBvbmx5IG1hdGNoIGlmIGxhc3Rfc2VlbiB3aXRoaW4gc2Vjb25kcwotICogICAtLSBtYXRjaGluZm8tPnNlY29uZHMKLSAqIC0taGl0Y291bnQgLS0gT3B0aW9uIHRvIC0tcmNoZWNrLy0tdXBkYXRlLCBvbmx5IG1hdGNoIGlmIHNlZW4gaGl0Y291bnQgdGltZXMKLSAqICAgLS0gbWF0Y2hpbmZvLT5oaXRfY291bnQKLSAqIC0tc2Vjb25kcyBhbmQgLS1oaXRjb3VudCBjYW4gYmUgY29tYmluZWQKLSAqLwotc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKQotewotCWludCBwa3RfY291bnQsIGhpdHNfZm91bmQsIGFuczsKLQl1bnNpZ25lZCBsb25nIG5vdzsKIAljb25zdCBzdHJ1Y3QgaXB0X3JlY2VudF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwotCXVfaW50MzJfdCBhZGRyID0gMCwgdGltZV90ZW1wOwotCXVfaW50OF90IHR0bCA9IHNrYi0+bmguaXBoLT50dGw7Ci0JaW50ICpoYXNoX3RhYmxlOwotCWludCBvcmlnX2hhc2hfcmVzdWx0LCBoYXNoX3Jlc3VsdCwgdGVtcCwgbG9jYXRpb24gPSAwLCB0aW1lX2xvYywgZW5kX2NvbGxpc2lvbl9jaGFpbiA9IC0xOwotCXN0cnVjdCB0aW1lX2luZm9fbGlzdCAqdGltZV9pbmZvOwotCXN0cnVjdCByZWNlbnRfaXBfdGFibGVzICpjdXJyX3RhYmxlOwotCXN0cnVjdCByZWNlbnRfaXBfdGFibGVzICpsYXN0X3RhYmxlOwotCXN0cnVjdCByZWNlbnRfaXBfbGlzdCAqcl9saXN0OworCXN0cnVjdCByZWNlbnRfdGFibGUgKnQ7CisJc3RydWN0IHJlY2VudF9lbnRyeSAqZTsKKwl1X2ludDMyX3QgYWRkcjsKKwl1X2ludDhfdCB0dGw7CisJaW50IHJldCA9IGluZm8tPmludmVydDsKIAotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKSBjYWxsZWRcbiIpOwotI2VuZGlmCisJaWYgKGluZm8tPnNpZGUgPT0gSVBUX1JFQ0VOVF9ERVNUKQorCQlhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOworCWVsc2UKKwkJYWRkciA9IHNrYi0+bmguaXBoLT5zYWRkcjsKIAotCS8qIERlZmF1bHQgaXMgZmFsc2UgXiBpbmZvLT5pbnZlcnQgKi8KLQlhbnMgPSBpbmZvLT5pbnZlcnQ7CisJdHRsID0gc2tiLT5uaC5pcGgtPnR0bDsKKwkvKiB1c2UgVFRMIGFzIHNlZW4gYmVmb3JlIGZvcndhcmRpbmcgKi8KKwlpZiAob3V0ICYmICFza2ItPnNrKQorCQl0dGwrKzsKIAotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogbmFtZSA9ICclcydcbiIsaW5mby0+bmFtZSk7Ci0jZW5kaWYKLQotCS8qIGlmIG91dCAhPSBOVUxMIHRoZW4gcm91dGluZyBoYXMgYmVlbiBkb25lIGFuZCBUVEwgY2hhbmdlZC4KLQkgKiBXZSBjaGFuZ2UgaXQgYmFjayBoZXJlIGludGVybmFsbHkgZm9yIG1hdGNoIHdoYXQgY2FtZSBpbiBiZWZvcmUgcm91dGluZy4gKi8KLQlpZihvdXQpIHR0bCsrOwotCi0JLyogRmluZCB0aGUgcmlnaHQgdGFibGUgKi8KIAlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQljdXJyX3RhYmxlID0gcl90YWJsZXM7Ci0Jd2hpbGUoIChsYXN0X3RhYmxlID0gY3Vycl90YWJsZSkgJiYgc3RybmNtcChpbmZvLT5uYW1lLGN1cnJfdGFibGUtPm5hbWUsSVBUX1JFQ0VOVF9OQU1FX0xFTikgJiYgKGN1cnJfdGFibGUgPSBjdXJyX3RhYmxlLT5uZXh0KSApOworCXQgPSByZWNlbnRfdGFibGVfbG9va3VwKGluZm8tPm5hbWUpOworCWUgPSByZWNlbnRfZW50cnlfbG9va3VwKHQsIGFkZHIsCisJCQkJaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9UVEwgPyB0dGwgOiAwKTsKKwlpZiAoZSA9PSBOVUxMKSB7CisJCWlmICghKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfU0VUKSkKKwkJCWdvdG8gb3V0OworCQllID0gcmVjZW50X2VudHJ5X2luaXQodCwgYWRkciwgdHRsKTsKKwkJaWYgKGUgPT0gTlVMTCkKKwkJCSpob3Rkcm9wID0gMTsKKwkJcmV0IF49IDE7CisJCWdvdG8gb3V0OworCX0KIAotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogdGFibGUgZm91bmQoJyVzJylcbiIsaW5mby0+bmFtZSk7Ci0jZW5kaWYKKwlpZiAoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9TRVQpCisJCXJldCBePSAxOworCWVsc2UgaWYgKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfUkVNT1ZFKSB7CisJCXJlY2VudF9lbnRyeV9yZW1vdmUodCwgZSk7CisJCXJldCBePSAxOworCX0gZWxzZSBpZiAoaW5mby0+Y2hlY2tfc2V0ICYgKElQVF9SRUNFTlRfQ0hFQ0sgfCBJUFRfUkVDRU5UX1VQREFURSkpIHsKKwkJdW5zaWduZWQgbG9uZyB0ID0gamlmZmllcyAtIGluZm8tPnNlY29uZHMgKiBIWjsKKwkJdW5zaWduZWQgaW50IGksIGhpdHMgPSAwOwogCisJCWZvciAoaSA9IDA7IGkgPCBlLT5uc3RhbXBzOyBpKyspIHsKKwkJCWlmIChpbmZvLT5zZWNvbmRzICYmIHRpbWVfYWZ0ZXIodCwgZS0+c3RhbXBzW2ldKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICgrK2hpdHMgPj0gaW5mby0+aGl0X2NvdW50KSB7CisJCQkJcmV0IF49IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9TRVQgfHwKKwkgICAgKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfVVBEQVRFICYmIHJldCkpIHsKKwkJcmVjZW50X2VudHJ5X3VwZGF0ZSh0LCBlKTsKKwkJZS0+dHRsID0gdHRsOworCX0KK291dDoKIAlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCi0JLyogVGFibGUgd2l0aCB0aGlzIG5hbWUgbm90IGZvdW5kLCBtYXRjaCBpbXBvc3NpYmxlICovCi0JaWYoIWN1cnJfdGFibGUpIHsgcmV0dXJuIGFuczsgfQotCi0JLyogTWFrZSBzdXJlIG5vIG9uZSBpcyBjaGFuZ2luZyB0aGUgbGlzdCB3aGlsZSB3ZSB3b3JrIHdpdGggaXQgKi8KLQlzcGluX2xvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0KLQlyX2xpc3QgPSBjdXJyX3RhYmxlLT50YWJsZTsKLQlpZihpbmZvLT5zaWRlID09IElQVF9SRUNFTlRfREVTVCkgYWRkciA9IHNrYi0+bmguaXBoLT5kYWRkcjsgZWxzZSBhZGRyID0gc2tiLT5uaC5pcGgtPnNhZGRyOwotCi0JaWYoIWFkZHIpIHsgCi0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKSBhZGRyZXNzICgldSkgaW52YWxpZCwgbGVhdmluZy5cbiIsYWRkcik7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0JCXJldHVybiBhbnM7Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBjaGVja2luZyB0YWJsZSwgYWRkcjogJXUsIHR0bDogJXUsIG9yaWdfdHRsOiAldVxuIixhZGRyLHR0bCxza2ItPm5oLmlwaC0+dHRsKTsKLSNlbmRpZgotCi0JLyogR2V0IGppZmZpZXMgbm93IGluIGNhc2UgdGhleSBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBsb2NrICovCi0Jbm93ID0gamlmZmllczsKLQloYXNoX3RhYmxlID0gY3Vycl90YWJsZS0+aGFzaF90YWJsZTsKLQl0aW1lX2luZm8gPSBjdXJyX3RhYmxlLT50aW1lX2luZm87Ci0KLQlvcmlnX2hhc2hfcmVzdWx0ID0gaGFzaF9yZXN1bHQgPSBoYXNoX2Z1bmMoYWRkcixpcF9saXN0X2hhc2hfc2l6ZSk7Ci0JLyogSGFzaCBlbnRyeSBhdCB0aGlzIHJlc3VsdCB1c2VkICovCi0JLyogQ2hlY2sgZm9yIFRUTCBtYXRjaCBpZiByZXF1ZXN0ZWQuICBJZiBUVEwgaXMgemVybyB0aGVuIGEgbWF0Y2ggd291bGQgbmV2ZXIKLQkgKiBoYXBwZW4sIHNvIG1hdGNoIHJlZ2FyZGxlc3Mgb2YgZXhpc3RpbmcgVFRMIGluIHRoYXQgY2FzZS4gIFplcm8gbWVhbnMgdGhlCi0JICogZW50cnkgd2FzIGFkZGVkIHZpYSB0aGUgL3Byb2MgaW50ZXJmYWNlIGFueXdheSwgc28gd2Ugd2lsbCBqdXN0IHVzZSB0aGUKLQkgKiBmaXJzdCBUVEwgd2UgZ2V0IGZvciB0aGF0IElQIGFkZHJlc3MuICovCi0JaWYoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9UVEwpIHsKLQkJd2hpbGUoaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0gIT0gLTEgJiYgIShyX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLmFkZHIgPT0gYWRkciAmJgotCQkJKCFyX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLnR0bCB8fCByX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLnR0bCA9PSB0dGwpKSkgewotCQkJLyogQ29sbGlzaW9uIGluIGhhc2ggdGFibGUgKi8KLQkJCWhhc2hfcmVzdWx0ID0gKGhhc2hfcmVzdWx0ICsgMSkgJSBpcF9saXN0X2hhc2hfc2l6ZTsKLQkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlKGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdICE9IC0xICYmIHJfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0uYWRkciAhPSBhZGRyKSB7Ci0JCQkvKiBDb2xsaXNpb24gaW4gaGFzaCB0YWJsZSAqLwotCQkJaGFzaF9yZXN1bHQgPSAoaGFzaF9yZXN1bHQgKyAxKSAlIGlwX2xpc3RfaGFzaF9zaXplOwotCQl9Ci0JfQotCi0JaWYoaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0gPT0gLTEgJiYgIShpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1NFVCkpIHsKLQkJLyogSVAgbm90IGluIGxpc3QgYW5kIG5vdCBhc2tlZCB0byBTRVQgKi8KLQkJc3Bpbl91bmxvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0JCXJldHVybiBhbnM7Ci0JfQotCi0JLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBoYW5kbGUgdGhlIGNvbGxpc2lvbiwgZG8gbm90IG5lZWQgdG8gb24gUkVNT1ZFICovCi0JaWYob3JpZ19oYXNoX3Jlc3VsdCAhPSBoYXNoX3Jlc3VsdCAmJiAhKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfUkVNT1ZFKSkgewotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IENvbGxpc2lvbiBpbiBoYXNoIHRhYmxlLiAob3I6ICVkLGhyOiAlZCxvYTogJXUsaGE6ICV1KVxuIiwKLQkJCQkgb3JpZ19oYXNoX3Jlc3VsdCwKLQkJCQkgaGFzaF9yZXN1bHQsCi0JCQkJIHJfbGlzdFtoYXNoX3RhYmxlW29yaWdfaGFzaF9yZXN1bHRdXS5hZGRyLAotCQkJCSBhZGRyKTsKLSNlbmRpZgotCi0JCS8qIFdlIGhhZCBhIGNvbGxpc2lvbi4KLQkJICogb3JpZ19oYXNoX3Jlc3VsdCBpcyB3aGVyZSB3ZSBzdGFydGVkLCBoYXNoX3Jlc3VsdCBpcyB3aGVyZSB3ZSBlbmRlZCB1cC4KLQkJICogU28sIHN3YXAgdGhlbSBiZWNhdXNlIHdlIGFyZSBsaWtlbHkgdG8gc2VlIHRoZSBzYW1lIGd1eSBhZ2FpbiBzb29uZXIgKi8KLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgewotCQkgIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogQ29sbGlzaW9uOyBoYXNoX3RhYmxlW29yaWdfaGFzaF9yZXN1bHRdID0gJWRcbiIsaGFzaF90YWJsZVtvcmlnX2hhc2hfcmVzdWx0XSk7Ci0JCSAgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBDb2xsaXNpb247IHJfbGlzdFtoYXNoX3RhYmxlW29yaWdfaGFzaF9yZXN1bHRdXS5oYXNoX2VudHJ5ID0gJWRcbiIsCi0JCQkJcl9saXN0W2hhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF1dLmhhc2hfZW50cnkpOwotCQl9Ci0jZW5kaWYKLQotCQlyX2xpc3RbaGFzaF90YWJsZVtvcmlnX2hhc2hfcmVzdWx0XV0uaGFzaF9lbnRyeSA9IGhhc2hfcmVzdWx0OwotCi0KLQkJdGVtcCA9IGhhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF07Ci0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogQ29sbGlzaW9uOyBoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XSA9ICVkXG4iLGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdKTsKLSNlbmRpZgotCQloYXNoX3RhYmxlW29yaWdfaGFzaF9yZXN1bHRdID0gaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF07Ci0JCWhhc2hfdGFibGVbaGFzaF9yZXN1bHRdID0gdGVtcDsKLQkJdGVtcCA9IGhhc2hfcmVzdWx0OwotCQloYXNoX3Jlc3VsdCA9IG9yaWdfaGFzaF9yZXN1bHQ7Ci0JCW9yaWdfaGFzaF9yZXN1bHQgPSB0ZW1wOwotCQl0aW1lX2luZm9bcl9saXN0W2hhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF1dLnRpbWVfcG9zXS5wb3NpdGlvbiA9IGhhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF07Ci0JCWlmKGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdICE9IC0xKSB7Ci0JCQlyX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLmhhc2hfZW50cnkgPSBoYXNoX3Jlc3VsdDsKLQkJCXRpbWVfaW5mb1tyX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLnRpbWVfcG9zXS5wb3NpdGlvbiA9IGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdOwotCQl9Ci0KLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBDb2xsaXNpb24gaGFuZGxlZC5cbiIpOwotI2VuZGlmCi0JfQotCi0JaWYoaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0gPT0gLTEpIHsKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBOZXcgdGFibGUgZW50cnkuIChocjogJWQsaGE6ICV1KVxuIiwKLQkJCQkgaGFzaF9yZXN1bHQsIGFkZHIpOwotI2VuZGlmCi0KLQkJLyogTmV3IGl0ZW0gZm91bmQgYW5kIElQVF9SRUNFTlRfU0VULCBzbyB3ZSBuZWVkIHRvIGFkZCBpdCAqLwotCQlsb2NhdGlvbiA9IHRpbWVfaW5mb1tjdXJyX3RhYmxlLT50aW1lX3Bvc10ucG9zaXRpb247Ci0JCWhhc2hfdGFibGVbcl9saXN0W2xvY2F0aW9uXS5oYXNoX2VudHJ5XSA9IC0xOwotCQloYXNoX3RhYmxlW2hhc2hfcmVzdWx0XSA9IGxvY2F0aW9uOwotCQltZW1zZXQocl9saXN0W2xvY2F0aW9uXS5sYXN0X3BrdHMsMCxpcF9wa3RfbGlzdF90b3Qqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJcl9saXN0W2xvY2F0aW9uXS50aW1lX3BvcyA9IGN1cnJfdGFibGUtPnRpbWVfcG9zOwotCQlyX2xpc3RbbG9jYXRpb25dLmFkZHIgPSBhZGRyOwotCQlyX2xpc3RbbG9jYXRpb25dLnR0bCA9IHR0bDsKLQkJcl9saXN0W2xvY2F0aW9uXS5sYXN0X3NlZW4gPSBub3c7Ci0JCXJfbGlzdFtsb2NhdGlvbl0ub2xkZXN0X3BrdCA9IDE7Ci0JCXJfbGlzdFtsb2NhdGlvbl0ubGFzdF9wa3RzWzBdID0gbm93OwotCQlyX2xpc3RbbG9jYXRpb25dLmhhc2hfZW50cnkgPSBoYXNoX3Jlc3VsdDsKLQkJdGltZV9pbmZvW2N1cnJfdGFibGUtPnRpbWVfcG9zXS50aW1lID0gcl9saXN0W2xvY2F0aW9uXS5sYXN0X3NlZW47Ci0JCWN1cnJfdGFibGUtPnRpbWVfcG9zID0gKGN1cnJfdGFibGUtPnRpbWVfcG9zICsgMSkgJSBpcF9saXN0X3RvdDsKLQotCQlhbnMgPSAhaW5mby0+aW52ZXJ0OwotCX0gZWxzZSB7Ci0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogRXhpc3RpbmcgdGFibGUgZW50cnkuIChocjogJWQsaGE6ICV1KVxuIiwKLQkJCQkgaGFzaF9yZXN1bHQsCi0JCQkJIGFkZHIpOwotI2VuZGlmCi0KLQkJLyogRXhpc3RpbmcgaXRlbSBmb3VuZCAqLwotCQlsb2NhdGlvbiA9IGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdOwotCQkvKiBXZSBoYXZlIGEgbWF0Y2ggb24gYWRkcmVzcywgbm93IHRvIG1ha2Ugc3VyZSBpdCBtZWV0cyBhbGwgcmVxdWlyZW1lbnRzIGZvciBhCi0JCSAqIGZ1bGwgbWF0Y2guICovCi0JCWlmKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfQ0hFQ0sgfHwgaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9VUERBVEUpIHsKLQkJCWlmKCFpbmZvLT5zZWNvbmRzICYmICFpbmZvLT5oaXRfY291bnQpIGFucyA9ICFpbmZvLT5pbnZlcnQ7IGVsc2UgYW5zID0gaW5mby0+aW52ZXJ0OwotCQkJaWYoaW5mby0+c2Vjb25kcyAmJiAhaW5mby0+aGl0X2NvdW50KSB7Ci0JCQkJaWYodGltZV9iZWZvcmVfZXEobm93LHJfbGlzdFtsb2NhdGlvbl0ubGFzdF9zZWVuK2luZm8tPnNlY29uZHMqSFopKSBhbnMgPSAhaW5mby0+aW52ZXJ0OyBlbHNlIGFucyA9IGluZm8tPmludmVydDsKLQkJCX0KLQkJCWlmKGluZm8tPnNlY29uZHMgJiYgaW5mby0+aGl0X2NvdW50KSB7Ci0JCQkJZm9yKHBrdF9jb3VudCA9IDAsIGhpdHNfZm91bmQgPSAwOyBwa3RfY291bnQgPCBpcF9wa3RfbGlzdF90b3Q7IHBrdF9jb3VudCsrKSB7Ci0JCQkJCWlmKHJfbGlzdFtsb2NhdGlvbl0ubGFzdF9wa3RzW3BrdF9jb3VudF0gPT0gMCkgYnJlYWs7Ci0JCQkJCWlmKHRpbWVfYmVmb3JlX2VxKG5vdyxyX2xpc3RbbG9jYXRpb25dLmxhc3RfcGt0c1twa3RfY291bnRdK2luZm8tPnNlY29uZHMqSFopKSBoaXRzX2ZvdW5kKys7Ci0JCQkJfQotCQkJCWlmKGhpdHNfZm91bmQgPj0gaW5mby0+aGl0X2NvdW50KSBhbnMgPSAhaW5mby0+aW52ZXJ0OyBlbHNlIGFucyA9IGluZm8tPmludmVydDsKLQkJCX0KLQkJCWlmKGluZm8tPmhpdF9jb3VudCAmJiAhaW5mby0+c2Vjb25kcykgewotCQkJCWZvcihwa3RfY291bnQgPSAwLCBoaXRzX2ZvdW5kID0gMDsgcGt0X2NvdW50IDwgaXBfcGt0X2xpc3RfdG90OyBwa3RfY291bnQrKykgewotCQkJCQlpZihyX2xpc3RbbG9jYXRpb25dLmxhc3RfcGt0c1twa3RfY291bnRdID09IDApIGJyZWFrOwotCQkJCQloaXRzX2ZvdW5kKys7Ci0JCQkJfQotCQkJCWlmKGhpdHNfZm91bmQgPj0gaW5mby0+aGl0X2NvdW50KSBhbnMgPSAhaW5mby0+aW52ZXJ0OyBlbHNlIGFucyA9IGluZm8tPmludmVydDsKLQkJCX0KLQkJfQotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSB7Ci0JCQlpZihhbnMpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBtYXRjaCBhZGRyOiAldVxuIixhZGRyKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IG5vIG1hdGNoIGFkZHI6ICV1XG4iLGFkZHIpOwotCQl9Ci0jZW5kaWYKLQotCQkvKiBJZiBhbmQgb25seSBpZiB3ZSBoYXZlIGJlZW4gYXNrZWQgdG8gU0VULCBvciB0byBVUERBVEUgKG9uIG1hdGNoKSBkbyB3ZSBhZGQgdGhlCi0JCSAqIGN1cnJlbnQgdGltZXN0YW1wIHRvIHRoZSBsYXN0X3NlZW4uICovCi0JCWlmKChpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1NFVCAmJiAoYW5zID0gIWluZm8tPmludmVydCkpIHx8IChpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1VQREFURSAmJiBhbnMpKSB7Ci0jaWZkZWYgREVCVUcKLQkJCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IFNFVCBvciBVUERBVEU7IHVwZGF0aW5nIHRpbWUgaW5mby5cbiIpOwotI2VuZGlmCi0JCQkvKiBIYXZlIHRvIHVwZGF0ZSBvdXIgdGltZSBpbmZvICovCi0JCQl0aW1lX2xvYyA9IHJfbGlzdFtsb2NhdGlvbl0udGltZV9wb3M7Ci0JCQl0aW1lX2luZm9bdGltZV9sb2NdLnRpbWUgPSBub3c7Ci0JCQl0aW1lX2luZm9bdGltZV9sb2NdLnBvc2l0aW9uID0gbG9jYXRpb247Ci0JCQl3aGlsZSgodGltZV9pbmZvWyh0aW1lX2xvYysxKSAlIGlwX2xpc3RfdG90XS50aW1lIDwgdGltZV9pbmZvW3RpbWVfbG9jXS50aW1lKSAmJiAoKHRpbWVfbG9jKzEpICUgaXBfbGlzdF90b3QpICE9IGN1cnJfdGFibGUtPnRpbWVfcG9zKSB7Ci0JCQkJdGltZV90ZW1wID0gdGltZV9pbmZvW3RpbWVfbG9jXS50aW1lOwotCQkJCXRpbWVfaW5mb1t0aW1lX2xvY10udGltZSA9IHRpbWVfaW5mb1sodGltZV9sb2MrMSklaXBfbGlzdF90b3RdLnRpbWU7Ci0JCQkJdGltZV9pbmZvWyh0aW1lX2xvYysxKSVpcF9saXN0X3RvdF0udGltZSA9IHRpbWVfdGVtcDsKLQkJCQl0aW1lX3RlbXAgPSB0aW1lX2luZm9bdGltZV9sb2NdLnBvc2l0aW9uOwotCQkJCXRpbWVfaW5mb1t0aW1lX2xvY10ucG9zaXRpb24gPSB0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS5wb3NpdGlvbjsKLQkJCQl0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS5wb3NpdGlvbiA9IHRpbWVfdGVtcDsKLQkJCQlyX2xpc3RbdGltZV9pbmZvW3RpbWVfbG9jXS5wb3NpdGlvbl0udGltZV9wb3MgPSB0aW1lX2xvYzsKLQkJCQlyX2xpc3RbdGltZV9pbmZvWyh0aW1lX2xvYysxKSVpcF9saXN0X3RvdF0ucG9zaXRpb25dLnRpbWVfcG9zID0gKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90OwotCQkJCXRpbWVfbG9jID0gKHRpbWVfbG9jKzEpICUgaXBfbGlzdF90b3Q7Ci0JCQl9Ci0JCQlyX2xpc3RbbG9jYXRpb25dLnRpbWVfcG9zID0gdGltZV9sb2M7Ci0JCQlyX2xpc3RbbG9jYXRpb25dLnR0bCA9IHR0bDsKLQkJCXJfbGlzdFtsb2NhdGlvbl0ubGFzdF9wa3RzW3JfbGlzdFtsb2NhdGlvbl0ub2xkZXN0X3BrdF0gPSBub3c7Ci0JCQlyX2xpc3RbbG9jYXRpb25dLm9sZGVzdF9wa3QgPSArK3JfbGlzdFtsb2NhdGlvbl0ub2xkZXN0X3BrdCAlIGlwX3BrdF9saXN0X3RvdDsKLQkJCXJfbGlzdFtsb2NhdGlvbl0ubGFzdF9zZWVuID0gbm93OwotCQl9Ci0JCS8qIElmIHdlIGhhdmUgYmVlbiBhc2tlZCB0byByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGxpc3QsIGp1c3Qgc2V0IGl0IHRvIDAgKi8KLQkJaWYoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9SRU1PVkUpIHsKLSNpZmRlZiBERUJVRwotCQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogUkVNT1ZFOyBjbGVhcmluZyBlbnRyeSAob3I6ICVkLCBocjogJWQpLlxuIixvcmlnX2hhc2hfcmVzdWx0LGhhc2hfcmVzdWx0KTsKLSNlbmRpZgotCQkJLyogQ2hlY2sgaWYgdGhpcyBpcyBwYXJ0IG9mIGEgY29sbGlzaW9uIGNoYWluICovCi0JCQl3aGlsZShoYXNoX3RhYmxlWyhvcmlnX2hhc2hfcmVzdWx0KzEpICUgaXBfbGlzdF9oYXNoX3NpemVdICE9IC0xKSB7Ci0JCQkJb3JpZ19oYXNoX3Jlc3VsdCsrOwotCQkJCWlmKGhhc2hfZnVuYyhyX2xpc3RbaGFzaF90YWJsZVtvcmlnX2hhc2hfcmVzdWx0XV0uYWRkcixpcF9saXN0X2hhc2hfc2l6ZSkgPT0gaGFzaF9yZXN1bHQpIHsKLQkJCQkJLyogRm91bmQgY29sbGlzaW9uIGNoYWluLCBob3cgZGVlcCBkb2VzIHRoaXMgcmFiYml0IGhvbGUgZ28/ICovCi0jaWZkZWYgREVCVUcKLQkJCQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogUkVNT1ZFOyBmb3VuZCBjb2xsaXNpb24gY2hhaW4uXG4iKTsKLSNlbmRpZgotCQkJCQllbmRfY29sbGlzaW9uX2NoYWluID0gb3JpZ19oYXNoX3Jlc3VsdDsKLQkJCQl9Ci0JCQl9Ci0JCQlpZihlbmRfY29sbGlzaW9uX2NoYWluICE9IC0xKSB7Ci0jaWZkZWYgREVCVUcKLQkJCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBSRU1PVkU7IHBhcnQgb2YgY29sbGlzaW9uIGNoYWluLCBtb3ZpbmcgdG8gZW5kLlxuIik7Ci0jZW5kaWYKLQkJCQkvKiBQYXJ0IG9mIGEgY29sbGlzaW9uIGNoYWluLCBzd2FwIGl0IHdpdGggdGhlIGVuZCBvZiB0aGUgY2hhaW4KLQkJCQkgKiBiZWZvcmUgcmVtb3ZpbmcuICovCi0JCQkJcl9saXN0W2hhc2hfdGFibGVbZW5kX2NvbGxpc2lvbl9jaGFpbl1dLmhhc2hfZW50cnkgPSBoYXNoX3Jlc3VsdDsKLQkJCQl0ZW1wID0gaGFzaF90YWJsZVtlbmRfY29sbGlzaW9uX2NoYWluXTsKLQkJCQloYXNoX3RhYmxlW2VuZF9jb2xsaXNpb25fY2hhaW5dID0gaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF07Ci0JCQkJaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0gPSB0ZW1wOwotCQkJCXRpbWVfaW5mb1tyX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLnRpbWVfcG9zXS5wb3NpdGlvbiA9IGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdOwotCQkJCWhhc2hfcmVzdWx0ID0gZW5kX2NvbGxpc2lvbl9jaGFpbjsKLQkJCQlyX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLmhhc2hfZW50cnkgPSBoYXNoX3Jlc3VsdDsKLQkJCQl0aW1lX2luZm9bcl9saXN0W2hhc2hfdGFibGVbaGFzaF9yZXN1bHRdXS50aW1lX3Bvc10ucG9zaXRpb24gPSBoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XTsKLQkJCX0KLQkJCWxvY2F0aW9uID0gaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF07Ci0JCQloYXNoX3RhYmxlW3JfbGlzdFtsb2NhdGlvbl0uaGFzaF9lbnRyeV0gPSAtMTsKLQkJCXRpbWVfbG9jID0gcl9saXN0W2xvY2F0aW9uXS50aW1lX3BvczsKLQkJCXRpbWVfaW5mb1t0aW1lX2xvY10udGltZSA9IDA7Ci0JCQl0aW1lX2luZm9bdGltZV9sb2NdLnBvc2l0aW9uID0gbG9jYXRpb247Ci0JCQl3aGlsZSgodGltZV9pbmZvWyh0aW1lX2xvYysxKSAlIGlwX2xpc3RfdG90XS50aW1lIDwgdGltZV9pbmZvW3RpbWVfbG9jXS50aW1lKSAmJiAoKHRpbWVfbG9jKzEpICUgaXBfbGlzdF90b3QpICE9IGN1cnJfdGFibGUtPnRpbWVfcG9zKSB7Ci0JCQkJdGltZV90ZW1wID0gdGltZV9pbmZvW3RpbWVfbG9jXS50aW1lOwotCQkJCXRpbWVfaW5mb1t0aW1lX2xvY10udGltZSA9IHRpbWVfaW5mb1sodGltZV9sb2MrMSklaXBfbGlzdF90b3RdLnRpbWU7Ci0JCQkJdGltZV9pbmZvWyh0aW1lX2xvYysxKSVpcF9saXN0X3RvdF0udGltZSA9IHRpbWVfdGVtcDsKLQkJCQl0aW1lX3RlbXAgPSB0aW1lX2luZm9bdGltZV9sb2NdLnBvc2l0aW9uOwotCQkJCXRpbWVfaW5mb1t0aW1lX2xvY10ucG9zaXRpb24gPSB0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS5wb3NpdGlvbjsKLQkJCQl0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS5wb3NpdGlvbiA9IHRpbWVfdGVtcDsKLQkJCQlyX2xpc3RbdGltZV9pbmZvW3RpbWVfbG9jXS5wb3NpdGlvbl0udGltZV9wb3MgPSB0aW1lX2xvYzsKLQkJCQlyX2xpc3RbdGltZV9pbmZvWyh0aW1lX2xvYysxKSVpcF9saXN0X3RvdF0ucG9zaXRpb25dLnRpbWVfcG9zID0gKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90OwotCQkJCXRpbWVfbG9jID0gKHRpbWVfbG9jKzEpICUgaXBfbGlzdF90b3Q7Ci0JCQl9Ci0JCQlyX2xpc3RbbG9jYXRpb25dLnRpbWVfcG9zID0gdGltZV9sb2M7Ci0JCQlyX2xpc3RbbG9jYXRpb25dLmxhc3Rfc2VlbiA9IDA7Ci0JCQlyX2xpc3RbbG9jYXRpb25dLmFkZHIgPSAwOwotCQkJcl9saXN0W2xvY2F0aW9uXS50dGwgPSAwOwotCQkJbWVtc2V0KHJfbGlzdFtsb2NhdGlvbl0ubGFzdF9wa3RzLDAsaXBfcGt0X2xpc3RfdG90KnNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JCQlyX2xpc3RbbG9jYXRpb25dLm9sZGVzdF9wa3QgPSAwOwotCQkJYW5zID0gIWluZm8tPmludmVydDsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQkJcmV0dXJuIGFuczsKLQl9Ci0KLQlzcGluX3VubG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCkgbGVmdC5cbiIpOwotI2VuZGlmCi0JcmV0dXJuIGFuczsKKwlyZXR1cm4gcmV0OwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBydWxlIGdpdmVuIGR1cmluZyB0aGUgdXNlcnNwYWNlIGlwdGFibGVzCi0gKiBjb21tYW5kIGlzIGNvcnJlY3QuCi0gKiBJZiB0aGUgY29tbWFuZCBpcyB2YWxpZCB0aGVuIHdlIGNoZWNrIGlmIHRoZSB0YWJsZSBuYW1lIHJlZmVycmVkIHRvIGJ5IHRoZQotICogcnVsZSBleGlzdHMsIGlmIG5vdCBpdCBpcyBjcmVhdGVkLgotICovCiBzdGF0aWMgaW50Ci1jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLSAgICAgICAgICAgY29uc3Qgdm9pZCAqaXAsCi0JICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKLSAgICAgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQoraXB0X3JlY2VudF9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgY29uc3Qgdm9pZCAqaXAsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbywKKwkJICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLQlpbnQgZmxhZyA9IDAsIGM7Ci0JdW5zaWduZWQgbG9uZyAqaG9sZDsKIAljb25zdCBzdHJ1Y3QgaXB0X3JlY2VudF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwotCXN0cnVjdCByZWNlbnRfaXBfdGFibGVzICpjdXJyX3RhYmxlLCAqZmluZF90YWJsZSwgKmxhc3RfdGFibGU7CisJc3RydWN0IHJlY2VudF90YWJsZSAqdDsKKwl1bnNpZ25lZCBpOworCWludCByZXQgPSAwOwogCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5KCkgZW50ZXJlZC5cbiIpOwotI2VuZGlmCi0KLQkvKiBzZWNvbmRzIGFuZCBoaXRfY291bnQgb25seSB2YWxpZCBmb3IgQ0hFQ0svVVBEQVRFICovCi0JaWYoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9TRVQpIHsgZmxhZysrOyBpZihpbmZvLT5zZWNvbmRzIHx8IGluZm8tPmhpdF9jb3VudCkgcmV0dXJuIDA7IH0KLQlpZihpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1JFTU9WRSkgeyBmbGFnKys7IGlmKGluZm8tPnNlY29uZHMgfHwgaW5mby0+aGl0X2NvdW50KSByZXR1cm4gMDsgfQotCWlmKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfQ0hFQ0spIGZsYWcrKzsKLQlpZihpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1VQREFURSkgZmxhZysrOwotCi0JLyogT25lIGFuZCBvbmx5IG9uZSBvZiB0aGVzZSBzaG91bGQgZXZlciBiZSBzZXQgKi8KLQlpZihmbGFnICE9IDEpIHJldHVybiAwOwotCi0JLyogTmFtZSBtdXN0IGJlIHNldCB0byBzb21ldGhpbmcgKi8KLQlpZighaW5mby0+bmFtZSB8fCAhaW5mby0+bmFtZVswXSkgcmV0dXJuIDA7Ci0KLQkvKiBUaGluZ3MgbG9vayBnb29kLCBjcmVhdGUgYSBsaXN0IGZvciB0aGlzIGlmIGl0IGRvZXMgbm90IGV4aXN0ICovCi0JLyogTG9jayB0aGUgbGlua2VkIGxpc3Qgd2hpbGUgd2UgcGxheSB3aXRoIGl0ICovCi0Jc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0KLQkvKiBMb29rIGZvciBhbiBlbnRyeSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGNyZWF0ZWQgKi8KLQkvKiBGaW5kcyB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCB0aGUgZW50cnkgYmVmb3JlIHRoZSBlbmQgaWYgY3VycmVudCBuYW1lIGRvZXMgbm90IGV4aXN0ICovCi0JZmluZF90YWJsZSA9IHJfdGFibGVzOwotCXdoaWxlKCAobGFzdF90YWJsZSA9IGZpbmRfdGFibGUpICYmIHN0cm5jbXAoaW5mby0+bmFtZSxmaW5kX3RhYmxlLT5uYW1lLElQVF9SRUNFTlRfTkFNRV9MRU4pICYmIChmaW5kX3RhYmxlID0gZmluZF90YWJsZS0+bmV4dCkgKTsKLQotCS8qIElmIGEgdGFibGUgYWxyZWFkeSBleGlzdHMganVzdCBpbmNyZW1lbnQgdGhlIGNvdW50IG9uIHRoYXQgdGFibGUgYW5kIHJldHVybiAqLwotCWlmKGZpbmRfdGFibGUpIHsgCi0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeTogdGFibGUgZm91bmQgKCVzKSwgaW5jcmVtZW50aW5nIGNvdW50LlxuIixpbmZvLT5uYW1lKTsKLSNlbmRpZgotCQlmaW5kX3RhYmxlLT5jb3VudCsrOwotCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCi0JLyogVGFibGUgd2l0aCB0aGlzIG5hbWUgbm90IGZvdW5kICovCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgbGlua2VkIGxpc3QgaXRlbSAqLwotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgewotCQlwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnk6IG5vIHRhYmxlIGZvdW5kICglcylcbiIsaW5mby0+bmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeTogQWxsb2NhdGlvbmcgJWQgZm9yIGxpbmstbGlzdCBlbnRyeS5cbiIsc2l6ZW9mKHN0cnVjdCByZWNlbnRfaXBfdGFibGVzKSk7Ci0JfQotI2VuZGlmCi0KLQljdXJyX3RhYmxlID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJlY2VudF9pcF90YWJsZXMpKTsKLQlpZihjdXJyX3RhYmxlID09IE5VTEwpIHJldHVybiAwOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0JY3Vycl90YWJsZS0+bmV4dCA9IE5VTEw7Ci0JY3Vycl90YWJsZS0+Y291bnQgPSAxOwotCWN1cnJfdGFibGUtPnRpbWVfcG9zID0gMDsKLQlzdHJuY3B5KGN1cnJfdGFibGUtPm5hbWUsaW5mby0+bmFtZSxJUFRfUkVDRU5UX05BTUVfTEVOKTsKLQljdXJyX3RhYmxlLT5uYW1lW0lQVF9SRUNFTlRfTkFNRV9MRU4tMV0gPSAnXDAnOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGlzIHRhYmxlIGFuZCB0aGUgbGlzdCBvZiBwYWNrZXRzIGluIGVhY2ggZW50cnkuICovCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiBBbGxvY2F0aW5nICVkIGZvciB0YWJsZSAoJXMpLlxuIiwKLQkJCXNpemVvZihzdHJ1Y3QgcmVjZW50X2lwX2xpc3QpKmlwX2xpc3RfdG90LAotCQkJaW5mby0+bmFtZSk7Ci0jZW5kaWYKLQotCWN1cnJfdGFibGUtPnRhYmxlID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJlY2VudF9pcF9saXN0KSppcF9saXN0X3RvdCk7Ci0JaWYoY3Vycl90YWJsZS0+dGFibGUgPT0gTlVMTCkgeyB2ZnJlZShjdXJyX3RhYmxlKTsgcmV0dXJuIDA7IH0KLQltZW1zZXQoY3Vycl90YWJsZS0+dGFibGUsMCxzaXplb2Yoc3RydWN0IHJlY2VudF9pcF9saXN0KSppcF9saXN0X3RvdCk7Ci0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiBBbGxvY2F0aW5nICVkIGZvciBwa3RfbGlzdC5cbiIsCi0JCQlzaXplb2YodW5zaWduZWQgbG9uZykqaXBfcGt0X2xpc3RfdG90KmlwX2xpc3RfdG90KTsKLSNlbmRpZgotCi0JaG9sZCA9IHZtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKmlwX3BrdF9saXN0X3RvdCppcF9saXN0X3RvdCk7Ci0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiBBZnRlciBwa3RfbGlzdCBhbGxvY2F0aW9uLlxuIik7Ci0jZW5kaWYKLQlpZihob2xkID09IE5VTEwpIHsgCi0JCXByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeTogdW5hYmxlIHRvIGFsbG9jYXRlIGZvciBwa3RfbGlzdC5cbiIpOwotCQl2ZnJlZShjdXJyX3RhYmxlLT50YWJsZSk7IAotCQl2ZnJlZShjdXJyX3RhYmxlKTsKKwlpZiAoaHdlaWdodDgoaW5mby0+Y2hlY2tfc2V0ICYKKwkJICAgICAoSVBUX1JFQ0VOVF9TRVQgfCBJUFRfUkVDRU5UX1JFTU9WRSB8CisJCSAgICAgIElQVF9SRUNFTlRfQ0hFQ0sgfCBJUFRfUkVDRU5UX1VQREFURSkpICE9IDEpCiAJCXJldHVybiAwOwotCX0KLQlmb3IoYyA9IDA7IGMgPCBpcF9saXN0X3RvdDsgYysrKSB7Ci0JCWN1cnJfdGFibGUtPnRhYmxlW2NdLmxhc3RfcGt0cyA9IGhvbGQgKyBjKmlwX3BrdF9saXN0X3RvdDsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBoYXNoIHRhYmxlICovCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiBBbGxvY2F0aW5nICVkIGZvciBoYXNoX3RhYmxlLlxuIiwKLQkJCXNpemVvZihpbnQpKmlwX2xpc3RfaGFzaF9zaXplKTsKLSNlbmRpZgotCi0JY3Vycl90YWJsZS0+aGFzaF90YWJsZSA9IHZtYWxsb2Moc2l6ZW9mKGludCkqaXBfbGlzdF9oYXNoX3NpemUpOwotCWlmKCFjdXJyX3RhYmxlLT5oYXNoX3RhYmxlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeTogdW5hYmxlIHRvIGFsbG9jYXRlIGZvciBoYXNoX3RhYmxlLlxuIik7Ci0JCXZmcmVlKGhvbGQpOwotCQl2ZnJlZShjdXJyX3RhYmxlLT50YWJsZSk7IAotCQl2ZnJlZShjdXJyX3RhYmxlKTsKKwlpZiAoKGluZm8tPmNoZWNrX3NldCAmIChJUFRfUkVDRU5UX1NFVCB8IElQVF9SRUNFTlRfUkVNT1ZFKSkgJiYKKwkgICAgKGluZm8tPnNlY29uZHMgfHwgaW5mby0+aGl0X2NvdW50KSkKIAkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yKGMgPSAwOyBjIDwgaXBfbGlzdF9oYXNoX3NpemU7IGMrKykgewotCQljdXJyX3RhYmxlLT5oYXNoX3RhYmxlW2NdID0gLTE7Ci0JfQotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdGltZSBpbmZvICovCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiBBbGxvY2F0aW5nICVkIGZvciB0aW1lX2luZm8uXG4iLAotCQkJc2l6ZW9mKHN0cnVjdCB0aW1lX2luZm9fbGlzdCkqaXBfbGlzdF90b3QpOwotI2VuZGlmCi0KLQljdXJyX3RhYmxlLT50aW1lX2luZm8gPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdGltZV9pbmZvX2xpc3QpKmlwX2xpc3RfdG90KTsKLQlpZighY3Vycl90YWJsZS0+dGltZV9pbmZvKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeTogdW5hYmxlIHRvIGFsbG9jYXRlIGZvciB0aW1lX2luZm8uXG4iKTsKLQkJdmZyZWUoY3Vycl90YWJsZS0+aGFzaF90YWJsZSk7Ci0JCXZmcmVlKGhvbGQpOwotCQl2ZnJlZShjdXJyX3RhYmxlLT50YWJsZSk7IAotCQl2ZnJlZShjdXJyX3RhYmxlKTsKKwlpZiAoaW5mby0+bmFtZVswXSA9PSAnXDAnIHx8CisJICAgIHN0cm5sZW4oaW5mby0+bmFtZSwgSVBUX1JFQ0VOVF9OQU1FX0xFTikgPT0gSVBUX1JFQ0VOVF9OQU1FX0xFTikKIAkJcmV0dXJuIDA7Ci0JfQotCWZvcihjID0gMDsgYyA8IGlwX2xpc3RfdG90OyBjKyspIHsKLQkJY3Vycl90YWJsZS0+dGltZV9pbmZvW2NdLnBvc2l0aW9uID0gYzsKLQkJY3Vycl90YWJsZS0+dGltZV9pbmZvW2NdLnRpbWUgPSAwOworCisJbXV0ZXhfbG9jaygmcmVjZW50X211dGV4KTsKKwl0ID0gcmVjZW50X3RhYmxlX2xvb2t1cChpbmZvLT5uYW1lKTsKKwlpZiAodCAhPSBOVUxMKSB7CisJCXQtPnJlZmNudCsrOworCQlyZXQgPSAxOworCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBQdXQgdGhlIG5ldyB0YWJsZSBpbiBwbGFjZSAqLwotCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwotCWZpbmRfdGFibGUgPSByX3RhYmxlczsKLQl3aGlsZSggKGxhc3RfdGFibGUgPSBmaW5kX3RhYmxlKSAmJiBzdHJuY21wKGluZm8tPm5hbWUsZmluZF90YWJsZS0+bmFtZSxJUFRfUkVDRU5UX05BTUVfTEVOKSAmJiAoZmluZF90YWJsZSA9IGZpbmRfdGFibGUtPm5leHQpICk7Ci0KLQkvKiBJZiBhIHRhYmxlIGFscmVhZHkgZXhpc3RzIGp1c3QgaW5jcmVtZW50IHRoZSBjb3VudCBvbiB0aGF0IHRhYmxlIGFuZCByZXR1cm4gKi8KLQlpZihmaW5kX3RhYmxlKSB7IAotCQlmaW5kX3RhYmxlLT5jb3VudCsrOwkKLQkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB0YWJsZSBmb3VuZCAoJXMpLCBjcmVhdGVkIGJ5IG90aGVyIHByb2Nlc3MuXG4iLGluZm8tPm5hbWUpOwotI2VuZGlmCi0JCXZmcmVlKGN1cnJfdGFibGUtPnRpbWVfaW5mbyk7Ci0JCXZmcmVlKGN1cnJfdGFibGUtPmhhc2hfdGFibGUpOwotCQl2ZnJlZShob2xkKTsKLQkJdmZyZWUoY3Vycl90YWJsZS0+dGFibGUpOwotCQl2ZnJlZShjdXJyX3RhYmxlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmKCFsYXN0X3RhYmxlKSByX3RhYmxlcyA9IGN1cnJfdGFibGU7IGVsc2UgbGFzdF90YWJsZS0+bmV4dCA9IGN1cnJfdGFibGU7Ci0KLQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCisJdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSArIHNpemVvZih0LT5pcGhhc2hbMF0pICogaXBfbGlzdF9oYXNoX3NpemUsCisJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAodCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKwl0LT5yZWZjbnQgPSAxOworCXN0cmNweSh0LT5uYW1lLCBpbmZvLT5uYW1lKTsKKwlJTklUX0xJU1RfSEVBRCgmdC0+bHJ1X2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBpcF9saXN0X2hhc2hfc2l6ZTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmdC0+aXBoYXNoW2ldKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCS8qIENyZWF0ZSBvdXIgcHJvYyAnc3RhdHVzJyBlbnRyeS4gKi8KLQljdXJyX3RhYmxlLT5zdGF0dXNfcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KGN1cnJfdGFibGUtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHByb2NfbmV0X2lwdF9yZWNlbnQpOwotCWlmICghY3Vycl90YWJsZS0+c3RhdHVzX3Byb2MpIHsKLQkJdmZyZWUoaG9sZCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeTogdW5hYmxlIHRvIGFsbG9jYXRlIGZvciAvcHJvYyBlbnRyeS5cbiIpOwotCQkvKiBEZXN0cm95IHRoZSBjcmVhdGVkIHRhYmxlICovCi0JCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwotCQlsYXN0X3RhYmxlID0gTlVMTDsKLQkJY3Vycl90YWJsZSA9IHJfdGFibGVzOwotCQlpZighY3Vycl90YWJsZSkgewotI2lmZGVmIERFQlVHCi0JCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5KCkgY3JlYXRlX3Byb2MgZmFpbGVkLCBubyB0YWJsZXMuXG4iKTsKLSNlbmRpZgotCQkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXdoaWxlKCBzdHJuY21wKGluZm8tPm5hbWUsY3Vycl90YWJsZS0+bmFtZSxJUFRfUkVDRU5UX05BTUVfTEVOKSAmJiAobGFzdF90YWJsZSA9IGN1cnJfdGFibGUpICYmIChjdXJyX3RhYmxlID0gY3Vycl90YWJsZS0+bmV4dCkgKTsKLQkJaWYoIWN1cnJfdGFibGUpIHsKLSNpZmRlZiBERUJVRwotCQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeSgpIGNyZWF0ZV9wcm9jIGZhaWxlZCwgdGFibGUgYWxyZWFkeSBkZXN0cm95ZWQuXG4iKTsKLSNlbmRpZgotCQkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWlmKGxhc3RfdGFibGUpIGxhc3RfdGFibGUtPm5leHQgPSBjdXJyX3RhYmxlLT5uZXh0OyBlbHNlIHJfdGFibGVzID0gY3Vycl90YWJsZS0+bmV4dDsKLQkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQkJdmZyZWUoY3Vycl90YWJsZS0+dGltZV9pbmZvKTsKLQkJdmZyZWUoY3Vycl90YWJsZS0+aGFzaF90YWJsZSk7Ci0JCXZmcmVlKGN1cnJfdGFibGUtPnRhYmxlKTsKLQkJdmZyZWUoY3Vycl90YWJsZSk7Ci0JCXJldHVybiAwOworCXQtPnByb2MgPSBjcmVhdGVfcHJvY19lbnRyeSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX2Rpcik7CisJaWYgKHQtPnByb2MgPT0gTlVMTCkgeworCQlrZnJlZSh0KTsKKwkJZ290byBvdXQ7CiAJfQotCQotCWN1cnJfdGFibGUtPnN0YXR1c19wcm9jLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWN1cnJfdGFibGUtPnN0YXR1c19wcm9jLT5kYXRhID0gY3Vycl90YWJsZTsKLQl3bWIoKTsKLQljdXJyX3RhYmxlLT5zdGF0dXNfcHJvYy0+cmVhZF9wcm9jID0gaXBfcmVjZW50X2dldF9pbmZvOwotCWN1cnJfdGFibGUtPnN0YXR1c19wcm9jLT53cml0ZV9wcm9jID0gaXBfcmVjZW50X2N0cmw7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLQotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeSgpIGxlZnQuXG4iKTsKKwl0LT5wcm9jLT5wcm9jX2ZvcHMgPSAmcmVjZW50X2ZvcHM7CisJdC0+cHJvYy0+ZGF0YSAgICAgID0gdDsKICNlbmRpZgotCi0JcmV0dXJuIDE7CisJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmdC0+bGlzdCwgJnRhYmxlcyk7CisJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKKwlyZXQgPSAxOworb3V0OgorCW11dGV4X3VubG9jaygmcmVjZW50X211dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgZXZlbnQgdGhhdCBhIHJ1bGUgbWF0Y2hpbmcgdGhpcyBtb2R1bGUgaXMKLSAqIHJlbW92ZWQuCi0gKiBXaGVuIHRoaXMgaGFwcGVucyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBubyBvdGhlciBydWxlcyBtYXRjaGluZwotICogdGhlIHRhYmxlIGdpdmVuLiAgSWYgdGhhdCBpcyB0aGUgY2FzZSB0aGVuIHdlIHJlbW92ZSB0aGUgdGFibGUgYW5kIGNsZWFuCi0gKiB1cCBpdHMgbWVtb3J5LgotICovCiBzdGF0aWMgdm9pZAotZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8sIHVuc2lnbmVkIGludCBtYXRjaHNpemUpCitpcHRfcmVjZW50X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAorCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplKQogewogCWNvbnN0IHN0cnVjdCBpcHRfcmVjZW50X2luZm8gKmluZm8gPSBtYXRjaGluZm87Ci0Jc3RydWN0IHJlY2VudF9pcF90YWJsZXMgKmN1cnJfdGFibGUsICpsYXN0X3RhYmxlOworCXN0cnVjdCByZWNlbnRfdGFibGUgKnQ7CiAKLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGRlc3Ryb3koKSBlbnRlcmVkLlxuIik7Ci0jZW5kaWYKLQotCWlmKG1hdGNoc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfcmVjZW50X2luZm8pKSkgcmV0dXJuOwotCi0JLyogTG9jayB0aGUgbGlua2VkIGxpc3Qgd2hpbGUgd2UgcGxheSB3aXRoIGl0ICovCi0Jc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0KLQkvKiBMb29rIGZvciBhbiBlbnRyeSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGNyZWF0ZWQgKi8KLQkvKiBGaW5kcyB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCB0aGUgZW50cnkgYmVmb3JlIHRoZSBlbmQgaWYgY3VycmVudCBuYW1lIGRvZXMgbm90IGV4aXN0ICovCi0JbGFzdF90YWJsZSA9IE5VTEw7Ci0JY3Vycl90YWJsZSA9IHJfdGFibGVzOwotCWlmKCFjdXJyX3RhYmxlKSB7IAotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGRlc3Ryb3koKSBObyB0YWJsZXMgZm91bmQsIGxlYXZpbmcuXG4iKTsKLSNlbmRpZgorCW11dGV4X2xvY2soJnJlY2VudF9tdXRleCk7CisJdCA9IHJlY2VudF90YWJsZV9sb29rdXAoaW5mby0+bmFtZSk7CisJaWYgKC0tdC0+cmVmY250ID09IDApIHsKKwkJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CisJCWxpc3RfZGVsKCZ0LT5saXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQl3aGlsZSggc3RybmNtcChpbmZvLT5uYW1lLGN1cnJfdGFibGUtPm5hbWUsSVBUX1JFQ0VOVF9OQU1FX0xFTikgJiYgKGxhc3RfdGFibGUgPSBjdXJyX3RhYmxlKSAmJiAoY3Vycl90YWJsZSA9IGN1cnJfdGFibGUtPm5leHQpICk7Ci0KLQkvKiBJZiBhIHRhYmxlIGRvZXMgbm90IGV4aXN0IHRoZW4gZG8gbm90aGluZyBhbmQgcmV0dXJuICovCi0JaWYoIWN1cnJfdGFibGUpIHsgCi0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogZGVzdHJveSgpIHRhYmxlIG5vdCBmb3VuZCwgbGVhdmluZy5cbiIpOwotI2VuZGlmCi0JCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQljdXJyX3RhYmxlLT5jb3VudC0tOwotCi0JLyogSWYgY291bnQgaXMgc3RpbGwgbm9uLXplcm8gdGhlbiB0aGVyZSBhcmUgc3RpbGwgcnVsZXMgcmVmZXJlbmNlaW5nIGl0IHNvIHdlIGRvIG5vdGhpbmcgKi8KLQlpZihjdXJyX3RhYmxlLT5jb3VudCkgeyAKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBkZXN0cm95KCkgdGFibGUgZm91bmQsIG5vbi16ZXJvIGNvdW50LCBsZWF2aW5nLlxuIik7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogZGVzdHJveSgpIHRhYmxlIGZvdW5kLCB6ZXJvIGNvdW50LCByZW1vdmluZy5cbiIpOwotI2VuZGlmCi0KLQkvKiBDb3VudCBtdXN0IGJlIHplcm8gc28gd2UgcmVtb3ZlIHRoaXMgdGFibGUgZnJvbSB0aGUgbGlzdCAqLwotCWlmKGxhc3RfdGFibGUpIGxhc3RfdGFibGUtPm5leHQgPSBjdXJyX3RhYmxlLT5uZXh0OyBlbHNlIHJfdGFibGVzID0gY3Vycl90YWJsZS0+bmV4dDsKLQotCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0KLQkvKiBsb2NrIHRvIG1ha2Ugc3VyZSBhbnkgbGF0ZS1ydW5uZXJzIHN0aWxsIHVzaW5nIHRoaXMgYWZ0ZXIgd2UgcmVtb3ZlZCBpdCBmcm9tCi0JICogdGhlIGxpc3QgZmluaXNoIHVwIHRoZW4gcmVtb3ZlIGV2ZXJ5dGhpbmcgKi8KLQlzcGluX2xvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0KKwkJcmVjZW50X3RhYmxlX2ZsdXNoKHQpOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JaWYoY3Vycl90YWJsZS0+c3RhdHVzX3Byb2MpIHJlbW92ZV9wcm9jX2VudHJ5KGN1cnJfdGFibGUtPm5hbWUscHJvY19uZXRfaXB0X3JlY2VudCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLQl2ZnJlZShjdXJyX3RhYmxlLT50YWJsZVswXS5sYXN0X3BrdHMpOwotCXZmcmVlKGN1cnJfdGFibGUtPnRhYmxlKTsKLQl2ZnJlZShjdXJyX3RhYmxlLT5oYXNoX3RhYmxlKTsKLQl2ZnJlZShjdXJyX3RhYmxlLT50aW1lX2luZm8pOwotCXZmcmVlKGN1cnJfdGFibGUpOwotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBkZXN0cm95KCkgbGVmdC5cbiIpOworCQlyZW1vdmVfcHJvY19lbnRyeSh0LT5uYW1lLCBwcm9jX2Rpcik7CiAjZW5kaWYKLQotCXJldHVybjsKKwkJa2ZyZWUodCk7CisJfQorCW11dGV4X3VubG9jaygmcmVjZW50X211dGV4KTsKIH0KIAotLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHdlIHBhc3MgdG8gaXB0X3JlZ2lzdGVyIHRvIHJlZ2lzdGVyIG91cgotICogbW9kdWxlIHdpdGggaXB0YWJsZXMuCi0gKi8KKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RydWN0IHJlY2VudF9pdGVyX3N0YXRlIHsKKwlzdHJ1Y3QgcmVjZW50X3RhYmxlCSp0YWJsZTsKKwl1bnNpZ25lZCBpbnQJCWJ1Y2tldDsKK307CisKK3N0YXRpYyB2b2lkICpyZWNlbnRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgcmVjZW50X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCByZWNlbnRfdGFibGUgKnQgPSBzdC0+dGFibGU7CisJc3RydWN0IHJlY2VudF9lbnRyeSAqZTsKKwlsb2ZmX3QgcCA9ICpwb3M7CisKKwlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKKworCWZvciAoc3QtPmJ1Y2tldCA9IDA7IHN0LT5idWNrZXQgPCBpcF9saXN0X2hhc2hfc2l6ZTsgc3QtPmJ1Y2tldCsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnQtPmlwaGFzaFtzdC0+YnVja2V0XSwgbGlzdCkgeworCQkJaWYgKHAtLSA9PSAwKQorCQkJCXJldHVybiBlOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqcmVjZW50X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgcmVjZW50X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCByZWNlbnRfdGFibGUgKnQgPSBzdC0+dGFibGU7CisJc3RydWN0IHJlY2VudF9lbnRyeSAqZSA9IHY7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IGUtPmxpc3QubmV4dDsKKworCXdoaWxlIChoZWFkID09ICZ0LT5pcGhhc2hbc3QtPmJ1Y2tldF0pIHsKKwkJaWYgKCsrc3QtPmJ1Y2tldCA+PSBpcF9saXN0X2hhc2hfc2l6ZSkKKwkJCXJldHVybiBOVUxMOworCQloZWFkID0gdC0+aXBoYXNoW3N0LT5idWNrZXRdLm5leHQ7CisJfQorCSgqcG9zKSsrOworCXJldHVybiBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCByZWNlbnRfZW50cnksIGxpc3QpOworfQorCitzdGF0aWMgdm9pZCByZWNlbnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgcmVjZW50X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCByZWNlbnRfZW50cnkgKmUgPSB2OworCXVuc2lnbmVkIGludCBpOworCisJaSA9IChlLT5pbmRleCAtIDEpICUgaXBfcGt0X2xpc3RfdG90OworCXNlcV9wcmludGYoc2VxLCAic3JjPSV1LiV1LiV1LiV1IHR0bDogJXUgbGFzdF9zZWVuOiAlbHUgb2xkZXN0X3BrdDogJXUiLAorCQkgICBOSVBRVUFEKGUtPmFkZHIpLCBlLT50dGwsIGUtPnN0YW1wc1tpXSwgZS0+aW5kZXgpOworCWZvciAoaSA9IDA7IGkgPCBlLT5uc3RhbXBzOyBpKyspCisJCXNlcV9wcmludGYoc2VxLCAiJXMgJWx1IiwgaSA/ICIsIiA6ICIiLCBlLT5zdGFtcHNbaV0pOworCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZWNlbnRfc2VxX29wcyA9IHsKKwkuc3RhcnQJCT0gcmVjZW50X3NlcV9zdGFydCwKKwkubmV4dAkJPSByZWNlbnRfc2VxX25leHQsCisJLnN0b3AJCT0gcmVjZW50X3NlcV9zdG9wLAorCS5zaG93CQk9IHJlY2VudF9zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgcmVjZW50X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGlub2RlKTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwlzdHJ1Y3QgcmVjZW50X2l0ZXJfc3RhdGUgKnN0OworCWludCByZXQ7CisKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpzdCksIEdGUF9LRVJORUwpOworCWlmIChzdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmcmVjZW50X3NlcV9vcHMpOworCWlmIChyZXQpCisJCWtmcmVlKHN0KTsKKwlzdC0+dGFibGUgICAgPSBwZGUtPmRhdGE7CisJc2VxICAgICAgICAgID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcS0+cHJpdmF0ZSA9IHN0OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY2VudF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqaW5wdXQsCisJCQkJIHNpemVfdCBzaXplLCBsb2ZmX3QgKmxvZmYpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCByZWNlbnRfdGFibGUgKnQgPSBwZGUtPmRhdGE7CisJc3RydWN0IHJlY2VudF9lbnRyeSAqZTsKKwljaGFyIGJ1ZltzaXplb2YoIisyNTUuMjU1LjI1NS4yNTUiKV0sICpjID0gYnVmOworCXVfaW50MzJfdCBhZGRyOworCWludCBhZGQ7CisKKwlpZiAoc2l6ZSA+IHNpemVvZihidWYpKQorCQlzaXplID0gc2l6ZW9mKGJ1Zik7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgaW5wdXQsIHNpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwl3aGlsZSAoaXNzcGFjZSgqYykpCisJCWMrKzsKKworCWlmIChzaXplIC0gKGMgLSBidWYpIDwgNSkKKwkJcmV0dXJuIGMgLSBidWY7CisJaWYgKCFzdHJuY21wKGMsICJjbGVhciIsIDUpKSB7CisJCWMgKz0gNTsKKwkJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CisJCXJlY2VudF90YWJsZV9mbHVzaCh0KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKKwkJcmV0dXJuIGMgLSBidWY7CisJfQorCisJc3dpdGNoICgqYykgeworCWNhc2UgJy0nOgorCQlhZGQgPSAwOworCQljKys7CisJCWJyZWFrOworCWNhc2UgJysnOgorCQljKys7CisJZGVmYXVsdDoKKwkJYWRkID0gMTsKKwkJYnJlYWs7CisJfQorCWFkZHIgPSBpbl9hdG9uKGMpOworCisJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CisJZSA9IHJlY2VudF9lbnRyeV9sb29rdXAodCwgYWRkciwgMCk7CisJaWYgKGUgPT0gTlVMTCkgeworCQlpZiAoYWRkKQorCQkJcmVjZW50X2VudHJ5X2luaXQodCwgYWRkciwgMCk7CisJfSBlbHNlIHsKKwkJaWYgKGFkZCkKKwkJCXJlY2VudF9lbnRyeV91cGRhdGUodCwgZSk7CisJCWVsc2UKKwkJCXJlY2VudF9lbnRyeV9yZW1vdmUodCwgZSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlY2VudF9mb3BzID0geworCS5vcGVuCQk9IHJlY2VudF9zZXFfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkud3JpdGUJCT0gcmVjZW50X3Byb2Nfd3JpdGUsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwogc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggcmVjZW50X21hdGNoID0gewogCS5uYW1lCQk9ICJyZWNlbnQiLAotCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2gJCT0gaXB0X3JlY2VudF9tYXRjaCwKIAkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfcmVjZW50X2luZm8pLAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKLQkuZGVzdHJveQk9IGRlc3Ryb3ksCi0JLm1lCQk9IFRISVNfTU9EVUxFCisJLmNoZWNrZW50cnkJPSBpcHRfcmVjZW50X2NoZWNrZW50cnksCisJLmRlc3Ryb3kJPSBpcHRfcmVjZW50X2Rlc3Ryb3ksCisJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotLyogS2VybmVsIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gKi8KIHN0YXRpYyBpbnQgX19pbml0IGlwdF9yZWNlbnRfaW5pdCh2b2lkKQogewotCWludCBlcnIsIGNvdW50OworCWludCBlcnI7CiAKLQlwcmludGsodmVyc2lvbik7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcm9jX25ldF9pcHRfcmVjZW50ID0gcHJvY19ta2RpcigiaXB0X3JlY2VudCIscHJvY19uZXQpOwotCWlmKCFwcm9jX25ldF9pcHRfcmVjZW50KSByZXR1cm4gLUVOT01FTTsKLSNlbmRpZgotCi0JaWYoaXBfbGlzdF9oYXNoX3NpemUgJiYgaXBfbGlzdF9oYXNoX3NpemUgPD0gaXBfbGlzdF90b3QpIHsKLQkgIHByaW50ayhLRVJOX1dBUk5JTkcgUkVDRU5UX05BTUUgIjogaXBfbGlzdF9oYXNoX3NpemUgdG9vIHNtYWxsLCByZXNldHRpbmcgdG8gZGVmYXVsdC5cbiIpOwotCSAgaXBfbGlzdF9oYXNoX3NpemUgPSAwOwotCX0KLQotCWlmKCFpcF9saXN0X2hhc2hfc2l6ZSkgewotCQlpcF9saXN0X2hhc2hfc2l6ZSA9IGlwX2xpc3RfdG90KjM7Ci0JCWNvdW50ID0gMioyOwotCQl3aGlsZShpcF9saXN0X2hhc2hfc2l6ZSA+IGNvdW50KSBjb3VudCA9IGNvdW50KjI7Ci0JCWlwX2xpc3RfaGFzaF9zaXplID0gY291bnQ7Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBpcF9saXN0X2hhc2hfc2l6ZTogJWRcbiIsaXBfbGlzdF9oYXNoX3NpemUpOwotI2VuZGlmCisJaWYgKCFpcF9saXN0X3RvdCB8fCAhaXBfcGt0X2xpc3RfdG90IHx8IGlwX3BrdF9saXN0X3RvdCA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaXBfbGlzdF9oYXNoX3NpemUgPSAxIDw8IGZscyhpcF9saXN0X3RvdCk7CiAKIAllcnIgPSBpcHRfcmVnaXN0ZXJfbWF0Y2goJnJlY2VudF9tYXRjaCk7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlpZiAoZXJyKQotCQlyZW1vdmVfcHJvY19lbnRyeSgiaXB0X3JlY2VudCIsIHByb2NfbmV0KTsKKwkJcmV0dXJuIGVycjsKKwlwcm9jX2RpciA9IHByb2NfbWtkaXIoImlwdF9yZWNlbnQiLCBwcm9jX25ldCk7CisJaWYgKHByb2NfZGlyID09IE5VTEwpIHsKKwkJaXB0X3VucmVnaXN0ZXJfbWF0Y2goJnJlY2VudF9tYXRjaCk7CisJCWVyciA9IC1FTk9NRU07CisJfQorI2VuZGlmCiAJcmV0dXJuIGVycjsKIH0KIAotLyogS2VybmVsIG1vZHVsZSBkZXN0cnVjdGlvbi4gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcHRfcmVjZW50X2Zpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHRfcmVjZW50X2V4aXQodm9pZCkKIHsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnRhYmxlcykpOwogCWlwdF91bnJlZ2lzdGVyX21hdGNoKCZyZWNlbnRfbWF0Y2gpOwotCi0JcmVtb3ZlX3Byb2NfZW50cnkoImlwdF9yZWNlbnQiLHByb2NfbmV0KTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJlbW92ZV9wcm9jX2VudHJ5KCJpcHRfcmVjZW50IiwgcHJvY19uZXQpOworI2VuZGlmCiB9CiAKLS8qIFJlZ2lzdGVyIG91ciBtb2R1bGUgd2l0aCB0aGUga2VybmVsLiAqLwogbW9kdWxlX2luaXQoaXB0X3JlY2VudF9pbml0KTsKLW1vZHVsZV9leGl0KGlwdF9yZWNlbnRfZmluaSk7Cittb2R1bGVfZXhpdChpcHRfcmVjZW50X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNzdkOTc0NC4uOGNjOGUxYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogCS8qIFRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgaGVscGVyOiBhcyB0aGUgcGFja2V0IGdvZXMgb3V0LiAqLwogCWN0ID0gbmZfY3RfZ2V0KCpwc2tiLCAmY3RpbmZvKTsKLQlpZiAoIWN0KQorCWlmICghY3QgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCWhlbHAgPSBuZmN0X2hlbHAoY3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCA0YjBkMzYxLi42NjNhNzNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJfQogCiAJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJaWYgKG5mX2Nvbm50cmFja19jaGVja3N1bSAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgMCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCiAJCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggZmMyNTYyNC4uYmQyMjFlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogfQogCiBzdHJ1Y3Qgc29jayAqX19yYXdfdjRfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgbnVtLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHJhZGRyLCB1bnNpZ25lZCBsb25nIGxhZGRyLAorCQkJICAgICBfX2JlMzIgcmFkZHIsIF9fYmUzMiBsYWRkciwKIAkJCSAgICAgaW50IGRpZikKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKaW5kZXggNmI2YzNhZC4uY2U0Y2Q1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKQEAgLTE4MiwxNCArMTgyLDYgQEAKIAkJLnN0cmF0ZWd5CT0gJmlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5LAogCX0sCiAgICAgICAgIHsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfQVVUT0NPTkZJRywKLQkJLnByb2NuYW1lCT0gImlwX2F1dG9jb25maWciLAotCQkuZGF0YQkJPSAmaXB2NF9jb25maWcuYXV0b2NvbmZpZywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCi0JfSwKLSAgICAgICAgewogCQkuY3RsX25hbWUJPSBORVRfSVBWNF9OT19QTVRVX0RJU0MsCiAJCS5wcm9jbmFtZQk9ICJpcF9ub19wbXR1X2Rpc2MiLAogCQkuZGF0YQkJPSAmaXB2NF9jb25maWcubm9fcG10dV9kaXNjLApAQCAtNjg4LDYgKzY4MCwyNCBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKIAl9LAorI2lmZGVmIENPTkZJR19ORVRfRE1BCisJeworCQkuY3RsX25hbWUJPSBORVRfVENQX0RNQV9DT1BZQlJFQUssCisJCS5wcm9jbmFtZQk9ICJ0Y3BfZG1hX2NvcHlicmVhayIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX2RtYV9jb3B5YnJlYWssCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCX0sCisjZW5kaWYKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9UQ1BfU0xPV19TVEFSVF9BRlRFUl9JRExFLAorCQkucHJvY25hbWUJPSAidGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCisJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCBlMmI3YjgwLi43NDk5OGYyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+Ci0KKyNpbmNsdWRlIDxuZXQvbmV0ZG1hLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KQEAgLTYyMiwxNCArNjIyLDEwIEBACiAJc3NpemVfdCByZXM7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKLSNkZWZpbmUgVENQX1pDX0NTVU1fRkxBR1MgKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfTk9fQ1NVTSB8IE5FVElGX0ZfSFdfQ1NVTSkKLQogCWlmICghKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykgfHwKLQkgICAgIShzay0+c2tfcm91dGVfY2FwcyAmIFRDUF9aQ19DU1VNX0ZMQUdTKSkKKwkgICAgIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfQUxMX0NTVU0pKQogCQlyZXR1cm4gc29ja19ub19zZW5kcGFnZShzb2NrLCBwYWdlLCBvZmZzZXQsIHNpemUsIGZsYWdzKTsKIAotI3VuZGVmIFRDUF9aQ19DU1VNX0ZMQUdTCi0KIAlsb2NrX3NvY2soc2spOwogCVRDUF9DSEVDS19USU1FUihzayk7CiAJcmVzID0gZG9fdGNwX3NlbmRwYWdlcyhzaywgJnBhZ2UsIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwpAQCAtNzI2LDkgKzcyMiw3IEBACiAJCQkJLyoKIAkJCQkgKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB1c2UgSFcgY2hlY2tzdW0uCiAJCQkJICovCi0JCQkJaWYgKHNrLT5za19yb3V0ZV9jYXBzICYKLQkJCQkgICAgKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfTk9fQ1NVTSB8Ci0JCQkJICAgICBORVRJRl9GX0hXX0NTVU0pKQorCQkJCWlmIChzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfQUxMX0NTVU0pCiAJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7CiAKIAkJCQlza2JfZW50YWlsKHNrLCB0cCwgc2tiKTsKQEAgLTkzNyw3ICs5MzEsNyBAQAogICogY2FsY3VsYXRpb24gb2Ygd2hldGhlciBvciBub3Qgd2UgbXVzdCBBQ0sgZm9yIHRoZSBzYWtlIG9mCiAgKiBhIHdpbmRvdyB1cGRhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIGNsZWFudXBfcmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCBjb3BpZWQpCit2b2lkIHRjcF9jbGVhbnVwX3JidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgY29waWVkKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWludCB0aW1lX3RvX2FjayA9IDA7CkBAIC0xMDcyLDExICsxMDY2LDExIEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNrYi0+aC50aC0+ZmluKSB7Ci0JCQlza19lYXRfc2tiKHNrLCBza2IpOworCQkJc2tfZWF0X3NrYihzaywgc2tiLCAwKTsKIAkJCSsrc2VxOwogCQkJYnJlYWs7CiAJCX0KLQkJc2tfZWF0X3NrYihzaywgc2tiKTsKKwkJc2tfZWF0X3NrYihzaywgc2tiLCAwKTsKIAkJaWYgKCFkZXNjLT5jb3VudCkKIAkJCWJyZWFrOwogCX0KQEAgLTEwODYsNyArMTA4MCw3IEBACiAKIAkvKiBDbGVhbiB1cCBkYXRhIHdlIGhhdmUgcmVhZDogVGhpcyB3aWxsIGRvIEFDSyBmcmFtZXMuICovCiAJaWYgKGNvcGllZCkKLQkJY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOworCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOwogCXJldHVybiBjb3BpZWQ7CiB9CiAKQEAgLTExMTAsNiArMTEwNCw3IEBACiAJaW50IHRhcmdldDsJCS8qIFJlYWQgYXQgbGVhc3QgdGhpcyBtYW55IGJ5dGVzICovCiAJbG9uZyB0aW1lbzsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnVzZXJfcmVjdiA9IE5VTEw7CisJaW50IGNvcGllZF9lYXJseSA9IDA7CiAKIAlsb2NrX3NvY2soc2spOwogCkBAIC0xMTMzLDYgKzExMjgsMTcgQEAKIAogCXRhcmdldCA9IHNvY2tfcmN2bG93YXQoc2ssIGZsYWdzICYgTVNHX1dBSVRBTEwsIGxlbik7CiAKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCXRwLT51Y29weS5kbWFfY2hhbiA9IE5VTEw7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKChsZW4gPiBzeXNjdGxfdGNwX2RtYV9jb3B5YnJlYWspICYmICEoZmxhZ3MgJiBNU0dfUEVFSykgJiYKKwkgICAgIXN5c2N0bF90Y3BfbG93X2xhdGVuY3kgJiYgX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEubmV0X2RtYSkpIHsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQl0cC0+dWNvcHkucGlubmVkX2xpc3QgPSBkbWFfcGluX2lvdmVjX3BhZ2VzKG1zZy0+bXNnX2lvdiwgbGVuKTsKKwl9IGVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworI2VuZGlmCisKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXUzMiBvZmZzZXQ7CkBAIC0xMjIwLDcgKzEyMjYsNyBAQAogCQkJfQogCQl9CiAKLQkJY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOworCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOwogCiAJCWlmICghc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeSAmJiB0cC0+dWNvcHkudGFzayA9PSB1c2VyX3JlY3YpIHsKIAkJCS8qIEluc3RhbGwgbmV3IHJlYWRlciAqLwpAQCAtMTI3NCw2ICsxMjgwLDEwIEBACiAJCX0gZWxzZQogCQkJc2tfd2FpdF9kYXRhKHNrLCAmdGltZW8pOwogCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwkJdHAtPnVjb3B5Lndha2V1cCA9IDA7CisjZW5kaWYKKwogCQlpZiAodXNlcl9yZWN2KSB7CiAJCQlpbnQgY2h1bms7CiAKQEAgLTEzMjksMTMgKzEzMzksMzkgQEAKIAkJfQogCiAJCWlmICghKGZsYWdzICYgTVNHX1RSVU5DKSkgewotCQkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBvZmZzZXQsCi0JCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsIHVzZWQpOwotCQkJaWYgKGVycikgewotCQkJCS8qIEV4Y2VwdGlvbi4gQmFpbG91dCEgKi8KLQkJCQlpZiAoIWNvcGllZCkKLQkJCQkJY29waWVkID0gLUVGQVVMVDsKLQkJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCQkJaWYgKCF0cC0+dWNvcHkuZG1hX2NoYW4gJiYgdHAtPnVjb3B5LnBpbm5lZF9saXN0KQorCQkJCXRwLT51Y29weS5kbWFfY2hhbiA9IGdldF9zb2Z0bmV0X2RtYSgpOworCisJCQlpZiAodHAtPnVjb3B5LmRtYV9jaGFuKSB7CisJCQkJdHAtPnVjb3B5LmRtYV9jb29raWUgPSBkbWFfc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoCisJCQkJCXRwLT51Y29weS5kbWFfY2hhbiwgc2tiLCBvZmZzZXQsCisJCQkJCW1zZy0+bXNnX2lvdiwgdXNlZCwKKwkJCQkJdHAtPnVjb3B5LnBpbm5lZF9saXN0KTsKKworCQkJCWlmICh0cC0+dWNvcHkuZG1hX2Nvb2tpZSA8IDApIHsKKworCQkJCQlwcmludGsoS0VSTl9BTEVSVCAiZG1hX2Nvb2tpZSA8IDBcbiIpOworCisJCQkJCS8qIEV4Y2VwdGlvbi4gQmFpbG91dCEgKi8KKwkJCQkJaWYgKCFjb3BpZWQpCisJCQkJCQljb3BpZWQgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKChvZmZzZXQgKyB1c2VkKSA9PSBza2ItPmxlbikKKwkJCQkJY29waWVkX2Vhcmx5ID0gMTsKKworCQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKwkJCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIG9mZnNldCwKKwkJCQkJCW1zZy0+bXNnX2lvdiwgdXNlZCk7CisJCQkJaWYgKGVycikgeworCQkJCQkvKiBFeGNlcHRpb24uIEJhaWxvdXQhICovCisJCQkJCWlmICghY29waWVkKQorCQkJCQkJY29waWVkID0gLUVGQVVMVDsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTEzNTUsMTUgKzEzOTEsMTkgQEAKIAogCQlpZiAoc2tiLT5oLnRoLT5maW4pCiAJCQlnb3RvIGZvdW5kX2Zpbl9vazsKLQkJaWYgKCEoZmxhZ3MgJiBNU0dfUEVFSykpCi0JCQlza19lYXRfc2tiKHNrLCBza2IpOworCQlpZiAoIShmbGFncyAmIE1TR19QRUVLKSkgeworCQkJc2tfZWF0X3NrYihzaywgc2tiLCBjb3BpZWRfZWFybHkpOworCQkJY29waWVkX2Vhcmx5ID0gMDsKKwkJfQogCQljb250aW51ZTsKIAogCWZvdW5kX2Zpbl9vazoKIAkJLyogUHJvY2VzcyB0aGUgRklOLiAqLwogCQkrKypzZXE7Ci0JCWlmICghKGZsYWdzICYgTVNHX1BFRUspKQotCQkJc2tfZWF0X3NrYihzaywgc2tiKTsKKwkJaWYgKCEoZmxhZ3MgJiBNU0dfUEVFSykpIHsKKwkJCXNrX2VhdF9za2Ioc2ssIHNrYiwgY29waWVkX2Vhcmx5KTsKKwkJCWNvcGllZF9lYXJseSA9IDA7CisJCX0KIAkJYnJlYWs7CiAJfSB3aGlsZSAobGVuID4gMCk7CiAKQEAgLTEzODYsMTIgKzE0MjYsNDIgQEAKIAkJdHAtPnVjb3B5LmxlbiA9IDA7CiAJfQogCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwlpZiAodHAtPnVjb3B5LmRtYV9jaGFuKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWRtYV9jb29raWVfdCBkb25lLCB1c2VkOworCisJCWRtYV9hc3luY19tZW1jcHlfaXNzdWVfcGVuZGluZyh0cC0+dWNvcHkuZG1hX2NoYW4pOworCisJCXdoaWxlIChkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlKHRwLT51Y29weS5kbWFfY2hhbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnVjb3B5LmRtYV9jb29raWUsICZkb25lLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlZCkgPT0gRE1BX0lOX1BST0dSRVNTKSB7CisJCQkvKiBkbyBwYXJ0aWFsIGNsZWFudXAgb2Ygc2tfYXN5bmNfd2FpdF9xdWV1ZSAqLworCQkJd2hpbGUgKChza2IgPSBza2JfcGVlaygmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUpKSAmJgorCQkJICAgICAgIChkbWFfYXN5bmNfaXNfY29tcGxldGUoc2tiLT5kbWFfY29va2llLCBkb25lLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCkgPT0gRE1BX1NVQ0NFU1MpKSB7CisJCQkJX19za2JfZGVxdWV1ZSgmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUpOworCQkJCWtmcmVlX3NrYihza2IpOworCQkJfQorCQl9CisKKwkJLyogU2FmZSB0byBmcmVlIGVhcmx5LWNvcGllZCBza2JzIG5vdyAqLworCQlfX3NrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUpOworCQlkbWFfY2hhbl9wdXQodHAtPnVjb3B5LmRtYV9jaGFuKTsKKwkJdHAtPnVjb3B5LmRtYV9jaGFuID0gTlVMTDsKKwl9CisJaWYgKHRwLT51Y29weS5waW5uZWRfbGlzdCkgeworCQlkbWFfdW5waW5faW92ZWNfcGFnZXModHAtPnVjb3B5LnBpbm5lZF9saXN0KTsKKwkJdHAtPnVjb3B5LnBpbm5lZF9saXN0ID0gTlVMTDsKKwl9CisjZW5kaWYKKwogCS8qIEFjY29yZGluZyB0byBVTklYOTgsIG1zZ19uYW1lL21zZ19uYW1lbGVuIGFyZSBpZ25vcmVkCiAJICogb24gY29ubmVjdGVkIHNvY2tldC4gSSB3YXMganVzdCBoYXBweSB3aGVuIGZvdW5kIHRoaXMgOCkgLS1BTksKIAkgKi8KIAogCS8qIENsZWFuIHVwIGRhdGEgd2UgaGF2ZSByZWFkOiBUaGlzIHdpbGwgZG8gQUNLIGZyYW1lcy4gKi8KLQljbGVhbnVwX3JidWYoc2ssIGNvcGllZCk7CisJdGNwX2NsZWFudXBfcmJ1ZihzaywgY29waWVkKTsKIAogCVRDUF9DSEVDS19USU1FUihzayk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKQEAgLTE2NTgsNiArMTcyOCw5IEBACiAJX19za2JfcXVldWVfcHVyZ2UoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAlza19zdHJlYW1fd3JpdGVxdWV1ZV9wdXJnZShzayk7CiAJX19za2JfcXVldWVfcHVyZ2UoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpOworI2lmZGVmIENPTkZJR19ORVRfRE1BCisJX19za2JfcXVldWVfcHVyZ2UoJnNrLT5za19hc3luY193YWl0X3F1ZXVlKTsKKyNlbmRpZgogCiAJaW5ldC0+ZHBvcnQgPSAwOwogCkBAIC0xODU4LDcgKzE5MzEsNyBAQAogCQkJICAgIChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSAmJgogCQkJICAgIGluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7CiAJCQkJaWNzay0+aWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19QVVNIRUQ7Ci0JCQkJY2xlYW51cF9yYnVmKHNrLCAxKTsKKwkJCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCAxKTsKIAkJCQlpZiAoISh2YWwgJiAxKSkKIAkJCQkJaWNzay0+aWNza19hY2sucGluZ3BvbmcgPSAxOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IDAzNWYyMDkuLmIyZDkwMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTE5OCwxMiArMTk4LDYgQEAKIAlyZXR1cm4gbWF4KHRwLT5zbmRfY3duZCwgY2EtPmxhc3RfbWF4X2N3bmQpOwogfQogCi1zdGF0aWMgdTMyIGJpY3RjcF9taW5fY3duZChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JcmV0dXJuIHRwLT5zbmRfc3N0aHJlc2g7Ci19Ci0KIHN0YXRpYyB2b2lkIGJpY3RjcF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSkKIHsKIAlpZiAobmV3X3N0YXRlID09IFRDUF9DQV9Mb3NzKQpAQCAtMjMxLDcgKzIyNSw2IEBACiAJLmNvbmdfYXZvaWQJPSBiaWN0Y3BfY29uZ19hdm9pZCwKIAkuc2V0X3N0YXRlCT0gYmljdGNwX3N0YXRlLAogCS51bmRvX2N3bmQJPSBiaWN0Y3BfdW5kb19jd25kLAotCS5taW5fY3duZAk9IGJpY3RjcF9taW5fY3duZCwKIAkucGt0c19hY2tlZCAgICAgPSBiaWN0Y3BfYWNrZWQsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJiaWMiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbXBvdW5kLmMgYi9uZXQvaXB2NC90Y3BfY29tcG91bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzU0ZjdlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvdGNwX2NvbXBvdW5kLmMKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiBUQ1AgVmVnYXMgY29uZ2VzdGlvbiBjb250cm9sCisgKgorICogVGhpcyBpcyBiYXNlZCBvbiB0aGUgY29uZ2VzdGlvbiBkZXRlY3Rpb24vYXZvaWRhbmNlIHNjaGVtZSBkZXNjcmliZWQgaW4KKyAqICAgIExhd3JlbmNlIFMuIEJyYWttbyBhbmQgTGFycnkgTC4gUGV0ZXJzb24uCisgKiAgICAiVENQIFZlZ2FzOiBFbmQgdG8gZW5kIGNvbmdlc3Rpb24gYXZvaWRhbmNlIG9uIGEgZ2xvYmFsIGludGVybmV0LiIKKyAqICAgIElFRUUgSm91cm5hbCBvbiBTZWxlY3RlZCBBcmVhcyBpbiBDb21tdW5pY2F0aW9uLCAxMyg4KToxNDY1LS0xNDgwLAorICogICAgT2N0b2JlciAxOTk1LiBBdmFpbGFibGUgZnJvbToKKyAqCWZ0cDovL2Z0cC5jcy5hcml6b25hLmVkdS94a2VybmVsL1BhcGVycy9qc2FjLnBzCisgKgorICogU2VlIGh0dHA6Ly93d3cuY3MuYXJpem9uYS5lZHUveGtlcm5lbC8gZm9yIHRoZWlyIGltcGxlbWVudGF0aW9uLgorICogVGhlIG1haW4gYXNwZWN0cyB0aGF0IGRpc3Rpbmd1aXNoIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUKKyAqIEFyaXpvbmEgVmVnYXMgaW1wbGVtZW50YXRpb24gYXJlOgorICogICBvIFdlIGRvIG5vdCBjaGFuZ2UgdGhlIGxvc3MgZGV0ZWN0aW9uIG9yIHJlY292ZXJ5IG1lY2hhbmlzbXMgb2YKKyAqICAgICBMaW51eCBpbiBhbnkgd2F5LiBMaW51eCBhbHJlYWR5IHJlY292ZXJzIGZyb20gbG9zc2VzIHF1aXRlIHdlbGwsCisgKiAgICAgdXNpbmcgZmluZS1ncmFpbmVkIHRpbWVycywgTmV3UmVubywgYW5kIEZBQ0suCisgKiAgIG8gVG8gYXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgaW1wb3NlZCBieSBpbmNyZWFzaW5nIGN3bmQKKyAqICAgICBvbmx5IGV2ZXJ5LW90aGVyIFJUVCBkdXJpbmcgc2xvdyBzdGFydCwgd2UgaW5jcmVhc2UgZHVyaW5nCisgKiAgICAgZXZlcnkgUlRUIGR1cmluZyBzbG93IHN0YXJ0LCBqdXN0IGxpa2UgUmVuby4KKyAqICAgbyBMYXJnZWx5IHRvIGFsbG93IGNvbnRpbnVvdXMgY3duZCBncm93dGggZHVyaW5nIHNsb3cgc3RhcnQsCisgKiAgICAgd2UgdXNlIHRoZSByYXRlIGF0IHdoaWNoIEFDS3MgY29tZSBiYWNrIGFzIHRoZSAiYWN0dWFsIgorICogICAgIHJhdGUsIHJhdGhlciB0aGFuIHRoZSByYXRlIGF0IHdoaWNoIGRhdGEgaXMgc2VudC4KKyAqICAgbyBUbyBzcGVlZCBjb252ZXJnZW5jZSB0byB0aGUgcmlnaHQgcmF0ZSwgd2Ugc2V0IHRoZSBjd25kCisgKiAgICAgdG8gYWNoaWV2ZSB0aGUgcmlnaHQgKCJhY3R1YWwiKSByYXRlIHdoZW4gd2UgZXhpdCBzbG93IHN0YXJ0LgorICogICBvIFRvIGZpbHRlciBvdXQgdGhlIG5vaXNlIGNhdXNlZCBieSBkZWxheWVkIEFDS3MsIHdlIHVzZSB0aGUKKyAqICAgICBtaW5pbXVtIFJUVCBzYW1wbGUgb2JzZXJ2ZWQgZHVyaW5nIHRoZSBsYXN0IFJUVCB0byBjYWxjdWxhdGUKKyAqICAgICB0aGUgYWN0dWFsIHJhdGUuCisgKiAgIG8gV2hlbiB0aGUgc2VuZGVyIHJlLXN0YXJ0cyBmcm9tIGlkbGUsIGl0IHdhaXRzIHVudGlsIGl0IGhhcworICogICAgIHJlY2VpdmVkIEFDS3MgZm9yIGFuIGVudGlyZSBmbGlnaHQgb2YgbmV3IGRhdGEgYmVmb3JlIG1ha2luZworICogICAgIGEgY3duZCBhZGp1c3RtZW50IGRlY2lzaW9uLiBUaGUgb3JpZ2luYWwgVmVnYXMgaW1wbGVtZW50YXRpb24KKyAqICAgICBhc3N1bWVkIHNlbmRlcnMgbmV2ZXIgd2VudCBpZGxlLgorICoKKyAqCisgKiAgIFRDUCBDb21wb3VuZCBiYXNlZCBvbiBUQ1AgVmVnYXMKKyAqCisgKiAgIGZ1cnRoZXIgZGV0YWlscyBjYW4gYmUgZm91bmQgaGVyZToKKyAqICAgICAgZnRwOi8vZnRwLnJlc2VhcmNoLm1pY3Jvc29mdC5jb20vcHViL3RyL1RSLTIwMDUtODYucGRmCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldF9kaWFnLmg+CisKKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKy8qIERlZmF1bHQgdmFsdWVzIG9mIHRoZSBWZWdhcyB2YXJpYWJsZXMsIGluIGZpeGVkLXBvaW50IHJlcHJlc2VudGF0aW9uCisgKiB3aXRoIFZfUEFSQU1fU0hJRlQgYml0cyB0byB0aGUgcmlnaHQgb2YgdGhlIGJpbmFyeSBwb2ludC4KKyAqLworI2RlZmluZSBWX1BBUkFNX1NISUZUIDEKKworI2RlZmluZSBUQ1BfQ09NUE9VTkRfQUxQSEEgICAgICAgICAgM1UKKyNkZWZpbmUgVENQX0NPTVBPVU5EX0JFVEEgICAgICAgICAgIDFVCisjZGVmaW5lIFRDUF9DT01QT1VORF9HQU1NQSAgICAgICAgIDMwCisjZGVmaW5lIFRDUF9DT01QT1VORF9aRVRBICAgICAgICAgICAxCisKKy8qIFRDUCBjb21wb3VuZCB2YXJpYWJsZXMgKi8KK3N0cnVjdCBjb21wb3VuZCB7CisJdTMyIGJlZ19zbmRfbnh0OwkvKiByaWdodCBlZGdlIGR1cmluZyBsYXN0IFJUVCAqLworCXUzMiBiZWdfc25kX3VuYTsJLyogbGVmdCBlZGdlICBkdXJpbmcgbGFzdCBSVFQgKi8KKwl1MzIgYmVnX3NuZF9jd25kOwkvKiBzYXZlcyB0aGUgc2l6ZSBvZiB0aGUgY3duZCAqLworCXU4IGRvaW5nX3ZlZ2FzX25vdzsJLyogaWYgdHJ1ZSwgZG8gdmVnYXMgZm9yIHRoaXMgUlRUICovCisJdTE2IGNudFJUVDsJCS8qICMgb2YgUlRUcyBtZWFzdXJlZCB3aXRoaW4gbGFzdCBSVFQgKi8KKwl1MzIgbWluUlRUOwkJLyogbWluIG9mIFJUVHMgbWVhc3VyZWQgd2l0aGluIGxhc3QgUlRUIChpbiB1c2VjKSAqLworCXUzMiBiYXNlUlRUOwkJLyogdGhlIG1pbiBvZiBhbGwgVmVnYXMgUlRUIG1lYXN1cmVtZW50cyBzZWVuIChpbiB1c2VjKSAqLworCisJdTMyIGN3bmQ7CisJdTMyIGR3bmQ7Cit9OworCisvKiBUaGVyZSBhcmUgc2V2ZXJhbCBzaXR1YXRpb25zIHdoZW4gd2UgbXVzdCAicmUtc3RhcnQiIFZlZ2FzOgorICoKKyAqICBvIHdoZW4gYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCisgKiAgbyBhZnRlciBhbiBSVE8KKyAqICBvIGFmdGVyIGZhc3QgcmVjb3ZlcnkKKyAqICBvIHdoZW4gd2Ugc2VuZCBhIHBhY2tldCBhbmQgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcKKyAqICAgIHVuYWNrbm93bGVkZ2VkIGRhdGEgKHJlc3RhcnRpbmcgYW4gaWRsZSBjb25uZWN0aW9uKQorICoKKyAqIEluIHRoZXNlIGNpcmN1bXN0YW5jZXMgd2UgY2Fubm90IGRvIGEgVmVnYXMgY2FsY3VsYXRpb24gYXQgdGhlCisgKiBlbmQgb2YgdGhlIGZpcnN0IFJUVCwgYmVjYXVzZSBhbnkgY2FsY3VsYXRpb24gd2UgZG8gaXMgdXNpbmcKKyAqIHN0YWxlIGluZm8gLS0gYm90aCB0aGUgc2F2ZWQgY3duZCBhbmQgY29uZ2VzdGlvbiBmZWVkYmFjayBhcmUKKyAqIHN0YWxlLgorICoKKyAqIEluc3RlYWQgd2UgbXVzdCB3YWl0IHVudGlsIHRoZSBjb21wbGV0aW9uIG9mIGFuIFJUVCBkdXJpbmcKKyAqIHdoaWNoIHdlIGFjdHVhbGx5IHJlY2VpdmUgQUNLcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZlZ2FzX2VuYWJsZShzdHJ1Y3Qgc29jayAqc2spCit7CisJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IGNvbXBvdW5kICp2ZWdhcyA9IGluZXRfY3NrX2NhKHNrKTsKKworCS8qIEJlZ2luIHRha2luZyBWZWdhcyBzYW1wbGVzIG5leHQgdGltZSB3ZSBzZW5kIHNvbWV0aGluZy4gKi8KKwl2ZWdhcy0+ZG9pbmdfdmVnYXNfbm93ID0gMTsKKworCS8qIFNldCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHNlbmQgd2luZG93LiAqLworCXZlZ2FzLT5iZWdfc25kX254dCA9IHRwLT5zbmRfbnh0OworCisJdmVnYXMtPmNudFJUVCA9IDA7CisJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7Cit9CisKKy8qIFN0b3AgdGFraW5nIFZlZ2FzIHNhbXBsZXMgZm9yIG5vdy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZWdhc19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgY29tcG91bmQgKnZlZ2FzID0gaW5ldF9jc2tfY2Eoc2spOworCisJdmVnYXMtPmRvaW5nX3ZlZ2FzX25vdyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRjcF9jb21wb3VuZF9pbml0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgY29tcG91bmQgKnZlZ2FzID0gaW5ldF9jc2tfY2Eoc2spOworCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCisJdmVnYXMtPmJhc2VSVFQgPSAweDdmZmZmZmZmOworCXZlZ2FzX2VuYWJsZShzayk7CisKKwl2ZWdhcy0+ZHduZCA9IDA7CisJdmVnYXMtPmN3bmQgPSB0cC0+c25kX2N3bmQ7Cit9CisKKy8qIERvIFJUVCBzYW1wbGluZyBuZWVkZWQgZm9yIFZlZ2FzLgorICogQmFzaWNhbGx5IHdlOgorICogICBvIG1pbi1maWx0ZXIgUlRUIHNhbXBsZXMgZnJvbSB3aXRoaW4gYW4gUlRUIHRvIGdldCB0aGUgY3VycmVudAorICogICAgIHByb3BhZ2F0aW9uIGRlbGF5ICsgcXVldWluZyBkZWxheSAod2UgYXJlIG1pbi1maWx0ZXJpbmcgdG8gdHJ5IHRvCisgKiAgICAgYXZvaWQgdGhlIGVmZmVjdHMgb2YgZGVsYXllZCBBQ0tzKQorICogICBvIG1pbi1maWx0ZXIgUlRUIHNhbXBsZXMgZnJvbSBhIG11Y2ggbG9uZ2VyIHdpbmRvdyAoZm9yZXZlciBmb3Igbm93KQorICogICAgIHRvIGZpbmQgdGhlIHByb3BhZ2F0aW9uIGRlbGF5IChiYXNlUlRUKQorICovCitzdGF0aWMgdm9pZCB0Y3BfY29tcG91bmRfcnR0X2NhbGMoc3RydWN0IHNvY2sgKnNrLCB1MzIgdXNydHQpCit7CisJc3RydWN0IGNvbXBvdW5kICp2ZWdhcyA9IGluZXRfY3NrX2NhKHNrKTsKKwl1MzIgdnJ0dCA9IHVzcnR0ICsgMTsJLyogTmV2ZXIgYWxsb3cgemVybyBydHQgb3IgYmFzZVJUVCAqLworCisJLyogRmlsdGVyIHRvIGZpbmQgcHJvcGFnYXRpb24gZGVsYXk6ICovCisJaWYgKHZydHQgPCB2ZWdhcy0+YmFzZVJUVCkKKwkJdmVnYXMtPmJhc2VSVFQgPSB2cnR0OworCisJLyogRmluZCB0aGUgbWluIFJUVCBkdXJpbmcgdGhlIGxhc3QgUlRUIHRvIGZpbmQKKwkgKiB0aGUgY3VycmVudCBwcm9wLiBkZWxheSArIHF1ZXVpbmcgZGVsYXk6CisJICovCisKKwl2ZWdhcy0+bWluUlRUID0gbWluKHZlZ2FzLT5taW5SVFQsIHZydHQpOworCXZlZ2FzLT5jbnRSVFQrKzsKK30KKworc3RhdGljIHZvaWQgdGNwX2NvbXBvdW5kX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggY2Ffc3RhdGUpCit7CisKKwlpZiAoY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pCisJCXZlZ2FzX2VuYWJsZShzayk7CisJZWxzZQorCQl2ZWdhc19kaXNhYmxlKHNrKTsKK30KKworCisvKiA2NGJpdCBkaXZpc29yLCBkaXZpZGVuZCBhbmQgcmVzdWx0LiBkeW5hbWljIHByZWNpc2lvbiAqLworc3RhdGljIGlubGluZSB1NjQgZGl2NjRfNjQodTY0IGRpdmlkZW5kLCB1NjQgZGl2aXNvcikKK3sKKwl1MzIgZCA9IGRpdmlzb3I7CisKKwlpZiAoZGl2aXNvciA+IDB4ZmZmZmZmZmZVTEwpIHsKKwkJdW5zaWduZWQgaW50IHNoaWZ0ID0gZmxzKGRpdmlzb3IgPj4gMzIpOworCisJCWQgPSBkaXZpc29yID4+IHNoaWZ0OworCQlkaXZpZGVuZCA+Pj0gc2hpZnQ7CisJfQorCisJLyogYXZvaWQgNjQgYml0IGRpdmlzaW9uIGlmIHBvc3NpYmxlICovCisJaWYgKGRpdmlkZW5kID4+IDMyKQorCQlkb19kaXYoZGl2aWRlbmQsIGQpOworCWVsc2UKKwkJZGl2aWRlbmQgPSAodTMyKSBkaXZpZGVuZCAvIGQ7CisKKwlyZXR1cm4gZGl2aWRlbmQ7Cit9CisKKy8qIGNhbGN1bGF0ZSB0aGUgcXVhcnRpYyByb290IG9mICJhIiB1c2luZyBOZXd0b24tUmFwaHNvbiAqLworc3RhdGljIHUzMiBxcm9vdCh1NjQgYSkKK3sKKwl1MzIgeCwgeDE7CisKKwkvKiBJbml0aWFsIGVzdGltYXRlIGlzIGJhc2VkIG9uOgorCSAqIHFydCh4KSA9IGV4cChsb2coeCkgLyA0KQorCSAqLworCXggPSAxdSA8PCAoZmxzNjQoYSkgPj4gMik7CisKKwkvKgorCSAqIEl0ZXJhdGlvbiBiYXNlZCBvbjoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAzCisJICogeCAgICA9ICggMyAqIHggICsgIGEgLyB4ICApIC8gNAorCSAqICBrKzEgICAgICAgICAgayAgICAgICAgIGsKKwkgKi8KKwlkbyB7CisJCXU2NCB4MyA9IHg7CisKKwkJeDEgPSB4OworCQl4MyAqPSB4OworCQl4MyAqPSB4OworCisJCXggPSAoMyAqIHggKyAodTMyKSBkaXY2NF82NChhLCB4MykpIC8gNDsKKwl9IHdoaWxlIChhYnMoeDEgLSB4KSA+IDEpOworCisJcmV0dXJuIHg7Cit9CisKKworLyoKKyAqIElmIHRoZSBjb25uZWN0aW9uIGlzIGlkbGUgYW5kIHdlIGFyZSByZXN0YXJ0aW5nLAorICogdGhlbiB3ZSBkb24ndCB3YW50IHRvIGRvIGFueSBWZWdhcyBjYWxjdWxhdGlvbnMKKyAqIHVudGlsIHdlIGdldCBmcmVzaCBSVFQgc2FtcGxlcy4gIFNvIHdoZW4gd2UKKyAqIHJlc3RhcnQsIHdlIHJlc2V0IG91ciBWZWdhcyBzdGF0ZSB0byBhIGNsZWFuCisgKiBzbGF0ZS4gQWZ0ZXIgd2UgZ2V0IGFja3MgZm9yIHRoaXMgZmxpZ2h0IG9mCisgKiBwYWNrZXRzLCBfdGhlbl8gd2UgY2FuIG1ha2UgVmVnYXMgY2FsY3VsYXRpb25zCisgKiBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQgdGNwX2NvbXBvdW5kX2N3bmRfZXZlbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldmVudCkKK3sKKwlpZiAoZXZlbnQgPT0gQ0FfRVZFTlRfQ1dORF9SRVNUQVJUIHx8IGV2ZW50ID09IENBX0VWRU5UX1RYX1NUQVJUKQorCQl0Y3BfY29tcG91bmRfaW5pdChzayk7Cit9CisKK3N0YXRpYyB2b2lkIHRjcF9jb21wb3VuZF9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywKKwkJCQkgICAgdTMyIHNlcV9ydHQsIHUzMiBpbl9mbGlnaHQsIGludCBmbGFnKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBjb21wb3VuZCAqdmVnYXMgPSBpbmV0X2Nza19jYShzayk7CisJdTggaW5jID0gMDsKKworCWlmICh2ZWdhcy0+Y3duZCArIHZlZ2FzLT5kd25kID4gdHAtPnNuZF9jd25kKSB7CisJCWlmICh2ZWdhcy0+Y3duZCA+IHRwLT5zbmRfY3duZCB8fCB2ZWdhcy0+ZHduZCA+IHRwLT5zbmRfY3duZCkgeworCQkJdmVnYXMtPmN3bmQgPSB0cC0+c25kX2N3bmQ7CisJCQl2ZWdhcy0+ZHduZCA9IDA7CisJCX0gZWxzZQorCQkJdmVnYXMtPmN3bmQgPSB0cC0+c25kX2N3bmQgLSB2ZWdhcy0+ZHduZDsKKworCX0KKworCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKKwkJcmV0dXJuOworCisJaWYgKHZlZ2FzLT5jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCWluYyA9IDE7CisJZWxzZSBpZiAodHAtPnNuZF9jd25kX2NudCA8IHRwLT5zbmRfY3duZCkKKwkJdHAtPnNuZF9jd25kX2NudCsrOworCisJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7CisJCWluYyA9IDE7CisJCXRwLT5zbmRfY3duZF9jbnQgPSAwOworCX0KKworCWlmIChpbmMgJiYgdHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQl2ZWdhcy0+Y3duZCsrOworCisJLyogVGhlIGtleSBwbGF5ZXJzIGFyZSB2X2JlZ19zbmRfdW5hIGFuZCB2X2JlZ19zbmRfbnh0LgorCSAqCisJICogVGhlc2UgYXJlIHNvIG5hbWVkIGJlY2F1c2UgdGhleSByZXByZXNlbnQgdGhlIGFwcHJveGltYXRlIHZhbHVlcworCSAqIG9mIHNuZF91bmEgYW5kIHNuZF9ueHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBSVFQuIE1vcmUKKwkgKiBwcmVjaXNlbHksIHRoZXkgcmVwcmVzZW50IHRoZSBhbW91bnQgb2YgZGF0YSBzZW50IGR1cmluZyB0aGUgUlRULgorCSAqIEF0IHRoZSBlbmQgb2YgdGhlIFJUVCwgd2hlbiB3ZSByZWNlaXZlIGFuIEFDSyBmb3Igdl9iZWdfc25kX254dCwKKwkgKiB3ZSB3aWxsIGNhbGN1bGF0ZSB0aGF0ICh2X2JlZ19zbmRfbnh0IC0gdl9iZWdfc25kX3VuYSkgb3V0c3RhbmRpbmcKKwkgKiBieXRlcyBvZiBkYXRhIGhhdmUgYmVlbiBBQ0tlZCBkdXJpbmcgdGhlIGNvdXJzZSBvZiB0aGUgUlRULCBnaXZpbmcKKwkgKiBhbiAiYWN0dWFsIiByYXRlIG9mOgorCSAqCisJICogICAgICh2X2JlZ19zbmRfbnh0IC0gdl9iZWdfc25kX3VuYSkgLyAocnR0IGR1cmF0aW9uKQorCSAqCisJICogVW5mb3J0dW5hdGVseSwgdl9iZWdfc25kX3VuYSBpcyBub3QgZXhhY3RseSBlcXVhbCB0byBzbmRfdW5hLAorCSAqIGJlY2F1c2UgZGVsYXllZCBBQ0tzIGNhbiBjb3ZlciBtb3JlIHRoYW4gb25lIHNlZ21lbnQsIHNvIHRoZXkKKwkgKiBkb24ndCBsaW5lIHVwIG5pY2VseSB3aXRoIHRoZSBib3VuZGFyaWVzIG9mIFJUVHMuCisJICoKKwkgKiBBbm90aGVyIHVuZm9ydHVuYXRlIGZhY3Qgb2YgbGlmZSBpcyB0aGF0IGRlbGF5ZWQgQUNLcyBkZWxheSB0aGUKKwkgKiBhZHZhbmNlIG9mIHRoZSBsZWZ0IGVkZ2Ugb2Ygb3VyIHNlbmQgd2luZG93LCBzbyB0aGF0IHRoZSBudW1iZXIKKwkgKiBvZiBieXRlcyB3ZSBzZW5kIGluIGFuIFJUVCBpcyBvZnRlbiBsZXNzIHRoYW4gb3VyIGN3bmQgd2lsbCBhbGxvdy4KKwkgKiBTbyB3ZSBrZWVwIHRyYWNrIG9mIG91ciBjd25kIHNlcGFyYXRlbHksIGluIHZfYmVnX3NuZF9jd25kLgorCSAqLworCisJaWYgKGFmdGVyKGFjaywgdmVnYXMtPmJlZ19zbmRfbnh0KSkgeworCQkvKiBEbyB0aGUgVmVnYXMgb25jZS1wZXItUlRUIGN3bmQgYWRqdXN0bWVudC4gKi8KKwkJdTMyIG9sZF93bmQsIG9sZF9zbmRfY3duZDsKKworCQkvKiBIZXJlIG9sZF93bmQgaXMgZXNzZW50aWFsbHkgdGhlIHdpbmRvdyBvZiBkYXRhIHRoYXQgd2FzCisJCSAqIHNlbnQgZHVyaW5nIHRoZSBwcmV2aW91cyBSVFQsIGFuZCBoYXMgYWxsCisJCSAqIGJlZW4gYWNrbm93bGVkZ2VkIGluIHRoZSBjb3Vyc2Ugb2YgdGhlIFJUVCB0aGF0IGVuZGVkCisJCSAqIHdpdGggdGhlIEFDSyB3ZSBqdXN0IHJlY2VpdmVkLiBMaWtld2lzZSwgb2xkX3NuZF9jd25kCisJCSAqIGlzIHRoZSBjd25kIGR1cmluZyB0aGUgcHJldmlvdXMgUlRULgorCQkgKi8KKwkJaWYgKCF0cC0+bXNzX2NhY2hlKQorCQkJcmV0dXJuOworCisJCW9sZF93bmQgPSAodmVnYXMtPmJlZ19zbmRfbnh0IC0gdmVnYXMtPmJlZ19zbmRfdW5hKSAvCisJCSAgICB0cC0+bXNzX2NhY2hlOworCQlvbGRfc25kX2N3bmQgPSB2ZWdhcy0+YmVnX3NuZF9jd25kOworCisJCS8qIFNhdmUgdGhlIGV4dGVudCBvZiB0aGUgY3VycmVudCB3aW5kb3cgc28gd2UgY2FuIHVzZSB0aGlzCisJCSAqIGF0IHRoZSBlbmQgb2YgdGhlIG5leHQgUlRULgorCQkgKi8KKwkJdmVnYXMtPmJlZ19zbmRfdW5hID0gdmVnYXMtPmJlZ19zbmRfbnh0OworCQl2ZWdhcy0+YmVnX3NuZF9ueHQgPSB0cC0+c25kX254dDsKKwkJdmVnYXMtPmJlZ19zbmRfY3duZCA9IHRwLT5zbmRfY3duZDsKKworCQkvKiBXZSBkbyB0aGUgVmVnYXMgY2FsY3VsYXRpb25zIG9ubHkgaWYgd2UgZ290IGVub3VnaCBSVFQKKwkJICogc2FtcGxlcyB0aGF0IHdlIGNhbiBiZSByZWFzb25hYmx5IHN1cmUgdGhhdCB3ZSBnb3QKKwkJICogYXQgbGVhc3Qgb25lIFJUVCBzYW1wbGUgdGhhdCB3YXNuJ3QgZnJvbSBhIGRlbGF5ZWQgQUNLLgorCQkgKiBJZiB3ZSBvbmx5IGhhZCAyIHNhbXBsZXMgdG90YWwsCisJCSAqIHRoZW4gdGhhdCBtZWFucyB3ZSdyZSBnZXR0aW5nIG9ubHkgMSBBQ0sgcGVyIFJUVCwgd2hpY2gKKwkJICogbWVhbnMgdGhleSdyZSBhbG1vc3QgY2VydGFpbmx5IGRlbGF5ZWQgQUNLcy4KKwkJICogSWYgIHdlIGhhdmUgMyBzYW1wbGVzLCB3ZSBzaG91bGQgYmUgT0suCisJCSAqLworCisJCWlmICh2ZWdhcy0+Y250UlRUID4gMikgeworCQkJdTMyIHJ0dCwgdGFyZ2V0X2N3bmQsIGRpZmY7CisJCQl1MzIgYnJ0dCwgZHduZDsKKworCQkJLyogV2UgaGF2ZSBlbm91Z2ggUlRUIHNhbXBsZXMsIHNvLCB1c2luZyB0aGUgVmVnYXMKKwkJCSAqIGFsZ29yaXRobSwgd2UgZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBpbmNyZWFzZSBvcgorCQkJICogZGVjcmVhc2UgY3duZCwgYW5kIGJ5IGhvdyBtdWNoLgorCQkJICovCisKKwkJCS8qIFBsdWNrIG91dCB0aGUgUlRUIHdlIGFyZSB1c2luZyBmb3IgdGhlIFZlZ2FzCisJCQkgKiBjYWxjdWxhdGlvbnMuIFRoaXMgaXMgdGhlIG1pbiBSVFQgc2VlbiBkdXJpbmcgdGhlCisJCQkgKiBsYXN0IFJUVC4gVGFraW5nIHRoZSBtaW4gZmlsdGVycyBvdXQgdGhlIGVmZmVjdHMKKwkJCSAqIG9mIGRlbGF5ZWQgQUNLcywgYXQgdGhlIGNvc3Qgb2Ygbm90aWNpbmcgY29uZ2VzdGlvbgorCQkJICogYSBiaXQgbGF0ZXIuCisJCQkgKi8KKwkJCXJ0dCA9IHZlZ2FzLT5taW5SVFQ7CisKKwkJCS8qIENhbGN1bGF0ZSB0aGUgY3duZCB3ZSBzaG91bGQgaGF2ZSwgaWYgd2Ugd2VyZW4ndAorCQkJICogZ29pbmcgdG9vIGZhc3QuCisJCQkgKgorCQkJICogVGhpcyBpczoKKwkJCSAqICAgICAoYWN0dWFsIHJhdGUgaW4gc2VnbWVudHMpICogYmFzZVJUVAorCQkJICogV2Uga2VlcCBpdCBhcyBhIGZpeGVkIHBvaW50IG51bWJlciB3aXRoCisJCQkgKiBWX1BBUkFNX1NISUZUIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBiaW5hcnkgcG9pbnQuCisJCQkgKi8KKwkJCWlmICghcnR0KQorCQkJCXJldHVybjsKKworCQkJYnJ0dCA9IHZlZ2FzLT5iYXNlUlRUOworCQkJdGFyZ2V0X2N3bmQgPSAoKG9sZF93bmQgKiBicnR0KQorCQkJCSAgICAgICA8PCBWX1BBUkFNX1NISUZUKSAvIHJ0dDsKKworCQkJLyogQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpbmRvdyB3ZSBoYWQsCisJCQkgKiBhbmQgdGhlIHdpbmRvdyB3ZSB3b3VsZCBsaWtlIHRvIGhhdmUuIFRoaXMgcXVhbnRpdHkKKwkJCSAqIGlzIHRoZSAiRGlmZiIgZnJvbSB0aGUgQXJpem9uYSBWZWdhcyBwYXBlcnMuCisJCQkgKgorCQkJICogQWdhaW4sIHRoaXMgaXMgYSBmaXhlZCBwb2ludCBudW1iZXIgd2l0aAorCQkJICogVl9QQVJBTV9TSElGVCBiaXRzIHRvIHRoZSByaWdodCBvZiB0aGUgYmluYXJ5CisJCQkgKiBwb2ludC4KKwkJCSAqLworCisJCQlkaWZmID0gKG9sZF93bmQgPDwgVl9QQVJBTV9TSElGVCkgLSB0YXJnZXRfY3duZDsKKworCQkJZHduZCA9IHZlZ2FzLT5kd25kOworCisJCQlpZiAoZGlmZiA8IChUQ1BfQ09NUE9VTkRfR0FNTUEgPDwgVl9QQVJBTV9TSElGVCkpIHsKKwkJCQl1NjQgdjsKKwkJCQl1MzIgeDsKKworCQkJCS8qCisJCQkJICogVGhlIFRDUCBDb21wb3VuZCBwYXBlciBkZXNjcmliZXMgdGhlIGNob2ljZQorCQkJCSAqIG9mICJrIiBkZXRlcm1pbmVzIHRoZSBhZ3Jlc3NpdmVuZXNzLAorCQkJCSAqIGllLiBzbG9wZSBvZiB0aGUgcmVzcG9uc2UgZnVuY3Rpb24uCisJCQkJICoKKwkJCQkgKiBGb3Igc2FtZSB2YWx1ZSBhcyBIU1RDUCB3b3VsZCBiZSAwLjgKKwkJCQkgKiBidXQgZm9yIGNvbXB1dGFpb25hbCByZWFzb25zLCBib3RoIHRoZQorCQkJCSAqIG9yaWdpbmFsIGF1dGhvcnMgYW5kIHRoaXMgaW1wbGVtZW50YXRpb24KKwkJCQkgKiB1c2UgMC43NS4KKwkJCQkgKi8KKwkJCQl2ID0gb2xkX3duZDsKKwkJCQl4ID0gcXJvb3QodiAqIHYgKiB2KSA+PiBUQ1BfQ09NUE9VTkRfQUxQSEE7CisJCQkJaWYgKHggPiAxKQorCQkJCQlkd25kID0geCAtIDE7CisJCQkJZWxzZQorCQkJCQlkd25kID0gMDsKKworCQkJCWR3bmQgKz0gdmVnYXMtPmR3bmQ7CisKKwkJCX0gZWxzZSBpZiAoKGR3bmQgPDwgVl9QQVJBTV9TSElGVCkgPAorCQkJCSAgIChkaWZmICogVENQX0NPTVBPVU5EX0JFVEEpKQorCQkJCWR3bmQgPSAwOworCQkJZWxzZQorCQkJCWR3bmQgPQorCQkJCSAgICAoKGR3bmQgPDwgVl9QQVJBTV9TSElGVCkgLQorCQkJCSAgICAgKGRpZmYgKgorCQkJCSAgICAgIFRDUF9DT01QT1VORF9CRVRBKSkgPj4gVl9QQVJBTV9TSElGVDsKKworCQkJdmVnYXMtPmR3bmQgPSBkd25kOworCisJCX0KKworCQkvKiBXaXBlIHRoZSBzbGF0ZSBjbGVhbiBmb3IgdGhlIG5leHQgUlRULiAqLworCQl2ZWdhcy0+Y250UlRUID0gMDsKKwkJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7CisJfQorCisJdHAtPnNuZF9jd25kID0gdmVnYXMtPmN3bmQgKyB2ZWdhcy0+ZHduZDsKK30KKworLyogRXh0cmFjdCBpbmZvIGZvciBUY3Agc29ja2V0IGluZm8gcHJvdmlkZWQgdmlhIG5ldGxpbmsuICovCitzdGF0aWMgdm9pZCB0Y3BfY29tcG91bmRfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBjb21wb3VuZCAqY2EgPSBpbmV0X2Nza19jYShzayk7CisJaWYgKGV4dCAmICgxIDw8IChJTkVUX0RJQUdfVkVHQVNJTkZPIC0gMSkpKSB7CisJCXN0cnVjdCB0Y3B2ZWdhc19pbmZvICppbmZvOworCisJCWluZm8gPSBSVEFfREFUQShfX1JUQV9QVVQoc2tiLCBJTkVUX0RJQUdfVkVHQVNJTkZPLAorCQkJCQkgIHNpemVvZigqaW5mbykpKTsKKworCQlpbmZvLT50Y3B2X2VuYWJsZWQgPSBjYS0+ZG9pbmdfdmVnYXNfbm93OworCQlpbmZvLT50Y3B2X3J0dGNudCA9IGNhLT5jbnRSVFQ7CisJCWluZm8tPnRjcHZfcnR0ID0gY2EtPmJhc2VSVFQ7CisJCWluZm8tPnRjcHZfbWlucnR0ID0gY2EtPm1pblJUVDsKKwlydGF0dHJfZmFpbHVyZTo7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY29tcG91bmQgPSB7CisJLmluaXQJCT0gdGNwX2NvbXBvdW5kX2luaXQsCisJLnNzdGhyZXNoCT0gdGNwX3Jlbm9fc3N0aHJlc2gsCisJLmNvbmdfYXZvaWQJPSB0Y3BfY29tcG91bmRfY29uZ19hdm9pZCwKKwkucnR0X3NhbXBsZQk9IHRjcF9jb21wb3VuZF9ydHRfY2FsYywKKwkuc2V0X3N0YXRlCT0gdGNwX2NvbXBvdW5kX3N0YXRlLAorCS5jd25kX2V2ZW50CT0gdGNwX2NvbXBvdW5kX2N3bmRfZXZlbnQsCisJLmdldF9pbmZvCT0gdGNwX2NvbXBvdW5kX2dldF9pbmZvLAorCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJjb21wb3VuZCIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0Y3BfY29tcG91bmRfcmVnaXN0ZXIodm9pZCkKK3sKKwlCVUdfT04oc2l6ZW9mKHN0cnVjdCBjb21wb3VuZCkgPiBJQ1NLX0NBX1BSSVZfU0laRSk7CisJdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmdGNwX2NvbXBvdW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRjcF9jb21wb3VuZF91bnJlZ2lzdGVyKHZvaWQpCit7CisJdGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKCZ0Y3BfY29tcG91bmQpOworfQorCittb2R1bGVfaW5pdCh0Y3BfY29tcG91bmRfcmVnaXN0ZXIpOworbW9kdWxlX2V4aXQodGNwX2NvbXBvdW5kX3VucmVnaXN0ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBbmdlbG8gUC4gQ2FzdGVsbGFuaSwgU3RlcGhlbiBIZW1taW5nZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVENQIENvbXBvdW5kIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCA5MWMyZjQxLi44NTdlZWZjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCS8qIGFsbCBhbGdvcml0aG1zIG11c3QgaW1wbGVtZW50IHNzdGhyZXNoIGFuZCBjb25nX2F2b2lkIG9wcyAqLwotCWlmICghY2EtPnNzdGhyZXNoIHx8ICFjYS0+Y29uZ19hdm9pZCB8fCAhY2EtPm1pbl9jd25kKSB7CisJaWYgKCFjYS0+c3N0aHJlc2ggfHwgIWNhLT5jb25nX2F2b2lkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVENQICVzIGRvZXMgbm90IGltcGxlbWVudCByZXF1aXJlZCBvcHNcbiIsCiAJCSAgICAgICBjYS0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjUxLDggKzI1MSw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub19zc3RocmVzaCk7CiAKLS8qIExvd2VyIGJvdW5kIG9uIGNvbmdlc3Rpb24gd2luZG93LiAqLwotdTMyIHRjcF9yZW5vX21pbl9jd25kKHN0cnVjdCBzb2NrICpzaykKKy8qIExvd2VyIGJvdW5kIG9uIGNvbmdlc3Rpb24gd2luZG93IHdpdGggaGFsdmluZy4gKi8KK3UzMiB0Y3BfcmVub19taW5fY3duZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJcmV0dXJuIHRwLT5zbmRfc3N0aHJlc2gvMjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jdWJpYy5jIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKaW5kZXggMzFhNDk4Ni4uNzhiN2E2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2N1YmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTMyNSwxMSArMzI1LDYgQEAKIAlyZXR1cm4gbWF4KHRjcF9zayhzayktPnNuZF9jd25kLCBjYS0+bGFzdF9tYXhfY3duZCk7CiB9CiAKLXN0YXRpYyB1MzIgYmljdGNwX21pbl9jd25kKHN0cnVjdCBzb2NrICpzaykKLXsKLQlyZXR1cm4gdGNwX3NrKHNrKS0+c25kX3NzdGhyZXNoOwotfQotCiBzdGF0aWMgdm9pZCBiaWN0Y3Bfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpCiB7CiAJaWYgKG5ld19zdGF0ZSA9PSBUQ1BfQ0FfTG9zcykKQEAgLTM1Nyw3ICszNTIsNiBAQAogCS5jb25nX2F2b2lkCT0gYmljdGNwX2NvbmdfYXZvaWQsCiAJLnNldF9zdGF0ZQk9IGJpY3RjcF9zdGF0ZSwKIAkudW5kb19jd25kCT0gYmljdGNwX3VuZG9fY3duZCwKLQkubWluX2N3bmQJPSBiaWN0Y3BfbWluX2N3bmQsCiAJLnBrdHNfYWNrZWQgICAgID0gYmljdGNwX2Fja2VkLAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiY3ViaWMiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCmluZGV4IGJhN2M2M2MuLjExMjAyNDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYworKysgYi9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKQEAgLTk4LDYgKzk4LDEwIEBACiAJdTMyCWFpOwogfTsKIAorc3RhdGljIGludCBtYXhfc3N0aHJlc2ggPSAxMDA7Cittb2R1bGVfcGFyYW0obWF4X3NzdGhyZXNoLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfc3N0aHJlc2gsICJsaW1pdGVkIHNsb3cgc3RhcnQgdGhyZXNob2xkIChSRkMzNzQyKSIpOworCiBzdGF0aWMgdm9pZCBoc3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTExOSw5ICsxMjMsMjMgQEAKIAlpZiAoIXRjcF9pc19jd25kX2xpbWl0ZWQoc2ssIGluX2ZsaWdodCkpCiAJCXJldHVybjsKIAotCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKLQkJdGNwX3Nsb3dfc3RhcnQodHApOwotCWVsc2UgeworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgeworCQkvKiBSRkMzNzQyOiBsaW1pdGVkIHNsb3cgc3RhcnQKKwkJICogdGhlIHdpbmRvdyBpcyBpbmNyZWFzZWQgYnkgMS9LIE1TUyBmb3IgZWFjaCBhcnJpdmluZyBBQ0ssCisJCSAqIGZvciBLID0gaW50KGN3bmQvKDAuNSBtYXhfc3N0aHJlc2gpKQorCQkgKi8KKwkJaWYgKG1heF9zc3RocmVzaCA+IDAgJiYgdHAtPnNuZF9jd25kID4gbWF4X3NzdGhyZXNoKSB7CisJCQl1MzIgayA9IG1heCh0cC0+c25kX2N3bmQgLyAobWF4X3NzdGhyZXNoID4+IDEpLCAxVSk7CisJCQlpZiAoKyt0cC0+c25kX2N3bmRfY250ID49IGspIHsKKwkJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQkJCQl0cC0+c25kX2N3bmQrKzsKKwkJCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJdHAtPnNuZF9jd25kKys7CisJCX0KKwl9IGVsc2UgewogCQkvKiBVcGRhdGUgQUlNRCBwYXJhbWV0ZXJzICovCiAJCWlmICh0cC0+c25kX2N3bmQgPiBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kKSB7CiAJCQl3aGlsZSAodHAtPnNuZF9jd25kID4gaHN0Y3BfYWltZF92YWxzW2NhLT5haV0uY3duZCAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2h0Y3AuYyBiL25ldC9pcHY0L3RjcF9odGNwLmMKaW5kZXggMWIyZmY1My4uM2Q5MmMxOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2h0Y3AuYworKysgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCkBAIC0yNDYsMTQgKzI0Niw2IEBACiAJfQogfQogCi0vKiBMb3dlciBib3VuZCBvbiBjb25nZXN0aW9uIHdpbmRvdy4gKi8KLXN0YXRpYyB1MzIgaHRjcF9taW5fY3duZChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JcmV0dXJuIHRwLT5zbmRfc3N0aHJlc2g7Ci19Ci0KLQogc3RhdGljIHZvaWQgaHRjcF9pbml0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgaHRjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CkBAIC0yODUsNyArMjc3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGh0Y3AgPSB7CiAJLmluaXQJCT0gaHRjcF9pbml0LAogCS5zc3RocmVzaAk9IGh0Y3BfcmVjYWxjX3NzdGhyZXNoLAotCS5taW5fY3duZAk9IGh0Y3BfbWluX2N3bmQsCiAJLmNvbmdfYXZvaWQJPSBodGNwX2NvbmdfYXZvaWQsCiAJLnNldF9zdGF0ZQk9IGh0Y3Bfc3RhdGUsCiAJLnVuZG9fY3duZAk9IGh0Y3BfY3duZF91bmRvLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCA0YTUzOGJjLi5lMDgyNDViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwc2VjLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPG5ldC9uZXRkbWEuaD4KIAogaW50IHN5c2N0bF90Y3BfdGltZXN0YW1wcyA9IDE7CiBpbnQgc3lzY3RsX3RjcF93aW5kb3dfc2NhbGluZyA9IDE7CkBAIC0xNjQ5LDcgKzE2NTAsNyBAQAogCSAqIEhlbmNlLCB3ZSBjYW4gZGV0ZWN0IHRpbWVkIG91dCBwYWNrZXRzIGR1cmluZyBmYXN0CiAJICogcmV0cmFuc21pdCB3aXRob3V0IGZhbGxpbmcgdG8gc2xvdyBzdGFydC4KIAkgKi8KLQlpZiAodGNwX2hlYWRfdGltZWRvdXQoc2ssIHRwKSkgeworCWlmICghSXNSZW5vKHRwKSAmJiB0Y3BfaGVhZF90aW1lZG91dChzaywgdHApKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkJc2tiID0gdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPyB0cC0+c2NvcmVib2FyZF9za2JfaGludApAQCAtMTY2Miw4ICsxNjYzLDYgQEAKIAkJCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkJlRDUENCX1RBR0JJVFMpKSB7CiAJCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgfD0gVENQQ0JfTE9TVDsKIAkJCQl0cC0+bG9zdF9vdXQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKLQkJCQlpZiAoSXNSZW5vKHRwKSkKLQkJCQkJdGNwX3JlbW92ZV9yZW5vX3NhY2tzKHNrLCB0cCwgdGNwX3NrYl9wY291bnQoc2tiKSArIDEpOwogCiAJCQkJLyogY2xlYXIgeG1pdF9yZXRyYW5zIGhpbnQgKi8KIAkJCQlpZiAodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgJiYKQEAgLTE2OTAsMTcgKzE2ODksMjYgQEAKIAl0cC0+c25kX2N3bmRfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcDsKIH0KIAorLyogTG93ZXIgYm91bmQgb24gY29uZ2VzdGlvbiB3aW5kb3cgaXMgc2xvdyBzdGFydCB0aHJlc2hvbGQKKyAqIHVubGVzcyBjb25nZXN0aW9uIGF2b2lkYW5jZSBjaG9pY2UgZGVjaWRlcyB0byBvdmVyaWRlIGl0LgorICovCitzdGF0aWMgaW5saW5lIHUzMiB0Y3BfY3duZF9taW4oY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCWNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS0+aWNza19jYV9vcHM7CisKKwlyZXR1cm4gY2Ffb3BzLT5taW5fY3duZCA/IGNhX29wcy0+bWluX2N3bmQoc2spIDogdGNwX3NrKHNrKS0+c25kX3NzdGhyZXNoOworfQorCiAvKiBEZWNyZWFzZSBjd25kIGVhY2ggc2Vjb25kIGFjay4gKi8KIHN0YXRpYyB2b2lkIHRjcF9jd25kX2Rvd24oc3RydWN0IHNvY2sgKnNrKQogewotCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlpbnQgZGVjciA9IHRwLT5zbmRfY3duZF9jbnQgKyAxOwogCiAJdHAtPnNuZF9jd25kX2NudCA9IGRlY3ImMTsKIAlkZWNyID4+PSAxOwogCi0JaWYgKGRlY3IgJiYgdHAtPnNuZF9jd25kID4gaWNzay0+aWNza19jYV9vcHMtPm1pbl9jd25kKHNrKSkKKwlpZiAoZGVjciAmJiB0cC0+c25kX2N3bmQgPiB0Y3BfY3duZF9taW4oc2spKQogCQl0cC0+c25kX2N3bmQgLT0gZGVjcjsKIAogCXRwLT5zbmRfY3duZCA9IG1pbih0cC0+c25kX2N3bmQsIHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkrMSk7CkBAIC0zNzg3LDYgKzM3OTUsNTAgQEAKIAkJX190Y3BfY2hlY2tzdW1fY29tcGxldGVfdXNlcihzaywgc2tiKTsKIH0KIAorI2lmZGVmIENPTkZJR19ORVRfRE1BCitzdGF0aWMgaW50IHRjcF9kbWFfdHJ5X2Vhcmx5X2NvcHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGxlbikKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlpbnQgY2h1bmsgPSBza2ItPmxlbiAtIGhsZW47CisJaW50IGRtYV9jb29raWU7CisJaW50IGNvcGllZF9lYXJseSA9IDA7CisKKwlpZiAodHAtPnVjb3B5Lndha2V1cCkKKyAgICAgICAgICAJcmV0dXJuIDA7CisKKwlpZiAoIXRwLT51Y29weS5kbWFfY2hhbiAmJiB0cC0+dWNvcHkucGlubmVkX2xpc3QpCisJCXRwLT51Y29weS5kbWFfY2hhbiA9IGdldF9zb2Z0bmV0X2RtYSgpOworCisJaWYgKHRwLT51Y29weS5kbWFfY2hhbiAmJiBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgeworCisJCWRtYV9jb29raWUgPSBkbWFfc2tiX2NvcHlfZGF0YWdyYW1faW92ZWModHAtPnVjb3B5LmRtYV9jaGFuLAorCQkJc2tiLCBobGVuLCB0cC0+dWNvcHkuaW92LCBjaHVuaywgdHAtPnVjb3B5LnBpbm5lZF9saXN0KTsKKworCQlpZiAoZG1hX2Nvb2tpZSA8IDApCisJCQlnb3RvIG91dDsKKworCQl0cC0+dWNvcHkuZG1hX2Nvb2tpZSA9IGRtYV9jb29raWU7CisJCWNvcGllZF9lYXJseSA9IDE7CisKKwkJdHAtPnVjb3B5LmxlbiAtPSBjaHVuazsKKwkJdHAtPmNvcGllZF9zZXEgKz0gY2h1bms7CisJCXRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTsKKworCQlpZiAoKHRwLT51Y29weS5sZW4gPT0gMCkgfHwKKwkJICAgICh0Y3BfZmxhZ193b3JkKHNrYi0+aC50aCkgJiBUQ1BfRkxBR19QU0gpIHx8CisJCSAgICAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA+IChzay0+c2tfcmN2YnVmID4+IDEpKSkgeworCQkJdHAtPnVjb3B5Lndha2V1cCA9IDE7CisJCQlzay0+c2tfZGF0YV9yZWFkeShzaywgMCk7CisJCX0KKwl9IGVsc2UgaWYgKGNodW5rID4gMCkgeworCQl0cC0+dWNvcHkud2FrZXVwID0gMTsKKwkJc2stPnNrX2RhdGFfcmVhZHkoc2ssIDApOworCX0KK291dDoKKwlyZXR1cm4gY29waWVkX2Vhcmx5OworfQorI2VuZGlmIC8qIENPTkZJR19ORVRfRE1BICovCisKIC8qCiAgKglUQ1AgcmVjZWl2ZSBmdW5jdGlvbiBmb3IgdGhlIEVTVEFCTElTSEVEIHN0YXRlLiAKICAqCkBAIC0zODg4LDggKzM5NDAsNiBAQAogCQkJCSAgICB0cC0+cmN2X254dCA9PSB0cC0+cmN2X3d1cCkKIAkJCQkJdGNwX3N0b3JlX3RzX3JlY2VudCh0cCk7CiAKLQkJCQl0Y3BfcmN2X3J0dF9tZWFzdXJlX3RzKHNrLCBza2IpOwotCiAJCQkJLyogV2Uga25vdyB0aGF0IHN1Y2ggcGFja2V0cyBhcmUgY2hlY2tzdW1tZWQKIAkJCQkgKiBvbiBlbnRyeS4KIAkJCQkgKi8KQEAgLTM5MDMsMTQgKzM5NTMsMjMgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWludCBlYXRlbiA9IDA7CisJCQlpbnQgY29waWVkX2Vhcmx5ID0gMDsKIAotCQkJaWYgKHRwLT51Y29weS50YXNrID09IGN1cnJlbnQgJiYKLQkJCSAgICB0cC0+Y29waWVkX3NlcSA9PSB0cC0+cmN2X254dCAmJgotCQkJICAgIGxlbiAtIHRjcF9oZWFkZXJfbGVuIDw9IHRwLT51Y29weS5sZW4gJiYKLQkJCSAgICBzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7Ci0JCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJaWYgKHRwLT5jb3BpZWRfc2VxID09IHRwLT5yY3Zfbnh0ICYmCisJCQkgICAgbGVuIC0gdGNwX2hlYWRlcl9sZW4gPD0gdHAtPnVjb3B5LmxlbikgeworI2lmZGVmIENPTkZJR19ORVRfRE1BCisJCQkJaWYgKHRjcF9kbWFfdHJ5X2Vhcmx5X2NvcHkoc2ssIHNrYiwgdGNwX2hlYWRlcl9sZW4pKSB7CisJCQkJCWNvcGllZF9lYXJseSA9IDE7CisJCQkJCWVhdGVuID0gMTsKKwkJCQl9CisjZW5kaWYKKwkJCQlpZiAodHAtPnVjb3B5LnRhc2sgPT0gY3VycmVudCAmJiBzb2NrX293bmVkX2J5X3VzZXIoc2spICYmICFjb3BpZWRfZWFybHkpIHsKKwkJCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCi0JCQkJaWYgKCF0Y3BfY29weV90b19pb3ZlYyhzaywgc2tiLCB0Y3BfaGVhZGVyX2xlbikpIHsKKwkJCQkJaWYgKCF0Y3BfY29weV90b19pb3ZlYyhzaywgc2tiLCB0Y3BfaGVhZGVyX2xlbikpCisJCQkJCQllYXRlbiA9IDE7CisJCQkJfQorCQkJCWlmIChlYXRlbikgewogCQkJCQkvKiBQcmVkaWN0ZWQgcGFja2V0IGlzIGluIHdpbmRvdyBieSBkZWZpbml0aW9uLgogCQkJCQkgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCA8PSByY3Zfbnh0LgogCQkJCQkgKiBIZW5jZSwgY2hlY2sgc2VxPD1yY3Zfd3VwIHJlZHVjZXMgdG86CkBAIC0zOTI2LDggKzM5ODUsOSBAQAogCQkJCQlfX3NrYl9wdWxsKHNrYiwgdGNwX2hlYWRlcl9sZW4pOwogCQkJCQl0cC0+cmN2X254dCA9IFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcTsKIAkJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQSFBISVRTVE9VU0VSKTsKLQkJCQkJZWF0ZW4gPSAxOwogCQkJCX0KKwkJCQlpZiAoY29waWVkX2Vhcmx5KQorCQkJCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCBza2ItPmxlbik7CiAJCQl9CiAJCQlpZiAoIWVhdGVuKSB7CiAJCQkJaWYgKHRjcF9jaGVja3N1bV9jb21wbGV0ZV91c2VyKHNrLCBza2IpKQpAQCAtMzk2OCw2ICs0MDI4LDExIEBACiAKIAkJCV9fdGNwX2Fja19zbmRfY2hlY2soc2ssIDApOwogbm9fYWNrOgorI2lmZGVmIENPTkZJR19ORVRfRE1BCisJCQlpZiAoY29waWVkX2Vhcmx5KQorCQkJCV9fc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19hc3luY193YWl0X3F1ZXVlLCBza2IpOworCQkJZWxzZQorI2VuZGlmCiAJCQlpZiAoZWF0ZW4pCiAJCQkJX19rZnJlZV9za2Ioc2tiKTsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDY3Mjk1MGUuLjI1ZWNjNmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogI2luY2x1ZGUgPG5ldC90aW1ld2FpdF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZG1hLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgpAQCAtMTA5MSw4ICsxMDkyLDE4IEBACiAJYmhfbG9ja19zb2NrKHNrKTsKIAlyZXQgPSAwOwogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewotCQlpZiAoIXRjcF9wcmVxdWV1ZShzaywgc2tiKSkKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwkJaWYgKCF0cC0+dWNvcHkuZG1hX2NoYW4gJiYgdHAtPnVjb3B5LnBpbm5lZF9saXN0KQorCQkJdHAtPnVjb3B5LmRtYV9jaGFuID0gZ2V0X3NvZnRuZXRfZG1hKCk7CisJCWlmICh0cC0+dWNvcHkuZG1hX2NoYW4pCiAJCQlyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpOworCQllbHNlCisjZW5kaWYKKwkJeworCQkJaWYgKCF0Y3BfcHJlcXVldWUoc2ssIHNrYikpCisJCQlyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpOworCQl9CiAJfSBlbHNlCiAJCXNrX2FkZF9iYWNrbG9nKHNrLCBza2IpOwogCWJoX3VubG9ja19zb2NrKHNrKTsKQEAgLTEyOTYsNiArMTMwNywxMSBAQAogCS8qIENsZWFucyB1cCBvdXIsIGhvcGVmdWxseSBlbXB0eSwgb3V0X29mX29yZGVyX3F1ZXVlLiAqLwogICAJX19za2JfcXVldWVfcHVyZ2UoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpOwogCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwkvKiBDbGVhbnMgdXAgb3VyIHNrX2FzeW5jX3dhaXRfcXVldWUgKi8KKyAgCV9fc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfYXN5bmNfd2FpdF9xdWV1ZSk7CisjZW5kaWYKKwogCS8qIENsZWFuIHByZXF1ZXVlLCBpdCBtdXN0IGJlIGVtcHR5IHJlYWxseSAqLwogCV9fc2tiX3F1ZXVlX3B1cmdlKCZ0cC0+dWNvcHkucHJlcXVldWUpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbHAuYyBiL25ldC9pcHY0L3RjcF9scC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTc3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC90Y3BfbHAuYwpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIFRDUCBMb3cgUHJpb3JpdHkgKFRDUC1MUCkKKyAqCisgKiBUQ1AgTG93IFByaW9yaXR5IGlzIGEgZGlzdHJpYnV0ZWQgYWxnb3JpdGhtIHdob3NlIGdvYWwgaXMgdG8gdXRpbGl6ZSBvbmx5CisgKiAgIHRoZSBleGNlc3MgbmV0d29yayBiYW5kd2lkdGggYXMgY29tcGFyZWQgdG8gdGhlIGBgZmFpciBzaGFyZWBgIG9mCisgKiAgIGJhbmR3aWR0aCBhcyB0YXJnZXRlZCBieSBUQ1AuIEF2YWlsYWJsZSBmcm9tOgorICogICAgIGh0dHA6Ly93d3cuZWNlLnJpY2UuZWR1L35ha3V6bWEvRG9jL2FrdXptYS9UQ1AtTFAucGRmCisgKgorICogT3JpZ2luYWwgQXV0aG9yOgorICogICBBbGVrc2FuZGFyIEt1em1hbm92aWMgPGFrdXptYUBub3J0aHdlc3Rlcm4uZWR1PgorICoKKyAqIFNlZSBodHRwOi8vd3d3LWVjZS5yaWNlLmVkdS9uZXR3b3Jrcy9UQ1AtTFAvIGZvciB0aGVpciBpbXBsZW1lbnRhdGlvbi4KKyAqIEFzIG9mIDIuNi4xMywgTGludXggc3VwcG9ydHMgcGx1Z2dhYmxlIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLgorICogRHVlIHRvIHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBBUEksIHdlIHRha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGZyb20KKyAqIHRoZSBvcmlnaW5hbCBUQ1AtTFAgaW1wbGVtZW50YXRpb246CisgKiAgIG8gV2UgdXNlIG5ld1Jlbm8gaW4gbW9zdCBjb3JlIENBIGhhbmRsaW5nLiBPbmx5IGFkZCBzb21lIGNoZWNraW5nCisgKiAgICAgd2l0aGluIGNvbmdfYXZvaWQuCisgKiAgIG8gRXJyb3IgY29ycmVjdGluZyBpbiByZW1vdGUgSFosIHRoZXJlZm9yZSByZW1vdGUgSFogd2lsbCBiZSBrZWVwZWQKKyAqICAgICBvbiBjaGVja2luZyBhbmQgdXBkYXRpbmcuCisgKiAgIG8gSGFuZGxpbmcgY2FsY3VsYXRpb24gb2YgT25lLVdheS1EZWxheSAoT1dEKSB3aXRoaW4gcnR0X3NhbXBsZSwgc2ljbmUKKyAqICAgICBPV0QgaGF2ZSBhIHNpbWlsYXIgbWVhbmluZyBhcyBSVFQuIEFsc28gY29ycmVjdCB0aGUgYnVnZ3kgZm9ybXVsYXIuCisgKiAgIG8gSGFuZGxlIHJlYWN0aW9uIGZvciBFYXJseSBDb25nZXN0aW9uIEluZGljYXRpb24gKEVDSSkgd2l0aGluCisgKiAgICAgcGt0c19hY2tlZCwgYXMgbWVudGlvbmVkIHdpdGhpbiBwc2V1ZG8gY29kZS4KKyAqICAgbyBPV0QgaXMgaGFuZGxlZCBpbiByZWxhdGl2ZSBmb3JtYXQsIHdoZXJlIGxvY2FsIHRpbWUgc3RhbXAgd2lsbCBpbgorICogICAgIHRjcF90aW1lX3N0YW1wIGZvcm1hdC4KKyAqCisgKiBQb3J0IGZyb20gMi40LjE5IHRvIDIuNi4xNiBhcyBtb2R1bGUgYnk6CisgKiAgIFdvbmcgSG9pIFNpbmcgRWRpc29uIDxoc3dvbmczaUBnbWFpbC5jb20+CisgKiAgIEh1bmcgSGluZyBMdW4gPGhsaHVuZzNpQGdtYWlsLmNvbT4KKyAqCisgKiBWZXJzaW9uOiAkSWQ6IHRjcF9scC5jLHYgMS4yMiAyMDA2LTA1LTAyIDE4OjE4OjE5IGhzd29uZzNpIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworLyogcmVzb2x1dGlvbiBvZiBvd2QgKi8KKyNkZWZpbmUgTFBfUkVTT0wgICAgICAgMTAwMAorCisvKioKKyAqIGVudW0gdGNwX2xwX3N0YXRlCisgKiBATFBfVkFMSURfUkhaOiBpcyByZW1vdGUgSFogdmFsaWQ/CisgKiBATFBfVkFMSURfT1dEOiBpcyBPV0QgdmFsaWQ/CisgKiBATFBfV0lUSElOX1RIUjogYXJlIHdlIHdpdGhpbiB0aHJlc2hvbGQ/CisgKiBATFBfV0lUSElOX0lORjogYXJlIHdlIHdpdGhpbiBpbmZlcmVuY2U/CisgKgorICogVENQLUxQJ3Mgc3RhdGUgZmxhZ3MuCisgKiBXZSBjcmVhdGUgdGhpcyBzZXQgb2Ygc3RhdGUgZmxhZyBtYWlubHkgZm9yIGRlYnVnZ2luZy4KKyAqLworZW51bSB0Y3BfbHBfc3RhdGUgeworCUxQX1ZBTElEX1JIWiA9ICgxIDw8IDApLAorCUxQX1ZBTElEX09XRCA9ICgxIDw8IDEpLAorCUxQX1dJVEhJTl9USFIgPSAoMSA8PCAzKSwKKwlMUF9XSVRISU5fSU5GID0gKDEgPDwgNCksCit9OworCisvKioKKyAqIHN0cnVjdCBscAorICogQGZsYWc6IFRDUC1MUCBzdGF0ZSBmbGFnCisgKiBAc293ZDogc21vb3RoZWQgT1dEIDw8IDMKKyAqIEBvd2RfbWluOiBtaW4gT1dECisgKiBAb3dkX21heDogbWF4IE9XRAorICogQG93ZF9tYXhfcnN2OiByZXNydmVkIG1heCBvd2QKKyAqIEByZW1vdGVfaHo6IGVzdGltYXRlZCByZW1vdGUgSFoKKyAqIEByZW1vdGVfcmVmX3RpbWU6IHJlbW90ZSByZWZlcmVuY2UgdGltZQorICogQGxvY2FsX3JlZl90aW1lOiBsb2NhbCByZWZlcmVuY2UgdGltZQorICogQGxhc3RfZHJvcDogdGltZSBmb3IgbGFzdCBhY3RpdmUgZHJvcAorICogQGluZmVyZW5jZTogY3VycmVudCBpbmZlcmVuY2UKKyAqCisgKiBUQ1AtTFAncyBwcml2YXRlIHN0cnVjdC4KKyAqIFdlIGdldCB0aGUgaWRlYSBmcm9tIG9yaWdpbmFsIFRDUC1MUCBpbXBsZW1lbnRhdGlvbiB3aGVyZSBvbmx5IGxlZnQgdGhvc2Ugd2UKKyAqIGZvdW5kIGFyZSByZWFsbHkgdXNlZnVsLgorICovCitzdHJ1Y3QgbHAgeworCXUzMiBmbGFnOworCXUzMiBzb3dkOworCXUzMiBvd2RfbWluOworCXUzMiBvd2RfbWF4OworCXUzMiBvd2RfbWF4X3JzdjsKKwl1MzIgcmVtb3RlX2h6OworCXUzMiByZW1vdGVfcmVmX3RpbWU7CisJdTMyIGxvY2FsX3JlZl90aW1lOworCXUzMiBsYXN0X2Ryb3A7CisJdTMyIGluZmVyZW5jZTsKK307CisKKy8qKgorICogdGNwX2xwX2luaXQKKyAqCisgKiBJbml0IGFsbCByZXF1aXJlZCB2YXJpYWJsZXMuCisgKiBDbG9uZSB0aGUgaGFuZGxpbmcgZnJvbSBWZWdhcyBtb2R1bGUgaW1wbGVtZW50YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHRjcF9scF9pbml0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgbHAgKmxwID0gaW5ldF9jc2tfY2Eoc2spOworCisJbHAtPmZsYWcgPSAwOworCWxwLT5zb3dkID0gMDsKKwlscC0+b3dkX21pbiA9IDB4ZmZmZmZmZmY7CisJbHAtPm93ZF9tYXggPSAwOworCWxwLT5vd2RfbWF4X3JzdiA9IDA7CisJbHAtPnJlbW90ZV9oeiA9IDA7CisJbHAtPnJlbW90ZV9yZWZfdGltZSA9IDA7CisJbHAtPmxvY2FsX3JlZl90aW1lID0gMDsKKwlscC0+bGFzdF9kcm9wID0gMDsKKwlscC0+aW5mZXJlbmNlID0gMDsKK30KKworLyoqCisgKiB0Y3BfbHBfY29uZ19hdm9pZAorICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIGNvbmdfYXZvaWQuCisgKiBXaWxsIG9ubHkgY2FsbCBuZXdSZW5vIENBIHdoZW4gYXdheSBmcm9tIGluZmVyZW5jZS4KKyAqIEZyb20gVENQLUxQJ3MgcGFwZXIsIHRoaXMgd2lsbCBiZSBoYW5kbGVkIGluIGFkZGl0aXZlIGluY3JlYXNlbWVudC4KKyAqLworc3RhdGljIHZvaWQgdGNwX2xwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgcnR0LCB1MzIgaW5fZmxpZ2h0LAorCQkJICAgICAgaW50IGZsYWcpCit7CisJc3RydWN0IGxwICpscCA9IGluZXRfY3NrX2NhKHNrKTsKKworCWlmICghKGxwLT5mbGFnICYgTFBfV0lUSElOX0lORikpCisJCXRjcF9yZW5vX2NvbmdfYXZvaWQoc2ssIGFjaywgcnR0LCBpbl9mbGlnaHQsIGZsYWcpOworfQorCisvKioKKyAqIHRjcF9scF9yZW1vdGVfaHpfZXN0aW1hdG9yCisgKgorICogRXN0aW1hdGUgcmVtb3RlIEhaLgorICogV2Uga2VlcCBvbiB1cGRhdGluZyB0aGUgZXN0aW1hdGVkIHZhbHVlLCB3aGVyZSBvcmlnaW5hbCBUQ1AtTFAKKyAqIGltcGxlbWVudGF0aW9uIG9ubHkgZ3Vlc3QgaXQgZm9yIG9uY2UgYW5kIHVzZSBmb3JldmVyLgorICovCitzdGF0aWMgdTMyIHRjcF9scF9yZW1vdGVfaHpfZXN0aW1hdG9yKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlzdHJ1Y3QgbHAgKmxwID0gaW5ldF9jc2tfY2Eoc2spOworCXM2NCByaHogPSBscC0+cmVtb3RlX2h6IDw8IDY7CS8qIHJlbW90ZSBIWiA8PCA2ICovCisJczY0IG0gPSAwOworCisJLyogbm90IHlldCByZWNvcmQgcmVmZXJlbmNlIHRpbWUKKwkgKiBnbyBhd2F5ISEgcmVjb3JkIGl0IGJlZm9yZSBjb21lIGJhY2shISAqLworCWlmIChscC0+cmVtb3RlX3JlZl90aW1lID09IDAgfHwgbHAtPmxvY2FsX3JlZl90aW1lID09IDApCisJCWdvdG8gb3V0OworCisJLyogd2UgY2FuJ3QgY2FsYyByZW1vdGUgSFogd2l0aCBubyBkaWZmZXJlbnQhISAqLworCWlmICh0cC0+cnhfb3B0LnJjdl90c3ZhbCA9PSBscC0+cmVtb3RlX3JlZl90aW1lCisJICAgIHx8IHRwLT5yeF9vcHQucmN2X3RzZWNyID09IGxwLT5sb2NhbF9yZWZfdGltZSkKKwkJZ290byBvdXQ7CisKKwltID0gSFogKiAodHAtPnJ4X29wdC5yY3ZfdHN2YWwgLQorCQkgIGxwLT5yZW1vdGVfcmVmX3RpbWUpIC8gKHRwLT5yeF9vcHQucmN2X3RzZWNyIC0KKwkJCQkJICBscC0+bG9jYWxfcmVmX3RpbWUpOworCWlmIChtIDwgMCkKKwkJbSA9IC1tOworCisJaWYgKHJoeiAhPSAwKSB7CisJCW0gLT0gcmh6ID4+IDY7CS8qIG0gaXMgbm93IGVycm9yIGluIHJlbW90ZSBIWiBlc3QgKi8KKwkJcmh6ICs9IG07CS8qIDYzLzY0IG9sZCArIDEvNjQgbmV3ICovCisJfSBlbHNlCisJCXJoeiA9IG0gPDwgNjsKKworCS8qIHJlY29yZCB0aW1lIGZvciBzdWNjZXNzZnVsIHJlbW90ZSBIWiBjYWxjICovCisJbHAtPmZsYWcgfD0gTFBfVkFMSURfUkhaOworCisgb3V0OgorCS8qIHJlY29yZCByZWZlcmVuY2UgdGltZSBzdGFtcCAqLworCWxwLT5yZW1vdGVfcmVmX3RpbWUgPSB0cC0+cnhfb3B0LnJjdl90c3ZhbDsKKwlscC0+bG9jYWxfcmVmX3RpbWUgPSB0cC0+cnhfb3B0LnJjdl90c2VjcjsKKworCXJldHVybiByaHogPj4gNjsKK30KKworLyoqCisgKiB0Y3BfbHBfb3dkX2NhbGN1bGF0b3IKKyAqCisgKiBDYWxjdWxhdGUgb25lIHdheSBkZWxheSAoaW4gcmVsYXRpdmUgZm9ybWF0KS4KKyAqIE9yaWdpbmFsIGltcGxlbWVudCBPV0QgYXMgbWludXMgb2YgcmVtb3RlIHRpbWUgZGlmZmVyZW5jZSB0byBsb2NhbCB0aW1lCisgKiBkaWZmZXJlbmNlIGRpcmVjdGx5LiBBcyB0aGlzIHRpbWUgZGlmZmVyZW5jZSBqdXN0IHNpbXBseSBlcXVhbCB0byBSVFQsIHdoZW4KKyAqIHRoZSBuZXR3b3JrIHN0YXR1cyBpcyBzdGFibGUsIHJlbW90ZSBSVFQgd2lsbCBlcXVhbCB0byBsb2NhbCBSVFQsIGFuZCByZXN1bHQKKyAqIE9XRCBpbnRvIHplcm8uCisgKiBJdCBzZWVtcyB0byBiZSBhIGJ1ZyBhbmQgc28gd2UgZml4ZWQgaXQuCisgKi8KK3N0YXRpYyB1MzIgdGNwX2xwX293ZF9jYWxjdWxhdG9yKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlzdHJ1Y3QgbHAgKmxwID0gaW5ldF9jc2tfY2Eoc2spOworCXM2NCBvd2QgPSAwOworCisJbHAtPnJlbW90ZV9oeiA9IHRjcF9scF9yZW1vdGVfaHpfZXN0aW1hdG9yKHNrKTsKKworCWlmIChscC0+ZmxhZyAmIExQX1ZBTElEX1JIWikgeworCQlvd2QgPQorCQkgICAgdHAtPnJ4X29wdC5yY3ZfdHN2YWwgKiAoTFBfUkVTT0wgLyBscC0+cmVtb3RlX2h6KSAtCisJCSAgICB0cC0+cnhfb3B0LnJjdl90c2VjciAqIChMUF9SRVNPTCAvIEhaKTsKKwkJaWYgKG93ZCA8IDApCisJCQlvd2QgPSAtb3dkOworCX0KKworCWlmIChvd2QgPiAwKQorCQlscC0+ZmxhZyB8PSBMUF9WQUxJRF9PV0Q7CisJZWxzZQorCQlscC0+ZmxhZyAmPSB+TFBfVkFMSURfT1dEOworCisJcmV0dXJuIG93ZDsKK30KKworLyoqCisgKiB0Y3BfbHBfcnR0X3NhbXBsZQorICoKKyAqIEltcGxlbWVudGF0aW9uIG9yIHJ0dF9zYW1wbGUuCisgKiBXaWxsIHRha2UgdGhlIGZvbGxvd2luZyBhY3Rpb24sCisgKiAgIDEuIGNhbGMgT1dELAorICogICAyLiByZWNvcmQgdGhlIG1pbi9tYXggT1dELAorICogICAzLiBjYWxjIHNtb290aGVkIE9XRCAoU09XRCkuCisgKiBNb3N0IGlkZWFzIGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgVENQLUxQIGltcGxlbWVudGF0aW9uLgorICovCitzdGF0aWMgdm9pZCB0Y3BfbHBfcnR0X3NhbXBsZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiB1c3J0dCkKK3sKKwlzdHJ1Y3QgbHAgKmxwID0gaW5ldF9jc2tfY2Eoc2spOworCXM2NCBtb3dkID0gdGNwX2xwX293ZF9jYWxjdWxhdG9yKHNrKTsKKworCS8qIHNvcnJ5IHRoYXQgd2UgZG9uJ3QgaGF2ZSB2YWxpZCBkYXRhICovCisJaWYgKCEobHAtPmZsYWcgJiBMUF9WQUxJRF9SSFopIHx8ICEobHAtPmZsYWcgJiBMUF9WQUxJRF9PV0QpKQorCQlyZXR1cm47CisKKwkvKiByZWNvcmQgdGhlIG5leHQgbWluIG93ZCAqLworCWlmIChtb3dkIDwgbHAtPm93ZF9taW4pCisJCWxwLT5vd2RfbWluID0gbW93ZDsKKworCS8qIGFsd2F5cyBmb3JnZXQgdGhlIG1heCBvZiB0aGUgbWF4CisJICogd2UganVzdCBzZXQgb3dkX21heCBhcyBvbmUgYmVsb3cgaXQgKi8KKwlpZiAobW93ZCA+IGxwLT5vd2RfbWF4KSB7CisJCWlmIChtb3dkID4gbHAtPm93ZF9tYXhfcnN2KSB7CisJCQlpZiAobHAtPm93ZF9tYXhfcnN2ID09IDApCisJCQkJbHAtPm93ZF9tYXggPSBtb3dkOworCQkJZWxzZQorCQkJCWxwLT5vd2RfbWF4ID0gbHAtPm93ZF9tYXhfcnN2OworCQkJbHAtPm93ZF9tYXhfcnN2ID0gbW93ZDsKKwkJfSBlbHNlCisJCQlscC0+b3dkX21heCA9IG1vd2Q7CisJfQorCisJLyogY2FsYyBmb3Igc21vb3RoZWQgb3dkICovCisJaWYgKGxwLT5zb3dkICE9IDApIHsKKwkJbW93ZCAtPSBscC0+c293ZCA+PiAzOwkvKiBtIGlzIG5vdyBlcnJvciBpbiBvd2QgZXN0ICovCisJCWxwLT5zb3dkICs9IG1vd2Q7CS8qIG93ZCA9IDcvOCBvd2QgKyAxLzggbmV3ICovCisJfSBlbHNlCisJCWxwLT5zb3dkID0gbW93ZCA8PCAzOwkvKiB0YWtlIHRoZSBtZWFzdXJlZCB0aW1lIGJlIG93ZCAqLworfQorCisvKioKKyAqIHRjcF9scF9wa3RzX2Fja2VkCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgcGt0c19hY2tlZC4KKyAqIERlYWwgd2l0aCBhY3RpdmUgZHJvcCB1bmRlciBFYXJseSBDb25nZXN0aW9uIEluZGljYXRpb24uCisgKiBPbmx5IGRyb3AgdG8gaGFsZiBhbmQgMSB3aWxsIGJlIGhhbmRsZSwgYmVjYXVzZSB3ZSBob3BlIHRvIHVzZSBiYWNrCisgKiBuZXdSZW5vIGluIGluY3JlYXNlIGNhc2UuCisgKiBXZSB3b3JrIGl0IG91dCBieSBmb2xsb3dpbmcgdGhlIGlkZWEgZnJvbSBUQ1AtTFAncyBwYXBlciBkaXJlY3RseQorICovCitzdGF0aWMgdm9pZCB0Y3BfbHBfcGt0c19hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBudW1fYWNrZWQpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IGxwICpscCA9IGluZXRfY3NrX2NhKHNrKTsKKworCS8qIGNhbGMgaW5mZXJlbmNlICovCisJaWYgKHRjcF90aW1lX3N0YW1wID4gdHAtPnJ4X29wdC5yY3ZfdHNlY3IpCisJCWxwLT5pbmZlcmVuY2UgPSAzICogKHRjcF90aW1lX3N0YW1wIC0gdHAtPnJ4X29wdC5yY3ZfdHNlY3IpOworCisJLyogdGVzdCBpZiB3aXRoaW4gaW5mZXJlbmNlICovCisJaWYgKGxwLT5sYXN0X2Ryb3AgJiYgKHRjcF90aW1lX3N0YW1wIC0gbHAtPmxhc3RfZHJvcCA8IGxwLT5pbmZlcmVuY2UpKQorCQlscC0+ZmxhZyB8PSBMUF9XSVRISU5fSU5GOworCWVsc2UKKwkJbHAtPmZsYWcgJj0gfkxQX1dJVEhJTl9JTkY7CisKKwkvKiB0ZXN0IGlmIHdpdGhpbiB0aHJlc2hvbGQgKi8KKwlpZiAobHAtPnNvd2QgPj4gMyA8CisJICAgIGxwLT5vd2RfbWluICsgMTUgKiAobHAtPm93ZF9tYXggLSBscC0+b3dkX21pbikgLyAxMDApCisJCWxwLT5mbGFnIHw9IExQX1dJVEhJTl9USFI7CisJZWxzZQorCQlscC0+ZmxhZyAmPSB+TFBfV0lUSElOX1RIUjsKKworCXByX2RlYnVnKCJUQ1AtTFA6ICUwNW98JTV1fCU1dXwlMTV1fCUxNXV8JTE1dVxuIiwgbHAtPmZsYWcsCisJCSB0cC0+c25kX2N3bmQsIGxwLT5yZW1vdGVfaHosIGxwLT5vd2RfbWluLCBscC0+b3dkX21heCwKKwkJIGxwLT5zb3dkID4+IDMpOworCisJaWYgKGxwLT5mbGFnICYgTFBfV0lUSElOX1RIUikKKwkJcmV0dXJuOworCisJLyogRklYTUU6IHRyeSB0byByZXNldCBvd2RfbWluIGFuZCBvd2RfbWF4IGhlcmUKKwkgKiBzbyBkZWNyZWFzZSB0aGUgY2hhbmNlIHRoZSBtaW4vbWF4IGlzIG5vIGxvbmdlciBzdWl0YWJsZQorCSAqIGFuZCB3aWxsIHVzdWFsbHkgd2l0aGluIHRocmVzaG9sZCB3aGVuIHdoaXRoaW4gaW5mZXJlbmNlICovCisJbHAtPm93ZF9taW4gPSBscC0+c293ZCA+PiAzOworCWxwLT5vd2RfbWF4ID0gbHAtPnNvd2QgPj4gMjsKKwlscC0+b3dkX21heF9yc3YgPSBscC0+c293ZCA+PiAyOworCisJLyogaGFwcGVuZWQgd2l0aGluIGluZmVyZW5jZQorCSAqIGRyb3Agc25kX2N3bmQgaW50byAxICovCisJaWYgKGxwLT5mbGFnICYgTFBfV0lUSElOX0lORikKKwkJdHAtPnNuZF9jd25kID0gMVU7CisKKwkvKiBoYXBwZW5lZCBhZnRlciBpbmZlcmVuY2UKKwkgKiBjdXQgc25kX2N3bmQgaW50byBoYWxmICovCisJZWxzZQorCQl0cC0+c25kX2N3bmQgPSBtYXgodHAtPnNuZF9jd25kID4+IDFVLCAxVSk7CisKKwkvKiByZWNvcmQgdGhpcyBkcm9wIHRpbWUgKi8KKwlscC0+bGFzdF9kcm9wID0gdGNwX3RpbWVfc3RhbXA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9scCA9IHsKKwkuaW5pdCA9IHRjcF9scF9pbml0LAorCS5zc3RocmVzaCA9IHRjcF9yZW5vX3NzdGhyZXNoLAorCS5jb25nX2F2b2lkID0gdGNwX2xwX2NvbmdfYXZvaWQsCisJLm1pbl9jd25kID0gdGNwX3Jlbm9fbWluX2N3bmQsCisJLnJ0dF9zYW1wbGUgPSB0Y3BfbHBfcnR0X3NhbXBsZSwKKwkucGt0c19hY2tlZCA9IHRjcF9scF9wa3RzX2Fja2VkLAorCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibHAiCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0Y3BfbHBfcmVnaXN0ZXIodm9pZCkKK3sKKwlCVUdfT04oc2l6ZW9mKHN0cnVjdCBscCkgPiBJQ1NLX0NBX1BSSVZfU0laRSk7CisJcmV0dXJuIHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woJnRjcF9scCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0Y3BfbHBfdW5yZWdpc3Rlcih2b2lkKQoreworCXRjcF91bnJlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmdGNwX2xwKTsKK30KKworbW9kdWxlX2luaXQodGNwX2xwX3JlZ2lzdGVyKTsKK21vZHVsZV9leGl0KHRjcF9scF91bnJlZ2lzdGVyKTsKKworTU9EVUxFX0FVVEhPUigiV29uZyBIb2kgU2luZyBFZGlzb24sIEh1bmcgSGluZyBMdW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVENQIExvdyBQcmlvcml0eSIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGYzM2M5ZGQuLjA3YmI1YTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTU5LDYgKzU5LDkgQEAKIGludCBzeXNjdGxfdGNwX210dV9wcm9iaW5nID0gMDsKIGludCBzeXNjdGxfdGNwX2Jhc2VfbXNzID0gNTEyOwogCisvKiBCeSBkZWZhdWx0LCBSRkMyODYxIGJlaGF2aW9yLiAgKi8KK2ludCBzeXNjdGxfdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSA9IDE7CisKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zZW5kX2hlYWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTM4LDcgKzE0MSw4IEBACiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCWNvbnN0IHUzMiBub3cgPSB0Y3BfdGltZV9zdGFtcDsKIAotCWlmICghdHAtPnBhY2tldHNfb3V0ICYmIChzMzIpKG5vdyAtIHRwLT5sc25kdGltZSkgPiBpY3NrLT5pY3NrX3J0bykKKwlpZiAoc3lzY3RsX3RjcF9zbG93X3N0YXJ0X2FmdGVyX2lkbGUgJiYKKwkgICAgKCF0cC0+cGFja2V0c19vdXQgJiYgKHMzMikobm93IC0gdHAtPmxzbmR0aW1lKSA+IGljc2stPmljc2tfcnRvKSkKIAkJdGNwX2N3bmRfcmVzdGFydChzaywgX19za19kc3RfZ2V0KHNrKSk7CiAKIAl0cC0+bHNuZHRpbWUgPSBub3c7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfcHJvYmUuYyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDUxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIHRjcHByb2JlIC0gT2JzZXJ2ZSB0aGUgVENQIGZsb3cgd2l0aCBrcHJvYmVzLgorICoKKyAqIFRoZSBpZGVhIGZvciB0aGlzIGNhbWUgZnJvbSBXZXJuZXIgQWxtZXNiZXJnZXIncyB1bWxzaW0KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAb3NkbC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUQ1AgY3duZCBzbm9vcGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgcG9ydCA9IDA7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0IHRvIG1hdGNoICgwPWFsbCkiKTsKK21vZHVsZV9wYXJhbShwb3J0LCBpbnQsIDApOworCitzdGF0aWMgaW50IGJ1ZnNpemUgPSA2NCoxMDI0OworTU9EVUxFX1BBUk1fREVTQyhidWZzaXplLCAiTG9nIGJ1ZmZlciBzaXplIChkZWZhdWx0IDY0aykiKTsKK21vZHVsZV9wYXJhbShidWZzaXplLCBpbnQsIDApOworCitzdGF0aWMgY29uc3QgY2hhciBwcm9jbmFtZVtdID0gInRjcHByb2JlIjsKKworc3RydWN0IHsKKwlzdHJ1Y3Qga2ZpZm8gICpmaWZvOworCXNwaW5sb2NrX3QgICAgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCB0aW1ldmFsIHRzdGFydDsKK30gdGNwdzsKKworc3RhdGljIHZvaWQgcHJpbnRsKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgbGVuOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwljaGFyIHRidWZbMjU2XTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCisJbm93LnR2X3NlYyAtPSB0Y3B3LnRzdGFydC50dl9zZWM7CisJbm93LnR2X3VzZWMgLT0gdGNwdy50c3RhcnQudHZfdXNlYzsKKwlpZiAobm93LnR2X3VzZWMgPCAwKSB7CisJCS0tbm93LnR2X3NlYzsKKwkJbm93LnR2X3VzZWMgKz0gMTAwMDAwMDsKKwl9CisKKwlsZW4gPSBzcHJpbnRmKHRidWYsICIlbHUuJTA2bHUgIiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpIG5vdy50dl9zZWMsCisJCSAgICAgICh1bnNpZ25lZCBsb25nKSBub3cudHZfdXNlYyk7CisJbGVuICs9IHZzY25wcmludGYodGJ1ZitsZW4sIHNpemVvZih0YnVmKS1sZW4sIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJa2ZpZm9fcHV0KHRjcHcuZmlmbywgdGJ1ZiwgbGVuKTsKKwl3YWtlX3VwKCZ0Y3B3LndhaXQpOworfQorCitzdGF0aWMgaW50IGp0Y3Bfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKKwkJCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCit7CisJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCisJaWYgKHBvcnQgPT0gMCB8fCBudG9ocyhpbmV0LT5kcG9ydCkgPT0gcG9ydCB8fAorCSAgICBudG9ocyhpbmV0LT5zcG9ydCkgPT0gcG9ydCkgeworCQlwcmludGwoIiVkLiVkLiVkLiVkOiV1ICVkLiVkLiVkLiVkOiV1ICVkICUjeCAlI3ggJXUgJXUgJXVcbiIsCisJCSAgICAgICBOSVBRVUFEKGluZXQtPnNhZGRyKSwgbnRvaHMoaW5ldC0+c3BvcnQpLAorCQkgICAgICAgTklQUVVBRChpbmV0LT5kYWRkciksIG50b2hzKGluZXQtPmRwb3J0KSwKKwkJICAgICAgIHNpemUsIHRwLT5zbmRfbnh0LCB0cC0+c25kX3VuYSwKKwkJICAgICAgIHRwLT5zbmRfY3duZCwgdGNwX2N1cnJlbnRfc3N0aHJlc2goc2spLAorCQkgICAgICAgdHAtPnNuZF93bmQpOworCX0KKworCWpwcm9iZV9yZXR1cm4oKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBqcHJvYmUgdGNwX3NlbmRfcHJvYmUgPSB7CisJLmtwID0geyAuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgJnRjcF9zZW5kbXNnLCB9LAorCS5lbnRyeSA9IChrcHJvYmVfb3Bjb2RlX3QgKikgJmp0Y3Bfc2VuZG1zZywKK307CisKKworc3RhdGljIGludCB0Y3Bwcm9iZV9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCit7CisJa2ZpZm9fcmVzZXQodGNwdy5maWZvKTsKKwlkb19nZXR0aW1lb2ZkYXkoJnRjcHcudHN0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdGNwcHJvYmVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCWludCBlcnJvciA9IDAsIGNudDsKKwl1bnNpZ25lZCBjaGFyICp0YnVmOworCisJaWYgKCFidWYgfHwgbGVuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJdGJ1ZiA9IHZtYWxsb2MobGVuKTsKKwlpZiAoIXRidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodGNwdy53YWl0LAorCQkJCQkgX19rZmlmb19sZW4odGNwdy5maWZvKSAhPSAwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWNudCA9IGtmaWZvX2dldCh0Y3B3LmZpZm8sIHRidWYsIGxlbik7CisJZXJyb3IgPSBjb3B5X3RvX3VzZXIoYnVmLCB0YnVmLCBjbnQpOworCisJdmZyZWUodGJ1Zik7CisKKwlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IGNudDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGNwcHJvYmVfZm9wcyA9IHsKKwkub3duZXIJID0gVEhJU19NT0RVTEUsCisJLm9wZW4JID0gdGNwcHJvYmVfb3BlbiwKKwkucmVhZCAgICA9IHRjcHByb2JlX3JlYWQsCit9OworCitzdGF0aWMgX19pbml0IGludCB0Y3Bwcm9iZV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0Y3B3LndhaXQpOworCXNwaW5fbG9ja19pbml0KCZ0Y3B3LmxvY2spOworCXRjcHcuZmlmbyA9IGtmaWZvX2FsbG9jKGJ1ZnNpemUsIEdGUF9LRVJORUwsICZ0Y3B3LmxvY2spOworCisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShwcm9jbmFtZSwgU19JUlVTUiwgJnRjcHByb2JlX2ZvcHMpKQorCQlnb3RvIGVycjA7CisKKwlyZXQgPSByZWdpc3Rlcl9qcHJvYmUoJnRjcF9zZW5kX3Byb2JlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisKKwlwcl9pbmZvKCJUQ1Agd2F0Y2ggcmVnaXN0ZXJlZCAocG9ydD0lZClcbiIsIHBvcnQpOworCXJldHVybiAwOworIGVycjE6CisJcHJvY19uZXRfcmVtb3ZlKHByb2NuYW1lKTsKKyBlcnIwOgorCWtmaWZvX2ZyZWUodGNwdy5maWZvKTsKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQodGNwcHJvYmVfaW5pdCk7CisKK3N0YXRpYyBfX2V4aXQgdm9pZCB0Y3Bwcm9iZV9leGl0KHZvaWQpCit7CisJa2ZpZm9fZnJlZSh0Y3B3LmZpZm8pOworCXByb2NfbmV0X3JlbW92ZShwcm9jbmFtZSk7CisJdW5yZWdpc3Rlcl9qcHJvYmUoJnRjcF9zZW5kX3Byb2JlKTsKKworfQorbW9kdWxlX2V4aXQodGNwcHJvYmVfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVuby5jIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWI0MmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIFRDUCBWZW5vIGNvbmdlc3Rpb24gY29udHJvbAorICoKKyAqIFRoaXMgaXMgYmFzZWQgb24gdGhlIGNvbmdlc3Rpb24gZGV0ZWN0aW9uL2F2b2lkYW5jZSBzY2hlbWUgZGVzY3JpYmVkIGluCisgKiAgICBDLiBQLiBGdSwgUy4gQy4gTGlldy4KKyAqICAgICJUQ1AgVmVubzogVENQIEVuaGFuY2VtZW50IGZvciBUcmFuc21pc3Npb24gb3ZlciBXaXJlbGVzcyBBY2Nlc3MgTmV0d29ya3MuIgorICogICAgSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb24sCisgKiAgICBGZWIuIDIwMDMuCisgKiAJU2VlIGh0dHA6Ly93d3cubnR1LmVkdS5zZy9ob21lNS9aSE9VMDAyMi9wYXBlcnMvQ1BGdTAzYS5wZGYKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2RpYWcuaD4KKworI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworLyogRGVmYXVsdCB2YWx1ZXMgb2YgdGhlIFZlbm8gdmFyaWFibGVzLCBpbiBmaXhlZC1wb2ludCByZXByZXNlbnRhdGlvbgorICogd2l0aCBWX1BBUkFNX1NISUZUIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBiaW5hcnkgcG9pbnQuCisgKi8KKyNkZWZpbmUgVl9QQVJBTV9TSElGVCAxCitzdGF0aWMgY29uc3QgaW50IGJldGEgPSAzIDw8IFZfUEFSQU1fU0hJRlQ7CisKKy8qIFZlbm8gdmFyaWFibGVzICovCitzdHJ1Y3QgdmVubyB7CisJdTggZG9pbmdfdmVub19ub3c7CS8qIGlmIHRydWUsIGRvIHZlbm8gZm9yIHRoaXMgcnR0ICovCisJdTE2IGNudHJ0dDsJCS8qICMgb2YgcnR0cyBtZWFzdXJlZCB3aXRoaW4gbGFzdCBydHQgKi8KKwl1MzIgbWlucnR0OwkJLyogbWluIG9mIHJ0dHMgbWVhc3VyZWQgd2l0aGluIGxhc3QgcnR0IChpbiB1c2VjKSAqLworCXUzMiBiYXNlcnR0OwkJLyogdGhlIG1pbiBvZiBhbGwgVmVubyBydHQgbWVhc3VyZW1lbnRzIHNlZW4gKGluIHVzZWMpICovCisJdTMyIGluYzsJCS8qIGRlY2lkZSB3aGV0aGVyIHRvIGluY3JlYXNlIGN3bmQgKi8KKwl1MzIgZGlmZjsJCS8qIGNhbGN1bGF0ZSB0aGUgZGlmZiByYXRlICovCit9OworCisvKiBUaGVyZSBhcmUgc2V2ZXJhbCBzaXR1YXRpb25zIHdoZW4gd2UgbXVzdCAicmUtc3RhcnQiIFZlbm86CisgKgorICogIG8gd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKKyAqICBvIGFmdGVyIGFuIFJUTworICogIG8gYWZ0ZXIgZmFzdCByZWNvdmVyeQorICogIG8gd2hlbiB3ZSBzZW5kIGEgcGFja2V0IGFuZCB0aGVyZSBpcyBubyBvdXRzdGFuZGluZworICogICAgdW5hY2tub3dsZWRnZWQgZGF0YSAocmVzdGFydGluZyBhbiBpZGxlIGNvbm5lY3Rpb24pCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdmVub19lbmFibGUoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB2ZW5vICp2ZW5vID0gaW5ldF9jc2tfY2Eoc2spOworCisJLyogdHVybiBvbiBWZW5vICovCisJdmVuby0+ZG9pbmdfdmVub19ub3cgPSAxOworCisJdmVuby0+bWlucnR0ID0gMHg3ZmZmZmZmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZlbm9fZGlzYWJsZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHZlbm8gKnZlbm8gPSBpbmV0X2Nza19jYShzayk7CisKKwkvKiB0dXJuIG9mZiBWZW5vICovCisJdmVuby0+ZG9pbmdfdmVub19ub3cgPSAwOworfQorCitzdGF0aWMgdm9pZCB0Y3BfdmVub19pbml0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgdmVubyAqdmVubyA9IGluZXRfY3NrX2NhKHNrKTsKKworCXZlbm8tPmJhc2VydHQgPSAweDdmZmZmZmZmOworCXZlbm8tPmluYyA9IDE7CisJdmVub19lbmFibGUoc2spOworfQorCisvKiBEbyBydHQgc2FtcGxpbmcgbmVlZGVkIGZvciBWZW5vLiAqLworc3RhdGljIHZvaWQgdGNwX3Zlbm9fcnR0X2NhbGMoc3RydWN0IHNvY2sgKnNrLCB1MzIgdXNydHQpCit7CisJc3RydWN0IHZlbm8gKnZlbm8gPSBpbmV0X2Nza19jYShzayk7CisJdTMyIHZydHQgPSB1c3J0dCArIDE7CS8qIE5ldmVyIGFsbG93IHplcm8gcnR0IG9yIGJhc2VydHQgKi8KKworCS8qIEZpbHRlciB0byBmaW5kIHByb3BhZ2F0aW9uIGRlbGF5OiAqLworCWlmICh2cnR0IDwgdmVuby0+YmFzZXJ0dCkKKwkJdmVuby0+YmFzZXJ0dCA9IHZydHQ7CisKKwkvKiBGaW5kIHRoZSBtaW4gcnR0IGR1cmluZyB0aGUgbGFzdCBydHQgdG8gZmluZAorCSAqIHRoZSBjdXJyZW50IHByb3AuIGRlbGF5ICsgcXVldWluZyBkZWxheToKKwkgKi8KKwl2ZW5vLT5taW5ydHQgPSBtaW4odmVuby0+bWlucnR0LCB2cnR0KTsKKwl2ZW5vLT5jbnRydHQrKzsKK30KKworc3RhdGljIHZvaWQgdGNwX3Zlbm9fc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBjYV9zdGF0ZSkKK3sKKwlpZiAoY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pCisJCXZlbm9fZW5hYmxlKHNrKTsKKwllbHNlCisJCXZlbm9fZGlzYWJsZShzayk7Cit9CisKKy8qCisgKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBpZGxlIGFuZCB3ZSBhcmUgcmVzdGFydGluZywKKyAqIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBkbyBhbnkgVmVubyBjYWxjdWxhdGlvbnMKKyAqIHVudGlsIHdlIGdldCBmcmVzaCBydHQgc2FtcGxlcy4gIFNvIHdoZW4gd2UKKyAqIHJlc3RhcnQsIHdlIHJlc2V0IG91ciBWZW5vIHN0YXRlIHRvIGEgY2xlYW4KKyAqIHN0YXRlLiBBZnRlciB3ZSBnZXQgYWNrcyBmb3IgdGhpcyBmbGlnaHQgb2YKKyAqIHBhY2tldHMsIF90aGVuXyB3ZSBjYW4gbWFrZSBWZW5vIGNhbGN1bGF0aW9ucworICogYWdhaW4uCisgKi8KK3N0YXRpYyB2b2lkIHRjcF92ZW5vX2N3bmRfZXZlbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldmVudCkKK3sKKwlpZiAoZXZlbnQgPT0gQ0FfRVZFTlRfQ1dORF9SRVNUQVJUIHx8IGV2ZW50ID09IENBX0VWRU5UX1RYX1NUQVJUKQorCQl0Y3BfdmVub19pbml0KHNrKTsKK30KKworc3RhdGljIHZvaWQgdGNwX3Zlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssCisJCQkJdTMyIHNlcV9ydHQsIHUzMiBpbl9mbGlnaHQsIGludCBmbGFnKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCB2ZW5vICp2ZW5vID0gaW5ldF9jc2tfY2Eoc2spOworCisJaWYgKCF2ZW5vLT5kb2luZ192ZW5vX25vdykKKwkJcmV0dXJuIHRjcF9yZW5vX2NvbmdfYXZvaWQoc2ssIGFjaywgc2VxX3J0dCwgaW5fZmxpZ2h0LCBmbGFnKTsKKworCS8qIGxpbWl0ZWQgYnkgYXBwbGljYXRpb25zICovCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQorCQlyZXR1cm47CisKKwkvKiBXZSBkbyB0aGUgVmVubyBjYWxjdWxhdGlvbnMgb25seSBpZiB3ZSBnb3QgZW5vdWdoIHJ0dCBzYW1wbGVzICovCisJaWYgKHZlbm8tPmNudHJ0dCA8PSAyKSB7CisJCS8qIFdlIGRvbid0IGhhdmUgZW5vdWdoIHJ0dCBzYW1wbGVzIHRvIGRvIHRoZSBWZW5vCisJCSAqIGNhbGN1bGF0aW9uLCBzbyB3ZSdsbCBiZWhhdmUgbGlrZSBSZW5vLgorCQkgKi8KKwkJdGNwX3Jlbm9fY29uZ19hdm9pZChzaywgYWNrLCBzZXFfcnR0LCBpbl9mbGlnaHQsIGZsYWcpOworCX0gZWxzZSB7CisJCXUzMiBydHQsIHRhcmdldF9jd25kOworCisJCS8qIFdlIGhhdmUgZW5vdWdoIHJ0dCBzYW1wbGVzLCBzbywgdXNpbmcgdGhlIFZlbm8KKwkJICogYWxnb3JpdGhtLCB3ZSBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoZSBuZXR3b3JrLgorCQkgKi8KKworCQlydHQgPSB2ZW5vLT5taW5ydHQ7CisKKwkJdGFyZ2V0X2N3bmQgPSAoKHRwLT5zbmRfY3duZCAqIHZlbm8tPmJhc2VydHQpCisJCQkgICAgICAgPDwgVl9QQVJBTV9TSElGVCkgLyBydHQ7CisKKwkJdmVuby0+ZGlmZiA9ICh0cC0+c25kX2N3bmQgPDwgVl9QQVJBTV9TSElGVCkgLSB0YXJnZXRfY3duZDsKKworCQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKKwkJCS8qIFNsb3cgc3RhcnQuICAqLworCQkJdGNwX3Nsb3dfc3RhcnQodHApOworCQl9IGVsc2UgeworCQkJLyogQ29uZ2VzdGlvbiBhdm9pZGFuY2UuICovCisJCQlpZiAodmVuby0+ZGlmZiA8IGJldGEpIHsKKwkJCQkvKiBJbiB0aGUgIm5vbi1jb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAorCQkJCSAqICBldmVyeSBydHQuCisJCQkJICovCisJCQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7CisJCQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJCQl0cC0+c25kX2N3bmQrKzsKKwkJCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7CisJCQkJfSBlbHNlCisJCQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJCX0gZWxzZSB7CisJCQkJLyogSW4gdGhlICJjb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAorCQkJCSAqIGV2ZXJ5IG90aGVyIHJ0dC4KKwkJCQkgKi8KKwkJCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKKwkJCQkJaWYgKHZlbm8tPmluYworCQkJCQkgICAgJiYgdHAtPnNuZF9jd25kIDwKKwkJCQkJICAgIHRwLT5zbmRfY3duZF9jbGFtcCkgeworCQkJCQkJdHAtPnNuZF9jd25kKys7CisJCQkJCQl2ZW5vLT5pbmMgPSAwOworCQkJCQl9IGVsc2UKKwkJCQkJCXZlbm8tPmluYyA9IDE7CisJCQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOworCQkJCX0gZWxzZQorCQkJCQl0cC0+c25kX2N3bmRfY250Kys7CisJCQl9CisKKwkJfQorCQlpZiAodHAtPnNuZF9jd25kIDwgMikKKwkJCXRwLT5zbmRfY3duZCA9IDI7CisJCWVsc2UgaWYgKHRwLT5zbmRfY3duZCA+IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCXRwLT5zbmRfY3duZCA9IHRwLT5zbmRfY3duZF9jbGFtcDsKKwl9CisJLyogV2lwZSB0aGUgc2xhdGUgY2xlYW4gZm9yIHRoZSBuZXh0IHJ0dC4gKi8KKwkvKiB2ZW5vLT5jbnRydHQgPSAwOyAqLworCXZlbm8tPm1pbnJ0dCA9IDB4N2ZmZmZmZmY7Cit9CisKKy8qIFZlbm8gTUQgcGhhc2UgKi8KK3N0YXRpYyB1MzIgdGNwX3Zlbm9fc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKQoreworCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCB2ZW5vICp2ZW5vID0gaW5ldF9jc2tfY2Eoc2spOworCisJaWYgKHZlbm8tPmRpZmYgPCBiZXRhKQorCQkvKiBpbiAibm9uLWNvbmdlc3RpdmUgc3RhdGUiLCBjdXQgY3duZCBieSAxLzUgKi8KKwkJcmV0dXJuIG1heCh0cC0+c25kX2N3bmQgKiA0IC8gNSwgMlUpOworCWVsc2UKKwkJLyogaW4gImNvbmdlc3RpdmUgc3RhdGUiLCBjdXQgY3duZCBieSAxLzIgKi8KKwkJcmV0dXJuIG1heCh0cC0+c25kX2N3bmQgPj4gMVUsIDJVKTsKK30KKworc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Zlbm8gPSB7CisJLmluaXQJCT0gdGNwX3Zlbm9faW5pdCwKKwkuc3N0aHJlc2gJPSB0Y3BfdmVub19zc3RocmVzaCwKKwkuY29uZ19hdm9pZAk9IHRjcF92ZW5vX2NvbmdfYXZvaWQsCisJLnJ0dF9zYW1wbGUJPSB0Y3BfdmVub19ydHRfY2FsYywKKwkuc2V0X3N0YXRlCT0gdGNwX3Zlbm9fc3RhdGUsCisJLmN3bmRfZXZlbnQJPSB0Y3BfdmVub19jd25kX2V2ZW50LAorCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJ2ZW5vIiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRjcF92ZW5vX3JlZ2lzdGVyKHZvaWQpCit7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgdmVubykgPiBJQ1NLX0NBX1BSSVZfU0laRSk7CisJdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmdGNwX3Zlbm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGNwX3Zlbm9fdW5yZWdpc3Rlcih2b2lkKQoreworCXRjcF91bnJlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmdGNwX3Zlbm8pOworfQorCittb2R1bGVfaW5pdCh0Y3BfdmVub19yZWdpc3Rlcik7Cittb2R1bGVfZXhpdCh0Y3BfdmVub191bnJlZ2lzdGVyKTsKKworTU9EVUxFX0FVVEhPUigiQmluIFpob3UsIENoZW5nIFBlbmcgRnUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVENQIFZlbm8iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF93ZXN0d29vZC5jIGIvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKaW5kZXggMGMzNDBjMy4uNDI0N2RhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKKysrIGIvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKQEAgLTEsNyArMSwyNCBAQAogLyoKLSAqIFRDUCBXZXN0d29vZCsKKyAqIFRDUCBXZXN0d29vZCs6IGVuZC10by1lbmQgYmFuZHdpZHRoIGVzdGltYXRpb24gZm9yIFRDUAogICoKLSAqCUFuZ2VsbyBEZWxsJ0FlcmE6CVRDUCBXZXN0d29vZCsgc3VwcG9ydAorICogICAgICBBbmdlbG8gRGVsbCdBZXJhOiBhdXRob3Igb2YgdGhlIGZpcnN0IHZlcnNpb24gb2YgVENQIFdlc3R3b29kKyBpbiBMaW51eCAyLjQKKyAqCisgKiBTdXBwb3J0IGF0IGh0dHA6Ly9jM2xhYi5wb2xpYmEuaXQvaW5kZXgucGhwL1dlc3R3b29kCisgKiBNYWluIHJlZmVyZW5jZXMgaW4gbGl0ZXJhdHVyZToKKyAqCisgKiAtIE1hc2NvbG8gUywgQ2FzZXR0aSwgTS4gR2VybGEgZXQgYWwuCisgKiAgICJUQ1AgV2VzdHdvb2Q6IGJhbmR3aWR0aCBlc3RpbWF0aW9uIGZvciBUQ1AiIFByb2MuIEFDTSBNb2JpY29tIDIwMDEKKyAqCisgKiAtIEEuIEdyaWVjbywgcy4gTWFzY29sbworICogICAiUGVyZm9ybWFuY2UgZXZhbHVhdGlvbiBvZiBOZXcgUmVubywgVmVnYXMsIFdlc3R3b29kKyBUQ1AiIEFDTSBDb21wdXRlcgorICogICAgIENvbW0uIFJldmlldywgMjAwNAorICoKKyAqIC0gQS4gRGVsbCdBZXJhLCBMLiBHcmllY28sIFMuIE1hc2NvbG8uCisgKiAgICJMaW51eCAyLjQgSW1wbGVtZW50YXRpb24gb2YgV2VzdHdvb2QrIFRDUCB3aXRoIFJhdGUtSGFsdmluZyA6CisgKiAgICBBIFBlcmZvcm1hbmNlIEV2YWx1YXRpb24gT3ZlciB0aGUgSW50ZXJuZXQiIChJQ0MgMjAwNCksIFBhcmlzLCBKdW5lIDIwMDQKKyAqCisgKiBXZXN0d29vZCsgZW1wbG95cyBlbmQtdG8tZW5kIGJhbmR3aWR0aCBtZWFzdXJlbWVudCB0byBzZXQgY3duZCBhbmQKKyAqIHNzdGhyZXNoIGFmdGVyIHBhY2tldCBsb3NzLiBUaGUgcHJvYmluZyBwaGFzZSBpcyBhcyB0aGUgb3JpZ2luYWwgUmVuby4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0yMiw2ICszOSw4IEBACiAJdTMyICAgIGFjY291bnRlZDsKIAl1MzIgICAgcnR0OwogCXUzMiAgICBydHRfbWluOyAgICAgICAgICAvKiBtaW5pbXVtIG9ic2VydmVkIFJUVCAqLworCXU4ICAgICBmaXJzdF9hY2s7ICAgICAgICAvKiBmbGFnIHdoaWNoIGluZmVycyB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGFjayAqLworCXU4ICAgICByZXNldF9ydHRfbWluOyAgICAvKiBSZXNldCBSVFQgbWluIHRvIG5leHQgUlRUIHNhbXBsZSovCiB9OwogCiAKQEAgLTQ5LDkgKzY4LDExIEBACiAgICAgICAgIHctPmJ3X2VzdCA9IDA7CiAgICAgICAgIHctPmFjY291bnRlZCA9IDA7CiAgICAgICAgIHctPmN1bXVsX2FjayA9IDA7CisJdy0+cmVzZXRfcnR0X21pbiA9IDE7CiAJdy0+cnR0X21pbiA9IHctPnJ0dCA9IFRDUF9XRVNUV09PRF9JTklUX1JUVDsKIAl3LT5ydHRfd2luX3N4ID0gdGNwX3RpbWVfc3RhbXA7CiAJdy0+c25kX3VuYSA9IHRjcF9zayhzayktPnNuZF91bmE7CisJdy0+Zmlyc3RfYWNrID0gMTsKIH0KIAogLyoKQEAgLTYzLDEwICs4NCwxNiBAQAogCXJldHVybiAoKCg3ICogYSkgKyBiKSA+PiAzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdlc3R3b29kX2ZpbHRlcihzdHJ1Y3Qgd2VzdHdvb2QgKncsIHUzMiBkZWx0YSkKK3N0YXRpYyB2b2lkIHdlc3R3b29kX2ZpbHRlcihzdHJ1Y3Qgd2VzdHdvb2QgKncsIHUzMiBkZWx0YSkKIHsKLQl3LT5id19uc19lc3QgPSB3ZXN0d29vZF9kb19maWx0ZXIody0+YndfbnNfZXN0LCB3LT5iayAvIGRlbHRhKTsKLQl3LT5id19lc3QgPSB3ZXN0d29vZF9kb19maWx0ZXIody0+YndfZXN0LCB3LT5id19uc19lc3QpOworCS8qIElmIHRoZSBmaWx0ZXIgaXMgZW1wdHkgZmlsbCBpdCB3aXRoIHRoZSBmaXJzdCBzYW1wbGUgb2YgYmFuZHdpZHRoICAqLworCWlmICh3LT5id19uc19lc3QgPT0gMCAmJiB3LT5id19lc3QgPT0gMCkgeworCQl3LT5id19uc19lc3QgPSB3LT5iayAvIGRlbHRhOworCQl3LT5id19lc3QgPSB3LT5id19uc19lc3Q7CisJfSBlbHNlIHsKKwkJdy0+YndfbnNfZXN0ID0gd2VzdHdvb2RfZG9fZmlsdGVyKHctPmJ3X25zX2VzdCwgdy0+YmsgLyBkZWx0YSk7CisJCXctPmJ3X2VzdCA9IHdlc3R3b29kX2RvX2ZpbHRlcih3LT5id19lc3QsIHctPmJ3X25zX2VzdCk7CisJfQogfQogCiAvKgpAQCAtOTEsNiArMTE4LDE1IEBACiAJc3RydWN0IHdlc3R3b29kICp3ID0gaW5ldF9jc2tfY2Eoc2spOwogCXMzMiBkZWx0YSA9IHRjcF90aW1lX3N0YW1wIC0gdy0+cnR0X3dpbl9zeDsKIAorCS8qIEluaXRpYWxpemUgdy0+c25kX3VuYSB3aXRoIHRoZSBmaXJzdCBhY2tlZCBzZXF1ZW5jZSBudW1iZXIgaW4gb3JkZXIKKwkgKiB0byBmaXggbWlzbWF0Y2ggYmV0d2VlbiB0cC0+c25kX3VuYSBhbmQgdy0+c25kX3VuYSBmb3IgdGhlIGZpcnN0CisJICogYmFuZHdpZHRoIHNhbXBsZQorCSAqLworICAgICAgICBpZiAody0+Zmlyc3RfYWNrKSB7CisJCXctPnNuZF91bmEgPSB0Y3Bfc2soc2spLT5zbmRfdW5hOworCQl3LT5maXJzdF9hY2sgPSAwOworCX0KKwogCS8qCiAJICogU2VlIGlmIGEgUlRULXdpbmRvdyBoYXMgcGFzc2VkLgogCSAqIEJlIGNhcmVmdWwgc2luY2UgaWYgUlRUIGlzIGxlc3MgdGhhbgpAQCAtMTA4LDYgKzE0NCwxNiBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9ydHRfbWluKHN0cnVjdCB3ZXN0d29vZCAqdykKK3sKKwlpZiAody0+cmVzZXRfcnR0X21pbikgeworCQl3LT5ydHRfbWluID0gdy0+cnR0OworCQl3LT5yZXNldF9ydHRfbWluID0gMDsJCisJfSBlbHNlCisJCXctPnJ0dF9taW4gPSBtaW4ody0+cnR0LCB3LT5ydHRfbWluKTsKK30KKworCiAvKgogICogQHdlc3R3b29kX2Zhc3RfYncKICAqIEl0IGlzIGNhbGxlZCB3aGVuIHdlIGFyZSBpbiBmYXN0IHBhdGguIEluIHBhcnRpY3VsYXIgaXQgaXMgY2FsbGVkIHdoZW4KQEAgLTEyMyw3ICsxNjksNyBAQAogCiAJdy0+YmsgKz0gdHAtPnNuZF91bmEgLSB3LT5zbmRfdW5hOwogCXctPnNuZF91bmEgPSB0cC0+c25kX3VuYTsKLQl3LT5ydHRfbWluID0gbWluKHctPnJ0dCwgdy0+cnR0X21pbik7CisJdXBkYXRlX3J0dF9taW4odyk7CiB9CiAKIC8qCkBAIC0xNjIsMTIgKzIwOCw2IEBACiAJcmV0dXJuIHctPmN1bXVsX2FjazsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgd2VzdHdvb2RfYndfcnR0bWluKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQljb25zdCBzdHJ1Y3Qgd2VzdHdvb2QgKncgPSBpbmV0X2Nza19jYShzayk7Ci0JcmV0dXJuIG1heF90KHUzMiwgKHctPmJ3X2VzdCAqIHctPnJ0dF9taW4pIC8gdHAtPm1zc19jYWNoZSwgMik7Ci19CiAKIC8qCiAgKiBUQ1AgV2VzdHdvb2QKQEAgLTE3NSw5ICsyMTUsMTEgQEAKICAqIGluIHBhY2tldHMgd2UgdXNlIG1zc19jYWNoZSkuIFJ0dG1pbiBpcyBndWFyYW50ZWVkIHRvIGJlID49IDIKICAqIHNvIGF2b2lkcyBldmVyIHJldHVybmluZyAwLgogICovCi1zdGF0aWMgdTMyIHRjcF93ZXN0d29vZF9jd25kX21pbihzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdTMyIHRjcF93ZXN0d29vZF9id19ydHRtaW4oY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiB3ZXN0d29vZF9id19ydHRtaW4oc2spOworCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWNvbnN0IHN0cnVjdCB3ZXN0d29vZCAqdyA9IGluZXRfY3NrX2NhKHNrKTsKKwlyZXR1cm4gbWF4X3QodTMyLCAody0+YndfZXN0ICogdy0+cnR0X21pbikgLyB0cC0+bXNzX2NhY2hlLCAyKTsKIH0KIAogc3RhdGljIHZvaWQgdGNwX3dlc3R3b29kX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfY2FfZXZlbnQgZXZlbnQpCkBAIC0xOTEsMTcgKzIzMywxOSBAQAogCQlicmVhazsKIAogCWNhc2UgQ0FfRVZFTlRfQ09NUExFVEVfQ1dSOgotCQl0cC0+c25kX2N3bmQgPSB0cC0+c25kX3NzdGhyZXNoID0gd2VzdHdvb2RfYndfcnR0bWluKHNrKTsKKwkJdHAtPnNuZF9jd25kID0gdHAtPnNuZF9zc3RocmVzaCA9IHRjcF93ZXN0d29vZF9id19ydHRtaW4oc2spOwogCQlicmVhazsKIAogCWNhc2UgQ0FfRVZFTlRfRlJUTzoKLQkJdHAtPnNuZF9zc3RocmVzaCA9IHdlc3R3b29kX2J3X3J0dG1pbihzayk7CisJCXRwLT5zbmRfc3N0aHJlc2ggPSB0Y3Bfd2VzdHdvb2RfYndfcnR0bWluKHNrKTsKKyAJCS8qIFVwZGF0ZSBSVFRfbWluIHdoZW4gbmV4dCBhY2sgYXJyaXZlcyAqLworCQl3LT5yZXNldF9ydHRfbWluID0gMTsKIAkJYnJlYWs7CiAKIAljYXNlIENBX0VWRU5UX1NMT1dfQUNLOgogCQl3ZXN0d29vZF91cGRhdGVfd2luZG93KHNrKTsKIAkJdy0+YmsgKz0gd2VzdHdvb2RfYWNrZWRfY291bnQoc2spOwotCQl3LT5ydHRfbWluID0gbWluKHctPnJ0dCwgdy0+cnR0X21pbik7CisJCXVwZGF0ZV9ydHRfbWluKHcpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMzUsNyArMjc5LDcgQEAKIAkuaW5pdAkJPSB0Y3Bfd2VzdHdvb2RfaW5pdCwKIAkuc3N0aHJlc2gJPSB0Y3BfcmVub19zc3RocmVzaCwKIAkuY29uZ19hdm9pZAk9IHRjcF9yZW5vX2NvbmdfYXZvaWQsCi0JLm1pbl9jd25kCT0gdGNwX3dlc3R3b29kX2N3bmRfbWluLAorCS5taW5fY3duZAk9IHRjcF93ZXN0d29vZF9id19ydHRtaW4sCiAJLmN3bmRfZXZlbnQJPSB0Y3Bfd2VzdHdvb2RfZXZlbnQsCiAJLmdldF9pbmZvCT0gdGNwX3dlc3R3b29kX2luZm8sCiAJLnBrdHNfYWNrZWQJPSB0Y3Bfd2VzdHdvb2RfcGt0c19hY2tlZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCmluZGV4IDNlMTc0YzguLjgxN2VkODQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+Ci0jaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIApAQCAtMjQsMTUgKzIzLDYgQEAKIAogRVhQT1JUX1NZTUJPTCh4ZnJtNF9yY3YpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBpcF9lY25fZGVjYXBzdWxhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaXBoZHIgKm91dGVyX2lwaCA9IHNrYi0+bmguaXBoOwotCXN0cnVjdCBpcGhkciAqaW5uZXJfaXBoID0gc2tiLT5oLmlwaXBoOwotCi0JaWYgKElORVRfRUNOX2lzX2NlKG91dGVyX2lwaC0+dG9zKSkKLQkJSVBfRUNOX3NldF9jZShpbm5lcl9pcGgpOwotfQotCiBzdGF0aWMgaW50IHhmcm00X3BhcnNlX3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBuZXh0aGRyLCB1MzIgKnNwaSwgdTMyICpzZXEpCiB7CiAJc3dpdGNoIChuZXh0aGRyKSB7CkBAIC0xMTMsMjQgKzEwMywxMCBAQAogCiAJCXhmcm1fdmVjW3hmcm1fbnIrK10gPSB4OwogCi0JCWlwaCA9IHNrYi0+bmguaXBoOworCQlpZiAoeC0+bW9kZS0+aW5wdXQoeCwgc2tiKSkKKwkJCWdvdG8gZHJvcDsKIAogCQlpZiAoeC0+cHJvcHMubW9kZSkgewotCQkJaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19JUElQKQotCQkJCWdvdG8gZHJvcDsKLQkJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKLQkJCQlnb3RvIGRyb3A7Ci0JCQlpZiAoc2tiX2Nsb25lZChza2IpICYmCi0JCQkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQotCQkJCWdvdG8gZHJvcDsKLQkJCWlmICh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfREVDQVBfRFNDUCkKLQkJCQlpcHY0X2NvcHlfZHNjcChpcGgsIHNrYi0+aC5pcGlwaCk7Ci0JCQlpZiAoISh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfTk9FQ04pKQotCQkJCWlwaXBfZWNuX2RlY2Fwc3VsYXRlKHNrYik7Ci0JCQlza2ItPm1hYy5yYXcgPSBtZW1tb3ZlKHNrYi0+ZGF0YSAtIHNrYi0+bWFjX2xlbiwKLQkJCQkJICAgICAgIHNrYi0+bWFjLnJhdywgc2tiLT5tYWNfbGVuKTsKLQkJCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOwotCQkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpKTsKIAkJCWRlY2FwcyA9IDE7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfbW9kZV90cmFuc3BvcnQuYyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllNmIzZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHJhbnNwb3J0LmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIHhmcm00X21vZGVfdHJhbnNwb3J0LmMgLSBUcmFuc3BvcnQgbW9kZSBlbmNhcHN1bGF0aW9uIGZvciBJUHY0LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPG5ldC9kc3QuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgorCisvKiBBZGQgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCisgKgorICogVGhlIElQIGhlYWRlciB3aWxsIGJlIG1vdmVkIGZvcndhcmQgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIGVuY2Fwc3VsYXRpb24KKyAqIGhlYWRlci4KKyAqCisgKiBPbiBleGl0LCBza2ItPmggd2lsbCBiZSBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZAorICogYnkgeC0+dHlwZS0+b3V0cHV0IGFuZCBza2ItPm5oIHdpbGwgYmUgc2V0IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgorICovCitzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlpbnQgaWhsOworCisJaXBoID0gc2tiLT5uaC5pcGg7CisJc2tiLT5oLmlwaXBoID0gaXBoOworCisJaWhsID0gaXBoLT5paGwgKiA0OworCXNrYi0+aC5yYXcgKz0gaWhsOworCisJeCA9IHNrYi0+ZHN0LT54ZnJtOworCXNrYi0+bmgucmF3ID0gbWVtbW92ZShza2JfcHVzaChza2IsIHgtPnByb3BzLmhlYWRlcl9sZW4pLCBpcGgsIGlobCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbW92ZSBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBUaGUgSVAgaGVhZGVyIHdpbGwgYmUgbW92ZWQgb3ZlciB0aGUgdG9wIG9mIHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBPbiBlbnRyeSwgc2tiLT5oIHNoYWxsIHBvaW50IHRvIHdoZXJlIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIGFuZCBza2ItPm5oCisgKiBzaGFsbCBiZSBzZXQgdG8gd2hlcmUgdGhlIElQIGhlYWRlciBjdXJyZW50bHkgaXMuICBza2ItPmRhdGEgc2hhbGwgcG9pbnQKKyAqIHRvIHRoZSBzdGFydCBvZiB0aGUgcGF5bG9hZC4KKyAqLworc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGlobCA9IHNrYi0+ZGF0YSAtIHNrYi0+aC5yYXc7CisKKwlpZiAoc2tiLT5oLnJhdyAhPSBza2ItPm5oLnJhdykKKwkJc2tiLT5uaC5yYXcgPSBtZW1tb3ZlKHNrYi0+aC5yYXcsIHNrYi0+bmgucmF3LCBpaGwpOworCXNrYi0+bmguaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4gKyBpaGwpOworCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGZybV9tb2RlIHhmcm00X3RyYW5zcG9ydF9tb2RlID0geworCS5pbnB1dCA9IHhmcm00X3RyYW5zcG9ydF9pbnB1dCwKKwkub3V0cHV0ID0geGZybTRfdHJhbnNwb3J0X291dHB1dCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZW5jYXAgPSBYRlJNX01PREVfVFJBTlNQT1JULAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGZybTRfdHJhbnNwb3J0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4geGZybV9yZWdpc3Rlcl9tb2RlKCZ4ZnJtNF90cmFuc3BvcnRfbW9kZSwgQUZfSU5FVCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtNF90cmFuc3BvcnRfZXhpdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSB4ZnJtX3VucmVnaXN0ZXJfbW9kZSgmeGZybTRfdHJhbnNwb3J0X21vZGUsIEFGX0lORVQpOworCUJVR19PTihlcnIpOworfQorCittb2R1bGVfaW5pdCh4ZnJtNF90cmFuc3BvcnRfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZnJtNF90cmFuc3BvcnRfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfWEZSTV9NT0RFKEFGX0lORVQsIFhGUk1fTU9ERV9UUkFOU1BPUlQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfbW9kZV90dW5uZWwuYyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkODgwYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiB4ZnJtNF9tb2RlX3R1bm5lbC5jIC0gVHVubmVsIG1vZGUgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKworc3RhdGljIGlubGluZSB2b2lkIGlwaXBfZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlwaGRyICpvdXRlcl9pcGggPSBza2ItPm5oLmlwaDsKKwlzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCA9IHNrYi0+aC5pcGlwaDsKKworCWlmIChJTkVUX0VDTl9pc19jZShvdXRlcl9pcGgtPnRvcykpCisJCUlQX0VDTl9zZXRfY2UoaW5uZXJfaXBoKTsKK30KKworLyogQWRkIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgorICoKKyAqIFRoZSB0b3AgSVAgaGVhZGVyIHdpbGwgYmUgY29uc3RydWN0ZWQgcGVyIFJGQyAyNDAxLiAgVGhlIGZvbGxvd2luZyBmaWVsZHMKKyAqIGluIGl0IHNoYWxsIGJlIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQ6CisgKiAgICAgIHRvdF9sZW4KKyAqICAgICAgY2hlY2sKKyAqCisgKiBPbiBleGl0LCBza2ItPmggd2lsbCBiZSBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZAorICogYnkgeC0+dHlwZS0+b3V0cHV0IGFuZCBza2ItPm5oIHdpbGwgYmUgc2V0IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgorICovCitzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2ItPmRzdDsKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdC0+eGZybTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCwgKnRvcF9pcGg7CisJaW50IGZsYWdzOworCisJaXBoID0gc2tiLT5uaC5pcGg7CisJc2tiLT5oLmlwaXBoID0gaXBoOworCisJc2tiLT5uaC5yYXcgPSBza2JfcHVzaChza2IsIHgtPnByb3BzLmhlYWRlcl9sZW4pOworCXRvcF9pcGggPSBza2ItPm5oLmlwaDsKKworCXRvcF9pcGgtPmlobCA9IDU7CisJdG9wX2lwaC0+dmVyc2lvbiA9IDQ7CisKKwkvKiBEUyBkaXNjbG9zZWQgKi8KKwl0b3BfaXBoLT50b3MgPSBJTkVUX0VDTl9lbmNhcHN1bGF0ZShpcGgtPnRvcywgaXBoLT50b3MpOworCisJZmxhZ3MgPSB4LT5wcm9wcy5mbGFnczsKKwlpZiAoZmxhZ3MgJiBYRlJNX1NUQVRFX05PRUNOKQorCQlJUF9FQ05fY2xlYXIodG9wX2lwaCk7CisKKwl0b3BfaXBoLT5mcmFnX29mZiA9IChmbGFncyAmIFhGUk1fU1RBVEVfTk9QTVRVRElTQykgPworCQkwIDogKGlwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpOworCWlmICghdG9wX2lwaC0+ZnJhZ19vZmYpCisJCV9faXBfc2VsZWN0X2lkZW50KHRvcF9pcGgsIGRzdC0+Y2hpbGQsIDApOworCisJdG9wX2lwaC0+dHRsID0gZHN0X21ldHJpYyhkc3QtPmNoaWxkLCBSVEFYX0hPUExJTUlUKTsKKworCXRvcF9pcGgtPnNhZGRyID0geC0+cHJvcHMuc2FkZHIuYTQ7CisJdG9wX2lwaC0+ZGFkZHIgPSB4LT5pZC5kYWRkci5hNDsKKwl0b3BfaXBoLT5wcm90b2NvbCA9IElQUFJPVE9fSVBJUDsKKworCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGZybTRfdHVubmVsX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpcGhkciAqaXBoID0gc2tiLT5uaC5pcGg7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX0lQSVApCisJCWdvdG8gb3V0OworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc2tiX2Nsb25lZChza2IpICYmCisJICAgIChlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpKQorCQlnb3RvIG91dDsKKworCWlmICh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfREVDQVBfRFNDUCkKKwkJaXB2NF9jb3B5X2RzY3AoaXBoLCBza2ItPmguaXBpcGgpOworCWlmICghKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9OT0VDTikpCisJCWlwaXBfZWNuX2RlY2Fwc3VsYXRlKHNrYik7CisJc2tiLT5tYWMucmF3ID0gbWVtbW92ZShza2ItPmRhdGEgLSBza2ItPm1hY19sZW4sCisJCQkgICAgICAgc2tiLT5tYWMucmF3LCBza2ItPm1hY19sZW4pOworCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSk7CisJZXJyID0gMDsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGZybV9tb2RlIHhmcm00X3R1bm5lbF9tb2RlID0geworCS5pbnB1dCA9IHhmcm00X3R1bm5lbF9pbnB1dCwKKwkub3V0cHV0ID0geGZybTRfdHVubmVsX291dHB1dCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZW5jYXAgPSBYRlJNX01PREVfVFVOTkVMLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGZybTRfdHVubmVsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geGZybV9yZWdpc3Rlcl9tb2RlKCZ4ZnJtNF90dW5uZWxfbW9kZSwgQUZfSU5FVCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtNF90dW5uZWxfZXhpdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSB4ZnJtX3VucmVnaXN0ZXJfbW9kZSgmeGZybTRfdHVubmVsX21vZGUsIEFGX0lORVQpOworCUJVR19PTihlcnIpOworfQorCittb2R1bGVfaW5pdCh4ZnJtNF90dW5uZWxfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZnJtNF90dW5uZWxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfWEZSTV9NT0RFKEFGX0lORVQsIFhGUk1fTU9ERV9UVU5ORUwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYwppbmRleCA0ZWY4ZWZhLi5hYzlkOTFkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYwpAQCAtMTIsNjcgKzEyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgotI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KIAotLyogQWRkIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgotICoKLSAqIEluIHRyYW5zcG9ydCBtb2RlLCB0aGUgSVAgaGVhZGVyIHdpbGwgYmUgbW92ZWQgZm9yd2FyZCB0byBtYWtlIHNwYWNlCi0gKiBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgotICoKLSAqIEluIHR1bm5lbCBtb2RlLCB0aGUgdG9wIElQIGhlYWRlciB3aWxsIGJlIGNvbnN0cnVjdGVkIHBlciBSRkMgMjQwMS4KLSAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIGluIGl0IHNoYWxsIGJlIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQ6Ci0gKgl0b3RfbGVuCi0gKgljaGVjawotICoKLSAqIE9uIGV4aXQsIHNrYi0+aCB3aWxsIGJlIHNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHBheWxvYWQgdG8gYmUgcHJvY2Vzc2VkCi0gKiBieSB4LT50eXBlLT5vdXRwdXQgYW5kIHNrYi0+bmggd2lsbCBiZSBzZXQgdG8gdGhlIHRvcCBJUCBoZWFkZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHhmcm00X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiLT5kc3Q7Ci0Jc3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3QtPnhmcm07Ci0Jc3RydWN0IGlwaGRyICppcGgsICp0b3BfaXBoOwotCWludCBmbGFnczsKLQotCWlwaCA9IHNrYi0+bmguaXBoOwotCXNrYi0+aC5pcGlwaCA9IGlwaDsKLQotCXNrYi0+bmgucmF3ID0gc2tiX3B1c2goc2tiLCB4LT5wcm9wcy5oZWFkZXJfbGVuKTsKLQl0b3BfaXBoID0gc2tiLT5uaC5pcGg7Ci0KLQlpZiAoIXgtPnByb3BzLm1vZGUpIHsKLQkJc2tiLT5oLnJhdyArPSBpcGgtPmlobCo0OwotCQltZW1tb3ZlKHRvcF9pcGgsIGlwaCwgaXBoLT5paGwqNCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl0b3BfaXBoLT5paGwgPSA1OwotCXRvcF9pcGgtPnZlcnNpb24gPSA0OwotCi0JLyogRFMgZGlzY2xvc2VkICovCi0JdG9wX2lwaC0+dG9zID0gSU5FVF9FQ05fZW5jYXBzdWxhdGUoaXBoLT50b3MsIGlwaC0+dG9zKTsKLQotCWZsYWdzID0geC0+cHJvcHMuZmxhZ3M7Ci0JaWYgKGZsYWdzICYgWEZSTV9TVEFURV9OT0VDTikKLQkJSVBfRUNOX2NsZWFyKHRvcF9pcGgpOwotCi0JdG9wX2lwaC0+ZnJhZ19vZmYgPSAoZmxhZ3MgJiBYRlJNX1NUQVRFX05PUE1UVURJU0MpID8KLQkJMCA6IChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKTsKLQlpZiAoIXRvcF9pcGgtPmZyYWdfb2ZmKQotCQlfX2lwX3NlbGVjdF9pZGVudCh0b3BfaXBoLCBkc3QtPmNoaWxkLCAwKTsKLQotCXRvcF9pcGgtPnR0bCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7Ci0KLQl0b3BfaXBoLT5zYWRkciA9IHgtPnByb3BzLnNhZGRyLmE0OwotCXRvcF9pcGgtPmRhZGRyID0geC0+aWQuZGFkZHIuYTQ7Ci0JdG9wX2lwaC0+cHJvdG9jb2wgPSBJUFBST1RPX0lQSVA7Ci0KLQltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykpOwotfQotCiBzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9jaGVja19zaXplKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IG10dSwgcmV0ID0gMDsKQEAgLTEyMSw3ICs2NCw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCi0JCXhmcm00X2VuY2FwKHNrYik7CisJCWVyciA9IHgtPm1vZGUtPm91dHB1dChza2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKIAogCQllcnIgPSB4LT50eXBlLT5vdXRwdXQoeCwgc2tiKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggODYwNGM3NC4uYzA0NjUyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTE3LDggKzE3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyB4ZnJtNF9kc3Rfb3BzOwogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbzsKIAotc3RhdGljIHN0cnVjdCB4ZnJtX3R5cGVfbWFwIHhmcm00X3R5cGVfbWFwID0geyAubG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQgfTsKLQogc3RhdGljIGludCB4ZnJtNF9kc3RfbG9va3VwKHN0cnVjdCB4ZnJtX2RzdCAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKIHsKIAlyZXR1cm4gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KChzdHJ1Y3QgcnRhYmxlKiopZHN0LCBmbCk7CkBAIC0yMzcsOSArMjM1LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgeGZybTRfZ2FyYmFnZV9jb2xsZWN0KHZvaWQpCiB7Ci0JcmVhZF9sb2NrKCZ4ZnJtNF9wb2xpY3lfYWZpbmZvLmxvY2spOwogCXhmcm00X3BvbGljeV9hZmluZm8uZ2FyYmFnZV9jb2xsZWN0KCk7Ci0JcmVhZF91bmxvY2soJnhmcm00X3BvbGljeV9hZmluZm8ubG9jayk7CiAJcmV0dXJuIChhdG9taWNfcmVhZCgmeGZybTRfZHN0X29wcy5lbnRyaWVzKSA+IHhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoKjIpOwogfQogCkBAIC0yOTksOCArMjk1LDYgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbyA9IHsKIAkuZmFtaWx5ID0gCQlBRl9JTkVULAotCS5sb2NrID0gCQlSV19MT0NLX1VOTE9DS0VELAotCS50eXBlX21hcCA9IAkJJnhmcm00X3R5cGVfbWFwLAogCS5kc3Rfb3BzID0JCSZ4ZnJtNF9kc3Rfb3BzLAogCS5kc3RfbG9va3VwID0JCXhmcm00X2RzdF9sb29rdXAsCiAJLmZpbmRfYnVuZGxlID0gCQlfX3hmcm00X2ZpbmRfYnVuZGxlLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYyBiL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKaW5kZXggZGJhYmY4MS4uODFlMTc1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYworKysgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCkBAIC0xMzEsNyArMTMxLDYgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyB4ZnJtNF9zdGF0ZV9hZmluZm8gPSB7CiAJLmZhbWlseQkJCT0gQUZfSU5FVCwKLQkubG9jawkJCT0gUldfTE9DS19VTkxPQ0tFRCwKIAkuaW5pdF9mbGFncwkJPSB4ZnJtNF9pbml0X2ZsYWdzLAogCS5pbml0X3RlbXBzZWwJCT0gX194ZnJtNF9pbml0X3RlbXBzZWwsCiAJLnN0YXRlX2xvb2t1cAkJPSBfX3hmcm00X3N0YXRlX2xvb2t1cCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L0tjb25maWcgYi9uZXQvaXB2Ni9LY29uZmlnCmluZGV4IGY4YTEwN2EuLmU5MjNkNGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L0tjb25maWcKKysrIGIvbmV0L2lwdjYvS2NvbmZpZwpAQCAtMTA2LDYgKzEwNiwyNiBAQAogCXRyaXN0YXRlCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBJTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUCisJdHJpc3RhdGUgIklQdjY6IElQc2VjIHRyYW5zcG9ydCBtb2RlIgorCWRlcGVuZHMgb24gSVBWNgorCWRlZmF1bHQgSVBWNgorCXNlbGVjdCBYRlJNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgSVBzZWMgdHJhbnNwb3J0IG1vZGUuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBJTkVUNl9YRlJNX01PREVfVFVOTkVMCisJdHJpc3RhdGUgIklQdjY6IElQc2VjIHR1bm5lbCBtb2RlIgorCWRlcGVuZHMgb24gSVBWNgorCWRlZmF1bHQgSVBWNgorCXNlbGVjdCBYRlJNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgSVBzZWMgdHVubmVsIG1vZGUuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBJUFY2X1RVTk5FTAogCXRyaXN0YXRlICJJUHY2OiBJUHY2LWluLUlQdjYgdHVubmVsIgogCXNlbGVjdCBJTkVUNl9UVU5ORUwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGUKaW5kZXggYTc2MGIwOS4uMzg2ZTBhNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjYvTWFrZWZpbGUKQEAgLTIwLDYgKzIwLDggQEAKIG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICs9IGlwY29tcDYubwogb2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMKSArPSB4ZnJtNl90dW5uZWwubwogb2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgKz0gdHVubmVsNi5vCitvYmotJChDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCkgKz0geGZybTZfbW9kZV90cmFuc3BvcnQubworb2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwpICs9IHhmcm02X21vZGVfdHVubmVsLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVIpCSs9IG5ldGZpbHRlci8KIAogb2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDQ0NTAwNmUuLmMyYzI2ZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg2MCw2ICsyODYwLDExIEBACiAJcmV0dXJuIGluZXQ2X2FkZHJfYWRkKGlmbS0+aWZhX2luZGV4LCBwZngsIGlmbS0+aWZhX3ByZWZpeGxlbik7CiB9CiAKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGlmYV9jYWNoZWluZm8gYXR0cmlidXRlcyAqLworI2RlZmluZSBJTkVUNl9JRkFERFJfUlRBX1NQQUNFIFwKKwkJUlRBX1NQQUNFKDE2KSAvKiBJRkFfQUREUkVTUyAqLyArIFwKKwkJUlRBX1NQQUNFKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpIC8qIENBQ0hFSU5GTyAqLworCiBzdGF0aWMgaW50IGluZXQ2X2ZpbGxfaWZhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSwKIAkJCSAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC0zMDkyLDcgKzMwOTcsNyBAQAogc3RhdGljIHZvaWQgaW5ldDZfaWZhX25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKzEyOCk7CisJaW50IHNpemUgPSBOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykgKyBJTkVUNl9JRkFERFJfUlRBX1NQQUNFKTsKIAogCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewpAQCAtMzE0Miw2ICszMTQ3LDE3IEBACiAjZW5kaWYKIH0KIAorLyogTWF4aW11bSBsZW5ndGggb2YgaWZpbmZvbXNnIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgSU5FVDZfSUZJTkZPX1JUQV9TUEFDRSBcCisJCVJUQV9TUEFDRShJRk5BTVNJWikgLyogSUZOQU1FICovICsgXAorCQlSVEFfU1BBQ0UoTUFYX0FERFJfTEVOKSAvKiBBRERSRVNTICovICsJXAorCQlSVEFfU1BBQ0Uoc2l6ZW9mKHUzMikpIC8qIE1UVSAqLyArIFwKKwkJUlRBX1NQQUNFKHNpemVvZihpbnQpKSAvKiBMSU5LICovICsgXAorCQlSVEFfU1BBQ0UoMCkgLyogUFJPVElORk8gKi8gKyBcCisJCVJUQV9TUEFDRShzaXplb2YodTMyKSkgLyogRkxBR1MgKi8gKyBcCisJCVJUQV9TUEFDRShzaXplb2Yoc3RydWN0IGlmbGFfY2FjaGVpbmZvKSkgLyogQ0FDSEVJTkZPICovICsgXAorCQlSVEFfU1BBQ0Uoc2l6ZW9mKF9fczMyW0RFVkNPTkZfTUFYXSkpIC8qIENPTkYgKi8KKwogc3RhdGljIGludCBpbmV0Nl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCAKIAkJCSAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC0zMjM1LDggKzMyNTEsNyBAQAogdm9pZCBpbmV0Nl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCS8qIDEyOCBieXRlcyA/PyAqLwotCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKzEyOCk7CisJaW50IHNpemUgPSBOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IGlmaW5mb21zZykgKyBJTkVUNl9JRklORk9fUlRBX1NQQUNFKTsKIAkKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKQEAgLTMyNTIsNiArMzI2NywxMSBAQAogCW5ldGxpbmtfYnJvYWRjYXN0KHJ0bmwsIHNrYiwgMCwgUlROTEdSUF9JUFY2X0lGSU5GTywgR0ZQX0FUT01JQyk7CiB9CiAKKy8qIE1heGltdW0gbGVuZ3RoIG9mIHByZWZpeF9jYWNoZWluZm8gYXR0cmlidXRlcyAqLworI2RlZmluZSBJTkVUNl9QUkVGSVhfUlRBX1NQQUNFIFwKKwkJUlRBX1NQQUNFKHNpemVvZigoKHN0cnVjdCBwcmVmaXhfaW5mbyAqKU5VTEwpLT5wcmVmaXgpKSAvKiBBRERSRVNTICovICsgXAorCQlSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBwcmVmaXhfY2FjaGVpbmZvKSkgLyogQ0FDSEVJTkZPICovCisKIHN0YXRpYyBpbnQgaW5ldDZfZmlsbF9wcmVmaXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldiwKIAkJCXN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sIHUzMiBwaWQsIHUzMiBzZXEsIAogCQkJaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC0zMjk2LDcgKzMzMTYsNyBAQAogCQkJIHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgcHJlZml4bXNnKSsxMjgpOworCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBwcmVmaXhtc2cpICsgSU5FVDZfUFJFRklYX1JUQV9TUEFDRSk7CiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FoNi5jIGIvbmV0L2lwdjYvYWg2LmMKaW5kZXggNjc3ODE3My4uZDMxYzBkNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWg2LmMKKysrIGIvbmV0L2lwdjYvYWg2LmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogCiAJCW1lbWNweShhdXRoX2RhdGEsIGFoLT5hdXRoX2RhdGEsIGFocC0+aWN2X3RydW5jX2xlbik7CiAJCW1lbXNldChhaC0+YXV0aF9kYXRhLCAwLCBhaHAtPmljdl90cnVuY19sZW4pOwotCQlza2JfcHVzaChza2IsIHNrYi0+ZGF0YSAtIHNrYi0+bmgucmF3KTsKKwkJc2tiX3B1c2goc2tiLCBoZHJfbGVuKTsKIAkJYWhwLT5pY3YoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOwogCQlpZiAobWVtY21wKGFoLT5hdXRoX2RhdGEsIGF1dGhfZGF0YSwgYWhwLT5pY3ZfdHJ1bmNfbGVuKSkgewogCQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJpcHNlYyBhaCBhdXRoZW50aWNhdGlvbiBlcnJvclxuIik7CkBAIC0zMDEsMTIgKzMwMSw4IEBACiAJCX0KIAl9CiAKLQlza2ItPm5oLnJhdyA9IHNrYl9wdWxsKHNrYiwgYWhfaGxlbik7Ci0JbWVtY3B5KHNrYi0+bmgucmF3LCB0bXBfaGRyLCBoZHJfbGVuKTsKLQlza2ItPm5oLmlwdjZoLT5wYXlsb2FkX2xlbiA9IGh0b25zKHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7Ci0Jc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTsKLQlza2ItPmgucmF3ID0gc2tiLT5kYXRhOwotCisJc2tiLT5oLnJhdyA9IG1lbWNweShza2ItPm5oLnJhdyArPSBhaF9obGVuLCB0bXBfaGRyLCBoZHJfbGVuKTsKKwlfX3NrYl9wdWxsKHNrYiwgYWhfaGxlbiArIGhkcl9sZW4pOwogCiAJa2ZyZWUodG1wX2hkcik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCAyMmYwNDYwLi5hMTVhNmYzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0xNDIsMjYgKzE0MiwxOCBAQAogCiAJaW50IGhkcl9sZW4gPSBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXc7CiAJaW50IG5mcmFnczsKLQl1bnNpZ25lZCBjaGFyICp0bXBfaGRyID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2Nl9lc3BfaGRyKSkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXRfbm9mcmVlOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoZWxlbiA8PSAwIHx8IChlbGVuICYgKGJsa3NpemUtMSkpKSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X25vZnJlZTsKKwkJZ290byBvdXQ7CiAJfQogCi0JdG1wX2hkciA9IGttYWxsb2MoaGRyX2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF0bXBfaGRyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X25vZnJlZTsKLQl9Ci0JbWVtY3B5KHRtcF9oZHIsIHNrYi0+bmgucmF3LCBoZHJfbGVuKTsKLQogCS8qIElmIGludGVncml0eSBjaGVjayBpcyByZXF1aXJlZCwgZG8gdGhpcy4gKi8KICAgICAgICAgaWYgKGVzcC0+YXV0aC5pY3ZfZnVsbF9sZW4pIHsKIAkJdTggc3VtW2VzcC0+YXV0aC5pY3ZfZnVsbF9sZW5dOwpAQCAtMjIyLDE2ICsyMTQsMTIgQEAKIAkJLyogLi4uIGNoZWNrIHBhZGRpbmcgYml0cyBoZXJlLiBTaWxseS4gOi0pICovIAogCiAJCXBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gYWxlbiAtIHBhZGxlbiAtIDIpOwotCQlza2ItPmgucmF3ID0gc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW4pOwotCQlza2ItPm5oLnJhdyArPSBzaXplb2Yoc3RydWN0IGlwdjZfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW47Ci0JCW1lbWNweShza2ItPm5oLnJhdywgdG1wX2hkciwgaGRyX2xlbik7Ci0JCXNrYi0+bmguaXB2NmgtPnBheWxvYWRfbGVuID0gaHRvbnMoc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAkJcmV0ID0gbmV4dGhkclsxXTsKIAl9CiAKKwlza2ItPmgucmF3ID0gX19za2JfcHVsbChza2IsIHNpemVvZigqZXNwaCkgKyBlc3AtPmNvbmYuaXZsZW4pIC0gaGRyX2xlbjsKKwogb3V0OgotCWtmcmVlKHRtcF9oZHIpOwotb3V0X25vZnJlZToKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggZTQ2MDQ4OS4uZDI5NjIwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JvdXRlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgpAQCAtNDU4LDYgKzQ1OSw3IEBACiAJbmZfYnJpZGdlX2dldCh0by0+bmZfYnJpZGdlKTsKICNlbmRpZgogI2VuZGlmCisJc2tiX2NvcHlfc2VjbWFyayh0bywgZnJvbSk7CiB9CiAKIGludCBpcDZfZmluZF8xc3RmcmFnb3B0KHN0cnVjdCBza19idWZmICpza2IsIHU4ICoqbmV4dGhkcikKQEAgLTQ4OCw2ICs0OTAsNyBAQAogCiAJcmV0dXJuIG9mZnNldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlwNl9maW5kXzFzdGZyYWdvcHQpOwogCiBzdGF0aWMgaW50IGlwNl9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICopKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXBjb21wNi5jIGIvbmV0L2lwdjYvaXBjb21wNi5jCmluZGV4IDQ4NjM2NDMuLmYyOGNkMzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwY29tcDYuYworKysgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKQEAgLTY1LDM4ICs2NSwyNSBAQAogCiBzdGF0aWMgaW50IGlwY29tcDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGVyciA9IDA7Ci0JdTggbmV4dGhkciA9IDA7Ci0JaW50IGhkcl9sZW4gPSBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXc7Ci0JdW5zaWduZWQgY2hhciAqdG1wX2hkciA9IE5VTEw7CisJaW50IGVyciA9IC1FTk9NRU07CiAJc3RydWN0IGlwdjZoZHIgKmlwaDsKKwlzdHJ1Y3QgaXB2Nl9jb21wX2hkciAqaXBjaDsKIAlpbnQgcGxlbiwgZGxlbjsKIAlzdHJ1Y3QgaXBjb21wX2RhdGEgKmlwY2QgPSB4LT5kYXRhOwogCXU4ICpzdGFydCwgKnNjcmF0Y2g7CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKIAlpbnQgY3B1OwogCi0JaWYgKChza2JfaXNfbm9ubGluZWFyKHNrYikgfHwgc2tiX2Nsb25lZChza2IpKSAmJgotCQlza2JfbGluZWFyaXplKHNrYiwgR0ZQX0FUT01JQykgIT0gMCkgewotCQllcnIgPSAtRU5PTUVNOworCWlmIChza2JfbGluZWFyaXplX2Nvdyhza2IpKQogCQlnb3RvIG91dDsKLQl9CiAKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKIAkvKiBSZW1vdmUgaXBjb21wIGhlYWRlciBhbmQgZGVjb21wcmVzcyBvcmlnaW5hbCBwYXlsb2FkICovCiAJaXBoID0gc2tiLT5uaC5pcHY2aDsKLQl0bXBfaGRyID0ga21hbGxvYyhoZHJfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXRtcF9oZHIpCi0JCWdvdG8gb3V0OwotCW1lbWNweSh0bXBfaGRyLCBpcGgsIGhkcl9sZW4pOwotCW5leHRoZHIgPSAqKHU4ICopc2tiLT5kYXRhOwotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2X2NvbXBfaGRyKSk7IAotCXNrYi0+bmgucmF3ICs9IHNpemVvZihzdHJ1Y3QgaXB2Nl9jb21wX2hkcik7Ci0JbWVtY3B5KHNrYi0+bmgucmF3LCB0bXBfaGRyLCBoZHJfbGVuKTsKLQlpcGggPSBza2ItPm5oLmlwdjZoOwotCWlwaC0+cGF5bG9hZF9sZW4gPSBodG9ucyhudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAtIHNpemVvZihzdHJ1Y3QgaXB2Nl9jb21wX2hkcikpOwotCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJaXBjaCA9ICh2b2lkICopc2tiLT5kYXRhOworCXNrYi0+aC5yYXcgPSBza2ItPm5oLnJhdyArIHNpemVvZigqaXBjaCk7CisJX19za2JfcHVsbChza2IsIHNpemVvZigqaXBjaCkpOwogCiAJLyogZGVjb21wcmVzc2lvbiAqLwogCXBsZW4gPSBza2ItPmxlbjsKQEAgLTEyNSwxOCArMTEyLDExIEBACiAKIAlza2JfcHV0KHNrYiwgZGxlbiAtIHBsZW4pOwogCW1lbWNweShza2ItPmRhdGEsIHNjcmF0Y2gsIGRsZW4pOworCWVyciA9IGlwY2gtPm5leHRoZHI7CiAKLQlpcGggPSBza2ItPm5oLmlwdjZoOwotCWlwaC0+cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItPmxlbik7Ci0JCiBvdXRfcHV0X2NwdToKIAlwdXRfY3B1KCk7CiBvdXQ6Ci0Ja2ZyZWUodG1wX2hkcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcl9vdXQ7Ci0JcmV0dXJuIG5leHRoZHI7Ci1lcnJvcl9vdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU5LDEwICsxMzksOCBAQAogCQlnb3RvIG91dF9vazsKIAl9CiAKLQlpZiAoKHNrYl9pc19ub25saW5lYXIoc2tiKSB8fCBza2JfY2xvbmVkKHNrYikpICYmCi0JCXNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSB7CisJaWYgKHNrYl9saW5lYXJpemVfY293KHNrYikpCiAJCWdvdG8gb3V0X29rOwotCX0KIAogCS8qIGNvbXByZXNzaW9uICovCiAJcGxlbiA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDkzYmFlMzYuLjJhNzFjM2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIAkvKiBUaGlzIGlzIHdoZXJlIHdlIGNhbGwgdGhlIGhlbHBlcjogYXMgdGhlIHBhY2tldCBnb2VzIG91dC4gKi8KIAljdCA9IG5mX2N0X2dldCgqcHNrYiwgJmN0aW5mbyk7Ci0JaWYgKCFjdCkKKwlpZiAoIWN0IHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpCiAJCWdvdG8gb3V0OwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCA4NmM2NzAzLi5lZjE4YTdiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLQlpZiAoaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcgJiYKKwlpZiAobmZfY29ubnRyYWNrX2NoZWNrc3VtICYmIGhvb2tudW0gPT0gTkZfSVA2X1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwNl9jaGVja3N1bShza2IsIGhvb2tudW0sIGRhdGFvZmYsIElQUFJPVE9fSUNNUFY2KSkgewogCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkgICAgICAibmZfY3RfaWNtcHY2OiBJQ01QdjYgY2hlY2tzdW0gZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwppbmRleCAzZTMxOTAzLi5jMzJhMDI5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCkBAIC00NTYsMTMgKzQ1Niw5IEBACiAJCURFQlVHUCgicXVldWU6IG1lc3NhZ2UgaXMgdG9vIHNob3J0LlxuIik7CiAJCWdvdG8gZXJyOwogCX0KLQlpZiAoZW5kLW9mZnNldCA8IHNrYi0+bGVuKSB7Ci0JCWlmIChwc2tiX3RyaW0oc2tiLCBlbmQgLSBvZmZzZXQpKSB7Ci0JCQlERUJVR1AoIkNhbid0IHRyaW1cbiIpOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCWlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCBlbmQgLSBvZmZzZXQpKSB7CisJCURFQlVHUCgiQ2FuJ3QgdHJpbVxuIik7CisJCWdvdG8gZXJyOwogCX0KIAogCS8qIEZpbmQgb3V0IHdoaWNoIGZyYWdtZW50cyBhcmUgaW4gZnJvbnQgYW5kIGF0IHRoZSBiYWNrIG9mIHVzCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCAzMDFlZWU3Li5hNTBlYjMwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTEyMTgsOCArMTIxOCwxNiBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJcmV0ID0gMDsKIAlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKLQkJaWYgKCF0Y3BfcHJlcXVldWUoc2ssIHNrYikpCi0JCQlyZXQgPSB0Y3BfdjZfZG9fcmN2KHNrLCBza2IpOworI2lmZGVmIENPTkZJR19ORVRfRE1BCisgICAgICAgICAgICAgICAgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisgICAgICAgICAgICAgICAgaWYgKHRwLT51Y29weS5kbWFfY2hhbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRjcF92Nl9kb19yY3Yoc2ssIHNrYik7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCisJCXsKKwkJCWlmICghdGNwX3ByZXF1ZXVlKHNrLCBza2IpKQorCQkJCXJldCA9IHRjcF92Nl9kb19yY3Yoc2ssIHNrYik7CisJCX0KIAl9IGVsc2UKIAkJc2tfYWRkX2JhY2tsb2coc2ssIHNrYik7CiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKaW5kZXggMDBjZmRlZS4uMDQwNWQ3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCkBAIC0xMywyMSArMTMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+Ci0jaW5jbHVkZSA8bmV0L2RzZmllbGQuaD4KLSNpbmNsdWRlIDxuZXQvaW5ldF9lY24uaD4KLSNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcGlwNl9lY25fZGVjYXBzdWxhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaXB2NmhkciAqb3V0ZXJfaXBoID0gc2tiLT5uaC5pcHY2aDsKLQlzdHJ1Y3QgaXB2NmhkciAqaW5uZXJfaXBoID0gc2tiLT5oLmlwdjZoOwotCi0JaWYgKElORVRfRUNOX2lzX2NlKGlwdjZfZ2V0X2RzZmllbGQob3V0ZXJfaXBoKSkpCi0JCUlQNl9FQ05fc2V0X2NlKGlubmVyX2lwaCk7Ci19Ci0KIGludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzcGkpCiB7CiAJaW50IGVycjsKQEAgLTgxLDIxICs2OSwxMCBAQAogCiAJCXhmcm1fdmVjW3hmcm1fbnIrK10gPSB4OwogCisJCWlmICh4LT5tb2RlLT5pbnB1dCh4LCBza2IpKQorCQkJZ290byBkcm9wOworCiAJCWlmICh4LT5wcm9wcy5tb2RlKSB7IC8qIFhYWCAqLwotCQkJaWYgKG5leHRoZHIgIT0gSVBQUk9UT19JUFY2KQotCQkJCWdvdG8gZHJvcDsKLQkJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKQotCQkJCWdvdG8gZHJvcDsKLQkJCWlmIChza2JfY2xvbmVkKHNrYikgJiYKLQkJCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpCi0JCQkJZ290byBkcm9wOwotCQkJaWYgKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9ERUNBUF9EU0NQKQotCQkJCWlwdjZfY29weV9kc2NwKHNrYi0+bmguaXB2NmgsIHNrYi0+aC5pcHY2aCk7Ci0JCQlpZiAoISh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfTk9FQ04pKQotCQkJCWlwaXA2X2Vjbl9kZWNhcHN1bGF0ZShza2IpOwotCQkJc2tiLT5tYWMucmF3ID0gbWVtbW92ZShza2ItPmRhdGEgLSBza2ItPm1hY19sZW4sCi0JCQkJCSAgICAgICBza2ItPm1hYy5yYXcsIHNrYi0+bWFjX2xlbik7Ci0JCQlza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKIAkJCWRlY2FwcyA9IDE7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfbW9kZV90cmFuc3BvcnQuYyBiL25ldC9pcHY2L3hmcm02X21vZGVfdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExZDcxMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY2L3hmcm02X21vZGVfdHJhbnNwb3J0LmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIHhmcm02X21vZGVfdHJhbnNwb3J0LmMgLSBUcmFuc3BvcnQgbW9kZSBlbmNhcHN1bGF0aW9uIGZvciBJUHY2LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBVU0FHSS9XSURFIFByb2plY3QKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPG5ldC9kc3QuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC94ZnJtLmg+CisKKy8qIEFkZCBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBUaGUgSVAgaGVhZGVyIGFuZCBtdXRhYmxlIGV4dGVuc2lvbiBoZWFkZXJzIHdpbGwgYmUgbW92ZWQgZm9yd2FyZCB0byBtYWtlCisgKiBzcGFjZSBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgorICoKKyAqIE9uIGV4aXQsIHNrYi0+aCB3aWxsIGJlIHNldCB0byB0aGUgc3RhcnQgb2YgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyIHRvIGJlCisgKiBmaWxsZWQgaW4gYnkgeC0+dHlwZS0+b3V0cHV0IGFuZCBza2ItPm5oIHdpbGwgYmUgc2V0IHRvIHRoZSBuZXh0aGVhZGVyIGZpZWxkCisgKiBvZiB0aGUgZXh0ZW5zaW9uIGhlYWRlciBkaXJlY3RseSBwcmVjZWRpbmcgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyLCBvciBpbgorICogaXRzIGFic2VuY2UsIHRoYXQgb2YgdGhlIHRvcCBJUCBoZWFkZXIuICBUaGUgdmFsdWUgb2Ygc2tiLT5kYXRhIHdpbGwgYWx3YXlzCisgKiBwb2ludCB0byB0aGUgdG9wIElQIGhlYWRlci4KKyAqLworc3RhdGljIGludCB4ZnJtNl90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBza2ItPmRzdC0+eGZybTsKKwlzdHJ1Y3QgaXB2NmhkciAqaXBoOworCXU4ICpwcmV2aGRyOworCWludCBoZHJfbGVuOworCisJc2tiX3B1c2goc2tiLCB4LT5wcm9wcy5oZWFkZXJfbGVuKTsKKwlpcGggPSBza2ItPm5oLmlwdjZoOworCisJaGRyX2xlbiA9IGlwNl9maW5kXzFzdGZyYWdvcHQoc2tiLCAmcHJldmhkcik7CisJc2tiLT5uaC5yYXcgPSBwcmV2aGRyIC0geC0+cHJvcHMuaGVhZGVyX2xlbjsKKwlza2ItPmgucmF3ID0gc2tiLT5kYXRhICsgaGRyX2xlbjsKKwltZW1tb3ZlKHNrYi0+ZGF0YSwgaXBoLCBoZHJfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVtb3ZlIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgorICoKKyAqIFRoZSBJUCBoZWFkZXIgd2lsbCBiZSBtb3ZlZCBvdmVyIHRoZSB0b3Agb2YgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgorICoKKyAqIE9uIGVudHJ5LCBza2ItPmggc2hhbGwgcG9pbnQgdG8gd2hlcmUgdGhlIElQIGhlYWRlciBzaG91bGQgYmUgYW5kIHNrYi0+bmgKKyAqIHNoYWxsIGJlIHNldCB0byB3aGVyZSB0aGUgSVAgaGVhZGVyIGN1cnJlbnRseSBpcy4gIHNrYi0+ZGF0YSBzaGFsbCBwb2ludAorICogdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkLgorICovCitzdGF0aWMgaW50IHhmcm02X3RyYW5zcG9ydF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaWhsID0gc2tiLT5kYXRhIC0gc2tiLT5oLnJhdzsKKworCWlmIChza2ItPmgucmF3ICE9IHNrYi0+bmgucmF3KQorCQlza2ItPm5oLnJhdyA9IG1lbW1vdmUoc2tiLT5oLnJhdywgc2tiLT5uaC5yYXcsIGlobCk7CisJc2tiLT5uaC5pcHY2aC0+cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItPmxlbiArIGlobCAtCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOworCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGZybV9tb2RlIHhmcm02X3RyYW5zcG9ydF9tb2RlID0geworCS5pbnB1dCA9IHhmcm02X3RyYW5zcG9ydF9pbnB1dCwKKwkub3V0cHV0ID0geGZybTZfdHJhbnNwb3J0X291dHB1dCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZW5jYXAgPSBYRlJNX01PREVfVFJBTlNQT1JULAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGZybTZfdHJhbnNwb3J0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4geGZybV9yZWdpc3Rlcl9tb2RlKCZ4ZnJtNl90cmFuc3BvcnRfbW9kZSwgQUZfSU5FVDYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeGZybTZfdHJhbnNwb3J0X2V4aXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0geGZybV91bnJlZ2lzdGVyX21vZGUoJnhmcm02X3RyYW5zcG9ydF9tb2RlLCBBRl9JTkVUNik7CisJQlVHX09OKGVycik7Cit9CisKK21vZHVsZV9pbml0KHhmcm02X3RyYW5zcG9ydF9pbml0KTsKK21vZHVsZV9leGl0KHhmcm02X3RyYW5zcG9ydF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19YRlJNX01PREUoQUZfSU5FVDYsIFhGUk1fTU9ERV9UUkFOU1BPUlQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYyBiL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNzliZTIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogeGZybTZfbW9kZV90dW5uZWwuYyAtIFR1bm5lbCBtb2RlIGVuY2Fwc3VsYXRpb24gZm9yIElQdjYuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFVTQUdJL1dJREUgUHJvamVjdAorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bmV0L2RzZmllbGQuaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBpcDZfZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlwdjZoZHIgKm91dGVyX2lwaCA9IHNrYi0+bmguaXB2Nmg7CisJc3RydWN0IGlwdjZoZHIgKmlubmVyX2lwaCA9IHNrYi0+aC5pcHY2aDsKKworCWlmIChJTkVUX0VDTl9pc19jZShpcHY2X2dldF9kc2ZpZWxkKG91dGVyX2lwaCkpKQorCQlJUDZfRUNOX3NldF9jZShpbm5lcl9pcGgpOworfQorCisvKiBBZGQgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCisgKgorICogVGhlIHRvcCBJUCBoZWFkZXIgd2lsbCBiZSBjb25zdHJ1Y3RlZCBwZXIgUkZDIDI0MDEuICBUaGUgZm9sbG93aW5nIGZpZWxkcworICogaW4gaXQgc2hhbGwgYmUgZmlsbGVkIGluIGJ5IHgtPnR5cGUtPm91dHB1dDoKKyAqCXBheWxvYWRfbGVuCisgKgorICogT24gZXhpdCwgc2tiLT5oIHdpbGwgYmUgc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgdG8gYmUKKyAqIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQgYW5kIHNrYi0+bmggd2lsbCBiZSBzZXQgdG8gdGhlIG5leHRoZWFkZXIgZmllbGQKKyAqIG9mIHRoZSBleHRlbnNpb24gaGVhZGVyIGRpcmVjdGx5IHByZWNlZGluZyB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIsIG9yIGluCisgKiBpdHMgYWJzZW5jZSwgdGhhdCBvZiB0aGUgdG9wIElQIGhlYWRlci4gIFRoZSB2YWx1ZSBvZiBza2ItPmRhdGEgd2lsbCBhbHdheXMKKyAqIHBvaW50IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgorICovCitzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2ItPmRzdDsKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdC0+eGZybTsKKwlzdHJ1Y3QgaXB2NmhkciAqaXBoLCAqdG9wX2lwaDsKKwlpbnQgZHNmaWVsZDsKKworCXNrYl9wdXNoKHNrYiwgeC0+cHJvcHMuaGVhZGVyX2xlbik7CisJaXBoID0gc2tiLT5uaC5pcHY2aDsKKworCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCXRvcF9pcGggPSBza2ItPm5oLmlwdjZoOworCXNrYi0+bmgucmF3ID0gJnRvcF9pcGgtPm5leHRoZHI7CisJc2tiLT5oLmlwdjZoID0gdG9wX2lwaCArIDE7CisKKwl0b3BfaXBoLT52ZXJzaW9uID0gNjsKKwl0b3BfaXBoLT5wcmlvcml0eSA9IGlwaC0+cHJpb3JpdHk7CisJdG9wX2lwaC0+Zmxvd19sYmxbMF0gPSBpcGgtPmZsb3dfbGJsWzBdOworCXRvcF9pcGgtPmZsb3dfbGJsWzFdID0gaXBoLT5mbG93X2xibFsxXTsKKwl0b3BfaXBoLT5mbG93X2xibFsyXSA9IGlwaC0+Zmxvd19sYmxbMl07CisJZHNmaWVsZCA9IGlwdjZfZ2V0X2RzZmllbGQodG9wX2lwaCk7CisJZHNmaWVsZCA9IElORVRfRUNOX2VuY2Fwc3VsYXRlKGRzZmllbGQsIGRzZmllbGQpOworCWlmICh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfTk9FQ04pCisJCWRzZmllbGQgJj0gfklORVRfRUNOX01BU0s7CisJaXB2Nl9jaGFuZ2VfZHNmaWVsZCh0b3BfaXBoLCAwLCBkc2ZpZWxkKTsKKwl0b3BfaXBoLT5uZXh0aGRyID0gSVBQUk9UT19JUFY2OyAKKwl0b3BfaXBoLT5ob3BfbGltaXQgPSBkc3RfbWV0cmljKGRzdC0+Y2hpbGQsIFJUQVhfSE9QTElNSVQpOworCWlwdjZfYWRkcl9jb3B5KCZ0b3BfaXBoLT5zYWRkciwgKHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5wcm9wcy5zYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPmRhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPmlkLmRhZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ZnJtNl90dW5uZWxfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoc2tiLT5uaC5yYXdbSVA2Q0Ioc2tiKS0+bmhvZmZdICE9IElQUFJPVE9fSVBWNikKKwkJZ290byBvdXQ7CisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCisJCWdvdG8gb3V0OworCisJaWYgKHNrYl9jbG9uZWQoc2tiKSAmJgorCSAgICAoZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX0RFQ0FQX0RTQ1ApCisJCWlwdjZfY29weV9kc2NwKHNrYi0+bmguaXB2NmgsIHNrYi0+aC5pcHY2aCk7CisJaWYgKCEoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX05PRUNOKSkKKwkJaXBpcDZfZWNuX2RlY2Fwc3VsYXRlKHNrYik7CisJc2tiLT5tYWMucmF3ID0gbWVtbW92ZShza2ItPmRhdGEgLSBza2ItPm1hY19sZW4sCisJCQkgICAgICAgc2tiLT5tYWMucmF3LCBza2ItPm1hY19sZW4pOworCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCWVyciA9IDA7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHhmcm1fbW9kZSB4ZnJtNl90dW5uZWxfbW9kZSA9IHsKKwkuaW5wdXQgPSB4ZnJtNl90dW5uZWxfaW5wdXQsCisJLm91dHB1dCA9IHhmcm02X3R1bm5lbF9vdXRwdXQsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmVuY2FwID0gWEZSTV9NT0RFX1RVTk5FTCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHhmcm02X3R1bm5lbF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHhmcm1fcmVnaXN0ZXJfbW9kZSgmeGZybTZfdHVubmVsX21vZGUsIEFGX0lORVQ2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHhmcm02X3R1bm5lbF9leGl0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHhmcm1fdW5yZWdpc3Rlcl9tb2RlKCZ4ZnJtNl90dW5uZWxfbW9kZSwgQUZfSU5FVDYpOworCUJVR19PTihlcnIpOworfQorCittb2R1bGVfaW5pdCh4ZnJtNl90dW5uZWxfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZnJtNl90dW5uZWxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfWEZSTV9NT0RFKEFGX0lORVQ2LCBYRlJNX01PREVfVFVOTkVMKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggODAyNDIxNy4uMTZlODQyNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTE0LDY4ICsxNCw5IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgotI2luY2x1ZGUgPG5ldC9kc2ZpZWxkLmg+Ci0jaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCi0vKiBBZGQgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCi0gKgotICogSW4gdHJhbnNwb3J0IG1vZGUsIHRoZSBJUCBoZWFkZXIgYW5kIG11dGFibGUgZXh0ZW5zaW9uIGhlYWRlcnMgd2lsbCBiZSBtb3ZlZAotICogZm9yd2FyZCB0byBtYWtlIHNwYWNlIGZvciB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCi0gKgotICogSW4gdHVubmVsIG1vZGUsIHRoZSB0b3AgSVAgaGVhZGVyIHdpbGwgYmUgY29uc3RydWN0ZWQgcGVyIFJGQyAyNDAxLgotICogVGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gaXQgc2hhbGwgYmUgZmlsbGVkIGluIGJ5IHgtPnR5cGUtPm91dHB1dDoKLSAqCXBheWxvYWRfbGVuCi0gKgotICogT24gZXhpdCwgc2tiLT5oIHdpbGwgYmUgc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgdG8gYmUKLSAqIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQgYW5kIHNrYi0+bmggd2lsbCBiZSBzZXQgdG8gdGhlIG5leHRoZWFkZXIgZmllbGQKLSAqIG9mIHRoZSBleHRlbnNpb24gaGVhZGVyIGRpcmVjdGx5IHByZWNlZGluZyB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIsIG9yIGluCi0gKiBpdHMgYWJzZW5jZSwgdGhhdCBvZiB0aGUgdG9wIElQIGhlYWRlci4gIFRoZSB2YWx1ZSBvZiBza2ItPmRhdGEgd2lsbCBhbHdheXMKLSAqIHBvaW50IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgotICovCi1zdGF0aWMgdm9pZCB4ZnJtNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYi0+ZHN0OwotCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LT54ZnJtOwotCXN0cnVjdCBpcHY2aGRyICppcGgsICp0b3BfaXBoOwotCWludCBkc2ZpZWxkOwotCi0Jc2tiX3B1c2goc2tiLCB4LT5wcm9wcy5oZWFkZXJfbGVuKTsKLQlpcGggPSBza2ItPm5oLmlwdjZoOwotCi0JaWYgKCF4LT5wcm9wcy5tb2RlKSB7Ci0JCXU4ICpwcmV2aGRyOwotCQlpbnQgaGRyX2xlbjsKLQotCQloZHJfbGVuID0gaXA2X2ZpbmRfMXN0ZnJhZ29wdChza2IsICZwcmV2aGRyKTsKLQkJc2tiLT5uaC5yYXcgPSBwcmV2aGRyIC0geC0+cHJvcHMuaGVhZGVyX2xlbjsKLQkJc2tiLT5oLnJhdyA9IHNrYi0+ZGF0YSArIGhkcl9sZW47Ci0JCW1lbW1vdmUoc2tiLT5kYXRhLCBpcGgsIGhkcl9sZW4pOwotCQlyZXR1cm47Ci0JfQotCi0Jc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7Ci0JdG9wX2lwaCA9IHNrYi0+bmguaXB2Nmg7Ci0Jc2tiLT5uaC5yYXcgPSAmdG9wX2lwaC0+bmV4dGhkcjsKLQlza2ItPmguaXB2NmggPSB0b3BfaXBoICsgMTsKLQotCXRvcF9pcGgtPnZlcnNpb24gPSA2OwotCXRvcF9pcGgtPnByaW9yaXR5ID0gaXBoLT5wcmlvcml0eTsKLQl0b3BfaXBoLT5mbG93X2xibFswXSA9IGlwaC0+Zmxvd19sYmxbMF07Ci0JdG9wX2lwaC0+Zmxvd19sYmxbMV0gPSBpcGgtPmZsb3dfbGJsWzFdOwotCXRvcF9pcGgtPmZsb3dfbGJsWzJdID0gaXBoLT5mbG93X2xibFsyXTsKLQlkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZCh0b3BfaXBoKTsKLQlkc2ZpZWxkID0gSU5FVF9FQ05fZW5jYXBzdWxhdGUoZHNmaWVsZCwgZHNmaWVsZCk7Ci0JaWYgKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9OT0VDTikKLQkJZHNmaWVsZCAmPSB+SU5FVF9FQ05fTUFTSzsKLQlpcHY2X2NoYW5nZV9kc2ZpZWxkKHRvcF9pcGgsIDAsIGRzZmllbGQpOwotCXRvcF9pcGgtPm5leHRoZHIgPSBJUFBST1RPX0lQVjY7IAotCXRvcF9pcGgtPmhvcF9saW1pdCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7Ci0JaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPnNhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPnByb3BzLnNhZGRyKTsKLQlpcHY2X2FkZHJfY29weSgmdG9wX2lwaC0+ZGFkZHIsIChzdHJ1Y3QgaW42X2FkZHIgKikmeC0+aWQuZGFkZHIpOwotfQotCiBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9jaGVja19zaXplKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IG10dSwgcmV0ID0gMDsKQEAgLTExOCw3ICs1OSw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCi0JCXhmcm02X2VuY2FwKHNrYik7CisJCWVyciA9IHgtPm1vZGUtPm91dHB1dChza2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKIAogCQllcnIgPSB4LT50eXBlLT5vdXRwdXQoeCwgc2tiKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggODhjODQwZi4uZWU3MTVmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTIzLDggKzIzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyB4ZnJtNl9kc3Rfb3BzOwogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTZfcG9saWN5X2FmaW5mbzsKIAotc3RhdGljIHN0cnVjdCB4ZnJtX3R5cGVfbWFwIHhmcm02X3R5cGVfbWFwID0geyAubG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQgfTsKLQogc3RhdGljIGludCB4ZnJtNl9kc3RfbG9va3VwKHN0cnVjdCB4ZnJtX2RzdCAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTI0OSw5ICsyNDcsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCB4ZnJtNl9nYXJiYWdlX2NvbGxlY3Qodm9pZCkKIHsKLQlyZWFkX2xvY2soJnhmcm02X3BvbGljeV9hZmluZm8ubG9jayk7CiAJeGZybTZfcG9saWN5X2FmaW5mby5nYXJiYWdlX2NvbGxlY3QoKTsKLQlyZWFkX3VubG9jaygmeGZybTZfcG9saWN5X2FmaW5mby5sb2NrKTsKIAlyZXR1cm4gKGF0b21pY19yZWFkKCZ4ZnJtNl9kc3Rfb3BzLmVudHJpZXMpID4geGZybTZfZHN0X29wcy5nY190aHJlc2gqMik7CiB9CiAKQEAgLTMxMSw4ICszMDcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyB4ZnJtNl9wb2xpY3lfYWZpbmZvID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVDYsCi0JLmxvY2sgPSAJCVJXX0xPQ0tfVU5MT0NLRUQsCi0JLnR5cGVfbWFwID0gCQkmeGZybTZfdHlwZV9tYXAsCiAJLmRzdF9vcHMgPQkJJnhmcm02X2RzdF9vcHMsCiAJLmRzdF9sb29rdXAgPQkJeGZybTZfZHN0X2xvb2t1cCwKIAkuZmluZF9idW5kbGUgPQkJX194ZnJtNl9maW5kX2J1bmRsZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3N0YXRlLmMgYi9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCmluZGV4IGE1NzIzMDIuLmIzMzI5NmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKKysrIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwpAQCAtMTM1LDcgKzEzNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8geGZybTZfc3RhdGVfYWZpbmZvID0gewogCS5mYW1pbHkJCQk9IEFGX0lORVQ2LAotCS5sb2NrCQkJPSBSV19MT0NLX1VOTE9DS0VELAogCS5pbml0X3RlbXBzZWwJCT0gX194ZnJtNl9pbml0X3RlbXBzZWwsCiAJLnN0YXRlX2xvb2t1cAkJPSBfX3hmcm02X3N0YXRlX2xvb2t1cCwKIAkuZmluZF9hY3EJCT0gX194ZnJtNl9maW5kX2FjcSwKZGlmZiAtLWdpdCBhL25ldC9pcHgvaXB4X3JvdXRlLmMgYi9uZXQvaXB4L2lweF9yb3V0ZS5jCmluZGV4IGEzOTRjNmYuLmJiYTM0MzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvaXB4X3JvdXRlLmMKKysrIGIvbmV0L2lweC9pcHhfcm91dGUuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJfQkKIAogCS8qIEFwcGx5IGNoZWNrc3VtLiBOb3QgYWxsb3dlZCBvbiA4MDIuMyBsaW5rcy4gKi8KLQlpZiAoc2stPnNrX25vX2NoZWNrIHx8IGludHJmYy0+aWZfZGxpbmtfdHlwZSA9PSBJUFhfRlJBTUVfODAyMykKKwlpZiAoc2stPnNrX25vX2NoZWNrIHx8IGludHJmYy0+aWZfZGxpbmtfdHlwZSA9PSBodG9ucyhJUFhfRlJBTUVfODAyMykpCiAJCWlweC0+aXB4X2NoZWNrc3VtID0gMHhGRkZGOwogCWVsc2UKIAkJaXB4LT5pcHhfY2hlY2tzdW0gPSBpcHhfY2tzdW0oaXB4LCBsZW4gKyBzaXplb2Yoc3RydWN0IGlweGhkcikpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXAuYyBiL25ldC9pcmRhL2lybG1wLmMKaW5kZXggYzE5ZTljZS4uNTdlYTE2MCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXAuYworKysgYi9uZXQvaXJkYS9pcmxtcC5jCkBAIC00NCw2ICs0NCw4IEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXAuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcF9mcmFtZS5oPgogCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCiBzdGF0aWMgX191OCBpcmxtcF9maW5kX2ZyZWVfc2xzYXAodm9pZCk7CiBzdGF0aWMgaW50IGlybG1wX3Nsc2FwX2ludXNlKF9fdTggc2xzYXBfc2VsKTsKIApAQCAtODQwLDYgKzg0Miw3IEBACiB2b2lkIGlybG1wX2RvX2Rpc2NvdmVyeShpbnQgbnNsb3RzKQogewogCXN0cnVjdCBsYXBfY2IgKmxhcDsKKwlfX3UxNiAqZGF0YV9oaW50c3A7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHZhbHVlIGlzIHNhbmUgKi8KIAlpZiAoKG5zbG90cyAhPSAxKSAmJiAobnNsb3RzICE9IDYpICYmIChuc2xvdHMgIT0gOCkgJiYgKG5zbG90cyAhPSAxNikpewpAQCAtODQ5LDcgKzg1Miw4IEBACiAJfQogCiAJLyogQ29uc3RydWN0IG5ldyBkaXNjb3ZlcnkgaW5mbyB0byBiZSB1c2VkIGJ5IElyTEFQLCAqLwotCXUxNmhvKGlybG1wLT5kaXNjb3ZlcnlfY21kLmRhdGEuaGludHMpID0gaXJsbXAtPmhpbnRzLndvcmQ7CisJZGF0YV9oaW50c3AgPSAoX191MTYgKikgaXJsbXAtPmRpc2NvdmVyeV9jbWQuZGF0YS5oaW50czsKKwlwdXRfdW5hbGlnbmVkKGlybG1wLT5oaW50cy53b3JkLCBkYXRhX2hpbnRzcCk7CiAKIAkvKgogCSAqICBTZXQgY2hhcmFjdGVyIHNldCBmb3IgZGV2aWNlIG5hbWUgKHdlIHVzZSBBU0NJSSksIGFuZApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggODU5NTgyMi4uZDVlMjEyMSAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0xNDU0LDIxICsxNDU0LDIzIEBACiAJaWYgKHggPT0gTlVMTCkKIAkJcmV0dXJuIC1FU1JDSDsKIAorCWlmICgoZXJyID0gc2VjdXJpdHlfeGZybV9zdGF0ZV9kZWxldGUoeCkpKQorCQlnb3RvIG91dDsKKwogCWlmICh4ZnJtX3N0YXRlX2tlcm4oeCkpIHsKLQkJeGZybV9zdGF0ZV9wdXQoeCk7Ci0JCXJldHVybiAtRVBFUk07CisJCWVyciA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CiAJfQogCQogCWVyciA9IHhmcm1fc3RhdGVfZGVsZXRlKHgpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXhmcm1fc3RhdGVfcHV0KHgpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CiAKIAljLnNlcSA9IGhkci0+c2FkYl9tc2dfc2VxOwogCWMucGlkID0gaGRyLT5zYWRiX21zZ19waWQ7CiAJYy5ldmVudCA9IFhGUk1fTVNHX0RFTFNBOwogCWttX3N0YXRlX25vdGlmeSh4LCAmYyk7CitvdXQ6CiAJeGZybV9zdGF0ZV9wdXQoeCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMjI3NCwxMSArMjI3NiwxNCBAQAogCiAJZXJyID0gMDsKIAorCWlmICgoZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKHhwKSkpCisJCWdvdG8gb3V0OwogCWMuc2VxID0gaGRyLT5zYWRiX21zZ19zZXE7CiAJYy5waWQgPSBoZHItPnNhZGJfbXNnX3BpZDsKIAljLmV2ZW50ID0gWEZSTV9NU0dfREVMUE9MSUNZOwogCWttX3BvbGljeV9ub3RpZnkoeHAsIHBvbC0+c2FkYl94X3BvbGljeV9kaXItMSwgJmMpOwogCitvdXQ6CiAJeGZybV9wb2xfcHV0KHhwKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggNWEwNGRiNy4uNzVjOWIxNCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC02NzQsNyArNjc0LDcgQEAKIAogCWxvY2tfc29jayhzayk7CiAJY29waWVkID0gLUVOT1RDT05OOwotCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikKKwlpZiAodW5saWtlbHkoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0gJiYgc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pKQogCQlnb3RvIG91dDsKIAogCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgbm9uYmxvY2spOwpAQCAtNzMzLDcgKzczMyw3IEBACiAJCQlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKQogCQkJCWJyZWFrOwogCi0JCQlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkgeworCQkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNICYmIHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKIAkJCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ET05FKSkgewogCQkJCQkvKgogCQkJCQkgKiBUaGlzIG9jY3VycyB3aGVuIHVzZXIgdHJpZXMgdG8gcmVhZApAQCAtNzg5LDcgKzc4OSw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIShmbGFncyAmIE1TR19QRUVLKSkgewotCQkJc2tfZWF0X3NrYihzaywgc2tiKTsKKwkJCXNrX2VhdF9za2Ioc2ssIHNrYiwgMCk7CiAJCQkqc2VxID0gMDsKIAkJfQogCX0gd2hpbGUgKGxlbiA+IDApOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfaWYuYyBiL25ldC9sbGMvbGxjX2lmLmMKaW5kZXggYmE5MGY3Zi4uNWFlNDdiZSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfaWYuYworKysgYi9uZXQvbGxjL2xsY19pZi5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8bmV0L2xsY19jX3N0Lmg+CiAjaW5jbHVkZSA8bmV0L3RjcF9zdGF0ZXMuaD4KIAotdTggbGxjX21hY19udWxsX3ZhcltJRkhXQUREUkxFTl07Ci0KIC8qKgogICoJbGxjX2J1aWxkX2FuZF9zZW5kX3BrdCAtIENvbm5lY3Rpb24gZGF0YSBzZW5kaW5nIGZvciB1cHBlciBsYXllcnMuCiAgKglAc2s6IGNvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2lucHV0LmMgYi9uZXQvbGxjL2xsY19pbnB1dC5jCmluZGV4IGQ2MmUwZjkuLjk0ZDIzNjggMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2lucHV0LmMKKysrIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwpAQCAtMTQyLDYgKzE0Miw4IEBACiAJc3RydWN0IGxsY19zYXAgKnNhcDsKIAlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1OwogCWludCBkZXN0OworCWludCAoKnJjdikoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwKKwkJICAgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogCiAJLyoKIAkgKiBXaGVuIHRoZSBpbnRlcmZhY2UgaXMgaW4gcHJvbWlzYy4gbW9kZSwgZHJvcCBhbGwgdGhlIGNyYXAgdGhhdCBpdApAQCAtMTY5LDkgKzE3MSwxMSBAQAogCSAqIEZpcnN0IHRoZSB1cHBlciBsYXllciBwcm90b2NvbHMgdGhhdCBkb24ndCBuZWVkIHRoZSBmdWxsCiAJICogTExDIGZ1bmN0aW9uYWxpdHkKIAkgKi8KLQlpZiAoc2FwLT5yY3ZfZnVuYykgewotCQlzYXAtPnJjdl9mdW5jKHNrYiwgZGV2LCBwdCwgb3JpZ19kZXYpOwotCQlnb3RvIG91dF9wdXQ7CisJcmN2ID0gcmN1X2RlcmVmZXJlbmNlKHNhcC0+cmN2X2Z1bmMpOworCWlmIChyY3YpIHsKKyAJCXN0cnVjdCBza19idWZmICpjc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisgCQlpZiAoY3NrYikKKyAJCQlyY3YoY3NrYiwgZGV2LCBwdCwgb3JpZ19kZXYpOwogCX0KIAlkZXN0ID0gbGxjX3BkdV90eXBlKHNrYik7CiAJaWYgKHVubGlrZWx5KCFkZXN0IHx8ICFsbGNfdHlwZV9oYW5kbGVyc1tkZXN0IC0gMV0pKQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfc2FwLmMgYi9uZXQvbGxjL2xsY19zYXAuYwppbmRleCA0MDI5Y2VlLi4yMGM0ZWI1IDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19zYXAuYworKysgYi9uZXQvbGxjL2xsY19zYXAuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAgKgltYWMsIGFuZCBsb2NhbCBzYXAuIFJldHVybnMgcG9pbnRlciBmb3Igc29ja2V0IGZvdW5kLCAlTlVMTCBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2xvb2t1cF9kZ3JhbShzdHJ1Y3QgbGxjX3NhcCAqc2FwLAotCQkJCSAgICAgc3RydWN0IGxsY19hZGRyICpsYWRkcikKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCiB7CiAJc3RydWN0IHNvY2sgKnJjOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwpAQCAtMzA0LDE5ICszMDQsNjIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogCWxsY19zYXBfbWNhc3QgLSBEZWxpdmVyIG11bHRpY2FzdCBQRFUncyB0byBhbGwgbWF0Y2hpbmcgZGF0YWdyYW0gc29ja2V0cy4KKyAqCUBzYXA6IFNBUAorICoJQGxhZGRyOiBhZGRyZXNzIG9mIGxvY2FsIExMQyAoTUFDICsgU0FQKQorICoKKyAqCVNlYXJjaCBzb2NrZXQgbGlzdCBvZiB0aGUgU0FQIGFuZCBmaW5kcyBjb25uZWN0aW9ucyB3aXRoIHNhbWUgc2FwLgorICoJRGVsaXZlciBjbG9uZSB0byBlYWNoLgorICovCitzdGF0aWMgdm9pZCBsbGNfc2FwX21jYXN0KHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIsCisJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCisJcmVhZF9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzYXAtPnNrX2xpc3QubGlzdCkgeworCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJCXN0cnVjdCBza19idWZmICpza2IxOworCisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX0RHUkFNKQorCQkJY29udGludWU7CisKKwkJaWYgKGxsYy0+bGFkZHIubHNhcCAhPSBsYWRkci0+bHNhcCkKKwkJCWNvbnRpbnVlOworCisJCXNrYjEgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IxKQorCQkJYnJlYWs7CisKKwkJc29ja19ob2xkKHNrKTsKKwkJc2tiX3NldF9vd25lcl9yKHNrYjEsIHNrKTsKKwkJbGxjX3NhcF9yY3Yoc2FwLCBza2IxKTsKKwkJc29ja19wdXQoc2spOworCX0KKwlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworfQorCisKIHZvaWQgbGxjX3NhcF9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGxsY19hZGRyIGxhZGRyOwotCXN0cnVjdCBzb2NrICpzazsKIAogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgbGFkZHIubWFjKTsKIAlsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgJmxhZGRyLmxzYXApOwogCi0Jc2sgPSBsbGNfbG9va3VwX2RncmFtKHNhcCwgJmxhZGRyKTsKLQlpZiAoc2spIHsKLQkJc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwotCQlsbGNfc2FwX3JjdihzYXAsIHNrYik7Ci0JCXNvY2tfcHV0KHNrKTsKLQl9IGVsc2UKKwlpZiAobGxjX21hY19tdWx0aWNhc3QobGFkZHIubWFjKSkgeworCQlsbGNfc2FwX21jYXN0KHNhcCwgJmxhZGRyLCBza2IpOwogCQlrZnJlZV9za2Ioc2tiKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBsbGNfbG9va3VwX2RncmFtKHNhcCwgJmxhZGRyKTsKKwkJaWYgKHNrKSB7CisJCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CisJCQlsbGNfc2FwX3JjdihzYXAsIHNrYik7CisJCQlzb2NrX3B1dChzayk7CisJCX0gZWxzZQorCQkJa2ZyZWVfc2tiKHNrYik7CisJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGUyODkzZWYuLmIxNjIyYjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTYwLDYgKzYwLDE4IEBACiAJICBvZiBwYWNrZXRzLCBidXQgdGhpcyBtYXJrIHZhbHVlIGlzIGtlcHQgaW4gdGhlIGNvbm50cmFjayBzZXNzaW9uCiAJICBpbnN0ZWFkIG9mIHRoZSBpbmRpdmlkdWFsIHBhY2tldHMuCiAKK2NvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSSworCWJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyAmJiBORVRXT1JLX1NFQ01BUksKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHNlY3VyaXR5IG1hcmtpbmdzIHRvIGJlIGFwcGxpZWQgdG8KKwkgIGNvbm5lY3Rpb25zLiAgVHlwaWNhbGx5IHRoZXkgYXJlIGNvcGllZCB0byBjb25uZWN0aW9ucyBmcm9tCisJICBwYWNrZXRzIHVzaW5nIHRoZSBDT05OU0VDTUFSSyB0YXJnZXQgYW5kIGNvcGllZCBiYWNrIGZyb20KKwkgIGNvbm5lY3Rpb25zIHRvIHBhY2tldHMgd2l0aCB0aGUgc2FtZSB0YXJnZXQsIHdpdGggdGhlIHBhY2tldHMKKwkgIGJlaW5nIG9yaWdpbmFsbHkgbGFiZWxlZCB2aWEgU0VDTUFSSy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCiBjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UUwogCWJvb2wgIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSwpAQCAtMTc0LDYgKzE4NiwyNiBAQAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4uICBJZiB1bnN1cmUsIHNheSBgTicuCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUksKKwl0cmlzdGF0ZSAnIlNFQ01BUksiIHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMgJiYgTkVUV09SS19TRUNNQVJLCisJaGVscAorCSAgVGhlIFNFQ01BUksgdGFyZ2V0IGFsbG93cyBzZWN1cml0eSBtYXJraW5nIG9mIG5ldHdvcmsKKwkgIHBhY2tldHMsIGZvciB1c2Ugd2l0aCBzZWN1cml0eSBzdWJzeXN0ZW1zLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUksKKwl0cmlzdGF0ZSAnIkNPTk5TRUNNQVJLIiB0YXJnZXQgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTICYmIChORl9DT05OVFJBQ0tfU0VDTUFSSyB8fCBJUF9ORl9DT05OVFJBQ0tfU0VDTUFSSykKKwloZWxwCisJICBUaGUgQ09OTlNFQ01BUksgdGFyZ2V0IGNvcGllcyBzZWN1cml0eSBtYXJraW5ncyBmcm9tIHBhY2tldHMKKwkgIHRvIGNvbm5lY3Rpb25zLCBhbmQgcmVzdG9yZXMgc2VjdXJpdHkgbWFya2luZ3MgZnJvbSBjb25uZWN0aW9ucworCSAgdG8gcGFja2V0cyAoaWYgdGhlIHBhY2tldHMgYXJlIG5vdCBhbHJlYWR5IG1hcmtlZCkuICBUaGlzIHdvdWxkCisJICBub3JtYWxseSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFNFQ01BUksgdGFyZ2V0LgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UCiAJdHJpc3RhdGUgICciY29tbWVudCIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCkBAIC0zMjksNiArMzYxLDE2IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX1FVT1RBCisJdHJpc3RhdGUgJyJxdW90YSIgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBxdW90YScgbWF0Y2gsIHdoaWNoIGFsbG93cyB0byBtYXRjaCBvbiBhCisJICBieXRlIGNvdW50ZXIuCisKKwkgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+LiAgSWYgdW5zdXJlLCBzYXkgYE4nLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX1JFQUxNCiAJdHJpc3RhdGUgICcicmVhbG0iIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUwpAQCAtMzY1LDYgKzQwNywxMiBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMKKwl0cmlzdGF0ZSAnInN0YXRpc3RpYyIgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCisJaGVscAorCSAgc3RhdGlzdGljIG1vZHVsZQorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX1NUUklORwogCXRyaXN0YXRlICAnInN0cmluZyIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCA5NWI3ZTQxLi42ZmE0Yjc1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTI4LDYgKzI4LDggQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUkspICs9IHh0X01BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSkgKz0geHRfTkZRVUVVRS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLKSArPSB4dF9OT1RSQUNLLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUkspICs9IHh0X1NFQ01BUksubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUkspICs9IHh0X0NPTk5TRUNNQVJLLm8KIAogIyBtYXRjaGVzCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQpICs9IHh0X2NvbW1lbnQubwpAQCAtNDQsOSArNDYsMTEgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUKSArPSB4dF9tdWx0aXBvcnQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kpICs9IHh0X3BvbGljeS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUpICs9IHh0X3BrdHR5cGUubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSkgKz0geHRfcXVvdGEubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSkgKz0geHRfcmVhbG0ubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQKSArPSB4dF9zY3RwLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUpICs9IHh0X3N0YXRlLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDKSArPSB4dF9zdGF0aXN0aWMubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcpICs9IHh0X3N0cmluZy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUykgKz0geHRfdGNwbXNzLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVikgKz0geHRfcGh5c2Rldi5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggZjliODNmOS4uY2QyOTlmNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtOTkwLDYgKzk5MCw5IEBACiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLCiAJCWNvbm50cmFjay0+bWFyayA9IGV4cC0+bWFzdGVyLT5tYXJrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCisJCWNvbm50cmFjay0+c2VjbWFyayA9IGV4cC0+bWFzdGVyLT5zZWNtYXJrOworI2VuZGlmCiAJCW5mX2Nvbm50cmFja19nZXQoJmNvbm50cmFjay0+bWFzdGVyLT5jdF9nZW5lcmFsKTsKIAkJTkZfQ1RfU1RBVF9JTkMoZXhwZWN0X25ldyk7CiAJfSBlbHNlCkBAIC0xMzk2LDYgKzEzOTksMTIgQEAKIAogCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAorCS8qIE9ubHkgdXBkYXRlIGlmIHRoaXMgaXMgbm90IGEgZml4ZWQgdGltZW91dCAqLworCWlmICh0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsICZjdC0+c3RhdHVzKSkgeworCQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIElmIG5vdCBpbiBoYXNoIHRhYmxlLCB0aW1lciB3aWxsIG5vdCBiZSBhY3RpdmUgeWV0ICovCiAJaWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7CiAJCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBleHRyYV9qaWZmaWVzOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwppbmRleCBlMzhhNGI1Li4xMWQzYmUyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwpAQCAtNjcsMzcgKzY3LDQ4IEBACiAJCQkgICAgIGNoYXIpOwogCiBzdGF0aWMgc3RydWN0IGZ0cF9zZWFyY2ggewotCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiAJY29uc3QgY2hhciAqcGF0dGVybjsKIAlzaXplX3QgcGxlbjsKIAljaGFyIHNraXA7CiAJY2hhciB0ZXJtOwogCWVudW0gaXBfY3RfZnRwX3R5cGUgZnRwdHlwZTsKIAlpbnQgKCpnZXRudW0pKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgbmZfY29ubnRyYWNrX21hbiAqLCBjaGFyKTsKLX0gc2VhcmNoW10gPSB7Ci0JewotCQlJUF9DVF9ESVJfT1JJR0lOQUwsCi0JCSJQT1JUIiwgc2l6ZW9mKCJQT1JUIikgLSAxLCAnICcsICdccicsCi0JCUlQX0NUX0ZUUF9QT1JULAotCQl0cnlfcmZjOTU5LAorfSBzZWFyY2hbSVBfQ1RfRElSX01BWF1bMl0gPSB7CisJW0lQX0NUX0RJUl9PUklHSU5BTF0gPSB7CisJCXsKKwkJCS5wYXR0ZXJuCT0gIlBPUlQiLAorCQkJLnBsZW4JCT0gc2l6ZW9mKCJQT1JUIikgLSAxLAorCQkJLnNraXAJCT0gJyAnLAorCQkJLnRlcm0JCT0gJ1xyJywKKwkJCS5mdHB0eXBlCT0gSVBfQ1RfRlRQX1BPUlQsCisJCQkuZ2V0bnVtCQk9IHRyeV9yZmM5NTksCisJCX0sCisJCXsKKwkJCS5wYXR0ZXJuCT0gIkVQUlQiLAorCQkJLnBsZW4JCT0gc2l6ZW9mKCJFUFJUIikgLSAxLAorCQkJLnNraXAJCT0gJyAnLAorCQkJLnRlcm0JCT0gJ1xyJywKKwkJCS5mdHB0eXBlCT0gSVBfQ1RfRlRQX0VQUlQsCisJCQkuZ2V0bnVtCQk9IHRyeV9lcHJ0LAorCQl9LAogCX0sCi0JewotCQlJUF9DVF9ESVJfUkVQTFksCi0JCSIyMjcgIiwgc2l6ZW9mKCIyMjcgIikgLSAxLCAnKCcsICcpJywKLQkJSVBfQ1RfRlRQX1BBU1YsCi0JCXRyeV9yZmM5NTksCi0JfSwKLQl7Ci0JCUlQX0NUX0RJUl9PUklHSU5BTCwKLQkJIkVQUlQiLCBzaXplb2YoIkVQUlQiKSAtIDEsICcgJywgJ1xyJywKLQkJSVBfQ1RfRlRQX0VQUlQsCi0JCXRyeV9lcHJ0LAotCX0sCi0JewotCQlJUF9DVF9ESVJfUkVQTFksCi0JCSIyMjkgIiwgc2l6ZW9mKCIyMjkgIikgLSAxLCAnKCcsICcpJywKLQkJSVBfQ1RfRlRQX0VQU1YsCi0JCXRyeV9lcHN2X3Jlc3BvbnNlLAorCVtJUF9DVF9ESVJfUkVQTFldID0geworCQl7CisJCQkucGF0dGVybgk9ICIyMjcgIiwKKwkJCS5wbGVuCQk9IHNpemVvZigiMjI3ICIpIC0gMSwKKwkJCS5za2lwCQk9ICcoJywKKwkJCS50ZXJtCQk9ICcpJywKKwkJCS5mdHB0eXBlCT0gSVBfQ1RfRlRQX1BBU1YsCisJCQkuZ2V0bnVtCQk9IHRyeV9yZmM5NTksCisJCX0sCisJCXsKKwkJCS5wYXR0ZXJuCT0gIjIyOSAiLAorCQkJLnBsZW4JCT0gc2l6ZW9mKCIyMjkgIikgLSAxLAorCQkJLnNraXAJCT0gJygnLAorCQkJLnRlcm0JCT0gJyknLAorCQkJLmZ0cHR5cGUJPSBJUF9DVF9GVFBfRVBTViwKKwkJCS5nZXRudW0JCT0gdHJ5X2Vwc3ZfcmVzcG9uc2UsCisJCX0sCiAJfSwKIH07CiAKQEAgLTQ5MiwxNyArNTAzLDE1IEBACiAJbWVtY3B5KGNtZC51My5hbGwsICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmFsbCwKIAkgICAgICAgc2l6ZW9mKGNtZC51My5hbGwpKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlYXJjaCk7IGkrKykgewotCQlpZiAoc2VhcmNoW2ldLmRpciAhPSBkaXIpIGNvbnRpbnVlOwotCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VhcmNoW2Rpcl0pOyBpKyspIHsKIAkJZm91bmQgPSBmaW5kX3BhdHRlcm4oZmJfcHRyLCBkYXRhbGVuLAotCQkJCSAgICAgc2VhcmNoW2ldLnBhdHRlcm4sCi0JCQkJICAgICBzZWFyY2hbaV0ucGxlbiwKLQkJCQkgICAgIHNlYXJjaFtpXS5za2lwLAotCQkJCSAgICAgc2VhcmNoW2ldLnRlcm0sCisJCQkJICAgICBzZWFyY2hbZGlyXVtpXS5wYXR0ZXJuLAorCQkJCSAgICAgc2VhcmNoW2Rpcl1baV0ucGxlbiwKKwkJCQkgICAgIHNlYXJjaFtkaXJdW2ldLnNraXAsCisJCQkJICAgICBzZWFyY2hbZGlyXVtpXS50ZXJtLAogCQkJCSAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sCiAJCQkJICAgICAmY21kLAotCQkJCSAgICAgc2VhcmNoW2ldLmdldG51bSk7CisJCQkJICAgICBzZWFyY2hbZGlyXVtpXS5nZXRudW0pOwogCQlpZiAoZm91bmQpIGJyZWFrOwogCX0KIAlpZiAoZm91bmQgPT0gLTEpIHsKQEAgLTUxMiw3ICs1MjEsNyBAQAogCQkgICB0aGlzIGNhc2UuICovCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoImNvbm50cmFja19mdHA6IHBhcnRpYWwgJXMgJXUrJXVcbiIsCi0JCQkgICAgICAgc2VhcmNoW2ldLnBhdHRlcm4sCisJCQkgICAgICAgc2VhcmNoW2Rpcl1baV0ucGF0dGVybiwKIAkJCSAgICAgICBudG9obCh0aC0+c2VxKSwgZGF0YWxlbik7CiAJCXJldCA9IE5GX0RST1A7CiAJCWdvdG8gb3V0OwpAQCAtNTk3LDcgKzYwNiw3IEBACiAJLyogTm93LCBOQVQgbWlnaHQgd2FudCB0byBtYW5nbGUgdGhlIHBhY2tldCwgYW5kIHJlZ2lzdGVyIHRoZQogCSAqIChwb3NzaWJseSBjaGFuZ2VkKSBleHBlY3RhdGlvbiBpdHNlbGYuICovCiAJaWYgKG5mX25hdF9mdHBfaG9vaykKLQkJcmV0ID0gbmZfbmF0X2Z0cF9ob29rKHBza2IsIGN0aW5mbywgc2VhcmNoW2ldLmZ0cHR5cGUsCisJCXJldCA9IG5mX25hdF9mdHBfaG9vayhwc2tiLCBjdGluZm8sIHNlYXJjaFtkaXJdW2ldLmZ0cHR5cGUsCiAJCQkJICAgICAgbWF0Y2hvZmYsIG1hdGNobGVuLCBleHAsICZzZXEpOwogCWVsc2UgewogCQkvKiBDYW4ndCBleHBlY3QgdGhpcz8gIEJlc3QgdG8gZHJvcCBwYWNrZXQgbm93LiAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGJkMTBlYjkuLmI4YzdjNTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTQwNyw2ICs0MDcsOCBAQAogCiBzdGF0aWMgaW50IGN0bmV0bGlua19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKKwlpZiAoY2ItPmFyZ3NbMV0pCisJCW5mX2N0X3B1dCgoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXSk7CiAJREVCVUdQKCJlbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiAwOwogfQpAQCAtNDE2LDEwICs0MTgsOSBAQAogc3RhdGljIGludAogY3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZl9jb25uICpjdCA9IE5VTEw7CisJc3RydWN0IG5mX2Nvbm4gKmN0LCAqbGFzdDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IGxpc3RfaGVhZCAqaTsKLQl1X2ludDMyX3QgKmlkID0gKHVfaW50MzJfdCAqKSAmY2ItPmFyZ3NbMV07CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IE5MTVNHX0RBVEEoY2ItPm5saCk7CiAJdV9pbnQ4X3QgbDNwcm90byA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7CiAKQEAgLTQyNyw3ICs0MjgsOSBAQAogCQkJY2ItPmFyZ3NbMF0sICppZCk7CiAKIAlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyssICppZCA9IDApIHsKKwlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKK3Jlc3RhcnQ6CisJCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKIAkJbGlzdF9mb3JfZWFjaF9wcmV2KGksICZuZl9jb25udHJhY2tfaGFzaFtjYi0+YXJnc1swXV0pIHsKIAkJCWggPSAoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICopIGk7CiAJCQlpZiAoRElSRUNUSU9OKGgpICE9IElQX0NUX0RJUl9PUklHSU5BTCkKQEAgLTQzOCwxNyArNDQxLDMwIEBACiAJCQkgKiB0aGVuIGR1bXAgZXZlcnl0aGluZy4gKi8KIAkJCWlmIChsM3Byb3RvICYmIEwzUFJPVE8oY3QpICE9IGwzcHJvdG8pCiAJCQkJY29udGludWU7Ci0JCQlpZiAoY3QtPmlkIDw9ICppZCkKLQkJCQljb250aW51ZTsKKwkJCWlmIChsYXN0ICE9IE5VTEwpIHsKKwkJCQlpZiAoY3QgPT0gbGFzdCkgeworCQkJCQluZl9jdF9wdXQobGFzdCk7CisJCQkJCWNiLT5hcmdzWzFdID0gMDsKKwkJCQkJbGFzdCA9IE5VTEw7CisJCQkJfSBlbHNlCisJCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKGN0bmV0bGlua19maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgCWNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCUlQQ1ROTF9NU0dfQ1RfTkVXLAotCQkJCQkJMSwgY3QpIDwgMCkKKwkJCQkJCTEsIGN0KSA8IDApIHsKKwkJCQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisJCQkJY2ItPmFyZ3NbMV0gPSAodW5zaWduZWQgbG9uZyljdDsKIAkJCQlnb3RvIG91dDsKLQkJCSppZCA9IGN0LT5pZDsKKwkJCX0KKwkJfQorCQlpZiAobGFzdCAhPSBOVUxMKSB7CisJCQluZl9jdF9wdXQobGFzdCk7CisJCQljYi0+YXJnc1sxXSA9IDA7CisJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAl9Ci1vdXQ6CQorb3V0OgogCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAKIAlERUJVR1AoImxlYXZpbmcsIGxhc3QgYnVja2V0PSVsdSBpZD0ldVxuIiwgY2ItPmFyZ3NbMF0sICppZCk7CkBAIC02NDEsNyArNjU3LDcgQEAKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1jdG5ldGxpbmtfcGFyc2VfbmF0KHN0cnVjdCBuZmF0dHIgKmNkYVtdLAorY3RuZXRsaW5rX3BhcnNlX25hdChzdHJ1Y3QgbmZhdHRyICpuYXQsCiAJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBpcF9uYXRfcmFuZ2UgKnJhbmdlKQogewogCXN0cnVjdCBuZmF0dHIgKnRiW0NUQV9OQVRfTUFYXTsKQEAgLTY1MSw3ICs2NjcsNyBAQAogCiAJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YoKnJhbmdlKSk7CiAJCi0JbmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX05BVF9NQVgsIGNkYVtDVEFfTkFULTFdKTsKKwluZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfTkFUX01BWCwgbmF0KTsKIAogCWlmIChuZmF0dHJfYmFkX3NpemUodGIsIENUQV9OQVRfTUFYLCBjdGFfbWluX25hdCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODY2LDM5ICs4ODIsMzAgQEAKIAkJLyogQVNTVVJFRCBiaXQgY2FuIG9ubHkgYmUgc2V0ICovCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNkYVtDVEFfTkFULTFdKSB7CisJaWYgKGNkYVtDVEFfTkFUX1NSQy0xXSB8fCBjZGFbQ1RBX05BVF9EU1QtMV0pIHsKICNpZm5kZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZWxzZQotCQl1bnNpZ25lZCBpbnQgaG9va251bTsKIAkJc3RydWN0IGlwX25hdF9yYW5nZSByYW5nZTsKIAotCQlpZiAoY3RuZXRsaW5rX3BhcnNlX25hdChjZGEsIGN0LCAmcmFuZ2UpIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCURFQlVHUCgiTkFUOiAldS4ldS4ldS4ldS0ldS4ldS4ldS4ldToldS0ldVxuIiwgCi0JCSAgICAgICBOSVBRVUFEKHJhbmdlLm1pbl9pcCksIE5JUFFVQUQocmFuZ2UubWF4X2lwKSwKLQkJICAgICAgIGh0b25zKHJhbmdlLm1pbi5hbGwpLCBodG9ucyhyYW5nZS5tYXguYWxsKSk7Ci0JCQotCQkvKiBUaGlzIGlzIHRyaWNreSBidXQgaXQgd29ya3MuIGlwX25hdF9zZXR1cF9pbmZvIG5lZWRzIHRoZQotCQkgKiBob29rIG51bWJlciBhcyBwYXJhbWV0ZXIsIHNvIGxldCdzIGRvIHRoZSBjb3JyZWN0IAotCQkgKiBjb252ZXJzaW9uIGFuZCBydW4gYXdheSAqLwotCQlpZiAoc3RhdHVzICYgSVBTX1NSQ19OQVRfRE9ORSkKLQkJCWhvb2tudW0gPSBORl9JUF9QT1NUX1JPVVRJTkc7IC8qIElQX05BVF9NQU5JUF9TUkMgKi8KLQkJZWxzZSBpZiAoc3RhdHVzICYgSVBTX0RTVF9OQVRfRE9ORSkKLQkJCWhvb2tudW0gPSBORl9JUF9QUkVfUk9VVElORzsgIC8qIElQX05BVF9NQU5JUF9EU1QgKi8KLQkJZWxzZSAKLQkJCXJldHVybiAtRUlOVkFMOyAvKiBNaXNzaW5nIE5BVCBmbGFncyAqLwotCi0JCURFQlVHUCgiTkFUIHN0YXR1czogJWx1XG4iLCAKLQkJICAgICAgIHN0YXR1cyAmIChJUFNfTkFUX01BU0sgfCBJUFNfTkFUX0RPTkVfTUFTSykpOwotCQkKLQkJaWYgKGlwX25hdF9pbml0aWFsaXplZChjdCwgSE9PSzJNQU5JUChob29rbnVtKSkpCi0JCQlyZXR1cm4gLUVFWElTVDsKLQkJaXBfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgaG9va251bSk7Ci0KLSAgICAgICAgICAgICAgICBERUJVR1AoIk5BVCBzdGF0dXMgYWZ0ZXIgc2V0dXBfaW5mbzogJWx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICBjdC0+c3RhdHVzICYgKElQU19OQVRfTUFTSyB8IElQU19OQVRfRE9ORV9NQVNLKSk7CisJCWlmIChjZGFbQ1RBX05BVF9EU1QtMV0pIHsKKwkJCWlmIChjdG5ldGxpbmtfcGFyc2VfbmF0KGNkYVtDVEFfTkFUX0RTVC0xXSwgY3QsCisJCQkJCQkmcmFuZ2UpIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChpcF9uYXRfaW5pdGlhbGl6ZWQoY3QsCisJCQkJCSAgICAgICBIT09LMk1BTklQKE5GX0lQX1BSRV9ST1VUSU5HKSkpCisJCQkJcmV0dXJuIC1FRVhJU1Q7CisJCQlpcF9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBob29rbnVtKTsKKwkJfQorCQlpZiAoY2RhW0NUQV9OQVRfU1JDLTFdKSB7CisJCQlpZiAoY3RuZXRsaW5rX3BhcnNlX25hdChjZGFbQ1RBX05BVF9TUkMtMV0sIGN0LAorCQkJCQkJJnJhbmdlKSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoaXBfbmF0X2luaXRpYWxpemVkKGN0LAorCQkJCQkgICAgICAgSE9PSzJNQU5JUChORl9JUF9QT1NUX1JPVVRJTkcpKSkKKwkJCQlyZXR1cm4gLUVFWElTVDsKKwkJCWlwX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIGhvb2tudW0pOworCQl9CiAjZW5kaWYKIAl9CiAKQEAgLTExMjIsNyArMTEyOSw3IEBACiAJLyogaW1wbGljaXQgJ2Vsc2UnICovCiAKIAkvKiB3ZSBvbmx5IGFsbG93IG5hdCBjb25maWcgZm9yIG5ldyBjb25udHJhY2tzICovCi0JaWYgKGNkYVtDVEFfTkFULTFdKSB7CisJaWYgKGNkYVtDVEFfTkFUX1NSQy0xXSB8fCBjZGFbQ1RBX05BVF9EU1QtMV0pIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggNjk4OTlmMi4uMTJmYjdjMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTgyOCw4ICs4MjgsOSBAQAogCSAqIGFuZCBtb3Jlb3ZlciByb290IG1pZ2h0IHNlbmQgcmF3IHBhY2tldHMuCiAJICovCiAJLyogRklYTUU6IFNvdXJjZSByb3V0ZSBJUCBvcHRpb24gcGFja2V0cyAtLVJSICovCi0JaWYgKCgocGYgPT0gUEZfSU5FVCAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HKSB8fAotCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gID09IE5GX0lQNl9QUkVfUk9VVElORykpICYmCisJaWYgKG5mX2Nvbm50cmFja19jaGVja3N1bSAmJgorCSAgICAoKHBmID09IFBGX0lORVQgJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORykgfHwKKwkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtID09IE5GX0lQNl9QUkVfUk9VVElORykpICYmCiAJICAgIG5mX2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgSVBQUk9UT19UQ1AsIHBmKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQogCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCBkOTNlZGJmLi5hZTA3ZWJlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMTM0LDcgKzEzNCw4IEBACiAJICogYmVjYXVzZSB0aGUgc2VtYW50aWMgb2YgQ0hFQ0tTVU1fSFcgaXMgZGlmZmVyZW50IHRoZXJlCiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KLQlpZiAoKChwZiA9PSBQRl9JTkVUICYmIGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcpIHx8CisJaWYgKG5mX2Nvbm50cmFja19jaGVja3N1bSAmJgorCSAgICAoKHBmID09IFBGX0lORVQgJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORykgfHwKIAkgICAgIChwZiA9PSBQRl9JTkVUNiAmJiBob29rbnVtID09IE5GX0lQNl9QUkVfUk9VVElORykpICYmCiAJICAgIG5mX2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgSVBQUk9UT19VRFAsIHBmKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19VRFApKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDQwODk2MGMuLmUzNGM1NzQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTIxMyw2ICsyMTMsMTEgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSworCWlmIChzZXFfcHJpbnRmKHMsICJzZWNtYXJrPSV1ICIsIGNvbm50cmFjay0+c2VjbWFyaykpCisJCXJldHVybiAtRU5PU1BDOworI2VuZGlmCisKIAlpZiAoc2VxX3ByaW50ZihzLCAidXNlPSV1XG4iLCBhdG9taWNfcmVhZCgmY29ubnRyYWNrLT5jdF9nZW5lcmFsLnVzZSkpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAkKQEAgLTQ1NSw2ICs0NjAsOCBAQAogc3RhdGljIGludCBsb2dfaW52YWxpZF9wcm90b19taW4gPSAwOwogc3RhdGljIGludCBsb2dfaW52YWxpZF9wcm90b19tYXggPSAyNTU7CiAKK2ludCBuZl9jb25udHJhY2tfY2hlY2tzdW0gPSAxOworCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mX2N0X3N5c2N0bF9oZWFkZXI7CiAKIHN0YXRpYyBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7CkBAIC00ODMsNiArNDkwLDE0IEBACiAJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0NIRUNLU1VNLAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2NoZWNrc3VtIiwKKwkJLmRhdGEJCT0gJm5mX2Nvbm50cmFja19jaGVja3N1bSwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJewogCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5ULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9zZW50IiwKIAkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X3N5bl9zZW50LApAQCAtODUxLDYgKzg2Niw3IEBACiBFWFBPUlRfU1lNQk9MKG5mX2N0X2wzcHJvdG9fZmluZF9nZXQpOwogRVhQT1JUX1NZTUJPTChuZl9jdF9sM3Byb3RvX3B1dCk7CiBFWFBPUlRfU1lNQk9MKG5mX2N0X2wzcHJvdG9zKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jaGVja3N1bSk7CiBFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19leHBlY3RfYWxsb2MpOwogRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfZXhwZWN0X3B1dCk7CiBFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwMTFlMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgdG8gY29weSBzZWN1cml0eSBtYXJraW5ncyBmcm9tIHBhY2tldHMKKyAqIHRvIGNvbm5lY3Rpb25zLCBhbmQgcmVzdG9yZSBzZWN1cml0eSBtYXJraW5ncyBmcm9tIGNvbm5lY3Rpb25zCisgKiBiYWNrIHRvIHBhY2tldHMuICBUaGlzIHdvdWxkIG5vcm1hbGx5IGJlIHBlcmZvcm1lZCBpbiBjb25qdW5jdGlvbgorICogd2l0aCB0aGUgU0VDTUFSSyB0YXJnZXQgYW5kIHN0YXRlIG1hdGNoLgorICoKKyAqIEJhc2VkIHNvbWV3aGF0IG9uIENPTk5NQVJLOgorICogICBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgorICogICAgYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KKyAqCisgKiAoQykgMjAwNiBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oPgorCisjZGVmaW5lIFBGWCAiQ09OTlNFQ01BUks6ICIKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImlwWzZddGFibGVzIENPTk5TRUNNQVJLIG1vZHVsZSIpOworTU9EVUxFX0FMSUFTKCJpcHRfQ09OTlNFQ01BUksiKTsKK01PRFVMRV9BTElBUygiaXA2dF9DT05OU0VDTUFSSyIpOworCisvKgorICogSWYgdGhlIHBhY2tldCBoYXMgYSBzZWN1cml0eSBtYXJrIGFuZCB0aGUgY29ubmVjdGlvbiBkb2VzIG5vdCwgY29weQorICogdGhlIHNlY3VyaXR5IG1hcmsgZnJvbSB0aGUgcGFja2V0IHRvIHRoZSBjb25uZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBzZWNtYXJrX3NhdmUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoc2tiLT5zZWNtYXJrKSB7CisJCXUzMiAqY29ubnNlY21hcms7CisJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCisJCWNvbm5zZWNtYXJrID0gbmZfY3RfZ2V0X3NlY21hcmsoc2tiLCAmY3RpbmZvKTsKKwkJaWYgKGNvbm5zZWNtYXJrICYmICEqY29ubnNlY21hcmspCisJCQlpZiAoKmNvbm5zZWNtYXJrICE9IHNrYi0+c2VjbWFyaykKKwkJCQkqY29ubnNlY21hcmsgPSBza2ItPnNlY21hcms7CisJfQorfQorCisvKgorICogSWYgcGFja2V0IGhhcyBubyBzZWN1cml0eSBtYXJrLCBhbmQgdGhlIGNvbm5lY3Rpb24gZG9lcywgcmVzdG9yZSB0aGUKKyAqIHNlY3VyaXR5IG1hcmsgZnJvbSB0aGUgY29ubmVjdGlvbiB0byB0aGUgcGFja2V0LgorICovCitzdGF0aWMgdm9pZCBzZWNtYXJrX3Jlc3RvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoIXNrYi0+c2VjbWFyaykgeworCQl1MzIgKmNvbm5zZWNtYXJrOworCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKworCQljb25uc2VjbWFyayA9IG5mX2N0X2dldF9zZWNtYXJrKHNrYiwgJmN0aW5mbyk7CisJCWlmIChjb25uc2VjbWFyayAmJiAqY29ubnNlY21hcmspCisJCQlpZiAoc2tiLT5zZWNtYXJrICE9ICpjb25uc2VjbWFyaykKKwkJCQlza2ItPnNlY21hcmsgPSAqY29ubnNlY21hcms7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAorCQkJICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sIHZvaWQgKnVzZXJpbmZvKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKKwljb25zdCBzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8gKmluZm8gPSB0YXJnaW5mbzsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCWNhc2UgQ09OTlNFQ01BUktfU0FWRToKKwkJc2VjbWFya19zYXZlKHNrYik7CisJCWJyZWFrOworCisJY2FzZSBDT05OU0VDTUFSS19SRVNUT1JFOgorCQlzZWNtYXJrX3Jlc3RvcmUoc2tiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgKmVudHJ5LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsIHZvaWQgKnRhcmdpbmZvLAorCQkgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2luZm9zaXplLCB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQoreworCXN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyAqaW5mbyA9IHRhcmdpbmZvOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJY2FzZSBDT05OU0VDTUFSS19TQVZFOgorCWNhc2UgQ09OTlNFQ01BUktfUkVTVE9SRToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaW52YWxpZCBtb2RlOiAlaHVcbiIsIGluZm8tPm1vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaXB0X2Nvbm5zZWNtYXJrX3JlZyA9IHsKKwkubmFtZQkJPSAiQ09OTlNFQ01BUksiLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyksCisJLnRhYmxlCQk9ICJtYW5nbGUiLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5yZXZpc2lvbgk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpcDZ0X2Nvbm5zZWNtYXJrX3JlZyA9IHsKKwkubmFtZQkJPSAiQ09OTlNFQ01BUksiLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyksCisJLnRhYmxlCQk9ICJtYW5nbGUiLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkucmV2aXNpb24JPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfY29ubnNlY21hcmtfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwluZWVkX2Nvbm50cmFjaygpOworCisJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZpcHRfY29ubnNlY21hcmtfcmVnKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZpcDZ0X2Nvbm5zZWNtYXJrX3JlZyk7CisJaWYgKGVycikKKwkJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9jb25uc2VjbWFya19yZWcpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X2Nvbm5zZWNtYXJrX2Zpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXA2dF9jb25uc2VjbWFya19yZWcpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcHRfY29ubnNlY21hcmtfcmVnKTsKK30KKworbW9kdWxlX2luaXQoeHRfY29ubnNlY21hcmtfaW5pdCk7Cittb2R1bGVfZXhpdCh4dF9jb25uc2VjbWFya19maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjZTljNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogTW9kdWxlIGZvciBtb2RpZnlpbmcgdGhlIHNlY21hcmsgZmllbGQgb2YgdGhlIHNrYiwgZm9yIHVzZSBieQorICogc2VjdXJpdHkgc3Vic3lzdGVtcy4KKyAqCisgKiBCYXNlZCBvbiB0aGUgbmZtYXJrIG1hdGNoIGJ5OgorICogKEMpIDE5OTktMjAwMSBNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT4KKyAqCisgKiAoQykgMjAwNiBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiaXBbNl10YWJsZXMgU0VDTUFSSyBtb2RpZmljYXRpb24gbW9kdWxlIik7CitNT0RVTEVfQUxJQVMoImlwdF9TRUNNQVJLIik7CitNT0RVTEVfQUxJQVMoImlwNnRfU0VDTUFSSyIpOworCisjZGVmaW5lIFBGWCAiU0VDTUFSSzogIgorCitzdGF0aWMgdTggbW9kZTsKKworc3RhdGljIHVuc2lnbmVkIGludCB0YXJnZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LCB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCSAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKKwkJCSAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLCB2b2lkICp1c2VyaW5mbykKK3sKKwl1MzIgc2VjbWFyayA9IDA7CisJY29uc3Qgc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm8gKmluZm8gPSB0YXJnaW5mbzsKKworCUJVR19PTihpbmZvLT5tb2RlICE9IG1vZGUpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBTRUNNQVJLX01PREVfU0VMOgorCQlzZWNtYXJrID0gaW5mby0+dS5zZWwuc2Vsc2lkOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWlmICgoKnBza2IpLT5zZWNtYXJrICE9IHNlY21hcmspCisJCSgqcHNrYiktPnNlY21hcmsgPSBzZWNtYXJrOworCisJcmV0dXJuIFhUX0NPTlRJTlVFOworfQorCitzdGF0aWMgaW50IGNoZWNrZW50cnlfc2VsaW51eChzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyAqaW5mbykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gKnNlbCA9ICZpbmZvLT51LnNlbDsKKworCWVyciA9IHNlbGludXhfc3RyaW5nX3RvX3NpZChzZWwtPnNlbGN0eCwgJnNlbC0+c2Vsc2lkKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVJTlZBTCkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJpbnZhbGlkIFNFTGludXggY29udGV4dCBcJyVzXCdcbiIsCisJCQkgICAgICAgc2VsLT5zZWxjdHgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXNlbC0+c2Vsc2lkKSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJ1bmFibGUgdG8gbWFwIFNFTGludXggY29udGV4dCBcJyVzXCdcbiIsCisJCSAgICAgICBzZWwtPnNlbGN0eCk7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IHNlbGludXhfcmVsYWJlbF9wYWNrZXRfcGVybWlzc2lvbihzZWwtPnNlbHNpZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidW5hYmxlIHRvIG9idGFpbiByZWxhYmVsaW5nIHBlcm1pc3Npb25cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgY29uc3Qgdm9pZCAqZW50cnksCisJCSAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdm9pZCAqdGFyZ2luZm8sCisJCSAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm8gKmluZm8gPSB0YXJnaW5mbzsKKworCWlmIChtb2RlICYmIG1vZGUgIT0gaW5mby0+bW9kZSkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAibW9kZSBhbHJlYWR5IHNldCB0byAlaHUgY2Fubm90IG1peCB3aXRoICIKKwkJICAgICAgICJydWxlcyBmb3IgbW9kZSAlaHVcbiIsIG1vZGUsIGluZm8tPm1vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwljYXNlIFNFQ01BUktfTU9ERV9TRUw6CisJCWlmICghY2hlY2tlbnRyeV9zZWxpbnV4KGluZm8pKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgbW9kZTogJWh1XG4iLCBpbmZvLT5tb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFtb2RlKQorCQltb2RlID0gaW5mby0+bW9kZTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaXB0X3NlY21hcmtfcmVnID0geworCS5uYW1lCQk9ICJTRUNNQVJLIiwKKwkudGFyZ2V0CQk9IHRhcmdldCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyksCisJLnRhYmxlCQk9ICJtYW5nbGUiLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5yZXZpc2lvbgk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpcDZ0X3NlY21hcmtfcmVnID0geworCS5uYW1lCQk9ICJTRUNNQVJLIiwKKwkudGFyZ2V0CQk9IHRhcmdldCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyksCisJLnRhYmxlCQk9ICJtYW5nbGUiLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkucmV2aXNpb24JPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfc2VjbWFya19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmaXB0X3NlY21hcmtfcmVnKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZpcDZ0X3NlY21hcmtfcmVnKTsKKwlpZiAoZXJyKQorCQl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X3NlY21hcmtfcmVnKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4dF9zZWNtYXJrX2Zpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXA2dF9zZWNtYXJrX3JlZyk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9zZWNtYXJrX3JlZyk7Cit9CisKK21vZHVsZV9pbml0KHh0X3NlY21hcmtfaW5pdCk7Cittb2R1bGVfZXhpdCh4dF9zZWNtYXJrX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCmluZGV4IGRjMjZhMjcuLjU2MzI0YzhhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCkBAIC01OCw3ICs1OCw3IEBACiAJICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKIAkgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCXN0cnVjdCB4dF9jb25ubWFya19pbmZvICpjbSA9IChzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqKW1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqY20gPSBtYXRjaGluZm87CiAKIAlpZiAoY20tPm1hcmsgPiAweGZmZmZmZmZmIHx8IGNtLT5tYXNrID4gMHhmZmZmZmZmZikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb25ubWFyazogb25seSBzdXBwb3J0IDMyYml0IG1hcmtcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2RjY3AuYwppbmRleCBkZmIxMGI2Li4yZTJmODI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2RjY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2RjY3AuYwpAQCAtMTAxLDggKzEwMSw3IEBACiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKICAgICAgIGludCAqaG90ZHJvcCkKIHsKLQljb25zdCBzdHJ1Y3QgeHRfZGNjcF9pbmZvICppbmZvID0gCi0JCQkJKGNvbnN0IHN0cnVjdCB4dF9kY2NwX2luZm8gKiltYXRjaGluZm87CisJY29uc3Qgc3RydWN0IHh0X2RjY3BfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAKIAlpZiAob2Zmc2V0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tYXJrLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X21hcmsuYwppbmRleCA4YjM4NWEzLi44NzZiYzU3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X21hcmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X21hcmsuYwpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCXN0cnVjdCB4dF9tYXJrX2luZm8gKm1pbmZvID0gKHN0cnVjdCB4dF9tYXJrX2luZm8gKikgbWF0Y2hpbmZvOworCWNvbnN0IHN0cnVjdCB4dF9tYXJrX2luZm8gKm1pbmZvID0gbWF0Y2hpbmZvOwogCiAJaWYgKG1pbmZvLT5tYXJrID4gMHhmZmZmZmZmZiB8fCBtaW5mby0+bWFzayA+IDB4ZmZmZmZmZmYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibWFyazogb25seSBzdXBwb3J0cyAzMmJpdCBtYXJrXG4iKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCmluZGV4IGI1NmNkMmIuLjFmZjBhMjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggb25lIG9mIGEgbGlzdCBvZiBUQ1AvVURQIHBvcnRzOiBwb3J0cyBhcmUgaW4KKy8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggb25lIG9mIGEgbGlzdCBvZiBUQ1AvVURQL1NDVFAvRENDUCBwb3J0czogcG9ydHMgYXJlIGluCiAgICB0aGUgc2FtZSBwbGFjZSBzbyB3ZSBjYW4gdHJlYXQgdGhlbSBhcyBlcXVhbC4gKi8KIAogLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbApAQCAtMTYwLDggKzE2MCw5IEBACiAgICAgICB1X2ludDhfdCBtYXRjaF9mbGFncywKICAgICAgIHVfaW50OF90IGNvdW50KQogewotCS8qIE11c3Qgc3BlY2lmeSBwcm90byA9PSBUQ1AvVURQLCBubyB1bmtub3duIGZsYWdzIG9yIGJhZCBjb3VudCAqLwotCXJldHVybiAocHJvdG8gPT0gSVBQUk9UT19UQ1AgfHwgcHJvdG8gPT0gSVBQUk9UT19VRFApCisJLyogTXVzdCBzcGVjaWZ5IHN1cHBvcnRlZCBwcm90b2NvbCwgbm8gdW5rbm93biBmbGFncyBvciBiYWQgY291bnQgKi8KKwlyZXR1cm4gKHByb3RvID09IElQUFJPVE9fVENQIHx8IHByb3RvID09IElQUFJPVE9fVURQCisJCXx8IHByb3RvID09IElQUFJPVE9fU0NUUCB8fCBwcm90byA9PSBJUFBST1RPX0RDQ1ApCiAJCSYmICEoaXBfaW52ZmxhZ3MgJiBYVF9JTlZfUFJPVE8pCiAJCSYmIChtYXRjaF9mbGFncyA9PSBYVF9NVUxUSVBPUlRfU09VUkNFCiAJCSAgICB8fCBtYXRjaF9mbGFncyA9PSBYVF9NVUxUSVBPUlRfREVTVElOQVRJT04KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RiYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBuZXRmaWx0ZXIgbW9kdWxlIHRvIGVuZm9yY2UgbmV0d29yayBxdW90YXMKKyAqCisgKiBTYW0gSm9obnN0b24gPHNhbWpAc2Ftai5uZXQ+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlNhbSBKb2huc3RvbiA8c2FtakBzYW1qLm5ldD4iKTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhxdW90YV9sb2NrKTsKKworc3RhdGljIGludAorbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKKyAgICAgIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBwcm90b2ZmLCBpbnQgKmhvdGRyb3ApCit7CisJc3RydWN0IHh0X3F1b3RhX2luZm8gKnEgPSAoKHN0cnVjdCB4dF9xdW90YV9pbmZvICopbWF0Y2hpbmZvKS0+bWFzdGVyOworCWludCByZXQgPSBxLT5mbGFncyAmIFhUX1FVT1RBX0lOVkVSVCA/IDEgOiAwOworCisJc3Bpbl9sb2NrX2JoKCZxdW90YV9sb2NrKTsKKwlpZiAocS0+cXVvdGEgPj0gc2tiLT5sZW4pIHsKKwkJcS0+cXVvdGEgLT0gc2tiLT5sZW47CisJCXJldCBePSAxOworCX0gZWxzZSB7CisJICAgICAgICAvKiB3ZSBkbyBub3QgYWxsb3cgZXZlbiBzbWFsbCBwYWNrZXRzIGZyb20gbm93IG9uICovCisJICAgICAgICBxLT5xdW90YSA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZxdW90YV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLCBjb25zdCB2b2lkICplbnRyeSwKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8sCisJICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3sKKwlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9IChzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqKW1hdGNoaW5mbzsKKworCWlmIChxLT5mbGFncyAmIH5YVF9RVU9UQV9NQVNLKQorCQlyZXR1cm4gMDsKKwkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2YgY291bnRlcnMuICovCisJcS0+bWFzdGVyID0gcTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBxdW90YV9tYXRjaCA9IHsKKwkubmFtZQkJPSAicXVvdGEiLAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfcXVvdGFfaW5mbyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5tZQkJPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBxdW90YV9tYXRjaDYgPSB7CisJLm5hbWUJCT0gInF1b3RhIiwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9xdW90YV9pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLm1lCQk9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4dF9xdW90YV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZxdW90YV9tYXRjaCk7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZxdW90YV9tYXRjaDYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXR1cm4gcmV0OworCitlcnIyOgorCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnF1b3RhX21hdGNoKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X3F1b3RhX2Zpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZxdW90YV9tYXRjaDYpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnF1b3RhX21hdGNoKTsKK30KKworbW9kdWxlX2luaXQoeHRfcXVvdGFfaW5pdCk7Cittb2R1bGVfZXhpdCh4dF9xdW90YV9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKaW5kZXggMzRiZDg3Mi4uYjUxMTBlNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKQEAgLTEyOSwxMSArMTI5LDkgQEAKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAogICAgICAgaW50ICpob3Rkcm9wKQogewotCWNvbnN0IHN0cnVjdCB4dF9zY3RwX2luZm8gKmluZm87CisJY29uc3Qgc3RydWN0IHh0X3NjdHBfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAlzY3RwX3NjdHBoZHJfdCBfc2gsICpzaDsKIAotCWluZm8gPSAoY29uc3Qgc3RydWN0IHh0X3NjdHBfaW5mbyAqKW1hdGNoaW5mbzsKLQogCWlmIChvZmZzZXQpIHsKIAkJZHVwcmludGYoIkRyb3BwaW5nIG5vbi1maXJzdCBmcmFnbWVudC4uIEZJWE1FXG4iKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTEwMzdmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIEJhc2VkIG9uIGlwdF9yYW5kb20gYW5kIGlwdF9udGggYnkgRmFicmljZSBNQVJJRSA8ZmFicmljZUBuZXRmaWx0ZXIub3JnPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ4dGFibGVzIHN0YXRpc3RpY2FsIG1hdGNoIG1vZHVsZSIpOworTU9EVUxFX0FMSUFTKCJpcHRfc3RhdGlzdGljIik7CitNT0RVTEVfQUxJQVMoImlwNnRfc3RhdGlzdGljIik7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobnRoX2xvY2spOworCitzdGF0aWMgaW50CittYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorICAgICAgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHByb3RvZmYsIGludCAqaG90ZHJvcCkKK3sKKwlzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKmluZm8gPSAoc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICopbWF0Y2hpbmZvOworCWludCByZXQgPSBpbmZvLT5mbGFncyAmIFhUX1NUQVRJU1RJQ19JTlZFUlQgPyAxIDogMDsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCWNhc2UgWFRfU1RBVElTVElDX01PREVfUkFORE9NOgorCQlpZiAoKG5ldF9yYW5kb20oKSAmIDB4N0ZGRkZGRkYpIDwgaW5mby0+dS5yYW5kb20ucHJvYmFiaWxpdHkpCisJCQlyZXQgXj0gMTsKKwkJYnJlYWs7CisJY2FzZSBYVF9TVEFUSVNUSUNfTU9ERV9OVEg6CisJCWluZm8gPSBpbmZvLT5tYXN0ZXI7CisJCXNwaW5fbG9ja19iaCgmbnRoX2xvY2spOworCQlpZiAoaW5mby0+dS5udGguY291bnQrKyA9PSBpbmZvLT51Lm50aC5ldmVyeSkgeworCQkJaW5mby0+dS5udGguY291bnQgPSAwOworCQkJcmV0IF49IDE7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJm50aF9sb2NrKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgKmVudHJ5LAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbywKKwkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLCB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQoreworCXN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKiltYXRjaGluZm87CisKKwlpZiAoaW5mby0+bW9kZSA+IFhUX1NUQVRJU1RJQ19NT0RFX01BWCB8fAorCSAgICBpbmZvLT5mbGFncyAmIH5YVF9TVEFUSVNUSUNfTUFTSykKKwkJcmV0dXJuIDA7CisJaW5mby0+bWFzdGVyID0gaW5mbzsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzdGF0aXN0aWNfbWF0Y2ggPSB7CisJLm5hbWUJCT0gInN0YXRpc3RpYyIsCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc3RhdGlzdGljX21hdGNoNiA9IHsKKwkubmFtZQkJPSAic3RhdGlzdGljIiwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8pLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHh0X3N0YXRpc3RpY19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZzdGF0aXN0aWNfbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMTsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZzdGF0aXN0aWNfbWF0Y2g2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisJcmV0dXJuIHJldDsKK2VycjI6CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmc3RhdGlzdGljX21hdGNoKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X3N0YXRpc3RpY19maW5pKHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmc3RhdGlzdGljX21hdGNoNik7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmc3RhdGlzdGljX21hdGNoKTsKK30KKworbW9kdWxlX2luaXQoeHRfc3RhdGlzdGljX2luaXQpOworbW9kdWxlX2V4aXQoeHRfc3RhdGlzdGljX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYyBiL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMKaW5kZXggNzlkOWVhNi4uMGViYjZhYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jCkBAIC0zMCw4ICszMCw4IEBACiAJCSB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIAkJIGludCAqaG90ZHJvcCkKIHsKKwljb25zdCBzdHJ1Y3QgeHRfc3RyaW5nX2luZm8gKmNvbmYgPSBtYXRjaGluZm87CiAJc3RydWN0IHRzX3N0YXRlIHN0YXRlOwotCXN0cnVjdCB4dF9zdHJpbmdfaW5mbyAqY29uZiA9IChzdHJ1Y3QgeHRfc3RyaW5nX2luZm8gKikgbWF0Y2hpbmZvOwogCiAJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCB0c19zdGF0ZSkpOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCmluZGV4IDEzOGVhOTIuLmIxZTRjNWUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCkBAIC03Miw5ICs3Miw5IEBACiAgICBkZXYtPnF1ZXVlX2xvY2sgc2VyaWFsaXplcyBxdWV1ZSBhY2Nlc3NlcyBmb3IgdGhpcyBkZXZpY2UKICAgIEFORCBkZXYtPnFkaXNjIHBvaW50ZXIgaXRzZWxmLgogCi0gICBkZXYtPnhtaXRfbG9jayBzZXJpYWxpemVzIGFjY2Vzc2VzIHRvIGRldmljZSBkcml2ZXIuCisgICBuZXRpZl90eF9sb2NrIHNlcmlhbGl6ZXMgYWNjZXNzZXMgdG8gZGV2aWNlIGRyaXZlci4KIAotICAgZGV2LT5xdWV1ZV9sb2NrIGFuZCBkZXYtPnhtaXRfbG9jayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLAorICAgZGV2LT5xdWV1ZV9sb2NrIGFuZCBuZXRpZl90eF9sb2NrIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsCiAgICBpZiBvbmUgaXMgZ3JhYmJlZCwgYW5vdGhlciBtdXN0IGJlIGZyZWUuCiAgKi8KIApAQCAtMTA4LDcgKzEwOCw3IEBACiAJCSAqIHdpbGwgYmUgcmVxdWV1ZWQuCiAJCSAqLwogCQlpZiAoIW5vbG9jaykgewotCQkJaWYgKCFzcGluX3RyeWxvY2soJmRldi0+eG1pdF9sb2NrKSkgeworCQkJaWYgKCFuZXRpZl90eF90cnlsb2NrKGRldikpIHsKIAkJCWNvbGxpc2lvbjoKIAkJCQkvKiBTbywgc29tZW9uZSBncmFiYmVkIHRoZSBkcml2ZXIuICovCiAJCQkJCkBAIC0xMjYsOCArMTI2LDYgQEAKIAkJCQlfX2dldF9jcHVfdmFyKG5ldGRldl9yeF9zdGF0KS5jcHVfY29sbGlzaW9uKys7CiAJCQkJZ290byByZXF1ZXVlOwogCQkJfQotCQkJLyogUmVtZW1iZXIgdGhhdCB0aGUgZHJpdmVyIGlzIGdyYWJiZWQgYnkgdXMuICovCi0JCQlkZXYtPnhtaXRfbG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJfQogCQkKIAkJewpAQCAtMTQyLDggKzE0MCw3IEBACiAJCQkJcmV0ID0gZGV2LT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwogCQkJCWlmIChyZXQgPT0gTkVUREVWX1RYX09LKSB7IAogCQkJCQlpZiAoIW5vbG9jaykgewotCQkJCQkJZGV2LT54bWl0X2xvY2tfb3duZXIgPSAtMTsKLQkJCQkJCXNwaW5fdW5sb2NrKCZkZXYtPnhtaXRfbG9jayk7CisJCQkJCQluZXRpZl90eF91bmxvY2soZGV2KTsKIAkJCQkJfQogCQkJCQlzcGluX2xvY2soJmRldi0+cXVldWVfbG9jayk7CiAJCQkJCXJldHVybiAtMTsKQEAgLTE1Nyw4ICsxNTQsNyBAQAogCQkJLyogTkVUREVWX1RYX0JVU1kgLSB3ZSBuZWVkIHRvIHJlcXVldWUgKi8KIAkJCS8qIFJlbGVhc2UgdGhlIGRyaXZlciAqLwogCQkJaWYgKCFub2xvY2spIHsgCi0JCQkJZGV2LT54bWl0X2xvY2tfb3duZXIgPSAtMTsKLQkJCQlzcGluX3VubG9jaygmZGV2LT54bWl0X2xvY2spOworCQkJCW5ldGlmX3R4X3VubG9jayhkZXYpOwogCQkJfSAKIAkJCXNwaW5fbG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsKIAkJCXEgPSBkZXYtPnFkaXNjOwpAQCAtMTg3LDcgKzE4Myw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWFyZzsKIAotCXNwaW5fbG9jaygmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2soZGV2KTsKIAlpZiAoZGV2LT5xZGlzYyAhPSAmbm9vcF9xZGlzYykgewogCQlpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSAmJgogCQkgICAgbmV0aWZfcnVubmluZyhkZXYpICYmCkBAIC0yMDMsNyArMTk5LDcgQEAKIAkJCQlkZXZfaG9sZChkZXYpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrKGRldik7CiAKIAlkZXZfcHV0KGRldik7CiB9CkBAIC0yMjcsMTcgKzIyMywxNyBAQAogCiBzdGF0aWMgdm9pZCBkZXZfd2F0Y2hkb2dfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJX19uZXRkZXZfd2F0Y2hkb2dfdXAoZGV2KTsKLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBkZXZfd2F0Y2hkb2dfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAlpZiAoZGVsX3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyKSkKIAkJZGV2X3B1dChkZXYpOwotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiB9CiAKIHZvaWQgbmV0aWZfY2Fycmllcl9vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTgyLDcgKzU3OCw3IEBACiAJd2hpbGUgKHRlc3RfYml0KF9fTElOS19TVEFURV9TQ0hFRCwgJmRldi0+c3RhdGUpKQogCQl5aWVsZCgpOwogCi0Jc3Bpbl91bmxvY2tfd2FpdCgmZGV2LT54bWl0X2xvY2spOworCXNwaW5fdW5sb2NrX3dhaXQoJmRldi0+X3htaXRfbG9jayk7CiB9CiAKIHZvaWQgZGV2X2luaXRfc2NoZWR1bGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RlcWwuYyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCmluZGV4IDc5YjhlZjMuLjRjMTZhZDUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGVxbC5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCkBAIC0zMDIsMjAgKzMwMiwxNyBAQAogCiAJCXN3aXRjaCAodGVxbF9yZXNvbHZlKHNrYiwgc2tiX3Jlcywgc2xhdmUpKSB7CiAJCWNhc2UgMDoKLQkJCWlmIChzcGluX3RyeWxvY2soJnNsYXZlLT54bWl0X2xvY2spKSB7Ci0JCQkJc2xhdmUtPnhtaXRfbG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJCWlmIChuZXRpZl90eF90cnlsb2NrKHNsYXZlKSkgewogCQkJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChzbGF2ZSkgJiYKIAkJCQkgICAgc2xhdmUtPmhhcmRfc3RhcnRfeG1pdChza2IsIHNsYXZlKSA9PSAwKSB7Ci0JCQkJCXNsYXZlLT54bWl0X2xvY2tfb3duZXIgPSAtMTsKLQkJCQkJc3Bpbl91bmxvY2soJnNsYXZlLT54bWl0X2xvY2spOworCQkJCQluZXRpZl90eF91bmxvY2soc2xhdmUpOwogCQkJCQltYXN0ZXItPnNsYXZlcyA9IE5FWFRfU0xBVkUocSk7CiAJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJCQkJbWFzdGVyLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJCW1hc3Rlci0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9Ci0JCQkJc2xhdmUtPnhtaXRfbG9ja19vd25lciA9IC0xOwotCQkJCXNwaW5fdW5sb2NrKCZzbGF2ZS0+eG1pdF9sb2NrKTsKKwkJCQluZXRpZl90eF91bmxvY2soc2xhdmUpOwogCQkJfQogCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKIAkJCQlidXN5ID0gMTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IDE2NjJmOWMuLjQyYjY2ZTcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtMTQxLDcgKzE0MSw4IEBACiAJX19za2JfcHVsbChza2IsIHNrYi0+aC5yYXcgLSBza2ItPmRhdGEpOwogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpCiAJCWdvdG8gZGlzY2FyZF9pdDsKLQlpZiAoc2N0cF9yY3ZfY2hlY2tzdW0oc2tiKSA8IDApCisJaWYgKChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgJiYKKwkgICAgKHNjdHBfcmN2X2NoZWNrc3VtKHNrYikgPCAwKSkKIAkJZ290byBkaXNjYXJkX2l0OwogCiAJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKQEAgLTE3MCw3ICsxNzEsOCBAQAogCSAqIElQIGJyb2FkY2FzdCBhZGRyZXNzZXMgY2Fubm90IGJlIHVzZWQgaW4gYW4gU0NUUCB0cmFuc3BvcnQKIAkgKiBhZGRyZXNzLiIKIAkgKi8KLQlpZiAoIWFmLT5hZGRyX3ZhbGlkKCZzcmMsIE5VTEwpIHx8ICFhZi0+YWRkcl92YWxpZCgmZGVzdCwgTlVMTCkpCisJaWYgKCFhZi0+YWRkcl92YWxpZCgmc3JjLCBOVUxMLCBza2IpIHx8CisJICAgICFhZi0+YWRkcl92YWxpZCgmZGVzdCwgTlVMTCwgc2tiKSkKIAkJZ290byBkaXNjYXJkX2l0OwogCiAJYXNvYyA9IF9fc2N0cF9yY3ZfbG9va3VwKHNrYiwgJnNyYywgJmRlc3QsICZ0cmFuc3BvcnQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IGMyMGQyODIuLjhlZjA4MDcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTUyMyw3ICs1MjMsOSBAQAogICogUmV0dXJuIDAgLSBJZiB0aGUgYWRkcmVzcyBpcyBhIG5vbi11bmljYXN0IG9yIGFuIGlsbGVnYWwgYWRkcmVzcy4KICAqIFJldHVybiAxIC0gSWYgdGhlIGFkZHJlc3MgaXMgYSB1bmljYXN0LgogICovCi1zdGF0aWMgaW50IHNjdHBfdjZfYWRkcl92YWxpZCh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzY3RwX3NvY2sgKnNwKQorc3RhdGljIGludCBzY3RwX3Y2X2FkZHJfdmFsaWQodW5pb24gc2N0cF9hZGRyICphZGRyLAorCQkJICAgICAgc3RydWN0IHNjdHBfc29jayAqc3AsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByZXQgPSBpcHY2X2FkZHJfdHlwZSgmYWRkci0+djYuc2luNl9hZGRyKTsKIApAQCAtNTM3LDcgKzUzOSw3IEBACiAJCWlmIChzcCAmJiBpcHY2X29ubHlfc29jayhzY3RwX29wdDJzayhzcCkpKQogCQkJcmV0dXJuIDA7CiAJCXNjdHBfdjZfbWFwX3Y0KGFkZHIpOwotCQlyZXR1cm4gc2N0cF9nZXRfYWZfc3BlY2lmaWMoQUZfSU5FVCktPmFkZHJfdmFsaWQoYWRkciwgc3ApOworCQlyZXR1cm4gc2N0cF9nZXRfYWZfc3BlY2lmaWMoQUZfSU5FVCktPmFkZHJfdmFsaWQoYWRkciwgc3AsIHNrYik7CiAJfQogCiAJLyogSXMgdGhpcyBhIG5vbi11bmljYXN0IGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggNDM3Y2JhNy4uY2RjNWEzOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKKysrIGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTI5NSwxNCArMjk1LDE0IEBACiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cCA9IHBhY2tldC0+dHJhbnNwb3J0OwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdHAtPmFzb2M7CiAJc3RydWN0IHNjdHBoZHIgKnNoOwotCV9fdTMyIGNyYzMyOworCV9fdTMyIGNyYzMyID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssICp0bXA7CiAJc3RydWN0IHNvY2sgKnNrOwogCWludCBlcnIgPSAwOwogCWludCBwYWRkaW5nOwkJLyogSG93IG11Y2ggcGFkZGluZyBkbyB3ZSBuZWVkPyAgKi8KIAlfX3U4IGhhc19kYXRhID0gMDsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gdHAtPmRzdDsKIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogcGFja2V0OiVwXG4iLCBfX0ZVTkNUSU9OX18sIHBhY2tldCk7CiAKQEAgLTMyNyw2ICszMjcsMTkgQEAKIAkgKi8KIAlza2Jfc2V0X293bmVyX3cobnNrYiwgc2spOwogCisJLyogVGhlICdvYnNvbGV0ZScgZmllbGQgb2YgZHN0IGlzIHNldCB0byAyIHdoZW4gYSBkc3QgaXMgZnJlZWQuICovCisJaWYgKCFkc3QgfHwgKGRzdC0+b2Jzb2xldGUgPiAxKSkgeworCQlkc3RfcmVsZWFzZShkc3QpOworCQlzY3RwX3RyYW5zcG9ydF9yb3V0ZSh0cCwgTlVMTCwgc2N0cF9zayhzaykpOworCQlpZiAoYXNvYyAmJiAoYXNvYy0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKSkgeworCQkJc2N0cF9hc3NvY19zeW5jX3BtdHUoYXNvYyk7CisJCX0KKwl9CisJbnNrYi0+ZHN0ID0gZHN0X2Nsb25lKHRwLT5kc3QpOworCWlmICghbnNrYi0+ZHN0KQorCQlnb3RvIG5vX3JvdXRlOworCWRzdCA9IG5za2ItPmRzdDsKKwogCS8qIEJ1aWxkIHRoZSBTQ1RQIGhlYWRlci4gICovCiAJc2ggPSAoc3RydWN0IHNjdHBoZHIgKilza2JfcHVzaChuc2tiLCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKIAlzaC0+c291cmNlID0gaHRvbnMocGFja2V0LT5zb3VyY2VfcG9ydCk7CkBAIC0zNTAsNyArMzYzLDggQEAKIAkgKiBOb3RlOiBBZGxlci0zMiBpcyBubyBsb25nZXIgYXBwbGljYWJsZSwgYXMgaGFzIGJlZW4gcmVwbGFjZWQKIAkgKiBieSBDUkMzMi1DIGFzIGRlc2NyaWJlZCBpbiA8ZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwY3N1bS0wMi50eHQ+LgogCSAqLwotCWNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwlpZiAoIShkc3QtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pKQorCQljcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CiAKIAkvKioKIAkgKiA2LjEwIEJ1bmRsaW5nCkBAIC00MDIsOSArNDE2LDE0IEBACiAJCWlmIChwYWRkaW5nKQogCQkJbWVtc2V0KHNrYl9wdXQoY2h1bmstPnNrYiwgcGFkZGluZyksIDAsIHBhZGRpbmcpOwogCi0JCWNyYzMyID0gc2N0cF91cGRhdGVfY29weV9ja3N1bShza2JfcHV0KG5za2IsIGNodW5rLT5za2ItPmxlbiksCi0JCQkJCSAgICAgICBjaHVuay0+c2tiLT5kYXRhLAotCQkJCQkgICAgICAgY2h1bmstPnNrYi0+bGVuLCBjcmMzMik7CisJCWlmIChkc3QtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pCisJCQltZW1jcHkoc2tiX3B1dChuc2tiLCBjaHVuay0+c2tiLT5sZW4pLAorCQkJICAgICAgIGNodW5rLT5za2ItPmRhdGEsIGNodW5rLT5za2ItPmxlbik7CisJCWVsc2UKKwkJCWNyYzMyID0gc2N0cF91cGRhdGVfY29weV9ja3N1bShza2JfcHV0KG5za2IsCisJCQkJCQkJY2h1bmstPnNrYi0+bGVuKSwKKwkJCQkJCWNodW5rLT5za2ItPmRhdGEsCisJCQkJCQljaHVuay0+c2tiLT5sZW4sIGNyYzMyKTsKIAogCQlTQ1RQX0RFQlVHX1BSSU5USygiJXMgJXBbJXNdICVzIDB4JXgsICVzICVkLCAlcyAlZCwgJXMgJWRcbiIsCiAJCQkJICAiKioqIENodW5rIiwgY2h1bmssCkBAIC00MjcsNyArNDQ2LDggQEAKIAl9CiAKIAkvKiBQZXJmb3JtIGZpbmFsIHRyYW5zZm9ybWF0aW9uIG9uIGNoZWNrc3VtLiAqLwotCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOworCWlmICghKGRzdC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkpCisJCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOwogCiAJLyogMykgUHV0IHRoZSByZXN1bHRhbnQgdmFsdWUgaW50byB0aGUgY2hlY2tzdW0gZmllbGQgaW4gdGhlCiAJICogICAgY29tbW9uIGhlYWRlciwgYW5kIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBiaXRzIHVuY2hhbmdlZC4KQEAgLTQ3NywyMCArNDk3LDYgQEAKIAkJfQogCX0KIAotCWRzdCA9IHRwLT5kc3Q7Ci0JLyogVGhlICdvYnNvbGV0ZScgZmllbGQgb2YgZHN0IGlzIHNldCB0byAyIHdoZW4gYSBkc3QgaXMgZnJlZWQuICovCi0JaWYgKCFkc3QgfHwgKGRzdC0+b2Jzb2xldGUgPiAxKSkgewotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlzY3RwX3RyYW5zcG9ydF9yb3V0ZSh0cCwgTlVMTCwgc2N0cF9zayhzaykpOwotCQlpZiAoYXNvYy0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKSB7Ci0JCQlzY3RwX2Fzc29jX3N5bmNfcG10dShhc29jKTsKLQkJfQotCX0KLQotCW5za2ItPmRzdCA9IGRzdF9jbG9uZSh0cC0+ZHN0KTsKLQlpZiAoIW5za2ItPmRzdCkKLQkJZ290byBub19yb3V0ZTsKLQogCVNDVFBfREVCVUdfUFJJTlRLKCIqKipzY3RwX3RyYW5zbWl0X3BhY2tldCoqKiBza2IgbGVuICVkXG4iLAogCQkJICBuc2tiLT5sZW4pOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCBmMTQ4Zjk1Li5lNWZhYTM1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTEyNjIsNiArMTI2Miw3IEBACiAJCQkgICAJaWYgKCF0Y2h1bmstPnRzbl9nYXBfYWNrZWQgJiYKIAkJCQkgICAgIXRjaHVuay0+cmVzZW50ICYmCiAJCQkJICAgIHRjaHVuay0+cnR0X2luX3Byb2dyZXNzKSB7CisJCQkJCXRjaHVuay0+cnR0X2luX3Byb2dyZXNzID0gMDsKIAkJCQkJcnR0ID0gamlmZmllcyAtIHRjaHVuay0+c2VudF9hdDsKIAkJCQkJc2N0cF90cmFuc3BvcnRfdXBkYXRlX3J0byh0cmFuc3BvcnQsCiAJCQkJCQkJCSAgcnR0KTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IDIwODhhYTkuLjgxNmMwMzMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMzY1LDEyICszNjUsMTggQEAKICAqIFJldHVybiAwIC0gSWYgdGhlIGFkZHJlc3MgaXMgYSBub24tdW5pY2FzdCBvciBhbiBpbGxlZ2FsIGFkZHJlc3MuCiAgKiBSZXR1cm4gMSAtIElmIHRoZSBhZGRyZXNzIGlzIGEgdW5pY2FzdC4KICAqLwotc3RhdGljIGludCBzY3RwX3Y0X2FkZHJfdmFsaWQodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcCkKK3N0YXRpYyBpbnQgc2N0cF92NF9hZGRyX3ZhbGlkKHVuaW9uIHNjdHBfYWRkciAqYWRkciwKKwkJCSAgICAgIHN0cnVjdCBzY3RwX3NvY2sgKnNwLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBJcyB0aGlzIGEgbm9uLXVuaWNhc3QgYWRkcmVzcyBvciBhIHVudXNhYmxlIFNDVFAgYWRkcmVzcz8gKi8KIAlpZiAoSVNfSVBWNF9VTlVTQUJMRV9BRERSRVNTKCZhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIpKQogCQlyZXR1cm4gMDsKIAorIAkvKiBJcyB0aGlzIGEgYnJvYWRjYXN0IGFkZHJlc3M/ICovCisgCWlmIChza2IgJiYgKChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3QpLT5ydF9mbGFncyAmIFJUQ0ZfQlJPQURDQVNUKQorIAkJcmV0dXJuIDA7CisKIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCA4YmMyNzkyLi45ZTU4MTQ0IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtNTI5MywxMCArNTI5MywxOCBAQAogCSAqIHNlZW1zIGEgYml0IHRyb3VibGVzb21lIGluIHRoYXQgZnJhZ19wb2ludCB2YXJpZXMgYmFzZWQgb24KIAkgKiBQTVRVLiAgSW4gY2FzZXMsIHN1Y2ggYXMgbG9vcGJhY2ssIHRoaXMgbWlnaHQgYmUgYSByYXRoZXIKIAkgKiBsYXJnZSBzcGlsbCBvdmVyLgorCSAqIE5PVEU6IElmIHdlIGhhdmUgYSBmdWxsIHJlY2VpdmUgYnVmZmVyIGhlcmUsIHdlIG9ubHkgcmVuZWdlIGlmCisJICogb3VyIHJlY2VpdmVyIGNhbiBzdGlsbCBtYWtlIHByb2dyZXNzIHdpdGhvdXQgdGhlIHRzbiBiZWluZworCSAqIHJlY2VpdmVkLiBXZSBkbyB0aGlzIGJlY2F1c2UgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGFzc29jaWF0aW9ucworCSAqIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkgd2UgYXJlIGZpbGxpbmcgYSBsZWFkaW5nIGdhcCwgYW5kIHNpbmNlCisJICogcmVuZWdpbmcgbW92ZXMgdGhlIGdhcCB0byB0aGUgZW5kIG9mIHRoZSB0c24gc3RyZWFtLCB3ZSBhcmUgbGlrZWx5CisJICogdG8gc3RhbGwgYWdhaW4gdmVyeSBzaG9ydGx5LiBBdm9pZGluZyB0aGUgcmVuZWdlIHdoZW4gd2UgZmlsbCBhCisJICogbGVhZGluZyBnYXAgaXMgYSBnb29kIGhldXJpc3RpYyBmb3IgYXZvaWRpbmcgc3VjaCBzdGVhZHkgc3RhdGUKKwkgKiBzdGFsbHMuCiAJICovCiAJaWYgKCFhc29jLT5yd25kIHx8IGFzb2MtPnJ3bmRfb3ZlciB8fAogCSAgICAoZGF0YWxlbiA+IGFzb2MtPnJ3bmQgKyBhc29jLT5mcmFnX3BvaW50KSB8fAotCSAgICByY3ZidWZfb3ZlcikgeworCSAgICAocmN2YnVmX292ZXIgJiYgKCFza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSkgewogCiAJCS8qIElmIHRoaXMgaXMgdGhlIG5leHQgVFNOLCBjb25zaWRlciByZW5lZ2luZyB0byBtYWtlCiAJCSAqIHJvb20uICAgTm90ZTogUGxheWluZyBuaWNlIHdpdGggYSBjb25mdXNlZCBzZW5kZXIuICBBCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IDE3NGQ0ZDMuLmI4MTE2OTFjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogSXMgdGhpcyBhIHZhbGlkIFNDVFAgYWRkcmVzcz8gICovCi0JaWYgKCFhZi0+YWRkcl92YWxpZChhZGRyLCBzY3RwX3NrKHNrKSkpCisJaWYgKCFhZi0+YWRkcl92YWxpZChhZGRyLCBzY3RwX3NrKHNrKSwgTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzY3RwX3NrKHNrKS0+cGYtPnNlbmRfdmVyaWZ5KHNjdHBfc2soc2spLCAoYWRkcikpKQpAQCAtMjUzMCw4ICsyNTMwLDMyIEBACiAKIAkvKiBTZXQgdGhlIHZhbHVlcyB0byB0aGUgc3BlY2lmaWMgYXNzb2NpYXRpb24gKi8KIAlpZiAoYXNvYykgewotCQlpZiAoYXNzb2NwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCAhPSAwKQorCQlpZiAoYXNzb2NwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCAhPSAwKSB7CisJCQlfX3UzMiBwYXRoX3N1bSA9IDA7CisJCQlpbnQgICBwYXRocyA9IDA7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJCQlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnBlZXJfYWRkcjsKKworCQkJbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKKwkJCQlwZWVyX2FkZHIgPSBsaXN0X2VudHJ5KHBvcywKKwkJCQkJCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCwKKwkJCQkJCXRyYW5zcG9ydHMpOworCQkJCXBhdGhfc3VtICs9IHBlZXJfYWRkci0+cGF0aG1heHJ4dDsKKwkJCQlwYXRocysrOworCQkJfQorCisJCQkvKiBPbmx5IHZhbGlkYXRlIGFzb2NtYXhyeHQgaWYgd2UgaGF2ZSBtb3JlIHRoZW4KKwkJCSAqIG9uZSBwYXRoL3RyYW5zcG9ydC4gIFdlIGRvIHRoaXMgYmVjYXVzZSBwYXRoCisJCQkgKiByZXRyYW5zbWlzc2lvbnMgYXJlIG9ubHkgY291bnRlZCB3aGVuIHdlIGhhdmUgbW9yZQorCQkJICogdGhlbiBvbmUgcGF0aC4KKwkJCSAqLworCQkJaWYgKHBhdGhzID4gMSAmJgorCQkJICAgIGFzc29jcGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQgPiBwYXRoX3N1bSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQkJYXNvYy0+bWF4X3JldHJhbnMgPSBhc3NvY3BhcmFtcy5zYXNvY19hc29jbWF4cnh0OworCQl9CisKIAkJaWYgKGFzc29jcGFyYW1zLnNhc29jX2Nvb2tpZV9saWZlICE9IDApIHsKIAkJCWFzb2MtPmNvb2tpZV9saWZlLnR2X3NlYyA9CiAJCQkJCWFzc29jcGFyYW1zLnNhc29jX2Nvb2tpZV9saWZlIC8gMTAwMDsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscGV2ZW50LmMgYi9uZXQvc2N0cC91bHBldmVudC5jCmluZGV4IGJhOTdmOTcuLmVlMjM2Nzg0IDEwMDY0NAotLS0gYS9uZXQvc2N0cC91bHBldmVudC5jCisrKyBiL25ldC9zY3RwL3VscGV2ZW50LmMKQEAgLTUxLDYgKzUxLDggQEAKIHN0YXRpYyB2b2lkIHNjdHBfdWxwZXZlbnRfcmVjZWl2ZV9kYXRhKHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCwKIAkJCQkgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogc3RhdGljIHZvaWQgc2N0cF91bHBldmVudF9yZWxlYXNlX2RhdGEoc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkIHNjdHBfdWxwZXZlbnRfcmVsZWFzZV9mcmFnX2RhdGEoc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50KTsKKwogCiAvKiBJbml0aWFsaXplIGFuIFVMUCBldmVudCBmcm9tIGFuIGdpdmVuIHNrYi4gICovCiBTQ1RQX1NUQVRJQyB2b2lkIHNjdHBfdWxwZXZlbnRfaW5pdChzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQsIGludCBtc2dfZmxhZ3MpCkBAIC04ODMsNiArODg1LDcgQEAKIHN0YXRpYyB2b2lkIHNjdHBfdWxwZXZlbnRfcmVsZWFzZV9kYXRhKHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqZnJhZzsKKwl1bnNpZ25lZCBpbnQJbGVuOwogCiAJLyogQ3VycmVudCBzdGFjayBzdHJ1Y3R1cmVzIGFzc3VtZSB0aGF0IHRoZSByY3YgYnVmZmVyIGlzCiAJICogcGVyIHNvY2tldC4gICBGb3IgVURQIHN0eWxlIHNvY2tldHMgdGhpcyBpcyBub3QgdHJ1ZSBhcwpAQCAtODkyLDcgKzg5NSw3IEBACiAJICovCiAKIAlza2IgPSBzY3RwX2V2ZW50MnNrYihldmVudCk7Ci0Jc2N0cF9hc3NvY19yd25kX2luY3JlYXNlKGV2ZW50LT5hc29jLCBza2JfaGVhZGxlbihza2IpKTsKKwlsZW4gPSBza2ItPmxlbjsKIAogCWlmICghc2tiLT5kYXRhX2xlbikKIAkJZ290byBkb25lOwpAQCAtOTAzLDcgKzkwNiwzMCBAQAogCQkgKiBza2IncyB3aXRoIG9ubHkgMSBsZXZlbCBvZiBmcmFnbWVudHMsIFNDVFAgcmVhc3NlbWJseSBjYW4KIAkJICogaW5jcmVhc2UgdGhlIGxldmVscy4KIAkJICovCi0JCXNjdHBfdWxwZXZlbnRfcmVsZWFzZV9kYXRhKHNjdHBfc2tiMmV2ZW50KGZyYWcpKTsKKwkJc2N0cF91bHBldmVudF9yZWxlYXNlX2ZyYWdfZGF0YShzY3RwX3NrYjJldmVudChmcmFnKSk7CisJfQorCitkb25lOgorCXNjdHBfYXNzb2NfcnduZF9pbmNyZWFzZShldmVudC0+YXNvYywgbGVuKTsKKwlzY3RwX3VscGV2ZW50X3JlbGVhc2Vfb3duZXIoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBzY3RwX3VscGV2ZW50X3JlbGVhc2VfZnJhZ19kYXRhKHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqZnJhZzsKKworCXNrYiA9IHNjdHBfZXZlbnQyc2tiKGV2ZW50KTsKKworCWlmICghc2tiLT5kYXRhX2xlbikKKwkJZ290byBkb25lOworCisJLyogRG9uJ3QgZm9yZ2V0IHRoZSBmcmFnbWVudHMuICovCisJZm9yIChmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7IGZyYWc7IGZyYWcgPSBmcmFnLT5uZXh0KSB7CisJCS8qIE5PVEU6ICBza2Jfc2hpbmZvcyBhcmUgcmVjdXJzaXZlLiBBbHRob3VnaCBJUCByZXR1cm5zCisJCSAqIHNrYidzIHdpdGggb25seSAxIGxldmVsIG9mIGZyYWdtZW50cywgU0NUUCByZWFzc2VtYmx5IGNhbgorCQkgKiBpbmNyZWFzZSB0aGUgbGV2ZWxzLgorCQkgKi8KKwkJc2N0cF91bHBldmVudF9yZWxlYXNlX2ZyYWdfZGF0YShzY3RwX3NrYjJldmVudChmcmFnKSk7CiAJfQogCiBkb25lOgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggYjQ2OWM4Yi4uYjg5MzY5MiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC00Niw0NSArNDYsNDMgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKnhmcm1fcG9saWN5X2dldF9hZmluZm8odW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIHN0YXRpYyB2b2lkIHhmcm1fcG9saWN5X3B1dF9hZmluZm8oc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvKTsKK3N0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICp4ZnJtX3BvbGljeV9sb2NrX2FmaW5mbyh1bnNpZ25lZCBpbnQgZmFtaWx5KTsKK3N0YXRpYyB2b2lkIHhmcm1fcG9saWN5X3VubG9ja19hZmluZm8oc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvKTsKIAogaW50IHhmcm1fcmVnaXN0ZXJfdHlwZShzdHJ1Y3QgeGZybV90eXBlICp0eXBlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7Ci0Jc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvID0geGZybV9wb2xpY3lfZ2V0X2FmaW5mbyhmYW1pbHkpOwotCXN0cnVjdCB4ZnJtX3R5cGVfbWFwICp0eXBlbWFwOworCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbyA9IHhmcm1fcG9saWN5X2xvY2tfYWZpbmZvKGZhbWlseSk7CisJc3RydWN0IHhmcm1fdHlwZSAqKnR5cGVtYXA7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAl0eXBlbWFwID0gYWZpbmZvLT50eXBlX21hcDsKIAotCXdyaXRlX2xvY2tfYmgoJnR5cGVtYXAtPmxvY2spOwotCWlmIChsaWtlbHkodHlwZW1hcC0+bWFwW3R5cGUtPnByb3RvXSA9PSBOVUxMKSkKLQkJdHlwZW1hcC0+bWFwW3R5cGUtPnByb3RvXSA9IHR5cGU7CisJaWYgKGxpa2VseSh0eXBlbWFwW3R5cGUtPnByb3RvXSA9PSBOVUxMKSkKKwkJdHlwZW1hcFt0eXBlLT5wcm90b10gPSB0eXBlOwogCWVsc2UKIAkJZXJyID0gLUVFWElTVDsKLQl3cml0ZV91bmxvY2tfYmgoJnR5cGVtYXAtPmxvY2spOwotCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKKwl4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9yZWdpc3Rlcl90eXBlKTsKIAogaW50IHhmcm1fdW5yZWdpc3Rlcl90eXBlKHN0cnVjdCB4ZnJtX3R5cGUgKnR5cGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKLQlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8gPSB4ZnJtX3BvbGljeV9nZXRfYWZpbmZvKGZhbWlseSk7Ci0Jc3RydWN0IHhmcm1fdHlwZV9tYXAgKnR5cGVtYXA7CisJc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvID0geGZybV9wb2xpY3lfbG9ja19hZmluZm8oZmFtaWx5KTsKKwlzdHJ1Y3QgeGZybV90eXBlICoqdHlwZW1hcDsKIAlpbnQgZXJyID0gMDsKIAogCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCXR5cGVtYXAgPSBhZmluZm8tPnR5cGVfbWFwOwogCi0Jd3JpdGVfbG9ja19iaCgmdHlwZW1hcC0+bG9jayk7Ci0JaWYgKHVubGlrZWx5KHR5cGVtYXAtPm1hcFt0eXBlLT5wcm90b10gIT0gdHlwZSkpCisJaWYgKHVubGlrZWx5KHR5cGVtYXBbdHlwZS0+cHJvdG9dICE9IHR5cGUpKQogCQllcnIgPSAtRU5PRU5UOwogCWVsc2UKLQkJdHlwZW1hcC0+bWFwW3R5cGUtPnByb3RvXSA9IE5VTEw7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0eXBlbWFwLT5sb2NrKTsKLQl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7CisJCXR5cGVtYXBbdHlwZS0+cHJvdG9dID0gTlVMTDsKKwl4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV91bnJlZ2lzdGVyX3R5cGUpOwpAQCAtOTIsNyArOTAsNyBAQAogc3RydWN0IHhmcm1fdHlwZSAqeGZybV9nZXRfdHlwZSh1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQogewogCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbzsKLQlzdHJ1Y3QgeGZybV90eXBlX21hcCAqdHlwZW1hcDsKKwlzdHJ1Y3QgeGZybV90eXBlICoqdHlwZW1hcDsKIAlzdHJ1Y3QgeGZybV90eXBlICp0eXBlOwogCWludCBtb2Rsb2FkX2F0dGVtcHRlZCA9IDA7CiAKQEAgLTEwMiwxMSArMTAwLDkgQEAKIAkJcmV0dXJuIE5VTEw7CiAJdHlwZW1hcCA9IGFmaW5mby0+dHlwZV9tYXA7CiAKLQlyZWFkX2xvY2soJnR5cGVtYXAtPmxvY2spOwotCXR5cGUgPSB0eXBlbWFwLT5tYXBbcHJvdG9dOworCXR5cGUgPSB0eXBlbWFwW3Byb3RvXTsKIAlpZiAodW5saWtlbHkodHlwZSAmJiAhdHJ5X21vZHVsZV9nZXQodHlwZS0+b3duZXIpKSkKIAkJdHlwZSA9IE5VTEw7Ci0JcmVhZF91bmxvY2soJnR5cGVtYXAtPmxvY2spOwogCWlmICghdHlwZSAmJiAhbW9kbG9hZF9hdHRlbXB0ZWQpIHsKIAkJeGZybV9wb2xpY3lfcHV0X2FmaW5mbyhhZmluZm8pOwogCQlyZXF1ZXN0X21vZHVsZSgieGZybS10eXBlLSVkLSVkIiwKQEAgLTE0Miw2ICsxMzgsODkgQEAKIAltb2R1bGVfcHV0KHR5cGUtPm93bmVyKTsKIH0KIAoraW50IHhmcm1fcmVnaXN0ZXJfbW9kZShzdHJ1Y3QgeGZybV9tb2RlICptb2RlLCBpbnQgZmFtaWx5KQoreworCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbzsKKwlzdHJ1Y3QgeGZybV9tb2RlICoqbW9kZW1hcDsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KG1vZGUtPmVuY2FwID49IFhGUk1fTU9ERV9NQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFmaW5mbyA9IHhmcm1fcG9saWN5X2xvY2tfYWZpbmZvKGZhbWlseSk7CisJaWYgKHVubGlrZWx5KGFmaW5mbyA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwllcnIgPSAtRUVYSVNUOworCW1vZGVtYXAgPSBhZmluZm8tPm1vZGVfbWFwOworCWlmIChsaWtlbHkobW9kZW1hcFttb2RlLT5lbmNhcF0gPT0gTlVMTCkpIHsKKwkJbW9kZW1hcFttb2RlLT5lbmNhcF0gPSBtb2RlOworCQllcnIgPSAwOworCX0KKworCXhmcm1fcG9saWN5X3VubG9ja19hZmluZm8oYWZpbmZvKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTCh4ZnJtX3JlZ2lzdGVyX21vZGUpOworCitpbnQgeGZybV91bnJlZ2lzdGVyX21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSwgaW50IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87CisJc3RydWN0IHhmcm1fbW9kZSAqKm1vZGVtYXA7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseShtb2RlLT5lbmNhcCA+PSBYRlJNX01PREVfTUFYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZmluZm8gPSB4ZnJtX3BvbGljeV9sb2NrX2FmaW5mbyhmYW1pbHkpOworCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCisJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCisJZXJyID0gLUVOT0VOVDsKKwltb2RlbWFwID0gYWZpbmZvLT5tb2RlX21hcDsKKwlpZiAobGlrZWx5KG1vZGVtYXBbbW9kZS0+ZW5jYXBdID09IG1vZGUpKSB7CisJCW1vZGVtYXBbbW9kZS0+ZW5jYXBdID0gTlVMTDsKKwkJZXJyID0gMDsKKwl9CisKKwl4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woeGZybV91bnJlZ2lzdGVyX21vZGUpOworCitzdHJ1Y3QgeGZybV9tb2RlICp4ZnJtX2dldF9tb2RlKHVuc2lnbmVkIGludCBlbmNhcCwgaW50IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87CisJc3RydWN0IHhmcm1fbW9kZSAqbW9kZTsKKwlpbnQgbW9kbG9hZF9hdHRlbXB0ZWQgPSAwOworCisJaWYgKHVubGlrZWx5KGVuY2FwID49IFhGUk1fTU9ERV9NQVgpKQorCQlyZXR1cm4gTlVMTDsKKworcmV0cnk6CisJYWZpbmZvID0geGZybV9wb2xpY3lfZ2V0X2FmaW5mbyhmYW1pbHkpOworCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworCisJbW9kZSA9IGFmaW5mby0+bW9kZV9tYXBbZW5jYXBdOworCWlmICh1bmxpa2VseShtb2RlICYmICF0cnlfbW9kdWxlX2dldChtb2RlLT5vd25lcikpKQorCQltb2RlID0gTlVMTDsKKwlpZiAoIW1vZGUgJiYgIW1vZGxvYWRfYXR0ZW1wdGVkKSB7CisJCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKKwkJcmVxdWVzdF9tb2R1bGUoInhmcm0tbW9kZS0lZC0lZCIsIGZhbWlseSwgZW5jYXApOworCQltb2Rsb2FkX2F0dGVtcHRlZCA9IDE7CisJCWdvdG8gcmV0cnk7CisJfQorCisJeGZybV9wb2xpY3lfcHV0X2FmaW5mbyhhZmluZm8pOworCXJldHVybiBtb2RlOworfQorCit2b2lkIHhmcm1fcHV0X21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSkKK3sKKwltb2R1bGVfcHV0KG1vZGUtPm93bmVyKTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfamlmZmllcyhsb25nIHNlY3MpCiB7CiAJaWYgKHNlY3MgPj0gKE1BWF9TQ0hFRFVMRV9USU1FT1VULTEpL0haKQpAQCAtMTMwNiwxNyArMTM4NSwzMSBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZWFkX2xvY2soJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKIAlhZmluZm8gPSB4ZnJtX3BvbGljeV9hZmluZm9bZmFtaWx5XTsKLQlpZiAobGlrZWx5KGFmaW5mbyAhPSBOVUxMKSkKLQkJcmVhZF9sb2NrKCZhZmluZm8tPmxvY2spOwotCXJlYWRfdW5sb2NrKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CisJaWYgKHVubGlrZWx5KCFhZmluZm8pKQorCQlyZWFkX3VubG9jaygmeGZybV9wb2xpY3lfYWZpbmZvX2xvY2spOwogCXJldHVybiBhZmluZm87CiB9CiAKIHN0YXRpYyB2b2lkIHhmcm1fcG9saWN5X3B1dF9hZmluZm8oc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvKQogewotCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCi0JCXJldHVybjsKLQlyZWFkX3VubG9jaygmYWZpbmZvLT5sb2NrKTsKKwlyZWFkX3VubG9jaygmeGZybV9wb2xpY3lfYWZpbmZvX2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqeGZybV9wb2xpY3lfbG9ja19hZmluZm8odW5zaWduZWQgaW50IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87CisJaWYgKHVubGlrZWx5KGZhbWlseSA+PSBOUFJPVE8pKQorCQlyZXR1cm4gTlVMTDsKKwl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CisJYWZpbmZvID0geGZybV9wb2xpY3lfYWZpbmZvW2ZhbWlseV07CisJaWYgKHVubGlrZWx5KCFhZmluZm8pKQorCQl3cml0ZV91bmxvY2tfYmgoJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKKwlyZXR1cm4gYWZpbmZvOworfQorCitzdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbykKK3sKKwl3cml0ZV91bmxvY2tfYmgoJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKIH0KIAogc3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCA5M2EyZjM2Li4xN2IyOWVjIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC03Nyw2ICs3Nyw4IEBACiAJa2ZyZWUoeC0+ZWFsZyk7CiAJa2ZyZWUoeC0+Y2FsZyk7CiAJa2ZyZWUoeC0+ZW5jYXApOworCWlmICh4LT5tb2RlKQorCQl4ZnJtX3B1dF9tb2RlKHgtPm1vZGUpOwogCWlmICh4LT50eXBlKSB7CiAJCXgtPnR5cGUtPmRlc3RydWN0b3IoeCk7CiAJCXhmcm1fcHV0X3R5cGUoeC0+dHlwZSk7CkBAIC0xMTAzLDE3ICsxMTA1LDE0IEBACiAJCXJldHVybiBOVUxMOwogCXJlYWRfbG9jaygmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CiAJYWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9bZmFtaWx5XTsKLQlpZiAobGlrZWx5KGFmaW5mbyAhPSBOVUxMKSkKLQkJcmVhZF9sb2NrKCZhZmluZm8tPmxvY2spOwotCXJlYWRfdW5sb2NrKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKKwlpZiAodW5saWtlbHkoIWFmaW5mbykpCisJCXJlYWRfdW5sb2NrKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKIAlyZXR1cm4gYWZpbmZvOwogfQogCiBzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX3B1dF9hZmluZm8oc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm8pCiB7Ci0JaWYgKHVubGlrZWx5KGFmaW5mbyA9PSBOVUxMKSkKLQkJcmV0dXJuOwotCXJlYWRfdW5sb2NrKCZhZmluZm8tPmxvY2spOworCXJlYWRfdW5sb2NrKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKIH0KIAogLyogVGVtcG9yYXJpbHkgbG9jYXRlZCBoZXJlIHVudGlsIG5ldC94ZnJtL3hmcm1fdHVubmVsLmMgaXMgY3JlYXRlZCAqLwpAQCAtMTE5Niw2ICsxMTk1LDEwIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAorCXgtPm1vZGUgPSB4ZnJtX2dldF9tb2RlKHgtPnByb3BzLm1vZGUsIGZhbWlseSk7CisJaWYgKHgtPm1vZGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwogCXgtPmttLnN0YXRlID0gWEZSTV9TVEFURV9WQUxJRDsKIAogZXJyb3I6CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IDgxZDEwMDUuLmMyMWRjMjYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC00MjcsMjMgKzQyNywyNSBAQAogCWlmICh4ID09IE5VTEwpCiAJCXJldHVybiAtRVNSQ0g7CiAKKwlpZiAoKGVyciA9IHNlY3VyaXR5X3hmcm1fc3RhdGVfZGVsZXRlKHgpKSAhPSAwKQorCQlnb3RvIG91dDsKKwogCWlmICh4ZnJtX3N0YXRlX2tlcm4oeCkpIHsKLQkJeGZybV9zdGF0ZV9wdXQoeCk7Ci0JCXJldHVybiAtRVBFUk07CisJCWVyciA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CiAJfQogCiAJZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJeGZybV9zdGF0ZV9wdXQoeCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKIAogCWMuc2VxID0gbmxoLT5ubG1zZ19zZXE7CiAJYy5waWQgPSBubGgtPm5sbXNnX3BpZDsKIAljLmV2ZW50ID0gbmxoLT5ubG1zZ190eXBlOwogCWttX3N0YXRlX25vdGlmeSh4LCAmYyk7Ci0JeGZybV9zdGF0ZV9wdXQoeCk7CiAKK291dDoKKwl4ZnJtX3N0YXRlX3B1dCh4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDU1LDYgKzEwNTcsOCBAQAogCQkJCQkgICAgICBNU0dfRE9OVFdBSVQpOwogCQl9CiAJfSBlbHNlIHsKKwkJaWYgKChlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9kZWxldGUoeHApKSAhPSAwKQorCQkJZ290byBvdXQ7CiAJCWMuZGF0YS5ieWlkID0gcC0+aW5kZXg7CiAJCWMuZXZlbnQgPSBubGgtPm5sbXNnX3R5cGU7CiAJCWMuc2VxID0gbmxoLT5ubG1zZ19zZXE7CkBAIC0xMDY0LDYgKzEwNjgsNyBAQAogCiAJeGZybV9wb2xfcHV0KHhwKTsKIAorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2R1bW15LmMgYi9zZWN1cml0eS9kdW1teS5jCmluZGV4IDhjY2NjY2MuLjY0ZjZkYTAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2R1bW15LmMKKysrIGIvc2VjdXJpdHkvZHVtbXkuYwpAQCAtODEwLDYgKzgxMCwxMSBAQAogewogfQogCitzdGF0aWMgaW50IGR1bW15X3hmcm1fcG9saWN5X2RlbGV0ZV9zZWN1cml0eShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGR1bW15X3hmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCkKIHsKIAlyZXR1cm4gMDsKQEAgLTgxOSw2ICs4MjQsMTEgQEAKIHsKIH0KIAorc3RhdGljIGludCBkdW1teV94ZnJtX3N0YXRlX2RlbGV0ZV9zZWN1cml0eShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkdW1teV94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIHNrX3NpZCwgdTggZGlyKQogewogCXJldHVybiAwOwpAQCAtMTAyNCw4ICsxMDM0LDEwIEBACiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3BvbGljeV9hbGxvY19zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3BvbGljeV9mcmVlX3NlY3VyaXR5KTsKKwlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHhmcm1fcG9saWN5X2RlbGV0ZV9zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5KTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHhmcm1fc3RhdGVfZnJlZV9zZWN1cml0eSk7CisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3N0YXRlX2RlbGV0ZV9zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3BvbGljeV9sb29rdXApOwogI2VuZGlmCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gKi8KICNpZmRlZiBDT05GSUdfS0VZUwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnIGIvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCmluZGV4IGY2MzZmNTMuLjgxNGRkYzQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvS2NvbmZpZworKysgYi9zZWN1cml0eS9zZWxpbnV4L0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgU0VDVVJJVFlfU0VMSU5VWAogCWJvb2wgIk5TQSBTRUxpbnV4IFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTRUNVUklUWV9ORVRXT1JLICYmIEFVRElUICYmIE5FVCAmJiBJTkVUCisJc2VsZWN0IE5FVFdPUktfU0VDTUFSSwogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyBOU0EgU2VjdXJpdHktRW5oYW5jZWQgTGludXggKFNFTGludXgpLgpAQCAtOTUsMyArOTYsMzEgQEAKIAkgIHZpYSAvc2VsaW51eC9jaGVja3JlcXByb3QgaWYgYXV0aG9yaXplZCBieSBwb2xpY3kuCiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIDEuCisKK2NvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0VOQUJMRV9TRUNNQVJLX0RFRkFVTFQKKwlib29sICJOU0EgU0VMaW51eCBlbmFibGUgbmV3IHNlY21hcmsgbmV0d29yayBjb250cm9scyBieSBkZWZhdWx0IgorCWRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGRldGVybWluZXMgd2hldGhlciB0aGUgbmV3IHNlY21hcmstYmFzZWQgbmV0d29yaworCSAgY29udHJvbHMgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBJZiBub3QsIHRoZSBvbGQgaW50ZXJuYWwKKwkgIHBlci1wYWNrZXQgY29udHJvbHMgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHByZXNlcnZpbmcKKwkgIG9sZCBiZWhhdmlvci4KKworCSAgSWYgeW91IGVuYWJsZSB0aGUgbmV3IGNvbnRyb2xzLCB5b3Ugd2lsbCBuZWVkIHVwZGF0ZWQKKwkgIFNFTGludXggdXNlcnNwYWNlIGxpYnJhcmllcywgdG9vbHMgYW5kIHBvbGljeS4gIFR5cGljYWxseSwKKwkgIHlvdXIgZGlzdHJpYnV0aW9uIHdpbGwgcHJvdmlkZSB0aGVzZSBhbmQgZW5hYmxlIHRoZSBuZXcgY29udHJvbHMKKwkgIGluIHRoZSBrZXJuZWwgdGhleSBhbHNvIGRpc3RyaWJ1dGUuCisKKwkgIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBjYW4gYmUgb3ZlcnJpZGVuIGF0IGJvb3Qgd2l0aCB0aGUKKwkgIHNlbGludXhfY29tcGF0X25ldCBwYXJhbWV0ZXIsIGFuZCBhZnRlciBib290IHZpYQorCSAgL3NlbGludXgvY29tcGF0X25ldC4gIFNlZSBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorCSAgZm9yIGRldGFpbHMgb24gdGhpcyBwYXJhbWV0ZXIuCisKKwkgIElmIHlvdSBlbmFibGUgdGhlIG5ldyBuZXR3b3JrIGNvbnRyb2xzLCB5b3Ugd2lsbCBsaWtlbHkKKwkgIGFsc28gcmVxdWlyZSB0aGUgU0VDTUFSSyBhbmQgQ09OTlNFQ01BUksgdGFyZ2V0cywgYXMKKwkgIHdlbGwgYXMgYW55IGNvbm50cmFjayBoZWxwZXJzIGZvciBwcm90b2NvbHMgd2hpY2ggeW91CisJICB3aXNoIHRvIGNvbnRyb2wuCisKKwkgIElmIHlvdSBhcmUgdW5zdXJlIHdoYXQgZG8gZG8gaGVyZSwgc2VsZWN0IE4uCisKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvZXhwb3J0cy5jIGIvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKaW5kZXggYWU0YzczZS4uOWQ3NzM3ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKQEAgLTcyLDMgKzcyLDI1IEBACiAJKnNpZCA9IDA7CiB9CiAKK2ludCBzZWxpbnV4X3N0cmluZ190b19zaWQoY2hhciAqc3RyLCB1MzIgKnNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKQorCQlyZXR1cm4gc2VjdXJpdHlfY29udGV4dF90b19zaWQoc3RyLCBzdHJsZW4oc3RyKSwgc2lkKTsKKwllbHNlIHsKKwkJKnNpZCA9IDA7CisJCXJldHVybiAwOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNlbGludXhfc3RyaW5nX3RvX3NpZCk7CisKK2ludCBzZWxpbnV4X3JlbGFiZWxfcGFja2V0X3Blcm1pc3Npb24odTMyIHNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKSB7CisJCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnQtPnNlY3VyaXR5OworCisJCXJldHVybiBhdmNfaGFzX3Blcm0odHNlYy0+c2lkLCBzaWQsIFNFQ0NMQVNTX1BBQ0tFVCwKKwkJCQkgICAgUEFDS0VUX19SRUxBQkVMVE8sIE5VTEwpOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNlbGludXhfcmVsYWJlbF9wYWNrZXRfcGVybWlzc2lvbik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggOTBiNGNkYy4uNTRhZGM5ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtODAsNiArODAsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uOwogZXh0ZXJuIGludCBzZWxpbnV4X25sbXNnX2xvb2t1cCh1MTYgc2NsYXNzLCB1MTYgbmxtc2dfdHlwZSwgdTMyICpwZXJtKTsKK2V4dGVybiBpbnQgc2VsaW51eF9jb21wYXRfbmV0OwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUAogaW50IHNlbGludXhfZW5mb3JjaW5nID0gMDsKQEAgLTY5Niw2ICs2OTcsOCBAQAogCQlyZXR1cm4gU0VDQ0xBU1NfUEFDS0VUX1NPQ0tFVDsKIAljYXNlIFBGX0tFWToKIAkJcmV0dXJuIFNFQ0NMQVNTX0tFWV9TT0NLRVQ7CisJY2FzZSBQRl9BUFBMRVRBTEs6CisJCXJldHVybiBTRUNDTEFTU19BUFBMRVRBTEtfU09DS0VUOwogCX0KIAogCXJldHVybiBTRUNDTEFTU19TT0NLRVQ7CkBAIC0zMjE0LDQ3ICszMjE3LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfc29ja19yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwgdTMyIHNvY2tfc2lkLCB1MTYgc29ja19jbGFzcywKKwkJdTE2IGZhbWlseSwgY2hhciAqYWRkcnAsIGludCBsZW4pCiB7Ci0JdTE2IGZhbWlseTsKLQljaGFyICphZGRycDsKLQlpbnQgbGVuLCBlcnIgPSAwOworCWludCBlcnIgPSAwOwogCXUzMiBuZXRpZl9wZXJtLCBub2RlX3Blcm0sIG5vZGVfc2lkLCBpZl9zaWQsIHJlY3ZfcGVybSA9IDA7Ci0JdTMyIHNvY2tfc2lkID0gMDsKLQl1MTYgc29ja19jbGFzcyA9IDA7Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAotCWZhbWlseSA9IHNrLT5za19mYW1pbHk7Ci0JaWYgKGZhbWlseSAhPSBQRl9JTkVUICYmIGZhbWlseSAhPSBQRl9JTkVUNikKKwlpZiAoIXNrYi0+ZGV2KQogCQlnb3RvIG91dDsKIAotCS8qIEhhbmRsZSBtYXBwZWQgSVB2NCBwYWNrZXRzIGFycml2aW5nIHZpYSBJUHY2IHNvY2tldHMgKi8KLQlpZiAoZmFtaWx5ID09IFBGX0lORVQ2ICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQlmYW1pbHkgPSBQRl9JTkVUOwotCi0gCXJlYWRfbG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOwotIAlzb2NrID0gc2stPnNrX3NvY2tldDsKLSAJaWYgKHNvY2spIHsKLSAJCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0gCQlpbm9kZSA9IFNPQ0tfSU5PREUoc29jayk7Ci0gCQlpZiAoaW5vZGUpIHsKLSAJCQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotIAkJCWlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKLSAJCQlzb2NrX3NpZCA9IGlzZWMtPnNpZDsKLSAJCQlzb2NrX2NsYXNzID0gaXNlYy0+c2NsYXNzOwotIAkJfQotIAl9Ci0gCXJlYWRfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7Ci0gCWlmICghc29ja19zaWQpCi0gIAkJZ290byBvdXQ7Ci0KLQlkZXYgPSBza2ItPmRldjsKLQlpZiAoIWRldikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBzZWxfbmV0aWZfc2lkcyhkZXYsICZpZl9zaWQsIE5VTEwpOworCWVyciA9IHNlbF9uZXRpZl9zaWRzKHNrYi0+ZGV2LCAmaWZfc2lkLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMzI3Nyw0NCArMzI1MCw4OCBAQAogCQlicmVhazsKIAl9CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKLQlhZC51Lm5ldC5uZXRpZiA9IGRldi0+bmFtZTsKLQlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7Ci0KLQllcnIgPSBzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAmbGVuLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGF2Y19oYXNfcGVybShzb2NrX3NpZCwgaWZfc2lkLCBTRUNDTEFTU19ORVRJRiwgbmV0aWZfcGVybSwgJmFkKTsKKwllcnIgPSBhdmNfaGFzX3Blcm0oc29ja19zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsIG5ldGlmX3Blcm0sIGFkKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAkKLQkvKiBGaXhtZTogdGhpcyBsb29rdXAgaXMgaW5lZmZpY2llbnQgKi8KIAllcnIgPSBzZWN1cml0eV9ub2RlX3NpZChmYW1pbHksIGFkZHJwLCBsZW4sICZub2RlX3NpZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAJCi0JZXJyID0gYXZjX2hhc19wZXJtKHNvY2tfc2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwgbm9kZV9wZXJtLCAmYWQpOworCWVyciA9IGF2Y19oYXNfcGVybShzb2NrX3NpZCwgbm9kZV9zaWQsIFNFQ0NMQVNTX05PREUsIG5vZGVfcGVybSwgYWQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHJlY3ZfcGVybSkgewogCQl1MzIgcG9ydF9zaWQ7CiAKLQkJLyogRml4bWU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCAqLwogCQllcnIgPSBzZWN1cml0eV9wb3J0X3NpZChzay0+c2tfZmFtaWx5LCBzay0+c2tfdHlwZSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgc2stPnNrX3Byb3RvY29sLCBudG9ocyhhZC51Lm5ldC5zcG9ydCksCisJCSAgICAgICAgICAgICAgICAgICAgICAgIHNrLT5za19wcm90b2NvbCwgbnRvaHMoYWQtPnUubmV0LnNwb3J0KSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgJnBvcnRfc2lkKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCiAJCWVyciA9IGF2Y19oYXNfcGVybShzb2NrX3NpZCwgcG9ydF9zaWQsCi0JCQkJICAgc29ja19jbGFzcywgcmVjdl9wZXJtLCAmYWQpOworCQkJCSAgIHNvY2tfY2xhc3MsIHJlY3ZfcGVybSwgYWQpOwogCX0KIAotCWlmICghZXJyKQotCQllcnIgPSBzZWxpbnV4X3hmcm1fc29ja19yY3Zfc2tiKHNvY2tfc2lkLCBza2IpOworb3V0OgorCXJldHVybiBlcnI7Cit9CiAKK3N0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfc29ja19yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1MTYgZmFtaWx5OworCXUxNiBzb2NrX2NsYXNzID0gMDsKKwljaGFyICphZGRycDsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBzb2NrX3NpZCA9IDA7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisKKwlmYW1pbHkgPSBzay0+c2tfZmFtaWx5OworCWlmIChmYW1pbHkgIT0gUEZfSU5FVCAmJiBmYW1pbHkgIT0gUEZfSU5FVDYpCisJCWdvdG8gb3V0OworCisJLyogSGFuZGxlIG1hcHBlZCBJUHY0IHBhY2tldHMgYXJyaXZpbmcgdmlhIElQdjYgc29ja2V0cyAqLworCWlmIChmYW1pbHkgPT0gUEZfSU5FVDYgJiYgc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUCkpCisJCWZhbWlseSA9IFBGX0lORVQ7CisKKyAJcmVhZF9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisgCXNvY2sgPSBzay0+c2tfc29ja2V0OworIAlpZiAoc29jaykgeworIAkJc3RydWN0IGlub2RlICppbm9kZTsKKyAJCWlub2RlID0gU09DS19JTk9ERShzb2NrKTsKKyAJCWlmIChpbm9kZSkgeworIAkJCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CisgCQkJaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OworIAkJCXNvY2tfc2lkID0gaXNlYy0+c2lkOworIAkJCXNvY2tfY2xhc3MgPSBpc2VjLT5zY2xhc3M7CisgCQl9CisgCX0KKyAJcmVhZF91bmxvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKKyAJaWYgKCFzb2NrX3NpZCkKKyAgCQlnb3RvIG91dDsKKworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOworCWFkLnUubmV0Lm5ldGlmID0gc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICJbdW5rbm93bl0iOworCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKKworCWVyciA9IHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsICZsZW4sIDEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJaWYgKHNlbGludXhfY29tcGF0X25ldCkKKwkJZXJyID0gc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHNrLCBza2IsICZhZCwgc29ja19zaWQsCisJCQkJCQkgIHNvY2tfY2xhc3MsIGZhbWlseSwKKwkJCQkJCSAgYWRkcnAsIGxlbik7CisJZWxzZQorCQllcnIgPSBhdmNfaGFzX3Blcm0oc29ja19zaWQsIHNrYi0+c2VjbWFyaywgU0VDQ0xBU1NfUEFDS0VULAorCQkJCSAgIFBBQ0tFVF9fUkVDViwgJmFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IHNlbGludXhfeGZybV9zb2NrX3Jjdl9za2Ioc29ja19zaWQsIHNrYik7CiBvdXQ6CQogCXJldHVybiBlcnI7CiB9CkBAIC0zNDU0LDQyICszNDcxLDE4IEBACiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2VsaW51eF9pcF9wb3N0cm91dGVfbGFzdCh1bnNpZ25lZCBpbnQgaG9va251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGZhbWlseSkKK3N0YXRpYyBpbnQgc2VsaW51eF9pcF9wb3N0cm91dGVfbGFzdF9jb21wYXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYywKKwkJCQkJICAgIHN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsCisJCQkJCSAgICB1MTYgZmFtaWx5LCBjaGFyICphZGRycCwgaW50IGxlbikKIHsKLQljaGFyICphZGRycDsKLQlpbnQgbGVuLCBlcnIgPSBORl9BQ0NFUFQ7CisJaW50IGVycjsKIAl1MzIgbmV0aWZfcGVybSwgbm9kZV9wZXJtLCBub2RlX3NpZCwgaWZfc2lkLCBzZW5kX3Blcm0gPSAwOwotCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwotCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilvdXQ7CiAJCi0Jc2sgPSBza2ItPnNrOwotCWlmICghc2spCi0JCWdvdG8gb3V0OwotCQkKLQlzb2NrID0gc2stPnNrX3NvY2tldDsKLQlpZiAoIXNvY2spCi0JCWdvdG8gb3V0OwotCQkKLQlpbm9kZSA9IFNPQ0tfSU5PREUoc29jayk7Ci0JaWYgKCFpbm9kZSkKLQkJZ290byBvdXQ7Ci0KIAllcnIgPSBzZWxfbmV0aWZfc2lkcyhkZXYsICZpZl9zaWQsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwotCQogCXN3aXRjaCAoaXNlYy0+c2NsYXNzKSB7CiAJY2FzZSBTRUNDTEFTU19VRFBfU09DS0VUOgogCQluZXRpZl9wZXJtID0gTkVUSUZfX1VEUF9TRU5EOwpAQCAtMzUwOSw1NSArMzUwMiw4OCBAQAogCQlicmVhazsKIAl9CiAKLQotCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwotCWFkLnUubmV0Lm5ldGlmID0gZGV2LT5uYW1lOwotCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKLQotCWVyciA9IHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsCi0JCQkJJmxlbiwgMCkgPyBORl9EUk9QIDogTkZfQUNDRVBUOwotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsCi0JICAgICAgICAgICAgICAgICAgIG5ldGlmX3Blcm0sICZhZCkgPyBORl9EUk9QIDogTkZfQUNDRVBUOwotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQorCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsIG5ldGlmX3Blcm0sIGFkKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAkJCi0JLyogRml4bWU6IHRoaXMgbG9va3VwIGlzIGluZWZmaWNpZW50ICovCi0JZXJyID0gc2VjdXJpdHlfbm9kZV9zaWQoZmFtaWx5LCBhZGRycCwgbGVuLAotCQkJCSZub2RlX3NpZCkgPyBORl9EUk9QIDogTkZfQUNDRVBUOwotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQorCWVyciA9IHNlY3VyaXR5X25vZGVfc2lkKGZhbWlseSwgYWRkcnAsIGxlbiwgJm5vZGVfc2lkKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAkKLQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwKLQkgICAgICAgICAgICAgICAgICAgbm9kZV9wZXJtLCAmYWQpID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKLQlpZiAoZXJyICE9IE5GX0FDQ0VQVCkKKwllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwgbm9kZV9wZXJtLCBhZCk7CisJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAlpZiAoc2VuZF9wZXJtKSB7CiAJCXUzMiBwb3J0X3NpZDsKIAkJCi0JCS8qIEZpeG1lOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQgKi8KIAkJZXJyID0gc2VjdXJpdHlfcG9ydF9zaWQoc2stPnNrX2ZhbWlseSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgc2stPnNrX3R5cGUsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgIHNrLT5za19wcm90b2NvbCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgbnRvaHMoYWQudS5uZXQuZHBvcnQpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAmcG9ydF9zaWQpID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKLQkJaWYgKGVyciAhPSBORl9BQ0NFUFQpCisJCSAgICAgICAgICAgICAgICAgICAgICAgIG50b2hzKGFkLT51Lm5ldC5kcG9ydCksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICZwb3J0X3NpZCk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAogCQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBwb3J0X3NpZCwgaXNlYy0+c2NsYXNzLAotCQkgICAgICAgICAgICAgICAgICAgc2VuZF9wZXJtLCAmYWQpID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKKwkJCQkgICBzZW5kX3Blcm0sIGFkKTsKIAl9CitvdXQ6CisJcmV0dXJuIGVycjsKK30KIAotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQorc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9sYXN0KHVuc2lnbmVkIGludCBob29rbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICoqcHNrYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZmFtaWx5KQoreworCWNoYXIgKmFkZHJwOworCWludCBsZW4sIGVyciA9IDA7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CisJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKKwlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKW91dDsKKworCXNrID0gc2tiLT5zazsKKwlpZiAoIXNrKQorCQlnb3RvIG91dDsKKworCXNvY2sgPSBzay0+c2tfc29ja2V0OworCWlmICghc29jaykKKwkJZ290byBvdXQ7CisKKwlpbm9kZSA9IFNPQ0tfSU5PREUoc29jayk7CisJaWYgKCFpbm9kZSkKKwkJZ290byBvdXQ7CisKKwlpc2VjID0gaW5vZGUtPmlfc2VjdXJpdHk7CisKKwlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKKwlhZC51Lm5ldC5uZXRpZiA9IGRldi0+bmFtZTsKKwlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CisKKwllcnIgPSBzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAmbGVuLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQpCisJCWVyciA9IHNlbGludXhfaXBfcG9zdHJvdXRlX2xhc3RfY29tcGF0KHNrLCBkZXYsIGlzZWMsICZhZCwKKwkJCQkJCSAgICAgICBmYW1pbHksIGFkZHJwLCBsZW4pOworCWVsc2UKKwkJZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgc2tiLT5zZWNtYXJrLCBTRUNDTEFTU19QQUNLRVQsCisJCQkJICAgUEFDS0VUX19TRU5ELCAmYWQpOworCisJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAllcnIgPSBzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3QoaXNlYy0+c2lkLCBza2IpOwotCiBvdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gZXJyID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwdjRfcG9zdHJvdXRlX2xhc3QodW5zaWduZWQgaW50IGhvb2tudW0sCkBAIC00Mzc0LDggKzQ0MDAsMTAgQEAKIAkueGZybV9wb2xpY3lfYWxsb2Nfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jLAogCS54ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSA9CXNlbGludXhfeGZybV9wb2xpY3lfY2xvbmUsCiAJLnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fcG9saWN5X2ZyZWUsCisJLnhmcm1fcG9saWN5X2RlbGV0ZV9zZWN1cml0eSA9CXNlbGludXhfeGZybV9wb2xpY3lfZGVsZXRlLAogCS54ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5ID0Jc2VsaW51eF94ZnJtX3N0YXRlX2FsbG9jLAogCS54ZnJtX3N0YXRlX2ZyZWVfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fc3RhdGVfZnJlZSwKKwkueGZybV9zdGF0ZV9kZWxldGVfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fc3RhdGVfZGVsZXRlLAogCS54ZnJtX3BvbGljeV9sb29rdXAgPSAJCXNlbGludXhfeGZybV9wb2xpY3lfbG9va3VwLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X2luaGVyaXQuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmgKaW5kZXggYjBlNmIxMi4uYTY4ZmRkNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X2luaGVyaXQuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfaW5oZXJpdC5oCkBAIC0yOSwzICsyOSw0IEBACiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0ROUlRfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKKyAgIFNfKFNFQ0NMQVNTX0FQUExFVEFMS19TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAppbmRleCA1OTFlOThkLi43MGVlNjVhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaApAQCAtMjM5LDMgKzIzOSw2IEBACiAgICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1NFTkRUTywgInNlbmR0byIpCiAgICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1JFQ1ZGUk9NLCAicmVjdmZyb20iKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRVRDT05URVhULCAic2V0Y29udGV4dCIpCisgICBTXyhTRUNDTEFTU19QQUNLRVQsIFBBQ0tFVF9fU0VORCwgInNlbmQiKQorICAgU18oU0VDQ0xBU1NfUEFDS0VULCBQQUNLRVRfX1JFQ1YsICJyZWN2IikKKyAgIFNfKFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19SRUxBQkVMVE8sICJyZWxhYmVsdG8iKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAppbmRleCBkN2YwMmVkLi4xZDljZjNkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApAQCAtOTMzLDMgKzkzMywyOSBAQAogI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fU0VORF9NU0cgICAweDAwMTAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX05BTUVfQklORCAgMHgwMDIwMDAwMFVMCiAKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19XUklURSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgICAgIDB4MDAwMDAwODBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19DT05ORUNUICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAgICAgMHgwMDIwMDAwMFVMCisKKyNkZWZpbmUgUEFDS0VUX19TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIFBBQ0tFVF9fUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAorI2RlZmluZSBQQUNLRVRfX1JFTEFCRUxUTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaAppbmRleCA3N2IyYzU5Li4zYWVjNzVmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvY2xhc3NfdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzX3RvX3N0cmluZy5oCkBAIC01OCwzICs1OCw1IEBACiAgICAgU18oIm5zY2QiKQogICAgIFNfKCJhc3NvY2lhdGlvbiIpCiAgICAgU18oIm5ldGxpbmtfa29iamVjdF91ZXZlbnRfc29ja2V0IikKKyAgICBTXygiYXBwbGV0YWxrX3NvY2tldCIpCisgICAgU18oInBhY2tldCIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9mbGFzay5oCmluZGV4IGViOWY1MDguLmEwZWI5ZTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9mbGFzay5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9mbGFzay5oCkBAIC02MCw2ICs2MCw4IEBACiAjZGVmaW5lIFNFQ0NMQVNTX05TQ0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MwogI2RlZmluZSBTRUNDTEFTU19BU1NPQ0lBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQKICNkZWZpbmUgU0VDQ0xBU1NfTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVQgICAgICAgICAgIDU1CisjZGVmaW5lIFNFQ0NMQVNTX0FQUExFVEFMS19TT0NLRVQgICAgICAgICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBTRUNDTEFTU19QQUNLRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTcKIAogLyoKICAqIFNlY3VyaXR5IGlkZW50aWZpZXIgaW5kaWNlcyBmb3IgaW5pdGlhbCBlbnRpdGllcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmgKaW5kZXggYzEwZjFmYy4uYzk2NDk4YSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oCkBAIC05LDggKzksMTAgQEAKIGludCBzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCk7CiBpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9jbG9uZShzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgc3RydWN0IHhmcm1fcG9saWN5ICpuZXcpOwogdm9pZCBzZWxpbnV4X3hmcm1fcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7CitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7CiBpbnQgc2VsaW51eF94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpOwogdm9pZCBzZWxpbnV4X3hmcm1fc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CitpbnQgc2VsaW51eF94ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiBpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIHNrX3NpZCwgdTggZGlyKTsKIAogLyoKQEAgLTQ5LDcgKzUxLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHUzMiBpc2VjX3NpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gTkZfQUNDRVBUOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X3NvY2tldF9nZXRwZWVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCBhNGVmYzk2Li4yZTczZDMyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTM4LDYgKzM4LDE0IEBACiAKIHVuc2lnbmVkIGludCBzZWxpbnV4X2NoZWNrcmVxcHJvdCA9IENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0NIRUNLUkVRUFJPVF9WQUxVRTsKIAorI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0VOQUJMRV9TRUNNQVJLX0RFRkFVTFQKKyNkZWZpbmUgU0VMSU5VWF9DT01QQVRfTkVUX1ZBTFVFIDAKKyNlbHNlCisjZGVmaW5lIFNFTElOVVhfQ09NUEFUX05FVF9WQUxVRSAxCisjZW5kaWYKKworaW50IHNlbGludXhfY29tcGF0X25ldCA9IFNFTElOVVhfQ09NUEFUX05FVF9WQUxVRTsKKwogc3RhdGljIGludCBfX2luaXQgY2hlY2tyZXFwcm90X3NldHVwKGNoYXIgKnN0cikKIHsKIAlzZWxpbnV4X2NoZWNrcmVxcHJvdCA9IHNpbXBsZV9zdHJ0b3VsKHN0cixOVUxMLDApID8gMSA6IDA7CkBAIC00NSw2ICs1MywxMyBAQAogfQogX19zZXR1cCgiY2hlY2tyZXFwcm90PSIsIGNoZWNrcmVxcHJvdF9zZXR1cCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IHNlbGludXhfY29tcGF0X25ldF9zZXR1cChjaGFyICpzdHIpCit7CisJc2VsaW51eF9jb21wYXRfbmV0ID0gc2ltcGxlX3N0cnRvdWwoc3RyLE5VTEwsMCkgPyAxIDogMDsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInNlbGludXhfY29tcGF0X25ldD0iLCBzZWxpbnV4X2NvbXBhdF9uZXRfc2V0dXApOworCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoc2VsX211dGV4KTsKIApAQCAtODUsNiArMTAwLDcgQEAKIAlTRUxfQVZDLAkvKiBBVkMgbWFuYWdlbWVudCBkaXJlY3RvcnkgKi8KIAlTRUxfTUVNQkVSLAkvKiBjb21wdXRlIHBvbHlpbnN0YW50aWF0aW9uIG1lbWJlcnNoaXAgZGVjaXNpb24gKi8KIAlTRUxfQ0hFQ0tSRVFQUk9ULCAvKiBjaGVjayByZXF1ZXN0ZWQgcHJvdGVjdGlvbiwgbm90IGtlcm5lbC1hcHBsaWVkIG9uZSAqLworCVNFTF9DT01QQVRfTkVULAkvKiB3aGV0aGVyIHRvIHVzZSBvbGQgY29tcGF0IG5ldHdvcmsgcGFja2V0IGNvbnRyb2xzICovCiB9OwogCiAjZGVmaW5lIFRNUEJVRkxFTgkxMgpAQCAtMzY0LDYgKzM4MCw1NSBAQAogCS53cml0ZQkJPSBzZWxfd3JpdGVfY2hlY2tyZXFwcm90LAogfTsKIAorc3RhdGljIHNzaXplX3Qgc2VsX3JlYWRfY29tcGF0X25ldChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOworCXNzaXplX3QgbGVuZ3RoOworCisJbGVuZ3RoID0gc2NucHJpbnRmKHRtcGJ1ZiwgVE1QQlVGTEVOLCAiJWQiLCBzZWxpbnV4X2NvbXBhdF9uZXQpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCB0bXBidWYsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9jb21wYXRfbmV0KHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKnBhZ2U7CisJc3NpemVfdCBsZW5ndGg7CisJaW50IG5ld192YWx1ZTsKKworCWxlbmd0aCA9IHRhc2tfaGFzX3NlY3VyaXR5KGN1cnJlbnQsIFNFQ1VSSVRZX19MT0FEX1BPTElDWSk7CisJaWYgKGxlbmd0aCkKKwkJcmV0dXJuIGxlbmd0aDsKKworCWlmIChjb3VudCA+PSBQQUdFX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCWlmICgqcHBvcyAhPSAwKSB7CisJCS8qIE5vIHBhcnRpYWwgd3JpdGVzLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcGFnZSA9IChjaGFyKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsZW5ndGggPSAtRUZBVUxUOworCWlmIChjb3B5X2Zyb21fdXNlcihwYWdlLCBidWYsIGNvdW50KSkKKwkJZ290byBvdXQ7CisKKwlsZW5ndGggPSAtRUlOVkFMOworCWlmIChzc2NhbmYocGFnZSwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkKKwkJZ290byBvdXQ7CisKKwlzZWxpbnV4X2NvbXBhdF9uZXQgPSBuZXdfdmFsdWUgPyAxIDogMDsKKwlsZW5ndGggPSBjb3VudDsKK291dDoKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOworCXJldHVybiBsZW5ndGg7Cit9CitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfY29tcGF0X25ldF9vcHMgPSB7CisJLnJlYWQJCT0gc2VsX3JlYWRfY29tcGF0X25ldCwKKwkud3JpdGUJCT0gc2VsX3dyaXRlX2NvbXBhdF9uZXQsCit9OworCiAvKgogICogUmVtYWluaW5nIG5vZGVzIHVzZSB0cmFuc2FjdGlvbiBiYXNlZCBJTyBtZXRob2RzIGxpa2UgbmZzZC9uZnNjdGwuYwogICovCkBAIC0xMjE5LDYgKzEyODQsNyBAQAogCQlbU0VMX0RJU0FCTEVdID0geyJkaXNhYmxlIiwgJnNlbF9kaXNhYmxlX29wcywgU19JV1VTUn0sCiAJCVtTRUxfTUVNQkVSXSA9IHsibWVtYmVyIiwgJnRyYW5zYWN0aW9uX29wcywgU19JUlVHT3xTX0lXVUdPfSwKIAkJW1NFTF9DSEVDS1JFUVBST1RdID0geyJjaGVja3JlcXByb3QiLCAmc2VsX2NoZWNrcmVxcHJvdF9vcHMsIFNfSVJVR098U19JV1VTUn0sCisJCVtTRUxfQ09NUEFUX05FVF0gPSB7ImNvbXBhdF9uZXQiLCAmc2VsX2NvbXBhdF9uZXRfb3BzLCBTX0lSVUdPfFNfSVdVU1J9LAogCQkvKiBsYXN0IG9uZSAqLyB7IiJ9CiAJfTsKIAlyZXQgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgU0VMSU5VWF9NQUdJQywgc2VsaW51eF9maWxlcyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCmluZGV4IGFiZTk5ZDguLjY2MzNmYjAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCkBAIC0xMzIsMTAgKzEzMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyoKLQkgKiBEb2VzIHRoZSBzdWJqZWN0IGhhdmUgcGVybWlzc2lvbiB0byBzZXQgc2VjdXJpdHkgb3IgcGVybWlzc2lvbiB0bwotCSAqIGRvIHRoZSByZWxhYmVsPwotCSAqIE11c3QgYmUgcGVybWl0dGVkIHRvIHJlbGFiZWwgZnJvbSBkZWZhdWx0IHNvY2tldCB0eXBlIChwcm9jZXNzIHR5cGUpCi0JICogdG8gc3BlY2lmaWVkIGNvbnRleHQKKwkgKiBEb2VzIHRoZSBzdWJqZWN0IGhhdmUgcGVybWlzc2lvbiB0byBzZXQgc2VjdXJpdHkgY29udGV4dD8KIAkgKi8KIAlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGN0eC0+Y3R4X3NpZCwKIAkJCSAgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCkBAIC0yMDEsNiArMTk4LDIzIEBACiB9CiAKIC8qCisgKiBMU00gaG9vayBpbXBsZW1lbnRhdGlvbiB0aGF0IGF1dGhvcml6ZXMgZGVsZXRpb24gb2YgbGFiZWxlZCBwb2xpY2llcy4KKyAqLworaW50IHNlbGludXhfeGZybV9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCit7CisJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3VycmVudC0+c2VjdXJpdHk7CisJc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geHAtPnNlY3VyaXR5OworCWludCByYyA9IDA7CisKKwlpZiAoY3R4KQorCQlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGN0eC0+Y3R4X3NpZCwKKwkJCQkgIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAorCQkJCSAgQVNTT0NJQVRJT05fX1NFVENPTlRFWFQsIE5VTEwpOworCisJcmV0dXJuIHJjOworfQorCisvKgogICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBhbGxvY3MgYW5kIHRyYW5zZmVycyBzZWNfY3R4IHNwZWMgdG8KICAqIHhmcm1fc3RhdGUuCiAgKi8KQEAgLTI5Miw2ICszMDYsMjMgQEAKIAlyZXR1cm4gU0VDU0lEX05VTEw7CiB9CiAKKyAvKgorICAqIExTTSBob29rIGltcGxlbWVudGF0aW9uIHRoYXQgYXV0aG9yaXplcyBkZWxldGlvbiBvZiBsYWJlbGVkIFNBcy4KKyAgKi8KK2ludCBzZWxpbnV4X3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQoreworCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnQtPnNlY3VyaXR5OworCXN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCA9IHgtPnNlY3VyaXR5OworCWludCByYyA9IDA7CisKKwlpZiAoY3R4KQorCQlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGN0eC0+Y3R4X3NpZCwKKwkJCQkgIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAorCQkJCSAgQVNTT0NJQVRJT05fX1NFVENPTlRFWFQsIE5VTEwpOworCisJcmV0dXJuIHJjOworfQorCiAvKgogICogTFNNIGhvb2sgdGhhdCBjb250cm9scyBhY2Nlc3MgdG8gdW5sYWJlbGxlZCBwYWNrZXRzLiAgSWYKICAqIGEgeGZybV9zdGF0ZSBpcyBhdXRob3JpemFibGUgKGRlZmluZWQgYnkgbWFjcm8pIHRoZW4gaXQgd2FzCkBAIC0zNTYsMTggKzM4NywxMiBAQAogCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3RfdGVzdC0+eGZybTsKIAogCQkJaWYgKHggJiYgc2VsaW51eF9hdXRob3JpemFibGVfeGZybSh4KSkKLQkJCQlnb3RvIGFjY2VwdDsKKwkJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCXJjID0gYXZjX2hhc19wZXJtKGlzZWNfc2lkLCBTRUNJTklUU0lEX1VOTEFCRUxFRCwgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCiAJCQkgIEFTU09DSUFUSU9OX19TRU5EVE8sIE5VTEwpOwotCWlmIChyYykKLQkJZ290byBkcm9wOwotCi1hY2NlcHQ6Ci0JcmV0dXJuIE5GX0FDQ0VQVDsKLQotZHJvcDoKLQlyZXR1cm4gTkZfRFJPUDsKK291dDoKKwlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvS2NvbmZpZyBiL3NvdW5kL29zcy9LY29uZmlnCmluZGV4IDU1OGM2ZWQuLjA4MGFiMDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9LY29uZmlnCisrKyBiL3NvdW5kL29zcy9LY29uZmlnCkBAIC05OCw4ICs5OCw4IEBACiAJdHJpc3RhdGUgIlNHSSBIQUwyIHNvdW5kIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgU0dJX0lQMjIgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhbiBTR0kgSW5keSBzeXN0ZW0gYW5kIHdhbnQgdG8gYmUgYWJsZSB0bwotCSAgdXNlIGl0J3Mgb24tYm9hcmQgQTIgYXVkaW8gc3lzdGVtLgorCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhbiBTR0kgSW5keSBvciBJbmRpZ28yIHN5c3RlbSBhbmQgd2FudCB0byBiZSBhYmxlIHRvCisJICB1c2UgaXRzIG9uLWJvYXJkIEEyIGF1ZGlvIHN5c3RlbS4KIAogY29uZmlnIFNPVU5EX0lUODE3MgogCXRyaXN0YXRlICJJVDgxNzJHIFNvdW5kIgo=