From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Guilhem Bonnefille" Subject: [PATCH] [EGit] Indroduce GitAction class Date: Fri, 19 Jan 2007 22:32:37 +0100 Message-ID: <8b65902a0701191332n5055a28bi59600e35140582de@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_138735_11190969.1169242357139" X-From: git-owner@vger.kernel.org Fri Jan 19 22:32:46 2007 Return-path: Envelope-to: gcvg-git@gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1H81Lo-0007RC-BI for gcvg-git@gmane.org; Fri, 19 Jan 2007 22:32:45 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964920AbXASVcj (ORCPT ); Fri, 19 Jan 2007 16:32:39 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964925AbXASVcj (ORCPT ); Fri, 19 Jan 2007 16:32:39 -0500 Received: from wr-out-0506.google.com ([64.233.184.230]:22461 "EHLO wr-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964920AbXASVci (ORCPT ); Fri, 19 Jan 2007 16:32:38 -0500 Received: by wr-out-0506.google.com with SMTP id 68so537604wra for ; Fri, 19 Jan 2007 13:32:37 -0800 (PST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type; b=ZF0UtgUshrkh7i0YpTiSL0dvjwQ89X0ZuD4p/k3+M+8UAQv+9K7UbUxeIZCglmt6yjk+ekUVM/c4RGKLdQw52UIRhDyNmPs5NtiA+0DQgdvIuYOSi+74d7B8+MGyhNlLh+QxF9ayuzIRUKWz4TuIsz61KWy9m/sGbVb0Mz7cqp0= Received: by 10.90.69.8 with SMTP id r8mr3577543aga.1169242357238; Fri, 19 Jan 2007 13:32:37 -0800 (PST) Received: by 10.90.51.16 with HTTP; Fri, 19 Jan 2007 13:32:37 -0800 (PST) To: git@vger.kernel.org Sender: git-owner@vger.kernel.org Precedence: bulk X-Mailing-List: git@vger.kernel.org Archived-At: ------=_Part_138735_11190969.1169242357139 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, I introduce GitAction as base class for all actions. It allows to disable the action menu item if the selection does not live in a Git controlled repository. The current code is quite "gruik". It is mainly based on copy/paste from other plugins. A better solution could be to avoid inserting EGit actions in menus if the selection does not live in a Git repo. (some plugin.xml hack) -- Guilhem BONNEFILLE -=- #UIN: 15146515 JID: guyou@im.apinc.org MSN: guilhem_bonnefille@hotmail.com -=- mailto:guilhem.bonnefille@gmail.com -=- http://nathguil.free.fr/ ------=_Part_138735_11190969.1169242357139 Content-Type: text/x-patch; name=GitAction.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ex54mo64 Content-Disposition: attachment; filename="GitAction.patch" ZGlmZiAtLWdpdCBhL29yZy5zcGVhcmNlLmVnaXQuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBi L29yZy5zcGVhcmNlLmVnaXQuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBiNzMwMWE2 Li5iN2RkMTBkIDEwMDY0NAotLS0gYS9vcmcuc3BlYXJjZS5lZ2l0LmNvcmUvTUVUQS1JTkYvTUFO SUZFU1QuTUYKKysrIGIvb3JnLnNwZWFyY2UuZWdpdC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1G CkBAIC0xNyw2ICsxNyw4IEBAIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRp bWUsCiAgb3JnLmVjbGlwc2UudWkuaWRlLAogIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKICBv cmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcgotRXhwb3J0LVBhY2thZ2U6IG9yZy5z cGVhcmNlLmVnaXQuY29yZS5vcCwKK0V4cG9ydC1QYWNrYWdlOiBvcmcuc3BlYXJjZS5lZ2l0LmNv cmUsCisgb3JnLnNwZWFyY2UuZWdpdC5jb3JlLmludGVybmFsLm1hcHBpbmc7eC1pbnRlcm5hbDo9 dHJ1ZSwKKyBvcmcuc3BlYXJjZS5lZ2l0LmNvcmUub3AsCiAgb3JnLnNwZWFyY2UuZWdpdC5jb3Jl LnByb2plY3QKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9vcmcuc3BlYXJj ZS5lZ2l0LnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLnNwZWFyY2UuZWdpdC51aS9NRVRB LUlORi9NQU5JRkVTVC5NRgppbmRleCBmMTg4NDc4Li5iZjkwNzg0IDEwMDY0NAotLS0gYS9vcmcu c3BlYXJjZS5lZ2l0LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5zcGVhcmNlLmVn aXQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTE0LDUgKzE0LDYgQEAgUmVxdWlyZS1CdW5k bGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKICBvcmcuc3BlYXJjZS5qZ2l0LAogIG9yZy5z cGVhcmNlLmVnaXQuY29yZSwKICBvcmcuZWNsaXBzZS5jb21wYXJlLAotIG9yZy5lY2xpcHNlLmNv cmUuZmlsZXN5c3RlbQorIG9yZy5lY2xpcHNlLmNvcmUuZmlsZXN5c3RlbSwKKyBvcmcuZWNsaXBz ZS5qZmFjZS50ZXh0CiBFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLnNw ZWFyY2UuZWdpdC51aS9zcmMvb3JnL3NwZWFyY2UvZWdpdC91aS9BY3RpdmF0b3IuamF2YSBiL29y Zy5zcGVhcmNlLmVnaXQudWkvc3JjL29yZy9zcGVhcmNlL2VnaXQvdWkvQWN0aXZhdG9yLmphdmEK aW5kZXggZDFhOGQ3Yy4uYzY4ZTE1OCAxMDA2NDQKLS0tIGEvb3JnLnNwZWFyY2UuZWdpdC51aS9z cmMvb3JnL3NwZWFyY2UvZWdpdC91aS9BY3RpdmF0b3IuamF2YQorKysgYi9vcmcuc3BlYXJjZS5l Z2l0LnVpL3NyYy9vcmcvc3BlYXJjZS9lZ2l0L3VpL0FjdGl2YXRvci5qYXZhCkBAIC0yMCw4ICsy MCwxMiBAQCBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CiBp bXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlw c2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGlt ZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UudGVhbS5jb3JlLlRlYW1FeGNlcHRpb247Citp bXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uu dWkuSVdvcmtiZW5jaFdpbmRvdzsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJh Y3RVSVBsdWdpbjsKIGltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKK2lt cG9ydCBvcmcuc3BlYXJjZS5lZ2l0LmNvcmUuR2l0UHJvdmlkZXI7CiAKIHB1YmxpYyBjbGFzcyBB Y3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKICAgICBwcml2YXRlIHN0YXRpYyBB Y3RpdmF0b3IgcGx1Z2luOwpAQCAtMzQsNiArMzgsMjggQEAgcHVibGljIGNsYXNzIEFjdGl2YXRv ciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewogCXJldHVybiBnZXREZWZhdWx0KCkuZ2V0QnVu ZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogVGhpcyBp cyB0aGUgcHJvdmlkZXIgSUQgb2YgdGhlIHBsdWdpbiBhcyBkZWZpbmVkIGluIHRoZSBwbHVnaW4u eG1sCisgICAgICogRklYTUUgSW5zcGlyZWQvQ29waWVkIGZyb20gRmlsZVN5c3RlbSBleGFtcGxl LiBTcGVjaWFsaXplIHRvIEVHaXQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBn ZXRQbHVnaW5Qcm92aWRlcklkKCkgeworCXJldHVybiBHaXRQcm92aWRlci5jbGFzcy5nZXROYW1l KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGdldCB0 aGUgY3VycmVudGx5IGFjdGl2ZSB3b3JrYmVuY2ggcGFnZS4gTm90ZSB0aGF0CisgICAgICogdGhl IGFjdGl2ZSBwYWdlIG1heSBub3QgYmUgdGhlIG9uZSB0aGF0IHRoZSB1c3IgcGVyY2VpdmVzIGFz IGFjdGl2ZSBpbgorICAgICAqIHNvbWUgc2l0dWF0aW9ucyBzbyB0aGlzIG1ldGhvZCBvZiBvYnRh aW5pbmcgdGhlIGFjdGl2YWUgcGFnZSBzaG91bGQgb25seQorICAgICAqIGJlIHVzZWQgaWYgbm8g b3RoZXIgbWV0aG9kIGlzIGF2YWlsYWJsZS4KKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRoZSBh Y3RpdmUgd29ya2JlbmNoIHBhZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIElXb3JrYmVu Y2hQYWdlIGdldEFjdGl2ZVBhZ2UoKSB7CisgICAgCUlXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0g Z2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwor ICAgIAlpZiAod2luZG93ID09IG51bGwpIHJldHVybiBudWxsOworICAgIAlyZXR1cm4gd2luZG93 LmdldEFjdGl2ZVBhZ2UoKTsKKyAgICB9CisKICAgICBwdWJsaWMgc3RhdGljIENvcmVFeGNlcHRp b24gZXJyb3IoZmluYWwgU3RyaW5nIG1lc3NhZ2UsIGZpbmFsIFRocm93YWJsZSB0aHIpIHsKIAly ZXR1cm4gbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBnZXRQbHVn aW5JZCgpLCAwLAogCQltZXNzYWdlLCB0aHIpKTsKQEAgLTQzLDYgKzY5LDEwIEBAIHB1YmxpYyBj bGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKIAlnZXREZWZhdWx0KCku Z2V0TG9nKCkubG9nKAogCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIGdldFBsdWdpbklkKCks IDAsIG1lc3NhZ2UsIHRocikpOwogICAgIH0KKyAgICAKKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9n KFRlYW1FeGNlcHRpb24gZSkgeworCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKG5ldyBTdGF0 dXMoZS5nZXRTdGF0dXMoKS5nZXRTZXZlcml0eSgpLCBnZXRQbHVnaW5JZCgpLCAwLCAic2ltcGxl SW50ZXJuYWwiLCBlKSk7IC8vJE5PTi1OTFMtMSQKKwl9CiAKICAgICBwcml2YXRlIHN0YXRpYyBi b29sZWFuIGlzT3B0aW9uU2V0KGZpbmFsIFN0cmluZyBvcHRpb25JZCkgewogCWZpbmFsIFN0cmlu ZyBvcHRpb24gPSBnZXRQbHVnaW5JZCgpICsgb3B0aW9uSWQ7CmRpZmYgLS1naXQgYS9vcmcuc3Bl YXJjZS5lZ2l0LnVpL3NyYy9vcmcvc3BlYXJjZS9lZ2l0L3VpL2ludGVybmFsL2FjdGlvbnMvQWJz dHJhY3RPcGVyYXRpb25BY3Rpb24uamF2YSBiL29yZy5zcGVhcmNlLmVnaXQudWkvc3JjL29yZy9z cGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9ucy9BYnN0cmFjdE9wZXJhdGlvbkFjdGlvbi5q YXZhCmluZGV4IDc1OTE4OWUuLmQyYWY5ZGUgMTAwNjQ0Ci0tLSBhL29yZy5zcGVhcmNlLmVnaXQu dWkvc3JjL29yZy9zcGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9ucy9BYnN0cmFjdE9wZXJh dGlvbkFjdGlvbi5qYXZhCisrKyBiL29yZy5zcGVhcmNlLmVnaXQudWkvc3JjL29yZy9zcGVhcmNl L2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9ucy9BYnN0cmFjdE9wZXJhdGlvbkFjdGlvbi5qYXZhCkBA IC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIG9yZy5zcGVhcmNlLmVnaXQudWkuaW50ZXJuYWwuYWN0 aW9uczsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRp b247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0 OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxl OwpAQCAtMjgsMjkgKzI3LDE1IEBAIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3Rh dHVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwogaW1wb3J0IG9y Zy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRXJyb3JEaWFsb2c7CiBpbXBvcnQgb3JnLmVjbGlwc2Uu amZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBz ZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmll d2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JT2JqZWN0 QWN0aW9uRGVsZWdhdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CiBp bXBvcnQgb3JnLnNwZWFyY2UuZWdpdC51aS5BY3RpdmF0b3I7CiBpbXBvcnQgb3JnLnNwZWFyY2Uu ZWdpdC51aS5VSVRleHQ7CiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE9wZXJhdGlv bkFjdGlvbiBpbXBsZW1lbnRzIElPYmplY3RBY3Rpb25EZWxlZ2F0ZSB7CitwdWJsaWMgYWJzdHJh Y3QgY2xhc3MgQWJzdHJhY3RPcGVyYXRpb25BY3Rpb24gZXh0ZW5kcyBHaXRBY3Rpb24gewogICAg IHByaXZhdGUgSVdvcmtiZW5jaFBhcnQgd3A7CiAKICAgICBwcml2YXRlIElXb3Jrc3BhY2VSdW5u YWJsZSBvcDsKIAotICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoZmluYWwgSUFjdGlv biBhY3QsIGZpbmFsIElTZWxlY3Rpb24gc2VsKSB7Ci0JZmluYWwgTGlzdCBzZWxlY3Rpb247Ci0J aWYgKHNlbCBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICFzZWwuaXNFbXB0eSgp KSB7Ci0JICAgIHNlbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbCkudG9MaXN0 KCk7Ci0JfSBlbHNlIHsKLQkgICAgc2VsZWN0aW9uID0gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsK LQl9Ci0Jb3AgPSBjcmVhdGVPcGVyYXRpb24oYWN0LCBzZWxlY3Rpb24pOwotCWFjdC5zZXRFbmFi bGVkKG9wICE9IG51bGwgJiYgd3AgIT0gbnVsbCk7Ci0gICAgfQotCiAgICAgcHVibGljIHZvaWQg c2V0QWN0aXZlUGFydChmaW5hbCBJQWN0aW9uIGFjdCwgZmluYWwgSVdvcmtiZW5jaFBhcnQgcGFy dCkgewogCXdwID0gcGFydDsKICAgICB9CkBAIC02Miw2ICs0Nyw3IEBAIHB1YmxpYyBhYnN0cmFj dCBjbGFzcyBBYnN0cmFjdE9wZXJhdGlvbkFjdGlvbiBpbXBsZW1lbnRzIElPYmplY3RBY3Rpb25E ZWxlZ2F0ZSB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKGZpbmFsIElBY3Rpb24gYWN0 KSB7CisJb3AgPSBjcmVhdGVPcGVyYXRpb24oYWN0LCBnZXRTZWxlY3Rpb24oKS50b0xpc3QoKSk7 CiAJaWYgKG9wICE9IG51bGwpIHsKIAkgICAgdHJ5IHsKIAkJdHJ5IHsKZGlmZiAtLWdpdCBhL29y Zy5zcGVhcmNlLmVnaXQudWkvc3JjL29yZy9zcGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9u cy9Db21wYXJlV2l0aFJldmlzaW9uQWN0aW9uLmphdmEgYi9vcmcuc3BlYXJjZS5lZ2l0LnVpL3Ny Yy9vcmcvc3BlYXJjZS9lZ2l0L3VpL2ludGVybmFsL2FjdGlvbnMvQ29tcGFyZVdpdGhSZXZpc2lv bkFjdGlvbi5qYXZhCmluZGV4IGJiN2ZiYzcuLjIwNTUzNmMgMTAwNjQ0Ci0tLSBhL29yZy5zcGVh cmNlLmVnaXQudWkvc3JjL29yZy9zcGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9ucy9Db21w YXJlV2l0aFJldmlzaW9uQWN0aW9uLmphdmEKKysrIGIvb3JnLnNwZWFyY2UuZWdpdC51aS9zcmMv b3JnL3NwZWFyY2UvZWdpdC91aS9pbnRlcm5hbC9hY3Rpb25zL0NvbXBhcmVXaXRoUmV2aXNpb25B Y3Rpb24uamF2YQpAQCAtMjIsMTIgKzIyLDEwIEBAIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxl OwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKIGltcG9ydCBv cmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qu d2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZWFtLmNvcmUuVGVhbUV4Y2VwdGlv bjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZWFtLmludGVybmFsLnVpLmFjdGlvbnMuVGVhbUFjdGlv bjsKIGltcG9ydCBvcmcuZWNsaXBzZS50ZWFtLnVpLlRlYW1VSTsKIGltcG9ydCBvcmcuZWNsaXBz ZS50ZWFtLnVpLmhpc3RvcnkuSGlzdG9yeVBhZ2VTYXZlYWJsZVBhcnQ7CiAKLXB1YmxpYyBjbGFz cyBDb21wYXJlV2l0aFJldmlzaW9uQWN0aW9uIGV4dGVuZHMgVGVhbUFjdGlvbiB7CitwdWJsaWMg Y2xhc3MgQ29tcGFyZVdpdGhSZXZpc2lvbkFjdGlvbiBleHRlbmRzIEdpdEFjdGlvbiB7CiAKICAg ICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKIAlzdXBlci5ydW4oYWN0aW9uKTsK QEAgLTQ1LDkgKzQzLDQgQEAgcHVibGljIGNsYXNzIENvbXBhcmVXaXRoUmV2aXNpb25BY3Rpb24g ZXh0ZW5kcyBUZWFtQWN0aW9uIHsKICAgICBwcm90ZWN0ZWQgdm9pZCBzaG93Q29tcGFyZUluRGlh bG9nKFNoZWxsIHNoZWxsLCBPYmplY3Qgb2JqZWN0KSB7CiAJSGlzdG9yeVBhZ2VTYXZlYWJsZVBh cnQuc2hvd0hpc3RvcnlJbkRpYWxvZyhzaGVsbCwgb2JqZWN0KTsKICAgICB9Ci0KLSAgICBwcm90 ZWN0ZWQgYm9vbGVhbiBpc0VuYWJsZWQoKSB0aHJvd3MgVGVhbUV4Y2VwdGlvbiB7Ci0JcmV0dXJu ICFnZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCk7Ci0gICAgfQotCiB9CmRpZmYgLS1naXQgYS9vcmcu c3BlYXJjZS5lZ2l0LnVpL3NyYy9vcmcvc3BlYXJjZS9lZ2l0L3VpL2ludGVybmFsL2FjdGlvbnMv R2l0QWN0aW9uLmphdmEgYi9vcmcuc3BlYXJjZS5lZ2l0LnVpL3NyYy9vcmcvc3BlYXJjZS9lZ2l0 L3VpL2ludGVybmFsL2FjdGlvbnMvR2l0QWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMDc2OWUzOAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5zcGVhcmNlLmVn aXQudWkvc3JjL29yZy9zcGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9ucy9HaXRBY3Rpb24u amF2YQpAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJp Z2h0IChDKSAyMDA2ICBHdWlsaGVtIEJvbm5lZmlsbGUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ug djEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFp bGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLnNwZWFyY2UuZWdpdC51aS5pbnRl cm5hbC5hY3Rpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubWFwcGlu Zy5SZXNvdXJjZU1hcHBpbmc7CitpbXBvcnQgb3JnLnNwZWFyY2UuZWdpdC51aS5BY3RpdmF0b3I7 CisKKy8qKgorICogQW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBhY3RzIGFzIGEgc3VwZXIgY2xhc3Mg Zm9yIEZpbGVTeXN0ZW1Qcm92aWRlciBhY3Rpb25zLgorICogSXQgcHJvdmlkZXMgc29tZSBnZW5l cmFsIG1ldGhvZHMgYXBwbGljYWJsZSB0byBtdWx0aXBsZSBhY3Rpb25zLgorICovCitwdWJsaWMg YWJzdHJhY3QgY2xhc3MgR2l0QWN0aW9uIGV4dGVuZHMgVGVhbUFjdGlvbiB7CisKKwkvKioKKwkg KiBAc2VlIFRlYW1BY3Rpb24jaXNFbmFibGVkKCkKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBp c0VuYWJsZWQoKSB7CisJCXJldHVybiBnZXRTZWxlY3RlZE1hcHBpbmdzKCkubGVuZ3RoID4gMDsK Kwl9CisJCisJLyoqCisJICogUmV0dXJuIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBtYXBwaW5ncyB0 aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlCisJICogZmlsZSBzeXN0ZW0gcHJvdmlkZXIuCisJ ICogQHJldHVybiB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgbWFwcGluZ3MgdGhhdCBhcmUgYXNzb2Np YXRlZCB3aXRoIHRoZQorCSAqIGZpbGUgc3lzdGVtIHByb3ZpZGVyLgorCSAqLworCXByb3RlY3Rl ZCBSZXNvdXJjZU1hcHBpbmdbXSBnZXRTZWxlY3RlZE1hcHBpbmdzKCkgeworCQlyZXR1cm4gZ2V0 U2VsZWN0ZWRSZXNvdXJjZU1hcHBpbmdzKEFjdGl2YXRvci5nZXRQbHVnaW5Qcm92aWRlcklkKCkp OworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5zcGVhcmNlLmVnaXQudWkvc3JjL29yZy9zcGVhcmNl L2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9ucy9TaG93UmVzb3VyY2VJbkhpc3RvcnlBY3Rpb24uamF2 YSBiL29yZy5zcGVhcmNlLmVnaXQudWkvc3JjL29yZy9zcGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwv YWN0aW9ucy9TaG93UmVzb3VyY2VJbkhpc3RvcnlBY3Rpb24uamF2YQppbmRleCAzZTZiODcwLi5m NDhjNWU1IDEwMDY0NAotLS0gYS9vcmcuc3BlYXJjZS5lZ2l0LnVpL3NyYy9vcmcvc3BlYXJjZS9l Z2l0L3VpL2ludGVybmFsL2FjdGlvbnMvU2hvd1Jlc291cmNlSW5IaXN0b3J5QWN0aW9uLmphdmEK KysrIGIvb3JnLnNwZWFyY2UuZWdpdC51aS9zcmMvb3JnL3NwZWFyY2UvZWdpdC91aS9pbnRlcm5h bC9hY3Rpb25zL1Nob3dSZXNvdXJjZUluSGlzdG9yeUFjdGlvbi5qYXZhCkBAIC0xOCwxMiArMTgs MTAgQEAgcGFja2FnZSBvcmcuc3BlYXJjZS5lZ2l0LnVpLmludGVybmFsLmFjdGlvbnM7CiAKIGlt cG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBz ZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZWFtLmNvcmUuVGVhbUV4 Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZWFtLmludGVybmFsLnVpLmFjdGlvbnMuVGVh bUFjdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS50ZWFtLnVpLlRlYW1VSTsKIGltcG9ydCBvcmcu ZWNsaXBzZS50ZWFtLnVpLmhpc3RvcnkuSGlzdG9yeVBhZ2VTYXZlYWJsZVBhcnQ7CiAKLXB1Ymxp YyBjbGFzcyBTaG93UmVzb3VyY2VJbkhpc3RvcnlBY3Rpb24gZXh0ZW5kcyBUZWFtQWN0aW9uIHsK K3B1YmxpYyBjbGFzcyBTaG93UmVzb3VyY2VJbkhpc3RvcnlBY3Rpb24gZXh0ZW5kcyBHaXRBY3Rp b24gewogCiAgICAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7CiAJVGVhbVVJLmdl dEhpc3RvcnlWaWV3KCkuc2hvd0hpc3RvcnlGb3IoZ2V0U2VsZWN0ZWRSZXNvdXJjZXMoKVswXSk7 CkBAIC0zMiw4ICszMCw5IEBAIHB1YmxpYyBjbGFzcyBTaG93UmVzb3VyY2VJbkhpc3RvcnlBY3Rp b24gZXh0ZW5kcyBUZWFtQWN0aW9uIHsKICAgICBwcm90ZWN0ZWQgdm9pZCBzaG93Q29tcGFyZUlu RGlhbG9nKFNoZWxsIHNoZWxsLCBPYmplY3Qgb2JqZWN0KSB7CiAJSGlzdG9yeVBhZ2VTYXZlYWJs ZVBhcnQuc2hvd0hpc3RvcnlJbkRpYWxvZyhzaGVsbCwgb2JqZWN0KTsKICAgICB9Ci0KKy8qCiAg ICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFbmFibGVkKCkgdGhyb3dzIFRlYW1FeGNlcHRpb24gewog CXJldHVybiAhZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpOwogICAgIH0KKyAgICAqLwogfQpkaWZm IC0tZ2l0IGEvb3JnLnNwZWFyY2UuZWdpdC51aS9zcmMvb3JnL3NwZWFyY2UvZWdpdC91aS9pbnRl cm5hbC9hY3Rpb25zL1RlYW1BY3Rpb24uamF2YSBiL29yZy5zcGVhcmNlLmVnaXQudWkvc3JjL29y Zy9zcGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwvYWN0aW9ucy9UZWFtQWN0aW9uLmphdmEKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjZmNiNwotLS0gL2Rldi9udWxsCisrKyBi L29yZy5zcGVhcmNlLmVnaXQudWkvc3JjL29yZy9zcGVhcmNlL2VnaXQvdWkvaW50ZXJuYWwvYWN0 aW9ucy9UZWFtQWN0aW9uLmphdmEKQEAgLTAsMCArMSw0MTggQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKiBjb3BpZWQgZnJvbTogb3JnLmVjbGlwc2UudGVhbS5pbnRlcm5hbC51aS5hY3Rp b25zLlRlYW1BY3Rpb24KKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDAzIElCTSBDb3Jw b3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICog aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJp YnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1l bnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5zcGVhcmNlLmVn aXQudWkuaW50ZXJuYWwuYWN0aW9uczsKKworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQXJy YXk7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsK K2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7 CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitp bXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVj bGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUu cmVzb3VyY2VzLklSZXNvdXJjZVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291 cmNlcy5tYXBwaW5nLlJlc291cmNlTWFwcGluZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1 bnRpbWUuSUFkYXB0YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFBy b2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsK K2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsK K2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNz OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRTZWxlY3Rpb247CitpbXBvcnQg b3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNl LmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uu amZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3 dC5jdXN0b20uQnVzeUluZGljYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5E aXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9y Zy5lY2xpcHNlLnRlYW0uY29yZS5SZXBvc2l0b3J5UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlw c2UudGVhbS5jb3JlLlRlYW1FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRv cklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5l Y2xpcHNlLnVpLklPYmplY3RBY3Rpb25EZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5J Vmlld0FjdGlvbkRlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydDsKK2lt cG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklX b3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1w b3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2Uu dWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rp b25EZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5MZWdhY3lSZXNvdXJj ZVN1cHBvcnQ7CitpbXBvcnQgb3JnLnNwZWFyY2UuZWdpdC51aS5BY3RpdmF0b3I7CisKKy8qKgor ICogVGhlIGFic3RyYWN0IHN1cGVyY2xhc3Mgb2YgYWxsIFRlYW0gYWN0aW9ucy4gVGhpcyBjbGFz cyBjb250YWlucyBzb21lIGNvbnZlbmllbmNlCisgKiBtZXRob2RzIGZvciBnZXR0aW5nIHNlbGVj dGVkIG9iamVjdHMgYW5kIG1hcHBpbmcgc2VsZWN0ZWQgb2JqZWN0cyB0byB0aGVpcgorICogcHJv dmlkZXJzLgorICogCisgKiBUZWFtIHByb3ZpZGVycyBtYXkgc3ViY2xhc3MgdGhpcyBjbGFzcyB3 aGVuIGNyZWF0aW5nIHRoZWlyIGFjdGlvbnMuCisgKiBUZWFtIHByb3ZpZGVycyBtYXkgYWxzbyBp bnN0YW50aWF0ZSBvciBzdWJjbGFzcyBhbnkgb2YgdGhlICAKKyAqIHN1YmNsYXNzZXMgb2YgVGVh bUFjdGlvbiBwcm92aWRlZCBpbiB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBj bGFzcyBUZWFtQWN0aW9uIGV4dGVuZHMgQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJT2JqZWN0 QWN0aW9uRGVsZWdhdGUsIElWaWV3QWN0aW9uRGVsZWdhdGUgeworCS8vIFRoZSBjdXJyZW50IHNl bGVjdGlvbgorCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisJCisJ Ly8gVGhlIHNoZWxsLCByZXF1aXJlZCBmb3IgdGhlIHByb2dyZXNzIGRpYWxvZworCXByb3RlY3Rl ZCBTaGVsbCBzaGVsbDsKKworCS8vIENvbnN0YW50cyBmb3IgZGV0ZXJtaW5pbmcgdGhlIHR5cGUg b2YgcHJvZ3Jlc3MuIFN1YmNsYXNzZXMgbWF5CisJLy8gcGFzcyBvbmUgb2YgdGhlc2UgdmFsdWVz IHRvIHRoZSBydW4gbWV0aG9kLgorCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFBST0dSRVNTX0RJ QUxPRyA9IDE7CisJcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgUFJPR1JFU1NfQlVTWUNVUlNPUiA9 IDI7CisKKwlwcml2YXRlIElXb3JrYmVuY2hQYXJ0IHRhcmdldFBhcnQ7CisKKwkvKioKKwkgKiBD cmVhdGVzIGFuIGFycmF5IG9mIHRoZSBnaXZlbiBjbGFzcyB0eXBlIGNvbnRhaW5pbmcgYWxsIHRo ZQorCSAqIG9iamVjdHMgaW4gdGhlIHNlbGVjdGlvbiB0aGF0IGFkYXB0IHRvIHRoZSBnaXZlbiBj bGFzcy4KKwkgKiAKKwkgKiBAcGFyYW0gc2VsZWN0aW9uCisJICogQHBhcmFtIGMKKwkgKiBAcmV0 dXJuCisJICovCisJcHVibGljIHN0YXRpYyBPYmplY3RbXSBnZXRTZWxlY3RlZEFkYXB0YWJsZXMo SVNlbGVjdGlvbiBzZWxlY3Rpb24sIENsYXNzIGMpIHsKKwkJQXJyYXlMaXN0IHJlc3VsdCA9IG51 bGw7CisJCWlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJcmVzdWx0ID0gbmV3IEFycmF5 TGlzdCgpOworCQkJSXRlcmF0b3IgZWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBz ZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQl3aGlsZSAoZWxlbWVudHMuaGFzTmV4dCgpKSB7CisJ CQkJT2JqZWN0IGFkYXB0ZXIgPSBnZXRBZGFwdGVyKGVsZW1lbnRzLm5leHQoKSwgYyk7CisJCQkJ aWYgKGMuaXNJbnN0YW5jZShhZGFwdGVyKSkgeworCQkJCQlyZXN1bHQuYWRkKGFkYXB0ZXIpOwor CQkJCX0KKwkJCX0KKwkJfQorCQlpZiAocmVzdWx0ICE9IG51bGwgJiYgIXJlc3VsdC5pc0VtcHR5 KCkpIHsKKwkJCXJldHVybiByZXN1bHQudG9BcnJheSgoT2JqZWN0W10pQXJyYXkubmV3SW5zdGFu Y2UoYywgcmVzdWx0LnNpemUoKSkpOworCQl9CisJCXJldHVybiAoT2JqZWN0W10pQXJyYXkubmV3 SW5zdGFuY2UoYywgMCk7CisJfQorCQorCS8qKgorCSAqIEZpbmQgdGhlIG9iamVjdCBhc3NvY2lh dGVkIHdpdGggdGhlIGdpdmVuIG9iamVjdCB3aGVuIGl0IGlzIGFkYXB0ZWQgdG8KKwkgKiB0aGUg cHJvdmlkZWQgY2xhc3MuIE51bGwgaXMgcmV0dXJuZWQgaWYgdGhlIGdpdmVuIG9iamVjdCBkb2Vz IG5vdCBhZGFwdAorCSAqIHRvIHRoZSBnaXZlbiBjbGFzcworCSAqIAorCSAqIEBwYXJhbSBzZWxl Y3Rpb24KKwkgKiBAcGFyYW0gYworCSAqIEByZXR1cm4gT2JqZWN0CisJICovCisJcHVibGljIHN0 YXRpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlLCBDbGFzcyBjKSB7CisJCWlm IChjLmlzSW5zdGFuY2UoYWRhcHRhYmxlKSkgeworCQkJcmV0dXJuIGFkYXB0YWJsZTsKKwkJfQor CQlpZiAoYWRhcHRhYmxlIGluc3RhbmNlb2YgSUFkYXB0YWJsZSkgeworCQkJSUFkYXB0YWJsZSBh ID0gKElBZGFwdGFibGUpIGFkYXB0YWJsZTsKKwkJCU9iamVjdCBhZGFwdGVyID0gYS5nZXRBZGFw dGVyKGMpOworCQkJaWYgKGMuaXNJbnN0YW5jZShhZGFwdGVyKSkgeworCQkJCXJldHVybiBhZGFw dGVyOworCQkJfQorCQl9CisJCXJldHVybiBudWxsOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5z IHRoZSBzZWxlY3RlZCBwcm9qZWN0cy4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3RlZCBw cm9qZWN0cworCSAqLworCXByb3RlY3RlZCBJUHJvamVjdFtdIGdldFNlbGVjdGVkUHJvamVjdHMo KSB7CisJCUlSZXNvdXJjZVtdIHNlbGVjdGVkUmVzb3VyY2VzID0gZ2V0U2VsZWN0ZWRSZXNvdXJj ZXMoKTsKKwkJaWYgKHNlbGVjdGVkUmVzb3VyY2VzLmxlbmd0aCA9PSAwKSByZXR1cm4gbmV3IElQ cm9qZWN0WzBdOworCQlBcnJheUxpc3QgcHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7CisJCWZv ciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0ZWRSZXNvdXJjZXMubGVuZ3RoOyBpKyspIHsKKwkJCUlS ZXNvdXJjZSByZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2VzW2ldOworCQkJaWYgKHJlc291cmNl LmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuUFJPSkVDVCkgeworCQkJCXByb2plY3RzLmFkZChyZXNv dXJjZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIChJUHJvamVjdFtdKSBwcm9qZWN0cy50b0FycmF5 KG5ldyBJUHJvamVjdFtwcm9qZWN0cy5zaXplKCldKTsKKwl9CisJCisJLyoqCisJICogUmV0dXJu cyBhbiBhcnJheSBvZiB0aGUgZ2l2ZW4gY2xhc3MgdHlwZSBjIHRoYXQgY29udGFpbnMgYWxsCisJ ICogaW5zdGFuY2VzIG9mIGMgdGhhdCBhcmUgZWl0aGVyIGNvbnRhaW5lZCBpbiB0aGUgc2VsZWN0 aW9uIG9yCisJICogYXJlIGFkYXB0ZWQgZnJvbSBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgc2Vs ZWN0aW9uLgorCSAqIAorCSAqIEBwYXJhbSBjCisJICogQHJldHVybgorCSAqLworCXByb3RlY3Rl ZCBPYmplY3RbXSBnZXRTZWxlY3RlZFJlc291cmNlcyhDbGFzcyBjKSB7CisJCXJldHVybiBnZXRT ZWxlY3RlZEFkYXB0YWJsZXMoc2VsZWN0aW9uLCBjKTsKKwl9CisJCisJLyoqCisJICogUmV0dXJu cyB0aGUgc2VsZWN0ZWQgcmVzb3VyY2VzLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNlbGVjdGVk IHJlc291cmNlcworCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VbXSBnZXRTZWxlY3RlZFJlc291 cmNlcygpIHsKKwkJcmV0dXJuIChJUmVzb3VyY2VbXSlnZXRTZWxlY3RlZFJlc291cmNlcyhJUmVz b3VyY2UuY2xhc3MpOworCX0KKwkKKwkvKioKKwkgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdl dHRpbmcgdGhlIGN1cnJlbnQgc2hlbGwuCisJICogCisJICogQHJldHVybiB0aGUgc2hlbGwKKwkg Ki8KKwlwdWJsaWMgU2hlbGwgZ2V0U2hlbGwoKSB7CisJCWlmIChzaGVsbCAhPSBudWxsKSB7CisJ CQlyZXR1cm4gc2hlbGw7CisJCX0gZWxzZSB7CisJCQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IEFj dGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCk7CisJCQlpZiAod29ya2JlbmNoID09 IG51bGwpIHJldHVybiBudWxsOworCQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSB3b3JrYmVu Y2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCQlpZiAod2luZG93ID09IG51bGwpIHJl dHVybiBudWxsOworCQkJcmV0dXJuIHdpbmRvdy5nZXRTaGVsbCgpOworCQl9CisJfQorCS8qKgor CSAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgcnVubmluZyBhbiBvcGVyYXRpb24gd2l0aCBwcm9n cmVzcyBhbmQKKwkgKiBlcnJvciBmZWVkYmFjay4KKwkgKiAKKwkgKiBAcGFyYW0gcnVubmFibGUg IHRoZSBydW5uYWJsZSB3aGljaCBleGVjdXRlcyB0aGUgb3BlcmF0aW9uCisJICogQHBhcmFtIHBy b2JsZW1NZXNzYWdlICB0aGUgbWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSBjYXNlIG9mIGVycm9y cworCSAqIEBwYXJhbSBwcm9ncmVzc0tpbmQgIG9uZSBvZiBQUk9HUkVTU19CVVNZQ1VSU09SIG9y IFBST0dSRVNTX0RJQUxPRworCSAqLworCWZpbmFsIHByb3RlY3RlZCB2b2lkIHJ1bihmaW5hbCBJ UnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUsIGZpbmFsIFN0cmluZyBwcm9ibGVtTWVzc2Fn ZSwgaW50IHByb2dyZXNzS2luZCkgeworCQlmaW5hbCBFeGNlcHRpb25bXSBleGNlcHRpb25zID0g bmV3IEV4Y2VwdGlvbltdIHtudWxsfTsKKwkJc3dpdGNoIChwcm9ncmVzc0tpbmQpIHsKKwkJCWNh c2UgUFJPR1JFU1NfQlVTWUNVUlNPUiA6CisJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoRGlz cGxheS5nZXRDdXJyZW50KCksIG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVu KCkgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlydW5uYWJsZS5ydW4obmV3IE51bGxQcm9ncmVzc01v bml0b3IoKSk7CisJCQkJCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsK KwkJCQkJCQlleGNlcHRpb25zWzBdID0gZTsKKwkJCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhj ZXB0aW9uIGUpIHsKKwkJCQkJCQlleGNlcHRpb25zWzBdID0gbnVsbDsKKwkJCQkJCX0KKwkJCQkJ fQorCQkJCX0pOworCQkJCWJyZWFrOworCQkJZGVmYXVsdCA6CisJCQljYXNlIFBST0dSRVNTX0RJ QUxPRyA6CisJCQkJdHJ5IHsKKwkJCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaGVs bCgpKS5ydW4odHJ1ZSwgdHJ1ZSwgcnVubmFibGUpOworCQkJCX0gY2F0Y2ggKEludm9jYXRpb25U YXJnZXRFeGNlcHRpb24gZSkgeworCQkJCQlleGNlcHRpb25zWzBdID0gZTsKKwkJCQl9IGNhdGNo IChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQkJCWV4Y2VwdGlvbnNbMF0gPSBudWxsOwor CQkJCX0KKwkJCQlicmVhazsKKwkJfQorCQlpZiAoZXhjZXB0aW9uc1swXSAhPSBudWxsKSB7CisJ CQloYW5kbGUoZXhjZXB0aW9uc1swXSwgbnVsbCwgcHJvYmxlbU1lc3NhZ2UpOworCQl9CisJfQor CQorCS8qCisJICogTWV0aG9kIGRlY2xhcmVkIG9uIElBY3Rpb25EZWxlZ2F0ZS4KKwkgKi8KKwlw dWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNl bCkgeworCQlpZiAoc2VsIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCXRo aXMuc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWw7CisJCQlpZiAoYWN0aW9u ICE9IG51bGwpIHsKKwkJCQlzZXRBY3Rpb25FbmFibGVtZW50KGFjdGlvbik7CisJCQl9CisJCX0K KwkJaWYgKHNlbCBpbnN0YW5jZW9mIElUZXh0U2VsZWN0aW9uKXsKKwkJCQlJRWRpdG9yUGFydCBw YXJ0ID0gZ2V0VGFyZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOworCQkJCWlmIChwYXJ0ICE9 IG51bGwpIHsKKwkJCQkJSUVkaXRvcklucHV0IGlucHV0ID0gcGFydC5nZXRFZGl0b3JJbnB1dCgp OworCQkJCQlJUmVzb3VyY2UgciA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSVJlc291 cmNlLmNsYXNzKTsKKwkJCQkJaWYgKHIgIT0gbnVsbCkgeworCQkJCQkJc3dpdGNoKHIuZ2V0VHlw ZSgpKXsKKwkJCQkJCQljYXNlIElSZXNvdXJjZS5GSUxFOgorCQkJCQkJCQl0aGlzLnNlbGVjdGlv biA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHIpOworCQkJCQkJCQlpZiAoYWN0aW9uICE9IG51 bGwpIHsKKwkJCQkJCQkJCXNldEFjdGlvbkVuYWJsZW1lbnQoYWN0aW9uKTsKKwkJCQkJCQkJfQor CQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CS8vCXNldCBzZWxlY3Rpb24gdG8gY3VycmVu dCBlZGl0b3IgZmlsZTsKKwkJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogTWV0aG9kIGludm9r ZWQgZnJvbSA8Y29kZT5zZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24sIElTZWxlY3Rpb24pPC9jb2Rl PiAKKwkgKiB0byBzZXQgdGhlIGVuYWJsZW1lbnQgc3RhdHVzIG9mIHRoZSBhY3Rpb24uIFRoZSBp bnN0YW5jZSB2YXJpYWJsZSAKKwkgKiA8Y29kZT5zZWxlY3Rpb248L2NvZGU+IHdpbGwgY29udGFp biB0aGUgbGF0ZXN0IHNlbGVjdGlvbiBzbyB0aGUgbWV0aG9kcworCSAqIDxjb2RlPmdldFNlbGVj dGVkUmVzb3VyY2VzKCk8L2NvZGU+IGFuZCA8Y29kZT5nZXRTZWxlY3RlZFByb2plY3RzKCk8L2Nv ZGU+CisJICogd2lsbCBwcm92aWRlIHRoZSBwcm9wZXIgb2JqZWN0cy4KKwkgKiAKKwkgKiBUaGlz IG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIGJ1dCBzaG91bGQgbm90IGJl IGludm9rZWQgYnkgdGhlbS4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRBY3Rpb25FbmFibGVt ZW50KElBY3Rpb24gYWN0aW9uKSB7CisJCXRyeSB7CisJCQlhY3Rpb24uc2V0RW5hYmxlZChpc0Vu YWJsZWQoKSk7CisJCX0gY2F0Y2ggKFRlYW1FeGNlcHRpb24gZSkgeworCQkJaWYgKGUuZ2V0U3Rh dHVzKCkuZ2V0Q29kZSgpID09IElSZXNvdXJjZVN0YXR1cy5PVVRfT0ZfU1lOQ19MT0NBTCkgewor CQkJCS8vIEVuYWJsZSB0aGUgYWN0aW9uIHRvIGFsbG93IHRoZSB1c2VyIHRvIGRpc2NvdmVyIHRo ZSBwcm9ibGVtCisJCQkJYWN0aW9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCQl9IGVsc2UgeworCQkJ CWFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkvLyBXZSBzaG91bGQgbm90IG9wZW4gYSBk aWFsb2cgd2hlbiBkZXRlcm1pbmluZyBtZW51IGVuYWJsZW1lbnRzIHNvIGxvZyBpdCBpbnN0ZWFk CisJCQkJQWN0aXZhdG9yLmxvZyhlKTsKKwkJCX0KKwkJfQorCX0KKwkKKwkvKgorCSAqIE1ldGhv ZCBkZWNsYXJlZCBvbiBJT2JqZWN0QWN0aW9uRGVsZWdhdGUuCisJICovCisJcHVibGljIHZvaWQg c2V0QWN0aXZlUGFydChJQWN0aW9uIGFjdGlvbiwgSVdvcmtiZW5jaFBhcnQgdGFyZ2V0UGFydCkg eworCQlpZih0YXJnZXRQYXJ0ICE9IG51bGwpIHsKKwkJCXRoaXMuc2hlbGwgPSB0YXJnZXRQYXJ0 LmdldFNpdGUoKS5nZXRTaGVsbCgpOworCQkJdGhpcy50YXJnZXRQYXJ0ID0gdGFyZ2V0UGFydDsK KwkJfQorCX0KKwkvKioKKwkgKiBTaG93cyB0aGUgZ2l2ZW4gZXJyb3JzIHRvIHRoZSB1c2VyLgor CSAqIAorCSAqIEBwYXJhbSBzdGF0dXMgIHRoZSBzdGF0dXMgY29udGFpbmluZyB0aGUgZXJyb3IK KwkgKiBAcGFyYW0gdGl0bGUgIHRoZSB0aXRsZSBvZiB0aGUgZXJyb3IgZGlhbG9nCisJICogQHBh cmFtIG1lc3NhZ2UgIHRoZSBtZXNzYWdlIGZvciB0aGUgZXJyb3IgZGlhbG9nCisJICogQHBhcmFt IHNoZWxsICB0aGUgc2hlbGwgdG8gb3BlbiB0aGUgZXJyb3IgZGlhbG9nIGluCisJICovCisJcHJv dGVjdGVkIHZvaWQgaGFuZGxlKEV4Y2VwdGlvbiBleGNlcHRpb24sIFN0cmluZyB0aXRsZSwgU3Ry aW5nIG1lc3NhZ2UpIHsKKwkJLy8gRklYTUUgVXRpbHMuaGFuZGxlRXJyb3IoZ2V0U2hlbGwoKSwg ZXhjZXB0aW9uLCB0aXRsZSwgbWVzc2FnZSk7CisJfQorCQorCS8qKgorCSAqIENvbmNyZXRlIGFj dGlvbiBlbmFibGVtZW50IGNvZGUuCisJICogU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudC4KKwkg KiAKKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkCisJICogQHRocm93 cyBUZWFtRXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgZW5hYmxlbWVudCBkZXRl Y3Rpb24KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiBpc0VuYWJsZWQoKSB0aHJv d3MgVGVhbUV4Y2VwdGlvbjsKKwkKKwkvKioKKwkgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCBt YXBzIHRoZSBzZWxlY3RlZCByZXNvdXJjZXMgdG8gdGhlaXIgcHJvdmlkZXJzLgorCSAqIFRoZSBy ZXR1cm5lZCBIYXNodGFibGUgaGFzIGtleXMgd2hpY2ggYXJlIElUZWFtUHJvdmlkZXJzLCBhbmQg dmFsdWVzCisJICogd2hpY2ggYXJlIExpc3RzIG9mIElSZXNvdXJjZXMgdGhhdCBhcmUgc2hhcmVk IHdpdGggdGhhdCBwcm92aWRlci4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgaGFzaHRhYmxlIG1hcHBp bmcgcHJvdmlkZXJzIHRvIHRoZWlyIHNlbGVjdGVkIHJlc291cmNlcworCSAqLworCXByb3RlY3Rl ZCBIYXNodGFibGUgZ2V0UHJvdmlkZXJNYXBwaW5nKCkgeworCQlyZXR1cm4gZ2V0UHJvdmlkZXJN YXBwaW5nKGdldFNlbGVjdGVkUmVzb3VyY2VzKCkpOworCX0KKwkvKioKKwkgKiBDb252ZW5pZW5j ZSBtZXRob2QgdGhhdCBtYXBzIHRoZSBnaXZlbiByZXNvdXJjZXMgdG8gdGhlaXIgcHJvdmlkZXJz LgorCSAqIFRoZSByZXR1cm5lZCBIYXNodGFibGUgaGFzIGtleXMgd2hpY2ggYXJlIElUZWFtUHJv dmlkZXJzLCBhbmQgdmFsdWVzCisJICogd2hpY2ggYXJlIExpc3RzIG9mIElSZXNvdXJjZXMgdGhh dCBhcmUgc2hhcmVkIHdpdGggdGhhdCBwcm92aWRlci4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgaGFz aHRhYmxlIG1hcHBpbmcgcHJvdmlkZXJzIHRvIHRoZWlyIHJlc291cmNlcworCSAqLworCXByb3Rl Y3RlZCBIYXNodGFibGUgZ2V0UHJvdmlkZXJNYXBwaW5nKElSZXNvdXJjZVtdIHJlc291cmNlcykg eworCQlIYXNodGFibGUgcmVzdWx0ID0gbmV3IEhhc2h0YWJsZSgpOworCQlmb3IgKGludCBpID0g MDsgaSA8IHJlc291cmNlcy5sZW5ndGg7IGkrKykgeworCQkJUmVwb3NpdG9yeVByb3ZpZGVyIHBy b3ZpZGVyID0gUmVwb3NpdG9yeVByb3ZpZGVyLmdldFByb3ZpZGVyKHJlc291cmNlc1tpXS5nZXRQ cm9qZWN0KCkpOworCQkJTGlzdCBsaXN0ID0gKExpc3QpcmVzdWx0LmdldChwcm92aWRlcik7CisJ CQlpZiAobGlzdCA9PSBudWxsKSB7CisJCQkJbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKwkJCQly ZXN1bHQucHV0KHByb3ZpZGVyLCBsaXN0KTsKKwkJCX0KKwkJCWxpc3QuYWRkKHJlc291cmNlc1tp XSk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVk U2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKQorCQkJ c2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKwkJcmV0dXJuIHNlbGVjdGlv bjsKKwl9CisJCisvKioKKyAgICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIHJlc291cmNlIG1hcHBp bnMgdGhhdCBjb250YWluIHJlc291cmNlcyBpbiAKKyAgICAgKiBwcm9qZWN0cyB0aGF0IGFyZSBh c3NvY2lhdGVkIHdpdGggYSByZXBvc2l0b3J5IG9mIHRoZSBnaXZlbiBpZC4KKyAgICAgKiBAcGFy YW0gcHJvdmlkZXJJZCB0aGUgcmVwb3NpdG9yeSBwcm92aWRlciBpZAorICAgICAqIEByZXR1cm4g dGhlIHJlc291cmNlIG1hcHBpbmdzIHRoYXQgY29udGFpbiByZXNvdXJjZXMgYXNzb2NpYXRlZCB3 aXRoIHRoZSBnaXZlbiBwcm92aWRlcgorICAgICAqLworICAgIHByb3RlY3RlZCBSZXNvdXJjZU1h cHBpbmdbXSBnZXRTZWxlY3RlZFJlc291cmNlTWFwcGluZ3MoU3RyaW5nIHByb3ZpZGVySWQpIHsK KyAgICAgICAgT2JqZWN0W10gZWxlbWVudHMgPSBnZXRTZWxlY3Rpb24oKS50b0FycmF5KCk7Cisg ICAgICAgIEFycmF5TGlzdCBwcm92aWRlck1hcHBpbmdzID0gbmV3IEFycmF5TGlzdCgpOworICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg ICAgICBPYmplY3Qgb2JqZWN0ID0gZWxlbWVudHNbaV07CisgICAgICAgICAgICBPYmplY3QgYWRh cHRlZCA9IGdldFJlc291cmNlTWFwcGluZyhvYmplY3QpOworICAgICAgICAgICAgaWYgKGFkYXB0 ZWQgaW5zdGFuY2VvZiBSZXNvdXJjZU1hcHBpbmcpIHsKKyAgICAgICAgICAgICAgICBSZXNvdXJj ZU1hcHBpbmcgbWFwcGluZyA9IChSZXNvdXJjZU1hcHBpbmcpIGFkYXB0ZWQ7CisgICAgICAgICAg ICAgICAgaWYgKHByb3ZpZGVySWQgPT0gbnVsbCB8fCBpc01hcHBlZFRvUHJvdmlkZXIobWFwcGlu ZywgcHJvdmlkZXJJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJNYXBwaW5ncy5h ZGQobWFwcGluZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIHJldHVybiAoUmVzb3VyY2VNYXBwaW5nW10pIHByb3ZpZGVyTWFwcGluZ3MudG9B cnJheShuZXcgUmVzb3VyY2VNYXBwaW5nW3Byb3ZpZGVyTWFwcGluZ3Muc2l6ZSgpXSk7CisgICAg fQorICAgIAorICAgIHByaXZhdGUgT2JqZWN0IGdldFJlc291cmNlTWFwcGluZyhPYmplY3Qgb2Jq ZWN0KSB7CisgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZXNvdXJjZU1hcHBpbmcpCisg ICAgICAgICAgICByZXR1cm4gKFJlc291cmNlTWFwcGluZylvYmplY3Q7CisgICAgICAgIHJldHVy biBMZWdhY3lSZXNvdXJjZVN1cHBvcnQuZ2V0QWRhcHRlZENvbnRyaWJ1dG9yUmVzb3VyY2VNYXBw aW5nKG9iamVjdCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc01hcHBlZFRv UHJvdmlkZXIoUmVzb3VyY2VNYXBwaW5nIGVsZW1lbnQsIFN0cmluZyBwcm92aWRlcklkKSB7Cisg ICAgICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBlbGVtZW50LmdldFByb2plY3RzKCk7CisgICAg ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcHJvamVjdHMubGVuZ3RoOyBrKyspIHsKKyAgICAgICAg ICAgIElQcm9qZWN0IHByb2plY3QgPSBwcm9qZWN0c1trXTsKKyAgICAgICAgICAgIFJlcG9zaXRv cnlQcm92aWRlciBwcm92aWRlciA9IFJlcG9zaXRvcnlQcm92aWRlci5nZXRQcm92aWRlcihwcm9q ZWN0KTsKKyAgICAgICAgICAgIGlmIChwcm92aWRlciAhPSBudWxsICYmIHByb3ZpZGVyLmdldElE KCkuZXF1YWxzKHByb3ZpZGVySWQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwkg ICAgLyoqCisJICogQHJldHVybiBJV29ya2JlbmNoUGFydAorCSAqLworCXByb3RlY3RlZCBJV29y a2JlbmNoUGFydCBnZXRUYXJnZXRQYXJ0KCkgeworCQlyZXR1cm4gdGFyZ2V0UGFydDsKKwl9CisK KwkvKioKKwkgKiBSZXR1cm4gdGhlIHBhdGggdGhhdCB3YXMgYWN0aXZlIHdoZW4gdGhlIG1lbnUg aXRlbSB3YXMgc2VsZWN0ZWQuCisJICogQHJldHVybiBJV29ya2JlbmNoUGFnZQorCSAqLworCXBy b3RlY3RlZCBJV29ya2JlbmNoUGFnZSBnZXRUYXJnZXRQYWdlKCkgeworCQlpZiAoZ2V0VGFyZ2V0 UGFydCgpID09IG51bGwpIHJldHVybiBBY3RpdmF0b3IuZ2V0QWN0aXZlUGFnZSgpOworCQlyZXR1 cm4gZ2V0VGFyZ2V0UGFydCgpLmdldFNpdGUoKS5nZXRQYWdlKCk7CisJfQorCQorCS8qKgorCSAq IFNob3cgdGhlIHZpZXcgd2l0aCB0aGUgZ2l2ZW4gSUQgaW4gdGhlIHBlcnNwZWN0aXZlIGZyb20g d2hpY2ggdGhlIGFjdGlvbgorCSAqIHdhcyBleGVjdXRlZC4gUmV0dXJucyBudWxsIGlmIHRoZSB2 aWV3IGlzIG5vdCByZWdpc3RlcmVkLgorCSAqIAorCSAqIEBwYXJhbSB2aWV3SWQKKwkgKiBAcmV0 dXJuIElWaWV3UGFydAorCSAqLworCXByb3RlY3RlZCBJVmlld1BhcnQgc2hvd1ZpZXcoU3RyaW5n IHZpZXdJZCkgeworCQl0cnkgeworCQkJcmV0dXJuIGdldFRhcmdldFBhZ2UoKS5zaG93Vmlldyh2 aWV3SWQpOworCQl9IGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBwZSkgeworCQkJcmV0dXJuIG51 bGw7CisJCX0KKwl9CisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uu dWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZSNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCkKKwkg Ki8KKwlwdWJsaWMgdm9pZCBpbml0KElWaWV3UGFydCB2aWV3KSB7CisJCXRhcmdldFBhcnQgPSB2 aWV3OworCX0KK30K ------=_Part_138735_11190969.1169242357139--