Return-Path: X-Original-To: apmail-mahout-user-archive@www.apache.org Delivered-To: apmail-mahout-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B001DE202 for ; Tue, 19 Feb 2013 09:09:27 +0000 (UTC) Received: (qmail 5259 invoked by uid 500); 19 Feb 2013 09:09:26 -0000 Delivered-To: apmail-mahout-user-archive@mahout.apache.org Received: (qmail 5062 invoked by uid 500); 19 Feb 2013 09:09:22 -0000 Mailing-List: contact user-help@mahout.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@mahout.apache.org Delivered-To: mailing list user@mahout.apache.org Received: (qmail 5042 invoked by uid 99); 19 Feb 2013 09:09:21 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 19 Feb 2013 09:09:21 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of Mihai.Josan@iquestgroup.com designates 194.117.242.182 as permitted sender) Received: from [194.117.242.182] (HELO iquestgroup.com) (194.117.242.182) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 19 Feb 2013 09:09:16 +0000 Received: from CJ-CO-EXCH-V002.esp.local (10.123.100.103) by smtp1.iquestgroup.com (10.120.99.55) with Microsoft SMTP Server (TLS) id 14.2.342.3; Tue, 19 Feb 2013 11:08:52 +0200 Received: from CJ-CO-EXCH-V003.esp.local ([fe80::193f:7aa8:47bf:1e80]) by CJ-CO-EXCH-V002.esp.local ([::1]) with mapi id 14.02.0342.003; Tue, 19 Feb 2013 11:08:54 +0200 From: Mihai Josan To: "user@mahout.apache.org" Subject: RE: RE: how to use a custom distance measure with kmeans? Thread-Topic: RE: how to use a custom distance measure with kmeans? Thread-Index: Ac4OgL09R4lS6Jb2RTC2tPhpF9wOnw== Date: Tue, 19 Feb 2013 09:08:54 +0000 Message-ID: <48DB8D4C108CE04381D291CF1A4133050C7D6CF4@CJ-CO-EXCH-V003.esp.local> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.123.2.44] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org SGVsbG8sDQoNCkkgbWFuYWdlZCB0byByZXNvbHZlIHRoZSBwcm9ibGVtIHdpdGhvdXQgbW9kaWZ5 aW5nIHRoZSBNYWhvdXQgc2NyaXB0Lg0KSSBpbnNlcnRlZCBteSBjbGFzc2VzIGludG8gdGhlIG1h aG91dCBqb2IgamFyICAobWFob3V0LWV4YW1wbGVzLTAuNy1jZGg0LjEuMi1qb2IuamFyKSBhbmQg ZXZlcnl0aGluZyBpcyBvayBub3cuDQoNClRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHlvdXIgaGVs cCwNCk1paGFpIEpvc2FuDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBNaWhh aSBKb3NhbiBbbWFpbHRvOk1paGFpLkpvc2FuQGlxdWVzdGdyb3VwLmNvbV0gDQpTZW50OiBUaHVy c2RheSwgRmVicnVhcnkgMTQsIDIwMTMgNjowNSBQTQ0KVG86IHVzZXJAbWFob3V0LmFwYWNoZS5v cmcNClN1YmplY3Q6IFsgTm9uIGlRdWVzdCA6IGNvdWxkIGJlIEp1bmsgXSBSRTogaG93IHRvIHVz ZSBhIGN1c3RvbSBkaXN0YW5jZSBtZWFzdXJlIHdpdGgga21lYW5zPw0KDQpJIG1vZGlmaWVkIGxp bmUgMjUxIGxpa2UgdGhpczogZXhwb3J0IEhBRE9PUF9DTEFTU1BBVEg9JE1BSE9VVF9DT05GX0RJ Ujoke0hBRE9PUF9DTEFTU1BBVEh9OiRDTEFTU1BBVEgNCk5vdyBJIGRvbid0IGhhdmUgdGhlIENs YXNzIG5vdCBmb3VuZCBleGNlcHRpb24gYnV0IEkgZ2V0OiAgRXJyb3I6IGphdmEubGFuZy5DbGFz c05vdEZvdW5kRXhjZXB0aW9uOiBvcmcuYXBhY2hlLm1haG91dC5tYXRoLlZlY3Rvcg0KDQpJIGZv dW5kIGEgYmlnIGRpc2N1c3Npb24gcmVnYXJkaW5nIHRoaXMgZXJyb3IgYXQgaHR0cDovL21haWwt YXJjaGl2ZXMuYXBhY2hlLm9yZy9tb2RfbWJveC9tYWhvdXQtdXNlci8yMDExMDUubWJveC9icm93 c2VyIGNhbGxlZCBUaGUgcGVyZW5uaWFsICJFcnJvcjogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRF eGNlcHRpb246IG9yZy5hcGFjaGUubWFob3V0Lm1hdGguVmVjdG9yIiBwcm9ibGVtIEF0IHRoaXMg bW9tZW50IEkgYW0gc3RpbGwgbG9va2luZyBmb3Igc29sdXRpb25zIHRvIHRoaXMgcHJvYmxlbS4g DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBEYW4gRmlsaW1vbiBbbWFpbHRv OmRhbmdlb3JnZS5maWxpbW9uQGdtYWlsLmNvbV0NClNlbnQ6IFRodXJzZGF5LCBGZWJydWFyeSAx NCwgMjAxMyAxMjoyNSBQTQ0KVG86IHVzZXJAbWFob3V0LmFwYWNoZS5vcmcNClN1YmplY3Q6IFJl OiBob3cgdG8gdXNlIGEgY3VzdG9tIGRpc3RhbmNlIG1lYXN1cmUgd2l0aCBrbWVhbnM/DQoNCkkg Y2FuIHRoaW5rIG9mIG9ubHkgMiBwb3NzaWJpbGl0aWVzOg0KDQotIGluIHRoZSBzY3JpcHQsIEkg dGhpbmsgaXQgZ29lcyB0aHJvdWdoIHRoZSBpZiBzdGF0ZW1lbnRzIHRvIGxpbmUgMjUxIHdoZXJl IHRoZSBIQURPT1BfQ0xBU1NQQVRIIGlzIGJlaW5nIHNldDsgdGhhdCBsaW5lIGRpZmZlcnMgZnJv bSBsaW5lDQoyNDMgd2hlcmUgdGhlIENMQVNTUEFUSCB5b3Ugc2V0IGFsc28gZ2V0cyBhZGRlZC4g U28sIGl0IHNlZW1zIHRoYXQgdGhlIENMQVNTUEFUSCB5b3Ugc2V0IGlzbid0IGJlaW5nIHBhc3Nl ZCB0byBoYWRvb3AuIEZyb20gdGhlIGxvb2sgb2YgeW91ciBleGVjIHRoaXMgc2VlbXMgdG8gYmUg dGhlIGNhc2UuDQpUbyBmaXggaXQsIGFkZCA6JENMQVNTUEFUSCBhdCB0aGUgZW5kIG9mIGxpbmUg MjUxLg0KDQotIHRoZSBjbGFzcyB5b3UncmUgcmVmZXJyaW5nIGlzbid0IGZ1bGx5IHNwZWNpZmll ZCAoYnV0IHRoaXMgbG9va3MgdW5saWtlbHkpLg0KDQpJJ20gbm90IHN1cmUgd2h5IHRoZSBtYWhv dXQgc2NyaXB0IGhhcyB0aG9zZSBjYXNlcyBzdGFydGluZyBhdCBsaW5lDQoyMzkgKGVzcGVjaWFs bHkgc2luY2UgdGhleSBhcmUgdW5kb2N1bWVudGVkKS4NCg0KTGV0IHVzIGtub3cgaWYgaXQgd29y a3MhDQoNCk9uIFdlZCwgRmViIDEzLCAyMDEzIGF0IDY6MTggUE0sIE1paGFpIEpvc2FuIDxNaWhh aS5Kb3NhbkBpcXVlc3Rncm91cC5jb20+IHdyb3RlOg0KPiBIZWxsbywNCj4NCj4gQWZ0ZXIgSSBt YWRlIHRoZSBjaGFuZ2VzLCBJIHN0aWxsIGdldCB0aGUgQ2xhc3Mgbm90IGZvdW5kIGV4Y2VwdGlv bi4gSSBjcmVhdGVkIG15IHByb2plY3QgdXNpbmcgbWF2ZW4gYW5kIGVjbGlwc2UgYW5kIHRoZSBq YXIgaXMgZ2VuZXJhdGVkIGZyb20gZWNsaXBzZSBleHBvcnQgamFyLiBEbyB5b3UgaGF2ZSBhbnkg b3RoZXIgaWRlYSBob3cgdG8gcmVzb2x2ZSB0aGlzIHByb2JsZW0/DQo+DQo+IG1haG91dCBrbWVh bnMgLWkgL3VzZXIvcmhhZG9vcC9tYWhvdXQvYWJhYy1vdXQvc2VxdWVuY2UgIFwNCj4gICAgICAg IC1jICAvdXNlci9yaGFkb29wL21haG91dC9hYmFjLW91dC9jYW5vcHktY2VudHJvaWRzL2NsdXN0 ZXJzLTAgXA0KPiAgICAgICAgLW8gIC91c2VyL3JoYWRvb3AvbWFob3V0L2FiYWMtb3V0L2NsdXN0 ZXJzLW91dC8gXA0KPiAgICAgICAgLXggMTAgXA0KPiAgICAgICAgLWRtIGNsdXN0ZXJpbmcuQWJh Y0Rpc3RhbmNlTWVhc3VyZSBcDQo+ICAgICAgICAtb3cNCj4NCj4gKipob3cgdGhlICRDTEFTU1BB VEggbG9va3MgYWZ0ZXIgbGluZSAxMjA6DQo+IENMQVNTUEFUSCAgIC91c3IvbGliL3Nxb29wL3Bv c3RncmVzcWwtOS4yLTEwMDIuamRiYzQuamFyOi9ldGMvbWFob3V0L2NvbmYuZGlzdDovdXNyL2xp Yi9tYWhvdXQvbGliL2FiYWNEaXN0YW5jZS5qYXINCj4NCj4gTUFIT1VUX0xPQ0FMIGlzIG5vdCBz ZXQ7IGFkZGluZyBIQURPT1BfQ09ORl9ESVIgdG8gY2xhc3NwYXRoLg0KPiBSdW5uaW5nIG9uIGhh ZG9vcCwgdXNpbmcgL3Vzci9saWIvaGFkb29wL2Jpbi9oYWRvb3AgYW5kIA0KPiBIQURPT1BfQ09O Rl9ESVI9L2V0Yy9oYWRvb3AvY29uZg0KPiBNQUhPVVQtSk9COiAvdXNyL2xpYi9tYWhvdXQvbWFo b3V0LWV4YW1wbGVzLTAuNy1jZGg0LjEuMi1qb2IuamFyDQo+IEhBRE9PUF9DTEFTU1BBVEggICAv ZXRjL21haG91dC9jb25mLmRpc3Q6L3Vzci9saWIvbWFob3V0L21haG91dC1leGFtcGxlcy0qLWpv Yi5qYXI6L3Vzci9saWIvaGFkb29wLTAuMjAtbWFwcmVkdWNlL2NvbnRyaWIvc3RyZWFtaW5nL2hh ZG9vcC1zdHJlYW1pbmctMi4wLjAtbXIxLWNkaDQuMS4yLmphcg0KPg0KPiAqKiB0aGUgZXhlYyBj b21tYW5kOg0KPiBDTUQ6IC91c3IvbGliL2hhZG9vcC9iaW4vaGFkb29wIGphcg0KPiAvdXNyL2xp Yi9tYWhvdXQvbWFob3V0LWV4YW1wbGVzLTAuNy1jZGg0LjEuMi1qb2IuamFyDQo+IG9yZy5hcGFj aGUubWFob3V0LmRyaXZlci5NYWhvdXREcml2ZXIga21lYW5zIC1pIA0KPiAvdXNlci9yaGFkb29w L21haG91dC9hYmFjLW91dC9zZXF1ZW5jZSAtYw0KPiAvdXNlci9yaGFkb29wL21haG91dC9hYmFj LW91dC9jYW5vcHktY2VudHJvaWRzL2NsdXN0ZXJzLTAgLW8gDQo+IC91c2VyL3JoYWRvb3AvbWFo b3V0L2FiYWMtb3V0L2NsdXN0ZXJzLW91dC8gLXggMTAgLWRtIA0KPiBjbHVzdGVyaW5nLkFiYWNE aXN0YW5jZU1lYXN1cmUgLW93DQo+DQo+IDEzLzAyLzEzIDE3OjU5OjA4IElORk8gY29tbW9uLkFi c3RyYWN0Sm9iOiBDb21tYW5kIGxpbmUgYXJndW1lbnRzOiANCj4gey0tY2x1c3RlcnM9Wy91c2Vy L3JoYWRvb3AvbWFob3V0L2FiYWMtb3V0L2Nhbm9weS1jZW50cm9pZHMvY2x1c3RlcnMtMF0sIC0t Y29udmVyZ2VuY2VEZWx0YT1bMC41XSwgLS1kaXN0YW5jZU1lYXN1cmU9W2NsdXN0ZXJpbmcuQWJh Y0Rpc3RhbmNlTWVhc3VyZV0sIC0tZW5kUGhhc2U9WzIxNDc0ODM2NDddLCAtLWlucHV0PVsvdXNl ci9yaGFkb29wL21haG91dC9hYmFjLW91dC9zZXF1ZW5jZV0sIC0tbWF4SXRlcj1bMTBdLCAtLW1l dGhvZD1bbWFwcmVkdWNlXSwgLS1vdXRwdXQ9Wy91c2VyL3JoYWRvb3AvbWFob3V0L2FiYWMtb3V0 L2NsdXN0ZXJzLW91dC9dLCAtLW92ZXJ3cml0ZT1udWxsLCAtLXN0YXJ0UGhhc2U9WzBdLCAtLXRl bXBEaXI9W3RlbXBdfSBFeGNlcHRpb24gaW4gdGhyZWFkICJtYWluIiBqYXZhLmxhbmcuSWxsZWdh bFN0YXRlRXhjZXB0aW9uOiBqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogY2x1c3Rl cmluZy5BYmFjRGlzdGFuY2VNZWFzdXJlDQo+ICAgICAgICAgYXQgb3JnLmFwYWNoZS5tYWhvdXQu Y29tbW9uLkNsYXNzVXRpbHMuaW5zdGFudGlhdGVBcyhDbGFzc1V0aWxzLmphdmE6MzApDQo+ICAg ICAgICAgYXQgb3JnLmFwYWNoZS5tYWhvdXQuY2x1c3RlcmluZy5rbWVhbnMuS01lYW5zRHJpdmVy LnJ1bihLTWVhbnNEcml2ZXIuamF2YTo5MikNCj4gICAgICAgICBhdCBvcmcuYXBhY2hlLmhhZG9v cC51dGlsLlRvb2xSdW5uZXIucnVuKFRvb2xSdW5uZXIuamF2YTo3MCkNCj4gICAgICAgICBhdCBv cmcuYXBhY2hlLm1haG91dC5jbHVzdGVyaW5nLmttZWFucy5LTWVhbnNEcml2ZXIubWFpbihLTWVh bnNEcml2ZXIuamF2YTo0OSkNCj4gICAgICAgICBhdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RB Y2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQ0KPiAgICAgICAgIGF0IHN1bi5yZWZs ZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJ bXBsLmphdmE6MzkpDQo+ICAgICAgICAgYXQgc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFj Y2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5qYXZhOjI1KQ0K PiAgICAgICAgIGF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6 NTk3KQ0KPiAgICAgICAgIGF0IG9yZy5hcGFjaGUuaGFkb29wLnV0aWwuUHJvZ3JhbURyaXZlciRQ cm9ncmFtRGVzY3JpcHRpb24uaW52b2tlKFByb2dyYW1Ecml2ZXIuamF2YTo3MikNCj4gICAgICAg ICBhdCBvcmcuYXBhY2hlLmhhZG9vcC51dGlsLlByb2dyYW1Ecml2ZXIuZHJpdmVyKFByb2dyYW1E cml2ZXIuamF2YToxNDQpDQo+ICAgICAgICAgYXQgb3JnLmFwYWNoZS5tYWhvdXQuZHJpdmVyLk1h aG91dERyaXZlci5tYWluKE1haG91dERyaXZlci5qYXZhOjE5NSkNCj4gICAgICAgICBhdCBzdW4u cmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0aG9kKQ0K PiAgICAgICAgIGF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2Uo TmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmphdmE6MzkpDQo+ICAgICAgICAgYXQgc3VuLnJlZmxl Y3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFj Y2Vzc29ySW1wbC5qYXZhOjI1KQ0KPiAgICAgICAgIGF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhv ZC5pbnZva2UoTWV0aG9kLmphdmE6NTk3KQ0KPiAgICAgICAgIGF0IG9yZy5hcGFjaGUuaGFkb29w LnV0aWwuUnVuSmFyLm1haW4oUnVuSmFyLmphdmE6MjA4KQ0KPiBDYXVzZWQgYnk6IGphdmEubGFu Zy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBjbHVzdGVyaW5nLkFiYWNEaXN0YW5jZU1lYXN1cmUN Cj4gICAgICAgICBhdCBqYXZhLm5ldC5VUkxDbGFzc0xvYWRlciQxLnJ1bihVUkxDbGFzc0xvYWRl ci5qYXZhOjIwMikNCj4gICAgICAgICBhdCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXIu ZG9Qcml2aWxlZ2VkKE5hdGl2ZSBNZXRob2QpDQo+ICAgICAgICAgYXQgamF2YS5uZXQuVVJMQ2xh c3NMb2FkZXIuZmluZENsYXNzKFVSTENsYXNzTG9hZGVyLmphdmE6MTkwKQ0KPiAgICAgICAgIGF0 IGphdmEubGFuZy5DbGFzc0xvYWRlci5sb2FkQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTozMDYpDQo+ ICAgICAgICAgYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmxvYWRDbGFzcyhDbGFzc0xvYWRlci5q YXZhOjI0NykNCj4gICAgICAgICBhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1l dGhvZCkNCj4gICAgICAgICBhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjE2 OSkNCj4gICAgICAgICBhdCBvcmcuYXBhY2hlLm1haG91dC5jb21tb24uQ2xhc3NVdGlscy5pbnN0 YW50aWF0ZUFzKENsYXNzVXRpbHMuamF2YToyOCkNCj4gICAgICAgICAuLi4gMTUgbW9yZQ0KPg0K PiBUaGFuayB5b3UsDQo+IE1paGFpIEpvc2FuDQo+DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IERhbiBGaWxpbW9uIFttYWlsdG86ZGFuZ2VvcmdlLmZpbGltb25AZ21haWwu Y29tXQ0KPiBTZW50OiBXZWRuZXNkYXksIEZlYnJ1YXJ5IDEzLCAyMDEzIDE6MjUgUE0NCj4gVG86 IHVzZXJAbWFob3V0LmFwYWNoZS5vcmcNCj4gU3ViamVjdDogUmU6IGhvdyB0byB1c2UgYSBjdXN0 b20gZGlzdGFuY2UgbWVhc3VyZSB3aXRoIGttZWFucz8NCj4NCj4gU3VyZSwgdGhhdCBzb3VuZHMg bGlrZSBhbiBldmVyIGJldHRlciBzb2x1dGlvbiENCj4gSSBkaWRuJ3QgcmVhZCB0aGUgZW50aXJl IHNjcmlwdC4gOikNCj4NCj4gT24gV2VkLCBGZWIgMTMsIDIwMTMgYXQgNjo0MCBBTSwgTWFoZXNo IEJhbGlqYSA8YmFsaWphbWFoZXNoLm1jYUBnbWFpbC5jb20+IHdyb3RlOg0KPj4gSGkgRGFuLA0K Pj4NCj4+ICAgICAgICAgICAgICAgSWYgd2UgY29weSB0aGUgamFyIGNvbnRhaW5pbmcgdGhlIGN1 c3RvbSBjbGFzc2VzIHRvIHRoZSANCj4+IE1BSE9VVF9IT01FL2xpYiBmb2xkZXIgd29udCB0aGF0 IHdvcmsgZmluZT8NCj4+ICAgICAgICAgICAgICAgQmVjYXVzZSBhdCBsaW5lIDE0NyBvZiBtYWhv dXQgc2NyaXB0IGl0IHJlYWRzIGFsbCBqYXJzIA0KPj4gdW5kZXIgbGliIGZvbGRlciBhbmQgcHV0 IGludG8gY2xhc3NwYXRoLg0KPj4NCj4+ICAgICAgICAgICAgICAgSWYgdGhpcyB3b24ndCB3b3Jr IHByb2xseSB0aGVyZSBzaG91bGQgYmUgc29tZSBiZXR0ZXIgDQo+PiB3YXkgdG8gYWRkIHRoZSBj dXN0b20gY2xhc3NlcyB0byBjbGFzc3BhdGggcmF0aGVyIHRoYW4gdXNlcnMgDQo+PiBtb2RpZnlp bmcgdGhlIHNjcmlwdCBmaWxlLg0KPj4NCj4+IFRoYW5rcywNCj4+IE1haGVzaCBCYWxpamEsDQo+ PiBDYWxzb2Z0IExhYnMuDQo+Pg0KPj4gT24gVHVlLCBGZWIgMTIsIDIwMTMgYXQgMTA6MTggUE0s IERhbiBGaWxpbW9uDQo+PiA8ZGFuZ2VvcmdlLmZpbGltb25AZ21haWwuY29tPndyb3RlOg0KPj4N Cj4+PiBZb3UgbmVlZCB0byBhZGQgdGhlIEpBUiBjb250YWluaW5nIHRoZSBkaXN0YW5jZSBtZWFz dXJlIHlvdSB3YW50IHRvIA0KPj4+IHRoZSBjbGFzc3BhdGguDQo+Pj4gQnkgZGVmYXVsdCB0aGUg Q0xBU1NQQVRIIGlzIHNldCBpbiBsaW5lIDEyMCBvZiB0aGUgbWFob3V0IHNjcmlwdC4NCj4+PiAo dGhlIHNjcmlwdCBpdHNlbGYgaXMgaW4gdGhlIGJpbi8gZm9sZGVyIG9mIHlvdXIgTWFob3V0IGlu c3RhbGxhdGlvbikuDQo+Pj4NCj4+PiBTYWRseSBJIGRvbid0IHRoaW5rIHRoYXQgc2NyaXB0cyBh bGxvd3MgeW91IHRvIHNldCB0aGUgY2xhc3MgcGF0aCBieSANCj4+PiBkZWZhdWx0LCBidXQgaXQg c2hvdWxkIGJlIGEgc2ltcGxlIGFkZC4NCj4+PiBZb3UgY2FuIGVpdGhlcjoNCj4+PiBhLiBhZGQg dGhlIHBhdGggdG8geW91ciBKQVIvY2xhc3MgZm9sZGVyIG1hbnVhbGx5IGF0IGxpbmUgMTIwIGIu IA0KPj4+ICh0aGUgY2xlYW5lciB3YXkpIGFkZCBhIG5ldyB2YXJpYWJsZSBjYWxsZWQgc29tZXRo aW5nIGxpa2UgDQo+Pj4gTUFIT1VUX0VYVFJBX0NMQVNTUEFUSCB0byBsaW5lIDEyMCB3aGljaCB5 b3UgY2FuIHNldCB0byB3aGF0ZXZlciB5b3UgDQo+Pj4gbmVlZC4NCj4+Pg0KPj4+IGIuIGlzIGEg Yml0IGNsZWFuZXIsIGJ1dCB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIHNjcmlwdCBhbnl3YXkuDQo+ Pj4NCj4+PiBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgZGlzbGlrZSBmdWRnaW5nIHdpdGggdGhlIHNj cmlwdCB5b3UgY2FuIGhhdmUgYSANCj4+PiBjbG9zZXIgbG9vayBhdCBpdCBhbmQgc2VlIHRoYXQg cnVubmluZyAnbWFob3V0IGNsYXNzcGF0aCcgZ2l2ZXMgeW91IA0KPj4+IHRoZSBjbGFzc3BhdGgg aXQgYnVpbGRzLiBUaGVuIHlvdSBjYW4gcnVuIHRoZSBoYWRvb3Agc2NyaXB0IGRpcmVjdGx5IA0K Pj4+IGxpa2UgaW4gbGluZSAyNTIgb2YgdGhlIHNjcmlwdCBhbmQgZWRpdCB0aGUgSEFET09QX0NM QVNTUEFUSCAoc2VlIA0KPj4+IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzc5 OTY3OS9ob3ctdG8tcnVuLWEtaGFkb29wLXByb2dyYW0pLg0KPj4+DQo+Pj4gVGhpcyBzaG91bGQg cmVhbGx5IGJlIGJldHRlciBkb2N1bWVudGVkLiBTb3JyeSB5b3UncmUgaGF2aW5nIHRyb3VibGUh DQo+Pj4NCj4+PiBHb29kIGx1Y2shIDopDQo+Pj4NCj4+PiBPbiBUdWUsIEZlYiAxMiwgMjAxMyBh dCA2OjMwIFBNLCBNaWhhaSBKb3NhbiANCj4+PiA8TWloYWkuSm9zYW5AaXF1ZXN0Z3JvdXAuY29t PiB3cm90ZToNCj4+PiA+IFRoaXMgaXMgdGhlIGVycm9yIEkgcmVjZWl2ZToNCj4+PiA+DQo+Pj4g PiBtYWhvdXQga21lYW5zIC1pIC91c2VyL3JoYWRvb3AvaW4vc2VxdWVuY2UvIFwNCj4+PiA+PiAg ICAgICAgLWMgIC91c2VyL3JoYWRvb3Avb3V0L2Nhbm9weS1jZW50cm9pZHMvY2x1c3RlcnMtMCBc DQo+Pj4gPj4gICAgICAgIC1vICAvdXNlci9yaGFkb29wL291dC9jbHVzdGVycy1vdXQvIFwNCj4+ PiA+PiAgICAgICAgLXggMTAgXA0KPj4+ID4+ICAgICAgICAtZG0NCj4+PiAvaG9tZS9yaGFkb29w L3Byb2plY3RzL3dvcmtzcGFjZS9tYWhvdXRfYWJhYy90YXJnZXQvY2xhc3Nlcy9jbHVzdGVyaQ0K Pj4+IG4NCj4+PiBnL0FiYWNEaXN0YW5jZU1lYXN1cmUuY2xhc3MNCj4+PiA+DQo+Pj4gPiBNQUhP VVRfTE9DQUwgaXMgbm90IHNldDsgYWRkaW5nIEhBRE9PUF9DT05GX0RJUiB0byBjbGFzc3BhdGgu DQo+Pj4gPiBSdW5uaW5nIG9uIGhhZG9vcCwgdXNpbmcgL3Vzci9saWIvaGFkb29wL2Jpbi9oYWRv b3AgYW5kDQo+Pj4gSEFET09QX0NPTkZfRElSPS9ldGMvaGFkb29wL2NvbmYNCj4+PiA+IE1BSE9V VC1KT0I6IC91c3IvbGliL21haG91dC9tYWhvdXQtZXhhbXBsZXMtMC43LWNkaDQuMS4yLWpvYi5q YXINCj4+PiA+IDEzLzAyLzEyIDE3OjA1OjU3IElORk8gY29tbW9uLkFic3RyYWN0Sm9iOiBDb21t YW5kIGxpbmUgYXJndW1lbnRzOg0KPj4+IHstLWNsdXN0ZXJzPVsvdXNlci9yaGFkb29wL291dC9j YW5vcHktY2VudHJvaWRzL2NsdXN0ZXJzLTBdLA0KPj4+IC0tY29udmVyZ2VuY2VEZWx0YT1bMC41 XSwNCj4+PiAtLWRpc3RhbmNlTWVhc3VyZT1bL2hvbWUvcmhhZG9vcC9wcm9qZWN0cy93b3Jrc3Bh Y2UvbWFob3V0X2FiYWMvdGFyZw0KPj4+IGUgdC9jbGFzc2VzL2NsdXN0ZXJpbmcvQWJhY0Rpc3Rh bmNlTWVhc3VyZS5jbGFzc10sDQo+Pj4gLS1lbmRQaGFzZT1bMjE0NzQ4MzY0N10sIC0taW5wdXQ9 Wy91c2VyL3JoYWRvb3AvaW4vc2VxdWVuY2UvXSwNCj4+PiAtLW1heEl0ZXI9WzEwXSwgLS1tZXRo b2Q9W21hcHJlZHVjZV0sIA0KPj4+IC0tb3V0cHV0PVsvdXNlci9yaGFkb29wL291dC9jbHVzdGVy cy1vdXQyL10sIC0tc3RhcnRQaGFzZT1bMF0sIA0KPj4+IC0tdGVtcERpcj1bdGVtcF19DQo+Pj4g PiBFeGNlcHRpb24gaW4gdGhyZWFkICJtYWluIiBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0 aW9uOg0KPj4+IGphdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOg0KPj4+IC9ob21lL3Jo YWRvb3AvcHJvamVjdHMvd29ya3NwYWNlL21haG91dF9hYmFjL3RhcmdldC9jbGFzc2VzL2NsdXN0 ZXJpDQo+Pj4gbg0KPj4+IGcvQWJhY0Rpc3RhbmNlTWVhc3VyZS5jbGFzcw0KPj4+ID4gICAgICAg ICBhdA0KPj4+IG9yZy5hcGFjaGUubWFob3V0LmNvbW1vbi5DbGFzc1V0aWxzLmluc3RhbnRpYXRl QXMoQ2xhc3NVdGlscy5qYXZhOjMwDQo+Pj4gKQ0KPj4+ID4gICAgICAgICBhdA0KPj4+IG9yZy5h cGFjaGUubWFob3V0LmNsdXN0ZXJpbmcua21lYW5zLktNZWFuc0RyaXZlci5ydW4oS01lYW5zRHJp dmVyLmphDQo+Pj4gdg0KPj4+IGE6OTIpDQo+Pj4gPiAgICAgICAgIGF0IG9yZy5hcGFjaGUuaGFk b29wLnV0aWwuVG9vbFJ1bm5lci5ydW4oVG9vbFJ1bm5lci5qYXZhOjcwKQ0KPj4+ID4gICAgICAg ICBhdA0KPj4+IG9yZy5hcGFjaGUubWFob3V0LmNsdXN0ZXJpbmcua21lYW5zLktNZWFuc0RyaXZl ci5tYWluKEtNZWFuc0RyaXZlci5qDQo+Pj4gYQ0KPj4+IHZhOjQ5KQ0KPj4+ID4gICAgICAgICBh dCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52b2tlMChOYXRpdmUgTWV0 aG9kKQ0KPj4+ID4gICAgICAgICBhdA0KPj4+IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vz c29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLg0KPj4+IGphdmE6MzkpDQo+ Pj4gPiAgICAgICAgIGF0DQo+Pj4gc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29y SW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvZEFjY2UNCj4+PiBzDQo+Pj4gc29ySW1wbC5qYXZh OjI1KQ0KPj4+ID4gICAgICAgICBhdCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuaW52b2tlKE1l dGhvZC5qYXZhOjU5NykNCj4+PiA+ICAgICAgICAgYXQNCj4+PiBvcmcuYXBhY2hlLmhhZG9vcC51 dGlsLlByb2dyYW1Ecml2ZXIkUHJvZ3JhbURlc2NyaXB0aW9uLmludm9rZShQcm9ncg0KPj4+IGEN Cj4+PiBtRHJpdmVyLmphdmE6NzIpDQo+Pj4gPiAgICAgICAgIGF0DQo+Pj4gb3JnLmFwYWNoZS5o YWRvb3AudXRpbC5Qcm9ncmFtRHJpdmVyLmRyaXZlcihQcm9ncmFtRHJpdmVyLmphdmE6MTQ0KQ0K Pj4+ID4gICAgICAgICBhdA0KPj4+IG9yZy5hcGFjaGUubWFob3V0LmRyaXZlci5NYWhvdXREcml2 ZXIubWFpbihNYWhvdXREcml2ZXIuamF2YToxOTUpDQo+Pj4gPiAgICAgICAgIGF0IHN1bi5yZWZs ZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5hdGl2ZSBNZXRob2QpDQo+Pj4g PiAgICAgICAgIGF0DQo+Pj4gc3VuLnJlZmxlY3QuTmF0aXZlTWV0aG9kQWNjZXNzb3JJbXBsLmlu dm9rZShOYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuDQo+Pj4gamF2YTozOSkNCj4+PiA+ICAgICAg ICAgYXQNCj4+PiBzdW4ucmVmbGVjdC5EZWxlZ2F0aW5nTWV0aG9kQWNjZXNzb3JJbXBsLmludm9r ZShEZWxlZ2F0aW5nTWV0aG9kQWNjZQ0KPj4+IHMNCj4+PiBzb3JJbXBsLmphdmE6MjUpDQo+Pj4g PiAgICAgICAgIGF0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZC5pbnZva2UoTWV0aG9kLmphdmE6 NTk3KQ0KPj4+ID4gICAgICAgICBhdCBvcmcuYXBhY2hlLmhhZG9vcC51dGlsLlJ1bkphci5tYWlu KFJ1bkphci5qYXZhOjIwOCkNCj4+PiA+IENhdXNlZCBieTogamF2YS5sYW5nLkNsYXNzTm90Rm91 bmRFeGNlcHRpb246DQo+Pj4gL2hvbWUvcmhhZG9vcC9wcm9qZWN0cy9iZXNtYXJ0L3dvcmtzcGFj ZS9tYWhvdXRfYWJhYy90YXJnZXQvY2xhc3Nlcy8NCj4+PiBjDQo+Pj4gbHVzdGVyaW5nL0FiYWNE aXN0YW5jZU1lYXN1cmUuY2xhc3MNCj4+PiA+ICAgICAgICAgYXQgamF2YS5sYW5nLkNsYXNzLmZv ck5hbWUwKE5hdGl2ZSBNZXRob2QpDQo+Pj4gPiAgICAgICAgIGF0IGphdmEubGFuZy5DbGFzcy5m b3JOYW1lKENsYXNzLmphdmE6MTY5KQ0KPj4+ID4gICAgICAgICBhdA0KPj4+IG9yZy5hcGFjaGUu bWFob3V0LmNvbW1vbi5DbGFzc1V0aWxzLmluc3RhbnRpYXRlQXMoQ2xhc3NVdGlscy5qYXZhOjI4 DQo+Pj4gKQ0KPj4+ID4gICAgICAgICAuLi4gMTUgbW9yZQ0KPj4+ID4NCj4+PiA+DQo+Pj4gPiBJ cyB0aGlzIHRoZSBwcm9wZXIgd2F5IHRvIHVzZSB0aGUgY3VzdG9tIGRpc3RhbmNlIG1lYXN1cmU/ IG9yIA0KPj4+ID4gc2hvdWxkIEkNCj4+PiBwYWNrYWdlIHRoZSBjbGFzcz8gYW5kIGhvdz8NCj4+ PiA+DQo+Pj4gPiBUaGFuayB5b3UgaW4gYWR2YW5jZSwNCj4+PiA+IE1paGFpIEpvc2FuDQo+Pj4g Pg0KPj4+ID4+IEFyZSB5b3UgZ2V0dGluZyBhbnkgZXJyb3JzPw0KPj4+ID4+IENhbiB5b3Ugc3Bl Y2lmeSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZSBvZiB5b3VyIGRpc3RhbmNlIA0KPj4+ID4+ IG1lYXN1cmUNCj4+PiAobGlrZQ0KPj4+ID4+IGNvbS54eHguTXlEaXN0YW5jZU1lYXN1cmUpIGFu ZCBjaGVjaz8NCj4+PiA+Pg0KPj4+ID4+IEJlc3QsDQo+Pj4gPj4gTWFoZXNoIEJhbGlqYSwNCj4+ PiA+PiBDYWxzb2Z0IExhYnMuDQo+Pj4gPj4NCj4+PiA+Pg0KPj4+ID4+IE9uIFR1ZSwgRmViIDEy LCAyMDEzIGF0IDI6MjggUE0sIE1paGFpIEpvc2FuIDwNCj4+PiBNaWhhaS5Kb3NhbkBpcXVlc3Rn cm91cC5jb20+d3JvdGU6DQo+Pj4gPj4NCj4+PiA+PiA+IEhlbGxvLA0KPj4+ID4+ID4NCj4+PiA+ PiA+IENhbiB5b3UgcGxlYXNlIHRlbGwgbWUgaG93IGNhbiBJIHVzZSBhIGN1c3RvbSBtYWRlIGRp c3RhbmNlIA0KPj4+ID4+ID4gbWVhc3VyZQ0KPj4+IHdpdGgNCj4+PiA+PiA+IE1haG91dCBpbiBj b21tYW5kIGxpbmU/DQo+Pj4gPj4gPiBJIGFtIHRyeWluZyB0byBkbyBhIGNsdXN0ZXJpemF0aW9u dXNpbmcgdGhpcyBkaXN0YW5jZSBsaWtlOg0KPj4+ID4+ID4NCj4+PiA+PiA+IG1haG91dCBrbWVh bnMgLWkgaW4vc2VxdWVuY2UvIFwNCj4+PiA+PiA+ICAgICAgICAtYyAgb3V0L2NlbnRyb2lkcy9j bHVzdGVycy0wIFwNCj4+PiA+PiA+ICAgICAgICAtbyAgb3V0L2NsdXN0ZXJzLW91dC8gXA0KPj4+ ID4+ID4gICAgICAgIC14IDEwIFwNCj4+PiA+PiA+ICAgICAgICAtZG0gTXlEaXN0YW5jZU1lYXN1 cmUgXA0KPj4+ID4+ID4gICAgICAgIC1vdw0KPj4+ID4+ID4NCj4+PiA+PiA+IFRoYW5rIHlvdSBp biBhZHZhbmNlLA0KPj4+ID4+ID4gTWloYWkNCj4+PiA+PiA+DQo+Pj4NCg==