Return-Path: Delivered-To: apmail-pivot-user-archive@www.apache.org Received: (qmail 48296 invoked from network); 8 Mar 2011 02:39:16 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 8 Mar 2011 02:39:16 -0000 Received: (qmail 74900 invoked by uid 500); 8 Mar 2011 02:39:16 -0000 Delivered-To: apmail-pivot-user-archive@pivot.apache.org Received: (qmail 74706 invoked by uid 500); 8 Mar 2011 02:39:16 -0000 Mailing-List: contact user-help@pivot.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@pivot.apache.org Delivered-To: mailing list user@pivot.apache.org Received: (qmail 74670 invoked by uid 99); 8 Mar 2011 02:39:15 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Mar 2011 02:39:15 +0000 X-ASF-Spam-Status: No, hits=1.5 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of bill.van.melle@gmail.com designates 209.85.160.54 as permitted sender) Received: from [209.85.160.54] (HELO mail-pw0-f54.google.com) (209.85.160.54) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Mar 2011 02:39:08 +0000 Received: by pwj8 with SMTP id 8so1064771pwj.13 for ; Mon, 07 Mar 2011 18:38:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=r31P+ZoLozg4Sf2eHyV7NHa8L/eC8rFZrRAdL8D7EUY=; b=OLfFHjvhl8jVf9ZBveWpzq1LnoLkgAiua2b+p86oCluTSrZ8iAdSe2osYiT801M686 YuJQVWCHRqNPC2uQg2AMkHpifrfsAz6yGOuFjGrk0gHIQAuaQe90TdS0gu6/Hpm8Izve B4YYFbDHemnfDUpdhYnhK20+/OM5Uw2LSYKfU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=mYiaDmp+N22oEqcevfO1fjdV2TzqZjoxk1g4TLv5q65Cu/5zX+IVbIzFnX+Mp9tXWu dNVeDmJzcGs857zicpvmD9xZE5bJfMal/BHinLJ041KRNN1hZHV8R5pHWQKouUgYvCpy 8xqY4c3Sk92tYA4UY1M4nPajAKKOIsrqME7dw= MIME-Version: 1.0 Received: by 10.142.4.24 with SMTP id 24mr3896205wfd.103.1299551928285; Mon, 07 Mar 2011 18:38:48 -0800 (PST) Received: by 10.142.136.21 with HTTP; Mon, 7 Mar 2011 18:38:48 -0800 (PST) In-Reply-To: References: Date: Mon, 7 Mar 2011 18:38:48 -0800 Message-ID: Subject: Re: KeyListeners on ImageView From: Bill van Melle To: user@pivot.apache.org Cc: Chris Bartlett , Pivot Dev Content-Type: multipart/mixed; boundary=00504502af900d7c95049def8350 --00504502af900d7c95049def8350 Content-Type: multipart/alternative; boundary=00504502af900d7c89049def834e --00504502af900d7c89049def834e Content-Type: text/plain; charset=ISO-8859-1 > > Take a look at the attached app. > It opens 2 native OS windows, each containing 4 types of Pivot Windows > (none of which contain any focusable Components). > It uses a simple mechanism to forward unhandled keyboard events to the > active Pivot Window (if there is one) > This seems like a clever solution. I'm not sure it quite works right, though. When I run your example, if I set the window system focus to the other display, without clicking inside one of the windows inside the display, it appears that Pivot's focus doesn't change -- Window.getActiveWindow is unchanged, and it still has its frame decorated as the focused window. Seems to me that Pivot's notion of the active window really ought to always be within the OS-focused display. When I played around with your example, substituting a focusable component (TextInput) for ImageView in one of the displays, or making the displays host a single, maximized window (my standard use case), I got even weirder behavior, such as input going to one subwindow even after clicking the frame title of a different subwindow or even the other display. See the attached revision of your App file. --00504502af900d7c89049def834e Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Take a look= at the attached app.
It opens 2 native OS windows, each containi= ng 4 types of Pivot Windows (none of which contain any focusable Components= ).
It uses a simple mechanism to forward unhandled keyboard events to the= active Pivot Window (if there is one)

