LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmCV9fSEFMRE1PVVRTUkNfSF9fCiNkZWZpbmUgX19IQUxETU9VVFNSQ19IX18KCi8qICBEZWZpbml0aW9uICovCi8qICBEZWZpbmUgYWxsIHRlYW0gc3VwcG9ydCBhYmlsaXR5LiAqLwoKLyogIERlZmluZSBmb3IgYWxsIHRlYW1zLiBQbGVhc2UgRGVmaW5lIHRoZSBjb25zdGFudCBpbiB5b3VyIHByZWNvbXAgaGVhZGVyLiAqLwoKLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9BUAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9BRFNMCQkJMCAqLwovKiBkZWZpbmUJCURNX09ETV9TVVBQT1JUX0NFCQkJMCAqLwovKiBkZWZpbmUJCURNX09ETV9TVVBQT1JUX01QCQkJMSAqLwoKLyogIERlZmluZSBPRE0gU1cgdGVhbSBzdXBwb3J0IGZsYWcuICovCgovKiAgQW50ZW5uYSBTd2l0Y2ggUmVsYXRpdmUgRGVmaW5pdGlvbi4gKi8KCi8qICBBZGQgbmV3IGZ1bmN0aW9uIFN3QW50RGl2Q2hlY2s4MTkyQygpLiAqLwovKiAgVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiBvZiBBbnRlbm5hIGRpdmVyc2l0eSBmdW5jdGlvbiBiZWZvcmUgbGluay4gKi8KLyogIE1haW5seSwgaXQganVzdCByZXRhaW5zIGxhc3Qgc2NhbiByZXN1bHQgYW5kIHNjYW4gYWdhaW4uICovCi8qICBBZnRlciB0aGF0LCBpdCBjb21wYXJlcyB0aGUgc2NhbiByZXN1bHQgdG8gc2VlIHdoaWNoIG9uZSBnZXRzIGJldHRlcgogKiAgUlNTSS4gSXQgc2VsZWN0cyBhbnRlbm5hIHdpdGggYmV0dGVyIHJlY2VpdmluZyBwb3dlciBhbmQgcmV0dXJucyBiZXR0ZXIKICogIHNjYW4gcmVzdWx0LgogKi8KCiNkZWZpbmUJVFBfTU9ERQkJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkJMAojZGVmaW5lCVRSQUZGSUNfSElHSAkJMQoKLyogMyBUeCBQb3dlciBUcmFja2luZyAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURQS19ERUxUQV9NQVBQSU5HX05VTQkxMwojZGVmaW5lCQlpbmRleF9tYXBwaW5nX0hQX05VTQkxNQoKCi8qICAqLwovKiAzIFBTRCBIYW5kbGVyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiNkZWZpbmUJQUZIX1BTRAkJMQkvKiAwOm5vcm1hbCBQU0Qgc2NhbiwgMTogb25seSBkbyAyMCBwdHMgUFNEICovCiNkZWZpbmUJTU9ERV80ME0JMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITQkJMjAgICAvKiAgTWluaW11bSBjaGFubmVsIG51bWJlciBmb3IgQlQgQUZIICovCiNkZWZpbmUJU0lSX1NURVBfU0laRQkzCiNkZWZpbmUgU21vb3RoX1NpemVfMQk1CiNkZWZpbmUJU21vb3RoX1RIXzEJMwojZGVmaW5lIFNtb290aF9TaXplXzIJMTAKI2RlZmluZQlTbW9vdGhfVEhfMgk0CiNkZWZpbmUgU21vb3RoX1NpemVfMwkyMAojZGVmaW5lCVNtb290aF9USF8zCTQKI2RlZmluZSBTbW9vdGhfU3RlcF9TaXplIDUKI2RlZmluZQlBZGFwdGl2ZV9TSVIJMQojZGVmaW5lCVBTRF9SRVNDQU4JNAojZGVmaW5lCVBTRF9TQ0FOX0lOVEVSVkFMCTcwMCAvKiBtcyAqLwoKLyogODcyM0EgSGlnaCBQb3dlciBJR0kgU2V0dGluZyAqLwojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQJMHgyMgojZGVmaW5lIERNX0RJR19HbW9kZV9ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQgMHgyOAojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9USFJFU0hPTEQJMHgzYQoKLyogIExQUyBkZWZpbmUgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgwX0xQUwkJNCAvKiAgNCBpbiBscHMgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgxX0xQUwkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkzMCAvKiAgMzAgbHBzICovCiNkZWZpbmUgUlNTSV9PRkZTRVRfRElHCQkJMHgwNTsKCnN0cnVjdCBydHdfZGlnIHsKCXU4CQlEaWdfRW5hYmxlX0ZsYWc7Cgl1OAkJRGlnX0V4dF9Qb3J0X1N0YWdlOwoKCWludAkJUnNzaUxvd1RocmVzaDsKCWludAkJUnNzaUhpZ2hUaHJlc2g7CgoJdTMyCQlGQUxvd1RocmVzaDsKCXUzMgkJRkFIaWdoVGhyZXNoOwoKCXU4CQlDdXJTVEFDb25uZWN0U3RhdGU7Cgl1OAkJUHJlU1RBQ29ubmVjdFN0YXRlOwoJdTgJCUN1ck11bHRpU1RBQ29ubmVjdFN0YXRlOwoKCXU4CQlQcmVJR1ZhbHVlOwoJdTgJCUN1cklHVmFsdWU7Cgl1OAkJQmFja3VwSUdWYWx1ZTsKCglzOAkJQmFja29mZlZhbDsKCXM4CQlCYWNrb2ZmVmFsX3JhbmdlX21heDsKCXM4CQlCYWNrb2ZmVmFsX3JhbmdlX21pbjsKCXU4CQlyeF9nYWluX3JhbmdlX21heDsKCXU4CQlyeF9nYWluX3JhbmdlX21pbjsKCXU4CQlSc3NpX3ZhbF9taW47CgoJdTgJCVByZUNDS19DQ0FUaHJlczsKCXU4CQlDdXJDQ0tfQ0NBVGhyZXM7Cgl1OAkJUHJlQ0NLUERTdGF0ZTsKCXU4CQlDdXJDQ0tQRFN0YXRlOwoKCXU4CQlMYXJnZUZBSGl0OwoJdTgJCUZvcmJpZGRlbklHSTsKCXUzMgkJUmVjb3Zlcl9jbnQ7CgoJdTgJCURJR19EeW5hbWljX01JTl8wOwoJdTgJCURJR19EeW5hbWljX01JTl8xOwoJYm9vbAkJYk1lZGlhQ29ubmVjdF8wOwoJYm9vbAkJYk1lZGlhQ29ubmVjdF8xOwoKCXUzMgkJQW50RGl2X1JTU0lfbWF4OwoJdTMyCQlSU1NJX21heDsKfTsKCnN0cnVjdCBydGxfcHMgewoJdTgJCVByZUNDQVN0YXRlOwoJdTgJCUN1ckNDQVN0YXRlOwoKCXU4CQlQcmVSRlN0YXRlOwoJdTgJCUN1clJGU3RhdGU7CgoJaW50CQkgICAgUnNzaV92YWxfbWluOwoKCXU4CQlpbml0aWFsaXplOwoJdTMyCQlSZWc4NzQsIFJlZ0M3MCwgUmVnODVDLCBSZWdBNzQ7Cgp9OwoKc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIHsKCXUzMglDbnRfUGFyaXR5X0ZhaWw7Cgl1MzIJQ250X1JhdGVfSWxsZWdhbDsKCXUzMglDbnRfQ3JjOF9mYWlsOwoJdTMyCUNudF9NY3NfZmFpbDsKCXUzMglDbnRfT2ZkbV9mYWlsOwoJdTMyCUNudF9DY2tfZmFpbDsKCXUzMglDbnRfYWxsOwoJdTMyCUNudF9GYXN0X0ZzeW5jOwoJdTMyCUNudF9TQl9TZWFyY2hfZmFpbDsKCXUzMglDbnRfT0ZETV9DQ0E7Cgl1MzIJQ250X0NDS19DQ0E7Cgl1MzIJQ250X0NDQV9hbGw7Cgl1MzIJQ250X0JXX1VTQzsJLyogR2FyeSAqLwoJdTMyCUNudF9CV19MU0M7CS8qIEdhcnkgKi8KfTsKCnN0cnVjdCByeF9ocGMgewoJdTgJCVJYSFBfZmxhZzsKCXU4CQlQU0RfZnVuY190cmlnZ2VyOwoJdTgJCVBTRF9iaXRtYXBfUlhIUFs4MF07Cgl1OAkJUHJlX0lHSTsKCXU4CQlDdXJfSUdJOwoJdTgJCVByZV9wd190aDsKCXU4CQlDdXJfcHdfdGg7Cglib29sCQlGaXJzdF90aW1lX2VudGVyOwoJYm9vbAkJUlhIUF9lbmFibGU7Cgl1OAkJVFBfTW9kZTsKCXN0cnVjdCB0aW1lcl9saXN0IFBTRFRpbWVyOwp9OwoKI2RlZmluZSBBU1NPQ0lBVEVfRU5UUllfTlVNCTMyIC8qICBNYXggc2l6ZSBvZiBBc29jRW50cnlbXS4gKi8KI2RlZmluZQlPRE1fQVNTT0NJQVRFX0VOVFJZX05VTQlBU1NPQ0lBVEVfRU5UUllfTlVNCgovKiAgVGhpcyBpbmRpY2F0ZXMgdHdvIGRpZmZlcmVudCBzdGVwcy4gKi8KLyogIEluIFNXQVdfU1RFUF9QRUFLLCBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGFudGVubmEgYW5kIGxpc3RlbiB0bwogKiAgdGhlIHNpZ25hbCBvbiB0aGUgYWlyLgogKi8KLyogIEluIFNXQVdfU1RFUF9ERVRFUk1JTkUsIGRyaXZlciBqdXN0IGNvbXBhcmVzIHRoZSBzaWduYWwgY2FwdHVyZWQgaW4KICogIFNXQVdfU1RFUF9QRUFLIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvCiAqICBzd2l0Y2ggYW50ZW5uYS4KICovCgojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lCVRQX01PREUJCQkwCiNkZWZpbmUJUlNTSV9NT0RFCQkxCiNkZWZpbmUJVFJBRkZJQ19MT1cJCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJCTEKCnN0cnVjdCBzd19hbnRfc3dpdGNoIHsKCXU4CXRyeV9mbGFnOwoJczMyCVByZVJTU0k7Cgl1OAlDdXJBbnRlbm5hOwoJdTgJUHJlQW50ZW5uYTsKCXU4CVJTU0lfVHJ5aW5nOwoJdTgJVGVzdE1vZGU7Cgl1OAliVHJpZ2dlckFudGVubmFTd2l0Y2g7Cgl1OAlTZWxlY3RBbnRlbm5hTWFwOwoJdTgJUlNTSV90YXJnZXQ7CgoJLyogIEJlZm9yZSBsaW5rIEFudGVubmEgU3dpdGNoIGNoZWNrICovCgl1OAlTV0FTX05vTGlua19TdGF0ZTsKCXUzMglTV0FTX05vTGlua19CS19SZWc4NjA7Cglib29sCUFOVEFfT047CS8qIFRvIGluZGljYXRlIEFudCBBIGlzIG9yIG5vdCAqLwoJYm9vbAlBTlRCX09OOwkvKiBUbyBpbmRpY2F0ZSBBbnQgQiBpcyBvbiBvciBub3QgKi8KCglzMzIJUlNTSV9zdW1fQTsKCXMzMglSU1NJX3N1bV9COwoJczMyCVJTU0lfY250X0E7CglzMzIJUlNTSV9jbnRfQjsKCXU2NAlsYXN0VHhPa0NudDsKCXU2NAlsYXN0UnhPa0NudDsKCXU2NAlUWEJ5dGVDbnRfQTsKCXU2NAlUWEJ5dGVDbnRfQjsKCXU2NAlSWEJ5dGVDbnRfQTsKCXU2NAlSWEJ5dGVDbnRfQjsKCXU4CVRyYWZmaWNMb2FkOwoJc3RydWN0IHRpbWVyX2xpc3QgU3dBbnRlbm5hU3dpdGNoVGltZXI7CgkvKiBIeWJyaWQgQW50ZW5uYSBEaXZlcnNpdHkgKi8KCXUzMglDQ0tfQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQ0NLX0FudDJfQ250W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU9GRE1fQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJT0ZETV9BbnQyX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglSU1NJX0FudDFfU3VtW0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCVJTU0lfQW50Ml9TdW1bQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlUeEFudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVRhcmdldFNUQTsKCXU4CWFudHNlbDsKCXU4CVJ4SWRsZUFudDsKfTsKCnN0cnVjdCBlZGNhX3R1cmJvIHsKCWJvb2wgYkN1cnJlbnRUdXJib0VEQ0E7Cglib29sIGJJc0N1clJETFN0YXRlOwoJdTMyCXBydl90cmFmZmljX2lkeDsgLyogIGVkY2EgdHVyYm8gKi8KfTsKCnN0cnVjdCBvZG1fcmF0ZV9hZGFwdCB7Cgl1OAlUeXBlOwkJLyogIERNX1R5cGVfQnlGVy9ETV9UeXBlX0J5RHJpdmVyICovCgl1OAlIaWdoUlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPiBIaWdoUlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfSElHSCAqLwoJdTgJTG93UlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPD0gTG93UlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfTE9XICovCgl1OAlSQVRSU3RhdGU7CS8qICBDdXJyZW50IFJTU0kgbGV2ZWwsIERNX1JBVFJfU1RBX0hJR0gvRE1fUkFUUl9TVEFfTUlERExFL0RNX1JBVFJfU1RBX0xPVyAqLwoJdTMyCUxhc3RSQVRSOwkvKiAgUkFUUiBSZWdpc3RlciBDb250ZW50ICovCn07CgojZGVmaW5lIElRS19NQUNfUkVHX05VTQkJNAojZGVmaW5lIElRS19BRERBX1JFR19OVU0JMTYKI2RlZmluZSBJUUtfQkJfUkVHX05VTV9NQVgJMTAKI2RlZmluZSBJUUtfQkJfUkVHX05VTQkJOQojZGVmaW5lIEhQX1RIRVJNQUxfTlVNCQk4CgojZGVmaW5lIEFWR19USEVSTUFMX05VTQkJOAojZGVmaW5lIElRS19NYXRyaXhfUkVHX05VTQk4CiNkZWZpbmUgSVFLX01hdHJpeF9TZXR0aW5nc19OVU0JMSsyNCsyMQoKI2RlZmluZQlETV9UeXBlX0J5RldpCQkwCiNkZWZpbmUJRE1fVHlwZV9CeURyaXZlcgkxCgovKiAgRGVjbGFyZSBmb3IgY29tbW9uIGluZm8gKi8KCnN0cnVjdCBvZG1fcGh5X3N0YXR1c19pbmZvIHsKCXU4CVJ4UFdEQkFsbDsKCXU4CVNpZ25hbFF1YWxpdHk7CSAvKiAgaW4gMC0xMDAgaW5kZXguICovCgl1OAlSeE1JTU9TaWduYWxRdWFsaXR5W01BWF9QQVRIX05VTV85MkNTXTsgLyogRVZNICovCgl1OAlSeE1JTU9TaWduYWxTdHJlbmd0aFtNQVhfUEFUSF9OVU1fOTJDU107LyogIGluIDB+MTAwIGluZGV4ICovCglzOAlSeFBvd2VyOyAvKiAgaW4gZEJtIFRyYW5zbGF0ZSBmcm9tIFBXZEIgKi8KCXM4CVJlY3ZTaWduYWxQb3dlcjsvKiAgUmVhbCBwb3dlciBpbiBkQm0gZm9yIHRoaXMgcGFja2V0LCBubwoJCQkJICogYmVhdXRpZmljYXRpb24gYW5kIGFnZ3JlZ2F0aW9uLiBLZWVwIHRoaXMgcmF3CgkJCQkgKiBpbmZvIHRvIGJlIHVzZWQgZm9yIHRoZSBvdGhlciBwcm9jZWR1cmVzLgoJCQkJICovCgl1OAlCVFJ4UlNTSVBlcmNlbnRhZ2U7Cgl1OAlTaWduYWxTdHJlbmd0aDsgLyogIGluIDAtMTAwIGluZGV4LiAqLwoJdTgJUnhQd3JbTUFYX1BBVEhfTlVNXzkyQ1NdOy8qIHBlci1wYXRoJ3MgcHdkYiAqLwoJdTgJUnhTTlJbTUFYX1BBVEhfTlVNXzkyQ1NdOy8qIHBlci1wYXRoJ3MgU05SICovCn07CgpzdHJ1Y3Qgb2RtX3BoeV9kYmdfaW5mbyB7CgkvKiBPRE0gV3JpdGUsZGVidWcgaW5mbyAqLwoJczgJUnhTTlJkQltNQVhfUEFUSF9OVU1fOTJDU107Cgl1NjQJTnVtUXJ5UGh5U3RhdHVzOwoJdTY0CU51bVFyeVBoeVN0YXR1c0NDSzsKCXU2NAlOdW1RcnlQaHlTdGF0dXNPRkRNOwoJLyogT3RoZXJzICovCglzMzIJUnhFVk1bTUFYX1BBVEhfTlVNXzkyQ1NdOwp9OwoKc3RydWN0IG9kbV9wZXJfcGt0X2luZm8gewoJczgJUmF0ZTsKCXU4CVN0YXRpb25JRDsKCWJvb2wJYlBhY2tldE1hdGNoQlNTSUQ7Cglib29sCWJQYWNrZXRUb1NlbGY7Cglib29sCWJQYWNrZXRCZWFjb247Cn07CgpzdHJ1Y3Qgb2RtX21hY19zdGF0dXNfaW5mbyB7Cgl1OAl0ZXN0Owp9OwoKZW51bSBvZG1fYWJpbGl0eSB7CgkvKiAgQkIgVGVhbSAqLwoJT0RNX0RJRwkJCT0gMHgwMDAwMDAwMSwKCU9ETV9ISUdIX1BPV0VSCQk9IDB4MDAwMDAwMDIsCglPRE1fQ0NLX0NDQV9USAkJPSAweDAwMDAwMDA0LAoJT0RNX0ZBX1NUQVRJU1RJQ1MJPSAweDAwMDAwMDA4LAoJT0RNX1JBTUFTSwkJPSAweDAwMDAwMDEwLAoJT0RNX1JTU0lfTU9OSVRPUgk9IDB4MDAwMDAwMjAsCglPRE1fU1dfQU5URElWCQk9IDB4MDAwMDAwNDAsCglPRE1fSFdfQU5URElWCQk9IDB4MDAwMDAwODAsCglPRE1fQkJfUFdSU1YJCT0gMHgwMDAwMDEwMCwKCU9ETV8yVFBBVEhESVYJCT0gMHgwMDAwMDIwMCwKCU9ETV8xVFBBVEhESVYJCT0gMHgwMDAwMDQwMCwKCU9ETV9QU0QyQUZICQk9IDB4MDAwMDA4MDAKfTsKCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBDb21tb24gaW5mbyBlbnVtIGZvciBhbGwgdGVhbS4gKi8KCmVudW0gb2RtX2NvbW1vbl9pbmZvX2RlZiB7CgkvKiAgRml4ZWQgdmFsdWU6ICovCgoJLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoJT0RNX0NNTklORk9fUExBVEZPUk0gPSAwLAoJT0RNX0NNTklORk9fQUJJTElUWSwJCS8qIE9ETV9BQklMSVRZX0UgKi8KCU9ETV9DTU5JTkZPX0lOVEVSRkFDRSwJCS8qIE9ETV9JTlRFUkZBQ0VfRSAqLwoJT0RNX0NNTklORk9fTVBfVEVTVF9DSElQLAoJT0RNX0NNTklORk9fSUNfVFlQRSwJCS8qIE9ETV9JQ19UWVBFX0UgKi8KCU9ETV9DTU5JTkZPX0NVVF9WRVIsCQkvKiBPRE1fQ1VUX1ZFUlNJT05fRSAqLwoJT0RNX0NNTklORk9fUkZfVFlQRSwJCS8qIE9ETV9SRl9QQVRIX0Ugb3IgT0RNX1JGX1RZUEVfRT8gKi8KCU9ETV9DTU5JTkZPX0JPQVJEX1RZUEUsCQkvKiBPRE1fQk9BUkRfVFlQRV9FICovCglPRE1fQ01OSU5GT19FWFRfTE5BLAkJLyogdHJ1ZSAqLwoJT0RNX0NNTklORk9fRVhUX1BBLAoJT0RNX0NNTklORk9fRVhUX1RSU1csCglPRE1fQ01OSU5GT19QQVRDSF9JRCwJCS8qIENVU1RPTUVSIElEICovCglPRE1fQ01OSU5GT19CSU5IQ1RfVEVTVCwKCU9ETV9DTU5JTkZPX0JXSUZJX1RFU1QsCglPRE1fQ01OSU5GT19TTUFSVF9DT05DVVJSRU5ULAoJLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAgKi8KCgkvKiAgRHluYW1pYyB2YWx1ZTogKi8KLyogIFBPSU5URVIgUkVGRVJFTkNFLS0tLS0tLS0tLS0gICovCglPRE1fQ01OSU5GT19NQUNfUEhZX01PREUsCS8qICBPRE1fTUFDX1BIWV9NT0RFX0UgKi8KCU9ETV9DTU5JTkZPX1RYX1VOSSwKCU9ETV9DTU5JTkZPX1JYX1VOSSwKCU9ETV9DTU5JTkZPX1dNX01PREUsCQkvKiAgT0RNX1dJUkVMRVNTX01PREVfRSAqLwoJT0RNX0NNTklORk9fQkFORCwJCS8qICBPRE1fQkFORF9UWVBFX0UgKi8KCU9ETV9DTU5JTkZPX1NFQ19DSE5MX09GRlNFVCwJLyogIE9ETV9TRUNfQ0hOTF9PRkZTRVRfRSAqLwoJT0RNX0NNTklORk9fU0VDX01PREUsCQkvKiAgT0RNX1NFQ1VSSVRZX0UgKi8KCU9ETV9DTU5JTkZPX0JXLAkJCS8qICBPRE1fQldfRSAqLwoJT0RNX0NNTklORk9fQ0hOTCwKCglPRE1fQ01OSU5GT19ETVNQX0dFVF9WQUxVRSwKCU9ETV9DTU5JTkZPX0JVRERZX0FEQVBUT1IsCglPRE1fQ01OSU5GT19ETVNQX0lTX01BU1RFUiwKCU9ETV9DTU5JTkZPX1NDQU4sCglPRE1fQ01OSU5GT19QT1dFUl9TQVZJTkcsCglPRE1fQ01OSU5GT19PTkVfUEFUSF9DQ0EsCS8qICBPRE1fQ0NBX1BBVEhfRSAqLwoJT0RNX0NNTklORk9fRFJWX1NUT1AsCglPRE1fQ01OSU5GT19QTlBfSU4sCglPRE1fQ01OSU5GT19JTklUX09OLAoJT0RNX0NNTklORk9fQU5UX1RFU1QsCglPRE1fQ01OSU5GT19ORVRfQ0xPU0VELAoJT0RNX0NNTklORk9fTVBfTU9ERSwKLyogIFBPSU5URVIgUkVGRVJFTkNFLS0tLS0tLS0tLS0gKi8KCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCglPRE1fQ01OSU5GT19XSUZJX0RJUkVDVCwKCU9ETV9DTU5JTkZPX1dJRklfRElTUExBWSwKCU9ETV9DTU5JTkZPX0xJTkssCglPRE1fQ01OSU5GT19SU1NJX01JTiwKCU9ETV9DTU5JTkZPX0RCR19DT01QLAkJCS8qICB1NjQgKi8KCU9ETV9DTU5JTkZPX0RCR19MRVZFTCwJCQkvKiAgdTMyICovCglPRE1fQ01OSU5GT19SQV9USFJFU0hPTERfSElHSCwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0xPVywJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkZfQU5URU5OQV9UWVBFLAkJLyogIHU4ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFRCwKCU9ETV9DTU5JTkZPX0JUX09QRVJBVElPTiwKCU9ETV9DTU5JTkZPX0JUX0RJRywKCU9ETV9DTU5JTkZPX0JUX0JVU1ksCQkJLyogQ2hlY2sgQnQgaXMgdXNpbmcgb3Igbm90ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFX0VEQ0EsCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tKi8KCgkvKiAgRHluYW1pYyBwdHIgYXJyYXkgaG9vayBpdG1zLiAqLwoJT0RNX0NNTklORk9fU1RBX1NUQVRVUywKCU9ETV9DTU5JTkZPX1BIWV9TVEFUVVMsCglPRE1fQ01OSU5GT19NQUNfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFYLAp9OwoKLyogIDIwMTEvMTAvMjAgTUggRGVmaW5lIE9ETSBzdXBwb3J0IGFiaWxpdHkuICBPRE1fQ01OSU5GT19BQklMSVRZICovCgplbnVtIG9kbV9hYmlsaXR5X2RlZiB7CgkvKiAgQkIgT0RNIHNlY3Rpb24gQklUIDAtMTUgKi8KCU9ETV9CQl9ESUcJCQk9IEJJVCgwKSwKCU9ETV9CQl9SQV9NQVNLCQkJPSBCSVQoMSksCglPRE1fQkJfRFlOQU1JQ19UWFBXUgkJPSBCSVQoMiksCglPRE1fQkJfRkFfQ05UCQkJPSBCSVQoMyksCglPRE1fQkJfUlNTSV9NT05JVE9SCQk9IEJJVCg0KSwKCU9ETV9CQl9DQ0tfUEQJCQk9IEJJVCg1KSwKCU9ETV9CQl9BTlRfRElWCQkJPSBCSVQoNiksCglPRE1fQkJfUFdSX1NBVkUJCQk9IEJJVCg3KSwKCU9ETV9CQl9QV1JfVFJBCQkJPSBCSVQoOCksCglPRE1fQkJfUkFURV9BREFQVElWRQkJPSBCSVQoOSksCglPRE1fQkJfUEFUSF9ESVYJCQk9IEJJVCgxMCksCglPRE1fQkJfUFNECQkJPSBCSVQoMTEpLAoJT0RNX0JCX1JYSFAJCQk9IEJJVCgxMiksCgoJLyogIE1BQyBETSBzZWN0aW9uIEJJVCAxNi0yMyAqLwoJT0RNX01BQ19FRENBX1RVUkJPCQk9IEJJVCgxNiksCglPRE1fTUFDX0VBUkxZX01PREUJCT0gQklUKDE3KSwKCgkvKiAgUkYgT0RNIHNlY3Rpb24gQklUIDI0LTMxICovCglPRE1fUkZfVFhfUFdSX1RSQUNLCQk9IEJJVCgyNCksCglPRE1fUkZfUlhfR0FJTl9UUkFDSwkJPSBCSVQoMjUpLAoJT0RNX1JGX0NBTElCUkFUSU9OCQk9IEJJVCgyNiksCn07CgojZGVmaW5lIE9ETV9SVEw4MTg4RQkJQklUKDQpCgovKiBPRE1fQ01OSU5GT19DVVRfVkVSICovCmVudW0gb2RtX2N1dF92ZXJzaW9uIHsKCU9ETV9DVVRfQQk9CTEsCglPRE1fQ1VUX0IJPQkyLAoJT0RNX0NVVF9DCT0JMywKCU9ETV9DVVRfRAk9CTQsCglPRE1fQ1VUX0UJPQk1LAoJT0RNX0NVVF9GCT0JNiwKCU9ETV9DVVRfVEVTVAk9CTcsCn07CgovKiAgT0RNX0NNTklORk9fUkZfVFlQRSAqLwovKiAgRm9yIGV4YW1wbGUgMVQyUiAoQStBQiA9IEJJVDB8QklUNHxCSVQ1KSAqLwplbnVtIG9kbV9yZl9wYXRoIHsKCU9ETV9SRl9UWF9BCT0JQklUKDApLAoJT0RNX1JGX1RYX0IJPQlCSVQoMSksCglPRE1fUkZfVFhfQwk9CUJJVCgyKSwKCU9ETV9SRl9UWF9ECT0JQklUKDMpLAoJT0RNX1JGX1JYX0EJPQlCSVQoNCksCglPRE1fUkZfUlhfQgk9CUJJVCg1KSwKCU9ETV9SRl9SWF9DCT0JQklUKDYpLAoJT0RNX1JGX1JYX0QJPQlCSVQoNyksCn07CgplbnVtIG9kbV9yZl90eXBlIHsKCU9ETV8xVDFSCT0JMCwKCU9ETV8xVDJSCT0JMSwKCU9ETV8yVDJSCT0JMiwKCU9ETV8yVDNSCT0JMywKCU9ETV8yVDRSCT0JNCwKCU9ETV8zVDNSCT0JNSwKCU9ETV8zVDRSCT0JNiwKCU9ETV80VDRSCT0JNywKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCgplbnVtIG9kbV9tYWNfcGh5X21vZGUgewoJT0RNX1NNU1AJPSAwLAoJT0RNX0RNU1AJPSAxLAoJT0RNX0RNRFAJPSAyLAp9OwoKZW51bSBvZG1fYnRfY29leGlzdCB7CglPRE1fQlRfQlVTWQkJPSAxLAoJT0RNX0JUX09OCQk9IDIsCglPRE1fQlRfT0ZGCQk9IDMsCglPRE1fQlRfTk9ORQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09QX01PREUgKi8KZW51bSBvZG1fb3BlcmF0aW9uX21vZGUgewoJT0RNX05PX0xJTksJCT0gQklUKDApLAoJT0RNX0xJTksJCT0gQklUKDEpLAoJT0RNX1NDQU4JCT0gQklUKDIpLAoJT0RNX1BPV0VSU0FWRQkJPSBCSVQoMyksCglPRE1fQVBfTU9ERQkJPSBCSVQoNCksCglPRE1fQ0xJRU5UX01PREUJCT0gQklUKDUpLAoJT0RNX0FEX0hPQwkJPSBCSVQoNiksCglPRE1fV0lGSV9ESVJFQ1QJCT0gQklUKDcpLAoJT0RNX1dJRklfRElTUExBWQk9IEJJVCg4KSwKfTsKCi8qICBPRE1fQ01OSU5GT19XTV9NT0RFICovCmVudW0gb2RtX3dpcmVsZXNzX21vZGUgewoJT0RNX1dNX1VOS05PV04JPSAweDAsCglPRE1fV01fQgk9IEJJVCgwKSwKCU9ETV9XTV9HCT0gQklUKDEpLAoJT0RNX1dNX0EJPSBCSVQoMiksCglPRE1fV01fTjI0Rwk9IEJJVCgzKSwKCU9ETV9XTV9ONUcJPSBCSVQoNCksCglPRE1fV01fQVVUTwk9IEJJVCg1KSwKCU9ETV9XTV9BQwk9IEJJVCg2KSwKfTsKCi8qICBPRE1fQ01OSU5GT19CQU5EICovCmVudW0gb2RtX2JhbmRfdHlwZSB7CglPRE1fQkFORF8yXzRHCT0gQklUKDApLAoJT0RNX0JBTkRfNUcJPSBCSVQoMSksCn07CgovKiAgT0RNX0NNTklORk9fU0VDX0NITkxfT0ZGU0VUICovCmVudW0gb2RtX3NlY19jaG5sX29mZnNldCB7CglPRE1fRE9OVF9DQVJFCT0gMCwKCU9ETV9CRUxPVwk9IDEsCglPRE1fQUJPVkUJPSAyCn07CgovKiAgT0RNX0NNTklORk9fU0VDX01PREUgKi8KZW51bSBvZG1fc2VjdXJpdHkgewoJT0RNX1NFQ19PUEVOCQk9IDAsCglPRE1fU0VDX1dFUDQwCQk9IDEsCglPRE1fU0VDX1RLSVAJCT0gMiwKCU9ETV9TRUNfUkVTRVJWRQkJPSAzLAoJT0RNX1NFQ19BRVNDQ01QCQk9IDQsCglPRE1fU0VDX1dFUDEwNAkJPSA1LAoJT0RNX1dFUF9XUEFfTUlYRUQJPSA2LCAvKiAgV0VQICsgV1BBICovCglPRE1fU0VDX1NNUzQJCT0gNywKfTsKCi8qICBPRE1fQ01OSU5GT19CVyAqLwplbnVtIG9kbV9idyB7CglPRE1fQlcyME0JCT0gMCwKCU9ETV9CVzQwTQkJPSAxLAoJT0RNX0JXODBNCQk9IDIsCglPRE1fQlcxNjBNCQk9IDMsCglPRE1fQlcxME0JCT0gNCwKfTsKCi8qICBPRE1fQ01OSU5GT19CT0FSRF9UWVBFICovCmVudW0gb2RtX2JvYXJkX3R5cGUgewoJT0RNX0JPQVJEX05PUk1BTAk9IDAsCglPRE1fQk9BUkRfSElHSFBXUgk9IDEsCglPRE1fQk9BUkRfTUlOSUNBUkQJPSAyLAoJT0RNX0JPQVJEX1NMSU0JCT0gMywKCU9ETV9CT0FSRF9DT01CTwkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09ORV9QQVRIX0NDQSAqLwplbnVtIG9kbV9jY2FfcGF0aCB7CglPRE1fQ0NBXzJSCQk9IDAsCglPRE1fQ0NBXzFSX0EJCT0gMSwKCU9ETV9DQ0FfMVJfQgkJPSAyLAp9OwoKc3RydWN0IG9kbV9yYV9pbmZvIHsKCXU4IFJhdGVJRDsKCXUzMiBSYXRlTWFzazsKCXUzMiBSQVVzZVJhdGU7Cgl1OCBSYXRlU0dJOwoJdTggUnNzaVN0YVJBOwoJdTggUHJlUnNzaVN0YVJBOwoJdTggU0dJRW5hYmxlOwoJdTggRGVjaXNpb25SYXRlOwoJdTggUHJlUmF0ZTsKCXU4IEhpZ2hlc3RSYXRlOwoJdTggTG93ZXN0UmF0ZTsKCXUzMiBOc2NVcDsKCXUzMiBOc2NEb3duOwoJdTE2IFJUWVs1XTsKCXUzMiBUT1RBTDsKCXUxNiBEUk9QOwoJdTggQWN0aXZlOwoJdTE2IFJwdFRpbWU7Cgl1OCBSQVdhaXRpbmdDb3VudGVyOwoJdTggUkFQZW5kaW5nQ291bnRlcjsKCXU4IFBUQWN0aXZlOwkvKiAgb24gb3Igb2ZmICovCgl1OCBQVFRyeVN0YXRlOwkvKiAgMCB0cnlpbmcgc3RhdGUsIDEgZm9yIGRlY2lzaW9uIHN0YXRlICovCgl1OCBQVFN0YWdlOwkvKiAgMH42ICovCgl1OCBQVFN0b3BDb3VudDsJLyogU3RvcCBQVCBjb3VudGVyICovCgl1OCBQVFByZVJhdGU7CS8qICBpZiByYXRlIGNoYW5nZSBkbyBQVCAqLwoJdTggUFRQcmVSc3NpOwkvKiAgaWYgUlNTSSBjaGFuZ2UgNSUgZG8gUFQgKi8KCXU4IFBUTW9kZVNTOwkvKiAgZGVjaWRlIHdoaXRjaCByYXRlIHNob3VsZCBkbyBQVCAqLwoJdTggUkFzdGFnZTsJLyogIFN0YWdlUkEsIGRlY2lkZSBob3cgbWFueSB0aW1lcyBSQSB3aWxsIGJlIGRvbmUKCQkJICogYmV0d2VlbiBQVAoJCQkgKi8KCXU4IFBUU21vb3RoRmFjdG9yOwp9OwoKc3RydWN0IGlqa19tYXRyaXhfcmVnc19zZXQgewoJYm9vbAliSVFLRG9uZTsKCXMzMglWYWx1ZVsxXVtJUUtfTWF0cml4X1JFR19OVU1dOwp9OwoKc3RydWN0IG9kbV9yZl9jYWwgewoJLyogZm9yIHR4IHBvd2VyIHRyYWNraW5nICovCgl1MzIJUmVnQTI0OyAvKiAgZm9yIFRlbXBDQ0sgKi8KCXMzMglSZWdFOTQ7CglzMzIJUmVnRTlDOwoJczMyCVJlZ0VCNDsKCXMzMglSZWdFQkM7CgoJdTgJVFhQb3dlcmNvdW50OwoJYm9vbAliVFhQb3dlclRyYWNraW5nOwoJdTgJVHhQb3dlclRyYWNrQ29udHJvbDsgLyogZm9yIG1wIG1vZGUsIHR1cm4gb2ZmIHR4cHdydHJhY2tpbmcKCQkJCSAgICAgICogYXMgZGVmYXVsdAoJCQkJICAgICAgKi8KCXU4CVRNX1RyaWdnZXI7Cgl1OAlJbnRlcm5hbFBBNUdbMl07CS8qIHBhdGhBIC8gcGF0aEIgKi8KCgl1OAlUaGVybWFsTWV0ZXJbMl07ICAgIC8qIFRoZXJtYWxNZXRlciwgaW5kZXggMCBmb3IgUkZJQzAsCgkJCQkgICAgICogYW5kIDEgZm9yIFJGSUMxCgkJCQkgICAgICovCgl1OAlUaGVybWFsVmFsdWU7Cgl1OAlUaGVybWFsVmFsdWVfTENLOwoJdTgJVGhlcm1hbFZhbHVlX0lRSzsKCXU4CVRoZXJtYWxWYWx1ZV9EUEs7Cgl1OAlUaGVybWFsVmFsdWVfQVZHW0FWR19USEVSTUFMX05VTV07Cgl1OAlUaGVybWFsVmFsdWVfQVZHX2luZGV4OwoJdTgJVGhlcm1hbFZhbHVlX1J4R2FpbjsKCXU4CVRoZXJtYWxWYWx1ZV9DcnlzdGFsOwoJdTgJVGhlcm1hbFZhbHVlX0RQS3N0b3JlOwoJdTgJVGhlcm1hbFZhbHVlX0RQS3RyYWNrOwoJYm9vbAlUeFBvd2VyVHJhY2tpbmdJblByb2dyZXNzOwoJYm9vbAliRFBLZW5hYmxlOwoKCWJvb2wJYlJlbG9hZHR4cG93ZXJpbmRleDsKCXU4CWJSZlBpRW5hYmxlOwoJdTMyCVRYUG93ZXJUcmFja2luZ0NhbGxiYWNrQ250OyAvKiBjb3NhIGFkZCBmb3IgZGVidWcgKi8KCgl1OAliQ0NLaW5DSDE0OwoJdTgJQ0NLX2luZGV4OwoJdTgJT0ZETV9pbmRleFsyXTsKCWJvb2wgYkRvbmVUeHBvd2VyOwoKCXU4CVRoZXJtYWxWYWx1ZV9IUFtIUF9USEVSTUFMX05VTV07Cgl1OAlUaGVybWFsVmFsdWVfSFBfaW5kZXg7CglzdHJ1Y3QgaWprX21hdHJpeF9yZWdzX3NldCBJUUtNYXRyaXhSZWdTZXR0aW5nW0lRS19NYXRyaXhfU2V0dGluZ3NfTlVNXTsKCgl1OAlEZWx0YV9JUUs7Cgl1OAlEZWx0YV9MQ0s7CgoJLyogZm9yIElRSyAqLwoJdTMyCVJlZ0MwNDsKCXUzMglSZWc4NzQ7Cgl1MzIJUmVnQzA4OwoJdTMyCVJlZ0I2ODsKCXUzMglSZWdCNkM7Cgl1MzIJUmVnODcwOwoJdTMyCVJlZzg2MDsKCXUzMglSZWc4NjQ7CgoJYm9vbAliSVFLSW5pdGlhbGl6ZWQ7Cglib29sCWJMQ0tJblByb2dyZXNzOwoJYm9vbAliQW50ZW5uYURldGVjdGVkOwoJdTMyCUFEREFfYmFja3VwW0lRS19BRERBX1JFR19OVU1dOwoJdTMyCUlRS19NQUNfYmFja3VwW0lRS19NQUNfUkVHX05VTV07Cgl1MzIJSVFLX0JCX2JhY2t1cF9yZWNvdmVyWzldOwoJdTMyCUlRS19CQl9iYWNrdXBbSVFLX0JCX1JFR19OVU1dOwoKCS8qIGZvciBBUEsgKi8KCXUzMglBUEtvdXRwdXRbMl1bMl07IC8qIHBhdGggQS9COyBvdXRwdXQxXzFhL291dHB1dDFfMmEgKi8KCXU4CWJBUEtkb25lOwoJdTgJYkFQS1RoZXJtYWxNZXRlcklnbm9yZTsKCXU4CWJEUGRvbmU7Cgl1OAliRFBQYXRoQU9LOwoJdTgJYkRQUGF0aEJPSzsKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCgpzdHJ1Y3QgZmFzdF9hbnRfdHJhaW4gewoJdTgJQnNzaWRbNl07Cgl1OAlhbnRzZWxfcnhfa2VlcF8wOwoJdTgJYW50c2VsX3J4X2tlZXBfMTsKCXU4CWFudHNlbF9yeF9rZWVwXzI7Cgl1MzIJYW50U3VtUlNTSVs3XTsKCXUzMglhbnRSU1NJY250WzddOwoJdTMyCWFudEF2ZVJTU0lbN107Cgl1OAlGQVRfU3RhdGU7Cgl1MzIJVHJhaW5JZHg7Cgl1OAlhbnRzZWxfYVtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlhbnRzZWxfYltPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlhbnRzZWxfY1tPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJTWFpbkFudF9TdW1bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCUF1eEFudF9TdW1bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU1haW5BbnRfQ250W09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglBdXhBbnRfQ250W09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVJ4SWRsZUFudDsKCWJvb2wJYkJlY29tZUxpbmtlZDsKfTsKCmVudW0gZmF0X3N0YXRlIHsKCUZBVF9OT1JNQUxfU1RBVEUJCT0gMCwKCUZBVF9UUkFJTklOR19TVEFURQkJPSAxLAp9OwoKZW51bSBhbnRfZGl2X3R5cGUgewoJTk9fQU5URElWCQkJPSAweEZGLAoJQ0dfVFJYX0hXX0FOVERJVgkJPSAweDAxLAoJQ0dDU19SWF9IV19BTlRESVYJCT0gMHgwMiwKCUZJWEVEX0hXX0FOVERJVgkJCT0gMHgwMywKCUNHX1RSWF9TTUFSVF9BTlRESVYJCT0gMHgwNCwKCUNHQ1NfUlhfU1dfQU5URElWCQk9IDB4MDUsCn07CgovKiBDb3B5IGZyb20gU0Q0IGRlZmluZWQgc3RydWN0dXJlLiBXZSB1c2UgdG8gc3VwcG9ydCBQSFkgRE0gaW50ZWdyYXRpb24uICovCnN0cnVjdCBvZG1fZG1fc3RydWN0IHsKCS8qCUFkZCBmb3IgZGlmZmVyZW50IHRlYW0gdXNlIHRlbXBvcmFyaWx5ICovCglzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlcjsJLyogIEZvciBDRS9OSUMgdGVhbSAqLwoJc3RydWN0IHJ0bDgxOTJjZF9wcml2ICpwcml2OwkvKiAgRm9yIEFQL0FEU0wgdGVhbSAqLwoJLyogIFdIZW4geW91IHVzZSBhYm92ZSBwb2ludGVycywgdGhleSBtdXN0IGJlIGluaXRpYWxpemVkLiAqLwoJYm9vbAlvZG1fcmVhZHk7CgoJc3RydWN0IHJ0bDgxOTJjZF9wcml2ICpmYWtlX3ByaXY7Cgl1NjQJRGVidWdDb21wb25lbnRzOwoJdTMyCURlYnVnTGV2ZWw7CgovKiAgT0RNIEhBTkRMRSwgRFJJVkVSIE5FRURTIE5PVCBUTyBIT09LLS0tLS0tICovCglib29sCWJDY2tIaWdoUG93ZXI7Cgl1OAlSRlBhdGhSeEVuYWJsZTsJCS8qICBPRE1fQ01OSU5GT19SRlBBVEhfRU5BQkxFICovCgl1OAlDb250cm9sQ2hhbm5lbDsKLyogIE9ETSBIQU5ETEUsIERSSVZFUiBORUVEUyBOT1QgVE8gSE9PSy0tLS0tLSAqLwoKLyogMSAgQ09NTU9OIElORk9STUFUSU9OICovCgkvKiAgSW5pdCBWYWx1ZSAqLwovKiBIT09LIEJFRk9SRSBSRUcgSU5JVC0tLS0tLS0tLS0tICovCgkvKiAgT0RNIFBsYXRmb3JtIGluZm8gQVAvQURTTC9DRS9NUCA9IDEvMi8zLzQgKi8KCXU4CVN1cHBvcnRQbGF0Zm9ybTsKCS8qICBPRE0gU3VwcG9ydCBBYmlsaXR5IERJRy9SQVRSL1RYX1BXUl9UUkFDSy8goUuhSyA9IDEvMi8zL6FLICovCgl1MzIJU3VwcG9ydEFiaWxpdHk7CgkvKiAgT0RNIFBDSUUvVVNCL1NESU8vR1NQSSA9IDAvMS8yLzMgKi8KCXU4CVN1cHBvcnRJbnRlcmZhY2U7CgkvKiAgT0RNIGNvbXBvc2l0ZSBvciBpbmRlcGVuZGVudC4gQml0IG9yaWVudGVkLyA5MkMrOTJEKyAuLi4uIG9yIGFueQoJICogIG90aGVyIHR5cGUgPSAxLzIvMy8uLi4KCSAqLwoJdTMyCVN1cHBvcnRJQ1R5cGU7CgkvKiAgQ3V0IFZlcnNpb24gVGVzdENoaXAvQS1jdXQvQi1jdXQuLi4gPSAwLzEvMi8zLy4uLiAqLwoJdTgJQ3V0VmVyc2lvbjsKCS8qICBCb2FyZCBUeXBlIE5vcm1hbC9IaWdoUG93ZXIvTWluaUNhcmQvU0xJTS9Db21iby8uID0gMC8xLzIvMy80Ly4gKi8KCXU4CUJvYXJkVHlwZTsKCS8qICB3aXRoIGV4dGVybmFsIExOQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRMTkE7CgkvKiAgd2l0aCBleHRlcm5hbCBQQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRQQTsKCS8qICB3aXRoIGV4dGVybmFsIFRSU1cgIE5PL1llcyA9IDAvMSAqLwoJdTgJRXh0VFJTVzsKCXU4CVBhdGNoSUQ7IC8qIEN1c3RvbWVyIElEICovCglib29sCWJJbkhjdFRlc3Q7Cglib29sCWJXSUZJVGVzdDsKCglib29sCWJEdWFsTWFjU21hcnRDb25jdXJyZW50OwoJdTMyCUJLX1N1cHBvcnRBYmlsaXR5OwoJdTgJQW50RGl2VHlwZTsKLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoKCS8qICBEeW5hbWljIFZhbHVlICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgoJdTgJdThfdGVtcDsKCWJvb2wJYm9vbF90ZW1wOwoJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXJfdGVtcDsKCgkvKiAgTUFDIFBIWSBNb2RlIFNNU1AvRE1TUC9ETURQID0gMC8xLzIgKi8KCXU4CSpwTWFjUGh5TW9kZTsKCS8qIFRYIFVuaWNhc3QgYnl0ZSBjb3VudCAqLwoJdTY0CSpwTnVtVHhCeXRlc1VuaWNhc3Q7CgkvKiBSWCBVbmljYXN0IGJ5dGUgY291bnQgKi8KCXU2NAkqcE51bVJ4Qnl0ZXNVbmljYXN0OwoJLyogIFdpcmVsZXNzIG1vZGUgQi9HL0EvTiA9IEJJVDAvQklUMS9CSVQyL0JJVDMgKi8KCXU4CSpwV2lyZWxlc3NNb2RlOyAvKiBPRE1fV0lSRUxFU1NfTU9ERV9FICovCgkvKiAgRnJlcXVlbmNlIGJhbmQgMi40Ry81RyA9IDAvMSAqLwoJdTgJKnBCYW5kVHlwZTsKCS8qICBTZWNvbmRhcnkgY2hhbm5lbCBvZmZzZXQgZG9uJ3RfY2FyZS9iZWxvdy9hYm92ZSA9IDAvMS8yICovCgl1OAkqcFNlY0NoT2Zmc2V0OwoJLyogIFNlY3VyaXR5IG1vZGUgT3Blbi9XRVAvQUVTL1RLSVAgPSAwLzEvMi8zICovCgl1OAkqcFNlY3VyaXR5OwoJLyogIEJXIGluZm8gMjBNLzQwTS84ME0gPSAwLzEvMiAqLwoJdTgJKnBCYW5kV2lkdGg7CgkvKiAgQ2VudHJhbCBjaGFubmVsIGxvY2F0aW9uIENoMS9DaDIvLi4uLiAqLwoJdTgJKnBDaGFubmVsOwkvKiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIDkyRCBETVNQICovCgoJYm9vbAkqcGJHZXRWYWx1ZUZyb21PdGhlck1hYzsKCXN0cnVjdCBhZGFwdGVyICoqcEJ1ZGR5QWRhcHRlcjsKCWJvb2wJKnBiTWFzdGVyT2ZETVNQOyAvKiBNQUMwOiBtYXN0ZXIsIE1BQzE6IHNsYXZlICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIFN0YXR1cyAqLwoJYm9vbAkqcGJTY2FuSW5Qcm9jZXNzOwoJYm9vbAkqcGJQb3dlclNhdmluZzsKCS8qICBDQ0EgUGF0aCAyLXBhdGgvcGF0aC1BL3BhdGgtQiA9IDAvMS8yOyB1c2luZyBPRE1fQ0NBX1BBVEhfRS4gKi8KCXU4CSpwT25lUGF0aENDQTsKCS8qIHBNZ250SW5mby0+QW50ZW5uYVRlc3QgKi8KCXU4CSpwQW50ZW5uYVRlc3Q7Cglib29sCSpwYk5ldF9jbG9zZWQ7Ci8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgkvKiAgKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCWJvb2wJYldJRklfRGlyZWN0OwoJYm9vbAliV0lGSV9EaXNwbGF5OwoJYm9vbAliTGlua2VkOwoJdTgJUlNTSV9NaW47Cgl1OAlJbnRlcmZhY2VJbmRleDsgLyogIEFkZCBmb3IgOTJEICBkdWFsIE1BQzogMC0tTWFjMCAxLS1NYWMxICovCglib29sCWJJc01QQ2hpcDsKCWJvb2wJYk9uZUVudHJ5T25seTsKCS8qICBDb21tb24gaW5mbyBmb3IgQlRETSAqLwoJYm9vbAliQnREaXNhYmxlZDsJLyogIEJUIGlzIGRpc2FibGVkICovCglib29sCWJCdEhzT3BlcmF0aW9uOwkvKiAgQlQgSFMgbW9kZSBpcyB1bmRlciBwcm9ncmVzcyAqLwoJdTgJYnRIc0RpZ1ZhbDsJLyogIHVzZSBCVCByc3NpIHRvIGRlY2lkZSB0aGUgRElHIHZhbHVlICovCglib29sCWJCdERpc2FibGVFZGNhVHVyYm87LyogVW5kZXIgc29tZSBjb25kaXRpb24sIGRvbid0IGVuYWJsZSB0aGUKCQkJCSAgICAgKiBFRENBIFR1cmJvCgkJCQkgICAgICovCglib29sCWJCdEJ1c3k7CQkJLyogIEJUIGlzIGJ1c3kuICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCgoJLyogMiBEZWZpbmUgU1RBIGluZm8uICovCgkvKiAgX09ETV9TVEFfSU5GTyAqLwoJLyogIEZvciBNUCwgd2UgbmVlZCB0byByZWR1Y2Ugb25lIGFycmF5IHBvaW50ZXIgZm9yIGRlZmF1bHQgcG9ydC4/PyovCglzdHJ1Y3Qgc3RhX2luZm8gKnBPRE1fU3RhSW5mb1tPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07CgoJdTE2CUN1cnJtaW5ScHRUaW1lOwoJc3RydWN0IG9kbV9yYV9pbmZvIFJBSW5mb1tPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07IC8qIFVzZSBNYWNJRCBhcwoJCQkJCQkJICAgICAqIGFycmF5IGluZGV4LiBTVEEgTWFjSUQ9MCwKCQkJCQkJCSAgICAgKiBWV2lGaSBDbGllbnQgTWFjSUQ9ezEsIE9ETV9BU1NPQ0lBVEVfRU5UUllfTlVNLTF9CgkJCQkJCQkgICAgICovCgkvKiAgKi8KCS8qICAyMDEyLzAyLzE0IE1IIEFkZCB0byBzaGFyZSA4OEUgcmEgd2l0aCBvdGhlciBTVyB0ZWFtLiAqLwoJLyogIFdlIG5lZWQgdG8gY29sZWxjdCBhbGwgc3VwcG9ydCBhYmlsaXQgdG8gYSBwcm9wZXIgYXJlYS4gKi8KCS8qICAqLwoJYm9vbAlSYVN1cHBvcnQ4OEU7CgoJLyogIERlZmluZSAuLi4uLi4uLi4uLiAqLwoKCS8qICBMYXRlc3QgcGFja2V0IHBoeSBpbmZvIChPRE0gd3JpdGUpICovCglzdHJ1Y3Qgb2RtX3BoeV9kYmdfaW5mbyBQaHlEYmdJbmZvOwoKCS8qICBMYXRlc3QgcGFja2V0IHBoeSBpbmZvIChPRE0gd3JpdGUpICovCglzdHJ1Y3Qgb2RtX21hY19zdGF0dXNfaW5mbyAqcE1hY0luZm87CgoJLyogIERpZmZlcmVudCBUZWFtIGluZGVwZW5kdCBzdHJ1Y3R1cmU/PyAqLwoKCS8qIE9ETSBTdHJ1Y3R1cmUgKi8KCXN0cnVjdCBmYXN0X2FudF90cmFpbiBETV9GYXRUYWJsZTsKCXN0cnVjdCBydHdfZGlnCURNX0RpZ1RhYmxlOwoJc3RydWN0IHJ0bF9wcwlETV9QU1RhYmxlOwoJc3RydWN0IHJ4X2hwYwlETV9SWEhQX1RhYmxlOwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIEZhbHNlQWxtQ250OwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIEZsYXNlQWxtQ250QnVkZHlBZGFwdGVyOwoJc3RydWN0IHN3X2FudF9zd2l0Y2ggRE1fU1dBVF9UYWJsZTsKCWJvb2wJCVJTU0lfdGVzdDsKCglzdHJ1Y3QgZWRjYV90dXJibyBETV9FRENBX1RhYmxlOwoJdTMyCQlXTU1FRENBX0JFOwoJLyogIENvcHkgZnJvbSBTRDQgc3RydWN0dXJlICovCgkvKiAgKi8KCS8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoJLyogICovCgoJYm9vbAkqcGJEcml2ZXJTdG9wcGVkOwoJYm9vbAkqcGJEcml2ZXJJc0dvaW5nVG9QbnBTZXRQb3dlclNsZWVwOwoJYm9vbAkqcGluaXRfYWRwdF9pbl9wcm9ncmVzczsKCgkvKiBQU0QgKi8KCWJvb2wJYlVzZXJBc3NpZ25MZXZlbDsKCXN0cnVjdCB0aW1lcl9saXN0IFBTRFRpbWVyOwoJdTgJUlNTSV9CVDsJCQkvKiBjb21lIGZyb20gQlQgKi8KCWJvb2wJYlBTRGluUHJvY2VzczsKCWJvb2wJYkRNSW5pdGlhbEdhaW5FbmFibGU7CgoJLyogZm9yIHJhdGUgYWRhcHRpdmUsIGluIGZhY3QsICA4OGMvOTJjIGZ3IHdpbGwgaGFuZGxlIHRoaXMgKi8KCXU4CWJVc2VSQU1hc2s7CgoJc3RydWN0IG9kbV9yYXRlX2FkYXB0IFJhdGVBZGFwdGl2ZTsKCglzdHJ1Y3Qgb2RtX3JmX2NhbCBSRkNhbGlicmF0ZUluZm87CgoJLyogIFRYIHBvd2VyIHRyYWNraW5nICovCgl1OAlCYlN3aW5nSWR4T2ZkbTsKCXU4CUJiU3dpbmdJZHhPZmRtQ3VycmVudDsKCXU4CUJiU3dpbmdJZHhPZmRtQmFzZTsKCWJvb2wJQmJTd2luZ0ZsYWdPZmRtOwoJdTgJQmJTd2luZ0lkeENjazsKCXU4CUJiU3dpbmdJZHhDY2tDdXJyZW50OwoJdTgJQmJTd2luZ0lkeENja0Jhc2U7Cglib29sCUJiU3dpbmdGbGFnQ2NrOwoJdTgJKm1wX21vZGU7CgkvKiAgT0RNIHN5c3RlbSByZXNvdXJjZS4gKi8KCgkvKiAgT0RNIHJlbGF0aXZlIHRpbWUuICovCglzdHJ1Y3QgdGltZXJfbGlzdCBQYXRoRGl2U3dpdGNoVGltZXI7CgkvKiAyMDExLjA5LjI3IGFkZCBmb3IgUGF0aCBEaXZlcnNpdHkgKi8KCXN0cnVjdCB0aW1lcl9saXN0IENDS1BhdGhEaXZlcnNpdHlUaW1lcjsKCXN0cnVjdCB0aW1lcl9saXN0IEZhc3RBbnRUcmFpbmluZ1RpbWVyOwp9OwkJLyogIERNX0R5bmFtaWNfTWVjaGFuaXNtX1N0cnVjdHVyZSAqLwoKI2RlZmluZSBPRE1fUkZfUEFUSF9NQVggMwoKZW51bSBPRE1fUkZfQ09OVEVOVCB7CglvZG1fcmFkaW9hX3R4dCA9IDB4MTAwMCwKCW9kbV9yYWRpb2JfdHh0ID0gMHgxMDAxLAoJb2RtX3JhZGlvY190eHQgPSAweDEwMDIsCglvZG1fcmFkaW9kX3R4dCA9IDB4MTAwMwp9OwoKLyogIFN0YXR1cyBjb2RlICovCmVudW0gcnRfc3RhdHVzIHsKCVJUX1NUQVRVU19TVUNDRVNTLAoJUlRfU1RBVFVTX0ZBSUxVUkUsCglSVF9TVEFUVVNfUEVORElORywKCVJUX1NUQVRVU19SRVNPVVJDRSwKCVJUX1NUQVRVU19JTlZBTElEX0NPTlRFWFQsCglSVF9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIsCglSVF9TVEFUVVNfTk9UX1NVUFBPUlQsCglSVF9TVEFUVVNfT1NfQVBJX0ZBSUxFRCwKfTsKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIERJRyAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCmVudW0gZG1fZGlnX29wIHsKCVJUX1RZUEVfVEhSRVNIX0hJR0gJPSAwLAoJUlRfVFlQRV9USFJFU0hfTE9XCT0gMSwKCVJUX1RZUEVfQkFDS09GRgkJPSAyLAoJUlRfVFlQRV9SWF9HQUlOX01JTgk9IDMsCglSVF9UWVBFX1JYX0dBSU5fTUFYCT0gNCwKCVJUX1RZUEVfRU5BQkxFCQk9IDUsCglSVF9UWVBFX0RJU0FCTEUJCT0gNiwKCURJR19PUF9UWVBFX01BWAp9OwoKI2RlZmluZQkJRE1fRElHX1RIUkVTSF9ISUdICTQwCiNkZWZpbmUJCURNX0RJR19USFJFU0hfTE9XCTM1CgojZGVmaW5lCQlETV9TQ0FOX1JTU0lfVEgJCTB4MTQgLyogc2NhbiByZXR1cm4gaXNzdWUgZm9yIExDICovCgoKI2RlZmluZQkJRE1fZmFsc2VfQUxBUk1fVEhSRVNIX0xPVwk0MDAKI2RlZmluZQkJRE1fZmFsc2VfQUxBUk1fVEhSRVNIX0hJR0gJMTAwMAoKI2RlZmluZQkJRE1fRElHX01BWF9OSUMJCQkweDRlCiNkZWZpbmUJCURNX0RJR19NSU5fTklDCQkJMHgxZSAvKiAweDIyLzB4MWMgKi8KCiNkZWZpbmUJCURNX0RJR19NQVhfQVAJCQkweDMyCiNkZWZpbmUJCURNX0RJR19NSU5fQVAJCQkweDIwCgojZGVmaW5lCQlETV9ESUdfTUFYX05JQ19IUAkJMHg0NgojZGVmaW5lCQlETV9ESUdfTUlOX05JQ19IUAkJMHgyZQoKI2RlZmluZQkJRE1fRElHX01BWF9BUF9IUAkJMHg0MgojZGVmaW5lCQlETV9ESUdfTUlOX0FQX0hQCQkweDMwCgovKiB2aXZpIDkyYyY5MmQgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9uLCAyMDExMDUwNCAqLwovKiB0aGlzIGlzIGZvciA5MmMgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMAkJCTB4MjAwLyogMHgyMCAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgxCQkJMHgzMDAvKiAweDEwMCAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgyCQkJMHg0MDAvKiAweDIwMCAqLwovKiB0aGlzIGlzIGZvciA5MmQgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMF85MkQJCTB4MTAwCiNkZWZpbmUJCURNX0RJR19GQV9USDFfOTJECQkweDQwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgyXzkyRAkJMHg2MDAKCiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX01BWAkJMTIKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfTUlOCQktNAojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9ERUZBVUxUCQkxMAoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQUdDIFJYIEhpZ2ggUG93ZXIgTW9kZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkgIExOQV9Mb3dfR2Fpbl8xCQkweDY0CiNkZWZpbmUJICBMTkFfTG93X0dhaW5fMgkJMHg1QQojZGVmaW5lCSAgTE5BX0xvd19HYWluXzMJCTB4NTgKCiNkZWZpbmUJICBGQV9SWEhQX1RIMQkJCTUwMDAKI2RlZmluZQkgIEZBX1JYSFBfVEgyCQkJMTUwMAojZGVmaW5lCSAgRkFfUlhIUF9USDMJCQk4MDAKI2RlZmluZQkgIEZBX1JYSFBfVEg0CQkJNjAwCiNkZWZpbmUJICBGQV9SWEhQX1RINQkJCTUwMAoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRURDQSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIER5bmFtaWMgVHggUG93ZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIER5bmFtaWMgVHggUG93ZXIgQ29udHJvbCBUaHJlc2hvbGQgKi8KI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMgk3NAojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwxCTY3CiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0FQCQkweDNGCgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9Ob3JtYWwJCTAKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTGV2ZWwxCQkxCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0xldmVsMgkJMgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9CVDEJCTMKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfQlQyCQk0CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzE1CQk1CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzM1CQk2CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzUwCQk3CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzcwCQk4CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzEwMAkJOQoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgUmF0ZSBBZGFwdGl2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRE1fUkFUUl9TVEFfSU5JVAkJMAojZGVmaW5lCQlETV9SQVRSX1NUQV9ISUdICQkxCiNkZWZpbmUJCURNX1JBVFJfU1RBX01JRERMRQkJMgojZGVmaW5lCQlETV9SQVRSX1NUQV9MT1cJCQkzCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBCQiBQb3dlciBTYXZlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKCmVudW0gZG1fMXJfY2NhIHsKCUNDQV8xUiA9IDAsCglDQ0FfMlIgPSAxLAoJQ0NBX01BWCA9IDIsCn07CgplbnVtIGRtX3JmIHsKCVJGX1NhdmUgPSAwLAoJUkZfTm9ybWFsID0gMSwKCVJGX01BWCA9IDIsCn07CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBBbnRlbm5hIERpdmVyc2l0eSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZW51bSBkbV9zd2FzIHsKCUFudGVubmFfQSA9IDEsCglBbnRlbm5hX0IgPSAyLAoJQW50ZW5uYV9NQVggPSAzLAp9OwoKLyogIE1heGltYWwgbnVtYmVyIG9mIGFudGVubmEgZGV0ZWN0aW9uIG1lY2hhbmlzbSBuZWVkcyB0byBwZXJmb3JtLiAqLwojZGVmaW5lCU1BWF9BTlRFTk5BX0RFVEVDVElPTl9DTlQJMTAKCi8qICBFeHRlcm4gR2xvYmFsIFZhcmlhYmxlcy4gKi8KI2RlZmluZQlPRkRNX1RBQkxFX1NJWkVfOTJDCTM3CiNkZWZpbmUJT0ZETV9UQUJMRV9TSVpFXzkyRAk0MwojZGVmaW5lCUNDS19UQUJMRV9TSVpFCQkzMwoKZXh0ZXJuCXUzMiBPRkRNU3dpbmdUYWJsZVtPRkRNX1RBQkxFX1NJWkVfOTJEXTsKZXh0ZXJuCXU4IENDS1N3aW5nVGFibGVfQ2gxX0NoMTNbQ0NLX1RBQkxFX1NJWkVdWzhdOwpleHRlcm4JdTggQ0NLU3dpbmdUYWJsZV9DaDE0W0NDS19UQUJMRV9TSVpFXVs4XTsKCi8qICBjaGVjayBTdGEgcG9pbnRlciB2YWxpZCBvciBub3QgKi8KI2RlZmluZSBJU19TVEFfVkFMSUQocFN0YSkJCShwU3RhKQovKiAgMjAxMDA1MTQgSm9zZXBoOiBBZGQgZGVmaW5pdGlvbiBmb3IgYW50ZW5uYSBzd2l0Y2hpbmcgdGVzdCBhZnRlciBsaW5rLiAqLwovKiAgVGhpcyBpbmRpY2F0ZXMgdHdvIGRpZmZlcmVudCB0aGUgc3RlcHMuICovCi8qICBJbiBTV0FXX1NURVBfUEVBSywgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBhbnRlbm5hIGFuZCBsaXN0ZW4gdG8gdGhlCiAqICBzaWduYWwgb24gdGhlIGFpci4KICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluCiAqICBTV0FXX1NURVBfUEVBSwogKi8KLyogIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBhbnRlbm5hLiAqLwojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lIGRtX0NoZWNrVFhQb3dlclRyYWNraW5nIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjawojZGVmaW5lIGRtX1JGX1NhdmluZwlPRE1fUkZfU2F2aW5nCgp2b2lkIE9ETV9SRl9TYXZpbmcoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHU4IGJGb3JjZUluTm9ybWFsKTsKdm9pZCBPRE1fVFhQb3dlclRyYWNraW5nQ2hlY2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIG9kbV9ESUdieVJTU0lfTFBTKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKdm9pZCBPRE1fV3JpdGVfQ0NLX0NDQV9UaHJlcyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggQ3VyQ0NLX0NDQVRocmVzKTsKYm9vbCBPRE1fUkFTdGF0ZUNoZWNrKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCBzMzIgUlNTSSwKCQkgICAgICBib29sIGJGb3JjZVVwZGF0ZSwgdTggKnBSQVRSU3RhdGUpOwp1MzIgQ29udmVydFRvX2RCKHUzMiBWYWx1ZSk7CnUzMiBPRE1fR2V0X1JhdGVfQml0bWFwKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1MzIgbWFjaWQsCgkJCXUzMiByYV9tYXNrLCB1OCByc3NpX2xldmVsKTsKdm9pZCBPRE1fQ21uSW5mb0luaXQoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywgdTMyIFZhbHVlKTsKdm9pZCBPRE1fQ21uSW5mb1VwZGF0ZShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTMyIENtbkluZm8sIHU2NCBWYWx1ZSk7CnZvaWQgT0RNX0NtbkluZm9Ib29rKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLAoJCSAgICAgZW51bSBvZG1fY29tbW9uX2luZm9fZGVmIENtbkluZm8sIHZvaWQgKnBWYWx1ZSk7CnZvaWQgT0RNX0NtbkluZm9QdHJBcnJheUhvb2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJCSAgICAgZW51bSBvZG1fY29tbW9uX2luZm9fZGVmIENtbkluZm8sCgkJCSAgICAgdTE2IEluZGV4LCB2b2lkICpwVmFsdWUpOwp2b2lkIE9ETV9ETUluaXQoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIE9ETV9ETVdhdGNoZG9nKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKdm9pZCBPRE1fV3JpdGVfRElHKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1OCBDdXJyZW50SUdJKTsKCiNlbmRpZgo=