LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChjKSAyMDAyIElCTSBDb3JwLiBhbmQgb3RoZXJzLgpBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYwLjUKd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjA1Lmh0bWwKoApDb250cmlidXRvcnM6CiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpwYWNrYWdlIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLnV0aWw7CgppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5DbGFzc0Zvcm1hdEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnV0aWwuSUNsYXNzRmlsZUF0dHJpYnV0ZTsKaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnV0aWwuSUNvbnN0YW50UG9vbDsKaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnV0aWwuSUNvbnN0YW50UG9vbENvbnN0YW50OwppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5JQ29uc3RhbnRQb29sRW50cnk7CgovKioKICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJQ2xhc3NGaWxlQXR0cmlidXRlCiAqLwpwdWJsaWMgY2xhc3MgQ2xhc3NGaWxlQXR0cmlidXRlIGV4dGVuZHMgQ2xhc3NGaWxlU3RydWN0IGltcGxlbWVudHMgSUNsYXNzRmlsZUF0dHJpYnV0ZSB7CglwdWJsaWMgc3RhdGljIGZpbmFsIElDbGFzc0ZpbGVBdHRyaWJ1dGVbXSBOT19BVFRSSUJVVEVTID0gbmV3IElDbGFzc0ZpbGVBdHRyaWJ1dGVbMF07Cglwcml2YXRlIGxvbmcgYXR0cmlidXRlTGVuZ3RoOwoJcHJpdmF0ZSBpbnQgYXR0cmlidXRlTmFtZUluZGV4OwoJcHJpdmF0ZSBjaGFyW10gYXR0cmlidXRlTmFtZTsKCQoJcHVibGljIENsYXNzRmlsZUF0dHJpYnV0ZShieXRlW10gY2xhc3NGaWxlQnl0ZXMsIElDb25zdGFudFBvb2wgY29uc3RhbnRQb29sLCBpbnQgb2Zmc2V0KSB0aHJvd3MgQ2xhc3NGb3JtYXRFeGNlcHRpb24gewoJCXRoaXMuYXR0cmlidXRlTmFtZUluZGV4ID0gdTJBdChjbGFzc0ZpbGVCeXRlcywgMCwgb2Zmc2V0KTsKCQl0aGlzLmF0dHJpYnV0ZUxlbmd0aCA9IHU0QXQoY2xhc3NGaWxlQnl0ZXMsIDIsIG9mZnNldCk7CgkJSUNvbnN0YW50UG9vbEVudHJ5IGNvbnN0YW50UG9vbEVudHJ5ID0gY29uc3RhbnRQb29sLmRlY29kZUVudHJ5KHRoaXMuYXR0cmlidXRlTmFtZUluZGV4KTsKCQlpZiAoY29uc3RhbnRQb29sRW50cnkuZ2V0S2luZCgpICE9IElDb25zdGFudFBvb2xDb25zdGFudC5DT05TVEFOVF9VdGY4KSB7CgkJCXRocm93IG5ldyBDbGFzc0Zvcm1hdEV4Y2VwdGlvbihDbGFzc0Zvcm1hdEV4Y2VwdGlvbi5JTlZBTElEX0NPTlNUQU5UX1BPT0xfRU5UUlkpOwoJCX0KCQl0aGlzLmF0dHJpYnV0ZU5hbWUgPSBjb25zdGFudFBvb2xFbnRyeS5nZXRVdGY4VmFsdWUoKTsKCX0KCglwdWJsaWMgaW50IGdldEF0dHJpYnV0ZU5hbWVJbmRleCgpIHsKCQlyZXR1cm4gdGhpcy5hdHRyaWJ1dGVOYW1lSW5kZXg7Cgl9CgoJLyoqCgkgKiBAc2VlIElDbGFzc0ZpbGVBdHRyaWJ1dGUjZ2V0QXR0cmlidXRlTmFtZSgpCgkgKi8KCXB1YmxpYyBjaGFyW10gZ2V0QXR0cmlidXRlTmFtZSgpIHsKCQlyZXR1cm4gdGhpcy5hdHRyaWJ1dGVOYW1lOwoJfQoKCS8qKgoJICogQHNlZSBJQ2xhc3NGaWxlQXR0cmlidXRlI2dldEF0dHJpYnV0ZUxlbmd0aCgpCgkgKi8KCXB1YmxpYyBsb25nIGdldEF0dHJpYnV0ZUxlbmd0aCgpIHsKCQlyZXR1cm4gdGhpcy5hdHRyaWJ1dGVMZW5ndGg7Cgl9Cgp9Cg==