LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDEyIHByb3RvcyBzb2Z0d2FyZSBnbWJoIChodHRwOi8vd3d3LnByb3Rvcy5kZSkuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENPTlRSSUJVVE9SUzoKICogCQlIZW5yaWsgUmVudHotUmVpY2hlcnQgKGluaXRpYWwgY29udHJpYnV0aW9uKQogKiAJCVBldGVyIEthcmxpdHNjaGVrCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLmV0cmljZS5nZW5lcmF0b3IuY3BwLmdlbgoKaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkluamVjdAppbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuU2luZ2xldG9uCmltcG9ydCBvcmcuZWNsaXBzZS5ldHJpY2UuY29yZS5yb29tLkF0dHJpYnV0ZQppbXBvcnQgb3JnLmVjbGlwc2UuZXRyaWNlLmdlbmVyYXRvci5nZW5lcmljLklMYW5ndWFnZUV4dGVuc2lvbgppbXBvcnQgb3JnLmVjbGlwc2UuZXRyaWNlLmdlbmVyYXRvci5nZW5lcmljLlR5cGVIZWxwZXJzCgpAU2luZ2xldG9uCmNsYXNzIEluaXRpYWxpemF0aW9uIHsKCglASW5qZWN0IElMYW5ndWFnZUV4dGVuc2lvbiBsYW5ndWFnZUV4dAoJQEluamVjdCBUeXBlSGVscGVycyB0eXBlSGVscGVycwoKCWRlZiBnZW5lcmF0ZUN0b3JJbml0aWFsaXplckxpc3QoSXRlcmFibGU8PyBleHRlbmRzIENoYXJTZXF1ZW5jZT4gaXRlbXMpewoJCWlmKGl0ZW1zLmVtcHR5KSByZXR1cm4gJycKCQknJycKCQkJOiCraXRlbXMuaGVhZLsKCQkJq0ZPUiBpdGVtIDogaXRlbXMudGFpbLsKCQkJCSwgq2l0ZW27CgkJCatFTkRGT1K7CgkJJycnCgl9CgoJLyoKCSAqICBHZW5lcmF0ZSBhcnJheSBhbmQgc3RydWN0IGluaXRpYWxpemF0aW9uCgkgKi8KCWRlZiBnZW5FeHRyYUluaXRpYWxpemVycyhJdGVyYWJsZTxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMpIHsKCQl2YWwgZXh0cmFJbml0QXR0cnMgPSBhdHRyaWJ1dGVzLmZpbHRlcltpbml0aWFsaXplckxpc3RWYWx1ZSA9PSBudWxsICYmIGluaXRWYWx1ZSAhPSBudWxsICYmIGluaXRWYWx1ZS5zdGFydHNXaXRoKCd7JyldCgkJaWYoZXh0cmFJbml0QXR0cnMuZW1wdHkpIHJldHVybiAnJwoJCScnJwoJCQkvLyBleHRyYSBpbml0aWFsaXphdGlvbgoJCQmrRk9SIGl0IDogZXh0cmFJbml0QXR0cnMuZmlsdGVyW3NpemUgPiAwXbsKCQkJCat0eXBlSGVscGVycy5nZXRUeXBlTmFtZShpdCm7IKtuYW1lu0luaXRWYWx1ZXNbq3NpemW7XSA9IKtpbml0VmFsdWW7OwoJCQkJq25hbWW7ID0gq25hbWW7SW5pdFZhbHVlczsKCQkJq0VOREZPUrsKCQkJq0ZPUiBpdCA6IGV4dHJhSW5pdEF0dHJzLmZpbHRlcltzaXplID09IDBduwoJCQkJq3R5cGVIZWxwZXJzLmdldFR5cGVOYW1lKGl0Kbsgq25hbWW7SW5pdFZhbHVlID0gq2luaXRWYWx1Zbs7CgkJCQmrbmFtZbsgPSCrbmFtZbtJbml0VmFsdWU7CgkJCatFTkRGT1K7CgkJJycnCgl9CgoJZGVmIFN0cmluZyBnZXRJbml0aWFsaXplckxpc3RWYWx1ZShBdHRyaWJ1dGUgYXR0cmlidXRlKSB7CgkJdmFsIGluaXRWYWx1ZSA9IGF0dHJpYnV0ZS5pbml0VmFsdWUKCQlyZXR1cm4gaWYoaW5pdFZhbHVlICE9IG51bGwgJiYgaW5pdFZhbHVlLnN0YXJ0c1dpdGgoJ3snKSkgbnVsbCBlbHNlIGluaXRWYWx1ZQoJfQoKCWRlZiBwcm90ZWN0ZWQgZ2V0SW5pdFZhbHVlKEF0dHJpYnV0ZSBhdHRyaWJ1dGUpIHsKCQlzd2l0Y2ggaXQgOiBhdHRyaWJ1dGUgewoJCQljYXNlIGRlZmF1bHRWYWx1ZUxpdGVyYWwgIT0gbnVsbDogZGVmYXVsdFZhbHVlTGl0ZXJhbAoJCQljYXNlIHR5cGUucmVmOiBsYW5ndWFnZUV4dC5udWxsUG9pbnRlcgoJCQlkZWZhdWx0OiBsYW5ndWFnZUV4dC5kZWZhdWx0VmFsdWUodHlwZS50eXBlKQoJCX0KCX0KCn0K