LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmCV9fSEFMRE1PVVRTUkNfSF9fCiNkZWZpbmUgX19IQUxETU9VVFNSQ19IX18KCi8qICBEZWZpbml0aW9uICovCi8qICBEZWZpbmUgYWxsIHRlYW0gc3VwcG9ydCBhYmlsaXR5LiAqLwoKLyogIERlZmluZSBmb3IgYWxsIHRlYW1zLiBQbGVhc2UgRGVmaW5lIHRoZSBjb25zdGFudCBpbiB5b3VyIHByZWNvbXAgaGVhZGVyLiAqLwoKLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9BUAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9BRFNMCQkJMCAqLwovKiBkZWZpbmUJCURNX09ETV9TVVBQT1JUX0NFCQkJMCAqLwovKiBkZWZpbmUJCURNX09ETV9TVVBQT1JUX01QCQkJMSAqLwoKLyogIERlZmluZSBPRE0gU1cgdGVhbSBzdXBwb3J0IGZsYWcuICovCgovKiAgQW50ZW5uYSBTd2l0Y2ggUmVsYXRpdmUgRGVmaW5pdGlvbi4gKi8KCi8qICBBZGQgbmV3IGZ1bmN0aW9uIFN3QW50RGl2Q2hlY2s4MTkyQygpLiAqLwovKiAgVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiBvZiBBbnRlbm5hIGRpdmVyc2l0eSBmdW5jdGlvbiBiZWZvcmUgbGluay4gKi8KLyogIE1haW5seSwgaXQganVzdCByZXRhaW5zIGxhc3Qgc2NhbiByZXN1bHQgYW5kIHNjYW4gYWdhaW4uICovCi8qICBBZnRlciB0aGF0LCBpdCBjb21wYXJlcyB0aGUgc2NhbiByZXN1bHQgdG8gc2VlIHdoaWNoIG9uZSBnZXRzIGJldHRlcgogKiAgUlNTSS4gSXQgc2VsZWN0cyBhbnRlbm5hIHdpdGggYmV0dGVyIHJlY2VpdmluZyBwb3dlciBhbmQgcmV0dXJucyBiZXR0ZXIKICogIHNjYW4gcmVzdWx0LiAqLwoKI2RlZmluZQlUUF9NT0RFCQkJMAojZGVmaW5lCVJTU0lfTU9ERQkJMQojZGVmaW5lCVRSQUZGSUNfTE9XCQkwCiNkZWZpbmUJVFJBRkZJQ19ISUdICQkxCgovKiAzIFR4IFBvd2VyIFRyYWNraW5nICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRFBLX0RFTFRBX01BUFBJTkdfTlVNCTEzCiNkZWZpbmUJCWluZGV4X21hcHBpbmdfSFBfTlVNCTE1CgoKLyogICovCi8qIDMgUFNEIEhhbmRsZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKI2RlZmluZQlBRkhfUFNECQkxCS8qIDA6bm9ybWFsIFBTRCBzY2FuLCAxOiBvbmx5IGRvIDIwIHB0cyBQU0QgKi8KI2RlZmluZQlNT0RFXzQwTQkwCS8qIDA6MjBNLCAxOjQwTSAqLwojZGVmaW5lCVBTRF9USDIJCTMKI2RlZmluZQlQU0RfQ0hNCQkyMCAgIC8qICBNaW5pbXVtIGNoYW5uZWwgbnVtYmVyIGZvciBCVCBBRkggKi8KI2RlZmluZQlTSVJfU1RFUF9TSVpFCTMKI2RlZmluZSBTbW9vdGhfU2l6ZV8xCTUKI2RlZmluZQlTbW9vdGhfVEhfMQkzCiNkZWZpbmUgU21vb3RoX1NpemVfMgkxMAojZGVmaW5lCVNtb290aF9USF8yCTQKI2RlZmluZSBTbW9vdGhfU2l6ZV8zCTIwCiNkZWZpbmUJU21vb3RoX1RIXzMJNAojZGVmaW5lIFNtb290aF9TdGVwX1NpemUgNQojZGVmaW5lCUFkYXB0aXZlX1NJUgkxCiNkZWZpbmUJUFNEX1JFU0NBTgk0CiNkZWZpbmUJUFNEX1NDQU5fSU5URVJWQUwJNzAwIC8qIG1zICovCgovKiA4NzIzQSBIaWdoIFBvd2VyIElHSSBTZXR0aW5nICovCiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORAkweDIyCiNkZWZpbmUgRE1fRElHX0dtb2RlX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORCAweDI4CiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX1RIUkVTSE9MRAkweDNhCgovKiAgTFBTIGRlZmluZSAqLwojZGVmaW5lIERNX0RJR19GQV9USDBfTFBTCQk0IC8qICA0IGluIGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDFfTFBTCQkxNSAvKiAgMTUgbHBzICovCiNkZWZpbmUgRE1fRElHX0ZBX1RIMl9MUFMJCTMwIC8qICAzMCBscHMgKi8KI2RlZmluZSBSU1NJX09GRlNFVF9ESUcJCQkweDA1OwoKLyogQU5UIFRlc3QgKi8KI2RlZmluZSBBTlRURVNUQUxMCQkweDAwCS8qIEFudCBBIG9yIEIgd2lsbCBiZSBUZXN0aW5nICovCiNkZWZpbmUgQU5UVEVTVEEJCTB4MDEJLyogQW50IEEgd2lsbCBiZSBUZXN0aW5nICovCiNkZWZpbmUgQU5UVEVTVEIJCTB4MDIJLyogQW50IEIgd2lsbCBiZSB0ZXN0aW5nICovCgpzdHJ1Y3QgcnR3X2RpZyB7Cgl1OAkJRGlnX0VuYWJsZV9GbGFnOwoJdTgJCURpZ19FeHRfUG9ydF9TdGFnZTsKCglpbnQJCVJzc2lMb3dUaHJlc2g7CglpbnQJCVJzc2lIaWdoVGhyZXNoOwoKCXUzMgkJRkFMb3dUaHJlc2g7Cgl1MzIJCUZBSGlnaFRocmVzaDsKCgl1OAkJQ3VyU1RBQ29ubmVjdFN0YXRlOwoJdTgJCVByZVNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlDdXJNdWx0aVNUQUNvbm5lY3RTdGF0ZTsKCgl1OAkJUHJlSUdWYWx1ZTsKCXU4CQlDdXJJR1ZhbHVlOwoJdTgJCUJhY2t1cElHVmFsdWU7CgoJczgJCUJhY2tvZmZWYWw7CglzOAkJQmFja29mZlZhbF9yYW5nZV9tYXg7CglzOAkJQmFja29mZlZhbF9yYW5nZV9taW47Cgl1OAkJcnhfZ2Fpbl9yYW5nZV9tYXg7Cgl1OAkJcnhfZ2Fpbl9yYW5nZV9taW47Cgl1OAkJUnNzaV92YWxfbWluOwoKCXU4CQlQcmVDQ0tfQ0NBVGhyZXM7Cgl1OAkJQ3VyQ0NLX0NDQVRocmVzOwoJdTgJCVByZUNDS1BEU3RhdGU7Cgl1OAkJQ3VyQ0NLUERTdGF0ZTsKCgl1OAkJTGFyZ2VGQUhpdDsKCXU4CQlGb3JiaWRkZW5JR0k7Cgl1MzIJCVJlY292ZXJfY250OwoKCXU4CQlESUdfRHluYW1pY19NSU5fMDsKCXU4CQlESUdfRHluYW1pY19NSU5fMTsKCWJvb2wJCWJNZWRpYUNvbm5lY3RfMDsKCWJvb2wJCWJNZWRpYUNvbm5lY3RfMTsKCgl1MzIJCUFudERpdl9SU1NJX21heDsKCXUzMgkJUlNTSV9tYXg7Cn07CgpzdHJ1Y3QgcnRsX3BzIHsKCXU4CQlQcmVDQ0FTdGF0ZTsKCXU4CQlDdXJDQ0FTdGF0ZTsKCgl1OAkJUHJlUkZTdGF0ZTsKCXU4CQlDdXJSRlN0YXRlOwoKCWludAkJICAgIFJzc2lfdmFsX21pbjsKCgl1OAkJaW5pdGlhbGl6ZTsKCXUzMgkJUmVnODc0LCBSZWdDNzAsIFJlZzg1QywgUmVnQTc0OwoKfTsKCnN0cnVjdCBmYWxzZV9hbGFybV9zdGF0cyB7Cgl1MzIJQ250X1Bhcml0eV9GYWlsOwoJdTMyCUNudF9SYXRlX0lsbGVnYWw7Cgl1MzIJQ250X0NyYzhfZmFpbDsKCXUzMglDbnRfTWNzX2ZhaWw7Cgl1MzIJQ250X09mZG1fZmFpbDsKCXUzMglDbnRfQ2NrX2ZhaWw7Cgl1MzIJQ250X2FsbDsKCXUzMglDbnRfRmFzdF9Gc3luYzsKCXUzMglDbnRfU0JfU2VhcmNoX2ZhaWw7Cgl1MzIJQ250X09GRE1fQ0NBOwoJdTMyCUNudF9DQ0tfQ0NBOwoJdTMyCUNudF9DQ0FfYWxsOwoJdTMyCUNudF9CV19VU0M7CS8qIEdhcnkgKi8KCXUzMglDbnRfQldfTFNDOwkvKiBHYXJ5ICovCn07CgpzdHJ1Y3QgcnhfaHBjIHsKCXU4CQlSWEhQX2ZsYWc7Cgl1OAkJUFNEX2Z1bmNfdHJpZ2dlcjsKCXU4CQlQU0RfYml0bWFwX1JYSFBbODBdOwoJdTgJCVByZV9JR0k7Cgl1OAkJQ3VyX0lHSTsKCXU4CQlQcmVfcHdfdGg7Cgl1OAkJQ3VyX3B3X3RoOwoJYm9vbAkJRmlyc3RfdGltZV9lbnRlcjsKCWJvb2wJCVJYSFBfZW5hYmxlOwoJdTgJCVRQX01vZGU7CglzdHJ1Y3QgdGltZXJfbGlzdCBQU0RUaW1lcjsKfTsKCiNkZWZpbmUgQVNTT0NJQVRFX0VOVFJZX05VTQkzMiAvKiAgTWF4IHNpemUgb2YgQXNvY0VudHJ5W10uICovCiNkZWZpbmUJT0RNX0FTU09DSUFURV9FTlRSWV9OVU0JQVNTT0NJQVRFX0VOVFJZX05VTQoKLyogIFRoaXMgaW5kaWNhdGVzIHR3byBkaWZmZXJlbnQgc3RlcHMuICovCi8qICBJbiBTV0FXX1NURVBfUEVBSywgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBhbnRlbm5hIGFuZCBsaXN0ZW4gdG8KICogIHRoZSBzaWduYWwgb24gdGhlIGFpci4gKi8KLyogIEluIFNXQVdfU1RFUF9ERVRFUk1JTkUsIGRyaXZlciBqdXN0IGNvbXBhcmVzIHRoZSBzaWduYWwgY2FwdHVyZWQgaW4KICogIFNXQVdfU1RFUF9QRUFLIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvCiAqICBzd2l0Y2ggYW50ZW5uYS4gKi8KCiNkZWZpbmUgU1dBV19TVEVQX1BFQUsJCTAKI2RlZmluZSBTV0FXX1NURVBfREVURVJNSU5FCTEKCiNkZWZpbmUJVFBfTU9ERQkJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkJMAojZGVmaW5lCVRSQUZGSUNfSElHSAkJMQoKc3RydWN0IHN3X2FudF9zd2l0Y2ggewoJdTgJdHJ5X2ZsYWc7CglzMzIJUHJlUlNTSTsKCXU4CUN1ckFudGVubmE7Cgl1OAlQcmVBbnRlbm5hOwoJdTgJUlNTSV9Ucnlpbmc7Cgl1OAlUZXN0TW9kZTsKCXU4CWJUcmlnZ2VyQW50ZW5uYVN3aXRjaDsKCXU4CVNlbGVjdEFudGVubmFNYXA7Cgl1OAlSU1NJX3RhcmdldDsKCgkvKiAgQmVmb3JlIGxpbmsgQW50ZW5uYSBTd2l0Y2ggY2hlY2sgKi8KCXU4CVNXQVNfTm9MaW5rX1N0YXRlOwoJdTMyCVNXQVNfTm9MaW5rX0JLX1JlZzg2MDsKCWJvb2wJQU5UQV9PTjsJLyogVG8gaW5kaWNhdGUgQW50IEEgaXMgb3Igbm90ICovCglib29sCUFOVEJfT047CS8qIFRvIGluZGljYXRlIEFudCBCIGlzIG9uIG9yIG5vdCAqLwoKCXMzMglSU1NJX3N1bV9BOwoJczMyCVJTU0lfc3VtX0I7CglzMzIJUlNTSV9jbnRfQTsKCXMzMglSU1NJX2NudF9COwoJdTY0CWxhc3RUeE9rQ250OwoJdTY0CWxhc3RSeE9rQ250OwoJdTY0CVRYQnl0ZUNudF9BOwoJdTY0CVRYQnl0ZUNudF9COwoJdTY0CVJYQnl0ZUNudF9BOwoJdTY0CVJYQnl0ZUNudF9COwoJdTgJVHJhZmZpY0xvYWQ7CglzdHJ1Y3QgdGltZXJfbGlzdCBTd0FudGVubmFTd2l0Y2hUaW1lcjsKCS8qIEh5YnJpZCBBbnRlbm5hIERpdmVyc2l0eSAqLwoJdTMyCUNDS19BbnQxX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglDQ0tfQW50Ml9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJT0ZETV9BbnQxX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglPRkRNX0FudDJfQ250W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCVJTU0lfQW50MV9TdW1bQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJUlNTSV9BbnQyX1N1bVtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVR4QW50W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJVGFyZ2V0U1RBOwoJdTgJYW50c2VsOwoJdTgJUnhJZGxlQW50Owp9OwoKc3RydWN0IGVkY2FfdHVyYm8gewoJYm9vbCBiQ3VycmVudFR1cmJvRURDQTsKCWJvb2wgYklzQ3VyUkRMU3RhdGU7Cgl1MzIJcHJ2X3RyYWZmaWNfaWR4OyAvKiAgZWRjYSB0dXJibyAqLwp9OwoKc3RydWN0IG9kbV9yYXRlX2FkYXB0IHsKCXU4CVR5cGU7CQkvKiAgRE1fVHlwZV9CeUZXL0RNX1R5cGVfQnlEcml2ZXIgKi8KCXU4CUhpZ2hSU1NJVGhyZXNoOwkvKiAgaWYgUlNTSSA+IEhpZ2hSU1NJVGhyZXNoCT0+IFJBVFJTdGF0ZSBpcyBETV9SQVRSX1NUQV9ISUdIICovCgl1OAlMb3dSU1NJVGhyZXNoOwkvKiAgaWYgUlNTSSA8PSBMb3dSU1NJVGhyZXNoCT0+IFJBVFJTdGF0ZSBpcyBETV9SQVRSX1NUQV9MT1cgKi8KCXU4CVJBVFJTdGF0ZTsJLyogIEN1cnJlbnQgUlNTSSBsZXZlbCwgRE1fUkFUUl9TVEFfSElHSC9ETV9SQVRSX1NUQV9NSURETEUvRE1fUkFUUl9TVEFfTE9XICovCgl1MzIJTGFzdFJBVFI7CS8qICBSQVRSIFJlZ2lzdGVyIENvbnRlbnQgKi8KfTsKCiNkZWZpbmUgSVFLX01BQ19SRUdfTlVNCQk0CiNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkxNgojZGVmaW5lIElRS19CQl9SRUdfTlVNX01BWAkxMAojZGVmaW5lIElRS19CQl9SRUdfTlVNCQk5CiNkZWZpbmUgSFBfVEhFUk1BTF9OVU0JCTgKCiNkZWZpbmUgQVZHX1RIRVJNQUxfTlVNCQk4CiNkZWZpbmUgSVFLX01hdHJpeF9SRUdfTlVNCTgKI2RlZmluZSBJUUtfTWF0cml4X1NldHRpbmdzX05VTQkxKzI0KzIxCgojZGVmaW5lCURNX1R5cGVfQnlGV2kJCTAKI2RlZmluZQlETV9UeXBlX0J5RHJpdmVyCTEKCi8qICBEZWNsYXJlIGZvciBjb21tb24gaW5mbyAqLwoKc3RydWN0IG9kbV9waHlfc3RhdHVzX2luZm8gewoJdTgJUnhQV0RCQWxsOwoJdTgJU2lnbmFsUXVhbGl0eTsJIC8qICBpbiAwLTEwMCBpbmRleC4gKi8KCXU4CVJ4TUlNT1NpZ25hbFF1YWxpdHlbTUFYX1BBVEhfTlVNXzkyQ1NdOyAvKiBFVk0gKi8KCXU4CVJ4TUlNT1NpZ25hbFN0cmVuZ3RoW01BWF9QQVRIX05VTV85MkNTXTsvKiAgaW4gMH4xMDAgaW5kZXggKi8KCXM4CVJ4UG93ZXI7IC8qICBpbiBkQm0gVHJhbnNsYXRlIGZyb20gUFdkQiAqLwoJczgJUmVjdlNpZ25hbFBvd2VyOy8qICBSZWFsIHBvd2VyIGluIGRCbSBmb3IgdGhpcyBwYWNrZXQsIG5vCgkJCQkgKiBiZWF1dGlmaWNhdGlvbiBhbmQgYWdncmVnYXRpb24uIEtlZXAgdGhpcyByYXcKCQkJCSAqIGluZm8gdG8gYmUgdXNlZCBmb3IgdGhlIG90aGVyIHByb2NlZHVyZXMuICovCgl1OAlCVFJ4UlNTSVBlcmNlbnRhZ2U7Cgl1OAlTaWduYWxTdHJlbmd0aDsgLyogIGluIDAtMTAwIGluZGV4LiAqLwoJdTgJUnhQd3JbTUFYX1BBVEhfTlVNXzkyQ1NdOy8qIHBlci1wYXRoJ3MgcHdkYiAqLwoJdTgJUnhTTlJbTUFYX1BBVEhfTlVNXzkyQ1NdOy8qIHBlci1wYXRoJ3MgU05SICovCn07CgpzdHJ1Y3Qgb2RtX3BoeV9kYmdfaW5mbyB7CgkvKiBPRE0gV3JpdGUsZGVidWcgaW5mbyAqLwoJczgJUnhTTlJkQltNQVhfUEFUSF9OVU1fOTJDU107Cgl1NjQJTnVtUXJ5UGh5U3RhdHVzOwoJdTY0CU51bVFyeVBoeVN0YXR1c0NDSzsKCXU2NAlOdW1RcnlQaHlTdGF0dXNPRkRNOwoJLyogT3RoZXJzICovCglzMzIJUnhFVk1bTUFYX1BBVEhfTlVNXzkyQ1NdOwp9OwoKc3RydWN0IG9kbV9wZXJfcGt0X2luZm8gewoJczgJUmF0ZTsKCXU4CVN0YXRpb25JRDsKCWJvb2wJYlBhY2tldE1hdGNoQlNTSUQ7Cglib29sCWJQYWNrZXRUb1NlbGY7Cglib29sCWJQYWNrZXRCZWFjb247Cn07CgpzdHJ1Y3Qgb2RtX21hY19zdGF0dXNfaW5mbyB7Cgl1OAl0ZXN0Owp9OwoKZW51bSBvZG1fYWJpbGl0eSB7CgkvKiAgQkIgVGVhbSAqLwoJT0RNX0RJRwkJCT0gMHgwMDAwMDAwMSwKCU9ETV9ISUdIX1BPV0VSCQk9IDB4MDAwMDAwMDIsCglPRE1fQ0NLX0NDQV9USAkJPSAweDAwMDAwMDA0LAoJT0RNX0ZBX1NUQVRJU1RJQ1MJPSAweDAwMDAwMDA4LAoJT0RNX1JBTUFTSwkJPSAweDAwMDAwMDEwLAoJT0RNX1JTU0lfTU9OSVRPUgk9IDB4MDAwMDAwMjAsCglPRE1fU1dfQU5URElWCQk9IDB4MDAwMDAwNDAsCglPRE1fSFdfQU5URElWCQk9IDB4MDAwMDAwODAsCglPRE1fQkJfUFdSU1YJCT0gMHgwMDAwMDEwMCwKCU9ETV8yVFBBVEhESVYJCT0gMHgwMDAwMDIwMCwKCU9ETV8xVFBBVEhESVYJCT0gMHgwMDAwMDQwMCwKCU9ETV9QU0QyQUZICQk9IDB4MDAwMDA4MDAKfTsKCi8qICAyMDExLzIwLzIwIE1IIEZvciBNUCBkcml2ZXIgUlRfV0xBTl9TVEEgPSAgc3RydWN0IHN0YV9pbmZvICovCi8qICBQbGVhc2UgZGVjbGFyZSBiZWxvdyBPRE0gcmVsYXRpdmUgaW5mbyBpbiB5b3VyIFNUQSBpbmZvIHN0cnVjdHVyZS4gKi8KCnN0cnVjdCBvZG1fc3RhX2luZm8gewoJLyogIERyaXZlciBXcml0ZSAqLwoJYm9vbAliVXNlZDsJCS8qICByZWNvcmQgdGhlIHN0YSBzdGF0dXMgbGluayBvciBub3Q/ICovCgl1OAlJT1RQZWVyOwkvKiAgRW51bSB2YWx1ZS4JSFRfSU9UX1BFRVJfRSAqLwoKCS8qICBPRE0gV3JpdGUgKi8KCS8qIDEgUEhZX1NUQVRVU19JTkZPICovCgl1OAlSU1NJX1BhdGhbNF07CQkvKiAgKi8KCXU4CVJTU0lfQXZlOwoJdTgJUlhFVk1bNF07Cgl1OAlSWFNOUls0XTsKfTsKCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBDb21tb24gaW5mbyBlbnVtIGZvciBhbGwgdGVhbS4gKi8KCmVudW0gb2RtX2NvbW1vbl9pbmZvX2RlZiB7CgkvKiAgRml4ZWQgdmFsdWU6ICovCgoJLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoJT0RNX0NNTklORk9fUExBVEZPUk0gPSAwLAoJT0RNX0NNTklORk9fQUJJTElUWSwJCS8qIE9ETV9BQklMSVRZX0UgKi8KCU9ETV9DTU5JTkZPX0lOVEVSRkFDRSwJCS8qIE9ETV9JTlRFUkZBQ0VfRSAqLwoJT0RNX0NNTklORk9fTVBfVEVTVF9DSElQLAoJT0RNX0NNTklORk9fSUNfVFlQRSwJCS8qIE9ETV9JQ19UWVBFX0UgKi8KCU9ETV9DTU5JTkZPX0NVVF9WRVIsCQkvKiBPRE1fQ1VUX1ZFUlNJT05fRSAqLwoJT0RNX0NNTklORk9fUkZfVFlQRSwJCS8qIE9ETV9SRl9QQVRIX0Ugb3IgT0RNX1JGX1RZUEVfRT8gKi8KCU9ETV9DTU5JTkZPX0JPQVJEX1RZUEUsCQkvKiBPRE1fQk9BUkRfVFlQRV9FICovCglPRE1fQ01OSU5GT19FWFRfTE5BLAkJLyogdHJ1ZSAqLwoJT0RNX0NNTklORk9fRVhUX1BBLAoJT0RNX0NNTklORk9fRVhUX1RSU1csCglPRE1fQ01OSU5GT19QQVRDSF9JRCwJCS8qIENVU1RPTUVSIElEICovCglPRE1fQ01OSU5GT19CSU5IQ1RfVEVTVCwKCU9ETV9DTU5JTkZPX0JXSUZJX1RFU1QsCglPRE1fQ01OSU5GT19TTUFSVF9DT05DVVJSRU5ULAoJLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAgKi8KCgkvKiAgRHluYW1pYyB2YWx1ZTogKi8KLyogIFBPSU5URVIgUkVGRVJFTkNFLS0tLS0tLS0tLS0gICovCglPRE1fQ01OSU5GT19NQUNfUEhZX01PREUsCS8qICBPRE1fTUFDX1BIWV9NT0RFX0UgKi8KCU9ETV9DTU5JTkZPX1RYX1VOSSwKCU9ETV9DTU5JTkZPX1JYX1VOSSwKCU9ETV9DTU5JTkZPX1dNX01PREUsCQkvKiAgT0RNX1dJUkVMRVNTX01PREVfRSAqLwoJT0RNX0NNTklORk9fQkFORCwJCS8qICBPRE1fQkFORF9UWVBFX0UgKi8KCU9ETV9DTU5JTkZPX1NFQ19DSE5MX09GRlNFVCwJLyogIE9ETV9TRUNfQ0hOTF9PRkZTRVRfRSAqLwoJT0RNX0NNTklORk9fU0VDX01PREUsCQkvKiAgT0RNX1NFQ1VSSVRZX0UgKi8KCU9ETV9DTU5JTkZPX0JXLAkJCS8qICBPRE1fQldfRSAqLwoJT0RNX0NNTklORk9fQ0hOTCwKCglPRE1fQ01OSU5GT19ETVNQX0dFVF9WQUxVRSwKCU9ETV9DTU5JTkZPX0JVRERZX0FEQVBUT1IsCglPRE1fQ01OSU5GT19ETVNQX0lTX01BU1RFUiwKCU9ETV9DTU5JTkZPX1NDQU4sCglPRE1fQ01OSU5GT19QT1dFUl9TQVZJTkcsCglPRE1fQ01OSU5GT19PTkVfUEFUSF9DQ0EsCS8qICBPRE1fQ0NBX1BBVEhfRSAqLwoJT0RNX0NNTklORk9fRFJWX1NUT1AsCglPRE1fQ01OSU5GT19QTlBfSU4sCglPRE1fQ01OSU5GT19JTklUX09OLAoJT0RNX0NNTklORk9fQU5UX1RFU1QsCglPRE1fQ01OSU5GT19ORVRfQ0xPU0VELAoJT0RNX0NNTklORk9fTVBfTU9ERSwKLyogIFBPSU5URVIgUkVGRVJFTkNFLS0tLS0tLS0tLS0gKi8KCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCglPRE1fQ01OSU5GT19XSUZJX0RJUkVDVCwKCU9ETV9DTU5JTkZPX1dJRklfRElTUExBWSwKCU9ETV9DTU5JTkZPX0xJTkssCglPRE1fQ01OSU5GT19SU1NJX01JTiwKCU9ETV9DTU5JTkZPX0RCR19DT01QLAkJCS8qICB1NjQgKi8KCU9ETV9DTU5JTkZPX0RCR19MRVZFTCwJCQkvKiAgdTMyICovCglPRE1fQ01OSU5GT19SQV9USFJFU0hPTERfSElHSCwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0xPVywJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkZfQU5URU5OQV9UWVBFLAkJLyogIHU4ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFRCwKCU9ETV9DTU5JTkZPX0JUX09QRVJBVElPTiwKCU9ETV9DTU5JTkZPX0JUX0RJRywKCU9ETV9DTU5JTkZPX0JUX0JVU1ksCQkJLyogQ2hlY2sgQnQgaXMgdXNpbmcgb3Igbm90ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFX0VEQ0EsCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tKi8KCgkvKiAgRHluYW1pYyBwdHIgYXJyYXkgaG9vayBpdG1zLiAqLwoJT0RNX0NNTklORk9fU1RBX1NUQVRVUywKCU9ETV9DTU5JTkZPX1BIWV9TVEFUVVMsCglPRE1fQ01OSU5GT19NQUNfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFYLAp9OwoKLyogIDIwMTEvMTAvMjAgTUggRGVmaW5lIE9ETSBzdXBwb3J0IGFiaWxpdHkuICBPRE1fQ01OSU5GT19BQklMSVRZICovCgplbnVtIG9kbV9hYmlsaXR5X2RlZiB7CgkvKiAgQkIgT0RNIHNlY3Rpb24gQklUIDAtMTUgKi8KCU9ETV9CQl9ESUcJCQk9IEJJVCgwKSwKCU9ETV9CQl9SQV9NQVNLCQkJPSBCSVQoMSksCglPRE1fQkJfRFlOQU1JQ19UWFBXUgkJPSBCSVQoMiksCglPRE1fQkJfRkFfQ05UCQkJPSBCSVQoMyksCglPRE1fQkJfUlNTSV9NT05JVE9SCQk9IEJJVCg0KSwKCU9ETV9CQl9DQ0tfUEQJCQk9IEJJVCg1KSwKCU9ETV9CQl9BTlRfRElWCQkJPSBCSVQoNiksCglPRE1fQkJfUFdSX1NBVkUJCQk9IEJJVCg3KSwKCU9ETV9CQl9QV1JfVFJBCQkJPSBCSVQoOCksCglPRE1fQkJfUkFURV9BREFQVElWRQkJPSBCSVQoOSksCglPRE1fQkJfUEFUSF9ESVYJCQk9IEJJVCgxMCksCglPRE1fQkJfUFNECQkJPSBCSVQoMTEpLAoJT0RNX0JCX1JYSFAJCQk9IEJJVCgxMiksCgoJLyogIE1BQyBETSBzZWN0aW9uIEJJVCAxNi0yMyAqLwoJT0RNX01BQ19FRENBX1RVUkJPCQk9IEJJVCgxNiksCglPRE1fTUFDX0VBUkxZX01PREUJCT0gQklUKDE3KSwKCgkvKiAgUkYgT0RNIHNlY3Rpb24gQklUIDI0LTMxICovCglPRE1fUkZfVFhfUFdSX1RSQUNLCQk9IEJJVCgyNCksCglPRE1fUkZfUlhfR0FJTl9UUkFDSwkJPSBCSVQoMjUpLAoJT0RNX1JGX0NBTElCUkFUSU9OCQk9IEJJVCgyNiksCn07CgojZGVmaW5lIE9ETV9SVEw4MTg4RQkJQklUKDQpCgovKiBPRE1fQ01OSU5GT19DVVRfVkVSICovCmVudW0gb2RtX2N1dF92ZXJzaW9uIHsKCU9ETV9DVVRfQQk9CTEsCglPRE1fQ1VUX0IJPQkyLAoJT0RNX0NVVF9DCT0JMywKCU9ETV9DVVRfRAk9CTQsCglPRE1fQ1VUX0UJPQk1LAoJT0RNX0NVVF9GCT0JNiwKCU9ETV9DVVRfVEVTVAk9CTcsCn07CgovKiAgT0RNX0NNTklORk9fUkZfVFlQRSAqLwovKiAgRm9yIGV4YW1wbGUgMVQyUiAoQStBQiA9IEJJVDB8QklUNHxCSVQ1KSAqLwplbnVtIG9kbV9yZl9wYXRoIHsKCU9ETV9SRl9UWF9BCT0JQklUKDApLAoJT0RNX1JGX1RYX0IJPQlCSVQoMSksCglPRE1fUkZfVFhfQwk9CUJJVCgyKSwKCU9ETV9SRl9UWF9ECT0JQklUKDMpLAoJT0RNX1JGX1JYX0EJPQlCSVQoNCksCglPRE1fUkZfUlhfQgk9CUJJVCg1KSwKCU9ETV9SRl9SWF9DCT0JQklUKDYpLAoJT0RNX1JGX1JYX0QJPQlCSVQoNyksCn07CgplbnVtIG9kbV9yZl90eXBlIHsKCU9ETV8xVDFSCT0JMCwKCU9ETV8xVDJSCT0JMSwKCU9ETV8yVDJSCT0JMiwKCU9ETV8yVDNSCT0JMywKCU9ETV8yVDRSCT0JNCwKCU9ETV8zVDNSCT0JNSwKCU9ETV8zVDRSCT0JNiwKCU9ETV80VDRSCT0JNywKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCgplbnVtIG9kbV9tYWNfcGh5X21vZGUgewoJT0RNX1NNU1AJPSAwLAoJT0RNX0RNU1AJPSAxLAoJT0RNX0RNRFAJPSAyLAp9OwoKZW51bSBvZG1fYnRfY29leGlzdCB7CglPRE1fQlRfQlVTWQkJPSAxLAoJT0RNX0JUX09OCQk9IDIsCglPRE1fQlRfT0ZGCQk9IDMsCglPRE1fQlRfTk9ORQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09QX01PREUgKi8KZW51bSBvZG1fb3BlcmF0aW9uX21vZGUgewoJT0RNX05PX0xJTksJCT0gQklUKDApLAoJT0RNX0xJTksJCT0gQklUKDEpLAoJT0RNX1NDQU4JCT0gQklUKDIpLAoJT0RNX1BPV0VSU0FWRQkJPSBCSVQoMyksCglPRE1fQVBfTU9ERQkJPSBCSVQoNCksCglPRE1fQ0xJRU5UX01PREUJCT0gQklUKDUpLAoJT0RNX0FEX0hPQwkJPSBCSVQoNiksCglPRE1fV0lGSV9ESVJFQ1QJCT0gQklUKDcpLAoJT0RNX1dJRklfRElTUExBWQk9IEJJVCg4KSwKfTsKCi8qICBPRE1fQ01OSU5GT19XTV9NT0RFICovCmVudW0gb2RtX3dpcmVsZXNzX21vZGUgewoJT0RNX1dNX1VOS05PVwk9IDB4MCwKCU9ETV9XTV9CCT0gQklUKDApLAoJT0RNX1dNX0cJPSBCSVQoMSksCglPRE1fV01fQQk9IEJJVCgyKSwKCU9ETV9XTV9OMjRHCT0gQklUKDMpLAoJT0RNX1dNX041Rwk9IEJJVCg0KSwKCU9ETV9XTV9BVVRPCT0gQklUKDUpLAoJT0RNX1dNX0FDCT0gQklUKDYpLAp9OwoKLyogIE9ETV9DTU5JTkZPX0JBTkQgKi8KZW51bSBvZG1fYmFuZF90eXBlIHsKCU9ETV9CQU5EXzJfNEcJPSBCSVQoMCksCglPRE1fQkFORF81Rwk9IEJJVCgxKSwKfTsKCi8qICBPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQgKi8KZW51bSBvZG1fc2VjX2Nobmxfb2Zmc2V0IHsKCU9ETV9ET05UX0NBUkUJPSAwLAoJT0RNX0JFTE9XCT0gMSwKCU9ETV9BQk9WRQk9IDIKfTsKCi8qICBPRE1fQ01OSU5GT19TRUNfTU9ERSAqLwplbnVtIG9kbV9zZWN1cml0eSB7CglPRE1fU0VDX09QRU4JCT0gMCwKCU9ETV9TRUNfV0VQNDAJCT0gMSwKCU9ETV9TRUNfVEtJUAkJPSAyLAoJT0RNX1NFQ19SRVNFUlZFCQk9IDMsCglPRE1fU0VDX0FFU0NDTVAJCT0gNCwKCU9ETV9TRUNfV0VQMTA0CQk9IDUsCglPRE1fV0VQX1dQQV9NSVhFRCAgIAk9IDYsIC8qICBXRVAgKyBXUEEgKi8KCU9ETV9TRUNfU01TNAkJPSA3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0JXICovCmVudW0gb2RtX2J3IHsKCU9ETV9CVzIwTQkJPSAwLAoJT0RNX0JXNDBNCQk9IDEsCglPRE1fQlc4ME0JCT0gMiwKCU9ETV9CVzE2ME0JCT0gMywKCU9ETV9CVzEwTQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX0JPQVJEX1RZUEUgKi8KZW51bSBvZG1fYm9hcmRfdHlwZSB7CglPRE1fQk9BUkRfTk9STUFMCT0gMCwKCU9ETV9CT0FSRF9ISUdIUFdSCT0gMSwKCU9ETV9CT0FSRF9NSU5JQ0FSRAk9IDIsCglPRE1fQk9BUkRfU0xJTQkJPSAzLAoJT0RNX0JPQVJEX0NPTUJPCQk9IDQsCn07CgovKiAgT0RNX0NNTklORk9fT05FX1BBVEhfQ0NBICovCmVudW0gb2RtX2NjYV9wYXRoIHsKCU9ETV9DQ0FfMlIJCT0gMCwKCU9ETV9DQ0FfMVJfQQkJPSAxLAoJT0RNX0NDQV8xUl9CCQk9IDIsCn07CgpzdHJ1Y3Qgb2RtX3JhX2luZm8gewoJdTggUmF0ZUlEOwoJdTMyIFJhdGVNYXNrOwoJdTMyIFJBVXNlUmF0ZTsKCXU4IFJhdGVTR0k7Cgl1OCBSc3NpU3RhUkE7Cgl1OCBQcmVSc3NpU3RhUkE7Cgl1OCBTR0lFbmFibGU7Cgl1OCBEZWNpc2lvblJhdGU7Cgl1OCBQcmVSYXRlOwoJdTggSGlnaGVzdFJhdGU7Cgl1OCBMb3dlc3RSYXRlOwoJdTMyIE5zY1VwOwoJdTMyIE5zY0Rvd247Cgl1MTYgUlRZWzVdOwoJdTMyIFRPVEFMOwoJdTE2IERST1A7Cgl1OCBBY3RpdmU7Cgl1MTYgUnB0VGltZTsKCXU4IFJBV2FpdGluZ0NvdW50ZXI7Cgl1OCBSQVBlbmRpbmdDb3VudGVyOwoJdTggUFRBY3RpdmU7CS8qICBvbiBvciBvZmYgKi8KCXU4IFBUVHJ5U3RhdGU7CS8qICAwIHRyeWluZyBzdGF0ZSwgMSBmb3IgZGVjaXNpb24gc3RhdGUgKi8KCXU4IFBUU3RhZ2U7CS8qICAwfjYgKi8KCXU4IFBUU3RvcENvdW50OwkvKiBTdG9wIFBUIGNvdW50ZXIgKi8KCXU4IFBUUHJlUmF0ZTsJLyogIGlmIHJhdGUgY2hhbmdlIGRvIFBUICovCgl1OCBQVFByZVJzc2k7CS8qICBpZiBSU1NJIGNoYW5nZSA1JSBkbyBQVCAqLwoJdTggUFRNb2RlU1M7CS8qICBkZWNpZGUgd2hpdGNoIHJhdGUgc2hvdWxkIGRvIFBUICovCgl1OCBSQXN0YWdlOwkvKiAgU3RhZ2VSQSwgZGVjaWRlIGhvdyBtYW55IHRpbWVzIFJBIHdpbGwgYmUgZG9uZQoJCQkgKiBiZXR3ZWVuIFBUICovCgl1OCBQVFNtb290aEZhY3RvcjsKfTsKCnN0cnVjdCBpamtfbWF0cml4X3JlZ3Nfc2V0IHsKCWJvb2wJYklRS0RvbmU7CglzMzIJVmFsdWVbMV1bSVFLX01hdHJpeF9SRUdfTlVNXTsKfTsKCnN0cnVjdCBvZG1fcmZfY2FsIHsKCS8qIGZvciB0eCBwb3dlciB0cmFja2luZyAqLwoJdTMyCVJlZ0EyNDsgLyogIGZvciBUZW1wQ0NLICovCglzMzIJUmVnRTk0OwoJczMyCVJlZ0U5QzsKCXMzMglSZWdFQjQ7CglzMzIJUmVnRUJDOwoKCXU4CVRYUG93ZXJjb3VudDsKCWJvb2wJYlRYUG93ZXJUcmFja2luZ0luaXQ7Cglib29sCWJUWFBvd2VyVHJhY2tpbmc7Cgl1OAlUeFBvd2VyVHJhY2tDb250cm9sOyAvKiBmb3IgbXAgbW9kZSwgdHVybiBvZmYgdHhwd3J0cmFja2luZwoJCQkJICAgICAgKiBhcyBkZWZhdWx0ICovCgl1OAlUTV9UcmlnZ2VyOwoJdTgJSW50ZXJuYWxQQTVHWzJdOwkvKiBwYXRoQSAvIHBhdGhCICovCgoJdTgJVGhlcm1hbE1ldGVyWzJdOyAgICAvKiBUaGVybWFsTWV0ZXIsIGluZGV4IDAgZm9yIFJGSUMwLAoJCQkJICAgICAqIGFuZCAxIGZvciBSRklDMSAqLwoJdTgJVGhlcm1hbFZhbHVlOwoJdTgJVGhlcm1hbFZhbHVlX0xDSzsKCXU4CVRoZXJtYWxWYWx1ZV9JUUs7Cgl1OAlUaGVybWFsVmFsdWVfRFBLOwoJdTgJVGhlcm1hbFZhbHVlX0FWR1tBVkdfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0FWR19pbmRleDsKCXU4CVRoZXJtYWxWYWx1ZV9SeEdhaW47Cgl1OAlUaGVybWFsVmFsdWVfQ3J5c3RhbDsKCXU4CVRoZXJtYWxWYWx1ZV9EUEtzdG9yZTsKCXU4CVRoZXJtYWxWYWx1ZV9EUEt0cmFjazsKCWJvb2wJVHhQb3dlclRyYWNraW5nSW5Qcm9ncmVzczsKCWJvb2wJYkRQS2VuYWJsZTsKCglib29sCWJSZWxvYWR0eHBvd2VyaW5kZXg7Cgl1OAliUmZQaUVuYWJsZTsKCXUzMglUWFBvd2VyVHJhY2tpbmdDYWxsYmFja0NudDsgLyogY29zYSBhZGQgZm9yIGRlYnVnICovCgoJdTgJYkNDS2luQ0gxNDsKCXU4CUNDS19pbmRleDsKCXU4CU9GRE1faW5kZXhbMl07Cglib29sIGJEb25lVHhwb3dlcjsKCgl1OAlUaGVybWFsVmFsdWVfSFBbSFBfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0hQX2luZGV4OwoJc3RydWN0IGlqa19tYXRyaXhfcmVnc19zZXQgSVFLTWF0cml4UmVnU2V0dGluZ1tJUUtfTWF0cml4X1NldHRpbmdzX05VTV07CgoJdTgJRGVsdGFfSVFLOwoJdTgJRGVsdGFfTENLOwoKCS8qIGZvciBJUUsgKi8KCXUzMglSZWdDMDQ7Cgl1MzIJUmVnODc0OwoJdTMyCVJlZ0MwODsKCXUzMglSZWdCNjg7Cgl1MzIJUmVnQjZDOwoJdTMyCVJlZzg3MDsKCXUzMglSZWc4NjA7Cgl1MzIJUmVnODY0OwoKCWJvb2wJYklRS0luaXRpYWxpemVkOwoJYm9vbAliTENLSW5Qcm9ncmVzczsKCWJvb2wJYkFudGVubmFEZXRlY3RlZDsKCXUzMglBRERBX2JhY2t1cFtJUUtfQUREQV9SRUdfTlVNXTsKCXUzMglJUUtfTUFDX2JhY2t1cFtJUUtfTUFDX1JFR19OVU1dOwoJdTMyCUlRS19CQl9iYWNrdXBfcmVjb3Zlcls5XTsKCXUzMglJUUtfQkJfYmFja3VwW0lRS19CQl9SRUdfTlVNXTsKCgkvKiBmb3IgQVBLICovCgl1MzIJQVBLb3V0cHV0WzJdWzJdOyAvKiBwYXRoIEEvQjsgb3V0cHV0MV8xYS9vdXRwdXQxXzJhICovCgl1OAliQVBLZG9uZTsKCXU4CWJBUEtUaGVybWFsTWV0ZXJJZ25vcmU7Cgl1OAliRFBkb25lOwoJdTgJYkRQUGF0aEFPSzsKCXU4CWJEUFBhdGhCT0s7Cn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKc3RydWN0IGZhc3RfYW50X3RyYWluIHsKCXU4CUJzc2lkWzZdOwoJdTgJYW50c2VsX3J4X2tlZXBfMDsKCXU4CWFudHNlbF9yeF9rZWVwXzE7Cgl1OAlhbnRzZWxfcnhfa2VlcF8yOwoJdTMyCWFudFN1bVJTU0lbN107Cgl1MzIJYW50UlNTSWNudFs3XTsKCXUzMglhbnRBdmVSU1NJWzddOwoJdTgJRkFUX1N0YXRlOwoJdTMyCVRyYWluSWR4OwoJdTgJYW50c2VsX2FbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2JbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2NbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU1haW5BbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglBdXhBbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglNYWluQW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQXV4QW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlSeElkbGVBbnQ7Cglib29sCWJCZWNvbWVMaW5rZWQ7Cn07CgplbnVtIGZhdF9zdGF0ZSB7CglGQVRfTk9STUFMX1NUQVRFCQk9IDAsCglGQVRfVFJBSU5JTkdfU1RBVEUJCT0gMSwKfTsKCmVudW0gYW50X2Rpdl90eXBlIHsKCU5PX0FOVERJVgkJCT0gMHhGRiwKCUNHX1RSWF9IV19BTlRESVYJCT0gMHgwMSwKCUNHQ1NfUlhfSFdfQU5URElWCQk9IDB4MDIsCglGSVhFRF9IV19BTlRESVYJCQk9IDB4MDMsCglDR19UUlhfU01BUlRfQU5URElWCQk9IDB4MDQsCglDR0NTX1JYX1NXX0FOVERJVgkJPSAweDA1LAp9OwoKLyogQ29weSBmcm9tIFNENCBkZWZpbmVkIHN0cnVjdHVyZS4gV2UgdXNlIHRvIHN1cHBvcnQgUEhZIERNIGludGVncmF0aW9uLiAqLwpzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCB7CgkvKiAJQWRkIGZvciBkaWZmZXJlbnQgdGVhbSB1c2UgdGVtcG9yYXJpbHkgKi8KCXN0cnVjdCBhZGFwdGVyICpBZGFwdGVyOwkvKiAgRm9yIENFL05JQyB0ZWFtICovCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKnByaXY7CS8qICBGb3IgQVAvQURTTCB0ZWFtICovCgkvKiAgV0hlbiB5b3UgdXNlIGFib3ZlIHBvaW50ZXJzLCB0aGV5IG11c3QgYmUgaW5pdGlhbGl6ZWQuICovCglib29sCW9kbV9yZWFkeTsKCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKmZha2VfcHJpdjsKCXU2NAlEZWJ1Z0NvbXBvbmVudHM7Cgl1MzIJRGVidWdMZXZlbDsKCi8qICBPRE0gSEFORExFLCBEUklWRVIgTkVFRFMgTk9UIFRPIEhPT0stLS0tLS0gKi8KCWJvb2wJYkNja0hpZ2hQb3dlcjsKCXU4CVJGUGF0aFJ4RW5hYmxlOwkJLyogIE9ETV9DTU5JTkZPX1JGUEFUSF9FTkFCTEUgKi8KCXU4CUNvbnRyb2xDaGFubmVsOwovKiAgT0RNIEhBTkRMRSwgRFJJVkVSIE5FRURTIE5PVCBUTyBIT09LLS0tLS0tICovCgovKiAxICBDT01NT04gSU5GT1JNQVRJT04gKi8KCS8qICBJbml0IFZhbHVlICovCi8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCS8qICBPRE0gUGxhdGZvcm0gaW5mbyBBUC9BRFNML0NFL01QID0gMS8yLzMvNCAqLwoJdTgJU3VwcG9ydFBsYXRmb3JtOwoJLyogIE9ETSBTdXBwb3J0IEFiaWxpdHkgRElHL1JBVFIvVFhfUFdSX1RSQUNLLyChS6FLID0gMS8yLzMvoUsgKi8KCXUzMglTdXBwb3J0QWJpbGl0eTsKCS8qICBPRE0gUENJRS9VU0IvU0RJTy9HU1BJID0gMC8xLzIvMyAqLwoJdTgJU3VwcG9ydEludGVyZmFjZTsKCS8qICBPRE0gY29tcG9zaXRlIG9yIGluZGVwZW5kZW50LiBCaXQgb3JpZW50ZWQvIDkyQys5MkQrIC4uLi4gb3IgYW55CgkgKiAgb3RoZXIgdHlwZSA9IDEvMi8zLy4uLiAqLwoJdTMyCVN1cHBvcnRJQ1R5cGU7CgkvKiAgQ3V0IFZlcnNpb24gVGVzdENoaXAvQS1jdXQvQi1jdXQuLi4gPSAwLzEvMi8zLy4uLiAqLwoJdTgJQ3V0VmVyc2lvbjsKCS8qICBSRiBUeXBlIDRUNFIvM1QzUi8yVDJSLzFUMlIvMVQxUi8uLi4gKi8KCXU4CVJGVHlwZTsKCS8qICBCb2FyZCBUeXBlIE5vcm1hbC9IaWdoUG93ZXIvTWluaUNhcmQvU0xJTS9Db21iby8uID0gMC8xLzIvMy80Ly4gKi8KCXU4CUJvYXJkVHlwZTsKCS8qICB3aXRoIGV4dGVybmFsIExOQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRMTkE7CgkvKiAgd2l0aCBleHRlcm5hbCBQQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRQQTsKCS8qICB3aXRoIGV4dGVybmFsIFRSU1cgIE5PL1llcyA9IDAvMSAqLwoJdTgJRXh0VFJTVzsKCXU4CVBhdGNoSUQ7IC8qIEN1c3RvbWVyIElEICovCglib29sCWJJbkhjdFRlc3Q7Cglib29sCWJXSUZJVGVzdDsKCglib29sCWJEdWFsTWFjU21hcnRDb25jdXJyZW50OwoJdTMyCUJLX1N1cHBvcnRBYmlsaXR5OwoJdTgJQW50RGl2VHlwZTsKLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoKCS8qICBEeW5hbWljIFZhbHVlICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgoJdTgJdThfdGVtcDsKCWJvb2wJYm9vbF90ZW1wOwoJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXJfdGVtcDsKCgkvKiAgTUFDIFBIWSBNb2RlIFNNU1AvRE1TUC9ETURQID0gMC8xLzIgKi8KCXU4CSpwTWFjUGh5TW9kZTsKCS8qIFRYIFVuaWNhc3QgYnl0ZSBjb3VudCAqLwoJdTY0CSpwTnVtVHhCeXRlc1VuaWNhc3Q7CgkvKiBSWCBVbmljYXN0IGJ5dGUgY291bnQgKi8KCXU2NAkqcE51bVJ4Qnl0ZXNVbmljYXN0OwoJLyogIFdpcmVsZXNzIG1vZGUgQi9HL0EvTiA9IEJJVDAvQklUMS9CSVQyL0JJVDMgKi8KCXU4CSpwV2lyZWxlc3NNb2RlOyAvKiBPRE1fV0lSRUxFU1NfTU9ERV9FICovCgkvKiAgRnJlcXVlbmNlIGJhbmQgMi40Ry81RyA9IDAvMSAqLwoJdTgJKnBCYW5kVHlwZTsKCS8qICBTZWNvbmRhcnkgY2hhbm5lbCBvZmZzZXQgZG9uJ3RfY2FyZS9iZWxvdy9hYm92ZSA9IDAvMS8yICovCgl1OAkqcFNlY0NoT2Zmc2V0OwoJLyogIFNlY3VyaXR5IG1vZGUgT3Blbi9XRVAvQUVTL1RLSVAgPSAwLzEvMi8zICovCgl1OAkqcFNlY3VyaXR5OwoJLyogIEJXIGluZm8gMjBNLzQwTS84ME0gPSAwLzEvMiAqLwoJdTgJKnBCYW5kV2lkdGg7CgkvKiAgQ2VudHJhbCBjaGFubmVsIGxvY2F0aW9uIENoMS9DaDIvLi4uLiAqLwoJdTgJKnBDaGFubmVsOwkvKiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIDkyRCBETVNQICovCgoJYm9vbAkqcGJHZXRWYWx1ZUZyb21PdGhlck1hYzsKCXN0cnVjdCBhZGFwdGVyICoqcEJ1ZGR5QWRhcHRlcjsKCWJvb2wJKnBiTWFzdGVyT2ZETVNQOyAvKiBNQUMwOiBtYXN0ZXIsIE1BQzE6IHNsYXZlICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIFN0YXR1cyAqLwoJYm9vbAkqcGJTY2FuSW5Qcm9jZXNzOwoJYm9vbAkqcGJQb3dlclNhdmluZzsKCS8qICBDQ0EgUGF0aCAyLXBhdGgvcGF0aC1BL3BhdGgtQiA9IDAvMS8yOyB1c2luZyBPRE1fQ0NBX1BBVEhfRS4gKi8KCXU4CSpwT25lUGF0aENDQTsKCS8qIHBNZ250SW5mby0+QW50ZW5uYVRlc3QgKi8KCXU4CSpwQW50ZW5uYVRlc3Q7Cglib29sCSpwYk5ldF9jbG9zZWQ7Ci8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgkvKiAgKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCWJvb2wJYldJRklfRGlyZWN0OwoJYm9vbAliV0lGSV9EaXNwbGF5OwoJYm9vbAliTGlua2VkOwoJdTgJUlNTSV9NaW47Cgl1OAlJbnRlcmZhY2VJbmRleDsgLyogIEFkZCBmb3IgOTJEICBkdWFsIE1BQzogMC0tTWFjMCAxLS1NYWMxICovCglib29sCWJJc01QQ2hpcDsKCWJvb2wJYk9uZUVudHJ5T25seTsKCS8qICBDb21tb24gaW5mbyBmb3IgQlRETSAqLwoJYm9vbAliQnREaXNhYmxlZDsJLyogIEJUIGlzIGRpc2FibGVkICovCglib29sCWJCdEhzT3BlcmF0aW9uOwkvKiAgQlQgSFMgbW9kZSBpcyB1bmRlciBwcm9ncmVzcyAqLwoJdTgJYnRIc0RpZ1ZhbDsJLyogIHVzZSBCVCByc3NpIHRvIGRlY2lkZSB0aGUgRElHIHZhbHVlICovCglib29sCWJCdERpc2FibGVFZGNhVHVyYm87LyogVW5kZXIgc29tZSBjb25kaXRpb24sIGRvbid0IGVuYWJsZSB0aGUKCQkJCSAgICAgKiBFRENBIFR1cmJvICovCglib29sCWJCdEJ1c3k7CQkJLyogIEJUIGlzIGJ1c3kuICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCgoJLyogMiBEZWZpbmUgU1RBIGluZm8uICovCgkvKiAgX09ETV9TVEFfSU5GTyAqLwoJLyogIEZvciBNUCwgd2UgbmVlZCB0byByZWR1Y2Ugb25lIGFycmF5IHBvaW50ZXIgZm9yIGRlZmF1bHQgcG9ydC4/PyAqLwoJc3RydWN0IHN0YV9pbmZvICpwT0RNX1N0YUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoKCXUxNglDdXJybWluUnB0VGltZTsKCXN0cnVjdCBvZG1fcmFfaW5mbyBSQUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOyAvKiBVc2UgTWFjSUQgYXMKCQkJKiBhcnJheSBpbmRleC4gU1RBIE1hY0lEPTAsCgkJCSogVldpRmkgQ2xpZW50IE1hY0lEPXsxLCBPRE1fQVNTT0NJQVRFX0VOVFJZX05VTS0xfSAqLwoJLyogICovCgkvKiAgMjAxMi8wMi8xNCBNSCBBZGQgdG8gc2hhcmUgODhFIHJhIHdpdGggb3RoZXIgU1cgdGVhbS4gKi8KCS8qICBXZSBuZWVkIHRvIGNvbGVsY3QgYWxsIHN1cHBvcnQgYWJpbGl0IHRvIGEgcHJvcGVyIGFyZWEuICovCgkvKiAgKi8KCWJvb2wJUmFTdXBwb3J0ODhFOwoKCS8qICBEZWZpbmUgLi4uLi4uLi4uLi4gKi8KCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9waHlfZGJnX2luZm8gUGh5RGJnSW5mbzsKCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9tYWNfc3RhdHVzX2luZm8gKnBNYWNJbmZvOwoKCS8qICBEaWZmZXJlbnQgVGVhbSBpbmRlcGVuZHQgc3RydWN0dXJlPz8gKi8KCgkvKiBPRE0gU3RydWN0dXJlICovCglzdHJ1Y3QgZmFzdF9hbnRfdHJhaW4gRE1fRmF0VGFibGU7CglzdHJ1Y3QgcnR3X2RpZwlETV9EaWdUYWJsZTsKCXN0cnVjdCBydGxfcHMJRE1fUFNUYWJsZTsKCXN0cnVjdCByeF9ocGMJRE1fUlhIUF9UYWJsZTsKCXN0cnVjdCBmYWxzZV9hbGFybV9zdGF0cyBGYWxzZUFsbUNudDsKCXN0cnVjdCBmYWxzZV9hbGFybV9zdGF0cyBGbGFzZUFsbUNudEJ1ZGR5QWRhcHRlcjsKCXN0cnVjdCBzd19hbnRfc3dpdGNoIERNX1NXQVRfVGFibGU7Cglib29sCQlSU1NJX3Rlc3Q7CgoJc3RydWN0IGVkY2FfdHVyYm8gRE1fRURDQV9UYWJsZTsKCXUzMgkJV01NRURDQV9CRTsKCS8qICBDb3B5IGZyb20gU0Q0IHN0cnVjdHVyZSAqLwoJLyogICovCgkvKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCS8qICAqLwoKCWJvb2wJKnBiRHJpdmVyU3RvcHBlZDsKCWJvb2wJKnBiRHJpdmVySXNHb2luZ1RvUG5wU2V0UG93ZXJTbGVlcDsKCWJvb2wJKnBpbml0X2FkcHRfaW5fcHJvZ3Jlc3M7CgoJLyogUFNEICovCglib29sCWJVc2VyQXNzaWduTGV2ZWw7CglzdHJ1Y3QgdGltZXJfbGlzdCBQU0RUaW1lcjsKCXU4CVJTU0lfQlQ7CQkJLyogY29tZSBmcm9tIEJUICovCglib29sCWJQU0RpblByb2Nlc3M7Cglib29sCWJETUluaXRpYWxHYWluRW5hYmxlOwoKCS8qIGZvciByYXRlIGFkYXB0aXZlLCBpbiBmYWN0LCAgODhjLzkyYyBmdyB3aWxsIGhhbmRsZSB0aGlzICovCgl1OAliVXNlUkFNYXNrOwoKCXN0cnVjdCBvZG1fcmF0ZV9hZGFwdCBSYXRlQWRhcHRpdmU7CgoJc3RydWN0IG9kbV9yZl9jYWwgUkZDYWxpYnJhdGVJbmZvOwoKCS8qICBUWCBwb3dlciB0cmFja2luZyAqLwoJdTgJQmJTd2luZ0lkeE9mZG07Cgl1OAlCYlN3aW5nSWR4T2ZkbUN1cnJlbnQ7Cgl1OAlCYlN3aW5nSWR4T2ZkbUJhc2U7Cglib29sCUJiU3dpbmdGbGFnT2ZkbTsKCXU4CUJiU3dpbmdJZHhDY2s7Cgl1OAlCYlN3aW5nSWR4Q2NrQ3VycmVudDsKCXU4CUJiU3dpbmdJZHhDY2tCYXNlOwoJYm9vbAlCYlN3aW5nRmxhZ0NjazsKCXU4CSptcF9tb2RlOwoJLyogIE9ETSBzeXN0ZW0gcmVzb3VyY2UuICovCgoJLyogIE9ETSByZWxhdGl2ZSB0aW1lLiAqLwoJc3RydWN0IHRpbWVyX2xpc3QgUGF0aERpdlN3aXRjaFRpbWVyOwoJLyogMjAxMS4wOS4yNyBhZGQgZm9yIFBhdGggRGl2ZXJzaXR5ICovCglzdHJ1Y3QgdGltZXJfbGlzdCBDQ0tQYXRoRGl2ZXJzaXR5VGltZXI7CglzdHJ1Y3QgdGltZXJfbGlzdCBGYXN0QW50VHJhaW5pbmdUaW1lcjsKfTsJCS8qICBETV9EeW5hbWljX01lY2hhbmlzbV9TdHJ1Y3R1cmUgKi8KCiNkZWZpbmUgT0RNX1JGX1BBVEhfTUFYIDMKCmVudW0gT0RNX1JGX0NPTlRFTlQgewoJb2RtX3JhZGlvYV90eHQgPSAweDEwMDAsCglvZG1fcmFkaW9iX3R4dCA9IDB4MTAwMSwKCW9kbV9yYWRpb2NfdHh0ID0gMHgxMDAyLAoJb2RtX3JhZGlvZF90eHQgPSAweDEwMDMKfTsKCi8qICBTdGF0dXMgY29kZSAqLwplbnVtIHJ0X3N0YXR1cyB7CglSVF9TVEFUVVNfU1VDQ0VTUywKCVJUX1NUQVRVU19GQUlMVVJFLAoJUlRfU1RBVFVTX1BFTkRJTkcsCglSVF9TVEFUVVNfUkVTT1VSQ0UsCglSVF9TVEFUVVNfSU5WQUxJRF9DT05URVhULAoJUlRfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSLAoJUlRfU1RBVFVTX05PVF9TVVBQT1JULAoJUlRfU1RBVFVTX09TX0FQSV9GQUlMRUQsCn07CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBESUcgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgplbnVtIGRtX2RpZ19vcCB7CglSVF9UWVBFX1RIUkVTSF9ISUdICT0gMCwKCVJUX1RZUEVfVEhSRVNIX0xPVwk9IDEsCglSVF9UWVBFX0JBQ0tPRkYJCT0gMiwKCVJUX1RZUEVfUlhfR0FJTl9NSU4JPSAzLAoJUlRfVFlQRV9SWF9HQUlOX01BWAk9IDQsCglSVF9UWVBFX0VOQUJMRQkJPSA1LAoJUlRfVFlQRV9ESVNBQkxFCQk9IDYsCglESUdfT1BfVFlQRV9NQVgKfTsKCiNkZWZpbmUJCURNX0RJR19USFJFU0hfSElHSAk0MAojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0xPVwkzNQoKI2RlZmluZQkJRE1fU0NBTl9SU1NJX1RICQkweDE0IC8qIHNjYW4gcmV0dXJuIGlzc3VlIGZvciBMQyAqLwoKCiNkZWZpbmUJCURNX2ZhbHNlX0FMQVJNX1RIUkVTSF9MT1cJNDAwCiNkZWZpbmUJCURNX2ZhbHNlX0FMQVJNX1RIUkVTSF9ISUdICTEwMDAKCiNkZWZpbmUJCURNX0RJR19NQVhfTklDCQkJMHg0ZQojZGVmaW5lCQlETV9ESUdfTUlOX05JQwkJCTB4MWUgLyogMHgyMi8weDFjICovCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQCQkJMHgzMgojZGVmaW5lCQlETV9ESUdfTUlOX0FQCQkJMHgyMAoKI2RlZmluZQkJRE1fRElHX01BWF9OSUNfSFAJCTB4NDYKI2RlZmluZQkJRE1fRElHX01JTl9OSUNfSFAJCTB4MmUKCiNkZWZpbmUJCURNX0RJR19NQVhfQVBfSFAJCTB4NDIKI2RlZmluZQkJRE1fRElHX01JTl9BUF9IUAkJMHgzMAoKLyogdml2aSA5MmMmOTJkIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbiwgMjAxMTA1MDQgKi8KLyogdGhpcyBpcyBmb3IgOTJjICovCiNkZWZpbmUJCURNX0RJR19GQV9USDAJCQkweDIwMC8qIDB4MjAgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMQkJCTB4MzAwLyogMHgxMDAgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMgkJCTB4NDAwLyogMHgyMDAgKi8KLyogdGhpcyBpcyBmb3IgOTJkICovCiNkZWZpbmUJCURNX0RJR19GQV9USDBfOTJECQkweDEwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgxXzkyRAkJMHg0MDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMl85MkQJCTB4NjAwCgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NQVgJCTEyCiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX01JTgkJLTQKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJMTAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEFHQyBSWCBIaWdoIFBvd2VyIE1vZGUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJICBMTkFfTG93X0dhaW5fMQkJMHg2NAojZGVmaW5lCSAgTE5BX0xvd19HYWluXzIJCTB4NUEKI2RlZmluZQkgIExOQV9Mb3dfR2Fpbl8zCQkweDU4CgojZGVmaW5lCSAgRkFfUlhIUF9USDEJCQk1MDAwCiNkZWZpbmUJICBGQV9SWEhQX1RIMgkJCTE1MDAKI2RlZmluZQkgIEZBX1JYSFBfVEgzCQkJODAwCiNkZWZpbmUJICBGQV9SWEhQX1RINAkJCTYwMAojZGVmaW5lCSAgRkFfUlhIUF9USDUJCQk1MDAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEVEQ0EgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBEeW5hbWljIFR4IFBvd2VyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBEeW5hbWljIFR4IFBvd2VyIENvbnRyb2wgVGhyZXNob2xkICovCiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIJNzQKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMQk2NwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9BUAkJMHgzRgoKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTm9ybWFsCQkwCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0xldmVsMQkJMQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDIJCTIKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfQlQxCQkzCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMgkJNAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xNQkJNQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8zNQkJNgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF81MAkJNwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF83MAkJOAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xMDAJCTkKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIFJhdGUgQWRhcHRpdmUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURNX1JBVFJfU1RBX0lOSVQJCTAKI2RlZmluZQkJRE1fUkFUUl9TVEFfSElHSAkJMQojZGVmaW5lCQlETV9SQVRSX1NUQV9NSURETEUJCTIKI2RlZmluZQkJRE1fUkFUUl9TVEFfTE9XCQkJMwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQkIgUG93ZXIgU2F2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgplbnVtIGRtXzFyX2NjYSB7CglDQ0FfMVIgPSAwLAoJQ0NBXzJSID0gMSwKCUNDQV9NQVggPSAyLAp9OwoKZW51bSBkbV9yZiB7CglSRl9TYXZlID0gMCwKCVJGX05vcm1hbCA9IDEsCglSRl9NQVggPSAyLAp9OwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQW50ZW5uYSBEaXZlcnNpdHkgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmVudW0gZG1fc3dhcyB7CglBbnRlbm5hX0EgPSAxLAoJQW50ZW5uYV9CID0gMiwKCUFudGVubmFfTUFYID0gMywKfTsKCi8qICBNYXhpbWFsIG51bWJlciBvZiBhbnRlbm5hIGRldGVjdGlvbiBtZWNoYW5pc20gbmVlZHMgdG8gcGVyZm9ybS4gKi8KI2RlZmluZQlNQVhfQU5URU5OQV9ERVRFQ1RJT05fQ05UCTEwCgovKiAgRXh0ZXJuIEdsb2JhbCBWYXJpYWJsZXMuICovCiNkZWZpbmUJT0ZETV9UQUJMRV9TSVpFXzkyQwkzNwojZGVmaW5lCU9GRE1fVEFCTEVfU0laRV85MkQJNDMKI2RlZmluZQlDQ0tfVEFCTEVfU0laRQkJMzMKCmV4dGVybgl1MzIgT0ZETVN3aW5nVGFibGVbT0ZETV9UQUJMRV9TSVpFXzkyRF07CmV4dGVybgl1OCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzW0NDS19UQUJMRV9TSVpFXVs4XTsKZXh0ZXJuCXU4IENDS1N3aW5nVGFibGVfQ2gxNFtDQ0tfVEFCTEVfU0laRV1bOF07CgovKiAgY2hlY2sgU3RhIHBvaW50ZXIgdmFsaWQgb3Igbm90ICovCiNkZWZpbmUgSVNfU1RBX1ZBTElEKHBTdGEpCQkocFN0YSkKLyogIDIwMTAwNTE0IEpvc2VwaDogQWRkIGRlZmluaXRpb24gZm9yIGFudGVubmEgc3dpdGNoaW5nIHRlc3QgYWZ0ZXIgbGluay4gKi8KLyogIFRoaXMgaW5kaWNhdGVzIHR3byBkaWZmZXJlbnQgdGhlIHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvIHRoZQogKiAgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluCiAqICBTV0FXX1NURVBfUEVBSyAqLwovKiAgd2l0aCBvcmlnaW5hbCBSU1NJIHRvIGRldGVybWluZSBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGFudGVubmEuICovCiNkZWZpbmUgU1dBV19TVEVQX1BFQUsJCTAKI2RlZmluZSBTV0FXX1NURVBfREVURVJNSU5FCTEKCiNkZWZpbmUgZG1fQ2hlY2tUWFBvd2VyVHJhY2tpbmcgT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrCiNkZWZpbmUgZG1fUkZfU2F2aW5nCU9ETV9SRl9TYXZpbmcKCnZvaWQgT0RNX1JGX1NhdmluZyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggYkZvcmNlSW5Ob3JtYWwpOwp2b2lkIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7CnZvaWQgb2RtX0RJR2J5UlNTSV9MUFMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIE9ETV9Xcml0ZV9DQ0tfQ0NBX1RocmVzKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1OCBDdXJDQ0tfQ0NBVGhyZXMpOwpib29sIE9ETV9SQVN0YXRlQ2hlY2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHMzMiBSU1NJLAoJCSAgICAgIGJvb2wgYkZvcmNlVXBkYXRlLCB1OCAqcFJBVFJTdGF0ZSk7CnUzMiBDb252ZXJ0VG9fZEIodTMyIFZhbHVlKTsKdTMyIE9ETV9HZXRfUmF0ZV9CaXRtYXAoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHUzMiBtYWNpZCwKCQkJdTMyIHJhX21hc2ssIHU4IHJzc2lfbGV2ZWwpOwp2b2lkIE9ETV9DbW5JbmZvSW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwKCQkgICAgIGVudW0gb2RtX2NvbW1vbl9pbmZvX2RlZiBDbW5JbmZvLCB1MzIgVmFsdWUpOwp2b2lkIE9ETV9DbW5JbmZvVXBkYXRlKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1MzIgQ21uSW5mbywgdTY0IFZhbHVlKTsKdm9pZCBPRE1fQ21uSW5mb0hvb2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywgdm9pZCAqcFZhbHVlKTsKdm9pZCBPRE1fQ21uSW5mb1B0ckFycmF5SG9vayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwKCQkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywKCQkJICAgICB1MTYgSW5kZXgsIHZvaWQgKnBWYWx1ZSk7CnZvaWQgT0RNX0RNSW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7CnZvaWQgT0RNX0RNV2F0Y2hkb2coc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIE9ETV9Xcml0ZV9ESUcoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHU4IEN1cnJlbnRJR0kpOwoKI2VuZGlmCg==