LyoqCiAqIENvcHlyaWdodCAoYykgMjAxOCBDRUEKICogCiAqICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqICBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogKiAKICogQ29udHJpYnV0b3JzOgogKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAqIAogKi8KcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKCgovKioKICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UHJvcGVydHkgQWZmb3JkYW5jZTwvYj48L2VtPicuCiAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogKgogKiA8cD4KICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgogKiA8L3A+CiAqIDx1bD4KICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlByb3BlcnR5QWZmb3JkYW5jZSNpc09ic2VydmFibGUgPGVtPk9ic2VydmFibGU8L2VtPn08L2xpPgogKiA8L3VsPgogKgogKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0UHJvcGVydHlBZmZvcmRhbmNlKCkKICogQG1vZGVsCiAqIEBnZW5lcmF0ZWQKICovCnB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlBZmZvcmRhbmNlIGV4dGVuZHMgSW50ZXJhY3Rpb25BZmZvcmRhbmNlIHsKCS8qKgoJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+T2JzZXJ2YWJsZTwvYj48L2VtPicgYXR0cmlidXRlLgoJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KCSAqIDxwPgoJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+T2JzZXJ2YWJsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCgkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKiA8L3A+CgkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk9ic2VydmFibGU8L2VtPicgYXR0cmlidXRlLgoJICogQHNlZSAjc2V0T2JzZXJ2YWJsZShib29sZWFuKQoJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldFByb3BlcnR5QWZmb3JkYW5jZV9PYnNlcnZhYmxlKCkKCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2UudW1sMi50eXBlcy5Cb29sZWFuIiBvcmRlcmVkPSJmYWxzZSIKCSAqIEBnZW5lcmF0ZWQKCSAqLwoJYm9vbGVhbiBpc09ic2VydmFibGUoKTsKCgkvKioKCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlByb3BlcnR5QWZmb3JkYW5jZSNpc09ic2VydmFibGUgPGVtPk9ic2VydmFibGU8L2VtPn0nIGF0dHJpYnV0ZS4KCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CgkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk9ic2VydmFibGU8L2VtPicgYXR0cmlidXRlLgoJICogQHNlZSAjaXNPYnNlcnZhYmxlKCkKCSAqIEBnZW5lcmF0ZWQKCSAqLwoJdm9pZCBzZXRPYnNlcnZhYmxlKGJvb2xlYW4gdmFsdWUpOwoKfSAvLyBQcm9wZXJ0eUFmZm9yZGFuY2UK