LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogUHVibGljIGRvbWFpbi4KICoKICogQWRhcHRlZCBmb3IgYGxvbmcgZG91YmxlJyBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPi4KICoKICogQ2hhbmdlZCB0byB1c2UgZnlsMnhwMSBmb3IgdmFsdWVzIG5lYXIgMSwgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqIEFkYXB0ZWQgZm9yIHg4Ni02NCBieSBBbmRyZWFzIEphZWdlciA8YWpAc3VzZS5kZT4uCiAqLwoKI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CgpSQ1NJRCgiJE5ldEJTRDogJCIpCgojaWZkZWYgX19FTEZfXwoJLnNlY3Rpb24gLnJvZGF0YQojZWxzZQoJLnRleHQKI2VuZGlmCgkuYWxpZ24gQUxJR05BUkcoNCkKCUFTTV9UWVBFX0RJUkVDVElWRShvbmUsQG9iamVjdCkKb25lOgkuZG91YmxlIDEuMAoJQVNNX1NJWkVfRElSRUNUSVZFKG9uZSkKCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5CgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovCglBU01fVFlQRV9ESVJFQ1RJVkUobGltaXQsQG9iamVjdCkKbGltaXQ6CS5kb3VibGUgMC4yOQoJQVNNX1NJWkVfRElSRUNUSVZFKGxpbWl0KQoKCiNpZmRlZiBQSUMKI2RlZmluZSBNTyhvcCkgb3AjIyglcmlwKQojZWxzZQojZGVmaW5lIE1PKG9wKSBvcAojZW5kaWYKCgkudGV4dApFTlRSWShfX2llZWU3NTRfbG9nMTBsKQoJZmxkbGcyCQkJLy8gbG9nMTAoMikKCWZsZHQJOCglcnNwKQkJLy8geCA6IGxvZzEwKDIpCglmeGFtCglmbnN0c3cKCWZsZAklc3QJCS8vIHggOiB4IDogbG9nMTAoMikKCXRlc3RiCSQxLCAlYWgKCWpuegkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CWZzdWJsCU1PKG9uZSkJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IGxvZzEwKDIpCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZjb21wbAlNTyhsaW1pdCkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiBsb2cxMCgyKQoJZnlsMnhwMQkJCS8vIGxvZzEwKHgpCglyZXQKCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogbG9nMTAoMikKCWZ5bDJ4CQkJLy8gbG9nMTAoeCkKCXJldAoKMzoJdGVzdGIJJDQsICVhaAoJam56CTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCglyZXQKRU5EKF9faWVlZTc1NF9sb2cxMGwpCg==