LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgovKgogKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKICovCgojaWZuZGVmIF9fQ09ORklHX0gKI2RlZmluZSBfX0NPTkZJR19ICgojZGVmaW5lIEdSVVNTX1RFU1RJTkcKLyoKICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICogKGVhc3kgdG8gY2hhbmdlKQogKi8KCiNkZWZpbmUgQ09ORklHX1g4NgkJMQkvKiBUaGlzIGlzIGEgWDg2IENQVQkJKi8KI2RlZmluZSBDT05GSUdfU0M1MjAJCTEJLyogSW5jbHVkZSBzdXBwb3J0IGZvciBBTUQgU0M1MjAgKi8KI2RlZmluZSBDT05GSUdfQUxJMTUyWAkJMQkvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIEFsaSAxNTJ4IFNJTyAqLwoKI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX1BSRUNIQVJHRV9ERUxBWSA2ICAgICAvKiA2VCAqLwojZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fUkVGUkVTSF9SQVRFICAgIDc4ICAgIC8qIDcuOHVTIChjaG9pY2VzIGFyZSA3LjgsIDE1LjYsIDMxLjIgb3IgNjIuNXVTKSAqLwojZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fUkFTX0NBU19ERUxBWSAgIDMgICAgIC8qIDNUICovCgovKiBkZWZpbmUgYXQgbW9zdCBvbmUgb2YgdGhlc2UgKi8KI3VuZGVmIENPTkZJR19TWVNfU0RSQU1fQ0FTX0xBVEVOQ1lfMlQKI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0NBU19MQVRFTkNZXzNUCgojZGVmaW5lIENPTkZJR19TWVNfU0M1MjBfSElHSF9TUEVFRCAgICAwICAgICAgIC8qIDEwMCBvciAxMzNNSHogKi8KI3VuZGVmICBDT05GSUdfU1lTX1JFU0VUX1NDNTIwICAgICAgICAgICAgICAgICAvKiB1c2UgU0M1MjAgTU1DUidzIHRvIHJlc2V0IGNwdSAqLwojdW5kZWYgIENPTkZJR19TWVNfVElNRVJfU0M1MjAgICAgICAgICAgICAgICAgIC8qIHVzZSBTQzUyMCBzd3RpbWVycyAqLwojZGVmaW5lIENPTkZJR19TWVNfVElNRVJfR0VORVJJQyAgICAgICAxICAgICAgIC8qIHVzZSB0aGUgaTgyNTQgUElUIHRpbWVycyAqLwojdW5kZWYgIENPTkZJR19TWVNfVElNRVJfVFNDICAgICAgICAgICAgICAgICAgIC8qIHVzZSB0aGUgUGVudGl1bSBUU0MgdGltZXJzICovCiNkZWZpbmUgIENPTkZJR19TWVNfVVNFX1NJT19VQVJUICAgICAgIDAgICAgICAgLyogcHJlZmVyIHRoZSB1YXJ0cyBvbiB0aGUgU0lPIHRvIHRob3NlCgkJCQkJICogaW4gdGhlIFNDNTIwIG9uIHRoZSBDRFAgKi8KCiNkZWZpbmUgQ09ORklHX1NZU19TVEFDS19TSVpFICAgICAgICAgIDB4ODAwMCAgLyogU2l6ZSBvZiBib290bG9hZGVyIHN0YWNrICovCgojZGVmaW5lIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MgMQojZGVmaW5lIENPTkZJR19MQVNUX1NUQUdFX0lOSVQgICAgMQoKLyoKICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAqLwojZGVmaW5lIENPTkZJR19NQUxMT0NfU0laRQkoQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQpCgojZGVmaW5lIENPTkZJR19CQVVEUkFURQkJOTYwMAoKLyoKICogQk9PVFAgb3B0aW9ucwogKi8KI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCiNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICiNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKCgovKgogKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KICovCiNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KCiNkZWZpbmUgQ09ORklHX0NNRF9QQ0kKI2lmbmRlZiBHUlVTU19URVNUSU5HCiNkZWZpbmUgQ09ORklHX0NNRF9TQVRBCiNlbHNlCiN1bmRlZiBDT05GSUdfQ01EX1NBVEEKI2VuZGlmCiNkZWZpbmUgQ09ORklHX0NNRF9KRkZTMgojZGVmaW5lIENPTkZJR19DTURfTkVUCiNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KCiNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkxNQojZGVmaW5lIENPTkZJR19CT09UQVJHUwkJInJvb3Q9L2Rldi9tdGRibG9jazAgY29uc29sZT10dHlTMCw5NjAwIgovKiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gMzgwMDAwMDAiICovCgojaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCiNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTE1MjAwCQkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLwojZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCQkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KI2VuZGlmCgovKgogKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCiAqLwojZGVmaW5lCUNPTkZJR19TWVNfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCiNkZWZpbmUJQ09ORklHX1NZU19QUk9NUFQJCSJib290ID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCiNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KI2RlZmluZQlDT05GSUdfU1lTX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwojZGVmaW5lIENPTkZJR19TWVNfQkFSR1NJWkUJCUNPTkZJR19TWVNfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KCiNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDAxMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkqLwojZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4MDEwMDAwMDAJLyogMSAuLi4gMTYgTUIgaW4gRFJBTQkqLwoKI3VuZGVmICBDT05GSUdfU1lTX0NMS1NfSU5fSFoJCS8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KCiNkZWZpbmUJQ09ORklHX1NZU19MT0FEX0FERFIJCTB4MTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCSovCgojZGVmaW5lCUNPTkZJR19TWVNfSFoJCQkxMDI0CQkvKiBpbmNyZW1lbnRlciBmcmVxOiAxa0h6ICovCgoJCQkJCQkvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUGh5c2ljYWwgTWVtb3J5IE1hcAogKi8KI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwk0CSAgIC8qIHdlIGhhdmUgNCBiYW5rcyBvZiBEUkFNICovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KICovCiNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMwkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTY0CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwoKLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCiNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCSgyKkNPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCiNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCSgyKkNPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCgojZGVmaW5lIENPTkZJR19TUElfRUVQUk9NICAgICAgLyogU3VwcG9ydCBmb3IgU1BJIEVFUFJPTXMgKEFUMjUxMjgpICovCiNkZWZpbmUgQ09ORklHX01XX0VFUFJPTSAgICAgICAvKiBTdXBwb3J0IGZvciBNaWNyb1dpcmUgRUVQUk9NcyAoQVQ5M0xDNDYpICovCgovKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCiNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKCi8qIEVudmlyb25tZW50IGluIEVFUFJPTSAqLwojZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRUVQUk9NICAgMQojZGVmaW5lIENPTkZJR19TUEkKI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJICAgICAgIDB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IEVFUFJPTSAxNmsgaXMgU1BJIGlzIHVzZWQgb3IgMTI4IGJ5dGVzIGlmIE1XIGlzIHVzZWQqLwojZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUICAgICAgICAgMAojZGVmaW5lIENPTkZJR19TQzUyMF9DRFBfVVNFX1NQSSAgLyogU3RvcmUgY29uZmlndXJhdGlvbiBpbiB0aGUgU1BJIHBhcnQgKi8KI3VuZGVmIENPTkZJR19TQzUyMF9DRFBfVVNFX01XICAgIC8qIFN0b3JlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIE1pY3JvV2lyZSBwYXJ0ICovCiNkZWZpbmUgQ09ORklHX1NQSV9YIDEKCi8qCiAqIEpGRlMyIHBhcnRpdGlvbnMKICovCi8qIE5vIGNvbW1hbmQgbGluZSwgb25lIHN0YXRpYyBwYXJ0aXRpb24sIHdob2xlIGRldmljZSAqLwojdW5kZWYgQ09ORklHX0pGRlMyX0NNRExJTkUKI2RlZmluZSBDT05GSUdfSkZGUzJfREVWCQkibm9yMCIKI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCQkweEZGRkZGRkZGCiNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCTB4MDAwMDAwMDAKCi8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCi8qCiNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9U0M1MjBDRFAgRmxhc2ggQmFuayAjMCIKI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1TQzUyMENEUCBGbGFzaCBCYW5rICMwOi0oamZmczIpIgoqLwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBEZXZpY2UgZHJpdmVycwogKi8KI2RlZmluZSBDT05GSUdfTkVUX01VTFRJICAgICAgICAvKiBNdWx0aSBldGhlcm5ldCBjYXJkcyBzdXBwb3J0ICovCiNkZWZpbmUgQ09ORklHX1BDTkVUCiNkZWZpbmUgQ09ORklHX1BDTkVUXzc5Qzk3MwojZGVmaW5lIENPTkZJR19QQ05FVF83OUM5NzUKI2RlZmluZSBQQ05FVF9IQVNfUFJPTSAgICAgICAgIDEKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKlNBVEEvTmF0aXZlIFN0dWZmCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmbmRlZiBHUlVTU19URVNUSU5HCiNkZWZpbmUgQ09ORklHX1NZU19TQVRBX01BWEJVUyAgICAgICAgIDIgICAgICAgLypNYXggU2F0YSBidXNlcyBzdXBwb3J0ZWQgKi8KI2RlZmluZSBDT05GSUdfU1lTX1NBVEFfREVWU19QRVJfQlVTICAgMiAgICAgIC8qTWF4IG5vLiBvZiBkZXZpY2VzIHBlciBidXMvcG9ydCAqLwojZGVmaW5lIENPTkZJR19TWVNfU0FUQV9NQVhfREVWSUNFICAgICAoQ09ORklHX1NZU19TQVRBX01BWEJVUyogQ09ORklHX1NZU19TQVRBX0RFVlNfUEVSX0JVUykKI2RlZmluZSBDT05GSUdfQVRBX1BJSVgJCTEgICAgICAgLypTdXBwb3J0cyBhdGFfcGlpeCBkcml2ZXIgKi8KI2Vsc2UKI3VuZGVmIENPTkZJR19TWVNfU0FUQV9NQVhCVVMKI3VuZGVmIENPTkZJR19TWVNfU0FUQV9ERVZTX1BFUl9CVVMKI3VuZGVmIENPTkZJR19TWVNfU0FUQV9NQVhfREVWSUNFCiN1bmRlZiBDT05GSUdfQVRBX1BJSVgKI2VuZGlmCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBESVNLIFBhcnRpdGlvbiBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgojZGVmaW5lIENPTkZJR19JU09fUEFSVElUSU9OIC8qIEV4cGVyaW1lbnRhbCAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBWaWRlby9LZXlib2FyZCBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZm5kZWYgR1JVU1NfVEVTVElORwojZGVmaW5lIENPTkZJR19WSURFTwkJCS8qIFRvIGVuYWJsZSB2aWRlbyBjb250cm9sbGVyIHN1cHBvcnQgKi8KI2Vsc2UKI3VuZGVmIENPTkZJR19WSURFTwojZW5kaWYKI2RlZmluZSBDT05GSUdfSTgwNDJfS0JECiNkZWZpbmUgQ09ORklHX1NZU19JU0FfSU8gMAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBSVEMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIENPTkZJR19SVENfTUMxNDY4MTgKI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwoKLyoKICogUENJIHN0dWZmCiAqLwojaWZuZGVmIEdSVVNTX1RFU1RJTkcKI2RlZmluZSBDT05GSUdfUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmNsdWRlIHBjaSBzdXBwb3J0ICovCiNkZWZpbmUgQ09ORklHX1BDSV9QTlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGNpIHBsdWctYW5kLXBsYXkgKi8KI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVwoKI2RlZmluZQlDT05GSUdfU1lTX0ZJUlNUX1BDSV9JUlEgICAxMAojZGVmaW5lCUNPTkZJR19TWVNfU0VDT05EX1BDSV9JUlEgIDkKI2RlZmluZSBDT05GSUdfU1lTX1RISVJEX1BDSV9JUlEgICAxMQojZGVmaW5lCUNPTkZJR19TWVNfRk9SVEhfUENJX0lSUSAgIDE1CiNlbHNlCiN1bmRlZiBDT05GSUdfUENJCiN1bmRlZiBDT05GSUdfUENJX1BOUAojdW5kZWYgQ09ORklHX1BDSV9TQ0FOX1NIT1cKI2VuZGlmCgoKI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8K