Return-Path: Delivered-To: apmail-incubator-cxf-dev-archive@locus.apache.org Received: (qmail 3372 invoked from network); 7 Sep 2007 03:25:07 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 7 Sep 2007 03:25:07 -0000 Received: (qmail 58450 invoked by uid 500); 7 Sep 2007 03:25:01 -0000 Delivered-To: apmail-incubator-cxf-dev-archive@incubator.apache.org Received: (qmail 58404 invoked by uid 500); 7 Sep 2007 03:25:01 -0000 Mailing-List: contact cxf-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cxf-dev@incubator.apache.org Delivered-To: mailing list cxf-dev@incubator.apache.org Received: (qmail 58394 invoked by uid 99); 7 Sep 2007 03:25:01 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Sep 2007 20:25:01 -0700 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of jliu@iona.com designates 12.170.54.180 as permitted sender) Received: from [12.170.54.180] (HELO amer-mx1.iona.com) (12.170.54.180) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Sep 2007 03:24:50 +0000 X-IronPort-AV: E=Sophos;i="4.20,219,1186372800"; d="scan'208";a="5048855" Received: from amer-ems1.ionaglobal.com ([10.65.6.25]) by amer-mx1.iona.com with ESMTP; 06 Sep 2007 23:24:28 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Subject: RE: svn commit: r573429 [1/2] - in /incubator/cxf/branches/jliu: ./ maven_repo/ maven_repo/javax/ maven_repo/javax/rs/ maven_repo/javax/rs/jsr311-api/ maven_repo/javax/rs/jsr311-api/0.9/ rt/ rt/core/src/main/java/org/apache/cxf/endpoint/ rt/core/src/main/ Date: Thu, 6 Sep 2007 23:24:26 -0400 Message-ID: <9A4696F35B459043970EE4A85A317390066928@amer-ems1.IONAGLOBAL.COM> In-Reply-To: <200709062300.15103.dkulp@apache.org> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: svn commit: r573429 [1/2] - in /incubator/cxf/branches/jliu: ./ maven_repo/ maven_repo/javax/ maven_repo/javax/rs/ maven_repo/javax/rs/jsr311-api/ maven_repo/javax/rs/jsr311-api/0.9/ rt/ rt/core/src/main/java/org/apache/cxf/endpoint/ rt/core/src/main/j... Thread-Index: Acfw+2RIpWVcZr54RaKJDkTT/woWbgAAlNvA From: "Liu, Jervis" To: Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8" X-Virus-Checked: Checked by ClamAV on apache.org VG8gYmUgaG9uZXN0LCBJIGFtIHJlYWxseSBub3Qgc3VyZSBhYm91dCB0aGlzLiBUaGUgSmVyc2V5 IGlzIENEREwsIGJ1dCB0aGUganNyMzExIHNwZWMncyBBUEkgamFyIHNob3VsZCBub3QgYmUgQ0RE TCwgc2hvdWxkIGl0PyBJIGRpZG4ndCBmaW5kIGFueSBsaWNlbnNlIGRlY2xhcmF0aW9ucyBpbnNp ZGUgdGhlIGphciBmaWxlLg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206 IERhbmllbCBLdWxwIFttYWlsdG86ZGt1bHBAYXBhY2hlLm9yZ10NCj4gU2VudDogMjAwN+W5tDnm nIg35pelIDExOjAwDQo+IFRvOiBjeGYtZGV2QGluY3ViYXRvci5hcGFjaGUub3JnDQo+IFN1Ympl Y3Q6IFJlOiBzdm4gY29tbWl0OiByNTczNDI5IFsxLzJdIC0gaW4NCj4gL2luY3ViYXRvci9jeGYv YnJhbmNoZXMvamxpdTogLi8gbWF2ZW5fcmVwby8gbWF2ZW5fcmVwby9qYXZheC8NCj4gbWF2ZW5f cmVwby9qYXZheC9ycy8gbWF2ZW5fcmVwby9qYXZheC9ycy9qc3IzMTEtYXBpLw0KPiBtYXZlbl9y ZXBvL2phdmF4L3JzL2pzcjMxMS1hcGkvMC45LyBydC8NCj4gcnQvY29yZS9zcmMvbWFpbi9qYXZh L29yZy9hcGFjaGUvY3hmL2VuZHBvaW50LyBydC9jb3JlL3NyYy9tYWluLw0KPiANCj4gDQo+IA0K PiBKZXJ2aXMsDQo+IA0KPiBJcyB0aGUganNyMzExLWFwaSBqYXIgQ0RETD8gICAgSWYgc28sIEkg ZG9uJ3QgYmVsaWV2ZSBpdCBjYW4gDQo+IGJlIGNoZWNrZWQgDQo+IGludG8gQXBhY2hlJ3Mgc3Zu Lg0KPiANCj4gRGFuDQo+IA0KPiANCj4gDQo+IE9uIFRodXJzZGF5IDA2IFNlcHRlbWJlciAyMDA3 LCBqbGl1QGFwYWNoZS5vcmcgd3JvdGU6DQo+ID4gQXV0aG9yOiBqbGl1DQo+ID4gRGF0ZTogVGh1 IFNlcCAgNiAxOTo0NDo0NCAyMDA3DQo+ID4gTmV3IFJldmlzaW9uOiA1NzM0MjkNCj4gPg0KPiA+ IFVSTDogaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yz9yZXY9NTczNDI5JnZpZXc9cmV2DQo+ ID4gTG9nOiAoZW1wdHkpDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiAgICAgaW5jdWJhdG9yL2N4Zi9i cmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vDQo+ID4gICAgIGluY3ViYXRvci9jeGYvYnJhbmNoZXMv amxpdS9tYXZlbl9yZXBvL2phdmF4Lw0KPiA+ICAgICBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2ps aXUvbWF2ZW5fcmVwby9qYXZheC9ycy8NCj4gPiAgICAgaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9q bGl1L21hdmVuX3JlcG8vamF2YXgvcnMvanNyMzExLWFwaS8NCj4gPiAgICAgaW5jdWJhdG9yL2N4 Zi9icmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vamF2YXgvcnMvanNyMzExLWFwaS8wLjkvDQo+ID4g ICAgDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9tYXZlbl9yZXBvL2phdmF4 L3JzL2pzcjMxMS1hcGkvMC45L2pzcjMxMS0NCj4gPmFwaS0wLjkuamFyICAgKHdpdGggcHJvcHMp DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9tYXZlbl9yZXBvL2phdmF4L3Jz L2pzcjMxMS1hcGkvMC45L2pzcjMxMS0NCj4gPmFwaS0wLjkuamFyLnNoYTENCj4gPiANCj4gaW5j dWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vamF2YXgvcnMvanNyMzExLWFwaS8w LjkvanNyMzExLQ0KPiA+YXBpLTAuOS5wb20NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hl cy9qbGl1L21hdmVuX3JlcG8vamF2YXgvcnMvanNyMzExLWFwaS8wLjkvanNyMzExLQ0KPiA+YXBp LTAuOS5wb20uc2hhMQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvY29y ZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvY3hmL2VuZHBvDQo+ID5pbnQvQWJzdHJhY3RFbmRw b2ludEZhY3RvcnkuamF2YSAgICh3aXRoIHByb3BzKQ0KPiA+IGluY3ViYXRvci9jeGYvYnJhbmNo ZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy8NCj4gPiAgICAgaW5jdWJhdG9yL2N4Zi9icmFuY2hl cy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3BvbS54bWwgICAod2l0aA0KPiA+IHByb3BzKSBpbmN1 YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjLw0KPiA+ICAgICBp bmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vDQo+ ID4gICAgIGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMv bWFpbi9qYXZhLw0KPiA+ICAgICBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRl bmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvDQo+ID4gICAgDQo+ID4gDQo+IGluY3ViYXRvci9j eGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFj aGUNCj4gPi8NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5k L2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi8NCj4gPiANCj4gaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3Jn L2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy8NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9q bGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9q YXhycy9KQVhSU0JpbmRpbmdGYWN0b3J5LmphdmEgICAod2l0aCBwcm9wcykNCj4gPiANCj4gaW5j dWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEv b3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU0ludm9rZXIuamF2YSAgICh3aXRoIHByb3Bz KQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMv c3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL0pBWFJTU2VydmVyRmFjdG9y eUJlYW4uamF2YSAgICh3aXRoIHByb3BzKQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVz L2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hm L2pheHJzL0pBWFJTU2VydmljZUZhY3RvcnlCZWFuLmphdmEgICAod2l0aCBwcm9wcykNCj4gPiAN Cj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWlu L2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU1NlcnZpY2VJbXBsLmphdmEgICAo d2l0aCBwcm9wcykNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250 ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9pbnRlcmNl cHRvci8NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2ph eHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9pbnRlcmNlcHRvci9K QVhSU0Rpc3BhdGNoSW50ZXJjZXB0b3IuamF2YSAgICh3aXRoIHByb3BzKQ0KPiA+IA0KPiBpbmN1 YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9v cmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL2ludGVyY2VwdG9yL0pBWFJTT3V0SW50ZXJjZXB0b3Iu amF2YSAgICh3aXRoIHByb3BzKQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUv cnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJz L21vZGVsLw0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQv amF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL21vZGVsL0NsYXNz UmVzb3VyY2VJbmZvLmphdmEgICAod2l0aCBwcm9wcykNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9i cmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0K PiA+L2N4Zi9qYXhycy9tb2RlbC9NZXRob2REaXNwYXRjaGVyLmphdmEgICAod2l0aCBwcm9wcykN Cj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3Ny Yy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9PcGVyYXRpb25SZXNv dXJjZUluZm8uamF2YSAgICh3aXRoIHByb3BzKQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5j aGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4v Y3hmL2pheHJzL21vZGVsL1VSSVRlbXBsYXRlLmphdmEgICAod2l0aCBwcm9wcykNCj4gPiANCj4g aW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2ph dmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9wcm92aWRlci8NCj4gPiANCj4gaW5jdWJhdG9y L2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2Fw YWNoZQ0KPiA+L2N4Zi9qYXhycy9wcm92aWRlci9KQVhCRWxlbWVudFByb3ZpZGVyLmphdmEgICAo d2l0aCBwcm9wcykNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250 ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9wcm92aWRl ci9Qcm92aWRlckZhY3RvcnlJbXBsLmphdmEgICAod2l0aCBwcm9wcykNCj4gPiBpbmN1YmF0b3Iv Y3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vcmVzb3VyY2VzLw0K PiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3Jj L21haW4vcmVzb3VyY2VzL01FVEEtDQo+ID5JTkYvDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJh bmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS0NCj4g PklORi9idXMtZXh0ZW5zaW9ucy54bWwgICAod2l0aCBwcm9wcykNCj4gPiANCj4gaW5jdWJhdG9y L2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL3Jlc291cmNlcy9N RVRBLQ0KPiA+SU5GL2N4Zi8NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0 L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLQ0KPiA+SU5GL2N4Zi9jeGYt ZXh0ZW5zaW9uLWpheHJzLWJpbmRpbmcueG1sICAgKHdpdGggcHJvcHMpDQo+ID4gDQo+IGluY3Vi YXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9yZXNvdXJj ZXMvTUVUQS0NCj4gPklORi9jeGYvY3hmLmV4dGVuc2lvbg0KPiA+IA0KPiBpbmN1YmF0b3IvY3hm L2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEt DQo+ID5JTkYvc2VydmljZXMvDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9y dC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS0NCj4gPklORi9zZXJ2aWNl cy9qYXZheC53cy5ycy5leHQuUHJvdmlkZXJGYWN0b3J5DQo+ID4gaW5jdWJhdG9yL2N4Zi9icmFu Y2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy90ZXN0Lw0KPiA+ICAgICBpbmN1YmF0b3Iv Y3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL3Rlc3QvamF2YS8NCj4gPiAg ICAgaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy90ZXN0 L2phdmEvb3JnLw0KPiA+ICAgIA0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUv cnQvZnJvbnRlbmQvamF4cnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlDQo+ID4vDQo+ID4gDQo+ IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvdGVzdC9q YXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMv amxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYv cnMvDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9zeXN0ZXN0cy9zcmMvdGVz dC9qYXZhL29yZy9hcGFjaGUvY3hmL3N5c3QNCj4gPmVzdC9qYXhycy8NCj4gPiANCj4gaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L3N5c3Rlc3RzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9j eGYvc3lzdA0KPiA+ZXN0L2pheHJzL0Jvb2suamF2YSAgICh3aXRoIHByb3BzKQ0KPiA+IA0KPiBp bmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvc3lzdGVzdHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBh Y2hlL2N4Zi9zeXN0DQo+ID5lc3QvamF4cnMvQm9va1NlcnZlci5qYXZhICAgKHdpdGggcHJvcHMp DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9zeXN0ZXN0cy9zcmMvdGVzdC9q YXZhL29yZy9hcGFjaGUvY3hmL3N5c3QNCj4gPmVzdC9qYXhycy9Cb29rU3RvcmUuamF2YSAgICh3 aXRoIHByb3BzKQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvc3lzdGVzdHMv c3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL2N4Zi9zeXN0DQo+ID5lc3QvamF4cnMvQ0QuamF2YSAg ICh3aXRoIHByb3BzKQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvc3lzdGVz dHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL2N4Zi9zeXN0DQo+ID5lc3QvamF4cnMvSkFYUlND bGllbnRTZXJ2ZXJCb29rVGVzdC5qYXZhICAgKHdpdGggcHJvcHMpIE1vZGlmaWVkOg0KPiA+ICAg ICBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcG9tLnhtbA0KPiA+ICAgIA0KPiA+IA0KPiBp bmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFj aGUvY3hmL2VuZHBvDQo+ID5pbnQvTWFuYWdlZEVuZHBvaW50LmphdmENCj4gPiANCj4gaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2N4 Zi90cmFucw0KPiA+cG9ydC9DaGFpbkluaXRpYXRpb25PYnNlcnZlci5qYXZhDQo+ID4gDQo+IGlu Y3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9kYXRhYmluZGluZy9hZWdpcy9zcmMvdGVzdC9q YXZhL29yZy9hcGENCj4gPmNoZS9jeGYvYWVnaXMvQWJzdHJhY3RBZWdpc1Rlc3QuamF2YQ0KPiA+ IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvc2ltcGxlL3NyYy9t YWluL2phdmEvb3JnL2FwYWNoDQo+ID5lL2N4Zi9mcm9udGVuZC9BYnN0cmFjdFNlcnZpY2VGYWN0 b3J5LmphdmENCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5k L3NpbXBsZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaA0KPiA+ZS9jeGYvZnJvbnRlbmQvQ2xpZW50 RmFjdG9yeUJlYW4uamF2YQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQv ZnJvbnRlbmQvc2ltcGxlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoDQo+ID5lL2N4Zi9mcm9udGVu ZC9TZXJ2ZXJGYWN0b3J5QmVhbi5qYXZhDQo+ID4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1 L3J0L3BvbS54bWwNCj4gPiAgICAgaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3N5c3Rlc3Rz L3BvbS54bWwNCj4gPg0KPiA+IEFkZGVkOg0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVz L2psaXUvbWF2ZW5fcmVwby9qYXZheC9ycy9qc3IzMTEtYXBpLzAuOS9qc3IzMTEtDQo+ID5hcGkt MC45LmphciBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vamENCj4gPnZheC9ycy9qc3IzMTEtYXBp LzAuOS9qc3IzMTEtYXBpLTAuOS5qYXI/cmV2PTU3MzQyOSZ2aWV3PWF1dG8NCj4gPiANCj4gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KPiA+PT09PT09PT0gQmluYXJ5IGZpbGUgLSBubyBkaWZmIGF2YWlsYWJsZS4N Cj4gPg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxp dS9tYXZlbl9yZXBvL2phdmF4L3JzL2pzcjMxMS1hcGkvMC45L2pzcjMxMS0NCj4gPmFwaS0wLjku amFyDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0tIHN2bjptaW1lLXR5cGUgPSBh cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCj4gPg0KPiA+IEFkZGVkOg0KPiA+IA0KPiBpbmN1YmF0 b3IvY3hmL2JyYW5jaGVzL2psaXUvbWF2ZW5fcmVwby9qYXZheC9ycy9qc3IzMTEtYXBpLzAuOS9q c3IzMTEtDQo+ID5hcGktMC45Lmphci5zaGExIFVSTDoNCj4gPiANCj4gaHR0cDovL3N2bi5hcGFj aGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvbWF2ZW5fcmVwby9qYQ0K PiA+dmF4L3JzL2pzcjMxMS1hcGkvMC45L2pzcjMxMS1hcGktMC45Lmphci5zaGExP3Jldj01NzM0 Mjkmdmlldz1hdXRvDQo+ID4gDQo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj09PT09PT09IC0tLQ0KPiA+ IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvbWF2ZW5fcmVwby9qYXZheC9ycy9qc3Iz MTEtYXBpLzAuOS9qc3IzMTEtDQo+ID5hcGktMC45Lmphci5zaGExIChhZGRlZCkgKysrDQo+ID4g DQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9tYXZlbl9yZXBvL2phdmF4L3JzL2pzcjMx MS1hcGkvMC45L2pzcjMxMS0NCj4gPmFwaS0wLjkuamFyLnNoYTEgVGh1IFNlcCAgNiAxOTo0NDo0 NCAyMDA3IEBAIC0wLDAgKzEgQEANCj4gPiArZWZiMmFlOGZkZWYxNGEzNGFlNDE2MWJjZGFjMWEx NDVlMzM1NzQ1ZiAganNyMzExLWFwaS0wLjkuamFyDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiANCj4g aW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vamF2YXgvcnMvanNyMzExLWFw aS8wLjkvanNyMzExLQ0KPiA+YXBpLTAuOS5wb20gVVJMOg0KPiA+IA0KPiBodHRwOi8vc3ZuLmFw YWNoZS5vcmcvdmlld3ZjL2luY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9tYXZlbl9yZXBvL2ph DQo+ID52YXgvcnMvanNyMzExLWFwaS8wLjkvanNyMzExLWFwaS0wLjkucG9tP3Jldj01NzM0Mjkm dmlldz1hdXRvDQo+ID4gDQo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj09PT09PT09IC0tLQ0KPiA+IA0K PiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvbWF2ZW5fcmVwby9qYXZheC9ycy9qc3IzMTEt YXBpLzAuOS9qc3IzMTEtDQo+ID5hcGktMC45LnBvbSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1 YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvbWF2ZW5fcmVwby9qYXZheC9ycy9qc3IzMTEtYXBpLzAu OS9qc3IzMTEtDQo+ID5hcGktMC45LnBvbSBUaHUgU2VwICA2IDE5OjQ0OjQ0IDIwMDcgQEAgLTAs MCArMSwxMSBAQA0KPiA+ICs8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxw cm9qZWN0Pg0KPiA+ICsgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCj4gPiAr ICA8Z3JvdXBJZD5qYXZheC5yczwvZ3JvdXBJZD4NCj4gPiArICA8YXJ0aWZhY3RJZD5qc3IzMTEt YXBpPC9hcnRpZmFjdElkPg0KPiA+ICsgIDx2ZXJzaW9uPjAuOTwvdmVyc2lvbj4NCj4gPiArICA8 ZGVzY3JpcHRpb24+V2ViIFNlcnZpY2UgQW5ub3RhdGlvbnM8L2Rlc2NyaXB0aW9uPg0KPiA+ICsg IDx1cmw+aHR0cHM6Ly9qYXgtd3MuZGV2LmphdmEubmV0LzwvdXJsPg0KPiA+ICsgIDxkaXN0cmli dXRpb25NYW5hZ2VtZW50Pg0KPiA+ICsgICANCj4gPiANCj4gPGRvd25sb2FkVXJsPmh0dHBzOi8v amF4LXdzLmRldi5qYXZhLm5ldC9qYXgtd3MtZWEzLzwvZG93bmxvYWRVcmw+ICsgDQo+ID4gPC9k aXN0cmlidXRpb25NYW5hZ2VtZW50Pg0KPiA+ICs8L3Byb2plY3Q+DQo+ID4gXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9i cmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vamF2YXgvcnMvanNyMzExLWFwaS8wLjkvanNyMzExLQ0K PiA+YXBpLTAuOS5wb20uc2hhMSBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92 aWV3dmMvaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vamENCj4gPnZheC9y cy9qc3IzMTEtYXBpLzAuOS9qc3IzMTEtYXBpLTAuOS5wb20uc2hhMT9yZXY9NTczNDI5JnZpZXc9 YXV0bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09PSAtLS0NCj4gPiANCj4gaW5j dWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L21hdmVuX3JlcG8vamF2YXgvcnMvanNyMzExLWFwaS8w LjkvanNyMzExLQ0KPiA+YXBpLTAuOS5wb20uc2hhMSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1 YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvbWF2ZW5fcmVwby9qYXZheC9ycy9qc3IzMTEtYXBpLzAu OS9qc3IzMTEtDQo+ID5hcGktMC45LnBvbS5zaGExIFRodSBTZXAgIDYgMTk6NDQ6NDQgMjAwNyBA QCAtMCwwICsxIEBADQo+ID4gKzA0YmUwMGEwZDk2NGM1NzJmNGI2NDcxMjYzYmExNjZkYjliNTQ5 NmMganNyMzExLWFwaS0wLjkucG9tDQo+ID4NCj4gPiBNb2RpZmllZDogaW5jdWJhdG9yL2N4Zi9i cmFuY2hlcy9qbGl1L3BvbS54bWwNCj4gPiBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9zdm4uYXBhY2hl Lm9yZy92aWV3dmMvaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3BvbS54bWw/cmV2PTUNCj4g PjczNDI5JnIxPTU3MzQyOCZyMj01NzM0Mjkmdmlldz1kaWZmDQo+ID4gDQo+ID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCj4gPj09PT09PT09IC0tLSBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcG9tLnhtbCAo b3JpZ2luYWwpDQo+ID4gKysrIGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9wb20ueG1sIFRo dSBTZXAgIDYgMTk6NDQ6NDQgMjAwNw0KPiA+IEBAIC00Miw2ICs0Miw3IEBADQo+ID4gICAgICA8 L3ByZXJlcXVpc2l0ZXM+DQo+ID4NCj4gPiAgICAgIDxwcm9wZXJ0aWVzPg0KPiA+ICsgICAgICAg ICAgICA8dG9wRGlyZWN0b3J5TG9jYXRpb24+LjwvdG9wRGlyZWN0b3J5TG9jYXRpb24+DQo+ID4g ICAgICAgICAgIDxjb21waWxlci5mb3JrPmZhbHNlPC9jb21waWxlci5mb3JrPg0KPiA+ICAgICAg IDwvcHJvcGVydGllcz4NCj4gPg0KPiA+IEBAIC0xMzksNyArMTQwLDI5IEBADQo+ID4gICAgICAg ICAgPG1vZHVsZT5tYXZlbi1wbHVnaW5zL2FyY2hldHlwZXM8L21vZHVsZT4NCj4gPiAgICAgICAg ICA8bW9kdWxlPm1hdmVuLXBsdWdpbnMvZWNsaXBzZS1wbHVnaW4tZ2VuZXJhdG9yPC9tb2R1bGU+ DQo+ID4gICAgICA8L21vZHVsZXM+DQo+ID4gKw0KPiA+DQo+ID4gKyAgICA8cmVwb3NpdG9yaWVz Pg0KPiA+ICsgICAgICAgIDxyZXBvc2l0b3J5Pg0KPiA+ICsgICAgICAgICAgICA8aWQ+cHJpdmF0 ZS1yZXBvPC9pZD4NCj4gPiArICAgICAgICAgICAgPG5hbWU+cHJpdmF0ZSByZXBvPC9uYW1lPg0K PiA+ICsgICAgICAgICAgIA0KPiA+IA0KPiA8dXJsPmZpbGU6JHtiYXNlZGlyfS8ke3RvcERpcmVj dG9yeUxvY2F0aW9ufS9tYXZlbl9yZXBvPC91cmw+ICsgICAgICAgDQo+ID4gICAgIDxyZWxlYXNl cz4NCj4gPiArICAgICAgICAgICAgICAgIDxlbmFibGVkPnRydWU8L2VuYWJsZWQ+DQo+ID4gKyAg ICAgICAgICAgIDwvcmVsZWFzZXM+DQo+ID4gKyAgICAgICAgICAgIDxzbmFwc2hvdHM+DQo+ID4g KyAgICAgICAgICAgICAgICA8ZW5hYmxlZD50cnVlPC9lbmFibGVkPg0KPiA+ICsgICAgICAgICAg ICA8L3NuYXBzaG90cz4NCj4gPiArICAgICAgICA8L3JlcG9zaXRvcnk+DQo+ID4gKyAgICAgICAg PHJlcG9zaXRvcnk+DQo+ID4gKyAgICAgICAgICAgIDxpZD5qYXZhLm5ldDwvaWQ+DQo+ID4gKyAg ICAgICAgICAgIDxuYW1lPmphdmEubmV0IE1hdmVuIFJlcG9zaXRvcnk8L25hbWU+DQo+ID4gKyAg ICAgICAgICAgDQo+ID4gDQo+IDx1cmw+aHR0cHM6Ly9tYXZlbi1yZXBvc2l0b3J5LmRldi5qYXZh Lm5ldC9ub25hdi9yZXBvc2l0b3J5LzwvdXJsPiArICANCj4gPiAgICAgICAgICA8bGF5b3V0Pmxl Z2FjeTwvbGF5b3V0Pg0KPiA+ICsgICAgICAgIDwvcmVwb3NpdG9yeT4NCj4gPiArICAgIDwvcmVw b3NpdG9yaWVzPg0KPiA+ICsNCj4gPiArDQo+ID4gICAgICA8cHJvZmlsZXM+DQo+ID4gICAgICAg ICAgPHByb2ZpbGU+DQo+ID4gICAgICAgICAgICAgIDwhLS0gZGVmYXVsdCBwcm9maWxlIGVuYWJs ZXMgY2hlY2tzdHlsZSBhbmQgWGxpbnQgc3R1ZmYNCj4gPiAtLT4NCj4gPg0KPiA+IEFkZGVkOg0K PiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvY29yZS9zcmMvbWFpbi9qYXZh L29yZy9hcGFjaGUvY3hmL2VuZHBvDQo+ID5pbnQvQWJzdHJhY3RFbmRwb2ludEZhY3RvcnkuamF2 YSBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvaW5jdWJhdG9yL2N4 Zi9icmFuY2hlcy9qbGl1L3J0L2NvcmUvc3JjL20NCj4gPmFpbi9qYXZhL29yZy9hcGFjaGUvY3hm L2VuZHBvaW50L0Fic3RyYWN0RW5kcG9pbnRGYWN0b3J5LmphdmENCj4gP3Jldj01NzM0Mg0KPiA+ OSZ2aWV3PWF1dG8NCj4gPiANCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+PT09PT09PT0gLS0tDQo+ID4g DQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9jb3JlL3NyYy9tYWluL2phdmEvb3Jn L2FwYWNoZS9jeGYvZW5kcG8NCj4gPmludC9BYnN0cmFjdEVuZHBvaW50RmFjdG9yeS5qYXZhIChh ZGRlZCkgKysrDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9jb3JlL3Ny Yy9tYWluL2phdmEvb3JnL2FwYWNoZS9jeGYvZW5kcG8NCj4gPmludC9BYnN0cmFjdEVuZHBvaW50 RmFjdG9yeS5qYXZhIFRodSBTZXAgIDYgMTk6NDQ6NDQgMjAwNyBAQCAtMCwwDQo+ID4gKzEsMTY3 IEBADQo+ID4gKy8qKg0KPiA+ICsgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQo+ID4gKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGlj ZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlDQo+ID4gKyAqIGRpc3RyaWJ1dGVk IHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQo+ID4gKyAqIHJlZ2Fy ZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KPiA+ ICsgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQo+ ID4gKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2UNCj4gPiArICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5 IG9mIHRoZSBMaWNlbnNlIGF0DQo+ID4gKyAqDQo+ID4gKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9y Zy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KPiA+ICsgKg0KPiA+ICsgKiBVbmxlc3MgcmVxdWlyZWQg YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQo+ID4gKyAqIHNvZnR3 YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQo+ ID4gKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G IEFOWQ0KPiA+ICsgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExp Y2Vuc2UgZm9yIHRoZQ0KPiA+ICsgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz c2lvbnMgYW5kIGxpbWl0YXRpb25zDQo+ID4gKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KPiA+ICsg Ki8NCj4gPiArcGFja2FnZSBvcmcuYXBhY2hlLmN4Zi5lbmRwb2ludDsNCj4gPiArDQo+ID4gK2lt cG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KPiA+ICtpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQo+ ID4gK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KPiA+ICsNCj4gPiAraW1wb3J0IGphdmF4LnhtbC5u YW1lc3BhY2UuUU5hbWU7DQo+ID4gKw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOw0K PiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzRXhjZXB0aW9uOw0KPiA+ICtpbXBvcnQgb3Jn LmFwYWNoZS5jeGYuQnVzRmFjdG9yeTsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJpbmRp bmcuQmluZGluZ0NvbmZpZ3VyYXRpb247DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5iaW5k aW5nLkJpbmRpbmdGYWN0b3J5Ow0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZGF0YWJpbmRp bmcuRGF0YUJpbmRpbmc7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5mZWF0dXJlLkFic3Ry YWN0RmVhdHVyZTsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkFic3Ry YWN0QmFzaWNJbnRlcmNlcHRvclByb3ZpZGVyOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYu c2VydmljZS5tb2RlbC5CaW5kaW5nSW5mbzsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNl cnZpY2UubW9kZWwuRW5kcG9pbnRJbmZvOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJh bnNwb3J0LkRlc3RpbmF0aW9uRmFjdG9yeTsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLndz LmFkZHJlc3NpbmcuRW5kcG9pbnRSZWZlcmVuY2VUeXBlOw0KPiA+ICsNCj4gPiArcHVibGljIGFi c3RyYWN0IGNsYXNzIEFic3RyYWN0RW5kcG9pbnRGYWN0b3J5IGV4dGVuZHMNCj4gPiBBYnN0cmFj dEJhc2ljSW50ZXJjZXB0b3JQcm92aWRlciB7ICsgICAgcHJvdGVjdGVkIEJ1cyBidXM7DQo+ID4g KyAgICBwcm90ZWN0ZWQgU3RyaW5nIGFkZHJlc3M7DQo+ID4gKyAgICBwcm90ZWN0ZWQgU3RyaW5n IHRyYW5zcG9ydElkOw0KPiA+ICsgICAgcHJvdGVjdGVkIFN0cmluZyBiaW5kaW5nSWQ7DQo+ID4g KyAgICBwcm90ZWN0ZWQgRGF0YUJpbmRpbmcgZGF0YUJpbmRpbmc7DQo+ID4gKyAgICBwcm90ZWN0 ZWQgQmluZGluZ0ZhY3RvcnkgYmluZGluZ0ZhY3Rvcnk7DQo+ID4gKyAgICBwcm90ZWN0ZWQgRGVz dGluYXRpb25GYWN0b3J5IGRlc3RpbmF0aW9uRmFjdG9yeTsNCj4gPiArICAgIHByb3RlY3RlZCBR TmFtZSBlbmRwb2ludE5hbWU7DQo+ID4gKyAgICBwcm90ZWN0ZWQgTWFwPFN0cmluZywgT2JqZWN0 PiBwcm9wZXJ0aWVzOw0KPiA+ICsgICAgcHJvdGVjdGVkIExpc3Q8QWJzdHJhY3RGZWF0dXJlPiBm ZWF0dXJlczsNCj4gPiArICAgIHByb3RlY3RlZCBCaW5kaW5nQ29uZmlndXJhdGlvbiBiaW5kaW5n Q29uZmlnOw0KPiA+ICsgICAgcHJvdGVjdGVkIEVuZHBvaW50UmVmZXJlbmNlVHlwZSBlbmRwb2lu dFJlZmVyZW5jZTsNCj4gPiArICAgIHByb3RlY3RlZCBDb25kdWl0U2VsZWN0b3IgY29uZHVpdFNl bGVjdG9yOw0KPiA+ICsNCj4gPiArICAgIHByb3RlY3RlZCBhYnN0cmFjdCBFbmRwb2ludCBjcmVh dGVFbmRwb2ludCgpIHRocm93cyANCj4gQnVzRXhjZXB0aW9uLA0KPiA+IEVuZHBvaW50RXhjZXB0 aW9uOyArDQo+ID4gKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgRW5kcG9pbnRJbmZvIGNyZWF0ZUVu ZHBvaW50SW5mbygpIHRocm93cw0KPiA+IEJ1c0V4Y2VwdGlvbjsgKw0KPiA+ICsgICAgcHJvdGVj dGVkIGFic3RyYWN0IEJpbmRpbmdJbmZvIGNyZWF0ZUJpbmRpbmdJbmZvKCk7DQo+ID4gKw0KPiA+ ICsgICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBh ZGRyZXNzOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyB2b2lkIHNldEFkZHJl c3MoU3RyaW5nIGFkZHJlc3MpIHsNCj4gPiArICAgICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNz Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBCdXMgZ2V0QnVzKCkgew0KPiA+ ICsgICAgICAgIGlmIChidXMgPT0gbnVsbCkgew0KPiA+ICsgICAgICAgICAgICBidXMgPSBCdXNG YWN0b3J5LmdldFRocmVhZERlZmF1bHRCdXMoKTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAg ICAgcmV0dXJuIGJ1czsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBz ZXRCdXMoQnVzIGJ1cykgew0KPiA+ICsgICAgICAgIHRoaXMuYnVzID0gYnVzOw0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNwb3J0SWQoKSB7DQo+ID4g KyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydElkOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IHB1YmxpYyB2b2lkIHNldFRyYW5zcG9ydElkKFN0cmluZyB0cmFuc3BvcnRJZCkgew0KPiA+ICsg ICAgICAgIHRoaXMudHJhbnNwb3J0SWQgPSB0cmFuc3BvcnRJZDsNCj4gPiArICAgIH0NCj4gPiAr DQo+ID4gKyAgICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nSWQoU3RyaW5nIGJpbmQpIHsNCj4gPiAr ICAgICAgICBiaW5kaW5nSWQgPSBiaW5kOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1 YmxpYyBTdHJpbmcgZ2V0QmluZGluZ0lkKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBiaW5kaW5n SWQ7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIHZvaWQgc2V0QmluZGluZ0Nv bmZpZyhCaW5kaW5nQ29uZmlndXJhdGlvbiBvYmopIHsNCj4gPiArICAgICAgICBiaW5kaW5nQ29u ZmlnID0gb2JqOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBCaW5kaW5nQ29u ZmlndXJhdGlvbiBnZXRCaW5kaW5nQ29uZmlnKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBiaW5k aW5nQ29uZmlnOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBEZXN0aW5hdGlv bkZhY3RvcnkgZ2V0RGVzdGluYXRpb25GYWN0b3J5KCkgew0KPiA+ICsgICAgICAgIHJldHVybiBk ZXN0aW5hdGlvbkZhY3Rvcnk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIHZv aWQgc2V0RGVzdGluYXRpb25GYWN0b3J5KERlc3RpbmF0aW9uRmFjdG9yeQ0KPiA+IGRlc3RpbmF0 aW9uRmFjdG9yeSkgeyArICAgICAgICB0aGlzLmRlc3RpbmF0aW9uRmFjdG9yeSA9DQo+ID4gZGVz dGluYXRpb25GYWN0b3J5Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBRTmFt ZSBnZXRFbmRwb2ludE5hbWUoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIGVuZHBvaW50TmFtZTsN Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludE5hbWUo UU5hbWUgZW5kcG9pbnROYW1lKSB7DQo+ID4gKyAgICAgICAgdGhpcy5lbmRwb2ludE5hbWUgPSBl bmRwb2ludE5hbWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIHZvaWQgc2V0 RW5kcG9pbnRSZWZlcmVuY2UoRW5kcG9pbnRSZWZlcmVuY2VUeXBlIGVwcikgew0KPiA+ICsgICAg ICAgIGVuZHBvaW50UmVmZXJlbmNlID0gZXByOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFByb3BlcnRpZXMoKSB7DQo+ID4gKyAgICAg ICAgcmV0dXJuIHByb3BlcnRpZXM7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGlj IHZvaWQgc2V0UHJvcGVydGllcyhNYXA8U3RyaW5nLCBPYmplY3Q+IHByb3BlcnRpZXMpIHsNCj4g PiArICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOw0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIHB1YmxpYyBMaXN0PEFic3RyYWN0RmVhdHVyZT4gZ2V0RmVhdHVyZXMoKSB7 DQo+ID4gKyAgICAgICAgaWYgKGZlYXR1cmVzID09IG51bGwpIHsNCj4gPiArICAgICAgICAgICAg ZmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEFic3RyYWN0RmVhdHVyZT4oKTsNCj4gPiArICAgICAg ICB9DQo+ID4gKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4g PiArICAgIHB1YmxpYyB2b2lkIHNldEZlYXR1cmVzKExpc3Q8QWJzdHJhY3RGZWF0dXJlPiBmZWF0 dXJlcykgew0KPiA+ICsgICAgICAgIHRoaXMuZmVhdHVyZXMgPSBmZWF0dXJlczsNCj4gPiArICAg IH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgQmluZGluZ0ZhY3RvcnkgZ2V0QmluZGluZ0ZhY3Rv cnkoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIGJpbmRpbmdGYWN0b3J5Ow0KPiA+ICsgICAgfQ0K PiA+ICsNCj4gPiArICAgIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdGYWN0b3J5KEJpbmRpbmdGYWN0 b3J5IGJmKSB7DQo+ID4gKyAgICAgICAgdGhpcy5iaW5kaW5nRmFjdG9yeSAgPSBiZjsNCj4gPiAr ICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgQ29uZHVpdFNlbGVjdG9yIGdldENvbmR1aXRT ZWxlY3RvcigpIHsNCj4gPiArICAgICAgICByZXR1cm4gY29uZHVpdFNlbGVjdG9yOw0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyB2b2lkIHNldENvbmR1aXRTZWxlY3RvcihDb25k dWl0U2VsZWN0b3Igc2VsZWN0b3IpIHsNCj4gPiArICAgICAgICBjb25kdWl0U2VsZWN0b3IgPSBz ZWxlY3RvcjsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgRGF0YUJpbmRpbmcg Z2V0RGF0YUJpbmRpbmcoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIGRhdGFCaW5kaW5nOw0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyB2b2lkIHNldERhdGFCaW5kaW5nKERhdGFC aW5kaW5nIGRhdGFCaW5kaW5nKSB7DQo+ID4gKyAgICAgICAgdGhpcy5kYXRhQmluZGluZyA9IGRh dGFCaW5kaW5nOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArfQ0KPiA+DQo+ID4gUHJvcGNoYW5n ZToNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2NvcmUvc3JjL21haW4v amF2YS9vcmcvYXBhY2hlL2N4Zi9lbmRwbw0KPiA+aW50L0Fic3RyYWN0RW5kcG9pbnRGYWN0b3J5 LmphdmENCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+LS0tLS0tLS0gc3ZuOmVvbC1zdHlsZSA9 IG5hdGl2ZQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFu Y2hlcy9qbGl1L3J0L2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi9lbmRwbw0KPiA+ aW50L0Fic3RyYWN0RW5kcG9pbnRGYWN0b3J5LmphdmENCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K PiA+LS0tLS0tLS0gc3ZuOmtleXdvcmRzID0gUmV2IERhdGUNCj4gPg0KPiA+IE1vZGlmaWVkOg0K PiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvY29yZS9zcmMvbWFpbi9qYXZh L29yZy9hcGFjaGUvY3hmL2VuZHBvDQo+ID5pbnQvTWFuYWdlZEVuZHBvaW50LmphdmEgVVJMOg0K PiA+IA0KPiBodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2luY3ViYXRvci9jeGYvYnJhbmNo ZXMvamxpdS9ydC9jb3JlL3NyYy9tDQo+ID5haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi9lbmRwb2lu dC9NYW5hZ2VkRW5kcG9pbnQuamF2YT9yZXY9NTczDQo+IDQyOSZyMT01NzMNCj4gPjQyOCZyMj01 NzM0Mjkmdmlldz1kaWZmDQo+ID4gDQo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj09PT09PT09IC0tLQ0K PiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvY29yZS9zcmMvbWFpbi9qYXZh L29yZy9hcGFjaGUvY3hmL2VuZHBvDQo+ID5pbnQvTWFuYWdlZEVuZHBvaW50LmphdmEgKG9yaWdp bmFsKSArKysNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2NvcmUvc3Jj L21haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi9lbmRwbw0KPiA+aW50L01hbmFnZWRFbmRwb2ludC5q YXZhIFRodSBTZXAgIDYgMTk6NDQ6NDQgMjAwNyBAQCAtODYsNyArODYsNyBAQA0KPiA+ICAgICAg ICAgIGJ1ZmZlci5hcHBlbmQoTWFuYWdlbWVudENvbnN0YW50cy5UWVBFX1BST1AgKyAiPSIgKw0K PiA+ICJCdXMuU2VydmljZS5FbmRwb2ludCwiKTsNCj4gPg0KPiA+DQo+ID4gLSAgICAgICAgU3Ry aW5nIHNlcnZpY2VOYW1lID0NCj4gPiANCj4gT2JqZWN0TmFtZS5xdW90ZShlbmRwb2ludC5nZXRF bmRwb2ludEluZm8oKS5nZXRTZXJ2aWNlKCkuZ2V0TmFtZSgpLnRvUw0KPiA+dHJpbmcoKSk7ICsg ICAgICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9DQo+ID4gT2JqZWN0TmFtZS5xdW90ZShlbmRwb2lu dC5nZXRTZXJ2aWNlKCkuZ2V0TmFtZSgpLnRvU3RyaW5nKCkpOw0KPiA+IGJ1ZmZlci5hcHBlbmQo TWFuYWdlbWVudENvbnN0YW50cy5TRVJWSUNFX05BTUVfUFJPUCArICI9IiArDQo+ID4gc2Vydmlj ZU5hbWUgKyAiLCIpOyBTdHJpbmcgZW5kcG9pbnROYW1lID0NCj4gPiBPYmplY3ROYW1lLnF1b3Rl KGVuZHBvaW50LmdldEVuZHBvaW50SW5mbygpLmdldE5hbWUoKS50b1N0cmluZygpKTsNCj4gPiBi dWZmZXIuYXBwZW5kKE1hbmFnZW1lbnRDb25zdGFudHMuUE9SVF9OQU1FX1BST1AgKyAiPSIgKw0K PiA+IGVuZHBvaW50TmFtZSk7DQo+ID4NCj4gPiBNb2RpZmllZDoNCj4gPiANCj4gaW5jdWJhdG9y L2N4Zi9icmFuY2hlcy9qbGl1L3J0L2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi90 cmFucw0KPiA+cG9ydC9DaGFpbkluaXRpYXRpb25PYnNlcnZlci5qYXZhIFVSTDoNCj4gPiANCj4g aHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUv cnQvY29yZS9zcmMvbQ0KPiA+YWluL2phdmEvb3JnL2FwYWNoZS9jeGYvdHJhbnNwb3J0L0NoYWlu SW5pdGlhdGlvbk9ic2VydmVyLmphdg0KPiBhP3Jldj01NzM0DQo+ID4yOSZyMT01NzM0MjgmcjI9 NTczNDI5JnZpZXc9ZGlmZg0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09PSAtLS0N Cj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2NvcmUvc3JjL21haW4vamF2 YS9vcmcvYXBhY2hlL2N4Zi90cmFucw0KPiA+cG9ydC9DaGFpbkluaXRpYXRpb25PYnNlcnZlci5q YXZhIChvcmlnaW5hbCkgKysrDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9y dC9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9jeGYvdHJhbnMNCj4gPnBvcnQvQ2hhaW5J bml0aWF0aW9uT2JzZXJ2ZXIuamF2YSBUaHUgU2VwICA2IDE5OjQ0OjQ0IDIwMDcgQEAgLTM1LDYN Cj4gPiArMzUsNyBAQA0KPiA+ICBpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuUGhhc2VJbnRl cmNlcHRvckNoYWluOw0KPiA+ICBpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuUGhhc2VNYW5h Z2VyOw0KPiA+ICBpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5TZXJ2aWNlOw0KPiA+ICtp bXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5TZXJ2aWNlSW1wbDsNCj4gPiAgaW1wb3J0IG9y Zy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuRW5kcG9pbnRJbmZvOw0KPiA+DQo+ID4gIHB1Ymxp YyBjbGFzcyBDaGFpbkluaXRpYXRpb25PYnNlcnZlciBpbXBsZW1lbnRzIE1lc3NhZ2VPYnNlcnZl ciB7DQo+ID4gQEAgLTg2LDcgKzg3LDcgQEANCj4gPiAgICAgICAgICBpZiAoZXhjaGFuZ2UuZ2V0 RGVzdGluYXRpb24oKSA9PSBudWxsKSB7DQo+ID4gICAgICAgICAgICAgIGV4Y2hhbmdlLnNldERl c3RpbmF0aW9uKG0uZ2V0RGVzdGluYXRpb24oKSk7DQo+ID4gICAgICAgICAgfQ0KPiA+IC0gICAg ICAgIGlmIChlbmRwb2ludCAhPSBudWxsKSB7DQo+ID4gKyAgICAgICAgaWYgKGVuZHBvaW50ICE9 IG51bGwgJiYgKGVuZHBvaW50LmdldFNlcnZpY2UoKSBpbnN0YW5jZW9mDQo+ID4gU2VydmljZUlt cGwpKSB7DQo+ID4NCj4gPiAgICAgICAgICAgICAgRW5kcG9pbnRJbmZvIGVuZHBvaW50SW5mbyA9 IGVuZHBvaW50LmdldEVuZHBvaW50SW5mbygpOw0KPiA+DQo+ID4NCj4gPiBNb2RpZmllZDoNCj4g PiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2RhdGFiaW5kaW5nL2FlZ2lzL3Ny Yy90ZXN0L2phdmEvb3JnL2FwYQ0KPiA+Y2hlL2N4Zi9hZWdpcy9BYnN0cmFjdEFlZ2lzVGVzdC5q YXZhIFVSTDoNCj4gPiANCj4gaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3Iv Y3hmL2JyYW5jaGVzL2psaXUvcnQvZGF0YWJpbmRpbg0KPiA+Zy9hZWdpcy9zcmMvdGVzdC9qYXZh L29yZy9hcGFjaGUvY3hmL2FlZ2lzL0Fic3RyYWN0QWVnaXNUZXN0Lg0KPiBqYXZhP3Jldj01DQo+ ID43MzQyOSZyMT01NzM0MjgmcjI9NTczNDI5JnZpZXc9ZGlmZg0KPiA+IA0KPiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQo+ID49PT09PT09PSAtLS0NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1 L3J0L2RhdGFiaW5kaW5nL2FlZ2lzL3NyYy90ZXN0L2phdmEvb3JnL2FwYQ0KPiA+Y2hlL2N4Zi9h ZWdpcy9BYnN0cmFjdEFlZ2lzVGVzdC5qYXZhIChvcmlnaW5hbCkgKysrDQo+ID4gDQo+IGluY3Vi YXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9kYXRhYmluZGluZy9hZWdpcy9zcmMvdGVzdC9qYXZh L29yZy9hcGENCj4gPmNoZS9jeGYvYWVnaXMvQWJzdHJhY3RBZWdpc1Rlc3QuamF2YSBUaHUgU2Vw ICA2IDE5OjQ0OjQ0IA0KPiAyMDA3IEBAIC00Miw3DQo+ID4gKzQyLDcgQEANCj4gPiAgaW1wb3J0 IG9yZy5hcGFjaGUuY3hmLmJ1cy5leHRlbnNpb24uRXh0ZW5zaW9uTWFuYWdlckJ1czsNCj4gPiAg aW1wb3J0IG9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LlNlcnZlcjsNCj4gPiAgaW1wb3J0IG9yZy5h cGFjaGUuY3hmLmVuZHBvaW50LlNlcnZlclJlZ2lzdHJ5Ow0KPiA+IC1pbXBvcnQgb3JnLmFwYWNo ZS5jeGYuZnJvbnRlbmQuQWJzdHJhY3RFbmRwb2ludEZhY3Rvcnk7DQo+ID4gK2ltcG9ydCBvcmcu YXBhY2hlLmN4Zi5mcm9udGVuZC5BYnN0cmFjdFdTRExCYXNlZEVuZHBvaW50RmFjdG9yeTsNCj4g PiAgaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmZyb250ZW5kLlNlcnZlckZhY3RvcnlCZWFuOw0KPiA+ ICBpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5TZXJ2aWNlOw0KPiA+ICBpbXBvcnQgb3Jn LmFwYWNoZS5jeGYudGVzdC5BYnN0cmFjdENYRlRlc3Q7DQo+ID4gQEAgLTEyOCw3ICsxMjgsNyBA QA0KPiA+ICAgICAgICAgIHJldHVybiBzZjsNCj4gPiAgICAgIH0NCj4gPg0KPiA+IC0gICAgcHJv dGVjdGVkIHZvaWQgc2V0dXBBZWdpcyhBYnN0cmFjdEVuZHBvaW50RmFjdG9yeSBzZikgew0KPiA+ ICsgICAgcHJvdGVjdGVkIHZvaWQgDQo+IHNldHVwQWVnaXMoQWJzdHJhY3RXU0RMQmFzZWRFbmRw b2ludEZhY3Rvcnkgc2YpIHsNCj4gPiAgICAgICAgICANCj4gc2YuZ2V0U2VydmljZUZhY3Rvcnko KS5nZXRTZXJ2aWNlQ29uZmlndXJhdGlvbnMoKS5hZGQoMCwgbmV3DQo+ID4gQWVnaXNTZXJ2aWNl Q29uZmlndXJhdGlvbigpKTsNCj4gPiBzZi5nZXRTZXJ2aWNlRmFjdG9yeSgpLnNldERhdGFCaW5k aW5nKG5ldyBBZWdpc0RhdGFiaW5kaW5nKCkpOyB9DQo+ID4NCj4gPiBBZGRlZDogaW5jdWJhdG9y L2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3BvbS54bWwNCj4gPiBVUkw6DQo+ ID4gDQo+IGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvaW5jdWJhdG9yL2N4Zi9icmFuY2hl cy9qbGl1L3J0L2Zyb250ZW5kL2oNCj4gPmF4cnMvcG9tLnhtbD9yZXY9NTczNDI5JnZpZXc9YXV0 bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09PSAtLS0gaW5jdWJhdG9yL2N4Zi9i cmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3BvbS54bWwNCj4gPiAoYWRkZWQpICsrKyAN Cj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3BvbS54bWwg VGh1DQo+ID4gU2VwICA2IDE5OjQ0OjQ0IDIwMDcgQEAgLTAsMCArMSw5NCBAQA0KPiA+ICs8IS0t DQo+ID4gKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0Yp IHVuZGVyIG9uZQ0KPiA+ICsgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRz LiBTZWUgdGhlIE5PVElDRSBmaWxlDQo+ID4gKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsg Zm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCj4gPiArICByZWdhcmRpbmcgY29weXJpZ2h0IG93 bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCj4gPiArICB0byB5b3UgdW5kZXIg dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQo+ID4gKyAgIkxpY2Vuc2UiKTsg eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KPiA+ICsgIHdp dGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0K PiA+ICsNCj4gPiArICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAN Cj4gPiArDQo+ID4gKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl ZCB0byBpbiB3cml0aW5nLA0KPiA+ICsgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQo+ID4gKyAgIkFTIElTIiBCQVNJUywgV0lUSE9V VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQo+ID4gKyAgS0lORCwgZWl0aGVyIGV4 cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCj4gPiArICBzcGVjaWZp YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQo+ID4gKyAg dW5kZXIgdGhlIExpY2Vuc2UuDQo+ID4gKy0tPg0KPiA+ICs8cHJvamVjdCB4bWxucz0iaHR0cDov L21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIg0KPiA+IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53 My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQo+ID4geHNpOnNjaGVtYUxvY2F0aW9uPSJo dHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjANCj4gPiBodHRwOi8vbWF2ZW4uYXBhY2hl Lm9yZy9tYXZlbi12NF8wXzAueHNkIj4gKyAgIA0KPiA+IDxtb2RlbFZlcnNpb24+NC4wLjA8L21v ZGVsVmVyc2lvbj4NCj4gPiArICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPg0K PiA+ICsgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWZyb250ZW5kLWpheHJzPC9hcnRpZmFjdElkPg0K PiA+ICsgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4NCj4gPiArICAgIDx2ZXJzaW9uPjIu MS1pbmN1YmF0b3ItU05BUFNIT1Q8L3ZlcnNpb24+DQo+ID4gKyAgICA8bmFtZT5BcGFjaGUgQ1hG IFJ1bnRpbWUgSkFYLVJTIEZyb250ZW5kPC9uYW1lPg0KPiA+ICsgICAgPHVybD5odHRwOi8vY3dp a2kuYXBhY2hlLm9yZy9DWEY8L3VybD4NCj4gPiArDQo+ID4gKyAgICA8cGFyZW50Pg0KPiA+ICsg ICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPg0KPiA+ICsgICAgICAgIDxh cnRpZmFjdElkPmN4Zi1wYXJlbnQ8L2FydGlmYWN0SWQ+DQo+ID4gKyAgICAgICAgPHZlcnNpb24+ Mi4xLWluY3ViYXRvci1TTkFQU0hPVDwvdmVyc2lvbj4NCj4gPiArICAgICAgICA8cmVsYXRpdmVQ YXRoPi4uLy4uLy4uL3BhcmVudC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQo+ID4gKyAgICA8L3Bh cmVudD4NCj4gPiArDQo+ID4gKyAgICA8ZGVwZW5kZW5jaWVzPg0KPiA+ICsgICAgICAgIDxkZXBl bmRlbmN5Pg0KPiA+ICsgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCj4gPiAr ICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQo+ID4gKyAgICAgICAg ICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCj4gPiArICAgICAgICA8L2RlcGVuZGVuY3k+DQo+ID4g KyAgICAgICAgPGRlcGVuZGVuY3k+DQo+ID4gKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFj aGUuY3hmPC9ncm91cElkPg0KPiA+ICsgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtY29tbW9u LXV0aWxpdGllczwvYXJ0aWZhY3RJZD4NCj4gPiArICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9q ZWN0LnZlcnNpb259PC92ZXJzaW9uPg0KPiA+ICsgICAgICAgIDwvZGVwZW5kZW5jeT4NCj4gPiAr ICAgICAgICA8ZGVwZW5kZW5jeT4NCj4gPiArICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNo ZS5jeGY8L2dyb3VwSWQ+DQo+ID4gKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1hcGk8L2Fy dGlmYWN0SWQ+DQo+ID4gKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwv dmVyc2lvbj4NCj4gPiArICAgICAgICA8L2RlcGVuZGVuY3k+DQo+ID4gKyAgICAgICAgPGRlcGVu ZGVuY3k+DQo+ID4gKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElk Pg0KPiA+ICsgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtY29yZTwvYXJ0aWZhY3RJZD4N Cj4gPiArICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPg0K PiA+ICsgICAgICAgIDwvZGVwZW5kZW5jeT4NCj4gPiArICAgICAgICA8ZGVwZW5kZW5jeT4NCj4g PiArICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4NCj4g PiArICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWNvcmU8L2FydGlmYWN0SWQ+DQo+ID4g KyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KPiA+ICsgICAgICAgIDxkZXBlbmRlbmN5Pg0KPiA+ICsg ICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5yczwvZ3JvdXBJZD4NCj4gPiArICAgICAgICAgICAg PGFydGlmYWN0SWQ+anNyMzExLWFwaTwvYXJ0aWZhY3RJZD4NCj4gPiArICAgICAgICAgICAgPHZl cnNpb24+MC45PC92ZXJzaW9uPg0KPiA+ICsgICAgICAgIDwvZGVwZW5kZW5jeT4NCj4gPiArICAg ICAgICA8ZGVwZW5kZW5jeT4NCj4gPiArCSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUu Y3hmPC9ncm91cElkPg0KPiA+ICsJICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWZyb250 ZW5kLWpheHdzPC9hcnRpZmFjdElkPg0KPiA+ICsJICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9q ZWN0LnZlcnNpb259PC92ZXJzaW9uPg0KPiA+ICsgICAgICAgIDwvZGVwZW5kZW5jeT4NCj4gPiAr ICAgICAgICA8ZGVwZW5kZW5jeT4NCj4gPiArICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgucnM8 L2dyb3VwSWQ+DQo+ID4gKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjMxMS1hcGk8L2FydGlm YWN0SWQ+DQo+ID4gKyAgICAgICAgICAgIDx2ZXJzaW9uPjAuOTwvdmVyc2lvbj4NCj4gPiArICAg ICAgICA8L2RlcGVuZGVuY3k+DQo+ID4gKyAgICAgICAgPGRlcGVuZGVuY3k+DQo+ID4gKyAgICAg ICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPg0KPiA+ICsgICAgICAgICAg ICA8YXJ0aWZhY3RJZD5jeGYtdGVzdHV0aWxzPC9hcnRpZmFjdElkPg0KPiA+ICsgICAgICAgICAg ICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+DQo+ID4gKyAgICAgICAgICAg IDxzY29wZT50ZXN0PC9zY29wZT4NCj4gPiArICAgICAgICA8L2RlcGVuZGVuY3k+DQo+ID4gKyAg ICAgICAgPGRlcGVuZGVuY3k+DQo+ID4gKyAgICAgICAgICAgIDxncm91cElkPm9yZy5lYXN5bW9j azwvZ3JvdXBJZD4NCj4gPiArICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZWFzeW1vY2tjbGFzc2V4 dGVuc2lvbjwvYXJ0aWZhY3RJZD4NCj4gPiArICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3Bl Pg0KPiA+ICsgICAgICAgIDwvZGVwZW5kZW5jeT4NCj4gPiArICAgIDwvZGVwZW5kZW5jaWVzPg0K PiA+ICsNCj4gPiArICAgIDxzY20+DQo+ID4gKyAgICAgICANCj4gPiANCj4gPGNvbm5lY3Rpb24+ c2NtOnN2bjpodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9jeGYvdHJ1 bg0KPiA+ay9ydC9yczwvY29ubmVjdGlvbj4gKyAgICAgICANCj4gPiANCj4gPGRldmVsb3BlckNv bm5lY3Rpb24+c2NtOnN2bjpodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0 bw0KPiA+ci9jeGYvdHJ1bmsvcnQvcnM8L2RldmVsb3BlckNvbm5lY3Rpb24+ICsgICAgIA0KPiA+ IA0KPiA8dXJsPmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvaW5jdWJhdG9yL2N4Zi90cnVu ay9jeGYtcGFyZW50L2N4Zi1yDQo+ID50LXJzPC91cmw+ICsgIDwvc2NtPg0KPiA+ICsNCj4gPiAr PC9wcm9qZWN0Pg0KPiA+DQo+ID4gUHJvcGNoYW5nZTogaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9q bGl1L3J0L2Zyb250ZW5kL2pheHJzL3BvbS54bWwNCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ LS0tLS0tLS0gc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQ0KPiA+DQo+ID4gUHJvcGNoYW5nZTogaW5j dWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3BvbS54bWwNCj4gPiAN Cj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KPiA+LS0tLS0tLS0gc3ZuOmtleXdvcmRzID0gUmV2IERhdGUNCj4g Pg0KPiA+IFByb3BjaGFuZ2U6IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVu ZC9qYXhycy9wb20ueG1sDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0tIHN2bjpt aW1lLXR5cGUgPSB0ZXh0L3htbA0KPiA+DQo+ID4gQWRkZWQ6DQo+ID4gDQo+IGluY3ViYXRvci9j eGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFj aGUNCj4gPi9jeGYvamF4cnMvSkFYUlNCaW5kaW5nRmFjdG9yeS5qYXZhIFVSTDoNCj4gPiANCj4g aHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUv cnQvZnJvbnRlbmQvag0KPiA+YXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvY3hmL2pheHJz L0pBWFJTQmluZGluZ0ZhY3Rvcnkuag0KPiBhdmE/cmV2PTU3DQo+ID4zNDI5JnZpZXc9YXV0bw0K PiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09PSAtLS0NCj4gPiANCj4gaW5jdWJhdG9y L2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2Fw YWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU0JpbmRpbmdGYWN0b3J5LmphdmEgKGFkZGVkKSArKysN Cj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3Ny Yy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU0JpbmRpbmdGYWN0b3J5 LmphdmEgVGh1IFNlcCAgNiAxOTo0NDo0NCAyMDA3IEBAIC0wLDANCj4gPiArMSw5NiBAQA0KPiA+ ICsvKioNCj4gPiArICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9u IChBU0YpIHVuZGVyIG9uZQ0KPiA+ICsgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdy ZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KPiA+ICsgKiBkaXN0cmlidXRlZCB3aXRoIHRo aXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KPiA+ICsgKiByZWdhcmRpbmcgY29w eXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCj4gPiArICogdG8g eW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KPiA+ICsgKiAi TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl DQo+ID4gKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg TGljZW5zZSBhdA0KPiA+ICsgKg0KPiA+ICsgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z ZXMvTElDRU5TRS0yLjANCj4gPiArICoNCj4gPiArICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KPiA+ICsgKiBzb2Z0d2FyZSBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KPiA+ICsgKiAi QVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCj4g PiArICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZv ciB0aGUNCj4gPiArICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu ZCBsaW1pdGF0aW9ucw0KPiA+ICsgKiB1bmRlciB0aGUgTGljZW5zZS4NCj4gPiArICovDQo+ID4g K3BhY2thZ2Ugb3JnLmFwYWNoZS5jeGYuamF4cnM7DQo+ID4gKw0KPiA+ICsNCj4gPiAraW1wb3J0 IG9yZy5hcGFjaGUuY3hmLmJpbmRpbmcuQWJzdHJhY3RCaW5kaW5nRmFjdG9yeTsNCj4gPiAraW1w b3J0IG9yZy5hcGFjaGUuY3hmLmJpbmRpbmcuQmluZGluZzsNCj4gPiArDQo+ID4gK2ltcG9ydCBv cmcuYXBhY2hlLmN4Zi5iaW5kaW5nLnhtbC5YTUxCaW5kaW5nOw0KPiA+ICtpbXBvcnQgb3JnLmFw YWNoZS5jeGYuamF4cnMuaW50ZXJjZXB0b3IuSkFYUlNEaXNwYXRjaEludGVyY2VwdG9yOw0KPiA+ ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4cnMuaW50ZXJjZXB0b3IuSkFYUlNPdXRJbnRlcmNl cHRvcjsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UuU2VydmljZTsNCj4gPiAr aW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuQmluZGluZ0luZm87DQo+ID4gKw0K PiA+ICtwdWJsaWMgY2xhc3MgSkFYUlNCaW5kaW5nRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0Qmlu ZGluZ0ZhY3Rvcnkgew0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5n IEpBWFJTX0JJTkRJTkdfSUQgPQ0KPiA+ICJodHRwOi8vYXBhY2hlLm9yZy9jeGYvYmluZGluZy9q YXhycyI7ICsNCj4gPiArICAgIHB1YmxpYyBKQVhSU0JpbmRpbmdGYWN0b3J5KCkgew0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBCaW5kaW5nIGNyZWF0ZUJpbmRpbmcoQmluZGlu Z0luZm8gYmkpIHsNCj4gPiArICAgICAgICBYTUxCaW5kaW5nIGJpbmRpbmcgPSBuZXcgWE1MQmlu ZGluZyhiaSk7DQo+ID4gKw0KPiA+ICsgICAgICAgIGJpbmRpbmcuZ2V0SW5JbnRlcmNlcHRvcnMo KS5hZGQobmV3DQo+ID4gSkFYUlNEaXNwYXRjaEludGVyY2VwdG9yKCkpOyArICAgICAgIA0KPiA+ IGJpbmRpbmcuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKG5ldyBKQVhSU091dEludGVyY2VwdG9y KCkpOyArDQo+ID4gKy8qDQo+ID4gKyAgICAgICAgYmluZGluZy5nZXRJbkZhdWx0SW50ZXJjZXB0 b3JzKCkuYWRkKG5ldw0KPiA+IFhNTEZhdWx0SW5JbnRlcmNlcHRvcigpKTsgKw0KPiA+ICsgICAg ICAgIGJpbmRpbmcuZ2V0T3V0RmF1bHRJbnRlcmNlcHRvcnMoKS5hZGQobmV3DQo+ID4gQ29udGVu dFR5cGVPdXRJbnRlcmNlcHRvcigpKTsgKyAgICAgICANCj4gPiBiaW5kaW5nLmdldE91dEZhdWx0 SW50ZXJjZXB0b3JzKCkuYWRkKG5ldyANCj4gU3RheE91dEludGVyY2VwdG9yKCkpOyArICAgIA0K PiA+ICAgIGJpbmRpbmcuZ2V0T3V0RmF1bHRJbnRlcmNlcHRvcnMoKS5hZGQobmV3DQo+ID4gWE1M RmF1bHRPdXRJbnRlcmNlcHRvcigpKTsqLyArDQo+ID4gKyAgICAgICAgcmV0dXJuIGJpbmRpbmc7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBCaW5kaW5nSW5mbyBj cmVhdGVCaW5kaW5nSW5mbyhTZXJ2aWNlIHNlcnZpY2UsIFN0cmluZw0KPiA+IG5hbWVzcGFjZSwg T2JqZWN0IG9iaikgeyArICAgICAgICBCaW5kaW5nSW5mbyBpbmZvID0gbmV3DQo+ID4gQmluZGlu Z0luZm8obnVsbCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgDQo+ID4gSkFYUlNCaW5kaW5nRmFjdG9yeS5KQVhSU19CSU5ESU5HX0lEKTsgKw0KPiA+ICsg ICAgICAgIHJldHVybiBpbmZvOw0KPiA+ICsNCj4gPiArLyogICAgICAgIFNlcnZpY2VJbmZvIHNp ID0gc2VydmljZS5nZXRTZXJ2aWNlSW5mb3MoKS5nZXQoMCk7DQo+ID4gKyAgICAgICAgQmluZGlu Z0luZm8gaW5mbyA9IG5ldyBCaW5kaW5nSW5mbyhzaSwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgDQo+ID4gUkVTVEJpbmRpbmdGYWN0b3J5LlJFU1RfQklO RElOR19JRCk7ICsgICAgICAgIGluZm8uc2V0TmFtZShuZXcNCj4gPiBRTmFtZShzaS5nZXROYW1l KCkuZ2V0TmFtZXNwYWNlVVJJKCksICsgICAgICAgICAgICAgICAgICAgICANCj4gICAgICAgICAg DQo+ID4gc2kuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpICsgIkh0dHBCaW5kaW5nIikpOyArDQo+ ID4gKyAgICAgICAgLy9zZXJ2aWNlLnB1dChVUklNYXBwZXIuY2xhc3MuZ2V0TmFtZSgpLCBtYXBw ZXIpOw0KPiA+ICsgICAgICAgIE1ldGhvZERpc3BhdGNoZXIgbWQgPSAoTWV0aG9kRGlzcGF0Y2hl cikNCj4gPiBzZXJ2aWNlLmdldChNZXRob2REaXNwYXRjaGVyLmNsYXNzLmdldE5hbWUoKSk7ICsN Cj4gPiArICAgICAgICBmb3IgKE9wZXJhdGlvbkluZm8gbyA6IHNpLmdldEludGVyZmFjZSgpLmdl dE9wZXJhdGlvbnMoKSkgew0KPiA+ICsgICAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uSW5mbyBi b3AgPQ0KPiA+IGluZm8uYnVpbGRPcGVyYXRpb24oby5nZXROYW1lKCksIG8uZ2V0SW5wdXROYW1l KCksIA0KPiBvLmdldE91dHB1dE5hbWUoKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICBpbmZv LmFkZE9wZXJhdGlvbihib3ApOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgTWV0aG9kIG0gPSBt ZC5nZXRNZXRob2QoYm9wKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgIHRyeSB7DQo+ID4gKyAg ICAgICAgICAgICAgICBDbGFzcyBjID0gKENsYXNzKQ0KPiA+IHNlcnZpY2UuZ2V0KFJlZmxlY3Rp b25TZXJ2aWNlRmFjdG9yeUJlYW4uRU5EUE9JTlRfQ0xBU1MpOyArIA0KPiAgICAgICAgICAgDQo+ ID4gICAgIGlmIChjICE9IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICBtID0gYy5n ZXRNZXRob2QobS5nZXROYW1lKCksDQo+ID4gbS5nZXRQYXJhbWV0ZXJUeXBlcygpKTsgKyAgICAg ICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9u IGUpIHsNCj4gPiArICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlQ29uc3RydWN0aW9u RXhjZXB0aW9uKGUpOw0KPiA+ICsgICAgICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNl cHRpb24gZSkgew0KPiA+ICsgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VDb25zdHJ1 Y3Rpb25FeGNlcHRpb24oZSk7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICByZXR1cm4gaW5mbzsqLw0KPiA+ICsNCj4gPiArICAg ICAgICAvL3JldHVybiBudWxsOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArDQo+ID4gK30NCj4g Pg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9y dC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMv SkFYUlNCaW5kaW5nRmFjdG9yeS5qYXZhDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0t LS0tIHN2bjplb2wtc3R5bGUgPSBuYXRpdmUNCj4gPg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+ IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9q YXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvSkFYUlNCaW5kaW5nRmFjdG9yeS5qYXZhDQo+ ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0tIHN2bjprZXl3b3JkcyA9IFJldiBEYXRl DQo+ID4NCj4gPiBBZGRlZDoNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0 L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9K QVhSU0ludm9rZXIuamF2YSBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3 dmMvaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2oNCj4gPmF4cnMvc3Jj L21haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi9qYXhycy9KQVhSU0ludm9rZXIuamF2YT9yZXYNCj4g PTU3MzQyOSZ2aQ0KPiA+ZXc9YXV0bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09 PSAtLS0NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2ph eHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU0ludm9rZXIu amF2YSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQv ZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL0pB WFJTSW52b2tlci5qYXZhIFRodSBTZXAgIDYgMTk6NDQ6NDQgMjAwNyBAQCANCj4gLTAsMCArMSw3 MCBAQA0KPiA+ICsvKioNCj4gPiArICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBG b3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KPiA+ICsgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxp Y2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KPiA+ICsgKiBkaXN0cmlidXRl ZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KPiA+ICsgKiByZWdh cmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCj4g PiArICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0K PiA+ICsgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj b21wbGlhbmNlDQo+ID4gKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w eSBvZiB0aGUgTGljZW5zZSBhdA0KPiA+ICsgKg0KPiA+ICsgKiBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjANCj4gPiArICoNCj4gPiArICogVW5sZXNzIHJlcXVpcmVk IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KPiA+ICsgKiBzb2Z0 d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0K PiA+ICsgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP RiBBTlkNCj4gPiArICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBM aWNlbnNlIGZvciB0aGUNCj4gPiArICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p c3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KPiA+ICsgKiB1bmRlciB0aGUgTGljZW5zZS4NCj4gPiAr ICovDQo+ID4gKw0KPiA+ICtwYWNrYWdlIG9yZy5hcGFjaGUuY3hmLmpheHJzOw0KPiA+ICsNCj4g PiArDQo+ID4gK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7DQo+ID4gK2ltcG9ydCBq YXZhLnV0aWwuTGlzdDsNCj4gPiArDQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5oZWxwZXJz LkNhc3RVdGlsczsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHJzLm1vZGVsLkNsYXNz UmVzb3VyY2VJbmZvOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4cnMubW9kZWwuT3Bl cmF0aW9uUmVzb3VyY2VJbmZvOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5F eGNoYW5nZTsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZUNvbnRl bnRzTGlzdDsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UuaW52b2tlci5BYnN0 cmFjdEludm9rZXI7DQo+ID4gKw0KPiA+ICtwdWJsaWMgY2xhc3MgSkFYUlNJbnZva2VyIGV4dGVu ZHMgQWJzdHJhY3RJbnZva2VyIHsNCj4gPiArICAgIHB1YmxpYyBKQVhSU0ludm9rZXIoKSB7DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIE9iamVjdCBpbnZva2UoRXhjaGFuZ2Ug ZXhjaGFuZ2UsIE9iamVjdCBvKSB7DQo+ID4gKyAgICAgICAgT3BlcmF0aW9uUmVzb3VyY2VJbmZv IG9yaSA9DQo+ID4gZXhjaGFuZ2UuZ2V0KE9wZXJhdGlvblJlc291cmNlSW5mby5jbGFzcyk7ICsN Cj4gPiArICAgICAgICBDbGFzc1Jlc291cmNlSW5mbyBjbGFzc1Jlc291cmNlSW5mbyA9DQo+ID4g b3JpLmdldENsYXNzUmVzb3VyY2VJbmZvKCk7ICsgICAgICAgIE1ldGhvZCBtID0NCj4gPiBjbGFz c1Jlc291cmNlSW5mby5nZXRNZXRob2REaXNwYXRjaGVyKCkuZ2V0TWV0aG9kKG9yaSk7ICsgICAg ICAgDQo+ID4gT2JqZWN0IHNlcnZpY2VPYmplY3QgPSBudWxsOw0KPiA+ICsgICAgICAgIHRyeSB7 DQo+ID4gKyAgICAgICAgICAgIHNlcnZpY2VPYmplY3QgPQ0KPiA+IGNsYXNzUmVzb3VyY2VJbmZv LmdldFJlc291cmNlQ2xhc3MoKS5uZXdJbnN0YW5jZSgpOyArICAgICAgICB9IGNhdGNoDQo+ID4g KEV4Y2VwdGlvbiBlKSB7DQo+ID4gKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7DQo+ ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qICAgICAgICBNZXRob2REaXNwYXRj aGVyIG1kID0gKE1ldGhvZERpc3BhdGNoZXIpDQo+ID4gKyAgICAgICAgICAgDQo+ID4gDQo+IGV4 Y2hhbmdlLmdldChTZXJ2aWNlLmNsYXNzKS5nZXQoTWV0aG9kRGlzcGF0Y2hlci5jbGFzcy5nZXRO YW1lKCkpOyArICANCj4gPiAgICAgIE1ldGhvZCBtID0gbWQuZ2V0TWV0aG9kKGJvcCk7Ki8NCj4g PiArICAgICAgICAvL01ldGhvZCBtID0NCj4gPiANCj4gKE1ldGhvZClib3AuZ2V0T3BlcmF0aW9u SW5mbygpLmdldFByb3BlcnR5KE1ldGhvZC5jbGFzcy5nZXROYW1lKCkpOyArIA0KPiA+ICAgICAg IC8vbSA9IG1hdGNoTWV0aG9kKG0sIHNlcnZpY2VPYmplY3QpOw0KPiA+ICsNCj4gPiArICAgICAg ICBMaXN0PE9iamVjdD4gcGFyYW1zID0gbnVsbDsNCj4gPiArICAgICAgICBpZiAobyBpbnN0YW5j ZW9mIExpc3QpIHsNCj4gPiArICAgICAgICAgICAgcGFyYW1zID0gQ2FzdFV0aWxzLmNhc3QoKExp c3Q8Pz4pbyk7DQo+ID4gKyAgICAgICAgfSBlbHNlIGlmIChvICE9IG51bGwpIHsNCj4gPiArICAg ICAgICAgICAgcGFyYW1zID0gbmV3IE1lc3NhZ2VDb250ZW50c0xpc3Qobyk7DQo+ID4gKyAgICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICByZXR1cm4gaW52b2tlKGV4Y2hhbmdlLCBzZXJ2aWNl T2JqZWN0LCBtLCBwYXJhbXMpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBP YmplY3QgZ2V0U2VydmljZU9iamVjdChFeGNoYW5nZSBleCkgew0KPiA+ICsgICAgICAgIHJldHVy biBudWxsOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArfQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToN Cj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3Ny Yy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU0ludm9rZXIuamF2YQ0K PiA+IA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4tLS0tLS0tLSBzdm46ZW9sLXN0eWxlID0gbmF0aXZl DQo+ID4NCj4gPiBQcm9wY2hhbmdlOg0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2ps aXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2ph eHJzL0pBWFJTSW52b2tlci5qYXZhDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0t IHN2bjprZXl3b3JkcyA9IFJldiBEYXRlDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiANCj4gaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3Jn L2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU1NlcnZlckZhY3RvcnlCZWFuLmphdmEgVVJMOg0K PiA+IA0KPiBodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2luY3ViYXRvci9jeGYvYnJhbmNo ZXMvamxpdS9ydC9mcm9udGVuZC9qDQo+ID5heHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9j eGYvamF4cnMvSkFYUlNTZXJ2ZXJGYWN0b3J5QmVhDQo+IG4uamF2YT9yZXYNCj4gPj01NzM0Mjkm dmlldz1hdXRvDQo+ID4gDQo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj09PT09PT09IC0tLQ0KPiA+IA0K PiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4v amF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL0pBWFJTU2VydmVyRmFjdG9yeUJlYW4uamF2 YSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJv bnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL0pBWFJT U2VydmVyRmFjdG9yeUJlYW4uamF2YSBUaHUgU2VwICA2IDE5OjQ0OjQ0IA0KPiAyMDA3IEBAIC0w LDANCj4gPiArMSwyMjAgQEANCj4gPiArLyoqDQo+ID4gKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFj aGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCj4gPiArICogb3IgbW9yZSBj b250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUNCj4gPiAr ICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24N Cj4gPiArICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMg dGhpcyBmaWxlDQo+ID4gKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp b24gMi4wICh0aGUNCj4gPiArICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls ZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KPiA+ICsgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5 IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCj4gPiArICoNCj4gPiArICogaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQo+ID4gKyAqDQo+ID4gKyAqIFVu bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywN Cj4gPiArICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp YnV0ZWQgb24gYW4NCj4gPiArICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9S IENPTkRJVElPTlMgT0YgQU5ZDQo+ID4gKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp ZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQo+ID4gKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdv dmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCj4gPiArICogdW5kZXIgdGhlIExp Y2Vuc2UuDQo+ID4gKyAqLw0KPiA+ICtwYWNrYWdlIG9yZy5hcGFjaGUuY3hmLmpheHJzOw0KPiA+ ICsNCj4gPiAraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQo+ID4gK2ltcG9ydCBqYXZhLnV0 aWwuTGlzdDsNCj4gPiArDQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5CdXNFeGNlcHRpb247 DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5iaW5kaW5nLkJpbmRpbmdDb25maWd1cmF0aW9u Ow0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuYmluZGluZy5CaW5kaW5nRmFjdG9yeTsNCj4g PiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJpbmRpbmcuQmluZGluZ0ZhY3RvcnlNYW5hZ2VyOw0K PiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZW5kcG9pbnQuQWJzdHJhY3RFbmRwb2ludEZhY3Rv cnk7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5lbmRwb2ludC5FbmRwb2ludDsNCj4gPiAr aW1wb3J0IG9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LkVuZHBvaW50RXhjZXB0aW9uOw0KPiA+ICtp bXBvcnQgb3JnLmFwYWNoZS5jeGYuZW5kcG9pbnQuRW5kcG9pbnRJbXBsOw0KPiA+ICtpbXBvcnQg b3JnLmFwYWNoZS5jeGYuZW5kcG9pbnQuU2VydmVyOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5j eGYuZW5kcG9pbnQuU2VydmVySW1wbDsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmZlYXR1 cmUuQWJzdHJhY3RGZWF0dXJlOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5T ZXJ2aWNlOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5mYWN0b3J5LlNlcnZp Y2VDb25zdHJ1Y3Rpb25FeGNlcHRpb247DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2 aWNlLmludm9rZXIuSW52b2tlcjsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2Uu bW9kZWwuQmluZGluZ0luZm87DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1v ZGVsLkVuZHBvaW50SW5mbzsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5E ZXN0aW5hdGlvbkZhY3Rvcnk7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQu RGVzdGluYXRpb25GYWN0b3J5TWFuYWdlcjsNCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogQmVhbiB0byBoZWxwIGVhc2lseSBjcmVhdGUgU2VydmVyIGVuZHBvaW50cyBmb3IgSkFYLVJT LiBFeGFtcGxlOg0KPiA+ICsgKiA8cHJlPg0KPiA+ICsgKiBKQVhSU1NlcnZlckZhY3RvcnlCZWFu IHNmID0gSkFYUlNTZXJ2ZXJGYWN0b3J5QmVhbigpOw0KPiA+ICsgKiBzZi5zZXRTZXJ2aWNlQ2xh c3MoQm9vay5jbGFzcyk7DQo+ID4gKyAqIHNmLnNldEFkZHJlc3MoImh0dHA6Ly9hY21lLmNvbS9t eVNlcnZpY2UiKTsNCj4gPiArICogc2YuY3JlYXRlKCk7DQo+ID4gKyAqIDwvcHJlPg0KPiA+ICsg KiBUaGlzIHdpbGwgc3RhcnQgYSBzZXJ2ZXIgZm9yIHlvdSBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0 aGUNCj4gPiBTZXJ2ZXJNYW5hZ2VyLiArICovDQo+ID4gK3B1YmxpYyBjbGFzcyBKQVhSU1NlcnZl ckZhY3RvcnlCZWFuIGV4dGVuZHMgDQo+IEFic3RyYWN0RW5kcG9pbnRGYWN0b3J5IHsNCj4gPiAr ICAgIHByb3RlY3RlZCBib29sZWFuIGRvSW5pdDsNCj4gPiArICAgIHByaXZhdGUgU2VydmVyIHNl cnZlcjsNCj4gPiArICAgIHByaXZhdGUgSW52b2tlciBpbnZva2VyOw0KPiA+ICsgICAgcHJpdmF0 ZSBib29sZWFuIHN0YXJ0ID0gdHJ1ZTsNCj4gPiArICAgIHByaXZhdGUgSkFYUlNTZXJ2aWNlRmFj dG9yeUJlYW4gc2VydmljZUZhY3Rvcnk7DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIEpBWFJTU2Vy dmVyRmFjdG9yeUJlYW4oKSB7DQo+ID4gKyAgICAgICAgdGhpcyhuZXcgSkFYUlNTZXJ2aWNlRmFj dG9yeUJlYW4oKSk7DQo+ID4gKyAgICAgICAgZG9Jbml0ID0gdHJ1ZTsNCj4gPiArICAgIH0NCj4g PiArICAgIHB1YmxpYyBKQVhSU1NlcnZlckZhY3RvcnlCZWFuKEpBWFJTU2VydmljZUZhY3RvcnlC ZWFuIHNmKSB7DQo+ID4gKyAgICAgICAgdGhpcy5zZXJ2aWNlRmFjdG9yeSA9IHNmOw0KPiA+ICsg ICAgICAgIGRvSW5pdCA9IHRydWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGlj IFNlcnZlciBjcmVhdGUoKSB7DQo+ID4gKyAgICAgICAgdHJ5IHsNCj4gPiArICAgICAgICAgICAg RW5kcG9pbnQgZXAgPSBjcmVhdGVFbmRwb2ludCgpOw0KPiA+ICsgICAgICAgICAgICBzZXJ2ZXIg PSBuZXcgU2VydmVySW1wbChnZXRCdXMoKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdldERlc3RpbmF0aW9uRmFjdG9yeSgpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnZXRCaW5kaW5nRmFjdG9yeSgpKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg IGlmIChpbnZva2VyID09IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgICAgIGVwLmdldFNlcnZp Y2UoKS5zZXRJbnZva2VyKGNyZWF0ZUludm9rZXIoKSk7DQo+ID4gKyAgICAgICAgICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgICAgICAgICAgICBlcC5nZXRTZXJ2aWNlKCkuc2V0SW52b2tlcihpbnZv a2VyKTsNCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgaWYgKHN0 YXJ0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICBzZXJ2ZXIuc3RhcnQoKTsNCj4gPiArICAgICAg ICAgICAgfQ0KPiA+ICsgICAgICAgIH0gY2F0Y2ggKEVuZHBvaW50RXhjZXB0aW9uIGUpIHsNCj4g PiArICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VDb25zdHJ1Y3Rpb25FeGNlcHRpb24oZSk7 DQo+ID4gKyAgICAgICAgfSBjYXRjaCAoQnVzRXhjZXB0aW9uIGUpIHsNCj4gPiArICAgICAgICAg ICAgdGhyb3cgbmV3IFNlcnZpY2VDb25zdHJ1Y3Rpb25FeGNlcHRpb24oZSk7DQo+ID4gKyAgICAg ICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KPiA+ICsgICAgICAgICAgICB0aHJvdyBuZXcg U2VydmljZUNvbnN0cnVjdGlvbkV4Y2VwdGlvbihlKTsNCj4gPiArICAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgIGFwcGx5RmVhdHVyZXMoKTsNCj4gPiArICAgICAgICByZXR1cm4gc2VydmVy Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHByb3RlY3RlZCB2b2lkIGFwcGx5RmVhdHVy ZXMoKSB7DQo+ID4gKyAgICAgICAgaWYgKGdldEZlYXR1cmVzKCkgIT0gbnVsbCkgew0KPiA+ICsg ICAgICAgICAgICBmb3IgKEFic3RyYWN0RmVhdHVyZSBmZWF0dXJlIDogZ2V0RmVhdHVyZXMoKSkg ew0KPiA+ICsgICAgICAgICAgICAgICAgZmVhdHVyZS5pbml0aWFsaXplKHNlcnZlciwgZ2V0QnVz KCkpOw0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIHByb3RlY3RlZCBJbnZva2VyIGNyZWF0ZUludm9rZXIoKSB7DQo+ID4gKyAg ICAgICAgcmV0dXJuIG5ldyBKQVhSU0ludm9rZXIoKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4g KyAgICBwcm90ZWN0ZWQgRW5kcG9pbnQgY3JlYXRlRW5kcG9pbnQoKSB0aHJvd3MgQnVzRXhjZXB0 aW9uLA0KPiA+IEVuZHBvaW50RXhjZXB0aW9uIHsgKyAgICAgICAgU2VydmljZSBzZXJ2aWNlID0N Cj4gPiBzZXJ2aWNlRmFjdG9yeS5nZXRTZXJ2aWNlKCk7DQo+ID4gKw0KPiA+ICsgICAgICAgIGlm IChzZXJ2aWNlID09IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgc2VydmljZSA9IHNlcnZpY2VG YWN0b3J5LmNyZWF0ZSgpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgRW5k cG9pbnRJbmZvIGVpID0gY3JlYXRlRW5kcG9pbnRJbmZvKCk7DQo+ID4gKyAgICAgICAgRW5kcG9p bnQgZXAgPSBuZXcgRW5kcG9pbnRJbXBsKGdldEJ1cygpLA0KPiA+IGdldFNlcnZpY2VGYWN0b3J5 KCkuZ2V0U2VydmljZSgpLCBlaSk7ICsNCj4gPiArICAgICAgICBpZiAocHJvcGVydGllcyAhPSBu dWxsKSB7DQo+ID4gKyAgICAgICAgICAgIGVwLnB1dEFsbChwcm9wZXJ0aWVzKTsNCj4gPiArICAg ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmIChnZXRJbkludGVyY2VwdG9ycygpICE9IG51 bGwpIHsNCj4gPiArICAgICAgICAgICAgZXAuZ2V0SW5JbnRlcmNlcHRvcnMoKS5hZGRBbGwoZ2V0 SW5JbnRlcmNlcHRvcnMoKSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIGlmIChnZXRP dXRJbnRlcmNlcHRvcnMoKSAhPSBudWxsKSB7DQo+ID4gKyAgICAgICAgICAgIGVwLmdldE91dElu dGVyY2VwdG9ycygpLmFkZEFsbChnZXRPdXRJbnRlcmNlcHRvcnMoKSk7DQo+ID4gKyAgICAgICAg fQ0KPiA+ICsgICAgICAgIGlmIChnZXRJbkZhdWx0SW50ZXJjZXB0b3JzKCkgIT0gbnVsbCkgew0K PiA+ICsgICAgICAgICAgIA0KPiA+IA0KPiBlcC5nZXRJbkZhdWx0SW50ZXJjZXB0b3JzKCkuYWRk QWxsKGdldEluRmF1bHRJbnRlcmNlcHRvcnMoKSk7ICsgICAgICAgDQo+ID4gfQ0KPiA+ICsgICAg ICAgIGlmIChnZXRPdXRGYXVsdEludGVyY2VwdG9ycygpICE9IG51bGwpIHsNCj4gPiArICAgICAg ICAgICANCj4gPiANCj4gZXAuZ2V0T3V0RmF1bHRJbnRlcmNlcHRvcnMoKS5hZGRBbGwoZ2V0T3V0 RmF1bHRJbnRlcmNlcHRvcnMoKSk7ICsgICAgIA0KPiA+ICAgfQ0KPiA+ICsgICAgICAgIHJldHVy biBlcDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICAvKg0KPiA+ICsgICAgICogV1NETCBi YXNlZCBFbmRwb2ludEluZm8gY29udGFpbnMgV1NETCdzIHBoeXNpY2FsIHBhcnQgaW5mbywNCj4g PiBmb3IgSkFYLVJTICsgICAgICogYmFzZWQgRW5kcG9pbnRJbmZvLCB3ZSBzZXQgZXZlcnl0aGlu ZyBtYW51YWxseS4NCj4gPiArICAgICAqLw0KPiA+ICsgICAgcHJvdGVjdGVkIEVuZHBvaW50SW5m byBjcmVhdGVFbmRwb2ludEluZm8oKSB0aHJvd3MgDQo+IEJ1c0V4Y2VwdGlvbiB7DQo+ID4gKyAg ICAgICAgU3RyaW5nIHRyYW5zcG9ydElkID0gZ2V0VHJhbnNwb3J0SWQoKTsNCj4gPiArICAgICAg ICBpZiAodHJhbnNwb3J0SWQgPT0gbnVsbCAmJiBnZXRBZGRyZXNzKCkgIT0gbnVsbCkgew0KPiA+ ICsgICAgICAgICAgICBEZXN0aW5hdGlvbkZhY3RvcnkgZGYgPSBnZXREZXN0aW5hdGlvbkZhY3Rv cnkoKTsNCj4gPiArICAgICAgICAgICAgaWYgKGRmID09IG51bGwpIHsNCj4gPiArICAgICAgICAg ICAgICAgIERlc3RpbmF0aW9uRmFjdG9yeU1hbmFnZXIgZGZtID0NCj4gPiBnZXRCdXMoKS5nZXRF eHRlbnNpb24oRGVzdGluYXRpb25GYWN0b3J5TWFuYWdlci5jbGFzcyk7ICsgICANCj4gICAgICAg ICAgIA0KPiA+ICAgZGYgPSBkZm0uZ2V0RGVzdGluYXRpb25GYWN0b3J5Rm9yVXJpKGdldEFkZHJl c3MoKSk7ICsgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICBpZiAoZGYgIT0g bnVsbCkgew0KPiA+ICsgICAgICAgICAgICAgICAgdHJhbnNwb3J0SWQgPSBkZi5nZXRUcmFuc3Bv cnRJZHMoKS5nZXQoMCk7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgICAgIEJpbmRpbmdJbmZvIGJpbmRpbmdJbmZvID0gY3JlYXRlQmluZGluZ0lu Zm8oKTsNCj4gPiArDQo+ID4gKyAgICAgICAgLy9kZWZhdWx0IHRvIGh0dHAgdHJhbnNwb3J0DQo+ ID4gKyAgICAgICAgaWYgKHRyYW5zcG9ydElkID09IG51bGwpIHsNCj4gPiArICAgICAgICAgICAg dHJhbnNwb3J0SWQgPQ0KPiA+ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAv aHR0cCI7ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgc2V0VHJhbnNwb3J0SWQodHJh bnNwb3J0SWQpOw0KPiA+ICsNCj4gPiArICAgICAgICBFbmRwb2ludEluZm8gZWkgPSBuZXcgRW5k cG9pbnRJbmZvKCk7DQo+ID4gKyAgICAgICAgZWkuc2V0VHJhbnNwb3J0SWQodHJhbnNwb3J0SWQp Ow0KPiA+ICsgICAgICAgIGVpLnNldE5hbWUoc2VydmljZUZhY3RvcnkuZ2V0U2VydmljZSgpLmdl dE5hbWUoKSk7DQo+ID4gKyAgICAgICAgZWkuc2V0QWRkcmVzcyhnZXRBZGRyZXNzKCkpOw0KPiA+ ICsgICAgICAgIGVpLnNldEJpbmRpbmcoYmluZGluZ0luZm8pOw0KPiA+ICsNCj4gPiArICAgICAg ICByZXR1cm4gZWk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHJvdGVjdGVkIEJpbmRp bmdJbmZvIGNyZWF0ZUJpbmRpbmdJbmZvKCkgew0KPiA+ICsgICAgICAgIEJpbmRpbmdGYWN0b3J5 TWFuYWdlciBtZ3IgPQ0KPiA+IGdldEJ1cygpLmdldEV4dGVuc2lvbihCaW5kaW5nRmFjdG9yeU1h bmFnZXIuY2xhc3MpOyArICAgICAgICBTdHJpbmcNCj4gPiBiaW5kaW5nID0gZ2V0QmluZGluZ0lk KCk7DQo+ID4gKyAgICAgICAgQmluZGluZ0NvbmZpZ3VyYXRpb24gYmluZGluZ0NvbmZpZyA9IGdl dEJpbmRpbmdDb25maWcoKTsNCj4gPiArDQo+ID4gKyAgICAgICAgaWYgKGJpbmRpbmcgPT0gbnVs bCAmJiBiaW5kaW5nQ29uZmlnICE9IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgYmluZGluZyA9 IGJpbmRpbmdDb25maWcuZ2V0QmluZGluZ0lkKCk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsKSB7DQo+ID4gKyAgICAgICAgICAgIGJpbmRp bmcgPSBKQVhSU0JpbmRpbmdGYWN0b3J5LkpBWFJTX0JJTkRJTkdfSUQ7DQo+ID4gKyAgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgICB0cnkgew0KPiA+ICsgICAgICAgICAgICBCaW5kaW5nRmFj dG9yeSBiaW5kaW5nRmFjdG9yeSA9DQo+ID4gbWdyLmdldEJpbmRpbmdGYWN0b3J5KGJpbmRpbmcp OyArICAgICAgICAgICANCj4gPiBzZXRCaW5kaW5nRmFjdG9yeShiaW5kaW5nRmFjdG9yeSk7DQo+ ID4gKyAgICAgICAgICAgIHJldHVybg0KPiA+IA0KPiBiaW5kaW5nRmFjdG9yeS5jcmVhdGVCaW5k aW5nSW5mbyhzZXJ2aWNlRmFjdG9yeS5nZXRTZXJ2aWNlKCksICsgICAgICAgDQo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLCANCj4gYmluZGlu Z0NvbmZpZyk7ICsNCj4gPiAgICAgICAgfSBjYXRjaCAoQnVzRXhjZXB0aW9uIGV4KSB7DQo+ID4g KyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOw0KPiA+ICsgICAgICAgICAgICAvL2Rv IG5vdGhpbmcNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgcmV0dXJuIG51bGw7DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIEpBWFJTU2VydmljZUZhY3RvcnlCZWFuIGdl dFNlcnZpY2VGYWN0b3J5KCkgew0KPiA+ICsgICAgICAgIHJldHVybiBzZXJ2aWNlRmFjdG9yeTsN Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRmFjdG9y eShKQVhSU1NlcnZpY2VGYWN0b3J5QmVhbg0KPiA+IHNlcnZpY2VGYWN0b3J5KSB7ICsgICAgICAg IHRoaXMuc2VydmljZUZhY3RvcnkgPSBzZXJ2aWNlRmFjdG9yeTsNCj4gPiArICAgIH0NCj4gPiAr DQo+ID4gKyAgICBwdWJsaWMgTGlzdDxDbGFzcz4gZ2V0UmVzb3VyY2VDbGFzc2VzKCkgew0KPiA+ ICsgICAgICAgIHJldHVybiBzZXJ2aWNlRmFjdG9yeS5nZXRSZXNvdXJjZUNsYXNzZXMoKTsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNsYXNzZXMo TGlzdDxDbGFzcz4gY2xhc3Nlcykgew0KPiA+ICsgICAgICAgIHNlcnZpY2VGYWN0b3J5LnNldFJl c291cmNlQ2xhc3NlcyhjbGFzc2VzKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJs aWMgdm9pZCBzZXRSZXNvdXJjZUNsYXNzZXMoQ2xhc3MuLi4gY2xhc3Nlcykgew0KPiA+ICsgICAg ICAgIHNlcnZpY2VGYWN0b3J5LnNldFJlc291cmNlQ2xhc3NlcyhjbGFzc2VzKTsNCj4gPiArICAg IH0NCj4gPiArfQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9i cmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0K PiA+L2N4Zi9qYXhycy9KQVhSU1NlcnZlckZhY3RvcnlCZWFuLmphdmENCj4gPiANCj4gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KPiA+LS0tLS0tLS0gc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQ0KPiA+DQo+ID4gUHJv cGNoYW5nZToNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5k L2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU1NlcnZl ckZhY3RvcnlCZWFuLmphdmENCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+LS0tLS0tLS0gc3Zu OmtleXdvcmRzID0gUmV2IERhdGUNCj4gPg0KPiA+IEFkZGVkOg0KPiA+IA0KPiBpbmN1YmF0b3Iv Y3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBh Y2hlDQo+ID4vY3hmL2pheHJzL0pBWFJTU2VydmljZUZhY3RvcnlCZWFuLmphdmEgVVJMOg0KPiA+ IA0KPiBodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2luY3ViYXRvci9jeGYvYnJhbmNoZXMv amxpdS9ydC9mcm9udGVuZC9qDQo+ID5heHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9jeGYv amF4cnMvSkFYUlNTZXJ2aWNlRmFjdG9yeUJlDQo+IGFuLmphdmE/cmUNCj4gPnY9NTczNDI5JnZp ZXc9YXV0bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09PSAtLS0NCj4gPiANCj4g aW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2ph dmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU1NlcnZpY2VGYWN0b3J5QmVhbi5qYXZh IChhZGRlZCkgKysrDQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9u dGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvSkFYUlNT ZXJ2aWNlRmFjdG9yeUJlYW4uamF2YSBUaHUgU2VwICA2IDE5OjQ0OjQ0IDIwMDcgQEANCj4gPiAt MCwwICsxLDE5OSBAQA0KPiA+ICsvKioNCj4gPiArICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBT b2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KPiA+ICsgKiBvciBtb3JlIGNvbnRy aWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KPiA+ICsgKiBk aXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KPiA+ ICsgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlz IGZpbGUNCj4gPiArICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy LjAgKHRoZQ0KPiA+ICsgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4 Y2VwdCBpbiBjb21wbGlhbmNlDQo+ID4gKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0 YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KPiA+ICsgKg0KPiA+ICsgKiBodHRwOi8vd3d3 LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCj4gPiArICoNCj4gPiArICogVW5sZXNz IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KPiA+ ICsgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl ZCBvbiBhbg0KPiA+ICsgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O RElUSU9OUyBPRiBBTlkNCj4gPiArICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4g U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCj4gPiArICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu aW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KPiA+ICsgKiB1bmRlciB0aGUgTGljZW5z ZS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICtwYWNrYWdlIG9yZy5hcGFjaGUuY3hmLmpheHJzOw0K PiA+ICsNCj4gPiAraW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsNCj4gPiAraW1wb3J0 IGphdmEudXRpbC5BcnJheUxpc3Q7DQo+ID4gK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KPiA+ ICtpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQo+ID4gK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KPiA+ ICtpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7DQo+ID4gKw0KPiA+ICtpbXBv cnQgamF2YXgud3MucnMuSHR0cE1ldGhvZDsNCj4gPiAraW1wb3J0IGphdmF4LndzLnJzLlVyaVRl bXBsYXRlOw0KPiA+ICsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHJzLm1vZGVsLkNs YXNzUmVzb3VyY2VJbmZvOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4cnMubW9kZWwu TWV0aG9kRGlzcGF0Y2hlcjsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHJzLm1vZGVs Lk9wZXJhdGlvblJlc291cmNlSW5mbzsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHJz Lm1vZGVsLlVSSVRlbXBsYXRlOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5T ZXJ2aWNlOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5mYWN0b3J5LkFic3Ry YWN0U2VydmljZUZhY3RvcnlCZWFuOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2Vydmlj ZS5pbnZva2VyLkludm9rZXI7DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEJ1aWxk IGEgSkFYLVJTIHNlcnZpY2UgbW9kZWwgZnJvbSByZXNvdXJjZSBjbGFzc2VzLg0KPiA+ICsgKi8N Cj4gPiArcHVibGljIGNsYXNzIEpBWFJTU2VydmljZUZhY3RvcnlCZWFuIGV4dGVuZHMNCj4gPiBB YnN0cmFjdFNlcnZpY2VGYWN0b3J5QmVhbiB7ICsNCj4gPiArICAgIC8vcHJpdmF0ZSBzdGF0aWMg ZmluYWwgTG9nZ2VyIExPRyA9DQo+ID4gTG9nZ2VyLmdldExvZ2dlcihKQVhSU1NlcnZpY2VGYWN0 b3J5QmVhbi5jbGFzcy5nZXROYW1lKCkpOyArICAgDQo+ID4gLy9wcml2YXRlIHN0YXRpYyBmaW5h bCBSZXNvdXJjZUJ1bmRsZSBCVU5ETEUgPQ0KPiA+IEJ1bmRsZVV0aWxzLmdldEJ1bmRsZShKQVhS U1NlcnZpY2VGYWN0b3J5QmVhbi5jbGFzcyk7ICsNCj4gPiArICAgIHByb3RlY3RlZCBMaXN0PENs YXNzUmVzb3VyY2VJbmZvPiBjbGFzc1Jlc291cmNlSW5mb3M7DQo+ID4gKyAgICBwcm90ZWN0ZWQg TGlzdDxDbGFzcz4gcmVzb3VyY2VDbGFzc2VzOw0KPiA+ICsNCj4gPiArICAgIHByaXZhdGUgSW52 b2tlciBpbnZva2VyOw0KPiA+ICsgICAgcHJpdmF0ZSBFeGVjdXRvciBleGVjdXRvcjsNCj4gPiAr ICAgIHByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiBwcm9wZXJ0aWVzOw0KPiA+ICsNCj4gPiAr ICAgIHB1YmxpYyBKQVhSU1NlcnZpY2VGYWN0b3J5QmVhbigpIHsNCj4gPiArICAgIH0NCj4gPiAr DQo+ID4gKyAgICBAT3ZlcnJpZGUNCj4gPiArICAgIHB1YmxpYyBTZXJ2aWNlIGNyZWF0ZSgpIHsN Cj4gPiArICAgICAgICBpbml0aWFsaXplU2VydmljZU1vZGVsKCk7DQo+ID4gKw0KPiA+ICsgICAg ICAgIGluaXRpYWxpemVEZWZhdWx0SW50ZXJjZXB0b3JzKCk7DQo+ID4gKw0KPiA+ICsgICAgICAg IGlmIChpbnZva2VyICE9IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgZ2V0U2VydmljZSgpLnNl dEludm9rZXIoZ2V0SW52b2tlcigpKTsNCj4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAg ICAgICAgICBnZXRTZXJ2aWNlKCkuc2V0SW52b2tlcihjcmVhdGVJbnZva2VyKCkpOw0KPiA+ICsg ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgaWYgKGdldEV4ZWN1dG9yKCkgIT0gbnVsbCkg ew0KPiA+ICsgICAgICAgICAgICBnZXRTZXJ2aWNlKCkuc2V0RXhlY3V0b3IoZ2V0RXhlY3V0b3Io KSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIGlmIChnZXREYXRhQmluZGluZygpICE9 IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgZ2V0U2VydmljZSgpLnNldERhdGFCaW5kaW5nKGdl dERhdGFCaW5kaW5nKCkpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgcmV0 dXJuIGdldFNlcnZpY2UoKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgRXhl Y3V0b3IgZ2V0RXhlY3V0b3IoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIGV4ZWN1dG9yOw0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyB2b2lkIHNldEV4ZWN1dG9yKEV4ZWN1dG9y IGV4ZWN1dG9yKSB7DQo+ID4gKyAgICAgICAgdGhpcy5leGVjdXRvciA9IGV4ZWN1dG9yOw0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBJbnZva2VyIGdldEludm9rZXIoKSB7DQo+ ID4gKyAgICAgICAgcmV0dXJuIGludm9rZXI7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAg cHVibGljIHZvaWQgc2V0SW52b2tlcihJbnZva2VyIGludm9rZXIpIHsNCj4gPiArICAgICAgICB0 aGlzLmludm9rZXIgPSBpbnZva2VyOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1Ymxp YyBMaXN0PENsYXNzPiBnZXRSZXNvdXJjZUNsYXNzZXMoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJu IHJlc291cmNlQ2xhc3NlczsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9p ZCBzZXRSZXNvdXJjZUNsYXNzZXMoTGlzdDxDbGFzcz4gY2xhc3Nlcykgew0KPiA+ICsgICAgICAg IHRoaXMucmVzb3VyY2VDbGFzc2VzID0gY2xhc3NlczsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4g KyAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNsYXNzZXMoQ2xhc3MuLi4gY2xhc3Nlcykgew0K PiA+ICsgICAgICAgIHRoaXMucmVzb3VyY2VDbGFzc2VzID0gbmV3DQo+ID4gQXJyYXlMaXN0PENs YXNzPihBcnJheXMuYXNMaXN0KGNsYXNzZXMpKTsgKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHJv dGVjdGVkIHZvaWQgaW5pdGlhbGl6ZVNlcnZpY2VNb2RlbCgpIHsNCj4gPiArICAgICAgICBjbGFz c1Jlc291cmNlSW5mb3MgPSBuZXcgQXJyYXlMaXN0PENsYXNzUmVzb3VyY2VJbmZvPigpOw0KPiA+ ICsNCj4gPiArICAgICAgICBmb3IgKENsYXNzIHJlc291cmNlQ2xhc3MgOiByZXNvdXJjZUNsYXNz ZXMpIHsNCj4gPiArICAgICAgICAgICAgQ2xhc3NSZXNvdXJjZUluZm8gY2xhc3NSZXNvdXJjZUlu Zm8gPQ0KPiA+IGNyZWF0ZUNsYXNzUmVzb3VyY2VJbmZvKHJlc291cmNlQ2xhc3MpOyArICAgICAg ICAgICANCj4gPiBjbGFzc1Jlc291cmNlSW5mb3MuYWRkKGNsYXNzUmVzb3VyY2VJbmZvKTsNCj4g PiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIEpBWFJTU2VydmljZUltcGwgc2Vydmlj ZSA9IG5ldw0KPiA+IEpBWFJTU2VydmljZUltcGwoY2xhc3NSZXNvdXJjZUluZm9zKTsgKw0KPiA+ ICsgICAgICAgIHNldFNlcnZpY2Uoc2VydmljZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmIChw cm9wZXJ0aWVzICE9IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgc2VydmljZS5wdXRBbGwocHJv cGVydGllcyk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHBy b3RlY3RlZCBDbGFzc1Jlc291cmNlSW5mbyBjcmVhdGVDbGFzc1Jlc291cmNlSW5mbyhmaW5hbA0K PiA+IENsYXNzPD8+IGMpIHsgKyAgICAgICAgZmluYWwgVXJpVGVtcGxhdGUgYW5ub3RhdGlvbiA9 DQo+ID4gYy5nZXRBbm5vdGF0aW9uKFVyaVRlbXBsYXRlLmNsYXNzKTsgKyAgICAgICAgaWYgKGFu bm90YXRpb24gDQo+ID09IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgcmV0dXJuIG51bGw7DQo+ ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBDbGFzc1Jlc291cmNlSW5mbyByZXNv dXJjZUNsYXNzID0gZ2V0Q2xhc3NSZXNvdXJjZUluZm8oYyk7DQo+ID4gKw0KPiA+ICsgICAgICAg IE1ldGhvZERpc3BhdGNoZXIgbWQgPSBjcmVhdGVPcGVyYXRpb24oYywgcmVzb3VyY2VDbGFzcyk7 DQo+ID4gKyAgICAgICAgcmVzb3VyY2VDbGFzcy5zZXRNZXRob2REaXNwYXRjaGVyKG1kKTsNCj4g PiArDQo+ID4gKyAgICAgICAgU3RyaW5nIGFubm90YXRpb25WYWx1ZSA9IGFubm90YXRpb24udmFs dWUoKTsNCj4gPiArICAgICAgICBpZiAoIWFubm90YXRpb25WYWx1ZS5zdGFydHNXaXRoKCIvIikp IHsNCj4gPiArICAgICAgICAgICAgYW5ub3RhdGlvblZhbHVlID0gIi8iICsgYW5ub3RhdGlvblZh bHVlOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICBTdHJpbmcgcmlnaHRIYW5kUGF0dGVy biA9IChyZXNvdXJjZUNsYXNzLmhhc1N1YlJlc291cmNlcygpKQ0KPiA+ICsgICAgICAgICAgICA/ IFVSSVRlbXBsYXRlLlNVQl9SRVNPVVJDRV9SRUdFWF9TVUZGSVggOg0KPiA+IFVSSVRlbXBsYXRl Lk5PTkVfU1VCX1JFU09VUkNFX1JFR0VYX1NVRkZJWDsgKyAgICAgICAgVVJJVGVtcGxhdGUgdCA9 DQo+ID4gbmV3IFVSSVRlbXBsYXRlKGFubm90YXRpb25WYWx1ZSwgcmlnaHRIYW5kUGF0dGVybik7 ICsgICAgICAgDQo+ID4gcmVzb3VyY2VDbGFzcy5zZXRVUklUZW1wbGF0ZSh0KTsNCj4gPiArDQo+ ID4gKyAgICAgICAgcmV0dXJuIHJlc291cmNlQ2xhc3M7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgcHJvdGVjdGVkIENsYXNzUmVzb3VyY2VJbmZvIGdldENsYXNzUmVzb3VyY2VJbmZvKGZp bmFsIENsYXNzPD8+DQo+ID4gYykgeyArICAgICAgICByZXR1cm4gbmV3IENsYXNzUmVzb3VyY2VJ bmZvKGMpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHByb3RlY3RlZCBNZXRob2REaXNw YXRjaGVyIGNyZWF0ZU9wZXJhdGlvbihDbGFzcyBjLA0KPiA+IENsYXNzUmVzb3VyY2VJbmZvIGNy aSkgeyArICAgICAgICBNZXRob2REaXNwYXRjaGVyIG1kID0gbmV3DQo+ID4gTWV0aG9kRGlzcGF0 Y2hlcigpOw0KPiA+ICsgICAgICAgIGZvciAoTWV0aG9kIG0gOiBjLmdldE1ldGhvZHMoKSkgew0K PiA+ICsgICAgICAgICAgICBpZiAobS5nZXRBbm5vdGF0aW9uKFVyaVRlbXBsYXRlLmNsYXNzKSAh PSBudWxsKSB7DQo+ID4gKyAgICAgICAgICAgICAgICBPcGVyYXRpb25SZXNvdXJjZUluZm8gb3Jp ID0gbmV3DQo+ID4gT3BlcmF0aW9uUmVzb3VyY2VJbmZvKG0sIGNyaSk7ICsgICAgICAgICAgICAg ICAgU3RyaW5nIHVyaVRlbXBsYXRlID0NCj4gPiBtLmdldEFubm90YXRpb24oVXJpVGVtcGxhdGUu Y2xhc3MpLnZhbHVlKCk7ICsgICAgICAgICAgICAgICAgaWYNCj4gPiAoIXVyaVRlbXBsYXRlLnN0 YXJ0c1dpdGgoIi8iKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHVyaVRlbXBsYXRlID0g Ii8iICsgdXJpVGVtcGxhdGU7DQo+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAg ICAgICAgICBpZiAobS5nZXRBbm5vdGF0aW9uKEh0dHBNZXRob2QuY2xhc3MpICE9IG51bGwpIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAvKg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAq IFN1Yi1yZXNvdXJjZSBtZXRob2QsIFVSSSB0ZW1wbGF0ZSBjcmVhdGVkIGJ5DQo+ID4gY29uY2F0 ZW5hdGluZyArICAgICAgICAgICAgICAgICAgICAgKiB0aGUgVVJJIHRlbXBsYXRlIG9mIA0KPiB0 aGUgcmVzb3VyY2UNCj4gPiBjbGFzcyB3aXRoIHRoZSBVUkkgdGVtcGxhdGUgKyAgICAgICAgICAg ICAgICAgICAgICogb2YgdGhlIG1ldGhvZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAqLw0K PiA+ICsgICAgICAgICAgICAgICAgICAgIG9yaS5zZXRVUklUZW1wbGF0ZShuZXcgVVJJVGVtcGxh dGUodXJpVGVtcGxhdGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIA0KPiA+IFVSSVRlbXBsYXRlLk5PTkVfU1VCX1JFU09VUkNFX1JF R0VYX1NVRkZJWCkpOyArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGh0dHBNZXRo b2QgPQ0KPiA+IG0uZ2V0QW5ub3RhdGlvbihIdHRwTWV0aG9kLmNsYXNzKS52YWx1ZSgpOyArICAg ICAgICAgICAgICAgICAgIA0KPiA+IG9yaS5zZXRIdHRwTWV0aG9kKGh0dHBNZXRob2QpOw0KPiA+ ICsgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAvL3N1 Yi1yZXNvdXJjZSBsb2NhdG9yDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgY3JpLnNldEhhc1N1 YlJlc291cmNlcyh0cnVlKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICBvcmkuc2V0VVJJVGVt cGxhdGUobmV3IFVSSVRlbXBsYXRlKHVyaVRlbXBsYXRlLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCj4gPiBVUklUZW1wbGF0ZS5T VUJfUkVTT1VSQ0VfUkVHRVhfU1VGRklYKSk7ICsgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAg ICAgICAgICAgICAgbWQuYmluZChvcmksIG0pOw0KPiA+ICsgICAgICAgICAgICB9IGVsc2UgaWYg KG0uZ2V0QW5ub3RhdGlvbihIdHRwTWV0aG9kLmNsYXNzKSAhPSBudWxsKSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAvL1N1Yi1yZXNvdXJjZSBtZXRob2QNCj4gPiArICAgICAgICAgICAgICAgIE9w ZXJhdGlvblJlc291cmNlSW5mbyBvcmkgPSBuZXcNCj4gPiBPcGVyYXRpb25SZXNvdXJjZUluZm8o bSwgY3JpKTsgKyAgICAgICAgICAgICAgICANCj4gb3JpLnNldFVSSVRlbXBsYXRlKG5ldw0KPiA+ IFVSSVRlbXBsYXRlKCIvIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICANCj4gPiBVUklUZW1wbGF0ZS5OT05FX1NVQl9SRVNPVVJDRV9SRUdF WF9TVUZGSVgpKTsgKw0KPiA+ICsgICAgICAgICAgICAgICAgU3RyaW5nIGh0dHBNZXRob2QgPQ0K PiA+IG0uZ2V0QW5ub3RhdGlvbihIdHRwTWV0aG9kLmNsYXNzKS52YWx1ZSgpOyArICAgICAgICAg ICAgICAgDQo+ID4gb3JpLnNldEh0dHBNZXRob2QoaHR0cE1ldGhvZCk7DQo+ID4gKyAgICAgICAg ICAgICAgICBtZC5iaW5kKG9yaSwgbSk7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIHJldHVybiBtZDsNCj4gPiArICAgIH0NCj4gPiArDQo+ ID4gKyAgICBwcm90ZWN0ZWQgSW52b2tlciBjcmVhdGVJbnZva2VyKCkgew0KPiA+ICsgICAgICAg IHJldHVybiBuZXcgSkFYUlNJbnZva2VyKCk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICt9DQo+ ID4NCj4gPiBQcm9wY2hhbmdlOg0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUv cnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJz L0pBWFJTU2VydmljZUZhY3RvcnlCZWFuLmphdmENCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ LS0tLS0tLS0gc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToNCj4g PiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9t YWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9KQVhSU1NlcnZpY2VGYWN0b3J5QmVh bi5qYXZhDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0tIHN2bjprZXl3b3JkcyA9 IFJldiBEYXRlDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hl cy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4 Zi9qYXhycy9KQVhSU1NlcnZpY2VJbXBsLmphdmEgVVJMOg0KPiA+IA0KPiBodHRwOi8vc3ZuLmFw YWNoZS5vcmcvdmlld3ZjL2luY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9q DQo+ID5heHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9jeGYvamF4cnMvSkFYUlNTZXJ2aWNl SW1wbC5qYXZhDQo+ID9yZXY9NTczNDINCj4gPjkmdmlldz1hdXRvDQo+ID4gDQo+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCj4gPj09PT09PT09IC0tLQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2ps aXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2ph eHJzL0pBWFJTU2VydmljZUltcGwuamF2YSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1YmF0b3Iv Y3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBh Y2hlDQo+ID4vY3hmL2pheHJzL0pBWFJTU2VydmljZUltcGwuamF2YSBUaHUgU2VwICA2IDE5OjQ0 OjQ0IDIwMDcgQEAgLTAsMA0KPiA+ICsxLDEyMCBAQA0KPiA+ICsvKioNCj4gPiArICogTGljZW5z ZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KPiA+ ICsgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJ Q0UgZmlsZQ0KPiA+ICsgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25h bCBpbmZvcm1hdGlvbg0KPiA+ICsgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhl IEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCj4gPiArICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUg TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KPiA+ICsgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5v dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQo+ID4gKyAqIHdpdGggdGhlIExp Y2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KPiA+ICsgKg0K PiA+ICsgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCj4gPiAr ICoNCj4gPiArICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLA0KPiA+ICsgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KPiA+ICsgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCj4gPiArICogS0lORCwgZWl0aGVyIGV4 cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCj4gPiArICogc3BlY2lm aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KPiA+ICsg KiB1bmRlciB0aGUgTGljZW5zZS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICtwYWNrYWdlIG9yZy5h cGFjaGUuY3hmLmpheHJzOw0KPiA+ICsNCj4gPiAraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0K PiA+ICtpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQo+ID4gK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0K PiA+ICtpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7DQo+ID4gKw0KPiA+ICtp bXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCj4gPiArDQo+ID4gK2ltcG9ydCBvcmcu YXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYWJsZTsNCj4gPiAraW1wb3J0IG9yZy5h cGFjaGUuY3hmLmRhdGFiaW5kaW5nLkRhdGFCaW5kaW5nOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNo ZS5jeGYuZW5kcG9pbnQuRW5kcG9pbnQ7DQo+ID4gK2ltcG9ydA0KPiA+IG9yZy5hcGFjaGUuY3hm LmludGVyY2VwdG9yLkFic3RyYWN0QXR0cmlidXRlZEludGVyY2VwdG9yUHJvdmlkZXI7DQo+ID4g K2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5qYXhycy5tb2RlbC5DbGFzc1Jlc291cmNlSW5mbzsNCj4g PiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UuU2VydmljZTsNCj4gPiAraW1wb3J0IG9y Zy5hcGFjaGUuY3hmLnNlcnZpY2UuaW52b2tlci5JbnZva2VyOw0KPiA+ICtpbXBvcnQgb3JnLmFw YWNoZS5jeGYuc2VydmljZS5tb2RlbC5FbmRwb2ludEluZm87DQo+ID4gK2ltcG9ydCBvcmcuYXBh Y2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLlNlcnZpY2VJbmZvOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNo ZS5jeGYud29ya3F1ZXVlLlN5bmNocm9ub3VzRXhlY3V0b3I7DQo+ID4gKw0KPiA+ICtwdWJsaWMg Y2xhc3MgSkFYUlNTZXJ2aWNlSW1wbCBleHRlbmRzDQo+ID4gQWJzdHJhY3RBdHRyaWJ1dGVkSW50 ZXJjZXB0b3JQcm92aWRlciBpbXBsZW1lbnRzIFNlcnZpY2UsIA0KPiBDb25maWd1cmFibGUNCj4g PiB7ICsgICAgcHJpdmF0ZSBMaXN0PENsYXNzUmVzb3VyY2VJbmZvPiBjbGFzc1Jlc291cmNlSW5m b3M7DQo+ID4gKyAgICBwcml2YXRlIERhdGFCaW5kaW5nIGRhdGFCaW5kaW5nOw0KPiA+ICsgICAg cHJpdmF0ZSBFeGVjdXRvciBleGVjdXRvcjsNCj4gPiArICAgIHByaXZhdGUgSW52b2tlciBpbnZv a2VyOw0KPiA+ICsgICAgcHJpdmF0ZSBNYXA8UU5hbWUsIEVuZHBvaW50PiBlbmRwb2ludHMgPSBu ZXcgSGFzaE1hcDxRTmFtZSwNCj4gPiBFbmRwb2ludD4oKTsgKw0KPiA+ICsgICAgcHVibGljIEpB WFJTU2VydmljZUltcGwoKSB7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIEpB WFJTU2VydmljZUltcGwoTGlzdDxDbGFzc1Jlc291cmNlSW5mbz4gY3JpKSB7DQo+ID4gKyAgICAg ICAgdGhpcy5jbGFzc1Jlc291cmNlSW5mb3MgPSBjcmk7DQo+ID4gKyAgICAgICAgZXhlY3V0b3Ig PSBTeW5jaHJvbm91c0V4ZWN1dG9yLmdldEluc3RhbmNlKCk7DQo+ID4gKyAgICB9DQo+ID4gKw0K PiA+ICsgICAgcHVibGljIFN0cmluZyBnZXRCZWFuTmFtZSgpIHsNCj4gPiArICAgICAgICByZXR1 cm4gZ2V0TmFtZSgpLnRvU3RyaW5nKCk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVi bGljIFFOYW1lIGdldE5hbWUoKSB7DQo+ID4gKyAgICAgICAgQ2xhc3MgcHJpbWFyeUNsYXNzID0N Cj4gPiBjbGFzc1Jlc291cmNlSW5mb3MuZ2V0KDApLmdldFJlc291cmNlQ2xhc3MoKTsgKyAgICAg ICAgcmV0dXJuIG5ldw0KPiA+IFFOYW1lKCJqYXhycyIsIHByaW1hcnlDbGFzcy5nZXRTaW1wbGVO YW1lKCkpOyArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgTGlzdDxDbGFzc1Jlc291cmNl SW5mbz4gZ2V0Q2xhc3NSZXNvdXJjZUluZm9zKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBjbGFz c1Jlc291cmNlSW5mb3M7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIExpc3Q8 U2VydmljZUluZm8+IGdldFNlcnZpY2VJbmZvcygpIHsNCj4gPiArICAgICAgICAvL05PVCBJTVBM RU1FTlRFRA0KPiA+ICsgICAgICAgIHJldHVybiBudWxsOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4g PiArICAgIHB1YmxpYyBFbmRwb2ludEluZm8gZ2V0RW5kcG9pbnRJbmZvKFFOYW1lIGVuZHBvaW50 KSB7DQo+ID4gKy8qICAgICAgICBmb3IgKFNlcnZpY2VJbmZvIGluZiA6IHNlcnZpY2VJbmZvcykg ew0KPiA+ICsgICAgICAgICAgICBFbmRwb2ludEluZm8gZWYgPSBpbmYuZ2V0RW5kcG9pbnQoZW5k cG9pbnQpOw0KPiA+ICsgICAgICAgICAgICBpZiAoZWYgIT0gbnVsbCkgew0KPiA+ICsgICAgICAg ICAgICAgICAgcmV0dXJuIGVmOw0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfQ0K PiA+ICsgICAgICAgIHJldHVybiBudWxsOyovDQo+ID4gKyAgICAgICAgcmV0dXJuIG51bGw7DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBFeGVjdXRvciBnZXRFeGVj dXRvcigpIHsNCj4gPiArICAgICAgICByZXR1cm4gZXhlY3V0b3I7DQo+ID4gKyAgICB9DQo+ID4g Kw0KPiA+ICsgICAgcHVibGljIHZvaWQgc2V0RXhlY3V0b3IoRXhlY3V0b3IgZXhlY3V0b3IpIHsN Cj4gPiArICAgICAgICB0aGlzLmV4ZWN1dG9yID0gZXhlY3V0b3I7DQo+ID4gKyAgICB9DQo+ID4g Kw0KPiA+ICsgICAgcHVibGljIEludm9rZXIgZ2V0SW52b2tlcigpIHsNCj4gPiArICAgICAgICBy ZXR1cm4gaW52b2tlcjsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBz ZXRJbnZva2VyKEludm9rZXIgaW52b2tlcikgew0KPiA+ICsgICAgICAgIHRoaXMuaW52b2tlciA9 IGludm9rZXI7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIERhdGFCaW5kaW5n IGdldERhdGFCaW5kaW5nKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBkYXRhQmluZGluZzsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBzZXREYXRhQmluZGluZyhEYXRh QmluZGluZyBkYXRhQmluZGluZykgew0KPiA+ICsgICAgICAgIHRoaXMuZGF0YUJpbmRpbmcgPSBk YXRhQmluZGluZzsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgTWFwPFFOYW1l LCBFbmRwb2ludD4gZ2V0RW5kcG9pbnRzKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBlbmRwb2lu dHM7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRz KE1hcDxRTmFtZSwgRW5kcG9pbnQ+IGVuZHBvaW50cykgew0KPiA+ICsgICAgICAgIHRoaXMuZW5k cG9pbnRzID0gZW5kcG9pbnRzOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyB2 b2lkIHNldFByb3BlcnRpZXMoTWFwPFN0cmluZywgT2JqZWN0PiBwcm9wZXJ0aWVzKSB7DQo+ID4g KyAgICAgICAgdGhpcy5wdXRBbGwocHJvcGVydGllcyk7DQo+ID4gKyAgICB9DQo+ID4gK30NCj4g Pg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9y dC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMv SkFYUlNTZXJ2aWNlSW1wbC5qYXZhDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0t IHN2bjplb2wtc3R5bGUgPSBuYXRpdmUNCj4gPg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+IGlu Y3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZh L29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvSkFYUlNTZXJ2aWNlSW1wbC5qYXZhDQo+ID4gDQo+ IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0tIHN2bjprZXl3b3JkcyA9IFJldiBEYXRlDQo+ID4N Cj4gPiBBZGRlZDoNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250 ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9pbnRlcmNl cHRvci9KQVhSU0Rpc3BhdGNoSW50ZXJjZXB0b3IuamF2YSBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9z dm4uYXBhY2hlLm9yZy92aWV3dmMvaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250 ZW5kL2oNCj4gPmF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi9qYXhycy9pbnRlcmNl cHRvci9KQVhSU0Rpc3ANCj4gYXRjaEludGVyYw0KPiA+ZXB0b3IuamF2YT9yZXY9NTczNDI5JnZp ZXc9YXV0bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09PSAtLS0NCj4gPiANCj4g aW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2ph dmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9pbnRlcmNlcHRvci9KQVhSU0Rpc3BhdGNoSW50 ZXJjZXB0b3IuamF2YSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVz L2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hm L2pheHJzL2ludGVyY2VwdG9yL0pBWFJTRGlzcGF0Y2hJbnRlcmNlcHRvci5qYXZhIFRodSBTZXAg IDYNCj4gPiAxOTo0NDo0NCAyMDA3IEBAIC0wLDAgKzEsMjE3IEBADQo+ID4gKy8qKg0KPiA+ICsg KiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIg b25lDQo+ID4gKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUg dGhlIE5PVElDRSBmaWxlDQo+ID4gKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBh ZGRpdGlvbmFsIGluZm9ybWF0aW9uDQo+ID4gKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJz aGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KPiA+ICsgKiB0byB5b3UgdW5kZXIgdGhl IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQo+ID4gKyAqICJMaWNlbnNlIik7IHlv dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCj4gPiArICogd2l0 aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQo+ ID4gKyAqDQo+ID4gKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu MA0KPiA+ICsgKg0KPiA+ICsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig YWdyZWVkIHRvIGluIHdyaXRpbmcsDQo+ID4gKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVy IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQo+ID4gKyAqICJBUyBJUyIgQkFTSVMs IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KPiA+ICsgKiBLSU5ELCBl aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KPiA+ICsg KiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25z DQo+ID4gKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gK3BhY2th Z2Ugb3JnLmFwYWNoZS5jeGYuamF4cnMuaW50ZXJjZXB0b3I7DQo+ID4gKw0KPiA+ICtpbXBvcnQg amF2YS5pby5JT0V4Y2VwdGlvbjsNCj4gPiAraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQo+ ID4gK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOw0KPiA+ICtpbXBvcnQg amF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOw0KPiA+ICtpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3Qu VHlwZTsNCj4gPiAraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQo+ID4gK2ltcG9ydCBqYXZh LnV0aWwuSGFzaE1hcDsNCj4gPiAraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KPiA+ICtpbXBvcnQg amF2YS51dGlsLk1hcDsNCj4gPiArDQo+ID4gK2ltcG9ydCBqYXZheC53cy5ycy5IZWFkZXJQYXJh bTsNCj4gPiAraW1wb3J0IGphdmF4LndzLnJzLk1hdHJpeFBhcmFtOw0KPiA+ICtpbXBvcnQgamF2 YXgud3MucnMuUXVlcnlQYXJhbTsNCj4gPiAraW1wb3J0IGphdmF4LndzLnJzLlVyaVBhcmFtOw0K PiA+ICtpbXBvcnQgamF2YXgud3MucnMuY29yZS5IdHRwQ29udGV4dDsNCj4gPiAraW1wb3J0IGph dmF4LndzLnJzLmV4dC5FbnRpdHlQcm92aWRlcjsNCj4gPiAraW1wb3J0IGphdmF4LndzLnJzLmV4 dC5Qcm92aWRlckZhY3Rvcnk7DQo+ID4gKw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4 cnMuSkFYUlNTZXJ2aWNlSW1wbDsNCj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHJzLm1v ZGVsLkNsYXNzUmVzb3VyY2VJbmZvOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4cnMu bW9kZWwuT3BlcmF0aW9uUmVzb3VyY2VJbmZvOw0KPiA+ICtpbXBvcnQgb3JnLmFwYWNoZS5jeGYu amF4cnMubW9kZWwuVVJJVGVtcGxhdGU7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNz YWdlLk1lc3NhZ2U7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5BYnN0cmFjdFBo YXNlSW50ZXJjZXB0b3I7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZTsN Cj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UuU2VydmljZTsNCj4gPiArDQo+ID4g Kw0KPiA+ICtwdWJsaWMgY2xhc3MgSkFYUlNEaXNwYXRjaEludGVyY2VwdG9yIGV4dGVuZHMNCj4g PiBBYnN0cmFjdFBoYXNlSW50ZXJjZXB0b3I8TWVzc2FnZT4geyArDQo+ID4gKyAgICBwdWJsaWMg c3RhdGljIGZpbmFsIFN0cmluZyBSRUxBVElWRV9QQVRIID0gInJlbGF0aXZlLnBhdGgiOw0KPiA+ ICsgICAgLy9wcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCj4gPiBMb2dnZXIuZ2V0 TG9nZ2VyKFJFU1REaXNwYXRjaEludGVyY2VwdG9yLmNsYXNzLmdldE5hbWUoKSk7ICsgICANCj4g PiAvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIEJVTkRMRSA9DQo+ID4gQnVu ZGxlVXRpbHMuZ2V0QnVuZGxlKFJFU1REaXNwYXRjaEludGVyY2VwdG9yLmNsYXNzKTsgKw0KPiA+ ICsgICAgcHVibGljIEpBWFJTRGlzcGF0Y2hJbnRlcmNlcHRvcigpIHsNCj4gPiArICAgICAgICBz dXBlcihQaGFzZS5QUkVfU1RSRUFNKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJs aWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgew0KPiA+ICsgICAgICAgIFN0 cmluZyBwYXRoID0gKFN0cmluZyltZXNzYWdlLmdldChNZXNzYWdlLlBBVEhfSU5GTyk7DQo+ID4g KyAgICAgICAgU3RyaW5nIGFkZHJlc3MgPSAoU3RyaW5nKW1lc3NhZ2UuZ2V0KE1lc3NhZ2UuQkFT RV9QQVRIKTsNCj4gPiArICAgICAgICBTdHJpbmcgaHR0cE1ldGhvZCA9DQo+ID4gKFN0cmluZylt ZXNzYWdlLmdldChNZXNzYWdlLkhUVFBfUkVRVUVTVF9NRVRIT0QpOyArDQo+ID4gKyAgICAgICAg aWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgiaHR0cCIpKSB7DQo+ID4gKyAgICAgICAgICAgIGludCBp ZHggPSBhZGRyZXNzLmluZGV4T2YoJy8nLCA3KTsNCj4gPiArICAgICAgICAgICAgaWYgKGlkeCAh PSAtMSkgew0KPiA+ICsgICAgICAgICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc3Vic3RyaW5n KGlkeCk7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsg ICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoYWRkcmVzcykpIHsNCj4gPiArICAgICAgICAgICAg cGF0aCA9IHBhdGguc3Vic3RyaW5nKGFkZHJlc3MubGVuZ3RoKCkpOw0KPiA+ICsgICAgICAgICAg ICBpZiAoIXBhdGguc3RhcnRzV2l0aCgiLyIpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICBwYXRo ID0gIi8iICsgcGF0aDsNCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgICAgaWYgKCFwYXRoLmVuZHNXaXRoKCIvIikpIHsNCj4gPiArICAgICAgICAg ICAgLy9wYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGgoKSAtIDEpOw0KPiA+ICsg ICAgICAgICAgICBwYXRoID0gcGF0aCArICIvIjsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAg ICAgbWVzc2FnZS5wdXQoUkVMQVRJVkVfUEFUSCwgcGF0aCk7DQo+ID4gKw0KPiA+ICsNCj4gPiAr ICAgICAgICAvLzEuIE1hdGNoaW5nIHRhcmdldCByZXNvdXJjZSBjbGFzc2VzIGFuZCBtZXRob2QN Cj4gPiArICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBtZXNzYWdlLmdldEV4Y2hhbmdlKCkuZ2V0 KFNlcnZpY2UuY2xhc3MpOw0KPiA+ICsgICAgICAgIExpc3Q8Q2xhc3NSZXNvdXJjZUluZm8+IHJl c291cmNlcyA9DQo+ID4gKChKQVhSU1NlcnZpY2VJbXBsKXNlcnZpY2UpLmdldENsYXNzUmVzb3Vy Y2VJbmZvcygpOyArDQo+ID4gKyAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMgPSBu ZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsNCj4gPiArICAgICAgICBPcGVyYXRpb25SZXNv dXJjZUluZm8gb3JpID0gZmluZFRhcmdldFJlc291cmNlKHJlc291cmNlcywNCj4gPiBwYXRoLCBo dHRwTWV0aG9kLCB2YWx1ZXMpOyArDQo+ID4gKyAgICAgICAgaWYgKG9yaSA9PSBudWxsKSB7DQo+ ID4gKyAgICAgICAgICAgIC8vdGhyb3cgbmV3IEZhdWx0KG5ldw0KPiA+IG9yZy5hcGFjaGUuY3hm LmNvbW1vbi5pMThuLk1lc3NhZ2UoIk5PX09QIiwgQlVORExFLCBtZXRob2QsIA0KPiBwYXRoKSk7 ICsgDQo+ID4gICAgICAgfQ0KPiA+ICsgICAgICAgIA0KPiBtZXNzYWdlLmdldEV4Y2hhbmdlKCku cHV0KE9wZXJhdGlvblJlc291cmNlSW5mby5jbGFzcywgb3JpKTsNCj4gPiArDQo+ID4gKw0KPiA+ ICsgICAgICAgIC8vMi4gUHJvY2VzcyBwYXJhbWV0ZXJzDQo+ID4gKyAgICAgICAgSW5wdXRTdHJl YW0gaXMgPSBtZXNzYWdlLmdldENvbnRlbnQoSW5wdXRTdHJlYW0uY2xhc3MpOw0KPiA+ICsgICAg ICAgIExpc3Q8T2JqZWN0PiBwYXJhbXMgPSBwcm9jZXNzUGFyYW1ldGVycyhvcmkuZ2V0TWV0aG9k KCksDQo+ID4gcGF0aCwgaHR0cE1ldGhvZCwgdmFsdWVzLCBpcyk7ICsNCj4gPiArICAgICAgICBt ZXNzYWdlLnNldENvbnRlbnQoTGlzdC5jbGFzcywgcGFyYW1zKTsNCj4gPiArDQo+ID4gKyAgICB9 DQo+ID4gKw0KPiA+ICsgICAgcHJvdGVjdGVkIE9wZXJhdGlvblJlc291cmNlSW5mbw0KPiA+IGZp bmRUYXJnZXRSZXNvdXJjZShMaXN0PENsYXNzUmVzb3VyY2VJbmZvPiByZXNvdXJjZXMsIA0KPiBT dHJpbmcgcGF0aCwgKyAgDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFN0cmluZyANCj4gaHR0cE1ldGhvZCwNCj4gPiBNYXA8U3RyaW5nLCBT dHJpbmc+IHZhbHVlcykgeyArICAgICAgICBmb3IgDQo+IChDbGFzc1Jlc291cmNlSW5mbyByZXNv dXJjZQ0KPiA+IDogcmVzb3VyY2VzKSB7DQo+ID4gKyAgICAgICAgICAgIFVSSVRlbXBsYXRlIHVy aVRlbXBsYXRlID0gcmVzb3VyY2UuZ2V0VVJJVGVtcGxhdGUoKTsNCj4gPiArICAgICAgICAgICAg aWYgKHVyaVRlbXBsYXRlLm1hdGNoKHBhdGgsIHZhbHVlcykpIHsNCj4gPiArICAgICAgICAgICAg ICAgIFN0cmluZyBzdWJSZXNvdXJjZVBhdGggPQ0KPiA+IHZhbHVlcy52YWx1ZXMoKS5pdGVyYXRv cigpLm5leHQoKTsgKyAgICAgICAgICAgICAgIA0KPiA+IE9wZXJhdGlvblJlc291cmNlSW5mbyBv cmkgPSBmaW5kVGFyZ2V0TWV0aG9kKHJlc291cmNlLA0KPiA+IHN1YlJlc291cmNlUGF0aCwgaHR0 cE1ldGhvZCwgdmFsdWVzKTsgKyAgICAgICAgICAgICAgICBpZiAob3JpICE9DQo+ID4gbnVsbCkg ew0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmk7DQo+ID4gKyAgICAgICAgICAg ICAgICB9DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAg cmV0dXJuIG51bGw7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHJvdGVjdGVkIE9wZXJh dGlvblJlc291cmNlSW5mbw0KPiA+IGZpbmRUYXJnZXRNZXRob2QoQ2xhc3NSZXNvdXJjZUluZm8g cmVzb3VyY2UsIFN0cmluZyBwYXRoLCArIA0KPiAgICAgICAgICAgDQo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaHR0cE1ldGhvZCwNCj4gPiBNYXA8 U3RyaW5nLCBTdHJpbmc+IHZhbHVlcykgeyArICAgICAgICBmb3IgDQo+IChPcGVyYXRpb25SZXNv dXJjZUluZm8gb3JpDQo+ID4gOiANCj4gcmVzb3VyY2UuZ2V0TWV0aG9kRGlzcGF0Y2hlcigpLmdl dE9wZXJhdGlvblJlc291cmNlSW5mb3MoKSkgeyArICAgICANCj4gPiAgICAgICBVUklUZW1wbGF0 ZSB1cmlUZW1wbGF0ZSA9IG9yaS5nZXRVUklUZW1wbGF0ZSgpOw0KPiA+ICsgICAgICAgICAgICBp ZiAodXJpVGVtcGxhdGUgIT0gbnVsbCAmJiB1cmlUZW1wbGF0ZS5tYXRjaChwYXRoLA0KPiA+IHZh bHVlcykpIHsgKyAgICAgICAgICAgICAgICByZXR1cm4gb3JpOw0KPiA+ICsgICAgICAgICAgICB9 IC8qDQo+ID4gKyAgICAgICAgICAgICAgICAgKiBlbHNlIHsgLy9VUklUZW1wbGF0ZSA9PSBudWxs IG1lYW5zIG1hdGNoIGJ5DQo+ID4gZGVmYXVsdCBpZiArICAgICAgICAgICAgICAgICAqDQo+ID4g KGh0dHBNZXRob2QuZXF1YWxzSWdub3JlQ2FzZShvcmkuZ2V0SHR0cE1ldGhvZCgpKSkgeyByZXR1 cm4gDQo+ICsgICAgICAgICANCj4gPiAgICAgICAgKiBvcmk7IH0gfQ0KPiA+ICsgICAgICAgICAg ICAgICAgICovDQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIHJldHVybiBudWxsOw0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHByaXZhdGUgTGlzdDxPYmplY3Q+IHByb2Nlc3NQYXJh bWV0ZXJzKE1ldGhvZCBtZXRob2QsIFN0cmluZw0KPiA+IHBhdGgsIFN0cmluZyBodHRwTWV0aG9k LCArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo+ID4gTWFwPFN0 cmluZywgU3RyaW5nPiB2YWx1ZXMsIElucHV0U3RyZWFtIGlzKSB7ICsgICAgICAgIENsYXNzW10N Cj4gPiBwYXJhbWV0ZXJUeXBlcyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOyArICAgICAg ICBUeXBlW10NCj4gPiBnZW5lcmljUGFyYW1ldGVyVHlwZXMgPSBtZXRob2QuZ2V0R2VuZXJpY1Bh cmFtZXRlclR5cGVzKCk7ICsgICAgICAgDQo+ID4gQW5ub3RhdGlvbltdW10gcGFyYW1ldGVyQW5u b3RhdGlvbnMgPQ0KPiA+IG1ldGhvZC5nZXRQYXJhbWV0ZXJBbm5vdGF0aW9ucygpOyArDQo+ID4g KyAgICAgICAgYm9vbGVhbiByZWFkRnJvbUVudGl0eUJvZHkgPSBmYWxzZTsNCj4gPiArICAgICAg ICBpZiAoIlBVVCIuZXF1YWxzKGh0dHBNZXRob2QpIHx8IA0KPiAiUE9TVCIuZXF1YWxzKGh0dHBN ZXRob2QpKSB7DQo+ID4gKyAgICAgICAgICAgIHJlYWRGcm9tRW50aXR5Qm9keSA9IHRydWU7DQo+ ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBMaXN0PE9iamVjdD4gcGFyYW1zID0g bmV3DQo+ID4gQXJyYXlMaXN0PE9iamVjdD4ocGFyYW1ldGVyVHlwZXMubGVuZ3RoKTsgKw0KPiA+ ICsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVyVHlwZXMubGVuZ3RoOyBpKysp IHsNCj4gPiArICAgICAgICAgICAgT2JqZWN0IHBhcmFtID0gcHJvY2Vzc1BhcmFtZXRlcihwYXJh bWV0ZXJUeXBlc1tpXSwNCj4gPiBnZW5lcmljUGFyYW1ldGVyVHlwZXNbaV0sICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICANCj4gICAgICAgICAgIA0KPiA+IHBhcmFtZXRlckFubm90 YXRpb25zW2ldLCByZWFkRnJvbUVudGl0eUJvZHksIHBhdGgsIHZhbHVlcywgaXMpOyArDQo+ID4g KyAgICAgICAgICAgIHBhcmFtcy5hZGQocGFyYW0pOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ ID4gKyAgICAgICAgcmV0dXJuIHBhcmFtczsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBw cml2YXRlIE9iamVjdCBwcm9jZXNzUGFyYW1ldGVyKENsYXNzPD8+IHBhcmFtZXRlckNsYXNzLCBU eXBlDQo+ID4gcGFyYW1ldGVyVHlwZSwgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFubm90YXRpb25bXQ0KPiA+IHBhcmFtZXRlckFubm90YXRpb25zLCBib29sZWFuIHJlYWRG cm9tRW50aXR5Qm9keSwgKyAgICAgICAgIA0KPiAgICAgICAgICAgDQo+ID4gICAgICAgICAgICAg ICAgIFN0cmluZyBwYXRoLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlcywgSW5wdXRTdHJlYW0N Cj4gPiBpcykgeyArICAgICAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsNCj4gPiArICAgICAgICBp ZiAocGFyYW1ldGVyQW5ub3RhdGlvbnMgPT0gbnVsbCB8fA0KPiA+IHBhcmFtZXRlckFubm90YXRp b25zLmxlbmd0aCA9PSAwKSB7ICsgICAgICAgICAgICBpZg0KPiA+IChyZWFkRnJvbUVudGl0eUJv ZHkpIHsNCj4gPiArICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRGcm9tRW50aXR5Qm9keShw YXJhbWV0ZXJDbGFzcywgaXMpOw0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAg IHJldHVybiByZXN1bHQ7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBBbm5v dGF0aW9uIGFubm90YXRpb24gPSBwYXJhbWV0ZXJBbm5vdGF0aW9uc1swXTsNCj4gPiArICAgICAg ICBpZiAoYW5ub3RhdGlvbi5hbm5vdGF0aW9uVHlwZSgpID09IFVyaVBhcmFtLmNsYXNzKSB7DQo+ ID4gKyAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRGcm9tVXJpUGFyYW0oKFVyaVBhcmFtKWFubm90 YXRpb24sDQo+ID4gcGFyYW1ldGVyQ2xhc3MsIHBhcmFtZXRlclR5cGUsICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgDQo+ICAgICAgICAgIA0KPiA+IHBhcmFtZXRlckFubm90YXRpb25zLCBw YXRoLCB2YWx1ZXMpOyArICAgICAgICB9IGVsc2UgaWYNCj4gPiAoYW5ub3RhdGlvbi5hbm5vdGF0 aW9uVHlwZSgpID09IFF1ZXJ5UGFyYW0uY2xhc3MpIHsgKyAgICAgICAgICAgDQo+ID4gLy9UT0RP DQo+ID4gKyAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9uLmFubm90YXRpb25UeXBlKCkgPT0g DQo+IE1hdHJpeFBhcmFtLmNsYXNzKQ0KPiA+IHsgKyAgICAgICAgICAgIC8vVE9ETw0KPiA+ICsg ICAgICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5hbm5vdGF0aW9uVHlwZSgpID09IA0KPiBIZWFk ZXJQYXJhbS5jbGFzcykNCj4gPiB7ICsgICAgICAgICAgICAvL1RPRE8NCj4gPiArICAgICAgICB9 IGVsc2UgaWYgKGFubm90YXRpb24uYW5ub3RhdGlvblR5cGUoKSA9PSANCj4gSHR0cENvbnRleHQu Y2xhc3MpDQo+ID4geyArICAgICAgICAgICAgLy9UT0RPDQo+ID4gKyAgICAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICAgICByZXR1cm4gcmVzdWx0Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IHByaXZhdGUgT2JqZWN0IHJlYWRGcm9tRW50aXR5Qm9keShDbGFzczw/PiB0YXJnZXRUeXBlQ2xh c3MsDQo+ID4gSW5wdXRTdHJlYW0gaXMpIHsgKyAgICAgICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7 DQo+ID4gKyAgICAgICAgRW50aXR5UHJvdmlkZXIgcHJvdmlkZXIgPQ0KPiA+IA0KPiBQcm92aWRl ckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5jcmVhdGVFbnRpdHlQcm92aWRlcih0YXJnZXRUeXBlQ2xh c3MpOyArDQo+ID4gKyAgICAgICAgdHJ5IHsNCj4gPiArICAgICAgICAgICAgcmVzdWx0ID0gcHJv dmlkZXIucmVhZEZyb20odGFyZ2V0VHlwZUNsYXNzLCBudWxsLCBudWxsLA0KPiA+IGlzKTsgKyAg ICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KPiA+ICsgICAgICAgICAgICBlLnByaW50 U3RhY2tUcmFjZSgpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgcmV0dXJu IHJlc3VsdDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwcml2YXRlIFN0cmluZyByZWFk RnJvbVVyaVBhcmFtKFVyaVBhcmFtIHVyaVBhcmFtQW5ub3RhdGlvbiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gcGFyYW1ldGVyLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIHBhcmFtZXRlclR5cGUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25bXQ0KPiA+IHBh cmFtZXRlckFubm90YXRpb25zLCArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U3RyaW5nDQo+ID4gcGF0aCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMpIHsNCj4gPiArICAgICAgICBTdHJpbmcgcGFy YW1ldGVyTmFtZSA9IHVyaVBhcmFtQW5ub3RhdGlvbi52YWx1ZSgpOw0KPiA+ICsgICAgICAgIGlm IChwYXJhbWV0ZXJOYW1lID09IG51bGwgfHwgcGFyYW1ldGVyTmFtZS5sZW5ndGgoKSA9PSAwKSB7 DQo+ID4gKyAgICAgICAgICAgIC8vIEludmFsaWQgVVJJIHBhcmFtZXRlciBuYW1lDQo+ID4gKyAg ICAgICAgICAgIHJldHVybiBudWxsOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ICAgU3RyaW5nIHJlc3VsdCA9IHZhbHVlcy5nZXQocGFyYW1ldGVyTmFtZSk7DQo+ID4gKw0KPiA+ ICsgICAgICAgIHJldHVybiByZXN1bHQ7DQo+ID4gKyAgICB9DQo+ID4gK30NCj4gPg0KPiA+IFBy b3BjaGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVu ZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvaW50ZXJjZXB0 b3IvSkFYUlNEaXNwYXRjaEludGVyY2VwdG9yLmphdmENCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K PiA+LS0tLS0tLS0gc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToN Cj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3Ny Yy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9pbnRlcmNlcHRvci9KQVhSU0Rp c3BhdGNoSW50ZXJjZXB0b3IuamF2YQ0KPiA+IA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4tLS0tLS0t LSBzdm46a2V5d29yZHMgPSBSZXYgRGF0ZQ0KPiA+DQo+ID4gQWRkZWQ6DQo+ID4gDQo+IGluY3Vi YXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29y Zy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvaW50ZXJjZXB0b3IvSkFYUlNPdXRJbnRlcmNlcHRvci5q YXZhIFVSTDoNCj4gPiANCj4gaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3Iv Y3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvag0KPiA+YXhycy9zcmMvbWFpbi9qYXZhL29y Zy9hcGFjaGUvY3hmL2pheHJzL2ludGVyY2VwdG9yL0pBWFJTT3V0SQ0KPiBudGVyY2VwdG9yDQo+ ID4uamF2YT9yZXY9NTczNDI5JnZpZXc9YXV0bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49 PT09PT09PSAtLS0NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250 ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9pbnRlcmNl cHRvci9KQVhSU091dEludGVyY2VwdG9yLmphdmEgKGFkZGVkKSArKysNCj4gPiANCj4gaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3Jn L2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9pbnRlcmNlcHRvci9KQVhSU091dEludGVyY2VwdG9yLmph dmEgVGh1IFNlcCAgNiAxOTo0NDo0NA0KPiA+IDIwMDcgQEAgLTAsMCArMSw3NyBAQA0KPiA+ICsv KioNCj4gPiArICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChB U0YpIHVuZGVyIG9uZQ0KPiA+ICsgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVt ZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KPiA+ICsgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMg d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KPiA+ICsgKiByZWdhcmRpbmcgY29weXJp Z2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCj4gPiArICogdG8geW91 IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KPiA+ICsgKiAiTGlj ZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQo+ ID4gKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj ZW5zZSBhdA0KPiA+ICsgKg0KPiA+ICsgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv TElDRU5TRS0yLjANCj4gPiArICoNCj4gPiArICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KPiA+ICsgKiBzb2Z0d2FyZSBkaXN0cmli dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KPiA+ICsgKiAiQVMg SVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCj4gPiAr ICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0 aGUNCj4gPiArICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBs aW1pdGF0aW9ucw0KPiA+ICsgKiB1bmRlciB0aGUgTGljZW5zZS4NCj4gPiArICovDQo+ID4gKw0K PiA+ICtwYWNrYWdlIG9yZy5hcGFjaGUuY3hmLmpheHJzLmludGVyY2VwdG9yOw0KPiA+ICsNCj4g PiAraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQo+ID4gK2ltcG9ydCBqYXZhLmlvLk91dHB1 dFN0cmVhbTsNCj4gPiAraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KPiA+ICsNCj4gPiAraW1wb3J0 IGphdmF4LndzLnJzLmV4dC5FbnRpdHlQcm92aWRlcjsNCj4gPiAraW1wb3J0IGphdmF4LndzLnJz LmV4dC5Qcm92aWRlckZhY3Rvcnk7DQo+ID4gKw0KPiA+ICtpbXBvcnQgDQo+IG9yZy5hcGFjaGUu Y3hmLmludGVyY2VwdG9yLkFic3RyYWN0T3V0RGF0YWJpbmRpbmdJbnRlcmNlcHRvcjsNCj4gPiAr aW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHJzLm1vZGVsLk9wZXJhdGlvblJlc291cmNlSW5mbzsN Cj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuRXhjaGFuZ2U7DQo+ID4gK2ltcG9y dCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hl LmN4Zi5tZXNzYWdlLk1lc3NhZ2VDb250ZW50c0xpc3Q7DQo+ID4gK2ltcG9ydCBvcmcuYXBhY2hl LmN4Zi5waGFzZS5QaGFzZTsNCj4gPiArDQo+ID4gK3B1YmxpYyBjbGFzcyBKQVhSU091dEludGVy Y2VwdG9yIGV4dGVuZHMNCj4gPiBBYnN0cmFjdE91dERhdGFiaW5kaW5nSW50ZXJjZXB0b3IgeyAr DQo+ID4gKyAgICBwdWJsaWMgSkFYUlNPdXRJbnRlcmNlcHRvcigpIHsNCj4gPiArICAgICAgICBz dXBlcihQaGFzZS5NQVJTSEFMKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMg dm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgew0KPiA+ICsgICAgICAgIEV4Y2hh bmdlIGV4Y2hhbmdlID0gbWVzc2FnZS5nZXRFeGNoYW5nZSgpOw0KPiA+ICsgICAgICAgIE9wZXJh dGlvblJlc291cmNlSW5mbyBvcGVyYXRpb24gPQ0KPiA+IA0KPiAoT3BlcmF0aW9uUmVzb3VyY2VJ bmZvKWV4Y2hhbmdlLmdldChPcGVyYXRpb25SZXNvdXJjZUluZm8uY2xhc3MgKyAgICAgDQo+ID4g ICAgICAgLmdldE5hbWUoKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmIChvcGVyYXRpb24gPT0g bnVsbCkgew0KPiA+ICsgICAgICAgICAgICByZXR1cm47DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICAgICBNZXNzYWdlQ29udGVudHNMaXN0IG9ianMgPQ0KPiA+IE1lc3NhZ2VDb250 ZW50c0xpc3QuZ2V0Q29udGVudHNMaXN0KG1lc3NhZ2UpOyArICAgICAgICBpZiAob2JqcyA9PQ0K PiA+IG51bGwgfHwgb2Jqcy5zaXplKCkgPT0gMCkgew0KPiA+ICsgICAgICAgICAgICByZXR1cm47 DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBPdXRwdXRTdHJlYW0gb3V0ID0g bWVzc2FnZS5nZXRDb250ZW50KE91dHB1dFN0cmVhbS5jbGFzcyk7DQo+ID4gKw0KPiA+ICsgICAg ICAgIGlmIChvYmpzLmdldCgwKSAhPSBudWxsKSB7DQo+ID4gKyAgICAgICAgICAgIENsYXNzIHRh cmdldFR5cGUgPSBvYmpzLmdldCgwKS5nZXRDbGFzcygpOw0KPiA+ICsgICAgICAgICAgICBpZiAo b2Jqcy5nZXQoMCkuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpIHsNCj4gPiArICAgICAgICAgICAgICAg IHRhcmdldFR5cGUgPQ0KPiA+IG9ianMuZ2V0KDApLmdldENsYXNzKCkuZ2V0Q29tcG9uZW50VHlw ZSgpOyArICAgICAgICAgICAgfSBlbHNlIGlmDQo+ID4gKG9ianMuZ2V0KDApIGluc3RhbmNlb2Yg TGlzdCAmJiAoKExpc3Qpb2Jqcy5nZXQoMCkpLmdldCgwKSANCj4gIT0gbnVsbCkgew0KPiA+ICsg ICAgICAgICAgICAgICAgdGFyZ2V0VHlwZSA9IA0KPiAoKExpc3Qpb2Jqcy5nZXQoMCkpLmdldCgw KS5nZXRDbGFzcygpOyArDQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgRW50 aXR5UHJvdmlkZXIgcHJvdmlkZXIgPQ0KPiA+IFByb3ZpZGVyRmFjdG9yeS5nZXRJbnN0YW5jZSgp LmNyZWF0ZUVudGl0eVByb3ZpZGVyKHRhcmdldFR5cGUpOyArDQo+ID4gKyAgICAgICAgICAgIHRy eSB7DQo+ID4gKyAgICAgICAgICAgICAgICBwcm92aWRlci53cml0ZVRvKG9ianMuZ2V0KDApLCBu dWxsLCBvdXQpOw0KPiA+ICsgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQo+ ID4gKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOw0KPiA+ICsgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gK30NCj4g Pg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9y dC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMv aW50ZXJjZXB0b3IvSkFYUlNPdXRJbnRlcmNlcHRvci5qYXZhDQo+ID4gDQo+IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gPi0tLS0tLS0tIHN2bjplb2wtc3R5bGUgPSBuYXRpdmUNCj4gPg0KPiA+IFByb3BjaGFu Z2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhy cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvaW50ZXJjZXB0b3IvSkFY UlNPdXRJbnRlcmNlcHRvci5qYXZhDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0t IHN2bjprZXl3b3JkcyA9IFJldiBEYXRlDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiANCj4gaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3Jn L2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9DbGFzc1Jlc291cmNlSW5mby5qYXZhIFVSTDoN Cj4gPiANCj4gaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3IvY3hmL2JyYW5j aGVzL2psaXUvcnQvZnJvbnRlbmQvag0KPiA+YXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUv Y3hmL2pheHJzL21vZGVsL0NsYXNzUmVzb3VyY2VJbg0KPiBmby5qYXZhP3JlDQo+ID52PTU3MzQy OSZ2aWV3PWF1dG8NCj4gPiANCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+PT09PT09PT0gLS0tDQo+ID4g DQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFp bi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvbW9kZWwvQ2xhc3NSZXNvdXJjZUluZm8u amF2YSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQv ZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL21v ZGVsL0NsYXNzUmVzb3VyY2VJbmZvLmphdmEgVGh1IFNlcCAgNiAxOTo0NDo0NCAyMDA3IEBADQo+ ID4gLTAsMCArMSw2MCBAQA0KPiA+ICsvKioNCj4gPiArICogTGljZW5zZWQgdG8gdGhlIEFwYWNo ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KPiA+ICsgKiBvciBtb3JlIGNv bnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KPiA+ICsg KiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0K PiA+ICsgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0 aGlzIGZpbGUNCj4gPiArICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv biAyLjAgKHRoZQ0KPiA+ICsgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl IGV4Y2VwdCBpbiBjb21wbGlhbmNlDQo+ID4gKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkg b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KPiA+ICsgKg0KPiA+ICsgKiBodHRwOi8v d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCj4gPiArICoNCj4gPiArICogVW5s ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0K PiA+ICsgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli dXRlZCBvbiBhbg0KPiA+ICsgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig Q09ORElUSU9OUyBPRiBBTlkNCj4gPiArICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll ZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCj4gPiArICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292 ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KPiA+ICsgKiB1bmRlciB0aGUgTGlj ZW5zZS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICtwYWNrYWdlIG9yZy5hcGFjaGUuY3hmLmpheHJz Lm1vZGVsOw0KPiA+ICsNCj4gPiArDQo+ID4gK3B1YmxpYyBjbGFzcyBDbGFzc1Jlc291cmNlSW5m byB7DQo+ID4gKyAgICBwcml2YXRlIENsYXNzIHJlc291cmNlQ2xhc3M7DQo+ID4gKyAgICBwcml2 YXRlIFVSSVRlbXBsYXRlIHVyaVRlbXBsYXRlOw0KPiA+ICsgICAgcHJpdmF0ZSBNZXRob2REaXNw YXRjaGVyIG1ldGhvZERpc3BhdGNoZXI7DQo+ID4gKyAgICBwcml2YXRlIGJvb2xlYW4gaGFzU3Vi UmVzb3VyY2VzOw0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBDbGFzc1Jlc291cmNlSW5mbyhDbGFz cyB0aGVSZXNvdXJjZUNsYXNzKSB7DQo+ID4gKyAgICAgICAgcmVzb3VyY2VDbGFzcyA9IHRoZVJl c291cmNlQ2xhc3M7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIENsYXNzIGdl dFJlc291cmNlQ2xhc3MoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIHJlc291cmNlQ2xhc3M7DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIFVSSVRlbXBsYXRlIGdldFVSSVRlbXBs YXRlKCkgew0KPiA+ICsgICAgICAgIHJldHVybiB1cmlUZW1wbGF0ZTsNCj4gPiArICAgIH0NCj4g PiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBzZXRVUklUZW1wbGF0ZShVUklUZW1wbGF0ZSB1KSB7 DQo+ID4gKyAgICAgICAgdXJpVGVtcGxhdGUgPSB1Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICAgIHB1YmxpYyBNZXRob2REaXNwYXRjaGVyIGdldE1ldGhvZERpc3BhdGNoZXIoKSB7DQo+ID4g KyAgICAgICAgcmV0dXJuIG1ldGhvZERpc3BhdGNoZXI7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgcHVibGljIHZvaWQgc2V0TWV0aG9kRGlzcGF0Y2hlcihNZXRob2REaXNwYXRjaGVyIG1k KSB7DQo+ID4gKyAgICAgICAgbWV0aG9kRGlzcGF0Y2hlciA9IG1kOw0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIHB1YmxpYyBib29sZWFuIGhhc1N1YlJlc291cmNlcygpIHsNCj4gPiArICAg ICAgICByZXR1cm4gaGFzU3ViUmVzb3VyY2VzOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IHB1YmxpYyB2b2lkIHNldEhhc1N1YlJlc291cmNlcyhib29sZWFuIGZsYWcpIHsNCj4gPiArICAg ICAgICBoYXNTdWJSZXNvdXJjZXMgPSBmbGFnOw0KPiA+ICsgICAgfQ0KPiA+ICt9DQo+ID4NCj4g PiBQcm9wY2hhbmdlOg0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJv bnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL21vZGVs L0NsYXNzUmVzb3VyY2VJbmZvLmphdmENCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+LS0tLS0t LS0gc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToNCj4gPiANCj4g aW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2ph dmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9DbGFzc1Jlc291cmNlSW5mby5qYXZh DQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0tIHN2bjprZXl3b3JkcyA9IFJldiBE YXRlDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1 L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhy cy9tb2RlbC9NZXRob2REaXNwYXRjaGVyLmphdmEgVVJMOg0KPiA+IA0KPiBodHRwOi8vc3ZuLmFw YWNoZS5vcmcvdmlld3ZjL2luY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9q DQo+ID5heHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9jeGYvamF4cnMvbW9kZWwvTWV0aG9k RGlzcGF0Y2hlDQo+IHIuamF2YT9yZXYNCj4gPj01NzM0Mjkmdmlldz1hdXRvDQo+ID4gDQo+ID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCj4gPj09PT09PT09IC0tLQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5j aGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4v Y3hmL2pheHJzL21vZGVsL01ldGhvZERpc3BhdGNoZXIuamF2YSAoYWRkZWQpICsrKw0KPiA+IA0K PiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4v amF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2pheHJzL21vZGVsL01ldGhvZERpc3BhdGNoZXIuamF2 YSBUaHUgU2VwICA2IDE5OjQ0OjQ0IA0KPiAyMDA3IEBAIC0wLDANCj4gPiArMSw1NSBAQA0KPiA+ ICsvKioNCj4gPiArICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9u IChBU0YpIHVuZGVyIG9uZQ0KPiA+ICsgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdy ZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KPiA+ICsgKiBkaXN0cmlidXRlZCB3aXRoIHRo aXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KPiA+ICsgKiByZWdhcmRpbmcgY29w eXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCj4gPiArICogdG8g eW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KPiA+ICsgKiAi TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl DQo+ID4gKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg TGljZW5zZSBhdA0KPiA+ICsgKg0KPiA+ICsgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z ZXMvTElDRU5TRS0yLjANCj4gPiArICoNCj4gPiArICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KPiA+ICsgKiBzb2Z0d2FyZSBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KPiA+ICsgKiAi QVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCj4g PiArICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZv ciB0aGUNCj4gPiArICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu ZCBsaW1pdGF0aW9ucw0KPiA+ICsgKiB1bmRlciB0aGUgTGljZW5zZS4NCj4gPiArICovDQo+ID4g K3BhY2thZ2Ugb3JnLmFwYWNoZS5jeGYuamF4cnMubW9kZWw7DQo+ID4gKw0KPiA+ICtpbXBvcnQg amF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOw0KPiA+ICsNCj4gPiAraW1wb3J0IGphdmEudXRpbC5N YXA7DQo+ID4gK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KPiA+ICtpbXBvcnQgamF2YS51dGlsLmNv bmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7DQo+ID4gKw0KPiA+ICsNCj4gPiArcHVibGljIGNs YXNzIE1ldGhvZERpc3BhdGNoZXIgew0KPiA+ICsgICAgcHJpdmF0ZSBNYXA8T3BlcmF0aW9uUmVz b3VyY2VJbmZvLCBNZXRob2Q+IG9wVG9NZXRob2QgPQ0KPiA+ICsgICAgICAgIG5ldyBDb25jdXJy ZW50SGFzaE1hcDxPcGVyYXRpb25SZXNvdXJjZUluZm8sIE1ldGhvZD4oKTsNCj4gPiArICAgIHBy aXZhdGUgTWFwPE1ldGhvZCwgT3BlcmF0aW9uUmVzb3VyY2VJbmZvPiBtZXRob2RUb09wID0NCj4g PiArICAgICAgICBuZXcgQ29uY3VycmVudEhhc2hNYXA8TWV0aG9kLCBPcGVyYXRpb25SZXNvdXJj ZUluZm8+KCk7DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIHZvaWQgYmluZChPcGVyYXRpb25SZXNv dXJjZUluZm8gbywgTWV0aG9kLi4uIG1ldGhvZHMpIHsNCj4gPiArICAgICAgICBNZXRob2QgcHJp bWFyeSA9IG1ldGhvZHNbMF07DQo+ID4gKw0KPiA+ICsgICAgICAgIGZvciAoTWV0aG9kIG0gOiBt ZXRob2RzKSB7DQo+ID4gKyAgICAgICAgICAgIG1ldGhvZFRvT3AucHV0KG0sIG8pOw0KPiA+ICsg ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgb3BUb01ldGhvZC5wdXQobywgcHJpbWFyeSk7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIE9wZXJhdGlvblJlc291cmNlSW5m byBnZXRPcGVyYXRpb25SZXNvdXJjZUluZm8oTWV0aG9kDQo+ID4gbWV0aG9kKSB7ICsgICAgICAg IHJldHVybiBtZXRob2RUb09wLmdldChtZXRob2QpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICAgIHB1YmxpYyBTZXQ8T3BlcmF0aW9uUmVzb3VyY2VJbmZvPiBnZXRPcGVyYXRpb25SZXNvdXJj ZUluZm9zKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBvcFRvTWV0aG9kLmtleVNldCgpOw0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBNZXRob2QgZ2V0TWV0aG9kKE9wZXJhdGlv blJlc291cmNlSW5mbyBvcCkgew0KPiA+ICsgICAgICAgIHJldHVybiBvcFRvTWV0aG9kLmdldChv cCk7DQo+ID4gKyAgICB9DQo+ID4gK30NCj4gPg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+IGlu Y3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZh L29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvbW9kZWwvTWV0aG9kRGlzcGF0Y2hlci5qYXZhDQo+ ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPi0tLS0tLS0tIHN2bjplb2wtc3R5bGUgPSBuYXRpdmUN Cj4gPg0KPiA+IFByb3BjaGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxp dS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4 cnMvbW9kZWwvTWV0aG9kRGlzcGF0Y2hlci5qYXZhDQo+ID4gDQo+IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4g Pi0tLS0tLS0tIHN2bjprZXl3b3JkcyA9IFJldiBEYXRlDQo+ID4NCj4gPiBBZGRlZDoNCj4gPiAN Cj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWlu L2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9PcGVyYXRpb25SZXNvdXJjZUlu Zm8uamF2YSBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvaW5jdWJh dG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2oNCj4gPmF4cnMvc3JjL21haW4vamF2 YS9vcmcvYXBhY2hlL2N4Zi9qYXhycy9tb2RlbC9PcGVyYXRpb25SZXNvdXINCj4gY2VJbmZvLmph dg0KPiA+YT9yZXY9NTczNDI5JnZpZXc9YXV0bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49 PT09PT09PSAtLS0NCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250 ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9P cGVyYXRpb25SZXNvdXJjZUluZm8uamF2YSAoYWRkZWQpICsrKw0KPiA+IA0KPiBpbmN1YmF0b3Iv Y3hmL2JyYW5jaGVzL2psaXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBh Y2hlDQo+ID4vY3hmL2pheHJzL21vZGVsL09wZXJhdGlvblJlc291cmNlSW5mby5qYXZhIFRodSBT ZXAgIDYgDQo+IDE5OjQ0OjQ0IDIwMDcgQEANCj4gPiAtMCwwICsxLDkxIEBADQo+ID4gKy8qKg0K PiA+ICsgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikg dW5kZXIgb25lDQo+ID4gKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRz LiBTZWUgdGhlIE5PVElDRSBmaWxlDQo+ID4gKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3Jr IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQo+ID4gKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQg b3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KPiA+ICsgKiB0byB5b3UgdW5k ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQo+ID4gKyAqICJMaWNlbnNl Iik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCj4gPiAr ICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl IGF0DQo+ID4gKyAqDQo+ID4gKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF TlNFLTIuMA0KPiA+ICsgKg0KPiA+ICsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQo+ID4gKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVk IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQo+ID4gKyAqICJBUyBJUyIg QkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KPiA+ICsgKiBL SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0K PiA+ICsgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0 YXRpb25zDQo+ID4gKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4g K3BhY2thZ2Ugb3JnLmFwYWNoZS5jeGYuamF4cnMubW9kZWw7DQo+ID4gKw0KPiA+ICtpbXBvcnQg amF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOw0KPiA+ICtpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQo+ ID4gKw0KPiA+ICtpbXBvcnQgamF2YXgud3MucnMuZXh0LkVudGl0eVByb3ZpZGVyOw0KPiA+ICsN Cj4gPiAraW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHJzLnByb3ZpZGVyLkpBWEJFbGVtZW50UHJv dmlkZXI7DQo+ID4gKw0KPiA+ICtwdWJsaWMgY2xhc3MgT3BlcmF0aW9uUmVzb3VyY2VJbmZvIHsN Cj4gPiArICAgIHByaXZhdGUgVVJJVGVtcGxhdGUgdXJpVGVtcGxhdGU7DQo+ID4gKyAgICBwcml2 YXRlIENsYXNzUmVzb3VyY2VJbmZvIGNsYXNzUmVzb3VyY2VJbmZvOw0KPiA+ICsgICAgcHJpdmF0 ZSBNZXRob2QgbWV0aG9kOw0KPiA+ICsgICAgcHJpdmF0ZSBMaXN0PENsYXNzPiBwYXJhbWV0ZXJU eXBlTGlzdDsNCj4gPiArICAgIHByaXZhdGUgTGlzdDxDbGFzcz4gYW5ub3RhdGVkUGFyYW1ldGVy VHlwZUxpc3Q7DQo+ID4gKyAgICBwcml2YXRlIExpc3Q8RW50aXR5UHJvdmlkZXI+IGVudGl0eVBy b3ZpZGVyTGlzdDsNCj4gPiArICAgIHByaXZhdGUgU3RyaW5nIGh0dHBNZXRob2Q7DQo+ID4gKw0K PiA+ICsgICAgcHVibGljIE9wZXJhdGlvblJlc291cmNlSW5mbyhNZXRob2QgbSwgQ2xhc3NSZXNv dXJjZUluZm8gY3JpKSB7DQo+ID4gKyAgICAgICAgbWV0aG9kID0gbTsNCj4gPiArICAgICAgICBj bGFzc1Jlc291cmNlSW5mbyA9IGNyaTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJs aWMgVVJJVGVtcGxhdGUgZ2V0VVJJVGVtcGxhdGUoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIHVy aVRlbXBsYXRlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyB2b2lkIHNldFVS SVRlbXBsYXRlKFVSSVRlbXBsYXRlIHUpIHsNCj4gPiArICAgICAgICB1cmlUZW1wbGF0ZSA9IHU7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIENsYXNzUmVzb3VyY2VJbmZvIGdl dENsYXNzUmVzb3VyY2VJbmZvKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBjbGFzc1Jlc291cmNl SW5mbzsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc1Jl c291cmNlSW5mbyhDbGFzc1Jlc291cmNlSW5mbyBjKSB7DQo+ID4gKyAgICAgICAgY2xhc3NSZXNv dXJjZUluZm8gPSBjOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBNZXRob2Qg Z2V0TWV0aG9kKCkgew0KPiA+ICsgICAgICAgIHJldHVybiBtZXRob2Q7DQo+ID4gKyAgICB9DQo+ ID4gKw0KPiA+ICsgICAgcHVibGljIHZvaWQgc2V0TWV0aG9kKE1ldGhvZCBtKSB7DQo+ID4gKyAg ICAgICAgbWV0aG9kID0gbTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgU3Ry aW5nIGdldEh0dHBNZXRob2QoKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIGh0dHBNZXRob2Q7DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIHZvaWQgc2V0SHR0cE1ldGhvZChTdHJp bmcgbSkgew0KPiA+ICsgICAgICAgIGh0dHBNZXRob2QgPSBtOw0KPiA+ICsgICAgfQ0KPiA+ICsN Cj4gPiArICAgIHB1YmxpYyBMaXN0PENsYXNzPiBnZXRQYXJhbWV0ZXJUeXBlTGlzdCgpIHsNCj4g PiArICAgICAgICByZXR1cm4gcGFyYW1ldGVyVHlwZUxpc3Q7DQo+ID4gKyAgICB9DQo+ID4gKw0K PiA+ICsgICAgcHVibGljIExpc3Q8Q2xhc3M+IGdldEFubm90YXRlZFBhcmFtZXRlclR5cGVMaXN0 KCkgew0KPiA+ICsgICAgICAgIHJldHVybiBhbm5vdGF0ZWRQYXJhbWV0ZXJUeXBlTGlzdDsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgTGlzdDxFbnRpdHlQcm92aWRlcj4gZ2V0 RW50aXR5UHJvdmlkZXJMaXN0KCkgew0KPiA+ICsgICAgICAgIHJldHVybiBlbnRpdHlQcm92aWRl ckxpc3Q7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHJvdGVjdGVkIEVudGl0eVByb3Zp ZGVyIGZpbmRFbnRpdHlQcm92aWRlcigpIHsNCj4gPiArICAgICAgICByZXR1cm4gbmV3IEpBWEJF bGVtZW50UHJvdmlkZXIoKTsNCj4gPiArDQo+ID4gKyAgICB9DQo+ID4gK30NCj4gPg0KPiA+IFBy b3BjaGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVu ZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvbW9kZWwvT3Bl cmF0aW9uUmVzb3VyY2VJbmZvLmphdmENCj4gPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+LS0tLS0t LS0gc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToNCj4gPiANCj4g aW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2ph dmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9PcGVyYXRpb25SZXNvdXJjZUluZm8u amF2YQ0KPiA+IA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4tLS0tLS0tLSBzdm46a2V5d29yZHMgPSBS ZXYgRGF0ZQ0KPiA+DQo+ID4gQWRkZWQ6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMv amxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYv amF4cnMvbW9kZWwvVVJJVGVtcGxhdGUuamF2YSBVUkw6DQo+ID4gDQo+IGh0dHA6Ly9zdm4uYXBh Y2hlLm9yZy92aWV3dmMvaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2oN Cj4gPmF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi9qYXhycy9tb2RlbC9VUklUZW1w bGF0ZS5qYXYNCj4gYT9yZXY9NTczNA0KPiA+Mjkmdmlldz1hdXRvDQo+ID4gDQo+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCj4gPj09PT09PT09IC0tLQ0KPiA+IA0KPiBpbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2ps aXUvcnQvZnJvbnRlbmQvamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlDQo+ID4vY3hmL2ph eHJzL21vZGVsL1VSSVRlbXBsYXRlLmphdmEgKGFkZGVkKSArKysNCj4gPiANCj4gaW5jdWJhdG9y L2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2Fw YWNoZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9VUklUZW1wbGF0ZS5qYXZhIFRodSBTZXAgIDYgMTk6 NDQ6NDQgMjAwNyBAQCAtMCwwDQo+ID4gKzEsMTU3IEBADQo+ID4gKy8qKg0KPiA+ICsgKiBMaWNl bnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQo+ ID4gKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5P VElDRSBmaWxlDQo+ID4gKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlv bmFsIGluZm9ybWF0aW9uDQo+ID4gKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBU aGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KPiA+ICsgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNo ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQo+ID4gKyAqICJMaWNlbnNlIik7IHlvdSBtYXkg bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCj4gPiArICogd2l0aCB0aGUg TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQo+ID4gKyAq DQo+ID4gKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KPiA+ ICsgKg0KPiA+ICsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVk IHRvIGluIHdyaXRpbmcsDQo+ID4gKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQo+ID4gKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhP VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KPiA+ICsgKiBLSU5ELCBlaXRoZXIg ZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KPiA+ICsgKiBzcGVj aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQo+ID4g KyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gK3BhY2thZ2Ugb3Jn LmFwYWNoZS5jeGYuamF4cnMubW9kZWw7DQo+ID4gKw0KPiA+ICsNCj4gPiAraW1wb3J0IGphdmEu dXRpbC5BcnJheUxpc3Q7DQo+ID4gK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQo+ID4g K2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCj4gPiAraW1wb3J0IGphdmEudXRpbC5NYXA7DQo+ID4g K2ltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsNCj4gPiAraW1wb3J0IGphdmEudXRpbC5y ZWdleC5QYXR0ZXJuOw0KPiA+ICsNCj4gPiArcHVibGljIGZpbmFsIGNsYXNzIFVSSVRlbXBsYXRl IHsNCj4gPiArICAgIC8qKg0KPiA+ICsgICAgICogUmVnZXggZm9yIHN1Yi1yZXNvdXJjZTogRm9y IGVhY2ggcmVzb3VyY2UgY2xhc3MgY29tcHV0ZSBhDQo+ID4gcmVndWxhciArICAgICAqIGV4cHJl c3Npb24gZnJvbSBpdHMgVVJJIHRlbXBsYXRlLCBJZiB0aGUgcmVzb3VyY2UNCj4gPiBjbGFzcyBo YXMgc3ViLXJlc291cmNlcyArICAgICAqIHRoZW4gYXBwZW5kIMKhwq4oLy4qKT/CocuJIHRvIHRo ZQ0KPiA+IHJlc3VsdGluZyByZWd1bGFyIGV4cHJlc3Npb24uICsgICAgICovDQo+ID4gKyAgICBw dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJfUkVTT1VSQ0VfUkVHRVhfU1VGRklYID0gDQo+ ICIoLy4qKT8iOw0KPiA+ICsNCj4gPiArICAgIC8qKg0KPiA+ICsgICAgICogUmVnZXggZm9yIG5v bmUgc3ViLXJlc291cmNlOiBGb3IgZWFjaCByZXNvdXJjZSANCj4gY2xhc3MgY29tcHV0ZSBhDQo+ ID4gcmVndWxhciArICAgICAqIGV4cHJlc3Npb24gZnJvbSBpdHMgVVJJIHRlbXBsYXRlLCBJZiB0 aGUgcmVzb3VyY2UNCj4gPiBjbGFzcyBoYXMgbm8gKyAgICAgKiBzdWItcmVzb3VyY2VzIHRoZW4g YXBwZW5kIMKhwq4oLyk/wqHLiSB0byB0aGUNCj4gPiByZXN1bHRpbmcgcmVndWxhciBleHByZXNz aW9uLiArICAgICAqLw0KPiA+ICsgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORV9T VUJfUkVTT1VSQ0VfUkVHRVhfU1VGRklYID0NCj4gPiAiKC8pPyI7ICsNCj4gPiArICAgIC8qKg0K PiA+ICsgICAgICogVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgVVJJIHRlbXBs YXRlcyBhbmQgbmFtZXMuDQo+ID4gKyAgICAgKi8NCj4gPiArICAgIHByaXZhdGUgc3RhdGljIGZp bmFsIFBhdHRlcm4gVEVNUExBVEVfTkFNRVNfUEFUVEVSTiA9DQo+ID4gUGF0dGVybi5jb21waWxl KCJcXHsoW1xcdy1cXC5ffl0rPylcXH0iKTsgKw0KPiA+ICsgICAgLyoqDQo+ID4gKyAgICAgKiBB IFVSSSB0ZW1wbGF0ZSBpcyBjb252ZXJ0ZWQgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBieQ0K PiA+IHN1YnN0aXR1dGluZyArICAgICAqIMKhwq4oLio/KcKhy4kgZm9yIGVhY2ggb2NjdXJyZW5j ZSBvZiB7XChbdy0gMTQgXC4NCj4gPiBdKz9cKX0gd2l0aGluIHRoZSBVUkwgKyAgICAgKiB0ZW1w bGF0ZQ0KPiA+ICsgICAgICovDQo+ID4gKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg VVJJVEVNUExBVEVfUkVHRVggPSAiKC4qPykiOw0KPiA+ICsNCj4gPiArICAgIHByaXZhdGUgZmlu YWwgU3RyaW5nIHRlbXBsYXRlOw0KPiA+ICsgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVnZXhT dWZmaXg7DQo+ID4gKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gZW5kc1dpdGhTbGFzaDsNCj4g PiArICAgIHByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IHRlbXBsYXRlVmFyaWFibGVzOw0KPiA+ ICsgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdGVtcGxhdGVSZWdleDsNCj4gPiArICAgIHByaXZh dGUgZmluYWwgUGF0dGVybiB0ZW1wbGF0ZVJlZ2V4UGF0dGVybjsNCj4gPiArDQo+ID4gKyAgICBw cml2YXRlIFVSSVRlbXBsYXRlKCkgew0KPiA+ICsgICAgICAgIHRoaXMudGVtcGxhdGUgPSAiIjsN Cj4gPiArICAgICAgICB0aGlzLnJlZ2V4U3VmZml4ID0gbnVsbDsNCj4gPiArICAgICAgICB0aGlz LmVuZHNXaXRoU2xhc2ggPSBmYWxzZTsNCj4gPiArICAgICAgICB0aGlzLnRlbXBsYXRlVmFyaWFi bGVzID0gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7DQo+ID4gKyAgICAgICAgdGhpcy50ZW1wbGF0 ZVJlZ2V4ID0gIiI7DQo+ID4gKyAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZ2V4UGF0dGVybiA9IG51 bGw7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIFVSSVRlbXBsYXRlKFN0cmlu ZyB0aGVUZW1wbGF0ZSkgew0KPiA+ICsgICAgICAgIHRoaXModGhlVGVtcGxhdGUsIG51bGwpOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1YmxpYyBVUklUZW1wbGF0ZShTdHJpbmcgdGhl VGVtcGxhdGUsIFN0cmluZyB0aGVSZWdleFN1ZmZpeCkgew0KPiA+ICsgICAgICAgIHRoaXMudGVt cGxhdGUgPSB0aGVUZW1wbGF0ZTsNCj4gPiArICAgICAgICB0aGlzLnJlZ2V4U3VmZml4ID0gdGhl UmVnZXhTdWZmaXg7DQo+ID4gKw0KPiA+ICsgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp bGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7DQo+ID4gKyAgICAgICAgTGlzdDxTdHJpbmc+IG5h bWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQo+ID4gKw0KPiA+ICsgICAgICAgIC8vIGNv bXB1dGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSBVUkkgdGVtcGxhdGUNCj4gPiArICAgICAg ICBNYXRjaGVyIG1hdGNoZXIgPSBURU1QTEFURV9OQU1FU19QQVRURVJOLm1hdGNoZXIodGVtcGxh dGUpOw0KPiA+ICsgICAgICAgIGludCBpID0gMDsNCj4gPiArICAgICAgICB3aGlsZSAobWF0Y2hl ci5maW5kKCkpIHsNCj4gPiArICAgICAgICAgICAgY29weVVSSVRlbXBsYXRlQ2hhcmFjdGVycyh0 ZW1wbGF0ZSwgaSwgbWF0Y2hlci5zdGFydCgpLA0KPiA+IHN0cmluZ0J1aWxkZXIpOyArICAgICAg ICAgICAgDQo+IHN0cmluZ0J1aWxkZXIuYXBwZW5kKFVSSVRFTVBMQVRFX1JFR0VYKTsNCj4gPiAr ICAgICAgICAgICAgbmFtZXMuYWRkKG1hdGNoZXIuZ3JvdXAoMSkpOw0KPiA+ICsgICAgICAgICAg ICBpID0gbWF0Y2hlci5lbmQoKTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgY29weVVS SVRlbXBsYXRlQ2hhcmFjdGVycyh0ZW1wbGF0ZSwgaSwgdGVtcGxhdGUubGVuZ3RoKCksDQo+ID4g c3RyaW5nQnVpbGRlcik7ICsNCj4gPiArICAgICAgICB0ZW1wbGF0ZVZhcmlhYmxlcyA9IENvbGxl Y3Rpb25zLnVubW9kaWZpYWJsZUxpc3QobmFtZXMpOw0KPiA+ICsNCj4gPiArICAgICAgICBpbnQg ZW5kUG9zID0gc3RyaW5nQnVpbGRlci5sZW5ndGgoKSAtIDE7DQo+ID4gKyAgICAgICAgdGhpcy5l bmRzV2l0aFNsYXNoID0gKGVuZFBvcyA+PSAwKSA/DQo+ID4gc3RyaW5nQnVpbGRlci5jaGFyQXQo ZW5kUG9zKSA9PSAnLycgOiBmYWxzZTsgKyAgICAgICAgaWYgDQo+IChyZWdleFN1ZmZpeA0KPiA+ ICE9IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgaWYgKGVuZHNXaXRoU2xhc2gpIHsNCj4gPiAr ICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZGVsZXRlQ2hhckF0KGVuZFBvcyk7DQo+ID4g KyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmVn ZXhTdWZmaXgpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgdGVtcGxhdGVS ZWdleCA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsNCj4gPiArICAgICAgICB0ZW1wbGF0ZVJl Z2V4UGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSh0ZW1wbGF0ZVJlZ2V4KTsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICBwcml2YXRlIHZvaWQgY29weVVSSVRlbXBsYXRlQ2hhcmFjdGVycyhT dHJpbmcgDQo+IHRlbXBsYXRlVmFsdWUsIGludA0KPiA+IHN0YXJ0LCBpbnQgZW5kLCBTdHJpbmdC dWlsZGVyIGIpIHsgKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwNCj4gPiBlbmQ7IGkr Kykgew0KPiA+ICsgICAgICAgICAgICBjaGFyIGMgPSB0ZW1wbGF0ZVZhbHVlLmNoYXJBdChpKTsN Cj4gPiArICAgICAgICAgICAgaWYgKGMgPT0gJz8nKSB7DQo+ID4gKyAgICAgICAgICAgICAgICBi LmFwcGVuZCgiXFw/Iik7DQo+ID4gKyAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAg ICAgICAgICBiLmFwcGVuZChjKTsNCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0N Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaChTdHJpbmcg dXJpLCBNYXA8U3RyaW5nLCBTdHJpbmc+DQo+ID4gdGVtcGxhdGVWYXJpYWJsZVRvVmFsdWUpIHsg KyAgICAgICAgdGVtcGxhdGVWYXJpYWJsZVRvVmFsdWUuY2xlYXIoKTsNCj4gPiArDQo+ID4gKyAg ICAgICAgaWYgKHVyaSA9PSBudWxsKSB7DQo+ID4gKyAgICAgICAgICAgIHJldHVybiAodGVtcGxh dGVSZWdleFBhdHRlcm4gPT0gbnVsbCkgPyB0cnVlIDogZmFsc2U7DQo+ID4gKyAgICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAgICBpZiAodGVtcGxhdGVSZWdleFBhdHRlcm4gPT0gbnVsbCkgew0K PiA+ICsgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgICBNYXRjaGVyIG0gPSB0ZW1wbGF0ZVJlZ2V4UGF0dGVybi5tYXRjaGVyKHVyaSk7 DQo+ID4gKyAgICAgICAgaWYgKCFtLm1hdGNoZXMoKSkgew0KPiA+ICsgICAgICAgICAgICByZXR1 cm4gZmFsc2U7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAvLyBBc3NpZ24g dGhlIG1hdGNoZWQgdGVtcGxhdGUgdmFsdWVzIHRvIHRlbXBsYXRlIHZhcmlhYmxlcw0KPiA+ICsg ICAgICAgIGludCBpID0gMTsNCj4gPiArICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDogdGVtcGxh dGVWYXJpYWJsZXMpIHsNCj4gPiArICAgICAgICAgICAgU3RyaW5nIHByZXZpb3VzVmFsdWUgPSAN Cj4gdGVtcGxhdGVWYXJpYWJsZVRvVmFsdWUuZ2V0KG5hbWUpOw0KPiA+ICsgICAgICAgICAgICBT dHJpbmcgY3VycmVudFZhbHVlID0gbS5ncm91cChpKyspOw0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgaWYgKHByZXZpb3VzVmFsdWUgIT0gbnVsbCAmJg0KPiA+ICFwcmV2aW91c1ZhbHVlLmVxdWFs cyhjdXJyZW50VmFsdWUpKSB7ICsgICAgICAgICAgICAgICAgDQo+IHJldHVybiBmYWxzZTsNCj4g PiArICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgdGVtcGxhdGVWYXJpYWJs ZVRvVmFsdWUucHV0KG5hbWUsIGN1cnJlbnRWYWx1ZSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICAgICAvLyBBc3NpZ24gdGhlIHJpZ2h0IGhhbmQgc2lkZSB2YWx1ZSB0byB0aGUg bnVsbCBrZXkNCj4gPiArICAgICAgICBpZiAocmVnZXhTdWZmaXggIT0gbnVsbCkgew0KPiA+ICsg ICAgICAgICAgICB0ZW1wbGF0ZVZhcmlhYmxlVG9WYWx1ZS5wdXQobnVsbCwgbS5ncm91cChpKSk7 DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICByZXR1cm4gdHJ1ZTsNCj4gPiAr ICAgIH0NCj4gPiArfQ0KPiA+DQo+ID4gUHJvcGNoYW5nZToNCj4gPiANCj4gaW5jdWJhdG9yL2N4 Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNo ZQ0KPiA+L2N4Zi9qYXhycy9tb2RlbC9VUklUZW1wbGF0ZS5qYXZhDQo+ID4gDQo+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gPi0tLS0tLS0tIHN2bjplb2wtc3R5bGUgPSBuYXRpdmUNCj4gPg0KPiA+IFByb3Bj aGFuZ2U6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJhbmNoZXMvamxpdS9ydC9mcm9udGVuZC9q YXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4gPi9jeGYvamF4cnMvbW9kZWwvVVJJVGVt cGxhdGUuamF2YQ0KPiA+IA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4tLS0tLS0tLSBzdm46a2V5d29y ZHMgPSBSZXYgRGF0ZQ0KPiA+DQo+ID4gQWRkZWQ6DQo+ID4gDQo+IGluY3ViYXRvci9jeGYvYnJh bmNoZXMvamxpdS9ydC9mcm9udGVuZC9qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUNCj4g Pi9jeGYvamF4cnMvcHJvdmlkZXIvSkFYQkVsZW1lbnRQcm92aWRlci5qYXZhIFVSTDoNCj4gPiAN Cj4gaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3IvY3hmL2JyYW5jaGVzL2ps aXUvcnQvZnJvbnRlbmQvag0KPiA+YXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvY3hmL2ph eHJzL3Byb3ZpZGVyL0pBWEJFbGVtZW50UA0KPiByb3ZpZGVyLmphDQo+ID52YT9yZXY9NTczNDI5 JnZpZXc9YXV0bw0KPiA+IA0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID49PT09PT09PSAtLS0NCj4gPiAN Cj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWlu L2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhycy9wcm92aWRlci9KQVhCRWxlbWVudFByb3Zp ZGVyLmphdmEgKGFkZGVkKSArKysNCj4gPiANCj4gaW5jdWJhdG9yL2N4Zi9icmFuY2hlcy9qbGl1 L3J0L2Zyb250ZW5kL2pheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZQ0KPiA+L2N4Zi9qYXhy cy9wcm92aWRlci9KQVhCRWxlbWVudFByb3ZpZGVyLmphdmEgVGh1IFNlcCAgNiAxOTo0NDo0NCAy MDA3DQo+ID4gQEAgLTAsMCArMSwxMDMgQEANCj4gPiArLyoqDQo+ID4gKyAqIExpY2Vuc2VkIHRv IHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCj4gPiArICog b3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZp bGUNCj4gPiArICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5m b3JtYXRpb24NCj4gPiArICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0Yg bGljZW5zZXMgdGhpcyBmaWxlDQo+ID4gKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vu c2UsIFZlcnNpb24gMi4wICh0aGUNCj4gPiArICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KPiA+ICsgKiB3aXRoIHRoZSBMaWNlbnNl LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCj4gPiArICoNCj4gPiAr ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQo+ID4gKyAqDQo+ ID4gKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g d3JpdGluZywNCj4gPiArICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug aXMgZGlzdHJpYnV0ZWQgb24gYW4NCj4gPiArICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJS QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQo+ID4gKyAqIEtJTkQsIGVpdGhlciBleHByZXNz IG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQo+ID4gKyAqIHNwZWNpZmljIGxh bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCj4gPiArICogdW5k ZXIgdGhlIExpY2Vuc2UuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArcGFja2FnZSBvcmcuYXBhY2hl LmN4Zi5qYXhycy5wcm92aWRlcjsNCj4gPiArDQo+ID4gKw0KPiA+ICtpbXBvcnQgamF2YS5pby5J bnB1dFN0cmVhbTsNCj4gPiAraW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOw0KPiA+ICtpbXBv cnQgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXk7DQo+ID4gK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsN Cj4gPiAraW1wb3J0IGphdmEudXRpbC5NYXA7DQo+ID4gK2ltcG9ydCBqYXZhLnV0aWwuV2Vha0hh c2hNYXA7DQo+ID4gK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk11bHRpdmFsdWVkTWFwOw0KPiA+ ICtpbXBvcnQgamF2YXgud3MucnMuZXh0LkVudGl0eVByb3ZpZGVyOw0KPiA+ICtpbXBvcnQgamF2 YXgueG1sLmJpbmQuSkFYQkNvbnRleHQ7DQo+ID4gK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhC RWxlbWVudDsNCj4gPiAraW1wb3J0IGphdmF4LnhtbC5iaW5kLkpBWEJFeGNlcHRpb247DQo+ID4g K2ltcG9ydCBqYXZheC54bWwuYmluZC5NYXJzaGFsbGVyOw0KPiA+ICtpbXBvcnQgamF2YXgueG1s LmJpbmQuVW5tYXJzaGFsbGVyOw0KPiA+ICtpbXBvcnQgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlv bi5YbWxSb290RWxlbWVudDsNCj4gPiAraW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7 DQo+ID4gKw0KPiA+ICtwdWJsaWMgZmluYWwgY2xhc3MgSkFYQkVsZW1lbnRQcm92aWRlciBpbXBs ZW1lbnRzDQo+ID4gRW50aXR5UHJvdmlkZXI8T2JqZWN0PiAgeyArDQo+ID4gKyAgICBzdGF0aWMg TWFwPENsYXNzLCBKQVhCQ29udGV4dD4gamF4YkNvbnRleHRzID0gbmV3DQo+ID4gV2Vha0hhc2hN YXA8Q2xhc3MsIEpBWEJDb250ZXh0PigpOyArDQo+ID4gKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBw b3J0cyhDbGFzczw/PiB0eXBlKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIHR5cGUuZ2V0QW5ub3Rh dGlvbihYbWxSb290RWxlbWVudC5jbGFzcykgIT0gbnVsbDsNCj4gPiArICAgIH0NCj4gPiArDQo+ ID4gKyAgICBwdWJsaWMgT2JqZWN0IHJlYWRGcm9tKENsYXNzPE9iamVjdD4gdHlwZSwgU3RyaW5n IG1lZGlhVHlwZSwNCj4gPiBNdWx0aXZhbHVlZE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVycywg KyAgICAgICAgICAgICAgICAgICAgICAgICAgDQo+ID4gSW5wdXRTdHJlYW0gaXMpIHsNCj4gPiAr ICAgICAgICB0cnkgew0KPiA+ICsgICAgICAgICAgICBKQVhCQ29udGV4dCBjb250ZXh0ID0gZ2V0 SkFYQkNvbnRleHQodHlwZSk7DQo+ID4gKyAgICAgICAgICAgIFVubWFyc2hhbGxlciB1bm1hcnNo YWxsZXIgPSANCj4gY29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKTsNCj4gPiArICAgICAgICAg ICAgcmV0dXJuIHVubWFyc2hhbGxlci51bm1hcnNoYWwoaXMpOw0KPiA+ICsgICAgICAgIH0gY2F0 Y2ggKEpBWEJFeGNlcHRpb24gZSkgew0KPiA+ICsgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFj ZSgpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgcmV0dXJuIG51bGw7DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHVibGljIHZvaWQgd3JpdGVUbyhPYmplY3Qgb2Jq LCBNdWx0aXZhbHVlZE1hcDxTdHJpbmcsIE9iamVjdD4NCj4gPiBoZWFkZXJzLCBPdXRwdXRTdHJl YW0gb3MpIHsgKyAgICAgICAgdHJ5IHsNCj4gPiArICAgICAgICAgICAgaWYgKG9iai5nZXRDbGFz cygpLmlzQXJyYXkoKSB8fCBvYmogaW5zdGFuY2VvZiBMaXN0KSB7DQo+ID4gKyAgICAgICAgICAg ICAgICBDbGFzczw/PiBjbHMgPSBudWxsOw0KPiA+ICsgICAgICAgICAgICAgICAgT2JqZWN0IG9i akFycmF5Ow0KPiA+ICsgICAgICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIExpc3QpIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICBMaXN0IGwgPSAoTGlzdClvYmo7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgb2JqQXJyYXkgPSBsLnRvQXJyYXkobmV3IE9iamVjdFtsLnNpemUoKV0p Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGNscyA9IG51bGw7DQo+ID4gKyAgICAgICAgICAg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgIG9iakFycmF5ID0gb2JqOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgIGNscyA9IG9iakFycmF5LmdldENsYXNzKCkuZ2V0Q29t cG9uZW50VHlwZSgpOw0KPiA+ICsgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAg ICAgaW50IGxlbiA9IEFycmF5LmdldExlbmd0aChvYmpBcnJheSk7DQo+ID4gKyAgICAgICAgICAg ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGxlbjsgeCsrKSB7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgT2JqZWN0IG8gPSBBcnJheS5nZXQob2JqQXJyYXksIHgpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgIEpBWEJDb250ZXh0IGNvbnRleHQgPQ0KPiA+IGdldEpBWEJDb250ZXh0KG8uZ2V0 Q2xhc3MoKSk7ICsgICAgICAgICAgICAgICAgICAgIE1hcnNoYWxsZXINCj4gPiBtYXJzaGFsbGVy ID0gY29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCk7ICsgICAgICAgICAgICAgICAgICAgDQo+ID4g bWFyc2hhbGxlci5zZXRQcm9wZXJ0eShNYXJzaGFsbGVyLkpBWEJfRlJBR01FTlQsIHRydWUpOyAr ICAgDQo+ICAgICAgICAgICANCj4gPiAgICAgICBtYXJzaGFsbGVyLm1hcnNoYWwobmV3IEpBWEJF bGVtZW50KG5ldyBRTmFtZShudWxsLA0KPiA+IG8uZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkp LCArICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KPiAgICAgICAgICAgDQo+ID4gICAgICAg ICAgICAgICAgIGNscyA9PSBudWxsID8gby5nZXRDbGFzcygpIDogY2xzLCBvKSwgb3MpOyANCj4g KyAgICAgICAgICANCj4gPiAgICAgIH0NCj4gPiArICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiAr ICAgICAgICAgICAgICAgIEpBWEJDb250ZXh0IGNvbnRleHQgPSANCj4gZ2V0SkFYQkNvbnRleHQo b2JqLmdldENsYXNzKCkpOw0KPiA+ICsgICAgICAgICAgICAgICAgTWFyc2hhbGxlciBtYXJzaGFs bGVyID0gY29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCk7DQo+ID4gKyAgICAgICAgICAgICAgICBt YXJzaGFsbGVyLnNldFByb3BlcnR5KE1hcnNoYWxsZXIuSkFYQl9GUkFHTUVOVCwNCj4gPiB0cnVl KTsgKyAgICAgICAgICAgICAgICBtYXJzaGFsbGVyLm1hcnNoYWwob2JqLCBvcyk7DQo+ID4gKyAg ICAgICAgICAgIH0NCj4gPiArICAgICAgICB9IGNhdGNoIChKQVhCRXhjZXB0aW9uIGUpIHsNCj4g PiArICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCj4gPiArICAgICAgICB9DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcHJpdmF0ZSBKQVhCQ29udGV4dCBnZXRKQVhCQ29udGV4 dChDbGFzcyB0eXBlKSB0aHJvd3MNCj4gPiBKQVhCRXhjZXB0aW9uIHsgKyAgICAgICAgc3luY2hy b25pemVkIChqYXhiQ29udGV4dHMpIHsNCj4gPiArICAgICAgICAgICAgSkFYQkNvbnRleHQgY29u dGV4dCA9IGpheGJDb250ZXh0cy5nZXQodHlwZSk7DQo+ID4gKyAgICAgICAgICAgIGlmIChjb250 ZXh0ID09IG51bGwpIHsNCj4gPiArICAgICAgICAgICAgICAgIGNvbnRleHQgPSBKQVhCQ29udGV4 dC5uZXdJbnN0YW5jZSh0eXBlKTsNCj4gPiArICAgICAgICAgICAgICAgIGpheGJDb250ZXh0cy5w dXQodHlwZSwgY29udGV4dCk7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAg cmV0dXJuIGNvbnRleHQ7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICt9DQo+IA0K PiANCj4gDQo+IC0tIA0KPiBKLiBEYW5pZWwgS3VscA0KPiBQcmluY2lwYWwgRW5naW5lZXINCj4g SU9OQQ0KPiBQOiA3ODEtOTAyLTg3MjcgICAgQzogNTA4LTM4MC03MTk0DQo+IGRhbmllbC5rdWxw QGlvbmEuY29tDQo+IGh0dHA6Ly93d3cuZGFua3VscC5jb20vYmxvZw0KPiANCgotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCklPTkEgVGVjaG5vbG9naWVzIFBMQyAocmVnaXN0ZXJlZCBpbiBJ cmVsYW5kKQpSZWdpc3RlcmVkIE51bWJlcjogMTcxMzg3ClJlZ2lzdGVyZWQgQWRkcmVzczogVGhl IElPTkEgQnVpbGRpbmcsIFNoZWxib3VybmUgUm9hZCwgRHVibGluIDQsIElyZWxhbmQK