Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 897BB200B72 for ; Fri, 12 Aug 2016 03:00:41 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 87FB0160A93; Fri, 12 Aug 2016 01:00:41 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 54728160A94 for ; Fri, 12 Aug 2016 03:00:40 +0200 (CEST) Received: (qmail 69070 invoked by uid 500); 12 Aug 2016 01:00:39 -0000 Mailing-List: contact user-help@flink.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@flink.apache.org Delivered-To: mailing list user@flink.apache.org Received: (qmail 69054 invoked by uid 99); 12 Aug 2016 01:00:39 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Aug 2016 01:00:39 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id DC6AFC0455 for ; Fri, 12 Aug 2016 01:00:38 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.202 X-Spam-Level: X-Spam-Status: No, score=-4.202 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001] autolearn=disabled Received: from mx2-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id HWqhFRj7ug0f for ; Fri, 12 Aug 2016 01:00:35 +0000 (UTC) Received: from smtp-us.alcatel-lucent.com (us-hpatc-esg-01.alcatel-lucent.com [135.245.18.27]) by mx2-lw-eu.apache.org (ASF Mail Server at mx2-lw-eu.apache.org) with ESMTPS id 9437A5F255 for ; Fri, 12 Aug 2016 01:00:34 +0000 (UTC) Received: from us70tumx1.dmz.alcatel-lucent.com (unknown [135.245.18.13]) by Websense Email Security Gateway with ESMTPS id DB335CC904094 for ; Fri, 12 Aug 2016 01:00:22 +0000 (GMT) Received: from us70tusmtp1.zam.alcatel-lucent.com (us70tusmtp1.zam.alcatel-lucent.com [135.5.2.63]) by us70tumx1.dmz.alcatel-lucent.com (GMO) with ESMTP id u7C10Q5R023453 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 12 Aug 2016 01:00:26 GMT Received: from US70TWXCHHUB04.zam.alcatel-lucent.com (us70twxchhub04.zam.alcatel-lucent.com [135.5.2.36]) by us70tusmtp1.zam.alcatel-lucent.com (GMO) with ESMTP id u7C10OYb009498 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL) for ; Fri, 12 Aug 2016 01:00:26 GMT Received: from US70UWXCHMBA06.zam.alcatel-lucent.com ([169.254.11.242]) by US70TWXCHHUB04.zam.alcatel-lucent.com ([135.5.2.36]) with mapi id 14.03.0195.001; Thu, 11 Aug 2016 21:00:24 -0400 From: "Ramanan, Buvana (Nokia - US)" To: "user@flink.apache.org" Subject: RE: flink - Working with State example Thread-Topic: flink - Working with State example Thread-Index: AQHR80JUGHVPxzwAuEqPUWb0QYkK/qBDxq8A///7FwCAAE77gIAABnoA///BXBCAAEwMgIAAM1Bw Date: Fri, 12 Aug 2016 01:00:23 +0000 Message-ID: References: <71912535-B430-49EF-ACCA-4DCFBC40B7A0@data-artisans.com> <4AD4FEE0-F058-49E8-B92E-9F9B9C364F28@data-artisans.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [135.5.27.16] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 archived-at: Fri, 12 Aug 2016 01:00:41 -0000 S29zdGFzLA0KR29vZCBjYXRjaCEgVGhhdCBtYWtlcyBpdCB3b3JraW5nISBUaGFuayB5b3Ugc28g bXVjaCBmb3IgdGhlIGhlbHAuDQpSZWdhcmRzLA0KQnV2YW5hDQoNCi0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQpGcm9tOiBLb3N0YXMgS2xvdWRhcyBbbWFpbHRvOmsua2xvdWRhc0BkYXRhLWFy dGlzYW5zLmNvbV0gDQpTZW50OiBUaHVyc2RheSwgQXVndXN0IDExLCAyMDE2IDExOjIyIEFNDQpU bzogdXNlckBmbGluay5hcGFjaGUub3JnDQpTdWJqZWN0OiBSZTogZmxpbmsgLSBXb3JraW5nIHdp dGggU3RhdGUgZXhhbXBsZQ0KDQpIaSBCdXZhbmEsIA0KDQpBdCBhIGZpcnN0IGdsYW5jZSwgeW91 ciBzbmFwc2hvdFN0YXRlKCkgc2hvdWxkIHJldHVybiBhIERvdWJsZS4NCg0KS29zdGFzDQoNCj4g T24gQXVnIDExLCAyMDE2LCBhdCA0OjU3IFBNLCBSYW1hbmFuLCBCdXZhbmEgKE5va2lhIC0gVVMp IDxidXZhbmEucmFtYW5hbkBub2tpYS1iZWxsLWxhYnMuY29tPiB3cm90ZToNCj4gDQo+IFRoYW5r IHlvdSBLb3N0YXMgJiBVZnVrLiBJIGdldCBpbnRvIHRoZSBmb2xsb3dpbmcgY29tcGlsYXRpb24g ZXJyb3Igd2hlbiBJIHVzZSBjaGVja3BvaW50ZWQgaW50ZXJmYWNlLiBQYXN0aW5nIHRoZSBjb2Rl ICYgbWVzc2FnZSBhcyBmb2xsb3dzOg0KPiANCj4gSXMgdGhlIFNlcmlhbGl6YWJsZSBkZWZpbml0 aW9uIHN1cHBvc2VkIHRvIGJlIGZyb20gamF2YS5pby5TZXJpYWxpemFibGUgb3Igc29tZXdoZXJl IGVsc2U/DQo+IA0KPiBUaGFua3MgYWdhaW4sDQo+IEJ1dmFuYQ0KPiANCj4gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gQ29kZToN Cj4gDQo+IGltcG9ydCBvcmcuYXBhY2hlLmZsaW5rLmFwaS5jb21tb24uZnVuY3Rpb25zLkZsYXRN YXBGdW5jdGlvbjsNCj4gaW1wb3J0IG9yZy5hcGFjaGUuZmxpbmsuYXBpLmNvbW1vbi5mdW5jdGlv bnMuTWFwRnVuY3Rpb247DQo+IGltcG9ydCBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5hcGku Y2hlY2twb2ludC5DaGVja3BvaW50ZWQ7DQo+IGltcG9ydCBvcmcuYXBhY2hlLmZsaW5rLmNvbmZp Z3VyYXRpb24uQ29uZmlndXJhdGlvbjsNCj4gaW1wb3J0IG9yZy5hcGFjaGUuZmxpbmsuYXBpLmNv bW1vbi50eXBlaW5mby5UeXBlSW5mb3JtYXRpb247DQo+IGltcG9ydCBvcmcuYXBhY2hlLmZsaW5r LmFwaS5jb21tb24udHlwZWluZm8uVHlwZUhpbnQ7DQo+IGltcG9ydCBvcmcuYXBhY2hlLmZsaW5r LmFwaS5jb21tb24uZnVuY3Rpb25zLlJpY2hGbGF0TWFwRnVuY3Rpb247DQo+IA0KPiBpbXBvcnQg amF2YS5pby5TZXJpYWxpemFibGU7DQo+IGltcG9ydCBvcmcuYXBhY2hlLmZsaW5rLmFwaS5qYXZh LnR1cGxlLlR1cGxlMjsNCj4gaW1wb3J0IG9yZy5hcGFjaGUuZmxpbmsuc3RyZWFtaW5nLmFwaS5k YXRhc3RyZWFtLkRhdGFTdHJlYW07DQo+IGltcG9ydCBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWlu Zy5hcGkuZGF0YXN0cmVhbS5EYXRhU3RyZWFtU291cmNlOw0KPiBpbXBvcnQgDQo+IG9yZy5hcGFj aGUuZmxpbmsuc3RyZWFtaW5nLmFwaS5lbnZpcm9ubWVudC5TdHJlYW1FeGVjdXRpb25FbnZpcm9u bWVudDsNCj4gaW1wb3J0IA0KPiBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5jb25uZWN0b3Jz LmthZmthLkZsaW5rS2Fma2FDb25zdW1lcjA5Ow0KPiBpbXBvcnQgDQo+IG9yZy5hcGFjaGUuZmxp bmsuc3RyZWFtaW5nLnV0aWwuc2VyaWFsaXphdGlvbi5TaW1wbGVTdHJpbmdTY2hlbWE7DQo+IGlt cG9ydCBvcmcuYXBhY2hlLmZsaW5rLnV0aWwuQ29sbGVjdG9yOw0KPiANCj4gaW1wb3J0IGphdmEu dXRpbC5Qcm9wZXJ0aWVzOw0KPiANCj4gLyoqDQo+ICogQ3JlYXRlZCBieSBidXZhbmEgb24gOC85 LzE2Lg0KPiAqLw0KPiBwdWJsaWMgY2xhc3Mgc3RhdGVmdWwgew0KPiAgICBwcml2YXRlIHN0YXRp YyBTdHJpbmcgSU5QVVRfS0FGS0FfVE9QSUMgPSBudWxsOw0KPiAtLS0NCj4gLS0tIHNraXBwaW5n IHRoZSBtYWluIGFzIGl04oCZcyB0aGUgc2FtZSBhcyBiZWZvcmUgZXhjZXB0IGZvciBjbGFzcyBu YW1lIA0KPiBjaGFuZ2UgLS0tLS0tLS0tLS0tLQ0KPiAtLS0NCj4gCXB1YmxpYyBzdGF0aWMgY2xh c3MgTWFwU3RhdGVmdWwgZXh0ZW5kcyBSaWNoRmxhdE1hcEZ1bmN0aW9uPFN0cmluZywgVHVwbGUy PFN0cmluZywgRG91YmxlPj4NCj4gICAgICAgICAgICBpbXBsZW1lbnRzIENoZWNrcG9pbnRlZDxE b3VibGU+IHsNCj4gDQo+ICAgICAgICBwcml2YXRlIERvdWJsZSBwcmV2X3R1cGxlID0gbnVsbDsN Cj4gDQo+ICAgICAgICBAT3ZlcnJpZGUNCj4gICAgICAgIHB1YmxpYyB2b2lkIGZsYXRNYXAoU3Ry aW5nIGluY1N0cmluZywgQ29sbGVjdG9yPFR1cGxlMjxTdHJpbmcsIERvdWJsZT4+IG91dCkgew0K PiAgICAgICAgICAgIHRyeSB7DQo+ICAgICAgICAgICAgICAgIERvdWJsZSB2YWx1ZSA9IERvdWJs ZS5wYXJzZURvdWJsZShpbmNTdHJpbmcpOw0KPiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnBy aW50bG4oInZhbHVlID0gIiArIHZhbHVlKTsNCj4gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5w cmludGxuKHByZXZfdHVwbGUpOw0KPiANCj4gICAgICAgICAgICAgICAgRG91YmxlIHZhbHVlMiA9 IHZhbHVlIC0gcHJldl90dXBsZTsNCj4gICAgICAgICAgICAgICAgcHJldl90dXBsZSA9IHZhbHVl Ow0KPiANCj4gICAgICAgICAgICAgICAgVHVwbGUyPFN0cmluZywgRG91YmxlPiB0cCA9IG5ldyBU dXBsZTI8U3RyaW5nLCBEb3VibGU+KCk7DQo+ICAgICAgICAgICAgICAgIHRwLnNldEZpZWxkKElO UFVUX0tBRktBX1RPUElDLCAwKTsNCj4gICAgICAgICAgICAgICAgdHAuc2V0RmllbGQodmFsdWUy LCAxKTsNCj4gICAgICAgICAgICAgICAgb3V0LmNvbGxlY3QodHApOw0KPiAgICAgICAgICAgIH0g Y2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7DQo+ICAgICAgICAgICAgICAgIFN5c3Rl bS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNvbnZlcnQgdG8gRmxvYXQiICsgaW5jU3RyaW5nKTsN Cj4gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDb3VsZCBub3QgY29udmVydCB0 byBGbG9hdCIgKyBpbmNTdHJpbmcpOw0KPiAgICAgICAgICAgIH0NCj4gICAgICAgIH0NCj4gICAg ICAgIEBPdmVycmlkZQ0KPiAgICAgICAgcHVibGljIHZvaWQgb3BlbihDb25maWd1cmF0aW9uIGNv bmZpZykgew0KPiAgICAgICAgICAgIGlmIChwcmV2X3R1cGxlID09IG51bGwpIHsNCj4gICAgICAg ICAgICAgICAgLy8gb25seSByZWNyZWF0ZSBpZiBudWxsDQo+ICAgICAgICAgICAgICAgIC8vIHJl c3RvcmVTdGF0ZSB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgb3BlbigpDQo+ICAgICAgICAgICAgICAg IC8vIHNvIHRoaXMgd2lsbCBhbHJlYWR5IHNldCB0aGUgc3VtIHRvIHRoZSByZXN0b3JlZCB2YWx1 ZQ0KPiAgICAgICAgICAgICAgICBwcmV2X3R1cGxlID0gbmV3IERvdWJsZSgiMC4wIik7DQo+ICAg ICAgICAgICAgfQ0KPiAgICAgICAgfQ0KPiANCj4gICAgICAgIEBPdmVycmlkZQ0KPiAgICAgICAg cHVibGljIFNlcmlhbGl6YWJsZSBzbmFwc2hvdFN0YXRlKA0KPiAgICAgICAgICAgICAgICBsb25n IGNoZWNrcG9pbnRJZCwNCj4gICAgICAgICAgICAgICAgbG9uZyBjaGVja3BvaW50VGltZXN0YW1w KSB0aHJvd3MgRXhjZXB0aW9uIHsNCj4gICAgICAgICAgICByZXR1cm4gcHJldl90dXBsZTsNCj4g ICAgICAgIH0NCj4gDQo+IA0KPiAgICAgICAgQE92ZXJyaWRlDQo+ICAgICAgICBwdWJsaWMgdm9p ZCByZXN0b3JlU3RhdGUoRG91YmxlIHN0YXRlKSB7DQo+ICAgICAgICAgICAgcHJldl90dXBsZSA9 IHN0YXRlOw0KPiAgICAgICAgfQ0KPiAgICB9DQo+IH0NCj4gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiBFUlJPUiBtZXNzYWdlIHdo aWxlIGJ1aWxkaW5nOg0KPiANCj4gJCBtdm4gY2xlYW4gcGFja2FnZQ0KPiBbSU5GT10gU2Nhbm5p bmcgZm9yIHByb2plY3RzLi4uDQo+IFtJTkZPXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCj4gW0lORk9dIA0K PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+IC0tIFtJTkZPXSBCdWlsZGluZyBGbGluayBRdWlja3N0YXJ0IEpv YiAwLjEgW0lORk9dIA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IC0tIFtXQVJOSU5HXSBUaGUgYXJ0aWZh Y3Qgb3JnLmFwYWNoZS5jb21tb25zOmNvbW1vbnMtaW86amFyOjEuMy4yIGhhcyANCj4gYmVlbiBy ZWxvY2F0ZWQgdG8gY29tbW9ucy1pbzpjb21tb25zLWlvOmphcjoxLjMuMiBbSU5GT10gW0lORk9d IC0tLSANCj4gbWF2ZW4tY2xlYW4tcGx1Z2luOjIuNTpjbGVhbiAoZGVmYXVsdC1jbGVhbikgQCB3 aWtpLWVkaXRzIC0tLSBbSU5GT10gDQo+IERlbGV0aW5nIC9ob21lL2J1dmFuYS9mbGluay9mbGlu ay0xLjEuMC93aWtpLWVkaXRzL3RhcmdldA0KPiBbSU5GT10NCj4gW0lORk9dIC0tLSBtYXZlbi1y ZXNvdXJjZXMtcGx1Z2luOjIuMzpyZXNvdXJjZXMgKGRlZmF1bHQtcmVzb3VyY2VzKSBAIA0KPiB3 aWtpLWVkaXRzIC0tLSBbSU5GT10gVXNpbmcgJ1VURi04JyBlbmNvZGluZyB0byBjb3B5IGZpbHRl cmVkIHJlc291cmNlcy4NCj4gW0lORk9dIENvcHlpbmcgMSByZXNvdXJjZQ0KPiBbSU5GT10NCj4g W0lORk9dIC0tLSBtYXZlbi1jb21waWxlci1wbHVnaW46My4xOmNvbXBpbGUgKGRlZmF1bHQtY29t cGlsZSkgQCANCj4gd2lraS1lZGl0cyAtLS0gW0lORk9dIENoYW5nZXMgZGV0ZWN0ZWQgLSByZWNv bXBpbGluZyB0aGUgbW9kdWxlIQ0KPiBbSU5GT10gQ29tcGlsaW5nIDcgc291cmNlIGZpbGVzIHRv IA0KPiAvaG9tZS9idXZhbmEvZmxpbmsvZmxpbmstMS4xLjAvd2lraS1lZGl0cy90YXJnZXQvY2xh c3Nlcw0KPiBbSU5GT10gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBbRVJST1JdIENPTVBJTEFUSU9OIEVSUk9SIDogDQo+IFtJ TkZPXSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQo+IFtFUlJPUl0gDQo+IC9ob21lL2J1dmFuYS9mbGluay9mbGluay0xLjEuMC93 aWtpLWVkaXRzL3NyYy9tYWluL2phdmEvd2lraWVkaXRzL3N0YXQNCj4gZWZ1bC5qYXZhOlsxMTYs MTldIHdpa2llZGl0cy5zdGF0ZWZ1bC5NYXBTdGF0ZWZ1bCBpcyBub3QgYWJzdHJhY3QgYW5kIA0K PiBkb2VzIG5vdCBvdmVycmlkZSBhYnN0cmFjdCBtZXRob2Qgc25hcHNob3RTdGF0ZShsb25nLGxv bmcpIGluIA0KPiBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5hcGkuY2hlY2twb2ludC5DaGVj a3BvaW50ZWQNCj4gW0VSUk9SXSANCj4gL2hvbWUvYnV2YW5hL2ZsaW5rL2ZsaW5rLTEuMS4wL3dp a2ktZWRpdHMvc3JjL21haW4vamF2YS93aWtpZWRpdHMvc3RhdA0KPiBlZnVsLmphdmE6WzE1MSwy OV0gc25hcHNob3RTdGF0ZShsb25nLGxvbmcpIGluIA0KPiB3aWtpZWRpdHMuc3RhdGVmdWwuTWFw U3RhdGVmdWwgY2Fubm90IGltcGxlbWVudCANCj4gc25hcHNob3RTdGF0ZShsb25nLGxvbmcpIGlu IA0KPiBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5hcGkuY2hlY2twb2ludC5DaGVja3BvaW50 ZWQNCj4gIHJldHVybiB0eXBlIGphdmEuaW8uU2VyaWFsaXphYmxlIGlzIG5vdCBjb21wYXRpYmxl IHdpdGggDQo+IGphdmEubGFuZy5Eb3VibGUgW0VSUk9SXSANCj4gL2hvbWUvYnV2YW5hL2ZsaW5r L2ZsaW5rLTEuMS4wL3dpa2ktZWRpdHMvc3JjL21haW4vamF2YS93aWtpZWRpdHMvc3RhdA0KPiBl ZnVsLmphdmE6WzE1MCw5XSBtZXRob2QgZG9lcyBub3Qgb3ZlcnJpZGUgb3IgaW1wbGVtZW50IGEg bWV0aG9kIGZyb20gDQo+IGEgc3VwZXJ0eXBlIFtJTkZPXSAzIGVycm9ycyBbSU5GT10gDQo+IC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gW0lORk9dIA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IC0tDQo+IFtJTkZPXSBCVUlMRCBGQUlM VVJFDQo+IFtJTkZPXSANCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAtLQ0KPiBbSU5GT10gVG90YWwgdGlt ZTogMi4xNzFzDQo+IFtJTkZPXSBGaW5pc2hlZCBhdDogVGh1IEF1ZyAxMSAxMDo0NzowNyBFRFQg MjAxNiBbSU5GT10gRmluYWwgTWVtb3J5OiANCj4gMjZNLzY2ME0gW0lORk9dIA0KPiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQo+IC0tIFtFUlJPUl0gRmFpbGVkIHRvIGV4ZWN1dGUgZ29hbCANCj4gb3JnLmFwYWNo ZS5tYXZlbi5wbHVnaW5zOm1hdmVuLWNvbXBpbGVyLXBsdWdpbjozLjE6Y29tcGlsZSAoZGVmYXVs dC1jb21waWxlKSBvbiBwcm9qZWN0IHdpa2ktZWRpdHM6IENvbXBpbGF0aW9uIGZhaWx1cmU6IENv bXBpbGF0aW9uIGZhaWx1cmU6DQo+IFtFUlJPUl0gDQo+IC9ob21lL2J1dmFuYS9mbGluay9mbGlu ay0xLjEuMC93aWtpLWVkaXRzL3NyYy9tYWluL2phdmEvd2lraWVkaXRzL3N0YXQNCj4gZWZ1bC5q YXZhOlsxMTYsMTldIHdpa2llZGl0cy5zdGF0ZWZ1bC5NYXBTdGF0ZWZ1bCBpcyBub3QgYWJzdHJh Y3QgYW5kIA0KPiBkb2VzIG5vdCBvdmVycmlkZSBhYnN0cmFjdCBtZXRob2Qgc25hcHNob3RTdGF0 ZShsb25nLGxvbmcpIGluIA0KPiBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5hcGkuY2hlY2tw b2ludC5DaGVja3BvaW50ZWQNCj4gW0VSUk9SXSANCj4gL2hvbWUvYnV2YW5hL2ZsaW5rL2ZsaW5r LTEuMS4wL3dpa2ktZWRpdHMvc3JjL21haW4vamF2YS93aWtpZWRpdHMvc3RhdA0KPiBlZnVsLmph dmE6WzE1MSwyOV0gc25hcHNob3RTdGF0ZShsb25nLGxvbmcpIGluIA0KPiB3aWtpZWRpdHMuc3Rh dGVmdWwuTWFwU3RhdGVmdWwgY2Fubm90IGltcGxlbWVudCANCj4gc25hcHNob3RTdGF0ZShsb25n LGxvbmcpIGluIA0KPiBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5hcGkuY2hlY2twb2ludC5D aGVja3BvaW50ZWQNCj4gW0VSUk9SXSByZXR1cm4gdHlwZSBqYXZhLmlvLlNlcmlhbGl6YWJsZSBp cyBub3QgY29tcGF0aWJsZSB3aXRoIA0KPiBqYXZhLmxhbmcuRG91YmxlIFtFUlJPUl0gDQo+IC9o b21lL2J1dmFuYS9mbGluay9mbGluay0xLjEuMC93aWtpLWVkaXRzL3NyYy9tYWluL2phdmEvd2lr aWVkaXRzL3N0YXQNCj4gZWZ1bC5qYXZhOlsxNTAsOV0gbWV0aG9kIGRvZXMgbm90IG92ZXJyaWRl IG9yIGltcGxlbWVudCBhIG1ldGhvZCBmcm9tIA0KPiBhIHN1cGVydHlwZSBbRVJST1JdIC0+IFtI ZWxwIDFdIFtFUlJPUl0gW0VSUk9SXSBUbyBzZWUgdGhlIGZ1bGwgc3RhY2sgdHJhY2Ugb2YgdGhl IGVycm9ycywgcmUtcnVuIE1hdmVuIHdpdGggdGhlIC1lIHN3aXRjaC4NCj4gW0VSUk9SXSBSZS1y dW4gTWF2ZW4gdXNpbmcgdGhlIC1YIHN3aXRjaCB0byBlbmFibGUgZnVsbCBkZWJ1ZyBsb2dnaW5n Lg0KPiBbRVJST1JdDQo+IFtFUlJPUl0gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVy cm9ycyBhbmQgcG9zc2libGUgc29sdXRpb25zLCBwbGVhc2UgcmVhZCB0aGUgZm9sbG93aW5nIGFy dGljbGVzOg0KPiBbRVJST1JdIFtIZWxwIDFdIA0KPiBodHRwOi8vY3dpa2kuYXBhY2hlLm9yZy9j b25mbHVlbmNlL2Rpc3BsYXkvTUFWRU4vTW9qb0ZhaWx1cmVFeGNlcHRpb24NCj4gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gDQo+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEtvc3RhcyBLbG91ZGFzIFttYWls dG86ay5rbG91ZGFzQGRhdGEtYXJ0aXNhbnMuY29tXQ0KPiBTZW50OiBUaHVyc2RheSwgQXVndXN0 IDExLCAyMDE2IDEwOjM0IEFNDQo+IFRvOiB1c2VyQGZsaW5rLmFwYWNoZS5vcmcNCj4gU3ViamVj dDogUmU6IGZsaW5rIC0gV29ya2luZyB3aXRoIFN0YXRlIGV4YW1wbGUNCj4gDQo+IEV4YWN0bHkg YXMgVWZ1ayBzdWdnZXN0ZWQsIGlmIHlvdSBhcmUgbm90IGdyb3VwaW5nIHlvdXIgc3RyZWFtIGJ5 IGtleSwgeW91IHNob3VsZCB1c2UgdGhlIGNoZWNrcG9pbnRlZCBpbnRlcmZhY2UuDQo+IA0KPiBU aGUgcmVhc29uIEkgYXNrZWQgYmVmb3JlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGtleUJ5KCkgaXMg YmVjYXVzZSB0aGlzIGlzIHRoZSBvbmUgdGhhdCBpbXBsaWNpdGx5IHNldHMgdGhlIGtleVNlcmlh bGl6ZXIgYW5kIHNjb3BlcyB5b3VyIChrZXllZCkgc3RhdGUgdG8gYSBzcGVjaWZpYyBrZXkuDQo+ IA0KPiBJZiB0aGVyZSBpcyBubyBrZXlpbmcsIHRoZW4ga2V5ZWQgc3RhdGUgY2Fubm90IGJlIHVz ZWQgYW5kIHRoZSBDaGVja3BvaW50ZWQgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQu IA0KPiANCj4gTGV0IHVzIGtub3cgaWYgeW91IG5lZWQgYW55dGhpbmcgZWxzZS4NCj4gDQo+IEtv c3Rhcw0KPiANCj4+IE9uIEF1ZyAxMSwgMjAxNiwgYXQgNDoxMCBQTSwgVWZ1ayBDZWxlYmkgPHVj ZUBhcGFjaGUub3JnPiB3cm90ZToNCj4+IA0KPj4gVGhpcyBvbmx5IHdvcmtzIGZvciBrZXllZCBz dHJlYW1zLCB5b3UgaGF2ZSB0byB1c2Uga2V5QnkoKS4NCj4+IA0KPj4gWW91IGNhbiB1c2UgdGhl IENoZWNrcG9pbnRlZCBpbnRlcmZhY2UgaW5zdGVhZCANCj4+IChodHRwczovL2NpLmFwYWNoZS5v cmcvcHJvamVjdHMvZmxpbmsvZmxpbmstZG9jcy1tYXN0ZXIvYXBpcy9zdHJlYW1pbmcvc3RhdGUu aHRtbCNjaGVja3BvaW50aW5nLWluc3RhbmNlLWZpZWxkcykuDQo+PiANCj4+IE9uIFRodSwgQXVn IDExLCAyMDE2IGF0IDM6MzUgUE0sIFJhbWFuYW4sIEJ1dmFuYSAoTm9raWEgLSBVUykgDQo+PiA8 YnV2YW5hLnJhbWFuYW5Abm9raWEtYmVsbC1sYWJzLmNvbT4gd3JvdGU6DQo+Pj4gSGkgS29zdGFz LA0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+IEhlcmUgaXMgbXkgY29kZS4gQWxsIEkgYW0gdHJ5aW5n IHRvIGNvbXB1dGUgaXMgKHhbdF0g4oCTIHhbdC0xXSksIA0KPj4+IHdoZXJlIHhbdF0gaXMgdGhl IGN1cnJlbnQgdmFsdWUgb2YgdGhlIGluY29taW5nIHNhbXBsZSBhbmQgeFt0LTFdIGlzIA0KPj4+ IHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2FtcGxlLiBJIHN0b3JlIHRoZSBj dXJyZW50IHZhbHVlIA0KPj4+IGluIHN0YXRlIHN0b3JlDQo+Pj4gKOKAmHByZXZfdHVwbGXigJkp IHNvIHRoYXQgSSBjYW4gdXNlIGl0IGZvciBjb21wdXRhdGlvbiBpbiBuZXh0IGN5Y2xlLiANCj4+ PiBBcyB5b3UgbWF5IG9ic2VydmUsIEkgYW0gbm90IHVzaW5nIGtleUJ5LiBJIGFtIHNpbXBseSBw cmludGluZyBvdXQgDQo+Pj4gdGhlIHJlc3VsdGFudCB0dXBsZS4NCj4+PiANCj4+PiANCj4+PiAN Cj4+PiBJdCBhcHBlYXJzIGZyb20gdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBJIGhhdmUgdG8gc2V0 IHRoZSBrZXkgDQo+Pj4gc2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IHZhbHVlIHNlcmlhbGl6ZXIp IGZvciB0aGUgc3RhdGUgc3RvcmUuIEkgYW0gDQo+Pj4gbm90IHN1cmUgaG93IHRvIGRvIHRoYXTi gKYNCj4+PiANCj4+PiANCj4+PiANCj4+PiBUaGFua3MgZm9yIHlvdXIgaW50ZXJlc3QgaW4gaGVs cGluZywNCj4+PiANCj4+PiANCj4+PiANCj4+PiANCj4+PiANCj4+PiBSZWdhcmRzLA0KPj4+IA0K Pj4+IEJ1dmFuYQ0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+IHB1YmxpYyBjbGFzcyBzdGF0ZWZ1bCB7 DQo+Pj4gDQo+Pj4gICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5QVVRfS0FGS0FfVE9QSUMgPSBu dWxsOw0KPj4+IA0KPj4+ICAgcHJpdmF0ZSBzdGF0aWMgaW50IFRJTUVfV0lORE9XID0gMDsNCj4+ PiANCj4+PiANCj4+PiANCj4+PiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFy Z3MpIHRocm93cyBFeGNlcHRpb24gew0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+ICAgICAgIGlmIChh cmdzLmxlbmd0aCA8IDIpIHsNCj4+PiANCj4+PiAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxB cmd1bWVudEV4Y2VwdGlvbigiVGhlIGFwcGxpY2F0aW9uIG5lZWRzIA0KPj4+IHR3byBhcmd1bWVu dHMuIFRoZSBmaXJzdCBpcyB0aGUgbmFtZSBvZiB0aGUga2Fma2EgdG9waWMgZnJvbSB3aGljaCBp dCBoYXMgdG8gXG4iDQo+Pj4gDQo+Pj4gICAgICAgICAgICAgICAgICAgKyAiZmV0Y2ggdGhlIGRh dGEuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHNpemUgDQo+Pj4gb2YgdGhlIHdpbmRvdywg aW4gc2Vjb25kcywgdG8gd2hpY2ggdGhlIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIG11c3QgYmUgYXBw bGllZC4NCj4+PiBcbiIpOw0KPj4+IA0KPj4+ICAgICAgIH0NCj4+PiANCj4+PiANCj4+PiANCj4+ PiAgICAgICBJTlBVVF9LQUZLQV9UT1BJQyA9IGFyZ3NbMF07DQo+Pj4gDQo+Pj4gICAgICAgVElN RV9XSU5ET1cgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOw0KPj4+IA0KPj4+IA0KPj4+IA0K Pj4+ICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IG51bGw7DQo+Pj4gDQo+Pj4gDQo+Pj4g DQo+Pj4gICAgICAgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7DQo+Pj4gDQo+Pj4gICAg ICAgcHJvcGVydGllcy5zZXRQcm9wZXJ0eSgiYm9vdHN0cmFwLnNlcnZlcnMiLCAibG9jYWxob3N0 OjkwOTIiKTsNCj4+PiANCj4+PiAgICAgICBwcm9wZXJ0aWVzLnNldFByb3BlcnR5KCJ6b29rZWVw ZXIuY29ubmVjdCIsICJsb2NhbGhvc3Q6MjE4MSIpOw0KPj4+IA0KPj4+ICAgICAgIHByb3BlcnRp ZXMuc2V0UHJvcGVydHkoImdyb3VwLmlkIiwgInRlc3QiKTsNCj4+PiANCj4+PiANCj4+PiANCj4+ PiAgICAgICBTdHJlYW1FeGVjdXRpb25FbnZpcm9ubWVudCBlbnYgPSANCj4+PiBTdHJlYW1FeGVj dXRpb25FbnZpcm9ubWVudC5nZXRFeGVjdXRpb25FbnZpcm9ubWVudCgpOw0KPj4+IA0KPj4+ICAg ICAgIC8vZW52LnNldFN0YXRlQmFja2VuZChuZXcNCj4+PiBGc1N0YXRlQmFja2VuZCgiZmlsZTov L2hvbWUvYnV2YW5hL2ZsaW5rL2NoZWNrcG9pbnRzIikpOw0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+ ICAgICAgIERhdGFTdHJlYW1Tb3VyY2U8U3RyaW5nPiBzdHJlYW0gPSBlbnYNCj4+PiANCj4+PiAg ICAgICAgICAgICAgIC5hZGRTb3VyY2UobmV3DQo+Pj4gRmxpbmtLYWZrYUNvbnN1bWVyMDk8PihJ TlBVVF9LQUZLQV9UT1BJQywgbmV3IFNpbXBsZVN0cmluZ1NjaGVtYSgpLCANCj4+PiBwcm9wZXJ0 aWVzKSk7DQo+Pj4gDQo+Pj4gDQo+Pj4gDQo+Pj4gICAgICAgLy8gbWFwcyB0aGUgZGF0YSBpbnRv IEZsaW5rIHR1cGxlcw0KPj4+IA0KPj4+ICAgICAgIERhdGFTdHJlYW08VHVwbGUyPFN0cmluZyxE b3VibGU+PiBzdHJlYW1UdXBsZXMgPSANCj4+PiBzdHJlYW0uZmxhdE1hcChuZXcgUmVjMlR1cGxl MigpKTsNCj4+PiANCj4+PiANCj4+PiANCj4+PiAgICAgICAvLyB3cml0ZSB0aGUgcmVzdWx0IHRv IHRoZSBjb25zb2xlIG9yIGluIGEgS2Fma2EgdG9waWMNCj4+PiANCj4+PiAgICAgICBzdHJlYW1U dXBsZXMucHJpbnQoKTsNCj4+PiANCj4+PiANCj4+PiANCj4+PiAgICAgICBlbnYuZXhlY3V0ZSgi cGx1cyBvbmUiKTsNCj4+PiANCj4+PiANCj4+PiANCj4+PiAgIH0NCj4+PiANCj4+PiANCj4+PiAN Cj4+PiAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVjMlR1cGxlMiBleHRlbmRzIFJpY2hGbGF0TWFw RnVuY3Rpb248U3RyaW5nLCANCj4+PiBUdXBsZTI8U3RyaW5nLERvdWJsZT4gPiB7DQo+Pj4gDQo+ Pj4gICAgICAgcHJpdmF0ZSB0cmFuc2llbnQgVmFsdWVTdGF0ZTxUdXBsZTI8U3RyaW5nLCBEb3Vi bGU+PiANCj4+PiBwcmV2X3R1cGxlOw0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+ICAgICAgIEBPdmVy cmlkZQ0KPj4+IA0KPj4+ICAgICAgIHB1YmxpYyB2b2lkIGZsYXRNYXAoU3RyaW5nIGluY1N0cmlu ZywgQ29sbGVjdG9yPFR1cGxlMjxTdHJpbmcsDQo+Pj4gRG91YmxlPj4gb3V0KSB0aHJvd3MgRXhj ZXB0aW9uIHsNCj4+PiANCj4+PiAgICAgICAgICAgdHJ5IHsNCj4+PiANCj4+PiAgICAgICAgICAg ICAgIERvdWJsZSB2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZShpbmNTdHJpbmcpOw0KPj4+IA0K Pj4+ICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2YWx1ZSA9ICIgKyB2YWx1ZSk7 DQo+Pj4gDQo+Pj4gICAgICAgICAgICAgICBUdXBsZTI8U3RyaW5nLCBEb3VibGU+IHByZXZfc3Rv cmVkX3RwID0gDQo+Pj4gcHJldl90dXBsZS52YWx1ZSgpOw0KPj4+IA0KPj4+ICAgICAgICAgICAg ICAgU3lzdGVtLm91dC5wcmludGxuKHByZXZfc3RvcmVkX3RwKTsNCj4+PiANCj4+PiANCj4+PiAN Cj4+PiAgICAgICAgICAgICAgIERvdWJsZSB2YWx1ZTIgPSB2YWx1ZSAtIHByZXZfc3RvcmVkX3Rw LmYxOw0KPj4+IA0KPj4+ICAgICAgICAgICAgICAgcHJldl9zdG9yZWRfdHAuZjEgPSB2YWx1ZTsN Cj4+PiANCj4+PiAgICAgICAgICAgICAgIHByZXZfc3RvcmVkX3RwLmYwID0gSU5QVVRfS0FGS0Ff VE9QSUM7DQo+Pj4gDQo+Pj4gICAgICAgICAgICAgICBwcmV2X3R1cGxlLnVwZGF0ZShwcmV2X3N0 b3JlZF90cCk7DQo+Pj4gDQo+Pj4gDQo+Pj4gDQo+Pj4gICAgICAgICAgICAgICBUdXBsZTI8U3Ry aW5nLCBEb3VibGU+IHRwID0gbmV3IFR1cGxlMjxTdHJpbmcsDQo+Pj4gRG91YmxlPigpOw0KPj4+ IA0KPj4+ICAgICAgICAgICAgICAgdHAuc2V0RmllbGQoSU5QVVRfS0FGS0FfVE9QSUMsIDApOw0K Pj4+IA0KPj4+ICAgICAgICAgICAgICAgdHAuc2V0RmllbGQodmFsdWUyLCAxKTsNCj4+PiANCj4+ PiAgICAgICAgICAgICAgIG91dC5jb2xsZWN0KHRwKTsNCj4+PiANCj4+PiANCj4+PiANCj4+PiAg ICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsNCj4+PiANCj4+PiAg ICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNvbnZlcnQgdG8gRmxv YXQiICsgDQo+Pj4gaW5jU3RyaW5nKTsNCj4+PiANCj4+PiAgICAgICAgICAgICAgIFN5c3RlbS5l cnIucHJpbnRsbigiQ291bGQgbm90IGNvbnZlcnQgdG8gRmxvYXQiICsgDQo+Pj4gaW5jU3RyaW5n KTsNCj4+PiANCj4+PiAgICAgICAgICAgfQ0KPj4+IA0KPj4+ICAgICAgIH0NCj4+PiANCj4+PiAN Cj4+PiANCj4+PiAgICAgICBAT3ZlcnJpZGUNCj4+PiANCj4+PiAgICAgICBwdWJsaWMgdm9pZCBv cGVuKENvbmZpZ3VyYXRpb24gY29uZmlnKSB7DQo+Pj4gDQo+Pj4gICAgICAgICAgIFZhbHVlU3Rh dGVEZXNjcmlwdG9yPFR1cGxlMjxTdHJpbmcsIERvdWJsZT4+IGRlc2NyaXB0b3IgPQ0KPj4+IA0K Pj4+ICAgICAgICAgICAgICAgICAgIG5ldyBWYWx1ZVN0YXRlRGVzY3JpcHRvcjw+KA0KPj4+IA0K Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZXZpb3VzIGlucHV0IHZhbHVlIiwgLy8g dGhlIHN0YXRlIG5hbWUNCj4+PiANCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJ bmZvcm1hdGlvbi5vZihuZXcgDQo+Pj4gVHlwZUhpbnQ8VHVwbGUyPFN0cmluZywNCj4+PiBEb3Vi bGU+PigpIHt9KSwgLy8gdHlwZSBpbmZvcm1hdGlvbg0KPj4+IA0KPj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgVHVwbGUyLm9mKCJ0ZXN0IHRvcGljIiwgMC4wKSk7IC8vIGRlZmF1bHQgDQo+ Pj4gdmFsdWUgb2YgdGhlIHN0YXRlLCBpZiBub3RoaW5nIHdhcyBzZXQNCj4+PiANCj4+PiAgICAg ICAgICAgcHJldl90dXBsZSA9IGdldFJ1bnRpbWVDb250ZXh0KCkuZ2V0U3RhdGUoZGVzY3JpcHRv cik7DQo+Pj4gDQo+Pj4gICAgICAgfQ0KPj4+IA0KPj4+ICAgfQ0KPj4+IA0KPj4+IH0NCj4+PiAN Cj4+PiANCj4+PiANCj4+PiBGcm9tOiBLb3N0YXMgS2xvdWRhcyBbbWFpbHRvOmsua2xvdWRhc0Bk YXRhLWFydGlzYW5zLmNvbV0NCj4+PiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDExLCAyMDE2IDU6 NDUgQU0NCj4+PiBUbzogdXNlckBmbGluay5hcGFjaGUub3JnDQo+Pj4gU3ViamVjdDogUmU6IGZs aW5rIC0gV29ya2luZyB3aXRoIFN0YXRlIGV4YW1wbGUNCj4+PiANCj4+PiANCj4+PiANCj4+PiBI ZWxsbyBCdXZhbmEsDQo+Pj4gDQo+Pj4gDQo+Pj4gDQo+Pj4gQ2FuIHlvdSBzaGFyZSBhIGJpdCBt b3JlIGRldGFpbHMgb24geW91ciBvcGVyYXRvciBhbmQgaG93IHlvdSBhcmUgdXNpbmcgaXQ/DQo+ Pj4gDQo+Pj4gRm9yIGV4YW1wbGUsIGFyZSB5b3UgdXNpbmcga2V5QnkgYmVmb3JlIHVzaW5nIHlv dSBjdXN0b20gb3BlcmF0b3I/DQo+Pj4gDQo+Pj4gDQo+Pj4gDQo+Pj4gVGhhbmtzIGEgbG90LA0K Pj4+IA0KPj4+IEtvc3Rhcw0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+IE9uIEF1ZyAxMCwgMjAxNiwg YXQgMTA6MDMgUE0sIFJhbWFuYW4sIEJ1dmFuYSAoTm9raWEgLSBVUykgDQo+Pj4gPGJ1dmFuYS5y YW1hbmFuQG5va2lhLWJlbGwtbGFicy5jb20+IHdyb3RlOg0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+ IEhlbGxvLA0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+IEkgYW0gdXRpbGl6aW5nIHRoZSBjb2RlIHNu aXBwZXQgaW46DQo+Pj4gaHR0cHM6Ly9jaS5hcGFjaGUub3JnL3Byb2plY3RzL2ZsaW5rL2ZsaW5r LWRvY3MtbWFzdGVyL2FwaXMvc3RyZWFtaW4NCj4+PiBnIC9zdGF0ZS5odG1sIGFuZCBwYXJ0aWN1 bGFybHkg4oCYb3BlbuKAmSBmdW5jdGlvbiBpbiBteSBjb2RlOg0KPj4+IA0KPj4+IEBPdmVycmlk ZQ0KPj4+IA0KPj4+ICAgcHVibGljIHZvaWQgb3BlbihDb25maWd1cmF0aW9uIGNvbmZpZykgew0K Pj4+IA0KPj4+ICAgICAgIFZhbHVlU3RhdGVEZXNjcmlwdG9yPFR1cGxlMjxMb25nLCBMb25nPj4g ZGVzY3JpcHRvciA9DQo+Pj4gDQo+Pj4gICAgICAgICAgICAgICBuZXcgVmFsdWVTdGF0ZURlc2Ny aXB0b3I8PigNCj4+PiANCj4+PiAgICAgICAgICAgICAgICAgICAgICAgImF2ZXJhZ2UiLCAvLyB0 aGUgc3RhdGUgbmFtZQ0KPj4+IA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICBUeXBlSW5mb3Jt YXRpb24ub2YobmV3IFR5cGVIaW50PFR1cGxlMjxMb25nLA0KPj4+IExvbmc+PigpIHt9KSwgLy8g dHlwZSBpbmZvcm1hdGlvbg0KPj4+IA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICBUdXBsZTIu b2YoMEwsIDBMKSk7IC8vIGRlZmF1bHQgdmFsdWUgb2YgdGhlIA0KPj4+IHN0YXRlLCBpZiBub3Ro aW5nIHdhcyBzZXQNCj4+PiANCj4+PiAgICAgICBzdW0gPSBnZXRSdW50aW1lQ29udGV4dCgpLmdl dFN0YXRlKGRlc2NyaXB0b3IpOw0KPj4+IA0KPj4+ICAgfQ0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+ IFdoZW4gSSBydW4sIEkgZ2V0IHRoZSBmb2xsb3dpbmcgZXJyb3I6DQo+Pj4gDQo+Pj4gQ2F1c2Vk IGJ5OiBqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbjogRXJyb3Igd2hpbGUgZ2V0dGluZyBzdGF0 ZQ0KPj4+IA0KPj4+ICAgICAgICAgICAgICBhdA0KPj4+IG9yZy5hcGFjaGUuZmxpbmsuc3RyZWFt aW5nLmFwaS5vcGVyYXRvcnMuU3RyZWFtaW5nUnVudGltZUNvbnRleHQuZ2V0DQo+Pj4gUw0KPj4+ IHRhdGUoU3RyZWFtaW5nUnVudGltZUNvbnRleHQuamF2YToxMjApDQo+Pj4gDQo+Pj4gICAgICAg ICAgICAgIGF0DQo+Pj4gd2lraWVkaXRzLnN0YXRlZnVsJFJlYzJUdXBsZTIub3BlbihzdGF0ZWZ1 bC5qYXZhOjEwMykNCj4+PiANCj4+PiAgICAgICAgICAgICAgYXQNCj4+PiBvcmcuYXBhY2hlLmZs aW5rLmFwaS5jb21tb24uZnVuY3Rpb25zLnV0aWwuRnVuY3Rpb25VdGlscy5vcGVuRnVuY3Rpbw0K Pj4+IG4NCj4+PiAoRnVuY3Rpb25VdGlscy5qYXZhOjM4KQ0KPj4+IA0KPj4+ICAgICAgICAgICAg ICBhdA0KPj4+IG9yZy5hcGFjaGUuZmxpbmsuc3RyZWFtaW5nLmFwaS5vcGVyYXRvcnMuQWJzdHJh Y3RVZGZTdHJlYW1PcGVyYXRvci5vDQo+Pj4gcA0KPj4+IGVuKEFic3RyYWN0VWRmU3RyZWFtT3Bl cmF0b3IuamF2YTo5MSkNCj4+PiANCj4+PiAgICAgICAgICAgICAgYXQNCj4+PiBvcmcuYXBhY2hl LmZsaW5rLnN0cmVhbWluZy5hcGkub3BlcmF0b3JzLlN0cmVhbUZsYXRNYXAub3BlbihTdHJlYW1G bA0KPj4+IGENCj4+PiB0TWFwLmphdmE6NDEpDQo+Pj4gDQo+Pj4gICAgICAgICAgICAgIGF0DQo+ Pj4gb3JnLmFwYWNoZS5mbGluay5zdHJlYW1pbmcucnVudGltZS50YXNrcy5TdHJlYW1UYXNrLm9w ZW5BbGxPcGVyYXRvcnMNCj4+PiAoDQo+Pj4gU3RyZWFtVGFzay5qYXZhOjMxNCkNCj4+PiANCj4+ PiAgICAgICAgICAgICAgYXQNCj4+PiBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5ydW50aW1l LnRhc2tzLlN0cmVhbVRhc2suaW52b2tlKFN0cmVhbVRhcw0KPj4+IGsNCj4+PiAuamF2YToyMTQp DQo+Pj4gDQo+Pj4gICAgICAgICAgICAgIGF0DQo+Pj4gb3JnLmFwYWNoZS5mbGluay5ydW50aW1l LnRhc2ttYW5hZ2VyLlRhc2sucnVuKFRhc2suamF2YTo1NTkpDQo+Pj4gDQo+Pj4gICAgICAgICAg ICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0NSkNCj4+PiANCj4+PiBD YXVzZWQgYnk6IGphdmEubGFuZy5FeGNlcHRpb246IFN0YXRlIGtleSBzZXJpYWxpemVyIGhhcyBu b3QgYmVlbiANCj4+PiBjb25maWd1cmVkIGluIHRoZSBjb25maWcuIFRoaXMgb3BlcmF0aW9uIGNh bm5vdCB1c2UgcGFydGl0aW9uZWQgc3RhdGUuDQo+Pj4gDQo+Pj4gICAgICAgICAgICAgIGF0DQo+ Pj4gb3JnLmFwYWNoZS5mbGluay5ydW50aW1lLnN0YXRlLkFic3RyYWN0U3RhdGVCYWNrZW5kLmdl dFBhcnRpdGlvbmVkU3QNCj4+PiBhDQo+Pj4gdGUoQWJzdHJhY3RTdGF0ZUJhY2tlbmQuamF2YTox OTkpDQo+Pj4gDQo+Pj4gICAgICAgICAgICAgIGF0DQo+Pj4gb3JnLmFwYWNoZS5mbGluay5zdHJl YW1pbmcuYXBpLm9wZXJhdG9ycy5BYnN0cmFjdFN0cmVhbU9wZXJhdG9yLmdldFANCj4+PiBhDQo+ Pj4gcnRpdGlvbmVkU3RhdGUoQWJzdHJhY3RTdHJlYW1PcGVyYXRvci5qYXZhOjI2MCkNCj4+PiAN Cj4+PiAgICAgICAgICAgICAgYXQNCj4+PiBvcmcuYXBhY2hlLmZsaW5rLnN0cmVhbWluZy5hcGku b3BlcmF0b3JzLlN0cmVhbWluZ1J1bnRpbWVDb250ZXh0LmdldA0KPj4+IFMNCj4+PiB0YXRlKFN0 cmVhbWluZ1J1bnRpbWVDb250ZXh0LmphdmE6MTE4KQ0KPj4+IA0KPj4+ICAgICAgICAgICAgICAu Li4gOCBtb3JlDQo+Pj4gDQo+Pj4gDQo+Pj4gDQo+Pj4gV2hlcmUgZG8gSSBkZWZpbmUgdGhlIGtl eSAmIHZhbHVlIHNlcmlhbGl6ZXIgZm9yIHN0YXRlPw0KPj4+IA0KPj4+IA0KPj4+IA0KPj4+IFRo YW5rcywNCj4+PiANCj4+PiBCdXZhbmENCj4+PiANCj4+PiANCj4gDQoNCg==