cGFja2FnZSBvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLmludGVybmFsLmNvcmU7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb3B5cmlnaHQgKGMpIDIwMDIgSUJNIENvcnAuIGFuZCBvdGhlcnMuCkFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwphcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjAuNQp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MDUuaHRtbAqgCkNvbnRyaWJ1dG9yczoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKgogKiBSZXByZXNlbnRzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRvIHJ1biB0aGUKICogZXh0ZXJuYWwgdG9vbHMuCiAqLwpwdWJsaWMgaW50ZXJmYWNlIElSdW5uZXJDb250ZXh0IHsKCS8qKgoJICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZXh0ZXJuYWwgdG9vbC4KCSAqLwoJcHVibGljIFN0cmluZyBnZXROYW1lKCk7CgkKCS8qKgoJICogUmV0dXJucyB0aGUgcGF0aCB3aGVyZSB0aGUgZXh0ZXJuYWwgdG9vbCBpcyBsb2NhdGVkLiBBbGwKCSAqIHZhcmlhYmxlcyBlbWJlZGRlZCBpbiB0aGUgcGF0aCBoYXZlIGJlZW4gZnVsbHkKCSAqIGV4cGFuZGVkLgoJICovCglwdWJsaWMgU3RyaW5nIGdldEV4cGFuZGVkTG9jYXRpb24oKTsKCQoJLyoqCgkgKiBSZXR1cm5zIHRoZSB0YXJnZXRzIGZvciBhbiBBbnQgZmlsZS4gVGhlCgkgKiB0YXJnZXRzIGFyZSBjb2xsZWN0ZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZwoJICogdmFyaWFibGUgdGFncyBpbiB0aGUgZXh0ZXJuYWwgdG9vbCdzIGFyZ3VtZW50cy4KCSAqLwoJcHVibGljIFN0cmluZ1tdIGdldEFudFRhcmdldHMoKTsKCQoJLyoqCgkgKiBSZXR1cm5zIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBleHRlcm5hbCB0b29sLiBBbGwKCSAqIHZhcmlhYmxlcyBlbWJlZGRlZCBpbiB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBmdWxseQoJICogZXhwYW5kZWQuCgkgKi8KCXB1YmxpYyBTdHJpbmcgZ2V0RXhwYW5kZWRBcmd1bWVudHMoKTsKCQoJLyoqCgkgKiBSZXR1cm5zIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byBydW4gdGhlIGV4dGVybmFsIHRvb2wgaW4uCgkgKiBBbGwgdmFyaWFibGVzIGVtYmVkZGVkIGluIHRoZSBwYXRoIGhhdmUgYmVlbiBmdWxseQoJICogZXhwYW5kZWQuCgkgKi8KCXB1YmxpYyBTdHJpbmcgZ2V0RXhwYW5kZWRXb3JraW5nRGlyZWN0b3J5KCk7CgkKCS8qKgoJICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZXhlY3V0aW9uIGxvZyBmb3IgdGhlCgkgKiBleHRlcm5hbCB0b29sIHNob3VsZCBhcHBlYXIgb24gdGhlIGxvZyBjb25zb2xlLgoJICovCglwdWJsaWMgYm9vbGVhbiBnZXRTaG93TG9nKCk7Cn0K