This seems like a clever solution. =A0I'm not sure it quite works rig= ht, though. When I run your example, if I set the window system focus to th= e other display, without clicking inside one of the =A0windows inside the d= isplay, it appears that Pivot's focus doesn't change -- Window.getA= ctiveWindow is unchanged, and it still has its frame decorated as the focus= ed window. =A0Seems to me that Pivot's notion of the active window real= ly ought to always be within the OS-focused display.

When I played around with your example, substituting a = focusable component (TextInput) for ImageView in one of the displays, or ma= king the displays host a single, maximized window (my standard use case), I= got even weirder behavior, such as input going to one subwindow even after= clicking the frame title of a different subwindow or even the other displa= y. =A0See the attached revision of your App file.
--00504502af900d7c89049def834e-- --00504502af900d7c95049def8350 Content-Type: application/octet-stream; name="PivotWindowFocusTestApp.java" Content-Disposition: attachment; filename="PivotWindowFocusTestApp.java" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gl07mtie1 cGFja2FnZSBmb2N1czsNCg0KaW1wb3J0IGphdmEuYXd0LkNvbG9yOw0KDQppbXBvcnQgb3JnLmFw YWNoZS5waXZvdC5jb2xsZWN0aW9ucy5NYXA7DQppbXBvcnQgb3JnLmFwYWNoZS5waXZvdC53dGsu QWxlcnQ7DQppbXBvcnQgb3JnLmFwYWNoZS5waXZvdC53dGsuQXBwbGljYXRpb247DQppbXBvcnQg b3JnLmFwYWNoZS5waXZvdC53dGsuQm9yZGVyOw0KaW1wb3J0IG9yZy5hcGFjaGUucGl2b3Qud3Rr LkNvbXBvbmVudDsNCmltcG9ydCBvcmcuYXBhY2hlLnBpdm90Lnd0ay5Db21wb25lbnRLZXlMaXN0 ZW5lcjsNCmltcG9ydCBvcmcuYXBhY2hlLnBpdm90Lnd0ay5EZXNrdG9wQXBwbGljYXRpb25Db250 ZXh0Ow0KaW1wb3J0IG9yZy5hcGFjaGUucGl2b3Qud3RrLkRpYWxvZzsNCmltcG9ydCBvcmcuYXBh Y2hlLnBpdm90Lnd0ay5EaXNwbGF5Ow0KaW1wb3J0IG9yZy5hcGFjaGUucGl2b3Qud3RrLkZyYW1l Ow0KaW1wb3J0IG9yZy5hcGFjaGUucGl2b3Qud3RrLkltYWdlVmlldzsNCmltcG9ydCBvcmcuYXBh Y2hlLnBpdm90Lnd0ay5XaW5kb3dDbGFzc0xpc3RlbmVyOw0KaW1wb3J0IG9yZy5hcGFjaGUucGl2 b3Qud3RrLktleWJvYXJkLktleUxvY2F0aW9uOw0KaW1wb3J0IG9yZy5hcGFjaGUucGl2b3Qud3Rr Lk1lc3NhZ2VUeXBlOw0KaW1wb3J0IG9yZy5hcGFjaGUucGl2b3Qud3RrLlRleHRJbnB1dDsNCmlt cG9ydCBvcmcuYXBhY2hlLnBpdm90Lnd0ay5XaW5kb3c7DQoNCi8qKg0KICogQXBwbGljYXRpb24g ZGVtb25zdHJhdGluZyBob3cgdG8gZGlyZWN0IGtleWJvYXJkIGV2ZW50cyB0byB0aGUgYWN0aXZl DQogKiBvcmcuYXBhY2hlLnBpdm90Lnd0ay5XaW5kb3csIGlmIHRoZSBhY3RpdmUgd2luZG93IGRv ZXNuJ3QgY29udGFpbg0KICogYW55IGZvY3VzYWJsZSBDb21wb25lbnRzLg0KICoNCiAqIFJlbGF0 ZXMgdG8gdGhlIGZvbGxvd2luZyBBcGFjaGUgUGl2b3QgbWFpbGluZyBsaXN0IHRocmVhZC4NCiAq IGh0dHA6Ly9hcGFjaGUtcGl2b3QtdXNlcnMuMzk5NDMxLm4zLm5hYmJsZS5jb20vS2V5TGlzdGVu ZXJzLW9uLUltYWdlVmlldy10cDI2MDA2MjJwMjYyMjM4My5odG1sDQogKg0KDQogKiBJdCBvcGVu cyAyIG5hdGl2ZSB3aW5kb3dzLCBlYWNoIGNvbnRhaW5pbmcgNCB0eXBlcyBvZiBQaXZvdCBXaW5k b3dzLg0KICogLSBXaW5kb3cNCiAqIC0gRnJhbWUNCiAqIC0gRGlhbG9nDQogKiAtIEFsZXJ0DQog Kg0KICogVGhlIFdpbmRvd3MgYXJlIGdpdmVuIHVuaXF1ZSB0aXRsZXMgZm9yIGlkZW50aWZpY2F0 aW9uLg0KICogQSBDb21wb25lbnRLZXlMaXN0ZW5lciBpcyBhZGRlZCB0byBlYWNoIFdpbmRvdy4N CiAqIFRoZSBsaXN0ZW5lciBzaW1wbHkgY29uc3VtZXMgYW55IGtleSBldmVudHMgd2hlbiB0aGVy ZSBpcyBubyBtb2RpZmllciBiZWluZyBwcmVzc2VkLg0KICoNCiAqIFRoZSBBcHBsaWNhdGlvbiBp bXBsZW1lbnRzIFVucHJvY2Vzc2VkS2V5SGFuZGxlciwgYnV0IGRlbGVnYXRlcyB0byBhIHNlcGFy YXRlDQogKiBoYW5kbGVyIGNsYXNzIChFaXRoZXIgU3lzT3V0VW5wcm9jZXNzZWRLZXlIYW5kbGVy IG9yIEFjdGl2ZVdpbmRvd1VucHJvY2Vzc2VkS2V5SGFuZGxlcikNCiAqIChDb21tZW50L3VuY29t bWVudCBhcyByZXF1aXJlZCkNCiAqDQogKg0KICogVXNhZ2UgLSBqYXZhIGZvY3VzLlBpdm90V2lu ZG93Rm9jdXNUZXN0QXBwDQogKg0KICogV2hlbiB0aGUgMiBuYXRpdmUgd2luZG93cyBvcGVuLCBj bGlja2luZyBvbiB0aGUgdmFyaW91cyBXaW5kb3dzIHdpbGwgdXBkYXRlDQogKiB0aGUgbmF0aXZl IGZyYW1lIHRpdGxlLCBhbmQgdGhlIGFjdGl2ZSBGcmFtZSwgQWxlcnQgJiBEaWFsb2cgd2lsbCBi ZSBub3RhYmxlDQogKiBieSBpdCdzIGJsdWUgZnJhbWUgKG5vdCBXaW5kb3cgdGhvdWdoKS4NCiAq DQogKiBDbGljayBvbiBhbnkgUGl2b3QgV2luZG93IGluIGVpdGhlciBuYXRpdmUgd2luZG93IGFu ZCBwcmVzcyBrZXlzIHdpdGggJiB3aXRob3V0DQogKiBtb2RpZmllcnMgc3VjaCBhcyBDT05UUk9M LCBTSElGVCBvciBBTFQuDQogKg0KICogUmVmZXIgdG8gU3lzT3V0Lg0KICovDQpwdWJsaWMgY2xh c3MgUGl2b3RXaW5kb3dGb2N1c1Rlc3RBcHAgaW1wbGVtZW50cyBBcHBsaWNhdGlvbiwgQXBwbGlj YXRpb24uVW5wcm9jZXNzZWRLZXlIYW5kbGVyIHsNCg0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGlu dCBOQVRJVkVfV0lORE9XX1dJRFRIID0gNzAwOw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBO QVRJVkVfV0lORE9XX0hFSUdIVCA9IDYwMDsNCg0KCS8vIERlZmF1bHQgdG8gYSBOb09wIGhhbmRs ZXINCglwcml2YXRlIFVucHJvY2Vzc2VkS2V5SGFuZGxlciB1bnByb2Nlc3NlZEtleUhhbmRsZXIg PSBuZXcgTm9PcFVucHJvY2Vzc2VkS2V5SGFuZGxlcigpOw0KDQoJLy8gQ0tMIHdoaWNoIGNvbnN1 bWVzIGFsbCBrZXkgZXZlbnRzIHVubGVzcyBhIG1vZGlmaWVyIGlzIHByZXNzZWQNCglwcml2YXRl IENvbXBvbmVudEtleUxpc3RlbmVyIHNpbXBsZUNvbnN1bWVyID0gbmV3IFNpbXBsZUtleUV2ZW50 Q29uc3VtZXIoKTsNCg0KDQoJQE92ZXJyaWRlDQoJcHVibGljIHZvaWQgc3RhcnR1cChEaXNwbGF5 IHByaW1hcnlEaXNwbGF5LCBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnRpZXMpIHRocm93cyBF eGNlcHRpb24gew0KCQlwcmltYXJ5RGlzcGxheS5nZXRIb3N0V2luZG93KCkuc2V0U2l6ZShOQVRJ VkVfV0lORE9XX1dJRFRILCBOQVRJVkVfV0lORE9XX0hFSUdIVCk7DQoNCgkJLy8gSGFuZGxlciB0 aGF0IGR1bXBzIGtleWJvYXJkIGluZm8gdG8gU3lzT3V0DQovLwkJdW5wcm9jZXNzZWRLZXlIYW5k bGVyID0gU3lzT3V0VW5wcm9jZXNzZWRLZXlIYW5kbGVyLklOU1RBTkNFOw0KDQoJCS8vIERlbGVn YXRlIHRvIGEgY3VzdG9tIGhhbmRsZXIgd2hpY2ggd2lsbCBmb3J3YXJkIHVucHJvY2Vzc2VkDQoJ CS8vIGtleWJvYXJkIGV2ZW50cyB0byB0aGUgYWN0aXZlIHdpbmRvdydzIENvbXBvbmVudEtleUxp c3RlbmVycy4NCgkJdW5wcm9jZXNzZWRLZXlIYW5kbGVyID0gQWN0aXZlV2luZG93VW5wcm9jZXNz ZWRLZXlIYW5kbGVyLklOU1RBTkNFOw0KDQoJCS8vIENyZWF0ZSBhIDJuZCBkaXNwbGF5DQoJCWZp bmFsIERpc3BsYXkgc2Vjb25kYXJ5RGlzcGxheSA9IERlc2t0b3BBcHBsaWNhdGlvbkNvbnRleHQu Y3JlYXRlRGlzcGxheShOQVRJVkVfV0lORE9XX1dJRFRILCBOQVRJVkVfV0lORE9XX0hFSUdIVCwg MzAwLCAzMDAsIGZhbHNlLCB0cnVlLCBmYWxzZSwgcHJpbWFyeURpc3BsYXkuZ2V0SG9zdFdpbmRv dygpLCBudWxsKTsNCg0KCQkvLyBOYW1lIGJvdGggRGlzcGxheXMgdG8gZWFzZSBpZGVudGlmaWNh dGlvbg0KCQlwcmltYXJ5RGlzcGxheS5zZXROYW1lKCJQcmltYXJ5IERpc3BsYXkiKTsNCgkJc2Vj b25kYXJ5RGlzcGxheS5zZXROYW1lKCJTZWNvbmRhcnkgRGlzcGxheSIpOw0KDQoJCS8vIFBvcHVs YXRlIGJvdGggRGlzcGxheXMgd2l0aCB2YXJpb3VzIFdpbmRvd3Mgd2hpY2ggY29udGFpbiBubyBm b2N1c2FibGUgQ29tcG9uZW50cy4NCgkJcG9wdWxhdGVEaXNwbGF5KHByaW1hcnlEaXNwbGF5LCBm YWxzZSwgdHJ1ZSk7DQoJCXBvcHVsYXRlRGlzcGxheShzZWNvbmRhcnlEaXNwbGF5LCB0cnVlLCB0 cnVlKTsNCgkJDQoJCVdpbmRvdy5nZXRXaW5kb3dDbGFzc0xpc3RlbmVycygpLmFkZChuZXcgV2lu ZG93Q2xhc3NMaXN0ZW5lcigpIHsNCgkJCQ0KCQkJQE92ZXJyaWRlDQoJCQlwdWJsaWMgdm9pZCBh Y3RpdmVXaW5kb3dDaGFuZ2VkKFdpbmRvdyBwcmV2aW91c0FjdGl2ZVdpbmRvdykgew0KCQkJCVN5 c3RlbS5vdXQucHJpbnRmKCJBY3RpdmUgd2luZG93IGNoYW5nZWQgZnJvbSAlcyB0byAlcyVuIiwg DQoJCQkJCQl3aW5kb3dUaXRsZU9yTnVsbChwcmV2aW91c0FjdGl2ZVdpbmRvdyksDQoJCQkJCQl3 aW5kb3dUaXRsZU9yTnVsbChXaW5kb3cuZ2V0QWN0aXZlV2luZG93KCkpKTsNCgkJCX0NCgkJfSk7 DQoJfQ0KDQoJcHJvdGVjdGVkIE9iamVjdCB3aW5kb3dUaXRsZU9yTnVsbChXaW5kb3cgdykgew0K CQlyZXR1cm4gdyA9PSBudWxsID8gIm51bGwiIDogdy5nZXRUaXRsZSgpOw0KCX0NCg0KCS8vIEFk ZCB2YXJpb3VzIFdpbmRvd3MgKHdoaWNoIGNvbnRhaW4gbm8gZm9jdXNhYmxlIENvbXBvbmVudHMp IHRvIHRoZSBEaXNwbGF5DQoJLy8gKFRoaXMgY291bGQgYWx0ZXJuYXRpdmVseSBsb2FkIGFuZCBv cGVuIFdpbmRvd3MgZnJvbSBvbmUgb3IgbW9yZSBCWE1MIGZpbGVzKQ0KCXByaXZhdGUgdm9pZCBw b3B1bGF0ZURpc3BsYXkoZmluYWwgRGlzcGxheSBkaXNwbGF5LCBib29sZWFuIG1ha2VGb2N1c2Fi bGUsIGJvb2xlYW4gbXVsdGlDb21wb25lbnRzKSB7DQoJCS8vIG9yZy5hcGFjaGUucGl2b3Qud3Rr LldpbmRvdw0KCQlmaW5hbCBXaW5kb3cgd2luZG93ID0gbmV3IFdpbmRvdyhjcmVhdGVCb3JkZXIo Q29sb3IuR1JFRU4sIFdpbmRvdy5jbGFzcywgbWFrZUZvY3VzYWJsZSkpOw0KCQl3aW5kb3cuc2V0 VGl0bGUoZ2V0VGl0bGUoIldpbmRvdyIsIGRpc3BsYXkpKTsNCgkJaWYgKG11bHRpQ29tcG9uZW50 cykNCgkJCXdpbmRvdy5zZXRMb2NhdGlvbigxMCwgMzApOw0KCQllbHNlIHsNCgkJCXdpbmRvdy5z ZXRNYXhpbWl6ZWQodHJ1ZSk7DQoJCQl3aW5kb3cucmVxdWVzdEZvY3VzKCk7DQoJCX0NCgkJd2lu ZG93Lm9wZW4oZGlzcGxheSk7DQoNCgkJaWYgKG11bHRpQ29tcG9uZW50cykgew0KCQkJLy8gb3Jn LmFwYWNoZS5waXZvdC53dGsuRnJhbWUNCgkJCWZpbmFsIEZyYW1lIGZyYW1lID0gbmV3IEZyYW1l KGdldFRpdGxlKCJGcmFtZSIsIGRpc3BsYXkpLCBjcmVhdGVCb3JkZXIoQ29sb3IuQ1lBTiwgRnJh bWUuY2xhc3MsIG1ha2VGb2N1c2FibGUpKTsNCgkJCWZyYW1lLnNldExvY2F0aW9uKDMwMCwgMzAp Ow0KCQkJZnJhbWUub3BlbihkaXNwbGF5KTsNCg0KCQkJLy8gb3JnLmFwYWNoZS5waXZvdC53dGsu RGlhbG9nDQoJCQlmaW5hbCBib29sZWFuIG1vZGFsID0gZmFsc2U7DQoJCQlmaW5hbCBEaWFsb2cg ZGlhbG9nID0gbmV3IERpYWxvZyhnZXRUaXRsZSgiRGlhbG9nIiwgZGlzcGxheSksIGNyZWF0ZUJv cmRlcihDb2xvci5NQUdFTlRBLCBEaWFsb2cuY2xhc3MsIG1ha2VGb2N1c2FibGUpLCBtb2RhbCk7 DQoJCQlkaWFsb2cub3BlbihkaXNwbGF5KTsNCgkJCWRpYWxvZy5zZXRMb2NhdGlvbigxMCwgMjUw KTsNCg0KCQkJLy8gb3JnLmFwYWNoZS5waXZvdC53dGsuQWxlcnQNCgkJCWZpbmFsIEFsZXJ0IGFs ZXJ0ID0gbmV3IEFsZXJ0KE1lc3NhZ2VUeXBlLklORk8sICJBbGVydCIsIG51bGwsIGNyZWF0ZUJv cmRlcihDb2xvci5PUkFOR0UsIEFsZXJ0LmNsYXNzLCBtYWtlRm9jdXNhYmxlKSwgbW9kYWwpOw0K CQkJYWxlcnQuc2V0VGl0bGUoZ2V0VGl0bGUoIkFsZXJ0IiwgZGlzcGxheSkpOw0KCQkJLy8gUmVt b3ZlIGFueSBidXR0b25zIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubw0KCQkJLy8gZm9jdXNh YmxlIENvbXBvbmVudHMgY29udGFpbmVkIGluIHRoZSBBbGVydA0KCQkJd2hpbGUgKGFsZXJ0Lmdl dE9wdGlvbnMoKS5nZXRMZW5ndGgoKSA+IDApIHsNCgkJCQlhbGVydC5nZXRPcHRpb25zKCkucmVt b3ZlKDAsIDEpOw0KCQkJfQ0KCQkJYWxlcnQub3BlbihkaXNwbGF5KTsNCgkJCWFsZXJ0LnNldExv Y2F0aW9uKDMwMCwgMjUwKTsNCgkJfQ0KDQoJCS8vIEFkZCBDb21wb25lbnRLZXlMaXN0ZW5lcnMg dG8gZWFjaCBvZiB0aGUgV2luZG93cw0KCQlmb3IgKENvbXBvbmVudCBjaGlsZCA6IGRpc3BsYXkp IHsNCgkJCWNoaWxkLmdldENvbXBvbmVudEtleUxpc3RlbmVycygpLmFkZChzaW1wbGVDb25zdW1l cik7DQoJCX0NCgl9DQoNCgkvLyBDcmVhdGUgYSBCb3JkZXIgY29udGFpbmluZyBhbiBJbWFnZVZp ZXcNCglwcml2YXRlIHN0YXRpYyBCb3JkZXIgY3JlYXRlQm9yZGVyKGZpbmFsIENvbG9yIGNvbG9y LCBmaW5hbCBDbGFzczw/IGV4dGVuZHMgQ29tcG9uZW50PiBrbGFzcywgYm9vbGVhbiBtYWtlRm9j dXNhYmxlKSB7DQoJCUNvbXBvbmVudCBjb250ZW50Ow0KCQlpZiAobWFrZUZvY3VzYWJsZSkgew0K CQkJY29udGVudCA9IG5ldyBUZXh0SW5wdXQoKTsNCgkJfSBlbHNlIHsNCgkJCWZpbmFsIEltYWdl VmlldyBpbWFnZVZpZXcgPSBuZXcgSW1hZ2VWaWV3KCk7DQoJCQlpbWFnZVZpZXcuc2V0SW1hZ2Uo Ii9mb2N1cy9sb2dvLTI1NngyNTYucG5nIik7DQoJCQlpbWFnZVZpZXcuZ2V0U3R5bGVzKCkucHV0 KCJmaWxsIiwgdHJ1ZSk7DQoJCQljb250ZW50ID0gaW1hZ2VWaWV3Ow0KCQl9DQoJCQ0KCQlmaW5h bCBCb3JkZXIgYm9yZGVyID0gbmV3IEJvcmRlcigpOw0KCQlib3JkZXIuc2V0VGl0bGUoa2xhc3Mu Z2V0TmFtZSgpKTsNCgkJYm9yZGVyLmdldFN0eWxlcygpLnB1dCgiY29sb3IiLCBjb2xvcik7DQoJ CWJvcmRlci5nZXRTdHlsZXMoKS5wdXQoInRoaWNrbmVzcyIsIDMpOw0KCQlib3JkZXIuZ2V0U3R5 bGVzKCkucHV0KCJwYWRkaW5nIiwgMTApOw0KCQlib3JkZXIuc2V0UHJlZmVycmVkU2l6ZSgyMjAs IDE1MCk7DQoJCWJvcmRlci5zZXRDb250ZW50KGNvbnRlbnQpOw0KCQlyZXR1cm4gYm9yZGVyOw0K CX0NCg0KCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRUaXRsZShmaW5hbCBTdHJpbmcgdGV4dCwg ZmluYWwgRGlzcGxheSBkaXNwbGF5KSB7DQoJCXJldHVybiBTdHJpbmcuZm9ybWF0KCJbJXNdICVz IiwgZGlzcGxheS5nZXROYW1lKCksIHRleHQpOw0KCX0NCg0KCS8vIEFwcGxpY2F0aW9uLlVucHJv Y2Vzc2VkS2V5SGFuZGxlciBkZWxlZ2F0aW9uDQoJQE92ZXJyaWRlDQoJcHVibGljIHZvaWQga2V5 VHlwZWQoY2hhciBjaGFyYWN0ZXIpIHsNCgkJdW5wcm9jZXNzZWRLZXlIYW5kbGVyLmtleVR5cGVk KGNoYXJhY3Rlcik7DQoJfQ0KCUBPdmVycmlkZQ0KCXB1YmxpYyB2b2lkIGtleVByZXNzZWQoaW50 IGtleUNvZGUsIEtleUxvY2F0aW9uIGtleUxvY2F0aW9uKSB7DQoJCXVucHJvY2Vzc2VkS2V5SGFu ZGxlci5rZXlQcmVzc2VkKGtleUNvZGUsIGtleUxvY2F0aW9uKTsNCgl9DQoJQE92ZXJyaWRlDQoJ cHVibGljIHZvaWQga2V5UmVsZWFzZWQoaW50IGtleUNvZGUsIEtleUxvY2F0aW9uIGtleUxvY2F0 aW9uKSB7DQoJCXVucHJvY2Vzc2VkS2V5SGFuZGxlci5rZXlSZWxlYXNlZChrZXlDb2RlLCBrZXlM b2NhdGlvbik7DQoJfQ0KDQoNCg0KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFy Z3MpIHsNCgkJLy8gRW5hYmxlIHRoZSAnZGVidWcgZm9jdXMnIGRlY29yYXRvciBieSBzZXR0aW5n IGEgU3lzdGVtIHByb3BlcnR5DQoJCS8vIHdoaWNoIHdpbGwgYmUgcHJvY2Vzc2VkIHdoZW4gdGhl IEFwcGxpY2F0aW9uQ29udGV4dCBpcyBjcmVhdGVkDQoJCVN5c3RlbS5zZXRQcm9wZXJ0eSgib3Jn LmFwYWNoZS5waXZvdC53dGsuZGVidWdmb2N1cyIsICJ0cnVlIik7DQoJCURlc2t0b3BBcHBsaWNh dGlvbkNvbnRleHQubWFpbihQaXZvdFdpbmRvd0ZvY3VzVGVzdEFwcC5jbGFzcywgYXJncyk7DQoJ fQ0KDQoNCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBib29sZWFuIHNodXRkb3duKGJvb2xlYW4gb3B0 aW9uYWwpIHRocm93cyBFeGNlcHRpb24gew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCUBPdmVycmlk ZQ0KCXB1YmxpYyB2b2lkIHN1c3BlbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCgl9DQoJQE92ZXJy aWRlDQoJcHVibGljIHZvaWQgcmVzdW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQoJfQ0KDQp9DQo= --00504502af900d7c95049def8350--