LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQogKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQoNCiAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQoNCiAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQogKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KDQogKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KDQogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQogKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQogKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCiAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICoNCiAqIFx2ZXJzaW9uIDIwMTYuMDUNCiAqIFxkYXRlIDIwMTUtMTEtMTYNCiAqIFxhdXRob3IgUWlhbmcgR3UoUWlhbmcuR3VAc3lub3BzeXMuY29tKQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKioNCiAqDQogKiBcZmlsZQ0KICogXGluZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVA0KICogXGJyaWVmICAgZW1zayBoYXJkd2FyZSByZXNvdXJjZSBkZWZpbml0aW9ucw0KICovDQoNCi8qKg0KICogXGFkZHRvZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVA0KICogQHsNCiAqLw0KI2lmbmRlZiBfRU1TS19IQVJEV0FSRV9IXw0KI2RlZmluZSBfRU1TS19IQVJEV0FSRV9IXw0KDQovKiogQ1BVIENsb2NrIEZyZXF1ZW5jeSBkZWZpbml0aW9uICovDQojaWYgZGVmaW5lZChCT0FSRF9DUFVfRlJFUSkNCi8qITwgR2V0IGNwdSBjbG9jayBmcmVxdWVuY3kgZGVmaW5pdGlvbiBmcm9tIGJ1aWxkIHN5c3RlbSAqLw0KI2RlZmluZSBDTEtfQ1BVICAgICAgICAgKEJPQVJEX0NQVV9GUkVRKQ0KI2VsaWYgZGVmaW5lZChBUkNfRkVBVFVSRV9DUFVfQ0xPQ0tfRlJFUSkNCi8qITwgR2V0IGNwdSBjbG9jayBmcmVxdWVuY3kgZGVmaW5pdGlvbiBmcm9tIHRjZiBmaWxlICovDQojZGVmaW5lIENMS19DUFUgICAgICAgICAoQVJDX0ZFQVRVUkVfQ1BVX0NMT0NLX0ZSRVEpDQojZWxzZQ0KLyohPCBEZWZhdWx0IGNwdSBjbG9jayBmcmVxdWVuY3kgKi8NCiNkZWZpbmUgQ0xLX0NQVSAgICAgICAgICgyMDAwMDAwMCkNCiNlbmRpZg0KDQovKiogUGVyaXBoZXJhbCBCdXMgUmVmZXJlbmNlIENsb2NrIGRlZmluaXRpb24gKi8NCiNpZmRlZiBCT0FSRF9ERVZfRlJFUQ0KLyohPCBHZXQgcGVyaXBoZXJhbCBidXMgcmVmZXJlbmNlIGNsb2NrIGRlZmludGlvbiBmcm9tIGJ1aWxkIHN5c3RlbSAqLw0KI2RlZmluZSBDTEtfQlVTX0FQQiAgICAgKEJPQVJEX0RFVl9GUkVRKQ0KI2Vsc2UNCi8qITwgRGVmYXVsdCBwZXJpcGhlcmFsIGJ1cyByZWZlcmVuY2UgY2xvY2sgZGVmaW50aW9uICovDQojZGVmaW5lIENMS19CVVNfQVBCICAgICAoNTAwMDAwMDBVKQ0KI2VuZGlmDQoNCi8qIERldmljZSBSZWdpc3RlciBCYXNlIEFkZHJlc3MgKi8NCiNkZWZpbmUgUkVMX1JFR0JBU0VfUElOTVVYICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAvKiE8IFBJTk1VWCAqLw0KI2RlZmluZSBSRUxfUkVHQkFTRV9TUElfTVNUX0NTX0NUUkwgKDB4MDAwMDAwMTRVKSAgICAgICAvKiE8IFNQSSBNYXN0ZXIgU2VsZWN0IEN0cmwgKi8NCiNkZWZpbmUgUkVMX1JFR0JBU0VfR1BJTzAgICAgICAgKDB4MDAwMDIwMDBVKSAgICAgICAvKiE8IEdQSU8gMCBPbmJvYXJkICovDQojZGVmaW5lIFJFTF9SRUdCQVNFX1RJTUVSUyAgICAgICgweDAwMDAzMDAwVSkgICAgICAgLyohPCBEVyBUSU1FUiAqLw0KI2RlZmluZSBSRUxfUkVHQkFTRV9JMkMwICAgICAgICAoMHgwMDAwNDAwMFUpICAgICAgIC8qITwgSTJDIDAgKi8NCiNkZWZpbmUgUkVMX1JFR0JBU0VfSTJDMSAgICAgICAgKDB4MDAwMDUwMDBVKSAgICAgICAvKiE8IEkyQyAxICovDQojZGVmaW5lIFJFTF9SRUdCQVNFX1NQSTAgICAgICAgICgweDAwMDA2MDAwVSkgICAgICAgLyohPCBTUEkgTWFzdGVyICAqLw0KI2RlZmluZSBSRUxfUkVHQkFTRV9TUEkxICAgICAgICAoMHgwMDAwNzAwMFUpICAgICAgIC8qITwgU1BJIFNsYXZlICAgKi8NCiNkZWZpbmUgUkVMX1JFR0JBU0VfVUFSVDAgICAgICAgKDB4MDAwMDgwMDBVKSAgICAgICAvKiE8IFVBUlQwIGlzIGNvbm5lY3RlZCB0byBQTU9EICovDQojZGVmaW5lIFJFTF9SRUdCQVNFX1VBUlQxICAgICAgICgweDAwMDA5MDAwVSkgICAgICAgLyohPCBVQVJUMSBpcyBVU0ItVUFSVKOsIHVzZSBVQVJUMSBhcyBkZWZhdWx0ICovDQojZGVmaW5lIFJFTF9SRUdCQVNFX1VBUlQyICAgICAgICgweDAwMDBBMDAwVSkgICAgICAgLyohPCBVQVJUMiAqLw0KI2RlZmluZSBSRUxfUkVHQkFTRV9XRFQgICAgICAgICAoMHgwMDAwQjAwMFUpICAgICAgIC8qITwgV0RUICAqLw0KLy8gI2RlZmluZSBSRUxfUkVHQkFTRV9JMlNfTUFTVEVSX0lOICAgICgweDAwMDBDMDAwVSkgICAgICAgLyohPCBJMlMgTWFzdGVyIEluICAqLw0KLy8gI2RlZmluZSBSRUxfUkVHQkFTRV9JMlNfTUFTVEVSX09VVCAgICgweDAwMDBEMDAwVSkgICAgICAgLyohPCBJMlMgTWFzdGVyIE91dCAgKi8NCi8vICNkZWZpbmUgUkVMX1JFR0JBU0VfR01BQyAgICAgKDB4MDAwMEUwMDBVKSAgICAgICAvKiE8IEdNQUMgICovDQoNCi8qIEludGVycnVwdCBDb25uZWN0aW9uICovDQojZGVmaW5lIElOVE5PX1RJTUVSMCAgICAgICAgICAgIDE2ICAgICAgICAgIC8qITwgQVJDIFRpbWVyMCAqLw0KI2RlZmluZSBJTlROT19USU1FUjEgICAgICAgICAgICAxNyAgICAgICAgICAvKiE8IEFSQyBUaW1lcjEgKi8NCiNkZWZpbmUgSU5UTk9fU0VDVVJFX1RJTUVSMCAgICAgMjAgICAgICAgICAgLyohPCBDb3JlIFNlY3VyZSBUaW1lciAwICovDQojZGVmaW5lIElOVE5PX0RNQV9TVEFSVCAgICAgICAgIDIyICAgICAgICAgIC8qITwgQ29yZSBETUEgQ29udHJvbGxlciAqLw0KI2RlZmluZSBJTlROT19ETUFfQ09NUExFVEUgICAgICAyMiAgICAgICAgICAvKiE8IENvcmUgRE1BIENvbnRyb2xsZXIgQ29tcGxldGUgKi8NCiNkZWZpbmUgSU5UTk9fRE1BX0VSUk9SICAgICAgICAgMjMgICAgICAgICAgLyohPCBDb3JlIERNQSBDb250cm9sbGVyIEVycm9yICovDQojZGVmaW5lIElOVE5PX0dQSU8gICAgICAgICAgMjQgICAgICAgICAgLyohPCBHUElPIGNvbnRyb2xsZXIgKi8NCiNkZWZpbmUgSU5UTk9fSTJDMCAgICAgICAgICAyNSAgICAgICAgICAvKiE8IEkyQ18wIGNvbnRyb2xsZXIgKi8NCiNkZWZpbmUgSU5UTk9fSTJDMSAgICAgICAgICAyNiAgICAgICAgICAvKiE8IEkyQ18xIGNvbnRyb2xsZXIgKi8NCiNkZWZpbmUgSU5UTk9fU1BJX01BU1RFUiAgICAgICAgMjcgICAgICAgICAgLyohPCBTUEkgTWFzdGVyIGNvbnRyb2xsZXIgKi8NCiNkZWZpbmUgSU5UTk9fU1BJX1NMQVZFICAgICAgICAgMjggICAgICAgICAgLyohPCBTUEkgU2xhdmUgY29udHJvbGxlciAqLw0KI2RlZmluZSBJTlROT19VQVJUMCAgICAgICAgIDI5ICAgICAgICAgIC8qITwgVUFSVDAgKi8NCiNkZWZpbmUgSU5UTk9fVUFSVDEgICAgICAgICAzMCAgICAgICAgICAvKiE8IFVBUlQxICovDQojZGVmaW5lIElOVE5PX1VBUlQyICAgICAgICAgMzEgICAgICAgICAgLyohPCBVQVJUMiAqLw0KI2RlZmluZSBJTlROT19EV19XRFQgICAgICAgICAgICAzMiAgICAgICAgICAvKiE8IFdEVCAqLw0KI2RlZmluZSBJTlROT19EV19UTVIwICAgICAgICAgICAzMyAgICAgICAgICAvKiE8IERXIFRpbWVyIDAgKi8NCiNkZWZpbmUgSU5UTk9fRFdfVE1SMSAgICAgICAgICAgMzQgICAgICAgICAgLyohPCBEVyBUaW1lciAxICovDQovLyAjZGVmaW5lIElOVE5PX0kyU19NYXN0ZXJfSW4gICAgICAzMyAgICAgICAgICAvKiE8IEkyUyBNYXN0ZXIgSW4gKi8NCi8vICNkZWZpbmUgSU5UTk9fSTJTX01hc3Rlcl9PdXQgICAgIDM0ICAgICAgICAgIC8qITwgSTJTIE1hc3RlciBPdXQgKi8NCi8vICNkZWZpbmUgSU5UTk9fR01BQyAgICAgICAgICAgMzUgICAgICAgICAgLyohPCBHTUFDICovDQoNCi8qIFNQSSBNYXRlciBTaWduYWxzIFVzYWdlICovDQojZGVmaW5lIEVNU0tfU1BJX0xJTkVfMCAgICAgICAgIDAgICAgICAgICAgIC8qITwgQ1MwIC0tIFBtb2QgNiBwaW4xICovDQojZGVmaW5lIEVNU0tfU1BJX0xJTkVfMSAgICAgICAgIDEgICAgICAgICAgIC8qITwgQ1MxIC0tIFBtb2QgNSBwaW4xIG9yIFBtb2QgNiBwaW4gNyAqLw0KI2RlZmluZSBFTVNLX1NQSV9MSU5FXzIgICAgICAgICAyICAgICAgICAgICAvKiE8IENTMiAtLSBQbW9kIDYgcGluOCAqLw0KI2RlZmluZSBFTVNLX1NQSV9MSU5FX1NEQ0FSRCAgICAgICAgMyAgICAgICAgICAgLyohPCBDUzMgLS0gT24tYm9hcmQgU0QgY2FyZCAgKi8NCiNkZWZpbmUgRU1TS19TUElfTElORV9TUElTTEFWRSAgICAgIDQgICAgICAgICAgIC8qITwgQ1M0IC0tIEludGVybmFsIFNQSSBzbGF2ZSAqLw0KI2RlZmluZSBFTVNLX1NQSV9MSU5FX1NGTEFTSCAgICAgICAgNSAgICAgICAgICAgLyohPCBDUzUgLS0gT24tYm9hcmQgU1BJIEZsYXNoIG1lbW9yeSAqLw0KDQojZW5kaWYgIC8qIF9FTVNLX0hBUkRXQVJFX0hfICovDQoNCi8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVCAqLw0K