ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAxOWM3MjYyLi5lZjQyMDcxIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTYgQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDEuMC4wOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDIgSmFuIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBBY3RpdmUgU2VyaWFsIE1lbW9yeSBJbnRlcmZhY2UgKEFTTUkpCisgIG9uIEN5Y2xvbmUgZGV2aWNlcworCisqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDE2IERlYyAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBQQ2hhbWVsZW9uIE1FIGFuZCBISSBtb2R1bGVzCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgRGVjIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBEVUVUIEFEUyBib2FyZCAoTVBDODd4Lzg4eCkKKwogKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IERlYyAyMDAzOgogICBhZGQgc3VwcG9ydCBmb3IgY3JhbWZzICh1c2VzIEpGRlMyIGNvbW1hbmQgaW50ZXJmYWNlKQogCmRpZmYgLS1naXQgYS9NQUtFQUxMIGIvTUFLRUFMTAppbmRleCA2MDNkZmIwLi4yZTViODdmIDEwMDY0NAotLS0gYS9NQUtFQUxMCisrKyBiL01BS0VBTEwKQEAgLTM0LDIwICszNCwyMSBAQAogCiBMSVNUXzh4eD0iCVwKIAlBZGRlcklJCQlBRFM4NjAJCUFNWDg2MAkJYzJtb24JCVwKLQlDQ00JCWNvZ2VudF9tcGM4eHgJRVNURUVNMTkyRQlFVFgwOTQJCVwKLQlFTFBUODYwCQlGQURTODIzCQlGQURTODUwU0FSCUZBRFM4NjBUCVwKLQlGTEFHQURNCQlGUFM4NTBMCQlHRU44NjBUCQlHRU44NjBUX1NDCVwKLQlHRU5JRVRWCQlHVEgJCWhlcm1lcwkJSUFEMjEwCQlcCi0JSUNVODYyXzEwME1IeglJUDg2MAkJSVZNTDI0CQlJVk1MMjRfMTI4CVwKLQlJVk1MMjRfMjU2CUlWTVM4CQlJVk1TOF8xMjgJSVZNUzhfMjU2CVwKLQlLVVA0SyAgICAgICAgICAgTEFOVEVDCSAgICAgICAgbHdtb24gICAJTUJYCQlcCi0JTUJYODYwVAkJTUhQQwkJTVBDODZ4QURTCU1WUzEJCVwKLQlORVRWSUEJCU5FVFZJQV9WMglOWDgyMwkJcGN1X2UJCVwKLQlRUzgyMwkJUVM4NTAJCVFTODYwVAkJUjM2ME1QSQkJXAotCVJCQzgyMwkJcm11CQlSUFhDbGFzc2ljCVJQWGxpdGUJCVwKLQlSUnZpc2lvbglTTTg1MAkJU1BEODIzVFMJc3ZtX3NjOHh4CVwKLQlTWE5JODU1VAlUT1A4NjAJCVRRTTgyM0wJCVRRTTgyM0xfTENECVwKLQlUUU04NTBMCQlUUU04NTVMCQlUUU04NjBMCQl2MzcJCVwKKwlDQ00JCWNvZ2VudF9tcGM4eHgJRFVFVF9BRFMJRVNURUVNMTkyRQlcCisJRVRYMDk0CQlFTFBUODYwCQlGQURTODIzCQlGQURTODUwU0FSCVwKKwlGQURTODYwVAlGTEFHQURNCQlGUFM4NTBMCQlHRU44NjBUCQlcCisJR0VOODYwVF9TQwlHRU5JRVRWCQlHVEgJCWhlcm1lcwkJXAorCUlBRDIxMAkJSUNVODYyXzEwME1IeglJUDg2MAkJSVZNTDI0CQlcCisJSVZNTDI0XzEyOAlJVk1MMjRfMjU2CUlWTVM4CQlJVk1TOF8xMjgJXAorCUlWTVM4XzI1NglLVVA0SyAgICAgICAgICAgTEFOVEVDCSAgICAgICAgbHdtb24gICAJXAorCU1CWAkJTUJYODYwVAkJTUhQQwkJTVBDODZ4QURTCVwKKwlNVlMxCQlORVRWSUEJCU5FVFZJQV9WMglOWDgyMwkJXAorCXBjdV9lCQlRUzgyMwkJUVM4NTAJCVFTODYwVAkJXAorCVIzNjBNUEkJCVJCQzgyMwkJcm11CQlSUFhDbGFzc2ljCVwKKwlSUFhsaXRlCQlSUnZpc2lvbglTTTg1MAkJU1BEODIzVFMJXAorCXN2bV9zYzh4eAlTWE5JODU1VAlUT1A4NjAJCVRRTTgyM0wJCVwKKwlUUU04MjNMX0xDRAlUUU04NTBMCQlUUU04NTVMCQlUUU04NjBMCQlcCisJdjM3CQkJCQkJCQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYjJhZTI4Mi4uMTI2YzllOSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTk5LDcgKzk5LDcgQEAKIExJQlMgKz0gYm9hcmQvJChCT0FSRERJUikvbGliJChCT0FSRCkuYQogTElCUyArPSBjcHUvJChDUFUpL2xpYiQoQ1BVKS5hCiBMSUJTICs9IGxpYl8kKEFSQ0gpL2xpYiQoQVJDSCkuYQotTElCUyArPSBmcy9qZmZzMi9saWJqZmZzMi5hIGZzL2Zkb3MvbGliZmRvcy5hIGZzL2ZhdC9saWJmYXQuYQorTElCUyArPSBmcy9jcmFtZnMvbGliY3JhbWZzLmEgZnMvZmF0L2xpYmZhdC5hIGZzL2Zkb3MvbGliZmRvcy5hIGZzL2pmZnMyL2xpYmpmZnMyLmEKIExJQlMgKz0gbmV0L2xpYm5ldC5hCiBMSUJTICs9IGRpc2svbGliZGlzay5hCiBMSUJTICs9IHJ0Yy9saWJydGMuYQpAQCAtMjQ5LDcgKzI0OSwxMiBAQAogQWRkZXJJSV9jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGFkZGVySUkKIAotQURTODYwX2NvbmZpZzoJdW5jb25maWcKK0FEUzg2MF9jb25maWcgICAgIFwKK0RVRVRfQURTX2NvbmZpZyAgIFwKK0ZBRFM4MjNfY29uZmlnICAgIFwKK0ZBRFM4NTBTQVJfY29uZmlnIFwKK01QQzg2eEFEU19jb25maWcgIFwKK0ZBRFM4NjBUX2NvbmZpZzoJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggZmFkcwogCiBBTVg4NjBfY29uZmlnCToJdW5jb25maWcKQEAgLTI3OSwxMiArMjg0LDYgQEAKIEVUWDA5NF9jb25maWcJOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBldHgwOTQKIAotRkFEUzgyM19jb25maWcJXAotRkFEUzg1MFNBUl9jb25maWcgXAotTVBDODZ4QURTX2NvbmZpZyBcCi1GQURTODYwVF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGZhZHMKLQogRkxBR0FETV9jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGZsYWdhZG0KIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDEyNDAzNWEuLmMyMjNkNGMgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTIwMiw3ICsyMDIsNyBAQAogLSBib2FyZC9NYXJ2ZWxsL2RiNjQ0NjAgRmlsZXMgc3BlY2lmaWMgdG8gZGI2NDQ2MCBib2FyZAogLSBib2FyZC9tYng4eHgJRmlsZXMgc3BlY2lmaWMgdG8gTUJYCSAgICAgYm9hcmRzCiAtIGJvYXJkL21wYzgyNjBhZHMKLQkJRmlsZXMgc3BlY2lmaWMgdG8gTVBDODI2MEFEUyBhbmQgUFEyRkFEUy1aVSBib2FyZHMKKwkJRmlsZXMgc3BlY2lmaWMgdG8gTVBDODI2eEFEUyBhbmQgUFEyRkFEUy1aVS9WUiBib2FyZHMKIC0gYm9hcmQvbXBjODU0MGFkcwogCQlGaWxlcyBzcGVjaWZpYyB0byBNUEM4NTQwQURTIGJvYXJkcwogLSBib2FyZC9tcGM4NTYwYWRzCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJQ09ORklHX05FVFZJQSwgICAgIENPTkZJR19SQkM4MjMsICAgICBDT05GSUdfWlBDMTkwMCwKIAkJQ09ORklHX01QQzg1NDBBRFMsIENPTkZJR19NUEM4NTYwQURTLCBDT05GSUdfUVM4NTAsCiAJCUNPTkZJR19RUzgyMywgICAgICBDT05GSUdfUVM4NjBULCAgICAgQ09ORklHX0RCNjQzNjAsCi0JCUNPTkZJR19EQjY0NDYwCisJCUNPTkZJR19EQjY0NDYwLAkgICBDT05GSUdfRFVFVF9BRFMKIAogCQlBUk0gYmFzZWQgYm9hcmRzOgogCQktLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDA3LDcgKzQwNyw3IEBACiAJCUNPTkZJR19BRFNUWVBFCiAJCVBvc3NpYmxlIHZhbHVlcyBhcmU6CiAJCQlDRkdfODI2MEFEUwktIG9yaWdpbmFsIE1QQzgyNjBBRFMKLQkJCUNGR184MjY2QURTCS0gTVBDODI2NkFEUyAodW50ZXN0ZWQpCisJCQlDRkdfODI2NkFEUwktIE1QQzgyNjZBRFMKIAkJCUNGR19QUTJGQURTCS0gUFEyRkFEUy1aVSBvciBQUTJGQURTLVZSCiAKIApAQCAtMjAwNCw3ICsyMDA0LDcgQEAKICAgICBhdDkxcm05MjAwZGtfY29uZmlnCSAgb21hcDE1MTBpbm5fY29uZmlnCU1QQzgyNjBBRFNfY29uZmlnCiAgICAgb21hcDE2MTBpbm5fY29uZmlnCSAgWlBDMTkwMF9jb25maWcJTVBDODU0MEFEU19jb25maWcKICAgICBNUEM4NTYwQURTX2NvbmZpZwkgIFFTODUwX2NvbmZpZwkJUVM4MjNfY29uZmlnCi0gICAgUVM4NjBUX2NvbmZpZworICAgIFFTODYwVF9jb25maWcgICAgICAgICBEVUVUX0FEU19jb25maWcKIAogTm90ZTogZm9yIHNvbWUgYm9hcmQgc3BlY2lhbCBjb25maWd1cmF0aW9uIG5hbWVzIG1heSBleGlzdDsgY2hlY2sgIGlmCiAgICAgICBhZGRpdGlvbmFsICBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgZnJvbSB0aGUgYm9hcmQgdmVuZG9yOyBmb3IKQEAgLTMxNTgsNiArMzE1OCwxMyBAQAogaW4gQXNzZW1ibGVyKTsgbm8gQysrIGlzIHVzZWQsIHNvIHBsZWFzZSBkbyBub3QgdXNlIEMrKyBzdHlsZQogY29tbWVudHMgKC8vKSBpbiB5b3VyIGNvZGUuCiAKK1BsZWFzZSBhbHNvIHN0aWNrIHRvIHRoZSBmb2xsb3dpbmcgZm9ybWF0aWluZyBydWxlczoKKy0gcmVtb3ZlIGFueSB0cmFpbGluZyB3aGl0ZSBzcGFjZQorLSB1c2UgVEFCIGNoYXJhY3RlcnMgZm9yIGluZGVudGF0aW9uLCBub3Qgc3BhY2VzCistIG1ha2Ugc3VyZSBOT1QgdG8gdXNlIERPUyAnXHJcbicgbGluZSBmZWVkcworLSBkbyBub3QgYWRkIG1vcmUgdGhhbiAyIGVtcHR5IGxpbmVzIHRvIHNvdXJjZSBmaWxlcworLSBkbyBub3QgYWRkIHRyYWlsaW5nIGVtcHR5IGxpbmVzIHRvIHNvdXJjZSBmaWxlcworCiBTdWJtaXNzaW9ucyB3aGljaCBkbyBub3QgY29uZm9ybSB0byB0aGUgc3RhbmRhcmRzIG1heSBiZSByZXR1cm5lZAogd2l0aCBhIHJlcXVlc3QgdG8gcmVmb3JtYXQgdGhlIGNoYW5nZXMuCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmUvUFBDaGFtZWxlb25FVkIvUFBDaGFtZWxlb25FVkIuYyBiL2JvYXJkL2RhdmUvUFBDaGFtZWxlb25FVkIvUFBDaGFtZWxlb25FVkIuYwppbmRleCBhNzY4MmJhLi42MWY3MDMxIDEwMDY0NAotLS0gYS9ib2FyZC9kYXZlL1BQQ2hhbWVsZW9uRVZCL1BQQ2hhbWVsZW9uRVZCLmMKKysrIGIvYm9hcmQvZGF2ZS9QUENoYW1lbGVvbkVWQi9QUENoYW1lbGVvbkVWQi5jCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMS0yMDAzCi0gKiBTdGVmYW4gUm9lc2UsIGVzZCBnbWJoIGdlcm1hbnksIHN0ZWZhbi5yb2VzZUBlc2QtZWxlY3Ryb25pY3MuY29tCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIERBVkUgU3JsCisgKiBodHRwOi8vd3d3LmRhdmUtdGVjaC5pdAorICogaHR0cDovL3d3dy53YXduZXQuYml6CisgKiBtYWlsdG86aW5mb0B3YXduZXQuYml6CiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCmRpZmYgLS1naXQgYS9ib2FyZC9mYWRzL2NvbmZpZy5tayBiL2JvYXJkL2ZhZHMvY29uZmlnLm1rCmluZGV4IGJhZDAyZjIuLmRjZjgzZmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZhZHMvY29uZmlnLm1rCisrKyBiL2JvYXJkL2ZhZHMvY29uZmlnLm1rCkBAIC0xLDcgKzEsOSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKKyMgTW9kaWZpZWQgYnksIFl1bGkgQmFyY29oZW4sIEFyYWJlbGxhIFNvZnR3YXJlIEx0ZC4sIHl1bGlAYXJhYmVsbGFzdy5jb20KKyMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICMgcHJvamVjdC4KICMKQEAgLTIyLDkgKzI0LDExIEBACiAjCiAKICMKLSMgTW90b3JvbGEgb2xkIE1QQzgyMS84NjBBRFMsIE1QQzh4eEZBRFMsIGFuZCBuZXcgTVBDODY2QURTIGJvYXJkcworIyBNb3Rvcm9sYSBvbGQgTVBDODIxLzg2MEFEUywgTVBDOHh4RkFEUywgbmV3IE1QQzg2NkFEUywgYW5kIERVRVQKKyMgKE1QQzg3eC84OHgpIEFEUyBib2FyZHMKICMKIAogVEVYVF9CQVNFID0gMHhGRTAwMDAwMAotI1RFWFRfQkFTRSA9IDB4MDI4MDAwMDAKLSNPQkpDRkxBR1MgPSAtLXNldC1zZWN0aW9uLWZsYWdzPS5wcGNlbnY9Y29udGVudHMsYWxsb2MsbG9hZCxkYXRhCitQTEFURk9STV9DUFBGTEFHUyArPSAtSSQoVE9QRElSKS9ib2FyZC9mYWRzCitIT1NUX0NGTEFHUyArPSAtSSQoVE9QRElSKS9ib2FyZC9mYWRzCitIT1NUX0VOVklST19DRkxBR1MgKz0gLUkkKFRPUERJUikvYm9hcmQvZmFkcwpkaWZmIC0tZ2l0IGEvYm9hcmQvZmFkcy9mYWRzLmMgYi9ib2FyZC9mYWRzL2ZhZHMuYwppbmRleCBhY2E3YjI4Li4zMDgzNzQwIDEwMDY0NAotLS0gYS9ib2FyZC9mYWRzL2ZhZHMuYworKysgYi9ib2FyZC9mYWRzL2ZhZHMuYwpAQCAtMSw3ICsxLDkgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKKyAqIE1vZGlmaWVkIGJ5LCBZdWxpIEJhcmNvaGVuLCBBcmFiZWxsYSBTb2Z0d2FyZSBMdGQuLCB5dWxpQGFyYWJlbGxhc3cuY29tCisgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCiAgKgpAQCAtMjEsMTUgKzIzLDE2IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxtcGM4eHguaD4KLSNpbmNsdWRlICJmYWRzLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkZGRkYKIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWZuZGVmIENPTkZJR19EVUVUX0FEUyAvKiBObyBvbGQgRFJBTSBvbiBEdWV0ICovCisKICNpZiBkZWZpbmVkKENPTkZJR19EUkFNXzUwTUhaKQogLyogNTBNSHogdGFibGVzICovCiBzdGF0aWMgY29uc3QgdWludCBkcmFtXzYwbnNbXSA9CkBAIC0xODQsMTA1ICsxODcsNiBAQAogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0vKgotICogQ2hlY2sgQm9hcmQgSWRlbnRpdHk6Ci0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0ZBRFMpICYmICFkZWZpbmVkKENPTkZJR19NUEM4NnhBRFMpCi1zdGF0aWMgdm9pZCBjaGVja2Rib2FyZCh2b2lkKQotewotCS8qIGdldCBkYiB0eXBlIGZyb20gQkNTUiAzICovCi0JdWludCBrID0gKCooKHVpbnQgKilCQ1NSMykgPj4gMjQpICYgMHgzZjsKLQotCXByaW50ZigiIHdpdGggZGIgIik7Ci0KLQlzd2l0Y2goaykgewotCWNhc2UgMHgwMyA6Ci0JCXB1dHMgKCJNUEM4MjMiKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDIwIDoKLQkJcHV0cyAoIk1QQzgwMSIpOwotCQlicmVhazsKLQljYXNlIDB4MjEgOgotCQlwdXRzICgiTVBDODUwIik7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMiA6Ci0JCXB1dHMgKCJNUEM4MjEsIE1QQzg2MCAvIE1QQzg2MFNBUiAvIE1QQzg2MFQiKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDIzIDoKLQkJcHV0cyAoIk1QQzg2MFNBUiIpOwotCQlicmVhazsKLQljYXNlIDB4MjQgOgotCWNhc2UgMHgyQSA6Ci0JCXB1dHMgKCJNUEM4NjBUIik7Ci0JCWJyZWFrOwotCWNhc2UgMHgzRiA6Ci0JCXB1dHMgKCJNUEM4NTBTQVIiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdCA6IHByaW50ZigiMHgleCIsIGspOwotCX0KLX0KLSNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19GQURTKSAmJiAhZGVmaW5lZChDT05GSUdfTVBDODZ4QURTKSAqLwotCi1pbnQgY2hlY2tib2FyZCAodm9pZCkKLXsKLQkvKiBnZXQgcmV2aXNpb24gZnJvbSBCQ1NSIDMgKi8KLQl1aW50IHIgPSAgKCgoKigodWludCAqKSBCQ1NSMykgPj4gMjMpICYgMSkgPDwgMykKLQkJfCAoKCgqKCh1aW50ICopIEJDU1IzKSA+PiAxOSkgJiAxKSA8PCAyKQotCQl8ICgoKCooKHVpbnQgKikgQkNTUjMpID4+IDE2KSAmIDMpKTsKLQotCXB1dHMgKCJCb2FyZDogIik7Ci0KLSNpZmRlZiBDT05GSUdfRkFEUwotIyBpZmRlZiBDT05GSUdfTVBDODZ4QURTCi0JcHV0cyAoIk1QQzg2eEFEUyIpOwotIyBlbHNlCi0JcHV0cyAoIkZBRFMiKTsKLQljaGVja2Rib2FyZCAoKTsKLSMgZW5kaWYJLyogIUNPTkZJR19NUEM4NnhBRFMgKi8KLQlwcmludGYgKCIgcmV2ICIpOwotCi0Jc3dpdGNoIChyKSB7Ci0JY2FzZSAweDAwOgotCQlwdXRzICgiRU5HXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAxOgotCQlwdXRzICgiUElMT1RcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYgKCJ1bmtub3duICgweCV4KVxuIiwgcik7Ci0JCXJldHVybiAoLTEpOwotCX0KLSNlbmRpZgkvKiBDT05GSUdfRkFEUyAqLwotCi0jaWZkZWYgQ09ORklHX0FEUwotCXByaW50ZiAoIkFEUyByZXYgIik7Ci0KLQlzd2l0Y2ggKHIpIHsKLQljYXNlIDB4MDA6Ci0JCXB1dHMgKCJFTkcgLSB0aGlzIGJvYXJkIHN1Y2tzLCBjaGVjayB0aGUgZXJyYXRhLCBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC0xOwotCWNhc2UgMHgwMToKLQkJcHV0cyAoIlBJTE9UIC0gd2FybmluZywgcmVhZCBlcnJhdGEgXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyOgotCQlwdXRzICgiQSAtIHdhcm5pbmcsIHJlYWQgZXJyYXRhIFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMzoKLQkJcHV0cyAoIkIgXG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRmICgidW5rbm93biByZXZpc2lvbiAoMHgleClcbiIsIHIpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0jZW5kaWYJLyogQ09ORklHX0FEUyAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50ICpiYXNlLCBsb25nIGludCBtYXhzaXplKQogewogCXZvbGF0aWxlIGxvbmcgaW50ICphZGRyPWJhc2U7CkBAIC00MjUsOSArMzI5LDExIEBACiAKIAkvKiBtYXliZSB3ZSBzaG91bGQgdHVybiBvZmYgdXBtYSBoZXJlIG9yIHNvbWV0aGluZyAqLwogfQorI2VuZGlmIC8qICFDT05GSUdfRFVFVF9BRFMgKi8KIAotI2lmZGVmIENPTkZJR19GQURTCi0vKiBTRFJBTSBTVVBQT1JUIChGQURTIE9OTFkpICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNpZmRlZiBDT05GSUdfRkFEUyAvKiBTRFJBTSBleGlzdHMgb24gRkFEUyBhbmQgbmV3ZXIgYm9hcmRzICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRFJBTV8xMDBNSFopCiAKQEAgLTcyOCwxNSArNjM0LDE4IEBACiAJfQogfQogCi0vKiBTRFJBTSBTVVBQT1JUIChGQURTIE9OTFkpICovCiAjZW5kaWYgLyogQ09ORklHX0ZBRFMgKi8KIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCiBsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCiB7CiAJdWludCBzZHJhbXN6ID0gMDsJLyogc2l6ZSBvZiBzZHJhbSBpbiBNYnl0ZXMgKi8KIAl1aW50IGJhc2UgPSAwOwkJLyogYmFzZSBvZiBkcmFtIGluIGJ5dGVzICovCiAJdWludCBtID0gMDsJCS8qIHNpemUgb2YgZHJhbSBpbiBNYnl0ZXMgKi8KKyNpZm5kZWYgQ09ORklHX0RVRVRfQURTCiAJdWludCBrLCBzOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFEUwogCWlmICghaW5pdHNkcmFtICgweDAwMDAwMDAwLCAmc2RyYW1zeikpIHsKQEAgLTc0NCw3ICs2NTMsNyBAQAogCQlwcmludGYgKCIoJXUgTUIgU0RSQU0pICIsIHNkcmFtc3opOwogCX0KICNlbmRpZgotCisjaWZuZGVmIENPTkZJR19EVUVUX0FEUyAvKiBObyBvbGQgRFJBTSBvbiBEdWV0ICovCiAJayA9ICgqKCh1aW50ICopIEJDU1IyKSA+PiAyMykgJiAweDBmOwogCiAJc3dpdGNoIChrICYgMHgzKSB7CkBAIC03OTUsMTcgKzcwNCw5IEBACiAJCV9kcmFtZGlzYWJsZSAoKTsKIAkJbSA9IDA7CiAJfQotCisjZW5kaWYgLyogIUNPTkZJR19EVUVUX0FEUyAqLwogCW0gKz0gc2RyYW1zejsJCQkJLyogYWRkIHNkcmFtIHNpemUgdG8gdG90YWwgKi8KIAotCWlmICghbSkgewotCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQkJKkRSQU0gRVJST1IsIEhBTFQgUFJPQ0VTU09SCi0JCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJd2hpbGUgKDEpOwotCQlyZXR1cm4gLTE7Ci0JfQotCiAJcmV0dXJuIChtIDw8IDIwKTsKIH0KIApAQCAtODE5LDYgKzcyMCwxMDUgQEAKICAgICByZXR1cm4gKDApOwogfQogCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBDaGVjayBCb2FyZCBJZGVudGl0eToKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfRkFEUykgJiYgZGVmaW5lZChDRkdfREFVR0hURVJCT0FSRCkKK3N0YXRpYyB2b2lkIGNoZWNrZGJvYXJkKHZvaWQpCit7CisJLyogZ2V0IGRiIHR5cGUgZnJvbSBCQ1NSIDMgKi8KKwl1aW50IGsgPSAoKigodWludCAqKUJDU1IzKSA+PiAyNCkgJiAweDNmOworCisJcHV0cyAoIiB3aXRoIGRiICIpOworCisJc3dpdGNoKGspIHsKKwljYXNlIDB4MDMgOgorCQlwdXRzICgiTVBDODIzIik7CisJCWJyZWFrOworCWNhc2UgMHgyMCA6CisJCXB1dHMgKCJNUEM4MDEiKTsKKwkJYnJlYWs7CisJY2FzZSAweDIxIDoKKwkJcHV0cyAoIk1QQzg1MCIpOworCQlicmVhazsKKwljYXNlIDB4MjIgOgorCQlwdXRzICgiTVBDODIxLCBNUEM4NjAgLyBNUEM4NjBTQVIgLyBNUEM4NjBUIik7CisJCWJyZWFrOworCWNhc2UgMHgyMyA6CisJCXB1dHMgKCJNUEM4NjBTQVIiKTsKKwkJYnJlYWs7CisJY2FzZSAweDI0IDoKKwljYXNlIDB4MkEgOgorCQlwdXRzICgiTVBDODYwVCIpOworCQlicmVhazsKKwljYXNlIDB4M0YgOgorCQlwdXRzICgiTVBDODUwU0FSIik7CisJCWJyZWFrOworCWRlZmF1bHQgOiBwcmludGYoIjB4JXgiLCBrKTsKKwl9Cit9CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfRkFEUykgJiYgZGVmaW5lZChDRkdfREFVR0hURVJCT0FSRCkgKi8KKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisJLyogZ2V0IHJldmlzaW9uIGZyb20gQkNTUiAzICovCisJdWludCByID0gICgoKCooKHVpbnQgKikgQkNTUjMpID4+IDIzKSAmIDEpIDw8IDMpCisJCXwgKCgoKigodWludCAqKSBCQ1NSMykgPj4gMTkpICYgMSkgPDwgMikKKwkJfCAoKCgqKCh1aW50ICopIEJDU1IzKSA+PiAxNikgJiAzKSk7CisKKwlwdXRzICgiQm9hcmQ6ICIpOworCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZ4QURTKQorCXB1dHMgKCJNUEM4NnhBRFMiKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RVRVRfQURTKQorCXB1dHMgKCJEVUVUIEFEUyIpOworCXIgPSAwOyAvKiBJJ3ZlIGdvdCBOUiAoTm8gUmV2aXNpb24pIGJvYXJkICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19GQURTKQorCXB1dHMgKCJGQURTIik7CisJY2hlY2tkYm9hcmQgKCk7CisjZWxzZQorCXB1dHMgKCJBRFMiKTsKKyNlbmRpZgorCXB1dHMgKCIgcmV2ICIpOworCisJc3dpdGNoIChyKSB7CisjaWYgZGVmaW5lZChDT05GSUdfQURTKQorCWNhc2UgMHgwMDoKKwkJcHV0cyAoIkVORyAtIHRoaXMgYm9hcmQgc3Vja3MsIGNoZWNrIHRoZSBlcnJhdGEsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLTE7CisJY2FzZSAweDAxOgorCQlwdXRzICgiUElMT1QgLSB3YXJuaW5nLCByZWFkIGVycmF0YSBcbiIpOworCQlicmVhazsKKwljYXNlIDB4MDI6CisJCXB1dHMgKCJBIC0gd2FybmluZywgcmVhZCBlcnJhdGEgXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAweDAzOgorCQlwdXRzICgiQiBcbiIpOworCQlicmVhazsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RVRVRfQURTKQorCWNhc2UgMHgwMDoKKwkJcHV0cyAoIk5SXG4iKTsKKwkJYnJlYWs7CisjZWxzZSAgLyogRkFEUyBhbmQgbmV3ZXIgKi8KKwljYXNlIDB4MDA6CisJCXB1dHMgKCJFTkdcbiIpOworCQlicmVhazsKKwljYXNlIDB4MDE6CisJCXB1dHMgKCJQSUxPVFxuIik7CisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19BRFMgKi8KKwlkZWZhdWx0OgorCQlwcmludGYgKCJ1bmtub3duICgweCV4KVxuIiwgcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQogCkBAIC05NjQsNyArOTY0LDcgQEAKIAogI2VuZGlmCS8qIENGR19DTURfUENNQ0lBICovCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogI2lmZGVmIENGR19QQ19JREVfUkVTRVQKIApAQCAtOTg4LDQgKzk4OCwzIEBACiB9CiAKICNlbmRpZgkvKiBDRkdfUENfSURFX1JFU0VUICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9ib2FyZC9mYWRzL2ZhZHMuaCBiL2JvYXJkL2ZhZHMvZmFkcy5oCmluZGV4IDBiZDhlODQuLjY2OGI5MDYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZhZHMvZmFkcy5oCisrKyBiL2JvYXJkL2ZhZHMvZmFkcy5oCkBAIC0xLDcgKzEsMTQgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKKyAqIERlcml2ZWQgZnJvbSBGQURTODYwVCBkZWZpbml0aW9ucyBieSBNYWdudXMgRGFtbSwgSGVsbXV0IEJ1Y2hzYmF1bSwKKyAqIGFuZCBEYW4gTWFsZWsKKyAqCisgKiBNb2RpZmllZCBieSwgWXVsaSBCYXJjb2hlbiwgQXJhYmVsbGEgU29mdHdhcmUgTHRkLiwgeXVsaUBhcmFiZWxsYXN3LmNvbQorICoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgdmFsdWVzIGNvbW1vbiB0byBhbGwgRkFEUyBmYW1pbHkgYm9hcmRzLgorICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgogICoKQEAgLTIyLDIzICsyOSw0MzUgQEAKICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRkxBU0ggTWVtb3J5IE1hcCBhcyB1c2VkIGJ5IEZBRFMgTW9uaXRvcjoKKyAqIEZsYXNoIE1lbW9yeSBNYXAgYXMgdXNlZCBieSBVLUJvb3Q6CiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IEFkZHJlc3MgICAgTGVuZ3RoCiAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4RkUwMF8wMDAwICAgICBTdGFydCBvZiBGbGFzaCAtLS0tLS0tLS0tLS0tLS0tLQotICogfCBNT044eHggY29kZSAgICAgICAgICAgfCAweEZFMDBfMDEwMCAgICAgUmVzZXQgVmVjdG9yCi0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4RkUwP18/Pz8/Ci0gKiB8ICh1bnVzZWQpICAgICAgICAgICAgICB8Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4RkUwMV9GRjAwCi0gKiB8IEV0aGVybmV0IEFkZHJlc3NlcyAgICB8ICAgICAgICAgICAgICAgICAweDc4Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4RkUwMV9GRjc4Ci0gKiB8IChSZXNlcnZlZCBmb3IgTU9OOHh4KSB8ICAgICAgICAgICAgICAgICAweDQ0Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4RkUwMV9GRkJDCi0gKiB8IExvY2sgQWRkcmVzcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAweDA0Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4RkUwMV9GRkMwICAgICAgICAgICAgICAgICAgICAgXgotICogfCBIYXJkd2FyZSBJbmZvcm1hdGlvbiAgfCAgICAgICAgICAgICAgICAgMHg0MCAgICAgICAgICAgIHwgTU9OOHh4Ci0gKiArPT09PT09PT09PT09PT09PT09PT09PT0rIDB4RkUwMl8wMDAwIChzZWN0b3IgYm9yZGVyKSAgICAtLS0tLS0tLS0tLS0tLS0tLQotICogfCBBdXRvc3RhcnQgSGVhZGVyICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQXBwbGljYXRpb25zCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICB8IDB4RkUwMF8wMTAwICAgICBSZXNldCBWZWN0b3IKKyAqICsgICAgICAgICAgICAgICAgICAgICAgICsgMHhGRTA/Xz8/Pz8KKyAqIHwgVS1Cb290IGNvZGUgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgMHhGRTA0XzAwMDAgKHNlY3RvciBib3JkZXIpCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8IFUtQm9vdCBlbnZpcm9ubWVudCAgICB8CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICogfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVS1Cb290CisgKiArPT09PT09PT09PT09PT09PT09PT09PT0rIDB4RkUwOF8wMDAwIChzZWN0b3IgYm9yZGVyKSAgICAtLS0tLS0tLS0tLS0tLS0tLQorICogfCBBdmFpbGFibGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQXBwbGljYXRpb25zCiAgKiB8IC4uLiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHNob3VsZCBBTFdBWVMgZGVmaW5lIHRoaXMsIG1lYXN1cmVfZ2NsayBpbiBzcGVlZC5jIGlzIHVucmVsaWFibGUgKi8KKy8qIGluIGdlbmVyYWwsIHdlIGFsd2F5cyBrbm93IHRoaXMgZm9yIEZBRFMrbmV3IEFEUyBhbnl3YXkgKi8KKyNkZWZpbmUgQ09ORklHXzh4eF9HQ0xLX0ZSRVEgICAgICgoQ0ZHXzhYWF9YSU4pICogKENGR184WFhfRkFDVCkpCisKKyNpZiAwCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJLTEJLyogYXV0b2Jvb3QgZGlzYWJsZWQJCSovCisjZWxzZQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCSovCisjZW5kaWYKKworI3VuZGVmCUNPTkZJR19CT09UQVJHUworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQkJXAorICAgICJkaGNwOyIJCQkJCQkJCQlcCisgICAgInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aCkgIgkJXAorICAgICJpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCk6JChnYXRld2F5aXApOiQobmV0bWFzayk6JChob3N0bmFtZSk6Om9mZjsiCVwKKyAgICAiYm9vdG0iCisKKyN1bmRlZglDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KKworLyoKKyAqIE5ldyBNUEM4NnhBRFMgYW5kIER1ZXQgcHJvdmlkZSB0d28gRXRoZXJuZXQgY29ubmVjdGl2aXR5IG9wdGlvbnM6CisgKiAxME1iaXQvcyBvbiBTQ0MgYW5kIDEwME1iaXQvcyBvbiBGRUMuIEZBRFMgcHJvdmlkZXMgU0NDIEV0aGVybmV0IG9uCisgKiBtb3RoZXJib2FyZCBhbmQgRkVDIEV0aGVybmV0IG9uIGRhdWdodGVyYm9hcmQuIEFsbCBuZXcgUFExIGNoaXBzIGhhdmUKKyAqIGdvdCBGRUMgc28gRkVDIGlzIHRoZSBkZWZhdWx0LgorICovCisjaWZuZGVmIENPTkZJR19BRFMKKyN1bmRlZglDT05GSUdfU0NDMV9FTkVUCQkvKiBEaXNhYmxlIFNDQzEgZXRoZXJuZXQgKi8KKyNkZWZpbmUJQ09ORklHX0ZFQ19FTkVUCQkJLyogVXNlIEZFQyBldGhlcm5ldCAgKi8KKyNlbHNlCQkJCQkvKiBPbGQgQURTIGhhcyBub3QgZ290IEZFQyBvcHRpb24gKi8KKyNkZWZpbmUJQ09ORklHX1NDQzFfRU5FVAkJLyogVXNlIFNDQzEgZXRoZXJuZXQgKi8KKyN1bmRlZglDT05GSUdfRkVDX0VORVQJCQkvKiBObyBGRUMgZXRoZXJuZXQgICovCisjZW5kaWYgLyogIUNPTkZJR19BRFMgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NDQzFfRU5FVCkgJiYgZGVmaW5lZChDT05GSUdfRkVDX0VORVQpCisjZXJyb3IgQm90aCBDT05GSUdfU0NDMV9FTkVUIGFuZCBDT05GSUdfRkVDX0VORVQgY29uZmlndXJlZAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRkVDX0VORVQKKyNkZWZpbmUgQ0ZHX0RJU0NPVkVSX1BIWQorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0NPTU1BTkRTCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkoQ09ORklHX0NNRF9ERkwgIFwKKwkJCSB8IENGR19DTURfREhDUCAgXAorCQkJIHwgQ0ZHX0NNRF9JTU1BUCBcCisJCQkgfCBDRkdfQ01EX01JSSAgIFwKKwkJCSB8IENGR19DTURfUElORyAgXAorCQkJKQorI2VuZGlmIC8qICFDT05GSUdfQ09NTUFORFMgKi8KKworLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjdW5kZWYJQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lCUNGR19QUk9NUFQJCSI9PiIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lCUNGR19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbHNlCisjZGVmaW5lCUNGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2VuZGlmCisjZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZQlDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENGR19MT0FEX0FERFIJIAkweDAwMTAwMDAwCisKKyNkZWZpbmUJQ0ZHX0haCQkgICAgICAgIDEwMDAJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLworCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKy8qCisgKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncworICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQorICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEludGVybmFsIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBDRkdfSU1NUgkJMHhGRjAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCUNGR19JTU1SCisjZGVmaW5lCUNGR19JTklUX1JBTV9FTkQJMHgyRjAwCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gRFBSQU0JKi8KKyNkZWZpbmUJQ0ZHX0dCTF9EQVRBX1NJWkUJNjQgIC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lCUNGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCisgKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCisgKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCisgKi8KKyNkZWZpbmUJQ0ZHX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4NnhBRFMpIHx8IGRlZmluZWQoQ09ORklHX0RVRVRfQURTKSAvKiBOZXcgQURTIG9yIER1ZXQgKi8KKyNkZWZpbmUJQ0ZHX1NEUkFNX1NJWkUJCTB4MDA4MDAwMDAgICAgICAJLyogOCBNYnl0ZSAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfRkFEUykJCQkJLyogT2xkL25ldyBGQURTICovCisjZGVmaW5lCUNGR19TRFJBTV9TSVpFCQkweDAwNDAwMDAwCQkvKiA0IE1ieXRlICovCisjZWxzZQkJCQkJCQkvKiBPbGQgQURTICovCisjZGVmaW5lCUNGR19TRFJBTV9TSVpFCQkweDAwMDAwMDAwCQkvKiBObyBTRFJBTSAqLworI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMTAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KKyNpZiAoQ0ZHX1NEUkFNX1NJWkUpCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJQ0ZHX1NEUkFNX1NJWkUJLyogMSAuLi4gU0RSQU1fU0laRQkqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDA0MDAwMDAgICAgIAkvKiAxIC4uLiA0IE1CIGluIERSQU0JKi8KKyNlbmRpZiAvKiBDRkdfU0RSQU1fU0laRSAqLworCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZQlDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eAkqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRmxhc2ggb3JnYW5pemF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCVRFWFRfQkFTRQorI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJKCh1aW50KSg4ICogMTAyNCAqIDEwMjQpKQkvKiBtYXggOE1ieXRlICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMTYgICAgICAvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLworCisjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDQwMDAwCS8qIHNlZSBSRUFETUUgLSBlbnYgc2VjdG9yIHRvdGFsIHNpemUJKi8KKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCUNGR19FTlZfU0VDVF9TSVpFCisjZGVmaW5lCUNGR19FTlZfU0laRQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQJCSovCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQlDRkdfRkxBU0hfQkFTRQorI2RlZmluZQlDRkdfTU9OSVRPUl9MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IEtCIGZvciBtb25pdG9yCSovCisjZGVmaW5lCUNGR19NQUxMT0NfTEVOCQkoMzg0IDw8IDEwKQkvKiBSZXNlcnZlIDM4NCBrQiBmb3IgbWFsbG9jKCkJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FjaGUgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkxNgkvKiBGb3IgYWxsIE1QQzh4eCBDUFVzCQkJKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTQJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJMkMgY29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCTEJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCAqLworI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzIGRlZmF1bHRzICovCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJMTEtOQorICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKKyNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAorCQkJIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJfCBTWVBDUl9TV1ApCisjZWxzZQorI2RlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBTWVBDUl9TV1ApCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0lVTUNSIC0gU0lVIE1vZHVsZSBDb25maWd1cmF0aW9uCQkJCTExLTYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBDTUNJQSBjb25maWcuLCBtdWx0aS1mdW5jdGlvbiBwaW4gdHJpLXN0YXRlCisgKi8KKyNkZWZpbmUgQ0ZHX1NJVU1DUgkoU0lVTUNSX0RCR0MwMCB8IFNJVU1DUl9EQlBDMDAgfCBTSVVNQ1JfTUxSQzAxKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wJCQkJMTEtMjYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCisgKi8KKyNkZWZpbmUgQ0ZHX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKKyAqLworI2RlZmluZSBDRkdfUElTQ1IJKFBJU0NSX1BTIHwgUElTQ1JfUElURikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMjcKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNldCBjbG9jayBvdXRwdXQsIHRpbWViYXNlIGFuZCBSVEMgc291cmNlIGFuZCBkaXZpZGVyLAorICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKKyAqLworI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMTEKKyNkZWZpbmUgQ0ZHX1NDQ1IJKFNDQ1JfVEJTfFNDQ1JfQ09NMDB8U0NDUl9ERlNZTkMwMHxTQ0NSX0RGQlJHMDB8U0NDUl9ERk5MMDAwfFNDQ1JfREZOSDAwMHxTQ0NSX0RGTENEMDAwfFNDQ1JfREZBTENEMDApCisKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLworI2RlZmluZSBDRkdfREVSCQkgMAorCisvKiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIDg2MCBzdGFydHMgdXAgYW5kIGFzc2lnbnMgQ1MwIHRoZQorKiBlbnRpcmUgYWRkcmVzcyBzcGFjZSwgd2UgaGF2ZSB0byBzZXQgdGhlIG1lbW9yeSBjb250cm9sbGVyCisqIGRpZmZlcmVudGx5LiAgTm9ybWFsbHksIHlvdSB3cml0ZSB0aGUgb3B0aW9uIHJlZ2lzdGVyCisqIGZpcnN0LCBhbmQgdGhlbiBlbmFibGUgdGhlIGNoaXAgc2VsZWN0IGJ5IHdyaXRpbmcgdGhlCisqIGJhc2UgcmVnaXN0ZXIuICBGb3IgQ1MwLCB5b3UgbXVzdCB3cml0ZSB0aGUgYmFzZSByZWdpc3RlcgorKiBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIG9wdGlvbiByZWdpc3Rlci4KKyovCisKKy8qCisgKiBJbml0IE1lbW9yeSBDb250cm9sbGVyOgorICoKKyAqIEJSMC9PUjAgKEZsYXNoKQorICogQlIxL09SMSAoQkNTUikKKyAqLworLyogdGhlIG90aGVyIENTOnMgYXJlIGRldGVybWluZWQgYnkgbG9va2luZyBhdCBwYXJhbWV0ZXJzIGluIEJDU1J4ICovCisKKyNkZWZpbmUgQkNTUl9BRERSCQkoKHVpbnQpIDB4RkYwODAwMDApCisKKyNkZWZpbmUgQ0ZHX1BSRUxJTV9PUl9BTQkweEZGODAwMDAwCS8qIE9SIGFkZHIgbWFzayAqLworCisvKiBGTEFTSCB0aW1pbmc6IEFDUyA9IDEwLCBUUkxYID0gMSwgQ1NOVCA9IDEsIFNDWSA9IDMsIEVIVFIgPSAwICovCisjZGVmaW5lIENGR19PUl9USU1JTkdfRkxBU0gJKE9SX0NTTlRfU0FNICB8IE9SX0FDU19ESVY0IHwgT1JfQkkgfCBPUl9TQ1lfM19DTEsgfCBPUl9UUkxYKQorCisjZGVmaW5lIENGR19PUjBfUFJFTElNCShDRkdfUFJFTElNX09SX0FNIHwgQ0ZHX09SX1RJTUlOR19GTEFTSCkgICAvKiA4IE1ieXRlIHVudGlsIGRldGVjdGVkICovCisjZGVmaW5lIENGR19CUjBfUFJFTElNCSgoQ0ZHX0ZMQVNIX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfViApCisKKy8qIEJDU1J4IC0gQm9hcmQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVycyAqLworI2RlZmluZSBDRkdfT1IxX1BSRUxJTQkweEZGRkY4MTEwCQkvKiA2NEtieXRlIGFkZHJlc3Mgc3BhY2UgKi8KKyNkZWZpbmUgQ0ZHX0JSMV9QUkVMSU0JKChCQ1NSX0FERFIpIHwgQlJfVikKKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lCUJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLworCisvKiB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwgKi8KKworI2RlZmluZSBQQ01DSUFfTUVNX0FERFIJCSgodWludCkweEZGMDIwMDAwKQorI2RlZmluZSBQQ01DSUFfTUVNX1NJWkUJCSgodWludCkoNjQgKiAxMDI0KSkKKworI2RlZmluZQlCQ1NSMAkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDApKQorI2RlZmluZQlCQ1NSMQkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDQpKQorI2RlZmluZQlCQ1NSMgkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDgpKQorI2RlZmluZQlCQ1NSMwkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MGMpKQorI2RlZmluZQlCQ1NSNAkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MTApKQorCisvKgorICogKEYpQURTIGJpdHZhbHVlcyBieSBIZWxtdXQgQnVjaHNiYXVtCisgKgorICogU2VlIFVzZXIncyBNYW51YWwgZm9yIGEgcHJvcGVyCisgKiBkZXNjcmlwdGlvbiBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXMKKyAqLworCisjZGVmaW5lIEJDU1IwX0VSQiAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKKyNkZWZpbmUgQkNTUjBfSVAgICAgICAgICgodWludCkweDQwMDAwMDAwKQorI2RlZmluZSBCQ1NSMF9CRElTICAgICAgKCh1aW50KTB4MTAwMDAwMDApCisjZGVmaW5lIEJDU1IwX0JQU19NQVNLICAoKHVpbnQpMHgwQzAwMDAwMCkKKyNkZWZpbmUgQkNTUjBfSVNCX01BU0sgICgodWludCkweDAxODAwMDAwKQorI2RlZmluZSBCQ1NSMF9EQkdDX01BU0sgKCh1aW50KTB4MDA2MDAwMDApCisjZGVmaW5lIEJDU1IwX0RCUENfTUFTSyAoKHVpbnQpMHgwMDE4MDAwMCkKKyNkZWZpbmUgQkNTUjBfRUJERl9NQVNLICgodWludCkweDAwMDYwMDAwKQorCisjZGVmaW5lIEJDU1IxX0ZMQVNIX0VOICAgICAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKKyNkZWZpbmUgQkNTUjFfRFJBTV9FTiAgICAgICAgICAgICgodWludCkweDQwMDAwMDAwKQorI2RlZmluZSBCQ1NSMV9FVEhFTiAgICAgICAgICAgICAgKCh1aW50KTB4MjAwMDAwMDApCisjZGVmaW5lIEJDU1IxX0lSREVOICAgICAgICAgICAgICAoKHVpbnQpMHgxMDAwMDAwMCkKKyNkZWZpbmUgQkNTUjFfRkxBU0hfQ0ZHX0VOICAgICAgICgodWludCkweDA4MDAwMDAwKQorI2RlZmluZSBCQ1NSMV9DTlRfUkVHX0VOX1BST1RFQ1QgKCh1aW50KTB4MDQwMDAwMDApCisjZGVmaW5lIEJDU1IxX0JDU1JfRU4gICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKKyNkZWZpbmUgQkNTUjFfUlMyMzJFTl8xICAgICAgICAgICgodWludCkweDAxMDAwMDAwKQorI2RlZmluZSBCQ1NSMV9QQ0NFTiAgICAgICAgICAgICAgKCh1aW50KTB4MDA4MDAwMDApCisjZGVmaW5lIEJDU1IxX1BDQ1ZDQzAgICAgICAgICAgICAoKHVpbnQpMHgwMDQwMDAwMCkKKyNkZWZpbmUgQkNTUjFfUENDVlBQX01BU0sgICAgICAgICgodWludCkweDAwMzAwMDAwKQorI2RlZmluZSBCQ1NSMV9EUkFNX0hBTEZfV09SRCAgICAgKCh1aW50KTB4MDAwODAwMDApCisjZGVmaW5lIEJDU1IxX1JTMjMyRU5fMiAgICAgICAgICAoKHVpbnQpMHgwMDA0MDAwMCkKKyNkZWZpbmUgQkNTUjFfU0RSQU1fRU4gICAgICAgICAgICgodWludCkweDAwMDIwMDAwKQorI2RlZmluZSBCQ1NSMV9QQ0NWQ0MxICAgICAgICAgICAgKCh1aW50KTB4MDAwMTAwMDApCisKKyNkZWZpbmUgQkNTUjFfUENDVkNDT04JCSBCQ1NSMV9QQ0NWQ0MwCisKKyNkZWZpbmUgQkNTUjJfRkxBU0hfUERfTUFTSyAgICAgICgodWludCkweEYwMDAwMDAwKQorI2RlZmluZSBCQ1NSMl9EUkFNX1BEX01BU0sgICAgICAgKCh1aW50KTB4MDc4MDAwMDApCisjZGVmaW5lIEJDU1IyX0RSQU1fUERfU0hJRlQgICAgICAyMworI2RlZmluZSBCQ1NSMl9FWFRUT0xJX01BU0sgICAgICAgKCh1aW50KTB4MDA3ODAwMDApCisjZGVmaW5lIEJDU1IyX0RCUkVWTlJfTUFTSyAgICAgICAoKHVpbnQpMHgwMDAzMDAwMCkKKworI2RlZmluZSBCQ1NSM19EQklEX01BU0sgICAgICAgICAgKCh1c2hvcnQpMHgzODAwKQorI2RlZmluZSBCQ1NSM19DTlRfUkVHX0VOX1BST1RFQ1QgKCh1c2hvcnQpMHgwNDAwKQorI2RlZmluZSBCQ1NSM19CUkVWTlIwICAgICAgICAgICAgKCh1c2hvcnQpMHgwMDgwKQorI2RlZmluZSBCQ1NSM19GTEFTSF9QRF9NQVNLICAgICAgKCh1c2hvcnQpMHgwMDcwKQorI2RlZmluZSBCQ1NSM19CUkVWTjEgICAgICAgICAgICAgKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBCQ1NSM19CUkVWTjJfTUFTSyAgICAgICAgKCh1c2hvcnQpMHgwMDAzKQorCisjZGVmaW5lIEJDU1I0X0VUSExPT1AgICAgICAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKKyNkZWZpbmUgQkNTUjRfVEZQTERMICAgICAgICAgICAgICgodWludCkweDQwMDAwMDAwKQorI2RlZmluZSBCQ1NSNF9UUFNRRUwgICAgICAgICAgICAgKCh1aW50KTB4MjAwMDAwMDApCisjZGVmaW5lIEJDU1I0X1NJR05BTF9MQU1QICAgICAgICAoKHVpbnQpMHgxMDAwMDAwMCkKKyNkZWZpbmUgQkNTUjRfRkVUSF9FTiAgICAgICAgICAgICgodWludCkweDA4MDAwMDAwKQorI2RlZmluZSBCQ1NSNF9GRVRIQ0ZHMCAgICAgICAgICAgKCh1aW50KTB4MDQwMDAwMDApCisjZGVmaW5lIEJDU1I0X0ZFVEhGREUgICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKKyNkZWZpbmUgQkNTUjRfRkVUSENGRzEgICAgICAgICAgICgodWludCkweDAwNDAwMDAwKQorI2RlZmluZSBCQ1NSNF9GRVRIUlNUICAgICAgICAgICAgKCh1aW50KTB4MDAyMDAwMDApCisKKyNpZmRlZiBDT05GSUdfTVBDODIzCisjZGVmaW5lIEJDU1I0X1VTQl9FTiAgICAgICAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKKyNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCisjaWZkZWYgQ09ORklHX01QQzg2MFNBUgorI2RlZmluZSBCQ1NSNF9VVE9QSUFfRU4gICAgICAgICAgKCh1aW50KTB4MDgwMDAwMDApCisjZW5kaWYgLyogQ09ORklHX01QQzg2MFNBUiAqLworI2lmZGVmIENPTkZJR19NUEM4NjBUCisjZGVmaW5lIEJDU1I0X0ZFVEhfRU4gICAgICAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKKyNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLworI2lmZGVmIENPTkZJR19NUEM4MjMKKyNkZWZpbmUgQkNTUjRfVVNCX1NQRUVEICAgICAgICAgICgodWludCkweDA0MDAwMDAwKQorI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KKyNpZmRlZiBDT05GSUdfTVBDODYwVAorI2RlZmluZSBCQ1NSNF9GRVRIQ0ZHMCAgICAgICAgICAgKCh1aW50KTB4MDQwMDAwMDApCisjZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KKyNpZmRlZiBDT05GSUdfTVBDODIzCisjZGVmaW5lIEJDU1I0X1ZDQ08gICAgICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKKyNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCisjaWZkZWYgQ09ORklHX01QQzg2MFQKKyNkZWZpbmUgQkNTUjRfRkVUSEZERSAgICAgICAgICAgICgodWludCkweDAyMDAwMDAwKQorI2VuZGlmIC8qIENPTkZJR19NUEM4NjBUICovCisjaWZkZWYgQ09ORklHX01QQzgyMworI2RlZmluZSBCQ1NSNF9WSURFT19PTiAgICAgICAgICAgKCh1aW50KTB4MDA4MDAwMDApCisjZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLworI2lmZGVmIENPTkZJR19NUEM4MjMKKyNkZWZpbmUgQkNTUjRfVkRPX0VLVF9DTEtfRU4gICAgICgodWludCkweDAwNDAwMDAwKQorI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KKyNpZmRlZiBDT05GSUdfTVBDODYwVAorI2RlZmluZSBCQ1NSNF9GRVRIQ0ZHMSAgICAgICAgICAgKCh1aW50KTB4MDA0MDAwMDApCisjZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KKyNpZmRlZiBDT05GSUdfTVBDODIzCisjZGVmaW5lIEJDU1I0X1ZJREVPX1JTVCAgICAgICAgICAoKHVpbnQpMHgwMDIwMDAwMCkKKyNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCisjaWZkZWYgQ09ORklHX01QQzg2MFQKKyNkZWZpbmUgQkNTUjRfRkVUSFJTVCAgICAgICAgICAgICgodWludCkweDAwMjAwMDAwKQorI2VuZGlmIC8qIENPTkZJR19NUEM4NjBUICovCisjaWZkZWYgQ09ORklHX01QQzgyMworI2RlZmluZSBCQ1NSNF9NT0RFTV9FTiAgICAgICAgICAgKCh1aW50KTB4MDAxMDAwMDApCisjZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLworI2lmZGVmIENPTkZJR19NUEM4MjMKKyNkZWZpbmUgQkNTUjRfREFUQV9WT0lDRSAgICAgICAgICgodWludCkweDAwMDgwMDAwKQorI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KKyNpZmRlZiBDT05GSUdfTVBDODUwCisjZGVmaW5lIEJDU1I0X0RBVEFfVk9JQ0UgICAgICAgICAoKHVpbnQpMHgwMDA4MDAwMCkKKyNlbmRpZiAvKiBDT05GSUdfTVBDODUwICovCisKKy8qIFdlIGRvbid0IHVzZSB0aGUgODI1OS4KKyovCisjZGVmaW5lIE5SXzgyNTlfSU5UUwkwCisKKy8qIE1hY2hpbmUgdHlwZQorKi8KKyNkZWZpbmUgX01BQ0hfOHh4IChfTUFDSF9mYWRzKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQQ01DSUEgc3R1ZmYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmICFkZWZpbmVkKENPTkZJR19NUEM4MjMpICYmICFkZWZpbmVkKENPTkZJR19NUEM4NTApCisjZGVmaW5lIFBDTUNJQV9TTE9UX0EgMQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9NRU1fQUREUgkoMHhFMDAwMDAwMCkKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9NRU1fU0laRQkoIDY0IDw8IDIwICkKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9ETUFfQUREUgkoMHhFNDAwMDAwMCkKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9ETUFfU0laRQkoIDY0IDw8IDIwICkKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9BVFRSQl9BRERSCSgweEU4MDAwMDAwKQorI2RlZmluZSBDRkdfUENNQ0lBX0FUVFJCX1NJWkUJKCA2NCA8PCAyMCApCisjZGVmaW5lIENGR19QQ01DSUFfSU9fQUREUgkoMHhFQzAwMDAwMCkKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9JT19TSVpFCSggNjQgPDwgMjAgKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJREUvQVRBIHN0dWZmCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgQ09ORklHX01BQ19QQVJUSVRJT04gICAgMQorI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTiAgICAxCisjZGVmaW5lIENPTkZJR19JU09fUEFSVElUSU9OCTEKKworI3VuZGVmCUNPTkZJR19BVEFQSQorI2RlZmluZSBDT05GSUdfSURFXzh4eF9QQ0NBUkQJMQkvKiBVc2UgSURFIHdpdGggUEMgQ2FyZCBBZGFwdGVyICovCisjdW5kZWYJQ09ORklHX0lERV84eHhfRElSRUNUCQkvKiBEaXJlY3QgSURFCSBub3Qgc3VwcG9ydGVkCSovCisjdW5kZWYJQ09ORklHX0lERV9MRUQJCQkvKiBMRUQJIGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLworI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIHJlc2V0IGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLworCisjZGVmaW5lIENGR19JREVfTUFYQlVTCQkxCS8qIG1heC4gMiBJREUgYnVzc2VzCSovCisjZGVmaW5lIENGR19JREVfTUFYREVWSUNFCShDRkdfSURFX01BWEJVUyoyKSAvKiBtYXguIDIgZHJpdmVzIHBlciBJREUgYnVzICovCisKKyNkZWZpbmUgQ0ZHX0FUQV9CQVNFX0FERFIJQ0ZHX1BDTUNJQV9NRU1fQUREUgorI2RlZmluZSBDRkdfQVRBX0lERTBfT0ZGU0VUCTB4MDAwMAorCisvKiBPZmZzZXQgZm9yIGRhdGEgSS9PCQkJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9EQVRBX09GRlNFVAkoQ0ZHX1BDTUNJQV9NRU1fU0laRSArIDB4MzIwKQorLyogT2Zmc2V0IGZvciBub3JtYWwgcmVnaXN0ZXIgYWNjZXNzZXMJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9SRUdfT0ZGU0VUCSgyICogQ0ZHX1BDTUNJQV9NRU1fU0laRSArIDB4MzIwKQorLyogT2Zmc2V0IGZvciBhbHRlcm5hdGUgcmVnaXN0ZXJzCSovCisjZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDAwMDAKKworI2RlZmluZSBDT05GSUdfRElTS19TUElOVVBfVElNRSAxMDAwMDAwCisjdW5kZWYgQ09ORklHX0RJU0tfU1BJTlVQX1RJTUUJLyogdXNpbrQgQ29tcGFjdCBGbGFzaCAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9qZmZzMi5jIGIvY29tbW9uL2NtZF9qZmZzMi5jCmluZGV4IGE1ODFlNmYuLjZlYmQ0NmYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfamZmczIuYworKysgYi9jb21tb24vY21kX2pmZnMyLmMKQEAgLTM4LDYgKzM4LDExIEBACiAKICNpbmNsdWRlIDxjcmFtZnMvY3JhbWZzX2ZzLmg+CiAKK2V4dGVybiBpbnQgY3JhbWZzX2NoZWNrIChzdHJ1Y3QgcGFydF9pbmZvICppbmZvKTsKK2V4dGVybiBpbnQgY3JhbWZzX2xvYWQgKGNoYXIgKmxvYWRvZmZzZXQsIHN0cnVjdCBwYXJ0X2luZm8gKmluZm8sIGNoYXIgKmZpbGVuYW1lKTsKK2V4dGVybiBpbnQgY3JhbWZzX2xzIChzdHJ1Y3QgcGFydF9pbmZvICppbmZvLCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gaW50IGNyYW1mc19pbmZvIChzdHJ1Y3QgcGFydF9pbmZvICppbmZvKTsKKwogc3RhdGljIGludCBwYXJ0X251bT0wOwogCiAjaWZuZGVmIENGR19KRkZTX0NVU1RPTV9QQVJUCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L2NwdS5jIGIvY3B1L21wYzh4eC9jcHUuYwppbmRleCAyZWYxMzIxLi4zNTA0NDIyIDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L2NwdS5jCisrKyBiL2NwdS9tcGM4eHgvY3B1LmMKQEAgLTQ1LDI0ICs0NSwxNiBAQAogI2lmICgoZGVmaW5lZChDT05GSUdfTVBDODZ4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTUpKSAmJiBcCiAgICAgICFkZWZpbmVkKENPTkZJR19NUEM4NjIpKQogCitzdGF0aWMgaW50IGNoZWNrX0NQVSAobG9uZyBjbG9jaywgdWludCBwdnIsIHVpbnQgaW1tcikKK3sKKwljaGFyICppZF9zdHIgPQogIyBpZiBkZWZpbmVkKENPTkZJR19NUEM4NTUpCi0jICBkZWZpbmUJSURfU1RSCSJQQzg1NSIKLSMgZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NTJUKQotIyAgZGVmaW5lCUlEX1NUUgkiUEM4NTJUIgotIyBlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1OVQpCi0jICBkZWZpbmUJSURfU1RSCSJQQzg1OVQiCi0jIGVsaWYgZGVmaW5lZChDT05GSUdfTVBDODU5RFNMKQotIyAgZGVmaW5lCUlEX1NUUgkiUEM4NTlEU0wiCisJIlBDODU1IjsKICMgZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NjBQKQotIyAgZGVmaW5lCUlEX1NUUgkiUEM4NjBQIgotIyBlbGlmIGRlZmluZWQoQ09ORklHX01QQzg2NlQpCi0jICBkZWZpbmUJSURfU1RSCSJQQzg2NlQiCisJIlBDODYwUCI7CiAjIGVsc2UKLSMgIGRlZmluZQlJRF9TVFIJIlBDODZ4IgkvKiB1bmtub3duIDg2eCBjaGlwICovCisJTlVMTDsKICMgZW5kaWYKLQotc3RhdGljIGludCBjaGVja19DUFUgKGxvbmcgY2xvY2ssIHVpbnQgcHZyLCB1aW50IGltbXIpCi17CiAJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSAoaW1tciAmIDB4RkZGRjAwMDApOwogCXVpbnQgaywgbTsKIAljaGFyIGJ1ZlszMl07CkBAIC03OCwxMiArNzAsMTIgQEAKIAlrID0gKGltbXIgPDwgMTYpIHwgKigodXNob3J0ICopICYgaW1tYXAtPmltX2NwbS5jcF9kcGFyYW1bMHhCMF0pOwogCW0gPSAwOwogCisJLyoKKwkgKiBTb21lIGJvYXJkcyB1c2Ugc29ja2V0cyBzbyBkaWZmZXJlbnQgQ1BVcyBjYW4gYmUgdXNlZC4KKwkgKiBXZSBoYXZlIHRvIGNoZWNrIGNoaXAgdmVyc2lvbiBpbiBydW4gdGltZS4KKwkgKi8KIAlzd2l0Y2ggKGspIHsKLSNpZmRlZiBDT05GSUdfTVBDODY2X2V0X2FsCi0JCS8qIE1QQzg2NlAvTVBDODY2VC9NUEM4NTlUL01QQzg1OURTTC9NUEM4NTJUICovCi0JY2FzZSAweDA4MDAwMDAzOiBwcmUgPSAnTSc7IHN1ZiA9ICIiOyBtID0gMTsgYnJlYWs7Ci0jZWxzZQotCWNhc2UgMHgwMDAyMDAwMTogcHJlID0gJ3AnOyBzdWYgPSAiIjsgYnJlYWs7CisJY2FzZSAweDAwMDIwMDAxOiBwcmUgPSAnUCc7IHN1ZiA9ICIiOyBicmVhazsKIAljYXNlIDB4MDAwMzAwMDE6IHN1ZiA9ICIiOyBicmVhazsKIAljYXNlIDB4MDAxMjAwMDM6IHN1ZiA9ICJBIjsgYnJlYWs7CiAJY2FzZSAweDAwMTMwMDAzOiBzdWYgPSAiQTMiOyBicmVhazsKQEAgLTk4LDE4ICs5MCwzOCBAQAogCWNhc2UgMHgwMDMxMDA2NTogbWlkID0gIlNSIjsgc3VmID0gIkMxIjsgbSA9IDE7IGJyZWFrOwogCWNhc2UgMHgwNTAxMDAwMDogc3VmID0gIkQzIjsgbSA9IDE7IGJyZWFrOwogCWNhc2UgMHgwNTAyMDAwMDogc3VmID0gIkQ0IjsgbSA9IDE7IGJyZWFrOwotCWNhc2UgMHgwODAwMDAwMzogc3VmID0gIiI7IG0gPSAxOyBicmVhazsKIAkJLyogdGhpcyB2YWx1ZSBpcyBub3QgZG9jdW1lbnRlZCBhbnl3aGVyZSAqLwogCWNhc2UgMHg0MDAwMDAwMDogcHJlID0gJ1AnOyBzdWYgPSAiRCI7IG0gPSAxOyBicmVhazsKLSNlbmRpZgorCQkvKiBNUEM4NjZQL01QQzg2NlQvTVBDODU5VC9NUEM4NTlEU0wvTVBDODUyVCAqLworCWNhc2UgMHgwODAwMDAwMzogcHJlID0gJ00nOyBzdWYgPSAiIjsgbSA9IDE7CisJCWlmIChpZF9zdHIgPT0gTlVMTCkKKwkJCWlkX3N0ciA9CisjIGlmIGRlZmluZWQoQ09ORklHX01QQzg1MlQpCisJCSJQQzg1MlQiOworIyBlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1OVQpCisJCSJQQzg1OVQiOworIyBlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1OURTTCkKKwkJIlBDODU5RFNMIjsKKyMgZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NjZUKQorCQkiUEM4NjZUIjsKKyMgZWxzZQorCQkiUEM4NjZ4IjsgLyogVW5rbm93biBjaGlwIGZyb20gTVBDODY2IGZhbWlseSAqLworIyBlbmRpZgorCQlicmVhazsKKwljYXNlIDB4MDkwMDAwMDA6IHByZSA9ICdNJzsgbWlkID0gc3VmID0gIiI7IG0gPSAxOworCQlpZiAoaWRfc3RyID09IE5VTEwpCisJCQlpZF9zdHIgPSAiUEM4ODUiOyAvKiA4NzAvODc1Lzg4MC84ODUgKi8KKwkJYnJlYWs7CiAKIAlkZWZhdWx0OiBzdWYgPSBOVUxMOyBicmVhazsKIAl9CiAKKwlpZiAoaWRfc3RyID09IE5VTEwpCisJCWlkX3N0ciA9ICJQQzg2eCI7CS8qIFVua25vd24gODZ4IGNoaXAgKi8KIAlpZiAoc3VmKQotCQlwcmludGYgKCIlYyIgSURfU1RSICIlc1pQbm4lcyIsIHByZSwgbWlkLCBzdWYpOworCQlwcmludGYgKCIlYyVzJXNaUG5uJXMiLCBwcmUsIGlkX3N0ciwgbWlkLCBzdWYpOwogCWVsc2UKLQkJcHJpbnRmICgidW5rbm93biBNIiBJRF9TVFIgIiAoMHglMDh4KSIsIGspOworCQlwcmludGYgKCJ1bmtub3duIE0lcyAoMHglMDh4KSIsIGlkX3N0ciwgayk7CiAKIAlwcmludGYgKCIgYXQgJXMgTUh6OiIsIHN0cm1oeiAoYnVmLCBjbG9jaykpOwogCkBAIC00NzEsMzYgKzQ4Myw0NiBAQAogLyoKICAqIEdldCB0aW1lYmFzZSBjbG9jayBmcmVxdWVuY3kgKGxpa2UgY3B1X2NsayBpbiBIeikKICAqCi0gKiBTZWUgdGFibGUgMTUtNSBwcC4gMTUtMTYsIGFuZCBTQ0NSW1JUU0VMXSBwcC4gMTUtMjcuCisgKiBTZWUgc2VjdGlvbnMgMTQuMiBhbmQgMTQuNiBvZiB0aGUgVXNlcidzIE1hbnVhbAogICovCiB1bnNpZ25lZCBsb25nIGdldF90YmNsayAodm9pZCkKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAodm9sYXRpbGUgaW1tYXBfdCAqKSBDRkdfSU1NUjsKLQl1bG9uZyBvc2NjbGssIGZhY3RvcjsKKwl1aW50IGltbXIgPSBnZXRfaW1tciAoMCk7CS8qIFJldHVybiBmdWxsIElNTVIgY29udGVudHMgKi8KKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9ICh2b2xhdGlsZSBpbW1hcF90ICopKGltbXIgJiAweEZGRkYwMDAwKTsKKwl1bG9uZyBvc2NjbGssIGZhY3RvciwgcGxsOwogCi0JaWYgKGltbXItPmltX2Nsa3JzdC5jYXJfc2NjciAmIFNDQ1JfVEJTKSB7CisJaWYgKGltbWFwLT5pbV9jbGtyc3QuY2FyX3NjY3IgJiBTQ0NSX1RCUykgewogCQlyZXR1cm4gKGdkLT5jcHVfY2xrIC8gMTYpOwogCX0KLSNkZWZpbmUgUExQUkNSX3ZhbChhKSAoKChDRkdfUExQUkNSKSAmIFBMUFJDUl8gIyMgYSAjIyBfTVNLKSA+PiBQTFBSQ1JfICMjIGEgIyMgX1NISUZUKQotI2lmZGVmIENPTkZJR19NUEM4NjZfZXRfYWwKLQkvKiAgICAgICAgICAgICAgICAgICBNRk4KLQkJICAgICBNRkkgKyAtLS0tLS0tCi0JCQkgICBNRkQgKyAxCi0JICBmYWN0b3IgPSAgLS0tLS0tLS0tLS0tLS0tLS0KLQkJICAgICAoUERGICsgMSkgKiAyXlMKLQkgKi8KIAotCWZhY3RvciA9IChQTFBSQ1JfdmFsKE1GSSkgKyBQTFBSQ1JfdmFsKE1GTikvKFBMUFJDUl92YWwoTUZEKSsxKSkvCi0JCSAoUExQUkNSX3ZhbChQREYpKzEpIC8gKDE8PFBMUFJDUl92YWwoUykpOwotI2Vsc2UKLQlmYWN0b3IgPSBQTFBSQ1JfdmFsKE1GKSsxOwotI2VuZGlmCisJcGxsID0gaW1tYXAtPmltX2Nsa3JzdC5jYXJfcGxwcmNyOworCisjZGVmaW5lIFBMUFJDUl92YWwoYSkgKChwbGwgJiBQTFBSQ1JfICMjIGEgIyMgX01TSykgPj4gUExQUkNSXyAjIyBhICMjIF9TSElGVCkKKworCS8qCisJICogRm9yIG5ld2VyIFBRMSBjaGlwcyAoTVBDODY2Lzg3eC84OHggZmFtaWxpZXMpLCBQTEwgbXVsdGlwbGljYXRpb24KKwkgKiBmYWN0b3IgaXMgY2FsY3VsYXRlZCBhcyBmb2xsb3dzOgorCSAqCisJICoJCSAgICAgTUZOCisJICoJICAgICBNRkkgKyAtLS0tLS0tCisJICoJCSAgIE1GRCArIDEKKwkgKiBmYWN0b3IgPSAgLS0tLS0tLS0tLS0tLS0tLS0KKwkgKgkgICAgIChQREYgKyAxKSAqIDJeUworCSAqCisJICogRm9yIG9sZGVyIGNoaXBzLCBpdCdzIGp1c3QgTUYgZmllbGQgb2YgUExQUkNSIHBsdXMgb25lLgorCSAqLworCWlmICgoaW1tciAmIDB4RkZGRikgPj0gTVBDOHh4X05FV19DTEspIHsgLyogTVBDODY2Lzg3eC84OHggc2VyaWVzICovCisJCWZhY3RvciA9IChQTFBSQ1JfdmFsKE1GSSkgKyBQTFBSQ1JfdmFsKE1GTikvKFBMUFJDUl92YWwoTUZEKSsxKSkvCisJCQkoUExQUkNSX3ZhbChQREYpKzEpIC8gKDE8PFBMUFJDUl92YWwoUykpOworCX0gZWxzZSB7CisJCWZhY3RvciA9IFBMUFJDUl92YWwoTUYpKzE7CisJfQogCiAJb3NjY2xrID0gZ2QtPmNwdV9jbGsgLyBmYWN0b3I7CiAKLQlpZiAoKGltbXItPmltX2Nsa3JzdC5jYXJfc2NjciAmIFNDQ1JfUlRTRUwpID09IDAgfHwgZmFjdG9yID4gMikgeworCWlmICgoaW1tYXAtPmltX2Nsa3JzdC5jYXJfc2NjciAmIFNDQ1JfUlRTRUwpID09IDAgfHwgZmFjdG9yID4gMikgewogCQlyZXR1cm4gKG9zY2NsayAvIDQpOwogCX0KIAlyZXR1cm4gKG9zY2NsayAvIDE2KTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvY3B1X2luaXQuYyBiL2NwdS9tcGM4eHgvY3B1X2luaXQuYwppbmRleCA4ZjA2ZGQxLi5jYmYyMTI2IDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzh4eC9jcHVfaW5pdC5jCkBAIC00Miw2ICs0Miw3IEBACiB7CiAjaWZuZGVmIENPTkZJR19NQlgKIAl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbXItPmltX21lbWN0bDsKKwl1bG9uZyBtZm1hc2s7CiAjZW5kaWYKIAl1bG9uZyByZWc7CiAKQEAgLTg2LDE2ICs4NywyMyBAQAogCiAJLyogSWYgQ0ZHX1BMUFJDUiAoc2V0IGluIHRoZSB2YXJpb3VzICpfY29uZmlnLmggZmlsZXMpIHRyaWVzIHRvCiAJICogc2V0IHRoZSBNRiBmaWVsZCwgdGhlbiBqdXN0IGNvcHkgQ0ZHX1BMUFJDUiBvdmVyIGNhcl9wbHByY3IsCi0JICogb3RoZXJ3aXNlIE9SIGluIENGR19QTFBSQ1Igc28gd2UgZG8gbm90IGNoYW5nZSB0aGUgY3VycmVudE1GCisJICogb3RoZXJ3aXNlIE9SIGluIENGR19QTFBSQ1Igc28gd2UgZG8gbm90IGNoYW5nZSB0aGUgY3VycmVudCBNRgogCSAqIGZpZWxkIHZhbHVlLgorCSAqCisJICogRm9yIG5ld2VyIChzdGFydGluZyBNUEM4NjYpIGNoaXBzIFBMUFJDUiBsYXlvdXQgaXMgZGlmZmVyZW50LgogCSAqLwotI2lmICgoQ0ZHX1BMUFJDUiAmIFBMUFJDUl9NRl9NU0spICE9IDApCi0JcmVnID0gQ0ZHX1BMUFJDUjsJCQkvKiByZXNldCBjb250cm9sIGJpdHMgICAqLwotI2Vsc2UKLQlyZWcgPSBpbW1yLT5pbV9jbGtyc3QuY2FyX3BscHJjcjsKLQlyZWcgJj0gUExQUkNSX01GX01TSzsJCQkvKiBpc29sYXRlIE1GIGZpZWxkICovCi0JcmVnIHw9IENGR19QTFBSQ1I7CQkJLyogcmVzZXQgY29udHJvbCBiaXRzICAgKi8KLSNlbmRpZgorCWlmIChnZXRfaW1tcigweEZGRkYpID49IE1QQzh4eF9ORVdfQ0xLKQorCSAgIG1mbWFzayA9IFBMUFJDUl9NRkFDVF9NU0s7CisJZWxzZQorCSAgIG1mbWFzayA9IFBMUFJDUl9NRl9NU0s7CisKKwlpZiAoKENGR19QTFBSQ1IgJiBtZm1hc2spICE9IDApCisJICAgcmVnID0gQ0ZHX1BMUFJDUjsJCQkvKiByZXNldCBjb250cm9sIGJpdHMgICAqLworCWVsc2UgeworCSAgIHJlZyA9IGltbXItPmltX2Nsa3JzdC5jYXJfcGxwcmNyOworCSAgIHJlZyAmPSBtZm1hc2s7CQkJLyogaXNvbGF0ZSBNRi1yZWxhdGVkIGZpZWxkcyAqLworCSAgIHJlZyB8PSBDRkdfUExQUkNSOwkJCS8qIHJlc2V0IGNvbnRyb2wgYml0cyAgICovCisJfQogCWltbXItPmltX2Nsa3JzdC5jYXJfcGxwcmNyID0gcmVnOwogCiAJLyoKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvZmVjLmMgYi9jcHUvbXBjOHh4L2ZlYy5jCmluZGV4IDZiNTc5YzkuLjgxMWFjNzkgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvZmVjLmMKKysrIGIvY3B1L21wYzh4eC9mZWMuYwpAQCAtMjE3LDggKzIxNywxMCBAQAogCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKIAl2b2xhdGlsZSBmZWNfdCAqZmVjcCA9ICYoaW1tci0+aW1fY3BtLmNwX2ZlYyk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQURTKSAmJiBcCi0JKCBkZWZpbmVkKENPTkZJR19NUEM4NjBUKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NjZfZXRfYWwpICkKKyNpZiBkZWZpbmVkKENPTkZJR19GQURTKSAvKiBGQURTIGZhbWlseSB1c2VzIEZQR0EgKEJDU1IpIHRvIGNvbnRyb2wgUEhZcyAqLworI2lmIGRlZmluZWQoQ09ORklHX0RVRVRfQURTKQorCSoodnVfY2hhciAqKUJDU1I1ICY9IH4oQkNTUjVfTUlJMV9FTiB8IEJDU1I1X01JSTFfUlNUKTsKKyNlbHNlCiAJLyogY29uZmlndXJlIEZBRFMgZm9yIGZhc3QgKEZFQykgZXRoZXJuZXQsIGhhbGYtZHVwbGV4ICovCiAJLyogVGhlIExYVDk3MCBuZWVkcyBhYm91dCA1MG1zIHRvIHJlY292ZXIgZnJvbSByZXNldCwgc28KIAkgKiB3YWl0IGZvciBpdCBieSBkaXNjb3ZlcmluZyB0aGUgUEhZIGJlZm9yZSBsZWF2aW5nIGV0aF9pbml0KCkuCkBAIC0yMzQsNyArMjM2LDggQEAKIAkJKmJjc3I0IHw9IEJDU1I0X0ZFVEhSU1Q7CiAJCXVkZWxheSAoMTApOwogCX0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19EVUVUX0FEUyAqLworI2VuZGlmIC8qIENPTkZJR19GQURTICovCiAJLyogV2hhY2sgYSByZXNldC4KIAkgKiBBIGRlbGF5IGlzIHJlcXVpcmVkIGJldHdlZW4gYSByZXNldCBvZiB0aGUgRkVDIGJsb2NrIGFuZAogCSAqIGluaXRpYWxpemF0aW9uIG9mIG90aGVyIEZFQyByZWdpc3RlcnMgYmVjYXVzZSB0aGUgcmVzZXQgdGFrZXMKQEAgLTM1MCw3ICszNTMsMjAgQEAKIAkgKi8KIAlmZWNwLT5mZWNfbWlpX3NwZWVkID0gKChiZC0+YmlfaW50ZnJlcSArIDQ5OTk5OTkpIC8gNTAwMDAwMCkgPDwgMTsKIAotI2lmICFkZWZpbmVkKENPTkZJR19JQ1U4NjIpICYmICFkZWZpbmVkKENPTkZJR19JQUQyMTApCisjaWYgZGVmaW5lZChDT05GSUdfRFVFVCkgLyogTVBDODd4Lzg4eCBoYXZlIGdvdCAyIEZFQ3MgYW5kIGRpZmZlcmVudCBwaW5vdXQgKi8KKwlpbW1yLT5pbV9pb3BvcnQuaW9wX3BhcGFyIHw9ICAweGY4MzA7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAgMHgwODMwOworCWltbXItPmltX2lvcG9ydC5pb3BfcGFkaXIgJj0gfjB4ZjAwMDsKKwlpbW1yLT5pbV9jcG0uY3BfcGJwYXIgICAgIHw9ICAweDAwMDAxMDAxOworCWltbXItPmltX2NwbS5jcF9wYmRpciAgICAgJj0gfjB4MDAwMDEwMDE7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wY3BhciB8PSAgMHgwMDBjOworCWltbXItPmltX2lvcG9ydC5pb3BfcGNkaXIgJj0gfjB4MDAwYzsKKwlpbW1yLT5pbV9pb3BvcnQuaW9wX3BkcGFyIHw9ICAweDAwODA7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wZGRpciAmPSB+MHgwMDgwOworCWltbXItPmltX2NwbS5jcF9wZXBhciAgICAgfD0gIDB4MDAwMDAwMDM7CisJaW1tci0+aW1fY3BtLmNwX3BlZGlyICAgICB8PSAgMHgwMDAwMDAwMzsKKwlpbW1yLT5pbV9jcG0uY3BfcGVzbyAgICAgICY9IH4weDAwMDAwMDAzOworI2VsaWYgIWRlZmluZWQoQ09ORklHX0lDVTg2MikgJiYgIWRlZmluZWQoQ09ORklHX0lBRDIxMCkKIAkvKiBDb25maWd1cmUgYWxsIG9mIHBvcnQgRCBmb3IgTUlJLgogCSAqLwogCWltbXItPmltX2lvcG9ydC5pb3BfcGRwYXIgPSAweDFmZmY7CkBAIC00NjUsNyArNDgxLDcgQEAKICNkZWZpbmUgUEhZX0lEX0FNRDc5Qzc4NAkweDAwMjI1NjEwCS8qIEFNRCA3OUM3ODQgKi8KICNkZWZpbmUgUEhZX0lEX0xTSTgwMjI1CQkweDAwMTZmODcwCS8qIExTSSA4MDIyNSAqLwogI2RlZmluZSBQSFlfSURfTFNJODAyMjVCCTB4MDAxNmY4ODAJLyogTFNJIDgwMjI1L0IgKi8KLQorI2RlZmluZSBQSFlfSURfRE05MTYxCQkweDAxODFCODgwCS8qIERhdmljb20gRE05MTYxICovCiAKIC8qIHNlbmQgY29tbWFuZCB0byBwaHkgdXNpbmcgbWlpLCB3YWl0IGZvciByZXN1bHQgKi8KIHN0YXRpYyB1aW50CkBAIC01NDEsNiArNTU3LDkgQEAKIAkJCQljYXNlIFBIWV9JRF9MU0k4MDIyNUI6CiAJCQkJCXByaW50ZigiTFNJIEw4MDIyNS9CXG4iKTsKIAkJCQkJYnJlYWs7CisJCQkJY2FzZSBQSFlfSURfRE05MTYxOgorCQkJCQlwcmludGYoIkRhdmljb20gRE05MTYxXG4iKTsKKwkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJcHJpbnRmKCIweCUwOHhcbiIsIHBoeXR5cGUpOwogCQkJCQlicmVhazsKQEAgLTYxNCw3ICs2MzMsMjAgQEAKIAkgKi8KIAlmZWNwLT5mZWNfbWlpX3NwZWVkID0gKChiZC0+YmlfaW50ZnJlcSArIDQ5OTk5OTkpIC8gNTAwMDAwMCkgPDwgMTsKIAotI2lmICFkZWZpbmVkKENPTkZJR19JQ1U4NjIpICYmICFkZWZpbmVkKENPTkZJR19JQUQyMTApCisjaWYgZGVmaW5lZChDT05GSUdfRFVFVCkgLyogTVBDODd4Lzg4eCBoYXZlIGdvdCAyIEZFQ3MgYW5kIGRpZmZlcmVudCBwaW5vdXQgKi8KKwlpbW1yLT5pbV9pb3BvcnQuaW9wX3BhcGFyIHw9ICAweGY4MzA7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAgMHgwODMwOworCWltbXItPmltX2lvcG9ydC5pb3BfcGFkaXIgJj0gfjB4ZjAwMDsKKwlpbW1yLT5pbV9jcG0uY3BfcGJwYXIgICAgIHw9ICAweDAwMDAxMDAxOworCWltbXItPmltX2NwbS5jcF9wYmRpciAgICAgJj0gfjB4MDAwMDEwMDE7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wY3BhciB8PSAgMHgwMDBjOworCWltbXItPmltX2lvcG9ydC5pb3BfcGNkaXIgJj0gfjB4MDAwYzsKKwlpbW1yLT5pbV9pb3BvcnQuaW9wX3BkcGFyIHw9ICAweDAwODA7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wZGRpciAmPSB+MHgwMDgwOworCWltbXItPmltX2NwbS5jcF9wZXBhciAgICAgfD0gIDB4MDAwMDAwMDM7CisJaW1tci0+aW1fY3BtLmNwX3BlZGlyICAgICB8PSAgMHgwMDAwMDAwMzsKKwlpbW1yLT5pbV9jcG0uY3BfcGVzbyAgICAgICY9IH4weDAwMDAwMDAzOworI2VsaWYgIWRlZmluZWQoQ09ORklHX0lDVTg2MikgJiYgIWRlZmluZWQoQ09ORklHX0lBRDIxMCkKIAkvKiBDb25maWd1cmUgYWxsIG9mIHBvcnQgRCBmb3IgTUlJLgogCSAqLwogCWltbXItPmltX2lvcG9ydC5pb3BfcGRwYXIgPSAweDFmZmY7CmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L2ludGVycnVwdHMuYyBiL2NwdS9tcGM4eHgvaW50ZXJydXB0cy5jCmluZGV4IDU1OGRjMDkuLjIwZTcwMTIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9tcGM4eHgvaW50ZXJydXB0cy5jCkBAIC0yNzQsMTEgKzI3NCwyMSBAQAogCS8qIFJlc2V0IFRpbWVyIEV4cGlyZWQgYW5kIFRpbWVycyBJbnRlcnJ1cHQgU3RhdHVzICovCiAJaW1tci0+aW1fY2xrcnN0ay5jYXJrX3BscHJjcmsgPSBLQVBXUl9LRVk7CiAJX19hc21fXyAoIm5vcCIpOwotI2lmZGVmIENPTkZJR19NUEM4NjZfZXRfYWwKLQlpbW1yLT5pbV9jbGtyc3QuY2FyX3BscHJjciB8PSBQTFBSQ1JfVEVYUFM7Ci0jZWxzZQotCWltbXItPmltX2Nsa3JzdC5jYXJfcGxwcmNyIHw9IFBMUFJDUl9URVhQUyB8IFBMUFJDUl9UTUlTVDsKLSNlbmRpZgorCS8qCisJICBDbGVhciBURVhQUyAoYW5kIFRNSVNUIG9uIG9sZGVyIGNoaXBzKS4gU1BMU1MgKG9uIG9sZGVyCisJICBjaGlwcykgaXMgY2xlYXJlZCB0b28uCisKKwkgIEJpdHdpc2UgT1IgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24gc28gQUxMIGJpdHMKKwkgIHdoaWNoIGFyZSBjbGVhcmVkIGJ5IHdyaXRpbmcgYDEnIHdvdWxkIGJlIGNsZWFyZWQgYnkKKwkgIG9wZXJhdGlvbnMgbGlrZQorCisJICBpbW1yLT5pbV9jbGtyc3QuY2FyX3BscHJjciB8PSBQTFBSQ1JfVEVYUFM7CisKKwkgIFRoZSBzYW1lIGNhbiBiZSBhY2hpZXZlZCBieSBzaW1wbGUgd3JpdGluZyBvZiB0aGUgUExQUkNSCisJICB0byBpdHNlbGYuIElmIGEgYml0IHZhbHVlIHNob3VsZCBiZSBwcmVzZXJ2ZWQsIHJlYWQgdGhlCisJICByZWdpc3RlciwgWkVSTyB0aGUgYml0IGFuZCB3cml0ZSwgbm90IE9SLCB0aGUgcmVzdWx0IGJhY2suCisJKi8KKwlpbW1yLT5pbV9jbGtyc3QuY2FyX3BscHJjciA9IGltbXItPmltX2Nsa3JzdC5jYXJfcGxwcmNyOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvY3B1L25pb3MvTWFrZWZpbGUgYi9jcHUvbmlvcy9NYWtlZmlsZQppbmRleCBiYWY3NTJmLi5hOWFkYmM1IDEwMDY0NAotLS0gYS9jcHUvbmlvcy9NYWtlZmlsZQorKysgYi9jcHUvbmlvcy9NYWtlZmlsZQpAQCAtMjcsNyArMjcsNyBAQAogCiBTVEFSVAk9IHN0YXJ0Lm8KIEFPQkpTCT0gdHJhcHMubwotT0JKUwk9IGNwdS5vIGludGVycnVwdHMubyBzZXJpYWwubworT0JKUwk9IGNwdS5vIGludGVycnVwdHMubyBzZXJpYWwubyBhc21pLm8KIAogYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCmRpZmYgLS1naXQgYS9jcHUvbmlvcy9hc21pLmMgYi9jcHUvbmlvcy9hc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyODYzZQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9uaW9zL2FzbWkuYwpAQCAtMCwwICsxLDY5NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMywgUHN5ZW50IENvcnBvcmF0aW9uIDx3d3cucHN5ZW50LmNvbT4KKyAqIFNjb3R0IE1jTnV0dCA8c21jbnV0dEBwc3llbnQuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmIGRlZmluZWQoQ09ORklHX05JT1NfQVNNSSkKKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8bmlvcy1pby5oPgorCisjaWYgIWRlZmluZWQoQ0ZHX05JT1NfQVNNSUJBU0UpCisjZXJyb3IgIioqKiBDRkdfTklPU19BU01JQkFTRSBub3QgZGVmaW5lZCAqKioiCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNIT1JUX0hFTFBcCisJImFzbWkgICAgLSByZWFkL3dyaXRlIEN5Y2xvbmUgQVNNSSBjb25maWd1cmF0aW9uIGRldmljZS5cbiIKKworI2RlZmluZSBMT05HX0hFTFBcCisJIlxuIlwKKwkiYXNtaSBlcmFzZSBzdGFydCBbZW5kXVxuIlwKKwkiICAgIC0gZXJhc2Ugc2VjdG9yIHN0YXJ0IG9yIHNlY3RvcnMgc3RhcnQgdGhyb3VnaCBlbmQuXG4iXAorCSJhc21pIGluZm9cbiJcCisJIiAgICAtIGRpc3BsYXkgQVNNSSBkZXZpY2UgaW5mb3JtYXRpb24uXG4iXAorCSJhc21pIHByb3RlY3Qgb24gfCBvZmZcbiJcCisJIiAgICAtIHR1cm4gZGV2aWNlIHByb3RlY3Rpb24gb24gb3Igb2ZmLlxuIlwKKwkiYXNtaSByZWFkIGFkZHIgb2Zmc2V0IGNvdW50XG4iXAorCSIgICAgLSByZWFkIGNvdW50IGJ5dGVzIGZyb20gb2Zmc2V0IHRvIGFkZHIuXG4iXAorCSJhc21pIHdyaXRlIGFkZHIgb2Zmc2V0IGNvdW50XG4iXAorCSIgICAgLSB3cml0ZSBjb3VudCBieXRlcyB0byBvZmZzZXQgZnJvbSBhZGRyLlxuIlwKKwkiYXNtaSB2ZXJpZnkgYWRkciBvZmZzZXQgY291bnRcbiJcCisJIiAgICAtIHZlcmlmeSBjb3VudCBieXRlcyBhdCBvZmZzZXQgZnJvbSBhZGRyLlxuIgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogT3BlcmF0aW9uIGNvZGVzIGZvciBzZXJpYWwgY29uZmlndXJhdGlvbiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgQVNNSV9XUklURV9FTkEJCTB4MDYJLyogV3JpdGUgZW5hYmxlICovCisjZGVmaW5lIEFTTUlfV1JJVEVfRElTCQkweDA0CS8qIFdyaXRlIGRpc2FibGUgKi8KKyNkZWZpbmUgQVNNSV9SRUFEX1NUQVQJCTB4MDUJLyogUmVhZCBzdGF0dXMgKi8KKyNkZWZpbmUgQVNNSV9SRUFEX0JZVEVTCQkweDAzCS8qIFJlYWQgYnl0ZXMgKi8KKyNkZWZpbmUgQVNNSV9SRUFEX0lECQkweGFiCS8qIFJlYWQgc2lsaWNvbiBpZCAqLworI2RlZmluZSBBU01JX1dSSVRFX1NUQVQJCTB4MDEJLyogV3JpdGUgc3RhdHVzICovCisjZGVmaW5lIEFTTUlfV1JJVEVfQllURVMJMHgwMgkvKiBXcml0ZSBieXRlcyAqLworI2RlZmluZSBBU01JX0VSQVNFX0JVTEsJCTB4YzcJLyogRXJhc2UgZW50aXJlIGRldmljZSAqLworI2RlZmluZSBBU01JX0VSQVNFX1NFQ1QJCTB4ZDgJLyogRXJhc2Ugc2VjdG9yICovCisKKy8qIERldmljZSBzdGF0dXMgcmVnaXN0ZXIgYml0cworICovCisjZGVmaW5lIEFTTUlfU1RBVFVTX1dJUAkJKDE8PDApCS8qIFdyaXRlIGluIHByb2dyZXNzICovCisjZGVmaW5lIEFTTUlfU1RBVFVTX1dFTAkJKDE8PDEpCS8qIFdyaXRlIGVuYWJsZSBsYXRjaCAqLworCitzdGF0aWMgbmlvc19hc21pX3QgKmFzbWkgPSAobmlvc19hc21pX3QgKilDRkdfTklPU19BU01JQkFTRTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXZpY2UgYWNjZXNzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBhc21pX2NzIChpbnQgYXNzZXJ0KQoreworCWlmIChhc3NlcnQpIHsKKwkJYXNtaS0+Y29udHJvbCB8PSBOSU9TX0FTTUlfU1NPOworCX0gZWxzZSB7CisJCS8qIExldCBhbGwgYml0cyBzaGlmdCBvdXQgKi8KKwkJd2hpbGUgKChhc21pLT5zdGF0dXMgJiBOSU9TX0FTTUlfVE1UKSA9PSAwKQorCQkJOworCQlhc21pLT5jb250cm9sICY9IH5OSU9TX0FTTUlfU1NPOworCX0KK30KKworc3RhdGljIHZvaWQgYXNtaV90eCAodW5zaWduZWQgY2hhciBjKQoreworCXdoaWxlICgoYXNtaS0+c3RhdHVzICYgTklPU19BU01JX1RSRFkpID09IDApCisJCTsKKwlhc21pLT50eGRhdGEgPSBjOworfQorCitzdGF0aWMgaW50IGFzbWlfcnggKHZvaWQpCit7CisJd2hpbGUgKChhc21pLT5zdGF0dXMgJiBOSU9TX0FTTUlfUlJEWSkgPT0gMCkKKwkJOworCXJldHVybiAoYXNtaS0+cnhkYXRhKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYml0cmV2W10gPSB7CisJMHgwMCwgMHgwOCwgMHgwNCwgMHgwYywgMHgwMiwgMHgwYSwgMHgwNiwgMHgwZSwKKwkweDAxLCAweDA5LCAweDA1LCAweDBkLCAweDAzLCAweDBiLCAweDA3LCAweDBmCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc21pX2JpdHJldiggdW5zaWduZWQgY2hhciBjICkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCXZhbCAgPSBiaXRyZXZbYz4+NF07CisJdmFsIHw9IGJpdHJldltjICYgMHgwZl08PDQ7CisJcmV0dXJuICh2YWwpOworfQorCitzdGF0aWMgdm9pZCBhc21pX3JjdiAodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuKQoreworCXdoaWxlIChsZW4tLSkgeworCQlhc21pX3R4ICgwKTsKKwkJKmRzdCsrID0gYXNtaV9yeCAoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFzbWlfcnJjdiAodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuKQoreworCXdoaWxlIChsZW4tLSkgeworCQlhc21pX3R4ICgwKTsKKwkJKmRzdCsrID0gYXNtaV9iaXRyZXYgKGFzbWlfcnggKCkpOworCX0KK30KKworc3RhdGljIHZvaWQgYXNtaV9zbmQgKHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IGxlbikKK3sKKwl3aGlsZSAobGVuLS0pIHsKKwkJYXNtaV90eCAoKnNyYysrKTsKKwkJYXNtaV9yeCAoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFzbWlfcnNuZCAodW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQoreworCXdoaWxlIChsZW4tLSkgeworCQlhc21pX3R4IChhc21pX2JpdHJldiAoKnNyYysrKSk7CisJCWFzbWlfcnggKCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhc21pX3dyX2VuYWJsZSAodm9pZCkKK3sKKwlhc21pX2NzICgxKTsKKwlhc21pX3R4IChBU01JX1dSSVRFX0VOQSk7CisJYXNtaV9yeCAoKTsKKwlhc21pX2NzICgwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNtaV9zdGF0dXNfcmQgKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisKKwlhc21pX2NzICgxKTsKKwlhc21pX3R4IChBU01JX1JFQURfU1RBVCk7CisJYXNtaV9yeCAoKTsKKwlhc21pX3R4ICgwKTsKKwlzdGF0dXMgPSBhc21pX3J4ICgpOworCWFzbWlfY3MgKDApOworCXJldHVybiAoc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgYXNtaV9zdGF0dXNfd3IgKHVuc2lnbmVkIGNoYXIgc3RhdHVzKQoreworCWFzbWlfd3JfZW5hYmxlICgpOworCWFzbWlfY3MgKDEpOworCWFzbWlfdHggKEFTTUlfV1JJVEVfU1RBVCk7CisJYXNtaV9yeCAoKTsKKwlhc21pX3R4IChzdGF0dXMpOworCWFzbWlfcnggKCk7CisJYXNtaV9jcyAoMCk7CisJcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERldmljZSBpbmZvcm1hdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgYXNtaV9kZXZpbmZvX3QgeworCWNvbnN0IGNoYXIgCSpuYW1lOwkJLyogRGV2aWNlIG5hbWUgKi8KKwl1bnNpZ25lZCBjaGFyCWlkOwkJLyogRGV2aWNlIHNpbGljb24gaWQgKi8KKwl1bnNpZ25lZCBjaGFyCXNpemU7CQkvKiBUb3RhbCBzaXplIGxvZzIoYnl0ZXMpKi8KKwl1bnNpZ25lZCBjaGFyCW51bV9zZWN0czsJLyogTnVtYmVyIG9mIHNlY3RvcnMgKi8KKwl1bnNpZ25lZCBjaGFyCXN6X3NlY3Q7CS8qIFNlY3RvciBzaXplIGxvZzIoYnl0ZXMpICovCisJdW5zaWduZWQgY2hhcglzel9wYWdlOwkvKiBQYWdlIHNpemUgbG9nMihieXRlcykgKi8KKwl1bnNpZ25lZCBjaGFyICAgcHJvdF9tYXNrOwkvKiBQcm90ZWN0aW9uIG1hc2sgKi8KK31hc21pX2RldmluZm9fdDsKKworc3RhdGljIHN0cnVjdCBhc21pX2RldmluZm9fdCBkZXZpbmZvW10gPSB7CisJeyAiRVBDUzEgIiwgMHgxMCwgMTcsIDQsIDE1LCA4LCAweDBjIH0sCisJeyAiRVBDUzQgIiwgMHgxMiwgMTksIDgsIDE2LCA4LCAweDFjIH0sCisJeyAwLCAwLCAwLCAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBhc21pX2RldmluZm9fdCAqYXNtaV9kZXZfZmluZCAodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKwl1bnNpZ25lZCBjaGFyIGlkOworCWludCBpOworCXN0cnVjdCBhc21pX2RldmluZm9fdCAqZGV2ID0gTlVMTDsKKworCS8qIFJlYWQgc2lsaWNvbiBpZCByZXF1aXJlcyAzICJkdW1teSBieXRlcyIgYmVmb3JlIGl0J3MgcHV0CisJICogb24gdGhlIHdpcmUuCisJICovCisJYnVmWzBdID0gQVNNSV9SRUFEX0lEOworCWJ1ZlsxXSA9IDA7CisJYnVmWzJdID0gMDsKKwlidWZbM10gPSAwOworCisJYXNtaV9jcyAoMSk7CisJYXNtaV9zbmQgKGJ1Ziw0KTsKKwlhc21pX3JjdiAoYnVmLDEpOworCWFzbWlfY3MgKDApOworCWlkID0gYnVmWzBdOworCisJLyogRmluZCB0aGUgaW5mbyBzdHJ1Y3QgKi8KKwlpID0gMDsKKwl3aGlsZSAoZGV2aW5mb1tpXS5uYW1lKSB7CisJCWlmIChpZCA9PSBkZXZpbmZvW2ldLmlkKSB7CisJCQlkZXYgPSAmZGV2aW5mb1tpXTsKKwkJCWJyZWFrOworCQl9CisJCWkrKzsKKwl9CisKKwlyZXR1cm4gKGRldik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWlzYyBVdGlsaXRpZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBhc21pX2NmZ3N6ICh2b2lkKQoreworCXVuc2lnbmVkIHN6ID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwkvKiBSZWFkIGluIHRoZSBmaXJzdCAxMjggYnl0ZXMgb2YgdGhlIGRldmljZSAqLworCWJ1ZlswXSA9IEFTTUlfUkVBRF9CWVRFUzsKKwlidWZbMV0gPSAwOworCWJ1ZlsyXSA9IDA7CisJYnVmWzNdID0gMDsKKworCWFzbWlfY3MgKDEpOworCWFzbWlfc25kIChidWYsNCk7CisJYXNtaV9ycmN2IChidWYsIHNpemVvZihidWYpKTsKKwlhc21pX2NzICgwKTsKKworCS8qIFNlYXJjaCBmb3IgdGhlIHN0YXJ0aW5nIDB4NmEgd2hpY2ggaXMgZm9sbG93ZWQgYnkgdGhlCisJICogNC1ieXRlICdyZWdpc3RlcicgYW5kIDQtYnl0ZSBiaXQtY291bnQuCisJICovCisJcCA9IGJ1ZjsKKwl3aGlsZSAocCA8IGJ1ZiArIHNpemVvZihidWYpLTgpIHsKKwkJaWYgKCAqcCA9PSAweDZhICkgeworCQkJLyogUG9pbnQgdG8gYml0IGNvdW50IGFuZCBleHRyYWN0ICovCisJCQlwICs9IDU7CisJCQlzeiA9ICpwKys7CisJCQlzeiB8PSAqcCsrIDw8IDg7CisJCQlzeiB8PSAqcCsrIDw8IDE2OworCQkJc3ogfD0gKnArKyA8PCAyNDsKKwkJCS8qIENvbnZlcnQgdG8gYnl0ZSBjb3VudCAqLworCQkJc3ogKz0gNzsKKwkJCXN6ID4+PSAzOworCQl9IGVsc2UgaWYgKCpwID09IDB4ZmYpIHsKKwkJCS8qIDB4ZmYgaXMgb2sgLi4uIGp1c3Qgc2tpcCAqLworCQkJcCsrOworCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQkvKiBOb3QgMHhmZiBvciAweDZhIC4uLiBzb21ldGhpbmcncyBub3QKKwkJCSAqIHJpZ2h0IC4uLiByZXBvcnQgJ3Vua25vd24nIChzej0wKS4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIChzeik7Cit9CisKK3N0YXRpYyBpbnQgYXNtaV9lcmFzZSAodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKwl1bnNpZ25lZCBvZmYsIHNlY3RzejsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKwlzdHJ1Y3QgYXNtaV9kZXZpbmZvX3QgKmRldiA9IGFzbWlfZGV2X2ZpbmQgKCk7CisKKwlpZiAoIWRldiB8fCAoc3RhcnQ+ZW5kKSkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBFcmFzZSB0aGUgcmVxdWVzdGVkIHNlY3RvcnMuIEFuIGFkZHJlc3MgaXMgcmVxdWlyZWQKKwkgKiB0aGF0IGxpZXMgd2l0aGluIHRoZSByZXF1ZXN0ZWQgc2VjdG9yIC0tIHdlJ2xsIGp1c3QKKwkgKiB1c2UgdGhlIGZpcnN0IGFkZHJlc3MgaW4gdGhlIHNlY3Rvci4KKwkgKi8KKwlwcmludGYgKCJhc21pIGVyYXNpbmcgc2VjdG9yICVkICIsIHN0YXJ0KTsKKwlpZiAoc3RhcnQgIT0gZW5kKQorCQlwcmludGYgKCJ0byAlZCAiLCBlbmQpOworCXNlY3RzeiA9ICgxIDw8IGRldi0+c3pfc2VjdCk7CisJd2hpbGUgKHN0YXJ0IDw9IGVuZCkgeworCQlvZmYgPSBzdGFydCAqIHNlY3RzejsKKwkJc3RhcnQrKzsKKworCQlidWZbMF0gPSBBU01JX0VSQVNFX1NFQ1Q7CisJCWJ1ZlsxXSA9IG9mZiA+PiAxNjsKKwkJYnVmWzJdID0gb2ZmID4+IDg7CisJCWJ1ZlszXSA9IG9mZjsKKworCQlhc21pX3dyX2VuYWJsZSAoKTsKKwkJYXNtaV9jcyAoMSk7CisJCWFzbWlfc25kIChidWYsNCk7CisJCWFzbWlfY3MgKDApOworCisJCXByaW50ZiAoIi4iKTsgLyogU29tZSB1c2VyIGZlZWRiYWNrICovCisKKwkJLyogV2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi8KKwkJd2hpbGUgKGFzbWlfc3RhdHVzX3JkKCkgJiBBU01JX1NUQVRVU19XSVApCisJCQk7CisJfQorCXByaW50ZiAoIiBkb25lLlxuIik7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludCBhc21pX3JlYWQgKHVsb25nIGFkZHIsIHVsb25nIG9mZiwgdWxvbmcgY250KQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzRdOworCisJYnVmWzBdID0gQVNNSV9SRUFEX0JZVEVTOworCWJ1ZlsxXSA9IG9mZiA+PiAxNjsKKwlidWZbMl0gPSBvZmYgPj4gODsKKwlidWZbM10gPSBvZmY7CisKKwlhc21pX2NzICgxKTsKKwlhc21pX3NuZCAoYnVmLDQpOworCWFzbWlfcnJjdiAoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCBjbnQpOworCWFzbWlfY3MgKDApOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljCitpbnQgYXNtaV93cml0ZSAodWxvbmcgYWRkciwgdWxvbmcgb2ZmLCB1bG9uZyBjbnQpCit7CisJdWxvbmcgd3JjbnQ7CisJdW5zaWduZWQgcGdzejsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKwlzdHJ1Y3QgYXNtaV9kZXZpbmZvX3QgKmRldiA9IGFzbWlfZGV2X2ZpbmQgKCk7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuICgtMSk7CisKKwlwZ3N6ID0gKDE8PGRldi0+c3pfcGFnZSk7CisJd2hpbGUgKGNudCkgeworCQlpZiAob2ZmICUgcGdzeikKKwkJCXdyY250ID0gcGdzeiAtIChvZmYgJSBwZ3N6KTsKKwkJZWxzZQorCQkJd3JjbnQgPSBwZ3N6OworCQl3cmNudCA9ICh3cmNudCA+IGNudCkgPyBjbnQgOiB3cmNudDsKKworCQlidWZbMF0gPSBBU01JX1dSSVRFX0JZVEVTOworCQlidWZbMV0gPSBvZmYgPj4gMTY7CisJCWJ1ZlsyXSA9IG9mZiA+PiA4OworCQlidWZbM10gPSBvZmY7CisKKwkJYXNtaV93cl9lbmFibGUgKCk7CisJCWFzbWlfY3MgKDEpOworCQlhc21pX3NuZCAoYnVmLDQpOworCQlhc21pX3JzbmQgKCh1bnNpZ25lZCBjaGFyICopYWRkciwgd3JjbnQpOworCQlhc21pX2NzICgwKTsKKworCQkvKiBXYWl0IGZvciB3cml0ZSB0byBjb21wbGV0ZSAqLworCQl3aGlsZSAoYXNtaV9zdGF0dXNfcmQoKSAmIEFTTUlfU1RBVFVTX1dJUCkKKwkJCTsKKworCQljbnQgLT0gd3JjbnQ7CisJCW9mZiArPSB3cmNudDsKKwkJYWRkciArPSB3cmNudDsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMKK2ludCBhc21pX3ZlcmlmeSAodWxvbmcgYWRkciwgdWxvbmcgb2ZmLCB1bG9uZyBjbnQsIHVsb25nICplcnIpCit7CisJdWxvbmcgcmRjbnQ7CisJdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKwl1bnNpZ25lZCBjaGFyICpzdGFydCwqZW5kOworCWludCBpOworCisJc3RhcnQgPSBlbmQgPSAodW5zaWduZWQgY2hhciAqKWFkZHI7CisJd2hpbGUgKGNudCkgeworCQlyZGNudCA9IChjbnQ+c2l6ZW9mKGJ1ZikpID8gc2l6ZW9mKGJ1ZikgOiBjbnQ7CisJCWFzbWlfcmVhZCAoKHVsb25nKWJ1Ziwgb2ZmLCByZGNudCk7CisJCWZvciAoaT0wOyBpPHJkY250OyBpKyspIHsKKwkJCWlmICgqZW5kICE9IGJ1ZltpXSkgeworCQkJCSplcnIgPSBlbmQgLSBzdGFydDsKKwkJCQlyZXR1cm4oLTEpOworCQkJfQorCQkJZW5kKys7CisJCX0KKwkJY250IC09IHJkY250OworCQlvZmYgKz0gcmRjbnQ7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgYXNtaV9zZWN0X2VyYXNlZCAoaW50IHNlY3QsIHVuc2lnbmVkICpvZmZzZXQsCisJCXN0cnVjdCBhc21pX2RldmluZm9fdCAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzEyOF07CisJdW5zaWduZWQgb2ZmLCBlbmQ7CisJdW5zaWduZWQgc2VjdHN6OworCWludCBpOworCisJc2VjdHN6ID0gKDEgPDwgZGV2LT5zel9zZWN0KTsKKwlvZmYgPSBzZWN0c3ogKiBzZWN0OworCWVuZCA9IG9mZiArIHNlY3RzejsKKworCXdoaWxlIChvZmYgPCBlbmQpIHsKKwkJYXNtaV9yZWFkICgodWxvbmcpYnVmLCBvZmYsIHNpemVvZihidWYpKTsKKwkJZm9yIChpPTA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKSB7CisJCQlpZiAoYnVmW2ldICE9IDB4ZmYpIHsKKwkJCQkqb2Zmc2V0ID0gb2ZmICsgaTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJCW9mZiArPSBzaXplb2YoYnVmKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbW1hbmRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMKK3ZvaWQgZG9fYXNtaV9pbmZvIChzdHJ1Y3QgYXNtaV9kZXZpbmZvX3QgKmRldiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIHN0YXQ7CisJdW5zaWduZWQgdG1wOworCWludCBlcmFzZWQ7CisKKwkvKiBCYXNpYyBkZXZpY2UgaW5mbyAqLworCXByaW50ZiAoIiVzOiAlZCBrYnl0ZXMgKCVkIHNlY3RvcnMgeCAlZCBrYnl0ZXMsIgorCQkiICVkIGJ5dGVzL3BhZ2UpXG4iLAorCQlkZXYtPm5hbWUsIDEgPDwgKGRldi0+c2l6ZS0xMCksCisJCWRldi0+bnVtX3NlY3RzLCAxIDw8IChkZXYtPnN6X3NlY3QtMTApLAorCQkxIDw8IGRldi0+c3pfcGFnZSApOworCisJLyogU3RhdHVzIC0tIGZvciBub3cgcHJvdGVjdGlvbiBpcyBhbGwtb3Itbm90aGluZyAqLworCXN0YXQgPSBhc21pX3N0YXR1c19yZCgpOworCXByaW50ZiAoInN0YXR1czogMHglMDJ4IChXSVA6JWQsIFdFTDolZCwgUFJPVDolcylcbiIsCisJCXN0YXQsCisJCShzdGF0ICYgQVNNSV9TVEFUVVNfV0lQKSA/IDEgOiAwLAorCSAgICAgICAgKHN0YXQgJiBBU01JX1NUQVRVU19XRUwpID8gMSA6IDAsCisJCShzdGF0ICYgZGV2LT5wcm90X21hc2spID8gIm9uIiA6ICJvZmYiICk7CisKKwkvKiBDb25maWd1cmF0aW9uICAqLworCXRtcCA9IGFzbWlfY2Znc3ogKCk7CisJaWYgKHRtcCkgeworCQlwcmludGYgKCJjb25maWc6IDB4JTA2eCAoJWQpIGJ5dGVzXG4iLCB0bXAsIHRtcCApOworCX0gZWxzZSB7CisJCXByaW50ZiAoImNvbmZpZzogdW5rbm93blxuIiApOworCX0KKworCS8qIFNlY3RvciBpbmZvICovCisJZm9yIChpPTA7IGk8ZGV2LT5udW1fc2VjdHM7IGkrKykgeworCQllcmFzZWQgPSBhc21pX3NlY3RfZXJhc2VkIChpLCAmdG1wLCBkZXYpOworCQlwcmludGYgKCIgICAgICVkOiAlMDZ4ICIsCisJCQlpLCBpKigxPDxkZXYtPnN6X3NlY3QpICk7CisJCWlmIChlcmFzZWQpCisJCQlwcmludGYgKCJlcmFzZWRcbiIpOworCQllbHNlCisJCQlwcmludGYgKCJkYXRhIEAgMHglMDZ4XG4iLCB0bXApOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljCit2b2lkIGRvX2FzbWlfZXJhc2UgKHN0cnVjdCBhc21pX2RldmluZm9fdCAqZGV2LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIHN0YXJ0LGVuZDsKKworCWlmICgoYXJnYyA8IDMpIHx8IChhcmdjID4gNCkpIHsKKwkJcHJpbnRmICgiVVNBR0U6IGFzbWkgZXJhc2Ugc2VjdCBbZW5kXVxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKChhc21pX3N0YXR1c19yZCgpICYgZGV2LT5wcm90X21hc2spICE9IDApIHsKKwkJcHJpbnRmICggImFzbWk6IGRldmljZSBwcm90ZWN0ZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0YXJ0ID0gc2ltcGxlX3N0cnRvdWwgKGFyZ3ZbMl0sIE5VTEwsIDEwKTsKKwlpZiAoYXJnYyA+IDMpCisJCWVuZCA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzNdLCBOVUxMLCAxMCk7CisJZWxzZQorCQllbmQgPSBzdGFydDsKKwlpZiAoKHN0YXJ0ID49IGRldi0+bnVtX3NlY3RzKSB8fCAoc3RhcnQgPiBlbmQpKSB7CisJCXByaW50ZiAoImFzbWk6IGludmFsaWQgc2VjdG9yIHJhbmdlOiBbJWQ6JWRdXG4iLAorCQkJc3RhcnQsIGVuZCApOworCQlyZXR1cm47CisJfQorCisJYXNtaV9lcmFzZSAoc3RhcnQsIGVuZCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYwordm9pZCBkb19hc21pX3Byb3RlY3QgKHN0cnVjdCBhc21pX2RldmluZm9fdCAqZGV2LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdDsKKworCS8qIEZvciBub3cgcHJvdGVjdGlvbiBpcyBhbGwtb3Itbm90aGluZyB0byBrZWVwIHRoaW5ncworCSAqIHNpbXBsZS4gVGhlIHByb3RlY3Rpb24gYml0cyBkb24ndCBtYXAgaW4gYSBsaW5lYXIKKwkgKiBmYXNoaW9uIC4uLiBhbmQgd2Ugd291bGQgcmF0aGVyIHByb3RlY3QgdGhlIGJvdHRvbQorCSAqIG9mIHRoZSBkZXZpY2Ugc2luY2UgaXQgY29udGFpbnMgdGhlIGNvbmZpZyBkYXRhIGFuZAorCSAqIGxlYXZlIHRoZSB0b3AgdW5wcm90ZWN0ZWQgZm9yIGFwcCB1c2UuIEJ1dCB1bmZvcnR1bmF0ZWx5CisJICogcHJvdGVjdGlvbiB3b3JrcyBmcm9tIHRvcC10by1ib3R0b20gc28gaXQgZG9lcworCSAqIHJlYWxseSBoZWxwIHZlcnkgbXVjaCBmcm9tIGEgc29mdHdhcmUgYXBwIHBvaW50LW9mLXZpZXcuCisJICovCisJaWYgKGFyZ2MgPCAzKSB7CisJCXByaW50ZiAoIlVTQUdFOiBhc21pIHByb3RlY3Qgb24gfCBvZmZcbiIpOworCQlyZXR1cm47CisJfQorCWlmICghZGV2KQorCQlyZXR1cm47CisKKwkvKiBQcm90ZWN0aW9uIG9uL29mZiBpcyBqdXN0IGEgbWF0dGVyIG9mIHNldHRpbmcvY2xlYXJpbmcKKwkgKiBhbGwgcHJvdGVjdGlvbiBiaXRzIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIuCisJICovCisJc3RhdCA9IGFzbWlfc3RhdHVzX3JkICgpOworCWlmIChzdHJjbXAgKCJvbiIsIGFyZ3ZbMl0pID09IDApIHsKKwkJc3RhdCB8PSBkZXYtPnByb3RfbWFzazsKKwl9IGVsc2UgaWYgKHN0cmNtcCAoIm9mZiIsIGFyZ3ZbMl0pID09IDAgKSB7CisJCXN0YXQgJj0gfmRldi0+cHJvdF9tYXNrOworCX0gZWxzZSB7CisJCXByaW50ZiAoImFzbWk6IHVua25vd24gcHJvdGVjdGlvbjogJXNcbiIsIGFyZ3ZbMl0pOworCQlyZXR1cm47CisJfQorCWFzbWlfc3RhdHVzX3dyIChzdGF0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYwordm9pZCBkb19hc21pX3JlYWQgKHN0cnVjdCBhc21pX2RldmluZm9fdCAqZGV2LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVsb25nIGFkZHIsb2ZmLGNudDsKKwl1bG9uZyBzejsKKworCWlmIChhcmdjIDwgNSkgeworCQlwcmludGYgKCJVU0FHRTogYXNtaSByZWFkIGFkZHIgb2Zmc2V0IGNvdW50XG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN6ID0gMSA8PCBkZXYtPnNpemU7CisJYWRkciA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzJdLCBOVUxMLCAxNik7CisJb2ZmICA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzNdLCBOVUxMLCAxNik7CisJY250ICA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzRdLCBOVUxMLCAxNik7CisJaWYgKG9mZiA+IHN6KSB7CisJCXByaW50ZiAoIm9mZnNldCBpcyBncmVhdGVyIHRoYW4gZGV2aWNlIHNpemUiCisJCQkiLi4uIGFib3J0aW5nLlxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKChvZmYgKyBjbnQpID4gc3opIHsKKwkJcHJpbnRmICgicmVxdWVzdCBleGNlZWRzIGRldmljZSBzaXplIgorCQkJIi4uLiB0cnVuY2F0aW5nLlxuIik7CisJCWNudCA9IHN6IC0gb2ZmOworCX0KKwlwcmludGYgKCJhc21pOiByZWFkICUwOGx4IDwtICUwNmx4ICgweCVseCBieXRlcylcbiIsCisJCQlhZGRyLCBvZmYsIGNudCk7CisJYXNtaV9yZWFkIChhZGRyLCBvZmYsIGNudCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYwordm9pZCBkb19hc21pX3dyaXRlIChzdHJ1Y3QgYXNtaV9kZXZpbmZvX3QgKmRldiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bG9uZyBhZGRyLG9mZixjbnQ7CisJdWxvbmcgc3o7CisJdWxvbmcgZXJyOworCisJaWYgKGFyZ2MgPCA1KSB7CisJCXByaW50ZiAoIlVTQUdFOiBhc21pIHdyaXRlIGFkZHIgb2Zmc2V0IGNvdW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKGFzbWlfc3RhdHVzX3JkKCkgJiBkZXYtPnByb3RfbWFzaykgIT0gMCkgeworCQlwcmludGYgKCAiYXNtaTogZGV2aWNlIHByb3RlY3RlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJc3ogPSAxIDw8IGRldi0+c2l6ZTsKKwlhZGRyID0gc2ltcGxlX3N0cnRvdWwgKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwlvZmYgID0gc2ltcGxlX3N0cnRvdWwgKGFyZ3ZbM10sIE5VTEwsIDE2KTsKKwljbnQgID0gc2ltcGxlX3N0cnRvdWwgKGFyZ3ZbNF0sIE5VTEwsIDE2KTsKKwlpZiAob2ZmID4gc3opIHsKKwkJcHJpbnRmICgib2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiBkZXZpY2Ugc2l6ZSIKKwkJCSIuLi4gYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKG9mZiArIGNudCkgPiBzeikgeworCQlwcmludGYgKCJyZXF1ZXN0IGV4Y2VlZHMgZGV2aWNlIHNpemUiCisJCQkiLi4uIHRydW5jYXRpbmcuXG4iKTsKKwkJY250ID0gc3ogLSBvZmY7CisJfQorCXByaW50ZiAoImFzbWk6IHdyaXRlICUwOGx4IC0+ICUwNmx4ICgweCVseCBieXRlcylcbiIsCisJCQlhZGRyLCBvZmYsIGNudCk7CisJYXNtaV93cml0ZSAoYWRkciwgb2ZmLCBjbnQpOworCWlmIChhc21pX3ZlcmlmeSAoYWRkciwgb2ZmLCBjbnQsICZlcnIpICE9IDApCisJCXByaW50ZiAoImFzbWk6IHdyaXRlIGVycm9yIGF0IG9mZnNldCAlMDZseFxuIiwgZXJyKTsKKworCXJldHVybjsKK30KKworc3RhdGljCit2b2lkIGRvX2FzbWlfdmVyaWZ5IChzdHJ1Y3QgYXNtaV9kZXZpbmZvX3QgKmRldiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bG9uZyBhZGRyLG9mZixjbnQ7CisJdWxvbmcgc3o7CisJdWxvbmcgZXJyOworCisJaWYgKGFyZ2MgPCA1KSB7CisJCXByaW50ZiAoIlVTQUdFOiBhc21pIHZlcmlmeSBhZGRyIG9mZnNldCBjb3VudFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzeiA9IDEgPDwgZGV2LT5zaXplOworCWFkZHIgPSBzaW1wbGVfc3RydG91bCAoYXJndlsyXSwgTlVMTCwgMTYpOworCW9mZiAgPSBzaW1wbGVfc3RydG91bCAoYXJndlszXSwgTlVMTCwgMTYpOworCWNudCAgPSBzaW1wbGVfc3RydG91bCAoYXJndls0XSwgTlVMTCwgMTYpOworCWlmIChvZmYgPiBzeikgeworCQlwcmludGYgKCJvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIGRldmljZSBzaXplIgorCQkJIi4uLiBhYm9ydGluZy5cbiIpOworCQlyZXR1cm47CisJfQorCWlmICgob2ZmICsgY250KSA+IHN6KSB7CisJCXByaW50ZiAoInJlcXVlc3QgZXhjZWVkcyBkZXZpY2Ugc2l6ZSIKKwkJCSIuLi4gdHJ1bmNhdGluZy5cbiIpOworCQljbnQgPSBzeiAtIG9mZjsKKwl9CisJcHJpbnRmICgiYXNtaTogdmVyaWZ5ICUwOGx4IC0+ICUwNmx4ICgweCVseCBieXRlcylcbiIsCisJCQlhZGRyLCBvZmYsIGNudCk7CisJaWYgKGFzbWlfdmVyaWZ5IChhZGRyLCBvZmYsIGNudCwgJmVycikgIT0gMCkKKwkJcHJpbnRmICgiYXNtaTogdmVyaWZ5IGVycm9yIGF0IG9mZnNldCAlMDZseFxuIiwgZXJyKTsKKworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgZG9fYXNtaSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgYXNtaV9kZXZpbmZvX3QgKmRldiA9IGFzbWlfZGV2X2ZpbmQgKCk7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmICgiVXNhZ2U6JXMiLCBMT05HX0hFTFApOworCQlyZXR1cm4gKDApOworCX0KKworCWlmICghZGV2KSB7CisJCXByaW50ZiAoImFzbWk6IGRldmljZSBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlsZW4gPSBzdHJsZW4gKGFyZ3ZbMV0pOworCWlmIChzdHJuY21wICgiaW5mbyIsIGFyZ3ZbMV0sIGxlbikgPT0gMCkgeworCQlkb19hc21pX2luZm8gKCBkZXYsIGFyZ2MsIGFyZ3YpOworCX0gZWxzZSBpZiAoc3RybmNtcCAoImVyYXNlIiwgYXJndlsxXSwgbGVuKSA9PSAwKSB7CisJCWRvX2FzbWlfZXJhc2UgKGRldiwgYXJnYywgYXJndik7CisJfSBlbHNlIGlmIChzdHJuY21wICgicHJvdGVjdCIsIGFyZ3ZbMV0sIGxlbikgPT0gMCkgeworCQlkb19hc21pX3Byb3RlY3QgKGRldiwgYXJnYywgYXJndik7CisJfSBlbHNlIGlmIChzdHJuY21wICgicmVhZCIsIGFyZ3ZbMV0sIGxlbikgPT0gMCkgeworCQlkb19hc21pX3JlYWQgKGRldiwgYXJnYywgYXJndik7CisJfSBlbHNlIGlmIChzdHJuY21wICgid3JpdGUiLCBhcmd2WzFdLCBsZW4pID09IDApIHsKKwkJZG9fYXNtaV93cml0ZSAoZGV2LCBhcmdjLCBhcmd2KTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAgKCJ2ZXJpZnkiLCBhcmd2WzFdLCBsZW4pID09IDApIHsKKwkJZG9fYXNtaV92ZXJpZnkgKGRldiwgYXJnYywgYXJndik7CisJfSBlbHNlIHsKKwkJcHJpbnRmICgiYXNtaTogdW5rbm93biBvcGVyYXRpb246ICVzXG4iLCBhcmd2WzFdKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCitVX0JPT1RfQ01EKCBhc21pLCA1LCAwLCBkb19hc21pLCBTSE9SVF9IRUxQLCBMT05HX0hFTFAgKTsKKworI2VuZGlmIC8qIENPTkZJR19OSU9TX0FTTUkgKi8KZGlmZiAtLWdpdCBhL2NwdS9uaW9zL2NwdS5jIGIvY3B1L25pb3MvY3B1LmMKaW5kZXggNWNmMTg4My4uZDJiYjJjMCAxMDA2NDQKLS0tIGEvY3B1L25pb3MvY3B1LmMKKysrIGIvY3B1L25pb3MvY3B1LmMKQEAgLTM3LDggKzM3LDggQEAKIAlwcmludGYgKCJDUFU6ICIpOwogCXByaW50ZiAoIiVzIiwgKHZhbCAmIDB4MDAwMDgwMDApID8gIk5pb3MtMTYgIiA6ICJOaW9zLTMyICIpOwogCXJldl9tYWpvciA9ICh2YWw+PjEyKSAmIDB4MDc7Ci0JcmV2X21pbm9yID0gdmFsICYgMHgwZjsKLQlwcmludGYgKCJSZXYuICVkLiUwMmQgKDB4JTA0eCkiLCByZXZfbWFqb3IsIHJldl9taW5vciwKKwlyZXZfbWlub3IgPSAodmFsPj40KSAmIDB4MGZmOworCXByaW50ZiAoIlJldi4gJWQuJWQgKDB4JTA0eCkiLCByZXZfbWFqb3IsIHJldl9taW5vciwKIAkJCXZhbCAmIDB4ZmZmZik7CiAJaWYgKHJldl9tYWpvciA9PSAweDA4KQogCQlwcmludGYgKCIgW09wZW5Db3JlIChSKSBQbHVzXSIpOwpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5kazFjMjAgYi9kb2MvUkVBRE1FLmRrMWMyMAppbmRleCBiM2E2YjhiLi5iZjNiNjk5IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLmRrMWMyMAorKysgYi9kb2MvUkVBRE1FLmRrMWMyMApAQCAtMiw3ICsyLDcgQEAKIAkJCSBOaW9zIERldmVsb3BtZW50IEtpdAogCQkJICAgQ3ljbG9uZSBFZGl0aW9ucwogCi0JCSAgICBMYXN0IFVwZGF0ZTogT2N0b2JlciAxNSwgMjAwMworCQkgICAgTGFzdCBVcGRhdGU6IEphbnVhcnkgMiwgMjAwNAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBVLUJvb3QgYW5kIHRoZSBBbHRlcmEKQEAgLTEyLDMxICsxMiw0MSBAQAogRm9yIHRob3NlIGludGVyZXN0ZWQgaW4gY29udHJpYnV0aW5nIC4uLiBzZWUgSEVMUCBXQU5URUQgc2VjdGlvbgogaW4gZG9jL1JFQURNRS5uaW9zLgogCitDb250ZW50czoKIAotRmlsZXMKLS0tLS0tLQorCTEuIEZpbGVzCisJMi4gTWVtb3J5IE9yZ2FuaXphdGlvbgorCTMuIEV4YW1wbGVzCisJNC4gUHJvZ3JhbW1pbmcgVS1Cb290IGludG8gRkxBU0ggd2l0aCBHRVJNUworCTUuIEFjdGl2ZSBTZXJpYWwgTWVtb3J5IEludGVyZmFjZSAoQVNNSSkgU3VwcG9ydAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBGaWxlcworPT09PT09PT09CiAJYm9hcmQvZGsxYzIwLyoKIAlpbmNsdWRlL2NvbmZpZ3MvREsxQzIwLmgKIAotTWVtb3J5IE9yZ2FuaXphdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIuIE1lbW9yeSBPcmdhbml6YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgCS1UaGUgaGVhcCBpcyBwbGFjZWQgYmVsb3cgdGhlIG1vbml0b3IgKFUtQm9vdCBjb2RlKS4KLSAgCS1HbG9iYWwgZGF0YSBpcyBwbGFjZWQgYmVsb3cgdGhlIGhlYXAuCi0gIAktVGhlIHN0YWNrIGlzIHBsYWNlZCBiZWxvdyBnbG9iYWwgZGF0YSAoJmdyb3dzIGRvd24pLgorCS1UaGUgaGVhcCBpcyBwbGFjZWQgYmVsb3cgdGhlIG1vbml0b3IgKFUtQm9vdCBjb2RlKS4KKwktR2xvYmFsIGRhdGEgaXMgcGxhY2VkIGJlbG93IHRoZSBoZWFwLgorCS1UaGUgc3RhY2sgaXMgcGxhY2VkIGJlbG93IGdsb2JhbCBkYXRhICgmZ3Jvd3MgZG93bikuCiAKLU1pc2MKLS0tLS0tCiszLiBFeGFtcGxlcworPT09PT09PT09PT09CiAKLVRoZSBoZWxsb193b3JsZCBleGFtcGxlIHdvcmtzIGZpbmUuCitUaGUgaGVsbG9fd29ybGQgZXhhbXBsZSB3b3JrcyBmaW5lLiBUaGUgZGVmYXVsdCBsb2FkIGFkZHJlc3MKK2lzIDB4MDEwMF8wMDAwICh0aGUgc3RhcnQgb2YgU0RSQU0pLgogCiAKLVByb2dyYW1taW5nIFUtQm9vdCBpbnRvIEZMQVNIIHdpdGggR0VSTVMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBESy0xQzIwIHBvcnQgb2NjdXBpZXMgbGVzcyB0aGFuCi02MCBLQnl0ZSB3aXRoIG5ldHdvcmsgc3VwcG9ydCBkaXNhYmxlZC4gU28gZXZlcnl0aGluZyB3aWxsIGZpdAotaW50byBhIHNpbmdsZSBmbGFzaCBzZWN0b3IuIFdpdGggbmV0d29yayBzdXBwb3J0IChlLmcuIGJvb3RwLAotdGZ0cGJvb3QsIHBpbmcsIGV0YykgdGhlIGZsYXNoIGZvb3RwcmludCBpcyBhYm91dCA3N0suCis0LiBQcm9ncmFtbWluZyBVLUJvb3QgaW50byBGTEFTSCB3aXRoIEdFUk1TCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgREstMUMyMCBwb3J0IHdpdGggdGhlIGRlZmF1bHQKK2NvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgb2NjdXBpZXMgYWJvdXQgODEgS0J5dGVzIG9mIGZsYXNoLgorQSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gb2NjdXBpZXMgbGVzcyB0aGFuIDYwIEtCeXRlIChhc21pCithbmQgbmV0d29yayBzdXBwb3J0IGRpc2FibGVkKS4KIAogVG8gcHJvZ3JhbSBVLUJvb3QgaW50byB0aGUgREstMUMyMCBmbGFzaCB1c2luZyBHRVJNUyBkbyB0aGUKIGZvbGxvd2luZzoKQEAgLTUxLDEwICs2MSwxMCBAQAogCiAgICAgVS1Cb290IDEuMC4wLXByZSAoT2N0ICA0IDIwMDMgLSAwNzozOToyNCkKIAotICAgIENQVTogTmlvcy0zMiBSZXYuIDMuMDggKDB4MzAxOCkKKyAgICBDUFU6IE5pb3MtMzIgUmV2LiAzLjMgKDB4MzAzOCkKICAgICBSZWcgZmlsZSBzaXplOiAyNTYgTE9fTElNSVQvSElfTElNSVQ6IDIvMTQKICAgICBCb2FyZDogQWx0ZXJhIE5pb3MgMUMyMCBEZXZlbG9wbWVudCBLaXQKLSAgICBJbjogICAgc2VyaWFsCisgICAgSW46CSAgIHNlcmlhbAogICAgIE91dDogICBzZXJpYWwKICAgICBFcnI6ICAgc2VyaWFsCiAgICAgPT0+CkBAIC02MywxOCArNzMsMTggQEAKIDIuIFF1aXQgbmlvcy1ydW4gYW5kIHN0YXJ0IHlvdXIgdGVybWluYWwgYXBwbGljYXRpb24gKGUuZy4gc3RhcnQKIEh5cGVydGVybWluYWwgb3IgbWluaWNvbSkuCiAKLTMuIEZyb20gdGhlIFUtQm9vdCBjb21tYW5kIHByb21wdCwgZXJhc2UgYSBzZWN0b3Igb2YgZmxhc2ggYXQgMHg0MDAwMDoKKzMuIEZyb20gdGhlIFUtQm9vdCBjb21tYW5kIHByb21wdCwgZXJhc2UgZmxhc2ggMHg0MDAwMCB0byAweCA1ZmZmZjoKIAotICAgID09PiBlcmFzZSA0MDAwMCA0ZmZmZgorICAgID09PiBlcmFzZSAxOjQtNQogCiA0LiBEb3dubG9hZCB0aGUgdS1ib290IGNvZGUgdG8gUkFNLiBXaGVuIHVzaW5nIEh5cGVydGVybWluYWwsIGRvIHRoZQogZm9sbG93aW5nOgogCi0gLS1Gcm9tIHRoZSB1LWJvb3QgY29tbWFuZCBwcm9tcHQgc3RhcnQgYSBiaW5hcnkgZG93bmxvYWQgdG8gU1JBTToKKyAgIGEuICBGcm9tIHRoZSB1LWJvb3QgY29tbWFuZCBwcm9tcHQgc3RhcnQgYSBiaW5hcnkgZG93bmxvYWQgdG8gU1JBTToKIAogICAgID09PiBsb2FkYiA4MDAwMDAKIAotIC0tRG93bmxvYWQgdS1ib290LmJpbiB1c2luZyBrZXJtaXQuCisgICAgYi4gRG93bmxvYWQgdS1ib290LmJpbiB1c2luZyBrZXJtaXQuCiAKIDUuIENvcHkgdGhlIGJpbmFyeSBpbWFnZSBmcm9tIFNSQU0gdG8gZmxhc2g6CiAKQEAgLTg1LDMgKzk1LDU5IEBACiBTYWZlLTMyIGNvbmZpZ3VyYXRpb24sIGVudGVyIHRoZSBmb2xsb3dpbmcgR0VSTVMgY29tbWFuZDoKIAogICAgICsgZyA0MDAwMAorCis1LiBBY3RpdmUgU2VyaWFsIE1lbW9yeSBJbnRlcmZhY2UgKEFTTUkpIFN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQVNNSSBpcyBmdWxseSBzdXBwb3J0ZWQgaW4gVS1Cb290LiBQbGVhc2Ugbm90ZSB0aGF0IEFTTUkgaXMgc3VwcG9ydGVkCitvbmx5IG9uIEN5Y2xvbmUgZGV2aWNlcy4gRG8gbm90IGV4cGVjdCBBU01JIHRvIHdvcmsgd2l0aCBTdHJhdGl4IG9yCitBUEVYIGRldmljZXMuCisKKwkJICoqKioqKioqKioqKiogSU1QT1JUQU5UICoqKioqKioqKioqKioKKwkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJSU4gT1JERVIgRk9SIFRIRSBOSU9TIEFTTUkgVE8gT1BFUkFURSBQUk9QRVJMWSwgVEhFCisJQ1lDTE9ORSBERVZJQ0UgTVVTVCBCRSBDT05GSUdVUkVEIFVTSU5HIEpUQUcgT1IgQVNNSS4KKworVGhlcmUgYXJlIHR3byB0ZWNobmlxdWVzIHlvdSBjYW4gdXNlIHRvIGJvb3RzdHJhcCB0aGUgQVNNSS4gVGhlCitmaXJzdCBpcyB0byB1c2UgdGhlIHByb2dyYW1fZXBjcyB1dGlsaXR5IHRoYXQgaXMgcGFydCBvZiBBbHRlcmEncyBTREsuCitCdXQgSSd2ZSBmb3VuZCBwcm9ncmFtX2VwY3MgdG8gYmUgc2xvdyBhbmQgY3VtYmVyc29tZSBhdCBiZXN0LgorCitBbiB1bmRvY3VtZW50ZWQgYWx0ZXJuYXRpdmUgaXMgdG8gdXNlIHRoZSBRdWFydHVzIGRldmljZSBwcm9ncmFtaW5nCitpbnRlcmZhY2U6CisKKyAgICAxLiBTZWxlY3QgIkFjdGl2ZSBTZXJpYWwiIG1vZGUuCisKKyAgICAyLiBDaG9vc2UgdGhlIHh4eC5wb2YgZmlsZS4gRm9yIGV4YW1wbGUsIGZvciB0aGUgc3RhbmRhcmRfMzIKKyAgICAgICBjb25maWd1cmF0aW9uIHVzZSB0aGUgInN0YW5kYXJkXzMyLnBvZiIgZmlsZS4KKworICAgIDMuIEF0dGFjaCB5b3VyIEJ5dGVCbGFzdGVyIHRvIEoyOC4gTWFrZSBzdXJlIHlvdSBoYXZlIHRoZQorICAgICAgIGNhYmxlIGF0dGFjaGVkIHByb3Blcmx5IC0tIHRoZSBvcmllbnRhdGlvbiBvZiBKMjggaXMKKyAgICAgICBkaWZmZXJlbnQgdGhhbiBKMjQgKHRoZSBKVEFHIGhlYWRlcikuIE9uIEoyOCwgcGluIDEgaXMgb24KKyAgICAgICB0aGUgYm90dG9tIHJvdywgbGVmdC1tb3N0IHBpbi4KKworICAgIDQuIFByZXNzIGFuZCBob2xkIHRoZSAiUG93ZXItT24gUmVzZXQiIHN3aXRjaCAoU1cxMCkuIFlvdSB3aWxsCisgICAgICAgc2VlIHRoZSBncmVlbiAiTG9hZGluZyIgYW5kIHJlZCAiRXJyb3IiIExFRHMgKExFRDMgYW5kIExFRDQpCisgICAgICAgaW4gdGhlIG9uIHN0YXRlLgorCisgICAgNS4gV2hpbGUgaG9sZGluZyBkb3duIHRoZSAiUG93ZXItT24gUmVzZXQiIHN3aXRjaCwgc3RhcnQgdGhlCisgICAgICAgcHJvZ3JhbW1pbmcgc2VxdWVuY2UuIFRoaXMgb25seSB0YWtlcyBhYm91dCAxMCBzZWNvbmRzLgorCisgICAgNi4gQWZ0ZXIgcHJvZ3JhbW1pbmcgaXMgY29tcGxldGUsIHJlbGVhc2UgdGhlICJQb3dlci1PbiBSZXNldCIKKyAgICAgICBzd2l0Y2guIFRoZSBDeWNsb25lIGRldmljZSBzaG91bGQgbm93IGxvYWQgaXRzIGNvbmZpZ3VyYXRpb24KKyAgICAgICBmcm9tIHRoZSBFUENTNCAoVTU5KS4gVGhlIGdyZWVuICJVc2VyIiBMRUQgKExFRCAxKSBzaG91bGQgYmUKKyAgICAgICBibGlua2luZyBpZiB0aGUgZGV2aWNlIHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkIHZpYSBBU01JLgorCisgICAgNy4gUmVtb3ZlIHRoZSBCeXRlQmxhc3RlciBjYWJsZS4gVGhlIGNhYmxlIG11c3QgYmUgcmVtb3ZlZCB0bworICAgICAgIGFsbG93IHRoZSBOaW9zIEFTTUkgYWNjZXNzIHRvIHRoZSBFUENTNCBkZXZpY2UuCisKK0FmdGVyIHlvdSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9ncmFtbWVkIGEgY29uZmlndXJhdGlvbiBpbnRvIHRoZQorRVBDUzQsIHRoZSBBU01JIHdpbGwgYmUgdXNlZCB0byBsb2FkIHRoZSBDeWNsb25lIGNvbmZpZ3VyYXRpb24KK3VubGVzcyB0aGUgIkZvcmNlIFNhZmUiIHN3aXRjaCAoU1c5KSBpcyBwcmVzc2VkLgorCitOT1RFOiBUbyBtYXhpbWl6ZSB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZSBmb3IgcHJvZ3JhbSB1c2UsCit5b3UgY2FuIGVuYWJsZSBjb25maWd1cmF0aW9uIGNvbXByZXNzaW9uIGluIFF1YXJ0dXMuIFdpdGggY29tcHJlc3Npb24KK2VuYWJsZWQsIHRoZSBzaXplIG9mIHRoZSBzdGFuZGFyZF8zMiBjb25maWd1cmF0aW9uIGRhdGEgaXMKK2FwcHJveGltYXRlbHkgMTkyIEtCeXRlcy4KKworVG8gdXNlIHRoZSBVLUJvb3QgQVNNSSBjb21tYW5kcywgdHJ5IHR5cGluZyAiaGVscCBhc21pIiBhdCB0aGUKK2NvbW1hbmQgcHJvbXB0LiBUaGUgY29tbWFuZCAiYXNtaSBpbmZvIiB3aWxsIHNob3cgdGhlIGN1cnJlbnQKK3N0YXR1cyBvZiB0aGUgQVNNSS4KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubmlvcyBiL2RvYy9SRUFETUUubmlvcwppbmRleCA4NzY1ZGY3My4uYWYyMWIzZSAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5uaW9zCisrKyBiL2RvYy9SRUFETUUubmlvcwpAQCAtMSw3ICsxLDcgQEAKIAogCQkJICAgVS1Cb290IGZvciBOaW9zLTMyCiAKLQkJICAgIExhc3QgVXBkYXRlOiBOb3ZlbWJlciAzMCwgMjAwMworCQkgICAgTGFzdCBVcGRhdGU6IEphbnVhcnkgMiwgMjAwNAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBVLUJvb3QgYW5kIHRoZSBBbHRlcmEKQEAgLTMxLDcgKzMxLDcgQEAKIAogVS1Cb290IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gdGhlIE5pb3MgQ3ljbG9uZSBkZXZlbG9wbWVudAogYm9hcmQgdXNpbmcgYm90aCB0aGUgJ3NhZmUnIGFuZCAnc3RhbmRhcmQgMzInIGNvbmZpZ3VyYXRpb25zIHdpdGgKLU5pb3MgQ1BVIHJldmlzaW9uIDMuMDggKENQVV9JRCA9IDB4MzAwOCkuIFUtQm9vdCBjYW4gYmUgdXNlZCB3aXRoCitOaW9zIENQVSByZXZpc2lvbiAzLjEgKENQVV9JRCA9IDB4MzAxOCkuIFUtQm9vdCBjYW4gYmUgdXNlZCB3aXRoCiBvciB3aXRob3V0IHRoZSBHRVJNUyBtb25pdG9yLiBUaGUgaW5pdGlhbCB2ZXJzaW9uIG9mIFUtQm9vdCBmb3IgdGhlCiBDeWNsb25lIGRldmVsb3BtZW50IGtpdCBpcyBhYm91dCA2MCBLYnl0ZSBhbmQgd2lsbCBmaXQgaW4gYSBzaW5nbGUKIHNlY3RvciBvZiBvbi1ib2FyZCBGTEFTSC4gT25seSB0aGUgTmlvcyAzMi1iaXQgQ1BVIGlzIHN1cHBvcnRlZC4KQEAgLTU1LDkgKzU1LDYgQEAKIGEgcHJvYmxlbSBhcyBsaXR0bGUsIGlmIGFueSwgb2YgdGhlIEFsdGVyYSBzb3VyY2UgY29udGFpbnMKIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGF2YWlsYWJsZSBpbiBVLUJvb3QuCiAKLVRoZSBOaW9zIHBvcnQgYWxzbyBkb2VzIG5vdCB1c2UgdGhlIGxvbmctd2luZGVkIHBlcmlwaGVyYWwKLXN0cnVjdHVyZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBOaW9zIFNESy4KLQogCiAyLiBDT05GSUdVUkFUSU9OIE9QVElPTlMvU0VUVElOR1MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMyw2ICsxMDAsOSBAQAogCiBDRkdfTklPU19UTVJNUyAtLSB0aGUgcGVyaW9kIG9mIHRoZSB0aW1lciBpbiBtaWxsaXNlY29uZHMuCiAKK0NGR19OSU9TX0FTTUlCQVNFIC0tIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFTTUkgcGVyaXBoZXJhbC4KKwkoc3RhbmRhcmQtMzI6IG5hX2FzbWlfYmFzZSkuCisKIDIuMiBEaWZmZXJlbmNlcyBpbiBVLUJvb3QgT3B0aW9ucy9TZXR0aW5ncwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29tZSAnc3RhbmRhcmQnIFUtQm9vdCBvcHRpb25zL3NldHRpbmdzIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5IGluCkBAIC0yMzgsOCArMjM4LDYgQEAKIAogLUNvbXBhY3RGbGFzaC4gUG9ydCAmIHRlc3QgQ0YvRkFULgogCi0tQVNNSSBzdXBwb3J0LiBVc2UgQVNNSSBmb3IgZW52aXJvbm1lbnQsIGV0Yy4KLQogLUJlZGJ1Zy4gRGV2ZWxvcCBiZWRidWcgZm9yIE5pb3MgLi4uIG9yIGF0IGxlYXN0IHByb3ZpZGUgYSBkaXNhc3NlbWJsZQogIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9jcmFtZnMuYyBiL2ZzL2NyYW1mcy9jcmFtZnMuYwppbmRleCAxZTM1MTA0Li45OGZmNTY3IDEwMDY0NAotLS0gYS9mcy9jcmFtZnMvY3JhbWZzLmMKKysrIGIvZnMvY3JhbWZzL2NyYW1mcy5jCkBAIC0zMSw4ICszMSw5IEBACiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGpmZnMyL2pmZnMyLmg+CiAjaW5jbHVkZSA8amZmczIvbG9hZF9rZXJuZWwuaD4KLSNpbmNsdWRlICJjcmFtZnNfZnMuaCIKKyNpbmNsdWRlIDxjcmFtZnMvY3JhbWZzX2ZzLmg+CiAKIC8qIFRoZXNlIHR3byBtYWNyb3MgbWF5IGNoYW5nZSBpbiBmdXR1cmUsIHRvIHByb3ZpZGUgYmV0dGVyIHN0X2lubwogICAgc2VtYW50aWNzLiAqLwpAQCAtMTk4LDM2ICsxOTksNiBAQAogCQkJCSAgKHVuc2lnbmVkIGxvbmcpIGxvYWRvZmZzZXQpOwogfQogCi1zdGF0aWMgY2hhciAqbWttb2Rlc3RyICh1bnNpZ25lZCBsb25nIG1vZGUsIGNoYXIgKnN0cikKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqbCA9ICJ4d3IiOwotCWludCBtYXNrID0gMSwgaTsKLQljaGFyIGM7Ci0KLQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKLQljYXNlIFNfSUZESVI6CXN0clswXSA9ICdkJzsgYnJlYWs7Ci0JY2FzZSBTX0lGQkxLOglzdHJbMF0gPSAnYic7IGJyZWFrOwotCWNhc2UgU19JRkNIUjoJc3RyWzBdID0gJ2MnOyBicmVhazsKLQljYXNlIFNfSUZJRk86CXN0clswXSA9ICdmJzsgYnJlYWs7Ci0JY2FzZSBTX0lGTE5LOglzdHJbMF0gPSAnbCc7IGJyZWFrOwotCWNhc2UgU19JRlNPQ0s6CXN0clswXSA9ICdzJzsgYnJlYWs7Ci0JY2FzZSBTX0lGUkVHOglzdHJbMF0gPSAnLSc7IGJyZWFrOwotCWRlZmF1bHQ6IHN0clswXSA9ICc/JzsgYnJlYWs7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewotCQljID0gbFtpICUgM107Ci0JCXN0cls5IC0gaV0gPSAobW9kZSAmIG1hc2spID8gYyA6ICctJzsKLQkJbWFzayA9IG1hc2sgPDwgMTsKLQl9Ci0KLQlpZiAobW9kZSAmIFNfSVNVSUQpIHN0clszXSA9IChtb2RlICYgU19JWFVTUikgPyAncycgOiAnUyc7Ci0JaWYgKG1vZGUgJiBTX0lTR0lEKSBzdHJbNl0gPSAobW9kZSAmIFNfSVhHUlApID8gJ3MnIDogJ1MnOwotCWlmIChtb2RlICYgU19JU1ZUWCkgc3RyWzldID0gKG1vZGUgJiBTX0lYT1RIKSA/ICd0JyA6ICdUJzsKLQlzdHJbMTBdID0gJ1wwJzsKLQlyZXR1cm4gc3RyOwotfQotCiBzdGF0aWMgaW50IGNyYW1mc19saXN0X2lub2RlIChzdHJ1Y3QgcGFydF9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlzdHJ1Y3QgY3JhbWZzX2lub2RlICppbm9kZSA9IChzdHJ1Y3QgY3JhbWZzX2lub2RlICopCmRpZmYgLS1naXQgYS9mcy9jcmFtZnMvY3JhbWZzX2ZzLmggYi9mcy9jcmFtZnMvY3JhbWZzX2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4Y2M5ZWMuLjAwMDAwMDAKLS0tIGEvZnMvY3JhbWZzL2NyYW1mc19mcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLSNpZm5kZWYgX19DUkFNRlNfRlNfSAotI2RlZmluZSBfX0NSQU1GU19GU19ICi0KLS8qIFVuY29tcHJlc3Npb24gaW50ZXJmYWNlcyB0byB0aGUgdW5kZXJseWluZyB6bGliICovCi1pbnQgY3JhbWZzX3VuY29tcHJlc3NfYmxvY2sgKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgc3JjbGVuKTsKLWludCBjcmFtZnNfdW5jb21wcmVzc19pbml0ICh2b2lkKTsKLQotI2RlZmluZSBDUkFNRlNfTUFHSUMJCTB4MjhjZDNkNDUJLyogc29tZSByYW5kb20gbnVtYmVyICovCi0jZGVmaW5lIENSQU1GU19TSUdOQVRVUkUJIkNvbXByZXNzZWQgUk9NRlMiCi0KLS8qCi0gKiBXaWR0aCBvZiB2YXJpb3VzIGJpdGZpZWxkcyBpbiBzdHJ1Y3QgY3JhbWZzX2lub2RlLgotICogUHJpbWFyaWx5IHVzZWQgdG8gZ2VuZXJhdGUgd2FybmluZ3MgaW4gbWtjcmFtZnMuCi0gKi8KLSNkZWZpbmUgQ1JBTUZTX01PREVfV0lEVEggMTYKLSNkZWZpbmUgQ1JBTUZTX1VJRF9XSURUSCAxNgotI2RlZmluZSBDUkFNRlNfU0laRV9XSURUSCAyNAotI2RlZmluZSBDUkFNRlNfR0lEX1dJRFRIIDgKLSNkZWZpbmUgQ1JBTUZTX05BTUVMRU5fV0lEVEggNgotI2RlZmluZSBDUkFNRlNfT0ZGU0VUX1dJRFRIIDI2Ci0KLS8qCi0gKiBTaW5jZSBpbm9kZS5uYW1lbGVuIGlzIGEgdW5zaWduZWQgNi1iaXQgbnVtYmVyLCB0aGUgbWF4aW11bSBjcmFtZnMKLSAqIHBhdGggbGVuZ3RoIGlzIDYzIDw8IDIgPSAyNTIuCi0gKi8KLSNkZWZpbmUgQ1JBTUZTX01BWFBBVEhMRU4gKCgoMSA8PCBDUkFNRlNfTkFNRUxFTl9XSURUSCkgLSAxKSA8PCAyKQotCi0vKgotICogUmVhc29uYWJseSB0ZXJzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5vZGUgZGF0YS4KLSAqLwotc3RydWN0IGNyYW1mc19pbm9kZSB7Ci0JdTMyIG1vZGU6Q1JBTUZTX01PREVfV0lEVEgsIHVpZDpDUkFNRlNfVUlEX1dJRFRIOwotCS8qIFNJWkUgZm9yIGRldmljZSBmaWxlcyBpcyBpX3JkZXYgKi8KLQl1MzIgc2l6ZTpDUkFNRlNfU0laRV9XSURUSCwgZ2lkOkNSQU1GU19HSURfV0lEVEg7Ci0JLyogTkFNRUxFTiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIG5hbWUsIGRpdmlkZWQgYnkgNCBhbmQKLQkgICByb3VuZGVkIHVwLgkoY3JhbWZzIGRvZXNuJ3Qgc3VwcG9ydCBoYXJkIGxpbmtzLikgKi8KLQkvKiBPRkZTRVQ6IEZvciBzeW1saW5rcyBhbmQgbm9uLWVtcHR5IHJlZ3VsYXIgZmlsZXMsIHRoaXMKLQkgICBjb250YWlucyB0aGUgb2Zmc2V0IChkaXZpZGVkIGJ5IDQpIG9mIHRoZSBmaWxlIGRhdGEgaW4KLQkgICBjb21wcmVzc2VkIGZvcm0gKHN0YXJ0aW5nIHdpdGggYW4gYXJyYXkgb2YgYmxvY2sgcG9pbnRlcnM7Ci0JICAgc2VlIFJFQURNRSkuCSBGb3Igbm9uLWVtcHR5IGRpcmVjdG9yaWVzIGl0IGlzIHRoZSBvZmZzZXQKLQkgICAoZGl2aWRlZCBieSA0KSBvZiB0aGUgaW5vZGUgb2YgdGhlIGZpcnN0IGZpbGUgaW4gdGhhdAotCSAgIGRpcmVjdG9yeS4gIEZvciBhbnl0aGluZyBlbHNlLCBvZmZzZXQgaXMgemVyby4gKi8KLQl1MzIgbmFtZWxlbjpDUkFNRlNfTkFNRUxFTl9XSURUSCwgb2Zmc2V0OkNSQU1GU19PRkZTRVRfV0lEVEg7Ci19OwotCi1zdHJ1Y3QgY3JhbWZzX2luZm8gewotCXUzMiBjcmM7Ci0JdTMyIGVkaXRpb247Ci0JdTMyIGJsb2NrczsKLQl1MzIgZmlsZXM7Ci19OwotCi0vKgotICogU3VwZXJibG9jayBpbmZvcm1hdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBGUy4KLSAqLwotc3RydWN0IGNyYW1mc19zdXBlciB7Ci0JdTMyIG1hZ2ljOwkJCS8qIDB4MjhjZDNkNDUgLSByYW5kb20gbnVtYmVyICovCi0JdTMyIHNpemU7CQkJLyogbGVuZ3RoIGluIGJ5dGVzICovCi0JdTMyIGZsYWdzOwkJCS8qIGZlYXR1cmUgZmxhZ3MgKi8KLQl1MzIgZnV0dXJlOwkJCS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCi0JdTggc2lnbmF0dXJlWzE2XTsJCS8qICJDb21wcmVzc2VkIFJPTUZTIiAqLwotCXN0cnVjdCBjcmFtZnNfaW5mbyBmc2lkOwkvKiB1bmlxdWUgZmlsZXN5c3RlbSBpbmZvICovCi0JdTggbmFtZVsxNl07CQkJLyogdXNlci1kZWZpbmVkIG5hbWUgKi8KLQlzdHJ1Y3QgY3JhbWZzX2lub2RlIHJvb3Q7CS8qIHJvb3QgaW5vZGUgZGF0YSAqLwotfTsKLQotLyoKLSAqIEZlYXR1cmUgZmxhZ3MKLSAqCi0gKiAweDAwMDAwMDAwIC0gMHgwMDAwMDBmZjogZmVhdHVyZXMgdGhhdCB3b3JrIGZvciBhbGwgcGFzdCBrZXJuZWxzCi0gKiAweDAwMDAwMTAwIC0gMHhmZmZmZmZmZjogZmVhdHVyZXMgdGhhdCBkb24ndCB3b3JrIGZvciBwYXN0IGtlcm5lbHMKLSAqLwotI2RlZmluZSBDUkFNRlNfRkxBR19GU0lEX1ZFUlNJT05fMgkweDAwMDAwMDAxCS8qIGZzaWQgdmVyc2lvbiAjMiAqLwotI2RlZmluZSBDUkFNRlNfRkxBR19TT1JURURfRElSUwkJMHgwMDAwMDAwMgkvKiBzb3J0ZWQgZGlycyAqLwotI2RlZmluZSBDUkFNRlNfRkxBR19IT0xFUwkJMHgwMDAwMDEwMAkvKiBzdXBwb3J0IGZvciBob2xlcyAqLwotI2RlZmluZSBDUkFNRlNfRkxBR19XUk9OR19TSUdOQVRVUkUJMHgwMDAwMDIwMAkvKiByZXNlcnZlZCAqLwotI2RlZmluZSBDUkFNRlNfRkxBR19TSElGVEVEX1JPT1RfT0ZGU0VUIDB4MDAwMDA0MDAJLyogc2hpZnRlZCByb290IGZzICovCi0KLS8qCi0gKiBWYWxpZCB2YWx1ZXMgaW4gc3VwZXIuZmxhZ3MuCSBDdXJyZW50bHkgd2UgcmVmdXNlIHRvIG1vdW50Ci0gKiBpZiAoZmxhZ3MgJiB+Q1JBTUZTX1NVUFBPUlRFRF9GTEFHUykuICBNYXliZSB0aGF0IHNob3VsZCBiZQotICogY2hhbmdlZCB0byB0ZXN0IHN1cGVyLmZ1dHVyZSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIENSQU1GU19TVVBQT1JURURfRkxBR1MJKCAweDAwMDAwMGZmIFwKLQkJCQl8IENSQU1GU19GTEFHX0hPTEVTIFwKLQkJCQl8IENSQU1GU19GTEFHX1dST05HX1NJR05BVFVSRSBcCi0JCQkJfCBDUkFNRlNfRkxBR19TSElGVEVEX1JPT1RfT0ZGU0VUICkKLQotLyoKLSAqIFNpbmNlIGNyYW1mcyBpcyBsaXR0bGUtZW5kaWFuLCBwcm92aWRlIG1hY3JvcyB0byBzd2FiIHRoZSBiaXRmaWVsZHMuCi0gKi8KLQotI2lmbmRlZiBfX0JZVEVfT1JERVIKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikgJiYgIWRlZmluZWQoX19CSUdfRU5ESUFOKQotI2RlZmluZSBfX0JZVEVfT1JERVIgX19MSVRUTEVfRU5ESUFOCi0jZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikgJiYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotI2RlZmluZSBfX0JZVEVfT1JERVIgX19CSUdfRU5ESUFOCi0jZWxzZQotI2Vycm9yICJ1bmFibGUgdG8gZGVmaW5lIF9fQllURV9PUkRFUiIKLSNlbmRpZgotI2VuZGlmIC8qIG5vdCBfX0JZVEVfT1JERVIgKi8KLQotI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KLSNkZWZpbmUgQ1JBTUZTXzE2KHgpCSh4KQotI2RlZmluZSBDUkFNRlNfMjQoeCkJKHgpCi0jZGVmaW5lIENSQU1GU18zMih4KQkoeCkKLSNkZWZpbmUgQ1JBTUZTX0dFVF9OQU1FTEVOKHgpCSgoeCktPm5hbWVsZW4pCi0jZGVmaW5lIENSQU1GU19HRVRfT0ZGU0VUKHgpCSgoeCktPm9mZnNldCkKLSNkZWZpbmUgQ1JBTUZTX1NFVF9PRkZTRVQoeCx5KQkoKHgpLT5vZmZzZXQgPSAoeSkpCi0jZGVmaW5lIENSQU1GU19TRVRfTkFNRUxFTih4LHkpICgoeCktPm5hbWVsZW4gPSAoeSkpCi0jZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBDUkFNRlNfMTYoeCkJc3dhYjE2KHgpCi0jZGVmaW5lIENSQU1GU18yNCh4KQkoKHN3YWIzMih4KSkgPj4gOCkKLSNkZWZpbmUgQ1JBTUZTXzMyKHgpCXN3YWIzMih4KQotI2Vsc2UgLyogbm90IF9fS0VSTkVMX18gKi8KLSNkZWZpbmUgQ1JBTUZTXzE2KHgpCWJzd2FwXzE2KHgpCi0jZGVmaW5lIENSQU1GU18yNCh4KQkoKGJzd2FwXzMyKHgpKSA+PiA4KQotI2RlZmluZSBDUkFNRlNfMzIoeCkJYnN3YXBfMzIoeCkKLSNlbmRpZiAvKiBub3QgX19LRVJORUxfXyAqLwotI2RlZmluZSBDUkFNRlNfR0VUX05BTUVMRU4oeCkJKCgodTgqKSh4KSlbOF0gJiAweDNmKQotI2RlZmluZSBDUkFNRlNfR0VUX09GRlNFVCh4KQkoKENSQU1GU18yNCgoKHUzMiopKHgpKVsyXSAmIDB4ZmZmZmZmKSA8PCAyKSB8XAotCQkJCSAoKCgodTMyKikoeCkpWzJdICYgMHhjMDAwMDAwMCkgPj4gMzApKQotI2RlZmluZSBDUkFNRlNfU0VUX05BTUVMRU4oeCx5KSAoKCh1OCopKHgpKVs4XSA9ICgoKDB4M2YgJiAoeSkpKSB8IFwKLQkJCQkJCSAgKDB4YzAgJiAoKHU4KikoeCkpWzhdKSkpCi0jZGVmaW5lIENSQU1GU19TRVRfT0ZGU0VUKHgseSkJKCgodTMyKikoeCkpWzJdID0gKCgoeSkgJiAzKSA8PCAzMCkgfCBcCi0JCQkJIENSQU1GU18yNCgoKCh5KSAmIDB4MDNmZmZmZmYpID4+IDIpKSB8IFwKLQkJCQkgKCgodTMyKSgoKHU4KikoeCkpWzhdICYgMHgzZikpIDw8IDI0KSkKLSNlbHNlCi0jZXJyb3IgIl9fQllURV9PUkRFUiBtdXN0IGJlIF9fTElUVExFX0VORElBTiBvciBfX0JJR19FTkRJQU4iCi0jZW5kaWYKLQotI2VuZGlmIC8qIG5vdCBfX0NSQU1GU19GU19IICovCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9qZmZzMl8xcGFzcy5jIGIvZnMvamZmczIvamZmczJfMXBhc3MuYwppbmRleCBmYjY5YmVlLi44YTIzYzgzIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9qZmZzMl8xcGFzcy5jCisrKyBiL2ZzL2pmZnMyL2pmZnMyXzFwYXNzLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCXJldHVybiBpbm9kZTsKIH0KIAotc3RhdGljIGNoYXIgKm1rbW9kZXN0cih1bnNpZ25lZCBsb25nIG1vZGUsIGNoYXIgKnN0cikKK2NoYXIgKm1rbW9kZXN0cih1bnNpZ25lZCBsb25nIG1vZGUsIGNoYXIgKnN0cikKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqbCA9ICJ4d3IiOwogCWludCBtYXNrID0gMSwgaTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy84eHhfaW1tYXAuaCBiL2luY2x1ZGUvYXNtLXBwYy84eHhfaW1tYXAuaAppbmRleCA1MzU1OWMwLi40NjllZGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvOHh4X2ltbWFwLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjLzh4eF9pbW1hcC5oCkBAIC00MzUsNyArNDM1LDE5IEBACiAJdV9jaGFyCXJlczEzWzJdOwogCXVzaG9ydAljcF9wYm9kcjsKIAl1aW50CWNwX3BiZGF0OwotCXVfY2hhcglyZXMxNFsweDE4XTsKKworCS8qIFBvcnQgRSAtIE1QQzg3eC84OHggb25seS4KKwkgKi8KKwl1aW50CWNwX3BlZGlyOworCXVpbnQJY3BfcGVwYXI7CisJdWludAljcF9wZXNvOworCXVpbnQJY3BfcGVvZHI7CisJdWludAljcF9wZWRhdDsKKworCS8qIENvbW11bmljYXRpb25zIFByb2Nlc3NvciBUaW1pbmcgUmVnaXN0ZXIgLQorCSAgIENvbnRhaW5zIFJNSUkgVGltaW5nIGZvciB0aGUgRkVDcyBvbiBNUEM4N3gvODh4IG9ubHkuCisJKi8KKwl1aW50CWNwX2NwdHI7CiAKIAkvKiBTZXJpYWwgSW50ZXJmYWNlIGFuZCBUaW1lIFNsb3QgQXNzaWdubWVudC4KIAkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ibXBfbG9nby5oIGIvaW5jbHVkZS9ibXBfbG9nby5oCmluZGV4IDljOTI0YjguLjI2NWY3NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYm1wX2xvZ28uaAorKysgYi9pbmNsdWRlL2JtcF9sb2dvLmgKQEAgLTE4LDcgKzE4LDcgQEAKIAkweDAzNDMsICAweDA0NTQsICAweDA1NjUsICAweDA1NjUsICAweDA2NzYsICAweDA3ODcsICAweDA4OTgsICAweDA5OTksCiAJMHgwQUFBLCAgMHgwQUJBLCAgMHgwQkNCLCAgMHgwQ0NDLCAgMHgwRERELCAgMHgwRUVFLCAgMHgwRkZGLCAgMHgwRkIzLAogCTB4MEZCNCwgIDB4MEZDNCwgIDB4MEZDNSwgIDB4MEZDNiwgIDB4MEZENywgIDB4MEZEOCwgIDB4MEZEOSwgIDB4MEZEQSwKLQkweDBGRUEsICAweDBGRUIsICAweDBGRUMsICAweDBGRkQsICAweDBGRkUsICAweDBGRkYsICAweDBGRkYsCisJMHgwRkVBLCAgMHgwRkVCLCAgMHgwRkVDLCAgMHgwRkZELCAgMHgwRkZFLCAgMHgwRkZGLCAgMHgwRkZGLCAgCiB9OwogCiB1bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdID0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tb24uaCBiL2luY2x1ZGUvY29tbW9uLmgKaW5kZXggNmI5MjU0OC4uMzIxMDdhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tb24uaAorKysgYi9pbmNsdWRlL2NvbW1vbi5oCkBAIC0xMiw3ICsxMiw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjksNyArMjksNyBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVjaGFyOwogdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nCXZ1X2xvbmc7Ci10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0CXZ1X3Nob3J0OwordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB2dV9zaG9ydDsKIHR5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgY2hhcgl2dV9jaGFyOwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CkBAIC00MSwyMSArNDEsMjUgQEAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHXzQ0MCkKICNpbmNsdWRlIDxwY2kuaD4KICNlbmRpZgotI2lmZGVmCUNPTkZJR184eHgKKyNpZiBkZWZpbmVkKENPTkZJR184eHgpCiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgotI2lmZGVmIENPTkZJR19NUEM4NjAKLSNkZWZpbmUgQ09ORklHX01QQzg2eCAxCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTVBDODYwVAotI2RlZmluZSBDT05GSUdfTVBDODZ4IDEKLSNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01QQzg1MikJfHwgZGVmaW5lZChDT05GSUdfTVBDODUyVCkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01QQzg1OSkJfHwgZGVmaW5lZChDT05GSUdfTVBDODU5VCkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01QQzg1OURTTCkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01QQzg2NikJfHwgZGVmaW5lZChDT05GSUdfTVBDODY2VCkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01QQzg2NlApCi0jZGVmaW5lIENPTkZJR19NUEM4NjZfZXRfYWwgMQotI2RlZmluZSBDT05GSUdfTVBDODZ4IDEKKyMgZGVmaW5lIENPTkZJR19NUEM4NjZfZXRfYWwgMQorI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODcwKSBcCisgICB8fCBkZWZpbmVkKENPTkZJR19NUEM4NzUpIFwKKyAgIHx8IGRlZmluZWQoQ09ORklHX01QQzg4MCkgXAorICAgfHwgZGVmaW5lZChDT05GSUdfTVBDODg1KQorIyBkZWZpbmUgQ09ORklHX0RVRVQgICAxCisjZW5kaWYKKyNpZiAgIGRlZmluZWQoQ09ORklHX01QQzg2MCkJICAgXAorICAgfHwgZGVmaW5lZChDT05GSUdfTVBDODYwVCkJICAgXAorICAgfHwgZGVmaW5lZChDT05GSUdfTVBDODY2X2V0X2FsKSBcCisgICB8fCBkZWZpbmVkKENPTkZJR19EVUVUKQorIyBkZWZpbmUgQ09ORklHX01QQzg2eCAxCiAjZW5kaWYKICNlbGlmIGRlZmluZWQoQ09ORklHXzV4eCkKICNpbmNsdWRlIDxhc20vNXh4X2ltbWFwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1wcm9jLmggYi9pbmNsdWRlL2NvbW1wcm9jLmgKaW5kZXggOGJhYjUyMi4uMTFmMzFlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tcHJvYy5oCisrKyBiL2luY2x1ZGUvY29tbXByb2MuaApAQCAtNzE2LDEzICs3MTYsMTQgQEAKIAogLyoqKiAgRkFEUzg2MFQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIChkZWZpbmVkKENPTkZJR19NUEM4NjBUKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NjZfZXRfYWwpKSBcCi0gICAgJiYgZGVmaW5lZChDT05GSUdfRkFEUykKLS8qIFRoaXMgRU5FVCBzdHVmZiBpcyBmb3IgdGhlIE1QQzg2MFRGQURTL01QQzh4eEFEUyB3aXRoIGV0aGVybmV0IG9uIFNDQzEuCisjaWYgZGVmaW5lZChDT05GSUdfRkFEUykgJiYgZGVmaW5lZChDT05GSUdfTVBDODZ4KQorLyoKKyAqIFRoaXMgRU5FVCBzdHVmZiBpcyBmb3IgdGhlIE1QQzg2eEZBRFMvTVBDOHh4QURTIHdpdGggZXRoZXJuZXQgb24gU0NDMS4KICAqLwogI2lmZGVmIENPTkZJR19TQ0MxX0VORVQKKwogI2RlZmluZQlTQ0NfRU5FVAkwCi0jZW5kaWYJLyogQ09ORklHX1NDQzFfRVRIRVJORVQgKi8KKwogI2RlZmluZQlQUk9GRl9FTkVUCVBST0ZGX1NDQzEKICNkZWZpbmUJQ1BNX0NSX0VORVQJQ1BNX0NSX0NIX1NDQzEKIApAQCAtNzM5LDE0ICs3NDAsMTcgQEAKICNkZWZpbmUgU0lDUl9FTkVUX01BU0sJKCh1aW50KTB4MDAwMDAwZmYpCiAjZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwMDAyYykKIAotLyogVGhpcyBFTkVUIHN0dWZmIGlzIGZvciB0aGUgTVBDODYwVEZBRFMgd2l0aCBldGhlcm5ldCBvbiBGRUMuCisjZW5kaWYJLyogQ09ORklHX1NDQzFfRVRIRVJORVQgKi8KKworLyoKKyAqIFRoaXMgRU5FVCBzdHVmZiBpcyBmb3IgdGhlIE1QQzg2MFRGQURTL01QQzg2eEFEUy9EVUVUIHdpdGggZXRoZXJuZXQgb24gRkVDLgogICovCiAKICNpZmRlZiBDT05GSUdfRkVDX0VORVQKLSNkZWZpbmUJRkVDX0VORVQJLyogdXNlIEZFQyBmb3IgRVRoZXJuZXQgKi8KLSNlbmRpZgkvKiBDT05GSUdfRkVDX0VUSEVSTkVUICovCisjZGVmaW5lCUZFQ19FTkVUCS8qIFVzZSBGRUMgZm9yIEV0aGVybmV0ICovCisjZW5kaWYJLyogQ09ORklHX0ZFQ19FTkVUICovCiAKLSNlbmRpZgkvKiBDT05GSUdfRkFEUzg2MFQgKi8KKyNlbmRpZgkvKiBDT05GSUdfRkFEUyAmJiBDT05GSUdfTVBDODZ4ICovCiAKIC8qKiogIEZQUzg1MEwsIEZQUzg2MEwgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0FEUzg2MC5oIGIvaW5jbHVkZS9jb25maWdzL0FEUzg2MC5oCmluZGV4IDFiMDM3YzkuLjkxNjI3MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9BRFM4NjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQURTODYwLmgKQEAgLTUsMTcgKzUsMTQgQEAKICAgKiBIZWxtdXQgQnVjaHNiYXVtIGFkZGVkIGJpdHZhbHVlcyBmb3IgQkNTUngKICAgKgogICAqIENvcHlyaWdodCAoYykgMTk5OCBEYW4gTWFsZWsgKGRtYWxla0BqbGMubmV0KQorICAqCisgICogTW9kaWZpZWQgYnksIFl1bGkgQmFyY29oZW4sIEFyYWJlbGxhIFNvZnR3YXJlIEx0ZC4sIHl1bGlAYXJhYmVsbGFzdy5jb20KKyAgKgorICAqIFZhbHVlcyBjb21tb24gdG8gYWxsIEZBRFMgZmFtaWx5IGJvYXJkcyBhcmUgaW4gYm9hcmQvZmFkcy9mYWRzLmgKICAgKi8KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZuZGVmIF9DT05GSUdfQURTODYwX0gKLSNkZWZpbmUgX0NPTkZJR19BRFM4NjBfSAotCi0vKgotICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqIChlYXN5IHRvIGNoYW5nZSkKLSAqLworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKIAogLyogQm9hcmQgdHlwZSAqLwogI2RlZmluZSBDT05GSUdfQURTCQkxCS8qIE9sZCBNb3Rvcm9sYSBNUEM4MjEvODYwQURTICovCkBAIC0zOCwzNTEgKzM1LDIwIEBACiAjZGVmaW5lIENGR184WFhfRkFDVAkJMTIJLyogTXVsdGlwbHkgYnkgMTIgKi8KICNlbmRpZgogCi0jZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRICAgKChDRkdfOFhYX1hJTikgKiAoQ0ZHXzhYWF9GQUNUKSkKLQotI2RlZmluZSBDT05GSUdfRFJBTV81ME1IWgkxCi0KLSNpZiAwCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJLTEJLyogYXV0b2Jvb3QgZGlzYWJsZWQJICAgICovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzICovCi0jZW5kaWYKLQotI3VuZGVmCUNPTkZJR19CT09UQVJHUwotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQlcCi0gICAiZGhjcDsiCQkJCQkJCQlcCi0gICAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKSAiCVwKLSAgICJpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCk6JChnYXRld2F5aXApOiQobmV0bWFzayk6JChob3N0bmFtZSk6Om9mZjsiCVwKLSAgICJib290bSIKLQotI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxICAgLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkICAqLwotI3VuZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQkgICAgLyogZG9uJ3QgYWxsb3cgYmF1ZHJhdGUgY2hhbmdlICAqLwotCi0jdW5kZWYJQ09ORklHX1dBVENIRE9HCQkgICAgLyogd2F0Y2hkb2cgZGlzYWJsZWQJKi8KLQotI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSyAgIChDT05GSUdfQk9PVFBfREVGQVVMVCB8IENPTkZJR19CT09UUF9CT09URklMRVNJWkUpCi0KLSNkZWZpbmUgQ09ORklHX0NPTU1BTkRTIChDT05GSUdfQ01EX0RGTCAgXAotCQkJIHwgQ0ZHX0NNRF9ESENQICBcCi0JCQkgfCBDRkdfQ01EX0lNTUFQIFwKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTIChDT05GSUdfQ01EX0RGTCAgIFwKKwkJCSB8IENGR19DTURfREhDUCAgIFwKKwkJCSB8IENGR19DTURfSU1NQVAgIFwKIAkJCSB8IENGR19DTURfUENNQ0lBIFwKLQkJCSB8IENGR19DTURfUElORyAgXAorCQkJIHwgQ0ZHX0NNRF9QSU5HICAgXAogCQkJKQogCi0vKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCi0jaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+Ci0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCi0gKi8KLSN1bmRlZglDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkgICAgKi8KLSNkZWZpbmUgQ0ZHX1BST01QVAkgICAgIj0+IgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgKi8KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQotI2RlZmluZSBDRkdfQ0JTSVpFCSAgICAxMDI0CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAqLwotI2Vsc2UKLSNkZWZpbmUgQ0ZHX0NCU0laRQkgICAgMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KLSNlbmRpZgotI2RlZmluZSBDRkdfUEJTSVpFCSAgICAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lIENGR19NQVhBUkdTCSAgICAxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ0ZHX0JBUkdTSVpFCSAgICBDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KLQotI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVCAgIDB4MDAxMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLwotI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJICAgIDB4MDBGMDAwMDAJLyogMSAuLi4gMTUgTUIgaW4gRFJBTQkqLwotCi0jZGVmaW5lIENGR19MT0FEX0FERFIJICAgIDB4MDAxMDAwMDAKLQotI2RlZmluZSBDRkdfSFoJCSAgICAxMDAwCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KLQotI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KLQotLyoKLSAqIExvdyBMZXZlbCBDb25maWd1cmF0aW9uIFNldHRpbmdzCi0gKiAoYWRkcmVzcyBtYXBwaW5ncywgcmVnaXN0ZXIgaW5pdGlhbCB2YWx1ZXMsIGV0Yy4pCi0gKiBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGlmIHlvdSBtYWtlIGNoYW5nZXMgaGVyZS4KLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW50ZXJuYWwgTWVtb3J5IE1hcHBlZCBSZWdpc3RlcgotICovCi0jZGVmaW5lIENGR19JTU1SCQkweEZGMDAwMDAwCi0jZGVmaW5lIENGR19JTU1SX1NJWkUJCSgodWludCkoNjQgKiAxMDI0KSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhIChpbiBEUFJBTSkKLSAqLwotI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUglDRkdfSU1NUgotI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MkYwMAkvKiBFbmQgb2YgdXNlZCBhcmVhIGluIERQUkFNCSovCi0jZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTY0ICAvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KLSNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQotI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgotICogKFNldCB1cCBieSB0aGUgc3RhcnR1cCBjb2RlKQotICogUGxlYXNlIG5vdGUgdGhhdCBDRkdfU0RSQU1fQkFTRSBfbXVzdF8gc3RhcnQgYXQgMAotICovCi0jZGVmaW5lIENGR19TRFJBTV9CQVNFCSAgICAweDAwMDAwMDAwCi0KLS8qCi0gKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwotICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lIENGR19CT09UTUFQU1oJICAgICg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBvcmdhbml6YXRpb24KLSAqLwotI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkgICAgVEVYVF9CQVNFCi0jZGVmaW5lIENGR19GTEFTSF9TSVpFCSAgICAoKHVpbnQpKDggKiAxMDI0ICogMTAyNCkpCS8qIG1heCA4TWJ5dGUgKi8KLQotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJICAgICovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkxNgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KLQotI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKSAgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykgICovCi0KLSN1bmRlZglDRkdfRU5WX0lTX0lOX05WUkFNCi0jdW5kZWYJQ0ZHX0VOVl9JU19JTl9FRVBST00KLSNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCi0KLSNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHg0MDAwMCAvKiBzZWUgUkVBRE1FIC0gZW52IHNlY3RvciB0b3RhbCBzaXplCSovCi0jZGVmaW5lIENGR19FTlZfT0ZGU0VUCQlDRkdfRU5WX1NFQ1RfU0laRQotI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50ICovCi0KLSNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICBDRkdfRkxBU0hfQkFTRQotI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JICAgICgyNTYgPDwgMTApIC8qIFJlc2VydmUgb25lIGZsYXNoIHNlY3RvcgotCQkJCQkgICAoMjU2IEtCKSBmb3IgbW9uaXRvciAqLwotI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkgICAgKDM4NCA8PCAxMCkgLyogUmVzZXJ2ZSAzODQga0IgZm9yIG1hbGxvYygpCSovCi0KLS8qIHRoZSBvdGhlciBDUzpzIGFyZSBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgYXQgcGFyYW1ldGVycyBpbiBCQ1NSeCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDYWNoZSBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFICAxNgkJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJKi8KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQotI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUIDQJCS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlICAgICovCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSTJDIGNvbmZpZ3VyYXRpb24KLSAqLwotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0kyQykKLSNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCQkxCS8qIEkyQyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQgKi8KLSNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJNDAwMDAwCS8qIEkyQyBzcGVlZCBhbmQgc2xhdmUgYWRkcmVzcyBkZWZhdWx0cyAqLwotI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1lQQ1IgLSBTeXN0ZW0gUHJvdGVjdGlvbiBDb250cm9sCQkJMTEtOQotICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLSNkZWZpbmUgQ0ZHX1NZUENSICAgKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBcCi0JICAgICBTWVBDUl9TV0UgfCBTWVBDUl9TV1JJIHwgU1lQQ1JfU1dQKQotI2Vsc2UKLSNkZWZpbmUgQ0ZHX1NZUENSICAgKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBTWVBDUl9TV1ApCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1VNQ1IgLSBTSVUgTW9kdWxlIENvbmZpZ3VyYXRpb24JCQkxMS02Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQQ01DSUEgY29uZmlnLiwgbXVsdGktZnVuY3Rpb24gcGluIHRyaS1zdGF0ZQotICovCi0jZGVmaW5lIENGR19TSVVNQ1IgIChTSVVNQ1JfREJHQzAwIHwgU0lVTUNSX0RCUEMwMCB8IFNJVU1DUl9NTFJDMDEpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbAkJCTExLTI2Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDbGVhciBSZWZlcmVuY2UgSW50ZXJydXB0IFN0YXR1cywgVGltZWJhc2UgZnJlZXppbmcgZW5hYmxlZAotICovCi0jZGVmaW5lIENGR19UQlNDUiAgIChUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRSkKKyNkZWZpbmUgQ09ORklHX0RSQU1fNTBNSFoJCTEKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCTExLTMxCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDbGVhciBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzLCBJbnRlcnJ1cHQgVGltZXIgZnJlZXppbmcgZW5hYmxlZAotICovCi0jZGVmaW5lIENGR19QSVNDUiAgIChQSVNDUl9QUyB8IFBJU0NSX1BJVEYpCisjaW5jbHVkZSAiZmFkcy5oIgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJMTUtMzAKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHNldCB0aGUgUExMLCB0aGUgbG93LXBvd2VyIG1vZGVzIGFuZCB0aGUgcmVzZXQgY29udHJvbCAoMTUtMjkpCi0gKi8KICNkZWZpbmUgQ0ZHX1BMUFJDUiAgKCgoQ0ZHXzhYWF9GQUNULTEpIDw8IFBMUFJDUl9NRl9TSElGVCkgfAlcCiAJCVBMUFJDUl9TUExTUyB8IFBMUFJDUl9URVhQUyB8IFBMUFJDUl9UTUlTVCkKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgkxNS0yNwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU2V0IGNsb2NrIG91dHB1dCwgdGltZWJhc2UgYW5kIFJUQyBzb3VyY2UgYW5kIGRpdmlkZXIsCi0gKiBwb3dlciBtYW5hZ2VtZW50IGFuZCBzb21lIG90aGVyIGludGVybmFsIGNsb2NrcwotICovCi0jZGVmaW5lIFNDQ1JfTUFTSyAgIFNDQ1JfRUJERjExCi0jZGVmaW5lIENGR19TQ0NSICAgIChTQ0NSX1RCUyB8IFNDQ1JfQ09NMDAgfCBTQ0NSX0RGU1lOQzAwIHwgXAotCQkgICBTQ0NSX0RGQlJHMDAgfCBTQ0NSX0RGTkwwMDAgfCBTQ0NSX0RGTkgwMDAgfCBcCi0JCSAgIFNDQ1JfREZMQ0QwMDAgfCBTQ0NSX0RGQUxDRDAwKQotCi0KLSAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLwotI2RlZmluZSBDRkdfREVSCSAgICAwCi0KLS8qIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgODYwIHN0YXJ0cyB1cCBhbmQgYXNzaWducyBDUzAgdGhlCi0qIGVudGlyZSBhZGRyZXNzIHNwYWNlLCB3ZSBoYXZlIHRvIHNldCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKLSogZGlmZmVyZW50bHkuCU5vcm1hbGx5LCB5b3Ugd3JpdGUgdGhlIG9wdGlvbiByZWdpc3RlcgotKiBmaXJzdCwgYW5kIHRoZW4gZW5hYmxlIHRoZSBjaGlwIHNlbGVjdCBieSB3cml0aW5nIHRoZQotKiBiYXNlIHJlZ2lzdGVyLiAgRm9yIENTMCwgeW91IG11c3Qgd3JpdGUgdGhlIGJhc2UgcmVnaXN0ZXIKLSogZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBvcHRpb24gcmVnaXN0ZXIuCi0qLwotCi0vKgotICogSW5pdCBNZW1vcnkgQ29udHJvbGxlcjoKLSAqCi0gKiBCUjAgYW5kIE9SMCAoRkxBU0gpCi0gKiBCUjEgYW5kIE9SMSAoQkNTUikKLSAqLwotLyogdGhlIG90aGVyIENTOnMgYXJlIGRldGVybWluZWQgYnkgbG9va2luZyBhdCBwYXJhbWV0ZXJzIGluIEJDU1J4ICovCi0KLSNkZWZpbmUgQkNTUl9BRERSCSAgICgodWludCkgMHhmZjAxMDAwMCkKLQotI2RlZmluZSBDRkdfUFJFTElNX09SX0FNICAgIDB4ZmY4MDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0KLS8qIEZMQVNIIHRpbWluZzogQUNTID0gMTAsIFRSTFggPSAxLCBDU05UID0gMSwgU0NZID0gMywgRUhUUiA9IDAgICAgKi8KLSNkZWZpbmUgQ0ZHX09SX1RJTUlOR19GTEFTSCAoT1JfQ1NOVF9TQU0gIHwgT1JfQUNTX0RJVjQgfCBPUl9CSSB8IE9SX1NDWV8zX0NMSyB8IE9SX1RSTFgpCi0KLSNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JKENGR19QUkVMSU1fT1JfQU0gfCBDRkdfT1JfVElNSU5HX0ZMQVNIKSAgIC8qIDggTWJ5dGUgdW50aWwgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JKENGR19GTEFTSF9CQVNFIHwgQlJfVikKLQotLyogQkNTUnggLSBCb2FyZCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCi0jZGVmaW5lIENGR19PUjFfUFJFTElNCTB4ZmZmZjgxMTAJLyogNjRLYnl0ZSBhZGRyZXNzIHNwYWNlICovCi0jZGVmaW5lIENGR19CUjFfUFJFTElNCSgoQkNTUl9BRERSKSB8IEJSX1YgKQotCi0vKgotICogTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlcgotICovCi0KLS8qIHJlZnJlc2ggcmF0ZSAxNS42IHVzICg9IDY0IG1zIC8gNEsgPSA2Mi40IC8gcXVhZCBidXJzdHMpIGZvciA8PSAxMjggTUJpdCAqLwotI2RlZmluZSBDRkdfTVBUUFJfMkJLXzRLICAgIE1QVFBSX1BUUF9ESVYxNgkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCi0jZGVmaW5lIENGR19NUFRQUl8xQktfNEsgICAgTVBUUFJfUFRQX0RJVjMyCS8qIHNldHRpbmcgZm9yIDEgYmFuawkqLwotCi0vKiByZWZyZXNoIHJhdGUgNy44IHVzICg9IDY0IG1zIC8gOEsgPSAzMS4yIC8gcXVhZCBidXJzdHMpIGZvciAyNTYgTUJpdAkgICAgKi8KLSNkZWZpbmUgQ0ZHX01QVFBSXzJCS184SyAgICBNUFRQUl9QVFBfRElWOAkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCi0jZGVmaW5lIENGR19NUFRQUl8xQktfOEsgICAgTVBUUFJfUFRQX0RJVjE2CS8qIHNldHRpbmcgZm9yIDEgYmFuawkqLwotCi0vKgotICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKLSAqCi0gKiBCb290IEZsYWdzCi0gKi8KLSNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCSAgICAvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSCAqLwotI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJICAgIC8qIFNvZnR3YXJlIHJlYm9vdAkJKi8KLQotCi0vKiB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwgKi8KLSNkZWZpbmUgQkNTUjAJKEJDU1JfQUREUiArIDB4MDApCi0jZGVmaW5lIEJDU1IxCShCQ1NSX0FERFIgKyAweDA0KQotI2RlZmluZSBCQ1NSMgkoQkNTUl9BRERSICsgMHgwOCkKLSNkZWZpbmUgQkNTUjMJKEJDU1JfQUREUiArIDB4MGMpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENNQ0lBIHN0dWZmCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICovCi0jaWZkZWYgQ09ORklHX01QQzg2MAotI2RlZmluZSBQQ01DSUFfU0xPVF9BIDEKLSNlbmRpZgotCi0jZGVmaW5lIENGR19QQ01DSUFfTUVNX0FERFIJKDB4RTAwMDAwMDApCi0jZGVmaW5lIENGR19QQ01DSUFfTUVNX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENGR19QQ01DSUFfRE1BX0FERFIJKDB4RTQwMDAwMDApCi0jZGVmaW5lIENGR19QQ01DSUFfRE1BX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENGR19QQ01DSUFfQVRUUkJfQUREUgkoMHhFODAwMDAwMCkKLSNkZWZpbmUgQ0ZHX1BDTUNJQV9BVFRSQl9TSVpFCSggNjQgPDwgMjAgKQotI2RlZmluZSBDRkdfUENNQ0lBX0lPX0FERFIJKDB4RUMwMDAwMDApCi0jZGVmaW5lIENGR19QQ01DSUFfSU9fU0laRQkoIDY0IDw8IDIwICkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSURFL0FUQSBzdHVmZgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0jZGVmaW5lIENPTkZJR19JREVfOHh4X0RJUkVDVAkxICAgLyogUENNQ0lBIGludGVyZmFjZSByZXF1aXJlZCAgICAqLwotI3VuZGVmCUNPTkZJR19JREVfTEVECQkgICAgLyogTEVEICAgZm9yIGlkZSBzdXBwb3J0ZWQJKi8KLSNkZWZpbmUgQ09ORklHX0lERV9SRVNFVAkxICAgLyogcmVzZXQgZm9yIGlkZSBzdXBwb3J0ZWQJKi8KLQotI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMSAgIC8qIG1heC4gMiBJREUgYnVzc2VzCSovCi0jZGVmaW5lIENGR19JREVfTUFYREVWSUNFCShDRkdfSURFX01BWEJVUyoyKSAvKiBtYXguIDIgZHJpdmVzIHBlciBJREUgYnVzICovCi0KLSNkZWZpbmUgQ0ZHX1BJT19NT0RFCQkwICAgLyogSURFIGludGVyZmFjZSBpbiBQSU8gTW9kZSAwICAqLwogI2RlZmluZSBDRkdfUENfSURFX1JFU0VUCSgodXNob3J0KTB4MDAwOCkgICAgLyogUEMgMTIJKi8KIAotI2RlZmluZSBDRkdfQVRBX0JBU0VfQUREUglDRkdfUENNQ0lBX01FTV9BRERSCi0jZGVmaW5lIENGR19BVEFfSURFMF9PRkZTRVQJMHgwMDAwCi0KLSNkZWZpbmUgQ0ZHX0FUQV9EQVRBX09GRlNFVAkweDAwMDAJLyogT2Zmc2V0IGZvciBkYXRhIEkvTwkJKi8KLSNkZWZpbmUgQ0ZHX0FUQV9SRUdfT0ZGU0VUCTB4MDA4MAkvKiBPZmZzZXQgZm9yIG5vcm1hbCByZWdpc3RlciBhY2Nlc3NlcwkqLwotI2RlZmluZSBDRkdfQVRBX0FMVF9PRkZTRVQJMHgwMTAwCS8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycyAgICovCi0KLSNkZWZpbmUgQ09ORklHX0RJU0tfU1BJTlVQX1RJTUUgMTAwMDAwMAotI3VuZGVmIENPTkZJR19ESVNLX1NQSU5VUF9USU1FCS8qIHVzaW60IENvbXBhY3QgRmxhc2ggKi8KLQotLyogKEYpQURTIGJpdHZhbHVlcyBieSBIZWxtdXQgQnVjaHNiYXVtCi0gKiBzZWUgTVBDOHh4QURTIFVzZXIncyBNYW51YWwgZm9yIGEgcHJvcGVyIGRlc2NyaXB0aW9uCi0gKiBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXMKLSAqLwotCi0jZGVmaW5lIEJDU1IwX0VSQgkoKHVpbnQpMHg4MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfSVAJKCh1aW50KTB4NDAwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0JESVMJKCh1aW50KTB4MTAwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0JQU19NQVNLCSgodWludCkweDBDMDAwMDAwKQotI2RlZmluZSBCQ1NSMF9JU0JfTUFTSwkoKHVpbnQpMHgwMTgwMDAwMCkKLSNkZWZpbmUgQkNTUjBfREJHQ19NQVNLICgodWludCkweDAwNjAwMDAwKQotI2RlZmluZSBCQ1NSMF9EQlBDX01BU0sgKCh1aW50KTB4MDAxODAwMDApCi0jZGVmaW5lIEJDU1IwX0VCREZfTUFTSyAoKHVpbnQpMHgwMDA2MDAwMCkKLQotI2RlZmluZSBCQ1NSMV9GTEFTSF9FTgkJICgodWludCkweDgwMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9EUkFNX0VOCQkgKCh1aW50KTB4NDAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0VUSEVOCQkgKCh1aW50KTB4MjAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0lSREVOCQkgKCh1aW50KTB4MTAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0ZMQVNIX0NGR19FTgkgKCh1aW50KTB4MDgwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0NOVF9SRUdfRU5fUFJPVEVDVCAoKHVpbnQpMHgwNDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfQkNTUl9FTgkJICgodWludCkweDAyMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9SUzIzMkVOXzEJCSAoKHVpbnQpMHgwMTAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDRU4JCSAoKHVpbnQpMHgwMDgwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDVkNDMAkJICgodWludCkweDAwNDAwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NWQ0NPTgkJICAgIEJDU1IxX1BDQ1ZDQzAKLSNkZWZpbmUgQkNTUjFfUENDVlBQX01BU0sJICgodWludCkweDAwMzAwMDAwKQotI2RlZmluZSBCQ1NSMV9EUkFNX0hBTEZfV09SRAkgKCh1aW50KTB4MDAwODAwMDApCi0jZGVmaW5lIEJDU1IxX1JTMjMyRU5fMgkJICgodWludCkweDAwMDQwMDAwKQotI2RlZmluZSBCQ1NSMV9TRFJBTV9FTgkJICgodWludCkweDAwMDIwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NWQ0MxCQkgKCh1aW50KTB4MDAwMTAwMDApCi0KLSNkZWZpbmUgQkNTUjJfRkxBU0hfUERfTUFTSwkgKCh1aW50KTB4RjAwMDAwMDApCi0jZGVmaW5lIEJDU1IyX0RSQU1fUERfTUFTSwkgKCh1aW50KTB4MDc4MDAwMDApCi0jZGVmaW5lIEJDU1IyX0RSQU1fUERfU0hJRlQJICgyMykKLSNkZWZpbmUgQkNTUjJfRVhUVE9MSV9NQVNLCSAoKHVpbnQpMHgwMDc4MDAwMCkKLSNkZWZpbmUgQkNTUjJfREJSRVZOUl9NQVNLCSAoKHVpbnQpMHgwMDAzMDAwMCkKLQotI2RlZmluZSBCQ1NSM19EQklEX01BU0sJCSAoKHVzaG9ydCkweDM4MDApCi0jZGVmaW5lIEJDU1IzX0NOVF9SRUdfRU5fUFJPVEVDVCAoKHVzaG9ydCkweDA0MDApCi0jZGVmaW5lIEJDU1IzX0JSRVZOUjAJCSAoKHVzaG9ydCkweDAwODApCi0jZGVmaW5lIEJDU1IzX0ZMQVNIX1BEX01BU0sJICgodXNob3J0KTB4MDA3MCkKLSNkZWZpbmUgQkNTUjNfQlJFVk4xCQkgKCh1c2hvcnQpMHgwMDA4KQotI2RlZmluZSBCQ1NSM19CUkVWTjJfTUFTSwkgKCh1c2hvcnQpMHgwMDAzKQotCi0vKiBXZSBkb24ndCB1c2UgdGhlIDgyNTkuCi0gKi8KLSNkZWZpbmUgTlJfODI1OV9JTlRTCTAKLQotLyogTWFjaGluZSB0eXBlCi0gKi8KLSNkZWZpbmUgX01BQ0hfOHh4IChfTUFDSF9hZHMpCi0KLSNlbmRpZgkvKiBfQ09ORklHX0FEUzg2MF9IICovCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0RLMUMyMC5oIGIvaW5jbHVkZS9jb25maWdzL0RLMUMyMC5oCmluZGV4IDJiMGIxNzYuLjBkOGU0NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9ESzFDMjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvREsxQzIwLmgKQEAgLTQxMyw3ICs0MTMsNyBAQAogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBFdGhlcm5ldCAtLSBuZWVkcyB3b3JrIQorICogRXRoZXJuZXQKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaWYJKENGR19OSU9TX0NQVV9MQU5fTlVNUyA9PSAxKQogCkBAIC02NDIsNiArNjQyLDE1IEBACiAjZW5kaWYJLyogQ0ZHX05JT1NfQ1BVX1BJT19OVU1TICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBU01JIC0gQWN0aXZlIFNlcmlhbCBNZW1vcnkgSW50ZXJmYWNlLgorICoKKyAqIEFTTUkgaXMgZm9yIEN5Y2xvbmUgZGV2aWNlcyBvbmx5IGFuZCBvbmx5IHdvcmtzIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAqIGlzIGxvYWRlZCB2aWEgSlRBRyBvciBBU01JLiBQbGVhc2Ugc2VlIGRvYy9SRUFETUUuZGsxYzIwIGZvciBkZXRhaWxzLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ09ORklHX05JT1NfQVNNSQkJCS8qIEVuYWJsZSBBU01JCQkqLworI2RlZmluZSBDRkdfTklPU19BU01JQkFTRQkweDAwOTIwYjAwCS8qIEFTTUkgYmFzZSBhZGRyZXNzCSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDT01NQU5EUwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ0ZHX0NNRF9BTEwgJiB+KCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRFVFVF9BRFMuaCBiL2luY2x1ZGUvY29uZmlncy9EVUVUX0FEUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDAyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvRFVFVF9BRFMuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQSBjb2xsZWN0aW9uIG9mIHN0cnVjdHVyZXMsIGFkZHJlc3NlcywgYW5kIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSBNb3Rvcm9sYSBEVUVUIEFEUyBib2FyZC4gVmFsdWVzIGNvbW1vbiB0byBhbGwgRkFEUyBmYW1pbHkgYm9hcmRzCisgKiBhcmUgaW4gYm9hcmQvZmFkcy9mYWRzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXJhYmVsbGEgU29mdHdhcmUgTHRkLgorICogWXVsaSBCYXJjb2hlbiA8eXVsaUBhcmFiZWxsYXN3LmNvbT4KKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKiBCb2FyZCB0eXBlICovCisjZGVmaW5lIENPTkZJR19EVUVUX0FEUwkgICAgICAgIDEJLyogRHVldCAoTVBDODd4Lzg4eCkgQURTICovCisjZGVmaW5lIENPTkZJR19GQURTCQkxCS8qIFdlIGFyZSBGQURTIGNvbXBhdGlibGUgKG1vcmUgb3IgbGVzcykgKi8KKworI2RlZmluZSBDT05GSUdfTVBDODg1IAkJMQkvKiBNUEM4ODUgQ1BVIChEdWV0IGZhbWlseSkgKi8KKworI2RlZmluZQlDT05GSUdfOHh4X0NPTlNfU01DMQkxCS8qIENvbnNvbGUgaXMgb24gU01DMQkJKi8KKyN1bmRlZglDT05GSUdfOHh4X0NPTlNfU01DMgorI3VuZGVmCUNPTkZJR184eHhfQ09OU19OT05FCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMzg0MDAKKworI2RlZmluZSBDRkdfOFhYX0ZBQ1QJCTUJCS8qIE11bHRpcGx5IGJ5IDUJKi8KKyNkZWZpbmUgQ0ZHXzhYWF9YSU4JCTEwMDAwMDAwCS8qIDEwIE1IeiBpbgkqLworCisjZGVmaW5lIENPTkZJR19TRFJBTV81ME1IWiAgICAgIDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUExQUkNSIC0gUExMLCBMb3ctUG93ZXIsIGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNC0yMgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogc2V0IHRoZSBQTEwsIHRoZSBsb3ctcG93ZXIgbW9kZXMgYW5kIHRoZSByZXNldCBjb250cm9sCisgKi8KKyNkZWZpbmUgQ0ZHX1BMUFJDUiAoKENGR184WFhfRkFDVCA8PCBQTFBSQ1JfTUZJX1NISUZUKSB8IFBMUFJDUl9URVhQUykKKworI2luY2x1ZGUgImZhZHMuaCIKKworI2RlZmluZSBDRkdfUEhZREVWX0FERFIJCShCQ1NSX0FERFIgKyAweDIwMDAwKQorCisjZGVmaW5lIENGR19PUjVfUFJFTElNCQkweEZGRkY4MTEwCS8qIDY0S2J5dGUgYWRkcmVzcyBzcGFjZSAqLworI2RlZmluZSBDRkdfQlI1X1BSRUxJTQkJKENGR19QSFlERVZfQUREUiB8IEJSX1BTXzggfCBCUl9WKQorCisjZGVmaW5lIEJDU1I1CQkJKENGR19QSFlERVZfQUREUiArIDB4MzAwKQorCisjZGVmaW5lIEJDU1I1X01JSTJfRU4JCTB4NDAKKyNkZWZpbmUgQkNTUjVfTUlJMl9SU1QJCTB4MjAKKyNkZWZpbmUgQkNTUjVfVDFfUlNUCQkweDEwCisjZGVmaW5lIEJDU1I1X0FUTTE1NV9SU1QJMHgwOAorI2RlZmluZSBCQ1NSNV9BVE0yNV9SU1QJCTB4MDQKKyNkZWZpbmUgQkNTUjVfTUlJMV9FTgkJMHgwMgorI2RlZmluZSBCQ1NSNV9NSUkxX1JTVAkJMHgwMQorCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0ZBRFM4MjMuaCBiL2luY2x1ZGUvY29uZmlncy9GQURTODIzLmgKaW5kZXggM2IyMDFhNy4uNGYzZDM5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0ZBRFM4MjMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvRkFEUzgyMy5oCkBAIC02Niw4ICs2Niw2IEBACiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICogKGVhc3kgdG8gY2hhbmdlKQogICovCi0jaW5jbHVkZSA8bXBjOHh4X2lycS5oPgotCiAjZGVmaW5lIENPTkZJR19NUEM4MjMJCTEKICNkZWZpbmUgQ09ORklHX01QQzgyM0ZBRFMJMQogI2RlZmluZSBDT05GSUdfRkFEUwkJMQpAQCAtNDMzLDE0ICs0MzEsNiBAQAogI2RlZmluZSBDT05GSUdfRFJBTV81ME1IWgkJMQogI2RlZmluZSBDT05GSUdfU0RSQU1fNTBNSFoKIAotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0KLS8qIEludGVycnVwdCBsZXZlbCBhc3NpZ25tZW50cy4KLSovCi0jZGVmaW5lIEZFQ19JTlRFUlJVUFQJU0lVX0xFVkVMMQkvKiBGRUMgaW50ZXJydXB0ICovCi0KLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotCiAvKiBXZSBkb24ndCB1c2UgdGhlIDgyNTkuCiAqLwogI2RlZmluZSBOUl84MjU5X0lOVFMJMApAQCAtNDY4LDQgKzQ1OCw2IEBACiAjZGVmaW5lIFBDTUNJQV9TTE9UX0EgMQogI2VuZGlmCiAKKyNkZWZpbmUgQ0ZHX0RBVUdIVEVSQk9BUkQKKwogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9GQURTODUwU0FSLmggYi9pbmNsdWRlL2NvbmZpZ3MvRkFEUzg1MFNBUi5oCmluZGV4IDNkMDRlZjAuLjllMjkyYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9GQURTODUwU0FSLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0ZBRFM4NTBTQVIuaApAQCAtMzAsOCArMzAsNiBAQAogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqIChlYXN5IHRvIGNoYW5nZSkKICAqLwotI2luY2x1ZGUgPG1wYzh4eF9pcnEuaD4KLQogI2RlZmluZSBDT05GSUdfTVBDODUwCQkxCiAjZGVmaW5lIENPTkZJR19NUEM4NTBTQVIJMQogI2RlZmluZSBDT05GSUdfRkFEUwkJCTEKQEAgLTM5MywxNCArMzkxLDYgQEAKICNkZWZpbmUgQ09ORklHX0RSQU1fNTBNSFoJCTEKICNkZWZpbmUgQ09ORklHX1NEUkFNXzUwTUhaCiAKLSNpZmRlZiBDT05GSUdfTVBDODYwVAotCi0vKiBJbnRlcnJ1cHQgbGV2ZWwgYXNzaWdubWVudHMuCi0qLwotI2RlZmluZSBGRUNfSU5URVJSVVBUCVNJVV9MRVZFTDEJLyogRkVDIGludGVycnVwdCAqLwotCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KLQogLyogV2UgZG9uJ3QgdXNlIHRoZSA4MjU5LgogKi8KICNkZWZpbmUgTlJfODI1OV9JTlRTCTAKQEAgLTQyMCw0ICs0MTAsNiBAQAogI2RlZmluZSBQQ01DSUFfU0xPVF9BIDEKICNlbmRpZgogCisjZGVmaW5lIENGR19EQVVHSFRFUkJPQVJECisKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRkFEUzg2MFQuaCBiL2luY2x1ZGUvY29uZmlncy9GQURTODYwVC5oCmluZGV4IDExNDYwM2MuLmU1NzU3MWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9GQURTODYwVC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9GQURTODYwVC5oCkBAIC01LDMyICs1LDE1IEBACiAgICogSGVsbXV0IEJ1Y2hzYmF1bSBhZGRlZCBiaXR2YWx1ZXMgZm9yIEJDU1J4CiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIDE5OTggRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKKyAgKgorICAqIE1vZGlmaWVkIGJ5LCBZdWxpIEJhcmNvaGVuLCBBcmFiZWxsYSBTb2Z0d2FyZSBMdGQuLCB5dWxpQGFyYWJlbGxhc3cuY29tCisgICoKKyAgKiBWYWx1ZXMgY29tbW9uIHRvIGFsbCBGQURTIGZhbWlseSBib2FyZHMgYXJlIGluIGJvYXJkL2ZhZHMvZmFkcy5oCiAgICovCiAKLS8qCi0gKiAxOTk5LW5vdi0yNjogVGhlIEZBRFMgaXMgdXNpbmcgdGhlIGZvbGxvd2luZyBwaHlzaWNhbCBtZW1vcnltYXA6Ci0gKgotICogZmYwMjAwMDAgLT4gZmYwMmZmZmYgOiBwY21jaWEKLSAqIGZmMDEwMDAwIC0+IGZmMDFmZmZmIDogQkNTUiAgICAgICBjb25uZWN0ZWQgdG8gQ1MxLCBzZXR1cCBieSA4eHhyb20KLSAqIGZmMDAwMDAwIC0+IGZmMDBmZmZmIDogSU1BUCAgICAgICBpbnRlcm5hbCBpbiB0aGUgY3B1Ci0gKiBmZTAwMDAwMCAtPiBmZm5ubm5ubiA6IGZsYXNoICAgICAgY29ubmVjdGVkIHRvIENTMCwgc2V0dXAgYnkgOHh4cm9tCi0gKiAwMDAwMDAwMCAtPiBubm5ubm5ubiA6IHNkcmFtL2RyYW0gc2V0dXAgYnkgOHh4cm9tCi0gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogYm9hcmQvY29uZmlnLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCi0gKi8KLQogI2lmbmRlZiBfX0NPTkZJR19ICiAjZGVmaW5lIF9fQ09ORklHX0gKIAotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLQogLyogYm9hcmQgdHlwZSAqLwogI2RlZmluZSBDT05GSUdfRkFEUwkJMSAgICAgICAvKiBvbGQvbmV3IEZBRFMgKyBuZXcgQURTICovCiAKQEAgLTUwLDQwNCArMzMsMjYgQEAKICMgZGVmaW5lIENGR184WFhfRkFDVAkJMTAJCS8qIE11bHRpcGx5IGJ5IDEwICovCiAjIGRlZmluZSBDRkdfOFhYX1hJTgkJNTAwMDAwMAkJLyogNSBNSHogaW4JKi8KICNlbmRpZgotCi0jZGVmaW5lIE1QQzhYWF9IWiAoKENGR184WFhfWElOKSAqIChDRkdfOFhYX0ZBQ1QpKQotCi0vKiBzaG91bGQgQUxXQVlTIGRlZmluZSB0aGlzLCBtZWFzdXJlX2djbGsgaW4gc3BlZWQuYyBpcyB1bnJlbGlhYmxlICovCi0vKiBpbiBnZW5lcmFsLCB3ZSBhbHdheXMga25vdyB0aGlzIGZvciBGQURTK25ldyBBRFMgYW55d2F5ICovCi0jZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRICAgICBNUEM4WFhfSFoKLQotI2lmIDEKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KLSNlbHNlCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KLSNlbmRpZgotCi0jdW5kZWYJQ09ORklHX0JPT1RBUkdTCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJCSAgICBcCi0gICAgImJvb3RwOyAiCQkJCSAgICBcCi0gICAgInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aCkgIgkgICAgXAotICAgICJpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCk6JChnYXRld2F5aXApOiQobmV0bWFzayk6JChob3N0bmFtZSk6Om9mZjsgIiAgIFwKLSAgICAiYm9vdG0iCi0KLSN1bmRlZglDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KLQotLyogQVRBIC8gSURFIGFuZCBwYXJ0aXRpb24gc3VwcG9ydCAqLwotI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTiAgICAxCi0jZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OICAgIDEKLSNkZWZpbmUgQ09ORklHX0lTT19QQVJUSVRJT04JMQotI3VuZGVmCUNPTkZJR19BVEFQSQotI2RlZmluZSBDT05GSUdfSURFXzh4eF9QQ0NBUkQJMQkvKiBVc2UgSURFIHdpdGggUEMgQ2FyZCBBZGFwdGVyICovCi0jdW5kZWYJQ09ORklHX0lERV84eHhfRElSRUNUCQkvKiBEaXJlY3QgSURFCSBub3Qgc3VwcG9ydGVkCSovCi0jdW5kZWYJQ09ORklHX0lERV9MRUQJCQkvKiBMRUQJIGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwotI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIHJlc2V0IGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwotCi0vKiBjaG9vc2UgU0NDMSBldGhlcm5ldCAoMTBCQVNFVCBvbiBtb3RoZXJib2FyZCkKLSAqIG9yIEZFQyBldGhlcm5ldCAoMTAvMTAwIG9uIGRhdWdodGVyYm9hcmQpCi0gKi8KLSNpZiAwCi0jZGVmaW5lCUNPTkZJR19TQ0MxX0VORVQJMQkvKiB1c2UgU0NDMSBldGhlcm5ldCAqLwotI3VuZGVmCUNPTkZJR19GRUNfRU5FVAkJCS8qIGRpc2FibGUgRkVDIGV0aGVybmV0ICAqLwotI2Vsc2UgICAvKiBhbGwgODZ4IGNvcmVzIGhhdmUgRkVDcywgaWYgaW4gZG91YnQsIHVzZSBpdCAqLwotI3VuZGVmCUNPTkZJR19TQ0MxX0VORVQJCS8qIGRpc2FibGUgU0NDMSBldGhlcm5ldCAqLwotI2RlZmluZQlDT05GSUdfRkVDX0VORVQJCTEJLyogdXNlIEZFQyBldGhlcm5ldCAgKi8KLSNkZWZpbmUgQ0ZHX0RJU0NPVkVSX1BIWQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU0NDMV9FTkVUKSAmJiBkZWZpbmVkKENPTkZJR19GRUNfRU5FVCkKLSNlcnJvciBCb3RoIENPTkZJR19TQ0MxX0VORVQgYW5kIENPTkZJR19GRUNfRU5FVCBjb25maWd1cmVkCi0jZW5kaWYKLQotLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwotI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jdW5kZWYJQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCi0jZGVmaW5lCUNGR19QUk9NUFQJCSI9PiIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLwotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCi0jZGVmaW5lCUNGR19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbHNlCi0jZGVmaW5lCUNGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwotI2VuZGlmCi0jZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLwotI2RlZmluZQlDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwogCi0jZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDEwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCi0jaWYgKENGR19TRFJBTV9TSVpFKQotI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCUNGR19TRFJBTV9TSVpFCS8qIDEgLi4uIFNEUkFNX1NJWkUJKi8KLSNlbHNlCi0jZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwNDAwMDAwCS8qIDEgLi4uIDQgTUIgaW4gRFJBTQkqLwotI2VuZGlmCi0KLSNkZWZpbmUgQ0ZHX0xPQURfQUREUgkgCTB4MDAxMDAwMDAKLQotI2RlZmluZQlDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MJKi8KLQotI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQotCi0vKgotICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKLSAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKLSAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgotICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEludGVybmFsIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBDRkdfSU1NUgkJCTB4RkYwMDAwMDAKLSNkZWZpbmUgQ0ZHX0lNTVJfU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENGR19JTklUX1JBTV9BRERSCUNGR19JTU1SCi0jZGVmaW5lCUNGR19JTklUX1JBTV9FTkQJMHgyRjAwCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gRFBSQU0JKi8KLSNkZWZpbmUJQ0ZHX0dCTF9EQVRBX1NJWkUJNjQgIC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLwotI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lCUNGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCi0gKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCi0gKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKi8KLSNkZWZpbmUJQ0ZHX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKLSNpZmRlZiBDT05GSUdfRkFEUwotIyBkZWZpbmUJQ0ZHX1NEUkFNX1NJWkUJMHgwMDQwMDAwMCAgICAgIC8qIDQgbWVnICovCi0jZWxzZSAgIC8qICFDT05GSUdfRkFEUyAqLyAvKiBvbGQgQURTICovCi0jIGRlZmluZQlDRkdfU0RSQU1fU0laRQkweDAwMDAwMDAwICAgICAgLyogTk8gU0RSQU0gKi8KLSNlbmRpZgotCi0jZGVmaW5lIENGR19GTEFTSF9CQVNFCQlURVhUX0JBU0UKLQotI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJKCh1aW50KSg4ICogMTAyNCAqIDEwMjQpKQkvKiBtYXggOE1ieXRlICovCi0KLSNkZWZpbmUJQ0ZHX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLwotI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCUNGR19GTEFTSF9CQVNFCi0jZGVmaW5lCUNGR19NQUxMT0NfTEVOCQkoMzg0IDw8IDEwKQkvKiBSZXNlcnZlIDM4NCBrQiBmb3IgbWFsbG9jKCkJKi8KLQotLyoKLSAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCi0gKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gKi8KLSNkZWZpbmUJQ0ZHX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgJKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZMQVNIIG9yZ2FuaXphdGlvbgotICovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTE2ICAgICAgLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCi0KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KLQotI2RlZmluZQlDRkdfRU5WX0lTX0lOX0ZMQVNICTEKLSNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAKLSNkZWZpbmUJQ0ZHX0VOVl9TSVpFCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KLQotI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDQwMDAwCS8qIHNlZSBSRUFETUUgLSBlbnYgc2VjdG9yIHRvdGFsIHNpemUJKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkxNgkvKiBGb3IgYWxsIE1QQzh4eCBDUFVzCQkJKi8KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQotI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTQJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJCTExLTkKLSAqIFNZUENSIGNhbiBvbmx5IGJlIHdyaXR0ZW4gb25jZSBhZnRlciByZXNldCEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNvZnR3YXJlICYgQnVzIE1vbml0b3IgVGltZXIgbWF4LCBCdXMgTW9uaXRvciBlbmFibGUsIFNXIFdhdGNoZG9nIGZyZWV6ZQotICovCi0jaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCi0jZGVmaW5lIENGR19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLQkJCSBTWVBDUl9TV0UgIHwgU1lQQ1JfU1dSSXwgU1lQQ1JfU1dQKQotI2Vsc2UKLSNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgU1lQQ1JfU1dQKQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNJVU1DUiAtIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbgkJCQkJMTEtNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENNQ0lBIGNvbmZpZy4sIG11bHRpLWZ1bmN0aW9uIHBpbiB0cmktc3RhdGUKLSAqLwotI2RlZmluZSBDRkdfU0lVTUNSCShTSVVNQ1JfREJHQzAwIHwgU0lVTUNSX0RCUEMwMCB8IFNJVU1DUl9NTFJDMDEpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbAkJCQkJMTEtMjYKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCi0gKi8KLSNkZWZpbmUgQ0ZHX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDRkdfUElTQ1IJKFBJU0NSX1BTIHwgUElTQ1JfUElURikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUExQUkNSIC0gUExMLCBMb3ctUG93ZXIsIGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyCTE1LTMwCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBzZXQgdGhlIFBMTCwgdGhlIGxvdy1wb3dlciBtb2RlcyBhbmQgdGhlIHJlc2V0IGNvbnRyb2wgKDE1LTI5KQotICovCi0jZGVmaW5lIENGR19QTFBSQ1IJKCgoQ0ZHXzhYWF9GQUNULTEpIDw8IFBMUFJDUl9NRl9TSElGVCkgfAlcCi0JCQkJUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0yNwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU2V0IGNsb2NrIG91dHB1dCwgdGltZWJhc2UgYW5kIFJUQyBzb3VyY2UgYW5kIGRpdmlkZXIsCi0gKiBwb3dlciBtYW5hZ2VtZW50IGFuZCBzb21lIG90aGVyIGludGVybmFsIGNsb2NrcwotICovCi0jZGVmaW5lIFNDQ1JfTUFTSwlTQ0NSX0VCREYxMQotI2RlZmluZSBDRkdfU0NDUgkoU0NDUl9UQlN8U0NDUl9DT00wMHxTQ0NSX0RGU1lOQzAwfFNDQ1JfREZCUkcwMHxTQ0NSX0RGTkwwMDB8U0NDUl9ERk5IMDAwfFNDQ1JfREZMQ0QwMDB8U0NDUl9ERkFMQ0QwMCkKLQotIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICovCi0jZGVmaW5lIENGR19ERVIJCSAwCi0KLS8qIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgODYwIHN0YXJ0cyB1cCBhbmQgYXNzaWducyBDUzAgdGhlCi0qIGVudGlyZSBhZGRyZXNzIHNwYWNlLCB3ZSBoYXZlIHRvIHNldCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKLSogZGlmZmVyZW50bHkuICBOb3JtYWxseSwgeW91IHdyaXRlIHRoZSBvcHRpb24gcmVnaXN0ZXIKLSogZmlyc3QsIGFuZCB0aGVuIGVuYWJsZSB0aGUgY2hpcCBzZWxlY3QgYnkgd3JpdGluZyB0aGUKLSogYmFzZSByZWdpc3Rlci4gIEZvciBDUzAsIHlvdSBtdXN0IHdyaXRlIHRoZSBiYXNlIHJlZ2lzdGVyCi0qIGZpcnN0LCBmb2xsb3dlZCBieSB0aGUgb3B0aW9uIHJlZ2lzdGVyLgotKi8KLQotLyoKLSAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6Ci0gKgotICogQlIwLzEgYW5kIE9SMC8xIChGTEFTSCkKLSAqLwotLyogdGhlIG90aGVyIENTOnMgYXJlIGRldGVybWluZWQgYnkgbG9va2luZyBhdCBwYXJhbWV0ZXJzIGluIEJDU1J4ICovCi0KLSNkZWZpbmUgQkNTUl9BRERSCQkoKHVpbnQpIDB4RkYwMTAwMDApCi0jZGVmaW5lIEJDU1JfU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQorI2RlZmluZSBDT05GSUdfRFJBTV81ME1IWgkJMQorI2RlZmluZSBDT05GSUdfU0RSQU1fNTBNSFogICAgICAgICAgICAgIDEKIAotI2RlZmluZSBDRkdfUFJFTElNX09SX0FNCTB4RkY4MDAwMDAJLyogT1IgYWRkciBtYXNrICovCisjaW5jbHVkZSAiZmFkcy5oIgogCi0vKiBGTEFTSCB0aW1pbmc6IEFDUyA9IDEwLCBUUkxYID0gMSwgQ1NOVCA9IDEsIFNDWSA9IDMsIEVIVFIgPSAwICovCi0jZGVmaW5lIENGR19PUl9USU1JTkdfRkxBU0gJKE9SX0NTTlRfU0FNICB8IE9SX0FDU19ESVY0IHwgT1JfQkkgfCBPUl9TQ1lfM19DTEsgfCBPUl9UUkxYKQorI2RlZmluZSBDRkdfUExQUkNSCSgoKENGR184WFhfRkFDVC0xKSA8PCBQTFBSQ1JfTUZfU0hJRlQpIHwgXAorCQkJIFBMUFJDUl9TUExTUyB8IFBMUFJDUl9URVhQUyB8IFBMUFJDUl9UTUlTVCkKIAogI2lmZGVmIFVTRV9SRUFMX0ZMQVNIX1ZBTFVFUwogLyoKICAqIFRoZXNlIHZhbHVlcyBmaXQgb3VyIEZBRFM4NjBUIC4uLgogICogVGhlICJkZWZhdWx0IiBiZWhhdmlvdXIgd2l0aCAxTWJ5dGUgaW5pdGlhbCBkb2Vzbid0IHdvcmsgZm9yIHVzIQogICovCisjdW5kZWYgQ0ZHX09SMF9QUkVMSU0KKyN1bmRlZiBDRkdfQlIwX1BSRUxJTQogI2RlZmluZSBDRkdfT1IwX1BSRUxJTQkweDBGRkMwMEQzNCAvKiBSZWFsIHZhbHVlcyBmb3IgdGhlIGJvYXJkICovCiAjZGVmaW5lIENGR19CUjBfUFJFTElNCTB4MDI4MDAwMDEgIC8qIFJlYWwgdmFsdWVzIGZvciB0aGUgYm9hcmQgKi8KLSNlbHNlCi0jZGVmaW5lIENGR19PUjBfUFJFTElNCShDRkdfUFJFTElNX09SX0FNIHwgQ0ZHX09SX1RJTUlOR19GTEFTSCkgICAvKiA4IE1ieXRlIHVudGlsIGRldGVjdGVkICovCi0jZGVmaW5lIENGR19CUjBfUFJFTElNCSgoQ0ZHX0ZMQVNIX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfViApCiAjZW5kaWYKIAotLyogQkNTUnggLSBCb2FyZCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCi0jZGVmaW5lIENGR19PUjFfUFJFTElNCTB4ZmZmZjgxMTAJCS8qIDY0S2J5dGUgYWRkcmVzcyBzcGFjZSAqLwotI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkoKEJDU1JfQUREUikgfCBCUl9WICkKLQotLyoKLSAqIEludGVybmFsIERlZmluaXRpb25zCi0gKgotICogQm9vdCBGbGFncwotICovCi0jZGVmaW5lCUJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KLSNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLwotCi0KLS8qIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCAqLwotCi0KLSNkZWZpbmUgUENNQ0lBX01FTV9BRERSCQkoKHVpbnQpMHhmZjAyMDAwMCkKLSNkZWZpbmUgUENNQ0lBX01FTV9TSVpFCQkoKHVpbnQpKDY0ICogMTAyNCkpCi0KLSNkZWZpbmUJQkNTUjAJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDAwKSkKLSNkZWZpbmUJQkNTUjEJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDA0KSkKLSNkZWZpbmUJQkNTUjIJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDA4KSkKLSNkZWZpbmUJQkNTUjMJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDBjKSkKLSNkZWZpbmUJQkNTUjQJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDEwKSkKLQotLyogRkFEUyBiaXR2YWx1ZXMgYnkgSGVsbXV0IEJ1Y2hzYmF1bQotICogc2VlIE1QQzh4eEFEUyBVc2VyJ3MgTWFudWFsIGZvciBhIHByb3BlciBkZXNjcmlwdGlvbgotICogb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzCi0gKi8KLQotI2RlZmluZSBCQ1NSMF9FUkIgICAgICAgKCh1aW50KTB4ODAwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0lQICAgICAgICAoKHVpbnQpMHg0MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfQkRJUyAgICAgICgodWludCkweDEwMDAwMDAwKQotI2RlZmluZSBCQ1NSMF9CUFNfTUFTSyAgKCh1aW50KTB4MEMwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0lTQl9NQVNLICAoKHVpbnQpMHgwMTgwMDAwMCkKLSNkZWZpbmUgQkNTUjBfREJHQ19NQVNLICgodWludCkweDAwNjAwMDAwKQotI2RlZmluZSBCQ1NSMF9EQlBDX01BU0sgKCh1aW50KTB4MDAxODAwMDApCi0jZGVmaW5lIEJDU1IwX0VCREZfTUFTSyAoKHVpbnQpMHgwMDA2MDAwMCkKLQotI2RlZmluZSBCQ1NSMV9GTEFTSF9FTiAgICAgICAgICAgKCh1aW50KTB4ODAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0RSQU1fRU4gICAgICAgICAgICAoKHVpbnQpMHg0MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRVRIRU4gICAgICAgICAgICAgICgodWludCkweDIwMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9JUkRFTiAgICAgICAgICAgICAgKCh1aW50KTB4MTAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0ZMQVNIX0NGR19FTiAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfQ05UX1JFR19FTl9QUk9URUNUICgodWludCkweDA0MDAwMDAwKQotI2RlZmluZSBCQ1NSMV9CQ1NSX0VOICAgICAgICAgICAgKCh1aW50KTB4MDIwMDAwMDApCi0jZGVmaW5lIEJDU1IxX1JTMjMyRU5fMSAgICAgICAgICAoKHVpbnQpMHgwMTAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDRU4gICAgICAgICAgICAgICgodWludCkweDAwODAwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NWQ0MwICAgICAgICAgICAgKCh1aW50KTB4MDA0MDAwMDApCi0jZGVmaW5lIEJDU1IxX1BDQ1ZQUF9NQVNLICAgICAgICAoKHVpbnQpMHgwMDMwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRFJBTV9IQUxGX1dPUkQgICAgICgodWludCkweDAwMDgwMDAwKQotI2RlZmluZSBCQ1NSMV9SUzIzMkVOXzIgICAgICAgICAgKCh1aW50KTB4MDAwNDAwMDApCi0jZGVmaW5lIEJDU1IxX1NEUkFNX0VOICAgICAgICAgICAoKHVpbnQpMHgwMDAyMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDVkNDMSAgICAgICAgICAgICgodWludCkweDAwMDEwMDAwKQotCi0jZGVmaW5lIEJDU1IyX0ZMQVNIX1BEX01BU0sgICAgICAoKHVpbnQpMHhGMDAwMDAwMCkKLSNkZWZpbmUgQkNTUjJfRFJBTV9QRF9NQVNLICAgICAgICgodWludCkweDA3ODAwMDAwKQotI2RlZmluZSBCQ1NSMl9EUkFNX1BEX1NISUZUICAgICAgKDIzKQotI2RlZmluZSBCQ1NSMl9FWFRUT0xJX01BU0sgICAgICAgKCh1aW50KTB4MDA3ODAwMDApCi0jZGVmaW5lIEJDU1IyX0RCUkVWTlJfTUFTSyAgICAgICAoKHVpbnQpMHgwMDAzMDAwMCkKLQotI2RlZmluZSBCQ1NSM19EQklEX01BU0sgICAgICAgICAgKCh1c2hvcnQpMHgzODAwKQotI2RlZmluZSBCQ1NSM19DTlRfUkVHX0VOX1BST1RFQ1QgKCh1c2hvcnQpMHgwNDAwKQotI2RlZmluZSBCQ1NSM19CUkVWTlIwICAgICAgICAgICAgKCh1c2hvcnQpMHgwMDgwKQotI2RlZmluZSBCQ1NSM19GTEFTSF9QRF9NQVNLICAgICAgKCh1c2hvcnQpMHgwMDcwKQotI2RlZmluZSBCQ1NSM19CUkVWTjEgICAgICAgICAgICAgKCh1c2hvcnQpMHgwMDA4KQotI2RlZmluZSBCQ1NSM19CUkVWTjJfTUFTSyAgICAgICAgKCh1c2hvcnQpMHgwMDAzKQotCi0jZGVmaW5lIEJDU1I0X0VUSExPT1AgICAgICAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjRfVEZQTERMICAgICAgICAgICAgICgodWludCkweDQwMDAwMDAwKQotI2RlZmluZSBCQ1NSNF9UUFNRRUwgICAgICAgICAgICAgKCh1aW50KTB4MjAwMDAwMDApCi0jZGVmaW5lIEJDU1I0X1NJR05BTF9MQU1QICAgICAgICAoKHVpbnQpMHgxMDAwMDAwMCkKLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X1VTQl9FTiAgICAgICAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzg2MFNBUgotI2RlZmluZSBCQ1NSNF9VVE9QSUFfRU4gICAgICAgICAgKCh1aW50KTB4MDgwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFNBUiAqLwotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0jZGVmaW5lIEJDU1I0X0ZFVEhfRU4gICAgICAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfVVNCX1NQRUVEICAgICAgICAgICgodWludCkweDA0MDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODYwVAotI2RlZmluZSBCQ1NSNF9GRVRIQ0ZHMCAgICAgICAgICAgKCh1aW50KTB4MDQwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X1ZDQ08gICAgICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzg2MFQKLSNkZWZpbmUgQkNTUjRfRkVUSEZERSAgICAgICAgICAgICgodWludCkweDAyMDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4NjBUICovCi0jaWZkZWYgQ09ORklHX01QQzgyMwotI2RlZmluZSBCQ1NSNF9WSURFT19PTiAgICAgICAgICAgKCh1aW50KTB4MDA4MDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLwotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfVkRPX0VLVF9DTEtfRU4gICAgICgodWludCkweDAwNDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODYwVAotI2RlZmluZSBCQ1NSNF9GRVRIQ0ZHMSAgICAgICAgICAgKCh1aW50KTB4MDA0MDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X1ZJREVPX1JTVCAgICAgICAgICAoKHVpbnQpMHgwMDIwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzg2MFQKLSNkZWZpbmUgQkNTUjRfRkVUSFJTVCAgICAgICAgICAgICgodWludCkweDAwMjAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4NjBUICovCi0jaWZkZWYgQ09ORklHX01QQzgyMwotI2RlZmluZSBCQ1NSNF9NT0RFTV9FTiAgICAgICAgICAgKCh1aW50KTB4MDAxMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLwotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfREFUQV9WT0lDRSAgICAgICAgICgodWludCkweDAwMDgwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODUwCi0jZGVmaW5lIEJDU1I0X0RBVEFfVk9JQ0UgICAgICAgICAoKHVpbnQpMHgwMDA4MDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODUwICovCi0KLSNkZWZpbmUgQ09ORklHX0RSQU1fNTBNSFoJCTEKLSNkZWZpbmUgQ09ORklHX1NEUkFNXzUwTUhaICAgICAgICAgICAgICAxCi0KLS8qIFdlIGRvbid0IHVzZSB0aGUgODI1OS4KLSovCi0jZGVmaW5lIE5SXzgyNTlfSU5UUwkwCi0KLS8qIE1hY2hpbmUgdHlwZQotKi8KLSNkZWZpbmUgX01BQ0hfOHh4IChfTUFDSF9mYWRzKQotCi0jZGVmaW5lIENPTkZJR19ESVNLX1NQSU5VUF9USU1FIDEwMDAwMDAKLQotCi0vKiBQQ01DSUEgY29uZmlndXJhdGlvbiAqLwotCi0jaWZkZWYgQ09ORklHX01QQzg2MAotI2RlZmluZSBQQ01DSUFfU0xPVF9BIDEKLSNlbmRpZgotLyojZGVmaW5lIENGR19QQ01DSUFfTUVNX1NJWkUgICAgICggNjQgPDwgMjApICovCi0jZGVmaW5lIENGR19QQ01DSUFfTUVNX0FERFIJKDB4NTAwMDAwMDApCi0jZGVmaW5lIENGR19QQ01DSUFfTUVNX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENGR19QQ01DSUFfRE1BX0FERFIJKDB4NTQwMDAwMDApCi0jZGVmaW5lIENGR19QQ01DSUFfRE1BX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENGR19QQ01DSUFfQVRUUkJfQUREUgkoMHg1ODAwMDAwMCkKLSNkZWZpbmUgQ0ZHX1BDTUNJQV9BVFRSQl9TSVpFCSggNjQgPDwgMjAgKQotI2RlZmluZSBDRkdfUENNQ0lBX0lPX0FERFIJKDB4NUMwMDAwMDApCi0jZGVmaW5lIENGR19QQ01DSUFfSU9fU0laRQkoIDY0IDw8IDIwICkKLS8qIHdlIGhhdmUgOCB3aW5kb3dzLCB3ZSB0YWtlIGV2ZXJ5dGhpbmcgdXAgdG8gNjAwMDAwMDAgKi8KLQotI2RlZmluZSBDRkdfQVRBX0lERTBfT0ZGU0VUCTB4MDAwMAotCi0jZGVmaW5lIENGR19BVEFfQkFTRV9BRERSCUNGR19QQ01DSUFfTUVNX0FERFIKLQotLyogT2Zmc2V0IGZvciBkYXRhIEkvTwkJCSovCi0jZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJKENGR19QQ01DSUFfTUVNX1NJWkUgKyAweDMyMCkKLS8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzCSovCi0jZGVmaW5lIENGR19BVEFfUkVHX09GRlNFVAkoMiAqIENGR19QQ01DSUFfTUVNX1NJWkUgKyAweDMyMCkKLS8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycwkqLwotI2RlZmluZSBDRkdfQVRBX0FMVF9PRkZTRVQJMHgwMDAwCi0vKiNkZWZpbmUgQ0ZHX0FUQV9BTFRfT0ZGU0VUCTB4MDEwMCAqLwotCisjZGVmaW5lIENGR19EQVVHSFRFUkJPQVJEIC8qIEZBRFMgaGFzIHByb2Nlc3Nvci1zcGVjZmljIGRhdWdodGVyYm9hcmQgKi8KIAogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NnhBRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NnhBRFMuaAppbmRleCAxZWFjNmVmLi5hNmUyNjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODZ4QURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg2eEFEUy5oCkBAIC0zLDI0ICszLDEyIEBACiAgICogdGhlIE1vdG9yb2xhIE1QQzh4eEFEUyBib2FyZC4gIENvcGllZCBmcm9tIHRoZSBGQURTIGNvbmZpZy4KICAgKgogICAqIENvcHlyaWdodCAoYykgMTk5OCBEYW4gTWFsZWsgKGRtYWxla0BqbGMubmV0KQorICAqCisgICogTW9kaWZpZWQgYnksIFl1bGkgQmFyY29oZW4sIEFyYWJlbGxhIFNvZnR3YXJlIEx0ZC4sIHl1bGlAYXJhYmVsbGFzdy5jb20KKyAgKgorICAqIFZhbHVlcyBjb21tb24gdG8gYWxsIEZBRFMgZmFtaWx5IGJvYXJkcyBhcmUgaW4gYm9hcmQvZmFkcy9mYWRzLmgKICAgKi8KIAotLyoKLSAqIDE5OTktbm92LTI2OiBUaGUgRkFEUyBpcyB1c2luZyB0aGUgZm9sbG93aW5nIHBoeXNpY2FsIG1lbW9yeW1hcDoKLSAqCi0gKiBmZjAyMDAwMCAtPiBmZjAyZmZmZiA6IHBjbWNpYQotICogZmYwMTAwMDAgLT4gZmYwMWZmZmYgOiBCQ1NSICAgICAgIGNvbm5lY3RlZCB0byBDUzEKLSAqIGZmMDAwMDAwIC0+IGZmMDBmZmZmIDogSU1BUCAgICAgICBpbnRlcm5hbCBpbiB0aGUgY3B1Ci0gKiBmZTAwMDAwMCAtPiBmZW5ubm5ubiA6IGZsYXNoICAgICAgY29ubmVjdGVkIHRvIENTMAotICogMDAwMDAwMDAgLT4gbm5ubm5ubm4gOiBzZHJhbSAgICAgIGNvbm5lY3RlZCB0byBDUzQKLSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKLSAqLwotCiAjaWZuZGVmIF9fQ09ORklHX0gKICNkZWZpbmUgX19DT05GSUdfSAogCkBAIC0zMyw3ICsyMSw3IEBACiAjZGVmaW5lIENPTkZJR19NUEM4NnhBRFMgICAgICAgIDEgICAgICAgLyogbmV3IEFEUyAqLwogI2RlZmluZSBDT05GSUdfRkFEUwkJMSAgICAgICAvKiBXZSBhcmUgRkFEUyBjb21wYXRpYmxlIChtb3JlIG9yIGxlc3MpICovCiAKLS8qIG5ldyA4NnhBRFMgb25seSAtIHBpY2sgb25lIG9mIHRoZXNlICovCisvKiBOZXcgTVBDODZ4QURTIC0gcGljayBvbmUgb2YgdGhlc2UgKi8KICNkZWZpbmUgQ09ORklHX01QQzg2NlQgCQkxCiAjdW5kZWYgQ09ORklHX01QQzg2NlAKICN1bmRlZiBDT05GSUdfTVBDODU5VApAQCAtNDQsMzc0ICszMiwyMCBAQAogI3VuZGVmCUNPTkZJR184eHhfQ09OU19TTUMyCiAjdW5kZWYJQ09ORklHXzh4eF9DT05TX05PTkUKICNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkzODQwMAotI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZAkqLwogCi0jaWZkZWYgQ09ORklHX01QQzg2eEFEUwogIyBkZWZpbmUgQ0ZHXzhYWF9GQUNUCQk1CQkvKiBNdWx0aXBseSBieSA1CSovCiAjIGRlZmluZSBDRkdfOFhYX1hJTgkJMTAwMDAwMDAJLyogMTAgTUh6IGluCSovCi0jZWxzZSAvKiAhIENPTkZJR19NUEM4NnhBRFMgKi8KLSMgaWYgMCAvKiBvbGQgRkFEUyAqLwotIyAgZGVmaW5lIENGR184WFhfRkFDVAkJMTIJCS8qIE11bHRpcGx5IGJ5IDEyICovCi0jICBkZWZpbmUgQ0ZHXzhYWF9YSU4JCTQwMDAwMDAJCS8qIDQgTUh6IGluCSovCi0jIGVsc2UgLyogbmV3IEZBRFMgKi8KLSMgIGRlZmluZSBDRkdfOFhYX0ZBQ1QJCTEwCQkvKiBNdWx0aXBseSBieSAxMCAqLwotIyAgZGVmaW5lIENGR184WFhfWElOCQk1MDAwMDAwCQkvKiA1IE1IeiBpbgkqLwotIyBlbmRpZgotI2VuZGlmIC8qICEgQ09ORklHX01QQzg2eEFEUyAqLwotCi0jZGVmaW5lIE1QQzhYWF9IWiAoKENGR184WFhfWElOKSAqIChDRkdfOFhYX0ZBQ1QpKQotCi0vKiBzaG91bGQgQUxXQVlTIGRlZmluZSB0aGlzLCBtZWFzdXJlX2djbGsgaW4gc3BlZWQuYyBpcyB1bnJlbGlhYmxlICovCi0vKiBpbiBnZW5lcmFsLCB3ZSBhbHdheXMga25vdyB0aGlzIGZvciBGQURTK25ldyBBRFMgYW55d2F5ICovCi0jZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRICAgICBNUEM4WFhfSFoKLQotI2lmIDEKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KLSNlbHNlCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KLSNlbmRpZgotCi0jdW5kZWYJQ09ORklHX0JPT1RBUkdTCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJCQkJCQlcCi0gICAgImRoY3A7IgkJCQkJCQkJCVwKLSAgICAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKSAiCQlcCi0gICAgImlwPSQoaXBhZGRyKTokKHNlcnZlcmlwKTokKGdhdGV3YXlpcCk6JChuZXRtYXNrKTokKGhvc3RuYW1lKTo6b2ZmOyIJXAotICAgICJib290bSIKLQotI3VuZGVmCUNPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwotCi0vKiBBVEEgLyBJREUgYW5kIHBhcnRpdGlvbiBzdXBwb3J0ICovCi0jZGVmaW5lIENPTkZJR19NQUNfUEFSVElUSU9OICAgIDEKLSNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04gICAgMQotI2RlZmluZSBDT05GSUdfSVNPX1BBUlRJVElPTgkxCi0jdW5kZWYJQ09ORklHX0FUQVBJCi0jZGVmaW5lIENPTkZJR19JREVfOHh4X1BDQ0FSRAkxCS8qIFVzZSBJREUgd2l0aCBQQyBDYXJkIEFkYXB0ZXIgKi8KLSN1bmRlZglDT05GSUdfSURFXzh4eF9ESVJFQ1QJCS8qIERpcmVjdCBJREUJIG5vdCBzdXBwb3J0ZWQJKi8KLSN1bmRlZglDT05GSUdfSURFX0xFRAkJCS8qIExFRAkgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCi0jdW5kZWYJQ09ORklHX0lERV9SRVNFVAkJLyogcmVzZXQgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCi0KLS8qCi0gKiBOZXcgTVBDODZ4QURTIHByb3ZpZGVzIHR3byBFdGhlcm5ldCBjb25uZWN0aXZpdHkgb3B0aW9uczoKLSAqIDEwTWJpdC9zIG9uIFNDQzEgYW5kIDEwME1iaXQvcyBvbiBGRUMuIEFsbCBuZXcgUFExIGNoaXBzCi0gKiBoYXMgZ290IEZFQyBzbyBGRUMgaXMgdGhlIGRlZmF1bHQuCi0gKi8KLSN1bmRlZglDT05GSUdfU0NDMV9FTkVUCQkvKiBkaXNhYmxlIFNDQzEgZXRoZXJuZXQgKi8KLSNkZWZpbmUJQ09ORklHX0ZFQ19FTkVUCQkxCS8qIHVzZSBGRUMgZXRoZXJuZXQgICovCi0jaWZkZWYgQ09ORklHX0ZFQ19FTkVUCi0jZGVmaW5lIENGR19ESVNDT1ZFUl9QSFkKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NDQzFfRU5FVCkgJiYgZGVmaW5lZChDT05GSUdfRkVDX0VORVQpCi0jZXJyb3IgQm90aCBDT05GSUdfU0NDMV9FTkVUIGFuZCBDT05GSUdfRkVDX0VORVQgY29uZmlndXJlZAotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCShDT05GSUdfQ01EX0RGTCAgXAotCQkJIHwgQ0ZHX0NNRF9ESENQICBcCi0JCQkgfCBDRkdfQ01EX0lNTUFQIFwKLQkJCSB8IENGR19DTURfTUlJICAgXAotCQkJIHwgQ0ZHX0NNRF9QSU5HICBcCi0JCQkpCi0KLS8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KLSNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKLSAqLwotI3VuZGVmCUNGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLwotI2RlZmluZQlDRkdfUFJPTVBUCQkiPT4iCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQotI2RlZmluZQlDRkdfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZWxzZQotI2RlZmluZQlDRkdfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbmRpZgotI2RlZmluZQlDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ0ZHX01BWEFSR1MJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCi0jZGVmaW5lIENGR19CQVJHU0laRQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KLQotI2RlZmluZSBDRkdfTE9BRF9BRERSCSAJMHgwMDEwMDAwMAotCi0jZGVmaW5lCUNGR19IWgkJICAgICAgICAxMDAwCQkvKiBkZWNyIGZyZXE6IDEgbXMgdGlja3MgKi8KLQotI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQotCi0vKgotICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKLSAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKLSAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgotICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJbnRlcm5hbCBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgQ0ZHX0lNTVIJCTB4RkYwMDAwMDAKLSNkZWZpbmUgQ0ZHX0lNTVJfU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENGR19JTklUX1JBTV9BRERSCUNGR19JTU1SCi0jZGVmaW5lCUNGR19JTklUX1JBTV9FTkQJMHgyRjAwCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gRFBSQU0JKi8KLSNkZWZpbmUJQ0ZHX0dCTF9EQVRBX1NJWkUJNjQgIC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLwotI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lCUNGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCi0gKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCi0gKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKi8KLSNkZWZpbmUJQ0ZHX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKLSNpZiBkZWZpbmVkKENPTkZJR19NUEM4NnhBRFMpIC8qIG5ldyBBRFMgKi8KLSNkZWZpbmUJQ0ZHX1NEUkFNX1NJWkUJMHgwMDgwMDAwMCAgICAgIC8qIDggbWVnICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19GQURTKSAgICAvKiBvbGQvbmV3IEZBRFMgKi8KLSNkZWZpbmUJQ0ZHX1NEUkFNX1NJWkUJMHgwMDQwMDAwMCAgICAgIC8qIDQgbWVnICovCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbGQgQURTICovCi0jZGVmaW5lCUNGR19TRFJBTV9TSVpFCTB4MDAwMDAwMDAgICAgICAvKiBObyBTRFJBTSAqLwotI2VuZGlmCi0KLSNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMTAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNpZiAoQ0ZHX1NEUkFNX1NJWkUpCi0jZGVmaW5lIENGR19NRU1URVNUX0VORAkJQ0ZHX1NEUkFNX1NJWkUJLyogMSAuLi4gU0RSQU1fU0laRQkqLwotI2Vsc2UKLSNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDA0MDAwMDAgICAgIAkvKiAxIC4uLiA0IE1CIGluIERSQU0JKi8KLSNlbmRpZiAvKiBDRkdfU0RSQU1fU0laRSAqLwotCi0vKgotICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKLSAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAqLwotI2RlZmluZQlDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eAkqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRkxBU0ggb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCVRFWFRfQkFTRQotI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJKCh1aW50KSg4ICogMTAyNCAqIDEwMjQpKQkvKiBtYXggOE1ieXRlICovCi0KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMTYgICAgICAvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KLQotI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLwogCi0jZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQotI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDQwMDAwCS8qIHNlZSBSRUFETUUgLSBlbnYgc2VjdG9yIHRvdGFsIHNpemUJKi8KLSNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCUNGR19FTlZfU0VDVF9TSVpFCi0jZGVmaW5lCUNGR19FTlZfU0laRQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQJCSovCi0KLSNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQlDRkdfRkxBU0hfQkFTRQotI2RlZmluZQlDRkdfTU9OSVRPUl9MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IEtCIGZvciBtb25pdG9yCSovCi0jZGVmaW5lCUNGR19NQUxMT0NfTEVOCQkoMzg0IDw8IDEwKQkvKiBSZXNlcnZlIDM4NCBrQiBmb3IgbWFsbG9jKCkJKi8KKyNkZWZpbmUgQ09ORklHX0RSQU1fNTBNSFogICAgICAgMQorI2RlZmluZSBDT05GSUdfU0RSQU1fNTBNSFogICAgICAxCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENhY2hlIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJCSovCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKLSNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk0CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1lQQ1IgLSBTeXN0ZW0gUHJvdGVjdGlvbiBDb250cm9sCQkJCTExLTkKLSAqIFNZUENSIGNhbiBvbmx5IGJlIHdyaXR0ZW4gb25jZSBhZnRlciByZXNldCEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNvZnR3YXJlICYgQnVzIE1vbml0b3IgVGltZXIgbWF4LCBCdXMgTW9uaXRvciBlbmFibGUsIFNXIFdhdGNoZG9nIGZyZWV6ZQotICovCi0jaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCi0jZGVmaW5lIENGR19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLQkJCSBTWVBDUl9TV0UgIHwgU1lQQ1JfU1dSSXwgU1lQQ1JfU1dQKQotI2Vsc2UKLSNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgU1lQQ1JfU1dQKQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNJVU1DUiAtIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbgkJCQkxMS02CisgKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCTE0LTIyCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQQ01DSUEgY29uZmlnLiwgbXVsdGktZnVuY3Rpb24gcGluIHRyaS1zdGF0ZQorICogc2V0IHRoZSBQTEwsIHRoZSBsb3ctcG93ZXIgbW9kZXMgYW5kIHRoZSByZXNldCBjb250cm9sCiAgKi8KLSNkZWZpbmUgQ0ZHX1NJVU1DUgkoU0lVTUNSX0RCR0MwMCB8IFNJVU1DUl9EQlBDMDAgfCBTSVVNQ1JfTUxSQzAxKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wJCQkJMTEtMjYKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCi0gKi8KLSNkZWZpbmUgQ0ZHX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDRkdfUElTQ1IJKFBJU0NSX1BTIHwgUElTQ1JfUElURikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUExQUkNSIC0gUExMLCBMb3ctUG93ZXIsIGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0zMAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogc2V0IHRoZSBQTEwsIHRoZSBsb3ctcG93ZXIgbW9kZXMgYW5kIHRoZSByZXNldCBjb250cm9sIAkoMTUtMjkpCi0gKi8KLSNkZWZpbmUgQ0ZHX1BMUFJDUgkoKENGR184WFhfRkFDVCA8PCBQTFBSQ1JfTUZJX1NISUZUKSB8CVwKLQkJCQlQTFBSQ1JfU1BMU1MgfCBQTFBSQ1JfVEVYUFMpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNDQ1IgLSBTeXN0ZW0gQ2xvY2sgYW5kIHJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCTE1LTI3Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTZXQgY2xvY2sgb3V0cHV0LCB0aW1lYmFzZSBhbmQgUlRDIHNvdXJjZSBhbmQgZGl2aWRlciwKLSAqIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHNvbWUgb3RoZXIgaW50ZXJuYWwgY2xvY2tzCi0gKi8KLSNkZWZpbmUgU0NDUl9NQVNLCVNDQ1JfRUJERjExCi0jZGVmaW5lIENGR19TQ0NSCShTQ0NSX1RCU3xTQ0NSX0NPTTAwfFNDQ1JfREZTWU5DMDB8U0NDUl9ERkJSRzAwfFNDQ1JfREZOTDAwMHxTQ0NSX0RGTkgwMDB8U0NDUl9ERkxDRDAwMHxTQ0NSX0RGQUxDRDAwKQotCi0gLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKi8KLSNkZWZpbmUgQ0ZHX0RFUgkJIDAKLQotLyogQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSA4NjAgc3RhcnRzIHVwIGFuZCBhc3NpZ25zIENTMCB0aGUKLSogZW50aXJlIGFkZHJlc3Mgc3BhY2UsIHdlIGhhdmUgdG8gc2V0IHRoZSBtZW1vcnkgY29udHJvbGxlcgotKiBkaWZmZXJlbnRseS4gIE5vcm1hbGx5LCB5b3Ugd3JpdGUgdGhlIG9wdGlvbiByZWdpc3RlcgotKiBmaXJzdCwgYW5kIHRoZW4gZW5hYmxlIHRoZSBjaGlwIHNlbGVjdCBieSB3cml0aW5nIHRoZQotKiBiYXNlIHJlZ2lzdGVyLiAgRm9yIENTMCwgeW91IG11c3Qgd3JpdGUgdGhlIGJhc2UgcmVnaXN0ZXIKLSogZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBvcHRpb24gcmVnaXN0ZXIuCi0qLwotCi0vKgotICogSW5pdCBNZW1vcnkgQ29udHJvbGxlcjoKLSAqCi0gKiBCUjAvT1IwIChGbGFzaCkKLSAqIEJSMS9PUjEgKEJDU1IpCi0gKi8KLS8qIHRoZSBvdGhlciBDUzpzIGFyZSBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgYXQgcGFyYW1ldGVycyBpbiBCQ1NSeCAqLwotCi0jZGVmaW5lIEJDU1JfQUREUgkJKCh1aW50KSAweEZGMDEwMDAwKQotI2RlZmluZSBCQ1NSX1NJWkUJCSgodWludCkoNjQgKiAxMDI0KSkKLQotI2RlZmluZSBDRkdfUFJFTElNX09SX0FNCTB4RkY4MDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0KLS8qIEZMQVNIIHRpbWluZzogQUNTID0gMTAsIFRSTFggPSAxLCBDU05UID0gMSwgU0NZID0gMywgRUhUUiA9IDAgKi8KLSNkZWZpbmUgQ0ZHX09SX1RJTUlOR19GTEFTSAkoT1JfQ1NOVF9TQU0gIHwgT1JfQUNTX0RJVjQgfCBPUl9CSSB8IE9SX1NDWV8zX0NMSyB8IE9SX1RSTFgpCi0KLSNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JKENGR19QUkVMSU1fT1JfQU0gfCBDRkdfT1JfVElNSU5HX0ZMQVNIKSAgIC8qIDggTWJ5dGUgdW50aWwgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JKChDRkdfRkxBU0hfQkFTRSAmIEJSX0JBX01TSykgfCBCUl9WICkKLQotLyogQkNTUnggLSBCb2FyZCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCi0jZGVmaW5lIENGR19PUjFfUFJFTElNCTB4ZmZmZjgxMTAJCS8qIDY0S2J5dGUgYWRkcmVzcyBzcGFjZSAqLwotI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkoKEJDU1JfQUREUikgfCBCUl9WICkKLQotLyoKLSAqIEludGVybmFsIERlZmluaXRpb25zCi0gKgotICogQm9vdCBGbGFncwotICovCi0jZGVmaW5lCUJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KLSNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLwotCi0vKiB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwgKi8KLQotI2RlZmluZSBQQ01DSUFfTUVNX0FERFIJCSgodWludCkweGZmMDIwMDAwKQotI2RlZmluZSBQQ01DSUFfTUVNX1NJWkUJCSgodWludCkoNjQgKiAxMDI0KSkKLQotI2RlZmluZQlCQ1NSMAkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDApKQotI2RlZmluZQlCQ1NSMQkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDQpKQotI2RlZmluZQlCQ1NSMgkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDgpKQotI2RlZmluZQlCQ1NSMwkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MGMpKQotI2RlZmluZQlCQ1NSNAkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MTApKQotCi0vKiBGQURTIGJpdHZhbHVlcyBieSBIZWxtdXQgQnVjaHNiYXVtCi0gKiBzZWUgTVBDOHh4QURTIFVzZXIncyBNYW51YWwgZm9yIGEgcHJvcGVyIGRlc2NyaXB0aW9uCi0gKiBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXMKLSAqLwotCi0jZGVmaW5lIEJDU1IwX0VSQiAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfSVAgICAgICAgICgodWludCkweDQwMDAwMDAwKQotI2RlZmluZSBCQ1NSMF9CRElTICAgICAgKCh1aW50KTB4MTAwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0JQU19NQVNLICAoKHVpbnQpMHgwQzAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfSVNCX01BU0sgICgodWludCkweDAxODAwMDAwKQotI2RlZmluZSBCQ1NSMF9EQkdDX01BU0sgKCh1aW50KTB4MDA2MDAwMDApCi0jZGVmaW5lIEJDU1IwX0RCUENfTUFTSyAoKHVpbnQpMHgwMDE4MDAwMCkKLSNkZWZpbmUgQkNTUjBfRUJERl9NQVNLICgodWludCkweDAwMDYwMDAwKQotCi0jZGVmaW5lIEJDU1IxX0ZMQVNIX0VOICAgICAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRFJBTV9FTiAgICAgICAgICAgICgodWludCkweDQwMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9FVEhFTiAgICAgICAgICAgICAgKCh1aW50KTB4MjAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0lSREVOICAgICAgICAgICAgICAoKHVpbnQpMHgxMDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRkxBU0hfQ0ZHX0VOICAgICAgICgodWludCkweDA4MDAwMDAwKQotI2RlZmluZSBCQ1NSMV9DTlRfUkVHX0VOX1BST1RFQ1QgKCh1aW50KTB4MDQwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0JDU1JfRU4gICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUlMyMzJFTl8xICAgICAgICAgICgodWludCkweDAxMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NFTiAgICAgICAgICAgICAgKCh1aW50KTB4MDA4MDAwMDApCi0jZGVmaW5lIEJDU1IxX1BDQ1ZDQzAgICAgICAgICAgICAoKHVpbnQpMHgwMDQwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDVlBQX01BU0sgICAgICAgICgodWludCkweDAwMzAwMDAwKQotI2RlZmluZSBCQ1NSMV9EUkFNX0hBTEZfV09SRCAgICAgKCh1aW50KTB4MDAwODAwMDApCi0jZGVmaW5lIEJDU1IxX1JTMjMyRU5fMiAgICAgICAgICAoKHVpbnQpMHgwMDA0MDAwMCkKLSNkZWZpbmUgQkNTUjFfU0RSQU1fRU4gICAgICAgICAgICgodWludCkweDAwMDIwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NWQ0MxICAgICAgICAgICAgKCh1aW50KTB4MDAwMTAwMDApCi0KLSNkZWZpbmUgQkNTUjJfRkxBU0hfUERfTUFTSyAgICAgICgodWludCkweEYwMDAwMDAwKQotI2RlZmluZSBCQ1NSMl9EUkFNX1BEX01BU0sgICAgICAgKCh1aW50KTB4MDc4MDAwMDApCi0jZGVmaW5lIEJDU1IyX0RSQU1fUERfU0hJRlQgICAgICAoMjMpCi0jZGVmaW5lIEJDU1IyX0VYVFRPTElfTUFTSyAgICAgICAoKHVpbnQpMHgwMDc4MDAwMCkKLSNkZWZpbmUgQkNTUjJfREJSRVZOUl9NQVNLICAgICAgICgodWludCkweDAwMDMwMDAwKQotCi0jZGVmaW5lIEJDU1IzX0RCSURfTUFTSyAgICAgICAgICAoKHVzaG9ydCkweDM4MDApCi0jZGVmaW5lIEJDU1IzX0NOVF9SRUdfRU5fUFJPVEVDVCAoKHVzaG9ydCkweDA0MDApCi0jZGVmaW5lIEJDU1IzX0JSRVZOUjAgICAgICAgICAgICAoKHVzaG9ydCkweDAwODApCi0jZGVmaW5lIEJDU1IzX0ZMQVNIX1BEX01BU0sgICAgICAoKHVzaG9ydCkweDAwNzApCi0jZGVmaW5lIEJDU1IzX0JSRVZOMSAgICAgICAgICAgICAoKHVzaG9ydCkweDAwMDgpCi0jZGVmaW5lIEJDU1IzX0JSRVZOMl9NQVNLICAgICAgICAoKHVzaG9ydCkweDAwMDMpCi0KLSNkZWZpbmUgQkNTUjRfRVRITE9PUCAgICAgICAgICAgICgodWludCkweDgwMDAwMDAwKQotI2RlZmluZSBCQ1NSNF9URlBMREwgICAgICAgICAgICAgKCh1aW50KTB4NDAwMDAwMDApCi0jZGVmaW5lIEJDU1I0X1RQU1FFTCAgICAgICAgICAgICAoKHVpbnQpMHgyMDAwMDAwMCkKLSNkZWZpbmUgQkNTUjRfU0lHTkFMX0xBTVAgICAgICAgICgodWludCkweDEwMDAwMDAwKQotI2RlZmluZSBCQ1NSNF9GRVRIX0VOICAgICAgICAgICAgKCh1aW50KTB4MDgwMDAwMDApCi0jZGVmaW5lIEJDU1I0X0ZFVEhDRkcwICAgICAgICAgICAoKHVpbnQpMHgwNDAwMDAwMCkKLSNkZWZpbmUgQkNTUjRfRkVUSEZERSAgICAgICAgICAgICgodWludCkweDAyMDAwMDAwKQotI2RlZmluZSBCQ1NSNF9GRVRIQ0ZHMSAgICAgICAgICAgKCh1aW50KTB4MDA0MDAwMDApCi0jZGVmaW5lIEJDU1I0X0ZFVEhSU1QgICAgICAgICAgICAoKHVpbnQpMHgwMDIwMDAwMCkKLQotI2RlZmluZSBDT05GSUdfRFJBTV81ME1IWgkJMQotI2RlZmluZSBDT05GSUdfU0RSQU1fNTBNSFogICAgICAgICAgICAgIDEKLQotLyogV2UgZG9uJ3QgdXNlIHRoZSA4MjU5LgotKi8KLSNkZWZpbmUgTlJfODI1OV9JTlRTCTAKLQotLyogTWFjaGluZSB0eXBlCi0qLwotI2RlZmluZSBfTUFDSF84eHggKF9NQUNIX2ZhZHMpCi0KLSNkZWZpbmUgQ09ORklHX0RJU0tfU1BJTlVQX1RJTUUgMTAwMDAwMAotCi0KLS8qIFBDTUNJQSBjb25maWd1cmF0aW9uICovCi0KLSNpZmRlZiBDT05GSUdfTVBDODYwCi0jZGVmaW5lIFBDTUNJQV9TTE9UX0EgMQotI2VuZGlmCi0KLSNkZWZpbmUgQ0ZHX1BDTUNJQV9NRU1fQUREUgkoMHg1MDAwMDAwMCkKLSNkZWZpbmUgQ0ZHX1BDTUNJQV9NRU1fU0laRQkoIDY0IDw8IDIwICkKLSNkZWZpbmUgQ0ZHX1BDTUNJQV9ETUFfQUREUgkoMHg1NDAwMDAwMCkKLSNkZWZpbmUgQ0ZHX1BDTUNJQV9ETUFfU0laRQkoIDY0IDw8IDIwICkKLSNkZWZpbmUgQ0ZHX1BDTUNJQV9BVFRSQl9BRERSCSgweDU4MDAwMDAwKQotI2RlZmluZSBDRkdfUENNQ0lBX0FUVFJCX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENGR19QQ01DSUFfSU9fQUREUgkoMHg1QzAwMDAwMCkKLSNkZWZpbmUgQ0ZHX1BDTUNJQV9JT19TSVpFCSggNjQgPDwgMjAgKQotLyogd2UgaGF2ZSA4IHdpbmRvd3MsIHdlIHRha2UgZXZlcnl0aGluZyB1cCB0byA2MDAwMDAwMCAqLwotCi0jZGVmaW5lIENGR19BVEFfSURFMF9PRkZTRVQJMHgwMDAwCi0KLSNkZWZpbmUgQ0ZHX0FUQV9CQVNFX0FERFIJQ0ZHX1BDTUNJQV9NRU1fQUREUgotCi0vKiBPZmZzZXQgZm9yIGRhdGEgSS9PCQkJKi8KLSNkZWZpbmUgQ0ZHX0FUQV9EQVRBX09GRlNFVAkoQ0ZHX1BDTUNJQV9NRU1fU0laRSArIDB4MzIwKQotLyogT2Zmc2V0IGZvciBub3JtYWwgcmVnaXN0ZXIgYWNjZXNzZXMJKi8KLSNkZWZpbmUgQ0ZHX0FUQV9SRUdfT0ZGU0VUCSgyICogQ0ZHX1BDTUNJQV9NRU1fU0laRSArIDB4MzIwKQotLyogT2Zmc2V0IGZvciBhbHRlcm5hdGUgcmVnaXN0ZXJzCSovCi0jZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDAwMDAKLS8qI2RlZmluZSBDRkdfQVRBX0FMVF9PRkZTRVQJMHgwMTAwICovCisjZGVmaW5lIENGR19QTFBSQ1IgKChDRkdfOFhYX0ZBQ1QgPDwgUExQUkNSX01GSV9TSElGVCkgfCBQTFBSQ1JfVEVYUFMpCiAKKyNpbmNsdWRlICJmYWRzLmgiCiAKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUFBDaGFtZWxlb25FVkIuaCBiL2luY2x1ZGUvY29uZmlncy9QUENoYW1lbGVvbkVWQi5oCmluZGV4IDc4YWU2YmEuLjUwZThhMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QUENoYW1lbGVvbkVWQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QUENoYW1lbGVvbkVWQi5oCkBAIC01MjEsNyArNTIxLDcgQEAKICNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSAkqLwogI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdAkJCSovCiAKLSNpZiAxIC8qIHRlc3Qtb25seSAqLworCiAjZGVmaW5lIENPTkZJR19OT19TRVJJQUxfRUVQUk9NCiAvKiN1bmRlZiBDT05GSUdfTk9fU0VSSUFMX0VFUFJPTSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTY1MSwxNiArNjUxLDExIEBACiAjZGVmaW5lIFBMTF9QQ0lESVZfMyAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgUExMX1BDSURJVl80ICAgICAgICAgICAgICAgMHgwMDAwMDAwMwogCi0vKgotIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0hIFBMTCBzZXR0aW5ncyBmb3IgMjY2TUh6IENQVSwgMTMzTUh6IFBMQi9TRFJBTSwgNjZNSHogRUJDLCAzM01IeiBQQ0ksCi0hIGFzc3VtaW5nIGEgMzMuM01IeiBpbnB1dCBjbG9jayB0byB0aGUgNDA1RVAuCi0hLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0jZGVmaW5lIFBMTE1SMF8xMzNfNjZfNjZfMzMgIChQTExfQ1BVRElWXzEgfCBQTExfUExCRElWXzEgfCAgXAorLyogQ1BVIC0gUExCL1NEUkFNIC0gRUJDIC0gT1BCIC0gUENJIChhc3N1bWluZyBhIDMzLjNNSHogaW5wdXQgY2xvY2sgdG8gdGhlIDQwNUVQKSAqLworI2RlZmluZSBQTExNUjBfMTMzXzEzM18zM182Nl8zMyAgKFBMTF9DUFVESVZfMSB8IFBMTF9QTEJESVZfMSB8ICBcCiAJCQkgICAgICBQTExfT1BCRElWXzIgfCBQTExfRVhUQlVTRElWXzQgfCAgXAogCQkJICAgICAgUExMX01BTERJVl8xIHwgUExMX1BDSURJVl80KQotI2RlZmluZSBQTExNUjFfMTMzXzY2XzY2XzMzICAoUExMX0ZCS0RJVl80ICB8ICBcCisjZGVmaW5lIFBMTE1SMV8xMzNfMTMzXzMzXzY2XzMzICAoUExMX0ZCS0RJVl80ICB8ICBcCiAJCQkgICAgICBQTExfRldERElWQV82IHwgUExMX0ZXRERJVkJfNiB8ICBcCiAJCQkgICAgICBQTExfVFVORV8xNV9NXzQwIHwgUExMX1RVTkVfVkNPX0xPVykKICNkZWZpbmUgUExMTVIwXzIwMF8xMDBfNTBfMzMgKFBMTF9DUFVESVZfMSB8IFBMTF9QTEJESVZfMiB8ICBcCkBAIC02NjksMjggKzY2NCwzNiBAQAogI2RlZmluZSBQTExNUjFfMjAwXzEwMF81MF8zMyAoUExMX0ZCS0RJVl82ICB8ICBcCiAJCQkgICAgICBQTExfRldERElWQV80IHwgUExMX0ZXRERJVkJfNCB8ICBcCiAJCQkgICAgICBQTExfVFVORV8xNV9NXzQwIHwgUExMX1RVTkVfVkNPX0xPVykKLSNkZWZpbmUgUExMTVIwXzI2Nl8xMzNfNjZfMzMgKFBMTF9DUFVESVZfMSB8IFBMTF9QTEJESVZfMiB8ICBcCisjZGVmaW5lIFBMTE1SMF8yNjZfMTMzXzMzXzY2XzMzIChQTExfQ1BVRElWXzEgfCBQTExfUExCRElWXzIgfCAgXAogCQkJICAgICAgUExMX09QQkRJVl8yIHwgUExMX0VYVEJVU0RJVl80IHwgIFwKIAkJCSAgICAgIFBMTF9NQUxESVZfMSB8IFBMTF9QQ0lESVZfNCkKLSNkZWZpbmUgUExMTVIxXzI2Nl8xMzNfNjZfMzMgKFBMTF9GQktESVZfOCAgfCAgXAorI2RlZmluZSBQTExNUjFfMjY2XzEzM18zM182Nl8zMyAoUExMX0ZCS0RJVl84ICB8ICBcCiAJCQkgICAgICBQTExfRldERElWQV8zIHwgUExMX0ZXRERJVkJfMyB8ICBcCiAJCQkgICAgICBQTExfVFVORV8xNV9NXzQwIHwgUExMX1RVTkVfVkNPX0xPVykKLSNpZiAwIC8qIHRlc3Qtb25seSAqLwotI2RlZmluZSBQTExNUjBfREVGQVVMVCAgIFBMTE1SMF8yNjZfMTMzXzY2XzMzCi0jZGVmaW5lIFBMTE1SMV9ERUZBVUxUICAgUExMTVIxXzI2Nl8xMzNfNjZfMzMKLSNlbmRpZgotI2lmIDAgLyogdGVzdC1vbmx5ICovCi0jZGVmaW5lIFBMTE1SMF9ERUZBVUxUICAgUExMTVIwXzIwMF8xMDBfNTBfMzMKLSNkZWZpbmUgUExMTVIxX0RFRkFVTFQgICBQTExNUjFfMjAwXzEwMF81MF8zMwotI2VuZGlmCi0jaWYgMSAvKiB0ZXN0LW9ubHkgKi8KLSNkZWZpbmUgUExMTVIwX0RFRkFVTFQgICBQTExNUjBfMTMzXzY2XzY2XzMzCi0jZGVmaW5lIFBMTE1SMV9ERUZBVUxUICAgUExMTVIxXzEzM182Nl82Nl8zMwotI2VuZGlmCisjZGVmaW5lIFBMTE1SMF8zMzNfMTExXzM3XzU1XzU1IChQTExfQ1BVRElWXzEgfCBQTExfUExCRElWXzMgfCAgXAorCQkJICAgICAgUExMX09QQkRJVl8yIHwgUExMX0VYVEJVU0RJVl8zIHwgIFwKKwkJCSAgICAgIFBMTF9NQUxESVZfMSB8IFBMTF9QQ0lESVZfMikKKyNkZWZpbmUgUExMTVIxXzMzM18xMTFfMzdfNTVfNTUgKFBMTF9GQktESVZfMTAgIHwgIFwKKwkJCSAgICAgIFBMTF9GV0RESVZBXzMgfCBQTExfRldERElWQl8zIHwgIFwKKwkJCSAgICAgIFBMTF9UVU5FXzE1X01fNDAgfCBQTExfVFVORV9WQ09fSEkpCiAKLSNlbmRpZgorI2lmICAgKENPTkZJR19QUENIQU1FTEVPTl9NT0RVTEVfTU9ERUwgPT0gQ09ORklHX1BQQ0hBTUVMRU9OX01PRFVMRV9ISSkKKy8qIE1vZGVsIEhJICovCisjZGVmaW5lIFBMTE1SMF9ERUZBVUxUICAgUExMTVIwXzMzM18xMTFfMzdfNTVfNTUKKyNkZWZpbmUgUExMTVIxX0RFRkFVTFQgICBQTExNUjFfMzMzXzExMV8zN181NV81NQorLyogTW9kZWwgTUUgKi8KKyNlbGlmIChDT05GSUdfUFBDSEFNRUxFT05fTU9EVUxFX01PREVMID09IENPTkZJR19QUENIQU1FTEVPTl9NT0RVTEVfTUUpCisjZGVmaW5lIFBMTE1SMF9ERUZBVUxUICAgUExMTVIwXzI2Nl8xMzNfMzNfNjZfMzMKKyNkZWZpbmUgUExMTVIxX0RFRkFVTFQgICBQTExNUjFfMjY2XzEzM18zM182Nl8zMworI2Vsc2UKKy8qIE1vZGVsIEJBIChkZWZhdWx0KSAqLworI2RlZmluZSBQTExNUjBfREVGQVVMVCAgIFBMTE1SMF8xMzNfMTMzXzMzXzY2XzMzCisjZGVmaW5lIFBMTE1SMV9ERUZBVUxUICAgUExMTVIxXzEzM18xMzNfMzNfNjZfMzMKKwogI2VuZGlmCiAKKyNlbmRpZiAvKiBDT05GSUdfTk9fU0VSSUFMX0VFUFJPTSAqLworCiAjZGVmaW5lIENGR19PUEJfRlJFUQk1MDAwMDAwMAogCiAjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcmFtZnMvY3JhbWZzX2ZzLmggYi9pbmNsdWRlL2NyYW1mcy9jcmFtZnNfZnMuaAppbmRleCA3YjI5MmMwYy4uMjMzMzcwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcmFtZnMvY3JhbWZzX2ZzLmgKKysrIGIvaW5jbHVkZS9jcmFtZnMvY3JhbWZzX2ZzLmgKQEAgLTEsMTQgKzEsNiBAQAogI2lmbmRlZiBfX0NSQU1GU19ICiAjZGVmaW5lIF9fQ1JBTUZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9fCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwotCi0jZW5kaWYKLQogI2RlZmluZSBDUkFNRlNfTUFHSUMJCTB4MjhjZDNkNDUJLyogc29tZSByYW5kb20gbnVtYmVyICovCiAjZGVmaW5lIENSQU1GU19TSUdOQVRVUkUJIkNvbXByZXNzZWQgUk9NRlMiCiAKQEAgLTE2LDEyICs4LDEyIEBACiAgKiBXaWR0aCBvZiB2YXJpb3VzIGJpdGZpZWxkcyBpbiBzdHJ1Y3QgY3JhbWZzX2lub2RlLgogICogUHJpbWFyaWx5IHVzZWQgdG8gZ2VuZXJhdGUgd2FybmluZ3MgaW4gbWtjcmFtZnMuCiAgKi8KLSNkZWZpbmUgQ1JBTUZTX01PREVfV0lEVEggMTYKLSNkZWZpbmUgQ1JBTUZTX1VJRF9XSURUSCAxNgotI2RlZmluZSBDUkFNRlNfU0laRV9XSURUSCAyNAotI2RlZmluZSBDUkFNRlNfR0lEX1dJRFRIIDgKLSNkZWZpbmUgQ1JBTUZTX05BTUVMRU5fV0lEVEggNgotI2RlZmluZSBDUkFNRlNfT0ZGU0VUX1dJRFRIIDI2CisjZGVmaW5lIENSQU1GU19NT0RFX1dJRFRICTE2CisjZGVmaW5lIENSQU1GU19VSURfV0lEVEgJMTYKKyNkZWZpbmUgQ1JBTUZTX1NJWkVfV0lEVEgJMjQKKyNkZWZpbmUgQ1JBTUZTX0dJRF9XSURUSAk4CisjZGVmaW5lIENSQU1GU19OQU1FTEVOX1dJRFRICTYKKyNkZWZpbmUgQ1JBTUZTX09GRlNFVF9XSURUSAkyNgogCiAvKgogICogU2luY2UgaW5vZGUubmFtZWxlbiBpcyBhIHVuc2lnbmVkIDYtYml0IG51bWJlciwgdGhlIG1heGltdW0gY3JhbWZzCkBAIC0zNCw4ICsyNiwxMCBAQAogICovCiBzdHJ1Y3QgY3JhbWZzX2lub2RlIHsKIAl1MzIgbW9kZTpDUkFNRlNfTU9ERV9XSURUSCwgdWlkOkNSQU1GU19VSURfV0lEVEg7CisKIAkvKiBTSVpFIGZvciBkZXZpY2UgZmlsZXMgaXMgaV9yZGV2ICovCiAJdTMyIHNpemU6Q1JBTUZTX1NJWkVfV0lEVEgsIGdpZDpDUkFNRlNfR0lEX1dJRFRIOworCiAJLyogTkFNRUxFTiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIG5hbWUsIGRpdmlkZWQgYnkgNCBhbmQKIAkgICByb3VuZGVkIHVwLgkoY3JhbWZzIGRvZXNuJ3Qgc3VwcG9ydCBoYXJkIGxpbmtzLikgKi8KIAkvKiBPRkZTRVQ6IEZvciBzeW1saW5rcyBhbmQgbm9uLWVtcHR5IHJlZ3VsYXIgZmlsZXMsIHRoaXMKQEAgLTkwLDkgKzg0LDUzIEBACiAJCQkJfCBDUkFNRlNfRkxBR19XUk9OR19TSUdOQVRVUkUgXAogCQkJCXwgQ1JBTUZTX0ZMQUdfU0hJRlRFRF9ST09UX09GRlNFVCApCiAKKy8qCisgKiBTaW5jZSBjcmFtZnMgaXMgbGl0dGxlLWVuZGlhbiwgcHJvdmlkZSBtYWNyb3MgdG8gc3dhYiB0aGUgYml0ZmllbGRzLgorICovCisKKyNpZm5kZWYgX19CWVRFX09SREVSCisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pICYmICFkZWZpbmVkKF9fQklHX0VORElBTikKKyNkZWZpbmUgX19CWVRFX09SREVSIF9fTElUVExFX0VORElBTgorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pICYmICFkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyNkZWZpbmUgX19CWVRFX09SREVSIF9fQklHX0VORElBTgorI2Vsc2UKKyNlcnJvciAidW5hYmxlIHRvIGRlZmluZSBfX0JZVEVfT1JERVIiCisjZW5kaWYKKyNlbmRpZiAvKiBub3QgX19CWVRFX09SREVSICovCisKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIENSQU1GU18xNih4KQkoeCkKKyNkZWZpbmUgQ1JBTUZTXzI0KHgpCSh4KQorI2RlZmluZSBDUkFNRlNfMzIoeCkJKHgpCisjZGVmaW5lIENSQU1GU19HRVRfTkFNRUxFTih4KQkoKHgpLT5uYW1lbGVuKQorI2RlZmluZSBDUkFNRlNfR0VUX09GRlNFVCh4KQkoKHgpLT5vZmZzZXQpCisjZGVmaW5lIENSQU1GU19TRVRfT0ZGU0VUKHgseSkJKCh4KS0+b2Zmc2V0ID0gKHkpKQorI2RlZmluZSBDUkFNRlNfU0VUX05BTUVMRU4oeCx5KSAoKHgpLT5uYW1lbGVuID0gKHkpKQorI2VsaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgQ1JBTUZTXzE2KHgpCXN3YWIxNih4KQorI2RlZmluZSBDUkFNRlNfMjQoeCkJKChzd2FiMzIoeCkpID4+IDgpCisjZGVmaW5lIENSQU1GU18zMih4KQlzd2FiMzIoeCkKKyNlbHNlIC8qIG5vdCBfX0tFUk5FTF9fICovCisjZGVmaW5lIENSQU1GU18xNih4KQlic3dhcF8xNih4KQorI2RlZmluZSBDUkFNRlNfMjQoeCkJKChic3dhcF8zMih4KSkgPj4gOCkKKyNkZWZpbmUgQ1JBTUZTXzMyKHgpCWJzd2FwXzMyKHgpCisjZW5kaWYgLyogbm90IF9fS0VSTkVMX18gKi8KKyNkZWZpbmUgQ1JBTUZTX0dFVF9OQU1FTEVOKHgpCSgoKHU4KikoeCkpWzhdICYgMHgzZikKKyNkZWZpbmUgQ1JBTUZTX0dFVF9PRkZTRVQoeCkJKChDUkFNRlNfMjQoKCh1MzIqKSh4KSlbMl0gJiAweGZmZmZmZikgPDwgMikgfFwKKwkJCQkgKCgoKHUzMiopKHgpKVsyXSAmIDB4YzAwMDAwMDApID4+IDMwKSkKKyNkZWZpbmUgQ1JBTUZTX1NFVF9OQU1FTEVOKHgseSkgKCgodTgqKSh4KSlbOF0gPSAoKCgweDNmICYgKHkpKSkgfCBcCisJCQkJCQkgICgweGMwICYgKCh1OCopKHgpKVs4XSkpKQorI2RlZmluZSBDUkFNRlNfU0VUX09GRlNFVCh4LHkpCSgoKHUzMiopKHgpKVsyXSA9ICgoKHkpICYgMykgPDwgMzApIHwgXAorCQkJCSBDUkFNRlNfMjQoKCgoeSkgJiAweDAzZmZmZmZmKSA+PiAyKSkgfCBcCisJCQkJICgoKHUzMikoKCh1OCopKHgpKVs4XSAmIDB4M2YpKSA8PCAyNCkpCisjZWxzZQorI2Vycm9yICJfX0JZVEVfT1JERVIgbXVzdCBiZSBfX0xJVFRMRV9FTkRJQU4gb3IgX19CSUdfRU5ESUFOIgorI2VuZGlmCisKIC8qIFVuY29tcHJlc3Npb24gaW50ZXJmYWNlcyB0byB0aGUgdW5kZXJseWluZyB6bGliICovCi1pbnQgY3JhbWZzX3VuY29tcHJlc3NfYmxvY2sodm9pZCAqZHN0LCBpbnQgZHN0bGVuLCB2b2lkICpzcmMsIGludCBzcmNsZW4pOworaW50IGNyYW1mc191bmNvbXByZXNzX2Jsb2NrKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgc3JjbGVuKTsKIGludCBjcmFtZnNfdW5jb21wcmVzc19pbml0KHZvaWQpOwogaW50IGNyYW1mc191bmNvbXByZXNzX2V4aXQodm9pZCk7CiAKLSNlbmRpZgorI2VuZGlmCS8qIF9fQ1JBTUZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvamZmczIvamZmczIuaCBiL2luY2x1ZGUvamZmczIvamZmczIuaAppbmRleCA0YmRjNTI1Li5kZWU0M2E2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2pmZnMyL2pmZnMyLmgKKysrIGIvaW5jbHVkZS9qZmZzMi9qZmZzMi5oCkBAIC0yMDIsNCArMjAyLDUgQEAKIGxvbmcgemxpYl9kZWNvbXByZXNzKHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4sIHVuc2lnbmVkIGNoYXIgKmNwYWdlX291dCwKIAkgICAgICAgICAgICAgICAgICAgICAgX191MzIgc3JjbGVuLCBfX3UzMiBkZXN0bGVuKTsKIAorY2hhciAqbWttb2Rlc3RyKHVuc2lnbmVkIGxvbmcgbW9kZSwgY2hhciAqc3RyKTsKICNlbmRpZiAvKiBfX0xJTlVYX0pGRlMyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tcGM4eHguaCBiL2luY2x1ZGUvbXBjOHh4LmgKaW5kZXggODQ3YzJiNC4uMzk3NjEyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tcGM4eHguaAorKysgYi9pbmNsdWRlL21wYzh4eC5oCkBAIC0xMzIsMTAgKzEzMiwxNSBAQAogI2RlZmluZSBSU1JfQUxMQklUUwkoUlNSX0pUUlN8UlNSX0RCU1JTfFJTUl9EQkhSU3xSU1JfQ1NSU3xSU1JfU1dSU3xSU1JfTExSU3xSU1JfRVNSU3xSU1JfRUhSUykKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTmV3ZXIgY2hpcHMgKE1QQzg2NiBmYW1pbHkgYW5kIE1QQzg3eC84OHggZmFtaWx5KSBoYXZlIGRpZmZlcmVudAorICogY2xvY2sgZGlzdHJpYnV0aW9uIHN5c3RlbS4gVGhlaXIgSU1NUiBsb3dlciBoYWxmIGlzID49IDB4MDgwMAorICovCisjZGVmaW5lIE1QQzh4eF9ORVdfQ0xLIDB4MDgwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCQkxNS0zMAogICovCi0jaWZkZWYgQ09ORklHX01QQzg2Nl9ldF9hbAotI2RlZmluZSBQTFBSQ1JfTUZfTVNLCTB4RkZGRjAwMUUJLyogTXVsdGlwbGljYXRpb24gZmFjdG9yICsgUERGIGJpdHMJKi8KKy8qIE5ld2VyIGNoaXBzIChNUEM4NjYvODd4Lzg4eCBldCBhbCkgZGVmaW5lcyAqLwogI2RlZmluZSBQTFBSQ1JfTUZOX01TSwkweEY4MDAwMDAwCS8qIE11bHRpcGxpY2F0aW9uIGZhY3RvciBudW1lcmF0b3IgYml0cyAqLwogI2RlZmluZSBQTFBSQ1JfTUZOX1NISUZUCTI3CS8qIE11bHRpcGxpY2F0aW9uIGZhY3RvciBudW1lcmF0b3Igc2hpZnQqLwogI2RlZmluZSBQTFBSQ1JfTUZEX01TSwkweDA3QzAwMDAwCS8qIE11bHRpcGxpY2F0aW9uIGZhY3RvciBkZW5vbWluYXRvciBiaXRzICovCkBAIC0xNDQsMzIgKzE0OSwzOSBAQAogI2RlZmluZSBQTFBSQ1JfU19TSElGVAkJMjAJLyogTXVsdGlwbGljYXRpb24gZmFjdG9yIGludGVnZXIgc2hpZnQJKi8KICNkZWZpbmUgUExQUkNSX01GSV9NU0sJMHgwMDBGMDAwMAkvKiBNdWx0aXBsaWNhdGlvbiBmYWN0b3IgaW50ZWdlciBiaXRzCSovCiAjZGVmaW5lIFBMUFJDUl9NRklfU0hJRlQJMTYJLyogTXVsdGlwbGljYXRpb24gZmFjdG9yIGludGVnZXIgc2hpZnQJKi8KLSNlbHNlCisKKyNkZWZpbmUgUExQUkNSX1BERl9NU0sJMHgwMDAwMDAxRQkvKiBQcmVkaXZpc2lvbiBGYWN0b3IgYml0cwkJKi8KKyNkZWZpbmUgUExQUkNSX1BERl9TSElGVAkgMQkvKiBQcmVkaXZpc2lvbiBGYWN0b3Igc2hpZnQgdmFsdWUJKi8KKyNkZWZpbmUgUExQUkNSX0RCUk1PCTB4MDAwMDAwMDEJLyogRFBMTCBCUk0gT3JkZXIgYml0CQkJKi8KKworLyogTXVsdGlwbGljYXRpb24gZmFjdG9yICsgUERGIGJpdHMgKi8KKyNkZWZpbmUgUExQUkNSX01GQUNUX01TSyAoUExQUkNSX01GTl9NU0sgfCBcCisJCQkgIFBMUFJDUl9NRkRfTVNLIHwgXAorCQkJICBQTFBSQ1JfU19NU0sJIHwgXAorCQkJICBQTFBSQ1JfTUZJX01TSyB8IFwKKwkJCSAgUExQUkNSX1BERl9NU0spCisKKy8qIE9sZGVyIGNoaXBzIChNUEM4NjAvODYyIGV0IGFsKSBkZWZpbmVzICovCiAjZGVmaW5lIFBMUFJDUl9NRl9NU0sJMHhGRkYwMDAwMAkvKiBNdWx0aXBsaWNhdGlvbiBmYWN0b3IgYml0cwkJKi8KICNkZWZpbmUgUExQUkNSX01GX1NISUZUCQkyMAkvKiBNdWx0aXBsaWNhdGlvbiBmYWN0b3Igc2hpZnQgdmFsdWUJKi8KLSNlbmRpZgorCiAjZGVmaW5lIFBMUFJDUl9TUExTUwkweDAwMDA4MDAwCS8qIFNQTEwgTG9jayBTdGF0dXMgU3RpY2t5IGJpdAkJKi8KLSNkZWZpbmUgUExQUkNSX1RFWFBTCTB4MDAwMDQwMDAJLyogVEVYUCBTdGF0dXMJCQkJKi8KLSNpZm5kZWYgQ09ORklHX01QQzg2Nl9ldF9hbAogI2RlZmluZSBQTFBSQ1JfVE1JU1QJMHgwMDAwMTAwMAkvKiBUaW1lcnMgSW50ZXJydXB0IFN0YXR1cwkJKi8KLSNlbmRpZgotI2RlZmluZSBQTFBSQ1JfQ1NSQwkweDAwMDAwNDAwCS8qIENsb2NrIFNvdXJjZQkJCQkqLwotI2lmbmRlZiBDT05GSUdfTVBDODY2X2V0X2FsCisKICNkZWZpbmUgUExQUkNSX0xQTV9NU0sJMHgwMDAwMDMwMAkvKiBMb3cgUG93ZXIgTW9kZSBtYXNrCQkJKi8KICNkZWZpbmUgUExQUkNSX0xQTV9OT1JNQUwgMHgwMDAwMDAwMAkvKiBub3JtYWwgcG93ZXIgbWFuYWdlbWVudCBtb2RlCQkqLwogI2RlZmluZSBQTFBSQ1JfTFBNX0RPWkUJICAweDAwMDAwMTAwCS8qIGRvemUgcG93ZXIgbWFuYWdlbWVudCBtb2RlCQkqLwogI2RlZmluZSBQTFBSQ1JfTFBNX1NMRUVQICAweDAwMDAwMjAwCS8qIHNsZWVwIHBvd2VyIG1hbmFnZW1lbnQgbW9kZQkJKi8KICNkZWZpbmUgUExQUkNSX0xQTV9ERUVQX1NMRUVQIDB4MDAwMDAzMDAgLyogZGVlcCBzbGVlcCBwb3dlciBtZ3QgbW9kZQkJKi8KICNkZWZpbmUgUExQUkNSX0xQTV9ET1dOCSAgMHgwMDAwMDMwMAkvKiBkb3duIHBvd2VyIG1hbmFnZW1lbnQgbW9kZQkJKi8KLSNlbmRpZgorCisvKiBDb21tb24gZGVmaW5lcyAqLworI2RlZmluZSBQTFBSQ1JfVEVYUFMJMHgwMDAwNDAwMAkvKiBURVhQIFN0YXR1cwkJCQkqLworI2RlZmluZSBQTFBSQ1JfQ1NSQwkweDAwMDAwNDAwCS8qIENsb2NrIFNvdXJjZQkJCQkqLworCiAjZGVmaW5lIFBMUFJDUl9DU1IJMHgwMDAwMDA4MAkvKiBDaGVza1N0b3AgUmVzZXQgdmFsdWUJCSovCiAjZGVmaW5lIFBMUFJDUl9MT0xSRQkweDAwMDAwMDQwCS8qIExvc3MgT2YgTG9jayBSZXNldCBFbmFibGUJCSovCiAjZGVmaW5lIFBMUFJDUl9GSU9QRAkweDAwMDAwMDIwCS8qIEZvcmNlIEkvTyBQdWxsIERvd24JCQkqLwotI2lmZGVmIENPTkZJR19NUEM4NjZfZXRfYWwKLSNkZWZpbmUgUExQUkNSX1BERl9NU0sJMHgwMDAwMDAxRQkvKiBQcmVkaXZpc2lvbiBGYWN0b3IgYml0cwkJKi8KLSNkZWZpbmUgUExQUkNSX1BERl9TSElGVAkgMQkvKiBQcmVkaXZpc2lvbiBGYWN0b3Igc2hpZnQgdmFsdWUJKi8KLSNkZWZpbmUgUExQUkNSX0RCUk1PCTB4MDAwMDAwMDEJLyogRFBMTCBCUk0gT3JkZXIgYml0CQkJKi8KLSNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQkJMTUtMjcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmlvcy1pby5oIGIvaW5jbHVkZS9uaW9zLWlvLmgKaW5kZXggMTFmZjc4ZC4uNjRkYTkyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uaW9zLWlvLmgKKysrIGIvaW5jbHVkZS9uaW9zLWlvLmgKQEAgLTEzNiw0ICsxMzYsMzUgQEAKICNkZWZpbmUgTklPU19TUElfSUUJCSgxIDw8IDgpCS8qIGV4Y2VwdGlvbiBpbnQgZW5hICovCiAjZGVmaW5lIE5JT1NfU1BJX1NTTwkJKDEgPDwgMTApCS8qIG92ZXJyaWRlIFNTX24gb3V0cHV0ICovCiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBU01JCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3Qgbmlvc19hc21pX3QgeworCXVuc2lnbmVkCXJ4ZGF0YTsJCS8qIFJ4IGRhdGEgcmVnICovCisJdW5zaWduZWQJdHhkYXRhOwkJLyogVHggZGF0YSByZWcgKi8KKwl1bnNpZ25lZAlzdGF0dXM7CQkvKiBTdGF0dXMgcmVnICovCisJdW5zaWduZWQJY29udHJvbDsJLyogQ29udHJvbCByZWcgKi8KKwl1bnNpZ25lZAlyZXNlcnZlZDsKKwl1bnNpZ25lZAlzbGF2ZXNlbDsJLyogU2xhdmUgc2VsZWN0ICovCisJdW5zaWduZWQJZW5kb2ZwYWNrZXQ7CS8qIEVuZC1vZi1wYWNrZXQgcmVnICovCit9bmlvc19hc21pX3Q7CisKKy8qIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBOSU9TX0FTTUlfUk9FCQkoMSA8PCAzKQkvKiByeCBvdmVycnVuICovCisjZGVmaW5lIE5JT1NfQVNNSV9UT0UJCSgxIDw8IDQpCS8qIHR4IG92ZXJydW4gKi8KKyNkZWZpbmUgTklPU19BU01JX1RNVAkJKDEgPDwgNSkJLyogdHggZW1wdHkgKi8KKyNkZWZpbmUgTklPU19BU01JX1RSRFkJCSgxIDw8IDYpCS8qIHR4IHJlYWR5ICovCisjZGVmaW5lIE5JT1NfQVNNSV9SUkRZCQkoMSA8PCA3KQkvKiByeCByZWFkeSAqLworI2RlZmluZSBOSU9TX0FTTUlfRQkJKDEgPDwgOCkJLyogZXhjZXB0aW9uICovCisjZGVmaW5lIE5JT1NfQVNNSV9FT1AJCSgxIDw8IDkpCS8qIGVvcCBkZXRlY3RlZCAqLworCisvKiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIE5JT1NfQVNNSV9JUk9FCQkoMSA8PCAzKQkvKiByeCBvdmVycnVuIGludCBlbmEgKi8KKyNkZWZpbmUgTklPU19BU01JX0lUT0UJCSgxIDw8IDQpCS8qIHR4IG92ZXJydW4gaW50IGVuYSAqLworI2RlZmluZSBOSU9TX0FTTUlfSVRSRFkJCSgxIDw8IDYpCS8qIHR4IHJlYWR5IGludCBlbmEgKi8KKyNkZWZpbmUgTklPU19BU01JX0lSUkRZCQkoMSA8PCA3KQkvKiByeCByZWFkeSBpbnQgZW5hICovCisjZGVmaW5lIE5JT1NfQVNNSV9JRQkJKDEgPDwgOCkJLyogZXhjZXB0aW9uIGludCBlbmEgKi8KKyNkZWZpbmUgTklPU19BU01JX0lFT1AJCSgxIDw8IDkpCS8qIHJ4IGVvcCBpbnQgZW5hICovCisjZGVmaW5lIE5JT1NfQVNNSV9TU08JCSgxIDw8IDEwKQkvKiBzbGF2ZSBzZWxlY3QgZW5hYmxlICovCisKICNlbmRpZiAvKiBfX05JT1NJT19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhLmggYi9pbmNsdWRlL3BjbWNpYS5oCmluZGV4IDM4OGIxNDkuLjMwODBiZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhLmgKKysrIGIvaW5jbHVkZS9wY21jaWEuaApAQCAtNDAsMTAgKzQwLDEwIEBACiAJCQkJCS8qIFRoZSBSUFggc2VyaWVzIHVzZSBTTE9UX0IJKi8KICNpZiBkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKSB8fCBkZWZpbmVkKENPTkZJR19SUFhMSVRFKQogIyBkZWZpbmUgQ09ORklHX1BDTUNJQV9TTE9UX0IKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FEUykJCS8qIFRoZSBBRFMgIGJvYXJkIHVzZSBTTE9UX0EJKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FEUykJCS8qIFRoZSBBRFMgIGJvYXJkIHVzZXMgU0xPVF9BCSovCiAjIGRlZmluZSBDT05GSUdfUENNQ0lBX1NMT1RfQQogI2VsaWYgZGVmaW5lZChDT05GSUdfRkFEUykJCS8qIFRoZSBGQURTIHNlcmllcyBhcmUgYSBtZXNzCSovCi0jIGlmIGRlZmluZWQoQ09ORklHX01QQzg2eCB8fCBkZWZpbmVkKENPTkZJR19NUEM4MjEpCisjIGlmIGRlZmluZWQoQ09ORklHX01QQzg2eCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODIxKQogIyAgZGVmaW5lIENPTkZJR19QQ01DSUFfU0xPVF9BCiAjIGVsc2UKICMgIGRlZmluZSBDT05GSUdfUENNQ0lBX1NMT1RfQgo=