LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KICNpZmRlZiBfV0lONjQKCS5maWxlCSJsb2cxcGYuUyIKCS50ZXh0CgkuYWxpZ24gNAoJLyogVGhlIGZ5bDJ4cDEgY2FuIG9ubHkgYmUgdXNlZCBmb3IgdmFsdWVzIGluCgkgICAtMSArIHNxcnQoMikgLyAyIDw9IHggPD0gMSAtIHNxcnQoMikgLyAyCgkgICAwLjI5IGlzIGEgc2FmZSB2YWx1ZS4KCSAqLwpsaW1pdDoJLmZsb2F0IDAuMjkKb25lOgkuZmxvYXQgMS4wCi8qCiAqIFVzZSB0aGUgZnlsMnhwMSBmdW5jdGlvbiB3aGVuIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgcmFuZ2UgLTAuMjkgdG8gMC4yOSwKICogb3RoZXJ3aXNlIGZ5bDJ4IHdpdGggdGhlIG5lZWRlZCBleHRyYSBjb21wdXRhdGlvbi4KICovCi5nbG9ibCBfbG9nMXBmOyAKCS5kZWYJX2xvZzFwZjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9sb2cxcGY6Cgltb3ZzcwkleG1tMCwtMTIoJXJzcCkKCWZsZGxuMgoJZmxkcwktMTIoJXJzcCkKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgoKNDoJZmFicwoJZmNvbXBzCWxpbWl0CglmbnN0c3cKCXNhaGYKCWpjCTJmCglmYWRkcwlvbmUKCWZ5bDJ4Cglmc3RwcwktMTIoJXJzcCkKCW1vdnNzCS0xMiglcnNwKSwleG1tMAoJcmV0CgoyOglmeWwyeHAxCglmc3RwcwktMTIoJXJzcCkKCW1vdnNzCS0xMiglcnNwKSwleG1tMAoJcmV0CgozOglqcAk0YgkJLy8gaW4gY2FzZSB4IGlzILFJbmYKCWZzdHAJJXN0KDEpCglmc3RwCSVzdCgxKQoJZnN0cHMJLTEyKCVyc3ApCgltb3ZzcwktMTIoJXJzcCksJXhtbTAKCXJldAojZWxzZQoJLmZpbGUJImxvZzFwZi5TIgoJLnRleHQKCS5hbGlnbiA0CgkvKiBUaGUgZnlsMnhwMSBjYW4gb25seSBiZSB1c2VkIGZvciB2YWx1ZXMgaW4KCSAgIC0xICsgc3FydCgyKSAvIDIgPD0geCA8PSAxIC0gc3FydCgyKSAvIDIKCSAgIDAuMjkgaXMgYSBzYWZlIHZhbHVlLgoJICovCmxpbWl0OgkuZmxvYXQgMC4yOQpvbmU6CS5mbG9hdCAxLjAKLyoKICogVXNlIHRoZSBmeWwyeHAxIGZ1bmN0aW9uIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGluIHRoZSByYW5nZSAtMC4yOSB0byAwLjI5LAogKiBvdGhlcndpc2UgZnlsMnggd2l0aCB0aGUgbmVlZGVkIGV4dHJhIGNvbXB1dGF0aW9uLgogKi8KLmdsb2JsIF9sb2cxcGY7IAoJLmRlZglfbG9nMXBmOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKX2xvZzFwZjoKCWZsZGxuMgoJZmxkcwk0KCVlc3ApCglmeGFtCglmbnN0c3cKCWZsZAklc3QKCXNhaGYKCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYKCjQ6CWZhYnMKCWZjb21wcwlsaW1pdAoJZm5zdHN3CglzYWhmCglqYwkyZgoJZmFkZHMJb25lCglmeWwyeAoJcmV0CgoyOglmeWwyeHAxCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCglyZXQKI2VuZGlmCg==