LyoKICogIE5vdGVwYWQgKEdlcm1hbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCiNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICAgICBEZQojZGVmaW5lIExBTkdVQUdFX05VTUJFUiAgICAgICAgICAgICAgICAgMgojZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgICAgIiZEZXV0c2NoIgoKCi8qIE1lbnUgKi8KCiNkZWZpbmUgTUVOVV9GSUxFICAgICAgICAgICAgICAgICAgICAgICAiJkRhdGVpIgojZGVmaW5lIE1FTlVfRklMRV9ORVcgICAgICAgICAgICAgICAgICAgIiZOZXUuLi4iCiNkZWZpbmUgTUVOVV9GSUxFX09QRU4gICAgICAgICAgICAgICAgICAi1iZmZm5lbi4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfU0FWRSAgICAgICAgICAgICAgICAgICImU3BlaWNoZXJuIgojZGVmaW5lIE1FTlVfRklMRV9TQVZFQVMgICAgICAgICAgICAgICAgIlNwZWljaGVybiAmdW50ZXIuLi4iCiNkZWZpbmUgTUVOVV9GSUxFX1BSSU5UICAgICAgICAgICAgICAgICAiJkRydWNrZW4iCiNkZWZpbmUgTUVOVV9GSUxFX1BBR0VTRVRVUCAgICAgICAgICAgICAiU2VpdGUgZWluJnJpY2h0ZW4uLi4iCiNkZWZpbmUgTUVOVV9GSUxFX1BSSU5UU0VUVVAgICAgICAgICAgICAiRHJ1Y2tlciZlaW5yaWNodHVuZy4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICAgICImQmVlbmRlbiIKCiNkZWZpbmUgTUVOVV9FRElUICAgICAgICAgICAgICAgICAgICAgICAiJkJlYXJiZWl0ZW4iCiNkZWZpbmUgTUVOVV9FRElUX1VORE8gICAgICAgICAgICAgICAgICAiJlL8Y2tn5G5naWdcdFN0cmcrWiIKI2RlZmluZSBNRU5VX0VESVRfQ1VUICAgICAgICAgICAgICAgICAgICImQXVzc2NobmVpZGVuXHRTdHJnK1giCiNkZWZpbmUgTUVOVV9FRElUX0NPUFkgICAgICAgICAgICAgICAgICAiJktvcGllcmVuXHRTdHJnK0MiCiNkZWZpbmUgTUVOVV9FRElUX1BBU1RFICAgICAgICAgICAgICAgICAiJkVpbmb8Z2VuXHRTdHJnK1YiCiNkZWZpbmUgTUVOVV9FRElUX0RFTEVURSAgICAgICAgICAgICAgICAiJkz2c2NoZW5cdEVudGYiCiNkZWZpbmUgTUVOVV9FRElUX1NFTEVDVEFMTCAgICAgICAgICAgICAiQWxsZXMgJm1hcmtpZXJlbiIKI2RlZmluZSBNRU5VX0VESVRfVElNRURBVEUgICAgICAgICAgICAgICImVWhyemVpdC9EYXR1bVx0RjUiCiNkZWZpbmUgTUVOVV9FRElUX1dSQVAgICAgICAgICAgICAgICAgICAiJlplaWxlbnVtYnJ1Y2giCgojZGVmaW5lIE1FTlVfU0VBUkNIICAgICAgICAgICAgICAgICAgICAgIiZTdWNoZW4iCiNkZWZpbmUgTUVOVV9TRUFSQ0hfU0VBUkNIICAgICAgICAgICAgICAiU3VjaGVuLi4uIgojZGVmaW5lIE1FTlVfU0VBUkNIX05FWFQgICAgICAgICAgICAgICAgIiZXZWl0ZXJzdWNoZW5cdEYzIgoKI2RlZmluZSBNRU5VX0xBTkdVQUdFICAgICAgICAgICAgICAgICAgICImU3ByYWNoZSIKCiNkZWZpbmUgTUVOVV9IRUxQICAgICAgICAgICAgICAgICAgICAgICAiJkhpbGZlIgojZGVmaW5lIE1FTlVfSEVMUF9DT05URU5UUyAgICAgICAgICAgICAgIiZJbmhhbHQiCiNkZWZpbmUgTUVOVV9IRUxQX1NFQVJDSCAgICAgICAgICAgICAgICAiJlN1Y2hlbi4uLiIKI2RlZmluZSBNRU5VX0hFTFBfSEVMUF9PTl9IRUxQICAgICAgICAgICImSGlsZmUgYmVudXR6ZW4iCgojZGVmaW5lIE1FTlVfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIkluZiZvLi4uIgojZGVmaW5lIE1FTlVfSU5GT19MSUNFTlNFICAgICAgICAgICAgICAgIiZMaXplbnoiCiNkZWZpbmUgTUVOVV9JTkZPX05PX1dBUlJBTlRZICAgICAgICAgICAiJktFSU5FIEdBUkFOVElFIgojZGVmaW5lIE1FTlVfSU5GT19BQk9VVF9XSU5FICAgICAgICAgICAgIibcYmVyIFdJTkUiCgoKLyogRGlhbG9ncyAqLwoKI2RlZmluZSBESUFMT0dfT0sgICAgICAgICAgICAgICAgICAgICAgICJPSyIKI2RlZmluZSBESUFMT0dfQ0FOQ0VMICAgICAgICAgICAgICAgICAgICJBYmJyZWNoZW4iCiNkZWZpbmUgRElBTE9HX0JST1dTRSAgICAgICAgICAgICAgICAgICAiJkR1cmNoc3VjaGVuLi4uIgojZGVmaW5lIERJQUxPR19IRUxQICAgICAgICAgICAgICAgICAgICAgIiZIaWxmZSIKCiNkZWZpbmUgRElBTE9HX1BBR0VTRVRVUF9DQVBUSU9OICAgICAgICAiU2VpdGUgZWlucmljaHRlbiIKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX0hFQUQgICAgICAgICAgICImS29wZnplaWxlOiIKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX1RBSUwgICAgICAgICAgICImRnXfemVpbGU6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfTUFSR0lOICAgICAgICAgIlLkbmRlciIKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX0xFRlQgICAgICAgICAgICImTGlua3M6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfUklHSFQgICAgICAgICAgIiZSZWNodHM6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfVE9QICAgICAgICAgICAgIiZPYmVuOiIKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX0JPVFRPTSAgICAgICAgICImVW50ZW46IgoKCi8qIFN0cmluZ3MgKi8KCiNkZWZpbmUgU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSAgICAiJm4iCiNkZWZpbmUgU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSAgICAiUGFnZSAmcyIKI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSAgICAgICIyMCBtbSIKI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUgICAgICIyMCBtbSIKI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFICAgICAgICIyNSBtbSIKI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFICAgICIyNSBtbSIKCiNkZWZpbmUgU1RSSU5HX05PVEVQQUQgICAgICAgICAgICAgICAgICAiRWRpdG9yIgojZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgIkZFSExFUiIKI2RlZmluZSBTVFJJTkdfV0FSTklORyAgICAgICAgICAgICAgICAgICJBQ0hUVU5HIgojZGVmaW5lIFNUUklOR19JTkZPICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIgoKI2RlZmluZSBTVFJJTkdfVU5USVRMRUQgICAgICAgICAgICAgICAgICIodW5iZW5hbm50KSIKCiNkZWZpbmUgU1RSSU5HX0FMTF9GSUxFUyAgICAgICAgICAgICAgICAiQWxsZSBEYXRlaWVuICgqLiopIgojZGVmaW5lIFNUUklOR19URVhUX0ZJTEVTX1RYVCAgICAgICAgICAgIlRleHRkYXRlaWVuICgqLnR4dCkiCgojZGVmaW5lIFNUUklOR19UT09MQVJHRSAgICAgICAiJyVzJyBpc3QgenUgZ3Jvc3MgZvxyIGRlbiBFZGl0b3JcbiBcCkJlbnV0emVuIFNpZSBiaXR0ZSBlaW5lbiBhbmRlcmVuIEVkaXRvciwgdW0gZGllc2UgRGF0ZWkgenUgYmVhcmJlaXRlbi4iCgojZGVmaW5lIFNUUklOR19OT1RFWFQgICAgICAgICAiU2llIGhhYmVuIGtlaW5lbiBUZXh0IGVpbmdlZ2ViZW4sIGRlciBcCmdlc3BlaWNoZXJ0XG4gd2VyZGVuIGv2bm50ZS4gR2ViZW4gU2llIFRleHQgZWluLCB1bmQgdmVyc3VjaGVuIFNpZSBlcyBcClxuZXJuZXV0LiIKCi8qIEZJWE1FICovCgojZGVmaW5lIFNUUklOR19ET0VTTk9URVhJU1QgICAgICJGaWxlICclcydcbmRvZXMgbm90IGV4aXN0XG5cbiBcCkRvIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBmaWxlID8iCgojZGVmaW5lIFNUUklOR19OT1RTQVZFRCAgICAgICAiRGF0ZWkgJXNcbiB3dXJkZSBnZWFlbmRlcnQuXG5cbiBcCk1vZWNodGVuIFNpZSBkaWUgQWVuZGVydW5nZW4gc3BlaWNoZXJuID8iCgojZGVmaW5lIFNUUklOR19OT1RGT1VORCAgICAgICAiJyVzJyBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCgojZGVmaW5lIFNUUklOR19PVVRfT0ZfTUVNT1JZICAiTmljaHQgZ2Vu/GdlbmQgQXJiZWl0c3NwZWljaGVyLCBcCnVtIGRpZXNlIEZ1bmt0aW9uIFxuYWJ6dXNjaGxpZd9lbi4gQmVlbmRlbiBTaWUgZWluZSBvZGVyIG1laHJlcmUgXApcbkFud2VuZHVuZ2VuLCB1bSBkZW4gdmVyZvxnYmFyZW4gQXJiZWl0c3NwZWljaGVyIHp1IFxuZXJo9mhlbi4iCgojaW5jbHVkZSAibm90ZXBhZC5yYyIK