LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJkYS5oCiAqIFZlcnNpb246ICAgICAgIAogKiBEZXNjcmlwdGlvbjogICAKICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgogKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBNYXIgIDggMTQ6MDY6MTIgMTk5OQogKiBNb2RpZmllZCBhdDogICBTYXQgRGVjIDI1IDE2OjA2OjQyIDE5OTkKICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiAKICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICogICAgICAKICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCiAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqICAKICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIEtFUk5FTF9JUkRBX0gKI2RlZmluZSBLRVJORUxfSVJEQV9ICgovKiBQbGVhc2UgZG8gKm5vdCogYWRkIGFueSAjaW5jbHVkZSBpbiB0aGlzIGZpbGUsIHRoaXMgZmlsZSBpcwogKiBpbmNsdWRlZCBhcy1pcyBpbiB1c2VyIHNwYWNlLgogKiBQbGVhc2UgZml4IHRoZSBjYWxsaW5nIGZpbGUgdG8gcHJvcGVybHkgaW5jbHVkZWQgbmVlZGVkIGZpbGVzIGJlZm9yZQogKiB0aGlzIG9uZSwgb3IgcHJlZmVyYWJseSB0byBpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+IGluc3RlYWQuCiAqIEplYW4gSUkgKi8KCi8qIEhpbnQgYml0IHBvc2l0aW9ucyBmb3IgZmlyc3QgaGludCBieXRlICovCiNkZWZpbmUgSElOVF9QTlAgICAgICAgICAweDAxCiNkZWZpbmUgSElOVF9QREEgICAgICAgICAweDAyCiNkZWZpbmUgSElOVF9DT01QVVRFUiAgICAweDA0CiNkZWZpbmUgSElOVF9QUklOVEVSICAgICAweDA4CiNkZWZpbmUgSElOVF9NT0RFTSAgICAgICAweDEwCiNkZWZpbmUgSElOVF9GQVggICAgICAgICAweDIwCiNkZWZpbmUgSElOVF9MQU4gICAgICAgICAweDQwCiNkZWZpbmUgSElOVF9FWFRFTlNJT04gICAweDgwCgovKiBIaW50IGJpdCBwb3NpdGlvbnMgZm9yIHNlY29uZCBoaW50IGJ5dGUgKGZpcnN0IGV4dGVuc2lvbiBieXRlKSAqLwojZGVmaW5lIEhJTlRfVEVMRVBIT05ZICAgMHgwMQojZGVmaW5lIEhJTlRfRklMRV9TRVJWRVIgMHgwMgojZGVmaW5lIEhJTlRfQ09NTSAgICAgICAgMHgwNAojZGVmaW5lIEhJTlRfTUVTU0FHRSAgICAgMHgwOAojZGVmaW5lIEhJTlRfSFRUUCAgICAgICAgMHgxMAojZGVmaW5lIEhJTlRfT0JFWCAgICAgICAgMHgyMAoKLyogSXJMTVAgY2hhcmFjdGVyIGNvZGUgdmFsdWVzICovCiNkZWZpbmUgQ1NfQVNDSUkgICAgICAgICAweDAwCiNkZWZpbmUJQ1NfSVNPXzg4NTlfMSAgICAweDAxCiNkZWZpbmUJQ1NfSVNPXzg4NTlfMiAgICAweDAyCiNkZWZpbmUJQ1NfSVNPXzg4NTlfMyAgICAweDAzCiNkZWZpbmUJQ1NfSVNPXzg4NTlfNCAgICAweDA0CiNkZWZpbmUJQ1NfSVNPXzg4NTlfNSAgICAweDA1CiNkZWZpbmUJQ1NfSVNPXzg4NTlfNiAgICAweDA2CiNkZWZpbmUJQ1NfSVNPXzg4NTlfNyAgICAweDA3CiNkZWZpbmUJQ1NfSVNPXzg4NTlfOCAgICAweDA4CiNkZWZpbmUJQ1NfSVNPXzg4NTlfOSAgICAweDA5CiNkZWZpbmUgQ1NfVU5JQ09ERSAgICAgICAweGZmCgovKiBUaGVzZSBhcmUgdGhlIGN1cnJlbnRseSBrbm93biBkb25nbGVzICovCnR5cGVkZWYgZW51bSB7CglJUkRBX1RFS1JBTV9ET05HTEUgICAgICAgPSAwLAoJSVJEQV9FU0lfRE9OR0xFICAgICAgICAgID0gMSwKCUlSREFfQUNUSVNZU19ET05HTEUgICAgICA9IDIsCglJUkRBX0FDVElTWVNfUExVU19ET05HTEUgPSAzLAoJSVJEQV9HSVJCSUxfRE9OR0xFICAgICAgID0gNCwKCUlSREFfTElURUxJTktfRE9OR0xFICAgICA9IDUsCglJUkRBX0FJUlBPUlRfRE9OR0xFICAgICAgPSA2LAoJSVJEQV9PTERfQkVMS0lOX0RPTkdMRSAgID0gNywKCUlSREFfRVA3MjExX0lSICAgICAgICAgICA9IDgsCglJUkRBX01DUDIxMjBfRE9OR0xFICAgICAgPSA5LAoJSVJEQV9BQ1QyMDBMX0RPTkdMRSAgICAgID0gMTAsCglJUkRBX01BNjAwX0RPTkdMRSAgICAgICAgPSAxMSwKCUlSREFfVE9JTTMyMzJfRE9OR0xFICAgICA9IDEyLAp9IElSREFfRE9OR0xFOwoKLyogUHJvdG9jb2wgdHlwZXMgdG8gYmUgdXNlZCBmb3IgU09DS19ER1JBTSAqLwplbnVtIHsKCUlSREFQUk9UT19VTklUREFUQSA9IDAsCglJUkRBUFJPVE9fVUxUUkEgICAgPSAxLAoJSVJEQVBST1RPX01BWAp9OwoKI2RlZmluZSBTT0xfSVJMTVAgICAgICAyNjYgLyogU2FtZSBhcyBTT0xfSVJEQSBmb3Igbm93ICovCiNkZWZpbmUgU09MX0lSVFRQICAgICAgMjY2IC8qIFNhbWUgYXMgU09MX0lSREEgZm9yIG5vdyAqLwoKI2RlZmluZSBJUkxNUF9FTlVNREVWSUNFUyAgICAgICAgMQkvKiBSZXR1cm4gZGlzY292ZXJ5IGxvZyAqLwojZGVmaW5lIElSTE1QX0lBU19TRVQgICAgICAgICAgICAyCS8qIFNldCBhbiBhdHRyaWJ1dGUgaW4gbG9jYWwgSUFTICovCiNkZWZpbmUgSVJMTVBfSUFTX1FVRVJZICAgICAgICAgIDMJLyogUXVlcnkgcmVtb3RlIElBUyBmb3IgYXR0cmlidXRlICovCiNkZWZpbmUgSVJMTVBfSElOVFNfU0VUICAgICAgICAgIDQJLyogU2V0IGhpbnQgYml0cyBhZHZlcnRpc2VkICovCiNkZWZpbmUgSVJMTVBfUU9TX1NFVCAgICAgICAgICAgIDUKI2RlZmluZSBJUkxNUF9RT1NfR0VUICAgICAgICAgICAgNgojZGVmaW5lIElSTE1QX01BWF9TRFVfU0laRSAgICAgICA3CiNkZWZpbmUgSVJMTVBfSUFTX0dFVCAgICAgICAgICAgIDgJLyogR2V0IGFuIGF0dHJpYnV0ZSBmcm9tIGxvY2FsIElBUyAqLwojZGVmaW5lIElSTE1QX0lBU19ERUwJCSA5CS8qIFJlbW92ZSBhdHRyaWJ1dGUgZnJvbSBsb2NhbCBJQVMgKi8KI2RlZmluZSBJUkxNUF9ISU5UX01BU0tfU0VUCTEwCS8qIFNldCBkaXNjb3ZlcnkgZmlsdGVyICovCiNkZWZpbmUgSVJMTVBfV0FJVERFVklDRQkxMQkvKiBXYWl0IGZvciBhIG5ldyBkaXNjb3ZlcnkgKi8KCiNkZWZpbmUgSVJUVFBfTUFYX1NEVV9TSVpFIElSTE1QX01BWF9TRFVfU0laRSAvKiBDb21wYXRpYmlsaXR5ICovCgojZGVmaW5lIElBU19NQVhfU1RSSU5HICAgICAgICAgMjU2CS8qIFNlZSBJckxNUCAxLjEsIDQuMy4zLjIgKi8KI2RlZmluZSBJQVNfTUFYX09DVEVUX1NUUklORyAgMTAyNAkvKiBTZWUgSXJMTVAgMS4xLCA0LjMuMy4yICovCiNkZWZpbmUgSUFTX01BWF9DTEFTU05BTUUgICAgICAgNjAJLyogU2VlIElyTE1QIDEuMSwgNC4zLjEgKi8KI2RlZmluZSBJQVNfTUFYX0FUVFJJQk5BTUUgICAgICA2MAkvKiBTZWUgSXJMTVAgMS4xLCA0LjMuMy4xICovCiNkZWZpbmUgSUFTX01BWF9BVFRSSUJOVU1CRVIgICAyNTYJLyogU2VlIElyTE1QIDEuMSwgNC4zLjMuMSAqLwovKiBGb3IgdXNlciBzcGFjZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IC0gbWF5IGJlIGZpeGVkIGluIGtlcm5lbCAyLjUuWAogKiBOb3RlIDogbmVlZCA2MCsxICgnXDAnKSwgbWFrZSBpdCA2NCBmb3IgYWxpZ25lbWVudCAtIEplYW4gSUkgKi8KI2RlZmluZSBJQVNfRVhQT1JUX0NMQVNTTkFNRSAgICAgICA2NAojZGVmaW5lIElBU19FWFBPUlRfQVRUUklCTkFNRSAgICAgMjU2CgovKiBBdHRyaWJ1dGUgdHlwZSBuZWVkZWQgZm9yIHN0cnVjdCBpcmRhX2lhc19zZXQgKi8KI2RlZmluZSBJQVNfTUlTU0lORyAwCiNkZWZpbmUgSUFTX0lOVEVHRVIgMQojZGVmaW5lIElBU19PQ1RfU0VRIDIKI2RlZmluZSBJQVNfU1RSSU5HICAzCgojZGVmaW5lIExTQVBfQU5ZICAgICAgICAgICAgICAweGZmCgpzdHJ1Y3Qgc29ja2FkZHJfaXJkYSB7CglzYV9mYW1pbHlfdCBzaXJfZmFtaWx5OyAgIC8qIEFGX0lSREEgKi8KCV9fdTggICAgICAgIHNpcl9sc2FwX3NlbDsgLyogTFNBUCBzZWxlY3RvciAqLwoJX191MzIgICAgICAgc2lyX2FkZHI7ICAgICAvKiBEZXZpY2UgYWRkcmVzcyAqLwoJY2hhciAgICAgICAgc2lyX25hbWVbMjVdOyAvKiBVc3VhbGx5IDxzZXJ2aWNlPjpJckRBOlRpbnlUUCAqLwp9OwoKc3RydWN0IGlyZGFfZGV2aWNlX2luZm8gewoJX191MzIgICAgICAgc2FkZHI7ICAgIC8qIEFkZHJlc3Mgb2YgbG9jYWwgaW50ZXJmYWNlICovCglfX3UzMiAgICAgICBkYWRkcjsgICAgLyogQWRkcmVzcyBvZiByZW1vdGUgZGV2aWNlICovCgljaGFyICAgICAgICBpbmZvWzIyXTsgLyogRGVzY3JpcHRpb24gKi8KCV9fdTggICAgICAgIGNoYXJzZXQ7ICAvKiBDaGFyc2V0IHVzZWQgZm9yIGRlc2NyaXB0aW9uICovCglfX3U4ICAgICAgICBoaW50c1syXTsgLyogSGludCBiaXRzICovCn07CgpzdHJ1Y3QgaXJkYV9kZXZpY2VfbGlzdCB7CiAgICAgICBfX3UzMiBsZW47CiAgICAgICBzdHJ1Y3QgaXJkYV9kZXZpY2VfaW5mbyBkZXZbMV07Cn07CgpzdHJ1Y3QgaXJkYV9pYXNfc2V0IHsKCWNoYXIgaXJkYV9jbGFzc19uYW1lW0lBU19FWFBPUlRfQ0xBU1NOQU1FXTsKCWNoYXIgaXJkYV9hdHRyaWJfbmFtZVtJQVNfRVhQT1JUX0FUVFJJQk5BTUVdOwoJdW5zaWduZWQgaW50IGlyZGFfYXR0cmliX3R5cGU7Cgl1bmlvbiB7CgkJdW5zaWduZWQgaW50IGlyZGFfYXR0cmliX2ludDsKCQlzdHJ1Y3QgewoJCQl1bnNpZ25lZCBzaG9ydCBsZW47CgkJCV9fdTggb2N0ZXRfc2VxW0lBU19NQVhfT0NURVRfU1RSSU5HXTsKCQl9IGlyZGFfYXR0cmliX29jdGV0X3NlcTsKCQlzdHJ1Y3QgewoJCQlfX3U4IGxlbjsKCQkJX191OCBjaGFyc2V0OwoJCQlfX3U4IHN0cmluZ1tJQVNfTUFYX1NUUklOR107CgkJfSBpcmRhX2F0dHJpYl9zdHJpbmc7Cgl9IGF0dHJpYnV0ZTsKCV9fdTMyICAgICAgIGRhZGRyOyAgICAvKiBBZGRyZXNzIG9mIGRldmljZSAoZm9yIHNvbWUgcXVlcmllcyBvbmx5KSAqLwp9OwoKLyogU29tZSBwcml2YXRlIElPQ1RMJ3MgKG1heCAxNikgKi8KI2RlZmluZSBTSU9DU0RPTkdMRSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAwKQojZGVmaW5lIFNJT0NHRE9OR0xFICAgIChTSU9DREVWUFJJVkFURSArIDEpCiNkZWZpbmUgU0lPQ1NCQU5EV0lEVEggKFNJT0NERVZQUklWQVRFICsgMikKI2RlZmluZSBTSU9DU01FRElBQlVTWSAoU0lPQ0RFVlBSSVZBVEUgKyAzKQojZGVmaW5lIFNJT0NHTUVESUFCVVNZIChTSU9DREVWUFJJVkFURSArIDQpCiNkZWZpbmUgU0lPQ0dSRUNFSVZJTkcgKFNJT0NERVZQUklWQVRFICsgNSkKI2RlZmluZSBTSU9DU01PREUgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA2KQojZGVmaW5lIFNJT0NHTU9ERSAgICAgIChTSU9DREVWUFJJVkFURSArIDcpCiNkZWZpbmUgU0lPQ1NEVFJSVFMgICAgKFNJT0NERVZQUklWQVRFICsgOCkKI2RlZmluZSBTSU9DR1FPUyAgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA5KQoKLyogTm8gcmVhc29uIHRvIGluY2x1ZGUgPGxpbnV4L2lmLmg+IGp1c3QgYmVjYXVzZSBvZiB0aGlzIG9uZSA7LSkgKi8KI2RlZmluZSBJUk5BTVNJWiAxNiAKCi8qIElyREEgcXVhbGl0eSBvZiBzZXJ2aWNlIGluZm9ybWF0aW9uIChtdXN0IG5vdCBleGNlZWQgMTYgYnl0ZXMpICovCnN0cnVjdCBpZl9pcmRhX3FvcyB7Cgl1bnNpZ25lZCBsb25nICBiYXVkcmF0ZTsKCXVuc2lnbmVkIHNob3J0IGRhdGFfc2l6ZTsKCXVuc2lnbmVkIHNob3J0IHdpbmRvd19zaXplOwoJdW5zaWduZWQgc2hvcnQgbWluX3R1cm5fdGltZTsKCXVuc2lnbmVkIHNob3J0IG1heF90dXJuX3RpbWU7Cgl1bnNpZ25lZCBjaGFyICBhZGRfYm9mczsKCXVuc2lnbmVkIGNoYXIgIGxpbmtfZGlzYzsKfTsKCi8qIEZvciBzZXR0aW5nIFJUUyBhbmQgRFRSIGxpbmVzIG9mIGEgZG9uZ2xlICovCnN0cnVjdCBpZl9pcmRhX2xpbmUgewoJX191OCBkdHI7CglfX3U4IHJ0czsKfTsKCi8qIElyREEgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gKGRhdGEgcGFydCBtdXN0IG5vdCBleGNlZWQgMTYgYnl0ZXMpICovCnN0cnVjdCBpZl9pcmRhX3JlcSB7Cgl1bmlvbiB7CgkJY2hhciBpZnJuX25hbWVbSVJOQU1TSVpdOyAgLyogaWYgbmFtZSwgZS5nLiAiaXJkYTAiICovCgl9IGlmcl9pZnJuOwoJCgkvKiBEYXRhIHBhcnQgKi8KCXVuaW9uIHsKCQlzdHJ1Y3QgaWZfaXJkYV9saW5lIGlmcnVfbGluZTsKCQlzdHJ1Y3QgaWZfaXJkYV9xb3MgIGlmcnVfcW9zOwoJCXVuc2lnbmVkIHNob3J0ICAgICAgaWZydV9mbGFnczsKCQl1bnNpZ25lZCBpbnQgICAgICAgIGlmcnVfcmVjZWl2aW5nOwoJCXVuc2lnbmVkIGludCAgICAgICAgaWZydV9tb2RlOwoJCXVuc2lnbmVkIGludCAgICAgICAgaWZydV9kb25nbGU7Cgl9IGlmcl9pZnJ1Owp9OwoKI2RlZmluZSBpZnJfYmF1ZHJhdGUgIGlmcl9pZnJ1LmlmcnVfcW9zLmJhdWRyYXRlCiNkZWZpbmUgaWZyX3JlY2VpdmluZyBpZnJfaWZydS5pZnJ1X3JlY2VpdmluZyAKI2RlZmluZSBpZnJfZG9uZ2xlICAgIGlmcl9pZnJ1LmlmcnVfZG9uZ2xlCiNkZWZpbmUgaWZyX21vZGUgICAgICBpZnJfaWZydS5pZnJ1X21vZGUKI2RlZmluZSBpZnJfZHRyICAgICAgIGlmcl9pZnJ1LmlmcnVfbGluZS5kdHIKI2RlZmluZSBpZnJfcnRzICAgICAgIGlmcl9pZnJ1LmlmcnVfbGluZS5ydHMKCiNlbmRpZiAvKiBLRVJORUxfSVJEQV9IICovCgoKCgo=