LyogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAogKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKICogZGV0YWlscy4KICovCgovKgogKiBDSEFOTkVMIEd1aWRzCiAqLwoKLyogVXNlZCBpbiBJT0NoYW5uZWwKICogezQxNDgxNWVkLWM1OGMtMTFkYS05NWE5LTAwZTA4MTYxMTY1Zn0KICovCiNkZWZpbmUgVUxUUkFfVkhCQV9DSEFOTkVMX1BST1RPQ09MX0dVSUQgXAoJeyAweDQxNDgxNWVkLCAweGM1OGMsIDB4MTFkYSwgXAoJCXsgMHg5NSwgMHhhOSwgMHgwLCAweGUwLCAweDgxLCAweDYxLCAweDE2LCAweDVmIH0gfQpzdGF0aWMgY29uc3QgR1VJRCBVbHRyYVZoYmFDaGFubmVsUHJvdG9jb2xHdWlkID0KCVVMVFJBX1ZIQkFfQ0hBTk5FTF9QUk9UT0NPTF9HVUlEOwoKLyogVXNlZCBpbiBJT0NoYW5uZWwKICogezhjZDU5OTRkLWM1OGUtMTFkYS05NWE5LTAwZTA4MTYxMTY1Zn0KICovCiNkZWZpbmUgVUxUUkFfVk5JQ19DSEFOTkVMX1BST1RPQ09MX0dVSUQgXAoJeyAweDhjZDU5OTRkLCAweGM1OGUsIDB4MTFkYSwgXAoJCXsgMHg5NSwgMHhhOSwgMHgwLCAweGUwLCAweDgxLCAweDYxLCAweDE2LCAweDVmIH0gfQpzdGF0aWMgY29uc3QgR1VJRCBVbHRyYVZuaWNDaGFubmVsUHJvdG9jb2xHdWlkID0KCVVMVFJBX1ZOSUNfQ0hBTk5FTF9QUk9UT0NPTF9HVUlEOwoKLyogVXNlZCBpbiBJT0NoYW5uZWwKICogezcyMTIwMDA4LTRBQUItMTFEQy04NTMwLTQ0NDU1MzU0NDIwMH0KICovCiNkZWZpbmUgVUxUUkFfU0lPVk1fR1VJRCBcCgl7IDB4NzIxMjAwMDgsIDB4NEFBQiwgMHgxMURDLAkJCQkJXAoJCXsgMHg4NSwgMHgzMCwgMHg0NCwgMHg0NSwgMHg1MywgMHg1NCwgMHg0MiwgMHgwMCB9IH0Kc3RhdGljIGNvbnN0IEdVSUQgVWx0cmFTSU9WTUd1aWQgPSBVTFRSQV9TSU9WTV9HVUlEOwoKCi8qIFVzZWQgaW4gdmlzb3Jub29wL3Zpc29ybm9vcF9tYWluLmMKICogezViNTJjNWFjLWU1ZjUtNGQ0Mi04ZGZmLTQyOWVhZWNkMjIxZn0KICovCiNkZWZpbmUgVUxUUkFfQ09OVFJPTERJUkVDVE9SX0NIQU5ORUxfUFJPVE9DT0xfR1VJRCAgXAoJeyAweDViNTJjNWFjLCAweGU1ZjUsIDB4NGQ0MiwgXAoJCXsgMHg4ZCwgMHhmZiwgMHg0MiwgMHg5ZSwgMHhhZSwgMHhjZCwgMHgyMiwgMHgxZiB9IH0KCnN0YXRpYyBjb25zdCBHVUlEIFVsdHJhQ29udHJvbERpcmVjdG9yQ2hhbm5lbFByb3RvY29sR3VpZCA9CglVTFRSQV9DT05UUk9MRElSRUNUT1JfQ0hBTk5FTF9QUk9UT0NPTF9HVUlEOwoKLyogVXNlZCBpbiB2aXNvcmNoaXBzZXQvdmlzb3JjaGlwc2V0X21haW4uYwogKiB7QjRFNzk2MjUtQUVERS00RUFBLTlFMTEtRDNFRERDRDQ1MDRDfQogKi8KI2RlZmluZSBVTFRSQV9ESUFHX1BPT0xfQ0hBTk5FTF9QUk9UT0NPTF9HVUlECQkJCVwKCXsweGI0ZTc5NjI1LCAweGFlZGUsIDB4NGVhYSwJCQkJCVwKCQl7IDB4OWUsIDB4MTEsIDB4ZDMsIDB4ZWQsIDB4ZGMsIDB4ZDQsIDB4NTAsIDB4NGMgfSB9CgoK