LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmCV9fSEFMRE1PVVRTUkNfSF9fCiNkZWZpbmUgX19IQUxETU9VVFNSQ19IX18KCi8qICAqLwovKiAgRGVmaW5pdGlvbiAqLwovKiAgKi8KLyogICovCi8qICAyMDExLzA5LzIyIE1IIERlZmluZSBhbGwgdGVhbSBzdXBwcnQgYWJpbGl0eS4gKi8KLyogICovCgovKiAgKi8KLyogIDIwMTEvMDkvMjIgTUggRGVmaW5lIGZvciBhbGwgdGVhbXMuIFBsZWFzZSBEZWZpbmUgdGhlIGNvbnN0YW4gaW4geW91ciBwcmVjb21wIGhlYWRlci4gKi8KLyogICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQVAJCQkwICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQURTTAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9DRQkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9NUAkJCTEgKi8KCiNkZWZpbmUJVFBfTU9ERQkJMAojZGVmaW5lCVJTU0lfTU9ERQkJMQojZGVmaW5lCVRSQUZGSUNfTE9XCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJMQoKCi8qICAqLwovKiAzIFR4IFBvd2VyIFRyYWNraW5nICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRFBLX0RFTFRBX01BUFBJTkdfTlVNCTEzCiNkZWZpbmUJCWluZGV4X21hcHBpbmdfSFBfTlVNCTE1CgoKLyogICovCi8qIDMgUFNEIEhhbmRsZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKI2RlZmluZQlBRkhfUFNECQkxCS8qIDA6bm9ybWFsIFBTRCBzY2FuLCAxOiBvbmx5IGRvIDIwIHB0cyBQU0QgKi8KI2RlZmluZQlNT0RFXzQwTQkJMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITUlOCQkyMCAgIC8qICBNaW5pbXVtIGNoYW5uZWwgbnVtYmVyIGZvciBCVCBBRkggKi8KI2RlZmluZQlTSVJfU1RFUF9TSVpFCTMKI2RlZmluZSAgIFNtb290aF9TaXplXzEJCTUKI2RlZmluZQlTbW9vdGhfVEhfMQkzCiNkZWZpbmUgICBTbW9vdGhfU2l6ZV8yCQkxMAojZGVmaW5lCVNtb290aF9USF8yCTQKI2RlZmluZSAgIFNtb290aF9TaXplXzMJCTIwCiNkZWZpbmUJU21vb3RoX1RIXzMJNAojZGVmaW5lICAgU21vb3RoX1N0ZXBfU2l6ZSA1CiNkZWZpbmUJQWRhcHRpdmVfU0lSCTEKI2RlZmluZQlQU0RfUkVTQ0FOCQk0CiNkZWZpbmUJUFNEX1NDQU5fSU5URVJWQUwJNzAwIC8qIG1zICovCgovKiA4NzIzQSBIaWdoIFBvd2VyIElHSSBTZXR0aW5nICovCiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORAkweDIyCiNkZWZpbmUgRE1fRElHX0dtb2RlX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORCAweDI4CiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX1RIUkVTSE9MRAkweDNhCgovKiAgTFBTIGRlZmluZSAqLwojZGVmaW5lIERNX0RJR19GQV9USDBfTFBTCQkJCTQgLyogIDQgaW4gbHBzICovCiNkZWZpbmUgRE1fRElHX0ZBX1RIMV9MUFMJCQkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkJCTMwIC8qICAzMCBscHMgKi8KI2RlZmluZSBSU1NJX09GRlNFVF9ESUcJCQkJCTB4MDU7CgovKiBBTlQgVGVzdCAqLwojZGVmaW5lCQkJQU5UVEVTVEFMTAkJMHgwMAkJLyogQW50IEEgb3IgQiB3aWxsIGJlIFRlc3RpbmcgKi8KI2RlZmluZQkJQU5UVEVTVEEJCTB4MDEJCS8qIEFudCBBIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lCQlBTlRURVNUQgkJMHgwMgkJLyogQW50IEIgd2lsbCBiZSB0ZXN0aW5nICovCgoKLyogICovCi8qICBzdHJ1Y3R1cmUgYW5kIGRlZmluZSAqLwovKiAgKi8KCnN0cnVjdCAgZGlnX3QgewoJdTgJCURpZ19FbmFibGVfRmxhZzsKCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CgoJaW50CQlSc3NpTG93VGhyZXNoOwoJaW50CQlSc3NpSGlnaFRocmVzaDsKCgl1MzIJCUZBTG93VGhyZXNoOwoJdTMyCQlGQUhpZ2hUaHJlc2g7CgoJdTgJCUN1clNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlQcmVTVEFDb25uZWN0U3RhdGU7Cgl1OAkJQ3VyTXVsdGlTVEFDb25uZWN0U3RhdGU7CgoJdTgJCVByZUlHVmFsdWU7Cgl1OAkJQ3VySUdWYWx1ZTsKCXU4CQlCYWNrdXBJR1ZhbHVlOwoKCXM4CQlCYWNrb2ZmVmFsOwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWF4OwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWluOwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWF4OwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWluOwoJdTgJCVJzc2lfdmFsX21pbjsKCgl1OAkJUHJlQ0NLX0NDQVRocmVzOwoJdTgJCUN1ckNDS19DQ0FUaHJlczsKCXU4CQlQcmVDQ0tQRFN0YXRlOwoJdTgJCUN1ckNDS1BEU3RhdGU7CgoJdTgJCUxhcmdlRkFIaXQ7Cgl1OAkJRm9yYmlkZGVuSUdJOwoJdTMyCQlSZWNvdmVyX2NudDsKCgl1OAkJRElHX0R5bmFtaWNfTUlOXzA7Cgl1OAkJRElHX0R5bmFtaWNfTUlOXzE7Cglib29sCQliTWVkaWFDb25uZWN0XzA7Cglib29sCQliTWVkaWFDb25uZWN0XzE7CgoJdTMyCQlSU1NJX21heDsKfTsKCnN0cnVjdCBkeW5hbWljX3B3cl9zYXYgewoJdTgJCVByZUNDQVN0YXRlOwoJdTgJCUN1ckNDQVN0YXRlOwoKCXU4CQlQcmVSRlN0YXRlOwoJdTgJCUN1clJGU3RhdGU7CgoJaW50CQkgICAgUnNzaV92YWxfbWluOwoKCXU4CQlpbml0aWFsaXplOwoJdTMyCQlSZWc4NzQsIFJlZ0M3MCwgUmVnODVDLCBSZWdBNzQ7Cn07CgpzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgewoJdTMyCUNudF9QYXJpdHlfRmFpbDsKCXUzMglDbnRfUmF0ZV9JbGxlZ2FsOwoJdTMyCUNudF9DcmM4X2ZhaWw7Cgl1MzIJQ250X01jc19mYWlsOwoJdTMyCUNudF9PZmRtX2ZhaWw7Cgl1MzIJQ250X0Nja19mYWlsOwoJdTMyCUNudF9hbGw7Cgl1MzIJQ250X0Zhc3RfRnN5bmM7Cgl1MzIJQ250X1NCX1NlYXJjaF9mYWlsOwoJdTMyCUNudF9PRkRNX0NDQTsKCXUzMglDbnRfQ0NLX0NDQTsKCXUzMglDbnRfQ0NBX2FsbDsKCXUzMglDbnRfQldfVVNDOwkvKiBHYXJ5ICovCgl1MzIJQ250X0JXX0xTQzsJLyogR2FyeSAqLwp9OwoKc3RydWN0IHByaV9jY2EgewoJdTgJCVByaUNDQV9mbGFnOwoJdTgJCWludGZfZmxhZzsKCXU4CQlpbnRmX3R5cGU7Cgl1OAkJRHVwUlRTX2ZsYWc7Cgl1OAkJTW9uaXRvcl9mbGFnOwp9OwoKc3RydWN0IHJ4X2hwIHsKCXU4CQlSWEhQX2ZsYWc7Cgl1OAkJUFNEX2Z1bmNfdHJpZ2dlcjsKCXU4CQlQU0RfYml0bWFwX1JYSFBbODBdOwoJdTgJCVByZV9JR0k7Cgl1OAkJQ3VyX0lHSTsKCXU4CQlQcmVfcHdfdGg7Cgl1OAkJQ3VyX3B3X3RoOwoJYm9vbAkJRmlyc3RfdGltZV9lbnRlcjsKCWJvb2wJCVJYSFBfZW5hYmxlOwoJdTgJCVRQX01vZGU7Cn07CgojZGVmaW5lIEFTU09DSUFURV9FTlRSWV9OVU0JCQkJCTMyIC8qICBNYXggc2l6ZSBvZiBBc29jRW50cnlbXS4gKi8KI2RlZmluZQlPRE1fQVNTT0NJQVRFX0VOVFJZX05VTQkJCQlBU1NPQ0lBVEVfRU5UUllfTlVNCgovKiAgVGhpcyBpbmRpY2F0ZXMgdHdvIGRpZmZlcmVudCB0aGUgc3RlcHMuICovCi8qICBJbiBTV0FXX1NURVBfUEVBSywgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBhbnRlbm5hIGFuZCBsaXN0ZW4gdG8gdGhlIHNpZ25hbCBvbiB0aGUgYWlyLiAqLwovKiAgSW4gU1dBV19TVEVQX0RFVEVSTUlORSwgZHJpdmVyIGp1c3QgY29tcGFyZXMgdGhlIHNpZ25hbCBjYXB0dXJlZCBpbiBTV0FXX1NURVBfUEVBSyAqLwovKiAgd2l0aCBvcmlnaW5hbCBSU1NJIHRvIGRldGVybWluZSBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGFudGVubmEuICovCiNkZWZpbmUgU1dBV19TVEVQX1BFQUsJCTAKI2RlZmluZSBTV0FXX1NURVBfREVURVJNSU5FCTEKCiNkZWZpbmUJVFBfTU9ERQkJMAojZGVmaW5lCVJTU0lfTU9ERQkJMQojZGVmaW5lCVRSQUZGSUNfTE9XCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJMQoKc3RydWN0IHN3X2FudF9zdyB7Cgl1OAkJdHJ5X2ZsYWc7CglzMzIJCVByZVJTU0k7Cgl1OAkJQ3VyQW50ZW5uYTsKCXU4CQlQcmVBbnRlbm5hOwoJdTgJCVJTU0lfVHJ5aW5nOwoJdTgJCVRlc3RNb2RlOwoJdTgJCWJUcmlnZ2VyQW50ZW5uYVN3aXRjaDsKCXU4CQlTZWxlY3RBbnRlbm5hTWFwOwoJdTgJCVJTU0lfdGFyZ2V0OwoKCS8qICBCZWZvcmUgbGluayBBbnRlbm5hIFN3aXRjaCBjaGVjayAqLwoJdTgJCVNXQVNfTm9MaW5rX1N0YXRlOwoJdTMyCQlTV0FTX05vTGlua19CS19SZWc4NjA7Cglib29sCQlBTlRBX09OOwkvKiBUbyBpbmRpY2F0ZSBBbnQgQSBpcyBvciBub3QgKi8KCWJvb2wJCUFOVEJfT047CS8qIFRvIGluZGljYXRlIEFudCBCIGlzIG9uIG9yIG5vdCAqLwoKCXMzMgkJUlNTSV9zdW1fQTsKCXMzMgkJUlNTSV9zdW1fQjsKCXMzMgkJUlNTSV9jbnRfQTsKCXMzMgkJUlNTSV9jbnRfQjsKCgl1NjQJCWxhc3RUeE9rQ250OwoJdTY0CQlsYXN0UnhPa0NudDsKCXU2NAkJVFhCeXRlQ250X0E7Cgl1NjQJCVRYQnl0ZUNudF9COwoJdTY0CQlSWEJ5dGVDbnRfQTsKCXU2NAkJUlhCeXRlQ250X0I7Cgl1OAkJVHJhZmZpY0xvYWQ7Cn07CgpzdHJ1Y3QgZWRjYV90dXJibyB7Cglib29sIGJDdXJyZW50VHVyYm9FRENBOwoJYm9vbCBiSXNDdXJSRExTdGF0ZTsKCXUzMglwcnZfdHJhZmZpY19pZHg7IC8qICBlZGNhIHR1cmJvICovCn07CgpzdHJ1Y3Qgb2RtX3JhdGVfYWRhcHQgewoJdTgJVHlwZTsJCS8qICBETV9UeXBlX0J5RlcvRE1fVHlwZV9CeURyaXZlciAqLwoJdTgJSGlnaFJTU0lUaHJlc2g7CS8qICBpZiBSU1NJID4gSGlnaFJTU0lUaHJlc2gJPT4gUkFUUlN0YXRlIGlzIERNX1JBVFJfU1RBX0hJR0ggKi8KCXU4CUxvd1JTU0lUaHJlc2g7CS8qICBpZiBSU1NJIDw9IExvd1JTU0lUaHJlc2gJPT4gUkFUUlN0YXRlIGlzIERNX1JBVFJfU1RBX0xPVyAqLwoJdTgJUkFUUlN0YXRlOwkvKiAgQ3VycmVudCBSU1NJIGxldmVsLCBETV9SQVRSX1NUQV9ISUdIL0RNX1JBVFJfU1RBX01JRERMRS9ETV9SQVRSX1NUQV9MT1cgKi8KCXUzMglMYXN0UkFUUjsJLyogIFJBVFIgUmVnaXN0ZXIgQ29udGVudCAqLwp9OwoKI2RlZmluZSBJUUtfTUFDX1JFR19OVU0JCTQKI2RlZmluZSBJUUtfQUREQV9SRUdfTlVNCQkxNgojZGVmaW5lIElRS19CQl9SRUdfTlVNX01BWAkxMAojZGVmaW5lIElRS19CQl9SRUdfTlVNCQk5CiNkZWZpbmUgSFBfVEhFUk1BTF9OVU0JCTgKCiNkZWZpbmUgQVZHX1RIRVJNQUxfTlVNCQk4CiNkZWZpbmUgSVFLX01hdHJpeF9SRUdfTlVNCTgKI2RlZmluZSBJUUtfTWF0cml4X1NldHRpbmdzX05VTQkxKzI0KzIxCgojZGVmaW5lCQlETV9UeXBlX0J5RlcJCQkwCiNkZWZpbmUJCURNX1R5cGVfQnlEcml2ZXIJCTEKCi8qICBEZWNsYXJlIGZvciBjb21tb24gaW5mbyAqLwoKc3RydWN0IG9kbV9waHlfZGJnX2luZm8gewoJLyogT0RNIFdyaXRlLGRlYnVnIGluZm8gKi8KCXM4CQlSeFNOUmRCW1JGX1BBVEhfTUFYXTsKCXU2NAkJTnVtUXJ5UGh5U3RhdHVzOwoJdTY0CQlOdW1RcnlQaHlTdGF0dXNDQ0s7Cgl1NjQJCU51bVFyeVBoeVN0YXR1c09GRE07CgkvKiBPdGhlcnMgKi8KCXMzMgkJUnhFVk1bUkZfUEFUSF9NQVhdOwoKfTsKCnN0cnVjdCBvZG1fcGFja2V0X2luZm8gewoJdTgJCVJhdGU7Cgl1OAkJU3RhdGlvbklEOwoJYm9vbAkJYlBhY2tldE1hdGNoQlNTSUQ7Cglib29sCQliUGFja2V0VG9TZWxmOwoJYm9vbAkJYlBhY2tldEJlYWNvbjsKfTsKCgplbnVtIHsKCS8qICBCQiBUZWFtICovCglPRE1fRElHCQkJPSAweDAwMDAwMDAxLAoJT0RNX0hJR0hfUE9XRVIJCT0gMHgwMDAwMDAwMiwKCU9ETV9DQ0tfQ0NBX1RICQk9IDB4MDAwMDAwMDQsCglPRE1fRkFfU1RBVElTVElDUwk9IDB4MDAwMDAwMDgsCglPRE1fUkFNQVNLCQk9IDB4MDAwMDAwMTAsCglPRE1fUlNTSV9NT05JVE9SCT0gMHgwMDAwMDAyMCwKCU9ETV9TV19BTlRESVYJCT0gMHgwMDAwMDA0MCwKCU9ETV9IV19BTlRESVYJCT0gMHgwMDAwMDA4MCwKCU9ETV9CQl9QV1JTVgkJPSAweDAwMDAwMTAwLAoJT0RNXzJUUEFUSERJVgkJPSAweDAwMDAwMjAwLAoJT0RNXzFUUEFUSERJVgkJPSAweDAwMDAwNDAwLAoJT0RNX1BTRDJBRkgJCT0gMHgwMDAwMDgwMAp9OwoKLyogICovCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBDb21tb24gaW5mbyBlbnVtIGZvciBhbGwgdGVhbS4gKi8KLyogICovCgplbnVtIG9kbV9jbW5pbmZvIHsKCS8qICBGaXhlZCB2YWx1ZTogKi8KCS8qICAqLwoKCU9ETV9DTU5JTkZPX1BMQVRGT1JNID0gMCwKCU9ETV9DTU5JTkZPX0lOVEVSRkFDRSwJCQkJLyogIGVudW0gb2RtX2ludGVyZmFjZV9kZWYgKi8KCU9ETV9DTU5JTkZPX01QX1RFU1RfQ0hJUCwKCU9ETV9DTU5JTkZPX0lDX1RZUEUsCQkJCQkvKiAgZW51bSBvZG1faWNfdHlwZV9kZWYgKi8KCU9ETV9DTU5JTkZPX0NVVF9WRVIsCQkJCQkvKiAgZW51bSBvZG1fY3V0X3ZlcnNpb24gKi8KCU9ETV9DTU5JTkZPX0ZBQl9WRVIsCQkJCQkvKiAgZW51bSBvZG1fZmFiX3ZlcnNpb24gKi8KCU9ETV9DTU5JTkZPX1JGX1RZUEUsCQkJCQkvKiAgZW51bSByZl9wYXRoX2RlZiBvciBlbnVtIG9kbV9yZl90eXBlPyAqLwoJT0RNX0NNTklORk9fQk9BUkRfVFlQRSwJCQkJLyogIGVudW0gb2RtX2JvYXJkX3R5cGUgKi8KCU9ETV9DTU5JTkZPX0VYVF9MTkEsCQkJCQkvKiAgdHJ1ZSAqLwoJT0RNX0NNTklORk9fRVhUX1BBLAoJT0RNX0NNTklORk9fRVhUX1RSU1csCglPRE1fQ01OSU5GT19QQVRDSF9JRCwJCQkJLyogQ1VTVE9NRVIgSUQgKi8KCU9ETV9DTU5JTkZPX0JJTkhDVF9URVNULAoJT0RNX0NNTklORk9fQldJRklfVEVTVCwKCU9ETV9DTU5JTkZPX1NNQVJUX0NPTkNVUlJFTlQsCgoKCS8qICAqLwoJLyogIER5bmFtaWMgdmFsdWU6ICovCgkvKiAgKi8KCU9ETV9DTU5JTkZPX01QX01PREUsCgoJT0RNX0NNTklORk9fV0lGSV9ESVJFQ1QsCglPRE1fQ01OSU5GT19XSUZJX0RJU1BMQVksCglPRE1fQ01OSU5GT19MSU5LLAoJT0RNX0NNTklORk9fUlNTSV9NSU4sCglPRE1fQ01OSU5GT19EQkdfQ09NUCwJCQkJLyogIHU2NCAqLwoJT0RNX0NNTklORk9fREJHX0xFVkVMLAkJCQkvKiAgdTMyICovCglPRE1fQ01OSU5GT19SQV9USFJFU0hPTERfSElHSCwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0xPVywJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkZfQU5URU5OQV9UWVBFLAkJLyogIHU4ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFRCwKCU9ETV9DTU5JTkZPX0JUX09QRVJBVElPTiwKCU9ETV9DTU5JTkZPX0JUX0RJRywKCU9ETV9DTU5JTkZPX0JUX0JVU1ksCQkJCQkvKiBDaGVjayBCdCBpcyB1c2luZyBvciBub3QgKi8KCU9ETV9DTU5JTkZPX0JUX0RJU0FCTEVfRURDQSwKCgkvKiAgKi8KCS8qICBEeW5hbWljIHB0ciBhcnJheSBob29rIGl0bXMuICovCgkvKiAgKi8KCU9ETV9DTU5JTkZPX1NUQV9TVEFUVVMsCglPRE1fQ01OSU5GT19QSFlfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFDX1NUQVRVUywKCglPRE1fQ01OSU5GT19NQVgsCn07CgovKiAgRGVmaW5lIE9ETSBzdXBwb3J0IGFiaWxpdHkuICBPRE1fQ01OSU5GT19BQklMSVRZICovCmVudW0gewoJLyogIEJCIE9ETSBzZWN0aW9uIEJJVCAwLTE1ICovCglPRE1fQkJfRElHCQkJCT0gQklUKDApLAoJT0RNX0JCX1JBX01BU0sJCQkJPSBCSVQoMSksCglPRE1fQkJfRFlOQU1JQ19UWFBXUgkJCT0gQklUKDIpLAoJT0RNX0JCX0ZBX0NOVAkJCQk9IEJJVCgzKSwKCU9ETV9CQl9SU1NJX01PTklUT1IJCQk9IEJJVCg0KSwKCU9ETV9CQl9DQ0tfUEQJCQkJPSBCSVQoNSksCglPRE1fQkJfQU5UX0RJVgkJCQk9IEJJVCg2KSwKCU9ETV9CQl9QV1JfU0FWRQkJCQk9IEJJVCg3KSwKCU9ETV9CQl9QV1JfVFJBSU4JCQk9IEJJVCg4KSwKCU9ETV9CQl9SQVRFX0FEQVBUSVZFCQkJPSBCSVQoOSksCglPRE1fQkJfUEFUSF9ESVYJCQkJPSBCSVQoMTApLAoJT0RNX0JCX1BTRAkJCQk9IEJJVCgxMSksCglPRE1fQkJfUlhIUAkJCQk9IEJJVCgxMiksCgoJLyogIE1BQyBETSBzZWN0aW9uIEJJVCAxNi0yMyAqLwoJT0RNX01BQ19FRENBX1RVUkJPCQkJPSBCSVQoMTYpLAoJT0RNX01BQ19FQVJMWV9NT0RFCQkJPSBCSVQoMTcpLAoKCS8qICBSRiBPRE0gc2VjdGlvbiBCSVQgMjQtMzEgKi8KCU9ETV9SRl9UWF9QV1JfVFJBQ0sJCQk9IEJJVCgyNCksCglPRE1fUkZfUlhfR0FJTl9UUkFDSwkJCT0gQklUKDI1KSwKCU9ETV9SRl9DQUxJQlJBVElPTgkJCT0gQklUKDI2KSwKCn07CgovKglPRE1fQ01OSU5GT19JTlRFUkZBQ0UgKi8KZW51bSBvZG1faW50ZXJmYWNlX2RlZiB7CglPRE1fSVRSRl9QQ0lFCT0JMHgxLAoJT0RNX0lUUkZfVVNCCT0JMHgyLAoJT0RNX0lUUkZfU0RJTwk9CTB4NCwKCU9ETV9JVFJGX0FMTAk9CTB4NywKfTsKCi8qICBPRE1fQ01OSU5GT19JQ19UWVBFICovCmVudW0gb2RtX2ljX3R5cGVfZGVmIHsKCU9ETV9SVEw4MTkyUwk9CUJJVCgwKSwKCU9ETV9SVEw4MTkyQwk9CUJJVCgxKSwKCU9ETV9SVEw4MTkyRAk9CUJJVCgyKSwKCU9ETV9SVEw4NzIzQQk9CUJJVCgzKSwKCU9ETV9SVEw4MTg4RQk9CUJJVCg0KSwKCU9ETV9SVEw4ODEyCT0JQklUKDUpLAoJT0RNX1JUTDg4MjEJPQlCSVQoNiksCn07CgovKiBPRE1fQ01OSU5GT19DVVRfVkVSICovCmVudW0gb2RtX2N1dF92ZXJzaW9uIHsKCU9ETV9DVVRfQQkJPQkxLAoJT0RNX0NVVF9CCQk9CTIsCglPRE1fQ1VUX0MJCT0JMywKCU9ETV9DVVRfRAkJPQk0LAoJT0RNX0NVVF9FCQk9CTUsCglPRE1fQ1VUX0YJCT0JNiwKCU9ETV9DVVRfVEVTVAkJPQk3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0ZBQl9WRVIgKi8KZW51bSBvZG1fZmFiX3ZlcnNpb24gewoJT0RNX1RTTUMJPQkwLAoJT0RNX1VNQwkJPQkxLAp9OwoKLyogIE9ETV9DTU5JTkZPX1JGX1RZUEUgKi8KLyogIEZvciBleGFtcGxlIDFUMlIgKEErQUIgPSBCSVQwfEJJVDR8QklUNSkgKi8KZW51bSByZl9wYXRoX2RlZiB7CglPRE1fUkZfVFhfQQk9CUJJVCgwKSwKCU9ETV9SRl9UWF9CCT0JQklUKDEpLAoJT0RNX1JGX1RYX0MJPQlCSVQoMiksCglPRE1fUkZfVFhfRAk9CUJJVCgzKSwKCU9ETV9SRl9SWF9BCT0JQklUKDQpLAoJT0RNX1JGX1JYX0IJPQlCSVQoNSksCglPRE1fUkZfUlhfQwk9CUJJVCg2KSwKCU9ETV9SRl9SWF9ECT0JQklUKDcpLAp9OwoKCmVudW0gb2RtX3JmX3R5cGUgewoJT0RNXzFUMVIJPQkwLAoJT0RNXzFUMlIJPQkxLAoJT0RNXzJUMlIJPQkyLAoJT0RNXzJUM1IJPQkzLAoJT0RNXzJUNFIJPQk0LAoJT0RNXzNUM1IJPQk1LAoJT0RNXzNUNFIJPQk2LAoJT0RNXzRUNFIJPQk3LAp9OwoKLyogIE9ETSBEeW5hbWljIGNvbW1vbiBpbmZvIHZhbHVlIGRlZmluaXRpb24gKi8KCmVudW0gb2RtX21hY19waHlfbW9kZSB7CglPRE1fU01TUAk9IDAsCglPRE1fRE1TUAk9IDEsCglPRE1fRE1EUAk9IDIsCn07CgoKZW51bSBvZG1fYnRfY29leGlzdCB7CglPRE1fQlRfQlVTWQkJPSAxLAoJT0RNX0JUX09OCQk9IDIsCglPRE1fQlRfT0ZGCQk9IDMsCglPRE1fQlRfTk9ORQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09QX01PREUgKi8KZW51bSBvZG1fb3BlcmF0aW9uX21vZGUgewoJT0RNX05PX0xJTksJCT0gQklUKDApLAoJT0RNX0xJTksJCT0gQklUKDEpLAoJT0RNX1NDQU4JCT0gQklUKDIpLAoJT0RNX1BPV0VSU0FWRQkJPSBCSVQoMyksCglPRE1fQVBfTU9ERQkJPSBCSVQoNCksCglPRE1fQ0xJRU5UX01PREUJCT0gQklUKDUpLAoJT0RNX0FEX0hPQwkJPSBCSVQoNiksCglPRE1fV0lGSV9ESVJFQ1QJCT0gQklUKDcpLAoJT0RNX1dJRklfRElTUExBWQk9IEJJVCg4KSwKfTsKCi8qICBPRE1fQ01OSU5GT19XTV9NT0RFICovCmVudW0gb2RtX3dpcmVsZXNzX21vZGUgewoJT0RNX1dNX1VOS05PVwkJPSAweDAsCglPRE1fV01fQgkJPSBCSVQoMCksCglPRE1fV01fRwkJPSBCSVQoMSksCglPRE1fV01fQQkJPSBCSVQoMiksCglPRE1fV01fTjI0RwkJPSBCSVQoMyksCglPRE1fV01fTjVHCQk9IEJJVCg0KSwKCU9ETV9XTV9BVVRPCQk9IEJJVCg1KSwKCU9ETV9XTV9BQwkJPSBCSVQoNiksCn07CgovKiAgT0RNX0NNTklORk9fQkFORCAqLwplbnVtIG9kbV9iYW5kX3R5cGUgewoJT0RNX0JBTkRfMl80RwkJPSBCSVQoMCksCglPRE1fQkFORF81RwkJPSBCSVQoMSksCgp9OwoKLyogIE9ETV9DTU5JTkZPX1NFQ19DSE5MX09GRlNFVCAqLwplbnVtIG9kbV9zZWNfY2hubF9vZmZzZXQgewoJT0RNX0RPTlRfQ0FSRQkJPSAwLAoJT0RNX0JFTE9XCQk9IDEsCglPRE1fQUJPVkUJCT0gMgp9OwoKLyogIE9ETV9DTU5JTkZPX0NITkwgKi8KCi8qICBPRE1fQ01OSU5GT19CT0FSRF9UWVBFICovCmVudW0gb2RtX2JvYXJkX3R5cGUgewoJT0RNX0JPQVJEX05PUk1BTAk9IDAsCglPRE1fQk9BUkRfSElHSFBXUgk9IDEsCglPRE1fQk9BUkRfTUlOSUNBUkQJPSAyLAoJT0RNX0JPQVJEX1NMSU0JCT0gMywKCU9ETV9CT0FSRF9DT01CTwkJPSA0LAoKfTsKCi8qICBPRE1fQ01OSU5GT19PTkVfUEFUSF9DQ0EgKi8KZW51bSBvZG1fY2NhX3BhdGggewoJT0RNX0NDQV8yUgkJCT0gMCwKCU9ETV9DQ0FfMVJfQQkJCT0gMSwKCU9ETV9DQ0FfMVJfQgkJCT0gMiwKfTsKCnN0cnVjdCBpcWtfbWF0cml4X3JlZ3Nfc2V0IHsKCWJvb2wJYklRS0RvbmU7CglzMzIJVmFsdWVbMV1bSVFLX01hdHJpeF9SRUdfTlVNXTsKfTsKCnN0cnVjdCBvZG1fcmZfY2FsX3QgewoJLyogZm9yIHR4IHBvd2VyIHRyYWNraW5nICovCgoJdTMyCVJlZ0EyNDsgLyogIGZvciBUZW1wQ0NLICovCglzMzIJUmVnRTk0OwoJczMyCVJlZ0U5QzsKCXMzMglSZWdFQjQ7CglzMzIJUmVnRUJDOwoKCS8qIHU4IGJUWFBvd2VyVHJhY2tpbmc7ICovCgl1OAkJVFhQb3dlcmNvdW50OwoJYm9vbCBiVFhQb3dlclRyYWNraW5nSW5pdDsKCWJvb2wgYlRYUG93ZXJUcmFja2luZzsKCXU4CQlUeFBvd2VyVHJhY2tDb250cm9sOyAvKiBmb3IgbXAgbW9kZSwgdHVybiBvZmYgdHhwd3J0cmFja2luZyBhcyBkZWZhdWx0ICovCgl1OAkJVE1fVHJpZ2dlcjsKCXU4CQlJbnRlcm5hbFBBNUdbMl07CS8qIHBhdGhBIC8gcGF0aEIgKi8KCgl1OAkJVGhlcm1hbE1ldGVyWzJdOyAgICAvKiAgVGhlcm1hbE1ldGVyLCBpbmRleCAwIGZvciBSRklDMCwgYW5kIDEgZm9yIFJGSUMxICovCgl1OAkJVGhlcm1hbFZhbHVlOwoJdTgJCVRoZXJtYWxWYWx1ZV9MQ0s7Cgl1OAkJVGhlcm1hbFZhbHVlX0lRSzsKCXU4CVRoZXJtYWxWYWx1ZV9EUEs7Cgl1OAlUaGVybWFsVmFsdWVfQVZHW0FWR19USEVSTUFMX05VTV07Cgl1OAlUaGVybWFsVmFsdWVfQVZHX2luZGV4OwoJdTgJVGhlcm1hbFZhbHVlX1J4R2FpbjsKCXU4CVRoZXJtYWxWYWx1ZV9DcnlzdGFsOwoJdTgJVGhlcm1hbFZhbHVlX0RQS3N0b3JlOwoJdTgJVGhlcm1hbFZhbHVlX0RQS3RyYWNrOwoJYm9vbAlUeFBvd2VyVHJhY2tpbmdJblByb2dyZXNzOwoJYm9vbAliRFBLZW5hYmxlOwoKCWJvb2wJYlJlbG9hZHR4cG93ZXJpbmRleDsKCXU4CWJSZlBpRW5hYmxlOwoJdTMyCVRYUG93ZXJUcmFja2luZ0NhbGxiYWNrQ250OyAvKiBjb3NhIGFkZCBmb3IgZGVidWcgKi8KCgl1OAliQ0NLaW5DSDE0OwoJdTgJQ0NLX2luZGV4OwoJdTgJT0ZETV9pbmRleFsyXTsKCWJvb2wgYkRvbmVUeHBvd2VyOwoKCXU4CVRoZXJtYWxWYWx1ZV9IUFtIUF9USEVSTUFMX05VTV07Cgl1OAlUaGVybWFsVmFsdWVfSFBfaW5kZXg7CglzdHJ1Y3QgaXFrX21hdHJpeF9yZWdzX3NldCBJUUtNYXRyaXhSZWdTZXR0aW5nW0lRS19NYXRyaXhfU2V0dGluZ3NfTlVNXTsKCgl1OAlEZWx0YV9JUUs7Cgl1OAlEZWx0YV9MQ0s7CgoJLyogZm9yIElRSyAqLwoJdTMyCVJlZ0MwNDsKCXUzMglSZWc4NzQ7Cgl1MzIJUmVnQzA4OwoJdTMyCVJlZ0I2ODsKCXUzMglSZWdCNkM7Cgl1MzIJUmVnODcwOwoJdTMyCVJlZzg2MDsKCXUzMglSZWc4NjQ7CgoJYm9vbAliSVFLSW5pdGlhbGl6ZWQ7Cglib29sIGJMQ0tJblByb2dyZXNzOwoJYm9vbAliQW50ZW5uYURldGVjdGVkOwoJdTMyCUFEREFfYmFja3VwW0lRS19BRERBX1JFR19OVU1dOwoJdTMyCUlRS19NQUNfYmFja3VwW0lRS19NQUNfUkVHX05VTV07Cgl1MzIJSVFLX0JCX2JhY2t1cF9yZWNvdmVyWzldOwoJdTMyCUlRS19CQl9iYWNrdXBbSVFLX0JCX1JFR19OVU1dOwoKCS8qIGZvciBBUEsgKi8KCXUzMglBUEtvdXRwdXRbMl1bMl07IC8qIHBhdGggQS9COyBvdXRwdXQxXzFhL291dHB1dDFfMmEgKi8KCXU4CWJBUEtkb25lOwoJdTgJYkFQS1RoZXJtYWxNZXRlcklnbm9yZTsKCXU4CWJEUGRvbmU7Cgl1OAliRFBQYXRoQU9LOwoJdTgJYkRQUGF0aEJPSzsKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCnN0cnVjdCBvZG1fZmF0X3QgewoJdTgJQnNzaWRbNl07Cgl1OAlhbnRzZWxfcnhfa2VlcF8wOwoJdTgJYW50c2VsX3J4X2tlZXBfMTsKCXU4CWFudHNlbF9yeF9rZWVwXzI7Cgl1MzIJYW50U3VtUlNTSVs3XTsKCXUzMglhbnRSU1NJY250WzddOwoJdTMyCWFudEF2ZVJTU0lbN107Cgl1OAlGQVRfU3RhdGU7Cgl1MzIJVHJhaW5JZHg7Cgl1OAlhbnRzZWxfYVtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlhbnRzZWxfYltPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlhbnRzZWxfY1tPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJTWFpbkFudF9TdW1bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCUF1eEFudF9TdW1bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU1haW5BbnRfQ250W09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglBdXhBbnRfQ250W09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVJ4SWRsZUFudDsKCWJvb2wJYkJlY29tZUxpbmtlZDsKfTsKCmVudW0gZmF0X3N0YXRlIHsKCUZBVF9OT1JNQUxfU1RBVEUJCT0gMCwKCUZBVF9UUkFJTklOR19TVEFURQkJPSAxLAp9OwoKZW51bSBhbnRfZGlmX3R5cGUgewoJTk9fQU5URElWCQkJPSAweEZGLAoJQ0dfVFJYX0hXX0FOVERJVgkJPSAweDAxLAoJQ0dDU19SWF9IV19BTlRESVYJCT0gMHgwMiwKCUZJWEVEX0hXX0FOVERJVgkJCT0gMHgwMywKCUNHX1RSWF9TTUFSVF9BTlRESVYJCT0gMHgwNCwKCUNHQ1NfUlhfU1dfQU5URElWCQk9IDB4MDUsCn07CgovKiAgMjAxMS8wOS8yMiBNSCBDb3B5IGZyb20gU0Q0IGRlZmluZWQgc3RydWN0dXJlLiBXZSB1c2UgdG8gc3VwcG9ydCBQSFkgRE0gaW50ZWdyYXRpb24uICovCnN0cnVjdCBkbV9vZG1fdCB7CgkvKiAgKi8KCS8qCUFkZCBmb3IgZGlmZmVyZW50IHRlYW0gdXNlIHRlbXBvcmFyaWx5ICovCgkvKiAgKi8KCXN0cnVjdCBydHdfYWRhcHRlcgkqQWRhcHRlcjsJCS8qICBGb3IgQ0UvTklDIHRlYW0gKi8KCgl1NjQJCQlEZWJ1Z0NvbXBvbmVudHM7Cgl1MzIJCQlEZWJ1Z0xldmVsOwoKLyogIE9ETSBIQU5ETEUsIERSSVZFUiBORUVEUyBOT1QgVE8gSE9PSy0tLS0tLSAqLwoJYm9vbAkJCWJDY2tIaWdoUG93ZXI7Cgl1OAkJCVJGUGF0aFJ4RW5hYmxlOwkJLyogIE9ETV9DTU5JTkZPX1JGUEFUSF9FTkFCTEUgKi8KCXU4CQkJQ29udHJvbENoYW5uZWw7Ci8qICBPRE0gSEFORExFLCBEUklWRVIgTkVFRFMgTk9UIFRPIEhPT0stLS0tLS0gKi8KCi8qIDEgIENPTU1PTiBJTkZPUk1BVElPTiAqLwoKCS8qICBJbml0IFZhbHVlICovCi8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCS8qICBPRE0gU3VwcG9ydCBBYmlsaXR5IERJRy9SQVRSL1RYX1BXUl9UUkFDSy8goUuhSyA9IDEvMi8zL6FLICovCgl1MzIJCQlTdXBwb3J0QWJpbGl0eTsKCS8qICBPRE0gUENJRS9VU0IvU0RJTy9HU1BJID0gMC8xLzIvMyAqLwoJdTgJCQlTdXBwb3J0SW50ZXJmYWNlOwoJLyogIE9ETSBjb21wb3NpdGUgb3IgaW5kZXBlbmRlbnQuIEJpdCBvcmllbnRlZC8gOTJDKzkyRCsgLi4uLiBvciBhbnkgb3RoZXIgdHlwZSA9IDEvMi8zLy4uLiAqLwoJdTMyCQkJU3VwcG9ydElDVHlwZTsKCS8qICBDdXQgVmVyc2lvbiBUZXN0Q2hpcC9BLWN1dC9CLWN1dC4uLiA9IDAvMS8yLzMvLi4uICovCgl1OAkJCUN1dFZlcnNpb247CgkvKiAgRmFiIFZlcnNpb24gVFNNQy9VTUMgPSAwLzEgKi8KCXU4CQkJRmFiVmVyc2lvbjsKCS8qICBSRiBUeXBlIDRUNFIvM1QzUi8yVDJSLzFUMlIvMVQxUi8uLi4gKi8KCXU4CQkJUkZUeXBlOwoJLyogIEJvYXJkIFR5cGUgTm9ybWFsL0hpZ2hQb3dlci9NaW5pQ2FyZC9TTElNL0NvbWJvLy4uLiA9IDAvMS8yLzMvNC8uLi4gKi8KCXU4CQkJQm9hcmRUeXBlOwoJLyogIHdpdGggZXh0ZXJuYWwgTE5BICBOTy9ZZXMgPSAwLzEgKi8KCXU4CQkJRXh0TE5BOwoJLyogIHdpdGggZXh0ZXJuYWwgUEEgIE5PL1llcyA9IDAvMSAqLwoJdTgJCQlFeHRQQTsKCS8qICB3aXRoIGV4dGVybmFsIFRSU1cgIE5PL1llcyA9IDAvMSAqLwoJdTgJCQlFeHRUUlNXOwoJdTgJCQlQYXRjaElEOyAvKiBDdXN0b21lciBJRCAqLwoJYm9vbAkJCWJJbkhjdFRlc3Q7Cglib29sCQkJYldJRklUZXN0OwoKCWJvb2wJCQliRHVhbE1hY1NtYXJ0Q29uY3VycmVudDsKCXUzMgkJCUJLX1N1cHBvcnRBYmlsaXR5OwovKiBIT09LIEJFRk9SRSBSRUcgSU5JVC0tLS0tLS0tLS0tICovCgoJLyogICovCgkvKiAgRHluYW1pYyBWYWx1ZSAqLwoJLyogICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgoJdTgJCQl1OF90ZW1wOwoJYm9vbAkJCWJvb2xfdGVtcDsKCXN0cnVjdCBydHdfYWRhcHRlcgkqUEFEQVBURVJfdGVtcDsKCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgkvKiAgKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCWJvb2wJCQliV0lGSV9EaXJlY3Q7Cglib29sCQkJYldJRklfRGlzcGxheTsKCWJvb2wJCQliTGlua2VkOwoJdTgJCQlSU1NJX01pbjsKCXU4CQkJSW50ZXJmYWNlSW5kZXg7IC8qICBBZGQgZm9yIDkyRCAgZHVhbCBNQUM6IDAtLU1hYzAgMS0tTWFjMSAqLwoJYm9vbAkJYklzTVBDaGlwOwoJYm9vbAkJCWJPbmVFbnRyeU9ubHk7CgkvKiAgQ29tbW9uIGluZm8gZm9yIEJURE0gKi8KCWJvb2wJCQliQnREaXNhYmxlZDsJCQkvKiAgQlQgaXMgZGlzYWJsZWQgKi8KCWJvb2wJCQliQnRIc09wZXJhdGlvbjsJCS8qICBCVCBIUyBtb2RlIGlzIHVuZGVyIHByb2dyZXNzICovCgl1OAkJCWJ0SHNEaWdWYWw7CQkJLyogIHVzZSBCVCByc3NpIHRvIGRlY2lkZSB0aGUgRElHIHZhbHVlICovCglib29sCQkJYkJ0RGlzYWJsZUVkY2FUdXJibzsJLyogIFVuZGVyIHNvbWUgY29uZGl0aW9uLCBkb24ndCBlbmFibGUgdGhlIEVEQ0EgVHVyYm8gKi8KCWJvb2wJCQliQnRCdXN5OwkJCS8qICBCVCBpcyBidXN5LiAqLwovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSAqLwoKCS8qIDIgRGVmaW5lIFNUQSBpbmZvLiAqLwoJLyogIF9PRE1fU1RBX0lORk8gKi8KCS8qICAyMDEyLzAxLzEyIE1IIEZvciBNUCwgd2UgbmVlZCB0byByZWR1Y2Ugb25lIGFycmF5IHBvaW50ZXIgZm9yIGRlZmF1bHQgcG9ydC4/PyAqLwoJc3RydWN0IHN0YV9pbmZvICoJCXBPRE1fU3RhSW5mb1tPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07CgoJLyogICovCgkvKiAgMjAxMi8wMi8xNCBNSCBBZGQgdG8gc2hhcmUgODhFIHJhIHdpdGggb3RoZXIgU1cgdGVhbS4gKi8KCS8qICBXZSBuZWVkIHRvIGNvbGVsY3QgYWxsIHN1cHBvcnQgYWJpbGl0IHRvIGEgcHJvcGVyIGFyZWEuICovCgkvKiAgKi8KCWJvb2wJCQkJUmFTdXBwb3J0ODhFOwoKCS8qICBEZWZpbmUgLi4uLi4uLi4uLi4gKi8KCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9waHlfZGJnX2luZm8JIFBoeURiZ0luZm87CgkvKiBQSFlfSU5GT184OEUJCVBoeUluZm87ICovCgoJLyogIExhdGVzdCBwYWNrZXQgcGh5IGluZm8gKE9ETSB3cml0ZSkgKi8KCS8qIE1BQ19JTkZPXzg4RQkJTWFjSW5mbzsgKi8KCgkvKiAgRGlmZmVyZW50IFRlYW0gaW5kZXBlbmR0IHN0cnVjdHVyZT8/ICovCgoJLyogICovCgkvKiBUWF9SVFBfQ01OCQlUWF9yZXRycG87ICovCgkvKiBUWF9SVFBfODhFCQlUWF9yZXRycG87ICovCgkvKiBUWF9SVFBfODE5NQkJVFhfcmV0cnBvOyAqLwoKCS8qICAqLwoJLyogT0RNIFN0cnVjdHVyZSAqLwoJLyogICovCglzdHJ1Y3Qgb2RtX2ZhdF90CQlETV9GYXRUYWJsZTsKCXN0cnVjdCBkaWdfdAlETV9EaWdUYWJsZTsKCXN0cnVjdCBkeW5hbWljX3B3cl9zYXYJCURNX1BTVGFibGU7CglzdHJ1Y3QgcHJpX2NjYQlETV9QcmlDQ0E7CglzdHJ1Y3QgcnhfaHAJCURNX1JYSFBfVGFibGU7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMJRmFsc2VBbG1DbnQ7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMJRmxhc2VBbG1DbnRCdWRkeUFkYXB0ZXI7CglzdHJ1Y3Qgc3dfYW50X3N3CQlETV9TV0FUX1RhYmxlOwoKCXN0cnVjdCBlZGNhX3R1cmJvCQlETV9FRENBX1RhYmxlOwoJdTMyCQlXTU1FRENBX0JFOwoJLyogIENvcHkgZnJvbSBTRDQgc3RydWN0dXJlICovCgkvKiAgKi8KCS8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoJLyogICovCgoJLyogUFNEICovCglib29sCQkJYlVzZXJBc3NpZ25MZXZlbDsKCXU4CQkJUlNTSV9CVDsJCQkvKiBjb21lIGZyb20gQlQgKi8KCWJvb2wJCQliUFNEaW5Qcm9jZXNzOwoKCS8qIGZvciByYXRlIGFkYXB0aXZlLCBpbiBmYWN0LCAgODhjLzkyYyBmdyB3aWxsIGhhbmRsZSB0aGlzICovCgl1OAkJCWJVc2VSQU1hc2s7CgoJc3RydWN0IG9kbV9yYXRlX2FkYXB0CVJhdGVBZGFwdGl2ZTsKCgoJc3RydWN0IG9kbV9yZl9jYWxfdAlSRkNhbGlicmF0ZUluZm87CgoJLyogICovCgkvKiAgVFggcG93ZXIgdHJhY2tpbmcgKi8KCS8qICAqLwoJdTgJCQlCYlN3aW5nSWR4T2ZkbTsKCXU4CQkJQmJTd2luZ0lkeE9mZG1DdXJyZW50OwoJdTgJCQlCYlN3aW5nSWR4T2ZkbUJhc2U7Cglib29sCQkJQmJTd2luZ0ZsYWdPZmRtOwoJdTgJCQlCYlN3aW5nSWR4Q2NrOwoJdTgJCQlCYlN3aW5nSWR4Q2NrQ3VycmVudDsKCXU4CQkJQmJTd2luZ0lkeENja0Jhc2U7Cglib29sCQkJQmJTd2luZ0ZsYWdDY2s7CgkvKiAgKi8KCS8qICBPRE0gc3lzdGVtIHJlc291cmNlLiAqLwoJLyogICovCn07CS8qICBETV9EeW5hbWljX01lY2hhbmlzbV9TdHJ1Y3R1cmUgKi8KCmVudW0gb2RtX3JmX2NvbnRlbnQgewoJb2RtX3JhZGlvYV90eHQgPSAweDEwMDAsCglvZG1fcmFkaW9iX3R4dCA9IDB4MTAwMSwKCW9kbV9yYWRpb2NfdHh0ID0gMHgxMDAyLAoJb2RtX3JhZGlvZF90eHQgPSAweDEwMDMKfTsKCi8qICBTdGF0dXMgY29kZSAqLwplbnVtIHJ0X3N0YXR1cyB7CglSVF9TVEFUVVNfU1VDQ0VTUywKCVJUX1NUQVRVU19GQUlMVVJFLAoJUlRfU1RBVFVTX1BFTkRJTkcsCglSVF9TVEFUVVNfUkVTT1VSQ0UsCglSVF9TVEFUVVNfSU5WQUxJRF9DT05URVhULAoJUlRfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSLAoJUlRfU1RBVFVTX05PVF9TVVBQT1JULAoJUlRfU1RBVFVTX09TX0FQSV9GQUlMRUQsCn07CgovKiBpbmNsdWRlICJvZG1fZnVuY3Rpb24uaCIgKi8KCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIERJRyAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCmVudW0gZG1fZGlnX29wIHsKCURJR19UWVBFX1RIUkVTSF9ISUdICT0gMCwKCURJR19UWVBFX1RIUkVTSF9MT1cJPSAxLAoJRElHX1RZUEVfQkFDS09GRgkJPSAyLAoJRElHX1RZUEVfUlhfR0FJTl9NSU4JPSAzLAoJRElHX1RZUEVfUlhfR0FJTl9NQVgJPSA0LAoJRElHX1RZUEVfRU5BQkxFCQkJPSA1LAoJRElHX1RZUEVfRElTQUJMRQkJPSA2LAoJRElHX09QX1RZUEVfTUFYCn07CgojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0hJR0gJCQk0MAojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0xPVwkJCTM1CgojZGVmaW5lCQlETV9TQ0FOX1JTU0lfVEgJCQkJMHgxNCAvKiBzY2FuIHJldHVybiBpc3N1ZSBmb3IgTEMgKi8KCgojZGVmaW5lCQlETV9GQUxTRUFMQVJNX1RIUkVTSF9MT1cJNDAwCiNkZWZpbmUJCURNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0gJMTAwMAoKI2RlZmluZQkJRE1fRElHX01BWF9OSUMJCQkJMHg0ZQojZGVmaW5lCQlETV9ESUdfTUlOX05JQwkJCQkweDFlCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQCQkJCTB4MzIKI2RlZmluZQkJRE1fRElHX01JTl9BUAkJCQkweDIwCgojZGVmaW5lCQlETV9ESUdfTUFYX05JQ19IUAkJCTB4NDYKI2RlZmluZQkJRE1fRElHX01JTl9OSUNfSFAJCQkweDJlCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQX0hQCQkJCTB4NDIKI2RlZmluZQkJRE1fRElHX01JTl9BUF9IUAkJCQkweDMwCgovKiB2aXZpIDkyYyY5MmQgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9uLCAyMDExMDUwNCAqLwovKiB0aGlzIGlzIGZvciA5MmMgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMAkJCQkweDIwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgxCQkJCTB4MzAwCiNkZWZpbmUJCURNX0RJR19GQV9USDIJCQkJMHg0MDAKLyogdGhpcyBpcyBmb3IgOTJkICovCiNkZWZpbmUJCURNX0RJR19GQV9USDBfOTJECQkJMHgxMDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMV85MkQJCQkweDQwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgyXzkyRAkJCTB4NjAwCgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NQVgJCQkxMgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NSU4JCQktNAojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9ERUZBVUxUCQkxMAoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQUdDIFJYIEhpZ2ggUG93ZXIgTW9kZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZSAgICAgICAgICBMTkFfTG93X0dhaW5fMSAgICAgICAgICAgICAgICAgICAgICAweDY0CiNkZWZpbmUgICAgICAgICAgTE5BX0xvd19HYWluXzIgICAgICAgICAgICAgICAgICAgICAgMHg1QQojZGVmaW5lICAgICAgICAgIExOQV9Mb3dfR2Fpbl8zICAgICAgICAgICAgICAgICAgICAgIDB4NTgKCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDEgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAwCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDIgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTAwCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwMAojZGVmaW5lICAgICAgICAgIEZBX1JYSFBfVEg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDAKI2RlZmluZSAgICAgICAgICBGQV9SWEhQX1RINSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBFRENBICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRHluYW1pYyBUeCBQb3dlciAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRHluYW1pYyBUeCBQb3dlciBDb250cm9sIFRocmVzaG9sZCAqLwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwyCTc0CiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEJNjcKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfQVAJCTB4M0YKCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX05vcm1hbAkJMAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDEJCTEKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTGV2ZWwyCQkyCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMQkJCTMKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfQlQyCQkJNAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xNQkJCTUKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMzUJCQk2CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzUwCQkJNwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF83MAkJCTgKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMTAwCQkJOQoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgUmF0ZSBBZGFwdGl2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRE1fUkFUUl9TVEFfSU5JVAkJCTAKI2RlZmluZQkJRE1fUkFUUl9TVEFfSElHSAkJCTEKI2RlZmluZQkJCURNX1JBVFJfU1RBX01JRERMRQkJMgojZGVmaW5lCQkJRE1fUkFUUl9TVEFfTE9XCQkJMwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQkIgUG93ZXIgU2F2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgplbnVtIGRtXzFyX2NjYSB7CglDQ0FfMVIgPTAsCglDQ0FfMlIgPSAxLAoJQ0NBX01BWCA9IDIsCn07CgplbnVtIGRtX3JmX2RlZiB7CglSRl9TYXZlID0wLAoJUkZfTm9ybWFsID0gMSwKCVJGX01BWCA9IDIsCn07CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBBbnRlbm5hIERpdmVyc2l0eSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZW51bSBkbV9zd2FzIHsKCUFudGVubmFfQSA9IDEsCglBbnRlbm5hX0IgPSAyLAoJQW50ZW5uYV9NQVggPSAzLAp9OwoKLyogIE1heGltYWwgbnVtYmVyIG9mIGFudGVubmEgZGV0ZWN0aW9uIG1lY2hhbmlzbSBuZWVkcyB0byBwZXJmb3JtLCBhZGRlZCBieSBSb2dlciwgMjAxMS4xMi4yOC4gKi8KI2RlZmluZQlNQVhfQU5URU5OQV9ERVRFQ1RJT05fQ05UCTEwCgovKiAgKi8KLyogIEV4dGVybiBHbG9iYWwgVmFyaWFibGVzLiAqLwovKiAgKi8KI2RlZmluZQlPRkRNX1RBQkxFX1NJWkVfOTJDCTM3CiNkZWZpbmUJT0ZETV9UQUJMRV9TSVpFXzkyRAk0MwojZGVmaW5lCUNDS19UQUJMRV9TSVpFCQkzMwoKZXh0ZXJuCXUzMiBPRkRNU3dpbmdUYWJsZTIzQVtPRkRNX1RBQkxFX1NJWkVfOTJEXTsKZXh0ZXJuCXU4IENDS1N3aW5nVGFibGVfQ2gxX0NoMTMyM0FbQ0NLX1RBQkxFX1NJWkVdWzhdOwpleHRlcm4JdTggQ0NLU3dpbmdUYWJsZV9DaDE0MjNBIFtDQ0tfVEFCTEVfU0laRV1bOF07CgoKCi8qICAyMDEwMDUxNCBKb3NlcGg6IEFkZCBkZWZpbml0aW9uIGZvciBhbnRlbm5hIHN3aXRjaGluZyB0ZXN0IGFmdGVyIGxpbmsuICovCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHRoZSBzdGVwcy4gKi8KLyogIEluIFNXQVdfU1RFUF9QRUFLLCBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGFudGVubmEgYW5kIGxpc3RlbiB0byB0aGUgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluIFNXQVdfU1RFUF9QRUFLICovCi8qICB3aXRoIG9yaWdpbmFsIFJTU0kgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggYW50ZW5uYS4gKi8KI2RlZmluZSBTV0FXX1NURVBfUEVBSwkJMAojZGVmaW5lIFNXQVdfU1RFUF9ERVRFUk1JTkUJMQoKc3RydWN0IGhhbF9kYXRhXzg3MjNhOwoKdm9pZCBPRE1fV3JpdGVfRElHMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwJdTgJQ3VycmVudElHSSk7CnZvaWQgT0RNX1dyaXRlX0NDS19DQ0FfVGhyZXMyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OAlDdXJDQ0tfQ0NBVGhyZXMpOwoKdm9pZCBPRE1fU2V0QW50ZW5uYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHU4IEFudGVubmEpOwoKCiNkZWZpbmUgZG1fUkZfU2F2aW5nCU9ETV9SRl9TYXZpbmcyM2EKdm9pZCBPRE1fUkZfU2F2aW5nMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggYkZvcmNlSW5Ob3JtYWwpOwoKI2RlZmluZSBkbV9DaGVja1RYUG93ZXJUcmFja2luZwkJT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrMjNhCnZvaWQgT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgpib29sIE9ETV9SQVN0YXRlQ2hlY2syM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBzMzIgUlNTSSwgYm9vbCBiRm9yY2VVcGRhdGUsCgkJICAgICAgdTggKnBSQVRSU3RhdGUpOwoKCnUzMiBDb252ZXJ0VG9fZEIyM2EodTMyIFZhbHVlKTsKCnUzMiBHZXRQU0REYXRhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdW5zaWduZWQgaW50IHBvaW50LCB1OCBpbml0aWFsX2dhaW5fcHNkKTsKCnZvaWQgb2RtX0RJRzIzYWJ5UlNTSV9MUFMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCnUzMiBPRE1fR2V0X1JhdGVfQml0bWFwMjNhKHN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEsIHUzMiBtYWNpZCwgdTMyIHJhX21hc2ssIHU4IHJzc2lfbGV2ZWwpOwoKCnZvaWQgT0RNMjNhX0RNSW5pdChzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fRE1XYXRjaGRvZzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpOwoKdm9pZCBPRE1fQ21uSW5mb0luaXQyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBlbnVtIG9kbV9jbW5pbmZvCUNtbkluZm8sIHUzMiBWYWx1ZSk7Cgp2b2lkIE9ETV9DbW5JbmZvUHRyQXJyYXlIb29rMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgZW51bSBvZG1fY21uaW5mbwlDbW5JbmZvLCB1MTYgSW5kZXgsIHZvaWQgKnBWYWx1ZSk7Cgp2b2lkIE9ETV9DbW5JbmZvVXBkYXRlMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIENtbkluZm8sIHU2NCBWYWx1ZSk7Cgp2b2lkIE9ETV9SZXNldElRS1Jlc3VsdChzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fQW50c2VsU3RhdGlzdGljc184OEMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OCBNYWNJZCwgdTMyIFBXREJBbGwsIGJvb2wgaXNDQ0tyYXRlKTsKCnZvaWQgT0RNX1NpbmdsZUR1YWxBbnRlbm5hRGVmYXVsdFNldHRpbmcoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCmJvb2wgT0RNX1NpbmdsZUR1YWxBbnRlbm5hRGV0ZWN0aW9uKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggbW9kZSk7Cgp2b2lkIG9kbV9kdGMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCiNlbmRpZgo=