LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KICNpZmRlZiBfV0lONjQKCS5maWxlCSJsb2cxcGwuUyIKCS50ZXh0CgkuYWxpZ24gNAoJLyogVGhlIGZ5bDJ4cDEgY2FuIG9ubHkgYmUgdXNlZCBmb3IgdmFsdWVzIGluCgkgICAtMSArIHNxcnQoMikgLyAyIDw9IHggPD0gMSAtIHNxcnQoMikgLyAyCgkgICAwLjI5IGlzIGEgc2FmZSB2YWx1ZS4KCSAqLwpsaW1pdDoJLnRmbG9hdCAwLjI5CgkvKiBQbGVhc2Ugbm90ZToJIHdlIHVzZSBhIGRvdWJsZSB2YWx1ZSBoZXJlLiAgU2luY2UgMS4wIGhhcwoJICAgYW4gZXhhY3QgcmVwcmVzZW50YXRpb24gdGhpcyBkb2VzIG5vdCBlZmZlY3QgdGhlIGFjY3VyYWN5CgkgICBidXQgaXQgaGVscHMgdG8gb3B0aW1pemUgdGhlIGNvZGUuICAqLwpvbmU6CS5kb3VibGUgMS4wCgovKgogKiBVc2UgdGhlIGZ5bDJ4cDEgZnVuY3Rpb24gd2hlbiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIHJhbmdlIC0wLjI5IHRvIDAuMjksCiAqIG90aGVyd2lzZSBmeWwyeCB3aXRoIHRoZSBuZWVkZWQgZXh0cmEgY29tcHV0YXRpb24uCiAqLwouZ2xvYmwgX2xvZzFwbDsgCgkuZGVmCV9sb2cxcGw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgpfbG9nMXBsOgoJZmxkbG4yCglmbGR0CSglcmR4KQoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CglmYWJzCglmbGR0CWxpbWl0CglmY29tcHAKCWZuc3RzdwoJc2FoZgoJam5jCTJmCglmYWRkbAlvbmUKCWZ5bDJ4Cgltb3ZxCSVyY3gsJXJheAoJZnN0cHQJKCVyY3gpCglyZXQKCjI6CWZ5bDJ4cDEKCW1vdnEJJXJjeCwlcmF4Cglmc3RwdAkoJXJjeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCW1vdnEJJXJjeCwlcmF4Cglmc3RwdAkoJXJjeCkKCXJldAojZWxzZQoJLmZpbGUJImxvZzFwbC5TIgoJLnRleHQKCS5hbGlnbiA0CgkvKiBUaGUgZnlsMnhwMSBjYW4gb25seSBiZSB1c2VkIGZvciB2YWx1ZXMgaW4KCSAgIC0xICsgc3FydCgyKSAvIDIgPD0geCA8PSAxIC0gc3FydCgyKSAvIDIKCSAgIDAuMjkgaXMgYSBzYWZlIHZhbHVlLgoJICovCmxpbWl0OgkudGZsb2F0IDAuMjkKCS8qIFBsZWFzZSBub3RlOgkgd2UgdXNlIGEgZG91YmxlIHZhbHVlIGhlcmUuICBTaW5jZSAxLjAgaGFzCgkgICBhbiBleGFjdCByZXByZXNlbnRhdGlvbiB0aGlzIGRvZXMgbm90IGVmZmVjdCB0aGUgYWNjdXJhY3kKCSAgIGJ1dCBpdCBoZWxwcyB0byBvcHRpbWl6ZSB0aGUgY29kZS4gICovCm9uZToJLmRvdWJsZSAxLjAKCi8qCiAqIFVzZSB0aGUgZnlsMnhwMSBmdW5jdGlvbiB3aGVuIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgcmFuZ2UgLTAuMjkgdG8gMC4yOSwKICogb3RoZXJ3aXNlIGZ5bDJ4IHdpdGggdGhlIG5lZWRlZCBleHRyYSBjb21wdXRhdGlvbi4KICovCi5nbG9ibCBfbG9nMXBsOyAKCS5kZWYJX2xvZzFwbDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9sb2cxcGw6CglmbGRsbjIKCWZsZHQJNCglZXNwKQoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CglmYWJzCglmbGR0CWxpbWl0CglmY29tcHAKCWZuc3RzdwoJc2FoZgoJam5jCTJmCglmYWRkbAlvbmUKCWZ5bDJ4CglyZXQKCjI6CWZ5bDJ4cDEKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldAojZW5kaWY=