ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbAppbmRleCA3MDVjNDQyLi4xNWNlMGYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCkBAIC0yOTEsNyArMjkxLDcgQEAKIAogIUVkcml2ZXJzL3VzYi9jb3JlL2hjZC5jCiAhRWRyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCi0hRWRyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKKyFJZHJpdmVycy91c2IvY29yZS9idWZmZXIuYwogICAgIDwvY2hhcHRlcj4KIAogICAgIDxjaGFwdGVyPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC95ZWFsaW5rLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQveWVhbGluay50eHQKaW5kZXggODVmMDk1YTcuLjA5NjJjNWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQveWVhbGluay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC95ZWFsaW5rLnR4dApAQCAtMiw3ICsyLDYgQEAKIAogMC4gU3RhdHVzCiB+fn5+fn5+fn4KLQogVGhlIHAxayBpcyBhIHJlbGF0aXZlbHkgY2hlYXAgdXNiIDEuMSBwaG9uZSB3aXRoOgogICAtIGtleWJvYXJkCQlmdWxsIHN1cHBvcnQsIHllYWxpbmsua28gLyBpbnB1dCBldmVudCBBUEkKICAgLSBMQ0QJCQlmdWxsIHN1cHBvcnQsIHllYWxpbmsua28gLyBzeXNmcyBBUEkKQEAgLTE3LDkgKzE2LDggQEAKIAogMS4gQ29tcGlsYXRpb24gKHN0YW5kIGFsb25lIHZlcnNpb24pCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQogQ3VycmVudGx5IG9ubHkga2VybmVsIDIuNi54LnkgdmVyc2lvbnMgYXJlIHN1cHBvcnRlZC4KLUluIG9yZGVyIHRvIGJ1aWxkIHRoZSB5ZWFsaW5rLmtvIG1vZHVsZSBkbzoKK0luIG9yZGVyIHRvIGJ1aWxkIHRoZSB5ZWFsaW5rLmtvIG1vZHVsZSBkbwogCiAgIG1ha2UKIApAQCAtMjgsNiArMjYsMjEgQEAKIGFyZSBsb2NhdGVkLCBkZWZhdWx0IC91c3Ivc3JjL2xpbnV4LgogCiAKKzEuMSBUcm91Ymxlc2hvb3RpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn4KK1E6IE1vZHVsZSB5ZWFsaW5rIGNvbXBpbGVkIGFuZCBpbnN0YWxsZWQgd2l0aG91dCBhbnkgcHJvYmxlbSBidXQgcGhvbmUKKyAgIGlzIG5vdCBpbml0aWFsaXplZCBhbmQgZG9lcyBub3QgcmVhY3QgdG8gYW55IGFjdGlvbnMuCitBOiBJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlOgorICAgaGlkZGV2MDogVVNCIEhJRCB2MS4wMCBEZXZpY2UgW1llYWxpbmsgTmV0d29yayBUZWNobm9sb2d5IEx0ZC4gVk9JUCBVU0IgUGhvbmUKKyAgIGluIGRtZXNnLCBpdCBtZWFucyB0aGF0IHRoZSBoaWQgZHJpdmVyIGhhcyBncmFiYmVkIHRoZSBkZXZpY2UgZmlyc3QuIFRyeSB0bworICAgbG9hZCBtb2R1bGUgeWVhbGluayBiZWZvcmUgYW55IG90aGVyIHVzYiBoaWQgZHJpdmVyLiBQbGVhc2Ugc2VlIHRoZQorICAgaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkIGJ5IHlvdXIgZGlzdHJpYnV0aW9uIG9uIG1vZHVsZSBjb25maWd1cmF0aW9uLgorCitROiBQaG9uZSBpcyB3b3JraW5nIG5vdyAoZGlzcGxheXMgdmVyc2lvbiBhbmQgYWNjZXB0cyBrZXlwYWQgaW5wdXQpIGJ1dCBJIGNhbid0CisgICBmaW5kIHRoZSBzeXNmcyBmaWxlcy4KK0E6IFRoZSBzeXNmcyBmaWxlcyBhcmUgbG9jYXRlZCBvbiB0aGUgcGFydGljdWxhciB1c2IgZW5kcG9pbnQuIE9uIG1vc3QKKyAgIGRpc3RyaWJ1dGlvbnMgeW91IGNhbiBkbzogImZpbmQgL3N5cy8gLW5hbWUgZ2V0X2ljb25zIiBmb3IgYSBoaW50LgorCiAKIDIuIGtleWJvYXJkIGZlYXR1cmVzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA5NzE1ODlhLi45MDc2NmI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTUxNyw4ICsxNTE3LDYgQEAKIAl1YXJ0Njg1MD0JW0hXLE9TU10KIAkJCUZvcm1hdDogPGlvPiw8aXJxPgogCi0JdXNiLWhhbmRvZmYJW0hXXSBFbmFibGUgZWFybHkgVVNCIEJJT1MgLT4gT1MgaGFuZG9mZgotCiAJdXNiaGlkLm1vdXNlcG9sbD0KIAkJCVtVU0JISURdIFRoZSBpbnRlcnZhbCB3aGljaCBtaWNlIGFyZSB0byBiZSBwb2xsZWQgYXQuCiAKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMzkyOGRjNy4uNzcwMTU1YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTExNiwxMiArMTE2LDYgQEAKIEw6CWxpbnV4LWhhbXNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLVlFQUxJTksgUEhPTkUgRFJJVkVSCi1QOglIZW5rIFZlcmdvbmV0Ci1NOglIZW5rLlZlcmdvbmV0QGdtYWlsLmNvbQotTDoJdXNiYjJrLWFwaS1kZXZAbm9uZ251Lm9yZwotUzoJTWFpbnRhaW5lZAotCiA4MTM5Q1AgMTAvMTAwIEZBU1QgRVRIRVJORVQgRFJJVkVSCiBQOglKZWZmIEdhcnppawogTToJamdhcnppa0Bwb2JveC5jb20KQEAgLTI0OTUsMTQgKzI0ODksNiBAQAogTDoJbGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJU3VwcG9ydGVkCiAKLVVTQiBCTFVFVE9PVEggVFRZIENPTlZFUlRFUiBEUklWRVIKLVA6CUdyZWcgS3JvYWgtSGFydG1hbgotTToJZ3JlZ0Brcm9haC5jb20KLUw6CWxpbnV4LXVzYi11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLUw6CWxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVM6CU1haW50YWluZWQKLVc6CWh0dHA6Ly93d3cua3JvYWguY29tL2xpbnV4LXVzYi8KLQogVVNCIENEQyBFVEhFUk5FVCBEUklWRVIKIFA6CUdyZWcgS3JvYWgtSGFydG1hbgogTToJZ3JlZ0Brcm9haC5jb20KQEAgLTI4NjMsNiArMjg0OSwxMiBAQAogTDoJbGludXgtaGFtc0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorWUVBTElOSyBQSE9ORSBEUklWRVIKK1A6CUhlbmsgVmVyZ29uZXQKK006CUhlbmsuVmVyZ29uZXRAZ21haWwuY29tCitMOgl1c2JiMmstYXBpLWRldkBub25nbnUub3JnCitTOglNYWludGFpbmVkCisKIFlNRlBDSSBZQU1BSEEgUENJIFNPVU5EIChVc2UgQUxTQSBpbnN0ZWFkKQogUDoJUGV0ZSBaYWl0Y2V2CiBNOgl6YWl0Y2V2QHlhaG9vLmNvbQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA5NDVjMTVhLi4xNjQyMzc1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNjMsOCArNjMsNiBAQAogCXNlbGVjdCBBQ1BJCiAJc2VsZWN0IE5VTUEKIAlzZWxlY3QgQUNQSV9OVU1BCi0Jc2VsZWN0IFZJUlRVQUxfTUVNX01BUAotCXNlbGVjdCBESVNDT05USUdNRU0KIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIHN5c3RlbSB0eXBlIG9mIHlvdXIgaGFyZHdhcmUuICBBICJnZW5lcmljIiBrZXJuZWwKIAkgIHdpbGwgcnVuIG9uIGFueSBzdXBwb3J0ZWQgSUEtNjQgc3lzdGVtLiAgSG93ZXZlciwgaWYgeW91IGNvbmZpZ3VyZQpAQCAtMTc2LDQwICsxNzQsNiBAQAogCWRlZmF1bHQgIjYiIGlmIElUQU5JVU0KIAogIyBhbGlnbiBjYWNoZS1zZW5zaXRpdmUgZGF0YSB0byA2NCBieXRlcwotY29uZmlnIE5VTUEKLQlib29sICJOVU1BIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhSUE2NF9IUF9TSU0KLQlkZWZhdWx0IHkgaWYgSUE2NF9TR0lfU04yCi0Jc2VsZWN0IEFDUElfTlVNQQotCWhlbHAKLQkgIFNheSBZIHRvIGNvbXBpbGUgdGhlIGtlcm5lbCB0byBzdXBwb3J0IE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeQotCSAgQWNjZXNzKS4gIFRoaXMgb3B0aW9uIGlzIGZvciBjb25maWd1cmluZyBoaWdoLWVuZCBtdWx0aXByb2Nlc3NvcgotCSAgc2VydmVyIHN5c3RlbXMuICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KLWNvbmZpZyBWSVJUVUFMX01FTV9NQVAKLQlib29sICJWaXJ0dWFsIG1lbSBtYXAiCi0JZGVmYXVsdCB5IGlmICFJQTY0X0hQX1NJTQotCWhlbHAKLQkgIFNheSBZIHRvIGNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIHN1cHBvcnQgZm9yIGEgdmlydHVhbCBtZW0gbWFwLgotCSAgVGhpcyBjb2RlIGFsc28gb25seSB0YWtlcyBlZmZlY3QgaWYgYSBtZW1vcnkgaG9sZSBvZiBncmVhdGVyIHRoYW4KLQkgIDEgR2IgaXMgZm91bmQgZHVyaW5nIGJvb3QuICBZb3UgbXVzdCB0dXJuIHRoaXMgb3B0aW9uIG9uIGlmIHlvdQotCSAgcmVxdWlyZSB0aGUgRElTQ09OVElHTUVNIG9wdGlvbiBmb3IgeW91ciBtYWNoaW5lLiBJZiB5b3UgYXJlCi0JICB1bnN1cmUsIHNheSBZLgotCi1jb25maWcgSE9MRVNfSU5fWk9ORQotCWJvb2wKLQlkZWZhdWx0IHkgaWYgVklSVFVBTF9NRU1fTUFQCi0KLWNvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKLQlib29sICJEaXNjb250aWd1b3VzIG1lbW9yeSBzdXBwb3J0IgotCWRlcGVuZHMgb24gKElBNjRfRElHIHx8IElBNjRfU0dJX1NOMiB8fCBJQTY0X0dFTkVSSUMgfHwgSUE2NF9IUF9aWDEgfHwgSUE2NF9IUF9aWDFfU1dJT1RMQikgJiYgTlVNQSAmJiBWSVJUVUFMX01FTV9NQVAKLQlkZWZhdWx0IHkgaWYgKElBNjRfU0dJX1NOMiB8fCBJQTY0X0dFTkVSSUMpICYmIE5VTUEKLQloZWxwCi0JICBTYXkgWSB0byBzdXBwb3J0IGVmZmljaWVudCBoYW5kbGluZyBvZiBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSwKLQkgIGZvciBhcmNoaXRlY3R1cmVzIHdoaWNoIGFyZSBlaXRoZXIgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykKLQkgIG9yIGhhdmUgaHVnZSBob2xlcyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBmb3Igb3RoZXIgcmVhc29ucy4KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZtL251bWE+IGZvciBtb3JlLgotCiBjb25maWcgSUE2NF9DWUNMT05FCiAJYm9vbCAiQ3ljbG9uZSAoRVhBKSBUaW1lIFNvdXJjZSBzdXBwb3J0IgogCWhlbHAKQEAgLTIzMiw4ICsxOTYsMTAgQEAKIAkgIGJhc2VkIG9uIGEgbmV0d29yayBhZGFwdGVyIGFuZCBETUEgbWVzc2FnaW5nLgogCiBjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgotCWludAotCWRlZmF1bHQgIjE4IgorCWludCAiTUFYX09SREVSICgxMSAtIDE3KSIgIGlmICFIVUdFVExCX1BBR0UKKwlyYW5nZSAxMSAxNyAgaWYgIUhVR0VUTEJfUEFHRQorCWRlZmF1bHQgIjE3IiBpZiBIVUdFVExCX1BBR0UKKwlkZWZhdWx0ICIxMSIKIAogY29uZmlnIFNNUAogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCkBAIC0yNTQsOCArMjIwLDggQEAKIAkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCiAKIGNvbmZpZyBOUl9DUFVTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTUxMikiCi0JcmFuZ2UgMiA1MTIKKwlpbnQgIk1heGltdW0gbnVtYmVyIG9mIENQVXMgKDItMTAyNCkiCisJcmFuZ2UgMiAxMDI0CiAJZGVwZW5kcyBvbiBTTVAKIAlkZWZhdWx0ICI2NCIKIAloZWxwCkBAIC0yOTgsNiArMjY0LDU4IEBACiAKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAorY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAorCWRlZl9ib29sIHkKKworY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQorCWRlZl9ib29sIHkKKwloZWxwCisJICBTYXkgWSB0byBzdXBwb3J0IGVmZmljaWVudCBoYW5kbGluZyBvZiBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSwKKwkgIGZvciBhcmNoaXRlY3R1cmVzIHdoaWNoIGFyZSBlaXRoZXIgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykKKwkgIG9yIGhhdmUgaHVnZSBob2xlcyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBmb3Igb3RoZXIgcmVhc29ucy4KKyAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92bS9udW1hPiBmb3IgbW9yZS4KKworY29uZmlnIEFSQ0hfRkxBVE1FTV9FTkFCTEUKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKKworY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQKKwlkZWZfYm9vbCB5IGlmIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDIHx8IElBNjRfSFBfWlgxIHx8IElBNjRfSFBfWlgxX1NXSU9UTEIpCisJZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKKworY29uZmlnIE5VTUEKKwlib29sICJOVU1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhSUE2NF9IUF9TSU0gJiYgIUZMQVRNRU0KKwlkZWZhdWx0IHkgaWYgSUE2NF9TR0lfU04yCisJaGVscAorCSAgU2F5IFkgdG8gY29tcGlsZSB0aGUga2VybmVsIHRvIHN1cHBvcnQgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5CisJICBBY2Nlc3MpLiAgVGhpcyBvcHRpb24gaXMgZm9yIGNvbmZpZ3VyaW5nIGhpZ2gtZW5kIG11bHRpcHJvY2Vzc29yCisJICBzZXJ2ZXIgc3lzdGVtcy4gIElmIGluIGRvdWJ0LCBzYXkgTi4KKworIyBWSVJUVUFMX01FTV9NQVAgYW5kIEZMQVRfTk9ERV9NRU1fTUFQIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KKyMgVklSVFVBTF9NRU1fTUFQIGhhcyBiZWVuIHJldGFpbmVkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCitjb25maWcgVklSVFVBTF9NRU1fTUFQCisJYm9vbCAiVmlydHVhbCBtZW0gbWFwIgorCWRlcGVuZHMgb24gIVNQQVJTRU1FTQorCWRlZmF1bHQgeSBpZiAhSUE2NF9IUF9TSU0KKwloZWxwCisJICBTYXkgWSB0byBjb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciBhIHZpcnR1YWwgbWVtIG1hcC4KKwkgIFRoaXMgY29kZSBhbHNvIG9ubHkgdGFrZXMgZWZmZWN0IGlmIGEgbWVtb3J5IGhvbGUgb2YgZ3JlYXRlciB0aGFuCisJICAxIEdiIGlzIGZvdW5kIGR1cmluZyBib290LiAgWW91IG11c3QgdHVybiB0aGlzIG9wdGlvbiBvbiBpZiB5b3UKKwkgIHJlcXVpcmUgdGhlIERJU0NPTlRJR01FTSBvcHRpb24gZm9yIHlvdXIgbWFjaGluZS4gSWYgeW91IGFyZQorCSAgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEhPTEVTX0lOX1pPTkUKKwlib29sCisJZGVmYXVsdCB5IGlmIFZJUlRVQUxfTUVNX01BUAorCitjb25maWcgSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKIGNvbmZpZyBJQTMyX1NVUFBPUlQKIAlib29sICJTdXBwb3J0IGZvciBMaW51eC94ODYgYmluYXJpZXMiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggM2I2NWNiYi4uYjQwNjcyYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLXJjMgotIyBNb24gTm92IDI5IDEzOjI3OjQ4IDIwMDQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzEKKyMgV2VkIFNlcCAxNCAxNToxODo0OSAyMDA1CiAjCiAKICMKQEAgLTEwLDM0ICsxMCw0MCBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtNTgsMTIgKzY0LDE1IEBACiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT049eQogQ09ORklHX0VGST15CiBDT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0lBNjRfR0VORVJJQyBpcyBub3Qgc2V0CiBDT05GSUdfSUE2NF9ESUc9eQogIyBDT05GSUdfSUE2NF9IUF9aWDEgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JQTY0X1NHSV9TTjIgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9IUF9TSU0gaXMgbm90IHNldAogQ09ORklHX0lUQU5JVU09eQpAQCAtNzIsMTcgKzgxLDMwIEBACiAjIENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0I9eQogIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKIENPTkZJR19JQTY0X0JSTF9FTVU9eQogQ09ORklHX0lBNjRfTDFfQ0FDSEVfU0hJRlQ9NgogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMX01FTV9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9DWUNMT05FIGlzIG5vdCBzZXQKIENPTkZJR19JT1NBUElDPXkKKyMgQ09ORklHX0lBNjRfU0dJX1NOX1hQIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE4CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKICMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0RFQ19MT0NLPXkKIENPTkZJR19JQTMyX1NVUFBPUlQ9eQogQ09ORklHX0NPTVBBVD15CkBAIC05NSw2ICsxMTcsNyBAQAogIwogQ09ORklHX0VGSV9WQVJTPXkKIENPTkZJR19FRklfUENEUD15CisjIENPTkZJR19ERUxMX1JCVSBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogCkBAIC0xMDIsMTggKzEyNSwyNiBAQAogIyBQb3dlciBtYW5hZ2VtZW50IGFuZCBBQ1BJCiAjCiBDT05GSUdfUE09eQotQ09ORklHX0FDUEk9eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogCiAjCiAjIEFDUEkgKEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSkgU3VwcG9ydAogIworQ09ORklHX0FDUEk9eQogQ09ORklHX0FDUElfQlVUVE9OPW0KIENPTkZJR19BQ1BJX0ZBTj1tCiBDT05GSUdfQUNQSV9QUk9DRVNTT1I9bQogQ09ORklHX0FDUElfVEhFUk1BTD1tCitDT05GSUdfQUNQSV9CTEFDS0xJU1RfWUVBUj0wCiAjIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX1BPV0VSPXkKIENPTkZJR19BQ1BJX1NZU1RFTT15CisjIENPTkZJR19BQ1BJX0NPTlRBSU5FUiBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBKQpAQCAtMTIyLDcgKzE1Myw3IEBACiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKLUNPTkZJR19QQ0lfTkFNRVM9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CkBAIC0xMzUsOCArMTY2LDcwIEBACiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCi0jIFBDLWNhcmQgYnJpZGdlcworIyBOZXR3b3JraW5nCiAjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTE1MSw2ICsyNDQsMTEgQEAKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiAjIENPTkZJR19NVEQgaXMgbm90IHNldApAQCAtMTYzLDcgKzI2MSwxMyBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfUE5QPXkKKyMgQ09ORklHX1BOUF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvdG9jb2xzCisjCitDT05GSUdfUE5QQUNQST15CiAKICMKICMgQmxvY2sgZGV2aWNlcwpAQCAtMTcyLDE0ICsyNzYsMTUgQEAKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09bQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKICMKQEAgLTE4OSw2ICsyOTQsNyBAQAogQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydApAQCAtMjExLDcgKzMxNyw4IEBACiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz1tCisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQogQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CkBAIC0yMzMsNiArMzQwLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1BJSVg9bQorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKQEAgLTI1MCw2ICszNTgsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC0yNjEsNiArMzcwLDcgQEAKICMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogCiAjCiAjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwpAQCAtMjc0LDYgKzM4NCw4IEBACiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9bQogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC0yODgsMTggKzQwMCwxMyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEFfUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfSVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODBfMTA0MCBpcyBub3Qgc2V0CkBAIC0zMDksNyArNDE2LDggQEAKICMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTI0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtMzMyLDExICs0NDAsMTQgQEAKIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9aRVJPPW0KKyMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAKICMKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC0zNDksNzIgKzQ2MCwxNCBAQAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIAogIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0IxMDAwIGlzIG5vdCBzZXQKIAogIwogIyBBUkNuZXQgZGV2aWNlcwpAQCAtNDIyLDYgKzQ3NSwxMSBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQ0Myw3ICs1MDEsNiBAQAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RHUlMgaXMgbm90IHNldAogQ09ORklHX0VFUFJPMTAwPXkKLSMgQ09ORklHX0VFUFJPMTAwX1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTQ2NSwxMyArNTIyLDE3IEBACiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKQEAgLTQ5Niw2ICs1NTcsOCBAQAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTUyNSwxOCArNTg4LDYgQEAKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwotIyBJbnB1dCBJL08gZHJpdmVycwotIwotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CkBAIC01NTQsNiArNjA1LDE3IEBACiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKQEAgLTU3MSw3ICs2MzMsNiBAQAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NVUxUSVBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc5LDYgKzY0MCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjAzLDE0ICs2NjUsMjIgQEAKICMKIENPTkZJR19BR1A9bQogQ09ORklHX0FHUF9JNDYwPW0KLUNPTkZJR19EUk09eQorQ09ORklHX0RSTT1tCiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiBDT05GSUdfRFJNX1IxMjg9bQogIyBDT05GSUdfRFJNX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFBFVCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjM1LDcgKzcwNSw3IEBACiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKQEAgLTY1MSw0MSArNzIxLDE2IEBACiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTY5NywxMCArNzQyLDU1IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NTIsMTEgKzg0MiwxMiBAQAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KK0NPTkZJR19TTkRfQUM5N19CVVM9bQogCiAjCiAjIFBDSSBkZXZpY2VzCiAjCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQogIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTc2OCw2ICs4NTksOCBAQAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0NTNDI4MT1tCiAjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldApAQCAtNzc1LDkgKzg2OCwxMCBAQAogIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CkBAIC03OTEsMTMgKzg4NSwxNCBAQAogIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIGRldmljZXMKICMKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CiAKICMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KQEAgLTgwNyw2ICs5MDIsOCBAQAogIwogIyBVU0Igc3VwcG9ydAogIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtODE4LDM1ICs5MTUsMzggQEAKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotQ09ORklHX1VTQl9BVURJTz1tCisjIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0JMVUVUT09USF9UVFk9bQotQ09ORklHX1VTQl9NSURJPW0KIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCiBDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfUldfREVURUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9IUDgyMDBlIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCkBAIC04NjMsMTkgKzk2MywyMyBAQAogIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IUFVTQlNDU0kgaXMgbm90IHNldAogCiAjCiAjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTg5NCw2ICs5OTgsNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIHBvcnQgZHJpdmVycwpAQCAtOTA5LDcgKzEwMTQsNiBAQAogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVElHTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CkBAIC05MTgsMTAgKzEwMjIsMTIgQEAKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgQVRNL0RTTCBkcml2ZXJzCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAogIwogCiAjCkBAIC05MzAsMTAgKzEwMzYsMjUgQEAKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBTTiBEZXZpY2VzCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTk0NSwxNyArMTA2NiwyMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorQ09ORklHX1hGU19FWFBPUlQ9eQogQ09ORklHX1hGU19RVU9UQT15CiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfUVVPVEFDVEw9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05ODIsMTQgKzExMDYsMTEgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUFRTX0ZTX1hBVFRSPXkKLUNPTkZJR19ERVZQVFNfRlNfU0VDVVJJVFk9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTAxMywxNSArMTEzNCwxOCBAQAogIwogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU0RfVjQ9eQogQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19MT0NLRD1tCiBDT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPW0KIENPTkZJR19TVU5SUENfR1NTPW0KIENPTkZJR19SUENTRUNfR1NTX0tSQjU9bQpAQCAtMTAzMSw5ICsxMTU1LDExIEBACiBDT05GSUdfQ0lGU19TVEFUUz15CiBDT05GSUdfQ0lGU19YQVRUUj15CiBDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtMTEwMyw4ICsxMjI5LDEyIEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUT15CiAKICMKICMgUHJvZmlsaW5nIHN1cHBvcnQKQEAgLTExMTUsMTQgKzEyNDUsMjAgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X0dSQU5VTEVfNjRNQj15CiAjIENPTkZJR19JQTY0X1BSSU5UX0hBWkFSRFMgaXMgbm90IHNldApAQCAtMTE0OSw2ICsxMjg1LDcgQEAKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldApAQCAtMTE2NCwzICsxMzAxLDcgQEAKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2Vuc3BhcnNlX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmODY2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzE5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtcmMyCisjIFdlZCBTZXAgMjggMDg6Mjc6MjkgMjAwNQorIworCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKKworIworIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKKyMKK0NPTkZJR19JQTY0PXkKK0NPTkZJR182NEJJVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1RJTUVfSU5URVJQT0xBVElPTj15CitDT05GSUdfRUZJPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0lBNjRfR0VORVJJQz15CisjIENPTkZJR19JQTY0X0RJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JQTY0X0hQX1pYMSBpcyBub3Qgc2V0CisjIENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfU0dJX1NOMiBpcyBub3Qgc2V0CisjIENPTkZJR19JQTY0X0hQX1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19JVEFOSVVNIGlzIG5vdCBzZXQKK0NPTkZJR19NQ0tJTkxFWT15CisjIENPTkZJR19JQTY0X1BBR0VfU0laRV80S0IgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKK0NPTkZJR19JQTY0X1BBR0VfU0laRV8xNktCPXkKKyMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfSUE2NF9MMV9DQUNIRV9TSElGVD03CitDT05GSUdfSUE2NF9DWUNMT05FPXkKK0NPTkZJR19JT1NBUElDPXkKKyMgQ09ORklHX0lBNjRfU0dJX1NOX1hQIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE3CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTUxMgorQ09ORklHX0hPVFBMVUdfQ1BVPXkKKyMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fREVGQVVMVD15CitDT05GSUdfTlVNQT15CitDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQorQ09ORklHX0lBMzJfU1VQUE9SVD15CitDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CitDT05GSUdfUEVSRk1PTj15CitDT05GSUdfSUE2NF9QQUxJTkZPPXkKKworIworIyBGaXJtd2FyZSBEcml2ZXJzCisjCitDT05GSUdfRUZJX1ZBUlM9eQorQ09ORklHX0VGSV9QQ0RQPXkKKyMgQ09ORklHX0RFTExfUkJVIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSQorIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKKyMKK0NPTkZJR19BQ1BJPXkKK0NPTkZJR19BQ1BJX0JVVFRPTj1tCitDT05GSUdfQUNQSV9GQU49bQorQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KK0NPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVPXkKK0NPTkZJR19BQ1BJX1RIRVJNQUw9bQorQ09ORklHX0FDUElfTlVNQT15CitDT05GSUdfQUNQSV9CTEFDS0xJU1RfWUVBUj0wCisjIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BQ1BJX1BPV0VSPXkKK0NPTkZJR19BQ1BJX1NZU1RFTT15CitDT05GSUdfQUNQSV9DT05UQUlORVI9bQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSkKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKK0NPTkZJR19IT1RQTFVHX1BDST1tCisjIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHX1BDSV9BQ1BJPW0KKyMgQ09ORklHX0hPVFBMVUdfUENJX0FDUElfSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9TR0kgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKK0NPTkZJR19BUlBEPXkKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9eQorQ09ORklHX0JMS19ERVZfSURFU0NTST1tCisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKK0NPTkZJR19CTEtfREVWX0lERVBDST15CisjIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAorQ09ORklHX0lERURNQV9QQ0lfQVVUTz15CisjIENPTkZJR19JREVETUFfT05MWURJU0sgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQ01ENjRYPXkKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1BJSVg9eQorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU0dJSU9DND15CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKK0NPTkZJR19JREVETUFfQVVUTz15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NBVEE9eQorIyBDT05GSUdfU0NTSV9TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1ZJQSBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQVRBX1ZJVEVTU0U9eQorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTEKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MF8xMDQwIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1FMQTJYWFg9eQorQ09ORklHX1NDU0lfUUxBMjFYWD1tCitDT05GSUdfU0NTSV9RTEEyMlhYPW0KK0NPTkZJR19TQ1NJX1FMQTIzMDA9bQorQ09ORklHX1NDU0lfUUxBMjMyMj1tCisjIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCisjIENPTkZJR19ETV9NVUxUSVBBVEhfRU1DIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRlVTSU9OPXkKK0NPTkZJR19GVVNJT05fU1BJPXkKK0NPTkZJR19GVVNJT05fRkM9bQorQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOAorIyBDT05GSUdfRlVTSU9OX0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorCisjCisjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1RVTElQPXkKKyMgQ09ORklHX0RFMjEwNFggaXMgbm90IHNldAorQ09ORklHX1RVTElQPW0KKyMgQ09ORklHX1RVTElQX01XSSBpcyBub3Qgc2V0CisjIENPTkZJR19UVUxJUF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTElQX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfREU0WDUgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQk9ORF84NDAgaXMgbm90IHNldAorIyBDT05GSUdfRE05MTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMSTUyNlggaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk8xMDA9bQorQ09ORklHX0UxMDA9bQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKKyMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CitDT05GSUdfVElHT04zPXkKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT15CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CitDT05GSUdfR0FNRVBPUlQ9bQorIyBDT05GSUdfR0FNRVBPUlRfTlM1NTggaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlRfTDQgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVF9GTTgwMSBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAorIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAorIyBDT05GSUdfU1ggaXMgbm90IHNldAorIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CitDT05GSUdfU0dJX1NOU0M9eQorQ09ORklHX1NHSV9USU9DWD15CitDT05GSUdfU0dJX01CQ1M9bQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX0FDUEk9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9TR0lfTDFfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0dJX0lPQzQ9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0VGSV9SVEM9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCitDT05GSUdfQUdQPW0KK0NPTkZJR19BR1BfSTQ2MD1tCitDT05GSUdfQUdQX0hQX1pYMT1tCitDT05GSUdfQUdQX1NHSV9USU9DQT1tCitDT05GSUdfRFJNPW0KK0NPTkZJR19EUk1fVERGWD1tCitDT05GSUdfRFJNX1IxMjg9bQorQ09ORklHX0RSTV9SQURFT049bQorQ09ORklHX0RSTV9NR0E9bQorQ09ORklHX0RSTV9TSVM9bQorIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19IUEVUPXkKKyMgQ09ORklHX0hQRVRfUlRDX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfSFBFVF9NTUFQPXkKK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CisjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAorQ09ORklHX01NVElNRVI9eQorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD1tCisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9IV0RFUD1tCitDT05GSUdfU05EX1JBV01JREk9bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUj15CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCitDT05GSUdfU05EX01QVTQwMV9VQVJUPW0KK0NPTkZJR19TTkRfT1BMM19MSUI9bQorQ09ORklHX1NORF9EVU1NWT1tCitDT05GSUdfU05EX1ZJUk1JREk9bQorQ09ORklHX1NORF9NVFBBVj1tCitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9NUFU0MDE9bQorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KK0NPTkZJR19TTkRfQUM5N19CVVM9bQorCisjCisjIFBDSSBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQ1M0NlhYPW0KK0NPTkZJR19TTkRfQ1M0NlhYX05FV19EU1A9eQorQ09ORklHX1NORF9DUzQyODE9bQorQ09ORklHX1NORF9FTVUxMEsxPW0KKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRk04MDE9bQorIyBDT05GSUdfU05EX0ZNODAxX1RFQTU3NVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorCisjCisjIFVTQiBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQj1tCisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkxVRVRPT1RIX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KK0NPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKK0NPTkZJR19JTkZJTklCQU5EPW0KKyMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCisjIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KKyMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNOIERldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz15CisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9eQorQ09ORklHX1hGU19FWFBPUlQ9eQorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9bQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfTkZTX0RJUkVDVElPPXkKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KK0NPTkZJR19TVU5SUENfR1NTPW0KK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9bQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NHSV9QQVJUSVRJT049eQorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKKworIworIyBIUCBTaW11bGF0b3IgZHJpdmVycworIworIyBDT05GSUdfSFBfU0lNRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX1NJTVNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9TSU1TQ1NJIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MjAKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CPXkKKyMgQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUyBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNBQkxFX1ZIUFQgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9ERUJVR19DTVBYQ0hHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lBNjRfREVCVUdfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKaW5kZXggZDQ1MmUxOC4uOWJjOGJjYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzYtdGlnZXItc21wCi0jIFdlZCBBdWcgMTcgMTA6MTk6NTEgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjMQorIyBXZWQgU2VwIDE0IDE1OjE3OjU3IDIwMDUKICMKIAogIwpAQCAtMTYsNiArMTYsNyBAQAogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC0yNyw2ICsyOCw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQpAQCAtMTAzLDYgKzEwNSw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0RFQ19MT0NLPXkKIENPTkZJR19JQTMyX1NVUFBPUlQ9eQogQ09ORklHX0NPTVBBVD15CkBAIC0xMTUsNiArMTE4LDcgQEAKICMKIENPTkZJR19FRklfVkFSUz15CiBDT05GSUdfRUZJX1BDRFA9eQorIyBDT05GSUdfREVMTF9SQlUgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIApAQCAtMTIyLDIwICsxMjYsMjcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSQogIwogQ09ORklHX1BNPXkKLUNPTkZJR19BQ1BJPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKICMKK0NPTkZJR19BQ1BJPXkKIENPTkZJR19BQ1BJX0JVVFRPTj1tCiBDT05GSUdfQUNQSV9GQU49bQogQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KLSMgQ09ORklHX0FDUElfSE9UUExVR19DUFUgaXMgbm90IHNldAorQ09ORklHX0FDUElfSE9UUExVR19DUFU9eQogQ09ORklHX0FDUElfVEhFUk1BTD1tCitDT05GSUdfQUNQSV9CTEFDS0xJU1RfWUVBUj0wCiAjIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX1BPV0VSPXkKIENPTkZJR19BQ1BJX1NZU1RFTT15Ci0jIENPTkZJR19BQ1BJX0NPTlRBSU5FUiBpcyBub3Qgc2V0CitDT05GSUdfQUNQSV9DT05UQUlORVI9bQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSkKQEAgLTE0NCw3ICsxNTUsNiBAQAogQ09ORklHX1BDSV9ET01BSU5TPXkKICMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci1DT05GSUdfUENJX05BTUVTPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE4OCwxNCArMTk4LDE5IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CkBAIC0yMTgsOSArMjMzLDExIEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTIzNSw2ICsyNTIsMTEgQEAKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiAjIENPTkZJR19NVEQgaXMgbm90IHNldApAQCAtMjQ3LDcgKzI2OSwxMyBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfUE5QPXkKKyMgQ09ORklHX1BOUF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvdG9jb2xzCisjCitDT05GSUdfUE5QQUNQST15CiAKICMKICMgQmxvY2sgZGV2aWNlcwpAQCAtMjY2LDcgKzI5NCw2IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKICMKQEAgLTI5OSw3ICszMjYsOCBAQAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVQTlAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CkBAIC0zMzksNiArMzY3LDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtMzY2LDYgKzM5NSw3IEBACiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwpAQCAtNDU0LDYgKzQ4NCw3IEBACiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NCMTAwMCBpcyBub3Qgc2V0CiAKICMKICMgQVJDbmV0IGRldmljZXMKQEAgLTQ2MSw2ICs0OTIsMTEgQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC00ODEsNiArNTE3LDcgQEAKICMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldApAQCAtNTEyLDYgKzU0OSw3IEBACiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CkBAIC01MjEsNiArNTU5LDcgQEAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKQEAgLTYxOCw2ICs2NTcsNyBAQAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CiAjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CkBAIC02NzUsNiArNzE1LDcgQEAKIENPTkZJR19EUk1fTUdBPW0KIENPTkZJR19EUk1fU0lTPW0KICMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj1tCiBDT05GSUdfSFBFVD15CiAjIENPTkZJR19IUEVUX1JUQ19JUlEgaXMgbm90IHNldApAQCAtNjkxLDcgKzczMiw2IEBACiAjIEkyQyBzdXBwb3J0CiAjCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CiAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwpAQCAtNzAyLDYgKzc0Miw3IEBACiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwogQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwpAQCAtNzA5LDYgKzc1MCwxMCBAQAogIwogCiAjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTgwMCw5ICs4NDUsMTEgQEAKICMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC05MDIsMTYgKzk0OSwxMiBAQAogQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLQotIwotIyBYRlMgc3VwcG9ydAotIwogQ09ORklHX1hGU19GUz15CiBDT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC05MTksNiArOTYyLDcgQEAKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTQ3LDEzICs5OTEsMTEgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19YQVRUUj15Ci1DT05GSUdfVE1QRlNfU0VDVVJJVFk9eQogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMDAzLDYgKzEwNDUsNyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTEwNzIsMTAgKzExMTUsMTIgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtMTA4OSw2ICsxMTM0LDcgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTIwCitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy96eDFfZGVmY29uZmlnCmluZGV4IDgwYjBlOWUuLjA4NTZjYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvengxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzYKLSMgV2VkIEF1ZyAxNyAxMDowMjo0MyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtcmMxCisjIFdlZCBTZXAgMTQgMTU6MTU6MDEgMjAwNQogIwogCiAjCkBAIC0xOCw2ICsxOCw3IEBACiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldApAQCAtMTAzLDYgKzEwNSw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0RFQ19MT0NLPXkKIENPTkZJR19JQTMyX1NVUFBPUlQ9eQogQ09ORklHX0NPTVBBVD15CkBAIC0xMTUsNiArMTE4LDcgQEAKICMKIENPTkZJR19FRklfVkFSUz15CiBDT05GSUdfRUZJX1BDRFA9eQorIyBDT05GSUdfREVMTF9SQlUgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIApAQCAtMTIyLDI4ICsxMjYsMzQgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSQogIwogQ09ORklHX1BNPXkKLUNPTkZJR19BQ1BJPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKICMKK0NPTkZJR19BQ1BJPXkKIENPTkZJR19BQ1BJX0JVVFRPTj15CiBDT05GSUdfQUNQSV9GQU49eQogQ09ORklHX0FDUElfUFJPQ0VTU09SPXkKIENPTkZJR19BQ1BJX1RIRVJNQUw9eQorQ09ORklHX0FDUElfQkxBQ0tMSVNUX1lFQVI9MAogIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQUNQSV9QT1dFUj15CiBDT05GSUdfQUNQSV9TWVNURU09eQogIyBDT05GSUdfQUNQSV9DT05UQUlORVIgaXMgbm90IHNldAogCiAjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSkKICMKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKICMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci1DT05GSUdfUENJX05BTUVTPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE4Nyw4ICsxOTcsOCBAQAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKIApAQCAtMjA0LDcgKzIxNCw2IEBACiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9eQpAQCAtMjEyLDYgKzIyMSwxMSBAQAogIyBDT05GSUdfSVBfTkZfQVJQX01BTkdMRSBpcyBub3Qgc2V0CiAKICMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIwogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldApAQCAtMjM0LDkgKzI0OCwxMSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0yNTEsNiArMjY3LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKQEAgLTI2Myw3ICsyODQsMTMgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAorQ09ORklHX1BOUD15CisjIENPTkZJR19QTlBfREVCVUcgaXMgbm90IHNldAorCisjCisjIFByb3RvY29scworIworQ09ORklHX1BOUEFDUEk9eQogCiAjCiAjIEJsb2NrIGRldmljZXMKQEAgLTI4Miw3ICszMDksNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCiAjCkBAIC0zMTUsNyArMzQxLDggQEAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERVBDST15CiBDT05GSUdfSURFUENJX1NIQVJFX0lSUT15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKQEAgLTM1NCw2ICszODEsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC0zODEsNiArNDA5LDcgQEAKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQ1Nyw2ICs0ODYsNyBAQAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQjEwMDAgaXMgbm90IHNldAogCiAjCiAjIEFSQ25ldCBkZXZpY2VzCkBAIC00NjQsNiArNDk0LDExIEBACiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogCiAjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKICMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNDg1LDYgKzUyMCw3IEBACiAjIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAorIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKQEAgLTUxNiw2ICs1NTIsNyBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldApAQCAtNTI1LDYgKzU2Miw3IEBACiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogCkBAIC02NTAsMTIgKzY4OCwxMiBAQAogQ09ORklHX0FHUF9IUF9aWDE9eQogQ09ORklHX0RSTT15CiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fR0FNTUEgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldAogQ09ORklHX0RSTV9SQURFT049eQogIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRVQgaXMgbm90IHNldAogIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKQEAgLTY4OSw3ICs3MjcsNiBAQAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC03MDMsNyArNzQwLDYgQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CkBAIC03MzAsMTIgKzc2NiwxNyBAQAogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiBDT05GSUdfVklERU9fREVWPXkKQEAgLTgwNiw2ICs4NDcsNyBAQAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCTEEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtODYyLDExICs5MDQsMTIgQEAKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CitDT05GSUdfU05EX0FDOTdfQlVTPXkKIAogIwogIyBQQ0kgZGV2aWNlcwogIwotQ09ORklHX1NORF9BQzk3X0NPREVDPXkKICMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CkBAIC04OTAsNyArOTMzLDcgQEAKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CkBAIC05NTIsOSArOTk1LDggQEAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCi0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JREkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKQEAgLTk3MSw2ICsxMDEzLDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCkBAIC05ODcsOSArMTAzMCwxMSBAQAogIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTEwODgsMTAgKzExMzMsNiBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMTAwLDYgKzExNDEsNyBAQAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTExMjYsMTMgKzExNjgsMTEgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19YQVRUUj15Ci1DT05GSUdfVE1QRlNfU0VDVVJJVFk9eQogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMTc3LDYgKzEyMTcsNyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTEyNDYsMTAgKzEyODcsMTIgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtMTI2Myw2ICsxMzA2LDcgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kZWZjb25maWcgYi9hcmNoL2lhNjQvZGVmY29uZmlnCmluZGV4IDVkYTIwODEuLjZlM2YxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMgotIyBUdWUgSnVuIDIxIDExOjMwOjQyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzEKKyMgV2VkIFNlcCAxNCAxNToxMzowMyAyMDA1CiAjCiAKICMKQEAgLTE2LDYgKzE2LDcgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtMjcsNiArMjgsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKQEAgLTgwLDYgKzgyLDEwIEBACiAjIENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0I9eQogIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKIENPTkZJR19JQTY0X0wxX0NBQ0hFX1NISUZUPTcKIENPTkZJR19OVU1BPXkKIENPTkZJR19WSVJUVUFMX01FTV9NQVA9eQpAQCAtODcsMTIgKzkzLDIxIEBACiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKIENPTkZJR19JQTY0X0NZQ0xPTkU9eQogQ09ORklHX0lPU0FQSUM9eQorIyBDT05GSUdfSUE2NF9TR0lfU05fWFAgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTgKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NTEyCiBDT05GSUdfSE9UUExVR19DUFU9eQogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0RFQ19MT0NLPXkKIENPTkZJR19JQTMyX1NVUFBPUlQ9eQogQ09ORklHX0NPTVBBVD15CkBAIC0xMDUsNiArMTIwLDcgQEAKICMKIENPTkZJR19FRklfVkFSUz15CiBDT05GSUdfRUZJX1BDRFA9eQorIyBDT05GSUdfREVMTF9SQlUgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIApAQCAtMTEyLDMwICsxMjgsMzYgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSQogIwogQ09ORklHX1BNPXkKLUNPTkZJR19BQ1BJPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKICMKK0NPTkZJR19BQ1BJPXkKIENPTkZJR19BQ1BJX0JVVFRPTj1tCiBDT05GSUdfQUNQSV9GQU49bQogQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVPXkKIENPTkZJR19BQ1BJX1RIRVJNQUw9bQogQ09ORklHX0FDUElfTlVNQT15CitDT05GSUdfQUNQSV9CTEFDS0xJU1RfWUVBUj0wCiAjIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX1BPV0VSPXkKIENPTkZJR19BQ1BJX1NZU1RFTT15CiBDT05GSUdfQUNQSV9DT05UQUlORVI9bQogCiAjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSkKICMKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKICMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci1DT05GSUdfUENJX05BTUVTPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE0Nyw2ICsxNjksNyBAQAogIyBDT05GSUdfSE9UUExVR19QQ0lfQUNQSV9JQk0gaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX1NHSSBpcyBub3Qgc2V0CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMTU0LDYgKzE3Nyw3MyBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorQ09ORklHX0FSUEQ9eQorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMTYyLDEwICsyNTIsMTUgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPW0KICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiAjIENPTkZJR19NVEQgaXMgbm90IHNldApAQCAtMTc4LDcgKzI3MywxMyBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfUE5QPXkKKyMgQ09ORklHX1BOUF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvdG9jb2xzCisjCitDT05GSUdfUE5QQUNQST15CiAKICMKICMgQmxvY2sgZGV2aWNlcwpAQCAtMTk3LDcgKzI5OCw2IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKICMKQEAgLTIzMCw3ICszMzAsOCBAQAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVQTlAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMzUzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1BJSVg9eQorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKQEAgLTI3MCw2ICszNzIsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC0yOTcsNiArNDAwLDcgQEAKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC0zMTQsNiArNDE4LDcgQEAKICMgQ09ORklHX1NDU0lfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9TVlcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfTVYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX05WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CkBAIC0zMzUsNyArNDQwLDYgQEAKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDX0ZJUk1XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODBfMTA0MCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTEEyWFhYPXkKQEAgLTM0NCw2ICs0NDgsNyBAQAogQ09ORklHX1NDU0lfUUxBMjMwMD1tCiBDT05GSUdfU0NTSV9RTEEyMzIyPW0KICMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTI0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKQEAgLTM5MCw3NCArNDk1LDE0IEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJQRD15Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NCMTAwMCBpcyBub3Qgc2V0CiAKICMKICMgQVJDbmV0IGRldmljZXMKQEAgLTQ2NSw2ICs1MTAsMTEgQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC00ODUsNiArNTM1LDcgQEAKICMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldApAQCAtNTE2LDYgKzU2Nyw3IEBACiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CkBAIC01MjUsNiArNTc3LDcgQEAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKQEAgLTU0OSw2ICs2MDIsMTAgQEAKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC02MDcsOSArNjY0LDcgQEAKICMgQ09ORklHX0dBTUVQT1JUX05TNTU4IGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUX0w0IGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfVk9SVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUX0NTNDYxWCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTYyMCw2ICs2NzUsNyBAQAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CiAjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CkBAIC02NDEsNyArNjk3LDYgQEAKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfTVVMVElQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CiAKICMKQEAgLTY1MCw4ICs3MDUsOCBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfU0dJX0wxX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9TR0lfSU9DND15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0dJX0lPQzQ9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTY4NCw2ICs3MzksOCBAQAogQ09ORklHX0RSTV9SQURFT049bQogQ09ORklHX0RSTV9NR0E9bQogQ09ORklHX0RSTV9TSVM9bQorIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPW0KIENPTkZJR19IUEVUPXkKICMgQ09ORklHX0hQRVRfUlRDX0lSUSBpcyBub3Qgc2V0CkBAIC03MDgsMTAgKzc2NSwyMSBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NTMsNiArODIxLDcgQEAKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSPXkKIAogIwogIyBHZW5lcmljIGRldmljZXMKQEAgLTc2NCwxMSArODMzLDEyIEBACiBDT05GSUdfU05EX01UUEFWPW0KIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MD1tCiBDT05GSUdfU05EX01QVTQwMT1tCitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorQ09ORklHX1NORF9BQzk3X0JVUz1tCiAKICMKICMgUENJIGRldmljZXMKICMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtNzkwLDkgKzg2MCwxMCBAQAogIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CkBAIC04NDQsNiArOTE1LDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQpAQCAtODUzLDkgKzkyNSw4IEBACiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX09CU09MRVRFX09TU19VU0JfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9CTFVFVE9PVEhfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogCkBAIC04ODgsMTIgKzk1OSwxNyBAQAogIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTkxOCw3ICs5OTQsNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj1tCitDT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIHBvcnQgZHJpdmVycwpAQCAtOTQ0LDEwICsxMDIwLDExIEBACiAjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgQVRNL0RTTCBkcml2ZXJzCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAogIwogCiAjCkBAIC05NjQsNiArMTA0MSw4IEBACiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogQ09ORklHX0lORklOSUJBTkQ9bQorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQpAQCAtOTgxLDYgKzEwNjAsNyBAQAogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQogQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CkBAIC05OTYsMjIgKzEwNzYsMjAgQEAKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9eQogQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMDQwLDE0ICsxMTE4LDExIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfWEFUVFI9eQotQ09ORklHX1RNUEZTX1NFQ1VSSVRZPXkKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTA3MSwxNSArMTE0NiwxOCBAQAogIwogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiBDT05GSUdfTkZTX0RJUkVDVElPPXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19ORlNEX1RDUD15CiBDT05GSUdfTE9DS0Q9bQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPW0KIENPTkZJR19TVU5SUENfR1NTPW0KIENPTkZJR19SUENTRUNfR1NTX0tSQjU9bQpAQCAtMTA5NCw2ICsxMTcyLDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC0xMTYzLDEwICsxMjQyLDEyIEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUT15CiAKICMKICMgSFAgU2ltdWxhdG9yIGRyaXZlcnMKQEAgLTExODcsNiArMTI2OCw3IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMTk0LDYgKzEyNzYsNyBAQAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CPXkKICMgQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CIGlzIG5vdCBzZXQKICMgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUyBpcyBub3Qgc2V0CkBAIC0xMjE1LDcgKzEyOTgsNyBAQAogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL2h3c3dfaW9tbXUuYwppbmRleCAxYmEwMmJhLi5hNWE1NjM3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL2h3c3dfaW9tbXUuYworKysgYi9hcmNoL2lhNjQvaHAvY29tbW9uL2h3c3dfaW9tbXUuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKIC8qIHN3aW90bGIgZGVjbGFyYXRpb25zICYgZGVmaW5pdGlvbnM6ICovCi1leHRlcm4gdm9pZCBzd2lvdGxiX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKHNpemVfdCBzaXplKTsKIGV4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAlzd2lvdGxiX2FsbG9jX2NvaGVyZW50OwogZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJc3dpb3RsYl9mcmVlX2NvaGVyZW50OwogZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGUJCXN3aW90bGJfbWFwX3NpbmdsZTsKQEAgLTY3LDcgKzY3LDE2IEBACiBod3N3X2luaXQgKHZvaWQpCiB7CiAJLyogZGVmYXVsdCB0byBhIHNtYWxsaXNoIDJNQiBzdyBJL08gVExCICovCi0Jc3dpb3RsYl9pbml0X3dpdGhfZGVmYXVsdF9zaXplICgyICogKDE8PDIwKSk7CisJaWYgKHN3aW90bGJfbGF0ZV9pbml0X3dpdGhfZGVmYXVsdF9zaXplICgyICogKDE8PDIwKSkgIT0gMCkgeworI2lmZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKKwkJLyogQmV0dGVyIHRvIGhhdmUgbm9ybWFsIERNQSB0aGFuIHBhbmljICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBzb2Z0d2FyZSBJL08gVExCLCIKKwkJICAgICAgICIgcmV2ZXJ0aW5nIHRvIGhwengxIHBsYXRmb3JtIHZlY3RvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJbWFjaHZlY19pbml0KCJocHp4MSIpOworI2Vsc2UKKwkJcGFuaWMoIlVuYWJsZSB0byBpbml0aWFsaXplIHNvZnR3YXJlIEkvTyBUTEIgc2VydmljZXMiKTsKKyNlbmRpZgorCX0KIH0KIAogdm9pZCAqCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCAyMWJmZmJhLi5iZGNjZDBiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTIwMjgsMTAgKzIwMjgsNDEgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBzYmFfaW5pdCh2b2lkKQogewotCWFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9zYmFfaW9jX2RyaXZlcik7Ci0JaWYgKCFpb2NfbGlzdCkKKwlpZiAoIWlhNjRfcGxhdGZvcm1faXMoImhwengxIikgJiYgIWlhNjRfcGxhdGZvcm1faXMoImhwengxX3N3aW90bGIiKSkKIAkJcmV0dXJuIDA7CiAKKwlhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfc2JhX2lvY19kcml2ZXIpOworCWlmICghaW9jX2xpc3QpIHsKKyNpZmRlZiBDT05GSUdfSUE2NF9HRU5FUklDCisJCWV4dGVybiBpbnQgc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKHNpemVfdCBzaXplKTsKKworCQkvKgorCQkgKiBJZiB3ZSBkaWRuJ3QgZmluZCBzb21ldGhpbmcgc2JhX2lvbW11IGNhbiBjbGFpbSwgd2UKKwkJICogbmVlZCB0byBzZXR1cCB0aGUgc3dpb3RsYiBhbmQgc3dpdGNoIHRvIHRoZSBkaWcgbWFjaHZlYy4KKwkJICovCisJCWlmIChzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSg2NCAqICgxPDwyMCkpICE9IDApCisJCQlwYW5pYygiVW5hYmxlIHRvIGZpbmQgU0JBIElPTU1VIG9yIGluaXRpYWxpemUgIgorCQkJICAgICAgInNvZnR3YXJlIEkvTyBUTEI6IFRyeSBtYWNodmVjPWRpZyBib290IG9wdGlvbiIpOworCQltYWNodmVjX2luaXQoImRpZyIpOworI2Vsc2UKKwkJcGFuaWMoIlVuYWJsZSB0byBmaW5kIFNCQSBJT01NVTogVHJ5IGEgZ2VuZXJpYyBvciBESUcga2VybmVsIik7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorCisjaWYgZGVmaW5lZChDT05GSUdfSUE2NF9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKQorCS8qCisJICogaHB6eDFfc3dpb3RsYiBuZWVkcyB0byBoYXZlIGEgZmFpcmx5IHNtYWxsIHN3aW90bGIgYm91bmNlCisJICogYnVmZmVyIHNldHVwIHRvIHN1cHBvcnQgZGV2aWNlcyB3aXRoIHNtYWxsZXIgRE1BIG1hc2tzIHRoYW4KKwkgKiBzYmFfaW9tbXUgY2FuIGhhbmRsZS4KKwkgKi8KKwlpZiAoaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDFfc3dpb3RsYiIpKSB7CisJCWV4dGVybiB2b2lkIGh3c3dfaW5pdCh2b2lkKTsKKworCQlod3N3X2luaXQoKTsKKwl9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QQ0kKIAl7CiAJCXN0cnVjdCBwY2lfYnVzICpiID0gTlVMTDsKQEAgLTIwNDgsMTggKzIwNzksNiBAQAogCiBzdWJzeXNfaW5pdGNhbGwoc2JhX2luaXQpOyAvKiBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIEFDUEkgZXRjLiwgYnV0IGJlZm9yZSBhbnkgZHJpdmVycy4uLiAqLwogCi1leHRlcm4gdm9pZCBkaWdfc2V0dXAoY2hhcioqKTsKLS8qCi0gKiBNQVhfRE1BX0FERFJFU1MgbmVlZHMgdG8gYmUgc2V0dXAgcHJpb3IgdG8gcGFnaW5nX2luaXQgdG8gZG8gYW55IGdvb2QsCi0gKiBzbyB3ZSB1c2UgdGhlIHBsYXRmb3JtX3NldHVwIGhvb2sgdG8gZml4IGl0IHVwLgotICovCi12b2lkIF9faW5pdAotc2JhX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCi17Ci0JTUFYX0RNQV9BRERSRVNTID0gfjBVTDsKLQlkaWdfc2V0dXAoY21kbGluZV9wKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQKIG5vc2JhZ2FydChjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNjc2kuYyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jCmluZGV4IGExODk4M2EuLmEzZmU5NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jCkBAIC0yMDUsMTAgKzIwNSwxMSBAQAogCWNoYXIgYnVmWzUxMl07CiAKIAkvKgotCSAqIFRoaXMgaXMgYSBiaXQga2x1ZGdleTogdGhlIHNpbXVsYXRvciBkb2Vzbid0IHByb3ZpZGUgYSBkaXJlY3Qgd2F5IG9mIGRldGVybWluaW5nCi0JICogdGhlIGRpc2sgc2l6ZSwgc28gd2UgZG8gYSBiaW5hcnkgc2VhcmNoLCBhc3N1bWluZyBhIG1heGltdW0gZGlzayBzaXplIG9mIDRHQi4KKwkgKiBUaGlzIGlzIGEgYml0IGtsdWRnZXk6IHRoZSBzaW11bGF0b3IgZG9lc24ndCBwcm92aWRlIGEKKwkgKiBkaXJlY3Qgd2F5IG9mIGRldGVybWluaW5nIHRoZSBkaXNrIHNpemUsIHNvIHdlIGRvIGEgYmluYXJ5CisJICogc2VhcmNoLCBhc3N1bWluZyBhIG1heGltdW0gZGlzayBzaXplIG9mIDEyOEdCLgogCSAqLwotCWZvciAoYml0ID0gKDRVTCA8PCAzMCkvNTEyOyBiaXQgIT0gMDsgYml0ID4+PSAxKSB7CisJZm9yIChiaXQgPSAoMTI4VUwgPDwgMzApLzUxMjsgYml0ICE9IDA7IGJpdCA+Pj0gMSkgewogCQlyZXEuYWRkciA9IF9fcGEoJmJ1Zik7CiAJCXJlcS5sZW4gPSBzaXplb2YoYnVmKTsKIAkJaWE2NF9zc2MoZmQsIDEsIF9fcGEoJnJlcSksICgoc2VjdG9ycyB8IGJpdCkgLSAxKSo1MTIsIFNTQ19SRUFEKTsKQEAgLTIyNSw4ICsyMjYsMTAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAotCW9mZnNldCA9ICggIChzYy0+Y21uZFsyXSA8PCAyNCkgfCAoc2MtPmNtbmRbM10gPDwgMTYpCi0JCSAgfCAoc2MtPmNtbmRbNF0gPDwgIDgpIHwgKHNjLT5jbW5kWzVdIDw8ICAwKSkqNTEyOworCW9mZnNldCA9ICgoKHVuc2lnbmVkIGxvbmcpc2MtPmNtbmRbMl0gPDwgMjQpIAorCQl8ICgodW5zaWduZWQgbG9uZylzYy0+Y21uZFszXSA8PCAxNikKKwkJfCAoKHVuc2lnbmVkIGxvbmcpc2MtPmNtbmRbNF0gPDwgIDgpIAorCQl8ICgodW5zaWduZWQgbG9uZylzYy0+Y21uZFs1XSA8PCAgMCkpKjUxMlVMOwogCWlmIChzYy0+dXNlX3NnID4gMCkKIAkJc2ltc2NzaV9zZ19yZWFkd3JpdGUoc2MsIG1vZGUsIG9mZnNldCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCA3ZTkyNjQ3Li45YWQ5NGRkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtODM4LDcgKzgzOCw3IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0FDUElfSE9UUExVR19DUFUgKi8KIAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKLWFjcGlfc3RhdHVzIF9fZGV2aW5pdAorc3RhdGljIGFjcGlfc3RhdHVzIF9fZGV2aW5pdAogYWNwaV9tYXBfaW9zYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBkZXB0aCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldCkKIHsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwpAQCAtODkwLDcgKzg5MCwxNiBAQAogCW1hcF9pb3NhcGljX3RvX25vZGUoZ3NpX2Jhc2UsIG5vZGUpOwogCXJldHVybiBBRV9PSzsKIH0KLSNlbmRpZgkJCQkvKiBDT05GSUdfTlVNQSAqLworCitzdGF0aWMgaW50IF9faW5pdAorYWNwaV9tYXBfaW9zYXBpY3MgKHZvaWQpCit7CisJYWNwaV9nZXRfZGV2aWNlcyhOVUxMLCBhY3BpX21hcF9pb3NhcGljLCBOVUxMLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwoYWNwaV9tYXBfaW9zYXBpY3MpOworI2VuZGlmCQkJCS8qIENPTkZJR19BQ1BJX05VTUEgKi8KIAogaW50IGFjcGlfcmVnaXN0ZXJfaW9hcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTY0IHBoeXNfYWRkciwgdTMyIGdzaV9iYXNlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggMTc5ZjIzMC4uZjcyZWE2YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC0yMzksNTcgKzIzOSwzMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogVHJpbSBkZXNjcmlwdG9yIE1EIHNvIGl0cyBzdGFydHMgYXQgYWRkcmVzcyBTVEFSVF9BRERSLiAgSWYgdGhlIGRlc2NyaXB0b3IgY292ZXJzCi0gKiBtZW1vcnkgdGhhdCBpcyBub3JtYWxseSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbCwgaXNzdWUgYSB3YXJuaW5nIHRoYXQgc29tZSBtZW1vcnkKLSAqIGlzIGJlaW5nIGlnbm9yZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi10cmltX2JvdHRvbSAoZWZpX21lbW9yeV9kZXNjX3QgKm1kLCB1NjQgc3RhcnRfYWRkcikKLXsKLQl1NjQgbnVtX3NraXBwZWRfcGFnZXM7Cit0eXBlZGVmIHN0cnVjdCBrZXJuX21lbWRlc2MgeworCXU2NCBhdHRyaWJ1dGU7CisJdTY0IHN0YXJ0OworCXU2NCBudW1fcGFnZXM7Cit9IGtlcm5fbWVtZGVzY190OwogCi0JaWYgKG1kLT5waHlzX2FkZHIgPj0gc3RhcnRfYWRkciB8fCAhbWQtPm51bV9wYWdlcykKLQkJcmV0dXJuOwotCi0JbnVtX3NraXBwZWRfcGFnZXMgPSAoc3RhcnRfYWRkciAtIG1kLT5waHlzX2FkZHIpID4+IEVGSV9QQUdFX1NISUZUOwotCWlmIChudW1fc2tpcHBlZF9wYWdlcyA+IG1kLT5udW1fcGFnZXMpCi0JCW51bV9za2lwcGVkX3BhZ2VzID0gbWQtPm51bV9wYWdlczsKLQotCWlmIChpc19hdmFpbGFibGVfbWVtb3J5KG1kKSkKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJlZmkuJXM6IGlnbm9yaW5nICVsdUtCIG9mIG1lbW9yeSBhdCAweCVseCBkdWUgdG8gZ3JhbnVsZSBob2xlICIKLQkJICAgICAgICJhdCAweCVseFxuIiwgX19GVU5DVElPTl9fLAotCQkgICAgICAgKG51bV9za2lwcGVkX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKSA+PiAxMCwKLQkJICAgICAgIG1kLT5waHlzX2FkZHIsIHN0YXJ0X2FkZHIgLSBJQTY0X0dSQU5VTEVfU0laRSk7Ci0JLyoKLQkgKiBOT1RFOiBEb24ndCBzZXQgbWQtPnBoeXNfYWRkciB0byBTVEFSVF9BRERSIGJlY2F1c2UgdGhhdCBjb3VsZCBjYXVzZSB0aGUgbWVtb3J5Ci0JICogZGVzY3JpcHRvciBsaXN0IHRvIGJlY29tZSB1bnNvcnRlZC4gIEluIHN1Y2ggYSBjYXNlLCBtZC0+bnVtX3BhZ2VzIHdpbGwgYmUKLQkgKiB6ZXJvLCBzbyB0aGUgUmlnaHQgVGhpbmcgd2lsbCBoYXBwZW4uCi0JICovCi0JbWQtPnBoeXNfYWRkciArPSBudW1fc2tpcHBlZF9wYWdlcyA8PCBFRklfUEFHRV9TSElGVDsKLQltZC0+bnVtX3BhZ2VzIC09IG51bV9za2lwcGVkX3BhZ2VzOwotfQorc3RhdGljIGtlcm5fbWVtZGVzY190ICprZXJuX21lbW1hcDsKIAogc3RhdGljIHZvaWQKLXRyaW1fdG9wIChlZmlfbWVtb3J5X2Rlc2NfdCAqbWQsIHU2NCBlbmRfYWRkcikKK3dhbGsgKGVmaV9mcmVlbWVtX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmFyZywgdTY0IGF0dHIpCiB7Ci0JdTY0IG51bV9kcm9wcGVkX3BhZ2VzLCBtZF9lbmRfYWRkcjsKKwlrZXJuX21lbWRlc2NfdCAqazsKKwl1NjQgc3RhcnQsIGVuZCwgdm9mZjsKIAotCW1kX2VuZF9hZGRyID0gbWQtPnBoeXNfYWRkciArIChtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKTsKLQotCWlmIChtZF9lbmRfYWRkciA8PSBlbmRfYWRkciB8fCAhbWQtPm51bV9wYWdlcykKLQkJcmV0dXJuOwotCi0JbnVtX2Ryb3BwZWRfcGFnZXMgPSAobWRfZW5kX2FkZHIgLSBlbmRfYWRkcikgPj4gRUZJX1BBR0VfU0hJRlQ7Ci0JaWYgKG51bV9kcm9wcGVkX3BhZ2VzID4gbWQtPm51bV9wYWdlcykKLQkJbnVtX2Ryb3BwZWRfcGFnZXMgPSBtZC0+bnVtX3BhZ2VzOwotCi0JaWYgKGlzX2F2YWlsYWJsZV9tZW1vcnkobWQpKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgImVmaS4lczogaWdub3JpbmcgJWx1S0Igb2YgbWVtb3J5IGF0IDB4JWx4IGR1ZSB0byBncmFudWxlIGhvbGUgIgotCQkgICAgICAgImF0IDB4JWx4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCSAgICAgICAobnVtX2Ryb3BwZWRfcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpID4+IDEwLAotCQkgICAgICAgbWQtPnBoeXNfYWRkciwgZW5kX2FkZHIpOwotCW1kLT5udW1fcGFnZXMgLT0gbnVtX2Ryb3BwZWRfcGFnZXM7CisJdm9mZiA9IChhdHRyID09IEVGSV9NRU1PUllfV0IpID8gUEFHRV9PRkZTRVQgOiBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOworCWZvciAoayA9IGtlcm5fbWVtbWFwOyBrLT5zdGFydCAhPSB+MFVMOyBrKyspIHsKKwkJaWYgKGstPmF0dHJpYnV0ZSAhPSBhdHRyKQorCQkJY29udGludWU7CisJCXN0YXJ0ID0gUEFHRV9BTElHTihrLT5zdGFydCk7CisJCWVuZCA9IChrLT5zdGFydCArIChrLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpKSAmIFBBR0VfTUFTSzsKKwkJaWYgKHN0YXJ0IDwgZW5kKQorCQkJaWYgKCgqY2FsbGJhY2spKHN0YXJ0ICsgdm9mZiwgZW5kICsgdm9mZiwgYXJnKSA8IDApCisJCQkJcmV0dXJuOworCX0KIH0KIAogLyoKQEAgLTI5OSwxNDggKzI3MiwxOSBAQAogdm9pZAogZWZpX21lbW1hcF93YWxrIChlZmlfZnJlZW1lbV9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICphcmcpCiB7Ci0JaW50IHByZXZfdmFsaWQgPSAwOwotCXN0cnVjdCByYW5nZSB7Ci0JCXU2NCBzdGFydDsKLQkJdTY0IGVuZDsKLQl9IHByZXYsIGN1cnI7Ci0Jdm9pZCAqZWZpX21hcF9zdGFydCwgKmVmaV9tYXBfZW5kLCAqcCwgKnE7Ci0JZWZpX21lbW9yeV9kZXNjX3QgKm1kLCAqY2hlY2tfbWQ7Ci0JdTY0IGVmaV9kZXNjX3NpemUsIHN0YXJ0LCBlbmQsIGdyYW51bGVfYWRkciwgbGFzdF9ncmFudWxlX2FkZHIsIGZpcnN0X25vbl93Yl9hZGRyID0gMDsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX21lbSA9IDA7Ci0KLQllZmlfbWFwX3N0YXJ0ID0gX192YShpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXApOwotCWVmaV9tYXBfZW5kICAgPSBlZmlfbWFwX3N0YXJ0ICsgaWE2NF9ib290X3BhcmFtLT5lZmlfbWVtbWFwX3NpemU7Ci0JZWZpX2Rlc2Nfc2l6ZSA9IGlhNjRfYm9vdF9wYXJhbS0+ZWZpX21lbWRlc2Nfc2l6ZTsKLQotCWZvciAocCA9IGVmaV9tYXBfc3RhcnQ7IHAgPCBlZmlfbWFwX2VuZDsgcCArPSBlZmlfZGVzY19zaXplKSB7Ci0JCW1kID0gcDsKLQotCQkvKiBza2lwIG92ZXIgbm9uLVdCIG1lbW9yeSBkZXNjcmlwdG9yczsgdGhhdCdzIGFsbCB3ZSdyZSBpbnRlcmVzdGVkIGluLi4uICovCi0JCWlmICghKG1kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1dCKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIGdyYW51bGVfYWRkciBpcyB0aGUgYmFzZSBvZiBtZCdzIGZpcnN0IGdyYW51bGUuCi0JCSAqIFtncmFudWxlX2FkZHIgLSBmaXJzdF9ub25fd2JfYWRkcikgaXMgZ3VhcmFudGVlZCB0bwotCQkgKiBiZSBjb250aWd1b3VzIFdCIG1lbW9yeS4KLQkJICovCi0JCWdyYW51bGVfYWRkciA9IEdSQU5VTEVST1VORERPV04obWQtPnBoeXNfYWRkcik7Ci0JCWZpcnN0X25vbl93Yl9hZGRyID0gbWF4KGZpcnN0X25vbl93Yl9hZGRyLCBncmFudWxlX2FkZHIpOwotCi0JCWlmIChmaXJzdF9ub25fd2JfYWRkciA8IG1kLT5waHlzX2FkZHIpIHsKLQkJCXRyaW1fYm90dG9tKG1kLCBncmFudWxlX2FkZHIgKyBJQTY0X0dSQU5VTEVfU0laRSk7Ci0JCQlncmFudWxlX2FkZHIgPSBHUkFOVUxFUk9VTkRET1dOKG1kLT5waHlzX2FkZHIpOwotCQkJZmlyc3Rfbm9uX3diX2FkZHIgPSBtYXgoZmlyc3Rfbm9uX3diX2FkZHIsIGdyYW51bGVfYWRkcik7Ci0JCX0KLQotCQlmb3IgKHEgPSBwOyBxIDwgZWZpX21hcF9lbmQ7IHEgKz0gZWZpX2Rlc2Nfc2l6ZSkgewotCQkJY2hlY2tfbWQgPSBxOwotCi0JCQlpZiAoKGNoZWNrX21kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1dCKSAmJgotCQkJICAgIChjaGVja19tZC0+cGh5c19hZGRyID09IGZpcnN0X25vbl93Yl9hZGRyKSkKLQkJCQlmaXJzdF9ub25fd2JfYWRkciArPSBjaGVja19tZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUOwotCQkJZWxzZQotCQkJCWJyZWFrOwkJLyogbm9uLVdCIG9yIGhvbGUgKi8KLQkJfQotCi0JCWxhc3RfZ3JhbnVsZV9hZGRyID0gR1JBTlVMRVJPVU5ERE9XTihmaXJzdF9ub25fd2JfYWRkcik7Ci0JCWlmIChsYXN0X2dyYW51bGVfYWRkciA8IG1kLT5waHlzX2FkZHIgKyAobWQtPm51bV9wYWdlcyA8PCBFRklfUEFHRV9TSElGVCkpCi0JCQl0cmltX3RvcChtZCwgbGFzdF9ncmFudWxlX2FkZHIpOwotCi0JCWlmIChpc19hdmFpbGFibGVfbWVtb3J5KG1kKSkgewotCQkJaWYgKG1kLT5waHlzX2FkZHIgKyAobWQtPm51bV9wYWdlcyA8PCBFRklfUEFHRV9TSElGVCkgPj0gbWF4X2FkZHIpIHsKLQkJCQlpZiAobWQtPnBoeXNfYWRkciA+PSBtYXhfYWRkcikKLQkJCQkJY29udGludWU7Ci0JCQkJbWQtPm51bV9wYWdlcyA9IChtYXhfYWRkciAtIG1kLT5waHlzX2FkZHIpID4+IEVGSV9QQUdFX1NISUZUOwotCQkJCWZpcnN0X25vbl93Yl9hZGRyID0gbWF4X2FkZHI7Ci0JCQl9Ci0KLQkJCWlmICh0b3RhbF9tZW0gPj0gbWVtX2xpbWl0KQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAodG90YWxfbWVtICsgKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpID4gbWVtX2xpbWl0KSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBsaW1pdF9hZGRyID0gbWQtPnBoeXNfYWRkcjsKLQotCQkJCWxpbWl0X2FkZHIgKz0gbWVtX2xpbWl0IC0gdG90YWxfbWVtOwotCQkJCWxpbWl0X2FkZHIgPSBHUkFOVUxFUk9VTkRET1dOKGxpbWl0X2FkZHIpOwotCi0JCQkJaWYgKG1kLT5waHlzX2FkZHIgPiBsaW1pdF9hZGRyKQotCQkJCQljb250aW51ZTsKLQotCQkJCW1kLT5udW1fcGFnZXMgPSAobGltaXRfYWRkciAtIG1kLT5waHlzX2FkZHIpID4+Ci0JCQkJICAgICAgICAgICAgICAgIEVGSV9QQUdFX1NISUZUOwotCQkJCWZpcnN0X25vbl93Yl9hZGRyID0gbWF4X2FkZHIgPSBtZC0+cGh5c19hZGRyICsKLQkJCQkgICAgICAgICAgICAgIChtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKTsKLQkJCX0KLQkJCXRvdGFsX21lbSArPSAobWQtPm51bV9wYWdlcyA8PCBFRklfUEFHRV9TSElGVCk7Ci0KLQkJCWlmIChtZC0+bnVtX3BhZ2VzID09IDApCi0JCQkJY29udGludWU7Ci0KLQkJCWN1cnIuc3RhcnQgPSBQQUdFX09GRlNFVCArIG1kLT5waHlzX2FkZHI7Ci0JCQljdXJyLmVuZCAgID0gY3Vyci5zdGFydCArIChtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKTsKLQotCQkJaWYgKCFwcmV2X3ZhbGlkKSB7Ci0JCQkJcHJldiA9IGN1cnI7Ci0JCQkJcHJldl92YWxpZCA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChjdXJyLnN0YXJ0IDwgcHJldi5zdGFydCkKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJPb3BzOiBFRkkgbWVtb3J5IHRhYmxlIG5vdCBvcmRlcmVkIVxuIik7Ci0KLQkJCQlpZiAocHJldi5lbmQgPT0gY3Vyci5zdGFydCkgewotCQkJCQkvKiBtZXJnZSB0d28gY29uc2VjdXRpdmUgbWVtb3J5IHJhbmdlcyAqLwotCQkJCQlwcmV2LmVuZCA9IGN1cnIuZW5kOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXN0YXJ0ID0gUEFHRV9BTElHTihwcmV2LnN0YXJ0KTsKLQkJCQkJZW5kID0gcHJldi5lbmQgJiBQQUdFX01BU0s7Ci0JCQkJCWlmICgoZW5kID4gc3RhcnQpICYmICgqY2FsbGJhY2spKHN0YXJ0LCBlbmQsIGFyZykgPCAwKQotCQkJCQkJcmV0dXJuOwotCQkJCQlwcmV2ID0gY3VycjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHByZXZfdmFsaWQpIHsKLQkJc3RhcnQgPSBQQUdFX0FMSUdOKHByZXYuc3RhcnQpOwotCQllbmQgPSBwcmV2LmVuZCAmIFBBR0VfTUFTSzsKLQkJaWYgKGVuZCA+IHN0YXJ0KQotCQkJKCpjYWxsYmFjaykoc3RhcnQsIGVuZCwgYXJnKTsKLQl9CisJd2FsayhjYWxsYmFjaywgYXJnLCBFRklfTUVNT1JZX1dCKTsKIH0KIAogLyoKLSAqIFdhbGsgdGhlIEVGSSBtZW1vcnkgbWFwIHRvIHB1bGwgb3V0IGxlZnRvdmVyIHBhZ2VzIGluIHRoZSBsb3dlcgotICogbWVtb3J5IHJlZ2lvbnMgd2hpY2ggZG8gbm90IGVuZCB1cCBpbiB0aGUgcmVndWxhciBtZW1vcnkgbWFwIGFuZAotICogc3RpY2sgdGhlbSBpbnRvIHRoZSB1bmNhY2hlZCBhbGxvY2F0b3IKLSAqCi0gKiBUaGUgcmVndWxhciB3YWxrIGZ1bmN0aW9uIGlzIHNpZ25pZmljYW50bHkgbW9yZSBjb21wbGV4IHRoYW4gdGhlCi0gKiB1bmNhY2hlZCB3YWxrIHdoaWNoIG1lYW5zIGl0IHJlYWxseSBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gdHJ5IGFuZAotICogbWFyZ2UgdGhlIHR3by4KKyAqIFdhbGtzIHRoZSBFRkkgbWVtb3J5IG1hcCBhbmQgY2FsbHMgQ0FMTEJBQ0sgb25jZSBmb3IgZWFjaCBFRkkgbWVtb3J5IGRlc2NyaXB0b3IgdGhhdAorICogaGFzIG1lbW9yeSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgdW5jYWNoZWQgYWxsb2NhdG9yLgogICovCi12b2lkIF9faW5pdAotZWZpX21lbW1hcF93YWxrX3VjIChlZmlfZnJlZW1lbV9jYWxsYmFja190IGNhbGxiYWNrKQordm9pZAorZWZpX21lbW1hcF93YWxrX3VjIChlZmlfZnJlZW1lbV9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICphcmcpCiB7Ci0Jdm9pZCAqZWZpX21hcF9zdGFydCwgKmVmaV9tYXBfZW5kLCAqcDsKLQllZmlfbWVtb3J5X2Rlc2NfdCAqbWQ7Ci0JdTY0IGVmaV9kZXNjX3NpemUsIHN0YXJ0LCBlbmQ7Ci0KLQllZmlfbWFwX3N0YXJ0ID0gX192YShpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXApOwotCWVmaV9tYXBfZW5kID0gZWZpX21hcF9zdGFydCArIGlhNjRfYm9vdF9wYXJhbS0+ZWZpX21lbW1hcF9zaXplOwotCWVmaV9kZXNjX3NpemUgPSBpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1kZXNjX3NpemU7Ci0KLQlmb3IgKHAgPSBlZmlfbWFwX3N0YXJ0OyBwIDwgZWZpX21hcF9lbmQ7IHAgKz0gZWZpX2Rlc2Nfc2l6ZSkgewotCQltZCA9IHA7Ci0JCWlmIChtZC0+YXR0cmlidXRlID09IEVGSV9NRU1PUllfVUMpIHsKLQkJCXN0YXJ0ID0gUEFHRV9BTElHTihtZC0+cGh5c19hZGRyKTsKLQkJCWVuZCA9IFBBR0VfQUxJR04oKG1kLT5waHlzX2FkZHIrKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpKSAmIFBBR0VfTUFTSyk7Ci0JCQlpZiAoKCpjYWxsYmFjaykoc3RhcnQsIGVuZCwgTlVMTCkgPCAwKQotCQkJCXJldHVybjsKLQkJfQotCX0KKwl3YWxrKGNhbGxiYWNrLCBhcmcsIEVGSV9NRU1PUllfVUMpOwogfQogCi0KIC8qCiAgKiBMb29rIGZvciB0aGUgUEFMX0NPREUgcmVnaW9uIHJlcG9ydGVkIGJ5IEVGSSBhbmQgbWFwcyBpdCB1c2luZyBhbgogICogSVRSIHRvIGVuYWJsZSBzYWZlIFBBTCBjYWxscyBpbiB2aXJ0dWFsIG1vZGUuICBTZWUgSUEtNjQgUHJvY2Vzc29yCkBAIC04NjIsMyArNzA2LDMwNyBAQAogCXByaW50ayhLRVJOX0VSUiAiTWFsZm9ybWVkICVzIHZhbHVlXG4iLCBuYW1lKTsKIAlyZXR1cm4gMDsKIH0KKworI2RlZmluZSBlZmlfbWRfc2l6ZShtZCkJKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpCisKK3N0YXRpYyBpbmxpbmUgdTY0CitrbWRfZW5kKGtlcm5fbWVtZGVzY190ICprbWQpCit7CisJcmV0dXJuIChrbWQtPnN0YXJ0ICsgKGttZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0CitlZmlfbWRfZW5kKGVmaV9tZW1vcnlfZGVzY190ICptZCkKK3sKKwlyZXR1cm4gKG1kLT5waHlzX2FkZHIgKyBlZmlfbWRfc2l6ZShtZCkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZWZpX3diKGVmaV9tZW1vcnlfZGVzY190ICptZCkKK3sKKwlyZXR1cm4gKG1kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1dCKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2VmaV91YyhlZmlfbWVtb3J5X2Rlc2NfdCAqbWQpCit7CisJcmV0dXJuIChtZC0+YXR0cmlidXRlICYgRUZJX01FTU9SWV9VQyk7Cit9CisKKy8qCisgKiBMb29rIGZvciB0aGUgZmlyc3QgZ3JhbnVsZSBhbGlnbmVkIG1lbW9yeSBkZXNjcmlwdG9yIG1lbW9yeQorICogdGhhdCBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgRUZJIG1lbW9yeSBtYXAuIE1ha2Ugc3VyZSB0aGlzCisgKiBkZXNjcmlwdG9yIGlzIGF0bGVhc3QgZ3JhbnVsZSBzaXplZCBzbyBpdCBkb2VzIG5vdCBnZXQgdHJpbW1lZAorICovCitzdHJ1Y3Qga2Vybl9tZW1kZXNjICoKK2ZpbmRfbWVtbWFwX3NwYWNlICh2b2lkKQoreworCXU2NAljb250aWdfbG93PTAsIGNvbnRpZ19oaWdoPTA7CisJdTY0CWFzID0gMCwgYWU7CisJdm9pZCAqZWZpX21hcF9zdGFydCwgKmVmaV9tYXBfZW5kLCAqcCwgKnE7CisJZWZpX21lbW9yeV9kZXNjX3QgKm1kLCAqcG1kID0gTlVMTCwgKmNoZWNrX21kOworCXU2NAlzcGFjZV9uZWVkZWQsIGVmaV9kZXNjX3NpemU7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9tZW0gPSAwOworCisJZWZpX21hcF9zdGFydCA9IF9fdmEoaWE2NF9ib290X3BhcmFtLT5lZmlfbWVtbWFwKTsKKwllZmlfbWFwX2VuZCAgID0gZWZpX21hcF9zdGFydCArIGlhNjRfYm9vdF9wYXJhbS0+ZWZpX21lbW1hcF9zaXplOworCWVmaV9kZXNjX3NpemUgPSBpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1kZXNjX3NpemU7CisKKwkvKgorCSAqIFdvcnN0IGNhc2U6IHdlIG5lZWQgMyBrZXJuZWwgZGVzY3JpcHRvcnMgZm9yIGVhY2ggZWZpIGRlc2NyaXB0b3IKKwkgKiAoaWYgZXZlcnkgZW50cnkgaGFzIGEgV0IgcGFydCBpbiB0aGUgbWlkZGxlLCBhbmQgVUMgaGVhZCBhbmQgdGFpbCksCisJICogcGx1cyBvbmUgZm9yIHRoZSBlbmQgbWFya2VyLgorCSAqLworCXNwYWNlX25lZWRlZCA9IHNpemVvZihrZXJuX21lbWRlc2NfdCkgKgorCQkoMyAqIChpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXBfc2l6ZS9lZmlfZGVzY19zaXplKSArIDEpOworCisJZm9yIChwID0gZWZpX21hcF9zdGFydDsgcCA8IGVmaV9tYXBfZW5kOyBwbWQgPSBtZCwgcCArPSBlZmlfZGVzY19zaXplKSB7CisJCW1kID0gcDsKKwkJaWYgKCFlZmlfd2IobWQpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocG1kID09IE5VTEwgfHwgIWVmaV93YihwbWQpIHx8IGVmaV9tZF9lbmQocG1kKSAhPSBtZC0+cGh5c19hZGRyKSB7CisJCQljb250aWdfbG93ID0gR1JBTlVMRVJPVU5EVVAobWQtPnBoeXNfYWRkcik7CisJCQljb250aWdfaGlnaCA9IGVmaV9tZF9lbmQobWQpOworCQkJZm9yIChxID0gcCArIGVmaV9kZXNjX3NpemU7IHEgPCBlZmlfbWFwX2VuZDsgcSArPSBlZmlfZGVzY19zaXplKSB7CisJCQkJY2hlY2tfbWQgPSBxOworCQkJCWlmICghZWZpX3diKGNoZWNrX21kKSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGNvbnRpZ19oaWdoICE9IGNoZWNrX21kLT5waHlzX2FkZHIpCisJCQkJCWJyZWFrOworCQkJCWNvbnRpZ19oaWdoID0gZWZpX21kX2VuZChjaGVja19tZCk7CisJCQl9CisJCQljb250aWdfaGlnaCA9IEdSQU5VTEVST1VORERPV04oY29udGlnX2hpZ2gpOworCQl9CisJCWlmICghaXNfYXZhaWxhYmxlX21lbW9yeShtZCkgfHwgbWQtPnR5cGUgPT0gRUZJX0xPQURFUl9EQVRBKQorCQkJY29udGludWU7CisKKwkJLyogUm91bmQgZW5kcyBpbndhcmQgdG8gZ3JhbnVsZSBib3VuZGFyaWVzICovCisJCWFzID0gbWF4KGNvbnRpZ19sb3csIG1kLT5waHlzX2FkZHIpOworCQlhZSA9IG1pbihjb250aWdfaGlnaCwgZWZpX21kX2VuZChtZCkpOworCisJCS8qIGtlZXAgd2l0aGluIG1heF9hZGRyPSBjb21tYW5kIGxpbmUgYXJnICovCisJCWFlID0gbWluKGFlLCBtYXhfYWRkcik7CisJCWlmIChhZSA8PSBhcykKKwkJCWNvbnRpbnVlOworCisJCS8qIGF2b2lkIGdvaW5nIG92ZXIgbWVtPSBjb21tYW5kIGxpbmUgYXJnICovCisJCWlmICh0b3RhbF9tZW0gKyAoYWUgLSBhcykgPiBtZW1fbGltaXQpCisJCQlhZSAtPSB0b3RhbF9tZW0gKyAoYWUgLSBhcykgLSBtZW1fbGltaXQ7CisKKwkJaWYgKGFlIDw9IGFzKQorCQkJY29udGludWU7CisKKwkJaWYgKGFlIC0gYXMgPiBzcGFjZV9uZWVkZWQpCisJCQlicmVhazsKKwl9CisJaWYgKHAgPj0gZWZpX21hcF9lbmQpCisJCXBhbmljKCJDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3Iga2VybmVsIG1lbW9yeSBkZXNjcmlwdG9ycyIpOworCisJcmV0dXJuIF9fdmEoYXMpOworfQorCisvKgorICogV2FsayB0aGUgRUZJIG1lbW9yeSBtYXAgYW5kIGdhdGhlciBhbGwgbWVtb3J5IGF2YWlsYWJsZSBmb3Iga2VybmVsCisgKiB0byB1c2UuICBXZSBjYW4gYWxsb2NhdGUgcGFydGlhbCBncmFudWxlcyBvbmx5IGlmIHRoZSB1bmF2YWlsYWJsZQorICogcGFydHMgZXhpc3QsIGFuZCBhcmUgV0IuCisgKi8KK3ZvaWQKK2VmaV9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nICpzLCB1bnNpZ25lZCBsb25nICplKQoreworCXN0cnVjdCBrZXJuX21lbWRlc2MgKmssICpwcmV2ID0gMDsKKwl1NjQJY29udGlnX2xvdz0wLCBjb250aWdfaGlnaD0wOworCXU2NAlhcywgYWUsIGxpbTsKKwl2b2lkICplZmlfbWFwX3N0YXJ0LCAqZWZpX21hcF9lbmQsICpwLCAqcTsKKwllZmlfbWVtb3J5X2Rlc2NfdCAqbWQsICpwbWQgPSBOVUxMLCAqY2hlY2tfbWQ7CisJdTY0CWVmaV9kZXNjX3NpemU7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9tZW0gPSAwOworCisJayA9IGtlcm5fbWVtbWFwID0gZmluZF9tZW1tYXBfc3BhY2UoKTsKKworCWVmaV9tYXBfc3RhcnQgPSBfX3ZhKGlhNjRfYm9vdF9wYXJhbS0+ZWZpX21lbW1hcCk7CisJZWZpX21hcF9lbmQgICA9IGVmaV9tYXBfc3RhcnQgKyBpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXBfc2l6ZTsKKwllZmlfZGVzY19zaXplID0gaWE2NF9ib290X3BhcmFtLT5lZmlfbWVtZGVzY19zaXplOworCisJZm9yIChwID0gZWZpX21hcF9zdGFydDsgcCA8IGVmaV9tYXBfZW5kOyBwbWQgPSBtZCwgcCArPSBlZmlfZGVzY19zaXplKSB7CisJCW1kID0gcDsKKwkJaWYgKCFlZmlfd2IobWQpKSB7CisJCQlpZiAoZWZpX3VjKG1kKSAmJiAobWQtPnR5cGUgPT0gRUZJX0NPTlZFTlRJT05BTF9NRU1PUlkgfHwKKwkJCQkgICAgCSAgIG1kLT50eXBlID09IEVGSV9CT09UX1NFUlZJQ0VTX0RBVEEpKSB7CisJCQkJay0+YXR0cmlidXRlID0gRUZJX01FTU9SWV9VQzsKKwkJCQlrLT5zdGFydCA9IG1kLT5waHlzX2FkZHI7CisJCQkJay0+bnVtX3BhZ2VzID0gbWQtPm51bV9wYWdlczsKKwkJCQlrKys7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocG1kID09IE5VTEwgfHwgIWVmaV93YihwbWQpIHx8IGVmaV9tZF9lbmQocG1kKSAhPSBtZC0+cGh5c19hZGRyKSB7CisJCQljb250aWdfbG93ID0gR1JBTlVMRVJPVU5EVVAobWQtPnBoeXNfYWRkcik7CisJCQljb250aWdfaGlnaCA9IGVmaV9tZF9lbmQobWQpOworCQkJZm9yIChxID0gcCArIGVmaV9kZXNjX3NpemU7IHEgPCBlZmlfbWFwX2VuZDsgcSArPSBlZmlfZGVzY19zaXplKSB7CisJCQkJY2hlY2tfbWQgPSBxOworCQkJCWlmICghZWZpX3diKGNoZWNrX21kKSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGNvbnRpZ19oaWdoICE9IGNoZWNrX21kLT5waHlzX2FkZHIpCisJCQkJCWJyZWFrOworCQkJCWNvbnRpZ19oaWdoID0gZWZpX21kX2VuZChjaGVja19tZCk7CisJCQl9CisJCQljb250aWdfaGlnaCA9IEdSQU5VTEVST1VORERPV04oY29udGlnX2hpZ2gpOworCQl9CisJCWlmICghaXNfYXZhaWxhYmxlX21lbW9yeShtZCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBSb3VuZCBlbmRzIGlud2FyZCB0byBncmFudWxlIGJvdW5kYXJpZXMKKwkJICogR2l2ZSB0cmltbWluZ3MgdG8gdW5jYWNoZWQgYWxsb2NhdG9yCisJCSAqLworCQlpZiAobWQtPnBoeXNfYWRkciA8IGNvbnRpZ19sb3cpIHsKKwkJCWxpbSA9IG1pbihlZmlfbWRfZW5kKG1kKSwgY29udGlnX2xvdyk7CisJCQlpZiAoZWZpX3VjKG1kKSkgeworCQkJCWlmIChrID4ga2Vybl9tZW1tYXAgJiYgKGstMSktPmF0dHJpYnV0ZSA9PSBFRklfTUVNT1JZX1VDICYmCisJCQkJICAgIGttZF9lbmQoay0xKSA9PSBtZC0+cGh5c19hZGRyKSB7CisJCQkJCShrLTEpLT5udW1fcGFnZXMgKz0gKGxpbSAtIG1kLT5waHlzX2FkZHIpID4+IEVGSV9QQUdFX1NISUZUOworCQkJCX0gZWxzZSB7CisJCQkJCWstPmF0dHJpYnV0ZSA9IEVGSV9NRU1PUllfVUM7CisJCQkJCWstPnN0YXJ0ID0gbWQtPnBoeXNfYWRkcjsKKwkJCQkJay0+bnVtX3BhZ2VzID0gKGxpbSAtIG1kLT5waHlzX2FkZHIpID4+IEVGSV9QQUdFX1NISUZUOworCQkJCQlrKys7CisJCQkJfQorCQkJfQorCQkJYXMgPSBjb250aWdfbG93OworCQl9IGVsc2UKKwkJCWFzID0gbWQtPnBoeXNfYWRkcjsKKworCQlpZiAoZWZpX21kX2VuZChtZCkgPiBjb250aWdfaGlnaCkgeworCQkJbGltID0gbWF4KG1kLT5waHlzX2FkZHIsIGNvbnRpZ19oaWdoKTsKKwkJCWlmIChlZmlfdWMobWQpKSB7CisJCQkJaWYgKGxpbSA9PSBtZC0+cGh5c19hZGRyICYmIGsgPiBrZXJuX21lbW1hcCAmJgorCQkJCSAgICAoay0xKS0+YXR0cmlidXRlID09IEVGSV9NRU1PUllfVUMgJiYKKwkJCQkgICAga21kX2VuZChrLTEpID09IG1kLT5waHlzX2FkZHIpIHsKKwkJCQkJKGstMSktPm51bV9wYWdlcyArPSBtZC0+bnVtX3BhZ2VzOworCQkJCX0gZWxzZSB7CisJCQkJCWstPmF0dHJpYnV0ZSA9IEVGSV9NRU1PUllfVUM7CisJCQkJCWstPnN0YXJ0ID0gbGltOworCQkJCQlrLT5udW1fcGFnZXMgPSAoZWZpX21kX2VuZChtZCkgLSBsaW0pID4+IEVGSV9QQUdFX1NISUZUOworCQkJCQlrKys7CisJCQkJfQorCQkJfQorCQkJYWUgPSBjb250aWdfaGlnaDsKKwkJfSBlbHNlCisJCQlhZSA9IGVmaV9tZF9lbmQobWQpOworCisJCS8qIGtlZXAgd2l0aGluIG1heF9hZGRyPSBjb21tYW5kIGxpbmUgYXJnICovCisJCWFlID0gbWluKGFlLCBtYXhfYWRkcik7CisJCWlmIChhZSA8PSBhcykKKwkJCWNvbnRpbnVlOworCisJCS8qIGF2b2lkIGdvaW5nIG92ZXIgbWVtPSBjb21tYW5kIGxpbmUgYXJnICovCisJCWlmICh0b3RhbF9tZW0gKyAoYWUgLSBhcykgPiBtZW1fbGltaXQpCisJCQlhZSAtPSB0b3RhbF9tZW0gKyAoYWUgLSBhcykgLSBtZW1fbGltaXQ7CisKKwkJaWYgKGFlIDw9IGFzKQorCQkJY29udGludWU7CisJCWlmIChwcmV2ICYmIGttZF9lbmQocHJldikgPT0gbWQtPnBoeXNfYWRkcikgeworCQkJcHJldi0+bnVtX3BhZ2VzICs9IChhZSAtIGFzKSA+PiBFRklfUEFHRV9TSElGVDsKKwkJCXRvdGFsX21lbSArPSBhZSAtIGFzOworCQkJY29udGludWU7CisJCX0KKwkJay0+YXR0cmlidXRlID0gRUZJX01FTU9SWV9XQjsKKwkJay0+c3RhcnQgPSBhczsKKwkJay0+bnVtX3BhZ2VzID0gKGFlIC0gYXMpID4+IEVGSV9QQUdFX1NISUZUOworCQl0b3RhbF9tZW0gKz0gYWUgLSBhczsKKwkJcHJldiA9IGsrKzsKKwl9CisJay0+c3RhcnQgPSB+MEw7IC8qIGVuZC1tYXJrZXIgKi8KKworCS8qIHJlc2VydmUgdGhlIG1lbW9yeSB3ZSBhcmUgdXNpbmcgZm9yIGtlcm5fbWVtbWFwICovCisJKnMgPSAodTY0KWtlcm5fbWVtbWFwOworCSplID0gKHU2NCkrK2s7Cit9CisKK3ZvaWQKK2VmaV9pbml0aWFsaXplX2lvbWVtX3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKmNvZGVfcmVzb3VyY2UsCisJCQkgICAgICAgc3RydWN0IHJlc291cmNlICpkYXRhX3Jlc291cmNlKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgKmVmaV9tYXBfc3RhcnQsICplZmlfbWFwX2VuZCwgKnA7CisJZWZpX21lbW9yeV9kZXNjX3QgKm1kOworCXU2NCBlZmlfZGVzY19zaXplOworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWVmaV9tYXBfc3RhcnQgPSBfX3ZhKGlhNjRfYm9vdF9wYXJhbS0+ZWZpX21lbW1hcCk7CisJZWZpX21hcF9lbmQgICA9IGVmaV9tYXBfc3RhcnQgKyBpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXBfc2l6ZTsKKwllZmlfZGVzY19zaXplID0gaWE2NF9ib290X3BhcmFtLT5lZmlfbWVtZGVzY19zaXplOworCisJcmVzID0gTlVMTDsKKworCWZvciAocCA9IGVmaV9tYXBfc3RhcnQ7IHAgPCBlZmlfbWFwX2VuZDsgcCArPSBlZmlfZGVzY19zaXplKSB7CisJCW1kID0gcDsKKworCQlpZiAobWQtPm51bV9wYWdlcyA9PSAwKSAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQkJY29udGludWU7CisKKwkJZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwkJc3dpdGNoIChtZC0+dHlwZSkgeworCisJCQljYXNlIEVGSV9NRU1PUllfTUFQUEVEX0lPOgorCQkJY2FzZSBFRklfTUVNT1JZX01BUFBFRF9JT19QT1JUX1NQQUNFOgorCQkJCWNvbnRpbnVlOworCisJCQljYXNlIEVGSV9MT0FERVJfQ09ERToKKwkJCWNhc2UgRUZJX0xPQURFUl9EQVRBOgorCQkJY2FzZSBFRklfQk9PVF9TRVJWSUNFU19EQVRBOgorCQkJY2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOgorCQkJY2FzZSBFRklfQ09OVkVOVElPTkFMX01FTU9SWToKKwkJCQlpZiAobWQtPmF0dHJpYnV0ZSAmIEVGSV9NRU1PUllfV1ApIHsKKwkJCQkJbmFtZSA9ICJTeXN0ZW0gUk9NIjsKKwkJCQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9SRUFET05MWTsKKwkJCQl9IGVsc2UgeworCQkJCQluYW1lID0gIlN5c3RlbSBSQU0iOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBFRklfQUNQSV9NRU1PUllfTlZTOgorCQkJCW5hbWUgPSAiQUNQSSBOb24tdm9sYXRpbGUgU3RvcmFnZSI7CisJCQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9CVVNZOworCQkJCWJyZWFrOworCisJCQljYXNlIEVGSV9VTlVTQUJMRV9NRU1PUlk6CisJCQkJbmFtZSA9ICJyZXNlcnZlZCI7CisJCQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9ESVNBQkxFRDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFRklfUkVTRVJWRURfVFlQRToKKwkJCWNhc2UgRUZJX1JVTlRJTUVfU0VSVklDRVNfQ09ERToKKwkJCWNhc2UgRUZJX1JVTlRJTUVfU0VSVklDRVNfREFUQToKKwkJCWNhc2UgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlk6CisJCQlkZWZhdWx0OgorCQkJCW5hbWUgPSAicmVzZXJ2ZWQiOworCQkJCWZsYWdzIHw9IElPUkVTT1VSQ0VfQlVTWTsKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICgocmVzID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGFsb2NhdGUgcmVzb3VyY2UgZm9yIGlvbWVtXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXJlcy0+bmFtZSA9IG5hbWU7CisJCXJlcy0+c3RhcnQgPSBtZC0+cGh5c19hZGRyOworCQlyZXMtPmVuZCA9IG1kLT5waHlzX2FkZHIgKyAobWQtPm51bV9wYWdlcyA8PCBFRklfUEFHRV9TSElGVCkgLSAxOworCQlyZXMtPmZsYWdzID0gZmxhZ3M7CisKKwkJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcykgPCAwKQorCQkJa2ZyZWUocmVzKTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogV2UgZG9uJ3Qga25vdyB3aGljaCByZWdpb24gY29udGFpbnMKKwkJCSAqIGtlcm5lbCBkYXRhIHNvIHdlIHRyeSBpdCByZXBlYXRlZGx5IGFuZAorCQkJICogbGV0IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRlc3QgaXQuCisJCQkgKi8KKwkJCWluc2VydF9yZXNvdXJjZShyZXMsIGNvZGVfcmVzb3VyY2UpOworCQkJaW5zZXJ0X3Jlc291cmNlKHJlcywgZGF0YV9yZXNvdXJjZSk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYwppbmRleCAyMDVkOTgwLi5kMzMyNDRjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKQEAgLTU3LDkgKzU3LDkgQEAKIAogCWlmIChpID09IDApIHsKIAkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKLQkJZm9yIChqPTA7IGo8TlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7CisJCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLGopOworCQl9CiAJCXNlcV9wdXRjKHAsICdcbicpOwogCX0KIApAQCAtNzIsOSArNzIsOSBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikgeworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCX0KICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmhhbmRsZXItPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCBkMGE1MTA2Li41MmM0N2RhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTUwOCw5ICs1MDgsNyBAQAogCWludCBjcHU7CiAKIAkvKiBDbGVhciB0aGUgUmVuZGV6IGNoZWNraW4gZmxhZyBmb3IgYWxsIGNwdXMgKi8KLQlmb3IoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKLQkJaWYgKCFjcHVfb25saW5lKGNwdSkpCi0JCQljb250aW51ZTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpZiAoaWE2NF9tY19pbmZvLmltaV9yZW5kZXpfY2hlY2tpbltjcHVdID09IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX0RPTkUpCiAJCQlpYTY0X21jYV93YWtldXAoY3B1KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCBmMWFjYTdjLi43YTJmMGE3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTk0Nyw4ICs5NDcsOCBAQAogcGVyY3B1X21vZGNvcHkgKHZvaWQgKnBjcHVkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXVuc2lnbmVkIGludCBpOwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCWlmIChjcHVfcG9zc2libGUoaSkpCi0JCQltZW1jcHkocGNwdWRzdCArIF9fcGVyX2NwdV9vZmZzZXRbaV0sIHNyYywgc2l6ZSk7CisJZm9yX2VhY2hfY3B1KGkpIHsKKwkJbWVtY3B5KHBjcHVkc3QgKyBfX3Blcl9jcHVfb2Zmc2V0W2ldLCBzcmMsIHNpemUpOworCX0KIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhdGNoLmMgYi9hcmNoL2lhNjQva2VybmVsL3BhdGNoLmMKaW5kZXggMzY3ODA0YS4uNmE0YWM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYXRjaC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGF0Y2guYwpAQCAtNjQsMjIgKzY0LDMwIEBACiB2b2lkCiBpYTY0X3BhdGNoX2ltbTY0ICh1NjQgaW5zbl9hZGRyLCB1NjQgdmFsKQogewotCWlhNjRfcGF0Y2goaW5zbl9hZGRyLAorCS8qIFRoZSBhc3NlbWJsZXIgbWF5IGdlbmVyYXRlIG9mZnNldCBwb2ludGluZyB0byBlaXRoZXIgc2xvdCAxCisJICAgb3Igc2xvdCAyIGZvciBhIGxvbmcgKDItc2xvdCkgaW5zdHJ1Y3Rpb24sIG9jY3VweWluZyBzbG90cyAxCisJICAgYW5kIDIuICAqLworICAJaW5zbl9hZGRyICY9IC0xNlVMOworCWlhNjRfcGF0Y2goaW5zbl9hZGRyICsgMiwKIAkJICAgMHgwMWZmZmVmZTAwMFVMLCAoICAoKHZhbCAmIDB4ODAwMDAwMDAwMDAwMDAwMFVMKSA+PiAyNykgLyogYml0IDYzIC0+IDM2ICovCiAJCQkJICAgICB8ICgodmFsICYgMHgwMDAwMDAwMDAwMjAwMDAwVUwpIDw8ICAwKSAvKiBiaXQgMjEgLT4gMjEgKi8KIAkJCQkgICAgIHwgKCh2YWwgJiAweDAwMDAwMDAwMDAxZjAwMDBVTCkgPDwgIDYpIC8qIGJpdCAxNiAtPiAyMiAqLwogCQkJCSAgICAgfCAoKHZhbCAmIDB4MDAwMDAwMDAwMDAwZmY4MFVMKSA8PCAyMCkgLyogYml0ICA3IC0+IDI3ICovCiAJCQkJICAgICB8ICgodmFsICYgMHgwMDAwMDAwMDAwMDAwMDdmVUwpIDw8IDEzKSAvKiBiaXQgIDAgLT4gMTMgKi8pKTsKLQlpYTY0X3BhdGNoKGluc25fYWRkciAtIDEsIDB4MWZmZmZmZmZmZmZVTCwgdmFsID4+IDIyKTsKKwlpYTY0X3BhdGNoKGluc25fYWRkciArIDEsIDB4MWZmZmZmZmZmZmZVTCwgdmFsID4+IDIyKTsKIH0KIAogdm9pZAogaWE2NF9wYXRjaF9pbW02MCAodTY0IGluc25fYWRkciwgdTY0IHZhbCkKIHsKLQlpYTY0X3BhdGNoKGluc25fYWRkciwKKwkvKiBUaGUgYXNzZW1ibGVyIG1heSBnZW5lcmF0ZSBvZmZzZXQgcG9pbnRpbmcgdG8gZWl0aGVyIHNsb3QgMQorCSAgIG9yIHNsb3QgMiBmb3IgYSBsb25nICgyLXNsb3QpIGluc3RydWN0aW9uLCBvY2N1cHlpbmcgc2xvdHMgMQorCSAgIGFuZCAyLiAgKi8KKyAgCWluc25fYWRkciAmPSAtMTZVTDsKKwlpYTY0X3BhdGNoKGluc25fYWRkciArIDIsCiAJCSAgIDB4MDExZmZmZmUwMDBVTCwgKCAgKCh2YWwgJiAweDA4MDAwMDAwMDAwMDAwMDBVTCkgPj4gMjMpIC8qIGJpdCA1OSAtPiAzNiAqLwogCQkJCSAgICAgfCAoKHZhbCAmIDB4MDAwMDAwMDAwMDBmZmZmZlVMKSA8PCAxMykgLyogYml0ICAwIC0+IDEzICovKSk7Ci0JaWE2NF9wYXRjaChpbnNuX2FkZHIgLSAxLCAweDFmZmZmZmZmZmZjVUwsIHZhbCA+PiAxOCk7CisJaWE2NF9wYXRjaChpbnNuX2FkZHIgKyAxLCAweDFmZmZmZmZmZmZjVUwsIHZhbCA+PiAxOCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCBiYmI4YmM3Li40YjE5ZDA0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTU4Nyw4ICs1ODcsOSBAQAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqCiBmaW5kX3RocmVhZF9mb3JfYWRkciAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCBsaXN0X2hlYWQgKnRoaXMsICpuZXh0OwogCWludCBtbV91c2VyczsKIAogCWlmICghKG1tID0gZ2V0X3Rhc2tfbW0oY2hpbGQpKSkKQEAgLTYwMCwyOCArNjAxLDIxIEBACiAJCWdvdG8gb3V0OwkJLyogbm90IG11bHRpLXRocmVhZGVkICovCiAKIAkvKgotCSAqIEZpcnN0LCB0cmF2ZXJzZSB0aGUgY2hpbGQncyB0aHJlYWQtbGlzdC4gIEdvb2QgZm9yIHNjYWxhYmlsaXR5IHdpdGgKLQkgKiBOUFRMLXRocmVhZHMuCisJICogVHJhdmVyc2UgdGhlIGN1cnJlbnQgcHJvY2VzcycgY2hpbGRyZW4gbGlzdC4gIEV2ZXJ5IHRhc2sgdGhhdAorCSAqIG9uZSBhdHRhY2hlcyB0byBiZWNvbWVzIGEgY2hpbGQuICBBbmQgaXQgaXMgb25seSBhdHRhY2hlZCBjaGlsZHJlbgorCSAqIG9mIHRoZSBkZWJ1Z2dlciB0aGF0IGFyZSBvZiBpbnRlcmVzdCAocHRyYWNlX2NoZWNrX2F0dGFjaCBjaGVja3MKKwkgKiBmb3IgdGhpcykuCiAJICovCi0JcCA9IGNoaWxkOwotCWRvIHsKLQkJaWYgKHRocmVhZF9tYXRjaGVzKHAsIGFkZHIpKSB7Ci0JCQljaGlsZCA9IHA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAobW1fdXNlcnMtLSA8PSAxKQotCQkJZ290byBvdXQ7Ci0JfSB3aGlsZSAoKHAgPSBuZXh0X3RocmVhZChwKSkgIT0gY2hpbGQpOwotCi0JZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQlpZiAoY2hpbGQtPm1tICE9IG1tKQorIAlsaXN0X2Zvcl9lYWNoX3NhZmUodGhpcywgbmV4dCwgJmN1cnJlbnQtPmNoaWxkcmVuKSB7CisJCXAgPSBsaXN0X2VudHJ5KHRoaXMsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2libGluZyk7CisJCWlmIChwLT5tbSAhPSBtbSkKIAkJCWNvbnRpbnVlOwotCiAJCWlmICh0aHJlYWRfbWF0Y2hlcyhwLCBhZGRyKSkgewogCQkJY2hpbGQgPSBwOwogCQkJZ290byBvdXQ7CiAJCX0KLQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOworCX0KKwogICBvdXQ6CiAJbW1wdXQobW0pOwogCXJldHVybiBjaGlsZDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCAxZjVjMjZkLi5mYzU2Y2EyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC03OCw2ICs3OCwxOSBAQAogdW5zaWduZWQgbG9uZyB2Z2FfY29uc29sZV9pb2Jhc2U7CiB1bnNpZ25lZCBsb25nIHZnYV9jb25zb2xlX21lbWJhc2U7CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGF0YV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJLZXJuZWwgZGF0YSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9NRU0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29kZV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJLZXJuZWwgY29kZSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9NRU0KK307CitleHRlcm4gdm9pZCBlZmlfaW5pdGlhbGl6ZV9pb21lbV9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICosCisJCXN0cnVjdCByZXNvdXJjZSAqKTsKK2V4dGVybiBjaGFyIF90ZXh0W10sIF9lbmRbXSwgX2V0ZXh0W107CisKIHVuc2lnbmVkIGxvbmcgaWE2NF9tYXhfY2FjaGVsaW5lX3NpemU7CiB1bnNpZ25lZCBsb25nIGlhNjRfaW9iYXNlOwkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIEkvTyBhY2Nlc3NlcyAqLwogRVhQT1JUX1NZTUJPTChpYTY0X2lvYmFzZSk7CkBAIC0xNzEsNiArMTg0LDIyIEBACiAJfQogfQogCisvKgorICogUmVxdWVzdCBhZGRyZXNzIHNwYWNlIGZvciBhbGwgc3RhbmRhcmQgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX21lbW9yeSh2b2lkKQoreworCWNvZGVfcmVzb3VyY2Uuc3RhcnQgPSBpYTY0X3RwYShfdGV4dCk7CisJY29kZV9yZXNvdXJjZS5lbmQgICA9IGlhNjRfdHBhKF9ldGV4dCkgLSAxOworCWRhdGFfcmVzb3VyY2Uuc3RhcnQgPSBpYTY0X3RwYShfZXRleHQpOworCWRhdGFfcmVzb3VyY2UuZW5kICAgPSBpYTY0X3RwYShfZW5kKSAtIDE7CisJZWZpX2luaXRpYWxpemVfaW9tZW1fcmVzb3VyY2VzKCZjb2RlX3Jlc291cmNlLCAmZGF0YV9yZXNvdXJjZSk7CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChyZWdpc3Rlcl9tZW1vcnkpOworCiAvKioKICAqIHJlc2VydmVfbWVtb3J5IC0gc2V0dXAgcmVzZXJ2ZWQgbWVtb3J5IGFyZWFzCiAgKgpAQCAtMjExLDYgKzI0MCw5IEBACiAJfQogI2VuZGlmCiAKKwllZmlfbWVtbWFwX2luaXQoJnJzdmRfcmVnaW9uW25dLnN0YXJ0LCAmcnN2ZF9yZWdpb25bbl0uZW5kKTsKKwluKys7CisKIAkvKiBlbmQgb2YgbWVtb3J5IG1hcmtlciAqLwogCXJzdmRfcmVnaW9uW25dLnN0YXJ0ID0gfjBVTDsKIAlyc3ZkX3JlZ2lvbltuXS5lbmQgICA9IH4wVUw7CkBAIC0yNDQsMjggKzI3NiwzMSBAQAogc3RhdGljIHZvaWQgX19pbml0CiBpb19wb3J0X2luaXQgKHZvaWQpCiB7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaWE2NF9pb2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2lvYmFzZTsKIAogCS8qCi0JICogIFNldCBgaW9iYXNlJyB0byB0aGUgYXBwcm9wcmlhdGUgYWRkcmVzcyBpbiByZWdpb24gNiAodW5jYWNoZWQgYWNjZXNzIHJhbmdlKS4KKwkgKiBTZXQgYGlvYmFzZScgYmFzZWQgb24gdGhlIEVGSSBtZW1vcnkgbWFwIG9yLCBmYWlsaW5nIHRoYXQsIHRoZQorCSAqIHZhbHVlIGZpcm13YXJlIGxlZnQgaW4gYXIuazAuCiAJICoKLQkgKiAgVGhlIEVGSSBtZW1vcnkgbWFwIGlzIHRoZSAicHJlZmVycmVkIiBsb2NhdGlvbiB0byBnZXQgdGhlIEkvTyBwb3J0IHNwYWNlIGJhc2UsCi0JICogIHJhdGhlciB0aGUgcmVseWluZyBvbiBBUi5LUjAuIFRoaXMgc2hvdWxkIGJlY29tZSBtb3JlIGNsZWFyIGluIGZ1dHVyZSBTQUwKLQkgKiAgc3BlY3MuIFdlJ2xsIGZhbGwgYmFjayB0byBnZXR0aW5nIGl0IG91dCBvZiBBUi5LUjAgaWYgbm8gYXBwcm9wcmlhdGUgZW50cnkgaXMKLQkgKiAgZm91bmQgaW4gdGhlIG1lbW9yeSBtYXAuCisJICogTm90ZSB0aGF0IGluIGlhMzIgbW9kZSwgSU4vT1VUIGluc3RydWN0aW9ucyB1c2UgYXIuazAgdG8gY29tcHV0ZQorCSAqIHRoZSBwb3J0J3MgdmlydHVhbCBhZGRyZXNzLCBzbyBpYTMyX2xvYWRfc3RhdGUoKSBsb2FkcyBpdCB3aXRoIGEKKwkgKiB1c2VyIHZpcnR1YWwgYWRkcmVzcy4gIEJ1dCBpbiBpYTY0IG1vZGUsIGdsaWJjIHVzZXMgdGhlCisJICogKnBoeXNpY2FsKiBhZGRyZXNzIGluIGFyLmswIHRvIG1tYXAgdGhlIGFwcHJvcHJpYXRlIGFyZWEgZnJvbQorCSAqIC9kZXYvbWVtLCBhbmQgdGhlIGluWCgpL291dFgoKSBpbnRlcmZhY2VzIHVzZSBNTUlPLiAgSW4gYm90aAorCSAqIGNhc2VzLCB1c2VyLW1vZGUgY2FuIG9ubHkgdXNlIHRoZSBsZWdhY3kgMC02NEsgSS9PIHBvcnQgc3BhY2UuCisJICoKKwkgKiBhci5rMCBpcyBub3QgaW52b2x2ZWQgaW4ga2VybmVsIEkvTyBwb3J0IGFjY2Vzc2VzLCB3aGljaCBjYW4gdXNlCisJICogYW55IG9mIHRoZSBJL08gcG9ydCBzcGFjZXMgYW5kIGFyZSBkb25lIHZpYSBNTUlPIHVzaW5nIHRoZQorCSAqIHZpcnR1YWwgbW1pb19iYXNlIGZyb20gdGhlIGFwcHJvcHJpYXRlIGlvX3NwYWNlW10uCiAJICovCiAJcGh5c19pb2Jhc2UgPSBlZmlfZ2V0X2lvYmFzZSgpOwotCWlmIChwaHlzX2lvYmFzZSkKLQkJLyogc2V0IEFSLktSMCBzaW5jZSB0aGlzIGlzIGFsbCB3ZSB1c2UgaXQgZm9yIGFueXdheSAqLwotCQlpYTY0X3NldF9rcihJQTY0X0tSX0lPX0JBU0UsIHBoeXNfaW9iYXNlKTsKLQllbHNlIHsKKwlpZiAoIXBoeXNfaW9iYXNlKSB7CiAJCXBoeXNfaW9iYXNlID0gaWE2NF9nZXRfa3IoSUE2NF9LUl9JT19CQVNFKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gSS9PIHBvcnQgcmFuZ2UgZm91bmQgaW4gRUZJIG1lbW9yeSBtYXAsIGZhbGxpbmcgYmFjayAiCi0JCSAgICAgICAidG8gQVIuS1IwXG4iKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSS9PIHBvcnQgYmFzZSA9IDB4JWx4XG4iLCBwaHlzX2lvYmFzZSk7CisJCXByaW50ayhLRVJOX0lORk8gIk5vIEkvTyBwb3J0IHJhbmdlIGZvdW5kIGluIEVGSSBtZW1vcnkgbWFwLCAiCisJCQkiZmFsbGluZyBiYWNrIHRvIEFSLktSMCAoMHglbHgpXG4iLCBwaHlzX2lvYmFzZSk7CiAJfQogCWlhNjRfaW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAocGh5c19pb2Jhc2UsIDApOworCWlhNjRfc2V0X2tyKElBNjRfS1JfSU9fQkFTRSwgX19wYShpYTY0X2lvYmFzZSkpOwogCiAJLyogc2V0dXAgbGVnYWN5IElPIHBvcnQgc3BhY2UgKi8KIAlpb19zcGFjZVswXS5tbWlvX2Jhc2UgPSBpYTY0X2lvYmFzZTsKQEAgLTUyNiw3ICs1NjEsNyBAQAogCQkgICBjLT5pdGNfZnJlcSAvIDEwMDAwMDAsIGMtPml0Y19mcmVxICUgMTAwMDAwMCwKIAkJICAgbHBqKkhaLzUwMDAwMCwgKGxwaipIWi81MDAwKSAlIDEwMCk7CiAjaWZkZWYgQ09ORklHX1NNUAotCXNlcV9wcmludGYobSwgInNpYmxpbmdzICAgOiAldVxuIiwgYy0+bnVtX2xvZyk7CisJc2VxX3ByaW50ZihtLCAic2libGluZ3MgICA6ICV1XG4iLCBjcHVzX3dlaWdodChjcHVfY29yZV9tYXBbY3B1bnVtXSkpOwogCWlmIChjLT50aHJlYWRzX3Blcl9jb3JlID4gMSB8fCBjLT5jb3Jlc19wZXJfc29ja2V0ID4gMSkKIAkJc2VxX3ByaW50ZihtLAogCQkgICAJICAgInBoeXNpY2FsIGlkOiAldVxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKaW5kZXggMDE2NmE5OC4uNjU3YWM5OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcC5jCkBAIC0xODUsOCArMTg1LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKGNwdV9vbmxpbmUoaSkgJiYgaSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWlmIChpICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKIAkJCXNlbmRfSVBJX3NpbmdsZShpLCBvcCk7CiAJfQogfQpAQCAtMTk5LDkgKzE5OSw5IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQlpZiAoY3B1X29ubGluZShpKSkKLQkJCXNlbmRfSVBJX3NpbmdsZShpLCBvcCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCXNlbmRfSVBJX3NpbmdsZShpLCBvcCk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA3ZDcyYzBkLi40MDBhNDg5OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKQEAgLTY5NCw5ICs2OTQsOSBAQAogCSAqIEFsbG93IHRoZSB1c2VyIHRvIGltcHJlc3MgZnJpZW5kcy4KIAkgKi8KIAotCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspCi0JCWlmIChjcHVfb25saW5lKGNwdSkpCi0JCQlib2dvc3VtICs9IGNwdV9kYXRhKGNwdSktPmxvb3BzX3Blcl9qaWZmeTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlib2dvc3VtICs9IGNwdV9kYXRhKGNwdSktPmxvb3BzX3Blcl9qaWZmeTsKKwl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBvZiAlZCBwcm9jZXNzb3JzIGFjdGl2YXRlZCAoJWx1LiUwMmx1IEJvZ29NSVBTKS5cbiIsCiAJICAgICAgIChpbnQpbnVtX29ubGluZV9jcHVzKCksIGJvZ29zdW0vKDUwMDAwMC9IWiksIChib2dvc3VtLyg1MDAwL0haKSklMTAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW5jYWNoZWQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5jYWNoZWQuYwppbmRleCA0ZTlkMDZjLi5jNmQ0MDQ0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3VuY2FjaGVkLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bmNhY2hlZC5jCkBAIC0yMDUsMjMgKzIwNSwxOCBAQAogc3RhdGljIGludCBfX2luaXQKIHVuY2FjaGVkX2J1aWxkX21lbW1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKQogewotCWxvbmcgbGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgdnN0YXJ0LCB2ZW5kOworCWxvbmcgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAJaW50IG5vZGU7CiAKLQlsZW5ndGggPSBlbmQgLSBzdGFydDsKLQl2c3RhcnQgPSBzdGFydCArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7Ci0JdmVuZCA9IGVuZCArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7Ci0KIAlkcHJpbnRrKEtFUk5fRVJSICJ1bmNhY2hlZF9idWlsZF9tZW1tYXAoJWx4ICVseClcbiIsIHN0YXJ0LCBlbmQpOwogCi0JbWVtc2V0KChjaGFyICopdnN0YXJ0LCAwLCBsZW5ndGgpOworCW1lbXNldCgoY2hhciAqKXN0YXJ0LCAwLCBsZW5ndGgpOwogCi0Jbm9kZSA9IHBhZGRyX3RvX25pZChzdGFydCk7CisJbm9kZSA9IHBhZGRyX3RvX25pZChzdGFydCAtIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQpOwogCi0JZm9yICg7IHZzdGFydCA8IHZlbmQgOyB2c3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0JCWRwcmludGsoS0VSTl9JTkZPICJzdGlja2luZyAlbHggaW50byB0aGUgcG9vbCFcbiIsIHZzdGFydCk7Ci0JCWdlbl9wb29sX2ZyZWUodW5jYWNoZWRfcG9vbFtub2RlXSwgdnN0YXJ0LCBQQUdFX1NJWkUpOworCWZvciAoOyBzdGFydCA8IGVuZCA7IHN0YXJ0ICs9IFBBR0VfU0laRSkgeworCQlkcHJpbnRrKEtFUk5fSU5GTyAic3RpY2tpbmcgJWx4IGludG8gdGhlIHBvb2whXG4iLCBzdGFydCk7CisJCWdlbl9wb29sX2ZyZWUodW5jYWNoZWRfcG9vbFtub2RlXSwgc3RhcnQsIFBBR0VfU0laRSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbGliL3N3aW90bGIuYyBiL2FyY2gvaWE2NC9saWIvc3dpb3RsYi5jCmluZGV4IDNlYmJiM2MuLjk2ZWRjYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9saWIvc3dpb3RsYi5jCisrKyBiL2FyY2gvaWE2NC9saWIvc3dpb3RsYi5jCkBAIC00OSw2ICs0OSwxNSBAQAogICovCiAjZGVmaW5lIElPX1RMQl9TSElGVCAxMQogCisjZGVmaW5lIFNMQUJTX1BFUl9QQUdFICgxIDw8IChQQUdFX1NISUZUIC0gSU9fVExCX1NISUZUKSkKKworLyoKKyAqIE1pbmltdW0gSU8gVExCIHNpemUgdG8gYm90aGVyIGJvb3Rpbmcgd2l0aC4gIFN5c3RlbXMgd2l0aCBtYWlubHkKKyAqIDY0Yml0IGNhcGFibGUgY2FyZHMgd2lsbCBvbmx5IGxpZ2h0bHkgdXNlIHRoZSBzd2lvdGxiLiAgSWYgd2UgY2FuJ3QKKyAqIGFsbG9jYXRlIGEgY29udGlndW91cyAxTUIsIHdlJ3JlIHByb2JhYmx5IGluIHRyb3VibGUgYW55d2F5LgorICovCisjZGVmaW5lIElPX1RMQl9NSU5fU0xBQlMgKCgxPDwyMCkgPj4gSU9fVExCX1NISUZUKQorCiBpbnQgc3dpb3RsYl9mb3JjZTsKIAogLyoKQEAgLTE1NCw2ICsxNjMsOTkgQEAKIAlzd2lvdGxiX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoNjQgKiAoMTw8MjApKTsJLyogZGVmYXVsdCB0byA2NE1CICovCiB9CiAKKy8qCisgKiBTeXN0ZW1zIHdpdGggbGFyZ2VyIERNQSB6b25lcyAodGhvc2UgdGhhdCBkb24ndCBzdXBwb3J0IElTQSkgY2FuCisgKiBpbml0aWFsaXplIHRoZSBzd2lvdGxiIGxhdGVyIHVzaW5nIHRoZSBzbGFiIGFsbG9jYXRvciBpZiBuZWVkZWQuCisgKiBUaGlzIHNob3VsZCBiZSBqdXN0IGxpa2UgYWJvdmUsIGJ1dCB3aXRoIHNvbWUgZXJyb3IgY2F0Y2hpbmcuCisgKi8KK2ludAorc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKHNpemVfdCBkZWZhdWx0X3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBpLCByZXFfbnNsYWJzID0gaW9fdGxiX25zbGFiczsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CisKKwlpZiAoIWlvX3RsYl9uc2xhYnMpIHsKKwkJaW9fdGxiX25zbGFicyA9IChkZWZhdWx0X3NpemUgPj4gSU9fVExCX1NISUZUKTsKKwkJaW9fdGxiX25zbGFicyA9IEFMSUdOKGlvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKKwl9CisKKwkvKgorCSAqIEdldCBJTyBUTEIgbWVtb3J5IGZyb20gdGhlIGxvdyBwYWdlcworCSAqLworCW9yZGVyID0gZ2V0X29yZGVyKGlvX3RsYl9uc2xhYnMgKiAoMSA8PCBJT19UTEJfU0hJRlQpKTsKKwlpb190bGJfbnNsYWJzID0gU0xBQlNfUEVSX1BBR0UgPDwgb3JkZXI7CisKKwl3aGlsZSAoKFNMQUJTX1BFUl9QQUdFIDw8IG9yZGVyKSA+IElPX1RMQl9NSU5fU0xBQlMpIHsKKwkJaW9fdGxiX3N0YXJ0ID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9ETUEgfCBfX0dGUF9OT1dBUk4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcik7CisJCWlmIChpb190bGJfc3RhcnQpCisJCQlicmVhazsKKwkJb3JkZXItLTsKKwl9CisKKwlpZiAoIWlvX3RsYl9zdGFydCkKKwkJZ290byBjbGVhbnVwMTsKKworCWlmIChvcmRlciAhPSBnZXRfb3JkZXIoaW9fdGxiX25zbGFicyAqICgxIDw8IElPX1RMQl9TSElGVCkpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAlbGQgTUIgIgorCQkgICAgICAgImZvciBzb2Z0d2FyZSBJTyBUTEJcbiIsIChQQUdFX1NJWkUgPDwgb3JkZXIpID4+IDIwKTsKKwkJaW9fdGxiX25zbGFicyA9IFNMQUJTX1BFUl9QQUdFIDw8IG9yZGVyOworCX0KKwlpb190bGJfZW5kID0gaW9fdGxiX3N0YXJ0ICsgaW9fdGxiX25zbGFicyAqICgxIDw8IElPX1RMQl9TSElGVCk7CisJbWVtc2V0KGlvX3RsYl9zdGFydCwgMCwgaW9fdGxiX25zbGFicyAqICgxIDw8IElPX1RMQl9TSElGVCkpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IGFycmF5LiAgVGhpcyBhcnJheSBpcyB1c2VkCisJICogdG8gZmluZCBjb250aWd1b3VzIGZyZWUgbWVtb3J5IHJlZ2lvbnMgb2Ygc2l6ZSB1cCB0byBJT19UTEJfU0VHU0laRQorCSAqIGJldHdlZW4gaW9fdGxiX3N0YXJ0IGFuZCBpb190bGJfZW5kLgorCSAqLworCWlvX3RsYl9saXN0ID0gKHVuc2lnbmVkIGludCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfb3JkZXIoaW9fdGxiX25zbGFicyAqIHNpemVvZihpbnQpKSk7CisJaWYgKCFpb190bGJfbGlzdCkKKwkJZ290byBjbGVhbnVwMjsKKworCWZvciAoaSA9IDA7IGkgPCBpb190bGJfbnNsYWJzOyBpKyspCisgCQlpb190bGJfbGlzdFtpXSA9IElPX1RMQl9TRUdTSVpFIC0gT0ZGU0VUKGksIElPX1RMQl9TRUdTSVpFKTsKKwlpb190bGJfaW5kZXggPSAwOworCisJaW9fdGxiX29yaWdfYWRkciA9ICh1bnNpZ25lZCBjaGFyICoqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfb3JkZXIoaW9fdGxiX25zbGFicyAqIHNpemVvZihjaGFyICopKSk7CisJaWYgKCFpb190bGJfb3JpZ19hZGRyKQorCQlnb3RvIGNsZWFudXAzOworCisJbWVtc2V0KGlvX3RsYl9vcmlnX2FkZHIsIDAsIGlvX3RsYl9uc2xhYnMgKiBzaXplb2YoY2hhciAqKSk7CisKKwkvKgorCSAqIEdldCB0aGUgb3ZlcmZsb3cgZW1lcmdlbmN5IGJ1ZmZlcgorCSAqLworCWlvX3RsYl9vdmVyZmxvd19idWZmZXIgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0RNQSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfb3JkZXIoaW9fdGxiX292ZXJmbG93KSk7CisJaWYgKCFpb190bGJfb3ZlcmZsb3dfYnVmZmVyKQorCQlnb3RvIGNsZWFudXA0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiUGxhY2luZyAlbGRNQiBzb2Z0d2FyZSBJTyBUTEIgYmV0d2VlbiAweCVseCAtICIKKwkgICAgICAgIjB4JWx4XG4iLCAoaW9fdGxiX25zbGFicyAqICgxIDw8IElPX1RMQl9TSElGVCkpID4+IDIwLAorCSAgICAgICB2aXJ0X3RvX3BoeXMoaW9fdGxiX3N0YXJ0KSwgdmlydF90b19waHlzKGlvX3RsYl9lbmQpKTsKKworCXJldHVybiAwOworCitjbGVhbnVwNDoKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWlvX3RsYl9vcmlnX2FkZHIsIGdldF9vcmRlcihpb190bGJfbnNsYWJzICoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhciAqKSkpOworCWlvX3RsYl9vcmlnX2FkZHIgPSBOVUxMOworY2xlYW51cDM6CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylpb190bGJfbGlzdCwgZ2V0X29yZGVyKGlvX3RsYl9uc2xhYnMgKgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50KSkpOworCWlvX3RsYl9saXN0ID0gTlVMTDsKKwlpb190bGJfZW5kID0gTlVMTDsKK2NsZWFudXAyOgorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpaW9fdGxiX3N0YXJ0LCBvcmRlcik7CisJaW9fdGxiX3N0YXJ0ID0gTlVMTDsKK2NsZWFudXAxOgorCWlvX3RsYl9uc2xhYnMgPSByZXFfbnNsYWJzOworCXJldHVybiAtRU5PTUVNOworfQorCiBzdGF0aWMgaW5saW5lIGludAogYWRkcmVzc19uZWVkc19tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGFkZHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vTWFrZWZpbGUgYi9hcmNoL2lhNjQvbW0vTWFrZWZpbGUKaW5kZXggNzA3OGY2Ny4uZDc4ZDIwZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9tbS9NYWtlZmlsZQpAQCAtNyw2ICs3LDUgQEAKIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpICs9IGh1Z2V0bGJwYWdlLm8KIG9iai0kKENPTkZJR19OVU1BKQkgICArPSBudW1hLm8KIG9iai0kKENPTkZJR19ESVNDT05USUdNRU0pICs9IGRpc2NvbnRpZy5vCi1pZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQotb2JqLXkgKz0gY29udGlnLm8KLWVuZGlmCitvYmotJChDT05GSUdfU1BBUlNFTUVNKQkgICArPSBkaXNjb250aWcubworb2JqLSQoQ09ORklHX0ZMQVRNRU0pCSAgICs9IGNvbnRpZy5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKaW5kZXggOTFhMDU1Zi4uYWNhYWVjNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJZWZpX21lbW1hcF93YWxrKGZpbmRfbGFyZ2VzdF9ob2xlLCAodTY0ICopJm1heF9nYXApOwogCWlmIChtYXhfZ2FwIDwgTEFSR0VfR0FQKSB7CiAJCXZtZW1fbWFwID0gKHN0cnVjdCBwYWdlICopIDA7Ci0JCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgJmNvbnRpZ19wYWdlX2RhdGEsIHpvbmVzX3NpemUsIDAsCisJCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgTk9ERV9EQVRBKDApLCB6b25lc19zaXplLCAwLAogCQkJCSAgICB6aG9sZXNfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgbG9uZyBtYXBfc2l6ZTsKQEAgLTI4Miw3ICsyODIsNyBAQAogCQllZmlfbWVtbWFwX3dhbGsoY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSwgTlVMTCk7CiAKIAkJTk9ERV9EQVRBKDApLT5ub2RlX21lbV9tYXAgPSB2bWVtX21hcDsKLQkJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCAmY29udGlnX3BhZ2VfZGF0YSwgem9uZXNfc2l6ZSwKKwkJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCBOT0RFX0RBVEEoMCksIHpvbmVzX3NpemUsCiAJCQkJICAgIDAsIHpob2xlc19zaXplKTsKIAogCQlwcmludGsoIlZpcnR1YWwgbWVtX21hcCBzdGFydHMgYXQgMHglcFxuIiwgbWVtX21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggYjVjOTBlNS4uYTM3ODhmYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtNDIxLDYgKzQyMSwzNyBAQAogCXJldHVybjsKIH0KIAorI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKy8qKgorICogcmVnaXN0ZXJfc3BhcnNlX21lbSAtIG5vdGlmeSBTUEFSU0VNRU0gdGhhdCB0aGlzIG1lbW9yeSByYW5nZSBleGlzdHMuCisgKiBAc3RhcnQ6IHBoeXNpY2FsIHN0YXJ0IG9mIHJhbmdlCisgKiBAZW5kOiBwaHlzaWNhbCBlbmQgb2YgcmFuZ2UKKyAqIEBhcmc6IHVudXNlZAorICoKKyAqIFNpbXBseSBjYWxscyBTUEFSU0VNRU0gdG8gcmVnaXN0ZXIgbWVtb3J5IHNlY3Rpb24ocykuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX3NwYXJzZV9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJdm9pZCAqYXJnKQoreworCWludCBuaWQ7CisKKwlzdGFydCA9IF9fcGEoc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJZW5kID0gX19wYShlbmQpID4+IFBBR0VfU0hJRlQ7CisJbmlkID0gZWFybHlfcGZuX3RvX25pZChzdGFydCk7CisJbWVtb3J5X3ByZXNlbnQobmlkLCBzdGFydCwgZW5kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYXJjaF9zcGFyc2VfaW5pdCh2b2lkKQoreworCWVmaV9tZW1tYXBfd2FsayhyZWdpc3Rlcl9zcGFyc2VfbWVtLCBOVUxMKTsKKwlzcGFyc2VfaW5pdCgpOworfQorI2Vsc2UKKyNkZWZpbmUgYXJjaF9zcGFyc2VfaW5pdCgpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKIC8qKgogICogZmluZF9tZW1vcnkgLSB3YWxrIHRoZSBFRkkgbWVtb3J5IG1hcCBhbmQgc2V0dXAgdGhlIGJvb3RtZW0gYWxsb2NhdG9yCiAgKgpAQCAtNTI4LDggKzU1OSwxMCBAQAogCQlpbnQgc2hhcmVkID0gMCwgY2FjaGVkID0gMCwgcmVzZXJ2ZWQgPSAwOwogCQlwcmludGsoIk5vZGUgSUQ6ICVkXG4iLCBwZ2RhdC0+bm9kZV9pZCk7CiAJCWZvcihpID0gMDsgaSA8IHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7IGkrKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZ2RhdF9wYWdlX25yKHBnZGF0LCBpKTsKLQkJCWlmICghaWE2NF9wZm5fdmFsaWQocGdkYXQtPm5vZGVfc3RhcnRfcGZuK2kpKQorCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCQlpZiAocGZuX3ZhbGlkKHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIGkpKQorCQkJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBpKTsKKwkJCWVsc2UKIAkJCQljb250aW51ZTsKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJcmVzZXJ2ZWQrKzsKQEAgLTY0OCwxMiArNjgxLDE2IEBACiAKIAltYXhfZG1hID0gdmlydF90b19waHlzKCh2b2lkICopIE1BWF9ETUFfQUREUkVTUykgPj4gUEFHRV9TSElGVDsKIAorCWFyY2hfc3BhcnNlX2luaXQoKTsKKwogCWVmaV9tZW1tYXBfd2FsayhmaWx0ZXJfcnN2ZF9tZW1vcnksIGNvdW50X25vZGVfcGFnZXMpOwogCisjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAogCXZtYWxsb2NfZW5kIC09IFBBR0VfQUxJR04obWF4X2xvd19wZm4gKiBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKIAl2bWVtX21hcCA9IChzdHJ1Y3QgcGFnZSAqKSB2bWFsbG9jX2VuZDsKIAllZmlfbWVtbWFwX3dhbGsoY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSwgTlVMTCk7CiAJcHJpbnRrKCJWaXJ0dWFsIG1lbV9tYXAgc3RhcnRzIGF0IDB4JXBcbiIsIHZtZW1fbWFwKTsKKyNlbmRpZgogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQltZW1zZXQoem9uZXNfc2l6ZSwgMCwgc2l6ZW9mKHpvbmVzX3NpemUpKTsKQEAgLTY5MCw3ICs3MjcsOSBAQAogCiAJCXBmbl9vZmZzZXQgPSBtZW1fZGF0YVtub2RlXS5taW5fcGZuOwogCisjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAogCQlOT0RFX0RBVEEobm9kZSktPm5vZGVfbWVtX21hcCA9IHZtZW1fbWFwICsgcGZuX29mZnNldDsKKyNlbmRpZgogCQlmcmVlX2FyZWFfaW5pdF9ub2RlKG5vZGUsIE5PREVfREFUQShub2RlKSwgem9uZXNfc2l6ZSwKIAkJCQkgICAgcGZuX29mZnNldCwgemhvbGVzX3NpemUpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDEyODFjNjAuLjk4MjQ2YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNTkzLDcgKzU5Myw3IEBACiAJcGxhdGZvcm1fZG1hX2luaXQoKTsKICNlbmRpZgogCi0jaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKyNpZmRlZiBDT05GSUdfRkxBVE1FTQogCWlmICghbWVtX21hcCkKIAkJQlVHKCk7CiAJbWF4X21hcG5yID0gbWF4X2xvd19wZm47CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vbnVtYS5jIGIvYXJjaC9pYTY0L21tL251bWEuYwppbmRleCA3NzExOGJiLi40ZTVjOGIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vbnVtYS5jCisrKyBiL2FyY2gvaWE2NC9tbS9udW1hLmMKQEAgLTQ3LDMgKzQ3LDI3IEBACiAKIAlyZXR1cm4gKGkgPCBudW1fbm9kZV9tZW1ibGtzKSA/IG5vZGVfbWVtYmxrW2ldLm5pZCA6IChudW1fbm9kZV9tZW1ibGtzID8gLTEgOiAwKTsKIH0KKworI2lmIGRlZmluZWQoQ09ORklHX1NQQVJTRU1FTSkgJiYgZGVmaW5lZChDT05GSUdfTlVNQSkKKy8qCisgKiBCZWNhdXNlIG9mIGhvbGVzIGV2YWx1YXRlIG9uIHNlY3Rpb24gbGltaXRzLgorICogSWYgdGhlIHNlY3Rpb24gb2YgbWVtb3J5IGV4aXN0cywgdGhlbiByZXR1cm4gdGhlIG5vZGUgd2hlcmUgdGhlIHNlY3Rpb24KKyAqIHJlc2lkZXMuICBPdGhlcndpc2UgcmV0dXJuIG5vZGUgMCBhcyB0aGUgZGVmYXVsdC4gIFRoaXMgaXMgdXNlZCBieQorICogU1BBUlNFTUVNIHRvIGFsbG9jYXRlIHRoZSBTUEFSU0VNRU0gc2VjdGlvbm1hcCBvbiB0aGUgTlVNQSBub2RlIHdoZXJlCisgKiB0aGUgc2VjdGlvbiByZXNpZGVzLgorICovCitpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlpbnQgaSwgc2VjdGlvbiA9IHBmbiA+PiBQRk5fU0VDVElPTl9TSElGVCwgc3NlYywgZXNlYzsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fbm9kZV9tZW1ibGtzOyBpKyspIHsKKwkJc3NlYyA9IG5vZGVfbWVtYmxrW2ldLnN0YXJ0X3BhZGRyID4+IFBBX1NFQ1RJT05fU0hJRlQ7CisJCWVzZWMgPSAobm9kZV9tZW1ibGtbaV0uc3RhcnRfcGFkZHIgKyBub2RlX21lbWJsa1tpXS5zaXplICsKKwkJCSgoMUwgPDwgUEFfU0VDVElPTl9TSElGVCkgLSAxKSkgPj4gUEFfU0VDVElPTl9TSElGVDsKKwkJaWYgKHNlY3Rpb24gPj0gc3NlYyAmJiBzZWN0aW9uIDwgZXNlYykKKwkJCXJldHVybiBub2RlX21lbWJsa1tpXS5uaWQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCA0NjQ1NTdlLi5jOTNlMGYyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC03NywxOSArNzcsMjUgQEAKIAkvKiBjYW4ndCBjYWxsIGZsdXNoX3RsYl9hbGwoKSBoZXJlIGJlY2F1c2Ugb2YgcmFjZSBjb25kaXRpb24gd2l0aCBPKDEpIHNjaGVkdWxlciBbRUZdICovCiAJewogCQlpbnQgY3B1ID0gZ2V0X2NwdSgpOyAvKiBwcmV2ZW50IHByZWVtcHRpb24vbWlncmF0aW9uICovCi0JCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpCi0JCQlpZiAoY3B1X29ubGluZShpKSAmJiAoaSAhPSBjcHUpKQorCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJCWlmIChpICE9IGNwdSkKIAkJCQlwZXJfY3B1KGlhNjRfbmVlZF90bGJfZmx1c2gsIGkpID0gMTsKKwkJfQogCQlwdXRfY3B1KCk7CiAJfQogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAogdm9pZAotaWE2NF9nbG9iYWxfdGxiX3B1cmdlICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBuYml0cykKK2lhNjRfZ2xvYmFsX3RsYl9wdXJnZSAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIG5iaXRzKQogewogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRjZ19sb2NrKTsKIAorCWlmIChtbSAhPSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKKwkJZmx1c2hfdGxiX2FsbCgpOworCQlyZXR1cm47CisJfQorCiAJLyogSFcgcmVxdWlyZXMgZ2xvYmFsIHNlcmlhbGl6YXRpb24gb2YgcHRjLmdhLiAgKi8KIAlzcGluX2xvY2soJnB0Y2dfbG9jayk7CiAJewpAQCAtMTM1LDE1ICsxNDEsMTIgQEAKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBlbmQgLSBzdGFydDsKIAl1bnNpZ25lZCBsb25nIG5iaXRzOwogCisjaWZuZGVmIENPTkZJR19TTVAKIAlpZiAobW0gIT0gY3VycmVudC0+YWN0aXZlX21tKSB7Ci0JCS8qIHRoaXMgZG9lcyBoYXBwZW4sIGJ1dCBwZXJoYXBzIGl0J3Mgbm90IHdvcnRoIG9wdGltaXppbmcgZm9yPyAqLwotI2lmZGVmIENPTkZJR19TTVAKLQkJZmx1c2hfdGxiX2FsbCgpOwotI2Vsc2UKIAkJbW0tPmNvbnRleHQgPSAwOwotI2VuZGlmCiAJCXJldHVybjsKIAl9CisjZW5kaWYKIAogCW5iaXRzID0gaWE2NF9mbHMoc2l6ZSArIDB4ZmZmKTsKIAl3aGlsZSAodW5saWtlbHkgKCgoMVVMIDw8IG5iaXRzKSAmIHB1cmdlLm1hc2spID09IDApICYmIChuYml0cyA8IHB1cmdlLm1heF9iaXRzKSkKQEAgLTE1Myw3ICsxNTYsNyBAQAogCXN0YXJ0ICY9IH4oKDFVTCA8PCBuYml0cykgLSAxKTsKIAogIyBpZmRlZiBDT05GSUdfU01QCi0JcGxhdGZvcm1fZ2xvYmFsX3RsYl9wdXJnZShzdGFydCwgZW5kLCBuYml0cyk7CisJcGxhdGZvcm1fZ2xvYmFsX3RsYl9wdXJnZShtbSwgc3RhcnQsIGVuZCwgbmJpdHMpOwogIyBlbHNlCiAJZG8gewogCQlpYTY0X3B0Y2woc3RhcnQsIChuYml0czw8MikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggOWI1ZGU1OC4uMDE3Y2ZjMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC0xMjAsMjkgKzEyMCw2IEBACiAJLndyaXRlID0gcGNpX3dyaXRlLAogfTsKIAotI2lmZGVmIENPTkZJR19OVU1BCi1leHRlcm4gYWNwaV9zdGF0dXMgYWNwaV9tYXBfaW9zYXBpYyhhY3BpX2hhbmRsZSwgdTMyLCB2b2lkICosIHZvaWQgKiopOwotc3RhdGljIHZvaWQgYWNwaV9tYXBfaW9zYXBpY3Modm9pZCkKLXsKLQlhY3BpX2dldF9kZXZpY2VzKE5VTEwsIGFjcGlfbWFwX2lvc2FwaWMsIE5VTEwsIE5VTEwpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIGFjcGlfbWFwX2lvc2FwaWNzKHZvaWQpCi17Ci0JcmV0dXJuOwotfQotI2VuZGlmIC8qIENPTkZJR19OVU1BICovCi0KLXN0YXRpYyBpbnQgX19pbml0Ci1wY2lfYWNwaV9pbml0ICh2b2lkKQotewotCWFjcGlfbWFwX2lvc2FwaWNzKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKHBjaV9hY3BpX2luaXQpOwotCiAvKiBDYWxsZWQgYnkgQUNQSSB3aGVuIGl0IGZpbmRzIGEgbmV3IHJvb3QgYnVzLiAgKi8KIAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciAqIF9fZGV2aW5pdApAQCAtMTkxLDYgKzE2OCwyOSBAQAogCXJldHVybiBJT19TUEFDRV9CQVNFKGkpOwogfQogCitzdGF0aWMgYWNwaV9zdGF0dXMgX19kZXZpbml0IHJlc291cmNlX3RvX3dpbmRvdyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsCisJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICphZGRyKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCS8qCisJICogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIF9DUlMgZGVzY3JpcHRvcnMgdGhhdCBhcmUKKwkgKgktIGFkZHJlc3Mgc3BhY2UgZGVzY3JpcHRvcnMgZm9yIG1lbW9yeSBvciBJL08gc3BhY2UKKwkgKgktIG5vbi16ZXJvIHNpemUKKwkgKgktIHByb2R1Y2VycywgaS5lLiwgdGhlIGFkZHJlc3Mgc3BhY2UgaXMgcm91dGVkIGRvd25zdHJlYW0sCisJICoJICBub3QgY29uc3VtZWQgYnkgdGhlIGJyaWRnZSBpdHNlbGYKKwkgKi8KKwlzdGF0dXMgPSBhY3BpX3Jlc291cmNlX3RvX2FkZHJlc3M2NChyZXNvdXJjZSwgYWRkcik7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmCisJICAgIChhZGRyLT5yZXNvdXJjZV90eXBlID09IEFDUElfTUVNT1JZX1JBTkdFIHx8CisJICAgICBhZGRyLT5yZXNvdXJjZV90eXBlID09IEFDUElfSU9fUkFOR0UpICYmCisJICAgIGFkZHItPmFkZHJlc3NfbGVuZ3RoICYmCisJICAgIGFkZHItPnByb2R1Y2VyX2NvbnN1bWVyID09IEFDUElfUFJPRFVDRVIpCisJCXJldHVybiBBRV9PSzsKKworCXJldHVybiBBRV9FUlJPUjsKK30KKwogc3RhdGljIGFjcGlfc3RhdHVzIF9fZGV2aW5pdAogY291bnRfd2luZG93IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmRhdGEpCiB7CkBAIC0xOTgsMTEgKzE5OCw5IEBACiAJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0IGFkZHI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0Jc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQocmVzb3VyY2UsICZhZGRyKTsKKwlzdGF0dXMgPSByZXNvdXJjZV90b193aW5kb3cocmVzb3VyY2UsICZhZGRyKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCWlmIChhZGRyLnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UgfHwKLQkJICAgIGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKQotCQkJKCp3aW5kb3dzKSsrOworCQkoKndpbmRvd3MpKys7CiAKIAlyZXR1cm4gQUVfT0s7CiB9CkBAIC0yMjEsMTMgKzIxOSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9mZnNldCA9IDA7CiAJc3RydWN0IHJlc291cmNlICpyb290OwogCi0Jc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQocmVzLCAmYWRkcik7CisJLyogUmV0dXJuIEFFX09LIGZvciBub24td2luZG93IHJlc291cmNlcyB0byBrZWVwIHNjYW5uaW5nIGZvciBtb3JlICovCisJc3RhdHVzID0gcmVzb3VyY2VfdG9fd2luZG93KHJlcywgJmFkZHIpOwogCWlmICghQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCXJldHVybiBBRV9PSzsKIAotCWlmICghYWRkci5hZGRyZXNzX2xlbmd0aCkKLQkJcmV0dXJuIEFFX09LOwotCiAJaWYgKGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX01FTU9SWV9SQU5HRSkgewogCQlmbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCQlyb290ID0gJmlvbWVtX3Jlc291cmNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKaW5kZXggNDU4NTRjNi4uZDcxZjRkZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBpdGNfZW5kID0gMDsKIAlpbnQgbmFzaWRfdG9fdHJ5W01BWF9OT0RFU19UT19UUlldOwotCWludCBteV9uYXNpZCA9IGdldF9uYXNpZCgpOworCWludCBteV9uYXNpZCA9IGNwdWlkX3RvX25hc2lkKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCWludCBidGVfaWZfaW5kZXgsIG5hc2lkX2luZGV4OwogCWludCBidGVfZmlyc3QsIGJ0ZXNfcGVyX25vZGUgPSBCVEVTX1BFUl9OT0RFOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCmluZGV4IDkwNjYyMmQuLmI0ZjUwNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCkBAIC0yMiw4ICsyMiw2IEBACiAjaW5jbHVkZSAieHRhbGsvaHViZGV2LmgiCiAjaW5jbHVkZSAieHRhbGsveHdpZGdldGRldi5oIgogCi1uYXNpZF90IG1hc3Rlcl9uYXNpZCA9IElOVkFMSURfTkFTSUQ7CS8qIFBhcnRpdGlvbiBNYXN0ZXIgKi8KLQogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgc25fc3lzZGF0YV9saXN0OwogCiAvKiBzeXNkYXRhIGxpc3Qgc3RydWN0ICovCkBAIC0xNjUsNyArMTYzLDcgQEAKIAkgKiBHZXQgU0dJIFNwZWNpZmljIEhVQiBjaGlwc2V0IGluZm9ybWF0aW9uLgogCSAqIEluZm9ybSBQcm9tIHRoYXQgdGhpcyBrZXJuZWwgY2FuIHN1cHBvcnQgZG9tYWluIGJ1cyBudW1iZXJpbmcuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IG51bWlvbm9kZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY25vZGVzOyBpKyspIHsKIAkJaHViZGV2ID0gKHN0cnVjdCBodWJkZXZfaW5mbyAqKShOT0RFUERBKGkpLT5wZGluZm8pOwogCQluYXNpZCA9IGNub2RlaWRfdG9fbmFzaWQoaSk7CiAJCWh1YmRldi0+bWF4X3NlZ21lbnRfbnVtYmVyID0gMHhmZmZmZmZmZjsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwppbmRleCA2ZjhjNTg4Li4wZmI1NzllIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCkBAIC01OSw4ICs1OSw2IEBACiAKICNkZWZpbmUgTUFYX1BIWVNfTUVNT1JZCQkoMVVMIDw8IElBNjRfTUFYX1BIWVNfQklUUykJLyogTWF4IHBoeXNpY2FsIGFkZHJlc3Mgc3VwcG9ydGVkICovCiAKLWxib2FyZF90ICpyb290X2xib2FyZFtNQVhfQ09NUEFDVF9OT0RFU107Ci0KIGV4dGVybiB2b2lkIGJ0ZV9pbml0X25vZGUobm9kZXBkYV90ICosIGNub2RlaWRfdCk7CiAKIGV4dGVybiB2b2lkIHNuX3RpbWVyX2luaXQodm9pZCk7CkBAIC05NywxNSArOTUsMTUgQEAKIEVYUE9SVF9TWU1CT0woc25fcmVnaW9uX3NpemUpOwogaW50IHNuX3Byb21fdHlwZTsJLyogMD1oYXJkd2FyZSwgMT1tZWR1c2EvcmVhbHByb20sIDI9bWVkdXNhL2Zha2Vwcm9tICovCiAKLXNob3J0IHBoeXNpY2FsX25vZGVfbWFwW01BWF9QSFlTTk9ERV9JRF07CitzaG9ydCBwaHlzaWNhbF9ub2RlX21hcFtNQVhfTlVNQUxJTktfTk9ERVNdOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc25fcHJvbV9mZWF0dXJlc1tNQVhfUFJPTV9GRUFUVVJFX1NFVFNdOwogCiBFWFBPUlRfU1lNQk9MKHBoeXNpY2FsX25vZGVfbWFwKTsKIAotaW50IG51bWlvbm9kZXM7CitpbnQgbnVtX2Nub2RlczsKIAogc3RhdGljIHZvaWQgc25faW5pdF9wZGFzKGNoYXIgKiopOwotc3RhdGljIHZvaWQgc2Nhbl9mb3JfaW9ub2Rlcyh2b2lkKTsKK3N0YXRpYyB2b2lkIGJ1aWxkX2Nub2RlX3RhYmxlcyh2b2lkKTsKIAogc3RhdGljIG5vZGVwZGFfdCAqbm9kZXBkYWluZHJbTUFYX0NPTVBBQ1RfTk9ERVNdOwogCkBAIC0xNDAsMTkgKzEzOCw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEdldCBuYXNpZCBvZiBjdXJyZW50IGNwdSBlYXJseSBpbiBib290IGJlZm9yZSBub2RlcGRhIGlzIGluaXRpYWxpemVkCi0gKi8KLXN0YXRpYyBpbnQKLWJvb3RfZ2V0X25hc2lkKHZvaWQpCi17Ci0JaW50IG5hc2lkOwotCi0JaWYgKGlhNjRfc25fZ2V0X3NhcGljX2luZm8oZ2V0X3NhcGljaWQoKSwgJm5hc2lkLCBOVUxMLCBOVUxMKSkKLQkJQlVHKCk7Ci0JcmV0dXJuIG5hc2lkOwotfQotCi0vKgogICogVGhpcyByb3V0aW5lIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGluaXQsIHNpbmNlCiAgKiBzbXBfYm9vdF9kYXRhIGlzIGFuIGluaXQgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBXZSBoYXZlIHRvIHVzZSBzbXBfYm9vdF9kYXRhLmNwdV9waHlzX2lkIHRvIGZpbmQKQEAgLTIyMyw3ICsyMDgsNiBAQAogfQogCiBleHRlcm4gaW50IHBsYXRmb3JtX2ludHJfbGlzdFtdOwotZXh0ZXJuIG5hc2lkX3QgbWFzdGVyX25hc2lkOwogc3RhdGljIGludCBfX2luaXRkYXRhIHNodWJfMV8xX2ZvdW5kID0gMDsKIAogLyoKQEAgLTI2OSw3ICsyNTMsNiBAQAogdm9pZCBfX2luaXQgc25fc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAlsb25nIHN0YXR1cywgdGlja3NfcGVyX3NlYywgZHJpZnQ7Ci0JaW50IHB4bTsKIAl1MzIgdmVyc2lvbiA9IHNuX3NhbF9yZXYoKTsKIAlleHRlcm4gdm9pZCBzbl9jcHVfaW5pdCh2b2lkKTsKIApAQCAtMzAwLDExICsyODMsMTAgQEAKIAogCU1BWF9ETUFfQUREUkVTUyA9IFBBR0VfT0ZGU0VUICsgTUFYX1BIWVNfTUVNT1JZOwogCi0JbWVtc2V0KHBoeXNpY2FsX25vZGVfbWFwLCAtMSwgc2l6ZW9mKHBoeXNpY2FsX25vZGVfbWFwKSk7Ci0JZm9yIChweG0gPSAwOyBweG0gPCBNQVhfUFhNX0RPTUFJTlM7IHB4bSsrKQotCQlpZiAocHhtX3RvX25pZF9tYXBbcHhtXSAhPSAtMSkKLQkJCXBoeXNpY2FsX25vZGVfbWFwW3B4bV90b19uYXNpZChweG0pXSA9Ci0JCQkgICAgcHhtX3RvX25pZF9tYXBbcHhtXTsKKwkvKgorCSAqIEJ1aWxkIHRoZSB0YWJsZXMgZm9yIG1hbmFnaW5nIGNub2Rlcy4KKwkgKi8KKwlidWlsZF9jbm9kZV90YWJsZXMoKTsKIAogCS8qCiAJICogT2xkIFBST01zIGRvIG5vdCBwcm92aWRlIGFuIEFDUEkgRkFEVC4gRGlzYWJsZSBsZWdhY3kga2V5Ym9hcmQKQEAgLTMxOSw4ICszMDEsNiBAQAogCiAJcHJpbnRrKCJTR0kgU0FMIHZlcnNpb24gJXguJTAyeFxuIiwgdmVyc2lvbiA+PiA4LCB2ZXJzaW9uICYgMHgwMEZGKTsKIAotCW1hc3Rlcl9uYXNpZCA9IGJvb3RfZ2V0X25hc2lkKCk7Ci0KIAlzdGF0dXMgPQogCSAgICBpYTY0X3NhbF9mcmVxX2Jhc2UoU0FMX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSywgJnRpY2tzX3Blcl9zZWMsCiAJCQkgICAgICAgJmRyaWZ0KTsKQEAgLTM3OCwxNSArMzU4LDYgQEAKIHsKIAljbm9kZWlkX3QgY25vZGU7CiAKLQltZW1zZXQoc25fY25vZGVpZF90b19uYXNpZCwgLTEsCi0JCQlzaXplb2YoX19pYTY0X3Blcl9jcHVfdmFyKF9fc25fY25vZGVpZF90b19uYXNpZCkpKTsKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShjbm9kZSkKLQkJc25fY25vZGVpZF90b19uYXNpZFtjbm9kZV0gPQotCQkJCXB4bV90b19uYXNpZChuaWRfdG9fcHhtX21hcFtjbm9kZV0pOwotCi0JbnVtaW9ub2RlcyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKLQlzY2FuX2Zvcl9pb25vZGVzKCk7Ci0KIAkvKgogCSAqIEFsbG9jYXRlICYgaW5pdGFsaXplIHRoZSBub2RlcGRhIGZvciBlYWNoIG5vZGUuCiAJICovCkBAIC00MDIsNyArMzczLDcgQEAKIAkvKgogCSAqIEFsbG9jYXRlICYgaW5pdGlhbGl6ZSBub2RlcGRhIGZvciBUSU9zLiAgRm9yIG5vdywgcHV0IHRoZW0gb24gbm9kZSAwLgogCSAqLwotCWZvciAoY25vZGUgPSBudW1fb25saW5lX25vZGVzKCk7IGNub2RlIDwgbnVtaW9ub2RlczsgY25vZGUrKykgeworCWZvciAoY25vZGUgPSBudW1fb25saW5lX25vZGVzKCk7IGNub2RlIDwgbnVtX2Nub2RlczsgY25vZGUrKykgewogCQlub2RlcGRhaW5kcltjbm9kZV0gPQogCQkgICAgYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgc2l6ZW9mKG5vZGVwZGFfdCkpOwogCQltZW1zZXQobm9kZXBkYWluZHJbY25vZGVdLCAwLCBzaXplb2Yobm9kZXBkYV90KSk7CkBAIC00MTEsNyArMzgyLDcgQEAKIAkvKgogCSAqIE5vdyBjb3B5IHRoZSBhcnJheSBvZiBub2RlcGRhIHBvaW50ZXJzIHRvIGVhY2ggbm9kZXBkYS4KIAkgKi8KLQlmb3IgKGNub2RlID0gMDsgY25vZGUgPCBudW1pb25vZGVzOyBjbm9kZSsrKQorCWZvciAoY25vZGUgPSAwOyBjbm9kZSA8IG51bV9jbm9kZXM7IGNub2RlKyspCiAJCW1lbWNweShub2RlcGRhaW5kcltjbm9kZV0tPnBlcm5vZGVfcGRhaW5kciwgbm9kZXBkYWluZHIsCiAJCSAgICAgICBzaXplb2Yobm9kZXBkYWluZHIpKTsKIApAQCAtNDI4LDcgKzM5OSw3IEBACiAJICogSW5pdGlhbGl6ZSB0aGUgcGVyIG5vZGUgaHViZGV2LiAgVGhpcyBpbmNsdWRlcyBJTyBOb2RlcyBhbmQKIAkgKiBoZWFkbGVzcy9tZW1sZXNzIG5vZGVzLgogCSAqLwotCWZvciAoY25vZGUgPSAwOyBjbm9kZSA8IG51bWlvbm9kZXM7IGNub2RlKyspIHsKKwlmb3IgKGNub2RlID0gMDsgY25vZGUgPCBudW1fY25vZGVzOyBjbm9kZSsrKSB7CiAJCWh1YmRldl9pbml0X25vZGUobm9kZXBkYWluZHJbY25vZGVdLCBjbm9kZSk7CiAJfQogfQpAQCAtNTUzLDg3ICs1MjQsNTggQEAKIH0KIAogLyoKLSAqIFNjYW4ga2xjb25maWcgZm9yIGlvbm9kZXMuICBBZGQgdGhlIG5hc2lkcyB0byB0aGUKLSAqIHBoeXNpY2FsX25vZGVfbWFwIGFuZCB0aGUgcGRhIGFuZCBpbmNyZW1lbnQgbnVtaW9ub2Rlcy4KKyAqIEJ1aWxkIHRhYmxlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIE5BU0lEcyBhbmQgY25vZGVzLgogICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBzY2FuX2Zvcl9pb25vZGVzKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgYm9hcmRfbmVlZHNfY25vZGUoaW50IHR5cGUpCiB7Ci0JaW50IG5hc2lkID0gMDsKKwlyZXR1cm4gKHR5cGUgPT0gS0xUWVBFX1NOSUEgfHwgdHlwZSA9PSBLTFRZUEVfVElPKTsKK30KKwordm9pZCBfX2luaXQgYnVpbGRfY25vZGVfdGFibGVzKHZvaWQpCit7CisJaW50IG5hc2lkOworCWludCBub2RlOwogCWxib2FyZF90ICpicmQ7CiAKKwltZW1zZXQocGh5c2ljYWxfbm9kZV9tYXAsIC0xLCBzaXplb2YocGh5c2ljYWxfbm9kZV9tYXApKTsKKwltZW1zZXQoc25fY25vZGVpZF90b19uYXNpZCwgLTEsCisJCQlzaXplb2YoX19pYTY0X3Blcl9jcHVfdmFyKF9fc25fY25vZGVpZF90b19uYXNpZCkpKTsKKworCS8qCisJICogRmlyc3QgcG9wdWxhdGUgdGhlIHRhYmxlcyB3aXRoIEMvTSBicmlja3MuIFRoaXMgZW5zdXJlcyB0aGF0CisJICogY25vZGUgPT0gbm9kZSBmb3IgYWxsIEMgJiBNIGJyaWNrcy4KKwkgKi8KKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCW5hc2lkID0gcHhtX3RvX25hc2lkKG5pZF90b19weG1fbWFwW25vZGVdKTsKKwkJc25fY25vZGVpZF90b19uYXNpZFtub2RlXSA9IG5hc2lkOworCQlwaHlzaWNhbF9ub2RlX21hcFtuYXNpZF0gPSBub2RlOworCX0KKworCS8qCisJICogbnVtX2Nub2RlcyBpcyB0b3RhbCBudW1iZXIgb2YgQy9NL1RJTyBicmlja3MuIEJlY2F1c2Ugb2YgdGhlIDI1NiBub2RlCisJICogbGltaXQgb24gdGhlIG51bWJlciBvZiBub2Rlcywgd2UgY2FuJ3QgdXNlIHRoZSBnZW5lcmljIG5vZGUgbnVtYmVycyAKKwkgKiBmb3IgdGhpcy4gTm90ZSB0aGF0IG51bV9jbm9kZXMgaXMgaW5jcmVtZW50ZWQgYmVsb3cgYXMgVElPcyBvcgorCSAqIGhlYWRsZXNzL21lbW9yeWxlc3Mgbm9kZXMgYXJlIGRpc2NvdmVyZWQuCisJICovCisJbnVtX2Nub2RlcyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKKwogCS8qIGZha2Vwcm9tIGRvZXMgbm90IHN1cHBvcnQga2xncmFwaCAqLwogCWlmIChJU19SVU5OSU5HX09OX0ZBS0VfUFJPTSgpKQogCQlyZXR1cm47CiAKLQkvKiBTZXR1cCBpb25vZGVzIHdpdGggbWVtb3J5ICovCi0JZm9yIChuYXNpZCA9IDA7IG5hc2lkIDwgTUFYX1BIWVNOT0RFX0lEOyBuYXNpZCArPSAyKSB7Ci0JCWNoYXIgKmtsZ3JhcGhfaGVhZGVyOwotCQljbm9kZWlkX3QgY25vZGVpZDsKLQotCQlpZiAocGh5c2ljYWxfbm9kZV9tYXBbbmFzaWRdID09IC0xKQotCQkJY29udGludWU7Ci0KLQkJY25vZGVpZCA9IC0xOwotCQlrbGdyYXBoX2hlYWRlciA9IF9fdmEoaWE2NF9zbl9nZXRfa2xjb25maWdfYWRkcihuYXNpZCkpOwotCQlpZiAoIWtsZ3JhcGhfaGVhZGVyKSB7Ci0JCQlCVUcoKTsJLyogQWxsIG5vZGVzIG11c3QgaGF2ZSBrbGNvbmZpZyB0YWJsZXMhICovCi0JCX0KLQkJY25vZGVpZCA9IG5hc2lkX3RvX2Nub2RlaWQobmFzaWQpOwotCQlyb290X2xib2FyZFtjbm9kZWlkXSA9IChsYm9hcmRfdCAqKQotCQkgICAgTk9ERV9PRkZTRVRfVE9fTEJPQVJEKChuYXNpZCksCi0JCQkJCSAgKChrbF9jb25maWdfaGRyX3QKLQkJCQkJICAgICopIChrbGdyYXBoX2hlYWRlcikpLT4KLQkJCQkJICBjaF9ib2FyZF9pbmZvKTsKLQl9Ci0KLQkvKiBTY2FuIGhlYWRsZXNzL21lbWxlc3MgSU8gTm9kZXMuICovCi0JZm9yIChuYXNpZCA9IDA7IG5hc2lkIDwgTUFYX1BIWVNOT0RFX0lEOyBuYXNpZCArPSAyKSB7Ci0JCS8qIGlmIHRoZXJlJ3Mgbm8gbmFzaWQsIGRvbid0IHRyeSB0byByZWFkIHRoZSBrbGNvbmZpZyBvbiB0aGUgbm9kZSAqLwotCQlpZiAocGh5c2ljYWxfbm9kZV9tYXBbbmFzaWRdID09IC0xKQotCQkJY29udGludWU7Ci0JCWJyZCA9IGZpbmRfbGJvYXJkX2FueSgobGJvYXJkX3QgKikKLQkJCQkgICAgICByb290X2xib2FyZFtuYXNpZF90b19jbm9kZWlkKG5hc2lkKV0sCi0JCQkJICAgICAgS0xUWVBFX1NOSUEpOwotCQlpZiAoYnJkKSB7Ci0JCQlicmQgPSBLTENGX05FWFRfQU5ZKGJyZCk7CS8qIFNraXAgdGhpcyBub2RlJ3MgbGJvYXJkICovCi0JCQlpZiAoIWJyZCkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCWJyZCA9IGZpbmRfbGJvYXJkX2FueShicmQsIEtMVFlQRV9TTklBKTsKLQorCS8qIEZpbmQgVElPcyAmIGhlYWRsZXNzL21lbW9yeWxlc3Mgbm9kZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSB0YWJsZXMgKi8KKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCWtsX2NvbmZpZ19oZHJfdCAqa2xncmFwaF9oZWFkZXI7CisJCW5hc2lkID0gY25vZGVpZF90b19uYXNpZChub2RlKTsKKwkJaWYgKChrbGdyYXBoX2hlYWRlciA9IGlhNjRfc25fZ2V0X2tsY29uZmlnX2FkZHIobmFzaWQpKSA9PSBOVUxMKQorCQkJQlVHKCk7CisJCWJyZCA9IE5PREVfT0ZGU0VUX1RPX0xCT0FSRChuYXNpZCwga2xncmFwaF9oZWFkZXItPmNoX2JvYXJkX2luZm8pOwogCQl3aGlsZSAoYnJkKSB7Ci0JCQlzbl9jbm9kZWlkX3RvX25hc2lkW251bWlvbm9kZXNdID0gYnJkLT5icmRfbmFzaWQ7Ci0JCQlwaHlzaWNhbF9ub2RlX21hcFticmQtPmJyZF9uYXNpZF0gPSBudW1pb25vZGVzOwotCQkJcm9vdF9sYm9hcmRbbnVtaW9ub2Rlc10gPSBicmQ7Ci0JCQludW1pb25vZGVzKys7Ci0JCQlicmQgPSBLTENGX05FWFRfQU5ZKGJyZCk7Ci0JCQlpZiAoIWJyZCkKLQkJCQlicmVhazsKLQotCQkJYnJkID0gZmluZF9sYm9hcmRfYW55KGJyZCwgS0xUWVBFX1NOSUEpOwotCQl9Ci0JfQotCi0JLyogU2NhbiBmb3IgVElPIG5vZGVzLiAqLwotCWZvciAobmFzaWQgPSAwOyBuYXNpZCA8IE1BWF9QSFlTTk9ERV9JRDsgbmFzaWQgKz0gMikgewotCQkvKiBpZiB0aGVyZSdzIG5vIG5hc2lkLCBkb24ndCB0cnkgdG8gcmVhZCB0aGUga2xjb25maWcgb24gdGhlIG5vZGUgKi8KLQkJaWYgKHBoeXNpY2FsX25vZGVfbWFwW25hc2lkXSA9PSAtMSkKLQkJCWNvbnRpbnVlOwotCQlicmQgPSBmaW5kX2xib2FyZF9hbnkoKGxib2FyZF90ICopCi0JCQkJICAgICAgcm9vdF9sYm9hcmRbbmFzaWRfdG9fY25vZGVpZChuYXNpZCldLAotCQkJCSAgICAgIEtMVFlQRV9USU8pOwotCQl3aGlsZSAoYnJkKSB7Ci0JCQlzbl9jbm9kZWlkX3RvX25hc2lkW251bWlvbm9kZXNdID0gYnJkLT5icmRfbmFzaWQ7Ci0JCQlwaHlzaWNhbF9ub2RlX21hcFticmQtPmJyZF9uYXNpZF0gPSBudW1pb25vZGVzOwotCQkJcm9vdF9sYm9hcmRbbnVtaW9ub2Rlc10gPSBicmQ7Ci0JCQludW1pb25vZGVzKys7Ci0JCQlicmQgPSBLTENGX05FWFRfQU5ZKGJyZCk7Ci0JCQlpZiAoIWJyZCkKLQkJCQlicmVhazsKLQotCQkJYnJkID0gZmluZF9sYm9hcmRfYW55KGJyZCwgS0xUWVBFX1RJTyk7CisJCQlpZiAoYm9hcmRfbmVlZHNfY25vZGUoYnJkLT5icmRfdHlwZSkgJiYgcGh5c2ljYWxfbm9kZV9tYXBbYnJkLT5icmRfbmFzaWRdIDwgMCkgeworCQkJCXNuX2Nub2RlaWRfdG9fbmFzaWRbbnVtX2Nub2Rlc10gPSBicmQtPmJyZF9uYXNpZDsKKwkJCQlwaHlzaWNhbF9ub2RlX21hcFticmQtPmJyZF9uYXNpZF0gPSBudW1fY25vZGVzKys7CisJCQl9CisJCQlicmQgPSBmaW5kX2xib2FyZF9uZXh0KGJyZCk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMKaW5kZXggMGE0ZWU1MC4uNDliNTMwYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuMl9zbXAuYwpAQCAtMTc3LDYgKzE3Nyw3IEBACiAKIC8qKgogICogc24yX2dsb2JhbF90bGJfcHVyZ2UgLSBnbG9iYWxseSBwdXJnZSB0cmFuc2xhdGlvbiBjYWNoZSBvZiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UKKyAqIEBtbTogbW1fc3RydWN0IGNvbnRhaW5pbmcgdmlydHVhbCBhZGRyZXNzIHJhbmdlCiAgKiBAc3RhcnQ6IHN0YXJ0IG9mIHZpcnR1YWwgYWRkcmVzcyByYW5nZQogICogQGVuZDogZW5kIG9mIHZpcnR1YWwgYWRkcmVzcyByYW5nZQogICogQG5iaXRzOiBzcGVjaWZpZXMgbnVtYmVyIG9mIGJ5dGVzIHRvIHB1cmdlIHBlciBpbnN0cnVjdGlvbiAobnVtID0gMTw8KG5iaXRzICYgMHhmYykpCkBAIC0xODgsMjEgKzE4OSwyMiBAQAogICogCS0gY3B1X3ZtX21hc2sgaXMgYSBiaXQgbWFzayB0aGF0IGluZGljYXRlcyB3aGljaCBjcHVzIGhhdmUgbG9hZGVkIHRoZSBjb250ZXh0LgogICogCS0gY3B1X3ZtX21hc2sgaXMgY29udmVydGVkIGludG8gYSBub2RlbWFzayBvZiB0aGUgbm9kZXMgY29udGFpbmluZyB0aGUKICAqIAkgIGNwdXMgaW4gY3B1X3ZtX21hc2suCi0gKgktIGlmIG9ubHkgb25lIGJpdCBpcyBzZXQgaW4gY3B1X3ZtX21hc2sgJiBpdCBpcyB0aGUgY3VycmVudCBjcHUsCi0gKgkgIHRoZW4gb25seSB0aGUgbG9jYWwgVExCIG5lZWRzIHRvIGJlIGZsdXNoZWQuIFRoaXMgZmx1c2hpbmcgY2FuIGJlIGRvbmUKLSAqCSAgdXNpbmcgcHRjLmwuIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlICYgYXZvaWRzIHRoZSBnbG9iYWwgc3BpbmxvY2suCisgKgktIGlmIG9ubHkgb25lIGJpdCBpcyBzZXQgaW4gY3B1X3ZtX21hc2sgJiBpdCBpcyB0aGUgY3VycmVudCBjcHUgJiB0aGUKKyAqCSAgcHJvY2VzcyBpcyBwdXJnaW5nIGl0cyBvd24gdmlydHVhbCBhZGRyZXNzIHJhbmdlLCB0aGVuIG9ubHkgdGhlCisgKgkgIGxvY2FsIFRMQiBuZWVkcyB0byBiZSBmbHVzaGVkLiBUaGlzIGZsdXNoaW5nIGNhbiBiZSBkb25lIHVzaW5nCisgKgkgIHB0Yy5sLiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSAmIGF2b2lkcyB0aGUgZ2xvYmFsIHNwaW5sb2NrLgogICoJLSBpZiBtdWx0aXBsZSBjcHVzIGhhdmUgbG9hZGVkIHRoZSBjb250ZXh0LCB0aGVuIGZsdXNoaW5nIGhhcyB0byBiZQogICoJICBkb25lIHdpdGggcHRjLmcvTU1ScyB1bmRlciBwcm90ZWN0aW9uIG9mIHRoZSBnbG9iYWwgcHRjX2xvY2suCiAgKi8KIAogdm9pZAotc24yX2dsb2JhbF90bGJfcHVyZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBuYml0cykKK3NuMl9nbG9iYWxfdGxiX3B1cmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIG5iaXRzKQogewogCWludCBpLCBvcHQsIHNodWIxLCBjbm9kZSwgbXluYXNpZCwgY3B1LCBsY3B1ID0gMCwgbmFzaWQsIGZsdXNoZWQgPSAwOworCWludCBteW1tID0gKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSk7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRjMCwgKnB0YzE7Ci0JdW5zaWduZWQgbG9uZyBpdGMsIGl0YzIsIGZsYWdzLCBkYXRhMCA9IDAsIGRhdGExID0gMDsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKKwl1bnNpZ25lZCBsb25nIGl0YywgaXRjMiwgZmxhZ3MsIGRhdGEwID0gMCwgZGF0YTEgPSAwLCBycl92YWx1ZTsKIAlzaG9ydCBuYXNpZHNbTUFYX05VTU5PREVTXSwgbml4OwogCW5vZGVtYXNrX3Qgbm9kZXNfZmx1c2hlZDsKIApAQCAtMjE2LDkgKzIxOCwxMiBAQAogCQlpKys7CiAJfQogCisJaWYgKGkgPT0gMCkKKwkJcmV0dXJuOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlpZiAobGlrZWx5KGkgPT0gMSAmJiBsY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkpIHsKKwlpZiAobGlrZWx5KGkgPT0gMSAmJiBsY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSAmJiBteW1tKSkgewogCQlkbyB7CiAJCQlpYTY0X3B0Y2woc3RhcnQsIG5iaXRzIDw8IDIpOwogCQkJc3RhcnQgKz0gKDFVTCA8PCBuYml0cyk7CkBAIC0yMjksNyArMjM0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAxKSB7CisJaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEgJiYgbXltbSkgewogCQlmbHVzaF90bGJfbW0obW0pOwogCQlfX2dldF9jcHVfdmFyKHB0Y3N0YXRzKS5jaGFuZ2VfcmlkKys7CiAJCXByZWVtcHRfZW5hYmxlKCk7CkBAIC0yNDEsMTEgKzI0NiwxMyBAQAogCWZvcl9lYWNoX25vZGVfbWFzayhjbm9kZSwgbm9kZXNfZmx1c2hlZCkKIAkJbmFzaWRzW25peCsrXSA9IGNub2RlaWRfdG9fbmFzaWQoY25vZGUpOwogCisJcnJfdmFsdWUgPSAobW0tPmNvbnRleHQgPDwgMykgfCBSRUdJT05fTlVNQkVSKHN0YXJ0KTsKKwogCXNodWIxID0gaXNfc2h1YjEoKTsKIAlpZiAoc2h1YjEpIHsKIAkJZGF0YTAgPSAoMVVMIDw8IFNIMV9QVENfMF9BX1NIRlQpIHwKIAkJICAgIAkobmJpdHMgPDwgU0gxX1BUQ18wX1BTX1NIRlQpIHwKLQkJICAgIAkoKGlhNjRfZ2V0X3JyKHN0YXJ0KSA+PiA4KSA8PCBTSDFfUFRDXzBfUklEX1NIRlQpIHwKKwkJCShycl92YWx1ZSA8PCBTSDFfUFRDXzBfUklEX1NIRlQpIHwKIAkJICAgIAkoMVVMIDw8IFNIMV9QVENfMF9TVEFSVF9TSEZUKTsKIAkJcHRjMCA9IChsb25nICopR0xPQkFMX01NUl9QSFlTX0FERFIoMCwgU0gxX1BUQ18wKTsKIAkJcHRjMSA9IChsb25nICopR0xPQkFMX01NUl9QSFlTX0FERFIoMCwgU0gxX1BUQ18xKTsKQEAgLTI1NCw3ICsyNjEsNyBAQAogCQkJKG5iaXRzIDw8IFNIMl9QVENfUFNfU0hGVCkgfAogCQkgICAgCSgxVUwgPDwgU0gyX1BUQ19TVEFSVF9TSEZUKTsKIAkJcHRjMCA9IChsb25nICopR0xPQkFMX01NUl9QSFlTX0FERFIoMCwgU0gyX1BUQyArIAotCQkJKChpYTY0X2dldF9ycihzdGFydCkgPj4gOCkgPDwgU0gyX1BUQ19SSURfU0hGVCkgKTsKKwkJCShycl92YWx1ZSA8PCBTSDJfUFRDX1JJRF9TSEZUKSk7CiAJCXB0YzEgPSBOVUxMOwogCX0KIAkKQEAgLTI3NSw3ICsyODIsNyBAQAogCQkJZGF0YTAgPSAoZGF0YTAgJiB+U0gyX1BUQ19BRERSX01BU0spIHwgKHN0YXJ0ICYgU0gyX1BUQ19BRERSX01BU0spOwogCQlmb3IgKGkgPSAwOyBpIDwgbml4OyBpKyspIHsKIAkJCW5hc2lkID0gbmFzaWRzW2ldOwotCQkJaWYgKCghKHNuMl9wdGN0ZXN0ICYgMykpICYmIHVubGlrZWx5KG5hc2lkID09IG15bmFzaWQpKSB7CisJCQlpZiAoKCEoc24yX3B0Y3Rlc3QgJiAzKSkgJiYgdW5saWtlbHkobmFzaWQgPT0gbXluYXNpZCAmJiBteW1tKSkgewogCQkJCWlhNjRfcHRjZ2Eoc3RhcnQsIG5iaXRzIDw8IDIpOwogCQkJCWlhNjRfc3Jsel9pKCk7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCAwNTEzYWFjLi42YzZmYmNhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtNDc2LDggKzQ3Niw4IEBACiAJCQkJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7CiAJCQkJCXNlcV9wcmludGYocywgaiA/ICI6JWQiIDogIiwgZGlzdCAlZCIsCiAJCQkJCQlub2RlX2Rpc3RhbmNlKAotCQkJCQkJICAgIGNwdWlkX3RvX2Nub2RlaWQoaSksCi0JCQkJCQkgICAgY3B1aWRfdG9fY25vZGVpZChqKSkpOworCQkJCQkJICAgIGNwdV90b19ub2RlKGkpLAorCQkJCQkJICAgIGNwdV90b19ub2RlKGopKSk7CiAJCQkJfQogCQkJCXNlcV9wdXRjKHMsICdcbicpOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC90aW9jeC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC90aW9jeC5jCmluZGV4IGI0NWRiNTEuLjBkODU5MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvdGlvY3guYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMKQEAgLTE4MywxMSArMTgzLDEyIEBACiAgKiBAcGFydF9udW06IGRldmljZSdzIHBhcnQgbnVtYmVyCiAgKiBAbWZnX251bTogZGV2aWNlJ3MgbWFudWZhY3R1cmVyIG51bWJlcgogICogQGh1YmRldjogaHViIGluZm8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlCisgKiBAYnQ6IGJvYXJkIHR5cGUgb2YgdGhlIGRldmljZQogICoKICAqLwogaW50CiBjeF9kZXZpY2VfcmVnaXN0ZXIobmFzaWRfdCBuYXNpZCwgaW50IHBhcnRfbnVtLCBpbnQgbWZnX251bSwKLQkJICAgc3RydWN0IGh1YmRldl9pbmZvICpodWJkZXYpCisJCSAgIHN0cnVjdCBodWJkZXZfaW5mbyAqaHViZGV2LCBpbnQgYnQpCiB7CiAJc3RydWN0IGN4X2RldiAqY3hfZGV2OwogCkBAIC0yMDAsNiArMjAxLDcgQEAKIAljeF9kZXYtPmN4X2lkLm1mZ19udW0gPSBtZmdfbnVtOwogCWN4X2Rldi0+Y3hfaWQubmFzaWQgPSBuYXNpZDsKIAljeF9kZXYtPmh1YmRldiA9IGh1YmRldjsKKwljeF9kZXYtPmJ0ID0gYnQ7CiAKIAljeF9kZXYtPmRldi5wYXJlbnQgPSBOVUxMOwogCWN4X2Rldi0+ZGV2LmJ1cyA9ICZ0aW9jeF9idXNfdHlwZTsKQEAgLTIzOCw3ICsyNDAsOCBAQAogewogCWN4X2RldmljZV91bnJlZ2lzdGVyKGN4X2Rldik7CiAJcmV0dXJuIGN4X2RldmljZV9yZWdpc3RlcihjeF9kZXYtPmN4X2lkLm5hc2lkLCBjeF9kZXYtPmN4X2lkLnBhcnRfbnVtLAotCQkJCSAgY3hfZGV2LT5jeF9pZC5tZmdfbnVtLCBjeF9kZXYtPmh1YmRldik7CisJCQkJICBjeF9kZXYtPmN4X2lkLm1mZ19udW0sIGN4X2Rldi0+aHViZGV2LAorCQkJCSAgY3hfZGV2LT5idCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgdGlvY3hfaW50cl9hbGxvYyhuYXNpZF90IG5hc2lkLCBpbnQgd2lkZ2V0LApAQCAtMzY1LDI2ICszNjgsMjAgQEAKIAl1ZGVsYXkoMjAwMCk7CiB9CiAKLXN0YXRpYyBpbnQgdGlvY3hfYnRjaGFyX2dldChpbnQgbmFzaWQpCitzdGF0aWMgaW50IGlzX2ZwZ2FfdGlvKGludCBuYXNpZCwgaW50ICpidCkKIHsKLQltb2R1bGVpZF90IG1vZHVsZV9pZDsKLQlnZW9pZF90IGdlb2lkOwotCWludCBjbm9kZWlkOworCWludCBpb2JvYXJkX3R5cGU7CiAKLQljbm9kZWlkID0gbmFzaWRfdG9fY25vZGVpZChuYXNpZCk7Ci0JZ2VvaWQgPSBjbm9kZWlkX2dldF9nZW9pZChjbm9kZWlkKTsKLQltb2R1bGVfaWQgPSBnZW9fbW9kdWxlKGdlb2lkKTsKLQlyZXR1cm4gTU9EVUxFX0dFVF9CVENIQVIobW9kdWxlX2lkKTsKLX0KKwlpb2JvYXJkX3R5cGUgPSBpYTY0X3NuX3N5c2N0bF9pb2JvYXJkX2dldChuYXNpZCk7CiAKLXN0YXRpYyBpbnQgaXNfZnBnYV9icmljayhpbnQgbmFzaWQpCi17Ci0Jc3dpdGNoICh0aW9jeF9idGNoYXJfZ2V0KG5hc2lkKSkgeworCXN3aXRjaCAoaW9ib2FyZF90eXBlKSB7CiAJY2FzZSBMMV9CUklDS1RZUEVfU0E6CiAJY2FzZSBMMV9CUklDS1RZUEVfQVRIRU5BOgotCWNhc2UgTDFfQlJJQ0tUWVBFX0RBWVRPTkE6CisJY2FzZSBMMV9CT0FSRFRZUEVfREFZVE9OQToKKwkJKmJ0ID0gaW9ib2FyZF90eXBlOwogCQlyZXR1cm4gMTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA3LDE2ICs0MDQsMjIgQEAKIAogCWlmIChiaXRzdHJlYW1fbG9hZGVkKG5hc2lkKSkgewogCQl1aW50NjRfdCBjeF9pZDsKKwkJaW50IHJ2OwogCi0JCWN4X2lkID0KLQkJICAgICoodm9sYXRpbGUgdWludDY0X3QgKikoVElPX1NXSU5fQkFTRShuYXNpZCwgVElPQ1hfQ09SRUxFVCkgKworCQlydiA9IGlhNjRfc25fc3lzY3RsX3Rpb19jbG9ja19yZXNldChuYXNpZCk7CisJCWlmIChydikgeworCQkJcHJpbnRrKEtFUk5fQUxFUlQgIkNYIHBvcnQgSlRBRyByZXNldCBmYWlsZWQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWN4X2lkID0gKih2b2xhdGlsZSB1aW50NjRfdCAqKQorCQkJCShUSU9fU1dJTl9CQVNFKG5hc2lkLCBUSU9DWF9DT1JFTEVUKSArCiAJCQkJCSAgV0lER0VUX0lEKTsKLQkJcGFydF9udW0gPSBYV0lER0VUX1BBUlRfTlVNKGN4X2lkKTsKLQkJbWZnX251bSA9IFhXSURHRVRfTUZHX05VTShjeF9pZCk7Ci0JCURCRygicGFydD0gMHgleCwgbWZnPSAweCV4XG4iLCBwYXJ0X251bSwgbWZnX251bSk7Ci0JCS8qIGp1c3QgaWdub3JlIGl0IGlmIGl0J3MgYSBDRSAqLwotCQlpZiAocGFydF9udW0gPT0gVElPX0NFX0FTSUNfUEFSVE5VTSkKLQkJCXJldHVybiAwOworCQkJcGFydF9udW0gPSBYV0lER0VUX1BBUlRfTlVNKGN4X2lkKTsKKwkJCW1mZ19udW0gPSBYV0lER0VUX01GR19OVU0oY3hfaWQpOworCQkJREJHKCJwYXJ0PSAweCV4LCBtZmc9IDB4JXhcbiIsIHBhcnRfbnVtLCBtZmdfbnVtKTsKKwkJCS8qIGp1c3QgaWdub3JlIGl0IGlmIGl0J3MgYSBDRSAqLworCQkJaWYgKHBhcnRfbnVtID09IFRJT19DRV9BU0lDX1BBUlROVU0pCisJCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAljeF9kZXYtPmN4X2lkLnBhcnRfbnVtID0gcGFydF9udW07CkBAIC00MzYsMTAgKzQzOSwxMCBAQAogewogCXN0cnVjdCBjeF9kZXYgKmN4X2RldiA9IHRvX2N4X2RldihkZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleCAweCV4IDB4JXggJWRcbiIsCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleCAweCV4IDB4JXggMHgleFxuIiwKIAkJICAgICAgIGN4X2Rldi0+Y3hfaWQubmFzaWQsCiAJCSAgICAgICBjeF9kZXYtPmN4X2lkLnBhcnRfbnVtLCBjeF9kZXYtPmN4X2lkLm1mZ19udW0sCi0JCSAgICAgICB0aW9jeF9idGNoYXJfZ2V0KGN4X2Rldi0+Y3hfaWQubmFzaWQpKTsKKwkJICAgICAgIGN4X2Rldi0+YnQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9jeGRldl9jb250cm9sKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKQEAgLTQ4NiwxMyArNDg5LDEzIEBACiAKIAlidXNfcmVnaXN0ZXIoJnRpb2N4X2J1c190eXBlKTsKIAotCWZvciAoY25vZGVpZCA9IDA7IGNub2RlaWQgPCBNQVhfQ09NUEFDVF9OT0RFUzsgY25vZGVpZCsrKSB7CisJZm9yIChjbm9kZWlkID0gMDsgY25vZGVpZCA8IG51bV9jbm9kZXM7IGNub2RlaWQrKykgewogCQluYXNpZF90IG5hc2lkOworCQlpbnQgYnQ7CiAKLQkJaWYgKChuYXNpZCA9IGNub2RlaWRfdG9fbmFzaWQoY25vZGVpZCkpIDwgMCkKLQkJCWJyZWFrOwkvKiBObyBtb3JlIG5hc2lkcyAuLiBiYWlsIG91dCBvZiBsb29wICovCisJCW5hc2lkID0gY25vZGVpZF90b19uYXNpZChjbm9kZWlkKTsKIAotCQlpZiAoKG5hc2lkICYgMHgxKSAmJiBpc19mcGdhX2JyaWNrKG5hc2lkKSkgeworCQlpZiAoKG5hc2lkICYgMHgxKSAmJiBpc19mcGdhX3RpbyhuYXNpZCwgJmJ0KSkgewogCQkJc3RydWN0IGh1YmRldl9pbmZvICpodWJkZXY7CiAJCQlzdHJ1Y3QgeHdpZGdldF9pbmZvICp3aWRnZXRwOwogCkBAIC01MTIsNyArNTE1LDcgQEAKIAogCQkJaWYgKGN4X2RldmljZV9yZWdpc3RlcgogCQkJICAgIChuYXNpZCwgd2lkZ2V0cC0+eHdpX2h3aWQucGFydF9udW0sCi0JCQkgICAgIHdpZGdldHAtPnh3aV9od2lkLm1mZ19udW0sIGh1YmRldikgPCAwKQorCQkJICAgICB3aWRnZXRwLT54d2lfaHdpZC5tZmdfbnVtLCBodWJkZXYsIGJ0KSA8IDApCiAJCQkJcmV0dXJuIC1FTlhJTzsKIAkJCWVsc2UKIAkJCQlmb3VuZF90aW9jeF9kZXZpY2UrKzsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmggYi9hcmNoL2lhNjQvc24va2VybmVsL3hwYy5oCmluZGV4IGU1ZjVhNGUuLmZiY2VkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmgKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGMuaApAQCAtNTcsNyArNTcsNyBAQAogI2RlZmluZSBYUENfTkFTSURfRlJPTV9XX0IoX3csIF9iKSAoKChfdykgKiA2NCArIChfYikpICogMikKIAogI2RlZmluZSBYUENfSEJfREVGQVVMVF9JTlRFUlZBTAkJNQkvKiBpbmNyIEhCIGV2ZXJ5IHggc2VjcyAqLwotI2RlZmluZSBYUENfSEJfQ0hFQ0tfREVGQVVMVF9USU1FT1VUCTIwCS8qIGNoZWNrIEhCIGV2ZXJ5IHggc2VjcyAqLworI2RlZmluZSBYUENfSEJfQ0hFQ0tfREVGQVVMVF9JTlRFUlZBTAkyMAkvKiBjaGVjayBIQiBldmVyeSB4IHNlY3MgKi8KIAogLyogZGVmaW5lIHRoZSBwcm9jZXNzIG5hbWUgb2YgSEIgY2hlY2tlciBhbmQgdGhlIENQVSBpdCBpcyBwaW5uZWQgdG8gKi8KICNkZWZpbmUgWFBDX0hCX0NIRUNLX1RIUkVBRF9OQU1FCSJ4cGNfaGIiCkBAIC02NywzNCArNjcsODIgQEAKICNkZWZpbmUgWFBDX0RJU0NPVkVSWV9USFJFQURfTkFNRQkieHBjX2Rpc2NvdmVyeSIKIAogCi0jZGVmaW5lIFhQQ19IQl9BTExPV0VEKF9wLCBfdikJKChfdiktPmhlYXJ0YmVhdGluZ190b19tYXNrICYgKDFVTCA8PCAoX3ApKSkKLSNkZWZpbmUgWFBDX0FMTE9XX0hCKF9wLCBfdikJKF92KS0+aGVhcnRiZWF0aW5nX3RvX21hc2sgfD0gKDFVTCA8PCAoX3ApKQotI2RlZmluZSBYUENfRElTQUxMT1dfSEIoX3AsIF92KQkoX3YpLT5oZWFydGJlYXRpbmdfdG9fbWFzayAmPSAofigxVUwgPDwgKF9wKSkpCi0KLQogLyoKLSAqIFJlc2VydmVkIFBhZ2UgcHJvdmlkZWQgYnkgU0FMLgorICogdGhlIHJlc2VydmVkIHBhZ2UKICAqCi0gKiBTQUwgcHJvdmlkZXMgb25lIHBhZ2UgcGVyIHBhcnRpdGlvbiBvZiByZXNlcnZlZCBtZW1vcnkuICBXaGVuIFNBTAotICogaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUsIFNBTF9zaWduYXR1cmUsIFNBTF92ZXJzaW9uLCBwYXJ0aWQsCi0gKiBwYXJ0X25hc2lkcywgYW5kIG1hY2hfbmFzaWRzIGFyZSBzZXQuCisgKiAgIFNBTCByZXNlcnZlcyBvbmUgcGFnZSBvZiBtZW1vcnkgcGVyIHBhcnRpdGlvbiBmb3IgWFBDLiBUaG91Z2ggYSBmdWxsIHBhZ2UKKyAqICAgaW4gbGVuZ3RoICgxNjM4NCBieXRlcyksIGl0cyBzdGFydGluZyBhZGRyZXNzIGlzIG5vdCBwYWdlIGFsaWduZWQsIGJ1dCBpdAorICogICBpcyBjYWNoZWxpbmUgYWxpZ25lZC4gVGhlIHJlc2VydmVkIHBhZ2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgIHJlc2VydmVkIHBhZ2UgaGVhZGVyCisgKgorICogICAgIFRoZSBmaXJzdCBjYWNoZWxpbmUgb2YgdGhlIHJlc2VydmVkIHBhZ2UgY29udGFpbnMgdGhlIGhlYWRlcgorICogICAgIChzdHJ1Y3QgeHBjX3JzdmRfcGFnZSkuIEJlZm9yZSBTQUwgaW5pdGlhbGl6YXRpb24gaGFzIGNvbXBsZXRlZCwKKyAqICAgICBTQUwgaGFzIHNldCB1cCB0aGUgZm9sbG93aW5nIGZpZWxkcyBvZiB0aGUgcmVzZXJ2ZWQgcGFnZSBoZWFkZXI6CisgKiAgICAgU0FMX3NpZ25hdHVyZSwgU0FMX3ZlcnNpb24sIHBhcnRpZCwgYW5kIG5hc2lkc19zaXplLiBUaGUgb3RoZXIKKyAqICAgICBmaWVsZHMgYXJlIHNldCB1cCBieSBYUEMuICh4cGNfcnN2ZF9wYWdlIHBvaW50cyB0byB0aGUgbG9jYWwKKyAqICAgICBwYXJ0aXRpb24ncyByZXNlcnZlZCBwYWdlLikKKyAqCisgKiAgIHBhcnRfbmFzaWRzIG1hc2sKKyAqICAgbWFjaF9uYXNpZHMgbWFzaworICoKKyAqICAgICBTQUwgYWxzbyBzZXRzIHVwIHR3byBiaXRtYXBzIChvciBtYXNrcyksIG9uZSB0aGF0IHJlZmxlY3RzIHRoZSBhY3R1YWwKKyAqICAgICBuYXNpZHMgaW4gdGhpcyBwYXJ0aXRpb24gKHBhcnRfbmFzaWRzKSwgYW5kIHRoZSBvdGhlciB0aGF0IHJlZmxlY3RzCisgKiAgICAgdGhlIGFjdHVhbCBuYXNpZHMgaW4gdGhlIGVudGlyZSBtYWNoaW5lIChtYWNoX25hc2lkcykuIFdlJ3JlIG9ubHkKKyAqICAgICBpbnRlcmVzdGVkIGluIHRoZSBldmVuIG51bWJlcmVkIG5hc2lkcyAod2hpY2ggY29udGFpbiB0aGUgcHJvY2Vzc29ycworICogICAgIGFuZC9vciBtZW1vcnkpLCBzbyB3ZSBvbmx5IG5lZWQgaGFsZiBhcyBtYW55IGJpdHMgdG8gcmVwcmVzZW50IHRoZQorICogICAgIG5hc2lkcy4gVGhlIHBhcnRfbmFzaWRzIG1hc2sgaXMgbG9jYXRlZCBzdGFydGluZyBhdCB0aGUgZmlyc3QgY2FjaGVsaW5lCisgKiAgICAgZm9sbG93aW5nIHRoZSByZXNlcnZlZCBwYWdlIGhlYWRlci4gVGhlIG1hY2hfbmFzaWRzIG1hc2sgZm9sbG93cyByaWdodAorICogICAgIGFmdGVyIHRoZSBwYXJ0X25hc2lkcyBtYXNrLiBUaGUgc2l6ZSBpbiBieXRlcyBvZiBlYWNoIG1hc2sgaXMgcmVmbGVjdGVkCisgKiAgICAgYnkgdGhlIHJlc2VydmVkIHBhZ2UgaGVhZGVyIGZpZWxkICduYXNpZHNfc2l6ZScuIChMb2NhbCBwYXJ0aXRpb24ncworICogICAgIG1hc2sgcG9pbnRlcnMgYXJlIHhwY19wYXJ0X25hc2lkcyBhbmQgeHBjX21hY2hfbmFzaWRzLikKKyAqCisgKiAgIHZhcnMKKyAqICAgdmFycyBwYXJ0CisgKgorICogICAgIEltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgbWFjaF9uYXNpZHMgbWFzayBhcmUgdGhlIFhQQyB2YXJpYWJsZXMKKyAqICAgICByZXF1aXJlZCBieSBvdGhlciBwYXJ0aXRpb25zLiBGaXJzdCBhcmUgdGhvc2UgdGhhdCBhcmUgZ2VuZXJpYyB0byBhbGwKKyAqICAgICBwYXJ0aXRpb25zICh2YXJzKSwgZm9sbG93ZWQgb24gdGhlIG5leHQgYXZhaWxhYmxlIGNhY2hlbGluZSBieSB0aG9zZQorICogICAgIHdoaWNoIGFyZSBwYXJ0aXRpb24gc3BlY2lmaWMgKHZhcnMgcGFydCkuIFRoZXNlIGFyZSBzZXR1cCBieSBYUEMuCisgKiAgICAgKExvY2FsIHBhcnRpdGlvbidzIHZhcnMgcG9pbnRlcnMgYXJlIHhwY192YXJzIGFuZCB4cGNfdmFyc19wYXJ0LikKICAqCiAgKiBOb3RlOiBVbnRpbCB2YXJzX3BhIGlzIHNldCwgdGhlIHBhcnRpdGlvbiBYUEMgY29kZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCiAgKi8KIHN0cnVjdCB4cGNfcnN2ZF9wYWdlIHsKLQl1NjQgU0FMX3NpZ25hdHVyZTsJLyogU0FMIHVuaXF1ZSBzaWduYXR1cmUgKi8KLQl1NjQgU0FMX3ZlcnNpb247CS8qIFNBTCBzcGVjaWZpZWQgdmVyc2lvbiAqLwotCXU4IHBhcnRpZDsJCS8qIHBhcnRpdGlvbiBJRCBmcm9tIFNBTCAqLworCXU2NCBTQUxfc2lnbmF0dXJlOwkvKiBTQUw6IHVuaXF1ZSBzaWduYXR1cmUgKi8KKwl1NjQgU0FMX3ZlcnNpb247CS8qIFNBTDogdmVyc2lvbiAqLworCXU4IHBhcnRpZDsJCS8qIFNBTDogcGFydGl0aW9uIElEICovCiAJdTggdmVyc2lvbjsKLQl1OCBwYWRbNl07CQkvKiBwYWQgdG8gdTY0IGFsaWduICovCisJdTggcGFkMVs2XTsJCS8qIGFsaWduIHRvIG5leHQgdTY0IGluIGNhY2hlbGluZSAqLwogCXZvbGF0aWxlIHU2NCB2YXJzX3BhOwotCXU2NCBwYXJ0X25hc2lkc1tYUF9OQVNJRF9NQVNLX1dPUkRTXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0JdTY0IG1hY2hfbmFzaWRzW1hQX05BU0lEX01BU0tfV09SRFNdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhbXA7CS8qIHRpbWUgd2hlbiByZXNlcnZlZCBwYWdlIHdhcyBzZXR1cCBieSBYUEMgKi8KKwl1NjQgcGFkMls5XTsJCS8qIGFsaWduIHRvIGxhc3QgdTY0IGluIGNhY2hlbGluZSAqLworCXU2NCBuYXNpZHNfc2l6ZTsJLyogU0FMOiBzaXplIG9mIGVhY2ggbmFzaWQgbWFzayBpbiBieXRlcyAqLwogfTsKLSNkZWZpbmUgWFBDX1JQX1ZFUlNJT04gX1hQQ19WRVJTSU9OKDEsMCkgLyogdmVyc2lvbiAxLjAgb2YgdGhlIHJlc2VydmVkIHBhZ2UgKi8KIAotI2RlZmluZSBYUENfUlNWRF9QQUdFX0FMSUdORURfU0laRSBcCi0JCQkoTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCB4cGNfcnN2ZF9wYWdlKSkpCisjZGVmaW5lIFhQQ19SUF9WRVJTSU9OIF9YUENfVkVSU0lPTigxLDEpIC8qIHZlcnNpb24gMS4xIG9mIHRoZSByZXNlcnZlZCBwYWdlICovCisKKyNkZWZpbmUgWFBDX1NVUFBPUlRTX1JQX1NUQU1QKF92ZXJzaW9uKSBcCisJCQkoX3ZlcnNpb24gPj0gX1hQQ19WRVJTSU9OKDEsMSkpCisKKy8qCisgKiBjb21wYXJlIHN0YW1wcyAtIHRoZSByZXR1cm4gdmFsdWUgaXM6CisgKgorICoJPCAwLAlpZiBzdGFtcDEgPCBzdGFtcDIKKyAqCT0gMCwJaWYgc3RhbXAxID09IHN0YW1wMgorICoJPiAwLAlpZiBzdGFtcDEgPiBzdGFtcDIKKyAqLworc3RhdGljIGlubGluZSBpbnQKK3hwY19jb21wYXJlX3N0YW1wcyhzdHJ1Y3QgdGltZXNwZWMgKnN0YW1wMSwgc3RydWN0IHRpbWVzcGVjICpzdGFtcDIpCit7CisJaW50IHJldDsKKworCisJaWYgKChyZXQgPSBzdGFtcDEtPnR2X3NlYyAtIHN0YW1wMi0+dHZfc2VjKSA9PSAwKSB7CisJCXJldCA9IHN0YW1wMS0+dHZfbnNlYyAtIHN0YW1wMi0+dHZfbnNlYzsKKwl9CisJcmV0dXJuIHJldDsKK30KIAogCiAvKgpAQCAtMTIxLDExICsxNjksNTggQEAKIAl1NjQgdmFyc19wYXJ0X3BhOwogCXU2NCBhbW9zX3BhZ2VfcGE7CS8qIHBhZGRyIG9mIHBhZ2Ugb2YgQU1PcyBmcm9tIE1TUEVDIGRyaXZlciAqLwogCUFNT190ICphbW9zX3BhZ2U7CS8qIHZhZGRyIG9mIHBhZ2Ugb2YgQU1PcyBmcm9tIE1TUEVDIGRyaXZlciAqLwotCUFNT190ICphY3RfYW1vczsJLyogcG9pbnRlciB0byB0aGUgZmlyc3QgYWN0aXZhdGlvbiBBTU8gKi8KIH07Ci0jZGVmaW5lIFhQQ19WX1ZFUlNJT04gX1hQQ19WRVJTSU9OKDMsMCkgLyogdmVyc2lvbiAzLjAgb2YgdGhlIGNyb3NzIHZhcnMgKi8KIAotI2RlZmluZSBYUENfVkFSU19BTElHTkVEX1NJWkUgIChMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IHhwY192YXJzKSkpCisjZGVmaW5lIFhQQ19WX1ZFUlNJT04gX1hQQ19WRVJTSU9OKDMsMSkgLyogdmVyc2lvbiAzLjEgb2YgdGhlIGNyb3NzIHZhcnMgKi8KKworI2RlZmluZSBYUENfU1VQUE9SVFNfRElTRU5HQUdFX1JFUVVFU1QoX3ZlcnNpb24pIFwKKwkJCShfdmVyc2lvbiA+PSBfWFBDX1ZFUlNJT04oMywxKSkKKworCitzdGF0aWMgaW5saW5lIGludAoreHBjX2hiX2FsbG93ZWQocGFydGlkX3QgcGFydGlkLCBzdHJ1Y3QgeHBjX3ZhcnMgKnZhcnMpCit7CisJcmV0dXJuICgodmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2sgJiAoMVVMIDw8IHBhcnRpZCkpICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19hbGxvd19oYihwYXJ0aWRfdCBwYXJ0aWQsIHN0cnVjdCB4cGNfdmFycyAqdmFycykKK3sKKwl1NjQgb2xkX21hc2ssIG5ld19tYXNrOworCisJZG8geworCQlvbGRfbWFzayA9IHZhcnMtPmhlYXJ0YmVhdGluZ190b19tYXNrOworCQluZXdfbWFzayA9IChvbGRfbWFzayB8ICgxVUwgPDwgcGFydGlkKSk7CisJfSB3aGlsZSAoY21weGNoZygmdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2ssIG9sZF9tYXNrLCBuZXdfbWFzaykgIT0KKwkJCQkJCQlvbGRfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX2Rpc2FsbG93X2hiKHBhcnRpZF90IHBhcnRpZCwgc3RydWN0IHhwY192YXJzICp2YXJzKQoreworCXU2NCBvbGRfbWFzaywgbmV3X21hc2s7CisKKwlkbyB7CisJCW9sZF9tYXNrID0gdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2s7CisJCW5ld19tYXNrID0gKG9sZF9tYXNrICYgfigxVUwgPDwgcGFydGlkKSk7CisJfSB3aGlsZSAoY21weGNoZygmdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2ssIG9sZF9tYXNrLCBuZXdfbWFzaykgIT0KKwkJCQkJCQlvbGRfbWFzayk7Cit9CisKKworLyoKKyAqIFRoZSBBTU9zIHBhZ2UgY29uc2lzdHMgb2YgYSBudW1iZXIgb2YgQU1PIHZhcmlhYmxlcyB3aGljaCBhcmUgZGl2aWRlZCBpbnRvCisgKiBmb3VyIGdyb3VwcywgVGhlIGZpcnN0IHR3byBncm91cHMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgYW4gSVJRJ3Mgc2VuZGVyLgorICogVGhlc2UgdHdvIGdyb3VwcyBjb25zaXN0IG9mIDY0IGFuZCAxMjggQU1PIHZhcmlhYmxlcyByZXNwZWN0aXZlbHkuIFRoZSBsYXN0CisgKiB0d28gZ3JvdXBzLCBjb25zaXN0aW5nIG9mIGp1c3Qgb25lIEFNTyB2YXJpYWJsZSBlYWNoLCBhcmUgdXNlZCB0byBpZGVudGlmeQorICogdGhlIHJlbW90ZSBwYXJ0aXRpb25zIHRoYXQgYXJlIGN1cnJlbnRseSBlbmdhZ2VkIChmcm9tIHRoZSB2aWV3cG9pbnQgb2YKKyAqIHRoZSBYUEMgcnVubmluZyBvbiB0aGUgcmVtb3RlIHBhcnRpdGlvbikuCisgKi8KKyNkZWZpbmUgWFBDX05PVElGWV9JUlFfQU1PUwkgICAwCisjZGVmaW5lIFhQQ19BQ1RJVkFURV9JUlFfQU1PUwkgICAoWFBDX05PVElGWV9JUlFfQU1PUyArIFhQX01BWF9QQVJUSVRJT05TKQorI2RlZmluZSBYUENfRU5HQUdFRF9QQVJUSVRJT05TX0FNTyAoWFBDX0FDVElWQVRFX0lSUV9BTU9TICsgWFBfTkFTSURfTUFTS19XT1JEUykKKyNkZWZpbmUgWFBDX0RJU0VOR0FHRV9SRVFVRVNUX0FNTyAgKFhQQ19FTkdBR0VEX1BBUlRJVElPTlNfQU1PICsgMSkKKwogCiAvKgogICogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwZXIgcGFydGl0aW9uIHNwZWNpZmljIHZhcmlhYmxlcy4KQEAgLTE2NSw2ICsyNjAsMTYgQEAKICNkZWZpbmUgWFBDX1ZQX01BR0lDMgkweDAwNzM3MjYxNzY0MzUwNThMICAvKiAnWFBDdmFyc1wwJ0wgKGxpdHRsZSBlbmRpYW4pICovCiAKIAorLyogdGhlIHJlc2VydmVkIHBhZ2Ugc2l6ZXMgYW5kIG9mZnNldHMgKi8KKworI2RlZmluZSBYUENfUlBfSEVBREVSX1NJWkUJTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCB4cGNfcnN2ZF9wYWdlKSkKKyNkZWZpbmUgWFBDX1JQX1ZBUlNfU0laRSAJTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCB4cGNfdmFycykpCisKKyNkZWZpbmUgWFBDX1JQX1BBUlRfTkFTSURTKF9ycCkgKHU2NCAqKSAoKHU4ICopIF9ycCArIFhQQ19SUF9IRUFERVJfU0laRSkKKyNkZWZpbmUgWFBDX1JQX01BQ0hfTkFTSURTKF9ycCkgKFhQQ19SUF9QQVJUX05BU0lEUyhfcnApICsgeHBfbmFzaWRfbWFza193b3JkcykKKyNkZWZpbmUgWFBDX1JQX1ZBUlMoX3JwKQkoKHN0cnVjdCB4cGNfdmFycyAqKSBYUENfUlBfTUFDSF9OQVNJRFMoX3JwKSArIHhwX25hc2lkX21hc2tfd29yZHMpCisjZGVmaW5lIFhQQ19SUF9WQVJTX1BBUlQoX3JwKQkoc3RydWN0IHhwY192YXJzX3BhcnQgKikgKCh1OCAqKSBYUENfUlBfVkFSUyhycCkgKyBYUENfUlBfVkFSU19TSVpFKQorCiAKIC8qCiAgKiBGdW5jdGlvbnMgcmVnaXN0ZXJlZCBieSBhZGRfdGltZXIoKSBvciBjYWxsZWQgYnkga2VybmVsX3RocmVhZCgpIG9ubHkKQEAgLTM0OSw2ICs0NTQsOSBAQAogCWF0b21pY190IG5fb25fbXNnX2FsbG9jYXRlX3dxOyAgIC8qICNvbiBtc2cgYWxsb2NhdGlvbiB3YWl0IHF1ZXVlICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgbXNnX2FsbG9jYXRlX3dxOyAvKiBtc2cgYWxsb2NhdGlvbiB3YWl0IHF1ZXVlICovCiAKKwl1OCBkZWxheWVkX0lQSV9mbGFnczsJCS8qIElQSSBmbGFncyByZWNlaXZlZCwgYnV0IGRlbGF5ZWQgKi8KKwkJCQkJLyogYWN0aW9uIHVudGlsIGNoYW5uZWwgZGlzY29ubmVjdGVkICovCisKIAkvKiBxdWV1ZSBvZiBtc2cgc2VuZGVycyB3aG8gd2FudCB0byBiZSBub3RpZmllZCB3aGVuIG1zZyByZWNlaXZlZCAqLwogCiAJYXRvbWljX3Qgbl90b19ub3RpZnk7CQkvKiAjb2YgbXNnIHNlbmRlcnMgdG8gbm90aWZ5ICovCkBAIC0zNTgsNyArNDY2LDcgQEAKIAl2b2lkICprZXk7CQkJLyogcG9pbnRlciB0byB1c2VyJ3Mga2V5ICovCiAKIAlzdHJ1Y3Qgc2VtYXBob3JlIG1zZ190b19wdWxsX3NlbWE7IC8qIG5leHQgbXNnIHRvIHB1bGwgc2VyaWFsaXphdGlvbiAqLwotCXN0cnVjdCBzZW1hcGhvcmUgdGVhcmRvd25fc2VtYTsgICAgLyogd2FpdCBmb3IgdGVhcmRvd24gY29tcGxldGlvbiAqLworCXN0cnVjdCBzZW1hcGhvcmUgd2Rpc2Nvbm5lY3Rfc2VtYTsgLyogd2FpdCBmb3IgY2hhbm5lbCBkaXNjb25uZWN0ICovCiAKIAlzdHJ1Y3QgeHBjX29wZW5jbG9zZV9hcmdzICpsb2NhbF9vcGVuY2xvc2VfYXJnczsgLyogYXJncyBwYXNzZWQgb24gKi8KIAkJCQkJLyogb3BlbmluZyBvciBjbG9zaW5nIG9mIGNoYW5uZWwgKi8KQEAgLTQxMCw2ICs1MTgsOCBAQAogCiAjZGVmaW5lCVhQQ19DX0RJU0NPTk5FQ1RFRAkweDAwMDAyMDAwIC8qIGNoYW5uZWwgaXMgZGlzY29ubmVjdGVkICovCiAjZGVmaW5lCVhQQ19DX0RJU0NPTk5FQ1RJTkcJMHgwMDAwNDAwMCAvKiBjaGFubmVsIGlzIGJlaW5nIGRpc2Nvbm5lY3RlZCAqLworI2RlZmluZQlYUENfQ19ESVNDT05ORUNUQ0FMTE9VVAkweDAwMDA4MDAwIC8qIGNoYW4gZGlzY29ubmVjdGVkIGNhbGxvdXQgbWFkZSAqLworI2RlZmluZQlYUENfQ19XRElTQ09OTkVDVAkweDAwMDEwMDAwIC8qIHdhaXRpbmcgZm9yIGNoYW5uZWwgZGlzY29ubmVjdCAqLwogCiAKIApAQCAtNDIyLDYgKzUzMiw4IEBACiAKIAkvKiBYUEMgSEIgaW5mcmFzdHJ1Y3R1cmUgKi8KIAorCXU4IHJlbW90ZV9ycF92ZXJzaW9uOwkJLyogdmVyc2lvbiMgb2YgcGFydGl0aW9uJ3MgcnN2ZCBwZyAqLworCXN0cnVjdCB0aW1lc3BlYyByZW1vdGVfcnBfc3RhbXA7LyogdGltZSB3aGVuIHJzdmQgcGcgd2FzIGluaXRpYWxpemVkICovCiAJdTY0IHJlbW90ZV9ycF9wYTsJCS8qIHBoeXMgYWRkciBvZiBwYXJ0aXRpb24ncyByc3ZkIHBnICovCiAJdTY0IHJlbW90ZV92YXJzX3BhOwkJLyogcGh5cyBhZGRyIG9mIHBhcnRpdGlvbidzIHZhcnMgKi8KIAl1NjQgcmVtb3RlX3ZhcnNfcGFydF9wYTsJLyogcGh5cyBhZGRyIG9mIHBhcnRpdGlvbidzIHZhcnMgcGFydCAqLwpAQCAtNDMyLDE0ICs1NDQsMTggQEAKIAl1MzIgYWN0X0lSUV9yY3ZkOwkJLyogSVJRcyBzaW5jZSBhY3RpdmF0aW9uICovCiAJc3BpbmxvY2tfdCBhY3RfbG9jazsJCS8qIHByb3RlY3QgdXBkYXRpbmcgb2YgYWN0X3N0YXRlICovCiAJdTggYWN0X3N0YXRlOwkJCS8qIGZyb20gWFBDIEhCIHZpZXdwb2ludCAqLworCXU4IHJlbW90ZV92YXJzX3ZlcnNpb247CQkvKiB2ZXJzaW9uIyBvZiBwYXJ0aXRpb24ncyB2YXJzICovCiAJZW51bSB4cGNfcmV0dmFsIHJlYXNvbjsJCS8qIHJlYXNvbiBwYXJ0aXRpb24gaXMgZGVhY3RpdmF0aW5nICovCiAJaW50IHJlYXNvbl9saW5lOwkJLyogbGluZSMgZGVhY3RpdmF0aW9uIGluaXRpYXRlZCBmcm9tICovCiAJaW50IHJlYWN0aXZhdGVfbmFzaWQ7CQkvKiBuYXNpZCBpbiBwYXJ0aXRpb24gdG8gcmVhY3RpdmF0ZSAqLwogCisJdW5zaWduZWQgbG9uZyBkaXNlbmdhZ2VfcmVxdWVzdF90aW1lb3V0OyAvKiB0aW1lb3V0IGluIGppZmZpZXMgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBkaXNlbmdhZ2VfcmVxdWVzdF90aW1lcjsKKwogCiAJLyogWFBDIGluZnJhc3RydWN0dXJlIHJlZmVyZW5jaW5nIGFuZCB0ZWFyZG93biBjb250cm9sICovCiAKLQl2b2xhdGlsZSB1OCBzZXR1cF9zdGF0ZTsJCQkvKiBpbmZyYXN0cnVjdHVyZSBzZXR1cCBzdGF0ZSAqLworCXZvbGF0aWxlIHU4IHNldHVwX3N0YXRlOwkvKiBpbmZyYXN0cnVjdHVyZSBzZXR1cCBzdGF0ZSAqLwogCXdhaXRfcXVldWVfaGVhZF90IHRlYXJkb3duX3dxOwkvKiBrdGhyZWFkIHdhaXRpbmcgdG8gdGVhcmRvd24gaW5mcmEgKi8KIAlhdG9taWNfdCByZWZlcmVuY2VzOwkJLyogI29mIHJlZmVyZW5jZXMgdG8gaW5mcmFzdHJ1Y3R1cmUgKi8KIApAQCAtNDU0LDYgKzU3MCw3IEBACiAKIAl1OCBuY2hhbm5lbHM7CQkgICAvKiAjb2YgZGVmaW5lZCBjaGFubmVscyBzdXBwb3J0ZWQgKi8KIAlhdG9taWNfdCBuY2hhbm5lbHNfYWN0aXZlOyAvKiAjb2YgY2hhbm5lbHMgdGhhdCBhcmUgbm90IERJU0NPTk5FQ1RFRCAqLworCWF0b21pY190IG5jaGFubmVsc19lbmdhZ2VkOy8qICNvZiBjaGFubmVscyBlbmdhZ2VkIHdpdGggcmVtb3RlIHBhcnQgKi8KIAlzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoYW5uZWxzOy8qIGFycmF5IG9mIGNoYW5uZWwgc3RydWN0dXJlcyAqLwogCiAJdm9pZCAqbG9jYWxfR1BzX2Jhc2U7CSAgLyogYmFzZSBhZGRyZXNzIG9mIGttYWxsb2MnZCBzcGFjZSAqLwpAQCAtNTE4LDYgKzYzNSw3IEBACiAjZGVmaW5lIFhQQ19QX1RPUk5ET1dOCQkweDAzCS8qIGluZnJhc3RydWN0dXJlIGlzIHRvcm5kb3duICovCiAKIAorCiAvKgogICogc3RydWN0IHhwY19wYXJ0aXRpb24gSVBJX3RpbWVyICNvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGNoZWNraW5nIGZvcgogICogZHJvcHBlZCBJUElzLiBUaGVzZSBvY2N1ciB3aGVuZXZlciBhbiBJUEkgYW1vIHdyaXRlIGRvZXNuJ3QgY29tcGxldGUgdW50aWwKQEAgLTUyNiw2ICs2NDQsMTMgQEAKICNkZWZpbmUgWFBDX1BfRFJPUFBFRF9JUElfV0FJVAkoMC4yNSAqIEhaKQogCiAKKy8qIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIG90aGVyIHBhcnRpdGlvbnMgdG8gZGlzZW5nYWdlICovCisjZGVmaW5lIFhQQ19ESVNFTkdBR0VfUkVRVUVTVF9ERUZBVUxUX1RJTUVMSU1JVAk5MAorCisvKiBpbnRlcnZhbCBpbiBzZWNvbmRzIHRvIHByaW50ICd3YWl0aW5nIGRpc2VuZ2FnZW1lbnQnIG1lc3NhZ2VzICovCisjZGVmaW5lIFhQQ19ESVNFTkdBR0VfUFJJTlRNU0dfSU5URVJWQUwJCTEwCisKKwogI2RlZmluZSBYUENfUEFSVElEKF9wKQkoKHBhcnRpZF90KSAoKF9wKSAtICZ4cGNfcGFydGl0aW9uc1swXSkpCiAKIApAQCAtNTM0LDI0ICs2NTksMjAgQEAKIGV4dGVybiBzdHJ1Y3QgeHBjX3JlZ2lzdHJhdGlvbiB4cGNfcmVnaXN0cmF0aW9uc1tdOwogCiAKLS8qID4+PiBmb3VuZCBpbiB4cGNfbWFpbi5jIG9ubHkgKi8KKy8qIGZvdW5kIGluIHhwY19tYWluLmMgKi8KIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICp4cGNfcGFydDsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICp4cGNfY2hhbjsKK2V4dGVybiBpbnQgeHBjX2Rpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVsaW1pdDsKIGV4dGVybiBpcnFyZXR1cm5fdCB4cGNfbm90aWZ5X0lSUV9oYW5kbGVyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHhwY19kcm9wcGVkX0lQSV9jaGVjayhzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqKTsKK2V4dGVybiB2b2lkIHhwY19hY3RpdmF0ZV9wYXJ0aXRpb24oc3RydWN0IHhwY19wYXJ0aXRpb24gKik7CiBleHRlcm4gdm9pZCB4cGNfYWN0aXZhdGVfa3RocmVhZHMoc3RydWN0IHhwY19jaGFubmVsICosIGludCk7CiBleHRlcm4gdm9pZCB4cGNfY3JlYXRlX2t0aHJlYWRzKHN0cnVjdCB4cGNfY2hhbm5lbCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgeHBjX2Rpc2Nvbm5lY3Rfd2FpdChpbnQpOwogCiAKLS8qIGZvdW5kIGluIHhwY19tYWluLmMgYW5kIGVmaS14cGMuYyAqLwotZXh0ZXJuIHZvaWQgeHBjX2FjdGl2YXRlX3BhcnRpdGlvbihzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqKTsKLQotCiAvKiBmb3VuZCBpbiB4cGNfcGFydGl0aW9uLmMgKi8KIGV4dGVybiBpbnQgeHBjX2V4aXRpbmc7Ci1leHRlcm4gaW50IHhwY19oYl9pbnRlcnZhbDsKLWV4dGVybiBpbnQgeHBjX2hiX2NoZWNrX2ludGVydmFsOwogZXh0ZXJuIHN0cnVjdCB4cGNfdmFycyAqeHBjX3ZhcnM7CiBleHRlcm4gc3RydWN0IHhwY19yc3ZkX3BhZ2UgKnhwY19yc3ZkX3BhZ2U7CiBleHRlcm4gc3RydWN0IHhwY192YXJzX3BhcnQgKnhwY192YXJzX3BhcnQ7CkBAIC01NjEsNiArNjgyLDcgQEAKIGV4dGVybiB2b2lkIHhwY19hbGxvd19JUElfb3BzKHZvaWQpOwogZXh0ZXJuIHZvaWQgeHBjX3Jlc3RyaWN0X0lQSV9vcHModm9pZCk7CiBleHRlcm4gaW50IHhwY19pZGVudGlmeV9hY3RfSVJRX3NlbmRlcih2b2lkKTsKK2V4dGVybiBpbnQgeHBjX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHN0cnVjdCB4cGNfcGFydGl0aW9uICopOwogZXh0ZXJuIGVudW0geHBjX3JldHZhbCB4cGNfbWFya19wYXJ0aXRpb25fYWN0aXZlKHN0cnVjdCB4cGNfcGFydGl0aW9uICopOwogZXh0ZXJuIHZvaWQgeHBjX21hcmtfcGFydGl0aW9uX2luYWN0aXZlKHN0cnVjdCB4cGNfcGFydGl0aW9uICopOwogZXh0ZXJuIHZvaWQgeHBjX2Rpc2NvdmVyeSh2b2lkKTsKQEAgLTU4NSw4ICs3MDcsOCBAQAogZXh0ZXJuIHZvaWQgeHBjX2RlbGl2ZXJfbXNnKHN0cnVjdCB4cGNfY2hhbm5lbCAqKTsKIGV4dGVybiB2b2lkIHhwY19kaXNjb25uZWN0X2NoYW5uZWwoY29uc3QgaW50LCBzdHJ1Y3QgeHBjX2NoYW5uZWwgKiwKIAkJCQkJZW51bSB4cGNfcmV0dmFsLCB1bnNpZ25lZCBsb25nICopOwotZXh0ZXJuIHZvaWQgeHBjX2Rpc2Nvbm5lY3RlZF9jYWxsb3V0KHN0cnVjdCB4cGNfY2hhbm5lbCAqKTsKLWV4dGVybiB2b2lkIHhwY19wYXJ0aXRpb25fZG93bihzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqLCBlbnVtIHhwY19yZXR2YWwpOworZXh0ZXJuIHZvaWQgeHBjX2Rpc2Nvbm5lY3RpbmdfY2FsbG91dChzdHJ1Y3QgeHBjX2NoYW5uZWwgKik7CitleHRlcm4gdm9pZCB4cGNfcGFydGl0aW9uX2dvaW5nX2Rvd24oc3RydWN0IHhwY19wYXJ0aXRpb24gKiwgZW51bSB4cGNfcmV0dmFsKTsKIGV4dGVybiB2b2lkIHhwY190ZWFyZG93bl9pbmZyYXN0cnVjdHVyZShzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqKTsKIAogCkBAIC02NzQsNiArNzk2LDE1NyBAQAogCiAKIC8qCisgKiBUaGlzIG5leHQgc2V0IG9mIGlubGluZXMgYXJlIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGVuIGEgcGFydGl0aW9uIGlzCisgKiBwb3RlbnRpYWxseSBlbmdhZ2VkIGluIGFjY2Vzc2luZyBtZW1vcnkgYmVsb25naW5nIHRvIGFub3RoZXIgcGFydGl0aW9uLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX21hcmtfcGFydGl0aW9uX2VuZ2FnZWQoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJQU1PX3QgKmFtbyA9IChBTU9fdCAqKSBfX3ZhKHBhcnQtPnJlbW90ZV9hbW9zX3BhZ2VfcGEgKworCQkJCShYUENfRU5HQUdFRF9QQVJUSVRJT05TX0FNTyAqIHNpemVvZihBTU9fdCkpKTsKKworCisJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKKworCS8qIHNldCBiaXQgY29ycmVzcG9uZGluZyB0byBvdXIgcGFydGlkIGluIHJlbW90ZSBwYXJ0aXRpb24ncyBBTU8gKi8KKwlGRVRDSE9QX1NUT1JFX09QKFRPX0FNTygodTY0KSAmYW1vLT52YXJpYWJsZSksIEZFVENIT1BfT1IsCisJCQkJCQkoMVVMIDw8IHNuX3BhcnRpdGlvbl9pZCkpOworCS8qCisJICogV2UgbXVzdCBhbHdheXMgdXNlIHRoZSBub2ZhdWx0IGZ1bmN0aW9uIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZQorCSAqIGFyZSBvbiBhIFNodWIgMS4xIHN5c3RlbSBvciBhIFNodWIgMS4yIHNsaWNlIDB4YyBwcm9jZXNzb3IuIElmIHdlCisJICogZGlkbid0LCB3ZSdkIG5ldmVyIGtub3cgdGhhdCB0aGUgb3RoZXIgcGFydGl0aW9uIGlzIGRvd24gYW5kIHdvdWxkCisJICoga2VlcCBzZW5kaW5nIElQSXMgYW5kIEFNT3MgdG8gaXQgdW50aWwgdGhlIGhlYXJ0YmVhdCB0aW1lcyBvdXQuCisJICovCisJKHZvaWQpIHhwX25vZmF1bHRfUElPUigodTY0ICopIEdMT0JBTF9NTVJfQUREUihOQVNJRF9HRVQoJmFtby0+CisJCQkJdmFyaWFibGUpLCB4cF9ub2ZhdWx0X1BJT1JfdGFyZ2V0KSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19tYXJrX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCUFNT190ICphbW8gPSAoQU1PX3QgKikgX192YShwYXJ0LT5yZW1vdGVfYW1vc19wYWdlX3BhICsKKwkJCQkoWFBDX0VOR0FHRURfUEFSVElUSU9OU19BTU8gKiBzaXplb2YoQU1PX3QpKSk7CisKKworCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisKKwkvKiBjbGVhciBiaXQgY29ycmVzcG9uZGluZyB0byBvdXIgcGFydGlkIGluIHJlbW90ZSBwYXJ0aXRpb24ncyBBTU8gKi8KKwlGRVRDSE9QX1NUT1JFX09QKFRPX0FNTygodTY0KSAmYW1vLT52YXJpYWJsZSksIEZFVENIT1BfQU5ELAorCQkJCQkJfigxVUwgPDwgc25fcGFydGl0aW9uX2lkKSk7CisJLyoKKwkgKiBXZSBtdXN0IGFsd2F5cyB1c2UgdGhlIG5vZmF1bHQgZnVuY3Rpb24gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlCisJICogYXJlIG9uIGEgU2h1YiAxLjEgc3lzdGVtIG9yIGEgU2h1YiAxLjIgc2xpY2UgMHhjIHByb2Nlc3Nvci4gSWYgd2UKKwkgKiBkaWRuJ3QsIHdlJ2QgbmV2ZXIga25vdyB0aGF0IHRoZSBvdGhlciBwYXJ0aXRpb24gaXMgZG93biBhbmQgd291bGQKKwkgKiBrZWVwIHNlbmRpbmcgSVBJcyBhbmQgQU1PcyB0byBpdCB1bnRpbCB0aGUgaGVhcnRiZWF0IHRpbWVzIG91dC4KKwkgKi8KKwkodm9pZCkgeHBfbm9mYXVsdF9QSU9SKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKE5BU0lEX0dFVCgmYW1vLT4KKwkJCQl2YXJpYWJsZSksIHhwX25vZmF1bHRfUElPUl90YXJnZXQpKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX3JlcXVlc3RfcGFydGl0aW9uX2Rpc2VuZ2FnZShzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlBTU9fdCAqYW1vID0gKEFNT190ICopIF9fdmEocGFydC0+cmVtb3RlX2Ftb3NfcGFnZV9wYSArCisJCQkJKFhQQ19ESVNFTkdBR0VfUkVRVUVTVF9BTU8gKiBzaXplb2YoQU1PX3QpKSk7CisKKworCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisKKwkvKiBzZXQgYml0IGNvcnJlc3BvbmRpbmcgdG8gb3VyIHBhcnRpZCBpbiByZW1vdGUgcGFydGl0aW9uJ3MgQU1PICovCisJRkVUQ0hPUF9TVE9SRV9PUChUT19BTU8oKHU2NCkgJmFtby0+dmFyaWFibGUpLCBGRVRDSE9QX09SLAorCQkJCQkJKDFVTCA8PCBzbl9wYXJ0aXRpb25faWQpKTsKKwkvKgorCSAqIFdlIG11c3QgYWx3YXlzIHVzZSB0aGUgbm9mYXVsdCBmdW5jdGlvbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UKKwkgKiBhcmUgb24gYSBTaHViIDEuMSBzeXN0ZW0gb3IgYSBTaHViIDEuMiBzbGljZSAweGMgcHJvY2Vzc29yLiBJZiB3ZQorCSAqIGRpZG4ndCwgd2UnZCBuZXZlciBrbm93IHRoYXQgdGhlIG90aGVyIHBhcnRpdGlvbiBpcyBkb3duIGFuZCB3b3VsZAorCSAqIGtlZXAgc2VuZGluZyBJUElzIGFuZCBBTU9zIHRvIGl0IHVudGlsIHRoZSBoZWFydGJlYXQgdGltZXMgb3V0LgorCSAqLworCSh2b2lkKSB4cF9ub2ZhdWx0X1BJT1IoKHU2NCAqKSBHTE9CQUxfTU1SX0FERFIoTkFTSURfR0VUKCZhbW8tPgorCQkJCXZhcmlhYmxlKSwgeHBfbm9mYXVsdF9QSU9SX3RhcmdldCkpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfY2FuY2VsX3BhcnRpdGlvbl9kaXNlbmdhZ2VfcmVxdWVzdChzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlBTU9fdCAqYW1vID0gKEFNT190ICopIF9fdmEocGFydC0+cmVtb3RlX2Ftb3NfcGFnZV9wYSArCisJCQkJKFhQQ19ESVNFTkdBR0VfUkVRVUVTVF9BTU8gKiBzaXplb2YoQU1PX3QpKSk7CisKKworCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisKKwkvKiBjbGVhciBiaXQgY29ycmVzcG9uZGluZyB0byBvdXIgcGFydGlkIGluIHJlbW90ZSBwYXJ0aXRpb24ncyBBTU8gKi8KKwlGRVRDSE9QX1NUT1JFX09QKFRPX0FNTygodTY0KSAmYW1vLT52YXJpYWJsZSksIEZFVENIT1BfQU5ELAorCQkJCQkJfigxVUwgPDwgc25fcGFydGl0aW9uX2lkKSk7CisJLyoKKwkgKiBXZSBtdXN0IGFsd2F5cyB1c2UgdGhlIG5vZmF1bHQgZnVuY3Rpb24gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlCisJICogYXJlIG9uIGEgU2h1YiAxLjEgc3lzdGVtIG9yIGEgU2h1YiAxLjIgc2xpY2UgMHhjIHByb2Nlc3Nvci4gSWYgd2UKKwkgKiBkaWRuJ3QsIHdlJ2QgbmV2ZXIga25vdyB0aGF0IHRoZSBvdGhlciBwYXJ0aXRpb24gaXMgZG93biBhbmQgd291bGQKKwkgKiBrZWVwIHNlbmRpbmcgSVBJcyBhbmQgQU1PcyB0byBpdCB1bnRpbCB0aGUgaGVhcnRiZWF0IHRpbWVzIG91dC4KKwkgKi8KKwkodm9pZCkgeHBfbm9mYXVsdF9QSU9SKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKE5BU0lEX0dFVCgmYW1vLT4KKwkJCQl2YXJpYWJsZSksIHhwX25vZmF1bHRfUElPUl90YXJnZXQpKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0Cit4cGNfcGFydGl0aW9uX2VuZ2FnZWQodTY0IHBhcnRpZF9tYXNrKQoreworCUFNT190ICphbW8gPSB4cGNfdmFycy0+YW1vc19wYWdlICsgWFBDX0VOR0FHRURfUEFSVElUSU9OU19BTU87CisKKworCS8qIHJldHVybiBvdXIgcGFydGl0aW9uJ3MgQU1PIHZhcmlhYmxlIEFORGVkIHdpdGggcGFydGlkX21hc2sgKi8KKwlyZXR1cm4gKEZFVENIT1BfTE9BRF9PUChUT19BTU8oKHU2NCkgJmFtby0+dmFyaWFibGUpLCBGRVRDSE9QX0xPQUQpICYKKwkJCQkJCQkJcGFydGlkX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHU2NAoreHBjX3BhcnRpdGlvbl9kaXNlbmdhZ2VfcmVxdWVzdGVkKHU2NCBwYXJ0aWRfbWFzaykKK3sKKwlBTU9fdCAqYW1vID0geHBjX3ZhcnMtPmFtb3NfcGFnZSArIFhQQ19ESVNFTkdBR0VfUkVRVUVTVF9BTU87CisKKworCS8qIHJldHVybiBvdXIgcGFydGl0aW9uJ3MgQU1PIHZhcmlhYmxlIEFORGVkIHdpdGggcGFydGlkX21hc2sgKi8KKwlyZXR1cm4gKEZFVENIT1BfTE9BRF9PUChUT19BTU8oKHU2NCkgJmFtby0+dmFyaWFibGUpLCBGRVRDSE9QX0xPQUQpICYKKwkJCQkJCQkJcGFydGlkX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19jbGVhcl9wYXJ0aXRpb25fZW5nYWdlZCh1NjQgcGFydGlkX21hc2spCit7CisJQU1PX3QgKmFtbyA9IHhwY192YXJzLT5hbW9zX3BhZ2UgKyBYUENfRU5HQUdFRF9QQVJUSVRJT05TX0FNTzsKKworCisJLyogY2xlYXIgYml0KHMpIGJhc2VkIG9uIHBhcnRpZF9tYXNrIGluIG91ciBwYXJ0aXRpb24ncyBBTU8gKi8KKwlGRVRDSE9QX1NUT1JFX09QKFRPX0FNTygodTY0KSAmYW1vLT52YXJpYWJsZSksIEZFVENIT1BfQU5ELAorCQkJCQkJCQl+cGFydGlkX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19jbGVhcl9wYXJ0aXRpb25fZGlzZW5nYWdlX3JlcXVlc3QodTY0IHBhcnRpZF9tYXNrKQoreworCUFNT190ICphbW8gPSB4cGNfdmFycy0+YW1vc19wYWdlICsgWFBDX0RJU0VOR0FHRV9SRVFVRVNUX0FNTzsKKworCisJLyogY2xlYXIgYml0KHMpIGJhc2VkIG9uIHBhcnRpZF9tYXNrIGluIG91ciBwYXJ0aXRpb24ncyBBTU8gKi8KKwlGRVRDSE9QX1NUT1JFX09QKFRPX0FNTygodTY0KSAmYW1vLT52YXJpYWJsZSksIEZFVENIT1BfQU5ELAorCQkJCQkJCQl+cGFydGlkX21hc2spOworfQorCisKKworLyoKICAqIFRoZSBmb2xsb3dpbmcgc2V0IG9mIG1hY3JvcyBhbmQgaW5saW5lcyBhcmUgdXNlZCBmb3IgdGhlIHNlbmRpbmcgYW5kCiAgKiByZWNlaXZpbmcgb2YgSVBJcyAoYWxzbyBrbm93biBhcyBJUlFzKS4gVGhlcmUgYXJlIHR3byBmbGF2b3JzIG9mIElQSXMsCiAgKiBvbmUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggcGFydGl0aW9uIGFjdGl2aXR5IChTR0lfWFBDX0FDVElWQVRFKSBhbmQKQEAgLTcyMiwxMyArOTk1LDEzIEBACiAgKiBGbGFnIHRoZSBhcHByb3ByaWF0ZSBBTU8gdmFyaWFibGUgYW5kIHNlbmQgYW4gSVBJIHRvIHRoZSBzcGVjaWZpZWQgbm9kZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi14cGNfYWN0aXZhdGVfSVJRX3NlbmQodTY0IGFtb3NfcGFnZSwgaW50IGZyb21fbmFzaWQsIGludCB0b19uYXNpZCwKK3hwY19hY3RpdmF0ZV9JUlFfc2VuZCh1NjQgYW1vc19wYWdlX3BhLCBpbnQgZnJvbV9uYXNpZCwgaW50IHRvX25hc2lkLAogCQkJaW50IHRvX3BoeXNfY3B1aWQpCiB7CiAJaW50IHdfaW5kZXggPSBYUENfTkFTSURfV19JTkRFWChmcm9tX25hc2lkKTsKIAlpbnQgYl9pbmRleCA9IFhQQ19OQVNJRF9CX0lOREVYKGZyb21fbmFzaWQpOwotCUFNT190ICphbW9zID0gKEFNT190ICopIF9fdmEoYW1vc19wYWdlICsKLQkJCQkJKFhQX01BWF9QQVJUSVRJT05TICogc2l6ZW9mKEFNT190KSkpOworCUFNT190ICphbW9zID0gKEFNT190ICopIF9fdmEoYW1vc19wYWdlX3BhICsKKwkJCQkoWFBDX0FDVElWQVRFX0lSUV9BTU9TICogc2l6ZW9mKEFNT190KSkpOwogCiAKIAkodm9pZCkgeHBjX0lQSV9zZW5kKCZhbW9zW3dfaW5kZXhdLCAoMVVMIDw8IGJfaW5kZXgpLCB0b19uYXNpZCwKQEAgLTc1Niw2ICsxMDI5LDEzIEBACiAJCQkJeHBjX3ZhcnMtPmFjdF9uYXNpZCwgeHBjX3ZhcnMtPmFjdF9waHlzX2NwdWlkKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCit4cGNfSVBJX3NlbmRfZGlzZW5nYWdlKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCXhwY19hY3RpdmF0ZV9JUlFfc2VuZChwYXJ0LT5yZW1vdGVfYW1vc19wYWdlX3BhLCBjbm9kZWlkX3RvX25hc2lkKDApLAorCQkJcGFydC0+cmVtb3RlX2FjdF9uYXNpZCwgcGFydC0+cmVtb3RlX2FjdF9waHlzX2NwdWlkKTsKK30KKwogCiAvKgogICogSVBJcyBhc3NvY2lhdGVkIHdpdGggU0dJX1hQQ19OT1RJRlkgSVJRLgpAQCAtODM2LDYgKzExMTYsNyBAQAogCiAvKiBnaXZlbiBhbiBBTU8gdmFyaWFibGUgYW5kIGEgY2hhbm5lbCMsIGdldCBpdHMgYXNzb2NpYXRlZCBJUEkgZmxhZ3MgKi8KICNkZWZpbmUgWFBDX0dFVF9JUElfRkxBR1MoX2FtbywgX2MpCSgodTgpICgoKF9hbW8pID4+ICgoX2MpICogOCkpICYgMHhmZikpCisjZGVmaW5lIFhQQ19TRVRfSVBJX0ZMQUdTKF9hbW8sIF9jLCBfZikJKF9hbW8pIHw9ICgodTY0KSAoX2YpIDw8ICgoX2MpICogOCkpCiAKICNkZWZpbmUJWFBDX0FOWV9PUEVOQ0xPU0VfSVBJX0ZMQUdTX1NFVChfYW1vKSAoKF9hbW8pICYgMHgwZjBmMGYwZjBmMGYwZjBmKQogI2RlZmluZSBYUENfQU5ZX01TR19JUElfRkxBR1NfU0VUKF9hbW8pICAgICAgICgoX2FtbykgJiAweDEwMTAxMDEwMTAxMDEwMTApCkBAIC05MDMsMTcgKzExODQsMTggQEAKICAqIGNhY2hlYWJsZSBtYXBwaW5nIGZvciB0aGUgZW50aXJlIHJlZ2lvbi4gVGhpcyB3aWxsIHByZXZlbnQgc3BlY3VsYXRpdmUKICAqIHJlYWRpbmcgb2YgY2FjaGVkIGNvcGllcyBvZiBvdXIgbGluZXMgZnJvbSBiZWluZyBpc3N1ZWQgd2hpY2ggd2lsbCBjYXVzZQogICogYSBQSSBGU0IgUHJvdG9jb2wgZXJyb3IgdG8gYmUgZ2VuZXJhdGVkIGJ5IHRoZSBTSFVCLiBGb3IgWFBDLCB3ZSBuZWVkIDY0Ci0gKiAoWFBfTUFYX1BBUlRJVElPTlMpIEFNTyB2YXJpYWJsZXMgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uICh4cGNfbWFpbi5jKQotICogYW5kIGFuIGFkZGl0aW9uYWwgMTYgQU1PIHZhcmlhYmxlcyBmb3IgcGFydGl0aW9uIGFjdGl2YXRpb24gKHhwY19oYi5jKS4KKyAqIEFNTyB2YXJpYWJsZXMgKGJhc2VkIG9uIFhQX01BWF9QQVJUSVRJT05TKSBmb3IgbWVzc2FnZSBub3RpZmljYXRpb24gYW5kIGFuCisgKiBhZGRpdGlvbmFsIDEyOCBBTU8gdmFyaWFibGVzIChiYXNlZCBvbiBYUF9OQVNJRF9NQVNLX1dPUkRTKSBmb3IgcGFydGl0aW9uCisgKiBhY3RpdmF0aW9uIGFuZCAyIEFNTyB2YXJpYWJsZXMgZm9yIHBhcnRpdGlvbiBkZWFjdGl2YXRpb24uCiAgKi8KIHN0YXRpYyBpbmxpbmUgQU1PX3QgKgoteHBjX0lQSV9pbml0KHBhcnRpZF90IHBhcnRpZCkKK3hwY19JUElfaW5pdChpbnQgaW5kZXgpCiB7Ci0JQU1PX3QgKnBhcnRfYW1vID0geHBjX3ZhcnMtPmFtb3NfcGFnZSArIHBhcnRpZDsKKwlBTU9fdCAqYW1vID0geHBjX3ZhcnMtPmFtb3NfcGFnZSArIGluZGV4OwogCiAKLQl4cGNfSVBJX3JlY2VpdmUocGFydF9hbW8pOwotCXJldHVybiBwYXJ0X2FtbzsKKwkodm9pZCkgeHBjX0lQSV9yZWNlaXZlKGFtbyk7CS8qIGNsZWFyIEFNTyB2YXJpYWJsZSAqLworCXJldHVybiBhbW87CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCmluZGV4IDk0Njk4YmUuLmFiZjRmYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAogCQlzcGluX2xvY2tfaW5pdCgmY2gtPmxvY2spOwogCQlzZW1hX2luaXQoJmNoLT5tc2dfdG9fcHVsbF9zZW1hLCAxKTsJLyogbXV0ZXggKi8KKwkJc2VtYV9pbml0KCZjaC0+d2Rpc2Nvbm5lY3Rfc2VtYSwgMCk7CS8qIGV2ZW50IHdhaXQgKi8KIAogCQlhdG9taWNfc2V0KCZjaC0+bl9vbl9tc2dfYWxsb2NhdGVfd3EsIDApOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaC0+bXNnX2FsbG9jYXRlX3dxKTsKQEAgLTE2Niw2ICsxNjcsNyBAQAogCXhwY19pbml0aWFsaXplX2NoYW5uZWxzKHBhcnQsIHBhcnRpZCk7CiAKIAlhdG9taWNfc2V0KCZwYXJ0LT5uY2hhbm5lbHNfYWN0aXZlLCAwKTsKKwlhdG9taWNfc2V0KCZwYXJ0LT5uY2hhbm5lbHNfZW5nYWdlZCwgMCk7CiAKIAogCS8qIGxvY2FsX0lQSV9hbW8gd2VyZSBzZXQgdG8gMCBieSBhbiBlYXJsaWVyIG1lbXNldCgpICovCkBAIC01NTUsOCArNTU3LDYgQEAKIAkJc2VtYV9pbml0KCZjaC0+bm90aWZ5X3F1ZXVlW2ldLnNlbWEsIDApOwogCX0KIAotCXNlbWFfaW5pdCgmY2gtPnRlYXJkb3duX3NlbWEsIDApOwkvKiBldmVudCB3YWl0ICovCi0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CiAJY2gtPmZsYWdzIHw9IFhQQ19DX1NFVFVQOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwpAQCAtNjI2LDYgKzYyNiw1NSBAQAogCiAKIC8qCisgKiBOb3RpZnkgdGhvc2Ugd2hvIHdhbnRlZCB0byBiZSBub3RpZmllZCB1cG9uIGRlbGl2ZXJ5IG9mIHRoZWlyIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfbm90aWZ5X3NlbmRlcnMoc3RydWN0IHhwY19jaGFubmVsICpjaCwgZW51bSB4cGNfcmV0dmFsIHJlYXNvbiwgczY0IHB1dCkKK3sKKwlzdHJ1Y3QgeHBjX25vdGlmeSAqbm90aWZ5OworCXU4IG5vdGlmeV90eXBlOworCXM2NCBnZXQgPSBjaC0+d19yZW1vdGVfR1AuZ2V0IC0gMTsKKworCisJd2hpbGUgKCsrZ2V0IDwgcHV0ICYmIGF0b21pY19yZWFkKCZjaC0+bl90b19ub3RpZnkpID4gMCkgeworCisJCW5vdGlmeSA9ICZjaC0+bm90aWZ5X3F1ZXVlW2dldCAlIGNoLT5sb2NhbF9uZW50cmllc107CisKKwkJLyoKKwkJICogU2VlIGlmIHRoZSBub3RpZnkgZW50cnkgaW5kaWNhdGVzIGl0IHdhcyBhc3NvY2lhdGVkIHdpdGgKKwkJICogYSBtZXNzYWdlIHdobydzIHNlbmRlciB3YW50cyB0byBiZSBub3RpZmllZC4gSXQgaXMgcG9zc2libGUKKwkJICogdGhhdCBpdCBpcywgYnV0IHNvbWVvbmUgZWxzZSBpcyBkb2luZyBvciBoYXMgZG9uZSB0aGUKKwkJICogbm90aWZpY2F0aW9uLgorCQkgKi8KKwkJbm90aWZ5X3R5cGUgPSBub3RpZnktPnR5cGU7CisJCWlmIChub3RpZnlfdHlwZSA9PSAwIHx8CisJCQkJY21weGNoZygmbm90aWZ5LT50eXBlLCBub3RpZnlfdHlwZSwgMCkgIT0KKwkJCQkJCQkJbm90aWZ5X3R5cGUpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJREJVR19PTihub3RpZnlfdHlwZSAhPSBYUENfTl9DQUxMKTsKKworCQlhdG9taWNfZGVjKCZjaC0+bl90b19ub3RpZnkpOworCisJCWlmIChub3RpZnktPmZ1bmMgIT0gTlVMTCkgeworCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm5vdGlmeS0+ZnVuYygpIGNhbGxlZCwgbm90aWZ5PTB4JXAsICIKKwkJCQkibXNnX251bWJlcj0lbGQsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwKKwkJCQkodm9pZCAqKSBub3RpZnksIGdldCwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJCW5vdGlmeS0+ZnVuYyhyZWFzb24sIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIsCisJCQkJCQkJCW5vdGlmeS0+a2V5KTsKKworCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm5vdGlmeS0+ZnVuYygpIHJldHVybmVkLCAiCisJCQkJIm5vdGlmeT0weCVwLCBtc2dfbnVtYmVyPSVsZCwgcGFydGlkPSVkLCAiCisJCQkJImNoYW5uZWw9JWRcbiIsICh2b2lkICopIG5vdGlmeSwgZ2V0LAorCQkJCWNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCQl9CisJfQorfQorCisKKy8qCiAgKiBGcmVlIHVwIG1lc3NhZ2UgcXVldWVzIGFuZCBvdGhlciBzdHVmZiB0aGF0IHdlcmUgYWxsb2NhdGVkIGZvciB0aGUgc3BlY2lmaWVkCiAgKiBjaGFubmVsLgogICoKQEAgLTY2OSw5ICs3MTgsNiBAQAogCQljaC0+cmVtb3RlX21zZ3F1ZXVlID0gTlVMTDsKIAkJa2ZyZWUoY2gtPm5vdGlmeV9xdWV1ZSk7CiAJCWNoLT5ub3RpZnlfcXVldWUgPSBOVUxMOwotCi0JCS8qIGluIGNhc2Ugc29tZW9uZSBpcyB3YWl0aW5nIGZvciB0aGUgdGVhcmRvd24gdG8gY29tcGxldGUgKi8KLQkJdXAoJmNoLT50ZWFyZG93bl9zZW1hKTsKIAl9CiB9CiAKQEAgLTY4Myw3ICs3MjksNyBAQAogeHBjX3Byb2Nlc3NfZGlzY29ubmVjdChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpCiB7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF07Ci0JdTMyIGNoX2ZsYWdzID0gY2gtPmZsYWdzOworCXUzMiBjaGFubmVsX3dhc19jb25uZWN0ZWQgPSAoY2gtPmZsYWdzICYgWFBDX0NfV0FTQ09OTkVDVEVEKTsKIAogCiAJREJVR19PTighc3Bpbl9pc19sb2NrZWQoJmNoLT5sb2NrKSk7CkBAIC03MDEsMTIgKzc0NywxMyBAQAogCX0KIAlEQlVHX09OKGF0b21pY19yZWFkKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpICE9IDApOwogCi0JLyogaXQncyBub3cgc2FmZSB0byBmcmVlIHRoZSBjaGFubmVsJ3MgbWVzc2FnZSBxdWV1ZXMgKi8KKwlpZiAocGFydC0+YWN0X3N0YXRlID09IFhQQ19QX0RFQUNUSVZBVElORykgeworCQkvKiBjYW4ndCBwcm9jZWVkIHVudGlsIHRoZSBvdGhlciBzaWRlIGRpc2VuZ2FnZXMgZnJvbSB1cyAqLworCQlpZiAoeHBjX3BhcnRpdGlvbl9lbmdhZ2VkKDFVTCA8PCBjaC0+cGFydGlkKSkgeworCQkJcmV0dXJuOworCQl9CiAKLQl4cGNfZnJlZV9tc2dxdWV1ZXMoY2gpOwotCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApOwotCi0JaWYgKHBhcnQtPmFjdF9zdGF0ZSAhPSBYUENfUF9ERUFDVElWQVRJTkcpIHsKKwl9IGVsc2UgewogCiAJCS8qIGFzIGxvbmcgYXMgdGhlIG90aGVyIHNpZGUgaXMgdXAgZG8gdGhlIGZ1bGwgcHJvdG9jb2wgKi8KIApAQCAtNzI0LDE2ICs3NzEsNDIgQEAKIAkJfQogCX0KIAorCS8qIHdha2UgdGhvc2Ugd2FpdGluZyBmb3Igbm90aWZ5IGNvbXBsZXRpb24gKi8KKwlpZiAoYXRvbWljX3JlYWQoJmNoLT5uX3RvX25vdGlmeSkgPiAwKSB7CisJCS8qID4+PiB3ZSBkbyBjYWxsb3V0IHdoaWxlIGhvbGRpbmcgY2gtPmxvY2sgKi8KKwkJeHBjX25vdGlmeV9zZW5kZXJzKGNoLCBjaC0+cmVhc29uLCBjaC0+d19sb2NhbF9HUC5wdXQpOworCX0KKwogCS8qIGJvdGggc2lkZXMgYXJlIGRpc2Nvbm5lY3RlZCBub3cgKi8KIAotCWNoLT5mbGFncyA9IFhQQ19DX0RJU0NPTk5FQ1RFRDsJLyogY2xlYXIgYWxsIGZsYWdzLCBidXQgdGhpcyBvbmUgKi8KKwkvKiBpdCdzIG5vdyBzYWZlIHRvIGZyZWUgdGhlIGNoYW5uZWwncyBtZXNzYWdlIHF1ZXVlcyAqLworCXhwY19mcmVlX21zZ3F1ZXVlcyhjaCk7CisKKwkvKiBtYXJrIGRpc2Nvbm5lY3RlZCwgY2xlYXIgYWxsIG90aGVyIGZsYWdzIGV4Y2VwdCBYUENfQ19XRElTQ09OTkVDVCAqLworCWNoLT5mbGFncyA9IChYUENfQ19ESVNDT05ORUNURUQgfCAoY2gtPmZsYWdzICYgWFBDX0NfV0RJU0NPTk5FQ1QpKTsKIAogCWF0b21pY19kZWMoJnBhcnQtPm5jaGFubmVsc19hY3RpdmUpOwogCi0JaWYgKGNoX2ZsYWdzICYgWFBDX0NfV0FTQ09OTkVDVEVEKSB7CisJaWYgKGNoYW5uZWxfd2FzX2Nvbm5lY3RlZCkgewogCQlkZXZfaW5mbyh4cGNfY2hhbiwgImNoYW5uZWwgJWQgdG8gcGFydGl0aW9uICVkIGRpc2Nvbm5lY3RlZCwgIgogCQkJInJlYXNvbj0lZFxuIiwgY2gtPm51bWJlciwgY2gtPnBhcnRpZCwgY2gtPnJlYXNvbik7CiAJfQorCisJaWYgKGNoLT5mbGFncyAmIFhQQ19DX1dESVNDT05ORUNUKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCAqaXJxX2ZsYWdzKTsKKwkJdXAoJmNoLT53ZGlzY29ubmVjdF9zZW1hKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCAqaXJxX2ZsYWdzKTsKKworCX0gZWxzZSBpZiAoY2gtPmRlbGF5ZWRfSVBJX2ZsYWdzKSB7CisJCWlmIChwYXJ0LT5hY3Rfc3RhdGUgIT0gWFBDX1BfREVBQ1RJVkFUSU5HKSB7CisJCQkvKiB0aW1lIHRvIHRha2UgYWN0aW9uIG9uIGFueSBkZWxheWVkIElQSSBmbGFncyAqLworCQkJc3Bpbl9sb2NrKCZwYXJ0LT5JUElfbG9jayk7CisJCQlYUENfU0VUX0lQSV9GTEFHUyhwYXJ0LT5sb2NhbF9JUElfYW1vLCBjaC0+bnVtYmVyLAorCQkJCQkJCWNoLT5kZWxheWVkX0lQSV9mbGFncyk7CisJCQlzcGluX3VubG9jaygmcGFydC0+SVBJX2xvY2spOworCQl9CisJCWNoLT5kZWxheWVkX0lQSV9mbGFncyA9IDA7CisJfQogfQogCiAKQEAgLTc1NCw2ICs4MjcsMTkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKIAorYWdhaW46CisKKwlpZiAoKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RFRCkgJiYKKwkJCQkJKGNoLT5mbGFncyAmIFhQQ19DX1dESVNDT05ORUNUKSkgeworCQkvKgorCQkgKiBEZWxheSBwcm9jZXNzaW5nIElQSSBmbGFncyB1bnRpbCB0aHJlYWQgd2FpdGluZyBkaXNjb25uZWN0CisJCSAqIGhhcyBoYWQgYSBjaGFuY2UgdG8gc2VlIHRoYXQgdGhlIGNoYW5uZWwgaXMgZGlzY29ubmVjdGVkLgorCQkgKi8KKwkJY2gtPmRlbGF5ZWRfSVBJX2ZsYWdzIHw9IElQSV9mbGFnczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCXJldHVybjsKKwl9CisKIAogCWlmIChJUElfZmxhZ3MgJiBYUENfSVBJX0NMT1NFUkVRVUVTVCkgewogCkBAIC03NjQsNyArODUwLDcgQEAKIAkJLyoKIAkJICogSWYgUkNMT1NFUkVRVUVTVCBpcyBzZXQsIHdlJ3JlIHByb2JhYmx5IHdhaXRpbmcgZm9yCiAJCSAqIFJDTE9TRVJFUExZLiBXZSBzaG91bGQgZmluZCBpdCBhbmQgYSBST1BFTlJFUVVFU1QgcGFja2VkCi0JCSAqIHdpdGggdGhpcyBSQ0xPU0VRUkVVUUVTVCBpbiB0aGUgSVBJX2ZsYWdzLgorCQkgKiB3aXRoIHRoaXMgUkNMT1NFUkVRVUVTVCBpbiB0aGUgSVBJX2ZsYWdzLgogCQkgKi8KIAogCQlpZiAoY2gtPmZsYWdzICYgWFBDX0NfUkNMT1NFUkVRVUVTVCkgewpAQCAtNzc5LDE0ICs4NjUsMjIgQEAKIAogCQkJLyogYm90aCBzaWRlcyBoYXZlIGZpbmlzaGVkIGRpc2Nvbm5lY3RpbmcgKi8KIAkJCXhwY19wcm9jZXNzX2Rpc2Nvbm5lY3QoY2gsICZpcnFfZmxhZ3MpOworCQkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RFRCkpOworCQkJZ290byBhZ2FpbjsKIAkJfQogCiAJCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNURUQpIHsKLQkJCS8vID4+PiBleHBsYWluIHRoaXMgc2VjdGlvbgotCiAJCQlpZiAoIShJUElfZmxhZ3MgJiBYUENfSVBJX09QRU5SRVFVRVNUKSkgewotCQkJCURCVUdfT04ocGFydC0+YWN0X3N0YXRlICE9Ci0JCQkJCQkJWFBDX1BfREVBQ1RJVkFUSU5HKTsKKwkJCQlpZiAoKFhQQ19HRVRfSVBJX0ZMQUdTKHBhcnQtPmxvY2FsX0lQSV9hbW8sCisJCQkJCSBjaF9udW1iZXIpICYgWFBDX0lQSV9PUEVOUkVRVUVTVCkpIHsKKworCQkJCQlEQlVHX09OKGNoLT5kZWxheWVkX0lQSV9mbGFncyAhPSAwKTsKKwkJCQkJc3Bpbl9sb2NrKCZwYXJ0LT5JUElfbG9jayk7CisJCQkJCVhQQ19TRVRfSVBJX0ZMQUdTKHBhcnQtPmxvY2FsX0lQSV9hbW8sCisJCQkJCQkJY2hfbnVtYmVyLAorCQkJCQkJCVhQQ19JUElfQ0xPU0VSRVFVRVNUKTsKKwkJCQkJc3Bpbl91bmxvY2soJnBhcnQtPklQSV9sb2NrKTsKKwkJCQl9CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtODE2LDkgKzkxMCwxMyBAQAogCQkJfQogCiAJCQlYUENfRElTQ09OTkVDVF9DSEFOTkVMKGNoLCByZWFzb24sICZpcnFfZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJeHBjX3Byb2Nlc3NfZGlzY29ubmVjdChjaCwgJmlycV9mbGFncyk7CisKKwkJCURCVUdfT04oSVBJX2ZsYWdzICYgWFBDX0lQSV9DTE9TRVJFUExZKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJcmV0dXJuOwogCQl9CisKKwkJeHBjX3Byb2Nlc3NfZGlzY29ubmVjdChjaCwgJmlycV9mbGFncyk7CiAJfQogCiAKQEAgLTgzNCw3ICs5MzIsMjAgQEAKIAkJfQogCiAJCURCVUdfT04oIShjaC0+ZmxhZ3MgJiBYUENfQ19DTE9TRVJFUVVFU1QpKTsKLQkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX1JDTE9TRVJFUVVFU1QpKTsKKworCQlpZiAoIShjaC0+ZmxhZ3MgJiBYUENfQ19SQ0xPU0VSRVFVRVNUKSkgeworCQkJaWYgKChYUENfR0VUX0lQSV9GTEFHUyhwYXJ0LT5sb2NhbF9JUElfYW1vLCBjaF9udW1iZXIpCisJCQkJCQkmIFhQQ19JUElfQ0xPU0VSRVFVRVNUKSkgeworCisJCQkJREJVR19PTihjaC0+ZGVsYXllZF9JUElfZmxhZ3MgIT0gMCk7CisJCQkJc3Bpbl9sb2NrKCZwYXJ0LT5JUElfbG9jayk7CisJCQkJWFBDX1NFVF9JUElfRkxBR1MocGFydC0+bG9jYWxfSVBJX2FtbywKKwkJCQkJCWNoX251bWJlciwgWFBDX0lQSV9DTE9TRVJFUExZKTsKKwkJCQlzcGluX3VubG9jaygmcGFydC0+SVBJX2xvY2spOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCQlyZXR1cm47CisJCX0KIAogCQljaC0+ZmxhZ3MgfD0gWFBDX0NfUkNMT1NFUkVQTFk7CiAKQEAgLTg1Miw4ICs5NjMsMTQgQEAKIAkJCSJjaGFubmVsPSVkXG4iLCBhcmdzLT5tc2dfc2l6ZSwgYXJncy0+bG9jYWxfbmVudHJpZXMsCiAJCQljaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKIAotCQlpZiAoKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpIHx8Ci0JCQkJCXBhcnQtPmFjdF9zdGF0ZSA9PSBYUENfUF9ERUFDVElWQVRJTkcpIHsKKwkJaWYgKHBhcnQtPmFjdF9zdGF0ZSA9PSBYUENfUF9ERUFDVElWQVRJTkcgfHwKKwkJCQkJKGNoLT5mbGFncyAmIFhQQ19DX1JPUEVOUkVRVUVTVCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGNoLT5mbGFncyAmIChYUENfQ19ESVNDT05ORUNUSU5HIHwgWFBDX0NfV0RJU0NPTk5FQ1QpKSB7CisJCQljaC0+ZGVsYXllZF9JUElfZmxhZ3MgfD0gWFBDX0lQSV9PUEVOUkVRVUVTVDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CkBAIC04NjcsOCArOTg0LDExIEBACiAJCSAqICAgICAgbXNnX3NpemUgPSBzaXplIG9mIGNoYW5uZWwncyBtZXNzYWdlcyBpbiBieXRlcwogCQkgKiAgICAgIGxvY2FsX25lbnRyaWVzID0gcmVtb3RlIHBhcnRpdGlvbidzIGxvY2FsX25lbnRyaWVzCiAJCSAqLwotCQlEQlVHX09OKGFyZ3MtPm1zZ19zaXplID09IDApOwotCQlEQlVHX09OKGFyZ3MtPmxvY2FsX25lbnRyaWVzID09IDApOworCQlpZiAoYXJncy0+bXNnX3NpemUgPT0gMCB8fCBhcmdzLT5sb2NhbF9uZW50cmllcyA9PSAwKSB7CisJCQkvKiBhc3N1bWUgT1BFTlJFUVVFU1Qgd2FzIGRlbGF5ZWQgYnkgbWlzdGFrZSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCQlyZXR1cm47CisJCX0KIAogCQljaC0+ZmxhZ3MgfD0gKFhQQ19DX1JPUEVOUkVRVUVTVCB8IFhQQ19DX0NPTk5FQ1RJTkcpOwogCQljaC0+cmVtb3RlX25lbnRyaWVzID0gYXJncy0+bG9jYWxfbmVudHJpZXM7CkBAIC05MDYsNyArMTAyNiwxMyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX09QRU5SRVFVRVNUKSk7CisJCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX09QRU5SRVFVRVNUKSkgeworCQkJWFBDX0RJU0NPTk5FQ1RfQ0hBTk5FTChjaCwgeHBjT3BlbkNsb3NlRXJyb3IsCisJCQkJCQkJCSZpcnFfZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwogCQlEQlVHX09OKCEoY2gtPmZsYWdzICYgWFBDX0NfUk9QRU5SRVFVRVNUKSk7CiAJCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfQ09OTkVDVEVEKTsKIApAQCAtOTYwLDggKzEwODYsOCBAQAogCXN0cnVjdCB4cGNfcmVnaXN0cmF0aW9uICpyZWdpc3RyYXRpb24gPSAmeHBjX3JlZ2lzdHJhdGlvbnNbY2gtPm51bWJlcl07CiAKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnJlZ2lzdHJhdGlvbi0+c2VtYSkgIT0gMCkgewotCQlyZXR1cm4geHBjSW50ZXJydXB0ZWQ7CisJaWYgKGRvd25fdHJ5bG9jaygmcmVnaXN0cmF0aW9uLT5zZW1hKSAhPSAwKSB7CisJCXJldHVybiB4cGNSZXRyeTsKIAl9CiAKIAlpZiAoIVhQQ19DSEFOTkVMX1JFR0lTVEVSRUQoY2gtPm51bWJlcikpIHsKQEAgLTEwNDAsNTUgKzExNjYsNiBAQAogCiAKIC8qCi0gKiBOb3RpZnkgdGhvc2Ugd2hvIHdhbnRlZCB0byBiZSBub3RpZmllZCB1cG9uIGRlbGl2ZXJ5IG9mIHRoZWlyIG1lc3NhZ2UuCi0gKi8KLXN0YXRpYyB2b2lkCi14cGNfbm90aWZ5X3NlbmRlcnMoc3RydWN0IHhwY19jaGFubmVsICpjaCwgZW51bSB4cGNfcmV0dmFsIHJlYXNvbiwgczY0IHB1dCkKLXsKLQlzdHJ1Y3QgeHBjX25vdGlmeSAqbm90aWZ5OwotCXU4IG5vdGlmeV90eXBlOwotCXM2NCBnZXQgPSBjaC0+d19yZW1vdGVfR1AuZ2V0IC0gMTsKLQotCi0Jd2hpbGUgKCsrZ2V0IDwgcHV0ICYmIGF0b21pY19yZWFkKCZjaC0+bl90b19ub3RpZnkpID4gMCkgewotCi0JCW5vdGlmeSA9ICZjaC0+bm90aWZ5X3F1ZXVlW2dldCAlIGNoLT5sb2NhbF9uZW50cmllc107Ci0KLQkJLyoKLQkJICogU2VlIGlmIHRoZSBub3RpZnkgZW50cnkgaW5kaWNhdGVzIGl0IHdhcyBhc3NvY2lhdGVkIHdpdGgKLQkJICogYSBtZXNzYWdlIHdobydzIHNlbmRlciB3YW50cyB0byBiZSBub3RpZmllZC4gSXQgaXMgcG9zc2libGUKLQkJICogdGhhdCBpdCBpcywgYnV0IHNvbWVvbmUgZWxzZSBpcyBkb2luZyBvciBoYXMgZG9uZSB0aGUKLQkJICogbm90aWZpY2F0aW9uLgotCQkgKi8KLQkJbm90aWZ5X3R5cGUgPSBub3RpZnktPnR5cGU7Ci0JCWlmIChub3RpZnlfdHlwZSA9PSAwIHx8Ci0JCQkJY21weGNoZygmbm90aWZ5LT50eXBlLCBub3RpZnlfdHlwZSwgMCkgIT0KLQkJCQkJCQkJbm90aWZ5X3R5cGUpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJREJVR19PTihub3RpZnlfdHlwZSAhPSBYUENfTl9DQUxMKTsKLQotCQlhdG9taWNfZGVjKCZjaC0+bl90b19ub3RpZnkpOwotCi0JCWlmIChub3RpZnktPmZ1bmMgIT0gTlVMTCkgewotCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm5vdGlmeS0+ZnVuYygpIGNhbGxlZCwgbm90aWZ5PTB4JXAsICIKLQkJCQkibXNnX251bWJlcj0lbGQsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwKLQkJCQkodm9pZCAqKSBub3RpZnksIGdldCwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7Ci0KLQkJCW5vdGlmeS0+ZnVuYyhyZWFzb24sIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIsCi0JCQkJCQkJCW5vdGlmeS0+a2V5KTsKLQotCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm5vdGlmeS0+ZnVuYygpIHJldHVybmVkLCAiCi0JCQkJIm5vdGlmeT0weCVwLCBtc2dfbnVtYmVyPSVsZCwgcGFydGlkPSVkLCAiCi0JCQkJImNoYW5uZWw9JWRcbiIsICh2b2lkICopIG5vdGlmeSwgZ2V0LAotCQkJCWNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOwotCQl9Ci0JfQotfQotCi0KLS8qCiAgKiBDbGVhciBzb21lIG9mIHRoZSBtc2cgZmxhZ3MgaW4gdGhlIGxvY2FsIG1lc3NhZ2UgcXVldWUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMTI0MCw2ICsxMzE3LDcgQEAKIAl1NjQgSVBJX2FtbywgSVBJX2ZsYWdzOwogCXN0cnVjdCB4cGNfY2hhbm5lbCAqY2g7CiAJaW50IGNoX251bWJlcjsKKwl1MzIgY2hfZmxhZ3M7CiAKIAogCUlQSV9hbW8gPSB4cGNfZ2V0X0lQSV9mbGFncyhwYXJ0KTsKQEAgLTEyNjYsOCArMTM0NCw5IEBACiAJCQl4cGNfcHJvY2Vzc19vcGVuY2xvc2VfSVBJKHBhcnQsIGNoX251bWJlciwgSVBJX2ZsYWdzKTsKIAkJfQogCisJCWNoX2ZsYWdzID0gY2gtPmZsYWdzOwkvKiBuZWVkIGFuIGF0b21pYyBzbmFwc2hvdCBvZiBmbGFncyAqLwogCi0JCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HKSB7CisJCWlmIChjaF9mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKIAkJCXhwY19wcm9jZXNzX2Rpc2Nvbm5lY3QoY2gsICZpcnFfZmxhZ3MpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CkBAIC0xMjc4LDkgKzEzNTcsOSBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIShjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNURUQpKSB7Ci0JCQlpZiAoIShjaC0+ZmxhZ3MgJiBYUENfQ19PUEVOUkVRVUVTVCkpIHsKLQkJCQlEQlVHX09OKGNoLT5mbGFncyAmIFhQQ19DX1NFVFVQKTsKKwkJaWYgKCEoY2hfZmxhZ3MgJiBYUENfQ19DT05ORUNURUQpKSB7CisJCQlpZiAoIShjaF9mbGFncyAmIFhQQ19DX09QRU5SRVFVRVNUKSkgeworCQkJCURCVUdfT04oY2hfZmxhZ3MgJiBYUENfQ19TRVRVUCk7CiAJCQkJKHZvaWQpIHhwY19jb25uZWN0X2NoYW5uZWwoY2gpOwogCQkJfSBlbHNlIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CkBAIC0xMzA1LDggKzEzODQsOCBAQAogCiAKIC8qCi0gKiBYUEMncyBoZWFydGJlYXQgY29kZSBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGluZm9ybSBYUEMgdGhhdCBhIHBhcnRpdGlvbiBoYXMKLSAqIGdvbmUgZG93bi4gIFhQQyByZXNwb25kcyBieSB0ZWFyaW5nIGRvd24gdGhlIFhQYXJ0aXRpb24gQ29tbXVuaWNhdGlvbgorICogWFBDJ3MgaGVhcnRiZWF0IGNvZGUgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBpbmZvcm0gWFBDIHRoYXQgYSBwYXJ0aXRpb24gaXMKKyAqIGdvaW5nIGRvd24uICBYUEMgcmVzcG9uZHMgYnkgdGVhcmluZyBkb3duIHRoZSBYUGFydGl0aW9uIENvbW11bmljYXRpb24KICAqIGluZnJhc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBqdXN0IGRvd25lZCBwYXJ0aXRpb24uCiAgKgogICogWFBDJ3MgaGVhcnRiZWF0IGNvZGUgd2lsbCBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIHhwY19wYXJ0aXRpb25fdXAoKQpAQCAtMTMxNCw3ICsxMzkzLDcgQEAKICAqIGF0IHRoZSBzYW1lIHRpbWUuCiAgKi8KIHZvaWQKLXhwY19wYXJ0aXRpb25fZG93bihzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCwgZW51bSB4cGNfcmV0dmFsIHJlYXNvbikKK3hwY19wYXJ0aXRpb25fZ29pbmdfZG93bihzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCwgZW51bSB4cGNfcmV0dmFsIHJlYXNvbikKIHsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlpbnQgY2hfbnVtYmVyOwpAQCAtMTMzMCwxMiArMTQwOSwxMSBAQAogCX0KIAogCi0JLyogZGlzY29ubmVjdCBhbGwgY2hhbm5lbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3duZWQgcGFydGl0aW9uICovCisJLyogZGlzY29ubmVjdCBjaGFubmVscyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhcnRpdGlvbiBnb2luZyBkb3duICovCiAKIAlmb3IgKGNoX251bWJlciA9IDA7IGNoX251bWJlciA8IHBhcnQtPm5jaGFubmVsczsgY2hfbnVtYmVyKyspIHsKIAkJY2ggPSAmcGFydC0+Y2hhbm5lbHNbY2hfbnVtYmVyXTsKIAotCiAJCXhwY19tc2dxdWV1ZV9yZWYoY2gpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CiAKQEAgLTEzNzAsNiArMTQ0OCw3IEBACiAJICogdGhpcyBwYXJ0aXRpb24uCiAJICovCiAKKwlEQlVHX09OKGF0b21pY19yZWFkKCZwYXJ0LT5uY2hhbm5lbHNfZW5nYWdlZCkgIT0gMCk7CiAJREJVR19PTihhdG9taWNfcmVhZCgmcGFydC0+bmNoYW5uZWxzX2FjdGl2ZSkgIT0gMCk7CiAJREJVR19PTihwYXJ0LT5zZXR1cF9zdGF0ZSAhPSBYUENfUF9TRVRVUCk7CiAJcGFydC0+c2V0dXBfc3RhdGUgPSBYUENfUF9XVEVBUkRPV047CkBAIC0xNDI4LDE5ICsxNTA3LDExIEBACiAJCWlmICh4cGNfcGFydF9yZWYocGFydCkpIHsKIAkJCWNoID0gJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl07CiAKLQkJCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpKSB7Ci0JCQkJREJVR19PTihjaC0+ZmxhZ3MgJiBYUENfQ19PUEVOUkVRVUVTVCk7Ci0JCQkJREJVR19PTihjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNURUQpOwotCQkJCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApOwotCi0JCQkJLyoKLQkJCQkgKiBJbml0aWF0ZSB0aGUgZXN0YWJsaXNobWVudCBvZiBhIGNvbm5lY3Rpb24KLQkJCQkgKiBvbiB0aGUgbmV3bHkgcmVnaXN0ZXJlZCBjaGFubmVsIHRvIHRoZQotCQkJCSAqIHJlbW90ZSBwYXJ0aXRpb24uCi0JCQkJICovCi0JCQkJeHBjX3dha2V1cF9jaGFubmVsX21ncihwYXJ0KTsKLQkJCX0KLQorCQkJLyoKKwkJCSAqIEluaXRpYXRlIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgY29ubmVjdGlvbiBvbiB0aGUKKwkJCSAqIG5ld2x5IHJlZ2lzdGVyZWQgY2hhbm5lbCB0byB0aGUgcmVtb3RlIHBhcnRpdGlvbi4KKwkJCSAqLworCQkJeHBjX3dha2V1cF9jaGFubmVsX21ncihwYXJ0KTsKIAkJCXhwY19wYXJ0X2RlcmVmKHBhcnQpOwogCQl9CiAJfQpAQCAtMTQ1MCw5ICsxNTIxLDYgQEAKIHZvaWQKIHhwY19jb25uZWN0ZWRfY2FsbG91dChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQogewotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCi0KIAkvKiBsZXQgdGhlIHJlZ2lzdGVyZXIga25vdyB0aGF0IGEgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCAqLwogCiAJaWYgKGNoLT5mdW5jICE9IE5VTEwpIHsKQEAgLTE0NjUsMTAgKzE1MzMsNiBAQAogCQlkZXZfZGJnKHhwY19jaGFuLCAiY2gtPmZ1bmMoKSByZXR1cm5lZCwgcmVhc29uPXhwY0Nvbm5lY3RlZCwgIgogCQkJInBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CiAJfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwotCWNoLT5mbGFncyB8PSBYUENfQ19DT05ORUNUQ0FMTE9VVDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKIH0KIAogCkBAIC0xNTA2LDggKzE1NzAsMTIgQEAKIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwogCi0JCQlYUENfRElTQ09OTkVDVF9DSEFOTkVMKGNoLCB4cGNVbnJlZ2lzdGVyaW5nLAorCQkJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVEVEKSkgeworCQkJCWNoLT5mbGFncyB8PSBYUENfQ19XRElTQ09OTkVDVDsKKworCQkJCVhQQ19ESVNDT05ORUNUX0NIQU5ORUwoY2gsIHhwY1VucmVnaXN0ZXJpbmcsCiAJCQkJCQkJCSZpcnFfZmxhZ3MpOworCQkJfQogCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKIApAQCAtMTUyMyw4ICsxNTkxLDkgQEAKIC8qCiAgKiBUbyBkaXNjb25uZWN0IGEgY2hhbm5lbCwgYW5kIHJlZmxlY3QgaXQgYmFjayB0byBhbGwgd2hvIG1heSBiZSB3YWl0aW5nLgogICoKLSAqID4+PiBBbiBPUEVOIGlzIG5vdCBhbGxvd2VkIHVudGlsIFhQQ19DX0RJU0NPTk5FQ1RJTkcgaXMgY2xlYXJlZCBieQotICogPj4+IHhwY19mcmVlX21zZ3F1ZXVlcygpLgorICogQW4gT1BFTiBpcyBub3QgYWxsb3dlZCB1bnRpbCBYUENfQ19ESVNDT05ORUNUSU5HIGlzIGNsZWFyZWQgYnkKKyAqIHhwY19wcm9jZXNzX2Rpc2Nvbm5lY3QoKSwgYW5kIGlmIHNldCwgWFBDX0NfV0RJU0NPTk5FQ1QgaXMgY2xlYXJlZCBieQorICogeHBjX2Rpc2Nvbm5lY3Rfd2FpdCgpLgogICoKICAqIFRIRSBDSEFOTkVMIElTIFRPIEJFIExPQ0tFRCBCWSBUSEUgQ0FMTEVSIEFORCBXSUxMIFJFTUFJTiBMT0NLRUQgVVBPTiBSRVRVUk4uCiAgKi8KQEAgLTE1MzIsNyArMTYwMSw3IEBACiB4cGNfZGlzY29ubmVjdF9jaGFubmVsKGNvbnN0IGludCBsaW5lLCBzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLAogCQkJZW51bSB4cGNfcmV0dmFsIHJlYXNvbiwgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKQogewotCXUzMiBmbGFnczsKKwl1MzIgY2hhbm5lbF93YXNfY29ubmVjdGVkID0gKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRCk7CiAKIAogCURCVUdfT04oIXNwaW5faXNfbG9ja2VkKCZjaC0+bG9jaykpOwpAQCAtMTU0NywzNyArMTYxNiwyOCBAQAogCiAJWFBDX1NFVF9SRUFTT04oY2gsIHJlYXNvbiwgbGluZSk7CiAKLQlmbGFncyA9IGNoLT5mbGFnczsKKwljaC0+ZmxhZ3MgfD0gKFhQQ19DX0NMT1NFUkVRVUVTVCB8IFhQQ19DX0RJU0NPTk5FQ1RJTkcpOwogCS8qIHNvbWUgb2YgdGhlc2UgbWF5IG5vdCBoYXZlIGJlZW4gc2V0ICovCiAJY2gtPmZsYWdzICY9IH4oWFBDX0NfT1BFTlJFUVVFU1QgfCBYUENfQ19PUEVOUkVQTFkgfAogCQkJWFBDX0NfUk9QRU5SRVFVRVNUIHwgWFBDX0NfUk9QRU5SRVBMWSB8CiAJCQlYUENfQ19DT05ORUNUSU5HIHwgWFBDX0NfQ09OTkVDVEVEKTsKIAotCWNoLT5mbGFncyB8PSAoWFBDX0NfQ0xPU0VSRVFVRVNUIHwgWFBDX0NfRElTQ09OTkVDVElORyk7CiAJeHBjX0lQSV9zZW5kX2Nsb3NlcmVxdWVzdChjaCwgaXJxX2ZsYWdzKTsKIAotCWlmIChmbGFncyAmIFhQQ19DX0NPTk5FQ1RFRCkgeworCWlmIChjaGFubmVsX3dhc19jb25uZWN0ZWQpIHsKIAkJY2gtPmZsYWdzIHw9IFhQQ19DX1dBU0NPTk5FQ1RFRDsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNoLT5rdGhyZWFkc19pZGxlKSA+IDApIHsKLQkJLyogd2FrZSBhbGwgaWRsZSBrdGhyZWFkcyBzbyB0aGV5IGNhbiBleGl0ICovCi0JCXdha2VfdXBfYWxsKCZjaC0+aWRsZV93cSk7Ci0JfQotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssICppcnFfZmxhZ3MpOwogCi0KLQkvKiB3YWtlIHRob3NlIHdhaXRpbmcgdG8gYWxsb2NhdGUgYW4gZW50cnkgZnJvbSB0aGUgbG9jYWwgbXNnIHF1ZXVlICovCi0KLQlpZiAoYXRvbWljX3JlYWQoJmNoLT5uX29uX21zZ19hbGxvY2F0ZV93cSkgPiAwKSB7Ci0JCXdha2VfdXAoJmNoLT5tc2dfYWxsb2NhdGVfd3EpOworCS8qIHdha2UgYWxsIGlkbGUga3RocmVhZHMgc28gdGhleSBjYW4gZXhpdCAqLworCWlmIChhdG9taWNfcmVhZCgmY2gtPmt0aHJlYWRzX2lkbGUpID4gMCkgeworCQl3YWtlX3VwX2FsbCgmY2gtPmlkbGVfd3EpOwogCX0KIAotCS8qIHdha2UgdGhvc2Ugd2FpdGluZyBmb3Igbm90aWZ5IGNvbXBsZXRpb24gKi8KLQotCWlmIChhdG9taWNfcmVhZCgmY2gtPm5fdG9fbm90aWZ5KSA+IDApIHsKLQkJeHBjX25vdGlmeV9zZW5kZXJzKGNoLCByZWFzb24sIGNoLT53X2xvY2FsX0dQLnB1dCk7CisJLyogd2FrZSB0aG9zZSB3YWl0aW5nIHRvIGFsbG9jYXRlIGFuIGVudHJ5IGZyb20gdGhlIGxvY2FsIG1zZyBxdWV1ZSAqLworCWlmIChhdG9taWNfcmVhZCgmY2gtPm5fb25fbXNnX2FsbG9jYXRlX3dxKSA+IDApIHsKKwkJd2FrZV91cCgmY2gtPm1zZ19hbGxvY2F0ZV93cSk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCAqaXJxX2ZsYWdzKTsKQEAgLTE1ODUsMjMgKzE2NDUsMjQgQEAKIAogCiB2b2lkCi14cGNfZGlzY29ubmVjdGVkX2NhbGxvdXQoc3RydWN0IHhwY19jaGFubmVsICpjaCkKK3hwY19kaXNjb25uZWN0aW5nX2NhbGxvdXQoc3RydWN0IHhwY19jaGFubmVsICpjaCkKIHsKIAkvKgotCSAqIExldCB0aGUgY2hhbm5lbCdzIHJlZ2lzdGVyZXIga25vdyB0aGF0IHRoZSBjaGFubmVsIGlzIG5vdworCSAqIExldCB0aGUgY2hhbm5lbCdzIHJlZ2lzdGVyZXIga25vdyB0aGF0IHRoZSBjaGFubmVsIGlzIGJlaW5nCiAJICogZGlzY29ubmVjdGVkLiBXZSBkb24ndCB3YW50IHRvIGRvIHRoaXMgaWYgdGhlIHJlZ2lzdGVyZXIgd2FzIG5ldmVyCi0JICogaW5mb3JtZWQgb2YgYSBjb25uZWN0aW9uIGJlaW5nIG1hZGUsIHVubGVzcyB0aGUgZGlzY29ubmVjdCB3YXMgZm9yCi0JICogYWJub3JtYWwgcmVhc29ucy4KKwkgKiBpbmZvcm1lZCBvZiBhIGNvbm5lY3Rpb24gYmVpbmcgbWFkZS4KIAkgKi8KIAogCWlmIChjaC0+ZnVuYyAhPSBOVUxMKSB7Ci0JCWRldl9kYmcoeHBjX2NoYW4sICJjaC0+ZnVuYygpIGNhbGxlZCwgcmVhc29uPSVkLCBwYXJ0aWQ9JWQsICIKLQkJCSJjaGFubmVsPSVkXG4iLCBjaC0+cmVhc29uLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKwkJZGV2X2RiZyh4cGNfY2hhbiwgImNoLT5mdW5jKCkgY2FsbGVkLCByZWFzb249eHBjRGlzY29ubmVjdGluZywiCisJCQkiIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CiAKLQkJY2gtPmZ1bmMoY2gtPnJlYXNvbiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlciwgTlVMTCwgY2gtPmtleSk7CisJCWNoLT5mdW5jKHhwY0Rpc2Nvbm5lY3RpbmcsIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIsIE5VTEwsCisJCQkJCQkJCWNoLT5rZXkpOwogCi0JCWRldl9kYmcoeHBjX2NoYW4sICJjaC0+ZnVuYygpIHJldHVybmVkLCByZWFzb249JWQsIHBhcnRpZD0lZCwgIgotCQkJImNoYW5uZWw9JWRcbiIsIGNoLT5yZWFzb24sIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCQlkZXZfZGJnKHhwY19jaGFuLCAiY2gtPmZ1bmMoKSByZXR1cm5lZCwgcmVhc29uPSIKKwkJCSJ4cGNEaXNjb25uZWN0aW5nLCBwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsCisJCQljaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKIAl9CiB9CiAKQEAgLTE4NDgsNyArMTkwOSw3IEBACiAJCQl4cGNfbm90aWZ5X2Z1bmMgZnVuYywgdm9pZCAqa2V5KQogewogCWVudW0geHBjX3JldHZhbCByZXQgPSB4cGNTdWNjZXNzOwotCXN0cnVjdCB4cGNfbm90aWZ5ICpub3RpZnkgPSBOVUxMOyAgIC8vID4+PiB0byBrZWVwIHRoZSBjb21waWxlciBoYXBweSEhCisJc3RydWN0IHhwY19ub3RpZnkgKm5vdGlmeSA9IG5vdGlmeTsKIAlzNjQgcHV0LCBtc2dfbnVtYmVyID0gbXNnLT5udW1iZXI7CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCmluZGV4IGVkN2MyMTUuLmNlY2UzYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vc24vaW50ci5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODIsMTEgKzgzLDE3IEBACiAKIC8qIHN5c3R1bmUgcmVsYXRlZCB2YXJpYWJsZXMgZm9yIC9wcm9jL3N5cyBkaXJlY3RvcmllcyAqLwogCi1zdGF0aWMgaW50IHhwY19oYl9taW4gPSAxOwotc3RhdGljIGludCB4cGNfaGJfbWF4ID0gMTA7CitzdGF0aWMgaW50IHhwY19oYl9pbnRlcnZhbCA9IFhQQ19IQl9ERUZBVUxUX0lOVEVSVkFMOworc3RhdGljIGludCB4cGNfaGJfbWluX2ludGVydmFsID0gMTsKK3N0YXRpYyBpbnQgeHBjX2hiX21heF9pbnRlcnZhbCA9IDEwOwogCi1zdGF0aWMgaW50IHhwY19oYl9jaGVja19taW4gPSAxMDsKLXN0YXRpYyBpbnQgeHBjX2hiX2NoZWNrX21heCA9IDEyMDsKK3N0YXRpYyBpbnQgeHBjX2hiX2NoZWNrX2ludGVydmFsID0gWFBDX0hCX0NIRUNLX0RFRkFVTFRfSU5URVJWQUw7CitzdGF0aWMgaW50IHhwY19oYl9jaGVja19taW5faW50ZXJ2YWwgPSAxMDsKK3N0YXRpYyBpbnQgeHBjX2hiX2NoZWNrX21heF9pbnRlcnZhbCA9IDEyMDsKKworaW50IHhwY19kaXNlbmdhZ2VfcmVxdWVzdF90aW1lbGltaXQgPSBYUENfRElTRU5HQUdFX1JFUVVFU1RfREVGQVVMVF9USU1FTElNSVQ7CitzdGF0aWMgaW50IHhwY19kaXNlbmdhZ2VfcmVxdWVzdF9taW5fdGltZWxpbWl0ID0gMDsKK3N0YXRpYyBpbnQgeHBjX2Rpc2VuZ2FnZV9yZXF1ZXN0X21heF90aW1lbGltaXQgPSAxMjA7CiAKIHN0YXRpYyBjdGxfdGFibGUgeHBjX3N5c194cGNfaGJfZGlyW10gPSB7CiAJewpAQCAtOTksNyArMTA2LDggQEAKIAkJJnByb2NfZG9pbnR2ZWNfbWlubWF4LAogCQkmc3lzY3RsX2ludHZlYywKIAkJTlVMTCwKLQkJJnhwY19oYl9taW4sICZ4cGNfaGJfbWF4CisJCSZ4cGNfaGJfbWluX2ludGVydmFsLAorCQkmeHBjX2hiX21heF9pbnRlcnZhbAogCX0sCiAJewogCQkyLApAQCAtMTExLDcgKzExOSw4IEBACiAJCSZwcm9jX2RvaW50dmVjX21pbm1heCwKIAkJJnN5c2N0bF9pbnR2ZWMsCiAJCU5VTEwsCi0JCSZ4cGNfaGJfY2hlY2tfbWluLCAmeHBjX2hiX2NoZWNrX21heAorCQkmeHBjX2hiX2NoZWNrX21pbl9pbnRlcnZhbCwKKwkJJnhwY19oYl9jaGVja19tYXhfaW50ZXJ2YWwKIAl9LAogCXswfQogfTsKQEAgLTEyNCw2ICsxMzMsMTkgQEAKIAkJMDU1NSwKIAkJeHBjX3N5c194cGNfaGJfZGlyCiAJfSwKKwl7CisJCTIsCisJCSJkaXNlbmdhZ2VfcmVxdWVzdF90aW1lbGltaXQiLAorCQkmeHBjX2Rpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVsaW1pdCwKKwkJc2l6ZW9mKGludCksCisJCTA2NDQsCisJCU5VTEwsCisJCSZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJJnN5c2N0bF9pbnR2ZWMsCisJCU5VTEwsCisJCSZ4cGNfZGlzZW5nYWdlX3JlcXVlc3RfbWluX3RpbWVsaW1pdCwKKwkJJnhwY19kaXNlbmdhZ2VfcmVxdWVzdF9tYXhfdGltZWxpbWl0CisJfSwKIAl7MH0KIH07CiBzdGF0aWMgY3RsX3RhYmxlIHhwY19zeXNfZGlyW10gPSB7CkBAIC0xNDgsMTAgKzE3MCwxMCBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB4cGNfaGJfY2hlY2tfdGltZW91dDsKIAotLyogeHBjX2hiX2NoZWNrZXIgdGhyZWFkIGV4aXRlZCBub3RpZmljYXRpb24gKi8KKy8qIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSB4cGNfaGJfY2hlY2tlciB0aHJlYWQgaGFzIGV4aXRlZCAqLwogc3RhdGljIERFQ0xBUkVfTVVURVhfTE9DS0VEKHhwY19oYl9jaGVja2VyX2V4aXRlZCk7CiAKLS8qIHhwY19kaXNjb3ZlcnkgdGhyZWFkIGV4aXRlZCBub3RpZmljYXRpb24gKi8KKy8qIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSB4cGNfZGlzY292ZXJ5IHRocmVhZCBoYXMgZXhpdGVkICovCiBzdGF0aWMgREVDTEFSRV9NVVRFWF9MT0NLRUQoeHBjX2Rpc2NvdmVyeV9leGl0ZWQpOwogCiAKQEAgLTE2MSw2ICsxODMsMzAgQEAKIHN0YXRpYyB2b2lkIHhwY19rdGhyZWFkX3dhaXRtc2dzKHN0cnVjdCB4cGNfcGFydGl0aW9uICosIHN0cnVjdCB4cGNfY2hhbm5lbCAqKTsKIAogCitzdGF0aWMgaW50IHhwY19zeXN0ZW1fcmVib290KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4cGNfcmVib290X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0geHBjX3N5c3RlbV9yZWJvb3QsCit9OworCisKKy8qCisgKiBUaW1lciBmdW5jdGlvbiB0byBlbmZvcmNlIHRoZSB0aW1lbGltaXQgb24gdGhlIHBhcnRpdGlvbiBkaXNlbmdhZ2UgcmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQKK3hwY190aW1lb3V0X3BhcnRpdGlvbl9kaXNlbmdhZ2VfcmVxdWVzdCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAoc3RydWN0IHhwY19wYXJ0aXRpb24gKikgZGF0YTsKKworCisJREJVR19PTihqaWZmaWVzIDwgcGFydC0+ZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCk7CisKKwkodm9pZCkgeHBjX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHBhcnQpOworCisJREJVR19PTihwYXJ0LT5kaXNlbmdhZ2VfcmVxdWVzdF90aW1lb3V0ICE9IDApOworCURCVUdfT04oeHBjX3BhcnRpdGlvbl9lbmdhZ2VkKDFVTCA8PCBYUENfUEFSVElEKHBhcnQpKSAhPSAwKTsKK30KKworCiAvKgogICogTm90aWZ5IHRoZSBoZWFydGJlYXQgY2hlY2sgdGhyZWFkIHRoYXQgYW4gSVJRIGhhcyBiZWVuIHJlY2VpdmVkLgogICovCkBAIC0yMTQsMTIgKzI2MCw2IEBACiAKIAl3aGlsZSAoISh2b2xhdGlsZSBpbnQpIHhwY19leGl0aW5nKSB7CiAKLQkJLyogd2FpdCBmb3IgSVJRIG9yIHRpbWVvdXQgKi8KLQkJKHZvaWQpIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh4cGNfYWN0X0lSUV93cSwKLQkJCSAgICAobGFzdF9JUlFfY291bnQgPCBhdG9taWNfcmVhZCgmeHBjX2FjdF9JUlFfcmN2ZCkgfHwKLQkJCQkJamlmZmllcyA+PSB4cGNfaGJfY2hlY2tfdGltZW91dCB8fAotCQkJCQkJKHZvbGF0aWxlIGludCkgeHBjX2V4aXRpbmcpKTsKLQogCQlkZXZfZGJnKHhwY19wYXJ0LCAid29rZSB1cCB3aXRoICVkIHRpY2tzIHJlbTsgJWQgSVJRcyBoYXZlICIKIAkJCSJiZWVuIHJlY2VpdmVkXG4iLAogCQkJKGludCkgKHhwY19oYl9jaGVja190aW1lb3V0IC0gamlmZmllcyksCkBAIC0yNDAsNiArMjgwLDcgQEAKIAkJfQogCiAKKwkJLyogY2hlY2sgZm9yIG91dHN0YW5kaW5nIElSUXMgKi8KIAkJbmV3X0lSUV9jb3VudCA9IGF0b21pY19yZWFkKCZ4cGNfYWN0X0lSUV9yY3ZkKTsKIAkJaWYgKGxhc3RfSVJRX2NvdW50IDwgbmV3X0lSUV9jb3VudCB8fCBmb3JjZV9JUlEgIT0gMCkgewogCQkJZm9yY2VfSVJRID0gMDsKQEAgLTI1NywxMiArMjk4LDE4IEBACiAJCQl4cGNfaGJfY2hlY2tfdGltZW91dCA9IGppZmZpZXMgKwogCQkJCQkgICAoeHBjX2hiX2NoZWNrX2ludGVydmFsICogSFopOwogCQl9CisKKwkJLyogd2FpdCBmb3IgSVJRIG9yIHRpbWVvdXQgKi8KKwkJKHZvaWQpIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh4cGNfYWN0X0lSUV93cSwKKwkJCSAgICAobGFzdF9JUlFfY291bnQgPCBhdG9taWNfcmVhZCgmeHBjX2FjdF9JUlFfcmN2ZCkgfHwKKwkJCQkJamlmZmllcyA+PSB4cGNfaGJfY2hlY2tfdGltZW91dCB8fAorCQkJCQkJKHZvbGF0aWxlIGludCkgeHBjX2V4aXRpbmcpKTsKIAl9CiAKIAlkZXZfZGJnKHhwY19wYXJ0LCAiaGVhcnRiZWF0IGNoZWNrZXIgaXMgZXhpdGluZ1xuIik7CiAKIAotCS8qIG1hcmsgdGhpcyB0aHJlYWQgYXMgaW5hY3RpdmUgKi8KKwkvKiBtYXJrIHRoaXMgdGhyZWFkIGFzIGhhdmluZyBleGl0ZWQgKi8KIAl1cCgmeHBjX2hiX2NoZWNrZXJfZXhpdGVkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI4Miw3ICszMjksNyBAQAogCiAJZGV2X2RiZyh4cGNfcGFydCwgImRpc2NvdmVyeSB0aHJlYWQgaXMgZXhpdGluZ1xuIik7CiAKLQkvKiBtYXJrIHRoaXMgdGhyZWFkIGFzIGluYWN0aXZlICovCisJLyogbWFyayB0aGlzIHRocmVhZCBhcyBoYXZpbmcgZXhpdGVkICovCiAJdXAoJnhwY19kaXNjb3ZlcnlfZXhpdGVkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMwOSw3ICszNTYsNyBAQAogCQkJInBhcnRpdGlvbiAlZFxuIiwgWFBDX1BBUlRJRChwYXJ0KSk7CiAKIAkJLyogd2FpdCBhIDEvNCBvZiBhIHNlY29uZCBvciBzbyAqLwotCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyNTApOworCQkodm9pZCkgbXNsZWVwX2ludGVycnVwdGlibGUoMjUwKTsKIAogCQlpZiAocGFydC0+YWN0X3N0YXRlID09IFhQQ19QX0RFQUNUSVZBVElORykgewogCQkJcmV0dXJuIHBhcnQtPnJlYXNvbjsKQEAgLTMzNiw3ICszODMsOCBAQAogeHBjX2NoYW5uZWxfbWdyKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQogewogCXdoaWxlIChwYXJ0LT5hY3Rfc3RhdGUgIT0gWFBDX1BfREVBQ1RJVkFUSU5HIHx8Ci0JCQkJYXRvbWljX3JlYWQoJnBhcnQtPm5jaGFubmVsc19hY3RpdmUpID4gMCkgeworCQkJYXRvbWljX3JlYWQoJnBhcnQtPm5jaGFubmVsc19hY3RpdmUpID4gMCB8fAorCQkJCQkheHBjX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHBhcnQpKSB7CiAKIAkJeHBjX3Byb2Nlc3NfY2hhbm5lbF9hY3Rpdml0eShwYXJ0KTsKIApAQCAtMzYwLDcgKzQwOCw4IEBACiAJCQkJKHZvbGF0aWxlIHU2NCkgcGFydC0+bG9jYWxfSVBJX2FtbyAhPSAwIHx8CiAJCQkJKCh2b2xhdGlsZSB1OCkgcGFydC0+YWN0X3N0YXRlID09CiAJCQkJCQkJWFBDX1BfREVBQ1RJVkFUSU5HICYmCi0JCQkJYXRvbWljX3JlYWQoJnBhcnQtPm5jaGFubmVsc19hY3RpdmUpID09IDApKSk7CisJCQkJYXRvbWljX3JlYWQoJnBhcnQtPm5jaGFubmVsc19hY3RpdmUpID09IDAgJiYKKwkJCQl4cGNfcGFydGl0aW9uX2Rpc2VuZ2FnZWQocGFydCkpKSk7CiAJCWF0b21pY19zZXQoJnBhcnQtPmNoYW5uZWxfbWdyX3JlcXVlc3RzLCAxKTsKIAogCQkvLyA+Pj4gRG9lcyBpdCBuZWVkIHRvIHdha2V1cCBwZXJpb2RpY2FsbHkgYXMgd2VsbD8gSW4gY2FzZSB3ZQpAQCAtNDgyLDcgKzUzMSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCVhQQ19BTExPV19IQihwYXJ0aWQsIHhwY192YXJzKTsKKwl4cGNfYWxsb3dfaGIocGFydGlkLCB4cGNfdmFycyk7CiAJeHBjX0lQSV9zZW5kX2FjdGl2YXRlZChwYXJ0KTsKIAogCkBAIC00OTIsNiArNTQxLDcgQEAKIAkgKi8KIAkodm9pZCkgeHBjX3BhcnRpdGlvbl91cChwYXJ0KTsKIAorCXhwY19kaXNhbGxvd19oYihwYXJ0aWQsIHhwY192YXJzKTsKIAl4cGNfbWFya19wYXJ0aXRpb25faW5hY3RpdmUocGFydCk7CiAKIAlpZiAocGFydC0+cmVhc29uID09IHhwY1JlYWN0aXZhdGluZykgewpAQCAtNjcwLDYgKzcyMCw3IEBACiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKIAlzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoOwogCWludCBuX25lZWRlZDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAogCiAJZGFlbW9uaXplKCJ4cGMlMDJkYyVkIiwgcGFydGlkLCBjaF9udW1iZXIpOwpAQCAtNjgwLDExICs3MzEsMTQgQEAKIAljaCA9ICZwYXJ0LT5jaGFubmVsc1tjaF9udW1iZXJdOwogCiAJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykpIHsKLQkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRCkpOwogCiAJCS8qIGxldCByZWdpc3RlcmVyIGtub3cgdGhhdCBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkICovCiAKLQkJaWYgKGF0b21pY19yZWFkKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDEpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQlpZiAoIShjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNUQ0FMTE9VVCkpIHsKKwkJCWNoLT5mbGFncyB8PSBYUENfQ19DT05ORUNUQ0FMTE9VVDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCiAJCQl4cGNfY29ubmVjdGVkX2NhbGxvdXQoY2gpOwogCiAJCQkvKgpAQCAtNjk5LDE2ICs3NTMsMjggQEAKIAkJCQkJIShjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HKSkgewogCQkJCXhwY19hY3RpdmF0ZV9rdGhyZWFkcyhjaCwgbl9uZWVkZWQpOwogCQkJfQorCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CiAJCX0KIAogCQl4cGNfa3RocmVhZF93YWl0bXNncyhwYXJ0LCBjaCk7CiAJfQogCi0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDAgJiYKLQkJCSgoY2gtPmZsYWdzICYgWFBDX0NfQ09OTkVDVENBTExPVVQpIHx8Ci0JCQkJKGNoLT5yZWFzb24gIT0geHBjVW5yZWdpc3RlcmluZyAmJgotCQkJCQljaC0+cmVhc29uICE9IHhwY090aGVyVW5yZWdpc3RlcmluZykpKSB7Ci0JCXhwY19kaXNjb25uZWN0ZWRfY2FsbG91dChjaCk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQlpZiAoKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RDQUxMT1VUKSAmJgorCQkJCSEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVENBTExPVVQpKSB7CisJCQljaC0+ZmxhZ3MgfD0gWFBDX0NfRElTQ09OTkVDVENBTExPVVQ7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKworCQkJeHBjX2Rpc2Nvbm5lY3RpbmdfY2FsbG91dChjaCk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJfQorCQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnBhcnQtPm5jaGFubmVsc19lbmdhZ2VkKSA9PSAwKSB7CisJCQl4cGNfbWFya19wYXJ0aXRpb25fZGlzZW5nYWdlZChwYXJ0KTsKKwkJCXhwY19JUElfc2VuZF9kaXNlbmdhZ2UocGFydCk7CisJCX0KIAl9CiAKIApAQCAtNzQwLDEyICs4MDYsMzMgQEAKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlwaWRfdCBwaWQ7CiAJdTY0IGFyZ3MgPSBYUENfUEFDS19BUkdTKGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW2NoLT5wYXJ0aWRdOwogCiAKIAl3aGlsZSAobmVlZGVkLS0gPiAwKSB7CisKKwkJLyoKKwkJICogVGhlIGZvbGxvd2luZyBpcyBkb25lIG9uIGJlaGFsZiBvZiB0aGUgbmV3bHkgY3JlYXRlZAorCQkgKiBrdGhyZWFkLiBUaGF0IGt0aHJlYWQgaXMgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZQorCQkgKiBjb3VudGVycGFydCB0byB0aGUgZm9sbG93aW5nIGJlZm9yZSBpdCBleGl0cy4KKwkJICovCisJCSh2b2lkKSB4cGNfcGFydF9yZWYocGFydCk7CisJCXhwY19tc2dxdWV1ZV9yZWYoY2gpOworCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmNoLT5rdGhyZWFkc19hc3NpZ25lZCkgPT0gMSAmJgorCQkgICAgYXRvbWljX2luY19yZXR1cm4oJnBhcnQtPm5jaGFubmVsc19lbmdhZ2VkKSA9PSAxKSB7CisJCQl4cGNfbWFya19wYXJ0aXRpb25fZW5nYWdlZChwYXJ0KTsKKwkJfQorCiAJCXBpZCA9IGtlcm5lbF90aHJlYWQoeHBjX2RhZW1vbml6ZV9rdGhyZWFkLCAodm9pZCAqKSBhcmdzLCAwKTsKIAkJaWYgKHBpZCA8IDApIHsKIAkJCS8qIHRoZSBmb3JrIGZhaWxlZCAqLworCQkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDAgJiYKKwkJCSAgICBhdG9taWNfZGVjX3JldHVybigmcGFydC0+bmNoYW5uZWxzX2VuZ2FnZWQpID09IDApIHsKKwkJCQl4cGNfbWFya19wYXJ0aXRpb25fZGlzZW5nYWdlZChwYXJ0KTsKKwkJCQl4cGNfSVBJX3NlbmRfZGlzZW5nYWdlKHBhcnQpOworCQkJfQorCQkJeHBjX21zZ3F1ZXVlX2RlcmVmKGNoKTsKKwkJCXhwY19wYXJ0X2RlcmVmKHBhcnQpOwogCiAJCQlpZiAoYXRvbWljX3JlYWQoJmNoLT5rdGhyZWFkc19hc3NpZ25lZCkgPAogCQkJCQkJY2gtPmt0aHJlYWRzX2lkbGVfbGltaXQpIHsKQEAgLTc2NSwxNCArODUyLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyoKLQkJICogVGhlIGZvbGxvd2luZyBpcyBkb25lIG9uIGJlaGFsZiBvZiB0aGUgbmV3bHkgY3JlYXRlZAotCQkgKiBrdGhyZWFkLiBUaGF0IGt0aHJlYWQgaXMgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZQotCQkgKiBjb3VudGVycGFydCB0byB0aGUgZm9sbG93aW5nIGJlZm9yZSBpdCBleGl0cy4KLQkJICovCi0JCSh2b2lkKSB4cGNfcGFydF9yZWYoJnhwY19wYXJ0aXRpb25zW2NoLT5wYXJ0aWRdKTsKLQkJeHBjX21zZ3F1ZXVlX3JlZihjaCk7Ci0JCWF0b21pY19pbmMoJmNoLT5rdGhyZWFkc19hc3NpZ25lZCk7CiAJCWNoLT5rdGhyZWFkc19jcmVhdGVkKys7CS8vID4+PiB0ZW1wb3JhcnkgZGVidWcgb25seSEhIQogCX0KIH0KQEAgLTc4MSw4NyArODYwLDE0MiBAQAogdm9pZAogeHBjX2Rpc2Nvbm5lY3Rfd2FpdChpbnQgY2hfbnVtYmVyKQogeworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXBhcnRpZF90IHBhcnRpZDsKIAlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydDsKIAlzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoOworCWludCB3YWtldXBfY2hhbm5lbF9tZ3I7CiAKIAogCS8qIG5vdyB3YWl0IGZvciBhbGwgY2FsbG91dHMgdG8gdGhlIGNhbGxlcidzIGZ1bmN0aW9uIHRvIGNlYXNlICovCiAJZm9yIChwYXJ0aWQgPSAxOyBwYXJ0aWQgPCBYUF9NQVhfUEFSVElUSU9OUzsgcGFydGlkKyspIHsKIAkJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOwogCi0JCWlmICh4cGNfcGFydF9yZWYocGFydCkpIHsKLQkJCWNoID0gJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl07Ci0KLS8vID4+PiBob3cgZG8gd2Uga2VlcCBmcm9tIGZhbGxpbmcgaW50byB0aGUgd2luZG93IGJldHdlZW4gb3VyIGNoZWNrIGFuZCBnb2luZwotLy8gPj4+IGRvd24gYW5kIGNvbWluZyBiYWNrIHVwIHdoZXJlIHNlbWEgaXMgcmUtaW5pdGVkPwotCQkJaWYgKGNoLT5mbGFncyAmIFhQQ19DX1NFVFVQKSB7Ci0JCQkJKHZvaWQpIGRvd24oJmNoLT50ZWFyZG93bl9zZW1hKTsKLQkJCX0KLQotCQkJeHBjX3BhcnRfZGVyZWYocGFydCk7CisJCWlmICgheHBjX3BhcnRfcmVmKHBhcnQpKSB7CisJCQljb250aW51ZTsKIAkJfQorCisJCWNoID0gJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl07CisKKwkJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfV0RJU0NPTk5FQ1QpKSB7CisJCQl4cGNfcGFydF9kZXJlZihwYXJ0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJKHZvaWQpIGRvd24oJmNoLT53ZGlzY29ubmVjdF9zZW1hKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCURCVUdfT04oIShjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNURUQpKTsKKwkJd2FrZXVwX2NoYW5uZWxfbWdyID0gMDsKKworCQlpZiAoY2gtPmRlbGF5ZWRfSVBJX2ZsYWdzKSB7CisJCQlpZiAocGFydC0+YWN0X3N0YXRlICE9IFhQQ19QX0RFQUNUSVZBVElORykgeworCQkJCXNwaW5fbG9jaygmcGFydC0+SVBJX2xvY2spOworCQkJCVhQQ19TRVRfSVBJX0ZMQUdTKHBhcnQtPmxvY2FsX0lQSV9hbW8sCisJCQkJCWNoLT5udW1iZXIsIGNoLT5kZWxheWVkX0lQSV9mbGFncyk7CisJCQkJc3Bpbl91bmxvY2soJnBhcnQtPklQSV9sb2NrKTsKKwkJCQl3YWtldXBfY2hhbm5lbF9tZ3IgPSAxOworCQkJfQorCQkJY2gtPmRlbGF5ZWRfSVBJX2ZsYWdzID0gMDsKKwkJfQorCisJCWNoLT5mbGFncyAmPSB+WFBDX0NfV0RJU0NPTk5FQ1Q7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCisJCWlmICh3YWtldXBfY2hhbm5lbF9tZ3IpIHsKKwkJCXhwY193YWtldXBfY2hhbm5lbF9tZ3IocGFydCk7CisJCX0KKworCQl4cGNfcGFydF9kZXJlZihwYXJ0KTsKIAl9CiB9CiAKIAogc3RhdGljIHZvaWQKLXhwY19kb19leGl0KHZvaWQpCit4cGNfZG9fZXhpdChlbnVtIHhwY19yZXR2YWwgcmVhc29uKQogewogCXBhcnRpZF90IHBhcnRpZDsKIAlpbnQgYWN0aXZlX3BhcnRfY291bnQ7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CisJdW5zaWduZWQgbG9uZyBwcmludG1zZ190aW1lOwogCiAKLQkvKiBub3cgaXQncyB0aW1lIHRvIGVsaW1pbmF0ZSBvdXIgaGVhcnRiZWF0ICovCi0JZGVsX3RpbWVyX3N5bmMoJnhwY19oYl90aW1lcik7Ci0JeHBjX3ZhcnMtPmhlYXJ0YmVhdGluZ190b19tYXNrID0gMDsKLQotCS8qIGluZGljYXRlIHRvIG90aGVycyB0aGF0IG91ciByZXNlcnZlZCBwYWdlIGlzIHVuaW5pdGlhbGl6ZWQgKi8KLQl4cGNfcnN2ZF9wYWdlLT52YXJzX3BhID0gMDsKKwkvKiBhICdybW1vZCBYUEMnIGFuZCBhICdyZWJvb3QnIGNhbm5vdCBib3RoIGVuZCB1cCBoZXJlIHRvZ2V0aGVyICovCisJREJVR19PTih4cGNfZXhpdGluZyA9PSAxKTsKIAogCS8qCi0JICogSWdub3JlIGFsbCBpbmNvbWluZyBpbnRlcnJ1cHRzLiBXaXRob3V0IGludGVydXB0cyB0aGUgaGVhcnRiZWF0Ci0JICogY2hlY2tlciB3b24ndCBhY3RpdmF0ZSBhbnkgbmV3IHBhcnRpdGlvbnMgdGhhdCBtYXkgY29tZSB1cC4KLQkgKi8KLQlmcmVlX2lycShTR0lfWFBDX0FDVElWQVRFLCBOVUxMKTsKLQotCS8qCi0JICogQ2F1c2UgdGhlIGhlYXJ0YmVhdCBjaGVja2VyIGFuZCB0aGUgZGlzY292ZXJ5IHRocmVhZHMgdG8gZXhpdC4KLQkgKiBXZSBkb24ndCB3YW50IHRoZW0gYXR0ZW1wdGluZyB0byBhY3RpdmF0ZSBuZXcgcGFydGl0aW9ucyBhcyB3ZQotCSAqIHRyeSB0byBkZWFjdGl2YXRlIHRoZSBleGlzdGluZyBvbmVzLgorCSAqIExldCB0aGUgaGVhcnRiZWF0IGNoZWNrZXIgdGhyZWFkIGFuZCB0aGUgZGlzY292ZXJ5IHRocmVhZAorCSAqIChpZiBvbmUgaXMgcnVubmluZykga25vdyB0aGF0IHRoZXkgc2hvdWxkIGV4aXQuIEFsc28gd2FrZSB1cAorCSAqIHRoZSBoZWFydGJlYXQgY2hlY2tlciB0aHJlYWQgaW4gY2FzZSBpdCdzIHNsZWVwaW5nLgogCSAqLwogCXhwY19leGl0aW5nID0gMTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnhwY19hY3RfSVJRX3dxKTsKIAotCS8qIHdhaXQgZm9yIHRoZSBoZWFydGJlYXQgY2hlY2tlciB0aHJlYWQgdG8gbWFyayBpdHNlbGYgaW5hY3RpdmUgKi8KLQlkb3duKCZ4cGNfaGJfY2hlY2tlcl9leGl0ZWQpOworCS8qIGlnbm9yZSBhbGwgaW5jb21pbmcgaW50ZXJydXB0cyAqLworCWZyZWVfaXJxKFNHSV9YUENfQUNUSVZBVEUsIE5VTEwpOwogCi0JLyogd2FpdCBmb3IgdGhlIGRpc2NvdmVyeSB0aHJlYWQgdG8gbWFyayBpdHNlbGYgaW5hY3RpdmUgKi8KKwkvKiB3YWl0IGZvciB0aGUgZGlzY292ZXJ5IHRocmVhZCB0byBleGl0ICovCiAJZG93bigmeHBjX2Rpc2NvdmVyeV9leGl0ZWQpOwogCisJLyogd2FpdCBmb3IgdGhlIGhlYXJ0YmVhdCBjaGVja2VyIHRocmVhZCB0byBleGl0ICovCisJZG93bigmeHBjX2hiX2NoZWNrZXJfZXhpdGVkKTsKIAotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDMwMCk7CisKKwkvKiBzbGVlcCBmb3IgYSAxLzMgb2YgYSBzZWNvbmQgb3Igc28gKi8KKwkodm9pZCkgbXNsZWVwX2ludGVycnVwdGlibGUoMzAwKTsKIAogCiAJLyogd2FpdCBmb3IgYWxsIHBhcnRpdGlvbnMgdG8gYmVjb21lIGluYWN0aXZlICovCiAKKwlwcmludG1zZ190aW1lID0gamlmZmllczsKKwogCWRvIHsKIAkJYWN0aXZlX3BhcnRfY291bnQgPSAwOwogCiAJCWZvciAocGFydGlkID0gMTsgcGFydGlkIDwgWFBfTUFYX1BBUlRJVElPTlM7IHBhcnRpZCsrKSB7CiAJCQlwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07Ci0JCQlpZiAocGFydC0+YWN0X3N0YXRlICE9IFhQQ19QX0lOQUNUSVZFKSB7Ci0JCQkJYWN0aXZlX3BhcnRfY291bnQrKzsKIAotCQkJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTihwYXJ0LCB4cGNVbmxvYWRpbmcpOworCQkJaWYgKHhwY19wYXJ0aXRpb25fZGlzZW5nYWdlZChwYXJ0KSAmJgorCQkJCQlwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfSU5BQ1RJVkUpIHsKKwkJCQljb250aW51ZTsKIAkJCX0KKworCQkJYWN0aXZlX3BhcnRfY291bnQrKzsKKworCQkJWFBDX0RFQUNUSVZBVEVfUEFSVElUSU9OKHBhcnQsIHJlYXNvbik7CiAJCX0KIAotCQlpZiAoYWN0aXZlX3BhcnRfY291bnQpCi0JCQltc2xlZXBfaW50ZXJydXB0aWJsZSgzMDApOwotCX0gd2hpbGUgKGFjdGl2ZV9wYXJ0X2NvdW50ID4gMCk7CisJCWlmIChhY3RpdmVfcGFydF9jb3VudCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQogCisJCWlmIChqaWZmaWVzID49IHByaW50bXNnX3RpbWUpIHsKKwkJCWRldl9pbmZvKHhwY19wYXJ0LCAid2FpdGluZyBmb3IgcGFydGl0aW9ucyB0byAiCisJCQkJImRlYWN0aXZhdGUvZGlzZW5nYWdlLCBhY3RpdmUgY291bnQ9JWQsIHJlbW90ZSAiCisJCQkJImVuZ2FnZWQ9MHglbHhcbiIsIGFjdGl2ZV9wYXJ0X2NvdW50LAorCQkJCXhwY19wYXJ0aXRpb25fZW5nYWdlZCgxVUwgPDwgcGFydGlkKSk7CisKKwkJCXByaW50bXNnX3RpbWUgPSBqaWZmaWVzICsKKwkJCQkJKFhQQ19ESVNFTkdBR0VfUFJJTlRNU0dfSU5URVJWQUwgKiBIWik7CisJCX0KKworCQkvKiBzbGVlcCBmb3IgYSAxLzMgb2YgYSBzZWNvbmQgb3Igc28gKi8KKwkJKHZvaWQpIG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDMwMCk7CisKKwl9IHdoaWxlICgxKTsKKworCURCVUdfT04oeHBjX3BhcnRpdGlvbl9lbmdhZ2VkKC0xVUwpKTsKKworCisJLyogaW5kaWNhdGUgdG8gb3RoZXJzIHRoYXQgb3VyIHJlc2VydmVkIHBhZ2UgaXMgdW5pbml0aWFsaXplZCAqLworCXhwY19yc3ZkX3BhZ2UtPnZhcnNfcGEgPSAwOworCisJLyogbm93IGl0J3MgdGltZSB0byBlbGltaW5hdGUgb3VyIGhlYXJ0YmVhdCAqLworCWRlbF90aW1lcl9zeW5jKCZ4cGNfaGJfdGltZXIpOworCURCVUdfT04oeHBjX3ZhcnMtPmhlYXJ0YmVhdGluZ190b19tYXNrICE9IDApOworCisJLyogdGFrZSBvdXJzZWx2ZXMgb2ZmIG9mIHRoZSByZWJvb3Rfbm90aWZpZXJfbGlzdCAqLworCSh2b2lkKSB1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmeHBjX3JlYm9vdF9ub3RpZmllcik7CiAKIAkvKiBjbG9zZSBkb3duIHByb3RlY3Rpb25zIGZvciBJUEkgb3BlcmF0aW9ucyAqLwogCXhwY19yZXN0cmljdF9JUElfb3BzKCk7CkBAIC04NzYsNiArMTAxMCwzNCBAQAogfQogCiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYmVpbmcgcmVib290ZWQuCisgKi8KK3N0YXRpYyBpbnQKK3hwY19zeXN0ZW1fcmVib290KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnVudXNlZCkKK3sKKwllbnVtIHhwY19yZXR2YWwgcmVhc29uOworCisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTWVNfUkVTVEFSVDoKKwkJcmVhc29uID0geHBjU3lzdGVtUmVib290OworCQlicmVhazsKKwljYXNlIFNZU19IQUxUOgorCQlyZWFzb24gPSB4cGNTeXN0ZW1IYWx0OworCQlicmVhazsKKwljYXNlIFNZU19QT1dFUl9PRkY6CisJCXJlYXNvbiA9IHhwY1N5c3RlbVBvd2Vyb2ZmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWFzb24gPSB4cGNTeXN0ZW1Hb2luZ0Rvd247CisJfQorCisJeHBjX2RvX2V4aXQocmVhc29uKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKwogaW50IF9faW5pdAogeHBjX2luaXQodm9pZCkKIHsKQEAgLTg5MSwxMSArMTA1MywxMSBAQAogCiAJLyoKIAkgKiB4cGNfcmVtb3RlX2NvcHlfYnVmZmVyIGlzIHVzZWQgYXMgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBidGVfY29weSduZwotCSAqIGJvdGggYSBwYXJ0aXRpb24ncyByZXNlcnZlZCBwYWdlIGFuZCBpdHMgWFBDIHZhcmlhYmxlcy4gSXRzIHNpemUgd2FzCi0JICogYmFzZWQgb24gdGhlIHNpemUgb2YgYSByZXNlcnZlZCBwYWdlLiBTbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZQotCSAqIFhQQyB2YXJpYWJsZXMgd2lsbCBmaXQgYXMgd2VsbC4KKwkgKiB2YXJpb3VzIHBvcnRpb25zIG9mIGEgcGFydGl0aW9uJ3MgcmVzZXJ2ZWQgcGFnZS4gSXRzIHNpemUgaXMgYmFzZWQKKwkgKiBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgcGFnZSBoZWFkZXIgYW5kIHBhcnRfbmFzaWRzIG1hc2suIFNvIHdlCisJICogbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgb3RoZXIgaXRlbXMgd2lsbCBmaXQgYXMgd2VsbC4KIAkgKi8KLQlpZiAoWFBDX1ZBUlNfQUxJR05FRF9TSVpFID4gWFBDX1JTVkRfUEFHRV9BTElHTkVEX1NJWkUpIHsKKwlpZiAoWFBDX1JQX1ZBUlNfU0laRSA+IFhQQ19SUF9IRUFERVJfU0laRSArIFhQX05BU0lEX01BU0tfQllURVMpIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgInhwY19yZW1vdGVfY29weV9idWZmZXIgaXMgbm90IGJpZyBlbm91Z2hcbiIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KQEAgLTkyNCw2ICsxMDg2LDEyIEBACiAJCXNwaW5fbG9ja19pbml0KCZwYXJ0LT5hY3RfbG9jayk7CiAJCXBhcnQtPmFjdF9zdGF0ZSA9IFhQQ19QX0lOQUNUSVZFOwogCQlYUENfU0VUX1JFQVNPTihwYXJ0LCAwLCAwKTsKKworCQlpbml0X3RpbWVyKCZwYXJ0LT5kaXNlbmdhZ2VfcmVxdWVzdF90aW1lcik7CisJCXBhcnQtPmRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVyLmZ1bmN0aW9uID0KKwkJCQl4cGNfdGltZW91dF9wYXJ0aXRpb25fZGlzZW5nYWdlX3JlcXVlc3Q7CisJCXBhcnQtPmRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGFydDsKKwogCQlwYXJ0LT5zZXR1cF9zdGF0ZSA9IFhQQ19QX1VOU0VUOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwYXJ0LT50ZWFyZG93bl93cSk7CiAJCWF0b21pY19zZXQoJnBhcnQtPnJlZmVyZW5jZXMsIDApOwpAQCAtOTgwLDYgKzExNDgsMTMgQEAKIAl9CiAKIAorCS8qIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIHJlYm9vdF9ub3RpZmllcl9saXN0ICovCisJcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ4cGNfcmVib290X25vdGlmaWVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X3dhcm4oeHBjX3BhcnQsICJjYW4ndCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXJcbiIpOworCX0KKworCiAJLyoKIAkgKiBTZXQgdGhlIGJlYXRpbmcgdG8gb3RoZXIgcGFydGl0aW9ucyBpbnRvIG1vdGlvbi4gIFRoaXMgaXMKIAkgKiB0aGUgbGFzdCByZXF1aXJlbWVudCBmb3Igb3RoZXIgcGFydGl0aW9ucycgZGlzY292ZXJ5IHRvCkBAIC0xMDAxLDYgKzExNzYsOSBAQAogCQkvKiBpbmRpY2F0ZSB0byBvdGhlcnMgdGhhdCBvdXIgcmVzZXJ2ZWQgcGFnZSBpcyB1bmluaXRpYWxpemVkICovCiAJCXhwY19yc3ZkX3BhZ2UtPnZhcnNfcGEgPSAwOwogCisJCS8qIHRha2Ugb3Vyc2VsdmVzIG9mZiBvZiB0aGUgcmVib290X25vdGlmaWVyX2xpc3QgKi8KKwkJKHZvaWQpIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ4cGNfcmVib290X25vdGlmaWVyKTsKKwogCQlkZWxfdGltZXJfc3luYygmeHBjX2hiX3RpbWVyKTsKIAkJZnJlZV9pcnEoU0dJX1hQQ19BQ1RJVkFURSwgTlVMTCk7CiAJCXhwY19yZXN0cmljdF9JUElfb3BzKCk7CkBAIC0xMDI0LDcgKzEyMDIsNyBAQAogCQkvKiBtYXJrIHRoaXMgbmV3IHRocmVhZCBhcyBhIG5vbi1zdGFydGVyICovCiAJCXVwKCZ4cGNfZGlzY292ZXJ5X2V4aXRlZCk7CiAKLQkJeHBjX2RvX2V4aXQoKTsKKwkJeHBjX2RvX2V4aXQoeHBjVW5sb2FkaW5nKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTEwNDMsNyArMTIyMSw3IEBACiB2b2lkIF9fZXhpdAogeHBjX2V4aXQodm9pZCkKIHsKLQl4cGNfZG9fZXhpdCgpOworCXhwY19kb19leGl0KHhwY1VubG9hZGluZyk7CiB9CiBtb2R1bGVfZXhpdCh4cGNfZXhpdCk7CiAKQEAgLTEwNjAsMyArMTIzOCw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKHhwY19oYl9jaGVja19pbnRlcnZhbCwgIk51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gIgogCQkiaGVhcnRiZWF0IGNoZWNrcy4iKTsKIAorbW9kdWxlX3BhcmFtKHhwY19kaXNlbmdhZ2VfcmVxdWVzdF90aW1lbGltaXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHhwY19kaXNlbmdhZ2VfcmVxdWVzdF90aW1lbGltaXQsICJOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0ICIKKwkJImZvciBkaXNlbmdhZ2UgcmVxdWVzdCB0byBjb21wbGV0ZS4iKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwppbmRleCA1NzgyNjVlLi41ODFlMTEzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwpAQCAtNDQsMTYgKzQ0LDE5IEBACiAKIAogLyogb3JpZ2luYWwgcHJvdGVjdGlvbiB2YWx1ZXMgZm9yIGVhY2ggbm9kZSAqLwotdTY0IHhwY19wcm90X3ZlY1tNQVhfQ09NUEFDVF9OT0RFU107Cit1NjQgeHBjX3Byb3RfdmVjW01BWF9OVU1OT0RFU107CiAKIAotLyogdGhpcyBwYXJ0aXRpb24ncyByZXNlcnZlZCBwYWdlICovCisvKiB0aGlzIHBhcnRpdGlvbidzIHJlc2VydmVkIHBhZ2UgcG9pbnRlcnMgKi8KIHN0cnVjdCB4cGNfcnN2ZF9wYWdlICp4cGNfcnN2ZF9wYWdlOwotCi0vKiB0aGlzIHBhcnRpdGlvbidzIFhQQyB2YXJpYWJsZXMgKHdpdGhpbiB0aGUgcmVzZXJ2ZWQgcGFnZSkgKi8KK3N0YXRpYyB1NjQgKnhwY19wYXJ0X25hc2lkczsKK3N0YXRpYyB1NjQgKnhwY19tYWNoX25hc2lkczsKIHN0cnVjdCB4cGNfdmFycyAqeHBjX3ZhcnM7CiBzdHJ1Y3QgeHBjX3ZhcnNfcGFydCAqeHBjX3ZhcnNfcGFydDsKIAorc3RhdGljIGludCB4cF9uYXNpZF9tYXNrX2J5dGVzOwkvKiBhY3R1YWwgc2l6ZSBpbiBieXRlcyBvZiBuYXNpZCBtYXNrICovCitzdGF0aWMgaW50IHhwX25hc2lkX21hc2tfd29yZHM7CS8qIGFjdHVhbCBzaXplIGluIHdvcmRzIG9mIG5hc2lkIG1hc2sgKi8KKwogCiAvKgogICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGVhY2ggZW50cnkgb2YgeHBjX3BhcnRpdGlvbnNbXSBpcyBjYWNoZWxpbmUKQEAgLTY1LDIwICs2OCwxNiBAQAogCiAKIC8qCi0gKiBHZW5lcmljIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIGEgbG9jYWwgY29weSBvZiB0aGUgcmVtb3RlIHBhcnRpdGlvbnMKLSAqIHJlc2VydmVkIHBhZ2Ugb3IgWFBDIHZhcmlhYmxlcy4KKyAqIEdlbmVyaWMgYnVmZmVyIHVzZWQgdG8gc3RvcmUgYSBsb2NhbCBjb3B5IG9mIHBvcnRpb25zIG9mIGEgcmVtb3RlCisgKiBwYXJ0aXRpb24ncyByZXNlcnZlZCBwYWdlIChlaXRoZXIgaXRzIGhlYWRlciBhbmQgcGFydF9uYXNpZHMgbWFzaywKKyAqIG9yIGl0cyB2YXJzKS4KICAqCiAgKiB4cGNfZGlzY292ZXJ5IHJ1bnMgb25seSBvbmNlIGFuZCBpcyBhIHNlcGVyYXRlIHRocmVhZCB0aGF0IGlzCiAgKiB2ZXJ5IGxpa2VseSBnb2luZyB0byBiZSBwcm9jZXNzaW5nIGluIHBhcmFsbGVsIHdpdGggcmVjZWl2aW5nCiAgKiBpbnRlcnJ1cHRzLgogICovCi1jaGFyIF9fX19jYWNoZWxpbmVfYWxpZ25lZAotCQl4cGNfcmVtb3RlX2NvcHlfYnVmZmVyW1hQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFXTsKLQotCi0vKiBzeXN0dW5lIHJlbGF0ZWQgdmFyaWFibGVzICovCi1pbnQgeHBjX2hiX2ludGVydmFsID0gWFBDX0hCX0RFRkFVTFRfSU5URVJWQUw7Ci1pbnQgeHBjX2hiX2NoZWNrX2ludGVydmFsID0gWFBDX0hCX0NIRUNLX0RFRkFVTFRfVElNRU9VVDsKK2NoYXIgX19fX2NhY2hlbGluZV9hbGlnbmVkIHhwY19yZW1vdGVfY29weV9idWZmZXJbWFBDX1JQX0hFQURFUl9TSVpFICsKKwkJCQkJCQlYUF9OQVNJRF9NQVNLX0JZVEVTXTsKIAogCiAvKgpAQCAtODYsMTMgKzg1LDE2IEBACiAgKiBmb3IgdGhhdCBuYXNpZC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgb24gYW55IGVycm9yLgogICovCiBzdGF0aWMgdTY0Ci14cGNfZ2V0X3JzdmRfcGFnZV9wYShpbnQgbmFzaWQsIHU2NCBidWYsIHU2NCBidWZfc2l6ZSkKK3hwY19nZXRfcnN2ZF9wYWdlX3BhKGludCBuYXNpZCkKIHsKIAlidGVfcmVzdWx0X3QgYnRlX3JlczsKIAlzNjQgc3RhdHVzOwogCXU2NCBjb29raWUgPSAwOwogCXU2NCBycF9wYSA9IG5hc2lkOwkvKiBzZWVkIHdpdGggbmFzaWQgKi8KIAl1NjQgbGVuID0gMDsKKwl1NjQgYnVmID0gYnVmOworCXU2NCBidWZfbGVuID0gMDsKKwl2b2lkICpidWZfYmFzZSA9IE5VTEw7CiAKIAogCXdoaWxlICgxKSB7CkBAIC0xMDgsMTMgKzExMCwyMiBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAobGVuID4gYnVmX3NpemUpIHsKLQkJCWRldl9lcnIoeHBjX3BhcnQsICJsZW4gKD0weCUwMTZseCkgPiBidWZfc2l6ZVxuIiwgbGVuKTsKLQkJCXN0YXR1cyA9IFNBTFJFVF9FUlJPUjsKLQkJCWJyZWFrOworCQlpZiAoTDFfQ0FDSEVfQUxJR04obGVuKSA+IGJ1Zl9sZW4pIHsKKwkJCWlmIChidWZfYmFzZSAhPSBOVUxMKSB7CisJCQkJa2ZyZWUoYnVmX2Jhc2UpOworCQkJfQorCQkJYnVmX2xlbiA9IEwxX0NBQ0hFX0FMSUdOKGxlbik7CisJCQlidWYgPSAodTY0KSB4cGNfa21hbGxvY19jYWNoZWxpbmVfYWxpZ25lZChidWZfbGVuLAorCQkJCQkJCUdGUF9LRVJORUwsICZidWZfYmFzZSk7CisJCQlpZiAoYnVmX2Jhc2UgPT0gTlVMTCkgeworCQkJCWRldl9lcnIoeHBjX3BhcnQsICJ1bmFibGUgdG8ga21hbGxvYyAiCisJCQkJCSJsZW49MHglMDE2bHhcbiIsIGJ1Zl9sZW4pOworCQkJCXN0YXR1cyA9IFNBTFJFVF9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCi0JCWJ0ZV9yZXMgPSB4cF9idGVfY29weShycF9wYSwgaWE2NF90cGEoYnVmKSwgYnVmX3NpemUsCisJCWJ0ZV9yZXMgPSB4cF9idGVfY29weShycF9wYSwgaWE2NF90cGEoYnVmKSwgYnVmX2xlbiwKIAkJCQkJKEJURV9OT1RJRlkgfCBCVEVfV0FDUVVJUkUpLCBOVUxMKTsKIAkJaWYgKGJ0ZV9yZXMgIT0gQlRFX1NVQ0NFU1MpIHsKIAkJCWRldl9kYmcoeHBjX3BhcnQsICJ4cF9idGVfY29weSBmYWlsZWQgJWlcbiIsIGJ0ZV9yZXMpOwpAQCAtMTIzLDYgKzEzNCwxMCBAQAogCQl9CiAJfQogCisJaWYgKGJ1Zl9iYXNlICE9IE5VTEwpIHsKKwkJa2ZyZWUoYnVmX2Jhc2UpOworCX0KKwogCWlmIChzdGF0dXMgIT0gU0FMUkVUX09LKSB7CiAJCXJwX3BhID0gMDsKIAl9CkBAIC0xNDEsMTUgKzE1NiwxNSBAQAogewogCXN0cnVjdCB4cGNfcnN2ZF9wYWdlICpycDsKIAlBTU9fdCAqYW1vc19wYWdlOwotCXU2NCBycF9wYSwgbmV4dF9jbCwgbmFzaWRfYXJyYXkgPSAwOworCXU2NCBycF9wYSwgbmFzaWRfYXJyYXkgPSAwOwogCWludCBpLCByZXQ7CiAKIAogCS8qIGdldCB0aGUgbG9jYWwgcmVzZXJ2ZWQgcGFnZSdzIGFkZHJlc3MgKi8KIAotCXJwX3BhID0geHBjX2dldF9yc3ZkX3BhZ2VfcGEoY25vZGVpZF90b19uYXNpZCgwKSwKLQkJCQkJKHU2NCkgeHBjX3JlbW90ZV9jb3B5X2J1ZmZlciwKLQkJCQkJCVhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlycF9wYSA9IHhwY19nZXRfcnN2ZF9wYWdlX3BhKGNwdWlkX3RvX25hc2lkKHNtcF9wcm9jZXNzb3JfaWQoKSkpOworCXByZWVtcHRfZW5hYmxlKCk7CiAJaWYgKHJwX3BhID09IDApIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgIlNBTCBmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXNlcnZlZCBwYWdlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNjQsMTIgKzE3OSwxOSBAQAogCiAJcnAtPnZlcnNpb24gPSBYUENfUlBfVkVSU0lPTjsKIAotCS8qCi0JICogUGxhY2UgdGhlIFhQQyB2YXJpYWJsZXMgb24gdGhlIGNhY2hlIGxpbmUgZm9sbG93aW5nIHRoZQotCSAqIHJlc2VydmVkIHBhZ2Ugc3RydWN0dXJlLgotCSAqLwotCW5leHRfY2wgPSAodTY0KSBycCArIFhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFOwotCXhwY192YXJzID0gKHN0cnVjdCB4cGNfdmFycyAqKSBuZXh0X2NsOworCS8qIGVzdGFibGlzaCB0aGUgYWN0dWFsIHNpemVzIG9mIHRoZSBuYXNpZCBtYXNrcyAqLworCWlmIChycC0+U0FMX3ZlcnNpb24gPT0gMSkgeworCQkvKiBTQUxfdmVyc2lvbiAxIGRpZG4ndCBzZXQgdGhlIG5hc2lkc19zaXplIGZpZWxkICovCisJCXJwLT5uYXNpZHNfc2l6ZSA9IDEyODsKKwl9CisJeHBfbmFzaWRfbWFza19ieXRlcyA9IHJwLT5uYXNpZHNfc2l6ZTsKKwl4cF9uYXNpZF9tYXNrX3dvcmRzID0geHBfbmFzaWRfbWFza19ieXRlcyAvIDg7CisKKwkvKiBzZXR1cCB0aGUgcG9pbnRlcnMgdG8gdGhlIHZhcmlvdXMgaXRlbXMgaW4gdGhlIHJlc2VydmVkIHBhZ2UgKi8KKwl4cGNfcGFydF9uYXNpZHMgPSBYUENfUlBfUEFSVF9OQVNJRFMocnApOworCXhwY19tYWNoX25hc2lkcyA9IFhQQ19SUF9NQUNIX05BU0lEUyhycCk7CisJeHBjX3ZhcnMgPSBYUENfUlBfVkFSUyhycCk7CisJeHBjX3ZhcnNfcGFydCA9IFhQQ19SUF9WQVJTX1BBUlQocnApOwogCiAJLyoKIAkgKiBCZWZvcmUgY2xlYXJpbmcgeHBjX3ZhcnMsIHNlZSBpZiBhIHBhZ2Ugb2YgQU1PcyBoYWQgYmVlbiBwcmV2aW91c2x5CkBAIC0yMjEsMzMgKzI0MywzMiBAQAogCQlhbW9zX3BhZ2UgPSAoQU1PX3QgKikgVE9fQU1PKCh1NjQpIGFtb3NfcGFnZSk7CiAJfQogCisJLyogY2xlYXIgeHBjX3ZhcnMgKi8KIAltZW1zZXQoeHBjX3ZhcnMsIDAsIHNpemVvZihzdHJ1Y3QgeHBjX3ZhcnMpKTsKIAotCS8qCi0JICogUGxhY2UgdGhlIFhQQyBwZXIgcGFydGl0aW9uIHNwZWNpZmljIHZhcmlhYmxlcyBvbiB0aGUgY2FjaGUgbGluZQotCSAqIGZvbGxvd2luZyB0aGUgWFBDIHZhcmlhYmxlcyBzdHJ1Y3R1cmUuCi0JICovCi0JbmV4dF9jbCArPSBYUENfVkFSU19BTElHTkVEX1NJWkU7Ci0JbWVtc2V0KCh1NjQgKikgbmV4dF9jbCwgMCwgc2l6ZW9mKHN0cnVjdCB4cGNfdmFyc19wYXJ0KSAqCi0JCQkJCQkJWFBfTUFYX1BBUlRJVElPTlMpOwotCXhwY192YXJzX3BhcnQgPSAoc3RydWN0IHhwY192YXJzX3BhcnQgKikgbmV4dF9jbDsKLQl4cGNfdmFycy0+dmFyc19wYXJ0X3BhID0gX19wYShuZXh0X2NsKTsKLQogCXhwY192YXJzLT52ZXJzaW9uID0gWFBDX1ZfVkVSU0lPTjsKIAl4cGNfdmFycy0+YWN0X25hc2lkID0gY3B1aWRfdG9fbmFzaWQoMCk7CiAJeHBjX3ZhcnMtPmFjdF9waHlzX2NwdWlkID0gY3B1X3BoeXNpY2FsX2lkKDApOworCXhwY192YXJzLT52YXJzX3BhcnRfcGEgPSBfX3BhKHhwY192YXJzX3BhcnQpOworCXhwY192YXJzLT5hbW9zX3BhZ2VfcGEgPSBpYTY0X3RwYSgodTY0KSBhbW9zX3BhZ2UpOwogCXhwY192YXJzLT5hbW9zX3BhZ2UgPSBhbW9zX3BhZ2U7ICAvKiBzYXZlIGZvciBuZXh0IGxvYWQgb2YgWFBDICovCiAKIAotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgYWN0aXZhdGlvbiByZWxhdGVkIEFNTyB2YXJpYWJsZXMuCi0JICovCi0JeHBjX3ZhcnMtPmFjdF9hbW9zID0geHBjX0lQSV9pbml0KFhQX01BWF9QQVJUSVRJT05TKTsKLQlmb3IgKGkgPSAxOyBpIDwgWFBfTkFTSURfTUFTS19XT1JEUzsgaSsrKSB7Ci0JCXhwY19JUElfaW5pdChpICsgWFBfTUFYX1BBUlRJVElPTlMpOworCS8qIGNsZWFyIHhwY192YXJzX3BhcnQgKi8KKwltZW1zZXQoKHU2NCAqKSB4cGNfdmFyc19wYXJ0LCAwLCBzaXplb2Yoc3RydWN0IHhwY192YXJzX3BhcnQpICoKKwkJCQkJCQlYUF9NQVhfUEFSVElUSU9OUyk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBhY3RpdmF0ZSBJUlEgcmVsYXRlZCBBTU8gdmFyaWFibGVzICovCisJZm9yIChpID0gMDsgaSA8IHhwX25hc2lkX21hc2tfd29yZHM7IGkrKykgeworCQkodm9pZCkgeHBjX0lQSV9pbml0KFhQQ19BQ1RJVkFURV9JUlFfQU1PUyArIGkpOwogCX0KLQkvKiBleHBvcnQgQU1PIHBhZ2UncyBwaHlzaWNhbCBhZGRyZXNzIHRvIG90aGVyIHBhcnRpdGlvbnMgKi8KLQl4cGNfdmFycy0+YW1vc19wYWdlX3BhID0gaWE2NF90cGEoKHU2NCkgeHBjX3ZhcnMtPmFtb3NfcGFnZSk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBlbmdhZ2VkIHJlbW90ZSBwYXJ0aXRpb25zIHJlbGF0ZWQgQU1PIHZhcmlhYmxlcyAqLworCSh2b2lkKSB4cGNfSVBJX2luaXQoWFBDX0VOR0FHRURfUEFSVElUSU9OU19BTU8pOworCSh2b2lkKSB4cGNfSVBJX2luaXQoWFBDX0RJU0VOR0FHRV9SRVFVRVNUX0FNTyk7CisKKwkvKiB0aW1lc3RhbXAgb2Ygd2hlbiByZXNlcnZlZCBwYWdlIHdhcyBzZXR1cCBieSBYUEMgKi8KKwlycC0+c3RhbXAgPSBDVVJSRU5UX1RJTUU7CiAKIAkvKgogCSAqIFRoaXMgc2lnbmlmaWVzIHRvIHRoZSByZW1vdGUgcGFydGl0aW9uIHRoYXQgb3VyIHJlc2VydmVkCkBAIC0zODcsNiArNDA4LDExIEBACiAJcmVtb3RlX3ZhcnMgPSAoc3RydWN0IHhwY192YXJzICopIHhwY19yZW1vdGVfY29weV9idWZmZXI7CiAKIAlmb3IgKHBhcnRpZCA9IDE7IHBhcnRpZCA8IFhQX01BWF9QQVJUSVRJT05TOyBwYXJ0aWQrKykgeworCisJCWlmICh4cGNfZXhpdGluZykgeworCQkJYnJlYWs7CisJCX0KKwogCQlpZiAocGFydGlkID09IHNuX3BhcnRpdGlvbl9pZCkgewogCQkJY29udGludWU7CiAJCX0KQEAgLTQwMSw3ICs0MjcsNyBAQAogCQkvKiBwdWxsIHRoZSByZW1vdGVfaGIgY2FjaGUgbGluZSAqLwogCQlicmVzID0geHBfYnRlX2NvcHkocGFydC0+cmVtb3RlX3ZhcnNfcGEsCiAJCQkJCWlhNjRfdHBhKCh1NjQpIHJlbW90ZV92YXJzKSwKLQkJCQkJWFBDX1ZBUlNfQUxJR05FRF9TSVpFLAorCQkJCQlYUENfUlBfVkFSU19TSVpFLAogCQkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOwogCQlpZiAoYnJlcyAhPSBCVEVfU1VDQ0VTUykgewogCQkJWFBDX0RFQUNUSVZBVEVfUEFSVElUSU9OKHBhcnQsCkBAIC00MTcsNyArNDQzLDcgQEAKIAogCQlpZiAoKChyZW1vdGVfdmFycy0+aGVhcnRiZWF0ID09IHBhcnQtPmxhc3RfaGVhcnRiZWF0KSAmJgogCQkJKHJlbW90ZV92YXJzLT5rZGJfc3RhdHVzID09IDApKSB8fAotCQkJICAgICAhWFBDX0hCX0FMTE9XRUQoc25fcGFydGl0aW9uX2lkLCByZW1vdGVfdmFycykpIHsKKwkJCSAgICAgIXhwY19oYl9hbGxvd2VkKHNuX3BhcnRpdGlvbl9pZCwgcmVtb3RlX3ZhcnMpKSB7CiAKIAkJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTihwYXJ0LCB4cGNOb0hlYXJ0YmVhdCk7CiAJCQljb250aW51ZTsKQEAgLTQyOSwzMSArNDU1LDMxIEBACiAKIAogLyoKLSAqIEdldCBhIGNvcHkgb2YgdGhlIHJlbW90ZSBwYXJ0aXRpb24ncyByc3ZkIHBhZ2UuCisgKiBHZXQgYSBjb3B5IG9mIGEgcG9ydGlvbiBvZiB0aGUgcmVtb3RlIHBhcnRpdGlvbidzIHJzdmQgcGFnZS4KICAqCiAgKiByZW1vdGVfcnAgcG9pbnRzIHRvIGEgYnVmZmVyIHRoYXQgaXMgY2FjaGVsaW5lIGFsaWduZWQgZm9yIEJURSBjb3BpZXMgYW5kCi0gKiBhc3N1bWVkIHRvIGJlIG9mIHNpemUgWFBDX1JTVkRfUEFHRV9BTElHTkVEX1NJWkUuCisgKiBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBhIGNvcHkgb2YgdGhlaXIgcmVzZXJ2ZWQgcGFnZSBoZWFkZXIgYW5kCisgKiBwYXJ0X25hc2lkcyBtYXNrLgogICovCiBzdGF0aWMgZW51bSB4cGNfcmV0dmFsCiB4cGNfZ2V0X3JlbW90ZV9ycChpbnQgbmFzaWQsIHU2NCAqZGlzY292ZXJlZF9uYXNpZHMsCi0JCXN0cnVjdCB4cGNfcnN2ZF9wYWdlICpyZW1vdGVfcnAsIHU2NCAqcmVtb3RlX3JzdmRfcGFnZV9wYSkKKwkJc3RydWN0IHhwY19yc3ZkX3BhZ2UgKnJlbW90ZV9ycCwgdTY0ICpyZW1vdGVfcnBfcGEpCiB7CiAJaW50IGJyZXMsIGk7CiAKIAogCS8qIGdldCB0aGUgcmVzZXJ2ZWQgcGFnZSdzIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAotCSpyZW1vdGVfcnN2ZF9wYWdlX3BhID0geHBjX2dldF9yc3ZkX3BhZ2VfcGEobmFzaWQsICh1NjQpIHJlbW90ZV9ycCwKLQkJCQkJCVhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFKTsKLQlpZiAoKnJlbW90ZV9yc3ZkX3BhZ2VfcGEgPT0gMCkgeworCSpyZW1vdGVfcnBfcGEgPSB4cGNfZ2V0X3JzdmRfcGFnZV9wYShuYXNpZCk7CisJaWYgKCpyZW1vdGVfcnBfcGEgPT0gMCkgewogCQlyZXR1cm4geHBjTm9Sc3ZkUGFnZUFkZHI7CiAJfQogCiAKLQkvKiBwdWxsIG92ZXIgdGhlIHJlc2VydmVkIHBhZ2Ugc3RydWN0dXJlICovCisJLyogcHVsbCBvdmVyIHRoZSByZXNlcnZlZCBwYWdlIGhlYWRlciBhbmQgcGFydF9uYXNpZHMgbWFzayAqLwogCi0JYnJlcyA9IHhwX2J0ZV9jb3B5KCpyZW1vdGVfcnN2ZF9wYWdlX3BhLCBpYTY0X3RwYSgodTY0KSByZW1vdGVfcnApLAotCQkJCVhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFLAorCWJyZXMgPSB4cF9idGVfY29weSgqcmVtb3RlX3JwX3BhLCBpYTY0X3RwYSgodTY0KSByZW1vdGVfcnApLAorCQkJCVhQQ19SUF9IRUFERVJfU0laRSArIHhwX25hc2lkX21hc2tfYnl0ZXMsCiAJCQkJKEJURV9OT1RJRlkgfCBCVEVfV0FDUVVJUkUpLCBOVUxMKTsKIAlpZiAoYnJlcyAhPSBCVEVfU1VDQ0VTUykgewogCQlyZXR1cm4geHBjX21hcF9idGVfZXJyb3JzKGJyZXMpOwpAQCAtNDYxLDggKzQ4NywxMSBAQAogCiAKIAlpZiAoZGlzY292ZXJlZF9uYXNpZHMgIT0gTlVMTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgWFBfTkFTSURfTUFTS19XT1JEUzsgaSsrKSB7Ci0JCQlkaXNjb3ZlcmVkX25hc2lkc1tpXSB8PSByZW1vdGVfcnAtPnBhcnRfbmFzaWRzW2ldOworCQl1NjQgKnJlbW90ZV9wYXJ0X25hc2lkcyA9IFhQQ19SUF9QQVJUX05BU0lEUyhyZW1vdGVfcnApOworCisKKwkJZm9yIChpID0gMDsgaSA8IHhwX25hc2lkX21hc2tfd29yZHM7IGkrKykgeworCQkJZGlzY292ZXJlZF9uYXNpZHNbaV0gfD0gcmVtb3RlX3BhcnRfbmFzaWRzW2ldOwogCQl9CiAJfQogCkBAIC00ODksMTAgKzUxOCwxMCBAQAogCiAKIC8qCi0gKiBHZXQgYSBjb3B5IG9mIHRoZSByZW1vdGUgcGFydGl0aW9uJ3MgWFBDIHZhcmlhYmxlcy4KKyAqIEdldCBhIGNvcHkgb2YgdGhlIHJlbW90ZSBwYXJ0aXRpb24ncyBYUEMgdmFyaWFibGVzIGZyb20gdGhlIHJlc2VydmVkIHBhZ2UuCiAgKgogICogcmVtb3RlX3ZhcnMgcG9pbnRzIHRvIGEgYnVmZmVyIHRoYXQgaXMgY2FjaGVsaW5lIGFsaWduZWQgZm9yIEJURSBjb3BpZXMgYW5kCi0gKiBhc3N1bWVkIHRvIGJlIG9mIHNpemUgWFBDX1ZBUlNfQUxJR05FRF9TSVpFLgorICogYXNzdW1lZCB0byBiZSBvZiBzaXplIFhQQ19SUF9WQVJTX1NJWkUuCiAgKi8KIHN0YXRpYyBlbnVtIHhwY19yZXR2YWwKIHhwY19nZXRfcmVtb3RlX3ZhcnModTY0IHJlbW90ZV92YXJzX3BhLCBzdHJ1Y3QgeHBjX3ZhcnMgKnJlbW90ZV92YXJzKQpAQCAtNTA4LDcgKzUzNyw3IEBACiAJLyogcHVsbCBvdmVyIHRoZSBjcm9zcyBwYXJ0aXRpb24gdmFyaWFibGVzICovCiAKIAlicmVzID0geHBfYnRlX2NvcHkocmVtb3RlX3ZhcnNfcGEsIGlhNjRfdHBhKCh1NjQpIHJlbW90ZV92YXJzKSwKLQkJCQlYUENfVkFSU19BTElHTkVEX1NJWkUsCisJCQkJWFBDX1JQX1ZBUlNfU0laRSwKIAkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOwogCWlmIChicmVzICE9IEJURV9TVUNDRVNTKSB7CiAJCXJldHVybiB4cGNfbWFwX2J0ZV9lcnJvcnMoYnJlcyk7CkBAIC01MjQsNyArNTUzLDU2IEBACiAKIAogLyoKLSAqIFByaW9yIGNvZGUgaGFzIGRldGVybWluZSB0aGUgbmFzaWQgd2hpY2ggZ2VuZXJhdGVkIGFuIElQSS4gIEluc3BlY3QKKyAqIFVwZGF0ZSB0aGUgcmVtb3RlIHBhcnRpdGlvbidzIGluZm8uCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfdXBkYXRlX3BhcnRpdGlvbl9pbmZvKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0LCB1OCByZW1vdGVfcnBfdmVyc2lvbiwKKwkJc3RydWN0IHRpbWVzcGVjICpyZW1vdGVfcnBfc3RhbXAsIHU2NCByZW1vdGVfcnBfcGEsCisJCXU2NCByZW1vdGVfdmFyc19wYSwgc3RydWN0IHhwY192YXJzICpyZW1vdGVfdmFycykKK3sKKwlwYXJ0LT5yZW1vdGVfcnBfdmVyc2lvbiA9IHJlbW90ZV9ycF92ZXJzaW9uOworCWRldl9kYmcoeHBjX3BhcnQsICIgIHJlbW90ZV9ycF92ZXJzaW9uID0gMHglMDE2bHhcbiIsCisJCXBhcnQtPnJlbW90ZV9ycF92ZXJzaW9uKTsKKworCXBhcnQtPnJlbW90ZV9ycF9zdGFtcCA9ICpyZW1vdGVfcnBfc3RhbXA7CisJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX3JwX3N0YW1wICh0dl9zZWMgPSAweCVseCB0dl9uc2VjID0gMHglbHhcbiIsCisJCXBhcnQtPnJlbW90ZV9ycF9zdGFtcC50dl9zZWMsIHBhcnQtPnJlbW90ZV9ycF9zdGFtcC50dl9uc2VjKTsKKworCXBhcnQtPnJlbW90ZV9ycF9wYSA9IHJlbW90ZV9ycF9wYTsKKwlkZXZfZGJnKHhwY19wYXJ0LCAiICByZW1vdGVfcnBfcGEgPSAweCUwMTZseFxuIiwgcGFydC0+cmVtb3RlX3JwX3BhKTsKKworCXBhcnQtPnJlbW90ZV92YXJzX3BhID0gcmVtb3RlX3ZhcnNfcGE7CisJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX3ZhcnNfcGEgPSAweCUwMTZseFxuIiwKKwkJcGFydC0+cmVtb3RlX3ZhcnNfcGEpOworCisJcGFydC0+bGFzdF9oZWFydGJlYXQgPSByZW1vdGVfdmFycy0+aGVhcnRiZWF0OworCWRldl9kYmcoeHBjX3BhcnQsICIgIGxhc3RfaGVhcnRiZWF0ID0gMHglMDE2bHhcbiIsCisJCXBhcnQtPmxhc3RfaGVhcnRiZWF0KTsKKworCXBhcnQtPnJlbW90ZV92YXJzX3BhcnRfcGEgPSByZW1vdGVfdmFycy0+dmFyc19wYXJ0X3BhOworCWRldl9kYmcoeHBjX3BhcnQsICIgIHJlbW90ZV92YXJzX3BhcnRfcGEgPSAweCUwMTZseFxuIiwKKwkJcGFydC0+cmVtb3RlX3ZhcnNfcGFydF9wYSk7CisKKwlwYXJ0LT5yZW1vdGVfYWN0X25hc2lkID0gcmVtb3RlX3ZhcnMtPmFjdF9uYXNpZDsKKwlkZXZfZGJnKHhwY19wYXJ0LCAiICByZW1vdGVfYWN0X25hc2lkID0gMHgleFxuIiwKKwkJcGFydC0+cmVtb3RlX2FjdF9uYXNpZCk7CisKKwlwYXJ0LT5yZW1vdGVfYWN0X3BoeXNfY3B1aWQgPSByZW1vdGVfdmFycy0+YWN0X3BoeXNfY3B1aWQ7CisJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX2FjdF9waHlzX2NwdWlkID0gMHgleFxuIiwKKwkJcGFydC0+cmVtb3RlX2FjdF9waHlzX2NwdWlkKTsKKworCXBhcnQtPnJlbW90ZV9hbW9zX3BhZ2VfcGEgPSByZW1vdGVfdmFycy0+YW1vc19wYWdlX3BhOworCWRldl9kYmcoeHBjX3BhcnQsICIgIHJlbW90ZV9hbW9zX3BhZ2VfcGEgPSAweCVseFxuIiwKKwkJcGFydC0+cmVtb3RlX2Ftb3NfcGFnZV9wYSk7CisKKwlwYXJ0LT5yZW1vdGVfdmFyc192ZXJzaW9uID0gcmVtb3RlX3ZhcnMtPnZlcnNpb247CisJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX3ZhcnNfdmVyc2lvbiA9IDB4JXhcbiIsCisJCXBhcnQtPnJlbW90ZV92YXJzX3ZlcnNpb24pOworfQorCisKKy8qCisgKiBQcmlvciBjb2RlIGhhcyBkZXRlcm1pbmVkIHRoZSBuYXNpZCB3aGljaCBnZW5lcmF0ZWQgYW4gSVBJLiAgSW5zcGVjdAogICogdGhhdCBuYXNpZCB0byBkZXRlcm1pbmUgaWYgaXRzIHBhcnRpdGlvbiBuZWVkcyB0byBiZSBhY3RpdmF0ZWQgb3IKICAqIGRlYWN0aXZhdGVkLgogICoKQEAgLTU0Miw4ICs2MjAsMTIgQEAKIHsKIAlzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcmVtb3RlX3JwOwogCXN0cnVjdCB4cGNfdmFycyAqcmVtb3RlX3ZhcnM7Ci0JdTY0IHJlbW90ZV9yc3ZkX3BhZ2VfcGE7CisJdTY0IHJlbW90ZV9ycF9wYTsKIAl1NjQgcmVtb3RlX3ZhcnNfcGE7CisJaW50IHJlbW90ZV9ycF92ZXJzaW9uOworCWludCByZWFjdGl2YXRlID0gMDsKKwlpbnQgc3RhbXBfZGlmZjsKKwlzdHJ1Y3QgdGltZXNwZWMgcmVtb3RlX3JwX3N0YW1wID0geyAwLCAwIH07CiAJcGFydGlkX3QgcGFydGlkOwogCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OwogCWVudW0geHBjX3JldHZhbCByZXQ7CkBAIC01NTMsNyArNjM1LDcgQEAKIAogCXJlbW90ZV9ycCA9IChzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqKSB4cGNfcmVtb3RlX2NvcHlfYnVmZmVyOwogCi0JcmV0ID0geHBjX2dldF9yZW1vdGVfcnAobmFzaWQsIE5VTEwsIHJlbW90ZV9ycCwgJnJlbW90ZV9yc3ZkX3BhZ2VfcGEpOworCXJldCA9IHhwY19nZXRfcmVtb3RlX3JwKG5hc2lkLCBOVUxMLCByZW1vdGVfcnAsICZyZW1vdGVfcnBfcGEpOwogCWlmIChyZXQgIT0geHBjU3VjY2VzcykgewogCQlkZXZfd2Fybih4cGNfcGFydCwgInVuYWJsZSB0byBnZXQgcmVzZXJ2ZWQgcGFnZSBmcm9tIG5hc2lkICVkLCAiCiAJCQkid2hpY2ggc2VudCBpbnRlcnJ1cHQsIHJlYXNvbj0lZFxuIiwgbmFzaWQsIHJldCk7CkBAIC01NjEsNiArNjQzLDEwIEBACiAJfQogCiAJcmVtb3RlX3ZhcnNfcGEgPSByZW1vdGVfcnAtPnZhcnNfcGE7CisJcmVtb3RlX3JwX3ZlcnNpb24gPSByZW1vdGVfcnAtPnZlcnNpb247CisJaWYgKFhQQ19TVVBQT1JUU19SUF9TVEFNUChyZW1vdGVfcnBfdmVyc2lvbikpIHsKKwkJcmVtb3RlX3JwX3N0YW1wID0gcmVtb3RlX3JwLT5zdGFtcDsKKwl9CiAJcGFydGlkID0gcmVtb3RlX3JwLT5wYXJ0aWQ7CiAJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOwogCkBAIC01ODYsNDQgKzY3MiwxMTcgQEAKIAkJIiVsZDoweCVseFxuIiwgKGludCkgbmFzaWQsIChpbnQpIHBhcnRpZCwgcGFydC0+YWN0X0lSUV9yY3ZkLAogCQlyZW1vdGVfdmFycy0+aGVhcnRiZWF0LCByZW1vdGVfdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2spOwogCisJaWYgKHhwY19wYXJ0aXRpb25fZGlzZW5nYWdlZChwYXJ0KSAmJgorCQkJCQlwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfSU5BQ1RJVkUpIHsKIAotCWlmIChwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfSU5BQ1RJVkUpIHsKKwkJeHBjX3VwZGF0ZV9wYXJ0aXRpb25faW5mbyhwYXJ0LCByZW1vdGVfcnBfdmVyc2lvbiwKKwkJCQkJJnJlbW90ZV9ycF9zdGFtcCwgcmVtb3RlX3JwX3BhLAorCQkJCQlyZW1vdGVfdmFyc19wYSwgcmVtb3RlX3ZhcnMpOwogCi0JCXBhcnQtPnJlbW90ZV9ycF9wYSA9IHJlbW90ZV9yc3ZkX3BhZ2VfcGE7Ci0JCWRldl9kYmcoeHBjX3BhcnQsICIgIHJlbW90ZV9ycF9wYSA9IDB4JTAxNmx4XG4iLAotCQkJcGFydC0+cmVtb3RlX3JwX3BhKTsKLQotCQlwYXJ0LT5yZW1vdGVfdmFyc19wYSA9IHJlbW90ZV92YXJzX3BhOwotCQlkZXZfZGJnKHhwY19wYXJ0LCAiICByZW1vdGVfdmFyc19wYSA9IDB4JTAxNmx4XG4iLAotCQkJcGFydC0+cmVtb3RlX3ZhcnNfcGEpOwotCi0JCXBhcnQtPmxhc3RfaGVhcnRiZWF0ID0gcmVtb3RlX3ZhcnMtPmhlYXJ0YmVhdDsKLQkJZGV2X2RiZyh4cGNfcGFydCwgIiAgbGFzdF9oZWFydGJlYXQgPSAweCUwMTZseFxuIiwKLQkJCXBhcnQtPmxhc3RfaGVhcnRiZWF0KTsKLQotCQlwYXJ0LT5yZW1vdGVfdmFyc19wYXJ0X3BhID0gcmVtb3RlX3ZhcnMtPnZhcnNfcGFydF9wYTsKLQkJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX3ZhcnNfcGFydF9wYSA9IDB4JTAxNmx4XG4iLAotCQkJcGFydC0+cmVtb3RlX3ZhcnNfcGFydF9wYSk7Ci0KLQkJcGFydC0+cmVtb3RlX2FjdF9uYXNpZCA9IHJlbW90ZV92YXJzLT5hY3RfbmFzaWQ7Ci0JCWRldl9kYmcoeHBjX3BhcnQsICIgIHJlbW90ZV9hY3RfbmFzaWQgPSAweCV4XG4iLAotCQkJcGFydC0+cmVtb3RlX2FjdF9uYXNpZCk7Ci0KLQkJcGFydC0+cmVtb3RlX2FjdF9waHlzX2NwdWlkID0gcmVtb3RlX3ZhcnMtPmFjdF9waHlzX2NwdWlkOwotCQlkZXZfZGJnKHhwY19wYXJ0LCAiICByZW1vdGVfYWN0X3BoeXNfY3B1aWQgPSAweCV4XG4iLAotCQkJcGFydC0+cmVtb3RlX2FjdF9waHlzX2NwdWlkKTsKLQotCQlwYXJ0LT5yZW1vdGVfYW1vc19wYWdlX3BhID0gcmVtb3RlX3ZhcnMtPmFtb3NfcGFnZV9wYTsKLQkJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX2Ftb3NfcGFnZV9wYSA9IDB4JWx4XG4iLAotCQkJcGFydC0+cmVtb3RlX2Ftb3NfcGFnZV9wYSk7CisJCWlmIChYUENfU1VQUE9SVFNfRElTRU5HQUdFX1JFUVVFU1QocGFydC0+cmVtb3RlX3ZhcnNfdmVyc2lvbikpIHsKKwkJCWlmICh4cGNfcGFydGl0aW9uX2Rpc2VuZ2FnZV9yZXF1ZXN0ZWQoMVVMIDw8IHBhcnRpZCkpIHsKKwkJCQkvKgorCQkJCSAqIE90aGVyIHNpZGUgaXMgd2FpdGluZyBvbiB1cyB0byBkaXNlbmdhZ2UsCisJCQkJICogZXZlbiB0aG91Z2ggd2UgYWxyZWFkeSBoYXZlLgorCQkJCSAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIG90aGVyIHNpZGUgZG9lc24ndCBzdXBwb3J0IGRpc2VuZ2FnZSByZXF1ZXN0cyAqLworCQkJeHBjX2NsZWFyX3BhcnRpdGlvbl9kaXNlbmdhZ2VfcmVxdWVzdCgxVUwgPDwgcGFydGlkKTsKKwkJfQogCiAJCXhwY19hY3RpdmF0ZV9wYXJ0aXRpb24ocGFydCk7CisJCXJldHVybjsKKwl9CiAKLQl9IGVsc2UgaWYgKHBhcnQtPnJlbW90ZV9hbW9zX3BhZ2VfcGEgIT0gcmVtb3RlX3ZhcnMtPmFtb3NfcGFnZV9wYSB8fAotCQkJIVhQQ19IQl9BTExPV0VEKHNuX3BhcnRpdGlvbl9pZCwgcmVtb3RlX3ZhcnMpKSB7CisJREJVR19PTihwYXJ0LT5yZW1vdGVfcnBfdmVyc2lvbiA9PSAwKTsKKwlEQlVHX09OKHBhcnQtPnJlbW90ZV92YXJzX3ZlcnNpb24gPT0gMCk7CiAKKwlpZiAoIVhQQ19TVVBQT1JUU19SUF9TVEFNUChwYXJ0LT5yZW1vdGVfcnBfdmVyc2lvbikpIHsKKwkJREJVR19PTihYUENfU1VQUE9SVFNfRElTRU5HQUdFX1JFUVVFU1QocGFydC0+CisJCQkJCQkJcmVtb3RlX3ZhcnNfdmVyc2lvbikpOworCisJCWlmICghWFBDX1NVUFBPUlRTX1JQX1NUQU1QKHJlbW90ZV9ycF92ZXJzaW9uKSkgeworCQkJREJVR19PTihYUENfU1VQUE9SVFNfRElTRU5HQUdFX1JFUVVFU1QocmVtb3RlX3ZhcnMtPgorCQkJCQkJCQl2ZXJzaW9uKSk7CisJCQkvKiBzZWUgaWYgdGhlIG90aGVyIHNpZGUgcmVib290ZWQgKi8KKwkJCWlmIChwYXJ0LT5yZW1vdGVfYW1vc19wYWdlX3BhID09CisJCQkJcmVtb3RlX3ZhcnMtPmFtb3NfcGFnZV9wYSAmJgorCQkJCQl4cGNfaGJfYWxsb3dlZChzbl9wYXJ0aXRpb25faWQsCisJCQkJCQkJCXJlbW90ZV92YXJzKSkgeworCQkJCS8qIGRvZXNuJ3QgbG9vayB0aGF0IHdheSwgc28gaWdub3JlIHRoZSBJUEkgKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBPdGhlciBzaWRlIHJlYm9vdGVkIGFuZCBwcmV2aW91cyBYUEMgZGlkbid0IHN1cHBvcnQgdGhlCisJCSAqIGRpc2VuZ2FnZSByZXF1ZXN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJCSAqLworCisJCXhwY191cGRhdGVfcGFydGl0aW9uX2luZm8ocGFydCwgcmVtb3RlX3JwX3ZlcnNpb24sCisJCQkJCQkmcmVtb3RlX3JwX3N0YW1wLCByZW1vdGVfcnBfcGEsCisJCQkJCQlyZW1vdGVfdmFyc19wYSwgcmVtb3RlX3ZhcnMpOwogCQlwYXJ0LT5yZWFjdGl2YXRlX25hc2lkID0gbmFzaWQ7CiAJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTihwYXJ0LCB4cGNSZWFjdGl2YXRpbmcpOworCQlyZXR1cm47CisJfQorCisJREJVR19PTighWFBDX1NVUFBPUlRTX0RJU0VOR0FHRV9SRVFVRVNUKHBhcnQtPnJlbW90ZV92YXJzX3ZlcnNpb24pKTsKKworCWlmICghWFBDX1NVUFBPUlRTX1JQX1NUQU1QKHJlbW90ZV9ycF92ZXJzaW9uKSkgeworCQlEQlVHX09OKCFYUENfU1VQUE9SVFNfRElTRU5HQUdFX1JFUVVFU1QocmVtb3RlX3ZhcnMtPnZlcnNpb24pKTsKKworCQkvKgorCQkgKiBPdGhlciBzaWRlIHJlYm9vdGVkIGFuZCBwcmV2aW91cyBYUEMgZGlkIHN1cHBvcnQgdGhlCisJCSAqIGRpc2VuZ2FnZSByZXF1ZXN0LCBidXQgdGhlIG5ldyBvbmUgZG9lc24ndC4KKwkJICovCisKKwkJeHBjX2NsZWFyX3BhcnRpdGlvbl9lbmdhZ2VkKDFVTCA8PCBwYXJ0aWQpOworCQl4cGNfY2xlYXJfcGFydGl0aW9uX2Rpc2VuZ2FnZV9yZXF1ZXN0KDFVTCA8PCBwYXJ0aWQpOworCisJCXhwY191cGRhdGVfcGFydGl0aW9uX2luZm8ocGFydCwgcmVtb3RlX3JwX3ZlcnNpb24sCisJCQkJCQkmcmVtb3RlX3JwX3N0YW1wLCByZW1vdGVfcnBfcGEsCisJCQkJCQlyZW1vdGVfdmFyc19wYSwgcmVtb3RlX3ZhcnMpOworCQlyZWFjdGl2YXRlID0gMTsKKworCX0gZWxzZSB7CisJCURCVUdfT04oIVhQQ19TVVBQT1JUU19ESVNFTkdBR0VfUkVRVUVTVChyZW1vdGVfdmFycy0+dmVyc2lvbikpOworCisJCXN0YW1wX2RpZmYgPSB4cGNfY29tcGFyZV9zdGFtcHMoJnBhcnQtPnJlbW90ZV9ycF9zdGFtcCwKKwkJCQkJCQkmcmVtb3RlX3JwX3N0YW1wKTsKKwkJaWYgKHN0YW1wX2RpZmYgIT0gMCkgeworCQkJREJVR19PTihzdGFtcF9kaWZmID49IDApOworCisJCQkvKgorCQkJICogT3RoZXIgc2lkZSByZWJvb3RlZCBhbmQgdGhlIHByZXZpb3VzIFhQQyBkaWQgc3VwcG9ydAorCQkJICogdGhlIGRpc2VuZ2FnZSByZXF1ZXN0LCBhcyBkb2VzIHRoZSBuZXcgb25lLgorCQkJICovCisKKwkJCURCVUdfT04oeHBjX3BhcnRpdGlvbl9lbmdhZ2VkKDFVTCA8PCBwYXJ0aWQpKTsKKwkJCURCVUdfT04oeHBjX3BhcnRpdGlvbl9kaXNlbmdhZ2VfcmVxdWVzdGVkKDFVTCA8PAorCQkJCQkJCQlwYXJ0aWQpKTsKKworCQkJeHBjX3VwZGF0ZV9wYXJ0aXRpb25faW5mbyhwYXJ0LCByZW1vdGVfcnBfdmVyc2lvbiwKKwkJCQkJCSZyZW1vdGVfcnBfc3RhbXAsIHJlbW90ZV9ycF9wYSwKKwkJCQkJCXJlbW90ZV92YXJzX3BhLCByZW1vdGVfdmFycyk7CisJCQlyZWFjdGl2YXRlID0gMTsKKwkJfQorCX0KKworCWlmICgheHBjX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHBhcnQpKSB7CisJCS8qIHN0aWxsIHdhaXRpbmcgb24gb3RoZXIgc2lkZSB0byBkaXNlbmdhZ2UgZnJvbSB1cyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHJlYWN0aXZhdGUpIHsKKwkJcGFydC0+cmVhY3RpdmF0ZV9uYXNpZCA9IG5hc2lkOworCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgeHBjUmVhY3RpdmF0aW5nKTsKKworCX0gZWxzZSBpZiAoWFBDX1NVUFBPUlRTX0RJU0VOR0FHRV9SRVFVRVNUKHBhcnQtPnJlbW90ZV92YXJzX3ZlcnNpb24pICYmCisJCQl4cGNfcGFydGl0aW9uX2Rpc2VuZ2FnZV9yZXF1ZXN0ZWQoMVVMIDw8IHBhcnRpZCkpIHsKKwkJWFBDX0RFQUNUSVZBVEVfUEFSVElUSU9OKHBhcnQsIHhwY090aGVyR29pbmdEb3duKTsKIAl9CiB9CiAKQEAgLTY0MywxNCArODAyLDE3IEBACiAJdTY0IG5hc2lkOwkJCS8qIHJlbW90ZSBuYXNpZCAqLwogCWludCBuX0lSUXNfZGV0ZWN0ZWQgPSAwOwogCUFNT190ICphY3RfYW1vczsKLQlzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcnAgPSAoc3RydWN0IHhwY19yc3ZkX3BhZ2UgKikgeHBjX3JzdmRfcGFnZTsKIAogCi0JYWN0X2Ftb3MgPSB4cGNfdmFycy0+YWN0X2Ftb3M7CisJYWN0X2Ftb3MgPSB4cGNfdmFycy0+YW1vc19wYWdlICsgWFBDX0FDVElWQVRFX0lSUV9BTU9TOwogCiAKIAkvKiBzY2FuIHRocm91Z2ggYWN0IEFNTyB2YXJpYWJsZSBsb29raW5nIGZvciBub24temVybyBlbnRyaWVzICovCi0JZm9yICh3b3JkID0gMDsgd29yZCA8IFhQX05BU0lEX01BU0tfV09SRFM7IHdvcmQrKykgeworCWZvciAod29yZCA9IDA7IHdvcmQgPCB4cF9uYXNpZF9tYXNrX3dvcmRzOyB3b3JkKyspIHsKKworCQlpZiAoeHBjX2V4aXRpbmcpIHsKKwkJCWJyZWFrOworCQl9CiAKIAkJbmFzaWRfbWFzayA9IHhwY19JUElfcmVjZWl2ZSgmYWN0X2Ftb3Nbd29yZF0pOwogCQlpZiAobmFzaWRfbWFzayA9PSAwKSB7CkBAIC02NjgsNyArODMwLDcgQEAKIAkJICogcmVtb3RlIG5hc2lkIGluIG91ciByZXNlcnZlZCBwYWdlcyBtYWNoaW5lIG1hc2suCiAJCSAqIFRoaXMgaXMgdXNlZCBpbiB0aGUgZXZlbnQgb2YgbW9kdWxlIHJlbG9hZC4KIAkJICovCi0JCXJwLT5tYWNoX25hc2lkc1t3b3JkXSB8PSBuYXNpZF9tYXNrOworCQl4cGNfbWFjaF9uYXNpZHNbd29yZF0gfD0gbmFzaWRfbWFzazsKIAogCiAJCS8qIGxvY2F0ZSB0aGUgbmFzaWQocykgd2hpY2ggc2VudCBpbnRlcnJ1cHRzICovCkBAIC02ODgsNiArODUwLDU1IEBACiAKIAogLyoKKyAqIFNlZSBpZiB0aGUgb3RoZXIgc2lkZSBoYXMgcmVzcG9uZGVkIHRvIGEgcGFydGl0aW9uIGRpc2VuZ2FnZSByZXF1ZXN0CisgKiBmcm9tIHVzLgorICovCitpbnQKK3hwY19wYXJ0aXRpb25fZGlzZW5nYWdlZChzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKK3sKKwlwYXJ0aWRfdCBwYXJ0aWQgPSBYUENfUEFSVElEKHBhcnQpOworCWludCBkaXNlbmdhZ2VkOworCisKKwlkaXNlbmdhZ2VkID0gKHhwY19wYXJ0aXRpb25fZW5nYWdlZCgxVUwgPDwgcGFydGlkKSA9PSAwKTsKKwlpZiAocGFydC0+ZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCkgeworCQlpZiAoIWRpc2VuZ2FnZWQpIHsKKwkJCWlmIChqaWZmaWVzIDwgcGFydC0+ZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCkgeworCQkJCS8qIHRpbWVsaW1pdCBoYXNuJ3QgYmVlbiByZWFjaGVkIHlldCAqLworCQkJCXJldHVybiAwOworCQkJfQorCisJCQkvKgorCQkJICogT3RoZXIgc2lkZSBoYXNuJ3QgcmVzcG9uZGVkIHRvIG91ciBkaXNlbmdhZ2UKKwkJCSAqIHJlcXVlc3QgaW4gYSB0aW1lbHkgZmFzaGlvbiwgc28gYXNzdW1lIGl0J3MgZGVhZC4KKwkJCSAqLworCisJCQl4cGNfY2xlYXJfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCk7CisJCQlkaXNlbmdhZ2VkID0gMTsKKwkJfQorCQlwYXJ0LT5kaXNlbmdhZ2VfcmVxdWVzdF90aW1lb3V0ID0gMDsKKworCQkvKiBjYW5jZWwgdGhlIHRpbWVyIGZ1bmN0aW9uLCBwcm92aWRlZCBpdCdzIG5vdCB1cyAqLworCQlpZiAoIWluX2ludGVycnVwdCgpKSB7CisJCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZwYXJ0LT4KKwkJCQkJCSAgICAgIGRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVyKTsKKwkJfQorCisJCURCVUdfT04ocGFydC0+YWN0X3N0YXRlICE9IFhQQ19QX0RFQUNUSVZBVElORyAmJgorCQkJCQlwYXJ0LT5hY3Rfc3RhdGUgIT0gWFBDX1BfSU5BQ1RJVkUpOworCQlpZiAocGFydC0+YWN0X3N0YXRlICE9IFhQQ19QX0lOQUNUSVZFKSB7CisJCQl4cGNfd2FrZXVwX2NoYW5uZWxfbWdyKHBhcnQpOworCQl9CisKKwkJaWYgKFhQQ19TVVBQT1JUU19ESVNFTkdBR0VfUkVRVUVTVChwYXJ0LT5yZW1vdGVfdmFyc192ZXJzaW9uKSkgeworCQkJeHBjX2NhbmNlbF9wYXJ0aXRpb25fZGlzZW5nYWdlX3JlcXVlc3QocGFydCk7CisJCX0KKwl9CisJcmV0dXJuIGRpc2VuZ2FnZWQ7Cit9CisKKworLyoKICAqIE1hcmsgc3BlY2lmaWVkIHBhcnRpdGlvbiBhcyBhY3RpdmUuCiAgKi8KIGVudW0geHBjX3JldHZhbApAQCAtNzIxLDcgKzkzMiw2IEBACiAJCQkJZW51bSB4cGNfcmV0dmFsIHJlYXNvbikKIHsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQlwYXJ0aWRfdCBwYXJ0aWQgPSBYUENfUEFSVElEKHBhcnQpOwogCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGFydC0+YWN0X2xvY2ssIGlycV9mbGFncyk7CkBAIC03NDksMTcgKzk1OSwyNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydC0+YWN0X2xvY2ssIGlycV9mbGFncyk7CiAKLQlYUENfRElTQUxMT1dfSEIocGFydGlkLCB4cGNfdmFycyk7CisJaWYgKFhQQ19TVVBQT1JUU19ESVNFTkdBR0VfUkVRVUVTVChwYXJ0LT5yZW1vdGVfdmFyc192ZXJzaW9uKSkgeworCQl4cGNfcmVxdWVzdF9wYXJ0aXRpb25fZGlzZW5nYWdlKHBhcnQpOworCQl4cGNfSVBJX3NlbmRfZGlzZW5nYWdlKHBhcnQpOwogCi0JZGV2X2RiZyh4cGNfcGFydCwgImJyaW5naW5nIHBhcnRpdGlvbiAlZCBkb3duLCByZWFzb24gPSAlZFxuIiwgcGFydGlkLAotCQlyZWFzb24pOworCQkvKiBzZXQgYSB0aW1lbGltaXQgb24gdGhlIGRpc2VuZ2FnZSByZXF1ZXN0ICovCisJCXBhcnQtPmRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQkJKHhwY19kaXNlbmdhZ2VfcmVxdWVzdF90aW1lbGltaXQgKiBIWik7CisJCXBhcnQtPmRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVyLmV4cGlyZXMgPQorCQkJCQlwYXJ0LT5kaXNlbmdhZ2VfcmVxdWVzdF90aW1lb3V0OworCQlhZGRfdGltZXIoJnBhcnQtPmRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVyKTsKKwl9CiAKLQl4cGNfcGFydGl0aW9uX2Rvd24ocGFydCwgcmVhc29uKTsKKwlkZXZfZGJnKHhwY19wYXJ0LCAiYnJpbmdpbmcgcGFydGl0aW9uICVkIGRvd24sIHJlYXNvbiA9ICVkXG4iLAorCQlYUENfUEFSVElEKHBhcnQpLCByZWFzb24pOworCisJeHBjX3BhcnRpdGlvbl9nb2luZ19kb3duKHBhcnQsIHJlYXNvbik7CiB9CiAKIAogLyoKLSAqIE1hcmsgc3BlY2lmaWVkIHBhcnRpdGlvbiBhcyBhY3RpdmUuCisgKiBNYXJrIHNwZWNpZmllZCBwYXJ0aXRpb24gYXMgaW5hY3RpdmUuCiAgKi8KIHZvaWQKIHhwY19tYXJrX3BhcnRpdGlvbl9pbmFjdGl2ZShzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKQEAgLTc5Miw5ICsxMDEyLDEwIEBACiAJdm9pZCAqcmVtb3RlX3JwX2Jhc2U7CiAJc3RydWN0IHhwY19yc3ZkX3BhZ2UgKnJlbW90ZV9ycDsKIAlzdHJ1Y3QgeHBjX3ZhcnMgKnJlbW90ZV92YXJzOwotCXU2NCByZW1vdGVfcnN2ZF9wYWdlX3BhOworCXU2NCByZW1vdGVfcnBfcGE7CiAJdTY0IHJlbW90ZV92YXJzX3BhOwogCWludCByZWdpb247CisJaW50IHJlZ2lvbl9zaXplOwogCWludCBtYXhfcmVnaW9uczsKIAlpbnQgbmFzaWQ7CiAJc3RydWN0IHhwY19yc3ZkX3BhZ2UgKnJwOwpAQCAtODA0LDcgKzEwMjUsOCBAQAogCWVudW0geHBjX3JldHZhbCByZXQ7CiAKIAotCXJlbW90ZV9ycCA9IHhwY19rbWFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKFhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFLAorCXJlbW90ZV9ycCA9IHhwY19rbWFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKFhQQ19SUF9IRUFERVJfU0laRSArCisJCQkJCQl4cF9uYXNpZF9tYXNrX2J5dGVzLAogCQkJCQkJR0ZQX0tFUk5FTCwgJnJlbW90ZV9ycF9iYXNlKTsKIAlpZiAocmVtb3RlX3JwID09IE5VTEwpIHsKIAkJcmV0dXJuOwpAQCAtODEyLDEzICsxMDM0LDEzIEBACiAJcmVtb3RlX3ZhcnMgPSAoc3RydWN0IHhwY192YXJzICopIHJlbW90ZV9ycDsKIAogCi0JZGlzY292ZXJlZF9uYXNpZHMgPSBrbWFsbG9jKHNpemVvZih1NjQpICogWFBfTkFTSURfTUFTS19XT1JEUywKKwlkaXNjb3ZlcmVkX25hc2lkcyA9IGttYWxsb2Moc2l6ZW9mKHU2NCkgKiB4cF9uYXNpZF9tYXNrX3dvcmRzLAogCQkJCQkJCUdGUF9LRVJORUwpOwogCWlmIChkaXNjb3ZlcmVkX25hc2lkcyA9PSBOVUxMKSB7CiAJCWtmcmVlKHJlbW90ZV9ycF9iYXNlKTsKIAkJcmV0dXJuOwogCX0KLQltZW1zZXQoZGlzY292ZXJlZF9uYXNpZHMsIDAsIHNpemVvZih1NjQpICogWFBfTkFTSURfTUFTS19XT1JEUyk7CisJbWVtc2V0KGRpc2NvdmVyZWRfbmFzaWRzLCAwLCBzaXplb2YodTY0KSAqIHhwX25hc2lkX21hc2tfd29yZHMpOwogCiAJcnAgPSAoc3RydWN0IHhwY19yc3ZkX3BhZ2UgKikgeHBjX3JzdmRfcGFnZTsKIApAQCAtODI3LDExICsxMDQ5LDE5IEBACiAJICogbm9kZXMgdGhhdCBjYW4gY29tcHJpc2UgYW4gYWNjZXNzIHByb3RlY3Rpb24gZ3JvdXBpbmcuIFRoZSBhY2Nlc3MKIAkgKiBwcm90ZWN0aW9uIGlzIGluIHJlZ2FyZHMgdG8gbWVtb3J5LCBJT0kgYW5kIElQSS4KIAkgKi8KLS8vPj4+IG1vdmUgdGhlIG5leHQgdHdvICNkZWZpbmVzIGludG8gZWl0aGVyIGluY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oIG9yCi0vLz4+PiBpbmNsdWRlL2FzbS1pYTY0L3NuL2FkZHJzLmgKLSNkZWZpbmUgU0gxX01BWF9SRUdJT05TCQk2NAotI2RlZmluZSBTSDJfTUFYX1JFR0lPTlMJCTI1NgotCW1heF9yZWdpb25zID0gaXNfc2h1YjIoKSA/IFNIMl9NQVhfUkVHSU9OUyA6IFNIMV9NQVhfUkVHSU9OUzsKKwltYXhfcmVnaW9ucyA9IDY0OworCXJlZ2lvbl9zaXplID0gc25fcmVnaW9uX3NpemU7CisKKwlzd2l0Y2ggKHJlZ2lvbl9zaXplKSB7CisJY2FzZSAxMjg6CisJCW1heF9yZWdpb25zICo9IDI7CisJY2FzZSA2NDoKKwkJbWF4X3JlZ2lvbnMgKj0gMjsKKwljYXNlIDMyOgorCQltYXhfcmVnaW9ucyAqPSAyOworCQlyZWdpb25fc2l6ZSA9IDE2OworCQlEQlVHX09OKCFpc19zaHViMigpKTsKKwl9CiAKIAlmb3IgKHJlZ2lvbiA9IDA7IHJlZ2lvbiA8IG1heF9yZWdpb25zOyByZWdpb24rKykgewogCkBAIC04NDEsOCArMTA3MSw4IEBACiAKIAkJZGV2X2RiZyh4cGNfcGFydCwgInNlYXJjaGluZyByZWdpb24gJWRcbiIsIHJlZ2lvbik7CiAKLQkJZm9yIChuYXNpZCA9IChyZWdpb24gKiBzbl9yZWdpb25fc2l6ZSAqIDIpOwotCQkgICAgIG5hc2lkIDwgKChyZWdpb24gKyAxKSAqIHNuX3JlZ2lvbl9zaXplICogMik7CisJCWZvciAobmFzaWQgPSAocmVnaW9uICogcmVnaW9uX3NpemUgKiAyKTsKKwkJICAgICBuYXNpZCA8ICgocmVnaW9uICsgMSkgKiByZWdpb25fc2l6ZSAqIDIpOwogCQkgICAgIG5hc2lkICs9IDIpIHsKIAogCQkJaWYgKCh2b2xhdGlsZSBpbnQpIHhwY19leGl0aW5nKSB7CkBAIC04NTIsMTQgKzEwODIsMTQgQEAKIAkJCWRldl9kYmcoeHBjX3BhcnQsICJjaGVja2luZyBuYXNpZCAlZFxuIiwgbmFzaWQpOwogCiAKLQkJCWlmIChYUENfTkFTSURfSU5fQVJSQVkobmFzaWQsIHJwLT5wYXJ0X25hc2lkcykpIHsKKwkJCWlmIChYUENfTkFTSURfSU5fQVJSQVkobmFzaWQsIHhwY19wYXJ0X25hc2lkcykpIHsKIAkJCQlkZXZfZGJnKHhwY19wYXJ0LCAiUFJPTSBpbmRpY2F0ZXMgTmFzaWQgJWQgaXMgIgogCQkJCQkicGFydCBvZiB0aGUgbG9jYWwgcGFydGl0aW9uOyBza2lwcGluZyAiCiAJCQkJCSJyZWdpb25cbiIsIG5hc2lkKTsKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKCEoWFBDX05BU0lEX0lOX0FSUkFZKG5hc2lkLCBycC0+bWFjaF9uYXNpZHMpKSkgeworCQkJaWYgKCEoWFBDX05BU0lEX0lOX0FSUkFZKG5hc2lkLCB4cGNfbWFjaF9uYXNpZHMpKSkgewogCQkJCWRldl9kYmcoeHBjX3BhcnQsICJQUk9NIGluZGljYXRlcyBOYXNpZCAlZCB3YXMgIgogCQkJCQkibm90IG9uIE51bWEtTGluayBuZXR3b3JrIGF0IHJlc2V0XG4iLAogCQkJCQluYXNpZCk7CkBAIC04NzcsNyArMTEwNyw3IEBACiAJCQkvKiBwdWxsIG92ZXIgdGhlIHJlc2VydmVkIHBhZ2Ugc3RydWN0dXJlICovCiAKIAkJCXJldCA9IHhwY19nZXRfcmVtb3RlX3JwKG5hc2lkLCBkaXNjb3ZlcmVkX25hc2lkcywKLQkJCQkJICAgICAgcmVtb3RlX3JwLCAmcmVtb3RlX3JzdmRfcGFnZV9wYSk7CisJCQkJCSAgICAgIHJlbW90ZV9ycCwgJnJlbW90ZV9ycF9wYSk7CiAJCQlpZiAocmV0ICE9IHhwY1N1Y2Nlc3MpIHsKIAkJCQlkZXZfZGJnKHhwY19wYXJ0LCAidW5hYmxlIHRvIGdldCByZXNlcnZlZCBwYWdlICIKIAkJCQkJImZyb20gbmFzaWQgJWQsIHJlYXNvbj0lZFxuIiwgbmFzaWQsCkBAIC05NDgsNiArMTE3OCwxMyBAQAogCQkJCXJlbW90ZV92YXJzLT5hY3RfbmFzaWQsCiAJCQkJcmVtb3RlX3ZhcnMtPmFjdF9waHlzX2NwdWlkKTsKIAorCQkJaWYgKFhQQ19TVVBQT1JUU19ESVNFTkdBR0VfUkVRVUVTVChyZW1vdGVfdmFycy0+CisJCQkJCQkJCXZlcnNpb24pKSB7CisJCQkJcGFydC0+cmVtb3RlX2Ftb3NfcGFnZV9wYSA9CisJCQkJCQlyZW1vdGVfdmFycy0+YW1vc19wYWdlX3BhOworCQkJCXhwY19tYXJrX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHBhcnQpOworCQkJCXhwY19jYW5jZWxfcGFydGl0aW9uX2Rpc2VuZ2FnZV9yZXF1ZXN0KHBhcnQpOworCQkJfQogCQkJeHBjX0lQSV9zZW5kX2FjdGl2YXRlKHJlbW90ZV92YXJzKTsKIAkJfQogCX0KQEAgLTk3NCwxMiArMTIxMSwxMiBAQAogCQlyZXR1cm4geHBjUGFydGl0aW9uRG93bjsKIAl9CiAKLQlwYXJ0X25hc2lkX3BhID0gcGFydC0+cmVtb3RlX3JwX3BhICsKLQkJKHU2NCkgJigoc3RydWN0IHhwY19yc3ZkX3BhZ2UgKikgMCktPnBhcnRfbmFzaWRzOworCW1lbXNldChuYXNpZF9tYXNrLCAwLCBYUF9OQVNJRF9NQVNLX0JZVEVTKTsKKworCXBhcnRfbmFzaWRfcGEgPSAodTY0KSBYUENfUlBfUEFSVF9OQVNJRFMocGFydC0+cmVtb3RlX3JwX3BhKTsKIAogCWJ0ZV9yZXMgPSB4cF9idGVfY29weShwYXJ0X25hc2lkX3BhLCBpYTY0X3RwYSgodTY0KSBuYXNpZF9tYXNrKSwKLQkJCQlMMV9DQUNIRV9BTElHTihYUF9OQVNJRF9NQVNLX0JZVEVTKSwKLQkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOworCQkJeHBfbmFzaWRfbWFza19ieXRlcywgKEJURV9OT1RJRlkgfCBCVEVfV0FDUVVJUkUpLCBOVUxMKTsKIAogCXJldHVybiB4cGNfbWFwX2J0ZV9lcnJvcnMoYnRlX3Jlcyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCmluZGV4IDc1ZTZlODcuLjliZjlmMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCkBAIC0zMjYsNiArMzI2LDI5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCWludCByZXQ7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OworCisJLyoKKwkgKiBGaXJzdCwgdHJ5IHRoZSBTTl9TQUxfSU9JRl9QQ0lfU0FGRSBTQUwgY2FsbCB3aGljaCBjYW4gd29yaworCSAqIGFyb3VuZCBodyBpc3N1ZXMgYXQgdGhlIHBjaSBidXMgbGV2ZWwuICBTR0kgcHJvbXMgb2xkZXIgdGhhbgorCSAqIDQuMTAgZG9uJ3QgaW1wbG1lbnQgdGhpcy4KKwkgKi8KKworCVNBTF9DQUxMKGlzcnYsIFNOX1NBTF9JT0lGX1BDSV9TQUZFLAorCQlwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyLAorCQkwLCAvKiBpbyAqLworCQkwLCAvKiByZWFkICovCisJCXBvcnQsIHNpemUsIF9fcGEodmFsKSk7CisKKwlpZiAoaXNydi5zdGF0dXMgPT0gMCkKKwkJcmV0dXJuIHNpemU7CisKKwkvKgorCSAqIElmIHRoZSBhYm92ZSBmYWlsZWQsIHJldHJ5IHVzaW5nIHRoZSBTQUxfUFJPQkUgY2FsbCB3aGljaCBzaG91bGQKKwkgKiBiZSBwcmVzZW50IGluIGFsbCBwcm9tcyAoYnV0IHdoaWNoIGNhbm5vdCB3b3JrIHJvdW5kIFBDSSBjaGlwc2V0CisJICogYnVncykuICBUaGlzIGNvZGUgaXMgcmV0YWluZWQgZm9yIGNvbXBhdGFiaWxpdHkgd2l0aCBvbGQKKwkgKiBwcmUtNC4xMCBwcm9tcywgYW5kIHNob3VsZCBiZSByZW1vdmVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KIAogCWlmICghU05fUENJQlVTX0JVU1NPRlQoYnVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zNDksNiArMzcyLDI5IEBACiAJaW50IHJldCA9IHNpemU7CiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKIAl1bnNpZ25lZCBsb25nICphZGRyOworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydjsKKworCS8qCisJICogRmlyc3QsIHRyeSB0aGUgU05fU0FMX0lPSUZfUENJX1NBRkUgU0FMIGNhbGwgd2hpY2ggY2FuIHdvcmsKKwkgKiBhcm91bmQgaHcgaXNzdWVzIGF0IHRoZSBwY2kgYnVzIGxldmVsLiAgU0dJIHByb21zIG9sZGVyIHRoYW4KKwkgKiA0LjEwIGRvbid0IGltcGxtZW50IHRoaXMuCisJICovCisKKwlTQUxfQ0FMTChpc3J2LCBTTl9TQUxfSU9JRl9QQ0lfU0FGRSwKKwkJcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlciwKKwkJMCwgLyogaW8gKi8KKwkJMSwgLyogd3JpdGUgKi8KKwkJcG9ydCwgc2l6ZSwgX19wYSgmdmFsKSk7CisKKwlpZiAoaXNydi5zdGF0dXMgPT0gMCkKKwkJcmV0dXJuIHNpemU7CisKKwkvKgorCSAqIElmIHRoZSBhYm92ZSBmYWlsZWQsIHJldHJ5IHVzaW5nIHRoZSBTQUxfUFJPQkUgY2FsbCB3aGljaCBzaG91bGQKKwkgKiBiZSBwcmVzZW50IGluIGFsbCBwcm9tcyAoYnV0IHdoaWNoIGNhbm5vdCB3b3JrIHJvdW5kIFBDSSBjaGlwc2V0CisJICogYnVncykuICBUaGlzIGNvZGUgaXMgcmV0YWluZWQgZm9yIGNvbXBhdGFiaWxpdHkgd2l0aCBvbGQKKwkgKiBwcmUtNC4xMCBwcm9tcywgYW5kIHNob3VsZCBiZSByZW1vdmVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KIAogCWlmICghU05fUENJQlVTX0JVU1NPRlQoYnVzKSkgewogCQlyZXQgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMKaW5kZXggMjE0MjZkMC4uNGY3MThjMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnJfcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CkBAIC0yOSwxMCArMzAsMTAgQEAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CiAJCWNhc2UgUENJQlJfQlJJREdFVFlQRV9USU9DUDoKLQkJCXB0ci0+dGlvLmNwX2NvbnRyb2wgJj0gfmJpdHM7CisJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT50aW8uY3BfY29udHJvbCwgYml0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfd2lkX2NvbnRyb2wgJj0gfmJpdHM7CisJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT5waWMucF93aWRfY29udHJvbCwgYml0cyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC00OSwxMCArNTAsMTAgQEAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CiAJCWNhc2UgUENJQlJfQlJJREdFVFlQRV9USU9DUDoKLQkJCXB0ci0+dGlvLmNwX2NvbnRyb2wgfD0gYml0czsKKwkJCV9fc25fc2V0cV9yZWxheGVkKCZwdHItPnRpby5jcF9jb250cm9sLCBiaXRzKTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcHRyLT5waWMucF93aWRfY29udHJvbCB8PSBiaXRzOworCQkJX19zbl9zZXRxX3JlbGF4ZWQoJnB0ci0+cGljLnBfd2lkX2NvbnRyb2wsIGJpdHMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwYW5pYwpAQCAtNzMsMTAgKzc0LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlyZXQgPSBwdHItPnRpby5jcF90Zmx1c2g7CisJCQlyZXQgPSBfX3NuX3JlYWRxX3JlbGF4ZWQoJnB0ci0+dGlvLmNwX3RmbHVzaCk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXJldCA9IHB0ci0+cGljLnBfd2lkX3RmbHVzaDsKKwkJCXJldCA9IF9fc25fcmVhZHFfcmVsYXhlZCgmcHRyLT5waWMucF93aWRfdGZsdXNoKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMKQEAgLTEwMywxMCArMTA0LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlyZXQgPSBwdHItPnRpby5jcF9pbnRfc3RhdHVzOworCQkJcmV0ID0gX19zbl9yZWFkcV9yZWxheGVkKCZwdHItPnRpby5jcF9pbnRfc3RhdHVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcmV0ID0gcHRyLT5waWMucF9pbnRfc3RhdHVzOworCQkJcmV0ID0gX19zbl9yZWFkcV9yZWxheGVkKCZwdHItPnBpYy5wX2ludF9zdGF0dXMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwYW5pYwpAQCAtMTI3LDEwICsxMjgsMTAgQEAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CiAJCWNhc2UgUENJQlJfQlJJREdFVFlQRV9USU9DUDoKLQkJCXB0ci0+dGlvLmNwX2ludF9lbmFibGUgJj0gfmJpdHM7CisJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT50aW8uY3BfaW50X2VuYWJsZSwgYml0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfaW50X2VuYWJsZSAmPSB+Yml0czsKKwkJCV9fc25fY2xycV9yZWxheGVkKCZwdHItPnBpYy5wX2ludF9lbmFibGUsIH5iaXRzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMKQEAgLTE0NywxMCArMTQ4LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlwdHItPnRpby5jcF9pbnRfZW5hYmxlIHw9IGJpdHM7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmcHRyLT50aW8uY3BfaW50X2VuYWJsZSwgYml0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfaW50X2VuYWJsZSB8PSBiaXRzOworCQkJX19zbl9zZXRxX3JlbGF4ZWQoJnB0ci0+cGljLnBfaW50X2VuYWJsZSwgYml0cyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC0xNzEsMTQgKzE3MiwxNiBAQAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1RJT0NQOgotCQkJcHRyLT50aW8uY3BfaW50X2FkZHJbaW50X25dICY9IH5USU9DUF9IT1NUX0lOVFJfQUREUjsKLQkJCXB0ci0+dGlvLmNwX2ludF9hZGRyW2ludF9uXSB8PQotCQkJICAgIChhZGRyICYgVElPQ1BfSE9TVF9JTlRSX0FERFIpOworCQkJX19zbl9jbHJxX3JlbGF4ZWQoJnB0ci0+dGlvLmNwX2ludF9hZGRyW2ludF9uXSwKKwkJCSAgICBUSU9DUF9IT1NUX0lOVFJfQUREUik7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmcHRyLT50aW8uY3BfaW50X2FkZHJbaW50X25dLAorCQkJICAgIChhZGRyICYgVElPQ1BfSE9TVF9JTlRSX0FERFIpKTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcHRyLT5waWMucF9pbnRfYWRkcltpbnRfbl0gJj0gflBJQ19IT1NUX0lOVFJfQUREUjsKLQkJCXB0ci0+cGljLnBfaW50X2FkZHJbaW50X25dIHw9Ci0JCQkgICAgKGFkZHIgJiBQSUNfSE9TVF9JTlRSX0FERFIpOworCQkJX19zbl9jbHJxX3JlbGF4ZWQoJnB0ci0+cGljLnBfaW50X2FkZHJbaW50X25dLAorCQkJICAgIFBJQ19IT1NUX0lOVFJfQUREUik7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmcHRyLT5waWMucF9pbnRfYWRkcltpbnRfbl0sCisJCQkgICAgKGFkZHIgJiBQSUNfSE9TVF9JTlRSX0FERFIpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMKQEAgLTE5OCwxMCArMjAxLDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlwdHItPnRpby5jcF9mb3JjZV9waW5baW50X25dID0gMTsKKwkJCXdyaXRlcSgxLCAmcHRyLT50aW8uY3BfZm9yY2VfcGluW2ludF9uXSk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfZm9yY2VfcGluW2ludF9uXSA9IDE7CisJCQl3cml0ZXEoMSwgJnB0ci0+cGljLnBfZm9yY2VfcGluW2ludF9uXSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC0yMjIsMTAgKzIyNSwxMiBAQAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1RJT0NQOgotCQkJcmV0ID0gcHRyLT50aW8uY3Bfd3JfcmVxX2J1ZltkZXZpY2VdOworCQkJcmV0ID0KKwkJCSAgICBfX3NuX3JlYWRxX3JlbGF4ZWQoJnB0ci0+dGlvLmNwX3dyX3JlcV9idWZbZGV2aWNlXSk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXJldCA9IHB0ci0+cGljLnBfd3JfcmVxX2J1ZltkZXZpY2VdOworCQkJcmV0ID0KKwkJCSAgICBfX3NuX3JlYWRxX3JlbGF4ZWQoJnB0ci0+cGljLnBfd3JfcmVxX2J1ZltkZXZpY2VdKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkgICAgICBwYW5pYygicGNpcmVnX3dyYl9mbHVzaF9nZXQ6IHVua25vd24gYnJpZGdldHlwZSBicmlkZ2UgMHglcCIsICh2b2lkICopcHRyKTsKQEAgLTI0NCwxMCArMjQ5LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlwdHItPnRpby5jcF9pbnRfYXRlX3JhbVthdGVfaW5kZXhdID0gKHVpbnQ2NF90KSB2YWw7CisJCQl3cml0ZXEodmFsLCAmcHRyLT50aW8uY3BfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSA9ICh1aW50NjRfdCkgdmFsOworCQkJd3JpdGVxKHZhbCwgJnB0ci0+cGljLnBfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC0yNjUsMTIgKzI3MCwxMCBAQAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1RJT0NQOgotCQkJcmV0ID0KLQkJCSAgICAodWludDY0X3QgKikgJiAocHRyLT50aW8uY3BfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSk7CisJCQlyZXQgPSAmcHRyLT50aW8uY3BfaW50X2F0ZV9yYW1bYXRlX2luZGV4XTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcmV0ID0KLQkJCSAgICAodWludDY0X3QgKikgJiAocHRyLT5waWMucF9pbnRfYXRlX3JhbVthdGVfaW5kZXhdKTsKKwkJCXJldCA9ICZwdHItPnBpYy5wX2ludF9hdGVfcmFtW2F0ZV9pbmRleF07CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKaW5kZXggMTliY2VkMy4uNDZiNjQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3Rpb2NhX3Byb3ZpZGVyLmg+CkBAIC0zNyw3ICszOCw3IEBACiAJdWludDY0X3Qgb2Zmc2V0OwogCXN0cnVjdCBwYWdlICp0bXA7CiAJc3RydWN0IHRpb2NhX2NvbW1vbiAqdGlvY2FfY29tbW9uOwotCXZvbGF0aWxlIHN0cnVjdCB0aW9jYSAqY2FfYmFzZTsKKwlzdHJ1Y3QgdGlvY2EgKmNhX2Jhc2U7CiAKIAl0aW9jYV9jb21tb24gPSB0aW9jYV9rZXJuLT5jYV9jb21tb247CiAJY2FfYmFzZSA9IChzdHJ1Y3QgdGlvY2EgKil0aW9jYV9jb21tb24tPmNhX2NvbW1vbi5ic19iYXNlOwpAQCAtMTc0LDI3ICsxNzUsMjkgQEAKIAkgKiAJRElTQUJMRSBHQVJUIFBSRUZFVENISU5HIGR1ZSB0byBodyBidWcgdHJhY2tlZCBpbiBTR0kgUFY5MzAwMjkKIAkgKi8KIAotCWNhX2Jhc2UtPmNhX2NvbnRyb2wxIHw9IENBX0FHUERNQV9PUF9FTkJfQ09NQkRFTEFZOwkvKiBQVjg5NTQ2OSA/ICovCi0JY2FfYmFzZS0+Y2FfY29udHJvbDIgJj0gfihDQV9HQVJUX01FTV9QQVJBTSk7Ci0JY2FfYmFzZS0+Y2FfY29udHJvbDIgfD0gKDB4MnVsbCA8PCBDQV9HQVJUX01FTV9QQVJBTV9TSEZUKTsKKwlfX3NuX3NldHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDEsCisJCQlDQV9BR1BETUFfT1BfRU5CX0NPTUJERUxBWSk7CS8qIFBWODk1NDY5ID8gKi8KKwlfX3NuX2NscnFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIsIENBX0dBUlRfTUVNX1BBUkFNKTsKKwlfX3NuX3NldHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIsCisJCQkoMHgydWxsIDw8IENBX0dBUlRfTUVNX1BBUkFNX1NIRlQpKTsKIAl0aW9jYV9rZXJuLT5jYV9nYXJ0X2lzY29oZXJlbnQgPSAxOwotCWNhX2Jhc2UtPmNhX2NvbnRyb2wyICY9Ci0JICAgIH4oQ0FfR0FSVF9XUl9QUkVGRVRDSF9FTkIgfCBDQV9HQVJUX1JEX1BSRUZFVENIX0VOQik7CisJX19zbl9jbHJxX3JlbGF4ZWQoJmNhX2Jhc2UtPmNhX2NvbnRyb2wyLAorCSAgICAJCShDQV9HQVJUX1dSX1BSRUZFVENIX0VOQiB8IENBX0dBUlRfUkRfUFJFRkVUQ0hfRU5CKSk7CiAKIAkvKgogCSAqIFVubWFzayBHQVJUIGZldGNoIGVycm9yIGludGVycnVwdHMuICBDbGVhciByZXNpZHVhbCBlcnJvcnMgZmlyc3QuCiAJICovCiAKLQljYV9iYXNlLT5jYV9pbnRfc3RhdHVzX2FsaWFzID0gQ0FfR0FSVF9GRVRDSF9FUlI7Ci0JY2FfYmFzZS0+Y2FfbXVsdF9lcnJvcl9hbGlhcyA9IENBX0dBUlRfRkVUQ0hfRVJSOwotCWNhX2Jhc2UtPmNhX2ludF9tYXNrICY9IH5DQV9HQVJUX0ZFVENIX0VSUjsKKwl3cml0ZXEoQ0FfR0FSVF9GRVRDSF9FUlIsICZjYV9iYXNlLT5jYV9pbnRfc3RhdHVzX2FsaWFzKTsKKwl3cml0ZXEoQ0FfR0FSVF9GRVRDSF9FUlIsICZjYV9iYXNlLT5jYV9tdWx0X2Vycm9yX2FsaWFzKTsKKwlfX3NuX2NscnFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfaW50X21hc2ssIENBX0dBUlRfRkVUQ0hfRVJSKTsKIAogCS8qCiAJICogUHJvZ3JhbSB0aGUgYXBlcmF0dXJlIGFuZCBnYXJ0IHJlZ2lzdGVycyBpbiBUSU9DQQogCSAqLwogCi0JY2FfYmFzZS0+Y2FfZ2FydF9hcGVyYXR1cmUgPSBhcF9yZWc7Ci0JY2FfYmFzZS0+Y2FfZ2FydF9wdHJfdGFibGUgPSB0aW9jYV9rZXJuLT5jYV9nYXJ0X2NvcmV0YWxrX2FkZHIgfCAxOworCXdyaXRlcShhcF9yZWcsICZjYV9iYXNlLT5jYV9nYXJ0X2FwZXJhdHVyZSk7CisJd3JpdGVxKHRpb2NhX2tlcm4tPmNhX2dhcnRfY29yZXRhbGtfYWRkcnwxLCAmY2FfYmFzZS0+Y2FfZ2FydF9wdHJfdGFibGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTEsNyArMjE0LDYgQEAKIHRpb2NhX2Zhc3R3cml0ZV9lbmFibGUoc3RydWN0IHRpb2NhX2tlcm5lbCAqdGlvY2Ffa2VybikKIHsKIAlpbnQgY2FwX3B0cjsKLQl1aW50NjRfdCBjYV9jb250cm9sMTsKIAl1aW50MzJfdCByZWc7CiAJc3RydWN0IHRpb2NhICp0aW9jYV9iYXNlOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtMjU2LDkgKzI1OCw3IEBACiAJICovCiAKIAl0aW9jYV9iYXNlID0gKHN0cnVjdCB0aW9jYSAqKWNvbW1vbi0+Y2FfY29tbW9uLmJzX2Jhc2U7Ci0JY2FfY29udHJvbDEgPSB0aW9jYV9iYXNlLT5jYV9jb250cm9sMTsKLQljYV9jb250cm9sMSB8PSBDQV9BR1BfRldfRU5BQkxFOwotCXRpb2NhX2Jhc2UtPmNhX2NvbnRyb2wxID0gY2FfY29udHJvbDE7CisJX19zbl9zZXRxX3JlbGF4ZWQoJnRpb2NhX2Jhc2UtPmNhX2NvbnRyb2wxLCBDQV9BR1BfRldfRU5BQkxFKTsKIH0KIAogRVhQT1JUX1NZTUJPTCh0aW9jYV9mYXN0d3JpdGVfZW5hYmxlKTsJLyogdXNlZCBieSBhZ3Atc2dpICovCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYWdwX2RtYV9leHRuID0gY2FfYmFzZS0+Y2FfYWdwX2RtYV9hZGRyX2V4dG47CisJYWdwX2RtYV9leHRuID0gX19zbl9yZWFkcV9yZWxheGVkKCZjYV9iYXNlLT5jYV9hZ3BfZG1hX2FkZHJfZXh0bik7CiAJaWYgKG5vZGVfdXBwZXIgIT0gKGFncF9kbWFfZXh0biA+PiBDQV9BR1BfRE1BX05PREVfSURfU0hGVCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogIGNvcmV0YWxrIHVwcGVyIG5vZGUgKCV1KSAiCiAJCSAgICAgICAibWlzbWF0Y2ggd2l0aCBjYV9hZ3BfZG1hX2FkZHJfZXh0biAoJWx1KVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwppbmRleCA4ZTc1ZGIyLi45ZjAzZDRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9pby5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lkZXYuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vdGlvY2VfcHJvdmlkZXIuaD4KQEAgLTIyNyw3ICsyMjgsNyBAQAogCiAJCWF0ZSA9IEFURV9NQUtFKGFkZHIsIHBhZ2VzaXplKTsKIAkJYXRlX3NoYWRvd1tpICsgal0gPSBhdGU7Ci0JCWF0ZV9yZWdbaSArIGpdID0gYXRlOworCQl3cml0ZXEoYXRlLCAmYXRlX3JlZ1tpICsgal0pOwogCQlhZGRyICs9IHBhZ2VzaXplOwogCX0KIApAQCAtMjY4LDEwICsyNjksMTAgQEAKIAlwY2lkZXZfdG9fdGlvY2UocGRldiwgJmNlX21tciwgJmNlX2tlcm4sICZwb3J0KTsKIAogCWlmIChjZV9rZXJuLT5jZV9wb3J0W3BvcnRdLmRpcm1hcF9yZWZjbnQgPT0gMCkgewotCQl2b2xhdGlsZSB1aW50NjRfdCB0bXA7CisJCXVpbnQ2NF90IHRtcDsKIAogCQljZV9rZXJuLT5jZV9wb3J0W3BvcnRdLmRpcm1hcF9zaGFkb3cgPSBjdF91cHBlcjsKLQkJY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XSA9IGN0X3VwcGVyOworCQl3cml0ZXEoY3RfdXBwZXIsICZjZV9tbXItPmNlX3VyZV9kaXJfbWFwW3BvcnRdKTsKIAkJdG1wID0gY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XTsKIAkJZG1hX29rID0gMTsKIAl9IGVsc2UKQEAgLTM0Myw3ICszNDQsNyBAQAogCWlmIChUSU9DRV9EMzJfQUREUihidXNfYWRkcikpIHsKIAkJaWYgKC0tY2Vfa2Vybi0+Y2VfcG9ydFtwb3J0XS5kaXJtYXBfcmVmY250ID09IDApIHsKIAkJCWNlX2tlcm4tPmNlX3BvcnRbcG9ydF0uZGlybWFwX3NoYWRvdyA9IDA7Ci0JCQljZV9tbXItPmNlX3VyZV9kaXJfbWFwW3BvcnRdID0gMDsKKwkJCXdyaXRlcSgwLCAmY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XSk7CiAJCX0KIAl9IGVsc2UgewogCQlzdHJ1Y3QgdGlvY2VfZG1hbWFwICptYXA7CkBAIC01ODIsMTggKzU4MywxOCBAQAogCSAqLwogCiAJdGlvY2VfbW1yID0gKHN0cnVjdCB0aW9jZSAqKXRpb2NlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX2Jhc2U7Ci0JdGlvY2VfbW1yLT5jZV91cmVfcGFnZV9tYXAgJj0gfkNFX1VSRV9QQUdFU0laRV9NQVNLOwotCXRpb2NlX21tci0+Y2VfdXJlX3BhZ2VfbWFwIHw9IENFX1VSRV8yNTZLX1BBR0VTSVpFOworCV9fc25fY2xycV9yZWxheGVkKCZ0aW9jZV9tbXItPmNlX3VyZV9wYWdlX21hcCwgQ0VfVVJFX1BBR0VTSVpFX01BU0spOworCV9fc25fc2V0cV9yZWxheGVkKCZ0aW9jZV9tbXItPmNlX3VyZV9wYWdlX21hcCwgQ0VfVVJFXzI1NktfUEFHRVNJWkUpOwogCXRpb2NlX2tlcm4tPmNlX2F0ZTMyNDBfcGFnZXNpemUgPSBLQigyNTYpOwogCiAJZm9yIChpID0gMDsgaSA8IFRJT0NFX05VTV9NNDBfQVRFUzsgaSsrKSB7CiAJCXRpb2NlX2tlcm4tPmNlX2F0ZTQwX3NoYWRvd1tpXSA9IDA7Ci0JCXRpb2NlX21tci0+Y2VfdXJlX2F0ZTQwW2ldID0gMDsKKwkJd3JpdGVxKDAsICZ0aW9jZV9tbXItPmNlX3VyZV9hdGU0MFtpXSk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IFRJT0NFX05VTV9NMzI0MF9BVEVTOyBpKyspIHsKIAkJdGlvY2Vfa2Vybi0+Y2VfYXRlMzI0MF9zaGFkb3dbaV0gPSAwOwotCQl0aW9jZV9tbXItPmNlX3VyZV9hdGUzMjQwW2ldID0gMDsKKwkJd3JpdGVxKDAsICZ0aW9jZV9tbXItPmNlX3VyZV9hdGUzMjQwW2ldKTsKIAl9CiAKIAlyZXR1cm4gdGlvY2Vfa2VybjsKQEAgLTY2NSw3ICs2NjYsNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9Ci0JY2VfbW1yLT5jZV9hZG1fZm9yY2VfaW50ID0gZm9yY2VfaW50X3ZhbDsKKwl3cml0ZXEoZm9yY2VfaW50X3ZhbCwgJmNlX21tci0+Y2VfYWRtX2ZvcmNlX2ludCk7CiB9CiAKIC8qKgpAQCAtNjg2LDYgKzY4Nyw3IEBACiAJc3RydWN0IHRpb2NlX2NvbW1vbiAqY2VfY29tbW9uOwogCXN0cnVjdCB0aW9jZSAqY2VfbW1yOwogCWludCBiaXQ7CisJdWludDY0X3QgdmVjdG9yOwogCiAJcGNpZGV2X2luZm8gPSAoc3RydWN0IHBjaWRldl9pbmZvICopc25faXJxX2luZm8tPmlycV9wY2lpb2luZm87CiAJaWYgKCFwY2lkZXZfaW5mbykKQEAgLTY5NiwxMSArNjk4LDExIEBACiAKIAliaXQgPSBzbl9pcnFfaW5mby0+aXJxX2ludF9iaXQ7CiAKLQljZV9tbXItPmNlX2FkbV9pbnRfbWFzayB8PSAoMVVMIDw8IGJpdCk7Ci0JY2VfbW1yLT5jZV9hZG1faW50X2Rlc3RbYml0XSA9Ci0JCSgodWludDY0X3Qpc25faXJxX2luZm8tPmlycV9pcnEgPDwgSU5UUl9WRUNUT1JfU0hGVCkgfAotCQkJICAgc25faXJxX2luZm8tPmlycV94dGFsa2FkZHI7Ci0JY2VfbW1yLT5jZV9hZG1faW50X21hc2sgJj0gfigxVUwgPDwgYml0KTsKKwlfX3NuX3NldHFfcmVsYXhlZCgmY2VfbW1yLT5jZV9hZG1faW50X21hc2ssICgxVUwgPDwgYml0KSk7CisJdmVjdG9yID0gKHVpbnQ2NF90KXNuX2lycV9pbmZvLT5pcnFfaXJxIDw8IElOVFJfVkVDVE9SX1NIRlQ7CisJdmVjdG9yIHw9IHNuX2lycV9pbmZvLT5pcnFfeHRhbGthZGRyOworCXdyaXRlcSh2ZWN0b3IsICZjZV9tbXItPmNlX2FkbV9pbnRfZGVzdFtiaXRdKTsKKwlfX3NuX2NscnFfcmVsYXhlZCgmY2VfbW1yLT5jZV9hZG1faW50X21hc2ssICgxVUwgPDwgYml0KSk7CiAKIAl0aW9jZV9mb3JjZV9pbnRlcnJ1cHQoc25faXJxX2luZm8pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMWExMDlhNi4uNjU2NzBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogIyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy4KICMKIAotb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaS8KK29iai0kKENPTkZJR19QQ0kpCQkrPSBwY2kvIHVzYi8KIG9iai0kKENPTkZJR19QQVJJU0MpCQkrPSBwYXJpc2MvCiBvYmoteQkJCQkrPSB2aWRlby8KIG9iai0kKENPTkZJR19BQ1BJKQkJKz0gYWNwaS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDE1ZTZhOGYuLjBkMmUxMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMzAsMjMgKzMwLDYgQEAKIERFQ0xBUkVfTVVURVgoZHBtX3NlbSk7CiBERUNMQVJFX01VVEVYKGRwbV9saXN0X3NlbSk7CiAKLS8qCi0gKiBQTSBSZWZlcmVuY2UgQ291bnRpbmcuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9ob2xkKHN0cnVjdCBkZXZpY2UgKiBkZXYpCi17Ci0JaWYgKGRldikKLQkJYXRvbWljX2luYygmZGV2LT5wb3dlci5wbV91c2Vycyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICogZGV2KQotewotCWlmIChkZXYpCi0JCWF0b21pY19kZWMoJmRldi0+cG93ZXIucG1fdXNlcnMpOwotfQotCi0KIC8qKgogICoJZGV2aWNlX3BtX3NldF9wYXJlbnQgLSBTcGVjaWZ5IHBvd2VyIGRlcGVuZGVuY3kuCiAgKglAZGV2OgkJRGV2aWNlIHdobyBuZWVkcyBwb3dlci4KQEAgLTYyLDEwICs0NSw4IEBACiAKIHZvaWQgZGV2aWNlX3BtX3NldF9wYXJlbnQoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZSAqIHBhcmVudCkKIHsKLQlzdHJ1Y3QgZGV2aWNlICogb2xkX3BhcmVudCA9IGRldi0+cG93ZXIucG1fcGFyZW50OwotCWRldmljZV9wbV9yZWxlYXNlKG9sZF9wYXJlbnQpOwotCWRldi0+cG93ZXIucG1fcGFyZW50ID0gcGFyZW50OwotCWRldmljZV9wbV9ob2xkKHBhcmVudCk7CisJcHV0X2RldmljZShkZXYtPnBvd2VyLnBtX3BhcmVudCk7CisJZGV2LT5wb3dlci5wbV9wYXJlbnQgPSBnZXRfZGV2aWNlKHBhcmVudCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfcG1fc2V0X3BhcmVudCk7CiAKQEAgLTc1LDcgKzU2LDYgQEAKIAogCXByX2RlYnVnKCJQTTogQWRkaW5nIGluZm8gZm9yICVzOiVzXG4iLAogCQkgZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLCBkZXYtPmtvYmoubmFtZSk7Ci0JYXRvbWljX3NldCgmZGV2LT5wb3dlci5wbV91c2VycywgMCk7CiAJZG93bigmZHBtX2xpc3Rfc2VtKTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2FjdGl2ZSk7CiAJZGV2aWNlX3BtX3NldF9wYXJlbnQoZGV2LCBkZXYtPnBhcmVudCk7CkBAIC05MSw3ICs3MSw3IEBACiAJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsIGRldi0+a29iai5uYW1lKTsKIAlkb3duKCZkcG1fbGlzdF9zZW0pOwogCWRwbV9zeXNmc19yZW1vdmUoZGV2KTsKLQlkZXZpY2VfcG1fcmVsZWFzZShkZXYtPnBvd2VyLnBtX3BhcmVudCk7CisJcHV0X2RldmljZShkZXYtPnBvd2VyLnBtX3BhcmVudCk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5wb3dlci5lbnRyeSk7CiAJdXAoJmRwbV9saXN0X3NlbSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaCBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCmluZGV4IDJlNzAwZDcuLmZiM2QzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCkBAIC02Nyw5ICs2Nyw2IEBACiAgKiBydW50aW1lLmMKICAqLwogCi1leHRlcm4gaW50IGRwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqLCBwbV9tZXNzYWdlX3QpOwotZXh0ZXJuIHZvaWQgZHBtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKik7Ci0KICNlbHNlIC8qIENPTkZJR19QTSAqLwogCiAKQEAgLTgyLDE0ICs3OSw0IEBACiAKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKLXsKLQotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IGU4ZjA1MTkuLmFkYmMzMTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTM2LDYgKzM2LDcgQEAKIAlydW50aW1lX3Jlc3VtZShkZXYpOwogCXVwKCZkcG1fc2VtKTsKIH0KK0VYUE9SVF9TWU1CT0woZHBtX3J1bnRpbWVfcmVzdW1lKTsKIAogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCBlZDRkNTAwLi5iZmIyM2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC0xNTEyLDcgKzE1MTIsNyBAQAogCXNjbWQtPm5zZyA9IDE7CiAJc2cgPSAmc2NtZC0+c2d2WzBdOwogCXNnLT5wYWdlID0gdmlydF90b19wYWdlKHNjLT50b3Bfc2Vuc2UpOwotCXNnLT5vZmZzZXQgPSAodW5zaWduZWQgaW50KXNjLT50b3Bfc2Vuc2UgJiAoUEFHRV9TSVpFLTEpOworCXNnLT5vZmZzZXQgPSAodW5zaWduZWQgbG9uZylzYy0+dG9wX3NlbnNlICYgKFBBR0VfU0laRS0xKTsKIAlzZy0+bGVuZ3RoID0gVUJfU0VOU0VfU0laRTsKIAlzY21kLT5sZW4gPSBVQl9TRU5TRV9TSVpFOwogCXNjbWQtPmx1biA9IGNtZC0+bHVuOwpAQCAtMTg5MSw3ICsxODkxLDcgQEAKIAljbWQtPm5zZyA9IDE7CiAJc2cgPSAmY21kLT5zZ3ZbMF07CiAJc2ctPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocCk7Ci0Jc2ctPm9mZnNldCA9ICh1bnNpZ25lZCBpbnQpcCAmIChQQUdFX1NJWkUtMSk7CisJc2ctPm9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXAgJiAoUEFHRV9TSVpFLTEpOwogCXNnLT5sZW5ndGggPSA4OwogCWNtZC0+bGVuID0gODsKIAljbWQtPmx1biA9IGx1bjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc2dpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zZ2ktYWdwLmMKaW5kZXggZDNhYTE1OS4uNzk1N2ZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zZ2ktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zZ2ktYWdwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3Rpb2NhX3Byb3ZpZGVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW10aW1lci5jIGIvZHJpdmVycy9jaGFyL21tdGltZXIuYwppbmRleCAxMjAwNjE4Li43OGM4OWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW10aW1lci5jCisrKyBiL2RyaXZlcnMvY2hhci9tbXRpbWVyLmMKQEAgLTQ0MSw3ICs0NDEsNyBAQAogbW10aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaTsKLQltbXRpbWVyX3QgKmJhc2UgPSB0aW1lcnMgKyBjcHVpZF90b19jbm9kZWlkKHNtcF9wcm9jZXNzb3JfaWQoKSkgKgorCW1tdGltZXJfdCAqYmFzZSA9IHRpbWVycyArIGNwdV90b19ub2RlKHNtcF9wcm9jZXNzb3JfaWQoKSkgKgogCQkJCQkJTlVNX0NPTVBBUkFUT1JTOwogCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IDA7CiAJaW50IHJlc3VsdCA9IElSUV9OT05FOwpAQCAtNjA4LDcgKzYwOCw3IEBACiAJICovCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlub2RlaWQgPSAgY3B1aWRfdG9fY25vZGVpZChzbXBfcHJvY2Vzc29yX2lkKCkpOworCW5vZGVpZCA9ICBjcHVfdG9fbm9kZShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWJhc2UgPSB0aW1lcnMgKyBub2RlaWQgKiBOVU1fQ09NUEFSQVRPUlM7CiByZXRyeToKIAkvKiBEb24ndCB1c2UgYW4gYWxsb2NhdGVkIHRpbWVyLCBvciBhIGRlbGV0ZWQgb25lIHRoYXQncyBwZW5kaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zYy5jIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwppbmRleCAxNzU4YTgzLi4wZTdkMjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zYy5jCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKQEAgLTM3Nyw3ICszNzcsNyBAQAogCWRldl90IGZpcnN0X2RldiwgZGV2OwogCW5hc2lkX3QgZXZlbnRfbmFzaWQgPSBpYTY0X3NuX2dldF9jb25zb2xlX25hc2lkKCk7CiAKLQlpZiAoYWxsb2NfY2hyZGV2X3JlZ2lvbigmZmlyc3RfZGV2LCAwLCBudW1pb25vZGVzLAorCWlmIChhbGxvY19jaHJkZXZfcmVnaW9uKCZmaXJzdF9kZXYsIDAsIG51bV9jbm9kZXMsCiAJCQkJU1lTQ1RMX0JBU0VOQU1FKSA8IDApIHsKIAkJcHJpbnRrKCIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIFNOIHN5c3RlbSBjb250cm9sbGVyIGRldmljZVxuIiwKIAkJICAgICAgIF9fRlVOQ1RJT05fXyk7CkBAIC0zODUsNyArMzg1LDcgQEAKIAl9CiAJc25zY19jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgU1lTQ1RMX0JBU0VOQU1FKTsKIAotCWZvciAoY25vZGUgPSAwOyBjbm9kZSA8IG51bWlvbm9kZXM7IGNub2RlKyspIHsKKwlmb3IgKGNub2RlID0gMDsgY25vZGUgPCBudW1fY25vZGVzOyBjbm9kZSsrKSB7CiAJCQlnZW9pZCA9IGNub2RlaWRfZ2V0X2dlb2lkKGNub2RlKTsKIAkJCWRldm5hbWVwID0gZGV2bmFtZTsKIAkJCWZvcm1hdF9tb2R1bGVfaWQoZGV2bmFtZXAsIGdlb19tb2R1bGUoZ2VvaWQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCBlZTE2MDU5Li5iYmQ5YzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtNyw2ICs3LDkgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgogICoKKyAqICBJbml0L3Jlc2V0IHF1aXJrcyBmb3IgVVNCIGhvc3QgY29udHJvbGxlcnMgc2hvdWxkIGJlIGluIHRoZQorICogIFVTQiBxdWlya3MgZmlsZSwgd2hlcmUgdGhlaXIgZHJpdmVycyBjYW4gYWNjZXNzIHJldXNlIGl0LgorICoKICAqICBUaGUgYnJpZGdlIG9wdGltaXphdGlvbiBzdHVmZiBoYXMgYmVlbiByZW1vdmVkLiBJZiB5b3UgcmVhbGx5CiAgKiAgaGF2ZSBhIHNpbGx5IEJJT1Mgd2hpY2ggaXMgdW5hYmxlIHRvIHNldCB5b3VyIGhvc3QgYnJpZGdlIHJpZ2h0LAogICogIHVzZSB0aGUgUG93ZXJUd2VhayB1dGlsaXR5IChzZWUgaHR0cDovL3Bvd2VydHdlYWsuc291cmNlZm9yZ2UubmV0KS4KQEAgLTY0NSwyOCArNjQ4LDYgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0FOWV9JRCwgcXVpcmtfdmlhX2lycSk7CiAKIC8qCi0gKiBQSUlYMyBVU0I6IFdlIGhhdmUgdG8gZGlzYWJsZSBVU0IgaW50ZXJydXB0cyB0aGF0IGFyZQotICogaGFyZHdpcmVkIHRvIFBJUlFEIyBhbmQgbWF5IGJlIHNoYXJlZCB3aXRoIGFuCi0gKiBleHRlcm5hbCBkZXZpY2UuCi0gKgotICogTGVnYWN5IFN1cHBvcnQgUmVnaXN0ZXIgKExFR1NVUCk6Ci0gKiAgICAgYml0MTM6ICBVU0IgUElSUSBFbmFibGUgKFVTQlBJUlFERU4pLAotICogICAgIGJpdDQ6ICAgVHJhcC9TTUkgT24gSVJRIEVuYWJsZSAoVVNCU01JRU4pLgotICoKLSAqIFdlIG1hc2sgb3V0IGFsbCByL3djIGJpdHMsIHRvby4KLSAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3BpaXgzX3VzYihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXUxNiBsZWdzdXA7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4YzAsICZsZWdzdXApOwotCWxlZ3N1cCAmPSAweDUwZWY7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHhjMCwgbGVnc3VwKTsKLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxU0JfMiwJcXVpcmtfcGlpeDNfdXNiICk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzIsCXF1aXJrX3BpaXgzX3VzYiApOwotCi0vKgogICogVklBIFZUODJDNTk4IGhhcyBpdHMgZGV2aWNlIElEIHNldHRhYmxlIGFuZCBtYW55IEJJT1NlcwogICogc2V0IGl0IHRvIHRoZSBJRCBvZiBWVDgyQzU5NyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAqIFdlIG5lZWQgdG8gc3dpdGNoIGl0IG9mZiB0byBiZSBhYmxlIHRvIHJlY29nbml6ZSB0aGUgcmVhbApAQCAtMTAzOSwyMzQgKzEwMjAsNiBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg3NywgJnZhbCk7CiB9CiAKLQotI2RlZmluZSBVSENJX1VTQkxFR1NVUAkJMHhjMAkJLyogbGVnYWN5IHN1cHBvcnQgKi8KLSNkZWZpbmUgVUhDSV9VU0JDTUQJCTAJCS8qIGNvbW1hbmQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVUhDSV9VU0JTVFMJCTIJCS8qIHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBVSENJX1VTQklOVFIJCTQJCS8qIGludGVycnVwdCByZWdpc3RlciAqLwotI2RlZmluZSBVSENJX1VTQkxFR1NVUF9ERUZBVUxUCTB4MjAwMAkJLyogb25seSBQSVJRIGVuYWJsZSBzZXQgKi8KLSNkZWZpbmUgVUhDSV9VU0JDTURfUlVOCQkoMSA8PCAwKQkvKiBSVU4vU1RPUCBiaXQgKi8KLSNkZWZpbmUgVUhDSV9VU0JDTURfR1JFU0VUCSgxIDw8IDIpCS8qIEdsb2JhbCByZXNldCAqLwotI2RlZmluZSBVSENJX1VTQkNNRF9DT05GSUdVUkUJKDEgPDwgNikJLyogY29uZmlnIHNlbWFwaG9yZSAqLwotI2RlZmluZSBVSENJX1VTQlNUU19IQUxURUQJKDEgPDwgNSkJLyogSENIYWx0ZWQgYml0ICovCi0KLSNkZWZpbmUgT0hDSV9DT05UUk9MCQkweDA0Ci0jZGVmaW5lIE9IQ0lfQ01EU1RBVFVTCQkweDA4Ci0jZGVmaW5lIE9IQ0lfSU5UUlNUQVRVUwkJMHgwYwotI2RlZmluZSBPSENJX0lOVFJFTkFCTEUJCTB4MTAKLSNkZWZpbmUgT0hDSV9JTlRSRElTQUJMRQkweDE0Ci0jZGVmaW5lIE9IQ0lfT0NSCQkoMSA8PCAzKQkvKiBvd25lcnNoaXAgY2hhbmdlIHJlcXVlc3QgKi8KLSNkZWZpbmUgT0hDSV9DVFJMX0lSCQkoMSA8PCA4KQkvKiBpbnRlcnJ1cHQgcm91dGluZyAqLwotI2RlZmluZSBPSENJX0lOVFJfT0MJCSgxIDw8IDMwKQkvKiBvd25lcnNoaXAgY2hhbmdlICovCi0KLSNkZWZpbmUgRUhDSV9IQ0NfUEFSQU1TCQkweDA4CQkvKiBleHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgRUhDSV9VU0JDTUQJCTAJCS8qIGNvbW1hbmQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRUhDSV9VU0JDTURfUlVOCQkoMSA8PCAwKQkvKiBSVU4vU1RPUCBiaXQgKi8KLSNkZWZpbmUgRUhDSV9VU0JTVFMJCTQJCS8qIHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBFSENJX1VTQlNUU19IQUxURUQJKDEgPDwgMTIpCS8qIEhDSGFsdGVkIGJpdCAqLwotI2RlZmluZSBFSENJX1VTQklOVFIJCTgJCS8qIGludGVycnVwdCByZWdpc3RlciAqLwotI2RlZmluZSBFSENJX1VTQkxFR1NVUAkJMAkJLyogbGVnYWN5IHN1cHBvcnQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRUhDSV9VU0JMRUdTVVBfQklPUwkoMSA8PCAxNikJLyogQklPUyBzZW1hcGhvcmUgKi8KLSNkZWZpbmUgRUhDSV9VU0JMRUdTVVBfT1MJKDEgPDwgMjQpCS8qIE9TIHNlbWFwaG9yZSAqLwotI2RlZmluZSBFSENJX1VTQkxFR0NUTFNUUwk0CQkvKiBsZWdhY3kgY29udHJvbC9zdGF0dXMgKi8KLSNkZWZpbmUgRUhDSV9VU0JMRUdDVExTVFNfU09PRQkoMSA8PCAxMykJLyogU01JIG9uIG93bmVyc2hpcCBjaGFuZ2UgKi8KLQotaW50IHVzYl9lYXJseV9oYW5kb2ZmIF9fZGV2aW5pdGRhdGEgPSAwOwotc3RhdGljIGludCBfX2luaXQgdXNiX2hhbmRvZmZfZWFybHkoY2hhciAqc3RyKQotewotCXVzYl9lYXJseV9oYW5kb2ZmID0gMTsKLQlyZXR1cm4gMDsKLX0KLV9fc2V0dXAoInVzYi1oYW5kb2ZmIiwgdXNiX2hhbmRvZmZfZWFybHkpOwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdXNiX2hhbmRvZmZfdWhjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSAwOwotCWludCB3YWl0X3RpbWUsIGRlbHRhOwotCXUxNiB2YWwsIHN0czsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspCi0JCWlmICgocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgSU9SRVNPVVJDRV9JTykpIHsKLQkJCWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7Ci0JCQlicmVhazsKLQkJfQotCi0JaWYgKCFiYXNlKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIHN0b3AgY29udHJvbGxlcgotCSAqLwotCXN0cyA9IGludyhiYXNlICsgVUhDSV9VU0JTVFMpOwotCXZhbCA9IGludyhiYXNlICsgVUhDSV9VU0JDTUQpOwotCXZhbCAmPSB+KHUxNikoVUhDSV9VU0JDTURfUlVOIHwgVUhDSV9VU0JDTURfQ09ORklHVVJFKTsKLQlvdXR3KHZhbCwgYmFzZSArIFVIQ0lfVVNCQ01EKTsKLQotCS8qCi0JICogd2FpdCB3aGlsZSBpdCBzdG9wcyBpZiBpdCB3YXMgcnVubmluZwotCSAqLwotCWlmICgoc3RzICYgVUhDSV9VU0JTVFNfSEFMVEVEKSA9PSAwKQotCXsKLQkJd2FpdF90aW1lID0gMTAwMDsKLQkJZGVsdGEgPSAxMDA7Ci0KLQkJZG8gewotCQkJb3V0dygweDFmLCBiYXNlICsgVUhDSV9VU0JTVFMpOwotCQkJdWRlbGF5KGRlbHRhKTsKLQkJCXdhaXRfdGltZSAtPSBkZWx0YTsKLQkJCXZhbCA9IGludyhiYXNlICsgVUhDSV9VU0JTVFMpOwotCQkJaWYgKHZhbCAmIFVIQ0lfVVNCU1RTX0hBTFRFRCkKLQkJCQlicmVhazsKLQkJfSB3aGlsZSAod2FpdF90aW1lID4gMCk7Ci0JfQotCi0JLyoKLQkgKiBkaXNhYmxlIGludGVycnVwdHMgJiBsZWdhY3kgc3VwcG9ydAotCSAqLwotCW91dHcoMCwgYmFzZSArIFVIQ0lfVVNCSU5UUik7Ci0Jb3V0dygweDFmLCBiYXNlICsgVUhDSV9VU0JTVFMpOwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFVIQ0lfVVNCTEVHU1VQLCAmdmFsKTsKLQlpZiAodmFsICYgMHhiZikgCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBVSENJX1VTQkxFR1NVUCwgVUhDSV9VU0JMRUdTVVBfREVGQVVMVCk7Ci0JCQotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdXNiX2hhbmRvZmZfb2hjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JaW50IHdhaXRfdGltZTsKLQotCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAotCQkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JaWYgKGJhc2UgPT0gTlVMTCkgcmV0dXJuOwotCi0JaWYgKHJlYWRsKGJhc2UgKyBPSENJX0NPTlRST0wpICYgT0hDSV9DVFJMX0lSKSB7Ci0JCXdhaXRfdGltZSA9IDUwMDsgLyogMC41IHNlY29uZHMgKi8KLQkJd3JpdGVsKE9IQ0lfSU5UUl9PQywgYmFzZSArIE9IQ0lfSU5UUkVOQUJMRSk7Ci0JCXdyaXRlbChPSENJX09DUiwgYmFzZSArIE9IQ0lfQ01EU1RBVFVTKTsKLQkJd2hpbGUgKHdhaXRfdGltZSA+IDAgJiYgCi0JCQkJcmVhZGwoYmFzZSArIE9IQ0lfQ09OVFJPTCkgJiBPSENJX0NUUkxfSVIpIHsKLQkJCXdhaXRfdGltZSAtPSAxMDsKLQkJCW1zbGVlcCgxMCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIGRpc2FibGUgaW50ZXJydXB0cwotCSAqLwotCXdyaXRlbCh+KHUzMikwLCBiYXNlICsgT0hDSV9JTlRSRElTQUJMRSk7Ci0Jd3JpdGVsKH4odTMyKTAsIGJhc2UgKyBPSENJX0lOVFJTVEFUVVMpOwotCi0JaW91bm1hcChiYXNlKTsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3VzYl9kaXNhYmxlX2VoY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JaW50IHdhaXRfdGltZSwgZGVsdGE7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlLCAqb3BfcmVnX2Jhc2U7Ci0JdTMyIGhjY19wYXJhbXMsIHZhbCwgdGVtcDsKLQl1OCBjYXBfbGVuZ3RoOwotCi0JYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCi0JCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JaWYgKGJhc2UgPT0gTlVMTCkgcmV0dXJuOwotCi0JY2FwX2xlbmd0aCA9IHJlYWRiKGJhc2UpOwotCW9wX3JlZ19iYXNlID0gYmFzZSArIGNhcF9sZW5ndGg7Ci0JaGNjX3BhcmFtcyA9IHJlYWRsKGJhc2UgKyBFSENJX0hDQ19QQVJBTVMpOwotCWhjY19wYXJhbXMgPSAoaGNjX3BhcmFtcyA+PiA4KSAmIDB4ZmY7Ci0JaWYgKGhjY19wYXJhbXMpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIAotCQkJCQloY2NfcGFyYW1zICsgRUhDSV9VU0JMRUdTVVAsCi0JCQkJCSZ2YWwpOwotCQlpZiAoKCh2YWwgJiAweGZmKSA9PSAxKSAmJiAodmFsICYgRUhDSV9VU0JMRUdTVVBfQklPUykpIHsKLQkJCS8qCi0JCQkgKiBPaywgQklPUyBpcyBpbiBzbW0gbW9kZSwgdHJ5IHRvIGhhbmQgb2ZmLi4uCi0JCQkgKi8KLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAotCQkJCQkJaGNjX3BhcmFtcyArIEVIQ0lfVVNCTEVHQ1RMU1RTLAotCQkJCQkJJnRlbXApOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAotCQkJCQkJaGNjX3BhcmFtcyArIEVIQ0lfVVNCTEVHQ1RMU1RTLAotCQkJCQkJdGVtcCB8IEVIQ0lfVVNCTEVHQ1RMU1RTX1NPT0UpOwotCQkJdmFsIHw9IEVIQ0lfVVNCTEVHU1VQX09TOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAKLQkJCQkJCWhjY19wYXJhbXMgKyBFSENJX1VTQkxFR1NVUCwgCi0JCQkJCQl2YWwpOwotCi0JCQl3YWl0X3RpbWUgPSA1MDA7Ci0JCQlkbyB7Ci0JCQkJbXNsZWVwKDEwKTsKLQkJCQl3YWl0X3RpbWUgLT0gMTA7Ci0JCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCi0JCQkJCQloY2NfcGFyYW1zICsgRUhDSV9VU0JMRUdTVVAsCi0JCQkJCQkmdmFsKTsKLQkJCX0gd2hpbGUgKHdhaXRfdGltZSAmJiAodmFsICYgRUhDSV9VU0JMRUdTVVBfQklPUykpOwotCQkJaWYgKCF3YWl0X3RpbWUpIHsKLQkJCQkvKgotCQkJCSAqIHdlbGwsIHBvc3NpYmx5IGJ1Z2d5IEJJT1MuLi4KLQkJCQkgKi8KLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFSENJIGVhcmx5IEJJT1MgaGFuZG9mZiAiCi0JCQkJCQkiZmFpbGVkIChCSU9TIGJ1ZyA/KVxuIik7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAotCQkJCQkJaGNjX3BhcmFtcyArIEVIQ0lfVVNCTEVHU1VQLAotCQkJCQkJRUhDSV9VU0JMRUdTVVBfT1MpOwotCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKLQkJCQkJCWhjY19wYXJhbXMgKyBFSENJX1VTQkxFR0NUTFNUUywKLQkJCQkJCTApOwotCQkJfQotCQl9Ci0JfQotCi0JLyoKLQkgKiBoYWx0IEVIQ0kgJiBkaXNhYmxlIGl0cyBpbnRlcnJ1cHRzIGluIGFueSBjYXNlCi0JICovCi0JdmFsID0gcmVhZGwob3BfcmVnX2Jhc2UgKyBFSENJX1VTQlNUUyk7Ci0JaWYgKCh2YWwgJiBFSENJX1VTQlNUU19IQUxURUQpID09IDApIHsKLQkJdmFsID0gcmVhZGwob3BfcmVnX2Jhc2UgKyBFSENJX1VTQkNNRCk7Ci0JCXZhbCAmPSB+RUhDSV9VU0JDTURfUlVOOwotCQl3cml0ZWwodmFsLCBvcF9yZWdfYmFzZSArIEVIQ0lfVVNCQ01EKTsKLQotCQl3YWl0X3RpbWUgPSAyMDAwOwotCQlkZWx0YSA9IDEwMDsKLQkJZG8gewotCQkJd3JpdGVsKDB4M2YsIG9wX3JlZ19iYXNlICsgRUhDSV9VU0JTVFMpOwotCQkJdWRlbGF5KGRlbHRhKTsKLQkJCXdhaXRfdGltZSAtPSBkZWx0YTsKLQkJCXZhbCA9IHJlYWRsKG9wX3JlZ19iYXNlICsgRUhDSV9VU0JTVFMpOwotCQkJaWYgKCh2YWwgPT0gfih1MzIpMCkgfHwgKHZhbCAmIEVIQ0lfVVNCU1RTX0hBTFRFRCkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSB3aGlsZSAod2FpdF90aW1lID4gMCk7Ci0JfQotCXdyaXRlbCgwLCBvcF9yZWdfYmFzZSArIEVIQ0lfVVNCSU5UUik7Ci0Jd3JpdGVsKDB4M2YsIG9wX3JlZ19iYXNlICsgRUhDSV9VU0JTVFMpOwotCi0JaW91bm1hcChiYXNlKTsKLQotCXJldHVybjsKLX0KLQotCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya191c2JfZWFybHlfaGFuZG9mZihzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpZiAoIXVzYl9lYXJseV9oYW5kb2ZmKQotCQlyZXR1cm47Ci0KLQlpZiAocGRldi0+Y2xhc3MgPT0gKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MDApKSB7IC8qIFVIQ0kgKi8KLQkJcXVpcmtfdXNiX2hhbmRvZmZfdWhjaShwZGV2KTsKLQl9IGVsc2UgaWYgKHBkZXYtPmNsYXNzID09ICgoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweDEwKSkgeyAvKiBPSENJICovCi0JCXF1aXJrX3VzYl9oYW5kb2ZmX29oY2kocGRldik7Ci0JfSBlbHNlIGlmIChwZGV2LT5jbGFzcyA9PSAoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgyMCkpIHsgLyogRUhDSSAqLwotCQlxdWlya191c2JfZGlzYWJsZV9laGNpKHBkZXYpOwotCX0KLQotCXJldHVybjsKLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya191c2JfZWFybHlfaGFuZG9mZik7Ci0KIC8qCiAgKiAuLi4gVGhpcyBpcyBmdXJ0aGVyIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgc29tZSBTaVM5Nnggc291dGgKICAqIGJyaWRnZXMgcHJldGVuZCB0byBiZSA4NUM1MDMvNTUxMyBpbnN0ZWFkLiAgSW4gdGhhdCBjYXNlIHNlZSBpZiB3ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCBkZjAxNGMyLi5hNTBjMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAKIAogb2JqLSQoQ09ORklHX1VTQl9NT04pCQkrPSBtb24vCiAKK29iai0kKENPTkZJR19QQ0kpCQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9FSENJX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfSVNQMTE2WF9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX09IQ0lfSENEKQkrPSBob3N0LwpAQCAtMTcsNyArMTgsNiBAQAogCiBvYmotJChDT05GSUdfVVNCX0FDTSkJCSs9IGNsYXNzLwogb2JqLSQoQ09ORklHX1VTQl9BVURJTykJCSs9IGNsYXNzLwotb2JqLSQoQ09ORklHX1VTQl9CTFVFVE9PVEhfVFRZKQkrPSBjbGFzcy8KIG9iai0kKENPTkZJR19VU0JfTUlESSkJCSs9IGNsYXNzLwogb2JqLSQoQ09ORklHX1VTQl9QUklOVEVSKQkrPSBjbGFzcy8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcKaW5kZXggMzMzZTM5Yi4uZWYxMDVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCkBAIC0yOCwyOSArMjgsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXVkaW8uCiAKLWNvbW1lbnQgIlVTQiBCbHVldG9vdGggVFRZIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBkaXNhYmxlZCBCbHVldG9vdGggc3Vic3lzdGVtIgotCWRlcGVuZHMgb24gVVNCICYmIEJUCi0KLWNvbmZpZyBVU0JfQkxVRVRPT1RIX1RUWQotCXRyaXN0YXRlICJVU0IgQmx1ZXRvb3RoIFRUWSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIEJUPW4KLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIGEgbm9uc3RhbmRhcmQgdHR5IGludGVyZmFjZSB0byBhIEJsdWV0b290aAotCSAgZGV2aWNlIHRoYXQgY2FuIGJlIHVzZWQgb25seSBieSBzcGVjaWFsaXplZCBCbHVldG9vdGggSENJIHNvZnR3YXJlLgotCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBPcGVuQlQgQmx1ZXRvb3RoIHN0YWNrIChhdmFpbGFibGUKLQkgIGF0IDxodHRwOi8vZGV2ZWxvcGVyLmF4aXMuY29tL3NvZnR3YXJlPiksIG9yIG90aGVyIFRUWSBiYXNlZAotCSAgQmx1ZXRvb3RoIHN0YWNrcywgYW5kIHdhbnQgdG8gY29ubmVjdCBhIFVTQiBCbHVldG9vdGggZGV2aWNlCi0JICB0byB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCi0KLQkgIERvICpub3QqIGVuYWJsZSB0aGlzIGRyaXZlciBpZiB5b3Ugd2FudCB0byB1c2UgZ2VuZXJpYyBMaW51eAotCSAgQmx1ZXRvb3RoIHN1cHBvcnQuCi0KLQkgIElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBibHVldHR5LgotCiBjb25maWcgVVNCX01JREkKIAl0cmlzdGF0ZSAiVVNCIE1JREkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQiAmJiBTT1VORCAmJiBPQlNPTEVURV9PU1NfVVNCX0RSSVZFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQppbmRleCA5NzFlNTQ5Li4yMjk0NzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQpAQCAtNSw2ICs1LDUgQEAKIAogb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjZGMtYWNtLm8KIG9iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBhdWRpby5vCi1vYmotJChDT05GSUdfVVNCX0JMVUVUT09USF9UVFkpCSs9IGJsdWV0dHkubwogb2JqLSQoQ09ORklHX1VTQl9NSURJKQkJKz0gdXNiLW1pZGkubwogb2JqLSQoQ09ORklHX1VTQl9QUklOVEVSKQkrPSB1c2JscC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDAyMzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvYmx1ZXR0eS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI3OSArMCwwIEBACi0vKgotICogYmx1ZXR0eS5jICAgVmVyc2lvbiAwLjEzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIEdyZWcgS3JvYWgtSGFydG1hbgk8Z3JlZ0Brcm9haC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTWFyayBEb3VnbGFzIENvcm5lcgk8bWNvcm5lckB1bWljaC5lZHU+Ci0gKgotICogVVNCIEJsdWV0b290aCBUVFkgZHJpdmVyLCBiYXNlZCBvbiB0aGUgQmx1ZXRvb3RoIFNwZWMgdmVyc2lvbiAxLjBCCi0gKiAKLSAqICgyMDAxLzExLzMwKSBWZXJzaW9uIDAuMTMgZ2toCi0gKgktIGFkZGVkIGxvY2tpbmcgcGF0Y2ggZnJvbSBNYXNvb2R1ciBSYWhtYW4gPHJtYXNvb2R1QGluLmlibS5jb20+Ci0gKgktIHJlbW92ZWQgYWN0aXZlIHZhcmlhYmxlLCBhcyBvcGVuX2NvdW50IHdpbGwgZG8uCi0gKgotICogKDIwMDEvMDcvMDkpIFZlcnNpb24gMC4xMiBna2gKLSAqCS0gcmVtb3ZlZCBpbl9pbnRlcnJ1cHQoKSBjYWxsLCBhcyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gZG8gCi0gKgkgIHRoYXQgYW55bW9yZS4KLSAqCi0gKiAoMjAwMS8wNi8wNSkgVmVyc2lvbiAwLjExIGdraAotICoJLSBGaXhlZCBwcm9ibGVtIHdpdGggcmVhZCB1cmIgc3RhdHVzIHNheWluZyB0aGF0IHdlIGhhdmUgc2h1dGRvd24sCi0gKgkgIGFuZCB0aGF0IHdlIHNob3VsZG4ndCByZXN1Ym1pdCB0aGUgdXJiLiAgUGF0Y2ggZnJvbSB1bmtub3duLgotICoKLSAqICgyMDAxLzA1LzI4KSBWZXJzaW9uIDAuMTAgZ2toCi0gKgktIEZpeGVkIHByb2JsZW0gd2l0aCB1c2luZyBkYXRhIGZyb20gdXNlcnNwYWNlIGluIHRoZSBibHVldG9vdGhfd3JpdGUKLSAqCSAgZnVuY3Rpb24gYXMgZm91bmQgYnkgdGhlIENIRUNLRVIgcHJvamVjdC4KLSAqCS0gQWRkZWQgYSBidWZmZXIgdG8gdGhlIHdyaXRlX3VyYl9wb29sIHdoaWNoIHJlZHVjZXMgdGhlIG51bWJlciBvZgotICoJICBidWZmZXJzIGJlaW5nIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBmb3IgZXZlciB3cml0ZS4gIEFsc28gY2xlYW5zCi0gKgkgIHVwIHRoZSBsb2dpYyBhIGJpdC4KLSAqCS0gQWRkZWQgYSBidWZmZXIgdG8gdGhlIGNvbnRyb2xfdXJiX3Bvb2wgd2hpY2ggZml4ZXMgYSBtZW1vcnkgbGVhawotICoJICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCi0gKgotICogKDIwMDEvMDUvMjgpIFZlcnNpb24gMC45IGdraAotICoJRml4ZWQgcHJvYmxlbSB3aXRoIGJsdWV0b290aD09TlVMTCBmb3IgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjawotICoJd2hpY2ggd2FzIGZvdW5kIGJ5IGJvdGggdGhlIENIRUNLRVIgcHJvamVjdCBhbmQgTWlra28gUmFoa29uZW4uCi0gKgotICogKDA4LzA0LzIwMDEpIGdiCi0gKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgotICoKLSAqICgyMDAxLzAzLzEwKSBWZXJzaW9uIDAuOCBna2gKLSAqCUZpeGVkIHByb2JsZW0gd2l0aCBub3QgdW5saW5raW5nIGludGVycnVwdCB1cmIgb24gZGV2aWNlIGNsb3NlCi0gKglhbmQgcmVzdWJtaXR0aW5nIHRoZSByZWFkIHVyYiBvbiBlcnJvciB3aXRoIGJsdWV0b290aCBzdHJ1Y3QuCi0gKglUaGFua3MgdG8gTmFyYXlhbiBNb2hhbnJhbSA8bmFyYXlhbkBSb3ZpbmdOZXR3b3Jrcy5jb20+IGZvciB0aGUKLSAqCWZpeGVzLgotICoKLSAqICgxMS8yOS8yMDAwKSBWZXJzaW9uIDAuNyBna2gKLSAqCUZpeGVkIHByb2JsZW0gd2l0aCBvdmVycnVubmluZyB0aGUgdHR5IGZsaXAgYnVmZmVyLgotICoJUmVtb3ZlZCB1bm5lZWRlZCBOVUxMIHBvaW50ZXIgaW5pdGlhbGl6YXRpb24uCi0gKgotICogKDEwLzA1LzIwMDApIFZlcnNpb24gMC42IGdraAotICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgotICoJY29yZSBuZWVkcyBpdC4KLSAqCUdvdCBhIHJlYWwgbWFqb3IgaWQgbnVtYmVyIGFuZCBuYW1lLgotICoKLSAqICgwOC8wNi8yMDAwKSBWZXJzaW9uIDAuNSBna2gKLSAqCUZpeGVkIHByb2JsZW0gb2Ygbm90IHJlc3VibWl0dGluZyB0aGUgYnVsayByZWFkIHVyYiBpZiB0aGVyZSBpcwotICoJYW4gZXJyb3IgaW4gdGhlIGNhbGxiYWNrLiAgRXJpY3Nzb24gZGV2aWNlcyBzZWVtIHRvIG5lZWQgdGhpcy4KLSAqCi0gKiAoMDcvMTEvMjAwMCkgVmVyc2lvbiAwLjQgZ2toCi0gKglGaXhlZCBidWcgaW4gZGlzY29ubmVjdCBmb3Igd2hlbiB3ZSBjYWxsIHR0eV9oYW5ndXAKLSAqCUZpeGVkIGJ1ZyBpbiBibHVldG9vdGhfY3RybF9tc2cgd2hlcmUgdGhlIGJsdWV0b290aCBzdHJ1Y3Qgd2FzIG5vdAotICoJZ2V0dGluZyBhdHRhY2hlZCB0byB0aGUgY29udHJvbCB1cmIgcHJvcGVybHkuCi0gKglGaXhlZCBidWcgaW4gYmx1ZXRvb3RoX3dyaXRlIHdoZXJlIHdlIHBheSBhdHRlbnRpb24gdG8gdGhlIHJlc3VsdAotICoJb2YgYmx1ZXRvb3RoX2N0cmxfbXNnLgotICoKLSAqICgwOC8wMy8yMDAwKSBWZXJzaW9uIDAuMyBna2ggbWRjCi0gKglNZXJnZWQgaW4gTWFyaydzIGNoYW5nZXMgdG8gbWFrZSB0aGUgZHJpdmVyIHBsYXkgbmljZSB3aXRoIHRoZSBBeGlzCi0gKglzdGFjay4KLSAqCU1hZGUgdGhlIHdyaXRlIGJ1bGsgdXNlIGFuIHVyYiBwb29sIHRvIGVuYWJsZSBsYXJnZXIgdHJhbnNmZXJzIHdpdGgKLSAqCWZld2VyIGNhbGxzIHRvIHRoZSBkcml2ZXIuCi0gKglGaXhlZCBvZmYgYnkgb25lIGJ1ZyBpbiBhY2wgcGt0IHJlY2VpdmUKLSAqCU1hZGUgcGFja2V0IGNvdW50ZXJzIHNwZWNpZmljIHRvIGVhY2ggYmx1ZXRvb3RoIGRldmljZSAKLSAqCUFkZGVkIGNoZWNrcyBmb3IgemVybyBsZW5ndGggY2FsbGJhY2tzCi0gKglBZGRlZCBidWZmZXJzIGZvciBpbnQgYW5kIGJ1bGsgcGFja2V0cy4gIEhhZCB0byBkbyB0aGlzIG90aGVyd2lzZSAKLSAqCXBhY2tldCB0eXBlcyBjb3VsZCBpbnRlcm1pbmdsZS4KLSAqCU1hZGUgYSBjb250cm9sIHVyYiBwb29sIGZvciB0aGUgY29udHJvbCBtZXNzYWdlcy4KLSAqCi0gKiAoMDcvMTEvMjAwMCkgVmVyc2lvbiAwLjIgZ2toCi0gKglGaXhlZCBhIHNtYWxsIGJ1ZyBmb3VuZCBieSBOaWxzIEZhZXJiZXIgaW4gdGhlIHVzYl9ibHVldG9vdGhfcHJvYmUgCi0gKglmdW5jdGlvbi4KLSAqCi0gKiAoMDcvMDkvMjAwMCkgVmVyc2lvbiAwLjEgZ2toCi0gKglJbml0aWFsIHJlbGVhc2UuIEhhcyBzdXBwb3J0IGZvciBzZW5kaW5nIEFDTCBkYXRhICh3aGljaCBpcyByZWFsbHkganVzdAotICoJYSBIQ0kgZnJhbWUuKSBSYXcgSENJIGNvbW1hbmRzIGFuZCBIQ0kgZXZlbnRzIGFyZSBub3Qgc3VwcG9ydGVkLgotICoJQSBpb2N0bCB3aWxsIHByb2JhYmx5IGJlIG5lZWRlZCBmb3IgdGhlIEhDSSBjb21tYW5kcyBhbmQgZXZlbnRzIGluIHRoZQotICoJZnV0dXJlLiBBbGwgaXNvY2ggZW5kcG9pbnRzIGFyZSBpZ25vcmVkIGF0IHRoaXMgdGltZSBhbHNvLgotICoJVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgZm9yIGFsbCBjdXJyZW50bHkgc2hpcHBpbmcgVVNCIEJsdWV0b290aCAKLSAqCWRldmljZXMgYXQgdGhpcyB0aW1lIDopCi0gKiAKLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2RlZmluZSBERUJVRwotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0vKgotICogVmVyc2lvbiBJbmZvcm1hdGlvbgotICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMyIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuLCBNYXJrIERvdWdsYXMgQ29ybmVyIgotI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEJsdWV0b290aCB0dHkgZHJpdmVyIgotCi0vKiBkZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBnb29kICovCi0vKiNkZWZpbmUJQlRCVUdHWUhBUkRXQVJFICovCi0KLS8qIENsYXNzLCBTdWJDbGFzcywgYW5kIFByb3RvY29sIGNvZGVzIHRoYXQgZGVzY3JpYmUgYSBCbHVldG9vdGggZGV2aWNlICovCi0jZGVmaW5lIFdJUkVMRVNTX0NMQVNTX0NPREUJCQkweGUwCi0jZGVmaW5lIFJGX1NVQkNMQVNTX0NPREUJCQkweDAxCi0jZGVmaW5lIEJMVUVUT09USF9QUk9HUkFNTUlOR19QUk9UT0NPTF9DT0RFCTB4MDEKLQotCi0jZGVmaW5lIEJMVUVUT09USF9UVFlfTUFKT1IJMjE2CS8qIHJlYWwgZGV2aWNlIG5vZGUgbWFqb3IgaWQgKi8KLSNkZWZpbmUgQkxVRVRPT1RIX1RUWV9NSU5PUlMJMjU2CS8qIHdob2xlIGxvdHRhIGJsdWV0b290aCBkZXZpY2VzICovCi0KLSNkZWZpbmUgVVNCX0JMVUVUT09USF9NQUdJQwkweDZkMDIJLyogbWFnaWMgbnVtYmVyIGZvciBibHVldG9vdGggc3RydWN0ICovCi0KLSNkZWZpbmUgQkxVRVRPT1RIX0NPTlRST0xfUkVRVUVTVF9UWVBFCTB4MjAKLQotLyogQmx1ZXRvb3RoIHBhY2tldCB0eXBlcyAqLwotI2RlZmluZSBDTURfUEtUCQkJMHgwMQotI2RlZmluZSBBQ0xfUEtUCQkJMHgwMgotI2RlZmluZSBTQ09fUEtUCQkJMHgwMwotI2RlZmluZSBFVkVOVF9QS1QJCTB4MDQKLSNkZWZpbmUgRVJST1JfUEtUCQkweDA1Ci0jZGVmaW5lIE5FR19QS1QJCQkweDA2Ci0KLS8qIE1lc3NhZ2Ugc2l6ZXMgKi8KLSNkZWZpbmUgTUFYX0VWRU5UX1NJWkUJCTB4RkYKLSNkZWZpbmUgRVZFTlRfSERSX1NJWkUJCTMJLyogMiBmb3IgdGhlIGhlYWRlciArIDEgZm9yIHRoZSB0eXBlIGluZGljYXRvciAqLwotI2RlZmluZSBFVkVOVF9CVUZGRVJfU0laRQkoTUFYX0VWRU5UX1NJWkUgKyBFVkVOVF9IRFJfU0laRSkKLQotI2RlZmluZSBNQVhfQUNMX1NJWkUJCTB4RkZGRgotI2RlZmluZSBBQ0xfSERSX1NJWkUJCTUJLyogNCBmb3IgdGhlIGhlYWRlciArIDEgZm9yIHRoZSB0eXBlIGluZGljYXRvciAqLwotI2RlZmluZSBBQ0xfQlVGRkVSX1NJWkUJCShNQVhfQUNMX1NJWkUgKyBBQ0xfSERSX1NJWkUpCi0KLS8qIHBhcml0eSBjaGVjayBmbGFnICovCi0jZGVmaW5lIFJFTEVWQU5UX0lGTEFHKGlmbGFnKQkoaWZsYWcgJiAoSUdOQlJLfEJSS0lOVHxJR05QQVJ8UEFSTVJLfElOUENLKSkKLQotI2RlZmluZSBDSEFSMklOVDE2KGMxLGMwKQkoKCh1MzIpKChjMSkgJiAweGZmKSA8PCA4KSArICh1MzIpKChjMCkgJiAweGZmKSkKLQotI2RlZmluZSBOVU1fQlVMS19VUkJTCQkyNAotI2RlZmluZSBOVU1fQ09OVFJPTF9VUkJTCTE2Ci0KLXN0cnVjdCB1c2JfYmx1ZXRvb3RoIHsKLQlpbnQJCQltYWdpYzsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqCWRldjsKLQlzdHJ1Y3QgdHR5X2RyaXZlciAqCXR0eV9kcml2ZXI7CS8qIHRoZSB0dHlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLwotCXN0cnVjdCB0dHlfc3RydWN0ICoJdHR5OwkJLyogdGhlIGNvcnJlc3BvbmRpbmcgdHR5IGZvciB0aGlzIHBvcnQgKi8KLQotCXVuc2lnbmVkIGNoYXIJCW1pbm9yOwkJLyogdGhlIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UgKi8KLQlpbnQJCQl0aHJvdHRsZTsJLyogdGhyb3R0bGVkIGJ5IHR0eSBsYXllciAqLwotCWludAkJCW9wZW5fY291bnQ7Ci0JCi0JX191OAkJCWNvbnRyb2xfb3V0X2JJbnRlcmZhY2VOdW07Ci0Jc3RydWN0IHVyYiAqCQljb250cm9sX3VyYl9wb29sW05VTV9DT05UUk9MX1VSQlNdOwotCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJbTlVNX0NPTlRST0xfVVJCU107Ci0KLQl1bnNpZ25lZCBjaGFyICoJCWludGVycnVwdF9pbl9idWZmZXI7Ci0Jc3RydWN0IHVyYiAqCQlpbnRlcnJ1cHRfaW5fdXJiOwotCV9fdTgJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOwotCV9fdTgJCQlpbnRlcnJ1cHRfaW5faW50ZXJ2YWw7Ci0JaW50CQkJaW50ZXJydXB0X2luX2J1ZmZlcl9zaXplOwotCi0JdW5zaWduZWQgY2hhciAqCQlidWxrX2luX2J1ZmZlcjsKLQlzdHJ1Y3QgdXJiICoJCXJlYWRfdXJiOwotCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcmVzczsKLQlpbnQJCQlidWxrX2luX2J1ZmZlcl9zaXplOwotCi0JaW50CQkJYnVsa19vdXRfYnVmZmVyX3NpemU7Ci0JX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKLQotCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQl3b3JrOwkvKiB3b3JrIHF1ZXVlIGVudHJ5IGZvciBsaW5lIGRpc2NpcGxpbmUgd2FraW5nIHVwICovCi0JCi0JdW5zaWduZWQgaW50CQlpbnRfcGFja2V0X3BvczsKLQl1bnNpZ25lZCBjaGFyCQlpbnRfYnVmZmVyW0VWRU5UX0JVRkZFUl9TSVpFXTsKLQl1bnNpZ25lZCBpbnQJCWJ1bGtfcGFja2V0X3BvczsKLQl1bnNpZ25lZCBjaGFyCQlidWxrX2J1ZmZlcltBQ0xfQlVGRkVSX1NJWkVdOwkvKiA2NGsgcHJlYWxsb2NhdGVkLCBmaXg/ICovCi0Jc3RydWN0IHNlbWFwaG9yZQlsb2NrOwotfTsKLQotCi0vKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50ICBibHVldG9vdGhfb3BlbgkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyB2b2lkIGJsdWV0b290aF9jbG9zZQkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyBpbnQgIGJsdWV0b290aF93cml0ZQkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgIGJsdWV0b290aF93cml0ZV9yb29tCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyBpbnQgIGJsdWV0b290aF9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3Rocm90dGxlCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgdm9pZCBibHVldG9vdGhfdW50aHJvdHRsZQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgaW50ICBibHVldG9vdGhfaW9jdGwJCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3NldF90ZXJtaW9zCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKLQotc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2ludF9jYWxsYmFjawkJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2N0cmxfY2FsbGJhY2sJCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXN0YXRpYyB2b2lkIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi1zdGF0aWMgaW50IHVzYl9ibHVldG9vdGhfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwotc3RhdGljIHZvaWQgdXNiX2JsdWV0b290aF9kaXNjb25uZWN0CShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7Ci0KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9ibHVldG9vdGhfaWRzIFtdID0gewotCXsgVVNCX0RFVklDRV9JTkZPKFdJUkVMRVNTX0NMQVNTX0NPREUsIFJGX1NVQkNMQVNTX0NPREUsIEJMVUVUT09USF9QUk9HUkFNTUlOR19QUk9UT0NPTF9DT0RFKSB9LAotCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9ibHVldG9vdGhfaWRzKTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9ibHVldG9vdGhfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5uYW1lID0JCSJibHVldHR5IiwKLQkucHJvYmUgPQl1c2JfYmx1ZXRvb3RoX3Byb2JlLAotCS5kaXNjb25uZWN0ID0JdXNiX2JsdWV0b290aF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXVzYl9ibHVldG9vdGhfaWRzLAotfTsKLQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyCSpibHVldG9vdGhfdHR5X2RyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgdXNiX2JsdWV0b290aAkqYmx1ZXRvb3RoX3RhYmxlW0JMVUVUT09USF9UVFlfTUlOT1JTXTsKLQotCi1zdGF0aWMgaW5saW5lIGludCBibHVldG9vdGhfcGFyYW5vaWFfY2hlY2sgKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGgsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQotewotCWlmICghYmx1ZXRvb3RoKSB7Ci0JCWRiZygiJXMgLSBibHVldG9vdGggPT0gTlVMTCIsIGZ1bmN0aW9uKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoYmx1ZXRvb3RoLT5tYWdpYyAhPSBVU0JfQkxVRVRPT1RIX01BR0lDKSB7Ci0JCWRiZygiJXMgLSBiYWQgbWFnaWMgbnVtYmVyIGZvciBibHVldG9vdGgiLCBmdW5jdGlvbik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfYmx1ZXRvb3RoKiBnZXRfdXNiX2JsdWV0b290aCAoc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCwgY29uc3QgY2hhciAqZnVuY3Rpb24pCi17Ci0JaWYgKCFibHVldG9vdGggfHwgCi0JICAgIGJsdWV0b290aF9wYXJhbm9pYV9jaGVjayAoYmx1ZXRvb3RoLCBmdW5jdGlvbikpIHsgCi0JCS8qIHRoZW4gc2F5IHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIHVzYl9ibHVldG9vdGggdGhpbmcsIHdoaWNoIHdpbGwKLQkJICogZW5kIHVwIGdlbmVyYXRpbmcgLUVOT0RFViByZXR1cm4gdmFsdWVzICovCi0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBibHVldG9vdGg7Ci19Ci0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2JsdWV0b290aCAqZ2V0X2JsdWV0b290aF9ieV9pbmRleCAoaW50IGluZGV4KQotewotCXJldHVybiBibHVldG9vdGhfdGFibGVbaW5kZXhdOwotfQotCi0KLXN0YXRpYyBpbnQgYmx1ZXRvb3RoX2N0cmxfbXNnIChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoLCBpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCi17Ci0Jc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKLQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkciA9IE5VTEw7Ci0JaW50IGk7Ci0JaW50IHN0YXR1czsKLQotCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKLQotCS8qIHRyeSB0byBmaW5kIGEgZnJlZSB1cmIgaW4gb3VyIGxpc3QgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xfVVJCUzsgKytpKSB7Ci0JCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKLQkJCXVyYiA9IGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXTsKLQkJCWRyID0gJmJsdWV0b290aC0+ZHJbaV07Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAodXJiID09IE5VTEwpIHsKLQkJZGJnICgiJXMgLSBubyBmcmVlIHVyYnMiLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBrZWVwIGluY3JlYXNpbmcgdGhlIHVyYiB0cmFuc2ZlciBidWZmZXIgdG8gZml0IHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlICovCi0JaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewotCQkJZXJyICgiJXMgLSBvdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCBsZW4pIHsKLQkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQllcnIgKCIlcyAtIG91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0JbWVtY3B5ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBsZW4pOwotCi0JZHItPmJSZXF1ZXN0VHlwZT0gQkxVRVRPT1RIX0NPTlRST0xfUkVRVUVTVF9UWVBFOwotCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7Ci0JZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KCh1MTYpIHZhbHVlKTsKLQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoKHUxNikgYmx1ZXRvb3RoLT5jb250cm9sX291dF9iSW50ZXJmYWNlTnVtKTsKLQlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KCh1MTYpIGxlbik7Ci0JCi0JdXNiX2ZpbGxfY29udHJvbF91cmIgKHVyYiwgYmx1ZXRvb3RoLT5kZXYsIHVzYl9zbmRjdHJscGlwZShibHVldG9vdGgtPmRldiwgMCksCi0JCQkgICh1bnNpZ25lZCBjaGFyKilkciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbiwgYmx1ZXRvb3RoX2N0cmxfY2FsbGJhY2ssIGJsdWV0b290aCk7Ci0KLQkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KLQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwotCWlmIChzdGF0dXMpCi0JCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihjb250cm9sKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKLQkKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGJsdWV0b290aF9vcGVuIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCi17Ci0Jc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aDsKLQlpbnQgcmVzdWx0OwotCi0JZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSBwb2ludGVyIGluY2FzZSBzb21ldGhpbmcgZmFpbHMgKi8KLQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKLQotCS8qIGdldCB0aGUgYmx1ZXRvb3RoIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dHkgcG9pbnRlciAqLwotCWJsdWV0b290aCA9IGdldF9ibHVldG9vdGhfYnlfaW5kZXggKHR0eS0+aW5kZXgpOwotCi0JaWYgKGJsdWV0b290aF9wYXJhbm9pYV9jaGVjayAoYmx1ZXRvb3RoLCBfX0ZVTkNUSU9OX18pKSB7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWRvd24gKCZibHVldG9vdGgtPmxvY2spOwotIAotCSsrYmx1ZXRvb3RoLT5vcGVuX2NvdW50OwotCWlmIChibHVldG9vdGgtPm9wZW5fY291bnQgPT0gMSkgewotCQkvKiBzZXQgdXAgb3VyIHN0cnVjdHVyZSBtYWtpbmcgdGhlIHR0eSBkcml2ZXIgcmVtZW1iZXIgb3VyIG9iamVjdCwgYW5kIHVzIGl0ICovCi0JCXR0eS0+ZHJpdmVyX2RhdGEgPSBibHVldG9vdGg7Ci0JCWJsdWV0b290aC0+dHR5ID0gdHR5OwotCi0JCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YSB0aHJvdWdoLCAKLQkgCSogb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YQotCSAJKiBjYW4gZ2V0IGxvc3QuICovCi0JCWJsdWV0b290aC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7Ci0JCi0JCS8qIFJlc2V0IHRoZSBwYWNrZXQgcG9zaXRpb24gY291bnRlcnMgKi8KLQkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA9IDA7Ci0JCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKLQotI2lmbmRlZiBCVEJVR0dZSEFSRFdBUkUKLQkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KLQkJdXNiX2ZpbGxfYnVsa191cmIgKGJsdWV0b290aC0+cmVhZF91cmIsIGJsdWV0b290aC0+ZGV2LCAKLQkJCSAgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJICAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsCi0JCQkgICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplLAotCQkJICAgICAgIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7Ci0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwotCQlpZiAocmVzdWx0KQotCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwotI2VuZGlmCi0JCXVzYl9maWxsX2ludF91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYiwgYmx1ZXRvb3RoLT5kZXYsCi0JCQkgICAgICB1c2JfcmN2aW50cGlwZShibHVldG9vdGgtPmRldiwgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCSAgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlciwKLQkJCSAgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcl9zaXplLAotCQkJICAgICAgYmx1ZXRvb3RoX2ludF9jYWxsYmFjaywgYmx1ZXRvb3RoLAotCQkJICAgICAgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwpOwotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwotCQlpZiAocmVzdWx0KQotCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludGVycnVwdCBpbikgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwotCX0KLQkKLQl1cCgmYmx1ZXRvb3RoLT5sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGJsdWV0b290aF9jbG9zZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQotewotCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKLQotCWlmICghYmx1ZXRvb3RoKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7Ci0JCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCi0JZG93biAoJmJsdWV0b290aC0+bG9jayk7Ci0gCi0JLS1ibHVldG9vdGgtPm9wZW5fY291bnQ7Ci0JaWYgKGJsdWV0b290aC0+b3Blbl9jb3VudCA8PSAwKSB7Ci0JCWJsdWV0b290aC0+b3Blbl9jb3VudCA9IDA7Ci0KLQkJLyogc2h1dGRvd24gYW55IGluLWZsaWdodCB1cmJzIHRoYXQgd2Uga25vdyBhYm91dCAqLwotCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+cmVhZF91cmIpOwotCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYik7Ci0JfQotCXVwKCZibHVldG9vdGgtPmxvY2spOwotfQotCi0KLXN0YXRpYyBpbnQgYmx1ZXRvb3RoX3dyaXRlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCi17Ci0Jc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOwotCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciAqdGVtcF9idWZmZXIgPSBOVUxMOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnRfYnVmZmVyOwotCXVuc2lnbmVkIGNoYXIgKnVyYl9idWZmZXI7Ci0JaW50IGk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAoIWJsdWV0b290aCkgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlkYmcoIiVzIC0gJWQgYnl0ZShzKSIsIF9fRlVOQ1RJT05fXywgY291bnQpOwotCi0JaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKLQkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjb3VudCA9PSAwKSB7Ci0JCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGNvdW50ID09IDEpIHsKLQkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb25seSBpbmNsdWRlZCB0eXBlICVkIiwgX19GVU5DVElPTl9fLCBidWZbMF0pOwotCQlyZXR1cm4gMTsKLQl9Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgX19GVU5DVElPTl9fLCBjb3VudCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJcHJpbnRrICgiJS4yeCAiLCBidWZbaV0pOwotCX0KLQlwcmludGsgKCJcbiIpOwotI2VuZGlmCi0KLQljdXJyZW50X2J1ZmZlciA9IGJ1ZjsKLQotCXN3aXRjaCAoKmN1cnJlbnRfYnVmZmVyKSB7Ci0JCS8qIEZpcnN0IGJ5dGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHBhY2tldCAqLwotCQljYXNlIENNRF9QS1Q6Ci0JCQkvKiBkYmcoIiVzLSBTZW5kIGNtZF9wa3QgbGVuOiVkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7Ki8KLQotCQkJcmV0dmFsID0gYmx1ZXRvb3RoX2N0cmxfbXNnIChibHVldG9vdGgsIDB4MDAsIDB4MDAsICZjdXJyZW50X2J1ZmZlclsxXSwgY291bnQtMSk7Ci0JCQlpZiAocmV0dmFsKSB7Ci0JCQkJZ290byBleGl0OwotCQkJfQotCQkJcmV0dmFsID0gY291bnQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEFDTF9QS1Q6Ci0JCQkrK2N1cnJlbnRfYnVmZmVyOwotCQkJLS1jb3VudDsKLQotCQkJdXJiX2J1ZmZlciA9IGttYWxsb2MgKGNvdW50LCBHRlBfQVRPTUlDKTsKLQkJCWlmICghdXJiX2J1ZmZlcikgewotCQkJCWRldl9lcnIoJmJsdWV0b290aC0+ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQotCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKLQkJCWlmICghdXJiKSB7Ci0JCQkJZGV2X2VycigmYmx1ZXRvb3RoLT5kZXYtPmRldiwgIm5vIG1vcmUgZnJlZSB1cmJzXG4iKTsKLQkJCQlrZnJlZSh1cmJfYnVmZmVyKTsKLQkJCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJCW1lbWNweSAodXJiX2J1ZmZlciwgY3VycmVudF9idWZmZXIsIGNvdW50KTsKLQotCQkJLyogYnVpbGQgdXAgb3VyIHVyYiAqLwotCQkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBibHVldG9vdGgtPmRldiwgCi0JCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LAotCQkJCQkJICAJICBibHVldG9vdGgtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCi0JCQkJCSAgdXJiX2J1ZmZlciwKLQkJCQkJICBjb3VudCwKLQkJCQkJICBibHVldG9vdGhfd3JpdGVfYnVsa19jYWxsYmFjaywKLQkJCQkJICBibHVldG9vdGgpOwotCi0KLQkJCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLwotCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLQkJCWlmIChyZXR2YWwpIHsKLQkJCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0KLQkJCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKLQkJCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLwotCQkJdXNiX2ZyZWVfdXJiICh1cmIpOwotCQkJcmV0dmFsID0gY291bnQgKyAxOwotCQkJYnJlYWs7Ci0JCQotCQlkZWZhdWx0IDoKLQkJCWRiZygiJXMgLSB1bnN1cHBvcnRlZCAoYXQgdGhpcyB0aW1lKSB3cml0ZSB0eXBlIiwgX19GVU5DVElPTl9fKTsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQl9Ci0KLWV4aXQ6Ci0Ja2ZyZWUodGVtcF9idWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0gCi0KLQotc3RhdGljIGludCBibHVldG9vdGhfd3JpdGVfcm9vbSAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCi17Ci0JZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7Ci0KLQkvKgotCSAqIFdlIHJlYWxseSBjYW4gdGFrZSBhbnl0aGluZyB0aGUgdXNlciB0aHJvd3MgYXQgdXMKLQkgKiBidXQgbGV0J3MgcGljayBhIG5pY2UgYmlnIG51bWJlciB0byB0ZWxsIHRoZSB0dHkKLQkgKiBsYXllciB0aGF0IHdlIGhhdmUgbG90cyBvZiBmcmVlIHNwYWNlCi0JICovCi0JcmV0dXJuIDIwNDg7Ci19Ci0KLQotc3RhdGljIGludCBibHVldG9vdGhfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSAKLXsKLQlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKLQotCS8qIAotCSAqIFdlIGNhbid0IHJlYWxseSBhY2NvdW50IGZvciBob3cgbXVjaCBkYXRhIHdlCi0JICogaGF2ZSBzZW50IG91dCwgYnV0IGhhc24ndCBtYWRlIGl0IHRocm91Z2ggdG8gdGhlCi0JICogZGV2aWNlLCBzbyBqdXN0IHRlbGwgdGhlIHR0eSBsYXllciB0aGF0IGV2ZXJ5dGhpbmcKLQkgKiBpcyBmbHVzaGVkLgotCSAqLwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGJsdWV0b290aF90aHJvdHRsZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCi17Ci0Jc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFibHVldG9vdGgpIHsKLQkJcmV0dXJuOwotCX0KLQotCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKLQkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCQotCWRiZygiJXMgdW5zdXBwb3J0ZWQgKGF0IHRoaXMgdGltZSkiLCBfX0ZVTkNUSU9OX18pOwotCi0JcmV0dXJuOwotfQotCi0KLXN0YXRpYyB2b2lkIGJsdWV0b290aF91bnRocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKLXsKLQlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoIWJsdWV0b290aCkgewotCQlyZXR1cm47Ci0JfQotCi0JZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgewotCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYmcoIiVzIHVuc3VwcG9ydGVkIChhdCB0aGlzIHRpbWUpIiwgX19GVU5DVElPTl9fKTsKLX0KLQotCi1zdGF0aWMgaW50IGJsdWV0b290aF9pb2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoIWJsdWV0b290aCkgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlkYmcoIiVzIC0gY21kIDB4JS40eCIsIF9fRlVOQ1RJT05fXywgY21kKTsKLQotCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7Ci0JCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogRklYTUUhISEgKi8KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi0KLXN0YXRpYyB2b2lkIGJsdWV0b290aF9zZXRfdGVybWlvcyAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpCi17Ci0Jc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFibHVldG9vdGgpIHsKLQkJcmV0dXJuOwotCX0KLQotCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKLQkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCi0JLyogRklYTUUhISEgKi8KLQotCXJldHVybjsKLX0KLQotCi0jaWZkZWYgQlRCVUdHWUhBUkRXQVJFCi12b2lkIGJ0dXNiX2VuYWJsZV9idWxrX3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSl7Ci0Jc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOwotCWludCByZXN1bHQ7Ci0KLQlpZiAoIWJsdWV0b290aCkgewotCQlyZXR1cm47Ci0JfQotCi0JZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgewotCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoYmx1ZXRvb3RoLT5yZWFkX3VyYikgewotCQl1c2JfZmlsbF9idWxrX3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBibHVldG9vdGgtPmRldiwgCi0JCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciwgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplLCAKLQkJCSAgICAgIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7Ci0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwotCQlpZiAocmVzdWx0KQotCQkJZXJyICgiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Ci0JfQotfQotCi12b2lkIGJ0dXNiX2Rpc2FibGVfYnVsa19yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpewotCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKLQotCWlmICghYmx1ZXRvb3RoKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7Ci0JCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgoYmx1ZXRvb3RoLT5yZWFkX3VyYikgJiYgKGJsdWV0b290aC0+cmVhZF91cmItPmFjdHVhbF9sZW5ndGgpKQotCQl1c2Jfa2lsbF91cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYik7Ci19Ci0jZW5kaWYKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHVyYiBjYWxsYmFjayBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1zdGF0aWMgdm9pZCBibHVldG9vdGhfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdXJiLT5jb250ZXh0LCBfX0ZVTkNUSU9OX18pOwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7Ci0JdW5zaWduZWQgaW50IHBhY2tldF9zaXplOwotCWludCBzdGF0dXM7Ci0KLQlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICghYmx1ZXRvb3RoKSB7Ci0JCWRiZygiJXMgLSBiYWQgYmx1ZXRvb3RoIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoIWNvdW50KSB7Ci0JCWRiZygiJXMgLSB6ZXJvIGxlbmd0aCBpbnQiLCBfX0ZVTkNUSU9OX18pOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0KLSNpZmRlZiBERUJVRwotCWlmIChjb3VudCkgewotCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogJXMtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgX19GVU5DVElPTl9fLCBjb3VudCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0JCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOwotCQl9Ci0JCXByaW50ayAoIlxuIik7Ci0JfQotI2VuZGlmCi0KLSNpZmRlZiBCVEJVR0dZSEFSRFdBUkUKLQlpZiAoKGNvdW50ID49IDIpICYmIChkYXRhWzBdID09IDB4RkYpICYmIChkYXRhWzFdID09IDB4MDApKSB7Ci0JCWRhdGEgKz0gMjsKLQkJY291bnQgLT0gMjsKLQl9Ci0JaWYgKGNvdW50ID09IDApIHsKLQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQkJZ290byBleGl0OwotCX0KLSNlbmRpZgotCS8qIFdlIGFkZCAgYSBwYWNrZXQgdHlwZSBpZGVudGlmaWVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgZWFjaAotCSAgIEhDSSBmcmFtZS4gIFRoaXMgbWFrZXMgdGhlIGRhdGEgaW4gdGhlIHR0eSBsb29rIGxpa2UgYQotCSAgIHNlcmlhbCBVU0IgZGV2aWNlcy4gIEVhY2ggSENJIGZyYW1lIGNhbiBiZSBicm9rZW4gYWNyb3NzCi0JICAgbXVsdGlwbGUgVVJCcyBzbyB3ZSBidWZmZXIgdGhlbSB1bnRpbCB3ZSBoYXZlIGEgZnVsbCBoY2kKLQkgICBwYWNrZXQgKi8KLQotCWlmICghYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcykgewotCQlibHVldG9vdGgtPmludF9idWZmZXJbMF0gPSBFVkVOVF9QS1Q7Ci0JCWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MrKzsKLQl9Ci0JCi0JaWYgKGJsdWV0b290aC0+aW50X3BhY2tldF9wb3MgKyBjb3VudCA+IEVWRU5UX0JVRkZFUl9TSVpFKSB7Ci0JCWVycigiJXMgLSBleGNlZWRlZCBFVkVOVF9CVUZGRVJfU0laRSIsIF9fRlVOQ1RJT05fXyk7Ci0JCWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MgPSAwOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbWVtY3B5ICgmYmx1ZXRvb3RoLT5pbnRfYnVmZmVyW2JsdWV0b290aC0+aW50X3BhY2tldF9wb3NdLAotCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQpOwotCWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MgKz0gY291bnQ7Ci0JdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQotCWlmIChibHVldG9vdGgtPmludF9wYWNrZXRfcG9zID49IEVWRU5UX0hEUl9TSVpFKQotCQlwYWNrZXRfc2l6ZSA9IGJsdWV0b290aC0+aW50X2J1ZmZlclsyXTsKLQllbHNlCi0JCWdvdG8gZXhpdDsKLQotCWlmIChwYWNrZXRfc2l6ZSArIEVWRU5UX0hEUl9TSVpFIDwgYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcykgewotCQllcnIoIiVzIC0gcGFja2V0IHdhcyB0b28gbG9uZyIsIF9fRlVOQ1RJT05fXyk7Ci0JCWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MgPSAwOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHBhY2tldF9zaXplICsgRVZFTlRfSERSX1NJWkUgPT0gYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcykgewotCQlmb3IgKGkgPSAwOyBpIDwgYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvczsgKytpKSB7Ci0JCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtICovCi0JCQlpZiAoYmx1ZXRvb3RoLT50dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgewotCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKGJsdWV0b290aC0+dHR5KTsKLQkJCX0KLQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKGJsdWV0b290aC0+dHR5LCBibHVldG9vdGgtPmludF9idWZmZXJbaV0sIDApOwotCQl9Ci0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKGJsdWV0b290aC0+dHR5KTsKLQotCQlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zID0gMDsKLQl9Ci0KLWV4aXQ6Ci0Jc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHN0YXR1cykKLQkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBibHVldG9vdGhfY3RybF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXVyYi0+Y29udGV4dCwgX19GVU5DVElPTl9fKTsKLQotCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFibHVldG9vdGgpIHsKLQkJZGJnKCIlcyAtIGJhZCBibHVldG9vdGggcG9pbnRlciwgZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodXJiLT5zdGF0dXMpIHsKLQkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKLQkJcmV0dXJuOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdXJiLT5jb250ZXh0LCBfX0ZVTkNUSU9OX18pOwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IHBhY2tldF9zaXplOwotCWludCByZXN1bHQ7Ci0KLQotCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFibHVldG9vdGgpIHsKLQkJZGJnKCIlcyAtIGJhZCBibHVldG9vdGggcG9pbnRlciwgZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodXJiLT5zdGF0dXMpIHsKLQkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKLQkJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpIHsgICAgICAgICAgICAgICAgICAgCi0JCQlkYmcoIiVzIC0gVVJCIGNhbmNlbGVkLCB3b24ndCByZXNjaGVkdWxlIiwgX19GVU5DVElPTl9fKTsKLQkJCXJldHVybjsKLQkJfQotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKCFjb3VudCkgewotCQlkYmcoIiVzIC0gemVybyBsZW5ndGggcmVhZCBidWxrIiwgX19GVU5DVElPTl9fKTsKLQkJZ290byBleGl0OwotCX0KLQotI2lmZGVmIERFQlVHCi0JaWYgKGNvdW50KSB7Ci0JCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAlcy0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKLQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJCXByaW50ayAoIiUuMnggIiwgZGF0YVtpXSk7Ci0JCX0KLQkJcHJpbnRrICgiXG4iKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBCVEJVR0dZSEFSRFdBUkUKLQlpZiAoKGNvdW50ID09IDQpICYmIChkYXRhWzBdID09IDB4MDApICYmIChkYXRhWzFdID09IDB4MDApCi0JICAgICYmIChkYXRhWzJdID09IDB4MDApICYmIChkYXRhWzNdID09IDB4MDApKSB7Ci0JCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JCXVzYl9maWxsX2J1bGtfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIGJsdWV0b290aC0+ZGV2LCAKLQkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShibHVldG9vdGgtPmRldiwgYmx1ZXRvb3RoLT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCQkgICAgICBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyLCBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyX3NpemUsIAotCQkJICAgICAgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjaywgYmx1ZXRvb3RoKTsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChyZXN1bHQpCi0JCQllcnIgKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwotCi0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQkvKiBXZSBhZGQgIGEgcGFja2V0IHR5cGUgaWRlbnRpZmllciB0byB0aGUgYmVnaW5uaW5nIG9mIGVhY2gKLQkgICBIQ0kgZnJhbWUuICBUaGlzIG1ha2VzIHRoZSBkYXRhIGluIHRoZSB0dHkgbG9vayBsaWtlIGEKLQkgICBzZXJpYWwgVVNCIGRldmljZXMuICBFYWNoIEhDSSBmcmFtZSBjYW4gYmUgYnJva2VuIGFjcm9zcwotCSAgIG11bHRpcGxlIFVSQnMgc28gd2UgYnVmZmVyIHRoZW0gdW50aWwgd2UgaGF2ZSBhIGZ1bGwgaGNpCi0JICAgcGFja2V0ICovCi0JCi0JaWYgKCFibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcykgewotCQlibHVldG9vdGgtPmJ1bGtfYnVmZmVyWzBdID0gQUNMX1BLVDsKLQkJYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MrKzsKLQl9Ci0KLQlpZiAoYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgKyBjb3VudCA+IEFDTF9CVUZGRVJfU0laRSkgewotCQllcnIoIiVzIC0gZXhjZWVkZWQgQUNMX0JVRkZFUl9TSVpFIiwgX19GVU5DVElPTl9fKTsKLQkJYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgPSAwOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbWVtY3B5ICgmYmx1ZXRvb3RoLT5idWxrX2J1ZmZlcltibHVldG9vdGgtPmJ1bGtfcGFja2V0X3Bvc10sCi0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCk7Ci0JYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgKz0gY291bnQ7Ci0JdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQotCWlmIChibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcyA+PSBBQ0xfSERSX1NJWkUpIHsKLQkJcGFja2V0X3NpemUgPSBDSEFSMklOVDE2KGJsdWV0b290aC0+YnVsa19idWZmZXJbNF0sYmx1ZXRvb3RoLT5idWxrX2J1ZmZlclszXSk7Ci0JfSBlbHNlIHsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChwYWNrZXRfc2l6ZSArIEFDTF9IRFJfU0laRSA8IGJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zKSB7Ci0JCWVycigiJXMgLSBwYWNrZXQgd2FzIHRvbyBsb25nIiwgX19GVU5DVElPTl9fKTsKLQkJYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgPSAwOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHBhY2tldF9zaXplICsgQUNMX0hEUl9TSVpFID09IGJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvczsgKytpKSB7Ci0JCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLiAqLwotCQkJaWYgKGJsdWV0b290aC0+dHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKLQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaChibHVldG9vdGgtPnR0eSk7Ci0JCQl9Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcihibHVldG9vdGgtPnR0eSwgYmx1ZXRvb3RoLT5idWxrX2J1ZmZlcltpXSwgMCk7Ci0JCX0KLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2goYmx1ZXRvb3RoLT50dHkpOwotCQlibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcyA9IDA7Ci0JfQkKLQotZXhpdDoKLQlpZiAoIWJsdWV0b290aCB8fCAhYmx1ZXRvb3RoLT5vcGVuX2NvdW50KQotCQlyZXR1cm47Ci0KLQl1c2JfZmlsbF9idWxrX3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBibHVldG9vdGgtPmRldiwgCi0JCSAgICAgIHVzYl9yY3ZidWxrcGlwZShibHVldG9vdGgtPmRldiwgYmx1ZXRvb3RoLT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCSAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXJfc2l6ZSwgCi0JCSAgICAgIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCkKLQkJZXJyICgiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZCBibHVldG9vdGhfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXVyYi0+Y29udGV4dCwgX19GVU5DVElPTl9fKTsKLQotCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwotCi0JLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCi0Ja2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCi0JaWYgKCFibHVldG9vdGgpIHsKLQkJZGJnKCIlcyAtIGJhZCBibHVldG9vdGggcG9pbnRlciwgZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodXJiLT5zdGF0dXMpIHsKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiB3YWtlIHVwIG91ciBsaXR0bGUgZnVuY3Rpb24gdG8gbGV0IHRoZSB0dHkgbGF5ZXIga25vdyB0aGF0IHNvbWV0aGluZyBoYXBwZW5lZCAqLwotCXNjaGVkdWxlX3dvcmsoJmJsdWV0b290aC0+d29yayk7Ci19Ci0KLQotc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3NvZnRpbnQodm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXByaXZhdGUsIF9fRlVOQ1RJT05fXyk7Ci0KLQlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICghYmx1ZXRvb3RoKQotCQlyZXR1cm47Ci0KLQl0dHlfd2FrZXVwKGJsdWV0b290aC0+dHR5KTsKLX0KLQotCi1zdGF0aWMgaW50IHVzYl9ibHVldG9vdGhfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOwotCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBOVUxMOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaW50ZXJydXB0X2luX2VuZHBvaW50WzhdOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19pbl9lbmRwb2ludFs4XTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfb3V0X2VuZHBvaW50WzhdOwotCWludCBjb250cm9sX291dF9lbmRwb2ludDsKLQotCWludCBtaW5vcjsKLQlpbnQgYnVmZmVyX3NpemU7Ci0JaW50IGk7Ci0JaW50IG51bV9pbnRlcnJ1cHRfaW4gPSAwOwotCWludCBudW1fYnVsa19pbiA9IDA7Ci0JaW50IG51bV9idWxrX291dCA9IDA7Ci0KLQlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKLQljb250cm9sX291dF9lbmRwb2ludCA9IGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCi0JLyogZmluZCB0aGUgZW5kcG9pbnRzIHRoYXQgd2UgbmVlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7Ci0JCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYzsKLQotCQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKLQkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDIpKSB7Ci0JCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KLQkJCWRiZygiZm91bmQgYnVsayBpbiIpOwotCQkJYnVsa19pbl9lbmRwb2ludFtudW1fYnVsa19pbl0gPSBlbmRwb2ludDsKLQkJCSsrbnVtX2J1bGtfaW47Ci0JCX0KLQotCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCi0JCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgewotCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLwotCQkJZGJnKCJmb3VuZCBidWxrIG91dCIpOwotCQkJYnVsa19vdXRfZW5kcG9pbnRbbnVtX2J1bGtfb3V0XSA9IGVuZHBvaW50OwotCQkJKytudW1fYnVsa19vdXQ7Ci0JCX0KLQotCQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKLQkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDMpKSB7Ci0JCQkvKiB3ZSBmb3VuZCBhIGludGVycnVwdCBpbiBlbmRwb2ludCAqLwotCQkJZGJnKCJmb3VuZCBpbnRlcnJ1cHQgaW4iKTsKLQkJCWludGVycnVwdF9pbl9lbmRwb2ludFtudW1faW50ZXJydXB0X2luXSA9IGVuZHBvaW50OwotCQkJKytudW1faW50ZXJydXB0X2luOwotCQl9Ci0JfQotCi0JLyogYWNjb3JkaW5nIHRvIHRoZSBzcGVjLCB3ZSBjYW4gb25seSBoYXZlIDEgYnVsa19pbiwgMSBidWxrX291dCwgYW5kIDEgaW50ZXJydXB0X2luIGVuZHBvaW50cyAqLwotCWlmICgobnVtX2J1bGtfaW4gIT0gMSkgfHwKLQkgICAgKG51bV9idWxrX291dCAhPSAxKSB8fAotCSAgICAobnVtX2ludGVycnVwdF9pbiAhPSAxKSkgewotCQlkYmcgKCIlcyAtIGltcHJvcGVyIG51bWJlciBvZiBlbmRwb2ludHMuIEJsdWV0b290aCBkcml2ZXIgbm90IGJvdW5kLiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWluZm8oIlVTQiBCbHVldG9vdGggY29udmVydGVyIGRldGVjdGVkIik7Ci0KLQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBCTFVFVE9PVEhfVFRZX01JTk9SUyAmJiBibHVldG9vdGhfdGFibGVbbWlub3JdOyArK21pbm9yKQotCQk7Ci0JaWYgKGJsdWV0b290aF90YWJsZVttaW5vcl0pIHsKLQkJZXJyKCJObyBtb3JlIGZyZWUgQmx1ZXRvb3RoIGRldmljZXMiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKCEoYmx1ZXRvb3RoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9ibHVldG9vdGgpLCBHRlBfS0VSTkVMKSkpIHsKLQkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChibHVldG9vdGgsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX2JsdWV0b290aCkpOwotCi0JYmx1ZXRvb3RoLT5tYWdpYyA9IFVTQl9CTFVFVE9PVEhfTUFHSUM7Ci0JYmx1ZXRvb3RoLT5kZXYgPSBkZXY7Ci0JYmx1ZXRvb3RoLT5taW5vciA9IG1pbm9yOwotCUlOSVRfV09SSygmYmx1ZXRvb3RoLT53b3JrLCBibHVldG9vdGhfc29mdGludCwgYmx1ZXRvb3RoKTsKLQlpbml0X01VVEVYKCZibHVldG9vdGgtPmxvY2spOwotCi0JLyogcmVjb3JkIHRoZSBpbnRlcmZhY2UgbnVtYmVyIGZvciB0aGUgY29udHJvbCBvdXQgKi8KLQlibHVldG9vdGgtPmNvbnRyb2xfb3V0X2JJbnRlcmZhY2VOdW0gPSBjb250cm9sX291dF9lbmRwb2ludDsKLQkKLQkvKiBjcmVhdGUgb3VyIGNvbnRyb2wgb3V0IHVyYiBwb29sICovIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTF9VUkJTOyArK2kpIHsKLQkJc3RydWN0IHVyYiAgKnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7Ci0JCQlnb3RvIHByb2JlX2Vycm9yOwotCQl9Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKLQkJYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldID0gdXJiOwotCX0KLQotCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KLQllbmRwb2ludCA9IGJ1bGtfaW5fZW5kcG9pbnRbMF07Ci0JYmx1ZXRvb3RoLT5yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOwotCWlmICghYmx1ZXRvb3RoLT5yZWFkX3VyYikgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJZ290byBwcm9iZV9lcnJvcjsKLQl9Ci0JYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwotCWJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLQlibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcikgewotCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyIik7Ci0JCWdvdG8gcHJvYmVfZXJyb3I7Ci0JfQotCXVzYl9maWxsX2J1bGtfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIGRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkgICAgICBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyLCBidWZmZXJfc2l6ZSwgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjaywgYmx1ZXRvb3RoKTsKLQotCWVuZHBvaW50ID0gYnVsa19vdXRfZW5kcG9pbnRbMF07Ci0JYmx1ZXRvb3RoLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLQlibHVldG9vdGgtPmJ1bGtfb3V0X2J1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSAqIDI7Ci0KLQllbmRwb2ludCA9IGludGVycnVwdF9pbl9lbmRwb2ludFswXTsKLQlibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiKSB7Ci0JCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOwotCQlnb3RvIHByb2JlX2Vycm9yOwotCX0KLQlibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKLQlibHVldG9vdGgtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLQlibHVldG9vdGgtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9IGVuZHBvaW50LT5iSW50ZXJ2YWw7Ci0JYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7Ci0JCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X2luX2J1ZmZlciIpOwotCQlnb3RvIHByb2JlX2Vycm9yOwotCX0KLQl1c2JfZmlsbF9pbnRfdXJiKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYiwgZGV2LCB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJICAgICBibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIsIGJ1ZmZlcl9zaXplLCBibHVldG9vdGhfaW50X2NhbGxiYWNrLAotCQkgICAgIGJsdWV0b290aCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSBkZXZmcyBub2RlcyBmb3IgdGhpcyBkZXZpY2UgYW5kIGxldCB0aGUgdXNlciBrbm93IHdoYXQgYmx1ZXRvb3RocyB3ZSBhcmUgYm91bmQgdG8gKi8KLQl0dHlfcmVnaXN0ZXJfZGV2aWNlIChibHVldG9vdGhfdHR5X2RyaXZlciwgbWlub3IsICZpbnRmLT5kZXYpOwotCWluZm8oIkJsdWV0b290aCBjb252ZXJ0ZXIgbm93IGF0dGFjaGVkIHRvIHR0eVVCJWQgKG9yIHVzYi90dHViLyVkIGZvciBkZXZmcykiLCBtaW5vciwgbWlub3IpOwotCi0JYmx1ZXRvb3RoX3RhYmxlW21pbm9yXSA9IGJsdWV0b290aDsKLQotCS8qIHN1Y2Nlc3MgKi8KLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBibHVldG9vdGgpOwotCXJldHVybiAwOwotCi1wcm9iZV9lcnJvcjoKLQlpZiAoYmx1ZXRvb3RoLT5yZWFkX3VyYikKLQkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPnJlYWRfdXJiKTsKLQlpZiAoYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcikKLQkJa2ZyZWUgKGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpOwotCWlmIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpCi0JCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiKTsKLQlpZiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyKQotCQlrZnJlZSAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xfVVJCUzsgKytpKSAKLQkJaWYgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSkgewotCQkJaWYgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKQotCQkJCWtmcmVlIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSk7Ci0JCX0KLQotCWJsdWV0b290aF90YWJsZVttaW5vcl0gPSBOVUxMOwotCi0JLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCi0Ja2ZyZWUgKGJsdWV0b290aCk7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KLQotc3RhdGljIHZvaWQgdXNiX2JsdWV0b290aF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQlpbnQgaTsKLQotCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwotCWlmIChibHVldG9vdGgpIHsKLQkJaWYgKChibHVldG9vdGgtPm9wZW5fY291bnQpICYmIChibHVldG9vdGgtPnR0eSkpCi0JCQl0dHlfaGFuZ3VwKGJsdWV0b290aC0+dHR5KTsKLQotCQlibHVldG9vdGgtPm9wZW5fY291bnQgPSAwOwotCi0JCWlmIChibHVldG9vdGgtPnJlYWRfdXJiKSB7Ci0JCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+cmVhZF91cmIpOwotCQkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPnJlYWRfdXJiKTsKLQkJfQotCQlpZiAoYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcikKLQkJCWtmcmVlIChibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyKTsKLQotCQlpZiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiKSB7Ci0JCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYik7Ci0JCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYik7Ci0JCX0KLQkJaWYgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcikKLQkJCWtmcmVlIChibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIpOwotCi0JCXR0eV91bnJlZ2lzdGVyX2RldmljZSAoYmx1ZXRvb3RoX3R0eV9kcml2ZXIsIGJsdWV0b290aC0+bWlub3IpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTF9VUkJTOyArK2kpIHsKLQkJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pIHsKLQkJCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSk7Ci0JCQkJaWYgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKQotCQkJCQlrZnJlZSAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpOwotCQkJCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldKTsKLQkJCX0KLQkJfQotCQkKLQkJaW5mbygiQmx1ZXRvb3RoIGNvbnZlcnRlciBub3cgZGlzY29ubmVjdGVkIGZyb20gdHR5VUIlZCIsIGJsdWV0b290aC0+bWlub3IpOwotCi0JCWJsdWV0b290aF90YWJsZVtibHVldG9vdGgtPm1pbm9yXSA9IE5VTEw7Ci0KLQkJLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCi0JCWtmcmVlIChibHVldG9vdGgpOwotCX0gZWxzZSB7Ci0JCWluZm8oImRldmljZSBkaXNjb25uZWN0ZWQiKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgYmx1ZXRvb3RoX29wcyA9IHsKLQkub3BlbiA9CQkJYmx1ZXRvb3RoX29wZW4sCi0JLmNsb3NlID0JCWJsdWV0b290aF9jbG9zZSwKLQkud3JpdGUgPQkJYmx1ZXRvb3RoX3dyaXRlLAotCS53cml0ZV9yb29tID0JCWJsdWV0b290aF93cml0ZV9yb29tLAotCS5pb2N0bCA9CQlibHVldG9vdGhfaW9jdGwsCi0JLnNldF90ZXJtaW9zID0JCWJsdWV0b290aF9zZXRfdGVybWlvcywKLQkudGhyb3R0bGUgPQkJYmx1ZXRvb3RoX3Rocm90dGxlLAotCS51bnRocm90dGxlID0JCWJsdWV0b290aF91bnRocm90dGxlLAotCS5jaGFyc19pbl9idWZmZXIgPQlibHVldG9vdGhfY2hhcnNfaW5fYnVmZmVyLAotfTsKLQotc3RhdGljIGludCB1c2JfYmx1ZXRvb3RoX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgcmVzdWx0OwotCi0JLyogSW5pdGlhbGl6ZSBvdXIgZ2xvYmFsIGRhdGEgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQkxVRVRPT1RIX1RUWV9NSU5PUlM7ICsraSkgewotCQlibHVldG9vdGhfdGFibGVbaV0gPSBOVUxMOwotCX0KLQotCWluZm8gKCJVU0IgQmx1ZXRvb3RoIHN1cHBvcnQgcmVnaXN0ZXJlZCIpOwotCi0JYmx1ZXRvb3RoX3R0eV9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKEJMVUVUT09USF9UVFlfTUlOT1JTKTsKLQlpZiAoIWJsdWV0b290aF90dHlfZHJpdmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWJsdWV0b290aF90dHlfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWJsdWV0b290aF90dHlfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJ1c2ItYmx1ZXRvb3RoIjsKLQlibHVldG9vdGhfdHR5X2RyaXZlci0+bmFtZSA9ICJ0dHlVQiI7Ci0JYmx1ZXRvb3RoX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSAidXNiL3R0dWIvIjsKLQlibHVldG9vdGhfdHR5X2RyaXZlci0+bWFqb3IgPSBCTFVFVE9PVEhfVFRZX01BSk9SOwotCWJsdWV0b290aF90dHlfZHJpdmVyLT5taW5vcl9zdGFydCA9IDA7Ci0JYmx1ZXRvb3RoX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwotCWJsdWV0b290aF90dHlfZHJpdmVyLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwotCWJsdWV0b290aF90dHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOwotCWJsdWV0b290aF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JYmx1ZXRvb3RoX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCXR0eV9zZXRfb3BlcmF0aW9ucyhibHVldG9vdGhfdHR5X2RyaXZlciwgJmJsdWV0b290aF9vcHMpOwotCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyIChibHVldG9vdGhfdHR5X2RyaXZlcikpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZWdpc3RlciB0dHkgZHJpdmVyIiwgX19GVU5DVElPTl9fKTsKLQkJcHV0X3R0eV9kcml2ZXIoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogcmVnaXN0ZXIgdGhlIFVTQiBkcml2ZXIgKi8KLQlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9ibHVldG9vdGhfZHJpdmVyKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpOwotCQlwdXRfdHR5X2RyaXZlcihibHVldG9vdGhfdHR5X2RyaXZlcik7Ci0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlIFVTQiBibHVldG9vdGggZHJpdmVyLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgdXNiX2JsdWV0b290aF9leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJnVzYl9ibHVldG9vdGhfZHJpdmVyKTsKLQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpOwotCXB1dF90dHlfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKLX0KLQotCi1tb2R1bGVfaW5pdCh1c2JfYmx1ZXRvb3RoX2luaXQpOwotbW9kdWxlX2V4aXQodXNiX2JsdWV0b290aF9leGl0KTsKLQotLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCAxNmVjYWQzLi4xYjQ3NTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC04MjcsMTEgKzgyNywxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoIShhY20gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNtKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKGFjbSBrbWFsbG9jKVxuIik7CisJaWYgKCEoYWNtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjbSksIEdGUF9LRVJORUwpKSkgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChhY20ga3phbGxvYylcbiIpOwogCQlnb3RvIGFsbG9jX2ZhaWw7CiAJfQotCW1lbXNldChhY20sIDAsIHNpemVvZihzdHJ1Y3QgYWNtKSk7CiAKIAljdHJsc2l6ZSA9IGxlMTZfdG9fY3B1KGVwY3RybC0+d01heFBhY2tldFNpemUpOwogCXJlYWRzaXplID0gbGUxNl90b19jcHUoZXByZWFkLT53TWF4UGFja2V0U2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCBlMTk1NzA5Li4zNTdlNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTg0NCw5ICs4NDQsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYmxwX2NsYXNzID0gewotCS5uYW1lID0JCSJ1c2IvbHAlZCIsCisJLm5hbWUgPQkJImxwJWQiLAogCS5mb3BzID0JCSZ1c2JscF9mb3BzLAotCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQLAogCS5taW5vcl9iYXNlID0JVVNCTFBfTUlOT1JfQkFTRSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwppbmRleCAxYTlmZjYxLi5mZjAzMTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCkBAIC02MSwxNCArNjEsMTcgQEAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHRoaXMsIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBVU0JfU1VTUEVORAotCWJvb2wgIlVTQiBzdXNwZW5kL3Jlc3VtZSAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJVU0Igc2VsZWN0aXZlIHN1c3BlbmQvcmVzdW1lIGFuZCB3YWtldXAgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBVU0IgJiYgUE0gJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gdXNlIGRyaXZlciBjYWxscyBvciB0aGUgc3lzZnMKIAkgICJwb3dlci9zdGF0ZSIgZmlsZSB0byBzdXNwZW5kIG9yIHJlc3VtZSBpbmRpdmlkdWFsIFVTQgotCSAgcGVyaXBoZXJhbHMuICBUaGVyZSBhcmUgbWFueSByZWxhdGVkIGZlYXR1cmVzLCBzdWNoIGFzCi0JICByZW1vdGUgd2FrZXVwIGFuZCBkcml2ZXItc3BlY2lmaWMgc3VzcGVuZCBwcm9jZXNzaW5nLCB0aGF0Ci0JICBtYXkgbm90IHlldCB3b3JrIGFzIGV4cGVjdGVkLgorCSAgcGVyaXBoZXJhbHMuCisKKwkgIEFsc28sIFVTQiAicmVtb3RlIHdha2V1cCIgc2lnbmFsaW5nIGlzIHN1cHBvcnRlZCwgd2hlcmVieSBzb21lCisJICBVU0IgZGV2aWNlcyAobGlrZSBrZXlib2FyZHMgYW5kIG5ldHdvcmsgYWRhcHRlcnMpIGNhbiB3YWtlIHVwCisJICB0aGVpciBwYXJlbnQgaHViLiAgVGhhdCB3YWtldXAgY2FzY2FkZXMgdXAgdGhlIFVTQiB0cmVlLCBhbmQKKwkgIGNvdWxkIHdha2UgdGhlIHN5c3RlbSBmcm9tIHN0YXRlcyBsaWtlIHN1c3BlbmQtdG8tUkFNLgogCiAJICBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB0aGlzLCBzYXkgTiBoZXJlLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQppbmRleCBkNTUwM2NmLi5kZDFjNGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIHVzYmNvcmUtb2Jqcwk6PSB1c2IubyBodWIubyBoY2QubyB1cmIubyBtZXNzYWdlLm8gXAotCQkJY29uZmlnLm8gZmlsZS5vIGJ1ZmZlci5vIHN5c2ZzLm8gZGV2aW8ubworCQkJY29uZmlnLm8gZmlsZS5vIGJ1ZmZlci5vIHN5c2ZzLm8gZGV2aW8ubyBub3RpZnkubwogCiBpZmVxICgkKENPTkZJR19QQ0kpLHkpCiAJdXNiY29yZS1vYmpzCSs9IGhjZC1wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKaW5kZXggOTk1OTVlMC4uOTkzMDE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCkBAIC0xMTIsOCArMTEyLDEyIEBACiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjID0gcmVmX3RvX3VzYl9pbnRlcmZhY2VfY2FjaGUocmVmKTsKIAlpbnQgajsKIAotCWZvciAoaiA9IDA7IGogPCBpbnRmYy0+bnVtX2FsdHNldHRpbmc7IGorKykKLQkJa2ZyZWUoaW50ZmMtPmFsdHNldHRpbmdbal0uZW5kcG9pbnQpOworCWZvciAoaiA9IDA7IGogPCBpbnRmYy0+bnVtX2FsdHNldHRpbmc7IGorKykgeworCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQgPSAmaW50ZmMtPmFsdHNldHRpbmdbal07CisKKwkJa2ZyZWUoYWx0LT5lbmRwb2ludCk7CisJCWtmcmVlKGFsdC0+c3RyaW5nKTsKKwl9CiAJa2ZyZWUoaW50ZmMpOwogfQogCkBAIC0xODgsMTAgKzE5Miw5IEBACiAJfQogCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCkgKiBudW1fZXA7Ci0JYWx0LT5lbmRwb2ludCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlhbHQtPmVuZHBvaW50ID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghYWx0LT5lbmRwb2ludCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGFsdC0+ZW5kcG9pbnQsIDAsIGxlbik7CiAKIAkvKiBQYXJzZSBhbGwgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzICovCiAJbiA9IDA7CkBAIC0zNTMsMTAgKzM1Niw5IEBACiAJCX0KIAogCQlsZW4gPSBzaXplb2YoKmludGZjKSArIHNpemVvZihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlKSAqIGo7Ci0JCWNvbmZpZy0+aW50Zl9jYWNoZVtpXSA9IGludGZjID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCQljb25maWctPmludGZfY2FjaGVbaV0gPSBpbnRmYyA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpbnRmYykKIAkJCXJldHVybiAtRU5PTUVNOwotCQltZW1zZXQoaW50ZmMsIDAsIGxlbik7CiAJCWtyZWZfaW5pdCgmaW50ZmMtPnJlZik7CiAJfQogCkBAIC00MjIsOCArNDI0LDYgQEAKIAkJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY2YgPSAmZGV2LT5jb25maWdbY107CiAKIAkJa2ZyZWUoY2YtPnN0cmluZyk7Ci0JCWNmLT5zdHJpbmcgPSBOVUxMOwotCiAJCWZvciAoaSA9IDA7IGkgPCBjZi0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CiAJCQlpZiAoY2YtPmludGZfY2FjaGVbaV0pCiAJCQkJa3JlZl9wdXQoJmNmLT5pbnRmX2NhY2hlW2ldLT5yZWYsIApAQCAtNDU5LDE2ICs0NTksMTQgQEAKIAl9CiAKIAlsZW5ndGggPSBuY2ZnICogc2l6ZW9mKHN0cnVjdCB1c2JfaG9zdF9jb25maWcpOwotCWRldi0+Y29uZmlnID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOworCWRldi0+Y29uZmlnID0ga3phbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghZGV2LT5jb25maWcpCiAJCWdvdG8gZXJyMjsKLQltZW1zZXQoZGV2LT5jb25maWcsIDAsIGxlbmd0aCk7CiAKIAlsZW5ndGggPSBuY2ZnICogc2l6ZW9mKGNoYXIgKik7Ci0JZGV2LT5yYXdkZXNjcmlwdG9ycyA9IGttYWxsb2MobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlkZXYtPnJhd2Rlc2NyaXB0b3JzID0ga3phbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghZGV2LT5yYXdkZXNjcmlwdG9ycykKIAkJZ290byBlcnIyOwotCW1lbXNldChkZXYtPnJhd2Rlc2NyaXB0b3JzLCAwLCBsZW5ndGgpOwogCiAJYnVmZmVyID0ga21hbGxvYyhVU0JfRFRfQ09ORklHX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmZmVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IGJlZmUwYzcuLjk0MmNkNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMjA5LDEwICsyMTAsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgYXN5bmMgKmFsbG9jX2FzeW5jKHVuc2lnbmVkIGludCBudW1pc29mcmFtZXMpCiB7CiAgICAgICAgIHVuc2lnbmVkIGludCBhc3NpemUgPSBzaXplb2Yoc3RydWN0IGFzeW5jKSArIG51bWlzb2ZyYW1lcyAqIHNpemVvZihzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvcik7Ci0gICAgICAgIHN0cnVjdCBhc3luYyAqYXMgPSBrbWFsbG9jKGFzc2l6ZSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIHN0cnVjdCBhc3luYyAqYXMgPSBremFsbG9jKGFzc2l6ZSwgR0ZQX0tFUk5FTCk7CisKICAgICAgICAgaWYgKCFhcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgbWVtc2V0KGFzLCAwLCBhc3NpemUpOwogCWFzLT51cmIgPSB1c2JfYWxsb2NfdXJiKG51bWlzb2ZyYW1lcywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhcy0+dXJiKSB7CiAJCWtmcmVlKGFzKTsKQEAgLTI3OSw2ICsyODAsMjggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHNub29wX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHZvaWQgX191c2VyICp1c2VydXJiKQoreworCWludCBqOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCWlmICghdXNiZnNfc25vb3ApCisJCXJldHVybjsKKworCWlmICh1cmItPnBpcGUgJiBVU0JfRElSX0lOKQorCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRpcmVjdGlvbj1JTlxuIik7CisJZWxzZQorCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRpcmVjdGlvbj1PVVRcbiIpOworCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNlcnVyYj0lcFxuIiwgdXNlcnVyYik7CisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPSVkXG4iLAorCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImFjdHVhbF9sZW5ndGg9JWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJkYXRhOiAiKTsKKwlmb3IgKGogPSAwOyBqIDwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOyArK2opCisJCXByaW50ayAoIiUwMnggIiwgZGF0YVtqXSk7CisJcHJpbnRrKCJcbiIpOworfQorCiBzdGF0aWMgdm9pZCBhc3luY19jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKICAgICAgICAgc3RydWN0IGFzeW5jICphcyA9IChzdHJ1Y3QgYXN5bmMgKil1cmItPmNvbnRleHQ7CkBAIC0yOTYsNyArMzE5LDkgQEAKIAkJa2lsbF9wcm9jX2luZm9fYXNfdWlkKGFzLT5zaWduciwgJnNpbmZvLCBhcy0+cGlkLCBhcy0+dWlkLCAKIAkJCQkgICAgICBhcy0+ZXVpZCk7CiAJfQotICAgICAgICB3YWtlX3VwKCZwcy0+d2FpdCk7CisJc25vb3AoJnVyYi0+ZGV2LT5kZXYsICJ1cmIgY29tcGxldGVcbiIpOworCXNub29wX3VyYih1cmIsIGFzLT51c2VydXJiKTsKKwl3YWtlX3VwKCZwcy0+d2FpdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfYXN5bmMgKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQpAQCAtNDkzLDYgKzUxOCwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2X2xvb2t1cF9taW5vcihpbnQgbWlub3IpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBOVUxMOworCisJZG93bigmdXNiX2RldmljZV9jbGFzcy0+c2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsYXNzX2RldiwgJnVzYl9kZXZpY2VfY2xhc3MtPmNoaWxkcmVuLCBub2RlKSB7CisJCWlmIChjbGFzc19kZXYtPmRldnQgPT0gTUtERVYoVVNCX0RFVklDRV9NQUpPUiwgbWlub3IpKSB7CisJCQlkZXYgPSBjbGFzc19kZXYtPmNsYXNzX2RhdGE7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cCgmdXNiX2RldmljZV9jbGFzcy0+c2VtKTsKKworCXJldHVybiBkZXY7Cit9OworCiAvKgogICogZmlsZSBvcGVyYXRpb25zCiAgKi8KQEAgLTYwMSw3ICs2NDMsNyBAQAogCQkJaWYgKHVzYmZzX3Nub29wKSB7CiAJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiY29udHJvbCByZWFkOiBkYXRhICIpOwogCQkJCWZvciAoaiA9IDA7IGogPCBpOyArK2opCi0JCQkJCXByaW50ayAoIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpKHRidWYpW2pdKTsKKwkJCQkJcHJpbnRrKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7CiAJCQkJcHJpbnRrKCJcbiIpOwogCQkJfQogCQkJaWYgKGNvcHlfdG9fdXNlcihjdHJsLmRhdGEsIHRidWYsIGkpKSB7CkBAIC02MjQsNyArNjY2LDcgQEAKIAkJaWYgKHVzYmZzX3Nub29wKSB7CiAJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJjb250cm9sIHdyaXRlOiBkYXRhOiAiKTsKIAkJCWZvciAoaiA9IDA7IGogPCBjdHJsLndMZW5ndGg7ICsraikKLQkJCQlwcmludGsgKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7CisJCQkJcHJpbnRrKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7CiAJCQlwcmludGsoIlxuIik7CiAJCX0KIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKQEAgLTY0OSw3ICs2OTEsNyBAQAogCXVuc2lnbmVkIGludCB0bW8sIGxlbjEsIHBpcGU7CiAJaW50IGxlbjI7CiAJdW5zaWduZWQgY2hhciAqdGJ1ZjsKLQlpbnQgaSwgcmV0OworCWludCBpLCBqLCByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmJ1bGssIGFyZywgc2l6ZW9mKGJ1bGspKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC02NzQsMTAgKzcxNiwxOCBAQAogCQkJa2ZyZWUodGJ1Zik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQlzbm9vcCgmZGV2LT5kZXYsICJidWxrIHJlYWQ6IGxlbj0weCUwMnggdGltZW91dD0lMDRkXG4iLAorCQkJYnVsay5sZW4sIGJ1bGsudGltZW91dCk7CiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCB0YnVmLCBsZW4xLCAmbGVuMiwgdG1vKTsKIAkJdXNiX2xvY2tfZGV2aWNlKGRldik7CiAJCWlmICghaSAmJiBsZW4yKSB7CisJCQlpZiAodXNiZnNfc25vb3ApIHsKKwkJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJidWxrIHJlYWQ6IGRhdGEgIik7CisJCQkJZm9yIChqID0gMDsgaiA8IGxlbjI7ICsraikKKwkJCQkJcHJpbnRrKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7CisJCQkJcHJpbnRrKCJcbiIpOworCQkJfQogCQkJaWYgKGNvcHlfdG9fdXNlcihidWxrLmRhdGEsIHRidWYsIGxlbjIpKSB7CiAJCQkJa2ZyZWUodGJ1Zik7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC02OTAsNiArNzQwLDE0IEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCX0KKwkJc25vb3AoJmRldi0+ZGV2LCAiYnVsayB3cml0ZTogbGVuPTB4JTAyeCB0aW1lb3V0PSUwNGRcbiIsCisJCQlidWxrLmxlbiwgYnVsay50aW1lb3V0KTsKKwkJaWYgKHVzYmZzX3Nub29wKSB7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJidWxrIHdyaXRlOiBkYXRhOiAiKTsKKwkJCWZvciAoaiA9IDA7IGogPCBsZW4xOyArK2opCisJCQkJcHJpbnRrKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7CisJCQlwcmludGsoIlxuIik7CisJCX0KIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKIAkJaSA9IHVzYl9idWxrX21zZyhkZXYsIHBpcGUsIHRidWYsIGxlbjEsICZsZW4yLCB0bW8pOwogCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKQEAgLTgzNSw3ICs4OTMsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLQogc3RhdGljIGludCBwcm9jX2RvX3N1Ym1pdHVyYihzdHJ1Y3QgZGV2X3N0YXRlICpwcywgc3RydWN0IHVzYmRldmZzX3VyYiAqdXVyYiwKIAkJCSAgICAgc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyBfX3VzZXIgKmlzb19mcmFtZV9kZXNjLAogCQkJICAgICB2b2lkIF9fdXNlciAqYXJnKQpAQCAtODk2LDYgKzk1Myw3IEBACiAJCQlrZnJlZShkcik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQorCQlzbm9vcCgmcHMtPmRldi0+ZGV2LCAiY29udHJvbCB1cmJcbiIpOwogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfQlVMSzoKQEAgLTkxMCw2ICs5NjgsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghYWNjZXNzX29rKCh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pID8gVkVSSUZZX1dSSVRFIDogVkVSSUZZX1JFQUQsIHV1cmItPmJ1ZmZlciwgdXVyYi0+YnVmZmVyX2xlbmd0aCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc25vb3AoJnBzLT5kZXYtPmRldiwgImJ1bGsgdXJiXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lTTzoKQEAgLTkzOSw2ICs5OTgsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJdXVyYi0+YnVmZmVyX2xlbmd0aCA9IHRvdGxlbjsKKwkJc25vb3AoJnBzLT5kZXYtPmRldiwgImlzbyB1cmJcbiIpOwogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfSU5URVJSVVBUOgpAQCAtOTU0LDYgKzEwMTQsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghYWNjZXNzX29rKCh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pID8gVkVSSUZZX1dSSVRFIDogVkVSSUZZX1JFQUQsIHV1cmItPmJ1ZmZlciwgdXVyYi0+YnVmZmVyX2xlbmd0aCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc25vb3AoJnBzLT5kZXYtPmRldiwgImludGVycnVwdCB1cmJcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMDAzLDYgKzEwNjQsOCBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAl9CisJc25vb3AoJmFzLT51cmItPmRldi0+ZGV2LCAic3VibWl0IHVyYlxuIik7CisJc25vb3BfdXJiKGFzLT51cmIsIGFzLT51c2VydXJiKTsKICAgICAgICAgYXN5bmNfbmV3cGVuZGluZyhhcyk7CiAgICAgICAgIGlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIoYXMtPnVyYiwgR0ZQX0tFUk5FTCkpKSB7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBzLT5kZXYtPmRldiwgInVzYmZzOiB1c2Jfc3VibWl0X3VyYiByZXR1cm5lZCAlZFxuIiwgcmV0KTsKQEAgLTEyMzgsMjMgKzEzMDEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX2lvY3RsIChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgcHJvY19pb2N0bChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgc3RydWN0IHVzYmRldmZzX2lvY3RsICpjdGwpCiB7Ci0Jc3RydWN0IHVzYmRldmZzX2lvY3RsCWN0cmw7CiAJaW50CQkJc2l6ZTsKIAl2b2lkCQkJKmJ1ZiA9IE5VTEw7CiAJaW50CQkJcmV0dmFsID0gMDsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAgICAqaW50ZiA9IE5VTEw7CiAJc3RydWN0IHVzYl9kcml2ZXIgICAgICAgKmRyaXZlciA9IE5VTEw7CiAKLQkvKiBnZXQgaW5wdXQgcGFyYW1ldGVycyBhbmQgYWxsb2MgYnVmZmVyICovCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZiAoY3RybCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoKHNpemUgPSBfSU9DX1NJWkUgKGN0cmwuaW9jdGxfY29kZSkpID4gMCkgeworCS8qIGFsbG9jIGJ1ZmZlciAqLworCWlmICgoc2l6ZSA9IF9JT0NfU0laRSAoY3RsLT5pb2N0bF9jb2RlKSkgPiAwKSB7CiAJCWlmICgoYnVmID0ga21hbGxvYyAoc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJaWYgKChfSU9DX0RJUihjdHJsLmlvY3RsX2NvZGUpICYgX0lPQ19XUklURSkpIHsKLQkJCWlmIChjb3B5X2Zyb21fdXNlciAoYnVmLCBjdHJsLmRhdGEsIHNpemUpKSB7CisJCWlmICgoX0lPQ19ESVIoY3RsLT5pb2N0bF9jb2RlKSAmIF9JT0NfV1JJVEUpKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIgKGJ1ZiwgY3RsLT5kYXRhLCBzaXplKSkgewogCQkJCWtmcmVlKGJ1Zik7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CkBAIC0xMjcwLDkgKzEzMzAsOSBAQAogCiAJaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQogCQlyZXR2YWwgPSAtRUhPU1RVTlJFQUNIOwotCWVsc2UgaWYgKCEoaW50ZiA9IHVzYl9pZm51bV90b19pZiAocHMtPmRldiwgY3RybC5pZm5vKSkpCisJZWxzZSBpZiAoIShpbnRmID0gdXNiX2lmbnVtX3RvX2lmIChwcy0+ZGV2LCBjdGwtPmlmbm8pKSkKICAgICAgICAgICAgICAgIHJldHZhbCA9IC1FSU5WQUw7Ci0JZWxzZSBzd2l0Y2ggKGN0cmwuaW9jdGxfY29kZSkgeworCWVsc2Ugc3dpdGNoIChjdGwtPmlvY3RsX2NvZGUpIHsKIAogCS8qIGRpc2Nvbm5lY3Qga2VybmVsIGRyaXZlciBmcm9tIGludGVyZmFjZSAqLwogCWNhc2UgVVNCREVWRlNfRElTQ09OTkVDVDoKQEAgLTEzMDQsNyArMTM2NCw3IEBACiAJCWlmIChkcml2ZXIgPT0gTlVMTCB8fCBkcml2ZXItPmlvY3RsID09IE5VTEwpIHsKIAkJCXJldHZhbCA9IC1FTk9UVFk7CiAJCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSBkcml2ZXItPmlvY3RsIChpbnRmLCBjdHJsLmlvY3RsX2NvZGUsIGJ1Zik7CisJCQlyZXR2YWwgPSBkcml2ZXItPmlvY3RsIChpbnRmLCBjdGwtPmlvY3RsX2NvZGUsIGJ1Zik7CiAJCQlpZiAocmV0dmFsID09IC1FTk9JT0NUTENNRCkKIAkJCQlyZXR2YWwgPSAtRU5PVFRZOwogCQl9CkBAIC0xMzEzLDE1ICsxMzczLDQyIEBACiAKIAkvKiBjbGVhbnVwIGFuZCByZXR1cm4gKi8KIAlpZiAocmV0dmFsID49IDAKLQkJCSYmIChfSU9DX0RJUiAoY3RybC5pb2N0bF9jb2RlKSAmIF9JT0NfUkVBRCkgIT0gMAorCQkJJiYgKF9JT0NfRElSIChjdGwtPmlvY3RsX2NvZGUpICYgX0lPQ19SRUFEKSAhPSAwCiAJCQkmJiBzaXplID4gMAotCQkJJiYgY29weV90b191c2VyIChjdHJsLmRhdGEsIGJ1Ziwgc2l6ZSkgIT0gMCkKKwkJCSYmIGNvcHlfdG9fdXNlciAoY3RsLT5kYXRhLCBidWYsIHNpemUpICE9IDApCiAJCXJldHZhbCA9IC1FRkFVTFQ7CiAKIAlrZnJlZShidWYpOwogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY19pb2N0bF9kZWZhdWx0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JkZXZmc19pb2N0bAljdHJsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZiAoY3RybCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gcHJvY19pb2N0bChwcywgJmN0cmwpOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGludCBwcm9jX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwzMiBfX3VzZXIgKnVpb2M7CisJc3RydWN0IHVzYmRldmZzX2lvY3RsIGN0cmw7CisJdTMyIHVkYXRhOworCisJdWlvYyA9IGNvbXBhdF9wdHIoYXJnKTsKKwlpZiAoZ2V0X3VzZXIoY3RybC5pZm5vLCAmdWlvYy0+aWZubykgfHwKKwkgICAgZ2V0X3VzZXIoY3RybC5pb2N0bF9jb2RlLCAmdWlvYy0+aW9jdGxfY29kZSkgfHwKKwkgICAgX19nZXRfdXNlcih1ZGF0YSwgJnVpb2MtPmRhdGEpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljdHJsLmRhdGEgPSBjb21wYXRfcHRyKHVkYXRhKTsKKworCXJldHVybiBwcm9jX2lvY3RsKHBzLCAmY3RybCk7Cit9CisjZW5kaWYKKwogLyoKICAqIE5PVEU6ICBBbGwgcmVxdWVzdHMgaGVyZSB0aGF0IGhhdmUgaW50ZXJmYWNlIG51bWJlcnMgYXMgcGFyYW1ldGVycwogICogYXJlIGFzc3VtaW5nIHRoYXQgc29tZWhvdyB0aGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBwcmV2ZW50ZWQgZnJvbQpAQCAtMTQyMiw2ICsxNTA5LDEwIEBACiAJCXJldCA9IHByb2NfcmVhcHVyYm5vbmJsb2NrX2NvbXBhdChwcywgcCk7CiAJCWJyZWFrOwogCisJY2FzZSBVU0JERVZGU19JT0NUTDMyOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogSU9DVExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfaW9jdGxfY29tcGF0KHBzLCBwKTsKKwkJYnJlYWs7CiAjZW5kaWYKIAogCWNhc2UgVVNCREVWRlNfRElTQ0FSRFVSQjoKQEAgLTE0NTYsNyArMTU0Nyw3IEBACiAKIAljYXNlIFVTQkRFVkZTX0lPQ1RMOgogCQlzbm9vcCgmZGV2LT5kZXYsICIlczogSU9DVExcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldCA9IHByb2NfaW9jdGwocHMsIHApOworCQlyZXQgPSBwcm9jX2lvY3RsX2RlZmF1bHQocHMsIHApOwogCQlicmVhazsKIAl9CiAJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKQEAgLTE0ODgsMjQgKzE1NzksNyBAQAogCS5yZWxlYXNlID0JdXNiZGV2X3JlbGVhc2UsCiB9OwogCi1zdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2X2xvb2t1cF9taW5vcihpbnQgbWlub3IpCi17Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBOVUxMOwotCi0JZG93bigmdXNiX2RldmljZV9jbGFzcy0+c2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsYXNzX2RldiwgJnVzYl9kZXZpY2VfY2xhc3MtPmNoaWxkcmVuLCBub2RlKSB7Ci0JCWlmIChjbGFzc19kZXYtPmRldnQgPT0gTUtERVYoVVNCX0RFVklDRV9NQUpPUiwgbWlub3IpKSB7Ci0JCQlkZXYgPSBjbGFzc19kZXYtPmNsYXNzX2RhdGE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQl1cCgmdXNiX2RldmljZV9jbGFzcy0+c2VtKTsKLQotCXJldHVybiBkZXY7Ci19OwotCi12b2lkIHVzYmRldl9hZGQoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHVzYmRldl9hZGQoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKIAlpbnQgbWlub3IgPSAoKGRldi0+YnVzLT5idXNudW0tMSkgKiAxMjgpICsgKGRldi0+ZGV2bnVtLTEpOwogCkBAIC0xNTE2LDExICsxNTkwLDI5IEBACiAJZGV2LT5jbGFzc19kZXYtPmNsYXNzX2RhdGEgPSBkZXY7CiB9CiAKLXZvaWQgdXNiZGV2X3JlbW92ZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdXNiZGV2X3JlbW92ZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewogCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGRldi0+Y2xhc3NfZGV2KTsKIH0KIAorc3RhdGljIGludCB1c2JkZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgdm9pZCAqZGV2KQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBVU0JfREVWSUNFX0FERDoKKwkJdXNiZGV2X2FkZChkZXYpOworCQlicmVhazsKKwljYXNlIFVTQl9ERVZJQ0VfUkVNT1ZFOgorCQl1c2JkZXZfcmVtb3ZlKGRldik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHVzYmRldl9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IAl1c2JkZXZfbm90aWZ5LAorfTsKKwogc3RhdGljIHN0cnVjdCBjZGV2IHVzYl9kZXZpY2VfY2RldiA9IHsKIAkua29iaiAgID0gey5uYW1lID0gInVzYl9kZXZpY2UiLCB9LAogCS5vd25lciAgPSBUSElTX01PRFVMRSwKQEAgLTE1NDAsMjQgKzE2MzIsMzIgQEAKIAlyZXR2YWwgPSBjZGV2X2FkZCgmdXNiX2RldmljZV9jZGV2LCBVU0JfREVWSUNFX0RFViwgVVNCX0RFVklDRV9NQVgpOwogCWlmIChyZXR2YWwpIHsKIAkJZXJyKCJ1bmFibGUgdG8gZ2V0IHVzYl9kZXZpY2UgbWFqb3IgJWQiLCBVU0JfREVWSUNFX01BSk9SKTsKLQkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKFVTQl9ERVZJQ0VfREVWLCBVU0JfREVWSUNFX01BWCk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGVycm9yX2NkZXY7CiAJfQogCXVzYl9kZXZpY2VfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ1c2JfZGV2aWNlIik7CiAJaWYgKElTX0VSUih1c2JfZGV2aWNlX2NsYXNzKSkgewogCQllcnIoInVuYWJsZSB0byByZWdpc3RlciB1c2JfZGV2aWNlIGNsYXNzIik7CiAJCXJldHZhbCA9IFBUUl9FUlIodXNiX2RldmljZV9jbGFzcyk7Ci0JCXVzYl9kZXZpY2VfY2xhc3MgPSBOVUxMOwotCQljZGV2X2RlbCgmdXNiX2RldmljZV9jZGV2KTsKLQkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKFVTQl9ERVZJQ0VfREVWLCBVU0JfREVWSUNFX01BWCk7CisJCWdvdG8gZXJyb3JfY2xhc3M7CiAJfQogCisJdXNiX3JlZ2lzdGVyX25vdGlmeSgmdXNiZGV2X25iKTsKKwogb3V0OgogCXJldHVybiByZXR2YWw7CisKK2Vycm9yX2NsYXNzOgorCXVzYl9kZXZpY2VfY2xhc3MgPSBOVUxMOworCWNkZXZfZGVsKCZ1c2JfZGV2aWNlX2NkZXYpOworCitlcnJvcl9jZGV2OgorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihVU0JfREVWSUNFX0RFViwgVVNCX0RFVklDRV9NQVgpOworCWdvdG8gb3V0OwogfQogCiB2b2lkIHVzYmRldl9jbGVhbnVwKHZvaWQpCiB7CisJdXNiX3VucmVnaXN0ZXJfbm90aWZ5KCZ1c2JkZXZfbmIpOwogCWNsYXNzX2Rlc3Ryb3kodXNiX2RldmljZV9jbGFzcyk7CiAJY2Rldl9kZWwoJnVzYl9kZXZpY2VfY2Rldik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKFVTQl9ERVZJQ0VfREVWLCBVU0JfREVWSUNFX01BWCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCmluZGV4IDc4Y2I0YmUuLmU2OTUzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKQEAgLTg4LDggKzg3LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2ZnNfbWtfZGlyKCJ1c2IiKTsKLQogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KQEAgLTk3LDcgKzk0LDYgQEAKIHZvaWQgdXNiX21ham9yX2NsZWFudXAodm9pZCkKIHsKIAljbGFzc19kZXN0cm95KHVzYl9jbGFzcyk7Ci0JZGV2ZnNfcmVtb3ZlKCJ1c2IiKTsKIAl1bnJlZ2lzdGVyX2NocmRldihVU0JfTUFKT1IsICJ1c2IiKTsKIH0KIApAQCAtMTEyLDggKzEwOCw3IEBACiAgKiBlbmFibGVkLCB0aGUgbWlub3IgbnVtYmVyIHdpbGwgYmUgYmFzZWQgb24gdGhlIG5leHQgYXZhaWxhYmxlIGZyZWUgbWlub3IsCiAgKiBzdGFydGluZyBhdCB0aGUgY2xhc3NfZHJpdmVyLT5taW5vcl9iYXNlLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjcmVhdGVzIHRoZSBkZXZmcyBmaWxlIGZvciB0aGUgdXNiIGRldmljZSwgaWYgZGV2ZnMKLSAqIGlzIGVuYWJsZWQsIGFuZCBjcmVhdGVzIGEgdXNiIGNsYXNzIGRldmljZSBpbiB0aGUgc3lzZnMgdHJlZS4KKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjcmVhdGVzIGEgdXNiIGNsYXNzIGRldmljZSBpbiB0aGUgc3lzZnMgdHJlZS4KICAqCiAgKiB1c2JfZGVyZWdpc3Rlcl9kZXYoKSBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgZG9uZSB3aXRoCiAgKiB0aGUgbWlub3IgbnVtYmVycyBnaXZlbiBvdXQgYnkgdGhpcyBmdW5jdGlvbi4KQEAgLTE2MiwxMSArMTU3LDggQEAKIAogCWludGYtPm1pbm9yID0gbWlub3I7CiAKLQkvKiBoYW5kbGUgdGhlIGRldmZzIHJlZ2lzdHJhdGlvbiAqLwotCXNucHJpbnRmKG5hbWUsIEJVU19JRF9TSVpFLCBjbGFzc19kcml2ZXItPm5hbWUsIG1pbm9yIC0gbWlub3JfYmFzZSk7Ci0JZGV2ZnNfbWtfY2RldihNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgY2xhc3NfZHJpdmVyLT5tb2RlLCBuYW1lKTsKLQogCS8qIGNyZWF0ZSBhIHVzYiBjbGFzcyBkZXZpY2UgZm9yIHRoaXMgdXNiIGludGVyZmFjZSAqLworCXNucHJpbnRmKG5hbWUsIEJVU19JRF9TSVpFLCBjbGFzc19kcml2ZXItPm5hbWUsIG1pbm9yIC0gbWlub3JfYmFzZSk7CiAJdGVtcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKIAlpZiAodGVtcCAmJiAodGVtcFsxXSAhPSAweDAwKSkKIAkJKyt0ZW1wOwpAQCAtMTc5LDcgKzE3MSw2IEBACiAJCXNwaW5fbG9jayAoJm1pbm9yX2xvY2spOwogCQl1c2JfbWlub3JzW2ludGYtPm1pbm9yXSA9IE5VTEw7CiAJCXNwaW5fdW5sb2NrICgmbWlub3JfbG9jayk7Ci0JCWRldmZzX3JlbW92ZSAobmFtZSk7CiAJCXJldHZhbCA9IFBUUl9FUlIoaW50Zi0+Y2xhc3NfZGV2KTsKIAl9CiBleGl0OgpAQCAtMTk3LDkgKzE4OCw4IEBACiAgKiBjYWxsIHRvIHVzYl9yZWdpc3Rlcl9kZXYoKSAodXN1YWxseSB3aGVuIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkCiAgKiBmcm9tIHRoZSBzeXN0ZW0uKQogICoKLSAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjbGVhbnMgdXAgdGhlIGRldmZzIGZpbGUgZm9yIHRoZSB1c2IgZGV2aWNlLCBpZiBkZXZmcwotICogaXMgZW5hYmxlZCwgYW5kIHJlbW92ZXMgdGhlIHVzYiBjbGFzcyBkZXZpY2UgZnJvbSB0aGUgc3lzZnMgdHJlZS4KLSAqIAorICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlbW92ZXMgdGhlIHVzYiBjbGFzcyBkZXZpY2UgZnJvbSB0aGUgc3lzZnMgdHJlZS4KKyAqCiAgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgYWxsIGRyaXZlcnMgdGhhdCB1c2UgdGhlIFVTQiBtYWpvciBudW1iZXIuCiAgKi8KIHZvaWQgdXNiX2RlcmVnaXN0ZXJfZGV2KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApAQCAtMjIyLDcgKzIxMiw2IEBACiAJc3Bpbl91bmxvY2sgKCZtaW5vcl9sb2NrKTsKIAogCXNucHJpbnRmKG5hbWUsIEJVU19JRF9TSVpFLCBjbGFzc19kcml2ZXItPm5hbWUsIGludGYtPm1pbm9yIC0gbWlub3JfYmFzZSk7Ci0JZGV2ZnNfcmVtb3ZlIChuYW1lKTsKIAljbGFzc19kZXZpY2VfZGVzdHJveSh1c2JfY2xhc3MsIE1LREVWKFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpKTsKIAlpbnRmLT5jbGFzc19kZXYgPSBOVUxMOwogCWludGYtPm1pbm9yID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDYzODVkMWEuLjg0ZDllNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAidXNiLmgiCiAjaW5jbHVkZSAiaGNkLmgiCiAKIApAQCAtMTk3LDYgKzE5OSwyNiBAQAogCiAJaGNkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAKKwkvKiBSb290IGh1YiBzdXNwZW5kIHNob3VsZCBoYXZlIHN0b3BwZWQgYWxsIGRvd25zdHJlYW0gdHJhZmZpYywKKwkgKiBhbmQgYWxsIGJ1cyBtYXN0ZXIgdHJhZmZpYy4gIEFuZCBkb25lIHNvIGZvciBib3RoIHRoZSBpbnRlcmZhY2UKKwkgKiBhbmQgdGhlIHN0dWIgdXNiX2RldmljZSAod2hpY2ggd2UgY2hlY2sgaGVyZSkuICBCdXQgbWF5YmUgaXQKKwkgKiBkaWRuJ3Q7IHdyaXRpbmcgc3lzZnMgcG93ZXIvc3RhdGUgZmlsZXMgaWdub3JlcyBzdWNoIHJ1bGVzLi4uCisJICoKKwkgKiBXZSBtdXN0IGlnbm9yZSB0aGUgRlJFRVpFIHZzIFNVU1BFTkQgZGlzdGluY3Rpb24gaGVyZSwgYmVjYXVzZQorCSAqIG90aGVyd2lzZSB0aGUgc3dzdXNwIHdpbGwgc2F2ZSAoYW5kIHJlc3RvcmUpIGdhcmJhZ2Ugc3RhdGUuCisJICovCisJaWYgKGhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGhjZC0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCXJldHZhbCA9IGhjZC0+ZHJpdmVyLT5zdXNwZW5kKGhjZCwgbWVzc2FnZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9kYmcgKCZkZXYtPmRldiwgIlBDSSBwcmUtc3VzcGVuZCBmYWlsLCAlZFxuIiwKKwkJCQlyZXR2YWwpOworCQkJZ290byBkb25lOworCQl9CisJfQorCiAJLyogRklYTUUgdW50aWwgdGhlIGdlbmVyaWMgUE0gaW50ZXJmYWNlcyBjaGFuZ2UgYSBsb3QgbW9yZSwgdGhpcwogCSAqIGNhbid0IHVzZSBQQ0kgRDEgYW5kIEQyIHN0YXRlcy4gIEZvciBleGFtcGxlLCB0aGUgY29uZnVzaW9uCiAJICogYmV0d2VlbiBtZXNzYWdlcyBhbmQgc3RhdGVzIHdpbGwgbmVlZCB0byB2YW5pc2gsIGFuZCBtZXNzYWdlcwpAQCAtMjE1LDMxICsyMzcsMTMgQEAKIAkgKi8KIAloYXNfcGNpX3BtID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfUE0pOwogCi0Jc3dpdGNoIChoY2QtPnN0YXRlKSB7Ci0KLQkvKiBlbnRyeSBpZiByb290IGh1YiB3YXNuJ3QgeWV0IHN1c3BlbmRlZCAuLi4gZnJvbSBzeXNmcywKLQkgKiB3aXRob3V0IGF1dG9zdXNwZW5kLCBvciBpZiBVU0JfU1VTUEVORCBpc24ndCBjb25maWd1cmVkLgorCS8qIERvd25zdHJlYW0gcG9ydHMgZnJvbSB0aGlzIHJvb3QgaHViIHNob3VsZCBhbHJlYWR5IGJlIHF1aWVzY2VkLCBzbworCSAqIHRoZXJlIHdpbGwgYmUgbm8gRE1BIGFjdGl2aXR5LiAgTm93IHdlIGNhbiBzaHV0IGRvd24gdGhlIHVwc3RyZWFtCisJICogbGluayAoZXhjZXB0IG1heWJlIGZvciBQTUUjIHJlc3VtZSBzaWduYWxpbmcpIGFuZCBlbnRlciBzb21lIFBDSQorCSAqIGxvdyBwb3dlciBzdGF0ZSwgaWYgdGhlIGhhcmR3YXJlIGFsbG93cy4KIAkgKi8KLQljYXNlIEhDX1NUQVRFX1JVTk5JTkc6Ci0JCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9RVUlFU0NJTkc7Ci0JCXJldHZhbCA9IGhjZC0+ZHJpdmVyLT5zdXNwZW5kIChoY2QsIG1lc3NhZ2UpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgCi0JCQkJCSJzdXNwZW5kIGZhaWwsIHJldHZhbCAlZFxuIiwKLQkJCQkJcmV0dmFsKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7Ci0JCS8qIEZBTExUSFJPVUdIICovCisJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKSB7CiAKLQkvKiBlbnRyeSB3aXRoIENPTkZJR19VU0JfU1VTUEVORCwgb3IgaGNkcyB0aGF0IGF1dG9zdXNwZW5kOiB0aGUKLQkgKiBjb250cm9sbGVyIGFuZC9vciByb290IGh1YiB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHN1c3BlbmRlZCwKLQkgKiBidXQgaXQgd29uJ3QgYmUgcmVhZHkgZm9yIGEgUENJIHJlc3VtZSBjYWxsLgotCSAqCi0JICogRklYTUUgb25seSBDT05GSUdfVVNCX1NVU1BFTkQgZ3VhcmFudGVlcyBodWJfc3VzcGVuZCgpIHdpbGwKLQkgKiBoYXZlIGJlZW4gY2FsbGVkLCBvdGhlcndpc2Ugcm9vdCBodWIgdGltZXJzIHN0aWxsIHJ1biAuLi4KLQkgKi8KLQljYXNlIEhDX1NUQVRFX1NVU1BFTkRFRDoKIAkJLyogbm8gRE1BIG9yIElSUXMgZXhjZXB0IHdoZW4gSEMgaXMgYWN0aXZlICovCiAJCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QwKSB7CiAJCQlwY2lfc2F2ZV9zdGF0ZSAoZGV2KTsKQEAgLTI0OCw3ICsyNTIsNyBAQAogCiAJCWlmICghaGFzX3BjaV9wbSkgewogCQkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICItLT4gUENJIEQwL2xlZ2FjeVxuIik7Ci0JCQlicmVhazsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCiAJCS8qIE5PVEU6ICBkZXYtPmN1cnJlbnRfc3RhdGUgYmVjb21lcyBub256ZXJvIG9ubHkgaGVyZSwgYW5kCkBAIC0yNTksMjggKzI2MywyOSBAQAogCQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChkZXYsIFBDSV9EM2hvdCk7CiAJCWlmIChyZXR2YWwgPT0gMCkgewogCQkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICItLT4gUENJIEQzXG4iKTsKLQkJCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZSAoZGV2LCBQQ0lfRDNob3QsIGhjZC0+cmVtb3RlX3dha2V1cCk7Ci0JCQlpZiAocmV0dmFsKQotCQkJCWJyZWFrOwotCQkJcmV0dmFsID0gcGNpX2VuYWJsZV93YWtlIChkZXYsIFBDSV9EM2NvbGQsIGhjZC0+cmVtb3RlX3dha2V1cCk7Ci0JCX0gZWxzZSBpZiAocmV0dmFsIDwgMCkgeworCisJCQkvKiBJZ25vcmUgdGhlc2UgcmV0dXJuIHZhbHVlcy4gIFdlIHJlbHkgb24gcGNpIGNvZGUgdG8KKwkJCSAqIHJlamVjdCByZXF1ZXN0cyB0aGUgaGFyZHdhcmUgY2FuJ3QgaW1wbGVtZW50LCByYXRoZXIKKwkJCSAqIHRoYW4gY29kaW5nIHRoZSBzYW1lIHRoaW5nLgorCQkJICovCisJCQkodm9pZCkgcGNpX2VuYWJsZV93YWtlIChkZXYsIFBDSV9EM2hvdCwgaGNkLT5yZW1vdGVfd2FrZXVwKTsKKwkJCSh2b2lkKSBwY2lfZW5hYmxlX3dha2UgKGRldiwgUENJX0QzY29sZCwgaGNkLT5yZW1vdGVfd2FrZXVwKTsKKwkJfSBlbHNlIHsKIAkJCWRldl9kYmcgKCZkZXYtPmRldiwgIlBDSSBEMyBzdXNwZW5kIGZhaWwsICVkXG4iLAogCQkJCQlyZXR2YWwpOwogCQkJKHZvaWQpIHVzYl9oY2RfcGNpX3Jlc3VtZSAoZGV2KTsKLQkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisKKwl9IGVsc2UgewogCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgImhjZCBzdGF0ZSAlZDsgbm90IHN1c3BlbmRlZFxuIiwKIAkJCWhjZC0+c3RhdGUpOwogCQlXQVJOX09OKDEpOwogCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlicmVhazsKIAl9CiAKLQkvKiB1cGRhdGUgcG93ZXJfc3RhdGUgKipPTkxZKiogdG8gbWFrZSBzeXNmcyBoYXBwaWVyICovCitkb25lOgogCWlmIChyZXR2YWwgPT0gMCkKLQkJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtZXNzYWdlOworCQlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfU1VTUEVORDsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9wY2lfc3VzcGVuZCk7CkBAIC0zMzYsMjAgKzM0MSw5IEBACiAJCQkJZGV2LT5jdXJyZW50X3N0YXRlKTsKIAkJfQogI2VuZGlmCi0JCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZSAoZGV2LCBkZXYtPmN1cnJlbnRfc3RhdGUsIDApOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLAotCQkJCSJjYW4ndCBlbmFibGVfd2FrZSB0byAlZCwgJWQhXG4iLAotCQkJCWRldi0+Y3VycmVudF9zdGF0ZSwgcmV0dmFsKTsKLQkJCXJldHVybiByZXR2YWw7Ci0JCX0KLQkJcmV0dmFsID0gcGNpX2VuYWJsZV93YWtlIChkZXYsIFBDSV9EM2NvbGQsIDApOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLAotCQkJCSJjYW4ndCBlbmFibGVfd2FrZSB0byAlZCwgJWQhXG4iLAotCQkJCVBDSV9EM2NvbGQsIHJldHZhbCk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9CisJCS8qIHllcywgaWdub3JlIHRoZXNlIHJlc3VsdHMgdG9vLi4uICovCisJCSh2b2lkKSBwY2lfZW5hYmxlX3dha2UgKGRldiwgZGV2LT5jdXJyZW50X3N0YXRlLCAwKTsKKwkJKHZvaWQpIHBjaV9lbmFibGVfd2FrZSAoZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9IGVsc2UgewogCQkvKiBTYW1lIGJhc2ljIGNhc2VzOiBjbGVhbiAocG93ZXJlZC9ub3QpLCBkaXJ0eSAqLwogCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiUENJIGxlZ2FjeSByZXN1bWVcbiIpOwpAQCAtMzcxLDE3ICszNjUsMTcgQEAKIAogCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAotCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SRVNVTUlORzsKIAloY2QtPnNhd19pcnEgPSAwOwogCi0JcmV0dmFsID0gaGNkLT5kcml2ZXItPnJlc3VtZSAoaGNkKTsKLQlpZiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKSB7Ci0JCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKLQkJCQkicmVzdW1lIGZhaWwsIHJldHZhbCAlZFxuIiwgcmV0dmFsKTsKLQkJdXNiX2hjX2RpZWQgKGhjZCk7CisJaWYgKGhjZC0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnJlc3VtZShoY2QpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyIChoY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkiUENJIHBvc3QtcmVzdW1lIGVycm9yICVkIVxuIiwgcmV0dmFsKTsKKwkJCXVzYl9oY19kaWVkIChoY2QpOworCQl9CiAJfQogCi0JcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9wY2lfcmVzdW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDE0YzQ3YTEuLjZjN2NhNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJMHgwOSwJICAgIC8qICBfX3U4ICBiRGV2aWNlQ2xhc3M7IEhVQl9DTEFTU0NPREUgKi8KIAkweDAwLAkgICAgLyogIF9fdTggIGJEZXZpY2VTdWJDbGFzczsgKi8KIAkweDAxLCAgICAgICAvKiAgX191OCAgYkRldmljZVByb3RvY29sOyBbIHVzYiAyLjAgc2luZ2xlIFRUIF0qLwotCTB4MDgsICAgICAgIC8qICBfX3U4ICBiTWF4UGFja2V0U2l6ZTA7IDggQnl0ZXMgKi8KKwkweDQwLCAgICAgICAvKiAgX191OCAgYk1heFBhY2tldFNpemUwOyA2NCBCeXRlcyAqLwogCiAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFZlbmRvcjsgKi8KICAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkweDA5LAkgICAgLyogIF9fdTggIGJEZXZpY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLwogCTB4MDAsCSAgICAvKiAgX191OCAgYkRldmljZVN1YkNsYXNzOyAqLwogCTB4MDAsICAgICAgIC8qICBfX3U4ICBiRGV2aWNlUHJvdG9jb2w7IFsgbG93L2Z1bGwgc3BlZWRzIG9ubHkgXSAqLwotCTB4MDgsICAgICAgIC8qICBfX3U4ICBiTWF4UGFja2V0U2l6ZTA7IDggQnl0ZXMgKi8KKwkweDQwLCAgICAgICAvKiAgX191OCAgYk1heFBhY2tldFNpemUwOyA2NCBCeXRlcyAqLwogCiAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFZlbmRvcjsgKi8KICAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCkBAIC00NTgsMjIgKzQ1OCwxOCBAQAogCiAJZGVmYXVsdDoKIAkJLyogbm9uLWdlbmVyaWMgcmVxdWVzdCAqLwotCQlpZiAoSENfSVNfU1VTUEVOREVEIChoY2QtPnN0YXRlKSkKLQkJCXN0YXR1cyA9IC1FQUdBSU47Ci0JCWVsc2UgewotCQkJc3dpdGNoICh0eXBlUmVxKSB7Ci0JCQljYXNlIEdldEh1YlN0YXR1czoKLQkJCWNhc2UgR2V0UG9ydFN0YXR1czoKLQkJCQlsZW4gPSA0OwotCQkJCWJyZWFrOwotCQkJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgotCQkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzdGF0dXMgPSBoY2QtPmRyaXZlci0+aHViX2NvbnRyb2wgKGhjZCwKLQkJCQl0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwKLQkJCQl0YnVmLCB3TGVuZ3RoKTsKKwkJc3dpdGNoICh0eXBlUmVxKSB7CisJCWNhc2UgR2V0SHViU3RhdHVzOgorCQljYXNlIEdldFBvcnRTdGF0dXM6CisJCQlsZW4gPSA0OworCQkJYnJlYWs7CisJCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcik7CisJCQlicmVhazsKIAkJfQorCQlzdGF0dXMgPSBoY2QtPmRyaXZlci0+aHViX2NvbnRyb2wgKGhjZCwKKwkJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LAorCQkJdGJ1Ziwgd0xlbmd0aCk7CiAJCWJyZWFrOwogZXJyb3I6CiAJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KQEAgLTQ4Nyw3ICs0ODMsNyBAQAogCQkJCSJDVFJMOiBUeXBlUmVxPTB4JXggdmFsPTB4JXggIgogCQkJCSJpZHg9MHgleCBsZW49JWQgPT0+ICVkXG4iLAogCQkJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LAotCQkJCXdMZW5ndGgsIHVyYi0+c3RhdHVzKTsKKwkJCQl3TGVuZ3RoLCBzdGF0dXMpOwogCQl9CiAJfQogCWlmIChsZW4pIHsKQEAgLTc0OCwxMCArNzQ0LDkgQEAKIHsKIAlzdHJ1Y3QgdXNiX2J1cyAqYnVzOwogCi0JYnVzID0ga21hbGxvYyAoc2l6ZW9mICpidXMsIEdGUF9LRVJORUwpOworCWJ1cyA9IGt6YWxsb2MgKHNpemVvZiAqYnVzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1cykKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KGJ1cywgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfYnVzKSk7CiAJdXNiX2J1c19pbml0IChidXMpOwogCWJ1cy0+b3AgPSBvcDsKIAlyZXR1cm4gYnVzOwpAQCAtNzk2LDggKzc5MSw3IEBACiAJbGlzdF9hZGQgKCZidXMtPmJ1c19saXN0LCAmdXNiX2J1c19saXN0KTsKIAl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKIAotCXVzYmZzX2FkZF9idXMgKGJ1cyk7Ci0JdXNibW9uX25vdGlmeV9idXNfYWRkIChidXMpOworCXVzYl9ub3RpZnlfYWRkX2J1cyhidXMpOwogCiAJZGV2X2luZm8gKGJ1cy0+Y29udHJvbGxlciwgIm5ldyBVU0IgYnVzIHJlZ2lzdGVyZWQsIGFzc2lnbmVkIGJ1cyBudW1iZXIgJWRcbiIsIGJ1cy0+YnVzbnVtKTsKIAlyZXR1cm4gMDsKQEAgLTgyNCw4ICs4MTgsNyBAQAogCWxpc3RfZGVsICgmYnVzLT5idXNfbGlzdCk7CiAJdXAgKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAKLQl1c2Jtb25fbm90aWZ5X2J1c19yZW1vdmUgKGJ1cyk7Ci0JdXNiZnNfcmVtb3ZlX2J1cyAoYnVzKTsKKwl1c2Jfbm90aWZ5X3JlbW92ZV9idXMoYnVzKTsKIAogCWNsZWFyX2JpdCAoYnVzLT5idXNudW0sIGJ1c21hcC5idXNtYXApOwogCkBAIC0xMTQzLDEwICsxMTM2LDIwIEBACiAJZWxzZSBzd2l0Y2ggKGhjZC0+c3RhdGUpIHsKIAljYXNlIEhDX1NUQVRFX1JVTk5JTkc6CiAJY2FzZSBIQ19TVEFURV9SRVNVTUlORzoKK2RvaXQ6CiAJCXVzYl9nZXRfZGV2ICh1cmItPmRldik7CiAJCWxpc3RfYWRkX3RhaWwgKCZ1cmItPnVyYl9saXN0LCAmZXAtPnVyYl9saXN0KTsKIAkJc3RhdHVzID0gMDsKIAkJYnJlYWs7CisJY2FzZSBIQ19TVEFURV9TVVNQRU5ERUQ6CisJCS8qIEhDIHVwc3RyZWFtIGxpbmtzIChyZWdpc3RlciBhY2Nlc3MsIHdha2V1cCBzaWduYWxpbmcpIGNhbiB3b3JrCisJCSAqIGV2ZW4gd2hlbiB0aGUgZG93bnN0cmVhbSBsaW5rcyAoYW5kIERNQSBldGMpIGFyZSBxdWllc2NlZDsgbGV0CisJCSAqIHVzYmNvcmUgdGFsayB0byB0aGUgcm9vdCBodWIuCisJCSAqLworCQlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OCisJCQkJJiYgdXJiLT5kZXYtPnBhcmVudCA9PSBOVUxMKQorCQkJZ290byBkb2l0OworCQkvKiBGQUxMIFRIUk9VR0ggKi8KIAlkZWZhdWx0OgogCQlzdGF0dXMgPSAtRVNIVVRET1dOOwogCQlicmVhazsKQEAgLTEyOTQsMTIgKzEyOTcsNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogcnVubmluZyB+PSBoYyB1bmxpbmsgaGFuZHNoYWtlIHdvcmtzIChpcnEsIHRpbWVyLCBldGMpCi0JICogaGFsdGVkIH49IG5vIHVubGluayBoYW5kc2hha2UgaXMgbmVlZGVkCi0JICogc3VzcGVuZGVkLCByZXN1bWluZyA9PSBzaG91bGQgbmV2ZXIgaGFwcGVuCi0JICovCi0JV0FSTl9PTiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpICYmIGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCk7Ci0KIAkvKiBpbnNpc3QgdGhlIHVyYiBpcyBzdGlsbCBxdWV1ZWQgKi8KIAlsaXN0X2Zvcl9lYWNoKHRtcCwgJmVwLT51cmJfbGlzdCkgewogCQlpZiAodG1wID09ICZ1cmItPnVyYl9saXN0KQpAQCAtMTQzMSwyOCArMTQyOCw5MiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisjaWZkZWYJQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgaGNkX2h1Yl9zdXNwZW5kIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoraW50IGhjZF9idXNfc3VzcGVuZCAoc3RydWN0IHVzYl9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlzdGF0dXM7CiAKIAloY2QgPSBjb250YWluZXJfb2YgKGJ1cywgc3RydWN0IHVzYl9oY2QsIHNlbGYpOwotCWlmIChoY2QtPmRyaXZlci0+aHViX3N1c3BlbmQpCi0JCXJldHVybiBoY2QtPmRyaXZlci0+aHViX3N1c3BlbmQgKGhjZCk7Ci0JcmV0dXJuIDA7CisJaWYgKCFoY2QtPmRyaXZlci0+YnVzX3N1c3BlbmQpCisJCXJldHVybiAtRU5PRU5UOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9RVUlFU0NJTkc7CisJc3RhdHVzID0gaGNkLT5kcml2ZXItPmJ1c19zdXNwZW5kIChoY2QpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKwllbHNlCisJCWRldl9kYmcoJmJ1cy0+cm9vdF9odWItPmRldiwgIiVzIGZhaWwsIGVyciAlZFxuIiwKKwkJCQkic3VzcGVuZCIsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBoY2RfaHViX3Jlc3VtZSAoc3RydWN0IHVzYl9idXMgKmJ1cykKK2ludCBoY2RfYnVzX3Jlc3VtZSAoc3RydWN0IHVzYl9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlzdGF0dXM7CiAKIAloY2QgPSBjb250YWluZXJfb2YgKGJ1cywgc3RydWN0IHVzYl9oY2QsIHNlbGYpOwotCWlmIChoY2QtPmRyaXZlci0+aHViX3Jlc3VtZSkKLQkJcmV0dXJuIGhjZC0+ZHJpdmVyLT5odWJfcmVzdW1lIChoY2QpOwotCXJldHVybiAwOworCWlmICghaGNkLT5kcml2ZXItPmJ1c19yZXN1bWUpCisJCXJldHVybiAtRU5PRU5UOworCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybiAwOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SRVNVTUlORzsKKwlzdGF0dXMgPSBoY2QtPmRyaXZlci0+YnVzX3Jlc3VtZSAoaGNkKTsKKwlpZiAoc3RhdHVzID09IDApCisJCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCWVsc2UgeworCQlkZXZfZGJnKCZidXMtPnJvb3RfaHViLT5kZXYsICIlcyBmYWlsLCBlcnIgJWRcbiIsCisJCQkJInJlc3VtZSIsIHN0YXR1cyk7CisJCXVzYl9oY19kaWVkKGhjZCk7CisJfQorCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qCisgKiB1c2JfaGNkX3N1c3BlbmRfcm9vdF9odWIgLSBIQ0QgYXV0b3N1c3BlbmRzIGRvd25zdHJlYW0gcG9ydHMKKyAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1YgorICoKKyAqIFRoaXMgY2FsbCBhcnJhbmdlcyB0aGF0IHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKCkgaXMgc2FmZSB0byBjYWxsIGxhdGVyOworICogdGhhdCB0aGUgSENEJ3Mgcm9vdCBodWIgcG9sbGluZyBpcyBkZWFjdGl2YXRlZDsgYW5kIHRoYXQgdGhlIHJvb3QncyBodWIKKyAqIGRyaXZlciBpcyBzdXNwZW5kZWQuICBIQ0RzIG1heSBjYWxsIHRoaXMgdG8gYXV0b3N1c3BlbmQgd2hlbiB0aGVpciByb290CisgKiBodWIncyBkb3duc3RyZWFtIHBvcnRzIGFyZSBhbGwgaW5hY3RpdmU6ICB1bnBvd2VyZWQsIGRpc2Nvbm5lY3RlZCwKKyAqIGRpc2FibGVkLCBvciBzdXNwZW5kZWQuCisgKgorICogVGhlIEhDRCB3aWxsIGF1dG9yZXN1bWUgb24gZGV2aWNlIGNvbm5lY3QgY2hhbmdlIGRldGVjdGlvbiAodXNpbmcgU1JQCisgKiBvciBhIEQrL0QtIHB1bGx1cCkuICBUaGUgSENEIGFsc28gYXV0b3Jlc3VtZXMgb24gcmVtb3RlIHdha2V1cCBzaWduYWxpbmcKKyAqIGZyb20gYW55IHBvcnRzIHRoYXQgYXJlIHN1c3BlbmRlZCAoaWYgdGhhdCBpcyBlbmFibGVkKS4gIEluIG1vc3QgY2FzZXMsCisgKiBvdmVyY3VycmVudCBzaWduYWxpbmcgKG9uIHBvd2VyZWQgcG9ydHMpIHdpbGwgYWxzbyBzdGFydCBhdXRvcmVzdW1lLgorICoKKyAqIEFsd2F5cyBjYWxsZWQgd2l0aCBJUlFzIGJsb2NrZWQuCisgKi8KK3ZvaWQgdXNiX2hjZF9zdXNwZW5kX3Jvb3RfaHViIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1cmIJKnVyYjsKKworCXNwaW5fbG9jayAoJmhjZF9yb290X2h1Yl9sb2NrKTsKKwl1c2Jfc3VzcGVuZF9yb290X2h1YiAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKworCS8qIGZvcmNlIHN0YXR1cyB1cmIgdG8gY29tcGxldGUvdW5saW5rIHdoaWxlIHN1c3BlbmRlZCAqLworCWlmIChoY2QtPnN0YXR1c191cmIpIHsKKwkJdXJiID0gaGNkLT5zdGF0dXNfdXJiOworCQl1cmItPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQl1cmItPmhjcHJpdiA9IE5VTEw7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwkJZGVsX3RpbWVyICgmaGNkLT5yaF90aW1lcik7CisJCWhjZC0+cG9sbF9wZW5kaW5nID0gMDsKKwkJaGNkLT5zdGF0dXNfdXJiID0gTlVMTDsKKwl9IGVsc2UKKwkJdXJiID0gTlVMTDsKKwlzcGluX3VubG9jayAoJmhjZF9yb290X2h1Yl9sb2NrKTsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCisJaWYgKHVyYikKKwkJdXNiX2hjZF9naXZlYmFja191cmIgKGhjZCwgdXJiLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9oY2Rfc3VzcGVuZF9yb290X2h1Yik7CisKIC8qKgogICogdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIgLSBjYWxsZWQgYnkgSENEIHRvIHJlc3VtZSBpdHMgcm9vdCBodWIgCiAgKiBAaGNkOiBob3N0IGNvbnRyb2xsZXIgZm9yIHRoaXMgcm9vdCBodWIKQEAgLTE0NjAsNyArMTUyMSw3IEBACiAgKiBUaGUgVVNCIGhvc3QgY29udHJvbGxlciBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gaXRzIHJvb3QgaHViIGlzCiAgKiBzdXNwZW5kZWQgKHdpdGggdGhlIHJlbW90ZSB3YWtldXAgZmVhdHVyZSBlbmFibGVkKSBhbmQgYSByZW1vdGUKICAqIHdha2V1cCByZXF1ZXN0IGlzIHJlY2VpdmVkLiAgSXQgcXVldWVzIGEgcmVxdWVzdCBmb3Iga2h1YmQgdG8KLSAqIHJlc3VtZSB0aGUgcm9vdCBodWIuCisgKiByZXN1bWUgdGhlIHJvb3QgaHViICh0aGF0IGlzLCBtYW5hZ2UgaXRzIGRvd25zdHJlYW0gcG9ydHMgYWdhaW4pLgogICovCiB2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewpAQCAtMTQ3MSwxNCArMTUzMiwxMCBAQAogCQl1c2JfcmVzdW1lX3Jvb3RfaHViIChoY2QtPnNlbGYucm9vdF9odWIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwogfQotCi0jZWxzZQotdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsKLX0KLSNlbmRpZgogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZF9yZXN1bWVfcm9vdF9odWIpOwogCisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmCUNPTkZJR19VU0JfT1RHCkBAIC0xNTMwLDEwICsxNTg3LDYgQEAKIAkuYnVmZmVyX2FsbG9jID0JCWhjZF9idWZmZXJfYWxsb2MsCiAJLmJ1ZmZlcl9mcmVlID0JCWhjZF9idWZmZXJfZnJlZSwKIAkuZGlzYWJsZSA9CQloY2RfZW5kcG9pbnRfZGlzYWJsZSwKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQkuaHViX3N1c3BlbmQgPQkJaGNkX2h1Yl9zdXNwZW5kLAotCS5odWJfcmVzdW1lID0JCWhjZF9odWJfcmVzdW1lLAotI2VuZGlmCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggMWYxZWQ2Mi4uMjRhNjJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC0xNTQsMTAgKzE1NCw2IEBACiAKIAl2b2lkICgqZGlzYWJsZSkoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCiAJCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKTsKLQotCS8qIGdsb2JhbCBzdXNwZW5kL3Jlc3VtZSBvZiBidXMgKi8KLQlpbnQgKCpodWJfc3VzcGVuZCkoc3RydWN0IHVzYl9idXMgKik7Ci0JaW50ICgqaHViX3Jlc3VtZSkoc3RydWN0IHVzYl9idXMgKik7CiB9OwogCiAvKiBlYWNoIGRyaXZlciBwcm92aWRlcyBvbmUgb2YgdGhlc2UsIGFuZCBoYXJkd2FyZSBpbml0IHN1cHBvcnQgKi8KQEAgLTE4MiwxMiArMTc4LDEyIEBACiAJaW50CSgqc3RhcnQpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKIAogCS8qIE5PVEU6ICB0aGVzZSBzdXNwZW5kL3Jlc3VtZSBjYWxscyByZWxhdGUgdG8gdGhlIEhDIGFzCi0JICogYSB3aG9sZSwgbm90IGp1c3QgdGhlIHJvb3QgaHViOyB0aGV5J3JlIGZvciBidXMgZ2x1ZS4KKwkgKiBhIHdob2xlLCBub3QganVzdCB0aGUgcm9vdCBodWI7IHRoZXkncmUgZm9yIFBDSSBidXMgZ2x1ZS4KIAkgKi8KLQkvKiBjYWxsZWQgYWZ0ZXIgYWxsIGRldmljZXMgd2VyZSBzdXNwZW5kZWQgKi8KKwkvKiBjYWxsZWQgYWZ0ZXIgc3VzcGVuZGluZyB0aGUgaHViLCBiZWZvcmUgZW50ZXJpbmcgRDMgZXRjICovCiAJaW50CSgqc3VzcGVuZCkgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKIAotCS8qIGNhbGxlZCBiZWZvcmUgYW55IGRldmljZXMgZ2V0IHJlc3VtZWQgKi8KKwkvKiBjYWxsZWQgYWZ0ZXIgZW50ZXJpbmcgRDAgKGV0YyksIGJlZm9yZSByZXN1bWluZyB0aGUgaHViICovCiAJaW50CSgqcmVzdW1lKSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiAKIAkvKiBjbGVhbmx5IG1ha2UgSENEIHN0b3Agd3JpdGluZyBtZW1vcnkgYW5kIGRvaW5nIEkvTyAqLwpAQCAtMjEyLDggKzIwOCw4IEBACiAJaW50CQkoKmh1Yl9jb250cm9sKSAoc3RydWN0IHVzYl9oY2QgKmhjZCwKIAkJCQl1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwgdTE2IHdJbmRleCwKIAkJCQljaGFyICpidWYsIHUxNiB3TGVuZ3RoKTsKLQlpbnQJCSgqaHViX3N1c3BlbmQpKHN0cnVjdCB1c2JfaGNkICopOwotCWludAkJKCpodWJfcmVzdW1lKShzdHJ1Y3QgdXNiX2hjZCAqKTsKKwlpbnQJCSgqYnVzX3N1c3BlbmQpKHN0cnVjdCB1c2JfaGNkICopOworCWludAkJKCpidXNfcmVzdW1lKShzdHJ1Y3QgdXNiX2hjZCAqKTsKIAlpbnQJCSgqc3RhcnRfcG9ydF9yZXNldCkoc3RydWN0IHVzYl9oY2QgKiwgdW5zaWduZWQgcG9ydF9udW0pOwogCXZvaWQJCSgqaHViX2lycV9lbmFibGUpKHN0cnVjdCB1c2JfaGNkICopOwogCQkvKiBOZWVkZWQgb25seSBpZiBwb3J0LWNoYW5nZSBJUlFzIGFyZSBsZXZlbC10cmlnZ2VyZWQgKi8KQEAgLTM1NSw4ICszNTEsNiBAQAogCiBleHRlcm4gc3RydWN0IHVzYl9idXMgKnVzYl9hbGxvY19idXMgKHN0cnVjdCB1c2Jfb3BlcmF0aW9ucyAqKTsKIAotZXh0ZXJuIHZvaWQgdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIgKHN0cnVjdCB1c2JfaGNkICpoY2QpOwotCiBleHRlcm4gdm9pZCB1c2Jfc2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJZW51bSB1c2JfZGV2aWNlX3N0YXRlIG5ld19zdGF0ZSk7CiAKQEAgLTM3OCw2ICszNzIsMzMgQEAKIAogI2RlZmluZSB1c2JfZW5kcG9pbnRfb3V0KGVwX2RpcikJKCEoKGVwX2RpcikgJiBVU0JfRElSX0lOKSkKIAorI2lmZGVmIENPTkZJR19QTQorZXh0ZXJuIHZvaWQgdXNiX2hjZF9zdXNwZW5kX3Jvb3RfaHViIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKK2V4dGVybiB2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKK2V4dGVybiBpbnQgaGNkX2J1c19zdXNwZW5kIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKK2V4dGVybiBpbnQgaGNkX2J1c19yZXN1bWUgKHN0cnVjdCB1c2JfYnVzICpidXMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfaGNkX3N1c3BlbmRfcm9vdF9odWIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGNkX2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhjZF9idXNfcmVzdW1lIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiAvKgogICogVVNCIGRldmljZSBmcyBzdHVmZgogICovCkBAIC0zODgsMjMgKzQwOSwxMyBAQAogICogdGhlc2UgYXJlIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBVU0IgY29yZS9odWIgdGhyZWFkCiAgKiB3aXRoIHRoZSBrZXJuZWwgbG9jayBoZWxkCiAgKi8KLWV4dGVybiB2b2lkIHVzYmZzX2FkZF9idXMoc3RydWN0IHVzYl9idXMgKmJ1cyk7Ci1leHRlcm4gdm9pZCB1c2Jmc19yZW1vdmVfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpOwotZXh0ZXJuIHZvaWQgdXNiZnNfYWRkX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIHVzYmZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCB1c2Jmc191cGRhdGVfc3BlY2lhbCAodm9pZCk7Ci0KIGV4dGVybiBpbnQgdXNiZnNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHVzYmZzX2NsZWFudXAodm9pZCk7CiAKICNlbHNlIC8qIENPTkZJR19VU0JfREVWSUNFRlMgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX2FkZF9idXMoc3RydWN0IHVzYl9idXMgKmJ1cykge30KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc19yZW1vdmVfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfYWRkX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KSB7fQotc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc191cGRhdGVfc3BlY2lhbCAodm9pZCkge30KLQogc3RhdGljIGlubGluZSBpbnQgdXNiZnNfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfY2xlYW51cCh2b2lkKSB7IH0KIApAQCAtNDE5LDggKzQzMCw2IEBACiAJdm9pZCAoKnVyYl9zdWJtaXRfZXJyb3IpKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGVycik7CiAJdm9pZCAoKnVyYl9jb21wbGV0ZSkoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKTsKIAkvKiB2b2lkICgqdXJiX3VubGluaykoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKTsgKi8KLQl2b2lkICgqYnVzX2FkZCkoc3RydWN0IHVzYl9idXMgKmJ1cyk7Ci0Jdm9pZCAoKmJ1c19yZW1vdmUpKHN0cnVjdCB1c2JfYnVzICpidXMpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm1vbl9vcHM7CkBAIC00NDMsMTggKzQ1Miw2IEBACiAJaWYgKGJ1cy0+bW9uaXRvcmVkKQogCQkoKm1vbl9vcHMtPnVyYl9jb21wbGV0ZSkoYnVzLCB1cmIpOwogfQotIAotc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX2FkZChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQotewotCWlmIChtb25fb3BzKQotCQkoKm1vbl9vcHMtPmJ1c19hZGQpKGJ1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fbm90aWZ5X2J1c19yZW1vdmUoc3RydWN0IHVzYl9idXMgKmJ1cykKLXsKLQlpZiAobW9uX29wcykKLQkJKCptb25fb3BzLT5idXNfcmVtb3ZlKShidXMpOwotfQogCiBpbnQgdXNiX21vbl9yZWdpc3RlcihzdHJ1Y3QgdXNiX21vbl9vcGVyYXRpb25zICpvcHMpOwogdm9pZCB1c2JfbW9uX2RlcmVnaXN0ZXIodm9pZCk7CkBAIC00NjUsOCArNDYyLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX3N1Ym1pdF9lcnJvcihzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIsCiAgICAgaW50IGVycm9yKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl91cmJfY29tcGxldGUoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX2FkZChzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX3JlbW92ZShzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQogCiAjZW5kaWYgLyogQ09ORklHX1VTQl9NT04gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggYzNlMjAyNC4uMjU2ZDlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC00MzYsOSArNDM2LDEwIEBACiB7CiAJaW50IHBvcnQxOwogCXVuc2lnbmVkIHBnb29kX2RlbGF5ID0gaHViLT5kZXNjcmlwdG9yLT5iUHdyT24yUHdyR29vZCAqIDI7CisJdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3MgPSBsZTE2X3RvX2NwdShodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MpOwogCiAJLyogaWYgaHViIHN1cHBvcnRzIHBvd2VyIHN3aXRjaGluZywgZW5hYmxlIHBvd2VyIG9uIGVhY2ggcG9ydCAqLwotCWlmICgoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfTFBTTSkgPCAyKSB7CisJaWYgKCh3SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfTFBTTSkgPCAyKSB7CiAJCWRldl9kYmcoaHViLT5pbnRmZGV2LCAiZW5hYmxpbmcgcG93ZXIgb24gYWxsIHBvcnRzXG4iKTsKIAkJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOyBwb3J0MSsrKQogCQkJc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLApAQCAtNDQ5LDEwICs0NTAsMTggQEAKIAltc2xlZXAobWF4KHBnb29kX2RlbGF5LCAodW5zaWduZWQpIDEwMCkpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19odWJfcXVpZXNjZShzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCS8qIChub25ibG9ja2luZykga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgd29uJ3QgcmUtdHJpZ2dlciAqLworCWh1Yi0+cXVpZXNjaW5nID0gMTsKKwlodWItPmFjdGl2YXRpbmcgPSAwOworCWh1Yi0+cmVzdW1lX3Jvb3RfaHViID0gMDsKK30KKwogc3RhdGljIHZvaWQgaHViX3F1aWVzY2Uoc3RydWN0IHVzYl9odWIgKmh1YikKIHsKLQkvKiBzdG9wIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5ICovCi0JaHViLT5xdWllc2NpbmcgPSAxOworCS8qIChibG9ja2luZykgc3RvcCBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSAqLworCV9faHViX3F1aWVzY2UoaHViKTsKIAl1c2Jfa2lsbF91cmIoaHViLT51cmIpOwogCWlmIChodWItPmhhc19pbmRpY2F0b3JzKQogCQljYW5jZWxfZGVsYXllZF93b3JrKCZodWItPmxlZHMpOwpAQCAtNDY2LDYgKzQ3NSw3IEBACiAKIAlodWItPnF1aWVzY2luZyA9IDA7CiAJaHViLT5hY3RpdmF0aW5nID0gMTsKKwlodWItPnJlc3VtZV9yb290X2h1YiA9IDA7CiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoaHViLT51cmIsIEdGUF9OT0lPKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZGV2X2VycihodWItPmludGZkZXYsICJhY3RpdmF0ZSAtLT4gJWRcbiIsIHN0YXR1cyk7CkBAIC01MTYsNiArNTI2LDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlzdHJ1Y3QgZGV2aWNlICpodWJfZGV2ID0gaHViLT5pbnRmZGV2OwogCXUxNiBodWJzdGF0dXMsIGh1YmNoYW5nZTsKKwl1MTYgd0h1YkNoYXJhY3RlcmlzdGljczsKIAl1bnNpZ25lZCBpbnQgcGlwZTsKIAlpbnQgbWF4cCwgcmV0OwogCWNoYXIgKm1lc3NhZ2U7CkBAIC01NjEsOSArNTcyLDkgQEAKIAlkZXZfaW5mbyAoaHViX2RldiwgIiVkIHBvcnQlcyBkZXRlY3RlZFxuIiwgaGRldi0+bWF4Y2hpbGQsCiAJCShoZGV2LT5tYXhjaGlsZCA9PSAxKSA/ICIiIDogInMiKTsKIAotCWxlMTZfdG9fY3B1cygmaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKKwl3SHViQ2hhcmFjdGVyaXN0aWNzID0gbGUxNl90b19jcHUoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKIAotCWlmIChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9DT01QT1VORCkgeworCWlmICh3SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfQ09NUE9VTkQpIHsKIAkJaW50CWk7CiAJCWNoYXIJcG9ydHN0ciBbVVNCX01BWENISUxEUkVOICsgMV07CiAKQEAgLTU3Niw3ICs1ODcsNyBAQAogCX0gZWxzZQogCQlkZXZfZGJnKGh1Yl9kZXYsICJzdGFuZGFsb25lIGh1YlxuIik7CiAKLQlzd2l0Y2ggKGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX0xQU00pIHsKKwlzd2l0Y2ggKHdIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9MUFNNKSB7CiAJCWNhc2UgMHgwMDoKIAkJCWRldl9kYmcoaHViX2RldiwgImdhbmdlZCBwb3dlciBzd2l0Y2hpbmdcbiIpOwogCQkJYnJlYWs7CkBAIC01ODksNyArNjAwLDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCXN3aXRjaCAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfT0NQTSkgeworCXN3aXRjaCAod0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX09DUE0pIHsKIAkJY2FzZSAweDAwOgogCQkJZGV2X2RiZyhodWJfZGV2LCAiZ2xvYmFsIG92ZXItY3VycmVudCBwcm90ZWN0aW9uXG4iKTsKIAkJCWJyZWFrOwpAQCAtNjI5LDcgKzY0MCw3IEBACiAJfQogCiAJLyogTm90ZSA4IEZTIGJpdCB0aW1lcyA9PSAoOCBiaXRzIC8gMTIwMDAwMDAgYnBzKSB+PSA2NjZucyAqLwotCXN3aXRjaCAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfVFRUVCkgeworCXN3aXRjaCAod0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX1RUVFQpIHsKIAkJY2FzZSBIVUJfVFRUVF84X0JJVFM6CiAJCQlpZiAoaGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wgIT0gMCkgewogCQkJCWh1Yi0+dHQudGhpbmtfdGltZSA9IDY2NjsKQEAgLTY1OSw3ICs2NzAsNyBAQAogCX0KIAogCS8qIHByb2JlKCkgemVyb2VzIGh1Yi0+aW5kaWNhdG9yW10gKi8KLQlpZiAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfUE9SVElORCkgeworCWlmICh3SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfUE9SVElORCkgewogCQlodWItPmhhc19pbmRpY2F0b3JzID0gMTsKIAkJZGV2X2RiZyhodWJfZGV2LCAiUG9ydCBpbmRpY2F0b3JzIGFyZSBzdXBwb3J0ZWRcbiIpOwogCX0KQEAgLTcwNCw3ICs3MTUsNyBAQAogCQkJKGh1YnN0YXR1cyAmIEhVQl9TVEFUVVNfTE9DQUxfUE9XRVIpCiAJCQk/ICJsb3N0IChpbmFjdGl2ZSkiIDogImdvb2QiKTsKIAotCWlmICgoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfT0NQTSkgPT0gMCkKKwlpZiAoKHdIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9PQ1BNKSA9PSAwKQogCQlkZXZfZGJnKGh1Yl9kZXYsICIlc292ZXItY3VycmVudCBjb25kaXRpb24gZXhpc3RzXG4iLAogCQkJKGh1YnN0YXR1cyAmIEhVQl9TVEFUVVNfT1ZFUkNVUlJFTlQpID8gIiIgOiAibm8gIik7CiAKQEAgLTg1NCwxNCArODY1LDEyIEBACiAJLyogV2UgZm91bmQgYSBodWIgKi8KIAlkZXZfaW5mbyAoJmludGYtPmRldiwgIlVTQiBodWIgZm91bmRcbiIpOwogCi0JaHViID0ga21hbGxvYyhzaXplb2YoKmh1YiksIEdGUF9LRVJORUwpOworCWh1YiA9IGt6YWxsb2Moc2l6ZW9mKCpodWIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh1YikgewogCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiY291bGRuJ3Qga21hbGxvYyBodWIgc3RydWN0XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KGh1YiwgMCwgc2l6ZW9mKCpodWIpKTsKLQogCUlOSVRfTElTVF9IRUFEKCZodWItPmV2ZW50X2xpc3QpOwogCWh1Yi0+aW50ZmRldiA9ICZpbnRmLT5kZXY7CiAJaHViLT5oZGV2ID0gaGRldjsKQEAgLTExMTcsMTQgKzExMjYsMTQgQEAKIAkgKi8KIAl1c2JfZGlzYWJsZV9kZXZpY2UodWRldiwgMCk7CiAKKwl1c2Jfbm90aWZ5X3JlbW92ZV9kZXZpY2UodWRldik7CisKIAkvKiBGcmVlIHRoZSBkZXZpY2UgbnVtYmVyLCByZW1vdmUgdGhlIC9wcm9jL2J1cy91c2IgZW50cnkgYW5kCiAJICogdGhlIHN5c2ZzIGF0dHJpYnV0ZXMsIGFuZCBkZWxldGUgdGhlIHBhcmVudCdzIGNoaWxkcmVuW10KIAkgKiAob3Igcm9vdF9odWIpIHBvaW50ZXIuCiAJICovCiAJZGV2X2RiZyAoJnVkZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAlyZWxlYXNlX2FkZHJlc3ModWRldik7Ci0JdXNiZnNfcmVtb3ZlX2RldmljZSh1ZGV2KTsKLQl1c2JkZXZfcmVtb3ZlKHVkZXYpOwogCXVzYl9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHVkZXYpOwogCiAJLyogQXZvaWQgcmFjZXMgd2l0aCByZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKCkgKi8KQEAgLTExOTUsMjEgKzEyMDQsNiBAQAoge30KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBnZXRfc3RyaW5nKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBjaGFyICoqc3RyaW5nLCBpbnQgaW5kZXgpCi17Ci0JY2hhciAqYnVmOwotCi0JaWYgKCFpbmRleCkKLQkJcmV0dXJuOwotCWJ1ZiA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuOwotCWlmICh1c2Jfc3RyaW5nKHVkZXYsIGluZGV4LCBidWYsIDI1NikgPiAwKQotCQkqc3RyaW5nID0gYnVmOwotCWVsc2UKLQkJa2ZyZWUoYnVmKTsKLX0KLQogCiAjaWZkZWYJQ09ORklHX1VTQl9PVEcKICNpbmNsdWRlICJvdGdfd2hpdGVsaXN0LmgiCkBAIC0xMjQ4LDkgKzEyNDIsMTAgQEAKIAl9CiAKIAkvKiByZWFkIHRoZSBzdGFuZGFyZCBzdHJpbmdzIGFuZCBjYWNoZSB0aGVtIGlmIHByZXNlbnQgKi8KLQlnZXRfc3RyaW5nKHVkZXYsICZ1ZGV2LT5wcm9kdWN0LCB1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0KTsKLQlnZXRfc3RyaW5nKHVkZXYsICZ1ZGV2LT5tYW51ZmFjdHVyZXIsIHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcik7Ci0JZ2V0X3N0cmluZyh1ZGV2LCAmdWRldi0+c2VyaWFsLCB1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIpOworCXVkZXYtPnByb2R1Y3QgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QpOworCXVkZXYtPm1hbnVmYWN0dXJlciA9IHVzYl9jYWNoZV9zdHJpbmcodWRldiwKKwkJCXVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcik7CisJdWRldi0+c2VyaWFsID0gdXNiX2NhY2hlX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIpOwogCiAJLyogVGVsbCB0aGUgd29ybGQhICovCiAJZGV2X2RiZygmdWRldi0+ZGV2LCAibmV3IGRldmljZSBzdHJpbmdzOiBNZnI9JWQsIFByb2R1Y3Q9JWQsICIKQEAgLTEzMjIsMTEgKzEzMTcsOSBAQAogCQkgKiAoSW5jbHVkZXMgSE5QIHRlc3QgZGV2aWNlLikKIAkJICovCiAJCWlmICh1ZGV2LT5idXMtPmJfaG5wX2VuYWJsZSB8fCB1ZGV2LT5idXMtPmlzX2JfaG9zdCkgewotCQkJc3RhdGljIGludCBfX3VzYl9zdXNwZW5kX2RldmljZSAoc3RydWN0IHVzYl9kZXZpY2UgKiwKLQkJCQkJCWludCBwb3J0MSwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLQkJCWVyciA9IF9fdXNiX3N1c3BlbmRfZGV2aWNlKHVkZXYsCi0JCQkJCXVkZXYtPmJ1cy0+b3RnX3BvcnQsCi0JCQkJCVBNU0dfU1VTUEVORCk7CisJCQlzdGF0aWMgaW50IF9fdXNiX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICosCisJCQkJCQlpbnQgcG9ydDEpOworCQkJZXJyID0gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwgdWRldi0+YnVzLT5vdGdfcG9ydCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJITlAgZmFpbCwgJWRcbiIsIGVycik7CiAJCX0KQEAgLTEzNjIsMTAgKzEzNTUsOCBAQAogCX0KIAogCS8qIFVTQiBkZXZpY2Ugc3RhdGUgPT0gY29uZmlndXJlZCAuLi4gdXNhYmxlICovCisJdXNiX25vdGlmeV9hZGRfZGV2aWNlKHVkZXYpOwogCi0JLyogYWRkIGEgL3Byb2MvYnVzL3VzYiBlbnRyeSAqLwotCXVzYmRldl9hZGQodWRldik7Ci0JdXNiZnNfYWRkX2RldmljZSh1ZGV2KTsKIAlyZXR1cm4gMDsKIAogZmFpbDoKQEAgLTE1MTYsNyArMTUwNyw3IEBACiAJLyogRklYTUUgbGV0IGNhbGxlciBhc2sgdG8gcG93ZXIgZG93biB0aGUgcG9ydDoKIAkgKiAgLSBzb21lIGRldmljZXMgd29uJ3QgZW51bWVyYXRlIHdpdGhvdXQgYSBWQlVTIHBvd2VyIGN5Y2xlCiAJICogIC0gU1JQIHNhdmVzIHBvd2VyIHRoYXQgd2F5Ci0JICogIC0gdXNiX3N1c3BlbmRfZGV2aWNlKGRldiwgUE1TR19TVVNQRU5EKQorCSAqICAtIC4uLiBuZXcgY2FsbCwgVEJEIC4uLgogCSAqIFRoYXQncyBlYXN5IGlmIHRoaXMgaHViIGNhbiBzd2l0Y2ggcG93ZXIgcGVyLXBvcnQsIGFuZAogCSAqIGtodWJkIHJlYWN0aXZhdGVzIHRoZSBwb3J0IGxhdGVyICh0aW1lciwgU1JQLCBldGMpLgogCSAqIFBvd2VyZG93biBtdXN0IGJlIG9wdGlvbmFsLCBiZWNhdXNlIG9mIHJlc2V0L0RGVS4KQEAgLTE1OTgsMTEgKzE1ODksMTQgQEAKICAqIE90aGVyIHRoYW4gcmUtaW5pdGlhbGl6aW5nIHRoZSBodWIgKHBsdWcvdW5wbHVnLCBleGNlcHQgZm9yIHJvb3QgaHVicyksCiAgKiBMaW51eCAoMi42KSBjdXJyZW50bHkgaGFzIE5PIG1lY2hhbmlzbXMgdG8gaW5pdGlhdGUgdGhhdDogIG5vIGtodWJkCiAgKiB0aW1lciwgbm8gU1JQLCBubyByZXF1ZXN0cyB0aHJvdWdoIHN5c2ZzLgorICoKKyAqIElmIENPTkZJR19VU0JfU1VTUEVORCBpc24ndCBlbmFibGVkLCBkZXZpY2VzIG9ubHkgcmVhbGx5IHN1c3BlbmQgd2hlbgorICogdGhlIHJvb3QgaHViIGZvciB0aGVpciBidXMgZ29lcyBpbnRvIGdsb2JhbCBzdXNwZW5kIC4uLiBzbyB3ZSBkb24ndAorICogKGZhbHNlbHkpIHVwZGF0ZSB0aGUgZGV2aWNlIHBvd2VyIHN0YXRlIHRvIHNheSBpdCBzdXNwZW5kZWQuCiAgKi8KLXN0YXRpYyBpbnQgX191c2Jfc3VzcGVuZF9kZXZpY2UgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEsCi0JCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgX191c2Jfc3VzcGVuZF9kZXZpY2UgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEpCiB7Ci0JaW50CXN0YXR1czsKKwlpbnQJc3RhdHVzID0gMDsKIAogCS8qIGNhbGxlciBvd25zIHRoZSB1ZGV2IGRldmljZSBsb2NrICovCiAJaWYgKHBvcnQxIDwgMCkKQEAgLTE2MTMsOTUgKzE2MDcsMzkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogc3VzcGVuZCBpbnRlcmZhY2UgZHJpdmVyczsgaWYgdGhpcyBpcyBhIGh1YiwgaXQKLQkgKiBzdXNwZW5kcyB0aGUgY2hpbGQgZGV2aWNlcwotCSAqLworCS8qIGFsbCBpbnRlcmZhY2VzIG11c3QgYWxyZWFkeSBiZSBzdXNwZW5kZWQgKi8KIAlpZiAodWRldi0+YWN0Y29uZmlnKSB7CiAJCWludAlpOwogCiAJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewogCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7Ci0JCQlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOwogCiAJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07Ci0JCQlpZiAoc3RhdGUuZXZlbnQgPD0gaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50KQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFpbnRmLT5kZXYuZHJpdmVyKQotCQkJCWNvbnRpbnVlOwotCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKLQotCQkJaWYgKGRyaXZlci0+c3VzcGVuZCkgewotCQkJCXN0YXR1cyA9IGRyaXZlci0+c3VzcGVuZChpbnRmLCBzdGF0ZSk7Ci0JCQkJaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBzdGF0ZS5ldmVudAotCQkJCQkJfHwgc3RhdHVzKQotCQkJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCi0JCQkJCQkic3VzcGVuZCAlZCBmYWlsLCBjb2RlICVkXG4iLAotCQkJCQkJc3RhdGUuZXZlbnQsIHN0YXR1cyk7Ci0JCQl9Ci0KLQkJCS8qIG9ubHkgZHJpdmVycyB3aXRoIHN1c3BlbmQoKSBjYW4gZXZlciByZXN1bWUoKTsKLQkJCSAqIGFuZCBhZnRlciBwb3dlciBsb3NzLCBldmVuIHRoZXkgd29uJ3QuCi0JCQkgKiBidXNfcmVzY2FuX2RldmljZXMoKSBjYW4gcmViaW5kIGRyaXZlcnMgbGF0ZXIuCi0JCQkgKgotCQkJICogRklYTUUgdGhlIFBNIGNvcmUgc2VsZi1kZWFkbG9ja3Mgd2hlbiB1bmJpbmRpbmcKLQkJCSAqIGRyaXZlcnMgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIC4uLiBldmVyeXRoaW5nIGdyYWJzCi0JCQkgKiBkcG1fc2VtIChub3QgYSBzcGlubG9jaywgdWdoKS4gIHdlIHdhbnQgdG8gdW5iaW5kLAotCQkJICogc2luY2Ugd2Uga25vdyBldmVyeSBkcml2ZXIncyBwcm9iZS9kaXNjb25uZWN0IHdvcmtzCi0JCQkgKiBldmVuIGZvciBkcml2ZXJzIHRoYXQgY2FuJ3Qgc3VzcGVuZC4KLQkJCSAqLwotCQkJaWYgKCFkcml2ZXItPnN1c3BlbmQgfHwgc3RhdGUuZXZlbnQgPiBQTV9FVkVOVF9GUkVFWkUpIHsKLSNpZiAxCi0JCQkJZGV2X3dhcm4oJmludGYtPmRldiwgInJlc3VtZSBpcyB1bnNhZmUhXG4iKTsKLSNlbHNlCi0JCQkJZG93bl93cml0ZSgmdXNiX2J1c190eXBlLnJ3c2VtKTsKLQkJCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJmludGYtPmRldik7Ci0JCQkJdXBfd3JpdGUoJnVzYl9idXNfdHlwZS5yd3NlbSk7Ci0jZW5kaWYKKwkJCWlmIChpc19hY3RpdmUoaW50ZikpIHsKKwkJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJueWV0IHN1c3BlbmRlZFxuIik7CisJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJfQogCX0KIAotCS8qCi0JICogRklYTUUgdGhpcyBuZWVkcyBwb3J0IHBvd2VyIG9mZiBjYWxsIHBhdGhzIHRvbywgdG8gaGVscCBmb3JjZQotCSAqIFVTQiBpbnRvIHRoZSAiZ2VuZXJpYyIgUE0gbW9kZWwuICBBdCBsZWFzdCBmb3IgZGV2aWNlcyBvbgotCSAqIHBvcnRzIHRoYXQgYXJlbid0IHVzaW5nIGdhbmdlZCBzd2l0Y2hpbmcgKHVzdWFsbHkgcm9vdCBodWJzKS4KLQkgKgotCSAqIE5PVEU6IFNSUC1jYXBhYmxlIGxpbmtzIHNob3VsZCBhZG9wdCBtb3JlIGFnZ3Jlc3NpdmUgcG93ZXJvZmYKLQkgKiBwb2xpY2llcyAod2hlbiBITlAgZG9lc24ndCBhcHBseSkgb25jZSB3ZSBoYXZlIG1lY2hhbmlzbXMgdG8KLQkgKiB0dXJuIHBvd2VyIGJhY2sgb24hICAoTGlrZWx5IG5vdCBiZWZvcmUgMi43Li4uKQorCS8qIHdlIG9ubHkgY2hhbmdlIGEgZGV2aWNlJ3MgdXBzdHJlYW0gVVNCIGxpbmsuCisJICogcm9vdCBodWJzIGhhdmUgbm8gdXBzdHJlYW0gVVNCIGxpbmsuCiAJICovCi0JaWYgKHN0YXRlLmV2ZW50ID4gUE1fRVZFTlRfRlJFRVpFKSB7Ci0JCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJubyBwb3dlcm9mZiB5ZXQsIHN1c3BlbmRpbmcgaW5zdGVhZFxuIik7Ci0JfQotCi0JLyogImdsb2JhbCBzdXNwZW5kIiBvZiB0aGUgSEMtdG8tVVNCIGludGVyZmFjZSAocm9vdCBodWIpLCBvcgotCSAqICJzZWxlY3RpdmUgc3VzcGVuZCIgb2YganVzdCBvbmUgaHViLWRldmljZSBsaW5rLgotCSAqLwotCWlmICghdWRldi0+cGFyZW50KSB7Ci0JCXN0cnVjdCB1c2JfYnVzCSpidXMgPSB1ZGV2LT5idXM7Ci0JCWlmIChidXMgJiYgYnVzLT5vcC0+aHViX3N1c3BlbmQpIHsKLQkJCXN0YXR1cyA9IGJ1cy0+b3AtPmh1Yl9zdXNwZW5kIChidXMpOwotCQkJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAidXNiIHN1c3BlbmRcbiIpOwotCQkJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsCi0JCQkJCQlVU0JfU1RBVEVfU1VTUEVOREVEKTsKLQkJCX0KLQkJfSBlbHNlCi0JCQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKLQl9IGVsc2UKKwlpZiAodWRldi0+cGFyZW50KQogCQlzdGF0dXMgPSBodWJfcG9ydF9zdXNwZW5kKGhkZXZfdG9faHViKHVkZXYtPnBhcmVudCksIHBvcnQxLAogCQkJCXVkZXYpOwogCiAJaWYgKHN0YXR1cyA9PSAwKQotCQl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwkJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qKgorI2VuZGlmCisKKy8qCiAgKiB1c2Jfc3VzcGVuZF9kZXZpY2UgLSBzdXNwZW5kIGEgdXNiIGRldmljZQogICogQHVkZXY6IGRldmljZSB0aGF0J3Mgbm8gbG9uZ2VyIGluIGFjdGl2ZSB1c2UKLSAqIEBzdGF0ZTogUE1TR19TVVNQRU5EIHRvIHN1c3BlbmQKLSAqIENvbnRleHQ6IG11c3QgYmUgYWJsZSB0byBzbGVlcDsgZGV2aWNlIG5vdCBsb2NrZWQKKyAqIENvbnRleHQ6IG11c3QgYmUgYWJsZSB0byBzbGVlcDsgZGV2aWNlIG5vdCBsb2NrZWQ7IHBtIGxvY2tzIGhlbGQKICAqCiAgKiBTdXNwZW5kcyBhIFVTQiBkZXZpY2UgdGhhdCBpc24ndCBpbiBhY3RpdmUgdXNlLCBjb25zZXJ2aW5nIHBvd2VyLgogICogRGV2aWNlcyBtYXkgd2FrZSBvdXQgb2YgYSBzdXNwZW5kLCBpZiBhbnl0aGluZyBpbXBvcnRhbnQgaGFwcGVucywKQEAgLTE3MDksMzcgKzE2NDcsNTAgQEAKICAqIHN1c3BlbmQgYnkgdGhlIGhvc3QsIHVzaW5nIHVzYl9yZXN1bWVfZGV2aWNlKCkuICBJdCdzIGFsc28gcm91dGluZQogICogdG8gZGlzY29ubmVjdCBkZXZpY2VzIHdoaWxlIHRoZXkgYXJlIHN1c3BlbmRlZC4KICAqCisgKiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgVVNCIGhhcmR3YXJlIGZvciBhIGRldmljZTsgaXRzIGludGVyZmFjZXMKKyAqIChhbmQsIGZvciBodWJzLCBjaGlsZCBkZXZpY2VzKSBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIHN1c3BlbmRlZC4KKyAqCiAgKiBTdXNwZW5kaW5nIE9URyBkZXZpY2VzIG1heSB0cmlnZ2VyIEhOUCwgaWYgdGhhdCdzIGJlZW4gZW5hYmxlZAogICogYmV0d2VlbiBhIHBhaXIgb2YgZHVhbC1yb2xlIGRldmljZXMuICBUaGF0IHdpbGwgY2hhbmdlIHJvbGVzLCBzdWNoCiAgKiBhcyBmcm9tIEEtSG9zdCB0byBBLVBlcmlwaGVyYWwgb3IgZnJvbSBCLUhvc3QgYmFjayB0byBCLVBlcmlwaGVyYWwuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCiAgKi8KLWludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2ludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECiAJaW50CXBvcnQxLCBzdGF0dXM7CiAKIAlwb3J0MSA9IGxvY2t0cmVlKHVkZXYpOwogCWlmIChwb3J0MSA8IDApCiAJCXJldHVybiBwb3J0MTsKIAotCXN0YXR1cyA9IF9fdXNiX3N1c3BlbmRfZGV2aWNlKHVkZXYsIHBvcnQxLCBzdGF0ZSk7CisJc3RhdHVzID0gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwgcG9ydDEpOwogCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCXJldHVybiBzdGF0dXM7CisjZWxzZQorCS8qIE5PVEU6ICB1ZGV2LT5zdGF0ZSB1bmNoYW5nZWQsIGl0J3Mgbm90IGx5aW5nIC4uLiAqLworCXVkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfU1VTUEVORDsKKwlyZXR1cm4gMDsKKyNlbmRpZgogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N1c3BlbmRfZGV2aWNlKTsKIAogLyoKKyAqIElmIHRoZSBVU0IgInN1c3BlbmQiIHN0YXRlIGlzIGluIHVzZSAocmF0aGVyIHRoYW4gImdsb2JhbCBzdXNwZW5kIiksCisgKiBtYW55IGRldmljZXMgd2lsbCBiZSBpbmRpdmlkdWFsbHkgdGFrZW4gb3V0IG9mIHN1c3BlbmQgc3RhdGUgdXNpbmcKKyAqIHNwZWNpYWwiIHJlc3VtZSIgc2lnbmFsaW5nLiAgVGhlc2Ugcm91dGluZXMga2ljayBpbiBzaG9ydGx5IGFmdGVyCiAgKiBoYXJkd2FyZSByZXN1bWUgc2lnbmFsaW5nIGlzIGZpbmlzaGVkLCBlaXRoZXIgYmVjYXVzZSBvZiBzZWxlY3RpdmUKICAqIHJlc3VtZSAoYnkgaG9zdCkgb3IgcmVtb3RlIHdha2V1cCAoYnkgZGV2aWNlKSAuLi4gbm93IHNlZSB3aGF0IGNoYW5nZWQKICAqIGluIHRoZSB0cmVlIHRoYXQncyByb290ZWQgYXQgdGhpcyBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbnQgZmluaXNoX3BvcnRfcmVzdW1lKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQorc3RhdGljIGludCBmaW5pc2hfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlpbnQJc3RhdHVzOwogCXUxNglkZXZzdGF0dXM7CiAKIAkvKiBjYWxsZXIgb3ducyB0aGUgdWRldiBkZXZpY2UgbG9jayAqLwotCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiByZXN1bWVcbiIpOworCWRldl9kYmcoJnVkZXYtPmRldiwgImZpbmlzaCByZXN1bWVcbiIpOwogCiAJLyogdXNiIGNoOSBpZGVudGlmaWVzIGZvdXIgdmFyaWFudHMgb2YgU1VTUEVOREVELCBiYXNlZCBvbiB3aGF0CiAJICogc3RhdGUgdGhlIGRldmljZSByZXN1bWVzIHRvLiAgTGludXggY3VycmVudGx5IHdvbid0IHNlZSB0aGUKQEAgLTE3NDksNyArMTcwMCw2IEBACiAJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgdWRldi0+YWN0Y29uZmlnCiAJCQk/IFVTQl9TVEFURV9DT05GSUdVUkVECiAJCQk6IFVTQl9TVEFURV9BRERSRVNTKTsKLQl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCiAgCS8qIDEwLjUuNC41IHNheXMgYmUgc3VyZSBkZXZpY2VzIGluIHRoZSB0cmVlIGFyZSBzdGlsbCB0aGVyZS4KICAJICogRm9yIG5vdyBsZXQncyBhc3N1bWUgdGhlIGRldmljZSBkaWRuJ3QgZ28gY3Jhenkgb24gcmVzdW1lLApAQCAtMTc2Miw5ICsxNzEyLDExIEBACiAJCQlzdGF0dXMpOwogCWVsc2UgaWYgKHVkZXYtPmFjdGNvbmZpZykgewogCQl1bnNpZ25lZAlpOworCQlpbnQJCSgqcmVzdW1lKShzdHJ1Y3QgZGV2aWNlICopOwogCiAJCWxlMTZfdG9fY3B1cygmZGV2c3RhdHVzKTsKLQkJaWYgKGRldnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpIHsKKwkJaWYgKGRldnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJCQkmJiB1ZGV2LT5wYXJlbnQpIHsKIAkJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAogCQkJCQl1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQkJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKQEAgLTE3ODAsMzMgKzE3MzIsMTEgQEAKIAkJfQogCiAJCS8qIHJlc3VtZSBpbnRlcmZhY2UgZHJpdmVyczsgaWYgdGhpcyBpcyBhIGh1YiwgaXQKLQkJICogcmVzdW1lcyB0aGUgY2hpbGQgZGV2aWNlcworCQkgKiBtYXkgaGF2ZSBhIGNoaWxkIHJlc3VtZSBldmVudCB0byBkZWFsIHdpdGggc29vbgogCQkgKi8KLQkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKLQkJCXN0cnVjdCB1c2JfZHJpdmVyCSpkcml2ZXI7Ci0KLQkJCWludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKLQkJCWlmIChpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWludGYtPmRldi5kcml2ZXIpIHsKLQkJCQkvKiBGSVhNRSBtYXliZSBmb3JjZSB0byBhbHQgMCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKLQotCQkJLyogYnVzX3Jlc2Nhbl9kZXZpY2VzKCkgbWF5IHJlYmluZCBkcml2ZXJzICovCi0JCQlpZiAoIWRyaXZlci0+cmVzdW1lKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBjYW4gd2UgZG8gYmV0dGVyIHRoYW4ganVzdCBsb2dnaW5nIGVycm9ycz8gKi8KLQkJCXN0YXR1cyA9IGRyaXZlci0+cmVzdW1lKGludGYpOwotCQkJaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBQTV9FVkVOVF9PTgotCQkJCQl8fCBzdGF0dXMpCi0JCQkJZGV2X2RiZygmaW50Zi0+ZGV2LAotCQkJCQkicmVzdW1lIGZhaWwsIHN0YXRlICVkIGNvZGUgJWRcbiIsCi0JCQkJCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCwgc3RhdHVzKTsKLQkJfQorCQlyZXN1bWUgPSB1ZGV2LT5kZXYuYnVzLT5yZXN1bWU7CisJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykKKwkJCSh2b2lkKSByZXN1bWUoJnVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldLT5kZXYpOwogCQlzdGF0dXMgPSAwOwogCiAJfSBlbHNlIGlmICh1ZGV2LT5kZXZudW0gPD0gMCkgewpAQCAtMTgxNiw2ICsxNzQ2LDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisKIHN0YXRpYyBpbnQKIGh1Yl9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewpAQCAtMTg2MSw3ICsxNzkzLDcgQEAKIAkJCS8qIFRSU01SQ1kgPSAxMCBtc2VjICovCiAJCQltc2xlZXAoMTApOwogCQkJaWYgKHVkZXYpCi0JCQkJc3RhdHVzID0gZmluaXNoX3BvcnRfcmVzdW1lKHVkZXYpOworCQkJCXN0YXR1cyA9IGZpbmlzaF9kZXZpY2VfcmVzdW1lKHVkZXYpOwogCQl9CiAJfQogCWlmIChzdGF0dXMgPCAwKQpAQCAtMTg3MCwxMiArMTgwMiwxMiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgaHViX3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworI2VuZGlmCiAKLS8qKgorLyoKICAqIHVzYl9yZXN1bWVfZGV2aWNlIC0gcmUtYWN0aXZhdGUgYSBzdXNwZW5kZWQgdXNiIGRldmljZQogICogQHVkZXY6IGRldmljZSB0byByZS1hY3RpdmF0ZQotICogQ29udGV4dDogbXVzdCBiZSBhYmxlIHRvIHNsZWVwOyBkZXZpY2Ugbm90IGxvY2tlZAorICogQ29udGV4dDogbXVzdCBiZSBhYmxlIHRvIHNsZWVwOyBkZXZpY2Ugbm90IGxvY2tlZDsgcG0gbG9ja3MgaGVsZAogICoKICAqIFRoaXMgd2lsbCByZS1hY3RpdmF0ZSB0aGUgc3VzcGVuZGVkIGRldmljZSwgaW5jcmVhc2luZyBwb3dlciB1c2FnZQogICogd2hpbGUgbGV0dGluZyBkcml2ZXJzIGNvbW11bmljYXRlIGFnYWluIHdpdGggaXRzIGVuZHBvaW50cy4KQEAgLTE4OTMsMzUgKzE4MjUsMjIgQEAKIAlpZiAocG9ydDEgPCAwKQogCQlyZXR1cm4gcG9ydDE7CiAKLQkvKiAiZ2xvYmFsIHJlc3VtZSIgb2YgdGhlIEhDLXRvLVVTQiBpbnRlcmZhY2UgKHJvb3QgaHViKSwgb3IKLQkgKiBzZWxlY3RpdmUgcmVzdW1lIG9mIG9uZSBodWItdG8tZGV2aWNlIHBvcnQKLQkgKi8KLQlpZiAoIXVkZXYtPnBhcmVudCkgewotCQlzdHJ1Y3QgdXNiX2J1cwkqYnVzID0gdWRldi0+YnVzOwotCQlpZiAoYnVzICYmIGJ1cy0+b3AtPmh1Yl9yZXN1bWUpIHsKLQkJCXN0YXR1cyA9IGJ1cy0+b3AtPmh1Yl9yZXN1bWUgKGJ1cyk7CisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLyogc2VsZWN0aXZlIHJlc3VtZSBvZiBvbmUgZG93bnN0cmVhbSBodWItdG8tZGV2aWNlIHBvcnQgKi8KKwlpZiAodWRldi0+cGFyZW50KSB7CisJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CisJCQkvLyBOT1RFIHN3c3VzcCBtYXkgYm9yayB1cywgZGV2aWNlIHN0YXRlIGJlaW5nIHdyb25nLi4uCisJCQkvLyBOT1RFIHRoaXMgZmFpbHMgaWYgcGFyZW50IGlzIGFsc28gc3VzcGVuZGVkLi4uCisJCQlzdGF0dXMgPSBodWJfcG9ydF9yZXN1bWUoaGRldl90b19odWIodWRldi0+cGFyZW50KSwKKwkJCQkJcG9ydDEsIHVkZXYpOwogCQl9IGVsc2UKLQkJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOwotCQlpZiAoc3RhdHVzID09IDApIHsKLQkJCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiByZXN1bWVcbiIpOwotCQkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KLQkJCW1zbGVlcCgxMCk7Ci0JCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSAodWRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOwotCQkJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKLQkJCXN0YXR1cyA9IGh1Yl9yZXN1bWUgKHVkZXYKLQkJCQkJLT5hY3Rjb25maWctPmludGVyZmFjZVswXSk7Ci0JCX0KLQl9IGVsc2UgaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKLQkJLy8gTk9URSB0aGlzIGZhaWxzIGlmIHBhcmVudCBpcyBhbHNvIHN1c3BlbmRlZC4uLgotCQlzdGF0dXMgPSBodWJfcG9ydF9yZXN1bWUoaGRldl90b19odWIodWRldi0+cGFyZW50KSwKLQkJCQlwb3J0MSwgdWRldik7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gMDsKLQl9Ci0JaWYgKHN0YXR1cyA8IDApIHsKKwkJCXN0YXR1cyA9IDA7CisJfSBlbHNlCisjZW5kaWYKKwkJc3RhdHVzID0gZmluaXNoX2RldmljZV9yZXN1bWUodWRldik7CisJaWYgKHN0YXR1cyA8IDApCiAJCWRldl9kYmcoJnVkZXYtPmRldiwgImNhbid0IHJlc3VtZSwgc3RhdHVzICVkXG4iLAogCQkJc3RhdHVzKTsKLQl9CiAKIAl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKIApAQCAtMTkzOCw2ICsxODU3LDggQEAKIHsKIAlpbnQJc3RhdHVzID0gMDsKIAorI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCiAJLyogZG9uJ3QgcmVwZWF0IFJFU1VNRSBzZXF1ZW5jZSBpZiB0aGlzIGRldmljZQogCSAqIHdhcyBhbHJlYWR5IHdva2VuIHVwIGJ5IHNvbWUgb3RoZXIgdGFzawogCSAqLwpAQCAtMTk0NiwzOCArMTg2Nyw1MiBAQAogCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUUgKHdha2V1cClcbiIpOwogCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLwogCQltc2xlZXAoMTApOwotCQlzdGF0dXMgPSBmaW5pc2hfcG9ydF9yZXN1bWUodWRldik7CisJCXN0YXR1cyA9IGZpbmlzaF9kZXZpY2VfcmVzdW1lKHVkZXYpOwogCX0KIAl1cCgmdWRldi0+c2VyaWFsaXplKTsKKyNlbmRpZgogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgaHViX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaHViX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtc2cpCiB7CiAJc3RydWN0IHVzYl9odWIJCSpodWIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqaGRldiA9IGh1Yi0+aGRldjsKIAl1bnNpZ25lZAkJcG9ydDE7Ci0JaW50CQkJc3RhdHVzOwogCi0JLyogc3RvcCBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSAqLwotCWh1Yl9xdWllc2NlKGh1Yik7Ci0KLQkvKiB0aGVuIHN1c3BlbmQgZXZlcnkgcG9ydCAqLworCS8qIGZhaWwgaWYgY2hpbGRyZW4gYXJlbid0IGFscmVhZHkgc3VzcGVuZGVkICovCiAJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGhkZXYtPm1heGNoaWxkOyBwb3J0MSsrKSB7CiAJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwogCiAJCXVkZXYgPSBoZGV2LT5jaGlsZHJlbiBbcG9ydDEtMV07Ci0JCWlmICghdWRldikKLQkJCWNvbnRpbnVlOwotCQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOwotCQlzdGF0dXMgPSBfX3VzYl9zdXNwZW5kX2RldmljZSh1ZGV2LCBwb3J0MSwgc3RhdGUpOwotCQl1cCgmdWRldi0+c2VyaWFsaXplKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJzdXNwZW5kIHBvcnQgJWQgLS0+ICVkXG4iLAotCQkJCXBvcnQxLCBzdGF0dXMpOworCQlpZiAodWRldiAmJiAodWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50CisJCQkJCT09IFBNX0VWRU5UX09OCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJCQkJfHwgdWRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRAorI2VuZGlmCisJCQkJKSkgeworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAicG9ydCAlZCBueWV0IHN1c3BlbmRlZFxuIiwgcG9ydDEpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQogCX0KIAotCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCS8qICJnbG9iYWwgc3VzcGVuZCIgb2YgdGhlIGRvd25zdHJlYW0gSEMtdG8tVVNCIGludGVyZmFjZSAqLworCWlmICghaGRldi0+cGFyZW50KSB7CisJCXN0cnVjdCB1c2JfYnVzCSpidXMgPSBoZGV2LT5idXM7CisJCWlmIChidXMpIHsKKwkJCWludAlzdGF0dXMgPSBoY2RfYnVzX3N1c3BlbmQgKGJ1cyk7CisKKwkJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJCWRldl9kYmcoJmhkZXYtPmRldiwgIidnbG9iYWwnIHN1c3BlbmQgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogc3RvcCBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSAqLworCWh1Yl9xdWllc2NlKGh1Yik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5ODUsMTEgKzE5MjAsMzUgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqaGRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJc3RydWN0IHVzYl9odWIJCSpodWIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQl1bnNpZ25lZAkJcG9ydDE7CiAJaW50CQkJc3RhdHVzOwogCi0JaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTikKLQkJcmV0dXJuIDA7CisJLyogImdsb2JhbCByZXN1bWUiIG9mIHRoZSBkb3duc3RyZWFtIEhDLXRvLVVTQiBpbnRlcmZhY2UgKi8KKwlpZiAoIWhkZXYtPnBhcmVudCkgeworCQlzdHJ1Y3QgdXNiX2J1cwkqYnVzID0gaGRldi0+YnVzOworCQlpZiAoYnVzKSB7CisJCQlzdGF0dXMgPSBoY2RfYnVzX3Jlc3VtZSAoYnVzKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICInZ2xvYmFsJyByZXN1bWUgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KKwkJCW1zbGVlcCgxMCk7CisJCX0KKwl9CisKKwlodWJfYWN0aXZhdGUoaHViKTsKKworCS8qIFJFVklTSVQ6ICB0aGlzIHJlY3Vyc2lvbiBwcm9iYWJseSBzaG91bGRuJ3QgZXhpc3QuICBSZW1vdmUKKwkgKiB0aGlzIGNvZGUgc29tZXRpbWUsIGFmdGVyIHJldGVzdGluZyB3aXRoIGRpZmZlcmVudCByb290IGFuZAorCSAqIGV4dGVybmFsIGh1YnMuCisJICovCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJeworCXVuc2lnbmVkCQlwb3J0MTsKIAogCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSBoZGV2LT5tYXhjaGlsZDsgcG9ydDErKykgewogCQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKQEAgLTIwMTUsNyArMTk3NCw3IEBACiAJCWlmIChwb3J0c3RhdCAmIFVTQl9QT1JUX1NUQVRfU1VTUEVORCkKIAkJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc3VtZShodWIsIHBvcnQxLCB1ZGV2KTsKIAkJZWxzZSB7Ci0JCQlzdGF0dXMgPSBmaW5pc2hfcG9ydF9yZXN1bWUodWRldik7CisJCQlzdGF0dXMgPSBmaW5pc2hfZGV2aWNlX3Jlc3VtZSh1ZGV2KTsKIAkJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHBvcnQgJWQgLS0+ICVkXG4iLAogCQkJCQlwb3J0MSwgc3RhdHVzKTsKQEAgLTIwMjQsMTMgKzE5ODMsMjMgQEAKIAkJfQogCQl1cCgmdWRldi0+c2VyaWFsaXplKTsKIAl9Ci0JaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKLQotCWh1Yi0+cmVzdW1lX3Jvb3RfaHViID0gMDsKLQlodWJfYWN0aXZhdGUoaHViKTsKKwl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAordm9pZCB1c2Jfc3VzcGVuZF9yb290X2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gaGRldl90b19odWIoaGRldik7CisKKwkvKiBUaGlzIGFsc28gbWFrZXMgYW55IGxlZCBibGlua2VyIHN0b3AgcmV0cmlnZ2VyaW5nLiAgV2UncmUgY2FsbGVkCisJICogZnJvbSBpcnEsIHNvIHRoZSBibGlua2VyIG1pZ2h0IHN0aWxsIGJlIHNjaGVkdWxlZC4gIENhbGxlciBwcm9taXNlcworCSAqIHRoYXQgdGhlIHJvb3QgaHViIHN0YXR1cyBVUkIgd2lsbCBiZSBjYW5jZWxlZC4KKwkgKi8KKwlfX2h1Yl9xdWllc2NlKGh1Yik7CisJbWFya19xdWllc2NlZCh0b191c2JfaW50ZXJmYWNlKGh1Yi0+aW50ZmRldikpOworfQorCiB2b2lkIHVzYl9yZXN1bWVfcm9vdF9odWIoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYpCiB7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IGhkZXZfdG9faHViKGhkZXYpOwpAQCAtMjAzOSwyOCArMjAwOCw2IEBACiAJa2lja19raHViZChodWIpOwogfQogCi0jZWxzZQkvKiAhQ09ORklHX1VTQl9TVVNQRU5EICovCi0KLWludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHVzYl9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCXJldHVybiAwOwotfQotCi0jZGVmaW5lCWh1Yl9zdXNwZW5kCQlOVUxMCi0jZGVmaW5lCWh1Yl9yZXN1bWUJCU5VTEwKLSNkZWZpbmUJcmVtb3RlX3dha2V1cCh4KQkwCi0KLSNlbmRpZgkvKiBDT05GSUdfVVNCX1NVU1BFTkQgKi8KLQotRVhQT1JUX1NZTUJPTCh1c2Jfc3VzcGVuZF9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTCh1c2JfcmVzdW1lX2RldmljZSk7Ci0KLQogCiAvKiBVU0IgMi4wIHNwZWMsIDcuMS43LjMgLyBmaWcgNy0yOToKICAqCkBAIC0yNDY5LDYgKzI0MTYsNyBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OwogCXN0cnVjdCBkZXZpY2UgKmh1Yl9kZXYgPSBodWItPmludGZkZXY7CisJdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3MgPSBsZTE2X3RvX2NwdShodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MpOwogCWludCBzdGF0dXMsIGk7CiAgCiAJZGV2X2RiZyAoaHViX2RldiwKQEAgLTI1MDYsOCArMjQ1NCw3IEBACiAJaWYgKCEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpIHsKIAogCQkvKiBtYXliZSBzd2l0Y2ggcG93ZXIgYmFjayBvbiAoZS5nLiByb290IGh1YiB3YXMgcmVzZXQpICovCi0JCWlmICgoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzCi0JCQkJCSYgSFVCX0NIQVJfTFBTTSkgPCAyCisJCWlmICgod0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX0xQU00pIDwgMgogCQkJCSYmICEocG9ydHN0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpKSkKIAkJCXNldF9wb3J0X2ZlYXR1cmUoaGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogIApAQCAtMjY4NiwyMSArMjYzMywyOCBAQAogCQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpOwogCQlodWJfZGV2ID0gJmludGYtPmRldjsKIAotCQlkZXZfZGJnKGh1Yl9kZXYsICJzdGF0ZSAlZCBwb3J0cyAlZCBjaGcgJTA0eCBldnQgJTA0eFxuIiwKKwkJaSA9IGh1Yi0+cmVzdW1lX3Jvb3RfaHViOworCisJCWRldl9kYmcoaHViX2RldiwgInN0YXRlICVkIHBvcnRzICVkIGNoZyAlMDR4IGV2dCAlMDR4JXNcbiIsCiAJCQkJaGRldi0+c3RhdGUsIGh1Yi0+ZGVzY3JpcHRvcgogCQkJCQk/IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzCiAJCQkJCTogMCwKIAkJCQkvKiBOT1RFOiBleHBlY3RzIG1heCAxNSBwb3J0cy4uLiAqLwogCQkJCSh1MTYpIGh1Yi0+Y2hhbmdlX2JpdHNbMF0sCi0JCQkJKHUxNikgaHViLT5ldmVudF9iaXRzWzBdKTsKKwkJCQkodTE2KSBodWItPmV2ZW50X2JpdHNbMF0sCisJCQkJaSA/ICIsIHJlc3VtZSByb290IiA6ICIiKTsKIAogCQl1c2JfZ2V0X2ludGYoaW50Zik7Ci0JCWkgPSBodWItPnJlc3VtZV9yb290X2h1YjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZodWJfZXZlbnRfbG9jayk7CiAKLQkJLyogSXMgdGhpcyBpcyBhIHJvb3QgaHViIHdhbnRpbmcgdG8gYmUgcmVzdW1lZD8gKi8KLQkJaWYgKGkpCi0JCQl1c2JfcmVzdW1lX2RldmljZShoZGV2KTsKKwkJLyogSXMgdGhpcyBpcyBhIHJvb3QgaHViIHdhbnRpbmcgdG8gcmVhY3RpdmF0ZSB0aGUgZG93bnN0cmVhbQorCQkgKiBwb3J0cz8gIElmIHNvLCBiZSBzdXJlIHRoZSBpbnRlcmZhY2UgcmVzdW1lcyBldmVuIGlmIGl0cworCQkgKiBzdHViICJkZXZpY2UiIG5vZGUgd2FzIG5ldmVyIHN1c3BlbmRlZC4KKwkJICovCisJCWlmIChpKSB7CisJCQlkcG1fcnVudGltZV9yZXN1bWUoJmhkZXYtPmRldik7CisJCQlkcG1fcnVudGltZV9yZXN1bWUoJmludGYtPmRldik7CisJCX0KIAogCQkvKiBMb2NrIHRoZSBkZXZpY2UsIHRoZW4gY2hlY2sgdG8gc2VlIGlmIHdlIHdlcmUKIAkJICogZGlzY29ubmVjdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIHN1Y2NlZWQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oIGIvZHJpdmVycy91c2IvY29yZS9odWIuaAppbmRleCBlN2ZhOWI1Li5iZjIzZjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmgKQEAgLTEzMSw3ICsxMzEsNyBAQAogCV9fdTggIGJEZXNjTGVuZ3RoOwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKIAlfX3U4ICBiTmJyUG9ydHM7Ci0JX191MTYgd0h1YkNoYXJhY3RlcmlzdGljczsKKwlfX2xlMTYgd0h1YkNoYXJhY3RlcmlzdGljczsKIAlfX3U4ICBiUHdyT24yUHdyR29vZDsKIAlfX3U4ICBiSHViQ29udHJDdXJyZW50OwogCSAgICAJLyogYWRkIDEgYml0IGZvciBodWIgc3RhdHVzIGNoYW5nZTsgcm91bmQgdG8gYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwppbmRleCBkMDdiYmEwLi4xMmY0OTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlICJ1c2IuaCIKICNpbmNsdWRlICJoY2QuaCIKQEAgLTYxOSw3ICs2MjAsNyBAQAogCX0KIH0KIAotdm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpCitzdGF0aWMgdm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpCiB7CiAJc3RydWN0IGRlbnRyeSAqcGFyZW50OwogCWNoYXIgbmFtZVs4XTsKQEAgLTY0MiwxMiArNjQzLDkgQEAKIAkJZXJyICgiZXJyb3IgY3JlYXRpbmcgdXNiZnMgYnVzIGVudHJ5Iik7CiAJCXJldHVybjsKIAl9Ci0KLQl1c2Jmc191cGRhdGVfc3BlY2lhbCgpOwotCXVzYmZzX2Nvbm5fZGlzY19ldmVudCgpOwogfQogCi12b2lkIHVzYmZzX3JlbW92ZV9idXMoc3RydWN0IHVzYl9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIHVzYmZzX3JlbW92ZV9idXMoc3RydWN0IHVzYl9idXMgKmJ1cykKIHsKIAlpZiAoYnVzLT51c2Jmc19kZW50cnkpIHsKIAkJZnNfcmVtb3ZlX2ZpbGUgKGJ1cy0+dXNiZnNfZGVudHJ5KTsKQEAgLTY1OSwxMiArNjU3LDkgQEAKIAkJcmVtb3ZlX3NwZWNpYWxfZmlsZXMoKTsKIAkJbnVtX2J1c2VzID0gMDsKIAl9Ci0KLQl1c2Jmc191cGRhdGVfc3BlY2lhbCgpOwotCXVzYmZzX2Nvbm5fZGlzY19ldmVudCgpOwogfQogCi12b2lkIHVzYmZzX2FkZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHVzYmZzX2FkZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKIAljaGFyIG5hbWVbOF07CiAJaW50IGk7CkBAIC02OTAsMTIgKzY4NSw5IEBACiAJfQogCWlmIChkZXYtPnVzYmZzX2RlbnRyeS0+ZF9pbm9kZSkKIAkJZGV2LT51c2Jmc19kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSA9IGlfc2l6ZTsKLQotCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7Ci0JdXNiZnNfY29ubl9kaXNjX2V2ZW50KCk7CiB9CiAKLXZvaWQgdXNiZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdXNiZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZfc3RhdGUgKmRzOwogCXN0cnVjdCBzaWdpbmZvIHNpbmZvOwpAQCAtNzE2LDEwICs3MDgsMzMgQEAKIAkJCWtpbGxfcHJvY19pbmZvX2FzX3VpZChkcy0+ZGlzY3NpZ25yLCAmc2luZm8sIGRzLT5kaXNjX3BpZCwgZHMtPmRpc2NfdWlkLCBkcy0+ZGlzY19ldWlkKTsKIAkJfQogCX0KK30KKworc3RhdGljIGludCB1c2Jmc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGV2KQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBVU0JfREVWSUNFX0FERDoKKwkJdXNiZnNfYWRkX2RldmljZShkZXYpOworCQlicmVhazsKKwljYXNlIFVTQl9ERVZJQ0VfUkVNT1ZFOgorCQl1c2Jmc19yZW1vdmVfZGV2aWNlKGRldik7CisJCWJyZWFrOworCWNhc2UgVVNCX0JVU19BREQ6CisJCXVzYmZzX2FkZF9idXMoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfQlVTX1JFTU9WRToKKwkJdXNiZnNfcmVtb3ZlX2J1cyhkZXYpOworCX0KKwogCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CiAJdXNiZnNfY29ubl9kaXNjX2V2ZW50KCk7CisJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1c2Jmc19uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IAl1c2Jmc19ub3RpZnksCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqdXNiZGlyID0gTlVMTDsKQEAgLTczMiw2ICs3NDcsOCBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKKwl1c2JfcmVnaXN0ZXJfbm90aWZ5KCZ1c2Jmc19uYik7CisKIAkvKiBjcmVhdGUgbW91bnQgcG9pbnQgZm9yIHVzYmZzICovCiAJdXNiZGlyID0gcHJvY19ta2RpcigidXNiIiwgcHJvY19idXMpOwogCkBAIC03NDAsNiArNzU3LDcgQEAKIAogdm9pZCB1c2Jmc19jbGVhbnVwKHZvaWQpCiB7CisJdXNiX3VucmVnaXN0ZXJfbm90aWZ5KCZ1c2Jmc19uYik7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZ1c2JfZnNfdHlwZSk7CiAJaWYgKHVzYmRpcikKIAkJcmVtb3ZlX3Byb2NfZW50cnkoInVzYiIsIHByb2NfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggZjlhODFlOC4uNjQ0YTNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTE4NywyMSArMTg3LDM3IEBACiAgKiAgICAgIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLCBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkKICAqICAgICAgbWV0aG9kIGNhbiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIFNpbmNlIHlvdSBkb24ndCBoYXZlIGEgaGFuZGxlIG9uCiAgKiAgICAgIHRoZSBVUkIgdXNlZCwgeW91IGNhbid0IGNhbmNlbCB0aGUgcmVxdWVzdC4KKyAqCisgKglCZWNhdXNlIHRoZXJlIGlzIG5vIHVzYl9pbnRlcnJ1cHRfbXNnKCkgYW5kIG5vIFVTQkRFVkZTX0lOVEVSUlVQVAorICoJaW9jdGwsIHVzZXJzIGFyZSBmb3JjZWQgdG8gYWJ1c2UgdGhpcyByb3V0aW5lIGJ5IHVzaW5nIGl0IHRvIHN1Ym1pdAorICoJVVJCcyBmb3IgaW50ZXJydXB0IGVuZHBvaW50cy4gIFdlIHdpbGwgdGFrZSB0aGUgbGliZXJ0eSBvZiBjcmVhdGluZworICoJYW4gaW50ZXJydXB0IFVSQiAod2l0aCB0aGUgZGVmYXVsdCBpbnRlcnZhbCkgaWYgdGhlIHRhcmdldCBpcyBhbgorICoJaW50ZXJydXB0IGVuZHBvaW50LgogICovCiBpbnQgdXNiX2J1bGtfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwgCiAJCQl2b2lkICpkYXRhLCBpbnQgbGVuLCBpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0KQogewogCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOwogCi0JaWYgKGxlbiA8IDApCisJZXAgPSAodXNiX3BpcGVpbihwaXBlKSA/IHVzYl9kZXYtPmVwX2luIDogdXNiX2Rldi0+ZXBfb3V0KQorCQkJW3VzYl9waXBlZW5kcG9pbnQocGlwZSldOworCWlmICghZXAgfHwgbGVuIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl1cmI9dXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghdXJiKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAotCQkJICB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOworCWlmICgoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJcGlwZSA9IChwaXBlICYgfigzIDw8IDMwKSkgfCAoUElQRV9JTlRFUlJVUFQgPDwgMzApOworCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJCXVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCwKKwkJCQllcC0+ZGVzYy5iSW50ZXJ2YWwpOworCX0gZWxzZQorCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCQl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOwogCiAJcmV0dXJuIHVzYl9zdGFydF93YWl0X3VyYih1cmIsIHRpbWVvdXQsIGFjdHVhbF9sZW5ndGgpOwogfQpAQCAtNzcxLDYgKzc4NywzMSBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qKgorICogdXNiX2NhY2hlX3N0cmluZyAtIHJlYWQgYSBzdHJpbmcgZGVzY3JpcHRvciBhbmQgY2FjaGUgaXQgZm9yIGxhdGVyIHVzZQorICogQHVkZXY6IHRoZSBkZXZpY2Ugd2hvc2Ugc3RyaW5nIGRlc2NyaXB0b3IgaXMgYmVpbmcgcmVhZAorICogQGluZGV4OiB0aGUgZGVzY3JpcHRvciBpbmRleAorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIGEga21hbGxvYydlZCBidWZmZXIgY29udGFpbmluZyB0aGUgZGVzY3JpcHRvciBzdHJpbmcsCisgKiBvciBOVUxMIGlmIHRoZSBpbmRleCBpcyAwIG9yIHRoZSBzdHJpbmcgY291bGQgbm90IGJlIHJlYWQuCisgKi8KK2NoYXIgKnVzYl9jYWNoZV9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBpbmRleCkKK3sKKwljaGFyICpidWY7CisJY2hhciAqc21hbGxidWYgPSBOVUxMOworCWludCBsZW47CisKKwlpZiAoaW5kZXggPiAwICYmIChidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCkpICE9IE5VTEwpIHsKKwkJaWYgKChsZW4gPSB1c2Jfc3RyaW5nKHVkZXYsIGluZGV4LCBidWYsIDI1NikpID4gMCkgeworCQkJaWYgKChzbWFsbGJ1ZiA9IGttYWxsb2MoKytsZW4sIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQkJCXJldHVybiBidWY7CisJCQltZW1jcHkoc21hbGxidWYsIGJ1ZiwgbGVuKTsKKwkJfQorCQlrZnJlZShidWYpOworCX0KKwlyZXR1cm4gc21hbGxidWY7Cit9CisKIC8qCiAgKiB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yIC0gKHJlKXJlYWRzIHRoZSBkZXZpY2UgZGVzY3JpcHRvciAodXNiY29yZSkKICAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgZGV2aWNlIGRlc2NyaXB0b3IgaXMgYmVpbmcgdXBkYXRlZApAQCAtOTkyLDggKzEwMzMsNiBAQAogCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBpbnRlcmZhY2UgJXNcbiIsCiAJCQkJaW50ZXJmYWNlLT5kZXYuYnVzX2lkKTsKIAkJCXVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyhpbnRlcmZhY2UpOwotCQkJa2ZyZWUoaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKTsKLQkJCWludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyA9IE5VTEw7CiAJCQlkZXZpY2VfZGVsICgmaW50ZXJmYWNlLT5kZXYpOwogCQl9CiAKQEAgLTExMzMsNiArMTE3Miw4IEBACiAJICovCiAKIAkvKiBwcmV2ZW50IHN1Ym1pc3Npb25zIHVzaW5nIHByZXZpb3VzIGVuZHBvaW50IHNldHRpbmdzICovCisJaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKCZpZmFjZS0+ZGV2KSkKKwkJdXNiX3JlbW92ZV9zeXNmc19pbnRmX2ZpbGVzKGlmYWNlKTsKIAl1c2JfZGlzYWJsZV9pbnRlcmZhY2UoZGV2LCBpZmFjZSk7CiAKIAlpZmFjZS0+Y3VyX2FsdHNldHRpbmcgPSBhbHQ7CkBAIC0xMTY4LDYgKzEyMDksOCBAQAogCSAqIChMaWtld2lzZSwgRVAwIG5ldmVyICJoYWx0cyIgb24gd2VsbCBkZXNpZ25lZCBkZXZpY2VzLikKIAkgKi8KIAl1c2JfZW5hYmxlX2ludGVyZmFjZShkZXYsIGlmYWNlKTsKKwlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoJmlmYWNlLT5kZXYpKQorCQl1c2JfY3JlYXRlX3N5c2ZzX2ludGZfZmlsZXMoaWZhY2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjE3LDEwICsxMjYwLDggQEAKIAkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIDAsCiAJCQljb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMCwKIAkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQl1c2Jfc2V0X2RldmljZV9zdGF0ZShkZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKLQl9CiAKIAlkZXYtPnRvZ2dsZVswXSA9IGRldi0+dG9nZ2xlWzFdID0gMDsKIApAQCAtMTIyOSw2ICsxMjcwLDggQEAKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSBjb25maWctPmludGVyZmFjZVtpXTsKIAkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OwogCisJCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmaW50Zi0+ZGV2KSkKKwkJCXVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyhpbnRmKTsKIAkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIDApOwogCiAJCS8qIE5vIGFsdHNldHRpbmcgMD8gIFdlJ2xsIGFzc3VtZSB0aGUgZmlyc3QgYWx0c2V0dGluZy4KQEAgLTEyNDEsNiArMTI4NCw4IEBACiAKIAkJaW50Zi0+Y3VyX2FsdHNldHRpbmcgPSBhbHQ7CiAJCXVzYl9lbmFibGVfaW50ZXJmYWNlKGRldiwgaW50Zik7CisJCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmaW50Zi0+ZGV2KSkKKwkJCXVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyhpbnRmKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzI4LDcgKzEzNzMsNyBAQAogCQl9CiAKIAkJZm9yICg7IG4gPCBuaW50ZjsgKytuKSB7Ci0JCQluZXdfaW50ZXJmYWNlc1tuXSA9IGttYWxsb2MoCisJCQluZXdfaW50ZXJmYWNlc1tuXSA9IGt6YWxsb2MoCiAJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSksCiAJCQkJCUdGUF9LRVJORUwpOwogCQkJaWYgKCFuZXdfaW50ZXJmYWNlc1tuXSkgewpAQCAtMTM2OSw3ICsxNDE0LDYgQEAKIAkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKIAogCQkJY3AtPmludGVyZmFjZVtpXSA9IGludGYgPSBuZXdfaW50ZXJmYWNlc1tpXTsKLQkJCW1lbXNldChpbnRmLCAwLCBzaXplb2YoKmludGYpKTsKIAkJCWludGZjID0gY3AtPmludGZfY2FjaGVbaV07CiAJCQlpbnRmLT5hbHRzZXR0aW5nID0gaW50ZmMtPmFsdHNldHRpbmc7CiAJCQlpbnRmLT5udW1fYWx0c2V0dGluZyA9IGludGZjLT5udW1fYWx0c2V0dGluZzsKQEAgLTEzOTMsNiArMTQzNyw3IEBACiAJCQlpbnRmLT5kZXYuZG1hX21hc2sgPSBkZXYtPmRldi5kbWFfbWFzazsKIAkJCWludGYtPmRldi5yZWxlYXNlID0gcmVsZWFzZV9pbnRlcmZhY2U7CiAJCQlkZXZpY2VfaW5pdGlhbGl6ZSAoJmludGYtPmRldik7CisJCQltYXJrX3F1aWVzY2VkKGludGYpOwogCQkJc3ByaW50ZiAoJmludGYtPmRldi5idXNfaWRbMF0sICIlZC0lczolZC4lZCIsCiAJCQkJIGRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2cGF0aCwKIAkJCQkgY29uZmlndXJhdGlvbiwKQEAgLTE0MDAsMTIgKzE0NDUsOSBAQAogCQl9CiAJCWtmcmVlKG5ld19pbnRlcmZhY2VzKTsKIAotCQlpZiAoKGNwLT5kZXNjLmlDb25maWd1cmF0aW9uKSAmJgotCQkgICAgKGNwLT5zdHJpbmcgPT0gTlVMTCkpIHsKLQkJCWNwLT5zdHJpbmcgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoY3AtPnN0cmluZykKLQkJCQl1c2Jfc3RyaW5nKGRldiwgY3AtPmRlc2MuaUNvbmZpZ3VyYXRpb24sIGNwLT5zdHJpbmcsIDI1Nik7Ci0JCX0KKwkJaWYgKGNwLT5zdHJpbmcgPT0gTlVMTCkKKwkJCWNwLT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKGRldiwKKwkJCQkJY3AtPmRlc2MuaUNvbmZpZ3VyYXRpb24pOwogCiAJCS8qIE5vdyB0aGF0IGFsbCB0aGUgaW50ZXJmYWNlcyBhcmUgc2V0IHVwLCByZWdpc3RlciB0aGVtCiAJCSAqIHRvIHRyaWdnZXIgYmluZGluZyBvZiBkcml2ZXJzIHRvIGludGVyZmFjZXMuICBwcm9iZSgpCkBAIC0xNDE1LDEzICsxNDU3LDEyIEBACiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgewogCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSBjcC0+aW50ZXJmYWNlW2ldOwotCQkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZGVzYzsKKwkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCi0JCQlkZXNjID0gJmludGYtPmFsdHNldHRpbmcgWzBdLmRlc2M7CiAJCQlkZXZfZGJnICgmZGV2LT5kZXYsCiAJCQkJImFkZGluZyAlcyAoY29uZmlnICMlZCwgaW50ZXJmYWNlICVkKVxuIiwKIAkJCQlpbnRmLT5kZXYuYnVzX2lkLCBjb25maWd1cmF0aW9uLAotCQkJCWRlc2MtPmJJbnRlcmZhY2VOdW1iZXIpOworCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAkJCXJldCA9IGRldmljZV9hZGQgKCZpbnRmLT5kZXYpOwogCQkJaWYgKHJldCAhPSAwKSB7CiAJCQkJZGV2X2VycigmZGV2LT5kZXYsCkBAIC0xNDMwLDEzICsxNDcxLDYgQEAKIAkJCQkJcmV0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmICgoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuaUludGVyZmFjZSkgJiYKLQkJCSAgICAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyA9PSBOVUxMKSkgewotCQkJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcpCi0JCQkJCXVzYl9zdHJpbmcoZGV2LCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5pSW50ZXJmYWNlLAotCQkJCQkJICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZywgMjU2KTsKLQkJCX0KIAkJCXVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyAoaW50Zik7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL25vdGlmeS5jIGIvZHJpdmVycy91c2IvY29yZS9ub3RpZnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RhMDU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9ub3RpZnkuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIEFsbCB0aGUgVVNCIG5vdGlmeSBsb2dpYworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoKKyAqIG5vdGlmaWVyIGZ1bmN0aW9ucyBvcmlnaW5hbGx5IGJhc2VkIG9uIHRob3NlIGluIGtlcm5lbC9zeXMuYworICogYnV0IGZpeGVkIHVwIHRvIG5vdCBiZSBzbyBicm9rZW4uCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgInVzYi5oIgorCisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVzYl9ub3RpZmllcl9saXN0Oworc3RhdGljIERFQ0xBUkVfTVVURVgodXNiX25vdGlmaWVyX2xvY2spOworCitzdGF0aWMgdm9pZCB1c2Jfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbGlzdCwKKwkJCQkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQoreworCWRvd24oJnVzYl9ub3RpZmllcl9sb2NrKTsKKwl3aGlsZSAoKmxpc3QpIHsKKwkJaWYgKG4tPnByaW9yaXR5ID4gKCpsaXN0KS0+cHJpb3JpdHkpCisJCQlicmVhazsKKwkJbGlzdCA9ICYoKCpsaXN0KS0+bmV4dCk7CisJfQorCW4tPm5leHQgPSAqbGlzdDsKKwkqbGlzdCA9IG47CisJdXAoJnVzYl9ub3RpZmllcl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdXNiX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbmwsCisJCQkJICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQoreworCWRvd24oJnVzYl9ub3RpZmllcl9sb2NrKTsKKwl3aGlsZSAoKCpubCkhPU5VTEwpIHsKKwkJaWYgKCgqbmwpPT1uKSB7CisJCQkqbmwgPSBuLT5uZXh0OworCQkJZ290byBleGl0OworCQl9CisJCW5sPSYoKCpubCktPm5leHQpOworCX0KK2V4aXQ6CisJdXAoJnVzYl9ub3RpZmllcl9sb2NrKTsKK30KKworc3RhdGljIGludCB1c2Jfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKipuLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoreworCWludCByZXQ9Tk9USUZZX0RPTkU7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiA9ICpuOworCisJZG93bigmdXNiX25vdGlmaWVyX2xvY2spOworCXdoaWxlIChuYikgeworCQlyZXQgPSBuYi0+bm90aWZpZXJfY2FsbChuYix2YWwsdik7CisJCWlmIChyZXQmTk9USUZZX1NUT1BfTUFTSykgeworCQkJZ290byBleGl0OworCQl9CisJCW5iID0gbmItPm5leHQ7CisJfQorZXhpdDoKKwl1cCgmdXNiX25vdGlmaWVyX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdXNiX3JlZ2lzdGVyX25vdGlmeSAtIHJlZ2lzdGVyIGEgbm90aWZpZXIgY2FsbGJhY2sgd2hlbmV2ZXIgYSB1c2IgY2hhbmdlIGhhcHBlbnMKKyAqIEBuYjogcG9pbnRlciB0byB0aGUgbm90aWZpZXIgYmxvY2sgZm9yIHRoZSBjYWxsYmFjayBldmVudHMuCisgKgorICogVGhlc2UgY2hhbmdlcyBhcmUgZWl0aGVyIFVTQiBkZXZpY2VzIG9yIGJ1c3NlcyBiZWluZyBhZGRlZCBvciByZW1vdmVkLgorICovCit2b2lkIHVzYl9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwl1c2Jfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnVzYl9ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcmVnaXN0ZXJfbm90aWZ5KTsKKworLyoqCisgKiB1c2JfdW5yZWdpc3Rlcl9ub3RpZnkgLSB1bnJlZ2lzdGVyIGEgbm90aWZpZXIgY2FsbGJhY2sKKyAqIEBuYjogcG9pbnRlciB0byB0aGUgbm90aWZpZXIgYmxvY2sgZm9yIHRoZSBjYWxsYmFjayBldmVudHMuCisgKgorICogdXNiX3JlZ2lzdGVyX25vdGlmaWVyKCkgbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseSBjYWxsZWQgZm9yIHRoaXMgZnVuY3Rpb24KKyAqIHRvIHdvcmsgcHJvcGVybHkuCisgKi8KK3ZvaWQgdXNiX3VucmVnaXN0ZXJfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJdXNiX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnVzYl9ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdW5yZWdpc3Rlcl9ub3RpZnkpOworCisKK3ZvaWQgdXNiX25vdGlmeV9hZGRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXVzYl9ub3RpZmllcl9jYWxsX2NoYWluKCZ1c2Jfbm90aWZpZXJfbGlzdCwgVVNCX0RFVklDRV9BREQsIHVkZXYpOworfQorCit2b2lkIHVzYl9ub3RpZnlfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwl1c2Jfbm90aWZpZXJfY2FsbF9jaGFpbigmdXNiX25vdGlmaWVyX2xpc3QsIFVTQl9ERVZJQ0VfUkVNT1ZFLCB1ZGV2KTsKK30KKwordm9pZCB1c2Jfbm90aWZ5X2FkZF9idXMoc3RydWN0IHVzYl9idXMgKnVidXMpCit7CisJdXNiX25vdGlmaWVyX2NhbGxfY2hhaW4oJnVzYl9ub3RpZmllcl9saXN0LCBVU0JfQlVTX0FERCwgdWJ1cyk7Cit9CisKK3ZvaWQgdXNiX25vdGlmeV9yZW1vdmVfYnVzKHN0cnVjdCB1c2JfYnVzICp1YnVzKQoreworCXVzYl9ub3RpZmllcl9jYWxsX2NoYWluKCZ1c2Jfbm90aWZpZXJfbGlzdCwgVVNCX0JVU19SRU1PVkUsIHVidXMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDAwMjk3ZjEuLmVkZDgzZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTIyLDkgKzIyLDIwNyBAQAogCiAjaW5jbHVkZSAidXNiLmgiCiAKKy8qIGVuZHBvaW50IHN0dWZmICovCitzdHJ1Y3QgZXBfb2JqZWN0IHsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IGtvYmplY3Qga29iajsKK307CisjZGVmaW5lIHRvX2VwX29iamVjdChfa29iaikgXAorCWNvbnRhaW5lcl9vZihfa29iaiwgc3RydWN0IGVwX29iamVjdCwga29iaikKKworc3RydWN0IGVwX2F0dHJpYnV0ZSB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgdXNiX2RldmljZSAqLAorCQkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICosIGNoYXIgKik7Cit9OworI2RlZmluZSB0b19lcF9hdHRyaWJ1dGUoX2F0dHIpIFwKKwljb250YWluZXJfb2YoX2F0dHIsIHN0cnVjdCBlcF9hdHRyaWJ1dGUsIGF0dHIpCisKKyNkZWZpbmUgRVBfQVRUUihfbmFtZSkJCQkJCQlcCitzdHJ1Y3QgZXBfYXR0cmlidXRlIGVwXyMjX25hbWUgPSB7CQkJCVwKKwkuYXR0ciA9IHsubmFtZSA9ICNfbmFtZSwgLm93bmVyID0gVEhJU19NT0RVTEUsCQlcCisJCQkubW9kZSA9IFNfSVJVR099LAkJCVwKKwkuc2hvdyA9IHNob3dfZXBfIyNfbmFtZX0KKworI2RlZmluZSB1c2JfZXBfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93X2VwXyMjZmllbGQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCQlcCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYywgCQlcCisJCWNoYXIgKmJ1ZikJCQkJCVwKK3sJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsIGZvcm1hdF9zdHJpbmcsIGRlc2MtPmZpZWxkKTsJXAorfQkJCQkJCQkJXAorc3RhdGljIEVQX0FUVFIoZmllbGQpOworCit1c2JfZXBfYXR0cihiTGVuZ3RoLCAiJTAyeFxuIikKK3VzYl9lcF9hdHRyKGJFbmRwb2ludEFkZHJlc3MsICIlMDJ4XG4iKQordXNiX2VwX2F0dHIoYm1BdHRyaWJ1dGVzLCAiJTAyeFxuIikKK3VzYl9lcF9hdHRyKGJJbnRlcnZhbCwgIiUwMnhcbiIpCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZXBfd01heFBhY2tldFNpemUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwNHhcbiIsCisJCQlsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkgJiAweDA3ZmYpOworfQorc3RhdGljIEVQX0FUVFIod01heFBhY2tldFNpemUpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2VwX3R5cGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYywgY2hhciAqYnVmKQoreworCWNoYXIgKnR5cGUgPSAidW5rbm93biI7CisKKwlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQl0eXBlID0gIkNvbnRyb2wiOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCXR5cGUgPSAiSXNvYyI7CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJdHlwZSA9ICJCdWxrIjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCXR5cGUgPSAiSW50ZXJydXB0IjsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB0eXBlKTsKK30KK3N0YXRpYyBFUF9BVFRSKHR5cGUpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2VwX2ludGVydmFsKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MsIGNoYXIgKmJ1ZikKK3sKKwljaGFyIHVuaXQ7CisJdW5zaWduZWQgaW50ZXJ2YWwgPSAwOworCXVuc2lnbmVkIGluOworCisJaW4gPSAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pOworCisJc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCisJCQlpbnRlcnZhbCA9IGRlc2MtPmJJbnRlcnZhbDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQlpbnRlcnZhbCA9IDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCWlmICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCAmJiAhaW4pIC8qIHVmcmFtZXMgcGVyIE5BSyAqLworCQkJaW50ZXJ2YWwgPSBkZXNjLT5iSW50ZXJ2YWw7CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQlpbnRlcnZhbCA9IDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpOworCQllbHNlCisJCQlpbnRlcnZhbCA9IGRlc2MtPmJJbnRlcnZhbDsKKwkJYnJlYWs7CisJfQorCWludGVydmFsICo9ICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyAxMjUgOiAxMDAwOworCWlmIChpbnRlcnZhbCAlIDEwMDApCisJCXVuaXQgPSAndSc7CisJZWxzZSB7CisJCXVuaXQgPSAnbSc7CisJCWludGVydmFsIC89IDEwMDA7CisJfQorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQlY3NcbiIsIGludGVydmFsLCB1bml0KTsKK30KK3N0YXRpYyBFUF9BVFRSKGludGVydmFsKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19lcF9kaXJlY3Rpb24oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYywgY2hhciAqYnVmKQoreworCWNoYXIgKmRpcmVjdGlvbjsKKworCWlmICgoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCQlVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQorCQlkaXJlY3Rpb24gPSAiYm90aCI7CisJZWxzZSBpZiAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCWRpcmVjdGlvbiA9ICJpbiI7CisJZWxzZQorCQlkaXJlY3Rpb24gPSAib3V0IjsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGlyZWN0aW9uKTsKK30KK3N0YXRpYyBFUF9BVFRSKGRpcmVjdGlvbik7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplcF9hdHRyc1tdID0geworCSZlcF9iTGVuZ3RoLmF0dHIsCisJJmVwX2JFbmRwb2ludEFkZHJlc3MuYXR0ciwKKwkmZXBfYm1BdHRyaWJ1dGVzLmF0dHIsCisJJmVwX2JJbnRlcnZhbC5hdHRyLAorCSZlcF93TWF4UGFja2V0U2l6ZS5hdHRyLAorCSZlcF90eXBlLmF0dHIsCisJJmVwX2ludGVydmFsLmF0dHIsCisJJmVwX2RpcmVjdGlvbi5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgdm9pZCBlcF9vYmplY3RfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwlrZnJlZSh0b19lcF9vYmplY3Qoa29iaikpOworfQorCitzdGF0aWMgc3NpemVfdCBlcF9vYmplY3Rfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBlcF9vYmplY3QgKmVwX29iaiA9IHRvX2VwX29iamVjdChrb2JqKTsKKwlzdHJ1Y3QgZXBfYXR0cmlidXRlICplcF9hdHRyID0gdG9fZXBfYXR0cmlidXRlKGF0dHIpOworCisJcmV0dXJuIChlcF9hdHRyLT5zaG93KShlcF9vYmotPnVkZXYsIGVwX29iai0+ZGVzYywgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZXBfb2JqZWN0X3N5c2ZzX29wcyA9IHsKKwkuc2hvdyA9CQkJZXBfb2JqZWN0X3Nob3csCit9OworCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBlcF9vYmplY3Rfa3R5cGUgPSB7CisJLnJlbGVhc2UgPQkJZXBfb2JqZWN0X3JlbGVhc2UsCisJLnN5c2ZzX29wcyA9CQkmZXBfb2JqZWN0X3N5c2ZzX29wcywKKwkuZGVmYXVsdF9hdHRycyA9CWVwX2F0dHJzLAorfTsKKworc3RhdGljIHZvaWQgdXNiX2NyZWF0ZV9lcF9maWxlcyhzdHJ1Y3Qga29iamVjdCAqcGFyZW50LAorCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50LAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgZXBfb2JqZWN0ICplcF9vYmo7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwllcF9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXBfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlcF9vYmopCisJCXJldHVybjsKKworCWVwX29iai0+ZGVzYyA9ICZlbmRwb2ludC0+ZGVzYzsKKwllcF9vYmotPnVkZXYgPSB1ZGV2OworCisJa29iaiA9ICZlcF9vYmotPmtvYmo7CisJa29iamVjdF9zZXRfbmFtZShrb2JqLCAiZXBfJTAyeCIsIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCWtvYmotPnBhcmVudCA9IHBhcmVudDsKKwlrb2JqLT5rdHlwZSA9ICZlcF9vYmplY3Rfa3R5cGU7CisKKwkvKiBEb24ndCB1c2Uga29iamVjdF9yZWdpc3RlciwgYmVjYXVzZSBpdCBnZW5lcmF0ZXMgYSBob3RwbHVnIGV2ZW50ICovCisJa29iamVjdF9pbml0KGtvYmopOworCWlmIChrb2JqZWN0X2FkZChrb2JqKSA9PSAwKQorCQllbmRwb2ludC0+a29iaiA9IGtvYmo7CisJZWxzZQorCQlrb2JqZWN0X3B1dChrb2JqKTsKK30KKworc3RhdGljIHZvaWQgdXNiX3JlbW92ZV9lcF9maWxlcyhzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50KQoreworCisJaWYgKGVuZHBvaW50LT5rb2JqKSB7CisJCWtvYmplY3RfZGVsKGVuZHBvaW50LT5rb2JqKTsKKwkJa29iamVjdF9wdXQoZW5kcG9pbnQtPmtvYmopOworCQllbmRwb2ludC0+a29iaiA9IE5VTEw7CisJfQorfQorCiAvKiBBY3RpdmUgY29uZmlndXJhdGlvbiBmaWVsZHMgKi8KICNkZWZpbmUgdXNiX2FjdGNvbmZpZ19zaG93KGZpZWxkLCBtdWx0aXBsaWVyLCBmb3JtYXRfc3RyaW5nKQkJXAotc3RhdGljIHNzaXplX3QgIHNob3dfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAorc3RhdGljIHNzaXplX3QgIHNob3dfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCiAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOwkJCQlcCkBAIC00NiwyMiArMjQ0LDE3IEBACiB1c2JfYWN0Y29uZmlnX2F0dHIgKGJtQXR0cmlidXRlcywgMSwgIiUyeFxuIikKIHVzYl9hY3Rjb25maWdfYXR0ciAoYk1heFBvd2VyLCAyLCAiJTNkbUFcbiIpCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfY29uZmlndXJhdGlvbl9zdHJpbmcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19jb25maWd1cmF0aW9uX3N0cmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOwotCWludCBsZW47CiAKIAl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKIAlhY3Rjb25maWcgPSB1ZGV2LT5hY3Rjb25maWc7CiAJaWYgKCghYWN0Y29uZmlnKSB8fCAoIWFjdGNvbmZpZy0+c3RyaW5nKSkKIAkJcmV0dXJuIDA7Ci0JbGVuID0gc3ByaW50ZihidWYsIGFjdGNvbmZpZy0+c3RyaW5nLCBQQUdFX1NJWkUpOwotCWlmIChsZW4gPCAwKQotCQlyZXR1cm4gMDsKLQlidWZbbGVuXSA9ICdcbic7Ci0JYnVmW2xlbisxXSA9IDA7Ci0JcmV0dXJuIGxlbisxOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBhY3Rjb25maWctPnN0cmluZyk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY29uZmlndXJhdGlvbiwgU19JUlVHTywgc2hvd19jb25maWd1cmF0aW9uX3N0cmluZywgTlVMTCk7CiAKQEAgLTY5LDcgKzI2Miw4IEBACiB1c2JfYWN0Y29uZmlnX3Nob3coYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMSwgIiV1XG4iKTsKIAogc3RhdGljIHNzaXplX3QKLXNldF9iQ29uZmlndXJhdGlvblZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3NldF9iQ29uZmlndXJhdGlvblZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOwogCWludAkJCWNvbmZpZywgdmFsdWU7CkBAIC04NywxOCArMjgxLDEzIEBACiAKIC8qIFN0cmluZyBmaWVsZHMgKi8KICNkZWZpbmUgdXNiX3N0cmluZ19hdHRyKG5hbWUpCQkJCQkJXAotc3RhdGljIHNzaXplX3QgIHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKK3N0YXRpYyBzc2l6ZV90ICBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCi0JaW50IGxlbjsJCQkJCQkJXAogCQkJCQkJCQkJXAogCXVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOwkJCQkJXAotCWxlbiA9IHNucHJpbnRmKGJ1ZiwgMjU2LCAiJXMiLCB1ZGV2LT5uYW1lKTsJCQlcCi0JaWYgKGxlbiA8IDApCQkJCQkJCVwKLQkJcmV0dXJuIDA7CQkJCQkJXAotCWJ1ZltsZW5dID0gJ1xuJzsJCQkJCQlcCi0JYnVmW2xlbisxXSA9IDA7CQkJCQkJCVwKLQlyZXR1cm4gbGVuKzE7CQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdWRldi0+bmFtZSk7CQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93XyMjbmFtZSwgTlVMTCk7CiAKQEAgLTE2Nyw3ICszNTYsOCBAQAogLyogRGVzY3JpcHRvciBmaWVsZHMgKi8KICNkZWZpbmUgdXNiX2Rlc2NyaXB0b3JfYXR0cl9sZTE2KGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93XyMjZmllbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCWNoYXIgKmJ1ZikJCQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkJCQkJXAogCQkJCQkJCQkJXApAQCAtMTgzLDcgKzM3Myw4IEBACiAKICNkZWZpbmUgdXNiX2Rlc2NyaXB0b3JfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQkJCVwKK3Nob3dfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQljaGFyICpidWYpCQkJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTIzNiwxOSArNDI3LDIxIEBACiAJaWYgKHVkZXYtPnNlcmlhbCkKIAkJZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9zZXJpYWwpOwogCWRldmljZV9jcmVhdGVfZmlsZSAoZGV2LCAmZGV2X2F0dHJfY29uZmlndXJhdGlvbik7CisJdXNiX2NyZWF0ZV9lcF9maWxlcygmZGV2LT5rb2JqLCAmdWRldi0+ZXAwLCB1ZGV2KTsKIH0KIAogdm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVkZXYtPmRldjsKIAorCXVzYl9yZW1vdmVfZXBfZmlsZXMoJnVkZXYtPmVwMCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkZXZfYXR0cl9ncnApOwogCi0JaWYgKHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcikKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWFudWZhY3R1cmVyKTsKLQlpZiAodWRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCkKKwlpZiAodWRldi0+cHJvZHVjdCkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpOwotCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIpCisJaWYgKHVkZXYtPnNlcmlhbCkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3NlcmlhbCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlIChkZXYsICZkZXZfYXR0cl9jb25maWd1cmF0aW9uKTsKIH0KQEAgLTI1NiwxMSArNDQ5LDEzIEBACiAvKiBJbnRlcmZhY2UgZmllbGRzICovCiAjZGVmaW5lIHVzYl9pbnRmX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93XyMjZmllbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCWNoYXIgKmJ1ZikJCQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZSAoZGV2KTsJCVwKIAkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCBmb3JtYXRfc3RyaW5nLCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5maWVsZCk7IFwKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCBmb3JtYXRfc3RyaW5nLAkJCQlcCisJCQlpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5maWVsZCk7IAkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKIApAQCAtMjcxLDcgKzQ2Niw4IEBACiB1c2JfaW50Zl9hdHRyIChiSW50ZXJmYWNlU3ViQ2xhc3MsICIlMDJ4XG4iKQogdXNiX2ludGZfYXR0ciAoYkludGVyZmFjZVByb3RvY29sLCAiJTAyeFxuIikKIAotc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcmZhY2Vfc3RyaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW50ZXJmYWNlX3N0cmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CkBAIC0yODgsMzQgKzQ4NCwyOCBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGludGVyZmFjZSwgU19JUlVHTywgc2hvd19pbnRlcmZhY2Vfc3RyaW5nLCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19tb2RhbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X21vZGFsaWFzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlpbnQgbGVuOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKIAogCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CiAJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAKLQlsZW4gPSBzcHJpbnRmKGJ1ZiwgInVzYjp2JTA0WHAlMDRYZCUwNFhkYyUwMlhkc2MlMDJYZHAlMDJYaWMiLAotCQkJICAgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAotCQkJICAgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKLQkJCSAgICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCi0JCQkgICAgICAgdWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCi0JCQkgICAgICAgdWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MsCi0JCQkgICAgICAgdWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpOwotCWJ1ZiArPSBsZW47Ci0KLQlpZiAodWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gMCkgewotCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKLQotCQlyZXR1cm4gbGVuICsgc3ByaW50ZihidWYsICIlMDJYaXNjJTAyWGlwJTAyWFxuIiwKLQkJCSAgICAgICBhbHQtPmRlc2MuYkludGVyZmFjZUNsYXNzLAotCQkJICAgICAgIGFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCi0JCQkgICAgICAgYWx0LT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCk7Ci0gCX0gZWxzZSB7Ci0JCXJldHVybiBsZW4gKyBzcHJpbnRmKGJ1ZiwgIippc2MqaXAqXG4iKTsKLQl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAidXNiOnYlMDRYcCUwNFhkJTA0WGRjJTAyWGRzYyUwMlhkcCUwMlgiCisJCQkiaWMlMDJYaXNjJTAyWGlwJTAyWFxuIiwKKwkJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAorCQkJdWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCisJCQl1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKKwkJCXVkZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sLAorCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VDbGFzcywKKwkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCisJCQlhbHQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgc2hvd19tb2RhbGlhcywgTlVMTCk7CiAKQEAgLTMzMywyMCArNTIzLDQ3IEBACiAJLmF0dHJzID0gaW50Zl9hdHRycywKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfY3JlYXRlX2ludGZfZXBfZmlsZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJaW50IGk7CisKKwlpZmFjZV9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKQorCQl1c2JfY3JlYXRlX2VwX2ZpbGVzKCZpbnRmLT5kZXYua29iaiwgJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLAorCQkJCXVkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3JlbW92ZV9pbnRmX2VwX2ZpbGVzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJaW50IGk7CisKKwlpZmFjZV9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKQorCQl1c2JfcmVtb3ZlX2VwX2ZpbGVzKCZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXSk7Cit9CisKIHZvaWQgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKIAlzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmaW50Zl9hdHRyX2dycCk7CiAKLQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZykKKwlpZiAoYWx0LT5zdHJpbmcgPT0gTlVMTCkKKwkJYWx0LT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIGFsdC0+ZGVzYy5pSW50ZXJmYWNlKTsKKwlpZiAoYWx0LT5zdHJpbmcpCiAJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW50ZXJmYWNlKTsKLQkJCisJdXNiX2NyZWF0ZV9pbnRmX2VwX2ZpbGVzKGludGYsIHVkZXYpOwogfQogCiB2b2lkIHVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CisJdXNiX3JlbW92ZV9pbnRmX2VwX2ZpbGVzKGludGYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZpbnRmX2F0dHJfZ3JwKTsKIAogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2ludGVyZmFjZSk7Ci0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCmluZGV4IGIzMjg5OGUuLmYyYTFmZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtMjM3LDcgKzIzNyw4IEBACiAJICAgIChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX0RFRkFVTFQpIHx8CiAJICAgICghZGV2LT5idXMpIHx8IChkZXYtPmRldm51bSA8PSAwKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwlpZiAoZGV2LT5idXMtPmNvbnRyb2xsZXItPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX09OCisJCQl8fCBkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCWlmICghKG9wID0gZGV2LT5idXMtPm9wKSB8fCAhb3AtPnN1Ym1pdF91cmIpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKaW5kZXggNGM1N2YzZi4uMGVlZmZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCkBAIC0xMDcsMTAgKzEwNywxOSBAQAogCWlkID0gdXNiX21hdGNoX2lkIChpbnRmLCBkcml2ZXItPmlkX3RhYmxlKTsKIAlpZiAoaWQpIHsKIAkJZGV2X2RiZyAoZGV2LCAiJXMgLSBnb3QgaWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJLyogSW50ZXJmYWNlICJwb3dlciBzdGF0ZSIgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBoYXJkd2FyZQorCQkgKiBzdGF0ZSB3aGF0c29ldmVyLiAgV2UgdXNlIGl0IHRvIHJlY29yZCB3aGVuIGl0J3MgYm91bmQgdG8KKwkJICogYSBkcml2ZXIgdGhhdCBtYXkgc3RhcnQgSS8wOiAgaXQncyBub3QgZnJvemVuL3F1aWVzY2VkLgorCQkgKi8KKwkJbWFya19hY3RpdmUoaW50Zik7CiAJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQklORElORzsKIAkJZXJyb3IgPSBkcml2ZXItPnByb2JlIChpbnRmLCBpZCk7Ci0JCWludGYtPmNvbmRpdGlvbiA9IGVycm9yID8gVVNCX0lOVEVSRkFDRV9VTkJPVU5EIDoKLQkJCQlVU0JfSU5URVJGQUNFX0JPVU5EOworCQlpZiAoZXJyb3IpIHsKKwkJCW1hcmtfcXVpZXNjZWQoaW50Zik7CisJCQlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CisJCX0gZWxzZQorCQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CT1VORDsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0xMzYsNiArMTQ1LDcgQEAKIAkJCTApOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOworCW1hcmtfcXVpZXNjZWQoaW50Zik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5OSw2ICszMDksNyBAQAogCWRldi0+ZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwogCXVzYl9zZXRfaW50ZmRhdGEoaWZhY2UsIHByaXYpOwogCWlmYWNlLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JPVU5EOworCW1hcmtfYWN0aXZlKGlmYWNlKTsKIAogCS8qIGlmIGludGVyZmFjZSB3YXMgYWxyZWFkeSBhZGRlZCwgYmluZCBub3c7IGVsc2UgbGV0CiAJICogdGhlIGZ1dHVyZSBkZXZpY2VfYWRkKCkgYmluZCBpdCwgYnlwYXNzaW5nIHByb2JlKCkKQEAgLTM0NSw2ICszNTYsNyBAQAogCWRldi0+ZHJpdmVyID0gTlVMTDsKIAl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBOVUxMKTsKIAlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOworCW1hcmtfcXVpZXNjZWQoaWZhY2UpOwogfQogCiAvKioKQEAgLTU1Nyw2ICs1NjksNyBAQAogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKIAlpbnQgaSA9IDA7CiAJaW50IGxlbmd0aCA9IDA7CiAKQEAgLTU3Myw3ICs1ODYsOCBAQAogCiAJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKIAl1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7Ci0JCisJYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKIAlpZiAodXNiX2Rldi0+ZGV2bnVtIDwgMCkgewogCQlwcl9kZWJ1ZyAoInVzYiAlczogYWxyZWFkeSBkZWxldGVkP1xuIiwgZGV2LT5idXNfaWQpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTYxNSw0NiArNjI5LDI3IEBACiAJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICh1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSAwKSB7Ci0JCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCSJJTlRFUkZBQ0U9JWQvJWQvJWQiLAorCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCisJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCQlhbHQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkJLyogMi40IG9ubHkgZXhwb3NlZCBpbnRlcmZhY2UgemVyby4gIGluIDIuNSwgaG90cGx1ZwotCQkgKiBhZ2VudHMgYXJlIGNhbGxlZCBmb3IgYWxsIGludGVyZmFjZXMsIGFuZCBjYW4gdXNlCi0JCSAqICRERVZQQVRIL2JJbnRlcmZhY2VOdW1iZXIgaWYgbmVjZXNzYXJ5LgotCQkgKi8KLQkJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAotCQkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAotCQkJCQkiSU5URVJGQUNFPSVkLyVkLyVkIiwKLQkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VDbGFzcywKLQkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKLQkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlpZiAoYWRkX2hvdHBsdWdfZW52X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCi0JCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCi0JCQkJCSJNT0RBTElBUz11c2I6diUwNFhwJTA0WGQlMDRYZGMlMDJYZHNjJTAyWGRwJTAyWGljJTAyWGlzYyUwMlhpcCUwMlgiLAotCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAotCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCi0JCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzLAotCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKLQkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wsCi0JCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCi0JCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCi0JCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0gCX0gZWxzZSB7Ci0JCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKLQkJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKLQkJCQkJIk1PREFMSUFTPXVzYjp2JTA0WHAlMDRYZCUwNFhkYyUwMlhkc2MlMDJYZHAlMDJYaWMqaXNjKmlwKiIsCi0JCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAotCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCi0JCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKLQkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCi0JCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzLAotCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkJIk1PREFMSUFTPXVzYjp2JTA0WHAlMDRYZCUwNFhkYyUwMlhkc2MlMDJYZHAlMDJYaWMlMDJYaXNjJTAyWGlwJTAyWCIsCisJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCwKKwkJCQlhbHQtPmRlc2MuYkludGVyZmFjZUNsYXNzLAorCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCisJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCkpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZW52cFtpXSA9IE5VTEw7CiAKQEAgLTcwOSwxMiArNzA0LDEwIEBACiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKIAotCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsKLQogCWJ1cyA9IHVzYl9idXNfZ2V0KGJ1cyk7CiAJaWYgKCFidXMpIHsKIAkJa2ZyZWUoZGV2KTsKQEAgLTE0MDIsMTMgKzEzOTUsMzAgQEAKIAkJCXVzYl9waXBlaW4gKHBpcGUpID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CiB9CiAKK3N0YXRpYyBpbnQgdmVyaWZ5X3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnVudXNlZCkKK3sKKwlyZXR1cm4gKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pID8gLUVCVVNZIDogMDsKK30KKwogc3RhdGljIGludCB1c2JfZ2VuZXJpY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7Ci0Jc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOworCWludAkJCXN0YXR1czsKIAotCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQotCQlyZXR1cm4gdXNiX3N1c3BlbmRfZGV2aWNlICh0b191c2JfZGV2aWNlKGRldiksIG1lc3NhZ2UpOworCS8qIFVTQiBkZXZpY2VzIGVudGVyIFNVU1BFTkQgc3RhdGUgdGhyb3VnaCB0aGVpciBodWJzLCBidXQgY2FuIGJlCisJICogbWFya2VkIGZvciBGUkVFWkUgYXMgc29vbiBhcyB0aGVpciBjaGlsZHJlbiBhcmUgYWxyZWFkeSBpZGxlZC4KKwkgKiBCdXQgdGhvc2Ugc2VtYW50aWNzIGFyZSB1c2VsZXNzLCBzbyB3ZSBlcXVhdGUgdGhlIHR3byAoc2lnaCkuCisJICovCisJaWYgKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpIHsKKwkJaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gbWVzc2FnZS5ldmVudCkKKwkJCXJldHVybiAwOworCQkvKiB3ZSBuZWVkIHRvIHJ1bGUgb3V0IGJvZ3VzIHJlcXVlc3RzIHRocm91Z2ggc3lzZnMgKi8KKwkJc3RhdHVzID0gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgTlVMTCwgdmVyaWZ5X3N1c3BlbmRlZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworIAkJcmV0dXJuIHVzYl9zdXNwZW5kX2RldmljZSAodG9fdXNiX2RldmljZShkZXYpKTsKKwl9CiAKIAlpZiAoKGRldi0+ZHJpdmVyID09IE5VTEwpIHx8CiAJICAgIChkZXYtPmRyaXZlcl9kYXRhID09ICZ1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YSkpCkBAIC0xNDE3LDIzICsxNDI3LDQ0IEBACiAJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKIAlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAotCS8qIHRoZXJlJ3Mgb25seSBvbmUgVVNCIHN1c3BlbmQgc3RhdGUgKi8KLQlpZiAoaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50KQorCS8qIHdpdGggbm8gaGFyZHdhcmUsIFVTQiBpbnRlcmZhY2VzIG9ubHkgdXNlIEZSRUVaRSBhbmQgT04gc3RhdGVzICovCisJaWYgKCFpc19hY3RpdmUoaW50ZikpCiAJCXJldHVybiAwOwogCi0JaWYgKGRyaXZlci0+c3VzcGVuZCkKLQkJcmV0dXJuIGRyaXZlci0+c3VzcGVuZChpbnRmLCBtZXNzYWdlKTsKLQlyZXR1cm4gMDsKKwlpZiAoZHJpdmVyLT5zdXNwZW5kICYmIGRyaXZlci0+cmVzdW1lKSB7CisJCXN0YXR1cyA9IGRyaXZlci0+c3VzcGVuZChpbnRmLCBtZXNzYWdlKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJzdXNwZW5kIiwgc3RhdHVzKTsKKwkJZWxzZQorCQkJbWFya19xdWllc2NlZChpbnRmKTsKKwl9IGVsc2UgeworCQkvLyBGSVhNRSBlbHNlIGlmIHRoZXJlJ3Mgbm8gc3VzcGVuZCBtZXRob2QsIGRpc2Nvbm5lY3QuLi4KKwkJZGV2X3dhcm4oZGV2LCAibm8gJXM/XG4iLCAic3VzcGVuZCIpOworCQlzdGF0dXMgPSAwOworCX0KKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IHVzYl9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7Ci0Jc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCWludAkJCXN0YXR1czsKIAotCS8qIGRldmljZXMgcmVzdW1lIHRocm91Z2ggdGhlaXIgaHViICovCi0JaWYgKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pCisJCXJldHVybiAwOworCisJLyogbWFyayB0aGluZ3MgYXMgIm9uIiBpbW1lZGlhdGVseSwgbm8gbWF0dGVyIHdoYXQgZXJyb3JzIGNyb3AgdXAgKi8KKwlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID0gUE1fRVZFTlRfT047CisKKwkvKiBkZXZpY2VzIHJlc3VtZSB0aHJvdWdoIHRoZWlyIGh1YnMgKi8KKwlpZiAoZGV2LT5kcml2ZXIgPT0gJnVzYl9nZW5lcmljX2RyaXZlcikgeworCQl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQkJcmV0dXJuIDA7CiAJCXJldHVybiB1c2JfcmVzdW1lX2RldmljZSAodG9fdXNiX2RldmljZShkZXYpKTsKKwl9CiAKIAlpZiAoKGRldi0+ZHJpdmVyID09IE5VTEwpIHx8CiAJICAgIChkZXYtPmRyaXZlcl9kYXRhID09ICZ1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YSkpCkBAIC0xNDQyLDggKzE0NzMsMjIgQEAKIAlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwogCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCi0JaWYgKGRyaXZlci0+cmVzdW1lKQotCQlyZXR1cm4gZHJpdmVyLT5yZXN1bWUoaW50Zik7CisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJcmV0dXJuIDA7CisKKwkvKiBpZiBkcml2ZXIgd2FzIHN1c3BlbmRlZCwgaXQgaGFzIGEgcmVzdW1lIG1ldGhvZDsKKwkgKiBob3dldmVyLCBzeXNmcyBjYW4gd3JvbmdseSBtYXJrIHRoaW5ncyBhcyBzdXNwZW5kZWQKKwkgKiAob24gdGhlICJubyBzdXNwZW5kIG1ldGhvZCIgRklYTUUgcGF0aCBhYm92ZSkKKwkgKi8KKwlpZiAoZHJpdmVyLT5yZXN1bWUpIHsKKwkJc3RhdHVzID0gZHJpdmVyLT5yZXN1bWUoaW50Zik7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJyZXN1bWUiLCBzdGF0dXMpOworCQkJbWFya19xdWllc2NlZChpbnRmKTsKKwkJfQorCX0gZWxzZQorCQlkZXZfd2FybihkZXYsICJubyAlcz9cbiIsICJyZXN1bWUiKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuaCBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKaW5kZXggZTY1MDRmMy4uMWM0YTY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCkBAIC0xMywxMiArMTMsMTQgQEAKIAogZXh0ZXJuIGludCB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCiAJCXVuc2lnbmVkIGludCBzaXplKTsKK2V4dGVybiBjaGFyICp1c2JfY2FjaGVfc3RyaW5nKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgaW5kZXgpOwogZXh0ZXJuIGludCB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGNvbmZpZ3VyYXRpb24pOwogCiBleHRlcm4gdm9pZCB1c2JfbG9ja19hbGxfZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIHVzYl91bmxvY2tfYWxsX2RldmljZXModm9pZCk7CiAKIGV4dGVybiB2b2lkIHVzYl9raWNrX2todWJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiX3N1c3BlbmRfcm9vdF9odWIoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYpOwogZXh0ZXJuIHZvaWQgdXNiX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIGludCAgdXNiX2h1Yl9pbml0KHZvaWQpOwpAQCAtMjgsNiArMzAsMjggQEAKIGV4dGVybiBpbnQgdXNiX2hvc3RfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHVzYl9ob3N0X2NsZWFudXAodm9pZCk7CiAKK2V4dGVybiBpbnQgdXNiX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCB1c2JfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKKworCisvKiBJbnRlcmZhY2VzIGFuZCB0aGVpciAicG93ZXIgc3RhdGUiIGFyZSBvd25lZCBieSB1c2Jjb3JlICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2FjdGl2ZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqZikKK3sKKwlmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPSBQTV9FVkVOVF9PTjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfcXVpZXNjZWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmYpCit7CisJZi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID0gUE1fRVZFTlRfRlJFRVpFOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19hY3RpdmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmYpCit7CisJcmV0dXJuIGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTjsKK30KKworCiAvKiBmb3IgbGFiZWxpbmcgZGlhZ25vc3RpY3MgKi8KIGV4dGVybiBjb25zdCBjaGFyICp1c2Jjb3JlX25hbWU7CiAKQEAgLTM5LDkgKzYzLDYgQEAKIAogZXh0ZXJuIGludCB1c2JkZXZfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHVzYmRldl9jbGVhbnVwKHZvaWQpOwotZXh0ZXJuIHZvaWQgdXNiZGV2X2FkZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIHVzYmRldl9yZW1vdmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7Ci1leHRlcm4gc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldl9sb29rdXBfbWlub3IoaW50IG1pbm9yKTsKIAogc3RydWN0IGRldl9zdGF0ZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgICAgIC8qIHN0YXRlIGxpc3QgKi8KQEAgLTU4LDMgKzc5LDkgQEAKIAl1bnNpZ25lZCBsb25nIGlmY2xhaW1lZDsKIH07CiAKKy8qIGludGVybmFsIG5vdGlmeSBzdHVmZiAqLworZXh0ZXJuIHZvaWQgdXNiX25vdGlmeV9hZGRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKK2V4dGVybiB2b2lkIHVzYl9ub3RpZnlfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CitleHRlcm4gdm9pZCB1c2Jfbm90aWZ5X2FkZF9idXMoc3RydWN0IHVzYl9idXMgKnVidXMpOworZXh0ZXJuIHZvaWQgdXNiX25vdGlmeV9yZW1vdmVfYnVzKHN0cnVjdCB1c2JfYnVzICp1YnVzKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDUwMzIwMTcuLjAyMTA2YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTk2Nyw2ICs5NjcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZHVtbXlfdWRjX2RyaXZlciA9IHsKIAkubmFtZQkJPSAoY2hhciAqKSBnYWRnZXRfbmFtZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCiAJLnByb2JlCQk9IGR1bW15X3VkY19wcm9iZSwKIAkucmVtb3ZlCQk9IGR1bW15X3VkY19yZW1vdmUsCkBAIC0xNzUxLDcgKzE3NTIsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfaHViX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IGR1bW15X2J1c19zdXNwZW5kIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXN0cnVjdCBkdW1teSAqZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOwogCkBAIC0xNzYyLDcgKzE3NjMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X2h1Yl9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IGR1bW15X2J1c19yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGR1bW15ICpkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CiAKQEAgLTE4OTQsOCArMTg5NSw4IEBACiAKIAkuaHViX3N0YXR1c19kYXRhID0gCWR1bW15X2h1Yl9zdGF0dXMsCiAJLmh1Yl9jb250cm9sID0gCQlkdW1teV9odWJfY29udHJvbCwKLQkuaHViX3N1c3BlbmQgPQkJZHVtbXlfaHViX3N1c3BlbmQsCi0JLmh1Yl9yZXN1bWUgPQkJZHVtbXlfaHViX3Jlc3VtZSwKKwkuYnVzX3N1c3BlbmQgPQkJZHVtbXlfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJZHVtbXlfYnVzX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgZHVtbXlfaGNkX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0xOTM2LDEzICsxOTM3LDYgQEAKIAlkZXZfZGJnIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAloY2QgPSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CiAKLSNpZm5kZWYgQ09ORklHX1VTQl9TVVNQRU5ECi0JLyogT3RoZXJ3aXNlIHRoaXMgd291bGQgbmV2ZXIgaGFwcGVuICovCi0JdXNiX2xvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOwotCWR1bW15X2h1Yl9zdXNwZW5kIChoY2QpOwotCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOwotI2VuZGlmCi0KIAloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCXJldHVybiAwOwogfQpAQCAtMTk1NSwxOSArMTk0OSwxMyBAQAogCWhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKIAotI2lmbmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKLQkvKiBPdGhlcndpc2UgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4gKi8KLQl1c2JfbG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7Ci0JZHVtbXlfaHViX3Jlc3VtZSAoaGNkKTsKLQl1c2JfdW5sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKLSNlbmRpZgotCiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyAoaGNkKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGR1bW15X2hjZF9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCS5wcm9iZQkJPSBkdW1teV9oY2RfcHJvYmUsCiAJLnJlbW92ZQkJPSBkdW1teV9oY2RfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwppbmRleCBmMTAyNGU4Li44ZjQwMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtMjUzMyw2ICsyNTMzLDcgQEAKIAogCS5kcml2ZXIgCT0gewogCQkubmFtZQkJPSAoY2hhciAqKSBzaG9ydG5hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLy8gLnNodXRkb3duID0gLi4uCiAJCS8vIC5zdXNwZW5kID0gLi4uCiAJCS8vIC5yZXN1bWUgPSAuLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCBhNDFkOWQ0Li5lYTA5YWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC0yMjQsNiArMjI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjY5LDcgKzY3MCw2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJdGhyZWFkX3dxaDsKIAlpbnQJCQl0aHJlYWRfd2FrZXVwX25lZWRlZDsKIAlzdHJ1Y3QgY29tcGxldGlvbgl0aHJlYWRfbm90aWZpZXI7Ci0JaW50CQkJdGhyZWFkX3BpZDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZF90YXNrOwogCXNpZ3NldF90CQl0aHJlYWRfc2lnbmFsX21hc2s7CiAKQEAgLTEwODQsNyArMTA4NCw2IEBACiBzdGF0aWMgdm9pZCByYWlzZV9leGNlcHRpb24oc3RydWN0IGZzZ19kZXYgKmZzZywgZW51bSBmc2dfc3RhdGUgbmV3X3N0YXRlKQogewogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkX3Rhc2s7CiAKIAkvKiBEbyBub3RoaW5nIGlmIGEgaGlnaGVyLXByaW9yaXR5IGV4Y2VwdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgogCSAqIElmIGEgbG93ZXItb3ItZXF1YWwgcHJpb3JpdHkgZXhjZXB0aW9uIGlzIGluIHByb2dyZXNzLCBwcmVlbXB0IGl0CkBAIC0xMDkzLDkgKzEwOTIsOSBAQAogCWlmIChmc2ctPnN0YXRlIDw9IG5ld19zdGF0ZSkgewogCQlmc2ctPmV4Y2VwdGlvbl9yZXFfdGFnID0gZnNnLT5lcDBfcmVxX3RhZzsKIAkJZnNnLT5zdGF0ZSA9IG5ld19zdGF0ZTsKLQkJdGhyZWFkX3Rhc2sgPSBmc2ctPnRocmVhZF90YXNrOwotCQlpZiAodGhyZWFkX3Rhc2spCi0JCQlzZW5kX3NpZ19pbmZvKFNJR1VTUjEsIFNFTkRfU0lHX0ZPUkNFRCwgdGhyZWFkX3Rhc2spOworCQlpZiAoZnNnLT50aHJlYWRfdGFzaykKKwkJCXNlbmRfc2lnX2luZm8oU0lHVVNSMSwgU0VORF9TSUdfRk9SQ0VELAorCQkJCQlmc2ctPnRocmVhZF90YXNrKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNnLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0zMzgzLDExICszMzgyLDYgQEAKIHsKIAlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBmc2dfOwogCi0JZnNnLT50aHJlYWRfdGFzayA9IGN1cnJlbnQ7Ci0KLQkvKiBSZWxlYXNlIGFsbCBvdXIgdXNlcnNwYWNlIHJlc291cmNlcyAqLwotCWRhZW1vbml6ZSgiZmlsZS1zdG9yYWdlLWdhZGdldCIpOwotCiAJLyogQWxsb3cgdGhlIHRocmVhZCB0byBiZSBraWxsZWQgYnkgYSBzaWduYWwsIGJ1dCBzZXQgdGhlIHNpZ25hbCBtYXNrCiAJICogdG8gYmxvY2sgZXZlcnl0aGluZyBidXQgSU5ULCBURVJNLCBLSUxMLCBhbmQgVVNSMS4gKi8KIAlzaWdpbml0c2V0aW52KCZmc2ctPnRocmVhZF9zaWduYWxfbWFzaywgc2lnbWFzayhTSUdJTlQpIHwKQEAgLTM0MDAsOSArMzM5NCw2IEBACiAJICogdGhhdCBleHBlY3RzIGEgX191c2VyIHBvaW50ZXIgYW5kIGl0IHdpbGwgd29yayBva2F5LiAqLwogCXNldF9mcyhnZXRfZHMoKSk7CiAKLQkvKiBXYWl0IGZvciB0aGUgZ2FkZ2V0IHJlZ2lzdHJhdGlvbiB0byBmaW5pc2ggdXAgKi8KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmc2ctPnRocmVhZF9ub3RpZmllcik7Ci0KIAkvKiBUaGUgbWFpbiBsb29wICovCiAJd2hpbGUgKGZzZy0+c3RhdGUgIT0gRlNHX1NUQVRFX1RFUk1JTkFURUQpIHsKIAkJaWYgKGV4Y2VwdGlvbl9pbl9wcm9ncmVzcyhmc2cpIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0zNDQwLDggKzM0MzEsOSBAQAogCQlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CiAJCX0KIAorCXNwaW5fbG9ja19pcnEoJmZzZy0+bG9jayk7CiAJZnNnLT50aHJlYWRfdGFzayA9IE5VTEw7Ci0JZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CiAKIAkvKiBJbiBjYXNlIHdlIGFyZSBleGl0aW5nIGJlY2F1c2Ugb2YgYSBzaWduYWwsIHVucmVnaXN0ZXIgdGhlCiAJICogZ2FkZ2V0IGRyaXZlciBhbmQgY2xvc2UgdGhlIGJhY2tpbmcgZmlsZS4gKi8KQEAgLTM4MzEsMTIgKzM4MjMsMTEgQEAKIAogCS8qIENyZWF0ZSB0aGUgTFVOcywgb3BlbiB0aGVpciBiYWNraW5nIGZpbGVzLCBhbmQgcmVnaXN0ZXIgdGhlCiAJICogTFVOIGRldmljZXMgaW4gc3lzZnMuICovCi0JZnNnLT5sdW5zID0ga21hbGxvYyhpICogc2l6ZW9mKHN0cnVjdCBsdW4pLCBHRlBfS0VSTkVMKTsKKwlmc2ctPmx1bnMgPSBremFsbG9jKGkgKiBzaXplb2Yoc3RydWN0IGx1biksIEdGUF9LRVJORUwpOwogCWlmICghZnNnLT5sdW5zKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCW1lbXNldChmc2ctPmx1bnMsIDAsIGkgKiBzaXplb2Yoc3RydWN0IGx1bikpOwogCWZzZy0+bmx1bnMgPSBpOwogCiAJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgewpAQCAtMzk1OSwxMCArMzk1MCwxMiBAQAogCQlzcHJpbnRmKCZzZXJpYWxbaV0sICIlMDJYIiwgYyk7CiAJfQogCi0JaWYgKChyYyA9IGtlcm5lbF90aHJlYWQoZnNnX21haW5fdGhyZWFkLCBmc2csIChDTE9ORV9WTSB8IENMT05FX0ZTIHwKLQkJCUNMT05FX0ZJTEVTKSkpIDwgMCkKKwlmc2ctPnRocmVhZF90YXNrID0ga3RocmVhZF9jcmVhdGUoZnNnX21haW5fdGhyZWFkLCBmc2csCisJCQkiZmlsZS1zdG9yYWdlLWdhZGdldCIpOworCWlmIChJU19FUlIoZnNnLT50aHJlYWRfdGFzaykpIHsKKwkJcmMgPSBQVFJfRVJSKGZzZy0+dGhyZWFkX3Rhc2spOwogCQlnb3RvIG91dDsKLQlmc2ctPnRocmVhZF9waWQgPSByYzsKKwl9CiAKIAlJTkZPKGZzZywgRFJJVkVSX0RFU0MgIiwgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAlJTkZPKGZzZywgIk51bWJlciBvZiBMVU5zPSVkXG4iLCBmc2ctPm5sdW5zKTsKQEAgLTM5OTQsNyArMzk4NywxMiBAQAogCURCRyhmc2csICJyZW1vdmFibGU9JWQsIHN0YWxsPSVkLCBidWZsZW49JXVcbiIsCiAJCQltb2RfZGF0YS5yZW1vdmFibGUsIG1vZF9kYXRhLmNhbl9zdGFsbCwKIAkJCW1vZF9kYXRhLmJ1Zmxlbik7Ci0JREJHKGZzZywgIkkvTyB0aHJlYWQgcGlkOiAlZFxuIiwgZnNnLT50aHJlYWRfcGlkKTsKKwlEQkcoZnNnLCAiSS9PIHRocmVhZCBwaWQ6ICVkXG4iLCBmc2ctPnRocmVhZF90YXNrLT5waWQpOworCisJc2V0X2JpdChSRUdJU1RFUkVELCAmZnNnLT5hdG9taWNfYml0ZmxhZ3MpOworCisJLyogVGVsbCB0aGUgdGhyZWFkIHRvIHN0YXJ0IHdvcmtpbmcgKi8KKwl3YWtlX3VwX3Byb2Nlc3MoZnNnLT50aHJlYWRfdGFzayk7CiAJcmV0dXJuIDA7CiAKIGF1dG9jb25mX2ZhaWw6CkBAIC00MDQ2LDYgKzQwNDQsNyBAQAogCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9IChjaGFyICopIHNob3J0bmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkvLyAucmVsZWFzZSA9IC4uLgogCQkvLyAuc3VzcGVuZCA9IC4uLgogCQkvLyAucmVzdW1lID0gLi4uCkBAIC00MDU3LDEwICs0MDU2LDkgQEAKIHsKIAlzdHJ1Y3QgZnNnX2RldgkJKmZzZzsKIAotCWZzZyA9IGttYWxsb2Moc2l6ZW9mICpmc2csIEdGUF9LRVJORUwpOworCWZzZyA9IGt6YWxsb2Moc2l6ZW9mICpmc2csIEdGUF9LRVJORUwpOwogCWlmICghZnNnKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZnNnLCAwLCBzaXplb2YgKmZzZyk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzZy0+bG9jayk7CiAJaW5pdF9yd3NlbSgmZnNnLT5maWxlc2VtKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmc2ctPnRocmVhZF93cWgpOwpAQCAtNDA4NiwxNSArNDA4NCw5IEBACiAJaWYgKChyYyA9IGZzZ19hbGxvYygpKSAhPSAwKQogCQlyZXR1cm4gcmM7CiAJZnNnID0gdGhlX2ZzZzsKLQlpZiAoKHJjID0gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoJmZzZ19kcml2ZXIpKSAhPSAwKSB7CisJaWYgKChyYyA9IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKCZmc2dfZHJpdmVyKSkgIT0gMCkKIAkJZnNnX2ZyZWUoZnNnKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlzZXRfYml0KFJFR0lTVEVSRUQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7Ci0KLQkvKiBUZWxsIHRoZSB0aHJlYWQgdG8gc3RhcnQgd29ya2luZyAqLwotCWNvbXBsZXRlKCZmc2ctPnRocmVhZF9ub3RpZmllcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogbW9kdWxlX2luaXQoZnNnX2luaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IGIwZjNjZDYuLjY1NDQ2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0xOTcwLDYgKzE5NzAsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdva3VfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBkcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JZ29rdV9wcm9iZSwKIAkucmVtb3ZlID0JZ29rdV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IDAxMmQxZTUuLjliMzY3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC0yMTQwLDYgKzIxNDAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKIAkubmFtZSA9IChjaGFyICopZHJpdmVyX25hbWUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKIAkucHJvYmUgPSBsaDdhNDB4X3VkY19wcm9iZSwKIAkucmVtb3ZlID0gbGg3YTQweF91ZGNfcmVtb3ZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCBjMzJlMWY3Li4wZGM2YmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTI5NDgsNiArMjk0OCw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmV0MjI4MF9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopIGRyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9CXBjaV9pZHMsCisJLm93bmVyID0JVEhJU19NT0RVTEUsCiAKIAkucHJvYmUgPQluZXQyMjgwX3Byb2JlLAogCS5yZW1vdmUgPQluZXQyMjgwX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKaW5kZXggYjc4ODVkYy4uNDFjOTZiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZmluaXNoX291dF9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgaW50IHN0YXR1cykKK2ZpbmlzaF9vdXRfZG1hKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEsIGludCBzdGF0dXMsIGludCBvbmUpCiB7CiAJdTE2CWNvdW50OwogCkBAIC02OTksNiArNjk5LDggQEAKIAkJZXAtPmRtYV9jb3VudGVyID0gKHUxNikgKHJlcS0+cmVxLmRtYSArIHJlcS0+cmVxLmFjdHVhbCk7CiAJY291bnQgPSBkbWFfZGVzdF9sZW4oZXAsIHJlcS0+cmVxLmRtYSArIHJlcS0+cmVxLmFjdHVhbCk7CiAJY291bnQgKz0gcmVxLT5yZXEuYWN0dWFsOworCWlmIChvbmUpCisJCWNvdW50LS07CiAJaWYgKGNvdW50IDw9IHJlcS0+cmVxLmxlbmd0aCkKIAkJcmVxLT5yZXEuYWN0dWFsID0gY291bnQ7CiAKQEAgLTc0Nyw3ICs3NDksNyBAQAogCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKIAkJCXJlcSA9IGNvbnRhaW5lcl9vZihlcC0+cXVldWUubmV4dCwKIAkJCQkJc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7Ci0JCQlmaW5pc2hfb3V0X2RtYShlcCwgcmVxLCAwKTsKKwkJCWZpbmlzaF9vdXRfZG1hKGVwLCByZXEsIDAsIGRtYW5fc3RhdCAmIFVEQ19ETUFfUlhfU0IpOwogCQl9CiAJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19SWE5fRU9UOwogCkBAIC05MjUsNyArOTI3LDcgQEAKIAkJd2hpbGUgKFVEQ19SWERNQV9DRkdfUkVHICYgbWFzaykKIAkJCXVkZWxheSgxMCk7CiAJCWlmIChyZXEpCi0JCQlmaW5pc2hfb3V0X2RtYShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJCQlmaW5pc2hfb3V0X2RtYShlcCwgcmVxLCAtRUNPTk5SRVNFVCwgMCk7CiAJfQogCW9tYXBfZnJlZV9kbWEoZXAtPmxjaCk7CiAJZXAtPmRtYV9jaGFubmVsID0gMDsKQEAgLTE3ODYsOCArMTc4OCwxMiBAQAogCQkJCQl1ZGMtPmRyaXZlci0+c3VzcGVuZCgmdWRjLT5nYWRnZXQpOwogCQkJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CiAJCQkJfQorCQkJCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQkJCQlvdGdfc2V0X3N1c3BlbmQodWRjLT50cmFuc2NlaXZlciwgMSk7CiAJCQl9IGVsc2UgewogCQkJCVZEQkcoInJlc3VtZVxuIik7CisJCQkJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCQkJCW90Z19zZXRfc3VzcGVuZCh1ZGMtPnRyYW5zY2VpdmVyLCAwKTsKIAkJCQlpZiAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwKIAkJCQkJCSYmIHVkYy0+ZHJpdmVyLT5yZXN1bWUpIHsKIAkJCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CkBAIC0yOTQzLDYgKzI5NDksNyBAQAogCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKIAkubmFtZQkJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCiAJLnByb2JlCQk9IG9tYXBfdWRjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3Aob21hcF91ZGNfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCmluZGV4IDY0NzAyODUuLmY4M2E5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpAQCAtMjYzMSw2ICsyNjMxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInB4YTJ4eC11ZGMiLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKIAkucHJvYmUJCT0gcHhhMnh4X3VkY19wcm9iZSwKIAkuc2h1dGRvd24JPSBweGEyeHhfdWRjX3NodXRkb3duLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKaW5kZXggZWM5YzQyNC4uNmM1ODYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCkBAIC0xMzAyLDYgKzEzMDIsNyBAQAogCiAJLmRyaXZlciAJPSB7CiAJCS5uYW1lCQk9IChjaGFyICopIHNob3J0bmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkvLyAuc2h1dGRvd24gPSAuLi4KIAkJLy8gLnN1c3BlbmQgPSAuLi4KIAkJLy8gLnJlc3VtZSA9IC4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggMzUwZDE0Zi4uNTgzMjFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0xLDggKzEsOSBAQAogIwotIyBNYWtlZmlsZSBmb3IgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXIKLSMgZnJhbWV3b3JrIGFuZCBkcml2ZXJzCisjIE1ha2VmaWxlIGZvciBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIAorb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaS1xdWlya3MubworCiBvYmotJChDT05GSUdfVVNCX0VIQ0lfSENEKQkrPSBlaGNpLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX0lTUDExNlhfSENEKQkrPSBpc3AxMTZ4LWhjZC5vCiBvYmotJChDT05GSUdfVVNCX09IQ0lfSENEKQkrPSBvaGNpLWhjZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggZjVlYjllNy4uYWYzYzA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMTgyLDYgKzE4Miw5IEBACiB7CiAJdTMyCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnN0YXR1cyk7CiAKKwkvKiBkaXNhYmxlIGFueSBpcnFzIGxlZnQgZW5hYmxlZCBieSBwcmV2aW91cyBjb2RlICovCisJd3JpdGVsICgwLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOworCiAJaWYgKCh0ZW1wICYgU1RTX0hBTFQpICE9IDApCiAJCXJldHVybiAwOwogCkBAIC0yOTcsNTAgKzMwMCwxNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiB9CiAKLSNpZmRlZglDT05GSUdfUENJCi0KLS8qIEVIQ0kgMC45NiAoYW5kIGxhdGVyKSBzZWN0aW9uIDUuMSBzYXlzIGhvdyB0byBraWNrIEJJT1MvU01NLy4uLgotICogb2ZmIHRoZSBjb250cm9sbGVyIChtYXliZSBpdCBjYW4gYm9vdCBmcm9tIGhpZ2hzcGVlZCBVU0IgZGlza3MpLgorLyogUmVib290IG5vdGlmaWVycyBraWNrIGluIGZvciBzaWxpY29uIG9uIGFueSBidXMgKG5vdCBqdXN0IHBjaSwgZXRjKS4KKyAqIFRoaXMgZm9yY2libHkgZGlzYWJsZXMgZG1hIGFuZCBJUlFzLCBoZWxwaW5nIGtleGVjIGFuZCBvdGhlciBjYXNlcworICogd2hlcmUgdGhlIG5leHQgc3lzdGVtIHNvZnR3YXJlIG1heSBleHBlY3QgY2xlYW4gc3RhdGUuCiAgKi8KLXN0YXRpYyBpbnQgYmlvc19oYW5kb2ZmIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCB3aGVyZSwgdTMyIGNhcCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlcik7Ci0KLQkvKiBhbHdheXMgc2F5IExpbnV4IHdpbGwgb3duIHRoZSBoYXJkd2FyZSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCB3aGVyZSArIDMsIDEpOwotCi0JLyogbWF5YmUgd2FpdCBhIHdoaWxlIGZvciBCSU9TIHRvIHJlc3BvbmQgKi8KLQlpZiAoY2FwICYgKDEgPDwgMTYpKSB7Ci0JCWludCBtc2VjID0gNTAwMDsKLQotCQlkbyB7Ci0JCQltc2xlZXAoMTApOwotCQkJbXNlYyAtPSAxMDsKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCB3aGVyZSwgJmNhcCk7Ci0JCX0gd2hpbGUgKChjYXAgJiAoMSA8PCAxNikpICYmIG1zZWMpOwotCQlpZiAoY2FwICYgKDEgPDwgMTYpKSB7Ci0JCQllaGNpX2VycihlaGNpLCAiQklPUyBoYW5kb2ZmIGZhaWxlZCAoJWQsICUwOHgpXG4iLAotCQkJCXdoZXJlLCBjYXApOwotCQkJLy8gc29tZSBCSU9TIHZlcnNpb25zIHNlZW0gYnVnZ3kuLi4KLQkJCS8vIHJldHVybiAxOwotCQkJZWhjaV93YXJuIChlaGNpLCAiY29udGludWluZyBhZnRlciBCSU9TIGJ1Zy4uLlxuIik7Ci0JCQkvKiBkaXNhYmxlIGFsbCBTTUlzLCBhbmQgY2xlYXIgIkJJT1Mgb3ducyIgZmxhZyAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCB3aGVyZSArIDQsIDApOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIHdoZXJlICsgMiwgMCk7Ci0JCX0gZWxzZQotCQkJZWhjaV9kYmcoZWhjaSwgIkJJT1MgaGFuZG9mZiBzdWNjZWVkZWRcbiIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KIHN0YXRpYyBpbnQKIGVoY2lfcmVib290IChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqbnVsbCkKIHsKIAlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpOwogCiAJZWhjaSA9IGNvbnRhaW5lcl9vZiAoc2VsZiwgc3RydWN0IGVoY2lfaGNkLCByZWJvb3Rfbm90aWZpZXIpOworCSh2b2lkKSBlaGNpX2hhbHQgKGVoY2kpOwogCiAJLyogbWFrZSBCSU9TL2V0YyB1c2UgY29tcGFuaW9uIGNvbnRyb2xsZXIgZHVyaW5nIHJlYm9vdCAqLwogCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7CkBAIC0zNjMsMTU2ICszMzMsOTAgQEAKIAltc2xlZXAoMjApOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBjYWxsZWQgYnkga2h1YmQgb3Igcm9vdCBodWIgaW5pdCB0aHJlYWRzICovCi0KLXN0YXRpYyBpbnQgZWhjaV9oY19yZXNldCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKKy8qCisgKiBlaGNpX3dvcmsgaXMgY2FsbGVkIGZyb20gc29tZSBpbnRlcnJ1cHRzLCB0aW1lcnMsIGFuZCBzbyBvbi4KKyAqIGl0IGNhbGxzIGRyaXZlciBjb21wbGV0aW9uIGZ1bmN0aW9ucywgYWZ0ZXIgZHJvcHBpbmcgZWhjaS0+bG9jay4KKyAqLworc3RhdGljIHZvaWQgZWhjaV93b3JrIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKLQl1MzIJCQl0ZW1wOwotCXVuc2lnbmVkCQljb3VudCA9IDI1Ni80OworCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9JT19XQVRDSERPRyk7CisJaWYgKGVoY2ktPnJlY2xhaW1fcmVhZHkpCisJCWVuZF91bmxpbmtfYXN5bmMgKGVoY2ksIHJlZ3MpOwogCi0Jc3Bpbl9sb2NrX2luaXQgKCZlaGNpLT5sb2NrKTsKKwkvKiBhbm90aGVyIENQVSBtYXkgZHJvcCBlaGNpLT5sb2NrIGR1cmluZyBhIHNjaGVkdWxlIHNjYW4gd2hpbGUKKwkgKiBpdCByZXBvcnRzIHVyYiBjb21wbGV0aW9ucy4gIHRoaXMgZmxhZyBndWFyZHMgYWdhaW5zdCBib2d1cworCSAqIGF0dGVtcHRzIGF0IHJlLWVudHJhbnQgc2NoZWR1bGUgc2Nhbm5pbmcuCisJICovCisJaWYgKGVoY2ktPnNjYW5uaW5nKQorCQlyZXR1cm47CisJZWhjaS0+c2Nhbm5pbmcgPSAxOworCXNjYW5fYXN5bmMgKGVoY2ksIHJlZ3MpOworCWlmIChlaGNpLT5uZXh0X3VmcmFtZSAhPSAtMSkKKwkJc2Nhbl9wZXJpb2RpYyAoZWhjaSwgcmVncyk7CisJZWhjaS0+c2Nhbm5pbmcgPSAwOwogCi0JZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKLQllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgSENfTEVOR1RIIChyZWFkbCAoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKLQlkYmdfaGNzX3BhcmFtcyAoZWhjaSwgInJlc2V0Iik7Ci0JZGJnX2hjY19wYXJhbXMgKGVoY2ksICJyZXNldCIpOwotCi0JLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCi0JZWhjaS0+aGNzX3BhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7Ci0KLSNpZmRlZglDT05GSUdfUENJCi0JaWYgKGhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMgPT0gJnBjaV9idXNfdHlwZSkgewotCQlzdHJ1Y3QgcGNpX2RldgkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwotCi0JCXN3aXRjaCAocGRldi0+dmVuZG9yKSB7Ci0JCWNhc2UgUENJX1ZFTkRPUl9JRF9UREk6Ci0JCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kpIHsKLQkJCQllaGNpLT5pc190ZGlfcmhfdHQgPSAxOwotCQkJCXRkaV9yZXNldCAoZWhjaSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfVkVORE9SX0lEX0FNRDoKLQkJCS8qIEFNRDgxMTEgRUhDSSBkb2Vzbid0IHdvcmssIGFjY29yZGluZyB0byBBTUQgZXJyYXRhICovCi0JCQlpZiAocGRldi0+ZGV2aWNlID09IDB4NzQ2MykgewotCQkJCWVoY2lfaW5mbyAoZWhjaSwgImlnbm9yaW5nIEFNRDgxMTEgKGVycmF0YSlcbiIpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX1ZFTkRPUl9JRF9OVklESUE6Ci0JCQkvKiBOVmlkaWEgcmVwb3J0cyB0aGF0IGNlcnRhaW4gY2hpcHMgZG9uJ3QgaGFuZGxlCi0JCQkgKiBRSCwgSVRELCBvciBTSVREIGFkZHJlc3NlcyBhYm92ZSAyR0IuICAoQnV0IFRELAotCQkJICogZGF0YSBidWZmZXIsIGFuZCBwZXJpb2RpYyBzY2hlZHVsZSBhcmUgbm9ybWFsLikKLQkJCSAqLwotCQkJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKLQkJCWNhc2UgMHgwMDNjOgkvKiBNQ1AwNCAqLwotCQkJY2FzZSAweDAwNWI6CS8qIENLODA0ICovCi0JCQljYXNlIDB4MDBkODoJLyogQ0s4ICovCi0JCQljYXNlIDB4MDBlODoJLyogQ0s4UyAqLwotCQkJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwKLQkJCQkJCQlETUFfMzFCSVRfTUFTSykgPCAwKQotCQkJCQllaGNpX3dhcm4gKGVoY2ksICJjYW4ndCBlbmFibGUgTlZpZGlhICIKLQkJCQkJCSJ3b3JrYXJvdW5kIGZvciA+MkdCIFJBTVxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIG9wdGlvbmFsIGRlYnVnIHBvcnQsIG5vcm1hbGx5IGluIHRoZSBmaXJzdCBCQVIgKi8KLQkJdGVtcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkgKHBkZXYsIDB4MGEpOwotCQlpZiAodGVtcCkgewotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHRlbXAsICZ0ZW1wKTsKLQkJCXRlbXAgPj49IDE2OwotCQkJaWYgKCh0ZW1wICYgKDMgPDwgMTMpKSA9PSAoMSA8PCAxMykpIHsKLQkJCQl0ZW1wICY9IDB4MWZmZjsKLQkJCQllaGNpLT5kZWJ1ZyA9IGhjZC0+cmVncyArIHRlbXA7Ci0JCQkJdGVtcCA9IHJlYWRsICgmZWhjaS0+ZGVidWctPmNvbnRyb2wpOwotCQkJCWVoY2lfaW5mbyAoZWhjaSwgImRlYnVnIHBvcnQgJWQlc1xuIiwKLQkJCQkJSENTX0RFQlVHX1BPUlQoZWhjaS0+aGNzX3BhcmFtcyksCi0JCQkJCSh0ZW1wICYgREJHUF9FTkFCTEVEKQotCQkJCQkJPyAiIElOIFVTRSIKLQkJCQkJCTogIiIpOwotCQkJCWlmICghKHRlbXAgJiBEQkdQX0VOQUJMRUQpKQotCQkJCQllaGNpLT5kZWJ1ZyA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQotCQl0ZW1wID0gSENDX0VYVF9DQVBTIChyZWFkbCAoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpKTsKLQl9IGVsc2UKLQkJdGVtcCA9IDA7Ci0KLQkvKiBFSENJIDAuOTYgYW5kIGxhdGVyIG1heSBoYXZlICJleHRlbmRlZCBjYXBhYmlsaXRpZXMiICovCi0Jd2hpbGUgKHRlbXAgJiYgY291bnQtLSkgewotCQl1MzIJCWNhcDsKLQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQgKHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpLAotCQkJCXRlbXAsICZjYXApOwotCQllaGNpX2RiZyAoZWhjaSwgImNhcGFiaWxpdHkgJTA0eCBhdCAlMDJ4XG4iLCBjYXAsIHRlbXApOwotCQlzd2l0Y2ggKGNhcCAmIDB4ZmYpIHsKLQkJY2FzZSAxOgkJCS8qIEJJT1MvU01NLy4uLiBoYW5kb2ZmICovCi0JCQlpZiAoYmlvc19oYW5kb2ZmIChlaGNpLCB0ZW1wLCBjYXApICE9IDApCi0JCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJYnJlYWs7Ci0JCWNhc2UgMDoJCQkvKiBpbGxlZ2FsIHJlc2VydmVkIGNhcGFiaWxpdHkgKi8KLQkJCWVoY2lfd2FybiAoZWhjaSwgImlsbGVnYWwgY2FwYWJpbGl0eSFcbiIpOwotCQkJY2FwID0gMDsKLQkJCS8qIEZBTExUSFJPVUdIICovCi0JCWRlZmF1bHQ6CQkvKiB1bmtub3duICovCi0JCQlicmVhazsKLQkJfQotCQl0ZW1wID0gKGNhcCA+PiA4KSAmIDB4ZmY7Ci0JfQotCWlmICghY291bnQpIHsKLQkJZWhjaV9lcnIgKGVoY2ksICJib2d1cyBjYXBhYmlsaXRpZXMgLi4uIFBDSSBwcm9ibGVtcyFcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JaWYgKGVoY2lfaXNfVERJKGVoY2kpKQotCQllaGNpX3Jlc2V0IChlaGNpKTsKLSNlbmRpZgotCi0JZWhjaV9wb3J0X3Bvd2VyIChlaGNpLCAwKTsKLQotCS8qIGF0IGxlYXN0IHRoZSBHZW5lc3lzIEdMODgwUyBuZWVkcyBmaXh1cCBoZXJlICovCi0JdGVtcCA9IEhDU19OX0NDKGVoY2ktPmhjc19wYXJhbXMpICogSENTX05fUENDKGVoY2ktPmhjc19wYXJhbXMpOwotCXRlbXAgJj0gMHgwZjsKLQlpZiAodGVtcCAmJiBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKSA+IHRlbXApIHsKLQkJZWhjaV9kYmcgKGVoY2ksICJib2d1cyBwb3J0IGNvbmZpZ3VyYXRpb246ICIKLQkJCSJjYz0lZCB4IHBjYz0lZCA8IHBvcnRzPSVkXG4iLAotCQkJSENTX05fQ0MoZWhjaS0+aGNzX3BhcmFtcyksCi0JCQlIQ1NfTl9QQ0MoZWhjaS0+aGNzX3BhcmFtcyksCi0JCQlIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKSk7Ci0KLSNpZmRlZglDT05GSUdfUENJCi0JCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKLQkJCXN0cnVjdCBwY2lfZGV2CSpwZGV2OwotCi0JCQlwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7Ci0JCQlzd2l0Y2ggKHBkZXYtPnZlbmRvcikgewotCQkJY2FzZSAweDE3YTA6CQkvKiBHRU5FU1lTICovCi0JCQkJLyogR0w4ODBTOiBzaG91bGQgYmUgUE9SVFM9MiAqLwotCQkJCXRlbXAgfD0gKGVoY2ktPmhjc19wYXJhbXMgJiB+MHhmKTsKLQkJCQllaGNpLT5oY3NfcGFyYW1zID0gdGVtcDsKLQkJCQlicmVhazsKLQkJCWNhc2UgUENJX1ZFTkRPUl9JRF9OVklESUE6Ci0JCQkJLyogTkY0OiBzaG91bGQgYmUgUENDPTEwICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0KLQotCS8qIGZvcmNlIEhDIHRvIGhhbHQgc3RhdGUgKi8KLQlyZXR1cm4gZWhjaV9oYWx0IChlaGNpKTsKKwkvKiB0aGUgSU8gd2F0Y2hkb2cgZ3VhcmRzIGFnYWluc3QgaGFyZHdhcmUgb3IgZHJpdmVyIGJ1Z3MgdGhhdAorCSAqIG1pc3BsYWNlIElSUXMsIGFuZCBzaG91bGQgbGV0IHVzIHJ1biBjb21wbGV0ZWx5IHdpdGhvdXQgSVJRcy4KKwkgKiBzdWNoIGxvc3NhZ2UgaGFzIGJlZW4gb2JzZXJ2ZWQgb24gYm90aCBWVDYyMDIgYW5kIFZUODIzNS4KKwkgKi8KKwlpZiAoSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSAmJgorCQkJKGVoY2ktPmFzeW5jLT5xaF9uZXh0LnB0ciAhPSBOVUxMIHx8CisJCQkgZWhjaS0+cGVyaW9kaWNfc2NoZWQgIT0gMCkpCisJCXRpbWVyX2FjdGlvbiAoZWhjaSwgVElNRVJfSU9fV0FUQ0hET0cpOwogfQogCi1zdGF0aWMgaW50IGVoY2lfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgdm9pZCBlaGNpX3N0b3AgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCisJZWhjaV9kYmcgKGVoY2ksICJzdG9wXG4iKTsKKworCS8qIFR1cm4gb2ZmIHBvcnQgcG93ZXIgb24gYWxsIHJvb3QgaHViIHBvcnRzLiAqLworCWVoY2lfcG9ydF9wb3dlciAoZWhjaSwgMCk7CisKKwkvKiBubyBtb3JlIGludGVycnVwdHMgLi4uICovCisJZGVsX3RpbWVyX3N5bmMgKCZlaGNpLT53YXRjaGRvZyk7CisKKwlzcGluX2xvY2tfaXJxKCZlaGNpLT5sb2NrKTsKKwlpZiAoSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkpCisJCWVoY2lfcXVpZXNjZSAoZWhjaSk7CisKKwllaGNpX3Jlc2V0IChlaGNpKTsKKwl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZlaGNpLT5sb2NrKTsKKworCS8qIGxldCBjb21wYW5pb24gY29udHJvbGxlcnMgd29yayB3aGVuIHdlIGFyZW4ndCAqLworCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIgKCZlaGNpLT5yZWJvb3Rfbm90aWZpZXIpOworCisJcmVtb3ZlX2RlYnVnX2ZpbGVzIChlaGNpKTsKKworCS8qIHJvb3QgaHViIGlzIHNodXQgZG93biBzZXBhcmF0ZWx5IChmaXJzdCwgd2hlbiBwb3NzaWJsZSkgKi8KKwlzcGluX2xvY2tfaXJxICgmZWhjaS0+bG9jayk7CisJaWYgKGVoY2ktPmFzeW5jKQorCQllaGNpX3dvcmsgKGVoY2ksIE5VTEwpOworCXNwaW5fdW5sb2NrX2lycSAoJmVoY2ktPmxvY2spOworCWVoY2lfbWVtX2NsZWFudXAgKGVoY2kpOworCisjaWZkZWYJRUhDSV9TVEFUUworCWVoY2lfZGJnIChlaGNpLCAiaXJxIG5vcm1hbCAlbGQgZXJyICVsZCByZWNsYWltICVsZCAobG9zdCAlbGQpXG4iLAorCQllaGNpLT5zdGF0cy5ub3JtYWwsIGVoY2ktPnN0YXRzLmVycm9yLCBlaGNpLT5zdGF0cy5yZWNsYWltLAorCQllaGNpLT5zdGF0cy5sb3N0X2lhYSk7CisJZWhjaV9kYmcgKGVoY2ksICJjb21wbGV0ZSAlbGQgdW5saW5rICVsZFxuIiwKKwkJZWhjaS0+c3RhdHMuY29tcGxldGUsIGVoY2ktPnN0YXRzLnVubGluayk7CisjZW5kaWYKKworCWRiZ19zdGF0dXMgKGVoY2ksICJlaGNpX3N0b3AgY29tcGxldGVkIiwgcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpKTsKK30KKworc3RhdGljIGludCBlaGNpX3J1biAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CiAJdTMyCQkJdGVtcDsKIAlpbnQJCQlyZXR2YWw7CiAJdTMyCQkJaGNjX3BhcmFtczsKLQl1OCAgICAgICAgICAgICAgICAgICAgICBzYnJuID0gMDsKIAlpbnQJCQlmaXJzdDsKIAogCS8qIHNraXAgc29tZSB0aGluZ3Mgb24gcmVzdGFydCBwYXRocyAqLwpAQCAtNTUxLDI3ICs0NTUsNiBAQAogCX0KIAl3cml0ZWwgKGVoY2ktPnBlcmlvZGljX2RtYSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2xpc3QpOwogCi0jaWZkZWYJQ09ORklHX1BDSQotCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKLQkJc3RydWN0IHBjaV9kZXYJCSpwZGV2OwotCQl1MTYJCQlwb3J0X3dha2U7Ci0KLQkJcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwotCi0JCS8qIFNlcmlhbCBCdXMgUmVsZWFzZSBOdW1iZXIgaXMgYXQgUENJIDB4NjAgb2Zmc2V0ICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NjAsICZzYnJuKTsKLQotCQkvKiBwb3J0IHdha2UgY2FwYWJpbGl0eSwgcmVwb3J0ZWQgYnkgYm9vdCBmaXJtd2FyZSAqLwotCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDYyLCAmcG9ydF93YWtlKTsKLQkJaGNkLT5jYW5fd2FrZXVwID0gKHBvcnRfd2FrZSAmIDEpICE9IDA7Ci0KLQkJLyogaGVscCBoYyBkbWEgd29yayB3ZWxsIHdpdGggY2FjaGVsaW5lcyAqLwotCQlyZXR2YWwgPSBwY2lfc2V0X213aShwZGV2KTsKLQkJaWYgKHJldHZhbCkKLQkJCWVoY2lfZGJnKGVoY2ksICJ1bmFibGUgdG8gZW5hYmxlIE1XSSAtIG5vdCBmYXRhbC5cbiIpOwotCX0KLSNlbmRpZgotCiAJLyoKIAkgKiBkZWRpY2F0ZSBhIHFoIGZvciB0aGUgYXN5bmMgcmluZyBoZWFkLCBzaW5jZSB3ZSBjb3VsZG4ndCB1bmxpbmsKIAkgKiBhICdyZWFsJyBxaCB3aXRob3V0IHN0b3BwaW5nIHRoZSBhc3luYyBzY2hlZHVsZSBbNC44XS4gIHVzZSBpdApAQCAtNjY3LDcgKzU1MCw3IEBACiAJdGVtcCA9IEhDX1ZFUlNJT04ocmVhZGwgKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJZWhjaV9pbmZvIChlaGNpLAogCQkiVVNCICV4LiV4ICVzLCBFSENJICV4LiUwMngsIGRyaXZlciAlc1xuIiwKLQkJKChzYnJuICYgMHhmMCk+PjQpLCAoc2JybiAmIDB4MGYpLAorCQkoKGVoY2ktPnNicm4gJiAweGYwKT4+NCksIChlaGNpLT5zYnJuICYgMHgwZiksCiAJCWZpcnN0ID8gImluaXRpYWxpemVkIiA6ICJyZXN0YXJ0ZWQiLAogCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLCBEUklWRVJfVkVSU0lPTik7CiAKQEAgLTY3OSwxODggKzU2Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGFsd2F5cyBjYWxsZWQgYnkgdGhyZWFkOyBub3JtYWxseSBybW1vZCAqLwotCi1zdGF0aWMgdm9pZCBlaGNpX3N0b3AgKHN0cnVjdCB1c2JfaGNkICpoY2QpCi17Ci0Jc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCi0JZWhjaV9kYmcgKGVoY2ksICJzdG9wXG4iKTsKLQotCS8qIFR1cm4gb2ZmIHBvcnQgcG93ZXIgb24gYWxsIHJvb3QgaHViIHBvcnRzLiAqLwotCWVoY2lfcG9ydF9wb3dlciAoZWhjaSwgMCk7Ci0KLQkvKiBubyBtb3JlIGludGVycnVwdHMgLi4uICovCi0JZGVsX3RpbWVyX3N5bmMgKCZlaGNpLT53YXRjaGRvZyk7Ci0KLQlzcGluX2xvY2tfaXJxKCZlaGNpLT5sb2NrKTsKLQlpZiAoSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkpCi0JCWVoY2lfcXVpZXNjZSAoZWhjaSk7Ci0KLQllaGNpX3Jlc2V0IChlaGNpKTsKLQl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZlaGNpLT5sb2NrKTsKLQotCS8qIGxldCBjb21wYW5pb24gY29udHJvbGxlcnMgd29yayB3aGVuIHdlIGFyZW4ndCAqLwotCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7Ci0JdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIgKCZlaGNpLT5yZWJvb3Rfbm90aWZpZXIpOwotCi0JcmVtb3ZlX2RlYnVnX2ZpbGVzIChlaGNpKTsKLQotCS8qIHJvb3QgaHViIGlzIHNodXQgZG93biBzZXBhcmF0ZWx5IChmaXJzdCwgd2hlbiBwb3NzaWJsZSkgKi8KLQlzcGluX2xvY2tfaXJxICgmZWhjaS0+bG9jayk7Ci0JaWYgKGVoY2ktPmFzeW5jKQotCQllaGNpX3dvcmsgKGVoY2ksIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycSAoJmVoY2ktPmxvY2spOwotCWVoY2lfbWVtX2NsZWFudXAgKGVoY2kpOwotCi0jaWZkZWYJRUhDSV9TVEFUUwotCWVoY2lfZGJnIChlaGNpLCAiaXJxIG5vcm1hbCAlbGQgZXJyICVsZCByZWNsYWltICVsZCAobG9zdCAlbGQpXG4iLAotCQllaGNpLT5zdGF0cy5ub3JtYWwsIGVoY2ktPnN0YXRzLmVycm9yLCBlaGNpLT5zdGF0cy5yZWNsYWltLAotCQllaGNpLT5zdGF0cy5sb3N0X2lhYSk7Ci0JZWhjaV9kYmcgKGVoY2ksICJjb21wbGV0ZSAlbGQgdW5saW5rICVsZFxuIiwKLQkJZWhjaS0+c3RhdHMuY29tcGxldGUsIGVoY2ktPnN0YXRzLnVubGluayk7Ci0jZW5kaWYKLQotCWRiZ19zdGF0dXMgKGVoY2ksICJlaGNpX3N0b3AgY29tcGxldGVkIiwgcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpKTsKLX0KLQotc3RhdGljIGludCBlaGNpX2dldF9mcmFtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsKLQlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7Ci0JcmV0dXJuIChyZWFkbCAoJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSA+PiAzKSAlIGVoY2ktPnBlcmlvZGljX3NpemU7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZmRlZglDT05GSUdfUE0KLQotLyogc3VzcGVuZC9yZXN1bWUsIHNlY3Rpb24gNC4zICovCi0KLS8qIFRoZXNlIHJvdXRpbmVzIHJlbHkgb24gdGhlIGJ1cyAocGNpLCBwbGF0Zm9ybSwgZXRjKQotICogdG8gaGFuZGxlIHBvd2VyZG93biBhbmQgd2FrZXVwLCBhbmQgY3VycmVudGx5IGFsc28gb24KLSAqIHRyYW5zY2VpdmVycyB0aGF0IGRvbid0IG5lZWQgYW55IHNvZnR3YXJlIGF0dGVudGlvbiB0byBzZXQgdXAKLSAqIHRoZSByaWdodCBzb3J0IG9mIHdha2V1cC4gIAotICovCi0KLXN0YXRpYyBpbnQgZWhjaV9zdXNwZW5kIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKLXsKLQlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7Ci0KLQlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQotCQltc2xlZXAgKDEwMCk7Ci0KLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQkodm9pZCkgdXNiX3N1c3BlbmRfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIsIG1lc3NhZ2UpOwotI2Vsc2UKLQl1c2JfbG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7Ci0JKHZvaWQpIGVoY2lfaHViX3N1c3BlbmQgKGhjZCk7Ci0JdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7Ci0jZW5kaWYKLQotCS8vIHNhdmUgKFBDSSkgRkxBREogaW4gY2FzZSBvZiBWYXV4IHBvd2VyIGxvc3MKLQkvLyAuLi4gd2UnZCBvbmx5IHVzZSBpdCB0byBoYW5kbGUgY2xvY2sgc2tldwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZWhjaV9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCi17Ci0Jc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCXVuc2lnbmVkCQlwb3J0OwotCXN0cnVjdCB1c2JfZGV2aWNlCSpyb290ID0gaGNkLT5zZWxmLnJvb3RfaHViOwotCWludAkJCXJldHZhbCA9IC1FSU5WQUw7Ci0KLQkvLyBtYXliZSByZXN0b3JlIChQQ0kpIEZMQURKCi0KLQlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQotCQltc2xlZXAgKDEwMCk7Ci0KLQkvKiBJZiBhbnkgcG9ydCBpcyBzdXNwZW5kZWQgKG9yIG93bmVkIGJ5IHRoZSBjb21wYW5pb24pLAotCSAqIHdlIGtub3cgd2UgY2FuL211c3QgcmVzdW1lIHRoZSBIQyAoYW5kIG11c3RuJ3QgcmVzZXQgaXQpLgotCSAqLwotCWZvciAocG9ydCA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsgcG9ydCA+IDA7ICkgewotCQl1MzIJc3RhdHVzOwotCQlwb3J0LS07Ci0JCXN0YXR1cyA9IHJlYWRsICgmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3BvcnRdKTsKLQkJaWYgKCEoc3RhdHVzICYgUE9SVF9QT1dFUikpCi0JCQljb250aW51ZTsKLQkJaWYgKHN0YXR1cyAmIChQT1JUX1NVU1BFTkQgfCBQT1JUX09XTkVSKSkgewotCQkJZG93biAoJmhjZC0+c2VsZi5yb290X2h1Yi0+c2VyaWFsaXplKTsKLQkJCXJldHZhbCA9IGVoY2lfaHViX3Jlc3VtZSAoaGNkKTsKLQkJCXVwICgmaGNkLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFyb290LT5jaGlsZHJlbiBbcG9ydF0pCi0JCQljb250aW51ZTsKLQkJZGJnX3BvcnQgKGVoY2ksIF9fRlVOQ1RJT05fXywgcG9ydCArIDEsIHN0YXR1cyk7Ci0JCXVzYl9zZXRfZGV2aWNlX3N0YXRlIChyb290LT5jaGlsZHJlbltwb3J0XSwKLQkJCQkJVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKLQl9Ci0KLQkvKiBFbHNlIHJlc2V0LCB0byBjb3BlIHdpdGggcG93ZXIgbG9zcyBvciBmbHVzaC10by1zdG9yYWdlCi0JICogc3R5bGUgInJlc3VtZSIgaGF2aW5nIGFjdGl2YXRlZCBCSU9TIGR1cmluZyByZWJvb3QuCi0JICovCi0JaWYgKHBvcnQgPT0gMCkgewotCQkodm9pZCkgZWhjaV9oYWx0IChlaGNpKTsKLQkJKHZvaWQpIGVoY2lfcmVzZXQgKGVoY2kpOwotCQkodm9pZCkgZWhjaV9oY19yZXNldCAoaGNkKTsKLQotCQkvKiBlbXB0eWluZyB0aGUgc2NoZWR1bGUgYWJvcnRzIGFueSB1cmJzICovCi0JCXNwaW5fbG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKLQkJaWYgKGVoY2ktPnJlY2xhaW0pCi0JCQllaGNpLT5yZWNsYWltX3JlYWR5ID0gMTsKLQkJZWhjaV93b3JrIChlaGNpLCBOVUxMKTsKLQkJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7Ci0KLQkJLyogcmVzdGFydDsga2h1YmQgd2lsbCBkaXNjb25uZWN0IGRldmljZXMgKi8KLQkJcmV0dmFsID0gZWhjaV9zdGFydCAoaGNkKTsKLQotCQkvKiBoZXJlIHdlICJrbm93IiByb290IHBvcnRzIHNob3VsZCBhbHdheXMgc3RheSBwb3dlcmVkOwotCQkgKiBidXQgc29tZSBjb250cm9sbGVycyBtYXkgbG9zZSBhbGwgcG93ZXIuCi0JCSAqLwotCQllaGNpX3BvcnRfcG93ZXIgKGVoY2ksIDEpOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogZWhjaV93b3JrIGlzIGNhbGxlZCBmcm9tIHNvbWUgaW50ZXJydXB0cywgdGltZXJzLCBhbmQgc28gb24uCi0gKiBpdCBjYWxscyBkcml2ZXIgY29tcGxldGlvbiBmdW5jdGlvbnMsIGFmdGVyIGRyb3BwaW5nIGVoY2ktPmxvY2suCi0gKi8KLXN0YXRpYyB2b2lkIGVoY2lfd29yayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfSU9fV0FUQ0hET0cpOwotCWlmIChlaGNpLT5yZWNsYWltX3JlYWR5KQotCQllbmRfdW5saW5rX2FzeW5jIChlaGNpLCByZWdzKTsKLQotCS8qIGFub3RoZXIgQ1BVIG1heSBkcm9wIGVoY2ktPmxvY2sgZHVyaW5nIGEgc2NoZWR1bGUgc2NhbiB3aGlsZQotCSAqIGl0IHJlcG9ydHMgdXJiIGNvbXBsZXRpb25zLiAgdGhpcyBmbGFnIGd1YXJkcyBhZ2FpbnN0IGJvZ3VzCi0JICogYXR0ZW1wdHMgYXQgcmUtZW50cmFudCBzY2hlZHVsZSBzY2FubmluZy4KLQkgKi8KLQlpZiAoZWhjaS0+c2Nhbm5pbmcpCi0JCXJldHVybjsKLQllaGNpLT5zY2FubmluZyA9IDE7Ci0Jc2Nhbl9hc3luYyAoZWhjaSwgcmVncyk7Ci0JaWYgKGVoY2ktPm5leHRfdWZyYW1lICE9IC0xKQotCQlzY2FuX3BlcmlvZGljIChlaGNpLCByZWdzKTsKLQllaGNpLT5zY2FubmluZyA9IDA7Ci0KLQkvKiB0aGUgSU8gd2F0Y2hkb2cgZ3VhcmRzIGFnYWluc3QgaGFyZHdhcmUgb3IgZHJpdmVyIGJ1Z3MgdGhhdAotCSAqIG1pc3BsYWNlIElSUXMsIGFuZCBzaG91bGQgbGV0IHVzIHJ1biBjb21wbGV0ZWx5IHdpdGhvdXQgSVJRcy4KLQkgKiBzdWNoIGxvc3NhZ2UgaGFzIGJlZW4gb2JzZXJ2ZWQgb24gYm90aCBWVDYyMDIgYW5kIFZUODIzNS4gCi0JICovCi0JaWYgKEhDX0lTX1JVTk5JTkcgKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkgJiYKLQkJCShlaGNpLT5hc3luYy0+cWhfbmV4dC5wdHIgIT0gTlVMTCB8fAotCQkJIGVoY2ktPnBlcmlvZGljX3NjaGVkICE9IDApKQotCQl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0lPX1dBVENIRE9HKTsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGlycXJldHVybl90IGVoY2lfaXJxIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTExNzEsMTA2ICs4NzIsMjQgQEAKIAlyZXR1cm47CiB9CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfZHJpdmVyID0gewotCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKLQkucHJvZHVjdF9kZXNjID0JCSJFSENJIEhvc3QgQ29udHJvbGxlciIsCi0JLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKLQotCS8qCi0JICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCi0JICovCi0JLmlycSA9CQkJZWhjaV9pcnEsCi0JLmZsYWdzID0JCUhDRF9NRU1PUlkgfCBIQ0RfVVNCMiwKLQotCS8qCi0JICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKLQkgKi8KLQkucmVzZXQgPQkJZWhjaV9oY19yZXNldCwKLQkuc3RhcnQgPQkJZWhjaV9zdGFydCwKLSNpZmRlZglDT05GSUdfUE0KLQkuc3VzcGVuZCA9CQllaGNpX3N1c3BlbmQsCi0JLnJlc3VtZSA9CQllaGNpX3Jlc3VtZSwKLSNlbmRpZgotCS5zdG9wID0JCQllaGNpX3N0b3AsCi0KLQkvKgotCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCi0JICovCi0JLnVyYl9lbnF1ZXVlID0JCWVoY2lfdXJiX2VucXVldWUsCi0JLnVyYl9kZXF1ZXVlID0JCWVoY2lfdXJiX2RlcXVldWUsCi0JLmVuZHBvaW50X2Rpc2FibGUgPQllaGNpX2VuZHBvaW50X2Rpc2FibGUsCi0KLQkvKgotCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAotCSAqLwotCS5nZXRfZnJhbWVfbnVtYmVyID0JZWhjaV9nZXRfZnJhbWUsCi0KLQkvKgotCSAqIHJvb3QgaHViIHN1cHBvcnQKLQkgKi8KLQkuaHViX3N0YXR1c19kYXRhID0JZWhjaV9odWJfc3RhdHVzX2RhdGEsCi0JLmh1Yl9jb250cm9sID0JCWVoY2lfaHViX2NvbnRyb2wsCi0JLmh1Yl9zdXNwZW5kID0JCWVoY2lfaHViX3N1c3BlbmQsCi0JLmh1Yl9yZXN1bWUgPQkJZWhjaV9odWJfcmVzdW1lLAotfTsKK3N0YXRpYyBpbnQgZWhjaV9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXJldHVybiAocmVhZGwgKCZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkgPj4gMykgJSBlaGNpLT5wZXJpb2RpY19zaXplOworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBFSENJIDEuMCBkb2Vzbid0IHJlcXVpcmUgUENJICovCi0KLSNpZmRlZglDT05GSUdfUENJCi0KLS8qIFBDSSBkcml2ZXIgc2VsZWN0aW9uIG1ldGFkYXRhOyBQQ0kgaG90cGx1Z2dpbmcgdXNlcyB0aGlzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgewotCS8qIGhhbmRsZSBhbnkgVVNCIDIuMCBFSENJIGNvbnRyb2xsZXIgKi8KLQlQQ0lfREVWSUNFX0NMQVNTKCgoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweDIwKSwgfjApLAotCS5kcml2ZXJfZGF0YSA9CSh1bnNpZ25lZCBsb25nKSAmZWhjaV9kcml2ZXIsCi0JfSwKLQl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBwY2lfaWRzKTsKLQotLyogcGNpIGRyaXZlciBnbHVlOyB0aGlzIGlzIGEgIm5ldyBzdHlsZSIgUENJIGRyaXZlciBtb2R1bGUgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlaGNpX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCi0JLmlkX3RhYmxlID0JcGNpX2lkcywKLQotCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAotCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCi0KLSNpZmRlZglDT05GSUdfUE0KLQkuc3VzcGVuZCA9CXVzYl9oY2RfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKLSNlbmRpZgotfTsKLQotI2VuZGlmCS8qIFBDSSAqLwotCi0KICNkZWZpbmUgRFJJVkVSX0lORk8gRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9ERVNDCiAKIE1PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0lORk8pOwogTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0ICh2b2lkKSAKLXsKLQlpZiAodXNiX2Rpc2FibGVkKCkpCi0JCXJldHVybiAtRU5PREVWOworI2lmZGVmIENPTkZJR19QQ0kKKyNpbmNsdWRlICJlaGNpLXBjaS5jIgorI2VuZGlmCiAKLQlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogcWggJVpkIHF0ZCAlWmQgaXRkICVaZCBzaXRkICVaZFxuIiwKLQkJaGNkX25hbWUsCi0JCXNpemVvZiAoc3RydWN0IGVoY2lfcWgpLCBzaXplb2YgKHN0cnVjdCBlaGNpX3F0ZCksCi0JCXNpemVvZiAoc3RydWN0IGVoY2lfaXRkKSwgc2l6ZW9mIChzdHJ1Y3QgZWhjaV9zaXRkKSk7Ci0KLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJmVoY2lfcGNpX2RyaXZlcik7Ci19Ci1tb2R1bGVfaW5pdCAoaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwICh2b2lkKSAKLXsJCi0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyICgmZWhjaV9wY2lfZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0IChjbGVhbnVwKTsKKyNpZiAhZGVmaW5lZChDT05GSUdfUENJKQorI2Vycm9yICJtaXNzaW5nIGJ1cyBnbHVlIGZvciBlaGNpLWhjZCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IDE4ZDNmMjIuLjg4Y2I0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCi1zdGF0aWMgaW50IGVoY2lfaHViX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IGVoY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwogCWludAkJCXBvcnQ7CkBAIC04Myw3ICs4Myw3IEBACiAKIAogLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIHJvb3QgaHViLCBhbmQgc2hvdWxkIHJlc2V0L3JlaW5pdCBvbiBlcnJvciAqLwotc3RhdGljIGludCBlaGNpX2h1Yl9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IGVoY2lfYnVzX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CiAJdTMyCQkJdGVtcDsKQEAgLTE1OSw4ICsxNTksOCBAQAogCiAjZWxzZQogCi0jZGVmaW5lIGVoY2lfaHViX3N1c3BlbmQJTlVMTAotI2RlZmluZSBlaGNpX2h1Yl9yZXN1bWUJCU5VTEwKKyNkZWZpbmUgZWhjaV9idXNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGVoY2lfYnVzX3Jlc3VtZQkJTlVMTAogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDUwMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogRUhDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIFBDSSBCdXMgR2x1ZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBieSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgQ09ORklHX1BDSQorI2Vycm9yICJUaGlzIGZpbGUgaXMgUENJIGJ1cyBnbHVlLiAgQ09ORklHX1BDSSBtdXN0IGJlIGRlZmluZWQuIgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEVIQ0kgMC45NiAoYW5kIGxhdGVyKSBzZWN0aW9uIDUuMSBzYXlzIGhvdyB0byBraWNrIEJJT1MvU01NLy4uLgorICogb2ZmIHRoZSBjb250cm9sbGVyIChtYXliZSBpdCBjYW4gYm9vdCBmcm9tIGhpZ2hzcGVlZCBVU0IgZGlza3MpLgorICovCitzdGF0aWMgaW50IGJpb3NfaGFuZG9mZiAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBpbnQgd2hlcmUsIHUzMiBjYXApCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIpOworCisJLyogYWx3YXlzIHNheSBMaW51eCB3aWxsIG93biB0aGUgaGFyZHdhcmUgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgd2hlcmUgKyAzLCAxKTsKKworCS8qIG1heWJlIHdhaXQgYSB3aGlsZSBmb3IgQklPUyB0byByZXNwb25kICovCisJaWYgKGNhcCAmICgxIDw8IDE2KSkgeworCQlpbnQgbXNlYyA9IDUwMDA7CisKKwkJZG8geworCQkJbXNsZWVwKDEwKTsKKwkJCW1zZWMgLT0gMTA7CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgd2hlcmUsICZjYXApOworCQl9IHdoaWxlICgoY2FwICYgKDEgPDwgMTYpKSAmJiBtc2VjKTsKKwkJaWYgKGNhcCAmICgxIDw8IDE2KSkgeworCQkJZWhjaV9lcnIoZWhjaSwgIkJJT1MgaGFuZG9mZiBmYWlsZWQgKCVkLCAlMDh4KVxuIiwKKwkJCQl3aGVyZSwgY2FwKTsKKwkJCS8vIHNvbWUgQklPUyB2ZXJzaW9ucyBzZWVtIGJ1Z2d5Li4uCisJCQkvLyByZXR1cm4gMTsKKwkJCWVoY2lfd2FybiAoZWhjaSwgImNvbnRpbnVpbmcgYWZ0ZXIgQklPUyBidWcuLi5cbiIpOworCQkJLyogZGlzYWJsZSBhbGwgU01JcywgYW5kIGNsZWFyICJCSU9TIG93bnMiIGZsYWcgKi8KKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgd2hlcmUgKyA0LCAwKTsKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCB3aGVyZSArIDIsIDApOworCQl9IGVsc2UKKwkJCWVoY2lfZGJnKGVoY2ksICJCSU9TIGhhbmRvZmYgc3VjY2VlZGVkXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlZCBieSBraHViZCBvciByb290IGh1YiBpbml0IHRocmVhZHMgKi8KK3N0YXRpYyBpbnQgZWhjaV9wY2lfcmVzZXQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXUzMgkJCXRlbXA7CisJdW5zaWduZWQJCWNvdW50ID0gMjU2LzQ7CisKKwlzcGluX2xvY2tfaW5pdCAoJmVoY2ktPmxvY2spOworCisJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgSENfTEVOR1RIIChyZWFkbCAoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwlkYmdfaGNzX3BhcmFtcyAoZWhjaSwgInJlc2V0Iik7CisJZGJnX2hjY19wYXJhbXMgKGVoY2ksICJyZXNldCIpOworCisJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCisJZWhjaS0+aGNzX3BhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7CisJCXN0cnVjdCBwY2lfZGV2CSpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CisKKwkJc3dpdGNoIChwZGV2LT52ZW5kb3IpIHsKKwkJY2FzZSBQQ0lfVkVORE9SX0lEX1RESToKKwkJCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9URElfRUhDSSkgeworCQkJCWVoY2ktPmlzX3RkaV9yaF90dCA9IDE7CisJCQkJdGRpX3Jlc2V0IChlaGNpKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBDSV9WRU5ET1JfSURfQU1EOgorCQkJLyogQU1EODExMSBFSENJIGRvZXNuJ3Qgd29yaywgYWNjb3JkaW5nIHRvIEFNRCBlcnJhdGEgKi8KKwkJCWlmIChwZGV2LT5kZXZpY2UgPT0gMHg3NDYzKSB7CisJCQkJZWhjaV9pbmZvIChlaGNpLCAiaWdub3JpbmcgQU1EODExMSAoZXJyYXRhKVxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQQ0lfVkVORE9SX0lEX05WSURJQToKKwkJCS8qIE5WaWRpYSByZXBvcnRzIHRoYXQgY2VydGFpbiBjaGlwcyBkb24ndCBoYW5kbGUKKwkJCSAqIFFILCBJVEQsIG9yIFNJVEQgYWRkcmVzc2VzIGFib3ZlIDJHQi4gIChCdXQgVEQsCisJCQkgKiBkYXRhIGJ1ZmZlciwgYW5kIHBlcmlvZGljIHNjaGVkdWxlIGFyZSBub3JtYWwuKQorCQkJICovCisJCQlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCQkJY2FzZSAweDAwM2M6CS8qIE1DUDA0ICovCisJCQljYXNlIDB4MDA1YjoJLyogQ0s4MDQgKi8KKwkJCWNhc2UgMHgwMGQ4OgkvKiBDSzggKi8KKwkJCWNhc2UgMHgwMGU4OgkvKiBDSzhTICovCisJCQkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LAorCQkJCQkJCURNQV8zMUJJVF9NQVNLKSA8IDApCisJCQkJCWVoY2lfd2FybiAoZWhjaSwgImNhbid0IGVuYWJsZSBOVmlkaWEgIgorCQkJCQkJIndvcmthcm91bmQgZm9yID4yR0IgUkFNXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJLyogb3B0aW9uYWwgZGVidWcgcG9ydCwgbm9ybWFsbHkgaW4gdGhlIGZpcnN0IEJBUiAqLworCQl0ZW1wID0gcGNpX2ZpbmRfY2FwYWJpbGl0eSAocGRldiwgMHgwYSk7CisJCWlmICh0ZW1wKSB7CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgdGVtcCwgJnRlbXApOworCQkJdGVtcCA+Pj0gMTY7CisJCQlpZiAoKHRlbXAgJiAoMyA8PCAxMykpID09ICgxIDw8IDEzKSkgeworCQkJCXRlbXAgJj0gMHgxZmZmOworCQkJCWVoY2ktPmRlYnVnID0gaGNkLT5yZWdzICsgdGVtcDsKKwkJCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5kZWJ1Zy0+Y29udHJvbCk7CisJCQkJZWhjaV9pbmZvIChlaGNpLCAiZGVidWcgcG9ydCAlZCVzXG4iLAorCQkJCQlIQ1NfREVCVUdfUE9SVChlaGNpLT5oY3NfcGFyYW1zKSwKKwkJCQkJKHRlbXAgJiBEQkdQX0VOQUJMRUQpCisJCQkJCQk/ICIgSU4gVVNFIgorCQkJCQkJOiAiIik7CisJCQkJaWYgKCEodGVtcCAmIERCR1BfRU5BQkxFRCkpCisJCQkJCWVoY2ktPmRlYnVnID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCXRlbXAgPSBIQ0NfRVhUX0NBUFMgKHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcykpOworCX0gZWxzZQorCQl0ZW1wID0gMDsKKworCS8qIEVIQ0kgMC45NiBhbmQgbGF0ZXIgbWF5IGhhdmUgImV4dGVuZGVkIGNhcGFiaWxpdGllcyIgKi8KKwl3aGlsZSAodGVtcCAmJiBjb3VudC0tKSB7CisJCXUzMgkJY2FwOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAodG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlciksCisJCQkJdGVtcCwgJmNhcCk7CisJCWVoY2lfZGJnIChlaGNpLCAiY2FwYWJpbGl0eSAlMDR4IGF0ICUwMnhcbiIsIGNhcCwgdGVtcCk7CisJCXN3aXRjaCAoY2FwICYgMHhmZikgeworCQljYXNlIDE6CQkJLyogQklPUy9TTU0vLi4uIGhhbmRvZmYgKi8KKwkJCWlmIChiaW9zX2hhbmRvZmYgKGVoY2ksIHRlbXAsIGNhcCkgIT0gMCkKKwkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCQlicmVhazsKKwkJY2FzZSAwOgkJCS8qIGlsbGVnYWwgcmVzZXJ2ZWQgY2FwYWJpbGl0eSAqLworCQkJZWhjaV93YXJuIChlaGNpLCAiaWxsZWdhbCBjYXBhYmlsaXR5IVxuIik7CisJCQljYXAgPSAwOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJZGVmYXVsdDoJCS8qIHVua25vd24gKi8KKwkJCWJyZWFrOworCQl9CisJCXRlbXAgPSAoY2FwID4+IDgpICYgMHhmZjsKKwl9CisJaWYgKCFjb3VudCkgeworCQllaGNpX2VyciAoZWhjaSwgImJvZ3VzIGNhcGFiaWxpdGllcyAuLi4gUENJIHByb2JsZW1zIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoZWhjaV9pc19UREkoZWhjaSkpCisJCWVoY2lfcmVzZXQgKGVoY2kpOworCisJZWhjaV9wb3J0X3Bvd2VyIChlaGNpLCAwKTsKKworCS8qIGF0IGxlYXN0IHRoZSBHZW5lc3lzIEdMODgwUyBuZWVkcyBmaXh1cCBoZXJlICovCisJdGVtcCA9IEhDU19OX0NDKGVoY2ktPmhjc19wYXJhbXMpICogSENTX05fUENDKGVoY2ktPmhjc19wYXJhbXMpOworCXRlbXAgJj0gMHgwZjsKKwlpZiAodGVtcCAmJiBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKSA+IHRlbXApIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJib2d1cyBwb3J0IGNvbmZpZ3VyYXRpb246ICIKKwkJCSJjYz0lZCB4IHBjYz0lZCA8IHBvcnRzPSVkXG4iLAorCQkJSENTX05fQ0MoZWhjaS0+aGNzX3BhcmFtcyksCisJCQlIQ1NfTl9QQ0MoZWhjaS0+aGNzX3BhcmFtcyksCisJCQlIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKSk7CisKKwkJaWYgKGhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMgPT0gJnBjaV9idXNfdHlwZSkgeworCQkJc3RydWN0IHBjaV9kZXYJKnBkZXY7CisKKwkJCXBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwkJCXN3aXRjaCAocGRldi0+dmVuZG9yKSB7CisJCQljYXNlIDB4MTdhMDoJCS8qIEdFTkVTWVMgKi8KKwkJCQkvKiBHTDg4MFM6IHNob3VsZCBiZSBQT1JUUz0yICovCisJCQkJdGVtcCB8PSAoZWhjaS0+aGNzX3BhcmFtcyAmIH4weGYpOworCQkJCWVoY2ktPmhjc19wYXJhbXMgPSB0ZW1wOworCQkJCWJyZWFrOworCQkJY2FzZSBQQ0lfVkVORE9SX0lEX05WSURJQToKKwkJCQkvKiBORjQ6IHNob3VsZCBiZSBQQ0M9MTAgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIGZvcmNlIEhDIHRvIGhhbHQgc3RhdGUgKi8KKwlyZXR1cm4gZWhjaV9oYWx0IChlaGNpKTsKK30KKworc3RhdGljIGludCBlaGNpX3BjaV9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7CisJCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKKwkJdTE2CQkJcG9ydF93YWtlOworCisJCXBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKworCQkvKiBTZXJpYWwgQnVzIFJlbGVhc2UgTnVtYmVyIGlzIGF0IFBDSSAweDYwIG9mZnNldCAqLworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDYwLCAmZWhjaS0+c2Jybik7CisKKwkJLyogcG9ydCB3YWtlIGNhcGFiaWxpdHksIHJlcG9ydGVkIGJ5IGJvb3QgZmlybXdhcmUgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHg2MiwgJnBvcnRfd2FrZSk7CisJCWhjZC0+Y2FuX3dha2V1cCA9IChwb3J0X3dha2UgJiAxKSAhPSAwOworCisJCS8qIGhlbHAgaGMgZG1hIHdvcmsgd2VsbCB3aXRoIGNhY2hlbGluZXMgKi8KKwkJcmVzdWx0ID0gcGNpX3NldF9td2kocGRldik7CisJCWlmIChyZXN1bHQpCisJCQllaGNpX2RiZyhlaGNpLCAidW5hYmxlIHRvIGVuYWJsZSBNV0kgLSBub3QgZmF0YWwuXG4iKTsKKwl9CisKKwlyZXR1cm4gZWhjaV9ydW4gKGhjZCk7Cit9CisKKy8qIGFsd2F5cyBjYWxsZWQgYnkgdGhyZWFkOyBub3JtYWxseSBybW1vZCAqLworCitzdGF0aWMgdm9pZCBlaGNpX3BjaV9zdG9wIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWVoY2lfc3RvcCAoaGNkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBzdXNwZW5kL3Jlc3VtZSwgc2VjdGlvbiA0LjMgKi8KKworLyogVGhlc2Ugcm91dGluZXMgcmVseSBvbiB0aGUgYnVzIChwY2ksIHBsYXRmb3JtLCBldGMpCisgKiB0byBoYW5kbGUgcG93ZXJkb3duIGFuZCB3YWtldXAsIGFuZCBjdXJyZW50bHkgYWxzbyBvbgorICogdHJhbnNjZWl2ZXJzIHRoYXQgZG9uJ3QgbmVlZCBhbnkgc29mdHdhcmUgYXR0ZW50aW9uIHRvIHNldCB1cAorICogdGhlIHJpZ2h0IHNvcnQgb2Ygd2FrZXVwLgorICovCisKK3N0YXRpYyBpbnQgZWhjaV9wY2lfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBlaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwICgxMDApOworCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJKHZvaWQpIHVzYl9zdXNwZW5kX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKyNlbHNlCisJdXNiX2xvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworCSh2b2lkKSBlaGNpX2J1c19zdXNwZW5kIChoY2QpOworCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworI2VuZGlmCisKKwkvLyBzYXZlIChQQ0kpIEZMQURKIGluIGNhc2Ugb2YgVmF1eCBwb3dlciBsb3NzCisJLy8gLi4uIHdlJ2Qgb25seSB1c2UgaXQgdG8gaGFuZGxlIGNsb2NrIHNrZXcKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVoY2lfcGNpX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdW5zaWduZWQJCXBvcnQ7CisJc3RydWN0IHVzYl9kZXZpY2UJKnJvb3QgPSBoY2QtPnNlbGYucm9vdF9odWI7CisJaW50CQkJcmV0dmFsID0gLUVJTlZBTDsKKworCS8vIG1heWJlIHJlc3RvcmUgKFBDSSkgRkxBREoKKworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCAoMTAwKTsKKworCS8qIElmIGFueSBwb3J0IGlzIHN1c3BlbmRlZCAob3Igb3duZWQgYnkgdGhlIGNvbXBhbmlvbiksCisJICogd2Uga25vdyB3ZSBjYW4vbXVzdCByZXN1bWUgdGhlIEhDIChhbmQgbXVzdG4ndCByZXNldCBpdCkuCisJICovCisJZm9yIChwb3J0ID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOyBwb3J0ID4gMDsgKSB7CisJCXUzMglzdGF0dXM7CisJCXBvcnQtLTsKKwkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbcG9ydF0pOworCQlpZiAoIShzdGF0dXMgJiBQT1JUX1BPV0VSKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RhdHVzICYgKFBPUlRfU1VTUEVORCB8IFBPUlRfT1dORVIpKSB7CisJCQlkb3duICgmaGNkLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCQkJcmV0dmFsID0gZWhjaV9idXNfcmVzdW1lIChoY2QpOworCQkJdXAgKCZoY2QtPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXJvb3QtPmNoaWxkcmVuIFtwb3J0XSkKKwkJCWNvbnRpbnVlOworCQlkYmdfcG9ydCAoZWhjaSwgX19GVU5DVElPTl9fLCBwb3J0ICsgMSwgc3RhdHVzKTsKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUgKHJvb3QtPmNoaWxkcmVuW3BvcnRdLAorCQkJCQlVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCX0KKworCS8qIEVsc2UgcmVzZXQsIHRvIGNvcGUgd2l0aCBwb3dlciBsb3NzIG9yIGZsdXNoLXRvLXN0b3JhZ2UKKwkgKiBzdHlsZSAicmVzdW1lIiBoYXZpbmcgYWN0aXZhdGVkIEJJT1MgZHVyaW5nIHJlYm9vdC4KKwkgKi8KKwlpZiAocG9ydCA9PSAwKSB7CisJCSh2b2lkKSBlaGNpX2hhbHQgKGVoY2kpOworCQkodm9pZCkgZWhjaV9yZXNldCAoZWhjaSk7CisJCSh2b2lkKSBlaGNpX3BjaV9yZXNldCAoaGNkKTsKKworCQkvKiBlbXB0eWluZyB0aGUgc2NoZWR1bGUgYWJvcnRzIGFueSB1cmJzICovCisJCXNwaW5fbG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwkJaWYgKGVoY2ktPnJlY2xhaW0pCisJCQllaGNpLT5yZWNsYWltX3JlYWR5ID0gMTsKKwkJZWhjaV93b3JrIChlaGNpLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisKKwkJLyogcmVzdGFydDsga2h1YmQgd2lsbCBkaXNjb25uZWN0IGRldmljZXMgKi8KKwkJcmV0dmFsID0gZWhjaV9ydW4gKGhjZCk7CisKKwkJLyogaGVyZSB3ZSAia25vdyIgcm9vdCBwb3J0cyBzaG91bGQgYWx3YXlzIHN0YXkgcG93ZXJlZDsKKwkJICogYnV0IHNvbWUgY29udHJvbGxlcnMgbWF5IGxvc2UgYWxsIHBvd2VyLgorCQkgKi8KKwkJZWhjaV9wb3J0X3Bvd2VyIChlaGNpLCAxKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfcGNpX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiRUhDSSBIb3N0IENvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBlaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCWVoY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfTUVNT1JZIHwgSENEX1VTQjIsCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnJlc2V0ID0JCWVoY2lfcGNpX3Jlc2V0LAorCS5zdGFydCA9CQllaGNpX3BjaV9zdGFydCwKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CQllaGNpX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPQkJZWhjaV9wY2lfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPQkJCWVoY2lfcGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCWVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCWVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQllaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0JZWhjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0JZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCWVoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kID0JCWVoY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJZWhjaV9idXNfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUENJIGRyaXZlciBzZWxlY3Rpb24gbWV0YWRhdGE7IFBDSSBob3RwbHVnZ2luZyB1c2VzIHRoaXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzIFtdID0geyB7CisJLyogaGFuZGxlIGFueSBVU0IgMi4wIEVIQ0kgY29udHJvbGxlciAqLworCVBDSV9ERVZJQ0VfQ0xBU1MoKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MjApLCB+MCksCisJLmRyaXZlcl9kYXRhID0JKHVuc2lnbmVkIGxvbmcpICZlaGNpX3BjaV9oY19kcml2ZXIsCisJfSwKKwl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBwY2lfaWRzKTsKKworLyogcGNpIGRyaXZlciBnbHVlOyB0aGlzIGlzIGEgIm5ldyBzdHlsZSIgUENJIGRyaXZlciBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlaGNpX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKwkub3duZXIgPSAJVEhJU19NT0RVTEUsCisKKwkucHJvYmUgPQl1c2JfaGNkX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0JdXNiX2hjZF9wY2lfcmVtb3ZlLAorCisjaWZkZWYJQ09ORklHX1BNCisJLnN1c3BlbmQgPQl1c2JfaGNkX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2JfaGNkX3BjaV9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVoY2lfaGNkX3BjaV9pbml0ICh2b2lkKQoreworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogcWggJVpkIHF0ZCAlWmQgaXRkICVaZCBzaXRkICVaZFxuIiwKKwkJaGNkX25hbWUsCisJCXNpemVvZiAoc3RydWN0IGVoY2lfcWgpLCBzaXplb2YgKHN0cnVjdCBlaGNpX3F0ZCksCisJCXNpemVvZiAoc3RydWN0IGVoY2lfaXRkKSwgc2l6ZW9mIChzdHJ1Y3QgZWhjaV9zaXRkKSk7CisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJmVoY2lfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAoZWhjaV9oY2RfcGNpX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZWhjaV9oY2RfcGNpX2NsZWFudXAgKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyICgmZWhjaV9wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0IChlaGNpX2hjZF9wY2lfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IGYzNGEwNTEuLjE4ZTI1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC05Nyw2ICs5Nyw3IEBACiAjZWxzZQogIwlkZWZpbmUgQ09VTlQoeCkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKKwl1OAkJCXNicm47CQkvKiBwYWNrZWQgcmVsZWFzZSBudW1iZXIgKi8KIH07CiAKIC8qIGNvbnZlcnQgYmV0d2VlbiBhbiBIQ0QgcG9pbnRlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgRUhDSV9IQ0QgKi8gCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggNjQyZjM1MC4uZGRiOGZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJCQkJICArIG1zZWNzX3RvX2ppZmZpZXMoMjApICsgMSk7CiAJCWlmIChpbnRzdGF0ICYgSENJTlRfUkQpIHsKIAkJCURCRygiLS0tLSByZW1vdGUgd2FrZXVwXG4iKTsKLQkJCXNjaGVkdWxlX3dvcmsoJmlzcDExNngtPnJoX3Jlc3VtZSk7CisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwogCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJCX0KIAkJaXJxc3RhdCAmPSB+SEN1UElOVF9PUFI7CkBAIC0xMTYwLDcgKzExNjAsNyBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgaXNwMTE2eF9odWJfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQorc3RhdGljIGludCBpc3AxMTZ4X2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGlzcDExNnggKmlzcDExNnggPSBoY2RfdG9faXNwMTE2eChoY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaXNwMTE2eF9odWJfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IGlzcDExNnhfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4ID0gaGNkX3RvX2lzcDExNngoaGNkKTsKIAl1MzIgdmFsOwpAQCAtMTI2MywyMSArMTI2MywxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpc3AxMTZ4X3JoX3Jlc3VtZSh2b2lkICpfaGNkKQotewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBfaGNkOwotCi0JdXNiX3Jlc3VtZV9kZXZpY2UoaGNkLT5zZWxmLnJvb3RfaHViKTsKLX0KIAogI2Vsc2UKIAotI2RlZmluZQlpc3AxMTZ4X2h1Yl9zdXNwZW5kCU5VTEwKLSNkZWZpbmUJaXNwMTE2eF9odWJfcmVzdW1lCU5VTEwKLQotc3RhdGljIHZvaWQgaXNwMTE2eF9yaF9yZXN1bWUodm9pZCAqX2hjZCkKLXsKLX0KKyNkZWZpbmUJaXNwMTE2eF9idXNfc3VzcGVuZAlOVUxMCisjZGVmaW5lCWlzcDExNnhfYnVzX3Jlc3VtZQlOVUxMCiAKICNlbmRpZgogCkBAIC0xNjM2LDggKzE2MjYsOCBAQAogCiAJLmh1Yl9zdGF0dXNfZGF0YSA9IGlzcDExNnhfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbCA9IGlzcDExNnhfaHViX2NvbnRyb2wsCi0JLmh1Yl9zdXNwZW5kID0gaXNwMTE2eF9odWJfc3VzcGVuZCwKLQkuaHViX3Jlc3VtZSA9IGlzcDExNnhfaHViX3Jlc3VtZSwKKwkuYnVzX3N1c3BlbmQgPSBpc3AxMTZ4X2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0gaXNwMTE2eF9idXNfcmVzdW1lLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE3MzIsNyArMTcyMiw2IEBACiAJaXNwMTE2eC0+YWRkcl9yZWcgPSBhZGRyX3JlZzsKIAlzcGluX2xvY2tfaW5pdCgmaXNwMTE2eC0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmlzcDExNngtPmFzeW5jKTsKLQlJTklUX1dPUksoJmlzcDExNngtPnJoX3Jlc3VtZSwgaXNwMTE2eF9yaF9yZXN1bWUsIGhjZCk7CiAJaXNwMTE2eC0+Ym9hcmQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoIWlzcDExNngtPmJvYXJkKSB7CkBAIC0xNzc3LDE2ICsxNzY2LDEwIEBACiBzdGF0aWMgaW50IGlzcDExNnhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlWREJHKCIlczogc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBzdGF0ZSk7CiAKLQlyZXQgPSB1c2Jfc3VzcGVuZF9kZXZpY2UoaGNkLT5zZWxmLnJvb3RfaHViLCBzdGF0ZSk7Ci0JaWYgKCFyZXQpIHsKLQkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwotCQlJTkZPKCIlcyBzdXNwZW5kZWRcbiIsIGhjZF9uYW1lKTsKLQl9IGVsc2UKLQkJRVJSKCIlcyBzdXNwZW5kIGZhaWxlZFxuIiwgaGNkX25hbWUpOworCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzk3LDE1ICsxNzgwLDExIEBACiBzdGF0aWMgaW50IGlzcDExNnhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlWREJHKCIlczogIHN0YXRlICV4XG4iLCBfX2Z1bmNfXywgZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSk7CiAKLQlyZXQgPSB1c2JfcmVzdW1lX2RldmljZShoY2QtPnNlbGYucm9vdF9odWIpOwotCWlmICghcmV0KSB7Ci0JCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwotCQlWREJHKCIlcyByZXN1bWVkXG4iLCAoY2hhciAqKWhjZF9uYW1lKTsKLQl9CisJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCmluZGV4IDU4ODczNDcuLmM2ZmVjOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCkBAIC0yNTMsNyArMjUzLDYgQEAKIAogc3RydWN0IGlzcDExNnggewogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmhfcmVzdW1lOwogCiAJdm9pZCBfX2lvbWVtICphZGRyX3JlZzsKIAl2b2lkIF9faW9tZW0gKmRhdGFfcmVnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IDM5ODFiZjEuLmEyNzdlMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTIxNCw2ICsyMTQsMTEgQEAKIAkgKi8KIAkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCiAJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisjaWZkZWYJQ09ORklHX1BNCisJLmJ1c19zdXNwZW5kID0JCW9oY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJb2hjaV9idXNfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjU5LDYgKzI2NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9hdTF4eHhfZHJpdmVyID0gewogCS5uYW1lCQk9ICJhdTF4eHgtb2hjaSIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCS5wcm9iZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKaW5kZXggNzkyNGM3NC4uN2JmZmZjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKQEAgLTE5MywxMCArMTkzLDYgQEAKIAogCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImRvbmVoZWFkIiwKIAkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5kb25laGVhZCksIG5leHQsIHNpemUpOwotCi0JLyogYnJva2VuIGZtaW50ZXJ2YWwgbWVhbnMgdHJhZmZpYyB3b24ndCBmbG93ISAqLyAKLQlvaGNpX2RiZyAoY29udHJvbGxlciwgImZtaW50ZXJ2YWwgJTA4eFxuIiwgCi0JCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+Zm1pbnRlcnZhbCkpOwogfQogCiAjZGVmaW5lIGRiZ19wb3J0X3N3KGhjLG51bSx2YWx1ZSxuZXh0LHNpemUpIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCBmOGRhOGM3Li41YzBjNmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC03MjMsNyArNzIzLDcgQEAKIAkJb2hjaV92ZGJnIChvaGNpLCAicmVzdW1lIGRldGVjdFxuIik7CiAJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfUkQsICZyZWdzLT5pbnRyc3RhdHVzKTsKIAkJaWYgKGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfUVVJRVNDSU5HKQotCQkJc2NoZWR1bGVfd29yaygmb2hjaS0+cmhfcmVzdW1lKTsKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CiAJfQogCiAJaWYgKGludHMgJiBPSENJX0lOVFJfV0RIKSB7CkBAIC03OTEsNyArNzkxLDcgQEAKIAogLyogbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KIAotI2lmCWRlZmluZWQoQ09ORklHX1VTQl9TVVNQRU5EKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKKyNpZmRlZglDT05GSUdfUE0KIAogc3RhdGljIGludCBvaGNpX3Jlc3RhcnQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCBjZTdiMjhkLi5lMDFlNzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0zNiw3ICszNiw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZglkZWZpbmVkKENPTkZJR19VU0JfU1VTUEVORCkgfHwgZGVmaW5lZChDT05GSUdfUE0pCisjaWZkZWYJQ09ORklHX1BNCiAKICNkZWZpbmUgT0hDSV9TQ0hFRF9FTkFCTEVTIFwKIAkoT0hDSV9DVFJMX0NMRXxPSENJX0NUUkxfQkxFfE9IQ0lfQ1RSTF9QTEV8T0hDSV9DVFJMX0lFKQpAQCAtNDUsNyArNDUsNyBAQAogc3RhdGljIHZvaWQgZmluaXNoX3VubGlua3MgKHN0cnVjdCBvaGNpX2hjZCAqLCB1MTYgLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIHN0YXRpYyBpbnQgb2hjaV9yZXN0YXJ0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpOwogCi1zdGF0aWMgaW50IG9oY2lfaHViX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IG9oY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOwogCWludAkJCXN0YXR1cyA9IDA7CkBAIC03Myw3ICs3Myw2IEBACiAJb2hjaV9kYmcgKG9oY2ksICJzdXNwZW5kIHJvb3QgaHViXG4iKTsKIAogCS8qIEZpcnN0IHN0b3AgYW55IHByb2Nlc3NpbmcgKi8KLQloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOwogCWlmIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9TQ0hFRF9FTkFCTEVTKSB7CiAJCWludAkJbGltaXQ7CiAKQEAgLTEwOCw3ICsxMDcsOSBAQAogCWVsc2UKIAkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX1JXRTsKIAotCS8qIFN1c3BlbmQgaHViICovCisJLyogU3VzcGVuZCBodWIgLi4uIHRoaXMgaXMgdGhlICJnbG9iYWwgKHRvIHRoaXMgYnVzKSBzdXNwZW5kIiBtb2RlLAorCSAqIHdoaWNoIGRvZXNuJ3QgaW1wbHkgcG9ydHMgd2lsbCBmaXJzdCBiZSBpbmRpdmlkdWFsbHkgc3VzcGVuZGVkLgorCSAqLwogCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOwogCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfU1VTUEVORDsKIAlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwpAQCAtMTE4LDggKzExOSw5IEBACiAJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICg1KTsKIAogZG9uZToKKwkvKiBleHRlcm5hbCBzdXNwZW5kIHZzIHNlbGYgYXV0b3N1c3BlbmQgLi4uIHNhbWUgZWZmZWN0ICovCiAJaWYgKHN0YXR1cyA9PSAwKQotCQloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCQl1c2JfaGNkX3N1c3BlbmRfcm9vdF9odWIoaGNkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMzMsNyArMTM1LDcgQEAKIH0KIAogLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIHJvb3QgaHViICovCi1zdGF0aWMgaW50IG9oY2lfaHViX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3N0YXRpYyBpbnQgb2hjaV9idXNfcmVzdW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAl1MzIJCQl0ZW1wLCBlbmFibGVzOwpAQCAtMTQ2LDcgKzE0OCw3IEBACiAJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKIAogCWlmIChvaGNpLT5oY19jb250cm9sICYgKE9IQ0lfQ1RSTF9JUiB8IE9IQ0lfU0NIRURfRU5BQkxFUykpIHsKLQkJLyogdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHN1c3BlbmQtdG8tZGlzayAqLworCQkvKiB0aGlzIGNhbiBoYXBwZW4gYWZ0ZXIgcmVzdW1pbmcgYSBzd3N1c3Agc25hcHNob3QgKi8KIAkJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUkVTVU1JTkcpIHsKIAkJCW9oY2lfZGJnIChvaGNpLCAiQklPUy9TTU0gYWN0aXZlLCBjb250cm9sICUwM3hcbiIsCiAJCQkJCW9oY2ktPmhjX2NvbnRyb2wpOwpAQCAtMTY5LDExICsxNzEsMTIgQEAKIAkJb2hjaV9pbmZvIChvaGNpLCAid2FrZXVwXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBPSENJX1VTQl9PUEVSOgotCQlvaGNpX2RiZyAob2hjaSwgImFscmVhZHkgcmVzdW1lZFxuIik7Ci0JCXN0YXR1cyA9IDA7CisJCS8qIHRoaXMgY2FuIGhhcHBlbiBhZnRlciByZXN1bWluZyBhIHN3c3VzcCBzbmFwc2hvdCAqLworCQlvaGNpX2RiZyAob2hjaSwgInNuYXBzaG90IHJlc3VtZT8gcmVpbml0XG4iKTsKKwkJc3RhdHVzID0gLUVCVVNZOwogCQlicmVhazsKIAlkZWZhdWx0OgkJLyogUkVTRVQsIHdlIGxvc3QgcG93ZXIgKi8KLQkJb2hjaV9kYmcgKG9oY2ksICJyb290IGh1YiBoYXJkd2FyZSByZXNldFxuIik7CisJCW9oY2lfZGJnIChvaGNpLCAibG9zdCBwb3dlclxuIik7CiAJCXN0YXR1cyA9IC1FQlVTWTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CkBAIC0xOTgsOCArMjAxLDcgQEAKIAl9CiAKIAkvKiBTb21lIGNvbnRyb2xsZXJzIChsdWNlbnQgZXJyYXR1bSkgbmVlZCBleHRyYS1sb25nIGRlbGF5cyAqLwotCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SRVNVTUlORzsKLQltZGVsYXkgKDIwIC8qIHVzYiAxMS41LjEuMTAgKi8gKyAxNSk7CisJbXNsZWVwICgyMCAvKiB1c2IgMTEuNS4xLjEwICovICsgMTIgLyogMzIgbXNlYyBjb3VudGVyICovICsgMSk7CiAKIAl0ZW1wID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwogCXRlbXAgJj0gT0hDSV9DVFJMX0hDRlM7CkBAIC0yNzMsMjggKzI3NSwxMCBAQAogCQkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwogCX0KIAotCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvaGNpX3JoX3Jlc3VtZSAodm9pZCAqX2hjZCkKLXsKLQlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gX2hjZDsKLQotCXVzYl9sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKLQkodm9pZCkgb2hjaV9odWJfcmVzdW1lIChoY2QpOwotCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBvaGNpX3JoX3Jlc3VtZSAodm9pZCAqX2hjZCkKLXsKLQlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoX2hjZCk7Ci0Jb2hjaV9kYmcob2hjaSwgInJoX3Jlc3VtZSA/P1xuIik7Ci19Ci0KLSNlbmRpZgkvKiBDT05GSUdfVVNCX1NVU1BFTkQgfHwgQ09ORklHX1BNICovCisjZW5kaWYJLyogQ09ORklHX1BNICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTM2Nyw3ICszNTEsNiBAQAogI2lmZGVmIENPTkZJR19QTQogCS8qIHNhdmUgcG93ZXIgYnkgc3VzcGVuZGluZyBpZGxlIHJvb3QgaHViczsKIAkgKiBJTlRSX1JEIHdha2VzIHVzIHdoZW4gdGhlcmUncyB3b3JrCi0JICogTk9URTogaWYgd2UgY2FuIGRvIHRoaXMsIHdlIGRvbid0IG5lZWQgYSByb290IGh1YiB0aW1lciEKIAkgKi8KIAlpZiAoY2FuX3N1c3BlbmQKIAkJCSYmICFjaGFuZ2VkCkBAIC0zNzksOCArMzYyLDcgQEAKIAkJCSYmIHVzYl90cnlsb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKQogCQkJKSB7CiAJCW9oY2lfdmRiZyAob2hjaSwgImF1dG9zdXNwZW5kXG4iKTsKLQkJKHZvaWQpIG9oY2lfaHViX3N1c3BlbmQgKGhjZCk7Ci0JCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCQkodm9pZCkgb2hjaV9idXNfc3VzcGVuZCAoaGNkKTsKIAkJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CiAJfQogI2VuZGlmCkBAIC01NTQsNyArNTM2LDcgQEAKIAkJCXRlbXAgPSBSSF9QU19QT0NJOwogCQkJaWYgKChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpCiAJCQkJCSE9IE9IQ0lfVVNCX09QRVIpCi0JCQkJc2NoZWR1bGVfd29yayAoJm9oY2ktPnJoX3Jlc3VtZSk7CisJCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOgogCQkJdGVtcCA9IFJIX1BTX1BTU0M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCA4NTlhY2E3Yi4uMjM4ZmE0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCkBAIC0xOTMsNiArMTkzLDExIEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmCUNPTkZJR19QTQorCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKKyNlbmRpZgorCS5zdGFydF9wb3J0X3Jlc2V0ID0Jb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTIzOSw2ICsyNDQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImxoN2E0MDQtb2hjaSIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCS5wcm9iZQkJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYwppbmRleCA5ZmI4M2RmLi5iZmJlMzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW1lbS5jCkBAIC0yOCw3ICsyOCw2IEBACiAJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CiAJc3Bpbl9sb2NrX2luaXQgKCZvaGNpLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCAoJm9oY2ktPnBlbmRpbmcpOwotCUlOSVRfV09SSyAoJm9oY2ktPnJoX3Jlc3VtZSwgb2hjaV9yaF9yZXN1bWUsIG9oY2lfdG9faGNkKG9oY2kpKTsKIAlvaGNpLT5yZWJvb3Rfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IG9oY2lfcmVib290OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwppbmRleCBhNTc0MjE2Li40NWVmZWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTQyMCw5ICs0MjAsOSBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKLQkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjaWZkZWYJQ09ORklHX1BNCisJLmJ1c19zdXNwZW5kID0JCW9oY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJb2hjaV9idXNfcmVzdW1lLAogI2VuZGlmCiAJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCiB9OwpAQCAtNDU4LDQxICs0NTgsMjkgQEAKIHN0YXRpYyBpbnQgb2hjaV9vbWFwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7Ci0JaW50CQlzdGF0dXMgPSAtRUlOVkFMOwogCi0JZG93bigmb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7Ci0Jc3RhdHVzID0gb2hjaV9odWJfc3VzcGVuZChvaGNpX3RvX2hjZChvaGNpKSk7Ci0JaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCW9tYXBfb2hjaV9jbG9ja19wb3dlcigwKTsKLQkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnN0YXRlID0KLQkJCVVTQl9TVEFURV9TVVNQRU5ERUQ7Ci0JCW9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKLQkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfU1VTUEVORDsKLQl9Ci0JdXAoJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOwotCXJldHVybiBzdGF0dXM7CisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoNSk7CisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CisKKwlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMCk7CisJb2hjaV90b19oY2Qob2hjaSktPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX1NVU1BFTkQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb2hjaV9vbWFwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koZGV2X2dldF9kcnZkYXRhKGRldikpOwotCWludAkJc3RhdHVzID0gMDsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKIAkJbXNsZWVwKDUpOwogCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCiAJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDEpOwotI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCS8qIGdldCBleHRyYSBjbGVhbnVwIGV2ZW4gaWYgcmVtb3RlIHdha2V1cCBpc24ndCBpbiB1c2UgKi8KLQlzdGF0dXMgPSB1c2JfcmVzdW1lX2RldmljZShvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yik7Ci0jZWxzZQotCWRvd24oJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOwotCXN0YXR1cyA9IG9oY2lfaHViX3Jlc3VtZShvaGNpX3RvX2hjZChvaGNpKSk7Ci0JdXAoJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOwotI2VuZGlmCi0JaWYgKHN0YXR1cyA9PSAwKQotCQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKLQlyZXR1cm4gc3RhdHVzOworCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlyZXR1cm4gMDsKIH0KIAogI2VuZGlmCkBAIC01MDQsNiArNDkyLDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX29tYXBfZHJpdmVyID0gewogCS5uYW1lCQk9ICJvaGNpIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCiAJLnByb2JlCQk9IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IGVlZGU2YmUuLmJmMWQ1YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTExMiwyMyArMTEyLDEzIEBACiAKIHN0YXRpYyBpbnQgb2hjaV9wY2lfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7Ci0Jc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCS8qIHJvb3QgaHViIHdhcyBhbHJlYWR5IHN1c3BlbmRlZCAqLwogCi0JLyogc3VzcGVuZCByb290IGh1YiwgaG9waW5nIGl0IGtlZXBzIHBvd2VyIGR1cmluZyBzdXNwZW5kICovCi0JaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKLQkJbXNsZWVwICgxMDApOwotCi0jaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECi0JKHZvaWQpIHVzYl9zdXNwZW5kX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViLCBtZXNzYWdlKTsKLSNlbHNlCi0JdXNiX2xvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOwotCSh2b2lkKSBvaGNpX2h1Yl9zdXNwZW5kIChoY2QpOwotCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOwotI2VuZGlmCi0KLQkvKiBsZXQgdGhpbmdzIHNldHRsZSBkb3duIGEgYml0ICovCi0JbXNsZWVwICgxMDApOwotCQorCS8qIEZJWE1FIHRoZXNlIFBNQUMgdGhpbmdzIGdldCBjYWxsZWQgaW4gdGhlIHdyb25nIHBsYWNlcy4gIEFTSUMKKwkgKiBjbG9ja3Mgc2hvdWxkIGJlIHR1cm5lZCBvZmYgQUZURVIgZW50ZXJpbmcgRDMsIGFuZCBvbiBCRUZPUkUKKwkgKiB0cnlpbmcgdG8gZW50ZXIgRDAuICBFdmlkZW50bHkgdGhlIFBDSSBsYXllciBkb2Vzbid0IGN1cnJlbnRseQorCSAqIHByb3ZpZGUgdGhlIHJpZ2h0IHNvcnQgb2YgcGxhdGZvcm0gaG9va3MgZm9yIHRoaXMgLi4uCisJICovCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJaWYgKF9tYWNoaW5lID09IF9NQUNIX1BtYWMpIHsKIAkgICAJc3RydWN0IGRldmljZV9ub2RlCSpvZl9ub2RlOwpAQCAtMTQ1LDkgKzEzNSw2IEBACiAKIHN0YXRpYyBpbnQgb2hjaV9wY2lfcmVzdW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewotCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKLQlpbnQJCQlyZXR2YWwgPSAwOwotCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJaWYgKF9tYWNoaW5lID09IF9NQUNIX1BtYWMpIHsKIAkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwpAQCAtMTU5LDE5ICsxNDYsOCBAQAogCX0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotCS8qIHJlc3VtZSByb290IGh1YiAqLwotCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCi0JCW1zbGVlcCAoMTAwKTsKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQkvKiBnZXQgZXh0cmEgY2xlYW51cCBldmVuIGlmIHJlbW90ZSB3YWtldXAgaXNuJ3QgaW4gdXNlICovCi0JcmV0dmFsID0gdXNiX3Jlc3VtZV9kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7Ci0jZWxzZQotCXVzYl9sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKLQlyZXR2YWwgPSBvaGNpX2h1Yl9yZXN1bWUgKGhjZCk7Ci0JdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7Ci0jZW5kaWYKLQotCXJldHVybiByZXR2YWw7CisJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKKwlyZXR1cm4gMDsKIH0KIAogI2VuZGlmCS8qIENPTkZJR19QTSAqLwpAQCAtMjE4LDkgKzE5NCw5IEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAotI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCS5odWJfc3VzcGVuZCA9CQlvaGNpX2h1Yl9zdXNwZW5kLAotCS5odWJfcmVzdW1lID0JCW9oY2lfaHViX3Jlc3VtZSwKKyNpZmRlZglDT05GSUdfUE0KKwkuYnVzX3N1c3BlbmQgPQkJb2hjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlvaGNpX2J1c19yZXN1bWUsCiAjZW5kaWYKIAkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKIH07CkBAIC0yNDAsNiArMjE2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvaGNpX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCiAJLmlkX3RhYmxlID0JcGNpX2lkcywKKwkub3duZXIgPQlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAogCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwppbmRleCAyNTE1MzMzLi40ODMyZTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKQEAgLTE2Myw5ICsxNjMsOSBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKLQkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjaWZkZWYJQ09ORklHX1BNCisJLmJ1c19zdXNwZW5kID0JCW9oY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJb2hjaV9idXNfcmVzdW1lLAogI2VuZGlmCiAJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCiB9OwpAQCAtMTkzLDEwICsxOTMsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX3BwY19zb2NfZHJpdmVyID0gewogCS5uYW1lCQk9ICJwcGMtc29jLW9oY2kiLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKIAkucHJvYmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUsCi0jaWYJZGVmaW5lZChDT05GSUdfVVNCX1NVU1BFTkQpIHx8IGRlZmluZWQoQ09ORklHX1BNKQorI2lmZGVmCUNPTkZJR19QTQogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9zdXNwZW5kLCovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVzdW1lLCovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBmMDQyMjYxLi5kMjg3ZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0yNzgsMTAgKzI3OCwxMSBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKLSNpZmRlZiAgQ09ORklHX1VTQl9TVVNQRU5ECi0JLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCi0JLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorI2lmZGVmICBDT05GSUdfUE0KKwkuYnVzX3N1c3BlbmQgPQkJb2hjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlvaGNpX2J1c19yZXN1bWUsCiAjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCBkYTdkNTQ3Li5mYWI0MjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTQ0OCwxMSArNDQ4LDExIEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfczNjMjQxMF9odWJfc3RhdHVzX2RhdGEsCiAJLmh1Yl9jb250cm9sID0JCW9oY2lfczNjMjQxMF9odWJfY29udHJvbCwKLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVVNQRU5EKSAmJiAwCi0JLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCi0JLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorI2lmZGVmCUNPTkZJR19QTQorCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKICNlbmRpZgorCS5zdGFydF9wb3J0X3Jlc2V0ID0Jb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAogfTsKIAogLyogZGV2aWNlIGRyaXZlciAqLwpAQCAtNDc0LDYgKzQ3NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9zM2MyNDEwX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiczNjMjQxMC1vaGNpIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCiAJLnByb2JlCQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCmluZGV4IDgxNGQyYmUuLmZiMzIyMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2ExMTExLmMKQEAgLTIzNSwxMCArMjM1LDExIEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAotI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCS5odWJfc3VzcGVuZCA9CQlvaGNpX2h1Yl9zdXNwZW5kLAotCS5odWJfcmVzdW1lID0JCW9oY2lfaHViX3Jlc3VtZSwKKyNpZmRlZglDT05GSUdfUE0KKwkuYnVzX3N1c3BlbmQgPQkJb2hjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlvaGNpX2J1c19yZXN1bWUsCiAjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCmluZGV4IDhhOWI5ZDkuLmNhYWNmMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCkBAIC0zODksNyArMzg5LDYgQEAKIAl1bnNpZ25lZCBsb25nCQluZXh0X3N0YXRlY2hhbmdlOwkvKiBzdXNwZW5kL3Jlc3VtZSAqLwogCXUzMgkJCWZtaW50ZXJ2YWw7CQkvKiBzYXZlZCByZWdpc3RlciAqLwogCi0Jc3RydWN0IHdvcmtfc3RydWN0CXJoX3Jlc3VtZTsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJcmVib290X25vdGlmaWVyOwogCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBmb3IgSEMgYnVncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZkM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSB0byByZXNldCBhbmQgaW5pdGlhbGl6ZSBVU0IgaG9zdCBjb250cm9sbGVycy4KKyAqIFNvbWUgb2YgaXQgaW5jbHVkZXMgd29yay1hcm91bmRzIGZvciBQQ0kgaGFyZHdhcmUgYW5kIEJJT1MgcXVpcmtzLgorICogSXQgbWF5IG5lZWQgdG8gcnVuIGVhcmx5IGR1cmluZyBib290aW5nIC0tIGJlZm9yZSBVU0Igd291bGQgbm9ybWFsbHkKKyAqIGluaXRpYWxpemUgLS0gdG8gZW5zdXJlIHRoYXQgTGludXggZG9lc24ndCB1c2UgYW55IGxlZ2FjeSBtb2Rlcy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICogIChhbmQgb3RoZXJzKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZWxzZQorI3VuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorCisKKyNkZWZpbmUgVUhDSV9VU0JMRUdTVVAJCTB4YzAJCS8qIGxlZ2FjeSBzdXBwb3J0ICovCisjZGVmaW5lIFVIQ0lfVVNCQ01ECQkwCQkvKiBjb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lIFVIQ0lfVVNCSU5UUgkJNAkJLyogaW50ZXJydXB0IHJlZ2lzdGVyICovCisjZGVmaW5lIFVIQ0lfVVNCTEVHU1VQX1JXQwkweDhmMDAJCS8qIHRoZSBSL1dDIGJpdHMgKi8KKyNkZWZpbmUgVUhDSV9VU0JMRUdTVVBfUk8JMHg1MDQwCQkvKiBSL08gYW5kIHJlc2VydmVkIGJpdHMgKi8KKyNkZWZpbmUgVUhDSV9VU0JDTURfUlVOCQkweDAwMDEJCS8qIFJVTi9TVE9QIGJpdCAqLworI2RlZmluZSBVSENJX1VTQkNNRF9IQ1JFU0VUCTB4MDAwMgkJLyogSG9zdCBDb250cm9sbGVyIHJlc2V0ICovCisjZGVmaW5lIFVIQ0lfVVNCQ01EX0VHU00JMHgwMDA4CQkvKiBHbG9iYWwgU3VzcGVuZCBNb2RlICovCisjZGVmaW5lIFVIQ0lfVVNCQ01EX0NPTkZJR1VSRQkweDAwNDAJCS8qIENvbmZpZyBGbGFnICovCisjZGVmaW5lIFVIQ0lfVVNCSU5UUl9SRVNVTUUJMHgwMDAyCQkvKiBSZXN1bWUgaW50ZXJydXB0IGVuYWJsZSAqLworCisjZGVmaW5lIE9IQ0lfQ09OVFJPTAkJMHgwNAorI2RlZmluZSBPSENJX0NNRFNUQVRVUwkJMHgwOAorI2RlZmluZSBPSENJX0lOVFJTVEFUVVMJCTB4MGMKKyNkZWZpbmUgT0hDSV9JTlRSRU5BQkxFCQkweDEwCisjZGVmaW5lIE9IQ0lfSU5UUkRJU0FCTEUJMHgxNAorI2RlZmluZSBPSENJX09DUgkJKDEgPDwgMykJLyogb3duZXJzaGlwIGNoYW5nZSByZXF1ZXN0ICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9SV0MJCSgxIDw8IDkpCS8qIHJlbW90ZSB3YWtldXAgY29ubmVjdGVkICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9JUgkJKDEgPDwgOCkJLyogaW50ZXJydXB0IHJvdXRpbmcgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX09DCQkoMSA8PCAzMCkJLyogb3duZXJzaGlwIGNoYW5nZSAqLworCisjZGVmaW5lIEVIQ0lfSENDX1BBUkFNUwkJMHgwOAkJLyogZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIEVIQ0lfVVNCQ01ECQkwCQkvKiBjb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lIEVIQ0lfVVNCQ01EX1JVTgkJKDEgPDwgMCkJLyogUlVOL1NUT1AgYml0ICovCisjZGVmaW5lIEVIQ0lfVVNCU1RTCQk0CQkvKiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUhDSV9VU0JTVFNfSEFMVEVECSgxIDw8IDEyKQkvKiBIQ0hhbHRlZCBiaXQgKi8KKyNkZWZpbmUgRUhDSV9VU0JJTlRSCQk4CQkvKiBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUhDSV9VU0JMRUdTVVAJCTAJCS8qIGxlZ2FjeSBzdXBwb3J0IHJlZ2lzdGVyICovCisjZGVmaW5lIEVIQ0lfVVNCTEVHU1VQX0JJT1MJKDEgPDwgMTYpCS8qIEJJT1Mgc2VtYXBob3JlICovCisjZGVmaW5lIEVIQ0lfVVNCTEVHU1VQX09TCSgxIDw8IDI0KQkvKiBPUyBzZW1hcGhvcmUgKi8KKyNkZWZpbmUgRUhDSV9VU0JMRUdDVExTVFMJNAkJLyogbGVnYWN5IGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIEVIQ0lfVVNCTEVHQ1RMU1RTX1NPT0UJKDEgPDwgMTMpCS8qIFNNSSBvbiBvd25lcnNoaXAgY2hhbmdlICovCisKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpcyBjb21wbGV0ZWx5IGluYWN0aXZlLCB1bmFibGUgdG8KKyAqIGdlbmVyYXRlIGludGVycnVwdHMgb3IgZG8gRE1BLgorICovCit2b2lkIHVoY2lfcmVzZXRfaGMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwkvKiBUdXJuIG9mZiBQSVJRIGVuYWJsZSBhbmQgU01JIGVuYWJsZS4gIChUaGlzIGFsc28gdHVybnMgb2ZmIHRoZQorCSAqIEJJT1MncyBVU0IgTGVnYWN5IFN1cHBvcnQuKSAgVHVybiBvZmYgYWxsIHRoZSBSL1dDIGJpdHMgdG9vLgorCSAqLworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBVSENJX1VTQkxFR1NVUCwgVUhDSV9VU0JMRUdTVVBfUldDKTsKKworCS8qIFJlc2V0IHRoZSBIQyAtIHRoaXMgd2lsbCBmb3JjZSB1cyB0byBnZXQgYQorCSAqIG5ldyBub3RpZmljYXRpb24gb2YgYW55IGFscmVhZHkgY29ubmVjdGVkCisJICogcG9ydHMgZHVlIHRvIHRoZSB2aXJ0dWFsIGRpc2Nvbm5lY3QgdGhhdCBpdAorCSAqIGltcGxpZXMuCisJICovCisJb3V0dyhVSENJX1VTQkNNRF9IQ1JFU0VULCBiYXNlICsgVUhDSV9VU0JDTUQpOworCW1iKCk7CisJdWRlbGF5KDUpOworCWlmIChpbncoYmFzZSArIFVIQ0lfVVNCQ01EKSAmIFVIQ0lfVVNCQ01EX0hDUkVTRVQpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJIQ1JFU0VUIG5vdCBjb21wbGV0ZWQgeWV0IVxuIik7CisKKwkvKiBKdXN0IHRvIGJlIHNhZmUsIGRpc2FibGUgaW50ZXJydXB0IHJlcXVlc3RzIGFuZAorCSAqIG1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpcyBzdG9wcGVkLgorCSAqLworCW91dHcoMCwgYmFzZSArIFVIQ0lfVVNCSU5UUik7CisJb3V0dygwLCBiYXNlICsgVUhDSV9VU0JDTUQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodWhjaV9yZXNldF9oYyk7CisKKy8qCisgKiBJbml0aWFsaXplIGEgY29udHJvbGxlciB0aGF0IHdhcyBuZXdseSBkaXNjb3ZlcmVkIG9yIGhhcyBqdXN0IGJlZW4KKyAqIHJlc3VtZWQuICBJbiBlaXRoZXIgY2FzZSB3ZSBjYW4ndCBiZSBzdXJlIG9mIGl0cyBwcmV2aW91cyBzdGF0ZS4KKyAqCisgKiBSZXR1cm5zOiAxIGlmIHRoZSBjb250cm9sbGVyIHdhcyByZXNldCwgMCBvdGhlcndpc2UuCisgKi8KK2ludCB1aGNpX2NoZWNrX2FuZF9yZXNldF9oYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBiYXNlKQoreworCXUxNiBsZWdzdXA7CisJdW5zaWduZWQgaW50IGNtZCwgaW50cjsKKworCS8qCisJICogV2hlbiByZXN0YXJ0aW5nIGEgc3VzcGVuZGVkIGNvbnRyb2xsZXIsIHdlIGV4cGVjdCBhbGwgdGhlCisJICogc2V0dGluZ3MgdG8gYmUgdGhlIHNhbWUgYXMgd2UgbGVmdCB0aGVtOgorCSAqCisJICoJUElSUSBhbmQgU01JIGRpc2FibGVkLCBubyBSL1cgYml0cyBzZXQgaW4gVVNCTEVHU1VQOworCSAqCUNvbnRyb2xsZXIgaXMgc3RvcHBlZCBhbmQgY29uZmlndXJlZCB3aXRoIEVHU00gc2V0OworCSAqCU5vIGludGVycnVwdHMgZW5hYmxlZCBleGNlcHQgcG9zc2libHkgUmVzdW1lIERldGVjdC4KKwkgKgorCSAqIElmIGFueSBvZiB0aGVzZSBjb25kaXRpb25zIGFyZSB2aW9sYXRlZCB3ZSBkbyBhIGNvbXBsZXRlIHJlc2V0LgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFVIQ0lfVVNCTEVHU1VQLCAmbGVnc3VwKTsKKwlpZiAobGVnc3VwICYgfihVSENJX1VTQkxFR1NVUF9STyB8IFVIQ0lfVVNCTEVHU1VQX1JXQykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IGxlZ3N1cCA9IDB4JTA0eFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGxlZ3N1cCk7CisJCWdvdG8gcmVzZXRfbmVlZGVkOworCX0KKworCWNtZCA9IGludyhiYXNlICsgVUhDSV9VU0JDTUQpOworCWlmICgoY21kICYgVUhDSV9VU0JDTURfUlVOKSB8fCAhKGNtZCAmIFVIQ0lfVVNCQ01EX0NPTkZJR1VSRSkgfHwKKwkJCSEoY21kICYgVUhDSV9VU0JDTURfRUdTTSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IGNtZCA9IDB4JTA0eFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGNtZCk7CisJCWdvdG8gcmVzZXRfbmVlZGVkOworCX0KKworCWludHIgPSBpbncoYmFzZSArIFVIQ0lfVVNCSU5UUik7CisJaWYgKGludHIgJiAoflVIQ0lfVVNCSU5UUl9SRVNVTUUpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiBpbnRyID0gMHglMDR4XG4iLAorCQkJCV9fRlVOQ1RJT05fXywgaW50cik7CisJCWdvdG8gcmVzZXRfbmVlZGVkOworCX0KKwlyZXR1cm4gMDsKKworcmVzZXRfbmVlZGVkOgorCWRldl9kYmcoJnBkZXYtPmRldiwgIlBlcmZvcm1pbmcgZnVsbCByZXNldFxuIik7CisJdWhjaV9yZXNldF9oYyhwZGV2LCBiYXNlKTsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVoY2lfY2hlY2tfYW5kX3Jlc2V0X2hjKTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3VzYl9oYW5kb2ZmX3VoY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspCisJCWlmICgocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgSU9SRVNPVVJDRV9JTykpIHsKKwkJCWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQlicmVhazsKKwkJfQorCisJaWYgKGJhc2UpCisJCXVoY2lfY2hlY2tfYW5kX3Jlc2V0X2hjKHBkZXYsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdXNiX2hhbmRvZmZfb2hjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IHdhaXRfdGltZTsKKwl1MzIgY29udHJvbDsKKworCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCQkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKGJhc2UgPT0gTlVMTCkgcmV0dXJuOworCisvKiBPbiBQQS1SSVNDLCBQREMgY2FuIGxlYXZlIElSIHNldCBpbmNvcnJlY3RseTsgaWdub3JlIGl0IHRoZXJlLiAqLworI2lmbmRlZiBfX2hwcGFfXworCWNvbnRyb2wgPSByZWFkbChiYXNlICsgT0hDSV9DT05UUk9MKTsKKwlpZiAoY29udHJvbCAmIE9IQ0lfQ1RSTF9JUikgeworCQl3YWl0X3RpbWUgPSA1MDA7IC8qIGFyYml0cmFyeTsgNSBzZWNvbmRzICovCisJCXdyaXRlbChPSENJX0lOVFJfT0MsIGJhc2UgKyBPSENJX0lOVFJFTkFCTEUpOworCQl3cml0ZWwoT0hDSV9PQ1IsIGJhc2UgKyBPSENJX0NNRFNUQVRVUyk7CisJCXdoaWxlICh3YWl0X3RpbWUgPiAwICYmCisJCQkJcmVhZGwoYmFzZSArIE9IQ0lfQ09OVFJPTCkgJiBPSENJX0NUUkxfSVIpIHsKKwkJCXdhaXRfdGltZSAtPSAxMDsKKwkJCW1zbGVlcCgxMCk7CisJCX0KKwkJaWYgKHdhaXRfdGltZSA8PSAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXM6IGVhcmx5IEJJT1MgaGFuZG9mZiAiCisJCQkJCSJmYWlsZWQgKEJJT1MgYnVnID8pXG4iLAorCQkJCQlwZGV2LT5kZXYuYnVzX2lkLCAiT0hDSSIpOworCisJCS8qIHJlc2V0IGNvbnRyb2xsZXIsIHByZXNlcnZpbmcgUldDICovCisJCXdyaXRlbChjb250cm9sICYgT0hDSV9DVFJMX1JXQywgYmFzZSArIE9IQ0lfQ09OVFJPTCk7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIGRpc2FibGUgaW50ZXJydXB0cworCSAqLworCXdyaXRlbCh+KHUzMikwLCBiYXNlICsgT0hDSV9JTlRSRElTQUJMRSk7CisJd3JpdGVsKH4odTMyKTAsIGJhc2UgKyBPSENJX0lOVFJTVEFUVVMpOworCisJaW91bm1hcChiYXNlKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3VzYl9kaXNhYmxlX2VoY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHdhaXRfdGltZSwgZGVsdGE7CisJdm9pZCBfX2lvbWVtICpiYXNlLCAqb3BfcmVnX2Jhc2U7CisJdTMyIGhjY19wYXJhbXMsIHZhbCwgdGVtcDsKKwl1OCBjYXBfbGVuZ3RoOworCisJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKGJhc2UgPT0gTlVMTCkgcmV0dXJuOworCisJY2FwX2xlbmd0aCA9IHJlYWRiKGJhc2UpOworCW9wX3JlZ19iYXNlID0gYmFzZSArIGNhcF9sZW5ndGg7CisJaGNjX3BhcmFtcyA9IHJlYWRsKGJhc2UgKyBFSENJX0hDQ19QQVJBTVMpOworCWhjY19wYXJhbXMgPSAoaGNjX3BhcmFtcyA+PiA4KSAmIDB4ZmY7CisJaWYgKGhjY19wYXJhbXMpIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCWhjY19wYXJhbXMgKyBFSENJX1VTQkxFR1NVUCwKKwkJCQkJJnZhbCk7CisJCWlmICgoKHZhbCAmIDB4ZmYpID09IDEpICYmICh2YWwgJiBFSENJX1VTQkxFR1NVUF9CSU9TKSkgeworCQkJLyoKKwkJCSAqIE9rLCBCSU9TIGlzIGluIHNtbSBtb2RlLCB0cnkgdG8gaGFuZCBvZmYuLi4KKwkJCSAqLworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCQloY2NfcGFyYW1zICsgRUhDSV9VU0JMRUdDVExTVFMsCisJCQkJCQkmdGVtcCk7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCQloY2NfcGFyYW1zICsgRUhDSV9VU0JMRUdDVExTVFMsCisJCQkJCQl0ZW1wIHwgRUhDSV9VU0JMRUdDVExTVFNfU09PRSk7CisJCQl2YWwgfD0gRUhDSV9VU0JMRUdTVVBfT1M7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCQloY2NfcGFyYW1zICsgRUhDSV9VU0JMRUdTVVAsCisJCQkJCQl2YWwpOworCisJCQl3YWl0X3RpbWUgPSA1MDA7CisJCQlkbyB7CisJCQkJbXNsZWVwKDEwKTsKKwkJCQl3YWl0X3RpbWUgLT0gMTA7CisJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCQloY2NfcGFyYW1zICsgRUhDSV9VU0JMRUdTVVAsCisJCQkJCQkmdmFsKTsKKwkJCX0gd2hpbGUgKHdhaXRfdGltZSAmJiAodmFsICYgRUhDSV9VU0JMRUdTVVBfQklPUykpOworCQkJaWYgKCF3YWl0X3RpbWUpIHsKKwkJCQkvKgorCQkJCSAqIHdlbGwsIHBvc3NpYmx5IGJ1Z2d5IEJJT1MuLi4KKwkJCQkgKi8KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAlczogZWFybHkgQklPUyBoYW5kb2ZmICIKKwkJCQkJCSJmYWlsZWQgKEJJT1MgYnVnID8pXG4iLAorCQkJCQlwZGV2LT5kZXYuYnVzX2lkLCAiRUhDSSIpOworCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKKwkJCQkJCWhjY19wYXJhbXMgKyBFSENJX1VTQkxFR1NVUCwKKwkJCQkJCUVIQ0lfVVNCTEVHU1VQX09TKTsKKwkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCQloY2NfcGFyYW1zICsgRUhDSV9VU0JMRUdDVExTVFMsCisJCQkJCQkwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogaGFsdCBFSENJICYgZGlzYWJsZSBpdHMgaW50ZXJydXB0cyBpbiBhbnkgY2FzZQorCSAqLworCXZhbCA9IHJlYWRsKG9wX3JlZ19iYXNlICsgRUhDSV9VU0JTVFMpOworCWlmICgodmFsICYgRUhDSV9VU0JTVFNfSEFMVEVEKSA9PSAwKSB7CisJCXZhbCA9IHJlYWRsKG9wX3JlZ19iYXNlICsgRUhDSV9VU0JDTUQpOworCQl2YWwgJj0gfkVIQ0lfVVNCQ01EX1JVTjsKKwkJd3JpdGVsKHZhbCwgb3BfcmVnX2Jhc2UgKyBFSENJX1VTQkNNRCk7CisKKwkJd2FpdF90aW1lID0gMjAwMDsKKwkJZGVsdGEgPSAxMDA7CisJCWRvIHsKKwkJCXdyaXRlbCgweDNmLCBvcF9yZWdfYmFzZSArIEVIQ0lfVVNCU1RTKTsKKwkJCXVkZWxheShkZWx0YSk7CisJCQl3YWl0X3RpbWUgLT0gZGVsdGE7CisJCQl2YWwgPSByZWFkbChvcF9yZWdfYmFzZSArIEVIQ0lfVVNCU1RTKTsKKwkJCWlmICgodmFsID09IH4odTMyKTApIHx8ICh2YWwgJiBFSENJX1VTQlNUU19IQUxURUQpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gd2hpbGUgKHdhaXRfdGltZSA+IDApOworCX0KKwl3cml0ZWwoMCwgb3BfcmVnX2Jhc2UgKyBFSENJX1VTQklOVFIpOworCXdyaXRlbCgweDNmLCBvcF9yZWdfYmFzZSArIEVIQ0lfVVNCU1RTKTsKKworCWlvdW5tYXAoYmFzZSk7CisKKwlyZXR1cm47Cit9CisKKworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKHBkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCX1VIQ0kpCisJCXF1aXJrX3VzYl9oYW5kb2ZmX3VoY2kocGRldik7CisJZWxzZSBpZiAocGRldi0+Y2xhc3MgPT0gUENJX0NMQVNTX1NFUklBTF9VU0JfT0hDSSkKKwkJcXVpcmtfdXNiX2hhbmRvZmZfb2hjaShwZGV2KTsKKwllbHNlIGlmIChwZGV2LT5jbGFzcyA9PSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9FSENJKQorCQlxdWlya191c2JfZGlzYWJsZV9laGNpKHBkZXYpOworfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHF1aXJrX3VzYl9lYXJseV9oYW5kb2ZmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IGI1ZTdhNDcuLjQwMTY5ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMTM2Myw3ICsxMzYzLDcgQEAKICNpZmRlZglDT05GSUdfUE0KIAogc3RhdGljIGludAotc2w4MTFoX2h1Yl9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzbDgxMWhfYnVzX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAkvLyBTT0ZzIG9mZgogCURCRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zbDgxMWhfaHViX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQorc2w4MTFoX2J1c19yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAkvLyBTT0ZzIG9uCiAJREJHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKQEAgLTEzODAsOCArMTM4MCw4IEBACiAKICNlbHNlCiAKLSNkZWZpbmUJc2w4MTFoX2h1Yl9zdXNwZW5kCU5VTEwKLSNkZWZpbmUJc2w4MTFoX2h1Yl9yZXN1bWUJTlVMTAorI2RlZmluZQlzbDgxMWhfYnVzX3N1c3BlbmQJTlVMTAorI2RlZmluZQlzbDgxMWhfYnVzX3Jlc3VtZQlOVUxMCiAKICNlbmRpZgogCkBAIC0xNjIzLDggKzE2MjMsOCBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlzbDgxMWhfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbCA9CQlzbDgxMWhfaHViX2NvbnRyb2wsCi0JLmh1Yl9zdXNwZW5kID0JCXNsODExaF9odWJfc3VzcGVuZCwKLQkuaHViX3Jlc3VtZSA9CQlzbDgxMWhfaHViX3Jlc3VtZSwKKwkuYnVzX3N1c3BlbmQgPQkJc2w4MTFoX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCXNsODExaF9idXNfcmVzdW1lLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE3OTEsNyArMTc5MSw3IEBACiAJaW50CQlyZXR2YWwgPSAwOwogCiAJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkKLQkJcmV0dmFsID0gc2w4MTFoX2h1Yl9zdXNwZW5kKGhjZCk7CisJCXJldHZhbCA9IHNsODExaF9idXNfc3VzcGVuZChoY2QpOwogCWVsc2UgaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpCiAJCXBvcnRfcG93ZXIoc2w4MTEsIDApOwogCWlmIChyZXR2YWwgPT0gMCkKQEAgLTE4MTYsNyArMTgxNiw3IEBACiAJfQogCiAJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047Ci0JcmV0dXJuIHNsODExaF9odWJfcmVzdW1lKGhjZCk7CisJcmV0dXJuIHNsODExaF9idXNfcmVzdW1lKGhjZCk7CiB9CiAKICNlbHNlCkBAIC0xODMxLDYgKzE4MzEsNyBAQAogc3RydWN0IGRldmljZV9kcml2ZXIgc2w4MTFoX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKIAkuYnVzID0JCSZwbGF0Zm9ybV9idXNfdHlwZSwKKwkub3duZXIgPQlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CXNsODExaF9wcm9iZSwKIAkucmVtb3ZlID0JX19kZXZleGl0X3Aoc2w4MTFoX3JlbW92ZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCmluZGV4IDQ1MzhhOTguLjE1MTE1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCkBAIC0zNDgsNyArMzQ4LDYgQEAKIAogCWlmICh1cmJwLT51cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIlN0YXR1cz0lZCAiLCB1cmJwLT51cmItPnN0YXR1cyk7Ci0JLy9vdXQgKz0gc3ByaW50ZihvdXQsICJJbnNlcnR0aW1lPSVseCAiLHVyYnAtPmluc2VydHRpbWUpOwogCS8vb3V0ICs9IHNwcmludGYob3V0LCAiRlNCUnRpbWU9JWx4ICIsdXJicC0+ZnNicnRpbWUpOwogCiAJY291bnQgPSAwOwpAQCAtNDQ2LDExICs0NDUsMTEgQEAKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJGcmFtZSBMaXN0XG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1GUkFNRVM7ICsraSkgewogCQlpbnQgc2hvd24gPSAwOwotCQl0ZCA9IHVoY2ktPmZsLT5mcmFtZV9jcHVbaV07CisJCXRkID0gdWhjaS0+ZnJhbWVfY3B1W2ldOwogCQlpZiAoIXRkKQogCQkJY29udGludWU7CiAKLQkJaWYgKHRkLT5kbWFfaGFuZGxlICE9IChkbWFfYWRkcl90KXVoY2ktPmZsLT5mcmFtZVtpXSkgeworCQlpZiAodGQtPmRtYV9oYW5kbGUgIT0gKGRtYV9hZGRyX3QpdWhjaS0+ZnJhbWVbaV0pIHsKIAkJCXNob3dfZnJhbWVfbnVtKCk7CiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgZnJhbWUgbGlzdCBkb2VzIG5vdCBtYXRjaCB0ZC0+ZG1hX2hhbmRsZSFcbiIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggMGMwMjQ4OS4uMTVlMGE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtMTAxLDM3ICsxMDEsMTYgQEAKICNpbmNsdWRlICJ1aGNpLXEuYyIKICNpbmNsdWRlICJ1aGNpLWh1Yi5jIgogCitleHRlcm4gdm9pZCB1aGNpX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOworZXh0ZXJuIGludCB1aGNpX2NoZWNrX2FuZF9yZXNldF9oYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBiYXNlKTsKKwogLyoKLSAqIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpcyBjb21wbGV0ZWx5IGluYWN0aXZlLCB1bmFibGUgdG8KLSAqIGdlbmVyYXRlIGludGVycnVwdHMgb3IgZG8gRE1BLgorICogRmluaXNoIHVwIGEgaG9zdCBjb250cm9sbGVyIHJlc2V0IGFuZCB1cGRhdGUgdGhlIHJlY29yZGVkIHN0YXRlLgogICovCi1zdGF0aWMgdm9pZCByZXNldF9oYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVzZXQoc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewogCWludCBwb3J0OwogCi0JLyogVHVybiBvZmYgUElSUSBlbmFibGUgYW5kIFNNSSBlbmFibGUuICAoVGhpcyBhbHNvIHR1cm5zIG9mZiB0aGUKLQkgKiBCSU9TJ3MgVVNCIExlZ2FjeSBTdXBwb3J0LikgIFR1cm4gb2ZmIGFsbCB0aGUgUi9XQyBiaXRzIHRvby4KLQkgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIFVTQkxFR1NVUCwKLQkJCVVTQkxFR1NVUF9SV0MpOwotCi0JLyogUmVzZXQgdGhlIEhDIC0gdGhpcyB3aWxsIGZvcmNlIHVzIHRvIGdldCBhCi0JICogbmV3IG5vdGlmaWNhdGlvbiBvZiBhbnkgYWxyZWFkeSBjb25uZWN0ZWQKLQkgKiBwb3J0cyBkdWUgdG8gdGhlIHZpcnR1YWwgZGlzY29ubmVjdCB0aGF0IGl0Ci0JICogaW1wbGllcy4KLQkgKi8KLQlvdXR3KFVTQkNNRF9IQ1JFU0VULCB1aGNpLT5pb19hZGRyICsgVVNCQ01EKTsKLQltYigpOwotCXVkZWxheSg1KTsKLQlpZiAoaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JDTUQpICYgVVNCQ01EX0hDUkVTRVQpCi0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAiSENSRVNFVCBub3QgY29tcGxldGVkIHlldCFcbiIpOwotCi0JLyogSnVzdCB0byBiZSBzYWZlLCBkaXNhYmxlIGludGVycnVwdCByZXF1ZXN0cyBhbmQKLQkgKiBtYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgaXMgc3RvcHBlZC4KLQkgKi8KLQlvdXR3KDAsIHVoY2ktPmlvX2FkZHIgKyBVU0JJTlRSKTsKLQlvdXR3KDAsIHVoY2ktPmlvX2FkZHIgKyBVU0JDTUQpOwotCiAJLyogSENSRVNFVCBkb2Vzbid0IGFmZmVjdCB0aGUgU3VzcGVuZCwgUmVzZXQsIGFuZCBSZXN1bWUgRGV0ZWN0CiAJICogYml0cyBpbiB0aGUgcG9ydCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLgogCSAqIFdlIGhhdmUgdG8gY2xlYXIgdGhlbSBieSBoYW5kLgpAQCAtMTUzLDcgKzEzMiw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGhjX2RpZWQoc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewotCXJlc2V0X2hjKHVoY2kpOworCXVoY2lfcmVzZXRfaGModG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIHVoY2ktPmlvX2FkZHIpOworCWZpbmlzaF9yZXNldCh1aGNpKTsKIAl1aGNpLT5oY19pbmFjY2Vzc2libGUgPSAxOwogfQogCkBAIC0xNjMsNDQgKzE0Myw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNoZWNrX2FuZF9yZXNldF9oYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCiB7Ci0JdTE2IGxlZ3N1cDsKLQl1bnNpZ25lZCBpbnQgY21kLCBpbnRyOwotCi0JLyoKLQkgKiBXaGVuIHJlc3RhcnRpbmcgYSBzdXNwZW5kZWQgY29udHJvbGxlciwgd2UgZXhwZWN0IGFsbCB0aGUKLQkgKiBzZXR0aW5ncyB0byBiZSB0aGUgc2FtZSBhcyB3ZSBsZWZ0IHRoZW06Ci0JICoKLQkgKglQSVJRIGFuZCBTTUkgZGlzYWJsZWQsIG5vIFIvVyBiaXRzIHNldCBpbiBVU0JMRUdTVVA7Ci0JICoJQ29udHJvbGxlciBpcyBzdG9wcGVkIGFuZCBjb25maWd1cmVkIHdpdGggRUdTTSBzZXQ7Ci0JICoJTm8gaW50ZXJydXB0cyBlbmFibGVkIGV4Y2VwdCBwb3NzaWJseSBSZXN1bWUgRGV0ZWN0LgotCSAqCi0JICogSWYgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMgYXJlIHZpb2xhdGVkIHdlIGRvIGEgY29tcGxldGUgcmVzZXQuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIFVTQkxFR1NVUCwgJmxlZ3N1cCk7Ci0JaWYgKGxlZ3N1cCAmIH4oVVNCTEVHU1VQX1JPIHwgVVNCTEVHU1VQX1JXQykpIHsKLQkJZGV2X2RiZyh1aGNpX2Rldih1aGNpKSwgIiVzOiBsZWdzdXAgPSAweCUwNHhcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBsZWdzdXApOwotCQlnb3RvIHJlc2V0X25lZWRlZDsKLQl9Ci0KLQljbWQgPSBpbncodWhjaS0+aW9fYWRkciArIFVTQkNNRCk7Ci0JaWYgKChjbWQgJiBVU0JDTURfUlMpIHx8ICEoY21kICYgVVNCQ01EX0NGKSB8fCAhKGNtZCAmIFVTQkNNRF9FR1NNKSkgewotCQlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiJXM6IGNtZCA9IDB4JTA0eFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGNtZCk7Ci0JCWdvdG8gcmVzZXRfbmVlZGVkOwotCX0KLQotCWludHIgPSBpbncodWhjaS0+aW9fYWRkciArIFVTQklOVFIpOwotCWlmIChpbnRyICYgKH5VU0JJTlRSX1JFU1VNRSkpIHsKLQkJZGV2X2RiZyh1aGNpX2Rldih1aGNpKSwgIiVzOiBpbnRyID0gMHglMDR4XG4iLAotCQkJCV9fRlVOQ1RJT05fXywgaW50cik7Ci0JCWdvdG8gcmVzZXRfbmVlZGVkOwotCX0KLQlyZXR1cm47Ci0KLXJlc2V0X25lZWRlZDoKLQlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiUGVyZm9ybWluZyBmdWxsIHJlc2V0XG4iKTsKLQlyZXNldF9oYyh1aGNpKTsKKwlpZiAodWhjaV9jaGVja19hbmRfcmVzZXRfaGModG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIHVoY2ktPmlvX2FkZHIpKQorCQlmaW5pc2hfcmVzZXQodWhjaSk7CiB9CiAKIC8qCkBAIC0yMTIsMTMgKzE1NiwxMyBAQAogCW91dGIoVVNCU09GX0RFRkFVTFQsIHVoY2ktPmlvX2FkZHIgKyBVU0JTT0YpOwogCiAJLyogU3RvcmUgdGhlIGZyYW1lIGxpc3QgYmFzZSBhZGRyZXNzICovCi0Jb3V0bCh1aGNpLT5mbC0+ZG1hX2hhbmRsZSwgdWhjaS0+aW9fYWRkciArIFVTQkZMQkFTRUFERCk7CisJb3V0bCh1aGNpLT5mcmFtZV9kbWFfaGFuZGxlLCB1aGNpLT5pb19hZGRyICsgVVNCRkxCQVNFQUREKTsKIAogCS8qIFNldCB0aGUgY3VycmVudCBmcmFtZSBudW1iZXIgKi8KIAlvdXR3KHVoY2ktPmZyYW1lX251bWJlciwgdWhjaS0+aW9fYWRkciArIFVTQkZSTlVNKTsKIAotCS8qIE1hcmsgY29udHJvbGxlciBhcyBydW5uaW5nIGJlZm9yZSB3ZSBlbmFibGUgaW50ZXJydXB0cyAqLwotCXVoY2lfdG9faGNkKHVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJLyogTWFyayBjb250cm9sbGVyIGFzIG5vdCBoYWx0ZWQgYmVmb3JlIHdlIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJdWhjaV90b19oY2QodWhjaSktPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCW1iKCk7CiAKIAkvKiBFbmFibGUgUElSUSAqLwpAQCAtMzE5LDYgKzI2Myw3IEBACiAKIHN0YXRpYyB2b2lkIHN0YXJ0X3JoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKIHsKKwl1aGNpX3RvX2hjZCh1aGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOwogCXVoY2ktPmlzX3N0b3BwZWQgPSAwOwogCXNtcF93bWIoKTsKIApAQCAtNDM3LDM2ICszODIsMjEgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7IGkrKykKLQkJaWYgKHVoY2ktPnNrZWxxaFtpXSkgewotCQkJdWhjaV9mcmVlX3FoKHVoY2ksIHVoY2ktPnNrZWxxaFtpXSk7Ci0JCQl1aGNpLT5za2VscWhbaV0gPSBOVUxMOwotCQl9CisJCXVoY2lfZnJlZV9xaCh1aGNpLCB1aGNpLT5za2VscWhbaV0pOwogCi0JaWYgKHVoY2ktPnRlcm1fdGQpIHsKLQkJdWhjaV9mcmVlX3RkKHVoY2ksIHVoY2ktPnRlcm1fdGQpOwotCQl1aGNpLT50ZXJtX3RkID0gTlVMTDsKLQl9CisJdWhjaV9mcmVlX3RkKHVoY2ksIHVoY2ktPnRlcm1fdGQpOwogCi0JaWYgKHVoY2ktPnFoX3Bvb2wpIHsKLQkJZG1hX3Bvb2xfZGVzdHJveSh1aGNpLT5xaF9wb29sKTsKLQkJdWhjaS0+cWhfcG9vbCA9IE5VTEw7Ci0JfQorCWRtYV9wb29sX2Rlc3Ryb3kodWhjaS0+cWhfcG9vbCk7CiAKLQlpZiAodWhjaS0+dGRfcG9vbCkgewotCQlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnRkX3Bvb2wpOwotCQl1aGNpLT50ZF9wb29sID0gTlVMTDsKLQl9CisJZG1hX3Bvb2xfZGVzdHJveSh1aGNpLT50ZF9wb29sKTsKIAotCWlmICh1aGNpLT5mbCkgewotCQlkbWFfZnJlZV9jb2hlcmVudCh1aGNpX2Rldih1aGNpKSwgc2l6ZW9mKCp1aGNpLT5mbCksCi0JCQkJdWhjaS0+ZmwsIHVoY2ktPmZsLT5kbWFfaGFuZGxlKTsKLQkJdWhjaS0+ZmwgPSBOVUxMOwotCX0KKwlrZnJlZSh1aGNpLT5mcmFtZV9jcHUpOwogCi0JaWYgKHVoY2ktPmRlbnRyeSkgewotCQlkZWJ1Z2ZzX3JlbW92ZSh1aGNpLT5kZW50cnkpOwotCQl1aGNpLT5kZW50cnkgPSBOVUxMOwotCX0KKwlkbWFfZnJlZV9jb2hlcmVudCh1aGNpX2Rldih1aGNpKSwKKwkJCVVIQ0lfTlVNRlJBTUVTICogc2l6ZW9mKCp1aGNpLT5mcmFtZSksCisJCQl1aGNpLT5mcmFtZSwgdWhjaS0+ZnJhbWVfZG1hX2hhbmRsZSk7CisKKwlkZWJ1Z2ZzX3JlbW92ZSh1aGNpLT5kZW50cnkpOwogfQogCiBzdGF0aWMgaW50IHVoY2lfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKQEAgLTU0NSw3ICs0NzUsNiBAQAogCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CiAJaW50IHJldHZhbCA9IC1FQlVTWTsKIAlpbnQgaTsKLQlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKQEAgLTU3OSwxNyArNTA4LDIzIEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1aGNpLT53YWl0cWgpOwogCi0JdWhjaS0+ZmwgPSBkbWFfYWxsb2NfY29oZXJlbnQodWhjaV9kZXYodWhjaSksIHNpemVvZigqdWhjaS0+ZmwpLAotCQkJJmRtYV9oYW5kbGUsIDApOwotCWlmICghdWhjaS0+ZmwpIHsKKwl1aGNpLT5mcmFtZSA9IGRtYV9hbGxvY19jb2hlcmVudCh1aGNpX2Rldih1aGNpKSwKKwkJCVVIQ0lfTlVNRlJBTUVTICogc2l6ZW9mKCp1aGNpLT5mcmFtZSksCisJCQkmdWhjaS0+ZnJhbWVfZG1hX2hhbmRsZSwgMCk7CisJaWYgKCF1aGNpLT5mcmFtZSkgewogCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGFsbG9jYXRlICIKIAkJCQkiY29uc2lzdGVudCBtZW1vcnkgZm9yIGZyYW1lIGxpc3RcbiIpOwotCQlnb3RvIGVycl9hbGxvY19mbDsKKwkJZ290byBlcnJfYWxsb2NfZnJhbWU7CiAJfQorCW1lbXNldCh1aGNpLT5mcmFtZSwgMCwgVUhDSV9OVU1GUkFNRVMgKiBzaXplb2YoKnVoY2ktPmZyYW1lKSk7CiAKLQltZW1zZXQoKHZvaWQgKil1aGNpLT5mbCwgMCwgc2l6ZW9mKCp1aGNpLT5mbCkpOwotCi0JdWhjaS0+ZmwtPmRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlOworCXVoY2ktPmZyYW1lX2NwdSA9IGtjYWxsb2MoVUhDSV9OVU1GUkFNRVMsIHNpemVvZigqdWhjaS0+ZnJhbWVfY3B1KSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghdWhjaS0+ZnJhbWVfY3B1KSB7CisJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJ1bmFibGUgdG8gYWxsb2NhdGUgIgorCQkJCSJtZW1vcnkgZm9yIGZyYW1lIHBvaW50ZXJzXG4iKTsKKwkJZ290byBlcnJfYWxsb2NfZnJhbWVfY3B1OworCX0KIAogCXVoY2ktPnRkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInVoY2lfdGQiLCB1aGNpX2Rldih1aGNpKSwKIAkJCXNpemVvZihzdHJ1Y3QgdWhjaV90ZCksIDE2LCAwKTsKQEAgLTY3Miw3ICs2MDcsNyBAQAogCQkJaXJxID0gNzsKIAogCQkvKiBPbmx5IHBsYWNlIHdlIGRvbid0IHVzZSB0aGUgZnJhbWUgbGlzdCByb3V0aW5lcyAqLwotCQl1aGNpLT5mbC0+ZnJhbWVbaV0gPSBVSENJX1BUUl9RSCB8CisJCXVoY2ktPmZyYW1lW2ldID0gVUhDSV9QVFJfUUggfAogCQkJCWNwdV90b19sZTMyKHVoY2ktPnNrZWxxaFtpcnFdLT5kbWFfaGFuZGxlKTsKIAl9CiAKQEAgLTY5MCwzMSArNjI1LDI5IEBACiAgKiBlcnJvciBleGl0czoKICAqLwogZXJyX2FsbG9jX3NrZWxxaDoKLQlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1fU0tFTFFIOyBpKyspCi0JCWlmICh1aGNpLT5za2VscWhbaV0pIHsKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1fU0tFTFFIOyBpKyspIHsKKwkJaWYgKHVoY2ktPnNrZWxxaFtpXSkKIAkJCXVoY2lfZnJlZV9xaCh1aGNpLCB1aGNpLT5za2VscWhbaV0pOwotCQkJdWhjaS0+c2tlbHFoW2ldID0gTlVMTDsKLQkJfQorCX0KIAogCXVoY2lfZnJlZV90ZCh1aGNpLCB1aGNpLT50ZXJtX3RkKTsKLQl1aGNpLT50ZXJtX3RkID0gTlVMTDsKIAogZXJyX2FsbG9jX3Rlcm1fdGQ6CiAJZG1hX3Bvb2xfZGVzdHJveSh1aGNpLT5xaF9wb29sKTsKLQl1aGNpLT5xaF9wb29sID0gTlVMTDsKIAogZXJyX2NyZWF0ZV9xaF9wb29sOgogCWRtYV9wb29sX2Rlc3Ryb3kodWhjaS0+dGRfcG9vbCk7Ci0JdWhjaS0+dGRfcG9vbCA9IE5VTEw7CiAKIGVycl9jcmVhdGVfdGRfcG9vbDoKLQlkbWFfZnJlZV9jb2hlcmVudCh1aGNpX2Rldih1aGNpKSwgc2l6ZW9mKCp1aGNpLT5mbCksCi0JCQl1aGNpLT5mbCwgdWhjaS0+ZmwtPmRtYV9oYW5kbGUpOwotCXVoY2ktPmZsID0gTlVMTDsKKwlrZnJlZSh1aGNpLT5mcmFtZV9jcHUpOwogCi1lcnJfYWxsb2NfZmw6CitlcnJfYWxsb2NfZnJhbWVfY3B1OgorCWRtYV9mcmVlX2NvaGVyZW50KHVoY2lfZGV2KHVoY2kpLAorCQkJVUhDSV9OVU1GUkFNRVMgKiBzaXplb2YoKnVoY2ktPmZyYW1lKSwKKwkJCXVoY2ktPmZyYW1lLCB1aGNpLT5mcmFtZV9kbWFfaGFuZGxlKTsKKworZXJyX2FsbG9jX2ZyYW1lOgogCWRlYnVnZnNfcmVtb3ZlKHVoY2ktPmRlbnRyeSk7Ci0JdWhjaS0+ZGVudHJ5ID0gTlVMTDsKIAogZXJyX2NyZWF0ZV9kZWJ1Z19lbnRyeToKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNzI2LDcgKzY1OSw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKIAlpZiAoIXVoY2ktPmhjX2luYWNjZXNzaWJsZSkKLQkJcmVzZXRfaGModWhjaSk7CisJCWhjX2RpZWQodWhjaSk7CiAJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOwogCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CiAKQEAgLTc3NCwxNCArNzA3LDggQEAKIAlpZiAodWhjaS0+aGNfaW5hY2Nlc3NpYmxlKQkvKiBEZWFkIG9yIGFscmVhZHkgc3VzcGVuZGVkICovCiAJCWdvdG8gZG9uZTsKIAotI2lmbmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKLQkvKiBPdGhlcndpc2UgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4gKi8KLQlzdXNwZW5kX3JoKHVoY2ksIFVIQ0lfUkhfU1VTUEVOREVEKTsKLSNlbmRpZgotCiAJaWYgKHVoY2ktPnJoX3N0YXRlID4gVUhDSV9SSF9TVVNQRU5ERUQpIHsKIAkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJSb290IGh1YiBpc24ndCBzdXNwZW5kZWQhXG4iKTsKLQkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CiAJCXJjID0gLUVCVVNZOwogCQlnb3RvIGRvbmU7CiAJfTsKQEAgLTgyMCwxMCArNzQ3LDYgQEAKIAljaGVja19hbmRfcmVzZXRfaGModWhjaSk7CiAJY29uZmlndXJlX2hjKHVoY2kpOwogCi0jaWZuZGVmIENPTkZJR19VU0JfU1VTUEVORAotCS8qIE90aGVyd2lzZSB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbiAqLwotCXdha2V1cF9yaCh1aGNpKTsKLSNlbmRpZgogCWlmICh1aGNpLT5yaF9zdGF0ZSA9PSBVSENJX1JIX1JFU0VUKQogCQlzdXNwZW5kX3JoKHVoY2ksIFVIQ0lfUkhfU1VTUEVOREVEKTsKIApAQCAtODgxLDggKzgwNCw4IEBACiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPQkJdWhjaV9zdXNwZW5kLAogCS5yZXN1bWUgPQkJdWhjaV9yZXN1bWUsCi0JLmh1Yl9zdXNwZW5kID0JCXVoY2lfcmhfc3VzcGVuZCwKLQkuaHViX3Jlc3VtZSA9CQl1aGNpX3JoX3Jlc3VtZSwKKwkuYnVzX3N1c3BlbmQgPQkJdWhjaV9yaF9zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCXVoY2lfcmhfcmVzdW1lLAogI2VuZGlmCiAJLnN0b3AgPQkJCXVoY2lfc3RvcCwKIApAQCAtOTA4LDYgKzgzMSw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdWhjaV9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopaGNkX25hbWUsCiAJLmlkX3RhYmxlID0JdWhjaV9wY2lfaWRzLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JdXNiX2hjZF9wY2lfcHJvYmUsCiAJLnJlbW92ZSA9CXVzYl9oY2RfcGNpX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAppbmRleCAyODJmNDBiLi5lNTc2ZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCkBAIC03LDYgKzcsNyBAQAogI2RlZmluZSB1c2JfcGFja2V0aWQocGlwZSkJKHVzYl9waXBlaW4ocGlwZSkgPyBVU0JfUElEX0lOIDogVVNCX1BJRF9PVVQpCiAjZGVmaW5lIFBJUEVfREVWRVBfTUFTSwkJMHgwMDA3ZmYwMAogCisKIC8qCiAgKiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMKICAqLwpAQCAtODIsMTUgKzgzLDEwIEBACiAjZGVmaW5lIFVIQ0lfTUFYX1NPRl9OVU1CRVIJMjA0NwkvKiBpbiBhbiBTT0YgcGFja2V0ICovCiAjZGVmaW5lIENBTl9TQ0hFRFVMRV9GUkFNRVMJMTAwMAkvKiBob3cgZmFyIGZ1dHVyZSBmcmFtZXMgY2FuIGJlIHNjaGVkdWxlZCAqLwogCi1zdHJ1Y3QgdWhjaV9mcmFtZV9saXN0IHsKLQlfX2xlMzIgZnJhbWVbVUhDSV9OVU1GUkFNRVNdOwogCi0Jdm9pZCAqZnJhbWVfY3B1W1VIQ0lfTlVNRlJBTUVTXTsKLQotCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKLX07Ci0KLXN0cnVjdCB1cmJfcHJpdjsKKy8qCisgKglRdWV1ZSBIZWFkZXJzCisgKi8KIAogLyoKICAqIE9uZSByb2xlIG9mIGEgUUggaXMgdG8gaG9sZCBhIHF1ZXVlIG9mIFREcyBmb3Igc29tZSBlbmRwb2ludC4gIEVhY2ggUUggaXMKQEAgLTExNiwxMyArMTEyLDEzIEBACiAKIAlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBQOiB1aGNpLT5mcmFtZV9saXN0X2xvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlbW92ZV9saXN0OwkvKiBQOiB1aGNpLT5yZW1vdmVfbGlzdF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlX2xpc3Q7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7CiAKIC8qCiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBhY2Nlc3NvciBmb3IgdGhlIGVsZW1lbnQgcG9pbnRlciBiZWNhdXNlIGl0IGlzCi0gKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyCisgKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyLgogICovCiBzdGF0aWMgX19sZTMyIGlubGluZSBxaF9lbGVtZW50KHN0cnVjdCB1aGNpX3FoICpxaCkgewogCV9fbGUzMiBlbGVtZW50ID0gcWgtPmVsZW1lbnQ7CkBAIC0xMzEsNiArMTI3LDExIEBACiAJcmV0dXJuIGVsZW1lbnQ7CiB9CiAKKworLyoKKyAqCVRyYW5zZmVyIERlc2NyaXB0b3JzCisgKi8KKwogLyoKICAqIGZvciBURCA8c3RhdHVzPjoKICAqLwpAQCAtMTgzLDE3ICsxODQsMTAgQEAKICAqCiAgKiBUaGF0J3Mgc2lsbHksIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGNhcmUuIFRoZSBoYXJkd2FyZSBvbmx5IGNhcmVzIHRoYXQKICAqIHRoZSBoYXJkd2FyZSB3b3JkcyBhcmUgMTYtYnl0ZSBhbGlnbmVkLCBhbmQgd2UgY2FuIGhhdmUgYW55IGFtb3VudCBvZgotICogc3cgc3BhY2UgYWZ0ZXIgdGhlIFREIGVudHJ5IGFzIGZhciBhcyBJIGNhbiB0ZWxsLgotICoKLSAqIEJ1dCBsZXQncyBqdXN0IGdvIHdpdGggdGhlIGRvY3VtZW50YXRpb24sIGF0IGxlYXN0IGZvciAzMi1iaXQgbWFjaGluZXMuCi0gKiBPbiA2NC1iaXQgbWFjaGluZXMgd2UgcHJvYmFibHkgd2FudCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0Ci0gKiBodyBkb2Vzbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSBzaXplIG9mIHRoZSBzdy1vbmx5IGFyZWEuCi0gKgotICogQWxhcywgbm90IGFueW1vcmUsIHdlIGhhdmUgbW9yZSB0aGFuIDQgd29yZHMgZm9yIHNvZnR3YXJlLCB3b29wcy4KLSAqIEV2ZXJ5dGhpbmcgc3RpbGwgd29ya3MgdGhvLCBzdXJwcmlzZSEgLWplcmRmZWx0CisgKiBzdyBzcGFjZSBhZnRlciB0aGUgVEQgZW50cnkuCiAgKgogICogdGQtPmxpbmsgcG9pbnRzIHRvIGVpdGhlciBhbm90aGVyIFREIChub3QgbmVjZXNzYXJpbHkgZm9yIHRoZSBzYW1lIHVyYiBvcgotICogZXZlbiB0aGUgc2FtZSBlbmRwb2ludCksIG9yIG5vdGhpbmcgKFBUUl9URVJNKSwgb3IgYSBRSCAoZm9yIHF1ZXVlZCB1cmJzKQorICogZXZlbiB0aGUgc2FtZSBlbmRwb2ludCksIG9yIG5vdGhpbmcgKFBUUl9URVJNKSwgb3IgYSBRSCAoZm9yIHF1ZXVlZCB1cmJzKS4KICAqLwogc3RydWN0IHVoY2lfdGQgewogCS8qIEhhcmR3YXJlIGZpZWxkcyAqLwpAQCAtMjA1LDE4ICsxOTksMTYgQEAKIAkvKiBTb2Z0d2FyZSBmaWVsZHMgKi8KIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBQOiB1cmItPmxvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlbW92ZV9saXN0OwkvKiBQOiB1aGNpLT50ZF9yZW1vdmVfbGlzdF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlX2xpc3Q7CiAKIAlpbnQgZnJhbWU7CQkJLyogZm9yIGlzbzogd2hhdCBmcmFtZT8gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZsX2xpc3Q7CS8qIFA6IHVoY2ktPmZyYW1lX2xpc3RfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmxfbGlzdDsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKIAogLyoKICAqIFdlIG5lZWQgYSBzcGVjaWFsIGFjY2Vzc29yIGZvciB0aGUgY29udHJvbC9zdGF0dXMgd29yZCBiZWNhdXNlIGl0IGlzCi0gKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyCisgKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyLgogICovCiBzdGF0aWMgdTMyIGlubGluZSB0ZF9zdGF0dXMoc3RydWN0IHVoY2lfdGQgKnRkKSB7CiAJX19sZTMyIHN0YXR1cyA9IHRkLT5zdGF0dXM7CkBAIC0yMjcsNiArMjE5LDEwIEBACiAKIAogLyoKKyAqCVNrZWxldG9uIFF1ZXVlIEhlYWRlcnMKKyAqLworCisvKgogICogVGhlIFVIQ0kgZHJpdmVyIHBsYWNlcyBJbnRlcnJ1cHQsIENvbnRyb2wgYW5kIEJ1bGsgaW50byBRSCdzIGJvdGgKICAqIHRvIGdyb3VwIHRvZ2V0aGVyIFREJ3MgZm9yIG9uZSB0cmFuc2ZlciwgYW5kIGFsc28gdG8gZmFjaWxpYXRlIHF1ZXVpbmcKICAqIG9mIFVSQidzLiBUbyBtYWtlIGl0IGVhc3kgdG8gaW5zZXJ0IGVudHJpZXMgaW50byB0aGUgc2NoZWR1bGUsIHdlIGhhdmUKQEAgLTI1NiwxNSArMjUyLDE1IEBACiAgKgogICogVGhlIHRlcm1pbmF0aW5nIFFIIGlzIHVzZWQgZm9yIDIgcmVhc29uczoKICAqIC0gVG8gcGxhY2UgYSB0ZXJtaW5hdGluZyBURCB3aGljaCBpcyB1c2VkIHRvIHdvcmthcm91bmQgYSBQSUlYIGJ1ZwotICogICAoc2VlIEludGVsIGVycmF0YSBmb3IgZXhwbGFuYXRpb24pCisgKiAgIChzZWUgSW50ZWwgZXJyYXRhIGZvciBleHBsYW5hdGlvbiksIGFuZAogICogLSBUbyBsb29wIGJhY2sgdG8gdGhlIGZ1bGwtc3BlZWQgY29udHJvbCBxdWV1ZSBmb3IgZnVsbC1zcGVlZCBiYW5kd2lkdGgKLSAqICAgcmVjbGFtYXRpb24KKyAqICAgcmVjbGFtYXRpb24uCiAgKgogICogSXNvY2hyb25vdXMgdHJhbnNmZXJzIGFyZSBzdG9yZWQgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc2tlbGV0b24KICAqIHNjaGVkdWxlIGFuZCBkb24ndCB1c2UgUUgncy4gV2hpbGUgdGhlIFVIQ0kgc3BlYyBkb2Vzbid0IGZvcmJpZCB0aGUKLSAqIHVzZSBvZiBRSCdzIGZvciBJc29jaHJvbm91cywgaXQgZG9lc24ndCB1c2UgdGhlbSBlaXRoZXIuIFNpbmNlIHdlIGRvbid0Ci0gKiBuZWVkIHRvIHVzZSB0aGVtIGVpdGhlciwgd2UgZm9sbG93IHRoZSBzcGVjIGRpYWdyYW1zIGluIGhvcGUgdGhhdCBpdCdsbAotICogYmUgbW9yZSBjb21wYXRpYmxlIHdpdGggZnV0dXJlIFVIQ0kgaW1wbGVtZW50YXRpb25zLgorICogdXNlIG9mIFFIJ3MgZm9yIElzb2Nocm9ub3VzLCBpdCBkb2Vzbid0IHVzZSB0aGVtIGVpdGhlci4gQW5kIHRoZSBzcGVjCisgKiBzYXlzIHRoYXQgcXVldWVzIG5ldmVyIGFkdmFuY2Ugb24gYW4gZXJyb3IgY29tcGxldGlvbiBzdGF0dXMsIHdoaWNoCisgKiBtYWtlcyB0aGVtIHRvdGFsbHkgdW5zdWl0YWJsZSBmb3IgSXNvY2hyb25vdXMgdHJhbnNmZXJzLgogICovCiAKICNkZWZpbmUgVUhDSV9OVU1fU0tFTFFICQkxMgpAQCAtMzE0LDggKzMxMCwxMyBAQAogCXJldHVybiAwOwkJCQkvKiBpbnQxMjggZm9yIDEyOC0yNTUgbXMgKE1heC4pICovCiB9CiAKKwogLyoKLSAqIFN0YXRlcyBmb3IgdGhlIHJvb3QgaHViLgorICoJVGhlIFVIQ0kgY29udHJvbGxlciBhbmQgcm9vdCBodWIKKyAqLworCisvKgorICogU3RhdGVzIGZvciB0aGUgcm9vdCBodWI6CiAgKgogICogVG8gcHJldmVudCAiYm91bmNpbmciIGluIHRoZSBwcmVzZW5jZSBvZiBlbGVjdHJpY2FsIG5vaXNlLAogICogd2hlbiB0aGVyZSBhcmUgbm8gZGV2aWNlcyBhdHRhY2hlZCB3ZSBkZWxheSBmb3IgMSBzZWNvbmQgaW4gdGhlCkBAIC0zMjYsNyArMzI3LDcgQEAKICAqLwogZW51bSB1aGNpX3JoX3N0YXRlIHsKIAkvKiBJbiB0aGUgZm9sbG93aW5nIHN0YXRlcyB0aGUgSEMgbXVzdCBiZSBoYWx0ZWQuCi0JICogVGhlc2UgdHdvIG11c3QgY29tZSBmaXJzdCAqLworCSAqIFRoZXNlIHR3byBtdXN0IGNvbWUgZmlyc3QuICovCiAJVUhDSV9SSF9SRVNFVCwKIAlVSENJX1JIX1NVU1BFTkRFRCwKIApAQCAtMzM4LDEzICszMzksMTMgQEAKIAlVSENJX1JIX1NVU1BFTkRJTkcsCiAKIAkvKiBJbiB0aGUgZm9sbG93aW5nIHN0YXRlcyBpdCdzIGFuIGVycm9yIGlmIHRoZSBIQyBpcyBoYWx0ZWQuCi0JICogVGhlc2UgdHdvIG11c3QgY29tZSBsYXN0ICovCisJICogVGhlc2UgdHdvIG11c3QgY29tZSBsYXN0LiAqLwogCVVIQ0lfUkhfUlVOTklORywJCS8qIFRoZSBub3JtYWwgc3RhdGUgKi8KIAlVSENJX1JIX1JVTk5JTkdfTk9ERVZTLAkJLyogUnVubmluZyB3aXRoIG5vIGRldmljZXMgYXR0YWNoZWQgKi8KIH07CiAKIC8qCi0gKiBUaGlzIGRlc2NyaWJlcyB0aGUgZnVsbCB1aGNpIGluZm9ybWF0aW9uLgorICogVGhlIGZ1bGwgVUhDSSBjb250cm9sbGVyIGluZm9ybWF0aW9uOgogICovCiBzdHJ1Y3QgdWhjaV9oY2QgewogCkBAIC0zNjEsNyArMzYyLDExIEBACiAJc3RydWN0IHVoY2lfcWggKnNrZWxxaFtVSENJX05VTV9TS0VMUUhdOwkvKiBTa2VsZXRvbiBRSCdzICovCiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHVoY2lfZnJhbWVfbGlzdCAqZmw7CQkvKiBQOiB1aGNpLT5sb2NrICovCisKKwlkbWFfYWRkcl90IGZyYW1lX2RtYV9oYW5kbGU7CQkvKiBIYXJkd2FyZSBmcmFtZSBsaXN0ICovCisJX19sZTMyICpmcmFtZTsKKwl2b2lkICoqZnJhbWVfY3B1OwkJCS8qIENQVSdzIGZyYW1lIGxpc3QgKi8KKwogCWludCBmc2JyOwkJCQkvKiBGdWxsLXNwZWVkIGJhbmR3aWR0aCByZWNsYW1hdGlvbiAqLwogCXVuc2lnbmVkIGxvbmcgZnNicnRpbWVvdXQ7CQkvKiBGU0JSIGRlbGF5ICovCiAKQEAgLTM4NSwyMiArMzkwLDIyIEBACiAJdW5zaWduZWQgbG9uZyBwb3J0c190aW1lb3V0OwkJLyogVGltZSB0byBzdG9wIHNpZ25hbGxpbmcgKi8KIAogCS8qIE1haW4gbGlzdCBvZiBVUkIncyBjdXJyZW50bHkgY29udHJvbGxlZCBieSB0aGlzIEhDICovCi0Jc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsJCS8qIFA6IHVoY2ktPmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9saXN0OwogCiAJLyogTGlzdCBvZiBRSCdzIHRoYXQgYXJlIGRvbmUsIGJ1dCB3YWl0aW5nIHRvIGJlIHVubGlua2VkIChyYWNlKSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgcWhfcmVtb3ZlX2xpc3Q7CS8qIFA6IHVoY2ktPmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHFoX3JlbW92ZV9saXN0OwogCXVuc2lnbmVkIGludCBxaF9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLwogCiAJLyogTGlzdCBvZiBURCdzIHRoYXQgYXJlIGRvbmUsIGJ1dCB3YWl0aW5nIHRvIGJlIGZyZWVkIChyYWNlKSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdGRfcmVtb3ZlX2xpc3Q7CS8qIFA6IHVoY2ktPmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRkX3JlbW92ZV9saXN0OwogCXVuc2lnbmVkIGludCB0ZF9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLwogCiAJLyogTGlzdCBvZiBhc3luY2hyb25vdXNseSB1bmxpbmtlZCBVUkIncyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdXJiX3JlbW92ZV9saXN0OwkvKiBQOiB1aGNpLT5sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCB1cmJfcmVtb3ZlX2xpc3Q7CiAJdW5zaWduZWQgaW50IHVyYl9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLwogCiAJLyogTGlzdCBvZiBVUkIncyBhd2FpdGluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCi0Jc3RydWN0IGxpc3RfaGVhZCBjb21wbGV0ZV9saXN0OwkJLyogUDogdWhjaS0+bG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29tcGxldGVfbGlzdDsKIAogCWludCByaF9udW1wb3J0czsJCQkvKiBOdW1iZXIgb2Ygcm9vdC1odWIgcG9ydHMgKi8KIApAQCAtNDE5LDEzICs0MjQsMTcgQEAKIAogI2RlZmluZSB1aGNpX2Rldih1KQkodWhjaV90b19oY2QodSktPnNlbGYuY29udHJvbGxlcikKIAorCisvKgorICoJUHJpdmF0ZSBwZXItVVJCIGRhdGEKKyAqLwogc3RydWN0IHVyYl9wcml2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9saXN0OwogCiAJc3RydWN0IHVyYiAqdXJiOwogCiAJc3RydWN0IHVoY2lfcWggKnFoOwkJLyogUUggZm9yIHRoaXMgVVJCICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0ZF9saXN0OwkvKiBQOiB1cmItPmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRkX2xpc3Q7CiAKIAl1bnNpZ25lZCBmc2JyIDogMTsJCS8qIFVSQiB0dXJuZWQgb24gRlNCUiAqLwogCXVuc2lnbmVkIGZzYnJfdGltZW91dCA6IDE7CS8qIFVSQiB0aW1lZCBvdXQgb24gRlNCUiAqLwpAQCAtNDM0LDEyICs0NDMsMTIgQEAKIAkJCQkJCS8qICBhIGNvbnRyb2wgdHJhbnNmZXIsIHJldHJpZ2dlciAqLwogCQkJCQkJLyogIHRoZSBzdGF0dXMgcGhhc2UgKi8KIAotCXVuc2lnbmVkIGxvbmcgaW5zZXJ0dGltZTsJLyogSW4gamlmZmllcyAqLwogCXVuc2lnbmVkIGxvbmcgZnNicnRpbWU7CQkvKiBJbiBqaWZmaWVzICovCiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CS8qIFA6IHVoY2ktPmZyYW1lX2xpc3RfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVfbGlzdDsKIH07CiAKKwogLyoKICAqIExvY2tpbmcgaW4gdWhjaS5jCiAgKgpAQCAtNDU5LDYgKzQ2OCw1IEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HRU5FU1lTCQkweDE3YTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9HTDg4MFNfVUhDSQkweDgwODMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9HTDg4MFNfRUhDSQkweDgwODQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCA0ZTBmYmUyLi43ZTQ2ODg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTg5LDEwICs4OSwxMCBAQAogCXRkLT5mcmFtZSA9IGZyYW1lbnVtOwogCiAJLyogSXMgdGhlcmUgYSBURCBhbHJlYWR5IG1hcHBlZCB0aGVyZT8gKi8KLQlpZiAodWhjaS0+ZmwtPmZyYW1lX2NwdVtmcmFtZW51bV0pIHsKKwlpZiAodWhjaS0+ZnJhbWVfY3B1W2ZyYW1lbnVtXSkgewogCQlzdHJ1Y3QgdWhjaV90ZCAqZnRkLCAqbHRkOwogCi0JCWZ0ZCA9IHVoY2ktPmZsLT5mcmFtZV9jcHVbZnJhbWVudW1dOworCQlmdGQgPSB1aGNpLT5mcmFtZV9jcHVbZnJhbWVudW1dOwogCQlsdGQgPSBsaXN0X2VudHJ5KGZ0ZC0+ZmxfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgZmxfbGlzdCk7CiAKIAkJbGlzdF9hZGRfdGFpbCgmdGQtPmZsX2xpc3QsICZmdGQtPmZsX2xpc3QpOwpAQCAtMTAxLDI5ICsxMDEsMzIgQEAKIAkJd21iKCk7CiAJCWx0ZC0+bGluayA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKIAl9IGVsc2UgewotCQl0ZC0+bGluayA9IHVoY2ktPmZsLT5mcmFtZVtmcmFtZW51bV07CisJCXRkLT5saW5rID0gdWhjaS0+ZnJhbWVbZnJhbWVudW1dOwogCQl3bWIoKTsKLQkJdWhjaS0+ZmwtPmZyYW1lW2ZyYW1lbnVtXSA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKLQkJdWhjaS0+ZmwtPmZyYW1lX2NwdVtmcmFtZW51bV0gPSB0ZDsKKwkJdWhjaS0+ZnJhbWVbZnJhbWVudW1dID0gY3B1X3RvX2xlMzIodGQtPmRtYV9oYW5kbGUpOworCQl1aGNpLT5mcmFtZV9jcHVbZnJhbWVudW1dID0gdGQ7CiAJfQogfQogCi1zdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV90ZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3RkICp0ZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX3JlbW92ZV90ZF9mcmFtZV9saXN0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwKKwkJc3RydWN0IHVoY2lfdGQgKnRkKQogewogCS8qIElmIGl0J3Mgbm90IGluc2VydGVkLCBkb24ndCByZW1vdmUgaXQgKi8KLQlpZiAodGQtPmZyYW1lID09IC0xICYmIGxpc3RfZW1wdHkoJnRkLT5mbF9saXN0KSkKKwlpZiAodGQtPmZyYW1lID09IC0xKSB7CisJCVdBUk5fT04oIWxpc3RfZW1wdHkoJnRkLT5mbF9saXN0KSk7CiAJCXJldHVybjsKKwl9CiAKLQlpZiAodGQtPmZyYW1lICE9IC0xICYmIHVoY2ktPmZsLT5mcmFtZV9jcHVbdGQtPmZyYW1lXSA9PSB0ZCkgeworCWlmICh1aGNpLT5mcmFtZV9jcHVbdGQtPmZyYW1lXSA9PSB0ZCkgewogCQlpZiAobGlzdF9lbXB0eSgmdGQtPmZsX2xpc3QpKSB7Ci0JCQl1aGNpLT5mbC0+ZnJhbWVbdGQtPmZyYW1lXSA9IHRkLT5saW5rOwotCQkJdWhjaS0+ZmwtPmZyYW1lX2NwdVt0ZC0+ZnJhbWVdID0gTlVMTDsKKwkJCXVoY2ktPmZyYW1lW3RkLT5mcmFtZV0gPSB0ZC0+bGluazsKKwkJCXVoY2ktPmZyYW1lX2NwdVt0ZC0+ZnJhbWVdID0gTlVMTDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB1aGNpX3RkICpudGQ7CiAKIAkJCW50ZCA9IGxpc3RfZW50cnkodGQtPmZsX2xpc3QubmV4dCwgc3RydWN0IHVoY2lfdGQsIGZsX2xpc3QpOwotCQkJdWhjaS0+ZmwtPmZyYW1lW3RkLT5mcmFtZV0gPSBjcHVfdG9fbGUzMihudGQtPmRtYV9oYW5kbGUpOwotCQkJdWhjaS0+ZmwtPmZyYW1lX2NwdVt0ZC0+ZnJhbWVdID0gbnRkOworCQkJdWhjaS0+ZnJhbWVbdGQtPmZyYW1lXSA9IGNwdV90b19sZTMyKG50ZC0+ZG1hX2hhbmRsZSk7CisJCQl1aGNpLT5mcmFtZV9jcHVbdGQtPmZyYW1lXSA9IG50ZDsKIAkJfQogCX0gZWxzZSB7CiAJCXN0cnVjdCB1aGNpX3RkICpwdGQ7CkBAIC0xMzIsMTMgKzEzNSwyMCBAQAogCQlwdGQtPmxpbmsgPSB0ZC0+bGluazsKIAl9CiAKLQl3bWIoKTsKLQl0ZC0+bGluayA9IFVIQ0lfUFRSX1RFUk07Ci0KIAlsaXN0X2RlbF9pbml0KCZ0ZC0+ZmxfbGlzdCk7CiAJdGQtPmZyYW1lID0gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIHVubGlua19pc29jaHJvbm91c190ZHMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkKKwkJdWhjaV9yZW1vdmVfdGRfZnJhbWVfbGlzdCh1aGNpLCB0ZCk7CisJd21iKCk7Cit9CisKIC8qCiAgKiBJbnNlcnRzIGEgdGQgbGlzdCBpbnRvIHFoLgogICovCkBAIC00NDMsNyArNDUzLDYgQEAKIAogCW1lbXNldCgodm9pZCAqKXVyYnAsIDAsIHNpemVvZigqdXJicCkpOwogCi0JdXJicC0+aW5zZXJ0dGltZSA9IGppZmZpZXM7CiAJdXJicC0+ZnNicnRpbWUgPSBqaWZmaWVzOwogCXVyYnAtPnVyYiA9IHVyYjsKIAkKQEAgLTQ2Miw4ICs0NzEsNiBAQAogewogCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKIAotCXRkLT51cmIgPSB1cmI7Ci0KIAlsaXN0X2FkZF90YWlsKCZ0ZC0+bGlzdCwgJnVyYnAtPnRkX2xpc3QpOwogfQogCkBAIC00NzMsOCArNDgwLDYgQEAKIAkJcmV0dXJuOwogCiAJbGlzdF9kZWxfaW5pdCgmdGQtPmxpc3QpOwotCi0JdGQtPnVyYiA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHVoY2lfZGVzdHJveV91cmJfcHJpdihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKQEAgLTUwMyw3ICs1MDgsNiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRkLCB0bXAsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CiAJCXVoY2lfcmVtb3ZlX3RkX2Zyb21fdXJiKHRkKTsKLQkJdWhjaV9yZW1vdmVfdGQodWhjaSwgdGQpOwogCQlsaXN0X2FkZCgmdGQtPnJlbW92ZV9saXN0LCAmdWhjaS0+dGRfcmVtb3ZlX2xpc3QpOwogCX0KIApAQCAtMTA3Myw2ICsxMDc3LDcgQEAKIAlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CiAJaW50IGksIHJldCwgZnJhbWU7CiAJaW50IHN0YXR1cywgZGVzdGluYXRpb247CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKSB1cmItPmhjcHJpdjsKIAogCXN0YXR1cyA9IFREX0NUUkxfQUNUSVZFIHwgVERfQ1RSTF9JT1M7CiAJZGVzdGluYXRpb24gPSAodXJiLT5waXBlICYgUElQRV9ERVZFUF9NQVNLKSB8IHVzYl9wYWNrZXRpZCh1cmItPnBpcGUpOwpAQCAtMTA4MSwxMSArMTA4Niw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKLQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrLCBmcmFtZSArPSB1cmItPmludGVydmFsKSB7Ci0JCWlmICghdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGgpCi0JCQljb250aW51ZTsKLQorCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKIAkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwogCQlpZiAoIXRkKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDk2LDggKzEwOTcsMTIgQEAKIAogCQlpZiAoaSArIDEgPj0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykKIAkJCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCX0KIAorCWZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgewogCQl1aGNpX2luc2VydF90ZF9mcmFtZV9saXN0KHVoY2ksIHRkLCBmcmFtZSk7CisJCWZyYW1lICs9IHVyYi0+aW50ZXJ2YWw7CiAJfQogCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsKQEAgLTExMTAsNyArMTExNSw3IEBACiAJaW50IHN0YXR1czsKIAlpbnQgaSwgcmV0ID0gMDsKIAotCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gdXJiLT5lcnJvcl9jb3VudCA9IDA7CiAKIAlpID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgewpAQCAtMTEzNCw2ICsxMTM5LDcgQEAKIAogCQlpKys7CiAJfQorCXVubGlua19pc29jaHJvbm91c190ZHModWhjaSwgdXJiKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMzY2LDYgKzEzNzIsOCBAQAogCQlnb3RvIGRvbmU7CiAJbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOwogCisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpCisJCXVubGlua19pc29jaHJvbm91c190ZHModWhjaSwgdXJiKTsKIAl1aGNpX3VubGlua19nZW5lcmljKHVoY2ksIHVyYik7CiAKIAl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKaW5kZXggYTMzMGE0Yi4uMWQ5NzNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTQyNSw5ICs0MjUsOCBAQAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyOwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7CiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgbWRjODAwX2NsYXNzID0gewotCS5uYW1lID0JCSJ1c2IvbWRjODAwJWQiLAorCS5uYW1lID0JCSJtZGM4MDAlZCIsCiAJLmZvcHMgPQkJJm1kYzgwMF9kZXZpY2Vfb3BzLAotCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQLAogCS5taW5vcl9iYXNlID0JTURDODAwX0RFVklDRV9NSU5PUl9CQVNFLAogfTsKIApAQCAtOTc2LDEzICs5NzUsMTMgQEAKIAlJbml0IGFuZCBDbGVhbnVwIHRoaXMgZHJpdmVyIChNYWluIEZ1bmN0aW9ucykKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgdHJ5KEEpICAgICAgICAgICBpZiAoIShBKSkgZ290byBjbGVhbnVwX29uX2ZhaWw7Ci0KIHN0YXRpYyBpbnQgX19pbml0IHVzYl9tZGM4MDBfaW5pdCAodm9pZCkKIHsKIAlpbnQgcmV0dmFsID0gLUVOT0RFVjsKIAkvKiBBbGxvY2F0ZSBNZW1vcnkgKi8KLQl0cnkgKG1kYzgwMD1rbWFsbG9jIChzaXplb2YgKHN0cnVjdCBtZGM4MDBfZGF0YSksIEdGUF9LRVJORUwpKTsKKwltZGM4MDA9a21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbWRjODAwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1kYzgwMCkKKwkJZ290byBjbGVhbnVwX29uX2ZhaWw7CiAKIAltZW1zZXQobWRjODAwLCAwLCBzaXplb2Yoc3RydWN0IG1kYzgwMF9kYXRhKSk7CiAJbWRjODAwLT5kZXYgPSBOVUxMOwpAQCAtOTk4LDEzICs5OTcsMjUgQEAKIAltZGM4MDAtPmRvd25sb2FkZWQgPSAwOwogCW1kYzgwMC0+d3JpdHRlbiA9IDA7CiAKLQl0cnkgKG1kYzgwMC0+aXJxX3VyYl9idWZmZXI9a21hbGxvYyAoOCwgR0ZQX0tFUk5FTCkpOwotCXRyeSAobWRjODAwLT53cml0ZV91cmJfYnVmZmVyPWttYWxsb2MgKDgsIEdGUF9LRVJORUwpKTsKLQl0cnkgKG1kYzgwMC0+ZG93bmxvYWRfdXJiX2J1ZmZlcj1rbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCkpOworCW1kYzgwMC0+aXJxX3VyYl9idWZmZXI9a21hbGxvYyAoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZGM4MDAtPmlycV91cmJfYnVmZmVyKQorCQlnb3RvIGNsZWFudXBfb25fZmFpbDsKKwltZGM4MDAtPndyaXRlX3VyYl9idWZmZXI9a21hbGxvYyAoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZGM4MDAtPndyaXRlX3VyYl9idWZmZXIpCisJCWdvdG8gY2xlYW51cF9vbl9mYWlsOworCW1kYzgwMC0+ZG93bmxvYWRfdXJiX2J1ZmZlcj1rbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZGM4MDAtPmRvd25sb2FkX3VyYl9idWZmZXIpCisJCWdvdG8gY2xlYW51cF9vbl9mYWlsOwogCi0JdHJ5IChtZGM4MDAtPmlycV91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOwotCXRyeSAobWRjODAwLT5kb3dubG9hZF91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOwotCXRyeSAobWRjODAwLT53cml0ZV91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOworCW1kYzgwMC0+aXJxX3VyYj11c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1kYzgwMC0+aXJxX3VyYikKKwkJZ290byBjbGVhbnVwX29uX2ZhaWw7CisJbWRjODAwLT5kb3dubG9hZF91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZGM4MDAtPmRvd25sb2FkX3VyYikKKwkJZ290byBjbGVhbnVwX29uX2ZhaWw7CisJbWRjODAwLT53cml0ZV91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZGM4MDAtPndyaXRlX3VyYikKKwkJZ290byBjbGVhbnVwX29uX2ZhaWw7CiAKIAkvKiBSZWdpc3RlciB0aGUgZHJpdmVyICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZtZGM4MDBfdXNiX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwppbmRleCBjODRlMTQ4Li5jODlkMDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKQEAgLTc3MywxMSArNzczLDEwIEBACiAJfQogCQogCQotCW5ld19kZXNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10c19kZXNjKSwgR0ZQX0tFUk5FTCk7CisJbmV3X2Rlc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRzX2Rlc2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19kZXNjKQogCQlnb3RvIG91dDsKIAotCW1lbXNldChuZXdfZGVzYywgMCwgc2l6ZW9mKCpuZXdfZGVzYykpOwogCW5ld19kZXNjLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghbmV3X2Rlc2MtPnVyYikKIAkJZ290byBvdXRfa2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jCmluZGV4IDFjNTIwNTMuLjFjM2I0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jCkBAIC0yMTU0LDcgKzIxNTQsNyBAQAogCSAqIGlucHV0X2hhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5wdXQgZGV2aWNlLgogCSAqIFdoYXQgaWRlbnRpZmllcyBhbiBldmRldiBpbnB1dF9oYW5kbGVyIGlzIHRoYXQgaXQgYmVnaW5zCiAJICogd2l0aCAnZXZlbnQnLCBjb250aW51ZXMgd2l0aCBhIGRpZ2l0LCBhbmQgdGhhdCBpbiB0dXJuCi0JICogaXMgbWFwcGVkIHRvIC97ZGV2ZnN9L2lucHV0L2V2ZW50Ti4KKwkgKiBpcyBtYXBwZWQgdG8gaW5wdXQvZXZlbnROLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmaW5wdXRkZXYtPmhfbGlzdCkgewogCQlpbnB1dGhhbmRsZSA9IHRvX2hhbmRsZShub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCmluZGV4IDQxMWEwNjQuLjc5ZGRjZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwpAQCAtMTc4NCw2ICsxNzg0LDkgQEAKIAloaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2RtYSA9IGhpZC0+Y3RybGJ1Zl9kbWE7CiAJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9mbGFncyB8PSAoVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7CiAKKwkvKiBNYXkgYmUgbmVlZGVkIGZvciBzb21lIGRldmljZXMgKi8KKwl1c2JfY2xlYXJfaGFsdChoaWQtPmRldiwgaGlkLT51cmJpbi0+cGlwZSk7CisKIAlyZXR1cm4gaGlkOwogCiBmYWlsOgpAQCAtMTg4Nyw3ICsxODkwLDYgQEAKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CiAKIAl1c2Jfa2lsbF91cmIoaGlkLT51cmJpbik7Ci0JaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOwogCWRldl9kYmcoJmludGYtPmRldiwgInN1c3BlbmRcbiIpOwogCXJldHVybiAwOwogfQpAQCAtMTg5Nyw3ICsxODk5LDYgQEAKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CiAJaW50IHN0YXR1czsKIAotCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJaWYgKGhpZC0+b3BlbikKIAkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoaGlkLT51cmJpbiwgR0ZQX05PSU8pOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKaW5kZXggZDMyNDI3OC4uNDQwMzc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKQEAgLTczMiw5ICs3MzIsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGhpZGRldl9jbGFzcyA9IHsKLQkubmFtZSA9CQkidXNiL2hpZC9oaWRkZXYlZCIsCisJLm5hbWUgPQkJImhpZGRldiVkIiwKIAkuZm9wcyA9CQkmaGlkZGV2X2ZvcHMsCi0JLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVR08gfCBTX0lXVVNSLAogCS5taW5vcl9iYXNlID0JSElEREVWX01JTk9SX0JBU0UsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9tYXBfdG9fN3NlZ21lbnQuaCBiL2RyaXZlcnMvdXNiL2lucHV0L21hcF90b183c2VnbWVudC5oCmluZGV4IDUyZmYyN2YuLmE0MjQwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L21hcF90b183c2VnbWVudC5oCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L21hcF90b183c2VnbWVudC5oCkBAIC03OSw3ICs3OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IG1hcF90b19zZWc3KHN0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwICptYXAsIGludCBjKQogewotCXJldHVybiBjICYgMHg3ZiA/IG1hcC0+dGFibGVbY10gOiAtRUlOVkFMOworCXJldHVybiBjID49IDAgJiYgYyA8IHNpemVvZihtYXAtPnRhYmxlKSA/IG1hcC0+dGFibGVbY10gOiAtRUlOVkFMOwogfQogCiAjZGVmaW5lIFNFRzdfQ09OVkVSU0lPTl9NQVAoX25hbWUsIF9tYXApCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3RvdWNoa2l0dXNiLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jCmluZGV4IDM3NjZjY2MuLjAwNDNlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3RvdWNoa2l0dXNiLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYwpAQCAtNzUsNyArNzUsOSBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdG91Y2hraXRfZGV2aWNlc1tdID0gewogCXtVU0JfREVWSUNFKDB4MzgyMywgMHgwMDAxKX0sCisJe1VTQl9ERVZJQ0UoMHgwMTIzLCAweDAwMDEpfSwKIAl7VVNCX0RFVklDRSgweDBlZWYsIDB4MDAwMSl9LAorCXtVU0JfREVWSUNFKDB4MGVlZiwgMHgwMDAyKX0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5jIGIvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmMKaW5kZXggNmNhMmZhZS4uMjdiMjNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmMKQEAgLTcwNyw5ICs3MDcsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGRhYnVzYl9jbGFzcyA9IHsKLQkubmFtZSA9CQkidXNiL2RhYnVzYiVkIiwKKwkubmFtZSA9CQkiZGFidXNiJWQiLAogCS5mb3BzID0JCSZkYWJ1c2JfZm9wcywKLQkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCwKIAkubWlub3JfYmFzZSA9CURBQlVTQl9NSU5PUiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMgYi9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCmluZGV4IGFlNDY4MWYuLjVmMzNmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpAQCAtMTg3Myw5ICsxODczLDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBhdWVyc3dhbGRfY2xhc3MgPSB7Ci0JLm5hbWUgPQkJInVzYi9hdWVyJWQiLAorCS5uYW1lID0JCSJhdWVyJWQiLAogCS5mb3BzID0JCSZhdWVyc3dhbGRfZm9wcywKLQkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sCiAJLm1pbm9yX2Jhc2UgPQlBVUVSX01JTk9SX0JBU0UsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCmluZGV4IDczM2FjYzIuLjM5NDRhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCkBAIC0xMDUsMTEgKzEwNSwxMCBAQAogCS5yZWxlYXNlID0gaWRtb3VzZV9yZWxlYXNlLAogfTsKIAotLyogY2xhc3MgZHJpdmVyIGluZm9ybWF0aW9uIGZvciBkZXZmcyAqLworLyogY2xhc3MgZHJpdmVyIGluZm9ybWF0aW9uICovCiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgaWRtb3VzZV9jbGFzcyA9IHsKLQkubmFtZSA9ICJ1c2IvaWRtb3VzZSVkIiwKKwkubmFtZSA9ICJpZG1vdXNlJWQiLAogCS5mb3BzID0gJmlkbW91c2VfZm9wcywKLQkubW9kZSA9IFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsIC8qIGZpbGVtb2RlIChjaGFyLCA0NDQpICovCiAJLm1pbm9yX2Jhc2UgPSBVU0JfSURNT1VTRV9NSU5PUl9CQVNFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggN2QwNjEwNS4uMjcwM2UyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC0yNzEsMTIgKzI3MSwxMSBAQAogCiAvKgogICogdXNiIGNsYXNzIGRyaXZlciBpbmZvIGluIG9yZGVyIHRvIGdldCBhIG1pbm9yIG51bWJlciBmcm9tIHRoZSB1c2IgY29yZSwKLSAqIGFuZCB0byBoYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIGRldmZzIGFuZCB0aGUgZHJpdmVyIGNvcmUKKyAqIGFuZCB0byBoYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkcml2ZXIgY29yZQogICovCiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdG93ZXJfY2xhc3MgPSB7Ci0JLm5hbWUgPQkJInVzYi9sZWdvdXNidG93ZXIlZCIsCisJLm5hbWUgPQkJImxlZ291c2J0b3dlciVkIiwKIAkuZm9wcyA9CQkmdG93ZXJfZm9wcywKLQkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEgsCiAJLm1pbm9yX2Jhc2UgPQlMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKaW5kZXggMjZmNzdlMi4uN2QwMmQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCkBAIC00NDMsOSArNDQzLDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JfcmlvX2NsYXNzID0gewotCS5uYW1lID0JCSJ1c2IvcmlvNTAwJWQiLAorCS5uYW1lID0JCSJyaW81MDAlZCIsCiAJLmZvcHMgPQkJJnVzYl9yaW9fZm9wcywKLQkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCwKIAkubWlub3JfYmFzZSA9CVJJT19NSU5PUiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKaW5kZXggMzlkYjMxNS4uYzk0NmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKQEAgLTI0NDAsNyArMjQ0MCw3IEBACiBzaXN1c2JfcmVzZXRfdGV4dF9tb2RlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGluaXQpCiB7CiAJaW50IHJldCA9IDAsIHNsb3QgPSBzaXN1c2ItPmZvbnRfc2xvdCwgaTsKLQlzdHJ1Y3QgZm9udF9kZXNjICpteWZvbnQ7CisJY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqbXlmb250OwogCXU4ICp0ZW1wYnVmOwogCXUxNiAqdGVtcGJ1ZmI7CiAJc2l6ZV90IHdyaXR0ZW47CkBAIC0zMjM5LDEyICszMjM5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2Jfc2lzdXNiX2NsYXNzID0gewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTMpCi0JLm5hbWUgPQkJInVzYi9zaXN1c2J2Z2ElZCIsCi0JLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCi0jZWxzZQogCS5uYW1lID0JCSJzaXN1c2J2Z2ElZCIsCi0jZW5kaWYKIAkuZm9wcyA9CQkmdXNiX3Npc3VzYl9mb3BzLAogCS5taW5vcl9iYXNlID0JU0lTVVNCX01JTk9SCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKaW5kZXggMDk2YWIzMC4uODVmMzcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCkBAIC0yNTEsMTMgKzI1MSwxMiBAQAogfTsKIAogLyoKLSAqICAqIHVzYiBjbGFzcyBkcml2ZXIgaW5mbyBpbiBvcmRlciB0byBnZXQgYSBtaW5vciBudW1iZXIgZnJvbSB0aGUgdXNiIGNvcmUsCi0gKiAgICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggZGV2ZnMgYW5kIHRoZSBkcml2ZXIgY29yZQotICogICAgKi8KKyAqIHVzYiBjbGFzcyBkcml2ZXIgaW5mbyBpbiBvcmRlciB0byBnZXQgYSBtaW5vciBudW1iZXIgZnJvbSB0aGUgdXNiIGNvcmUsCisgKiBhbmQgdG8gaGF2ZSB0aGUgZGV2aWNlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZHJpdmVyIGNvcmUKKyAqLwogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGxjZF9jbGFzcyA9IHsKLSAgICAgICAgLm5hbWUgPSAgICAgICAgICJ1c2IvbGNkJWQiLAorICAgICAgICAubmFtZSA9ICAgICAgICAgImxjZCVkIiwKICAgICAgICAgLmZvcHMgPSAgICAgICAgICZsY2RfZm9wcywKLSAgICAgICAgLm1vZGUgPSAgICAgICAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCwKICAgICAgICAgLm1pbm9yX2Jhc2UgPSAgIFVTQkxDRF9NSU5PUiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKaW5kZXggNTQ3OTllYi4uOTBhOTYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKQEAgLTk4Myw2ICs5ODMsNyBAQAogCQlyZXFwLT5udW1iZXIgPSBpICUgTlVNX1NVQkNBU0VTOwogCQlyZXFwLT5leHBlY3RlZCA9IGV4cGVjdGVkOwogCQl1LT5zZXR1cF9wYWNrZXQgPSAoY2hhciAqKSAmcmVxcC0+c2V0dXA7CisJCXUtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19TRVRVUF9ETUFfTUFQOwogCiAJCXUtPmNvbnRleHQgPSAmY29udGV4dDsKIAkJdS0+Y29tcGxldGUgPSBjdHJsX2NvbXBsZXRlOwpAQCAtMTk0OCwyMSArMTk0OSwxMSBAQAogCiBzdGF0aWMgaW50IHVzYnRlc3Rfc3VzcGVuZCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotCXN0cnVjdCB1c2J0ZXN0X2RldgkqZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7Ci0KLQlkb3duICgmZGV2LT5zZW0pOwotCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfU1VTUEVORDsKLQl1cCAoJmRldi0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB1c2J0ZXN0X3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IHVzYnRlc3RfZGV2CSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQotCWRvd24gKCZkZXYtPnNlbSk7Ci0JaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKLQl1cCAoJmRldi0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwppbmRleCA1MDhhMjEwLi5jMzQ5NDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKICNpbmNsdWRlICJ1c2JfbW9uLmgiCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKQEAgLTIwNSw2ICsyMDYsMjMgQEAKIAl1cCgmbW9uX2xvY2spOwogfQogCitzdGF0aWMgaW50IG1vbl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJICAgICAgdm9pZCAqZGV2KQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBVU0JfQlVTX0FERDoKKwkJbW9uX2J1c19hZGQoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfQlVTX1JFTU9WRToKKwkJbW9uX2J1c19yZW1vdmUoZGV2KTsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtb25fbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSAJbW9uX25vdGlmeSwKK307CisKIC8qCiAgKiBPcHMKICAqLwpAQCAtMjEyLDggKzIzMCw2IEBACiAJLnVyYl9zdWJtaXQgPQltb25fc3VibWl0LAogCS51cmJfc3VibWl0X2Vycm9yID0gbW9uX3N1Ym1pdF9lcnJvciwKIAkudXJiX2NvbXBsZXRlID0JbW9uX2NvbXBsZXRlLAotCS5idXNfYWRkID0JbW9uX2J1c19hZGQsCi0JLmJ1c19yZW1vdmUgPQltb25fYnVzX3JlbW92ZSwKIH07CiAKIC8qCkBAIC0zMjksNiArMzQ1LDggQEAKIAl9CiAJLy8gTU9EX0lOQ19VU0VfQ09VTlQod2hpY2hfbW9kdWxlPyk7CiAKKwl1c2JfcmVnaXN0ZXJfbm90aWZ5KCZtb25fbmIpOworCiAJZG93bigmdXNiX2J1c19saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkgKHVidXMsICZ1c2JfYnVzX2xpc3QsIGJ1c19saXN0KSB7CiAJCW1vbl9idXNfaW5pdChtb25kaXIsIHVidXMpOwpAQCAtMzQyLDYgKzM2MCw3IEBACiAJc3RydWN0IG1vbl9idXMgKm1idXM7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAorCXVzYl91bnJlZ2lzdGVyX25vdGlmeSgmbW9uX25iKTsKIAl1c2JfbW9uX2RlcmVnaXN0ZXIoKTsKIAogCWRvd24oJm1vbl9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnIGIvZHJpdmVycy91c2IvbmV0L0tjb25maWcKaW5kZXggOGMwMTBiYi4uZWZkNmNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbmV0L0tjb25maWcKQEAgLTI5NCw3ICsyOTQsNyBAQAogCSAgVGhpcyBhbHNvIHN1cHBvcnRzIHNvbWUgcmVsYXRlZCBkZXZpY2UgZmlybXdhcmUsIGFzIHVzZWQgaW4gc29tZQogCSAgUERBcyBmcm9tIE9seW1wdXMgYW5kIHNvbWUgY2VsbCBwaG9uZXMgZnJvbSBNb3Rvcm9sYS4KIAotCSAgSWYgeW91IGluc3RhbGwgYW4gYWx0ZXJuYXRlIFJPTSBpbWFnZSwgc3VjaCBhcyB0aGUgTGludXggMi42IGJhc2VkCisJICBJZiB5b3UgaW5zdGFsbCBhbiBhbHRlcm5hdGUgaW1hZ2UsIHN1Y2ggYXMgdGhlIExpbnV4IDIuNiBiYXNlZAogCSAgdmVyc2lvbnMgb2YgT3BlblphdXJ1cywgeW91IHNob3VsZCBubyBsb25nZXIgbmVlZCB0byBzdXBwb3J0IHRoaXMKIAkgIHByb3RvY29sLiAgT25seSB0aGUgImV0aC1mZCIgb3IgIm5ldF9mZCIgZHJpdmVycyBpbiB0aGVzZSBkZXZpY2VzCiAJICByZWFsbHkgbmVlZCB0aGlzIG5vbi1jb25mb3JtYW50IHZhcmlhbnQgb2YgQ0RDIEV0aGVybmV0IChvciBpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jIGIvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jCmluZGV4IGM4MjY1NWQuLjZiZWYxYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9rYXdldGguYworKysgYi9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoLmMKQEAgLTQ2OSw3ICs0NjksNyBAQAogCQkJCTAsCiAJCQkJS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7CiAKLQl1ZGVsYXkoMTAwMDApOworCW1kZWxheSgxMCk7CiAKIAlrYXdldGhfZGJnKCJrYXdldGhfcmVzZXQoKSByZXR1cm5zICVkLiIscmVzdWx0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKaW5kZXggNmE0ZmZlNi4uNTM3ZWIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCkBAIC0xMzg0LDcgKzEzODQsNiBAQAogCQl1c2Jfa2lsbF91cmIocGVnYXN1cy0+cnhfdXJiKTsKIAkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmludHJfdXJiKTsKIAl9Ci0JaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOwogCXJldHVybiAwOwogfQogCkBAIC0xMzkyLDcgKzEzOTEsNiBAQAogewogCXN0cnVjdCBwZWdhc3VzICpwZWdhc3VzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAotCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJbmV0aWZfZGV2aWNlX2F0dGFjaCAocGVnYXN1cy0+bmV0KTsKIAlpZiAobmV0aWZfcnVubmluZyhwZWdhc3VzLT5uZXQpKSB7CiAJCXBlZ2FzdXMtPnJ4X3VyYi0+c3RhdHVzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmggYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oCmluZGV4IGI5OGYyYTguLjlmYmQ1OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmgKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuaApAQCAtMTgxLDYgKzE4MSw4IEBACiAJCURFRkFVTFRfR1BJT19SRVNFVCApCiBQRUdBU1VTX0RFViggIlNwZWVkU3RyZWFtIFVTQiAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfQUNDVE9OLCAweDUwNDYsCiAJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJQaGlsaXBzIFVTQiAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfQUNDVE9OLCAweGIwMDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQogUEVHQVNVU19ERVYoICJBRE10ZWsgQURNODUxMSBcIlBlZ2FzdXMgSUlcIiBVU0IgRXRoZXJuZXQiLAogCQlWRU5ET1JfQURNVEVLLCAweDg1MTEsCiAJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgfCBIQVNfSE9NRV9QTkEgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYyBiL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKaW5kZXggYzNkNGUzNS4uNzg3ZGQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCkBAIC05MDksNiArOTA5LDcgQEAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCWlmIChkZXYpIHsKIAkJc2V0X2JpdChSVEw4MTUwX1VOUExVRywgJmRldi0+ZmxhZ3MpOworCQl0YXNrbGV0X2Rpc2FibGUoJmRldi0+dGwpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYtPm5ldGRldik7CiAJCXVubGlua19hbGxfdXJicyhkZXYpOwogCQlmcmVlX2FsbF91cmJzKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKaW5kZXggZmNlODFkNy4uNzRmMDVjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwpAQCAtMTE4NSw3ICsxMTg1LDYgQEAKIAluZXRpZl9kZXZpY2VfZGV0YWNoIChkZXYtPm5ldCk7CiAJKHZvaWQpIHVubGlua191cmJzIChkZXYsICZkZXYtPnJ4cSk7CiAJKHZvaWQpIHVubGlua191cmJzIChkZXYsICZkZXYtPnR4cSk7Ci0JaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3N1c3BlbmQpOwpAQCAtMTE5NCw3ICsxMTkzLDYgQEAKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAotCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJbmV0aWZfZGV2aWNlX2F0dGFjaCAoZGV2LT5uZXQpOwogCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9DaGFuZ2VMb2cub2xkIGIvZHJpdmVycy91c2Ivc2VyaWFsL0NoYW5nZUxvZy5vbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiMjc5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9DaGFuZ2VMb2cub2xkCkBAIC0wLDAgKzEsNzMwIEBACitUaGlzIGlzIHRoZSBjb250ZW50cyBvZiBzb21lIG9mIHRoZSBkcml2ZXJzL3VzYi9zZXJpYWwvIGZpbGVzIHRoYXQgaGFkICBvbGQKK2NoYW5nZWxvZyBjb21tZW50cy4gIFRoZXkgd2VyZSBxdWl0ZSBvbGQsIGFuZCBvdXQgb2YgZGF0ZSwgYW5kIHdlIGRvbid0IGtlZXAKK3RoZW0gYW55bW9yZSwgc28gSSd2ZSBwdXQgdGhlbSBoZXJlLCBhd2F5IGZyb20gdGhlIHNvdXJjZSBmaWxlcywgaW4gY2FzZQorcGVvcGxlIHN0aWxsIGNhcmUgdG8gc2VlIHRoZW0uCisKKy0gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gT2N0b2JlciAyMCwgMjAwNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordXNiLXNlcmlhbC5oIENoYW5nZSBMb2cgY29tbWVudHM6CisKKyAoMDMvMjYvMjAwMikgZ2toCisJcmVtb3ZlZCB0aGUgcG9ydC0+dHR5IGNoZWNrIGZyb20gcG9ydF9wYXJhbm9pYV9jaGVjaygpIGR1ZSB0byBzZXJpYWwKKwljb25zb2xlcyBub3QgaGF2aW5nIGEgdHR5IGRldmljZSBhc3NpZ25lZCB0byB0aGVtLgorCisgKDEyLzAzLzIwMDEpIGdraAorCXJlbW92ZWQgYWN0aXZlIGZyb20gdGhlIHBvcnQgc3RydWN0dXJlLgorCWFkZGVkIGRvY3VtZW50YXRpb24gdG8gdGhlIHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgc3RydWN0dXJlCisKKyAoMTAvMTAvMjAwMSkgZ2toCisJYWRkZWQgdmVuZG9yIGFuZCBwcm9kdWN0IHRvIHNlcmlhbCBzdHJ1Y3R1cmUuICBOZWVkZWQgdG8gZGV0ZXJtaW5lIGRldmljZQorCW93bmVyIHdoZW4gdGhlIGRldmljZSBpcyBkaXNjb25uZWN0ZWQuCisKKyAoMDUvMzAvMjAwMSkgZ2toCisJYWRkZWQgc2VtIHRvIHBvcnQgc3RydWN0dXJlIGFuZCByZW1vdmVkIHBvcnRfbG9jaworCisgKDEwLzA1LzIwMDApIGdraAorCUFkZGVkIGludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgYW5kIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzIHRvIGhlbHAKKwlmaXggYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYiBjb3JlCisJbmVlZHMgaXQuCisKKyAoMDkvMTEvMjAwMCkgZ2toCisJQWRkZWQgdXNiX3NlcmlhbF9kZWJ1Z19kYXRhIGZ1bmN0aW9uIHRvIGhlbHAgZ2V0IHJpZCBvZiAjREVCVUcgaW4gdGhlCisJZHJpdmVycy4KKworICgwOC8yOC8yMDAwKSBna2gKKwlBZGRlZCBwb3J0X2xvY2sgdG8gcG9ydCBzdHJ1Y3R1cmUuCisKKyAoMDgvMDgvMjAwMCkgZ2toCisJQWRkZWQgb3Blbl9jb3VudCB0byBwb3J0IHN0cnVjdHVyZS4KKworICgwNy8yMy8yMDAwKSBna2gKKwlBZGRlZCBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgdG8gcG9ydCBzdHJ1Y3R1cmUuCisKKyAoMDcvMTkvMjAwMCkgZ2toLCBwYmVyZ2VyLCBhbmQgYm9yY2hlcnMKKwlNb2RpZmljYXRpb25zIHRvIGFsbG93IHVzYi1zZXJpYWwgZHJpdmVycyB0byBiZSBtb2R1bGVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordXNiLXNlcmlhbC5jIENoYW5nZSBMb2cgY29tbWVudHM6CisKKyAoMTIvMTAvMjAwMikgZ2toCisJU3BsaXQgdGhlIHBvcnRzIG9mZiBpbnRvIHRoZWlyIG93biBzdHJ1Y3QgZGV2aWNlLCBhbmQgYWRkZWQgYQorCXVzYi1zZXJpYWwgYnVzIGRyaXZlci4KKworICgxMS8xOS8yMDAyKSBna2gKKwlyZW1vdmVkIGEgZmV3ICNpZmRlZnMgZm9yIHRoZSBnZW5lcmljIGNvZGUgYW5kIGNsZWFuZWQgdXAgdGhlIGZhaWx1cmUKKwlsb2dpYyBpbiBpbml0aWFsaXphdGlvbi4KKworICgxMC8wMi8yMDAyKSBna2gKKwltb3ZlZCB0aGUgY29uc29sZSBjb2RlIHRvIGNvbnNvbGUuYyBhbmQgb3V0IG9mIHRoaXMgZmlsZS4KKworICgwNi8wNS8yMDAyKSBna2gKKwltb3ZlZCBsb2NhdGlvbiBvZiBzdGFydHVwKCkgY2FsbCBpbiBzZXJpYWxfcHJvYmUoKSB1bnRpbCBhZnRlciBhbGwKKwlvZiB0aGUgcG9ydCBpbmZvcm1hdGlvbiBhbmQgZW5kcG9pbnRzIGFyZSBpbml0aWFsaXplZC4gIFRoaXMgbWFrZXMKKwl0aGluZ3MgZWFzaWVyIGZvciBzb21lIGRyaXZlcnMuCisKKyAoMDQvMTAvMjAwMikgZ2toCisJYWRkZWQgc2VyaWFsX3JlYWRfcHJvYyBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEKKwkvcHJvYy90dHkvZHJpdmVyL3VzYi1zZXJpYWwgZmlsZS4KKworICgwMy8yNy8yMDAyKSBna2gKKwlHb3QgVVNCIHNlcmlhbCBjb25zb2xlIGNvZGUgd29ya2luZyBwcm9wZXJseSBhbmQgbWVyZ2VkIGludG8gdGhlIG1haW4KKwl2ZXJzaW9uIG9mIHRoZSB0cmVlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgdGhlIGluaXRpYWwgdmVyc2lvbgorCW9mIHRoaXMgY29kZSwgYW5kIGZvciBwdXNoaW5nIG1lIHRvIGZpbmlzaCBpdCB1cC4KKwlUaGUgVVNCIHNlcmlhbCBjb25zb2xlIHdvcmtzIHdpdGggYW55IHVzYiBzZXJpYWwgZHJpdmVyIGRldmljZS4KKworICgwMy8yMS8yMDAyKSBna2gKKwlNb3ZlZCBhbGwgbWFuaXB1bGF0aW9uIG9mIHBvcnQtPm9wZW5fY291bnQgaW50byB0aGUgY29yZS4gIE5vdyB0aGUKKwlpbmRpdmlkdWFsIGRyaXZlcidzIG9wZW4gYW5kIGNsb3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUKKwlmaXJzdCBvcGVuKCkgYW5kIGxhc3QgY2xvc2UoKSBpcyBjYWxsZWQuICBNYWtpbmcgdGhlIGRyaXZlcnMgYSBiaXQKKwlzbWFsbGVyIGFuZCBzaW1wbGVyLgorCUZpeGVkIGEgYnVnIGlmIGEgZHJpdmVyIGRpZG4ndCBoYXZlIHRoZSBvd25lciBmaWVsZCBzZXQuCisKKyAoMDIvMjYvMjAwMikgZ2toCisJTW92ZWQgYWxsIGxvY2tpbmcgaW50byB0aGUgbWFpbiBzZXJpYWxfKiBmdW5jdGlvbnMsIGluc3RlYWQgb2YgaGF2aW5nCisJdGhlIGluZGl2aWR1YWwgZHJpdmVycyBoYXZlIHRvIGdyYWIgdGhlIHBvcnQgc2VtYXBob3JlLiAgVGhpcyBzaG91bGQKKwlyZWR1Y2UgcmFjZXMuCisJUmV3b3JrZWQgdGhlIE1PRF9JTkMgbG9naWMgYSBiaXQgdG8gYWx3YXlzIGluY3JlbWVudCBhbmQgZGVjcmVtZW50LCBldmVuCisJaWYgdGhlIGdlbmVyaWMgZHJpdmVyIGlzIGJlaW5nIHVzZWQuCisKKyAoMTAvMTAvMjAwMSkgZ2toCisJdXNiX3NlcmlhbF9kaXNjb25uZWN0KCkgbm93IHNldHMgdGhlIHNlcmlhbC0+ZGV2IHBvaW50ZXIgaXMgdG8gTlVMTCB0bworCWhlbHAgcHJldmVudCBjaGlsZCBkcml2ZXJzIGZyb20gYWNjZXNzaW5nIHRoZSBkZXZpY2Ugc2luY2UgaXQgaXMgbm93CisJZ29uZS4KKworICgwOS8xMy8yMDAxKSBna2gKKwlNb3ZlZCBnZW5lcmljIGRyaXZlciBpbml0aWFsaXplIGFmdGVyIHdlIGhhdmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBVU0IKKwljb3JlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgcG9pbnRpbmcgdGhpcyBwcm9ibGVtIG91dC4KKworICgwNy8wMy8yMDAxKSBna2gKKwlGaXhlZCBtb2R1bGUgcGFyYW1hdGVyIHNpemUuICBUaGFua3MgdG8gSm9obiBCcm9ja21leWVyIGZvciB0aGUgcG9pbnRlci4KKwlGaXhlZCB2ZW5kb3IgYW5kIHByb2R1Y3QgZ2V0dGluZyBkZWZpbmVkIHRocm91Z2ggdGhlIE1PRFVMRV9QQVJNIG1hY3JvCisJaWYgdGhlIEdlbmVyaWMgZHJpdmVyIHdhc24ndCBjb21waWxlZCBpbi4KKwlGaXhlZCBwcm9ibGVtIHdpdGggZ2VuZXJpY19zaHV0ZG93bigpIG5vdCBiZWluZyBjYWxsZWQgZm9yIGRyaXZlcnMgdGhhdAorCWRvbid0IGhhdmUgYSBzaHV0ZG93bigpIGZ1bmN0aW9uLgorCisgKDA2LzA2LzIwMDEpIGdraAorCWFkZGVkIGV2aWwgaGFjayB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIHByb2xpZmljIHBsMjMwMyBkZXZpY2UgZHVlIHRvIHRoZQorCWNyYXp5IHdheSBpdHMgZW5kcG9pbnRzIGFyZSBzZXQgdXAuCisKKyAoMDUvMzAvMjAwMSkgZ2toCisJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKworICgwNC8wOC8yMDAxKSBnYgorCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisKKyAyMDAxXzAyXzA1IGdraAorCUZpeGVkIGJ1ZmZlciBvdmVyZmxvd3MgYnVnIHdpdGggdGhlIGdlbmVyaWMgc2VyaWFsIGRyaXZlci4gIFRoYW5rcyB0bworCVRvZGQgU3F1aXJlcyA8c3F1aXJlc3RAY3QwLmNvbT4gZm9yIGZpeGluZyB0aGlzLgorCisgKDAxLzEwLzIwMDEpIGdraAorCUZpeGVkIGJ1ZyB3aGVyZSB0aGUgZ2VuZXJpYyBzZXJpYWwgYWRhcHRvciBncmFiYmVkIF9hbnlfIGRldmljZSB0aGF0IHdhcworCW9mZmVyZWQgdG8gaXQuCisKKyAoMTIvMTIvMjAwMCkgZ2toCisJUmVtb3ZlZCBNT0RfSU5DIGFuZCBNT0RfREVDIGZyb20gcG9sbCBhbmQgZGlzY29ubmVjdCBmdW5jdGlvbnMsIGFuZAorCW1vdmVkIHRoZW0gdG8gdGhlIHNlcmlhbF9vcGVuIGFuZCBzZXJpYWxfY2xvc2UgZnVuY3Rpb25zLgorCUFsc28gZml4ZWQgYnVnIHdpdGggdGhlcmUgbm90IGJlaW5nIGEgTU9EX0RFQyBmb3IgdGhlIGdlbmVyaWMgZHJpdmVyCisJKHRoYW5rcyB0byBHYXJ5IEJydWJha2VyIGZvciBmaW5kaW5nIHRoaXMuKQorCisgKDExLzI5LzIwMDApIGdraAorCVNtYWxsIE5VTEwgcG9pbnRlciBpbml0aWFsaXphdGlvbiBjbGVhbnVwIHdoaWNoIHNhdmVzIGEgYml0IG9mIGRpc2sgaW1hZ2UKKworICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKKwlpbnN0ZWFkIG9mIHVzaW5nIGlkVmVuZG9yL2lkUHJvZHVjdCBwYWlycywgdXNiIHNlcmlhbCBkcml2ZXJzCisJbm93IGlkZW50aWZ5IHRoZWlyIGhhcmR3YXJlIGludGVyZXN0IHdpdGggdXNiX2RldmljZV9pZCB0YWJsZXMsCisJd2hpY2ggdGhleSB1c3VhbGx5IGhhdmUgYW55aG93IGZvciB1c2Ugd2l0aCBNT0RVTEVfREVWSUNFX1RBQkxFLgorCisgKDEwLzA1LzIwMDApIGdraAorCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKwljb3JlIG5lZWRzIGl0LgorCisgKDA5LzExLzIwMDApIGdraAorCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCisKKyAoMDgvMjgvMjAwMCkgZ2toCisJQWRkZWQgcG9ydF9sb2NrIHRvIHBvcnQgc3RydWN0dXJlLgorCUFkZGVkIGxvY2tzIGZvciBTTVAgc2FmZW5lc3MgdG8gZ2VuZXJpYyBkcml2ZXIKKwlGaXhlZCB0aGUgYWJpbGl0eSB0byBvcGVuIGEgZ2VuZXJpYyBkZXZpY2UncyBwb3J0IG1vcmUgdGhhbiBvbmNlLgorCisgKDA3LzIzLzIwMDApIGdraAorCUFkZGVkIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyB0byBwb3J0IHN0cnVjdHVyZS4KKworICgwNy8xOS8yMDAwKSBna2gsIHBiZXJnZXIsIGFuZCBib3JjaGVycworCU1vZGlmaWNhdGlvbnMgdG8gYWxsb3cgdXNiLXNlcmlhbCBkcml2ZXJzIHRvIGJlIG1vZHVsZXMuCisKKyAoMDcvMDMvMjAwMCkgZ2toCisJQWRkZWQgbW9yZSBkZWJ1Z2dpbmcgdG8gc2VyaWFsX2lvY3RsIGNhbGwKKworICgwNi8yNS8yMDAwKSBna2gKKwlDaGFuZ2VkIGdlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayB0byBub3QgY2FsbCB3YWtlX3VwX2ludGVycnVwdGlibGUKKwlkaXJlY3RseSwgYnV0IHRvIGhhdmUgcG9ydF9zb2Z0aW50IGRvIGl0IGF0IGEgc2FmZXIgdGltZS4KKworICgwNi8yMy8yMDAwKSBna2gKKwlDbGVhbmVkIHVwIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGluIGEgcXVlc3QgdG8gZmluZCBVSENJIHRpbWVvdXQgYnVnLgorCisgKDA1LzIyLzIwMDApIGdraAorCUNoYW5nZWQgdGhlIG1ha2VmaWxlLCBlbmFibGluZyB0aGUgYmlnIENPTkZJR19VU0JfU0VSSUFMX1NPTVRISU5HIHRvIGJlCisJcmVtb3ZlZCBmcm9tIHRoZSBpbmRpdmlkdWFsIGRldmljZSBzb3VyY2UgZmlsZXMuCisKKyAoMDUvMDMvMjAwMCkgZ2toCisJQWRkZWQgdGhlIERpZ2kgQWNjZWxlcG9ydCBkcml2ZXIgZnJvbSBBbCBCb3JjaGVycyBhbmQgUGV0ZXIgQmVyZ2VyLgorCisgKDA1LzAyLzIwMDApIGdraAorCUNoYW5nZWQgZGV2ZnMgYW5kIHR0eSByZWdpc3RlciBjb2RlIHRvIHdvcmsgcHJvcGVybHkgbm93LiBUaGlzIHdhcyBiYXNlZCBvbgorCXRoZSBBQ00gZHJpdmVyIGNoYW5nZXMgYnkgVm9qdGVjaCBQYXZsaWsuCisKKyAoMDQvMjcvMjAwMCkgUnlhbiBWYW5kZXJCaWpsCisgCVB1dCBjYWxscyB0byAqX3BhcmFub2lhX2NoZWNrcyBpbnRvIG9uZSBmdW5jdGlvbi4KKworICgwNC8yMy8yMDAwKSBna2gKKwlGaXhlZCBidWcgdGhhdCBSYW5keSBEdW5sYXAgZm91bmQgZm9yIEdlbmVyaWMgZGV2aWNlcyB3aXRoIG5vIGJ1bGsgb3V0IHBvcnRzLgorCU1vdmVkIHdoZW4gdGhlIHN0YXJ0dXAgY29kZSBwcmludGVkIG91dCB0aGUgZGV2aWNlcyB0aGF0IGFyZSBzdXBwb3J0ZWQuCisKKyAoMDQvMTkvMjAwMCkgZ2toCisJQWRkZWQgZHJpdmVyIGZvciBaeVhFTCBvbW5pLm5ldCBsY2QgcGx1cyBJU0ROIFRBCisJTWFkZSBzdGFydHVwIGluZm8gbWVzc2FnZSBzcGVjaWZ5IHdoaWNoIGRyaXZlcnMgd2VyZSBjb21waWxlZCBpbi4KKworICgwNC8wMy8yMDAwKSBna2gKKwlDaGFuZ2VkIHRoZSBwcm9iZSBwcm9jZXNzIHRvIHJlbW92ZSB0aGUgbW9kdWxlIHVubG9hZCByYWNlcy4KKwlDaGFuZ2VkIHdoZXJlIHRoZSB0dHkgbGF5ZXIgZ2V0cyBpbml0aWFsaXplZCB0byBoYXZlIGRldmZzIHdvcmsgbmljZXIuCisJQWRkZWQgaW5pdGlhbCBkZXZmcyBzdXBwb3J0LgorCisgKDAzLzI2LzIwMDApIGdraAorCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCisKKyAoMDMvMTkvMjAwMCkgZ2toCisJRml4ZWQgb29wcyB0aGF0IGNvdWxkIGhhcHBlbiB3aGVuIGRldmljZSB3YXMgcmVtb3ZlZCB3aGlsZSBhIHByb2dyYW0KKwl3YXMgdGFsa2luZyB0byB0aGUgZGV2aWNlLgorCVJlbW92ZWQgdGhlIHN0YXRpYyB1cmJzIGFuZCBub3cgYWxsIHVyYnMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZAorCWR5bmFtaWNhbGx5LgorCVJld29ya2VkIHRoZSBpbnRlcm5hbCBpbnRlcmZhY2UuIE5vdyBldmVyeXRoaW5nIGlzIGJhc2VkIG9uIHRoZQorCXVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgbGFyZ2VyIHVzYl9zZXJpYWwgc3RydWN0dXJlLgorCVRoaXMgZml4ZXMgdGhlIGJ1ZyB0aGF0IGEgbXVsdGlwb3J0IGRldmljZSBjb3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4KKwlvbmUgcG9ydCBvcGVuIGF0IG9uZSB0aW1lLgorCisgKDAzLzE3LzIwMDApIGdraAorCUFkZGVkIGNvbmZpZyBvcHRpb24gZm9yIGRlYnVnZ2luZyBtZXNzYWdlcy4KKwlBZGRlZCBwYXRjaCBmb3Iga2V5c3BhbiBwZGEgZnJvbSBCcmlhbiBXYXJuZXIuCisKKyAoMDMvMDYvMjAwMCkgZ2toCisJQWRkZWQgdGhlIGtleXNwYW4gcGRhIGNvZGUgZnJvbSBCcmlhbiBXYXJuZXIgPHdhcm5lckBsb3RoYXIuY29tPgorCU1vdmVkIGEgYnVuY2ggb2YgdGhlIHBvcnQgc3BlY2lmaWMgc3R1ZmYgaW50byBpdHMgb3duIHN0cnVjdHVyZS4gVGhpcworCWlzIGluIGFudGljaXBhdGlvbiBvZiB0aGUgdHJ1ZSBtdWx0aXBvcnQgZGV2aWNlcyAodGhlcmUncyBhIGJ1ZyBpZiB5b3UKKwl0cnkgdG8gYWNjZXNzIG1vcmUgdGhhbiBvbmUgcG9ydCBvZiBhbnkgbXVsdGlwb3J0IGRldmljZSByaWdodCBub3cpCisKKyAoMDIvMjEvMjAwMCkgZ2toCisJTWFkZSBpdCBzbyB0aGF0IGFueSBzZXJpYWwgZGV2aWNlcyBvbmx5IGhhdmUgdG8gc3BlY2lmeSB3aGljaCBmdW5jdGlvbnMKKwl0aGV5IHdhbnQgdG8gb3ZlcmxvYWQgZnJvbSB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBjYWxscyAoZ3JlYXQsCisJaW5oZXJpdGFuY2UgaW4gQywgaW4gYSBkcml2ZXIsIGp1c3Qgd2hhdCBJIHdhbnRlZC4uLikKKwlBZGRlZCBzdXBwb3J0IGZvciBzZXRfdGVybWlvcyBhbmQgaW9jdGwgZnVuY3Rpb24gY2FsbHMuIE5vIGRyaXZlcnMgdGFrZQorCWFkdmFudGFnZSBvZiB0aGlzIHlldC4KKwlSZW1vdmVkIHRoZSAjaWZkZWYgTU9EVUxFLCBub3cgdGhlcmUgaXMgbm8gbW9kdWxlIHNwZWNpZmljIGNvZGUuCisJQ2xlYW5lZCB1cCBhIGZldyBjb21tZW50cyBpbiB1c2Itc2VyaWFsLmggdGhhdCB3ZXJlIHdyb25nICh0aGFua3MgYWdhaW4KKwl0byBNaWxlcyBMb3R0KS4KKwlTbWFsbCBmaXggdG8gZ2V0X2ZyZWVfc2VyaWFsLgorCisgKDAyLzE0LzIwMDApIGdraAorCVJlbW92ZWQgdGhlIEJlbGtpbiBhbmQgUGVyYWNvbSBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIGRyaXZlciBkdWUgdG8KKwl0aGUgbGFjayBvZiBzdXBwb3J0IGZyb20gdGhlIHZlbmRvciwgYW5kIG1lIG5vdCB3YW50aW5nIHBlb3BsZSB0bworCWFjY2lkZW5hdGx5IGJ1eSB0aGUgZGV2aWNlLCBleHBlY3RpbmcgaXQgdG8gd29yayB3aXRoIExpbnV4LgorCUFkZGVkIHJlYWRfYnVsa19jYWxsYmFjayBhbmQgd3JpdGVfYnVsa19jYWxsYmFjayB0byB0aGUgdHlwZSBzdHJ1Y3R1cmUKKwlmb3IgdGhlIG5lZWRzIG9mIHRoZSBGVERJIGFuZCBXaGl0ZUhFQVQgZHJpdmVyLgorCUNoYW5nZWQgYWxsIHJldmVyZW5jZXMgdG8gRlRESSB0byBGVERJX1NJTyBhdCB0aGUgcmVxdWVzdCBvZiBCaWxsCisJUnlkZXIuCisJQ2hhbmdlZCB0aGUgb3V0cHV0IHVyYiBzaXplIGJhY2sgdG8gdGhlIG1heCBlbmRwb2ludCBzaXplIHRvIG1ha2UKKwl0aGUgZnRkaV9zaW8gZHJpdmVyIGhhdmUgaXQgZWFzaWVyLCBhbmQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgaXQgZGlkbid0CisJcmVhbGx5IGluY3JlYXNlIHRoZSBzcGVlZCBhbnkuCisKKyAoMDIvMTEvMjAwMCkgZ2toCisJQWRkZWQgVklTT1JfRlVOQ1RJT05fQ09OU09MRSB0byB0aGUgdmlzb3Igc3RhcnR1cCBmdW5jdGlvbi4gVGhpcyB3YXMgYQorCXBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkuCisJRml4ZWQgYnVnIHdpdGggbm90IHJlc3RvcmluZyB0aGUgbWlub3IgcmFuZ2UgdGhhdCBhIGRldmljZSBncmFicywgaWYKKwl0aGUgc3RhcnR1cCBmdW5jdGlvbiBmYWlscyAodGhhbmtzIE1pbGVzIGZvciBmaW5kaW5nIHRoaXMpLgorCisgKDAyLzA1LzIwMDApIGdraAorCUFkZGVkIGluaXRpYWwgZnJhbWV3b3JrIGZvciB0aGUgS2V5c3BhbiBQREEgc2VyaWFsIGNvbnZlcnRlciBzbyB0aGF0CisJQnJpYW4gV2FybmVyIGhhcyBhIHBsYWNlIHRvIHB1dCBoaXMgY29kZS4KKwlNYWRlIHRoZSBlenVzYiBzcGVjaWZpYyBmdW5jdGlvbnMgZ2VuZXJpYyBlbm91Z2ggdGhhdCBkaWZmZXJlbnQKKwlkZXZpY2VzIGNhbiB1c2UgdGhlbSAod2hpdGVoZWF0IGFuZCBrZXlzcGFuX3BkYSBib3RoIG5lZWQgdGhlbSkuCisJU3BsaXQgb3V0IGEgd2hvbGUgYnVuY2ggb2Ygc3RydWN0dXJlIGFuZCBvdGhlciBzdHVmZiB0byBhIHNlcGFyYXRlCisJdXNiLXNlcmlhbC5oIGZpbGUuCisJTWFkZSB0aGUgVmlzb3IgY29ubmVjdGlvbiBtZXNzYWdlcyBhIGxpdHRsZSBtb3JlIHVuZGVyc3RhbmRhYmxlLCBub3cKKwl0aGF0IE1pbGVzIExvdHQgKG1pbG9zQGluc3luYy5uZXQpIGhhcyBnb3R0ZW4gdGhlIEdlbmVyaWMgY2hhbm5lbCB0bworCXdvcmsuIEFsc28gbWFkZSB0aGVtIGFsd2F5cyBzaG93IHVwIGluIHRoZSBsb2cgZmlsZS4KKworICgwMS8yNS8yMDAwKSBna2gKKwlBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgRlRESSBzZXJpYWwgY29udmVydGVyIHNvIHRoYXQgQmlsbCBSeWRlcgorCWhhcyBhIHBsYWNlIHRvIHB1dCBoaXMgY29kZS4KKwlBZGRlZCB0aGUgdmVuZG9yIHNwZWNpZmljIGluZm8gZnJvbSBIYW5kc3ByaW5nLiBOb3cgd2UgY2FuIHByaW50IG91dAorCWluZm9ybWF0aW9uYWwgZGVidWcgbWVzc2FnZXMgYXMgd2VsbCBhcyB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nLgorCisgKDAxLzIzLzIwMDApIGdraAorCUZpeGVkIHByb2JsZW0gb2YgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gb3BlbiBhIHBvcnQgdGhhdCBkaWRuJ3QgaGF2ZSBhCisJZGV2aWNlIGFzc2lnbmVkIHRvIGl0LiBNYWRlIHRoZSBtaW5vciBub2RlIGZpbmRpbmcgYSBsaXR0bGUgc21hcnRlciwKKwlub3cgaXQgbG9va3MgdG8gZmluZCBhIGNvbnRpbnVvdXMgc3BhY2UgZm9yIHRoZSBuZXcgZGV2aWNlLgorCisgKDAxLzIxLzIwMDApIGdraAorCUZpeGVkIGJ1ZyBpbiB2aXNvcl9zdGFydHVwIHdpdGggcGF0Y2ggZnJvbSBNaWxlcyBMb3R0IChtaWxvc0BpbnN5bmMubmV0KQorCUZpeGVkIGdldF9zZXJpYWxfYnlfbWlub3Igd2hpY2ggd2FzIGFsbCBtZXNzZWQgdXAgZm9yIG11bHRpIHBvcnQKKwlkZXZpY2VzLiBGaXhlZCBtdWx0aSBwb3J0IHByb2JsZW0gZm9yIGdlbmVyaWMgZGV2aWNlcy4gTm93IHRoZSBudW1iZXIKKwlvZiBwb3J0cyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2YgYnVsayBvdXQgZW5kcG9pbnRzIGZvciB0aGUKKwlnZW5lcmljIGRldmljZS4KKworICgwMS8xOS8yMDAwKSBna2gKKwlSZW1vdmVkIGxvdHMgb2YgY3J1ZnQgdGhhdCB3YXMgYXJvdW5kIGZyb20gdGhlIG9sZCAocHJlIHVyYikgZHJpdmVyCisJaW50ZXJmYWNlLgorCU1hZGUgdGhlIHNlcmlhbF90YWJsZSBkeW5hbWljLiBUaGlzIHNob3VsZCBzYXZlIGxvdHMgb2YgbWVtb3J5IHdoZW4KKwl0aGUgbnVtYmVyIG9mIG1pbm9yIG5vZGVzIGdvZXMgdXAgdG8gMjU2LgorCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgZGV2aWNlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIG9uZSBwb3J0LgorCUFkZGVkIG1vcmUgZGVidWdnaW5nIGNvbW1lbnRzIGZvciB0aGUgVmlzb3IsIGFuZCBhZGRlZCBhIG5lZWRlZAorCXNldF9jb25maWd1cmF0aW9uIGNhbGwuCisKKyAoMDEvMTcvMjAwMCkgZ2toCisJRml4ZWQgdGhlIFdoaXRlSEVBVCBmaXJtd2FyZSAobXkgcHJvY2Vzc2luZyB0b29sIGhhZCBhIGJ1ZykKKwlhbmQgYWRkZWQgbmV3IGRlYnVnIGxvYWRlciBmaXJtd2FyZSBmb3IgaXQuCisJUmVtb3ZlZCB0aGUgcHV0X2NoYXIgZnVuY3Rpb24gYXMgaXQgaXNuJ3QgcmVhbGx5IG5lZWRlZC4KKwlBZGRlZCB2aXNvciBzdGFydHVwIGNvbW1hbmRzIGFzIGZvdW5kIGJ5IHRoZSBXaW45OCBkdW1wLgorCisgKDAxLzEzLzIwMDApIGdraAorCUZpeGVkIHRoZSB2ZW5kb3IgaWQgZm9yIHRoZSBnZW5lcmljIGRyaXZlciB0byB0aGUgb25lIEkgbWVhbnQgaXQgdG8gYmUuCisKKyAoMDEvMTIvMjAwMCkgZ2toCisJRm9yZ2V0IHRoZSB2ZXJzaW9uIG51bWJlcmluZy4uLnRoYXQncyBwcmV0dHkgdXNlbGVzcy4uLgorCU1hZGUgdGhlIGRyaXZlciBhYmxlIHRvIGJlIGNvbXBpbGVkIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdCB3aGljaAorCWNvbnZlcnRlciB0aGV5IHdhbnQgdG8gdXNlLiBUaGlzIGFsbG93cyBwZW9wbGUgd2hvIG9ubHkgd2FudCB0aGUgVmlzb3IKKwlzdXBwb3J0IHRvIG5vdCBwYXkgdGhlIG1lbW9yeSBzaXplIHByaWNlIG9mIHRoZSBXaGl0ZUhFQVQuCisJRml4ZWQgYnVnIHdoZXJlIHRoZSBnZW5lcmljIGRyaXZlciAoaWRWZW5kb3I9MDAwMCBhbmQgaWRQcm9kdWN0PTAwMDApCisJZ3JhYmJlZCB0aGUgcm9vdCBodWIuIE5vdCBnb29kLgorCisgdmVyc2lvbiAwLjQuMCAoMDEvMTAvMjAwMCkgZ2toCisJQWRkZWQgd2hpdGVoZWF0LmggY29udGFpbmluZyB0aGUgZmlybXdhcmUgZm9yIHRoZSBDb25uZWN0VGVjaCBXaGl0ZUhFQVQKKwlkZXZpY2UuIEFkZGVkIHN0YXJ0dXAgZnVuY3Rpb24gdG8gYWxsb3cgZmlybXdhcmUgdG8gYmUgZG93bmxvYWRlZCB0bworCWEgZGV2aWNlIGlmIGl0IG5lZWRzIHRvIGJlLgorCUFkZGVkIGZpcm13YXJlIGRvd25sb2FkIGxvZ2ljIHRvIHRoZSBXaGl0ZUhFQVQgZGV2aWNlLgorCVN0YXJ0ZWQgdG8gYWRkICNkZWZpbmVzIHRvIHNwbGl0IHVwIHRoZSBkaWZmZXJlbnQgZHJpdmVycyBmb3IgcG90ZW50aWFsCisJY29uZmlndXJhdGlvbiBvcHRpb24uCisKKyB2ZXJzaW9uIDAuMy4xICgxMi8zMC85OSkgZ2toCisgICAgICBGaXhlZCBwcm9ibGVtcyB3aXRoIHVyYiBmb3IgYnVsayBvdXQuCisgICAgICBBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNldHMgb2YgZW5kcG9pbnRzLiBUaGlzIGVuYWJsZXMKKyAgICAgIHRoZSBIYW5kc3ByaW5nIFZpc29yIHRvIGJlIGF0dGFjaGVkIHN1Y2Nlc3NmdWxseS4gT25seSB0aGUgZmlyc3QKKyAgICAgIGJ1bGsgaW4gLyBidWxrIG91dCBlbmRwb2ludCBwYWlyIGlzIGJlaW5nIHVzZWQgcmlnaHQgbm93LgorCisgdmVyc2lvbiAwLjMuMCAoMTIvMjcvOTkpIGdraAorCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIEhhbmRzcHJpbmcgVmlzb3IgYmFzZWQgb24gYSBwYXRjaCBmcm9tCisJTWlsZXMgTG90dCAobWlsb3NAc25lZXR5Lmluc3luYy5uZXQpCisJQ2xlYW5lZCB1cCB0aGUgY29kZSBhIGJ1bmNoIGFuZCBjb252ZXJ0ZWQgb3ZlciB0byB1c2luZyB1cmJzIG9ubHkuCisKKyB2ZXJzaW9uIDAuMi4zICgxMi8yMS85OSkgZ2toCisJQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgQ29ubmVjdCBUZWNoIFdoaXRlSEVBVCBjb252ZXJ0ZXIuCisJSW5jcmVtZW50ZWQgdGhlIG51bWJlciBvZiBwb3J0cyBpbiBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIHRoZQorCVdoaXRlSEVBVCB0byB3b3JrIHByb3Blcmx5ICg0IHBvcnRzIHBlciBjb25uZWN0aW9uKS4KKwlBZGRlZCBub3RpZmljYXRpb24gb24gaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIHdoYXQgcG9ydCB0aGUKKwlkZXZpY2UgaXMvd2FzIGNvbm5lY3RlZCB0byAoYW5kIHdoYXQga2luZCBvZiBkZXZpY2UgaXQgd2FzKS4KKworIHZlcnNpb24gMC4yLjIgKDEyLzE2Lzk5KSBna2gKKwlDaGFuZ2VkIG1ham9yIG51bWJlciB0byB0aGUgbmV3IGFsbG9jYXRlZCBudW1iZXIuIFdlJ3JlIGxlZ2FsIG5vdyEKKworIHZlcnNpb24gMC4yLjEgKDEyLzE0Lzk5KSBna2gKKwlGaXhlZCBidWcgdGhhdCBoYXBwZW5zIHdoZW4gZGV2aWNlIG5vZGUgaXMgb3BlbmVkIHdoZW4gdGhlcmUgaXNuJ3QgYQorCWRldmljZSBhdHRhY2hlZCB0byBpdC4gVGhhbmtzIHRvIG1hcmVrQHdlYmRlc2lnbi5ubyBmb3Igbm90aWNpbmcgdGhpcy4KKworIHZlcnNpb24gMC4yLjAgKDExLzEwLzk5KSBna2gKKwlTcGxpdCB1cCBpbnRlcm5hbHMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gYWRkIGRpZmZlcmVudCB0eXBlcyBvZiBzZXJpYWwKKwljb252ZXJ0ZXJzIHRvIHRoZSBjb2RlLgorCUFkZGVkIGEgImdlbmVyaWMiIGRyaXZlciB0aGF0IGdldHMgaXQncyB2ZW5kb3IgYW5kIHByb2R1Y3QgaWQKKwlmcm9tIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuIFRoYW5rcyB0byBEYXZpZCBFLiBOZWxzb24gKGRuZWxzb25AanVtcC5uZXQpCisJZm9yIHRoZSBpZGVhIGFuZCBzYW1wbGUgY29kZSAoZnJvbSB0aGUgdXNiIHNjYW5uZXIgZHJpdmVyLikKKwlDbGVhcmVkIHVwIGFueSBsaWNlbnNpbmcgcXVlc3Rpb25zIGJ5IHJlbGVhc2luZyBpdCB1bmRlciB0aGUgR05VIEdQTC4KKworIHZlcnNpb24gMC4xLjIgKDEwLzI1Lzk5KSBna2gKKyAJRml4ZWQgYnVnIGluIGRldGVjdGluZyBkZXZpY2UuCisKKyB2ZXJzaW9uIDAuMS4xICgxMC8wNS85OSkgZ2toCisgCUNoYW5nZWQgdGhlIG1ham9yIG51bWJlciB0byBub3QgY29uZmxpY3Qgd2l0aCBhbnl0aGluZyBlbHNlLgorCisgdmVyc2lvbiAwLjEgKDA5LzI4Lzk5KSBna2gKKyAJQ2FuIHJlY29nbml6ZSB0aGUgdHdvIGRpZmZlcmVudCBkZXZpY2VzIGFuZCBzdGFydCB1cCBhIHJlYWQgZnJvbQorCWRldmljZSB3aGVuIGFza2VkIHRvLiBXcml0ZXMgYWxzbyB3b3JrLiBObyBjb250cm9sIHNpZ25hbHMgeWV0LCB0aGlzCisJYWxsIGlzIHZlbmRvciBzcGVjaWZpYyBkYXRhIChpLmUuIG5vIHNwZWMpLCBhbHNvIG5vIGNvbnRyb2wgZm9yCisJZGlmZmVyZW50IGJhdWQgcmF0ZXMgb3Igb3RoZXIgYml0IHNldHRpbmdzLgorCUN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgdGhlIHNhbWUgZGV2aWQgYXMgdGhlIGFjbSBkcml2ZXIuIFRoaXMgbmVlZHMKKwl0byBjaGFuZ2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2aXNvci5jIENoYW5nZSBMb2cgY29tbWVudHM6CisKKyAoMDYvMDMvMjAwMykgSnVkZCBNb250Z29tZXJ5IDxqdWRkIGF0IGpwaWxvdC5vcmc+CisgICAgIEFkZGVkIHN1cHBvcnQgZm9yIG1vZHVsZSBwYXJhbWV0ZXIgb3B0aW9ucyBmb3IgdW50ZXN0ZWQvdW5rbm93bgorICAgICBkZXZpY2VzLgorCisgKDAzLzA5LzIwMDMpIGdraAorCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTb255IENsaWUgTlo5MFYgZGV2aWNlLiAgVGhhbmtzIHRvIE1hcnRpbiBCcmFjaHRsCisJPGJyYWNodGxAcmVkZ3JlcC5jej4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KKworICgwMy8wNS8yMDAzKSBna2gKKwlUaGluayBUcmVvIHN1cHBvcnQgaXMgbm93IHdvcmtpbmcuCisKKyAoMDQvMDMvMjAwMikgZ2toCisJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFNvbnkgT1MgNC4xIGRldmljZXMuICBUaGFua3MgdG8gSGlyb3l1a2kgQVJBS0kKKwk8aGlyb0B6b2IubmUuanA+IGZvciB0aGUgaW5mb3JtYXRpb24uCisKKyAoMDMvMjcvMjAwMikgZ2toCisJUmVtb3ZlZCBhc3N1bXB0aW9ucyB0aGF0IHBvcnQtPnR0eSB3YXMgYWx3YXlzIHZhbGlkIChpcyBub3QgdHJ1ZQorCWZvciB1c2Igc2VyaWFsIGNvbnNvbGUgZGV2aWNlcy4pCisKKyAoMDMvMjMvMjAwMikgZ2toCisJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFBhbG0gaTcwNSBkZXZpY2UsIHRoYW5rcyB0byBUaG9tYXMgUmllbWVyCisJPHRvbUBuZXRtZWNoLmNvbT4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KKworICgwMy8yMS8yMDAyKSBna2gKKwlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUGFsbSBtMTMwIGRldmljZSwgdGhhbmtzIHRvIFVkbyBFaXNlbmJhcnRoCisJPHVkby5laXNlbmJhcnRoQHdlYi5kZT4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KKworICgwMi8yNy8yMDAyKSBna2gKKwlSZXdvcmtlZCB0aGUgdXJiIGhhbmRsaW5nIGxvZ2ljLiAgV2UgaGF2ZSBubyBtb3JlIHBvb2wsIGJ1dCBkeW5hbWljYWxseQorCWFsbG9jYXRlIHRoZSB1cmIgYW5kIHRoZSB0cmFuc2ZlciBidWZmZXIgb24gdGhlIGZseS4gIEluIHRlc3RpbmcgdGhpcworCWRvZXMgbm90IGluY3VyZSBhbnkgbWVhc3VyYWJsZSBvdmVyaGVhZC4gIFRoaXMgYWxzbyByZWxpZXMgb24gdGhlIGZhY3QKKwl0aGF0IHdlIGhhdmUgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgdXJicy4KKworICgwMi8yMS8yMDAyKSBTaWxhUworICBBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBQYWxtIG01MTUgZGV2aWNlcy4KKworICgwMi8xNC8yMDAyKSBna2gKKwlBZGRlZCBzdXBwb3J0IGZvciB0aGUgQ2xpZSBTLTM2MCBkZXZpY2UuCisKKyAoMTIvMTgvMjAwMSkgZ2toCisJQWRkZWQgYmV0dGVyIENsaWUgc3VwcG9ydCBmb3IgMy41IGRldmljZXMuICBUaGFua3MgdG8gR2VvZmZyZXkgTGV2YW5kCisJZm9yIHRoZSBwYXRjaC4KKworICgxMS8xMS8yMDAxKSBna2gKKwlBZGRlZCBzdXBwb3J0IGZvciB0aGUgbTEyNSBkZXZpY2VzLCBhbmQgYWRkZWQgY2hlY2sgdG8gcHJldmVudCBvb3BzZXMKKwlmb3IgQ2xpw6kgZGV2aWNlcyB0aGF0IGxpZSBhYm91dCB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoZXkgaGF2ZS4KKworICgwOC8zMC8yMDAxKSBna2gKKwlBZGRlZCBzdXBwb3J0IGZvciB0aGUgQ2xpZSBkZXZpY2VzLCBib3RoIHRoZSAzLjUgYW5kIDQuMCBvcyB2ZXJzaW9ucy4KKwlNYW55IHRoYW5rcyB0byBEYW5pZWwgQnVya2UsIGFuZCBCcnlhbiBQYXluZSBmb3IgaGVscGluZyB3aXRoIHRoaXMuCisKKyAoMDgvMjMvMjAwMSkgZ2toCisJZml4ZWQgYSBmZXcgcG90ZW50aWFsIGJ1Z3MgcG9pbnRlZCBvdXQgYnkgT2xpdmVyIE5ldWt1bS4KKworICgwNS8zMC8yMDAxKSBna2gKKwlzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorCisgKDA1LzI4LzIwMDApIGdraAorCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIFBhbG0gbTUwMCBhbmQgUGFsbSBtNTA1IGRldmljZXMuCisKKyAoMDQvMDgvMjAwMSkgZ2IKKwlJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorCisgKDAxLzIxLzIwMDApIGdraAorCUFkZGVkIHdyaXRlX3Jvb20gYW5kIGNoYXJzX2luX2J1ZmZlciwgYXMgdGhleSB3ZXJlIHByZXZpb3VzbHkgdXNpbmcgdGhlCisJZ2VuZXJpYyBkcml2ZXIgdmVyc2lvbnMgd2hpY2ggaXMgYWxsIHdyb25nIG5vdyB0aGF0IHdlIGFyZSB1c2luZyBhbiB1cmIKKwlwb29sLiAgVGhhbmtzIHRvIFdvbGZnYW5nIEdyYW5kZWdnZXIgZm9yIHBvaW50aW5nIHRoaXMgb3V0IHRvIG1lLgorCVJlbW92ZWQgY291bnQgYXNzaWdubWVudCBpbiB0aGUgd3JpdGUgZnVuY3Rpb24sIHdoaWNoIHdhcyBub3QgbmVlZGVkIGFueW1vcmUKKwllaXRoZXIuICBUaGFua3MgdG8gQWwgQm9yY2hlcnMgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisgKDEyLzEyLzIwMDApIGdraAorCU1vdmVkIE1PRF9ERUMgdG8gZW5kIG9mIHZpc29yX2Nsb3NlIHRvIGJlIG5pY2VyLCBhcyB0aGUgZmluYWwgd3JpdGUKKwltZXNzYWdlIGNhbiBzbGVlcC4KKworICgxMS8xMi8yMDAwKSBna2gKKwlGaXhlZCBidWcgd2l0aCBkYXRhIGJlaW5nIGRyb3BwZWQgb24gdGhlIGZsb29yIGJ5IGZvcmNpbmcgdHR5LT5sb3dfbGF0ZW5jeQorCXRvIGJlIG9uLiAgSG9wZWZ1bGx5IHRoaXMgZml4ZXMgdGhlIE9IQ0kgaXNzdWUhCisKKyAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0CisKKyAoMTAvMDUvMjAwMCkgZ2toCisJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorCWNvcmUgbmVlZHMgaXQuCisKKyAoMDkvMTEvMjAwMCkgZ2toCisJR290IHJpZCBvZiBhbHdheXMgY2FsbGluZyBrbWFsbG9jIGZvciBldmVyeSB1cmIgd2Ugd3JvdGUgb3V0IHRvIHRoZQorCWRldmljZS4KKwlBZGRlZCB2aXNvcl9yZWFkX2NhbGxiYWNrIHNvIHdlIGNhbiBrZWVwIHRyYWNrIG9mIGJ5dGVzIGluIGFuZCBvdXQgZm9yCisJdGhvc2UgcGVvcGxlIHdobyBsaWtlIHRvIGtub3cgdGhlIHNwZWVkIG9mIHRoZWlyIGRldmljZS4KKwlSZW1vdmVkIERFQlVHICNpZmRlZnMgd2l0aCBjYWxsIHRvIHVzYl9zZXJpYWxfZGVidWdfZGF0YQorCisgKDA5LzA2LzIwMDApIGdraAorCUZpeGVkIG9vcHMgaW4gdmlzb3JfZXhpdC4gIE5lZWQgdG8gdW5jb21tZW50IHVzYl91bmxpbmtfdXJiIGNhbGwgX2FmdGVyXworCXRoZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyBzZXQgdXJiLT5kZXYgPSBOVUxMIHdoZW4gdGhlIHVyYiBpcyBmaW5pc2hlZC4KKworICgwOC8yOC8yMDAwKSBna2gKKwlBZGRlZCBsb2NrcyBmb3IgU01QIHNhZmVuZXNzLgorCisgKDA4LzA4LzIwMDApIGdraAorCUZpeGVkIGVuZGlhbiBwcm9ibGVtIGluIHZpc29yX3N0YXJ0dXAuCisJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYyBhbmQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZQorCXRoYW4gb25jZS4KKworICgwNy8yMy8yMDAwKSBna2gKKwlBZGRlZCBwb29sIG9mIHdyaXRlIHVyYnMgdG8gc3BlZWQgdXAgdHJhbnNmZXJzIHRvIHRoZSB2aXNvci4KKworICgwNy8xOS8yMDAwKSBna2gKKwlBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKwlkcml2ZXIgaXMgYSBsb2FkYWJsZSBtb2R1bGUgbm93LgorCisgKDA3LzAzLzIwMDApIGdraAorCUFkZGVkIHZpc29yX3NldF9pb2N0bCBhbmQgdmlzb3Jfc2V0X3Rlcm1pb3MgZnVuY3Rpb25zICh0aGV5IGRvbid0IGRvIG11Y2gKKwlvZiBhbnl0aGluZywgYnV0IGFyZSBnb29kIGZvciBkZWJ1Z2dpbmcuKQorCisgKDA2LzI1LzIwMDApIGdraAorCUZpeGVkIGJ1ZyBpbiB2aXNvcl91bnRocm90dGxlIHRoYXQgc2hvdWxkIGhlbHAgd2l0aCB0aGUgZGlzY29ubmVjdCBpbiBQUFAKKwlidWcgdGhhdCBwZW9wbGUgaGF2ZSBiZWVuIHJlcG9ydGluZy4KKworICgwNi8yMy8yMDAwKSBna2gKKwlDbGVhbmVkIHVwIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGluIGEgcXVlc3QgdG8gZmluZCBVSENJIHRpbWVvdXQgYnVnLgorCisgKDA0LzI3LzIwMDApIFJ5YW4gVmFuZGVyQmlqbAorIAlGaXhlZCBtZW1vcnkgbGVhayBpbiB2aXNvcl9jbG9zZQorCisgKDAzLzI2LzIwMDApIGdraAorCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwbDIzMDMuYyBDaGFuZ2UgTG9nIGNvbW1lbnRzOgorCisgMjAwMl9NYXJfMjYgZ2toCisJYWxsb3dlZCBkcml2ZXIgdG8gd29yayBwcm9wZXJseSBpZiB0aGVyZSBpcyBubyB0dHkgYXNzaWduZWQgdG8gYSBwb3J0CisJKHRoaXMgaGFwcGVucyBmb3Igc2VyaWFsIGNvbnNvbGUgZGV2aWNlcy4pCisKKyAyMDAxX09jdF8wNiBna2gKKwlBZGRlZCBSVFMgYW5kIERUUiBsaW5lIGNvbnRyb2wuICBUaGFua3MgdG8gam9lQGJuZGxnLmRlIGZvciBwYXJ0cyBvZiBpdC4KKworIDIwMDFfU2VwXzE5IGdraAorCUFkZGVkIGJyZWFrIHN1cHBvcnQuCisKKyAyMDAxX0F1Z18zMCBna2gKKwlmaXhlZCBvb3BzIGluIHdyaXRlX2J1bGtfY2FsbGJhY2suCisKKyAyMDAxX0F1Z18yOCBna2gKKwlyZXdvcmtlZCBidWZmZXIgbG9naWMgdG8gYmUgbGlrZSBvdGhlciB1c2Itc2VyaWFsIGRyaXZlcnMuICBIb3BlZnVsbHkKKwlyZW1vdmluZyBzb21lIHJlcG9ydGVkIHByb2JsZW1zLgorCisgMjAwMV9KdW5fMDYgZ2toCisJZmluaXNoZWQgcG9ydGluZyB0byAyLjQgZm9ybWF0LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpb19lZGdlcG9ydC5jIENoYW5nZSBMb2cgY29tbWVudHM6CisKKyAyMDAzXzA0XzAzIGFsIGJvcmNoZXJzCisgIC0gZml4ZWQgYSBidWcgKHRoYXQgc2hvd3MgdXAgd2l0aCBkb3NlbXUpIHdoZXJlIHRoZSB0dHkgc3RydWN0IGlzCisgICAgdXNlZCBpbiBhIGNhbGxiYWNrIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkCisKKyAyLjMgMjAwMl8wM18wOCBncmVnIGtyb2FoLWhhcnRtYW4KKwktIGZpeGVkIGJ1ZyB3aGVuIG11bHRpcGxlIGRldmljZXMgd2VyZSBhdHRhY2hlZCBhdCB0aGUgc2FtZSB0aW1lLgorCisgMi4yIDIwMDFfMTFfMTQgZ3JlZyBrcm9haC1oYXJ0bWFuCisJLSBmaXhlZCBidWcgaW4gZWRnZV9jbG9zZSB0aGF0IGtlcHQgdGhlIHBvcnQgZnJvbSBiZWluZyB1c2VkIG1vcmUKKwkgIHRoYW4gb25jZS4KKwktIGZpeGVkIG1lbW9yeSBsZWFrIG9uIGRldmljZSByZW1vdmFsLgorCS0gZml4ZWQgcG90ZW50aWFsIGRvdWJsZSBmcmVlIG9mIG1lbW9yeSB3aGVuIGNvbW1hbmQgdXJiIHN1Ym1pdHRpbmcKKwkgIGZhaWxlZC4KKwktIG90aGVyIHNtYWxsIGNsZWFudXBzIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkCisKKyAyLjEgMjAwMV8wN18wOSBncmVnIGtyb2FoLWhhcnRtYW4KKwktIGFkZGVkIHN1cHBvcnQgZm9yIFRJT0NNQklTIGFuZCBUSU9DTUJJQy4KKworICAgICAoMDQvMDgvMjAwMSkgZ2IKKwktIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisKKyAyLjAgMjAwMV8wM18wNSBncmVnIGtyb2FoLWhhcnRtYW4KKwktIHJld29ya2VkIGVudGlyZSBkcml2ZXIgdG8gZml0IHByb3Blcmx5IGluIHdpdGggdGhlIG90aGVyIHVzYi1zZXJpYWwKKwkgIGRyaXZlcnMuICBPY2Nhc2lvbmFsIG9vcHNlcyBzdGlsbCBoYXBwZW4sIGJ1dCBpdCdzIGEgZ29vZCBzdGFydC4KKworIDEuMi4zICgwMi8yMy8yMDAxKSBncmVnIGtyb2FoLWhhcnRtYW4KKwktIGNoYW5nZWQgZGV2aWNlIHRhYmxlIHRvIHdvcmsgcHJvcGVybHkgZm9yIDIuNC54IGZpbmFsIGZvcm1hdC4KKwktIGZpeGVkIHByb2JsZW0gd2l0aCBkcm9wcGluZyBkYXRhIGF0IGhpZ2ggZGF0YSByYXRlcy4KKworIDEuMi4yICgxMS8yNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKwktIGNsZWFuZWQgdXAgbW9yZSBOVGlzbXMuCisJLSBBZGRlZCBkZXZpY2UgdGFibGUgZm9yIDIuNC4wLXRlc3QxMQorCisgMS4yLjEgKDExLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorCS0gU3RhcnRlZCB0byBjbGVhbiB1cCBOVGlzbXMuCisJLSBGaXhlZCBwcm9ibGVtIHdpdGggZGV2IGZpZWxkIG9mIHVyYiBmb3Iga2VybmVscyA+PSAyLjQuMC10ZXN0OQorCisgMS4yICgxMC8xNy8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAJUmVtb3ZlIGFsbCBFUElDIGNvZGUgYW5kIEdQTCBzb3VyY2UKKyAgRml4IFJFTEVWQU5UX0lGTEFHIG1hY3JvIHRvIGluY2x1ZGUgZmxvdyBjb250cm9sCisgIGNoYW5nZXMgcG9ydCBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisgIEZpeCByZWRlZmluaXRpb24gb2YgU0VSSUFMX01BR0lDCisgIENoYW5nZSBhbGwgdGltZW91dCB2YWx1ZXMgdG8gNSBzZWNvbmRzCisgIFRyaWVkIHRvIGZpeCB0aGUgVUhDSSBtdWx0aXBsZSB1cmIgc3VibWlzc2lvbiwgYnV0IGZhaWxlZCBtaXNlcmFibHkuCisgIGl0IHNlZW1zIHRvIHdvcmsgZmluZSB3aXRoIE9IQ0kuCisgICggR3JlZyB0YWtlIGEgbG9vayBhdCB0aGUgI2lmIDAgYXQgZW5kIG9mIFdyaXRlQ21kVXNiKCkgd2UgbXVzdAorICAgIGZpbmQgYSB3YXkgdG8gd29yayBhcm91bnQgdGhpcyBVSENJIGJ1ZyApCisKKyAxLjEgKDEwLzExLzIwMDApIERhdmlkIElhY292ZWxsaQorICBGaXggWE9OL1hPRkYgZmxvdyBjb250cm9sIHRvIHN1cHBvcnQgYm90aCBJWE9OIGFuZCBJWE9GRgorCisgMC45LjI3ICgwNi8zMC8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAgQWRkZWQgdHJhbnNtaXQgcXVldWUgYW5kIG5vdyBhbGxvY2F0ZSB1cmIgZm9yIGNvbW1hbmQgd3JpdGVzLgorCisgMC45LjI2ICgwNi8yOS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAgQWRkIHN1cHBvcnQgZm9yIDgwMjUxIGJhc2VkIGVkZ2Vwb3J0CisKKyAwLjkuMjUgKDA2LzI3LzIwMDApIERhdmlkIElhY292ZWxsaQorICBEbyBub3QgY2xvc2UgdGhlIHBvcnQgaWYgaXQgaGFzIG11bHRpcGxlIG9wZW5zLgorCisgMC45LjI0ICgwNS8yNi8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAgQWRkIElPQ1RMcyB0byBzdXBwb3J0IFJYVFggYW5kIEpBVkEgUE9TCisgIGFuZCBmaXJzdCBjdXQgYXQgcnVubmluZyBCbGFja0JveCBEZW1vCisKKyAwLjkuMjMgKDA1LzI0LzIwMDApIERhdmlkIElhY292ZWxsaQorICBBZGQgSU9DVExzIHRvIHN1cHBvcnQgUlhUWCBhbmQgSkFWQSBQT1MKKworIDAuOS4yMiAoMDUvMjMvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgIGZpeGVkIGJ1ZyBpbiBlbnVtZXJhdGlvbi4gIElmIGVwY29uZmlnIHR1cm5zIG9uIG1hcHBpbmcgYnkKKyAgcGF0aCBhZnRlciBhIGRldmljZSBpcyBhbHJlYWR5IHBsdWdnZWQgaW4sIHdlIG5vdyB1cGRhdGUKKyAgdGhlIG1hcHBpbmcgY29ycmVjdGx5CisKKyAwLjkuMjEgKDA1LzE2LzIwMDApIERhdmlkIElhY292ZWxsaQorICBBZGRlZCBCbG9ja1VudGlsQ2hhc2VSZXNwKCkgdG8gYWxzbyB3YWl0IGZvciB0eGNyZWRpdHMKKyAgVXBkYXRlZCB0aGUgd2F5IHdlIGFsbG9jYXRlIGFuZCBoYW5kbGUgd3JpdGUgVVJCcworCUFkZCBkZWJ1ZyBjb2RlIHRvIGR1bXAgYnVmZmVycworCisgMC45LjIwICgwNS8wMS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKwljaGFuZ2UgZHJpdmVyIHRvIHVzZSB1c2IvdHRzLworCisgMC45LjE5ICgwNS8wMS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAgVXBkYXRlIGNvZGUgdG8gY29tcGlsZSBpZiBERUJVRyBpcyBvZmYKKworIDAuOS4xOCAoMDQvMjgvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgIGNsZWFudXAgYW5kIHRlc3QgdHR5X3JlZ2lzdGVyIHdpdGggZGV2ZnMKKworIDAuOS4xNyAoMDQvMjcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgCWNoYW5nZWQgdHR5X3JlZ2lzdGVyIGFyb3VuZCB0byBiZSBsaWtlIHRoZSB3YXkgaXQKKyAJd2FzIGJlZm9yZSwgYnV0IG5vdyBpdCB3b3JrcyBwcm9wZXJseSB3aXRoIGRldmZzLgorCisgMC45LjE2ICgwNC8yNi8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAgRml4ZWQgYnVnIGluIEdldFByb2R1Y3RJbmZvKCkKKworIDAuOS4xNSAoMDQvMjUvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisJVXBkYXRlZCBlbnVtZXJhdGlvbgorCisgMC45LjE0ICgwNC8yNC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAgUmVtb3ZlZCBhbGwgY29uZmlnL3N0YXR1cyBJT0NUTFMgYW5kCisgIGNvbnZlcnRlZCB0byB1c2luZyAvcHJvYy9lZGdlcG9ydAorICBzdGlsbCBwbGF5aW5nIHdpdGggZGV2ZnMKKworIDAuOS4xMyAoMDQvMjQvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgIFJlbW92ZWQgY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0dHlVU0IwCisgIEFkZGVkIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gdXNpbmcgL3Byb2QvZWRnZXBvcnQKKyAgZmlyc3QgYXR0ZW1wdCBhdCB1c2luZyBkZXZmcyAobm90IHdvcmtpbmcgeWV0ISkKKyAgQWRkZWQgSU9DVEwgdG8gR2V0UHJvZHVjdEluZm8oKQorICBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gYmF1ZCByYXRlcworCUFkZCBzdXBwb3J0IGZvciByYW5kb20gcG9ydCBudW1iZXJzCisKKyAwLjkuMTIgKDA0LzE4LzIwMDApIGRhdmlkIGlhY292ZWxsaQorCWFkZGVkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBJT0NUTHMKKyAgdXNlIHR0eVVTQjAgZm9yIGNvbmZpZ3VyYXRpb24KKworIDAuOS4xMSAoMDQvMTcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisJZml4ZWQgbW9kdWxlIGluaXRpYWxpemF0aW9uIHJhY2UgY29uZGl0aW9ucy4KKwltYWRlIGFsbCB1cmJzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KKwltYWRlIGRyaXZlciBkZXZmcyBjb21wYXRpYmxlLiBub3cgaXQgb25seSByZWdpc3RlcnMgdGhlIHR0eSBkZXZpY2UKKwl3aGVuIHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgcGx1Z2dlZCBpbi4KKworIDAuOS4xMCAoMDQvMTMvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisJYWRkZWQgcHJvYyBpbnRlcmZhY2UgZnJhbWV3b3JrLgorCisgMC45LjkgKDA0LzEzLzIwMDApIGRhdmlkIGlhY292ZWxsaQorCWFkZGVkIGVudW1lcmF0aW9uIGNvZGUgYW5kIGlvY3RscyB0byBjb25maWd1cmUgdGhlIGRldmljZQorCisgMC45LjggKDA0LzEyLzIwMDApIGRhdmlkIGlhY292ZWxsaQorICBDaGFuZ2UgaW50ZXJydXB0IHJlYWQgc3RhcnQgd2hlbiBkZXZpY2UgaXMgcGx1Z2dlZCBpbgorICBhbmQgc3RvcCB3aGVuIGRldmljZSBpcyByZW1vdmVkCisJcHJvY2VzcyBpbnRlcnJ1cHQgcmVhZHMgd2hlbiBhbGwgcG9ydHMgYXJlIGNsb3NlZAorICAoa2VlcCB2YWx1ZSBvZiByeEJ5dGVzQXZhaWwgY29uc2lzdGVudCB3aXRoIHRoZSBlZGdlcG9ydCkKKyAgc2V0IHRoZSBVU0JfQlVMS19RVUVVRSBmbGFnIHNvIHRoYXQgd2UgY2FuIHNob3ZlIGEgYnVuY2gKKyAgb2YgdXJicyBhdCBvbmNlIGRvd24gdGhlIHBpcGUKKworIDAuOS43ICgwNC8xMC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAJc3RhcnQgdG8gYWRkIGVudW1lcmF0aW9uIGNvZGUuCisgIGdlbmVyYXRlIHNlcmlhbCBudW1iZXIgZm9yIGVwaWMgZGV2aWNlcworICBhZGQgc3VwcG9ydCBmb3Iga2RiCisKKyAwLjkuNiAoMDMvMzAvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgIGFkZCBJT0NUTCB0byBnZXQgc3RyaW5nLCBtYW51ZmFjdHVyZSwgYW5kIGJvb3QgZGVzY3JpcHRvcnMKKworIDAuOS41ICgwMy8xNC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKwltb3JlIGVycm9yIGNoZWNraW5nIGFkZGVkIHRvIFNlcmlhbE9wZW4gdG8gdHJ5IHRvIGZpeCBVSENJIG9wZW4gcHJvYmxlbQorCisgMC45LjQgKDAzLzA5LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorCWFkZGVkIG1vcmUgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIG9vcHMgd2hlbiBkYXRhIGlzIGhhbmdpbmcKKwlhcm91bmQgYW5kIHR0eSBpcyBhYnJ1cHRseSBjbG9zZWQuCisKKyAwLjkuMyAoMDMvMDkvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisJQWRkIGVwaWMgc3VwcG9ydCBmb3IgeG9uL3hvZmYgY2hhcnMKKwlwbGF5IHdpdGggcGVyZm9ybWFuY2UKKworIDAuOS4yICgwMy8wOC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKwljaGFuZ2VkIG1vc3QgImluZm8iIGNhbGxzIHRvICJkYmciCisJaW1wbGVtZW50ZWQgZmxvdyBjb250cm9sIHByb3Blcmx5IGluIHRoZSB0ZXJtaW9zIGNhbGwKKworIDAuOS4xICgwMy8wOC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKwlhZGRlZCBFUElDIHN1cHBvcnQKKwllbmFibGVkIGJvb3Rsb2FkZXIgdXBkYXRlCisKKyAwLjkgKDAzLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorCVJlbGVhc2UgdG8gSU8gbmV0d29ya3MuCisJSW50ZWdyYXRlZCBjaGFuZ2VzIHRoYXQgRGF2aWQgbWFkZQorICBtYWRlIGdldHRpbmcgdXJicyBmb3Igd3JpdGluZyBTTVAgc2FmZQorCisgMC44ICgwMy8wNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKwlSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgorCUZpeGVkIHByb2JsZW1zIHRoYXQgd2VyZSBzZWVuIGluIGNvZGUgYnkgRGF2aWQuCisgIE5vdyBib3RoIEVkZ2Vwb3J0LzQgYW5kIEVkZ2Vwb3J0LzIgd29ya3MgcHJvcGVybHkuCisgIENoYW5nZWQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIHRvIHVzZSBwb3J0IGluc3RlYWQgb2Ygc2VyaWFsLgorCisgMC43ICgwMi8yNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKwlNaWxlc3RvbmUgMyByZWxlYXNlLgorCVJlbGVhc2UgdG8gSU8gTmV0d29ya3MKKwlpb2N0bCBmb3Igd2FpdGluZyBvbiBsaW5lIGNoYW5nZSBpbXBsZW1lbnRlZC4KKwlpb2N0bCBmb3IgZ2V0dGluZyBzdGF0aXN0aWNzIGltcGxlbWVudGVkLgorCW11bHRpcG9ydCBzdXBwb3J0IHdvcmtpbmcuCisJbHNyIGFuZCBtc3IgcmVnaXN0ZXJzIGFyZSBub3cgaGFuZGxlZCBwcm9wZXJseS4KKwljaGFuZ2UgYnJlYWsgbm93IGhvb2tlZCB1cCBhbmQgd29ya2luZy4KKwlzdXBwb3J0IGZvciBhbGwga25vd24gRWRnZXBvcnQgZGV2aWNlcy4KKworIDAuNiAoMDIvMjIvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisJUmVsZWFzZSB0byBJTyBuZXR3b3Jrcy4KKwlDSEFTRSBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgd2hlbiBwb3J0IGlzIGNsb3NlZC4KKwlTZXJpYWxPcGVuIG5vdyBibG9ja3MgY29ycmVjdGx5IHVudGlsIHBvcnQgaXMgZnVsbHkgb3BlbmVkLgorCisgMC41ICgwMi8yMC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKwlSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgorCUtub3duIHByb2JsZW1zOgorCQltb2RlbSBzdGF0dXMgcmVnaXN0ZXIgY2hhbmdlcyBhcmUgbm90IHNlbnQgb24gdG8gdGhlIHVzZXIKKwkJQ0hBU0UgaXMgbm90IGltcGxlbWVudGVkIHdoZW4gdGhlIHBvcnQgaXMgY2xvc2VkLgorCisgMC40ICgwMi8xNi8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKwlTZWNvbmQgY3V0IGF0IHRoZSBDZUJpdCBkZW1vLgorCURvZXNuJ3QgbGVhayBtZW1vcnkgb24gZXZlcnkgd3JpdGUgdG8gdGhlIHBvcnQKKwlTdGlsbCBzbWFsbCBsZWFrcyBvbiBzdGFydHVwLgorCUFkZGVkIHN1cHBvcnQgZm9yIEVkZ2Vwb3J0LzIgYW5kIEVkZ2Vwb3J0LzgKKworIDAuMyAoMDIvMTUvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisJQ2VCaXQgZGVtbyByZWxlYXNlLgorCUZvcmNlIHRoZSBsaW5lIHNldHRpbmdzIHRvIDQ4MDAsIDgsIDEsIGUgZm9yIHRoZSBkZW1vLgorCVdhcm5pbmchIFRoaXMgdmVyc2lvbiBsZWFrcyBtZW1vcnkgbGlrZSBjcmF6eSEKKworIDAuMiAoMDEvMzAvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisJTWlsZXN0b25lIDEgcmVsZWFzZS4KKwlEZXZpY2UgaXMgZm91bmQgYnkgVVNCIHN1YnN5c3RlbSwgZW51bWVyYXRlZCwgZmltd2FyZSBpcyBkb3dubG9hZGVkCisJYW5kIHRoZSBkZXNjcmlwdG9ycyBhcmUgcHJpbnRlZCB0byB0aGUgZGVidWcgbG9nLCBjb25maWcgaXMgc2V0LCBhbmQKKwlncmVlbiBsaWdodCBzdGFydHMgdG8gYmxpbmsuIE9wZW4gcG9ydCB3b3JrcywgYW5kIGRhdGEgY2FuIGJlIHNlbnQKKwlhbmQgcmVjZWl2ZWQgYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIFVBUlQuIExvb3BiYWNrIGNvbm5lY3RvcgorCWFuZCBkZWJ1ZyBsb2cgY29uZmlybXMgdGhpcy4KKworIDAuMSAoMDEvMjMvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisJSW5pdGlhbCByZWxlYXNlIHRvIGhlbHAgSU8gTmV0d29ya3MgdHJ5IHRvIHNldCB1cCB0aGVpciB0ZXN0IHN5c3RlbS4KKwlFZGdlcG9ydDQgaXMgcmVjb2duaXplZCwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCwgY29uZmlnIGlzIHNldCBzbworCWRldmljZSBibGlua3MgZ3JlZW4gbGlnaHQgZXZlcnkgMyBzZWMuIFBvcnQgaXMgYm91bmQsIGJ1dCBvcGVuaW5nLAorCWNsb3NpbmcsIGFuZCBzZW5kaW5nIGRhdGEgZG8gbm90IHdvcmsgcHJvcGVybHkuCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCA5NDM4OTA5Li43YjVlOGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtMzk0LDYgKzM5NCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWN0X3UyMzIuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX05PS0lBX0RLVTIKKwl0cmlzdGF0ZSAiVVNCIE5va2lhIERLVTIgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgTm9raWEgREtVMiBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5va2lhX2RrdTIuCisKIGNvbmZpZyBVU0JfU0VSSUFMX1BMMjMwMwogCXRyaXN0YXRlICJVU0IgUHJvbGlmaWMgMjMwMyBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCmluZGV4IDZjN2NkY2MuLjU1ZmQ0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0tMU0kpCQkJKz0ga2w1a3VzYjEwNS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QpCQkrPSBrb2JpbF9zY3Qubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIpCQkrPSBtY3RfdTIzMi5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9OT0tJQV9ES1UyKQkJKz0gbm9raWFfZGt1Mi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUKQkJKz0gb21uaW5ldC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PUFRJT04pCQkJKz0gb3B0aW9uLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMykJCQkrPSBwbDIzMDMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlycHJpbWUuYwppbmRleCA5MjZkNGMyLi4xZjI5ZDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlycHJpbWUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlycHJpbWUuYwpAQCAtMzAsOSArMzAsMTEgQEAKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBhaXJwcmltZV9kZXZpY2UgPSB7Ci0JLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5uYW1lID0JCQkiYWlycHJpbWUiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBhaXJwcmltZV9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJhaXJwcmltZSIsCisJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCmluZGV4IGFiYjFiMmMuLjg0YmMwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTEyMSwxMCArMTIxLDEyIEBACiB9OwogCiAvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIHNlcmlhbCBjb252ZXJ0ZXJzICovCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgYmVsa2luX2RldmljZSA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCSJCZWxraW4gLyBQZXJhY29tIC8gR29IdWJzIFVTQiBTZXJpYWwgQWRhcHRlciIsCi0JLnNob3J0X25hbWUgPQkJImJlbGtpbiIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGJlbGtpbl9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJiZWxraW4iLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJCZWxraW4gLyBQZXJhY29tIC8gR29IdWJzIFVTQiBTZXJpYWwgQWRhcHRlciIsCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2NvbWJpbmVkLAogCS5udW1faW50ZXJydXB0X2luID0JMSwKIAkubnVtX2J1bGtfaW4gPQkJMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYwppbmRleCAyZjYxMmMyLi42NjQxMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jCkBAIC0xOCw3ICsxOCw3IEBACiAKIHN0YXRpYyBpbnQgdXNiX3NlcmlhbF9kZXZpY2VfbWF0Y2ggKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZHJpdmVyOworCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyOwogCWNvbnN0IHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAKIAkvKgpAQCAtNDQsNyArNDQsNyBAQAogCiBzdGF0aWMgaW50IHVzYl9zZXJpYWxfZGV2aWNlX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRyaXZlcjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCWludCByZXR2YWwgPSAwOwogCWludCBtaW5vcjsKQEAgLTU3LDEzICs1NywxMyBAQAogCiAJZHJpdmVyID0gcG9ydC0+c2VyaWFsLT50eXBlOwogCWlmIChkcml2ZXItPnBvcnRfcHJvYmUpIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2ZXItPm93bmVyKSkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRyaXZlci0+ZHJpdmVyLm93bmVyKSkgewogCQkJZGV2X2VycihkZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CiAJCQlyZXR2YWwgPSAtRUlPOwogCQkJZ290byBleGl0OwogCQl9CiAJCXJldHZhbCA9IGRyaXZlci0+cG9ydF9wcm9iZSAocG9ydCk7Ci0JCW1vZHVsZV9wdXQoZHJpdmVyLT5vd25lcik7CisJCW1vZHVsZV9wdXQoZHJpdmVyLT5kcml2ZXIub3duZXIpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBleGl0OwogCX0KQEAgLTcyLDcgKzcyLDcgQEAKIAl0dHlfcmVnaXN0ZXJfZGV2aWNlICh1c2Jfc2VyaWFsX3R0eV9kcml2ZXIsIG1pbm9yLCBkZXYpOwogCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAKIAkJICIlcyBjb252ZXJ0ZXIgbm93IGF0dGFjaGVkIHRvIHR0eVVTQiVkXG4iLAotCQkgZHJpdmVyLT5uYW1lLCBtaW5vcik7CisJCSBkcml2ZXItPmRlc2NyaXB0aW9uLCBtaW5vcik7CiAKIGV4aXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTgwLDcgKzgwLDcgQEAKIAogc3RhdGljIGludCB1c2Jfc2VyaWFsX2RldmljZV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZHJpdmVyOworCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IHJldHZhbCA9IDA7CiAJaW50IG1pbm9yOwpAQCAtOTIsNDMgKzkyLDM4IEBACiAKIAlkcml2ZXIgPSBwb3J0LT5zZXJpYWwtPnR5cGU7CiAJaWYgKGRyaXZlci0+cG9ydF9yZW1vdmUpIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2ZXItPm93bmVyKSkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRyaXZlci0+ZHJpdmVyLm93bmVyKSkgewogCQkJZGV2X2VycihkZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CiAJCQlyZXR2YWwgPSAtRUlPOwogCQkJZ290byBleGl0OwogCQl9CiAJCXJldHZhbCA9IGRyaXZlci0+cG9ydF9yZW1vdmUgKHBvcnQpOwotCQltb2R1bGVfcHV0KGRyaXZlci0+b3duZXIpOworCQltb2R1bGVfcHV0KGRyaXZlci0+ZHJpdmVyLm93bmVyKTsKIAl9CiBleGl0OgogCW1pbm9yID0gcG9ydC0+bnVtYmVyOwogCXR0eV91bnJlZ2lzdGVyX2RldmljZSAodXNiX3NlcmlhbF90dHlfZHJpdmVyLCBtaW5vcik7CiAJZGV2X2luZm8oZGV2LCAiJXMgY29udmVydGVyIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0dHlVU0IlZFxuIiwKLQkJIGRyaXZlci0+bmFtZSwgbWlub3IpOworCQkgZHJpdmVyLT5kZXNjcmlwdGlvbiwgbWlub3IpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpCitpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkcml2ZXIpCiB7CiAJaW50IHJldHZhbDsKIAotCWlmIChkZXZpY2UtPnNob3J0X25hbWUpCi0JCWRldmljZS0+ZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRldmljZS0+c2hvcnRfbmFtZTsKLQllbHNlCi0JCWRldmljZS0+ZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRldmljZS0+bmFtZTsKLQlkZXZpY2UtPmRyaXZlci5idXMgPSAmdXNiX3NlcmlhbF9idXNfdHlwZTsKLQlkZXZpY2UtPmRyaXZlci5wcm9iZSA9IHVzYl9zZXJpYWxfZGV2aWNlX3Byb2JlOwotCWRldmljZS0+ZHJpdmVyLnJlbW92ZSA9IHVzYl9zZXJpYWxfZGV2aWNlX3JlbW92ZTsKLQlkZXZpY2UtPmRyaXZlci5vd25lciA9IGRldmljZS0+b3duZXI7CisJZHJpdmVyLT5kcml2ZXIuYnVzID0gJnVzYl9zZXJpYWxfYnVzX3R5cGU7CisJZHJpdmVyLT5kcml2ZXIucHJvYmUgPSB1c2Jfc2VyaWFsX2RldmljZV9wcm9iZTsKKwlkcml2ZXItPmRyaXZlci5yZW1vdmUgPSB1c2Jfc2VyaWFsX2RldmljZV9yZW1vdmU7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJmRldmljZS0+ZHJpdmVyKTsKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJpdmVyKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLXZvaWQgdXNiX3NlcmlhbF9idXNfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKQordm9pZCB1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyKQogewotCWRyaXZlcl91bnJlZ2lzdGVyICgmZGV2aWNlLT5kcml2ZXIpOworCWRyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXItPmRyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwppbmRleCA5N2M3OGMyLi5jNTMzNGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCkBAIC02NywxNSArNjcsMTcgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNwMjEwMV9kcml2ZXIgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJDUDIxMDEiLAorCS5uYW1lCQk9ICJjcDIxMDEiLAogCS5wcm9iZQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZQk9IGlkX3RhYmxlLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGNwMjEwMV9kZXZpY2UgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gIkNQMjEwMSIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGNwMjEwMV9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0gCSJjcDIxMDEiLAorCX0sCiAJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAogCS5udW1faW50ZXJydXB0X2luCT0gMCwKIAkubnVtX2J1bGtfaW4JCT0gMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwppbmRleCBiNWI0MzEwLi5lNTgxZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCkBAIC04MywxMCArODMsMTIgQEAKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjeWJlcmphY2tfZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIlJlaW5lciBTQ1QgQ3liZXJqYWNrIFVTQiBjYXJkIHJlYWRlciIsCi0JLnNob3J0X25hbWUgPQkJImN5YmVyamFjayIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGN5YmVyamFja19kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJjeWJlcmphY2siLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJSZWluZXIgU0NUIEN5YmVyamFjayBVU0IgY2FyZCByZWFkZXIiLAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbiA9CTEsCiAJLm51bV9idWxrX2luID0JCTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCA5ZWUxYWFmLi5hZjkyOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTE3NiwxMCArMTc2LDEyIEBACiBzdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfZ2V0KHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KTsKIAogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlID0gewotCS5vd25lciA9CQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCQkiRGVMb3JtZSBFYXJ0aG1hdGUgVVNCIiwKLQkuc2hvcnRfbmFtZSA9CQkJImVhcnRobWF0ZSIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGN5cHJlc3NfZWFydGhtYXRlX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCQkiZWFydGhtYXRlIiwKKwl9LAorCS5kZXNjcmlwdGlvbiA9CQkJIkRlTG9ybWUgRWFydGhtYXRlIFVTQiIsCiAJLmlkX3RhYmxlID0JCQlpZF90YWJsZV9lYXJ0aG1hdGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPSAJCTEsCiAJLm51bV9pbnRlcnJ1cHRfb3V0ID0JCTEsCkBAIC0yMDMsMTAgKzIwNSwxMiBAQAogCS53cml0ZV9pbnRfY2FsbGJhY2sgPQkJY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgY3lwcmVzc19oaWRjb21fZGV2aWNlID0gewotCS5vd25lciA9CQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCQkiSElELT5DT00gUlMyMzIgQWRhcHRlciIsCi0JLnNob3J0X25hbWUgPQkJCSJjeXBoaWRjb20iLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjeXByZXNzX2hpZGNvbV9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkJImN5cGhpZGNvbSIsCisJfSwKKwkuZGVzY3JpcHRpb24gPQkJCSJISUQtPkNPTSBSUzIzMiBBZGFwdGVyIiwKIAkuaWRfdGFibGUgPQkJCWlkX3RhYmxlX2N5cGhpZGNvbXJzMjMyLAogCS5udW1faW50ZXJydXB0X2luID0JCTEsCiAJLm51bV9pbnRlcnJ1cHRfb3V0ID0JCTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggYTE5YTQ3Zi4uZGM3NDY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtNTAzLDEwICs1MDMsMTIgQEAKIAogLyogZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgRGlnaSBzZXJpYWwgY29udmVydGVyICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBkaWdpX2FjY2VsZXBvcnRfMl9kZXZpY2UgPSB7Ci0JLm93bmVyID0JCQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJCSJEaWdpIDIgcG9ydCBVU0IgYWRhcHRlciIsCi0JLnNob3J0X25hbWUgPQkJCSJkaWdpXzIiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBkaWdpX2FjY2VsZXBvcnRfMl9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkJImRpZ2lfMiIsCisJfSwKKwkuZGVzY3JpcHRpb24gPQkJCSJEaWdpIDIgcG9ydCBVU0IgYWRhcHRlciIsCiAJLmlkX3RhYmxlID0JCQlpZF90YWJsZV8yLAogCS5udW1faW50ZXJydXB0X2luID0JCTAsCiAJLm51bV9idWxrX2luID0JCQk0LApAQCAtNTMwLDEwICs1MzIsMTIgQEAKIAkuc2h1dGRvd24gPQkJCWRpZ2lfc2h1dGRvd24sCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlID0gewotCS5vd25lciA9CQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCQkiRGlnaSA0IHBvcnQgVVNCIGFkYXB0ZXIiLAotCS5zaG9ydF9uYW1lID0JCQkiZGlnaV80IiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJCSJkaWdpXzQiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCQkiRGlnaSA0IHBvcnQgVVNCIGFkYXB0ZXIiLAogCS5pZF90YWJsZSA9CQkJaWRfdGFibGVfNCwKIAkubnVtX2ludGVycnVwdF9pbiA9CQkwLAogCS5udW1fYnVsa19pbiA9CQkJNSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggOGQ1NjJhYi4uMGIwNTQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTExMiw5ICsxMTIsMTEgQEAKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlbXBlZ19kZXZpY2UgPSB7Ci0JLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5uYW1lID0JCQkiRW1wZWciLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBlbXBlZ19kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJlbXBlZyIsCisJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAogCS5udW1fYnVsa19pbiA9CQkxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA1YTg2MzFjLi42MTIwNGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNDExLDYgKzQxMSw4IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9VTTEwMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9VUjEwMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9BTEM4NTAwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUFlSQU1JRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9GSFoxMDAwUENfUElEKSB9LAogCS8qCiAJICogVGhlc2Ugd2lsbCBwcm9iYWJseSB1c2UgdXNlci1zcGFjZSBkcml2ZXJzLiAgVW5jb21tZW50IHRoZW0gaWYKIAkgKiB5b3UgbmVlZCB0aGVtIG9yIHVzZSB0aGUgdXNlci1zcGVjaWZpZWQgdmVuZG9yL3Byb2R1Y3QgbW9kdWxlCkBAIC00MjgsNyArNDMwLDYgQEAKIAkvKiB7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1QxMTAwX1BJRCkgfSwgKi8KIAkvKiB7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1BDRDIwMF9QSUQpIH0sICovCiAJLyogeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9VTEEyMDBfUElEKSB9LCAqLwotCS8qIHsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRkhaMTAwMFBDX1BJRCkgfSwgKi8KIAkvKiB7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0NTSThfUElEKSB9LCAqLwogCS8qIHsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRU0xMDAwRExfUElEKSB9LCAqLwogCS8qIHsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfUENLMTAwX1BJRCkgfSwgKi8KQEAgLTQ3MSw2ICs0NzIsOSBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NSEFNX1k2X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTUhBTV9ZOF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEVWT0xVVElPTl9WSUQsIEVWT0xVVElPTl9FUjFfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BUlRFTUlTX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQVRJS19BVEsxNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FUSUtfQVRLMTZIUl9QSUQpIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTU1OCwxMCArNTYyLDEyIEBACiBzdGF0aWMgX191MzIgZnRkaV8yMzJibV9iYXVkX2Jhc2VfdG9fZGl2aXNvciAoaW50IGJhdWQsIGludCBiYXNlKTsKIHN0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvciAoaW50IGJhdWQpOwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZnRkaV9zaW9fZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIkZUREkgVVNCIFNlcmlhbCBEZXZpY2UiLAotCS5zaG9ydF9uYW1lID0JCSJmdGRpX3NpbyIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGZ0ZGlfc2lvX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJImZ0ZGlfc2lvIiwKKwl9LAorCS5kZXNjcmlwdGlvbiA9CQkiRlRESSBVU0IgU2VyaWFsIERldmljZSIsCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2NvbWJpbmVkLAogCS5udW1faW50ZXJydXB0X2luID0JMCwKIAkubnVtX2J1bGtfaW4gPQkJMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggMmMzNWQ3NC4uZGRiNjNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTE5OSw2ICsxOTksMTkgQEAKICNkZWZpbmUgRlRESV9QSUVHUk9VUF9QSUQJMHhGMjA4CS8qIFByb2R1Y3QgSWQgKi8KIAogLyoKKyAqIERlZmluaXRpb25zIGZvciBBcnRlbWlzIGFzdHJvbm9taWNhbCBVU0IgYmFzZWQgY2FtZXJhcworICogQ2hlY2sgaXQgYXQgaHR0cDovL3d3dy5hcnRlbWlzY2NkLmNvLnVrLworICovCisjZGVmaW5lIEZURElfQVJURU1JU19QSUQJMHhERjI4CS8qIEFsbCBBcnRlbWlzIENhbWVyYXMgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBBVElLIEluc3RydW1lbnRzIGFzdHJvbm9taWNhbCBVU0IgYmFzZWQgY2FtZXJhcworICogQ2hlY2sgaXQgYXQgaHR0cDovL3d3dy5hdGlrLWluc3RydW1lbnRzLmNvbS8KKyAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZfUElECTB4REYzMAkvKiBBVElLIEFUSy0xNiBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJfUElECTB4REYzMQkvKiBBVElLIEFUSy0xNkhSIENhbWVyYSAqLworCisvKgogICogUHJvdGVnbyBwcm9kdWN0IGlkcwogICovCiAjZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8xCTB4RkM3MAkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCkBAIC0zMjksNiArMzQyLDkgQEAKICNkZWZpbmUgRVZPTFVUSU9OX1ZJRAkJMHhERUVFCS8qIFZlbmRvciBJRCAqLwogI2RlZmluZSBFVk9MVVRJT05fRVIxX1BJRAkweDAzMDAJLyogRVIxIENvbnRyb2wgTW9kdWxlICovCiAKKy8qIFB5cmFtaWQgQ29tcHV0ZXIgR21iSCAqLworI2RlZmluZSBGVERJX1BZUkFNSURfUElECTB4RTZDOAkvKiBQeXJhbWlkIEFwcGxpYW5jZSBEaXNwbGF5ICovCisKIC8qIENvbW1hbmRzICovCiAjZGVmaW5lIEZURElfU0lPX1JFU0VUIAkJMCAvKiBSZXNldCB0aGUgcG9ydCAqLwogI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKaW5kZXggMmVmNjE0ZC4uMzU4MjBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC0xNDY4LDE2ICsxNDY4LDEzIEBACiB9CiAKIAotCi0KLQotCi0KIC8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkICovCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZ2FybWluX2RldmljZSA9IHsKLQkub3duZXIgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5uYW1lICAgICAgICAgICAgICAgID0gIkdhcm1pbiBHUFMgdXNiL3R0eSIsCi0JLnNob3J0X25hbWUgICAgICAgICAgPSAiZ2FybWluX2dwcyIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGdhcm1pbl9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJnYXJtaW5fZ3BzIiwKKwl9LAorCS5kZXNjcmlwdGlvbiA9CQkiR2FybWluIEdQUyB1c2IvdHR5IiwKIAkuaWRfdGFibGUgICAgICAgICAgICA9IGlkX3RhYmxlLAogCS5udW1faW50ZXJydXB0X2luICAgID0gMSwKIAkubnVtX2J1bGtfaW4gICAgICAgICA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCA1ZjdkMzE5Li44OTA5MjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTM2LDEwICszNiwxMSBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGdlbmVyaWNfZGV2aWNlX2lkc1syXTsgLyogSW5pdGlhbGx5IGFsbCB6ZXJvZXMuICovCiAKIC8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgR2VuZXJpYyBTZXJpYWwgQ29udmVydGVyICovCi1zdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIkdlbmVyaWMiLAotCS5zaG9ydF9uYW1lID0JCSJnZW5lcmljIiwKK3N0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiZ2VuZXJpYyIsCisJfSwKIAkuaWRfdGFibGUgPQkJZ2VuZXJpY19kZXZpY2VfaWRzLAogCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCmluZGV4IDY0ZDU1ZmIuLjhlYWRmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwpAQCAtMzgsMTUgKzM4LDE3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBocDQ5Z3BfZHJpdmVyID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5uYW1lID0JCSJIUDRYIiwKKwkubmFtZSA9CQkiaHA0WCIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBocDQ5Z3BfZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIkhQNFgiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBocDQ5Z3BfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiaHA0WCIsCisJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCAwNGJmZTI3Li5kYzRjNDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMjcsMjI1ICsyNyw2IEBACiAgKiBOZXR3b3JrcyB0ZWNobmljYWwgc3VwcG9ydCwgb3IgUGV0ZXIgQmVyZ2VyIDxwYmVyZ2VyQGJyaW1zb24uY29tPiwKICAqIG9yIEFsIEJvcmNoZXJzIDxhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+LgogICoKLSAqIFZlcnNpb24gaGlzdG9yeToKLSAqIAotICogMjAwM18wNF8wMyBhbCBib3JjaGVycwotICogIC0gZml4ZWQgYSBidWcgKHRoYXQgc2hvd3MgdXAgd2l0aCBkb3NlbXUpIHdoZXJlIHRoZSB0dHkgc3RydWN0IGlzCi0gKiAgICB1c2VkIGluIGEgY2FsbGJhY2sgYWZ0ZXIgaXQgaGFzIGJlZW4gZnJlZWQKLSAqCi0gKiAyLjMgMjAwMl8wM18wOCBncmVnIGtyb2FoLWhhcnRtYW4KLSAqCS0gZml4ZWQgYnVnIHdoZW4gbXVsdGlwbGUgZGV2aWNlcyB3ZXJlIGF0dGFjaGVkIGF0IHRoZSBzYW1lIHRpbWUuCi0gKgotICogMi4yIDIwMDFfMTFfMTQgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKgktIGZpeGVkIGJ1ZyBpbiBlZGdlX2Nsb3NlIHRoYXQga2VwdCB0aGUgcG9ydCBmcm9tIGJlaW5nIHVzZWQgbW9yZQotICoJICB0aGFuIG9uY2UuCi0gKgktIGZpeGVkIG1lbW9yeSBsZWFrIG9uIGRldmljZSByZW1vdmFsLgotICoJLSBmaXhlZCBwb3RlbnRpYWwgZG91YmxlIGZyZWUgb2YgbWVtb3J5IHdoZW4gY29tbWFuZCB1cmIgc3VibWl0dGluZwotICoJICBmYWlsZWQuCi0gKgktIG90aGVyIHNtYWxsIGNsZWFudXBzIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkCi0gKgkKLSAqIDIuMSAyMDAxXzA3XzA5IGdyZWcga3JvYWgtaGFydG1hbgotICoJLSBhZGRlZCBzdXBwb3J0IGZvciBUSU9DTUJJUyBhbmQgVElPQ01CSUMuCi0gKgotICogICAgICgwNC8wOC8yMDAxKSBnYgotICoJLSBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgotICoKLSAqIDIuMCAyMDAxXzAzXzA1IGdyZWcga3JvYWgtaGFydG1hbgotICoJLSByZXdvcmtlZCBlbnRpcmUgZHJpdmVyIHRvIGZpdCBwcm9wZXJseSBpbiB3aXRoIHRoZSBvdGhlciB1c2Itc2VyaWFsCi0gKgkgIGRyaXZlcnMuICBPY2Nhc2lvbmFsIG9vcHNlcyBzdGlsbCBoYXBwZW4sIGJ1dCBpdCdzIGEgZ29vZCBzdGFydC4KLSAqCi0gKiAxLjIuMyAoMDIvMjMvMjAwMSkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKgktIGNoYW5nZWQgZGV2aWNlIHRhYmxlIHRvIHdvcmsgcHJvcGVybHkgZm9yIDIuNC54IGZpbmFsIGZvcm1hdC4KLSAqCS0gZml4ZWQgcHJvYmxlbSB3aXRoIGRyb3BwaW5nIGRhdGEgYXQgaGlnaCBkYXRhIHJhdGVzLgotICoKLSAqIDEuMi4yICgxMS8yNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KLSAqCS0gY2xlYW5lZCB1cCBtb3JlIE5UaXNtcy4KLSAqCS0gQWRkZWQgZGV2aWNlIHRhYmxlIGZvciAyLjQuMC10ZXN0MTEKLSAqCi0gKiAxLjIuMSAoMTEvMDgvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKgktIFN0YXJ0ZWQgdG8gY2xlYW4gdXAgTlRpc21zLgotICoJLSBGaXhlZCBwcm9ibGVtIHdpdGggZGV2IGZpZWxkIG9mIHVyYiBmb3Iga2VybmVscyA+PSAyLjQuMC10ZXN0OQotICoKLSAqIDEuMiAoMTAvMTcvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCi0gKiAJUmVtb3ZlIGFsbCBFUElDIGNvZGUgYW5kIEdQTCBzb3VyY2UKLSAqICBGaXggUkVMRVZBTlRfSUZMQUcgbWFjcm8gdG8gaW5jbHVkZSBmbG93IGNvbnRyb2wgCi0gKiAgY2hhbmdlcyBwb3J0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KLSAqICBGaXggcmVkZWZpbml0aW9uIG9mIFNFUklBTF9NQUdJQwotICogIENoYW5nZSBhbGwgdGltZW91dCB2YWx1ZXMgdG8gNSBzZWNvbmRzCi0gKiAgVHJpZWQgdG8gZml4IHRoZSBVSENJIG11bHRpcGxlIHVyYiBzdWJtaXNzaW9uLCBidXQgZmFpbGVkIG1pc2VyYWJseS4KLSAqICBpdCBzZWVtcyB0byB3b3JrIGZpbmUgd2l0aCBPSENJLgotICogICggR3JlZyB0YWtlIGEgbG9vayBhdCB0aGUgI2lmIDAgYXQgZW5kIG9mIFdyaXRlQ21kVXNiKCkgd2UgbXVzdCAKLSAqICAgIGZpbmQgYSB3YXkgdG8gd29yayBhcm91bnQgdGhpcyBVSENJIGJ1ZyApCi0gKgotICogMS4xICgxMC8xMS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKLSAqICBGaXggWE9OL1hPRkYgZmxvdyBjb250cm9sIHRvIHN1cHBvcnQgYm90aCBJWE9OIGFuZCBJWE9GRgotICoKLSAqIDAuOS4yNyAoMDYvMzAvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCi0gKiAgQWRkZWQgdHJhbnNtaXQgcXVldWUgYW5kIG5vdyBhbGxvY2F0ZSB1cmIgZm9yIGNvbW1hbmQgd3JpdGVzLgotICoKLSAqIDAuOS4yNiAoMDYvMjkvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCi0gKiAgQWRkIHN1cHBvcnQgZm9yIDgwMjUxIGJhc2VkIGVkZ2Vwb3J0Ci0gKgotICogMC45LjI1ICgwNi8yNy8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKLSAqICBEbyBub3QgY2xvc2UgdGhlIHBvcnQgaWYgaXQgaGFzIG11bHRpcGxlIG9wZW5zLgotICoKLSAqIDAuOS4yNCAoMDUvMjYvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCi0gKiAgQWRkIElPQ1RMcyB0byBzdXBwb3J0IFJYVFggYW5kIEpBVkEgUE9TIAotICogIGFuZCBmaXJzdCBjdXQgYXQgcnVubmluZyBCbGFja0JveCBEZW1vCi0gKgotICogMC45LjIzICgwNS8yNC8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKLSAqICBBZGQgSU9DVExzIHRvIHN1cHBvcnQgUlhUWCBhbmQgSkFWQSBQT1MKLSAqCi0gKiAwLjkuMjIgKDA1LzIzLzIwMDApIERhdmlkIElhY292ZWxsaQotICogIGZpeGVkIGJ1ZyBpbiBlbnVtZXJhdGlvbi4gIElmIGVwY29uZmlnIHR1cm5zIG9uIG1hcHBpbmcgYnkKLSAqICBwYXRoIGFmdGVyIGEgZGV2aWNlIGlzIGFscmVhZHkgcGx1Z2dlZCBpbiwgd2Ugbm93IHVwZGF0ZQotICogIHRoZSBtYXBwaW5nIGNvcnJlY3RseQotICoKLSAqIDAuOS4yMSAoMDUvMTYvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCi0gKiAgQWRkZWQgQmxvY2tVbnRpbENoYXNlUmVzcCgpIHRvIGFsc28gd2FpdCBmb3IgdHhjcmVkaXRzCi0gKiAgVXBkYXRlZCB0aGUgd2F5IHdlIGFsbG9jYXRlIGFuZCBoYW5kbGUgd3JpdGUgVVJCcyAKLSAqCUFkZCBkZWJ1ZyBjb2RlIHRvIGR1bXAgYnVmZmVycwotICoKLSAqIDAuOS4yMCAoMDUvMDEvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCi0gKgljaGFuZ2UgZHJpdmVyIHRvIHVzZSB1c2IvdHRzLwotICoKLSAqIDAuOS4xOSAoMDUvMDEvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCi0gKiAgVXBkYXRlIGNvZGUgdG8gY29tcGlsZSBpZiBERUJVRyBpcyBvZmYKLSAqCi0gKiAwLjkuMTggKDA0LzI4LzIwMDApIERhdmlkIElhY292ZWxsaQotICogIGNsZWFudXAgYW5kIHRlc3QgdHR5X3JlZ2lzdGVyIHdpdGggZGV2ZnMKLSAqCi0gKiAwLjkuMTcgKDA0LzI3LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgotICogCWNoYW5nZWQgdHR5X3JlZ2lzdGVyIGFyb3VuZCB0byBiZSBsaWtlIHRoZSB3YXkgaXQKLSAqIAl3YXMgYmVmb3JlLCBidXQgbm93IGl0IHdvcmtzIHByb3Blcmx5IHdpdGggZGV2ZnMuCi0gKgotICogMC45LjE2ICgwNC8yNi8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKLSAqICBGaXhlZCBidWcgaW4gR2V0UHJvZHVjdEluZm8oKQotICoKLSAqIDAuOS4xNSAoMDQvMjUvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCi0gKglVcGRhdGVkIGVudW1lcmF0aW9uCi0gKgotICogMC45LjE0ICgwNC8yNC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKLSAqICBSZW1vdmVkIGFsbCBjb25maWcvc3RhdHVzIElPQ1RMUyBhbmQgCi0gKiAgY29udmVydGVkIHRvIHVzaW5nIC9wcm9jL2VkZ2Vwb3J0Ci0gKiAgc3RpbGwgcGxheWluZyB3aXRoIGRldmZzCi0gKgotICogMC45LjEzICgwNC8yNC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKLSAqICBSZW1vdmVkIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdHR5VVNCMAotICogIEFkZGVkIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gdXNpbmcgL3Byb2QvZWRnZXBvcnQKLSAqICBmaXJzdCBhdHRlbXB0IGF0IHVzaW5nIGRldmZzIChub3Qgd29ya2luZyB5ZXQhKQotICogIEFkZGVkIElPQ1RMIHRvIEdldFByb2R1Y3RJbmZvKCkKLSAqICBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gYmF1ZCByYXRlcwotICoJQWRkIHN1cHBvcnQgZm9yIHJhbmRvbSBwb3J0IG51bWJlcnMKLSAqCi0gKiAwLjkuMTIgKDA0LzE4LzIwMDApIGRhdmlkIGlhY292ZWxsaQotICoJYWRkZWQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIElPQ1RMcwotICogIHVzZSB0dHlVU0IwIGZvciBjb25maWd1cmF0aW9uCi0gKgotICogMC45LjExICgwNC8xNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KLSAqCWZpeGVkIG1vZHVsZSBpbml0aWFsaXphdGlvbiByYWNlIGNvbmRpdGlvbnMuCi0gKgltYWRlIGFsbCB1cmJzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KLSAqCW1hZGUgZHJpdmVyIGRldmZzIGNvbXBhdGlibGUuIG5vdyBpdCBvbmx5IHJlZ2lzdGVycyB0aGUgdHR5IGRldmljZQotICoJd2hlbiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IHBsdWdnZWQgaW4uCi0gKgotICogMC45LjEwICgwNC8xMy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KLSAqCWFkZGVkIHByb2MgaW50ZXJmYWNlIGZyYW1ld29yay4KLSAqCi0gKiAwLjkuOSAoMDQvMTMvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCi0gKglhZGRlZCBlbnVtZXJhdGlvbiBjb2RlIGFuZCBpb2N0bHMgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UKLSAqCi0gKiAwLjkuOCAoMDQvMTIvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCi0gKiAgQ2hhbmdlIGludGVycnVwdCByZWFkIHN0YXJ0IHdoZW4gZGV2aWNlIGlzIHBsdWdnZWQgaW4KLSAqICBhbmQgc3RvcCB3aGVuIGRldmljZSBpcyByZW1vdmVkCi0gKglwcm9jZXNzIGludGVycnVwdCByZWFkcyB3aGVuIGFsbCBwb3J0cyBhcmUgY2xvc2VkIAotICogIChrZWVwIHZhbHVlIG9mIHJ4Qnl0ZXNBdmFpbCBjb25zaXN0ZW50IHdpdGggdGhlIGVkZ2Vwb3J0KQotICogIHNldCB0aGUgVVNCX0JVTEtfUVVFVUUgZmxhZyBzbyB0aGF0IHdlIGNhbiBzaG92ZSBhIGJ1bmNoIAotICogIG9mIHVyYnMgYXQgb25jZSBkb3duIHRoZSBwaXBlIAotICoKLSAqIDAuOS43ICgwNC8xMC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKLSAqIAlzdGFydCB0byBhZGQgZW51bWVyYXRpb24gY29kZS4KLSAqICBnZW5lcmF0ZSBzZXJpYWwgbnVtYmVyIGZvciBlcGljIGRldmljZXMKLSAqICBhZGQgc3VwcG9ydCBmb3Iga2RiCi0gKgotICogMC45LjYgKDAzLzMwLzIwMDApIGRhdmlkIGlhY292ZWxsaQotICogIGFkZCBJT0NUTCB0byBnZXQgc3RyaW5nLCBtYW51ZmFjdHVyZSwgYW5kIGJvb3QgZGVzY3JpcHRvcnMKLSAqCi0gKiAwLjkuNSAoMDMvMTQvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKgltb3JlIGVycm9yIGNoZWNraW5nIGFkZGVkIHRvIFNlcmlhbE9wZW4gdG8gdHJ5IHRvIGZpeCBVSENJIG9wZW4gcHJvYmxlbQotICoKLSAqIDAuOS40ICgwMy8wOS8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KLSAqCWFkZGVkIG1vcmUgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIG9vcHMgd2hlbiBkYXRhIGlzIGhhbmdpbmcKLSAqCWFyb3VuZCBhbmQgdHR5IGlzIGFicnVwdGx5IGNsb3NlZC4KLSAqCi0gKiAwLjkuMyAoMDMvMDkvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCi0gKglBZGQgZXBpYyBzdXBwb3J0IGZvciB4b24veG9mZiBjaGFycwotICoJcGxheSB3aXRoIHBlcmZvcm1hbmNlCi0gKgotICogMC45LjIgKDAzLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgotICoJY2hhbmdlZCBtb3N0ICJpbmZvIiBjYWxscyB0byAiZGJnIgotICoJaW1wbGVtZW50ZWQgZmxvdyBjb250cm9sIHByb3Blcmx5IGluIHRoZSB0ZXJtaW9zIGNhbGwKLSAqCi0gKiAwLjkuMSAoMDMvMDgvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCi0gKglhZGRlZCBFUElDIHN1cHBvcnQKLSAqCWVuYWJsZWQgYm9vdGxvYWRlciB1cGRhdGUKLSAqCi0gKiAwLjkgKDAzLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgotICoJUmVsZWFzZSB0byBJTyBuZXR3b3Jrcy4KLSAqCUludGVncmF0ZWQgY2hhbmdlcyB0aGF0IERhdmlkIG1hZGUKLSAqICBtYWRlIGdldHRpbmcgdXJicyBmb3Igd3JpdGluZyBTTVAgc2FmZQotICoKLSAqIDAuOCAoMDMvMDcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgotICoJRml4ZWQgcHJvYmxlbXMgdGhhdCB3ZXJlIHNlZW4gaW4gY29kZSBieSBEYXZpZC4KLSAqICBOb3cgYm90aCBFZGdlcG9ydC80IGFuZCBFZGdlcG9ydC8yIHdvcmtzIHByb3Blcmx5LgotICogIENoYW5nZWQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIHRvIHVzZSBwb3J0IGluc3RlYWQgb2Ygc2VyaWFsLgotICoKLSAqIDAuNyAoMDIvMjcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKglNaWxlc3RvbmUgMyByZWxlYXNlLgotICoJUmVsZWFzZSB0byBJTyBOZXR3b3JrcwotICoJaW9jdGwgZm9yIHdhaXRpbmcgb24gbGluZSBjaGFuZ2UgaW1wbGVtZW50ZWQuCi0gKglpb2N0bCBmb3IgZ2V0dGluZyBzdGF0aXN0aWNzIGltcGxlbWVudGVkLgotICoJbXVsdGlwb3J0IHN1cHBvcnQgd29ya2luZy4KLSAqCWxzciBhbmQgbXNyIHJlZ2lzdGVycyBhcmUgbm93IGhhbmRsZWQgcHJvcGVybHkuCi0gKgljaGFuZ2UgYnJlYWsgbm93IGhvb2tlZCB1cCBhbmQgd29ya2luZy4KLSAqCXN1cHBvcnQgZm9yIGFsbCBrbm93biBFZGdlcG9ydCBkZXZpY2VzLgotICoKLSAqIDAuNiAoMDIvMjIvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgotICoJQ0hBU0UgaXMgaW1wbGVtZW50ZWQgY29ycmVjdGx5IHdoZW4gcG9ydCBpcyBjbG9zZWQuCi0gKglTZXJpYWxPcGVuIG5vdyBibG9ja3MgY29ycmVjdGx5IHVudGlsIHBvcnQgaXMgZnVsbHkgb3BlbmVkLgotICoKLSAqIDAuNSAoMDIvMjAvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgotICoJS25vd24gcHJvYmxlbXM6Ci0gKgkJbW9kZW0gc3RhdHVzIHJlZ2lzdGVyIGNoYW5nZXMgYXJlIG5vdCBzZW50IG9uIHRvIHRoZSB1c2VyCi0gKgkJQ0hBU0UgaXMgbm90IGltcGxlbWVudGVkIHdoZW4gdGhlIHBvcnQgaXMgY2xvc2VkLgotICoKLSAqIDAuNCAoMDIvMTYvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCi0gKglTZWNvbmQgY3V0IGF0IHRoZSBDZUJpdCBkZW1vLgotICoJRG9lc24ndCBsZWFrIG1lbW9yeSBvbiBldmVyeSB3cml0ZSB0byB0aGUgcG9ydAotICoJU3RpbGwgc21hbGwgbGVha3Mgb24gc3RhcnR1cC4KLSAqCUFkZGVkIHN1cHBvcnQgZm9yIEVkZ2Vwb3J0LzIgYW5kIEVkZ2Vwb3J0LzgKLSAqCi0gKiAwLjMgKDAyLzE1LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgotICoJQ2VCaXQgZGVtbyByZWxlYXNlLgotICoJRm9yY2UgdGhlIGxpbmUgc2V0dGluZ3MgdG8gNDgwMCwgOCwgMSwgZSBmb3IgdGhlIGRlbW8uCi0gKglXYXJuaW5nISBUaGlzIHZlcnNpb24gbGVha3MgbWVtb3J5IGxpa2UgY3JhenkhCi0gKgotICogMC4yICgwMS8zMC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KLSAqCU1pbGVzdG9uZSAxIHJlbGVhc2UuCi0gKglEZXZpY2UgaXMgZm91bmQgYnkgVVNCIHN1YnN5c3RlbSwgZW51bWVyYXRlZCwgZmltd2FyZSBpcyBkb3dubG9hZGVkCi0gKglhbmQgdGhlIGRlc2NyaXB0b3JzIGFyZSBwcmludGVkIHRvIHRoZSBkZWJ1ZyBsb2csIGNvbmZpZyBpcyBzZXQsIGFuZAotICoJZ3JlZW4gbGlnaHQgc3RhcnRzIHRvIGJsaW5rLiBPcGVuIHBvcnQgd29ya3MsIGFuZCBkYXRhIGNhbiBiZSBzZW50Ci0gKglhbmQgcmVjZWl2ZWQgYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIFVBUlQuIExvb3BiYWNrIGNvbm5lY3RvcgotICoJYW5kIGRlYnVnIGxvZyBjb25maXJtcyB0aGlzLgotICogCi0gKiAwLjEgKDAxLzIzLzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgotICoJSW5pdGlhbCByZWxlYXNlIHRvIGhlbHAgSU8gTmV0d29ya3MgdHJ5IHRvIHNldCB1cCB0aGVpciB0ZXN0IHN5c3RlbS4gCi0gKglFZGdlcG9ydDQgaXMgcmVjb2duaXplZCwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCwgY29uZmlnIGlzIHNldCBzbyAKLSAqCWRldmljZSBibGlua3MgZ3JlZW4gbGlnaHQgZXZlcnkgMyBzZWMuIFBvcnQgaXMgYm91bmQsIGJ1dCBvcGVuaW5nLAotICoJY2xvc2luZywgYW5kIHNlbmRpbmcgZGF0YSBkbyBub3Qgd29yayBwcm9wZXJseS4KLSAqIAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaAppbmRleCBlN2ZmZTAyLi5mYWQ1NjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCkBAIC03NSwxMCArNzUsMTIgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlZGdlcG9ydF8ycG9ydF9kZXZpY2UgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gIkVkZ2Vwb3J0IDIgcG9ydCBhZGFwdGVyIiwKLQkuc2hvcnRfbmFtZQkJPSAiZWRnZXBvcnRfMiIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGVkZ2Vwb3J0XzJwb3J0X2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCQk9ICJlZGdlcG9ydF8yIiwKKwl9LAorCS5kZXNjcmlwdGlvbgkJPSAiRWRnZXBvcnQgMiBwb3J0IGFkYXB0ZXIiLAogCS5pZF90YWJsZQkJPSBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbgk9IDEsCiAJLm51bV9idWxrX2luCQk9IDEsCkBAIC0xMDMsMTAgKzEwNSwxMiBAQAogCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGVkZ2Vwb3J0XzRwb3J0X2RldmljZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSAiRWRnZXBvcnQgNCBwb3J0IGFkYXB0ZXIiLAotCS5zaG9ydF9uYW1lCQk9ICJlZGdlcG9ydF80IiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgZWRnZXBvcnRfNHBvcnRfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gImVkZ2Vwb3J0XzQiLAorCX0sCisJLmRlc2NyaXB0aW9uCQk9ICJFZGdlcG9ydCA0IHBvcnQgYWRhcHRlciIsCiAJLmlkX3RhYmxlCQk9IGVkZ2Vwb3J0XzRwb3J0X2lkX3RhYmxlLAogCS5udW1faW50ZXJydXB0X2luCT0gMSwKIAkubnVtX2J1bGtfaW4JCT0gMSwKQEAgLTEzMSwxMCArMTM1LDEyIEBACiAJLndyaXRlX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfOHBvcnRfZGV2aWNlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9ICJFZGdlcG9ydCA4IHBvcnQgYWRhcHRlciIsCi0JLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0XzgiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBlZGdlcG9ydF84cG9ydF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubmFtZQkJPSAiZWRnZXBvcnRfOCIsCisJfSwKKwkuZGVzY3JpcHRpb24JCT0gIkVkZ2Vwb3J0IDggcG9ydCBhZGFwdGVyIiwKIAkuaWRfdGFibGUJCT0gZWRnZXBvcnRfOHBvcnRfaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4JPSAxLAogCS5udW1fYnVsa19pbgkJPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwppbmRleCBlYmY5OTY3Li44MzJiNmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpAQCAtMjk4MiwxMCArMjk4MiwxMiBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlZGdlcG9ydF8xcG9ydF9kZXZpY2UgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gIkVkZ2Vwb3J0IFRJIDEgcG9ydCBhZGFwdGVyIiwKLQkuc2hvcnRfbmFtZQkJPSAiZWRnZXBvcnRfdGlfMSIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGVkZ2Vwb3J0XzFwb3J0X2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCQk9ICJlZGdlcG9ydF90aV8xIiwKKwl9LAorCS5kZXNjcmlwdGlvbgkJPSAiRWRnZXBvcnQgVEkgMSBwb3J0IGFkYXB0ZXIiLAogCS5pZF90YWJsZQkJPSBlZGdlcG9ydF8xcG9ydF9pZF90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbgk9IDEsCiAJLm51bV9idWxrX2luCQk9IDEsCkBAIC0zMDEwLDEwICszMDEyLDEyIEBACiAJLndyaXRlX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfb3V0X2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGVkZ2Vwb3J0XzJwb3J0X2RldmljZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSAiRWRnZXBvcnQgVEkgMiBwb3J0IGFkYXB0ZXIiLAotCS5zaG9ydF9uYW1lCQk9ICJlZGdlcG9ydF90aV8yIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgZWRnZXBvcnRfMnBvcnRfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gImVkZ2Vwb3J0X3RpXzIiLAorCX0sCisJLmRlc2NyaXB0aW9uCQk9ICJFZGdlcG9ydCBUSSAyIHBvcnQgYWRhcHRlciIsCiAJLmlkX3RhYmxlCQk9IGVkZ2Vwb3J0XzJwb3J0X2lkX3RhYmxlLAogCS5udW1faW50ZXJydXB0X2luCT0gMSwKIAkubnVtX2J1bGtfaW4JCT0gMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IGMwNWMyYTIuLmQ1ZDA2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtOTIsMjQgKzkyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcGFxX2lkX3RhYmxlIFtdID0gewogCS8qIFRoZSBmaXJzdCBlbnRyeSBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW5zbW9kLXNwZWNpZmllZCBkZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMDMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNjAxKSB9LCAvKiBBc2tleSBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NSkgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY1ICovCi0JeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY2KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjYgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjcpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NyAqLwotCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMSkgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMSAqLwotCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMikgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMiAqLwotCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMykgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMyAqLwotCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAwMykgfSwgLyogQ29tcGFxIGlQQVEgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMzIpIH0sIC8qIENvbXBhcSBpUEFRIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAxKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDIpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMykgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA0KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDUpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA3KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDgpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDEwNCwgMHgwMEJFKSB9LCAvKiBTb2NrZXQgVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDEwMTYpIH0sIC8qIEhQIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjExICovCiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjEyICovCkBAIC0xMjUsNyArMTA4LDEzIEBACiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUwICovCiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUxICovCiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUyICovCi0JeyBVU0JfREVWSUNFKDB4MDk0QiwgMHgwMDAxKSB9LCAvKiBMaW5rdXAgU3lzdGVtcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENSkgfSwgLyogTkVDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ2KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDcpIH0sIC8qIE5FQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0MDksIDB4ODAyNCkgfSwgLyogTkVDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDNFLCAweDlDMDEpIH0sIC8qIExHRSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDBDRSkgfSwgLyogTWljcm9zb2Z0IFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwogCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCkBAIC0yNTEsMTcgKzI0MCw4MSBAQAogCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwogCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwogCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwotCXsgVVNCX0RFVklDRSgweDA5NjEsIDB4MDAxMCkgfSwgLyogUG9ydGF0ZWMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHg1RTA0LCAweENFMDApIH0sIC8qIFNBR0VNIFdpcmVsZXNzIEFzc2lzdGFudCAqLwotCXsgVVNCX0RFVklDRSgweDAxMDQsIDB4MDBCRSkgfSwgLyogU29ja2V0IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAzMikgfSwgLyogQ29tcGFxIGlQQVEgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEE0LCAweDAwMTQpIH0sIC8qIEhpdGFjaGkgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDEpIH0sIC8qIFVTQiBTeW5jIDAzMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDIpIH0sIC8qIFVTQiBTeW5jIDAzMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDMpIH0sIC8qIFVTQiBTeW5jIDAzMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEM1LCAweDEwNTgpIH0sIC8qIEZVSklUU1UgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEM1LCAweDEwNzkpIH0sIC8qIEZVSklUU1UgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNERBLCAweDI1MDApIH0sIC8qIFBhbmFzb25pYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMSkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMikgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMykgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwNCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjEzKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTUpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE5KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MUIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYyRSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjMwKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAxMSkgfSwgLyogSlZDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRGMSwgMHgzMDEyKSB9LCAvKiBKVkMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzEpIH0sIC8qIGMxMCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzIpIH0sIC8qIGMyMCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTEpIH0sIC8qIEFjZXIgbjEwIEhhbmRoZWxkIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUyKSB9LCAvKiBBY2VyIG4yMCBIYW5kaGVsZCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMykgfSwgLyogQWNlciBuMzAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTM2LCAweDAxQTApIH0sIC8qIEhIUCBQRFQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDBFRDkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM1ICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI3KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNiAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyOSkgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkIpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM4ICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJFKSB9LCAvKiBWaWV3U29uaWMgUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIxKSB9LCAvKiBWaWV3U29uaWMgQ29tbXVuaWNhdG9yIFBvY2tldCBQQyAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMikgfSwgLyogVmlld1NvbmljIFNtYXJ0cGhvbmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjMpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgVjMwICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAwKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDIpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDMpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDQpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDUpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDYpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDYgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDcpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDgpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDkpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMEEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMEEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjdFLCAweDEwMDEpIH0sIC8qIEludGVybWVjIE1vYmlsZSBDb21wdXRlciAqLworCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMSkgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMSAqLworCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMikgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMykgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMyAqLwogCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwMCkgfSwgLyogVE9TSElCQSBVU0IgU3luYyAwNzAwICovCiAJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA1KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzEwICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA2KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNzQwICovCiAJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA3KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzMwIFNlcmllcyAqLwogCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOCkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTM1MKBTZXJpZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDYpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NDAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDkpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NTAgU2VyaWVzICovCiAJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzBBKSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNDAwIFNlcmllcyAqLwogCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwQikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTgwMCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTRCLCAweDAwMDEpIH0sIC8qIExpbmt1cCBTeXN0ZW1zIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY1KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjYpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NiAqLworCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NykgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY3ICovCisJeyBVU0JfREVWSUNFKDB4MDk2MSwgMHgwMDEwKSB9LCAvKiBQb3J0YXRlYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA5OUUsIDB4MDA1MikgfSwgLyogVHJpbWJsZSBHZW9FeHBsb3JlciAqLworCXsgVVNCX0RFVklDRSgweDA5OUUsIDB4NDAwMCkgfSwgLyogVERTIERhdGEgQ29sbGVjdG9yICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAxKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjBGKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwMENFKSB9LCAvKiBIVEMgVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwpAQCAtNDIyLDExNiArNDc1LDY3IEBACiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDYpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENykgfSwgLyogTkVDIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI0KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDgwMjUpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0QTQsIDB4MDAxNCkgfSwgLyogSGl0YWNoaSBVU0IgU3luYyAqLwogCXsgVVNCX0RFVklDRSgweDBCRjgsIDB4MTAwMSkgfSwgLyogRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDBGOTgsIDB4MDIwMSkgfSwgLyogQ3liZXJiYW5rIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUxKSB9LCAvKiBBY2VyIG4xMCBIYW5kaGVsZCBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMykgfSwgLyogQWNlciBuMzAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTIpIH0sIC8qIEFjZXIgbjIwIEhhbmRoZWxkIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMxKSB9LCAvKiBjMTAgU2VyaWVzICovCi0JeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMyKSB9LCAvKiBjMjAgU2VyaWVzICovCi0JeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjBGKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAxKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MEM4RSwgMHg2MDAwKSB9LCAvKiBDZXNzY29tIEx1eGlhbiBTZXJpZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDEpIH0sIC8qIFVTQiBTeW5jIDAzMDEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDIpIH0sIC8qIFVTQiBTeW5jIDAzMDIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDMpIH0sIC8qIFVTQiBTeW5jIDAzMDMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAzMDApIH0sIC8qIEUtVEVOIFAzWFggUG9ja2V0IFBDICovCi0JeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNTAwKSB9LCAvKiBFLVRFTiBQNVhYIFBvY2tldCBQQyAqLwotCXsgVVNCX0RFVklDRSgweDEwNjYsIDB4MDYwMCkgfSwgLyogRS1URU4gUDZYWCBQb2NrZXQgUEMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA3MDApIH0sIC8qIEUtVEVOIFA3WFggUG9ja2V0IFBDICovCi0JeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwMENFKSB9LCAvKiBFLVRFTiBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDU4KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDc5KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDY3RSwgMHgxMDAxKSB9LCAvKiBJbnRlcm1lYyBNb2JpbGUgQ29tcHV0ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNGYxLCAweDMwMTEpIH0sIC8qIEpWQyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RjEsIDB4MzAxMikgfSwgLyogSlZDIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MzcwOCwgMHgyMENFKSB9LCAvKiBMZWdlbmQgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgzNzA4LCAweDIxQ0UpIH0sIC8qIExlbm92byBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0M0UsIDB4OUMwMSkgfSwgLyogTEdFIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDREQSwgMHgyNTAwKSB9LCAvKiBQYW5hc29uaWMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBCMUMpIH0sIC8qIEdlbmVyaWMgUFBDIFN0cm9uZ0FSTSAqLwotCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEUzQSkgfSwgLyogR2VuZXJpYyBQUEMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGM0EpIH0sIC8qIEdlbmVyaWMgU21hcnRQaG9uZSBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEYxQykgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTMyNikgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MzMyNikgfSwgLyogTUVESU9OIFdpbm9kd3MgTW9ibGUgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDAzMjYpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIDMzOCAqLwotCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDQyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCi0JeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMTFDKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBQUEMgU3Ryb25nQVJNICovCi0JeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBTbWFydFBob25lIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNDNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDcxQykgfSwgLyogTWlUQUMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jIDUyOCAqLwotCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MjMyNikgfSwgLyogVm9iaXMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDE5MUMpIH0sIC8qIFlBS1VNTyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDIxMCkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTEpIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDAwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDQxMCkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwQ0FELCAweDkwMDEpIH0sIC8qIE1vdG9yb2xhIFBvd2VyUGFkIFBvY2tldCBQQ6BEZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQzQ0LCAweDAzQTIpIH0sIC8qIE1vdG9yb2xhIGlERU4gU21hcnRwaG9uZSAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjEzKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTUpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE5KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MUIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMSkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMikgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMykgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwNCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYyRSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjMwKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwotCXsgVVNCX0RFVklDRSgweDQ1MDUsIDB4MDAxMCkgfSwgLyogU21hcnRwaG9uZSAqLwotCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAxKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAxICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAyKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAyICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAzKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAzICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA0KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA0ICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA1KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA1ICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA2KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA2ICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA3KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA3ICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA4KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA4ICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA5KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA5ICovCi0JeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDBBKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDBBICovCi0JeyBVU0JfREVWSUNFKDB4MTE4MiwgMHgxMzg4KSB9LCAvKiBWRVMgVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDBFRDkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM1ICovCi0JeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI3KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNiAqLwotCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyOSkgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkIpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM4ICovCi0JeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJFKSB9LCAvKiBWaWV3U29uaWMgUG9ja2V0IFBDICovCi0JeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIxKSB9LCAvKiBWaWV3U29uaWMgQ29tbXVuaWNhdG9yIFBvY2tldCBQQyAqLwotCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMikgfSwgLyogVmlld1NvbmljIFNtYXJ0cGhvbmUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjMpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgVjMwICovCi0JeyBVU0JfREVWSUNFKDB4MDUzNiwgMHgwMUEwKSB9LCAvKiBISFAgUERUICovCi0JeyBVU0JfREVWSUNFKDB4MDk5RSwgMHgwMDUyKSB9LCAvKiBUcmltYmxlIEdlb0V4cGxvcmVyICovCi0JeyBVU0JfREVWSUNFKDB4MDk5RSwgMHg0MDAwKSB9LCAvKiBURFMgRGF0YSBDb2xsZWN0b3IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQzhFLCAweDYwMDApIH0sIC8qIENlc3Njb20gTHV4aWFuIFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDBDQUQsIDB4OTAwMSkgfSwgLyogTW90b3JvbGEgUG93ZXJQYWQgUG9ja2V0IFBDoERldmljZSAqLworCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEY5OCwgMHgwMjAxKSB9LCAvKiBDeWJlcmJhbmsgVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDEpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDIpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDMpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDQwMDEpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMUQ5LCAweDEwMDMpIH0sIC8qIFJ1Z2dlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDEwNjYsIDB4MDBDRSkgfSwgLyogRS1URU4gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAzMDApIH0sIC8qIEUtVEVOIFAzWFggUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNTAwKSB9LCAvKiBFLVRFTiBQNVhYIFBvY2tldCBQQyAqLworCXsgVVNCX0RFVklDRSgweDEwNjYsIDB4MDYwMCkgfSwgLyogRS1URU4gUDZYWCBQb2NrZXQgUEMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA3MDApIH0sIC8qIEUtVEVOIFA3WFggUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MTExNCwgMHgwMDAxKSB9LCAvKiBQc2lvbiBUZWtsb2dpeCBTeW5jIDc1M3ggKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTE0LCAweDAwMDQpIH0sIC8qIFBzaW9uIFRla2xvZ2l4IFN5bmMgbmV0Qm9va1BybyAqLworCXsgVVNCX0RFVklDRSgweDExMTQsIDB4MDAwNikgfSwgLyogUHNpb24gVGVrbG9naXggU3luYyA3NTI1ICovCisJeyBVU0JfREVWSUNFKDB4MTE4MiwgMHgxMzg4KSB9LCAvKiBWRVMgVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMUQ5LCAweDEwMDIpIH0sIC8qIFJ1Z2dlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMykgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MTIzMSwgMHhDRTAxKSB9LCAvKiBVU0IgU3luYyAwMyAqLworCXsgVVNCX0RFVklDRSgweDEyMzEsIDB4Q0UwMikgfSwgLyogVVNCIFN5bmMgMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA2MDEpIH0sIC8qIEFza2V5IFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjA0KSB9LCAvKiBNb3Rvcm9sYSBNUHgyMDAgU21hcnRwaG9uZSAqLwogCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIxNCkgfSwgLyogTW90b3JvbGEgTVBjIEdTTSAqLwogCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIyNCkgfSwgLyogTW90b3JvbGEgTVB4MjIwIFNtYXJ0cGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMzQpIH0sIC8qIE1vdG9yb2xhIE1QYyBDRE1BICovCiAJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjQ0KSB9LCAvKiBNb3Rvcm9sYSBNUHgxMDAgU21hcnRwaG9uZSAqLwotCXsgVVNCX0RFVklDRSgweDEyMzEsIDB4Q0UwMSkgfSwgLyogVVNCIFN5bmMgMDMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDIpIH0sIC8qIFVTQiBTeW5jIDAzICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMTFDKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBQUEMgU3Ryb25nQVJNICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMzI2KSB9LCAvKiBNaW8gRGlnaVdhbGtlciAzMzggKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA0MjYpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIDMzOCAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDQzQSkgfSwgLyogTWlvIERpZ2lXYWxrZXIgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jIDUyOCAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDUzQSkgfSwgLyogTWlvIERpZ2lXYWxrZXIgU21hcnRQaG9uZSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDcxQykgfSwgLyogTWlUQUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBCMUMpIH0sIC8qIEdlbmVyaWMgUFBDIFN0cm9uZ0FSTSAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEUzQSkgfSwgLyogR2VuZXJpYyBQUEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGMUMpIH0sIC8qIEl0YXV0ZWMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGM0EpIH0sIC8qIEdlbmVyaWMgU21hcnRQaG9uZSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTMyNikgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTkxQykgfSwgLyogWUFLVU1PIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgyMzI2KSB9LCAvKiBWb2JpcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MzMyNikgfSwgLyogTUVESU9OIFdpbm9kd3MgTW9ibGUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzNzA4LCAweDIwQ0UpIH0sIC8qIExlZ2VuZCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDM3MDgsIDB4MjFDRSkgfSwgLyogTGVub3ZvIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwMjEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDIxMSkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MDApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAyKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDMpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNCkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA1KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDYpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNykgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA4KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDkpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQ1MDUsIDB4MDAxMCkgfSwgLyogU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDVFMDQsIDB4Q0UwMCkgfSwgLyogU0FHRU0gV2lyZWxlc3MgQXNzaXN0YW50ICovCiAJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtNTQ3LDkgKzU1MSwxMiBAQAogCiAKIC8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgQ29tcGFxIGlQQVEgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBpcGFxX2RldmljZSA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCSJQb2NrZXRQQyBQREEiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBpcGFxX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJImlwYXEiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJQb2NrZXRQQyBQREEiLAogCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAogCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfaW4gPQkJMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwppbmRleCA4NWUyNDI0Li5hMDJmYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCkBAIC00NDMsMTAgKzQ0MywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgaXB3X2RldmljZSA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCSJJUFdpcmVsZXNzIGNvbnZlcnRlciIsCi0JLnNob3J0X25hbWUgPQkJImlwdyIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGlwd19kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJpcHciLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJJUFdpcmVsZXNzIGNvbnZlcnRlciIsCiAJLmlkX3RhYmxlID0JCXVzYl9pcHdfaWRzLAogCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfaW4gPQkJMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwppbmRleCA5MzdiMmZkLi4xOWYzMjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCkBAIC0xMzMsOSArMTMzLDEyIEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBpcl9kZXZpY2UgPSB7Ci0JLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5uYW1lID0JCQkiSVIgRG9uZ2xlIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgaXJfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiaXItdXNiIiwKKwl9LAorCS5kZXNjcmlwdGlvbiA9CQkiSVIgRG9uZ2xlIiwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAogCS5udW1fYnVsa19pbiA9CQkxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKaW5kZXggZTliNDViNy4uNWNmYzEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCkBAIC01NzAsMTAgKzU3MCwxMiBAQAogfTsKIAogLyogU3RydWN0cyBmb3IgdGhlIGRldmljZXMsIHByZSBhbmQgcG9zdCByZW51bWVyYXRpb24uICovCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl9wcmVfZGV2aWNlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9ICJLZXlzcGFuIC0gKHdpdGhvdXQgZmlybXdhcmUpIiwKLQkuc2hvcnRfbmFtZQkJPSAia2V5c3Bhbl9ub19maXJtIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIga2V5c3Bhbl9wcmVfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gImtleXNwYW5fbm9fZmlybSIsCisJfSwKKwkuZGVzY3JpcHRpb24JCT0gIktleXNwYW4gLSAod2l0aG91dCBmaXJtd2FyZSkiLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuX3ByZV9pZHMsCiAJLm51bV9pbnRlcnJ1cHRfaW4JPSBOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbgkJPSBOVU1fRE9OVF9DQVJFLApAQCAtNTgyLDEwICs1ODQsMTIgQEAKIAkuYXR0YWNoCQkJPSBrZXlzcGFuX2Zha2Vfc3RhcnR1cCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrZXlzcGFuXzFwb3J0X2RldmljZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSAiS2V5c3BhbiAxIHBvcnQgYWRhcHRlciIsCi0JLnNob3J0X25hbWUJCT0gImtleXNwYW5fMSIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGtleXNwYW5fMXBvcnRfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gImtleXNwYW5fMSIsCisJfSwKKwkuZGVzY3JpcHRpb24JCT0gIktleXNwYW4gMSBwb3J0IGFkYXB0ZXIiLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuXzFwb3J0X2lkcywKIAkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luCQk9IE5VTV9ET05UX0NBUkUsCkBAIC02MDcsMTAgKzYxMSwxMiBAQAogCS5zaHV0ZG93bgkJPSBrZXlzcGFuX3NodXRkb3duLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fMnBvcnRfZGV2aWNlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9ICJLZXlzcGFuIDIgcG9ydCBhZGFwdGVyIiwKLQkuc2hvcnRfbmFtZQkJPSAia2V5c3Bhbl8yIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIga2V5c3Bhbl8ycG9ydF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubmFtZQkJPSAia2V5c3Bhbl8yIiwKKwl9LAorCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiAyIHBvcnQgYWRhcHRlciIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMnBvcnRfaWRzLAogCS5udW1faW50ZXJydXB0X2luCT0gTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfaW4JCT0gTlVNX0RPTlRfQ0FSRSwKQEAgLTYzMiwxMCArNjM4LDEyIEBACiAJLnNodXRkb3duCQk9IGtleXNwYW5fc2h1dGRvd24sCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl80cG9ydF9kZXZpY2UgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gIktleXNwYW4gNCBwb3J0IGFkYXB0ZXIiLAotCS5zaG9ydF9uYW1lCQk9ICJrZXlzcGFuXzQiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBrZXlzcGFuXzRwb3J0X2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCQk9ICJrZXlzcGFuXzQiLAorCX0sCisJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDQgcG9ydCBhZGFwdGVyIiwKIAkuaWRfdGFibGUJCT0ga2V5c3Bhbl80cG9ydF9pZHMsCiAJLm51bV9pbnRlcnJ1cHRfaW4JPSBOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbgkJPSA1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCA2MzVjMzg0Li5jZDRmNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNzgzLDEwICs3ODMsMTIgQEAKIH0KIAogI2lmZGVmIEtFWVNQQU4KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrZXlzcGFuX3BkYV9mYWtlX2RldmljZSA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCSJLZXlzcGFuIFBEQSAtIChwcmVyZW51bWVyYXRpb24pIiwKLQkuc2hvcnRfbmFtZSA9CQkia2V5c3Bhbl9wZGFfcHJlIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIga2V5c3Bhbl9wZGFfZmFrZV9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJrZXlzcGFuX3BkYV9wcmUiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJLZXlzcGFuIFBEQSAtIChwcmVyZW51bWVyYXRpb24pIiwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGVfZmFrZSwKIAkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCkBAIC03OTcsMTAgKzc5OSwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBYSVJDT00KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB4aXJjb21fcGdzX2Zha2VfZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIlhpcmNvbSAvIEVudHJlZ3JhIFBHUyAtIChwcmVyZW51bWVyYXRpb24pIiwKLQkuc2hvcnRfbmFtZSA9CQkieGlyY29tX25vX2Zpcm0iLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB4aXJjb21fcGdzX2Zha2VfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkieGlyY29tX25vX2Zpcm0iLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJYaXJjb20gLyBFbnRyZWdyYSBQR1MgLSAocHJlcmVudW1lcmF0aW9uKSIsCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2Zha2VfeGlyY29tLAogCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKQEAgLTgxMCwxMCArODE0LDEyIEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrZXlzcGFuX3BkYV9kZXZpY2UgPSB7Ci0JLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5uYW1lID0JCQkiS2V5c3BhbiBQREEiLAotCS5zaG9ydF9uYW1lID0JCSJrZXlzcGFuX3BkYSIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGtleXNwYW5fcGRhX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJImtleXNwYW5fcGRhIiwKKwl9LAorCS5kZXNjcmlwdGlvbiA9CQkiS2V5c3BhbiBQREEiLAogCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zdGQsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAogCS5udW1fYnVsa19pbiA9CQkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKaW5kZXggYTExZTgyOS4uYTg5NTFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCkBAIC0xMjMsMTAgKzEyMywxMiBAQAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtsNWt1c2IxMDVkX2RldmljZSA9IHsKLQkub3duZXIgPSAgICAgICAgICAgICBUSElTX01PRFVMRSwKLQkubmFtZSA9CQkgICAgICJLTDVLVVNCMTA1RCAvIFBhbG1Db25uZWN0IiwKLQkuc2hvcnRfbmFtZSA9CSAgICAgImtsNWt1c2IxMDVkIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIga2w1a3VzYjEwNWRfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkia2w1a3VzYjEwNWQiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JICAgICAiS0w1S1VTQjEwNUQgLyBQYWxtQ29ubmVjdCIsCiAJLmlkX3RhYmxlID0JICAgICBpZF90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbiA9ICAxLAogCS5udW1fYnVsa19pbiA9CSAgICAgMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwppbmRleCBmZTRjOThhLi45NDU2ZGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCkBAIC0xMDUsOSArMTA1LDEyIEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrb2JpbF9kZXZpY2UgPSB7Ci0JLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5uYW1lID0JCQkiS09CSUwgVVNCIHNtYXJ0IGNhcmQgdGVybWluYWwiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBrb2JpbF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJrb2JpbCIsCisJfSwKKwkuZGVzY3JpcHRpb24gPQkJIktPQklMIFVTQiBzbWFydCBjYXJkIHRlcm1pbmFsIiwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbiA9CQkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCA1MGI2MzY5Ni4uY2E1ZGJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTEzMiwxMCArMTMyLDEyIEBACiAJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgbWN0X3UyMzJfZGV2aWNlID0gewotCS5vd25lciA9CSAgICAgVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJICAgICAiTUNUIFUyMzIiLAotCS5zaG9ydF9uYW1lID0JICAgICAibWN0X3UyMzIiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBtY3RfdTIzMl9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJtY3RfdTIzMiIsCisJfSwKKwkuZGVzY3JpcHRpb24gPQkgICAgICJNQ1QgVTIzMiIsCiAJLmlkX3RhYmxlID0JICAgICBpZF90YWJsZV9jb21iaW5lZCwKIAkubnVtX2ludGVycnVwdF9pbiA9ICAyLAogCS5udW1fYnVsa19pbiA9CSAgICAgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ub2tpYV9ka3UyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbm9raWFfZGt1Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDAxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbm9raWFfZGt1Mi5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogIE5va2lhIERLVTIgVVNCIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQKKyAqICBBdXRob3I6IEMgS2VtcAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgbGFyZ2VseSBkZXJpdmVkIGZyb20gd29yayBieSB0aGUgbGludXgtdXNiIGdyb3VwCisgKiAgYW5kIGFzc29jaWF0ZWQgc291cmNlIGZpbGVzLiAgUGxlYXNlIHNlZSB0aGUgdXNiL3NlcmlhbCBmaWxlcyBmb3IKKyAqICBpbmRpdmlkdWFsIGNyZWRpdHMgYW5kIGNvcHlyaWdodHMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIDIwLjA5LjIwMDUgLSBNYXR0aGlhcyBCbGFlc2luZyA8bWF0dGhpYXMuYmxhZXNpbmdAcnd0aC1hYWNoZW4uZGU+CisgKiAgQWRkZWQgc2hvcnQgbmFtZSB0byBkZXZpY2Ugc3RydWN0dXJlIHRvIG1ha2UgZHJpdmVyIGxvYWQgaW50byBrZXJuZWwgMi42LjEzCisgKgorICogIDIwLjA5LjIwMDUgLSBNYXR0aGlhcyBCbGFlc2luZyA8bWF0dGhpYXMuYmxhZXNpbmdAcnd0aC1hYWNoZW4uZGU+CisgKiAgQWRkZWQgdXNiX2RlcmVnaXN0ZXIgdG8gZXhpdCBjb2RlIC0gdG8gYWxsb3cgcmVtb3ZlIGFuZCByZWluc2VydCBvZiBtb2R1bGUKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisKKyNkZWZpbmUgTk9LSUFfVkVORE9SX0lECQkweDA0MjEKKyNkZWZpbmUgTk9LSUE3NjAwX1BST0RVQ1RfSUQJMHgwNDAwCisjZGVmaW5lIE5PS0lBNjIzMF9QUk9EVUNUX0lECTB4MDQwZgorI2RlZmluZSBOT0tJQTYxNzBfUFJPRFVDVF9JRAkweDA0MTYKKyNkZWZpbmUgTk9LSUE2NjcwX1BST0RVQ1RfSUQJMHgwNDFkCisjZGVmaW5lIE5PS0lBNjY4MF9QUk9EVUNUX0lECTB4MDQxZQorI2RlZmluZSBOT0tJQTYyMzBpX1BST0RVQ1RfSUQJMHgwNDI4CisKKyNkZWZpbmUgTk9LSUFfQVRfUE9SVAkweDgyCisjZGVmaW5lIE5PS0lBX0ZCVVNfUE9SVAkweDg2CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JInYwLjIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJIkMgS2VtcCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIk5va2lhIERLVTIgRHJpdmVyIgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKE5PS0lBX1ZFTkRPUl9JRCwgTk9LSUE3NjAwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE5PS0lBX1ZFTkRPUl9JRCwgTk9LSUE2MjMwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE5PS0lBX1ZFTkRPUl9JRCwgTk9LSUE2MTcwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE5PS0lBX1ZFTkRPUl9JRCwgTk9LSUE2NjcwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE5PS0lBX1ZFTkRPUl9JRCwgTk9LSUE2NjgwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE5PS0lBX1ZFTkRPUl9JRCwgTk9LSUE2MjMwaV9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworLyogVGhlIG9ubHkgdGhpbmcgd2hpY2ggbWFrZXMgdGhpcyBkZXZpY2UgZGlmZmVyZW50IGZyb20gYSBnZW5lcmljCisgKiBkZXZpY2UgaXMgdGhhdCB3ZSBoYXZlIHRvIHNldCBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIHRvIG1ha2UKKyAqIHRoZSByZWxldmFudCBlbmRwb2ludHMgYXZhaWxhYmxlLiBJbiAyLjYgdGhpcyBpcyByZWFsbHkgZWFzeS4uLiAqLworc3RhdGljIGludCBub2tpYV9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXR2YWwgPSAtRU5PREVWOworCisJaWYgKHNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmVuZHBvaW50WzBdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PSBOT0tJQV9BVF9QT1JUKSB7CisJCS8qIHRoZSBBVCBwb3J0ICovCisJCWRldl9pbmZvKCZzZXJpYWwtPmRldi0+ZGV2LCAiTm9raWEgQVQgUG9ydDpcbiIpOworCQlyZXR2YWwgPSAwOworCX0gZWxzZSBpZiAoc2VyaWFsLT5pbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nID09IDIgJiYKKwkJICAgc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzID09IE5PS0lBX0ZCVVNfUE9SVCkgeworCQkvKiB0aGUgRkJVUyBwb3J0ICovCisJCWRldl9pbmZvKCZzZXJpYWwtPmRldi0+ZGV2LCAiTm9raWEgRkJVUyBQb3J0OlxuIik7CisJCXVzYl9zZXRfaW50ZXJmYWNlKHNlcmlhbC0+ZGV2LCAxMCwgMSk7CisJCXJldHZhbCA9IDA7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG5va2lhX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkibm9raWFfZGt1MiIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgbm9raWFfc2VyaWFsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAJIm5va2lhX2RrdTIiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJOb2tpYSA3NjAwLzYyMzAoaSkvNjE3MC82NngwIERLVTIgZHJpdmVyIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLnByb2JlID0JCW5va2lhX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm9raWFfaW5pdCh2b2lkKQoreworICAgICAgICBpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigmbm9raWFfc2VyaWFsX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmbm9raWFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJICAgICAgICB1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJm5va2lhX3NlcmlhbF9kcml2ZXIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9BVVRIT1IpOworCWluZm8oRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5va2lhX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmbm9raWFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJm5va2lhX3NlcmlhbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChub2tpYV9pbml0KTsKK21vZHVsZV9leGl0KG5va2lhX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IDZhOTlhZTEuLjNjYWY5NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtODgsMTAgKzg4LDEyIEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB6eXhlbF9vbW5pbmV0X2RldmljZSA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCSJaeVhFTCAtIG9tbmkubmV0IGxjZCBwbHVzIHVzYiIsCi0JLnNob3J0X25hbWUgPQkJIm9tbmluZXQiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB6eXhlbF9vbW5pbmV0X2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJIm9tbmluZXQiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJaeVhFTCAtIG9tbmkubmV0IGxjZCBwbHVzIHVzYiIsCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAogCS5udW1faW50ZXJydXB0X2luID0JMSwKIAkubnVtX2J1bGtfaW4gPQkJMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA0OTg5ZTU3Li43NzE2MDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0xMDUsMTAgKzEwNSwxMiBAQAogLyogVGhlIGNhcmQgaGFzIHRocmVlIHNlcGFyYXRlIGludGVyZmFjZXMsIHdpY2ggdGhlIHNlcmlhbCBkcml2ZXIKICAqIHJlY29nbml6ZXMgc2VwYXJhdGVseSwgdGh1cyBudW1fcG9ydD0xLgogICovCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgb3B0aW9uXzNwb3J0X2RldmljZSA9IHsKLQkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkubmFtZSAgICAgICAgICAgICAgPSAiT3B0aW9uIDNHIGRhdGEgY2FyZCIsCi0JLnNob3J0X25hbWUgICAgICAgID0gIm9wdGlvbiIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIG9wdGlvbl8zcG9ydF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJvcHRpb24iLAorCX0sCisJLmRlc2NyaXB0aW9uICAgICAgID0gIk9wdGlvbiAzRyBkYXRhIGNhcmQiLAogCS5pZF90YWJsZSAgICAgICAgICA9IG9wdGlvbl9pZHMsCiAJLm51bV9pbnRlcnJ1cHRfaW4gID0gTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfaW4gICAgICAgPSBOVU1fRE9OVF9DQVJFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDNjZjI0NWIuLjE2NWMxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTgsMzEgKzgsMTAgQEAKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKICAqCi0gKiAyMDAyX01hcl8yNiBna2gKLSAqCWFsbG93ZWQgZHJpdmVyIHRvIHdvcmsgcHJvcGVybHkgaWYgdGhlcmUgaXMgbm8gdHR5IGFzc2lnbmVkIHRvIGEgcG9ydAotICoJKHRoaXMgaGFwcGVucyBmb3Igc2VyaWFsIGNvbnNvbGUgZGV2aWNlcy4pCi0gKgotICogMjAwMV9PY3RfMDYgZ2toCi0gKglBZGRlZCBSVFMgYW5kIERUUiBsaW5lIGNvbnRyb2wuICBUaGFua3MgdG8gam9lQGJuZGxnLmRlIGZvciBwYXJ0cyBvZiBpdC4KLSAqCi0gKiAyMDAxX1NlcF8xOSBna2gKLSAqCUFkZGVkIGJyZWFrIHN1cHBvcnQuCi0gKgotICogMjAwMV9BdWdfMzAgZ2toCi0gKglmaXhlZCBvb3BzIGluIHdyaXRlX2J1bGtfY2FsbGJhY2suCi0gKgotICogMjAwMV9BdWdfMjggZ2toCi0gKglyZXdvcmtlZCBidWZmZXIgbG9naWMgdG8gYmUgbGlrZSBvdGhlciB1c2Itc2VyaWFsIGRyaXZlcnMuICBIb3BlZnVsbHkKLSAqCXJlbW92aW5nIHNvbWUgcmVwb3J0ZWQgcHJvYmxlbXMuCi0gKgotICogMjAwMV9KdW5fMDYgZ2toCi0gKglmaW5pc2hlZCBwb3J0aW5nIHRvIDIuNCBmb3JtYXQuCi0gKiAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC01NSw3ICszNCw2IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlByb2xpZmljIFBMMjMwMyBVU0IgdG8gc2VyaWFsIGFkYXB0b3IgZHJpdmVyIgogCiBzdGF0aWMgaW50IGRlYnVnOwpAQCAtMTc1LDkgKzE1MywxMSBAQAogCiAKIC8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgUEwyMzAzIFNJTyBzZXJpYWwgY29udmVydGVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgcGwyMzAzX2RldmljZSA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCSJQTC0yMzAzIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgcGwyMzAzX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJInBsMjMwMyIsCisJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbiA9CQkxLApAQCAtMTE5NSw3ICsxMTc1LDcgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnBsMjMwM19kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJaW5mbyhEUklWRVJfREVTQyk7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CkBAIC0xMjE1LDcgKzExOTUsNiBAQAogbW9kdWxlX2V4aXQocGwyMzAzX2V4aXQpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKaW5kZXggOTZhMTc1Ni4uYzIyYmRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKQEAgLTkyLDcgKzkyLDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQkRfU0FGRV9TRVJJQUxfVkVORE9SKSAmJiAhZGVmaW5lZChDT05GSUdfVVNCRF9TQUZFX1NFUklBTF9QUk9EVUNUKQotI2Fib3J0ICJTQUZFX1NFUklBTF9WRU5ET1IgZGVmaW5lZCB3aXRob3V0IFNBRkVfU0VSSUFMX1BST0RVQ1QiCisjZXJyb3IgIlNBRkVfU0VSSUFMX1ZFTkRPUiBkZWZpbmVkIHdpdGhvdXQgU0FGRV9TRVJJQUxfUFJPRFVDVCIKICNlbmRpZgogCiAjaWYgISBkZWZpbmVkKENPTkZJR19VU0JEX1NBRkVfU0VSSUFMX1ZFTkRPUikKQEAgLTM5Nyw5ICszOTcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHNhZmVfZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIlNhZmUiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBzYWZlX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJInNhZmVfc2VyaWFsIiwKKwl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCA1OWM4OGRlLi4yMDVkYmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTI1NSw5ICsyNTUsMTIgQEAKIAkuaWRfdGFibGUJCT0gdGlfaWRfdGFibGVfY29tYmluZWQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgdGlfMXBvcnRfZGV2aWNlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9ICJUSSBVU0IgMzQxMCAxIHBvcnQgYWRhcHRlciIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHRpXzFwb3J0X2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCQk9ICJ0aV91c2JfMzQxMF81MDUyXzEiLAorCX0sCisJLmRlc2NyaXB0aW9uCQk9ICJUSSBVU0IgMzQxMCAxIHBvcnQgYWRhcHRlciIsCiAJLmlkX3RhYmxlCQk9IHRpX2lkX3RhYmxlXzM0MTAsCiAJLm51bV9pbnRlcnJ1cHRfaW4JPSAxLAogCS5udW1fYnVsa19pbgkJPSAxLApAQCAtMjgyLDkgKzI4NSwxMiBAQAogCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gdGlfYnVsa19vdXRfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgdGlfMnBvcnRfZGV2aWNlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9ICJUSSBVU0IgNTA1MiAyIHBvcnQgYWRhcHRlciIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHRpXzJwb3J0X2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCQk9ICJ0aV91c2JfMzQxMF81MDUyXzIiLAorCX0sCisJLmRlc2NyaXB0aW9uCQk9ICJUSSBVU0IgNTA1MiAyIHBvcnQgYWRhcHRlciIsCiAJLmlkX3RhYmxlCQk9IHRpX2lkX3RhYmxlXzUwNTIsCiAJLm51bV9pbnRlcnJ1cHRfaW4JPSAxLAogCS5udW1fYnVsa19pbgkJPSAyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggZTc3ZmJkZi4uMGM0ODgxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFVTQiBTZXJpYWwgQ29udmVydGVyIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDUgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBCZXJnZXIgKHBiZXJnZXJAYnJpbXNvbi5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWwgQm9yY2hlcnMgKGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pCiAgKgpAQCAtOSwzMTYgKzksMTEgQEAKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KICAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogVGhpcyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gdGhlIEFDTSBkcml2ZXIgYnkgQXJtaW4gRnVlcnN0ICh3aGljaCB3YXMgCisgKiBUaGlzIGRyaXZlciB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgQUNNIGRyaXZlciBieSBBcm1pbiBGdWVyc3QgKHdoaWNoIHdhcwogICogYmFzZWQgb24gYSBkcml2ZXIgYnkgQnJhZCBLZXJ5YW4pCiAgKgogICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCiAgKgotICogKDEyLzEwLzIwMDIpIGdraAotICoJU3BsaXQgdGhlIHBvcnRzIG9mZiBpbnRvIHRoZWlyIG93biBzdHJ1Y3QgZGV2aWNlLCBhbmQgYWRkZWQgYQotICoJdXNiLXNlcmlhbCBidXMgZHJpdmVyLgotICoKLSAqICgxMS8xOS8yMDAyKSBna2gKLSAqCXJlbW92ZWQgYSBmZXcgI2lmZGVmcyBmb3IgdGhlIGdlbmVyaWMgY29kZSBhbmQgY2xlYW5lZCB1cCB0aGUgZmFpbHVyZQotICoJbG9naWMgaW4gaW5pdGlhbGl6YXRpb24uCi0gKgotICogKDEwLzAyLzIwMDIpIGdraAotICoJbW92ZWQgdGhlIGNvbnNvbGUgY29kZSB0byBjb25zb2xlLmMgYW5kIG91dCBvZiB0aGlzIGZpbGUuCi0gKgotICogKDA2LzA1LzIwMDIpIGdraAotICoJbW92ZWQgbG9jYXRpb24gb2Ygc3RhcnR1cCgpIGNhbGwgaW4gc2VyaWFsX3Byb2JlKCkgdW50aWwgYWZ0ZXIgYWxsCi0gKglvZiB0aGUgcG9ydCBpbmZvcm1hdGlvbiBhbmQgZW5kcG9pbnRzIGFyZSBpbml0aWFsaXplZC4gIFRoaXMgbWFrZXMKLSAqCXRoaW5ncyBlYXNpZXIgZm9yIHNvbWUgZHJpdmVycy4KLSAqCi0gKiAoMDQvMTAvMjAwMikgZ2toCi0gKglhZGRlZCBzZXJpYWxfcmVhZF9wcm9jIGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYQotICoJL3Byb2MvdHR5L2RyaXZlci91c2Itc2VyaWFsIGZpbGUuCi0gKgotICogKDAzLzI3LzIwMDIpIGdraAotICoJR290IFVTQiBzZXJpYWwgY29uc29sZSBjb2RlIHdvcmtpbmcgcHJvcGVybHkgYW5kIG1lcmdlZCBpbnRvIHRoZSBtYWluCi0gKgl2ZXJzaW9uIG9mIHRoZSB0cmVlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgdGhlIGluaXRpYWwgdmVyc2lvbgotICoJb2YgdGhpcyBjb2RlLCBhbmQgZm9yIHB1c2hpbmcgbWUgdG8gZmluaXNoIGl0IHVwLgotICoJVGhlIFVTQiBzZXJpYWwgY29uc29sZSB3b3JrcyB3aXRoIGFueSB1c2Igc2VyaWFsIGRyaXZlciBkZXZpY2UuCi0gKgotICogKDAzLzIxLzIwMDIpIGdraAotICoJTW92ZWQgYWxsIG1hbmlwdWxhdGlvbiBvZiBwb3J0LT5vcGVuX2NvdW50IGludG8gdGhlIGNvcmUuICBOb3cgdGhlCi0gKglpbmRpdmlkdWFsIGRyaXZlcidzIG9wZW4gYW5kIGNsb3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUKLSAqCWZpcnN0IG9wZW4oKSBhbmQgbGFzdCBjbG9zZSgpIGlzIGNhbGxlZC4gIE1ha2luZyB0aGUgZHJpdmVycyBhIGJpdAotICoJc21hbGxlciBhbmQgc2ltcGxlci4KLSAqCUZpeGVkIGEgYnVnIGlmIGEgZHJpdmVyIGRpZG4ndCBoYXZlIHRoZSBvd25lciBmaWVsZCBzZXQuCi0gKgotICogKDAyLzI2LzIwMDIpIGdraAotICoJTW92ZWQgYWxsIGxvY2tpbmcgaW50byB0aGUgbWFpbiBzZXJpYWxfKiBmdW5jdGlvbnMsIGluc3RlYWQgb2YgaGF2aW5nIAotICoJdGhlIGluZGl2aWR1YWwgZHJpdmVycyBoYXZlIHRvIGdyYWIgdGhlIHBvcnQgc2VtYXBob3JlLiAgVGhpcyBzaG91bGQKLSAqCXJlZHVjZSByYWNlcy4KLSAqCVJld29ya2VkIHRoZSBNT0RfSU5DIGxvZ2ljIGEgYml0IHRvIGFsd2F5cyBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCwgZXZlbgotICoJaWYgdGhlIGdlbmVyaWMgZHJpdmVyIGlzIGJlaW5nIHVzZWQuCi0gKgotICogKDEwLzEwLzIwMDEpIGdraAotICoJdXNiX3NlcmlhbF9kaXNjb25uZWN0KCkgbm93IHNldHMgdGhlIHNlcmlhbC0+ZGV2IHBvaW50ZXIgaXMgdG8gTlVMTCB0bwotICoJaGVscCBwcmV2ZW50IGNoaWxkIGRyaXZlcnMgZnJvbSBhY2Nlc3NpbmcgdGhlIGRldmljZSBzaW5jZSBpdCBpcyBub3cKLSAqCWdvbmUuCi0gKgotICogKDA5LzEzLzIwMDEpIGdraAotICoJTW92ZWQgZ2VuZXJpYyBkcml2ZXIgaW5pdGlhbGl6ZSBhZnRlciB3ZSBoYXZlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgVVNCCi0gKgljb3JlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgcG9pbnRpbmcgdGhpcyBwcm9ibGVtIG91dC4KLSAqCi0gKiAoMDcvMDMvMjAwMSkgZ2toCi0gKglGaXhlZCBtb2R1bGUgcGFyYW1hdGVyIHNpemUuICBUaGFua3MgdG8gSm9obiBCcm9ja21leWVyIGZvciB0aGUgcG9pbnRlci4KLSAqCUZpeGVkIHZlbmRvciBhbmQgcHJvZHVjdCBnZXR0aW5nIGRlZmluZWQgdGhyb3VnaCB0aGUgTU9EVUxFX1BBUk0gbWFjcm8KLSAqCWlmIHRoZSBHZW5lcmljIGRyaXZlciB3YXNuJ3QgY29tcGlsZWQgaW4uCi0gKglGaXhlZCBwcm9ibGVtIHdpdGggZ2VuZXJpY19zaHV0ZG93bigpIG5vdCBiZWluZyBjYWxsZWQgZm9yIGRyaXZlcnMgdGhhdAotICoJZG9uJ3QgaGF2ZSBhIHNodXRkb3duKCkgZnVuY3Rpb24uCi0gKgotICogKDA2LzA2LzIwMDEpIGdraAotICoJYWRkZWQgZXZpbCBoYWNrIHRoYXQgaXMgbmVlZGVkIGZvciB0aGUgcHJvbGlmaWMgcGwyMzAzIGRldmljZSBkdWUgdG8gdGhlCi0gKgljcmF6eSB3YXkgaXRzIGVuZHBvaW50cyBhcmUgc2V0IHVwLgotICoKLSAqICgwNS8zMC8yMDAxKSBna2gKLSAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCi0gKgotICogKDA0LzA4LzIwMDEpIGdiCi0gKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgotICoKLSAqIDIwMDFfMDJfMDUgZ2toCi0gKglGaXhlZCBidWZmZXIgb3ZlcmZsb3dzIGJ1ZyB3aXRoIHRoZSBnZW5lcmljIHNlcmlhbCBkcml2ZXIuICBUaGFua3MgdG8KLSAqCVRvZGQgU3F1aXJlcyA8c3F1aXJlc3RAY3QwLmNvbT4gZm9yIGZpeGluZyB0aGlzLgotICoKLSAqICgwMS8xMC8yMDAxKSBna2gKLSAqCUZpeGVkIGJ1ZyB3aGVyZSB0aGUgZ2VuZXJpYyBzZXJpYWwgYWRhcHRvciBncmFiYmVkIF9hbnlfIGRldmljZSB0aGF0IHdhcwotICoJb2ZmZXJlZCB0byBpdC4KLSAqCi0gKiAoMTIvMTIvMjAwMCkgZ2toCi0gKglSZW1vdmVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgZnJvbSBwb2xsIGFuZCBkaXNjb25uZWN0IGZ1bmN0aW9ucywgYW5kCi0gKgltb3ZlZCB0aGVtIHRvIHRoZSBzZXJpYWxfb3BlbiBhbmQgc2VyaWFsX2Nsb3NlIGZ1bmN0aW9ucy4KLSAqCUFsc28gZml4ZWQgYnVnIHdpdGggdGhlcmUgbm90IGJlaW5nIGEgTU9EX0RFQyBmb3IgdGhlIGdlbmVyaWMgZHJpdmVyCi0gKgkodGhhbmtzIHRvIEdhcnkgQnJ1YmFrZXIgZm9yIGZpbmRpbmcgdGhpcy4pCi0gKgotICogKDExLzI5LzIwMDApIGdraAotICoJU21hbGwgTlVMTCBwb2ludGVyIGluaXRpYWxpemF0aW9uIGNsZWFudXAgd2hpY2ggc2F2ZXMgYSBiaXQgb2YgZGlzayBpbWFnZQotICoKLSAqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKLSAqCWluc3RlYWQgb2YgdXNpbmcgaWRWZW5kb3IvaWRQcm9kdWN0IHBhaXJzLCB1c2Igc2VyaWFsIGRyaXZlcnMKLSAqCW5vdyBpZGVudGlmeSB0aGVpciBoYXJkd2FyZSBpbnRlcmVzdCB3aXRoIHVzYl9kZXZpY2VfaWQgdGFibGVzLAotICoJd2hpY2ggdGhleSB1c3VhbGx5IGhhdmUgYW55aG93IGZvciB1c2Ugd2l0aCBNT0RVTEVfREVWSUNFX1RBQkxFLgotICoKLSAqICgxMC8wNS8yMDAwKSBna2gKLSAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKLSAqCWNvcmUgbmVlZHMgaXQuCi0gKiAKLSAqICgwOS8xMS8yMDAwKSBna2gKLSAqCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCi0gKgotICogKDA4LzI4LzIwMDApIGdraAotICoJQWRkZWQgcG9ydF9sb2NrIHRvIHBvcnQgc3RydWN0dXJlLgotICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcyB0byBnZW5lcmljIGRyaXZlcgotICoJRml4ZWQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIGdlbmVyaWMgZGV2aWNlJ3MgcG9ydCBtb3JlIHRoYW4gb25jZS4KLSAqCi0gKiAoMDcvMjMvMjAwMCkgZ2toCi0gKglBZGRlZCBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgdG8gcG9ydCBzdHJ1Y3R1cmUuCi0gKgotICogKDA3LzE5LzIwMDApIGdraCwgcGJlcmdlciwgYW5kIGJvcmNoZXJzCi0gKglNb2RpZmljYXRpb25zIHRvIGFsbG93IHVzYi1zZXJpYWwgZHJpdmVycyB0byBiZSBtb2R1bGVzLgotICoKLSAqICgwNy8wMy8yMDAwKSBna2gKLSAqCUFkZGVkIG1vcmUgZGVidWdnaW5nIHRvIHNlcmlhbF9pb2N0bCBjYWxsCi0gKiAKLSAqICgwNi8yNS8yMDAwKSBna2gKLSAqCUNoYW5nZWQgZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrIHRvIG5vdCBjYWxsIHdha2VfdXBfaW50ZXJydXB0aWJsZQotICoJZGlyZWN0bHksIGJ1dCB0byBoYXZlIHBvcnRfc29mdGludCBkbyBpdCBhdCBhIHNhZmVyIHRpbWUuCi0gKgotICogKDA2LzIzLzIwMDApIGdraAotICoJQ2xlYW5lZCB1cCBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBpbiBhIHF1ZXN0IHRvIGZpbmQgVUhDSSB0aW1lb3V0IGJ1Zy4KLSAqCi0gKiAoMDUvMjIvMjAwMCkgZ2toCi0gKglDaGFuZ2VkIHRoZSBtYWtlZmlsZSwgZW5hYmxpbmcgdGhlIGJpZyBDT05GSUdfVVNCX1NFUklBTF9TT01USElORyB0byBiZSAKLSAqCXJlbW92ZWQgZnJvbSB0aGUgaW5kaXZpZHVhbCBkZXZpY2Ugc291cmNlIGZpbGVzLgotICoKLSAqICgwNS8wMy8yMDAwKSBna2gKLSAqCUFkZGVkIHRoZSBEaWdpIEFjY2VsZXBvcnQgZHJpdmVyIGZyb20gQWwgQm9yY2hlcnMgYW5kIFBldGVyIEJlcmdlci4KLSAqIAotICogKDA1LzAyLzIwMDApIGdraAotICoJQ2hhbmdlZCBkZXZmcyBhbmQgdHR5IHJlZ2lzdGVyIGNvZGUgdG8gd29yayBwcm9wZXJseSBub3cuIFRoaXMgd2FzIGJhc2VkIG9uCi0gKgl0aGUgQUNNIGRyaXZlciBjaGFuZ2VzIGJ5IFZvanRlY2ggUGF2bGlrLgotICoKLSAqICgwNC8yNy8yMDAwKSBSeWFuIFZhbmRlckJpamwKLSAqIAlQdXQgY2FsbHMgdG8gKl9wYXJhbm9pYV9jaGVja3MgaW50byBvbmUgZnVuY3Rpb24uCi0gKiAKLSAqICgwNC8yMy8yMDAwKSBna2gKLSAqCUZpeGVkIGJ1ZyB0aGF0IFJhbmR5IER1bmxhcCBmb3VuZCBmb3IgR2VuZXJpYyBkZXZpY2VzIHdpdGggbm8gYnVsayBvdXQgcG9ydHMuCi0gKglNb3ZlZCB3aGVuIHRoZSBzdGFydHVwIGNvZGUgcHJpbnRlZCBvdXQgdGhlIGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkLgotICoKLSAqICgwNC8xOS8yMDAwKSBna2gKLSAqCUFkZGVkIGRyaXZlciBmb3IgWnlYRUwgb21uaS5uZXQgbGNkIHBsdXMgSVNETiBUQQotICoJTWFkZSBzdGFydHVwIGluZm8gbWVzc2FnZSBzcGVjaWZ5IHdoaWNoIGRyaXZlcnMgd2VyZSBjb21waWxlZCBpbi4KLSAqCi0gKiAoMDQvMDMvMjAwMCkgZ2toCi0gKglDaGFuZ2VkIHRoZSBwcm9iZSBwcm9jZXNzIHRvIHJlbW92ZSB0aGUgbW9kdWxlIHVubG9hZCByYWNlcy4KLSAqCUNoYW5nZWQgd2hlcmUgdGhlIHR0eSBsYXllciBnZXRzIGluaXRpYWxpemVkIHRvIGhhdmUgZGV2ZnMgd29yayBuaWNlci4KLSAqCUFkZGVkIGluaXRpYWwgZGV2ZnMgc3VwcG9ydC4KLSAqCi0gKiAoMDMvMjYvMjAwMCkgZ2toCi0gKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgotICogCi0gKiAoMDMvMTkvMjAwMCkgZ2toCi0gKglGaXhlZCBvb3BzIHRoYXQgY291bGQgaGFwcGVuIHdoZW4gZGV2aWNlIHdhcyByZW1vdmVkIHdoaWxlIGEgcHJvZ3JhbQotICoJd2FzIHRhbGtpbmcgdG8gdGhlIGRldmljZS4KLSAqCVJlbW92ZWQgdGhlIHN0YXRpYyB1cmJzIGFuZCBub3cgYWxsIHVyYnMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZAotICoJZHluYW1pY2FsbHkuCi0gKglSZXdvcmtlZCB0aGUgaW50ZXJuYWwgaW50ZXJmYWNlLiBOb3cgZXZlcnl0aGluZyBpcyBiYXNlZCBvbiB0aGUgCi0gKgl1c2Jfc2VyaWFsX3BvcnQgc3RydWN0dXJlIGluc3RlYWQgb2YgdGhlIGxhcmdlciB1c2Jfc2VyaWFsIHN0cnVjdHVyZS4KLSAqCVRoaXMgZml4ZXMgdGhlIGJ1ZyB0aGF0IGEgbXVsdGlwb3J0IGRldmljZSBjb3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4KLSAqCW9uZSBwb3J0IG9wZW4gYXQgb25lIHRpbWUuCi0gKgotICogKDAzLzE3LzIwMDApIGdraAotICoJQWRkZWQgY29uZmlnIG9wdGlvbiBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzLgotICoJQWRkZWQgcGF0Y2ggZm9yIGtleXNwYW4gcGRhIGZyb20gQnJpYW4gV2FybmVyLgotICoKLSAqICgwMy8wNi8yMDAwKSBna2gKLSAqCUFkZGVkIHRoZSBrZXlzcGFuIHBkYSBjb2RlIGZyb20gQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KLSAqCU1vdmVkIGEgYnVuY2ggb2YgdGhlIHBvcnQgc3BlY2lmaWMgc3R1ZmYgaW50byBpdHMgb3duIHN0cnVjdHVyZS4gVGhpcwotICoJaXMgaW4gYW50aWNpcGF0aW9uIG9mIHRoZSB0cnVlIG11bHRpcG9ydCBkZXZpY2VzICh0aGVyZSdzIGEgYnVnIGlmIHlvdQotICoJdHJ5IHRvIGFjY2VzcyBtb3JlIHRoYW4gb25lIHBvcnQgb2YgYW55IG11bHRpcG9ydCBkZXZpY2UgcmlnaHQgbm93KQotICoKLSAqICgwMi8yMS8yMDAwKSBna2gKLSAqCU1hZGUgaXQgc28gdGhhdCBhbnkgc2VyaWFsIGRldmljZXMgb25seSBoYXZlIHRvIHNwZWNpZnkgd2hpY2ggZnVuY3Rpb25zCi0gKgl0aGV5IHdhbnQgdG8gb3ZlcmxvYWQgZnJvbSB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBjYWxscyAoZ3JlYXQsIAotICoJaW5oZXJpdGFuY2UgaW4gQywgaW4gYSBkcml2ZXIsIGp1c3Qgd2hhdCBJIHdhbnRlZC4uLikKLSAqCUFkZGVkIHN1cHBvcnQgZm9yIHNldF90ZXJtaW9zIGFuZCBpb2N0bCBmdW5jdGlvbiBjYWxscy4gTm8gZHJpdmVycyB0YWtlCi0gKglhZHZhbnRhZ2Ugb2YgdGhpcyB5ZXQuCi0gKglSZW1vdmVkIHRoZSAjaWZkZWYgTU9EVUxFLCBub3cgdGhlcmUgaXMgbm8gbW9kdWxlIHNwZWNpZmljIGNvZGUuCi0gKglDbGVhbmVkIHVwIGEgZmV3IGNvbW1lbnRzIGluIHVzYi1zZXJpYWwuaCB0aGF0IHdlcmUgd3JvbmcgKHRoYW5rcyBhZ2FpbgotICoJdG8gTWlsZXMgTG90dCkuCi0gKglTbWFsbCBmaXggdG8gZ2V0X2ZyZWVfc2VyaWFsLgotICoKLSAqICgwMi8xNC8yMDAwKSBna2gKLSAqCVJlbW92ZWQgdGhlIEJlbGtpbiBhbmQgUGVyYWNvbSBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIGRyaXZlciBkdWUgdG8KLSAqCXRoZSBsYWNrIG9mIHN1cHBvcnQgZnJvbSB0aGUgdmVuZG9yLCBhbmQgbWUgbm90IHdhbnRpbmcgcGVvcGxlIHRvIAotICoJYWNjaWRlbmF0bHkgYnV5IHRoZSBkZXZpY2UsIGV4cGVjdGluZyBpdCB0byB3b3JrIHdpdGggTGludXguCi0gKglBZGRlZCByZWFkX2J1bGtfY2FsbGJhY2sgYW5kIHdyaXRlX2J1bGtfY2FsbGJhY2sgdG8gdGhlIHR5cGUgc3RydWN0dXJlCi0gKglmb3IgdGhlIG5lZWRzIG9mIHRoZSBGVERJIGFuZCBXaGl0ZUhFQVQgZHJpdmVyLgotICoJQ2hhbmdlZCBhbGwgcmV2ZXJlbmNlcyB0byBGVERJIHRvIEZURElfU0lPIGF0IHRoZSByZXF1ZXN0IG9mIEJpbGwKLSAqCVJ5ZGVyLgotICoJQ2hhbmdlZCB0aGUgb3V0cHV0IHVyYiBzaXplIGJhY2sgdG8gdGhlIG1heCBlbmRwb2ludCBzaXplIHRvIG1ha2UKLSAqCXRoZSBmdGRpX3NpbyBkcml2ZXIgaGF2ZSBpdCBlYXNpZXIsIGFuZCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBpdCBkaWRuJ3QKLSAqCXJlYWxseSBpbmNyZWFzZSB0aGUgc3BlZWQgYW55LgotICoKLSAqICgwMi8xMS8yMDAwKSBna2gKLSAqCUFkZGVkIFZJU09SX0ZVTkNUSU9OX0NPTlNPTEUgdG8gdGhlIHZpc29yIHN0YXJ0dXAgZnVuY3Rpb24uIFRoaXMgd2FzIGEKLSAqCXBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkuCi0gKglGaXhlZCBidWcgd2l0aCBub3QgcmVzdG9yaW5nIHRoZSBtaW5vciByYW5nZSB0aGF0IGEgZGV2aWNlIGdyYWJzLCBpZgotICoJdGhlIHN0YXJ0dXAgZnVuY3Rpb24gZmFpbHMgKHRoYW5rcyBNaWxlcyBmb3IgZmluZGluZyB0aGlzKS4KLSAqCi0gKiAoMDIvMDUvMjAwMCkgZ2toCi0gKglBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgdGhlIEtleXNwYW4gUERBIHNlcmlhbCBjb252ZXJ0ZXIgc28gdGhhdAotICoJQnJpYW4gV2FybmVyIGhhcyBhIHBsYWNlIHRvIHB1dCBoaXMgY29kZS4KLSAqCU1hZGUgdGhlIGV6dXNiIHNwZWNpZmljIGZ1bmN0aW9ucyBnZW5lcmljIGVub3VnaCB0aGF0IGRpZmZlcmVudAotICoJZGV2aWNlcyBjYW4gdXNlIHRoZW0gKHdoaXRlaGVhdCBhbmQga2V5c3Bhbl9wZGEgYm90aCBuZWVkIHRoZW0pLgotICoJU3BsaXQgb3V0IGEgd2hvbGUgYnVuY2ggb2Ygc3RydWN0dXJlIGFuZCBvdGhlciBzdHVmZiB0byBhIHNlcGFyYXRlCi0gKgl1c2Itc2VyaWFsLmggZmlsZS4KLSAqCU1hZGUgdGhlIFZpc29yIGNvbm5lY3Rpb24gbWVzc2FnZXMgYSBsaXR0bGUgbW9yZSB1bmRlcnN0YW5kYWJsZSwgbm93Ci0gKgl0aGF0IE1pbGVzIExvdHQgKG1pbG9zQGluc3luYy5uZXQpIGhhcyBnb3R0ZW4gdGhlIEdlbmVyaWMgY2hhbm5lbCB0bwotICoJd29yay4gQWxzbyBtYWRlIHRoZW0gYWx3YXlzIHNob3cgdXAgaW4gdGhlIGxvZyBmaWxlLgotICogCi0gKiAoMDEvMjUvMjAwMCkgZ2toCi0gKglBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgRlRESSBzZXJpYWwgY29udmVydGVyIHNvIHRoYXQgQmlsbCBSeWRlcgotICoJaGFzIGEgcGxhY2UgdG8gcHV0IGhpcyBjb2RlLgotICoJQWRkZWQgdGhlIHZlbmRvciBzcGVjaWZpYyBpbmZvIGZyb20gSGFuZHNwcmluZy4gTm93IHdlIGNhbiBwcmludCBvdXQKLSAqCWluZm9ybWF0aW9uYWwgZGVidWcgbWVzc2FnZXMgYXMgd2VsbCBhcyB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nLgotICoKLSAqICgwMS8yMy8yMDAwKSBna2gKLSAqCUZpeGVkIHByb2JsZW0gb2YgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gb3BlbiBhIHBvcnQgdGhhdCBkaWRuJ3QgaGF2ZSBhCi0gKglkZXZpY2UgYXNzaWduZWQgdG8gaXQuIE1hZGUgdGhlIG1pbm9yIG5vZGUgZmluZGluZyBhIGxpdHRsZSBzbWFydGVyLAotICoJbm93IGl0IGxvb2tzIHRvIGZpbmQgYSBjb250aW51b3VzIHNwYWNlIGZvciB0aGUgbmV3IGRldmljZS4KLSAqCi0gKiAoMDEvMjEvMjAwMCkgZ2toCi0gKglGaXhlZCBidWcgaW4gdmlzb3Jfc3RhcnR1cCB3aXRoIHBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkKLSAqCUZpeGVkIGdldF9zZXJpYWxfYnlfbWlub3Igd2hpY2ggd2FzIGFsbCBtZXNzZWQgdXAgZm9yIG11bHRpIHBvcnQgCi0gKglkZXZpY2VzLiBGaXhlZCBtdWx0aSBwb3J0IHByb2JsZW0gZm9yIGdlbmVyaWMgZGV2aWNlcy4gTm93IHRoZSBudW1iZXIKLSAqCW9mIHBvcnRzIGlzIGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiBidWxrIG91dCBlbmRwb2ludHMgZm9yIHRoZQotICoJZ2VuZXJpYyBkZXZpY2UuCi0gKgotICogKDAxLzE5LzIwMDApIGdraAotICoJUmVtb3ZlZCBsb3RzIG9mIGNydWZ0IHRoYXQgd2FzIGFyb3VuZCBmcm9tIHRoZSBvbGQgKHByZSB1cmIpIGRyaXZlciAKLSAqCWludGVyZmFjZS4KLSAqCU1hZGUgdGhlIHNlcmlhbF90YWJsZSBkeW5hbWljLiBUaGlzIHNob3VsZCBzYXZlIGxvdHMgb2YgbWVtb3J5IHdoZW4KLSAqCXRoZSBudW1iZXIgb2YgbWlub3Igbm9kZXMgZ29lcyB1cCB0byAyNTYuCi0gKglBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBvbmUgcG9ydC4gCi0gKglBZGRlZCBtb3JlIGRlYnVnZ2luZyBjb21tZW50cyBmb3IgdGhlIFZpc29yLCBhbmQgYWRkZWQgYSBuZWVkZWQgCi0gKglzZXRfY29uZmlndXJhdGlvbiBjYWxsLgotICoKLSAqICgwMS8xNy8yMDAwKSBna2gKLSAqCUZpeGVkIHRoZSBXaGl0ZUhFQVQgZmlybXdhcmUgKG15IHByb2Nlc3NpbmcgdG9vbCBoYWQgYSBidWcpCi0gKglhbmQgYWRkZWQgbmV3IGRlYnVnIGxvYWRlciBmaXJtd2FyZSBmb3IgaXQuCi0gKglSZW1vdmVkIHRoZSBwdXRfY2hhciBmdW5jdGlvbiBhcyBpdCBpc24ndCByZWFsbHkgbmVlZGVkLgotICoJQWRkZWQgdmlzb3Igc3RhcnR1cCBjb21tYW5kcyBhcyBmb3VuZCBieSB0aGUgV2luOTggZHVtcC4KLSAqIAotICogKDAxLzEzLzIwMDApIGdraAotICoJRml4ZWQgdGhlIHZlbmRvciBpZCBmb3IgdGhlIGdlbmVyaWMgZHJpdmVyIHRvIHRoZSBvbmUgSSBtZWFudCBpdCB0byBiZS4KLSAqCi0gKiAoMDEvMTIvMjAwMCkgZ2toCi0gKglGb3JnZXQgdGhlIHZlcnNpb24gbnVtYmVyaW5nLi4udGhhdCdzIHByZXR0eSB1c2VsZXNzLi4uCi0gKglNYWRlIHRoZSBkcml2ZXIgYWJsZSB0byBiZSBjb21waWxlZCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3Qgd2hpY2gKLSAqCWNvbnZlcnRlciB0aGV5IHdhbnQgdG8gdXNlLiBUaGlzIGFsbG93cyBwZW9wbGUgd2hvIG9ubHkgd2FudCB0aGUgVmlzb3IKLSAqCXN1cHBvcnQgdG8gbm90IHBheSB0aGUgbWVtb3J5IHNpemUgcHJpY2Ugb2YgdGhlIFdoaXRlSEVBVC4KLSAqCUZpeGVkIGJ1ZyB3aGVyZSB0aGUgZ2VuZXJpYyBkcml2ZXIgKGlkVmVuZG9yPTAwMDAgYW5kIGlkUHJvZHVjdD0wMDAwKQotICoJZ3JhYmJlZCB0aGUgcm9vdCBodWIuIE5vdCBnb29kLgotICogCi0gKiB2ZXJzaW9uIDAuNC4wICgwMS8xMC8yMDAwKSBna2gKLSAqCUFkZGVkIHdoaXRlaGVhdC5oIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIGZvciB0aGUgQ29ubmVjdFRlY2ggV2hpdGVIRUFUCi0gKglkZXZpY2UuIEFkZGVkIHN0YXJ0dXAgZnVuY3Rpb24gdG8gYWxsb3cgZmlybXdhcmUgdG8gYmUgZG93bmxvYWRlZCB0bwotICoJYSBkZXZpY2UgaWYgaXQgbmVlZHMgdG8gYmUuCi0gKglBZGRlZCBmaXJtd2FyZSBkb3dubG9hZCBsb2dpYyB0byB0aGUgV2hpdGVIRUFUIGRldmljZS4KLSAqCVN0YXJ0ZWQgdG8gYWRkICNkZWZpbmVzIHRvIHNwbGl0IHVwIHRoZSBkaWZmZXJlbnQgZHJpdmVycyBmb3IgcG90ZW50aWFsCi0gKgljb25maWd1cmF0aW9uIG9wdGlvbi4KLSAqCQotICogdmVyc2lvbiAwLjMuMSAoMTIvMzAvOTkpIGdraAotICogICAgICBGaXhlZCBwcm9ibGVtcyB3aXRoIHVyYiBmb3IgYnVsayBvdXQuCi0gKiAgICAgIEFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2V0cyBvZiBlbmRwb2ludHMuIFRoaXMgZW5hYmxlcwotICogICAgICB0aGUgSGFuZHNwcmluZyBWaXNvciB0byBiZSBhdHRhY2hlZCBzdWNjZXNzZnVsbHkuIE9ubHkgdGhlIGZpcnN0Ci0gKiAgICAgIGJ1bGsgaW4gLyBidWxrIG91dCBlbmRwb2ludCBwYWlyIGlzIGJlaW5nIHVzZWQgcmlnaHQgbm93LgotICoKLSAqIHZlcnNpb24gMC4zLjAgKDEyLzI3Lzk5KSBna2gKLSAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIEhhbmRzcHJpbmcgVmlzb3IgYmFzZWQgb24gYSBwYXRjaCBmcm9tCi0gKglNaWxlcyBMb3R0IChtaWxvc0BzbmVldHkuaW5zeW5jLm5ldCkKLSAqCUNsZWFuZWQgdXAgdGhlIGNvZGUgYSBidW5jaCBhbmQgY29udmVydGVkIG92ZXIgdG8gdXNpbmcgdXJicyBvbmx5LgotICoKLSAqIHZlcnNpb24gMC4yLjMgKDEyLzIxLzk5KSBna2gKLSAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIENvbm5lY3QgVGVjaCBXaGl0ZUhFQVQgY29udmVydGVyLgotICoJSW5jcmVtZW50ZWQgdGhlIG51bWJlciBvZiBwb3J0cyBpbiBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIHRoZQotICoJV2hpdGVIRUFUIHRvIHdvcmsgcHJvcGVybHkgKDQgcG9ydHMgcGVyIGNvbm5lY3Rpb24pLgotICoJQWRkZWQgbm90aWZpY2F0aW9uIG9uIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiB3aGF0IHBvcnQgdGhlCi0gKglkZXZpY2UgaXMvd2FzIGNvbm5lY3RlZCB0byAoYW5kIHdoYXQga2luZCBvZiBkZXZpY2UgaXQgd2FzKS4KLSAqCi0gKiB2ZXJzaW9uIDAuMi4yICgxMi8xNi85OSkgZ2toCi0gKglDaGFuZ2VkIG1ham9yIG51bWJlciB0byB0aGUgbmV3IGFsbG9jYXRlZCBudW1iZXIuIFdlJ3JlIGxlZ2FsIG5vdyEKLSAqCi0gKiB2ZXJzaW9uIDAuMi4xICgxMi8xNC85OSkgZ2toCi0gKglGaXhlZCBidWcgdGhhdCBoYXBwZW5zIHdoZW4gZGV2aWNlIG5vZGUgaXMgb3BlbmVkIHdoZW4gdGhlcmUgaXNuJ3QgYQotICoJZGV2aWNlIGF0dGFjaGVkIHRvIGl0LiBUaGFua3MgdG8gbWFyZWtAd2ViZGVzaWduLm5vIGZvciBub3RpY2luZyB0aGlzLgotICoKLSAqIHZlcnNpb24gMC4yLjAgKDExLzEwLzk5KSBna2gKLSAqCVNwbGl0IHVwIGludGVybmFscyB0byBtYWtlIGl0IGVhc2llciB0byBhZGQgZGlmZmVyZW50IHR5cGVzIG9mIHNlcmlhbCAKLSAqCWNvbnZlcnRlcnMgdG8gdGhlIGNvZGUuCi0gKglBZGRlZCBhICJnZW5lcmljIiBkcml2ZXIgdGhhdCBnZXRzIGl0J3MgdmVuZG9yIGFuZCBwcm9kdWN0IGlkCi0gKglmcm9tIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuIFRoYW5rcyB0byBEYXZpZCBFLiBOZWxzb24gKGRuZWxzb25AanVtcC5uZXQpCi0gKglmb3IgdGhlIGlkZWEgYW5kIHNhbXBsZSBjb2RlIChmcm9tIHRoZSB1c2Igc2Nhbm5lciBkcml2ZXIuKQotICoJQ2xlYXJlZCB1cCBhbnkgbGljZW5zaW5nIHF1ZXN0aW9ucyBieSByZWxlYXNpbmcgaXQgdW5kZXIgdGhlIEdOVSBHUEwuCi0gKgotICogdmVyc2lvbiAwLjEuMiAoMTAvMjUvOTkpIGdraAotICogCUZpeGVkIGJ1ZyBpbiBkZXRlY3RpbmcgZGV2aWNlLgotICoKLSAqIHZlcnNpb24gMC4xLjEgKDEwLzA1Lzk5KSBna2gKLSAqIAlDaGFuZ2VkIHRoZSBtYWpvciBudW1iZXIgdG8gbm90IGNvbmZsaWN0IHdpdGggYW55dGhpbmcgZWxzZS4KLSAqCi0gKiB2ZXJzaW9uIDAuMSAoMDkvMjgvOTkpIGdraAotICogCUNhbiByZWNvZ25pemUgdGhlIHR3byBkaWZmZXJlbnQgZGV2aWNlcyBhbmQgc3RhcnQgdXAgYSByZWFkIGZyb20KLSAqCWRldmljZSB3aGVuIGFza2VkIHRvLiBXcml0ZXMgYWxzbyB3b3JrLiBObyBjb250cm9sIHNpZ25hbHMgeWV0LCB0aGlzCi0gKglhbGwgaXMgdmVuZG9yIHNwZWNpZmljIGRhdGEgKGkuZS4gbm8gc3BlYyksIGFsc28gbm8gY29udHJvbCBmb3IKLSAqCWRpZmZlcmVudCBiYXVkIHJhdGVzIG9yIG90aGVyIGJpdCBzZXR0aW5ncy4KLSAqCUN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgdGhlIHNhbWUgZGV2aWQgYXMgdGhlIGFjbSBkcml2ZXIuIFRoaXMgbmVlZHMKLSAqCXRvIGNoYW5nZS4KLSAqIAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTM0Miw3ICszNyw2IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4wIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4sIGdyZWdAa3JvYWguY29tLCBodHRwOi8vd3d3Lmtyb2FoLmNvbS9saW51eC8iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgU2VyaWFsIERyaXZlciBjb3JlIgogCkBAIC00MjcsNyArMTIxLDcgQEAKIAogCXNlcmlhbCA9IHRvX3VzYl9zZXJpYWwoa3JlZik7CiAKLQlkYmcgKCIlcyAtICVzIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnR5cGUtPm5hbWUpOworCWRiZygiJXMgLSAlcyIsIF9fRlVOQ1RJT05fXywgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAKIAlzZXJpYWwtPnR5cGUtPnNodXRkb3duKHNlcmlhbCk7CiAKQEAgLTUwNyw3ICsyMDEsNyBAQAogCQkvKiBsb2NrIHRoaXMgbW9kdWxlIGJlZm9yZSB3ZSBjYWxsIGl0CiAJCSAqIHRoaXMgbWF5IGZhaWwsIHdoaWNoIG1lYW5zIHdlIG11c3QgYmFpbCBvdXQsCiAJCSAqIHNhZmUgYmVjYXVzZSB3ZSBhcmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KLQkJaWYgKCF0cnlfbW9kdWxlX2dldChzZXJpYWwtPnR5cGUtPm93bmVyKSkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKSkgewogCQkJcmV0dmFsID0gLUVOT0RFVjsKIAkJCWdvdG8gYmFpbG91dF9rcmVmX3B1dDsKIAkJfQpAQCAtNTIyLDcgKzIxNiw3IEBACiAJcmV0dXJuIDA7CiAKIGJhaWxvdXRfbW9kdWxlX3B1dDoKLQltb2R1bGVfcHV0KHNlcmlhbC0+dHlwZS0+b3duZXIpOworCW1vZHVsZV9wdXQoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpOwogYmFpbG91dF9rcmVmX3B1dDoKIAlrcmVmX3B1dCgmc2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CiAJcG9ydC0+b3Blbl9jb3VudCA9IDA7CkBAIC01NTMsNyArMjQ3LDcgQEAKIAkJCXBvcnQtPnR0eSA9IE5VTEw7CiAJCX0KIAotCQltb2R1bGVfcHV0KHBvcnQtPnNlcmlhbC0+dHlwZS0+b3duZXIpOworCQltb2R1bGVfcHV0KHBvcnQtPnNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKTsKIAl9CiAKIAlrcmVmX3B1dCgmcG9ydC0+c2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CkBAIC03MTEsMTYgKzQwNSwxNiBAQAogCWNoYXIgdG1wWzQwXTsKIAogCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwotCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlLCAidXNic2VyaW5mbzoxLjAgZHJpdmVyOiVzXG4iLCBEUklWRVJfVkVSU0lPTik7CisJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UsICJ1c2JzZXJpbmZvOjEuMCBkcml2ZXI6Mi4wXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlMgJiYgbGVuZ3RoIDwgUEFHRV9TSVpFOyArK2kpIHsKIAkJc2VyaWFsID0gdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgoaSk7CiAJCWlmIChzZXJpYWwgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCiAJCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiVkOiIsIGkpOwotCQlpZiAoc2VyaWFsLT50eXBlLT5vd25lcikKLQkJCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiBtb2R1bGU6JXMiLCBtb2R1bGVfbmFtZShzZXJpYWwtPnR5cGUtPm93bmVyKSk7Ci0JCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiBuYW1lOlwiJXNcIiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCWlmIChzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcikKKwkJCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiBtb2R1bGU6JXMiLCBtb2R1bGVfbmFtZShzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcikpOworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgbmFtZTpcIiVzXCIiLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIHZlbmRvcjolMDR4IHByb2R1Y3Q6JTA0eCIsIAogCQkJCSAgIGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwgCiAJCQkJICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CkBAIC04MjMsNyArNTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICogY3JlYXRlX3NlcmlhbCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgCiAJCQkJCSAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLQkJCQkJICBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqdHlwZSkKKwkJCQkJICBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwogCkBAIC04MzQsMjIgKzUyOCwyMiBAQAogCX0KIAltZW1zZXQgKHNlcmlhbCwgMCwgc2l6ZW9mKCpzZXJpYWwpKTsKIAlzZXJpYWwtPmRldiA9IHVzYl9nZXRfZGV2KGRldik7Ci0Jc2VyaWFsLT50eXBlID0gdHlwZTsKKwlzZXJpYWwtPnR5cGUgPSBkcml2ZXI7CiAJc2VyaWFsLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiAJa3JlZl9pbml0KCZzZXJpYWwtPmtyZWYpOwogCiAJcmV0dXJuIHNlcmlhbDsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpzZWFyY2hfc2VyaWFsX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpzZWFyY2hfc2VyaWFsX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7Ci0Jc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICp0OwogCiAJLyogTGlzdCB0cm91Z2gga25vdyBkZXZpY2VzIGFuZCBzZWUgaWYgdGhlIHVzYiBpZCBtYXRjaGVzICovCiAJbGlzdF9mb3JfZWFjaChwLCAmdXNiX3NlcmlhbF9kcml2ZXJfbGlzdCkgewotCQl0ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSwgZHJpdmVyX2xpc3QpOworCQl0ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIsIGRyaXZlcl9saXN0KTsKIAkJaWQgPSB1c2JfbWF0Y2hfaWQoaWZhY2UsIHQtPmlkX3RhYmxlKTsKIAkJaWYgKGlkICE9IE5VTEwpIHsKIAkJCWRiZygiZGVzY3JpcHRvciBtYXRjaGVzIik7CkBAIC04NzIsNyArNTY2LDcgQEAKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9vdXRfZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX2luX2VuZHBvaW50W01BWF9OVU1fUE9SVFNdOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19vdXRfZW5kcG9pbnRbTUFYX05VTV9QT1JUU107Ci0Jc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnR5cGUgPSBOVUxMOworCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqdHlwZSA9IE5VTEw7CiAJaW50IHJldHZhbDsKIAlpbnQgbWlub3I7CiAJaW50IGJ1ZmZlcl9zaXplOwpAQCAtOTAwLDcgKzU5NCw3IEBACiAJaWYgKHR5cGUtPnByb2JlKSB7CiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKIAotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm93bmVyKSkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPmRyaXZlci5vd25lcikpIHsKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOwogCQkJa2ZyZWUgKHNlcmlhbCk7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTkwOCw3ICs2MDIsNyBAQAogCiAJCWlkID0gdXNiX21hdGNoX2lkKGludGVyZmFjZSwgdHlwZS0+aWRfdGFibGUpOwogCQlyZXR2YWwgPSB0eXBlLT5wcm9iZShzZXJpYWwsIGlkKTsKLQkJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7CisJCW1vZHVsZV9wdXQodHlwZS0+ZHJpdmVyLm93bmVyKTsKIAogCQlpZiAocmV0dmFsKSB7CiAJCQlkYmcgKCJzdWIgZHJpdmVyIHJlamVjdGVkIGRldmljZSIpOwpAQCAtOTkyLDcgKzY4Niw3IEBACiAjZW5kaWYKIAogCS8qIGZvdW5kIGFsbCB0aGF0IHdlIG5lZWQgKi8KLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICIlcyBjb252ZXJ0ZXIgZGV0ZWN0ZWRcbiIsIHR5cGUtPm5hbWUpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIiVzIGNvbnZlcnRlciBkZXRlY3RlZFxuIiwgdHlwZS0+ZGVzY3JpcHRpb24pOwogCiAjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQwogCWlmICh0eXBlID09ICZ1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlKSB7CkBAIC0xMDA3LDEzICs3MDEsMTMgQEAKIAlpZiAoIW51bV9wb3J0cykgewogCQkvKiBpZiB0aGlzIGRldmljZSB0eXBlIGhhcyBhIGNhbGNfbnVtX3BvcnRzIGZ1bmN0aW9uLCBjYWxsIGl0ICovCiAJCWlmICh0eXBlLT5jYWxjX251bV9wb3J0cykgewotCQkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5vd25lcikpIHsKKwkJCWlmICghdHJ5X21vZHVsZV9nZXQodHlwZS0+ZHJpdmVyLm93bmVyKSkgewogCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOwogCQkJCWtmcmVlIChzZXJpYWwpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQkJbnVtX3BvcnRzID0gdHlwZS0+Y2FsY19udW1fcG9ydHMgKHNlcmlhbCk7Ci0JCQltb2R1bGVfcHV0KHR5cGUtPm93bmVyKTsKKwkJCW1vZHVsZV9wdXQodHlwZS0+ZHJpdmVyLm93bmVyKTsKIAkJfQogCQlpZiAoIW51bV9wb3J0cykKIAkJCW51bV9wb3J0cyA9IHR5cGUtPm51bV9wb3J0czsKQEAgLTExNTgsMTIgKzg1MiwxMiBAQAogCQogCS8qIGlmIHRoaXMgZGV2aWNlIHR5cGUgaGFzIGFuIGF0dGFjaCBmdW5jdGlvbiwgY2FsbCBpdCAqLwogCWlmICh0eXBlLT5hdHRhY2gpIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5vd25lcikpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5kcml2ZXIub3duZXIpKSB7CiAJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCX0KIAkJcmV0dmFsID0gdHlwZS0+YXR0YWNoIChzZXJpYWwpOwotCQltb2R1bGVfcHV0KHR5cGUtPm93bmVyKTsKKwkJbW9kdWxlX3B1dCh0eXBlLT5kcml2ZXIub3duZXIpOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCWlmIChyZXR2YWwgPiAwKSB7CkBAIC0xMzMwLDcgKzEwMjQsNyBAQAogCQlnb3RvIGV4aXRfZ2VuZXJpYzsKIAl9CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJaW5mbyhEUklWRVJfREVTQyk7CiAKIAlyZXR1cm4gcmVzdWx0OwogCkBAIC0xMzc1LDcgKzEwNjksNyBAQAogCQkJfQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBmaXh1cF9nZW5lcmljKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBmaXh1cF9nZW5lcmljKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZGV2aWNlKQogewogCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBvcGVuKTsKIAlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgd3JpdGUpOwpAQCAtMTM4NywzMCArMTA4MSwzMyBAQAogCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBzaHV0ZG93bik7CiB9CiAKLWludCB1c2Jfc2VyaWFsX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpuZXdfZGV2aWNlKQoraW50IHVzYl9zZXJpYWxfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkcml2ZXIpCiB7CiAJaW50IHJldHZhbDsKIAotCWZpeHVwX2dlbmVyaWMobmV3X2RldmljZSk7CisJZml4dXBfZ2VuZXJpYyhkcml2ZXIpOworCisJaWYgKCFkcml2ZXItPmRlc2NyaXB0aW9uKQorCQlkcml2ZXItPmRlc2NyaXB0aW9uID0gZHJpdmVyLT5kcml2ZXIubmFtZTsKIAogCS8qIEFkZCB0aGlzIGRldmljZSB0byBvdXIgbGlzdCBvZiBkZXZpY2VzICovCi0JbGlzdF9hZGQoJm5ld19kZXZpY2UtPmRyaXZlcl9saXN0LCAmdXNiX3NlcmlhbF9kcml2ZXJfbGlzdCk7CisJbGlzdF9hZGQoJmRyaXZlci0+ZHJpdmVyX2xpc3QsICZ1c2Jfc2VyaWFsX2RyaXZlcl9saXN0KTsKIAotCXJldHZhbCA9IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyKG5ld19kZXZpY2UpOworCXJldHZhbCA9IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyKGRyaXZlcik7CiAJaWYgKHJldHZhbCkgewotCQllcnIoInByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyBkcml2ZXIgJXMiLCByZXR2YWwsIG5ld19kZXZpY2UtPm5hbWUpOwotCQlsaXN0X2RlbCgmbmV3X2RldmljZS0+ZHJpdmVyX2xpc3QpOworCQllcnIoInByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyBkcml2ZXIgJXMiLCByZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlsaXN0X2RlbCgmZHJpdmVyLT5kcml2ZXJfbGlzdCk7CiAJfQogCWVsc2UKLQkJaW5mbygiVVNCIFNlcmlhbCBzdXBwb3J0IHJlZ2lzdGVyZWQgZm9yICVzIiwgbmV3X2RldmljZS0+bmFtZSk7CisJCWluZm8oIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlcyIsIGRyaXZlci0+ZGVzY3JpcHRpb24pOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogCi12b2lkIHVzYl9zZXJpYWxfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKQordm9pZCB1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkZXZpY2UpCiB7Ci0JaW5mbygiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIGRldmljZS0+bmFtZSk7CisJaW5mbygiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIGRldmljZS0+ZGVzY3JpcHRpb24pOwogCWxpc3RfZGVsKCZkZXZpY2UtPmRyaXZlcl9saXN0KTsKIAl1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyKGRldmljZSk7CiB9CkBAIC0xNDI5LDcgKzExMjYsNiBAQAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCiBNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7Ci1NT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaAppbmRleCA1N2Y5MmYwLi4yMzhhNWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKQEAgLTEsNTMgKzEsMTMgQEAKIC8qCiAgKiBVU0IgU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKICAqCi0gKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA0CisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA1CiAgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KICAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKLSAqCi0gKiAoMDMvMjYvMjAwMikgZ2toCi0gKglyZW1vdmVkIHRoZSBwb3J0LT50dHkgY2hlY2sgZnJvbSBwb3J0X3BhcmFub2lhX2NoZWNrKCkgZHVlIHRvIHNlcmlhbAotICoJY29uc29sZXMgbm90IGhhdmluZyBhIHR0eSBkZXZpY2UgYXNzaWduZWQgdG8gdGhlbS4KLSAqCi0gKiAoMTIvMDMvMjAwMSkgZ2toCi0gKglyZW1vdmVkIGFjdGl2ZSBmcm9tIHRoZSBwb3J0IHN0cnVjdHVyZS4KLSAqCWFkZGVkIGRvY3VtZW50YXRpb24gdG8gdGhlIHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgc3RydWN0dXJlCi0gKgotICogKDEwLzEwLzIwMDEpIGdraAotICoJYWRkZWQgdmVuZG9yIGFuZCBwcm9kdWN0IHRvIHNlcmlhbCBzdHJ1Y3R1cmUuICBOZWVkZWQgdG8gZGV0ZXJtaW5lIGRldmljZQotICoJb3duZXIgd2hlbiB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZC4KLSAqCi0gKiAoMDUvMzAvMjAwMSkgZ2toCi0gKglhZGRlZCBzZW0gdG8gcG9ydCBzdHJ1Y3R1cmUgYW5kIHJlbW92ZWQgcG9ydF9sb2NrCi0gKgotICogKDEwLzA1LzIwMDApIGdraAotICoJQWRkZWQgaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyBhbmQgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MgdG8gaGVscAotICoJZml4IGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IgY29yZQotICoJbmVlZHMgaXQuCi0gKiAKLSAqICgwOS8xMS8yMDAwKSBna2gKLSAqCUFkZGVkIHVzYl9zZXJpYWxfZGVidWdfZGF0YSBmdW5jdGlvbiB0byBoZWxwIGdldCByaWQgb2YgI0RFQlVHIGluIHRoZQotICoJZHJpdmVycy4KLSAqCi0gKiAoMDgvMjgvMjAwMCkgZ2toCi0gKglBZGRlZCBwb3J0X2xvY2sgdG8gcG9ydCBzdHJ1Y3R1cmUuCi0gKgotICogKDA4LzA4LzIwMDApIGdraAotICoJQWRkZWQgb3Blbl9jb3VudCB0byBwb3J0IHN0cnVjdHVyZS4KLSAqCi0gKiAoMDcvMjMvMjAwMCkgZ2toCi0gKglBZGRlZCBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgdG8gcG9ydCBzdHJ1Y3R1cmUuCi0gKgotICogKDA3LzE5LzIwMDApIGdraCwgcGJlcmdlciwgYW5kIGJvcmNoZXJzCi0gKglNb2RpZmljYXRpb25zIHRvIGFsbG93IHVzYi1zZXJpYWwgZHJpdmVycyB0byBiZSBtb2R1bGVzLgotICoKLSAqIAogICovCiAKIApAQCAtMTQzLDcgKzEwMyw3IEBACiAvKioKICAqIHVzYl9zZXJpYWwgLSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgdXNiLXNlcmlhbCBjb3JlIGZvciBhIGRldmljZQogICogQGRldjogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9kZXZpY2UgZm9yIHRoaXMgZGV2aWNlCi0gKiBAdHlwZTogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZm9yIHRoaXMgZGV2aWNlCisgKiBAdHlwZTogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGZvciB0aGlzIGRldmljZQogICogQGludGVyZmFjZTogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9pbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlCiAgKiBAbWlub3I6IHRoZSBzdGFydGluZyBtaW5vciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlCiAgKiBAbnVtX3BvcnRzOiB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoaXMgZGV2aWNlIGhhcwpAQCAtMTU5LDcgKzExOSw3IEBACiAgKi8KIHN0cnVjdCB1c2Jfc2VyaWFsIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqCQlkZXY7Ci0Jc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKgl0eXBlOworCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqCXR5cGU7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKgkJaW50ZXJmYWNlOwogCXVuc2lnbmVkIGNoYXIJCQltaW5vcjsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRzOwpAQCAtMTg4LDEzICsxNDgsOSBAQAogfQogCiAvKioKLSAqIHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgLSBhIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYSB1c2Igc2VyaWFsIGRldmljZQotICogQG93bmVyOiBwb2ludGVyIHRvIHRoZSBtb2R1bGUgdGhhdCBvd25zIHRoaXMgZGV2aWNlLgotICogQG5hbWU6IHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyBkZXZpY2UuICBUaGlzIHN0cmluZyB1c2VkCisgKiB1c2Jfc2VyaWFsX2RyaXZlciAtIGRlc2NyaWJlcyBhIHVzYiBzZXJpYWwgZHJpdmVyCisgKiBAZGVzY3JpcHRpb246IHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyBkcml2ZXIuICBUaGlzIHN0cmluZyB1c2VkCiAgKglpbiB0aGUgc3lzbG9nIG1lc3NhZ2VzIHdoZW4gYSBkZXZpY2UgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KLSAqIEBzaG9ydF9uYW1lOiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyBkZXZpY2UgaW4KLSAqCUtPQkpfTkFNRV9MRU4gY2hhcmFjdGVycyBvciBsZXNzLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlCi0gKgl0byBkZXNjcmliZSB0aGUgZHJpdmVyLgogICogQGlkX3RhYmxlOiBwb2ludGVyIHRvIGEgbGlzdCBvZiB1c2JfZGV2aWNlX2lkIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgYWxsCiAgKglvZiB0aGUgZGV2aWNlcyB0aGlzIHN0cnVjdHVyZSBjYW4gc3VwcG9ydC4KICAqIEBudW1faW50ZXJydXB0X2luOiB0aGUgbnVtYmVyIG9mIGludGVycnVwdCBpbiBlbmRwb2ludHMgdGhpcyBkZXZpY2Ugd2lsbApAQCAtMjIxLDE2ICsxNzcsMTkgQEAKICAqIEBzaHV0ZG93bjogcG9pbnRlciB0byB0aGUgZHJpdmVyJ3Mgc2h1dGRvd24gZnVuY3Rpb24uICBUaGlzIHdpbGwgYmUKICAqCWNhbGxlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCiAgKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lcyBhIFVTQiBTZXJpYWwgZGV2aWNlLiAgSXQgcHJvdmlkZXMgYWxsIG9mCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVzIGEgVVNCIFNlcmlhbCBkcml2ZXIuICBJdCBwcm92aWRlcyBhbGwgb2YKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBVU0Igc2VyaWFsIGNvcmUgY29kZSBuZWVkcy4gIElmIHRoZSBmdW5jdGlvbgogICogcG9pbnRlcnMgYXJlIGRlZmluZWQsIHRoZW4gdGhlIFVTQiBzZXJpYWwgY29yZSBjb2RlIHdpbGwgY2FsbCB0aGVtIHdoZW4KICAqIHRoZSBjb3JyZXNwb25kaW5nIHR0eSBwb3J0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiAgSWYgdGhleSBhcmUgbm90CiAgKiBjYWxsZWQsIHRoZSBnZW5lcmljIHNlcmlhbCBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKyAqCisgKiBUaGUgZHJpdmVyLm93bmVyIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBvd25lciBvZiB0aGlzIGRyaXZlci4KKyAqIFRoZSBkcml2ZXIubmFtZSBmaWVsZCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoaXMgZHJpdmVyIChyZW1lbWJlcgorICogaXQgd2lsbCBzaG93IHVwIGluIHN5c2ZzLCBzbyBpdCBuZWVkcyB0byBiZSBzaG9ydCBhbmQgdG8gdGhlIHBvaW50LgorICogVXNlaW5nIHRoZSBtb2R1bGUgbmFtZSBpcyBhIGdvb2QgaWRlYS4pCiAgKi8KLXN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQljaGFyCSpuYW1lOwotCWNoYXIJKnNob3J0X25hbWU7CitzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgeworCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOwogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZTsKIAljaGFyCW51bV9pbnRlcnJ1cHRfaW47CiAJY2hhcgludW1faW50ZXJydXB0X291dDsKQEAgLTI2OSwxMCArMjI4LDEwIEBACiAJdm9pZCAoKnJlYWRfYnVsa19jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAJdm9pZCAoKndyaXRlX2J1bGtfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogfTsKLSNkZWZpbmUgdG9fdXNiX3NlcmlhbF9kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlLCBkcml2ZXIpCisjZGVmaW5lIHRvX3VzYl9zZXJpYWxfZHJpdmVyKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIsIGRyaXZlcikKIAotZXh0ZXJuIGludCAgdXNiX3NlcmlhbF9yZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqbmV3X2RldmljZSk7Ci1leHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRldmljZSk7CitleHRlcm4gaW50ICB1c2Jfc2VyaWFsX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRyaXZlcik7CiBleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX3BvcnRfc29mdGludCh2b2lkICpwcml2YXRlKTsKIAogZXh0ZXJuIGludCB1c2Jfc2VyaWFsX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKQEAgLTMwMywxMCArMjYyLDEwIEBACiBleHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19yZWdpc3RlciAoaW50IGRlYnVnKTsKIGV4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19kZXJlZ2lzdGVyICh2b2lkKTsKIAotZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2J1c19yZWdpc3RlciAoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRldmljZSk7Ci1leHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKTsKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZGV2aWNlKTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZGV2aWNlKTsKIAotZXh0ZXJuIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2U7CiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHVzYl9zZXJpYWxfYnVzX3R5cGU7CiBleHRlcm4gc3RydWN0IHR0eV9kcml2ZXIgKnVzYl9zZXJpYWxfdHR5X2RyaXZlcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwppbmRleCAzMWM1N2FkLi5hNDczYzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwpAQCAtNywxMzkgKzcsMTAgQEAKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKICAqCi0gKiAoMDYvMDMvMjAwMykgSnVkZCBNb250Z29tZXJ5IDxqdWRkIGF0IGpwaWxvdC5vcmc+Ci0gKiAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbW9kdWxlIHBhcmFtZXRlciBvcHRpb25zIGZvciB1bnRlc3RlZC91bmtub3duCi0gKiAgICAgZGV2aWNlcy4KLSAqCi0gKiAoMDMvMDkvMjAwMykgZ2toCi0gKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgU29ueSBDbGllIE5aOTBWIGRldmljZS4gIFRoYW5rcyB0byBNYXJ0aW4gQnJhY2h0bAotICoJPGJyYWNodGxAcmVkZ3JlcC5jej4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiAoMDMvMDUvMjAwMykgZ2toCi0gKglUaGluayBUcmVvIHN1cHBvcnQgaXMgbm93IHdvcmtpbmcuCi0gKgotICogKDA0LzAzLzIwMDIpIGdraAotICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFNvbnkgT1MgNC4xIGRldmljZXMuICBUaGFua3MgdG8gSGlyb3l1a2kgQVJBS0kKLSAqCTxoaXJvQHpvYi5uZS5qcD4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiAoMDMvMjcvMjAwMikgZ2toCi0gKglSZW1vdmVkIGFzc3VtcHRpb25zIHRoYXQgcG9ydC0+dHR5IHdhcyBhbHdheXMgdmFsaWQgKGlzIG5vdCB0cnVlCi0gKglmb3IgdXNiIHNlcmlhbCBjb25zb2xlIGRldmljZXMuKQotICoKLSAqICgwMy8yMy8yMDAyKSBna2gKLSAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBQYWxtIGk3MDUgZGV2aWNlLCB0aGFua3MgdG8gVGhvbWFzIFJpZW1lcgotICoJPHRvbUBuZXRtZWNoLmNvbT4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiAoMDMvMjEvMjAwMikgZ2toCi0gKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgUGFsbSBtMTMwIGRldmljZSwgdGhhbmtzIHRvIFVkbyBFaXNlbmJhcnRoCi0gKgk8dWRvLmVpc2VuYmFydGhAd2ViLmRlPiBmb3IgdGhlIGluZm9ybWF0aW9uLgotICoKLSAqICgwMi8yNy8yMDAyKSBna2gKLSAqCVJld29ya2VkIHRoZSB1cmIgaGFuZGxpbmcgbG9naWMuICBXZSBoYXZlIG5vIG1vcmUgcG9vbCwgYnV0IGR5bmFtaWNhbGx5Ci0gKglhbGxvY2F0ZSB0aGUgdXJiIGFuZCB0aGUgdHJhbnNmZXIgYnVmZmVyIG9uIHRoZSBmbHkuICBJbiB0ZXN0aW5nIHRoaXMKLSAqCWRvZXMgbm90IGluY3VyZSBhbnkgbWVhc3VyYWJsZSBvdmVyaGVhZC4gIFRoaXMgYWxzbyByZWxpZXMgb24gdGhlIGZhY3QKLSAqCXRoYXQgd2UgaGF2ZSBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGZvciB1cmJzLgotICoKLSAqICgwMi8yMS8yMDAyKSBTaWxhUwotICogIEFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIFBhbG0gbTUxNSBkZXZpY2VzLgotICoKLSAqICgwMi8xNC8yMDAyKSBna2gKLSAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDbGllIFMtMzYwIGRldmljZS4KLSAqCi0gKiAoMTIvMTgvMjAwMSkgZ2toCi0gKglBZGRlZCBiZXR0ZXIgQ2xpZSBzdXBwb3J0IGZvciAzLjUgZGV2aWNlcy4gIFRoYW5rcyB0byBHZW9mZnJleSBMZXZhbmQKLSAqCWZvciB0aGUgcGF0Y2guCi0gKgotICogKDExLzExLzIwMDEpIGdraAotICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIG0xMjUgZGV2aWNlcywgYW5kIGFkZGVkIGNoZWNrIHRvIHByZXZlbnQgb29wc2VzCi0gKglmb3IgQ2xp6SBkZXZpY2VzIHRoYXQgbGllIGFib3V0IHRoZSBudW1iZXIgb2YgcG9ydHMgdGhleSBoYXZlLgotICoKLSAqICgwOC8zMC8yMDAxKSBna2gKLSAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDbGllIGRldmljZXMsIGJvdGggdGhlIDMuNSBhbmQgNC4wIG9zIHZlcnNpb25zLgotICoJTWFueSB0aGFua3MgdG8gRGFuaWVsIEJ1cmtlLCBhbmQgQnJ5YW4gUGF5bmUgZm9yIGhlbHBpbmcgd2l0aCB0aGlzLgotICoKLSAqICgwOC8yMy8yMDAxKSBna2gKLSAqCWZpeGVkIGEgZmV3IHBvdGVudGlhbCBidWdzIHBvaW50ZWQgb3V0IGJ5IE9saXZlciBOZXVrdW0uCi0gKgotICogKDA1LzMwLzIwMDEpIGdraAotICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KLSAqCi0gKiAoMDUvMjgvMjAwMCkgZ2toCi0gKglBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBQYWxtIG01MDAgYW5kIFBhbG0gbTUwNSBkZXZpY2VzLgotICoKLSAqICgwNC8wOC8yMDAxKSBnYgotICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KLSAqCi0gKiAoMDEvMjEvMjAwMCkgZ2toCi0gKglBZGRlZCB3cml0ZV9yb29tIGFuZCBjaGFyc19pbl9idWZmZXIsIGFzIHRoZXkgd2VyZSBwcmV2aW91c2x5IHVzaW5nIHRoZQotICoJZ2VuZXJpYyBkcml2ZXIgdmVyc2lvbnMgd2hpY2ggaXMgYWxsIHdyb25nIG5vdyB0aGF0IHdlIGFyZSB1c2luZyBhbiB1cmIKLSAqCXBvb2wuICBUaGFua3MgdG8gV29sZmdhbmcgR3JhbmRlZ2dlciBmb3IgcG9pbnRpbmcgdGhpcyBvdXQgdG8gbWUuCi0gKglSZW1vdmVkIGNvdW50IGFzc2lnbm1lbnQgaW4gdGhlIHdyaXRlIGZ1bmN0aW9uLCB3aGljaCB3YXMgbm90IG5lZWRlZCBhbnltb3JlCi0gKgllaXRoZXIuICBUaGFua3MgdG8gQWwgQm9yY2hlcnMgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgotICoKLSAqICgxMi8xMi8yMDAwKSBna2gKLSAqCU1vdmVkIE1PRF9ERUMgdG8gZW5kIG9mIHZpc29yX2Nsb3NlIHRvIGJlIG5pY2VyLCBhcyB0aGUgZmluYWwgd3JpdGUgCi0gKgltZXNzYWdlIGNhbiBzbGVlcC4KLSAqIAotICogKDExLzEyLzIwMDApIGdraAotICoJRml4ZWQgYnVnIHdpdGggZGF0YSBiZWluZyBkcm9wcGVkIG9uIHRoZSBmbG9vciBieSBmb3JjaW5nIHR0eS0+bG93X2xhdGVuY3kKLSAqCXRvIGJlIG9uLiAgSG9wZWZ1bGx5IHRoaXMgZml4ZXMgdGhlIE9IQ0kgaXNzdWUhCi0gKgotICogKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgotICoJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0Ci0gKiAKLSAqICgxMC8wNS8yMDAwKSBna2gKLSAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKLSAqCWNvcmUgbmVlZHMgaXQuCi0gKiAKLSAqICgwOS8xMS8yMDAwKSBna2gKLSAqCUdvdCByaWQgb2YgYWx3YXlzIGNhbGxpbmcga21hbGxvYyBmb3IgZXZlcnkgdXJiIHdlIHdyb3RlIG91dCB0byB0aGUKLSAqCWRldmljZS4KLSAqCUFkZGVkIHZpc29yX3JlYWRfY2FsbGJhY2sgc28gd2UgY2FuIGtlZXAgdHJhY2sgb2YgYnl0ZXMgaW4gYW5kIG91dCBmb3IKLSAqCXRob3NlIHBlb3BsZSB3aG8gbGlrZSB0byBrbm93IHRoZSBzcGVlZCBvZiB0aGVpciBkZXZpY2UuCi0gKglSZW1vdmVkIERFQlVHICNpZmRlZnMgd2l0aCBjYWxsIHRvIHVzYl9zZXJpYWxfZGVidWdfZGF0YQotICoKLSAqICgwOS8wNi8yMDAwKSBna2gKLSAqCUZpeGVkIG9vcHMgaW4gdmlzb3JfZXhpdC4gIE5lZWQgdG8gdW5jb21tZW50IHVzYl91bmxpbmtfdXJiIGNhbGwgX2FmdGVyXwotICoJdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIHNldCB1cmItPmRldiA9IE5VTEwgd2hlbiB0aGUgdXJiIGlzIGZpbmlzaGVkLgotICoKLSAqICgwOC8yOC8yMDAwKSBna2gKLSAqCUFkZGVkIGxvY2tzIGZvciBTTVAgc2FmZW5lc3MuCi0gKgotICogKDA4LzA4LzIwMDApIGdraAotICoJRml4ZWQgZW5kaWFuIHByb2JsZW0gaW4gdmlzb3Jfc3RhcnR1cC4KLSAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUgCi0gKgl0aGFuIG9uY2UuCi0gKiAKLSAqICgwNy8yMy8yMDAwKSBna2gKLSAqCUFkZGVkIHBvb2wgb2Ygd3JpdGUgdXJicyB0byBzcGVlZCB1cCB0cmFuc2ZlcnMgdG8gdGhlIHZpc29yLgotICogCi0gKiAoMDcvMTkvMjAwMCkgZ2toCi0gKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKLSAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCi0gKgotICogKDA3LzAzLzIwMDApIGdraAotICoJQWRkZWQgdmlzb3Jfc2V0X2lvY3RsIGFuZCB2aXNvcl9zZXRfdGVybWlvcyBmdW5jdGlvbnMgKHRoZXkgZG9uJ3QgZG8gbXVjaAotICoJb2YgYW55dGhpbmcsIGJ1dCBhcmUgZ29vZCBmb3IgZGVidWdnaW5nLikKLSAqIAotICogKDA2LzI1LzIwMDApIGdraAotICoJRml4ZWQgYnVnIGluIHZpc29yX3VudGhyb3R0bGUgdGhhdCBzaG91bGQgaGVscCB3aXRoIHRoZSBkaXNjb25uZWN0IGluIFBQUAotICoJYnVnIHRoYXQgcGVvcGxlIGhhdmUgYmVlbiByZXBvcnRpbmcuCi0gKgotICogKDA2LzIzLzIwMDApIGdraAotICoJQ2xlYW5lZCB1cCBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBpbiBhIHF1ZXN0IHRvIGZpbmQgVUhDSSB0aW1lb3V0IGJ1Zy4KLSAqCi0gKiAoMDQvMjcvMjAwMCkgUnlhbiBWYW5kZXJCaWpsCi0gKiAJRml4ZWQgbWVtb3J5IGxlYWsgaW4gdmlzb3JfY2xvc2UKLSAqCi0gKiAoMDMvMjYvMjAwMCkgZ2toCi0gKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgotICogCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTYxLDcgKzMyLDYgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjEiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEhhbmRTcHJpbmcgVmlzb3IgLyBQYWxtIE9TIGRyaXZlciIKIApAQCAtMzExLDEwICsxODEsMTIgQEAKIH07CiAKIC8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgSGFuZHNwcmluZyBWaXNvciwgYW5kIFBhbG0gNC4wIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBoYW5kc3ByaW5nX2RldmljZSA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkJCSJIYW5kc3ByaW5nIFZpc29yIC8gUGFsbSBPUyIsCi0JLnNob3J0X25hbWUgPQkJInZpc29yIiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgaGFuZHNwcmluZ19kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJ2aXNvciIsCisJfSwKKwkuZGVzY3JpcHRpb24gPQkJIkhhbmRzcHJpbmcgVmlzb3IgLyBQYWxtIE9TIiwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbiA9CQkyLApAQCAtMzM5LDEwICsyMTEsMTIgQEAKIH07CiAKIC8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgQ2xpZSBVWDUwLCBUSDU1IFBhbG0gNS4wIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjbGllXzVfZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIlNvbnkgQ2xpZSA1LjAiLAotCS5zaG9ydF9uYW1lID0JCSJjbGllXzUiLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjbGllXzVfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiY2xpZV81IiwKKwl9LAorCS5kZXNjcmlwdGlvbiA9CQkiU29ueSBDbGllIDUuMCIsCiAJLmlkX3RhYmxlID0JCWNsaWVfaWRfNV90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luID0JCTIsCkBAIC0zNjcsMTAgKzI0MSwxMiBAQAogfTsKIAogLyogZGV2aWNlIGluZm8gZm9yIHRoZSBTb255IENsaWUgT1MgdmVyc2lvbiAzLjUgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjbGllXzNfNV9kZXZpY2UgPSB7Ci0JLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5uYW1lID0JCQkiU29ueSBDbGllIDMuNSIsCi0JLnNob3J0X25hbWUgPQkJImNsaWVfMy41IiwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY2xpZV8zXzVfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiY2xpZV8zLjUiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJTb255IENsaWUgMy41IiwKIAkuaWRfdGFibGUgPQkJY2xpZV9pZF8zXzVfdGFibGUsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAogCS5udW1fYnVsa19pbiA9CQkxLApAQCAtNzgyLDcgKzY1OCw3IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQkJZGV2X2luZm8oZGV2LCAiJXM6IHBvcnQgJWQsIGlzIGZvciAlcyB1c2VcbiIsCi0JCQkJc2VyaWFsLT50eXBlLT5uYW1lLAorCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sCiAJCQkJY29ubmVjdGlvbl9pbmZvLT5jb25uZWN0aW9uc1tpXS5wb3J0LCBzdHJpbmcpOwogCQl9CiAJfQpAQCAtNzkxLDExICs2NjcsMTEgQEAKIAkqLwogCWlmIChudW1fcG9ydHMgPT0gMCB8fCBudW1fcG9ydHMgPiAyKSB7CiAJCWRldl93YXJuIChkZXYsICIlczogTm8gdmFsaWQgY29ubmVjdCBpbmZvIGF2YWlsYWJsZVxuIiwKLQkJCXNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAkJbnVtX3BvcnRzID0gMjsKIAl9CiAgIAotCWRldl9pbmZvKGRldiwgIiVzOiBOdW1iZXIgb2YgcG9ydHM6ICVkXG4iLCBzZXJpYWwtPnR5cGUtPm5hbWUsCisJZGV2X2luZm8oZGV2LCAiJXM6IE51bWJlciBvZiBwb3J0czogJWRcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sCiAJCW51bV9wb3J0cyk7CiAKIAkvKgpAQCAtMTEyNSw3ICsxMDAxLDcgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnZpc29yX2RyaXZlcik7CiAJaWYgKHJldHZhbCkgCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJaW5mbyhEUklWRVJfREVTQyk7CiAKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggY2YzYmMzMC4uMThjMzE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtMTU2LDEwICsxNTYsMTIgQEAKIHN0YXRpYyB2b2lkIHdoaXRlaGVhdF9yZWFkX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIHN0YXRpYyB2b2lkIHdoaXRlaGVhdF93cml0ZV9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB3aGl0ZWhlYXRfZmFrZV9kZXZpY2UgPSB7Ci0JLm93bmVyID0JCVRISVNfTU9EVUxFLAotCS5uYW1lID0JCQkiQ29ubmVjdCBUZWNoIC0gV2hpdGVIRUFUIC0gKHByZXJlbnVtZXJhdGlvbikiLAotCS5zaG9ydF9uYW1lID0JCSJ3aGl0ZWhlYXRub2Zpcm0iLAorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB3aGl0ZWhlYXRfZmFrZV9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJ3aGl0ZWhlYXRub2Zpcm0iLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJDb25uZWN0IFRlY2ggLSBXaGl0ZUhFQVQgLSAocHJlcmVudW1lcmF0aW9uKSIsCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlX3ByZXJlbnVtZXJhdGlvbiwKIAkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCkBAIC0xNjksMTAgKzE3MSwxMiBAQAogCS5hdHRhY2ggPQkJd2hpdGVoZWF0X2Zpcm13YXJlX2F0dGFjaCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB3aGl0ZWhlYXRfZGV2aWNlID0gewotCS5vd25lciA9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJIkNvbm5lY3QgVGVjaCAtIFdoaXRlSEVBVCIsCi0JLnNob3J0X25hbWUgPQkJIndoaXRlaGVhdCIsCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHdoaXRlaGVhdF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJ3aGl0ZWhlYXQiLAorCX0sCisJLmRlc2NyaXB0aW9uID0JCSJDb25uZWN0IFRlY2ggLSBXaGl0ZUhFQVQiLAogCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zdGQsCiAJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLApAQCAtMzgyLDEwICszODYsMTAgQEAKIAl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcGlwZSk7CiAJcmV0ID0gdXNiX2J1bGtfbXNnIChzZXJpYWwtPmRldiwgcGlwZSwgY29tbWFuZCwgMiwgJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CiAJaWYgKHJldCkgewotCQllcnIoIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmV0KTsKKwkJZXJyKCIlczogQ291bGRuJ3Qgc2VuZCBjb21tYW5kIFslZF0iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0gZWxzZSBpZiAoYWxlbiAhPSBzaXplb2YoY29tbWFuZCkpIHsKLQkJZXJyKCIlczogU2VuZCBjb21tYW5kIGluY29tcGxldGUgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgYWxlbik7CisJCWVycigiJXM6IFNlbmQgY29tbWFuZCBpbmNvbXBsZXRlIFslZF0iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBhbGVuKTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9CiAKQEAgLTM5NCwxOSArMzk4LDE5IEBACiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBpcGUpOwogCXJldCA9IHVzYl9idWxrX21zZyAoc2VyaWFsLT5kZXYsIHBpcGUsIHJlc3VsdCwgc2l6ZW9mKCpod19pbmZvKSArIDEsICZhbGVuLCBDT01NQU5EX1RJTUVPVVRfTVMpOwogCWlmIChyZXQpIHsKLQkJZXJyKCIlczogQ291bGRuJ3QgZ2V0IHJlc3VsdHMgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmV0KTsKKwkJZXJyKCIlczogQ291bGRuJ3QgZ2V0IHJlc3VsdHMgWyVkXSIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfSBlbHNlIGlmIChhbGVuICE9IHNpemVvZihyZXN1bHQpKSB7Ci0JCWVycigiJXM6IEdldCByZXN1bHRzIGluY29tcGxldGUgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgYWxlbik7CisJCWVycigiJXM6IEdldCByZXN1bHRzIGluY29tcGxldGUgWyVkXSIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIGFsZW4pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0gZWxzZSBpZiAocmVzdWx0WzBdICE9IGNvbW1hbmRbMF0pIHsKLQkJZXJyKCIlczogQ29tbWFuZCBmYWlsZWQgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmVzdWx0WzBdKTsKKwkJZXJyKCIlczogQ29tbWFuZCBmYWlsZWQgWyVkXSIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJlc3VsdFswXSk7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfQogCiAJaHdfaW5mbyA9IChzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2luZm8gKikmcmVzdWx0WzFdOwogCi0JaW5mbygiJXM6IERyaXZlciAlczogRmlybXdhcmUgdiVkLiUwMmQiLCBzZXJpYWwtPnR5cGUtPm5hbWUsCisJaW5mbygiJXM6IERyaXZlciAlczogRmlybXdhcmUgdiVkLiUwMmQiLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLAogCSAgICAgRFJJVkVSX1ZFUlNJT04sIGh3X2luZm8tPnN3X21ham9yX3JldiwgaHdfaW5mby0+c3dfbWlub3JfcmV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CkBAIC00MTQsNyArNDE4LDcgQEAKIAogCQlpbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCQlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCQkJZ290byBub19wcml2YXRlOwogCQl9CiAKQEAgLTQ4NCw3ICs0ODgsNyBAQAogCiAJY29tbWFuZF9pbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29tbWFuZF9pbmZvID09IE5VTEwpIHsKLQkJZXJyKCIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLCBzZXJpYWwtPnR5cGUtPm5hbWUpOworCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCQlnb3RvIG5vX2NvbW1hbmRfcHJpdmF0ZTsKIAl9CiAKQEAgLTUwMSw5ICs1MDUsOSBAQAogCiBub19maXJtd2FyZToKIAkvKiBGaXJtd2FyZSBsaWtlbHkgbm90IHJ1bm5pbmcgKi8KLQllcnIoIiVzOiBVbmFibGUgdG8gcmV0cmlldmUgZmlybXdhcmUgdmVyc2lvbiwgdHJ5IHJlcGx1Z2dpbmdcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7Ci0JZXJyKCIlczogSWYgdGhlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIChzdGF0dXMgbGVkIG5vdCBibGlua2luZylcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7Ci0JZXJyKCIlczogcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBjb25uZWN0dGVjaC5jb21cbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJZXJyKCIlczogVW5hYmxlIHRvIHJldHJpZXZlIGZpcm13YXJlIHZlcnNpb24sIHRyeSByZXBsdWdnaW5nXG4iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwllcnIoIiVzOiBJZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgKHN0YXR1cyBsZWQgbm90IGJsaW5raW5nKVxuIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZXJyKCIlczogcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBjb25uZWN0dGVjaC5jb21cbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCXJldHVybiAtRU5PREVWOwogCiBub19jb21tYW5kX3ByaXZhdGU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKaW5kZXggYmI5ODE5Yy4uMWE5Njc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpAQCAtMiw3ICsyLDggQEAKICMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb24KICMKIAotY29tbWVudCAiTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uIgorY29tbWVudCAiTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyIKK2NvbW1lbnQgIm1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24iCiAJZGVwZW5kcyBvbiBVU0IKIAogY29uZmlnIFVTQl9TVE9SQUdFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCmluZGV4IDM1NjM0MmMuLjMzYzU1YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCkBAIC0xLDQgKzEsNCBAQAotLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIFVTQi1BVEFQSSBjYWJsZQorLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlCiAgKgogICogJElkOiBzaHV0dGxlX3VzYmF0LmMsdiAxLjE3IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCiAgKgpAQCAtNjcsMTAgKzY3LDEwIEBACiBzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKIAogLyoKLSAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBUEkgcmVhZC93cml0ZSBzZWN0b3JzIGNvbW1hbmQKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBIHJlYWQvd3JpdGUgc2VjdG9ycyBjb21tYW5kCiAgKiBVc2UgY21kPTB4MjAgZm9yIHJlYWQsIGNtZD0weDMwIGZvciB3cml0ZQogICovCi1zdGF0aWMgdm9pZCB1c2JhdF9wYWNrX2F0YXBpX3NlY3Rvcl9jbWQodW5zaWduZWQgY2hhciAqYnVmLAorc3RhdGljIHZvaWQgdXNiYXRfcGFja19hdGFfc2VjdG9yX2NtZCh1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkJCXVuc2lnbmVkIGNoYXIgdGhpc3RpbWUsCiAJCQkJCXUzMiBzZWN0b3IsIHVuc2lnbmVkIGNoYXIgY21kKQogewpAQCAtMTk2LDEwICsxOTYsMTIgQEAKIAlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIAotCWlmICgqcmVwbHkgJiAweDAxICYmICpyZXBseSAhPSAweDUxKSAvLyBlcnJvci9jaGVjayBjb25kaXRpb24gKDB4NTEgaXMgb2spCisJLyogZXJyb3IvY2hlY2sgY29uZGl0aW9uICgweDUxIGlzIG9rKSAqLworCWlmICgqcmVwbHkgJiAweDAxICYmICpyZXBseSAhPSAweDUxKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIAotCWlmICgqcmVwbHkgJiAweDIwKSAvLyBkZXZpY2UgZmF1bHQKKwkvKiBkZXZpY2UgZmF1bHQgKi8KKwlpZiAoKnJlcGx5ICYgMHgyMCkKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CkBAIC0yMjIsMjkgKzIyNCwzOSBAQAogCWNvbW1hbmRbMF0gPSAweDQwOwogCWNvbW1hbmRbMV0gPSBVU0JBVF9DTURfU0VUX0ZFQVQ7CiAKLQkvLyBUaGUgb25seSBiaXQgcmVsZXZhbnQgdG8gQVRBIGFjY2VzcyBpcyBiaXQgNgotCS8vIHdoaWNoIGRlZmluZXMgOCBiaXQgZGF0YSBhY2Nlc3MgKHNldCkgb3IgMTYgYml0ICh1bnNldCkKKwkvKgorCSAqIFRoZSBvbmx5IGJpdCByZWxldmFudCB0byBBVEEgYWNjZXNzIGlzIGJpdCA2CisJICogd2hpY2ggZGVmaW5lcyA4IGJpdCBkYXRhIGFjY2VzcyAoc2V0KSBvciAxNiBiaXQgKHVuc2V0KQorCSAqLwogCWNvbW1hbmRbMl0gPSBlcHBfY29udHJvbDsKIAotCS8vIElmIEZDUSBpcyBzZXQgaW4gdGhlIHF1YWxpZmllciAoZGVmaW5lZCBpbiBSL1cgY21kKSwgdGhlbiBiaXRzIFUwLCBVMSwKLQkvLyBFVDEgYW5kIEVUMiBkZWZpbmUgYW4gZXh0ZXJuYWwgZXZlbnQgdG8gYmUgY2hlY2tlZCBmb3Igb24gZXZlbnQgb2YgYQotCS8vIF9yZWFkX2Jsb2NrcyBvciBfd3JpdGVfYmxvY2tzIG9wZXJhdGlvbi4gVGhlIHJlYWQvd3JpdGUgd2lsbCBub3QgdGFrZQotCS8vIHBsYWNlIHVubGVzcyB0aGUgZGVmaW5lZCB0cmlnZ2VyIHNpZ25hbCBpcyBhY3RpdmUuCisJLyoKKwkgKiBJZiBGQ1EgaXMgc2V0IGluIHRoZSBxdWFsaWZpZXIgKGRlZmluZWQgaW4gUi9XIGNtZCksIHRoZW4gYml0cyBVMCwgVTEsCisJICogRVQxIGFuZCBFVDIgZGVmaW5lIGFuIGV4dGVybmFsIGV2ZW50IHRvIGJlIGNoZWNrZWQgZm9yIG9uIGV2ZW50IG9mIGEKKwkgKiBfcmVhZF9ibG9ja3Mgb3IgX3dyaXRlX2Jsb2NrcyBvcGVyYXRpb24uIFRoZSByZWFkL3dyaXRlIHdpbGwgbm90IHRha2UKKwkgKiBwbGFjZSB1bmxlc3MgdGhlIGRlZmluZWQgdHJpZ2dlciBzaWduYWwgaXMgYWN0aXZlLgorCSAqLwogCWNvbW1hbmRbM10gPSBleHRlcm5hbF90cmlnZ2VyOwogCi0JLy8gVGhlIHJlc3VsdGFudCBieXRlIG9mIHRoZSBtYXNrIG9wZXJhdGlvbiAoc2VlIG1hc2tfYnl0ZSkgaXMgY29tcGFyZWQgZm9yCi0JLy8gZXF1aXZhbGVuY2Ugd2l0aCB0aGlzIHRlc3QgcGF0dGVybi4gSWYgZXF1YWwsIHRoZSByZWFkL3dyaXRlIHdpbGwgdGFrZQotCS8vIHBsYWNlLgorCS8qCisJICogVGhlIHJlc3VsdGFudCBieXRlIG9mIHRoZSBtYXNrIG9wZXJhdGlvbiAoc2VlIG1hc2tfYnl0ZSkgaXMgY29tcGFyZWQgZm9yCisJICogZXF1aXZhbGVuY2Ugd2l0aCB0aGlzIHRlc3QgcGF0dGVybi4gSWYgZXF1YWwsIHRoZSByZWFkL3dyaXRlIHdpbGwgdGFrZQorCSAqIHBsYWNlLgorCSAqLwogCWNvbW1hbmRbNF0gPSB0ZXN0X3BhdHRlcm47CiAKLQkvLyBUaGlzIHZhbHVlIGlzIGxvZ2ljYWxseSBBTkRlZCB3aXRoIHRoZSBzdGF0dXMgcmVnaXN0ZXIgZmllbGQgc3BlY2lmaWVkCi0JLy8gaW4gdGhlIHJlYWQvd3JpdGUgY29tbWFuZC4KKwkvKgorCSAqIFRoaXMgdmFsdWUgaXMgbG9naWNhbGx5IEFORGVkIHdpdGggdGhlIHN0YXR1cyByZWdpc3RlciBmaWVsZCBzcGVjaWZpZWQKKwkgKiBpbiB0aGUgcmVhZC93cml0ZSBjb21tYW5kLgorCSAqLwogCWNvbW1hbmRbNV0gPSBtYXNrX2J5dGU7CiAKLQkvLyBJZiBBTFEgaXMgc2V0IGluIHRoZSBxdWFsaWZpZXIsIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlCi0JLy8gcmVnaXN0ZXJzIHdoZXJlIHRoZSBieXRlIGNvdW50IHNob3VsZCBiZSByZWFkIGZvciB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEuCi0JLy8gSWYgQUxRIGlzIG5vdCBzZXQsIHRoZW4gdGhpcyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCi0JLy8gdHJhbnNmZXJyZWQuCisJLyoKKwkgKiBJZiBBTFEgaXMgc2V0IGluIHRoZSBxdWFsaWZpZXIsIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlCisJICogcmVnaXN0ZXJzIHdoZXJlIHRoZSBieXRlIGNvdW50IHNob3VsZCBiZSByZWFkIGZvciB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEuCisJICogSWYgQUxRIGlzIG5vdCBzZXQsIHRoZW4gdGhpcyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCisJICogdHJhbnNmZXJyZWQuCisJICovCiAJY29tbWFuZFs2XSA9IHN1YmNvdW50TDsKIAljb21tYW5kWzddID0gc3ViY291bnRIOwogCkBAIC0yNzMsMjYgKzI4NSwyNiBAQAogCiAJCWlmIChyZXN1bHQhPVVTQl9TVE9SX1hGRVJfR09PRCkKIAkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Ci0JCWlmICgqc3RhdHVzICYgMHgwMSkgeyAvLyBjaGVjayBjb25kaXRpb24KKwkJaWYgKCpzdGF0dXMgJiAweDAxKSB7IC8qIGNoZWNrIGNvbmRpdGlvbiAqLwogCQkJcmVzdWx0ID0gdXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCAweDEwLCBzdGF0dXMpOwogCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiAJCX0KLQkJaWYgKCpzdGF0dXMgJiAweDIwKSAvLyBkZXZpY2UgZmF1bHQKKwkJaWYgKCpzdGF0dXMgJiAweDIwKSAvKiBkZXZpY2UgZmF1bHQgKi8KIAkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogCi0JCWlmICgoKnN0YXR1cyAmIDB4ODApPT0weDAwKSB7IC8vIG5vdCBidXN5CisJCWlmICgoKnN0YXR1cyAmIDB4ODApPT0weDAwKSB7IC8qIG5vdCBidXN5ICovCiAJCQlVU19ERUJVR1AoIldhaXRlZCBub3QgYnVzeSBmb3IgJWQgc3RlcHNcbiIsIGkpOwogCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogCQl9CiAKIAkJaWYgKGk8NTAwKQotCQkJbXNsZWVwKDEwKTsgLy8gNSBzZWNvbmRzCisJCQltc2xlZXAoMTApOyAvKiA1IHNlY29uZHMgKi8KIAkJZWxzZSBpZiAoaTw3MDApCi0JCQltc2xlZXAoNTApOyAvLyAxMCBzZWNvbmRzCisJCQltc2xlZXAoNTApOyAvKiAxMCBzZWNvbmRzICovCiAJCWVsc2UgaWYgKGk8MTIwMCkKLQkJCW1zbGVlcCgxMDApOyAvLyA1MCBzZWNvbmRzCisJCQltc2xlZXAoMTAwKTsgLyogNTAgc2Vjb25kcyAqLwogCQllbHNlCi0JCQltc2xlZXAoMTAwMCk7IC8vIFggbWludXRlcworCQkJbXNsZWVwKDEwMDApOyAvKiBYIG1pbnV0ZXMgKi8KIAl9CiAKIAlVU19ERUJVR1AoIldhaXRlZCBub3QgYnVzeSBmb3IgJWQgbWludXRlcywgdGltaW5nIG91dC5cbiIsCkBAIC00MTIsOSArNDI0LDEyIEBACiAKIAkJaWYgKGk9PTApIHsKIAkJCWNtZGxlbiA9IDE2OwotCQkJLy8gV3JpdGUgdG8gbXVsdGlwbGUgcmVnaXN0ZXJzCi0JCQkvLyBOb3QgcmVhbGx5IHN1cmUgdGhlIDB4MDcsIDB4MTcsIDB4ZmMsIDB4ZTcgaXMgbmVjZXNzYXJ5IGhlcmUsCi0JCQkvLyBidXQgdGhhdCdzIHdoYXQgY2FtZSBvdXQgb2YgdGhlIHRyYWNlIGV2ZXJ5IHNpbmdsZSB0aW1lLgorCQkJLyoKKwkJCSAqIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVycworCQkJICogTm90IHJlYWxseSBzdXJlIHRoZSAweDA3LCAweDE3LCAweGZjLCAweGU3IGlzCisJCQkgKiBuZWNlc3NhcnkgaGVyZSwgYnV0IHRoYXQncyB3aGF0IGNhbWUgb3V0IG9mIHRoZQorCQkJICogdHJhY2UgZXZlcnkgc2luZ2xlIHRpbWUuCisJCQkgKi8KIAkJCWNvbW1hbmRbMF0gPSAweDQwOwogCQkJY29tbWFuZFsxXSA9IGFjY2VzcyB8IFVTQkFUX0NNRF9XUklURV9SRUdTOwogCQkJY29tbWFuZFsyXSA9IDB4MDc7CkBAIC00MjYsNyArNDQxLDcgQEAKIAkJfSBlbHNlCiAJCQljbWRsZW4gPSA4OwogCi0JCS8vIENvbmRpdGlvbmFsbHkgcmVhZCBvciB3cml0ZSBibG9ja3MKKwkJLyogQ29uZGl0aW9uYWxseSByZWFkIG9yIHdyaXRlIGJsb2NrcyAqLwogCQljb21tYW5kW2NtZGxlbi04XSA9IChkaXJlY3Rpb249PURNQV9UT19ERVZJQ0UgPyAweDQwIDogMHhDMCk7CiAJCWNvbW1hbmRbY21kbGVuLTddID0gYWNjZXNzIHwKIAkJCQkoZGlyZWN0aW9uPT1ETUFfVE9fREVWSUNFID8KQEAgLTQ1NiwxMSArNDcxLDYgQEAKIAogCQl9CiAKLQotCQkvL1VTX0RFQlVHUCgiVHJhbnNmZXIgJXMgJWQgYnl0ZXMsIHNnIGJ1ZmZlcnMgJWRcbiIsCi0JCS8vCWRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFID8gIm91dCIgOiAiaW4iLAotCQkvLwlsZW4sIHVzZV9zZyk7Ci0KIAkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyh1cywKIAkJCXBpcGUsIGNvbnRlbnQsIGxlbiwgdXNlX3NnLCBOVUxMKTsKIApAQCAtNTA4LDkgKzUxOCw5IEBACiAKIAkJCWlmIChyZXN1bHQhPVVTQl9TVE9SX1hGRVJfR09PRCkKIAkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwotCQkJaWYgKCpzdGF0dXMgJiAweDAxKSAvLyBjaGVjayBjb25kaXRpb24KKwkJCWlmICgqc3RhdHVzICYgMHgwMSkgLyogY2hlY2sgY29uZGl0aW9uICovCiAJCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Ci0JCQlpZiAoKnN0YXR1cyAmIDB4MjApIC8vIGRldmljZSBmYXVsdAorCQkJaWYgKCpzdGF0dXMgJiAweDIwKSAvKiBkZXZpY2UgZmF1bHQgKi8KIAkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIAogCQkJVVNfREVCVUdQKCJSZWRvaW5nICVzXG4iLApAQCAtNTQ3LDMyICs1NTcsMzIgQEAKIAogCUJVR19PTihudW1fcmVnaXN0ZXJzID4gVVNfSU9CVUZfU0laRS8yKTsKIAotCS8vIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVycywgQVRBIGFjY2VzcworCS8qIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVycywgQVRBIGFjY2VzcyAqLwogCWNvbW1hbmRbMF0gPSAweDQwOwogCWNvbW1hbmRbMV0gPSBVU0JBVF9BVEEgfCBVU0JBVF9DTURfV1JJVEVfUkVHUzsKIAotCS8vIE5vIHJlbGV2YW5jZQorCS8qIE5vIHJlbGV2YW5jZSAqLwogCWNvbW1hbmRbMl0gPSAwOwogCWNvbW1hbmRbM10gPSAwOwogCWNvbW1hbmRbNF0gPSAwOwogCWNvbW1hbmRbNV0gPSAwOwogCi0JLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIChpbmNsLiBhZGRyZXNzZXMgYW5kIGRhdGEpCisJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIChpbmNsLiBhZGRyZXNzZXMgYW5kIGRhdGEpICovCiAJY29tbWFuZFs2XSA9IExTQl9vZihudW1fcmVnaXN0ZXJzKjIpOwogCWNvbW1hbmRbN10gPSBNU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKIAotCS8vIFRoZSBzZXR1cCBjb21tYW5kCisJLyogVGhlIHNldHVwIGNvbW1hbmQgKi8KIAlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCi0JLy8gQ3JlYXRlIHRoZSByZWcvZGF0YSwgcmVnL2RhdGEgc2VxdWVuY2UKKwkvKiBDcmVhdGUgdGhlIHJlZy9kYXRhLCByZWcvZGF0YSBzZXF1ZW5jZSAqLwogCWZvciAoaT0wOyBpPG51bV9yZWdpc3RlcnM7IGkrKykgewogCQlkYXRhW2k8PDFdID0gcmVnaXN0ZXJzW2ldOwogCQlkYXRhWzErKGk8PDEpXSA9IGRhdGFfb3V0W2ldOwogCX0KIAotCS8vIFNlbmQgdGhlIGRhdGEKKwkvKiBTZW5kIHRoZSBkYXRhICovCiAJcmVzdWx0ID0gdXNiYXRfYnVsa193cml0ZSh1cywgZGF0YSwgbnVtX3JlZ2lzdGVycyoyKTsKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKQEAgLTYwNiwxNyArNjE2LDE3IEBACiAJY29tbWFuZFsxXSA9IFVTQkFUX0FUQSB8IFVTQkFUX0NNRF9DT05EX1JFQURfQkxPQ0s7CiAJY29tbWFuZFsyXSA9IFVTQkFUX0FUQV9EQVRBOwogCWNvbW1hbmRbM10gPSBVU0JBVF9BVEFfU1RBVFVTOwotCWNvbW1hbmRbNF0gPSAweEZEOyAvLyBUaW1lb3V0IChtcyk7CisJY29tbWFuZFs0XSA9IDB4RkQ7IC8qIFRpbWVvdXQgKG1zKTsgKi8KIAljb21tYW5kWzVdID0gVVNCQVRfUVVBTF9GQ1E7CiAJY29tbWFuZFs2XSA9IExTQl9vZihsZW4pOwogCWNvbW1hbmRbN10gPSBNU0Jfb2YobGVuKTsKIAotCS8vIE11bHRpcGxlIGJsb2NrIHJlYWQgc2V0dXAgY29tbWFuZAorCS8qIE11bHRpcGxlIGJsb2NrIHJlYWQgc2V0dXAgY29tbWFuZCAqLwogCXJlc3VsdCA9IHVzYmF0X2V4ZWN1dGVfY29tbWFuZCh1cywgY29tbWFuZCwgOCk7CiAJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogCQotCS8vIFJlYWQgdGhlIGJsb2NrcyB3ZSBqdXN0IGFza2VkIGZvcgorCS8qIFJlYWQgdGhlIGJsb2NrcyB3ZSBqdXN0IGFza2VkIGZvciAqLwogCXJlc3VsdCA9IHVzYmF0X2J1bGtfcmVhZCh1cywgYnVmZmVyLCBsZW4pOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKQEAgLTY0NywxNyArNjU3LDE3IEBACiAJY29tbWFuZFsxXSA9IFVTQkFUX0FUQSB8IFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLOwogCWNvbW1hbmRbMl0gPSBVU0JBVF9BVEFfREFUQTsKIAljb21tYW5kWzNdID0gVVNCQVRfQVRBX1NUQVRVUzsKLQljb21tYW5kWzRdID0gMHhGRDsgLy8gVGltZW91dCAobXMpCisJY29tbWFuZFs0XSA9IDB4RkQ7IC8qIFRpbWVvdXQgKG1zKSAqLwogCWNvbW1hbmRbNV0gPSBVU0JBVF9RVUFMX0ZDUTsKIAljb21tYW5kWzZdID0gTFNCX29mKGxlbik7CiAJY29tbWFuZFs3XSA9IE1TQl9vZihsZW4pOwogCi0JLy8gTXVsdGlwbGUgYmxvY2sgd3JpdGUgc2V0dXAgY29tbWFuZAorCS8qIE11bHRpcGxlIGJsb2NrIHdyaXRlIHNldHVwIGNvbW1hbmQgKi8KIAlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIAkKLQkvLyBXcml0ZSB0aGUgZGF0YQorCS8qIFdyaXRlIHRoZSBkYXRhICovCiAJcmVzdWx0ID0gdXNiYXRfYnVsa193cml0ZSh1cywgYnVmZmVyLCBsZW4pOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKQEAgLTcxMSwxNiArNzIxLDIwIEBACiB7CiAJaW50IHJjOwogCi0JLy8gUmVzZXQgcGVyaXBoZXJhbCwgZW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzCi0JLy8gKGJyaW5nIHJlc2V0IHNpZ25hbCB1cCkKKwkvKgorCSAqIFJlc2V0IHBlcmlwaGVyYWwsIGVuYWJsZSBwZXJpcGhlcmFsIGNvbnRyb2wgc2lnbmFscworCSAqIChicmluZyByZXNldCBzaWduYWwgdXApCisJICovCiAJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAogCQkJCQkJCSBVU0JBVF9VSU9fRFJWUlNUIHwgVVNCQVRfVUlPX09FMSB8IFVTQkFUX1VJT19PRTAsCiAJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOwogCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJCQkKLQkvLyBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMKLQkvLyAoYnJpbmcgcmVzZXQgc2lnbmFsIGRvd24pCisJLyoKKwkgKiBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMKKwkgKiAoYnJpbmcgcmVzZXQgc2lnbmFsIGRvd24pCisJICovCiAJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAogCQkJCQkJCSBVU0JBVF9VSU9fT0UxICB8IFVTQkFUX1VJT19PRTAsCiAJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOwpAQCAtNzM3LDcgKzc1MSw3IEBACiB7CiAJaW50IHJjOwogCi0JLy8gRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzIGFuZCBjYXJkIGRldGVjdAorCS8qIEVuYWJsZSBwZXJpcGhlcmFsIGNvbnRyb2wgc2lnbmFscyBhbmQgY2FyZCBkZXRlY3QgKi8KIAlyYyA9IHVzYmF0X3dyaXRlX3VzZXJfaW8odXMsCiAJCQkJCQkJIFVTQkFUX1VJT19BQ0tEIHwgVVNCQVRfVUlPX09FMSAgfCBVU0JBVF9VSU9fT0UwLAogCQkJCQkJCSBVU0JBVF9VSU9fRVBBRCB8IFVTQkFUX1VJT18xKTsKQEAgLTc4Niw3ICs4MDAsNyBAQAogCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAKLQkvLyBDaGVjayBmb3IgbWVkaWEgZXhpc3RlbmNlCisJLyogQ2hlY2sgZm9yIG1lZGlhIGV4aXN0ZW5jZSAqLwogCXJjID0gdXNiYXRfZmxhc2hfY2hlY2tfbWVkaWFfcHJlc2VudCh1aW8pOwogCWlmIChyYyA9PSBVU0JBVF9GTEFTSF9NRURJQV9OT05FKSB7CiAJCWluZm8tPnNlbnNlX2tleSA9IDB4MDI7CkBAIC03OTUsMTEgKzgwOSwxMSBAQAogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIAl9CiAKLQkvLyBDaGVjayBmb3IgbWVkaWEgY2hhbmdlCisJLyogQ2hlY2sgZm9yIG1lZGlhIGNoYW5nZSAqLwogCXJjID0gdXNiYXRfZmxhc2hfY2hlY2tfbWVkaWFfY2hhbmdlZCh1aW8pOwogCWlmIChyYyA9PSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VEKSB7CiAKLQkJLy8gUmVzZXQgYW5kIHJlLWVuYWJsZSBjYXJkIGRldGVjdAorCQkvKiBSZXNldCBhbmQgcmUtZW5hYmxlIGNhcmQgZGV0ZWN0ICovCiAJCXJjID0gdXNiYXRfZGV2aWNlX3Jlc2V0KHVzKTsKIAkJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQogCQkJcmV0dXJuIHJjOwpAQCAtODU1LDE1ICs4NjksMTUgQEAKICAJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKICAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAKLQkvLyBDaGVjayBmb3IgZXJyb3IgYml0Ci0JaWYgKHN0YXR1cyAmIDB4MDEpIHsKLQkJIC8vIERldmljZSBpcyBhIENvbXBhY3RGbGFzaCByZWFkZXIvd3JpdGVyCi0JCVVTX0RFQlVHUCgidXNiYXRfaWRlbnRpZnlfZGV2aWNlOiBEZXRlY3RlZCBGbGFzaCByZWFkZXIvd3JpdGVyXG4iKTsKLQkJaW5mby0+ZGV2aWNldHlwZSA9IFVTQkFUX0RFVl9GTEFTSDsKLQl9IGVsc2UgewotCQkvLyBEZXZpY2UgaXMgSFAgODIwMAorCS8qIENoZWNrIGZvciBlcnJvciBiaXQsIG9yIGlmIHRoZSBjb21tYW5kICdmZWxsIHRocm91Z2gnICovCisJaWYgKHN0YXR1cyA9PSAweEExIHx8ICEoc3RhdHVzICYgMHgwMSkpIHsKKwkJLyogRGV2aWNlIGlzIEhQIDgyMDAgKi8KIAkJVVNfREVCVUdQKCJ1c2JhdF9pZGVudGlmeV9kZXZpY2U6IERldGVjdGVkIEhQODIwMCBDRFJXXG4iKTsKIAkJaW5mby0+ZGV2aWNldHlwZSA9IFVTQkFUX0RFVl9IUDgyMDA7CisJfSBlbHNlIHsKKwkJLyogRGV2aWNlIGlzIGEgQ29tcGFjdEZsYXNoIHJlYWRlci93cml0ZXIgKi8KKwkJVVNfREVCVUdQKCJ1c2JhdF9pZGVudGlmeV9kZXZpY2U6IERldGVjdGVkIEZsYXNoIHJlYWRlci93cml0ZXJcbiIpOworCQlpbmZvLT5kZXZpY2V0eXBlID0gVVNCQVRfREVWX0ZMQVNIOwogCX0KIAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKQEAgLTkxNiw3ICs5MzAsNyBAQAogCWlmICghcmVwbHkpCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAKLQkvLyBBVEFQSSBjb21tYW5kIDogSURFTlRJRlkgREVWSUNFCisJLyogQVRBIGNvbW1hbmQgOiBJREVOVElGWSBERVZJQ0UgKi8KIAlyYyA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCByZWdpc3RlcnMsIGNvbW1hbmQsIDMpOwogCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKIAkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF9nZXRfc2VjdG9yX2NvdW50OiBHYWghIGlkZW50aWZ5X2RldmljZSBmYWlsZWRcbiIpOwpAQCAtOTI0LDcgKzkzOCw3IEBACiAJCWdvdG8gbGVhdmU7CiAJfQogCi0JLy8gUmVhZCBkZXZpY2Ugc3RhdHVzCisJLyogUmVhZCBkZXZpY2Ugc3RhdHVzICovCiAJaWYgKHVzYmF0X2dldF9zdGF0dXModXMsICZzdGF0dXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewogCQlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAkJZ290byBsZWF2ZTsKQEAgLTkzMiw3ICs5NDYsNyBAQAogCiAJbXNsZWVwKDEwMCk7CiAKLQkvLyBSZWFkIHRoZSBkZXZpY2UgaWRlbnRpZmljYXRpb24gZGF0YQorCS8qIFJlYWQgdGhlIGRldmljZSBpZGVudGlmaWNhdGlvbiBkYXRhICovCiAJcmMgPSB1c2JhdF9yZWFkX2Jsb2NrKHVzLCByZXBseSwgNTEyKTsKIAlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCiAJCWdvdG8gbGVhdmU7CkBAIC05NzcsMTkgKzk5MSwyMyBAQAogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCiAJCXJldHVybiByZXN1bHQ7CiAKLQkvLyB3ZSdyZSB3b3JraW5nIGluIExCQSBtb2RlLiAgYWNjb3JkaW5nIHRvIHRoZSBBVEEgc3BlYywKLQkvLyB3ZSBjYW4gc3VwcG9ydCB1cCB0byAyOC1iaXQgYWRkcmVzc2luZy4gIEkgZG9uJ3Qga25vdyBpZiBKdW1wc2hvdAotCS8vIHN1cHBvcnRzIGJleW9uZCAyNC1iaXQgYWRkcmVzc2luZy4gIEl0J3Mga2luZCBvZiBoYXJkIHRvIHRlc3QKLQkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCS8qCisJICogd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsCisJICogd2UgY2FuIHN1cHBvcnQgdXAgdG8gMjgtYml0IGFkZHJlc3NpbmcuICBJIGRvbid0IGtub3cgaWYgSnVtcHNob3QKKwkgKiBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0CisJICogc2luY2UgaXQgcmVxdWlyZXMgPiA4R0IgQ0YgY2FyZC4KKwkgKi8KIAogCWlmIChzZWN0b3IgPiAweDBGRkZGRkZGKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJdG90YWxsZW4gPSBzZWN0b3JzICogaW5mby0+c3NpemU7CiAKLQkvLyBTaW5jZSB3ZSBkb24ndCByZWFkIG1vcmUgdGhhbiA2NCBLQiBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCi0JLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCi0JLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisJLyoKKwkgKiBTaW5jZSB3ZSBkb24ndCByZWFkIG1vcmUgdGhhbiA2NCBLQiBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJICogYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJICogYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisJICovCiAKIAlhbGxvY2xlbiA9IG1pbih0b3RhbGxlbiwgNjU1MzZ1KTsKIAlidWZmZXIgPSBrbWFsbG9jKGFsbG9jbGVuLCBHRlBfTk9JTyk7CkBAIC05OTcsMjcgKzEwMTUsMjkgQEAKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAogCWRvIHsKLQkJLy8gbG9vcCwgbmV2ZXIgYWxsb2NhdGUgb3IgdHJhbnNmZXIgbW9yZSB0aGFuIDY0ayBhdCBvbmNlCi0JCS8vIChtaW4oMTI4aywgMjU1KmluZm8tPnNzaXplKSBpcyB0aGUgcmVhbCBsaW1pdCkKKwkJLyoKKwkJICogbG9vcCwgbmV2ZXIgYWxsb2NhdGUgb3IgdHJhbnNmZXIgbW9yZSB0aGFuIDY0ayBhdCBvbmNlCisJCSAqIChtaW4oMTI4aywgMjU1KmluZm8tPnNzaXplKSBpcyB0aGUgcmVhbCBsaW1pdCkKKwkJICovCiAJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOwogCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOwogIAotCQkvLyBBVEFQSSBjb21tYW5kIDB4MjAgKFJFQUQgU0VDVE9SUykKLQkJdXNiYXRfcGFja19hdGFwaV9zZWN0b3JfY21kKGNvbW1hbmQsIHRoaXN0aW1lLCBzZWN0b3IsIDB4MjApOworCQkvKiBBVEEgY29tbWFuZCAweDIwIChSRUFEIFNFQ1RPUlMpICovCisJCXVzYmF0X3BhY2tfYXRhX3NlY3Rvcl9jbWQoY29tbWFuZCwgdGhpc3RpbWUsIHNlY3RvciwgMHgyMCk7CiAKLQkJLy8gV3JpdGUvZXhlY3V0ZSBBVEFQSSByZWFkIGNvbW1hbmQKKwkJLyogV3JpdGUvZXhlY3V0ZSBBVEEgcmVhZCBjb21tYW5kICovCiAJCXJlc3VsdCA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCByZWdpc3RlcnMsIGNvbW1hbmQsIDcpOwogCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQogCQkJZ290byBsZWF2ZTsKIAotCQkvLyBSZWFkIHRoZSBkYXRhIHdlIGp1c3QgcmVxdWVzdGVkCisJCS8qIFJlYWQgdGhlIGRhdGEgd2UganVzdCByZXF1ZXN0ZWQgKi8KIAkJcmVzdWx0ID0gdXNiYXRfcmVhZF9ibG9ja3ModXMsIGJ1ZmZlciwgbGVuKTsKIAkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKIAkJCWdvdG8gbGVhdmU7CiAgIAkgCiAJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfcmVhZF9kYXRhOiAgJWQgYnl0ZXNcbiIsIGxlbik7CiAJCi0JCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJLyogU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLwogCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCiAJCQkJCSAmc2dfaWR4LCAmc2dfb2Zmc2V0LCBUT19YRkVSX0JVRik7CiAKQEAgLTEwNjEsMTkgKzEwODEsMjMgQEAKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQogCQlyZXR1cm4gcmVzdWx0OwogCi0JLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsCi0JLy8gd2UgY2FuIHN1cHBvcnQgdXAgdG8gMjgtYml0IGFkZHJlc3NpbmcuICBJIGRvbid0IGtub3cgaWYgSnVtcHNob3QKLQkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0Ci0JLy8gc2luY2UgaXQgcmVxdWlyZXMgPiA4R0IgQ0YgY2FyZC4KKwkvKgorCSAqIHdlJ3JlIHdvcmtpbmcgaW4gTEJBIG1vZGUuICBhY2NvcmRpbmcgdG8gdGhlIEFUQSBzcGVjLAorCSAqIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIHRoZSBkZXZpY2UKKwkgKiBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0CisJICogc2luY2UgaXQgcmVxdWlyZXMgPiA4R0IgbWVkaWEuCisJICovCiAKIAlpZiAoc2VjdG9yID4gMHgwRkZGRkZGRikKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAogCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOwogCi0JLy8gU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKLQkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKLQkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKwkvKgorCSAqIFNpbmNlIHdlIGRvbid0IHdyaXRlIG1vcmUgdGhhbiA2NCBLQiBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJICogYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJICogYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisJICovCiAKIAlhbGxvY2xlbiA9IG1pbih0b3RhbGxlbiwgNjU1MzZ1KTsKIAlidWZmZXIgPSBrbWFsbG9jKGFsbG9jbGVuLCBHRlBfTk9JTyk7CkBAIC0xMDgxLDI0ICsxMTA1LDI2IEBACiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAKIAlkbyB7Ci0JCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQotCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisJCS8qCisJCSAqIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkgKiAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisJCSAqLwogCQlsZW4gPSBtaW4odG90YWxsZW4sIGFsbG9jbGVuKTsKIAkJdGhpc3RpbWUgPSAobGVuIC8gaW5mby0+c3NpemUpICYgMHhmZjsKIAotCQkvLyBHZXQgdGhlIGRhdGEgZnJvbSB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCS8qIEdldCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciBidWZmZXIgKi8KIAkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAogCQkJCQkgJnNnX2lkeCwgJnNnX29mZnNldCwgRlJPTV9YRkVSX0JVRik7CiAKLQkJLy8gQVRBUEkgY29tbWFuZCAweDMwIChXUklURSBTRUNUT1JTKQotCQl1c2JhdF9wYWNrX2F0YXBpX3NlY3Rvcl9jbWQoY29tbWFuZCwgdGhpc3RpbWUsIHNlY3RvciwgMHgzMCk7CQkKKwkJLyogQVRBIGNvbW1hbmQgMHgzMCAoV1JJVEUgU0VDVE9SUykgKi8KKwkJdXNiYXRfcGFja19hdGFfc2VjdG9yX2NtZChjb21tYW5kLCB0aGlzdGltZSwgc2VjdG9yLCAweDMwKTsKIAotCQkvLyBXcml0ZS9leGVjdXRlIEFUQVBJIHdyaXRlIGNvbW1hbmQKKwkJLyogV3JpdGUvZXhlY3V0ZSBBVEEgd3JpdGUgY29tbWFuZCAqLwogCQlyZXN1bHQgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgcmVnaXN0ZXJzLCBjb21tYW5kLCA3KTsKIAkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKIAkJCWdvdG8gbGVhdmU7CiAKLQkJLy8gV3JpdGUgdGhlIGRhdGEKKwkJLyogV3JpdGUgdGhlIGRhdGEgKi8KIAkJcmVzdWx0ID0gdXNiYXRfd3JpdGVfYmxvY2tzKHVzLCBidWZmZXIsIGxlbik7CiAJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCiAJCQlnb3RvIGxlYXZlOwpAQCAtMTE2OSw0MiArMTE5NSw0NCBAQAogCQkJc3JiLT50cmFuc2ZlcnNpemUpOwogCX0KIAotCS8vIFNpbmNlIHdlIG9ubHkgcmVhZCBpbiBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQotCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQotCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCS8qCisJICogU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJICogYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJICogYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisJICovCiAKIAlsZW4gPSAoNjU1MzUvc3JiLT50cmFuc2ZlcnNpemUpICogc3JiLT50cmFuc2ZlcnNpemU7CiAJVVNfREVCVUdQKCJNYXggcmVhZCBpcyAlZCBieXRlc1xuIiwgbGVuKTsKIAlsZW4gPSBtaW4obGVuLCBzcmItPnJlcXVlc3RfYnVmZmxlbik7CiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKLQlpZiAoYnVmZmVyID09IE5VTEwpIC8vIGJsb29keSBoZWxsIQorCWlmIChidWZmZXIgPT0gTlVMTCkgLyogYmxvb2R5IGhlbGwhICovCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogCXNlY3RvciA9IHNob3J0X3BhY2soZGF0YVs3KzNdLCBkYXRhWzcrMl0pOwogCXNlY3RvciA8PD0gMTY7CiAJc2VjdG9yIHw9IHNob3J0X3BhY2soZGF0YVs3KzVdLCBkYXRhWzcrNF0pOwogCXRyYW5zZmVycmVkID0gMDsKIAotCXNnX3NlZ21lbnQgPSAwOyAvLyBmb3Iga2VlcGluZyB0cmFjayBvZiB3aGVyZSB3ZSBhcmUgaW4KLQlzZ19vZmZzZXQgPSAwOyAgLy8gdGhlIHNjYXR0ZXIvZ2F0aGVyIGxpc3QKKwlzZ19zZWdtZW50ID0gMDsgLyogZm9yIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgd2UgYXJlIGluICovCisJc2dfb2Zmc2V0ID0gMDsgIC8qIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0ICovCiAKIAl3aGlsZSAodHJhbnNmZXJyZWQgIT0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKIAogCQlpZiAobGVuID4gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gLSB0cmFuc2ZlcnJlZCkKIAkJCWxlbiA9IHNyYi0+cmVxdWVzdF9idWZmbGVuIC0gdHJhbnNmZXJyZWQ7CiAKLQkJZGF0YVszXSA9IGxlbiYweEZGOyAJICAvLyAoY3lsTCkgPSBleHBlY3RlZCBsZW5ndGggKEwpCi0JCWRhdGFbNF0gPSAobGVuPj44KSYweEZGOyAgLy8gKGN5bEgpID0gZXhwZWN0ZWQgbGVuZ3RoIChIKQorCQlkYXRhWzNdID0gbGVuJjB4RkY7IAkgIC8qIChjeWxMKSA9IGV4cGVjdGVkIGxlbmd0aCAoTCkgKi8KKwkJZGF0YVs0XSA9IChsZW4+PjgpJjB4RkY7ICAvKiAoY3lsSCkgPSBleHBlY3RlZCBsZW5ndGggKEgpICovCiAKLQkJLy8gRml4IHVwIHRoZSBTQ1NJIGNvbW1hbmQgc2VjdG9yIGFuZCBudW0gc2VjdG9ycworCQkvKiBGaXggdXAgdGhlIFNDU0kgY29tbWFuZCBzZWN0b3IgYW5kIG51bSBzZWN0b3JzICovCiAKLQkJZGF0YVs3KzJdID0gTVNCX29mKHNlY3Rvcj4+MTYpOyAvLyBTQ1NJIGNvbW1hbmQgc2VjdG9yCisJCWRhdGFbNysyXSA9IE1TQl9vZihzZWN0b3I+PjE2KTsgLyogU0NTSSBjb21tYW5kIHNlY3RvciAqLwogCQlkYXRhWzcrM10gPSBMU0Jfb2Yoc2VjdG9yPj4xNik7CiAJCWRhdGFbNys0XSA9IE1TQl9vZihzZWN0b3ImMHhGRkZGKTsKIAkJZGF0YVs3KzVdID0gTFNCX29mKHNlY3RvciYweEZGRkYpOwogCQlpZiAoZGF0YVs3KzBdID09IEdQQ01EX1JFQURfQ0QpCiAJCQlkYXRhWzcrNl0gPSAwOwotCQlkYXRhWzcrN10gPSBNU0Jfb2YobGVuIC8gc3JiLT50cmFuc2ZlcnNpemUpOyAvLyBTQ1NJIGNvbW1hbmQKLQkJZGF0YVs3KzhdID0gTFNCX29mKGxlbiAvIHNyYi0+dHJhbnNmZXJzaXplKTsgLy8gbnVtIHNlY3RvcnMKKwkJZGF0YVs3KzddID0gTVNCX29mKGxlbiAvIHNyYi0+dHJhbnNmZXJzaXplKTsgLyogU0NTSSBjb21tYW5kICovCisJCWRhdGFbNys4XSA9IExTQl9vZihsZW4gLyBzcmItPnRyYW5zZmVyc2l6ZSk7IC8qIG51bSBzZWN0b3JzICovCiAKIAkJcmVzdWx0ID0gdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHVzLCBVU0JBVF9BVEEsIAogCQkJcmVnaXN0ZXJzLCBkYXRhLCAxOSwKQEAgLTEyMTcsMTYgKzEyNDUsMTYgQEAKIAkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKIAkJCWJyZWFrOwogCi0JCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJLyogU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLwogCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHNyYiwKIAkJCQkgJnNnX3NlZ21lbnQsICZzZ19vZmZzZXQsIFRPX1hGRVJfQlVGKTsKIAotCQkvLyBVcGRhdGUgdGhlIGFtb3VudCB0cmFuc2ZlcnJlZCBhbmQgdGhlIHNlY3RvciBudW1iZXIKKwkJLyogVXBkYXRlIHRoZSBhbW91bnQgdHJhbnNmZXJyZWQgYW5kIHRoZSBzZWN0b3IgbnVtYmVyICovCiAKIAkJdHJhbnNmZXJyZWQgKz0gbGVuOwogCQlzZWN0b3IgKz0gbGVuIC8gc3JiLT50cmFuc2ZlcnNpemU7CiAKLQl9IC8vIHdoaWxlIHRyYW5zZmVycmVkICE9IHNyYi0+cmVxdWVzdF9idWZmbGVuCisJfSAvKiB3aGlsZSB0cmFuc2ZlcnJlZCAhPSBzcmItPnJlcXVlc3RfYnVmZmxlbiAqLwogCiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTIzNyw3ICsxMjY1LDcgQEAKIAlpbnQgc2VsZWN0b3I7CiAJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOwogCi0JLy8gdHJ5IGRldmljZSA9IG1hc3RlciwgdGhlbiBkZXZpY2UgPSBzbGF2ZS4KKwkvKiB0cnkgZGV2aWNlID0gbWFzdGVyLCB0aGVuIGRldmljZSA9IHNsYXZlLiAqLwogCWZvciAoc2VsZWN0b3IgPSAweEEwOyBzZWxlY3RvciA8PSAweEIwOyBzZWxlY3RvciArPSAweDEwKSB7CiAJCWlmICh1c2JhdF93cml0ZSh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfREVWSUNFLCBzZWxlY3RvcikgIT0KIAkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCkBAIC0xMjk4LDcgKzEzMjYsNyBAQAogCW1lbXNldCh1cy0+ZXh0cmEsIDAsIHNpemVvZihzdHJ1Y3QgdXNiYXRfaW5mbykpOwogCWluZm8gPSAoc3RydWN0IHVzYmF0X2luZm8gKikgKHVzLT5leHRyYSk7CiAKLQkvLyBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMKKwkvKiBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMgKi8KIAlyYyA9IHVzYmF0X3dyaXRlX3VzZXJfaW8odXMsCiAJCQkJIFVTQkFUX1VJT19PRTEgfCBVU0JBVF9VSU9fT0UwLAogCQkJCSBVU0JBVF9VSU9fRVBBRCB8IFVTQkFUX1VJT18xKTsKQEAgLTEzMzcsNyArMTM2NSw3IEBACiAKIAlVU19ERUJVR1AoIklOSVQgNVxuIik7CiAKLQkvLyBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMgYW5kIGNhcmQgZGV0ZWN0CisJLyogRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzIGFuZCBjYXJkIGRldGVjdCAqLwogCXJjID0gdXNiYXRfZGV2aWNlX2VuYWJsZV9jZHQodXMpOwogCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKIAkJcmV0dXJuIHJjOwpAQCAtMTM2NCw3ICsxMzkyLDcgQEAKIAogCVVTX0RFQlVHUCgiSU5JVCA5XG4iKTsKIAotCS8vIEF0IHRoaXMgcG9pbnQsIHdlIG5lZWQgdG8gZGV0ZWN0IHdoaWNoIGRldmljZSB3ZSBhcmUgdXNpbmcKKwkvKiBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIHRvIGRldGVjdCB3aGljaCBkZXZpY2Ugd2UgYXJlIHVzaW5nICovCiAJaWYgKHVzYmF0X3NldF90cmFuc3BvcnQodXMsIGluZm8pKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCkBAIC0xNDE0LDEwICsxNDQyLDEwIEBACiAJZGF0YVswXSA9IDB4MDA7CiAJZGF0YVsxXSA9IDB4MDA7CiAJZGF0YVsyXSA9IDB4MDA7Ci0JZGF0YVszXSA9IGxlbiYweEZGOyAJCS8vIChjeWxMKSA9IGV4cGVjdGVkIGxlbmd0aCAoTCkKLQlkYXRhWzRdID0gKGxlbj4+OCkmMHhGRjsgCS8vIChjeWxIKSA9IGV4cGVjdGVkIGxlbmd0aCAoSCkKLQlkYXRhWzVdID0gMHhCMDsgCQkvLyAoZGV2aWNlIHNlbCkgPSBzbGF2ZQotCWRhdGFbNl0gPSAweEEwOyAJCS8vIChjb21tYW5kKSA9IEFUQSBQQUNLRVQgQ09NTUFORAorCWRhdGFbM10gPSBsZW4mMHhGRjsgCQkvKiAoY3lsTCkgPSBleHBlY3RlZCBsZW5ndGggKEwpICovCisJZGF0YVs0XSA9IChsZW4+PjgpJjB4RkY7IAkvKiAoY3lsSCkgPSBleHBlY3RlZCBsZW5ndGggKEgpICovCisJZGF0YVs1XSA9IDB4QjA7IAkJLyogKGRldmljZSBzZWwpID0gc2xhdmUgKi8KKwlkYXRhWzZdID0gMHhBMDsgCQkvKiAoY29tbWFuZCkgPSBBVEEgUEFDS0VUIENPTU1BTkQgKi8KIAogCWZvciAoaT03OyBpPDE5OyBpKyspIHsKIAkJcmVnaXN0ZXJzW2ldID0gMHgxMDsKQEAgLTE0NjYsMTMgKzE0OTQsMTUgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQkvLyBXcml0ZSB0aGUgMTItYnl0ZSBjb21tYW5kIGhlYWRlci4KLQotCS8vIElmIHRoZSBjb21tYW5kIGlzIEJMQU5LIHRoZW4gc2V0IHRoZSB0aW1lciBmb3IgNzUgbWludXRlcy4KLQkvLyBPdGhlcndpc2Ugc2V0IGl0IGZvciAxMCBtaW51dGVzLgotCi0JLy8gTk9URTogVEhFIDgyMDAgRE9DVU1FTlRBVElPTiBTVEFURVMgVEhBVCBCTEFOS0lORyBBIENEUlcKLQkvLyBBVCBTUEVFRCA0IElTIFVOUkVMSUFCTEUhISEKKwkvKgorCSAqIFdyaXRlIHRoZSAxMi1ieXRlIGNvbW1hbmQgaGVhZGVyLgorCSAqCisJICogSWYgdGhlIGNvbW1hbmQgaXMgQkxBTksgdGhlbiBzZXQgdGhlIHRpbWVyIGZvciA3NSBtaW51dGVzLgorCSAqIE90aGVyd2lzZSBzZXQgaXQgZm9yIDEwIG1pbnV0ZXMuCisJICoKKwkgKiBOT1RFOiBUSEUgODIwMCBET0NVTUVOVEFUSU9OIFNUQVRFUyBUSEFUIEJMQU5LSU5HIEEgQ0RSVworCSAqIEFUIFNQRUVEIDQgSVMgVU5SRUxJQUJMRSEhIQorCSAqLwogCiAJaWYgKCAocmVzdWx0ID0gdXNiYXRfd3JpdGVfYmxvY2sodXMsIAogCQkJVVNCQVRfQVRBLCBzcmItPmNtbmQsIDEyLApAQCAtMTQ4MSwxOSArMTUxMSwxOCBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCS8vIElmIHRoZXJlIGlzIHJlc3BvbnNlIGRhdGEgdG8gYmUgcmVhZCBpbiAKLQkvLyB0aGVuIGRvIGl0IGhlcmUuCisJLyogSWYgdGhlcmUgaXMgcmVzcG9uc2UgZGF0YSB0byBiZSByZWFkIGluIHRoZW4gZG8gaXQgaGVyZS4gKi8KIAogCWlmIChsZW4gIT0gMCAmJiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpKSB7CiAKLQkJLy8gSG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBpbj8gQ2hlY2sgY3lsTCByZWdpc3RlcgorCQkvKiBIb3cgbWFueSBieXRlcyB0byByZWFkIGluPyBDaGVjayBjeWxMIHJlZ2lzdGVyICovCiAKIAkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9NRSwgc3RhdHVzKSAhPSAKIAkJICAgIAlVU0JfU1RPUl9YRkVSX0dPT0QpIHsKIAkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJCX0KIAotCQlpZiAobGVuID4gMHhGRikgeyAvLyBuZWVkIHRvIHJlYWQgY3lsSCBhbHNvCisJCWlmIChsZW4gPiAweEZGKSB7IC8qIG5lZWQgdG8gcmVhZCBjeWxIIGFsc28gKi8KIAkJCWxlbiA9ICpzdGF0dXM7CiAJCQlpZiAodXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX0hJLCBzdGF0dXMpICE9CiAJCQkJICAgIFVTQl9TVE9SX1hGRVJfR09PRCkgewpAQCAtMTU1NiwxMyArMTU4NSwxNiBAQAogCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCiAJCQlyZXR1cm4gcmM7CiAKLQkJaW5mby0+c3NpemUgPSAweDIwMDsgIC8vIGhhcmQgY29kZWQgNTEyIGJ5dGUgc2VjdG9ycyBhcyBwZXIgQVRBIHNwZWMKKwkJLyogaGFyZCBjb2RlZCA1MTIgYnl0ZSBzZWN0b3JzIGFzIHBlciBBVEEgc3BlYyAqLworCQlpbmZvLT5zc2l6ZSA9IDB4MjAwOwogCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogUkVBRF9DQVBBQ0lUWTogJWxkIHNlY3RvcnMsICVsZCBieXRlcyBwZXIgc2VjdG9yXG4iLAogCQkJICBpbmZvLT5zZWN0b3JzLCBpbmZvLT5zc2l6ZSk7CiAKLQkJLy8gYnVpbGQgdGhlIHJlcGx5Ci0JCS8vIG5vdGU6IG11c3QgcmV0dXJuIHRoZSBzZWN0b3IgbnVtYmVyIG9mIHRoZSBsYXN0IHNlY3RvciwKLQkJLy8gKm5vdCogdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzCisJCS8qCisJCSAqIGJ1aWxkIHRoZSByZXBseQorCQkgKiBub3RlOiBtdXN0IHJldHVybiB0aGUgc2VjdG9yIG51bWJlciBvZiB0aGUgbGFzdCBzZWN0b3IsCisJCSAqICpub3QqIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycworCQkgKi8KIAkJKChfX2JlMzIgKikgcHRyKVswXSA9IGNwdV90b19iZTMyKGluZm8tPnNlY3RvcnMgLSAxKTsKIAkJKChfX2JlMzIgKikgcHRyKVsxXSA9IGNwdV90b19iZTMyKGluZm8tPnNzaXplKTsKIAkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgOCwgc3JiKTsKQEAgLTE1ODYsNyArMTYxOCw5IEBACiAJfQogCiAJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEyKSB7Ci0JCS8vIEkgZG9uJ3QgdGhpbmsgd2UnbGwgZXZlciBzZWUgYSBSRUFEXzEyIGJ1dCBzdXBwb3J0IGl0IGFueXdheS4uLgorCQkvKgorCQkgKiBJIGRvbid0IHRoaW5rIHdlJ2xsIGV2ZXIgc2VlIGEgUkVBRF8xMiBidXQgc3VwcG9ydCBpdCBhbnl3YXkKKwkJICovCiAJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKIAkJICAgICAgICAoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CiAKQEAgLTE2MDgsNyArMTY0Miw5IEBACiAJfQogCiAJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMikgewotCQkvLyBJIGRvbid0IHRoaW5rIHdlJ2xsIGV2ZXIgc2VlIGEgV1JJVEVfMTIgYnV0IHN1cHBvcnQgaXQgYW55d2F5Li4uCisJCS8qCisJCSAqIEkgZG9uJ3QgdGhpbmsgd2UnbGwgZXZlciBzZWUgYSBXUklURV8xMiBidXQgc3VwcG9ydCBpdCBhbnl3YXkKKwkJICovCiAJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKIAkJICAgICAgICAoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CiAKQEAgLTE2NDUsOCArMTY4MSwxMCBAQAogCX0KIAogCWlmIChzcmItPmNtbmRbMF0gPT0gQUxMT1dfTUVESVVNX1JFTU9WQUwpIHsKLQkJLy8gc3VyZS4gIHdoYXRldmVyLiAgbm90IGxpa2Ugd2UgY2FuIHN0b3AgdGhlIHVzZXIgZnJvbSBwb3BwaW5nCi0JCS8vIHRoZSBtZWRpYSBvdXQgb2YgdGhlIGRldmljZSAobm8gbG9ja2luZyBkb29ycywgZXRjKQorCQkvKgorCQkgKiBzdXJlLiAgd2hhdGV2ZXIuICBub3QgbGlrZSB3ZSBjYW4gc3RvcCB0aGUgdXNlciBmcm9tIHBvcHBpbmcKKwkJICogdGhlIG1lZGlhIG91dCBvZiB0aGUgZGV2aWNlIChubyBsb2NraW5nIGRvb3JzLCBldGMpCisJCSAqLwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oCmluZGV4IDViOGU4NjcuLjI1ZTdkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oCkBAIC01NSw4ICs1NSw4IEBACiAjZGVmaW5lIFVTQkFUX1VJT19XUklURQkwCiAKIC8qIFF1YWxpZmllciBiaXRzICovCi0jZGVmaW5lIFVTQkFUX1FVQUxfRkNRCTB4MjAgLy8gZnVsbCBjb21wYXJlCi0jZGVmaW5lIFVTQkFUX1FVQUxfQUxRCTB4MTAgLy8gYXV0byBsb2FkIHN1YmNvdW50CisjZGVmaW5lIFVTQkFUX1FVQUxfRkNRCTB4MjAJLyogZnVsbCBjb21wYXJlICovCisjZGVmaW5lIFVTQkFUX1FVQUxfQUxRCTB4MTAJLyogYXV0byBsb2FkIHN1YmNvdW50ICovCiAKIC8qIFVTQkFUIEZsYXNoIE1lZGlhIHN0YXR1cyB0eXBlcyAqLwogI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9OT05FCTAKQEAgLTY3LDM5ICs2NywzOSBAQAogI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKIAogLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8vIHJlYWQvd3JpdGUgZGF0YSAoUi9XKQotI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8vIHNldCBmZWF0dXJlcyAoVykKLSNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvLyBlcnJvciAoUikKLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvLyBzZWN0b3IgY291bnQgKFIvVykKLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvLyBzZWN0b3IgbnVtYmVyIChSL1cpCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLy8gY3lsaW5kZXIgbG93IChSL1cpCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLy8gY3lsaW5kZXIgaGlnaCAoUi9XKQotI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8vIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKQotI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8vIGRldmljZSBzdGF0dXMgKFIpCi0jZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLy8gZGV2aWNlIGNvbW1hbmQgKFcpCi0jZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLy8gc3RhdHVzIChubyBjbGVhciBJUlEpIChSKQorI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCisjZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCisjZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLwogCiAvKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvLyBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMKLSNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvLyBDYXJkIERldGVjdCAoUmVhZCBPbmx5KQotCQkJCSAgICAgLy8gQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwCi0jZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8vIEkvTyAxCi0jZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8vIEkvTyAwCi0jZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLy8gMT1FUFAgbW9kZSwgMD1BVEEgbW9kZQotI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8vIElucHV0IDEKLSNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvLyBJbnB1dCAwCi0jZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8vIEludGVycnVwdCAoQVRBICYgSVNBKS9BY2tub3dsZWRnZSAoRVBQKQorI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLworCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCisjZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCisjZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCisjZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLworI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCisjZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KIAogLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLy8gUmVzZXQgUGVyaXBoZXJhbAotI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvLyBFbmFibGUgQ2FyZCBEZXRlY3QKLSNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvLyBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dAotCQkJCSAgICAgLy8gSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4KLSNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvLyBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dAotI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLy8gUmVzZXQgU0NNIGNoaXAKKyNkZWZpbmUgVVNCQVRfVUlPX0RSVlJTVAkweDgwIC8qIFJlc2V0IFBlcmlwaGVyYWwgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0FDS0QJCTB4NDAgLyogRW5hYmxlIENhcmQgRGV0ZWN0ICovCisjZGVmaW5lIFVTQkFUX1VJT19PRTEJCTB4MjAgLyogSS9PIDEgc2V0PW91dHB1dC9jbHI9aW5wdXQgKi8KKwkJCQkgICAgIC8qIElmIEFDS0Q9MSwgc2V0IE9FMSB0byAxIGFsc28uICovCisjZGVmaW5lIFVTQkFUX1VJT19PRTAJCTB4MTAgLyogSS9PIDAgc2V0PW91dHB1dC9jbHI9aW5wdXQgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0FEUFJTVAkweDAxIC8qIFJlc2V0IFNDTSBjaGlwICovCiAKIC8qIFVTQkFUIEZlYXR1cmVzICovCi0jZGVmaW5lIFVTQkFUX0ZFQVRfRVRFTgkweDgwIC8vIEV4dGVybmFsIHRyaWdnZXIgZW5hYmxlCisjZGVmaW5lIFVTQkFUX0ZFQVRfRVRFTgkweDgwCS8qIEV4dGVybmFsIHRyaWdnZXIgZW5hYmxlICovCiAjZGVmaW5lIFVTQkFUX0ZFQVRfVTEJMHgwOAogI2RlZmluZSBVU0JBVF9GRUFUX1UwCTB4MDQKICNkZWZpbmUgVVNCQVRfRkVBVF9FVDEJMHgwMgpAQCAtMTEyLDEyICsxMTIsMTIgQEAKIAlpbnQgZGV2aWNldHlwZTsKIAogCS8qIFVzZWQgZm9yIEZsYXNoIHJlYWRlcnMgb25seSAqLwotCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsgICAgIC8vIHRvdGFsIHNlY3RvciBjb3VudAotCXVuc2lnbmVkIGxvbmcgc3NpemU7ICAgICAgIC8vIHNlY3RvciBzaXplIGluIGJ5dGVzCisJdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KIAogCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsgICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7ICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCmluZGV4IGMxYmE1MzAuLjdjYTg5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwpAQCAtNjM2LDExICs2MzYsMTEgQEAKIAogCQkvKiB1c2UgdGhlIG5ldyBidWZmZXIgd2UgaGF2ZSAqLwogCQlvbGRfcmVxdWVzdF9idWZmZXIgPSBzcmItPnJlcXVlc3RfYnVmZmVyOwotCQlzcmItPnJlcXVlc3RfYnVmZmVyID0gc3JiLT5zZW5zZV9idWZmZXI7CisJCXNyYi0+cmVxdWVzdF9idWZmZXIgPSB1cy0+c2Vuc2VidWY7CiAKIAkJLyogc2V0IHRoZSBidWZmZXIgbGVuZ3RoIGZvciB0cmFuc2ZlciAqLwogCQlvbGRfcmVxdWVzdF9idWZmbGVuID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47Ci0JCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMTg7CisJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gVVNfU0VOU0VfU0laRTsKIAogCQkvKiBzZXQgdXAgZm9yIG5vIHNjYXR0ZXItZ2F0aGVyIHVzZSAqLwogCQlvbGRfc2cgPSBzcmItPnVzZV9zZzsKQEAgLTY1Miw2ICs2NTIsNyBAQAogCQl0ZW1wX3Jlc3VsdCA9IHVzLT50cmFuc3BvcnQodXMtPnNyYiwgdXMpOwogCiAJCS8qIGxldCdzIGNsZWFuIHVwIHJpZ2h0IGF3YXkgKi8KKwkJbWVtY3B5KHNyYi0+c2Vuc2VfYnVmZmVyLCB1cy0+c2Vuc2VidWYsIFVTX1NFTlNFX1NJWkUpOwogCQlzcmItPnJlc2lkID0gb2xkX3Jlc2lkOwogCQlzcmItPnJlcXVlc3RfYnVmZmVyID0gb2xkX3JlcXVlc3RfYnVmZmVyOwogCQlzcmItPnJlcXVlc3RfYnVmZmxlbiA9IG9sZF9yZXF1ZXN0X2J1ZmZsZW47CkBAIC05MjMsNiArOTI0LDcgQEAKIAlpbnQgcmVzdWx0OwogCiAJLyogaXNzdWUgdGhlIGNvbW1hbmQgKi8KKwl1cy0+aW9idWZbMF0gPSAwOwogCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+cmVjdl9jdHJsX3BpcGUsCiAJCQkJIFVTX0JVTEtfR0VUX01BWF9MVU4sIAogCQkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5oCmluZGV4IDhkOWUwNjYuLjBhMzYyY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuaApAQCAtNTAsNyArNTAsNyBAQAogI2RlZmluZSBVU19QUl9DQgkweDAxCQkvKiBDb250cm9sL0J1bGsgdy9vIGludGVycnVwdCAqLwogI2RlZmluZSBVU19QUl9CVUxLCTB4NTAJCS8qIGJ1bGsgb25seSAqLwogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAotI2RlZmluZSBVU19QUl9TQ01fQVRBUEkJMHg4MAkJLyogU0NNLUFUQVBJIGJyaWRnZSAqLworI2RlZmluZSBVU19QUl9VU0JBVAkweDgwCQkvKiBTQ00tQVRBUEkgYnJpZGdlICovCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CiAjZGVmaW5lIFVTX1BSX0VVU0JfU0REUjA5CTB4ODEJLyogU0NNLVNDU0kgYnJpZGdlIGZvciBTRERSLTA5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCBiNzlkYWQxLi45ZTkyNmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTcxLDEyICs3MSwxMiBAQAogVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDIwNywgMHgwMDAxLCAweDAwMDEsIAogCQkiSFAiLAogCQkiQ0QtV3JpdGVyKyA4MjAwZSIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX1NDTV9BVEFQSSwgaW5pdF91c2JhdCwgMCksIAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdCwgMCksCiAKIFVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAzMDcsIDB4MDAwMSwgMHgwMDAxLCAKIAkJIkhQIiwKIAkJIkNELVdyaXRlcisgQ0QtNGUiLAotCQlVU19TQ184MDcwLCBVU19QUl9TQ01fQVRBUEksIGluaXRfdXNiYXQsIDApLCAKKwkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXQsIDApLAogI2VuZGlmCiAKIC8qIFBhdGNoIHN1Ym1pdHRlZCBieSBNaWhuZWEtQ29zdGluIEdyaWdvcmUgPG1paG5lYUB6dWx1LnJvPiAqLwpAQCAtMTA2LDYgKzEwNiwxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0lOUVVJUlkgKSwKIAorLyogUmVwb3J0ZWQgYnkgU3RlZmFuIFdlcm5lciA8ZHVzdGJsbkBnbXguZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDQxOSwgMHhhYWY2LCAweDAxMDAsIDB4MDEwMCwKKwkJIlRyZWtTdG9yIiwKKwkJImkuQmVhdCBKb3kgMi4wIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKIC8qIFJlcG9ydGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gZnJvbSBub3ZlbGwgYnVnICMxMDU4NzggKi8KIFVOVVNVQUxfREVWKCAgMHgwNDI0LCAweDBmZGMsIDB4MDIxMCwgMHgwMjEwLAogCQkiU01TQyIsCkBAIC0yNDQsNiArMjUxLDEzIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9GSVhfQ0FQQUNJVFkgfCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAorLyogUmVwb3J0ZWQgYnkgU2ltZW9uIFNpbWVvbm92IDxzaW1lb25vdl8yMDAwQHlhaG9vLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNGRhLCAweDIzNzMsIDB4MDAwMCwgMHg5OTk5LAorCQkiTEVJQ0EiLAorCQkiRC1MVVggQ2FtZXJhIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSB8IFVTX0ZMX05PVF9MT0NLQUJMRSApLAorCiAvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgZW50cmllcyB3ZXJlIGRldmVsb3BlZCB3aXRoIHRoZSBoZWxwIG9mCiAgKiBTaHV0dGxlL1NDTSBkaXJlY3RseS4KICAqLwpAQCAtMzMzLDkgKzM0Nyw5IEBACiAKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKIFVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAotCQkiU0NNIiwKLQkJIlNDTSBVU0JBVC0wMiIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NDTV9BVEFQSSwgaW5pdF91c2JhdCwKKwkJIlNodXR0bGUvU0NNIiwKKwkJIlVTQkFULTAyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXQsCiAJCVVTX0ZMX1NJTkdMRV9MVU4pLAogI2VuZGlmCiAKQEAgLTU5OCw2ICs2MTIsMTYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCisvKgorICogUmVwb3J0ZWQgYnkgVHlzb24gVmluc29uIDxsb3Jub3NzQGdtYWlsLmNvbT4KKyAqIFRoaXMgcGFydGljdWxhciBwcm9kdWN0SWQgaXMgdGhlIGlQb2QgTmFubworICovCitVTlVTVUFMX0RFViggMHgwNWFjLCAweDEyMGEsIDB4MDAwMCwgMHg5OTk5LAorCQkiQXBwbGUiLAorCQkiaVBvZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKwogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAogVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDEsCiAJCSJMZXhhciIsCkBAIC03MDIsNiArNzI2LDE0IEBACiAJCVVTX1NDX1NDU0ksIFVTX1BSX0NCLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorI2VuZGlmCisKIFVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLAogCQkiU2FuZGlzayIsCiAJCSJJbWFnZU1hdGUgU0REUi0xMiIsCkBAIC03MjQsNyArNzU2LDcgQEAKICNlbmRpZgogCiAvKiBSZXBvcnRlZCBieSBFZXJvIFZvbG90aW5lbiA8ZWVyb0BwaW5nLXZpaW5pLm9yZz4gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2FiLCAweGZjY2QsIDB4MDQwNiwgMHgwNDA2LAorVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmNjZCwgMHgwMDAwLCAweDk5OTksCiAJCSJGcmVlY29tIFRlY2hub2xvZ2llcyIsCiAJCSJGSEQtQ2xhc3NpYyIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKaW5kZXggZjlhOWJmYS4uMzg0N2ViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgpAQCAtMTExLDExICsxMTIsNiBAQAogc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTih0aHJlYWRzX2dvbmUpOwogCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCi0JCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKLQotc3RhdGljIHZvaWQgc3RvcmFnZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7Ci0KIC8qIFRoZSBlbnRyaWVzIGluIHRoaXMgdGFibGUsIGV4Y2VwdCBmb3IgZmluYWwgb25lcyBoZXJlCiAgKiAoVVNCX01BU1NfU1RPUkFHRV9DTEFTUyBhbmQgdGhlIGVtcHR5IGVudHJ5KSwgY29ycmVzcG9uZCwKICAqIGxpbmUgZm9yIGxpbmUgd2l0aCB0aGUgZW50cmllcyBvZiB1c191bnN1YXVsX2Rldl9saXN0W10uCkBAIC0yMzMsMTMgKzIyOSw0MCBAQAogCXsgTlVMTCB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3N0b3JhZ2VfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5uYW1lID0JCSJ1c2Itc3RvcmFnZSIsCi0JLnByb2JlID0Jc3RvcmFnZV9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXN0b3JhZ2VfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCi19OworCisjaWZkZWYgQ09ORklHX1BNCS8qIE1pbmltYWwgc3VwcG9ydCBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lICovCisKK3N0YXRpYyBpbnQgc3RvcmFnZV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisKKwkvKiBXYWl0IHVudGlsIG5vIGNvbW1hbmQgaXMgcnVubmluZyAqLworCWRvd24oJnVzLT5kZXZfc2VtYXBob3JlKTsKKworCVVTX0RFQlVHUCgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWZhY2UtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9IG1lc3NhZ2UuZXZlbnQ7CisKKwkvKiBXaGVuIHJ1bnRpbWUgUE0gaXMgd29ya2luZywgd2UnbGwgc2V0IGEgZmxhZyB0byBpbmRpY2F0ZQorCSAqIHdoZXRoZXIgd2Ugc2hvdWxkIGF1dG9yZXN1bWUgd2hlbiBhIFNDU0kgcmVxdWVzdCBhcnJpdmVzLiAqLworCisJdXAoJnVzLT5kZXZfc2VtYXBob3JlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG9yYWdlX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CisKKwlkb3duKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisKKwlVU19ERUJVR1AoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmYWNlLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPSBQTV9FVkVOVF9PTjsKKworCXVwKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogLyoKICAqIGZpbGxfaW5xdWlyeV9yZXNwb25zZSB0YWtlcyBhbiB1bnNpZ25lZCBjaGFyIGFycmF5ICh3aGljaCBtdXN0CkBAIC0yODgsMjIgKzMxMSw3IEBACiAJc3RydWN0IHVzX2RhdGEgKnVzID0gKHN0cnVjdCB1c19kYXRhICopX191czsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gdXNfdG9faG9zdCh1cyk7CiAKLQlsb2NrX2tlcm5lbCgpOwotCi0JLyoKLQkgKiBUaGlzIHRocmVhZCBkb2Vzbid0IG5lZWQgYW55IHVzZXItbGV2ZWwgYWNjZXNzLAotCSAqIHNvIGdldCByaWQgb2YgYWxsIG91ciByZXNvdXJjZXMuCi0JICovCi0JZGFlbW9uaXplKCJ1c2Itc3RvcmFnZSIpOwogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotCXVubG9ja19rZXJuZWwoKTsKLQotCS8qIGFjcXVpcmUgYSByZWZlcmVuY2UgdG8gdGhlIGhvc3QsIHNvIGl0IHdvbid0IGJlIGRlYWxsb2NhdGVkCi0JICogdW50aWwgd2UncmUgcmVhZHkgdG8gZXhpdCAqLwotCXNjc2lfaG9zdF9nZXQoaG9zdCk7Ci0KLQkvKiBzaWduYWwgdGhhdCB3ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KLQljb21wbGV0ZSgmKHVzLT5ub3RpZnkpKTsKIAogCWZvcig7OykgewogCQlVU19ERUJVR1AoIioqKiB0aHJlYWQgc2xlZXBpbmcuXG4iKTsKQEAgLTQ2Nyw2ICs0NzUsMTIgQEAKIAkJVVNfREVCVUdQKCJJL08gYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJdXMtPnNlbnNlYnVmID0ga21hbGxvYyhVU19TRU5TRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzLT5zZW5zZWJ1ZikgeworCQlVU19ERUJVR1AoIlNlbnNlIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNTU1LDggKzU2OSw4IEBACiAJCWJyZWFrOwogCiAjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0JY2FzZSBVU19QUl9TQ01fQVRBUEk6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTQ00vQVRBUEkiOworCWNhc2UgVVNfUFJfVVNCQVQ6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTaHV0dGxlIFVTQkFUIjsKIAkJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X3RyYW5zcG9ydDsKIAkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OwogCQl1cy0+bWF4X2x1biA9IDE7CkBAIC03NDAsNiArNzU0LDcgQEAKIHN0YXRpYyBpbnQgdXNiX3N0b3JfYWNxdWlyZV9yZXNvdXJjZXMoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCBwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGg7CiAKIAl1cy0+Y3VycmVudF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghdXMtPmN1cnJlbnRfdXJiKSB7CkBAIC03NDcsMzggKzc2MiwyOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKiBMb2NrIHRoZSBkZXZpY2Ugd2hpbGUgd2UgY2Fycnkgb3V0IHRoZSBuZXh0IHR3byBvcGVyYXRpb25zICovCi0JZG93bigmdXMtPmRldl9zZW1hcGhvcmUpOwotCi0JLyogRm9yIGJ1bGstb25seSBkZXZpY2VzLCBkZXRlcm1pbmUgdGhlIG1heCBMVU4gdmFsdWUgKi8KLQlpZiAodXMtPnByb3RvY29sID09IFVTX1BSX0JVTEspIHsKLQkJcCA9IHVzYl9zdG9yX0J1bGtfbWF4X2x1bih1cyk7Ci0JCWlmIChwIDwgMCkgewotCQkJdXAoJnVzLT5kZXZfc2VtYXBob3JlKTsKLQkJCXJldHVybiBwOwotCQl9Ci0JCXVzLT5tYXhfbHVuID0gcDsKLQl9Ci0KIAkvKiBKdXN0IGJlZm9yZSB3ZSBzdGFydCBvdXIgY29udHJvbCB0aHJlYWQsIGluaXRpYWxpemUKIAkgKiB0aGUgZGV2aWNlIGlmIGl0IG5lZWRzIGluaXRpYWxpemF0aW9uICovCi0JaWYgKHVzLT51bnVzdWFsX2Rldi0+aW5pdEZ1bmN0aW9uKQotCQl1cy0+dW51c3VhbF9kZXYtPmluaXRGdW5jdGlvbih1cyk7Ci0KLQl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOworCWlmICh1cy0+dW51c3VhbF9kZXYtPmluaXRGdW5jdGlvbikgeworCQlwID0gdXMtPnVudXN1YWxfZGV2LT5pbml0RnVuY3Rpb24odXMpOworCQlpZiAocCkKKwkJCXJldHVybiBwOworCX0KIAogCS8qIFN0YXJ0IHVwIG91ciBjb250cm9sIHRocmVhZCAqLwotCXAgPSBrZXJuZWxfdGhyZWFkKHVzYl9zdG9yX2NvbnRyb2xfdGhyZWFkLCB1cywgQ0xPTkVfVk0pOwotCWlmIChwIDwgMCkgeworCXRoID0ga3RocmVhZF9jcmVhdGUodXNiX3N0b3JfY29udHJvbF90aHJlYWQsIHVzLCAidXNiLXN0b3JhZ2UiKTsKKwlpZiAoSVNfRVJSKHRoKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFIAogCQkgICAgICAgIlVuYWJsZSB0byBzdGFydCBjb250cm9sIHRocmVhZFxuIik7Ci0JCXJldHVybiBwOworCQlyZXR1cm4gUFRSX0VSUih0aCk7CiAJfQotCXVzLT5waWQgPSBwOwotCWF0b21pY19pbmMoJnRvdGFsX3RocmVhZHMpOwogCi0JLyogV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdGFydCAqLwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJih1cy0+bm90aWZ5KSk7CisJLyogVGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCBmb3IgdGhlIGNvbnRyb2wgdGhyZWFkIGFuZAorCSAqIGNvdW50IGl0IGFtb25nIGFsbCB0aGUgdGhyZWFkcyB3ZSBoYXZlIGxhdW5jaGVkLiAgVGhlbgorCSAqIHN0YXJ0IGl0IHVwLiAqLworCXNjc2lfaG9zdF9nZXQodXNfdG9faG9zdCh1cykpOworCWF0b21pY19pbmMoJnRvdGFsX3RocmVhZHMpOworCXdha2VfdXBfcHJvY2Vzcyh0aCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgxMiw2ICs4MTcsOCBAQAogewogCVVTX0RFQlVHUCgiLS0gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKKwlrZnJlZSh1cy0+c2Vuc2VidWYpOworCiAJLyogRnJlZSB0aGUgZGV2aWNlLXJlbGF0ZWQgRE1BLW1hcHBlZCBidWZmZXJzICovCiAJaWYgKHVzLT5jcikKIAkJdXNiX2J1ZmZlcl9mcmVlKHVzLT5wdXNiX2Rldiwgc2l6ZW9mKCp1cy0+Y3IpLCB1cy0+Y3IsCkBAIC04NzIsMjEgKzg3OSw2IEBACiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gKHN0cnVjdCB1c19kYXRhICopX191czsKIAotCS8qCi0JICogVGhpcyB0aHJlYWQgZG9lc24ndCBuZWVkIGFueSB1c2VyLWxldmVsIGFjY2VzcywKLQkgKiBzbyBnZXQgcmlkIG9mIGFsbCBvdXIgcmVzb3VyY2VzLgotCSAqLwotCWxvY2tfa2VybmVsKCk7Ci0JZGFlbW9uaXplKCJ1c2Itc3Rvci1zY2FuIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JLyogQWNxdWlyZSBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCwgc28gaXQgd29uJ3QgYmUgZGVhbGxvY2F0ZWQKLQkgKiB1bnRpbCB3ZSdyZSByZWFkeSB0byBleGl0ICovCi0Jc2NzaV9ob3N0X2dldCh1c190b19ob3N0KHVzKSk7Ci0KLQkvKiBTaWduYWwgdGhhdCB3ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KLQljb21wbGV0ZSgmKHVzLT5ub3RpZnkpKTsKLQogCXByaW50ayhLRVJOX0RFQlVHCiAJCSJ1c2Itc3RvcmFnZTogZGV2aWNlIGZvdW5kIGF0ICVkXG4iLCB1cy0+cHVzYl9kZXYtPmRldm51bSk7CiAKQEAgLTkwNCw2ICs4OTYsMTQgQEAKIAogCS8qIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgY29ubmVjdGVkLCBwZXJmb3JtIHRoZSBzY2FubmluZyAqLwogCWlmICghdGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKworCQkvKiBGb3IgYnVsay1vbmx5IGRldmljZXMsIGRldGVybWluZSB0aGUgbWF4IExVTiB2YWx1ZSAqLworCQlpZiAodXMtPnByb3RvY29sID09IFVTX1BSX0JVTEsgJiYKKwkJCQkhKHVzLT5mbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pKSB7CisJCQlkb3duKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJCQl1cy0+bWF4X2x1biA9IHVzYl9zdG9yX0J1bGtfbWF4X2x1bih1cyk7CisJCQl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOworCQl9CiAJCXNjc2lfc2Nhbl9ob3N0KHVzX3RvX2hvc3QodXMpKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInVzYi1zdG9yYWdlOiBkZXZpY2Ugc2NhbiBjb21wbGV0ZVxuIik7CiAKQEAgLTkyMyw2ICs5MjMsNyBAQAogCXN0cnVjdCB1c19kYXRhICp1czsKIAljb25zdCBpbnQgaWRfaW5kZXggPSBpZCAtIHN0b3JhZ2VfdXNiX2lkczsgCiAJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwogCiAJVVNfREVCVUdQKCJVU0IgTWFzcyBTdG9yYWdlIGRldmljZSBkZXRlY3RlZFxuIik7CiAKQEAgLTEwMDMsMTcgKzEwMDQsMjEgQEAKIAl9CiAKIAkvKiBTdGFydCB1cCB0aGUgdGhyZWFkIGZvciBkZWxheWVkIFNDU0ktZGV2aWNlIHNjYW5uaW5nICovCi0JcmVzdWx0ID0ga2VybmVsX3RocmVhZCh1c2Jfc3Rvcl9zY2FuX3RocmVhZCwgdXMsIENMT05FX1ZNKTsKLQlpZiAocmVzdWx0IDwgMCkgeworCXRoID0ga3RocmVhZF9jcmVhdGUodXNiX3N0b3Jfc2Nhbl90aHJlYWQsIHVzLCAidXNiLXN0b3Itc2NhbiIpOworCWlmIChJU19FUlIodGgpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UgCiAJCSAgICAgICAiVW5hYmxlIHRvIHN0YXJ0IHRoZSBkZXZpY2Utc2Nhbm5pbmcgdGhyZWFkXG4iKTsKIAkJcXVpZXNjZV9hbmRfcmVtb3ZlX2hvc3QodXMpOworCQlyZXN1bHQgPSBQVFJfRVJSKHRoKTsKIAkJZ290byBCYWREZXZpY2U7CiAJfQotCWF0b21pY19pbmMoJnRvdGFsX3RocmVhZHMpOwogCi0JLyogV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdGFydCAqLwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJih1cy0+bm90aWZ5KSk7CisJLyogVGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCBmb3IgdGhlIHNjYW5uaW5nIHRocmVhZCBhbmQKKwkgKiBjb3VudCBpdCBhbW9uZyBhbGwgdGhlIHRocmVhZHMgd2UgaGF2ZSBsYXVuY2hlZC4gIFRoZW4KKwkgKiBzdGFydCBpdCB1cC4gKi8KKwlzY3NpX2hvc3RfZ2V0KHVzX3RvX2hvc3QodXMpKTsKKwlhdG9taWNfaW5jKCZ0b3RhbF90aHJlYWRzKTsKKwl3YWtlX3VwX3Byb2Nlc3ModGgpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEwMzgsNiArMTA0MywxOCBAQAogICogSW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3N0b3JhZ2VfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2Itc3RvcmFnZSIsCisJLnByb2JlID0Jc3RvcmFnZV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXN0b3JhZ2VfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9CXN0b3JhZ2Vfc3VzcGVuZCwKKwkucmVzdW1lID0Jc3RvcmFnZV9yZXN1bWUsCisjZW5kaWYKKwkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCB1c2Jfc3Rvcl9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCmluZGV4IGExOTVhZGEuLjk4YjA5NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaApAQCAtMTE3LDYgKzExNyw3IEBACiAgKi8KIAogI2RlZmluZSBVU19JT0JVRl9TSVpFCQk2NAkvKiBTaXplIG9mIHRoZSBETUEtbWFwcGVkIEkvTyBidWZmZXIgKi8KKyNkZWZpbmUgVVNfU0VOU0VfU0laRQkJMTgJLyogU2l6ZSBvZiB0aGUgYXV0b3NlbnNlIGRhdGEgYnVmZmVyICovCiAKIHR5cGVkZWYgaW50ICgqdHJhbnNfY21uZCkoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSopOwogdHlwZWRlZiBpbnQgKCp0cmFuc19yZXNldCkoc3RydWN0IHVzX2RhdGEqKTsKQEAgLTE2MCwxNCArMTYxLDEyIEBACiAJc3RydWN0IHNjc2lfY21uZAkqc3JiOwkJIC8qIGN1cnJlbnQgc3JiCQkqLwogCXVuc2lnbmVkIGludAkJdGFnOwkJIC8qIGN1cnJlbnQgZENCV1RhZwkqLwogCi0JLyogdGhyZWFkIGluZm9ybWF0aW9uICovCi0JaW50CQkJcGlkOwkJIC8qIGNvbnRyb2wgdGhyZWFkCSAqLwotCiAJLyogY29udHJvbCBhbmQgYnVsayBjb21tdW5pY2F0aW9ucyBkYXRhICovCiAJc3RydWN0IHVyYgkJKmN1cnJlbnRfdXJiOwkgLyogVVNCIHJlcXVlc3RzCSAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJKmNyOwkJIC8qIGNvbnRyb2wgcmVxdWVzdHMJICovCiAJc3RydWN0IHVzYl9zZ19yZXF1ZXN0CWN1cnJlbnRfc2c7CSAvKiBzY2F0dGVyLWdhdGhlciByZXEuICAqLwogCXVuc2lnbmVkIGNoYXIJCSppb2J1ZjsJCSAvKiBJL08gYnVmZmVyCQkgKi8KKwl1bnNpZ25lZCBjaGFyCQkqc2Vuc2VidWY7CSAvKiBzZW5zZSBkYXRhIGJ1ZmZlcgkgKi8KIAlkbWFfYWRkcl90CQljcl9kbWE7CQkgLyogYnVmZmVyIERNQSBhZGRyZXNzZXMgKi8KIAlkbWFfYWRkcl90CQlpb2J1Zl9kbWE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKaW5kZXggMzUzZjI0ZC4uNmMzYTUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKKysrIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKQEAgLTIyMyw5ICsyMjMsOCBAQAogICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggZGV2ZnMgYW5kIHRoZSBkcml2ZXIgY29yZQogICovCiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgc2tlbF9jbGFzcyA9IHsKLQkubmFtZSA9CQkidXNiL3NrZWwlZCIsCisJLm5hbWUgPQkJInNrZWwlZCIsCiAJLmZvcHMgPQkJJnNrZWxfZm9wcywKLQkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEgsCiAJLm1pbm9yX2Jhc2UgPQlVU0JfU0tFTF9NSU5PUl9CQVNFLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCBlMjhhNzQyLi5hMzI3ZTAzIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtMzA1MCw2ICszMDUwLDcgQEAKIEhBTkRMRV9JT0NUTChVU0JERVZGU19DT05UUk9MMzIsIGRvX3VzYmRldmZzX2NvbnRyb2wpCiBIQU5ETEVfSU9DVEwoVVNCREVWRlNfQlVMSzMyLCBkb191c2JkZXZmc19idWxrKQogSEFORExFX0lPQ1RMKFVTQkRFVkZTX0RJU0NTSUdOQUwzMiwgZG9fdXNiZGV2ZnNfZGlzY3NpZ25hbCkKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfSU9DVEwzMikKIC8qIGkyYyAqLwogSEFORExFX0lPQ1RMKEkyQ19GVU5DUywgd19sb25nKQogSEFORExFX0lPQ1RMKEkyQ19SRFdSLCBkb19pMmNfcmR3cl9pb2N0bCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfbXBwYXJzZS5oCmluZGV4IDJiOWU2ZDUuLjFjY2UyYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9tcHBhcnNlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX21wcGFyc2UuaApAQCAtMjIsNyArMjIsNiBAQAogewogfQogCi1leHRlcm4gaW50IHVzYl9lYXJseV9oYW5kb2ZmOwogc3RhdGljIGlubGluZSBpbnQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgCiAJCWNoYXIgKnByb2R1Y3RpZCkKIHsKQEAgLTMyLDcgKzMxLDYgQEAKIAkJCSB8fCAhc3RybmNtcChwcm9kdWN0aWQsICJSVVRITEVTUyBTTVAiLCAxMikpKXsKIAkJdXNlX2N5Y2xvbmUgPSAxOyAvKmVuYWJsZSBjeWNsb25lLXRpbWVyKi8KIAkJc2V0dXBfc3VtbWl0KCk7Ci0JCXVzYl9lYXJseV9oYW5kb2ZmID0gMTsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNDYsNyArNDQsNiBAQAogCSAgICAgfHwgIXN0cm5jbXAob2VtX3RhYmxlX2lkLCAiRVhBIiwgMykpKXsKIAkJdXNlX2N5Y2xvbmUgPSAxOyAvKmVuYWJsZSBjeWNsb25lLXRpbWVyKi8KIAkJc2V0dXBfc3VtbWl0KCk7Ci0JCXVzYl9lYXJseV9oYW5kb2ZmID0gMTsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaAppbmRleCBhMmY2YWM1Li5jYTVlYTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaApAQCAtMjYsNyArMjYsNyBAQAogdHlwZWRlZiB2b2lkIGlhNjRfbXZfaXJxX2luaXRfdCAodm9pZCk7CiB0eXBlZGVmIHZvaWQgaWE2NF9tdl9zZW5kX2lwaV90IChpbnQsIGludCwgaW50LCBpbnQpOwogdHlwZWRlZiB2b2lkIGlhNjRfbXZfdGltZXJfaW50ZXJydXB0X3QgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2dsb2JhbF90bGJfcHVyZ2VfdCAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit0eXBlZGVmIHZvaWQgaWE2NF9tdl9nbG9iYWxfdGxiX3B1cmdlX3QgKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiB0eXBlZGVmIHZvaWQgaWE2NF9tdl90bGJfbWlncmF0ZV9maW5pc2hfdCAoc3RydWN0IG1tX3N0cnVjdCAqKTsKIHR5cGVkZWYgdW5zaWduZWQgaW50IGlhNjRfbXZfbG9jYWxfdmVjdG9yX3RvX2lycSAodTgpOwogdHlwZWRlZiBjaGFyICppYTY0X212X3BjaV9nZXRfbGVnYWN5X21lbV90IChzdHJ1Y3QgcGNpX2J1cyAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19ocHp4MS5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxLmgKaW5kZXggZGFhZmU1MC4uZTkwZGFmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxLmgKQEAgLTEsOCArMSw3IEBACiAjaWZuZGVmIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX2gKICNkZWZpbmUgX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfaAogCi1leHRlcm4gaWE2NF9tdl9zZXR1cF90IGRpZ19zZXR1cDsKLWV4dGVybiBpYTY0X212X3NldHVwX3QJCQlzYmFfc2V0dXA7CitleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJZGlnX3NldHVwOwogZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXNiYV9hbGxvY19jb2hlcmVudDsKIGV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CXNiYV9mcmVlX2NvaGVyZW50OwogZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGUJCXNiYV9tYXBfc2luZ2xlOwpAQCAtMTksMTUgKzE4LDE1IEBACiAgKiBwbGF0Zm9ybSdzIG1hY2h2ZWMgc3RydWN0dXJlLiAgV2hlbiBjb21waWxpbmcgYSBub24tZ2VuZXJpYyBrZXJuZWwsCiAgKiB0aGUgbWFjcm9zIGFyZSB1c2VkIGRpcmVjdGx5LgogICovCi0jZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkiaHB6eDEiCi0jZGVmaW5lIHBsYXRmb3JtX3NldHVwCQkJc2JhX3NldHVwCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQltYWNodmVjX25vb3AKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CXNiYV9hbGxvY19jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAlzYmFfZnJlZV9jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZQkJc2JhX21hcF9zaW5nbGUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZQlzYmFfdW5tYXBfc2luZ2xlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2cJCXNiYV9tYXBfc2cKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnCQlzYmFfdW5tYXBfc2cKKyNkZWZpbmUgcGxhdGZvcm1fbmFtZQkJCQkiaHB6eDEiCisjZGVmaW5lIHBsYXRmb3JtX3NldHVwCQkJCWRpZ19zZXR1cAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJCW1hY2h2ZWNfbm9vcAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQJCXNiYV9hbGxvY19jb2hlcmVudAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAkJc2JhX2ZyZWVfY29oZXJlbnQKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGUJCQlzYmFfbWFwX3NpbmdsZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlCQlzYmFfdW5tYXBfc2luZ2xlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2cJCQlzYmFfbWFwX3NnCisjZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zZwkJCXNiYV91bm1hcF9zZwogI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQogI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1CQltYWNodmVjX2RtYV9zeW5jX3NnCiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxX3N3aW90bGIuaAppbmRleCA5OTI0YjFiLi5mMDBhMzRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19ocHp4MV9zd2lvdGxiLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX1NXSU9UTEJfaAogCiBleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJCWRpZ19zZXR1cDsKLWV4dGVybiBpYTY0X212X2RtYV9pbml0CQkJCWh3c3dfaW5pdDsKIGV4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAkJaHdzd19hbGxvY19jb2hlcmVudDsKIGV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CQlod3N3X2ZyZWVfY29oZXJlbnQ7CiBleHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZQkJCWh3c3dfbWFwX3NpbmdsZTsKQEAgLTI2LDcgKzI1LDcgQEAKICNkZWZpbmUgcGxhdGZvcm1fbmFtZQkJCQkiaHB6eDFfc3dpb3RsYiIKIAogI2RlZmluZSBwbGF0Zm9ybV9zZXR1cAkJCQlkaWdfc2V0dXAKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCQlod3N3X2luaXQKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCQltYWNodmVjX25vb3AKICNkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CQlod3N3X2FsbG9jX2NvaGVyZW50CiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CQlod3N3X2ZyZWVfY29oZXJlbnQKICNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGUJCQlod3N3X21hcF9zaW5nbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKaW5kZXggMTU5MGRjNi4uNDY1MDFiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKQEAgLTE2LDEwICsxNiwxMSBAQAogICogCS0gaW5pdHJkIChvcHRpb25hbCkKICAqIAktIGNvbW1hbmQgbGluZSBzdHJpbmcKICAqIAktIGtlcm5lbCBjb2RlICYgZGF0YQorICogCS0gS2VybmVsIG1lbW9yeSBtYXAgYnVpbHQgZnJvbSBFRkkgbWVtb3J5IG1hcAogICoKICAqIE1vcmUgY291bGQgYmUgYWRkZWQgaWYgbmVjZXNzYXJ5CiAgKi8KLSNkZWZpbmUgSUE2NF9NQVhfUlNWRF9SRUdJT05TIDUKKyNkZWZpbmUgSUE2NF9NQVhfUlNWRF9SRUdJT05TIDYKIAogc3RydWN0IHJzdmRfcmVnaW9uIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIGVsZW1lbnQgKi8KQEAgLTMzLDYgKzM0LDcgQEAKIGV4dGVybiB2b2lkIHJlc2VydmVfbWVtb3J5ICh2b2lkKTsKIGV4dGVybiB2b2lkIGZpbmRfaW5pdHJkICh2b2lkKTsKIGV4dGVybiBpbnQgZmlsdGVyX3JzdmRfbWVtb3J5ICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKTsKK2V4dGVybiB2b2lkIGVmaV9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CiAKIC8qCiAgKiBGb3Igcm91bmRpbmcgYW4gYWRkcmVzcyB0byB0aGUgbmV4dCBJQTY0X0dSQU5VTEVfU0laRSBvciBvcmRlcgpAQCAtNDEsNyArNDMsNyBAQAogI2RlZmluZSBHUkFOVUxFUk9VTkRVUChuKQkoKChuKStJQTY0X0dSQU5VTEVfU0laRS0xKSAmIH4oSUE2NF9HUkFOVUxFX1NJWkUtMSkpCiAjZGVmaW5lIE9SREVSUk9VTkRET1dOKG4pCSgobikgJiB+KChQQUdFX1NJWkU8PE1BWF9PUkRFUiktMSkpCiAKLSNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjaWZkZWYgQ09ORklHX05VTUEKICAgZXh0ZXJuIHZvaWQgY2FsbF9wZXJub2RlX21lbW9yeSAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIHZvaWQgKmZ1bmMpOwogI2Vsc2UKICMgZGVmaW5lIGNhbGxfcGVybm9kZV9tZW1vcnkoc3RhcnQsIGxlbiwgZnVuYykJKCpmdW5jKShzdGFydCwgbGVuLCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmgKaW5kZXggZDMyZjUxZS4uMzRlZmU4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21tem9uZS5oCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbWVtaW5pdC5oPgogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorI2lmZGVmIENPTkZJR19OVU1BCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCiB7CkBAIC0zMSw2ICszMSwxMCBAQAogI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKK2V4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19JQTY0X0RJRyAvKiBESUcgc3lzdGVtcyBhcmUgc21hbGwgKi8KICMgZGVmaW5lIE1BWF9QSFlTTk9ERV9JRAk4CiAjIGRlZmluZSBOUl9OT0RFX01FTUJMS1MJKE1BWF9OVU1OT0RFUyAqIDgpCkBAIC0zOSw4ICs0Myw4IEBACiAjIGRlZmluZSBOUl9OT0RFX01FTUJMS1MJKE1BWF9OVU1OT0RFUyAqIDQpCiAjZW5kaWYKIAotI2Vsc2UgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworI2Vsc2UgLyogQ09ORklHX05VTUEgKi8KICMgZGVmaW5lIE5SX05PREVfTUVNQkxLUwkoTUFYX05VTU5PREVTICogNCkKLSNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9NTVpPTkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9ub2RlZGF0YS5oIGIvaW5jbHVkZS9hc20taWE2NC9ub2RlZGF0YS5oCmluZGV4IDZiMGYzZWQuLjk5NzhjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbm9kZWRhdGEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRhLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorI2lmZGVmIENPTkZJR19OVU1BCiAKIC8qCiAgKiBOb2RlIERhdGEuIE9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGlzIGxvY2F0ZWQgb24gZWFjaCBub2RlIG9mIGEgTlVNQSBzeXN0ZW0uCkBAIC00Nyw2ICs0Nyw2IEBACiAgKi8KICNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCShsb2NhbF9ub2RlX2RhdGEtPnBnX2RhdGFfcHRyc1tuaWRdKQogCi0jZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfTk9ERURBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAppbmRleCA5ZWRmZmFkLi5lZjQzNmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaApAQCAtMTAyLDE1ICsxMDIsMTUgQEAKIAogI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKIGV4dGVybiBpbnQgaWE2NF9wZm5fdmFsaWQgKHVuc2lnbmVkIGxvbmcgcGZuKTsKLSNlbHNlCisjZWxpZiBkZWZpbmVkKENPTkZJR19GTEFUTUVNKQogIyBkZWZpbmUgaWE2NF9wZm5fdmFsaWQocGZuKSAxCiAjZW5kaWYKIAotI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KICMgZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pIDwgbWF4X21hcG5yKSAmJiBpYTY0X3Bmbl92YWxpZChwZm4pKQogIyBkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCh1bnNpZ25lZCBsb25nKSAocGFnZSAtIG1lbV9tYXApKQogIyBkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQotI2Vsc2UKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RJU0NPTlRJR01FTSkKIGV4dGVybiBzdHJ1Y3QgcGFnZSAqdm1lbV9tYXA7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3BmbjsKICMgZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pIDwgbWF4X2xvd19wZm4pICYmIGlhNjRfcGZuX3ZhbGlkKHBmbikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FyY2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCmluZGV4IGFiODI3ZDIuLjFhMzgzMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCkBAIC0xOCw2ICsxOCwzMiBAQAogI2luY2x1ZGUgPGFzbS9zbi9zbl9jcHVpZC5oPgogCiAvKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgTlVNQUxJTksgbm9kZXMgdGhhdCBjYW4gYmUgcGFydCBvZiBhIHNpbmdsZQorICogU1NJIGtlcm5lbC4gVGhpcyBudW1iZXIgaW5jbHVkZXMgQy1icmljaywgTS1icmlja3MsIGFuZCBUSU9zLiBOb2RlcyBpbgorICogcmVtb3RlIHBhcnRpdGlvbnMgYXJlIE5PVCBpbmNsdWRlZCBpbiB0aGlzIG51bWJlci4KKyAqIFRoZSBudW1iZXIgb2YgY29tcGFjdCBub2RlcyBjYW5ub3QgZXhjZWVkIHNpemUgb2YgYSBjb2hlcmVuY3kgZG9tYWluLgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBkZWZpbmUgaXMgdG8gc3BlY2lmeSBhIG5vZGUgY291bnQgdGhhdCBpbmNsdWRlcworICogYWxsIEMvTS9USU8gbm9kZXMgaW4gYW4gU1NJIHN5c3RlbS4KKyAqCisgKiBTR0kgc3lzdGVtIGNhbiBjdXJyZW50bHkgc3VwcG9ydCB1cCB0byAyNTYgQy9NIG5vZGVzIHBsdXMgYWRkaXRpb25hbCBUSU8gbm9kZXMuCisgKgorICogCU5vdGU6IEFDUEkyMCBoYXMgYW4gYXJjaGl0ZWN0dXJhbCBsaW1pdCBvZiAyNTYgbm9kZXMuIFdoZW4gd2UgdXBncmFkZQorICogCXRvIEFDUEkzLjAsIHRoaXMgbGltaXQgd2lsbCBiZSByZW1vdmVkLiBUaGUgbm90aW9uIG9mICJjb21wYWN0IG5vZGVzIgorICogCXNob3VsZCBiZSBkZWxldGVkIGFuZCBUSU9zIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBNQVhfTlVNTk9ERVMuCisgKi8KKyNkZWZpbmUgTUFYX0NPTVBBQ1RfTk9ERVMJNTEyCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBub2RlcyBpbiBhbGwgcGFydGl0aW9ucyBhbmQgaW4gYWxsIGNvaGVyZW5jeSBkb21haW5zLgorICogVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG5vZGVzIGFjY2Vzc2libGUgaW4gdGhlIG51bWFsaW5rIGZhYnJpYy4gSXQKKyAqIGluY2x1ZGVzIGFsbCBDICYgTSBicmlja3MsIHBsdXMgYWxsIFRJT3MuCisgKgorICogVGhpcyB2YWx1ZSBpcyBhbHNvIHRoZSB2YWx1ZSBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2YgTkFTSURzIGluIHRoZSBudW1hbGluaworICogZmFicmljLgorICovCisjZGVmaW5lIE1BWF9OVU1BTElOS19OT0RFUwkxNjM4NAorCisvKgogICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGF0dHJpYnV0ZXMgb2YgdGhlIEhVQiBjaGlwLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZQogICogZnJlcXVlbnRseSByZWZlcmVuY2VkLiBUaGV5IGFyZSBrZXB0IGluIHRoZSBwZXItY3B1IGRhdGEgYXJlYXMgb2YgZWFjaCBjcHUuCiAgKiBUaGV5IGFyZSBrZXB0IHRvZ2V0aGVyIGluIGEgc3RydWN0IHRvIG1pbmltaXplIGNhY2hlIG1pc3Nlcy4KQEAgLTQxLDE1ICs2Nyw2IEBACiAKIAogLyoKLSAqIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHRoYXQgY2FuIGJlIHBhcnQgb2YgYSBrZXJuZWwuCi0gKiBFZmZlY3RpdmVseSwgaXQncyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29tcGFjdCBub2RlIGlkcyAoY25vZGVpZF90KS4KLSAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIE1BWF9OQVNJRFMuCi0gKi8KLSNkZWZpbmUgTUFYX0NPTVBBQ1RfTk9ERVMJMjA0OAotI2RlZmluZSBDUFVTX1BFUl9OT0RFCQk0Ci0KLQotLyoKICAqIENvbXBhY3Qgbm9kZSBJRCB0byBuYXNpZCBtYXBwaW5ncyBrZXB0IGluIHRoZSBwZXItY3B1IGRhdGEgYXJlYXMgb2YgZWFjaAogICogY3B1LgogICovCkBAIC01Nyw3ICs3NCw2IEBACiAjZGVmaW5lIHNuX2Nub2RlaWRfdG9fbmFzaWQJKCZfX2dldF9jcHVfdmFyKF9fc25fY25vZGVpZF90b19uYXNpZFswXSkpCiAKIAotCiBleHRlcm4gdTggc25fcGFydGl0aW9uX2lkOwogZXh0ZXJuIHU4IHNuX3N5c3RlbV9zaXplOwogZXh0ZXJuIHU4IHNuX3NoYXJpbmdfZG9tYWluX3NpemU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2lvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2lvLmgKaW5kZXggNDIyMDk3My4uNDFjNzNhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vaW8uaApAQCAtMTQsNyArMTQsNyBAQAogZXh0ZXJuIHZvaWQgKiBzbl9pb19hZGRyKHVuc2lnbmVkIGxvbmcgcG9ydCkgX19hdHRyaWJ1dGVfY29uc3RfXzsgLyogRm9yd2FyZCBkZWZpbml0aW9uICovCiBleHRlcm4gdm9pZCBfX3NuX21taW93Yih2b2lkKTsgLyogRm9yd2FyZCBkZWZpbml0aW9uICovCiAKLWV4dGVybiBpbnQgbnVtaW9ub2RlczsKK2V4dGVybiBpbnQgbnVtX2Nub2RlczsKIAogI2RlZmluZSBfX3NuX21mX2EoKSAgIGlhNjRfbWZhKCkKIApAQCAtMzYsNiArMzYsMTUgQEAKICNkZWZpbmUgX19zbl9yZWFkcV9yZWxheGVkIF9fX3NuX3JlYWRxX3JlbGF4ZWQKIAogLyoKKyAqIENvbnZlbmllbmNlIG1hY3JvcyBmb3Igc2V0dGluZy9jbGVhcmluZyBiaXRzIHVzaW5nIHRoZSBhYm92ZSBhY2Nlc3NvcnMKKyAqLworCisjZGVmaW5lIF9fc25fc2V0cV9yZWxheGVkKGFkZHIsIHZhbCkgXAorCXdyaXRlcSgoX19zbl9yZWFkcV9yZWxheGVkKGFkZHIpIHwgKHZhbCkpLCAoYWRkcikpCisjZGVmaW5lIF9fc25fY2xycV9yZWxheGVkKGFkZHIsIHZhbCkgXAorCXdyaXRlcSgoX19zbl9yZWFkcV9yZWxheGVkKGFkZHIpICYgfih2YWwpKSwgKGFkZHIpKQorCisvKgogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgU04gUGxhdGZvcm0gc3BlY2lmaWMsIGNhbGxlZCB3aGVuCiAgKiBhIHJlZmVyZW5jZSBpcyBtYWRlIHRvIGluWC9vdXRYIHNldCBtYWNyb3MuICBTTiBQbGF0Zm9ybQogICogaW5YIHNldCBvZiBtYWNyb3MgZW5zdXJlcyB0aGF0IFBvc3RlZCBETUEgd3JpdGVzIG9uIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9rbGNvbmZpZy5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9rbGNvbmZpZy5oCmluZGV4IDlmOTIwYzcuLmJjYmYyMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24va2xjb25maWcuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2tsY29uZmlnLmgKQEAgLTIwOCwxOSArMjA4LDYgQEAKIAlrbGNvbmZfb2ZmX3QJYnJkX25leHRfc2FtZTsgICAgLyogTmV4dCBCT0FSRCB3aXRoIHNhbWUgbmFzaWQgKi8KIH0gbGJvYXJkX3Q7CiAKLSNkZWZpbmUgS0xDRl9OVU1fQ09NUFMoX2JyZCkJKChfYnJkKS0+YnJkX251bWNvbXB0cykKLSNkZWZpbmUgTk9ERV9PRkZTRVRfVE9fS0xJTkZPKG4sb2ZmKSAgICAoKGtsaW5mb190KikgVE9fTk9ERV9DQUMobixvZmYpKQotI2RlZmluZSBLTENGX05FWFQoX2JyZCkgICAgICAgICBcCi0gICAgICAgICgoX2JyZCktPmJyZF9uZXh0X3NhbWUgPyAgICAgXAotICAgICAgICAgKE5PREVfT0ZGU0VUX1RPX0xCT0FSRCgoX2JyZCktPmJyZF9uZXh0X3NhbWVfaG9zdCwgKF9icmQpLT5icmRfbmV4dF9zYW1lKSk6IE5VTEwpCi0jZGVmaW5lIEtMQ0ZfTkVYVF9BTlkoX2JyZCkgICAgICAgICBcCi0gICAgICAgICgoX2JyZCktPmJyZF9uZXh0X2FueSA/ICAgICBcCi0gICAgICAgICAoTk9ERV9PRkZTRVRfVE9fTEJPQVJEKE5BU0lEX0dFVChfYnJkKSwgKF9icmQpLT5icmRfbmV4dF9hbnkpKTogTlVMTCkKLSNkZWZpbmUgS0xDRl9DT01QKF9icmQsIF9uZHgpICAgXAotICAgICAgICAgICAgICAgICgoKChfYnJkKS0+YnJkX2NvbXB0c1soX25keCldKSA9PSAwKSA/IDAgOiBcCi0JCQkoTk9ERV9PRkZTRVRfVE9fS0xJTkZPKE5BU0lEX0dFVChfYnJkKSwgKF9icmQpLT5icmRfY29tcHRzWyhfbmR4KV0pKSkKLQotCiAvKgogICogR2VuZXJpYyBpbmZvIHN0cnVjdHVyZS4gVGhpcyBzdG9yZXMgY29tbW9uIGluZm8gYWJvdXQgYSAKICAqIGNvbXBvbmVudC4KQEAgLTI0OSwyNCArMjM2LDExIEBACiB9IGtsaW5mb190IDsKIAogCi1zdGF0aWMgaW5saW5lIGxib2FyZF90ICpmaW5kX2xib2FyZF9hbnkobGJvYXJkX3QgKiBzdGFydCwgdW5zaWduZWQgY2hhciBicmRfdHlwZSkKK3N0YXRpYyBpbmxpbmUgbGJvYXJkX3QgKmZpbmRfbGJvYXJkX25leHQobGJvYXJkX3QgKiBicmQpCiB7Ci0gICAgICAgIC8qIFNlYXJjaCBhbGwgYm9hcmRzIHN0b3JlZCBvbiB0aGlzIG5vZGUuICovCi0KLSAgICAgICAgd2hpbGUgKHN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0LT5icmRfdHlwZSA9PSBicmRfdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydDsKLSAgICAgICAgICAgICAgICBzdGFydCA9IEtMQ0ZfTkVYVF9BTlkoc3RhcnQpOwotICAgICAgICB9Ci0gICAgICAgIC8qIERpZG4ndCBmaW5kIGl0LiAqLwotICAgICAgICByZXR1cm4gKGxib2FyZF90ICopIE5VTEw7CisJaWYgKGJyZCAmJiBicmQtPmJyZF9uZXh0X2FueSkKKwkJcmV0dXJuIE5PREVfT0ZGU0VUX1RPX0xCT0FSRChOQVNJRF9HRVQoYnJkKSwgYnJkLT5icmRfbmV4dF9hbnkpOworICAgICAgICByZXR1cm4gTlVMTDsKIH0KIAotCi0vKiBleHRlcm5hbCBkZWNsYXJhdGlvbnMgb2YgTGludXgga2VybmVsIGZ1bmN0aW9ucy4gKi8KLQotZXh0ZXJuIGxib2FyZF90ICpyb290X2xib2FyZFtdOwotZXh0ZXJuIGtsaW5mb190ICpmaW5kX2NvbXBvbmVudChsYm9hcmRfdCAqYnJkLCBrbGluZm9fdCAqa2xpLCB1bnNpZ25lZCBjaGFyIHR5cGUpOwotZXh0ZXJuIGtsaW5mb190ICpmaW5kX2ZpcnN0X2NvbXBvbmVudChsYm9hcmRfdCAqYnJkLCB1bnNpZ25lZCBjaGFyIHR5cGUpOwotCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NOX0tMQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vbDEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbDEuaAppbmRleCAyZTVmMGFhLi5lM2I4MTkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2wxLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9sMS5oCkBAIC0zNSw0ICszNSwxNiBAQAogI2RlZmluZSBMMV9CUklDS1RZUEVfQVRIRU5BCTB4MmIgICAgICAgICAgICAvKiArICovCiAjZGVmaW5lIEwxX0JSSUNLVFlQRV9EQVlUT05BCTB4N2EgICAgICAgICAgICAvKiB6ICovCiAKKy8qIGJvYXJkIHR5cGUgcmVzcG9uc2UgY29kZXMgKi8KKyNkZWZpbmUgTDFfQk9BUkRUWVBFX0lQNjkgICAgICAgMHgwMTAwICAgICAgICAgIC8qIENBICovCisjZGVmaW5lIEwxX0JPQVJEVFlQRV9JUDYzICAgICAgIDB4MDIwMCAgICAgICAgICAvKiBDQiAqLworI2RlZmluZSBMMV9CT0FSRFRZUEVfQkFTRUlPICAgICAweDAzMDAgICAgICAgICAgLyogSUIgKi8KKyNkZWZpbmUgTDFfQk9BUkRUWVBFX1BDSUUyU0xPVCAgMHgwNDAwICAgICAgICAgIC8qIElDICovCisjZGVmaW5lIEwxX0JPQVJEVFlQRV9QQ0lYM1NMT1QgIDB4MDUwMCAgICAgICAgICAvKiBJRCAqLworI2RlZmluZSBMMV9CT0FSRFRZUEVfUENJWFBDSUU0U0xPVCAweDA2MDAgICAgICAgLyogSUUgKi8KKyNkZWZpbmUgTDFfQk9BUkRUWVBFX0FCQUNVUyAgICAgMHgwNzAwICAgICAgICAgIC8qIEFCICovCisjZGVmaW5lIEwxX0JPQVJEVFlQRV9EQVlUT05BICAgIDB4MDgwMCAgICAgICAgICAvKiBBRCAqLworI2RlZmluZSBMMV9CT0FSRFRZUEVfSU5WQUwgICAgICAoLTEpICAgICAgICAgICAgLyogaW52YWxpZCBicmljayB0eXBlICovCisKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9MMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL25vZGVwZGEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbm9kZXBkYS5oCmluZGV4IDQ3YmI4MTAuLjZmNmQ2OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vbm9kZXBkYS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbm9kZXBkYS5oCkBAIC01NSw3ICs1NSw2IEBACiAJICovCiAJc3RydWN0IHBoeXNfY3B1aWQJcGh5c19jcHVpZFtOUl9DUFVTXTsKIAlzcGlubG9ja190CQlwdGNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCXNwaW5sb2NrX3QJCWJpc3RfbG9jazsKIH07CiAKIHR5cGVkZWYgc3RydWN0IG5vZGVwZGFfcyBub2RlcGRhX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmgKaW5kZXggZDJjMWQzNC4uNzQ5ZGViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaApAQCAtMTA1LDcgKzEwNSw2IEBACiAjZGVmaW5lIGNwdWlkX3RvX25hc2lkKGNwdWlkKQkJKHNuX25vZGVwZGEtPnBoeXNfY3B1aWRbY3B1aWRdLm5hc2lkKQogI2RlZmluZSBjcHVpZF90b19zdWJub2RlKGNwdWlkKQkJKHNuX25vZGVwZGEtPnBoeXNfY3B1aWRbY3B1aWRdLnN1Ym5vZGUpCiAjZGVmaW5lIGNwdWlkX3RvX3NsaWNlKGNwdWlkKQkJKHNuX25vZGVwZGEtPnBoeXNfY3B1aWRbY3B1aWRdLnNsaWNlKQotI2RlZmluZSBjcHVpZF90b19jbm9kZWlkKGNwdWlkKQkJKHBoeXNpY2FsX25vZGVfbWFwW2NwdWlkX3RvX25hc2lkKGNwdWlkKV0pCiAKIAogLyoKQEAgLTExMyw4ICsxMTIsNiBAQAogICogb2YgcG90ZW50aWFsbHkgbGFyZ2UgdGFibGVzLgogICovCiBleHRlcm4gaW50IG5hc2lkX3NsaWNlX3RvX2NwdWlkKGludCwgaW50KTsKLSNkZWZpbmUgbmFzaWRfc2xpY2VfdG9fY3B1X3BoeXNpY2FsX2lkKG5hc2lkLCBzbGljZSkJCQlcCi0JY3B1X3BoeXNpY2FsX2lkKG5hc2lkX3NsaWNlX3RvX2NwdWlkKG5hc2lkLCBzbGljZSkpCiAKIC8qCiAgKiBjbm9kZWlkX3RvX25hc2lkIC0gY29udmVydCBhIGNub2RlaWQgdG8gYSBOQVNJRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKaW5kZXggZmVhMzViMy4uM2Y3NTY0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCkBAIC00Nyw2ICs0Nyw3IEBACiAjZGVmaW5lICBTTl9TQUxfQ09OU09MRV9QVVRCCQkJICAgMHgwMjAwMDAyOAogI2RlZmluZSAgU05fU0FMX0NPTlNPTEVfWE1JVF9DSEFSUwkJICAgMHgwMjAwMDAyYQogI2RlZmluZSAgU05fU0FMX0NPTlNPTEVfUkVBREMJCQkgICAweDAyMDAwMDJiCisjZGVmaW5lICBTTl9TQUxfU1lTQ1RMX09QCQkJICAgMHgwMjAwMDAzMAogI2RlZmluZSAgU05fU0FMX1NZU0NUTF9NT0RJRF9HRVQJICAgICAgICAgICAweDAyMDAwMDMxCiAjZGVmaW5lICBTTl9TQUxfU1lTQ1RMX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDMyCiAjZGVmaW5lICBTTl9TQUxfU1lTQ1RMX0lPQlJJQ0tfTU9EVUxFX0dFVCAgICAgICAgICAweDAyMDAwMDMzCkBAIC02Nyw3ICs2OCw3IEBACiAjZGVmaW5lICBTTl9TQUxfSU9JRl9JTlRFUlJVUFQJCQkgICAweDAyMDAwMDRhCiAjZGVmaW5lICBTTl9TQUxfSFdQRVJGX09QCQkJICAgMHgwMjAwMDA1MCAgIC8vIGxvY2sKICNkZWZpbmUgIFNOX1NBTF9JT0lGX0VSUk9SX0lOVEVSUlVQVAkJICAgMHgwMjAwMDA1MQotCisjZGVmaW5lICBTTl9TQUxfSU9JRl9QQ0lfU0FGRQkJCSAgIDB4MDIwMDAwNTIKICNkZWZpbmUgIFNOX1NBTF9JT0lGX1NMT1RfRU5BQkxFCQkgICAweDAyMDAwMDUzCiAjZGVmaW5lICBTTl9TQUxfSU9JRl9TTE9UX0RJU0FCTEUJCSAgIDB4MDIwMDAwNTQKICNkZWZpbmUgIFNOX1NBTF9JT0lGX0dFVF9IVUJERVZfSU5GTwkJICAgMHgwMjAwMDA1NQpAQCAtMTAxLDYgKzEwMiwxMyBAQAogI2RlZmluZSBTQUxfSU5UUl9GUkVFCQkyCiAKIC8qCisgKiBvcGVyYXRpb25zIGF2YWlsYWJsZSBvbiB0aGUgZ2VuZXJpYyBTTl9TQUxfU1lTQ1RMX09QCisgKiBydW50aW1lIHNlcnZpY2UKKyAqLworI2RlZmluZSBTQUxfU1lTQ1RMX09QX0lPQk9BUkQJCTB4MDAwMSAgLyogIHJldHJpZXZlIGJvYXJkIHR5cGUgKi8KKyNkZWZpbmUgU0FMX1NZU0NUTF9PUF9USU9fSkxDS19SU1QgICAgICAweDAwMDIgIC8qIGlzc3VlIFRJTyBjbG9jayByZXNldCAqLworCisvKgogICogSVJvdXRlciAoaS5lLiBnZW5lcmFsaXplZCBzeXN0ZW0gY29udHJvbGxlcikgb3BlcmF0aW9ucwogICovCiAjZGVmaW5lIFNBTF9JUk9VVEVSX09QRU4JMAkvKiBvcGVuIGEgc3ViY2hhbm5lbCAqLwpAQCAtMTk4LDI2ICsyMDYsMTYgQEAKIAlyZXR1cm4gcmV0X3N0dWZmLnYwOwogfQogCi1zdGF0aWMgaW5saW5lIGNoYXIgKgorc3RhdGljIGlubGluZSB2b2lkICoKIGlhNjRfc25fZ2V0X2tsY29uZmlnX2FkZHIobmFzaWRfdCBuYXNpZCkKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKLQlpbnQgY25vZGVpZDsKIAotCWNub2RlaWQgPSBuYXNpZF90b19jbm9kZWlkKG5hc2lkKTsKIAlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKIAlyZXRfc3R1ZmYudjAgPSAwOwogCXJldF9zdHVmZi52MSA9IDA7CiAJcmV0X3N0dWZmLnYyID0gMDsKIAlTQUxfQ0FMTChyZXRfc3R1ZmYsIFNOX1NBTF9HRVRfS0xDT05GSUdfQUREUiwgKHU2NCluYXNpZCwgMCwgMCwgMCwgMCwgMCwgMCk7Ci0KLQkvKgotCSAqIFdlIHNob3VsZCBwYW5pYyBpZiBhIHZhbGlkIGNub2RlIG5hc2lkIGRvZXMgbm90IHByb2R1Y2UKLQkgKiBhIGtsY29uZmlnIGFkZHJlc3MuCi0JICovCi0JaWYgKHJldF9zdHVmZi5zdGF0dXMgIT0gMCkgewotCQlwYW5pYygiaWE2NF9zbl9nZXRfa2xjb25maWdfYWRkcjogUmV0dXJuZWQgZXJyb3IgJWx4XG4iLCByZXRfc3R1ZmYuc3RhdHVzKTsKLQl9CiAJcmV0dXJuIHJldF9zdHVmZi52MCA/IF9fdmEocmV0X3N0dWZmLnYwKSA6IE5VTEw7CiB9CiAKQEAgLTY5NCwxMiArNjkyLDEwIEBACiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKIAljbm9kZWlkID0gbmFzaWRfdG9fY25vZGVpZChnZXRfbm9kZV9udW1iZXIocGFkZHIpKTsKLQkvLyBzcGluX2xvY2soJk5PREVQREEoY25vZGVpZCktPmJpc3RfbG9jayk7CiAJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKIAlpYTY0X3NhbF9vZW1jYWxsX25vbG9jaygmcmV0X3N0dWZmLCBTTl9TQUxfTUVNUFJPVEVDVCwgcGFkZHIsIGxlbiwKIAkJCQkodTY0KW5hc2lkX2FycmF5LCBwZXJtcywgMCwgMCwgMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKLQkvLyBzcGluX3VubG9jaygmTk9ERVBEQShjbm9kZWlkKS0+YmlzdF9sb2NrKTsKIAlyZXR1cm4gcmV0X3N0dWZmLnN0YXR1czsKIH0KICNkZWZpbmUgU05fTUVNUFJPVF9BQ0NFU1NfQ0xBU1NfMAkJMHgxNGEwODAKQEAgLTg3Myw2ICs4NjksNDEgQEAKICAgICAgICAgcmV0dXJuIChpbnQpIHJ2LnYwOwogfQogCisvKgorICogQXNrIHRoZSBzeXN0ZW0gY29udHJvbGxlciBvbiB0aGUgc3BlY2lmaWVkIG5hc2lkIHRvIHJlc2V0CisgKiB0aGUgQ1ggY29yZWxldCBjbG9jay4gIE9ubHkgdmFsaWQgb24gVElPIG5vZGVzLgorICovCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9zbl9zeXNjdGxfdGlvX2Nsb2NrX3Jlc2V0KG5hc2lkX3QgbmFzaWQpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKwlTQUxfQ0FMTF9SRUVOVFJBTlQocnYsIFNOX1NBTF9TWVNDVExfT1AsIFNBTF9TWVNDVExfT1BfVElPX0pMQ0tfUlNULAorCQkJbmFzaWQsIDAsIDAsIDAsIDAsIDApOworCWlmIChydi5zdGF0dXMgIT0gMCkKKwkJcmV0dXJuIChpbnQpcnYuc3RhdHVzOworCWlmIChydi52MCAhPSAwKQorCQlyZXR1cm4gKGludClydi52MDsKKworCXJldHVybiAwOworfQorCisvKgorICogR2V0IHRoZSBhc3NvY2lhdGVkIGlvYm9hcmQgdHlwZSBmb3IgYSBnaXZlbiBuYXNpZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2lhNjRfc25fc3lzY3RsX2lvYm9hcmRfZ2V0KG5hc2lkX3QgbmFzaWQpCit7CisgICAgICAgIHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisgICAgICAgIFNBTF9DQUxMX1JFRU5UUkFOVChydiwgU05fU0FMX1NZU0NUTF9PUCwgU0FMX1NZU0NUTF9PUF9JT0JPQVJELAorICAgICAgICAgICAgICAgICAgICAgICAgbmFzaWQsIDAsIDAsIDAsIDAsIDApOworICAgICAgICBpZiAocnYudjAgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGludClydi52MDsKKyAgICAgICAgaWYgKHJ2LnYxICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpcnYudjE7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKIC8qKgogICogaWE2NF9zbl9nZXRfZml0X2NvbXB0IC0gcmVhZCBhIEZJVCBlbnRyeSBmcm9tIHRoZSBQUk9NIGhlYWRlcgogICogQG5hc2lkOiBOQVNJRCBvZiBub2RlIHRvIHJlYWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2FfcHJvdmlkZXIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2FfcHJvdmlkZXIuaAppbmRleCA1Y2NlYzYwLi5iNTMyZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NhX3Byb3ZpZGVyLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYV9wcm92aWRlci5oCkBAIC0xODIsMTEgKzE4MiwxMSBAQAogCQkJICogdG91Y2ggZXZlcnkgQ0wgYWxpZ25lZCBHQVJUIGVudHJ5LgogCQkJICovCiAKLQkJCWNhX2Jhc2UtPmNhX2NvbnRyb2wyICY9IH4oQ0FfR0FSVF9NRU1fUEFSQU0pOwotCQkJY2FfYmFzZS0+Y2FfY29udHJvbDIgfD0gQ0FfR0FSVF9GTFVTSF9UTEI7Ci0JCQljYV9iYXNlLT5jYV9jb250cm9sMiB8PQotCQkJICAgICgweDJ1bGwgPDwgQ0FfR0FSVF9NRU1fUEFSQU1fU0hGVCk7Ci0JCQl0bXAgPSBjYV9iYXNlLT5jYV9jb250cm9sMjsKKwkJCV9fc25fY2xycV9yZWxheGVkKCZjYV9iYXNlLT5jYV9jb250cm9sMiwgQ0FfR0FSVF9NRU1fUEFSQU0pOworCQkJX19zbl9zZXRxX3JlbGF4ZWQoJmNhX2Jhc2UtPmNhX2NvbnRyb2wyLCBDQV9HQVJUX0ZMVVNIX1RMQik7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIsCisJCQkgICAgKDB4MnVsbCA8PCBDQV9HQVJUX01FTV9QQVJBTV9TSEZUKSk7CisJCQl0bXAgPSBfX3NuX3JlYWRxX3JlbGF4ZWQoJmNhX2Jhc2UtPmNhX2NvbnRyb2wyKTsKIAkJfQogCiAJCXJldHVybjsKQEAgLTE5Niw4ICsxOTYsOCBAQAogCSAqIEdhcnQgaW4gdW5jYWNoZWQgbW9kZSAuLi4gbmVlZCBhbiBleHBsaWNpdCBmbHVzaC4KIAkgKi8KIAotCWNhX2Jhc2UtPmNhX2NvbnRyb2wyIHw9IENBX0dBUlRfRkxVU0hfVExCOwotCXRtcCA9IGNhX2Jhc2UtPmNhX2NvbnRyb2wyOworCV9fc25fc2V0cV9yZWxheGVkKCZjYV9iYXNlLT5jYV9jb250cm9sMiwgQ0FfR0FSVF9GTFVTSF9UTEIpOworCXRtcCA9IF9fc25fcmVhZHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIpOwogfQogCiBleHRlcm4gdWludDMyX3QJdGlvY2FfZ2FydF9mb3VuZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY3guaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY3guaAppbmRleCBjNTQ0N2E1Li41Njk5ZTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2N4LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jeC5oCkBAIC0xOSw2ICsxOSw3IEBACiAKIHN0cnVjdCBjeF9kZXYgewogCXN0cnVjdCBjeF9pZF9zIGN4X2lkOworCWludCBidDsJCQkJLyogYm9hcmQvYmxhZGUgdHlwZSAqLwogCXZvaWQgKnNvZnQ7CQkJLyogZHJpdmVyIHNwZWNpZmljICovCiAJc3RydWN0IGh1YmRldl9pbmZvICpodWJkZXY7CiAJc3RydWN0IGRldmljZSBkZXY7CkBAIC01OSw3ICs2MCw3IEBACiBleHRlcm4gc3RydWN0IHNuX2lycV9pbmZvICp0aW9jeF9pcnFfYWxsb2MobmFzaWRfdCwgaW50LCBpbnQsIG5hc2lkX3QsIGludCk7CiBleHRlcm4gdm9pZCB0aW9jeF9pcnFfZnJlZShzdHJ1Y3Qgc25faXJxX2luZm8gKik7CiBleHRlcm4gaW50IGN4X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBjeF9kZXYgKik7Ci1leHRlcm4gaW50IGN4X2RldmljZV9yZWdpc3RlcihuYXNpZF90LCBpbnQsIGludCwgc3RydWN0IGh1YmRldl9pbmZvICopOworZXh0ZXJuIGludCBjeF9kZXZpY2VfcmVnaXN0ZXIobmFzaWRfdCwgaW50LCBpbnQsIHN0cnVjdCBodWJkZXZfaW5mbyAqLCBpbnQpOwogZXh0ZXJuIGludCBjeF9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgY3hfZHJ2ICopOwogZXh0ZXJuIGludCBjeF9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGN4X2RydiAqKTsKIGV4dGVybiB1aW50NjRfdCB0aW9jeF9kbWFfYWRkcih1aW50NjRfdCBhZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHAuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24veHAuaAppbmRleCAxZGYxYzlmLi40OWZhZjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi94cC5oCkBAIC00OSw3ICs0OSw3IEBACiAgKiBDLWJyaWNrIG5hc2lkcywgdGh1cyB0aGUgbmVlZCBmb3IgYml0bWFwcyB3aGljaCBkb24ndCBhY2NvdW50IGZvcgogICogb2RkLW51bWJlcmVkIChub24gQy1icmljaykgbmFzaWRzLgogICovCi0jZGVmaW5lIFhQX01BWF9QSFlTTk9ERV9JRAkoTUFYX1BIWVNOT0RFX0lEIC8gMikKKyNkZWZpbmUgWFBfTUFYX1BIWVNOT0RFX0lECShNQVhfTlVNQUxJTktfTk9ERVMgLyAyKQogI2RlZmluZSBYUF9OQVNJRF9NQVNLX0JZVEVTCSgoWFBfTUFYX1BIWVNOT0RFX0lEICsgNykgLyA4KQogI2RlZmluZSBYUF9OQVNJRF9NQVNLX1dPUkRTCSgoWFBfTUFYX1BIWVNOT0RFX0lEICsgNjMpIC8gNjQpCiAKQEAgLTIxNyw3ICsyMTcsMTcgQEAKIAl4cGNJbnZhbGlkUGFydGlkLAkvKiA0MjogaW52YWxpZCBwYXJ0aXRpb24gSUQgKi8KIAl4cGNMb2NhbFBhcnRpZCwJCS8qIDQzOiBsb2NhbCBwYXJ0aXRpb24gSUQgKi8KIAotCXhwY1Vua25vd25SZWFzb24JLyogNDQ6IHVua25vd24gcmVhc29uIC0tIG11c3QgYmUgbGFzdCBpbiBsaXN0ICovCisJeHBjT3RoZXJHb2luZ0Rvd24sCS8qIDQ0OiBvdGhlciBzaWRlIGdvaW5nIGRvd24sIHJlYXNvbiB1bmtub3duICovCisJeHBjU3lzdGVtR29pbmdEb3duLAkvKiA0NTogc3lzdGVtIGlzIGdvaW5nIGRvd24sIHJlYXNvbiB1bmtub3duICovCisJeHBjU3lzdGVtSGFsdCwJCS8qIDQ2OiBzeXN0ZW0gaXMgYmVpbmcgaGFsdGVkICovCisJeHBjU3lzdGVtUmVib290LAkvKiA0Nzogc3lzdGVtIGlzIGJlaW5nIHJlYm9vdGVkICovCisJeHBjU3lzdGVtUG93ZXJvZmYsCS8qIDQ4OiBzeXN0ZW0gaXMgYmVpbmcgcG93ZXJlZCBvZmYgKi8KKworCXhwY0Rpc2Nvbm5lY3RpbmcsCS8qIDQ5OiBjaGFubmVsIGRpc2Nvbm5lY3RpbmcgKGNsb3NpbmcpICovCisKKwl4cGNPcGVuQ2xvc2VFcnJvciwJLyogNTA6IGNoYW5uZWwgb3Blbi9jbG9zZSBwcm90b2NvbCBlcnJvciAqLworCisJeHBjVW5rbm93blJlYXNvbgkvKiA1MTogdW5rbm93biByZWFzb24gLS0gbXVzdCBiZSBsYXN0IGluIGxpc3QgKi8KIH07CiAKIApAQCAtMzQyLDcgKzM1Miw3IEBACiAgKgogICogVGhlICdmdW5jJyBmaWVsZCBwb2ludHMgdG8gdGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBheW5jaHJvbm91cwogICogbm90aWZpY2F0aW9uIGlzIHJlcXVpcmVkIGZvciBzdWNoIGV2ZW50cyBhczogYSBjb25uZWN0aW9uIGVzdGFibGlzaGVkL2xvc3QsCi0gKiBvciBhbiBpbmNvbW1pbmcgbWVzc2FnZSByZWNlaXZlZCwgb3IgYW4gZXJyb3IgY29uZGl0aW9uIGVuY291bnRlcmVkLiBBCisgKiBvciBhbiBpbmNvbWluZyBtZXNzYWdlIHJlY2VpdmVkLCBvciBhbiBlcnJvciBjb25kaXRpb24gZW5jb3VudGVyZWQuIEEKICAqIG5vbi1OVUxMICdmdW5jJyBmaWVsZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhbiBhY3RpdmUgcmVnaXN0cmF0aW9uIGZvcgogICogdGhlIGNoYW5uZWwuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc3BhcnNlbWVtLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NwYXJzZW1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YTdjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NwYXJzZW1lbS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0FTTV9JQTY0X1NQQVJTRU1FTV9ICisjZGVmaW5lIF9BU01fSUE2NF9TUEFSU0VNRU1fSAorCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorLyoKKyAqIFNFQ1RJT05fU0laRV9CSVRTICAgICAgICAgICAgMl5OOiBob3cgYmlnIGVhY2ggc2VjdGlvbiB3aWxsIGJlCisgKiBNQVhfUEhZU01FTV9CSVRTICAgICAgICAgICAgIDJeTjogaG93IG11Y2ggbWVtb3J5IHdlIGNhbiBoYXZlIGluIHRoYXQgc3BhY2UKKyAqLworCisjZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCSgzMCkKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkoNTApCisjaWZkZWYgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIKKyNpZiAoKENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSIC0gMSArIFBBR0VfU0hJRlQpID4gU0VDVElPTl9TSVpFX0JJVFMpCisjdW5kZWYgU0VDVElPTl9TSVpFX0JJVFMKKyNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMgKENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSIC0gMSArIFBBR0VfU0hJRlQpCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqLworI2VuZGlmIC8qIF9BU01fSUE2NF9TUEFSU0VNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA3ZDMwMGY3Li40NjdhMDk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtOTYsNiArOTYsOSBAQAogI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX0FDQ0VTUwkJMHgwYzAxCiAjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfU1NBCQkweDBjMDIKICNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9VU0IJCTB4MGMwMworI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9VSENJCTB4MGMwMzAwCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfVVNCX09IQ0kJMHgwYzAzMTAKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9VU0JfRUhDSQkweDBjMDMyMAogI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX0ZJQkVSCQkweDBjMDQKICNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9TTUJVUwkJMHgwYzA1CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCA3ODk3Y2Y1Li5jNjFkNWRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC0yMjQsNyArMjI0LDYgQEAKIAl1bnNpZ25lZAkJc2hvdWxkX3dha2V1cDoxOwogCXBtX21lc3NhZ2VfdAkJcHJldl9zdGF0ZTsKIAl2b2lkCQkJKiBzYXZlZF9zdGF0ZTsKLQlhdG9taWNfdAkJcG1fdXNlcnM7CiAJc3RydWN0IGRldmljZQkJKiBwbV9wYXJlbnQ7CiAJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKICNlbmRpZgpAQCAtMjQ0LDYgKzI0Myw5IEBACiAjZGVmaW5lIGRldmljZV9tYXlfd2FrZXVwKGRldikgXAogCShkZXZpY2VfY2FuX3dha2V1cChkZXYpICYmIChkZXYpLT5wb3dlci5zaG91bGRfd2FrZXVwKQogCitleHRlcm4gaW50IGRwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqLCBwbV9tZXNzYWdlX3QpOworZXh0ZXJuIHZvaWQgZHBtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKik7CisKICNlbHNlIC8qICFDT05GSUdfUE0gKi8KIAogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtMjU0LDYgKzI1NiwxNiBAQAogI2RlZmluZSBkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoZGV2LHZhbCkJZG97fXdoaWxlKDApCiAjZGVmaW5lIGRldmljZV9tYXlfd2FrZXVwKGRldikJCQkoMCkKIAorc3RhdGljIGlubGluZSBpbnQgZHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKK3sKKworfQorCiAjZW5kaWYKIAogLyogY2hhbmdlcyB0byBkZXZpY2VfbWF5X3dha2V1cCB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dCBwbSBzdGF0ZSBjaGFuZ2UuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA4ZjczMWU4Li43NDhkMDQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTU3LDYgKzU3LDcgQEAKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJZGVzYzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQl1cmJfbGlzdDsKIAl2b2lkCQkJCSpoY3ByaXY7CisJc3RydWN0IGtvYmplY3QJCQkqa29iajsJLyogRm9yIHN5c2ZzIGluZm8gKi8KIAogCXVuc2lnbmVkIGNoYXIgKmV4dHJhOyAgIC8qIEV4dHJhIGRlc2NyaXB0b3JzICovCiAJaW50IGV4dHJhbGVuOwpAQCAtMTM2LDcgKzEzNyw4IEBACiAJCQkJCSAqIGFjdGl2ZSBhbHRlcm5hdGUgc2V0dGluZyAqLwogCXVuc2lnbmVkIG51bV9hbHRzZXR0aW5nOwkvKiBudW1iZXIgb2YgYWx0ZXJuYXRlIHNldHRpbmdzICovCiAKLQlpbnQgbWlub3I7CQkJLyogbWlub3IgbnVtYmVyIHRoaXMgaW50ZXJmYWNlIGlzIGJvdW5kIHRvICovCisJaW50IG1pbm9yOwkJCS8qIG1pbm9yIG51bWJlciB0aGlzIGludGVyZmFjZSBpcworCQkJCQkgKiBib3VuZCB0byAqLwogCWVudW0gdXNiX2ludGVyZmFjZV9jb25kaXRpb24gY29uZGl0aW9uOwkJLyogc3RhdGUgb2YgYmluZGluZyAqLwogCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogaW50ZXJmYWNlIHNwZWNpZmljIGRldmljZSBpbmZvICovCiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwpAQCAtMjI5LDcgKzIzMSw3IEBACiBzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnIHsKIAlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCWRlc2M7CiAKLQljaGFyICpzdHJpbmc7CisJY2hhciAqc3RyaW5nOwkJLyogaUNvbmZpZ3VyYXRpb24gc3RyaW5nLCBpZiBwcmVzZW50ICovCiAJLyogdGhlIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiwKIAkgKiBzdG9yZWQgaW4gbm8gcGFydGljdWxhciBvcmRlciAqLwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2VbVVNCX01BWElOVEVSRkFDRVNdOwpAQCAtMjQ4LDcgKzI1MCw3IEBACiAJX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoKGlmcG9pbnQpLT5leHRyYSwoaWZwb2ludCktPmV4dHJhbGVuLFwKIAkJdHlwZSwodm9pZCoqKXB0cikKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB1c2Jfb3BlcmF0aW9uczsKIApAQCAtMjY4LDcgKzI3MCw4IEBACiAJdW5zaWduZWQgaXNfYl9ob3N0OjE7CQkvKiB0cnVlIGR1cmluZyBzb21lIEhOUCByb2xlc3dpdGNoZXMgKi8KIAl1bnNpZ25lZCBiX2hucF9lbmFibGU6MTsJLyogT1RHOiBkaWQgQS1Ib3N0IGVuYWJsZSBITlA/ICovCiAKLQlpbnQgZGV2bnVtX25leHQ7CQkvKiBOZXh0IG9wZW4gZGV2aWNlIG51bWJlciBpbiByb3VuZC1yb2JpbiBhbGxvY2F0aW9uICovCisJaW50IGRldm51bV9uZXh0OwkJLyogTmV4dCBvcGVuIGRldmljZSBudW1iZXIgaW4KKwkJCQkJICogcm91bmQtcm9iaW4gYWxsb2NhdGlvbiAqLwogCiAJc3RydWN0IHVzYl9kZXZtYXAgZGV2bWFwOwkvKiBkZXZpY2UgYWRkcmVzcyBhbGxvY2F0aW9uIG1hcCAqLwogCXN0cnVjdCB1c2Jfb3BlcmF0aW9ucyAqb3A7CS8qIE9wZXJhdGlvbnMgKHNwZWNpZmljIHRvIHRoZSBIQykgKi8KQEAgLTI4OSwxNSArMjkyLDE2IEBACiAJc3RydWN0IGRlbnRyeSAqdXNiZnNfZGVudHJ5OwkvKiB1c2JmcyBkZW50cnkgZW50cnkgZm9yIHRoZSBidXMgKi8KIAogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsJLyogY2xhc3MgZGV2aWNlIGZvciB0aGlzIGJ1cyAqLwotCXN0cnVjdCBrcmVmIGtyZWY7CQkvKiBoYW5kbGVzIHJlZmVyZW5jZSBjb3VudGluZyB0aGlzIGJ1cyAqLwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsJLyogZnVuY3Rpb24gdG8gZGVzdHJveSB0aGlzIGJ1cydzIG1lbW9yeSAqLworCXN0cnVjdCBrcmVmIGtyZWY7CQkvKiByZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoaXMgYnVzICovCisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCB1c2JfYnVzICpidXMpOworCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX01PTikKIAlzdHJ1Y3QgbW9uX2J1cyAqbW9uX2J1czsJLyogbm9uLW51bGwgd2hlbiBhc3NvY2lhdGVkICovCiAJaW50IG1vbml0b3JlZDsJCQkvKiBub24temVybyB3aGVuIG1vbml0b3JlZCAqLwogI2VuZGlmCiB9OwogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogVGhpcyBpcyBhcmJpdHJhcnkuCiAgKiBGcm9tIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xMywgb2Zmc2V0IDcsIGEgaHViIGNhbgpAQCAtMzI2LDcgKzMzMCw4IEBACiAKIAlzdHJ1Y3Qgc2VtYXBob3JlIHNlcmlhbGl6ZTsKIAotCXVuc2lnbmVkIGludCB0b2dnbGVbMl07CQkvKiBvbmUgYml0IGZvciBlYWNoIGVuZHBvaW50IChbMF0gPSBJTiwgWzFdID0gT1VUKSAqLworCXVuc2lnbmVkIGludCB0b2dnbGVbMl07CQkvKiBvbmUgYml0IGZvciBlYWNoIGVuZHBvaW50CisJCQkJCSAqIChbMF0gPSBJTiwgWzFdID0gT1VUKSAqLwogCiAJc3RydWN0IHVzYl9kZXZpY2UgKnBhcmVudDsJLyogb3VyIGh1YiwgdW5sZXNzIHdlJ3JlIHRoZSByb290ICovCiAJc3RydWN0IHVzYl9idXMgKmJ1czsJCS8qIEJ1cyB3ZSdyZSBwYXJ0IG9mICovCkBAIC0zNDMsMTIgKzM0OCwxNCBAQAogCiAJY2hhciAqKnJhd2Rlc2NyaXB0b3JzOwkJLyogUmF3IGRlc2NyaXB0b3JzIGZvciBlYWNoIGNvbmZpZyAqLwogCi0JaW50IGhhdmVfbGFuZ2lkOwkJLyogd2hldGhlciBzdHJpbmdfbGFuZ2lkIGlzIHZhbGlkIHlldCAqLworCWludCBoYXZlX2xhbmdpZDsJCS8qIHdoZXRoZXIgc3RyaW5nX2xhbmdpZCBpcyB2YWxpZCAqLwogCWludCBzdHJpbmdfbGFuZ2lkOwkJLyogbGFuZ3VhZ2UgSUQgZm9yIHN0cmluZ3MgKi8KIAotCWNoYXIgKnByb2R1Y3Q7Ci0JY2hhciAqbWFudWZhY3R1cmVyOwotCWNoYXIgKnNlcmlhbDsJCQkvKiBzdGF0aWMgc3RyaW5ncyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkvKiBzdGF0aWMgc3RyaW5ncyBmcm9tIHRoZSBkZXZpY2UgKi8KKwljaGFyICpwcm9kdWN0OwkJCS8qIGlQcm9kdWN0IHN0cmluZywgaWYgcHJlc2VudCAqLworCWNoYXIgKm1hbnVmYWN0dXJlcjsJCS8qIGlNYW51ZmFjdHVyZXIgc3RyaW5nLCBpZiBwcmVzZW50ICovCisJY2hhciAqc2VyaWFsOwkJCS8qIGlTZXJpYWxOdW1iZXIgc3RyaW5nLCBpZiBwcmVzZW50ICovCisKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVsaXN0OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKIAlzdHJ1Y3QgZGVudHJ5ICp1c2Jmc19kZW50cnk7CS8qIHVzYmZzIGRlbnRyeSBlbnRyeSBmb3IgdGhlIGRldmljZSAqLwpAQCAtNDQwLDIyICs0NDcsMzEgQEAKICAqIFVTQiAyLjAgcm9vdCBodWJzIChFSENJIGhvc3QgY29udHJvbGxlcnMpIHdpbGwgZ2V0IG9uZSBwYXRoIElEIGlmIHRoZXkgYXJlCiAgKiBoaWdoIHNwZWVkLCBhbmQgYSBkaWZmZXJlbnQgb25lIGlmIHRoZXkgYXJlIGZ1bGwgb3IgbG93IHNwZWVkLgogICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfbWFrZV9wYXRoIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBjaGFyICpidWYsIHNpemVfdCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgdXNiX21ha2VfcGF0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgY2hhciAqYnVmLAorCQlzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgYWN0dWFsOwotCWFjdHVhbCA9IHNucHJpbnRmIChidWYsIHNpemUsICJ1c2ItJXMtJXMiLCBkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+ZGV2cGF0aCk7CisJYWN0dWFsID0gc25wcmludGYgKGJ1Ziwgc2l6ZSwgInVzYi0lcy0lcyIsIGRldi0+YnVzLT5idXNfbmFtZSwKKwkJCWRldi0+ZGV2cGF0aCk7CiAJcmV0dXJuIChhY3R1YWwgPj0gKGludClzaXplKSA/IC0xIDogYWN0dWFsOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCQkoVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1QpCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1JBTkdFCQkoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8gfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9ISSkKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04JKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUkFOR0UpCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIFwKKwkJKFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKQorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9SQU5HRSBcCisJCShVU0JfREVWSUNFX0lEX01BVENIX0RFVl9MTyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJKQorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiBcCisJCShVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1JBTkdFKQogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9JTkZPIFwKLQkoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9TVUJDTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1BST1RPQ09MKQorCQkoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MgfCBcCisJCVVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTIHwgXAorCQlVU0JfREVWSUNFX0lEX01BVENIX0RFVl9QUk9UT0NPTCkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTyBcCi0JKFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MgfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9QUk9UT0NPTCkKKwkJKFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgXAorCQlVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUyB8IFwKKwkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfUFJPVE9DT0wpCiAKIC8qKgogICogVVNCX0RFVklDRSAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyB1c2IgZGV2aWNlCkBAIC00NjYsOSArNDgyLDExIEBACiAgKiBzcGVjaWZpYyBkZXZpY2UuCiAgKi8KICNkZWZpbmUgVVNCX0RFVklDRSh2ZW5kLHByb2QpIFwKLQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gKHZlbmQpLCAuaWRQcm9kdWN0ID0gKHByb2QpCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9ICh2ZW5kKSwgXAorCQkJLmlkUHJvZHVjdCA9IChwcm9kKQogLyoqCi0gKiBVU0JfREVWSUNFX1ZFUiAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyB1c2IgZGV2aWNlIHdpdGggYSB2ZXJzaW9uIHJhbmdlCisgKiBVU0JfREVWSUNFX1ZFUiAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyB1c2IgZGV2aWNlIHdpdGggYQorICoJCXZlcnNpb24gcmFuZ2UKICAqIEB2ZW5kOiB0aGUgMTYgYml0IFVTQiBWZW5kb3IgSUQKICAqIEBwcm9kOiB0aGUgMTYgYml0IFVTQiBQcm9kdWN0IElECiAgKiBAbG86IHRoZSBiY2REZXZpY2VfbG8gdmFsdWUKQEAgLTQ3OCw3ICs0OTYsOSBAQAogICogc3BlY2lmaWMgZGV2aWNlLCB3aXRoIGEgdmVyc2lvbiByYW5nZS4KICAqLwogI2RlZmluZSBVU0JfREVWSUNFX1ZFUih2ZW5kLHByb2QsbG8saGkpIFwKLQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwgLmlkVmVuZG9yID0gKHZlbmQpLCAuaWRQcm9kdWN0ID0gKHByb2QpLCAuYmNkRGV2aWNlX2xvID0gKGxvKSwgLmJjZERldmljZV9oaSA9IChoaSkKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwgXAorCS5pZFZlbmRvciA9ICh2ZW5kKSwgLmlkUHJvZHVjdCA9IChwcm9kKSwgXAorCS5iY2REZXZpY2VfbG8gPSAobG8pLCAuYmNkRGV2aWNlX2hpID0gKGhpKQogCiAvKioKICAqIFVTQl9ERVZJQ0VfSU5GTyAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBjbGFzcyBvZiB1c2IgZGV2aWNlcwpAQCAtNDkwLDcgKzUxMCw4IEBACiAgKiBzcGVjaWZpYyBjbGFzcyBvZiBkZXZpY2VzLgogICovCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSU5GTyhjbCxzYyxwcikgXAotCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0lORk8sIC5iRGV2aWNlQ2xhc3MgPSAoY2wpLCAuYkRldmljZVN1YkNsYXNzID0gKHNjKSwgLmJEZXZpY2VQcm90b2NvbCA9IChwcikKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9JTkZPLCAuYkRldmljZUNsYXNzID0gKGNsKSwgXAorCS5iRGV2aWNlU3ViQ2xhc3MgPSAoc2MpLCAuYkRldmljZVByb3RvY29sID0gKHByKQogCiAvKioKICAqIFVTQl9JTlRFUkZBQ0VfSU5GTyAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBjbGFzcyBvZiB1c2IgaW50ZXJmYWNlcyAKQEAgLTUwMiw5ICs1MjMsMTAgQEAKICAqIHNwZWNpZmljIGNsYXNzIG9mIGludGVyZmFjZXMuCiAgKi8KICNkZWZpbmUgVVNCX0lOVEVSRkFDRV9JTkZPKGNsLHNjLHByKSBcCi0JLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywgLmJJbnRlcmZhY2VDbGFzcyA9IChjbCksIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAoc2MpLCAuYkludGVyZmFjZVByb3RvY29sID0gKHByKQorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sIC5iSW50ZXJmYWNlQ2xhc3MgPSAoY2wpLCBcCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IChzYyksIC5iSW50ZXJmYWNlUHJvdG9jb2wgPSAocHIpCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKioKICAqIHN0cnVjdCB1c2JfZHJpdmVyIC0gaWRlbnRpZmllcyBVU0IgZHJpdmVyIHRvIHVzYmNvcmUKQEAgLTU1Nyw3ICs1NzksOCBAQAogCiAJdm9pZCAoKmRpc2Nvbm5lY3QpIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAKLQlpbnQgKCppb2N0bCkgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1bnNpZ25lZCBpbnQgY29kZSwgdm9pZCAqYnVmKTsKKwlpbnQgKCppb2N0bCkgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1bnNpZ25lZCBpbnQgY29kZSwKKwkJCXZvaWQgKmJ1Zik7CiAKIAlpbnQgKCpzdXNwZW5kKSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKIAlpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CkBAIC01NzIsMTAgKzU5NSw4IEBACiAKIC8qKgogICogc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgLSBpZGVudGlmaWVzIGEgVVNCIGRyaXZlciB0aGF0IHdhbnRzIHRvIHVzZSB0aGUgVVNCIG1ham9yIG51bWJlcgotICogQG5hbWU6IGRldmZzIG5hbWUgZm9yIHRoaXMgZHJpdmVyLiAgV2lsbCBhbHNvIGJlIHVzZWQgYnkgdGhlIGRyaXZlcgotICoJY2xhc3MgY29kZSB0byBjcmVhdGUgYSB1c2IgY2xhc3MgZGV2aWNlLgorICogQG5hbWU6IHRoZSB1c2IgY2xhc3MgZGV2aWNlIG5hbWUgZm9yIHRoaXMgZHJpdmVyLiAgV2lsbCBzaG93IHVwIGluIHN5c2ZzLgogICogQGZvcHM6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2YgdGhpcyBkcml2ZXIuCi0gKiBAbW9kZTogdGhlIG1vZGUgZm9yIHRoZSBkZXZmcyBmaWxlIHRvIGJlIGNyZWF0ZWQgZm9yIHRoaXMgZHJpdmVyLgogICogQG1pbm9yX2Jhc2U6IHRoZSBzdGFydCBvZiB0aGUgbWlub3IgcmFuZ2UgZm9yIHRoaXMgZHJpdmVyLgogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSB1c2JfcmVnaXN0ZXJfZGV2KCkgYW5kCkBAIC01ODUsOCArNjA2LDcgQEAKIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHsKIAljaGFyICpuYW1lOwogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7Ci0JbW9kZV90IG1vZGU7Ci0JaW50IG1pbm9yX2Jhc2U7CQorCWludCBtaW5vcl9iYXNlOwogfTsKIAogLyoKQEAgLTYwMyw3ICs2MjMsNyBAQAogCiBleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCiAgKiBVUkIgc3VwcG9ydCwgZm9yIGFzeW5jaHJvbm91cyByZXF1ZXN0IGNvbXBsZXRpb25zCkBAIC02MTMsMTIgKzYzMywxNCBAQAogICogdXJiLT50cmFuc2Zlcl9mbGFnczoKICAqLwogI2RlZmluZSBVUkJfU0hPUlRfTk9UX09LCTB4MDAwMQkvKiByZXBvcnQgc2hvcnQgcmVhZHMgYXMgZXJyb3JzICovCi0jZGVmaW5lIFVSQl9JU09fQVNBUAkJMHgwMDAyCS8qIGlzby1vbmx5LCB1cmItPnN0YXJ0X2ZyYW1lIGlnbm9yZWQgKi8KKyNkZWZpbmUgVVJCX0lTT19BU0FQCQkweDAwMDIJLyogaXNvLW9ubHksIHVyYi0+c3RhcnRfZnJhbWUKKwkJCQkJICogaWdub3JlZCAqLwogI2RlZmluZSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUAkweDAwMDQJLyogdXJiLT50cmFuc2Zlcl9kbWEgdmFsaWQgb24gc3VibWl0ICovCiAjZGVmaW5lIFVSQl9OT19TRVRVUF9ETUFfTUFQCTB4MDAwOAkvKiB1cmItPnNldHVwX2RtYSB2YWxpZCBvbiBzdWJtaXQgKi8KICNkZWZpbmUgVVJCX05PX0ZTQlIJCTB4MDAyMAkvKiBVSENJLXNwZWNpZmljICovCi0jZGVmaW5lIFVSQl9aRVJPX1BBQ0tFVAkJMHgwMDQwCS8qIEZpbmlzaCBidWxrIE9VVHMgd2l0aCBzaG9ydCBwYWNrZXQgKi8KLSNkZWZpbmUgVVJCX05PX0lOVEVSUlVQVAkweDAwODAJLyogSElOVDogbm8gbm9uLWVycm9yIGludGVycnVwdCBuZWVkZWQgKi8KKyNkZWZpbmUgVVJCX1pFUk9fUEFDS0VUCQkweDAwNDAJLyogRmluaXNoIGJ1bGsgT1VUIHdpdGggc2hvcnQgcGFja2V0ICovCisjZGVmaW5lIFVSQl9OT19JTlRFUlJVUFQJMHgwMDgwCS8qIEhJTlQ6IG5vIG5vbi1lcnJvciBpbnRlcnJ1cHQKKwkJCQkJICogbmVlZGVkICovCiAKIHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIHsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwpAQCAtODA2LDcgKzgyOCw4IEBACiAJdTggcmVqZWN0OwkJCS8qIHN1Ym1pc3Npb25zIHdpbGwgZmFpbCAqLwogCiAJLyogcHVibGljLCBkb2N1bWVudGVkIGZpZWxkcyBpbiB0aGUgdXJiIHRoYXQgY2FuIGJlIHVzZWQgYnkgZHJpdmVycyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3Q7CS8qIGxpc3QgaGVhZCBmb3IgdXNlIGJ5IHRoZSB1cmIgb3duZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9saXN0OwkvKiBsaXN0IGhlYWQgZm9yIHVzZSBieSB0aGUgdXJiJ3MKKwkJCQkJICogY3VycmVudCBvd25lciAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7IAkvKiAoaW4pIHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBkZXZpY2UgKi8KIAl1bnNpZ25lZCBpbnQgcGlwZTsJCS8qIChpbikgcGlwZSBpbmZvcm1hdGlvbiAqLwogCWludCBzdGF0dXM7CQkJLyogKHJldHVybikgbm9uLUlTTyBzdGF0dXMgKi8KQEAgLTgxOSwxNCArODQyLDE2IEBACiAJZG1hX2FkZHJfdCBzZXR1cF9kbWE7CQkvKiAoaW4pIGRtYSBhZGRyIGZvciBzZXR1cF9wYWNrZXQgKi8KIAlpbnQgc3RhcnRfZnJhbWU7CQkvKiAobW9kaWZ5KSBzdGFydCBmcmFtZSAoSVNPKSAqLwogCWludCBudW1iZXJfb2ZfcGFja2V0czsJCS8qIChpbikgbnVtYmVyIG9mIElTTyBwYWNrZXRzICovCi0JaW50IGludGVydmFsOwkJCS8qIChtb2RpZnkpIHRyYW5zZmVyIGludGVydmFsIChJTlQvSVNPKSAqLworCWludCBpbnRlcnZhbDsJCQkvKiAobW9kaWZ5KSB0cmFuc2ZlciBpbnRlcnZhbAorCQkJCQkgKiAoSU5UL0lTTykgKi8KIAlpbnQgZXJyb3JfY291bnQ7CQkvKiAocmV0dXJuKSBudW1iZXIgb2YgSVNPIGVycm9ycyAqLwogCXZvaWQgKmNvbnRleHQ7CQkJLyogKGluKSBjb250ZXh0IGZvciBjb21wbGV0aW9uICovCiAJdXNiX2NvbXBsZXRlX3QgY29tcGxldGU7CS8qIChpbikgY29tcGxldGlvbiByb3V0aW5lICovCi0Jc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgaXNvX2ZyYW1lX2Rlc2NbMF07CS8qIChpbikgSVNPIE9OTFkgKi8KKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBpc29fZnJhbWVfZGVzY1swXTsKKwkJCQkJLyogKGluKSBJU08gT05MWSAqLwogfTsKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qKgogICogdXNiX2ZpbGxfY29udHJvbF91cmIgLSBpbml0aWFsaXplcyBhIGNvbnRyb2wgdXJiCkBAIC05NzQsMTEgKzk5OSw2IEBACiAJdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50ICphY3R1YWxfbGVuZ3RoLAogCWludCB0aW1lb3V0KTsKIAotLyogc2VsZWN0aXZlIHN1c3BlbmQvcmVzdW1lICovCi1leHRlcm4gaW50IHVzYl9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7Ci1leHRlcm4gaW50IHVzYl9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOwotCi0KIC8qIHdyYXBwZXJzIGFyb3VuZCB1c2JfY29udHJvbF9tc2coKSBmb3IgdGhlIG1vc3QgY29tbW9uIHN0YW5kYXJkIHJlcXVlc3RzICovCiBleHRlcm4gaW50IHVzYl9nZXRfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGRlc2N0eXBlLAogCXVuc2lnbmVkIGNoYXIgZGVzY2luZGV4LCB2b2lkICpidWYsIGludCBzaXplKTsKQEAgLTEwNTYsNyArMTA3Niw3IEBACiB2b2lkIHVzYl9zZ193YWl0IChzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QgKmlvKTsKIAogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKICAqIEZvciB2YXJpb3VzIGxlZ2FjeSByZWFzb25zLCBMaW51eCBoYXMgYSBzbWFsbCBjb29raWUgdGhhdCdzIHBhaXJlZCB3aXRoCkBAIC0xMDk3LDIzICsxMTE3LDM0IEBACiAvKiBUaGUgRDAvRDEgdG9nZ2xlIGJpdHMgLi4uIFVTRSBXSVRIIENBVVRJT04gKHRoZXkncmUgYWxtb3N0IGhjZC1pbnRlcm5hbCkgKi8KICNkZWZpbmUgdXNiX2dldHRvZ2dsZShkZXYsIGVwLCBvdXQpICgoKGRldiktPnRvZ2dsZVtvdXRdID4+IChlcCkpICYgMSkKICNkZWZpbmUJdXNiX2RvdG9nZ2xlKGRldiwgZXAsIG91dCkgICgoZGV2KS0+dG9nZ2xlW291dF0gXj0gKDEgPDwgKGVwKSkpCi0jZGVmaW5lIHVzYl9zZXR0b2dnbGUoZGV2LCBlcCwgb3V0LCBiaXQpICgoZGV2KS0+dG9nZ2xlW291dF0gPSAoKGRldiktPnRvZ2dsZVtvdXRdICYgfigxIDw8IChlcCkpKSB8ICgoYml0KSA8PCAoZXApKSkKKyNkZWZpbmUgdXNiX3NldHRvZ2dsZShkZXYsIGVwLCBvdXQsIGJpdCkgXAorCQkoKGRldiktPnRvZ2dsZVtvdXRdID0gKChkZXYpLT50b2dnbGVbb3V0XSAmIH4oMSA8PCAoZXApKSkgfCBcCisJCSAoKGJpdCkgPDwgKGVwKSkpCiAKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19jcmVhdGVfcGlwZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5kcG9pbnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2NyZWF0ZV9waXBlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGludCBlbmRwb2ludCkKIHsKIAlyZXR1cm4gKGRldi0+ZGV2bnVtIDw8IDgpIHwgKGVuZHBvaW50IDw8IDE1KTsKIH0KIAogLyogQ3JlYXRlIHZhcmlvdXMgcGlwZXMuLi4gKi8KLSNkZWZpbmUgdXNiX3NuZGN0cmxwaXBlKGRldixlbmRwb2ludCkJKChQSVBFX0NPTlRST0wgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQotI2RlZmluZSB1c2JfcmN2Y3RybHBpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfQ09OVFJPTCA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKGRldixlbmRwb2ludCkgfCBVU0JfRElSX0lOKQotI2RlZmluZSB1c2Jfc25kaXNvY3BpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfSVNPQ0hST05PVVMgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQotI2RlZmluZSB1c2JfcmN2aXNvY3BpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfSVNPQ0hST05PVVMgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpIHwgVVNCX0RJUl9JTikKLSNkZWZpbmUgdXNiX3NuZGJ1bGtwaXBlKGRldixlbmRwb2ludCkJKChQSVBFX0JVTEsgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQotI2RlZmluZSB1c2JfcmN2YnVsa3BpcGUoZGV2LGVuZHBvaW50KQkoKFBJUEVfQlVMSyA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKGRldixlbmRwb2ludCkgfCBVU0JfRElSX0lOKQotI2RlZmluZSB1c2Jfc25kaW50cGlwZShkZXYsZW5kcG9pbnQpCSgoUElQRV9JTlRFUlJVUFQgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQotI2RlZmluZSB1c2JfcmN2aW50cGlwZShkZXYsZW5kcG9pbnQpCSgoUElQRV9JTlRFUlJVUFQgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpIHwgVVNCX0RJUl9JTikKKyNkZWZpbmUgdXNiX3NuZGN0cmxwaXBlKGRldixlbmRwb2ludCkJXAorCSgoUElQRV9DT05UUk9MIDw8IDMwKSB8IF9fY3JlYXRlX3BpcGUoZGV2LGVuZHBvaW50KSkKKyNkZWZpbmUgdXNiX3JjdmN0cmxwaXBlKGRldixlbmRwb2ludCkJXAorCSgoUElQRV9DT05UUk9MIDw8IDMwKSB8IF9fY3JlYXRlX3BpcGUoZGV2LGVuZHBvaW50KSB8IFVTQl9ESVJfSU4pCisjZGVmaW5lIHVzYl9zbmRpc29jcGlwZShkZXYsZW5kcG9pbnQpCVwKKwkoKFBJUEVfSVNPQ0hST05PVVMgPDwgMzApIHwgX19jcmVhdGVfcGlwZShkZXYsZW5kcG9pbnQpKQorI2RlZmluZSB1c2JfcmN2aXNvY3BpcGUoZGV2LGVuZHBvaW50KQlcCisJKChQSVBFX0lTT0NIUk9OT1VTIDw8IDMwKSB8IF9fY3JlYXRlX3BpcGUoZGV2LGVuZHBvaW50KSB8IFVTQl9ESVJfSU4pCisjZGVmaW5lIHVzYl9zbmRidWxrcGlwZShkZXYsZW5kcG9pbnQpCVwKKwkoKFBJUEVfQlVMSyA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKGRldixlbmRwb2ludCkpCisjZGVmaW5lIHVzYl9yY3ZidWxrcGlwZShkZXYsZW5kcG9pbnQpCVwKKwkoKFBJUEVfQlVMSyA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKGRldixlbmRwb2ludCkgfCBVU0JfRElSX0lOKQorI2RlZmluZSB1c2Jfc25kaW50cGlwZShkZXYsZW5kcG9pbnQpCVwKKwkoKFBJUEVfSU5URVJSVVBUIDw8IDMwKSB8IF9fY3JlYXRlX3BpcGUoZGV2LGVuZHBvaW50KSkKKyNkZWZpbmUgdXNiX3JjdmludHBpcGUoZGV2LGVuZHBvaW50KQlcCisJKChQSVBFX0lOVEVSUlVQVCA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKGRldixlbmRwb2ludCkgfCBVU0JfRElSX0lOKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTM3LDE3ICsxMTY4LDI5IEBACiAJcmV0dXJuIGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEV2ZW50cyBmcm9tIHRoZSB1c2IgY29yZSAqLworI2RlZmluZSBVU0JfREVWSUNFX0FERAkJMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfUkVNT1ZFCTB4MDAwMgorI2RlZmluZSBVU0JfQlVTX0FERAkJMHgwMDAzCisjZGVmaW5lIFVTQl9CVVNfUkVNT1ZFCQkweDAwMDQKK2V4dGVybiB2b2lkIHVzYl9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gdm9pZCB1c2JfdW5yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiAKICNpZmRlZiBERUJVRwotI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiAsIF9fRklMRV9fICwgIyMgYXJnKQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiAsIFwKKwlfX0ZJTEVfXyAsICMjIGFyZykKICNlbHNlCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0ICJcbiIgLCBfX0ZJTEVfXyAsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0ICJcbiIgLCBfX0ZJTEVfXyAsICMjIGFyZykKLSNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0ICJcbiIgLCBfX0ZJTEVfXyAsICMjIGFyZykKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAiXG4iICwgXAorCV9fRklMRV9fICwgIyMgYXJnKQorI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQgIlxuIiAsIFwKKwlfX0ZJTEVfXyAsICMjIGFyZykKKyNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0ICJcbiIgLCBcCisJX19GSUxFX18gLCAjIyBhcmcpCiAKIAogI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl9vdGcuaCBiL2luY2x1ZGUvbGludXgvdXNiX290Zy5oCmluZGV4IGM2NjgzMTQuLmY4MjdmNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX290Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX290Zy5oCkBAIC02Myw2ICs2MywxMCBAQAogCWludAkoKnNldF9wb3dlcikoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLAogCQkJCXVuc2lnbmVkIG1BKTsKIAorCS8qIGZvciBub24tT1RHIEIgZGV2aWNlczogc2V0IHRyYW5zY2VpdmVyIGludG8gc3VzcGVuZCBtb2RlICovCisJaW50CSgqc2V0X3N1c3BlbmQpKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywKKwkJCQlpbnQgc3VzcGVuZCk7CisKIAkvKiBmb3IgQiBkZXZpY2VzIG9ubHk6ICBzdGFydCBzZXNzaW9uIHdpdGggQS1Ib3N0ICovCiAJaW50CSgqc3RhcnRfc3JwKShzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcpOwogCkBAIC0xMDgsNiArMTEyLDE1IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CitvdGdfc2V0X3N1c3BlbmQoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLCBpbnQgc3VzcGVuZCkKK3sKKwlpZiAob3RnLT5zZXRfc3VzcGVuZCAhPSBOVUxMKQorCQlyZXR1cm4gb3RnLT5zZXRfc3VzcGVuZChvdGcsIHN1c3BlbmQpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CiBvdGdfc3RhcnRfc3JwKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKIHsKIAlyZXR1cm4gb3RnLT5zdGFydF9zcnAob3RnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCmluZGV4IDlmYWNmNzMuLjg4NTlmMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaApAQCAtMTQwLDYgKzE0MCwxMiBAQAogCWNvbXBhdF9jYWRkcl90IHVzZXJjb250ZXh0OyAvKiB1bnVzZWQgKi8KIAlzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjIGlzb19mcmFtZV9kZXNjWzBdOwogfTsKKworc3RydWN0IHVzYmRldmZzX2lvY3RsMzIgeworCXMzMiBpZm5vOworCXMzMiBpb2N0bF9jb2RlOworCWNvbXBhdF9jYWRkcl90IGRhdGE7Cit9OwogI2VuZGlmCiAKICNkZWZpbmUgVVNCREVWRlNfQ09OVFJPTCAgICAgICAgICAgX0lPV1IoJ1UnLCAwLCBzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyKQpAQCAtMTYwLDYgKzE2Niw3IEBACiAjZGVmaW5lIFVTQkRFVkZTX1JFTEVBU0VJTlRFUkZBQ0UgIF9JT1IoJ1UnLCAxNiwgdW5zaWduZWQgaW50KQogI2RlZmluZSBVU0JERVZGU19DT05ORUNUSU5GTyAgICAgICBfSU9XKCdVJywgMTcsIHN0cnVjdCB1c2JkZXZmc19jb25uZWN0aW5mbykKICNkZWZpbmUgVVNCREVWRlNfSU9DVEwgICAgICAgICAgICAgX0lPV1IoJ1UnLCAxOCwgc3RydWN0IHVzYmRldmZzX2lvY3RsKQorI2RlZmluZSBVU0JERVZGU19JT0NUTDMyICAgICAgICAgICBfSU9XUignVScsIDE4LCBzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwzMikKICNkZWZpbmUgVVNCREVWRlNfSFVCX1BPUlRJTkZPICAgICAgX0lPUignVScsIDE5LCBzdHJ1Y3QgdXNiZGV2ZnNfaHViX3BvcnRpbmZvKQogI2RlZmluZSBVU0JERVZGU19SRVNFVCAgICAgICAgICAgICBfSU8oJ1UnLCAyMCkKICNkZWZpbmUgVVNCREVWRlNfQ0xFQVJfSEFMVCAgICAgICAgX0lPUignVScsIDIxLCB1bnNpZ25lZCBpbnQpCg==