LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKiAKICogQ29udHJpYnV0b3JzOgogKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbDsKCmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLyoqCiAqIEFuIGV2ZW50IGZpcmVkIHdoZW4gYSBtb2R1bGUgY2hhbmdlcy4KICogCiAqIEBzaW5jZSAxLjAKICovCnB1YmxpYyBjbGFzcyBNb2R1bGVFdmVudCB7Cglwcml2YXRlIElNb2R1bGUgbW9kdWxlOwoJcHJpdmF0ZSBib29sZWFuIGlzQ2hhbmdlZDsKCXByaXZhdGUgSU1vZHVsZVtdIGFkZGVkOwoJcHJpdmF0ZSBJTW9kdWxlW10gY2hhbmdlZDsKCXByaXZhdGUgSU1vZHVsZVtdIHJlbW92ZWQ7CgoJY2xhc3MgSU1vZHVsZUFydGlmYWN0IHsKCQlJUGF0aCBwYXRoOwoJCWxvbmcgdGltZXN0YW1wOwoJfQoKCS8qKgoJICogQ3JlYXRlIGEgbmV3IG1vZHVsZSBldmVudC4KCSAqIAoJICogQHBhcmFtIG1vZHVsZSB0aGUgbW9kdWxlIHRoYXQgaGFzIGJlZW4gY2hhbmdlZAoJICogQHBhcmFtIGlzQ2hhbmdlZCB0cnVlIGlmIHRoZSBtb2R1bGUgaGFzIGNoYW5nZWQKCSAqIEBwYXJhbSBhZGRlZCBhZGRlZCBjaGlsZCBtb2R1bGVzCgkgKiBAcGFyYW0gY2hhbmdlZCBjaGFuZ2VkIGNoaWxkIG1vZHVsZXMKCSAqIEBwYXJhbSByZW1vdmVkIHJlbW92ZWQgY2hpbGQgbW9kdWxlcwoJICovCglwdWJsaWMgTW9kdWxlRXZlbnQoSU1vZHVsZSBtb2R1bGUsIGJvb2xlYW4gaXNDaGFuZ2VkLCBJTW9kdWxlW10gYWRkZWQsIElNb2R1bGVbXSBjaGFuZ2VkLCBJTW9kdWxlW10gcmVtb3ZlZCkgewoJCXRoaXMubW9kdWxlID0gbW9kdWxlOwoJCXRoaXMuaXNDaGFuZ2VkID0gaXNDaGFuZ2VkOwoJCXRoaXMuYWRkZWQgPSBhZGRlZDsKCQl0aGlzLmNoYW5nZWQgPSBjaGFuZ2VkOwoJCXRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBtb2R1bGUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLgoJICoKCSAqIEByZXR1cm4gdGhlIG1vZHVsZQoJICovCglwdWJsaWMgSU1vZHVsZSBnZXRNb2R1bGUoKSB7CgkJcmV0dXJuIG1vZHVsZTsKCX0KCgkvKioKCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1vZHVsZSdzIHNldHRpbmdzIGhhdmUgY2hhbmdlZC4KCSAqIAoJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgaGF2ZSBjaGFuZ2VkCgkgKi8KCXB1YmxpYyBib29sZWFuIGlzQ2hhbmdlZCgpIHsKCQlyZXR1cm4gaXNDaGFuZ2VkOwoJfQoKCS8qKgoJICogUmV0dXJucyBhbnkgY2hpbGQgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZC4KCSAqIAoJICogQHJldHVybiB0aGUgYWRkZWQgY2hpbGQgbW9kdWxlcywgb3IgbnVsbCBpZiBubyBtb2R1bGVzIGhhdmUgYmVlbiBhZGRlZAoJICovCglwdWJsaWMgSU1vZHVsZVtdIGdldEFkZGVkQ2hpbGRNb2R1bGVzKCkgewoJCXJldHVybiBhZGRlZDsKCX0KCgkvKioKCSAqIFJldHVybnMgYW55IGNoaWxkIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZC4KCSAqIAoJICogQHJldHVybiB0aGUgY2hhbmdlZCBjaGlsZCBtb2R1bGVzLCBvciBudWxsIGlmIG5vIG1vZHVsZXMgaGF2ZSBiZWVuIGNoYW5nZWQKCSAqLwoJcHVibGljIElNb2R1bGVbXSBnZXRDaGFuZ2VkQ2hpbGRNb2R1bGVzKCkgewoJCXJldHVybiBjaGFuZ2VkOwoJfQoKCS8qKgoJICogUmV0dXJucyBhbnkgY2hpbGQgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLgoJICogCgkgKiBAcmV0dXJuIHRoZSByZW1vdmVkIGNoaWxkIG1vZHVsZXMsIG9yIG51bGwgaWYgbm8gbW9kdWxlcyBoYXZlIGJlZW4gcmVtb3ZlZAoJICovCglwdWJsaWMgSU1vZHVsZVtdIGdldFJlbW92ZWRDaGlsZE1vZHVsZXMoKSB7CgkJcmV0dXJuIHJlbW92ZWQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBtb2R1bGUgYXJ0aWZhY3RzIHRoYXQgaGF2ZSBjaGFuZ2VkLgoJICogCgkgKiBAcmV0dXJuIHRoZSBjaGFuZ2VkIG1vZHVsZSBhcnRpZmFjdHMKCSAqLwoJcHVibGljIElNb2R1bGVBcnRpZmFjdFtdIGdldENoYW5nZWRBcnRpZmFjdHMoKSB7CgkJcmV0dXJuIG51bGw7Cgl9Cn0=