LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBnbG9iYWwgcHJvamVjdCBkZWZpbml0aW9uIGZpbGUKCiAgICAxMi4wNi4xOTk4ICAgLXJzCiAgICAxMS4wMi4yMDAyICAgci5kLiBFcndlaXRlcnVuZ2VuLCBFcmdhZW56dW5nZW4KICAgIDIwLjA4LjIwMDIgICBTWVMgVEVDIGVsZWN0cm9uaWMgLWFzCiAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiBTY2hsdWVzc2Vsd29ydCAnR0VORVJJQycKICAgICAgICAgICAgICAgICBmdWVyIGRhcyBFcnpldWdlbiB2b24gR2VuZXJpYyBQb2ludGVyCiAgICAyOC4wOC4yMDAyICAgci5kLiBlcndlaXRlcnRlciBTWVMgVEVDIERlYnVnIENvZGUKICAgIDE2LjA5LjIwMDIgICByLmQuIGtvbXBsZXR0ZSBVZWJlcnNldHp1bmcgaW4gRW5nbGlzY2gKICAgIDExLjA0LjIwMDMgICBmLmouIEVyZ2Flbnp1bmcgZnVlciBNaXRzdWJpc2hpIE5DMzAgQ29tcGlsZXIKICAgIDE3LjA2LjIwMDMgICAtcnMgIERlZmluaXRpb24gdm9uIEJhc2lzdHlwZW4gaW4gPCNpZm5kZWYgX1dJTkRFRl8+IGdlc2V0enQKICAgIDE2LjA0LjIwMDQgICByLmQuIEVyZ2Flbnp1bmcgZnVlciBCb3JsYW5kIEMrKyBCdWlsZGVyCiAgICAzMC4wOC4yMDA0ICAgLXJzICBUUkFDRTUgZWluZ2Vm/Gd0CiAgICAyMy4xMi4yMDA1ICAgZC5rLiBEZWZpbml0aW9ucyBmb3IgSUFSIGNvbXBpbGVyCgogICAgJElkOiBnbG9iYWwuaCx2IDEuNiAyMDA4LzExLzA3IDEzOjU1OjU2IEQuS3J1ZWdlciBFeHAgJAoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgX0dMT0JBTF9IXwojZGVmaW5lIF9HTE9CQUxfSF8KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBlbGVtZW50cyBvZiBkZWZpbmVzIGZvciBkZXZlbG9wbWVudCBzeXN0ZW0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIHRoZXNlIGRlZmluZXMgYXJlIG5lY2Vzc2FyeSB0byBjaGVjayBzb21lIG9mIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtCiNkZWZpbmUgX0RFVl9CSUdFTkRfICAgICAgICAgICAgMHg4MDAwMDAwMEwJLy8gYmlnIGVuZGlhbiAobW90b3JvbGxhIGZvcm1hdCkKI2RlZmluZSBfREVWX0FMSUdOTUVOVF80XyAgICAgICAweDAwNDAwMDAwTAkvLyAgICAgICAgICAgICAgICAgIHRoZSBDUFUgbmVlZHMgYWxpZ25tZW50IG9mIDQgYnl0ZXMKI2RlZmluZSBfREVWX09OTFlfSU5UX01BSU5fICAgICAweDAwMDA0MDAwTAkvLyAgICAgICAgICAgICAgICAgIHRoZSBjb21waWxlciBuZWVkcyAiaW50IG1haW4oaW50KSIgaW5zdGVhZCBvZiAidm9pZCBtYWluKHZvaWQpIgojZGVmaW5lIF9ERVZfQ09NTUFfRVhUXyAgICAgICAgIDB4MDAwMDIwMDBMCS8vICAgICAgICAgICAgICAgICAgc3VwcG9ydCBvZiBsYXN0IGNvbW1hIGluIHN0cnVjdCBwcmVkZWZpbml0aW9uCiNkZWZpbmUgX0RFVl82NEJJVF9TVVBQT1JUXyAgICAgMHgwMDAwMTAwMEwJLy8gICAgICAgICAgICAgICAgICBzdXBwb3J0IG9mIDY0IGJpdCBvcGVyYXRpb25zCiNkZWZpbmUgX0RFVl9CSVQ2NF8gICAgICAgICAgICAgMHgwMDAwMDQwMEwJLy8gY291bnQgb2YgYml0czogICA2NCBiaXQKI2RlZmluZSBfREVWX0JJVDMyXyAgICAgICAgICAgICAweDAwMDAwMzAwTAkvLyAgICAgICAgICAgICAgICAgIDMyIGJpdAojZGVmaW5lIF9ERVZfQklUMTZfICAgICAgICAgICAgIDB4MDAwMDAyMDBMCS8vICAgICAgICAgICAgICAgICAgMTYgYml0CiNkZWZpbmUgX0RFVl9CSVQ4XyAgICAgICAgICAgICAgMHgwMDAwMDEwMEwJLy8gICAgICAgICAgICAgICAgICA4IGJpdAojZGVmaW5lIF9ERVZfUlZDVF9BUk1fICAgICAgICAgIDB4MDAwMDAwMUNMCS8vICAgICAgICAgICAgICAgICAgUmVhbFZpZXcgQVJNCiNkZWZpbmUgX0RFVl9SRU5FU0FTTTMyQyAgICAgICAgMHgwMDAwMDAxQkwJLy8gY29tcGlsZXIgZnJvbTogICBSZW5lc2FzCiNkZWZpbmUgX0RFVl9HTlVDX01JUFMyXyAgICAgICAgMHgwMDAwMDAxQUwJLy8gICAgICAgICAgICAgICAgICBHTlUgZm9yIE1JUFMyCiNkZWZpbmUgX0RFVl9NUExBQl9DMzBfICAgICAgICAgMHgwMDAwMDAxOUwJLy8gICAgICAgICAgICAgICAgICBNUExBQiBDMzAgZm9yIE1pY3JvY2hpcCBkc1BJQzMzRiBzZXJpZXMKI2RlZmluZSBfREVWX0dOVUNfVENfICAgICAgICAgICAweDAwMDAwMDE4TAkvLyAgICAgICAgICAgICAgICAgIEdOVSBmb3IgSW5maW5lb24gVHJpQ29yZQojZGVmaW5lIF9ERVZfR05VQ19YODZfICAgICAgICAgIDB4MDAwMDAwMTdMCS8vICAgICAgICAgICAgICAgICAgR05VIGZvciBJMzg2CiNkZWZpbmUgX0RFVl9JQVJfQVJNXyAgICAgICAgICAgMHgwMDAwMDAxNkwJLy8gICAgICAgICAgICAgICAgICBBUk0gSUFSIEMvQysrIENvbXBpbGVyCiNkZWZpbmUgX0RFVl9QQVJBREdNX1g4NiAgICAgICAgMHgwMDAwMDAxNUwJLy8gICAgICAgICAgICAgICAgICBQYXJhZGlnbSBDL0MrKyBmb3IgQmVjayAxeDMKI2RlZmluZSBfREVWX0dOVUNfQ0ZfICAgICAgICAgICAweDAwMDAwMDE0TAkvLyAgICAgICAgICAgICAgICAgIEdOVSBmb3IgQ29sZGZpcmUKI2RlZmluZSBfREVWX0tFSUxfQVJNXyAgICAgICAgICAweDAwMDAwMDEzTAkvLyAgICAgICAgICAgICAgICAgIEtlaWwgQVJNCiNkZWZpbmUgX0RFVl9NU0VWQ18gICAgICAgICAgICAgMHgwMDAwMDAxMkwJLy8gICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgZW1iZWRkZWQgVmlzdWFsIEMvQysrCiNkZWZpbmUgX0RFVl9ISUdIVEVDX0dOVUNfWDg2XyAgMHgwMDAwMDAxMUwJLy8gICAgICAgICAgICAgICAgICBIaWdodGVjIGVsZjM4NiBnY2MKI2RlZmluZSBfREVWX01TVkNfUlRYXyAgICAgICAgICAweDAwMDAwMDEwTAkvLyAgICAgICAgICAgICAgICAgIFZDNjAwICsgUlRYCiNkZWZpbmUgX0RFVl9NU1ZDX1YxXzVfICAgICAgICAgMHgwMDAwMDAwRkwJLy8gICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgVmlzdWFsIEMvQysrIFYxLjUKI2RlZmluZSBfREVWX0dOVUNfQVJNN18gICAgICAgICAweDAwMDAwMDBFTAkvLyAgICAgICAgICAgICAgICAgIEdOVSBDb21waWxlciBnY2MgZm9yIEFSTTcKI2RlZmluZSBfREVWX01FVFJPV0VSS1NfQ1dfICAgICAweDAwMDAwMDBETAkvLyAgICAgICAgICAgICAgICAgIE1ldHJvd2Vya3MgQ29kZSBXYXJyaW9yCiNkZWZpbmUgX0RFVl9NSVRTVUJJU0hJTTE2Q18gICAgMHgwMDAwMDAwQ0wJLy9jb21waWxlciBmcm9tOiAgICBNaXRzdWJpc2hpCiNkZWZpbmUgX0RFVl9HTlVDX0MxNlhfICAgICAgICAgMHgwMDAwMDAwQkwJLy8gICAgICAgICAgICAgICAgICBHTlUgQ29tcGlsZXIgZ2NjMTY2IGZvciBJbmZpbmVvbiBDMTZ4CiNkZWZpbmUgX0RFVl9MSU5VWF9HQ0NfICAgICAgICAgMHgwMDAwMDAwQUwJLy8gICAgICAgICAgICAgICAgICBMaW51eCBHTlUgQ29tcGlsZXIgZ2NjCiNkZWZpbmUgX0RFVl9HTlVDX01QQzVYNSAgICAgICAgMHgwMDAwMDAwOUwJLy8gICAgICAgICAgICAgICAgICBHTlUgZm9yIE1vdG9yb2xhIFBQQzV4NQojZGVmaW5lIF9ERVZfVEFTS0lOR00xNkNfICAgICAgIDB4MDAwMDAwMDhMCS8vICAgICAgICAgICAgICAgICAgVGFza2luZyBmb3IgTWl0c3ViaXNoaSBNMTZDCiNkZWZpbmUgX0RFVl9GVUpJVFNVXyAgICAgICAgICAgMHgwMDAwMDAwN0wJLy8gICAgICAgICAgICAgICAgICBGdWppdHN1CiNkZWZpbmUgX0RFVl9UQVNLSU5HOF8gICAgICAgICAgMHgwMDAwMDAwNkwJLy8gICAgICAgICAgICAgICAgICBUYXNraW5nIDgwNTEKI2RlZmluZSBfREVWX1RBU0tJTkcxNl8gICAgICAgICAweDAwMDAwMDA1TAkvLyAgICAgICAgICAgICAgICAgIFRhc2tpbmcgMTY2CiNkZWZpbmUgX0RFVl9LRUlMOF8gICAgICAgICAgICAgMHgwMDAwMDAwNEwJLy8gICAgICAgICAgICAgICAgICBLZWlsIEM1MQojZGVmaW5lIF9ERVZfS0VJTDE2XyAgICAgICAgICAgIDB4MDAwMDAwMDNMCS8vICAgICAgICAgICAgICAgICAgS2VpbCBDMTY2CiNkZWZpbmUgX0RFVl9CT1JMQU5EQ18gICAgICAgICAgMHgwMDAwMDAwMkwJLy8gICAgICAgICAgICAgICAgICBCb3JsYW5kIEMvQysrCiNkZWZpbmUgX0RFVl9NU1ZDMTZfICAgICAgICAgICAgMHgwMDAwMDAwMUwJLy8gICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgVmlzdWFsIEMvQysrCiNkZWZpbmUgX0RFVl9NU1ZDMzJfICAgICAgICAgICAgMHgwMDAwMDAwMEwJLy8gICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgVmlzdWFsIEMvQysrCgovLyB0aGVzZSBkZWZpbmVzIGNhbiBiZSB1c2VkIHRvIG1hc2sgcHJldmlvdXMgZWxlbWVudHMKI2RlZmluZSBfREVWX01BU0tfQ09NUElMRVIgICAgICAweDAwMDAwMEZGTAojZGVmaW5lIF9ERVZfTUFTS19CSVRDT1VOVCAgICAgIDB4MDAwMDBGMDBMCiNkZWZpbmUgX0RFVl9NQVNLX0FERFNVUFBPUlQgICAgMHgwMDAwRjAwMEwKI2RlZmluZSBfREVWX01BU0tfQUxJR05NRU5UICAgICAweDAwRjAwMDAwTAoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluZXMgZm9yIGRldmVsb3BtZW50IHN5c3RlbSAoREVWX1NZU1RFTSkgaW5jbHVkaW5nIHByZXZpb3VzIGVsZW1lbnRzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojZGVmaW5lIF9ERVZfV0lOMTZfICAgICAgICAgICAgIChfREVWX0JJVDE2XyB8IF9ERVZfTVNWQzE2XyAgICAgICAgICAgICAgICAgICkKI2RlZmluZSBfREVWX1dJTjMyXyAgICAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TVkMzMl8gICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQojZGVmaW5lIF9ERVZfTVNWQ19ET1NfICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTVNWQ19WMV81XyAgICAgICAgICAgICAgICkKI2RlZmluZSBfREVWX0JPUkxBTkRfRE9TXyAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0JPUkxBTkRDXyAgICAgICAgICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQojZGVmaW5lIF9ERVZfS0VJTF9DNTFYXyAgICAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfS0VJTDhfICAgICB8IF9ERVZfQklHRU5EXyB8IF9ERVZfQ09NTUFfRVhUXykJLy8gYXQgbGVhc3QgQzUxIHZlcnNpb24gNy4wNSBzdXBwb3J0cyBjb21tYSBleHRlbnNpb24KI2RlZmluZSBfREVWX0tFSUxfQzE2WF8gICAgICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX0tFSUwxNl8gICAgICAgICAgICAgICAgICAgfCBfREVWX0NPTU1BX0VYVF8pCS8vIGF0IGxlYXN0IEMxNjYgdmVyc2lvbiA1LjAzIHN1cHBvcnRzIGNvbW1hIGV4dGVuc2lvbgojZGVmaW5lIF9ERVZfVEFTS0lOR19DNTFYXyAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfVEFTS0lORzhfICB8IF9ERVZfQklHRU5EXykKI2RlZmluZSBfREVWX1RBU0tJTkdfQzE2WF8gICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1RBU0tJTkcxNl8gICAgICAgICAgICAgICApCiNkZWZpbmUgX0RFVl9GVUpJVFNVX0Y1OTBfICAgICAgKF9ERVZfQklUOF8gIHwgX0RFVl9GVUpJVFNVXyAgICAgICAgICAgICAgICAgIHwgX0RFVl9DT01NQV9FWFRfKQkvLyBzb2Z0dW5lIGlzIG5vdCBhYmxlIHRvIHN1cHBvcnQgNjQgYml0IHZhcmlhYmxlcyBRV09SRCAhISEKLy9mLmouMjkuMDQuMDMgTTE2QyBrYW5uIGVmZmVrdGl2IG1pdCBCeXRlcyB1bWdlaGVuCi8vI2RlZmluZSBfREVWX1RBU0tJTkdfTTE2Q18gICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1RBU0tJTkdNMTZDXyAgICAgICAgICAgICApCiNkZWZpbmUgX0RFVl9UQVNLSU5HX00xNkNfICAgICAgKF9ERVZfQklUOF8gIHwgX0RFVl9UQVNLSU5HTTE2Q18gICAgICAgICAgICAgKQojZGVmaW5lIF9ERVZfTUlUU1VCSVNISV9NMTZDXyAgIChfREVWX0JJVDhfICB8IF9ERVZfTUlUU1VCSVNISU0xNkNfICAgICAgICAgICkKI2RlZmluZSBfREVWX0dOVV9NUEM1WDVfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfTVBDNVg1fCBfREVWX0JJR0VORF8gfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQojZGVmaW5lIF9ERVZfTElOVVhfICAgICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTElOVVhfR0NDXyAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCiNkZWZpbmUgX0RFVl9HTlVfQzE2WF8gICAgICAgICAgKF9ERVZfQklUMTZfIHwgX0RFVl9HTlVDX0MxNlhfICAgICAgICAgICAgICAgKQkvL3wgX0RFVl9DT01NQV9FWFRfKQojZGVmaW5lIF9ERVZfTUNXX01QQzVYNV8gICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTUVUUk9XRVJLU19DV18gICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCiNkZWZpbmUgX0RFVl9HTlVfQVJNN18gICAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX0FSTTdfICAgICAgICAgICAgICAgIHwgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXyB8IF9ERVZfT05MWV9JTlRfTUFJTl8pCiNkZWZpbmUgX0RFVl9XSU4zMl9SVFhfICAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9NU1ZDX1JUWF8gICAgICAgICAgICAgICAgKQkvL3wgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXykKI2RlZmluZSBfREVWX0hJR0hURUNfWDg2XyAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0hJR0hURUNfR05VQ19YODZfICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQojZGVmaW5lIF9ERVZfV0lOX0NFXyAgICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTVNFVkNfICAgICAgICAgICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCiNkZWZpbmUgX0RFVl9LRUlMX0NBUk1fICAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9LRUlMX0FSTV8gICAgICAgICAgICAgICAgIHwgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXykKI2RlZmluZSBfREVWX0lBUl9DQVJNXyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0lBUl9BUk1fICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQojZGVmaW5lIF9ERVZfUlZDVF9DQVJNXyAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfUlZDVF9BUk1fICAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQojZGVmaW5lIF9ERVZfTUNXX01DRjVYWFhfICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTUVUUk9XRVJLU19DV18gICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCiNkZWZpbmUgX0RFVl9HTlVfQ0Y1MjgyXyAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX0NGXyAgIHwgX0RFVl9CSUdFTkRfKQojZGVmaW5lIF9ERVZfUEFSX0JFQ0sxWDNfICAgICAgIChfREVWX0JJVDE2XyB8IF9ERVZfUEFSQURHTV9YODYpCiNkZWZpbmUgX0RFVl9HTlVfQ0Y1NDhYXyAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX0NGXyAgIHwgX0RFVl9CSUdFTkRfIHwgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXykKI2RlZmluZSBfREVWX0dOVV9JMzg2XyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfWDg2XyAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfIHwgX0RFVl9PTkxZX0lOVF9NQUlOXykKI2RlZmluZSBfREVWX0dOVV9UUklDT1JFXyAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfVENfICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfIHwgX0RFVl9PTkxZX0lOVF9NQUlOXyB8IF9ERVZfQUxJR05NRU5UXzRfKQojZGVmaW5lIF9ERVZfTVBMQUJfRFNQSUMzM0ZfICAgIChfREVWX0JJVDE2XyB8IF9ERVZfTVBMQUJfQzMwXyAgICAgICAgICAgICAgICkJLy98IF9ERVZfQ09NTUFfRVhUXykKI2RlZmluZSBfREVWX0dOVV9NSVBTRUxfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfTUlQUzJfICAgICB8IF9ERVZfQklHRU5EXyB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQoKI2RlZmluZSBfREVWX1JFTkVTQVNfTTMyQ18gICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX1JFTkVTQVNNMzJDKQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIHVzZWZ1bGwgbWFjcm9zCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojZGVmaW5lIENIRUNLX0lGX09OTFlfSU5UX01BSU4oKSAgICAoREVWX1NZU1RFTSAmIF9ERVZfT05MWV9JTlRfTUFJTl8pCiNkZWZpbmUgQ0hFQ0tfTUVNT1JZX0FMSU5NRU5UKCkgICAgIChERVZfU1lTVEVNICYgX0RFVl9NQVNLX0FMSUdOTUVOVCkKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBkZWZpbmVzIGZvciB0YXJnZXQgc3lzdGVtIChUQVJHRVRfU1lTVEVNKQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKI2RlZmluZSBfRE9TXyAgICAgICAgICAgICAgKDE2ICsgMHgxMDAwMCkKI2RlZmluZSBfV0lOMTZfICAgICAgICAgICAgIDE2CiNkZWZpbmUgX1dJTjMyXyAgICAgICAgICAgICAzMgojZGVmaW5lIF9XSU5DRV8gICAgICAgICAgICAoMzIgKyAweDIwMDAwKQojZGVmaW5lIF9OT19PU18gICAgICAgICAgICAgIDAKI2RlZmluZSBfTElOVVhfICAgICAgICAgICAgICAxCiNkZWZpbmUgX1BYUk9TXyAgICAgICAgICAgICAgMgojZGVmaW5lIF9FQ09TUFJPXyAgICAgICAgICAgIDMKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb24gaW5saW5pbmcKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OCQkvLyBlbXB0eSBkZWZpbmUKI3VuZGVmICBJTkxJTkVfRU5BQkxFRAkJLy8gZGlzYWJsZSBhY3R1YWwgaW5saW5pbmcgb2YgZnVuY3Rpb25zCiN1bmRlZiAgSU5MSU5FX0ZVTkNUSU9OX0RFRgkvLyBkaXNhYmxlIGlubGluaW5nIGZvciBhbGwgY29tcGlsZXJzIHBlciBkZWZhdWx0CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbnMgZm9yIEtlaWwgQzUxCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojaWZkZWYgIF9fQzUxX18KCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9LRUlMX0M1MVhfCgojcHJhZ21hIERFQlVHIE9CSkVDVEVYVEVORAojcHJhZ21hIFdBUk5JTkdMRVZFTCgyKQkJLy8gbWF4aW11bSB3YXJuaW5nIGxldmVsCgojZGVmaW5lIE5FQVIgICAgICAgICAgICBpZGF0YQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIEZBUiAgICAgICAgICAgICB4ZGF0YQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKI2RlZmluZSBST00gICAgICAgICAgICAgY29kZQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQoJCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwojZGVmaW5lIEhXQUNDICAgICAgICAgICB4ZGF0YQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFICAgICAgICAgICBsYXJnZQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCgogICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTSAgICAgICAgICAgICB4ZGF0YQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQgICAgICAgcmVlbnRyYW50CiNkZWZpbmUgUFVCTElDCgojaWZuZGVmIE5ERUJVRwojaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQojZGVmaW5lIFRSQUNFICBwcmludGYKI2VuZGlmCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbnMgZm9yIEdOVSBDb21waWxlciBmb3IgSW5maW5lb24gQzE2eAovLyAgLSBpdCBoYXZlIHRvIGJlIGJlZm9yIEtlaWwgKGl0IGhhcyBfX0MxNjZfXyB0b28pCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNlbGlmICBkZWZpbmVkIChfX0dOVUNfXykgJiYgZGVmaW5lZCAoX19DMTY2X18pCgojZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfR05VX0MxNlhfCgovLyAgICAjZGVmaW5lIE5FQVIgICAgICAgICAgICBpZGF0YSAgICAgICAvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIE5FQVIgICAgICAgICAgICBuZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi8vICAgICNkZWZpbmUgRkFSICAgICAgICAgICAgIHhodWdlICAgICAgIC8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSICAgICAgICAgICAgIGh1Z2UJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLy8gICAgI2RlZmluZSBIV0FDQyAgICAgICAgICAgc2RhdGEgICAgICAgLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKI2RlZmluZSBIV0FDQyAgICAgICAgICAgaHVnZQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi8vICAgICNkZWZpbmUgR0VORVJJQyAgICAgICAgIHhodWdlICAgICAgIC8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCiNkZWZpbmUgR0VORVJJQyAgICAgICAgIGh1Z2UJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCgojZGVmaW5lIFJFRU5UUkFOVAojZGVmaW5lIFBVQkxJQwoKI2lmbmRlZiBOREVCVUcKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCgojZGVmaW5lIEFTU0VSVChwKSAgXAogICAgICAgICAgICBpZiAocCkgICAgICAgICBcCiAgICAgICAgICAgIHsgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIDsgICAgICAgICAgXAogICAgICAgICAgICB9ICAgICAgICAgICAgICBcCiAgICAgICAgICAgIGVsc2UgICAgICAgICAgIFwKICAgICAgICAgICAgeyAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgUFJJTlRGMCgiQXNzZXJ0IGZhaWxlZDogIiAjcCAiIChmaWxlICVzIGxpbmUgJWQpXG4iLCBfX0ZJTEVfXywgKGludCkgX19MSU5FX18gKTsgXAogICAgICAgICAgICAgICAgd2hpbGUgKDEpOyBcCiAgICAgICAgICAgIH0KI2Vsc2UKI2RlZmluZSBBU1NFUlQocCkKI2VuZGlmCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbnMgZm9yIEtlaWwgQzE2NgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojZWxpZiAgZGVmaW5lZCAoX19DMTY2X18pCS8vIDI0LjAxLjIwMDUgci5kLjogS2VpbCBBUk03IG5lZWRzIGRpcmVjdGl2ZSAnZGVmaW5lZCcKCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9LRUlMX0MxNlhfCgojcHJhZ21hIENPREUKI3ByYWdtYSBNT0QxNjcKI3ByYWdtYSBOT0lOSVQKI3ByYWdtYSBERUJVRwojcHJhZ21hIFdBUk5JTkdMRVZFTCgzKQkJLy8gbWF4aW11bSB3YXJuaW5nIGxldmVsCiNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gNDcJLy8gd2FybmluZyA8dW5yZWZlcmVuY2VkIHBhcmFtZXRlcj4gPSBPRkYKI3ByYWdtYSBXQVJOSU5HIERJU0FCTEUgPSAzOAkvLyB3YXJuaW5nIDxlbXB0eSB0cmFuc2xhdGlvbiB1bml0PiA9IE9GRgovLyAgI3ByYWdtYSBXQVJOSU5HIERJU0FCTEUgPSAxMDIgICAgICAgLy8gd2FybmluZyA8ZGlmZmVyZW50IGNvbnN0L3ZvbGF0aWxlIHF1YWxpZmllcnM+ID0gT0ZGCiNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMTc0CS8vIHdhcm5pbmcgPHVucmVmZXJlbmNlZCAnc3RhdGljJyBmdW5jdGlvbj4gPSBPRkYKI3ByYWdtYSBXQVJOSU5HIERJU0FCTEUgPSAxODMJLy8gd2FybmluZyA8ZGVhZCBhc3NpZ25lbWVudCBlbGltaW5hdGVkPiA9IE9GRgoKI2RlZmluZSBORUFSICAgICAgICAgICAgaWRhdGEJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBGQVIgICAgICAgICAgICAgeGh1Z2UJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLy8gICAgI2RlZmluZSBIV0FDQyAgICAgICAgICAgc2RhdGEgICAgICAgLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKI2RlZmluZSBIV0FDQyAgICAgICAgICAgaHVnZQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQyAgICAgICAgIHhodWdlCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgTkRFQlVHCiNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCiNkZWZpbmUgVFJBQ0UgIHByaW50ZgojZW5kaWYKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBkZWZpbml0aW9ucyBmb3IgTVBMQUIgQzMwIGZvciBkc1BJQzMzRiBzZXJpZXMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2VsaWYgIGRlZmluZWQgKF9fQzMwX18pCgojZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTVBMQUJfRFNQSUMzM0ZfCgojZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCi8vICAgICNpZm5kZWYgUVdPUkQKLy8gICAgICAgICNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi8vICAgICNlbmRpZgoKI2lmbmRlZiBOREVCVUcKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBLZWlsIEFSTQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojZWxpZiAgZGVmaW5lZCAoX19DQV9fKQoKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwojZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0tFSUxfQ0FSTV8KCiNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBDT05TVCAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCiNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCgogICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCgojZGVmaW5lIFJFRU5UUkFOVAojZGVmaW5lIFBVQkxJQwoKI2lmbmRlZiBRV09SRAojZGVmaW5lIFFXT1JEIGxvbmcgbG9uZwojZW5kaWYKCiNpZm5kZWYgTkRFQlVHCiNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCiNkZWZpbmUgVFJBQ0UgIHByaW50ZgojZW5kaWYKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBkZWZpbml0aW9ucyBmb3IgUmVhbFZpZXcgQVJNIGNvbXBpbGF0aW9uIHRvb2xzIChwcm92aWRlZCBieSByZWNlbnQgS2VpbCBNaWNyb2NvbnRyb2xsZXIgRGV2ZWxvcG1lbnQgS2l0cykKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2VsaWYgIGRlZmluZWQgKF9fQVJNQ0NfVkVSU0lPTikKCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9SVkNUX0NBUk1fCgojZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgUVdPUkQKI2RlZmluZSBRV09SRCBsb25nIGxvbmcKI2VuZGlmCgojaWZuZGVmIE5ERUJVRwojZGVmaW5lIEFTU0VSVChleHByKSAgICBpZiAoIShleHByKSkge1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFDRTAgKCJBc3NlcnRpb24gZmFpbGVkOiAiICNleHByICk7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKTt9CiNlbHNlCiNkZWZpbmUgQVNTRVJUKGV4cHIpCiNlbmRpZgoKI2lmbmRlZiBOREVCVUcKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBBUk0gSUFSIEMgQ29tcGlsZXIKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2VsaWYgIGRlZmluZWQgKF9fSUNDQVJNX18pCgojZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfSUFSX0NBUk1fCgojZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgUVdPUkQKI2RlZmluZSBRV09SRCBsb25nIGxvbmcKI2VuZGlmCgogICAgLy8gV29ya2Fyb3VuZDoKICAgIC8vIElmIHdlIHVzZSBJQVIgYW5kIHdhbnQgdG8gZGVidWcgYnV0IGRvbid0IHdhbnQgdG8gdXNlIEMtU3B5IERlYnVnZ2VyCiAgICAvLyBhc3NlcnQoKSBkb2Vzbid0IHdvcmsgaW4gZGVidWcgbW9kZSBiZWNhdXNlIGl0IG5lZWRzIHN1cHBvcnQgZm9yIEZJTEUgZGVzY3JpcHRvcnMKICAgIC8vIChfRExJQl9GSUxFX0RFU0NSSVBUT1IgPT0gMSkuCiNpZm5kZWYgTkRFQlVHCiNkZWZpbmUgQVNTRVJUKGV4cHIpICAgIGlmICghKGV4cHIpKSB7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMCAoIkFzc2VydGlvbiBmYWlsZWQ6ICIgI2V4cHIgKTtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpO30KI2Vsc2UKI2RlZmluZSBBU1NFUlQoZXhwcikKI2VuZGlmCgojaWZuZGVmIE5ERUJVRwojaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQojZGVmaW5lIFRSQUNFICBwcmludGYKLy8gICAgICAgICNkZWZpbmUgVFJBQ0UgIFBSSU5URjQKI2VuZGlmCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbnMgZm9yIFRhc2tpbmcgODA1MQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKI2VsaWYgZGVmaW5lZCAoX0NDNTEpCgojaW5jbHVkZSA8Y2M1MS5oPgoKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwojZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1RBU0tJTkdfQzUxWF8KCiNkZWZpbmUgTkVBUiAgICAgICAgICAgIF9kYXRhCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSICAgICAgICAgICAgIF94ZGF0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MgICAgICAgICAgIF94ZGF0CS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCiNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCgogICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTSAgICAgICAgICAgICBfeGRhdAkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQgICAgICAgX3JlZW50cmFudAojZGVmaW5lIFBVQkxJQwoKI2lmbmRlZiBOREVCVUcKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBUYXNraW5nIEMxNjdDUiBhbmQgQzE2NENJCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojZWxpZiBkZWZpbmVkIChfQzE2NikKCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9UQVNLSU5HX0MxNlhfCgojZGVmaW5lIE5FQVIgICAgICAgICAgICBuZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSICAgICAgICAgICAgIGZhcgkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQoJCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwojZGVmaW5lIEhXQUNDICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiAgICAvLyBTdGRpby5oIGhhcyB0byBiZSBhbHdheSBpbmNsdWRlZCBoZXJlLiBJZiBwcmludGYoKSBpcyB1c2VkIHN0ZGlvLmggZGVmaW5lcyBOVUxMCiAgICAvLyB3aXRob3V0IGNoZWNraW5nIGlmIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQuIFNvIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21waWxpbmcuCiAgICAvLyAoci5kLikKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2lmbmRlZiBOREVCVUcKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBGVUpJVFNVIEZGTUMtMTZMWCBNQjkwNTkwCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyNlbGlmIChkZWZpbmVkIChGNTkwKSB8fCBkZWZpbmVkIChGNTQzKSB8fCBkZWZpbmVkIChGNTk4KSB8fCBkZWZpbmVkIChGNDk1KSB8fCBkZWZpbmVkIChGMzUwKSkKI2VsaWYgZGVmaW5lZChfX0NPTVBJTEVSX0ZDQzkwN19fKQoKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwojZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0ZVSklUU1VfRjU5MF8KCiNkZWZpbmUgTkVBUiAgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSICAgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTSAgICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQoJCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwojZGVmaW5lIEhXQUNDICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKICAgIC8vIHNvZnR1bmUgaXMgbm90IGFibGUgdG8gc3VwcG9ydCA2NCBiaXQgdmFyaWFibGVzIFFXT1JEICEhIQoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgTkRFQlVHCiNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCiNkZWZpbmUgVFJBQ0UgIHByaW50ZgojZW5kaWYKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBkZWZpbml0aW9ucyBmb3IgTWl0c3ViaXNoaSBNMTZDIGZhbWlseSBmb3IgVEFTS0lORyBDb21waWxlciBDTTE2Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojZWxpZiBkZWZpbmVkIChfQ00xNkMpCgojZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfVEFTS0lOR19NMTZDXwoKI2RlZmluZSBORUFSICAgICAgICAgICAgX25lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBGQVIgICAgICAgICAgICAgX2ZhcgkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIENPTlNUICAgICAgICAgICBfZmFycm9tCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MgICAgICAgICAgIF9uZWFyCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCiNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCgogICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDICAgICAgICAgX2ZhcgkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQoJCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCgkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCgkJCQkJLy8gZG8geW91IHVzZSBtZW1vcnkgbW9kZWwgU01BTEwsIHRoYW4geW91IGhhdmUgdG8gc2V0IF9mYXIKI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiAgICAvLyBTdGRpby5oIGhhcyB0byBiZSBhbHdheSBpbmNsdWRlZCBoZXJlLiBJZiBwcmludGYoKSBpcyB1c2VkIHN0ZGlvLmggZGVmaW5lcyBOVUxMCiAgICAvLyB3aXRob3V0IGNoZWNraW5nIGlmIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQuIFNvIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21waWxpbmcuCiAgICAvLyAoci5kLikKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2lmbmRlZiBOREVCVUcKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBNaXRzdWJpc2hpIE0xNkMgZmFtaWx5IGZvciBNaXRzdWJpc2hpIENvbXBpbGVyIE5DMzAKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gbmFtZSBOQzMwLCBhbmRlcmUgRm9ybSB3aWxsIGRlciBDb21waWxlciBuaWNodCAhIQojZWxpZiBkZWZpbmVkIChOQzMwKQoKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwojZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX01JVFNVQklTSElfTTE2Q18KCiNkZWZpbmUgTkVBUiAgICAgICAgICAgIG5lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBGQVIgICAgICAgICAgICAgZmFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MgICAgICAgICAgIG5lYXIJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KCiAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwogICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgojZGVmaW5lIEdFTkVSSUMgICAgICAgICBmYXIJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCgojZGVmaW5lIFJFRU5UUkFOVAojZGVmaW5lIFBVQkxJQwoKI2lmbmRlZiBOREVCVUcKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBSZW5lc2FzIE0zMkMgZmFtaWx5IGZvciBSZW5lc2FzIENvbXBpbGVyCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNlbGlmIGRlZmluZWQgKE5DMzA4KQoKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwojZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1JFTkVTQVNfTTMyQ18KCiNkZWZpbmUgTkVBUiAgICAgICAgICAgICBuZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSICAgICAgICAgICAgICBmYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBDT05TVCAgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQojZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0gICAgICAgICAgICAgIGZhcgkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgTkRFQlVHCiNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCiNkZWZpbmUgVFJBQ0UgIHByaW50ZgojZW5kaWYKCi8vICAgICNlcnJvciAoIlJFTkVTQVMgby5rLiIpCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbnMgZm9yIEFSTTcgZmFtaWx5IHdpdGggR05VIGNvbXBpbGVyCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fTElOVVhfQVJNX0FSQ0hfXykKCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9HTlVfQVJNN18KCiNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCiNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCgogICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgUVdPUkQKI2RlZmluZSBRV09SRCBsb25nIGxvbmcJCS8vIGkuQS4gZHVyY2ggSGVyciBLdXNjaGVsCiNlbmRpZgoKI2lmbmRlZiBOREVCVUcKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBNb3Rvcm9sYSBQb3dlclBDIGZhbWlseSA1eDUgKDU1NS81NjUpCi8vICBkZWZpbml0aW9ucyBMaW51eC1QQwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCgojaWYgZGVmaW5lZCAoTElOVVgpIHx8IGRlZmluZWQgKGxpbnV4KSB8fCBkZWZpbmVkIChfX2xpbnV4X18pCiNkZWZpbmUgTElOVVhfU1lTVEVNCQkvLyBkZWZpbmUgJ0xJTlVYX1NZU1RFTScgdW5pZm9ybSBmb3IgYWxsIExpbnV4IGJhc2VkIHN5c3RlbXMKCS8vIHIuZC46IFdlIHdpbGwgbmVlZCBhbiBvdGhlciBzb2x1dGlvbiBoZXJlISBUaGVyZSBhcmUgdHdvIHNlY3Rpb25zIGhlcmUgd2hpY2ggZG8gY2hlY2sgdGhlIHByZXByb2MtZGVmaW5pdGlvbnM6CgkvLyAgICAgTElOVVggYW5kIF9fbGludXhfXyAuIFRoZSBmaXJzdCBvbmUgd2FzIExpbnV4IGZvciBQQywgdGhlIHNlY29uZCBvbmUgaXMgdGhpcyBzZWN0aW9uIGZvciBlbWJlZGRlZCBMaW51eCAoTUNGNXh4eCkuCgkvLyAgICAgQnV0IExpbnV4IGZvciBQQyBkb2VzIG5vdCBuZWVkIHRoZSBkZWZpbml0aW9ucyBmb3IgZW1iZWRkZWQgTGludXguCiNlbmRpZgoKICAgIC8vIEdOVSBDIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIGlubGluaW5nCiNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OX0RFRiBleHRlcm4gaW5saW5lCgogICAgLy8gdG8gYWN0dWFsbHkgZW5hYmxlIGlubGluaW5nIGp1c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHRocmVlIGxpbmVzCiAgICAvLyAjdW5kZWYgSU5MSU5FX0ZVTkNUSU9OCiAgICAvLyAjZGVmaW5lIElOTElORV9GVU5DVElPTiAgICAgSU5MSU5FX0ZVTkNUSU9OX0RFRgogICAgLy8gI2RlZmluZSBJTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKCiNpZmRlZiBQWFJPUwojZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICAgX1BYUk9TXwojaWZkZWYgX19pMzg2X18KI3VuZGVmIExJTlVYCQkJLy8gdGhpcyBkZWZpbmUgc2VlbXMgdG8gYmUgc2V0IGZyb20gY29tcGlsZXIKI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9ISUdIVEVDX1g4Nl8KI2VsaWYgZGVmaW5lZCAoX190cmljb3JlX18pCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfR05VX1RSSUNPUkVfCiNlbHNlIC8vIE1QQzV4NQojZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0dOVV9NUEM1WDVfCiNlbmRpZgoKI2VsaWYgZGVmaW5lZCAoTElOVVgpIHx8IGRlZmluZWQgKF9fbGludXhfXykKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9MSU5VWF8JLy8gTGludXggZGVmaW5pdGlvbgojZGVmaW5lIERFVl9TWVNURU0gICAgICAgICAgX0RFVl9MSU5VWF8KCiNlbGlmIGRlZmluZWQgKEdOVV9DRjUyODIpCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfTk9fT1NfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0dOVV9DRjUyODJfCgojZWxpZiBkZWZpbmVkIChFQ09TUFJPX0kzODZfUEVBS19QQ0kpCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfRUNPU1BST18KI2RlZmluZSBERVZfU1lTVEVNICAgICAgICAgIF9ERVZfR05VX0kzODZfCgojZWxpZiBkZWZpbmVkIChHTlVfQ0Y1NDhYKQojZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICAgX05PX09TXwojZGVmaW5lIERFVl9TWVNURU0gICAgICAgICAgX0RFVl9HTlVfQ0Y1NDhYXwojZWxzZQojZXJyb3IgJ0VSUk9SOiBERVZfU1lTVEVNIG5vdCBmb3VuZCEnCiNlbmRpZgoKI2lmbmRlZiBRV09SRAojZGVmaW5lIFFXT1JEIGxvbmcgbG9uZyBpbnQKI2VuZGlmCgojaWYgKFRBUkdFVF9TWVNURU0gPT0gX1BYUk9TXykKCiNpZm5kZWYgX19LRVJORUxfXwojaW5jbHVkZSA8c3RyaW5nLmg+CiNlbmRpZgoKI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKI2RlZmluZSBST00gICAgIC8qIHRvIGJlIGRlZmluZWQgKi8JLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKCQkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCgoJLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkgICAgLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCiNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KCiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgUVdPUkQKI2RlZmluZSBRV09SRCBsb25nIGxvbmcgaW50CiNlbmRpZgoKI2lmbmRlZiBOREVCVUcKI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCiNlbmRpZgoKI2VuZGlmCgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIEdOVUMgZm9yIEkzODYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgfHwgKFRBUkdFVF9TWVNURU0gPT0gX0VDT1NQUk9fKQoKI2lmbmRlZiBfX0tFUk5FTF9fCiNpbmNsdWRlIDxzdHJpbmcuaD4KI2VuZGlmCgojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQoKCS8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCgkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2lmbmRlZiBORUFSCiNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNlbmRpZgoKI2lmbmRlZiBGQVIKI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZW5kaWYKCiNpZm5kZWYgQ09OU1QKI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNlbmRpZgoKI2RlZmluZSBMQVJHRQoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgTkRFQlVHCiNpZm5kZWYgX19LRVJORUxfXwojaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQojZGVmaW5lIFRSQUNFICBwcmludGYKI2Vsc2UKI2RlZmluZSBUUkFDRSAgcHJpbnRrCiNlbmRpZgojZW5kaWYKI2VuZGlmCgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSB3aXRob3V0IE9TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKI2lmIChUQVJHRVRfU1lTVEVNID09IF9OT19PU18pCgojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQoKCS8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCgkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2lmbmRlZiBORUFSCiNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNlbmRpZgoKI2lmbmRlZiBGQVIKI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZW5kaWYKCiNpZm5kZWYgQ09OU1QKI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNlbmRpZgoKI2RlZmluZSBMQVJHRQoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMKCiNpZm5kZWYgTkRFQlVHCi8vICAgICAgICAgICAgI2luY2x1ZGUgInh1YXJ0ZHJ2LmgiCi8vICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgICAgICAvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKI2RlZmluZSBUUkFDRSAgcHJpbnRmCi8vICAgICAgICAgICAgI2RlZmluZSBUUkFDRSAgbXByaW50ZgovLyAgICAgICAgICAgICNpZm5kZWYgVFJBQ0UKLy8gICAgICAgICAgICAgICAgI2RlZmluZSBUUkFDRSB0cmFjZQovLyAgICAgICAgICAgICAgICB2b2lkIHRyYWNlIChjaGFyICpmbXQsIC4uLik7Ci8vICAgICAgICAgICAgI2VuZGlmCiNlbmRpZgoKI2VuZGlmCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbnMgZm9yIE1QQzU2NQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojZWxpZiBfX01XRVJLU19fCgojaWZkZWYgX19NQzY4S19fCgojZGVmaW5lIFRBUkdFVF9TWVNURU0gPSBfTUNGNTQ4WF8KI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9NQ1dfTUNGNVhYWF8KCiNlbHNlCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSA9IF9NUEM1NjVfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTUNXX01QQzVYNV8KI2VuZGlmCgojZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCgogICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCgojZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKCiNkZWZpbmUgUkVFTlRSQU5UCiNkZWZpbmUgUFVCTElDCgojaWZuZGVmIE5ERUJVRwojaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQojZGVmaW5lIFRSQUNFICBwcmludGYKI2VuZGlmCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbnMgZm9yIEJFQ0sgMXgzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNlbGlmIGRlZmluZWQgKF9fQk9STEFORENfXykgJiYgZGVmaW5lZCAoX19QQVJBRElHTV9fKQoKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgX05PX09TXwojZGVmaW5lIERFVl9TWVNURU0gICAgICAgICBfREVWX1BBUl9CRUNLMVgzXwoKI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQoJCQkJICAgICAvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCgogICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgojZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQoJCQkJICAgICAvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJICAgICAvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgojZGVmaW5lIE5FQVIgX19uZWFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZGVmaW5lIEZBUiAgX19mYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIExBUkdFCgojZGVmaW5lIFJFRU5UUkFOVAojZGVmaW5lIFBVQkxJQwoKI2lmbmRlZiBOREVCVUcKI2lmbmRlZiBUUkFDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2RlZmluZSBUUkFDRSBwcmludGYKI2VuZGlmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGRlZmluaXRpb25zIGZvciBQQwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKI2VsaWYgZGVmaW5lZCAoX19CT1JMQU5EQ19fKQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBkZWZpbml0aW9uIHRhcmdldCBzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNpZmRlZiBfV0lOMzIKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjMyXwkvLyBXSU4zMiBkZWZpbml0aW9uCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMzJfCiNlbHNlCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9ET1NfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfQk9STEFORF9ET1NfCiNlbmRpZgoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBXSU4zMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQoKI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQoJCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwojZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKCgkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwoJLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgojZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQoJCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCgkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCiNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KCiNpZm5kZWYgTkVBUgojZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZW5kaWYKCiNpZm5kZWYgRkFSCiNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2VuZGlmCgojaWZuZGVmIENPTlNUCiNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZW5kaWYKCiNkZWZpbmUgTEFSR0UKCiNkZWZpbmUgUkVFTlRSQU5UCiNkZWZpbmUgUFVCTElDIF9fc3RkY2FsbAoKI2lmbmRlZiBOREVCVUcKI2lmbmRlZiBUUkFDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2RlZmluZSBUUkFDRSBwcmludGYKI2VuZGlmCiNlbmRpZgoKI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0RPU18pCgojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQoKCS8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCgkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgojZGVmaW5lIE5FQVIgbmVhcgkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBGQVIgIGZhcgkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNkZWZpbmUgTEFSR0UKCiNkZWZpbmUgUkVFTlRSQU5UCiNkZWZpbmUgUFVCTElDCgojaWZuZGVmIE5ERUJVRwojaWZuZGVmIFRSQUNFCiNpbmNsdWRlIDxzdGRpby5oPgojZGVmaW5lIFRSQUNFIHByaW50ZgojZW5kaWYKI2VuZGlmCgojZW5kaWYKCiNlbGlmIChfTVNDX1ZFUiA9PSA4MDApCQkvLyBQQyBNUyBWaXN1YWwgQy9DKysgZm9yIERPUyBhcHBsaWNhdGlvbnMKCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9ET1NfCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTVNWQ19ET1NfCgojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MgbmVhcgkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKCiAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwogICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgojZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQoJCQkJICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCgkJCQkgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCiNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KI2RlZmluZSBORUFSIG5lYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgRkFSICBmYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZGVmaW5lIExBUkdFCgojZGVmaW5lIFJFRU5UUkFOVAojZGVmaW5lIFBVQkxJQwoKI2lmbmRlZiBOREVCVUcKI2lmbmRlZiBUUkFDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2RlZmluZSBUUkFDRSBwcmludGYKI2VuZGlmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gZGVmaW5pdGlvbnMgZm9yIFJUWCB1bmRlciBXSU4zMgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojZWxpZiAoZGVmaW5lZCAoVU5ERVJfUlRTUykgJiYgZGVmaW5lZCAoV0lOMzIpKQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBkZWZpbml0aW9uIHRhcmdldCBzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjMyX1JUWF8KI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9XSU4zMl9SVFhfCgojZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCgkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7CiNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQoKICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCiAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCiNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCgkJCQkgICAgLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKCQkJCSAgICAvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgoKI2lmbmRlZiBORUFSCiNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNlbmRpZgoKI2lmbmRlZiBGQVIKI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZW5kaWYKCiNpZm5kZWYgQ09OU1QKI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNlbmRpZgoKI2RlZmluZSBMQVJHRQoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMgX19zdGRjYWxsCgojaWZuZGVmIE5ERUJVRwojaWZuZGVmIFRSQUNFCiNkZWZpbmUgVFJBQ0UgUnRQcmludGYKI2VuZGlmCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gZGVmaW5pdGlvbnMgZm9yIFdpbkNFCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNlbGlmIGRlZmluZWQgKF9XSU4zMl9XQ0UpCgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICAgICAgIF9XSU5DRV8KI2RlZmluZSBERVZfU1lTVEVNICAgICAgICAgICAgICBfREVWX1dJTl9DRV8KCiNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKCQkJCSAgICAvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCgogICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCSAgICAvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCgojaWZuZGVmIE5FQVIKI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2VuZGlmCgojaWZuZGVmIEZBUgojZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNlbmRpZgoKI2lmbmRlZiBDT05TVAojZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKI2VuZGlmCgojZGVmaW5lIExBUkdFCgojaWZuZGVmIFFXT1JECiAgICAgIC8vI2RlZmluZSBRV09SRCBsb25nIGxvbmcgaW50IC8vIE1TVkMgLk5FVCBjYW4gdXNlICJsb25nIGxvbmcgaW50IiB0b28gKGxpa2UgR05VKQojZGVmaW5lIFFXT1JEIF9faW50NjQKI2VuZGlmCgojZGVmaW5lIFJFRU5UUkFOVAojZGVmaW5lIFBVQkxJQyBfX2NkZWNsCgojaWZkZWYgQVNTRVJUTVNHCiN1bmRlZiBBU1NFUlRNU0cKI2VuZGlmCgojaWZuZGVmIE5ERUJVRwojaWZuZGVmIFRSQUNFCiNkZWZpbmUgVFJBQ0UgcHJpbnRmCi8vICAgICAgICAgICAgdm9pZCB0cmFjZSAoY2hhciAqZm10LCAuLi4pOwojZW5kaWYKI2VuZGlmCgojZWxzZSAvLyA9PT0+IFBDIE1TIFZpc3VhbCBDL0MrKwoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBkZWZpbml0aW9uIHRhcmdldCBzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNpZmRlZiBfV0lOMzIKI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjMyXwkvLyBXSU4zMiBkZWZpbml0aW9uCiNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMzJfCiNlbHNlCiNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9XSU4xNl8JLy8gV0lOMTYgZGVmaW5pdGlvbgojZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1dJTjE2XwojZW5kaWYKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gV0lOMTYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjE2XykKCiNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCgoJLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAoJCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgojZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCgojaWZuZGVmIE5FQVIKI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KI2VuZGlmCgojaWZuZGVmIEZBUgojZGVmaW5lIEZBUiBmYXIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgojZW5kaWYKCiNpZm5kZWYgQ09OU1QKI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCiNlbmRpZgoKI2RlZmluZSBMQVJHRQoKI2RlZmluZSBSRUVOVFJBTlQKI2RlZmluZSBQVUJMSUMgX2ZhciBfcGFzY2FsIF9leHBvcnQKCiNpZm5kZWYgTkRFQlVHCiNpZm5kZWYgVFJBQ0UKI2RlZmluZSBUUkFDRSB0cmFjZQojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoJdm9pZCB0cmFjZShjb25zdCBjaGFyICpmbXQsIC4uLik7CiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgojZW5kaWYKI2VuZGlmCiNlbmRpZgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIFdJTjMyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQoJCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwojZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKCS8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgojZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQoJCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCiNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KI2lmbmRlZiBORUFSCiNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNlbmRpZgojaWZuZGVmIEZBUgojZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCiNlbmRpZgojaWZuZGVmIENPTlNUCiNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQojZW5kaWYKI2RlZmluZSBMQVJHRQojZGVmaW5lIFJFRU5UUkFOVAojZGVmaW5lIFBVQkxJQyBfX3N0ZGNhbGwKI2lmbmRlZiBRV09SRAoJICAvLyNkZWZpbmUgUVdPUkQgbG9uZyBsb25nIGludCAvLyBNU1ZDIC5ORVQgY2FuIHVzZSAibG9uZyBsb25nIGludCIgdG9vIChsaWtlIEdOVSkKI2RlZmluZSBRV09SRCBfX2ludDY0CiNlbmRpZgojaWZuZGVmIE5ERUJVRwojaWZuZGVmIFRSQUNFCiNkZWZpbmUgVFJBQ0UgdHJhY2UKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCXZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm10LCAuLi4pOwojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKI2VuZGlmCiNlbmRpZgoJLy8gTVMgVmlzdWFsIEMrKyBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBpbmxpbmluZwojZGVmaW5lIElOTElORV9GVU5DVElPTl9ERUYgX19mb3JjZWlubGluZQoJLy8gdG8gYWN0dWFsbHkgZW5hYmxlIGlubGluaW5nIGp1c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHR3byBsaW5lcy8vICNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGLy8gI2RlZmluZSBJTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKI2VuZGlmCiNlbmRpZgkJCQkvLyA9PT0+IFBDCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8gIGRlZmluaXRpb25zIG9mIGJhc2ljIHR5cGVzLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2lmbmRlZiBfV0lOREVGXwkJLy8gZGVmaW5lZCBpbiBXSU5ERUYuSCwgaW5jbHVkZWQgYnkgPHdpbmRvd3MuaD4KICAgIC8vIC0tLSBhcml0aG1ldGljIHR5cGVzIC0tLQojaWZuZGVmIFNIT1JUCiNkZWZpbmUgU0hPUlQgc2hvcnQgaW50CiNlbmRpZgojaWZuZGVmIFVTSE9SVAojZGVmaW5lIFVTSE9SVCB1bnNpZ25lZCBzaG9ydCBpbnQKI2VuZGlmCiNpZm5kZWYgSU5UCiNkZWZpbmUgSU5UIGludAojZW5kaWYKI2lmbmRlZiBVSU5UCiNkZWZpbmUgVUlOVCB1bnNpZ25lZCBpbnQKI2VuZGlmCiNpZm5kZWYgTE9ORwojZGVmaW5lIExPTkcgbG9uZyBpbnQKI2VuZGlmCiNpZm5kZWYgVUxPTkcKI2RlZmluZSBVTE9ORyB1bnNpZ25lZCBsb25nIGludAojZW5kaWYKICAgIC8vIC0tLSBsb2dpYyB0eXBlcyAtLS0KI2lmbmRlZiBCWVRFCiNkZWZpbmUgQllURSB1bnNpZ25lZCBjaGFyCiNlbmRpZgojaWZuZGVmIFdPUkQKI2RlZmluZSBXT1JEIHVuc2lnbmVkIHNob3J0IGludAojZW5kaWYKI2lmbmRlZiBEV09SRAojZGVmaW5lIERXT1JEIHVuc2lnbmVkIGxvbmcgaW50CiNlbmRpZgojaWZuZGVmIEJPT0wKI2RlZmluZSBCT09MIHVuc2lnbmVkIGNoYXIKI2VuZGlmCiAgICAvLyAtLS0gYWxpYXMgdHlwZXMgLS0tCiNpZm5kZWYgVFJVRQojZGVmaW5lIFRSVUUgIDB4RkYKI2VuZGlmCiNpZm5kZWYgRkFMU0UKI2RlZmluZSBGQUxTRSAweDAwCiNlbmRpZgojaWZuZGVmIE5VTEwKI2RlZmluZSBOVUxMICgodm9pZCAqKSAwKQojZW5kaWYKI2VuZGlmCiNpZm5kZWYgX1RJTUVfT0ZfREFZX0RFRklORURfCnR5cGVkZWYgc3RydWN0IHsKCXVuc2lnbmVkIGxvbmcgaW50IG1fZHdNczsKCXVuc2lnbmVkIHNob3J0IGludCBtX3dEYXlzOwoKfSB0VGltZU9mRGF5OwoKI2RlZmluZSBfVElNRV9PRl9EQVlfREVGSU5FRF8KCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIERlZmluaXRpb24gdm9uIFRSQUNFCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojaWZuZGVmIE5ERUJVRwoKI2lmbmRlZiBUUkFDRTAKI2RlZmluZSBUUkFDRTAocDApICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKHAwKQojZW5kaWYKCiNpZm5kZWYgVFJBQ0UxCiNkZWZpbmUgVFJBQ0UxKHAwLCBwMSkgICAgICAgICAgICAgICAgICBUUkFDRShwMCwgcDEpCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTIKI2RlZmluZSBUUkFDRTIocDAsIHAxLCBwMikgICAgICAgICAgICAgIFRSQUNFKHAwLCBwMSwgcDIpCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTMKI2RlZmluZSBUUkFDRTMocDAsIHAxLCBwMiwgcDMpICAgICAgICAgIFRSQUNFKHAwLCBwMSwgcDIsIHAzKQojZW5kaWYKCiNpZm5kZWYgVFJBQ0U0CiNkZWZpbmUgVFJBQ0U0KHAwLCBwMSwgcDIsIHAzLCBwNCkgICAgICBUUkFDRShwMCwgcDEsIHAyLCBwMywgcDQpCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTUKI2RlZmluZSBUUkFDRTUocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSkgIFRSQUNFKHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUpCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTYKI2RlZmluZSBUUkFDRTYocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpICBUUkFDRShwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNikKI2VuZGlmCgojZWxzZQoKI2lmbmRlZiBUUkFDRTAKI2RlZmluZSBUUkFDRTAocDApCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTEKI2RlZmluZSBUUkFDRTEocDAsIHAxKQojZW5kaWYKCiNpZm5kZWYgVFJBQ0UyCiNkZWZpbmUgVFJBQ0UyKHAwLCBwMSwgcDIpCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTMKI2RlZmluZSBUUkFDRTMocDAsIHAxLCBwMiwgcDMpCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTQKI2RlZmluZSBUUkFDRTQocDAsIHAxLCBwMiwgcDMsIHA0KQojZW5kaWYKCiNpZm5kZWYgVFJBQ0U1CiNkZWZpbmUgVFJBQ0U1KHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUpCiNlbmRpZgoKI2lmbmRlZiBUUkFDRTYKI2RlZmluZSBUUkFDRTYocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpCiNlbmRpZgoKI2VuZGlmCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgZGVmaW5pdGlvbiBvZiBBU1NFUlQKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNpZm5kZWYgQVNTRVJUCiNpZiAhZGVmaW5lZCAoX19saW51eF9fKSAmJiAhZGVmaW5lZCAoX19LRVJORUxfXykKI2luY2x1ZGUgPGFzc2VydC5oPgojaWZuZGVmIEFTU0VSVAojZGVmaW5lIEFTU0VSVChwKSAgICBhc3NlcnQocCkKI2VuZGlmCiNlbHNlCiNkZWZpbmUgQVNTRVJUKHApCiNlbmRpZgojZW5kaWYKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBTWVMgVEVDIGV4dGVuc2lvbnMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFRoaXMgbWFjcm8gZG9lc24ndCBwcmludCBvdXQgQy1maWxlIGFuZCBsaW5lIG51bWJlciBvZiB0aGUgZmFpbGVkIGFzc2VydGlvbgovLyBidXQgYSBzdHJpbmcsIHdoaWNoIGV4YWN0bHkgbmFtZXMgdGhlIG1pc3Rha2UuCiNpZm5kZWYgTkRFQlVHCgojZGVmaW5lIEFTU0VSVE1TRyhleHByLHN0cmluZykgIGlmICghKGV4cHIpKSB7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlRGMCAoIkFzc2VydGlvbiBmYWlsZWQ6ICIgc3RyaW5nICk7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpO30KI2Vsc2UKI2RlZmluZSBBU1NFUlRNU0coZXhwcixzdHJpbmcpCiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNlbmRpZiAvLyAjaWZuZGVmIF9HTE9CQUxfSF8KCi8vIFBsZWFzZSBrZWVwIGFuIGVtcHR5IGxpbmUgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCg==