LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmCV9fSEFMRE1PVVRTUkNfSF9fCiNkZWZpbmUgX19IQUxETU9VVFNSQ19IX18KCi8qICAqLwovKiAgRGVmaW5pdGlvbiAqLwovKiAgKi8KLyogICovCi8qICAyMDExLzA5LzIyIE1IIERlZmluZSBhbGwgdGVhbSBzdXBwcnQgYWJpbGl0eS4gKi8KLyogICovCgovKiAgKi8KLyogIDIwMTEvMDkvMjIgTUggRGVmaW5lIGZvciBhbGwgdGVhbXMuIFBsZWFzZSBEZWZpbmUgdGhlIGNvbnN0YW4gaW4geW91ciBwcmVjb21wIGhlYWRlci4gKi8KLyogICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQVAJCQkwICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQURTTAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9DRQkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9NUAkJCTEgKi8KCiNkZWZpbmUJVFBfTU9ERQkJMAojZGVmaW5lCVJTU0lfTU9ERQkJMQojZGVmaW5lCVRSQUZGSUNfTE9XCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJMQoKCi8qICAqLwovKiAzIFR4IFBvd2VyIFRyYWNraW5nICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRFBLX0RFTFRBX01BUFBJTkdfTlVNCTEzCiNkZWZpbmUJCWluZGV4X21hcHBpbmdfSFBfTlVNCTE1CgoKLyogICovCi8qIDMgUFNEIEhhbmRsZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKI2RlZmluZQlBRkhfUFNECQkxCS8qIDA6bm9ybWFsIFBTRCBzY2FuLCAxOiBvbmx5IGRvIDIwIHB0cyBQU0QgKi8KI2RlZmluZQlNT0RFXzQwTQkJMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITUlOCQkyMCAgIC8qICBNaW5pbXVtIGNoYW5uZWwgbnVtYmVyIGZvciBCVCBBRkggKi8KI2RlZmluZQlTSVJfU1RFUF9TSVpFCTMKI2RlZmluZSAgIFNtb290aF9TaXplXzEJCTUKI2RlZmluZQlTbW9vdGhfVEhfMQkzCiNkZWZpbmUgICBTbW9vdGhfU2l6ZV8yCQkxMAojZGVmaW5lCVNtb290aF9USF8yCTQKI2RlZmluZSAgIFNtb290aF9TaXplXzMJCTIwCiNkZWZpbmUJU21vb3RoX1RIXzMJNAojZGVmaW5lICAgU21vb3RoX1N0ZXBfU2l6ZSA1CiNkZWZpbmUJQWRhcHRpdmVfU0lSCTEKI2RlZmluZQlQU0RfUkVTQ0FOCQk0CiNkZWZpbmUJUFNEX1NDQU5fSU5URVJWQUwJNzAwIC8qIG1zICovCgovKiA4NzIzQSBIaWdoIFBvd2VyIElHSSBTZXR0aW5nICovCiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORAkweDIyCiNkZWZpbmUgRE1fRElHX0dtb2RlX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORCAweDI4CiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX1RIUkVTSE9MRAkweDNhCgovKiAgTFBTIGRlZmluZSAqLwojZGVmaW5lIERNX0RJR19GQV9USDBfTFBTCQkJCTQgLyogIDQgaW4gbHBzICovCiNkZWZpbmUgRE1fRElHX0ZBX1RIMV9MUFMJCQkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkJCTMwIC8qICAzMCBscHMgKi8KI2RlZmluZSBSU1NJX09GRlNFVF9ESUcJCQkJCTB4MDU7CgovKiBBTlQgVGVzdCAqLwojZGVmaW5lCQkJQU5UVEVTVEFMTAkJMHgwMAkJLyogQW50IEEgb3IgQiB3aWxsIGJlIFRlc3RpbmcgKi8KI2RlZmluZQkJQU5UVEVTVEEJCTB4MDEJCS8qIEFudCBBIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lCQlBTlRURVNUQgkJMHgwMgkJLyogQW50IEIgd2lsbCBiZSB0ZXN0aW5nICovCgoKLyogICovCi8qICBzdHJ1Y3R1cmUgYW5kIGRlZmluZSAqLwovKiAgKi8KCi8qICAqLwovKiAgMjAxMS8wOS8yMCBNSCBBZGQgZm9yIEFQL0FEU0xwc2V1ZG8gRE0gc3RydWN0dWVyIHJlcXVpcmVtZW50LiAqLwovKiAgV2UgbmVlZCB0byByZW1vdmUgdG8gb3RoZXIgcG9zaXRpb24/Pz8gKi8KLyogICovCnN0cnVjdCBydGw4NzIzYV9wcml2IHsKCXU4CQl0ZW1wOwp9OwoKCnN0cnVjdCAgZGlnX3QgewoJdTgJCURpZ19FbmFibGVfRmxhZzsKCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CgoJaW50CQlSc3NpTG93VGhyZXNoOwoJaW50CQlSc3NpSGlnaFRocmVzaDsKCgl1MzIJCUZBTG93VGhyZXNoOwoJdTMyCQlGQUhpZ2hUaHJlc2g7CgoJdTgJCUN1clNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlQcmVTVEFDb25uZWN0U3RhdGU7Cgl1OAkJQ3VyTXVsdGlTVEFDb25uZWN0U3RhdGU7CgoJdTgJCVByZUlHVmFsdWU7Cgl1OAkJQ3VySUdWYWx1ZTsKCXU4CQlCYWNrdXBJR1ZhbHVlOwoKCXM4CQlCYWNrb2ZmVmFsOwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWF4OwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWluOwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWF4OwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWluOwoJdTgJCVJzc2lfdmFsX21pbjsKCgl1OAkJUHJlQ0NLX0NDQVRocmVzOwoJdTgJCUN1ckNDS19DQ0FUaHJlczsKCXU4CQlQcmVDQ0tQRFN0YXRlOwoJdTgJCUN1ckNDS1BEU3RhdGU7CgoJdTgJCUxhcmdlRkFIaXQ7Cgl1OAkJRm9yYmlkZGVuSUdJOwoJdTMyCQlSZWNvdmVyX2NudDsKCgl1OAkJRElHX0R5bmFtaWNfTUlOXzA7Cgl1OAkJRElHX0R5bmFtaWNfTUlOXzE7Cglib29sCQliTWVkaWFDb25uZWN0XzA7Cglib29sCQliTWVkaWFDb25uZWN0XzE7CgoJdTMyCQlBbnREaXZfUlNTSV9tYXg7Cgl1MzIJCVJTU0lfbWF4Owp9OwoKc3RydWN0IGR5bmFtaWNfcHdyX3NhdiB7Cgl1OAkJUHJlQ0NBU3RhdGU7Cgl1OAkJQ3VyQ0NBU3RhdGU7CgoJdTgJCVByZVJGU3RhdGU7Cgl1OAkJQ3VyUkZTdGF0ZTsKCglpbnQJCSAgICBSc3NpX3ZhbF9taW47CgoJdTgJCWluaXRpYWxpemU7Cgl1MzIJCVJlZzg3NCxSZWdDNzAsUmVnODVDLFJlZ0E3NDsKfTsKCnN0cnVjdCBmYWxzZV9hbGFybV9zdGF0cyB7Cgl1MzIJQ250X1Bhcml0eV9GYWlsOwoJdTMyCUNudF9SYXRlX0lsbGVnYWw7Cgl1MzIJQ250X0NyYzhfZmFpbDsKCXUzMglDbnRfTWNzX2ZhaWw7Cgl1MzIJQ250X09mZG1fZmFpbDsKCXUzMglDbnRfQ2NrX2ZhaWw7Cgl1MzIJQ250X2FsbDsKCXUzMglDbnRfRmFzdF9Gc3luYzsKCXUzMglDbnRfU0JfU2VhcmNoX2ZhaWw7Cgl1MzIJQ250X09GRE1fQ0NBOwoJdTMyCUNudF9DQ0tfQ0NBOwoJdTMyCUNudF9DQ0FfYWxsOwoJdTMyCUNudF9CV19VU0M7CS8qIEdhcnkgKi8KCXUzMglDbnRfQldfTFNDOwkvKiBHYXJ5ICovCn07CgpzdHJ1Y3QgcHJpX2NjYSB7Cgl1OAkJUHJpQ0NBX2ZsYWc7Cgl1OAkJaW50Zl9mbGFnOwoJdTgJCWludGZfdHlwZTsKCXU4CQlEdXBSVFNfZmxhZzsKCXU4CQlNb25pdG9yX2ZsYWc7Cn07CgpzdHJ1Y3QgcnhfaHAgewoJdTgJCVJYSFBfZmxhZzsKCXU4CQlQU0RfZnVuY190cmlnZ2VyOwoJdTgJCVBTRF9iaXRtYXBfUlhIUFs4MF07Cgl1OAkJUHJlX0lHSTsKCXU4CQlDdXJfSUdJOwoJdTgJCVByZV9wd190aDsKCXU4CQlDdXJfcHdfdGg7Cglib29sCQlGaXJzdF90aW1lX2VudGVyOwoJYm9vbAkJUlhIUF9lbmFibGU7Cgl1OAkJVFBfTW9kZTsKCXN0cnVjdCB0aW1lcl9saXN0IFBTRFRpbWVyOwp9OwoKI2RlZmluZSBBU1NPQ0lBVEVfRU5UUllfTlVNCQkJCQkzMiAvKiAgTWF4IHNpemUgb2YgQXNvY0VudHJ5W10uICovCiNkZWZpbmUJT0RNX0FTU09DSUFURV9FTlRSWV9OVU0JCQkJQVNTT0NJQVRFX0VOVFJZX05VTQoKLyogIFRoaXMgaW5kaWNhdGVzIHR3byBkaWZmZXJlbnQgdGhlIHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvIHRoZSBzaWduYWwgb24gdGhlIGFpci4gKi8KLyogIEluIFNXQVdfU1RFUF9ERVRFUk1JTkUsIGRyaXZlciBqdXN0IGNvbXBhcmVzIHRoZSBzaWduYWwgY2FwdHVyZWQgaW4gU1dBV19TVEVQX1BFQUsgKi8KLyogIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBhbnRlbm5hLiAqLwojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lCVRQX01PREUJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkwCiNkZWZpbmUJVFJBRkZJQ19ISUdICTEKCnN0cnVjdCBzd19hbnRfc3cgewoJdTgJCXRyeV9mbGFnOwoJczMyCQlQcmVSU1NJOwoJdTgJCUN1ckFudGVubmE7Cgl1OAkJUHJlQW50ZW5uYTsKCXU4CQlSU1NJX1RyeWluZzsKCXU4CQlUZXN0TW9kZTsKCXU4CQliVHJpZ2dlckFudGVubmFTd2l0Y2g7Cgl1OAkJU2VsZWN0QW50ZW5uYU1hcDsKCXU4CQlSU1NJX3RhcmdldDsKCgkvKiAgQmVmb3JlIGxpbmsgQW50ZW5uYSBTd2l0Y2ggY2hlY2sgKi8KCXU4CQlTV0FTX05vTGlua19TdGF0ZTsKCXUzMgkJU1dBU19Ob0xpbmtfQktfUmVnODYwOwoJYm9vbAkJQU5UQV9PTjsJLyogVG8gaW5kaWNhdGUgQW50IEEgaXMgb3Igbm90ICovCglib29sCQlBTlRCX09OOwkvKiBUbyBpbmRpY2F0ZSBBbnQgQiBpcyBvbiBvciBub3QgKi8KCglzMzIJCVJTU0lfc3VtX0E7CglzMzIJCVJTU0lfc3VtX0I7CglzMzIJCVJTU0lfY250X0E7CglzMzIJCVJTU0lfY250X0I7CgoJdTY0CQlsYXN0VHhPa0NudDsKCXU2NAkJbGFzdFJ4T2tDbnQ7Cgl1NjQJCVRYQnl0ZUNudF9BOwoJdTY0CQlUWEJ5dGVDbnRfQjsKCXU2NAkJUlhCeXRlQ250X0E7Cgl1NjQJCVJYQnl0ZUNudF9COwoJdTgJCVRyYWZmaWNMb2FkOwoJc3RydWN0IHRpbWVyX2xpc3QgU3dBbnRlbm5hU3dpdGNoVGltZXI7Cn07CgpzdHJ1Y3QgZWRjYV90dXJibyB7Cglib29sIGJDdXJyZW50VHVyYm9FRENBOwoJYm9vbCBiSXNDdXJSRExTdGF0ZTsKCXUzMglwcnZfdHJhZmZpY19pZHg7IC8qICBlZGNhIHR1cmJvICovCgp9OwoKc3RydWN0IG9kbV9yYXRlX2FkYXB0IHsKCXU4CVR5cGU7CQkvKiAgRE1fVHlwZV9CeUZXL0RNX1R5cGVfQnlEcml2ZXIgKi8KCXU4CUhpZ2hSU1NJVGhyZXNoOwkvKiAgaWYgUlNTSSA+IEhpZ2hSU1NJVGhyZXNoCT0+IFJBVFJTdGF0ZSBpcyBETV9SQVRSX1NUQV9ISUdIICovCgl1OAlMb3dSU1NJVGhyZXNoOwkvKiAgaWYgUlNTSSA8PSBMb3dSU1NJVGhyZXNoCT0+IFJBVFJTdGF0ZSBpcyBETV9SQVRSX1NUQV9MT1cgKi8KCXU4CVJBVFJTdGF0ZTsJLyogIEN1cnJlbnQgUlNTSSBsZXZlbCwgRE1fUkFUUl9TVEFfSElHSC9ETV9SQVRSX1NUQV9NSURETEUvRE1fUkFUUl9TVEFfTE9XICovCgl1MzIJTGFzdFJBVFI7CS8qICBSQVRSIFJlZ2lzdGVyIENvbnRlbnQgKi8KfTsKCiNkZWZpbmUgSVFLX01BQ19SRUdfTlVNCQk0CiNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkJMTYKI2RlZmluZSBJUUtfQkJfUkVHX05VTV9NQVgJMTAKI2RlZmluZSBJUUtfQkJfUkVHX05VTQkJOQojZGVmaW5lIEhQX1RIRVJNQUxfTlVNCQk4CgojZGVmaW5lIEFWR19USEVSTUFMX05VTQkJOAojZGVmaW5lIElRS19NYXRyaXhfUkVHX05VTQk4CiNkZWZpbmUgSVFLX01hdHJpeF9TZXR0aW5nc19OVU0JMSsyNCsyMQoKI2RlZmluZQkJRE1fVHlwZV9CeUZXCQkJMAojZGVmaW5lCQlETV9UeXBlX0J5RHJpdmVyCQkxCgovKiAgRGVjbGFyZSBmb3IgY29tbW9uIGluZm8gKi8KCnN0cnVjdCBvZG1fcGh5X2luZm8gewoJdTgJCVJ4UFdEQkFsbDsKCXU4CQlTaWduYWxRdWFsaXR5OwkgLyogIGluIDAtMTAwIGluZGV4LiAqLwoJdTgJCVJ4TUlNT1NpZ25hbFF1YWxpdHlbUkZfUEFUSF9NQVhdOyAvKiBFVk0gKi8KCXU4CQlSeE1JTU9TaWduYWxTdHJlbmd0aFtSRl9QQVRIX01BWF07LyogIGluIDB+MTAwIGluZGV4ICovCglzOAkJUnhQb3dlcjsgLyogIGluIGRCbSBUcmFuc2xhdGUgZnJvbSBQV2RCICovCglzOAkJUmVjdlNpZ25hbFBvd2VyOy8qICBSZWFsIHBvd2VyIGluIGRCbSBmb3IgdGhpcyBwYWNrZXQsIG5vIGJlYXV0aWZpY2F0aW9uIGFuZCBhZ2dyZWdhdGlvbi4gS2VlcCB0aGlzIHJhdyBpbmZvIHRvIGJlIHVzZWQgZm9yIHRoZSBvdGhlciBwcm9jZWR1cmVzLiAqLwoJdTgJCUJUUnhSU1NJUGVyY2VudGFnZTsKCXU4CQlTaWduYWxTdHJlbmd0aDsgLyogIGluIDAtMTAwIGluZGV4LiAqLwoJdTgJCVJ4UHdyW1JGX1BBVEhfTUFYXTsvKiBwZXItcGF0aCdzIHB3ZGIgKi8KCXU4CQlSeFNOUltSRl9QQVRIX01BWF07LyogcGVyLXBhdGgncyBTTlIgKi8KfTsKCgpzdHJ1Y3Qgb2RtX3BoeV9kYmdfaW5mbyB7CgkvKiBPRE0gV3JpdGUsZGVidWcgaW5mbyAqLwoJczgJCVJ4U05SZEJbUkZfUEFUSF9NQVhdOwoJdTY0CQlOdW1RcnlQaHlTdGF0dXM7Cgl1NjQJCU51bVFyeVBoeVN0YXR1c0NDSzsKCXU2NAkJTnVtUXJ5UGh5U3RhdHVzT0ZETTsKCS8qIE90aGVycyAqLwoJczMyCQlSeEVWTVtSRl9QQVRIX01BWF07Cgp9OwoKc3RydWN0IG9kbV9wYWNrZXRfaW5mbyB7Cgl1OAkJUmF0ZTsKCXU4CQlTdGF0aW9uSUQ7Cglib29sCQliUGFja2V0TWF0Y2hCU1NJRDsKCWJvb2wJCWJQYWNrZXRUb1NlbGY7Cglib29sCQliUGFja2V0QmVhY29uOwp9OwoKc3RydWN0IG9kbV9tYWNfaW5mbyB7Cgl1OAl0ZXN0OwoKfTsKCgplbnVtIHsKCS8qICBCQiBUZWFtICovCglPRE1fRElHCQkJPSAweDAwMDAwMDAxLAoJT0RNX0hJR0hfUE9XRVIJCT0gMHgwMDAwMDAwMiwKCU9ETV9DQ0tfQ0NBX1RICQk9IDB4MDAwMDAwMDQsCglPRE1fRkFfU1RBVElTVElDUwk9IDB4MDAwMDAwMDgsCglPRE1fUkFNQVNLCQk9IDB4MDAwMDAwMTAsCglPRE1fUlNTSV9NT05JVE9SCT0gMHgwMDAwMDAyMCwKCU9ETV9TV19BTlRESVYJCT0gMHgwMDAwMDA0MCwKCU9ETV9IV19BTlRESVYJCT0gMHgwMDAwMDA4MCwKCU9ETV9CQl9QV1JTVgkJPSAweDAwMDAwMTAwLAoJT0RNXzJUUEFUSERJVgkJPSAweDAwMDAwMjAwLAoJT0RNXzFUUEFUSERJVgkJPSAweDAwMDAwNDAwLAoJT0RNX1BTRDJBRkgJCT0gMHgwMDAwMDgwMAp9OwoKLyogICovCi8qICAyMDExLzIwLzIwIE1IIEZvciBNUCBkcml2ZXIgUlRfV0xBTl9TVEEgPSAgc3RydWN0IHN0YV9pbmZvICovCi8qICBQbGVhc2UgZGVjbGFyZSBiZWxvdyBPRE0gcmVsYXRpdmUgaW5mbyBpbiB5b3VyIFNUQSBpbmZvIHN0cnVjdHVyZS4gKi8KLyogICovCnN0cnVjdCBvZG1fc3RhX2luZm8gewoJLyogIERyaXZlciBXcml0ZSAqLwoJYm9vbAkJYlVzZWQ7CQkJCS8qICByZWNvcmQgdGhlIHN0YSBzdGF0dXMgbGluayBvciBub3Q/ICovCgl1OAkJSU9UUGVlcjsJCQkvKiAgRW51bSB2YWx1ZS4JSFRfSU9UX1BFRVJfRSAqLwoKCS8qICBPRE0gV3JpdGUgKi8KCS8qIDEgUEhZX1NUQVRVU19JTkZPICovCgl1OAkJUlNTSV9QYXRoWzRdOwkJLyogICovCgl1OAkJUlNTSV9BdmU7Cgl1OAkJUlhFVk1bNF07Cgl1OAkJUlhTTlJbNF07CgoJLyogIE9ETSBXcml0ZSAqLwoJLyogMSBUWF9JTkZPIChtYXkgY2hhbmdlZCBieSBJQykgKi8KCgkvKiAgKi8KCS8qCVBsZWFzZSB1c2UgY29tcGlsZSBmbGFnIHRvIGRpc2FibGUgdGhlIHN0cnVjdHVyZSBmb3Igb3RoZXIgSUMgZXhjZXB0IDg4RS4gKi8KCS8qCU1vdmUgVG8gbG93ZXIgbGF5ZXIuICovCgkvKiAgKi8KCS8qICBPRE0gV3JpdGUgV2lsc29uIHdpbGwgaGFuZGxlIHRoaXMgcGFydChzYWlkIGJ5IEx1a2UuTGVlKSAqLwp9OwoKLyogICovCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBDb21tb24gaW5mbyBlbnVtIGZvciBhbGwgdGVhbS4gKi8KLyogICovCgplbnVtIG9kbV9jbW5pbmZvIHsKCS8qICBGaXhlZCB2YWx1ZTogKi8KCS8qICAqLwoKCU9ETV9DTU5JTkZPX1BMQVRGT1JNID0gMCwKCU9ETV9DTU5JTkZPX0FCSUxJVFksCQkJCQkvKiAgZW51bSBvZG1fYWJpbGl0eSAqLwoJT0RNX0NNTklORk9fSU5URVJGQUNFLAkJCQkvKiAgZW51bSBvZG1faW50ZXJmYWNlX2RlZiAqLwoJT0RNX0NNTklORk9fTVBfVEVTVF9DSElQLAoJT0RNX0NNTklORk9fSUNfVFlQRSwJCQkJCS8qICBlbnVtIG9kbV9pY190eXBlX2RlZiAqLwoJT0RNX0NNTklORk9fQ1VUX1ZFUiwJCQkJCS8qICBlbnVtIG9kbV9jdXRfdmVyc2lvbiAqLwoJT0RNX0NNTklORk9fRkFCX1ZFUiwJCQkJCS8qICBlbnVtIG9kbV9mYWJfdmVyc2lvbiAqLwoJT0RNX0NNTklORk9fUkZfVFlQRSwJCQkJCS8qICBlbnVtIHJmX3BhdGhfZGVmIG9yIGVudW0gb2RtX3JmX3R5cGU/ICovCglPRE1fQ01OSU5GT19CT0FSRF9UWVBFLAkJCQkvKiAgZW51bSBvZG1fYm9hcmRfdHlwZSAqLwoJT0RNX0NNTklORk9fRVhUX0xOQSwJCQkJCS8qICB0cnVlICovCglPRE1fQ01OSU5GT19FWFRfUEEsCglPRE1fQ01OSU5GT19FWFRfVFJTVywKCU9ETV9DTU5JTkZPX1BBVENIX0lELAkJCQkvKiBDVVNUT01FUiBJRCAqLwoJT0RNX0NNTklORk9fQklOSENUX1RFU1QsCglPRE1fQ01OSU5GT19CV0lGSV9URVNULAoJT0RNX0NNTklORk9fU01BUlRfQ09OQ1VSUkVOVCwKCgoJLyogICovCgkvKiAgRHluYW1pYyB2YWx1ZTogKi8KCS8qICAqLwoJT0RNX0NNTklORk9fTUFDX1BIWV9NT0RFLAkJCS8qICBlbnVtIG9kbV9tYWNfcGh5X21vZGUgKi8KCU9ETV9DTU5JTkZPX1RYX1VOSSwKCU9ETV9DTU5JTkZPX1JYX1VOSSwKCU9ETV9DTU5JTkZPX1dNX01PREUsCQkJCS8qICBlbnVtIG9kbV93aXJlbGVzc19tb2RlICovCglPRE1fQ01OSU5GT19CQU5ELAkJCQkJLyogIGVudW0gb2RtX2JhbmRfdHlwZSAqLwoJT0RNX0NNTklORk9fU0VDX0NITkxfT0ZGU0VULAkJLyogIGVudW0gb2RtX3NlY19jaG5sX29mZnNldCAqLwoJT0RNX0NNTklORk9fU0VDX01PREUsCQkJCS8qICBlbnVtIG9kbV9zZWN1cml0eSAqLwoJT0RNX0NNTklORk9fQlcsCQkJCQkJLyogIGVudW0gb2RtX2JhbmRfd2lkdGggKi8KCU9ETV9DTU5JTkZPX0NITkwsCgoJT0RNX0NNTklORk9fRE1TUF9HRVRfVkFMVUUsCglPRE1fQ01OSU5GT19CVUREWV9BREFQVE9SLAoJT0RNX0NNTklORk9fRE1TUF9JU19NQVNURVIsCglPRE1fQ01OSU5GT19TQ0FOLAoJT0RNX0NNTklORk9fUE9XRVJfU0FWSU5HLAoJT0RNX0NNTklORk9fT05FX1BBVEhfQ0NBLAkJCS8qICBlbnVtIG9kbV9jY2FfcGF0aCAqLwoJT0RNX0NNTklORk9fRFJWX1NUT1AsCglPRE1fQ01OSU5GT19QTlBfSU4sCglPRE1fQ01OSU5GT19JTklUX09OLAoJT0RNX0NNTklORk9fQU5UX1RFU1QsCglPRE1fQ01OSU5GT19ORVRfQ0xPU0VELAoJT0RNX0NNTklORk9fTVBfTU9ERSwKCglPRE1fQ01OSU5GT19XSUZJX0RJUkVDVCwKCU9ETV9DTU5JTkZPX1dJRklfRElTUExBWSwKCU9ETV9DTU5JTkZPX0xJTkssCglPRE1fQ01OSU5GT19SU1NJX01JTiwKCU9ETV9DTU5JTkZPX0RCR19DT01QLAkJCQkvKiAgdTY0ICovCglPRE1fQ01OSU5GT19EQkdfTEVWRUwsCQkJCS8qICB1MzIgKi8KCU9ETV9DTU5JTkZPX1JBX1RIUkVTSE9MRF9ISUdILAkJLyogIHU4ICovCglPRE1fQ01OSU5GT19SQV9USFJFU0hPTERfTE9XLAkJLyogIHU4ICovCglPRE1fQ01OSU5GT19SRl9BTlRFTk5BX1RZUEUsCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX0JUX0RJU0FCTEVELAoJT0RNX0NNTklORk9fQlRfT1BFUkFUSU9OLAoJT0RNX0NNTklORk9fQlRfRElHLAoJT0RNX0NNTklORk9fQlRfQlVTWSwJCQkJCS8qIENoZWNrIEJ0IGlzIHVzaW5nIG9yIG5vdCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRV9FRENBLAoKCS8qICAqLwoJLyogIER5bmFtaWMgcHRyIGFycmF5IGhvb2sgaXRtcy4gKi8KCS8qICAqLwoJT0RNX0NNTklORk9fU1RBX1NUQVRVUywKCU9ETV9DTU5JTkZPX1BIWV9TVEFUVVMsCglPRE1fQ01OSU5GT19NQUNfU1RBVFVTLAoKCU9ETV9DTU5JTkZPX01BWCwKfTsKCi8qICBEZWZpbmUgT0RNIHN1cHBvcnQgYWJpbGl0eS4gIE9ETV9DTU5JTkZPX0FCSUxJVFkgKi8KZW51bSB7CgkvKiAgQkIgT0RNIHNlY3Rpb24gQklUIDAtMTUgKi8KCU9ETV9CQl9ESUcJCQkJPSBCSVQwLAoJT0RNX0JCX1JBX01BU0sJCQkJPSBCSVQxLAoJT0RNX0JCX0RZTkFNSUNfVFhQV1IJCQk9IEJJVDIsCglPRE1fQkJfRkFfQ05UCQkJCT0gQklUMywKCU9ETV9CQl9SU1NJX01PTklUT1IJCQk9IEJJVDQsCglPRE1fQkJfQ0NLX1BECQkJCT0gQklUNSwKCU9ETV9CQl9BTlRfRElWCQkJCT0gQklUNiwKCU9ETV9CQl9QV1JfU0FWRQkJCQk9IEJJVDcsCglPRE1fQkJfUFdSX1RSQUlOCQkJPSBCSVQ4LAoJT0RNX0JCX1JBVEVfQURBUFRJVkUJCQk9IEJJVDksCglPRE1fQkJfUEFUSF9ESVYJCQkJPSBCSVQxMCwKCU9ETV9CQl9QU0QJCQkJPSBCSVQxMSwKCU9ETV9CQl9SWEhQCQkJCT0gQklUMTIsCgoJLyogIE1BQyBETSBzZWN0aW9uIEJJVCAxNi0yMyAqLwoJT0RNX01BQ19FRENBX1RVUkJPCQkJPSBCSVQxNiwKCU9ETV9NQUNfRUFSTFlfTU9ERQkJCT0gQklUMTcsCgoJLyogIFJGIE9ETSBzZWN0aW9uIEJJVCAyNC0zMSAqLwoJT0RNX1JGX1RYX1BXUl9UUkFDSwkJCT0gQklUMjQsCglPRE1fUkZfUlhfR0FJTl9UUkFDSwkJCT0gQklUMjUsCglPRE1fUkZfQ0FMSUJSQVRJT04JCQk9IEJJVDI2LAoKfTsKCi8qCU9ETV9DTU5JTkZPX0lOVEVSRkFDRSAqLwplbnVtIG9kbV9pbnRlcmZhY2VfZGVmIHsKCU9ETV9JVFJGX1BDSUUJPQkweDEsCglPRE1fSVRSRl9VU0IJPQkweDIsCglPRE1fSVRSRl9TRElPCT0JMHg0LAoJT0RNX0lUUkZfQUxMCT0JMHg3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0lDX1RZUEUgKi8KZW51bSBvZG1faWNfdHlwZV9kZWYgewoJT0RNX1JUTDgxOTJTCT0JQklUMCwKCU9ETV9SVEw4MTkyQwk9CUJJVDEsCglPRE1fUlRMODE5MkQJPQlCSVQyLAoJT0RNX1JUTDg3MjNBCT0JQklUMywKCU9ETV9SVEw4MTg4RQk9CUJJVDQsCglPRE1fUlRMODgxMgk9CUJJVDUsCglPRE1fUlRMODgyMQk9CUJJVDYsCn07CgojZGVmaW5lIE9ETV9JQ18xMU5fU0VSSUVTCQkJXAoJKE9ETV9SVEw4MTkyU3xPRE1fUlRMODE5MkN8T0RNX1JUTDgxOTJEfE9ETV9SVEw4NzIzQXxPRE1fUlRMODE4OEUpCiNkZWZpbmUgT0RNX0lDXzExQUNfU0VSSUVTCQkoT0RNX1JUTDg4MTIpCgovKiBPRE1fQ01OSU5GT19DVVRfVkVSICovCmVudW0gb2RtX2N1dF92ZXJzaW9uIHsKCU9ETV9DVVRfQQkJPQkxLAoJT0RNX0NVVF9CCQk9CTIsCglPRE1fQ1VUX0MJCT0JMywKCU9ETV9DVVRfRAkJPQk0LAoJT0RNX0NVVF9FCQk9CTUsCglPRE1fQ1VUX0YJCT0JNiwKCU9ETV9DVVRfVEVTVAkJPQk3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0ZBQl9WRVIgKi8KZW51bSBvZG1fZmFiX3ZlcnNpb24gewoJT0RNX1RTTUMJPQkwLAoJT0RNX1VNQwkJPQkxLAp9OwoKLyogIE9ETV9DTU5JTkZPX1JGX1RZUEUgKi8KLyogIEZvciBleGFtcGxlIDFUMlIgKEErQUIgPSBCSVQwfEJJVDR8QklUNSkgKi8KZW51bSByZl9wYXRoX2RlZiB7CglPRE1fUkZfVFhfQQk9CUJJVDAsCglPRE1fUkZfVFhfQgk9CUJJVDEsCglPRE1fUkZfVFhfQwk9CUJJVDIsCglPRE1fUkZfVFhfRAk9CUJJVDMsCglPRE1fUkZfUlhfQQk9CUJJVDQsCglPRE1fUkZfUlhfQgk9CUJJVDUsCglPRE1fUkZfUlhfQwk9CUJJVDYsCglPRE1fUkZfUlhfRAk9CUJJVDcsCn07CgoKZW51bSBvZG1fcmZfdHlwZSB7CglPRE1fMVQxUgk9CTAsCglPRE1fMVQyUgk9CTEsCglPRE1fMlQyUgk9CTIsCglPRE1fMlQzUgk9CTMsCglPRE1fMlQ0Ugk9CTQsCglPRE1fM1QzUgk9CTUsCglPRE1fM1Q0Ugk9CTYsCglPRE1fNFQ0Ugk9CTcsCn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKZW51bSBvZG1fbWFjX3BoeV9tb2RlIHsKCU9ETV9TTVNQCT0gMCwKCU9ETV9ETVNQCT0gMSwKCU9ETV9ETURQCT0gMiwKfTsKCgplbnVtIG9kbV9idF9jb2V4aXN0IHsKCU9ETV9CVF9CVVNZCQk9IDEsCglPRE1fQlRfT04JCT0gMiwKCU9ETV9CVF9PRkYJCT0gMywKCU9ETV9CVF9OT05FCQk9IDQsCn07CgovKiAgT0RNX0NNTklORk9fT1BfTU9ERSAqLwplbnVtIG9kbV9vcGVyYXRpb25fbW9kZSB7CglPRE1fTk9fTElOSwkJPSBCSVQwLAoJT0RNX0xJTksJCT0gQklUMSwKCU9ETV9TQ0FOCQk9IEJJVDIsCglPRE1fUE9XRVJTQVZFCQk9IEJJVDMsCglPRE1fQVBfTU9ERQkJPSBCSVQ0LAoJT0RNX0NMSUVOVF9NT0RFCQk9IEJJVDUsCglPRE1fQURfSE9DCQk9IEJJVDYsCglPRE1fV0lGSV9ESVJFQ1QJCT0gQklUNywKCU9ETV9XSUZJX0RJU1BMQVkJPSBCSVQ4LAp9OwoKLyogIE9ETV9DTU5JTkZPX1dNX01PREUgKi8KZW51bSBvZG1fd2lyZWxlc3NfbW9kZSB7CglPRE1fV01fVU5LTk9XCQk9IDB4MCwKCU9ETV9XTV9CCQk9IEJJVDAsCglPRE1fV01fRwkJPSBCSVQxLAoJT0RNX1dNX0EJCT0gQklUMiwKCU9ETV9XTV9OMjRHCQk9IEJJVDMsCglPRE1fV01fTjVHCQk9IEJJVDQsCglPRE1fV01fQVVUTwkJPSBCSVQ1LAoJT0RNX1dNX0FDCQk9IEJJVDYsCn07CgovKiAgT0RNX0NNTklORk9fQkFORCAqLwplbnVtIG9kbV9iYW5kX3R5cGUgewoJT0RNX0JBTkRfMl80RwkJPSBCSVQwLAoJT0RNX0JBTkRfNUcJCT0gQklUMSwKCn07CgovKiAgT0RNX0NNTklORk9fU0VDX0NITkxfT0ZGU0VUICovCmVudW0gb2RtX3NlY19jaG5sX29mZnNldCB7CglPRE1fRE9OVF9DQVJFCQk9IDAsCglPRE1fQkVMT1cJCT0gMSwKCU9ETV9BQk9WRQkJPSAyCn07CgovKiAgT0RNX0NNTklORk9fU0VDX01PREUgKi8KZW51bSBvZG1fc2VjdXJpdHkgewoJT0RNX1NFQ19PUEVOCQk9IDAsCglPRE1fU0VDX1dFUDQwCQk9IDEsCglPRE1fU0VDX1RLSVAJCT0gMiwKCU9ETV9TRUNfUkVTRVJWRQkJPSAzLAoJT0RNX1NFQ19BRVNDQ01QCQk9IDQsCglPRE1fU0VDX1dFUDEwNAkJPSA1LAoJT0RNX1dFUF9XUEFfTUlYRUQJPSA2LCAvKiAgV0VQICsgV1BBICovCglPRE1fU0VDX1NNUzQJCT0gNywKfTsKCi8qICBPRE1fQ01OSU5GT19CVyAqLwplbnVtIG9kbV9iYW5kX3dpZHRoIHsKCU9ETV9CVzIwTQkJPSAwLAoJT0RNX0JXNDBNCQk9IDEsCglPRE1fQlc4ME0JCT0gMiwKCU9ETV9CVzE2ME0JCT0gMywKCU9ETV9CVzEwTQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX0NITkwgKi8KCi8qICBPRE1fQ01OSU5GT19CT0FSRF9UWVBFICovCmVudW0gb2RtX2JvYXJkX3R5cGUgewoJT0RNX0JPQVJEX05PUk1BTAk9IDAsCglPRE1fQk9BUkRfSElHSFBXUgk9IDEsCglPRE1fQk9BUkRfTUlOSUNBUkQJPSAyLAoJT0RNX0JPQVJEX1NMSU0JCT0gMywKCU9ETV9CT0FSRF9DT01CTwkJPSA0LAoKfTsKCi8qICBPRE1fQ01OSU5GT19PTkVfUEFUSF9DQ0EgKi8KZW51bSBvZG1fY2NhX3BhdGggewoJT0RNX0NDQV8yUgkJCT0gMCwKCU9ETV9DQ0FfMVJfQQkJCT0gMSwKCU9ETV9DQ0FfMVJfQgkJCT0gMiwKfTsKCnN0cnVjdCBvZG1fcmFfaW5mbyB7Cgl1OCBSYXRlSUQ7Cgl1MzIgUmF0ZU1hc2s7Cgl1MzIgUkFVc2VSYXRlOwoJdTggUmF0ZVNHSTsKCXU4IFJzc2lTdGFSQTsKCXU4IFByZVJzc2lTdGFSQTsKCXU4IFNHSUVuYWJsZTsKCXU4IERlY2lzaW9uUmF0ZTsKCXU4IFByZVJhdGU7Cgl1OCBIaWdoZXN0UmF0ZTsKCXU4IExvd2VzdFJhdGU7Cgl1MzIgTnNjVXA7Cgl1MzIgTnNjRG93bjsKCXUxNiBSVFlbNV07Cgl1MzIgVE9UQUw7Cgl1MTYgRFJPUDsKCXU4IEFjdGl2ZTsKCXUxNiBScHRUaW1lOwoJdTggUkFXYWl0aW5nQ291bnRlcjsKCXU4IFJBUGVuZGluZ0NvdW50ZXI7Cgl1OCBQVEFjdGl2ZTsgIC8qICBvbiBvciBvZmYgKi8KCXU4IFBUVHJ5U3RhdGU7ICAvKiAgMCB0cnlpbmcgc3RhdGUsIDEgZm9yIGRlY2lzaW9uIHN0YXRlICovCgl1OCBQVFN0YWdlOyAgLyogIDB+NiAqLwoJdTggUFRTdG9wQ291bnQ7IC8qIFN0b3AgUFQgY291bnRlciAqLwoJdTggUFRQcmVSYXRlOyAgLyogIGlmIHJhdGUgY2hhbmdlIGRvIFBUICovCgl1OCBQVFByZVJzc2k7IC8qICBpZiBSU1NJIGNoYW5nZSA1JSBkbyBQVCAqLwoJdTggUFRNb2RlU1M7ICAvKiAgZGVjaWRlIHdoaXRjaCByYXRlIHNob3VsZCBkbyBQVCAqLwoJdTggUkFzdGFnZTsgIC8qICBTdGFnZVJBLCBkZWNpZGUgaG93IG1hbnkgdGltZXMgUkEgd2lsbCBiZSBkb25lIGJldHdlZW4gUFQgKi8KCXU4IFBUU21vb3RoRmFjdG9yOwp9OwoKc3RydWN0IGlxa19tYXRyaXhfcmVnc19zZXQgewoJYm9vbAliSVFLRG9uZTsKCXMzMglWYWx1ZVsxXVtJUUtfTWF0cml4X1JFR19OVU1dOwp9OwoKc3RydWN0IG9kbV9yZl9jYWxfdCB7CgkvKiBmb3IgdHggcG93ZXIgdHJhY2tpbmcgKi8KCgl1MzIJUmVnQTI0OyAvKiAgZm9yIFRlbXBDQ0sgKi8KCXMzMglSZWdFOTQ7CglzMzIJUmVnRTlDOwoJczMyCVJlZ0VCNDsKCXMzMglSZWdFQkM7CgoJLyogdTggYlRYUG93ZXJUcmFja2luZzsgKi8KCXU4CQlUWFBvd2VyY291bnQ7Cglib29sIGJUWFBvd2VyVHJhY2tpbmdJbml0OwoJYm9vbCBiVFhQb3dlclRyYWNraW5nOwoJdTgJCVR4UG93ZXJUcmFja0NvbnRyb2w7IC8qIGZvciBtcCBtb2RlLCB0dXJuIG9mZiB0eHB3cnRyYWNraW5nIGFzIGRlZmF1bHQgKi8KCXU4CQlUTV9UcmlnZ2VyOwoJdTgJCUludGVybmFsUEE1R1syXTsJLyogcGF0aEEgLyBwYXRoQiAqLwoKCXU4CQlUaGVybWFsTWV0ZXJbMl07ICAgIC8qICBUaGVybWFsTWV0ZXIsIGluZGV4IDAgZm9yIFJGSUMwLCBhbmQgMSBmb3IgUkZJQzEgKi8KCXU4CQlUaGVybWFsVmFsdWU7Cgl1OAkJVGhlcm1hbFZhbHVlX0xDSzsKCXU4CQlUaGVybWFsVmFsdWVfSVFLOwoJdTgJVGhlcm1hbFZhbHVlX0RQSzsKCXU4CVRoZXJtYWxWYWx1ZV9BVkdbQVZHX1RIRVJNQUxfTlVNXTsKCXU4CVRoZXJtYWxWYWx1ZV9BVkdfaW5kZXg7Cgl1OAlUaGVybWFsVmFsdWVfUnhHYWluOwoJdTgJVGhlcm1hbFZhbHVlX0NyeXN0YWw7Cgl1OAlUaGVybWFsVmFsdWVfRFBLc3RvcmU7Cgl1OAlUaGVybWFsVmFsdWVfRFBLdHJhY2s7Cglib29sCVR4UG93ZXJUcmFja2luZ0luUHJvZ3Jlc3M7Cglib29sCWJEUEtlbmFibGU7CgoJYm9vbAliUmVsb2FkdHhwb3dlcmluZGV4OwoJdTgJYlJmUGlFbmFibGU7Cgl1MzIJVFhQb3dlclRyYWNraW5nQ2FsbGJhY2tDbnQ7IC8qIGNvc2EgYWRkIGZvciBkZWJ1ZyAqLwoKCXU4CWJDQ0tpbkNIMTQ7Cgl1OAlDQ0tfaW5kZXg7Cgl1OAlPRkRNX2luZGV4WzJdOwoJYm9vbCBiRG9uZVR4cG93ZXI7CgoJdTgJVGhlcm1hbFZhbHVlX0hQW0hQX1RIRVJNQUxfTlVNXTsKCXU4CVRoZXJtYWxWYWx1ZV9IUF9pbmRleDsKCXN0cnVjdCBpcWtfbWF0cml4X3JlZ3Nfc2V0IElRS01hdHJpeFJlZ1NldHRpbmdbSVFLX01hdHJpeF9TZXR0aW5nc19OVU1dOwoKCXU4CURlbHRhX0lRSzsKCXU4CURlbHRhX0xDSzsKCgkvKiBmb3IgSVFLICovCgl1MzIJUmVnQzA0OwoJdTMyCVJlZzg3NDsKCXUzMglSZWdDMDg7Cgl1MzIJUmVnQjY4OwoJdTMyCVJlZ0I2QzsKCXUzMglSZWc4NzA7Cgl1MzIJUmVnODYwOwoJdTMyCVJlZzg2NDsKCglib29sCWJJUUtJbml0aWFsaXplZDsKCWJvb2wgYkxDS0luUHJvZ3Jlc3M7Cglib29sCWJBbnRlbm5hRGV0ZWN0ZWQ7Cgl1MzIJQUREQV9iYWNrdXBbSVFLX0FEREFfUkVHX05VTV07Cgl1MzIJSVFLX01BQ19iYWNrdXBbSVFLX01BQ19SRUdfTlVNXTsKCXUzMglJUUtfQkJfYmFja3VwX3JlY292ZXJbOV07Cgl1MzIJSVFLX0JCX2JhY2t1cFtJUUtfQkJfUkVHX05VTV07CgoJLyogZm9yIEFQSyAqLwoJdTMyCUFQS291dHB1dFsyXVsyXTsgLyogcGF0aCBBL0I7IG91dHB1dDFfMWEvb3V0cHV0MV8yYSAqLwoJdTgJYkFQS2RvbmU7Cgl1OAliQVBLVGhlcm1hbE1ldGVySWdub3JlOwoJdTgJYkRQZG9uZTsKCXU4CWJEUFBhdGhBT0s7Cgl1OAliRFBQYXRoQk9LOwp9OwoKLyogIE9ETSBEeW5hbWljIGNvbW1vbiBpbmZvIHZhbHVlIGRlZmluaXRpb24gKi8Kc3RydWN0IG9kbV9mYXRfdCB7Cgl1OAlCc3NpZFs2XTsKCXU4CWFudHNlbF9yeF9rZWVwXzA7Cgl1OAlhbnRzZWxfcnhfa2VlcF8xOwoJdTgJYW50c2VsX3J4X2tlZXBfMjsKCXUzMglhbnRTdW1SU1NJWzddOwoJdTMyCWFudFJTU0ljbnRbN107Cgl1MzIJYW50QXZlUlNTSVs3XTsKCXU4CUZBVF9TdGF0ZTsKCXUzMglUcmFpbklkeDsKCXU4CWFudHNlbF9hW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CWFudHNlbF9iW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CWFudHNlbF9jW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglNYWluQW50X1N1bVtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQXV4QW50X1N1bVtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJTWFpbkFudF9DbnRbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCUF1eEFudF9DbnRbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJUnhJZGxlQW50OwoJYm9vbAliQmVjb21lTGlua2VkOwp9OwoKZW51bSBmYXRfc3RhdGUgewoJRkFUX05PUk1BTF9TVEFURQkJPSAwLAoJRkFUX1RSQUlOSU5HX1NUQVRFCQk9IDEsCn07CgplbnVtIGFudF9kaWZfdHlwZSB7CglOT19BTlRESVYJCQk9IDB4RkYsCglDR19UUlhfSFdfQU5URElWCQk9IDB4MDEsCglDR0NTX1JYX0hXX0FOVERJVgkJPSAweDAyLAoJRklYRURfSFdfQU5URElWCQkJPSAweDAzLAoJQ0dfVFJYX1NNQVJUX0FOVERJVgkJPSAweDA0LAoJQ0dDU19SWF9TV19BTlRESVYJCT0gMHgwNSwKfTsKCi8qICAyMDExLzA5LzIyIE1IIENvcHkgZnJvbSBTRDQgZGVmaW5lZCBzdHJ1Y3R1cmUuIFdlIHVzZSB0byBzdXBwb3J0IFBIWSBETSBpbnRlZ3JhdGlvbi4gKi8Kc3RydWN0IGRtX29kbV90IHsKCS8qIHN0cnVjdCB0aW1lcl9saXN0IEZhc3RBbnRUcmFpbmluZ1RpbWVyOyAqLwoJLyogICovCgkvKglBZGQgZm9yIGRpZmZlcmVudCB0ZWFtIHVzZSB0ZW1wb3JhcmlseSAqLwoJLyogICovCglzdHJ1Y3QgcnR3X2FkYXB0ZXIJKkFkYXB0ZXI7CQkvKiAgRm9yIENFL05JQyB0ZWFtICovCglzdHJ1Y3QgcnRsODcyM2FfcHJpdgkqcHJpdjsJCQkvKiAgRm9yIEFQL0FEU0wgdGVhbSAqLwoJLyogIFdIZW4geW91IHVzZSBBZGFwdGVyIG9yIHByaXYgcG9pbnRlciwgeW91IG11c3QgbWFrZSBzdXJlIHRoZSBwb2ludGVyIGlzIHJlYWR5LiAqLwoJYm9vbAkJCW9kbV9yZWFkeTsKCglzdHJ1Y3QgcnRsODcyM2FfcHJpdiBmYWtlX3ByaXY7CgoJdTY0CQkJRGVidWdDb21wb25lbnRzOwoJdTMyCQkJRGVidWdMZXZlbDsKCi8qICBPRE0gSEFORExFLCBEUklWRVIgTkVFRFMgTk9UIFRPIEhPT0stLS0tLS0gKi8KCWJvb2wJCQliQ2NrSGlnaFBvd2VyOwoJdTgJCQlSRlBhdGhSeEVuYWJsZTsJCS8qICBPRE1fQ01OSU5GT19SRlBBVEhfRU5BQkxFICovCgl1OAkJCUNvbnRyb2xDaGFubmVsOwovKiAgT0RNIEhBTkRMRSwgRFJJVkVSIE5FRURTIE5PVCBUTyBIT09LLS0tLS0tICovCgovKiAxICBDT01NT04gSU5GT1JNQVRJT04gKi8KCgkvKiAgSW5pdCBWYWx1ZSAqLwovKiBIT09LIEJFRk9SRSBSRUcgSU5JVC0tLS0tLS0tLS0tICovCgkvKiAgT0RNIFN1cHBvcnQgQWJpbGl0eSBESUcvUkFUUi9UWF9QV1JfVFJBQ0svIKFLoUsgPSAxLzIvMy+hSyAqLwoJdTMyCQkJU3VwcG9ydEFiaWxpdHk7CgkvKiAgT0RNIFBDSUUvVVNCL1NESU8vR1NQSSA9IDAvMS8yLzMgKi8KCXU4CQkJU3VwcG9ydEludGVyZmFjZTsKCS8qICBPRE0gY29tcG9zaXRlIG9yIGluZGVwZW5kZW50LiBCaXQgb3JpZW50ZWQvIDkyQys5MkQrIC4uLi4gb3IgYW55IG90aGVyIHR5cGUgPSAxLzIvMy8uLi4gKi8KCXUzMgkJCVN1cHBvcnRJQ1R5cGU7CgkvKiAgQ3V0IFZlcnNpb24gVGVzdENoaXAvQS1jdXQvQi1jdXQuLi4gPSAwLzEvMi8zLy4uLiAqLwoJdTgJCQlDdXRWZXJzaW9uOwoJLyogIEZhYiBWZXJzaW9uIFRTTUMvVU1DID0gMC8xICovCgl1OAkJCUZhYlZlcnNpb247CgkvKiAgUkYgVHlwZSA0VDRSLzNUM1IvMlQyUi8xVDJSLzFUMVIvLi4uICovCgl1OAkJCVJGVHlwZTsKCS8qICBCb2FyZCBUeXBlIE5vcm1hbC9IaWdoUG93ZXIvTWluaUNhcmQvU0xJTS9Db21iby8uLi4gPSAwLzEvMi8zLzQvLi4uICovCgl1OAkJCUJvYXJkVHlwZTsKCS8qICB3aXRoIGV4dGVybmFsIExOQSAgTk8vWWVzID0gMC8xICovCgl1OAkJCUV4dExOQTsKCS8qICB3aXRoIGV4dGVybmFsIFBBICBOTy9ZZXMgPSAwLzEgKi8KCXU4CQkJRXh0UEE7CgkvKiAgd2l0aCBleHRlcm5hbCBUUlNXICBOTy9ZZXMgPSAwLzEgKi8KCXU4CQkJRXh0VFJTVzsKCXU4CQkJUGF0Y2hJRDsgLyogQ3VzdG9tZXIgSUQgKi8KCWJvb2wJCQliSW5IY3RUZXN0OwoJYm9vbAkJCWJXSUZJVGVzdDsKCglib29sCQkJYkR1YWxNYWNTbWFydENvbmN1cnJlbnQ7Cgl1MzIJCQlCS19TdXBwb3J0QWJpbGl0eTsKCXU4CQkJQW50RGl2VHlwZTsKLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoKCS8qICAqLwoJLyogIER5bmFtaWMgVmFsdWUgKi8KCS8qICAqLwovKiAgUE9JTlRFUiBSRUZFUkVOQ0UtLS0tLS0tLS0tLSAqLwoKCXU4CQkJdThfdGVtcDsKCWJvb2wJCQlib29sX3RlbXA7CglzdHJ1Y3QgcnR3X2FkYXB0ZXIJKlBBREFQVEVSX3RlbXA7CgoJLyogIE1BQyBQSFkgTW9kZSBTTVNQL0RNU1AvRE1EUCA9IDAvMS8yICovCgl1OAkJCSpwTWFjUGh5TW9kZTsKCS8qIFRYIFVuaWNhc3QgYnl0ZSBjb3VudCAqLwoJdTY0CQkJKnBOdW1UeEJ5dGVzVW5pY2FzdDsKCS8qIFJYIFVuaWNhc3QgYnl0ZSBjb3VudCAqLwoJdTY0CQkJKnBOdW1SeEJ5dGVzVW5pY2FzdDsKCS8qICBXaXJlbGVzcyBtb2RlIEIvRy9BL04gPSBCSVQwL0JJVDEvQklUMi9CSVQzICovCgl1OAkJCSpwV2lyZWxlc3NNb2RlOyAvKiBlbnVtIG9kbV93aXJlbGVzc19tb2RlICovCgkvKiAgRnJlcXVlbmNlIGJhbmQgMi40Ry81RyA9IDAvMSAqLwoJdTgJCQkqcEJhbmRUeXBlOwoJLyogIFNlY29uZGFyeSBjaGFubmVsIG9mZnNldCBkb24ndF9jYXJlL2JlbG93L2Fib3ZlID0gMC8xLzIgKi8KCXU4CQkJKnBTZWNDaE9mZnNldDsKCS8qICBTZWN1cml0eSBtb2RlIE9wZW4vV0VQL0FFUy9US0lQID0gMC8xLzIvMyAqLwoJdTgJCQkqcFNlY3VyaXR5OwoJLyogIEJXIGluZm8gMjBNLzQwTS84ME0gPSAwLzEvMiAqLwoJdTgJCQkqcEJhbmRXaWR0aDsKCS8qICBDZW50cmFsIGNoYW5uZWwgbG9jYXRpb24gQ2gxL0NoMi8uLi4uICovCgl1OAkJCSpwQ2hhbm5lbDsJLyogY2VudHJhbCBjaGFubmVsIG51bWJlciAqLwoJLyogIENvbW1vbiBpbmZvIGZvciA5MkQgRE1TUCAqLwoKCWJvb2wJCQkqcGJHZXRWYWx1ZUZyb21PdGhlck1hYzsKCXN0cnVjdCBydHdfYWRhcHRlcgkqKnBCdWRkeUFkYXB0ZXI7Cglib29sCQkJKnBiTWFzdGVyT2ZETVNQOyAvKiBNQUMwOiBtYXN0ZXIsIE1BQzE6IHNsYXZlICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIFN0YXR1cyAqLwoJYm9vbAkJCSpwYlNjYW5JblByb2Nlc3M7Cglib29sCQkJKnBiUG93ZXJTYXZpbmc7CgkvKiAgQ0NBIFBhdGggMi1wYXRoL3BhdGgtQS9wYXRoLUIgPSAwLzEvMjsgdXNpbmcgZW51bSBvZG1fY2NhX3BhdGguICovCgl1OAkJCSpwT25lUGF0aENDQTsKCS8qIHBNZ250SW5mby0+QW50ZW5uYVRlc3QgKi8KCXU4CQkJKnBBbnRlbm5hVGVzdDsKCWJvb2wJCQkqcGJOZXRfY2xvc2VkOwovKiAgUE9JTlRFUiBSRUZFUkVOQ0UtLS0tLS0tLS0tLSAqLwoJLyogICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCglib29sCQkJYldJRklfRGlyZWN0OwoJYm9vbAkJCWJXSUZJX0Rpc3BsYXk7Cglib29sCQkJYkxpbmtlZDsKCXU4CQkJUlNTSV9NaW47Cgl1OAkJCUludGVyZmFjZUluZGV4OyAvKiAgQWRkIGZvciA5MkQgIGR1YWwgTUFDOiAwLS1NYWMwIDEtLU1hYzEgKi8KCWJvb2wJCWJJc01QQ2hpcDsKCWJvb2wJCQliT25lRW50cnlPbmx5OwoJLyogIENvbW1vbiBpbmZvIGZvciBCVERNICovCglib29sCQkJYkJ0RGlzYWJsZWQ7CQkJLyogIEJUIGlzIGRpc2FibGVkICovCglib29sCQkJYkJ0SHNPcGVyYXRpb247CQkvKiAgQlQgSFMgbW9kZSBpcyB1bmRlciBwcm9ncmVzcyAqLwoJdTgJCQlidEhzRGlnVmFsOwkJCS8qICB1c2UgQlQgcnNzaSB0byBkZWNpZGUgdGhlIERJRyB2YWx1ZSAqLwoJYm9vbAkJCWJCdERpc2FibGVFZGNhVHVyYm87CS8qICBVbmRlciBzb21lIGNvbmRpdGlvbiwgZG9uJ3QgZW5hYmxlIHRoZSBFRENBIFR1cmJvICovCglib29sCQkJYkJ0QnVzeTsJCQkvKiAgQlQgaXMgYnVzeS4gKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCgkvKiAyIERlZmluZSBTVEEgaW5mby4gKi8KCS8qICBfT0RNX1NUQV9JTkZPICovCgkvKiAgMjAxMi8wMS8xMiBNSCBGb3IgTVAsIHdlIG5lZWQgdG8gcmVkdWNlIG9uZSBhcnJheSBwb2ludGVyIGZvciBkZWZhdWx0IHBvcnQuPz8gKi8KCXN0cnVjdCBzdGFfaW5mbyAqCQlwT0RNX1N0YUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoKCS8qICAqLwoJLyogIDIwMTIvMDIvMTQgTUggQWRkIHRvIHNoYXJlIDg4RSByYSB3aXRoIG90aGVyIFNXIHRlYW0uICovCgkvKiAgV2UgbmVlZCB0byBjb2xlbGN0IGFsbCBzdXBwb3J0IGFiaWxpdCB0byBhIHByb3BlciBhcmVhLiAqLwoJLyogICovCglib29sCQkJCVJhU3VwcG9ydDg4RTsKCgkvKiAgRGVmaW5lIC4uLi4uLi4uLi4uICovCgoJLyogIExhdGVzdCBwYWNrZXQgcGh5IGluZm8gKE9ETSB3cml0ZSkgKi8KCXN0cnVjdCBvZG1fcGh5X2RiZ19pbmZvCSBQaHlEYmdJbmZvOwoJLyogUEhZX0lORk9fODhFCQlQaHlJbmZvOyAqLwoKCS8qICBMYXRlc3QgcGFja2V0IHBoeSBpbmZvIChPRE0gd3JpdGUpICovCglzdHJ1Y3Qgb2RtX21hY19pbmZvCQkqcE1hY0luZm87CgkvKiBNQUNfSU5GT184OEUJCU1hY0luZm87ICovCgoJLyogIERpZmZlcmVudCBUZWFtIGluZGVwZW5kdCBzdHJ1Y3R1cmU/PyAqLwoKCS8qICAqLwoJLyogVFhfUlRQX0NNTgkJVFhfcmV0cnBvOyAqLwoJLyogVFhfUlRQXzg4RQkJVFhfcmV0cnBvOyAqLwoJLyogVFhfUlRQXzgxOTUJCVRYX3JldHJwbzsgKi8KCgkvKiAgKi8KCS8qIE9ETSBTdHJ1Y3R1cmUgKi8KCS8qICAqLwoJc3RydWN0IG9kbV9mYXRfdAkJRE1fRmF0VGFibGU7CglzdHJ1Y3QgZGlnX3QJRE1fRGlnVGFibGU7CglzdHJ1Y3QgZHluYW1pY19wd3Jfc2F2CQlETV9QU1RhYmxlOwoJc3RydWN0IHByaV9jY2EJRE1fUHJpQ0NBOwoJc3RydWN0IHJ4X2hwCQlETV9SWEhQX1RhYmxlOwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzCUZhbHNlQWxtQ250OwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzCUZsYXNlQWxtQ250QnVkZHlBZGFwdGVyOwoJc3RydWN0IHN3X2FudF9zdwkJRE1fU1dBVF9UYWJsZTsKCWJvb2wJCVJTU0lfdGVzdDsKCglzdHJ1Y3QgZWRjYV90dXJibwkJRE1fRURDQV9UYWJsZTsKCXUzMgkJV01NRURDQV9CRTsKCS8qICBDb3B5IGZyb20gU0Q0IHN0cnVjdHVyZSAqLwoJLyogICovCgkvKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCS8qICAqLwoKCS8qIGNvbW1vbiAqLwoJYm9vbAkJCSpwYkRyaXZlclN0b3BwZWQ7Cglib29sCQkJKnBiRHJpdmVySXNHb2luZ1RvUG5wU2V0UG93ZXJTbGVlcDsKCWJvb2wJCQkqcGluaXRfYWRwdF9pbl9wcm9ncmVzczsKCgkvKiBQU0QgKi8KCWJvb2wJCQliVXNlckFzc2lnbkxldmVsOwoJc3RydWN0IHRpbWVyX2xpc3QJUFNEVGltZXI7Cgl1OAkJCVJTU0lfQlQ7CQkJLyogY29tZSBmcm9tIEJUICovCglib29sCQkJYlBTRGluUHJvY2VzczsKCWJvb2wJCQliRE1Jbml0aWFsR2FpbkVuYWJsZTsKCgkvKiBmb3IgcmF0ZSBhZGFwdGl2ZSwgaW4gZmFjdCwgIDg4Yy85MmMgZncgd2lsbCBoYW5kbGUgdGhpcyAqLwoJdTgJCQliVXNlUkFNYXNrOwoKCXN0cnVjdCBvZG1fcmF0ZV9hZGFwdAlSYXRlQWRhcHRpdmU7CgoKCXN0cnVjdCBvZG1fcmZfY2FsX3QJUkZDYWxpYnJhdGVJbmZvOwoKCS8qICAqLwoJLyogIFRYIHBvd2VyIHRyYWNraW5nICovCgkvKiAgKi8KCXU4CQkJQmJTd2luZ0lkeE9mZG07Cgl1OAkJCUJiU3dpbmdJZHhPZmRtQ3VycmVudDsKCXU4CQkJQmJTd2luZ0lkeE9mZG1CYXNlOwoJYm9vbAkJCUJiU3dpbmdGbGFnT2ZkbTsKCXU4CQkJQmJTd2luZ0lkeENjazsKCXU4CQkJQmJTd2luZ0lkeENja0N1cnJlbnQ7Cgl1OAkJCUJiU3dpbmdJZHhDY2tCYXNlOwoJYm9vbAkJCUJiU3dpbmdGbGFnQ2NrOwoJLyogICovCgkvKiAgT0RNIHN5c3RlbSByZXNvdXJjZS4gKi8KCS8qICAqLwoKCS8qICBPRE0gcmVsYXRpdmUgdGltZS4gKi8KCXN0cnVjdCB0aW1lcl9saXN0IFBhdGhEaXZTd2l0Y2hUaW1lcjsKCS8qIDIwMTEuMDkuMjcgYWRkIGZvciBQYXRoIERpdmVyc2l0eSAqLwoJc3RydWN0IHRpbWVyX2xpc3QgQ0NLUGF0aERpdmVyc2l0eVRpbWVyOwoJc3RydWN0IHRpbWVyX2xpc3QgRmFzdEFudFRyYWluaW5nVGltZXI7CgoJLyogIE9ETSByZWxhdGl2ZSB3b3JraXRlbS4gKi8KfTsJLyogIERNX0R5bmFtaWNfTWVjaGFuaXNtX1N0cnVjdHVyZSAqLwoKZW51bSBvZG1fcmZfY29udGVudCB7CglvZG1fcmFkaW9hX3R4dCA9IDB4MTAwMCwKCW9kbV9yYWRpb2JfdHh0ID0gMHgxMDAxLAoJb2RtX3JhZGlvY190eHQgPSAweDEwMDIsCglvZG1fcmFkaW9kX3R4dCA9IDB4MTAwMwp9OwoKZW51bSBvZG1fYmJfY29uZmlnX3R5cGUgewogICAgQ09ORklHX0JCX1BIWV9SRUcsCiAgICBDT05GSUdfQkJfQUdDX1RBQiwKICAgIENPTkZJR19CQl9BR0NfVEFCXzJHLAogICAgQ09ORklHX0JCX0FHQ19UQUJfNUcsCiAgICBDT05GSUdfQkJfUEhZX1JFR19QRywKfTsKCi8qICBTdGF0dXMgY29kZSAqLwplbnVtIHJ0X3N0YXR1cyB7CglSVF9TVEFUVVNfU1VDQ0VTUywKCVJUX1NUQVRVU19GQUlMVVJFLAoJUlRfU1RBVFVTX1BFTkRJTkcsCglSVF9TVEFUVVNfUkVTT1VSQ0UsCglSVF9TVEFUVVNfSU5WQUxJRF9DT05URVhULAoJUlRfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSLAoJUlRfU1RBVFVTX05PVF9TVVBQT1JULAoJUlRfU1RBVFVTX09TX0FQSV9GQUlMRUQsCn07CgovKiBpbmNsdWRlICJvZG1fZnVuY3Rpb24uaCIgKi8KCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIERJRyAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCmVudW0gZG1fZGlnX29wIHsKCURJR19UWVBFX1RIUkVTSF9ISUdICT0gMCwKCURJR19UWVBFX1RIUkVTSF9MT1cJPSAxLAoJRElHX1RZUEVfQkFDS09GRgkJPSAyLAoJRElHX1RZUEVfUlhfR0FJTl9NSU4JPSAzLAoJRElHX1RZUEVfUlhfR0FJTl9NQVgJPSA0LAoJRElHX1RZUEVfRU5BQkxFCQkJPSA1LAoJRElHX1RZUEVfRElTQUJMRQkJPSA2LAoJRElHX09QX1RZUEVfTUFYCn07CgojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0hJR0gJCQk0MAojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0xPVwkJCTM1CgojZGVmaW5lCQlETV9TQ0FOX1JTU0lfVEgJCQkJMHgxNCAvKiBzY2FuIHJldHVybiBpc3N1ZSBmb3IgTEMgKi8KCgojZGVmaW5lCQlETV9GQUxTRUFMQVJNX1RIUkVTSF9MT1cJNDAwCiNkZWZpbmUJCURNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0gJMTAwMAoKI2RlZmluZQkJRE1fRElHX01BWF9OSUMJCQkJMHg0ZQojZGVmaW5lCQlETV9ESUdfTUlOX05JQwkJCQkweDFlCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQCQkJCTB4MzIKI2RlZmluZQkJRE1fRElHX01JTl9BUAkJCQkweDIwCgojZGVmaW5lCQlETV9ESUdfTUFYX05JQ19IUAkJCTB4NDYKI2RlZmluZQkJRE1fRElHX01JTl9OSUNfSFAJCQkweDJlCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQX0hQCQkJCTB4NDIKI2RlZmluZQkJRE1fRElHX01JTl9BUF9IUAkJCQkweDMwCgovKiB2aXZpIDkyYyY5MmQgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9uLCAyMDExMDUwNCAqLwovKiB0aGlzIGlzIGZvciA5MmMgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMAkJCQkweDIwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgxCQkJCTB4MzAwCiNkZWZpbmUJCURNX0RJR19GQV9USDIJCQkJMHg0MDAKLyogdGhpcyBpcyBmb3IgOTJkICovCiNkZWZpbmUJCURNX0RJR19GQV9USDBfOTJECQkJMHgxMDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMV85MkQJCQkweDQwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgyXzkyRAkJCTB4NjAwCgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NQVgJCQkxMgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NSU4JCQktNAojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9ERUZBVUxUCQkxMAoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQUdDIFJYIEhpZ2ggUG93ZXIgTW9kZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZSAgICAgICAgICBMTkFfTG93X0dhaW5fMSAgICAgICAgICAgICAgICAgICAgICAweDY0CiNkZWZpbmUgICAgICAgICAgTE5BX0xvd19HYWluXzIgICAgICAgICAgICAgICAgICAgICAgMHg1QQojZGVmaW5lICAgICAgICAgIExOQV9Mb3dfR2Fpbl8zICAgICAgICAgICAgICAgICAgICAgIDB4NTgKCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDEgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAwCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDIgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTAwCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwMAojZGVmaW5lICAgICAgICAgIEZBX1JYSFBfVEg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDAKI2RlZmluZSAgICAgICAgICBGQV9SWEhQX1RINSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBFRENBICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRHluYW1pYyBUeCBQb3dlciAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRHluYW1pYyBUeCBQb3dlciBDb250cm9sIFRocmVzaG9sZCAqLwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwyCTc0CiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEJNjcKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfQVAJCTB4M0YKCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX05vcm1hbAkJMAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDEJCTEKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTGV2ZWwyCQkyCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMQkJCTMKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfQlQyCQkJNAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xNQkJCTUKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMzUJCQk2CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzUwCQkJNwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF83MAkJCTgKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMTAwCQkJOQoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgUmF0ZSBBZGFwdGl2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRE1fUkFUUl9TVEFfSU5JVAkJCTAKI2RlZmluZQkJRE1fUkFUUl9TVEFfSElHSAkJCTEKI2RlZmluZQkJCURNX1JBVFJfU1RBX01JRERMRQkJMgojZGVmaW5lCQkJRE1fUkFUUl9TVEFfTE9XCQkJMwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQkIgUG93ZXIgU2F2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgplbnVtIGRtXzFyX2NjYSB7CglDQ0FfMVIgPTAsCglDQ0FfMlIgPSAxLAoJQ0NBX01BWCA9IDIsCn07CgplbnVtIGRtX3JmX2RlZiB7CglSRl9TYXZlID0wLAoJUkZfTm9ybWFsID0gMSwKCVJGX01BWCA9IDIsCn07CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBBbnRlbm5hIERpdmVyc2l0eSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZW51bSBkbV9zd2FzIHsKCUFudGVubmFfQSA9IDEsCglBbnRlbm5hX0IgPSAyLAoJQW50ZW5uYV9NQVggPSAzLAp9OwoKLyogIE1heGltYWwgbnVtYmVyIG9mIGFudGVubmEgZGV0ZWN0aW9uIG1lY2hhbmlzbSBuZWVkcyB0byBwZXJmb3JtLCBhZGRlZCBieSBSb2dlciwgMjAxMS4xMi4yOC4gKi8KI2RlZmluZQlNQVhfQU5URU5OQV9ERVRFQ1RJT05fQ05UCTEwCgovKiAgKi8KLyogIEV4dGVybiBHbG9iYWwgVmFyaWFibGVzLiAqLwovKiAgKi8KI2RlZmluZQlPRkRNX1RBQkxFX1NJWkVfOTJDCTM3CiNkZWZpbmUJT0ZETV9UQUJMRV9TSVpFXzkyRAk0MwojZGVmaW5lCUNDS19UQUJMRV9TSVpFCQkzMwoKZXh0ZXJuCXUzMiBPRkRNU3dpbmdUYWJsZTIzQVtPRkRNX1RBQkxFX1NJWkVfOTJEXTsKZXh0ZXJuCXU4IENDS1N3aW5nVGFibGVfQ2gxX0NoMTMyM0FbQ0NLX1RBQkxFX1NJWkVdWzhdOwpleHRlcm4JdTggQ0NLU3dpbmdUYWJsZV9DaDE0MjNBIFtDQ0tfVEFCTEVfU0laRV1bOF07CgoKCi8qICAqLwovKiAgY2hlY2sgU3RhIHBvaW50ZXIgdmFsaWQgb3Igbm90ICovCi8qICAqLwojZGVmaW5lIElTX1NUQV9WQUxJRChwU3RhKQkJKHBTdGEpCi8qICAyMDEwMDUxNCBKb3NlcGg6IEFkZCBkZWZpbml0aW9uIGZvciBhbnRlbm5hIHN3aXRjaGluZyB0ZXN0IGFmdGVyIGxpbmsuICovCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHRoZSBzdGVwcy4gKi8KLyogIEluIFNXQVdfU1RFUF9QRUFLLCBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGFudGVubmEgYW5kIGxpc3RlbiB0byB0aGUgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluIFNXQVdfU1RFUF9QRUFLICovCi8qICB3aXRoIG9yaWdpbmFsIFJTU0kgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggYW50ZW5uYS4gKi8KI2RlZmluZSBTV0FXX1NURVBfUEVBSwkJMAojZGVmaW5lIFNXQVdfU1RFUF9ERVRFUk1JTkUJMQoKdm9pZCBPRE1fV3JpdGVfRElHMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwJdTgJQ3VycmVudElHSSk7CnZvaWQgT0RNX1dyaXRlX0NDS19DQ0FfVGhyZXMyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OAlDdXJDQ0tfQ0NBVGhyZXMpOwoKdm9pZCBPRE1fU2V0QW50ZW5uYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHU4IEFudGVubmEpOwoKCiNkZWZpbmUgZG1fUkZfU2F2aW5nCU9ETV9SRl9TYXZpbmcyM2EKdm9pZCBPRE1fUkZfU2F2aW5nMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggYkZvcmNlSW5Ob3JtYWwpOwoKI2RlZmluZSBTd0FudERpdlJlc3RBZnRlckxpbmsJT0RNX1N3QW50RGl2UmVzdEFmdGVyTGluawp2b2lkIE9ETV9Td0FudERpdlJlc3RBZnRlckxpbmsoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCiNkZWZpbmUgZG1fQ2hlY2tUWFBvd2VyVHJhY2tpbmcJCU9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjazIzYQp2b2lkIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjazIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKYm9vbCBPRE1fUkFTdGF0ZUNoZWNrMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgczMyIFJTU0ksIGJvb2wgYkZvcmNlVXBkYXRlLAoJCSAgICAgIHU4ICpwUkFUUlN0YXRlKTsKCgojZGVmaW5lIGRtX1NXQVdfUlNTSV9DaGVjawlPRE1fU3dBbnREaXZDaGtQZXJQa3RSc3NpCnZvaWQgT0RNX1N3QW50RGl2Q2hrUGVyUGt0UnNzaShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHU4IFN0YXRpb25JRCwKCQkJICAgICAgIHN0cnVjdCBvZG1fcGh5X2luZm8gKnBQaHlJbmZvKTsKCnUzMiBDb252ZXJ0VG9fZEIyM2EodTMyIFZhbHVlKTsKCnUzMiBHZXRQU0REYXRhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdW5zaWduZWQgaW50IHBvaW50LCB1OCBpbml0aWFsX2dhaW5fcHNkKTsKCnZvaWQgb2RtX0RJRzIzYWJ5UlNTSV9MUFMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCnUzMiBPRE1fR2V0X1JhdGVfQml0bWFwMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIG1hY2lkLCB1MzIgcmFfbWFzaywgdTggcnNzaV9sZXZlbCk7CgoKdm9pZCBPRE0yM2FfRE1Jbml0KHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgp2b2lkIE9ETV9ETVdhdGNoZG9nMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7IC8qICBGb3IgY29tbW9uIHVzZSBpbiB0aGUgZnV0dXJlICovCgp2b2lkIE9ETV9DbW5JbmZvSW5pdDIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIGVudW0gb2RtX2NtbmluZm8JQ21uSW5mbywgdTMyIFZhbHVlKTsKCnZvaWQgT0RNMjNhX0NtbkluZm9Ib29rKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgZW51bSBvZG1fY21uaW5mbwlDbW5JbmZvLCB2b2lkICpwVmFsdWUpOwoKdm9pZCBPRE1fQ21uSW5mb1B0ckFycmF5SG9vazIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIGVudW0gb2RtX2NtbmluZm8JQ21uSW5mbywgdTE2IEluZGV4LCB2b2lkICpwVmFsdWUpOwoKdm9pZCBPRE1fQ21uSW5mb1VwZGF0ZTIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBDbW5JbmZvLCB1NjQgVmFsdWUpOwoKdm9pZCBPRE1fSW5pdEFsbFRpbWVycyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fQ2FuY2VsQWxsVGltZXJzKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgp2b2lkIE9ETV9SZWxlYXNlQWxsVGltZXJzKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgp2b2lkIE9ETV9SZXNldElRS1Jlc3VsdChzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fQW50c2VsU3RhdGlzdGljc184OEMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OCBNYWNJZCwgdTMyIFBXREJBbGwsIGJvb2wgaXNDQ0tyYXRlKTsKCnZvaWQgT0RNX1NpbmdsZUR1YWxBbnRlbm5hRGVmYXVsdFNldHRpbmcoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCmJvb2wgT0RNX1NpbmdsZUR1YWxBbnRlbm5hRGV0ZWN0aW9uKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggbW9kZSk7Cgp2b2lkIG9kbV9kdGMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCiNlbmRpZgo=