ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYWNiMDEwYi4uMGRjODQ4YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTk5OCw2ICs5OTgsOCBAQAogCiAJbm93YgkJW0FSTV0KIAorCW5yX3VhcnRzPQlbU0VSSUFMXSBtYXhpbXVtIG51bWJlciBvZiBVQVJUcyB0byBiZSByZWdpc3RlcmVkLgorCiAJb3BsMz0JCVtIVyxPU1NdCiAJCQlGb3JtYXQ6IDxpbz4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggN2E3NGUzZS4uNTBiOWFmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC05OSwxMyArOTksNiBAQAogCSAgRXRoZXJuZXQgaW50ZXJmYWNlLCB0d28gUENNQ0lBIHNvY2tldHMsIHR3byBzZXJpYWwgcG9ydHMgYW5kIGEKIAkgIHBhcmFsbGVsIHBvcnQuCiAKLWNvbmZpZyBBUkNIX0NBTUVMT1QKLQlib29sICJFcHhhMTBkYiIKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgQWx0ZXJhJ3MgRXhjYWxpYnVyIFhBMTAgZGV2ZWxvcG1lbnQgYm9hcmQuCi0JICBJZiB5b3Ugd291bGQgbGlrZSB0byBidWlsZCB5b3VyIGtlcm5lbCB0byBydW4gb24gb25lIG9mIHRoZXNlIGJvYXJkcwotCSAgdGhlbiB5b3UgbXVzdCBzYXkgJ1knIGhlcmUuIE90aGVyd2lzZSBzYXkgJ04nCi0KIGNvbmZpZyBBUkNIX0ZPT1RCUklER0UKIAlib29sICJGb290QnJpZGdlIgogCXNlbGVjdCBGT09UQlJJREdFCkBAIC0yMTMsMTIgKzIwNiwxNiBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBBZ2lsZW50IEFBRUMtMjAwMAogCitjb25maWcgQVJDSF9BVDkxUk05MjAwCisJYm9vbCAiQVQ5MVJNOTIwMCIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGFuIEFUOTFSTTkyMDAtYmFzZWQKKwkgIGJvYXJkLgorCiBlbmRjaG9pY2UKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9LY29uZmlnIgotCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9LY29uZmlnIgpAQCAtMjUzLDYgKzI1MCw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9LY29uZmlnIgorCiAjIERlZmluaXRpb25zIHRvIG1ha2UgbGlmZSBlYXNpZXIKIGNvbmZpZyBBUkNIX0FDT1JOCiAJYm9vbApAQCAtNDE4LDcgKzQxNyw4IEBACiAJCSAgIEFSQ0hfRUJTQTI4NSB8fCBBUkNIX0lNWCB8fCBBUkNIX0lOVEVHUkFUT1IgfHwgXAogCQkgICBBUkNIX0xVQkJPQ0sgfHwgTUFDSF9NQUlOU1RPTkUgfHwgQVJDSF9ORVRXSU5ERVIgfHwgXAogCQkgICBBUkNIX09NQVAgfHwgQVJDSF9QNzIwVCB8fCBBUkNIX1BYQV9JRFAgfHwgXAotCQkgICBBUkNIX1NBMTEwMCB8fCBBUkNIX1NIQVJLIHx8IEFSQ0hfVkVSU0FUSUxFCisJCSAgIEFSQ0hfU0ExMTAwIHx8IEFSQ0hfU0hBUksgfHwgQVJDSF9WRVJTQVRJTEUgfHwgXAorCQkgICBBUkNIX0FUOTFSTTkyMDAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIExFRHMgb24geW91ciBtYWNoaW5lIHdpbGwgYmUgdXNlZAogCSAgdG8gcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBjdXJyZW50IHN5c3RlbSBzdGF0dXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IGFmYWYzYTEuLjFmYTJhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC04NCw3ICs4NCw2IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1BYQSkJICAgOj0gcHhhCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0w3MjAwKQkgICA6PSBsNzIwMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JTlRFR1JBVE9SKSA6PSBpbnRlZ3JhdG9yCi0gbWFjaGluZS0kKENPTkZJR19BUkNIX0NBTUVMT1QpCSAgIDo9IGVweGExMGRiCiAgdGV4dG9mcy0kKENPTkZJR19BUkNIX0NMUFM3MTFYKSAgIDo9IDB4MDAwMjgwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpICAgOj0gY2xwczcxMXgKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSU9QM1hYKQkgICA6PSBpb3AzeHgKQEAgLTEwMCw2ICs5OSw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0g3MjBYKQkgICA6PSBoNzIweAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9BQUVDMjAwMCkgICA6PSBhYWVjMjAwMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9SRUFMVklFVykgICA6PSByZWFsdmlldworIG1hY2hpbmUtJChDT05GSUdfQVJDSF9BVDkxUk05MjAwKSA6PSBhdDkxcm05MjAwCiAKIGlmZXEgKCQoQ09ORklHX0FSQ0hfRUJTQTExMCkseSkKICMgVGhpcyBpcyB3aGF0IGhhcHBlbnMgaWYgeW91IGZvcmdldCB0aGUgSU9DUzE2IGxpbmUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggNmI1MDVjZS4uMzVmZmUwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMjEsMTAgKzIxLDYgQEAKIE9CSlMJCSs9IGhlYWQtc2hhcmsubyBvZnctc2hhcmsubwogZW5kaWYKIAotaWZlcSAoJChDT05GSUdfQVJDSF9DQU1FTE9UKSx5KQotT0JKUwkJKz0gaGVhZC1lcHhhMTBkYi5vCi1lbmRpZgotCiBpZmVxICgkKENPTkZJR19BUkNIX0w3MjAwKSx5KQogT0JKUwkJKz0gaGVhZC1sNzIwMC5vCiBlbmRpZgpAQCAtNTAsNiArNDYsMTAgQEAKIE9CSlMJCSs9IGhlYWQtc2hhcnBzbC5vCiBlbmRpZgogCitpZmVxICgkKENPTkZJR19BUkNIX0FUOTFSTTkyMDApLHkpCitPQkpTCQkrPSBoZWFkLWF0OTFybTkyMDAubworZW5kaWYKKwogaWZlcSAoJChDT05GSUdfREVCVUdfSUNFRENDKSx5KQogT0JKUyAgICAgICAgICAgICs9IGljZS1kY2MubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWF0OTFybTkyMDAuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWF0OTFybTkyMDAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTE5ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtYXQ5MXJtOTIwMC5TCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1hdDkxcm05MjAwLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKwkJLnNlY3Rpb24JIi5zdGFydCIsICJheCIKKworCQlAIEF0bWVsIEFUOTFSTTkyMDAtREsgOiAyNjIKKwkJbW92CXIzLAkjKE1BQ0hfVFlQRV9BVDkxUk05MjAwREsgJiAweGZmKQorCQlvcnIJcjMsIHIzLCAjKE1BQ0hfVFlQRV9BVDkxUk05MjAwREsgJiAweGZmMDApCisJCWNtcAlyNywgcjMKKwkJYmVxCTk5ZgorCisJCUAgQ29nZW50IENTQjMzNyA6IDM5OQorCQltb3YJcjMsCSMoTUFDSF9UWVBFX0NTQjMzNyAmIDB4ZmYpCisJCW9ycglyMywgcjMsICMoTUFDSF9UWVBFX0NTQjMzNyAmIDB4ZmYwMCkKKwkJY21wCXI3LCByMworCQliZXEJOTlmCisKKwkJQCBDb2dlbnQgQ1NCNjM3IDogNjQ4CisJCW1vdglyMywJIyhNQUNIX1RZUEVfQ1NCNjM3ICYgMHhmZikKKwkJb3JyCXIzLCByMywJIyhNQUNIX1RZUEVfQ1NCNjM3ICYgMHhmZjAwKQorCQljbXAJcjcsIHIzCisJCWJlcQk5OWYKKworCQlAIEF0bWVsIEFUOTFSTTkyMDAtRUsgOiA3MDUKKwkJbW92CXIzLAkjKE1BQ0hfVFlQRV9BVDkxUk05MjAwRUsgJiAweGZmKQorCQlvcnIJcjMsIHIzLCAjKE1BQ0hfVFlQRV9BVDkxUk05MjAwRUsgJiAweGZmMDApCisJCWNtcAlyNywgcjMKKwkJYmVxCTk5ZgorCisJCUAgQ29uaXRlYyBDYXJtZXZhIDogNzY5CisJCW1vdglyMywJIyhNQUNIX1RZUEVfQ0FSTUVWQSAmIDB4ZmYpCisJCW9ycglyMywgcjMsICMoTUFDSF9UWVBFX0NBUk1FVkEgJiAweGZmMDApCisJCWNtcAlyNywgcjMKKwkJYmVxCTk5ZgorCisJCUAgS3dpa0J5dGUgS0I5MjB4IDogNjEyCisJCW1vdglyMywJIyhNQUNIX1RZUEVfS0I5MjAwICYgMHhmZikKKwkJb3JyCXIzLCByMywgIyhNQUNIX1RZUEVfS0I5MjAwICYgMHhmZjAwKQorCQljbXAJcjcsIHIzCisJCWJlcQk5OWYKKworCQlAIFVua25vd24gYm9hcmQsIHVzZSB0aGUgQVQ5MVJNOTIwMERLIGJvYXJkCisJCUAgbW92CXI3LCAjTUFDSF9UWVBFX0FUOTFSTTkyMDAKKwkJbW92CXI3LAkjKE1BQ0hfVFlQRV9BVDkxUk05MjAwREsgJiAweGZmKQorCQlvcnIJcjcsIHI3LCAjKE1BQ0hfVFlQRV9BVDkxUk05MjAwREsgJiAweGZmMDApCisKKzk5OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtZXB4YTEwZGIuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWVweGExMGRiLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NzY4MWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtZXB4YTEwZGIuUworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZXhjYWxpYnVyLmg+Ci0KLQkJLnNlY3Rpb24JIi5zdGFydCIsICJheCIKLQkJbW92CXI3LCAjTUFDSF9UWVBFX0NBTUVMT1QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCmluZGV4IGNjYmI0YzAuLjA4OWM5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKaW5kZXggNWQ5MmFmOS4uY2ZlNmJkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwpAQCAtNjYsNyArNjYsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Jhc3RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9iYXN0X2RlZmNvbmZpZwppbmRleCAzNWUzYTk5Li42ODg2MDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Jhc3RfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFzdF9kZWZjb25maWcKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwppbmRleCBkOGZlMGY0Li5mODFhNjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwpAQCAtNjUsNyArNjUsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NscHM3NTAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY2xwczc1MDBfZGVmY29uZmlnCmluZGV4IDkwODc1ODMuLmFmOWFlNTM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NscHM3NTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NscHM3NTAwX2RlZmNvbmZpZwpAQCAtNTcsNyArNTcsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKaW5kZXggNDBkZmUwNy4uMTU0NjhhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwpAQCAtNzEsNyArNzEsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvcmdpX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCmluZGV4IDA2MjI5MDIuLjNjMzQ2MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCkBAIC04Nyw3ICs4Nyw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnCmluZGV4IDZmNjE5MjkuLmFmY2ZmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VCU0ExMTA9eQotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKaW5kZXggNzhiMDhlZC4uNmJhNzM1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnCkBAIC01Nyw3ICs1Nyw2IEBACiBDT05GSUdfQVJDSF9DTFBTNzExWD15CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZwppbmRleCBmZDdjMDA0Li45NTkyZTM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKQEAgLTg2LDcgKzg2LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lcDgwMjE5X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA4MDIxOV9kZWZjb25maWcKaW5kZXggOTYzNDJhZi4uZmJlMzEyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lcDgwMjE5X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VwODAyMTlfZGVmY29uZmlnCkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lPUDNYWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VweGExMGRiX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXB4YTEwZGJfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmI4YjU4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXB4YTEwZGJfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNjQ0ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMjI6NDY6NTEgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9DQU1FTE9UPXkKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBFcHhhMTBkYgotIwotCi0jCi0jIFBMRCBob3Rzd2FwIHN1cHBvcnQKLSMKLUNPTkZJR19QTEQ9eQotIyBDT05GSUdfUExEX0hPVFNXQVAgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfQVJNOTIyVD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVVBMCwxMTUyMDAgaW5pdHJkPTB4MDAyMDAwMDAsOE0gcm9vdD0vZGV2L3JhbTAgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9eQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPXkKLUNPTkZJR19QUFBfU1lOQ19UVFk9eQotQ09ORklHX1BQUF9ERUZMQVRFPXkKLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX1VBUlQwMD15Ci1DT05GSUdfU0VSSUFMX1VBUlQwMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz15Ci1DT05GSUdfQVVUT0ZTNF9GUz15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi0jIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPXkKLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZwppbmRleCA5NzM3YzQ4Li4yYTYxMmQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKQEAgLTYzLDcgKzYzLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0ZPT1RCUklER0U9eQogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcKaW5kZXggYjZmNjg4ZC4uNjVkYzczYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcKQEAgLTU3LDcgKzU3LDYgQEAKIENPTkZJR19BUkNIX0NMUFM3MTFYPXkKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcKaW5kZXggYjlkZTA3ZC4uN2EwZGEwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcKQEAgLTY1LDcgKzY1LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZwppbmRleCAzOWMxM2EzLi4xMTY5MjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZwpAQCAtNjAsNyArNjAsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnCmluZGV4IGZiZjVjMjQuLjlkNjJlZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnCkBAIC02Myw3ICs2Myw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCmluZGV4IGZiNDFhMzYuLmE0NWI1NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZwpAQCAtNjYsNyArNjYsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwppbmRleCAyN2VlNzY4Li5kMWJhN2ZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKQEAgLTY1LDcgKzY1LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JTlRFR1JBVE9SPXkKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXEzMTI0NF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lxMzEyNDRfZGVmY29uZmlnCmluZGV4IGU3MTQ0M2IuLmMwNzYyOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXEzMTI0NF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pcTMxMjQ0X2RlZmNvbmZpZwpAQCAtNjUsNyArNjUsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzWFg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzIxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMyMV9kZWZjb25maWcKaW5kZXggYWI1YWQyMy4uMThmYTE2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzIxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lxODAzMjFfZGVmY29uZmlnCkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lPUDNYWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lxODAzMzFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMxX2RlZmNvbmZpZwppbmRleCBiYjUzNjEzLi5mNTAwMzVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lxODAzMzFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMV9kZWZjb25maWcKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSU9QM1hYPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lxODAzMzJfZGVmY29uZmlnCmluZGV4IDMwNWYwMWYuLjE4YjNmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMyX2RlZmNvbmZpZwpAQCAtNjQsNyArNjQsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzWFg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZwppbmRleCBlNmE0ZDI2Li5kOWQ2YmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZwpAQCAtODYsNyArODYsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCmluZGV4IDU1NzJjZjkuLjJkYzlkNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCkBAIC04Niw3ICs4Niw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKaW5kZXggMGZkZGJkZS4uNDI0ODEyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKQEAgLTg2LDcgKzg2LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZwppbmRleCA4OWI5YWEwLi5lYThmNGI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZwpAQCAtODYsNyArODYsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKaW5kZXggNjEzYWZhYi4uNDk3NWI5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZwpAQCAtODUsNyArODUsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwppbmRleCBiODhhZWJhLi5hZDEwNDhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKQEAgLTYzLDcgKzYzLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKaW5kZXggNzAzMzgyOS4uYzNhOTMyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCkBAIC02Miw3ICs2Miw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKaW5kZXggZDY0NzA2ZC4uNjdlYWEyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKQEAgLTYwLDcgKzYwLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZwppbmRleCA4N2NiZWRmLi4yMDhkNTkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZwpAQCAtNjAsNyArNjAsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZwppbmRleCA0YmM4NzE3Li44MWRhYWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcKQEAgLTYzLDcgKzYzLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZwppbmRleCAzY2E2NGNhLi40MmY2YTc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZwpAQCAtNjIsNyArNjIsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKaW5kZXggMTUzZDY4NS4uYjExMmJkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcKaW5kZXggNjUxN2QxNi4uZDE2ZjZjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDFhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCmluZGV4IDdmYjFmN2MuLjNkMzUyNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCkBAIC02NSw3ICs2NSw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZwppbmRleCA2ZTgxYWNmLi4yY2FlMWVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnCkBAIC01OCw3ICs1OCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GT09UQlJJREdFPXkKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKaW5kZXggNTI5ZjBmNy4uZWUzZWNiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpAQCAtODUsNyArODUsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwppbmRleCAxMGZlYzg5Li4yNGU4YmRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKQEAgLTYzLDcgKzYzLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcKaW5kZXggMjFjMzI3OC4uYjcxZDMxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnCkBAIC02Myw3ICs2Myw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKaW5kZXggMDQ4NWIyZi4uM2YxZWM0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKQEAgLTY1LDcgKzY1LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCmluZGV4IDE5MTg0YzEuLmI0OThhZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKQEAgLTY2LDcgKzY2LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKaW5kZXggM2Y5NzU5MC4uMzNmMzEwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCkBAIC04NSw3ICs4NSw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCmluZGV4IGUzZmFjYzQuLmQwNTJjOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZwpAQCAtNjIsNyArNjIsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCmluZGV4IDI3MTgyM2YuLmM0OGQxNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCkBAIC02Niw3ICs2Niw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwppbmRleCA1MzczZWViLi4yZTVhNjE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc21kazI0MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zbWRrMjQxMF9kZWZjb25maWcKaW5kZXggMmM2MDg2NS4uNGQxMjNkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zbWRrMjQxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zbWRrMjQxMF9kZWZjb25maWcKQEAgLTU4LDcgKzU4LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZwppbmRleCA5ODk1NTM5Li5kMWFjZTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZwpAQCAtODcsNyArODcsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKaW5kZXggZDcyZjJjNy4uMjY4N2EyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwpAQCAtNjQsNyArNjQsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggYjU2NDVjNC4uMWQ1MGQyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwpAQCAtNzEwLDcgKzcxMCw4IEBACiAJCWRlc2MtPnBlbmRpbmcgPSAwOwogCQlkZXNjLT5kaXNhYmxlX2RlcHRoID0gMTsKIAotCQlpZiAobmV3LT5mbGFncyAmIFNBX1RSSUdHRVJfTUFTSykgeworCQlpZiAobmV3LT5mbGFncyAmIFNBX1RSSUdHRVJfTUFTSyAmJgorCQkgICAgZGVzYy0+Y2hpcC0+c2V0X3R5cGUpIHsKIAkJCXVuc2lnbmVkIGludCB0eXBlID0gbmV3LT5mbGFncyAmIFNBX1RSSUdHRVJfTUFTSzsKIAkJCWRlc2MtPmNoaXAtPnNldF90eXBlKGlycSwgdHlwZSk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3MjE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9LY29uZmlnCkBAIC0wLDAgKzEsNTQgQEAKK2lmIEFSQ0hfQVQ5MVJNOTIwMAorCittZW51ICJBVDkxUk05MjAwIEltcGxlbWVudGF0aW9ucyIKKworY29tbWVudCAiQVQ5MVJNOTIwMCBCb2FyZCBUeXBlIgorCitjb25maWcgQVJDSF9BVDkxUk05MjAwREsKKwlib29sICJBdG1lbCBBVDkxUk05MjAwLURLIERldmVsb3BtZW50IGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFSTTkyMDAtREsgRGV2ZWxvcG1lbnQgYm9hcmQKKworY29uZmlnIE1BQ0hfQVQ5MVJNOTIwMEVLCisJYm9vbCAiQXRtZWwgQVQ5MVJNOTIwMC1FSyBFdmFsdWF0aW9uIEtpdCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxUk05MjAwLUVLIEV2YWx1YXRpb24gS2l0CisKK2NvbmZpZyBNQUNIX0NTQjMzNworCWJvb2wgIkNvZ2VudCBDU0IzMzcgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvZ2VudCdzIENTQjMzNyBib2FyZAorCitjb25maWcgTUFDSF9DU0I2MzcKKwlib29sICJDb2dlbnQgQ1NCNjM3IGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBDb2dlbnQncyBDU0I2MzcgYm9hcmQKKworY29uZmlnIE1BQ0hfQ0FSTUVWQQorCWJvb2wgIkNvbml0ZWMncyBBUk0mRVZBIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBDb25pdGVjJ3MgQVQ5MVJNOTIwMC1NQ1UtTW9kdWxlCisKK2NvbmZpZyBNQUNIX0tCOTIwMAorCWJvb2wgIkt3aWtCeXRlJ3MgS0I5MjB4IgorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBLd2lrQnl0ZSdzIEtCOTIweCBib2FyZAorCisKK2NvbW1lbnQgIkFUOTFSTTkyMDAgRmVhdHVyZSBTZWxlY3Rpb25zIgorCitjb25maWcgQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTCisJYm9vbCAiUHJvZ3JhbW1hYmxlIENsb2NrcyIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgbmVlZCB0byBwcm9ncmFtIG9uZSBvciBtb3JlIG9mIHRoZSBQQ0swLi5QQ0szCisJICBwcm9ncmFtbWFibGUgY2xvY2sgb3V0cHV0cy4KKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjgwNWNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKK29iai15CQk6PSBjbG9jay5vIGlycS5vIHRpbWUubyBncGlvLm8gY29tbW9uLm8gZGV2aWNlcy5vCitvYmotbQkJOj0KK29iai1uCQk6PQorb2JqLQkJOj0KKworIyBCb2FyZC1zcGVjaWZpYyBzdXBwb3J0Cisjb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLKQkrPSBib2FyZC1kay5vCisjb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLKQkrPSBib2FyZC1lay5vCisjb2JqLSQoQ09ORklHX01BQ0hfQ1NCMzM3KQkrPSBib2FyZC1jc2IzMzcubworI29iai0kKENPTkZJR19NQUNIX0NTQjYzNykJKz0gYm9hcmQtY3NiNjM3Lm8KKyNvYmotJChDT05GSUdfTUFDSF9DQVJNRVZBKQkrPSBib2FyZC1jYXJtZXZhLm8KKyNvYmotJChDT05GSUdfTUFDSF9LQjkyMDApCSs9IGJvYXJkLWtiOTIwMi5vCisKKyMgTEVEcyBzdXBwb3J0CisjbGVkLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLKQkrPSBsZWRzLm8KKyNsZWQtJChDT05GSUdfTUFDSF9BVDkxUk05MjAwRUspCSs9IGxlZHMubworI2xlZC0kKENPTkZJR19NQUNIX0NTQjMzNykJKz0gbGVkcy5vCisjbGVkLSQoQ09ORklHX01BQ0hfQ1NCNjM3KQkrPSBsZWRzLm8KKyNsZWQtJChDT05GSUdfTUFDSF9LQjkyMDApCSs9IGxlZHMubworb2JqLSQoQ09ORklHX0xFRFMpICs9ICQobGVkLXkpCisKKyMgVkdBIHN1cHBvcnQKKyNvYmotJChDT05GSUdfRkJfUzFEMTNYWFgpCSs9IGljczE1MjMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY3ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw5IEBACisjIE5vdGU6IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGFsd2F5cyBiZSB0cnVlOgorIyAgIFpSRUxBRERSID09IHZpcnRfdG9fcGh5cyhURVhUQUREUikKKyMgICBQQVJBTVNfUEhZUyBtdXN0IGJlIHdpdGhpbiA0TUIgb2YgWlJFTEFERFIKKyMgICBJTklUUkRfUEhZUyBtdXN0IGJlIGluIFJBTQorCisgICB6cmVsYWRkci15CTo9IDB4MjAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgyMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDIwNDEwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4MTk1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jbG9jay5jCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4JCS8qIGZvciBtYXN0ZXIgY2xvY2sgZ2xvYmFsICovCisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKyN1bmRlZglERUJVRworCisvKgorICogVGhlcmUncyBhIGxvdCBtb3JlIHdoaWNoIGNhbiBiZSBkb25lIHdpdGggY2xvY2tzLCBpbmNsdWRpbmcgY3B1ZnJlcQorICogaW50ZWdyYXRpb24sIHNsb3cgY2xvY2sgbW9kZSBzdXBwb3J0IChmb3Igc3lzdGVtIHN1c3BlbmQpLCBsZXR0aW5nCisgKiBQTExCIGJlIHVzZWQgYXQgb3RoZXIgcmF0ZXMgKG9uIGJvYXJkcyB0aGF0IGRvbid0IG5lZWQgVVNCKSwgZXRjLgorICovCisKK3N0cnVjdCBjbGsgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJdW5zaWduZWQgbG9uZwlyYXRlX2h6OworCXN0cnVjdCBjbGsJKnBhcmVudDsKKwl1MzIJCXBtY19tYXNrOworCXZvaWQJCSgqbW9kZSkoc3RydWN0IGNsayAqLCBpbnQpOworCXVuc2lnbmVkCWlkOjI7CQkvKiBQQ0swLi4zLCBvciAzMmsvbWFpbi9hL2IgKi8KKwl1bnNpZ25lZAlwcmltYXJ5OjE7CisJdW5zaWduZWQJcGxsOjE7CisJdW5zaWduZWQJcHJvZ3JhbW1hYmxlOjE7CisJdTE2CQl1c2VyczsKK307CisKK3N0YXRpYyBzcGlubG9ja190CWNsa19sb2NrOworc3RhdGljIHUzMgkJYXQ5MV9wbGxiX3VzYl9pbml0OworCisvKgorICogRm91ciBwcmltYXJ5IGNsb2NrIHNvdXJjZXM6ICB0d28gY3J5c3RhbCBvc2NpbGxhdG9ycyAoMzJLLCBtYWluKSwgYW5kCisgKiB0d28gUExMcy4gIFBMTEEgdXN1YWxseSBydW5zIHRoZSBtYXN0ZXIgY2xvY2s7IGFuZCBQTExCIG11c3QgcnVuIGF0CisgKiA0OCBNSHogKHVubGVzcyBubyBVU0IgZnVuY3Rpb24gY2xvY2tzIGFyZSBuZWVkZWQpLiAgVGhlIG1haW4gY2xvY2sgYW5kCisgKiBib3RoIFBMTHMgYXJlIHR1cm5lZCBvZmYgdG8gcnVuIGluICJzbG93IGNsb2NrIG1vZGUiIChzeXN0ZW0gc3VzcGVuZCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsazMyayA9IHsKKwkubmFtZQkJPSAiY2xrMzJrIiwKKwkucmF0ZV9oegk9IEFUOTFfU0xPV19DTE9DSywKKwkudXNlcnMJCT0gMSwJCS8qIGFsd2F5cyBvbiAqLworCS5pZAkJPSAwLAorCS5wcmltYXJ5CT0gMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBtYWluX2NsayA9IHsKKwkubmFtZQkJPSAibWFpbiIsCisJLnBtY19tYXNrCT0gMSA8PCAwLAkvKiBpbiBQTUNfU1IgKi8KKwkudXNlcnMJCT0gMSwKKwkuaWQJCT0gMSwKKwkucHJpbWFyeQk9IDEsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGxsYSA9IHsKKwkubmFtZQkJPSAicGxsYSIsCisJLnBhcmVudAkJPSAmbWFpbl9jbGssCisJLnBtY19tYXNrCT0gMSA8PCAxLAkvKiBpbiBQTUNfU1IgKi8KKwkuaWQJCT0gMiwKKwkucHJpbWFyeQk9IDEsCisJLnBsbAkJPSAxLAorfTsKKworc3RhdGljIHZvaWQgcGxsYl9tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQoreworCXUzMgl2YWx1ZTsKKworCWlmIChpc19vbikgeworCQlpc19vbiA9IEFUOTFfUE1DX0xPQ0tCOworCQl2YWx1ZSA9IGF0OTFfcGxsYl91c2JfaW5pdDsKKwl9IGVsc2UKKwkJdmFsdWUgPSAwOworCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9DS0dSX1BMTEJSLCB2YWx1ZSk7CisKKwlkbyB7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKChhdDkxX3N5c19yZWFkKEFUOTFfUE1DX1NSKSAmIEFUOTFfUE1DX0xPQ0tCKSAhPSBpc19vbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbGIgPSB7CisJLm5hbWUJCT0gInBsbGIiLAorCS5wYXJlbnQJCT0gJm1haW5fY2xrLAorCS5wbWNfbWFzawk9IDEgPDwgMiwJLyogaW4gUE1DX1NSICovCisJLm1vZGUJCT0gcGxsYl9tb2RlLAorCS5pZAkJPSAzLAorCS5wcmltYXJ5CT0gMSwKKwkucGxsCQk9IDEsCit9OworCitzdGF0aWMgdm9pZCBwbWNfc3lzX21vZGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaXNfb24pCit7CisJaWYgKGlzX29uKQorCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0VSLCBjbGstPnBtY19tYXNrKTsKKwllbHNlCisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRFIsIGNsay0+cG1jX21hc2spOworfQorCisvKiBVU0IgZnVuY3Rpb24gY2xvY2tzIChQTExCIG11c3QgYmUgNDggTUh6KSAqLworc3RhdGljIHN0cnVjdCBjbGsgdWRwY2sgPSB7CisJLm5hbWUJCT0gInVkcGNrIiwKKwkucGFyZW50CQk9ICZwbGxiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1VEUCwKKwkubW9kZQkJPSBwbWNfc3lzX21vZGUsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdWhwY2sgPSB7CisJLm5hbWUJCT0gInVocGNrIiwKKwkucGFyZW50CQk9ICZwbGxiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1VIUCwKKwkubW9kZQkJPSBwbWNfc3lzX21vZGUsCit9OworCisjaWZkZWYgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUworLyoKKyAqIFRoZSBmb3VyIHByb2dyYW1tYWJsZSBjbG9ja3MgY2FuIGJlIHBhcmVudGVkIGJ5IGFueSBwcmltYXJ5IGNsb2NrLgorICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7CisJLm5hbWUJCT0gInBjazAiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCisJLm1vZGUJCT0gcG1jX3N5c19tb2RlLAorCS5wcm9ncmFtbWFibGUJPSAxLAorCS5pZAkJPSAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7CisJLm5hbWUJCT0gInBjazEiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCisJLm1vZGUJCT0gcG1jX3N5c19tb2RlLAorCS5wcm9ncmFtbWFibGUJPSAxLAorCS5pZAkJPSAxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazIgPSB7CisJLm5hbWUJCT0gInBjazIiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzIsCisJLm1vZGUJCT0gcG1jX3N5c19tb2RlLAorCS5wcm9ncmFtbWFibGUJPSAxLAorCS5pZAkJPSAyLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazMgPSB7CisJLm5hbWUJCT0gInBjazMiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzMsCisJLm1vZGUJCT0gcG1jX3N5c19tb2RlLAorCS5wcm9ncmFtbWFibGUJPSAxLAorCS5pZAkJPSAzLAorfTsKKyNlbmRpZgkvKiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTICovCisKKworLyoKKyAqIFRoZSBtYXN0ZXIgY2xvY2sgaXMgZGl2aWRlZCBmcm9tIHRoZSBDUFUgY2xvY2sgKGJ5IDEtNCkuICBJdCdzIHVzZWQgZm9yCisgKiBtZW1vcnksIGludGVyZmFjZXMgdG8gb24tY2hpcCBwZXJpcGhlcmFscywgdGhlIEFJQywgYW5kIHNvbWV0aW1lcyBtb3JlCisgKiAoZS5nIGJhdWQgcmF0ZSBnZW5lcmF0aW9uKS4gIEl0J3Mgc291cmNlZCBmcm9tIG9uZSBvZiB0aGUgcHJpbWFyeSBjbG9ja3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jayA9IHsKKwkubmFtZQkJPSAibWNrIiwKKwkucG1jX21hc2sJPSAxIDw8IDMsCS8qIGluIFBNQ19TUiAqLworCS51c2VycwkJPSAxLAkJLyogKG11c3QgYmUpIGFsd2F5cyBvbiAqLworfTsKKworc3RhdGljIHZvaWQgcG1jX3BlcmlwaF9tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQoreworCWlmIChpc19vbikKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENFUiwgY2xrLT5wbWNfbWFzayk7CisJZWxzZQorCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0RSLCBjbGstPnBtY19tYXNrKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKKwkubmFtZQkJPSAidWRjX2NsayIsCisJLnBhcmVudAkJPSAmbWNrLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VRFAsCisJLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0geworCS5uYW1lCQk9ICJvaGNpX2NsayIsCisJLnBhcmVudAkJPSAmbWNrLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VSFAsCisJLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNvbnN0IGNsb2NrX2xpc3RbXSA9IHsKKwkvKiBmb3VyIHByaW1hcnkgY2xvY2tzIC0tIE1VU1QgQkUgRklSU1QhICovCisJJmNsazMyaywKKwkmbWFpbl9jbGssCisJJnBsbGEsCisJJnBsbGIsCisKKwkvKiBQTExCIGNoaWxkcmVuIChVU0IpICovCisJJnVkcGNrLAorCSZ1aHBjaywKKworI2lmZGVmIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MKKwkvKiBwcm9ncmFtbWFibGUgY2xvY2tzICovCisJJnBjazAsCisJJnBjazEsCisJJnBjazIsCisJJnBjazMsCisjZW5kaWYJLyogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyAqLworCisJLyogTUNLIGFuZCBwZXJpcGhlcmFscyAqLworCSZtY2ssCisJLy8gdXNhcnQwLi51c2FydDMKKwkvLyBtbWMKKwkmdWRjX2NsaywKKwkvLyBpMmMKKwkvLyBzcGkKKwkvLyBzc2MwLi5zc2MyCisJLy8gdGMwLi50YzUKKwkmb2hjaV9jbGssCisJLy8gZXRoZXIKK307CisKKworLyogY2xvY2tzIGFyZSBhbGwgc3RhdGljIGZvciBub3c7IG5vIHJlZmNvdW50aW5nIG5lY2Vzc2FyeSAqLworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xvY2tfbGlzdCk7IGkrKykgeworCQlpZiAoc3RyY21wKGlkLCBjbG9ja19saXN0W2ldLT5uYW1lKSA9PSAwKQorCQkJcmV0dXJuIGNsb2NrX2xpc3RbaV07CisJfQorCisJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT5wYXJlbnQpCisJCV9fY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisJaWYgKGNsay0+dXNlcnMrKyA9PSAwICYmIGNsay0+bW9kZSkKKwkJY2xrLT5tb2RlKGNsaywgMSk7Cit9CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisJX19jbGtfZW5hYmxlKGNsayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3N0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCUJVR19PTihjbGstPnVzZXJzID09IDApOworCWlmICgtLWNsay0+dXNlcnMgPT0gMCAmJiBjbGstPm1vZGUpCisJCWNsay0+bW9kZShjbGssIDApOworCWlmIChjbGstPnBhcmVudCkKKwkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7Cit9CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlfX2Nsa19kaXNhYmxlKGNsayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXJhdGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlmb3IgKDs7KSB7CisJCXJhdGUgPSBjbGstPnJhdGVfaHo7CisJCWlmIChyYXRlIHx8ICFjbGstPnBhcmVudCkKKwkJCWJyZWFrOworCQljbGsgPSBjbGstPnBhcmVudDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUworCisvKgorICogRm9yIG5vdywgb25seSB0aGUgcHJvZ3JhbW1hYmxlIGNsb2NrcyBzdXBwb3J0IHJlcGFyZW50aW5nIChNQ0sgY291bGQKKyAqIGRvIHRoaXMgdG9vLCB3aXRoIGNhcmUpIG9yIHJhdGUgY2hhbmdpbmcgKHRoZSBQTExzIGNvdWxkIGRvIHRoaXMgdG9vLAorICogZGl0dG8gTUNLIGJ1dCB0aGF0J3MgbW9yZSBmb3IgY3B1ZnJlcSkuICBEcml2ZXJzIG1heSByZXBhcmVudCB0byBnZXQKKyAqIGEgYmV0dGVyIHJhdGUgbWF0Y2g7IHdlIGRvbid0LgorICovCisKK2xvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1bnNpZ25lZAlwcmVzY2FsZTsKKwl1bnNpZ25lZCBsb25nCWFjdHVhbDsKKworCWlmICghY2xrLT5wcm9ncmFtbWFibGUpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCisJYWN0dWFsID0gY2xrLT5wYXJlbnQtPnJhdGVfaHo7CisJZm9yIChwcmVzY2FsZSA9IDA7IHByZXNjYWxlIDwgNzsgcHJlc2NhbGUrKykgeworCQlpZiAoYWN0dWFsICYmIGFjdHVhbCA8PSByYXRlKQorCQkJYnJlYWs7CisJCWFjdHVhbCA+Pj0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCXJldHVybiAocHJlc2NhbGUgPCA3KSA/IGFjdHVhbCA6IC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXVuc2lnbmVkCXByZXNjYWxlOworCXVuc2lnbmVkIGxvbmcJYWN0dWFsOworCisJaWYgKCFjbGstPnByb2dyYW1tYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNsay0+dXNlcnMpCisJCXJldHVybiAtRUJVU1k7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwlhY3R1YWwgPSBjbGstPnBhcmVudC0+cmF0ZV9oejsKKwlmb3IgKHByZXNjYWxlID0gMDsgcHJlc2NhbGUgPCA3OyBwcmVzY2FsZSsrKSB7CisJCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKKwkJCXUzMglwY2tyOworCisJCQlwY2tyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19QQ0tSKGNsay0+aWQpKTsKKwkJCXBja3IgJj0gMHgwMzsKKwkJCXBja3IgfD0gcHJlc2NhbGUgPDwgMjsKKwkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCksIHBja3IpOworCQkJY2xrLT5yYXRlX2h6ID0gYWN0dWFsOworCQkJYnJlYWs7CisJCX0KKwkJYWN0dWFsID4+PSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CisJcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnBhcmVudDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOworCitpbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWlmIChjbGstPnVzZXJzKQorCQlyZXR1cm4gLUVCVVNZOworCWlmICghcGFyZW50LT5wcmltYXJ5IHx8ICFjbGstPnByb2dyYW1tYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwljbGstPnJhdGVfaHogPSBwYXJlbnQtPnJhdGVfaHo7CisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENLUihjbGstPmlkKSwgcGFyZW50LT5pZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CisKKyNlbmRpZgkvKiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCitzdGF0aWMgaW50IGF0OTFfY2xrX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJdTMyCQlzY3NyLCBwY3NyLCBzcjsKKwl1bnNpZ25lZAlpOworCisJc2VxX3ByaW50ZihzLCAiU0NTUiA9ICU4eFxuIiwgc2NzciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfU0NTUikpOworCXNlcV9wcmludGYocywgIlBDU1IgPSAlOHhcbiIsIHBjc3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX1BDU1IpKTsKKworCXNlcV9wcmludGYocywgIk1PUiAgPSAlOHhcbiIsIGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX01PUikpOworCXNlcV9wcmludGYocywgIk1DRlIgPSAlOHhcbiIsIGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX01DRlIpKTsKKwlzZXFfcHJpbnRmKHMsICJQTExBID0gJTh4XG4iLCBhdDkxX3N5c19yZWFkKEFUOTFfQ0tHUl9QTExBUikpOworCXNlcV9wcmludGYocywgIlBMTEIgPSAlOHhcbiIsIGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX1BMTEJSKSk7CisKKwlzZXFfcHJpbnRmKHMsICJNQ0tSID0gJTh4XG4iLCBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX01DS1IpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlzZXFfcHJpbnRmKHMsICJQQ0slZCA9ICU4eFxuIiwgaSwgYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19QQ0tSKGkpKSk7CisJc2VxX3ByaW50ZihzLCAiU1IgICA9ICU4eFxuIiwgc3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX1NSKSk7CisKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xvY2tfbGlzdCk7IGkrKykgeworCQljaGFyCQkqc3RhdGU7CisJCXN0cnVjdCBjbGsJKmNsayA9IGNsb2NrX2xpc3RbaV07CisKKwkJaWYgKGNsay0+bW9kZSA9PSBwbWNfc3lzX21vZGUpCisJCQlzdGF0ZSA9IChzY3NyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7CisJCWVsc2UgaWYgKGNsay0+bW9kZSA9PSBwbWNfcGVyaXBoX21vZGUpCisJCQlzdGF0ZSA9IChwY3NyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7CisJCWVsc2UgaWYgKGNsay0+cG1jX21hc2spCisJCQlzdGF0ZSA9IChzciAmIGNsay0+cG1jX21hc2spID8gIm9uIiA6ICJvZmYiOworCQllbHNlIGlmIChjbGsgPT0gJmNsazMyayB8fCBjbGsgPT0gJm1haW5fY2xrKQorCQkJc3RhdGUgPSAib24iOworCQllbHNlCisJCQlzdGF0ZSA9ICIiOworCisJCXNlcV9wcmludGYocywgIiUtMTBzIHVzZXJzPSVkICUtM3MgJTlsZCBIeiAlc1xuIiwKKwkJCWNsay0+bmFtZSwgY2xrLT51c2Vycywgc3RhdGUsIGNsa19nZXRfcmF0ZShjbGspLAorCQkJY2xrLT5wYXJlbnQgPyBjbGstPnBhcmVudC0+bmFtZSA6ICIiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9jbGtfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYXQ5MV9jbGtfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0OTFfY2xrX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gYXQ5MV9jbGtfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXQ5MV9jbGtfZGVidWdmc19pbml0KHZvaWQpCit7CisJLyogL3N5cy9rZXJuZWwvZGVidWcvYXQ5MV9jbGsgKi8KKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiYXQ5MV9jbGsiLCBTX0lGUkVHIHwgU19JUlVHTywgTlVMTCwgTlVMTCwgJmF0OTFfY2xrX29wZXJhdGlvbnMpOworCisJcmV0dXJuIDA7Cit9Citwb3N0Y29yZV9pbml0Y2FsbChhdDkxX2Nsa19kZWJ1Z2ZzX2luaXQpOworCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdTMyIF9faW5pdCBhdDkxX3BsbF9yYXRlKHN0cnVjdCBjbGsgKnBsbCwgdTMyIGZyZXEsIHUzMiByZWcpCit7CisJdW5zaWduZWQgbXVsLCBkaXY7CisKKwlkaXYgPSByZWcgJiAweGZmOworCW11bCA9IChyZWcgPj4gMTYpICYgMHg3ZmY7CisJaWYgKGRpdiAmJiBtdWwpIHsKKwkJZnJlcSAvPSBkaXY7CisJCWZyZXEgKj0gbXVsICsgMTsKKwl9IGVsc2UKKwkJZnJlcSA9IDA7CisJaWYgKHBsbCA9PSAmcGxsYiAmJiAocmVnICYgKDEgPDwgMjgpKSkKKwkJZnJlcSAvPSAyOworCXJldHVybiBmcmVxOworfQorCitzdGF0aWMgdW5zaWduZWQgX19pbml0IGF0OTFfcGxsX2NhbGModW5zaWduZWQgbWFpbl9mcmVxLCB1bnNpZ25lZCBvdXRfZnJlcSkKK3sKKwl1bnNpZ25lZCBpLCBkaXYgPSAwLCBtdWwgPSAwLCBkaWZmID0gMSA8PCAzMDsKKwl1bnNpZ25lZCByZXQgPSAob3V0X2ZyZXEgPiAxNTUwMDAwMDApID8gMHhiZTAwIDogMHgzZTAwOworCisJLyogUExMIG91dHB1dCBtYXggMjQwIE1IeiAob3IgMTgwIE1IeiBwZXIgZXJyYXRhKSAqLworCWlmIChvdXRfZnJlcSA+IDI0MDAwMDAwMCkKKwkJZ290byBmYWlsOworCisJZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7CisJCWludCBkaWZmMTsKKwkJdW5zaWduZWQgaW5wdXQsIG11bDE7CisKKwkJLyoKKwkJICogUExMIGlucHV0IGJldHdlZW4gMU1IeiBhbmQgMzJNSHogcGVyIHNwZWMsIGJ1dCBsb3dlcgorCQkgKiBmcmVxdWVuY2VzIHNlZW0gbmVjZXNzYXJ5IGluIHNvbWUgY2FzZXMgc28gYWxsb3cgMTAwSy4KKwkJICovCisJCWlucHV0ID0gbWFpbl9mcmVxIC8gaTsKKwkJaWYgKGlucHV0IDwgMTAwMDAwKQorCQkJY29udGludWU7CisJCWlmIChpbnB1dCA+IDMyMDAwMDAwKQorCQkJY29udGludWU7CisKKwkJbXVsMSA9IG91dF9mcmVxIC8gaW5wdXQ7CisJCWlmIChtdWwxID4gMjA0OCkKKwkJCWNvbnRpbnVlOworCQlpZiAobXVsMSA8IDIpCisJCQlnb3RvIGZhaWw7CisKKwkJZGlmZjEgPSBvdXRfZnJlcSAtIGlucHV0ICogbXVsMTsKKwkJaWYgKGRpZmYxIDwgMCkKKwkJCWRpZmYxID0gLWRpZmYxOworCQlpZiAoZGlmZiA+IGRpZmYxKSB7CisJCQlkaWZmID0gZGlmZjE7CisJCQlkaXYgPSBpOworCQkJbXVsID0gbXVsMTsKKwkJCWlmIChkaWZmID09IDApCisJCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gMjU2ICYmIGRpZmYgPiAob3V0X2ZyZXEgPj4gNSkpCisJCWdvdG8gZmFpbDsKKwlyZXR1cm4gcmV0IHwgKChtdWwgLSAxKSA8PCAxNikgfCBkaXY7CitmYWlsOgorCXJldHVybiAwOworfQorCitpbnQgX19pbml0IGF0OTFfY2xvY2tfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCit7CisJdW5zaWduZWQgdG1wLCBmcmVxLCBtY2tyOworCisJc3Bpbl9sb2NrX2luaXQoJmNsa19sb2NrKTsKKworCS8qCisJICogV2hlbiB0aGUgYm9vdGxvYWRlciBpbml0aWFsaXplZCB0aGUgbWFpbiBvc2NpbGxhdG9yIGNvcnJlY3RseSwKKwkgKiB0aGVyZSdzIG5vIHByb2JsZW0gdXNpbmcgdGhlIGN5Y2xlIGNvdW50ZXIuICBCdXQgaWYgaXQgZGlkbid0LAorCSAqIG9yIHdoZW4gdXNpbmcgb3NjaWxsYXRvciBieXBhc3MgbW9kZSwgd2UgbXVzdCBiZSB0b2xkIHRoZSBzcGVlZAorCSAqIG9mIHRoZSBtYWluIGNsb2NrLgorCSAqLworCWlmICghbWFpbl9jbG9jaykgeworCQlkbyB7CisJCQl0bXAgPSBhdDkxX3N5c19yZWFkKEFUOTFfQ0tHUl9NQ0ZSKTsKKwkJfSB3aGlsZSAoISh0bXAgJiAweDEwMDAwKSk7CisJCW1haW5fY2xvY2sgPSAodG1wICYgMHhmZmZmKSAqIChBVDkxX1NMT1dfQ0xPQ0sgLyAxNik7CisJfQorCW1haW5fY2xrLnJhdGVfaHogPSBtYWluX2Nsb2NrOworCisJLyogcmVwb3J0IGlmIFBMTEEgaXMgbW9yZSB0aGFuIG1pbGRseSBvdmVyY2xvY2tlZCAqLworCXBsbGEucmF0ZV9oeiA9IGF0OTFfcGxsX3JhdGUoJnBsbGEsIG1haW5fY2xvY2ssIGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7CisJaWYgKHBsbGEucmF0ZV9oeiA+IDIwOTAwMDAwMCkKKwkJcHJfaW5mbygiQ2xvY2tzOiBQTExBIG92ZXJjbG9ja2VkLCAlbGQgTUh6XG4iLCBwbGxhLnJhdGVfaHogLyAxMDAwMDAwKTsKKworCS8qCisJICogVVNCIGNsb2NrIGluaXQ6ICBjaG9vc2UgNDggTUh6IFBMTEIgdmFsdWUsIHR1cm4gYWxsIGNsb2NrcyBvZmYsCisJICogZGlzYWJsZSA0OE1IeiBjbG9jayBkdXJpbmcgdXNiIHBlcmlwaGVyYWwgc3VzcGVuZC4KKwkgKgorCSAqIFJFVklTSVQ6ICBhc3N1bWVzIE1DSyBkb2Vzbid0IGRlcml2ZSBmcm9tIFBMTEIhCisJICovCisJYXQ5MV9wbGxiX3VzYl9pbml0ID0gYXQ5MV9wbGxfY2FsYyhtYWluX2Nsb2NrLCA0ODAwMDAwMCAqIDIpIHwgMHgxMDAwMDAwMDsKKwlwbGxiLnJhdGVfaHogPSBhdDkxX3BsbF9yYXRlKCZwbGxiLCBtYWluX2Nsb2NrLCBhdDkxX3BsbGJfdXNiX2luaXQpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRFIsICgxIDw8IEFUOTFfSURfVUhQKSB8ICgxIDw8IEFUOTFfSURfVURQKSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NEUiwgQVQ5MV9QTUNfVUhQIHwgQVQ5MV9QTUNfVURQKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX0NLR1JfUExMQlIsIDApOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRVIsIEFUOTFfUE1DX01DS1VEUCk7CisKKwkvKgorCSAqIE1DSyBhbmQgQ1BVIGRlcml2ZSBmcm9tIG9uZSBvZiB0aG9zZSBwcmltYXJ5IGNsb2Nrcy4KKwkgKiBGb3Igbm93LCBhc3N1bWUgdGhpcyBwYXJlbnRhZ2Ugd29uJ3QgY2hhbmdlLgorCSAqLworCW1ja3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX01DS1IpOworCW1jay5wYXJlbnQgPSBjbG9ja19saXN0W21ja3IgJiBBVDkxX1BNQ19DU1NdOworCW1jay5wYXJlbnQtPnVzZXJzKys7CisJZnJlcSA9IG1jay5wYXJlbnQtPnJhdGVfaHo7CisJZnJlcSAvPSAoMSA8PCAoKG1ja3IgPj4gMikgJiAzKSk7CQkvKiBwcmVzY2FsZSAqLworCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxICsgKChtY2tyID4+IDgpICYgMykpOwkvKiBtZGl2ICovCisKKwlwcmludGsoIkNsb2NrczogQ1BVICV1IE1IeiwgbWFzdGVyICV1IE1IeiwgbWFpbiAldS4lMDN1IE1IelxuIiwKKwkJZnJlcSAvIDEwMDAwMDAsICh1bnNpZ25lZCkgbWNrLnJhdGVfaHogLyAxMDAwMDAwLAorCQkodW5zaWduZWQpIG1haW5fY2xvY2sgLyAxMDAwMDAwLAorCQkoKHVuc2lnbmVkKSBtYWluX2Nsb2NrICUgMTAwMDAwMCkgLyAxMDAwKTsKKworCS8qIEZJWE1FIGdldCByaWQgb2YgbWFzdGVyX2Nsb2NrIGdsb2JhbCAqLworCWF0OTFfbWFzdGVyX2Nsb2NrID0gbWNrLnJhdGVfaHo7CisKKyNpZmRlZiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTCisJLyogZXN0YWJsaXNoIFBDSzAuLlBDSzMgcGFyZW50YWdlICovCisJZm9yICh0bXAgPSAwOyB0bXAgPCBBUlJBWV9TSVpFKGNsb2NrX2xpc3QpOyB0bXArKykgeworCQlzdHJ1Y3QgY2xrCSpjbGsgPSBjbG9ja19saXN0W3RtcF0sICpwYXJlbnQ7CisJCXUzMgkJcGNrcjsKKworCQlpZiAoIWNsay0+cHJvZ3JhbW1hYmxlKQorCQkJY29udGludWU7CisKKwkJcGNrciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfUENLUihjbGstPmlkKSk7CisJCXBhcmVudCA9IGNsb2NrX2xpc3RbcGNrciAmIDNdOworCQljbGstPnBhcmVudCA9IHBhcmVudDsKKwkJY2xrLT5yYXRlX2h6ID0gcGFyZW50LT5yYXRlX2h6IC8gKDEgPDwgKChwY2tyID4+IDIpICYgMykpOworCX0KKyNlbHNlCisJLyogZGlzYWJsZSB1bnVzZWQgY2xvY2tzICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NEUiwgQVQ5MV9QTUNfUENLMCB8IEFUOTFfUE1DX1BDSzEgfCBBVDkxX1BNQ19QQ0syIHwgQVQ5MV9QTUNfUENLMyk7CisjZW5kaWYJLyogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyAqLworCisJLyogRklYTUUgc2V2ZXJhbCB1bnVzZWQgY2xvY2tzIG1heSBzdGlsbCBiZSBhY3RpdmUuLi4gIHByb3ZpZGUKKwkgKiBhIENPTkZJRyBvcHRpb24gdG8gdHVybiBvZmYgYWxsIHVudXNlZCBjbG9ja3MgYXQgc29tZSBwb2ludAorCSAqIGJlZm9yZSBkcml2ZXIgaW5pdCBzdGFydHMuCisJICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQ4ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2NvbW1vbi5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2NvbW1vbi5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDkxcm05MjAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfU1lTLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NZUyksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NQSSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TUEkpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfU1NDMiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TU0MyKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NTQzEsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1NDMSksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9TU0MwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NTQzApLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVVMzLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1VTMyksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9VUzIsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfVVMyKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1VTMSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9VUzEpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVVMwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1VTMCksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9FTUFDLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX0VNQUMpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVFdJLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1RXSSksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9NQ0ksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfTUNJKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1VEUCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9VRFApLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVENCMSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9UQ0IxKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1RDQjAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfVENCMCksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFybTkyMDBfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGF0OTFybTkyMDBfaW9fZGVzYywgQVJSQVlfU0laRShhdDkxcm05MjAwX2lvX2Rlc2MpKTsKK30KKworCit1bnNpZ25lZCBsb25nIGF0OTFfbWFzdGVyX2Nsb2NrOworCitFWFBPUlRfU1lNQk9MKGF0OTFfbWFzdGVyX2Nsb2NrKTsKKworCitpbnQgYXQ5MV9zZXJpYWxfbWFwW0FUOTFfTlJfVUFSVF07CitpbnQgYXQ5MV9jb25zb2xlX3BvcnQ7CisKK0VYUE9SVF9TWU1CT0woYXQ5MV9zZXJpYWxfbWFwKTsKK0VYUE9SVF9TWU1CT0woYXQ5MV9jb25zb2xlX3BvcnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmM2U1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBUaGliYXV0IFZBUkVORSA8dmFyZW5ldEBwYXJpc2MtbGludXgub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3Bpby5oPgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVVNCIEhvc3QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCitzdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgdXNiaF9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF0OTFybTkyMDBfdXNiaF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9VSFBfQkFTRSwKKwkJLmVuZAk9IEFUOTFfVUhQX0JBU0UgKyBTWl8xTSAtMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfSURfVUhQLAorCQkuZW5kCT0gQVQ5MV9JRF9VSFAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VzYmhfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxcm05MjAwLW9oY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBhdDkxcm05MjAwX3VzYmhfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF0OTFybTkyMDBfdXNiaF9yZXNvdXJjZSksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwl1c2JoX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdXNiaF9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVVNCIERldmljZSAoR2FkZ2V0KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0FUOTEKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB1ZGNfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxX3VkY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9VRFAsCisJCS5lbmQJPSBBVDkxX0JBU0VfVURQICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF91ZGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX3VkYyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1ZGNfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGF0OTFfdWRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV91ZGNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlpZiAoZGF0YS0+dmJ1c19waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKKwl9CisJaWYgKGRhdGEtPnB1bGx1cF9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnB1bGx1cF9waW4sIDApOworCisJdWRjX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdWRjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgRXRoZXJuZXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUk1fQVQ5MV9FVEhFUikgfHwgZGVmaW5lZChDT05GSUdfQVJNX0FUOTFfRVRIRVJfTU9EVUxFKQorc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBldGhfZGF0YTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9ldGhfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX2V0aGVyIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IGF0OTFfZXRoX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlpZiAoZGF0YS0+cGh5X2lycV9waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5waHlfaXJxX3BpbiwgMCk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnBoeV9pcnFfcGluLCAxKTsKKwl9CisKKwkvKiBQaW5zIHVzZWQgZm9yIE1JSSBhbmQgUk1JSSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFTURJTyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDApOwkvKiBFTURDICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMCk7CS8qIEVSWEVSICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMywgMCk7CS8qIEVSWDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJLyogRVJYMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDApOwkvKiBFQ1JTX0VDUlNEViAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAwKTsJLyogRVRYMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOCwgMCk7CS8qIEVUWEVOICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCisKKwlpZiAoIWRhdGEtPmlzX3JtaWkpIHsKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxOSwgMCk7CS8qIEVSWENLICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTgsIDApOwkvKiBFQ09MICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBFUlhEViAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAwKTsJLyogRVJYMyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsJLyogRVJYMiAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAwKTsJLyogRVRYRVIgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMCk7CS8qIEVUWDMgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMCk7CS8qIEVUWDIgKi8KKwl9CisKKwlldGhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9ldGhfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBhdDkxX2V0aF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDb21wYWN0IEZsYXNoIC8gUENNQ0lBCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVQ5MV9DRikgfHwgZGVmaW5lZChDT05GSUdfQVQ5MV9DRl9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZl9kYXRhOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2NmX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9jZiIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjZl9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwkvKiBpbnB1dC9pcnEgKi8KKwlpZiAoZGF0YS0+aXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmlycV9waW4sIDEpOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5pcnFfcGluLCAxKTsKKwl9CisJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKKwlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKKworCS8qIG91dHB1dHMsIGluaXRpYWxseSBvZmYgKi8KKwlpZiAoZGF0YS0+dmNjX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmNjX3BpbiwgMCk7CisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cnN0X3BpbiwgMCk7CisKKwljZl9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX2NmX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIE1NQyAvIFNECisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX0FUOTFSTTkyMDApIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVDkxUk05MjAwX01PRFVMRSkKK3N0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgbW1jX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9tbWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBBVDkxX0JBU0VfTUNJLAorCQkuZW5kCT0gQVQ5MV9CQVNFX01DSSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfbW1jX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MXJtOTIwMF9tY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tY19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYXQ5MV9tbWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxX21tY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIGlucHV0L2lycSAqLworCWlmIChkYXRhLT5kZXRfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmRldF9waW4sIDEpOworCX0KKwlpZiAoZGF0YS0+d3BfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPndwX3BpbiwgMSk7CisKKwkvKiBDTEsgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsKKworCWlmIChkYXRhLT5pc19iKSB7CisJCS8qIENNRCAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTgsIDApOworCisJCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAwKTsKKwkJaWYgKGRhdGEtPndpcmU0KSB7CisJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAwKTsKKwkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDApOworCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBDTUQgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMCk7CisKKwkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsKKwkJaWYgKGRhdGEtPndpcmU0KSB7CisJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjMsIDApOworCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAwKTsKKwkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7CisJCX0KKwl9CisKKwltbWNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9tbWNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmQ1NDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dlbmVyaWMuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dlbmVyaWMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK3ZvaWQgYXQ5MV9ncGlvX2lycV9zZXR1cCh1bnNpZ25lZCBiYW5rcyk7CisKK3N0cnVjdCBzeXNfdGltZXI7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBhdDkxcm05MjAwX3RpbWVyOworCitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9tYXBfaW8odm9pZCk7CisKK2V4dGVybiBpbnQgX19pbml0IGF0OTFfY2xvY2tfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkMmVmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCitzdGF0aWMgY29uc3QgdTMyIHBpb19jb250cm9sbGVyX29mZnNldFs0XSA9IHsKKwlBVDkxX1BJT0EsCisJQVQ5MV9QSU9CLAorCUFUOTFfUElPQywKKwlBVDkxX1BJT0QsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGluX3RvX2NvbnRyb2xsZXIodW5zaWduZWQgcGluKQoreworCXZvaWQgX19pb21lbSAqc3lzX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopIEFUOTFfVkFfQkFTRV9TWVM7CisKKwlwaW4gLT0gUElOX0JBU0U7CisJcGluIC89IDMyOworCWlmIChsaWtlbHkocGluIDwgQkdBX0dQSU9fQkFOS1MpKQorCQlyZXR1cm4gc3lzX2Jhc2UgKyBwaW9fY29udHJvbGxlcl9vZmZzZXRbcGluXTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBpbl90b19tYXNrKHVuc2lnbmVkIHBpbikKK3sKKwlwaW4gLT0gUElOX0JBU0U7CisJcmV0dXJuIDEgPDwgKHBpbiAlIDMyKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogTm90IGFsbCBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYXJlIGV4cG9zZWQgdGhyb3VnaCB0aGVzZSBjYWxsczsgdGhleQorICogb25seSBlbmNhcHN1bGF0ZSB0aGUgbW9zdCBjb21tb24gZmVhdHVyZXMgYW5kIG1vZGVzLiAgKFNvIGlmIHlvdQorICogd2FudCB0byBjaGFuZ2Ugc2lnbmFscyBpbiBncm91cHMsIGRvIGl0IGRpcmVjdGx5LikKKyAqCisgKiBCb290bG9hZGVycyB3aWxsIHVzdWFsbHkgaGFuZGxlIHNvbWUgb2YgdGhlIHBpbiBtdWx0aXBsZXhpbmcgc2V0dXAuCisgKiBUaGUgaW50ZW50IGlzIGNlcnRhaW5seSB0aGF0IGJ5IHRoZSB0aW1lIExpbnV4IGlzIGZ1bGx5IGJvb3RlZCwgYWxsCisgKiBwaW5zIHNob3VsZCBoYXZlIGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQuICBUaGVzZSBzZXR1cCBjYWxscyBzaG91bGQKKyAqIG9ubHkgYmUgdXNlZCBieSBib2FyZCBzZXR1cCByb3V0aW5lcywgb3IgcG9zc2libHkgaW4gZHJpdmVyIHByb2JlKCkuCisgKgorICogRm9yIGJvb3Rsb2FkZXJzIGRvaW5nIGFsbCB0aGF0IHNldHVwLCB0aGVzZSBjYWxscyBjb3VsZCBiZSBpbmxpbmVkCisgKiBhcyBOT1BzIHNvIExpbnV4IHdvbid0IGR1cGxpY2F0ZSBhbnkgc2V0dXAgY29kZQorICovCisKKworLyoKKyAqIG11eCB0aGUgcGluIHRvIHRoZSAiQSIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgorICovCitpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9BX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19BU1IpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUERSKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXQ5MV9zZXRfQV9wZXJpcGgpOworCisKKy8qCisgKiBtdXggdGhlIHBpbiB0byB0aGUgIkIiIGludGVybmFsIHBlcmlwaGVyYWwgcm9sZS4KKyAqLworaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfQl9wZXJpcGgodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCkKK3sKKwl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7CisKKwlpZiAoIXBpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lEUik7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh1c2VfcHVsbHVwID8gUElPX1BVRVIgOiBQSU9fUFVEUikpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fQlNSKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BEUik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGF0OTFfc2V0X0JfcGVyaXBoKTsKKworCisvKgorICogbXV4IHRoZSBwaW4gdG8gdGhlIGdwaW8gY29udHJvbGxlciAoaW5zdGVhZCBvZiAiQSIgb3IgIkIiIHBlcmlwaGVyYWwpLCBhbmQKKyAqIGNvbmZpZ3VyZSBpdCBmb3IgYW4gaW5wdXQuCisgKi8KK2ludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9faW5wdXQodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCkKK3sKKwl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7CisKKwlpZiAoIXBpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lEUik7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh1c2VfcHVsbHVwID8gUElPX1BVRVIgOiBQSU9fUFVEUikpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fT0RSKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BFUik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGF0OTFfc2V0X2dwaW9faW5wdXQpOworCisKKy8qCisgKiBtdXggdGhlIHBpbiB0byB0aGUgZ3BpbyBjb250cm9sbGVyIChpbnN0ZWFkIG9mICJBIiBvciAiQiIgcGVyaXBoZXJhbCksCisgKiBhbmQgY29uZmlndXJlIGl0IGZvciBhbiBvdXRwdXQuCisgKi8KK2ludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BVRFIpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsdWUgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRVIpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19vdXRwdXQpOworCisKKy8qCisgKiBlbmFibGUvZGlzYWJsZSB0aGUgZ2xpdGNoIGZpbHRlcjsgbW9zdGx5IHVzZWQgd2l0aCBJUlEgaGFuZGxpbmcuCisgKi8KK2ludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKGlzX29uID8gUElPX0lGRVIgOiBQSU9fSUZEUikpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChhdDkxX3NldF9kZWdsaXRjaCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qCisgKiBhc3N1bWluZyB0aGUgcGluIGlzIG11eGVkIGFzIGEgZ3BpbyBvdXRwdXQsIHNldCBpdHMgdmFsdWUuCisgKi8KK2ludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbHVlID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChhdDkxX3NldF9ncGlvX3ZhbHVlKTsKKworCisvKgorICogcmVhZCB0aGUgcGluJ3MgdmFsdWUgKHdvcmtzIGV2ZW4gaWYgaXQncyBub3QgbXV4ZWQgYXMgYSBncGlvKS4KKyAqLworaW50IGF0OTFfZ2V0X2dwaW9fdmFsdWUodW5zaWduZWQgcGluKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKwl1MzIJCXBkc3I7CisKKwlpZiAoIXBpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGRzciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19QRFNSKTsKKwlyZXR1cm4gKHBkc3IgJiBtYXNrKSAhPSAwOworfQorRVhQT1JUX1NZTUJPTChhdDkxX2dldF9ncGlvX3ZhbHVlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyogU2V2ZXJhbCBBSUMgY29udHJvbGxlciBpcnFzIGFyZSBkaXNwYXRjaGVkIHRocm91Z2ggdGhpcyBHUElPIGhhbmRsZXIuCisgKiBUbyB1c2UgYW55IEFUOTFfUElOXyogYXMgYW4gZXh0ZXJuYWxseSB0cmlnZ2VyZWQgSVJRLCBmaXJzdCBjYWxsCisgKiBhdDkxX3NldF9ncGlvX2lucHV0KCkgdGhlbiBtYXliZSBlbmFibGUgaXRzIGdsaXRjaCBmaWx0ZXIuCisgKiBUaGVuIGp1c3QgcmVxdWVzdF9pcnEoKSB3aXRoIHRoZSBwaW4gSUQ7IGl0IHdvcmtzIGxpa2UgYW55IEFSTSBJUlEKKyAqIGhhbmRsZXIsIHRob3VnaCBpdCBhbHdheXMgdHJpZ2dlcnMgb24gcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2VzLgorICoKKyAqIEFsdGVybmF0aXZlbHksIGNlcnRhaW4gcGlucyBtYXkgYmUgdXNlZCBkaXJlY3RseSBhcyBJUlEwLi5JUlE2IGFmdGVyCisgKiBjb25maWd1cmluZyB0aGVtIHdpdGggYXQ5MV9zZXRfYV9wZXJpcGgoKSBvciBhdDkxX3NldF9iX3BlcmlwaCgpLgorICogSVJRMC4uSVJRNiBzaG91bGQgYmUgY29uZmlndXJhYmxlLCBlLmcuIGxldmVsIHZzIGVkZ2UgdHJpZ2dlcmluZy4KKyAqLworCitzdGF0aWMgdm9pZCBncGlvX2lycV9tYXNrKHVuc2lnbmVkIHBpbikKK3sKKwl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7CisKKwlpZiAocGlvKQorCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lEUik7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9faXJxX3VubWFzayh1bnNpZ25lZCBwaW4pCit7CisJdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCisJaWYgKHBpbykKKwkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRVIpOworfQorCitzdGF0aWMgaW50IGdwaW9faXJxX3R5cGUodW5zaWduZWQgcGluLCB1bnNpZ25lZCB0eXBlKQoreworCXJldHVybiAodHlwZSA9PSBJUlFUX0JPVEhFREdFKSA/IDAgOiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgZ3Bpb19pcnFjaGlwID0geworCS5tYXNrCQk9IGdwaW9faXJxX21hc2ssCisJLnVubWFzawkJPSBncGlvX2lycV91bm1hc2ssCisJLnNldF90eXBlCT0gZ3Bpb19pcnFfdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIGdwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQJcGluOworCXN0cnVjdCBpcnFkZXNjCSpncGlvOworCXZvaWQgX19pb21lbQkqcGlvOworCXUzMgkJaXNyOworCisJcGlvID0gKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIGRlc2MtPmNoaXBkYXRhOworCisJLyogdGVtcG9yYXJpbHkgbWFzayAobGV2ZWwgc2Vuc2l0aXZlKSBwYXJlbnQgSVJRICovCisJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJZm9yICg7OykgeworCQlpc3IgPSBfX3Jhd19yZWFkbChwaW8gKyBQSU9fSVNSKSAmIF9fcmF3X3JlYWRsKHBpbyArIFBJT19JTVIpOworCQlpZiAoIWlzcikKKwkJCWJyZWFrOworCisJCXBpbiA9ICh1bnNpZ25lZCkgZGVzYy0+ZGF0YTsKKwkJZ3BpbyA9ICZpcnFfZGVzY1twaW5dOworCisJCXdoaWxlIChpc3IpIHsKKwkJCWlmIChpc3IgJiAxKQorCQkJCWdwaW8tPmhhbmRsZShwaW4sIGdwaW8sIHJlZ3MpOworCQkJcGluKys7CisJCQlncGlvKys7CisJCQlpc3IgPj49IDE7CisJCX0KKwl9CisJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJLyogbm93IGl0IG1heSByZS10cmlnZ2VyICovCit9CisKKy8qIGNhbGwgdGhpcyBmcm9tIGJvYXJkLXNwZWNpZmljIGluaXRfaXJxICovCit2b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHVuc2lnbmVkIGJhbmtzKQoreworCXVuc2lnbmVkCXBpb2MsIHBpbiwgaWQ7CisKKwlpZiAoYmFua3MgPiA0KQorCQliYW5rcyA9IDQ7CisJZm9yIChwaW9jID0gMCwgcGluID0gUElOX0JBU0UsIGlkID0gQVQ5MV9JRF9QSU9BOworCQkJcGlvYyA8IGJhbmtzOworCQkJcGlvYysrLCBpZCsrKSB7CisJCXZvaWQgX19pb21lbQkqY29udHJvbGxlcjsKKwkJdW5zaWduZWQJaTsKKworCQljb250cm9sbGVyID0gKHZvaWQgX19pb21lbSAqKSBBVDkxX1ZBX0JBU0VfU1lTICsgcGlvX2NvbnRyb2xsZXJfb2Zmc2V0W3Bpb2NdOworCQlfX3Jhd193cml0ZWwofjAsIGNvbnRyb2xsZXIgKyBQSU9fSURSKTsKKworCQlzZXRfaXJxX2RhdGEoaWQsICh2b2lkICopIHBpbik7CisJCXNldF9pcnFfY2hpcGRhdGEoaWQsICh2b2lkIF9fZm9yY2UgKikgY29udHJvbGxlcik7CisKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyssIHBpbisrKSB7CisJCQlzZXRfaXJxX2NoaXAocGluLCAmZ3Bpb19pcnFjaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihwaW4sIGRvX3NpbXBsZV9JUlEpOworCQkJc2V0X2lycV9mbGFncyhwaW4sIElSUUZfVkFMSUQpOworCQl9CisKKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaWQsIGdwaW9faXJxX2hhbmRsZXIpOworCisJCS8qIGVuYWJsZSB0aGUgUElPIHBlcmlwaGVyYWwgY2xvY2sgKi8KKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENFUiwgMSA8PCBpZCk7CisJfQorCXByX2luZm8oIkFUOTE6ICVkIGdwaW8gaXJxcyBpbiAlZCBiYW5rc1xuIiwgcGluIC0gUElOX0JBU0UsIGJhbmtzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjYyYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBTQU4gUGVvcGxlCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFUTUVMCisgKiAgQ29weXJpZ2h0IChDKSBSaWNrIEJyb25zb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyoKKyAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBhdDkxcm05MjAwX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0geworCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCisJNywJLyogU3lzdGVtIFBlcmlwaGVyYWwgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEQgKi8KKwk2LAkvKiBVU0FSVCAwICovCisJNiwJLyogVVNBUlQgMSAqLworCTYsCS8qIFVTQVJUIDIgKi8KKwk2LAkvKiBVU0FSVCAzICovCisJMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAqLworCTQsCS8qIFVTQiBEZXZpY2UgUG9ydCAqLworCTAsCS8qIFR3by1XaXJlIEludGVyZmFjZSAqLworCTYsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAqLworCTUsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyICovCisJNSwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgKi8KKwk1LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgMCAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgMSAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgMiAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgMyAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgNCAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgNSAqLworCTMsCS8qIFVTQiBIb3N0IHBvcnQgKi8KKwkzLAkvKiBFdGhlcm5ldCBNQUMgKi8KKwkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwkwCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCit9OworCisKK3N0YXRpYyB2b2lkIGF0OTFybTkyMDBfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwkvKiBEaXNhYmxlIGludGVycnVwdCBvbiBBSUMgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19JRENSLCAxIDw8IGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFybTkyMDBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCS8qIEVuYWJsZSBpbnRlcnJ1cHQgb24gQUlDICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9BSUNfSUVDUiwgMSA8PCBpcnEpOworfQorCitzdGF0aWMgaW50IGF0OTFybTkyMDBfaXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0eXBlKQoreworCXVuc2lnbmVkIGludCBzbXIsIHNyY3R5cGU7CisKKwkvKiBjaGFuZ2UgdHJpZ2dlcmluZyBvbmx5IGZvciBGSVEgYW5kIGV4dGVybmFsIElSUTAuLklSUTYgKi8KKwlpZiAoKGlycSA8IEFUOTFfSURfSVJRMCkgJiYgKGlycSAhPSBBVDkxX0lEX0ZJUSkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJUlFUX0hJR0g6CisJCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX0hJR0g7CisJCWJyZWFrOworCWNhc2UgSVJRVF9SSVNJTkc6CisJCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX1JJU0lORzsKKwkJYnJlYWs7CisJY2FzZSBJUlFUX0xPVzoKKwkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfTE9XOworCQlicmVhazsKKwljYXNlIElSUVRfRkFMTElORzoKKwkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc21yID0gYXQ5MV9zeXNfcmVhZChBVDkxX0FJQ19TTVIoaXJxKSkgJiB+QVQ5MV9BSUNfU1JDVFlQRTsKKwlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19TTVIoaXJxKSwgc21yIHwgc3JjdHlwZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBhdDkxcm05MjAwX2lycV9jaGlwID0geworCS5hY2sJCT0gYXQ5MXJtOTIwMF9tYXNrX2lycSwKKwkubWFzawkJPSBhdDkxcm05MjAwX21hc2tfaXJxLAorCS51bm1hc2sJCT0gYXQ5MXJtOTIwMF91bm1hc2tfaXJxLAorCS5zZXRfdHlwZQk9IGF0OTFybTkyMDBfaXJxX3R5cGUsCit9OworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyLgorICovCit2b2lkIF9faW5pdCBhdDkxcm05MjAwX2luaXRfaXJxKHVuc2lnbmVkIGludCBwcmlvcml0eVtOUl9BSUNfSVJRU10pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBObyBwcmlvcml0eSBsaXN0IHNwZWNpZmllZCBmb3IgdGhpcyBib2FyZCAtPiB1c2UgZGVmYXVsdHMgKi8KKwlpZiAocHJpb3JpdHkgPT0gTlVMTCkKKwkJcHJpb3JpdHkgPSBhdDkxcm05MjAwX2RlZmF1bHRfaXJxX3ByaW9yaXR5OworCisJLyoKKwkgKiBUaGUgSVZSIGlzIHVzZWQgYnkgbWFjcm8gZ2V0X2lycW5yX2FuZF9iYXNlIHRvIHJlYWQgYW5kIHZlcmlmeS4KKwkgKiBUaGUgaXJxIG51bWJlciBpcyBOUl9BSUNfSVJRUyB3aGVuIGEgc3B1cmlvdXMgaW50ZXJydXB0IGhhcyBvY2N1cnJlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfQUlDX0lSUVM7IGkrKykgeworCQkvKiBQdXQgaXJxIG51bWJlciBpbiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyOiAqLworCQlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19TVlIoaSksIGkpOworCQkvKiBTdG9yZSB0aGUgU291cmNlIE1vZGUgUmVnaXN0ZXIgYXMgZGVmaW5lZCBpbiB0YWJsZSBhYm92ZSAqLworCQlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19TTVIoaSksIEFUOTFfQUlDX1NSQ1RZUEVfTE9XIHwgcHJpb3JpdHlbaV0pOworCisJCXNldF9pcnFfY2hpcChpLCAmYXQ5MXJtOTIwMF9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKworCQkvKiBQZXJmb3JtIDggRW5kIE9mIEludGVycnVwdCBDb21tYW5kIHRvIG1ha2Ugc3VyZSBBSUMgd2lsbCBub3QgTG9jayBvdXQgbklSUSAqLworCQlpZiAoaSA8IDgpCisJCQlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19FT0lDUiwgMCk7CisJfQorCisJLyoKKwkgKiBTcHVyaW91cyBJbnRlcnJ1cHQgSUQgaW4gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyIGlzIE5SX0FJQ19JUlFTCisJICogV2hlbiB0aGVyZSBpcyBubyBjdXJyZW50IGludGVycnVwdCwgdGhlIElSUSBWZWN0b3IgUmVnaXN0ZXIgcmVhZHMgdGhlIHZhbHVlIHN0b3JlZCBpbiBBSUNfU1BVCisJICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9BSUNfU1BVLCBOUl9BSUNfSVJRUyk7CisKKwkvKiBObyBkZWJ1Z2dpbmcgaW4gQUlDOiBEZWJ1ZyAoUHJvdGVjdCkgQ29udHJvbCBSZWdpc3RlciAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX0RDUiwgMCk7CisKKwkvKiBEaXNhYmxlIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19JRENSLCAweEZGRkZGRkZGKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19JQ0NSLCAweEZGRkZGRkZGKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmRkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvdGltZS5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQorICogIENvcHlyaWdodCAoQykgMjAwMyBBVE1FTAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworLyoKKyAqIFRoZSBTVF9DUlRSIGlzIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgdG8gdGhlIG1hc3RlciBjbG9jay4gIEl0IGlzIHRoZXJlZm9yZQorICogIG5lY2Vzc2FyeSB0byByZWFkIGl0IHR3aWNlICh3aXRoIHRoZSBzYW1lIHZhbHVlKSB0byBlbnN1cmUgYWNjdXJhY3kuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX0NSVFIodm9pZCkgeworCXVuc2lnbmVkIGxvbmcgeDEsIHgyOworCisJZG8geworCQl4MSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9TVF9DUlRSKTsKKwkJeDIgPSBhdDkxX3N5c19yZWFkKEFUOTFfU1RfQ1JUUik7CisJfSB3aGlsZSAoeDEgIT0geDIpOworCisJcmV0dXJuIHgxOworfQorCisvKgorICogUmV0dXJucyBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHNpbmNlIGxhc3QgdGltZXIgaW50ZXJydXB0LiAgTm90ZSB0aGF0IGludGVycnVwdHMKKyAqIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGRvX2dldHRpbWVvZmRheSgpCisgKiAgJ0xBVENIJyBpcyBod2Nsb2NrIHRpY2tzIChzZWUgQ0xPQ0tfVElDS19SQVRFIGluIHRpbWV4LmgpIHBlciBqaWZmeS4KKyAqICAndGljaycgaXMgdXNlY3MgcGVyIGppZmZ5IChsaW51eC90aW1leC5oKS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYXQ5MXJtOTIwMF9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBlbGFwc2VkOworCisJZWxhcHNlZCA9IChyZWFkX0NSVFIoKSAtIGF0OTFfc3lzX3JlYWQoQVQ5MV9TVF9SVEFSKSkgJiBBVDkxX1NUX0FMTVY7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGVsYXBzZWQgKiAodGlja19uc2VjIC8gMTAwMCkpIC8gTEFUQ0g7Cit9CisKKy8qCisgKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MXJtOTIwMF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHJ0YXI7CisKKwlpZiAoYXQ5MV9zeXNfcmVhZChBVDkxX1NUX1NSKSAmIEFUOTFfU1RfUElUUykgewkvKiBUaGlzIGlzIGEgc2hhcmVkIGludGVycnVwdCAqLworCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCQlkbyB7CisJCQl0aW1lcl90aWNrKHJlZ3MpOworCQkJcnRhciA9IChhdDkxX3N5c19yZWFkKEFUOTFfU1RfUlRBUikgKyBMQVRDSCkgJiBBVDkxX1NUX0FMTVY7CisJCQlhdDkxX3N5c193cml0ZShBVDkxX1NUX1JUQVIsIHJ0YXIpOworCQl9IHdoaWxlICgoKHJlYWRfQ1JUUigpIC0gYXQ5MV9zeXNfcmVhZChBVDkxX1NUX1JUQVIpKSAmIEFUOTFfU1RfQUxNVikgPj0gTEFUQ0gpOworCisJCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwllbHNlCisJCXJldHVybiBJUlFfTk9ORTsJCS8qIG5vdCBoYW5kbGVkICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGF0OTFybTkyMDBfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJhdDkxX3RpY2siLAorCS5mbGFncwkJPSBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwKKwkuaGFuZGxlcgk9IGF0OTFybTkyMDBfdGltZXJfaW50ZXJydXB0Cit9OworCisvKgorICogU2V0IHVwIHRpbWVyIGludGVycnVwdC4KKyAqLwordm9pZCBfX2luaXQgYXQ5MXJtOTIwMF90aW1lcl9pbml0KHZvaWQpCit7CisJLyogRGlzYWJsZSBhbGwgdGltZXIgaW50ZXJydXB0cyAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfSURSLCBBVDkxX1NUX1BJVFMgfCBBVDkxX1NUX1dET1ZGIHwgQVQ5MV9TVF9SVFRJTkMgfCBBVDkxX1NUX0FMTVMpOworCSh2b2lkKSBhdDkxX3N5c19yZWFkKEFUOTFfU1RfU1IpOwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisKKwkvKgorCSAqIE1ha2UgSVJRcyBoYXBwZW4gZm9yIHRoZSBzeXN0ZW0gdGltZXIuCisJICovCisJc2V0dXBfaXJxKEFUOTFfSURfU1lTLCAmYXQ5MXJtOTIwMF90aW1lcl9pcnEpOworCisJLyogU2V0IGluaXRpYWwgYWxhcm0gdG8gMCAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfUlRBUiwgMCk7CisKKwkvKiBSZWFsIHRpbWUgY291bnRlciBpbmNyZW1lbnRlZCBldmVyeSAzMC41MTc1OCBtaWNyb3NlY29uZHMgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NUX1JUTVIsIDEpOworCisJLyogU2V0IFBlcmlvZCBJbnRlcnZhbCB0aW1lciAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfUElNUiwgTEFUQ0gpOworCisJLyogQ2hhbmdlIHRoZSBrZXJuZWwncyAndGljaycgdmFsdWUgdG8gMTAwMDkgdXNlYy4gKHRoZSBkZWZhdWx0IGlzIDEwMDAwKSAqLworCXRpY2tfdXNlYyA9IChMQVRDSCAqIDEwMDAwMDApIC8gQ0xPQ0tfVElDS19SQVRFOworCisJLyogRW5hYmxlIFBlcmlvZCBJbnRlcnZhbCBUaW1lciBpbnRlcnJ1cHQgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NUX0lFUiwgQVQ5MV9TVF9QSVRTKTsKK30KKworc3RydWN0IHN5c190aW1lciBhdDkxcm05MjAwX3RpbWVyID0geworCS5pbml0CQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IGF0OTFybTkyMDBfZ2V0dGltZW9mZnNldCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZDg5NmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotaWYgQVJDSF9DQU1FTE9UCi0KLW1lbnUgIkVweGExMGRiIgotCi1jb21tZW50ICJQTEQgaG90c3dhcCBzdXBwb3J0IgotCi1jb25maWcgUExECi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgUExEX0hPVFNXQVAKLQlib29sICJTdXBwb3J0IGZvciBQTEQgZGV2aWNlIGhvdHBsdWdnaW5nIChleHBlcmltZW50YWwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBkeW5hbWljIGxvYWRpbmcgYW5kIGNvbmZpZ3VyYXRpb24gb2YKLQkgIGNvbXBhdGlibGUgZHJpdmVycyB3aGVuIHRoZSBjb250ZW50cyBvZiB0aGUgUExEIGFyZSBjaGFuZ2VkLiBUaGlzCi0JICBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIHJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gdG9vbHMgd2hpY2ggYXJlCi0JICBub3QgeWV0IGdlbmVyYWxseSBhdmFpbGFibGUuIFNheSBOIGhlcmUuIFlvdSBtdXN0IGVuYWJsZSB0aGUga2VybmVsCi0JICBtb2R1bGUgbG9hZGVyIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yay4KLQotZW5kbWVudQotCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZmJkN2QuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCi0jCi0KLSMgT2JqZWN0IGZpbGUgbGlzdHMuCi0KLW9iai15CQkJOj0gYXJjaC5vIGlycS5vIG1tLm8gdGltZS5vIAotb2JqLW0JCQk6PQotb2JqLW4JCQk6PQotb2JqLQkJCTo9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvTWFrZWZpbGUuYm9vdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhiZWM3ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL01ha2VmaWxlLmJvb3QKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL2FyY2guYyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvYXJjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGM1NjU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvYXJjaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVweGExMGRiL2FyY2guYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0JCS5pb2Jhc2UJCT0gMHgzZjgsCi0JCS5pcnEJCT0gSVJRX1VBUlRJTlQwLAotI2Vycm9yIEZJWE1FCi0JCS51YXJ0Y2xrCT0gMCwKLQkJLnJlZ3NoaWZ0CT0gMCwKLQkJLmlvdHlwZQkJPSBVUElPX1BPUlQsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCi0JfSwKLQl7Ci0JCS5pb2Jhc2UJCT0gMHgyZjgsCi0JCS5pcnEJCT0gSVJRX1VBUlRJTlQxLAotI2Vycm9yIEZJWE1FCi0JCS51YXJ0Y2xrCT0gMCwKLQkJLnJlZ3NoaWZ0CT0gMCwKLQkJLmlvdHlwZQkJPSBVUElPX1BPUlQsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCi0JfSwKLQl7IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0gewotCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCi0JLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCi0JLmRldgkJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCi1leHRlcm4gdm9pZCBlcHhhMTBkYl9tYXBfaW8odm9pZCk7Ci1leHRlcm4gdm9pZCBlcHhhMTBkYl9pbml0X2lycSh2b2lkKTsKLWV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGVweGExMGRiX3RpbWVyOwotCi1NQUNISU5FX1NUQVJUKENBTUVMT1QsICJBbHRlcmEgRXB4YTEwZGIiKQotCS8qIE1haW50YWluZXI6IEFsdGVyYSBDb3Jwb3JhdGlvbiAqLwotCS5waHlzX3JhbQk9IDB4MDAwMDAwMDAsCi0JLnBoeXNfaW8JPSAweDdmZmZjMDAwLAotCS5pb19wZ19vZmZzdAk9ICgoMHhmZmZmYzAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5tYXBfaW8JCT0gZXB4YTEwZGJfbWFwX2lvLAotCS5pbml0X2lycQk9IGVweGExMGRiX2luaXRfaXJxLAotCS50aW1lcgkJPSAmZXB4YTEwZGJfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmOTI3ZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVweGExMGRiL2lycS5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaW50X2N0cmwwMC5oPgotCi0KLXN0YXRpYyB2b2lkIGVweGFfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgd3JpdGVsKDEgPDwgaXJxLCBJTlRfTUMoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkpOwotfQotCi1zdGF0aWMgdm9pZCBlcHhhX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgd3JpdGVsKDEgPDwgaXJxLCBJTlRfTVMoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkpOwotfQotIAotCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgZXB4YV9pcnFfY2hpcCA9IHsKLQkuYWNrCQk9IGVweGFfbWFza19pcnEsCi0JLm1hc2sJCT0gZXB4YV9tYXNrX2lycSwKLQkudW5tYXNrCQk9IGVweGFfdW5tYXNrX2lycSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxX3Jlc291cmNlID0gewotCS5uYW1lCT0gImlycV9oYW5kbGVyIiwKLQkuc3RhcnQJPSBJT19BRERSRVNTKEVYQ19JTlRfQ1RSTDAwX0JBU0UpLAotCS5lbmQJPSBJT19BRERSRVNTKElOVF9QUklPUklUWV9GQyhFWENfSU5UX0NUUkwwMF9CQVNFKSkrNCwKLX07Ci0KLXZvaWQgX19pbml0IGVweGExMGRiX2luaXRfaXJxKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JCi0JcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpcnFfcmVzb3VyY2UpOwotCi0JLyoKLQkgKiBUaGlzIGJpdCBzZXRzIHVwIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB1c2luZyAKLQkgKiB0aGUgNiBQTEQgaW50ZXJydXB0cyBtb2RlICh0aGUgZGVmYXVsdCkgZWFjaCAKLQkgKiBpcnFzIGlzIGFzc2lnbmVkIGEgcHJpb3JpdHkgd2hpY2ggaXMgdGhlIHNhbWUKLQkgKiBhcyBpdHMgaW50ZXJydXB0IG51bWJlci4gVGhpcyBzY2hlbWUgaXMgdXNlZCBiZWNhdXNlIAotCSAqIGl0cyBlYXN5LCBidXQgeW91IG1heSB3YW50IHRvIGNoYW5nZSBpdCBkZXBlbmRpbmcKLQkgKiBvbiB0aGUgY29udGVudHMgb2YgeW91ciBQTEQKLQkgKi8KLQotCXdyaXRlbCgzLElOVF9NT0RFKElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSkpKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKXsKLQkJd3JpdGVsKGkrMSwgSU5UX1BSSU9SSVRZX1AwKElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSkpICsgKDQqaSkpOwotCQlzZXRfaXJxX2NoaXAoaSwmZXB4YV9pcnFfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpLGRvX2xldmVsX0lSUSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCX0KLQotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQl3cml0ZWwoLTEsSU5UX01DKElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSkpKTsKLQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9tbS5jIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9tbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmQwZDIxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvbW0uYworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9tbS5jCi0gKgotICogIE1NIHJvdXRpbmVzIGZvciBBbHRlcmEnYSBFcHhhMTBkYiBib2FyZAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NpemVzLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSAKLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotLyogUGFnZSB0YWJsZSBtYXBwaW5nIGZvciBJL08gcmVnaW9uICovCi0gCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGVweGExMGRiX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEVYQ19SRUdJU1RFUlNfQkFTRSksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWENfUkVHSVNURVJTX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbAk9IElPX0FERFJFU1MoRVhDX1BMRF9CTE9DSzBfQkFTRSksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWENfUExEX0JMT0NLMF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEVYQ19QTERfQkxPQ0sxX0JBU0UpLAotCQkucGZuCQk9X19waHlzX3RvX3BmbihFWENfUExEX0JMT0NLMV9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEVYQ19QTERfQkxPQ0syX0JBU0UpLAotCQkucGh5c2ljYWwJPSBfX3BoeXNfdG9fcGZuKEVYQ19QTERfQkxPQ0syX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbAk9IElPX0FERFJFU1MoRVhDX1BMRF9CTE9DSzNfQkFTRSksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWENfUExEX0JMT0NLM19CQVNFKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBGTEFTSF9WQUREUihFWENfRUJJX0JMT0NLMF9CQVNFKSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYQ19FQklfQkxPQ0swX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNaXzE2TSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQotfTsKLQotdm9pZCBfX2luaXQgZXB4YTEwZGJfbWFwX2lvKHZvaWQpCi17Ci0JaW90YWJsZV9pbml0KGVweGExMGRiX2lvX2Rlc2MsIEFSUkFZX1NJWkUoZXB4YTEwZGJfaW9fZGVzYykpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL3RpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIxMDg0ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi90aW1lLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9sZWRzLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNkZWZpbmUgVElNRVIwMF9UWVBFICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKQotI2luY2x1ZGUgPGFzbS9hcmNoL3RpbWVyMDAuaD4KLQotc3RhdGljIGludCBlcHhhMTBkYl9zZXRfcnRjKHZvaWQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgZXB4YTEwZGJfcnRjX2luaXQodm9pZCkKLXsKLQlzZXRfcnRjID0gZXB4YTEwZGJfc2V0X3J0YzsKLQotCXJldHVybiAwOwotfQotCi1fX2luaXRjYWxsKGVweGExMGRiX3J0Y19pbml0KTsKLQotCi0vKgotICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QKLWVweGExMGRiX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwotCi0JLy8gLi4uY2xlYXIgdGhlIGludGVycnVwdAotCSpUSU1FUjBfQ1IoSU9fQUREUkVTUyhFWENfVElNRVIwMF9CQVNFKSl8PVRJTUVSMF9DUl9DSV9NU0s7Ci0KLQl0aW1lcl90aWNrKHJlZ3MpOwotCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGVweGExMGRiX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiRXhjYWxpYnVyIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKLQkuaGFuZGxlcgk9IGVweGExMGRiX3RpbWVyX2ludGVycnVwdCwKLX07Ci0KLS8qCi0gKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGVweGExMGRiX3RpbWVyX2luaXQodm9pZCkKLXsKLQkvKiBTdGFydCB0aGUgdGltZXIgKi8KLQkqVElNRVIwX0xJTUlUKElPX0FERFJFU1MoRVhDX1RJTUVSMDBfQkFTRSkpPSh1bnNpZ25lZCBpbnQpKEVYQ19BSEIyX0NMS19GUkVRVUVOQ1kvMjAwKTsKLQkqVElNRVIwX1BSRVNDQUxFKElPX0FERFJFU1MoRVhDX1RJTUVSMDBfQkFTRSkpPTE7Ci0JKlRJTUVSMF9DUihJT19BRERSRVNTKEVYQ19USU1FUjAwX0JBU0UpKT1USU1FUjBfQ1JfSUVfTVNLIHwgVElNRVIwX0NSX1NfTVNLOwotCi0Jc2V0dXBfaXJxKElSUV9USU1FUjAsICZlcHhhMTBkYl90aW1lcl9pcnEpOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIGVweGExMGRiX3RpbWVyID0gewotCS5pbml0CQk9IGVweGExMGRiX3RpbWVyX2luaXQsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwppbmRleCA1ODMwYWUzLi5mYzA5YmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpAQCAtMjUzLDEwMCArMjUzLDEwMSBAQAogLyogY2xvY2sgZGVmaW5pdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKLQl7IC5uYW1lICAgID0gIm5hbmQiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfaCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9OQU5ECi0JfSwKLQl7IC5uYW1lICAgID0gImxjZCIsCi0JICAuaWQJICAgPSAtMSwKLQkgIC5wYXJlbnQgID0gJmNsa19oLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX0xDREMKLQl9LAotCXsgLm5hbWUgICAgPSAidXNiLWhvc3QiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfaCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9VU0JICi0JfSwKLQl7IC5uYW1lICAgID0gInVzYi1kZXZpY2UiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfaCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9VU0JECi0JfSwKLQl7IC5uYW1lICAgID0gInRpbWVycyIsCi0JICAuaWQJICAgPSAtMSwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1BXTVQKLQl9LAotCXsgLm5hbWUgICAgPSAic2RpIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX3AsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fU0RJCi0JfSwKLQl7IC5uYW1lICAgID0gInVhcnQiLAotCSAgLmlkCSAgID0gMCwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1VBUlQwCi0JfSwKLQl7IC5uYW1lICAgID0gInVhcnQiLAotCSAgLmlkCSAgID0gMSwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxCi0JfSwKLQl7IC5uYW1lICAgID0gInVhcnQiLAotCSAgLmlkCSAgID0gMiwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1VBUlQyCi0JfSwKLQl7IC5uYW1lICAgID0gImdwaW8iLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9HUElPCi0JfSwKLQl7IC5uYW1lICAgID0gInJ0YyIsCi0JICAuaWQJICAgPSAtMSwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1JUQwotCX0sCi0JeyAubmFtZSAgICA9ICJhZGMiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9BREMKLQl9LAotCXsgLm5hbWUgICAgPSAiaTJjIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX3AsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fSUlDCi0JfSwKLQl7IC5uYW1lICAgID0gImlpcyIsCi0JICAuaWQJICAgPSAtMSwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX0lJUwotCX0sCi0JeyAubmFtZSAgICA9ICJzcGkiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9TUEkKLQl9LAotCXsgLm5hbWUgICAgPSAid2F0Y2hkb2ciLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5jdHJsYml0ID0gMAorCXsKKwkJLm5hbWUJCT0gIm5hbmQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9OQU5ELAorCX0sIHsKKwkJLm5hbWUJCT0gImxjZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0xDREMsCisJfSwgeworCQkubmFtZQkJPSAidXNiLWhvc3QiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VU0JILAorCX0sIHsKKwkJLm5hbWUJCT0gInVzYi1kZXZpY2UiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VU0JELAorCX0sIHsKKwkJLm5hbWUJCT0gInRpbWVycyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1BXTVQsCisJfSwgeworCQkubmFtZQkJPSAic2RpIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fU0RJLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1VBUlQwLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1VBUlQyLAorCX0sIHsKKwkJLm5hbWUJCT0gImdwaW8iLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9HUElPLAorCX0sIHsKKwkJLm5hbWUJCT0gInJ0YyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1JUQywKKwl9LCB7CisJCS5uYW1lCQk9ICJhZGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9BREMsCisJfSwgeworCQkubmFtZQkJPSAiaTJjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fSUlDLAorCX0sIHsKKwkJLm5hbWUJCT0gImlpcyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0lJUywKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9TUEksCisJfSwgeworCQkubmFtZQkJPSAid2F0Y2hkb2ciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuY3RybGJpdAk9IDAsCiAJfQogfTsKIApAQCAtMzkwLDE2ICszOTEsMTUgQEAKIAljbGtfcC5yYXRlID0gcGNsazsKIAljbGtfZi5yYXRlID0gZmNsazsKIAotCS8qIGl0IGxvb2tzIGxpa2UganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlciBoZXJlIGlzIG5vdCBnb29kCi0JICogZW5vdWdoLCBhbmQgY2F1c2VzIHRoZSBvZGQgaGFuZyBhdCBpbml0aWFsIGJvb3QgdGltZSwgc28KLQkgKiBkbyBhbGwgb2YgdGhlbSBpbmRpdmR1YWxseS4KKwkvKiBXZSBtdXN0IGJlIGNhcmVmdWwgZGlzYWJsaW5nIHRoZSBjbG9ja3Mgd2UgYXJlIG5vdCBpbnRlbmRpbmcgdG8KKwkgKiBiZSB1c2luZyBhdCBib290IHRpbWUsIGFzIHN1YnN5dGVtcyBzdWNoIGFzIHRoZSBMQ0Qgd2hpY2ggZG8KKwkgKiB0aGVpciBvd24gRE1BIHJlcXVlc3RzIHRvIHRoZSBidXMgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8gbG9ja3VwCisJICogaWYgdGhleSB3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHJlcXVlc3RpbmcgYnVzIGFjY2Vzcy4KIAkgKgotCSAqIEkgdGhpbmsgZGlzYWJsaW5nIHRoZSBMQ0QgY2xvY2sgaWYgdGhlIExDRCBpcyBhY3RpdmUgaXMKLQkgKiB2ZXJ5IGRhbmdlcm91cywgYW5kIHRoZXJlZm9yZSB0aGUgYm9vdGxvYWRlciBzaG91bGQgYmUKLQkgKiBjYXJlZnVsIHRvIG5vdCBlbmFibGUgdGhlIExDRCBjbG9jayBpZiBpdCBpcyBub3QgbmVlZGVkLgotCSAqCi0JICogYW5kIG9mIGNvdXJzZSwgdGhpcyBsb29rcyBuZWF0ZXIKLQkgKi8KKwkgKiBEaXNhYmxpbmcgdGhlIExDRCBjbG9jayBpZiB0aGUgTENEIGlzIGFjdGl2ZSBpcyB2ZXJ5IGRhbmdlcm91cywKKwkgKiBhbmQgdGhlcmVmb3JlIHRoZSBib290bG9hZGVyIHNob3VsZCBiZSAgY2FyZWZ1bCB0byBub3QgZW5hYmxlCisJICogdGhlIExDRCBjbG9jayBpZiBpdCBpcyBub3QgbmVlZGVkLgorCSovCiAKIAlzM2MyNHh4X2Nsa19lbmFibGUoUzNDMjQxMF9DTEtDT05fTkFORCwgMCk7CiAJczNjMjR4eF9jbGtfZW5hYmxlKFMzQzI0MTBfQ0xLQ09OX1VTQkgsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZTg0ZmRkZS4uM2I3OWQwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC02Miw4ICs2Miw4IEBACiAjIEFSTTkyMFQKIGNvbmZpZyBDUFVfQVJNOTIwVAogCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiIGlmICFBUkNIX1MzQzI0MTAKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9JTVggfHwgQVJDSF9BQUVDMjAwMAotCWRlZmF1bHQgeSBpZiBBUkNIX1MzQzI0MTAKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9JTVggfHwgQVJDSF9BQUVDMjAwMCB8fCBBUkNIX0FUOTFSTTkyMDAKKwlkZWZhdWx0IHkgaWYgQVJDSF9TM0MyNDEwIHx8IEFSQ0hfQVQ5MVJNOTIwMAogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCkBAIC04Myw4ICs4Myw4IEBACiAjIEFSTTkyMlQKIGNvbmZpZyBDUFVfQVJNOTIyVAogCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgotCWRlcGVuZHMgb24gQVJDSF9DQU1FTE9UIHx8IEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0lOVEVHUkFUT1IKLQlkZWZhdWx0IHkgaWYgQVJDSF9DQU1FTE9UIHx8IEFSQ0hfTEg3QTQwWAorCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYIHx8IEFSQ0hfSU5URUdSQVRPUgorCWRlZmF1bHQgeSBpZiBBUkNIX0xIN0E0MFgKIAlzZWxlY3QgQ1BVXzMydjQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCmluZGV4IDEwOTAxMzkuLmRlM2NlMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYworKysgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKQEAgLTg2LDExICs4NiwxMiBAQAogfQogCiBzdGF0aWMgaW50Ci1yZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAorcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHBmbiwKIAkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciA9IF9fcGZuX3RvX3BoeXMocGZuKTsKIAlpbnQgZXJyID0gMDsKIAlwZ2RfdCAqIGRpcjsKIApAQCAtMTMwLDM2ICsxMzEsNDQgQEAKICAqIG1hcHBpbmcuICBTZWUgaW5jbHVkZS9hc20tYXJtL3Byb2MtYXJtdi9wZ3RhYmxlLmggZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KIHZvaWQgX19pb21lbSAqCitfX2lvcmVtYXBfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisgCXN0cnVjdCB2bV9zdHJ1Y3QgKiBhcmVhOworCisgCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKyAJaWYgKCFhcmVhKQorIAkJcmV0dXJuIE5VTEw7CisgCWFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOworIAlpZiAocmVtYXBfYXJlYV9wYWdlcyhhZGRyLCBwZm4sIHNpemUsIGZsYWdzKSkgeworIAkJdmZyZWUoYWRkcik7CisgCQlyZXR1cm4gTlVMTDsKKyAJfQorIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgKGNoYXIgKilhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwX3Bmbik7CisKK3ZvaWQgX19pb21lbSAqCiBfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXZvaWQgKiBhZGRyOwotCXN0cnVjdCB2bV9zdHJ1Y3QgKiBhcmVhOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHI7CisJdW5zaWduZWQgbG9uZyBsYXN0X2FkZHI7CisgCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKKyAJdW5zaWduZWQgbG9uZyBwZm4gPSBfX3BoeXNfdG9fcGZuKHBoeXNfYWRkcik7CiAKLQkvKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZSAqLworIAkvKgorIAkgKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZQorCSAqLwogCWxhc3RfYWRkciA9IHBoeXNfYWRkciArIHNpemUgLSAxOwogCWlmICghc2l6ZSB8fCBsYXN0X2FkZHIgPCBwaHlzX2FkZHIpCiAJCXJldHVybiBOVUxMOwogCiAJLyoKLQkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZAorIAkgKiBQYWdlIGFsaWduIHRoZSBtYXBwaW5nIHNpemUKIAkgKi8KLQlvZmZzZXQgPSBwaHlzX2FkZHIgJiB+UEFHRV9NQVNLOwotCXBoeXNfYWRkciAmPSBQQUdFX01BU0s7CiAJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyICsgMSkgLSBwaHlzX2FkZHI7CiAKLQkvKgotCSAqIE9rLCBnbyBmb3IgaXQuLgotCSAqLwotCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKLQlpZiAoIWFyZWEpCi0JCXJldHVybiBOVUxMOwotCWFkZHIgPSBhcmVhLT5hZGRyOwotCWlmIChyZW1hcF9hcmVhX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBhZGRyLCBwaHlzX2FkZHIsIHNpemUsIGZsYWdzKSkgewotCQl2ZnJlZShhZGRyKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAodm9pZCBfX2lvbWVtICopIChvZmZzZXQgKyAoY2hhciAqKWFkZHIpOworIAlyZXR1cm4gX19pb3JlbWFwX3BmbihwZm4sIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChfX2lvcmVtYXApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCA0NjU0ODc0Li5kMGY5YmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBGcmkgTm92IDI1IDE0OjQzOjA0IDIwMDUKKyMgTGFzdCB1cGRhdGU6IE1vbiBKYW4gOSAxMjo1Njo0MiAyMDA2CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTkxMCwzICs5MTAsMzEgQEAKIG5hZGlhMnZiCQlNQUNIX05BRElBMlZCCQlOQURJQTJWQgkJODk3CiByMTAwMAkJCU1BQ0hfUjEwMDAJCVIxMDAwCQkJODk4CiBodzkwMjUwCQkJTUFDSF9IVzkwMjUwCQlIVzkwMjUwCQkJODk5CitvbWFwXzI0MzBzZHAJCU1BQ0hfT01BUF8yNDMwU0RQCU9NQVBfMjQzMFNEUAkJOTAwCitkYXZpbmNpX2V2bQkJTUFDSF9EQVZJTkNJX0VWTQlEQVZJTkNJX0VWTQkJOTAxCitvbWFwX3Rvcm5hZG8JCU1BQ0hfT01BUF9UT1JOQURPCU9NQVBfVE9STkFETwkJOTAyCitvbG9jcmVlawkJTUFDSF9PTE9DUkVFSwkJT0xPQ1JFRUsJCTkwMworcGFsbXo3MgkJCU1BQ0hfUEFMTVo3MgkJUEFMTVo3MgkJCTkwNAorbnhkYjUwMAkJCU1BQ0hfTlhEQjUwMAkJTlhEQjUwMAkJCTkwNQorYXBmOTMyOAkJCU1BQ0hfQVBGOTMyOAkJQVBGOTMyOAkJCTkwNgorb21hcF93aXBvcQkJTUFDSF9PTUFQX1dJUE9RCQlPTUFQX1dJUE9RCQk5MDcKK29tYXBfdHdpcAkJTUFDSF9PTUFQX1RXSVAJCU9NQVBfVFdJUAkJOTA4Cit4c2NhbGVfdHJlbzY1MAkJTUFDSF9YU0NBTEVfUEFMTVRSRU82NTAJWFNDQUxFX1BBTE1UUkVPNjUwCTkwOQorYWN1bWVuCQkJTUFDSF9BQ1VNRU4JCUFDVU1FTgkJCTkxMAoreHAxMDAJCQlNQUNIX1hQMTAwCQlYUDEwMAkJCTkxMQorZnMyNDEwCQkJTUFDSF9GUzI0MTAJCUZTMjQxMAkJCTkxMgorcHhhMjcwX2NlcmYJCU1BQ0hfUFhBMjcwX0NFUkYJUFhBMjcwX0NFUkYJCTkxMworc3EyZnRscGFsbQkJTUFDSF9TUTJGVExQQUxNCQlTUTJGVExQQUxNCQk5MTQKK2JzZW1zZXJ2ZXIJCU1BQ0hfQlNFTVNFUlZFUgkJQlNFTVNFUlZFUgkJOTE1CituZXRjbGllbnQJCU1BQ0hfTkVUQ0xJRU5UCQlORVRDTElFTlQJCTkxNgoreHNjYWxlX3BhbG10dDUJCU1BQ0hfWFNDQUxFX1BBTE1UVDUJWFNDQUxFX1BBTE1UVDUJCTkxNworeHNjYWxlX3BhbG10YwkJTUFDSF9PTUFQX1BBTE1UQwlPTUFQX1BBTE1UQwkJOTE4CitvbWFwX2Fwb2xsb24JCU1BQ0hfT01BUF9BUE9MTE9OCU9NQVBfQVBPTExPTgkJOTE5Cithcmdvbmx2ZXZiCQlNQUNIX0FSR09OTFZFVkIJCUFSR09OTFZFVkIJCTkyMAorcmVhXzJkCQkJTUFDSF9SRUFfMkQJCVJFQV8yRAkJCTkyMQorZXRpM2U1MjQJCU1BQ0hfVEkzRTUyNAkJVEkzRTUyNAkJCTkyMgorYXRlYjkyMDAJCU1BQ0hfQVRFQjkyMDAJCUFURUI5MjAwCQk5MjMKK2F1Y2tsYW5kCQlNQUNIX0FVQ0tMQU5ECQlBVUNLTEFORAkJOTI0CithazMyMjBtCQkJTUFDSF9BSzMzMjBNCQlBSzMzMjBNCQkJOTI1CitkdXJhbWF4CQkJTUFDSF9EVVJBTUFYCQlEVVJBTUFYCQkJOTI2CituMzUJCQlNQUNIX04zNQkJTjM1CQkJOTI3CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3J5cHRvL2Flcy1pNTg2LWFzbS5TIGIvYXJjaC9pMzg2L2NyeXB0by9hZXMtaTU4Ni1hc20uUwppbmRleCA3YjczYzY3Li45MTFiMTUzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvY3J5cHRvL2Flcy1pNTg2LWFzbS5TCisrKyBiL2FyY2gvaTM4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtLlMKQEAgLTI1NSwxOCArMjU1LDE3IEBACiAJeG9yICAgICA4KCVlYnApLCVyNAogCXhvciAgICAgMTIoJWVicCksJXI1CiAKLQlzdWIgICAgICQ4LCVlc3AgICAgICAgICAgIC8vIHNwYWNlIGZvciByZWdpc3RlciBzYXZlcyBvbiBzdGFjawotCWFkZCAgICAgJDE2LCVlYnAgICAgICAgICAgLy8gaW5jcmVtZW50IHRvIG5leHQgcm91bmQga2V5Ci0Jc3ViICAgICAkMTAsJXIzICAgICAgICAgIAotCWplICAgICAgNGYgICAgICAgICAgICAgIC8vIDEwIHJvdW5kcyBmb3IgMTI4LWJpdCBrZXkKLQlhZGQgICAgICQzMiwlZWJwCi0Jc3ViICAgICAkMiwlcjMKLQlqZSAgICAgIDNmICAgICAgICAgICAgICAvLyAxMiByb3VuZHMgZm9yIDEyOC1iaXQga2V5Ci0JYWRkICAgICAkMzIsJWVicAorCXN1YiAgICAgJDgsJWVzcAkJLy8gc3BhY2UgZm9yIHJlZ2lzdGVyIHNhdmVzIG9uIHN0YWNrCisJYWRkICAgICAkMTYsJWVicAkvLyBpbmNyZW1lbnQgdG8gbmV4dCByb3VuZCBrZXkKKwljbXAgICAgICQxMiwlcjMKKwlqYiAgICAgIDRmCQkvLyAxMCByb3VuZHMgZm9yIDEyOC1iaXQga2V5CisJbGVhICAgICAzMiglZWJwKSwlZWJwCisJamUgICAgICAzZgkJLy8gMTIgcm91bmRzIGZvciAxOTItYml0IGtleQorCWxlYSAgICAgMzIoJWVicCksJWVicAogCi0yOglmd2Rfcm5kMSggLTY0KCVlYnApICxmdF90YWIpCS8vIDE0IHJvdW5kcyBmb3IgMTI4LWJpdCBrZXkKKzI6CWZ3ZF9ybmQxKCAtNjQoJWVicCkgLGZ0X3RhYikJLy8gMTQgcm91bmRzIGZvciAyNTYtYml0IGtleQogCWZ3ZF9ybmQyKCAtNDgoJWVicCkgLGZ0X3RhYikKLTM6CWZ3ZF9ybmQxKCAtMzIoJWVicCkgLGZ0X3RhYikJLy8gMTIgcm91bmRzIGZvciAxMjgtYml0IGtleQorMzoJZndkX3JuZDEoIC0zMiglZWJwKSAsZnRfdGFiKQkvLyAxMiByb3VuZHMgZm9yIDE5Mi1iaXQga2V5CiAJZndkX3JuZDIoIC0xNiglZWJwKSAsZnRfdGFiKQogNDoJZndkX3JuZDEoICAgICglZWJwKSAsZnRfdGFiKQkvLyAxMCByb3VuZHMgZm9yIDEyOC1iaXQga2V5CiAJZndkX3JuZDIoICsxNiglZWJwKSAsZnRfdGFiKQpAQCAtMzM0LDE4ICszMzMsMTcgQEAKIAl4b3IgICAgIDgoJWVicCksJXI0CiAJeG9yICAgICAxMiglZWJwKSwlcjUKIAotCXN1YiAgICAgJDgsJWVzcCAgICAgICAgIC8vIHNwYWNlIGZvciByZWdpc3RlciBzYXZlcyBvbiBzdGFjawotCXN1YiAgICAgJDE2LCVlYnAgICAgICAgIC8vIGluY3JlbWVudCB0byBuZXh0IHJvdW5kIGtleQotCXN1YiAgICAgJDEwLCVyMyAgICAgICAgICAKLQlqZSAgICAgIDRmICAgICAgICAgICAgICAvLyAxMCByb3VuZHMgZm9yIDEyOC1iaXQga2V5Ci0Jc3ViICAgICAkMzIsJWVicAotCXN1YiAgICAgJDIsJXIzCi0JamUgICAgICAzZiAgICAgICAgICAgICAgLy8gMTIgcm91bmRzIGZvciAxMjgtYml0IGtleQotCXN1YiAgICAgJDMyLCVlYnAKKwlzdWIgICAgICQ4LCVlc3AJCS8vIHNwYWNlIGZvciByZWdpc3RlciBzYXZlcyBvbiBzdGFjaworCXN1YiAgICAgJDE2LCVlYnAJLy8gaW5jcmVtZW50IHRvIG5leHQgcm91bmQga2V5CisJY21wICAgICAkMTIsJXIzCisJamIgICAgICA0ZgkJLy8gMTAgcm91bmRzIGZvciAxMjgtYml0IGtleQorCWxlYSAgICAgLTMyKCVlYnApLCVlYnAKKwlqZSAgICAgIDNmCQkvLyAxMiByb3VuZHMgZm9yIDE5Mi1iaXQga2V5CisJbGVhICAgICAtMzIoJWVicCksJWVicAogCi0yOglpbnZfcm5kMSggKzY0KCVlYnApLCBpdF90YWIpCS8vIDE0IHJvdW5kcyBmb3IgMTI4LWJpdCBrZXkKKzI6CWludl9ybmQxKCArNjQoJWVicCksIGl0X3RhYikJLy8gMTQgcm91bmRzIGZvciAyNTYtYml0IGtleQogCWludl9ybmQyKCArNDgoJWVicCksIGl0X3RhYikKLTM6CWludl9ybmQxKCArMzIoJWVicCksIGl0X3RhYikJLy8gMTIgcm91bmRzIGZvciAxMjgtYml0IGtleQorMzoJaW52X3JuZDEoICszMiglZWJwKSwgaXRfdGFiKQkvLyAxMiByb3VuZHMgZm9yIDE5Mi1iaXQga2V5CiAJaW52X3JuZDIoICsxNiglZWJwKSwgaXRfdGFiKQogNDoJaW52X3JuZDEoICAgICglZWJwKSwgaXRfdGFiKQkvLyAxMCByb3VuZHMgZm9yIDEyOC1iaXQga2V5CiAJaW52X3JuZDIoIC0xNiglZWJwKSwgaXRfdGFiKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2NyeXB0by9hZXMuYyBiL2FyY2gvaTM4Ni9jcnlwdG8vYWVzLmMKaW5kZXggODhlZTg1Yy4uYTUwMzk3YiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2NyeXB0by9hZXMuYworKysgYi9hcmNoL2kzODYvY3J5cHRvL2Flcy5jCkBAIC0zNiw2ICszNiw4IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CiAgKgogICovCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTksNyArNjEsNiBAQAogfTsKIAogI2RlZmluZSBXUE9MWSAweDAxMWIKLSNkZWZpbmUgdTMyX2luKHgpIGxlMzJfdG9fY3B1cCgoY29uc3QgX19sZTMyICopKHgpKQogI2RlZmluZSBieXRlczJ3b3JkKGIwLCBiMSwgYjIsIGIzKSAgXAogCSgoKHUzMikoYjMpIDw8IDI0KSB8ICgodTMyKShiMikgPDwgMTYpIHwgKCh1MzIpKGIxKSA8PCA4KSB8IChiMCkpCiAKQEAgLTkzLDcgKzk0LDYgQEAKIAogdTMyIGZ0X3RhYls0XVsyNTZdOwogdTMyIGZsX3RhYls0XVsyNTZdOwotc3RhdGljIHUzMiBsc190YWJbNF1bMjU2XTsKIHN0YXRpYyB1MzIgaW1fdGFiWzRdWzI1Nl07CiB1MzIgaWxfdGFiWzRdWzI1Nl07CiB1MzIgaXRfdGFiWzRdWzI1Nl07CkBAIC0xNDQsMTUgKzE0NCw2IEBACiAJCWZsX3RhYlsyXVtpXSA9IHVwcih3LCAyKTsKIAkJZmxfdGFiWzNdW2ldID0gdXByKHcsIDMpOwogCQkKLQkJLyoKLQkJICogdGFibGUgZm9yIGtleSBzY2hlZHVsZSBpZiBmbF90YWIgYWJvdmUgaXMKLQkJICogbm90IG9mIHRoZSByZXF1aXJlZCBmb3JtCi0JCSAqLwotCQlsc190YWJbMF1baV0gPSB3OwotCQlsc190YWJbMV1baV0gPSB1cHIodywgMSk7Ci0JCWxzX3RhYlsyXVtpXSA9IHVwcih3LCAyKTsKLQkJbHNfdGFiWzNdW2ldID0gdXByKHcsIDMpOwotCQkKIAkJYiA9IGZpKGludl9hZmZpbmUoKHU4KWkpKTsKIAkJdyA9IGJ5dGVzMndvcmQoZmUoYiksIGY5KGIpLCBmZChiKSwgZmIoYikpOwogCkBAIC0zOTMsMTMgKzM4NCwxNCBAQAogCWludCBpOwogCXUzMiBzc1s4XTsKIAlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7CiAKIAkvKiBlbmNyeXB0aW9uIHNjaGVkdWxlICovCiAJCi0JY3R4LT5la2V5WzBdID0gc3NbMF0gPSB1MzJfaW4oaW5fa2V5KTsKLQljdHgtPmVrZXlbMV0gPSBzc1sxXSA9IHUzMl9pbihpbl9rZXkgKyA0KTsKLQljdHgtPmVrZXlbMl0gPSBzc1syXSA9IHUzMl9pbihpbl9rZXkgKyA4KTsKLQljdHgtPmVrZXlbM10gPSBzc1szXSA9IHUzMl9pbihpbl9rZXkgKyAxMik7CisJY3R4LT5la2V5WzBdID0gc3NbMF0gPSBsZTMyX3RvX2NwdShrZXlbMF0pOworCWN0eC0+ZWtleVsxXSA9IHNzWzFdID0gbGUzMl90b19jcHUoa2V5WzFdKTsKKwljdHgtPmVrZXlbMl0gPSBzc1syXSA9IGxlMzJfdG9fY3B1KGtleVsyXSk7CisJY3R4LT5la2V5WzNdID0gc3NbM10gPSBsZTMyX3RvX2NwdShrZXlbM10pOwogCiAJc3dpdGNoKGtleV9sZW4pIHsKIAljYXNlIDE2OgpAQCAtNDEwLDggKzQwMiw4IEBACiAJCWJyZWFrOwogCQkKIAljYXNlIDI0OgotCQljdHgtPmVrZXlbNF0gPSBzc1s0XSA9IHUzMl9pbihpbl9rZXkgKyAxNik7Ci0JCWN0eC0+ZWtleVs1XSA9IHNzWzVdID0gdTMyX2luKGluX2tleSArIDIwKTsKKwkJY3R4LT5la2V5WzRdID0gc3NbNF0gPSBsZTMyX3RvX2NwdShrZXlbNF0pOworCQljdHgtPmVrZXlbNV0gPSBzc1s1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7CiAJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCiAJCQlrZTYoY3R4LT5la2V5LCBpKTsKIAkJa2VsNihjdHgtPmVrZXksIDcpOyAKQEAgLTQxOSwxMCArNDExLDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKLQkJY3R4LT5la2V5WzRdID0gc3NbNF0gPSB1MzJfaW4oaW5fa2V5ICsgMTYpOwotCQljdHgtPmVrZXlbNV0gPSBzc1s1XSA9IHUzMl9pbihpbl9rZXkgKyAyMCk7Ci0JCWN0eC0+ZWtleVs2XSA9IHNzWzZdID0gdTMyX2luKGluX2tleSArIDI0KTsKLQkJY3R4LT5la2V5WzddID0gc3NbN10gPSB1MzJfaW4oaW5fa2V5ICsgMjgpOworCQljdHgtPmVrZXlbNF0gPSBzc1s0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7CisJCWN0eC0+ZWtleVs1XSA9IHNzWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKTsKKwkJY3R4LT5la2V5WzZdID0gc3NbNl0gPSBsZTMyX3RvX2NwdShrZXlbNl0pOworCQljdHgtPmVrZXlbN10gPSBzc1s3XSA9IGxlMzJfdG9fY3B1KGtleVs3XSk7CiAJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCQlrZTgoY3R4LT5la2V5LCBpKTsKIAkJa2VsOChjdHgtPmVrZXksIDYpOwpAQCAtNDM2LDEwICs0MjgsMTAgQEAKIAkKIAkvKiBkZWNyeXB0aW9uIHNjaGVkdWxlICovCiAJCi0JY3R4LT5ka2V5WzBdID0gc3NbMF0gPSB1MzJfaW4oaW5fa2V5KTsKLQljdHgtPmRrZXlbMV0gPSBzc1sxXSA9IHUzMl9pbihpbl9rZXkgKyA0KTsKLQljdHgtPmRrZXlbMl0gPSBzc1syXSA9IHUzMl9pbihpbl9rZXkgKyA4KTsKLQljdHgtPmRrZXlbM10gPSBzc1szXSA9IHUzMl9pbihpbl9rZXkgKyAxMik7CisJY3R4LT5ka2V5WzBdID0gc3NbMF0gPSBsZTMyX3RvX2NwdShrZXlbMF0pOworCWN0eC0+ZGtleVsxXSA9IHNzWzFdID0gbGUzMl90b19jcHUoa2V5WzFdKTsKKwljdHgtPmRrZXlbMl0gPSBzc1syXSA9IGxlMzJfdG9fY3B1KGtleVsyXSk7CisJY3R4LT5ka2V5WzNdID0gc3NbM10gPSBsZTMyX3RvX2NwdShrZXlbM10pOwogCiAJc3dpdGNoIChrZXlfbGVuKSB7CiAJY2FzZSAxNjoKQEAgLTQ1MCw4ICs0NDIsOCBAQAogCQlicmVhazsKIAkJCiAJY2FzZSAyNDoKLQkJY3R4LT5ka2V5WzRdID0gZmYoc3NbNF0gPSB1MzJfaW4oaW5fa2V5ICsgMTYpKTsKLQkJY3R4LT5ka2V5WzVdID0gZmYoc3NbNV0gPSB1MzJfaW4oaW5fa2V5ICsgMjApKTsKKwkJY3R4LT5ka2V5WzRdID0gZmYoc3NbNF0gPSBsZTMyX3RvX2NwdShrZXlbNF0pKTsKKwkJY3R4LT5ka2V5WzVdID0gZmYoc3NbNV0gPSBsZTMyX3RvX2NwdShrZXlbNV0pKTsKIAkJa2RmNihjdHgtPmRrZXksIDApOwogCQlmb3IgKGkgPSAxOyBpIDwgNzsgaSsrKQogCQkJa2Q2KGN0eC0+ZGtleSwgaSk7CkBAIC00NTksMTAgKzQ1MSwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgMzI6Ci0JCWN0eC0+ZGtleVs0XSA9IGZmKHNzWzRdID0gdTMyX2luKGluX2tleSArIDE2KSk7Ci0JCWN0eC0+ZGtleVs1XSA9IGZmKHNzWzVdID0gdTMyX2luKGluX2tleSArIDIwKSk7Ci0JCWN0eC0+ZGtleVs2XSA9IGZmKHNzWzZdID0gdTMyX2luKGluX2tleSArIDI0KSk7Ci0JCWN0eC0+ZGtleVs3XSA9IGZmKHNzWzddID0gdTMyX2luKGluX2tleSArIDI4KSk7CisJCWN0eC0+ZGtleVs0XSA9IGZmKHNzWzRdID0gbGUzMl90b19jcHUoa2V5WzRdKSk7CisJCWN0eC0+ZGtleVs1XSA9IGZmKHNzWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKSk7CisJCWN0eC0+ZGtleVs2XSA9IGZmKHNzWzZdID0gbGUzMl90b19jcHUoa2V5WzZdKSk7CisJCWN0eC0+ZGtleVs3XSA9IGZmKHNzWzddID0gbGUzMl90b19jcHUoa2V5WzddKSk7CiAJCWtkZjgoY3R4LT5ka2V5LCAwKTsKIAkJZm9yIChpID0gMTsgaSA8IDY7IGkrKykKIAkJCWtkOChjdHgtPmRrZXksIGkpOwpAQCAtNDg0LDYgKzQ3Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNfYWxnID0gewogCS5jcmFfbmFtZQkJPQkiYWVzIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImFlcy1pNTg2IiwKKwkuY3JhX3ByaW9yaXR5CQk9CTIwMCwKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JQUVTX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgYWVzX2N0eCksCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvZGVmY29uZmlnIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwppbmRleCA0NmE2YWQ2Li5hM2ZiMzM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCisrKyBiL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKQEAgLTEsNDYgKzEsNjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMQotIyBTdW4gTWFyICA2IDIwOjQ3OjI5IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNQorIyBNb24gSmFuICA5IDE0OjM2OjI5IDIwMDYKICMKK0NPTkZJR19TUEFSQz15CitDT05GSUdfU1BBUkM2ND15CiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfVElNRV9JTlRFUlBPTEFUSU9OPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfOEtCPXkKKyMgQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNE1CIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfVUlEMTY9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtNTIsMjAgKzczLDMyIEBACiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKKworIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CiAKICMKICMgR2VuZXJhbCBtYWNoaW5lIHNldHVwCiAjCi1DT05GSUdfQkJDX0kyQz1tCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotQ09ORklHX1NNUD15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfTlJfQ1BVUz00CiBDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPW0KICMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9TVEFUPW0KIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQpAQCAtNzUsMTUgKzEwOCwyMiBAQAogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD1tCi1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9bQogQ09ORklHX1VTM19GUkVRPW0KIENPTkZJR19VUzJFX0ZSRVE9bQotQ09ORklHX1NQQVJDNjQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMksgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQogQ09ORklHX1NCVVM9eQogQ09ORklHX1NCVVNDSEFSPXkKQEAgLTkxLDEzMCArMTMxLDE0MiBAQAogQ09ORklHX1NVTl9JTz15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUlRDPXkKICMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTkFNRVMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TVU5fT1BFTlBST01GUz1tCiBDT05GSUdfU1BBUkMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15Ci1DT05GSUdfVUlEMTY9eQogQ09ORklHX0JJTkZNVF9FTEYzMj15CiAjIENPTkZJR19CSU5GTVRfQU9VVDMyIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfU09MQVJJU19FTVVMPW0KIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKLUNPTkZJR19QQVJQT1JUPW0KLUNPTkZJR19QQVJQT1JUX1BDPW0KLUNPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQotIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfU1VOQlBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfT1RIRVIgaXMgbm90IHNldAotQ09ORklHX1BBUlBPUlRfMTI4ND15Ci1DT05GSUdfUFJJTlRFUj1tCi1DT05GSUdfRU5WQ1RSTD1tCi1DT05GSUdfRElTUExBWTdTRUc9bQorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX1NPTEFSSVNfRU1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCitDT05GSUdfTkVUX0tFWT1tCitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CitDT05GSUdfQVJQRD15CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9eQorQ09ORklHX0lORVRfRVNQPXkKK0NPTkZJR19JTkVUX0lQQ09NUD15CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorCisjCisjIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wKKyMKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPW0KK0NPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCitDT05GSUdfVENQX0NPTkdfSFRDUD1tCitDT05GSUdfVENQX0NPTkdfSFNUQ1A9bQorQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KK0NPTkZJR19UQ1BfQ09OR19WRUdBUz1tCitDT05GSUdfVENQX0NPTkdfU0NBTEFCTEU9bQorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfRENDUD1tCitDT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQorCisjCisjIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9bQorCisjCisjIERDQ1AgS2VybmVsIEhhY2tpbmcKKyMKKyMgQ09ORklHX0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUF9VTkxPQURfSEFDSyBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3Mgc3VwcG9ydAorIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCiAjCi1DT05GSUdfRkI9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci1DT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUE0yPXkKLSMgQ09ORklHX0ZCX1BNMl9GSUZPX0RJU0NPTk5FQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NHMyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0c2PXkKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQVRZPXkKLUNPTkZJR19GQl9BVFlfQ1Q9eQotIyBDT05GSUdfRkJfQVRZX0dFTkVSSUNfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWV9YTF9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9BVFlfR1g9eQotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TQlVTPXkKLUNPTkZJR19GQl9GRkI9eQotIyBDT05GSUdfRkJfVENYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NHMTQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUDkxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTEVPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST01fQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF9TVU44eDE2PXkKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotQ09ORklHX0xPR089eQotIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPX1NVTl9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX1NVTkNPUkU9eQotQ09ORklHX1NFUklBTF9TVU5aSUxPRz15Ci1DT05GSUdfU0VSSUFMX1NVTlpJTE9HX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9TVU5TVT15Ci1DT05GSUdfU0VSSUFMX1NVTlNVX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9TVU5TQUI9bQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLQotIwotIyBNaXNjIExpbnV4L1NQQVJDIGRyaXZlcnMKLSMKLUNPTkZJR19TVU5fT1BFTlBST01JTz1tCi1DT05GSUdfU1VOX01PU1RFS19SVEM9eQotQ09ORklHX09CUF9GTEFTSD1tCi0jIENPTkZJR19TVU5fQlBQIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQogCiAjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKQEAgLTIyMiwxMCArMjc0LDE4IEBACiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogCiAjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKICMgQmxvY2sgZGV2aWNlcwogIwogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJJREUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldApAQCAtMjM0LDIyICsyOTQsMTMgQEAKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQotQ09ORklHX0JMS19ERVZfU1g4PW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1VCPW0KICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIwpAQCAtMjY1LDcgKzMxNiw3IEBACiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVUQVBFPW0KKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldApAQCAtMjc4LDcgKzMyOSw3IEBACiAjIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX09QVEk2MjE9bQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQogIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19JREVETUFfUENJX0FVVE89eQpAQCAtMjg2LDI3ICszMzcsMjUgQEAKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9BTEkxNVgzPXkKICMgQ09ORklHX1dEQ19BTEkxNVgzIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0FNRDc0WFg9bQotQ09ORklHX0JMS19ERVZfQ01ENjRYPW0KLUNPTkZJR19CTEtfREVWX1RSSUZMRVg9bQotQ09ORklHX0JMS19ERVZfQ1k4MkM2OTM9bQotQ09ORklHX0JMS19ERVZfQ1M1NTIwPW0KLUNPTkZJR19CTEtfREVWX0NTNTUzMD1tCi1DT05GSUdfQkxLX0RFVl9IUFQzNFg9bQotIyBDT05GSUdfSFBUMzRYX0FVVE9ETUEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSFBUMzY2PW0KLUNPTkZJR19CTEtfREVWX1NDMTIwMD1tCi1DT05GSUdfQkxLX0RFVl9QSUlYPW0KLUNPTkZJR19CTEtfREVWX05TODc0MTU9bQotQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEPW0KLSMgQ09ORklHX1BEQzIwMlhYX0JVUlNUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVz1tCi0jIENPTkZJR19QREMyMDJYWF9GT1JDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TVldLUz1tCi1DT05GSUdfQkxLX0RFVl9TSUlNQUdFPW0KLUNPTkZJR19CTEtfREVWX1NMQzkwRTY2PW0KLUNPTkZJR19CTEtfREVWX1RSTTI5MD1tCi1DT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9bQorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKQEAgLTMxNiw2ICszNjUsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfUkFJRF9BVFRSUz1tCiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtMzIzLDExICszNzMsMTIgQEAKICMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKICMKIENPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPW0KLUNPTkZJR19DSFJfREVWX09TU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9bQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIAogIwogIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKQEAgLTM0MCw4OSArMzkxLDQyIEBACiAjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci1DT05GSUdfU0NTSV9GQ19BVFRSUz1tCitDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIwotQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEPW0KLUNPTkZJR19TQ1NJXzNXXzlYWFg9bQotQ09ORklHX1NDU0lfQUNBUkQ9bQotQ09ORklHX1NDU0lfQUFDUkFJRD1tCitDT05GSUdfSVNDU0lfVENQPW0KKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9BSUM3OVhYPW0KLUNPTkZJR19BSUM3OVhYX0NNRFNfUEVSX0RFVklDRT0zMgotQ09ORklHX0FJQzc5WFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKLSMgQ09ORklHX0FJQzc5WFhfQlVJTERfRklSTVdBUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUlDNzlYWF9FTkFCTEVfUkRfU1RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUlDNzlYWF9ERUJVR19NQVNLPTAKLSMgQ09ORklHX0FJQzc5WFhfUkVHX1BSRVRUWV9QUklOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQVRBPXkKLUNPTkZJR19TQ1NJX1NBVEFfQUhDST1tCi1DT05GSUdfU0NTSV9TQVRBX1NWVz1tCi1DT05GSUdfU0NTSV9BVEFfUElJWD1tCi1DT05GSUdfU0NTSV9TQVRBX05WPW0KLUNPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRT1tCi1DT05GSUdfU0NTSV9TQVRBX1FTVE9SPW0KLUNPTkZJR19TQ1NJX1NBVEFfU1g0PW0KLUNPTkZJR19TQ1NJX1NBVEFfU0lMPW0KLUNPTkZJR19TQ1NJX1NBVEFfU0lTPW0KLUNPTkZJR19TQ1NJX1NBVEFfVUxJPW0KLUNPTkZJR19TQ1NJX1NBVEFfVklBPW0KLUNPTkZJR19TQ1NJX1NBVEFfVklURVNTRT1tCi1DT05GSUdfU0NTSV9ETVgzMTkxRD1tCi1DT05GSUdfU0NTSV9FQVRBX1BJTz1tCisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0lQUz1tCi1DT05GSUdfU0NTSV9JTklUSU89bQotQ09ORklHX1NDU0lfSU5JQTEwMD1tCi1DT05GSUdfU0NTSV9QUEE9bQotQ09ORklHX1NDU0lfSU1NPW0KLSMgQ09ORklHX1NDU0lfSVpJUF9FUFAxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0laSVBfU0xPV19DVFIgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9JT01BUFBFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTE9HSUNfSVNQPW0KLUNPTkZJR19TQ1NJX1FMT0dJQ19GQz15Ci1DT05GSUdfU0NTSV9RTE9HSUNfRkNfRklSTVdBUkU9eQorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTE9HSUNQVEk9bQorIyBDT05GSUdfU0NTSV9RTE9HSUNQVEkgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0RDMzk1eD1tCisjIENPTkZJR19TQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0RFQlVHPW0KLUNPTkZJR19TQ1NJX1NVTkVTUD15Ci0KLSMKLSMgRmlicmUgQ2hhbm5lbCBzdXBwb3J0Ci0jCi1DT05GSUdfRkM0PW0KLQotIwotIyBGQzQgZHJpdmVycwotIwotQ09ORklHX0ZDNF9TT0M9bQotQ09ORklHX0ZDNF9TT0NBTD1tCi0KLSMKLSMgRkM0IHRhcmdldHMKLSMKLUNPTkZJR19TQ1NJX1BMVVRPPW0KLUNPTkZJR19TQ1NJX0ZDQUw9bQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NVTkVTUCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQ0Miw0MjcgKzQ0NiwzNCBAQAogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfRlVTSU9OPW0KLUNPTkZJR19GVVNJT05fTUFYX1NHRT00MAotQ09ORklHX0ZVU0lPTl9DVEw9bQotQ09ORklHX0ZVU0lPTl9MQU49bQorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKLUNPTkZJR19JRUVFMTM5ND1tCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAKICMKLSMgU3Vic3lzdGVtIE9wdGlvbnMKKyMgSTJPIGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUUxMzk0X09VSV9EQj15Ci1DT05GSUdfSUVFRTEzOTRfRVhUUkFfQ09ORklHX1JPTVM9eQotQ09ORklHX0lFRUUxMzk0X0NPTkZJR19ST01fSVAxMzk0PXkKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAKICMKLSMgRGV2aWNlIERyaXZlcnMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX0lFRUUxMzk0X1BDSUxZTlg9bQotQ09ORklHX0lFRUUxMzk0X09IQ0kxMzk0PW0KLQotIwotIyBQcm90b2NvbCBEcml2ZXJzCi0jCi1DT05GSUdfSUVFRTEzOTRfVklERU8xMzk0PW0KLUNPTkZJR19JRUVFMTM5NF9TQlAyPW0KLSMgQ09ORklHX0lFRUUxMzk0X1NCUDJfUEhZU19ETUEgaXMgbm90IHNldAotQ09ORklHX0lFRUUxMzk0X0VUSDEzOTQ9bQotQ09ORklHX0lFRUUxMzk0X0RWMTM5ND1tCi1DT05GSUdfSUVFRTEzOTRfUkFXSU89bQotQ09ORklHX0lFRUUxMzk0X0NNUD1tCi1DT05GSUdfSUVFRTEzOTRfQU1EVFA9bQotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfTkVUTElOS19ERVY9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX05FVF9LRVk9bQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKLUNPTkZJR19JUF9NUk9VVEU9eQotQ09ORklHX0lQX1BJTVNNX1YxPXkKLUNPTkZJR19JUF9QSU1TTV9WMj15Ci1DT05GSUdfQVJQRD15Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotQ09ORklHX0lORVRfQUg9eQotQ09ORklHX0lORVRfRVNQPXkKLUNPTkZJR19JTkVUX0lQQ09NUD15Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQX1ZTPW0KLSMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9WU19UQUJfQklUUz0xMgotCi0jCi0jIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19JUF9WU19QUk9UT19UQ1A9eQotQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15Ci1DT05GSUdfSVBfVlNfUFJPVE9fRVNQPXkKLUNPTkZJR19JUF9WU19QUk9UT19BSD15Ci0KLSMKLSMgSVBWUyBzY2hlZHVsZXIKLSMKLUNPTkZJR19JUF9WU19SUj1tCi1DT05GSUdfSVBfVlNfV1JSPW0KLUNPTkZJR19JUF9WU19MQz1tCi1DT05GSUdfSVBfVlNfV0xDPW0KLUNPTkZJR19JUF9WU19MQkxDPW0KLUNPTkZJR19JUF9WU19MQkxDUj1tCi1DT05GSUdfSVBfVlNfREg9bQotQ09ORklHX0lQX1ZTX1NIPW0KLUNPTkZJR19JUF9WU19TRUQ9bQotQ09ORklHX0lQX1ZTX05RPW0KLQotIwotIyBJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcgotIwotQ09ORklHX0lQX1ZTX0ZUUD1tCi1DT05GSUdfSVBWNj1tCi1DT05GSUdfSVBWNl9QUklWQUNZPXkKLUNPTkZJR19JTkVUNl9BSD1tCi1DT05GSUdfSU5FVDZfRVNQPW0KLUNPTkZJR19JTkVUNl9JUENPTVA9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSVBWNl9UVU5ORUw9bQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfQ1RfQUNDVD15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLUNPTkZJR19JUF9ORl9URlRQPW0KLUNPTkZJR19JUF9ORl9BTUFOREE9bQotQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQotQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQX05GX01BVENIX1BIWVNERVY9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfRklMVEVSPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQotQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQotQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQotQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KLUNPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQNl9ORl9RVUVVRT1tCi1DT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09QVFM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVA2X05GX01BVENIX01BUks9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCi1DT05GSUdfSVA2X05GX01BVENIX1BIWVNERVY9bQotQ09ORklHX0lQNl9ORl9GSUxURVI9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUDZfTkZfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQNl9ORl9SQVc9bQotCi0jCi0jIERFQ25ldDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUj1tCi0KLSMKLSMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCi1DT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQotQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQotQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQotQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQotQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQotQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KLUNPTkZJR19CUklER0VfRUJUX0lQPW0KLUNPTkZJR19CUklER0VfRUJUX0xJTUlUPW0KLUNPTkZJR19CUklER0VfRUJUX01BUks9bQotQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRT1tCi1DT05GSUdfQlJJREdFX0VCVF9TVFA9bQotQ09ORklHX0JSSURHRV9FQlRfVkxBTj1tCi1DT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCi1DT05GSUdfQlJJREdFX0VCVF9ETkFUPW0KLUNPTkZJR19CUklER0VfRUJUX01BUktfVD1tCi1DT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCi1DT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KLUNPTkZJR19CUklER0VfRUJUX0xPRz1tCi1DT05GSUdfQlJJREdFX0VCVF9VTE9HPW0KLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci1DT05GSUdfQVRNPXkKLUNPTkZJR19BVE1fQ0xJUD15Ci0jIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKLUNPTkZJR19BVE1fTEFORT1tCi1DT05GSUdfQVRNX01QT0E9bQotQ09ORklHX0FUTV9CUjI2ODQ9bQotQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVI9eQotQ09ORklHX0JSSURHRT1tCi1DT05GSUdfVkxBTl84MDIxUT1tCi1DT05GSUdfREVDTkVUPW0KLUNPTkZJR19ERUNORVRfUk9VVEVSPXkKLUNPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLPXkKLUNPTkZJR19MTEM9bQotQ09ORklHX0xMQzI9bQotQ09ORklHX0lQWD1tCi0jIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFMSz1tCi0jIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKLUNPTkZJR19YMjU9bQotQ09ORklHX0xBUEI9bQotQ09ORklHX05FVF9ESVZFUlQ9eQotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotQ09ORklHX05FVF9TQ0hFRD15Ci0jIENPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1NDSF9DTEtfQ1BVPXkKLUNPTkZJR19ORVRfU0NIX0NCUT1tCi1DT05GSUdfTkVUX1NDSF9IVEI9bQotQ09ORklHX05FVF9TQ0hfSEZTQz1tCi1DT05GSUdfTkVUX1NDSF9BVE09eQotQ09ORklHX05FVF9TQ0hfUFJJTz1tCi1DT05GSUdfTkVUX1NDSF9SRUQ9bQotQ09ORklHX05FVF9TQ0hfU0ZRPW0KLUNPTkZJR19ORVRfU0NIX1RFUUw9bQotQ09ORklHX05FVF9TQ0hfVEJGPW0KLUNPTkZJR19ORVRfU0NIX0dSRUQ9bQotQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KLUNPTkZJR19ORVRfU0NIX05FVEVNPW0KLUNPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQotQ09ORklHX05FVF9RT1M9eQotQ09ORklHX05FVF9FU1RJTUFUT1I9eQotQ09ORklHX05FVF9DTFM9eQotQ09ORklHX05FVF9DTFNfQkFTSUM9bQotQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCi1DT05GSUdfTkVUX0NMU19ST1VURTQ9bQotQ09ORklHX05FVF9DTFNfUk9VVEU9eQotQ09ORklHX05FVF9DTFNfRlc9bQotQ09ORklHX05FVF9DTFNfVTMyPW0KLUNPTkZJR19DTFNfVTMyX1BFUkY9eQotQ09ORklHX05FVF9DTFNfSU5EPXkKLUNPTkZJR19DTFNfVTMyX01BUks9eQotQ09ORklHX05FVF9DTFNfUlNWUD1tCi1DT05GSUdfTkVUX0NMU19SU1ZQNj1tCi1DT05GSUdfTkVUX0VNQVRDSD15Ci1DT05GSUdfTkVUX0VNQVRDSF9TVEFDSz0zMgotQ09ORklHX05FVF9FTUFUQ0hfQ01QPW0KLUNPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KLUNPTkZJR19ORVRfRU1BVENIX1UzMj1tCi1DT05GSUdfTkVUX0VNQVRDSF9NRVRBPW0KLUNPTkZJR19ORVRfQ0xTX0FDVD15Ci1DT05GSUdfTkVUX0FDVF9QT0xJQ0U9bQotQ09ORklHX05FVF9BQ1RfR0FDVD1tCi1DT05GSUdfR0FDVF9QUk9CPXkKLUNPTkZJR19ORVRfQUNUX01JUlJFRD1tCi1DT05GSUdfTkVUX0FDVF9JUFQ9bQotQ09ORklHX05FVF9BQ1RfUEVESVQ9bQotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotQ09ORklHX05FVF9QS1RHRU49bQotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotQ09ORklHX0hBTVJBRElPPXkKLQotIwotIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCi0jCi1DT05GSUdfQVgyNT1tCi1DT05GSUdfQVgyNV9EQU1BX1NMQVZFPXkKLUNPTkZJR19ORVRST009bQotQ09ORklHX1JPU0U9bQotCi0jCi0jIEFYLjI1IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JQUUVUSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBWUNPTV9TRVJfRkRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBWUNPTV9TRVJfSERYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBWUNPTV9QQVIgaXMgbm90IHNldAotIyBDT05GSUdfWUFNIGlzIG5vdCBzZXQKLUNPTkZJR19JUkRBPW0KLQotIwotIyBJckRBIHByb3RvY29scwotIwotQ09ORklHX0lSTEFOPW0KLUNPTkZJR19JUk5FVD1tCi1DT05GSUdfSVJDT01NPW0KLUNPTkZJR19JUkRBX1VMVFJBPXkKLQotIwotIyBJckRBIG9wdGlvbnMKLSMKLUNPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15Ci1DT05GSUdfSVJEQV9GQVNUX1JSPXkKLSMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0KLSMKLSMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAotIwotCi0jCi0jIEZJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lSREEgaXMgbm90IHNldAotQ09ORklHX1NJR01BVEVMX0ZJUj1tCi0jIENPTkZJR19WTFNJX0ZJUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlQ9bQotQ09ORklHX0JUX0wyQ0FQPW0KLUNPTkZJR19CVF9TQ089bQotQ09ORklHX0JUX1JGQ09NTT1tCi1DT05GSUdfQlRfUkZDT01NX1RUWT15Ci1DT05GSUdfQlRfQk5FUD1tCi1DT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQotQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKLUNPTkZJR19CVF9DTVRQPW0KLUNPTkZJR19CVF9ISURQPW0KLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19CVF9IQ0lVU0I9bQotQ09ORklHX0JUX0hDSVVTQl9TQ089eQotQ09ORklHX0JUX0hDSVVBUlQ9bQotQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQotQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15Ci1DT05GSUdfQlRfSENJVUFSVF9CQ1NQX1RYQ1JDPXkKLUNPTkZJR19CVF9IQ0lCQ00yMDNYPW0KLUNPTkZJR19CVF9IQ0lCUEExMFg9bQotQ09ORklHX0JUX0hDSUJGVVNCPW0KLUNPTkZJR19CVF9IQ0lWSENJPW0KIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCi1DT05GSUdfQk9ORElORz1tCi1DT05GSUdfRVFVQUxJWkVSPW0KLUNPTkZJR19UVU49bQotIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIwogIyBBUkNuZXQgZGV2aWNlcwpAQCAtODcwLDg2ICs0ODEsNzMgQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPW0KLUNPTkZJR19TVU5MQU5DRT15Ci1DT05GSUdfSEFQUFlNRUFMPXkKLUNPTkZJR19TVU5CTUFDPW0KLUNPTkZJR19TVU5RRT1tCi1DT05GSUdfU1VOR0VNPXkKLUNPTkZJR19ORVRfVkVORE9SXzNDT009eQotQ09ORklHX1ZPUlRFWD1tCi1DT05GSUdfVFlQSE9PTj1tCisjIENPTkZJR19TVU5MQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOQk1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5RRSBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorQ09ORklHX0NBU1NJTkk9bQorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVF9UVUxJUD15Ci1DT05GSUdfREUyMTA0WD1tCi1DT05GSUdfVFVMSVA9bQotIyBDT05GSUdfVFVMSVBfTVdJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTElQX01NSU8gaXMgbm90IHNldAotQ09ORklHX1RVTElQX05BUEk9eQotQ09ORklHX1RVTElQX05BUElfSFdfTUlUSUdBVElPTj15Ci1DT05GSUdfREU0WDU9bQotQ09ORklHX1dJTkJPTkRfODQwPW0KLSMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotQ09ORklHX1BDTkVUMzI9bQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfQURBUFRFQ19TVEFSRklSRT1tCi1DT05GSUdfQURBUFRFQ19TVEFSRklSRV9OQVBJPXkKLUNPTkZJR19CNDQ9bQotQ09ORklHX0ZPUkNFREVUSD1tCi1DT05GSUdfREdSUz1tCi1DT05GSUdfRUVQUk8xMDA9bQotQ09ORklHX0UxMDA9bQotQ09ORklHX0ZFQUxOWD1tCi1DT05GSUdfTkFUU0VNST1tCi1DT05GSUdfTkUyS19QQ0k9bQorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotQ09ORklHXzgxMzlUT089bQotIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKLUNPTkZJR19TSVM5MDA9bQotQ09ORklHX0VQSUMxMDA9bQotQ09ORklHX1NVTkRBTkNFPW0KLUNPTkZJR19TVU5EQU5DRV9NTUlPPXkKLUNPTkZJR19WSUFfUkhJTkU9bQotIyBDT05GSUdfVklBX1JISU5FX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCiAjCi1DT05GSUdfQUNFTklDPW0KLSMgQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0kgaXMgbm90IHNldAotQ09ORklHX0RMMks9bQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPW0KIENPTkZJR19FMTAwMF9OQVBJPXkKLUNPTkZJR19NWVJJX1NCVVM9bQotQ09ORklHX05TODM4MjA9bQotQ09ORklHX0hBTUFDSEk9bQotQ09ORklHX1lFTExPV0ZJTj1tCi1DT05GSUdfUjgxNjk9bQotQ09ORklHX1I4MTY5X05BUEk9eQotQ09ORklHX1I4MTY5X1ZMQU49eQotQ09ORklHX1NLOThMSU49bQotQ09ORklHX1ZJQV9WRUxPQ0lUWT1tCisjIENPTkZJR19NWVJJX1NCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9bQorQ09ORklHX0JOWDI9bQogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwotQ09ORklHX0lYR0I9bQotQ09ORklHX0lYR0JfTkFQST15Ci1DT05GSUdfUzJJTz1tCi1DT05GSUdfUzJJT19OQVBJPXkKLUNPTkZJR18yQlVGRl9NT0RFPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTk1OSwxNDAgKzU1NywzMSBAQAogIwogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKLUNPTkZJR19ORVRfUkFESU89eQotCi0jCi0jIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCi0jCi0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKLSMKLUNPTkZJR19IRVJNRVM9bQotQ09ORklHX1BMWF9IRVJNRVM9bQotQ09ORklHX1RNRF9IRVJNRVM9bQotQ09ORklHX1BDSV9IRVJNRVM9bQotQ09ORklHX0FUTUVMPW0KLUNPTkZJR19QQ0lfQVRNRUw9bQotCi0jCi0jIFByaXNtIEdUL0R1ZXR0ZSA4MDIuMTEoYS9iL2cpIFBDSS9DYXJkYnVzIHN1cHBvcnQKLSMKLUNPTkZJR19QUklTTTU0PW0KLUNPTkZJR19ORVRfV0lSRUxFU1M9eQorIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKIAogIwogIyBXYW4gaW50ZXJmYWNlcwogIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLQotIwotIyBBVE0gZHJpdmVycwotIwotQ09ORklHX0FUTV9UQ1A9bQotIyBDT05GSUdfQVRNX0xBTkFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKLUNPTkZJR19BVE1fRk9SRTIwMEVfTUFZQkU9bQotQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0E9eQotQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0FfREVGQVVMVF9GVz15Ci1DT05GSUdfQVRNX0ZPUkUyMDBFX1NCQT15Ci1DT05GSUdfQVRNX0ZPUkUyMDBFX1NCQV9ERUZBVUxUX0ZXPXkKLUNPTkZJR19BVE1fRk9SRTIwMEVfVVNFX1RBU0tMRVQ9eQotQ09ORklHX0FUTV9GT1JFMjAwRV9UWF9SRVRSWT0xNgotQ09ORklHX0FUTV9GT1JFMjAwRV9ERUJVRz0wCi1DT05GSUdfQVRNX0ZPUkUyMDBFPW0KLUNPTkZJR19BVE1fSEU9bQotQ09ORklHX0FUTV9IRV9VU0VfU1VOST15Ci1DT05GSUdfRkREST15Ci0jIENPTkZJR19ERUZYWCBpcyBub3Qgc2V0Ci1DT05GSUdfU0tGUD1tCi1DT05GSUdfSElQUEk9eQotIyBDT05GSUdfUk9BRFJVTk5FUiBpcyBub3Qgc2V0Ci1DT05GSUdfUExJUD1tCi1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLUNPTkZJR19QUFBfRklMVEVSPXkKLUNPTkZJR19QUFBfQVNZTkM9bQotQ09ORklHX1BQUF9TWU5DX1RUWT1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLUNPTkZJR19QUFBPRT1tCi1DT05GSUdfUFBQT0FUTT1tCi1DT05GSUdfU0xJUD1tCi1DT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKLUNPTkZJR19TTElQX1NNQVJUPXkKLSMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0ZDPXkKLUNPTkZJR19TSEFQRVI9bQotQ09ORklHX05FVENPTlNPTEU9bQorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQogIwotQ09ORklHX0lTRE49bQotCi0jCi0jIE9sZCBJU0RONExpbnV4Ci0jCi0jIENPTkZJR19JU0ROX0k0TCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0FQSSBzdWJzeXN0ZW0KLSMKLUNPTkZJR19JU0ROX0NBUEk9bQotIyBDT05GSUdfSVNETl9EUlZfQVZNQjFfVkVSQk9TRV9SRUFTT04gaXMgbm90IHNldAotIyBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgaXMgbm90IHNldAotQ09ORklHX0lTRE5fQ0FQSV9DQVBJMjA9bQotCi0jCi0jIENBUEkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIEFjdGl2ZSBBVk0gY2FyZHMKLSMKLUNPTkZJR19DQVBJX0FWTT15Ci1DT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ0k9bQotQ09ORklHX0lTRE5fRFJWX0FWTUIxX0IxUENJVjQ9eQotQ09ORklHX0lTRE5fRFJWX0FWTUIxX0IxUENNQ0lBPW0KLUNPTkZJR19JU0ROX0RSVl9BVk1CMV9UMVBDST1tCi1DT05GSUdfSVNETl9EUlZfQVZNQjFfQzQ9bQotCi0jCi0jIEFjdGl2ZSBFaWNvbiBESVZBIFNlcnZlciBjYXJkcwotIwotQ09ORklHX0NBUElfRUlDT049eQotQ09ORklHX0lTRE5fRElWQVM9bQotQ09ORklHX0lTRE5fRElWQVNfQlJJUENJPXkKLUNPTkZJR19JU0ROX0RJVkFTX1BSSVBDST15Ci1DT05GSUdfSVNETl9ESVZBU19ESVZBQ0FQST1tCi1DT05GSUdfSVNETl9ESVZBU19VU0VSSURJPW0KLUNPTkZJR19JU0ROX0RJVkFTX01BSU5UPW0KKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogCiAjCiAjIFRlbGVwaG9ueSBTdXBwb3J0CiAjCi1DT05GSUdfUEhPTkU9bQotQ09ORklHX1BIT05FX0lYSj1tCi0KLSMKLSMgVW5peDk4IFBUWSBzdXBwb3J0Ci0jCi1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX1VOSVg5OF9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgWEZyZWU4NiBEUkkgc3VwcG9ydAotIwotQ09ORklHX0RSTT15Ci1DT05GSUdfRFJNX1RERlg9bQotIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC0xMTEyLDI2ICs2MDEsNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi1DT05GSUdfR0FNRVBPUlQ9bQotQ09ORklHX1NPVU5EX0dBTUVQT1JUPW0KLSMgQ09ORklHX0dBTUVQT1JUX05TNTU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUX0w0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfVk9SVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUX0ZNODAxIGlzIG5vdCBzZXQKLUNPTkZJR19HQU1FUE9SVF9DUzQ2MVg9bQotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUENJUFMyPW0KLUNPTkZJR19TRVJJT19MSUJQUzI9eQotQ09ORklHX1NFUklPX1JBVz1tCi0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CkBAIC0xMTQzLDcgKzYxMiw3IEBACiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiBDT05GSUdfTU9VU0VfU0VSSUFMPXkKLUNPTkZJR19NT1VTRV9WU1hYWEFBPW0KKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQpAQCAtMTE1MSw0MDYgKzYyMCwyNTAgQEAKICMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1BDSVBTMj1tCitDT05GSUdfU0VSSU9fTElCUFMyPXkKK0NPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU1VOQ09SRT15CisjIENPTkZJR19TRVJJQUxfU1VOWklMT0cgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9TVU5TVT15CitDT05GSUdfU0VSSUFMX1NVTlNVX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9TVU5TQUI9bQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfUlRDPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIwogIyBJMkMgc3VwcG9ydAogIwogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9bQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogCiAjCiAjIEkyQyBBbGdvcml0aG1zCiAjCiBDT05GSUdfSTJDX0FMR09CSVQ9eQotQ09ORklHX0kyQ19BTEdPUENGPW0KLUNPTkZJR19JMkNfQUxHT1BDQT1tCisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX0FMSTE1MzU9bQotQ09ORklHX0kyQ19BTEkxNTYzPW0KLUNPTkZJR19JMkNfQUxJMTVYMz1tCi1DT05GSUdfSTJDX0FNRDc1Nj1tCi0jIENPTkZJR19JMkNfQU1ENzU2X1M0ODgyIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfQU1EODExMT1tCi1DT05GSUdfSTJDX0k4MDE9bQotQ09ORklHX0kyQ19JODEwPW0KLUNPTkZJR19JMkNfSVNBPW0KLUNPTkZJR19JMkNfTkZPUkNFMj1tCi1DT05GSUdfSTJDX1BBUlBPUlQ9bQotQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUPW0KLUNPTkZJR19JMkNfUElJWDQ9bQotQ09ORklHX0kyQ19QUk9TQVZBR0U9bQotQ09ORklHX0kyQ19TQVZBR0U0PW0KLUNPTkZJR19TQ3gyMDBfQUNCPW0KLUNPTkZJR19JMkNfU0lTNTU5NT1tCi1DT05GSUdfSTJDX1NJUzYzMD1tCi1DT05GSUdfSTJDX1NJUzk2WD1tCi1DT05GSUdfSTJDX1NUVUI9bQotQ09ORklHX0kyQ19WSUE9bQotQ09ORklHX0kyQ19WSUFQUk89bQotQ09ORklHX0kyQ19WT09ET08zPW0KLUNPTkZJR19JMkNfUENBX0lTQT1tCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX1NFTlNPUj1tCi1DT05GSUdfU0VOU09SU19BRE0xMDIxPW0KLUNPTkZJR19TRU5TT1JTX0FETTEwMjU9bQotQ09ORklHX1NFTlNPUlNfQURNMTAyNj1tCi1DT05GSUdfU0VOU09SU19BRE0xMDMxPW0KLUNPTkZJR19TRU5TT1JTX0FTQjEwMD1tCi1DT05GSUdfU0VOU09SU19EUzE2MjE9bQotQ09ORklHX1NFTlNPUlNfRlNDSEVSPW0KLUNPTkZJR19TRU5TT1JTX0ZTQ1BPUz1tCi1DT05GSUdfU0VOU09SU19HTDUxOFNNPW0KLUNPTkZJR19TRU5TT1JTX0dMNTIwU009bQotQ09ORklHX1NFTlNPUlNfSVQ4Nz1tCi1DT05GSUdfU0VOU09SU19MTTYzPW0KLUNPTkZJR19TRU5TT1JTX0xNNzU9bQotQ09ORklHX1NFTlNPUlNfTE03Nz1tCi1DT05GSUdfU0VOU09SU19MTTc4PW0KLUNPTkZJR19TRU5TT1JTX0xNODA9bQotQ09ORklHX1NFTlNPUlNfTE04Mz1tCi1DT05GSUdfU0VOU09SU19MTTg1PW0KLUNPTkZJR19TRU5TT1JTX0xNODc9bQotQ09ORklHX1NFTlNPUlNfTE05MD1tCi1DT05GSUdfU0VOU09SU19NQVgxNjE5PW0KLUNPTkZJR19TRU5TT1JTX1BDODczNjA9bQotQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5Nz1tCi1DT05GSUdfU0VOU09SU19TSVM1NTk1PW0KLUNPTkZJR19TRU5TT1JTX1NNU0M0N00xPW0KLUNPTkZJR19TRU5TT1JTX1ZJQTY4NkE9bQotQ09ORklHX1NFTlNPUlNfVzgzNzgxRD1tCi1DT05GSUdfU0VOU09SU19XODNMNzg1VFM9bQotQ09ORklHX1NFTlNPUlNfVzgzNjI3SEY9bQotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLUNPTkZJR19TRU5TT1JTX0VFUFJPTT1tCi1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KLUNPTkZJR19TRU5TT1JTX1BDRjg1OTE9bQotQ09ORklHX1NFTlNPUlNfUlRDODU2ND1tCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgRmlsZSBzeXN0ZW1zCisjIERhbGxhcydzIDEtd2lyZSBidXMKICMKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGU19GUz1tCi1DT05GSUdfSkZTX1BPU0lYX0FDTD15Ci1DT05GSUdfSkZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwotIyBYRlMgc3VwcG9ydAorIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKICMKLUNPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKLUNPTkZJR19YRlNfUVVPVEE9eQotQ09ORklHX1hGU19TRUNVUklUWT15Ci1DT05GSUdfWEZTX1BPU0lYX0FDTD15Ci1DT05GSUdfTUlOSVhfRlM9bQotQ09ORklHX1JPTUZTX0ZTPW0KLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMgTWlzYyBkZXZpY2VzCiAjCi1DT05GSUdfSVNPOTY2MF9GUz1tCi1DT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKIAogIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwogIwotQ09ORklHX0ZBVF9GUz1tCi1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLUNPTkZJR19ERVZGU19NT1VOVD15Ci0jIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUFRTX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0RFVlBUU19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1hBVFRSPXkKLUNPTkZJR19UTVBGU19TRUNVUklUWT15Ci1DT05GSUdfSFVHRVRMQkZTPXkKLUNPTkZJR19IVUdFVExCX1BBR0U9eQotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfQURGU19GUz1tCi0jIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKLUNPTkZJR19BRkZTX0ZTPW0KLUNPTkZJR19IRlNfRlM9bQotQ09ORklHX0hGU1BMVVNfRlM9bQotQ09ORklHX0JFRlNfRlM9bQotIyBDT05GSUdfQkVGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQkZTX0ZTPW0KLUNPTkZJR19FRlNfRlM9bQotQ09ORklHX0NSQU1GUz1tCi1DT05GSUdfVlhGU19GUz1tCi1DT05GSUdfSFBGU19GUz1tCi1DT05GSUdfUU5YNEZTX0ZTPW0KLUNPTkZJR19TWVNWX0ZTPW0KLUNPTkZJR19VRlNfRlM9bQotQ09ORklHX1VGU19GU19XUklURT15Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLUNPTkZJR19ORlNfRlM9bQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjM9eQotQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX05GU0RfVENQPXkKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCi1DT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCi1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotQ09ORklHX05DUF9GUz1tCi0jIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19ORlNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfT1MyX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAotQ09ORklHX0NPREFfRlM9bQotIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKLUNPTkZJR19BRlNfRlM9bQotQ09ORklHX1JYUlBDPW0KLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19TVU5fUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KLUNPTkZJR19OTFNfSVNPODg1OV84PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQotQ09ORklHX05MU19BU0NJST1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTM9bQotQ09ORklHX05MU19JU084ODU5XzE0PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xNT1tCi1DT05GSUdfTkxTX0tPSThfUj1tCi1DT05GSUdfTkxTX0tPSThfVT1tCi1DT05GSUdfTkxTX1VURjg9bQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwotQ09ORklHX1ZJREVPX0RFVj15Ci0KLSMKLSMgVmlkZW8gRm9yIExpbnV4Ci0jCi0KLSMKLSMgVmlkZW8gQWRhcHRlcnMKLSMKLUNPTkZJR19WSURFT19CVDg0OD1tCi1DT05GSUdfVklERU9fQldRQ0FNPW0KLUNPTkZJR19WSURFT19DUUNBTT1tCi1DT05GSUdfVklERU9fVzk5NjY9bQotQ09ORklHX1ZJREVPX0NQSUE9bQotQ09ORklHX1ZJREVPX0NQSUFfUFA9bQotQ09ORklHX1ZJREVPX0NQSUFfVVNCPW0KLUNPTkZJR19WSURFT19TQUE1MjQ2QT1tCi1DT05GSUdfVklERU9fU0FBNTI0OT1tCi1DT05GSUdfVFVORVJfMzAzNj1tCi0jIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1pPUkFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01YQj1tCi1DT05GSUdfVklERU9fRFBDPW0KLUNPTkZJR19WSURFT19IRVhJVU1fT1JJT049bQotQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkk9bQotQ09ORklHX1ZJREVPX0NYODg9bQotQ09ORklHX1ZJREVPX09WQ0FNQ0hJUD1tCi0KLSMKLSMgUmFkaW8gQWRhcHRlcnMKLSMKLUNPTkZJR19SQURJT19HRU1URUtfUENJPW0KLUNPTkZJR19SQURJT19NQVhJUkFESU89bQotQ09ORklHX1JBRElPX01BRVNUUk89bQorIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCi1DT05GSUdfRFZCPXkKLUNPTkZJR19EVkJfQ09SRT1tCisjIENPTkZJR19EVkIgaXMgbm90IHNldAogCiAjCi0jIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycworIyBHcmFwaGljcyBzdXBwb3J0CiAjCi1DT05GSUdfRFZCX0FWNzExMD1tCi0jIENPTkZJR19EVkJfQVY3MTEwX09TRCBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0JVREdFVD1tCi1DT05GSUdfRFZCX0JVREdFVF9DST1tCi1DT05GSUdfRFZCX0JVREdFVF9BVj1tCi1DT05GSUdfRFZCX0JVREdFVF9QQVRDSD1tCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NCVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAorQ09ORklHX0ZCX1JBREVPTj15CitDT05GSUdfRkJfUkFERU9OX0kyQz15CisjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCi0jIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi0jIENPTkZJR19EVkJfVFRVU0JfQlVER0VUIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfVFRVU0JfREVDPW0KLUNPTkZJR19EVkJfRElCVVNCPW0KLSMgQ09ORklHX0RWQl9ESUJVU0JfTUlTREVTSUdORURfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0RJQkNPTV9ERUJVRz15Ci1DT05GSUdfRFZCX0NJTkVSR1lUMj1tCi0jIENPTkZJR19EVkJfQ0lORVJHWVQyX1RVTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9NX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorQ09ORklHX0ZPTlRfU1VOOHgxNj15CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogCiAjCi0jIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjIExvZ28gY29uZmlndXJhdGlvbgogIwotQ09ORklHX0RWQl9CMkMyX1NLWVNUQVI9bQotQ09ORklHX0RWQl9CMkMyX1VTQj1tCi0KLSMKLSMgU3VwcG9ydGVkIEJUODc4IEFkYXB0ZXJzCi0jCi1DT05GSUdfRFZCX0JUOFhYPW0KLQotIwotIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcwotIwotCi0jCi0jIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCi0jCi0KLSMKLSMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX1NUVjAyOTk9bQotQ09ORklHX0RWQl9DWDI0MTEwPW0KLUNPTkZJR19EVkJfVERBODA4Mz1tCi1DT05GSUdfRFZCX1REQTgwWFg9bQotQ09ORklHX0RWQl9NVDMxMj1tCi1DT05GSUdfRFZCX1ZFUzFYOTM9bQotCi0jCi0jIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX1NQODg3MD1tCi1DT05GSUdfRFZCX1NQODg3WD1tCi1DT05GSUdfRFZCX0NYMjI3MDA9bQotQ09ORklHX0RWQl9DWDIyNzAyPW0KLUNPTkZJR19EVkJfTDY0NzgxPW0KLUNPTkZJR19EVkJfVERBMTAwNFg9bQotQ09ORklHX0RWQl9OWFQ2MDAwPW0KLUNPTkZJR19EVkJfTVQzNTI9bQotQ09ORklHX0RWQl9ESUIzMDAwTUI9bQotQ09ORklHX0RWQl9ESUIzMDAwTUM9bQotCi0jCi0jIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX0FUTUVMX0FUNzZDNjUxPW0KLUNPTkZJR19EVkJfVkVTMTgyMD1tCi1DT05GSUdfRFZCX1REQTEwMDIxPW0KLUNPTkZJR19EVkJfU1RWMDI5Nz1tCi0KLSMKLSMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RlcmlhbCBEVFYpIGZyb250ZW5kcwotIwotQ09ORklHX0RWQl9OWFQyMDAyPW0KLUNPTkZJR19WSURFT19TQUE3MTQ2PW0KLUNPTkZJR19WSURFT19TQUE3MTQ2X1ZWPW0KLUNPTkZJR19WSURFT19WSURFT0JVRj1tCi1DT05GSUdfVklERU9fVFVORVI9bQotQ09ORklHX1ZJREVPX0JVRj1tCi1DT05GSUdfVklERU9fQlRDWD1tCi1DT05GSUdfVklERU9fSVI9bQotQ09ORklHX1ZJREVPX1RWRUVQUk9NPW0KK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19TVU5fQ0xVVDIyND15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC0xNTYzLDcgKzg3Niw2IEBACiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQotQ09ORklHX1NORF9IV0RFUD1tCiBDT05GSUdfU05EX1JBV01JREk9bQogQ09ORklHX1NORF9TRVFVRU5DRVI9bQogQ09ORklHX1NORF9TRVFfRFVNTVk9bQpAQCAtMTU3MSw4ICs4ODMsOSBAQAogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci1DT05GSUdfU05EX0JJVDMyX0VNVUw9bQogIyBDT05GSUdfU05EX1JUQ1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTU4MCw1OSArODkzLDU4IEBACiAjIEdlbmVyaWMgZGV2aWNlcwogIwogQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCi1DT05GSUdfU05EX09QTDNfTElCPW0KLUNPTkZJR19TTkRfVlhfTElCPW0KK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCitDT05GSUdfU05EX0FDOTdfQlVTPW0KIENPTkZJR19TTkRfRFVNTVk9bQogQ09ORklHX1NORF9WSVJNSURJPW0KLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CitDT05GSUdfU05EX01UUEFWPW0KICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAogCiAjCiAjIFBDSSBkZXZpY2VzCiAjCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FMSTU0NTE9bQotQ09ORklHX1NORF9BVElJWFA9bQotQ09ORklHX1NORF9BVElJWFBfTU9ERU09bQotQ09ORklHX1NORF9BVTg4MTA9bQotQ09ORklHX1NORF9BVTg4MjA9bQotQ09ORklHX1NORF9BVTg4MzA9bQotQ09ORklHX1NORF9BWlQzMzI4PW0KLUNPTkZJR19TTkRfQlQ4N1g9bQotIyBDT05GSUdfU05EX0JUODdYX09WRVJDTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0NTNDZYWD1tCi0jIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AgaXMgbm90IHNldAotQ09ORklHX1NORF9DUzQyODE9bQotQ09ORklHX1NORF9FTVUxMEsxPW0KLUNPTkZJR19TTkRfRU1VMTBLMVg9bQotQ09ORklHX1NORF9DQTAxMDY9bQotQ09ORklHX1NORF9LT1JHMTIxMj1tCi1DT05GSUdfU05EX01JWEFSVD1tCi1DT05GSUdfU05EX05NMjU2PW0KKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVFJJREVOVD1tCi1DT05GSUdfU05EX1lNRlBDST1tCi1DT05GSUdfU05EX0FMUzQwMDA9bQotQ09ORklHX1NORF9DTUlQQ0k9bQotQ09ORklHX1NORF9FTlMxMzcwPW0KLUNPTkZJR19TTkRfRU5TMTM3MT1tCi1DT05GSUdfU05EX0VTMTkzOD1tCi1DT05GSUdfU05EX0VTMTk2OD1tCi1DT05GSUdfU05EX01BRVNUUk8zPW0KLUNPTkZJR19TTkRfRk04MDE9bQotQ09ORklHX1NORF9GTTgwMV9URUE1NzVYPW0KLUNPTkZJR19TTkRfSUNFMTcxMj1tCi0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0lOVEVMOFgwPW0KLUNPTkZJR19TTkRfSU5URUw4WDBNPW0KLUNPTkZJR19TTkRfU09OSUNWSUJFUz1tCisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZJQTgyWFhfTU9ERU09bQotQ09ORklHX1NORF9WWDIyMj1tCisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIGRldmljZXMKQEAgLTE2NDIsMTIgKzk1NCwyMCBAQAogIwogIyBBTFNBIFNwYXJjIGRldmljZXMKICMKLUNPTkZJR19TTkRfU1VOX0FNRDc5MzA9bQorIyBDT05GSUdfU05EX1NVTl9BTUQ3OTMwIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VOX0NTNDIzMT1tCisjIENPTkZJR19TTkRfU1VOX0RCUkkgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKICMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTE2NTgsOCArOTc4LDYgQEAKICMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKQEAgLTE2NjcsMzYgKzk4NSwyOSBAQAogQ09ORklHX1VTQl9FSENJX0hDRD1tCiAjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPW0KLUNPTkZJR19VU0JfU0w4MTFfSENEPW0KKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX09CU09MRVRFX09TU19VU0JfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogCiAjCi0jIFVTQiBCbHVldG9vdGggVFRZIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBkaXNhYmxlZCBCbHVldG9vdGggc3Vic3lzdGVtCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKLSMgQ09ORklHX1VTQl9NSURJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQUNNPW0KLUNPTkZJR19VU0JfUFJJTlRFUj1tCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKLUNPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfUldfREVURUNUPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQotQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfSFA4MjAwZT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwpAQCAtMTcwNiwxMzUgKzEwMTcsNzUgQEAKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfV0FDT009bQotQ09ORklHX1VTQl9LQlRBQj1tCisjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01UT1VDSD1tCi1DT05GSUdfVVNCX0VHQUxBWD1tCisjIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQVRJX1JFTU9URT1tCisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiAjCi1DT05GSUdfVVNCX01EQzgwMD1tCi1DT05GSUdfVVNCX01JQ1JPVEVLPW0KKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1Y1MTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU045QzEwMj1tCi0jIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVzk5NjhDRj1tCisKKyMKKyMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0CisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLUNPTkZJR19VU0JfQ0FUQz1tCi1DT05GSUdfVVNCX0tBV0VUSD1tCi1DT05GSUdfVVNCX1BFR0FTVVM9bQotQ09ORklHX1VTQl9SVEw4MTUwPW0KLUNPTkZJR19VU0JfVVNCTkVUPW0KLQotIwotIyBVU0IgSG9zdC10by1Ib3N0IENhYmxlcwotIwotQ09ORklHX1VTQl9BTElfTTU2MzI9eQotQ09ORklHX1VTQl9BTjI3MjA9eQotQ09ORklHX1VTQl9CRUxLSU49eQotQ09ORklHX1VTQl9HRU5FU1lTPXkKLUNPTkZJR19VU0JfTkVUMTA4MD15Ci1DT05GSUdfVVNCX1BMMjMwMT15Ci1DT05GSUdfVVNCX0tDMjE5MD15Ci0KLSMKLSMgSW50ZWxsaWdlbnQgVVNCIERldmljZXMvR2FkZ2V0cwotIwotQ09ORklHX1VTQl9BUk1MSU5VWD15Ci1DT05GSUdfVVNCX0VQU09OMjg4OD15Ci1DT05GSUdfVVNCX1pBVVJVUz15Ci1DT05GSUdfVVNCX0NEQ0VUSEVSPXkKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotQ09ORklHX1VTQl9BWDg4MTdYPXkKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi1DT05GSUdfVVNCX1VTUzcyMD1tCiAKICMKICMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAogIwotQ09ORklHX1VTQl9TRVJJQUw9bQotQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15Ci1DT05GSUdfVVNCX1NFUklBTF9CRUxLSU49bQotQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KLUNPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQotQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQotQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQotIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAotQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NFUklBTF9HQVJNSU49bQotQ09ORklHX1VTQl9TRVJJQUxfSVBXPW0KLUNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KLUNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQotQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NFUklBTF9UST1tCi1DT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQotQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KLUNPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQotQ09ORklHX1VTQl9FWlVTQj15CisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCiAjCi1DT05GSUdfVVNCX0VNSTYyPW0KLUNPTkZJR19VU0JfRU1JMjY9bQotQ09ORklHX1VTQl9BVUVSU1dBTEQ9bQotQ09ORklHX1VTQl9SSU81MDA9bQotQ09ORklHX1VTQl9MRUdPVE9XRVI9bQotQ09ORklHX1VTQl9MQ0Q9bQotQ09ORklHX1VTQl9MRUQ9bQotQ09ORklHX1VTQl9DWVRIRVJNPW0KLUNPTkZJR19VU0JfUEhJREdFVEtJVD1tCi1DT05GSUdfVVNCX1BISURHRVRTRVJWTz1tCi1DT05GSUdfVVNCX0lETU9VU0U9bQotQ09ORklHX1VTQl9URVNUPW0KKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIFVTQiBBVE0vRFNMIGRyaXZlcnMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CiAjCi1DT05GSUdfVVNCX0FUTT1tCi1DT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQogCiAjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydApAQCAtMTg0Miw1MCArMTA5MywxODUgQEAKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCi1DT05GSUdfSU5GSU5JQkFORD1tCi1DT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCi0jIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgV2F0Y2hkb2cgQ2FyZHMKKyMgU04gRGV2aWNlcwogIwotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIAogIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIyBNaXNjIExpbnV4L1NQQVJDIGRyaXZlcnMKICMKLUNPTkZJR19TT0ZUX1dBVENIRE9HPW0KLUNPTkZJR19XQVRDSERPR19DUDFYWFg9bQotQ09ORklHX1dBVENIRE9HX1JJTz1tCitDT05GSUdfU1VOX09QRU5QUk9NSU89bQorQ09ORklHX1NVTl9NT1NURUtfUlRDPXkKKyMgQ09ORklHX09CUF9GTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fQlBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JCQ19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfRU5WQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNQTEFZN1NFRyBpcyBub3Qgc2V0CiAKICMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjIEZpYnJlIENoYW5uZWwgc3VwcG9ydAogIwotQ09ORklHX1BDSVBDV0FUQ0hET0c9bQotQ09ORklHX1dEVFBDST1tCi1DT05GSUdfV0RUXzUwMV9QQ0k9eQorIyBDT05GSUdfRkM0IGlzIG5vdCBzZXQKIAogIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMgRmlsZSBzeXN0ZW1zCiAjCi1DT05GSUdfVVNCUENXQVRDSERPRz1tCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwotIyBQcm9maWxpbmcgc3VwcG9ydAorIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKK0NPTkZJR19SQU1GUz15CitDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfU1VOX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKICMKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19LUFJPQkVTPXkKIAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1BSSU5US19USU1FPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE4CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogQ09ORklHX1NDSEVEU1RBVFM9eQogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xODk0LDEyICsxMjgwLDEzIEBACiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19LUFJPQkVTPXkKICMgQ09ORklHX0RFQlVHX0RDRkxVU0ggaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9ERUNfTE9DSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE5NDUsNiArMTMzMiw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkMzMj15CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDExYTg0ODQuLjcxMDAwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKQEAgLTE2NTcsMTMgKzE2NTcsMTAgQEAKIAkvKiBDaGVjayBpZiBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkKIAkgKiB3YXMgaW52b2tlZC4KIAkgKi8KLQlsZHViCQlbJWN1cnB0ciArIFRJX1NZU19OT0VSUk9SXSwgJWwwCi0JYnJ6LHB0CQklbDAsIDFmCi0JIG5vcAotCWJhLHB0CQkleGNjLCA4MGYKKwlsZHViICAgICAgICAgICAgWyVjdXJwdHIgKyBUSV9TWVNfTk9FUlJPUl0sICVsMgorCWJybnosYSxwbiAgICAgICAlbDIsIDgwZgogCSBzdGIJCSVnMCwgWyVjdXJwdHIgKyBUSV9TWVNfTk9FUlJPUl0KIAotMToKIAljbXAJCSVvMCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSwogCWJnZXUscG4JCSV4Y2MsIDFmCiAJIGFuZGNjCQklbDAsIChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9BVURJVCksICVsNgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jCmluZGV4IDllODM2MmUuLjMwYmNhZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2VidXMuaD4KQEAgLTcwLDYgKzcxLDkgQEAKIAltYWNoaW5lX2hhbHQoKTsKIH0KIAordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBtYWNoaW5lX3Bvd2VyX29mZjsKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKKwogI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbnQgcG93ZXJkKHZvaWQgKl9fdW51c2VkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy5jIGIvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy5jCmluZGV4IGFjZmRhYTIuLmZiMWI5NjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2NyeXB0by9hZXMuYworKysgYi9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMKQEAgLTc0LDggKzc0LDYgQEAKIAlyZXR1cm4geCA+PiAobiA8PCAzKTsKIH0KIAotI2RlZmluZSB1MzJfaW4oeCkgbGUzMl90b19jcHUoKihjb25zdCBfX2xlMzIgKikoeCkpCi0KIHN0cnVjdCBhZXNfY3R4CiB7CiAJdTMyIGtleV9sZW5ndGg7CkBAIC0yMzQsNiArMjMyLDcgQEAKIAkJICAgICAgIHUzMiAqZmxhZ3MpCiB7CiAJc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OwogCXUzMiBpLCBqLCB0LCB1LCB2LCB3OwogCiAJaWYgKGtleV9sZW4gIT0gMTYgJiYga2V5X2xlbiAhPSAyNCAmJiBrZXlfbGVuICE9IDMyKSB7CkBAIC0yNDMsMTAgKzI0MiwxMCBAQAogCiAJY3R4LT5rZXlfbGVuZ3RoID0ga2V5X2xlbjsKIAotCURfS0VZW2tleV9sZW4gKyAyNF0gPSBFX0tFWVswXSA9IHUzMl9pbihpbl9rZXkpOwotCURfS0VZW2tleV9sZW4gKyAyNV0gPSBFX0tFWVsxXSA9IHUzMl9pbihpbl9rZXkgKyA0KTsKLQlEX0tFWVtrZXlfbGVuICsgMjZdID0gRV9LRVlbMl0gPSB1MzJfaW4oaW5fa2V5ICsgOCk7Ci0JRF9LRVlba2V5X2xlbiArIDI3XSA9IEVfS0VZWzNdID0gdTMyX2luKGluX2tleSArIDEyKTsKKwlEX0tFWVtrZXlfbGVuICsgMjRdID0gRV9LRVlbMF0gPSBsZTMyX3RvX2NwdShrZXlbMF0pOworCURfS0VZW2tleV9sZW4gKyAyNV0gPSBFX0tFWVsxXSA9IGxlMzJfdG9fY3B1KGtleVsxXSk7CisJRF9LRVlba2V5X2xlbiArIDI2XSA9IEVfS0VZWzJdID0gbGUzMl90b19jcHUoa2V5WzJdKTsKKwlEX0tFWVtrZXlfbGVuICsgMjddID0gRV9LRVlbM10gPSBsZTMyX3RvX2NwdShrZXlbM10pOwogCiAJc3dpdGNoIChrZXlfbGVuKSB7CiAJY2FzZSAxNjoKQEAgLTI1NiwxNyArMjU1LDE3IEBACiAJCWJyZWFrOwogCiAJY2FzZSAyNDoKLQkJRV9LRVlbNF0gPSB1MzJfaW4oaW5fa2V5ICsgMTYpOwotCQl0ID0gRV9LRVlbNV0gPSB1MzJfaW4oaW5fa2V5ICsgMjApOworCQlFX0tFWVs0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7CisJCXQgPSBFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCiAJCQlsb29wNiAoaSk7CiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKLQkJRV9LRVlbNF0gPSB1MzJfaW4oaW5fa2V5ICsgMTYpOwotCQlFX0tFWVs1XSA9IHUzMl9pbihpbl9rZXkgKyAyMCk7Ci0JCUVfS0VZWzZdID0gdTMyX2luKGluX2tleSArIDI0KTsKLQkJdCA9IEVfS0VZWzddID0gdTMyX2luKGluX2tleSArIDI4KTsKKwkJRV9LRVlbNF0gPSBsZTMyX3RvX2NwdShrZXlbNF0pOworCQlFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7CisJCUVfS0VZWzZdID0gbGUzMl90b19jcHUoa2V5WzZdKTsKKwkJdCA9IEVfS0VZWzddID0gbGUzMl90b19jcHUoa2V5WzddKTsKIAkJZm9yIChpID0gMDsgaSA8IDc7ICsraSkKIAkJCWxvb3A4KGkpOwogCQlicmVhazsKQEAgLTI5MCw2ICsyODksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0JImFlcyIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJhZXMteDg2XzY0IiwKKwkuY3JhX3ByaW9yaXR5CQk9CTIwMCwKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JQUVTX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgYWVzX2N0eCksCmRpZmYgLS1naXQgYS9jcnlwdG8vS2NvbmZpZyBiL2NyeXB0by9LY29uZmlnCmluZGV4IDUyZTFkNDEuLmM0NDJmMmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogY29uZmlnIENSWVBUT19BRVMKIAl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIgotCWRlcGVuZHMgb24gQ1JZUFRPICYmICEoWDg2IHx8IFVNTF9YODYpCisJZGVwZW5kcyBvbiBDUllQVE8KIAloZWxwCiAJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsIAogCSAgYWxnb3JpdGhtLgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy5jIGIvY3J5cHRvL2Flcy5jCmluZGV4IDVkZjkyODguLjBhNmE1YzEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMuYworKysgYi9jcnlwdG8vYWVzLmMKQEAgLTczLDkgKzczLDYgQEAKIAlyZXR1cm4geCA+PiAobiA8PCAzKTsKIH0KIAotI2RlZmluZSB1MzJfaW4oeCkgbGUzMl90b19jcHUoKihjb25zdCB1MzIgKikoeCkpCi0jZGVmaW5lIHUzMl9vdXQodG8sIGZyb20pICgqKHUzMiAqKSh0bykgPSBjcHVfdG9fbGUzMihmcm9tKSkKLQogc3RydWN0IGFlc19jdHggewogCWludCBrZXlfbGVuZ3RoOwogCXUzMiBFWzYwXTsKQEAgLTI1Niw2ICsyNTMsNyBAQAogYWVzX3NldF9rZXkodm9pZCAqY3R4X2FyZywgY29uc3QgdTggKmluX2tleSwgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCiB7CiAJc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OwogCXUzMiBpLCB0LCB1LCB2LCB3OwogCiAJaWYgKGtleV9sZW4gIT0gMTYgJiYga2V5X2xlbiAhPSAyNCAmJiBrZXlfbGVuICE9IDMyKSB7CkBAIC0yNjUsMTAgKzI2MywxMCBAQAogCiAJY3R4LT5rZXlfbGVuZ3RoID0ga2V5X2xlbjsKIAotCUVfS0VZWzBdID0gdTMyX2luIChpbl9rZXkpOwotCUVfS0VZWzFdID0gdTMyX2luIChpbl9rZXkgKyA0KTsKLQlFX0tFWVsyXSA9IHUzMl9pbiAoaW5fa2V5ICsgOCk7Ci0JRV9LRVlbM10gPSB1MzJfaW4gKGluX2tleSArIDEyKTsKKwlFX0tFWVswXSA9IGxlMzJfdG9fY3B1KGtleVswXSk7CisJRV9LRVlbMV0gPSBsZTMyX3RvX2NwdShrZXlbMV0pOworCUVfS0VZWzJdID0gbGUzMl90b19jcHUoa2V5WzJdKTsKKwlFX0tFWVszXSA9IGxlMzJfdG9fY3B1KGtleVszXSk7CiAKIAlzd2l0Y2ggKGtleV9sZW4pIHsKIAljYXNlIDE2OgpAQCAtMjc4LDE3ICsyNzYsMTcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDI0OgotCQlFX0tFWVs0XSA9IHUzMl9pbiAoaW5fa2V5ICsgMTYpOwotCQl0ID0gRV9LRVlbNV0gPSB1MzJfaW4gKGluX2tleSArIDIwKTsKKwkJRV9LRVlbNF0gPSBsZTMyX3RvX2NwdShrZXlbNF0pOworCQl0ID0gRV9LRVlbNV0gPSBsZTMyX3RvX2NwdShrZXlbNV0pOwogCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQogCQkJbG9vcDYgKGkpOwogCQlicmVhazsKIAogCWNhc2UgMzI6Ci0JCUVfS0VZWzRdID0gdTMyX2luIChpbl9rZXkgKyAxNik7Ci0JCUVfS0VZWzVdID0gdTMyX2luIChpbl9rZXkgKyAyMCk7Ci0JCUVfS0VZWzZdID0gdTMyX2luIChpbl9rZXkgKyAyNCk7Ci0JCXQgPSBFX0tFWVs3XSA9IHUzMl9pbiAoaW5fa2V5ICsgMjgpOworCQlFX0tFWVs0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7CisJCUVfS0VZWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKTsKKwkJRV9LRVlbNl0gPSBsZTMyX3RvX2NwdShrZXlbNl0pOworCQl0ID0gRV9LRVlbN10gPSBsZTMyX3RvX2NwdShrZXlbN10pOwogCQlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQogCQkJbG9vcDggKGkpOwogCQlicmVhazsKQEAgLTMyNCwxMyArMzIyLDE1IEBACiBzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdCh2b2lkICpjdHhfYXJnLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pCiB7CiAJY29uc3Qgc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICpzcmMgPSAoY29uc3QgX19sZTMyICopaW47CisJX19sZTMyICpkc3QgPSAoX19sZTMyICopb3V0OwogCXUzMiBiMFs0XSwgYjFbNF07CiAJY29uc3QgdTMyICprcCA9IEVfS0VZICsgNDsKIAotCWIwWzBdID0gdTMyX2luIChpbikgXiBFX0tFWVswXTsKLQliMFsxXSA9IHUzMl9pbiAoaW4gKyA0KSBeIEVfS0VZWzFdOwotCWIwWzJdID0gdTMyX2luIChpbiArIDgpIF4gRV9LRVlbMl07Ci0JYjBbM10gPSB1MzJfaW4gKGluICsgMTIpIF4gRV9LRVlbM107CisJYjBbMF0gPSBsZTMyX3RvX2NwdShzcmNbMF0pIF4gRV9LRVlbMF07CisJYjBbMV0gPSBsZTMyX3RvX2NwdShzcmNbMV0pIF4gRV9LRVlbMV07CisJYjBbMl0gPSBsZTMyX3RvX2NwdShzcmNbMl0pIF4gRV9LRVlbMl07CisJYjBbM10gPSBsZTMyX3RvX2NwdShzcmNbM10pIF4gRV9LRVlbM107CiAKIAlpZiAoY3R4LT5rZXlfbGVuZ3RoID4gMjQpIHsKIAkJZl9ucm91bmQgKGIxLCBiMCwga3ApOwpAQCAtMzUzLDEwICszNTMsMTAgQEAKIAlmX25yb3VuZCAoYjEsIGIwLCBrcCk7CiAJZl9scm91bmQgKGIwLCBiMSwga3ApOwogCi0JdTMyX291dCAob3V0LCBiMFswXSk7Ci0JdTMyX291dCAob3V0ICsgNCwgYjBbMV0pOwotCXUzMl9vdXQgKG91dCArIDgsIGIwWzJdKTsKLQl1MzJfb3V0IChvdXQgKyAxMiwgYjBbM10pOworCWRzdFswXSA9IGNwdV90b19sZTMyKGIwWzBdKTsKKwlkc3RbMV0gPSBjcHVfdG9fbGUzMihiMFsxXSk7CisJZHN0WzJdID0gY3B1X3RvX2xlMzIoYjBbMl0pOworCWRzdFszXSA9IGNwdV90b19sZTMyKGIwWzNdKTsKIH0KIAogLyogZGVjcnlwdCBhIGJsb2NrIG9mIHRleHQgKi8KQEAgLTM3NywxNCArMzc3LDE2IEBACiBzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdCh2b2lkICpjdHhfYXJnLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pCiB7CiAJY29uc3Qgc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICpzcmMgPSAoY29uc3QgX19sZTMyICopaW47CisJX19sZTMyICpkc3QgPSAoX19sZTMyICopb3V0OwogCXUzMiBiMFs0XSwgYjFbNF07CiAJY29uc3QgaW50IGtleV9sZW4gPSBjdHgtPmtleV9sZW5ndGg7CiAJY29uc3QgdTMyICprcCA9IERfS0VZICsga2V5X2xlbiArIDIwOwogCi0JYjBbMF0gPSB1MzJfaW4gKGluKSBeIEVfS0VZW2tleV9sZW4gKyAyNF07Ci0JYjBbMV0gPSB1MzJfaW4gKGluICsgNCkgXiBFX0tFWVtrZXlfbGVuICsgMjVdOwotCWIwWzJdID0gdTMyX2luIChpbiArIDgpIF4gRV9LRVlba2V5X2xlbiArIDI2XTsKLQliMFszXSA9IHUzMl9pbiAoaW4gKyAxMikgXiBFX0tFWVtrZXlfbGVuICsgMjddOworCWIwWzBdID0gbGUzMl90b19jcHUoc3JjWzBdKSBeIEVfS0VZW2tleV9sZW4gKyAyNF07CisJYjBbMV0gPSBsZTMyX3RvX2NwdShzcmNbMV0pIF4gRV9LRVlba2V5X2xlbiArIDI1XTsKKwliMFsyXSA9IGxlMzJfdG9fY3B1KHNyY1syXSkgXiBFX0tFWVtrZXlfbGVuICsgMjZdOworCWIwWzNdID0gbGUzMl90b19jcHUoc3JjWzNdKSBeIEVfS0VZW2tleV9sZW4gKyAyN107CiAKIAlpZiAoa2V5X2xlbiA+IDI0KSB7CiAJCWlfbnJvdW5kIChiMSwgYjAsIGtwKTsKQEAgLTQwNywxOCArNDA5LDIxIEBACiAJaV9ucm91bmQgKGIxLCBiMCwga3ApOwogCWlfbHJvdW5kIChiMCwgYjEsIGtwKTsKIAotCXUzMl9vdXQgKG91dCwgYjBbMF0pOwotCXUzMl9vdXQgKG91dCArIDQsIGIwWzFdKTsKLQl1MzJfb3V0IChvdXQgKyA4LCBiMFsyXSk7Ci0JdTMyX291dCAob3V0ICsgMTIsIGIwWzNdKTsKKwlkc3RbMF0gPSBjcHVfdG9fbGUzMihiMFswXSk7CisJZHN0WzFdID0gY3B1X3RvX2xlMzIoYjBbMV0pOworCWRzdFsyXSA9IGNwdV90b19sZTMyKGIwWzJdKTsKKwlkc3RbM10gPSBjcHVfdG9fbGUzMihiMFszXSk7CiB9CiAKIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc19hbGcgPSB7CiAJLmNyYV9uYW1lCQk9CSJhZXMiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkiYWVzLWdlbmVyaWMiLAorCS5jcmFfcHJpb3JpdHkJCT0JMTAwLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBhZXNfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPQkzLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChhZXNfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsKZGlmZiAtLWdpdCBhL2NyeXB0by9hbnViaXMuYyBiL2NyeXB0by9hbnViaXMuYwppbmRleCAzOTI1ZWIwLi4yYzc5NmJkIDEwMDY0NAotLS0gYS9jcnlwdG8vYW51YmlzLmMKKysrIGIvY3J5cHRvL2FudWJpcy5jCkBAIC0zMiw4ICszMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIEFOVUJJU19NSU5fS0VZX1NJWkUJMTYKICNkZWZpbmUgQU5VQklTX01BWF9LRVlfU0laRQk0MApAQCAtNDYxLDggKzQ2Myw4IEBACiBzdGF0aWMgaW50IGFudWJpc19zZXRrZXkodm9pZCAqY3R4X2FyZywgY29uc3QgdTggKmluX2tleSwKIAkJCSB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdTMyICpmbGFncykKIHsKLQotCWludCBOLCBSLCBpLCBwb3MsIHI7CisJY29uc3QgX19iZTMyICprZXkgPSAoY29uc3QgX19iZTMyICopaW5fa2V5OworCWludCBOLCBSLCBpLCByOwogCXUzMiBrYXBwYVtBTlVCSVNfTUFYX05dOwogCXUzMiBpbnRlcltBTlVCSVNfTUFYX05dOwogCkBAIC00ODMsMTMgKzQ4NSw4IEBACiAJY3R4LT5SID0gUiA9IDggKyBOOwogCiAJLyogKiBtYXAgY2lwaGVyIGtleSB0byBpbml0aWFsIGtleSBzdGF0ZSAobXUpOiAqLwotCQlmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgTjsgaSsrLCBwb3MgKz0gNCkgewotCQlrYXBwYVtpXSA9Ci0JCQkoaW5fa2V5W3BvcyAgICBdIDw8IDI0KSBeCi0JCQkoaW5fa2V5W3BvcyArIDFdIDw8IDE2KSBeCi0JCQkoaW5fa2V5W3BvcyArIDJdIDw8ICA4KSBeCi0JCQkoaW5fa2V5W3BvcyArIDNdICAgICAgKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IE47IGkrKykKKwkJa2FwcGFbaV0gPSBiZTMyX3RvX2NwdShrZXlbaV0pOwogCiAJLyoKIAkgKiBnZW5lcmF0ZSBSICsgMSByb3VuZCBrZXlzOgpAQCAtNTc4LDcgKzU3NSw5IEBACiBzdGF0aWMgdm9pZCBhbnViaXNfY3J5cHQodTMyIHJvdW5kS2V5W0FOVUJJU19NQVhfUk9VTkRTICsgMV1bNF0sCiAJCXU4ICpjaXBoZXJ0ZXh0LCBjb25zdCB1OCAqcGxhaW50ZXh0LCBjb25zdCBpbnQgUikKIHsKLQlpbnQgaSwgcG9zLCByOworCWNvbnN0IF9fYmUzMiAqc3JjID0gKGNvbnN0IF9fYmUzMiAqKXBsYWludGV4dDsKKwlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKiljaXBoZXJ0ZXh0OworCWludCBpLCByOwogCXUzMiBzdGF0ZVs0XTsKIAl1MzIgaW50ZXJbNF07CiAKQEAgLTU4NiwxNCArNTg1LDggQEAKIAkgKiBtYXAgcGxhaW50ZXh0IGJsb2NrIHRvIGNpcGhlciBzdGF0ZSAobXUpCiAJICogYW5kIGFkZCBpbml0aWFsIHJvdW5kIGtleSAoc2lnbWFbS14wXSk6CiAJICovCi0JZm9yIChpID0gMCwgcG9zID0gMDsgaSA8IDQ7IGkrKywgcG9zICs9IDQpIHsKLQkJc3RhdGVbaV0gPQotCQkJKHBsYWludGV4dFtwb3MgICAgXSA8PCAyNCkgXgotCQkJKHBsYWludGV4dFtwb3MgKyAxXSA8PCAxNikgXgotCQkJKHBsYWludGV4dFtwb3MgKyAyXSA8PCAgOCkgXgotCQkJKHBsYWludGV4dFtwb3MgKyAzXSAgICAgICkgXgotCQkJcm91bmRLZXlbMF1baV07Ci0JfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXN0YXRlW2ldID0gYmUzMl90b19jcHUoc3JjW2ldKSBeIHJvdW5kS2V5WzBdW2ldOwogCiAJLyoKIAkgKiBSIC0gMSBmdWxsIHJvdW5kczoKQEAgLTY2MywxMyArNjU2LDggQEAKIAkgKiBtYXAgY2lwaGVyIHN0YXRlIHRvIGNpcGhlcnRleHQgYmxvY2sgKG11XnstMX0pOgogCSAqLwogCi0JZm9yIChpID0gMCwgcG9zID0gMDsgaSA8IDQ7IGkrKywgcG9zICs9IDQpIHsKLQkJdTMyIHcgPSBpbnRlcltpXTsKLQkJY2lwaGVydGV4dFtwb3MgICAgXSA9ICh1OCkodyA+PiAyNCk7Ci0JCWNpcGhlcnRleHRbcG9zICsgMV0gPSAodTgpKHcgPj4gMTYpOwotCQljaXBoZXJ0ZXh0W3BvcyArIDJdID0gKHU4KSh3ID4+ICA4KTsKLQkJY2lwaGVydGV4dFtwb3MgKyAzXSA9ICh1OCkodyAgICAgICk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWRzdFtpXSA9IGNwdV90b19iZTMyKGludGVyW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgYW51YmlzX2VuY3J5cHQodm9pZCAqY3R4X2FyZywgdTggKmRzdCwgY29uc3QgdTggKnNyYykKQEAgLTY4OSw2ICs2NzcsNyBAQAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlBTlVCSVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mIChzdHJ1Y3QgYW51YmlzX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JMywKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoYW51YmlzX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXBpLmMgYi9jcnlwdG8vYXBpLmMKaW5kZXggNDBhZTQyZS4uZTI2MTU2ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FwaS5jCisrKyBiL2NyeXB0by9hcGkuYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBQb3J0aW9ucyBkZXJpdmVkIGZyb20gQ3J5cHRvYXBpLCBieSBBbGV4YW5kZXIgS2plbGRhYXMgPGFzdG9yQGZhc3Qubm8+CiAgKiBhbmQgTmV0dGxlLCBieSBOaWVscyBN9mxsZXIuCkBAIC0xOCw5ICsxOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBMSVNUX0hFQUQoY3J5cHRvX2FsZ19saXN0KTsKQEAgLTM5LDYgKzQyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2FsZ19sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqcSwgKmFsZyA9IE5VTEw7CisJaW50IGJlc3QgPSAtMTsKIAogCWlmICghbmFtZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC00NiwxMSArNTAsMjMgQEAKIAlkb3duX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKIAkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZjcnlwdG9fYWxnX2xpc3QsIGNyYV9saXN0KSB7Ci0JCWlmICghKHN0cmNtcChxLT5jcmFfbmFtZSwgbmFtZSkpKSB7Ci0JCQlpZiAoY3J5cHRvX2FsZ19nZXQocSkpCi0JCQkJYWxnID0gcTsKKwkJaW50IGV4YWN0LCBmdXp6eTsKKworCQlleGFjdCA9ICFzdHJjbXAocS0+Y3JhX2RyaXZlcl9uYW1lLCBuYW1lKTsKKwkJZnV6enkgPSAhc3RyY21wKHEtPmNyYV9uYW1lLCBuYW1lKTsKKwkJaWYgKCFleGFjdCAmJiAhKGZ1enp5ICYmIHEtPmNyYV9wcmlvcml0eSA+IGJlc3QpKQorCQkJY29udGludWU7CisKKwkJaWYgKHVubGlrZWx5KCFjcnlwdG9fYWxnX2dldChxKSkpCisJCQljb250aW51ZTsKKworCQliZXN0ID0gcS0+Y3JhX3ByaW9yaXR5OworCQlpZiAoYWxnKQorCQkJY3J5cHRvX2FsZ19wdXQoYWxnKTsKKwkJYWxnID0gcTsKKworCQlpZiAoZXhhY3QpCiAJCQlicmVhazsKLQkJfQogCX0KIAkKIAl1cF9yZWFkKCZjcnlwdG9fYWxnX3NlbSk7CkBAIC0yMDcsOSArMjIzLDI2IEBACiAJa2ZyZWUodGZtKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX3NldF9kcml2ZXJfbmFtZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHN1ZmZpeFtdID0gIi1nZW5lcmljIjsKKwljaGFyICpkcml2ZXJfbmFtZSA9IChjaGFyICopYWxnLT5jcmFfZHJpdmVyX25hbWU7CisJaW50IGxlbjsKKworCWlmICgqZHJpdmVyX25hbWUpCisJCXJldHVybiAwOworCisJbGVuID0gc3RybGNweShkcml2ZXJfbmFtZSwgYWxnLT5jcmFfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSk7CisJaWYgKGxlbiArIHNpemVvZihzdWZmaXgpID4gQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CisKKwltZW1jcHkoZHJpdmVyX25hbWUgKyBsZW4sIHN1ZmZpeCwgc2l6ZW9mKHN1ZmZpeCkpOworCXJldHVybiAwOworfQorCiBpbnQgY3J5cHRvX3JlZ2lzdGVyX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewotCWludCByZXQgPSAwOworCWludCByZXQ7CiAJc3RydWN0IGNyeXB0b19hbGcgKnE7CiAKIAlpZiAoYWxnLT5jcmFfYWxpZ25tYXNrICYgKGFsZy0+Y3JhX2FsaWdubWFzayArIDEpKQpAQCAtMjE4LDEzICsyNTEsMjAgQEAKIAlpZiAoYWxnLT5jcmFfYWxpZ25tYXNrICYgYWxnLT5jcmFfYmxvY2tzaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChhbGctPmNyYV9ibG9ja3NpemUgPiBQQUdFX1NJWkUpCisJaWYgKGFsZy0+Y3JhX2Jsb2Nrc2l6ZSA+IFBBR0VfU0laRSAvIDgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFsZy0+Y3JhX3ByaW9yaXR5IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJCisJcmV0ID0gY3J5cHRvX3NldF9kcml2ZXJfbmFtZShhbGcpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0OworCiAJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOwogCQogCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJmNyeXB0b19hbGdfbGlzdCwgY3JhX2xpc3QpIHsKLQkJaWYgKCEoc3RyY21wKHEtPmNyYV9uYW1lLCBhbGctPmNyYV9uYW1lKSkpIHsKKwkJaWYgKCFzdHJjbXAocS0+Y3JhX2RyaXZlcl9uYW1lLCBhbGctPmNyYV9kcml2ZXJfbmFtZSkpIHsKIAkJCXJldCA9IC1FRVhJU1Q7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsb3dmaXNoLmMgYi9jcnlwdG8vYmxvd2Zpc2guYwppbmRleCBhOGIyOWQ1Li43ZjcxMGIyIDEwMDY0NAotLS0gYS9jcnlwdG8vYmxvd2Zpc2guYworKysgYi9jcnlwdG8vYmxvd2Zpc2guYwpAQCAtMTksOCArMTksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBCRl9CTE9DS19TSVpFIDgKICNkZWZpbmUgQkZfTUlOX0tFWV9TSVpFIDQKQEAgLTQ1MSw2ICs0NTMsNyBAQAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlCRl9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGJmX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JMywKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsgLmNpcGhlciA9IHsKZGlmZiAtLWdpdCBhL2NyeXB0by9jYXN0NS5jIGIvY3J5cHRvL2Nhc3Q1LmMKaW5kZXggYmM0MmY0Mi4uODgzNGM4NSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Nhc3Q1LmMKKysrIGIvY3J5cHRvL2Nhc3Q1LmMKQEAgLTIxLDExICsyMSwxMyBAQAogKi8KIAogCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQ0FTVDVfQkxPQ0tfU0laRSA4CiAjZGVmaW5lIENBU1Q1X01JTl9LRVlfU0laRSA1CkBAIC01NzgsNiArNTgwLDggQEAKIHN0YXRpYyB2b2lkIGNhc3Q1X2VuY3J5cHQodm9pZCAqY3R4LCB1OCAqIG91dGJ1ZiwgY29uc3QgdTggKiBpbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FzdDVfY3R4ICpjID0gKHN0cnVjdCBjYXN0NV9jdHggKikgY3R4OworCWNvbnN0IF9fYmUzMiAqc3JjID0gKGNvbnN0IF9fYmUzMiAqKWluYnVmOworCV9fYmUzMiAqZHN0ID0gKF9fYmUzMiAqKW91dGJ1ZjsKIAl1MzIgbCwgciwgdDsKIAl1MzIgSTsJCQkvKiB1c2VkIGJ5IHRoZSBGeCBtYWNyb3MgKi8KIAl1MzIgKkttOwpAQCAtNTg5LDggKzU5Myw4IEBACiAJLyogKEwwLFIwKSA8LS0gKG0xLi4ubTY0KS4gIChTcGxpdCB0aGUgcGxhaW50ZXh0IGludG8gbGVmdCBhbmQKIAkgKiByaWdodCAzMi1iaXQgaGFsdmVzIEwwID0gbTEuLi5tMzIgYW5kIFIwID0gbTMzLi4ubTY0LikKIAkgKi8KLQlsID0gaW5idWZbMF0gPDwgMjQgfCBpbmJ1ZlsxXSA8PCAxNiB8IGluYnVmWzJdIDw8IDggfCBpbmJ1ZlszXTsKLQlyID0gaW5idWZbNF0gPDwgMjQgfCBpbmJ1Zls1XSA8PCAxNiB8IGluYnVmWzZdIDw8IDggfCBpbmJ1Zls3XTsKKwlsID0gYmUzMl90b19jcHUoc3JjWzBdKTsKKwlyID0gYmUzMl90b19jcHUoc3JjWzFdKTsKIAogCS8qICgxNiByb3VuZHMpIGZvciBpIGZyb20gMSB0byAxNiwgY29tcHV0ZSBMaSBhbmQgUmkgYXMgZm9sbG93czoKIAkgKiAgTGkgPSBSaS0xOwpAQCAtNjM0LDE5ICs2MzgsMTUgQEAKIAogCS8qIGMxLi4uYzY0IDwtLSAoUjE2LEwxNikuICAoRXhjaGFuZ2UgZmluYWwgYmxvY2tzIEwxNiwgUjE2IGFuZAogCSAqICBjb25jYXRlbmF0ZSB0byBmb3JtIHRoZSBjaXBoZXJ0ZXh0LikgKi8KLQlvdXRidWZbMF0gPSAociA+PiAyNCkgJiAweGZmOwotCW91dGJ1ZlsxXSA9IChyID4+IDE2KSAmIDB4ZmY7Ci0Jb3V0YnVmWzJdID0gKHIgPj4gOCkgJiAweGZmOwotCW91dGJ1ZlszXSA9IHIgJiAweGZmOwotCW91dGJ1Zls0XSA9IChsID4+IDI0KSAmIDB4ZmY7Ci0Jb3V0YnVmWzVdID0gKGwgPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbNl0gPSAobCA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzddID0gbCAmIDB4ZmY7CisJZHN0WzBdID0gY3B1X3RvX2JlMzIocik7CisJZHN0WzFdID0gY3B1X3RvX2JlMzIobCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhc3Q1X2RlY3J5cHQodm9pZCAqY3R4LCB1OCAqIG91dGJ1ZiwgY29uc3QgdTggKiBpbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FzdDVfY3R4ICpjID0gKHN0cnVjdCBjYXN0NV9jdHggKikgY3R4OworCWNvbnN0IF9fYmUzMiAqc3JjID0gKGNvbnN0IF9fYmUzMiAqKWluYnVmOworCV9fYmUzMiAqZHN0ID0gKF9fYmUzMiAqKW91dGJ1ZjsKIAl1MzIgbCwgciwgdDsKIAl1MzIgSTsKIAl1MzIgKkttOwpAQCAtNjU1LDggKzY1NSw4IEBACiAJS20gPSBjLT5LbTsKIAlLciA9IGMtPktyOwogCi0JbCA9IGluYnVmWzBdIDw8IDI0IHwgaW5idWZbMV0gPDwgMTYgfCBpbmJ1ZlsyXSA8PCA4IHwgaW5idWZbM107Ci0JciA9IGluYnVmWzRdIDw8IDI0IHwgaW5idWZbNV0gPDwgMTYgfCBpbmJ1Zls2XSA8PCA4IHwgaW5idWZbN107CisJbCA9IGJlMzJfdG9fY3B1KHNyY1swXSk7CisJciA9IGJlMzJfdG9fY3B1KHNyY1sxXSk7CiAKIAlpZiAoIShjLT5ycikpIHsKIAkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzE1XSwgS3JbMTVdKTsKQEAgLTY5MCwxNCArNjkwLDggQEAKIAkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzBdLCBLclswXSk7CiAJfQogCi0Jb3V0YnVmWzBdID0gKHIgPj4gMjQpICYgMHhmZjsKLQlvdXRidWZbMV0gPSAociA+PiAxNikgJiAweGZmOwotCW91dGJ1ZlsyXSA9IChyID4+IDgpICYgMHhmZjsKLQlvdXRidWZbM10gPSByICYgMHhmZjsKLQlvdXRidWZbNF0gPSAobCA+PiAyNCkgJiAweGZmOwotCW91dGJ1Zls1XSA9IChsID4+IDE2KSAmIDB4ZmY7Ci0Jb3V0YnVmWzZdID0gKGwgPj4gOCkgJiAweGZmOwotCW91dGJ1Zls3XSA9IGwgJiAweGZmOworCWRzdFswXSA9IGNwdV90b19iZTMyKHIpOworCWRzdFsxXSA9IGNwdV90b19iZTMyKGwpOwogfQogCiBzdGF0aWMgdm9pZCBrZXlfc2NoZWR1bGUodTMyICogeCwgdTMyICogeiwgdTMyICogaykKQEAgLTc4Miw3ICs3NzYsNyBAQAogCXUzMiB4WzRdOwogCXUzMiB6WzRdOwogCXUzMiBrWzE2XTsKLQl1OCBwX2tleVsxNl07CisJX19iZTMyIHBfa2V5WzRdOwogCXN0cnVjdCBjYXN0NV9jdHggKmMgPSAoc3RydWN0IGNhc3Q1X2N0eCAqKSBjdHg7CiAJCiAJaWYgKGtleV9sZW4gPCA1IHx8IGtleV9sZW4gPiAxNikgewpAQCAtNzk2LDEyICs3OTAsMTAgQEAKIAltZW1jcHkocF9rZXksIGtleSwga2V5X2xlbik7CiAKIAotCXhbMF0gPSBwX2tleVswXSA8PCAyNCB8IHBfa2V5WzFdIDw8IDE2IHwgcF9rZXlbMl0gPDwgOCB8IHBfa2V5WzNdOwotCXhbMV0gPSBwX2tleVs0XSA8PCAyNCB8IHBfa2V5WzVdIDw8IDE2IHwgcF9rZXlbNl0gPDwgOCB8IHBfa2V5WzddOwotCXhbMl0gPQotCSAgICBwX2tleVs4XSA8PCAyNCB8IHBfa2V5WzldIDw8IDE2IHwgcF9rZXlbMTBdIDw8IDggfCBwX2tleVsxMV07Ci0JeFszXSA9Ci0JICAgIHBfa2V5WzEyXSA8PCAyNCB8IHBfa2V5WzEzXSA8PCAxNiB8IHBfa2V5WzE0XSA8PCA4IHwgcF9rZXlbMTVdOworCXhbMF0gPSBiZTMyX3RvX2NwdShwX2tleVswXSk7CisJeFsxXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzFdKTsKKwl4WzJdID0gYmUzMl90b19jcHUocF9rZXlbMl0pOworCXhbM10gPSBiZTMyX3RvX2NwdShwX2tleVszXSk7CiAKIAlrZXlfc2NoZWR1bGUoeCwgeiwgayk7CiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCkBAIC04MTcsNiArODA5LDcgQEAKIAkuY3JhX2ZsYWdzIAk9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUgCT0gQ0FTVDVfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUgCT0gc2l6ZW9mKHN0cnVjdCBjYXN0NV9jdHgpLAorCS5jcmFfYWxpZ25tYXNrCT0gMywKIAkuY3JhX21vZHVsZSAJPSBUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QgCT0gTElTVF9IRUFEX0lOSVQoYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UgCQk9IHsKZGlmZiAtLWdpdCBhL2NyeXB0by9jYXN0Ni5jIGIvY3J5cHRvL2Nhc3Q2LmMKaW5kZXggM2ViMDgxMC4uOWUyODc0MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Nhc3Q2LmMKKysrIGIvY3J5cHRvL2Nhc3Q2LmMKQEAgLTE4LDExICsxOCwxMyBAQAogICovCiAKIAorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIENBU1Q2X0JMT0NLX1NJWkUgMTYKICNkZWZpbmUgQ0FTVDZfTUlOX0tFWV9TSVpFIDE2CkBAIC0zODQsNyArMzg2LDcgQEAKIHsKIAlpbnQgaTsKIAl1MzIga2V5WzhdOwotCXU4IHBfa2V5WzMyXTsgLyogcGFkZGVkIGtleSAqLworCV9fYmUzMiBwX2tleVs4XTsgLyogcGFkZGVkIGtleSAqLwogCXN0cnVjdCBjYXN0Nl9jdHggKmMgPSAoc3RydWN0IGNhc3Q2X2N0eCAqKSBjdHg7CiAKIAlpZiAoa2V5X2xlbiA8IDE2IHx8IGtleV9sZW4gPiAzMiB8fCBrZXlfbGVuICUgNCAhPSAwKSB7CkBAIC0zOTUsMTQgKzM5NywxNCBAQAogCW1lbXNldCAocF9rZXksIDAsIDMyKTsKIAltZW1jcHkgKHBfa2V5LCBpbl9rZXksIGtleV9sZW4pOwogCQotCWtleVswXSA9IHBfa2V5WzBdIDw8IDI0IHwgcF9rZXlbMV0gPDwgMTYgfCBwX2tleVsyXSA8PCA4IHwgcF9rZXlbM107CQkvKiBBICovCi0Ja2V5WzFdID0gcF9rZXlbNF0gPDwgMjQgfCBwX2tleVs1XSA8PCAxNiB8IHBfa2V5WzZdIDw8IDggfCBwX2tleVs3XTsJCS8qIEIgKi8KLQlrZXlbMl0gPSBwX2tleVs4XSA8PCAyNCB8IHBfa2V5WzldIDw8IDE2IHwgcF9rZXlbMTBdIDw8IDggfCBwX2tleVsxMV07CQkvKiBDICovCi0Ja2V5WzNdID0gcF9rZXlbMTJdIDw8IDI0IHwgcF9rZXlbMTNdIDw8IDE2IHwgcF9rZXlbMTRdIDw8IDggfCBwX2tleVsxNV07CS8qIEQgKi8KLQlrZXlbNF0gPSBwX2tleVsxNl0gPDwgMjQgfCBwX2tleVsxN10gPDwgMTYgfCBwX2tleVsxOF0gPDwgOCB8IHBfa2V5WzE5XTsJLyogRSAqLwotCWtleVs1XSA9IHBfa2V5WzIwXSA8PCAyNCB8IHBfa2V5WzIxXSA8PCAxNiB8IHBfa2V5WzIyXSA8PCA4IHwgcF9rZXlbMjNdOwkvKiBGICovCi0Ja2V5WzZdID0gcF9rZXlbMjRdIDw8IDI0IHwgcF9rZXlbMjVdIDw8IDE2IHwgcF9rZXlbMjZdIDw8IDggfCBwX2tleVsyN107CS8qIEcgKi8KLQlrZXlbN10gPSBwX2tleVsyOF0gPDwgMjQgfCBwX2tleVsyOV0gPDwgMTYgfCBwX2tleVszMF0gPDwgOCB8IHBfa2V5WzMxXTsJLyogSCAqLworCWtleVswXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzBdKTsJCS8qIEEgKi8KKwlrZXlbMV0gPSBiZTMyX3RvX2NwdShwX2tleVsxXSk7CQkvKiBCICovCisJa2V5WzJdID0gYmUzMl90b19jcHUocF9rZXlbMl0pOwkJLyogQyAqLworCWtleVszXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzNdKTsJCS8qIEQgKi8KKwlrZXlbNF0gPSBiZTMyX3RvX2NwdShwX2tleVs0XSk7CQkvKiBFICovCisJa2V5WzVdID0gYmUzMl90b19jcHUocF9rZXlbNV0pOwkJLyogRiAqLworCWtleVs2XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzZdKTsJCS8qIEcgKi8KKwlrZXlbN10gPSBiZTMyX3RvX2NwdShwX2tleVs3XSk7CQkvKiBIICovCiAJCiAKIApAQCAtNDQ0LDE0ICs0NDYsMTYgQEAKIAogc3RhdGljIHZvaWQgY2FzdDZfZW5jcnlwdCAodm9pZCAqIGN0eCwgdTggKiBvdXRidWYsIGNvbnN0IHU4ICogaW5idWYpIHsKIAlzdHJ1Y3QgY2FzdDZfY3R4ICogYyA9IChzdHJ1Y3QgY2FzdDZfY3R4ICopY3R4OworCWNvbnN0IF9fYmUzMiAqc3JjID0gKGNvbnN0IF9fYmUzMiAqKWluYnVmOworCV9fYmUzMiAqZHN0ID0gKF9fYmUzMiAqKW91dGJ1ZjsKIAl1MzIgYmxvY2tbNF07CiAJdTMyICogS207IAogCXU4ICogS3I7CiAKLQlibG9ja1swXSA9IGluYnVmWzBdIDw8IDI0IHwgaW5idWZbMV0gPDwgMTYgfCBpbmJ1ZlsyXSA8PCA4IHwgaW5idWZbM107Ci0JYmxvY2tbMV0gPSBpbmJ1Zls0XSA8PCAyNCB8IGluYnVmWzVdIDw8IDE2IHwgaW5idWZbNl0gPDwgOCB8IGluYnVmWzddOwotCWJsb2NrWzJdID0gaW5idWZbOF0gPDwgMjQgfCBpbmJ1Zls5XSA8PCAxNiB8IGluYnVmWzEwXSA8PCA4IHwgaW5idWZbMTFdOwotCWJsb2NrWzNdID0gaW5idWZbMTJdIDw8IDI0IHwgaW5idWZbMTNdIDw8IDE2IHwgaW5idWZbMTRdIDw8IDggfCBpbmJ1ZlsxNV07CisJYmxvY2tbMF0gPSBiZTMyX3RvX2NwdShzcmNbMF0pOworCWJsb2NrWzFdID0gYmUzMl90b19jcHUoc3JjWzFdKTsKKwlibG9ja1syXSA9IGJlMzJfdG9fY3B1KHNyY1syXSk7CisJYmxvY2tbM10gPSBiZTMyX3RvX2NwdShzcmNbM10pOwogCiAJS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUSAoYmxvY2ssIEtyLCBLbSk7CiAJS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUSAoYmxvY2ssIEtyLCBLbSk7CkBAIC00NjUsMzUgKzQ2OSwyNSBAQAogCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFFCQVIgKGJsb2NrLCBLciwgS20pOwogCUttID0gYy0+S21bMTBdOyBLciA9IGMtPktyWzEwXTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7CiAJS20gPSBjLT5LbVsxMV07IEtyID0gYy0+S3JbMTFdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQkKLQlvdXRidWZbMF0gPSAoYmxvY2tbMF0gPj4gMjQpICYgMHhmZjsKLQlvdXRidWZbMV0gPSAoYmxvY2tbMF0gPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbMl0gPSAoYmxvY2tbMF0gPj4gOCkgJiAweGZmOwotCW91dGJ1ZlszXSA9IGJsb2NrWzBdICYgMHhmZjsKLQlvdXRidWZbNF0gPSAoYmxvY2tbMV0gPj4gMjQpICYgMHhmZjsKLQlvdXRidWZbNV0gPSAoYmxvY2tbMV0gPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbNl0gPSAoYmxvY2tbMV0gPj4gOCkgJiAweGZmOwotCW91dGJ1Zls3XSA9IGJsb2NrWzFdICYgMHhmZjsKLQlvdXRidWZbOF0gPSAoYmxvY2tbMl0gPj4gMjQpICYgMHhmZjsKLQlvdXRidWZbOV0gPSAoYmxvY2tbMl0gPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbMTBdID0gKGJsb2NrWzJdID4+IDgpICYgMHhmZjsKLQlvdXRidWZbMTFdID0gYmxvY2tbMl0gJiAweGZmOwotCW91dGJ1ZlsxMl0gPSAoYmxvY2tbM10gPj4gMjQpICYgMHhmZjsKLQlvdXRidWZbMTNdID0gKGJsb2NrWzNdID4+IDE2KSAmIDB4ZmY7Ci0Jb3V0YnVmWzE0XSA9IChibG9ja1szXSA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzE1XSA9IGJsb2NrWzNdICYgMHhmZjsJCisKKwlkc3RbMF0gPSBjcHVfdG9fYmUzMihibG9ja1swXSk7CisJZHN0WzFdID0gY3B1X3RvX2JlMzIoYmxvY2tbMV0pOworCWRzdFsyXSA9IGNwdV90b19iZTMyKGJsb2NrWzJdKTsKKwlkc3RbM10gPSBjcHVfdG9fYmUzMihibG9ja1szXSk7CiB9CQogCiBzdGF0aWMgdm9pZCBjYXN0Nl9kZWNyeXB0ICh2b2lkICogY3R4LCB1OCAqIG91dGJ1ZiwgY29uc3QgdTggKiBpbmJ1ZikgewogCXN0cnVjdCBjYXN0Nl9jdHggKiBjID0gKHN0cnVjdCBjYXN0Nl9jdHggKiljdHg7CisJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CisJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBibG9ja1s0XTsKIAl1MzIgKiBLbTsgCiAJdTggKiBLcjsKIAotCWJsb2NrWzBdID0gaW5idWZbMF0gPDwgMjQgfCBpbmJ1ZlsxXSA8PCAxNiB8IGluYnVmWzJdIDw8IDggfCBpbmJ1ZlszXTsKLQlibG9ja1sxXSA9IGluYnVmWzRdIDw8IDI0IHwgaW5idWZbNV0gPDwgMTYgfCBpbmJ1Zls2XSA8PCA4IHwgaW5idWZbN107Ci0JYmxvY2tbMl0gPSBpbmJ1Zls4XSA8PCAyNCB8IGluYnVmWzldIDw8IDE2IHwgaW5idWZbMTBdIDw8IDggfCBpbmJ1ZlsxMV07Ci0JYmxvY2tbM10gPSBpbmJ1ZlsxMl0gPDwgMjQgfCBpbmJ1ZlsxM10gPDwgMTYgfCBpbmJ1ZlsxNF0gPDwgOCB8IGluYnVmWzE1XTsKKwlibG9ja1swXSA9IGJlMzJfdG9fY3B1KHNyY1swXSk7CisJYmxvY2tbMV0gPSBiZTMyX3RvX2NwdShzcmNbMV0pOworCWJsb2NrWzJdID0gYmUzMl90b19jcHUoc3JjWzJdKTsKKwlibG9ja1szXSA9IGJlMzJfdG9fY3B1KHNyY1szXSk7CiAKIAlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFEgKGJsb2NrLCBLciwgS20pOwogCUttID0gYy0+S21bMTBdOyBLciA9IGMtPktyWzEwXTsgUSAoYmxvY2ssIEtyLCBLbSk7CkBAIC01MDgsMjIgKzUwMiwxMCBAQAogCUttID0gYy0+S21bMV07IEtyID0gYy0+S3JbMV07IFFCQVIgKGJsb2NrLCBLciwgS20pOwogCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFFCQVIgKGJsb2NrLCBLciwgS20pOwogCQotCW91dGJ1ZlswXSA9IChibG9ja1swXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1ZlsxXSA9IChibG9ja1swXSA+PiAxNikgJiAweGZmOwotCW91dGJ1ZlsyXSA9IChibG9ja1swXSA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzNdID0gYmxvY2tbMF0gJiAweGZmOwotCW91dGJ1Zls0XSA9IChibG9ja1sxXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1Zls1XSA9IChibG9ja1sxXSA+PiAxNikgJiAweGZmOwotCW91dGJ1Zls2XSA9IChibG9ja1sxXSA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzddID0gYmxvY2tbMV0gJiAweGZmOwotCW91dGJ1Zls4XSA9IChibG9ja1syXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1Zls5XSA9IChibG9ja1syXSA+PiAxNikgJiAweGZmOwotCW91dGJ1ZlsxMF0gPSAoYmxvY2tbMl0gPj4gOCkgJiAweGZmOwotCW91dGJ1ZlsxMV0gPSBibG9ja1syXSAmIDB4ZmY7Ci0Jb3V0YnVmWzEyXSA9IChibG9ja1szXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1ZlsxM10gPSAoYmxvY2tbM10gPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbMTRdID0gKGJsb2NrWzNdID4+IDgpICYgMHhmZjsKLQlvdXRidWZbMTVdID0gYmxvY2tbM10gJiAweGZmOwkKKwlkc3RbMF0gPSBjcHVfdG9fYmUzMihibG9ja1swXSk7CisJZHN0WzFdID0gY3B1X3RvX2JlMzIoYmxvY2tbMV0pOworCWRzdFsyXSA9IGNwdV90b19iZTMyKGJsb2NrWzJdKTsKKwlkc3RbM10gPSBjcHVfdG9fYmUzMihibG9ja1szXSk7CiB9CQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewpAQCAtNTMxLDYgKzUxMyw3IEBACiAJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUgPSBDQVNUNl9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2FzdDZfY3R4KSwKKwkuY3JhX2FsaWdubWFzayA9IDMsCiAJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QgPSBMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAogCS5jcmFfdSA9IHsKZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIuYyBiL2NyeXB0by9jaXBoZXIuYwppbmRleCBkZmQ0YmNmLi42NWJjZWEwIDEwMDY0NAotLS0gYS9jcnlwdG8vY2lwaGVyLmMKKysrIGIvY3J5cHRvL2NpcGhlci5jCkBAIC0yMTIsOSArMjEyLDEwIEBACiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGRlc2MtPnRmbTsKIAl2b2lkICgqeG9yKSh1OCAqLCBjb25zdCB1OCAqKSA9IHRmbS0+Y3J0X3UuY2lwaGVyLmNpdF94b3JfYmxvY2s7CiAJaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2soZGVzYy0+dGZtKTsKIAotCXU4IHN0YWNrW3NyYyA9PSBkc3QgPyBic2l6ZSA6IDBdOwotCXU4ICpidWYgPSBzdGFjazsKKwl1OCBzdGFja1tzcmMgPT0gZHN0ID8gYnNpemUgKyBhbGlnbm1hc2sgOiAwXTsKKwl1OCAqYnVmID0gKHU4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpc3RhY2ssIGFsaWdubWFzayArIDEpOwogCXU4ICoqZHN0X3AgPSBzcmMgPT0gZHN0ID8gJmJ1ZiA6ICZkc3Q7CiAKIAl2b2lkICgqZm4pKHZvaWQgKiwgdTggKiwgY29uc3QgdTggKikgPSBkZXNjLT5jcmZuOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyYzMyYy5jIGIvY3J5cHRvL2NyYzMyYy5jCmluZGV4IDI1Njk1NmMuLjk1MzM2MjQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcmMzMmMuYworKysgYi9jcnlwdG8vY3JjMzJjLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMmMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2RlZmluZSBDSEtTVU1fQkxPQ0tfU0laRQkzMgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlcy5jIGIvY3J5cHRvL2Rlcy5jCmluZGV4IGEzYzg2M2QuLjdiYjU0ODYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZXMuYworKysgYi9jcnlwdG8vZGVzLmMKQEAgLTEyLDExICsxMiwxMyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgREVTX0tFWV9TSVpFCQk4CiAjZGVmaW5lIERFU19FWFBLRVlfV09SRFMJMzIKQEAgLTk0Nyw2ICs5NDksNyBAQAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGRlc19jdHgpLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfYWxpZ25tYXNrCQk9CTMsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGRlc19hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JeyAuY2lwaGVyID0gewogCS5jaWFfbWluX2tleXNpemUJPQlERVNfS0VZX1NJWkUsCmRpZmYgLS1naXQgYS9jcnlwdG8vaW50ZXJuYWwuaCBiL2NyeXB0by9pbnRlcm5hbC5oCmluZGV4IDM3YWE2NTIuLjk1OWU2MDIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbnRlcm5hbC5oCisrKyBiL2NyeXB0by9pbnRlcm5hbC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTE2LDEwICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CiAKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNyeXB0b19hbGdfbGlzdDsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGNyeXB0b19hbGdfc2VtOworCiBleHRlcm4gZW51bSBrbV90eXBlIGNyeXB0b19rbV90eXBlc1tdOwogCiBzdGF0aWMgaW5saW5lIGVudW0ga21fdHlwZSBjcnlwdG9fa21hcF90eXBlKGludCBvdXQpCmRpZmYgLS1naXQgYS9jcnlwdG8va2hhemFkLmMgYi9jcnlwdG8va2hhemFkLmMKaW5kZXggNzM4Y2IwZC4uODA3ZjJiZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2toYXphZC5jCisrKyBiL2NyeXB0by9raGF6YWQuYwpAQCAtMjIsOCArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBLSEFaQURfS0VZX1NJWkUJCTE2CiAjZGVmaW5lIEtIQVpBRF9CTE9DS19TSVpFCTgKQEAgLTc1NSw4ICs3NTcsOCBAQAogc3RhdGljIGludCBraGF6YWRfc2V0a2V5KHZvaWQgKmN0eF9hcmcsIGNvbnN0IHU4ICppbl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1MzIgKmZsYWdzKQogewotCiAJc3RydWN0IGtoYXphZF9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19iZTY0ICprZXkgPSAoY29uc3QgX19iZTY0ICopaW5fa2V5OwogCWludCByOwogCWNvbnN0IHU2NCAqUyA9IFQ3OwogCXU2NCBLMiwgSzE7CkBAIC03NjcsMjIgKzc2OSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCUsyID0gKCh1NjQpaW5fa2V5WyAwXSA8PCA1NikgXgotCSAgICAgKCh1NjQpaW5fa2V5WyAxXSA8PCA0OCkgXgotCSAgICAgKCh1NjQpaW5fa2V5WyAyXSA8PCA0MCkgXgotCSAgICAgKCh1NjQpaW5fa2V5WyAzXSA8PCAzMikgXgotCSAgICAgKCh1NjQpaW5fa2V5WyA0XSA8PCAyNCkgXgotCSAgICAgKCh1NjQpaW5fa2V5WyA1XSA8PCAxNikgXgotCSAgICAgKCh1NjQpaW5fa2V5WyA2XSA8PCAgOCkgXgotCSAgICAgKCh1NjQpaW5fa2V5WyA3XSAgICAgICk7Ci0JSzEgPSAoKHU2NClpbl9rZXlbIDhdIDw8IDU2KSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDldIDw8IDQ4KSBeCi0JICAgICAoKHU2NClpbl9rZXlbMTBdIDw8IDQwKSBeCi0JICAgICAoKHU2NClpbl9rZXlbMTFdIDw8IDMyKSBeCi0JICAgICAoKHU2NClpbl9rZXlbMTJdIDw8IDI0KSBeCi0JICAgICAoKHU2NClpbl9rZXlbMTNdIDw8IDE2KSBeCi0JICAgICAoKHU2NClpbl9rZXlbMTRdIDw8ICA4KSBeCi0JICAgICAoKHU2NClpbl9rZXlbMTVdICAgICAgKTsKKwlLMiA9IGJlNjRfdG9fY3B1KGtleVswXSk7CisJSzEgPSBiZTY0X3RvX2NwdShrZXlbMV0pOwogCiAJLyogc2V0dXAgdGhlIGVuY3J5cHQga2V5ICovCiAJZm9yIChyID0gMDsgciA8PSBLSEFaQURfUk9VTkRTOyByKyspIHsKQEAgLTgyMCwxOSArODA4LDEyIEBACiBzdGF0aWMgdm9pZCBraGF6YWRfY3J5cHQoY29uc3QgdTY0IHJvdW5kS2V5W0tIQVpBRF9ST1VORFMgKyAxXSwKIAkJdTggKmNpcGhlcnRleHQsIGNvbnN0IHU4ICpwbGFpbnRleHQpCiB7Ci0KKwljb25zdCBfX2JlNjQgKnNyYyA9IChjb25zdCBfX2JlNjQgKilwbGFpbnRleHQ7CisJX19iZTY0ICpkc3QgPSAoX19iZTY0ICopY2lwaGVydGV4dDsKIAlpbnQgcjsKIAl1NjQgc3RhdGU7CiAKLQlzdGF0ZSA9ICgodTY0KXBsYWludGV4dFswXSA8PCA1NikgXgotCQkoKHU2NClwbGFpbnRleHRbMV0gPDwgNDgpIF4KLQkJKCh1NjQpcGxhaW50ZXh0WzJdIDw8IDQwKSBeCi0JCSgodTY0KXBsYWludGV4dFszXSA8PCAzMikgXgotCQkoKHU2NClwbGFpbnRleHRbNF0gPDwgMjQpIF4KLQkJKCh1NjQpcGxhaW50ZXh0WzVdIDw8IDE2KSBeCi0JCSgodTY0KXBsYWludGV4dFs2XSA8PCAgOCkgXgotCQkoKHU2NClwbGFpbnRleHRbN10gICAgICApIF4KLQkJcm91bmRLZXlbMF07CisJc3RhdGUgPSBiZTY0X3RvX2NwdSgqc3JjKSBeIHJvdW5kS2V5WzBdOwogCiAJZm9yIChyID0gMTsgciA8IEtIQVpBRF9ST1VORFM7IHIrKykgewogCQlzdGF0ZSA9IFQwWyhpbnQpKHN0YXRlID4+IDU2KSAgICAgICBdIF4KQEAgLTg1NiwxNSArODM3LDcgQEAKIAkJKFQ3WyhpbnQpKHN0YXRlICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSBeCiAJCXJvdW5kS2V5W0tIQVpBRF9ST1VORFNdOwogCi0JY2lwaGVydGV4dFswXSA9ICh1OCkoc3RhdGUgPj4gNTYpOwotCWNpcGhlcnRleHRbMV0gPSAodTgpKHN0YXRlID4+IDQ4KTsKLQljaXBoZXJ0ZXh0WzJdID0gKHU4KShzdGF0ZSA+PiA0MCk7Ci0JY2lwaGVydGV4dFszXSA9ICh1OCkoc3RhdGUgPj4gMzIpOwotCWNpcGhlcnRleHRbNF0gPSAodTgpKHN0YXRlID4+IDI0KTsKLQljaXBoZXJ0ZXh0WzVdID0gKHU4KShzdGF0ZSA+PiAxNik7Ci0JY2lwaGVydGV4dFs2XSA9ICh1OCkoc3RhdGUgPj4gIDgpOwotCWNpcGhlcnRleHRbN10gPSAodTgpKHN0YXRlICAgICAgKTsKLQorCSpkc3QgPSBjcHVfdG9fYmU2NChzdGF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGtoYXphZF9lbmNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCkBAIC04ODQsNiArODU3LDcgQEAKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JS0hBWkFEX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZiAoc3RydWN0IGtoYXphZF9jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9CTcsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGtoYXphZF9hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JeyAuY2lwaGVyID0gewpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNC5jIGIvY3J5cHRvL21kNC5jCmluZGV4IGJlZjZhOWUuLmEyZDZkZjUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tZDQuYworKysgYi9jcnlwdG8vbWQ0LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2RlZmluZSBNRDRfRElHRVNUX1NJWkUJCTE2CmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ1LmMgYi9jcnlwdG8vbWQ1LmMKaW5kZXggMWVkNDVmOS4uN2YwNDFhZSAxMDA2NDQKLS0tIGEvY3J5cHRvL21kNS5jCisrKyBiL2NyeXB0by9tZDUuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjZGVmaW5lIE1ENV9ESUdFU1RfU0laRQkJMTYKZGlmZiAtLWdpdCBhL2NyeXB0by9taWNoYWVsX21pYy5jIGIvY3J5cHRvL21pY2hhZWxfbWljLmMKaW5kZXggYTQ3MGJjYi4uNGY2YWIyMyAxMDA2NDQKLS0tIGEvY3J5cHRvL21pY2hhZWxfbWljLmMKKysrIGIvY3J5cHRvL21pY2hhZWxfbWljLmMKQEAgLTEwLDEwICsxMCwxMiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogCiBzdHJ1Y3QgbWljaGFlbF9taWNfY3R4IHsKQEAgLTQzLDIxICs0NSw2IEBACiB9IHdoaWxlICgwKQogCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9sZTMyKGNvbnN0IHU4ICpwKQotewotCXJldHVybiBwWzBdIHwgKHBbMV0gPDwgOCkgfCAocFsyXSA8PCAxNikgfCAocFszXSA8PCAyNCk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHB1dF9sZTMyKHU4ICpwLCB1MzIgdikKLXsKLQlwWzBdID0gdjsKLQlwWzFdID0gdiA+PiA4OwotCXBbMl0gPSB2ID4+IDE2OwotCXBbM10gPSB2ID4+IDI0OwotfQotCi0KIHN0YXRpYyB2b2lkIG1pY2hhZWxfaW5pdCh2b2lkICpjdHgpCiB7CiAJc3RydWN0IG1pY2hhZWxfbWljX2N0eCAqbWN0eCA9IGN0eDsKQEAgLTY4LDYgKzU1LDcgQEAKIHN0YXRpYyB2b2lkIG1pY2hhZWxfdXBkYXRlKHZvaWQgKmN0eCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc3RydWN0IG1pY2hhZWxfbWljX2N0eCAqbWN0eCA9IGN0eDsKKwljb25zdCBfX2xlMzIgKnNyYzsKIAogCWlmIChtY3R4LT5wZW5kaW5nX2xlbikgewogCQlpbnQgZmxlbiA9IDQgLSBtY3R4LT5wZW5kaW5nX2xlbjsKQEAgLTgxLDIxICs2OSwyMyBAQAogCQlpZiAobWN0eC0+cGVuZGluZ19sZW4gPCA0KQogCQkJcmV0dXJuOwogCi0JCW1jdHgtPmwgXj0gZ2V0X2xlMzIobWN0eC0+cGVuZGluZyk7CisJCXNyYyA9IChjb25zdCBfX2xlMzIgKiltY3R4LT5wZW5kaW5nOworCQltY3R4LT5sIF49IGxlMzJfdG9fY3B1cChzcmMpOwogCQltaWNoYWVsX2Jsb2NrKG1jdHgtPmwsIG1jdHgtPnIpOwogCQltY3R4LT5wZW5kaW5nX2xlbiA9IDA7CiAJfQogCisJc3JjID0gKGNvbnN0IF9fbGUzMiAqKWRhdGE7CisKIAl3aGlsZSAobGVuID49IDQpIHsKLQkJbWN0eC0+bCBePSBnZXRfbGUzMihkYXRhKTsKKwkJbWN0eC0+bCBePSBsZTMyX3RvX2NwdXAoc3JjKyspOwogCQltaWNoYWVsX2Jsb2NrKG1jdHgtPmwsIG1jdHgtPnIpOwotCQlkYXRhICs9IDQ7CiAJCWxlbiAtPSA0OwogCX0KIAogCWlmIChsZW4gPiAwKSB7CiAJCW1jdHgtPnBlbmRpbmdfbGVuID0gbGVuOwotCQltZW1jcHkobWN0eC0+cGVuZGluZywgZGF0YSwgbGVuKTsKKwkJbWVtY3B5KG1jdHgtPnBlbmRpbmcsIHNyYywgbGVuKTsKIAl9CiB9CiAKQEAgLTEwNCw2ICs5NCw3IEBACiB7CiAJc3RydWN0IG1pY2hhZWxfbWljX2N0eCAqbWN0eCA9IGN0eDsKIAl1OCAqZGF0YSA9IG1jdHgtPnBlbmRpbmc7CisJX19sZTMyICpkc3QgPSAoX19sZTMyICopb3V0OwogCiAJLyogTGFzdCBibG9jayBhbmQgcGFkZGluZyAoMHg1YSwgNC4uNyB4IDApICovCiAJc3dpdGNoIChtY3R4LT5wZW5kaW5nX2xlbikgewpAQCAtMTI1LDggKzExNiw4IEBACiAJLyogbCBePSAwOyAqLwogCW1pY2hhZWxfYmxvY2sobWN0eC0+bCwgbWN0eC0+cik7CiAKLQlwdXRfbGUzMihvdXQsIG1jdHgtPmwpOwotCXB1dF9sZTMyKG91dCArIDQsIG1jdHgtPnIpOworCWRzdFswXSA9IGNwdV90b19sZTMyKG1jdHgtPmwpOworCWRzdFsxXSA9IGNwdV90b19sZTMyKG1jdHgtPnIpOwogfQogCiAKQEAgLTEzNCwxMyArMTI1LDE2IEBACiAJCQkgIHUzMiAqZmxhZ3MpCiB7CiAJc3RydWN0IG1pY2hhZWxfbWljX2N0eCAqbWN0eCA9IGN0eDsKKwljb25zdCBfX2xlMzIgKmRhdGEgPSAoY29uc3QgX19sZTMyICopa2V5OworCiAJaWYgKGtleWxlbiAhPSA4KSB7CiAJCWlmIChmbGFncykKIAkJCSpmbGFncyA9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JbWN0eC0+bCA9IGdldF9sZTMyKGtleSk7Ci0JbWN0eC0+ciA9IGdldF9sZTMyKGtleSArIDQpOworCisJbWN0eC0+bCA9IGxlMzJfdG9fY3B1KGRhdGFbMF0pOworCW1jdHgtPnIgPSBsZTMyX3RvX2NwdShkYXRhWzFdKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Byb2MuYyBiL2NyeXB0by9wcm9jLmMKaW5kZXggNjMwYmE5MS4uYzBhNWRkNyAxMDA2NDQKLS0tIGEvY3J5cHRvL3Byb2MuYworKysgYi9jcnlwdG8vcHJvYy5jCkBAIC00LDYgKzQsNyBAQAogICogUHJvY2ZzIGluZm9ybWF0aW9uLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC0xOCw5ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjcnlwdG9fYWxnX2xpc3Q7Ci1leHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBjcnlwdG9fYWxnX3NlbTsKLQogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp2OwpAQCAtNTMsNyArNTEsOSBAQAogCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSAoc3RydWN0IGNyeXB0b19hbGcgKilwOwogCQogCXNlcV9wcmludGYobSwgIm5hbWUgICAgICAgICA6ICVzXG4iLCBhbGctPmNyYV9uYW1lKTsKKwlzZXFfcHJpbnRmKG0sICJkcml2ZXIgICAgICAgOiAlc1xuIiwgYWxnLT5jcmFfZHJpdmVyX25hbWUpOwogCXNlcV9wcmludGYobSwgIm1vZHVsZSAgICAgICA6ICVzXG4iLCBtb2R1bGVfbmFtZShhbGctPmNyYV9tb2R1bGUpKTsKKwlzZXFfcHJpbnRmKG0sICJwcmlvcml0eSAgICAgOiAlZFxuIiwgYWxnLT5jcmFfcHJpb3JpdHkpOwogCQogCXN3aXRjaCAoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgewogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0NJUEhFUjoKZGlmZiAtLWdpdCBhL2NyeXB0by9zZXJwZW50LmMgYi9jcnlwdG8vc2VycGVudC5jCmluZGV4IDNjZjJjNTAuLjUyYWQxYTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zZXJwZW50LmMKKysrIGIvY3J5cHRvL3NlcnBlbnQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIEtleSBpcyBwYWRkZWQgdG8gdGhlIG1heGltdW0gb2YgMjU2IGJpdHMgYmVmb3JlIHJvdW5kIGtleSBnZW5lcmF0aW9uLgogICogQW55IGtleSBsZW5ndGggPD0gMjU2IGJpdHMgKDMyIGJ5dGVzKSBpcyBhbGxvd2VkIGJ5IHRoZSBhbGdvcml0aG0uCkBAIC01NTIsNiArNTUzLDcgQEAKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JU0VSUEVOVF9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHNlcnBlbnRfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPQkzLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChzZXJwZW50X2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhMS5jIGIvY3J5cHRvL3NoYTEuYwppbmRleCA0MDE2ZjNiLi4yMTU3MWVkMyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYTEuYworKysgYi9jcnlwdG8vc2hhMS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKQEAgLTQ4LDIzICs0OSwzMyBAQAogc3RhdGljIHZvaWQgc2hhMV91cGRhdGUodm9pZCAqY3R4LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc2hhMV9jdHggKnNjdHggPSBjdHg7Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0JdTMyIHRlbXBbU0hBX1dPUktTUEFDRV9XT1JEU107CisJdW5zaWduZWQgaW50IHBhcnRpYWwsIGRvbmU7CisJY29uc3QgdTggKnNyYzsKIAotCWogPSAoc2N0eC0+Y291bnQgPj4gMykgJiAweDNmOwotCXNjdHgtPmNvdW50ICs9IGxlbiA8PCAzOworCXBhcnRpYWwgPSBzY3R4LT5jb3VudCAmIDB4M2Y7CisJc2N0eC0+Y291bnQgKz0gbGVuOworCWRvbmUgPSAwOworCXNyYyA9IGRhdGE7CiAKLQlpZiAoKGogKyBsZW4pID4gNjMpIHsKLQkJbWVtY3B5KCZzY3R4LT5idWZmZXJbal0sIGRhdGEsIChpID0gNjQtaikpOwotCQlzaGFfdHJhbnNmb3JtKHNjdHgtPnN0YXRlLCBzY3R4LT5idWZmZXIsIHRlbXApOwotCQlmb3IgKCA7IGkgKyA2MyA8IGxlbjsgaSArPSA2NCkgewotCQkJc2hhX3RyYW5zZm9ybShzY3R4LT5zdGF0ZSwgJmRhdGFbaV0sIHRlbXApOworCWlmICgocGFydGlhbCArIGxlbikgPiA2MykgeworCQl1MzIgdGVtcFtTSEFfV09SS1NQQUNFX1dPUkRTXTsKKworCQlpZiAocGFydGlhbCkgeworCQkJZG9uZSA9IC1wYXJ0aWFsOworCQkJbWVtY3B5KHNjdHgtPmJ1ZmZlciArIHBhcnRpYWwsIGRhdGEsIGRvbmUgKyA2NCk7CisJCQlzcmMgPSBzY3R4LT5idWZmZXI7CiAJCX0KLQkJaiA9IDA7CisKKwkJZG8geworCQkJc2hhX3RyYW5zZm9ybShzY3R4LT5zdGF0ZSwgc3JjLCB0ZW1wKTsKKwkJCWRvbmUgKz0gNjQ7CisJCQlzcmMgPSBkYXRhICsgZG9uZTsKKwkJfSB3aGlsZSAoZG9uZSArIDYzIDwgbGVuKTsKKworCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsKKwkJcGFydGlhbCA9IDA7CiAJfQotCWVsc2UgaSA9IDA7Ci0JbWVtc2V0KHRlbXAsIDAsIHNpemVvZih0ZW1wKSk7Ci0JbWVtY3B5KCZzY3R4LT5idWZmZXJbal0sICZkYXRhW2ldLCBsZW4gLSBpKTsKKwltZW1jcHkoc2N0eC0+YnVmZmVyICsgcGFydGlhbCwgc3JjLCBsZW4gLSBkb25lKTsKIH0KIAogCkBAIC03MiwzNyArODMsMjQgQEAKIHN0YXRpYyB2b2lkIHNoYTFfZmluYWwodm9pZCogY3R4LCB1OCAqb3V0KQogewogCXN0cnVjdCBzaGExX2N0eCAqc2N0eCA9IGN0eDsKLQl1MzIgaSwgaiwgaW5kZXgsIHBhZGxlbjsKLQl1NjQgdDsKLQl1OCBiaXRzWzhdID0geyAwLCB9OworCV9fYmUzMiAqZHN0ID0gKF9fYmUzMiAqKW91dDsKKwl1MzIgaSwgaW5kZXgsIHBhZGxlbjsKKwlfX2JlNjQgYml0czsKIAlzdGF0aWMgY29uc3QgdTggcGFkZGluZ1s2NF0gPSB7IDB4ODAsIH07CiAKLQl0ID0gc2N0eC0+Y291bnQ7Ci0JYml0c1s3XSA9IDB4ZmYgJiB0OyB0Pj49ODsKLQliaXRzWzZdID0gMHhmZiAmIHQ7IHQ+Pj04OwotCWJpdHNbNV0gPSAweGZmICYgdDsgdD4+PTg7Ci0JYml0c1s0XSA9IDB4ZmYgJiB0OyB0Pj49ODsKLQliaXRzWzNdID0gMHhmZiAmIHQ7IHQ+Pj04OwotCWJpdHNbMl0gPSAweGZmICYgdDsgdD4+PTg7Ci0JYml0c1sxXSA9IDB4ZmYgJiB0OyB0Pj49ODsKLQliaXRzWzBdID0gMHhmZiAmIHQ7CisJYml0cyA9IGNwdV90b19iZTY0KHNjdHgtPmNvdW50IDw8IDMpOwogCiAJLyogUGFkIG91dCB0byA1NiBtb2QgNjQgKi8KLQlpbmRleCA9IChzY3R4LT5jb3VudCA+PiAzKSAmIDB4M2Y7CisJaW5kZXggPSBzY3R4LT5jb3VudCAmIDB4M2Y7CiAJcGFkbGVuID0gKGluZGV4IDwgNTYpID8gKDU2IC0gaW5kZXgpIDogKCg2NCs1NikgLSBpbmRleCk7CiAJc2hhMV91cGRhdGUoc2N0eCwgcGFkZGluZywgcGFkbGVuKTsKIAogCS8qIEFwcGVuZCBsZW5ndGggKi8KLQlzaGExX3VwZGF0ZShzY3R4LCBiaXRzLCBzaXplb2YgYml0cyk7IAorCXNoYTFfdXBkYXRlKHNjdHgsIChjb25zdCB1OCAqKSZiaXRzLCBzaXplb2YoYml0cykpOwogCiAJLyogU3RvcmUgc3RhdGUgaW4gZGlnZXN0ICovCi0JZm9yIChpID0gaiA9IDA7IGkgPCA1OyBpKyssIGogKz0gNCkgewotCQl1MzIgdDIgPSBzY3R4LT5zdGF0ZVtpXTsKLQkJb3V0W2orM10gPSB0MiAmIDB4ZmY7IHQyPj49ODsKLQkJb3V0W2orMl0gPSB0MiAmIDB4ZmY7IHQyPj49ODsKLQkJb3V0W2orMV0gPSB0MiAmIDB4ZmY7IHQyPj49ODsKLQkJb3V0W2ogIF0gPSB0MiAmIDB4ZmY7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWRzdFtpXSA9IGNwdV90b19iZTMyKHNjdHgtPnN0YXRlW2ldKTsKIAogCS8qIFdpcGUgY29udGV4dCAqLwogCW1lbXNldChzY3R4LCAwLCBzaXplb2YgKnNjdHgpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTI1Ni5jIGIvY3J5cHRvL3NoYTI1Ni5jCmluZGV4IGM3OGRhNTAuLjlkNWVmNjcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEyNTYuYworKysgYi9jcnlwdG8vc2hhMjU2LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCkBAIC0yNzksMjIgKzI4MCwxNSBAQAogc3RhdGljIHZvaWQgc2hhMjU2X2ZpbmFsKHZvaWQqIGN0eCwgdTggKm91dCkKIHsKIAlzdHJ1Y3Qgc2hhMjU2X2N0eCAqc2N0eCA9IGN0eDsKLQl1OCBiaXRzWzhdOwotCXVuc2lnbmVkIGludCBpbmRleCwgcGFkX2xlbiwgdDsKLQlpbnQgaSwgajsKKwlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXQ7CisJX19iZTMyIGJpdHNbMl07CisJdW5zaWduZWQgaW50IGluZGV4LCBwYWRfbGVuOworCWludCBpOwogCXN0YXRpYyBjb25zdCB1OCBwYWRkaW5nWzY0XSA9IHsgMHg4MCwgfTsKIAogCS8qIFNhdmUgbnVtYmVyIG9mIGJpdHMgKi8KLQl0ID0gc2N0eC0+Y291bnRbMF07Ci0JYml0c1s3XSA9IHQ7IHQgPj49IDg7Ci0JYml0c1s2XSA9IHQ7IHQgPj49IDg7Ci0JYml0c1s1XSA9IHQ7IHQgPj49IDg7Ci0JYml0c1s0XSA9IHQ7Ci0JdCA9IHNjdHgtPmNvdW50WzFdOwotCWJpdHNbM10gPSB0OyB0ID4+PSA4OwotCWJpdHNbMl0gPSB0OyB0ID4+PSA4OwotCWJpdHNbMV0gPSB0OyB0ID4+PSA4OwotCWJpdHNbMF0gPSB0OworCWJpdHNbMV0gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFswXSk7CisJYml0c1swXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzFdKTsKIAogCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0LiAqLwogCWluZGV4ID0gKHNjdHgtPmNvdW50WzBdID4+IDMpICYgMHgzZjsKQEAgLTMwMiwxNiArMjk2LDExIEBACiAJc2hhMjU2X3VwZGF0ZShzY3R4LCBwYWRkaW5nLCBwYWRfbGVuKTsKIAogCS8qIEFwcGVuZCBsZW5ndGggKGJlZm9yZSBwYWRkaW5nKSAqLwotCXNoYTI1Nl91cGRhdGUoc2N0eCwgYml0cywgOCk7CisJc2hhMjU2X3VwZGF0ZShzY3R4LCAoY29uc3QgdTggKiliaXRzLCBzaXplb2YoYml0cykpOwogCiAJLyogU3RvcmUgc3RhdGUgaW4gZGlnZXN0ICovCi0JZm9yIChpID0gaiA9IDA7IGkgPCA4OyBpKyssIGogKz0gNCkgewotCQl0ID0gc2N0eC0+c3RhdGVbaV07Ci0JCW91dFtqKzNdID0gdDsgdCA+Pj0gODsKLQkJb3V0W2orMl0gPSB0OyB0ID4+PSA4OwotCQlvdXRbaisxXSA9IHQ7IHQgPj49IDg7Ci0JCW91dFtqICBdID0gdDsKLQl9CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZHN0W2ldID0gY3B1X3RvX2JlMzIoc2N0eC0+c3RhdGVbaV0pOwogCiAJLyogWmVyb2l6ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICovCiAJbWVtc2V0KHNjdHgsIDAsIHNpemVvZigqc2N0eCkpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTUxMi5jIGIvY3J5cHRvL3NoYTUxMi5jCmluZGV4IGM2NjM0MzguLjNlNmU5MzkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGE1MTIuYworKysgYi9jcnlwdG8vc2hhNTEyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtMjM1LDM5ICsyMzYsMTcgQEAKIHNoYTUxMl9maW5hbCh2b2lkICpjdHgsIHU4ICpoYXNoKQogewogICAgICAgICBzdHJ1Y3Qgc2hhNTEyX2N0eCAqc2N0eCA9IGN0eDsKLQkKICAgICAgICAgc3RhdGljIHU4IHBhZGRpbmdbMTI4XSA9IHsgMHg4MCwgfTsKLQotICAgICAgICB1MzIgdDsKLQl1NjQgdDI7Ci0gICAgICAgIHU4IGJpdHNbMTI4XTsKKwlfX2JlNjQgKmRzdCA9IChfX2JlNjQgKiloYXNoOworCV9fYmUzMiBiaXRzWzRdOwogCXVuc2lnbmVkIGludCBpbmRleCwgcGFkX2xlbjsKLQlpbnQgaSwgajsKLQotICAgICAgICBpbmRleCA9IHBhZF9sZW4gPSB0ID0gaSA9IGogPSAwOwotICAgICAgICB0MiA9IDA7CisJaW50IGk7CiAKIAkvKiBTYXZlIG51bWJlciBvZiBiaXRzICovCi0JdCA9IHNjdHgtPmNvdW50WzBdOwotCWJpdHNbMTVdID0gdDsgdD4+PTg7Ci0JYml0c1sxNF0gPSB0OyB0Pj49ODsKLQliaXRzWzEzXSA9IHQ7IHQ+Pj04OwotCWJpdHNbMTJdID0gdDsgCi0JdCA9IHNjdHgtPmNvdW50WzFdOwotCWJpdHNbMTFdID0gdDsgdD4+PTg7Ci0JYml0c1sxMF0gPSB0OyB0Pj49ODsKLQliaXRzWzkgXSA9IHQ7IHQ+Pj04OwotCWJpdHNbOCBdID0gdDsgCi0JdCA9IHNjdHgtPmNvdW50WzJdOwotCWJpdHNbNyBdID0gdDsgdD4+PTg7Ci0JYml0c1s2IF0gPSB0OyB0Pj49ODsKLQliaXRzWzUgXSA9IHQ7IHQ+Pj04OwotCWJpdHNbNCBdID0gdDsgCi0JdCA9IHNjdHgtPmNvdW50WzNdOwotCWJpdHNbMyBdID0gdDsgdD4+PTg7Ci0JYml0c1syIF0gPSB0OyB0Pj49ODsKLQliaXRzWzEgXSA9IHQ7IHQ+Pj04OwotCWJpdHNbMCBdID0gdDsgCisJYml0c1szXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzBdKTsKKwliaXRzWzJdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbMV0pOworCWJpdHNbMV0gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFsyXSk7CisJYml0c1swXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzNdKTsKIAogCS8qIFBhZCBvdXQgdG8gMTEyIG1vZCAxMjguICovCiAJaW5kZXggPSAoc2N0eC0+Y291bnRbMF0gPj4gMykgJiAweDdmOwpAQCAtMjc1LDIxICsyNTQsMTIgQEAKIAlzaGE1MTJfdXBkYXRlKHNjdHgsIHBhZGRpbmcsIHBhZF9sZW4pOwogCiAJLyogQXBwZW5kIGxlbmd0aCAoYmVmb3JlIHBhZGRpbmcpICovCi0Jc2hhNTEyX3VwZGF0ZShzY3R4LCBiaXRzLCAxNik7CisJc2hhNTEyX3VwZGF0ZShzY3R4LCAoY29uc3QgdTggKiliaXRzLCBzaXplb2YoYml0cykpOwogCiAJLyogU3RvcmUgc3RhdGUgaW4gZGlnZXN0ICovCi0JZm9yIChpID0gaiA9IDA7IGkgPCA4OyBpKyssIGogKz0gOCkgewotCQl0MiA9IHNjdHgtPnN0YXRlW2ldOwotCQloYXNoW2orN10gPSAoY2hhcil0MiAmIDB4ZmY7IHQyPj49ODsKLQkJaGFzaFtqKzZdID0gKGNoYXIpdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCWhhc2hbais1XSA9IChjaGFyKXQyICYgMHhmZjsgdDI+Pj04OwotCQloYXNoW2orNF0gPSAoY2hhcil0MiAmIDB4ZmY7IHQyPj49ODsKLQkJaGFzaFtqKzNdID0gKGNoYXIpdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCWhhc2hbaisyXSA9IChjaGFyKXQyICYgMHhmZjsgdDI+Pj04OwotCQloYXNoW2orMV0gPSAoY2hhcil0MiAmIDB4ZmY7IHQyPj49ODsKLQkJaGFzaFtqICBdID0gKGNoYXIpdDIgJiAweGZmOwotCX0KLQkKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlkc3RbaV0gPSBjcHVfdG9fYmU2NChzY3R4LT5zdGF0ZVtpXSk7CisKIAkvKiBaZXJvaXplIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gKi8KIAltZW1zZXQoc2N0eCwgMCwgc2l6ZW9mKHN0cnVjdCBzaGE1MTJfY3R4KSk7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVhLmMgYi9jcnlwdG8vdGVhLmMKaW5kZXggNTkyNGVmZC4uYTZhMDJiMyAxMDA2NDQKLS0tIGEvY3J5cHRvL3RlYS5jCisrKyBiL2NyeXB0by90ZWEuYwpAQCAtMjIsOCArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBURUFfS0VZX1NJWkUJCTE2CiAjZGVmaW5lIFRFQV9CTE9DS19TSVpFCQk4CkBAIC0zNSw5ICszNyw2IEBACiAjZGVmaW5lIFhURUFfUk9VTkRTCQkzMgogI2RlZmluZSBYVEVBX0RFTFRBCQkweDllMzc3OWI5CiAKLSNkZWZpbmUgdTMyX2luKHgpIGxlMzJfdG9fY3B1KCooY29uc3QgX19sZTMyICopKHgpKQotI2RlZmluZSB1MzJfb3V0KHRvLCBmcm9tKSAoKihfX2xlMzIgKikodG8pID0gY3B1X3RvX2xlMzIoZnJvbSkpCi0KIHN0cnVjdCB0ZWFfY3R4IHsKIAl1MzIgS0VZWzRdOwogfTsKQEAgLTQ5LDggKzQ4LDggQEAKIHN0YXRpYyBpbnQgdGVhX3NldGtleSh2b2lkICpjdHhfYXJnLCBjb25zdCB1OCAqaW5fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdTMyICpmbGFncykKIHsgCi0KIAlzdHJ1Y3QgdGVhX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7CiAJCiAJaWYgKGtleV9sZW4gIT0gMTYpCiAJewpAQCAtNTgsMTAgKzU3LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWN0eC0+S0VZWzBdID0gdTMyX2luIChpbl9rZXkpOwotCWN0eC0+S0VZWzFdID0gdTMyX2luIChpbl9rZXkgKyA0KTsKLQljdHgtPktFWVsyXSA9IHUzMl9pbiAoaW5fa2V5ICsgOCk7Ci0JY3R4LT5LRVlbM10gPSB1MzJfaW4gKGluX2tleSArIDEyKTsKKwljdHgtPktFWVswXSA9IGxlMzJfdG9fY3B1KGtleVswXSk7CisJY3R4LT5LRVlbMV0gPSBsZTMyX3RvX2NwdShrZXlbMV0pOworCWN0eC0+S0VZWzJdID0gbGUzMl90b19jcHUoa2V5WzJdKTsKKwljdHgtPktFWVszXSA9IGxlMzJfdG9fY3B1KGtleVszXSk7CiAKIAlyZXR1cm4gMDsgCiAKQEAgLTczLDkgKzcyLDExIEBACiAJdTMyIGswLCBrMSwgazIsIGszOwogCiAJc3RydWN0IHRlYV9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICppbiA9IChjb25zdCBfX2xlMzIgKilzcmM7CisJX19sZTMyICpvdXQgPSAoX19sZTMyICopZHN0OwogCi0JeSA9IHUzMl9pbiAoc3JjKTsKLQl6ID0gdTMyX2luIChzcmMgKyA0KTsKKwl5ID0gbGUzMl90b19jcHUoaW5bMF0pOworCXogPSBsZTMyX3RvX2NwdShpblsxXSk7CiAKIAlrMCA9IGN0eC0+S0VZWzBdOwogCWsxID0gY3R4LT5LRVlbMV07CkBAIC05MCwxOSArOTEsMjAgQEAKIAkJeiArPSAoKHkgPDwgNCkgKyBrMikgXiAoeSArIHN1bSkgXiAoKHkgPj4gNSkgKyBrMyk7CiAJfQogCQotCXUzMl9vdXQgKGRzdCwgeSk7Ci0JdTMyX291dCAoZHN0ICsgNCwgeik7CisJb3V0WzBdID0gY3B1X3RvX2xlMzIoeSk7CisJb3V0WzFdID0gY3B1X3RvX2xlMzIoeik7CiB9CiAKIHN0YXRpYyB2b2lkIHRlYV9kZWNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7IAogCXUzMiB5LCB6LCBuLCBzdW07CiAJdTMyIGswLCBrMSwgazIsIGszOwotCiAJc3RydWN0IHRlYV9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICppbiA9IChjb25zdCBfX2xlMzIgKilzcmM7CisJX19sZTMyICpvdXQgPSAoX19sZTMyICopZHN0OwogCi0JeSA9IHUzMl9pbiAoc3JjKTsKLQl6ID0gdTMyX2luIChzcmMgKyA0KTsKKwl5ID0gbGUzMl90b19jcHUoaW5bMF0pOworCXogPSBsZTMyX3RvX2NwdShpblsxXSk7CiAKIAlrMCA9IGN0eC0+S0VZWzBdOwogCWsxID0gY3R4LT5LRVlbMV07CkBAIC0xMTksMTYgKzEyMSwxNSBAQAogCQlzdW0gLT0gVEVBX0RFTFRBOwogCX0KIAkKLQl1MzJfb3V0IChkc3QsIHkpOwotCXUzMl9vdXQgKGRzdCArIDQsIHopOwotCisJb3V0WzBdID0gY3B1X3RvX2xlMzIoeSk7CisJb3V0WzFdID0gY3B1X3RvX2xlMzIoeik7CiB9CiAKIHN0YXRpYyBpbnQgeHRlYV9zZXRrZXkodm9pZCAqY3R4X2FyZywgY29uc3QgdTggKmluX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCiB7IAotCiAJc3RydWN0IHh0ZWFfY3R4ICpjdHggPSBjdHhfYXJnOworCWNvbnN0IF9fbGUzMiAqa2V5ID0gKGNvbnN0IF9fbGUzMiAqKWluX2tleTsKIAkKIAlpZiAoa2V5X2xlbiAhPSAxNikKIAl7CkBAIC0xMzYsMTAgKzEzNywxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljdHgtPktFWVswXSA9IHUzMl9pbiAoaW5fa2V5KTsKLQljdHgtPktFWVsxXSA9IHUzMl9pbiAoaW5fa2V5ICsgNCk7Ci0JY3R4LT5LRVlbMl0gPSB1MzJfaW4gKGluX2tleSArIDgpOwotCWN0eC0+S0VZWzNdID0gdTMyX2luIChpbl9rZXkgKyAxMik7CisJY3R4LT5LRVlbMF0gPSBsZTMyX3RvX2NwdShrZXlbMF0pOworCWN0eC0+S0VZWzFdID0gbGUzMl90b19jcHUoa2V5WzFdKTsKKwljdHgtPktFWVsyXSA9IGxlMzJfdG9fY3B1KGtleVsyXSk7CisJY3R4LT5LRVlbM10gPSBsZTMyX3RvX2NwdShrZXlbM10pOwogCiAJcmV0dXJuIDA7IAogCkBAIC0xNDcsMTQgKzE0OCwxNSBAQAogCiBzdGF0aWMgdm9pZCB4dGVhX2VuY3J5cHQodm9pZCAqY3R4X2FyZywgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsgCi0KIAl1MzIgeSwgeiwgc3VtID0gMDsKIAl1MzIgbGltaXQgPSBYVEVBX0RFTFRBICogWFRFQV9ST1VORFM7CiAKIAlzdHJ1Y3QgeHRlYV9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICppbiA9IChjb25zdCBfX2xlMzIgKilzcmM7CisJX19sZTMyICpvdXQgPSAoX19sZTMyICopZHN0OwogCi0JeSA9IHUzMl9pbiAoc3JjKTsKLQl6ID0gdTMyX2luIChzcmMgKyA0KTsKKwl5ID0gbGUzMl90b19jcHUoaW5bMF0pOworCXogPSBsZTMyX3RvX2NwdShpblsxXSk7CiAKIAl3aGlsZSAoc3VtICE9IGxpbWl0KSB7CiAJCXkgKz0gKCh6IDw8IDQgXiB6ID4+IDUpICsgeikgXiAoc3VtICsgY3R4LT5LRVlbc3VtJjNdKTsgCkBAIC0xNjIsMTkgKzE2NCwxOSBAQAogCQl6ICs9ICgoeSA8PCA0IF4geSA+PiA1KSArIHkpIF4gKHN1bSArIGN0eC0+S0VZW3N1bT4+MTEgJjNdKTsgCiAJfQogCQotCXUzMl9vdXQgKGRzdCwgeSk7Ci0JdTMyX291dCAoZHN0ICsgNCwgeik7Ci0KKwlvdXRbMF0gPSBjcHVfdG9fbGUzMih5KTsKKwlvdXRbMV0gPSBjcHVfdG9fbGUzMih6KTsKIH0KIAogc3RhdGljIHZvaWQgeHRlYV9kZWNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7IAotCiAJdTMyIHksIHosIHN1bTsKIAlzdHJ1Y3QgdGVhX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKmluID0gKGNvbnN0IF9fbGUzMiAqKXNyYzsKKwlfX2xlMzIgKm91dCA9IChfX2xlMzIgKilkc3Q7CiAKLQl5ID0gdTMyX2luIChzcmMpOwotCXogPSB1MzJfaW4gKHNyYyArIDQpOworCXkgPSBsZTMyX3RvX2NwdShpblswXSk7CisJeiA9IGxlMzJfdG9fY3B1KGluWzFdKTsKIAogCXN1bSA9IFhURUFfREVMVEEgKiBYVEVBX1JPVU5EUzsKIApAQCAtMTg0LDIyICsxODYsMjIgQEAKIAkJeSAtPSAoKHogPDwgNCBeIHogPj4gNSkgKyB6KSBeIChzdW0gKyBjdHgtPktFWVtzdW0gJiAzXSk7CiAJfQogCQotCXUzMl9vdXQgKGRzdCwgeSk7Ci0JdTMyX291dCAoZHN0ICsgNCwgeik7Ci0KKwlvdXRbMF0gPSBjcHVfdG9fbGUzMih5KTsKKwlvdXRbMV0gPSBjcHVfdG9fbGUzMih6KTsKIH0KIAogCiBzdGF0aWMgdm9pZCB4ZXRhX2VuY3J5cHQodm9pZCAqY3R4X2FyZywgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsgCi0KIAl1MzIgeSwgeiwgc3VtID0gMDsKIAl1MzIgbGltaXQgPSBYVEVBX0RFTFRBICogWFRFQV9ST1VORFM7CiAKIAlzdHJ1Y3QgeHRlYV9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICppbiA9IChjb25zdCBfX2xlMzIgKilzcmM7CisJX19sZTMyICpvdXQgPSAoX19sZTMyICopZHN0OwogCi0JeSA9IHUzMl9pbiAoc3JjKTsKLQl6ID0gdTMyX2luIChzcmMgKyA0KTsKKwl5ID0gbGUzMl90b19jcHUoaW5bMF0pOworCXogPSBsZTMyX3RvX2NwdShpblsxXSk7CiAKIAl3aGlsZSAoc3VtICE9IGxpbWl0KSB7CiAJCXkgKz0gKHogPDwgNCBeIHogPj4gNSkgKyAoeiBeIHN1bSkgKyBjdHgtPktFWVtzdW0mM107CkBAIC0yMDcsMTkgKzIwOSwxOSBAQAogCQl6ICs9ICh5IDw8IDQgXiB5ID4+IDUpICsgKHkgXiBzdW0pICsgY3R4LT5LRVlbc3VtPj4xMSAmM107CiAJfQogCQotCXUzMl9vdXQgKGRzdCwgeSk7Ci0JdTMyX291dCAoZHN0ICsgNCwgeik7Ci0KKwlvdXRbMF0gPSBjcHVfdG9fbGUzMih5KTsKKwlvdXRbMV0gPSBjcHVfdG9fbGUzMih6KTsKIH0KIAogc3RhdGljIHZvaWQgeGV0YV9kZWNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7IAotCiAJdTMyIHksIHosIHN1bTsKIAlzdHJ1Y3QgdGVhX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKmluID0gKGNvbnN0IF9fbGUzMiAqKXNyYzsKKwlfX2xlMzIgKm91dCA9IChfX2xlMzIgKilkc3Q7CiAKLQl5ID0gdTMyX2luIChzcmMpOwotCXogPSB1MzJfaW4gKHNyYyArIDQpOworCXkgPSBsZTMyX3RvX2NwdShpblswXSk7CisJeiA9IGxlMzJfdG9fY3B1KGluWzFdKTsKIAogCXN1bSA9IFhURUFfREVMVEEgKiBYVEVBX1JPVU5EUzsKIApAQCAtMjI5LDkgKzIzMSw4IEBACiAJCXkgLT0gKHogPDwgNCBeIHogPj4gNSkgKyAoeiBeIHN1bSkgKyBjdHgtPktFWVtzdW0gJiAzXTsKIAl9CiAJCi0JdTMyX291dCAoZHN0LCB5KTsKLQl1MzJfb3V0IChkc3QgKyA0LCB6KTsKLQorCW91dFswXSA9IGNwdV90b19sZTMyKHkpOworCW91dFsxXSA9IGNwdV90b19sZTMyKHopOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgdGVhX2FsZyA9IHsKQEAgLTIzOSw2ICsyNDAsNyBAQAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlURUFfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mIChzdHJ1Y3QgdGVhX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JMywKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQodGVhX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CkBAIC0yNTQsNiArMjU2LDcgQEAKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JWFRFQV9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2YgKHN0cnVjdCB4dGVhX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JMywKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoeHRlYV9hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JeyAuY2lwaGVyID0gewpAQCAtMjY5LDYgKzI3Miw3IEBACiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CVhURUFfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mIChzdHJ1Y3QgeHRlYV9jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9CTMsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKHh0ZWFfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsgLmNpcGhlciA9IHsKZGlmZiAtLWdpdCBhL2NyeXB0by90Z3IxOTIuYyBiL2NyeXB0by90Z3IxOTIuYwppbmRleCBmMGE0NWNmLi4yZDhlNDRmIDEwMDY0NAotLS0gYS9jcnlwdG8vdGdyMTkyLmMKKysrIGIvY3J5cHRvL3RncjE5Mi5jCkBAIC0yNCw4ICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIFRHUjE5Ml9ESUdFU1RfU0laRSAyNAogI2RlZmluZSBUR1IxNjBfRElHRVNUX1NJWkUgMjAKQEAgLTQ2NywxOCArNDY5LDEwIEBACiAJdTY0IGEsIGIsIGMsIGFhLCBiYiwgY2M7CiAJdTY0IHhbOF07CiAJaW50IGk7Ci0JY29uc3QgdTggKnB0ciA9IGRhdGE7CisJY29uc3QgX19sZTY0ICpwdHIgPSAoY29uc3QgX19sZTY0ICopZGF0YTsKIAotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyssIHB0ciArPSA4KSB7Ci0JCXhbaV0gPSAoKCh1NjQpcHRyWzddICkgPDwgNTYpIF4KLQkJKCgodTY0KXB0cls2XSAmIDB4ZmZMKSA8PCA0OCkgXgotCQkoKCh1NjQpcHRyWzVdICYgMHhmZkwpIDw8IDQwKSBeCi0JCSgoKHU2NClwdHJbNF0gJiAweGZmTCkgPDwgMzIpIF4KLQkJKCgodTY0KXB0clszXSAmIDB4ZmZMKSA8PCAyNCkgXgotCQkoKCh1NjQpcHRyWzJdICYgMHhmZkwpIDw8IDE2KSBeCi0JCSgoKHU2NClwdHJbMV0gJiAweGZmTCkgPDwgIDgpIF4KLQkJKCgodTY0KXB0clswXSAmIDB4ZmZMKSAgICAgICk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXhbaV0gPSBsZTY0X3RvX2NwdShwdHJbaV0pOwogCiAJLyogc2F2ZSAqLwogCWEgPSBhYSA9IHRjdHgtPmE7CkBAIC01NTgsOSArNTUyLDEwIEBACiBzdGF0aWMgdm9pZCB0Z3IxOTJfZmluYWwodm9pZCAqY3R4LCB1OCAqIG91dCkKIHsKIAlzdHJ1Y3QgdGdyMTkyX2N0eCAqdGN0eCA9IGN0eDsKKwlfX2JlNjQgKmRzdCA9IChfX2JlNjQgKilvdXQ7CisJX19iZTY0ICpiZTY0cDsKKwlfX2xlMzIgKmxlMzJwOwogCXUzMiB0LCBtc2IsIGxzYjsKLQl1OCAqcDsKLQlpbnQgaSwgajsKIAogCXRncjE5Ml91cGRhdGUodGN0eCwgTlVMTCwgMCk7IC8qIGZsdXNoICovIDsKIApAQCAtNTk0LDQxICs1ODksMTYgQEAKIAkJbWVtc2V0KHRjdHgtPmhhc2gsIDAsIDU2KTsgICAgLyogZmlsbCBuZXh0IGJsb2NrIHdpdGggemVyb2VzICovCiAJfQogCS8qIGFwcGVuZCB0aGUgNjQgYml0IGNvdW50ICovCi0JdGN0eC0+aGFzaFs1Nl0gPSBsc2I7Ci0JdGN0eC0+aGFzaFs1N10gPSBsc2IgPj4gODsKLQl0Y3R4LT5oYXNoWzU4XSA9IGxzYiA+PiAxNjsKLQl0Y3R4LT5oYXNoWzU5XSA9IGxzYiA+PiAyNDsKLQl0Y3R4LT5oYXNoWzYwXSA9IG1zYjsKLQl0Y3R4LT5oYXNoWzYxXSA9IG1zYiA+PiA4OwotCXRjdHgtPmhhc2hbNjJdID0gbXNiID4+IDE2OwotCXRjdHgtPmhhc2hbNjNdID0gbXNiID4+IDI0OworCWxlMzJwID0gKF9fbGUzMiAqKSZ0Y3R4LT5oYXNoWzU2XTsKKwlsZTMycFswXSA9IGNwdV90b19sZTMyKGxzYik7CisJbGUzMnBbMV0gPSBjcHVfdG9fbGUzMihtc2IpOworCiAJdGdyMTkyX3RyYW5zZm9ybSh0Y3R4LCB0Y3R4LT5oYXNoKTsKIAotCXAgPSB0Y3R4LT5oYXNoOwotCSpwKysgPSB0Y3R4LT5hID4+IDU2OyAqcCsrID0gdGN0eC0+YSA+PiA0ODsgKnArKyA9IHRjdHgtPmEgPj4gNDA7Ci0JKnArKyA9IHRjdHgtPmEgPj4gMzI7ICpwKysgPSB0Y3R4LT5hID4+IDI0OyAqcCsrID0gdGN0eC0+YSA+PiAxNjsKLQkqcCsrID0gdGN0eC0+YSA+PiAgODsgKnArKyA9IHRjdHgtPmE7XAotCSpwKysgPSB0Y3R4LT5iID4+IDU2OyAqcCsrID0gdGN0eC0+YiA+PiA0ODsgKnArKyA9IHRjdHgtPmIgPj4gNDA7Ci0JKnArKyA9IHRjdHgtPmIgPj4gMzI7ICpwKysgPSB0Y3R4LT5iID4+IDI0OyAqcCsrID0gdGN0eC0+YiA+PiAxNjsKLQkqcCsrID0gdGN0eC0+YiA+PiAgODsgKnArKyA9IHRjdHgtPmI7Ci0JKnArKyA9IHRjdHgtPmMgPj4gNTY7ICpwKysgPSB0Y3R4LT5jID4+IDQ4OyAqcCsrID0gdGN0eC0+YyA+PiA0MDsKLQkqcCsrID0gdGN0eC0+YyA+PiAzMjsgKnArKyA9IHRjdHgtPmMgPj4gMjQ7ICpwKysgPSB0Y3R4LT5jID4+IDE2OwotCSpwKysgPSB0Y3R4LT5jID4+ICA4OyAqcCsrID0gdGN0eC0+YzsKLQotCi0JLyogdW5wYWNrIHRoZSBoYXNoICovCi0JaiA9IDc7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlvdXRbai0tXSA9ICh0Y3R4LT5hID4+IDggKiBpKSAmIDB4ZmY7Ci0JfQotCWogPSAxNTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCW91dFtqLS1dID0gKHRjdHgtPmIgPj4gOCAqIGkpICYgMHhmZjsKLQl9Ci0JaiA9IDIzOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJb3V0W2otLV0gPSAodGN0eC0+YyA+PiA4ICogaSkgJiAweGZmOwotCX0KKwliZTY0cCA9IChfX2JlNjQgKil0Y3R4LT5oYXNoOworCWRzdFswXSA9IGJlNjRwWzBdID0gY3B1X3RvX2JlNjQodGN0eC0+YSk7CisJZHN0WzFdID0gYmU2NHBbMV0gPSBjcHVfdG9fYmU2NCh0Y3R4LT5iKTsKKwlkc3RbMl0gPSBiZTY0cFsyXSA9IGNwdV90b19iZTY0KHRjdHgtPmMpOwogfQogCiBzdGF0aWMgdm9pZCB0Z3IxNjBfZmluYWwodm9pZCAqY3R4LCB1OCAqIG91dCkKZGlmZiAtLWdpdCBhL2NyeXB0by90d29maXNoLmMgYi9jcnlwdG8vdHdvZmlzaC5jCmluZGV4IDRlZmZmOGMuLmEyNmQ4ODUgMTAwNjQ0Ci0tLSBhL2NyeXB0by90d29maXNoLmMKKysrIGIvY3J5cHRvL3R3b2Zpc2guYwpAQCAtMzcsNiArMzcsOCBAQAogICogQWJzdHJhY3QgQWxnZWJyYV8gYnkgSm9zZXBoIEEuIEdhbGxpYW4sIGVzcGVjaWFsbHkgY2hhcHRlciAyMiBpbiB0aGUKICAqIFRoaXJkIEVkaXRpb24uCiAgKi8KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTYyMSwxMyArNjIzLDExIEBACiAgKiB3aGl0ZW5pbmcgc3Via2V5IG51bWJlciBtLiAqLwogCiAjZGVmaW5lIElOUEFDSyhuLCB4LCBtKSBcCi0gICB4ID0gaW5bNCAqIChuKV0gXiAoaW5bNCAqIChuKSArIDFdIDw8IDgpIFwKLSAgICAgXiAoaW5bNCAqIChuKSArIDJdIDw8IDE2KSBeIChpbls0ICogKG4pICsgM10gPDwgMjQpIF4gY3R4LT53W21dCisgICB4ID0gbGUzMl90b19jcHUoc3JjW25dKSBeIGN0eC0+d1ttXQogCiAjZGVmaW5lIE9VVFVOUEFDSyhuLCB4LCBtKSBcCiAgICB4IF49IGN0eC0+d1ttXTsgXAotICAgb3V0WzQgKiAobildID0geDsgb3V0WzQgKiAobikgKyAxXSA9IHggPj4gODsgXAotICAgb3V0WzQgKiAobikgKyAyXSA9IHggPj4gMTY7IG91dFs0ICogKG4pICsgM10gPSB4ID4+IDI0CisgICBkc3Rbbl0gPSBjcHVfdG9fbGUzMih4KQogCiAjZGVmaW5lIFRGX01JTl9LRVlfU0laRSAxNgogI2RlZmluZSBURl9NQVhfS0VZX1NJWkUgMzIKQEAgLTgwNCw2ICs4MDQsOCBAQAogc3RhdGljIHZvaWQgdHdvZmlzaF9lbmNyeXB0KHZvaWQgKmN4LCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pCiB7CiAJc3RydWN0IHR3b2Zpc2hfY3R4ICpjdHggPSBjeDsKKwljb25zdCBfX2xlMzIgKnNyYyA9IChjb25zdCBfX2xlMzIgKilpbjsKKwlfX2xlMzIgKmRzdCA9IChfX2xlMzIgKilvdXQ7CiAKIAkvKiBUaGUgZm91ciAzMi1iaXQgY2h1bmtzIG9mIHRoZSB0ZXh0LiAqLwogCXUzMiBhLCBiLCBjLCBkOwpAQCAtODM5LDYgKzg0MSw4IEBACiBzdGF0aWMgdm9pZCB0d29maXNoX2RlY3J5cHQodm9pZCAqY3gsIHU4ICpvdXQsIGNvbnN0IHU4ICppbikKIHsKIAlzdHJ1Y3QgdHdvZmlzaF9jdHggKmN0eCA9IGN4OworCWNvbnN0IF9fbGUzMiAqc3JjID0gKGNvbnN0IF9fbGUzMiAqKWluOworCV9fbGUzMiAqZHN0ID0gKF9fbGUzMiAqKW91dDsKICAgCiAJLyogVGhlIGZvdXIgMzItYml0IGNodW5rcyBvZiB0aGUgdGV4dC4gKi8KIAl1MzIgYSwgYiwgYywgZDsKQEAgLTg3NSw2ICs4NzksNyBAQAogCS5jcmFfZmxhZ3MgICAgICAgICAgPSAgIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUgICAgICA9ICAgVEZfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUgICAgICAgID0gICBzaXplb2Yoc3RydWN0IHR3b2Zpc2hfY3R4KSwKKwkuY3JhX2FsaWdubWFzayAgICAgID0JMywKIAkuY3JhX21vZHVsZSAgICAgICAgID0gICBUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QgICAgICAgICAgID0gICBMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAogCS5jcmFfdSAgICAgICAgICAgICAgPSAgIHsgLmNpcGhlciA9IHsKZGlmZiAtLWdpdCBhL2NyeXB0by93cDUxMi5jIGIvY3J5cHRvL3dwNTEyLmMKaW5kZXggZmQ2ZTIwZS4uYjIyNmExMiAxMDA2NDQKLS0tIGEvY3J5cHRvL3dwNTEyLmMKKysrIGIvY3J5cHRvL3dwNTEyLmMKQEAgLTIyLDggKzIyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgV1A1MTJfRElHRVNUX1NJWkUgNjQKICNkZWZpbmUgV1AzODRfRElHRVNUX1NJWkUgNDgKQEAgLTc3OCwxOSArNzgwLDEwIEBACiAJdTY0IGJsb2NrWzhdOyAgICAvKiBtdShidWZmZXIpICovCiAJdTY0IHN0YXRlWzhdOyAgICAvKiB0aGUgY2lwaGVyIHN0YXRlICovCiAJdTY0IExbOF07Ci0JdTggKmJ1ZmZlciA9IHdjdHgtPmJ1ZmZlcjsKKwljb25zdCBfX2JlNjQgKmJ1ZmZlciA9IChjb25zdCBfX2JlNjQgKil3Y3R4LT5idWZmZXI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBidWZmZXIgKz0gOCkgewotCQlibG9ja1tpXSA9Ci0JCSgoKHU2NClidWZmZXJbMF0gICAgICAgICkgPDwgNTYpIF4KLQkJKCgodTY0KWJ1ZmZlclsxXSAmIDB4ZmZMKSA8PCA0OCkgXgotCQkoKCh1NjQpYnVmZmVyWzJdICYgMHhmZkwpIDw8IDQwKSBeCi0JCSgoKHU2NClidWZmZXJbM10gJiAweGZmTCkgPDwgMzIpIF4KLQkJKCgodTY0KWJ1ZmZlcls0XSAmIDB4ZmZMKSA8PCAyNCkgXgotCQkoKCh1NjQpYnVmZmVyWzVdICYgMHhmZkwpIDw8IDE2KSBeCi0JCSgoKHU2NClidWZmZXJbNl0gJiAweGZmTCkgPDwgIDgpIF4KLQkJKCgodTY0KWJ1ZmZlcls3XSAmIDB4ZmZMKSAgICAgICk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWJsb2NrW2ldID0gYmU2NF90b19jcHUoYnVmZmVyW2ldKTsKIAogCXN0YXRlWzBdID0gYmxvY2tbMF0gXiAoS1swXSA9IHdjdHgtPmhhc2hbMF0pOwogCXN0YXRlWzFdID0gYmxvY2tbMV0gXiAoS1sxXSA9IHdjdHgtPmhhc2hbMV0pOwpAQCAtMTA2OSw3ICsxMDYyLDcgQEAKICAgIAl1OCAqYml0TGVuZ3RoICAgPSB3Y3R4LT5iaXRMZW5ndGg7CiAgICAJaW50IGJ1ZmZlckJpdHMgID0gd2N0eC0+YnVmZmVyQml0czsKICAgIAlpbnQgYnVmZmVyUG9zICAgPSB3Y3R4LT5idWZmZXJQb3M7Ci0gICAJdTggKmRpZ2VzdCAgICAgID0gb3V0OworCV9fYmU2NCAqZGlnZXN0ICA9IChfX2JlNjQgKilvdXQ7CiAKICAgIAlidWZmZXJbYnVmZmVyUG9zXSB8PSAweDgwVSA+PiAoYnVmZmVyQml0cyAmIDcpOwogICAgCWJ1ZmZlclBvcysrOwpAQCAtMTA4OCwxNyArMTA4MSw4IEBACiAgICAJbWVtY3B5KCZidWZmZXJbV1A1MTJfQkxPQ0tfU0laRSAtIFdQNTEyX0xFTkdUSEJZVEVTXSwKIAkJICAgYml0TGVuZ3RoLCBXUDUxMl9MRU5HVEhCWVRFUyk7CiAgICAJd3A1MTJfcHJvY2Vzc19idWZmZXIod2N0eCk7Ci0gICAJZm9yIChpID0gMDsgaSA8IFdQNTEyX0RJR0VTVF9TSVpFLzg7IGkrKykgewotCQlkaWdlc3RbMF0gPSAodTgpKHdjdHgtPmhhc2hbaV0gPj4gNTYpOwotCQlkaWdlc3RbMV0gPSAodTgpKHdjdHgtPmhhc2hbaV0gPj4gNDgpOwotCQlkaWdlc3RbMl0gPSAodTgpKHdjdHgtPmhhc2hbaV0gPj4gNDApOwotCQlkaWdlc3RbM10gPSAodTgpKHdjdHgtPmhhc2hbaV0gPj4gMzIpOwotCQlkaWdlc3RbNF0gPSAodTgpKHdjdHgtPmhhc2hbaV0gPj4gMjQpOwotCQlkaWdlc3RbNV0gPSAodTgpKHdjdHgtPmhhc2hbaV0gPj4gMTYpOwotCQlkaWdlc3RbNl0gPSAodTgpKHdjdHgtPmhhc2hbaV0gPj4gIDgpOwotCQlkaWdlc3RbN10gPSAodTgpKHdjdHgtPmhhc2hbaV0gICAgICApOwotCQlkaWdlc3QgKz0gODsKLSAgIAl9CisJZm9yIChpID0gMDsgaSA8IFdQNTEyX0RJR0VTVF9TSVpFLzg7IGkrKykKKwkJZGlnZXN0W2ldID0gY3B1X3RvX2JlNjQod2N0eC0+aGFzaFtpXSk7CiAgICAJd2N0eC0+YnVmZmVyQml0cyAgID0gYnVmZmVyQml0czsKICAgIAl3Y3R4LT5idWZmZXJQb3MgICAgPSBidWZmZXJQb3M7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVzLmMKaW5kZXggMWJiZGQxNi4uODg5ODU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbWJhL2J1cy5jCisrKyBiL2RyaXZlcnMvYW1iYS9idXMuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKICNkZWZpbmUgdG9fYW1iYV9kZXZpY2UoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBhbWJhX2RldmljZSwgZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKaW5kZXggNzE0MDdjNS4uNjQ4MTlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYworKysgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCkBAIC05OSw5ICs5OSw2IEBACiAJcmV0dXJuIHggPj4gKG4gPDwgMyk7CiB9CiAKLSNkZWZpbmUgdWludDMyX3RfaW4oeCkgbGUzMl90b19jcHUoKihjb25zdCB1aW50MzJfdCAqKSh4KSkKLSNkZWZpbmUgdWludDMyX3Rfb3V0KHRvLCBmcm9tKSAoKih1aW50MzJfdCAqKSh0bykgPSBjcHVfdG9fbGUzMihmcm9tKSkKLQogI2RlZmluZSBFX0tFWSBjdHgtPkUKICNkZWZpbmUgRF9LRVkgY3R4LT5ECiAKQEAgLTI5NCw2ICsyOTEsNyBAQAogYWVzX3NldF9rZXkodm9pZCAqY3R4X2FyZywgY29uc3QgdWludDhfdCAqaW5fa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdWludDMyX3QgKmZsYWdzKQogewogCXN0cnVjdCBhZXNfY3R4ICpjdHggPSBhZXNfY3R4KGN0eF9hcmcpOworCWNvbnN0IF9fbGUzMiAqa2V5ID0gKGNvbnN0IF9fbGUzMiAqKWluX2tleTsKIAl1aW50MzJfdCBpLCB0LCB1LCB2LCB3OwogCXVpbnQzMl90IFBbQUVTX0VYVEVOREVEX0tFWV9TSVpFXTsKIAl1aW50MzJfdCByb3VuZHM7CkBAIC0zMTMsMTAgKzMxMSwxMCBAQAogCWN0eC0+RSA9IGN0eC0+ZV9kYXRhOwogCWN0eC0+RCA9IGN0eC0+ZV9kYXRhOwogCi0JRV9LRVlbMF0gPSB1aW50MzJfdF9pbiAoaW5fa2V5KTsKLQlFX0tFWVsxXSA9IHVpbnQzMl90X2luIChpbl9rZXkgKyA0KTsKLQlFX0tFWVsyXSA9IHVpbnQzMl90X2luIChpbl9rZXkgKyA4KTsKLQlFX0tFWVszXSA9IHVpbnQzMl90X2luIChpbl9rZXkgKyAxMik7CisJRV9LRVlbMF0gPSBsZTMyX3RvX2NwdShrZXlbMF0pOworCUVfS0VZWzFdID0gbGUzMl90b19jcHUoa2V5WzFdKTsKKwlFX0tFWVsyXSA9IGxlMzJfdG9fY3B1KGtleVsyXSk7CisJRV9LRVlbM10gPSBsZTMyX3RvX2NwdShrZXlbM10pOwogCiAJLyogUHJlcGFyZSBjb250cm9sIHdvcmRzLiAqLwogCW1lbXNldCgmY3R4LT5jd29yZCwgMCwgc2l6ZW9mKGN0eC0+Y3dvcmQpKTsKQEAgLTM0MywxNyArMzQxLDE3IEBACiAJCWJyZWFrOwogCiAJY2FzZSAyNDoKLQkJRV9LRVlbNF0gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgMTYpOwotCQl0ID0gRV9LRVlbNV0gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgMjApOworCQlFX0tFWVs0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7CisJCXQgPSBFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCiAJCQlsb29wNiAoaSk7CiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKLQkJRV9LRVlbNF0gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgMTYpOwotCQlFX0tFWVs1XSA9IHVpbnQzMl90X2luIChpbl9rZXkgKyAyMCk7Ci0JCUVfS0VZWzZdID0gdWludDMyX3RfaW4gKGluX2tleSArIDI0KTsKLQkJdCA9IEVfS0VZWzddID0gdWludDMyX3RfaW4gKGluX2tleSArIDI4KTsKKwkJRV9LRVlbNF0gPSBsZTMyX3RvX2NwdShpbl9rZXlbNF0pOworCQlFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGluX2tleVs1XSk7CisJCUVfS0VZWzZdID0gbGUzMl90b19jcHUoaW5fa2V5WzZdKTsKKwkJdCA9IEVfS0VZWzddID0gbGUzMl90b19jcHUoaW5fa2V5WzddKTsKIAkJZm9yIChpID0gMDsgaSA8IDc7ICsraSkKIAkJCWxvb3A4IChpKTsKIAkJYnJlYWs7CkBAIC00NjgsNiArNDY2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc19hbGcgPSB7CiAJLmNyYV9uYW1lCQk9CSJhZXMiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkiYWVzLXBhZGxvY2siLAorCS5jcmFfcHJpb3JpdHkJCT0JMzAwLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBhZXNfY3R4KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suaCBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suaAppbmRleCAzY2YyYjdhLi5iNzg0ODliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLmgKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay5oCkBAIC0xNyw3ICsxNyw3IEBACiAKIC8qIENvbnRyb2wgd29yZC4gKi8KIHN0cnVjdCBjd29yZCB7Ci0JaW50IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKKwl1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogCQlyb3VuZHM6NCwKIAkJYWxnbzozLAogCQlrZXlnZW46MSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2ExMTExcHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NhMTExMXBzMi5jCmluZGV4IDNmMGRmMzMuLmViZDk5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2ExMTExcHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zYTExMTFwczIuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jLmMgYi9kcml2ZXJzL21tYy9tbWMuYwppbmRleCA2Njk2ZjcxLi5iZmNhNWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWMuYworKysgYi9kcml2ZXJzL21tYy9tbWMuYwpAQCAtNDk1LDYgKzQ5NSw3IEBACiAKIAkJY2FzZSAyOiAvKiBNTUMgdjIuMCAtIHYyLjIgKi8KIAkJY2FzZSAzOiAvKiBNTUMgdjMuMSAtIHYzLjMgKi8KKwkJY2FzZSA0OiAvKiBNTUMgdjQgKi8KIAkJCWNhcmQtPmNpZC5tYW5maWQJPSBVTlNUVUZGX0JJVFMocmVzcCwgMTIwLCA4KTsKIAkJCWNhcmQtPmNpZC5vZW1pZAkJPSBVTlNUVUZGX0JJVFMocmVzcCwgMTA0LCAxNik7CiAJCQljYXJkLT5jaWQucHJvZF9uYW1lWzBdCT0gVU5TVFVGRl9CSVRTKHJlc3AsIDk2LCA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY19ibG9jay5jIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKaW5kZXggZDVmMjg5OC4uZjJjNDJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKQEAgLTE4Nyw3ICsxODcsMTMgQEAKIAkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1dSSVRFOwogCQkJYnJxLmRhdGEuYmxvY2tzID0gMTsKIAkJfQotCQlicnEubXJxLnN0b3AgPSBicnEuZGF0YS5ibG9ja3MgPiAxID8gJmJycS5zdG9wIDogTlVMTDsKKworCQlpZiAoYnJxLmRhdGEuYmxvY2tzID4gMSkgeworCQkJYnJxLmRhdGEuZmxhZ3MgfD0gTU1DX0RBVEFfTVVMVEk7CisJCQlicnEubXJxLnN0b3AgPSAmYnJxLnN0b3A7CisJCX0gZWxzZSB7CisJCQlicnEubXJxLnN0b3AgPSBOVUxMOworCQl9CiAKIAkJYnJxLmRhdGEuc2cgPSBtcS0+c2c7CiAJCWJycS5kYXRhLnNnX2xlbiA9IGJsa19ycV9tYXBfc2cocmVxLT5xLCByZXEsIGJycS5kYXRhLnNnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3dic2QuYyBiL2RyaXZlcnMvbW1jL3dic2QuYwppbmRleCA0ZjEzYmQyLi5mMjU3NTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy93YnNkLmMKKysrIGIvZHJpdmVycy9tbWMvd2JzZC5jCkBAIC05MCw3ICs5MCw3IEBACiAgKiBCYXNpYyBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2JzZF91bmxvY2tfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgaW5saW5lIHZvaWQgd2JzZF91bmxvY2tfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJQlVHX09OKGhvc3QtPmNvbmZpZyA9PSAwKTsKIApAQCAtOTgsMTQgKzk4LDE0IEBACiAJb3V0Yihob3N0LT51bmxvY2tfY29kZSwgaG9zdC0+Y29uZmlnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfbG9ja19jb25maWcoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2xvY2tfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJQlVHX09OKGhvc3QtPmNvbmZpZyA9PSAwKTsKIAogCW91dGIoTE9DS19DT0RFLCBob3N0LT5jb25maWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2JzZF93cml0ZV9jb25maWcoc3RydWN0IHdic2RfaG9zdCogaG9zdCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3dyaXRlX2NvbmZpZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCB1OCByZWcsIHU4IHZhbHVlKQogewogCUJVR19PTihob3N0LT5jb25maWcgPT0gMCk7CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCW91dGIodmFsdWUsIGhvc3QtPmNvbmZpZyArIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHU4IHdic2RfcmVhZF9jb25maWcoc3RydWN0IHdic2RfaG9zdCogaG9zdCwgdTggcmVnKQorc3RhdGljIGlubGluZSB1OCB3YnNkX3JlYWRfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHU4IHJlZykKIHsKIAlCVUdfT04oaG9zdC0+Y29uZmlnID09IDApOwogCkBAIC0xMjEsMTMgKzEyMSwxMyBAQAogCXJldHVybiBpbmIoaG9zdC0+Y29uZmlnICsgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3dyaXRlX2luZGV4KHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsIHU4IGluZGV4LCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3dyaXRlX2luZGV4KHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHU4IGluZGV4LCB1OCB2YWx1ZSkKIHsKIAlvdXRiKGluZGV4LCBob3N0LT5iYXNlICsgV0JTRF9JRFhSKTsKIAlvdXRiKHZhbHVlLCBob3N0LT5iYXNlICsgV0JTRF9EQVRBUik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggd2JzZF9yZWFkX2luZGV4KHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsIHU4IGluZGV4KQorc3RhdGljIGlubGluZSB1OCB3YnNkX3JlYWRfaW5kZXgoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgdTggaW5kZXgpCiB7CiAJb3V0YihpbmRleCwgaG9zdC0+YmFzZSArIFdCU0RfSURYUik7CiAJcmV0dXJuIGluYihob3N0LT5iYXNlICsgV0JTRF9EQVRBUik7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAqIENvbW1vbiByb3V0aW5lcwogICovCiAKLXN0YXRpYyB2b2lkIHdic2RfaW5pdF9kZXZpY2Uoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfaW5pdF9kZXZpY2Uoc3RydWN0IHdic2RfaG9zdCAqaG9zdCkKIHsKIAl1OCBzZXR1cCwgaWVyOwogCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlpbmIoaG9zdC0+YmFzZSArIFdCU0RfSVNSKTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9yZXNldChzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIHZvaWQgd2JzZF9yZXNldChzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCXU4IHNldHVwOwogCkBAIC0yMTEsMTQgKzIxMSwxMyBAQAogCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfU0VUVVAsIHNldHVwKTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9yZXF1ZXN0X2VuZChzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QqIG1ycSkKK3N0YXRpYyB2b2lkIHdic2RfcmVxdWVzdF9lbmQoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBkbWFmbGFnczsKIAogCURCR0YoIkVuZGluZyByZXF1ZXN0LCBjbWQgKCV4KVxuIiwgbXJxLT5jbWQtPm9wY29kZSk7CiAKLQlpZiAoaG9zdC0+ZG1hID49IDApCi0JeworCWlmIChob3N0LT5kbWEgPj0gMCkgewogCQkvKgogCQkgKiBSZWxlYXNlIElTQSBETUEgY29udHJvbGxlci4KIAkJICovCkBAIC0yNDcsNyArMjQ2LDcgQEAKICAqIFNjYXR0ZXIvZ2F0aGVyIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2luaXRfc2coc3RydWN0IHdic2RfaG9zdCogaG9zdCwgc3RydWN0IG1tY19kYXRhKiBkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHdic2RfaW5pdF9zZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJLyoKIAkgKiBHZXQgaW5mby4gYWJvdXQgU0cgbGlzdCBmcm9tIGRhdGEgc3RydWN0dXJlLgpAQCAtMjU5LDcgKzI1OCw3IEBACiAJaG9zdC0+cmVtYWluID0gaG9zdC0+Y3VyX3NnLT5sZW5ndGg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHdic2RfbmV4dF9zZyhzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIGlubGluZSBpbnQgd2JzZF9uZXh0X3NnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJLyoKIAkgKiBTa2lwIHRvIG5leHQgU0cgZW50cnkuCkBAIC0yNzAsMzMgKzI2OSwzMiBAQAogCS8qCiAJICogQW55IGVudHJpZXMgbGVmdD8KIAkgKi8KLQlpZiAoaG9zdC0+bnVtX3NnID4gMCkKLQkgIHsKLQkgICAgaG9zdC0+b2Zmc2V0ID0gMDsKLQkgICAgaG9zdC0+cmVtYWluID0gaG9zdC0+Y3VyX3NnLT5sZW5ndGg7Ci0JICB9CisJaWYgKGhvc3QtPm51bV9zZyA+IDApIHsKKwkJaG9zdC0+b2Zmc2V0ID0gMDsKKwkJaG9zdC0+cmVtYWluID0gaG9zdC0+Y3VyX3NnLT5sZW5ndGg7CisJfQogCiAJcmV0dXJuIGhvc3QtPm51bV9zZzsKIH0KIAotc3RhdGljIGlubGluZSBjaGFyKiB3YnNkX2ttYXBfc2coc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbmxpbmUgY2hhciAqd2JzZF9rbWFwX3NnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJaG9zdC0+bWFwcGVkX3NnID0ga21hcF9hdG9taWMoaG9zdC0+Y3VyX3NnLT5wYWdlLCBLTV9CSU9fU1JDX0lSUSkgKwogCQlob3N0LT5jdXJfc2ctPm9mZnNldDsKIAlyZXR1cm4gaG9zdC0+bWFwcGVkX3NnOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2JzZF9rdW5tYXBfc2coc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2t1bm1hcF9zZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWt1bm1hcF9hdG9taWMoaG9zdC0+bWFwcGVkX3NnLCBLTV9CSU9fU1JDX0lSUSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3NnX3RvX2RtYShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2RhdGEqIGRhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgd2JzZF9zZ190b19kbWEoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCXVuc2lnbmVkIGludCBsZW4sIGksIHNpemU7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0KiBzZzsKLQljaGFyKiBkbWFidWYgPSBob3N0LT5kbWFfYnVmZmVyOwotCWNoYXIqIHNnYnVmOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJY2hhciAqZG1hYnVmID0gaG9zdC0+ZG1hX2J1ZmZlcjsKKwljaGFyICpzZ2J1ZjsKIAogCXNpemUgPSBob3N0LT5zaXplOwogCkBAIC0zMDgsOCArMzA2LDcgQEAKIAkgKiBiZSB0aGUgZW50aXJlIGxpc3QgdGhvdWdoIHNvIG1ha2Ugc3VyZSB0aGF0CiAJICogd2UgZG8gbm90IHRyYW5zZmVyIHRvbyBtdWNoLgogCSAqLwotCWZvciAoaSA9IDA7aSA8IGxlbjtpKyspCi0JeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlzZ2J1ZiA9IGttYXBfYXRvbWljKHNnW2ldLnBhZ2UsIEtNX0JJT19TUkNfSVJRKSArIHNnW2ldLm9mZnNldDsKIAkJaWYgKHNpemUgPCBzZ1tpXS5sZW5ndGgpCiAJCQltZW1jcHkoZG1hYnVmLCBzZ2J1Ziwgc2l6ZSk7CkBAIC0zMzcsMTIgKzMzNCwxMiBAQAogCWhvc3QtPnNpemUgLT0gc2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfZG1hX3RvX3NnKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsIHN0cnVjdCBtbWNfZGF0YSogZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2RtYV90b19zZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgaW50IGxlbiwgaSwgc2l6ZTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QqIHNnOwotCWNoYXIqIGRtYWJ1ZiA9IGhvc3QtPmRtYV9idWZmZXI7Ci0JY2hhciogc2didWY7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwljaGFyICpkbWFidWYgPSBob3N0LT5kbWFfYnVmZmVyOworCWNoYXIgKnNnYnVmOwogCiAJc2l6ZSA9IGhvc3QtPnNpemU7CiAKQEAgLTM1NCw4ICszNTEsNyBAQAogCSAqIGJlIHRoZSBlbnRpcmUgbGlzdCB0aG91Z2ggc28gbWFrZSBzdXJlIHRoYXQKIAkgKiB3ZSBkbyBub3QgdHJhbnNmZXIgdG9vIG11Y2guCiAJICovCi0JZm9yIChpID0gMDtpIDwgbGVuO2krKykKLQl7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXNnYnVmID0ga21hcF9hdG9taWMoc2dbaV0ucGFnZSwgS01fQklPX1NSQ19JUlEpICsgc2dbaV0ub2Zmc2V0OwogCQlpZiAoc2l6ZSA8IHNnW2ldLmxlbmd0aCkKIAkJCW1lbWNweShzZ2J1ZiwgZG1hYnVmLCBzaXplKTsKQEAgLTM4Nyw0NiArMzgzLDM4IEBACiAgKiBDb21tYW5kIGhhbmRsaW5nCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfZ2V0X3Nob3J0X3JlcGx5KHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsCi0Jc3RydWN0IG1tY19jb21tYW5kKiBjbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgd2JzZF9nZXRfc2hvcnRfcmVwbHkoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwKKwkJCQkJc3RydWN0IG1tY19jb21tYW5kICpjbWQpCiB7CiAJLyoKIAkgKiBDb3JyZWN0IHJlc3BvbnNlIHR5cGU/CiAJICovCi0JaWYgKHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SU1BMRU4pICE9IFdCU0RfUlNQX1NIT1JUKQotCXsKKwlpZiAod2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JTUExFTikgIT0gV0JTRF9SU1BfU0hPUlQpIHsKIAkJY21kLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJcmV0dXJuOwogCX0KIAotCWNtZC0+cmVzcFswXSA9Ci0JCXdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SRVNQMTIpIDw8IDI0OwotCWNtZC0+cmVzcFswXSB8PQotCQl3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDEzKSA8PCAxNjsKLQljbWQtPnJlc3BbMF0gfD0KLQkJd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JFU1AxNCkgPDwgODsKLQljbWQtPnJlc3BbMF0gfD0KLQkJd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JFU1AxNSkgPDwgMDsKLQljbWQtPnJlc3BbMV0gPQotCQl3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE2KSA8PCAyNDsKKwljbWQtPnJlc3BbMF0gID0gd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JFU1AxMikgPDwgMjQ7CisJY21kLT5yZXNwWzBdIHw9IHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SRVNQMTMpIDw8IDE2OworCWNtZC0+cmVzcFswXSB8PSB3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE0KSA8PCA4OworCWNtZC0+cmVzcFswXSB8PSB3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE1KSA8PCAwOworCWNtZC0+cmVzcFsxXSAgPSB3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE2KSA8PCAyNDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfZ2V0X2xvbmdfcmVwbHkoc3RydWN0IHdic2RfaG9zdCogaG9zdCwKLQlzdHJ1Y3QgbW1jX2NvbW1hbmQqIGNtZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2dldF9sb25nX3JlcGx5KHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsCisJc3RydWN0IG1tY19jb21tYW5kICpjbWQpCiB7CiAJaW50IGk7CiAKIAkvKgogCSAqIENvcnJlY3QgcmVzcG9uc2UgdHlwZT8KIAkgKi8KLQlpZiAod2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JTUExFTikgIT0gV0JTRF9SU1BfTE9ORykKLQl7CisJaWYgKHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SU1BMRU4pICE9IFdCU0RfUlNQX0xPTkcpIHsKIAkJY21kLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJcmV0dXJuOwogCX0KIAotCWZvciAoaSA9IDA7aSA8IDQ7aSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWNtZC0+cmVzcFtpXSA9CiAJCQl3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDEgKyBpICogNCkgPDwgMjQ7CiAJCWNtZC0+cmVzcFtpXSB8PQpAQCAtNDM4LDcgKzQyNiw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB3YnNkX3NlbmRfY29tbWFuZChzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQqIGNtZCkKK3N0YXRpYyB2b2lkIHdic2Rfc2VuZF9jb21tYW5kKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQogewogCWludCBpOwogCXU4IHN0YXR1cywgaXNyOwpAQCAtNDU2LDcgKzQ0NCw3IEBACiAJICogU2VuZCB0aGUgY29tbWFuZCAoQ1JDIGNhbGN1bGF0ZWQgYnkgaG9zdCkuCiAJICovCiAJb3V0YihjbWQtPm9wY29kZSwgaG9zdC0+YmFzZSArIFdCU0RfQ01EUik7Ci0JZm9yIChpID0gMztpID49IDA7aS0tKQorCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKQogCQlvdXRiKChjbWQtPmFyZyA+PiAoaSAqIDgpKSAmIDB4ZmYsIGhvc3QtPmJhc2UgKyBXQlNEX0NNRFIpOwogCiAJY21kLT5lcnJvciA9IE1NQ19FUlJfTk9ORTsKQEAgLTQ3MSw4ICs0NTksNyBAQAogCS8qCiAJICogRG8gd2UgZXhwZWN0IGEgcmVwbHk/CiAJICovCi0JaWYgKChjbWQtPmZsYWdzICYgTU1DX1JTUF9NQVNLKSAhPSBNTUNfUlNQX05PTkUpCi0JeworCWlmICgoY21kLT5mbGFncyAmIE1NQ19SU1BfTUFTSykgIT0gTU1DX1JTUF9OT05FKSB7CiAJCS8qCiAJCSAqIFJlYWQgYmFjayBzdGF0dXMuCiAJCSAqLwpAQCAtNDg4LDggKzQ3NSw3IEBACiAJCWVsc2UgaWYgKChjbWQtPmZsYWdzICYgTU1DX1JTUF9DUkMpICYmIChpc3IgJiBXQlNEX0lOVF9DUkMpKQogCQkJY21kLT5lcnJvciA9IE1NQ19FUlJfQkFEQ1JDOwogCQkvKiBBbGwgb2sgKi8KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJaWYgKChjbWQtPmZsYWdzICYgTU1DX1JTUF9NQVNLKSA9PSBNTUNfUlNQX1NIT1JUKQogCQkJCXdic2RfZ2V0X3Nob3J0X3JlcGx5KGhvc3QsIGNtZCk7CiAJCQllbHNlCkBAIC01MDQsMTAgKzQ5MCwxMCBAQAogICogRGF0YSBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCB3YnNkX2VtcHR5X2ZpZm8oc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfZW1wdHlfZmlmbyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewotCXN0cnVjdCBtbWNfZGF0YSogZGF0YSA9IGhvc3QtPm1ycS0+Y21kLT5kYXRhOwotCWNoYXIqIGJ1ZmZlcjsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5tcnEtPmNtZC0+ZGF0YTsKKwljaGFyICpidWZmZXI7CiAJaW50IGksIGZzciwgZmlmbzsKIAogCS8qCkBAIC01MjIsOCArNTA4LDcgQEAKIAkgKiBEcmFpbiB0aGUgZmlmby4gVGhpcyBoYXMgYSB0ZW5kZW5jeSB0byBsb29wIGxvbmdlcgogCSAqIHRoYW4gdGhlIEZJRk8gbGVuZ3RoICh1c3VhbGx5IG9uZSBibG9jaykuCiAJICovCi0Jd2hpbGUgKCEoKGZzciA9IGluYihob3N0LT5iYXNlICsgV0JTRF9GU1IpKSAmIFdCU0RfRklGT19FTVBUWSkpCi0JeworCXdoaWxlICghKChmc3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfRlNSKSkgJiBXQlNEX0ZJRk9fRU1QVFkpKSB7CiAJCS8qCiAJCSAqIFRoZSBzaXplIGZpZWxkIGluIHRoZSBGU1IgaXMgYnJva2VuIHNvIHdlIGhhdmUgdG8KIAkJICogZG8gc29tZSBndWVzc2luZy4KQEAgLTUzNSw4ICs1MjAsNyBAQAogCQllbHNlCiAJCQlmaWZvID0gMTsKIAotCQlmb3IgKGkgPSAwO2kgPCBmaWZvO2krKykKLQkJeworCQlmb3IgKGkgPSAwOyBpIDwgZmlmbzsgaSsrKSB7CiAJCQkqYnVmZmVyID0gaW5iKGhvc3QtPmJhc2UgKyBXQlNEX0RGUik7CiAJCQlidWZmZXIrKzsKIAkJCWhvc3QtPm9mZnNldCsrOwpAQCAtNTQ3LDggKzUzMSw3IEBACiAJCQkvKgogCQkJICogVHJhbnNmZXIgZG9uZT8KIAkJCSAqLwotCQkJaWYgKGRhdGEtPmJ5dGVzX3hmZXJlZCA9PSBob3N0LT5zaXplKQotCQkJeworCQkJaWYgKGRhdGEtPmJ5dGVzX3hmZXJlZCA9PSBob3N0LT5zaXplKSB7CiAJCQkJd2JzZF9rdW5tYXBfc2coaG9zdCk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNTU2LDE1ICs1MzksMTMgQEAKIAkJCS8qCiAJCQkgKiBFbmQgb2Ygc2NhdHRlciBsaXN0IGVudHJ5PwogCQkJICovCi0JCQlpZiAoaG9zdC0+cmVtYWluID09IDApCi0JCQl7CisJCQlpZiAoaG9zdC0+cmVtYWluID09IDApIHsKIAkJCQl3YnNkX2t1bm1hcF9zZyhob3N0KTsKIAogCQkJCS8qCiAJCQkJICogR2V0IG5leHQgZW50cnkuIENoZWNrIGlmIGxhc3QuCiAJCQkJICovCi0JCQkJaWYgKCF3YnNkX25leHRfc2coaG9zdCkpCi0JCQkJeworCQkJCWlmICghd2JzZF9uZXh0X3NnKGhvc3QpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFdlIHNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50LgogCQkJCQkgKiBJdCBtZWFucyB0aGF0IHdlJ3JlIHRyeWluZyB0bwpAQCAtNTk0LDEwICs1NzUsMTAgQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+Zmlmb190YXNrbGV0KTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9maWxsX2ZpZm8oc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfZmlsbF9maWZvKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7Ci0Jc3RydWN0IG1tY19kYXRhKiBkYXRhID0gaG9zdC0+bXJxLT5jbWQtPmRhdGE7Ci0JY2hhciogYnVmZmVyOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPm1ycS0+Y21kLT5kYXRhOworCWNoYXIgKmJ1ZmZlcjsKIAlpbnQgaSwgZnNyLCBmaWZvOwogCiAJLyoKQEAgLTYxMyw4ICs1OTQsNyBAQAogCSAqIEZpbGwgdGhlIGZpZm8uIFRoaXMgaGFzIGEgdGVuZGVuY3kgdG8gbG9vcCBsb25nZXIKIAkgKiB0aGFuIHRoZSBGSUZPIGxlbmd0aCAodXN1YWxseSBvbmUgYmxvY2spLgogCSAqLwotCXdoaWxlICghKChmc3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfRlNSKSkgJiBXQlNEX0ZJRk9fRlVMTCkpCi0JeworCXdoaWxlICghKChmc3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfRlNSKSkgJiBXQlNEX0ZJRk9fRlVMTCkpIHsKIAkJLyoKIAkJICogVGhlIHNpemUgZmllbGQgaW4gdGhlIEZTUiBpcyBicm9rZW4gc28gd2UgaGF2ZSB0bwogCQkgKiBkbyBzb21lIGd1ZXNzaW5nLgpAQCAtNjI2LDggKzYwNiw3IEBACiAJCWVsc2UKIAkJCWZpZm8gPSAxNTsKIAotCQlmb3IgKGkgPSAxNjtpID4gZmlmbztpLS0pCi0JCXsKKwkJZm9yIChpID0gMTY7IGkgPiBmaWZvOyBpLS0pIHsKIAkJCW91dGIoKmJ1ZmZlciwgaG9zdC0+YmFzZSArIFdCU0RfREZSKTsKIAkJCWJ1ZmZlcisrOwogCQkJaG9zdC0+b2Zmc2V0Kys7CkBAIC02MzgsOCArNjE3LDcgQEAKIAkJCS8qCiAJCQkgKiBUcmFuc2ZlciBkb25lPwogCQkJICovCi0JCQlpZiAoZGF0YS0+Ynl0ZXNfeGZlcmVkID09IGhvc3QtPnNpemUpCi0JCQl7CisJCQlpZiAoZGF0YS0+Ynl0ZXNfeGZlcmVkID09IGhvc3QtPnNpemUpIHsKIAkJCQl3YnNkX2t1bm1hcF9zZyhob3N0KTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC02NDcsMTUgKzYyNSwxMyBAQAogCQkJLyoKIAkJCSAqIEVuZCBvZiBzY2F0dGVyIGxpc3QgZW50cnk/CiAJCQkgKi8KLQkJCWlmIChob3N0LT5yZW1haW4gPT0gMCkKLQkJCXsKKwkJCWlmIChob3N0LT5yZW1haW4gPT0gMCkgewogCQkJCXdic2Rfa3VubWFwX3NnKGhvc3QpOwogCiAJCQkJLyoKIAkJCQkgKiBHZXQgbmV4dCBlbnRyeS4gQ2hlY2sgaWYgbGFzdC4KIAkJCQkgKi8KLQkJCQlpZiAoIXdic2RfbmV4dF9zZyhob3N0KSkKLQkJCQl7CisJCQkJaWYgKCF3YnNkX25leHRfc2coaG9zdCkpIHsKIAkJCQkJLyoKIAkJCQkJICogV2Ugc2hvdWxkIG5ldmVyIHJlYWNoIHRoaXMgcG9pbnQuCiAJCQkJCSAqIEl0IG1lYW5zIHRoYXQgd2UncmUgdHJ5aW5nIHRvCkBAIC02ODQsNyArNjYwLDcgQEAKIAl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5maWZvX3Rhc2tsZXQpOwogfQogCi1zdGF0aWMgdm9pZCB3YnNkX3ByZXBhcmVfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2RhdGEqIGRhdGEpCitzdGF0aWMgdm9pZCB3YnNkX3ByZXBhcmVfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJdTE2IGJsa3NpemU7CiAJdTggc2V0dXA7CkBAIC03MDYsOCArNjgyLDEwIEBACiAJICovCiAJaWYgKGRhdGEtPnRpbWVvdXRfbnMgPiAxMjcwMDAwMDApCiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfVEFBQywgMTI3KTsKLQllbHNlCi0JCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfVEFBQywgZGF0YS0+dGltZW91dF9ucy8xMDAwMDAwKTsKKwllbHNlIHsKKwkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9UQUFDLAorCQkJZGF0YS0+dGltZW91dF9ucyAvIDEwMDAwMDApOworCX0KIAogCWlmIChkYXRhLT50aW1lb3V0X2Nsa3MgPiAyNTUpCiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfTlNBQywgMjU1KTsKQEAgLTcyMiwyMyArNzAwLDE4IEBACiAJICogU3BhY2UgZm9yIENSQyBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBzaXplLgogCSAqIFR3byBieXRlcyBhcmUgbmVlZGVkIGZvciBlYWNoIGRhdGEgbGluZS4KIAkgKi8KLQlpZiAoaG9zdC0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfMSkKLQl7CisJaWYgKGhvc3QtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzEpIHsKIAkJYmxrc2l6ZSA9ICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpICsgMjsKIAogCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX1BCU01TQiwgKGJsa3NpemUgPj4gNCkgJiAweEYwKTsKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9QQlNMU0IsIGJsa3NpemUgJiAweEZGKTsKLQl9Ci0JZWxzZSBpZiAoaG9zdC0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKLQl7CisJfSBlbHNlIGlmIChob3N0LT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7CiAJCWJsa3NpemUgPSAoMSA8PCBkYXRhLT5ibGtzel9iaXRzKSArIDIgKiA0OwogCi0JCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUEJTTVNCLCAoKGJsa3NpemUgPj4gNCkgJiAweEYwKQotCQkJfCBXQlNEX0RBVEFfV0lEVEgpOworCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX1BCU01TQiwKKwkJCSgoYmxrc2l6ZSA+PiA0KSAmIDB4RjApIHwgV0JTRF9EQVRBX1dJRFRIKTsKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9QQlNMU0IsIGJsa3NpemUgJiAweEZGKTsKLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UgewogCQlkYXRhLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJcmV0dXJuOwogCX0KQEAgLTc1NSwxNCArNzI4LDEyIEBACiAJLyoKIAkgKiBETUEgdHJhbnNmZXI/CiAJICovCi0JaWYgKGhvc3QtPmRtYSA+PSAwKQotCXsKKwlpZiAoaG9zdC0+ZG1hID49IDApIHsKIAkJLyoKIAkJICogVGhlIGJ1ZmZlciBmb3IgRE1BIGlzIG9ubHkgNjQga0IuCiAJCSAqLwogCQlCVUdfT04oaG9zdC0+c2l6ZSA+IDB4MTAwMDApOwotCQlpZiAoaG9zdC0+c2l6ZSA+IDB4MTAwMDApCi0JCXsKKwkJaWYgKGhvc3QtPnNpemUgPiAweDEwMDAwKSB7CiAJCQlkYXRhLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzk0LDkgKzc2NSw3IEBACiAJCSAqIEVuYWJsZSBETUEgb24gdGhlIGhvc3QuCiAJCSAqLwogCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX0RNQSwgV0JTRF9ETUFfRU5BQkxFKTsKLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBrZWVwIHByaW50awogCQkgKiBvdXRwdXQgdG8gYSBtaW5pbXVtLgpAQCAtODE3LDEzICs3ODYsMTAgQEAKIAkJICogU2V0IHVwIEZJRk8gdGhyZXNob2xkIGxldmVscyAoYW5kIGZpbGwKIAkJICogYnVmZmVyIGlmIGRvaW5nIGEgd3JpdGUpLgogCQkgKi8KLQkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKLQkJeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CiAJCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX0ZJRk9FTiwKIAkJCQlXQlNEX0ZJRk9FTl9GVUxMIHwgOCk7Ci0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX0ZJRk9FTiwKIAkJCQlXQlNEX0ZJRk9FTl9FTVBUWSB8IDgpOwogCQkJd2JzZF9maWxsX2ZpZm8oaG9zdCk7CkBAIC04MzMsNyArNzk5LDcgQEAKIAlkYXRhLT5lcnJvciA9IE1NQ19FUlJfTk9ORTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9maW5pc2hfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2RhdGEqIGRhdGEpCitzdGF0aWMgdm9pZCB3YnNkX2ZpbmlzaF9kYXRhKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGRtYWZsYWdzOwogCWludCBjb3VudDsKQEAgLTg1MSwxNiArODE3LDE0IEBACiAJICogV2FpdCBmb3IgdGhlIGNvbnRyb2xsZXIgdG8gbGVhdmUgZGF0YQogCSAqIHRyYW5zZmVyIHN0YXRlLgogCSAqLwotCWRvCi0JeworCWRvIHsKIAkJc3RhdHVzID0gd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1NUQVRVUyk7CiAJfSB3aGlsZSAoc3RhdHVzICYgKFdCU0RfQkxPQ0tfUkVBRCB8IFdCU0RfQkxPQ0tfV1JJVEUpKTsKIAogCS8qCiAJICogRE1BIHRyYW5zZmVyPwogCSAqLwotCWlmIChob3N0LT5kbWEgPj0gMCkKLQl7CisJaWYgKGhvc3QtPmRtYSA+PSAwKSB7CiAJCS8qCiAJCSAqIERpc2FibGUgRE1BIG9uIHRoZSBob3N0LgogCQkgKi8KQEAgLTg3OCwxNiArODQyLDEzIEBACiAJCS8qCiAJCSAqIEFueSBsZWZ0b3ZlciBkYXRhPwogCQkgKi8KLQkJaWYgKGNvdW50KQotCQl7CisJCWlmIChjb3VudCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wbGV0ZSBETUEgdHJhbnNmZXIuICIKIAkJCQkiJWQgYnl0ZXMgbGVmdC5cbiIsCiAJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGNvdW50KTsKIAogCQkJZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX0ZBSUxFRDsKLQkJfQotCQllbHNlCi0JCXsKKwkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUcmFuc2ZlciBkYXRhIGZyb20gRE1BIGJ1ZmZlciB0bwogCQkJICogU0cgbGlzdC4KQEAgLTkxMCwxMCArODcxLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgd2JzZF9yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCogbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QqIG1ycSkKK3N0YXRpYyB2b2lkIHdic2RfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0Jc3RydWN0IG1tY19jb21tYW5kKiBjbWQ7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CiAKIAkvKgogCSAqIERpc2FibGUgdGFza2xldHMgdG8gYXZvaWQgYSBkZWFkbG9jay4KQEAgLTkzMCw4ICs4OTEsNyBAQAogCSAqIElmIHRoZXJlIGlzIG5vIGNhcmQgaW4gdGhlIHNsb3QgdGhlbgogCSAqIHRpbWVvdXQgaW1tZWRpYXRseS4KIAkgKi8KLQlpZiAoIShob3N0LT5mbGFncyAmIFdCU0RfRkNBUkRfUFJFU0VOVCkpCi0JeworCWlmICghKGhvc3QtPmZsYWdzICYgV0JTRF9GQ0FSRF9QUkVTRU5UKSkgewogCQljbWQtPmVycm9yID0gTU1DX0VSUl9USU1FT1VUOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtOTM5LDggKzg5OSw3IEBACiAJLyoKIAkgKiBEb2VzIHRoZSByZXF1ZXN0IGluY2x1ZGUgZGF0YT8KIAkgKi8KLQlpZiAoY21kLT5kYXRhKQotCXsKKwlpZiAoY21kLT5kYXRhKSB7CiAJCXdic2RfcHJlcGFyZV9kYXRhKGhvc3QsIGNtZC0+ZGF0YSk7CiAKIAkJaWYgKGNtZC0+ZGF0YS0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKQpAQCAtOTU0LDggKzkxMyw3IEBACiAJICogd2lsbCBiZSBmaW5pc2hlZCBhZnRlciB0aGUgZGF0YSBoYXMKIAkgKiB0cmFuc2ZlcmVkLgogCSAqLwotCWlmIChjbWQtPmRhdGEgJiYgKGNtZC0+ZXJyb3IgPT0gTU1DX0VSUl9OT05FKSkKLQl7CisJaWYgKGNtZC0+ZGF0YSAmJiAoY21kLT5lcnJvciA9PSBNTUNfRVJSX05PTkUpKSB7CiAJCS8qCiAJCSAqIERpcnR5IGZpeCBmb3IgaGFyZHdhcmUgYnVnLgogCQkgKi8KQEAgLTk3MywxNCArOTMxLDE0IEBACiAJc3Bpbl91bmxvY2tfYmgoJmhvc3QtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB3YnNkX3NldF9pb3Moc3RydWN0IG1tY19ob3N0KiBtbWMsIHN0cnVjdCBtbWNfaW9zKiBpb3MpCitzdGF0aWMgdm9pZCB3YnNkX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJdTggY2xrLCBzZXR1cCwgcHdyOwogCiAJREJHRigiY2xvY2sgJXVIeiBidXNtb2RlICV1IHBvd2VybW9kZSAldSBjcyAldSBWZGQgJXUgd2lkdGggJXVcbiIsCi0JICAgICBpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsIGlvcy0+Y2hpcF9zZWxlY3QsCi0JICAgICBpb3MtPnZkZCwgaW9zLT5idXNfd2lkdGgpOworCQlpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsIGlvcy0+Y2hpcF9zZWxlY3QsCisJCWlvcy0+dmRkLCBpb3MtPmJ1c193aWR0aCk7CiAKIAlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwogCkBAIC0xMDA0LDggKzk2Miw3IEBACiAJICogT25seSB3cml0ZSB0byB0aGUgY2xvY2sgcmVnaXN0ZXIgd2hlbgogCSAqIHRoZXJlIGlzIGFuIGFjdHVhbCBjaGFuZ2UuCiAJICovCi0JaWYgKGNsayAhPSBob3N0LT5jbGspCi0JeworCWlmIChjbGsgIT0gaG9zdC0+Y2xrKSB7CiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfQ0xLLCBjbGspOwogCQlob3N0LT5jbGsgPSBjbGs7CiAJfQpAQCAtMTAxMyw4ICs5NzAsNyBAQAogCS8qCiAJICogUG93ZXIgdXAgY2FyZC4KIAkgKi8KLQlpZiAoaW9zLT5wb3dlcl9tb2RlICE9IE1NQ19QT1dFUl9PRkYpCi0JeworCWlmIChpb3MtPnBvd2VyX21vZGUgIT0gTU1DX1BPV0VSX09GRikgewogCQlwd3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfQ1NSKTsKIAkJcHdyICY9IH5XQlNEX1BPV0VSX047CiAJCW91dGIocHdyLCBob3N0LT5iYXNlICsgV0JTRF9DU1IpOwpAQCAtMTAyNiwyMyArOTgyLDE5IEBACiAJICogdGhhdCBuZWVkcyB0byBiZSBkaXNhYmxlZC4KIAkgKi8KIAlzZXR1cCA9IHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9TRVRVUCk7Ci0JaWYgKGlvcy0+Y2hpcF9zZWxlY3QgPT0gTU1DX0NTX0hJR0gpCi0JeworCWlmIChpb3MtPmNoaXBfc2VsZWN0ID09IE1NQ19DU19ISUdIKSB7CiAJCUJVR19PTihpb3MtPmJ1c193aWR0aCAhPSBNTUNfQlVTX1dJRFRIXzEpOwogCQlzZXR1cCB8PSBXQlNEX0RBVDNfSDsKIAkJaG9zdC0+ZmxhZ3MgfD0gV0JTRF9GSUdOT1JFX0RFVEVDVDsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKHNldHVwICYgV0JTRF9EQVQzX0gpCi0JCXsKKwl9IGVsc2UgeworCQlpZiAoc2V0dXAgJiBXQlNEX0RBVDNfSCkgewogCQkJc2V0dXAgJj0gfldCU0RfREFUM19IOwogCiAJCQkvKgogCQkJICogV2UgY2Fubm90IHJlc3VtZSBjYXJkIGRldGVjdGlvbiBpbW1lZGlhdGx5CiAJCQkgKiBiZWNhdXNlIG9mIGNhcGFjaXRhbmNlIGFuZCBkZWxheXMgaW4gdGhlIGNoaXAuCiAJCQkgKi8KLQkJCW1vZF90aW1lcigmaG9zdC0+aWdub3JlX3RpbWVyLCBqaWZmaWVzICsgSFovMTAwKTsKKwkJCW1vZF90aW1lcigmaG9zdC0+aWdub3JlX3RpbWVyLCBqaWZmaWVzICsgSFogLyAxMDApOwogCQl9CiAJfQogCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfU0VUVVAsIHNldHVwKTsKQEAgLTEwNTYsOSArMTAwOCw5IEBACiAJc3Bpbl91bmxvY2tfYmgoJmhvc3QtPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHdic2RfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCogbW1jKQorc3RhdGljIGludCB3YnNkX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKIHsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAl1OCBjc3I7CiAKIAlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwpAQCAtMTA5Niw3ICsxMDQ4LDcgQEAKIAogc3RhdGljIHZvaWQgd2JzZF9yZXNldF9pZ25vcmUodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCopZGF0YTsKKwlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0ID0gKHN0cnVjdCB3YnNkX2hvc3QgKilkYXRhOwogCiAJQlVHX09OKGhvc3QgPT0gTlVMTCk7CiAKQEAgLTExMTksNyArMTA3MSw3IEBACiAgKiBUYXNrbGV0cwogICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1tY19kYXRhKiB3YnNkX2dldF9kYXRhKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbWNfZGF0YSAqd2JzZF9nZXRfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCVdBUk5fT04oIWhvc3QtPm1ycSk7CiAJaWYgKCFob3N0LT5tcnEpCkBAIC0xMTM4LDE0ICsxMDkwLDEzIEBACiAKIHN0YXRpYyB2b2lkIHdic2RfdGFza2xldF9jYXJkKHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKKwlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0ID0gKHN0cnVjdCB3YnNkX2hvc3QgKilwYXJhbTsKIAl1OCBjc3I7CiAJaW50IGRlbGF5ID0gLTE7CiAKIAlzcGluX2xvY2soJmhvc3QtPmxvY2spOwogCi0JaWYgKGhvc3QtPmZsYWdzICYgV0JTRF9GSUdOT1JFX0RFVEVDVCkKLQl7CisJaWYgKGhvc3QtPmZsYWdzICYgV0JTRF9GSUdOT1JFX0RFVEVDVCkgewogCQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC0xMTUzLDIzICsxMTA0LDE4IEBACiAJY3NyID0gaW5iKGhvc3QtPmJhc2UgKyBXQlNEX0NTUik7CiAJV0FSTl9PTihjc3IgPT0gMHhmZik7CiAKLQlpZiAoY3NyICYgV0JTRF9DQVJEUFJFU0VOVCkKLQl7Ci0JCWlmICghKGhvc3QtPmZsYWdzICYgV0JTRF9GQ0FSRF9QUkVTRU5UKSkKLQkJeworCWlmIChjc3IgJiBXQlNEX0NBUkRQUkVTRU5UKSB7CisJCWlmICghKGhvc3QtPmZsYWdzICYgV0JTRF9GQ0FSRF9QUkVTRU5UKSkgewogCQkJREJHKCJDYXJkIGluc2VydGVkXG4iKTsKIAkJCWhvc3QtPmZsYWdzIHw9IFdCU0RfRkNBUkRfUFJFU0VOVDsKIAogCQkJZGVsYXkgPSA1MDA7CiAJCX0KLQl9Ci0JZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBXQlNEX0ZDQVJEX1BSRVNFTlQpCi0JeworCX0gZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBXQlNEX0ZDQVJEX1BSRVNFTlQpIHsKIAkJREJHKCJDYXJkIHJlbW92ZWRcbiIpOwogCQlob3N0LT5mbGFncyAmPSB+V0JTRF9GQ0FSRF9QUkVTRU5UOwogCi0JCWlmIChob3N0LT5tcnEpCi0JCXsKKwkJaWYgKGhvc3QtPm1ycSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FyZCByZW1vdmVkIGR1cmluZyB0cmFuc2ZlciFcbiIsCiAJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwogCQkJd2JzZF9yZXNldChob3N0KTsKQEAgLTExOTMsOCArMTEzOSw4IEBACiAKIHN0YXRpYyB2b2lkIHdic2RfdGFza2xldF9maWZvKHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKLQlzdHJ1Y3QgbW1jX2RhdGEqIGRhdGE7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0ICopcGFyYW07CisJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKIApAQCAtMTIxMyw4ICsxMTU5LDcgQEAKIAkvKgogCSAqIERvbmU/CiAJICovCi0JaWYgKGhvc3QtPnNpemUgPT0gZGF0YS0+Ynl0ZXNfeGZlcmVkKQotCXsKKwlpZiAoaG9zdC0+c2l6ZSA9PSBkYXRhLT5ieXRlc194ZmVyZWQpIHsKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9GSUZPRU4sIDApOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5maW5pc2hfdGFza2xldCk7CiAJfQpAQCAtMTIyNSw4ICsxMTcwLDggQEAKIAogc3RhdGljIHZvaWQgd2JzZF90YXNrbGV0X2NyYyh1bnNpZ25lZCBsb25nIHBhcmFtKQogewotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCopcGFyYW07Ci0Jc3RydWN0IG1tY19kYXRhKiBkYXRhOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCAqKXBhcmFtOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKIAogCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CiAKQEAgLTEyNDksOCArMTE5NCw4IEBACiAKIHN0YXRpYyB2b2lkIHdic2RfdGFza2xldF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKLQlzdHJ1Y3QgbW1jX2RhdGEqIGRhdGE7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0ICopcGFyYW07CisJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKIApAQCAtMTI3Myw4ICsxMjE4LDggQEAKIAogc3RhdGljIHZvaWQgd2JzZF90YXNrbGV0X2ZpbmlzaCh1bnNpZ25lZCBsb25nIHBhcmFtKQogewotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCopcGFyYW07Ci0Jc3RydWN0IG1tY19kYXRhKiBkYXRhOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCAqKXBhcmFtOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKIAogCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CiAKQEAgLTEyOTQsMTQgKzEyMzksMTMgQEAKIAogc3RhdGljIHZvaWQgd2JzZF90YXNrbGV0X2Jsb2NrKHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKLQlzdHJ1Y3QgbW1jX2RhdGEqIGRhdGE7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0ICopcGFyYW07CisJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKIAogCWlmICgod2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX0NSQ1NUQVRVUykgJiBXQlNEX0NSQ19NQVNLKSAhPQotCQlXQlNEX0NSQ19PSykKLQl7CisJCVdCU0RfQ1JDX09LKSB7CiAJCWRhdGEgPSB3YnNkX2dldF9kYXRhKGhvc3QpOwogCQlpZiAoIWRhdGEpCiAJCQlnb3RvIGVuZDsKQEAgLTEzMjMsNyArMTI2Nyw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB3YnNkX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3QgPSBkZXZfaWQ7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IGRldl9pZDsKIAlpbnQgaXNyOwogCiAJaXNyID0gaW5iKGhvc3QtPmJhc2UgKyBXQlNEX0lTUik7CkBAIC0xMzY1LDEwICsxMzA5LDEwIEBACiAgKiBBbGxvY2F0ZS9mcmVlIE1NQyBzdHJ1Y3R1cmUuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9hbGxvY19tbWMoc3RydWN0IGRldmljZSogZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9hbGxvY19tbWMoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCogbW1jOwotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdDsKIAogCS8qCiAJICogQWxsb2NhdGUgTU1DIHN0cnVjdHVyZS4KQEAgLTEzODgsNyArMTMzMiw3IEBACiAJbW1jLT5vcHMgPSAmd2JzZF9vcHM7CiAJbW1jLT5mX21pbiA9IDM3NTAwMDsKIAltbWMtPmZfbWF4ID0gMjQwMDAwMDA7Ci0JbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQ7CisJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKIAltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CkBAIC0xNDI0LDEwICsxMzY4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX2ZyZWVfbW1jKHN0cnVjdCBkZXZpY2UqIGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX2ZyZWVfbW1jKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QqIG1tYzsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAKIAltbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpZiAoIW1tYykKQEAgLTE0NDcsNyArMTM5MSw3IEBACiAgKiBTY2FuIGZvciBrbm93biBjaGlwIGlkOnMKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3NjYW4oc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdic2Rfc2NhbihzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWludCBpLCBqLCBrOwogCWludCBpZDsKQEAgLTE0NzcsMTYgKzE0MjEsMTQgQEAKIAkJCXdic2RfbG9ja19jb25maWcoaG9zdCk7CiAKIAkJCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHZhbGlkX2lkcyk7IGsrKykgewotCQkJCWlmIChpZCA9PSB2YWxpZF9pZHNba10pCi0JCQkJeworCQkJCWlmIChpZCA9PSB2YWxpZF9pZHNba10pIHsKIAkJCQkJaG9zdC0+Y2hpcF9pZCA9IGlkOwogCiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGlkICE9IDB4RkZGRikKLQkJCXsKKwkJCWlmIChpZCAhPSAweEZGRkYpIHsKIAkJCQlEQkcoIlVua25vd24gaGFyZHdhcmUgKGlkICV4KSBmb3VuZCBhdCAleFxuIiwKIAkJCQkJaWQsIGNvbmZpZ19wb3J0c1tpXSk7CiAJCQl9CkBAIC0xNTA1LDcgKzE0NDcsNyBAQAogICogQWxsb2NhdGUvZnJlZSBpbyBwb3J0IHJhbmdlcwogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfcmVxdWVzdF9yZWdpb24oc3RydWN0IHdic2RfaG9zdCogaG9zdCwgaW50IGJhc2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIGludCBiYXNlKQogewogCWlmIChpbyAmIDB4NykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTE4LDcgKzE0NjAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3JlbGVhc2VfcmVnaW9ucyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWlmIChob3N0LT5iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihob3N0LT5iYXNlLCA4KTsKQEAgLTE1MzUsNyArMTQ3Nyw3IEBACiAgKiBBbGxvY2F0ZS9mcmVlIERNQSBwb3J0IGFuZCBidWZmZXIKICAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X2RtYShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBpbnQgZG1hKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHdic2RfcmVxdWVzdF9kbWEoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgaW50IGRtYSkKIHsKIAlpZiAoZG1hIDwgMCkKIAkJcmV0dXJuOwpAQCAtMTU3OSw4ICsxNTIxLDggQEAKIAkgKi8KIAlCVUdfT04oMSk7CiAKLQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPm1tYy0+ZGV2LCBob3N0LT5kbWFfYWRkciwgV0JTRF9ETUFfU0laRSwKLQkJRE1BX0JJRElSRUNUSU9OQUwpOworCWRtYV91bm1hcF9zaW5nbGUoaG9zdC0+bW1jLT5kZXYsIGhvc3QtPmRtYV9hZGRyLAorCQlXQlNEX0RNQV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CiAJaG9zdC0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdClOVUxMOwogCiAJa2ZyZWUoaG9zdC0+ZG1hX2J1ZmZlcik7CkBAIC0xNTk0LDExICsxNTM2LDEyIEBACiAJCSJGYWxsaW5nIGJhY2sgb24gRklGTy5cbiIsIGRtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3JlbGVhc2VfZG1hKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX2RtYShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewotCWlmIChob3N0LT5kbWFfYWRkcikKLQkJZG1hX3VubWFwX3NpbmdsZShob3N0LT5tbWMtPmRldiwgaG9zdC0+ZG1hX2FkZHIsIFdCU0RfRE1BX1NJWkUsCi0JCQlETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKGhvc3QtPmRtYV9hZGRyKSB7CisJCWRtYV91bm1hcF9zaW5nbGUoaG9zdC0+bW1jLT5kZXYsIGhvc3QtPmRtYV9hZGRyLAorCQkJV0JTRF9ETUFfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOworCX0KIAlrZnJlZShob3N0LT5kbWFfYnVmZmVyKTsKIAlpZiAoaG9zdC0+ZG1hID49IDApCiAJCWZyZWVfZG1hKGhvc3QtPmRtYSk7CkBAIC0xNjEyLDcgKzE1NTUsNyBAQAogICogQWxsb2NhdGUvZnJlZSBJUlEuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X2lycShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBpbnQgaXJxKQorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X2lycShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBpbnQgaXJxKQogewogCWludCByZXQ7CiAKQEAgLTE2MjksMTcgKzE1NzIsMjMgQEAKIAkvKgogCSAqIFNldCB1cCB0YXNrbGV0cy4KIAkgKi8KLQl0YXNrbGV0X2luaXQoJmhvc3QtPmNhcmRfdGFza2xldCwgd2JzZF90YXNrbGV0X2NhcmQsICh1bnNpZ25lZCBsb25nKWhvc3QpOwotCXRhc2tsZXRfaW5pdCgmaG9zdC0+Zmlmb190YXNrbGV0LCB3YnNkX3Rhc2tsZXRfZmlmbywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7Ci0JdGFza2xldF9pbml0KCZob3N0LT5jcmNfdGFza2xldCwgd2JzZF90YXNrbGV0X2NyYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7Ci0JdGFza2xldF9pbml0KCZob3N0LT50aW1lb3V0X3Rhc2tsZXQsIHdic2RfdGFza2xldF90aW1lb3V0LCAodW5zaWduZWQgbG9uZylob3N0KTsKLQl0YXNrbGV0X2luaXQoJmhvc3QtPmZpbmlzaF90YXNrbGV0LCB3YnNkX3Rhc2tsZXRfZmluaXNoLCAodW5zaWduZWQgbG9uZylob3N0KTsKLQl0YXNrbGV0X2luaXQoJmhvc3QtPmJsb2NrX3Rhc2tsZXQsIHdic2RfdGFza2xldF9ibG9jaywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJdGFza2xldF9pbml0KCZob3N0LT5jYXJkX3Rhc2tsZXQsIHdic2RfdGFza2xldF9jYXJkLAorCQkJKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJdGFza2xldF9pbml0KCZob3N0LT5maWZvX3Rhc2tsZXQsIHdic2RfdGFza2xldF9maWZvLAorCQkJKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJdGFza2xldF9pbml0KCZob3N0LT5jcmNfdGFza2xldCwgd2JzZF90YXNrbGV0X2NyYywKKwkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOworCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGltZW91dF90YXNrbGV0LCB3YnNkX3Rhc2tsZXRfdGltZW91dCwKKwkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOworCXRhc2tsZXRfaW5pdCgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQsIHdic2RfdGFza2xldF9maW5pc2gsCisJCQkodW5zaWduZWQgbG9uZylob3N0KTsKKwl0YXNrbGV0X2luaXQoJmhvc3QtPmJsb2NrX3Rhc2tsZXQsIHdic2RfdGFza2xldF9ibG9jaywKKwkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3JlbGVhc2VfaXJxKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX2lycShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWlmICghaG9zdC0+aXJxKQogCQlyZXR1cm47CkBAIC0xNjYwLDcgKzE2MDksNyBAQAogICogQWxsb2NhdGUgYWxsIHJlc291cmNlcyBmb3IgdGhlIGhvc3QuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X3Jlc291cmNlcyhzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LAorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X3Jlc291cmNlcyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LAogCWludCBiYXNlLCBpbnQgaXJxLCBpbnQgZG1hKQogewogCWludCByZXQ7CkBAIC0xNjkxLDcgKzE2NDAsNyBAQAogICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIGZvciB0aGUgaG9zdC4KICAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHdic2RfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHdic2RfaG9zdCAqaG9zdCkKIHsKIAl3YnNkX3JlbGVhc2VfZG1hKGhvc3QpOwogCXdic2RfcmVsZWFzZV9pcnEoaG9zdCk7CkBAIC0xNzAyLDcgKzE2NTEsNyBAQAogICogQ29uZmlndXJlIHRoZSByZXNvdXJjZXMgdGhlIGNoaXAgc2hvdWxkIHVzZS4KICAqLwogCi1zdGF0aWMgdm9pZCB3YnNkX2NoaXBfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgdm9pZCB3YnNkX2NoaXBfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJd2JzZF91bmxvY2tfY29uZmlnKGhvc3QpOwogCkBAIC0xNzQ2LDcgKzE2OTUsNyBAQAogICogQ2hlY2sgdGhhdCBjb25maWd1cmVkIHJlc291cmNlcyBhcmUgY29ycmVjdC4KICAqLwogCi1zdGF0aWMgaW50IHdic2RfY2hpcF92YWxpZGF0ZShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIGludCB3YnNkX2NoaXBfdmFsaWRhdGUoc3RydWN0IHdic2RfaG9zdCAqaG9zdCkKIHsKIAlpbnQgYmFzZSwgaXJxLCBkbWE7CiAKQEAgLTE3ODYsNyArMTczNSw3IEBACiAgKiBQb3dlcnMgZG93biB0aGUgU0QgZnVuY3Rpb24KICAqLwogCi1zdGF0aWMgdm9pZCB3YnNkX2NoaXBfcG93ZXJvZmYoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfY2hpcF9wb3dlcm9mZihzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCXdic2RfdW5sb2NrX2NvbmZpZyhob3N0KTsKIApAQCAtMTgwMiwxMSArMTc1MSwxMSBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfaW5pdChzdHJ1Y3QgZGV2aWNlKiBkZXYsIGludCBiYXNlLCBpbnQgaXJxLCBpbnQgZG1hLAorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJhc2UsIGludCBpcnEsIGludCBkbWEsCiAJaW50IHBucCkKIHsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0ID0gTlVMTDsKLQlzdHJ1Y3QgbW1jX2hvc3QqIG1tYyA9IE5VTEw7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IE5VTEw7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBOVUxMOwogCWludCByZXQ7CiAKIAlyZXQgPSB3YnNkX2FsbG9jX21tYyhkZXYpOwpAQCAtMTgyMCwxNiArMTc2OSwxMiBAQAogCSAqIFNjYW4gZm9yIGhhcmR3YXJlLgogCSAqLwogCXJldCA9IHdic2Rfc2Nhbihob3N0KTsKLQlpZiAocmV0KQotCXsKLQkJaWYgKHBucCAmJiAocmV0ID09IC1FTk9ERVYpKQotCQl7CisJaWYgKHJldCkgeworCQlpZiAocG5wICYmIChyZXQgPT0gLUVOT0RFVikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCQkiOiBVbmFibGUgdG8gY29uZmlybSBkZXZpY2UgcHJlc2VuY2UuIFlvdSBtYXkgIgogCQkJCSJleHBlcmllbmNlIGxvY2stdXBzLlxuIik7Ci0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQl3YnNkX2ZyZWVfbW1jKGRldik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC0xODM5LDggKzE3ODQsNyBAQAogCSAqIFJlcXVlc3QgcmVzb3VyY2VzLgogCSAqLwogCXJldCA9IHdic2RfcmVxdWVzdF9yZXNvdXJjZXMoaG9zdCwgaW8sIGlycSwgZG1hKTsKLQlpZiAocmV0KQotCXsKKwlpZiAocmV0KSB7CiAJCXdic2RfcmVsZWFzZV9yZXNvdXJjZXMoaG9zdCk7CiAJCXdic2RfZnJlZV9tbWMoZGV2KTsKIAkJcmV0dXJuIHJldDsKQEAgLTE4NDksMTggKzE3OTMsMTUgQEAKIAkvKgogCSAqIFNlZSBpZiBjaGlwIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQuCiAJICovCi0JaWYgKHBucCkKLQl7Ci0JCWlmICgoaG9zdC0+Y29uZmlnICE9IDApICYmICF3YnNkX2NoaXBfdmFsaWRhdGUoaG9zdCkpCi0JCXsKKwlpZiAocG5wKSB7CisJCWlmICgoaG9zdC0+Y29uZmlnICE9IDApICYmICF3YnNkX2NoaXBfdmFsaWRhdGUoaG9zdCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCQkiOiBQblAgYWN0aXZlIGJ1dCBjaGlwIG5vdCBjb25maWd1cmVkISAiCiAJCQkJIllvdSBwcm9iYWJseSBoYXZlIGEgYnVnZ3kgQklPUy4gIgogCQkJCSJDb25maWd1cmluZyBjaGlwIG1hbnVhbGx5LlxuIik7CiAJCQl3YnNkX2NoaXBfY29uZmlnKGhvc3QpOwogCQl9Ci0JfQotCWVsc2UKKwl9IGVsc2UKIAkJd2JzZF9jaGlwX2NvbmZpZyhob3N0KTsKIAogCS8qCkBAIC0xODY4LDggKzE4MDksNyBAQAogCSAqIE5vdCB0ZXN0ZWQuCiAJICovCiAjaWZkZWYgQ09ORklHX1BNCi0JaWYgKGhvc3QtPmNvbmZpZykKLQl7CisJaWYgKGhvc3QtPmNvbmZpZykgewogCQl3YnNkX3VubG9ja19jb25maWcoaG9zdCk7CiAJCXdic2Rfd3JpdGVfY29uZmlnKGhvc3QsIFdCU0RfQ09ORl9QTUUsIDB4QTApOwogCQl3YnNkX2xvY2tfY29uZmlnKGhvc3QpOwpAQCAtMTkwMiwxMCArMTg0MiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlKiBkZXYsIGludCBwbnApCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwbnApCiB7Ci0Jc3RydWN0IG1tY19ob3N0KiBtbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdDsKIAogCWlmICghbW1jKQogCQlyZXR1cm47CkBAIC0xOTI5LDEyICsxODY5LDEyIEBACiAgKiBOb24tUG5QCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gd2JzZF9pbml0KCZkZXYtPmRldiwgaW8sIGlycSwgZG1hLCAwKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgd2JzZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgd2JzZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXdic2Rfc2h1dGRvd24oJmRldi0+ZGV2LCAwKTsKIApAQCAtMTk0OCw3ICsxODg4LDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci13YnNkX3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqIHBucGRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKK3dic2RfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpwbnBkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCiB7CiAJaW50IGlvLCBpcnEsIGRtYTsKIApAQCAtMTk2Nyw3ICsxOTA3LDcgQEAKIAlyZXR1cm4gd2JzZF9pbml0KCZwbnBkZXYtPmRldiwgaW8sIGlycSwgZG1hLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IHdic2RfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqIGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKmRldikKIHsKIAl3YnNkX3NodXRkb3duKCZkZXYtPmRldiwgMSk7CiB9CkBAIC0xOTgwLDM3ICsxOTIwLDU0IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCB3YnNkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHdic2Rfc3VzcGVuZChzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJQlVHX09OKGhvc3QgPT0gTlVMTCk7CisKKwlyZXR1cm4gbW1jX3N1c3BlbmRfaG9zdChob3N0LT5tbWMsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB3YnNkX3Jlc3VtZShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQoreworCUJVR19PTihob3N0ID09IE5VTEwpOworCisJd2JzZF9pbml0X2RldmljZShob3N0KTsKKworCXJldHVybiBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKK30KKworc3RhdGljIGludCB3YnNkX3BsYXRmb3JtX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAJaW50IHJldDsKIAotCWlmICghbW1jKQorCWlmIChtbWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlEQkcoIlN1c3BlbmRpbmcuLi5cbiIpOwotCi0JcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHJldDsKKwlEQkdGKCJTdXNwZW5kaW5nLi4uXG4iKTsKIAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwogCisJcmV0ID0gd2JzZF9zdXNwZW5kKGhvc3QsIHN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJd2JzZF9jaGlwX3Bvd2Vyb2ZmKGhvc3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2JzZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCB3YnNkX3BsYXRmb3JtX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAKLQlpZiAoIW1tYykKKwlpZiAobW1jID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JREJHKCJSZXN1bWluZy4uLlxuIik7CisJREJHRigiUmVzdW1pbmcuLi5cbiIpOwogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKQEAgLTIwMjEsMTUgKzE5NzgsNjggQEAKIAkgKi8KIAltZGVsYXkoNSk7CiAKLQl3YnNkX2luaXRfZGV2aWNlKGhvc3QpOwotCi0JcmV0dXJuIG1tY19yZXN1bWVfaG9zdChtbWMpOworCXJldHVybiB3YnNkX3Jlc3VtZShob3N0KTsKIH0KIAorI2lmZGVmIENPTkZJR19QTlAKKworc3RhdGljIGludCB3YnNkX3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoJnBucF9kZXYtPmRldik7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdDsKKworCWlmIChtbWMgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlEQkdGKCJTdXNwZW5kaW5nLi4uXG4iKTsKKworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJcmV0dXJuIHdic2Rfc3VzcGVuZChob3N0LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgd2JzZF9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKCZwbnBfZGV2LT5kZXYpOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CisKKwlpZiAobW1jID09IE5VTEwpCisJCXJldHVybiAwOworCisJREJHRigiUmVzdW1pbmcuLi5cbiIpOworCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwkvKgorCSAqIFNlZSBpZiBjaGlwIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQuCisJICovCisJaWYgKGhvc3QtPmNvbmZpZyAhPSAwKSB7CisJCWlmICghd2JzZF9jaGlwX3ZhbGlkYXRlKGhvc3QpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkJIjogUG5QIGFjdGl2ZSBidXQgY2hpcCBub3QgY29uZmlndXJlZCEgIgorCQkJCSJZb3UgcHJvYmFibHkgaGF2ZSBhIGJ1Z2d5IEJJT1MuICIKKwkJCQkiQ29uZmlndXJpbmcgY2hpcCBtYW51YWxseS5cbiIpOworCQkJd2JzZF9jaGlwX2NvbmZpZyhob3N0KTsKKwkJfQorCX0KKworCS8qCisJICogQWxsb3cgZGV2aWNlIHRvIGluaXRpYWxpc2UgaXRzZWxmIHByb3Blcmx5LgorCSAqLworCW1kZWxheSg1KTsKKworCXJldHVybiB3YnNkX3Jlc3VtZShob3N0KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKwogI2Vsc2UgLyogQ09ORklHX1BNICovCiAKLSNkZWZpbmUgd2JzZF9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgd2JzZF9yZXN1bWUgTlVMTAorI2RlZmluZSB3YnNkX3BsYXRmb3JtX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3YnNkX3BsYXRmb3JtX3Jlc3VtZSBOVUxMCisKKyNkZWZpbmUgd2JzZF9wbnBfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdic2RfcG5wX3Jlc3VtZSBOVUxMCiAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIApAQCAtMjAzOSw4ICsyMDQ5LDggQEAKIAkucHJvYmUJCT0gd2JzZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdic2RfcmVtb3ZlKSwKIAotCS5zdXNwZW5kCT0gd2JzZF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gd2JzZF9yZXN1bWUsCisJLnN1c3BlbmQJPSB3YnNkX3BsYXRmb3JtX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3YnNkX3BsYXRmb3JtX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAl9LApAQCAtMjA1Myw2ICsyMDYzLDkgQEAKIAkuaWRfdGFibGUJPSBwbnBfZGV2X3RhYmxlLAogCS5wcm9iZQkJPSB3YnNkX3BucF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdic2RfcG5wX3JlbW92ZSksCisKKwkuc3VzcGVuZAk9IHdic2RfcG5wX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3YnNkX3BucF9yZXN1bWUsCiB9OwogCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwpAQCAtMjA3MiwzMSArMjA4NSwyNiBAQAogCiAjaWZkZWYgQ09ORklHX1BOUAogCi0JaWYgKCFub3BucCkKLQl7CisJaWYgKCFub3BucCkgewogCQlyZXN1bHQgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZ3YnNkX3BucF9kcml2ZXIpOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CiAJfQotCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCi0JaWYgKG5vcG5wKQotCXsKKwlpZiAobm9wbnApIHsKIAkJcmVzdWx0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJcmV0dXJuIHJlc3VsdDsKIAogCQl3YnNkX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUklWRVJfTkFNRSwgLTEpOwotCQlpZiAoIXdic2RfZGV2aWNlKQotCQl7CisJCWlmICghd2JzZF9kZXZpY2UpIHsKIAkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCiAJCXJlc3VsdCA9IHBsYXRmb3JtX2RldmljZV9hZGQod2JzZF9kZXZpY2UpOwotCQlpZiAocmVzdWx0KQotCQl7CisJCWlmIChyZXN1bHQpIHsKIAkJCXBsYXRmb3JtX2RldmljZV9wdXQod2JzZF9kZXZpY2UpOwogCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKIAkJCXJldHVybiByZXN1bHQ7CkBAIC0yMTE1LDggKzIxMjMsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCi0JaWYgKG5vcG5wKQotCXsKKwlpZiAobm9wbnApIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod2JzZF9kZXZpY2UpOwogCiAJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggYjliNzdjZi4uN2FiZDdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtNDczLDE0ICs0NzMsNiBAQAogCSAgSVhEUDQyNSBhbmQgQ295b3RlLiBJZiB5b3UgaGF2ZSBhbiBJWFAyMDAwIGJhc2VkIGJvYXJkIGFuZAogCSAgd291bGQgbGlrZSB0byB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgogCi1jb25maWcgTVREX0VQWEExMERCCi0JdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIEVweGExMGRiIgotCWRlcGVuZHMgb24gTVREX0NGSSAmJiBNVERfUEFSVElUSU9OUyAmJiBBUkNIX0NBTUVMT1QKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGZsYXNoIGRldmljZXMgb24gdGhlIEFsdGVyYQotCSAgRXhjYWxpYnVyIFhBMTAgRGV2ZWxvcG1lbnQgQm9hcmQuIElmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwKLQkgIGZvciBvbiBvZiB0aGVzZSBib2FyZHMgdGhlbiB5b3Ugc2hvdWxkIHNheSAnWScgb3RoZXJ3aXNlIHNheSAnTicuCi0KIGNvbmZpZyBNVERfRk9SVFVORVQKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gdGhlIEZvcnR1TmV0IGJvYXJkIgogCWRlcGVuZHMgb24gTVREX0NGSSAmJiBNVERfUEFSVElUSU9OUyAmJiBTQTExMDBfRk9SVFVORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDJmN2UyNTQuLmFiNzFmMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNiBAQAogb2JqLSQoQ09ORklHX01URF9DU1RNX01JUFNfSVhYKQkrPSBjc3RtX21pcHNfaXh4Lm8KIG9iai0kKENPTkZJR19NVERfREMyMTI4NSkJKz0gZGMyMTI4NS5vCiBvYmotJChDT05GSUdfTVREX0RJTE5FVFBDKQkrPSBkaWxuZXRwYy5vCi1vYmotJChDT05GSUdfTVREX0VQWEExMERCKQkrPSBlcHhhMTBkYi1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0lRODAzMTApCSs9IGlxODAzMTAubwogb2JqLSQoQ09ORklHX01URF9MNDQwR1gpCSs9IGw0NDBneC5vCiBvYmotJChDT05GSUdfTVREX0FNRDc2WFJPTSkJKz0gYW1kNzZ4cm9tLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZXB4YTEwZGItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvZXB4YTEwZGItZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1YjA3OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2VweGExMGRiLWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gRVBYQSBiYXNlZCBkZXZpY2VzCi0gKgotICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUmVkIEhhdCwgSW5jLgotICoKLSAqICRJZDogZXB4YTEwZGItZmxhc2guYyx2IDEuMTUgMjAwNS8xMS8wNyAxMToxNDoyNyBnbGVpeG5lciBFeHAgJAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KLSNpZmRlZiBDT05GSUdfRVBYQTEwREIKLSNkZWZpbmUgQk9BUkRfTkFNRSAiRVBYQTEwREIiCi0jZWxzZQotI2RlZmluZSBCT0FSRF9OQU1FICJFUFhBMURCIgotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbnJfcGFydHMgPSAwOwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7Ci0KLXN0YXRpYyBpbnQgZXB4YV9kZWZhdWx0X3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzKTsKLQotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIGVweGFfbWFwID0gewotCS5uYW1lID0JCSJFUFhBIGZsYXNoIiwKLQkuc2l6ZSA9CQlGTEFTSF9TSVpFLAotCS5iYW5rd2lkdGggPQkyLAotCS5waHlzID0JCUZMQVNIX1NUQVJULAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJhZnMiLCBOVUxMIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVweGFfbXRkX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCXByaW50ayhLRVJOX05PVElDRSAiJXMgZmxhc2ggZGV2aWNlOiAweCV4IGF0IDB4JXhcbiIsIEJPQVJEX05BTUUsIEZMQVNIX1NJWkUsIEZMQVNIX1NUQVJUKTsKLQotCWVweGFfbWFwLnZpcnQgPSBpb3JlbWFwKEZMQVNIX1NUQVJULCBGTEFTSF9TSVpFKTsKLQlpZiAoIWVweGFfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCAlcyBmbGFzaFxuIixCT0FSRF9OQU1FKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXNpbXBsZV9tYXBfaW5pdCgmZXB4YV9tYXApOwotCi0JbXltdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZlcHhhX21hcCk7Ci0JaWYgKCFteW10ZCkgewotCQlpb3VubWFwKCh2b2lkICopZXB4YV9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQkvKiBVbmxvY2sgdGhlIGZsYXNoIGRldmljZS4gKi8KLQlpZihteW10ZC0+dW5sb2NrKXsKLQkJZm9yIChpPTA7IGk8bXltdGQtPm51bWVyYXNlcmVnaW9ucztpKyspewotCQkJaW50IGo7Ci0JCQlmb3Ioaj0wO2o8bXltdGQtPmVyYXNlcmVnaW9uc1tpXS5udW1ibG9ja3M7aisrKXsKLQkJCQlteW10ZC0+dW5sb2NrKG15bXRkLG15bXRkLT5lcmFzZXJlZ2lvbnNbaV0ub2Zmc2V0ICsgaiAqIG15bXRkLT5lcmFzZXJlZ2lvbnNbaV0uZXJhc2VzaXplLG15bXRkLT5lcmFzZXJlZ2lvbnNbaV0uZXJhc2VzaXplKTsKLQkJCX0KLQkJfQotCX0KLQotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotCW5yX3BhcnRzID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMobXltdGQsIHByb2JlcywgJnBhcnRzLCAwKTsKLQotCWlmIChucl9wYXJ0cyA+IDApIHsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKG15bXRkLCBwYXJ0cywgbnJfcGFydHMpOwotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQkvKiBObyByZWNvZ25pc2VkIHBhcnRpdGlvbmluZyBzY2hlbWVzIGZvdW5kIC0gdXNlIGRlZmF1bHRzICovCi0JbnJfcGFydHMgPSBlcHhhX2RlZmF1bHRfcGFydGl0aW9ucyhteW10ZCwgJnBhcnRzKTsKLQlpZiAobnJfcGFydHMgPiAwKSB7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydHMsIG5yX3BhcnRzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogSWYgYWxsIGVsc2UgZmFpbHMuLi4gKi8KLQlhZGRfbXRkX2RldmljZShteW10ZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBlcHhhX210ZF9jbGVhbnVwKHZvaWQpCi17Ci0JaWYgKG15bXRkKSB7Ci0JCWlmIChucl9wYXJ0cykKLQkJCWRlbF9tdGRfcGFydGl0aW9ucyhteW10ZCk7Ci0JCWVsc2UKLQkJCWRlbF9tdGRfZGV2aWNlKG15bXRkKTsKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCX0KLQlpZiAoZXB4YV9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopZXB4YV9tYXAudmlydCk7Ci0JCWVweGFfbWFwLnZpcnQgPSAwOwotCX0KLX0KLQotCi0vKgotICogVGhpcyB3aWxsIGRvIGZvciBub3csIG9uY2Ugd2UgZGVjaWRlIHdoaWNoIGJvb3RsZHIgd2UncmUgZmluYWxseQotICogZ29pbmcgdG8gdXNlIHRoZW4gd2UnbGwgcmVtb3ZlIHRoaXMgZnVuY3Rpb24gYW5kIGRvIGl0IHByb3Blcmx5Ci0gKgotICogUGFydGlvbnMgYXJlIGN1cnJlbnRseSAoYXMgb2Zmc2V0cyBmcm9tIGJhc2Ugb2YgZmxhc2gpOgotICogMHgwMDAwMDAwMCAtIDB4MDAzRkZGRkYgLSBib290bG9hZGVyICghKQotICogMHgwMDQwMDAwMCAtIDB4MDBGRkZGRkYgLSBGbGFzaGRpc2sKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlcHhhX2RlZmF1bHRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3Rlciwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCWludCByZXQsIGk7Ci0JaW50IG5wYXJ0aXRpb25zID0gMDsKLQljaGFyICpuYW1lczsKLQljb25zdCBjaGFyICpuYW1lID0gImpmZnMiOwotCi0JcHJpbnRrKCJVc2luZyBkZWZhdWx0IHBhcnRpdGlvbnMgZm9yICVzXG4iLEJPQVJEX05BTUUpOwotCW5wYXJ0aXRpb25zPTE7Ci0JcGFydHMgPSBrbWFsbG9jKG5wYXJ0aXRpb25zKnNpemVvZigqcGFydHMpK3N0cmxlbihuYW1lKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtemVybyhwYXJ0cyxucGFydGl0aW9ucypzaXplb2YoKnBhcnRzKStzdHJsZW4obmFtZSkpOwotCWlmICghcGFydHMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCWk9MDsKLQluYW1lcyA9IChjaGFyICopJnBhcnRzW25wYXJ0aXRpb25zXTsKLQlwYXJ0c1tpXS5uYW1lID0gbmFtZXM7Ci0JbmFtZXMgKz0gc3RybGVuKG5hbWUpICsgMTsKLQlzdHJjcHkocGFydHNbaV0ubmFtZSwgbmFtZSk7Ci0KLSNpZmRlZiBDT05GSUdfRVBYQTEwREIKLQlwYXJ0c1tpXS5zaXplID0gRkxBU0hfU0laRS0weDAwNDAwMDAwOwotCXBhcnRzW2ldLm9mZnNldCA9IDB4MDA0MDAwMDA7Ci0jZWxzZQotCXBhcnRzW2ldLnNpemUgPSBGTEFTSF9TSVpFLTB4MDAxODAwMDA7Ci0JcGFydHNbaV0ub2Zmc2V0ID0gMHgwMDE4MDAwMDsKLSNlbmRpZgotCi0gb3V0OgotCSpwcGFydHMgPSBwYXJ0czsKLQlyZXR1cm4gbnBhcnRpdGlvbnM7Ci19Ci0KLQotbW9kdWxlX2luaXQoZXB4YV9tdGRfaW5pdCk7Ci1tb2R1bGVfZXhpdChlcHhhX210ZF9jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiQ2xpdmUgRGF2aWVzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFsdGVyYSBlcHhhIG10ZCBmbGFzaCBtYXAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDczM2JjMjUuLjQ5NTk4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMjcsNiArMjcsMTkgQEAKICMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy4KIGlmIE5FVERFVklDRVMKIAorY29uZmlnIElGQgorCXRyaXN0YXRlICJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUX0NMU19BQ1QKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGFuIGludGVybWlkaWF0ZSBkcml2ZXIgdGhhdCBhbGxvd3Mgc2hhcmluZyBvZgorCSAgcmVzb3VyY2VzLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgaWZiLiAgSWYgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiBvbmUgaWZiCisJICBkZXZpY2UgYXQgYSB0aW1lLCB5b3UgbmVlZCB0byBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLgorCSAgSW5zdGVhZCBvZiAnaWZiJywgdGhlIGRldmljZXMgd2lsbCB0aGVuIGJlIGNhbGxlZCAnaWZiMCcsCisJICAnaWZiMScgZXRjLgorCSAgTG9vayBhdCB0aGUgaXByb3V0ZTIgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgZm9yIHVzYWdlIGV0YworCiBjb25maWcgRFVNTVkKIAl0cmlzdGF0ZSAiRHVtbXkgbmV0IGRyaXZlciBzdXBwb3J0IgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggYjc0YTdjYi4uMDBlNzJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTEyNSw2ICsxMjUsNyBAQAogZW5kaWYKIAogb2JqLSQoQ09ORklHX0RVTU1ZKSArPSBkdW1teS5vCitvYmotJChDT05GSUdfSUZCKSArPSBpZmIubwogb2JqLSQoQ09ORklHX0RFNjAwKSArPSBkZTYwMC5vCiBvYmotJChDT05GSUdfREU2MjApICs9IGRlNjIwLm8KIG9iai0kKENPTkZJR19MQU5DRSkgKz0gbGFuY2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL0tjb25maWcgYi9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZwppbmRleCA0NzAzNjRkLi42MjUxODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZwpAQCAtMzEsMTYgKzMxLDMgQEAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhbiBBY29ybiBzeXN0ZW0gd2l0aCBvbmUgb2YgdGhlc2UgbmV0d29yayBjYXJkcywgeW91CiAJICBzaG91bGQgc2F5IFkgdG8gdGhpcyBvcHRpb24gaWYgeW91IHdpc2ggdG8gdXNlIGl0IHdpdGggTGludXguCi0KLWNvbmZpZyBBUk1fRVRIRVIwMAotCXRyaXN0YXRlICJBbHRlcmEgRXRoZXIwMCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEFSTSAmJiBBUkNIX0NBTUVMT1QKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIEFsdGVyYSdzIGV0aGVyMDAgZXRoZXJuZXQgbWFjIElQIGNvcmUuIFNheQotCSAgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoaXMgaW50byB0aGUga2VybmVsLiBJdAotCSAgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKHNheSBNIGhlcmUpIHRoYXQgY2FuIGJlIGluc2VydGVkLwotCSAgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgUExEIGlzIGNvbmZpZ3VyZWQuCi0JICBJZiB0aGlzIGRyaXZlciBpcyBydW5uaW5nIG9uIGFuIGVweGExMCBkZXZlbG9wbWVudCBib2FyZCB0aGVuIGl0Ci0JICB3aWxsIGdlbmVyYXRlIGEgc3VpdGFibGUgaHcgYWRkcmVzcyBiYXNlZCBvbiB0aGUgYm9hcmQgc2VyaWFsCi0JICBudW1iZXIgKE1URCBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzKS4gT3RoZXJ3aXNlIHlvdSB3aWxsCi0JICBuZWVkIHRvIHNldCBhIHN1aXRhYmxlIGh3IGFkZHJlc3MgdXNpbmcgaWZjb25maWcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUKaW5kZXggYjBkNzA2OC4uYmMyNjNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2FybS9NYWtlZmlsZQpAQCAtNCw3ICs0LDYgQEAKICMKIAogb2JqLSQoQ09ORklHX0FSTV9BTTc5Qzk2MUEpCSs9IGFtNzljOTYxYS5vCi1vYmotJChDT05GSUdfQVJNX0VUSEVSMDApCSs9IGV0aGVyMDAubwogb2JqLSQoQ09ORklHX0FSTV9FVEhFUkgpCSs9IGV0aGVyaC5vCiBvYmotJChDT05GSUdfQVJNX0VUSEVSMykJKz0gZXRoZXIzLm8KIG9iai0kKENPTkZJR19BUk1fRVRIRVIxKQkrPSBldGhlcjEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCmluZGV4IDg3Nzg5MWEuLjUzZTNhZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKQEAgLTY2OCw5ICs2NjgsOCBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhbTc5Yzk2MV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBfX2luaXQgYW03OWM5NjFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldl9wcml2ICpwcml2OwpAQCAtNzU4LDE1ICs3NTcsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYW03OWM5NjFfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhbTc5Yzk2MSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbTc5Yzk2MV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGFtNzljOTYxX3Byb2JlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhbTc5Yzk2MSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFtNzljOTYxX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhbTc5Yzk2MV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtNzljOTYxX2RyaXZlcik7CiB9CiAKIF9faW5pdGNhbGwoYW03OWM5NjFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIwMC5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxZjRlMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxNyArMCwwIEBACi0vKgotICogIGRyaXZlcnMvbmV0L2V0aGVyMDAuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLS8qIGluY2x1ZGVzICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGQvcGxkX2hvdHN3YXAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9leGNhbGlidXIuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL2V0aGVyMDAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90ZGtwaHkuaD4KLQotCi1NT0RVTEVfQVVUSE9SKCJDbGl2ZSBEYXZpZXMiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQWx0ZXJhIEV0aGVyMDAgSVAgY29yZSBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2RlZmluZSBQS1RfQlVGX1NaIDE1NDAgLyogU2l6ZSBvZiBlYWNoIHJ4IGJ1ZmZlciAqLwotI2RlZmluZSBFVEhfTlIgNCAvKiBOdW1iZXIgb2YgTUFDcyB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotCi0jZGVmaW5lIERFQlVHKHgpCi0KLSNkZWZpbmUgX19kbWFfdmEoeCkgKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGludClwcml2LT5kbWFfZGF0YSsoKCh1bnNpZ25lZCBpbnQpKHgpKSYoRVhDX1NQU1JBTV9CTE9DSzBfU0laRS0xKSkpCi0jZGVmaW5lIF9fZG1hX3BhKHgpICh1bnNpZ25lZCBpbnQpKEVYQ19TUFNSQU1fQkxPQ0swX0JBU0UrKCgodW5zaWduZWQgaW50KSh4KSktKHVuc2lnbmVkIGludClwcml2LT5kbWFfZGF0YSkpCi0KLSNkZWZpbmUgRVRIRVIwMF9CQVNFCTAKLSNkZWZpbmUJRVRIRVIwMF9UWVBFCi0jZGVmaW5lIEVUSEVSMDBfTkFNRSAiZXRoZXIwMCIKLSNkZWZpbmUgTUFDX1JFR19TSVpFIDB4NDAwIC8qIHNpemUgb2YgTUFDIHJlZ2lzdGVyIGFyZWEgKi8KLQotCi0KLS8qIHR5cGVkZWZzICovCi0KLS8qIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBkcml2ZXIgY29udHJvbCBzdHJ1Y3R1cmUgKi8KLQotI2RlZmluZSBSWF9OVU1fQlVGRiAgICAgMTAKLSNkZWZpbmUgUlhfTlVNX0ZERVNDICAgIDEwCi0jZGVmaW5lIFRYX05VTV9GREVTQyAgICAxMAotCi1zdHJ1Y3QgdHhfZmRhX2VudHsKLQlGREFfREVTQyAgZmQ7Ci0JQlVGX0RFU0MgIGJkOwotCUJVRl9ERVNDICBwYWQ7Ci19Owotc3RydWN0IHJ4X2ZkYV9lbnR7Ci0JRkRBX0RFU0MgIGZkOwotCUJVRl9ERVNDICBiZDsKLQlCVUZfREVTQyAgcGFkOwotfTsKLXN0cnVjdCByeF9ibGlzdF9lbnR7Ci0JRkRBX0RFU0MgIGZkOwotCUJVRl9ERVNDICBiZDsKLQlCVUZfREVTQyAgcGFkOwotfTsKLXN0cnVjdCBuZXRfcHJpdgotewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCXN0cnVjdCBza19idWZmKiBza2I7Ci0Jdm9pZCogZG1hX2RhdGE7Ci0Jc3RydWN0IHJ4X2JsaXN0X2VudCogIHJ4X2JsaXN0X3ZwOwotCXN0cnVjdCByeF9mZGFfZW50KiByeF9mZGFfcHRyOwotCXN0cnVjdCB0eF9mZGFfZW50KiB0eF9mZGFsaXN0X3ZwOwotCXN0cnVjdCB0cV9zdHJ1Y3QgIHRxX21lbXVwZGF0ZTsKLQl1bnNpZ25lZCBjaGFyICAgbWVtdXBkYXRlX3NjaGVkdWxlZDsKLQl1bnNpZ25lZCBjaGFyICAgcnhfZGlzYWJsZWQ7Ci0JdW5zaWduZWQgY2hhciAgIHF1ZXVlX3N0b3BwZWQ7Ci0Jc3BpbmxvY2tfdCByeF9sb2NrOwotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgdmVuZG9yX2lkWzJdPXsweDA3LDB4ZWR9OwotCi0jaWZkZWYgRVRIRVIwMF9ERUJVRwotCi0vKiBEdW1wIChtb3N0KSByZWdpc3RlcnMgZm9yIGRlYnVnZ2luZyBwdXBvc2VzICovCi0KLXN0YXRpYyB2b2lkIGR1bXBfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KXsKLQlzdHJ1Y3QgbmV0X3ByaXYqIHByaXY9ZGV2LT5wcml2OwotCXVuc2lnbmVkIGludCogaTsKLQotCXByaW50aygiXG4gUlggZnJlZSBkZXNjcmlwdG9yIGFyZWE6XG4iKTsKLQotCWZvcihpPSh1bnNpZ25lZCBpbnQqKXByaXYtPnJ4X2ZkYV9wdHI7Ci0JICAgIGk8KCh1bnNpZ25lZCBpbnQqKShwcml2LT5yeF9mZGFfcHRyK1JYX05VTV9GREVTQykpOyl7Ci0JCXByaW50aygiJSM4eCAlIzh4ICUjOHggJSM4eFxuIiwqaSwqKGkrMSksKihpKzIpLCooaSszKSk7Ci0JCWkrPTQ7Ci0JfQotCi0JcHJpbnRrKCJcbiBSWCBidWZmZXIgbGlzdDpcbiIpOwotCi0JZm9yKGk9KHVuc2lnbmVkIGludCopcHJpdi0+cnhfYmxpc3RfdnA7Ci0JICAgIGk8KCh1bnNpZ25lZCBpbnQqKShwcml2LT5yeF9ibGlzdF92cCtSWF9OVU1fQlVGRikpOyl7Ci0JCXByaW50aygiJSM4eCAlIzh4ICUjOHggJSM4eFxuIiwqaSwqKGkrMSksKihpKzIpLCooaSszKSk7Ci0JCWkrPTQ7Ci0JfQotCi0JcHJpbnRrKCJcbiBUWCBmcmFtZSBkZXNjcmlwdG9yIGxpc3Q6XG4iKTsKLQotCWZvcihpPSh1bnNpZ25lZCBpbnQqKXByaXYtPnR4X2ZkYWxpc3RfdnA7Ci0JICAgIGk8KCh1bnNpZ25lZCBpbnQqKShwcml2LT50eF9mZGFsaXN0X3ZwK1RYX05VTV9GREVTQykpOyl7Ci0JCXByaW50aygiJSM4eCAlIzh4ICUjOHggJSM4eFxuIiwqaSwqKGkrMSksKihpKzIpLCooaSszKSk7Ci0JCWkrPTQ7Ci0JfQotCi0JcHJpbnRrKCJcbmRtYSBjdGw9JSN4XG4iLHJlYWR3KEVUSEVSX0RNQV9DVEwoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJ0eGZybXB0cj0lI3hcbiIscmVhZHcoRVRIRVJfVFhGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJ0eHRocnNoPSUjeFxuIixyZWFkdyhFVEhFUl9UWFRIUlNIKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygidHhwb2xsY3RyPSUjeFxuIixyZWFkdyhFVEhFUl9UWFBPTExDVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJibGZybXB0cj0lI3hcbiIscmVhZHcoRVRIRVJfQkxGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJyeGZyYWdzaXplPSUjeFxuIixyZWFkdyhFVEhFUl9SWEZSQUdTSVpFKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygidHhfaW50X2VuPSUjeFxuIixyZWFkdyhFVEhFUl9JTlRfRU4oZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJmZGFfYmFzPSUjeFxuIixyZWFkdyhFVEhFUl9GREFfQkFTKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygiZmRhX2xpbT0lI3hcbiIscmVhZHcoRVRIRVJfRkRBX0xJTShkZXYtPmJhc2VfYWRkcikpKTsKLQlwcmludGsoImludF9zcmM9JSN4XG4iLHJlYWR3KEVUSEVSX0lOVF9TUkMoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJwYXVzZWNudD0lI3hcbiIscmVhZHcoRVRIRVJfUEFVU0VDTlQoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJyZW1wYXVjbnQ9JSN4XG4iLHJlYWR3KEVUSEVSX1JFTVBBVUNOVChkZXYtPmJhc2VfYWRkcikpKTsKLQlwcmludGsoInR4Y29uZnJtc3RhdD0lI3hcbiIscmVhZHcoRVRIRVJfVFhDT05GUk1TVEFUKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygibWFjX2N0bD0lI3hcbiIscmVhZHcoRVRIRVJfTUFDX0NUTChkZXYtPmJhc2VfYWRkcikpKTsKLQlwcmludGsoImFyY19jdGw9JSN4XG4iLHJlYWR3KEVUSEVSX0FSQ19DVEwoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJ0eF9jdGw9JSN4XG4iLHJlYWR3KEVUSEVSX1RYX0NUTChkZXYtPmJhc2VfYWRkcikpKTsKLX0KLSNlbmRpZiAvKiBFVEhFUjAwX0RFQlVHICovCi0KLQotc3RhdGljIGludCBldGhlcjAwX3dyaXRlX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBhZGRyZXNzLCBzaG9ydCB2YWx1ZSkKLXsKLQl2b2xhdGlsZSBpbnQgY291bnQgPSAxMDI0OwotCXdyaXRldyh2YWx1ZSxFVEhFUl9NRF9EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0Jd3JpdGV3KCBFVEhFUl9NRF9DQV9CVVNZX01TSyB8Ci0JCUVUSEVSX01EX0NBX1dSX01TSyB8Ci0JCShhZGRyZXNzICYgRVRIRVJfTURfQ0FfQUREUl9NU0spLAotCQlFVEhFUl9NRF9DQShkZXYtPmJhc2VfYWRkcikpOwotCi0JLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KLQl3aGlsZSgocmVhZHcoRVRIRVJfTURfQ0EoZGV2LT5iYXNlX2FkZHIpKSAmIEVUSEVSX01EX0NBX0JVU1lfTVNLKSYmY291bnQpewotCQljb3VudC0tOwotCX0KLQlpZiAoIWNvdW50KXsKLQkJcHJpbnRrKCJXcml0ZSB0byBwaHkgZmFpbGVkLCBhZGRyPSUjeCwgZGF0YT0lI3hcbiIsYWRkcmVzcywgdmFsdWUpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZXRoZXIwMF9yZWFkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBhZGRyZXNzKQotewotCXZvbGF0aWxlIGludCBjb3VudCA9IDEwMjQ7Ci0Jd3JpdGV3KCBFVEhFUl9NRF9DQV9CVVNZX01TSyB8Ci0JCShhZGRyZXNzICYgRVRIRVJfTURfQ0FfQUREUl9NU0spLAotCQlFVEhFUl9NRF9DQShkZXYtPmJhc2VfYWRkcikpOwotCi0JLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KLQl3aGlsZSgocmVhZHcoRVRIRVJfTURfQ0EoZGV2LT5iYXNlX2FkZHIpKSAmIEVUSEVSX01EX0NBX0JVU1lfTVNLKSYmY291bnQpewotCQljb3VudC0tOwotCX0KLQlpZiAoIWNvdW50KXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVhZCBmcm9tIHBoeSB0aW1lZCBvdXRcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIHJlYWR3KEVUSEVSX01EX0RBVEEoZGV2LT5iYXNlX2FkZHIpKTsKLX0KLQotc3RhdGljIHZvaWQgZXRoZXIwMF9waHlfaW50KGludCBpcnFfbnVtLCB2b2lkKiBkZXZfaWQsIHN0cnVjdCBwdF9yZWdzKiByZWdzKQotewotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY9ZGV2X2lkOwotCWludCBpcnFfc3RhdHVzOwotCi0JaXJxX3N0YXR1cz1ldGhlcjAwX3JlYWRfcGh5KGRldiwgUEhZX0lSUV9DT05UUk9MKTsKLQotCWlmKGlycV9zdGF0dXMgJiBQSFlfSVJRX0NPTlRST0xfQU5FR19DT01QX0lOVF9NU0spewotCQkvKgotCQkgKiBBdXRvbmVnb3RpYXRpb24gY29tcGxldGUgb24gZXB4YTEwZGIuIFRoZSBtYWMgZG9lc24ndAotCQkgKiB0d2lnIGlmIHdlJ3JlIGluIGZ1bGwgZHVwbGV4IHNvIHdlIG5lZWQgdG8gY2hlY2sgdGhlCi0JCSAqIHBoeSBzdGF0dXMgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgbWFjIGFjY29yZGluZ2x5Ci0JCSAqLwotCQlpZihldGhlcjAwX3JlYWRfcGh5KGRldiwgUEhZX1NUQVRVUykmKFBIWV9TVEFUVVNfMTBUX0ZfTVNLfFBIWV9TVEFUVVNfMTAwX1hfRl9NU0spKXsKLQkJCWludCB0bXA7Ci0JCQl0bXA9cmVhZGwoRVRIRVJfTUFDX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCQkJd3JpdGVsKHRtcHxFVEhFUl9NQUNfQ1RMX0ZVTExEVVBfTVNLLEVUSEVSX01BQ19DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQkJfQotCX0KLQotCWlmKGlycV9zdGF0dXMmUEhZX0lSUV9DT05UUk9MX0xTX0NIR19JTlRfTVNLKXsKLQotCQlpZihldGhlcjAwX3JlYWRfcGh5KGRldiwgUEhZX1NUQVRVUykmIFBIWV9TVEFUVVNfTElOS19NU0spewotCQkJLyogTGluayBpcyB1cCAqLwotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQkJLy9wcmludGsoIkNhcnJpZXIgb25cbiIpOwotCQl9ZWxzZXsKLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQkvL3ByaW50aygiQ2FycmllciBvZmZcbiIpOwotCi0JCX0KLQl9Ci0KLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfYmxpc3RfZW50cnkoc3RydWN0IHNrX2J1ZmYqIHNrYixzdHJ1Y3QgcnhfYmxpc3RfZW50KiBibGlzdF9lbnRfcHRyKXsKLQkvKiBNYWtlIHRoZSBidWZmZXIgY29uc2lzdGVudCB3aXRoIHRoZSBjYWNoZSBhcyB0aGUgbWFjIGlzIGdvaW5nIHRvIHdyaXRlCi0JICogZGlyZWN0bHkgaW50byBpdCovCi0JYmxpc3RfZW50X3B0ci0+ZmQuRkRTeXN0ZW09KHVuc2lnbmVkIGludClza2I7Ci0JYmxpc3RfZW50X3B0ci0+YmQuQnVmZkRhdGE9KGNoYXIqKV9fcGEoc2tiLT5kYXRhKTsKLQljb25zaXN0ZW50X3N5bmMoc2tiLT5kYXRhLFBLVF9CVUZfU1osUENJX0RNQV9GUk9NREVWSUNFKTsKLSAgICAgICAgLyogYWxpZ24gSVAgb24gMTYgQnl0ZSAoRE1BX0NUTCBzZXQgdG8gc2tpcCAyIGJ5dGVzKSAqLwotCXNrYl9yZXNlcnZlKHNrYiwyKTsKLQlibGlzdF9lbnRfcHRyLT5iZC5CdWZmTGVuZ3RoPVBLVF9CVUZfU1otMjsKLQlibGlzdF9lbnRfcHRyLT5mZC5GRExlbmd0aD0xOwotCWJsaXN0X2VudF9wdHItPmZkLkZEQ3RsPUZEQ1RMX0NPV05TRkRfTVNLOwotCWJsaXN0X2VudF9wdHItPmJkLkJEQ3RsPUJEQ1RMX0NPV05TQkRfTVNLOwotfQotCi0KLXN0YXRpYyBpbnQgZXRoZXIwMF9tZW1faW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXN0cnVjdCBuZXRfcHJpdiogcHJpdj1kZXYtPnByaXY7Ci0Jc3RydWN0IHR4X2ZkYV9lbnQgKnR4X2ZkX3B0ciwqdHhfZW5kX3B0cjsKLQlzdHJ1Y3QgcnhfYmxpc3RfZW50KiBibGlzdF9lbnRfcHRyOwotCWludCBpOwotCi0JLyoKLQkgKiBHcmFiIGEgYmxvY2sgb2Ygb24gY2hpcCBTUkFNIHRvIGNvbnRhaW4gdGhlIGNvbnRyb2wgc3R1Y3R1cmVzIGZvcgotCSAqIHRoZSBldGhlcm5ldCBNQUMuIFRoaXMgdW5jYWNoZWQgYmVjdWFzZSBpdCBuZWVkcyB0byBiZSBhY2Nlc3NlcyBieSBib3RoCi0JICogYnVzIG1hc3RlcnMgKGNwdSArIG1hYykuIEhvd2V2ZXIsIGl0IHNob3VsZG4ndCBtYXR0ZXIgdG9vIG11Y2ggaW4gdGVybXMKLQkgKiBvZiBzcGVlZCBhcyBpdHMgb24gY2hpcCBtZW1vcnkKLQkgKi8KLQlwcml2LT5kbWFfZGF0YT1pb3JlbWFwX25vY2FjaGUoRVhDX1NQU1JBTV9CTE9DSzBfQkFTRSxFWENfU1BTUkFNX0JMT0NLMF9TSVpFICk7Ci0JaWYgKCFwcml2LT5kbWFfZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwcml2LT5yeF9mZGFfcHRyPShzdHJ1Y3QgcnhfZmRhX2VudCopcHJpdi0+ZG1hX2RhdGE7Ci0JLyoKLQkgKiBOb3cgc2hhcmUgaXQgb3V0IGFtb25nc3QgdGhlIEZyYW1lIGRlc2NyaXB0b3JzIGFuZCB0aGUgYnVmZmVyIGxpc3QKLQkgKi8KLQlwcml2LT5yeF9ibGlzdF92cD0oc3RydWN0IHJ4X2JsaXN0X2VudCopKCh1bnNpZ25lZCBpbnQpcHJpdi0+ZG1hX2RhdGErUlhfTlVNX0ZERVNDKnNpemVvZihzdHJ1Y3QgcnhfZmRhX2VudCkpOwotCi0JLyoKLQkgKkluaXRhbGlzZSB0aGUgRkRBIGxpc3QKLQkgKi8KLQkvKiBzZXQgb3duZXJzaGlwIHRvIHRoZSBjb250cm9sbGVyICovCi0JbWVtc2V0KHByaXYtPnJ4X2ZkYV9wdHIsMHg4MCxSWF9OVU1fRkRFU0Mqc2l6ZW9mKHN0cnVjdCByeF9mZGFfZW50KSk7Ci0KLQkvKgotCSAqSW5pdGlhbGlzZSB0aGUgYnVmZmVyIGxpc3QKLQkgKi8KLQlibGlzdF9lbnRfcHRyPXByaXYtPnJ4X2JsaXN0X3ZwOwotCWk9MDsKLQl3aGlsZShibGlzdF9lbnRfcHRyPChwcml2LT5yeF9ibGlzdF92cCtSWF9OVU1fQlVGRikpewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlibGlzdF9lbnRfcHRyLT5mZC5GRExlbmd0aD0xOwotCQlza2I9ZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKTsKLQkJaWYoc2tiKXsKLQkJCXNldHVwX2JsaXN0X2VudHJ5KHNrYixibGlzdF9lbnRfcHRyKTsKLQkJCWJsaXN0X2VudF9wdHItPmZkLkZETmV4dD0oRkRBX0RFU0MqKV9fZG1hX3BhKGJsaXN0X2VudF9wdHIrMSk7Ci0JCQlibGlzdF9lbnRfcHRyLT5iZC5CRFN0YXQ9aSsrOwotCQkJYmxpc3RfZW50X3B0cisrOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJpbnRrKCJGYWlsZWQgdG8gaW5pdGFsaXNlIGJ1ZmZlciBsaXN0XG4iKTsKLQkJfQotCi0JfQotCWJsaXN0X2VudF9wdHItLTsKLQlibGlzdF9lbnRfcHRyLT5mZC5GRE5leHQ9KEZEQV9ERVNDKilfX2RtYV9wYShwcml2LT5yeF9ibGlzdF92cCk7Ci0KLQlwcml2LT50eF9mZGFsaXN0X3ZwPShzdHJ1Y3QgdHhfZmRhX2VudCopKHByaXYtPnJ4X2JsaXN0X3ZwK1JYX05VTV9CVUZGKTsKLQotCS8qIEluaXRpYWxpc2UgdGhlIGJ1ZmZlcnMgdG8gYmUgYSBjaXJjdWxhciBsaXN0LiBUaGUgbWFjIHdpbGwgdGhlbiBnbyBwb2xsCi0JICogdGhlIGxpc3QgdW50aWwgaXQgZmluZHMgYSBmcmFtZSByZWFkeSB0byB0cmFuc21pdCAqLwotCXR4X2VuZF9wdHI9cHJpdi0+dHhfZmRhbGlzdF92cCtUWF9OVU1fRkRFU0M7Ci0JZm9yKHR4X2ZkX3B0cj1wcml2LT50eF9mZGFsaXN0X3ZwO3R4X2ZkX3B0cjx0eF9lbmRfcHRyO3R4X2ZkX3B0cisrKXsKLQkJdHhfZmRfcHRyLT5mZC5GRE5leHQ9KEZEQV9ERVNDKilfX2RtYV9wYSgodHhfZmRfcHRyKzEpKTsKLQkJdHhfZmRfcHRyLT5mZC5GREN0bD0xOwotCQl0eF9mZF9wdHItPmZkLkZEU3RhdD0wOwotCQl0eF9mZF9wdHItPmZkLkZETGVuZ3RoPTE7Ci0KLQl9Ci0JLyogQ2hhbmdlIHRoZSBsYXN0IEZETmV4dCBwb2ludGVyIHRvIG1ha2UgYSBjaXJjdWxhciBsaXN0ICovCi0JdHhfZmRfcHRyLS07Ci0JdHhfZmRfcHRyLT5mZC5GRE5leHQ9KEZEQV9ERVNDKilfX2RtYV9wYShwcml2LT50eF9mZGFsaXN0X3ZwKTsKLQotCS8qIFBvaW50IHRoZSBkZXZpY2UgYXQgdGhlIGNoYWluIG9mIFJ4IGFuZCBUeCBCdWZmZXJzICovCi0Jd3JpdGVsKCh1bnNpZ25lZCBpbnQpX19kbWFfcGEocHJpdi0+cnhfZmRhX3B0ciksRVRIRVJfRkRBX0JBUyhkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCgoUlhfTlVNX0ZERVNDLTEpKnNpemVvZihzdHJ1Y3QgcnhfZmRhX2VudCksRVRIRVJfRkRBX0xJTShkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCgodW5zaWduZWQgaW50KV9fZG1hX3BhKHByaXYtPnJ4X2JsaXN0X3ZwKSxFVEhFUl9CTEZSTVBUUihkZXYtPmJhc2VfYWRkcikpOwotCi0Jd3JpdGVsKCh1bnNpZ25lZCBpbnQpX19kbWFfcGEocHJpdi0+dHhfZmRhbGlzdF92cCksRVRIRVJfVFhGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgZXRoZXIwMF9tZW1fdXBkYXRlKHZvaWQqIGRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2PWRldl9pZDsKLQlzdHJ1Y3QgbmV0X3ByaXYqIHByaXY9ZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmKiBza2I7Ci0Jc3RydWN0IHR4X2ZkYV9lbnQgKmZkYV9wdHI9cHJpdi0+dHhfZmRhbGlzdF92cDsKLQlzdHJ1Y3QgcnhfYmxpc3RfZW50KiBibGlzdF9lbnRfcHRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlwcml2LT50cV9tZW11cGRhdGUuc3luYz0wOwotCS8vcHJpdi0+dHFfbWVtdXBkYXRlLmxpc3Q9Ci0JcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZD0wOwotCi0JLyogVHJhbnNtaXQgaW50ZXJydXB0ICovCi0Jd2hpbGUoZmRhX3B0cjwocHJpdi0+dHhfZmRhbGlzdF92cCtUWF9OVU1fRkRFU0MpKXsKLQkJaWYoIShGRENUTF9DT1dOU0ZEX01TSyZmZGFfcHRyLT5mZC5GREN0bCkgJiYgKEVUSEVSX1RYX1NUQVRfQ09NUF9NU0smZmRhX3B0ci0+ZmQuRkRTdGF0KSl7Ci0JCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQlwcml2LT5zdGF0cy50eF9ieXRlcys9ZmRhX3B0ci0+YmQuQnVmZkxlbmd0aDsKLQkJCXNrYj0oc3RydWN0IHNrX2J1ZmYqKWZkYV9wdHItPmZkLkZEU3lzdGVtOwotCQkJLy9wcmludGsoIiVkOnR4Y2xuOmZkYT0lI3ggc2tiPSUjeFxuIixqaWZmaWVzLGZkYV9wdHIsc2tiKTsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWZkYV9wdHItPmZkLkZEU3lzdGVtPTA7Ci0JCQlmZGFfcHRyLT5mZC5GRFN0YXQ9MDsKLQkJCWZkYV9wdHItPmZkLkZEQ3RsPTA7Ci0JCX0KLQkJZmRhX3B0cisrOwotCX0KLQkvKiBGaWxsIGluIGFueSBtaXNzaW5nIGJ1ZmZlcnMgZnJvbSB0aGUgcmVjZWl2ZWQgcXVldWUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jayxmbGFncyk7Ci0JYmxpc3RfZW50X3B0cj1wcml2LT5yeF9ibGlzdF92cDsKLQl3aGlsZShibGlzdF9lbnRfcHRyPChwcml2LT5yeF9ibGlzdF92cCtSWF9OVU1fQlVGRikpewotCQkvKiBmZC5GRFN5c3RlbSBvZiAwIGluZGljYXRlcyB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciBpbiB0aGUgSVNSICovCi0JCWlmKCFibGlzdF9lbnRfcHRyLT5mZC5GRFN5c3RlbSl7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJc2tiPWRldl9hbGxvY19za2IoUEtUX0JVRl9TWik7Ci0JCQlibGlzdF9lbnRfcHRyLT5mZC5GRFN5c3RlbT0odW5zaWduZWQgaW50KXNrYjsKLQkJCWlmKHNrYil7Ci0JCQkJc2V0dXBfYmxpc3RfZW50cnkoc2tiLGJsaXN0X2VudF9wdHIpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWJsaXN0X2VudF9wdHIrKzsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jayxmbGFncyk7Ci0JaWYocHJpdi0+cXVldWVfc3RvcHBlZCl7Ci0JCS8vcHJpbnRrKCIlZDpjbG46c3RhcnQgcVxuIixqaWZmaWVzKTsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQl9Ci0JaWYocHJpdi0+cnhfZGlzYWJsZWQpewotCQkvL3ByaW50aygiJWQ6ZW5hYmxlX2lycVxuIixqaWZmaWVzKTsKLQkJcHJpdi0+cnhfZGlzYWJsZWQ9MDsKLQkJd3JpdGVsKEVUSEVSX1JYX0NUTF9SWEVOX01TSyxFVEhFUl9SWF9DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBldGhlcjAwX2ludCggaW50IGlycV9udW0sIHZvaWQqIGRldl9pZCwgc3RydWN0IHB0X3JlZ3MqIHJlZ3MpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldj1kZXZfaWQ7Ci0Jc3RydWN0IG5ldF9wcml2KiBwcml2PWRldi0+cHJpdjsKLQotCXVuc2lnbmVkIGludCAgIGludGVycnVwdFZhbHVlOwotCi0JaW50ZXJydXB0VmFsdWU9cmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpOwotCi0JLy9wcmludGsoIklOVF9TUkM9JXhcbiIsaW50ZXJydXB0VmFsdWUpOwotCi0JaWYoIShyZWFkbChFVEhFUl9JTlRfU1JDKGRldi0+YmFzZV9hZGRyKSkgJiBFVEhFUl9JTlRfU1JDX0lSUV9NU0spKQotCXsKLQkJcmV0dXJuOwkJLyogSW50ZXJydXB0IHdhc24ndCBjYXVzZWQgYnkgdXMhISAqLwotCX0KLQotCWlmKHJlYWRsKEVUSEVSX0lOVF9TUkMoZGV2LT5iYXNlX2FkZHIpKSYKLQkgICAoRVRIRVJfSU5UX1NSQ19JTlRNQUNSWF9NU0sgfAotCSAgICBFVEhFUl9JTlRfU1JDX0ZEQUVYX01TSyB8Ci0JICAgIEVUSEVSX0lOVF9TUkNfQkxFWF9NU0spKSB7Ci0JCXN0cnVjdCByeF9ibGlzdF9lbnQqIGJsaXN0X2VudF9wdHI7Ci0JCXN0cnVjdCByeF9mZGFfZW50KiBmZGFfZW50X3B0cjsKLQkJc3RydWN0IHNrX2J1ZmYqIHNrYjsKLQotCQlmZGFfZW50X3B0cj1wcml2LT5yeF9mZGFfcHRyOwotCQlzcGluX2xvY2soJnByaXYtPnJ4X2xvY2spOwotCQl3aGlsZShmZGFfZW50X3B0cjwocHJpdi0+cnhfZmRhX3B0citSWF9OVU1fRkRFU0MpKXsKLQkJCWludCByZXN1bHQ7Ci0KLQkJCWlmKCEoZmRhX2VudF9wdHItPmZkLkZEQ3RsJkZEQ1RMX0NPV05TRkRfTVNLKSkKLQkJCXsKLQkJCQkvKiBUaGlzIGZyYW1lIGlzIHJlYWR5IGZvciBwcm9jZXNzaW5nICovCi0JCQkJLypmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGJ1ZmZlciBpbiB0aGUgYnVmZmVybGlzdCAqLwotCQkJCWJsaXN0X2VudF9wdHI9cHJpdi0+cnhfYmxpc3RfdnArZmRhX2VudF9wdHItPmJkLkJEU3RhdDsKLQkJCQlza2I9KHN0cnVjdCBza19idWZmKilibGlzdF9lbnRfcHRyLT5mZC5GRFN5c3RlbTsKLQotCQkJCS8qIFBhc3MgdGhpcyBza2IgdXAgdGhlIHN0YWNrICovCi0JCQkJc2tiLT5kZXY9ZGV2OwotCQkJCXNrYl9wdXQoc2tiLGZkYV9lbnRfcHRyLT5mZC5GRExlbmd0aCk7Ci0JCQkJc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKLQkJCQlza2ItPmlwX3N1bW1lZD1DSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCQlyZXN1bHQ9bmV0aWZfcngoc2tiKTsKLQkJCQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotCQkJCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQlwcml2LT5zdGF0cy5yeF9ieXRlcys9ZmRhX2VudF9wdHItPmZkLkZETGVuZ3RoOwotCi0JCQkJLyogRnJlZSB0aGUgRkRBIGVudHJ5ICovCi0JCQkJZmRhX2VudF9wdHItPmJkLkJEU3RhdD0weGZmOwotCQkJCWZkYV9lbnRfcHRyLT5mZC5GREN0bD1GRENUTF9DT1dOU0ZEX01TSzsKLQotCQkJCS8qIEFsbG9jYXRlIGEgbmV3IHNrYiBhbmQgcG9pbnQgdGhlIGJkIGVudHJ5IHRvIGl0ICovCi0JCQkJYmxpc3RfZW50X3B0ci0+ZmQuRkRTeXN0ZW09MDsKLQkJCQlza2I9ZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKTsKLQkJCQkvL3ByaW50aygiYWxsb2Nza2I9JSN4XG4iLHNrYik7Ci0JCQkJaWYoc2tiKXsKLQkJCQkJc2V0dXBfYmxpc3RfZW50cnkoc2tiLGJsaXN0X2VudF9wdHIpOwotCi0JCQkJfQotCQkJCWVsc2UgaWYoIXByaXYtPm1lbXVwZGF0ZV9zY2hlZHVsZWQpewotCQkJCQlpbnQgdG1wOwotCQkJCQkvKiBUaGVyZSBhcmUgbm8gYnVmZmVycyBhdCB0aGUgbW9tZW50LCBzbyBzY2hlZHVsZSAqLwotCQkJCQkvKiB0aGUgYmFja2dyb3VuZCB0YXNrIHRvIHNvcnQgdGhpcyBvdXQgKi8KLQkJCQkJc2NoZWR1bGVfdGFzaygmcHJpdi0+dHFfbWVtdXBkYXRlKTsKLQkJCQkJcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZD0xOwotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6Tm8gYnVmZmVycyIsZGV2LT5uYW1lKTsKLQkJCQkJLyogSWYgdGhpcyBpbnRlcnJ1cHQgd2FzIGR1ZSB0byBhIGxhY2sgb2YgYnVmZmVycyB0aGVuCi0JCQkJCSAqIHdlJ2QgYmV0dGVyIHN0b3AgdGhlIHJlY2VpdmVyIHRvbyAqLwotCQkJCQlpZihpbnRlcnJ1cHRWYWx1ZSZFVEhFUl9JTlRfU1JDX0JMRVhfTVNLKXsKLQkJCQkJCXByaXYtPnJ4X2Rpc2FibGVkPTE7Ci0JCQkJCQl0bXA9cmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpOwotCQkJCQkJd3JpdGVsKHRtcCZ+RVRIRVJfUlhfQ1RMX1JYRU5fTVNLLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOkhhbHRpbmcgcngiLGRldi0+bmFtZSk7Ci0JCQkJCX0KLQotCQkJCX0KLQotCQkJfQotCQkJZmRhX2VudF9wdHIrKzsKLQkJfQotCQlzcGluX3VubG9jaygmcHJpdi0+cnhfbG9jayk7Ci0KLQkJLyogQ2xlYXIgdGhlICBpbnRlcnJ1cHRzICovCi0JCXdyaXRlbChFVEhFUl9JTlRfU1JDX0lOVE1BQ1JYX01TSyB8IEVUSEVSX0lOVF9TUkNfRkRBRVhfTVNLCi0JCSAgICAgICB8IEVUSEVSX0lOVF9TUkNfQkxFWF9NU0ssRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpOwotCi0JfQotCi0JaWYocmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpJkVUSEVSX0lOVF9TUkNfSU5UTUFDVFhfTVNLKXsKLQotCQlpZighcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZCl7Ci0JCQlzY2hlZHVsZV90YXNrKCZwcml2LT50cV9tZW11cGRhdGUpOwotCQkJcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZD0xOwotCQl9Ci0JCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KLQkJd3JpdGVsKEVUSEVSX0lOVF9TUkNfSU5UTUFDVFhfTVNLLEVUSEVSX0lOVF9TUkMoZGV2LT5iYXNlX2FkZHIpKTsKLQl9Ci0KLQlpZiAocmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpICYgKEVUSEVSX0lOVF9TUkNfU1dJTlRfTVNLfAotCQkJCQkJICAgIEVUSEVSX0lOVF9TUkNfSU5URUFSTk9UX01TS3wKLQkJCQkJCSAgICBFVEhFUl9JTlRfU1JDX0lOVExJTktfTVNLfAotCQkJCQkJICAgIEVUSEVSX0lOVF9TUkNfSU5URVhCRF9NU0t8Ci0JCQkJCQkgICAgRVRIRVJfSU5UX1NSQ19JTlRUWENUTENNUF9NU0spKQotCXsKLQkJLyoKLQkJICoJTm90IHVzaW5nIGFueSBvZiB0aGVzZSBzbyB0aGV5IHNob3VsZG4ndCBoYXBwZW4KLQkJICoKLQkJICoJSW4gdGhlIGNhc2VkIG9mIElOVEVYQkQgLSBpZiB5b3UgYWxsb2NhdGUgbW9yZQotCQkgKiAgICAgIHRoYW4gMjggZGVjc3JpcHRvcnMgeW91IG1heSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoaXMKLQkJICovCi0JCXByaW50aygiTm90IHVzaW5nIHRoaXMgaW50ZXJydXB0XG4iKTsKLQl9Ci0KLQlpZiAocmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpICYKLQkgICAgKEVUSEVSX0lOVF9TUkNfSU5UU0JVU19NU0sgfAotCSAgICAgRVRIRVJfSU5UX1NSQ19JTlROUkFCVF9NU0sKLQkgICAgIHxFVEhFUl9JTlRfU1JDX0RNUEFSRVJSX01TSykpCi0JewotCQkvKgotCQkgKiBIYXJkd2FyZSBlcnJvcnMsIHdlIGNhbiBlaXRoZXIgaWdub3JlIHRoZW0gYW5kIGhvcGUgdGhleSBnbyBhd2F5Ci0JCSAqb3IgcmVzZXQgdGhlIGRldmljZSwgSSdsbCB0cnkgdGhlIGZpcnN0IGZvciBub3cgdG8gc2VlIGlmIHRoZXkgaGFwcGVuCi0JCSAqLwotCQlwcmludGsoIkhhcmR3YXJlIGVycm9yXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGV0aGVyMDBfc2V0dXBfZXRoZXJuZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWludCB0bXA7Ci0KLQlkZXYtPmFkZHJfbGVuPTY7Ci0Jd3JpdGV3KDAsRVRIRVJfQVJDX0FEUihkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCgoZGV2LT5kZXZfYWRkclswXTw8MjQpIHwKLQkJKGRldi0+ZGV2X2FkZHJbMV08PDE2KSB8Ci0JCShkZXYtPmRldl9hZGRyWzJdPDw4KSB8Ci0JCWRldi0+ZGV2X2FkZHJbM10sCi0JCUVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQl3cml0ZXcoNCxFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0JdG1wPXJlYWRsKEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0JdG1wJj0weGZmZmY7Ci0JdG1wfD0oZGV2LT5kZXZfYWRkcls0XTw8MjQpIHwgKGRldi0+ZGV2X2FkZHJbNV08PDE2KTsKLQl3cml0ZWwodG1wLCBFVEhFUl9BUkNfREFUQShkZXYtPmJhc2VfYWRkcikpOwotCS8qIEVuYWJsZSB0aGlzIGVudHJ5IGluIHRoZSBBUkMgKi8KLQotCXdyaXRlbCgxLEVUSEVSX0FSQ19FTkEoZGV2LT5iYXNlX2FkZHIpKTsKLQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZCBldGhlcjAwX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgKi8KLQl3cml0ZXcoRVRIRVJfTUFDX0NUTF9SRVNFVF9NU0ssRVRIRVJfTUFDX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UncmUgbm90IGdvaW5nIHRvIHNlbmQgYW55dGhpbmcKLQkgKi8KLQotCXdyaXRldyhFVEhFUl9UWF9DVExfVFhIQUxUX01TSyxFVEhFUl9UWF9DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHdlJ3JlIG5vdCBnb2luZyB0byByZWNlaXZlIGFueXRoaW5nCi0JICovCi0Jd3JpdGV3KEVUSEVSX1JYX0NUTF9SWEhBTFRfTVNLLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JLyoKLQkgKiBEaXNhYmxlIEludGVycnVwdHMgZm9yIG5vdywgYW5kIHNldCB0aGUgYnVyc3Qgc2l6ZSB0byA4IGJ5dGVzCi0JICovCi0KLQl3cml0ZWwoRVRIRVJfRE1BX0NUTF9JTlRNQVNLX01TSyB8Ci0JICAgICAgICgoOCA8PCBFVEhFUl9ETUFfQ1RMX0RNQlVSU1RfT0ZTVCkgJiBFVEhFUl9ETUFfQ1RMX0RNQlVSU1RfTVNLKQotCSAgICAgICB8KDI8PEVUSEVSX0RNQV9DVExfUlhBTElHTl9PRlNUKSwKLQkgICAgICAgRVRIRVJfRE1BX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0KLQkvKgotCSAqIFNldCBUeFRocnNoIC0gc3RhcnQgdHJhbnNtaXR0aW5nIGEgcGFja2V0IGFmdGVyIDE1MTQKLQkgKiBieXRlcyBvciB3aGVuIGEgcGFja2V0IGlzIGNvbXBsZXRlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QKLQkgKi8KLQkgd3JpdGV3KDE1MTQsRVRIRVJfVFhUSFJTSChkZXYtPmJhc2VfYWRkcikpOwotCi0JLyoKLQkgKiBTZXQgVHhQb2xsQ3RyLiAgRWFjaCBjeWNsZSBpcwotCSAqIDYxLjQ0IG1pY3Jvc2Vjb25kcyB3aXRoIGEgMzMgTUh6IGJ1cwotCSAqLwotCSB3cml0ZXcoMSxFVEhFUl9UWFBPTExDVFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCS8qCi0JICogU2V0IFJ4X0N0bCAtIFR1cm4gb2ZmIHJlY2VwdGlvbiBhbmQgbGV0IFJ4RGF0YSB0dXJuIGl0Ci0JICogb24gbGF0ZXIKLQkgKi8KLQkgd3JpdGV3KEVUSEVSX1JYX0NUTF9SWEhBTFRfTVNLLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi19Ci0KLQotc3RhdGljIHZvaWQgZXRoZXIwMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JaW50IGNvdW50PWRldi0+bWNfY291bnQ7Ci0KLQkvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSBpZiBpdCdzIGFza2VkIGZvci4gKi8KLQotCWlmIChkZXYtPmZsYWdzJklGRl9QUk9NSVNDKXsKLQotCQl3cml0ZXcoIEVUSEVSX0FSQ19DVExfQ09NUEVOX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0JST0FEQUNDX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0dST1VQQUNDX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX1NUQVRJT05BQ0NfTVNLLAotCQkJRVRIRVJfQVJDX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBHZXQgYWxsIG11bHRpY2FzdCBwYWNrZXRzIGlmIHJlcXVpcmVkLCBvciBpZiB0aGVyZSBhcmUgdG9vCi0JICogbWFueSBhZGRyZXNzZXMgdG8gZml0IGluIGhhcmR3YXJlCi0JICovCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpewotCQl3cml0ZXcoIEVUSEVSX0FSQ19DVExfQ09NUEVOX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0dST1VQQUNDX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0JST0FEQUNDX01TSywKLQkJCUVUSEVSX0FSQ19DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZGV2LT5tY19jb3VudCA+IChFVEhFUl9BUkNfU0laRSAtIDEpKXsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJUb28gbWFueSBtdWx0aWNhc3QgYWRkcmVzc2VzIGZvciBoYXJkd2FyZSB0byBmaWx0ZXIgLSByZWNlaXZpbmcgYWxsIG11bHRpY2FzdCBwYWNrZXRzXG4iKTsKLQkJd3JpdGV3KCBFVEhFUl9BUkNfQ1RMX0NPTVBFTl9NU0sgfAotCQkJRVRIRVJfQVJDX0NUTF9HUk9VUEFDQ19NU0sgfAotCQkJRVRIRVJfQVJDX0NUTF9CUk9BREFDQ19NU0ssCi0JCQlFVEhFUl9BUkNfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZihkZXYtPm1jX2NvdW50KXsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0X2VudD1kZXYtPm1jX2xpc3Q7Ci0JCXVuc2lnbmVkIGludCB0ZW1wLGk7Ci0JCURFQlVHKHByaW50aygibWNfY291bnQ9JWQgbWNfbGlzdD0lI3hcbiIsZGV2LT4gbWNfY291bnQsIGRldi0+bWNfbGlzdCkpOwotCQlERUJVRyhwcmludGsoIm1jIGFkZHI9JTAyI3glMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKLQkJCSAgICAgbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzVdLAotCQkJICAgICBtY19saXN0X2VudC0+ZG1pX2FkZHJbNF0sCi0JCQkgICAgIG1jX2xpc3RfZW50LT5kbWlfYWRkclszXSwKLQkJCSAgICAgbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzJdLAotCQkJICAgICBtY19saXN0X2VudC0+ZG1pX2FkZHJbMV0sCi0JCQkgICAgIG1jX2xpc3RfZW50LT5kbWlfYWRkclswXSk7KQotCi0JCS8qCi0JCSAqIFRoZSBmaXJzdCA2IGJ5dGVzIGFyZSB0aGUgTUFDIGFkZHJlc3MsIHNvCi0JCSAqIGRvbid0IGNoYW5nZSB0aGVtIQotCQkgKi8KLQkJd3JpdGV3KDQsRVRIRVJfQVJDX0FEUihkZXYtPmJhc2VfYWRkcikpOwotCQl0ZW1wPXJlYWRsKEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0JCXRlbXAmPTB4ZmZmZjAwMDA7Ci0KLQkJLyogRGlzYWJsZSB0aGUgY3VycmVudCBtdWx0aWNhc3Qgc3R1ZmYgKi8KLQkJd3JpdGVsKDEsRVRIRVJfQVJDX0VOQShkZXYtPmJhc2VfYWRkcikpOwotCi0JCWZvcig7Oyl7Ci0JCQl0ZW1wfD1tY19saXN0X2VudC0+ZG1pX2FkZHJbMV0gfAotCQkJCW1jX2xpc3RfZW50LT5kbWlfYWRkclswXTw8ODsKLQkJCXdyaXRlbCh0ZW1wLEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkJCWk9cmVhZGwoRVRIRVJfQVJDX0FEUihkZXYtPmJhc2VfYWRkcikpOwotCQkJd3JpdGV3KGkrNCxFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkJCXRlbXA9bWNfbGlzdF9lbnQtPmRtaV9hZGRyWzVdfAotCQkJCW1jX2xpc3RfZW50LT5kbWlfYWRkcls0XTw8OCB8Ci0JCQkJbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzNdPDwxNiB8Ci0JCQkJbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzJdPDwyNDsKLQkJCXdyaXRlbCh0ZW1wLEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkJCWNvdW50LS07Ci0JCQlpZighbWNfbGlzdF9lbnQtPm5leHQgfHwgIWNvdW50KXsKLQkJCQlicmVhazsKLQkJCX0KLQkJCURFQlVHKHByaW50aygibWNfbGlzdF9uZXh0PSUjeFxuIixtY19saXN0X2VudC0+bmV4dCk7KQotCQkJbWNfbGlzdF9lbnQ9bWNfbGlzdF9lbnQtPm5leHQ7Ci0KLQotCQkJaT1yZWFkbChFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0JCQl3cml0ZWwoaSs0LEVUSEVSX0FSQ19BRFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCQkJdGVtcD1tY19saXN0X2VudC0+ZG1pX2FkZHJbM118Ci0JCQkJbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzJdPDw4IHwKLQkJCQltY19saXN0X2VudC0+ZG1pX2FkZHJbMV08PDE2IHwKLQkJCQltY19saXN0X2VudC0+ZG1pX2FkZHJbMF08PDI0OwotCQkJd3JpdGVsKHRlbXAsRVRIRVJfQVJDX0RBVEEoZGV2LT5iYXNlX2FkZHIpKTsKLQotCQkJaT1yZWFkbChFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0JCQl3cml0ZWwoaSs0LEVUSEVSX0FSQ19BRFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCQkJdGVtcD1tY19saXN0X2VudC0+ZG1pX2FkZHJbNF08PDE2IHwKLQkJCQltY19saXN0X2VudC0+ZG1pX2FkZHJbNV08PDI0OwotCi0JCQl3cml0ZWwodGVtcCxFVEhFUl9BUkNfREFUQShkZXYtPmJhc2VfYWRkcikpOwotCi0JCQljb3VudC0tOwotCQkJaWYoIW1jX2xpc3RfZW50LT5uZXh0IHx8ICFjb3VudCl7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltY19saXN0X2VudD1tY19saXN0X2VudC0+bmV4dDsKLQkJfQotCi0KLQkJaWYoY291bnQpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJNdWx0aWNhc3QgbGlzdCBzaXplIGVycm9yXG4iKTsKLQotCi0JCXdyaXRldyggRVRIRVJfQVJDX0NUTF9CUk9BREFDQ19NU0t8Ci0JCQlFVEhFUl9BUkNfQ1RMX0NPTVBFTl9NU0ssCi0JCQlFVEhFUl9BUkNfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQl9Ci0KLQkvKiBlbmFibGUgdGhlIGFjdGl2ZSBBUkMgZW50aWVzICovCi0Jd3JpdGV3KCgxPDwoY291bnQrMikpLTEsRVRIRVJfQVJDX0VOQShkZXYtPmJhc2VfYWRkcikpOwotfQotCi0KLXN0YXRpYyBpbnQgZXRoZXIwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JaW50IHJlc3VsdCx0bXA7Ci0Jc3RydWN0IG5ldF9wcml2KiBwcml2OwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXJzICovCi0JcmVzdWx0PXJlcXVlc3RfaXJxKGRldi0+aXJxLGV0aGVyMDBfaW50LDAsImV0aGVyMDAiLGRldik7Ci0JaWYocmVzdWx0KQotCQlnb3RvIG9wZW5fZXJyMTsKLQotCXJlc3VsdD1yZXF1ZXN0X2lycSgyLGV0aGVyMDBfcGh5X2ludCwwLCJldGhlcjAwX3BoeSIsZGV2KTsKLQlpZihyZXN1bHQpCi0JCWdvdG8gb3Blbl9lcnIyOwotCi0JZXRoZXIwMF9yZXNldChkZXYpOwotCXJlc3VsdD1ldGhlcjAwX21lbV9pbml0KGRldik7Ci0JaWYocmVzdWx0KQotCQlnb3RvIG9wZW5fZXJyMzsKLQotCi0JZXRoZXIwMF9zZXR1cF9ldGhlcm5ldF9hZGRyZXNzKGRldik7Ci0KLQlldGhlcjAwX3NldF9tdWx0aWNhc3QoZGV2KTsKLQotCXJlc3VsdD1ldGhlcjAwX3dyaXRlX3BoeShkZXYsUEhZX0NPTlRST0wsIFBIWV9DT05UUk9MX0FORUdFTl9NU0sgfCBQSFlfQ09OVFJPTF9SQU5FR19NU0spOwotCWlmKHJlc3VsdCkKLQkJZ290byBvcGVuX2VycjQ7Ci0JcmVzdWx0PWV0aGVyMDBfd3JpdGVfcGh5KGRldixQSFlfSVJRX0NPTlRST0wsIFBIWV9JUlFfQ09OVFJPTF9MU19DSEdfSUVfTVNLIHwKLQkJCQkgUEhZX0lSUV9DT05UUk9MX0FORUdfQ09NUF9JRV9NU0spOwotCWlmKHJlc3VsdCkKLQkJZ290byBvcGVuX2VycjQ7Ci0KLQkvKiBTdGFydCB0aGUgZGV2aWNlIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0Jd3JpdGV3KEVUSEVSX1JYX0NUTF9SWEVOX01TSwotLy8JICAgICAgIHwgRVRIRVJfUlhfQ1RMX1NUUklQQ1JDX01TSwotCSAgICAgICB8IEVUSEVSX1JYX0NUTF9FTkdPT0RfTVNLCi0JICAgICAgIHwgRVRIRVJfUlhfQ1RMX0VOUlhQQVJfTVNLfCBFVEhFUl9SWF9DVExfRU5MT05HRVJSX01TSwotCSAgICAgICB8IEVUSEVSX1JYX0NUTF9FTk9WRVJfTVNLfCBFVEhFUl9SWF9DVExfRU5DUkNFUlJfTVNLLAotCSAgICAgICBFVEhFUl9SWF9DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQotCXdyaXRldyhFVEhFUl9UWF9DVExfVFhFTl9NU0t8Ci0JICAgICAgIEVUSEVSX1RYX0NUTF9FTkVYREVGRVJfTVNLfAotCSAgICAgICBFVEhFUl9UWF9DVExfRU5MQ0FSUl9NU0t8Ci0JICAgICAgIEVUSEVSX1RYX0NUTF9FTkVYQ09MTF9NU0t8Ci0JICAgICAgIEVUSEVSX1RYX0NUTF9FTkxBVEVDT0xMX01TS3wKLQkgICAgICAgRVRIRVJfVFhfQ1RMX0VOVFhQQVJfTVNLfAotCSAgICAgICBFVEhFUl9UWF9DVExfRU5DT01QX01TSywKLQkgICAgICAgRVRIRVJfVFhfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQl0bXA9cmVhZGwoRVRIRVJfRE1BX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCh0bXAmfkVUSEVSX0RNQV9DVExfSU5UTUFTS19NU0ssRVRIRVJfRE1BX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JcmV0dXJuIDA7Ci0KLSBvcGVuX2VycjQ6Ci0JZXRoZXIwMF9yZXNldChkZXYpOwotIG9wZW5fZXJyMzoKLQlmcmVlX2lycSgyLGRldik7Ci0gb3Blbl9lcnIyOgotCWZyZWVfaXJxKGRldi0+aXJxLGRldik7Ci0gb3Blbl9lcnIxOgotCXJldHVybiByZXN1bHQ7Ci0KLX0KLQotCi1zdGF0aWMgaW50IGV0aGVyMDBfdHgoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlzdHJ1Y3QgbmV0X3ByaXYgKnByaXY9ZGV2LT5wcml2OwotCXN0cnVjdCB0eF9mZGFfZW50ICpmZGFfcHRyOwotCWludCBpOwotCi0KLQkvKgotCSAqCUZpbmQgYW4gZW1wdHkgc2xvdCBpbiB3aGljaCB0byBzdGljayB0aGUgZnJhbWUKLQkgKi8KLQlmZGFfcHRyPShzdHJ1Y3QgdHhfZmRhX2VudCopX19kbWFfdmEocmVhZGwoRVRIRVJfVFhGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JaT0wOwotCXdoaWxlKGk8VFhfTlVNX0ZERVNDKXsKLQkJaWYgKGZkYV9wdHItPmZkLkZEU3RhdHx8KGZkYV9wdHItPmZkLkZEQ3RsICYgRkRDVExfQ09XTlNGRF9NU0spKXsKLQkJCWZkYV9wdHIgPShzdHJ1Y3QgdHhfZmRhX2VudCopIF9fZG1hX3ZhKChzdHJ1Y3QgdHhfZmRhX2VudCopZmRhX3B0ci0+ZmQuRkROZXh0KTsKLQkJfQotCQllbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWkrKzsKLQl9Ci0KLQkvKiBXcml0ZSB0aGUgc2tiIGRhdGEgZnJvbSB0aGUgY2FjaGUqLwotCWNvbnNpc3RlbnRfc3luYyhza2ItPmRhdGEsc2tiLT5sZW4sUENJX0RNQV9UT0RFVklDRSk7Ci0JZmRhX3B0ci0+YmQuQnVmZkRhdGE9KGNoYXIqKV9fcGEoc2tiLT5kYXRhKTsKLQlmZGFfcHRyLT5iZC5CdWZmTGVuZ3RoPSh1bnNpZ25lZCBzaG9ydClza2ItPmxlbjsKLQkvKiBTYXZlIHRoZSBwb2ludGVyIHRvIHRoZSBza2IgZm9yIGZyZWVpbmcgbGF0ZXIgKi8KLQlmZGFfcHRyLT5mZC5GRFN5c3RlbT0odW5zaWduZWQgaW50KXNrYjsKLQlmZGFfcHRyLT5mZC5GRFN0YXQ9MDsKLQkvKiBQYXNzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVycyB0byB0aGUgY29udHJvbGxlciAqLwotCWZkYV9wdHItPmZkLkZEQ3RsPTE7Ci0JZmRhX3B0ci0+ZmQuRkRDdGx8PUZEQ1RMX0NPV05TRkRfTVNLOwotCi0JLyogSWYgdGhlIG5leHQgYnVmZmVyIGluIHRoZSBsaXN0IGlzIGZ1bGwsIHN0b3AgdGhlIHF1ZXVlICovCi0JZmRhX3B0cj0oc3RydWN0IHR4X2ZkYV9lbnQqKV9fZG1hX3ZhKGZkYV9wdHItPmZkLkZETmV4dCk7Ci0JaWYgKChmZGFfcHRyLT5mZC5GRFN0YXQpfHwoZmRhX3B0ci0+ZmQuRkRDdGwgJiBGRENUTF9DT1dOU0ZEX01TSykpewotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXByaXYtPnF1ZXVlX3N0b3BwZWQ9MTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpldGhlcjAwX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0Jc3RydWN0IG5ldF9wcml2ICpwcml2PWRldi0+cHJpdjsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi0KLXN0YXRpYyBpbnQgZXRoZXIwMF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0Jc3RydWN0IG5ldF9wcml2ICpwcml2PWRldi0+cHJpdjsKLQlpbnQgdG1wOwotCi0JLyogU3RvcC9kaXNhYmxlIHRoZSBkZXZpY2UuICovCi0JdG1wPXJlYWR3KEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCXRtcCY9fihFVEhFUl9SWF9DVExfUlhFTl9NU0sgfCBFVEhFUl9SWF9DVExfRU5HT09EX01TSyk7Ci0JdG1wfD1FVEhFUl9SWF9DVExfUlhIQUxUX01TSzsKLQl3cml0ZXcodG1wLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JdG1wPXJlYWRsKEVUSEVSX1RYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCXRtcCY9fkVUSEVSX1RYX0NUTF9UWEVOX01TSzsKLQl0bXB8PUVUSEVSX1RYX0NUTF9UWEhBTFRfTVNLOwotCXdyaXRlbCh0bXAsRVRIRVJfVFhfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkvKiBGcmVlIHVwIHN5c3RlbSByZXNvdXJjZXMgKi8KLQlmcmVlX2lycShkZXYtPmlycSxkZXYpOwotCWZyZWVfaXJxKDIsZGV2KTsKLQlpb3VubWFwKHByaXYtPmRtYV9kYXRhKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGV0aGVyMDBfZ2V0X2V0aGVybmV0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlzdHJ1Y3QgbXRkX2luZm8gKm15bXRkPU5VTEw7Ci0JaW50IGk7Ci0Jc2l6ZV90IHJldGxlbjsKLQotCS8qCi0JICogRm9yIHRoZSBFcHhhMTAgZGV2IGJvYXJkIChjYW1lbG90KSwgdGhlIGV0aGVybmV0IE1BQwotCSAqIGFkZHJlc3MgaXMgb2YgdGhlIGZvcm0gIDAwOmFhOmFhOjAwOnh4Onh4IHdoZXJlCi0JICogMDA6YWE6YWEgaXMgdGhlIEFsdGVyYSB2ZW5kb3IgSUQgYW5kIHh4Onh4IGlzIHRoZQotCSAqIGxhc3QgMiBieXRlcyBvZiB0aGUgYm9hcmQgc2VyaWFsIG51bWJlciwgYXMgcHJvZ3JhbW1lZAotCSAqIGludG8gdGhlIE9UUCBhcmVhIG9mIHRoZSBmbGFzaCBkZXZpY2Ugb24gRUJJMS4gSWYgdGhpcwotCSAqIGlzbid0IGFuIGV4cGExMCBkZXYgYm9hcmQsIG9yIHRoZXJlJ3Mgbm8gbXRkIHN1cHBvcnQgdG8KLQkgKiByZWFkIHRoZSBzZXJpYWwgbnVtYmVyIGZyb20gZmxhc2ggdGhlbiB3ZSdsbCBmb3JjZSB0aGUKLQkgKiB1c2UgdG8gc2V0IHRoZWlyIG93biBtYWMgYWRkcmVzcyB1c2luZyBpZmNvbmZpZy4KLQkgKi8KLQotI2lmZGVmIENPTkZJR19BUkNIX0NBTUVMT1QKLSNpZmRlZiBDT05GSUdfTVRECi0JLyogZ2V0IHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBmaXJzdCBtdGQgZGV2aWNlKi8KLQlmb3IoaT0wO2k8TUFYX01URF9ERVZJQ0VTO2krKyl7Ci0JCW15bXRkPWdldF9tdGRfZGV2aWNlKE5VTEwsaSk7Ci0JCWlmKCFteW10ZHx8IXN0cmNtcChteW10ZC0+bmFtZSwiRVBYQTEwREIgZmxhc2giKSkKLQkJCWJyZWFrOwotCX0KLQotCWlmKCFteW10ZCB8fCAhbXltdGQtPnJlYWRfdXNlcl9wcm90X3JlZyl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzcyBmcm9tIGZsYXNoXG4iLGRldi0+bmFtZSk7Ci0JfWVsc2V7Ci0JCW15bXRkLT5yZWFkX3VzZXJfcHJvdF9yZWcobXltdGQsMiwxLCZyZXRsZW4sJmRldi0+ZGV2X2FkZHJbNV0pOwotCQlteW10ZC0+cmVhZF91c2VyX3Byb3RfcmVnKG15bXRkLDMsMSwmcmV0bGVuLCZkZXYtPmRldl9hZGRyWzRdKTsKLQkJZGV2LT5kZXZfYWRkclszXT0wOwotCQlkZXYtPmRldl9hZGRyWzJdPXZlbmRvcl9pZFsxXTsKLQkJZGV2LT5kZXZfYWRkclsxXT12ZW5kb3JfaWRbMF07Ci0JCWRldi0+ZGV2X2FkZHJbMF09MDsKLQl9Ci0jZWxzZQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNVEQgc3VwcG9ydCByZXF1aXJlZCB0byByZWFkIE1BQyBhZGRyZXNzIGZyb20gRVBYQTEwIGRldiBib2FyZFxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgotI2VuZGlmCi0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCi0JCXByaW50aygiJXM6IEludmFsaWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MuICBQbGVhc2Ugc2V0IHVzaW5nICIKLQkJCSJpZmNvbmZpZ1xuIiwgZGV2LT5uYW1lKTsKLQotfQotCi0vKgotICogS2VlcCBhIG1hcHBpbmcgb2YgZGV2X2luZm8gYWRkcmVzc2VzIC0+IHBvcnQgbGluZXMgdG8gdXNlIHdoZW4KLSAqIHJlbW92aW5nIHBvcnRzIGRldj09TlVMTCBpbmRpY2F0ZXMgdW51c2VkIGVudHJ5Ci0gKi8KLQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UqIGRldl9saXN0W0VUSF9OUl07Ci0KLXN0YXRpYyBpbnQgZXRoZXIwMF9hZGRfZGV2aWNlKHN0cnVjdCBwbGRoc19kZXZfaW5mbyogZGV2X2luZm8sdm9pZCogZGV2X3BzX2RhdGEpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbmV0X3ByaXYgKnByaXY7Ci0Jdm9pZCAqbWFwX2FkZHI7Ci0JaW50IHJlc3VsdDsKLQlpbnQgaTsKLQotCWk9MDsKLQl3aGlsZShkZXZfbGlzdFtpXSAmJiBpIDwgRVRIX05SKQotCQlpKys7Ci0KLQlpZihpPT1FVEhfTlIpewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJldGhlcjAwOiBNYXhpbXVtIG51bWJlciBvZiBwb3J0cyByZWFjaGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXZfaW5mby0+YmFzZV9hZGRyLCBNQUNfUkVHX1NJWkUsICJldGhlcjAwIikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG5ldF9wcml2KSk7Ci0JaWYoIWRldikgewotCQlyZXN1bHQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9yZWxlYXNlOwotCX0KLQlwcml2ID0gZGV2LT5wcml2OwotCi0JcHJpdi0+dHFfbWVtdXBkYXRlLnJvdXRpbmU9ZXRoZXIwMF9tZW1fdXBkYXRlOwotCXByaXYtPnRxX21lbXVwZGF0ZS5kYXRhPSh2b2lkKikgZGV2OwotCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X2xvY2spOwotCi0JbWFwX2FkZHI9aW9yZW1hcF9ub2NhY2hlKGRldl9pbmZvLT5iYXNlX2FkZHIsU1pfNEspOwotCWlmKCFtYXBfYWRkcil7Ci0JCXJlc3VsdCA9IC1FTk9NRU07Ci0JCW91dF9rZnJlZTsKLQl9Ci0KLQlkZXYtPm9wZW49ZXRoZXIwMF9vcGVuOwotCWRldi0+c3RvcD1ldGhlcjAwX3N0b3A7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q9ZXRoZXIwMF9zZXRfbXVsdGljYXN0OwotCWRldi0+aGFyZF9zdGFydF94bWl0PWV0aGVyMDBfdHg7Ci0JZGV2LT5nZXRfc3RhdHM9ZXRoZXIwMF9zdGF0czsKLQotCWV0aGVyMDBfZ2V0X2V0aGVybmV0X2FkZHJlc3MoZGV2KTsKLQotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKLQotCWRldi0+YmFzZV9hZGRyPSh1bnNpZ25lZCBpbnQpbWFwX2FkZHI7Ci0JZGV2LT5pcnE9ZGV2X2luZm8tPmlycTsKLQlkZXYtPmZlYXR1cmVzPU5FVElGX0ZfRFlOQUxMT0MgfCBORVRJRl9GX0hXX0NTVU07Ci0KLQlyZXN1bHQ9cmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYocmVzdWx0KXsKLQkJcHJpbnRrKCJFdGhlcjAwOiBFcnJvciAlaSByZWdpc3RlcmluZyBkcml2ZXJcbiIscmVzdWx0KTsKLQkJZ290byBvdXRfdW5tYXA7Ci0JfQotCXByaW50aygicmVnaXN0ZXJlZCBldGhlcjAwIGRldmljZSBhdCAlI3hcbiIsZGV2X2luZm8tPmJhc2VfYWRkcik7Ci0KLQlkZXZfbGlzdFtpXT1kZXY7Ci0KLQlyZXR1cm4gcmVzdWx0OwotCi0gb3V0X3VubWFwOgotCWlvdW5tYXAobWFwX2FkZHIpOwotIG91dF9rZnJlZToKLQlmcmVlX25ldGRldihkZXYpOwotIG91dF9yZWxlYXNlOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXZfaW5mby0+YmFzZV9hZGRyLCBNQUNfUkVHX1NJWkUpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIGludCBldGhlcjAwX3JlbW92ZV9kZXZpY2VzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IoaT0wO2k8RVRIX05SO2krKyl7Ci0JCWlmKGRldl9saXN0W2ldKXsKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2X2xpc3RbaV0pOwotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2X2xpc3RbaV0pOwotCQkJaW91bm1hcCgodm9pZCopZGV2X2xpc3RbaV0tPmJhc2VfYWRkcik7Ci0JCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2X2xpc3RbaV0tPmJhc2VfYWRkciwgTUFDX1JFR19TSVpFKTsKLQkJCWZyZWVfbmV0ZGV2KGRldl9saXN0W2ldKTsKLQkJCWRldl9saXN0W2ldPTA7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxkX2hvdHN3YXBfb3BzIGV0aGVyMDBfcGxkaHNfb3BzPXsKLQkubmFtZSA9IEVUSEVSMDBfTkFNRSwKLQkuYWRkX2RldmljZSA9IGV0aGVyMDBfYWRkX2RldmljZSwKLQkucmVtb3ZlX2RldmljZXMgPSBldGhlcjAwX3JlbW92ZV9kZXZpY2VzLAotfTsKLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXRoZXIwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludCByZXN1bHQ7Ci0JcmVzdWx0PWV0aGVyMDBfcmVtb3ZlX2RldmljZXMoKTsKLQlpZihyZXN1bHQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImV0aGVyMDA6IGZhaWxlZCB0byByZW1vdmUgYWxsIGRldmljZXNcbiIpOwotCi0JcGxkaHNfdW5yZWdpc3Rlcl9kcml2ZXIoRVRIRVIwMF9OQU1FKTsKLX0KLW1vZHVsZV9leGl0KGV0aGVyMDBfY2xlYW51cF9tb2R1bGUpOwotCi0KLXN0YXRpYyBpbnQgX19pbml0IGV0aGVyMDBfbW9kX2luaXQodm9pZCkKLXsKLQlwcmludGsoIm1vZCBpbml0XG4iKTsKLQlyZXR1cm4gcGxkaHNfcmVnaXN0ZXJfZHJpdmVyKCZldGhlcjAwX3BsZGhzX29wcyk7Ci0KLX0KLQotbW9kdWxlX2luaXQoZXRoZXIwMF9tb2RfaW5pdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYwppbmRleCAxY2M1M2FiLi5mMWQ1YjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIzLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jCkBAIC02OSw3ICs2OSw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9lY2FyZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSAiZXRoZXIzIGV0aGVybmV0IGRyaXZlciAoYykgMTk5NS0yMDAwIFIuTS5LaW5nIHYxLjE3XG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKaW5kZXggOTQyYTI4MS4uNmE5M2I2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlICIuLi84MzkwLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IDQxYjNkODMuLmY0NDI0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtNTE1LDYgKzUxNSw3IEBACiAJCQljb3VudCA9IGtpc3NfZXNjKHAsICh1bnNpZ25lZCBjaGFyICopYXgtPnhidWZmLCBsZW4pOwogCQl9CiAgIAl9CisJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAogCXNldF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJmF4LT50dHktPmZsYWdzKTsKIAlhY3R1YWwgPSBheC0+dHR5LT5kcml2ZXItPndyaXRlKGF4LT50dHksIGF4LT54YnVmZiwgY291bnQpOwpAQCAtNTI0LDcgKzUyNSw2IEBACiAJYXgtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWF4LT54bGVmdCA9IGNvdW50IC0gYWN0dWFsOwogCWF4LT54aGVhZCA9IGF4LT54YnVmZiArIGFjdHVhbDsKLQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogfQogCiAvKiBFbmNhcHN1bGF0ZSBhbiBBWC4yNSBwYWNrZXQgYW5kIGtpY2sgaXQgaW50byBhIFRUWSBxdWV1ZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lmYi5jIGIvZHJpdmVycy9uZXQvaWZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2OTkyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lmYi5jCkBAIC0wLDAgKzEsMjk0IEBACisvKiBkcml2ZXJzL25ldC9pZmIuYzogCisKKwlUaGUgcHVycG9zZSBvZiB0aGlzIGRyaXZlciBpcyB0byBwcm92aWRlIGEgZGV2aWNlIHRoYXQgYWxsb3dzCisJZm9yIHNoYXJpbmcgb2YgcmVzb3VyY2VzOgorCisJMSkgcWRpc2NzL3BvbGljaWVzIHRoYXQgYXJlIHBlciBkZXZpY2UgYXMgb3Bwb3NlZCB0byBzeXN0ZW0gd2lkZS4KKwlpZmIgYWxsb3dzIGZvciBhIGRldmljZSB3aGljaCBjYW4gYmUgcmVkaXJlY3RlZCB0byB0aHVzIHByb3ZpZGluZworCWFuIGltcHJlc3Npb24gb2Ygc2hhcmluZy4KKworCTIpIEFsbG93cyBmb3IgcXVldWVpbmcgaW5jb21pbmcgdHJhZmZpYyBmb3Igc2hhcGluZyBpbnN0ZWFkIG9mCisJZHJvcHBpbmcuIAorCQorCVRoZSBvcmlnaW5hbCBjb25jZXB0IGlzIGJhc2VkIG9uIHdoYXQgaXMga25vd24gYXMgdGhlIElNUQorCWRyaXZlciBpbml0aWFsbHkgd3JpdHRlbiBieSBNYXJ0aW4gRGV2ZXJhLCBsYXRlciByZXdyaXR0ZW4KKwlieSBQYXRyaWNrIE1jSGFyZHkgYW5kIHRoZW4gbWFpbnRhaW5lZCBieSBBbmRyZSBDb3JyZWEuCisKKwlZb3UgbmVlZCB0aGUgdGMgYWN0aW9uICBtaXJyb3Igb3IgcmVkaXJlY3QgdG8gZmVlZCB0aGlzIGRldmljZQorICAgICAgIAlwYWNrZXRzLgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgCUF1dGhvcnM6CUphbWFsIEhhZGkgU2FsaW0gKDIwMDUpCisgCisqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4gCisKKyNkZWZpbmUgVFhfVElNRU9VVCAgKDIqSFopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBUWF9RX0xJTUlUICAgIDMyCitzdHJ1Y3QgaWZiX3ByaXZhdGUgeworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgIGlmYl90YXNrbGV0OworCWludCAgICAgdGFza2xldF9wZW5kaW5nOworCS8qIG1vc3RseSBkZWJ1ZyBzdGF0cyBsZWF2ZSBpbiBmb3Igbm93ICovCisJdW5zaWduZWQgbG9uZyAgIHN0X3Rhc2tfZW50ZXI7IC8qIHRhc2tsZXQgZW50ZXJlZCAqLworCXVuc2lnbmVkIGxvbmcgICBzdF90eHFfcmVmbF90cnk7IC8qIHRyYW5zbWl0IHF1ZXVlIHJlZmlsbCBhdHRlbXB0ICovCisJdW5zaWduZWQgbG9uZyAgIHN0X3J4cV9lbnRlcjsgLyogcmVjZWl2ZSBxdWV1ZSBlbnRlcmVkICovCisJdW5zaWduZWQgbG9uZyAgIHN0X3J4MnR4X3RyYW47IC8qIHJlY2VpdmUgdG8gdHJhc21pdCB0cmFuc2ZlcnMgKi8KKwl1bnNpZ25lZCBsb25nICAgc3RfcnhxX25vdGVudGVyOyAvKnJlY2VpdmVRIG5vdCBlbnRlcmVkLCByZXNjaGVkICovCisJdW5zaWduZWQgbG9uZyAgIHN0X3J4X2ZybV9lZ3I7IC8qIHJlY2VpdmVkIGZyb20gZWdyZXNzIHBhdGggKi8KKwl1bnNpZ25lZCBsb25nICAgc3RfcnhfZnJtX2luZzsgLyogcmVjZWl2ZWQgZnJvbSBpbmdyZXNzIHBhdGggKi8KKwl1bnNpZ25lZCBsb25nICAgc3RfcnhxX2NoZWNrOworCXVuc2lnbmVkIGxvbmcgICBzdF9yeHFfcnNjaDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgICBycTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgICB0cTsKK307CisKK3N0YXRpYyBpbnQgbnVtaWZicyA9IDE7CisKK3N0YXRpYyB2b2lkIHJpX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXYpOworc3RhdGljIGludCBpZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWZiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaWZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGlmYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworc3RhdGljIHZvaWQgcmlfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldikgCit7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqX2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldjsKKwlzdHJ1Y3QgaWZiX3ByaXZhdGUgKmRwID0gbmV0ZGV2X3ByaXYoX2Rldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRwLT5zdGF0czsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJZHAtPnN0X3Rhc2tfZW50ZXIrKzsKKwlpZiAoKHNrYiA9IHNrYl9wZWVrKCZkcC0+dHEpKSA9PSBOVUxMKSB7CisJCWRwLT5zdF90eHFfcmVmbF90cnkrKzsKKwkJaWYgKHNwaW5fdHJ5bG9jaygmX2Rldi0+eG1pdF9sb2NrKSkgeworCQkJZHAtPnN0X3J4cV9lbnRlcisrOworCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZHAtPnJxKSkgIT0gTlVMTCkgeworCQkJCXNrYl9xdWV1ZV90YWlsKCZkcC0+dHEsIHNrYik7CisJCQkJZHAtPnN0X3J4MnR4X3RyYW4rKzsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZfZGV2LT54bWl0X2xvY2spOworCQl9IGVsc2UgeworCQkJLyogcmVzY2hlZHVsZSAqLworCQkJZHAtPnN0X3J4cV9ub3RlbnRlcisrOworCQkJZ290byByZXNjaGVkOworCQl9CisJfQorCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZHAtPnRxKSkgIT0gTlVMTCkgeworCQl1MzIgZnJvbSA9IEdfVENfRlJPTShza2ItPnRjX3ZlcmQpOworCisJCXNrYi0+dGNfdmVyZCA9IDA7CisJCXNrYi0+dGNfdmVyZCA9IFNFVF9UQ19OQ0xTKHNrYi0+dGNfdmVyZCk7CisJCXN0YXRzLT50eF9wYWNrZXRzKys7CisJCXN0YXRzLT50eF9ieXRlcyArPXNrYi0+bGVuOworCQlpZiAoZnJvbSAmIEFUX0VHUkVTUykgeworCQkJZHAtPnN0X3J4X2ZybV9lZ3IrKzsKKwkJCWRldl9xdWV1ZV94bWl0KHNrYik7CisJCX0gZWxzZSBpZiAoZnJvbSAmIEFUX0lOR1JFU1MpIHsKKworCQkJZHAtPnN0X3J4X2ZybV9pbmcrKzsKKwkJCW5ldGlmX3J4KHNrYik7CisJCX0gZWxzZSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQl9CisJfQorCisJaWYgKHNwaW5fdHJ5bG9jaygmX2Rldi0+eG1pdF9sb2NrKSkgeworCQlkcC0+c3RfcnhxX2NoZWNrKys7CisJCWlmICgoc2tiID0gc2tiX3BlZWsoJmRwLT5ycSkpID09IE5VTEwpIHsKKwkJCWRwLT50YXNrbGV0X3BlbmRpbmcgPSAwOworCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoX2RldikpCisJCQkJbmV0aWZfd2FrZV9xdWV1ZShfZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWRwLT5zdF9yeHFfcnNjaCsrOworCQkJc3Bpbl91bmxvY2soJl9kZXYtPnhtaXRfbG9jayk7CisJCQlnb3RvIHJlc2NoZWQ7CisJCX0KKwkJc3Bpbl91bmxvY2soJl9kZXYtPnhtaXRfbG9jayk7CisJfSBlbHNlIHsKK3Jlc2NoZWQ6CisJCWRwLT50YXNrbGV0X3BlbmRpbmcgPSAxOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkcC0+aWZiX3Rhc2tsZXQpOworCX0KKworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaWZiX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KKwlkZXYtPmdldF9zdGF0cyA9IGlmYl9nZXRfc3RhdHM7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZmJfeG1pdDsKKwlkZXYtPm9wZW4gPSAmaWZiX29wZW47CisJZGV2LT5zdG9wID0gJmlmYl9jbG9zZTsKKworCS8qIEZpbGwgaW4gZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGV0aGVybmV0LWdlbmVyaWMgdmFsdWVzLiAqLworCWV0aGVyX3NldHVwKGRldik7CisJZGV2LT50eF9xdWV1ZV9sZW4gPSBUWF9RX0xJTUlUOworCWRldi0+Y2hhbmdlX210dSA9IE5VTEw7CisJZGV2LT5mbGFncyB8PSBJRkZfTk9BUlA7CisJZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsKKwlTRVRfTU9EVUxFX09XTkVSKGRldik7CisJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgaWZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWZiX3ByaXZhdGUgKmRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZHAtPnN0YXRzOworCWludCByZXQgPSAwOworCXUzMiBmcm9tID0gR19UQ19GUk9NKHNrYi0+dGNfdmVyZCk7CisKKwlzdGF0cy0+dHhfcGFja2V0cysrOworCXN0YXRzLT50eF9ieXRlcys9c2tiLT5sZW47CisKKwlpZiAoIWZyb20gfHwgIXNrYi0+aW5wdXRfZGV2KSB7Citkcm9wcGVkOgorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJLyogCisJCSAqIG5vdGUgd2UgY291bGQgYmUgZ29pbmcKKwkJICogaW5ncmVzcyAtPiBlZ3Jlc3Mgb3IKKwkJICogZWdyZXNzIC0+IGluZ3Jlc3MKKwkJKi8KKwkJc2tiLT5kZXYgPSBza2ItPmlucHV0X2RldjsKKwkJc2tiLT5pbnB1dF9kZXYgPSBkZXY7CisJCWlmIChmcm9tICYgQVRfSU5HUkVTUykgeworCQkJc2tiX3B1bGwoc2tiLCBza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVuKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghKGZyb20gJiBBVF9FR1JFU1MpKSB7CisJCQkJZ290byBkcm9wcGVkOworCQkJfQorCQl9CisJfQorCisJaWYgKHNrYl9xdWV1ZV9sZW4oJmRwLT5ycSkgPj0gZGV2LT50eF9xdWV1ZV9sZW4pIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXNrYl9xdWV1ZV90YWlsKCZkcC0+cnEsIHNrYik7CisJaWYgKCFkcC0+dGFza2xldF9wZW5kaW5nKSB7CisJCWRwLT50YXNrbGV0X3BlbmRpbmcgPSAxOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkcC0+aWZiX3Rhc2tsZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWZiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZmJfcHJpdmF0ZSAqZHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkcC0+c3RhdHM7CisKKwlwcl9kZWJ1ZygidGFza2xldHMgc3RhdHMgJWxkOiVsZDolbGQ6JWxkOiVsZDolbGQ6JWxkOiVsZDolbGQgXG4iLAorCQlkcC0+c3RfdGFza19lbnRlciwgZHAtPnN0X3R4cV9yZWZsX3RyeSwgZHAtPnN0X3J4cV9lbnRlciwgCisJCWRwLT5zdF9yeDJ0eF90cmFuIGRwLT5zdF9yeHFfbm90ZW50ZXIsIGRwLT5zdF9yeF9mcm1fZWdyLAorCQlkcC0+c3RfcnhfZnJtX2luZywgZHAtPnN0X3J4cV9jaGVjaywgZHAtPnN0X3J4cV9yc2NoICk7CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKmlmYnM7CisKKy8qIE51bWJlciBvZiBpZmIgZGV2aWNlcyB0byBiZSBzZXQgdXAgYnkgdGhpcyBtb2R1bGUuICovCittb2R1bGVfcGFyYW0obnVtaWZicywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobnVtaWZicywgIk51bWJlciBvZiBpZmIgZGV2aWNlcyIpOworCitzdGF0aWMgaW50IGlmYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZmJfcHJpdmF0ZSAqZHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJdGFza2xldF9raWxsKCZkcC0+aWZiX3Rhc2tsZXQpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlza2JfcXVldWVfcHVyZ2UoJmRwLT5ycSk7CisJc2tiX3F1ZXVlX3B1cmdlKCZkcC0+dHEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlmYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlmYl9wcml2YXRlICpkcCA9IG5ldGRldl9wcml2KGRldik7CisKKwl0YXNrbGV0X2luaXQoJmRwLT5pZmJfdGFza2xldCwgcmlfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZkcC0+cnEpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmRwLT50cSk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpZmJfaW5pdF9vbmUoaW50IGluZGV4KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfaWZiOworCWludCBlcnI7CisKKwlkZXZfaWZiID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaWZiX3ByaXZhdGUpLAorCQkJCSAiaWZiJWQiLCBpZmJfc2V0dXApOworCisJaWYgKCFkZXZfaWZiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldl9pZmIpKSkgeworCQlmcmVlX25ldGRldihkZXZfaWZiKTsKKwkJZGV2X2lmYiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWZic1tpbmRleF0gPSBkZXZfaWZiOyAKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpZmJfZnJlZV9vbmUoaW50IGluZGV4KQoreworCXVucmVnaXN0ZXJfbmV0ZGV2KGlmYnNbaW5kZXhdKTsKKwlmcmVlX25ldGRldihpZmJzW2luZGV4XSk7Cit9IAorCitzdGF0aWMgaW50IF9faW5pdCBpZmJfaW5pdF9tb2R1bGUodm9pZCkKK3sgCisJaW50IGksIGVyciA9IDA7CisJaWZicyA9IGttYWxsb2MobnVtaWZicyAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsgCisJaWYgKCFpZmJzKQorCQlyZXR1cm4gLUVOT01FTTsgCisJZm9yIChpID0gMDsgaSA8IG51bWlmYnMgJiYgIWVycjsgaSsrKQorCQllcnIgPSBpZmJfaW5pdF9vbmUoaSk7IAorCWlmIChlcnIpIHsgCisJCXdoaWxlICgtLWkgPj0gMCkKKwkJCWlmYl9mcmVlX29uZShpKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfSAKKworc3RhdGljIHZvaWQgX19leGl0IGlmYl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bWlmYnM7IGkrKykgCisJCWlmYl9mcmVlX29uZShpKTsgCisJa2ZyZWUoaWZicyk7CQorfQorCittb2R1bGVfaW5pdChpZmJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoaWZiX2NsZWFudXBfbW9kdWxlKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbWFsIEhhZGkgU2FsaW0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCmluZGV4IDA5ZWQwNTcuLmRkYTVhNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9lY2FyZC5oPgogCiAjaW5jbHVkZSAiLi4vc2NzaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9hcnhlc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9hcnhlc2NzaS5jCmluZGV4IDgwNDEyNWUuLmEyODk0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2FyeGVzY3NpLmMKQEAgLTMzLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAKICNpbmNsdWRlICIuLi9zY3NpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKaW5kZXggODFlMjY2Yi4uZTZjOTQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYwpAQCAtMTMsNyArMTMsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2luY2x1ZGUgIi4uL3Njc2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwppbmRleCAzYTdhNDZiLi41ODNkMmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9lY2FyZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAjaW5jbHVkZSAiLi4vc2NzaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCmluZGV4IDRkMWU4ZjUuLjNmZmVjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jIGIvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCmluZGV4IDMzMzNkN2IuLjMxMTNiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKICNpbmNsdWRlICIuLi9zY3NpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggMTg5MWNmNS4uZTg0NTQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtNTQsNiArNTQsOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHNoYXJlX2lycXMgPSBTRVJJQUw4MjUwX1NIQVJFX0lSUVM7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnJfdWFydHMgPSBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUzsKKwogLyoKICAqIERlYnVnZ2luZy4KICAqLwpAQCAtMjExOCw3ICsyMTIwLDcgQEAKIAkJcmV0dXJuOwogCWZpcnN0ID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdWFydHM7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKIAkJdXAtPnBvcnQubGluZSA9IGk7CkBAIC0yMTM3LDcgKzIxMzksNyBAQAogCX0KIAogCWZvciAoaSA9IDAsIHVwID0gc2VyaWFsODI1MF9wb3J0czsKLQkgICAgIGkgPCBBUlJBWV9TSVpFKG9sZF9zZXJpYWxfcG9ydCkgJiYgaSA8IFVBUlRfTlI7CisJICAgICBpIDwgQVJSQVlfU0laRShvbGRfc2VyaWFsX3BvcnQpICYmIGkgPCBucl91YXJ0czsKIAkgICAgIGkrKywgdXArKykgewogCQl1cC0+cG9ydC5pb2Jhc2UgICA9IG9sZF9zZXJpYWxfcG9ydFtpXS5wb3J0OwogCQl1cC0+cG9ydC5pcnEgICAgICA9IGlycV9jYW5vbmljYWxpemUob2xkX3NlcmlhbF9wb3J0W2ldLmlycSk7CkBAIC0yMTU5LDcgKzIxNjEsNyBAQAogCiAJc2VyaWFsODI1MF9pc2FfaW5pdF9wb3J0cygpOwogCi0JZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucl91YXJ0czsgaSsrKSB7CiAJCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAmc2VyaWFsODI1MF9wb3J0c1tpXTsKIAogCQl1cC0+cG9ydC5kZXYgPSBkZXY7CkBAIC0yMjYyLDcgKzIyNjQsNyBAQAogCSAqIGlmIHNvLCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcG9ydCB0aGF0IGRvZXMgaGF2ZQogCSAqIGNvbnNvbGUgc3VwcG9ydC4KIAkgKi8KLQlpZiAoY28tPmluZGV4ID49IFVBUlRfTlIpCisJaWYgKGNvLT5pbmRleCA+PSBucl91YXJ0cykKIAkJY28tPmluZGV4ID0gMDsKIAlwb3J0ID0gJnNlcmlhbDgyNTBfcG9ydHNbY28tPmluZGV4XS5wb3J0OwogCWlmICghcG9ydC0+aW9iYXNlICYmICFwb3J0LT5tZW1iYXNlKQpAQCAtMjI5OCw3ICsyMzAwLDcgQEAKIAlpbnQgbGluZTsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCi0JZm9yIChsaW5lID0gMDsgbGluZSA8IFVBUlRfTlI7IGxpbmUrKykgeworCWZvciAobGluZSA9IDA7IGxpbmUgPCBucl91YXJ0czsgbGluZSsrKSB7CiAJCXBvcnQgPSAmc2VyaWFsODI1MF9wb3J0c1tsaW5lXS5wb3J0OwogCQlpZiAodWFydF9tYXRjaF9wb3J0KHAsIHBvcnQpKQogCQkJcmV0dXJuIGxpbmU7CkBAIC0yNDIwLDcgKzI0MjIsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucl91YXJ0czsgaSsrKSB7CiAJCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAmc2VyaWFsODI1MF9wb3J0c1tpXTsKIAogCQlpZiAodXAtPnBvcnQuZGV2ID09ICZkZXYtPmRldikKQEAgLTI0ODcsNyArMjQ4OSw3IEBACiAJLyoKIAkgKiBGaXJzdCwgZmluZCBhIHBvcnQgZW50cnkgd2hpY2ggbWF0Y2hlcy4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBucl91YXJ0czsgaSsrKQogCQlpZiAodWFydF9tYXRjaF9wb3J0KCZzZXJpYWw4MjUwX3BvcnRzW2ldLnBvcnQsIHBvcnQpKQogCQkJcmV0dXJuICZzZXJpYWw4MjUwX3BvcnRzW2ldOwogCkBAIC0yNDk2LDcgKzI0OTgsNyBAQAogCSAqIGZyZWUgZW50cnkuICBXZSBsb29rIGZvciBvbmUgd2hpY2ggaGFzbid0IGJlZW4gcHJldmlvdXNseQogCSAqIHVzZWQgKGluZGljYXRlZCBieSB6ZXJvIGlvYmFzZSkuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdWFydHM7IGkrKykKIAkJaWYgKHNlcmlhbDgyNTBfcG9ydHNbaV0ucG9ydC50eXBlID09IFBPUlRfVU5LTk9XTiAmJgogCQkgICAgc2VyaWFsODI1MF9wb3J0c1tpXS5wb3J0LmlvYmFzZSA9PSAwKQogCQkJcmV0dXJuICZzZXJpYWw4MjUwX3BvcnRzW2ldOwpAQCAtMjUwNSw3ICsyNTA3LDcgQEAKIAkgKiBUaGF0IGFsc28gZmFpbGVkLiAgTGFzdCByZXNvcnQgaXMgdG8gZmluZCBhbnkgZW50cnkgd2hpY2gKIAkgKiBkb2Vzbid0IGhhdmUgYSByZWFsIHBvcnQgYXNzb2NpYXRlZCB3aXRoIGl0LgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5yX3VhcnRzOyBpKyspCiAJCWlmIChzZXJpYWw4MjUwX3BvcnRzW2ldLnBvcnQudHlwZSA9PSBQT1JUX1VOS05PV04pCiAJCQlyZXR1cm4gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKQEAgLTI1OTAsOCArMjU5MiwxMSBAQAogewogCWludCByZXQsIGk7CiAKKwlpZiAobnJfdWFydHMgPiBVQVJUX05SKQorCQlucl91YXJ0cyA9IFVBUlRfTlI7CisKIAlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IDgyNTAvMTY1NTAgZHJpdmVyICRSZXZpc2lvbjogMS45MCAkICIKLQkJIiVkIHBvcnRzLCBJUlEgc2hhcmluZyAlc2FibGVkXG4iLCAoaW50KSBVQVJUX05SLAorCQkiJWQgcG9ydHMsIElSUSBzaGFyaW5nICVzYWJsZWRcbiIsIG5yX3VhcnRzLAogCQlzaGFyZV9pcnFzID8gImVuIiA6ICJkaXMiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCkBAIC0yNjUxLDYgKzI2NTYsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhzaGFyZV9pcnFzLCAiU2hhcmUgSVJRcyB3aXRoIG90aGVyIG5vbi04MjUwLzE2eDUwIGRldmljZXMiCiAJIiAodW5zYWZlKSIpOwogCittb2R1bGVfcGFyYW0obnJfdWFydHMsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhucl91YXJ0cywgIk1heGltdW0gbnVtYmVyIG9mIFVBUlRzIHN1cHBvcnRlZC4gKDEtIiBfX01PRFVMRV9TVFJJTkcoQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTKSAiKSIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX1JTQQogbW9kdWxlX3BhcmFtX2FycmF5KHByb2JlX3JzYSwgdWxvbmcsICZwcm9iZV9yc2FfY291bnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwcm9iZV9yc2EsICJQcm9iZSBJL08gcG9ydHMgZm9yIFJTQSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggODEyYmFlNi4uMWJhZTI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC05NSw2ICs5NSwxNiBAQAogCSAgUENJIGVudW1lcmF0aW9uIGFuZCBhbnkgcG9ydHMgdGhhdCBtYXkgYmUgYWRkZWQgYXQgcnVuLXRpbWUKIAkgIHZpYSBob3QtcGx1Zywgb3IgYW55IElTQSBtdWx0aS1wb3J0IHNlcmlhbCBjYXJkcy4KIAorY29uZmlnIFNFUklBTF84MjUwX1JVTlRJTUVfVUFSVFMKKwlpbnQgIk51bWJlciBvZiA4MjUwLzE2NTUwIHNlcmlhbCBwb3J0cyB0byByZWdpc3RlciBhdCBydW50aW1lIgorCWRlcGVuZHMgb24gU0VSSUFMXzgyNTAKKwlkZWZhdWx0ICI0IgorCWhlbHAKKwkgIFNldCB0aGlzIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZXJpYWwgcG9ydHMgeW91IHdhbnQKKwkgIHRoZSBrZXJuZWwgdG8gcmVnaXN0ZXIgYXQgYm9vdCB0aW1lLiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuCisJICB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyICJucl91YXJ0cyIsIG9yIGJvb3QtdGltZSBwYXJhbWV0ZXIKKwkgIDgyNTAubnJfdWFydHMKKwogY29uZmlnIFNFUklBTF84MjUwX0VYVEVOREVECiAJYm9vbCAiRXh0ZW5kZWQgODI1MC8xNjU1MCBzZXJpYWwgZHJpdmVyIG9wdGlvbnMiCiAJZGVwZW5kcyBvbiBTRVJJQUxfODI1MApAQCAtMzU5LDI5ICszNjksNiBAQAogCSAgeW91ciBib290IGxvYWRlciAobGlsbyBvciBsb2FkbGluKSBhYm91dCBob3cgdG8gcGFzcyBvcHRpb25zIHRvIHRoZQogCSAga2VybmVsIGF0IGJvb3QgdGltZS4pCiAKLWNvbmZpZyBTRVJJQUxfVUFSVDAwCi0JYm9vbCAiRXhjYWxpYnVyIHNlcmlhbCBwb3J0ICh1YXJ0MDApIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9DQU1FTE9UCi0Jc2VsZWN0IFNFUklBTF9DT1JFCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGhhcmQgbG9naWMgdWFydCBvbiBFeGNhbGlidXIuIFRoaXMKLQkgIGRyaXZlciBhbHNvIHN1cHBvcnRzIHNvZnQgbG9naWMgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgdWFydCBjb3JlLgotCi1jb25maWcgU0VSSUFMX1VBUlQwMF9DT05TT0xFCi0JYm9vbCAiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBFeGNhbGlidXIgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfVUFSVDAwCi0Jc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgYSBzZXJpYWwgY29uc29sZSBvbiBhbiBFeGNhbGlidXIKLQkgIGhhcmQgbG9naWMgdWFydCBvciB1YXJ0MDAgSVAgY29yZS4KLQotCSAgRXZlbiBpZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGN1cnJlbnRseSB2aXNpYmxlIHZpcnR1YWwgY29uc29sZQotCSAgKC9kZXYvdHR5MCkgd2lsbCBzdGlsbCBiZSB1c2VkIGFzIHRoZSBzeXN0ZW0gY29uc29sZSBieSBkZWZhdWx0LCBidXQKLQkgIHlvdSBjYW4gYWx0ZXIgdGhhdCB1c2luZyBhIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIHN1Y2ggYXMKLQkgICJjb25zb2xlPXR0eVMxIi4gKFRyeSAibWFuIGJvb3RwYXJhbSIgb3Igc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mCi0JICB5b3VyIGJvb3QgbG9hZGVyIChsaWxvIG9yIGxvYWRsaW4pIGFib3V0IGhvdyB0byBwYXNzIG9wdGlvbnMgdG8gdGhlCi0JICBrZXJuZWwgYXQgYm9vdCB0aW1lLikKLQogY29uZmlnIFNFUklBTF9NUFNDCiAJYm9vbCAiTWFydmVsbCBNUFNDIHNlcmlhbCBwb3J0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUEMzMiAmJiBNVjY0WDYwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IGQ3YzdjNzEuLjEzNzE0OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw2IEBACiBvYmotJChDT05GSUdfU0VSSUFMX1BYQSkgKz0gcHhhLm8KIG9iai0kKENPTkZJR19TRVJJQUxfU0ExMTAwKSArPSBzYTExMDAubwogb2JqLSQoQ09ORklHX1NFUklBTF9TM0MyNDEwKSArPSBzM2MyNDEwLm8KLW9iai0kKENPTkZJR19TRVJJQUxfVUFSVDAwKSArPSB1YXJ0MDAubwogb2JqLSQoQ09ORklHX1NFUklBTF9TVU5DT1JFKSArPSBzdW5jb3JlLm8KIG9iai0kKENPTkZJR19TRVJJQUxfU1VOWklMT0cpICs9IHN1bnppbG9nLm8KIG9iai0kKENPTkZJR19TRVJJQUxfSVAyMl9aSUxPRykgKz0gaXAyMnppbG9nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDM0YzU3NmQuLjk1ODk1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMTQ0MCw2ICsxNDQwLDcgQEAKIAkJICogbW9kZW0gaXMgcmVhZHkgZm9yIHVzLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJCXBvcnQtPm9wcy0+ZW5hYmxlX21zKHBvcnQpOwogCQltY3RybCA9IHBvcnQtPm9wcy0+Z2V0X21jdHJsKHBvcnQpOwogCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOwogCQlpZiAobWN0cmwgJiBUSU9DTV9DQVIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC91YXJ0MDAuYyBiL2RyaXZlcnMvc2VyaWFsL3VhcnQwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2I1MDRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2VyaWFsL3VhcnQwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzgyICswLDAgQEAKLS8qCi0gKiAgbGludXgvZHJpdmVycy9zZXJpYWwvdWFydDAwLmMKLSAqCi0gKiAgRHJpdmVyIGZvciBVQVJUMDAgc2VyaWFsIHBvcnRzCi0gKgotICogIEJhc2VkIG9uIGRyaXZlcnMvY2hhci9zZXJpYWxfYW1iYS5jLCBieSBBUk0gTGltaXRlZCAmIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KLSAqICBDb3B5cmlnaHQgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiAgVXBkYXRlIGZvciAyLjYuNCBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICogICRJZDogdWFydDAwLmMsdiAxLjM1IDIwMDIvMDcvMjggMTA6MDM6Mjggcm1rIEV4cCAkCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfVUFSVDAwX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQotI2RlZmluZSBTVVBQT1JUX1NZU1JRCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NpemVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXJjaC9leGNhbGlidXIuaD4KLSNkZWZpbmUgVUFSVDAwX1RZUEUgKHZvbGF0aWxlIHVuc2lnbmVkIGludCopCi0jaW5jbHVkZSA8YXNtL2FyY2gvdWFydDAwLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaW50X2N0cmwwMC5oPgotCi0jZGVmaW5lIFVBUlRfTlIJCTIKLQotI2RlZmluZSBTRVJJQUxfVUFSVDAwX05BTUUJInR0eVVBIgotI2RlZmluZSBTRVJJQUxfVUFSVDAwX01BSk9SCTIwNAotI2RlZmluZSBTRVJJQUxfVUFSVDAwX01JTk9SCTE2ICAgICAgLyogVGVtcG9yYXJ5IC0gd2lsbCBjaGFuZ2UgaW4gZnV0dXJlICovCi0jZGVmaW5lIFNFUklBTF9VQVJUMDBfTlIJVUFSVF9OUgotI2RlZmluZSBVQVJUX1BPUlRfU0laRSAweDUwCi0KLSNkZWZpbmUgVUFSVDAwX0lTUl9QQVNTX0xJTUlUCTI1NgotCi0vKgotICogQWNjZXNzIG1hY3JvcyBmb3IgdGhlIFVBUlQwMCBVQVJUcwotICovCi0jZGVmaW5lIFVBUlRfR0VUX0lOVF9TVEFUVVMocCkJaW5sKFVBUlRfSVNSKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfUFVUX0lFUyhwLCBjKSAgICAgIG91dGwoYyxVQVJUX0lFUygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9JRVMocCkgICAgICAgICBpbmwoVUFSVF9JRVMoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9QVVRfSUVDKHAsIGMpICAgICAgb3V0bChjLFVBUlRfSUVDKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfR0VUX0lFQyhwKSAgICAgICAgIGlubChVQVJUX0lFQygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX1BVVF9DSEFSKHAsIGMpICAgICBvdXRsKGMsVUFSVF9URCgocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9DSEFSKHApICAgICAgICBpbmwoVUFSVF9SRCgocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9SU1IocCkgICAgICAgICBpbmwoVUFSVF9SU1IoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9HRVRfUkRTKHApICAgICAgICAgaW5sKFVBUlRfUkRTKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfR0VUX01TUihwKSAgICAgICAgIGlubChVQVJUX01TUigocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9NQ1IocCkgICAgICAgICBpbmwoVUFSVF9NQ1IoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9QVVRfTUNSKHAsIGMpICAgICAgb3V0bChjLFVBUlRfTUNSKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfR0VUX01DKHApICAgICAgICAgIGlubChVQVJUX01DKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfUFVUX01DKHAsIGMpICAgICAgIG91dGwoYyxVQVJUX01DKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfR0VUX1RTUihwKSAgICAgICAgIGlubChVQVJUX1RTUigocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9ESVZfSEkocCkJaW5sKFVBUlRfRElWX0hJKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfUFVUX0RJVl9ISShwLGMpCW91dGwoYyxVQVJUX0RJVl9ISSgocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9ESVZfTE8ocCkJaW5sKFVBUlRfRElWX0xPKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfUFVUX0RJVl9MTyhwLGMpCW91dGwoYyxVQVJUX0RJVl9MTygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX1JYX0RBVEEocykJCSgocykgJiBVQVJUX1JTUl9SWF9MRVZFTF9NU0spCi0jZGVmaW5lIFVBUlRfVFhfUkVBRFkocykJKCgocykgJiBVQVJUX1RTUl9UWF9MRVZFTF9NU0spIDwgMTUpCi0vLyNkZWZpbmUgVUFSVF9UWF9FTVBUWShwKQkoKFVBUlRfR0VUX0ZSKHApICYgVUFSVDAwX1VBUlRGUl9UTVNLKSA9PSAwKQotCi1zdGF0aWMgdm9pZCB1YXJ0MDBfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCVVBUlRfUFVUX0lFQyhwb3J0LCBVQVJUX0lFQ19USUVfTVNLKTsKLX0KLQotc3RhdGljIHZvaWQgdWFydDAwX3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlVQVJUX1BVVF9JRUMocG9ydCwgVUFSVF9JRUNfUkVfTVNLKTsKLX0KLQotc3RhdGljIHZvaWQgdWFydDAwX2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCVVBUlRfUFVUX0lFUyhwb3J0LCBVQVJUX0lFU19NRV9NU0spOwotfQotCi1zdGF0aWMgdm9pZAotdWFydDAwX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7Ci0JdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIHJkcywgZmxnLCBpZ25vcmVkID0gMDsKLQotCXN0YXR1cyA9IFVBUlRfR0VUX1JTUihwb3J0KTsKLQl3aGlsZSAoVUFSVF9SWF9EQVRBKHN0YXR1cykpIHsKLQkJLyogCi0JCSAqIFdlIG5lZWQgdG8gcmVhZCByZHMgYmVmb3JlIHJlYWRpbmcgdGhlIAotCQkgKiBjaGFyYWN0ZXIgZnJvbSB0aGUgZmlmbwotCQkgKi8KLQkJcmRzID0gVUFSVF9HRVRfUkRTKHBvcnQpOwotCQljaCA9IFVBUlRfR0VUX0NIQVIocG9ydCk7Ci0JCXBvcnQtPmljb3VudC5yeCsrOwotCi0JCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkKLQkJCWdvdG8gaWdub3JlX2NoYXI7Ci0KLQkJZmxnID0gVFRZX05PUk1BTDsKLQotCQkvKgotCQkgKiBOb3RlIHRoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGNvZGUgaXMKLQkJICogb3V0IG9mIHRoZSBtYWluIGV4ZWN1dGlvbiBwYXRoCi0JCSAqLwotCQlpZiAocmRzICYgKFVBUlRfUkRTX0JJX01TSyB8VUFSVF9SRFNfRkVfTVNLfAotCQkJICAgVUFSVF9SRFNfUEVfTVNLIHxVQVJUX1JEU19QRV9NU0spKQotCQkJZ290byBoYW5kbGVfZXJyb3I7Ci0JCWlmICh1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKHBvcnQsIGNoLCByZWdzKSkKLQkJCWdvdG8gaWdub3JlX2NoYXI7Ci0KLQllcnJvcl9yZXR1cm46Ci0JCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsZyk7Ci0KLQlpZ25vcmVfY2hhcjoKLQkJc3RhdHVzID0gVUFSVF9HRVRfUlNSKHBvcnQpOwotCX0KLSBvdXQ6Ci0JdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQlyZXR1cm47Ci0KLSBoYW5kbGVfZXJyb3I6Ci0JaWYgKHJkcyAmIFVBUlRfUkRTX0JJX01TSykgewotCQlzdGF0dXMgJj0gfihVQVJUX1JEU19GRV9NU0sgfCBVQVJUX1JEU19QRV9NU0spOwotCQlwb3J0LT5pY291bnQuYnJrKys7Ci0JCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKLQkJCWdvdG8gaWdub3JlX2NoYXI7Ci0JfSBlbHNlIGlmIChyZHMgJiBVQVJUX1JEU19QRV9NU0spCi0JCXBvcnQtPmljb3VudC5wYXJpdHkrKzsKLQllbHNlIGlmIChyZHMgJiBVQVJUX1JEU19GRV9NU0spCi0JCXBvcnQtPmljb3VudC5mcmFtZSsrOwotCWlmIChyZHMgJiBVQVJUX1JEU19PRV9NU0spCi0JCXBvcnQtPmljb3VudC5vdmVycnVuKys7Ci0KLQlpZiAocmRzICYgcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrKSB7Ci0JCWlmICgrK2lnbm9yZWQgPiAxMDApCi0JCQlnb3RvIG91dDsKLQkJZ290byBpZ25vcmVfY2hhcjsKLQl9Ci0JcmRzICY9IHBvcnQtPnJlYWRfc3RhdHVzX21hc2s7Ci0KLQlpZiAocmRzICYgVUFSVF9SRFNfQklfTVNLKQotCQlmbGcgPSBUVFlfQlJFQUs7Ci0JZWxzZSBpZiAocmRzICYgVUFSVF9SRFNfUEVfTVNLKQotCQlmbGcgPSBUVFlfUEFSSVRZOwotCWVsc2UgaWYgKHJkcyAmIFVBUlRfUkRTX0ZFX01TSykKLQkJZmxnID0gVFRZX0ZSQU1FOwotCi0JaWYgKHJkcyAmIFVBUlRfUkRTX09FX01TSykgewotCQkvKgotCQkgKiBDSEVDSzogZG9lcyBvdmVycnVuIGFmZmVjdCB0aGUgY3VycmVudCBjaGFyYWN0ZXI/Ci0JCSAqIEFTU1VNUFRJT046IGl0IGRvZXMgbm90LgotCQkgKi8KLQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxnKTsKLQkJY2ggPSAwOwotCQlmbGcgPSBUVFlfT1ZFUlJVTjsKLQl9Ci0jaWZkZWYgU1VQUE9SVF9TWVNSUQotCXBvcnQtPnN5c3JxID0gMDsKLSNlbmRpZgotCWdvdG8gZXJyb3JfcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB1YXJ0MDBfdHhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKLQlpbnQgY291bnQ7Ci0KLQlpZiAocG9ydC0+eF9jaGFyKSB7Ci0JCXdoaWxlICgoVUFSVF9HRVRfVFNSKHBvcnQpICYgVUFSVF9UU1JfVFhfTEVWRUxfTVNLKSA9PSAxNSkKLQkJCWJhcnJpZXIoKTsKLQkJVUFSVF9QVVRfQ0hBUihwb3J0LCBwb3J0LT54X2NoYXIpOwotCQlwb3J0LT5pY291bnQudHgrKzsKLQkJcG9ydC0+eF9jaGFyID0gMDsKLQkJcmV0dXJuOwotCX0KLQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZChwb3J0KSkgewotCQl1YXJ0MDBfc3RvcF90eChwb3J0KTsKLQkJcmV0dXJuOwotCX0KLQotCWNvdW50ID0gcG9ydC0+Zmlmb3NpemUgPj4gMTsKLQlkbyB7Ci0JCXdoaWxlICgoVUFSVF9HRVRfVFNSKHBvcnQpICYgVUFSVF9UU1JfVFhfTEVWRUxfTVNLKSA9PSAxNSkKLQkJCWJhcnJpZXIoKTsKLQkJVUFSVF9QVVRfQ0hBUihwb3J0LCB4bWl0LT5idWZbeG1pdC0+dGFpbF0pOwotCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOwotCQlwb3J0LT5pY291bnQudHgrKzsKLQkJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKC0tY291bnQgPiAwKTsKLQotCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKLQkJdWFydF93cml0ZV93YWtldXAocG9ydCk7Ci0KLQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQotCQl1YXJ0MDBfc3RvcF90eChwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgdWFydDAwX3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JVUFSVF9QVVRfSUVTKHBvcnQsIFVBUlRfSUVTX1RJRV9NU0spOwotCXVhcnQwMF90eF9jaGFycyhwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgdWFydDAwX21vZGVtX3N0YXR1cyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBVQVJUX0dFVF9NU1IocG9ydCk7Ci0KLQlpZiAoIShzdGF0dXMgJiAoVUFSVF9NU1JfRENUU19NU0sgfCBVQVJUX01TUl9ERFNSX01TSyB8IAotCQkJVUFSVF9NU1JfVEVSSV9NU0sgfCBVQVJUX01TUl9ERENEX01TSykpKQotCQlyZXR1cm47Ci0KLQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRERDRF9NU0spCi0JCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgc3RhdHVzICYgVUFSVF9NU1JfRENEX01TSyk7Ci0KLQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRERTUl9NU0spCi0JCXBvcnQtPmljb3VudC5kc3IrKzsKLQotCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ1RTX01TSykKLQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZShwb3J0LCBzdGF0dXMgJiBVQVJUX01TUl9DVFNfTVNLKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgdWFydDAwX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHN0YXR1cywgcGFzc19jb3VudGVyID0gMDsKLQotCXN0YXR1cyA9IFVBUlRfR0VUX0lOVF9TVEFUVVMocG9ydCk7Ci0JZG8gewotCQlpZiAoc3RhdHVzICYgVUFSVF9JU1JfUklfTVNLKQotCQkJdWFydDAwX3J4X2NoYXJzKHBvcnQsIHJlZ3MpOwotCQlpZiAoc3RhdHVzICYgVUFSVF9JU1JfTUlfTVNLKQotCQkJdWFydDAwX21vZGVtX3N0YXR1cyhwb3J0KTsKLQkJaWYgKHN0YXR1cyAmIChVQVJUX0lTUl9USV9NU0sgfCBVQVJUX0lTUl9USUlfTVNLKSkKLQkJCXVhcnQwMF90eF9jaGFycyhwb3J0KTsKLQkJaWYgKHBhc3NfY291bnRlcisrID4gVUFSVDAwX0lTUl9QQVNTX0xJTUlUKQotCQkJYnJlYWs7Ci0KLQkJc3RhdHVzID0gVUFSVF9HRVRfSU5UX1NUQVRVUyhwb3J0KTsKLQl9IHdoaWxlIChzdGF0dXMpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHVhcnQwMF90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCXJldHVybiBVQVJUX0dFVF9UU1IocG9ydCkgJiBVQVJUX1RTUl9UWF9MRVZFTF9NU0s/IDAgOiBUSU9DU0VSX1RFTVQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdWFydDAwX2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwotCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBVQVJUX0dFVF9NU1IocG9ydCk7Ci0JaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDRF9NU0spCi0JCXJlc3VsdCB8PSBUSU9DTV9DQVI7Ci0JaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RTUl9NU0spCi0JCXJlc3VsdCB8PSBUSU9DTV9EU1I7Ci0JaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0NUU19NU0spCi0JCXJlc3VsdCB8PSBUSU9DTV9DVFM7Ci0JaWYgKHN0YXR1cyAmIFVBUlRfTVNSX1JJX01TSykKLQkJcmVzdWx0IHw9IFRJT0NNX1JJOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgdWFydDAwX3NldF9tY3RybF9udWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBtY3RybCkKLXsKLX0KLQotc3RhdGljIHZvaWQgdWFydDAwX2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgbWNyOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQltY3IgPSBVQVJUX0dFVF9NQ1IocG9ydCk7Ci0JaWYgKGJyZWFrX3N0YXRlID09IC0xKQotCQltY3IgfD0gVUFSVF9NQ1JfQlJfTVNLOwotCWVsc2UKLQkJbWNyICY9IH5VQVJUX01DUl9CUl9NU0s7Ci0JVUFSVF9QVVRfTUNSKHBvcnQsIG1jcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotdWFydDAwX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkgICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQotewotCXVuc2lnbmVkIGludCB1YXJ0X21jLCBvbGRfaWVzLCBiYXVkLCBxdW90OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIFdlIGRvbid0IHN1cHBvcnQgQ1JFQUQgKHlldCkKLQkgKi8KLQl0ZXJtaW9zLT5jX2NmbGFnIHw9IENSRUFEOwotCi0JLyoKLQkgKiBBc2sgdGhlIGNvcmUgdG8gY2FsY3VsYXRlIHRoZSBkaXZpc29yIGZvciB1cy4KLQkgKi8KLQliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsay8xNik7IAotCXF1b3QgPSB1YXJ0X2dldF9kaXZpc29yKHBvcnQsIGJhdWQpOwotCi0JLyogYnl0ZSBzaXplIGFuZCBwYXJpdHkgKi8KLQlzd2l0Y2ggKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgewotCWNhc2UgQ1M1OgotCQl1YXJ0X21jID0gVUFSVF9NQ19DTFNfQ0hBUkxFTl81OwotCQlicmVhazsKLQljYXNlIENTNjoKLQkJdWFydF9tYyA9IFVBUlRfTUNfQ0xTX0NIQVJMRU5fNjsKLQkJYnJlYWs7Ci0JY2FzZSBDUzc6Ci0JCXVhcnRfbWMgPSBVQVJUX01DX0NMU19DSEFSTEVOXzc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6IC8vIENTOAotCQl1YXJ0X21jID0gVUFSVF9NQ19DTFNfQ0hBUkxFTl84OwotCQlicmVhazsKLQl9Ci0JaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIpCi0JCXVhcnRfbWN8PSBVQVJUX01DX1NUX1RXTzsKLQlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUkVOQikgewotCQl1YXJ0X21jIHw9IFVBUlRfTUNfUEVfTVNLOwotCQlpZiAoISh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REKSkKLQkJCXVhcnRfbWMgfD0gVUFSVF9NQ19FUF9NU0s7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogVXBkYXRlIHRoZSBwZXItcG9ydCB0aW1lb3V0LgotCSAqLwotCXVhcnRfdXBkYXRlX3RpbWVvdXQocG9ydCwgdGVybWlvcy0+Y19jZmxhZywgYmF1ZCk7Ci0KLQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrID0gVUFSVF9SRFNfT0VfTVNLOwotCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCi0JCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9SRFNfRkVfTVNLIHwgVUFSVF9SRFNfUEVfTVNLOwotCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgKEJSS0lOVCB8IFBBUk1SSykpCi0JCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9SRFNfQklfTVNLOwotCi0JLyoKLQkgKiBDaGFyYWN0ZXJzIHRvIGlnbm9yZQotCSAqLwotCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IDA7Ci0JaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05QQVIpCi0JCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX1JEU19GRV9NU0sgfCBVQVJUX1JEU19QRV9NU0s7Ci0JaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05CUkspIHsKLQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfUkRTX0JJX01TSzsKLQkJLyoKLQkJICogSWYgd2UncmUgaWdub3JpbmcgcGFyaXR5IGFuZCBicmVhayBpbmRpY2F0b3JzLAotCQkgKiBpZ25vcmUgb3ZlcnJ1bnMgdG8gKGZvciByZWFsIHJhdyBzdXBwb3J0KS4KLQkJICovCi0JCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQotCQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfUkRTX09FX01TSzsKLQl9Ci0KLQkvKiBmaXJzdCwgZGlzYWJsZSBldmVyeXRoaW5nICovCi0Jb2xkX2llcyA9IFVBUlRfR0VUX0lFUyhwb3J0KTsgCi0KLQlpZiAoVUFSVF9FTkFCTEVfTVMocG9ydCwgdGVybWlvcy0+Y19jZmxhZykpCi0JCW9sZF9pZXMgfD0gVUFSVF9JRVNfTUVfTVNLOwotCi0JLyogU2V0IGJhdWQgcmF0ZSAqLwotCVVBUlRfUFVUX0RJVl9MTyhwb3J0LCAocXVvdCAmIDB4ZmYpKTsKLQlVQVJUX1BVVF9ESVZfSEkocG9ydCwgKChxdW90ICYgMHhmMDApID4+IDgpKTsKLQotCVVBUlRfUFVUX01DKHBvcnQsIHVhcnRfbWMpOwotCVVBUlRfUFVUX0lFUyhwb3J0LCBvbGRfaWVzKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCB1YXJ0MDBfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWludCByZXN1bHQ7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHRoZSBJUlEKLQkgKi8KLQlyZXN1bHQgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIHVhcnQwMF9pbnQsIDAsICJ1YXJ0MDAiLCBwb3J0KTsKLQlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUmVxdWVzdCBvZiBpcnEgJWQgZmFpbGVkXG4iLCBwb3J0LT5pcnEpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qCi0JICogRmluYWxseSwgZW5hYmxlIGludGVycnVwdHMuIFVzZSB0aGUgVElJIGludGVycnVwdCB0byBtaW5pbWlzZSAKLQkgKiB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkLiBJZiBoaWdoZXIgcGVyZm9ybWFuY2UgaXMgCi0JICogbmVlZGVkLCBjb25zaWRlciB1c2luZyB0aGUgVEkgaW50ZXJydXB0IHdpdGggYSBzdWl0YWJsZSBGSUZPCi0JICogdGhyZXNob2xkCi0JICovCi0JVUFSVF9QVVRfSUVTKHBvcnQsIFVBUlRfSUVTX1JFX01TSyB8IFVBUlRfSUVTX1RJRV9NU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVhcnQwMF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCS8qCi0JICogZGlzYWJsZSBhbGwgaW50ZXJydXB0cywgZGlzYWJsZSB0aGUgcG9ydAotCSAqLwotCVVBUlRfUFVUX0lFQyhwb3J0LCAweGZmKTsKLQotCS8qIGRpc2FibGUgYnJlYWsgY29uZGl0aW9uIGFuZCBmaWZvcyAqLwotCVVBUlRfUFVUX01DUihwb3J0LCBVQVJUX0dFVF9NQ1IocG9ydCkgJn5VQVJUX01DUl9CUl9NU0spOwotCi0gICAgICAgIC8qCi0JICogRnJlZSB0aGUgaW50ZXJydXB0Ci0JICovCi0JZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnVhcnQwMF90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JcmV0dXJuIHBvcnQtPnR5cGUgPT0gUE9SVF9VQVJUMDAgPyAiQWx0ZXJhIFVBUlQwMCIgOiBOVUxMOwotfQotCi0vKgotICogUmVsZWFzZSB0aGUgbWVtb3J5IHJlZ2lvbihzKSBiZWluZyB1c2VkIGJ5ICdwb3J0JwotICovCi1zdGF0aWMgdm9pZCB1YXJ0MDBfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIFVBUlRfUE9SVF9TSVpFKTsKLQotI2lmZGVmIENPTkZJR19BUkNIX0NBTUVMT1QKLQlpZiAocG9ydC0+bWVtYmFzZSAhPSAodm9pZCopSU9fQUREUkVTUyhFWENfVUFSVDAwX0JBU0UpKSB7Ci0JCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7Ci0JfQotI2VuZGlmCi19Ci0KLS8qCi0gKiBSZXF1ZXN0IHRoZSBtZW1vcnkgcmVnaW9uKHMpIGJlaW5nIHVzZWQgYnkgJ3BvcnQnCi0gKi8KLXN0YXRpYyBpbnQgdWFydDAwX3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCXJldHVybiByZXF1ZXN0X21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgVUFSVF9QT1JUX1NJWkUsICJzZXJpYWxfdWFydDAwIikKLQkJCSE9IE5VTEwgPyAwIDogLUVCVVNZOwotfQotCi0vKgotICogQ29uZmlndXJlL2F1dG9jb25maWd1cmUgdGhlIHBvcnQuCi0gKi8KLXN0YXRpYyB2b2lkIHVhcnQwMF9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZmxhZ3MpCi17Ci0KLQkvKgotCSAqIE1hcCB0aGUgaW8gbWVtb3J5IGlmIHRoaXMgaXMgYSBzb2Z0IHVhcnQKLQkgKi8KLQlpZiAoIXBvcnQtPm1lbWJhc2UpCi0JCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocG9ydC0+bWFwYmFzZSxTWl80Syk7Ci0KLQlpZiAoIXBvcnQtPm1lbWJhc2UpCi0JCXByaW50ayhLRVJOX0VSUiAic2VyaWFsMDA6IGNhbm5vdCBtYXAgaW8gbWVtb3J5XG4iKTsKLQllbHNlCi0JCXBvcnQtPnR5cGUgPSBQT1JUX1VBUlQwMDsKLQotfQotCi0vKgotICogdmVyaWZ5IHRoZSBuZXcgc2VyaWFsX3N0cnVjdCAoZm9yIFRJT0NTU0VSSUFMKS4KLSAqLwotc3RhdGljIGludCB1YXJ0MDBfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9VQVJUMDApCi0JCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQotCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmJhdWRfYmFzZSA8IDk2MDApCi0JCXJldCA9IC1FSU5WQUw7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCB1YXJ0X29wcyB1YXJ0MDBfcG9wcyA9IHsKLQkudHhfZW1wdHkJPSB1YXJ0MDBfdHhfZW1wdHksCi0JLnNldF9tY3RybAk9IHVhcnQwMF9zZXRfbWN0cmxfbnVsbCwKLQkuZ2V0X21jdHJsCT0gdWFydDAwX2dldF9tY3RybCwKLQkuc3RvcF90eAk9IHVhcnQwMF9zdG9wX3R4LAotCS5zdGFydF90eAk9IHVhcnQwMF9zdGFydF90eCwKLQkuc3RvcF9yeAk9IHVhcnQwMF9zdG9wX3J4LAotCS5lbmFibGVfbXMJPSB1YXJ0MDBfZW5hYmxlX21zLAotCS5icmVha19jdGwJPSB1YXJ0MDBfYnJlYWtfY3RsLAotCS5zdGFydHVwCT0gdWFydDAwX3N0YXJ0dXAsCi0JLnNodXRkb3duCT0gdWFydDAwX3NodXRkb3duLAotCS5zZXRfdGVybWlvcwk9IHVhcnQwMF9zZXRfdGVybWlvcywKLQkudHlwZQkJPSB1YXJ0MDBfdHlwZSwKLQkucmVsZWFzZV9wb3J0CT0gdWFydDAwX3JlbGVhc2VfcG9ydCwKLQkucmVxdWVzdF9wb3J0CT0gdWFydDAwX3JlcXVlc3RfcG9ydCwKLQkuY29uZmlnX3BvcnQJPSB1YXJ0MDBfY29uZmlnX3BvcnQsCi0JLnZlcmlmeV9wb3J0CT0gdWFydDAwX3ZlcmlmeV9wb3J0LAotfTsKLQotCi0jaWZkZWYgQ09ORklHX0FSQ0hfQ0FNRUxPVAotc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgZXB4YTEwZGJfcG9ydCA9IHsKLQkubWVtYmFzZQk9ICh2b2lkKilJT19BRERSRVNTKEVYQ19VQVJUMDBfQkFTRSksCi0JLm1hcGJhc2UJPSBFWENfVUFSVDAwX0JBU0UsCi0JLmlvdHlwZQkJPSBTRVJJQUxfSU9fTUVNLAotCS5pcnEJCT0gSVJRX1VBUlQsCi0JLnVhcnRjbGsJPSBFWENfQUhCMl9DTEtfRlJFUVVFTkNZLAotCS5maWZvc2l6ZQk9IDE2LAotCS5vcHMJCT0gJnVhcnQwMF9wb3BzLAotCS5mbGFncwkJPSBBU1lOQ19CT09UX0FVVE9DT05GLAotfTsKLSNlbmRpZgotCi0KLSNpZmRlZiBDT05GSUdfU0VSSUFMX1VBUlQwMF9DT05TT0xFCi1zdGF0aWMgdm9pZCB1YXJ0MDBfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQotewotI2lmZGVmIENPTkZJR19BUkNIX0NBTUVMT1QKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmVweGExMGRiX3BvcnQ7Ci0JdW5zaWduZWQgaW50IHN0YXR1cywgb2xkX2llczsKLQlpbnQgaTsKLQotCS8qCi0JICoJRmlyc3Qgc2F2ZSB0aGUgQ1IgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCi0JICovCi0Jb2xkX2llcyA9IFVBUlRfR0VUX0lFUyhwb3J0KTsKLQlVQVJUX1BVVF9JRUMocG9ydCwweGZmKTsKLQotCS8qCi0JICoJTm93LCBkbyBlYWNoIGNoYXJhY3RlcgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWRvIHsKLQkJCXN0YXR1cyA9IFVBUlRfR0VUX1RTUihwb3J0KTsKLQkJfSB3aGlsZSAoIVVBUlRfVFhfUkVBRFkoc3RhdHVzKSk7Ci0JCVVBUlRfUFVUX0NIQVIocG9ydCwgc1tpXSk7Ci0JCWlmIChzW2ldID09ICdcbicpIHsKLQkJCWRvIHsKLQkJCQlzdGF0dXMgPSBVQVJUX0dFVF9UU1IocG9ydCk7Ci0JCQl9IHdoaWxlICghVUFSVF9UWF9SRUFEWShzdGF0dXMpKTsKLQkJCVVBUlRfUFVUX0NIQVIocG9ydCwgJ1xyJyk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqCUZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eQotCSAqCWFuZCByZXN0b3JlIHRoZSBJRVMKLQkgKi8KLQlkbyB7Ci0JCXN0YXR1cyA9IFVBUlRfR0VUX1RTUihwb3J0KTsKLQl9IHdoaWxlIChzdGF0dXMgJiBVQVJUX1RTUl9UWF9MRVZFTF9NU0spOwotCVVBUlRfUFVUX0lFUyhwb3J0LCBvbGRfaWVzKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXVhcnQwMF9jb25zb2xlX2dldF9vcHRpb25zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCAqYmF1ZCwKLQkJCSAgIGludCAqcGFyaXR5LCBpbnQgKmJpdHMpCi17Ci0JdW5zaWduZWQgaW50IHVhcnRfbWMsIHF1b3Q7Ci0KLQl1YXJ0X21jID0gVUFSVF9HRVRfTUMocG9ydCk7Ci0KLQkqcGFyaXR5ID0gJ24nOwotCWlmICh1YXJ0X21jICYgVUFSVF9NQ19QRV9NU0spIHsKLQkJaWYgKHVhcnRfbWMgJiBVQVJUX01DX0VQX01TSykKLQkJCSpwYXJpdHkgPSAnZSc7Ci0JCWVsc2UKLQkJCSpwYXJpdHkgPSAnbyc7Ci0JfQotCi0Jc3dpdGNoICh1YXJ0X21jICYgVUFSVF9NQ19DTFNfTVNLKSB7Ci0JY2FzZSBVQVJUX01DX0NMU19DSEFSTEVOXzU6Ci0JCSpiaXRzID0gNTsKLQkJYnJlYWs7Ci0JY2FzZSBVQVJUX01DX0NMU19DSEFSTEVOXzY6Ci0JCSpiaXRzID0gNjsKLQkJYnJlYWs7Ci0JY2FzZSBVQVJUX01DX0NMU19DSEFSTEVOXzc6Ci0JCSpiaXRzID0gNzsKLQkJYnJlYWs7Ci0JY2FzZSBVQVJUX01DX0NMU19DSEFSTEVOXzg6Ci0JCSpiaXRzID0gODsKLQkJYnJlYWs7Ci0JfQotCXF1b3QgPSBVQVJUX0dFVF9ESVZfTE8ocG9ydCkgfCAoVUFSVF9HRVRfRElWX0hJKHBvcnQpIDw8IDgpOwotCSpiYXVkID0gcG9ydC0+dWFydGNsayAvICgxNiAqcXVvdCApOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCB1YXJ0MDBfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCi17Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKLQlpbnQgYmF1ZCA9IDExNTIwMDsKLQlpbnQgYml0cyA9IDg7Ci0JaW50IHBhcml0eSA9ICduJzsKLQlpbnQgZmxvdyA9ICduJzsKLQotI2lmZGVmIENPTkZJR19BUkNIX0NBTUVMT1QKLQlwb3J0ID0gJmVweGExMGRiX3BvcnQ7ICAgICAgICAgICAgIDsKLSNlbHNlCi0JcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKLQlpZiAob3B0aW9ucykKLQkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOwotCWVsc2UKLQkJdWFydDAwX2NvbnNvbGVfZ2V0X29wdGlvbnMocG9ydCwgJmJhdWQsICZwYXJpdHksICZiaXRzKTsKLQotCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOwotfQotCi1leHRlcm4gc3RydWN0IHVhcnRfZHJpdmVyIHVhcnQwMF9yZWc7Ci1zdGF0aWMgc3RydWN0IGNvbnNvbGUgdWFydDAwX2NvbnNvbGUgPSB7Ci0JLm5hbWUJCT0gU0VSSUFMX1VBUlQwMF9OQU1FLAotCS53cml0ZQkJPSB1YXJ0MDBfY29uc29sZV93cml0ZSwKLQkuZGV2aWNlCQk9IHVhcnRfY29uc29sZV9kZXZpY2UsCi0JLnNldHVwCQk9IHVhcnQwMF9jb25zb2xlX3NldHVwLAotCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIsCi0JLmluZGV4CQk9IDAsCi0JLmRhdGEJCT0gJnVhcnQwMF9yZWcsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB1YXJ0MDBfY29uc29sZV9pbml0KHZvaWQpCi17Ci0JcmVnaXN0ZXJfY29uc29sZSgmdWFydDAwX2NvbnNvbGUpOwotCXJldHVybiAwOwotfQotY29uc29sZV9pbml0Y2FsbCh1YXJ0MDBfY29uc29sZV9pbml0KTsKLQotI2RlZmluZSBVQVJUMDBfQ09OU09MRQkmdWFydDAwX2NvbnNvbGUKLSNlbHNlCi0jZGVmaW5lIFVBUlQwMF9DT05TT0xFCU5VTEwKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHVhcnQwMF9yZWcgPSB7Ci0JLm93bmVyCQkJPSBOVUxMLAotCS5kcml2ZXJfbmFtZQkJPSBTRVJJQUxfVUFSVDAwX05BTUUsCi0JLmRldl9uYW1lCQk9IFNFUklBTF9VQVJUMDBfTkFNRSwKLQkubWFqb3IJCQk9IFNFUklBTF9VQVJUMDBfTUFKT1IsCi0JLm1pbm9yCQkJPSBTRVJJQUxfVUFSVDAwX01JTk9SLAotCS5ucgkJCT0gVUFSVF9OUiwKLQkuY29ucwkJCT0gVUFSVDAwX0NPTlNPTEUsCi19OwotCi1zdHJ1Y3QgZGV2X3BvcnRfZW50cnl7Ci0JdW5zaWduZWQgaW50IGJhc2VfYWRkcjsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwotfTsKLQotI2lmZGVmIENPTkZJR19QTERfSE9UU1dBUAotCi1zdGF0aWMgc3RydWN0IGRldl9wb3J0X2VudHJ5IGRldl9wb3J0X21hcFtVQVJUX05SXTsKLQotLyoKLSAqIEtlZXAgYSBtYXBwaW5nIG9mIGRldl9pbmZvIGFkZHJlc3NlcyAtPiBwb3J0IGxpbmVzIHRvIHVzZSB3aGVuCi0gKiByZW1vdmluZyBwb3J0cyBkZXY9PU5VTEwgaW5kaWNhdGVzIHVudXNlZCBlbnRyeQotICovCi0KLXN0cnVjdCB1YXJ0MDBfcHNfZGF0YXsKLQl1bnNpZ25lZCBpbnQgY2xrOwotCXVuc2lnbmVkIGludCBmaWZvc2l6ZTsKLX07Ci0KLWludCB1YXJ0MDBfYWRkX2RldmljZShzdHJ1Y3QgcGxkaHNfZGV2X2luZm8qIGRldl9pbmZvLCB2b2lkKiBkZXZfcHNfZGF0YSkKLXsKLQlzdHJ1Y3QgdWFydDAwX3BzX2RhdGEqIGRldl9wcz1kZXZfcHNfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICogcG9ydDsKLQlpbnQgaSxyZXN1bHQ7Ci0KLQlpPTA7Ci0Jd2hpbGUoZGV2X3BvcnRfbWFwW2ldLnBvcnQpCi0JCWkrKzsKLQotCWlmKGk9PVVBUlRfTlIpewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1YXJ0MDA6IE1heGltdW0gbnVtYmVyIG9mIHBvcnRzIHJlYWNoZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwb3J0PWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpLEdGUF9LRVJORUwpOwotCWlmKCFwb3J0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXByaW50aygiY2xrPSVkIGZpZm89JWRcbiIsZGV2X3BzLT5jbGssZGV2X3BzLT5maWZvc2l6ZSk7Ci0JcG9ydC0+bWVtYmFzZT0wOwotCXBvcnQtPm1hcGJhc2U9ZGV2X2luZm8tPmJhc2VfYWRkcjsKLQlwb3J0LT5pb3R5cGU9U0VSSUFMX0lPX01FTTsKLQlwb3J0LT5pcnE9ZGV2X2luZm8tPmlycTsKLQlwb3J0LT51YXJ0Y2xrPWRldl9wcy0+Y2xrOwotCXBvcnQtPmZpZm9zaXplPWRldl9wcy0+Zmlmb3NpemU7Ci0JcG9ydC0+b3BzPSZ1YXJ0MDBfcG9wczsKLQlwb3J0LT5saW5lPWk7Ci0JcG9ydC0+ZmxhZ3M9QVNZTkNfQk9PVF9BVVRPQ09ORjsKLQotCXJlc3VsdD11YXJ0X2FkZF9vbmVfcG9ydCgmdWFydDAwX3JlZywgcG9ydCk7Ci0JaWYocmVzdWx0KXsKLQkJcHJpbnRrKCJ1YXJ0X2FkZF9vbmVfcG9ydCByZXR1cm5lZCAlZFxuIixyZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlkZXZfcG9ydF9tYXBbaV0uYmFzZV9hZGRyPWRldl9pbmZvLT5iYXNlX2FkZHI7Ci0JZGV2X3BvcnRfbWFwW2ldLnBvcnQ9cG9ydDsKLQlwcmludGsoInVhcnQwMDogYWRkZWQgZGV2aWNlIGF0ICV4IGFzIHR0eVVBJWRcbiIsZGV2X3BvcnRfbWFwW2ldLmJhc2VfYWRkcixpKTsKLQlyZXR1cm4gMDsKLQotfQotCi1pbnQgdWFydDAwX3JlbW92ZV9kZXZpY2VzKHZvaWQpCi17Ci0JaW50IGkscmVzdWx0OwotCi0KLQlyZXN1bHQ9MDsKLQlmb3IoaT0xO2k8VUFSVF9OUjtpKyspewotCQlpZihkZXZfcG9ydF9tYXBbaV0uYmFzZV9hZGRyKXsKLQkJCXJlc3VsdD11YXJ0X3JlbW92ZV9vbmVfcG9ydCgmdWFydDAwX3JlZywgZGV2X3BvcnRfbWFwW2ldLnBvcnQpOwotCQkJaWYocmVzdWx0KQotCQkJCXJldHVybiByZXN1bHQ7Ci0KLQkJCS8qIHBvcnQgcmVtb3ZlZCBzdWNlc3NmdWxseSwgc28gbm93IHRpZHkgdXAgKi8KLQkJCWtmcmVlKGRldl9wb3J0X21hcFtpXS5wb3J0KTsKLQkJCWRldl9wb3J0X21hcFtpXS5iYXNlX2FkZHI9MDsKLQkJCWRldl9wb3J0X21hcFtpXS5wb3J0PU5VTEw7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci0KLX0KLQotc3RydWN0IHBsZF9ob3Rzd2FwX29wcyB1YXJ0MDBfcGxkaHNfb3BzPXsKLQkubmFtZQkJPSAidWFydDAwIiwKLQkuYWRkX2RldmljZQk9IHVhcnQwMF9hZGRfZGV2aWNlLAotCS5yZW1vdmVfZGV2aWNlcwk9IHVhcnQwMF9yZW1vdmVfZGV2aWNlcywKLX07Ci0KLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCB1YXJ0MDBfaW5pdCh2b2lkKQotewotCWludCByZXN1bHQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IFVBUlQwMCBkcml2ZXIgJFJldmlzaW9uOiAxLjM1ICRcbiIpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAic2VyaWFsX3VhcnQwMDpVc2luZyB0ZW1wb3JhcnkgbWFqb3IvbWlub3IgcGFpcnMiCi0JCSIgLSB0aGVzZSBXSUxMIGNoYW5nZSBpbiB0aGUgZnV0dXJlXG4iKTsKLQotCXJlc3VsdCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZ1YXJ0MDBfcmVnKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwotI2lmZGVmIENPTkZJR19BUkNIX0NBTUVMT1QKLQlyZXN1bHQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmdWFydDAwX3JlZywmZXB4YTEwZGJfcG9ydCk7Ci0jZW5kaWYKLQlpZiAocmVzdWx0KQotCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZ1YXJ0MDBfcmVnKTsKLQotI2lmZGVmICBDT05GSUdfUExEX0hPVFNXQVAKLQlwbGRoc19yZWdpc3Rlcl9kcml2ZXIoJnVhcnQwMF9wbGRoc19vcHMpOwotI2VuZGlmCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotX19pbml0Y2FsbCh1YXJ0MDBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKaW5kZXggYTkzMDBmOS4uNTVhMzUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IDJlYTEzNTQuLjA4N2U1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTE3OCw3ICsxNzgsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hc3NhYmV0Lmg+CkBAIC0xNDU1LDcgKzE0NTQsMTEgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNhMTEwMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaTsKLQlpbnQgcmV0OworCWludCByZXQsIGlycTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKDB4YjAxMDAwMDAsIDB4MTAwMDAsICJMQ0QiKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE0NzAsNyArMTQ3Myw3IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfTENELCBzYTExMDBmYl9oYW5kbGVfaXJxLCBTQV9JTlRFUlJVUFQsCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBzYTExMDBmYl9oYW5kbGVfaXJxLCBTQV9JTlRFUlJVUFQsCiAJCQkgICJMQ0QiLCBmYmkpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzYTExMDBmYjogcmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0KTsKQEAgLTE0OTIsNyArMTQ5NSw3IEBACiAKIAlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5mYik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZmFpbGVkOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCWZiaS0+ZnJlcV90cmFuc2l0aW9uLm5vdGlmaWVyX2NhbGwgPSBzYTExMDBmYl9mcmVxX3RyYW5zaXRpb247CkBAIC0xNTA0LDcgKzE1MDcsOSBAQAogCS8qIFRoaXMgZHJpdmVyIGNhbm5vdCBiZSB1bmxvYWRlZCBhdCB0aGUgbW9tZW50ICovCiAJcmV0dXJuIDA7CiAKLWZhaWxlZDoKKyBlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXJxLCBmYmkpOworIGZhaWxlZDoKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShmYmkpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbigweGIwMTAwMDAwLCAweDEwMDAwKTsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZyBiL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZwppbmRleCBlMjI3YTA0Li43NDkwY2M5IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL0tjb25maWcKKysrIGIvZnMvcGFydGl0aW9ucy9LY29uZmlnCkBAIC0yMSwyNiArMjEsMzAgQEAKIAkgIFN1cHBvcnQgaGFyZCBkaXNrcyBwYXJ0aXRpb25lZCB1bmRlciBBY29ybiBvcGVyYXRpbmcgc3lzdGVtcy4KIAogY29uZmlnIEFDT1JOX1BBUlRJVElPTl9DVU1BTkEKLQlib29sICJDdW1hbmEgcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRCAmJiBBQ09STl9QQVJUSVRJT04KKwlib29sICJDdW1hbmEgcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRAogCWRlZmF1bHQgeSBpZiBBUkNIX0FDT1JOCisJZGVwZW5kcyBvbiBBQ09STl9QQVJUSVRJT04KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoCiAJICB3ZXJlIHBhcnRpdGlvbmVkIHVzaW5nIHRoZSBDdW1hbmEgaW50ZXJmYWNlIG9uIEFjb3JuIG1hY2hpbmVzLgogCiBjb25maWcgQUNPUk5fUEFSVElUSU9OX0VFU09YCi0JYm9vbCAiRUVTT1ggcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRCAmJiBBQ09STl9QQVJUSVRJT04KKwlib29sICJFRVNPWCBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VECiAJZGVmYXVsdCB5IGlmIEFSQ0hfQUNPUk4KKwlkZXBlbmRzIG9uIEFDT1JOX1BBUlRJVElPTgogCiBjb25maWcgQUNPUk5fUEFSVElUSU9OX0lDUwotCWJvb2wgIklDUyBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEICYmIEFDT1JOX1BBUlRJVElPTgorCWJvb2wgIklDUyBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VECiAJZGVmYXVsdCB5IGlmIEFSQ0hfQUNPUk4KKwlkZXBlbmRzIG9uIEFDT1JOX1BBUlRJVElPTgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2gKIAkgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgdGhlIElDUyBpbnRlcmZhY2Ugb24gQWNvcm4gbWFjaGluZXMuCiAKIGNvbmZpZyBBQ09STl9QQVJUSVRJT05fQURGUwotCWJvb2wgIk5hdGl2ZSBmaWxlY29yZSBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEICYmIEFDT1JOX1BBUlRJVElPTgorCWJvb2wgIk5hdGl2ZSBmaWxlY29yZSBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VECiAJZGVmYXVsdCB5IGlmIEFSQ0hfQUNPUk4KKwlkZXBlbmRzIG9uIEFDT1JOX1BBUlRJVElPTgogCWhlbHAKIAkgIFRoZSBBY29ybiBEaXNjIEZpbGluZyBTeXN0ZW0gaXMgdGhlIHN0YW5kYXJkIGZpbGUgc3lzdGVtIG9mIHRoZQogCSAgUmlzY09TIG9wZXJhdGluZyBzeXN0ZW0gd2hpY2ggcnVucyBvbiBBY29ybidzIEFSTS1iYXNlZCBSaXNjIFBDCkBAIC00OCwxNSArNTIsMTcgQEAKIAkgIGBZJyBoZXJlLCBMaW51eCB3aWxsIHN1cHBvcnQgZGlzayBwYXJ0aXRpb25zIGNyZWF0ZWQgdW5kZXIgQURGUy4KIAogY29uZmlnIEFDT1JOX1BBUlRJVElPTl9QT1dFUlRFQwotCWJvb2wgIlBvd2VyVGVjIHBhcnRpdGlvbiBzdXBwb3J0IiBpZiBQQVJUSVRJT05fQURWQU5DRUQgJiYgQUNPUk5fUEFSVElUSU9OCisJYm9vbCAiUG93ZXJUZWMgcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRAogCWRlZmF1bHQgeSBpZiBBUkNIX0FDT1JOCisJZGVwZW5kcyBvbiBBQ09STl9QQVJUSVRJT04KIAloZWxwCiAJICBTdXBwb3J0IHJlYWRpbmcgcGFydGl0aW9uIHRhYmxlcyBjcmVhdGVkIG9uIEFjb3JuIG1hY2hpbmVzIHVzaW5nCiAJICB0aGUgUG93ZXJUZWMgU0NTSSBkcml2ZS4KIAogY29uZmlnIEFDT1JOX1BBUlRJVElPTl9SSVNDSVgKLQlib29sICJSSVNDaVggcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRCAmJiBBQ09STl9QQVJUSVRJT04KKwlib29sICJSSVNDaVggcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRAogCWRlZmF1bHQgeSBpZiBBUkNIX0FDT1JOCisJZGVwZW5kcyBvbiBBQ09STl9QQVJUSVRJT04KIAloZWxwCiAJICBPbmNlIHVwb24gYSB0aW1lLCB0aGVyZSB3YXMgYSBuYXRpdmUgVW5peCBwb3J0IGZvciB0aGUgQWNvcm4gc2VyaWVzCiAJICBvZiBtYWNoaW5lcyBjYWxsZWQgUklTQ2lYLiAgSWYgeW91IHNheSAnWScgaGVyZSwgTGludXggd2lsbCBiZSBhYmxlCkBAIC0yMjQsNSArMjMwLDMgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2gKIAkgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgRUZJIEdQVC4gIFByZXNlbnRseSBvbmx5IHVzZWZ1bCBvbiB0aGUKIAkgIElBLTY0IHBsYXRmb3JtLgotCi0jICAgICAgZGVmaW5lX2Jvb2wgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9DVU1BTkEgeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGY0MDkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKKyAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQorICoKKyAqIENvbW1vbiBkZWZpbml0aW9ucy4KKyAqIEJhc2VkIG9uIEFUOTFSTTkyMDAgZGF0YXNoZWV0IHJldmlzaW9uIEUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEFUOTFSTTkyMDBfSAorI2RlZmluZSBBVDkxUk05MjAwX0gKKworLyoKKyAqIFBlcmlwaGVyYWwgaWRlbnRpZmllcnMvaW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBBVDkxX0lEX0ZJUQkwCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCisjZGVmaW5lIEFUOTFfSURfU1lTCTEJLyogU3lzdGVtIFBlcmlwaGVyYWwgKi8KKyNkZWZpbmUgQVQ5MV9JRF9QSU9BCTIJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCisjZGVmaW5lIEFUOTFfSURfUElPQgkzCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLworI2RlZmluZSBBVDkxX0lEX1BJT0MJNAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKyNkZWZpbmUgQVQ5MV9JRF9QSU9ECTUJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEICovCisjZGVmaW5lIEFUOTFfSURfVVMwCTYJLyogVVNBUlQgMCAqLworI2RlZmluZSBBVDkxX0lEX1VTMQk3CS8qIFVTQVJUIDEgKi8KKyNkZWZpbmUgQVQ5MV9JRF9VUzIJOAkvKiBVU0FSVCAyICovCisjZGVmaW5lIEFUOTFfSURfVVMzCTkJLyogVVNBUlQgMyAqLworI2RlZmluZSBBVDkxX0lEX01DSQkxMAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUOTFfSURfVURQCTExCS8qIFVTQiBEZXZpY2UgUG9ydCAqLworI2RlZmluZSBBVDkxX0lEX1RXSQkxMgkvKiBUd28tV2lyZSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ5MV9JRF9TUEkJMTMJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUOTFfSURfU1NDMAkxNAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisjZGVmaW5lIEFUOTFfSURfU1NDMQkxNQkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCisjZGVmaW5lIEFUOTFfSURfU1NDMgkxNgkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAyICovCisjZGVmaW5lIEFUOTFfSURfVEMwCTE3CS8qIFRpbWVyIENvdW50ZXIgMCAqLworI2RlZmluZSBBVDkxX0lEX1RDMQkxOAkvKiBUaW1lciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgQVQ5MV9JRF9UQzIJMTkJLyogVGltZXIgQ291bnRlciAyICovCisjZGVmaW5lIEFUOTFfSURfVEMzCTIwCS8qIFRpbWVyIENvdW50ZXIgMyAqLworI2RlZmluZSBBVDkxX0lEX1RDNAkyMQkvKiBUaW1lciBDb3VudGVyIDQgKi8KKyNkZWZpbmUgQVQ5MV9JRF9UQzUJMjIJLyogVGltZXIgQ291bnRlciA1ICovCisjZGVmaW5lIEFUOTFfSURfVUhQCTIzCS8qIFVTQiBIb3N0IHBvcnQgKi8KKyNkZWZpbmUgQVQ5MV9JRF9FTUFDCTI0CS8qIEV0aGVybmV0IE1BQyAqLworI2RlZmluZSBBVDkxX0lEX0lSUTAJMjUJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCisjZGVmaW5lIEFUOTFfSURfSVJRMQkyNgkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMSkgKi8KKyNkZWZpbmUgQVQ5MV9JRF9JUlEyCTI3CS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEyKSAqLworI2RlZmluZSBBVDkxX0lEX0lSUTMJMjgJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTMpICovCisjZGVmaW5lIEFUOTFfSURfSVJRNAkyOQkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRNCkgKi8KKyNkZWZpbmUgQVQ5MV9JRF9JUlE1CTMwCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlE1KSAqLworI2RlZmluZSBBVDkxX0lEX0lSUTYJMzEJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTYpICovCisKKworLyoKKyAqIFBlcmlwaGVyYWwgcGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMuCisgKi8KKyNkZWZpbmUgQVQ5MV9CQVNFX1RDQjAJCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1RDMAkJMHhmZmZhMDAwMAorI2RlZmluZSBBVDkxX0JBU0VfVEMxCQkweGZmZmEwMDQwCisjZGVmaW5lIEFUOTFfQkFTRV9UQzIJCTB4ZmZmYTAwODAKKyNkZWZpbmUgQVQ5MV9CQVNFX1RDQjEJCTB4ZmZmYTQwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1RDMwkJMHhmZmZhNDAwMAorI2RlZmluZSBBVDkxX0JBU0VfVEM0CQkweGZmZmE0MDQwCisjZGVmaW5lIEFUOTFfQkFTRV9UQzUJCTB4ZmZmYTQwODAKKyNkZWZpbmUgQVQ5MV9CQVNFX1VEUAkJMHhmZmZiMDAwMAorI2RlZmluZSBBVDkxX0JBU0VfTUNJCQkweGZmZmI0MDAwCisjZGVmaW5lIEFUOTFfQkFTRV9UV0kJCTB4ZmZmYjgwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX0VNQUMJCTB4ZmZmYmMwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1VTMAkJMHhmZmZjMDAwMAorI2RlZmluZSBBVDkxX0JBU0VfVVMxCQkweGZmZmM0MDAwCisjZGVmaW5lIEFUOTFfQkFTRV9VUzIJCTB4ZmZmYzgwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1VTMwkJMHhmZmZjYzAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1NDMAkJMHhmZmZkMDAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1NDMQkJMHhmZmZkNDAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1NDMgkJMHhmZmZkODAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1BJCQkweGZmZmUwMDAwCisjZGVmaW5lIEFUOTFfQkFTRV9TWVMJCTB4ZmZmZmYwMDAKKworCisvKgorICogUElPIHBpbiBkZWZpbml0aW9ucyAocGVyaXBoZXJhbCBBL0IgbXVsdGlwbGV4aW5nKS4KKyAqLworI2RlZmluZSBBVDkxX1BBMF9NSVNPCQkoMSA8PCAgMCkJLyogQTogU1BJIE1hc3Rlci1JbiBTbGF2ZS1PdXQgKi8KKyNkZWZpbmUgQVQ5MV9QQTBfUENLMwkJKDEgPDwgIDApCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMgKi8KKyNkZWZpbmUgQVQ5MV9QQTFfTU9TSQkJKDEgPDwgIDEpCS8qIEE6IFNQSSBNYXN0ZXItT3V0IFNsYXZlLUluICovCisjZGVmaW5lIEFUOTFfUEExX1BDSzAJCSgxIDw8ICAxKQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovCisjZGVmaW5lIEFUOTFfUEEyX1NQQ0sJCSgxIDw8ICAyKQkvKiBBOiBTUEkgU2VyaWFsIENsb2NrICovCisjZGVmaW5lIEFUOTFfUEEyX0lSUTQJCSgxIDw8ICAyKQkvKiBCOiBFeHRlcm5hbCBJbnRlcnJ1cHQgNCAqLworI2RlZmluZSBBVDkxX1BBM19OUENTMAkJKDEgPDwgIDMpCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTNfSVJRNQkJKDEgPDwgIDMpCS8qIEI6IEV4dGVybmFsIEludGVycnVwdCA1ICovCisjZGVmaW5lIEFUOTFfUEE0X05QQ1MxCQkoMSA8PCAgNCkJLyogQTogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLworI2RlZmluZSBBVDkxX1BBNF9QQ0sxCQkoMSA8PCAgNCkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLworI2RlZmluZSBBVDkxX1BBNV9OUENTMgkJKDEgPDwgIDUpCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8KKyNkZWZpbmUgQVQ5MV9QQTVfVFhEMwkJKDEgPDwgIDUpCS8qIEI6IFVTQVJUIFRyYW5zbWl0IERhdGEgMyAqLworI2RlZmluZSBBVDkxX1BBNl9OUENTMwkJKDEgPDwgIDYpCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8KKyNkZWZpbmUgQVQ5MV9QQTZfUlhEMwkJKDEgPDwgIDYpCS8qIEI6IFVTQVJUIFJlY2VpdmUgRGF0YSAzICovCisjZGVmaW5lIEFUOTFfUEE3X0VUWENLX0VSRUZDSwkoMSA8PCAgNykJLyogQTogRXRoZXJuZXQgUmVmZXJlbmNlIENsb2NrIC8gVHJhbnNtaXQgQ2xvY2sgKi8KKyNkZWZpbmUgQVQ5MV9QQTdfUENLMgkJKDEgPDwgIDcpCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8KKyNkZWZpbmUgQVQ5MV9QQThfRVRYRU4JCSgxIDw8ICA4KQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9QQThfTUNDREIJCSgxIDw8ICA4KQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEIgQ29tbWFuZCAqLworI2RlZmluZSBBVDkxX1BBOV9FVFgwCQkoMSA8PCAgOSkJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAwICovCisjZGVmaW5lIEFUOTFfUEE5X01DREIwCQkoMSA8PCAgOSkJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBCIERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BBMTBfRVRYMQkJKDEgPDwgMTApCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMSAqLworI2RlZmluZSBBVDkxX1BBMTBfTUNEQjEJCSgxIDw8IDEwKQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEIgRGF0YSAxICovCisjZGVmaW5lIEFUOTFfUEExMV9FQ1JTX0VDUlNEVgkoMSA8PCAxMSkJLyogQTogRXRoZXJuZXQgQ2FycmllciBTZW5zZSAvIERhdGEgVmFsaWQgKi8KKyNkZWZpbmUgQVQ5MV9QQTExX01DREIyCQkoMSA8PCAxMSkJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBCIERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BBMTJfRVJYMAkJKDEgPDwgMTIpCS8qIEE6IEV0aGVybmV0IFJlY2VpdmUgRGF0YSAwICovCisjZGVmaW5lIEFUOTFfUEExMl9NQ0RCMwkJKDEgPDwgMTIpCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQiBEYXRhIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQTEzX0VSWDEJCSgxIDw8IDEzKQkvKiBBOiBFdGhlcm5ldCBSZWNlaXZlIERhdGEgMSAqLworI2RlZmluZSBBVDkxX1BBMTNfVENMSzAJCSgxIDw8IDEzKQkvKiBCOiBUQyBFeHRlcm5hbCBDbG9jayBJbnB1dCAwICovCisjZGVmaW5lIEFUOTFfUEExNF9FUlhFUgkJKDEgPDwgMTQpCS8qIEE6IEV0aGVybmV0IFJlY2VpdmUgRXJyb3IgKi8KKyNkZWZpbmUgQVQ5MV9QQTE0X1RDTEsxCQkoMSA8PCAxNCkJLyogQjogVEMgRXh0ZXJuYWwgQ2xvY2sgSW5wdXQgMSAqLworI2RlZmluZSBBVDkxX1BBMTVfRU1EQwkJKDEgPDwgMTUpCS8qIEE6IEV0aGVybmV0IE1hbmFnZW1lbnQgRGF0YSBDbG9jayAqLworI2RlZmluZSBBVDkxX1BBMTVfVENMSzIJCSgxIDw8IDE1KQkvKiBCOiBUQyBFeHRlcm5hbCBDbG9jayBJbnB1dCAyICovCisjZGVmaW5lIEFUOTFfUEExNl9FTURJTwkJKDEgPDwgMTYpCS8qIEE6IEV0aGVybmV0IE1hbmFnZW1lbnQgRGF0YSBJL08gKi8KKyNkZWZpbmUgQVQ5MV9QQTE2X0lSUTYJCSgxIDw8IDE2KQkvKiBCOiBFeHRlcm5hbCBJbnRlcnJ1cHQgNiAqLworI2RlZmluZSBBVDkxX1BBMTdfVFhEMAkJKDEgPDwgMTcpCS8qIEE6IFVTQVJUIFRyYW5zbWl0IERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BBMTdfVElPQTAJCSgxIDw8IDE3KQkvKiBCOiBUQyBJL08gTGluZSBBIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTE4X1JYRDAJCSgxIDw8IDE4KQkvKiBBOiBVU0FSVCBSZWNlaXZlIERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BBMThfVElPQjAJCSgxIDw8IDE4KQkvKiBCOiBUQyBJL08gTGluZSBCIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTE5X1NDSzAJCSgxIDw8IDE5KQkvKiBBOiBVU0FSVCBTZXJpYWwgQ2xvY2sgMCAqLworI2RlZmluZSBBVDkxX1BBMTlfVElPQTEJCSgxIDw8IDE5KQkvKiBCOiBUQyBJL08gTGluZSBBIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQTIwX0NUUzAJCSgxIDw8IDIwKQkvKiBBOiBVU0FSVCBDbGVhciBUbyBTZW5kIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTIwX1RJT0IxCQkoMSA8PCAyMCkJLyogQjogVEMgSS9PIExpbmUgQiAxICovCisjZGVmaW5lIEFUOTFfUEEyMV9SVFMwCQkoMSA8PCAyMSkJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAwICovCisjZGVmaW5lIEFUOTFfUEEyMV9USU9BMgkJKDEgPDwgMjEpCS8qIEI6IFRDIEkvTyBMaW5lIEEgMiAqLworI2RlZmluZSBBVDkxX1BBMjJfUlhEMgkJKDEgPDwgMjIpCS8qIEE6IFVTQVJUIFJlY2VpdmUgRGF0YSAyICovCisjZGVmaW5lIEFUOTFfUEEyMl9USU9CMgkJKDEgPDwgMjIpCS8qIEI6IFRDIEkvTyBMaW5lIEIgMiAqLworI2RlZmluZSBBVDkxX1BBMjNfVFhEMgkJKDEgPDwgMjMpCS8qIEE6IFVTQVJUIFRyYW5zbWl0IERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BBMjNfSVJRMwkJKDEgPDwgMjMpCS8qIEI6IEV4dGVybmFsIEludGVycnVwdCAzICovCisjZGVmaW5lIEFUOTFfUEEyNF9TQ0syCQkoMSA8PCAyNCkJLyogQTogVVNBUlQgU2VyaWFsIENsb2NrIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQTI0X1BDSzEJCSgxIDw8IDI0KQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovCisjZGVmaW5lIEFUOTFfUEEyNV9UV0QJCSgxIDw8IDI1KQkvKiBBOiBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGEgKi8KKyNkZWZpbmUgQVQ5MV9QQTI1X0lSUTIJCSgxIDw8IDI1KQkvKiBCOiBFeHRlcm5hbCBJbnRlcnJ1cHQgMiAqLworI2RlZmluZSBBVDkxX1BBMjZfVFdDSwkJKDEgPDwgMjYpCS8qIEE6IFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sgKi8KKyNkZWZpbmUgQVQ5MV9QQTI2X0lSUTEJCSgxIDw8IDI2KQkvKiBCOiBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLworI2RlZmluZSBBVDkxX1BBMjdfTUNDSwkJKDEgPDwgMjcpCS8qIEE6IE1NQyBNdWx0aW1lZGlhIENhcmQgQ2xvY2sgKi8KKyNkZWZpbmUgQVQ5MV9QQTI3X1RDTEszCQkoMSA8PCAyNykJLyogQjogVEMgRXh0ZXJuYWwgQ2xvY2sgSW5wdXQgMyAqLworI2RlZmluZSBBVDkxX1BBMjhfTUNDREEJCSgxIDw8IDI4KQkvKiBBOiBNTUMgTXVsdGltZWRpYSBDYXJkIEEgQ29tbWFuZCAqLworI2RlZmluZSBBVDkxX1BBMjhfVENMSzQJCSgxIDw8IDI4KQkvKiBCOiBUQyBFeHRlcm5hbCBDbG9jayBJbnB1dCA0ICovCisjZGVmaW5lIEFUOTFfUEEyOV9NQ0RBMAkJKDEgPDwgMjkpCS8qIEE6IE1NQyBNdWx0aW1lZGlhIENhcmQgQSBEYXRhIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTI5X1RDTEs1CQkoMSA8PCAyOSkJLyogQjogVEMgRXh0ZXJuYWwgQ2xvY2sgSW5wdXQgNSAqLworI2RlZmluZSBBVDkxX1BBMzBfRFJYRAkJKDEgPDwgMzApCS8qIEE6IERCR1UgUmVjZWl2ZSBEYXRhICovCisjZGVmaW5lIEFUOTFfUEEzMF9DVFMyCQkoMSA8PCAzMCkJLyogQjogVVNBUlQgQ2xlYXIgVG8gU2VuZCAyICovCisjZGVmaW5lIEFUOTFfUEEzMV9EVFhECQkoMSA8PCAzMSkJLyogQTogREJHVSBUcmFuc21pdCBEYXRhICovCisjZGVmaW5lIEFUOTFfUEEzMV9SVFMyCQkoMSA8PCAzMSkJLyogQjogVVNBUlQgUmVhZHkgVG8gU2VuZCAyICovCisKKyNkZWZpbmUgQVQ5MV9QQjBfVEYwCQkoMSA8PCAgMCkJLyogQTogU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMgMCAqLworI2RlZmluZSBBVDkxX1BCMF9SVFMzCQkoMSA8PCAgMCkJLyogQjogVVNBUlQgUmVhZHkgVG8gU2VuZCAzICovCisjZGVmaW5lIEFUOTFfUEIxX1RLMAkJKDEgPDwgIDEpCS8qIEE6IFNTQyBUcmFuc21pdCBDbG9jayAwICovCisjZGVmaW5lIEFUOTFfUEIxX0NUUzMJCSgxIDw8ICAxKQkvKiBCOiBVU0FSVCBDbGVhciBUbyBTZW5kIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQjJfVEQwCQkoMSA8PCAgMikJLyogQTogU1NDIFRyYW5zbWl0IERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BCMl9TQ0szCQkoMSA8PCAgMikJLyogQjogVVNBUlQgU2VyaWFsIENsb2NrIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQjNfUkQwCQkoMSA8PCAgMykJLyogQTogU1NDIFJlY2VpdmUgRGF0YSAwICovCisjZGVmaW5lIEFUOTFfUEIzX01DREExCQkoMSA8PCAgMykJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBBIERhdGEgMSAqLworI2RlZmluZSBBVDkxX1BCNF9SSzAJCSgxIDw8ICA0KQkvKiBBOiBTU0MgUmVjZWl2ZSBDbG9jayAwICovCisjZGVmaW5lIEFUOTFfUEI0X01DREEyCQkoMSA8PCAgNCkJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBBIERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BCNV9SRjAJCSgxIDw8ICA1KQkvKiBBOiBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQjVfTUNEQTMJCSgxIDw8ICA1KQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEEgRGF0YSAzICovCisjZGVmaW5lIEFUOTFfUEI2X1RGMQkJKDEgPDwgIDYpCS8qIEE6IFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjZfVElPQTMJCSgxIDw8ICA2KQkvKiBCOiBUQyBJL08gTGluZSBBIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQjdfVEsxCQkoMSA8PCAgNykJLyogQTogU1NDIFRyYW5zbWl0IENsb2NrIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjdfVElPQjMJCSgxIDw8ICA3KQkvKiBCOiBUQyBJL08gTGluZSBCIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQjhfVEQxCQkoMSA8PCAgOCkJLyogQTogU1NDIFRyYW5zbWl0IERhdGEgMSAqLworI2RlZmluZSBBVDkxX1BCOF9USU9BNAkJKDEgPDwgIDgpCS8qIEI6IFRDIEkvTyBMaW5lIEEgNCAqLworI2RlZmluZSBBVDkxX1BCOV9SRDEJCSgxIDw8ICA5KQkvKiBBOiBTU0MgUmVjZWl2ZSBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjlfVElPQjQJCSgxIDw8ICA5KQkvKiBCOiBUQyBJL08gTGluZSBCIDQgKi8KKyNkZWZpbmUgQVQ5MV9QQjEwX1JLMQkJKDEgPDwgMTApCS8qIEE6IFNTQyBSZWNlaXZlIENsb2NrIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjEwX1RJT0E1CQkoMSA8PCAxMCkJLyogQjogVEMgSS9PIExpbmUgQSA1ICovCisjZGVmaW5lIEFUOTFfUEIxMV9SRjEJCSgxIDw8IDExKQkvKiBBOiBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjExX1RJT0I1CQkoMSA8PCAxMSkJLyogQjogVEMgSS9PIExpbmUgQiA1ICovCisjZGVmaW5lIEFUOTFfUEIxMl9URjIJCSgxIDw8IDEyKQkvKiBBOiBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYyAyICovCisjZGVmaW5lIEFUOTFfUEIxMl9FVFgyCQkoMSA8PCAxMikJLyogQjogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAyICovCisjZGVmaW5lIEFUOTFfUEIxM19USzIJCSgxIDw8IDEzKQkvKiBBOiBTU0MgVHJhbnNtaXQgQ2xvY2sgMyAqLworI2RlZmluZSBBVDkxX1BCMTNfRVRYMwkJKDEgPDwgMTMpCS8qIEI6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMyAqLworI2RlZmluZSBBVDkxX1BCMTRfVEQyCQkoMSA8PCAxNCkJLyogQTogU1NDIFRyYW5zbWl0IERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BCMTRfRVRYRVIJCSgxIDw8IDE0KQkvKiBCOiBFdGhlcm5ldCBUcmFuc21pdCBDb2RpbmcgRXJyb3IgKi8KKyNkZWZpbmUgQVQ5MV9QQjE1X1JEMgkJKDEgPDwgMTUpCS8qIEE6IFNTQyBSZWNlaXZlIERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BCMTVfRVJYMgkJKDEgPDwgMTUpCS8qIEI6IEV0aGVybmV0IFJlY2VpdmUgRGF0YSAyICovCisjZGVmaW5lIEFUOTFfUEIxNl9SSzIJCSgxIDw8IDE2KQkvKiBBOiBTU0MgUmVjZWl2ZSBDbG9jayAyICovCisjZGVmaW5lIEFUOTFfUEIxNl9FUlgzCQkoMSA8PCAxNikJLyogQjogRXRoZXJuZXQgUmVjZWl2ZSBEYXRhIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQjE3X1JGMgkJKDEgPDwgMTcpCS8qIEE6IFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMgMiAqLworI2RlZmluZSBBVDkxX1BCMTdfRVJYRFYJCSgxIDw8IDE3KQkvKiBCOiBFdGhlcm5ldCBSZWNlaXZlIERhdGEgVmFsaWQgKi8KKyNkZWZpbmUgQVQ5MV9QQjE4X1JJMQkJKDEgPDwgMTgpCS8qIEE6IFVTQVJUIFJpbmcgSW5kaWNhdG9yIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjE4X0VDT0wJCSgxIDw8IDE4KQkvKiBCOiBFdGhlcm5ldCBDb2xsaXNpb24gRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgQVQ5MV9QQjE5X0RUUjEJCSgxIDw8IDE5KQkvKiBBOiBVU0FSVCBEYXRhIFRlcm1pbmFsIFJlYWR5IDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjE5X0VSWENLCQkoMSA8PCAxOSkJLyogQjogRXRoZXJuZXQgUmVjZWl2ZSBDbG9jayAqLworI2RlZmluZSBBVDkxX1BCMjBfVFhEMQkJKDEgPDwgMjApCS8qIEE6IFVTQVJUIFRyYW5zbWl0IERhdGEgMSAqLworI2RlZmluZSBBVDkxX1BCMjFfUlhEMQkJKDEgPDwgMjEpCS8qIEE6IFVTQVJUIFJlY2VpdmUgRGF0YSAxICovCisjZGVmaW5lIEFUOTFfUEIyMl9TQ0sxCQkoMSA8PCAyMikJLyogQTogVVNBUlQgU2VyaWFsIENsb2NrIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjIzX0RDRDEJCSgxIDw8IDIzKQkvKiBBOiBVU0FSVCBEYXRhIENhcnJpZXIgRGV0ZWN0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjI0X0NUUzEJCSgxIDw8IDI0KQkvKiBBOiBVU0FSVCBDbGVhciBUbyBTZW5kIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjI1X0RTUjEJCSgxIDw8IDI1KQkvKiBBOiBVU0FSVCBEYXRhIFNldCBSZWFkeSAxICovCisjZGVmaW5lIEFUOTFfUEIyNV9FRjEwMAkJKDEgPDwgMjUpCS8qIEI6IEV0aGVybmV0IEZvcmNlIDEwMCBNYml0ICovCisjZGVmaW5lIEFUOTFfUEIyNl9SVFMxCQkoMSA8PCAyNikJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAxICovCisjZGVmaW5lIEFUOTFfUEIyN19QQ0swCQkoMSA8PCAyNykJLyogQjogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMCAqLworI2RlZmluZSBBVDkxX1BCMjhfRklRCQkoMSA8PCAyOCkJLyogQTogRmFzdCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQVQ5MV9QQjI5X0lSUTAJCSgxIDw8IDI5KQkvKiBBOiBFeHRlcm5hbCBJbnRlcnJ1cHQgMCAqLworCisjZGVmaW5lIEFUOTFfUEMwX0JGQ0sJCSgxIDw8ICAwKQkvKiBBOiBCdXJzdCBGbGFzaCBDbG9jayAqLworI2RlZmluZSBBVDkxX1BDMV9CRlJEWV9TTU9FCSgxIDw8ICAxKQkvKiBBOiBCdXJzdCBGbGFzaCBSZWFkeSAvIFNtYXJ0TWVkaWEgT3V0cHV0IEVuYWJsZSAqLworI2RlZmluZSBBVDkxX1BDMl9CRkFWRAkJKDEgPDwgIDIpCS8qIEE6IEJ1cnN0IEZsYXNoIEFkZHJlc3MgVmFsaWQgKi8KKyNkZWZpbmUgQVQ5MV9QQzNfQkZCQUFfU01XRQkoMSA8PCAgMykJLyogQTogQnVyc3QgRmxhc2ggQWRkcmVzcyBBZHZhbmNlIC8gU21hcnRNZWRpYSBXcml0ZSBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9QQzRfQkZPRQkJKDEgPDwgIDQpCS8qIEE6IEJ1cnN0IEZsYXNoIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9QQzVfQkZXRQkJKDEgPDwgIDUpCS8qIEE6IEJ1cnN0IEZsYXNoIFdyaXRlIEVuYWJsZSAqLworI2RlZmluZSBBVDkxX1BDNl9OV0FJVAkJKDEgPDwgIDYpCS8qIEE6IFNNQyBXYWl0IFNpZ25hbCAqLworI2RlZmluZSBBVDkxX1BDN19BMjMJCSgxIDw8ICA3KQkvKiBBOiBBZGRyZXNzIEJ1cyAyMyAqLworI2RlZmluZSBBVDkxX1BDOF9BMjQJCSgxIDw8ICA4KQkvKiBBOiBBZGRyZXNzIEJ1cyAyNCAqLworI2RlZmluZSBBVDkxX1BDOV9BMjVfQ0ZSTlcJKDEgPDwgIDkpCS8qIEE6IEFkZHJlc3MgQnVzIDI1IC8gQ29tcGFjdCBGbGFzaCBSZWFkIE5vdCBXcml0ZSAqLworI2RlZmluZSBBVDkxX1BDMTBfTkNTNF9DRkNTCSgxIDw8IDEwKQkvKiBBOiBTTUMgQ2hpcCBTZWxlY3QgNCAvIENvbXBhY3QgRmxhc2ggQ2hpcCBTZWxlY3QgKi8KKyNkZWZpbmUgQVQ5MV9QQzExX05DUzVfQ0ZDRTEJKDEgPDwgMTEpCS8qIEE6IFNNQyBDaGlwIFNlbGVjdCA1IC8gQ29tcGFjdCBGbGFzaCBDaGlwIEVuYWJsZSAxICovCisjZGVmaW5lIEFUOTFfUEMxMl9OQ1M2X0NGQ0UyCSgxIDw8IDEyKQkvKiBBOiBTTUMgQ2hpcCBTZWxlY3QgNiAvIENvbXBhY3QgRmxhc2ggQ2hpcCBFbmFibGUgMiAqLworI2RlZmluZSBBVDkxX1BDMTNfTkNTNwkJKDEgPDwgMTMpCS8qIEE6IENoaXAgU2VsZWN0IDcgKi8KKworI2RlZmluZSBBVDkxX1BEMF9FVFgwCQkoMSA8PCAgMCkJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAwICovCisjZGVmaW5lIEFUOTFfUEQxX0VUWDEJCSgxIDw8ICAxKQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDJfRVRYMgkJKDEgPDwgIDIpCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BEM19FVFgzCQkoMSA8PCAgMykJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAzICovCisjZGVmaW5lIEFUOTFfUEQ0X0VUWEVOCQkoMSA8PCAgNCkJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUEQ1X0VUWEVSCQkoMSA8PCAgNSkJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgQ29kaW5nIEVycm9yICovCisjZGVmaW5lIEFUOTFfUEQ2X0RUWEQJCSgxIDw8ICA2KQkvKiBBOiBEQkdVIFRyYW5zbWl0IERhdGEgKi8KKyNkZWZpbmUgQVQ5MV9QRDdfUENLMAkJKDEgPDwgIDcpCS8qIEE6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDAgKi8KKyNkZWZpbmUgQVQ5MV9QRDdfVFNZTkMJCSgxIDw8ICA3KQkvKiBCOiBFVE0gVHJhY2UgU3luY2hyb25pemF0aW9uIFNpZ25hbCAqLworI2RlZmluZSBBVDkxX1BEOF9QQ0sxCQkoMSA8PCAgOCkJLyogQTogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLworI2RlZmluZSBBVDkxX1BEOF9UQ0xLCQkoMSA8PCAgOCkJLyogQjogRVRNIFRyYWNlIENsb2NrICovCisjZGVmaW5lIEFUOTFfUEQ5X1BDSzIJCSgxIDw8ICA5KQkvKiBBOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyICovCisjZGVmaW5lIEFUOTFfUEQ5X1RQUzAJCSgxIDw8ICA5KQkvKiBCOiBFVE0gVHJhY2UgQVJNIFBpcGVsaW5lIFN0YXR1cyAwICovCisjZGVmaW5lIEFUOTFfUEQxMF9QQ0szCQkoMSA8PCAxMCkJLyogQTogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMyAqLworI2RlZmluZSBBVDkxX1BEMTBfVFBTMQkJKDEgPDwgMTApCS8qIEI6IEVUTSBUcmFjZSBBUk0gUGlwZWxpbmUgU3RhdHVzIDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDExX1RQUzIJCSgxIDw8IDExKQkvKiBCOiBFVE0gVHJhY2UgQVJNIFBpcGVsaW5lIFN0YXR1cyAyICovCisjZGVmaW5lIEFUOTFfUEQxMl9UUEswCQkoMSA8PCAxMikJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDAgKi8KKyNkZWZpbmUgQVQ5MV9QRDEzX1RQSzEJCSgxIDw8IDEzKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMSAqLworI2RlZmluZSBBVDkxX1BEMTRfVFBLMgkJKDEgPDwgMTQpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAyICovCisjZGVmaW5lIEFUOTFfUEQxNV9URDAJCSgxIDw8IDE1KQkvKiBBOiBTU0MgVHJhbnNtaXQgRGF0YSAwICovCisjZGVmaW5lIEFUOTFfUEQxNV9UUEszCQkoMSA8PCAxNSkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDMgKi8KKyNkZWZpbmUgQVQ5MV9QRDE2X1REMQkJKDEgPDwgMTYpCS8qIEE6IFNTQyBUcmFuc21pdCBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDE2X1RQSzQJCSgxIDw8IDE2KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgNCAqLworI2RlZmluZSBBVDkxX1BEMTdfVEQyCQkoMSA8PCAxNykJLyogQTogU1NDIFRyYW5zbWl0IERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BEMTdfVFBLNQkJKDEgPDwgMTcpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCA1ICovCisjZGVmaW5lIEFUOTFfUEQxOF9OUENTMQkJKDEgPDwgMTgpCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDE4X1RQSzYJCSgxIDw8IDE4KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgNiAqLworI2RlZmluZSBBVDkxX1BEMTlfTlBDUzIJCSgxIDw8IDE5KQkvKiBBOiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovCisjZGVmaW5lIEFUOTFfUEQxOV9UUEs3CQkoMSA8PCAxOSkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDcgKi8KKyNkZWZpbmUgQVQ5MV9QRDIwX05QQ1MzCQkoMSA8PCAyMCkJLyogQTogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLworI2RlZmluZSBBVDkxX1BEMjBfVFBLOAkJKDEgPDwgMjApCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCA4ICovCisjZGVmaW5lIEFUOTFfUEQyMV9SVFMwCQkoMSA8PCAyMSkgIAkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDAgKi8KKyNkZWZpbmUgQVQ5MV9QRDIxX1RQSzkJCSgxIDw8IDIxKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgOSAqLworI2RlZmluZSBBVDkxX1BEMjJfUlRTMQkJKDEgPDwgMjIpCS8qIEE6IFVTQVJUIFJlYWR5IFRvIFNlbmQgMSAqLworI2RlZmluZSBBVDkxX1BEMjJfVFBLMTAJCSgxIDw8IDIyKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMTAgKi8KKyNkZWZpbmUgQVQ5MV9QRDIzX1JUUzIJCSgxIDw8IDIzKQkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDIgKi8KKyNkZWZpbmUgQVQ5MV9QRDIzX1RQSzExCQkoMSA8PCAyMykJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDExICovCisjZGVmaW5lIEFUOTFfUEQyNF9SVFMzCQkoMSA8PCAyNCkJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAzICovCisjZGVmaW5lIEFUOTFfUEQyNF9UUEsxMgkJKDEgPDwgMjQpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxMiAqLworI2RlZmluZSBBVDkxX1BEMjVfRFRSMQkJKDEgPDwgMjUpCS8qIEE6IFVTQVJUIERhdGEgVGVybWluYWwgUmVhZHkgMSAqLworI2RlZmluZSBBVDkxX1BEMjVfVFBLMTMJCSgxIDw8IDI1KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMTMgKi8KKyNkZWZpbmUgQVQ5MV9QRDI2X1RQSzE0CQkoMSA8PCAyNikJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDE0ICovCisjZGVmaW5lIEFUOTFfUEQyN19UUEsxNQkJKDEgPDwgMjcpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxNSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9zeXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9zeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmZmZmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX3N5cy5oCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX3N5cy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQorICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCisgKgorICogU3lzdGVtIHBlcmlwaGVyYWxzIHJlZ2lzdGVycy4KKyAqIEJhc2VkIG9uIEFUOTFSTTkyMDAgZGF0YXNoZWV0IHJldmlzaW9uIEUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEFUOTFSTTkyMDBfU1lTX0gKKyNkZWZpbmUgQVQ5MVJNOTIwMF9TWVNfSAorCisvKgorICogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIuCisgKi8KKyNkZWZpbmUgQVQ5MV9BSUMJMHgwMDAKKworI2RlZmluZSBBVDkxX0FJQ19TTVIobikJCShBVDkxX0FJQyArICgobikgKiA0KSkJLyogU291cmNlIE1vZGUgUmVnaXN0ZXJzIDAtMzEgKi8KKyNkZWZpbmUJCUFUOTFfQUlDX1BSSU9SCQkoNyA8PCAwKQkJLyogUHJpb3JpdHkgTGV2ZWwgKi8KKyNkZWZpbmUJCUFUOTFfQUlDX1NSQ1RZUEUJKDMgPDwgNSkJCS8qIEludGVycnVwdCBTb3VyY2UgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfTE9XCQkoMCA8PCA1KQorI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORwkoMSA8PCA1KQorI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfSElHSAkJKDIgPDwgNSkKKyNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX1JJU0lORwkJKDMgPDwgNSkKKworI2RlZmluZSBBVDkxX0FJQ19TVlIobikJCShBVDkxX0FJQyArIDB4ODAgKyAoKG4pICogNCkpCS8qIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXJzIDAtMzEgKi8KKyNkZWZpbmUgQVQ5MV9BSUNfSVZSCQkoQVQ5MV9BSUMgKyAweDEwMCkJLyogSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FJQ19GVlIJCShBVDkxX0FJQyArIDB4MTA0KQkvKiBGYXN0IEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9BSUNfSVNSCQkoQVQ5MV9BSUMgKyAweDEwOCkJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9BSUNfSVJRSUQJCSgweDFmIDw8IDApCQkvKiBDdXJyZW50IEludGVycnVwdCBJZGVudGlmaWVyICovCisKKyNkZWZpbmUgQVQ5MV9BSUNfSVBSCQkoQVQ5MV9BSUMgKyAweDEwYykJLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9BSUNfSU1SCQkoQVQ5MV9BSUMgKyAweDExMCkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9BSUNfQ0lTUgkJKEFUOTFfQUlDICsgMHgxMTQpCS8qIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9BSUNfTkZJUQkJKDEgPDwgMCkJCS8qIG5GSVEgU3RhdHVzICovCisjZGVmaW5lCQlBVDkxX0FJQ19OSVJRCQkoMSA8PCAxKQkJLyogbklSUSBTdGF0dXMgKi8KKworI2RlZmluZSBBVDkxX0FJQ19JRUNSCQkoQVQ5MV9BSUMgKyAweDEyMCkJLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX0lEQ1IJCShBVDkxX0FJQyArIDB4MTI0KQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX0lDQ1IJCShBVDkxX0FJQyArIDB4MTI4KQkvKiBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FJQ19JU0NSCQkoQVQ5MV9BSUMgKyAweDEyYykJLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX0VPSUNSCQkoQVQ5MV9BSUMgKyAweDEzMCkJLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX1NQVQkJKEFUOTFfQUlDICsgMHgxMzQpCS8qIFNwdXJpb3VzIEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9BSUNfRENSCQkoQVQ5MV9BSUMgKyAweDEzOCkJLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9BSUNfRENSX1BST1QJKDEgPDwgMCkJCS8qIFByb3RlY3Rpb24gTW9kZSAqLworI2RlZmluZQkJQVQ5MV9BSUNfRENSX0dNU0sJKDEgPDwgMSkJCS8qIEdlbmVyYWwgTWFzayAqLworCisKKy8qCisgKiBEZWJ1ZyBVbml0LgorICovCisjZGVmaW5lIEFUOTFfREJHVQkweDIwMAorCisjZGVmaW5lIEFUOTFfREJHVV9DUgkJKEFUOTFfREJHVSArIDB4MDApCS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX01SCQkoQVQ5MV9EQkdVICsgMHgwNCkJLyogTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0RCR1VfSUVSCQkoQVQ5MV9EQkdVICsgMHgwOCkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9EQkdVX1RYUkRZCQkoMSA8PCAxKQkJLyogVHJhbnNtaXR0ZXIgUmVhZHkgKi8KKyNkZWZpbmUJCUFUOTFfREJHVV9UWEVNUFRZCSgxIDw8IDkpCQkvKiBUcmFuc21pdHRlciBFbXB0eSAqLworI2RlZmluZSBBVDkxX0RCR1VfSURSCQkoQVQ5MV9EQkdVICsgMHgwYykJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX0lNUgkJKEFUOTFfREJHVSArIDB4MTApCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfREJHVV9TUgkJKEFUOTFfREJHVSArIDB4MTQpCS8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0RCR1VfUkhSCQkoQVQ5MV9EQkdVICsgMHgxOCkJLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0RCR1VfVEhSCQkoQVQ5MV9EQkdVICsgMHgxYykJLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0RCR1VfQlJHUgkJKEFUOTFfREJHVSArIDB4MjApCS8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX0NJRFIJCShBVDkxX0RCR1UgKyAweDQwKQkvKiBDaGlwIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfREJHVV9FWElECQkoQVQ5MV9EQkdVICsgMHg0NCkJLyogQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXIgKi8KKworCisvKgorICogUElPIENvbnRyb2xsZXJzLgorICovCisjZGVmaW5lIEFUOTFfUElPQQkweDQwMAorI2RlZmluZSBBVDkxX1BJT0IJMHg2MDAKKyNkZWZpbmUgQVQ5MV9QSU9DCTB4ODAwCisjZGVmaW5lIEFUOTFfUElPRAkweGEwMAorCisjZGVmaW5lIFBJT19QRVIJCTB4MDAJLyogRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19QRFIJCTB4MDQJLyogRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fUFNSCQkweDA4CS8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fT0VSCQkweDEwCS8qIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX09EUgkJMHgxNAkvKiBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fT1NSCQkweDE4CS8qIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX0lGRVIJMHgyMAkvKiBHbGl0Y2ggSW5wdXQgRmlsdGVyIEVuYWJsZSAqLworI2RlZmluZSBQSU9fSUZEUgkweDI0CS8qIEdsaXRjaCBJbnB1dCBGaWx0ZXIgRGlzYWJsZSAqLworI2RlZmluZSBQSU9fSUZTUgkweDI4CS8qIEdsaXRjaCBJbnB1dCBGaWx0ZXIgU3RhdHVzICovCisjZGVmaW5lIFBJT19TT0RSCTB4MzAJLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19DT0RSCTB4MzQJLyogQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX09EU1IJMHgzOAkvKiBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX1BEU1IJMHgzYwkvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX0lFUgkJMHg0MAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19JRFIJCTB4NDQJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX0lNUgkJMHg0OAkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fSVNSCQkweDRjCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX01ERVIJMHg1MAkvKiBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19NRERSCTB4NTQJLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX01EU1IJMHg1OAkvKiBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19QVURSCTB4NjAJLyogUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19QVUVSCTB4NjQJLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX1BVU1IJMHg2OAkvKiBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fQVNSCQkweDcwCS8qIFBlcmlwaGVyYWwgQSBTZWxlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX0JTUgkJMHg3NAkvKiBQZXJpcGhlcmFsIEIgU2VsZWN0IFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19BQlNSCTB4NzgJLyogQUIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19PV0VSCTB4YTAJLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fT1dEUgkweGE0CS8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19PV1NSCTB4YTgJLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLworCisjZGVmaW5lIEFUOTFfUElPX1AobikJKDEgPDwgKG4pKQorCisKKy8qCisgKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xsZXIuCisgKi8KKyNkZWZpbmUJQVQ5MV9QTUMJMHhjMDAKKworI2RlZmluZQlBVDkxX1BNQ19TQ0VSCQkoQVQ5MV9QTUMgKyAweDAwKQkvKiBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfUE1DX1NDRFIJCShBVDkxX1BNQyArIDB4MDQpCS8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQVQ5MV9QTUNfU0NTUgkJKEFUOTFfUE1DICsgMHgwOCkJLyogU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLCQkoMSA8PCAgMCkJCS8qIFByb2Nlc3NvciBDbG9jayAqLworI2RlZmluZQkJQVQ5MV9QTUNfVURQCQkoMSA8PCAgMSkJCS8qIFVTQiBEZXZjaWNlIFBvcnQgQ2xvY2sgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX01DS1VEUAkJKDEgPDwgIDIpCQkvKiBVU0IgRGV2aWNlIFBvcnQgTWFzdGVyIENsb2NrIEF1dG9tYXRpYyBEaXNhYmxlIG9uIFN1c3BlbmQgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1VIUAkJKDEgPDwgIDQpCQkvKiBVU0IgSG9zdCBQb3J0IENsb2NrICovCisjZGVmaW5lCQlBVDkxX1BNQ19QQ0swCQkoMSA8PCAgOCkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAwICovCisjZGVmaW5lCQlBVDkxX1BNQ19QQ0sxCQkoMSA8PCAgOSkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAxICovCisjZGVmaW5lCQlBVDkxX1BNQ19QQ0syCQkoMSA8PCAxMCkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAyICovCisjZGVmaW5lCQlBVDkxX1BNQ19QQ0szCQkoMSA8PCAxMSkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAzICovCisKKyNkZWZpbmUJQVQ5MV9QTUNfUENFUgkJKEFUOTFfUE1DICsgMHgxMCkJLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9QTUNfUENEUgkJKEFUOTFfUE1DICsgMHgxNCkJLyogUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfUE1DX1BDU1IJCShBVDkxX1BNQyArIDB4MTgpCS8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQVQ5MV9DS0dSX01PUgkJKEFUOTFfUE1DICsgMHgyMCkJLyogTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1BNQ19NT1NDRU4JCSgxICAgIDw8IDApCQkvKiBNYWluIE9zY2lsbGF0b3IgRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX1BNQ19PU0NPVU5UCSgweGZmIDw8IDgpCQkvKiBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZSAqLworCisjZGVmaW5lCUFUOTFfQ0tHUl9NQ0ZSCQkoQVQ5MV9QTUMgKyAweDI0KQkvKiBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9QTUNfTUFJTkYJCSgweGZmZmYgPDwgIDApCQkvKiBNYWluIENsb2NrIEZyZXF1ZW5jeSAqLworI2RlZmluZQkJQVQ5MV9QTUNfTUFJTlJEWQkoMQk8PCAxNikJCS8qIE1haW4gQ2xvY2sgUmVhZHkgKi8KKworI2RlZmluZQlBVDkxX0NLR1JfUExMQVIJCShBVDkxX1BNQyArIDB4MjgpCS8qIFBMTCBBIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfQ0tHUl9QTExCUgkJKEFUOTFfUE1DICsgMHgyYykJLyogUExMIEIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX0RJVgkJKDB4ZmYgIDw8ICAwKQkJLyogRGl2aWRlciAqLworI2RlZmluZQkJQVQ5MV9QTUNfUExMQ09VTlQJKDB4M2YgIDw8ICA4KQkJLyogUExMIENvdW50ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX09VVAkJKDMgICAgIDw8IDE0KQkJLyogUExMIENsb2NrIEZyZXF1ZW5jeSBSYW5nZSAqLworI2RlZmluZQkJQVQ5MV9QTUNfTVVMCQkoMHg3ZmYgPDwgMTYpCQkvKiBQTEwgTXVsdGlwbGllciAqLworI2RlZmluZQkJQVQ5MV9QTUNfVVNCOTZNCQkoMSAgICAgPDwgMjgpCQkvKiBEaXZpZGVyIGJ5IDIgRW5hYmxlIChQTExCIG9ubHkpICovCisKKyNkZWZpbmUJQVQ5MV9QTUNfTUNLUgkJKEFUOTFfUE1DICsgMHgzMCkJLyogTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1BNQ19DU1MJCSgzIDw8ICAwKQkJLyogTWFzdGVyIENsb2NrIFNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFfUE1DX0NTU19TTE9XCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfUE1DX0NTU19NQUlOCQkoMSA8PCAwKQorI2RlZmluZQkJCUFUOTFfUE1DX0NTU19QTExBCQkoMiA8PCAwKQorI2RlZmluZQkJCUFUOTFfUE1DX0NTU19QTExCCQkoMyA8PCAwKQorI2RlZmluZQkJQVQ5MV9QTUNfUFJFUwkJKDcgPDwgIDIpCQkvKiBNYXN0ZXIgQ2xvY2sgUHJlc2NhbGVyICovCisjZGVmaW5lIAkJQVQ5MV9QTUNfUFJFU18xCQkJKDAgPDwgMikKKyNkZWZpbmUJCQlBVDkxX1BNQ19QUkVTXzIJCQkoMSA8PCAyKQorI2RlZmluZQkJCUFUOTFfUE1DX1BSRVNfNAkJCSgyIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9QTUNfUFJFU184CQkJKDMgPDwgMikKKyNkZWZpbmUJCQlBVDkxX1BNQ19QUkVTXzE2CQkoNCA8PCAyKQorI2RlZmluZQkJCUFUOTFfUE1DX1BSRVNfMzIJCSg1IDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9QTUNfUFJFU182NAkJKDYgPDwgMikKKyNkZWZpbmUJCUFUOTFfUE1DX01ESVYJCSgzIDw8ICA4KQkJLyogTWFzdGVyIENsb2NrIERpdmlzaW9uICovCisjZGVmaW5lCQkJQVQ5MV9QTUNfTURJVl8xCQkJKDAgPDwgOCkKKyNkZWZpbmUJCQlBVDkxX1BNQ19NRElWXzIJCQkoMSA8PCA4KQorI2RlZmluZQkJCUFUOTFfUE1DX01ESVZfMwkJCSgyIDw8IDgpCisjZGVmaW5lCQkJQVQ5MV9QTUNfTURJVl80CQkJKDMgPDwgOCkKKworI2RlZmluZQlBVDkxX1BNQ19QQ0tSKG4pCShBVDkxX1BNQyArIDB4NDAgKyAoKG4pICogNCkpCS8qIFByb2dyYW1tYWJsZSBDbG9jayAwLTMgUmVnaXN0ZXJzICovCisjZGVmaW5lCUFUOTFfUE1DX0lFUgkJKEFUOTFfUE1DICsgMHg2MCkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1BNQ19JRFIJCShBVDkxX1BNQyArIDB4NjQpCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfUE1DX1NSCQkoQVQ5MV9QTUMgKyAweDY4KQkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX01PU0NTCQkoMSA8PCAgMCkJCS8qIE1PU0NTIEZsYWcgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX0xPQ0tBCQkoMSA8PCAgMSkJCS8qIFBMTEEgTG9jayAqLworI2RlZmluZQkJQVQ5MV9QTUNfTE9DS0IJCSgxIDw8ICAyKQkJLyogUExMQiBMb2NrICovCisjZGVmaW5lCQlBVDkxX1BNQ19NQ0tSRFkJCSgxIDw8ICAzKQkJLyogTWFzdGVyIENsb2NrICovCisjZGVmaW5lCQlBVDkxX1BNQ19QQ0swUkRZCSgxIDw8ICA4KQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDAgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1BDSzFSRFkJKDEgPDwgIDkpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMSAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLMlJEWQkoMSA8PCAxMCkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAyICovCisjZGVmaW5lCQlBVDkxX1BNQ19QQ0szUkRZCSgxIDw8IDExKQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDMgKi8KKyNkZWZpbmUJQVQ5MV9QTUNfSU1SCQkoQVQ5MV9QTUMgKyAweDZjKQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworCisKKy8qCisgKiBTeXN0ZW0gVGltZXIuCisgKi8KKyNkZWZpbmUJQVQ5MV9TVAkJMHhkMDAKKworI2RlZmluZQlBVDkxX1NUX0NSCQkoQVQ5MV9TVCArIDB4MDApCS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgCUFUOTFfU1RfV0RSU1QJCSgxIDw8IDApCQkvKiBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovCisjZGVmaW5lCUFUOTFfU1RfUElNUgkJKEFUOTFfU1QgKyAweDA0KQkvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9TVF9QSVYJCSgweGZmZmYgPDwgIDApCQkvKiBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgKi8KKyNkZWZpbmUJQVQ5MV9TVF9XRE1SCQkoQVQ5MV9TVCArIDB4MDgpCS8qIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU1RfV0RWCQkoMHhmZmZmIDw8ICAwKQkJLyogV2F0Y2hkb2cgQ291bnRlciBWYWx1ZSAqLworI2RlZmluZQkJQVQ5MV9TVF9SU1RFTgkJKDEJPDwgMTYpCQkvKiBSZXNldCBFbmFibGUgKi8KKyNkZWZpbmUJCUFUOTFfU1RfRVhURU4JCSgxCTw8IDE3KQkJLyogRXh0ZXJuYWwgU2lnbmFsIEFzc2VydGlvbiBFbmFibGUgKi8KKyNkZWZpbmUJQVQ5MV9TVF9SVE1SCQkoQVQ5MV9TVCArIDB4MGMpCS8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1NUX1JUUFJFUwkJKDB4ZmZmZiA8PCAgMCkJCS8qIFJlYWwtdGltZSBQcmVzY2FsYXIgVmFsdWUgKi8KKyNkZWZpbmUJQVQ5MV9TVF9TUgkJKEFUOTFfU1QgKyAweDEwKQkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU1RfUElUUwkJKDEgPDwgMCkJCS8qIFBlcmlvZCBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8KKyNkZWZpbmUJCUFUOTFfU1RfV0RPVkYJCSgxIDw8IDEpIAkJLyogV2F0Y2hkb2cgT3ZlcmZsb3cgKi8KKyNkZWZpbmUJCUFUOTFfU1RfUlRUSU5DCQkoMSA8PCAyKSAJCS8qIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQgKi8KKyNkZWZpbmUJCUFUOTFfU1RfQUxNUwkJKDEgPDwgMykgCQkvKiBBbGFybSBTdGF0dXMgKi8KKyNkZWZpbmUJQVQ5MV9TVF9JRVIJCShBVDkxX1NUICsgMHgxNCkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1NUX0lEUgkJKEFUOTFfU1QgKyAweDE4KQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1NUX0lNUgkJKEFUOTFfU1QgKyAweDFjKQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1NUX1JUQVIJCShBVDkxX1NUICsgMHgyMCkJLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1NUX0FMTVYJCSgweGZmZmZmIDw8IDApCQkvKiBBbGFybSBWYWx1ZSAqLworI2RlZmluZQlBVDkxX1NUX0NSVFIJCShBVDkxX1NUICsgMHgyNCkJLyogQ3VycmVudCBSZWFsLXRpbWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU1RfQ1JUVgkJKDB4ZmZmZmYgPDwgMCkJCS8qIEN1cnJlbnQgUmVhbC1UaW1lIFZhbHVlICovCisKKworLyoKKyAqIFJlYWwtdGltZSBDbG9jay4KKyAqLworI2RlZmluZQlBVDkxX1JUQwkweGUwMAorCisjZGVmaW5lCUFUOTFfUlRDX0NSCQkoQVQ5MV9SVEMgKyAweDAwKQkvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1JUQ19VUERUSU0JCSgxIDw8ICAwKQkJLyogVXBkYXRlIFJlcXVlc3QgVGltZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9SVENfVVBEQ0FMCQkoMSA8PCAgMSkJCS8qIFVwZGF0ZSBSZXF1ZXN0IENhbGVuZGFyIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1JUQ19USU1FVlNFTAkoMyA8PCAgOCkJCS8qIFRpbWUgRXZlbnQgU2VsZWN0aW9uICovCisjZGVmaW5lCQkJQVQ5MV9SVENfVElNRVZTRUxfTUlOVVRFCSgwIDw8IDgpCisjZGVmaW5lIAkJQVQ5MV9SVENfVElNRVZTRUxfSE9VUgkJKDEgPDwgOCkKKyNkZWZpbmUgCQlBVDkxX1JUQ19USU1FVlNFTF9EQVkyNAkJKDIgPDwgOCkKKyNkZWZpbmUgCQlBVDkxX1JUQ19USU1FVlNFTF9EQVkxMgkJKDMgPDwgOCkKKyNkZWZpbmUJCUFUOTFfUlRDX0NBTEVWU0VMCSgzIDw8IDE2KQkJLyogQ2FsZW5kYXIgRXZlbnQgU2VsZWN0aW9uICovCisjZGVmaW5lIAkJQVQ5MV9SVENfQ0FMRVZTRUxfV0VFSwkJKDAgPDwgMTYpCisjZGVmaW5lIAkJQVQ5MV9SVENfQ0FMRVZTRUxfTU9OVEgJCSgxIDw8IDE2KQorI2RlZmluZSAJCUFUOTFfUlRDX0NBTEVWU0VMX1lFQVIJCSgyIDw8IDE2KQorCisjZGVmaW5lCUFUOTFfUlRDX01SCQkoQVQ5MV9SVEMgKyAweDA0KQkvKiBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIAlBVDkxX1JUQ19IUk1PRAkJKDEgPDwgIDApCQkvKiAxMi8yNCBIb3VyIE1vZGUgKi8KKworI2RlZmluZQlBVDkxX1JUQ19USU1SCQkoQVQ5MV9SVEMgKyAweDA4KQkvKiBUaW1lIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1JUQ19TRUMJCSgweDdmIDw8ICAwKQkJLyogQ3VycmVudCBTZWNvbmQgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX01JTgkJKDB4N2YgPDwgIDgpCQkvKiBDdXJyZW50IE1pbnV0ZSAqLworI2RlZmluZQkJQVQ5MV9SVENfSE9VUiAJCSgweDNmIDw8IDE2KQkJLyogQ3VycmVudCBIb3VyICovCisjZGVmaW5lCQlBdDkxX1JUQ19BTVBNCQkoMSAgICA8PCAyMikJCS8qIEFudGUgTWVyaWRpZW0gUG9zdCBNZXJpZGllbSBJbmRpY2F0b3IgKi8KKworI2RlZmluZQlBVDkxX1JUQ19DQUxSCQkoQVQ5MV9SVEMgKyAweDBjKQkvKiBDYWxlbmRhciBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9SVENfQ0VOVAkJKDB4N2YgPDwgIDApCQkvKiBDdXJyZW50IENlbnR1cnkgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX1lFQVIJCSgweGZmIDw8ICA4KQkJLyogQ3VycmVudCBZZWFyICovCisjZGVmaW5lCQlBVDkxX1JUQ19NT05USAkJKDB4MWYgPDwgMTYpCQkvKiBDdXJyZW50IE1vbnRoICovCisjZGVmaW5lCQlBVDkxX1JUQ19EQVkJCSg3ICAgIDw8IDIxKQkJLyogQ3VycmVudCBEYXkgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX0RBVEUJCSgweDNmIDw8IDI0KQkJLyogQ3VycmVudCBEYXRlICovCisKKyNkZWZpbmUJQVQ5MV9SVENfVElNQUxSCQkoQVQ5MV9SVEMgKyAweDEwKQkvKiBUaW1lIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1JUQ19TRUNFTgkJKDEgPDwgIDcpCQkvKiBTZWNvbmQgQWxhcm0gRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX1JUQ19NSU5FTgkJKDEgPDwgMTUpCQkvKiBNaW51dGUgQWxhcm0gRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX1JUQ19IT1VSRU4JCSgxIDw8IDIzKQkJLyogSG91ciBBbGFybSBFbmFibGUgKi8KKworI2RlZmluZQlBVDkxX1JUQ19DQUxBTFIJCShBVDkxX1JUQyArIDB4MTQpCS8qIENhbGVuZGFyIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1JUQ19NVEhFTgkJKDEgPDwgMjMpCQkvKiBNb250aCBBbGFybSBFbmFibGUgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX0RBVEVFTgkJKDEgPDwgMzEpCQkvKiBEYXRlIEFsYXJtIEVuYWJsZSAqLworCisjZGVmaW5lCUFUOTFfUlRDX1NSCQkoQVQ5MV9SVEMgKyAweDE4KQkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX0FDS1VQRAkJKDEgPDwgIDApCQkvKiBBY2tub3dsZWRnZSBmb3IgVXBkYXRlICovCisjZGVmaW5lCQlBVDkxX1JUQ19BTEFSTQkJKDEgPDwgIDEpCQkvKiBBbGFybSBGbGFnICovCisjZGVmaW5lCQlBVDkxX1JUQ19TRUNFVgkJKDEgPDwgIDIpCQkvKiBTZWNvbmQgRXZlbnQgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX1RJTUVWCQkoMSA8PCAgMykJCS8qIFRpbWUgRXZlbnQgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX0NBTEVWCQkoMSA8PCAgNCkJCS8qIENhbGVuZGFyIEV2ZW50ICovCisKKyNkZWZpbmUJQVQ5MV9SVENfU0NDUgkJKEFUOTFfUlRDICsgMHgxYykJLyogU3RhdHVzIENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9SVENfSUVSCQkoQVQ5MV9SVEMgKyAweDIwKQkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfUlRDX0lEUgkJKEFUOTFfUlRDICsgMHgyNCkJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9SVENfSU1SCQkoQVQ5MV9SVEMgKyAweDI4KQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworCisjZGVmaW5lCUFUOTFfUlRDX1ZFUgkJKEFUOTFfUlRDICsgMHgyYykJLyogVmFsaWQgRW50cnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX05WVElNCQkoMSA8PCAgMCkJCS8qIE5vbiB2YWxpZCBUaW1lICovCisjZGVmaW5lCQlBVDkxX1JUQ19OVkNBTAkJKDEgPDwgIDEpCQkvKiBOb24gdmFsaWQgQ2FsZW5kYXIgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX05WVElNQUxSCSgxIDw8ICAyKQkJLyogTm9uIHZhbGlkIFRpbWUgQWxhcm0gKi8KKyNkZWZpbmUJCUFUOTFfUlRDX05WQ0FMQUxSCSgxIDw8ICAzKQkJLyogTm9uIHZhbGlkIENhbGVuZGFyIEFsYXJtICovCisKKworLyoKKyAqIE1lbW9yeSBDb250cm9sbGVyLgorICovCisjZGVmaW5lIEFUOTFfTUMJCTB4ZjAwCisKKyNkZWZpbmUgQVQ5MV9NQ19SQ1IJCShBVDkxX01DICsgMHgwMCkJLyogTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQ19SQ0IJCSgxIDw8ICAwKQkJLyogUmVtYXAgQ29tbWFuZCBCaXQgKi8KKworI2RlZmluZSBBVDkxX01DX0FTUgkJKEFUOTFfTUMgKyAweDA0KQkvKiBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9NQ19BQVNSCQkoQVQ5MV9NQyArIDB4MDgpCS8qIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfTUNfTVBSCQkoQVQ5MV9NQyArIDB4MGMpCS8qIE1DIE1hc3RlciBQcmlvcml0eSBSZWdpc3RlciAqLworCisvKiBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIChFQkkpIHJlZ2lzdGVycyAqLworI2RlZmluZSBBVDkxX0VCSV9DU0EJCShBVDkxX01DICsgMHg2MCkJLyogQ2hpcCBTZWxlY3QgQXNzaWdubWVudCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9FQklfQ1MwQQkJKDEgPDwgMCkJCS8qIENoaXAgU2VsZWN0IDAgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfRUJJX0NTMEFfU01DCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfRUJJX0NTMEFfQkZDCQkoMSA8PCAwKQorI2RlZmluZQkJQVQ5MV9FQklfQ1MxQQkJKDEgPDwgMSkJCS8qIENoaXAgU2VsZWN0IDEgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfRUJJX0NTMUFfU01DCQkoMCA8PCAxKQorI2RlZmluZQkJCUFUOTFfRUJJX0NTMUFfU0RSQU1DCQkoMSA8PCAxKQorI2RlZmluZQkJQVQ5MV9FQklfQ1MzQQkJKDEgPDwgMykJCS8qIENoaXAgU2VsZWN0IDIgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfRUJJX0NTM0FfU01DCQkoMCA8PCAzKQorI2RlZmluZQkJCUFUOTFfRUJJX0NTM0FfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKKyNkZWZpbmUJCUFUOTFfRUJJX0NTNEEJCSgxIDw8IDQpCQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzRBX1NNQwkJKDAgPDwgNCkKKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzRBX1NNQ19DT01QQUNURkxBU0gJKDEgPDwgNCkKKyNkZWZpbmUgQVQ5MV9FQklfQ0ZHUgkJKEFUOTFfTUMgKyAweDY0KQkvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0VCSV9EQlBVQwkJKDEgPDwgMCkJCS8qIERhdGEgQnVzIFB1bGwtVXAgQ29uZmlndXJhdGlvbiAqLworCisvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgKFNNQykgcmVnaXN0ZXJzICovCisjZGVmaW5lCUFUOTFfU01DX0NTUihuKQkJKEFUOTFfTUMgKyAweDcwICsgKChuKSAqIDQpKS8qIFNNQyBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9TTUNfTldTCQkoMHg3ZiA8PCAgMCkJCS8qIE51bWJlciBvZiBXYWl0IFN0YXRlcyAqLworI2RlZmluZQkJQVQ5MV9TTUNfV1NFTgkJKDEgICAgPDwgIDcpCQkvKiBXYWl0IFN0YXRlIEVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9TTUNfVERGCQkoMHhmICA8PCAgOCkJCS8qIERhdGEgRmxvYXQgVGltZSAqLworI2RlZmluZQkJQVQ5MV9TTUNfQkFUCQkoMSAgICA8PCAxMikJCS8qIEJ5dGUgQWNjZXNzIFR5cGUgKi8KKyNkZWZpbmUJCUFUOTFfU01DX0RCVwkJKDMgICAgPDwgMTMpCQkvKiBEYXRhIEJ1cyBXaWR0aCAqLworI2RlZmluZQkJCUFUOTFfU01DX0RCV18xNgkJKDEgPDwgMTMpCisjZGVmaW5lCQkJQVQ5MV9TTUNfREJXXzgJCSgyIDw8IDEzKQorI2RlZmluZQkJQVQ5MV9TTUNfRFBSCQkoMSA8PCAxNSkJCS8qIERhdGEgUmVhZCBQcm90b2NvbCAqLworI2RlZmluZQkJQVQ5MV9TTUNfQUNTUwkJKDMgPDwgMTYpCQkvKiBBZGRyZXNzIHRvIENoaXAgU2VsZWN0IFNldHVwICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfQUNTU19TVEQJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9TTUNfQUNTU18xCQkoMSA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX1NNQ19BQ1NTXzIJCSgyIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfU01DX0FDU1NfMwkJKDMgPDwgMTYpCisjZGVmaW5lCQlBVDkxX1NNQ19SV1NFVFVQCSg3IDw8IDI0KQkJLyogUmVhZCAmIFdyaXRlIFNpZ25hbCBUaW1lIFNldHVwICovCisjZGVmaW5lCQlBVDkxX1NNQ19SV0hPTEQJCSg3IDw8IDI4KQkJLyogUmVhZCAmIFdyaXRlIFNpZ25hbCBIb2xkIFRpbWUgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTdkMTEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2JvYXJkLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqIFRoZXNlIGFyZSBkYXRhIHN0cnVjdHVyZXMgZm91bmQgaW4gcGxhdGZvcm1fZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhLAorICogYW5kIGRlc2NyaWJpbmcgYm9hcmQtc3BlY2ZpYyBkYXRhIG5lZWRlZCBieSBkcml2ZXJzLiAgRm9yIGV4YW1wbGUsCisgKiB3aGljaCBwaW4gaXMgdXNlZCBmb3IgYSBnaXZlbiBHUElPIHJvbGUuCisgKgorICogSW4gMi42LCBkcml2ZXJzIHNob3VsZCBzdHJvbmdseSBhdm9pZCBib2FyZC1zcGVjaWZpYyBrbm93bGVkZ2Ugc28KKyAqIHRoYXQgc3VwcG9ydGluZyBuZXcgYm9hcmRzIG5vcm1hbGx5IHdvbid0IHJlcXVpcmUgZHJpdmVyIHBhdGNoZXMuCisgKiBNb3N0IGJvYXJkLXNwZWNpZmljIGtub3dsZWRnZSBzaG91bGQgYmUgaW4gYXJjaC8uLi4vYm9hcmQtKi5jIGZpbGVzLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9CT0FSRF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQk9BUkRfSAorCisgLyogQ2xvY2tzICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBhdDkxX21hc3Rlcl9jbG9jazsKKworIC8qIFNlcmlhbCBQb3J0ICovCitleHRlcm4gaW50IGF0OTFfc2VyaWFsX21hcFtBVDkxX05SX1VBUlRdOworZXh0ZXJuIGludCBhdDkxX2NvbnNvbGVfcG9ydDsKKworIC8qIFVTQiBEZXZpY2UgKi8KK3N0cnVjdCBhdDkxX3VkY19kYXRhIHsKKwl1OAl2YnVzX3BpbjsJCS8qIGhpZ2ggPT0gaG9zdCBwb3dlcmluZyB1cyAqLworCXU4CXB1bGx1cF9waW47CQkvKiBoaWdoID09IEQrIHB1bGxlZCB1cCAqLworfTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKTsKKworIC8qIENvbXBhY3QgRmxhc2ggKi8KK3N0cnVjdCBhdDkxX2NmX2RhdGEgeworCXU4CWlycV9waW47CQkvKiBJL08gSVJRICovCisJdTgJZGV0X3BpbjsJCS8qIENhcmQgZGV0ZWN0ICovCisJdTgJdmNjX3BpbjsJCS8qIHBvd2VyIHN3aXRjaGluZyAqLworCXU4CXJzdF9waW47CQkvKiBjYXJkIHJlc2V0ICovCit9OworZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKTsKKworIC8qIE1NQyAvIFNEICovCitzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSB7CisJdTgJCWRldF9waW47CS8qIGNhcmQgZGV0ZWN0IElSUSAqLworCXVuc2lnbmVkCWlzX2I6MTsJCS8qIHVzZXMgQiBzaWRlICh2cyBBKSAqLworCXVuc2lnbmVkCXdpcmU0OjE7CS8qIChTRCkgc3VwcG9ydHMgREFUMC4uREFUMyAqLworCXU4CQl3cF9waW47CQkvKiAoU0QpIHdyaXRlcHJvdGVjdCBkZXRlY3QgKi8KKwl1OAkJdmNjX3BpbjsJLyogcG93ZXIgc3dpdGNoaW5nIChoaWdoID09IG9uKSAqLworfTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKTsKKworIC8qIEV0aGVybmV0ICovCitzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSB7CisJdTgJCXBoeV9pcnFfcGluOwkvKiBQSFkgSVJRICovCisJdTgJCWlzX3JtaWk7CS8qIHVzaW5nIFJNSUkgaW50ZXJmYWNlPyAqLworfTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBhdDkxX2V0aF9kYXRhICpkYXRhKTsKKworIC8qIFVTQiBIb3N0ICovCitzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgeworCXU4CQlwb3J0czsJCS8qIG51bWJlciBvZiBwb3J0cyBvbiByb290IGh1YiAqLworfTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDk2YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RlYnVnLW1hY3JvLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgU0FOIFBlb3BsZQorICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwl0c3QJXHJ4LCAjMQkJCQlAIE1NVSBlbmFibGVkPworCWxkcmVxCVxyeCwgPUFUOTFfQkFTRV9TWVMJCUAgU3lzdGVtIHBlcmlwaGVyYWxzIChwaHlzIGFkZHJlc3MpCisJbGRybmUJXHJ4LCA9QVQ5MV9WQV9CQVNFX1NZUwkJQCBTeXN0ZW0gcGVyaXBoZXJhbHMgKHZpcnQgYWRkcmVzcykKKwkuZW5kbQorCisJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJc3RyYglccmQsIFtccngsICNBVDkxX0RCR1VfVEhSXQlAIFdyaXRlIHRvIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIKKwkuZW5kbQorCisJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisxMDAxOglsZHIJXHJkLCBbXHJ4LCAjQVQ5MV9EQkdVX1NSXQlAIFJlYWQgU3RhdHVzIFJlZ2lzdGVyCisJdHN0CVxyZCwgI0FUOTFfREJHVV9UWFJEWQkJQCBEQkdVX1RYUkRZID0gMSB3aGVuIHJlYWR5IHRvIHRyYW5zbWl0CisJYmVxCTEwMDFiCisJLmVuZG0KKworCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMToJbGRyCVxyZCwgW1xyeCwgI0FUOTFfREJHVV9TUl0JQCBSZWFkIFN0YXR1cyBSZWdpc3RlcgorCXRzdAlccmQsICNBVDkxX0RCR1VfVFhFTVBUWQkJQCBEQkdVX1RYRU1QVFkgPSAxIHdoZW4gdHJhbnNtaXNzaW9uIGNvbXBsZXRlCisJYmVxCTEwMDFiCisJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZG1hLmgKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGFyYW0uaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9kbWEuaAppbmRleCA3ODNkZWRkLi4yMmMxZGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZG1hLmgKQEAgLTEsNyArMSw3IEBACiAvKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BhcmFtLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZG1hLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWEzMjZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2VudHJ5LW1hY3JvLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgU0FOIFBlb3BsZQorICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgQVQ5MVJNOTIwMCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJbGRyCVxiYXNlLCA9KEFUOTFfVkFfQkFTRV9TWVMpCQlAIGJhc2UgdmlydHVhbCBhZGRyZXNzIG9mIFNZUyBwZXJpcGhlcmFscworCWxkcglcaXJxbnIsIFtcYmFzZSwgI0FUOTFfQUlDX0lWUl0JCUAgcmVhZCBJUlEgdmVjdG9yIHJlZ2lzdGVyOiBkZS1hc3NlcnRzIG5JUlEgdG8gcHJvY2Vzc29yIChhbmQgY2xlYXJzIGludGVycnVwdCkKKwlsZHIJXGlycXN0YXQsIFtcYmFzZSwgI0FUOTFfQUlDX0lTUl0JQCByZWFkIGludGVycnVwdCBzb3VyY2UgbnVtYmVyCisJdGVxCVxpcnFzdGF0LCAjMAkJCQlAIElTUiBpcyAwIHdoZW4gbm8gY3VycmVudCBpbnRlcnJ1cHQsIG9yIHNwdXJpb3VzIGludGVycnVwdAorCXN0cmVxCVx0bXAsIFtcYmFzZSwgI0FUOTFfQUlDX0VPSUNSXQkJQCBub3QgZ29pbmcgdG8gYmUgaGFuZGxlZCBmdXJ0aGVyLCB0aGVuIEFDSyBpdCBub3cuCisJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjBhNjFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2dwaW8uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgSFAgTGFicworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9BVDkxUk05MjAwX0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0FUOTFSTTkyMDBfR1BJT19ICisKKyNkZWZpbmUgUElOX0JBU0UJCU5SX0FJQ19JUlFTCisKKyNkZWZpbmUgUFFGUF9HUElPX0JBTktTCQkzCS8qIFBRRlAgcGFja2FnZSBoYXMgMyBiYW5rcyAqLworI2RlZmluZSBCR0FfR1BJT19CQU5LUwkJNAkvKiBCR0EgcGFja2FnZSBoYXMgNCBiYW5rcyAqLworCisvKiB0aGVzZSBwaW4gbnVtYmVycyBkb3VibGUgYXMgSVJRIG51bWJlcnMsIGxpa2UgQVQ5MV9JRF8qIHZhbHVlcyAqLworCisjZGVmaW5lCUFUOTFfUElOX1BBMAkoUElOX0JBU0UgKyAweDAwICsgMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEExCShQSU5fQkFTRSArIDB4MDAgKyAxKQorI2RlZmluZQlBVDkxX1BJTl9QQTIJKFBJTl9CQVNFICsgMHgwMCArIDIpCisjZGVmaW5lCUFUOTFfUElOX1BBMwkoUElOX0JBU0UgKyAweDAwICsgMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEE0CShQSU5fQkFTRSArIDB4MDAgKyA0KQorCisjZGVmaW5lCUFUOTFfUElOX1BBNQkoUElOX0JBU0UgKyAweDAwICsgNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEE2CShQSU5fQkFTRSArIDB4MDAgKyA2KQorI2RlZmluZQlBVDkxX1BJTl9QQTcJKFBJTl9CQVNFICsgMHgwMCArIDcpCisjZGVmaW5lCUFUOTFfUElOX1BBOAkoUElOX0JBU0UgKyAweDAwICsgOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEE5CShQSU5fQkFTRSArIDB4MDAgKyA5KQorCisjZGVmaW5lCUFUOTFfUElOX1BBMTAJKFBJTl9CQVNFICsgMHgwMCArIDEwKQorI2RlZmluZQlBVDkxX1BJTl9QQTExCShQSU5fQkFTRSArIDB4MDAgKyAxMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEExMgkoUElOX0JBU0UgKyAweDAwICsgMTIpCisjZGVmaW5lCUFUOTFfUElOX1BBMTMJKFBJTl9CQVNFICsgMHgwMCArIDEzKQorI2RlZmluZQlBVDkxX1BJTl9QQTE0CShQSU5fQkFTRSArIDB4MDAgKyAxNCkKKworI2RlZmluZQlBVDkxX1BJTl9QQTE1CShQSU5fQkFTRSArIDB4MDAgKyAxNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEExNgkoUElOX0JBU0UgKyAweDAwICsgMTYpCisjZGVmaW5lCUFUOTFfUElOX1BBMTcJKFBJTl9CQVNFICsgMHgwMCArIDE3KQorI2RlZmluZQlBVDkxX1BJTl9QQTE4CShQSU5fQkFTRSArIDB4MDAgKyAxOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEExOQkoUElOX0JBU0UgKyAweDAwICsgMTkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEEyMAkoUElOX0JBU0UgKyAweDAwICsgMjApCisjZGVmaW5lCUFUOTFfUElOX1BBMjEJKFBJTl9CQVNFICsgMHgwMCArIDIxKQorI2RlZmluZQlBVDkxX1BJTl9QQTIyCShQSU5fQkFTRSArIDB4MDAgKyAyMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEEyMwkoUElOX0JBU0UgKyAweDAwICsgMjMpCisjZGVmaW5lCUFUOTFfUElOX1BBMjQJKFBJTl9CQVNFICsgMHgwMCArIDI0KQorCisjZGVmaW5lCUFUOTFfUElOX1BBMjUJKFBJTl9CQVNFICsgMHgwMCArIDI1KQorI2RlZmluZQlBVDkxX1BJTl9QQTI2CShQSU5fQkFTRSArIDB4MDAgKyAyNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEEyNwkoUElOX0JBU0UgKyAweDAwICsgMjcpCisjZGVmaW5lCUFUOTFfUElOX1BBMjgJKFBJTl9CQVNFICsgMHgwMCArIDI4KQorI2RlZmluZQlBVDkxX1BJTl9QQTI5CShQSU5fQkFTRSArIDB4MDAgKyAyOSkKKworI2RlZmluZQlBVDkxX1BJTl9QQTMwCShQSU5fQkFTRSArIDB4MDAgKyAzMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEEzMQkoUElOX0JBU0UgKyAweDAwICsgMzEpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEIwCShQSU5fQkFTRSArIDB4MjAgKyAwKQorI2RlZmluZQlBVDkxX1BJTl9QQjEJKFBJTl9CQVNFICsgMHgyMCArIDEpCisjZGVmaW5lCUFUOTFfUElOX1BCMgkoUElOX0JBU0UgKyAweDIwICsgMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEIzCShQSU5fQkFTRSArIDB4MjAgKyAzKQorI2RlZmluZQlBVDkxX1BJTl9QQjQJKFBJTl9CQVNFICsgMHgyMCArIDQpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEI1CShQSU5fQkFTRSArIDB4MjAgKyA1KQorI2RlZmluZQlBVDkxX1BJTl9QQjYJKFBJTl9CQVNFICsgMHgyMCArIDYpCisjZGVmaW5lCUFUOTFfUElOX1BCNwkoUElOX0JBU0UgKyAweDIwICsgNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEI4CShQSU5fQkFTRSArIDB4MjAgKyA4KQorI2RlZmluZQlBVDkxX1BJTl9QQjkJKFBJTl9CQVNFICsgMHgyMCArIDkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEIxMAkoUElOX0JBU0UgKyAweDIwICsgMTApCisjZGVmaW5lCUFUOTFfUElOX1BCMTEJKFBJTl9CQVNFICsgMHgyMCArIDExKQorI2RlZmluZQlBVDkxX1BJTl9QQjEyCShQSU5fQkFTRSArIDB4MjAgKyAxMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEIxMwkoUElOX0JBU0UgKyAweDIwICsgMTMpCisjZGVmaW5lCUFUOTFfUElOX1BCMTQJKFBJTl9CQVNFICsgMHgyMCArIDE0KQorCisjZGVmaW5lCUFUOTFfUElOX1BCMTUJKFBJTl9CQVNFICsgMHgyMCArIDE1KQorI2RlZmluZQlBVDkxX1BJTl9QQjE2CShQSU5fQkFTRSArIDB4MjAgKyAxNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEIxNwkoUElOX0JBU0UgKyAweDIwICsgMTcpCisjZGVmaW5lCUFUOTFfUElOX1BCMTgJKFBJTl9CQVNFICsgMHgyMCArIDE4KQorI2RlZmluZQlBVDkxX1BJTl9QQjE5CShQSU5fQkFTRSArIDB4MjAgKyAxOSkKKworI2RlZmluZQlBVDkxX1BJTl9QQjIwCShQSU5fQkFTRSArIDB4MjAgKyAyMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEIyMQkoUElOX0JBU0UgKyAweDIwICsgMjEpCisjZGVmaW5lCUFUOTFfUElOX1BCMjIJKFBJTl9CQVNFICsgMHgyMCArIDIyKQorI2RlZmluZQlBVDkxX1BJTl9QQjIzCShQSU5fQkFTRSArIDB4MjAgKyAyMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEIyNAkoUElOX0JBU0UgKyAweDIwICsgMjQpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEIyNQkoUElOX0JBU0UgKyAweDIwICsgMjUpCisjZGVmaW5lCUFUOTFfUElOX1BCMjYJKFBJTl9CQVNFICsgMHgyMCArIDI2KQorI2RlZmluZQlBVDkxX1BJTl9QQjI3CShQSU5fQkFTRSArIDB4MjAgKyAyNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEIyOAkoUElOX0JBU0UgKyAweDIwICsgMjgpCisjZGVmaW5lCUFUOTFfUElOX1BCMjkJKFBJTl9CQVNFICsgMHgyMCArIDI5KQorCisjZGVmaW5lCUFUOTFfUElOX1BCMzAJKFBJTl9CQVNFICsgMHgyMCArIDMwKQorI2RlZmluZQlBVDkxX1BJTl9QQjMxCShQSU5fQkFTRSArIDB4MjAgKyAzMSkKKworI2RlZmluZQlBVDkxX1BJTl9QQzAJKFBJTl9CQVNFICsgMHg0MCArIDApCisjZGVmaW5lCUFUOTFfUElOX1BDMQkoUElOX0JBU0UgKyAweDQwICsgMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyCShQSU5fQkFTRSArIDB4NDAgKyAyKQorI2RlZmluZQlBVDkxX1BJTl9QQzMJKFBJTl9CQVNFICsgMHg0MCArIDMpCisjZGVmaW5lCUFUOTFfUElOX1BDNAkoUElOX0JBU0UgKyAweDQwICsgNCkKKworI2RlZmluZQlBVDkxX1BJTl9QQzUJKFBJTl9CQVNFICsgMHg0MCArIDUpCisjZGVmaW5lCUFUOTFfUElOX1BDNgkoUElOX0JBU0UgKyAweDQwICsgNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEM3CShQSU5fQkFTRSArIDB4NDAgKyA3KQorI2RlZmluZQlBVDkxX1BJTl9QQzgJKFBJTl9CQVNFICsgMHg0MCArIDgpCisjZGVmaW5lCUFUOTFfUElOX1BDOQkoUElOX0JBU0UgKyAweDQwICsgOSkKKworI2RlZmluZQlBVDkxX1BJTl9QQzEwCShQSU5fQkFTRSArIDB4NDAgKyAxMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEMxMQkoUElOX0JBU0UgKyAweDQwICsgMTEpCisjZGVmaW5lCUFUOTFfUElOX1BDMTIJKFBJTl9CQVNFICsgMHg0MCArIDEyKQorI2RlZmluZQlBVDkxX1BJTl9QQzEzCShQSU5fQkFTRSArIDB4NDAgKyAxMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEMxNAkoUElOX0JBU0UgKyAweDQwICsgMTQpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEMxNQkoUElOX0JBU0UgKyAweDQwICsgMTUpCisjZGVmaW5lCUFUOTFfUElOX1BDMTYJKFBJTl9CQVNFICsgMHg0MCArIDE2KQorI2RlZmluZQlBVDkxX1BJTl9QQzE3CShQSU5fQkFTRSArIDB4NDAgKyAxNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEMxOAkoUElOX0JBU0UgKyAweDQwICsgMTgpCisjZGVmaW5lCUFUOTFfUElOX1BDMTkJKFBJTl9CQVNFICsgMHg0MCArIDE5KQorCisjZGVmaW5lCUFUOTFfUElOX1BDMjAJKFBJTl9CQVNFICsgMHg0MCArIDIwKQorI2RlZmluZQlBVDkxX1BJTl9QQzIxCShQSU5fQkFTRSArIDB4NDAgKyAyMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyMgkoUElOX0JBU0UgKyAweDQwICsgMjIpCisjZGVmaW5lCUFUOTFfUElOX1BDMjMJKFBJTl9CQVNFICsgMHg0MCArIDIzKQorI2RlZmluZQlBVDkxX1BJTl9QQzI0CShQSU5fQkFTRSArIDB4NDAgKyAyNCkKKworI2RlZmluZQlBVDkxX1BJTl9QQzI1CShQSU5fQkFTRSArIDB4NDAgKyAyNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyNgkoUElOX0JBU0UgKyAweDQwICsgMjYpCisjZGVmaW5lCUFUOTFfUElOX1BDMjcJKFBJTl9CQVNFICsgMHg0MCArIDI3KQorI2RlZmluZQlBVDkxX1BJTl9QQzI4CShQSU5fQkFTRSArIDB4NDAgKyAyOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyOQkoUElOX0JBU0UgKyAweDQwICsgMjkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEMzMAkoUElOX0JBU0UgKyAweDQwICsgMzApCisjZGVmaW5lCUFUOTFfUElOX1BDMzEJKFBJTl9CQVNFICsgMHg0MCArIDMxKQorCisjZGVmaW5lCUFUOTFfUElOX1BEMAkoUElOX0JBU0UgKyAweDYwICsgMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxCShQSU5fQkFTRSArIDB4NjAgKyAxKQorI2RlZmluZQlBVDkxX1BJTl9QRDIJKFBJTl9CQVNFICsgMHg2MCArIDIpCisjZGVmaW5lCUFUOTFfUElOX1BEMwkoUElOX0JBU0UgKyAweDYwICsgMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEQ0CShQSU5fQkFTRSArIDB4NjAgKyA0KQorCisjZGVmaW5lCUFUOTFfUElOX1BENQkoUElOX0JBU0UgKyAweDYwICsgNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQ2CShQSU5fQkFTRSArIDB4NjAgKyA2KQorI2RlZmluZQlBVDkxX1BJTl9QRDcJKFBJTl9CQVNFICsgMHg2MCArIDcpCisjZGVmaW5lCUFUOTFfUElOX1BEOAkoUElOX0JBU0UgKyAweDYwICsgOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQ5CShQSU5fQkFTRSArIDB4NjAgKyA5KQorCisjZGVmaW5lCUFUOTFfUElOX1BEMTAJKFBJTl9CQVNFICsgMHg2MCArIDEwKQorI2RlZmluZQlBVDkxX1BJTl9QRDExCShQSU5fQkFTRSArIDB4NjAgKyAxMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxMgkoUElOX0JBU0UgKyAweDYwICsgMTIpCisjZGVmaW5lCUFUOTFfUElOX1BEMTMJKFBJTl9CQVNFICsgMHg2MCArIDEzKQorI2RlZmluZQlBVDkxX1BJTl9QRDE0CShQSU5fQkFTRSArIDB4NjAgKyAxNCkKKworI2RlZmluZQlBVDkxX1BJTl9QRDE1CShQSU5fQkFTRSArIDB4NjAgKyAxNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxNgkoUElOX0JBU0UgKyAweDYwICsgMTYpCisjZGVmaW5lCUFUOTFfUElOX1BEMTcJKFBJTl9CQVNFICsgMHg2MCArIDE3KQorI2RlZmluZQlBVDkxX1BJTl9QRDE4CShQSU5fQkFTRSArIDB4NjAgKyAxOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxOQkoUElOX0JBU0UgKyAweDYwICsgMTkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEQyMAkoUElOX0JBU0UgKyAweDYwICsgMjApCisjZGVmaW5lCUFUOTFfUElOX1BEMjEJKFBJTl9CQVNFICsgMHg2MCArIDIxKQorI2RlZmluZQlBVDkxX1BJTl9QRDIyCShQSU5fQkFTRSArIDB4NjAgKyAyMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEQyMwkoUElOX0JBU0UgKyAweDYwICsgMjMpCisjZGVmaW5lCUFUOTFfUElOX1BEMjQJKFBJTl9CQVNFICsgMHg2MCArIDI0KQorCisjZGVmaW5lCUFUOTFfUElOX1BEMjUJKFBJTl9CQVNFICsgMHg2MCArIDI1KQorI2RlZmluZQlBVDkxX1BJTl9QRDI2CShQSU5fQkFTRSArIDB4NjAgKyAyNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEQyNwkoUElOX0JBU0UgKyAweDYwICsgMjcpCisjZGVmaW5lCUFUOTFfUElOX1BEMjgJKFBJTl9CQVNFICsgMHg2MCArIDI4KQorI2RlZmluZQlBVDkxX1BJTl9QRDI5CShQSU5fQkFTRSArIDB4NjAgKyAyOSkKKworI2RlZmluZQlBVDkxX1BJTl9QRDMwCShQSU5fQkFTRSArIDB4NjAgKyAzMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQzMQkoUElOX0JBU0UgKyAweDYwICsgMzEpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBzZXR1cCBzZXR1cCByb3V0aW5lcywgY2FsbGVkIGZyb20gYm9hcmQgaW5pdCBvciBkcml2ZXIgcHJvYmUoKSAqLworZXh0ZXJuIGludCBhdDkxX3NldF9BX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKK2V4dGVybiBpbnQgYXQ5MV9zZXRfQl9wZXJpcGgodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCk7CitleHRlcm4gaW50IGF0OTFfc2V0X2dwaW9faW5wdXQodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCk7CitleHRlcm4gaW50IGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgYXQ5MV9zZXRfZGVnbGl0Y2godW5zaWduZWQgcGluLCBpbnQgaXNfb24pOworCisvKiBjYWxsYWJsZSBhdCBhbnkgdGltZSAqLworZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgYXQ5MV9nZXRfZ3Bpb192YWx1ZSh1bnNpZ25lZCBwaW4pOworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0NmMwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFUTUVMCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFybTkyMDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxcm05MjAwX3N5cy5oPgorCisvKgorICogUmVtYXAgdGhlIHBlcmlwaGVyYWxzIGZyb20gYWRkcmVzcyAweEZGRkEwMDAwIC4uIDB4RkZGRkZGRkYKKyAqIHRvIDB4RkVGQTAwMDAgLi4gMHhGRjAwMDAwMC4gICgzODRLYikKKyAqLworI2RlZmluZSBBVDkxX0lPX1BIWVNfQkFTRQkweEZGRkEwMDAwCisjZGVmaW5lIEFUOTFfSU9fU0laRQkJKDB4RkZGRkZGRkYgLSBBVDkxX0lPX1BIWVNfQkFTRSArIDEpCisjZGVmaW5lIEFUOTFfSU9fVklSVF9CQVNFCSgweEZGMDAwMDAwIC0gQVQ5MV9JT19TSVpFKQorCisgLyogQ29udmVydCBhIHBoeXNpY2FsIElPIGFkZHJlc3MgdG8gdmlydHVhbCBJTyBhZGRyZXNzICovCisjZGVmaW5lIEFUOTFfSU9fUDJWKHgpCSgoeCkgLSBBVDkxX0lPX1BIWVNfQkFTRSArIEFUOTFfSU9fVklSVF9CQVNFKQorCisvKgorICogVmlydHVhbCB0byBQaHlzaWNhbCBBZGRyZXNzIG1hcHBpbmcgZm9yIElPIGRldmljZXMuCisgKi8KKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1NZUwlBVDkxX0lPX1AyVihBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfU1BJCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9TUEkpCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9TU0MyCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9TU0MyKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfU1NDMQlBVDkxX0lPX1AyVihBVDkxX0JBU0VfU1NDMSkKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1NTQzAJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1NTQzApCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9VUzMJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1VTMykKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1VTMglBVDkxX0lPX1AyVihBVDkxX0JBU0VfVVMyKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfVVMxCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9VUzEpCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9VUzAJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1VTMCkKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX0VNQUMJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX0VNQUMpCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9UV0kJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1RXSSkKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX01DSQlBVDkxX0lPX1AyVihBVDkxX0JBU0VfTUNJKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfVURQCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9VRFApCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9UQ0IxCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9UQ0IxKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfVENCMAlBVDkxX0lPX1AyVihBVDkxX0JBU0VfVENCMCkKKworLyogSW50ZXJuYWwgU1JBTSAqLworI2RlZmluZSBBVDkxX0JBU0VfU1JBTQkJMHgwMDIwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDkxX1NSQU1fU0laRQkJMHgwMDAwNDAwMAkvKiBJbnRlcm5hbCBTUkFNIFNJWkUgKDE2S2IpICovCisKKy8qIFNlcmlhbCBwb3J0cyAqLworI2RlZmluZSBBVDkxX05SX1VBUlQJCTUJCS8qIDQgVVNBUlQzJ3MgYW5kIG9uZSBEQkdVIHBvcnQgKi8KKworLyogRkxBU0ggKi8KKyNkZWZpbmUgQVQ5MV9GTEFTSF9CQVNFCQkweDEwMDAwMDAwCS8qIE5DUzA6IEZsYXNoIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCisvKiBTRFJBTSAqLworI2RlZmluZSBBVDkxX1NEUkFNX0JBU0UJCTB4MjAwMDAwMDAJLyogTkNTMTogU0RSQU0gcGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCisKKy8qIFNtYXJ0TWVkaWEgKi8KKyNkZWZpbmUgQVQ5MV9TTUFSVE1FRElBX0JBU0UJMHg0MDAwMDAwMAkvKiBOQ1MzOiBTbWFydG1lZGlhIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCisvKiBNdWx0aS1NYXN0ZXIgTWVtb3J5IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MV9VSFBfQkFTRQkJMHgwMDMwMDAwMAkvKiBVU0IgSG9zdCBjb250cm9sbGVyICovCisKKy8qIENsb2NrcyAqLworI2RlZmluZSBBVDkxX1NMT1dfQ0xPQ0sJCTMyNzY4CQkvKiBzbG93IGNsb2NrICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0OTFfc3lzX3JlYWQodW5zaWduZWQgaW50IHJlZ19vZmZzZXQpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gKHZvaWQgX19pb21lbSAqKUFUOTFfVkFfQkFTRV9TWVM7CisKKwlyZXR1cm4gcmVhZGwoYWRkciArIHJlZ19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV9zeXNfd3JpdGUodW5zaWduZWQgaW50IHJlZ19vZmZzZXQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gKHZvaWQgX19pb21lbSAqKUFUOTFfVkFfQkFTRV9TWVM7CisKKwl3cml0ZWwodmFsdWUsIGFkZHIgKyByZWdfb2Zmc2V0KTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lvLmgKc2ltaWxhcml0eSBpbmRleCA3MSUKY29weSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmgKY29weSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lvLmgKaW5kZXggYjg3YTc1Zi4uMjNlNjcwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lvLmgKQEAgLTEsOSArMSw3IEBACiAvKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaW8uaAogICoKLSAqICBFeGNhbGlidXIgdGltZXggc3BlY2lmaWNhdGlvbnMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMCw3ICsxOCwxNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLS8qCi0gKiA/PwotICovCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKDUwMDAwMDAwIC8gMTYpCisjaWZuZGVmIF9fQVNNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0lPX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFybTkyMDAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhGRkZGRkZGRgorCisjZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiMDQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaXJxcy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lycXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU0FOIFBlb3BsZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICisKKyNkZWZpbmUgTlJfQUlDX0lSUVMgMzIKKworCisvKgorICogQWNrbm93bGVkZ2UgaW50ZXJydXB0IHdpdGggQUlDIGFmdGVyIGludGVycnVwdCBoYXMgYmVlbiBoYW5kbGVkLgorICogICAoYnkga2VybmVsL2lycS5jKQorICovCisjZGVmaW5lIGlycV9maW5pc2goaXJxKSBkbyB7IGF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX0VPSUNSLCAwKTsgfSB3aGlsZSAoMCkKKworCisvKgorICogSVJRIGludGVycnVwdCBzeW1ib2xzIGFyZSB0aGUgQVQ5MV9JRF8qIHN5bWJvbHMgaW4gYXQ5MXJtOTIwMC5oCisgKiBmb3IgSVJRcyBoYW5kbGVkIGRpcmVjdGx5IHRocm91Z2ggdGhlIEFJQywgb3IgZWxzZSB0aGUgQVQ5MV9QSU5fKgorICogc3ltYm9scyBpbiBncGlvLmggZm9yIG9uZXMgaGFuZGxlZCBpbmRpcmVjdGx5IGFzIEdQSU9zLgorICogV2UgbWFrZSBwcm92aXNpb24gZm9yIDQgYmFua3Mgb2YgR1BJTy4KKyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworI2RlZmluZQlOUl9JUlFTCQkoTlJfQUlDX0lSUVMgKyAoNCAqIDMyKSkKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIEluaXRpYWxpemUgdGhlIElSUSBjb250cm9sbGVyLgorICovCitleHRlcm4gdm9pZCBhdDkxcm05MjAwX2luaXRfaXJxKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9tZW1vcnkuaApzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9tZW1vcnkuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9tZW1vcnkuaAppbmRleCA5OTk1NDFiLi40NjJmMWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL21lbW9yeS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTAvbWVtb3J5LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvbWVtb3J5LmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNCBTQU4gUGVvcGxlCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNywxMyArMTcsMTQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKwogI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKIAotLyoKLSAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgotICovCi0jZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MDAwMDAwMDApCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBQSFlTX09GRlNFVAkoQVQ5MV9TRFJBTV9CQVNFKQorCiAKIC8qCiAgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwpAQCAtMzIsNyArMzMsOSBAQAogICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucwogICogICAgICAgICAgICAgIHRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCiAgKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCAtIFBBR0VfT0ZGU0VUICsgLypTRFJBTV9CQVNFKi8wKQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSh4IC0gLypTRFJBTV9CQVNFKi8wICsgUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fdmlydF90b19idXNfX2lzX2FfbWFjcm8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQorI2RlZmluZSBfX2J1c190b192aXJ0X19pc19hX21hY3JvCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9wYXJhbS5oCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGFyYW0uaAppbmRleCBiODdhNzVmLi45NDgwZjg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGFyYW0uaApAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9wYXJhbS5oCiAgKgotICogIEV4Y2FsaWJ1ciB0aW1leCBzcGVjaWZpY2F0aW9ucwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwLDcgKzE4LDExIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAorI2lmbmRlZiBfX0FTTV9BUkNIX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QQVJBTV9ICisKIC8qCi0gKiA/PworICogV2UgdXNlIGRlZmF1bHQgcGFyYW1zCiAgKi8KLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoNTAwMDAwMDAgLyAxNikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9waW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODk1MDFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9waW8uaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGlvLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QSU9fSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1VTQVJUMCh2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTE3X1RYRDAgfCBBVDkxX1BBMThfUlhEMCB8IEFUOTFfUEEyMF9DVFMwKTsKKworCS8qCisJICogRXJyYXRhICMzOSAtIFJUUzAgaXMgbm90IGludGVybmFsbHkgY29ubmVjdGVkIHRvIFBBMjEuICBXZSBuZWVkIHRvIGRyaXZlCisJICogIHRoZSBwaW4gbWFudWFsbHkuICBEZWZhdWx0IGlzIG9mZiAoUlRTIGlzIGFjdGl2ZSBsb3cpLgorCSAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRVIsIEFUOTFfUEEyMV9SVFMwKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fT0VSLCBBVDkxX1BBMjFfUlRTMCk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1NPRFIsIEFUOTFfUEEyMV9SVFMwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1VTQVJUMSh2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9CICsgUElPX1BEUiwgQVQ5MV9QQjE4X1JJMSB8IEFUOTFfUEIxOV9EVFIxCisJCQl8IEFUOTFfUEIyMF9UWEQxIHwgQVQ5MV9QQjIxX1JYRDEgfCBBVDkxX1BCMjNfRENEMQorCQkJfCBBVDkxX1BCMjRfQ1RTMSB8IEFUOTFfUEIyNV9EU1IxIHwgQVQ5MV9QQjI2X1JUUzEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fVVNBUlQyKHZvaWQpIHsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fUERSLCBBVDkxX1BBMjJfUlhEMiB8IEFUOTFfUEEyM19UWEQyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1VTQVJUMyh2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTVfVFhEMyB8IEFUOTFfUEE2X1JYRDMpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19CU1IsIEFUOTFfUEE1X1RYRDMgfCBBVDkxX1BBNl9SWEQzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX0RCR1Uodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEEzMV9EVFhEIHwgQVQ5MV9QQTMwX0RSWEQpOworfQorCisvKgorICogRW5hYmxlIHRoZSBUd28tV2lyZSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBBVDkxX0NmZ1BJT19UV0kodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEEyNV9UV0QgfCBBVDkxX1BBMjZfVFdDSyk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX0FTUiwgQVQ5MV9QQTI1X1RXRCB8IEFUOTFfUEEyNl9UV0NLKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fTURFUiwgQVQ5MV9QQTI1X1RXRCB8IEFUOTFfUEEyNl9UV0NLKTsJCS8qIG9wZW4gZHJhaW4gKi8KK30KKworLyoKKyAqIEVuYWJsZSB0aGUgU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fU1BJKHZvaWQpIHsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fUERSLCBBVDkxX1BBMF9NSVNPIHwgQVQ5MV9QQTFfTU9TSSB8IEFUOTFfUEEyX1NQQ0spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fU1BJX0NTMCh2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTNfTlBDUzApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fU1BJX0NTMSh2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTRfTlBDUzEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fU1BJX0NTMih2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTVfTlBDUzIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fU1BJX0NTMyh2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTZfTlBDUzMpOworfQorCisvKgorICogU2VsZWN0IHRoZSBEYXRhRmxhc2ggY2FyZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX0RhdGFGbGFzaENhcmQodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19QRVIsIEFUOTFfUElPX1AoNykpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19PRVIsIEFUOTFfUElPX1AoNykpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19DT0RSLCBBVDkxX1BJT19QKDcpKTsKK30KKworLyoKKyAqIEVuYWJsZSBOQU5EIEZsYXNoIChTbWFydE1lZGlhKSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBBVDkxX0NmZ1BJT19TbWFydE1lZGlhKHZvaWQpIHsKKwkvKiBlbmFibGUgUEMwPVNNQ0UsIFBDMT1TTU9FLCBQQzM9U01XRSwgQTIxPUNMRSwgQTIyPUFMRSAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQyArIFBJT19BU1IsIEFUOTFfUEMwX0JGQ0sgfCBBVDkxX1BDMV9CRlJEWV9TTU9FIHwgQVQ5MV9QQzNfQkZCQUFfU01XRSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9DICsgUElPX1BEUiwgQVQ5MV9QQzBfQkZDSyB8IEFUOTFfUEMxX0JGUkRZX1NNT0UgfCBBVDkxX1BDM19CRkJBQV9TTVdFKTsKKworCS8qIENvbmZpZ3VyZSBQQzIgYXMgaW5wdXQgKHNpZ25hbCBSRUFEWSBvZiB0aGUgU21hcnRNZWRpYSkgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0MgKyBQSU9fUEVSLCBBVDkxX1BDMl9CRkFWRCk7CS8qIGVuYWJsZSBkaXJlY3Qgb3V0cHV0IGVuYWJsZSAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQyArIFBJT19PRFIsIEFUOTFfUEMyX0JGQVZEKTsJLyogZGlzYWJsZSBvdXRwdXQgKi8KKworCS8qIENvbmZpZ3VyZSBQQjEgYXMgaW5wdXQgKHNpZ25hbCBDYXJkIERldGVjdCBvZiB0aGUgU21hcnRNZWRpYSkgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0IgKyBQSU9fUEVSLCBBVDkxX1BJT19QKDEpKTsJLyogZW5hYmxlIGRpcmVjdCBvdXRwdXQgZW5hYmxlICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9CICsgUElPX09EUiwgQVQ5MV9QSU9fUCgxKSk7CS8qIGRpc2FibGUgb3V0cHV0ICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEFUOTFfUElPX1NtYXJ0TWVkaWFfUkRZKHZvaWQpIHsKKwlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9QSU9DICsgUElPX1BEU1IpICYgQVQ5MV9QSU9fUCgyKSkgPyAxIDogMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgQVQ5MV9QSU9fU21hcnRNZWRpYV9DYXJkRGV0ZWN0KHZvaWQpIHsKKwlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9QSU9CICsgUElPX1BEU1IpICYgQVQ5MV9QSU9fUCgxKSkgPyAxIDogMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWM0MjY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9zeXN0ZW0uaApAQCAtMCwwICsxLDUxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9zeXN0ZW0uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCS8qCisJICogRGlzYWJsZSB0aGUgcHJvY2Vzc29yIGNsb2NrLiAgVGhlIHByb2Nlc3NvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKwkgKiByZS1lbmFibGVkIGJ5IGFuIGludGVycnVwdCBvciBieSBhIHJlc2V0LgorCSAqLworLy8JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NEUiwgQVQ5MV9QTUNfUENLKTsKKworCS8qCisJICogU2V0IHRoZSBwcm9jZXNzb3IgKENQMTUpIGludG8gJ1dhaXQgZm9yIEludGVycnVwdCcgbW9kZS4KKwkgKiBVbmxpa2UgZGlzYWJsaW5nIHRoZSBwcm9jZXNzb3IgY2xvY2sgdmlhIHRoZSBQTUMgKGFib3ZlKQorCSAqICB0aGlzIGFsbG93cyB0aGUgcHJvY2Vzc29yIHRvIGJlIHdva2VuIHZpYSBKVEFHLgorCSAqLworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwkvKgorCSAqIFBlcmZvcm0gYSBoYXJkd2FyZSByZXNldCB3aXRoIHRoZSB1c2Ugb2YgdGhlIFdhdGNoZG9nIHRpbWVyLgorCSAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfV0RNUiwgQVQ5MV9TVF9SU1RFTiB8IEFUOTFfU1RfRVhURU4gfCAxKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1NUX0NSLCBBVDkxX1NUX1dEUlNUKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC90aW1leC5oCnNpbWlsYXJpdHkgaW5kZXggNzclCmNvcHkgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oCmNvcHkgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC90aW1leC5oCmluZGV4IGI4N2E3NWYuLjNmMTEyZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC90aW1leC5oCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3RpbWV4LmgKICAqCi0gKiAgRXhjYWxpYnVyIHRpbWV4IHNwZWNpZmljYXRpb25zCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjAsNyArMTgsMTEgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0vKgotICogPz8KLSAqLwotI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCSg1MDAwMDAwMCAvIDE2KQorI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFfU0xPV19DTE9DSykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGRkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC91bmNvbXByZXNzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoZSBzZXJpYWwgcG9ydCBoYXMgYWxyZWFkeSBiZWVuCisgKiBpbml0aWFsaXplZCBieSB0aGUgYm9vdGxvYWRlci4gIFdlIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGVuYWJsZWQKKyAqIHBvcnQgaW4gdGhlIG1vc3QgcHJvYmFibGUgb3JkZXIuICBJZiB5b3UgZGlkbid0IHNldHVwIGEgcG9ydCBpbgorICogeW91ciBib290bG9hZGVyIHRoZW4gbm90aGluZyB3aWxsIGFwcGVhciAod2hpY2ggbWlnaHQgYmUgZGVzaXJlZCkuCisgKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQoreworCXZvaWQgX19pb21lbSAqc3lzID0gKHZvaWQgX19pb21lbSAqKSBBVDkxX0JBU0VfU1lTOwkvKiBwaHlzaWNhbCBhZGRyZXNzICovCisKKwl3aGlsZSAoKnMpIHsKKwkJd2hpbGUgKCEoX19yYXdfcmVhZGwoc3lzICsgQVQ5MV9EQkdVX1NSKSAmIEFUOTFfREJHVV9UWFJEWSkpIHsgYmFycmllcigpOyB9CisJCV9fcmF3X3dyaXRlbCgqcywgc3lzICsgQVQ5MV9EQkdVX1RIUik7CisJCWlmICgqcyA9PSAnXG4nKQl7CisJCQl3aGlsZSAoIShfX3Jhd19yZWFkbChzeXMgKyBBVDkxX0RCR1VfU1IpICYgQVQ5MV9EQkdVX1RYUkRZKSkgeyBiYXJyaWVyKCk7IH0KKwkJCV9fcmF3X3dyaXRlbCgnXHInLCBzeXMgKyBBVDkxX0RCR1VfVEhSKTsKKwkJfQorCQlzKys7CisJfQorCS8qIHdhaXQgZm9yIHRyYW5zbWlzc2lvbiB0byBjb21wbGV0ZSAqLworCXdoaWxlICghKF9fcmF3X3JlYWRsKHN5cyArIEFUOTFfREJHVV9TUikgJiBBVDkxX0RCR1VfVFhFTVBUWSkpIHsgYmFycmllcigpOyB9Cit9CisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdm1hbGxvYy5oCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3ZtYWxsb2MuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC92bWFsbG9jLmgKaW5kZXggNTQ2ZmI3ZC4uMzRkOTcxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdm1hbGxvYy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi92bWFsbG9jLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdm1hbGxvYy5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE3LDQgKzE3LDEwIEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCisKKyNpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0gKKyNkZWZpbmUgX19BU01fQVJDSF9WTUFMTE9DX0gKKworI2RlZmluZSBWTUFMTE9DX0VORAkJKEFUOTFfSU9fVklSVF9CQVNFICYgUEdESVJfTUFTSykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZGVidWctbWFjcm8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQxMWM1MS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9kZWJ1Zy1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZGVidWctbWFjcm8uUwotICoKLSAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKLSAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotKi8KLQotI2luY2x1ZGUgPGFzbS9hcmNoL2V4Y2FsaWJ1ci5oPgotI2RlZmluZSBVQVJUMDBfVFlQRQotI2luY2x1ZGUgPGFzbS9hcmNoL3VhcnQwMC5oPgotCi0JCS5tYWNybwlhZGRydWFydCxyeAotCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAotCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/Ci0JCWxkcglccngsID1FWENfVUFSVDAwX0JBU0UJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKLQkJb3JybmUJXHJ4LCBccngsICMweGZmMDAwMDAwCUAgdmlydHVhbCBiYXNlCi0JCW9ycm5lCVxyeCwgXHJ4LCAjMHgwMGYwMDAwMAotCQkuZW5kbQotCi0JCS5tYWNybwlzZW5kdWFydCxyZCxyeAotCQlzdHIJXHJkLCBbXHJ4LCAjVUFSVF9URCgwKV0KLQkJLmVuZG0KLQotCQkubWFjcm8Jd2FpdHVhcnQscmQscngKLTEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjVUFSVF9UU1IoMCldCi0JCWFuZCAJXHJkLCBccmQsICAjVUFSVF9UU1JfVFhfTEVWRUxfTVNLCi0JCWNtcAlccmQsICMxNQotCQliZXEJMTAwMWIKLQkJLmVuZG0KLQotCQkubWFjcm8JYnVzeXVhcnQscmQscngKLTEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjVUFSVF9UU1IoMCldCi0JCWFuZHMgCVxyZCwgXHJkLCAgI1VBUlRfVFNSX1RYX0xFVkVMX01TSwotCQlibmUJMTAwMWIKLQkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMjBlYzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNhbWVsb3QvZG1hLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZW50cnktbWFjcm8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2YWUwOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9lbnRyeS1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2VudHJ5LW1hY3JvLlMKLSAqCi0gKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIGVweGExMGRiIHBsYXRmb3JtCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLSNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgotI3VuZGVmIElSUV9NT0RFIC8qIHNhbWUgbmFtZSBkZWZpbmVkIGluIGFzbS9wcm9jL3B0cmFjZS5oICovCi0jaW5jbHVkZSA8YXNtL2FyY2gvaW50X2N0cmwwMC5oPgotCi0JCS5tYWNybwlkaXNhYmxlX2ZpcQotCQkuZW5kbQotCi0JCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQotCQlsZHIJXGlycXN0YXQsID1JTlRfSUQoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkKLQkJbGRyCVxpcnFucixbXGlycXN0YXRdCi0JCWNtcAlcaXJxbnIsIzAKLQkJc3VibmUJXGlycW5yLFxpcnFuciwjMQotCi0JCS5lbmRtCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2V0aGVyMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2V0aGVyMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjczN2I4YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9ldGhlcjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotI2lmbmRlZiBfX0VUSEVSMDBfSAotI2RlZmluZSBfX0VUSEVSMDBfSAotCi0KLQotLyoKLSAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgRXRoZXJuZXQgTUFDCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgQWx0ZXJhIENvcnBvcmF0aW9uIDIwMDAuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0KLS8qCi0qCVN0cnVjdHVyZXMgZm9yIHRoZSBETUEgY29udHJvbGxlcgotKi8KLXR5cGVkZWYgc3RydWN0IGZkYV9kZXNjCi0JewotCXN0cnVjdCBmZGFfZGVzYyAqCUZETmV4dDsKLQlsb25nCQkJCUZEU3lzdGVtOwotCWxvbmcJCQkJRkRTdGF0OwotCXNob3J0CQkJCUZETGVuZ3RoOwotCXNob3J0CQkJCUZEQ3RsOwotCX1GREFfREVTQzsKLQotdHlwZWRlZiBzdHJ1Y3QgYnVmX2Rlc2MKLQl7Ci0JY2hhciAqCUJ1ZmZEYXRhOwotCXNob3J0CUJ1ZmZMZW5ndGg7Ci0JY2hhcglCRFN0YXQ7Ci0JY2hhcglCREN0bDsKLQl9QlVGX0RFU0M7Ci0KLS8qCi0qCUNvbnRyb2wgbWFza3MgZm9yIHRoZSBETUEgY29udHJvbGxlcgotKi8KLSNkZWZpbmUgRkRDVExfQkRDT1VOVF9NU0sJCQkJCQkoMHgxRikKLSNkZWZpbmUgRkRDVExfQkRDT1VOVF9PRlNUCQkJCQkJKDApCi0jZGVmaW5lIEZEQ1RMX0ZSTU9QVF9NU0sJCQkJCQkoMHg3QzAwKQotI2RlZmluZSBGRENUTF9GUk1PUFRfT0ZTVAkJCQkJCSgxMCkKLSNkZWZpbmUJRkRDVExfQ09XTlNGRF9NU0sJCQkJCQkoMHg4MDAwKQotI2RlZmluZQlGRENUTF9DT1dOU0ZEX09GU1QJCQkJCQkoMTUpCi0KLSNkZWZpbmUgQkRDVExfUlhCRFNFUU5fTVNLCQkJCQkJKDB4N0YpCi0jZGVmaW5lIEJEQ1RMX1JYQkRTRVFOX09GU1QJCQkJCQkoMCkKLSNkZWZpbmUJQkRDVExfQ09XTlNCRF9NU0sJCQkJCQkoMHg4MCkKLSNkZWZpbmUJQkRDVExfQ09XTlNCRF9PRlNUCQkJCQkJKDcpCi0KLSNkZWZpbmUgRkRORVhUX0VPTF9NU0sJCQkJCQkJKDB4MSkKLSNkZWZpbmUgRkRORVhUX0VPTF9PRlNUCQkJCQkJCSgwKQotI2RlZmluZSBGRE5FWFRfRU9MX1BPSU5URVJfTVNLCQkJCQkoMHhGRkZGRkZGMCkKLSNkZWZpbmUgRkRORVhUX0VPTF9QT0lOVEVSX09GU1QJCQkJCSg0KQotCi0jZGVmaW5lIEVUSEVSX0FSQ19TSVpFICAgICAgICAgKDIxKQotCi0vKgotKglSZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgbWFza3MKLSovCi0jZGVmaW5lIEVUSEVSX0RNQV9DVEwoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTAwKSkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9ETUJVUlNUX09GU1QJCQkJKDIpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfRE1CVVJTVF9NU0sJCQkJKDB4MUZDKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1BPV1JNR01OVF9PRlNUCQkJKDExKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1BPV1JNR01OVF9NU0sJCQkJKDB4MTAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9UWEJJR0VfT0ZTVAkJCQkoMTQpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfVFhCSUdFX01TSwkJCQkoMHg0MDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JYQklHRV9PRlNUCQkJCSgxNSkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9SWEJJR0VfTVNLCQkJCSgweDgwMDApCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfVFhXQUtFVVBfT0ZTVAkJCQkoMTYpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfVFhXQUtFVVBfTVNLCQkJCSgweDEwMDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1NXSU5UUkVRX09GU1QJCQkJKDE3KQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1NXSU5UUkVRX01TSwkJCQkoMHgyMDAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9JTlRNQVNLX09GU1QJCQkJKDE4KQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX0lOVE1BU0tfTVNLCQkJCSgweDQwMDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX002NkVOU1RBVF9PRlNUCQkJKDE5KQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX002NkVOU1RBVF9NU0sJCQkJKDB4ODAwMDApCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1UWElOSVRfT0ZTVAkJCQkoMjApCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1UWElOSVRfTVNLCQkJCSgweDEwMDAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9STVJYSU5JVF9PRlNUCQkJCSgyMSkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9STVJYSU5JVF9NU0sJCQkJKDB4MjAwMDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JYQUxJR05fT0ZTVAkJCQkoMjIpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUlhBTElHTl9NU0sJCQkJKDB4QzAwMDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNU1dSUV9PRlNUCQkJCSgyNCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9STVNXUlFfTVNLCQkJCSgweDEwMDAwMDApCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1FTUJBTktfT0ZTVAkJCQkoMjUpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1FTUJBTktfTVNLCQkJCSgweDIwMDAwMDApCi0KLSNkZWZpbmUgRVRIRVJfVFhGUk1QVFIoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTA0KSkKLQotI2RlZmluZSBFVEhFUl9UWFRIUlNIKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDMwOCkpCi0KLSNkZWZpbmUgRVRIRVJfVFhQT0xMQ1RSKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDMwYykpCi0KLSNkZWZpbmUJRVRIRVJfQkxGUk1QVFIoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTEwKSkKLSNkZWZpbmUgRVRIRVJfQkxGRlJNUFRSX0VPTF9PRlNUCQkJCSgwKQotI2RlZmluZSBFVEhFUl9CTEZGUk1QVFJfRU9MX01TSwkJCQkJKDB4MSkKLSNkZWZpbmUgRVRIRVJfQkxGRlJNUFRSX0FERFJFU1NfT0ZTVAkJCSg0KQotI2RlZmluZSBFVEhFUl9CTEZGUk1QVFJfQUREUkVTU19NU0sJCQkJKDB4RkZGRkZGRjApCi0KLSNkZWZpbmUgRVRIRVJfUlhGUkFHU0laRShiYXNlKQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDExNCkpCi0jZGVmaW5lCUVUSEVSX1JYRlJBR1NJWkVfTUlORlJBR19PRlNUCQkJKDIpCi0jZGVmaW5lCUVUSEVSX1JYRlJBR1NJWkVfTUlORlJBR19NU0sJCQkoMHhGRkMpCi0jZGVmaW5lCUVUSEVSX1JYRlJBR1NJWkVfRU5QQUNLX09GU1QJCQkoMTUpCi0jZGVmaW5lCUVUSEVSX1JYRlJBR1NJWkVfRU5QQUNLX01TSwkJCQkoMHg4MDAwKQotCi0jZGVmaW5lIEVUSEVSX0lOVF9FTihiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMTgpKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fRkRBRVhFTl9PRlNUCQkJCSgwKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fRkRBRVhFTl9NU0sJCQkJKDB4MSkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0JMRVhFTl9PRlNUCQkJCSgxKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fQkxFWE5fTVNLCQkJCQkoMHgyKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fU1RBUkdBQlRFTl9PRlNUCQkJKDIpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9TVEFSR0FCVEVOX01TSwkJCQkoMHg0KQotI2RlZmluZSBFVEhFUl9JTlRfRU5fUlRBUkdBQlRFTl9PRlNUCQkJKDMpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9SVEFSR0FCVEVOX01TSwkJCQkoMHg4KQotI2RlZmluZSBFVEhFUl9JTlRfRU5fUk1BU0FCVEVOX09GU1QJCQkJKDQpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9STUFTQUJURU5fTVNLCQkJCSgweDEwKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fU1NZU0VSUkVOX09GU1QJCQkJKDUpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9TU1lTRVJSRU5fTVNLCQkJCSgweDIwKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fRFBBUkVSUkVOX09GU1QJCQkJKDYpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9EUEFSRVJSRU5fTVNLCQkJCSgweDQwKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fRUFSTk9URU5fT0ZTVAkJCQkoNykKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0VBUk5PVEVOX01TSwkJCQkoMHg4MCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0RQQVJERU5fT0ZTVAkJCQkoOCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0RQQVJERU5fTVNLCQkJCSgweDEwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0RNUEFSRVJSRU5fT0ZTVAkJCSg5KQotI2RlZmluZSBFVEhFUl9JTlRfRU5fRE1QQVJFUlJFTl9NU0sJCQkJKDB4MjAwKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fVFhDVExDTVBFTl9PRlNUCQkJKDEwKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fVFhDVExDTVBFTl9NU0sJCQkJKDB4NDAwKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fTlJBQlRFTl9PRlNUCQkJCSgxMSkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX05SQUJURU5fTVNLCQkJCSgweDgwMCkKLQotI2RlZmluZQlFVEhFUl9GREFfQkFTKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDExQykpCi0jZGVmaW5lIEVUSEVSX0ZEQV9CQVNfQUREUkVTU19PRlNUCQkJCSg0KQotI2RlZmluZSBFVEhFUl9GREFfQkFTX0FERFJFU1NfTVNLCQkJCSgweEZGRkZGRkYwKQotCi0jZGVmaW5lIEVUSEVSX0ZEQV9MSU0oYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTIwKSkKLSNkZWZpbmUgRVRIRVJfRkRBX0xJTV9DT1VOVF9PRlNUCQkJCSg0KQotI2RlZmluZSBFVEhFUl9GREFfTElNX0NPVU5UX01TSwkJCQkJKDB4RkZGMCkKLQotI2RlZmluZSBFVEhFUl9JTlRfU1JDKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEyNCkpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UTUFDVFhfT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRNQUNUWF9NU0sJCQkJKDB4MSkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRNQUNSWF9PRlNUCQkJCSgxKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVE1BQ1JYX01TSwkJCQkoMHgyKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVFNCVVNfT0ZTVAkJCQkoMikKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRTQlVTX01TSwkJCQkoMHg0KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEZEQUVYX09GU1QJCQkJKDMpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5URkRBRVhfTVNLCQkJCSgweDgpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UQkxFWF9PRlNUCQkJCSg0KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEJMRVhfTVNLCQkJCSgweDEwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX1NXSU5UX09GU1QJCQkJKDUpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfU1dJTlRfTVNLCQkJCQkoMHgyMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRFQVJOT1RfT0ZTVAkJCSg2KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEVBUk5PVF9NU0sJCQkJKDB4NDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfRE1QQVJFUlJfT0ZTVAkJCQkoNykKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19ETVBBUkVSUl9NU0sJCQkJKDB4ODApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5URVhCRF9PRlNUCQkJCSg4KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEVYQkRfTVNLCQkJCSgweDEwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRUWENUTENNUF9PRlNUCQkJKDkpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UVFhDVExDTVBfTVNLCQkJKDB4MjAwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVE5SQUJUX09GU1QJCQkJKDEwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVE5SQUJUX01TSwkJCQkoMHg0MDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfRkRBRVhfT0ZTVAkJCQkoMTEpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfRkRBRVhfTVNLCQkJCQkoMHg4MDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfQkxFWF9PRlNUCQkJCQkoMTIpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfQkxFWF9NU0sJCQkJCSgweDEwMDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfRE1QQVJFUlJTVEFUX09GU1QJCQkoMTMpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfRE1QQVJFUlJTVEFUX01TSwkJCSgweDIwMDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfTlJBQlRfT0ZTVAkJCQkoMTQpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfTlJBQlRfTVNLCQkJCQkoMHg0MDAwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVExJTktfT0ZTVAkJCQkoMTUpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UTElOS19NU0sJCQkJKDB4ODAwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRFWERFRkVSX09GU1QJCQkoMTYpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5URVhERUZFUl9NU0sJCQkoMHgxMDAwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRSTU9OX09GU1QJCQkJKDE3KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVFJNT05fTVNLCQkJCSgweDIwMDAwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lSUV9NU0sJCQkJCSgweDgzRkYpCi0KLSNkZWZpbmUgRVRIRVJfUEFVU0VDTlQoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4NDApKQotI2RlZmluZSBFVEhFUl9QQVVTRUNOVF9DT1VOVF9PRlNUCQkJCSgwKQotI2RlZmluZSBFVEhFUl9QQVVTRUNOVF9DT1VOVF9NU0sJCQkJKDB4RkZGRikKLQotI2RlZmluZSBFVEhFUl9SRU1QQVVDTlQoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4NDQpKQotI2RlZmluZSBFVEhFUl9SRU1QQVVDTlRfQ09VTlRfT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfUkVNUEFVQ05UX0NPVU5UX01TSwkJCQkoMHhGRkZGKQotCi0jZGVmaW5lIEVUSEVSX1RYQ09ORlJNU1RBVChiYXNlKQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDM0OCkpCi0jZGVmaW5lIEVUSEVSX1RYQ09ORlJNU1RBVF9UU19TVEFUX1ZBTFVFX09GU1QJKDApCi0jZGVmaW5lIEVUSEVSX1RYQ09ORlJNU1RBVF9UU19TVEFUX1ZBTFVFX01TSwkoMHgzRkZGRkYpCi0KLSNkZWZpbmUgRVRIRVJfTUFDX0NUTChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMCkpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfSEFMVFJFUV9PRlNUCQkJCSgwKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0hBTFRSRVFfTVNLCQkJCSgweDEpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfSEFMVElNTV9PRlNUCQkJCSgxKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0hBTFRJTU1fTVNLCQkJCSgweDIpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfUkVTRVRfT0ZTVAkJCQkoMikKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9SRVNFVF9NU0sJCQkJCSgweDQpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfRlVMTERVUF9PRlNUCQkJCSgzKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0ZVTExEVVBfTVNLCQkJCSgweDgpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfTUFDTE9PUF9PRlNUCQkJCSg0KQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX01BQ0xPT1BfTVNLCQkJCSgweDEwKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0NPTk5fT0ZTVAkJCQkJKDUpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfQ09OTl9NU0sJCQkJCSgweDYwKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0xPT1AxMF9PRlNUCQkJCSg3KQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0xPT1AxMF9NU0sJCQkJKDB4ODApCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfTE5LQ0hHX09GU1QJCQkJKDgpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfTE5LQ0hHX01TSwkJCQkoMHgxMDApCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfTUlTU1JPTExfT0ZTVAkJCQkoMTApCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfTUlTU1JPTExfTVNLCQkJCSgweDQwMCkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9FTk1JU1NST0xMX09GU1QJCQkoMTMpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfRU5NSVNTUk9MTF9NU0sJCQkoMHgyMDAwKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0xJTksxMF9PRlNUCQkJCSgxNSkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9MSU5LMTBfTVNLCQkJCSgweDgwMDApCi0KLSNkZWZpbmUgRVRIRVJfQVJDX0NUTChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHg0KSkKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9TVEFUSU9OQUNDX09GU1QJCQkoMCkKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9TVEFUSU9OQUNDX01TSwkJCSgweDEpCi0jZGVmaW5lCUVUSEVSX0FSQ19DVExfR1JPVVBBQ0NfT0ZTVAkJCQkoMSkKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9HUk9VUEFDQ19NU0sJCQkJKDB4MikKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9CUk9BREFDQ19PRlNUCQkJCSgyKQotI2RlZmluZQlFVEhFUl9BUkNfQ1RMX0JST0FEQUNDX01TSwkJCQkoMHg0KQotI2RlZmluZQlFVEhFUl9BUkNfQ1RMX05FR0FSQ19PRlNUCQkJCSgzKQotI2RlZmluZQlFVEhFUl9BUkNfQ1RMX05FR0FSQ19NU0sJCQkJKDB4OCkKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9DT01QRU5fT0ZTVAkJCQkoNCkKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9DT01QRU5fTVNLCQkJCSgweDEwKQotCi0jZGVmaW5lIEVUSEVSX1RYX0NUTChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHg4KSkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX1RYRU5fT0ZTVAkJCQkJKDApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9UWEVOX01TSwkJCQkJKDB4MSkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX1RYSEFMVF9PRlNUCQkJCSgxKQotI2RlZmluZSBFVEhFUl9UWF9DVExfVFhIQUxUX01TSwkJCQkJKDB4MikKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX05PUEFEX09GU1QJCQkJCSgyKQotI2RlZmluZSBFVEhFUl9UWF9DVExfTk9QQURfTVNLCQkJCQkoMHg0KQotI2RlZmluZSBFVEhFUl9UWF9DVExfTk9DUkNfT0ZTVAkJCQkJKDMpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9OT0NSQ19NU0sJCQkJCSgweDgpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9GQkFDS19PRlNUCQkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0ZCQUNLX01TSwkJCQkJKDB4MTApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9OT0VYREVGX09GU1QJCQkJKDUpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9OT0VYREVGX01TSwkJCQkoMHgyMCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX1NEUEFVU0VfT0ZTVAkJCQkoNikKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX1NEUEFVU0VfTVNLCQkJCSgweDQwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfTUlJMTBfT0ZTVAkJCQkJKDcpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9NSUkxMF9NU0sJCQkJCSgweDgwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5VTkRFUl9PRlNUCQkJCSg4KQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5VTkRFUl9NU0sJCQkJKDB4MTAwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5FWERFRkVSX09GU1QJCQkJKDkpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkVYREVGRVJfTVNLCQkJCSgweDIwMCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOTENBUlJfT0ZTVAkJCQkoMTApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkxDQVJSX01TSwkJCQkoMHg0MDApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkVYQ09MTF9PRlNUCQkJCSgxMSkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VORVhDT0xMX01TSwkJCQkoMHg4MDApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkxBVEVDT0xMX09GU1QJCQkJKDEyKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5MQVRFQ09MTF9NU0sJCQkJKDB4MTAwMCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOVFhQQVJfT0ZTVAkJCQkoMTMpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTlRYUEFSX01TSwkJCQkoMHgyMDAwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5DT01QX09GU1QJCQkJKDE0KQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5DT01QX01TSwkJCQkJKDB4NDAwMCkKLQotI2RlZmluZSBFVEhFUl9UWF9TVEFUKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweGMpKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYQ09MTF9PRlNUCQkJCSgwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYQ09MTF9NU0sJCQkJKDB4RikKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9FWENPTExfT0ZTVAkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9FWENPTExfTVNLCQkJCSgweDEwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYREVGRVJfT0ZTVAkJCQkoNSkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWERFRkVSX01TSwkJCQkoMHgyMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9QQVVTRURfT0ZTVAkJCQkoNikKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9QQVVTRURfTVNLCQkJCSgweDQwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX0lOVFRYX09GU1QJCQkJKDcpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfSU5UVFhfTVNLCQkJCQkoMHg4MCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9VTkRFUl9PRlNUCQkJCSg4KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1VOREVSX01TSwkJCQkJKDB4MTAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX0VYREVGRVJfT0ZTVAkJCQkoOSkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9FWERFRkVSX01TSwkJCQkoMHgyMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfTENBUlJfT0ZTVAkJCQkoMTApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfTENBUlJfTVNLCQkJCQkoMHg0MDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFgxMFNUQVRfT0ZTVAkJCQkoMTEpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFgxMFNUQVRfTVNLCQkJCSgweDgwMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9MQVRFQ09MTF9PRlNUCQkJCSgxMikKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9MQVRFQ09MTF9NU0sJCQkJKDB4MTAwMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWFBBUl9PRlNUCQkJCSgxMykKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWFBBUl9NU0sJCQkJCSgweDIwMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfQ09NUF9PRlNUCQkJCQkoMTQpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfQ09NUF9NU0sJCQkJCSgweDQwMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhIQUxURURfT0ZTVAkJCQkoMTUpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhIQUxURURfTVNLCQkJCSgweDgwMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfU1FFUlJfT0ZTVAkJCQkoMTYpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfU1FFUlJfTVNLCQkJCQkoMHgxMDAwMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWE1DQVNUX09GU1QJCQkJKDE3KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYTUNBU1RfTVNLCQkJCSgweDIwMDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYQkNBU1RfT0ZTVAkJCQkoMTgpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhCQ0FTVF9NU0sJCQkJKDB4NDAwMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVkxBTl9PRlNUCQkJCQkoMTkpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVkxBTl9NU0sJCQkJCSgweDgwMDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX01BQ0NfT0ZTVAkJCQkJKDIwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX01BQ0NfTVNLCQkJCQkoMHgxMDAwMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhQQVVTRV9PRlNUCQkJCSgyMSkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWFBBVVNFX01TSwkJCQkoMHgyMDAwMDApCi0KLSNkZWZpbmUgRVRIRVJfUlhfQ1RMKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEwKSkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1JYRU5fT0ZTVAkJCQkJKDApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9SWEVOX01TSwkJCQkJKDB4MSkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1JYSEFMVF9PRlNUCQkJCSgxKQotI2RlZmluZSBFVEhFUl9SWF9DVExfUlhIQUxUX01TSwkJCQkJKDB4MikKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0xPTkdFTl9PRlNUCQkJCSgyKQotI2RlZmluZSBFVEhFUl9SWF9DVExfTE9OR0VOX01TSwkJCQkJKDB4NCkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1NIT1JURU5fT0ZTVAkJCQkoMykKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1NIT1JURU5fTVNLCQkJCSgweDgpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9TVFJJUENSQ19PRlNUCQkJCSg0KQotI2RlZmluZSBFVEhFUl9SWF9DVExfU1RSSVBDUkNfTVNLCQkJCSgweDEwKQotI2RlZmluZSBFVEhFUl9SWF9DVExfUEFTU0NUTF9PRlNUCQkJCSg1KQotI2RlZmluZSBFVEhFUl9SWF9DVExfUEFTU0NUTF9NU0sJCQkJKDB4MjApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9JR05PUkVDUkNfT0ZTVAkJCQkoNikKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0lHTk9SRUNSQ19NU0sJCQkJKDB4NDApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkFMSUdOX09GU1QJCQkJKDgpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkFMSUdOX01TSwkJCQkoMHgxMDApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkNSQ0VSUl9PRlNUCQkJCSg5KQotI2RlZmluZSBFVEhFUl9SWF9DVExfRU5DUkNFUlJfTVNLCQkJCSgweDIwMCkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOT1ZFUl9PRlNUCQkJCSgxMCkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOT1ZFUl9NU0sJCQkJCSgweDQwMCkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOTE9OR0VSUl9PRlNUCQkJCSgxMSkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOTE9OR0VSUl9NU0sJCQkJKDB4ODAwKQotI2RlZmluZSBFVEhFUl9SWF9DVExfRU5SWFBBUl9PRlNUCQkJCSgxMykKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOUlhQQVJfTVNLCQkJCSgweDIwMDApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkdPT0RfT0ZTVAkJCQkoMTQpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkdPT0RfTVNLCQkJCQkoMHg0MDAwKQotCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVQoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTQpKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0xFTkVSUl9PRlNUCQkJCSg0KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0xFTkVSUl9NU0sJCQkJKDB4MTApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfQ1RMUkVDRF9PRlNUCQkJCSg1KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0NUTFJFQ0RfTVNLCQkJCSgweDIwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0lOVFJYX09GU1QJCQkJKDYpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfSU5UUlhfTVNLCQkJCQkoMHg0MCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWDEwU1RBVF9PRlNUCQkJCSg3KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYMTBTVEFUX01TSwkJCQkoMHg4MCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BTElHTkVSUl9PRlNUCQkJCSg4KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0FMSUdORVJSX01TSwkJCQkoMHgxMDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfQ1JDRVJSX09GU1QJCQkJKDkpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfQ1JDRVJSX01TSwkJCQkoMHgyMDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfT1ZFUkZMT1dfT0ZTVAkJCQkoMTApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfT1ZFUkZMT1dfTVNLCQkJCSgweDQwMCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9MT05HRVJSX09GU1QJCQkJKDExKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0xPTkdFUlJfTVNLCQkJCSgweDgwMCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWFBBUl9PRlNUCQkJCSgxMykKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWFBBUl9NU0sJCQkJCSgweDIwMDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfR09PRF9PRlNUCQkJCQkoMTQpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfR09PRF9NU0sJCQkJCSgweDQwMDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhIQUxURURfT0ZTVAkJCQkoMTUpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhIQUxURURfTVNLCQkJCSgweDgwMDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhNQ0FTVF9PRlNUCQkJCSgxNykKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWE1DQVNUX01TSwkJCQkoMHgxMDAwMCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWEJDQVNUX09GU1QJCQkJKDE4KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYQkNBU1RfTVNLCQkJCSgweDIwMDAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYVkxBTl9PRlNUCQkJCSgxOSkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWFZMQU5fTVNLCQkJCSgweDQwMDAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYUEFVU0VfT0ZTVAkJCQkoMjApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhQQVVTRV9NU0sJCQkJKDB4ODAwMDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfQVJDU1RBVFVTX09GU1QJCQkJKDIxKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0FSQ1NUQVRVU19NU0sJCQkJKDB4RjAwMDAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0FSQ0VOVF9PRlNUCQkJCSgyNSkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BUkNFTlRfTVNLCQkJCSgweDFGMDAwMDAwKQotCi0jZGVmaW5lIEVUSEVSX01EX0RBVEEoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTgpKQotCi0jZGVmaW5lIEVUSEVSX01EX0NBKGJhc2UpCQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxYykpCi0jZGVmaW5lIEVUSEVSX01EX0NBX0FERFJfT0ZTVAkJCQkJKDApCi0jZGVmaW5lIEVUSEVSX01EX0NBX0FERFJfTVNLCQkJCQkoMHgxRikKLSNkZWZpbmUgRVRIRVJfTURfQ0FfUEhZX09GU1QJCQkJCSg1KQotI2RlZmluZSBFVEhFUl9NRF9DQV9QSFlfTVNLCQkJCQkoMHgzRTApCi0jZGVmaW5lIEVUSEVSX01EX0NBX1dSX09GU1QJCQkJCSgxMCkKLSNkZWZpbmUgRVRIRVJfTURfQ0FfV1JfTVNLCQkJCQkoMHg0MDApCi0jZGVmaW5lIEVUSEVSX01EX0NBX0JVU1lfT0ZTVAkJCQkJKDExKQotI2RlZmluZSBFVEhFUl9NRF9DQV9CVVNZX01TSwkJCQkJKDB4ODAwKQotI2RlZmluZSBFVEhFUl9NRF9DQV9QUkVTVVBQX09GU1QJCQkJKDEyKQotI2RlZmluZSBFVEhFUl9NRF9DQV9QUkVTVVBQX01TSwkJCQkJKDB4MTAwMCkKLQotI2RlZmluZSBFVEhFUl9BUkNfQURSKGJhc2UpCSAgICAgIChFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDE2MCkpCi0jZGVmaW5lIEVUSEVSX0FSQ19BRFJfQVJDX0xPQ19PRlNUCQkJCSgyKQotI2RlZmluZSBFVEhFUl9BUkNfQURSX0FSQ19MT0NfTVNLCQkJCSgweEZGQykKLQotI2RlZmluZSBFVEhFUl9BUkNfREFUQShiYXNlKSAgKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MzY0KSkKLQotI2RlZmluZSBFVEhFUl9BUkNfRU5BKGJhc2UpICAgKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MjgpKQotI2RlZmluZSBFVEhFUl9BUkNfRU5BX01TSwkJCQkJKDB4MUZGRkZGKQotCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDJjKSkKLSNkZWZpbmUgRVRIRVJfUFJPTV9DVExfUFJPTV9BRERSX09GU1QJCQkoMCkKLSNkZWZpbmUgRVRIRVJfUFJPTV9DVExfUFJPTV9BRERSX01TSwkJCSgweDNGKQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9PUENPREVfT0ZTVAkJCQkoMTMpCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX09QQ09ERV9NU0sJCQkJKDB4NjAwMCkKLSNkZWZpbmUgRVRIRVJfUFJPTV9DVExfT1BDT0RFX1JFQURfTVNLCQkJKDB4NDAwMCkKLSNkZWZpbmUgRVRIRVJfUFJPTV9DVExfT1BDT0RFX1dSSVRFX01TSwkJCSgweDIwMDApCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX09QQ09ERV9FUkFTRV9NU0sJCQkoMHg2MDAwKQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9FTkFCTEVfTVNLCQkJCSgweDAwMzApCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX0RJU0FCTEVfTVNLCQkJCSgweDAwMDApCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX0JVU1lfT0ZTVAkJCQkoMTUpCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX0JVU1lfTVNLCQkJCQkoMHg4MDAwKQotCi0jZGVmaW5lIEVUSEVSX1BST01fREFUQShiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgzMCkpCi0KLSNkZWZpbmUgRVRIRVJfTUlTU19DTlQoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4M2MpKQotI2RlZmluZSBFVEhFUl9NSVNTX0NOVF9DT1VOVF9PRlNUCQkJCSgwKQotI2RlZmluZSBFVEhFUl9NSVNTX0NOVF9DT1VOVF9NU0sJCQkJKDB4RkZGRikKLQotI2RlZmluZSBFVEhFUl9DTlREQVRBKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDgwKSkKLQotI2RlZmluZSBFVEhFUl9DTlRBQ0MoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4ODQpKQotI2RlZmluZSBFVEhFUl9DTlRBQ0NfQUREUl9PRlNUCQkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfQ05UQUNDX0FERFJfTVNLCQkJCQkoMHhGRikKLSNkZWZpbmUgRVRIRVJfQ05UQUNDX1dSUkROX09GU1QJCQkJCSg4KQotI2RlZmluZSBFVEhFUl9DTlRBQ0NfV1JSRE5fTVNLCQkJCQkoMHgxMDApCi0jZGVmaW5lIEVUSEVSX0NOVEFDQ19DTEVBUl9PRlNUCQkJCQkoOSkKLSNkZWZpbmUgRVRIRVJfQ05UQUNDX0NMRUFSX01TSwkJCQkJKDB4MjAwKQotCi0jZGVmaW5lIEVUSEVSX1RYUk1JTlRFTihiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHg4OCkpCi0jZGVmaW5lIEVUSEVSX1RYUk1JTlRFTl9NU0sJCQkJCQkoMHgzRkZGRkZGRikKLQotI2RlZmluZSBFVEhFUl9SWFJNSU5URU4oYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4OEMpKQotI2RlZmluZSBFVEhFUl9SWFJNSU5URU5fTVNLCQkJCQkJKDB4RkZGRkZGKQotCi0vKgotKglSTU9OIFJlZ2lzdGVycwotKi8KLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMAkJCQkJCTB4MAotI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xCQkJCQkJMHgxCi0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjIJCQkJCQkweDIKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMwkJCQkJCTB4MwotI2RlZmluZQkJUk1PTl9DT0xMSVNJT040CQkJCQkJMHg0Ci0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjUJCQkJCQkweDUKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9ONgkJCQkJCTB4NgotI2RlZmluZQkJUk1PTl9DT0xMSVNJT043CQkJCQkJMHg3Ci0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjgJCQkJCQkweDgKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OOQkJCQkJCTB4OQotI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xMAkJCQkJMHhhCi0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjExCQkJCQkweGIKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTIJCQkJCTB4YwotI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xMwkJCQkJMHhkCi0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjE0CQkJCQkweGUKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTUJCQkJCTB4ZgotI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xNgkJCQkJMHgxMAotI2RlZmluZQkJUk1PTl9GUkFNRVNfV0lUSF9ERUZFUlJFRF9YTUlTU0lPTlMJMHgxMQotI2RlZmluZQkJUk1PTl9MQVRFX0NPTExJU0lPTlMJCQkJMHgxMgotI2RlZmluZQkJUk1PTl9GUkFNRVNfTE9TVF9EVUVfVE9fTUFDX1hNSVQJMHgxMwotI2RlZmluZQkJUk1PTl9DQVJSSUVSX1NFTlNFX0VSUk9SUwkJCTB4MTQKLSNkZWZpbmUJCVJNT05fRlJBTUVTX1dJVEhfRVhDRVNTSVZFX0RFRkVSQUwJMHgxNQotI2RlZmluZQkJUk1PTl9VTklDQVNUX0ZSQU1FU19UUkFOU01JVFRFRF9PSwkweDE2Ci0jZGVmaW5lCQlSTU9OX01VTFRJQ0FTVF9GUkFNRVNfWE1JVFRFRF9PSwkweDE3Ci0jZGVmaW5lCQlSTU9OX0JST0FEQ0FTVF9GUkFNRVNfWE1JVFRFRF9PSwkweDE4Ci0jZGVmaW5lCQlSTU9OX1NRRV9URVNUX0VSUk9SUwkJCQkweDE5Ci0jZGVmaW5lCQlSTU9OX1BBVVNFX01BQ0NUUkxfRlJBTUVTX1hNSVRURUQJMHgxQQotI2RlZmluZQkJUk1PTl9NQUNDVFJMX0ZSQU1FU19YTUlUVEVECQkJMHgxQgotI2RlZmluZQkJUk1PTl9WTEFOX0ZSQU1FU19YTUlUVEVECQkJMHgxQwotI2RlZmluZQkJUk1PTl9PQ1RFVFNfWE1JVFRFRF9PSwkJCQkweDFECi0jZGVmaW5lCQlSTU9OX09DVEVUU19YTUlUVEVEX09LX0hJCQkJMHgxRQotCi0jZGVmaW5lCQlSTU9OX1JYX1BBQ0tFVF9TSVpFUzAJCQkJMHg0MAotI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVMxCQkJCTB4NDEKLSNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTMgkJCQkweDQyCi0jZGVmaW5lCQlSTU9OX1JYX1BBQ0tFVF9TSVpFUzMJCQkJMHg0MwotI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVM0CQkJCTB4NDQKLSNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTNQkJCQkweDQ1Ci0jZGVmaW5lCQlSTU9OX1JYX1BBQ0tFVF9TSVpFUzYJCQkJMHg0NgotI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVM3CQkJCTB4NDcKLSNkZWZpbmUJCVJNT05fRlJBTUVfQ0hFQ0tfU0VRVUVOQ0VfRVJST1JTCTB4NDgKLSNkZWZpbmUJCVJNT05fQUxJR05NRU5UX0VSUk9SUwkJCQkweDQ5Ci0jZGVmaW5lCQlSTU9OX0ZSQUdNRU5UUwkJCQkJCTB4NEEKLSNkZWZpbmUJCVJNT05fSkFCQkVSUwkJCQkJCTB4NEIKLSNkZWZpbmUJCVJNT05fRlJBTUVTX0xPU1RfVE9fSU5UTUFDUkNWRVJSCTB4NEMKLSNkZWZpbmUJCVJNT05fVU5JQ0FTVF9GUkFNRVNfUkNWRF9PSwkJCTB4NEQKLSNkZWZpbmUJCVJNT05fTVVMVElDQVNUX0ZSQU1FU19SQ1ZEX09LCQkweDRFCi0jZGVmaW5lCQlSTU9OX0JST0FEQ0FTVF9GUkFNRVNfUkNWRF9PSwkJMHg0RgotI2RlZmluZQkJUk1PTl9JTl9SQU5HRV9MRU5HVEhfRVJST1JTCQkJMHg1MAotI2RlZmluZQkJUk1PTl9PVVRfT0ZfUkFOR0VfTEVOR1RIX0VSUk9SUwkJMHg1MQotI2RlZmluZQkJUk1PTl9WTEFOX0ZSQU1FU19SQ1ZECQkJCTB4NTIKLSNkZWZpbmUJCVJNT05fUEFVU0VfTUFDX0NUUkxfRlJBTUVTX1JDVkQJCTB4NTMKLSNkZWZpbmUJCVJNT05fTUFDX0NUUkxfRlJBTUVTX1JDVkQJCQkweDU0Ci0jZGVmaW5lCQlSTU9OX09DVEVUU19SQ1ZEX09LCQkJCQkweDU1Ci0jZGVmaW5lCQlSTU9OX09DVEVUU19SQ1ZEX09LX0hJCQkJCTB4NTYKLSNkZWZpbmUJCVJNT05fT0NURVRTX1JDVkRfT1RIRVIJCQkJMHg1NwotI2RlZmluZQkJUk1PTl9PQ1RFVFNfUkNWRF9PVEhFUl9ISQkJCTB4NTgKLQotI2VuZGlmIC8qIF9fRVRIRVIwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9leGNhbGlidXIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2V4Y2FsaWJ1ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzkxZGQ2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2V4Y2FsaWJ1ci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyogbWVnYWZ1bmN0aW9uIHdpemFyZDogJUFSTS1CYXNlZCBFeGNhbGlidXIlCi0gICBHRU5FUkFUSU9OOiBTVEFOREFSRAotICAgVkVSU0lPTjogV00xLjAKLSAgIE1PRFVMRTogQVJNLUJhc2VkIEV4Y2FsaWJ1cgotICAgUFJPSkVDVDogZXhjYWxpYnVyCi0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgIEZpbGUgTmFtZTogdjpcZW1iZWRkZWRcbGludXhcYm9vdGxkclxleGNhbGlidXIuaAotICAgTWVnYWZ1bmN0aW9uIE5hbWUocyk6IEFSTS1CYXNlZCBFeGNhbGlidXIKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIFRISVMgSVMgQSBXSVpBUkQtR0VORVJBVEVEIEZJTEUuIERPIE5PVCBFRElUIFRISVMgRklMRSEKLSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZglFWENBTElCVVJfSF9JTkNMVURFRAotI2RlZmluZQlFWENBTElCVVJfSF9JTkNMVURFRAotCi0jZGVmaW5lIEVYQ19ERUZJTkVfUFJPQ0VTU09SX0xJVFRMRV9FTkRJQU4KLSNkZWZpbmUgRVhDX0RFRklORV9CT09UX0ZST01fRkxBU0gKLQotI2RlZmluZQlFWENfSU5QVVRfQ0xLX0ZSRVFVRU5DWSAoNTAwMDAwMDApCi0jZGVmaW5lCUVYQ19BSEIxX0NMS19GUkVRVUVOQ1kgKDE1MDAwMDAwMCkKLSNkZWZpbmUJRVhDX0FIQjJfQ0xLX0ZSRVFVRU5DWSAoNzUwMDAwMDApCi0jZGVmaW5lCUVYQ19TRFJBTV9DTEtfRlJFUVVFTkNZICg3NTAwMDAwMCkKLQotLyogUmVnaXN0ZXJzIEJsb2NrICovCi0jZGVmaW5lCUVYQ19SRUdJU1RFUlNfQkFTRSAoMHg3ZmZmYzAwMCkKLSNkZWZpbmUJRVhDX01PREVfQ1RSTDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MDAwKQotI2RlZmluZQlFWENfSU9fQ1RSTDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MDQwKQotI2RlZmluZQlFWENfTU1BUDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MDgwKQotI2RlZmluZQlFWENfUExEX0NPTkZJRzAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MTQwKQotI2RlZmluZQlFWENfVElNRVIwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDIwMCkKLSNkZWZpbmUJRVhDX0lOVF9DVFJMMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHhjMDApCi0jZGVmaW5lCUVYQ19DTE9DS19DVFJMMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHgzMDApCi0jZGVmaW5lCUVYQ19XQVRDSERPRzAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4YTAwKQotI2RlZmluZQlFWENfVUFSVDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MjgwKQotI2RlZmluZQlFWENfRUJJMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHgzODApCi0jZGVmaW5lCUVYQ19TRFJBTTAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4NDAwKQotI2RlZmluZQlFWENfQUhCMTJfQlJJREdFX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDgwMCkKLSNkZWZpbmUJRVhDX1BMRF9TVFJJUEVfQlJJREdFX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDEwMCkKLSNkZWZpbmUJRVhDX1NUUklQRV9QTERfQlJJREdFX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDEwMCkKLQotI2RlZmluZQlFWENfUkVHSVNURVJTX1NJWkUgKDB4MDAwMDQwMDApCi0KLS8qIEVCSSBCbG9jayhzKSAqLwotI2RlZmluZQlFWENfRUJJX0JMT0NLMF9CQVNFICgweDQwMDAwMDAwKQotI2RlZmluZQlFWENfRUJJX0JMT0NLMF9TSVpFICgweDAwNDAwMDAwKQotI2RlZmluZQlFWENfRUJJX0JMT0NLMF9XSURUSCAoOCkKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzBfTk9OX0NBQ0hFQUJMRQotI2RlZmluZQlFWENfRUJJX0JMT0NLMV9CQVNFICgweDQwNDAwMDAwKQotI2RlZmluZQlFWENfRUJJX0JMT0NLMV9TSVpFICgweDAwNDAwMDAwKQotI2RlZmluZQlFWENfRUJJX0JMT0NLMV9XSURUSCAoMTYpCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0sxX05PTl9DQUNIRUFCTEUKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzJfQkFTRSAoMHg0MDgwMDAwMCkKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzJfU0laRSAoMHgwMDQwMDAwMCkKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzJfV0lEVEggKDE2KQotI2RlZmluZQlFWENfRUJJX0JMT0NLMl9OT05fQ0FDSEVBQkxFCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0szX0JBU0UgKDB4NDBjMDAwMDApCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0szX1NJWkUgKDB4MDA0MDAwMDApCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0szX1dJRFRIICgxNikKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzNfTk9OX0NBQ0hFQUJMRQotCi0vKiBTRFJBTSBCbG9jayhzKSAqLwotI2RlZmluZQlFWENfU0RSQU1fQkxPQ0swX0JBU0UgKDB4MDAwMDAwMDApCi0jZGVmaW5lCUVYQ19TRFJBTV9CTE9DSzBfU0laRSAoMHgwNDAwMDAwMCkKLSNkZWZpbmUJRVhDX1NEUkFNX0JMT0NLMF9XSURUSCAoMzIpCi0jZGVmaW5lCUVYQ19TRFJBTV9CTE9DSzFfQkFTRSAoMHgwNDAwMDAwMCkKLSNkZWZpbmUJRVhDX1NEUkFNX0JMT0NLMV9TSVpFICgweDA0MDAwMDAwKQotI2RlZmluZQlFWENfU0RSQU1fQkxPQ0sxX1dJRFRIICgzMikKLQotLyogU2luZ2xlIFBvcnQgU1JBTSBCbG9jayhzKSAqLwotI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMF9CQVNFICgweDA4MDAwMDAwKQotI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMF9TSVpFICgweDAwMDIwMDAwKQotI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMV9CQVNFICgweDA4MDIwMDAwKQotI2RlZmluZQlFWENfU1BTUkFNX0JMT0NLMV9TSVpFICgweDAwMDIwMDAwKQotCi0vKiBQTEQgQmxvY2socykgKi8KLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzBfQkFTRSAoMHg4MDAwMDAwMCkKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzBfU0laRSAoMHgwMDAwNDAwMCkKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzBfTk9OX0NBQ0hFQUJMRQotI2RlZmluZQlFWENfUExEX0JMT0NLMV9CQVNFICgweGYwMDAwMDApCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0sxX1NJWkUgKDB4MDAwMDQwMDApCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0sxX05PTl9DQUNIRUFCTEUKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzJfQkFTRSAoMHg4MDAwODAwMCkKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzJfU0laRSAoMHgwMDAwNDAwMCkKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzJfTk9OX0NBQ0hFQUJMRQotI2RlZmluZQlFWENfUExEX0JMT0NLM19CQVNFICgweDgwMDBjMDAwKQotI2RlZmluZQlFWENfUExEX0JMT0NLM19TSVpFICgweDAwMDA0MDAwKQotI2RlZmluZQlFWENfUExEX0JMT0NLM19OT05fQ0FDSEVBQkxFCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2hhcmR3YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OTJjMjkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaGFyZHdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwL2hhcmR3YXJlLmgKLSAqCi0gKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBvZiB0aGUgSW50ZWdyYXRvci4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkLgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAotCi0jaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KLQotLyoKLSAqIFdoZXJlIGluIHZpcnR1YWwgbWVtb3J5IHRoZSBJTyBkZXZpY2VzICh0aW1lcnMsIHN5c3RlbSBjb250cm9sbGVycwotICogYW5kIHNvIG9uKQotICovCi0jZGVmaW5lIElPX0JBU0UJCQkweGYwMDAwMDAwICAgICAgICAgICAgICAgICAvLyBWQSBvZiBJTyAKLSNkZWZpbmUgSU9fU0laRQkJCTB4MTAwMDAwMDAgICAgICAgICAgICAgICAgIC8vIEhvdyBtdWNoPwotI2RlZmluZSBJT19TVEFSVAkJRVhDX1JFR0lTVEVSU19CQVNFICAgICAgICAgICAgICAvLyBQQSBvZiBJTwotLyogbWFjcm8gdG8gZ2V0IGF0IElPIHNwYWNlIHdoZW4gcnVubmluZyB2aXJ0dWFsbHkgKi8KLSNkZWZpbmUgSU9fQUREUkVTUyh4KSAoKHgpIHwgMHhmMDAwMDAwMCkgCi0KLSNkZWZpbmUgRkxBU0hfVkJBU0UgICAgICAgICAgICAgMHhGRTAwMDAwMAotI2RlZmluZSBGTEFTSF9TSVpFICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIEZMQVNIX1NUQVJUICAgICAgICAgICAgIEVYQ19FQklfQkxPQ0swX0JBU0UKLSNkZWZpbmUgRkxBU0hfVkFERFIoeCkgKCh4KXwweEZFMDAwMDAwKQotLyoKLSAqIFNpbWlsYXIgdG8gYWJvdmUsIGJ1dCBmb3IgUENJIGFkZHJlc3NlcyAobWVtb3J5LCBJTywgQ29uZmlnIGFuZCB0aGUKLSAqIFYzIGNoaXAgaXRzZWxmKS4gIFdBUk5JTkc6IHRoaXMgaGFzIHRvIG1pcnJvciBkZWZpbml0aW9ucyBpbiBwbGF0Zm9ybS5oCi0gKi8KLSNpZiAwCi0jZGVmaW5lIFBDSV9NRU1PUllfVkFERFIgICAgICAgIDB4ZTgwMDAwMDAKLSNkZWZpbmUgUENJX0NPTkZJR19WQUREUiAgICAgICAgMHhlYzAwMDAwMAotI2RlZmluZSBQQ0lfVjNfVkFERFIgICAgICAgICAgICAweGVkMDAwMDAwCi0jZGVmaW5lIFBDSV9JT19WQUREUiAgICAgICAgICAgIDB4ZWUwMDAwMDAKLQotI2RlZmluZSBQQ0lPX0JBU0UJCVBDSV9JT19WQUREUgotI2RlZmluZSBQQ0lNRU1fQkFTRQkJUENJX01FTU9SWV9WQUREUgotCi0KLSNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKLQotI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHg2MDAwCi0jZGVmaW5lIFBDSUJJT1NfTUlOX01FTSAJMHgwMDEwMDAwMAotI2VuZGlmCi0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2ludF9jdHJsMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2ludF9jdHJsMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNlYzg2NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pbnRfY3RybDAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAqICAKLSAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgRXhjYWxpYnVyCi0gKiAgVGltZXIgVElNRVIwMC4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaWZuZGVmIF9fSU5UX0NUUkwwMF9ICi0jZGVmaW5lIF9fSU5UX0NUUkwwMF9ICi0KLSNkZWZpbmUgSU5UX01TKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4MDAgKSkKLSNkZWZpbmUgSU5UX01TX0ZDX01TSyAoMHgxMDAwMCkKLSNkZWZpbmUgSU5UX01TX0ZDX09GU1QgKDE2KQotI2RlZmluZSBJTlRfTVNfTTFfTVNLICgweDgwMDApCi0jZGVmaW5lIElOVF9NU19NMV9PRlNUICgxNSkKLSNkZWZpbmUgSU5UX01TX00wX01TSyAoMHg0MDAwKQotI2RlZmluZSBJTlRfTVNfTTBfT0ZTVCAoMTQpCi0jZGVmaW5lIElOVF9NU19BRV9NU0sgKDB4MjAwMCkKLSNkZWZpbmUgSU5UX01TX0FFX09GU1QgKDEzKQotI2RlZmluZSBJTlRfTVNfUEVfTVNLICgweDEwMDApCi0jZGVmaW5lIElOVF9NU19QRV9PRlNUICgxMikKLSNkZWZpbmUgSU5UX01TX0VFX01TSyAoMHgwODAwKQotI2RlZmluZSBJTlRfTVNfRUVfT0ZTVCAoMTEpCi0jZGVmaW5lIElOVF9NU19QU19NU0sgKDB4MDQwMCkKLSNkZWZpbmUgSU5UX01TX1BTX09GU1QgKDEwKQotI2RlZmluZSBJTlRfTVNfVDFfTVNLICgweDAyMDApCi0jZGVmaW5lIElOVF9NU19UMV9PRlNUICg5KQotI2RlZmluZSBJTlRfTVNfVDBfTVNLICgweDAxMDApCi0jZGVmaW5lIElOVF9NU19UMF9PRlNUICg4KQotI2RlZmluZSBJTlRfTVNfVUFfTVNLICgweDAwODApCi0jZGVmaW5lIElOVF9NU19VQV9PRlNUICg3KQotI2RlZmluZSBJTlRfTVNfSVBfTVNLICgweDAwNDApCi0jZGVmaW5lIElOVF9NU19JUF9PRlNUICg2KQotI2RlZmluZSBJTlRfTVNfUDVfTVNLICgweDAwMjApCi0jZGVmaW5lIElOVF9NU19QNV9PRlNUICg1KQotI2RlZmluZSBJTlRfTVNfUDRfTVNLICgweDAwMTApCi0jZGVmaW5lIElOVF9NU19QNF9PRlNUICg0KQotI2RlZmluZSBJTlRfTVNfUDNfTVNLICgweDAwMDgpCi0jZGVmaW5lIElOVF9NU19QM19PRlNUICgzKQotI2RlZmluZSBJTlRfTVNfUDJfTVNLICgweDAwMDQpCi0jZGVmaW5lIElOVF9NU19QMl9PRlNUICgyKQotI2RlZmluZSBJTlRfTVNfUDFfTVNLICgweDAwMDIpCi0jZGVmaW5lIElOVF9NU19QMV9PRlNUICgxKQotI2RlZmluZSBJTlRfTVNfUDBfTVNLICgweDAwMDEpCi0jZGVmaW5lIElOVF9NU19QMF9PRlNUICgwKQotCi0jZGVmaW5lIElOVF9NQyhiYXNlX2FkZHIpIChJTlRfQ1RSTDAwX1RZUEUgKGJhc2VfYWRkciAgKyAweDA0ICkpCi0jZGVmaW5lIElOVF9NQ19GQ19NU0sgKDB4MTAwMDApCi0jZGVmaW5lIElOVF9NQ19GQ19PRlNUICgxNikKLSNkZWZpbmUgSU5UX01DX00xX01TSyAoMHg4MDAwKQotI2RlZmluZSBJTlRfTUNfTTFfT0ZTVCAoMTUpCi0jZGVmaW5lIElOVF9NQ19NMF9NU0sgKDB4NDAwMCkKLSNkZWZpbmUgSU5UX01DX00wX09GU1QgKDE0KQotI2RlZmluZSBJTlRfTUNfQUVfTVNLICgweDIwMDApCi0jZGVmaW5lIElOVF9NQ19BRV9PRlNUICgxMykKLSNkZWZpbmUgSU5UX01DX1BFX01TSyAoMHgxMDAwKQotI2RlZmluZSBJTlRfTUNfUEVfT0ZTVCAoMTIpCi0jZGVmaW5lIElOVF9NQ19FRV9NU0sgKDB4MDgwMCkKLSNkZWZpbmUgSU5UX01DX0VFX09GU1QgKDExKQotI2RlZmluZSBJTlRfTUNfUFNfTVNLICgweDA0MDApCi0jZGVmaW5lIElOVF9NQ19QU19PRlNUICgxMCkKLSNkZWZpbmUgSU5UX01DX1QxX01TSyAoMHgwMjAwKQotI2RlZmluZSBJTlRfTUNfVDFfT0ZTVCAoOSkKLSNkZWZpbmUgSU5UX01DX1QwX01TSyAoMHgwMTAwKQotI2RlZmluZSBJTlRfTUNfVDBfT0ZTVCAoOCkKLSNkZWZpbmUgSU5UX01DX1VBX01TSyAoMHgwMDgwKQotI2RlZmluZSBJTlRfTUNfVUFfT0ZTVCAoNykKLSNkZWZpbmUgSU5UX01DX0lQX01TSyAoMHgwMDQwKQotI2RlZmluZSBJTlRfTUNfSVBfT0ZTVCAoNikKLSNkZWZpbmUgSU5UX01DX1A1X01TSyAoMHgwMDIwKQotI2RlZmluZSBJTlRfTUNfUDVfT0ZTVCAoNSkKLSNkZWZpbmUgSU5UX01DX1A0X01TSyAoMHgwMDEwKQotI2RlZmluZSBJTlRfTUNfUDRfT0ZTVCAoNCkKLSNkZWZpbmUgSU5UX01DX1AzX01TSyAoMHgwMDA4KQotI2RlZmluZSBJTlRfTUNfUDNfT0ZTVCAoMykKLSNkZWZpbmUgSU5UX01DX1AyX01TSyAoMHgwMDA0KQotI2RlZmluZSBJTlRfTUNfUDJfT0ZTVCAoMikKLSNkZWZpbmUgSU5UX01DX1AxX01TSyAoMHgwMDAyKQotI2RlZmluZSBJTlRfTUNfUDFfT0ZTVCAoMSkKLSNkZWZpbmUgSU5UX01DX1AwX01TSyAoMHgwMDAxKQotI2RlZmluZSBJTlRfTUNfUDBfT0ZTVCAoMCkKLQotI2RlZmluZSBJTlRfU1MoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgwOCApKQotI2RlZmluZSBJTlRfU1NfRkNfU1NLICgweDgwMDApCi0jZGVmaW5lIElOVF9TU19GQ19PRlNUICgxNSkKLSNkZWZpbmUgSU5UX1NTX00xX1NTSyAoMHg4MDAwKQotI2RlZmluZSBJTlRfU1NfTTFfT0ZTVCAoMTUpCi0jZGVmaW5lIElOVF9TU19NMF9TU0sgKDB4NDAwMCkKLSNkZWZpbmUgSU5UX1NTX00wX09GU1QgKDE0KQotI2RlZmluZSBJTlRfU1NfQUVfU1NLICgweDIwMDApCi0jZGVmaW5lIElOVF9TU19BRV9PRlNUICgxMykKLSNkZWZpbmUgSU5UX1NTX1BFX1NTSyAoMHgxMDAwKQotI2RlZmluZSBJTlRfU1NfUEVfT0ZTVCAoMTIpCi0jZGVmaW5lIElOVF9TU19FRV9TU0sgKDB4MDgwMCkKLSNkZWZpbmUgSU5UX1NTX0VFX09GU1QgKDExKQotI2RlZmluZSBJTlRfU1NfUFNfU1NLICgweDA0MDApCi0jZGVmaW5lIElOVF9TU19QU19PRlNUICgxMCkKLSNkZWZpbmUgSU5UX1NTX1QxX1NTSyAoMHgwMjAwKQotI2RlZmluZSBJTlRfU1NfVDFfT0ZTVCAoOSkKLSNkZWZpbmUgSU5UX1NTX1QwX1NTSyAoMHgwMTAwKQotI2RlZmluZSBJTlRfU1NfVDBfT0ZTVCAoOCkKLSNkZWZpbmUgSU5UX1NTX1VBX1NTSyAoMHgwMDgwKQotI2RlZmluZSBJTlRfU1NfVUFfT0ZTVCAoNykKLSNkZWZpbmUgSU5UX1NTX0lQX1NTSyAoMHgwMDQwKQotI2RlZmluZSBJTlRfU1NfSVBfT0ZTVCAoNikKLSNkZWZpbmUgSU5UX1NTX1A1X1NTSyAoMHgwMDIwKQotI2RlZmluZSBJTlRfU1NfUDVfT0ZTVCAoNSkKLSNkZWZpbmUgSU5UX1NTX1A0X1NTSyAoMHgwMDEwKQotI2RlZmluZSBJTlRfU1NfUDRfT0ZTVCAoNCkKLSNkZWZpbmUgSU5UX1NTX1AzX1NTSyAoMHgwMDA4KQotI2RlZmluZSBJTlRfU1NfUDNfT0ZTVCAoMykKLSNkZWZpbmUgSU5UX1NTX1AyX1NTSyAoMHgwMDA0KQotI2RlZmluZSBJTlRfU1NfUDJfT0ZTVCAoMikKLSNkZWZpbmUgSU5UX1NTX1AxX1NTSyAoMHgwMDAyKQotI2RlZmluZSBJTlRfU1NfUDFfT0ZTVCAoMSkKLSNkZWZpbmUgSU5UX1NTX1AwX1NTSyAoMHgwMDAxKQotI2RlZmluZSBJTlRfU1NfUDBfT0ZTVCAoMCkKLQotI2RlZmluZSBJTlRfUlMoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgwQyApKQotI2RlZmluZSBJTlRfUlNfRkNfUlNLICgweDEwMDAwKQotI2RlZmluZSBJTlRfUlNfRkNfT0ZTVCAoMTYpCi0jZGVmaW5lIElOVF9SU19NMV9SU0sgKDB4ODAwMCkKLSNkZWZpbmUgSU5UX1JTX00xX09GU1QgKDE1KQotI2RlZmluZSBJTlRfUlNfTTBfUlNLICgweDQwMDApCi0jZGVmaW5lIElOVF9SU19NMF9PRlNUICgxNCkKLSNkZWZpbmUgSU5UX1JTX0FFX1JTSyAoMHgyMDAwKQotI2RlZmluZSBJTlRfUlNfQUVfT0ZTVCAoMTMpCi0jZGVmaW5lIElOVF9SU19QRV9SU0sgKDB4MTAwMCkKLSNkZWZpbmUgSU5UX1JTX1BFX09GU1QgKDEyKQotI2RlZmluZSBJTlRfUlNfRUVfUlNLICgweDA4MDApCi0jZGVmaW5lIElOVF9SU19FRV9PRlNUICgxMSkKLSNkZWZpbmUgSU5UX1JTX1BTX1JTSyAoMHgwNDAwKQotI2RlZmluZSBJTlRfUlNfUFNfT0ZTVCAoMTApCi0jZGVmaW5lIElOVF9SU19UMV9SU0sgKDB4MDIwMCkKLSNkZWZpbmUgSU5UX1JTX1QxX09GU1QgKDkpCi0jZGVmaW5lIElOVF9SU19UMF9SU0sgKDB4MDEwMCkKLSNkZWZpbmUgSU5UX1JTX1QwX09GU1QgKDgpCi0jZGVmaW5lIElOVF9SU19VQV9SU0sgKDB4MDA4MCkKLSNkZWZpbmUgSU5UX1JTX1VBX09GU1QgKDcpCi0jZGVmaW5lIElOVF9SU19JUF9SU0sgKDB4MDA0MCkKLSNkZWZpbmUgSU5UX1JTX0lQX09GU1QgKDYpCi0jZGVmaW5lIElOVF9SU19QNV9SU0sgKDB4MDAyMCkKLSNkZWZpbmUgSU5UX1JTX1A1X09GU1QgKDUpCi0jZGVmaW5lIElOVF9SU19QNF9SU0sgKDB4MDAxMCkKLSNkZWZpbmUgSU5UX1JTX1A0X09GU1QgKDQpCi0jZGVmaW5lIElOVF9SU19QM19SU0sgKDB4MDAwOCkKLSNkZWZpbmUgSU5UX1JTX1AzX09GU1QgKDMpCi0jZGVmaW5lIElOVF9SU19QMl9SU0sgKDB4MDAwNCkKLSNkZWZpbmUgSU5UX1JTX1AyX09GU1QgKDIpCi0jZGVmaW5lIElOVF9SU19QMV9SU0sgKDB4MDAwMikKLSNkZWZpbmUgSU5UX1JTX1AxX09GU1QgKDEpCi0jZGVmaW5lIElOVF9SU19QMF9SU0sgKDB4MDAwMSkKLSNkZWZpbmUgSU5UX1JTX1AwX09GU1QgKDApCi0KLSNkZWZpbmUgSU5UX0lEKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4MTAgKSkKLSNkZWZpbmUgSU5UX0lEX0lEX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX0lEX0lEX09GU1QgKDApCi0KLSNkZWZpbmUgSU5UX1BMRF9QUklPUklUWShiYXNlX2FkZHIpIChJTlRfQ1RSTDAwX1RZUEUgKGJhc2VfYWRkciAgKyAweDE0ICkpCi0jZGVmaW5lIElOVF9QTERfUFJJT1JJVFlfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BMRF9QUklPUklUWV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BMRF9QUklPUklUWV9HQV9NU0sgKDB4NDApCi0jZGVmaW5lIElOVF9QTERfUFJJT1JJVFlfR0FfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfTU9ERShiYXNlX2FkZHIpIChJTlRfQ1RSTDAwX1RZUEUgKGJhc2VfYWRkciAgKyAweDE4ICkpCi0jZGVmaW5lIElOVF9NT0RFX01PREVfTVNLICgweDMpCi0jZGVmaW5lIElOVF9NT0RFX01PREVfT0ZTVCAoMCkKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDAoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg4MCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDBfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDBfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDBfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDEoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg4NCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDFfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDFfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDFfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDIoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg4OCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDJfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDJfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDJfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDMoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg4QyApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDNfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDNfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDNfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDQoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg5MCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDRfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0X1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDRfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDRfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDUoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg5NCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDVfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1X1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDVfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUDVfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfSVAoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg5NCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfSVBfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfSVBfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfSVBfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVUEoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHg5QyApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVUFfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVUFfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVUFfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDAoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhBMCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDBfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDBfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDBfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDEoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhBNCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDFfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDFfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfVDFfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUFMoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhBOCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUFNfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUFNfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUFNfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRUUoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhBQyApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRUVfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRUVfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRUVfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUEUoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhCMCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUEVfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUEVfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfUEVfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfQUUoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhCNCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfQUVfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfQUVfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfQUVfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTAoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhCOCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTBfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00wX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTBfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTBfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTEoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhCQyApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTFfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00xX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTFfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfTTFfRlFfT0ZTVCAoNikKLQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRkMoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHhDMCApKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRkNfUFJJX01TSyAoMHgzRikKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDX1BSSV9PRlNUICgwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRkNfRlFfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUFJJT1JJVFlfRkNfRlFfT0ZTVCAoNikKLQotI2VuZGlmIC8qIF9fSU5UX0NUUkwwMF9IICovCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTEwMGMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaW8uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAotI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICi0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLQotI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKLQotCi0vKgotICogR2VuZXJpYyB2aXJ0dWFsIHJlYWQvd3JpdGUKLSAqLwotLyojZGVmaW5lIG91dHN3ICAgX19hcmNoX3dyaXRlc3cKLSNkZWZpbmUgb3V0c2wgICBfX2FyY2hfd3JpdGVzbAotI2RlZmluZSBvdXRzYiAgIF9fYXJjaF93cml0ZXNiCi0jZGVmaW5lIGluc2IgICAgX19hcmNoX3JlYWRzYgotI2RlZmluZSBpbnN3ICAgIF9fYXJjaF9yZWFkc3cKLSNkZWZpbmUgaW5zbCAgICBfX2FyY2hfcmVhZHNsKi8KLQotI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fbWVtX3BjaShhKSAgICAgICAgICAgIChhKSAKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pcnFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNzU4YTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaXJxcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jYW1lbG90L2lycXMuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLS8qIFVzZSB0aGUgRXhjYWxpYnVyIGNoaXAgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgSU5UX0NUUkwwMF9UWVBFCi0jaW5jbHVkZSAiYXNtL2FyY2gvaW50X2N0cmwwMC5oIgotCi0KLSNkZWZpbmUgSVJRX1BMRDAgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfUDBfT0ZTVAotI2RlZmluZSBJUlFfUExEMSAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QMV9PRlNUCi0jZGVmaW5lIElSUV9QTEQyICAgICAgICAgICAgICAgICAgICAgSU5UX01TX1AyX09GU1QKLSNkZWZpbmUgSVJRX1BMRDMgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfUDNfT0ZTVAotI2RlZmluZSBJUlFfUExENCAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QNF9PRlNUCi0jZGVmaW5lIElSUV9QTEQ1ICAgICAgICAgICAgICAgICAgICAgSU5UX01TX1A1X09GU1QKLSNkZWZpbmUgSVJRX0VYVCAgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfSVBfT0ZTVAotI2RlZmluZSBJUlFfVUFSVCAgICAgICAgICAgICAgICAgICAgIElOVF9NU19VQV9PRlNUCi0jZGVmaW5lIElSUV9USU1FUjAgICAgICAgICAgICAgICAgICAgSU5UX01TX1QwX09GU1QKLSNkZWZpbmUgSVJRX1RJTUVSMSAgICAgICAgICAgICAgICAgICBJTlRfTVNfVDFfT0ZTVAotI2RlZmluZSBJUlFfUExMICAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QTExfT0ZTVAotI2RlZmluZSBJUlFfRUJJICAgICAgICAgICAgICAgICAgICAgIElOVF9NU19FQklfT0ZTVAotI2RlZmluZSBJUlFfU1RSSVBFX0JSSURHRSAgICAgICAgICAgIElOVF9NU19QTExfT0ZTVAotI2RlZmluZSBJUlFfQUhCX0JSSURHRSAgICAgICAgICAgICAgIElOVF9NU19QTExfT0ZTVAotI2RlZmluZSBJUlFfQ09NTVJYICAgICAgICAgICAgICAgICAgIElOVF9NU19DUl9PRlNUCi0jZGVmaW5lIElSUV9DT01NVFggICAgICAgICAgICAgICAgICAgSU5UX01TX0NUX09GU1QKLSNkZWZpbmUgSVJRX0ZBU1RfQ09NTSAgICAgICAgICAgICAgICBJTlRfTVNfRkNfT0ZTVAotCi0jZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgKElOVF9NU19GQ19PRlNUICsgMSkKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvbW9kZV9jdHJsMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL21vZGVfY3RybDAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YTdlZmEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvbW9kZV9jdHJsMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNpZm5kZWYgX19NT0RFX0NUUkwwMF9ICi0jZGVmaW5lIF9fTU9ERV9DVFJMMDBfSAotCi0vKgotICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSByZXNldCBhbmQgbW9kZSBjb250cm9sCi0gKi8KLQotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLQotCi0jZGVmaW5lIEJPT1RfQ1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICApKQotI2RlZmluZSBCT09UX0NSX0JGX01TSyAoMHgxKQotI2RlZmluZSBCT09UX0NSX0JGX09GU1QgKDApCi0jZGVmaW5lIEJPT1RfQ1JfSE1fTVNLICgweDIpCi0jZGVmaW5lIEJPT1RfQ1JfSE1fT0ZTVCAoMSkKLSNkZWZpbmUgQk9PVF9DUl9SRV9NU0sgKDB4NCkKLSNkZWZpbmUgQk9PVF9DUl9SRV9PRlNUICgyKQotCi0jZGVmaW5lIFJFU0VUX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDQgKSkKLSNkZWZpbmUgUkVTRVRfU1JfV1JfTVNLICgweDEpCi0jZGVmaW5lIFJFU0VUX1NSX1dSX09GU1QgKDApCi0jZGVmaW5lIFJFU0VUX1NSX0NSX01TSyAoMHgyKQotI2RlZmluZSBSRVNFVF9TUl9DUl9PRlNUICgxKQotI2RlZmluZSBSRVNFVF9TUl9KVF9NU0sgKDB4NCkKLSNkZWZpbmUgUkVTRVRfU1JfSlRfT0ZTVCAoMikKLSNkZWZpbmUgUkVTRVRfU1JfRVJfTVNLICgweDgpCi0jZGVmaW5lIFJFU0VUX1NSX0VSX09GU1QgKDMpCi0KLSNkZWZpbmUgSURfQ09ERShCQVNFX0FERFIpIChNT0RFX0NUUkwwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwOCApKQotCi0jZGVmaW5lIFNSQU0wX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDIwICkpCi0jZGVmaW5lIFNSQU0wX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQotI2RlZmluZSBTUkFNMF9TUl9TSVpFX09GU1QgKDEyKQotCi0jZGVmaW5lIFNSQU0xX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDI0ICkpCi0jZGVmaW5lIFNSQU0xX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQotI2RlZmluZSBTUkFNMV9TUl9TSVpFX09GU1QgKDEyKQotCi0jZGVmaW5lIERQU1JBTTBfU1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MzAgKSkKLQotI2RlZmluZSBEUFNSQU0wX1NSX01PREVfTVNLICgweEYpCi0jZGVmaW5lIERQU1JBTTBfU1JfTU9ERV9PRlNUICgwKQotI2RlZmluZSBEUFNSQU0wX1NSX0dMQkxfTVNLICgweDMwKQotI2RlZmluZSBEUFNSQU0wX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQotI2RlZmluZSBEUFNSQU0wX1NSX1NJWkVfT0ZTVCAoMTIpCi0KLSNkZWZpbmUgRFBTUkFNMF9MQ1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MzQgKSkKLSNkZWZpbmUgRFBTUkFNMF9MQ1JfTENLQUREUl9NU0sgKDB4MUZGRTApCi0jZGVmaW5lIERQU1JBTTBfTENSX0xDS0FERFJfT0ZTVCAoNCkKLQotI2RlZmluZSBEUFNSQU0xX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDM4ICkpCi0jZGVmaW5lIERQU1JBTTFfU1JfTU9ERV9NU0sgKDB4RikKLSNkZWZpbmUgRFBTUkFNMV9TUl9NT0RFX09GU1QgKDApCi0jZGVmaW5lIERQU1JBTTFfU1JfR0xCTF9NU0sgKDB4MzApCi0jZGVmaW5lIERQU1JBTTFfU1JfR0xCTF9PRlNUICg0KQotI2RlZmluZSBEUFNSQU0xX1NSX1NJWkVfTVNLICgweEZGRkZGMDAwKQotI2RlZmluZSBEUFNSQU0xX1NSX1NJWkVfT0ZTVCAoMTIpCi0KLSNkZWZpbmUgRFBTUkFNMV9MQ1IoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICArIDB4M0MgKSkKLSNkZWZpbmUgRFBTUkFNMV9MQ1JfTENLQUREUl9NU0sgKDB4MUZGRTApCi0jZGVmaW5lIERQU1JBTTFfTENSX0xDS0FERFJfT0ZTVCAoNCkKLQotI2VuZGlmIC8qIF9fTU9ERV9DVFJMMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsYXRmb3JtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyOWJiMGYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGxhdGZvcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBQTEFURk9STV9ICi0jZGVmaW5lIFBMQVRGT1JNX0gKLSNpbmNsdWRlICJleGNhbGlidXIuaCIKLQotI2RlZmluZSBNQVhJUlFOVU0gMTUgCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGxkX2NvbmYwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGxkX2NvbmYwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWYyYzM4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsZF9jb25mMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLSNpZm5kZWYgX19QTERfQ09ORjAwX0gKLSNkZWZpbmUgX19QTERfQ09ORjAwX0gKLQotLyoKLSAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgUExEIENvbmZpZ3VyYXRpb24gTG9naWMKLSAqLwotCi0vKgotICogIAotICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBFeGNhbGlidXIKLSAqICBJbnRlcnJ1cHQgY29udHJvbGxlciBJTlRfQ1RSTDAwLgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0gCi0jZGVmaW5lIENPTkZJR19DT05UUk9MKEJBU0VfQUREUikgKFBMRF9DT05GMDBfVFlQRSAoQkFTRV9BRERSKSkgIAotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9MS19NU0sgKDB4MSkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfTEtfT0ZTVCAoMCkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfQ09fTVNLICgweDIpCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0NPX09GU1QgKDEpCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0JfTVNLICAoMHg0KQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9CX09GU1QgKDIpCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX1BDX01TSyAoMHg4KQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9QQ19PRlNUICgzKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9FX01TSyAoMHgxMCkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfRV9PRlNUICg0KQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9FU19NU0sgKDB4RTApCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0VTX09GU1QgKDUpCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0VTXzBfTVNLICgweDIwKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9FU18xX01TSyAoMHg0MCkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfRVNfMl9NU0sgKDB4ODApCi0KLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfQ0xPQ0soQkFTRV9BRERSKSAoUExEX0NPTkYwMF9UWVBFIChCQVNFX0FERFIgICsgMHg0ICkpCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0NMT0NLX1JBVElPX01TSyAoMHhGRkZGKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9DTE9DS19SQVRJT19PRlNUICgwKQotCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0RBVEEoQkFTRV9BRERSKSAoUExEX0NPTkYwMF9UWVBFIChCQVNFX0FERFIgICsgMHg4ICkpCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0RBVEFfTVNLICgweEZGRkZGRkZGKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9EQVRBX09GU1QgKDApCi0KLSNkZWZpbmUgQ09ORklHX1VOTE9DSyhCQVNFX0FERFIpIChQTERfQ09ORjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweEMgKSkgCi0jZGVmaW5lIENPTkZJR19VTkxPQ0tfTVNLICgweEZGRkZGRkZGKQotI2RlZmluZSBDT05GSUdfVU5MT0NLX09GU1QgKDApCi0KLSNkZWZpbmUgQ09ORklHX1VOTE9DS19NQUdJQyAoMHg1NTRFNEM0QikKLQotI2VuZGlmIC8qIF9fUExEX0NPTkYwMF9IICovCi0KLQotCi0KLQotCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3N5c3RlbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDViMDkyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3N5c3RlbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9zeXN0ZW0uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKLSNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAotCi0jaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQotewotCS8qCi0JICogVGhpcyBzaG91bGQgZG8gYWxsIHRoZSBjbG9jayBzd2l0Y2hpbmcKLQkgKiBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHRyaWNrcwotCSAqLwotCWNwdV9kb19pZGxlKCk7Ci19Ci0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCi17Ci0JLyogSG1tLi4uIFdlIGNhbiBwcm9iYWJseSBkbyBzb21ldGhpbmcgd2l0aCB0aGUgd2F0Y2hkb2cuLi4gKi8KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90ZGtwaHkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3Rka3BoeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTEwN2JkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3Rka3BoeS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qCi0gKiAgbGludXgvZHJpdmVycy90ZGtwaHkuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpZm5kZWYgX19UREtQSFlfSAotI2RlZmluZSBfX1RES1BIWV9ICi0KLS8qCi0gKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIFRESyA3OFEyMTIwIFBIWSAKLSAqIHdoaWNoIGlzIG9uIHRoZSBDYW1lbG90IGJvYXJkCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgQWx0ZXJhIENvcnBvcmF0aW9uIDIwMDAuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0jZGVmaW5lIFBIWV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfQ09OVFJPTF9DT0xUX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwKQotI2RlZmluZSBQSFlfQ09OVFJPTF9DT0xUX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg3KQotI2RlZmluZSBQSFlfQ09OVFJPTF9EVVBMRVhfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfRFVQTEVYX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfUkFORUdfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX1JBTkVHX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkpCi0jZGVmaW5lIFBIWV9DT05UUk9MX0lTT19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX0lTT19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwKQotI2RlZmluZSBQSFlfQ09OVFJPTF9QV1JETl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfUFdSRE5fT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTEpCi0jZGVmaW5lIFBIWV9DT05UUk9MX0FORUdFTl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfQU5FR0VOX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTIpCi0jZGVmaW5lIFBIWV9DT05UUk9MX1NQRUVEU0xfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfU1BFRURTTF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTMpCi0jZGVmaW5lIFBIWV9DT05UUk9MX0xPT1BCS19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfTE9PUEJLX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQpCi0jZGVmaW5lIFBIWV9DT05UUk9MX1JFU0VUX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfUkVTRVRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTUpCi0KLSNkZWZpbmUgUEhZX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIFBIWV9TVEFUVVNfRVRYRF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxKQotI2RlZmluZSBQSFlfU1RBVFVTX0VYVERfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfU1RBVFVTX0pBQl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MikKLSNkZWZpbmUgUEhZX1NUQVRVU19KQUJfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQotI2RlZmluZSBQSFlfU1RBVFVTX0xJTktfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NCkKLSNkZWZpbmUgUEhZX1NUQVRVU19MSU5LX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikKLSNkZWZpbmUgUEhZX1NUQVRVU19BTkVHQV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4KQotI2RlZmluZSBQSFlfU1RBVFVTX0FORUdBX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzKQotI2RlZmluZSBQSFlfU1RBVFVTX1JGQVVMVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwKQotI2RlZmluZSBQSFlfU1RBVFVTX1JGQVVMVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0KQotI2RlZmluZSBQSFlfU1RBVFVTX0FORUdDX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwKQotI2RlZmluZSBQSFlfU1RBVFVTX0FORUdDX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQotI2RlZmluZSBQSFlfU1RBVFVTXzEwVF9IX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMCkKLSNkZWZpbmUgUEhZX1NUQVRVU18xMFRfSF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTEpCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTBUX0ZfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKLSNkZWZpbmUgUEhZX1NUQVRVU18xMFRfRl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTIpCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTAwX1hfSF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMCkKLSNkZWZpbmUgUEhZX1NUQVRVU18xMDBfWF9IX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTMpCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTAwX1hfRl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMCkKLSNkZWZpbmUgUEhZX1NUQVRVU18xMDBfWF9GX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQpCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTAwVDRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCkKLSNkZWZpbmUgUEhZX1NUQVRVU18xMDBUNF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTUpCi0KLSNkZWZpbmUgUEhZX0lEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpCi0jZGVmaW5lIFBIWV9JRDFfT1VJX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGKQotI2RlZmluZSBQSFlfSUQxX09VSV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0KLSNkZWZpbmUgUEhZX0lEMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMpCi0jZGVmaW5lIFBIWV9JRDJfUk5fTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGKQotI2RlZmluZSBQSFlfSUQyX1JOX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFBIWV9JRDJfTU5fTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzRjApCi0jZGVmaW5lIFBIWV9JRDJfTU5fT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCkKLSNkZWZpbmUgUEhZX0lEMl9PVUlfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZDMDApCi0jZGVmaW5lIFBIWV9JRDJfT1VJX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTApCi0KLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfU0VMRUNUT1JfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDFGKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9TRUxFQ1RPUl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0EwX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BMF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTFfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0ExX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2KQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BMl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTJfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0EzX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTNfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0E0X01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1RBRl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFGRTApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1RBRl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9SRl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9SRl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTMpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1JTVkRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1JWU0RfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX05QX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX05QX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNSkKLQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX1M0X01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxRikKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9TNF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfQTdfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFGRTApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfQTdfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX1JGX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX1JGX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTMpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfQUNLX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfQUNLX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9OUF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9OUF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE1KQotCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fTFBBTkVHQV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fTFBBTkVHQV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX1BSWF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyKQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX1BSWF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9OUEFfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9OUEFfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fTFBOUEFfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fTFBOUEFfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzKQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX1BERl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9QREZfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQpCi0KLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNikKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19SWENDX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MSkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19SWENDX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUENTQlBfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUENTQlBfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1JWU1BPTF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19SVlNQT0xfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfQVBPTF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwKSAgCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfQVBPTF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8wX0RJUl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMF9ESVJfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzBfREFUX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8wX0RBVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNykKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMV9ESVJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8xX0RJUl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMV9EQVRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8xX0RBVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ18xMEJUX05BVFVSQUxfTE9PUEJBQ0tfREFUX01TSyAgICAgICAoMHg0MDApCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfMTBCVF9OQVRVUkFMX0xPT1BCQUNLX0RBVF9PRlNUICAgICAgKDEwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDXzEwQlRfU1FFX1RFU1RfSU5ISUJJVF9NU0sgICAgICAgICAgICgweDgwMCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ18xMEJUX1NRRV9URVNUX0lOSElCSVRfT0ZTVCAgICAgICAgICAoMTEpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfVFhISU1fTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDApCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfVFhISU1fT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMikKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19JTlRfTEVWRUxfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19JTlRfTEVWRUxfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0KQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1JQVFJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1JQVFJfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTUpCi0KLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNykKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0FORUdfQ09NUF9JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MSkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0FORUdfQ09NUF9JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SRkFVTFRfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SRkFVTFRfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFNfQ0hHX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0KQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFNfQ0hHX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xQX0FDS19JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xQX0FDS19JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QREZfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QREZfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0KQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUFJYX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUFJYX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JYRVJfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SWEVSX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2KQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfSkFCQkVSX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0pBQkJFUl9JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9BTkVHX0NPTVBfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0FORUdfQ09NUF9JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SRkFVTFRfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JGQVVMVF9JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MU19DSEdfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xTX0NIR19JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFBfQUNLX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MUF9BQ0tfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMSkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BERl9JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUERGX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMikKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BSWF9JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUFJYX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMykKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JYRVJfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUlhFUl9JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9KQUJCRVJfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9KQUJCRVJfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNSkKLQotI2RlZmluZSBQSFlfRElBR05PU1RJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE4KQotI2RlZmluZSBQSFlfRElBR05PU1RJQ19SWF9MT0NLX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMCkKLSNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfUlhfTE9DS19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCkKLSNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfUlhfUEFTU19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDApCi0jZGVmaW5lIFBIWV9ESUFHTk9TVElDX1JYX1BBU1NfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkpCi0jZGVmaW5lIFBIWV9ESUFHTk9TVElDX1JBVEVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwKQotI2RlZmluZSBQSFlfRElBR05PU1RJQ19SQVRFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMCkKLSNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfRFBMWF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDApCi0jZGVmaW5lIFBIWV9ESUFHTk9TVElDX0RQTFhfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExKQotI2RlZmluZSBQSFlfRElBR05PU1RJQ19BTkVHRl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDApCi0jZGVmaW5lIFBIWV9ESUFHTk9TVElDX0FORUdGX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyKQotCi0jZW5kaWYgLyogX19UREtQSFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXIwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmEzZmI1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWVyMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiAgCi0gKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEV4Y2FsaWJ1cgotICogIFRpbWVyIFRJTUVSMDAuCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpZm5kZWYgX19USU1FUjAwX0gKLSNkZWZpbmUgX19USU1FUjAwX0gKLQotLyoKLSAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgdGltZXJzCi0gKi8KLQotCi0jZGVmaW5lIFRJTUVSMF9DUihCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDAwICkpCi0jZGVmaW5lIFRJTUVSMF9DUl9CX01TSyAoMHgyMCkKLSNkZWZpbmUgVElNRVIwX0NSX0JfT0ZTVCAoMHg1KQotI2RlZmluZSBUSU1FUjBfQ1JfU19NU0sgICgweDEwKQotI2RlZmluZSBUSU1FUjBfQ1JfU19PRlNUICgweDQpCi0jZGVmaW5lIFRJTUVSMF9DUl9DSV9NU0sgKDB4MDgpCi0jZGVmaW5lIFRJTUVSMF9DUl9DSV9PRlNUICgweDMpCi0jZGVmaW5lIFRJTUVSMF9DUl9JRV9NU0sgKDB4MDQpCi0jZGVmaW5lIFRJTUVSMF9DUl9JRV9PRlNUICgweDIpCi0jZGVmaW5lIFRJTUVSMF9DUl9NT0RFX01TSyAoMHgzKQotI2RlZmluZSBUSU1FUjBfQ1JfTU9ERV9PRlNUICgwKQotI2RlZmluZSBUSU1FUjBfQ1JfTU9ERV9GUkVFICgwKQotI2RlZmluZSBUSU1FUjBfQ1JfTU9ERV9PTkUgICgxKQotI2RlZmluZSBUSU1FUjBfQ1JfTU9ERV9JTlRWTCAoMikKLQotI2RlZmluZSBUSU1FUjBfU1IoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMCApKQotI2RlZmluZSBUSU1FUjBfU1JfQl9NU0sgKDB4MjApCi0jZGVmaW5lIFRJTUVSMF9TUl9CX09GU1QgKDB4NSkKLSNkZWZpbmUgVElNRVIwX1NSX1NfTVNLICAoMHgxMCkKLSNkZWZpbmUgVElNRVIwX1NSX1NfT0ZTVCAoMHg0KQotI2RlZmluZSBUSU1FUjBfU1JfQ0lfTVNLICgweDA4KQotI2RlZmluZSBUSU1FUjBfU1JfQ0lfT0ZTVCAoMHgzKQotI2RlZmluZSBUSU1FUjBfU1JfSUVfTVNLICgweDA0KQotI2RlZmluZSBUSU1FUjBfU1JfSUVfT0ZTVCAoMHgyKQotI2RlZmluZSBUSU1FUjBfU1JfTU9ERV9NU0sgKDB4MykKLSNkZWZpbmUgVElNRVIwX1NSX01PREVfT0ZTVCAoMCkKLSNkZWZpbmUgVElNRVIwX1NSX01PREVfRlJFRSAoMCkKLSNkZWZpbmUgVElNRVIwX1NSX01PREVfT05FICAoMSkKLSNkZWZpbmUgVElNRVIwX1NSX01PREVfSU5UVkwgKDIpCi0KLSNkZWZpbmUgVElNRVIwX1BSRVNDQUxFKEJBU0VfQUREUikgKFRJTUVSMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDEwICkpCi0jZGVmaW5lIFRJTUVSMF9MSU1JVChCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDAyMCApKQotI2RlZmluZSBUSU1FUjBfUkVBRChCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDAzMCApKQotCi0jZGVmaW5lIFRJTUVSMV9DUihCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDQwICkpCi0jZGVmaW5lIFRJTUVSMV9DUl9CX01TSyAoMHgyMCkKLSNkZWZpbmUgVElNRVIxX0NSX0JfT0ZTVCAoMHg1KQotI2RlZmluZSBUSU1FUjFfQ1JfU19NU0sgICgweDEwKQotI2RlZmluZSBUSU1FUjFfQ1JfU19PRlNUICgweDQpCi0jZGVmaW5lIFRJTUVSMV9DUl9DSV9NU0sgKDB4MDgpCi0jZGVmaW5lIFRJTUVSMV9DUl9DSV9PRlNUICgweDMpCi0jZGVmaW5lIFRJTUVSMV9DUl9JRV9NU0sgKDB4MDQpCi0jZGVmaW5lIFRJTUVSMV9DUl9JRV9PRlNUICgweDIpCi0jZGVmaW5lIFRJTUVSMV9DUl9NT0RFX01TSyAoMHgzKQotI2RlZmluZSBUSU1FUjFfQ1JfTU9ERV9PRlNUICgwKQotI2RlZmluZSBUSU1FUjFfQ1JfTU9ERV9GUkVFICgwKQotI2RlZmluZSBUSU1FUjFfQ1JfTU9ERV9PTkUgICgxKQotI2RlZmluZSBUSU1FUjFfQ1JfTU9ERV9JTlRWTCAoMikKLQotI2RlZmluZSBUSU1FUjFfU1IoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHg0MCApKQotI2RlZmluZSBUSU1FUjFfU1JfQl9NU0sgKDB4MjApCi0jZGVmaW5lIFRJTUVSMV9TUl9CX09GU1QgKDB4NSkKLSNkZWZpbmUgVElNRVIxX1NSX1NfTVNLICAoMHgxMCkKLSNkZWZpbmUgVElNRVIxX1NSX1NfT0ZTVCAoMHg0KQotI2RlZmluZSBUSU1FUjFfU1JfQ0lfTVNLICgweDA4KQotI2RlZmluZSBUSU1FUjFfU1JfQ0lfT0ZTVCAoMHgzKQotI2RlZmluZSBUSU1FUjFfU1JfSUVfTVNLICgweDA0KQotI2RlZmluZSBUSU1FUjFfU1JfSUVfT0ZTVCAoMHgyKQotI2RlZmluZSBUSU1FUjFfU1JfTU9ERV9NU0sgKDB4MykKLSNkZWZpbmUgVElNRVIxX1NSX01PREVfT0ZTVCAoMCkKLSNkZWZpbmUgVElNRVIxX1NSX01PREVfRlJFRSAoMCkKLSNkZWZpbmUgVElNRVIxX1NSX01PREVfT05FICAoMSkKLSNkZWZpbmUgVElNRVIxX1NSX01PREVfSU5UVkwgKDIpCi0KLSNkZWZpbmUgVElNRVIxX1BSRVNDQUxFKEJBU0VfQUREUikgKFRJTUVSMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDUwICkpCi0jZGVmaW5lIFRJTUVSMV9MSU1JVChCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDA2MCApKQotI2RlZmluZSBUSU1FUjFfUkVBRChCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDA3MCApKQotCi0jZW5kaWYgLyogX19USU1FUjAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VhcnQwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdWFydDAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYmQ4OTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdWFydDAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyogKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpZm5kZWYgX19VQVJUMDBfSAotI2RlZmluZSBfX1VBUlQwMF9ICi0KLS8qCi0gKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIFVBUlQKLSAqLwotCi0jZGVmaW5lIFVBUlRfVFhfRklGT19TSVpFICAgICAgKDE1KQotCi0jZGVmaW5lIFVBUlRfUlNSKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMCApKQotI2RlZmluZSBVQVJUX1JTUl9SWF9MRVZFTF9NU0sgKDB4MWYpCi0jZGVmaW5lIFVBUlRfUlNSX1JYX0xFVkVMX09GU1QgKDApCi0jZGVmaW5lIFVBUlRfUlNSX1JFX01TSyAoMHg4MCkKLSNkZWZpbmUgVUFSVF9SU1JfUkVfT0ZTVCAoNykKLQotI2RlZmluZSBVQVJUX1JEUyhCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDQgKSkKLSNkZWZpbmUgVUFSVF9SRFNfQklfTVNLICgweDgpCi0jZGVmaW5lIFVBUlRfUkRTX0JJX09GU1QgKDQpCi0jZGVmaW5lIFVBUlRfUkRTX0ZFX01TSyAoMHg0KQotI2RlZmluZSBVQVJUX1JEU19GRV9PRlNUICgyKQotI2RlZmluZSBVQVJUX1JEU19QRV9NU0sgKDB4MikKLSNkZWZpbmUgVUFSVF9SRFNfUEVfT0ZTVCAoMSkKLSNkZWZpbmUgVUFSVF9SRFNfT0VfTVNLICgweDEpCi0jZGVmaW5lIFVBUlRfUkRTX09FX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9SRChCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDggKSkKLSNkZWZpbmUgVUFSVF9SRF9SWF9EQVRBX01TSyAoMHhmZikKLSNkZWZpbmUgVUFSVF9SRF9SWF9EQVRBX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9UU1IoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDBjICkpCi0jZGVmaW5lIFVBUlRfVFNSX1RYX0xFVkVMX01TSyAoMHgxZikKLSNkZWZpbmUgVUFSVF9UU1JfVFhfTEVWRUxfT0ZTVCAoMCkKLSNkZWZpbmUgVUFSVF9UU1JfVFhJX01TSyAoMHg4MCkKLSNkZWZpbmUgVUFSVF9UU1JfVFhJX09GU1QgKDcpCi0KLSNkZWZpbmUgVUFSVF9URChCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MTAgKSkKLSNkZWZpbmUgVUFSVF9URF9UWF9EQVRBX01TSyAoMHhmZikKLSNkZWZpbmUgVUFSVF9URF9UWF9EQVRBX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9GQ1IoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDE0ICkpCi0jZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl9NU0sgKDB4ZDApCi0jZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl9PRlNUICg1KQotI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfMSAoMHgwMCkKLSNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzIgKDB4MjApCi0jZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl80ICgweDQwKQotI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfNiAoMHg2MCkKLSNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzggKDB4ODApCi0jZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl8xMCAoMHhhMCkKLSNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzEyICgweGMwKQotI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfMTQgKDB4ZDApCi0jZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl9NU0sgKDB4MWMpCi0jZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl9PRlNUICgyKQotI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfMCAoMHgwMCkKLSNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzIgKDB4MDQpCi0jZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl80ICgweDA4KQotI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfOCAoMHgwYykKLSNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzEwICgweDEwKQotI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfMTIgKDB4MTQpCi0jZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl8xNCAoMHgxOCkKLSNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzE1ICgweDFjKQotI2RlZmluZSBVQVJUX0ZDUl9SQ19NU0sgKDB4MDIpCi0jZGVmaW5lIFVBUlRfRkNSX1JDX09GU1QgKDEpCi0jZGVmaW5lIFVBUlRfRkNSX1RDX01TSyAoMHgwMSkKLSNkZWZpbmUgVUFSVF9GQ1JfVENfT0ZTVCAoMCkKLQotI2RlZmluZSBVQVJUX0lFUyhCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MTggKSkKLSNkZWZpbmUgVUFSVF9JRVNfTUVfTVNLICgweDgpCi0jZGVmaW5lIFVBUlRfSUVTX01FX09GU1QgKDMpCi0jZGVmaW5lIFVBUlRfSUVTX1RJRV9NU0sgKDB4NCkKLSNkZWZpbmUgVUFSVF9JRVNfVElFX09GU1QgKDIpCi0jZGVmaW5lIFVBUlRfSUVTX1RFX01TSyAoMHgyKQotI2RlZmluZSBVQVJUX0lFU19URV9PRlNUICgxKQotI2RlZmluZSBVQVJUX0lFU19SRV9NU0sgKDB4MSkKLSNkZWZpbmUgVUFSVF9JRVNfUkVfT0ZTVCAoMCkKLQotI2RlZmluZSBVQVJUX0lFQyhCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MWMgKSkKLSNkZWZpbmUgVUFSVF9JRUNfTUVfTVNLICgweDgpCi0jZGVmaW5lIFVBUlRfSUVDX01FX09GU1QgKDMpCi0jZGVmaW5lIFVBUlRfSUVDX1RJRV9NU0sgKDB4NCkKLSNkZWZpbmUgVUFSVF9JRUNfVElFX09GU1QgKDIpCi0jZGVmaW5lIFVBUlRfSUVDX1RFX01TSyAoMHgyKQotI2RlZmluZSBVQVJUX0lFQ19URV9PRlNUICgxKQotI2RlZmluZSBVQVJUX0lFQ19SRV9NU0sgKDB4MSkKLSNkZWZpbmUgVUFSVF9JRUNfUkVfT0ZTVCAoMCkKLQotI2RlZmluZSBVQVJUX0lTUihCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MjAgKSkKLSNkZWZpbmUgVUFSVF9JU1JfTUlfTVNLICgweDgpCi0jZGVmaW5lIFVBUlRfSVNSX01JX09GU1QgKDMpCi0jZGVmaW5lIFVBUlRfSVNSX1RJSV9NU0sgKDB4NCkKLSNkZWZpbmUgVUFSVF9JU1JfVElJX09GU1QgKDIpCi0jZGVmaW5lIFVBUlRfSVNSX1RJX01TSyAoMHgyKQotI2RlZmluZSBVQVJUX0lTUl9USV9PRlNUICgxKQotI2RlZmluZSBVQVJUX0lTUl9SSV9NU0sgKDB4MSkKLSNkZWZpbmUgVUFSVF9JU1JfUklfT0ZTVCAoMCkKLQotI2RlZmluZSBVQVJUX0lJRChCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MjQgKSkKLSNkZWZpbmUgVUFSVF9JSURfSUlEX01TSyAoMHg3KQotI2RlZmluZSBVQVJUX0lJRF9JSURfT0ZTVCAoMCkKLQotI2RlZmluZSBVQVJUX01DKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgyOCApKQotI2RlZmluZSBVQVJUX01DX09FX01TSyAoMHg0MCkKLSNkZWZpbmUgVUFSVF9NQ19PRV9PRlNUICg2KQotI2RlZmluZSBVQVJUX01DX1NQX01TSyAoMHgyMCkKLSNkZWZpbmUgVUFSVF9NQ19TUF9PRlNUICg1KQotI2RlZmluZSBVQVJUX01DX0VQX01TSyAoMHgxMCkKLSNkZWZpbmUgVUFSVF9NQ19FUF9PRlNUICg0KQotI2RlZmluZSBVQVJUX01DX1BFX01TSyAoMHgwOCkKLSNkZWZpbmUgVUFSVF9NQ19QRV9PRlNUICgzKQotI2RlZmluZSBVQVJUX01DX1NUX01TSyAoMHgwNCkKLSNkZWZpbmUgVUFSVF9NQ19TVF9PTkUgKDB4MCkKLSNkZWZpbmUgVUFSVF9NQ19TVF9UV08gKDB4MDQpCi0jZGVmaW5lIFVBUlRfTUNfU1RfT0ZTVCAoMikKLSNkZWZpbmUgVUFSVF9NQ19DTFNfTVNLICgweDAzKQotI2RlZmluZSBVQVJUX01DX0NMU19PRlNUICgwKQotI2RlZmluZSBVQVJUX01DX0NMU19DSEFSTEVOXzUgKDApCi0jZGVmaW5lIFVBUlRfTUNfQ0xTX0NIQVJMRU5fNiAoMSkKLSNkZWZpbmUgVUFSVF9NQ19DTFNfQ0hBUkxFTl83ICgyKQotI2RlZmluZSBVQVJUX01DX0NMU19DSEFSTEVOXzggKDMpCi0KLSNkZWZpbmUgVUFSVF9NQ1IoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDJjICkpCi0jZGVmaW5lIFVBUlRfTUNSX0FDX01TSyAoMHg4MCkKLSNkZWZpbmUgVUFSVF9NQ1JfQUNfT0ZTVCAoNykKLSNkZWZpbmUgVUFSVF9NQ1JfQVJfTVNLICgweDQwKQotI2RlZmluZSBVQVJUX01DUl9BUl9PRlNUICg2KQotI2RlZmluZSBVQVJUX01DUl9CUl9NU0sgKDB4MjApCi0jZGVmaW5lIFVBUlRfTUNSX0JSX09GU1QgKDUpCi0jZGVmaW5lIFVBUlRfTUNSX0xCX01TSyAoMHgxMCkKLSNkZWZpbmUgVUFSVF9NQ1JfTEJfT0ZTVCAoNCkKLSNkZWZpbmUgVUFSVF9NQ1JfRENEX01TSyAoMHgwOCkKLSNkZWZpbmUgVUFSVF9NQ1JfRENEX09GU1QgKDMpCi0jZGVmaW5lIFVBUlRfTUNSX1JJX01TSyAoMHgwNCkKLSNkZWZpbmUgVUFSVF9NQ1JfUklfT0ZTVCAoMikKLSNkZWZpbmUgVUFSVF9NQ1JfRFRSX01TSyAoMHgwMikKLSNkZWZpbmUgVUFSVF9NQ1JfRFRSX09GU1QgKDEpCi0jZGVmaW5lIFVBUlRfTUNSX1JUU19NU0sgKDB4MDEpCi0jZGVmaW5lIFVBUlRfTUNSX1JUU19PRlNUICgwKQotCi0jZGVmaW5lIFVBUlRfTVNSKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgzMCApKQotI2RlZmluZSBVQVJUX01TUl9EQ0RfTVNLICgweDgwKQotI2RlZmluZSBVQVJUX01TUl9EQ0RfT0ZTVCAoNykKLSNkZWZpbmUgVUFSVF9NU1JfUklfTVNLICgweDQwKQotI2RlZmluZSBVQVJUX01TUl9SSV9PRlNUICg2KQotI2RlZmluZSBVQVJUX01TUl9EU1JfTVNLICgweDIwKQotI2RlZmluZSBVQVJUX01TUl9EU1JfT0ZTVCAoNSkKLSNkZWZpbmUgVUFSVF9NU1JfQ1RTX01TSyAoMHgxMCkKLSNkZWZpbmUgVUFSVF9NU1JfQ1RTX09GU1QgKDQpCi0jZGVmaW5lIFVBUlRfTVNSX0REQ0RfTVNLICgweDA4KQotI2RlZmluZSBVQVJUX01TUl9ERENEX09GU1QgKDMpCi0jZGVmaW5lIFVBUlRfTVNSX1RFUklfTVNLICgweDA0KQotI2RlZmluZSBVQVJUX01TUl9URVJJX09GU1QgKDIpCi0jZGVmaW5lIFVBUlRfTVNSX0REU1JfTVNLICgweDAyKQotI2RlZmluZSBVQVJUX01TUl9ERFNSX09GU1QgKDEpCi0jZGVmaW5lIFVBUlRfTVNSX0RDVFNfTVNLICgweDAxKQotI2RlZmluZSBVQVJUX01TUl9EQ1RTX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9ESVZfTE8oQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDM0ICkpCi0jZGVmaW5lIFVBUlRfRElWX0xPX0RJVl9NU0sgKDB4ZmYpCi0jZGVmaW5lIFVBUlRfRElWX0xPX0RJVl9PRlNUICgwKQotCi0jZGVmaW5lIFVBUlRfRElWX0hJKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgzOCApKQotI2RlZmluZSBVQVJUX0RJVl9ISV9ESVZfTVNLICgweGZmKQotI2RlZmluZSBVQVJUX0RJVl9ISV9ESVZfT0ZTVCAoMCkKLQotI2VuZGlmIC8qIF9fVUFSVDAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VuY29tcHJlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRmZTBlNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi91bmNvbXByZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VuY29tcHJlc3MuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaW5jbHVkZSAiYXNtL2FyY2gvcGxhdGZvcm0uaCIKLSNpbmNsdWRlICJhc20vaGFyZHdhcmUuaCIKLSNkZWZpbmUgVUFSVDAwX1RZUEUgKHZvbGF0aWxlIHVuc2lnbmVkIGludCopCi0jaW5jbHVkZSAiYXNtL2FyY2gvdWFydDAwLmgiCi0KLS8qCi0gKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKLSAqLwotc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnMpCi17Ci0Jd2hpbGUgKCpzKSB7Ci0JCXdoaWxlICgoKlVBUlRfVFNSKEVYQ19VQVJUMDBfQkFTRSkgJgotCQkgICAgICAgVUFSVF9UU1JfVFhfTEVWRUxfTVNLKT09MTUpCi0JCQliYXJyaWVyKCk7Ci0KLQkJKlVBUlRfVEQoRVhDX1VBUlQwMF9CQVNFKSA9ICpzOwotCi0JCWlmICgqcyA9PSAnXG4nKSB7Ci0JCQl3aGlsZSAoKCpVQVJUX1RTUihFWENfVUFSVDAwX0JBU0UpICYKLQkJCSAgICAgICBVQVJUX1RTUl9UWF9MRVZFTF9NU0spPT0xNSkKLQkJCQliYXJyaWVyKCk7Ci0KLQkJCSpVQVJUX1REKEVYQ19VQVJUMDBfQkFTRSkgPSAnXHInOwotCQl9Ci0JCXMrKzsKLQl9Ci19Ci0KLS8qCi0gKiBub3RoaW5nIHRvIGRvCi0gKi8KLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQotCi0jZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vaW8uaAppbmRleCAwY2Y0ZDRmLi5mZDAxNDdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaW8uaApAQCAtNTYsNyArNTYsMTIgQEAKIAogLyoKICAqIEFyY2hpdGVjdHVyZSBpb3JlbWFwIGltcGxlbWVudGF0aW9uLgorICoKKyAqIF9faW9yZW1hcCB0YWtlcyBDUFUgcGh5c2ljYWwgYWRkcmVzcy4KKyAqCisgKiBfX2lvcmVtYXBfcGZuIHRha2VzIGEgUGFnZSBGcmFtZSBOdW1iZXIgYW5kIGFuIG9mZnNldCBpbnRvIHRoYXQgcGFnZQogICovCitleHRlcm4gdm9pZCBfX2lvbWVtICogX19pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9faW9yZW1hcCh1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CiAKQEAgLTI2MSw2ICsyNjYsNyBAQAogICoKICAqIGlvcmVtYXAgdGFrZXMgYSBQQ0kgbWVtb3J5IGFkZHJlc3MsIGFzIHNwZWNpZmllZCBpbgogICogRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dC4KKyAqCiAgKi8KICNpZm5kZWYgX19hcmNoX2lvcmVtYXAKICNkZWZpbmUgaW9yZW1hcChjb29raWUsc2l6ZSkJCV9faW9yZW1hcChjb29raWUsc2l6ZSwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tYXAuaAppbmRleCBiMzM4OTM2Li4zMzUxYjc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tYXAuaApAQCAtMjcsOSArMjcsNiBAQAogI2RlZmluZSBNVF9ST00JCQk2CiAjZGVmaW5lIE1UX0lYUDIwMDBfREVWSUNFCTcKIAotI2RlZmluZQlfX3BoeXNfdG9fcGZuKHBhZGRyKQkoKHBhZGRyKSA+PiBQQUdFX1NISUZUKQotI2RlZmluZQlfX3Bmbl90b19waHlzKHBmbikJKChwZm4pIDw8IFBBR0VfU0hJRlQpCi0KIGV4dGVybiB2b2lkIGNyZWF0ZV9tZW1tYXBfaG9sZXMoc3RydWN0IG1lbWluZm8gKik7CiBleHRlcm4gdm9pZCBtZW10YWJsZV9pbml0KHN0cnVjdCBtZW1pbmZvICopOwogZXh0ZXJuIHZvaWQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCmluZGV4IDNlNTcyMzYuLjNkN2YwOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKQEAgLTU4LDYgKzU4LDEyIEBACiAjZW5kaWYKIAogLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBhZGRyZXNzIHRvIGEgUGFnZSBGcmFtZSBOdW1iZXIgYW5kIGJhY2sKKyAqLworI2RlZmluZQlfX3BoeXNfdG9fcGZuKHBhZGRyKQkoKHBhZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZQlfX3Bmbl90b19waHlzKHBmbikJKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKy8qCiAgKiBUaGUgbW9kdWxlIHNwYWNlIGxpdmVzIGJldHdlZW4gdGhlIGFkZHJlc3NlcyBnaXZlbiBieSBUQVNLX1NJWkUKICAqIGFuZCBQQUdFX09GRlNFVCAtIGl0IG11c3QgYmUgd2l0aGluIDMyTUIgb2YgdGhlIGtlcm5lbCB0ZXh0LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCAzYzg5ZGY2Li5kODhiZjhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgogICogQ29weXJpZ2h0IChjKSAyMDAyIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoYykgMjAwNSBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CiAgKgogICogUG9ydGlvbnMgZGVyaXZlZCBmcm9tIENyeXB0b2FwaSwgYnkgQWxleGFuZGVyIEtqZWxkYWFzIDxhc3RvckBmYXN0Lm5vPgogICogYW5kIE5ldHRsZSwgYnkgTmllbHMgTfZsbGVyLgpAQCAtMTI2LDcgKzEyNywxMSBAQAogCXVuc2lnbmVkIGludCBjcmFfYmxvY2tzaXplOwogCXVuc2lnbmVkIGludCBjcmFfY3R4c2l6ZTsKIAl1bnNpZ25lZCBpbnQgY3JhX2FsaWdubWFzazsKKworCWludCBjcmFfcHJpb3JpdHk7CisKIAljb25zdCBjaGFyIGNyYV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOworCWNvbnN0IGNoYXIgY3JhX2RyaXZlcl9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOwogCiAJdW5pb24gewogCQlzdHJ1Y3QgY2lwaGVyX2FsZyBjaXBoZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaCBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCmluZGV4IGFlZjYwNDIuLmNjZDNlMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCkBAIC0yNywxNCArMjcsMTUgQEAKICNkZWZpbmUgTU1DX1JTUF9NQVNLCSgzIDw8IDApCiAjZGVmaW5lIE1NQ19SU1BfQ1JDCSgxIDw8IDMpCQkvKiBleHBlY3QgdmFsaWQgY3JjICovCiAjZGVmaW5lIE1NQ19SU1BfQlVTWQkoMSA8PCA0KQkJLyogY2FyZCBtYXkgc2VuZCBidXN5ICovCisjZGVmaW5lIE1NQ19SU1BfT1BDT0RFCSgxIDw8IDUpCQkvKiByZXNwb25zZSBjb250YWlucyBvcGNvZGUgKi8KIAogLyoKICAqIFRoZXNlIGFyZSB0aGUgcmVzcG9uc2UgdHlwZXMsIGFuZCBjb3JyZXNwb25kIHRvIHZhbGlkIGJpdAogICogcGF0dGVybnMgb2YgdGhlIGFib3ZlIGZsYWdzLiAgT25lIGFkZGl0aW9uYWwgdmFsaWQgcGF0dGVybgogICogaXMgYWxsIHplcm9zLCB3aGljaCBtZWFucyB3ZSBkb24ndCBleHBlY3QgYSByZXNwb25zZS4KICAqLwotI2RlZmluZSBNTUNfUlNQX1IxCShNTUNfUlNQX1NIT1JUfE1NQ19SU1BfQ1JDKQotI2RlZmluZSBNTUNfUlNQX1IxQgkoTU1DX1JTUF9TSE9SVHxNTUNfUlNQX0NSQ3xNTUNfUlNQX0JVU1kpCisjZGVmaW5lIE1NQ19SU1BfUjEJKE1NQ19SU1BfU0hPUlR8TU1DX1JTUF9DUkN8TU1DX1JTUF9PUENPREUpCisjZGVmaW5lIE1NQ19SU1BfUjFCCShNTUNfUlNQX1NIT1JUfE1NQ19SU1BfQ1JDfE1NQ19SU1BfT1BDT0RFfE1NQ19SU1BfQlVTWSkKICNkZWZpbmUgTU1DX1JTUF9SMgkoTU1DX1JTUF9MT05HfE1NQ19SU1BfQ1JDKQogI2RlZmluZSBNTUNfUlNQX1IzCShNTUNfUlNQX1NIT1JUKQogI2RlZmluZSBNTUNfUlNQX1I2CShNTUNfUlNQX1NIT1JUfE1NQ19SU1BfQ1JDKQpAQCAtNjQsNiArNjUsNyBAQAogI2RlZmluZSBNTUNfREFUQV9XUklURQkoMSA8PCA4KQogI2RlZmluZSBNTUNfREFUQV9SRUFECSgxIDw8IDkpCiAjZGVmaW5lIE1NQ19EQVRBX1NUUkVBTQkoMSA8PCAxMCkKKyNkZWZpbmUgTU1DX0RBVEFfTVVMVEkJKDEgPDwgMTEpCiAKIAl1bnNpZ25lZCBpbnQJCWJ5dGVzX3hmZXJlZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWN0X2FwaS5oIGIvaW5jbHVkZS9uZXQvYWN0X2FwaS5oCmluZGV4IGI1NWViN2MuLjExZTllYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FjdF9hcGkuaAorKysgYi9pbmNsdWRlL25ldC9hY3RfYXBpLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAlfX3UzMiAgIHR5cGU7IC8qIFRCRCB0byBtYXRjaCBraW5kICovCiAJX191MzIgCWNhcGFiOyAgLyogY2FwYWJpbGl0aWVzIGluY2x1ZGVzIDQgYml0IHZlcnNpb24gKi8KIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Ci0JaW50ICAgICAoKmFjdCkoc3RydWN0IHNrX2J1ZmYgKiosIHN0cnVjdCB0Y19hY3Rpb24gKiwgc3RydWN0IHRjZl9yZXN1bHQgKik7CisJaW50ICAgICAoKmFjdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHRjX2FjdGlvbiAqLCBzdHJ1Y3QgdGNmX3Jlc3VsdCAqKTsKIAlpbnQgICAgICgqZ2V0X3N0YXRzKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgdGNfYWN0aW9uICopOwogCWludCAgICAgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgdGNfYWN0aW9uICosaW50ICwgaW50KTsKIAlpbnQgICAgICgqY2xlYW51cCkoc3RydWN0IHRjX2FjdGlvbiAqLCBpbnQgYmluZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDY0OTJlNzMuLmI5NGQxYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfX05FVF9QS1RfU0NIRURfSAogI2RlZmluZSBfX05FVF9QS1RfU0NIRURfSAogCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPG5ldC9zY2hfZ2VuZXJpYy5oPgogCiBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyCkBAIC01OSw4ICs2MCw4IEBACiB0eXBlZGVmIGxvbmcJCXBzY2hlZF90ZGlmZl90OwogCiAjZGVmaW5lIFBTQ0hFRF9HRVRfVElNRShzdGFtcCkgZG9fZ2V0dGltZW9mZGF5KCYoc3RhbXApKQotI2RlZmluZSBQU0NIRURfVVMySklGRklFKHVzZWNzKSAoKCh1c2VjcykrKDEwMDAwMDAvSFotMSkpLygxMDAwMDAwL0haKSkKLSNkZWZpbmUgUFNDSEVEX0pJRkZJRTJVUyhkZWxheSkgKChkZWxheSkqKDEwMDAwMDAvSFopKQorI2RlZmluZSBQU0NIRURfVVMySklGRklFKHVzZWNzKSB1c2Vjc190b19qaWZmaWVzKHVzZWNzKQorI2RlZmluZSBQU0NIRURfSklGRklFMlVTKGRlbGF5KSBqaWZmaWVzX3RvX3VzZWNzKGRlbGF5KQogCiAjZWxzZSAvKiAhQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSAqLwogCkBAIC0xMjMsOSArMTI0LDkgQEAKIAkJICAgZGVmYXVsdDogXAogCQkJICAgX19kZWx0YSA9IDA7IFwKIAkJICAgY2FzZSAyOiBcCi0JCQkgICBfX2RlbHRhICs9IDEwMDAwMDA7IFwKKwkJCSAgIF9fZGVsdGEgKz0gVVNFQ19QRVJfU0VDOyBcCiAJCSAgIGNhc2UgMTogXAotCQkJICAgX19kZWx0YSArPSAxMDAwMDAwOyBcCisJCQkgICBfX2RlbHRhICs9IFVTRUNfUEVSX1NFQzsgXAogCSAgICAgICAgICAgfSBcCiAJICAgfSBcCiAJICAgX19kZWx0YTsgXApAQCAtMTM2LDkgKzEzNyw5IEBACiB7CiAJaW50IGRlbHRhOwogCi0JaWYgKGJvdW5kIDw9IDEwMDAwMDAgfHwgZGVsdGFfc2VjID4gKDB4N0ZGRkZGRkYvMTAwMDAwMCktMSkKKwlpZiAoYm91bmQgPD0gVVNFQ19QRVJfU0VDIHx8IGRlbHRhX3NlYyA+ICgweDdGRkZGRkZGL1VTRUNfUEVSX1NFQyktMSkKIAkJcmV0dXJuIGJvdW5kOwotCWRlbHRhID0gZGVsdGFfc2VjICogMTAwMDAwMDsKKwlkZWx0YSA9IGRlbHRhX3NlYyAqIFVTRUNfUEVSX1NFQzsKIAlpZiAoZGVsdGEgPiBib3VuZCB8fCBkZWx0YSA8IDApCiAJCWRlbHRhID0gYm91bmQ7CiAJcmV0dXJuIGRlbHRhOwpAQCAtMTUyLDkgKzE1Myw5IEBACiAJICAgZGVmYXVsdDogXAogCQkgICBfX2RlbHRhID0gcHNjaGVkX3RvZF9kaWZmKF9fZGVsdGFfc2VjLCBib3VuZCk7ICBicmVhazsgXAogCSAgIGNhc2UgMjogXAotCQkgICBfX2RlbHRhICs9IDEwMDAwMDA7IFwKKwkJICAgX19kZWx0YSArPSBVU0VDX1BFUl9TRUM7IFwKIAkgICBjYXNlIDE6IFwKLQkJICAgX19kZWx0YSArPSAxMDAwMDAwOyBcCisJCSAgIF9fZGVsdGEgKz0gVVNFQ19QRVJfU0VDOyBcCiAJICAgY2FzZSAwOiBcCiAgCQkgICBpZiAoX19kZWx0YSA+IGJvdW5kIHx8IF9fZGVsdGEgPCAwKSBcCiAgCQkJX19kZWx0YSA9IGJvdW5kOyBcCkBAIC0xNzAsMTUgKzE3MSwxNSBAQAogKHsgXAogCSAgIGludCBfX2RlbHRhID0gKHR2KS50dl91c2VjICsgKGRlbHRhKTsgXAogCSAgICh0dl9yZXMpLnR2X3NlYyA9ICh0dikudHZfc2VjOyBcCi0JICAgaWYgKF9fZGVsdGEgPiAxMDAwMDAwKSB7ICh0dl9yZXMpLnR2X3NlYysrOyBfX2RlbHRhIC09IDEwMDAwMDA7IH0gXAorCSAgIGlmIChfX2RlbHRhID4gVVNFQ19QRVJfU0VDKSB7ICh0dl9yZXMpLnR2X3NlYysrOyBfX2RlbHRhIC09IFVTRUNfUEVSX1NFQzsgfSBcCiAJICAgKHR2X3JlcykudHZfdXNlYyA9IF9fZGVsdGE7IFwKIH0pCiAKICNkZWZpbmUgUFNDSEVEX1RBREQodHYsIGRlbHRhKSBcCiAoeyBcCiAJICAgKHR2KS50dl91c2VjICs9IChkZWx0YSk7IFwKLQkgICBpZiAoKHR2KS50dl91c2VjID4gMTAwMDAwMCkgeyAodHYpLnR2X3NlYysrOyBcCi0JCSAodHYpLnR2X3VzZWMgLT0gMTAwMDAwMDsgfSBcCisJICAgaWYgKCh0dikudHZfdXNlYyA+IFVTRUNfUEVSX1NFQykgeyAodHYpLnR2X3NlYysrOyBcCisJCSAodHYpLnR2X3VzZWMgLT0gVVNFQ19QRVJfU0VDOyB9IFwKIH0pCiAKIC8qIFNldC9jaGVjayB0aGF0IHRpbWUgaXMgaW4gdGhlICJwYXN0IHBlcmZlY3QiOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCBjY2M0NWQ0Li4wNWVlNDgzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtMjM2LDEyICsyMzYsOCBAQAogICogYWN0aXZlIGJhdGNoIGFuZCB0aGUgYmF0Y2ggdG8gYmUgcmVnaXN0ZXJlZCBoYXMgbm90IGFscmVhZHkgb2NjdXJyZWQuCiAgKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9zdGF0ZS5sb2NrLgogICovCi1zdGF0aWMgdm9pZCByY3Vfc3RhcnRfYmF0Y2goc3RydWN0IHJjdV9jdHJsYmxrICpyY3AsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQlpbnQgbmV4dF9wZW5kaW5nKQorc3RhdGljIHZvaWQgcmN1X3N0YXJ0X2JhdGNoKHN0cnVjdCByY3VfY3RybGJsayAqcmNwLCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7Ci0JaWYgKG5leHRfcGVuZGluZykKLQkJcmNwLT5uZXh0X3BlbmRpbmcgPSAxOwotCiAJaWYgKHJjcC0+bmV4dF9wZW5kaW5nICYmCiAJCQlyY3AtPmNvbXBsZXRlZCA9PSByY3AtPmN1cikgewogCQlyY3AtPm5leHRfcGVuZGluZyA9IDA7CkBAIC0yNzUsNyArMjcxLDcgQEAKIAlpZiAoY3B1c19lbXB0eShyc3AtPmNwdW1hc2spKSB7CiAJCS8qIGJhdGNoIGNvbXBsZXRlZCAhICovCiAJCXJjcC0+Y29tcGxldGVkID0gcmNwLT5jdXI7Ci0JCXJjdV9zdGFydF9iYXRjaChyY3AsIHJzcCwgMCk7CisJCXJjdV9zdGFydF9iYXRjaChyY3AsIHJzcCk7CiAJfQogfQogCkBAIC00MTAsNyArNDA2LDggQEAKIAkJaWYgKCFyY3AtPm5leHRfcGVuZGluZykgewogCQkJLyogYW5kIHN0YXJ0IGl0L3NjaGVkdWxlIHN0YXJ0IGlmIGl0J3MgYSBuZXcgYmF0Y2ggKi8KIAkJCXNwaW5fbG9jaygmcnNwLT5sb2NrKTsKLQkJCXJjdV9zdGFydF9iYXRjaChyY3AsIHJzcCwgMSk7CisJCQlyY3AtPm5leHRfcGVuZGluZyA9IDE7CisJCQlyY3Vfc3RhcnRfYmF0Y2gocmNwLCByc3ApOwogCQkJc3Bpbl91bmxvY2soJnJzcC0+bG9jayk7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1MDgxMjg3Li5iZjY2YjExIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTA5MiwxNSArMTA5MiwxMiBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG9mZnNldCA+IChpbnQpc2tiLT5sZW4pCi0JCUJVRygpOworCUJVR19PTihvZmZzZXQgPiAoaW50KXNrYi0+bGVuKTsKIAljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItPmxlbi1vZmZzZXQsIDApOwogCiAJb2Zmc2V0ID0gc2tiLT50YWlsIC0gc2tiLT5oLnJhdzsKLQlpZiAob2Zmc2V0IDw9IDApCi0JCUJVRygpOwotCWlmIChza2ItPmNzdW0gKyAyID4gb2Zmc2V0KQotCQlCVUcoKTsKKwlCVUdfT04ob2Zmc2V0IDw9IDApOworCUJVR19PTihza2ItPmNzdW0gKyAyID4gb2Zmc2V0KTsKIAogCSoodTE2Kikoc2tiLT5oLnJhdyArIHNrYi0+Y3N1bSkgPSBjc3VtX2ZvbGQoY3N1bSk7CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCAwNzBmOTFjLi5kMDczMmU5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNzkxLDggKzc5MSw3IEBACiAJCWludCBlbmQgPSBvZmZzZXQgKyBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCWlmIChlbmQgPiBsZW4pIHsKIAkJCWlmIChza2JfY2xvbmVkKHNrYikpIHsKLQkJCQlpZiAoIXJlYWxsb2MpCi0JCQkJCUJVRygpOworCQkJCUJVR19PTighcmVhbGxvYyk7CiAJCQkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CkBAIC04OTQsOCArODkzLDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKmluc3AgPSBOVUxMOwogCiAJCWRvIHsKLQkJCWlmICghbGlzdCkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighbGlzdCk7CiAKIAkJCWlmIChsaXN0LT5sZW4gPD0gZWF0KSB7CiAJCQkJLyogRWF0ZW4gYXMgd2hvbGUuICovCkBAIC0xMTk5LDggKzExOTcsNyBAQAogCQkJc3RhcnQgPSBlbmQ7CiAJCX0KIAl9Ci0JaWYgKGxlbikKLQkJQlVHKCk7CisJQlVHX09OKGxlbik7CiAKIAlyZXR1cm4gY3N1bTsKIH0KQEAgLTEyODIsOCArMTI3OSw3IEBACiAJCQlzdGFydCA9IGVuZDsKIAkJfQogCX0KLQlpZiAobGVuKQotCQlCVUcoKTsKKwlCVUdfT04obGVuKTsKIAlyZXR1cm4gY3N1bTsKIH0KIApAQCAtMTI5Nyw4ICsxMjkzLDcgQEAKIAllbHNlCiAJCWNzc3RhcnQgPSBza2JfaGVhZGxlbihza2IpOwogCi0JaWYgKGNzc3RhcnQgPiBza2JfaGVhZGxlbihza2IpKQotCQlCVUcoKTsKKwlCVUdfT04oY3NzdGFydCA+IHNrYl9oZWFkbGVuKHNrYikpOwogCiAJbWVtY3B5KHRvLCBza2ItPmRhdGEsIGNzc3RhcnQpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggYmU1YTUxOS4uMTA1MDM5ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtODk5LDggKzg5OSw3IEBACiAJCXUzMiBfbWFzaywgKm1wOwogCiAJCW1wID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9tYXNrKSwgJl9tYXNrKTsKLQkJaWYgKG1wID09IE5VTEwpCi0JCQlCVUcoKTsKKwkJQlVHX09OKG1wID09IE5VTEwpOwogCQlmb3IgKGlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkgewogCQkJaWYgKCptcCA9PSBpZmEtPmlmYV9tYXNrICYmCiAJCQkgICAgaW5ldF9pZmFfbWF0Y2gocnQtPnJ0X3NyYywgaWZhKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggYzQ5OTA4MS4uNDU3ZGI5OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTUwLDkgKzUwLDEwIEBACiAjZGVmaW5lIElORVRfRElBR19QVVQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbikgXAogCVJUQV9EQVRBKF9fUlRBX1BVVChza2IsIGF0dHJ0eXBlLCBhdHRybGVuKSkKIAotc3RhdGljIGludCBpbmV0X2RpYWdfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQlpbnQgZXh0LCB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgbmxtc2dfZmxhZ3MsCi0JCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKnVubGgpCitzdGF0aWMgaW50IGluZXRfY3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgaW50IGV4dCwgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IG5sbXNnX2ZsYWdzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CkBAIC03MCwyMCArNzEsMjIgQEAKIAlubGgtPm5sbXNnX2ZsYWdzID0gbmxtc2dfZmxhZ3M7CiAKIAlyID0gTkxNU0dfREFUQShubGgpOwotCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX1RJTUVfV0FJVCkgewotCQlpZiAoZXh0ICYgKDEgPDwgKElORVRfRElBR19NRU1JTkZPIC0gMSkpKQotCQkJbWluZm8gPSBJTkVUX0RJQUdfUFVUKHNrYiwgSU5FVF9ESUFHX01FTUlORk8sCi0JCQkJCSAgICAgIHNpemVvZigqbWluZm8pKTsKLQkJaWYgKGV4dCAmICgxIDw8IChJTkVUX0RJQUdfSU5GTyAtIDEpKSkKLQkJCWluZm8gPSBJTkVUX0RJQUdfUFVUKHNrYiwgSU5FVF9ESUFHX0lORk8sCi0JCQkJCSAgIGhhbmRsZXItPmlkaWFnX2luZm9fc2l6ZSk7Ci0JCQotCQlpZiAoKGV4dCAmICgxIDw8IChJTkVUX0RJQUdfQ09ORyAtIDEpKSkgJiYgaWNzay0+aWNza19jYV9vcHMpIHsKLQkJCXNpemVfdCBsZW4gPSBzdHJsZW4oaWNzay0+aWNza19jYV9vcHMtPm5hbWUpOwotCQkJc3RyY3B5KElORVRfRElBR19QVVQoc2tiLCBJTkVUX0RJQUdfQ09ORywgbGVuICsgMSksCi0JCQkgICAgICAgaWNzay0+aWNza19jYV9vcHMtPm5hbWUpOwotCQl9CisJQlVHX09OKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKTsKKworCWlmIChleHQgJiAoMSA8PCAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSkpCisJCW1pbmZvID0gSU5FVF9ESUFHX1BVVChza2IsIElORVRfRElBR19NRU1JTkZPLCBzaXplb2YoKm1pbmZvKSk7CisKKwlpZiAoZXh0ICYgKDEgPDwgKElORVRfRElBR19JTkZPIC0gMSkpKQorCQlpbmZvID0gSU5FVF9ESUFHX1BVVChza2IsIElORVRfRElBR19JTkZPLAorCQkJCSAgICAgaGFuZGxlci0+aWRpYWdfaW5mb19zaXplKTsKKworCWlmICgoZXh0ICYgKDEgPDwgKElORVRfRElBR19DT05HIC0gMSkpKSAmJiBpY3NrLT5pY3NrX2NhX29wcykgeworCQljb25zdCBzaXplX3QgbGVuID0gc3RybGVuKGljc2stPmljc2tfY2Ffb3BzLT5uYW1lKTsKKworCQlzdHJjcHkoSU5FVF9ESUFHX1BVVChza2IsIElORVRfRElBR19DT05HLCBsZW4gKyAxKSwKKwkJICAgICAgIGljc2stPmljc2tfY2Ffb3BzLT5uYW1lKTsKIAl9CisKIAlyLT5pZGlhZ19mYW1pbHkgPSBzay0+c2tfZmFtaWx5OwogCXItPmlkaWFnX3N0YXRlID0gc2stPnNrX3N0YXRlOwogCXItPmlkaWFnX3RpbWVyID0gMDsKQEAgLTkzLDM3ICs5Niw2IEBACiAJci0+aWQuaWRpYWdfY29va2llWzBdID0gKHUzMikodW5zaWduZWQgbG9uZylzazsKIAlyLT5pZC5pZGlhZ19jb29raWVbMV0gPSAodTMyKSgoKHVuc2lnbmVkIGxvbmcpc2sgPj4gMzEpID4+IDEpOwogCi0JaWYgKHItPmlkaWFnX3N0YXRlID09IFRDUF9USU1FX1dBSVQpIHsKLQkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwotCQlsb25nIHRtbyA9IHR3LT50d190dGQgLSBqaWZmaWVzOwotCQlpZiAodG1vIDwgMCkKLQkJCXRtbyA9IDA7Ci0KLQkJci0+aWQuaWRpYWdfc3BvcnQgPSB0dy0+dHdfc3BvcnQ7Ci0JCXItPmlkLmlkaWFnX2Rwb3J0ID0gdHctPnR3X2Rwb3J0OwotCQlyLT5pZC5pZGlhZ19zcmNbMF0gPSB0dy0+dHdfcmN2X3NhZGRyOwotCQlyLT5pZC5pZGlhZ19kc3RbMF0gPSB0dy0+dHdfZGFkZHI7Ci0JCXItPmlkaWFnX3N0YXRlID0gdHctPnR3X3N1YnN0YXRlOwotCQlyLT5pZGlhZ190aW1lciA9IDM7Ci0JCXItPmlkaWFnX2V4cGlyZXMgPSAodG1vICogMTAwMCArIEhaIC0gMSkgLyBIWjsKLQkJci0+aWRpYWdfcnF1ZXVlID0gMDsKLQkJci0+aWRpYWdfd3F1ZXVlID0gMDsKLQkJci0+aWRpYWdfdWlkID0gMDsKLQkJci0+aWRpYWdfaW5vZGUgPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKLQkJaWYgKHItPmlkaWFnX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOwotCi0JCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopci0+aWQuaWRpYWdfc3JjLAotCQkJCSAgICAgICAmdHc2LT50d192Nl9yY3Zfc2FkZHIpOwotCQkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXItPmlkLmlkaWFnX2RzdCwKLQkJCQkgICAgICAgJnR3Ni0+dHdfdjZfZGFkZHIpOwotCQl9Ci0jZW5kaWYKLQkJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwotCQlyZXR1cm4gc2tiLT5sZW47Ci0JfQotCiAJci0+aWQuaWRpYWdfc3BvcnQgPSBpbmV0LT5zcG9ydDsKIAlyLT5pZC5pZGlhZ19kcG9ydCA9IGluZXQtPmRwb3J0OwogCXItPmlkLmlkaWFnX3NyY1swXSA9IGluZXQtPnJjdl9zYWRkcjsKQEAgLTE4NSw3ICsxNTcsNzUgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9leGFjdChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3N0YXRpYyBpbnQgaW5ldF90d3NrX2RpYWdfZmlsbChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXh0LCB1MzIgcGlkLAorCQkJICAgICAgIHUzMiBzZXEsIHUxNiBubG1zZ19mbGFncywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKnVubGgpCit7CisJbG9uZyB0bW87CisJc3RydWN0IGluZXRfZGlhZ19tc2cgKnI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHJldmlvdXNfdGFpbCA9IHNrYi0+dGFpbDsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IE5MTVNHX1BVVChza2IsIHBpZCwgc2VxLAorCQkJCQkgdW5saC0+bmxtc2dfdHlwZSwgc2l6ZW9mKCpyKSk7CisKKwlyID0gTkxNU0dfREFUQShubGgpOworCUJVR19PTih0dy0+dHdfc3RhdGUgIT0gVENQX1RJTUVfV0FJVCk7CisKKwlubGgtPm5sbXNnX2ZsYWdzID0gbmxtc2dfZmxhZ3M7CisKKwl0bW8gPSB0dy0+dHdfdHRkIC0gamlmZmllczsKKwlpZiAodG1vIDwgMCkKKwkJdG1vID0gMDsKKworCXItPmlkaWFnX2ZhbWlseQkgICAgICA9IHR3LT50d19mYW1pbHk7CisJci0+aWRpYWdfc3RhdGUJICAgICAgPSB0dy0+dHdfc3RhdGU7CisJci0+aWRpYWdfdGltZXIJICAgICAgPSAwOworCXItPmlkaWFnX3JldHJhbnMgICAgICA9IDA7CisJci0+aWQuaWRpYWdfaWYJICAgICAgPSB0dy0+dHdfYm91bmRfZGV2X2lmOworCXItPmlkLmlkaWFnX2Nvb2tpZVswXSA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpdHc7CisJci0+aWQuaWRpYWdfY29va2llWzFdID0gKHUzMikoKCh1bnNpZ25lZCBsb25nKXR3ID4+IDMxKSA+PiAxKTsKKwlyLT5pZC5pZGlhZ19zcG9ydCAgICAgPSB0dy0+dHdfc3BvcnQ7CisJci0+aWQuaWRpYWdfZHBvcnQgICAgID0gdHctPnR3X2Rwb3J0OworCXItPmlkLmlkaWFnX3NyY1swXSAgICA9IHR3LT50d19yY3Zfc2FkZHI7CisJci0+aWQuaWRpYWdfZHN0WzBdICAgID0gdHctPnR3X2RhZGRyOworCXItPmlkaWFnX3N0YXRlCSAgICAgID0gdHctPnR3X3N1YnN0YXRlOworCXItPmlkaWFnX3RpbWVyCSAgICAgID0gMzsKKwlyLT5pZGlhZ19leHBpcmVzICAgICAgPSAodG1vICogMTAwMCArIEhaIC0gMSkgLyBIWjsKKwlyLT5pZGlhZ19ycXVldWUJICAgICAgPSAwOworCXItPmlkaWFnX3dxdWV1ZQkgICAgICA9IDA7CisJci0+aWRpYWdfdWlkCSAgICAgID0gMDsKKwlyLT5pZGlhZ19pbm9kZQkgICAgICA9IDA7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorCWlmICh0dy0+dHdfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNvbnN0IHN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPQorCQkJCQkJaW5ldDZfdHdzaygoc3RydWN0IHNvY2sgKil0dyk7CisKKwkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXItPmlkLmlkaWFnX3NyYywKKwkJCSAgICAgICAmdHc2LT50d192Nl9yY3Zfc2FkZHIpOworCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopci0+aWQuaWRpYWdfZHN0LAorCQkJICAgICAgICZ0dzYtPnR3X3Y2X2RhZGRyKTsKKwl9CisjZW5kaWYKKwlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIHByZXZpb3VzX3RhaWw7CisJcmV0dXJuIHNrYi0+bGVuOworbmxtc2dfZmFpbHVyZToKKwlza2JfdHJpbShza2IsIHByZXZpb3VzX3RhaWwgLSBza2ItPmRhdGEpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJaW50IGV4dCwgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IG5sbXNnX2ZsYWdzLAorCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQoreworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkKKwkJcmV0dXJuIGluZXRfdHdza19kaWFnX2ZpbGwoKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKilzaywKKwkJCQkJICAgc2tiLCBleHQsIHBpZCwgc2VxLCBubG1zZ19mbGFncywKKwkJCQkJICAgdW5saCk7CisJcmV0dXJuIGluZXRfY3NrX2RpYWdfZmlsbChzaywgc2tiLCBleHQsIHBpZCwgc2VxLCBubG1zZ19mbGFncywgdW5saCk7Cit9CisKK3N0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9leGFjdChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKQogewogCWludCBlcnI7CiAJc3RydWN0IHNvY2sgKnNrOwpAQCAtMjM1LDcgKzI3NSw3IEBACiAJaWYgKCFyZXApCiAJCWdvdG8gb3V0OwogCi0JaWYgKGluZXRfZGlhZ19maWxsKHJlcCwgc2ssIHJlcS0+aWRpYWdfZXh0LAorCWlmIChza19kaWFnX2ZpbGwoc2ssIHJlcCwgcmVxLT5pZGlhZ19leHQsCiAJCQkgTkVUTElOS19DQihpbl9za2IpLnBpZCwKIAkJCSBubGgtPm5sbXNnX3NlcSwgMCwgbmxoKSA8PSAwKQogCQlCVUcoKTsKQEAgLTI4Myw3ICszMjMsNyBAQAogCiAKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX3J1bihjb25zdCB2b2lkICpiYywgaW50IGxlbiwKLQkJCSAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpCisJCQkgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpCiB7CiAJd2hpbGUgKGxlbiA+IDApIHsKIAkJaW50IHllcyA9IDE7CkBAIC0zMjIsNyArMzYyLDcgQEAKIAkJCQl5ZXMgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotCQkJCisKIAkJCWlmIChjb25kLT5wcmVmaXhfbGVuID09IDApCiAJCQkJYnJlYWs7CiAKQEAgLTMzMSw3ICszNzEsOCBAQAogCQkJZWxzZQogCQkJCWFkZHIgPSBlbnRyeS0+ZGFkZHI7CiAKLQkJCWlmIChiaXRzdHJpbmdfbWF0Y2goYWRkciwgY29uZC0+YWRkciwgY29uZC0+cHJlZml4X2xlbikpCisJCQlpZiAoYml0c3RyaW5nX21hdGNoKGFkZHIsIGNvbmQtPmFkZHIsCisJCQkJCSAgICBjb25kLT5wcmVmaXhfbGVuKSkKIAkJCQlicmVhazsKIAkJCWlmIChlbnRyeS0+ZmFtaWx5ID09IEFGX0lORVQ2ICYmCiAJCQkgICAgY29uZC0+ZmFtaWx5ID09IEFGX0lORVQpIHsKQEAgLTM0Niw3ICszODcsNyBAQAogCQl9CiAJCX0KIAotCQlpZiAoeWVzKSB7IAorCQlpZiAoeWVzKSB7CiAJCQlsZW4gLT0gb3AtPnllczsKIAkJCWJjICs9IG9wLT55ZXM7CiAJCX0gZWxzZSB7CkBAIC00MDcsMTQgKzQ0OCwxNSBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJYmMgKz0gb3AtPnllczsKKwkJYmMgICs9IG9wLT55ZXM7CiAJCWxlbiAtPSBvcC0+eWVzOwogCX0KIAlyZXR1cm4gbGVuID09IDAgPyAwIDogLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywKLQkJCSAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQorc3RhdGljIGludCBpbmV0X2Nza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlzdHJ1Y3QgaW5ldF9kaWFnX3JlcSAqciA9IE5MTVNHX0RBVEEoY2ItPm5saCk7CiAKQEAgLTQ0NCwxNCArNDg2LDUwIEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gaW5ldF9kaWFnX2ZpbGwoc2tiLCBzaywgci0+aWRpYWdfZXh0LCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKLQkJCSAgICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLCBjYi0+bmxoKTsKKwlyZXR1cm4gaW5ldF9jc2tfZGlhZ19maWxsKHNrLCBza2IsIHItPmlkaWFnX2V4dCwKKwkJCQkgIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCSAgY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwgY2ItPm5saCk7Cit9CisKK3N0YXRpYyBpbnQgaW5ldF90d3NrX2RpYWdfZHVtcChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgaW5ldF9kaWFnX3JlcSAqciA9IE5MTVNHX0RBVEEoY2ItPm5saCk7CisKKwlpZiAoY2ItPm5saC0+bmxtc2dfbGVuID4gNCArIE5MTVNHX1NQQUNFKHNpemVvZigqcikpKSB7CisJCXN0cnVjdCBpbmV0X2RpYWdfZW50cnkgZW50cnk7CisJCXN0cnVjdCBydGF0dHIgKmJjID0gKHN0cnVjdCBydGF0dHIgKikociArIDEpOworCisJCWVudHJ5LmZhbWlseSA9IHR3LT50d19mYW1pbHk7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorCQlpZiAodHctPnR3X2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9CisJCQkJCQlpbmV0Nl90d3NrKChzdHJ1Y3Qgc29jayAqKXR3KTsKKwkJCWVudHJ5LnNhZGRyID0gdHc2LT50d192Nl9yY3Zfc2FkZHIuczZfYWRkcjMyOworCQkJZW50cnkuZGFkZHIgPSB0dzYtPnR3X3Y2X2RhZGRyLnM2X2FkZHIzMjsKKwkJfSBlbHNlCisjZW5kaWYKKwkJeworCQkJZW50cnkuc2FkZHIgPSAmdHctPnR3X3Jjdl9zYWRkcjsKKwkJCWVudHJ5LmRhZGRyID0gJnR3LT50d19kYWRkcjsKKwkJfQorCQllbnRyeS5zcG9ydCA9IHR3LT50d19udW07CisJCWVudHJ5LmRwb3J0ID0gbnRvaHModHctPnR3X2Rwb3J0KTsKKwkJZW50cnkudXNlcmxvY2tzID0gMDsgCisKKwkJaWYgKCFpbmV0X2RpYWdfYmNfcnVuKFJUQV9EQVRBKGJjKSwgUlRBX1BBWUxPQUQoYmMpLCAmZW50cnkpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGluZXRfdHdza19kaWFnX2ZpbGwodHcsIHNrYiwgci0+aWRpYWdfZXh0LAorCQkJCSAgIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCSAgIGNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksIGNiLT5ubGgpOwogfQogCiBzdGF0aWMgaW50IGluZXRfZGlhZ19maWxsX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJICAgIHUzMiBwaWQsIHUzMiBzZXEsCi0JCQkgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQorCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MzIgcGlkLCB1MzIgc2VxLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwpAQCAtNTA0LDcgKzU4Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfcmVxcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKKwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJc3RydWN0IGluZXRfZGlhZ19lbnRyeSBlbnRyeTsKIAlzdHJ1Y3QgaW5ldF9kaWFnX3JlcSAqciA9IE5MTVNHX0RBVEEoY2ItPm5saCk7CkBAIC01NTYsNyArNjM0LDcgQEAKIAkJCQkJaW5ldDZfcnNrKHJlcSktPmxvY19hZGRyLnM2X2FkZHIzMiA6CiAjZW5kaWYKIAkJCQkJJmlyZXEtPmxvY19hZGRyOwotCQkJCWVudHJ5LmRhZGRyID0gCisJCQkJZW50cnkuZGFkZHIgPQogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKIAkJCQkJKGVudHJ5LmZhbWlseSA9PSBBRl9JTkVUNikgPwogCQkJCQlpbmV0Nl9yc2socmVxKS0+cm10X2FkZHIuczZfYWRkcjMyIDoKQEAgLTU5OSw3ICs2NzcsNyBAQAogCWhhbmRsZXIgPSBpbmV0X2RpYWdfdGFibGVbY2ItPm5saC0+bmxtc2dfdHlwZV07CiAJQlVHX09OKGhhbmRsZXIgPT0gTlVMTCk7CiAJaGFzaGluZm8gPSBoYW5kbGVyLT5pZGlhZ19oYXNoaW5mbzsKLQkJCisKIAlzX2kgPSBjYi0+YXJnc1sxXTsKIAlzX251bSA9IG51bSA9IGNiLT5hcmdzWzJdOwogCkBAIC02MzAsNyArNzA4LDcgQEAKIAkJCQkgICAgY2ItPmFyZ3NbM10gPiAwKQogCQkJCQlnb3RvIHN5bl9yZWN2OwogCi0JCQkJaWYgKGluZXRfZGlhZ19kdW1wX3NvY2soc2tiLCBzaywgY2IpIDwgMCkgeworCQkJCWlmIChpbmV0X2Nza19kaWFnX2R1bXAoc2ssIHNrYiwgY2IpIDwgMCkgewogCQkJCQlpbmV0X2xpc3Rlbl91bmxvY2soaGFzaGluZm8pOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQpAQCAtNjcyLDcgKzc1MCw2IEBACiAJCQlzX251bSA9IDA7CiAKIAkJcmVhZF9sb2NrX2JoKCZoZWFkLT5sb2NrKTsKLQogCQludW0gPSAwOwogCQlza19mb3JfZWFjaChzaywgbm9kZSwgJmhlYWQtPmNoYWluKSB7CiAJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CkBAIC02ODQsOSArNzYxLDEwIEBACiAJCQlpZiAoci0+aWQuaWRpYWdfc3BvcnQgIT0gaW5ldC0+c3BvcnQgJiYKIAkJCSAgICByLT5pZC5pZGlhZ19zcG9ydCkKIAkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJaWYgKHItPmlkLmlkaWFnX2Rwb3J0ICE9IGluZXQtPmRwb3J0ICYmIHItPmlkLmlkaWFnX2Rwb3J0KQorCQkJaWYgKHItPmlkLmlkaWFnX2Rwb3J0ICE9IGluZXQtPmRwb3J0ICYmCisJCQkgICAgci0+aWQuaWRpYWdfZHBvcnQpCiAJCQkJZ290byBuZXh0X25vcm1hbDsKLQkJCWlmIChpbmV0X2RpYWdfZHVtcF9zb2NrKHNrYiwgc2ssIGNiKSA8IDApIHsKKwkJCWlmIChpbmV0X2Nza19kaWFnX2R1bXAoc2ssIHNrYiwgY2IpIDwgMCkgewogCQkJCXJlYWRfdW5sb2NrX2JoKCZoZWFkLT5sb2NrKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CkBAIC02OTUsMTkgKzc3MywyMCBAQAogCQl9CiAKIAkJaWYgKHItPmlkaWFnX3N0YXRlcyAmIFRDUEZfVElNRV9XQUlUKSB7Ci0JCQlza19mb3JfZWFjaChzaywgbm9kZSwKKwkJCXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3OworCisJCQlpbmV0X3R3c2tfZm9yX2VhY2godHcsIG5vZGUsCiAJCQkJICAgICZoYXNoaW5mby0+ZWhhc2hbaSArIGhhc2hpbmZvLT5laGFzaF9zaXplXS5jaGFpbikgewotCQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAogCQkJCWlmIChudW0gPCBzX251bSkKIAkJCQkJZ290byBuZXh0X2R5aW5nOwotCQkJCWlmIChyLT5pZC5pZGlhZ19zcG9ydCAhPSBpbmV0LT5zcG9ydCAmJgorCQkJCWlmIChyLT5pZC5pZGlhZ19zcG9ydCAhPSB0dy0+dHdfc3BvcnQgJiYKIAkJCQkgICAgci0+aWQuaWRpYWdfc3BvcnQpCiAJCQkJCWdvdG8gbmV4dF9keWluZzsKLQkJCQlpZiAoci0+aWQuaWRpYWdfZHBvcnQgIT0gaW5ldC0+ZHBvcnQgJiYKKwkJCQlpZiAoci0+aWQuaWRpYWdfZHBvcnQgIT0gdHctPnR3X2Rwb3J0ICYmCiAJCQkJICAgIHItPmlkLmlkaWFnX2Rwb3J0KQogCQkJCQlnb3RvIG5leHRfZHlpbmc7Ci0JCQkJaWYgKGluZXRfZGlhZ19kdW1wX3NvY2soc2tiLCBzaywgY2IpIDwgMCkgeworCQkJCWlmIChpbmV0X3R3c2tfZGlhZ19kdW1wKHR3LCBza2IsIGNiKSA8IDApIHsKIAkJCQkJcmVhZF91bmxvY2tfYmgoJmhlYWQtPmxvY2spOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQpAQCAtNzI0LDggKzgwMyw3IEBACiAJcmV0dXJuIHNrYi0+bGVuOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQKLWluZXRfZGlhZ19yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQorc3RhdGljIGlubGluZSBpbnQgaW5ldF9kaWFnX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgpCiB7CiAJaWYgKCEobmxoLT5ubG1zZ19mbGFncyZOTE1fRl9SRVFVRVNUKSkKIAkJcmV0dXJuIDA7CkBAIC03NTUsOSArODMzLDggQEAKIAkJfQogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGlkaWFnbmwsIHNrYiwgbmxoLAogCQkJCQkgIGluZXRfZGlhZ19kdW1wLCBOVUxMKTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlyZXR1cm4gaW5ldF9kaWFnX2dldF9leGFjdChza2IsIG5saCk7Ci0JfQogCiBlcnJfaW52YWw6CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC03NjYsMTUgKzg0MywxNSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9kaWFnX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCBubG1zZ2hkciAqIG5saDsKLQogCWlmIChza2ItPmxlbiA+PSBOTE1TR19TUEFDRSgwKSkgewotCQlubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOwotCQlpZiAobmxoLT5ubG1zZ19sZW4gPCBzaXplb2YoKm5saCkgfHwgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikKKwkJaW50IGVycjsKKwkJc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOworCisJCWlmIChubGgtPm5sbXNnX2xlbiA8IHNpemVvZigqbmxoKSB8fAorCQkgICAgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikKIAkJCXJldHVybjsKIAkJZXJyID0gaW5ldF9kaWFnX3Jjdl9tc2coc2tiLCBubGgpOwotCQlpZiAoZXJyIHx8IG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9BQ0spIAorCQlpZiAoZXJyIHx8IG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9BQ0spCiAJCQluZXRsaW5rX2Fjayhza2IsIG5saCwgZXJyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwppbmRleCBjZTVmZTNmLi4yMTYwODc0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0cGVlci5jCisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmMKQEAgLTMwNCw4ICszMDQsNyBAQAogCQkJLyogbG9vayBmb3IgYSBub2RlIHRvIGluc2VydCBpbnN0ZWFkIG9mIHAgKi8KIAkJCXN0cnVjdCBpbmV0X3BlZXIgKnQ7CiAJCQl0ID0gbG9va3VwX3JpZ2h0ZW1wdHkocCk7Ci0JCQlpZiAoKnN0YWNrcHRyWy0xXSAhPSB0KQotCQkJCUJVRygpOworCQkJQlVHX09OKCpzdGFja3B0clstMV0gIT0gdCk7CiAJCQkqKi0tc3RhY2twdHIgPSB0LT5hdmxfbGVmdDsKIAkJCS8qIHQgaXMgcmVtb3ZlZCwgdC0+djRkYWRkciA+IHgtPnY0ZGFkZHIgZm9yIGFueQogCQkJICogeCBpbiBwLT5hdmxfbGVmdCBzdWJ0cmVlLgpAQCAtMzE0LDggKzMxMyw3IEBACiAJCQl0LT5hdmxfbGVmdCA9IHAtPmF2bF9sZWZ0OwogCQkJdC0+YXZsX3JpZ2h0ID0gcC0+YXZsX3JpZ2h0OwogCQkJdC0+YXZsX2hlaWdodCA9IHAtPmF2bF9oZWlnaHQ7Ci0JCQlpZiAoZGVscFsxXSAhPSAmcC0+YXZsX2xlZnQpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oZGVscFsxXSAhPSAmcC0+YXZsX2xlZnQpOwogCQkJZGVscFsxXSA9ICZ0LT5hdmxfbGVmdDsgLyogd2FzICZwLT5hdmxfbGVmdCAqLwogCQl9CiAJCXBlZXJfYXZsX3JlYmFsYW5jZShzdGFjaywgc3RhY2twdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCBkZTE2ZTk0Li4xZTkzZWFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJfQogCiAJaWYgKGlwZ3JlX2ZiX3R1bm5lbF9kZXYtPmZsYWdzJklGRl9VUCkKLQkJcmV0dXJuIGlwZ3JlX2ZiX3R1bm5lbF9kZXYtPnByaXY7CisJCXJldHVybiBuZXRkZXZfcHJpdihpcGdyZV9mYl90dW5uZWxfZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjc4LDcgKzI3OCw3IEBACiAJICByZXR1cm4gTlVMTDsKIAogCWRldi0+aW5pdCA9IGlwZ3JlX3R1bm5lbF9pbml0OwotCW50ID0gZGV2LT5wcml2OworCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAludC0+cGFybXMgPSAqcGFybXM7CiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKGRldikgPCAwKSB7CkBAIC0yODYsOSArMjg2LDYgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JbnQgPSBkZXYtPnByaXY7Ci0JbnQtPnBhcm1zID0gKnBhcm1zOwotCiAJZGV2X2hvbGQoZGV2KTsKIAlpcGdyZV90dW5uZWxfbGluayhudCk7CiAJcmV0dXJuIG50OwpAQCAtMjk5LDcgKzI5Niw3IEBACiAKIHN0YXRpYyB2b2lkIGlwZ3JlX3R1bm5lbF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpcGdyZV90dW5uZWxfdW5saW5rKChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXYpOworCWlwZ3JlX3R1bm5lbF91bmxpbmsobmV0ZGV2X3ByaXYoZGV2KSk7CiAJZGV2X3B1dChkZXYpOwogfQogCkBAIC01MTgsNyArNTE1LDcgQEAKIAkJc2tiMi0+ZHN0LT5vcHMtPnVwZGF0ZV9wbXR1KHNrYjItPmRzdCwgcmVsX2luZm8pOwogCQlyZWxfaW5mbyA9IGh0b25sKHJlbF9pbmZvKTsKIAl9IGVsc2UgaWYgKHR5cGUgPT0gSUNNUF9USU1FX0VYQ0VFREVEKSB7Ci0JCXN0cnVjdCBpcF90dW5uZWwgKnQgPSAoc3RydWN0IGlwX3R1bm5lbCopc2tiMi0+ZGV2LT5wcml2OworCQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoc2tiMi0+ZGV2KTsKIAkJaWYgKHQtPnBhcm1zLmlwaC50dGwpIHsKIAkJCXJlbF90eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7CiAJCQlyZWxfY29kZSA9IElDTVBfSE9TVF9VTlJFQUNIOwpAQCAtNjY5LDcgKzY2Niw3IEBACiAKIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSAoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2OworCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnR1bm5lbC0+c3RhdDsKIAlzdHJ1Y3QgaXBoZHIgICpvbGRfaXBoID0gc2tiLT5uaC5pcGg7CiAJc3RydWN0IGlwaGRyICAqdGlwaDsKQEAgLTkxNSw3ICs5MTIsNyBAQAogCQkJdCA9IGlwZ3JlX3R1bm5lbF9sb2NhdGUoJnAsIDApOwogCQl9CiAJCWlmICh0ID09IE5VTEwpCi0JCQl0ID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCQltZW1jcHkoJnAsICZ0LT5wYXJtcywgc2l6ZW9mKHApKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgJnAsIHNpemVvZihwKSkpCiAJCQllcnIgPSAtRUZBVUxUOwpAQCAtOTU1LDcgKzk1Miw3IEBACiAJCQl9IGVsc2UgewogCQkJCXVuc2lnbmVkIG5mbGFncz0wOwogCi0JCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkJCQlpZiAoTVVMVElDQVNUKHAuaXBoLmRhZGRyKSkKIAkJCQkJbmZsYWdzID0gSUZGX0JST0FEQ0FTVDsKQEAgLTEwMDQsNyArMTAwMSw3IEBACiAJCQlpZiAoKHQgPSBpcGdyZV90dW5uZWxfbG9jYXRlKCZwLCAwKSkgPT0gTlVMTCkKIAkJCQlnb3RvIGRvbmU7CiAJCQllcnIgPSAtRVBFUk07Ci0JCQlpZiAodCA9PSBpcGdyZV9mYl90dW5uZWxfZGV2LT5wcml2KQorCQkJaWYgKHQgPT0gbmV0ZGV2X3ByaXYoaXBncmVfZmJfdHVubmVsX2RldikpCiAJCQkJZ290byBkb25lOwogCQkJZGV2ID0gdC0+ZGV2OwogCQl9CkBAIC0xMDIxLDEyICsxMDE4LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXBncmVfdHVubmVsX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAmKCgoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2KS0+c3RhdCk7CisJcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7CiB9CiAKIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmIChuZXdfbXR1IDwgNjggfHwgbmV3X210dSA+IDB4RkZGOCAtIHR1bm5lbC0+aGxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2LT5tdHUgPSBuZXdfbXR1OwpAQCAtMTA2Niw3ICsxMDYzLDcgQEAKIHN0YXRpYyBpbnQgaXBncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHR5cGUsCiAJCQl2b2lkICpkYWRkciwgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfcHVzaChza2IsIHQtPmhsZW4pOwogCXUxNiAqcCA9ICh1MTYqKShpcGgrMSk7CiAKQEAgLTEwOTMsNyArMTA5MCw3IEBACiAKIHN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcF90dW5uZWwgKnQgPSAoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2OworCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKE1VTFRJQ0FTVCh0LT5wYXJtcy5pcGguZGFkZHIpKSB7CiAJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IHQtPnBhcm1zLmxpbmssCkBAIC0xMTE3LDcgKzExMTQsNyBAQAogCiBzdGF0aWMgaW50IGlwZ3JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJaWYgKE1VTFRJQ0FTVCh0LT5wYXJtcy5pcGguZGFkZHIpICYmIHQtPm1saW5rKSB7CiAJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluZXRkZXZfYnlfaW5kZXgodC0+bWxpbmspOwogCQlpZiAoaW5fZGV2KSB7CkBAIC0xMTU3LDcgKzExNTQsNyBAQAogCWludCBtdHUgPSBFVEhfREFUQV9MRU47CiAJaW50IGFkZGVuZCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgNDsKIAotCXR1bm5lbCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAKIAl0dW5uZWwtPmRldiA9IGRldjsKQEAgLTEyMjEsNyArMTIxOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlwZ3JlX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcGhkciAqaXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwogCiAJdHVubmVsLT5kZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGMyMTY5YjQuLjMzMjRmYmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiYmQ4NWY1Li5iYzVjYTIzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JbnQgPSBkZXYtPnByaXY7CisJbnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlkZXYtPmluaXQgPSBpcGlwX3R1bm5lbF9pbml0OwogCW50LT5wYXJtcyA9ICpwYXJtczsKQEAgLTI2OSw3ICsyNjksNyBAQAogCQl0dW5uZWxzX3djWzBdID0gTlVMTDsKIAkJd3JpdGVfdW5sb2NrX2JoKCZpcGlwX2xvY2spOwogCX0gZWxzZQotCQlpcGlwX3R1bm5lbF91bmxpbmsoKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdik7CisJCWlwaXBfdHVubmVsX3VubGluayhuZXRkZXZfcHJpdihkZXYpKTsKIAlkZXZfcHV0KGRldik7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQlza2IyLT5kc3QtPm9wcy0+dXBkYXRlX3BtdHUoc2tiMi0+ZHN0LCByZWxfaW5mbyk7CiAJCXJlbF9pbmZvID0gaHRvbmwocmVsX2luZm8pOwogCX0gZWxzZSBpZiAodHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpIHsKLQkJc3RydWN0IGlwX3R1bm5lbCAqdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilza2IyLT5kZXYtPnByaXY7CisJCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihza2IyLT5kZXYpOwogCQlpZiAodC0+cGFybXMuaXBoLnR0bCkgewogCQkJcmVsX3R5cGUgPSBJQ01QX0RFU1RfVU5SRUFDSDsKIAkJCXJlbF9jb2RlID0gSUNNUF9IT1NUX1VOUkVBQ0g7CkBAIC01MTQsNyArNTE0LDcgQEAKIAogc3RhdGljIGludCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPnN0YXQ7CiAJc3RydWN0IGlwaGRyICAqdGlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAl1OCAgICAgdG9zID0gdHVubmVsLT5wYXJtcy5pcGgudG9zOwpAQCAtNjc0LDcgKzY3NCw3IEBACiAJCQl0ID0gaXBpcF90dW5uZWxfbG9jYXRlKCZwLCAwKTsKIAkJfQogCQlpZiAodCA9PSBOVUxMKQotCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJbWVtY3B5KCZwLCAmdC0+cGFybXMsIHNpemVvZihwKSk7CiAJCWlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsICZwLCBzaXplb2YocCkpKQogCQkJZXJyID0gLUVGQVVMVDsKQEAgLTcxMSw3ICs3MTEsNyBAQAogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAJCQkJaXBpcF90dW5uZWxfdW5saW5rKHQpOwogCQkJCXQtPnBhcm1zLmlwaC5zYWRkciA9IHAuaXBoLnNhZGRyOwogCQkJCXQtPnBhcm1zLmlwaC5kYWRkciA9IHAuaXBoLmRhZGRyOwpAQCAtNzY1LDcgKzc2NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXBpcF90dW5uZWxfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXYpLT5zdGF0KTsKKwlyZXR1cm4gJigoKHN0cnVjdCBpcF90dW5uZWwqKW5ldGRldl9wcml2KGRldikpLT5zdGF0KTsKIH0KIAogc3RhdGljIGludCBpcGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQpAQCAtODAwLDcgKzgwMCw3IEBACiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCi0JdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwl0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAogCXR1bm5lbC0+ZGV2ID0gZGV2OwpAQCAtODM4LDcgKzgzOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlwaXBfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBkZXYtPnByaXY7CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAogCXR1bm5lbC0+ZGV2ID0gZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDlhNWMwY2UuLmY1OGFjOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTE3OCw4ICsxNzgsOCBAQAogc3RhdGljIGludCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKilkZXYtPnByaXYpLT50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKilkZXYtPnByaXYpLT50eF9wYWNrZXRzKys7CisJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYoZGV2KSktPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKW5ldGRldl9wcml2KGRldikpLT50eF9wYWNrZXRzKys7CiAJaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCByZWdfdmlmX251bSwgSUdNUE1TR19XSE9MRVBLVCk7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAlrZnJlZV9za2Ioc2tiKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJlZ192aWZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopZGV2LT5wcml2OworCXJldHVybiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKW5ldGRldl9wcml2KGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTExNDksOCArMTE0OSw4IEBACiAJaWYgKHZpZi0+ZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKSB7CiAJCXZpZi0+cGt0X291dCsrOwogCQl2aWYtPmJ5dGVzX291dCs9c2tiLT5sZW47Ci0JCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXZpZi0+ZGV2LT5wcml2KS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXZpZi0+ZGV2LT5wcml2KS0+dHhfcGFja2V0cysrOworCQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdih2aWYtPmRldikpLT50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYodmlmLT5kZXYpKS0+dHhfcGFja2V0cysrOwogCQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTIxMCw4ICsxMjEwLDggQEAKIAlpZiAodmlmLT5mbGFncyAmIFZJRkZfVFVOTkVMKSB7CiAJCWlwX2VuY2FwKHNrYiwgdmlmLT5sb2NhbCwgdmlmLT5yZW1vdGUpOwogCQkvKiBGSVhNRTogZXh0cmEgb3V0cHV0IGZpcmV3YWxsIHN0ZXAgdXNlZCB0byBiZSBoZXJlLiAtLVJSICovCi0JCSgoc3RydWN0IGlwX3R1bm5lbCAqKXZpZi0+ZGV2LT5wcml2KS0+c3RhdC50eF9wYWNrZXRzKys7Ci0JCSgoc3RydWN0IGlwX3R1bm5lbCAqKXZpZi0+ZGV2LT5wcml2KS0+c3RhdC50eF9ieXRlcys9c2tiLT5sZW47CisJCSgoc3RydWN0IGlwX3R1bm5lbCAqKW5ldGRldl9wcml2KHZpZi0+ZGV2KSktPnN0YXQudHhfcGFja2V0cysrOworCQkoKHN0cnVjdCBpcF90dW5uZWwgKiluZXRkZXZfcHJpdih2aWYtPmRldikpLT5zdGF0LnR4X2J5dGVzKz1za2ItPmxlbjsKIAl9CiAKIAlJUENCKHNrYiktPmZsYWdzIHw9IElQU0tCX0ZPUldBUkRFRDsKQEAgLTE0NjcsOCArMTQ2Nyw4IEBACiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsKIAlza2ItPmRzdCA9IE5VTEw7Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopcmVnX2Rldi0+cHJpdiktPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXJlZ19kZXYtPnByaXYpLT5yeF9wYWNrZXRzKys7CisJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYocmVnX2RldikpLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdihyZWdfZGV2KSktPnJ4X3BhY2tldHMrKzsKIAluZl9yZXNldChza2IpOwogCW5ldGlmX3J4KHNrYik7CiAJZGV2X3B1dChyZWdfZGV2KTsKQEAgLTE1MjIsOCArMTUyMiw4IEBACiAJc2tiLT5pcF9zdW1tZWQgPSAwOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlkc3RfcmVsZWFzZShza2ItPmRzdCk7Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopcmVnX2Rldi0+cHJpdiktPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXJlZ19kZXYtPnByaXYpLT5yeF9wYWNrZXRzKys7CisJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYocmVnX2RldikpLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdihyZWdfZGV2KSktPnJ4X3BhY2tldHMrKzsKIAlza2ItPmRzdCA9IE5VTEw7CiAJbmZfcmVzZXQoc2tiKTsKIAluZXRpZl9yeChza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAwYTQ2MTIzLi5hOTdlZDU0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMzM0Nyw3ICszMzQ3LDcgQEAKIAkJCWludCBvZmZzZXQgPSBzdGFydCAtIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCQkJaW50IHNpemUgPSBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgLSBzdGFydDsKIAotCQkJaWYgKG9mZnNldCA8IDApIEJVRygpOworCQkJQlVHX09OKG9mZnNldCA8IDApOwogCQkJaWYgKHNpemUgPiAwKSB7CiAJCQkJc2l6ZSA9IG1pbihjb3B5LCBzaXplKTsKIAkJCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCwgc2tiX3B1dChuc2tiLCBzaXplKSwgc2l6ZSkpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggYjRjNGJlYi4uZWZhM2U3MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMjI2LDYgKzIyNiw4IEBACiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+c2FkZHIsICZmbC0+Zmw2X3NyYyk7CiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+ZGFkZHIsIGZpcnN0X2hvcCk7CiAKKwlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OworCiAJbXR1ID0gZHN0X210dShkc3QpOwogCWlmICgoc2tiLT5sZW4gPD0gbXR1KSB8fCBpcGZyYWdvaykgewogCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKQEAgLTExODIsNiArMTE4NCw4IEBACiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+c2FkZHIsICZmbC0+Zmw2X3NyYyk7CiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+ZGFkZHIsIGZpbmFsX2RzdCk7CiAKKwlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OworCiAJc2tiLT5kc3QgPSBkc3RfY2xvbmUoJnJ0LT51LmRzdCk7CiAJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CQogCWVyciA9IE5GX0hPT0soUEZfSU5FVDYsIE5GX0lQNl9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kc3QtPmRldiwgZHN0X291dHB1dCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggZjA3OTYyMS4uYzNjMmJmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXQgPSBkZXYtPnByaXY7CisJdCA9IG5ldGRldl9wcml2KGRldik7CiAJZGV2LT5pbml0ID0gaXA2aXA2X3RubF9kZXZfaW5pdDsKIAl0LT5wYXJtcyA9ICpwOwogCkBAIC0zMDgsNyArMzA4LDcgQEAKIHN0YXRpYyB2b2lkCiBpcDZpcDZfdG5sX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoZGV2ID09IGlwNmlwNl9mYl90bmxfZGV2KSB7CiAJCXdyaXRlX2xvY2tfYmgoJmlwNmlwNl9sb2NrKTsKQEAgLTYyMyw3ICs2MjMsNyBAQAogc3RhdGljIGludCAKIGlwNmlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcDZfdG5sICp0ID0gKHN0cnVjdCBpcDZfdG5sICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnQtPnN0YXQ7CiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoID0gc2tiLT5uaC5pcHY2aDsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCA9IE5VTEw7CkBAIC05MzMsMTEgKzkzMywxMSBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKChlcnIgPSBpcDZpcDZfdG5sX2xvY2F0ZSgmcCwgJnQsIDApKSA9PSAtRU5PREVWKQotCQkJCXQgPSAoc3RydWN0IGlwNl90bmwgKikgZGV2LT5wcml2OworCQkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCQkJZWxzZSBpZiAoZXJyKQogCQkJCWJyZWFrOwogCQl9IGVsc2UKLQkJCXQgPSAoc3RydWN0IGlwNl90bmwgKikgZGV2LT5wcml2OworCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkJbWVtY3B5KCZwLCAmdC0+cGFybXMsIHNpemVvZiAocCkpOwogCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCAmcCwgc2l6ZW9mIChwKSkpIHsKQEAgLTk1NSw3ICs5NTUsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFjcmVhdGUgJiYgZGV2ICE9IGlwNmlwNl9mYl90bmxfZGV2KSB7Ci0JCQl0ID0gKHN0cnVjdCBpcDZfdG5sICopIGRldi0+cHJpdjsKKwkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCQl9CiAJCWlmICghdCAmJiAoZXJyID0gaXA2aXA2X3RubF9sb2NhdGUoJnAsICZ0LCBjcmVhdGUpKSkgewogCQkJYnJlYWs7CkBAIC05OTEsMTIgKzk5MSwxMiBAQAogCQkJZXJyID0gaXA2aXA2X3RubF9sb2NhdGUoJnAsICZ0LCAwKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7Ci0JCQlpZiAodCA9PSBpcDZpcDZfZmJfdG5sX2Rldi0+cHJpdikgeworCQkJaWYgKHQgPT0gbmV0ZGV2X3ByaXYoaXA2aXA2X2ZiX3RubF9kZXYpKSB7CiAJCQkJZXJyID0gLUVQRVJNOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewotCQkJdCA9IChzdHJ1Y3QgaXA2X3RubCAqKSBkZXYtPnByaXY7CisJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJfQogCQllcnIgPSB1bnJlZ2lzdGVyX25ldGRldmljZSh0LT5kZXYpOwogCQlicmVhazsKQEAgLTEwMTYsNyArMTAxNiw3IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgogaXA2aXA2X3RubF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gJigoKHN0cnVjdCBpcDZfdG5sICopIGRldi0+cHJpdiktPnN0YXQpOworCXJldHVybiAmKCgoc3RydWN0IGlwNl90bmwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7CiB9CiAKIC8qKgpAQCAtMTA3Myw3ICsxMDczLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogaXA2aXA2X3RubF9kZXZfaW5pdF9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IChzdHJ1Y3QgaXA2X3RubCAqKSBkZXYtPnByaXY7CisJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXQtPmZsLnByb3RvID0gSVBQUk9UT19JUFY2OwogCXQtPmRldiA9IGRldjsKIAlzdHJjcHkodC0+cGFybXMubmFtZSwgZGV2LT5uYW1lKTsKQEAgLTEwODcsNyArMTA4Nyw3IEBACiBzdGF0aWMgaW50CiBpcDZpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwNl90bmwgKnQgPSAoc3RydWN0IGlwNl90bmwgKikgZGV2LT5wcml2OworCXN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpcDZpcDZfdG5sX2Rldl9pbml0X2dlbihkZXYpOwogCWlwNmlwNl90bmxfbGlua19jb25maWcodCk7CiAJcmV0dXJuIDA7CkBAIC0xMTAzLDcgKzExMDMsNyBAQAogc3RhdGljIGludCAKIGlwNmlwNl9mYl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJaXA2aXA2X3RubF9kZXZfaW5pdF9nZW4oZGV2KTsKIAlkZXZfaG9sZChkZXYpOwogCXRubHNfd2NbMF0gPSB0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCAwMjg3MmFlLi4wZGFlNDhhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCW50ID0gZGV2LT5wcml2OworCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkZXYtPmluaXQgPSBpcGlwNl90dW5uZWxfaW5pdDsKIAludC0+cGFybXMgPSAqcGFybXM7CiAKQEAgLTIxMCw3ICsyMTAsNyBAQAogCQl3cml0ZV91bmxvY2tfYmgoJmlwaXA2X2xvY2spOwogCQlkZXZfcHV0KGRldik7CiAJfSBlbHNlIHsKLQkJaXBpcDZfdHVubmVsX3VubGluaygoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2KTsKKwkJaXBpcDZfdHVubmVsX3VubGluayhuZXRkZXZfcHJpdihkZXYpKTsKIAkJZGV2X3B1dChkZXYpOwogCX0KIH0KQEAgLTM0Niw3ICszNDYsNyBAQAogCQlydDZpID0gcnQ2X2xvb2t1cCgmaXBoNi0+ZGFkZHIsICZpcGg2LT5zYWRkciwgTlVMTCwgMCk7CiAKIAkJaWYgKHJ0NmkgJiYgcnQ2aS0+cnQ2aV9kZXYgJiYgcnQ2aS0+cnQ2aV9kZXYtPnR5cGUgPT0gQVJQSFJEX1NJVCkgewotCQkJc3RydWN0IGlwX3R1bm5lbCAqIHQgPSAoc3RydWN0IGlwX3R1bm5lbCopcnQ2aS0+cnQ2aV9kZXYtPnByaXY7CisJCQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYocnQ2aS0+cnQ2aV9kZXYpOwogCQkJaWYgKHJlbF90eXBlID09IElDTVBWNl9USU1FX0VYQ0VFRCAmJiB0LT5wYXJtcy5pcGgudHRsKSB7CiAJCQkJcmVsX3R5cGUgPSBJQ01QVjZfREVTVF9VTlJFQUNIOwogCQkJCXJlbF9jb2RlID0gSUNNUFY2X0FERFJfVU5SRUFDSDsKQEAgLTQyNCw3ICs0MjQsNyBAQAogCiBzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPnN0YXQ7CiAJc3RydWN0IGlwaGRyICAqdGlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoNiA9IHNrYi0+bmguaXB2Nmg7CkBAIC02MTAsNyArNjEwLDcgQEAKIAkJCXQgPSBpcGlwNl90dW5uZWxfbG9jYXRlKCZwLCAwKTsKIAkJfQogCQlpZiAodCA9PSBOVUxMKQotCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJbWVtY3B5KCZwLCAmdC0+cGFybXMsIHNpemVvZihwKSk7CiAJCWlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsICZwLCBzaXplb2YocCkpKQogCQkJZXJyID0gLUVGQVVMVDsKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAJCQkJaXBpcDZfdHVubmVsX3VubGluayh0KTsKIAkJCQl0LT5wYXJtcy5pcGguc2FkZHIgPSBwLmlwaC5zYWRkcjsKIAkJCQl0LT5wYXJtcy5pcGguZGFkZHIgPSBwLmlwaC5kYWRkcjsKQEAgLTY4Myw3ICs2ODMsNyBAQAogCQkJaWYgKCh0ID0gaXBpcDZfdHVubmVsX2xvY2F0ZSgmcCwgMCkpID09IE5VTEwpCiAJCQkJZ290byBkb25lOwogCQkJZXJyID0gLUVQRVJNOwotCQkJaWYgKHQgPT0gaXBpcDZfZmJfdHVubmVsX2Rldi0+cHJpdikKKwkJCWlmICh0ID09IG5ldGRldl9wcml2KGlwaXA2X2ZiX3R1bm5lbF9kZXYpKQogCQkJCWdvdG8gZG9uZTsKIAkJCWRldiA9IHQtPmRldjsKIAkJfQpAQCAtNzAwLDcgKzcwMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXBpcDZfdHVubmVsX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAmKCgoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2KS0+c3RhdCk7CisJcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7CiB9CiAKIHN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCkBAIC03MzUsNyArNzM1LDcgQEAKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWw7CiAJc3RydWN0IGlwaGRyICppcGg7CiAKLQl0dW5uZWwgPSAoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2OworCXR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJaXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwogCiAJdHVubmVsLT5kZXYgPSBkZXY7CkBAIC03NzUsNyArNzc1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXBpcDZfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBkZXYtPnByaXY7CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAogCXR1bm5lbC0+ZGV2ID0gZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggNTJlZmQwNC4uNGMyZjZkNiAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0yOTcsOCArMjk3LDcgQEAKIAkJZXJyID0gRUlOVFI7CiAJaWYgKGVyciA+PSA1MTIpCiAJCWVyciA9IEVJTlZBTDsKLQlpZiAoZXJyIDw9IDAgfHwgZXJyID49IDI1NikKLQkJQlVHKCk7CisJQlVHX09OKGVyciA8PSAwIHx8IGVyciA+PSAyNTYpOwogCiAJaGRyID0gKHN0cnVjdCBzYWRiX21zZyAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBzYWRiX21zZykpOwogCXBma2V5X2hkcl9kdXAoaGRyLCBvcmlnKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9NYWtlZmlsZSBiL25ldC9zY2hlZC9NYWtlZmlsZQppbmRleCBlNDhkMGQ0Li4wZjA2YWVjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvTWFrZWZpbGUKKysrIGIvbmV0L3NjaGVkL01ha2VmaWxlCkBAIC03LDEzICs3LDEzIEBACiBvYmotJChDT05GSUdfTkVUX1NDSEVEKQkJKz0gc2NoX2FwaS5vIHNjaF9maWZvLm8gc2NoX2JsYWNraG9sZS5vCiBvYmotJChDT05GSUdfTkVUX0NMUykJCSs9IGNsc19hcGkubwogb2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKQkrPSBhY3RfYXBpLm8KLW9iai0kKENPTkZJR19ORVRfQUNUX1BPTElDRSkJKz0gcG9saWNlLm8KLW9iai0kKENPTkZJR19ORVRfQ0xTX1BPTElDRSkJKz0gcG9saWNlLm8KLW9iai0kKENPTkZJR19ORVRfQUNUX0dBQ1QpCSs9IGdhY3Qubwotb2JqLSQoQ09ORklHX05FVF9BQ1RfTUlSUkVEKQkrPSBtaXJyZWQubwotb2JqLSQoQ09ORklHX05FVF9BQ1RfSVBUKQkrPSBpcHQubwotb2JqLSQoQ09ORklHX05FVF9BQ1RfUEVESVQpCSs9IHBlZGl0Lm8KLW9iai0kKENPTkZJR19ORVRfQUNUX1NJTVApCSs9IHNpbXBsZS5vCitvYmotJChDT05GSUdfTkVUX0FDVF9QT0xJQ0UpCSs9IGFjdF9wb2xpY2Uubworb2JqLSQoQ09ORklHX05FVF9DTFNfUE9MSUNFKQkrPSBhY3RfcG9saWNlLm8KK29iai0kKENPTkZJR19ORVRfQUNUX0dBQ1QpCSs9IGFjdF9nYWN0Lm8KK29iai0kKENPTkZJR19ORVRfQUNUX01JUlJFRCkJKz0gYWN0X21pcnJlZC5vCitvYmotJChDT05GSUdfTkVUX0FDVF9JUFQpCSs9IGFjdF9pcHQubworb2JqLSQoQ09ORklHX05FVF9BQ1RfUEVESVQpCSs9IGFjdF9wZWRpdC5vCitvYmotJChDT05GSUdfTkVUX0FDVF9TSU1QKQkrPSBhY3Rfc2ltcGxlLm8KIG9iai0kKENPTkZJR19ORVRfU0NIX0NCUSkJKz0gc2NoX2NicS5vCiBvYmotJChDT05GSUdfTkVUX1NDSF9IVEIpCSs9IHNjaF9odGIubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfSFBGUSkJKz0gc2NoX2hwZnEubwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggMmNlMWNiMi4uNzkyY2U1OSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAl3aGlsZSAoKGEgPSBhY3QpICE9IE5VTEwpIHsKIHJlcGVhdDoKIAkJaWYgKGEtPm9wcyAmJiBhLT5vcHMtPmFjdCkgewotCQkJcmV0ID0gYS0+b3BzLT5hY3QoJnNrYiwgYSwgcmVzKTsKKwkJCXJldCA9IGEtPm9wcy0+YWN0KHNrYiwgYSwgcmVzKTsKIAkJCWlmIChUQ19NVU5HRUQgJiBza2ItPnRjX3ZlcmQpIHsKIAkJCQkvKiBjb3BpZWQgYWxyZWFkeSwgYWxsb3cgdHJhbXBsaW5nICovCiAJCQkJc2tiLT50Y192ZXJkID0gU0VUX1RDX09LMk1VTkdFKHNrYi0+dGNfdmVyZCk7CkBAIC0yOTAsNyArMjkwLDcgQEAKIAlpZiAoYV9vID09IE5VTEwpIHsKICNpZmRlZiBDT05GSUdfS01PRAogCQlydG5sX3VubG9jaygpOwotCQlyZXF1ZXN0X21vZHVsZShhY3RfbmFtZSk7CisJCXJlcXVlc3RfbW9kdWxlKCJhY3RfJXMiLCBhY3RfbmFtZSk7CiAJCXJ0bmxfbG9jaygpOwogCiAJCWFfbyA9IHRjX2xvb2t1cF9hY3Rpb25fbihhY3RfbmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZ2FjdC5jIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gbmV0L3NjaGVkL2dhY3QuYwpyZW5hbWUgdG8gbmV0L3NjaGVkL2FjdF9nYWN0LmMKaW5kZXggZDFjNmQ1NC4uYTFlNjhmNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2dhY3QuYworKysgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwpAQCAtMTM1LDEwICsxMzUsOSBAQAogfQogCiBzdGF0aWMgaW50Ci10Y2ZfZ2FjdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCit0Y2ZfZ2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQogewogCXN0cnVjdCB0Y2ZfZ2FjdCAqcCA9IFBSSVYoYSwgZ2FjdCk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCWludCBhY3Rpb24gPSBUQ19BQ1RfU0hPVDsKIAogCXNwaW5fbG9jaygmcC0+bG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvaXB0LmMgYi9uZXQvc2NoZWQvYWN0X2lwdC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIG5ldC9zY2hlZC9pcHQuYwpyZW5hbWUgdG8gbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCBmNTAxMzZlLi5iNTAwMTkzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvaXB0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwpAQCAtMjAxLDExICsyMDEsMTAgQEAKIH0KIAogc3RhdGljIGludAotdGNmX2lwdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCit0Y2ZfaXB0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCiB7CiAJaW50IHJldCA9IDAsIHJlc3VsdCA9IDA7CiAJc3RydWN0IHRjZl9pcHQgKnAgPSBQUklWKGEsIGlwdCk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCiAJaWYgKHNrYl9jbG9uZWQoc2tiKSkgewogCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQpAQCAtMjIyLDYgKzIyMSw5IEBACiAJIHdvcnJ5IGxhdGVyIC0gZGFuZ2VyIC0gdGhpcyBBUEkgc2VlbXMgdG8gaGF2ZSBjaGFuZ2VkCiAJIGZyb20gZWFybGllciBrZXJuZWxzICovCiAKKwkvKiBpcHRhYmxlcyB0YXJnZXRzIHRha2UgYSBkb3VibGUgc2tiIHBvaW50ZXIgaW4gY2FzZSB0aGUgc2tiCisJICogbmVlZHMgdG8gYmUgcmVwbGFjZWQuIFdlIGRvbid0IG93biB0aGUgc2tiLCBzbyB0aGlzIG11c3Qgbm90CisJICogaGFwcGVuLiBUaGUgcHNrYl9leHBhbmRfaGVhZCBhYm92ZSBzaG91bGQgbWFrZSBzdXJlIG9mIHRoaXMgKi8KIAlyZXQgPSBwLT50LT51Lmtlcm5lbC50YXJnZXQtPnRhcmdldCgmc2tiLCBza2ItPmRldiwgTlVMTCwKIAkJCQkJICAgIHAtPmhvb2ssIHAtPnQtPmRhdGEsIE5VTEwpOwogCXN3aXRjaCAocmV0KSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvbWlycmVkLmMgYi9uZXQvc2NoZWQvYWN0X21pcnJlZC5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIG5ldC9zY2hlZC9taXJyZWQuYwpyZW5hbWUgdG8gbmV0L3NjaGVkL2FjdF9taXJyZWQuYwppbmRleCAyMGQwNjkxLi40ZmNjY2JkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvbWlycmVkLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9taXJyZWQuYwpAQCAtMTU4LDEyICsxNTgsMTEgQEAKIH0KIAogc3RhdGljIGludAotdGNmX21pcnJlZChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCit0Y2ZfbWlycmVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCiB7CiAJc3RydWN0IHRjZl9taXJyZWQgKnAgPSBQUklWKGEsIG1pcnJlZCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IE5VTEw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCXUzMiBhdCA9IEdfVENfQVQoc2tiLT50Y192ZXJkKTsKIAogCXNwaW5fbG9jaygmcC0+bG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBuZXQvc2NoZWQvcGVkaXQuYwpyZW5hbWUgdG8gbmV0L3NjaGVkL2FjdF9wZWRpdC5jCmluZGV4IDc2N2QyNGYuLjE3NDJhNjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9wZWRpdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwpAQCAtMTMwLDEwICsxMzAsOSBAQAogfQogCiBzdGF0aWMgaW50Ci10Y2ZfcGVkaXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQordGNmX3BlZGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCiB7CiAJc3RydWN0IHRjZl9wZWRpdCAqcCA9IFBSSVYoYSwgcGVkaXQpOwotCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAlpbnQgaSwgbXVuZ2VkID0gMDsKIAl1OCAqcHB0cjsKIApAQCAtMjQ2LDEwICsyNDUsMTIgQEAKIAl0Lmxhc3R1c2UgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIHAtPnRtLmxhc3R1c2UpOwogCXQuZXhwaXJlcyA9IGppZmZpZXNfdG9fY2xvY2tfdChwLT50bS5leHBpcmVzKTsKIAlSVEFfUFVUKHNrYiwgVENBX1BFRElUX1RNLCBzaXplb2YodCksICZ0KTsKKwlrZnJlZShvcHQpOwogCXJldHVybiBza2ItPmxlbjsKIAogcnRhdHRyX2ZhaWx1cmU6CiAJc2tiX3RyaW0oc2tiLCBiIC0gc2tiLT5kYXRhKTsKKwlrZnJlZShvcHQpOwogCXJldHVybiAtMTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBuZXQvc2NoZWQvcG9saWNlLmMKcmVuYW1lIHRvIG5ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggZWIzOWZiMi4uZmE4NzdmOCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3BvbGljZS5jCisrKyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKQEAgLTI4NCwxMSArMjg0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGNmX2FjdF9wb2xpY2Uoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLAorc3RhdGljIGludCB0Y2ZfYWN0X3BvbGljZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQogewogCXBzY2hlZF90aW1lX3Qgbm93OwotCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAlzdHJ1Y3QgdGNmX3BvbGljZSAqcCA9IFBSSVYoYSk7CiAJbG9uZyB0b2tzOwogCWxvbmcgcHRva3MgPSAwOwpAQCAtNDA4LDcgKzQwNyw3IEBACiBtb2R1bGVfaW5pdChwb2xpY2VfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQocG9saWNlX2NsZWFudXBfbW9kdWxlKTsKIAotI2VuZGlmCisjZWxzZSAvKiBDT05GSUdfTkVUX0NMU19BQ1QgKi8KIAogc3RydWN0IHRjZl9wb2xpY2UgKiB0Y2ZfcG9saWNlX2xvY2F0ZShzdHJ1Y3QgcnRhdHRyICpydGEsIHN0cnVjdCBydGF0dHIgKmVzdCkKIHsKQEAgLTU0NSw2ICs1NDQsNyBAQAogCXNwaW5fdW5sb2NrKCZwLT5sb2NrKTsKIAlyZXR1cm4gcC0+YWN0aW9uOwogfQorRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlKTsKIAogaW50IHRjZl9wb2xpY2VfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX3BvbGljZSAqcCkKIHsKQEAgLTYwMSwxMyArNjAxLDQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLQotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlKTsKLUVYUE9SVF9TWU1CT0wodGNmX3BvbGljZV9kZXN0cm95KTsKLUVYUE9SVF9TWU1CT0wodGNmX3BvbGljZV9kdW1wKTsKLUVYUE9SVF9TWU1CT0wodGNmX3BvbGljZV9kdW1wX3N0YXRzKTsKLUVYUE9SVF9TWU1CT0wodGNmX3BvbGljZV9oYXNoKTsKLUVYUE9SVF9TWU1CT0wodGNmX3BvbGljZV9odCk7Ci1FWFBPUlRfU1lNQk9MKHRjZl9wb2xpY2VfbG9jYXRlKTsKLUVYUE9SVF9TWU1CT0wodGNmX3BvbGljZV9sb29rdXApOwotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlX25ld19pbmRleCk7CisjZW5kaWYgLyogQ09ORklHX05FVF9DTFNfQUNUICovCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2ltcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIG5ldC9zY2hlZC9zaW1wbGUuYwpyZW5hbWUgdG8gbmV0L3NjaGVkL2FjdF9zaW1wbGUuYwppbmRleCA4YTZhZTRmLi5lNWYyZTFmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2ltcGxlLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYwpAQCAtNDQsOSArNDQsOCBAQAogI2luY2x1ZGUgPG5ldC9wa3RfYWN0Lmg+CiAjaW5jbHVkZSA8bmV0L2FjdF9nZW5lcmljLmg+CiAKLXN0YXRpYyBpbnQgdGNmX3NpbXAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQorc3RhdGljIGludCB0Y2Zfc2ltcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQogewotCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAlzdHJ1Y3QgdGNmX2RlZmFjdCAqcCA9IFBSSVYoYSwgZGVmYWN0KTsKIAogCXNwaW5fbG9jaygmcC0+bG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2NicS5jIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwppbmRleCAwOTQ1M2Y5Li42Y2Q4MTcwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2NicS5jCisrKyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCSAgICAoY2wgPSBjYnFfY2xhc3NfbG9va3VwKHEsIHByaW8pKSAhPSBOVUxMKQogCQlyZXR1cm4gY2w7CiAKLQkqcWVyciA9IE5FVF9YTUlUX0RST1A7CisJKnFlcnIgPSBORVRfWE1JVF9CWVBBU1M7CiAJZm9yICg7OykgewogCQlpbnQgcmVzdWx0ID0gMDsKIAkJZGVmbWFwID0gaGVhZC0+ZGVmYXVsdHM7CkBAIC00MTMsNyArNDEzLDcgQEAKIAlxLT5yeF9jbGFzcyA9IGNsOwogI2VuZGlmCiAJaWYgKGNsID09IE5VTEwpIHsKLQkJaWYgKHJldCA9PSBORVRfWE1JVF9EUk9QKQorCQlpZiAocmV0ID09IE5FVF9YTUlUX0JZUEFTUykKIAkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwppbmRleCBjMjY3NjRiLi45MTEzMmY2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuYworKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiBkbyB7CQkJCQkJCQkJXAogCXN0cnVjdCB0aW1ldmFsIHR2OwkJCQkJCVwKIAlkb19nZXR0aW1lb2ZkYXkoJnR2KTsJCQkJCQlcCi0JKHN0YW1wKSA9IDEwMDAwMDBVTEwgKiB0di50dl9zZWMgKyB0di50dl91c2VjOwkJCVwKKwkoc3RhbXApID0gMVVMTCAqIFVTRUNfUEVSX1NFQyAqIHR2LnR2X3NlYyArIHR2LnR2X3VzZWM7CQlcCiB9IHdoaWxlICgwKQogI2VuZGlmCiAKQEAgLTUwMiw4ICs1MDIsOCBAQAogCXU2NCBkeDsKIAogCWR4ID0gKCh1NjQpZCAqIFBTQ0hFRF9KSUZGSUUyVVMoSFopKTsKLQlkeCArPSAxMDAwMDAwIC0gMTsKLQlkb19kaXYoZHgsIDEwMDAwMDApOworCWR4ICs9IFVTRUNfUEVSX1NFQyAtIDE7CisJZG9fZGl2KGR4LCBVU0VDX1BFUl9TRUMpOwogCXJldHVybiBkeDsKIH0KIApAQCAtNTIzLDcgKzUyMyw3IEBACiB7CiAJdTY0IGQ7CiAKLQlkID0gZHggKiAxMDAwMDAwOworCWQgPSBkeCAqIFVTRUNfUEVSX1NFQzsKIAlkb19kaXYoZCwgUFNDSEVEX0pJRkZJRTJVUyhIWikpOwogCXJldHVybiAodTMyKWQ7CiB9CkBAIC0xMjI3LDcgKzEyMjcsNyBAQAogCQlpZiAoY2wtPmxldmVsID09IDApCiAJCQlyZXR1cm4gY2w7CiAKLQkqcWVyciA9IE5FVF9YTUlUX0RST1A7CisJKnFlcnIgPSBORVRfWE1JVF9CWVBBU1M7CiAJdGNmID0gcS0+cm9vdC5maWx0ZXJfbGlzdDsKIAl3aGlsZSAodGNmICYmIChyZXN1bHQgPSB0Y19jbGFzc2lmeShza2IsIHRjZiwgJnJlcykpID49IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKQEAgLTE2NDMsNyArMTY0Myw3IEBACiAKIAljbCA9IGhmc2NfY2xhc3NpZnkoc2tiLCBzY2gsICZlcnIpOwogCWlmIChjbCA9PSBOVUxMKSB7Ci0JCWlmIChlcnIgPT0gTkVUX1hNSVRfRFJPUCkKKwkJaWYgKGVyciA9PSBORVRfWE1JVF9CWVBBU1MpCiAJCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDU1OGNjMDguLjNlYzk1ZGYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJaWYgKChjbCA9IGh0Yl9maW5kKHNrYi0+cHJpb3JpdHksc2NoKSkgIT0gTlVMTCAmJiBjbC0+bGV2ZWwgPT0gMCkgCiAJCXJldHVybiBjbDsKIAotCSpxZXJyID0gTkVUX1hNSVRfRFJPUDsKKwkqcWVyciA9IE5FVF9YTUlUX0JZUEFTUzsKIAl0Y2YgPSBxLT5maWx0ZXJfbGlzdDsKIAl3aGlsZSAodGNmICYmIChyZXN1bHQgPSB0Y19jbGFzc2lmeShza2IsIHRjZiwgJnJlcykpID49IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKQEAgLTcyNCw3ICs3MjQsNyBAQAogCX0KICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKICAgICB9IGVsc2UgaWYgKCFjbCkgewotCWlmIChyZXQgPT0gTkVUX1hNSVRfRFJPUCkKKwlpZiAocmV0ID09IE5FVF9YTUlUX0JZUEFTUykKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAlrZnJlZV9za2IgKHNrYik7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggM2FjMGY0OS4uNWIzYTNlNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAl1MzIgYmFuZCA9IHNrYi0+cHJpb3JpdHk7CiAJc3RydWN0IHRjZl9yZXN1bHQgcmVzOwogCi0JKnFlcnIgPSBORVRfWE1JVF9EUk9QOworCSpxZXJyID0gTkVUX1hNSVRfQllQQVNTOwogCWlmIChUQ19IX01BSihza2ItPnByaW9yaXR5KSAhPSBzY2gtPmhhbmRsZSkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHRjX2NsYXNzaWZ5KHNrYiwgcS0+ZmlsdGVyX2xpc3QsICZyZXMpKSB7CkBAIC05MSw3ICs5MSw4IEBACiAJcWRpc2MgPSBwcmlvX2NsYXNzaWZ5KHNrYiwgc2NoLCAmcmV0KTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlpZiAocWRpc2MgPT0gTlVMTCkgewotCQlpZiAocmV0ID09IE5FVF9YTUlUX0RST1ApCisKKwkJaWYgKHJldCA9PSBORVRfWE1JVF9CWVBBU1MpCiAJCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIHJldDsKQEAgLTExOCw3ICsxMTksNyBAQAogCXFkaXNjID0gcHJpb19jbGFzc2lmeShza2IsIHNjaCwgJnJldCk7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJaWYgKHFkaXNjID09IE5VTEwpIHsKLQkJaWYgKHJldCA9PSBORVRfWE1JVF9EUk9QKQorCQlpZiAocmV0ID09IE5FVF9YTUlUX0JZUEFTUykKIAkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwppbmRleCBjNGEyYThjLi43OWI4ZWYzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RlcWwuYworKysgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAKIHN0YXRpYyBpbnQgdGVxbF9tYXN0ZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0ZXFsX21hc3RlciAqbWFzdGVyID0gKHZvaWQqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm1hc3RlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IFFkaXNjICpzdGFydCwgKnE7CiAJaW50IGJ1c3k7CiAJaW50IG5vcmVzOwpAQCAtMzUwLDcgKzM1MCw3IEBACiBzdGF0aWMgaW50IHRlcWxfbWFzdGVyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgUWRpc2MgKiBxOwotCXN0cnVjdCB0ZXFsX21hc3RlciAqbSA9ICh2b2lkKilkZXYtPnByaXY7CisJc3RydWN0IHRlcWxfbWFzdGVyICptID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgbXR1ID0gMHhGRkZFOwogCXVuc2lnbmVkIGZsYWdzID0gSUZGX05PQVJQfElGRl9NVUxUSUNBU1Q7CiAKQEAgLTM5NywxMyArMzk3LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdGVxbF9tYXN0ZXJfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm0gPSAodm9pZCopZGV2LT5wcml2OworCXN0cnVjdCB0ZXFsX21hc3RlciAqbSA9IG5ldGRldl9wcml2KGRldik7CiAJcmV0dXJuICZtLT5zdGF0czsKIH0KIAogc3RhdGljIGludCB0ZXFsX21hc3Rlcl9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0Jc3RydWN0IHRlcWxfbWFzdGVyICptID0gKHZvaWQqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm0gPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBRZGlzYyAqcTsKIAogCWlmIChuZXdfbXR1IDwgNjgpCkBAIC00MjMsNyArNDIzLDcgQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHRlcWxfbWFzdGVyX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRlcWxfbWFzdGVyICptYXN0ZXIgPSBkZXYtPnByaXY7CisJc3RydWN0IHRlcWxfbWFzdGVyICptYXN0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBRZGlzY19vcHMgKm9wcyA9ICZtYXN0ZXItPnFvcHM7CiAKIAltYXN0ZXItPmRldgk9IGRldjsKQEAgLTQ3Niw3ICs0NzYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQltYXN0ZXIgPSBkZXYtPnByaXY7CisJCW1hc3RlciA9IG5ldGRldl9wcml2KGRldik7CiAKIAkJc3RybGNweShtYXN0ZXItPnFvcHMuaWQsIGRldi0+bmFtZSwgSUZOQU1TSVopOwogCQllcnIgPSByZWdpc3Rlcl9xZGlzYygmbWFzdGVyLT5xb3BzKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwppbmRleCAyZDdkOGE1Li5iOGIzOGFiIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKKysrIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCkBAIC0xMjUwLDggKzEyNTAsNyBAQAogCQljYXNlIFNDVFBfQ01EX1RJTUVSX1NUQVJUOgogCQkJdGltZXIgPSAmYXNvYy0+dGltZXJzW2NtZC0+b2JqLnRvXTsKIAkJCXRpbWVvdXQgPSBhc29jLT50aW1lb3V0c1tjbWQtPm9iai50b107Ci0JCQlpZiAoIXRpbWVvdXQpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oIXRpbWVvdXQpOwogCiAJCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0OwogCQkJc2N0cF9hc3NvY2lhdGlvbl9ob2xkKGFzb2MpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jYWNoZS5jIGIvbmV0L3N1bnJwYy9jYWNoZS5jCmluZGV4IGY1MDllOTkuLmRjYWEwYzQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYworKysgYi9uZXQvc3VucnBjL2NhY2hlLmMKQEAgLTU3NSwxMiArNTc1LDExIEBACiAJaWYgKHJwLT5xLmxpc3QubmV4dCA9PSAmY2QtPnF1ZXVlKSB7CiAJCXNwaW5fdW5sb2NrKCZxdWV1ZV9sb2NrKTsKIAkJdXAoJnF1ZXVlX2lvX3NlbSk7Ci0JCWlmIChycC0+b2Zmc2V0KQotCQkJQlVHKCk7CisJCUJVR19PTihycC0+b2Zmc2V0KTsKIAkJcmV0dXJuIDA7CiAJfQogCXJxID0gY29udGFpbmVyX29mKHJwLT5xLmxpc3QubmV4dCwgc3RydWN0IGNhY2hlX3JlcXVlc3QsIHEubGlzdCk7Ci0JaWYgKHJxLT5xLnJlYWRlcikgQlVHKCk7CisJQlVHX09OKHJxLT5xLnJlYWRlcik7CiAJaWYgKHJwLT5vZmZzZXQgPT0gMCkKIAkJcnEtPnJlYWRlcnMrKzsKIAlzcGluX3VubG9jaygmcXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCBlNDI5NmM4Li5iMTljYzI2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCisrKyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTEyMiw4ICsxMjIsNyBAQAogCXJxc3RwLT5ycV9hcmd1c2VkID0gMDsKIAlycXN0cC0+cnFfcmVzdXNlZCA9IDA7CiAJYXJnaGkgPSAwOwotCWlmIChwYWdlcyA+IFJQQ1NWQ19NQVhQQUdFUykKLQkJQlVHKCk7CisJQlVHX09OKHBhZ2VzID4gUlBDU1ZDX01BWFBBR0VTKTsKIAl3aGlsZSAocGFnZXMpIHsKIAkJc3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAoIXApCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCmluZGV4IDJmNDUzMWYuLjZlZDMzMDIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC01NDAsOCArNTQwLDcgQEAKIAkJCXN0YXJ0ID0gZW5kOwogCQl9CiAJfQotCWlmIChsZW4pCi0JCUJVRygpOworCUJVR19PTihsZW4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2ljdl93YWxrKTsKIApAQCAtNjEwLDggKzYwOSw3IEBACiAJCQlzdGFydCA9IGVuZDsKIAkJfQogCX0KLQlpZiAobGVuKQotCQlCVUcoKTsKKwlCVUdfT04obGVuKTsKIAlyZXR1cm4gZWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RvX3NndmVjKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDU5NjE0YTkuLjA3N2JiZjkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjQ4LDExICsyNDgsOSBAQAogCiB2b2lkIF9feGZybV9wb2xpY3lfZGVzdHJveShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSkKIHsKLQlpZiAoIXBvbGljeS0+ZGVhZCkKLQkJQlVHKCk7CisJQlVHX09OKCFwb2xpY3ktPmRlYWQpOwogCi0JaWYgKHBvbGljeS0+YnVuZGxlcykKLQkJQlVHKCk7CisJQlVHX09OKHBvbGljeS0+YnVuZGxlcyk7CiAKIAlpZiAoZGVsX3RpbWVyKCZwb2xpY3ktPnRpbWVyKSkKIAkJQlVHKCk7Cg==