From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 84751B38D for ; Mon, 18 May 2015 09:06:32 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP; 18 May 2015 00:06:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,451,1427785200"; d="scan'208";a="494932223" Received: from pgsmsx105.gar.corp.intel.com ([10.221.44.96]) by FMSMGA003.fm.intel.com with ESMTP; 18 May 2015 00:06:30 -0700 Received: from kmsmsx154.gar.corp.intel.com (172.21.73.14) by PGSMSX105.gar.corp.intel.com (10.221.44.96) with Microsoft SMTP Server (TLS) id 14.3.224.2; Mon, 18 May 2015 15:06:28 +0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by KMSMSX154.gar.corp.intel.com (172.21.73.14) with Microsoft SMTP Server (TLS) id 14.3.224.2; Mon, 18 May 2015 15:06:27 +0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.23]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.94]) with mapi id 14.03.0224.002; Mon, 18 May 2015 15:06:26 +0800 From: "Liu, Yong" To: "Jiajia, SunX" , "dts@dpdk.org" Thread-Topic: =?utf-8?B?W2R0c10gW+KAmGR0cy12MeKAmSAyLzldIE9wdGltaXplIHNzaCBjb25uZWN0?= =?utf-8?Q?ion?= Thread-Index: AQHQkSiddzNGtZ1wrkOOOAuOBaBjoZ2BSi6A Date: Mon, 18 May 2015 07:06:25 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E10DE47C6@SHSMSX103.ccr.corp.intel.com> References: <1431925646-1314-1-git-send-email-sunx.jiajia@intel.com> <1431925646-1314-3-git-send-email-sunx.jiajia@intel.com> In-Reply-To: <1431925646-1314-3-git-send-email-sunx.jiajia@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dts] =?utf-8?b?W+KAmGR0cy12MeKAmSAyLzldIE9wdGltaXplIHNzaCBjb25u?= =?utf-8?q?ection?= X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 May 2015 07:06:33 -0000 SmlhamlhLCANClBsZWFzZSBzZWUgbXkgY29tbWVudHMgYmVsb3cuDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZHRzIFttYWlsdG86ZHRzLWJvdW5jZXNAZHBkay5vcmdd IE9uIEJlaGFsZiBPZiBzamlhamlheA0KPiBTZW50OiBNb25kYXksIE1heSAxOCwgMjAxNSAxOjA3 IFBNDQo+IFRvOiBkdHNAZHBkay5vcmcNCj4gU3ViamVjdDogW2R0c10gW+KAmGR0cy12MeKAmSAy LzldIE9wdGltaXplIHNzaCBjb25uZWN0aW9uDQo+IA0KPiBPcHRpbWl6ZSBjb25maWd1cmUgcGFy c2UNCj4gDQo+IE1vdmUgc29tZSBmdW5jdGlvbnMgaW4gZHRzIHRvIGFuIGNvbW1vbiB1dGlscyBt b2R1bGUNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IHNqaWFqaWF4IDxzdW54LmppYWppYUBpbnRlbC5j b20+DQo+IC0tLQ0KPiAgZnJhbWV3b3JrL2NvbmZpZy5weSAgICAgICAgIHwgMTcxICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQ0KPiAtLS0tLQ0KPiAgZnJhbWV3b3JrL3Nz aF9jb25uZWN0aW9uLnB5IHwgICA1ICsrDQo+ICBmcmFtZXdvcmsvc3NoX3BleHBlY3QucHkgICAg fCAgNjMgKysrKysrKysrKysrKy0tLQ0KPiAgZnJhbWV3b3JrL3V0aWxzLnB5ICAgICAgICAgIHwg IDc3ICsrKysrKysrKysrKysrKysrKysrDQo+ICA0IGZpbGVzIGNoYW5nZWQsIDI3MCBpbnNlcnRp b25zKCspLCA0NiBkZWxldGlvbnMoLSkNCj4gIG1vZGUgY2hhbmdlIDEwMDc1NSA9PiAxMDA2NDQg ZnJhbWV3b3JrL2NvbmZpZy5weQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGZyYW1ld29yay91dGls cy5weQ0KPiANCj4gZGlmZiAtLWdpdCBhL2ZyYW1ld29yay9jb25maWcucHkgYi9mcmFtZXdvcmsv Y29uZmlnLnB5DQo+IG9sZCBtb2RlIDEwMDc1NQ0KPiBuZXcgbW9kZSAxMDA2NDQNCj4gaW5kZXgg ZDI1NDhlOC4uOTI3Yzg0Ng0KPiAtLS0gYS9mcmFtZXdvcmsvY29uZmlnLnB5DQo+ICsrKyBiL2Zy YW1ld29yay9jb25maWcucHkNCj4gQEAgLTM3LDQ1ICszNywxMzMgQEAgaW1wb3J0IHJlDQo+ICBp bXBvcnQgQ29uZmlnUGFyc2VyICAjIGNvbmZpZyBwYXJzZSBtb2R1bGUNCj4gIGltcG9ydCBhcmdw YXJzZSAgICAgICMgcHJhc2UgYXJndW1lbnRzIG1vZHVsZQ0KPiANCj4gLXBvcnRjb25mID0gImNv bmYvcG9ydHMuY2ZnIg0KPiAtY3JiY29uZiA9ICJjb25mL2NyYnMuY2ZnIg0KPiArUE9SVENPTkYg PSAiY29uZi9wb3J0cy5jZmciDQo+ICtDUkJDT05GID0gImNvbmYvY3Jicy5jZmciDQo+ICtWSVJU Q09ORiA9ICJjb25mL3ZpcnRfZ2xvYmFsLmNmZyINCj4gDQo+IA0KPiAgY2xhc3MgVXNlckNvbmYo KToNCj4gDQo+IC0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfY29uZj1wb3J0Y29uZiwgY3Ji X2NvbmY9Y3JiY29uZik6DQo+IC0gICAgICAgIHNlbGYucG9ydF9jb25maWcgPSBwb3J0X2NvbmYN Cj4gLSAgICAgICAgc2VsZi5jcmJfY29uZmlnID0gY3JiX2NvbmYNCj4gKyAgICBkZWYgX19pbml0 X18oc2VsZiwgY29uZmlnKToNCj4gKyAgICAgICAgc2VsZi5jb25mID0gQ29uZmlnUGFyc2VyLlNh ZmVDb25maWdQYXJzZXIoKQ0KPiArICAgICAgICBsb2FkX2ZpbGVzID0gc2VsZi5jb25mLnJlYWQo Y29uZmlnKQ0KPiArICAgICAgICBpZiBsb2FkX2ZpbGVzID09IFtdOg0KPiArICAgICAgICAgICAg cHJpbnQgIkZBSUxFRCBMT0FESU5HICVzISEhIiAlIGNvbmZpZw0KPiArICAgICAgICAgICAgc2Vs Zi5jb25mID0gTm9uZQ0KPiArICAgICAgICAgICAgcmFpc2UNCj4gKw0KDQpUaGVyZSdzIG5lZWQg b25lIHNwZWNpYWwgZXhjZXB0aW9uIGZvciBjb25maWd1cmF0aW9uIHBhcnNlZCBmYWlsdXJlLg0K DQo+ICsgICAgZGVmIGdldF9zZWN0aW9ucyhzZWxmKToNCj4gKyAgICAgICAgaWYgc2VsZi5jb25m IGlzIE5vbmU6DQo+ICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiArDQo+ICsgICAgICAgIHJl dHVybiBzZWxmLmNvbmYuc2VjdGlvbnMoKQ0KPiArDQo+ICsgICAgZGVmIGxvYWRfc2VjdGlvbihz ZWxmLCBzZWN0aW9uKToNCj4gKyAgICAgICAgaWYgc2VsZi5jb25mIGlzIE5vbmU6DQo+ICsgICAg ICAgICAgICByZXR1cm4gTm9uZQ0KPiArDQo+ICsgICAgICAgIGl0ZW1zID0gTm9uZQ0KPiArICAg ICAgICBmb3IgY29uZl9zZWN0IGluIHNlbGYuY29uZi5zZWN0aW9ucygpOg0KPiArICAgICAgICAg ICAgaWYgY29uZl9zZWN0ID09IHNlY3Rpb246DQo+ICsgICAgICAgICAgICAgICAgaXRlbXMgPSBz ZWxmLmNvbmYuaXRlbXMoc2VjdGlvbikNCj4gKw0KPiArICAgICAgICByZXR1cm4gaXRlbXMNCj4g Kw0KPiArICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBpdGVtKToNCj4gKyAgICAgICAgY29uZnMg PSBbY29uZi5zdHJpcCgpIGZvciBjb25mIGluIGl0ZW0uc3BsaXQoJzsnKV0NCj4gKyAgICAgICAg aWYgJycgaW4gY29uZnM6DQo+ICsgICAgICAgICAgICBjb25mcy5yZW1vdmUoJycpDQo+ICsgICAg ICAgIHJldHVybiBjb25mcw0KPiArDQo+ICsgICAgZGVmIGxvYWRfcGFyYW0oc2VsZiwgY29uZik6 DQo+ICsgICAgICAgIHBhcmFtRGljdCA9IGRpY3QoKQ0KPiArDQo+ICsgICAgICAgIGZvciBwYXJh bSBpbiBjb25mLnNwbGl0KCcsJyk6DQo+ICsgICAgICAgICAgICAoa2V5LCBfLCB2YWx1ZSkgPSBw YXJhbS5wYXJ0aXRpb24oJz0nKQ0KPiArICAgICAgICAgICAgcGFyYW1EaWN0W2tleV0gPSB2YWx1 ZQ0KPiArICAgICAgICByZXR1cm4gcGFyYW1EaWN0DQo+ICsNCj4gKw0KPiArY2xhc3MgVmlydENv bmYoVXNlckNvbmYpOg0KPiArDQo+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZpcnRfY29uZj1W SVJUQ09ORik6DQo+ICsgICAgICAgIHNlbGYuY29uZmlnX2ZpbGUgPSB2aXJ0X2NvbmYNCj4gKyAg ICAgICAgc2VsZi52aXJ0X2NmZyA9IHt9DQo+ICsgICAgICAgIHRyeToNCj4gKyAgICAgICAgICAg IHNlbGYudmlydF9jb25mID0gVXNlckNvbmYoc2VsZi5jb25maWdfZmlsZSkNCj4gKyAgICAgICAg ZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KPiArICAgICAgICAgICAgcHJpbnQgIkZBSUxFRCBMT0FE SU5HIFZJUlQgQ09ORklHISEhIg0KPiArICAgICAgICAgICAgc2VsZi52aXJ0X2NvbmYgPSBOb25l DQo+ICsNClRoZXJlJ3MgbmVlZCBvbmUgc3BlY2lhbCBleGNlcHRpb24gZm9yIGNvbmZpZ3VyYXRp b24gcGFyc2VkIGZhaWx1cmUuDQoNCj4gKyAgICBkZWYgbG9hZF92aXJ0X2NvbmZpZyhzZWxmLCBu YW1lKToNCj4gKyAgICAgICAgc2VsZi52aXJ0X2NmZ3MgPSBbXQ0KPiArDQo+ICsgICAgICAgIHRy eToNCj4gKyAgICAgICAgICAgIHZpcnRfY29uZnMgPSBzZWxmLnZpcnRfY29uZi5sb2FkX3NlY3Rp b24obmFtZSkNCj4gKyAgICAgICAgZXhjZXB0Og0KPiArICAgICAgICAgICAgcHJpbnQgIkZBSUxF RCBGSU5EIFNFQ1RJT04gJXMhISEiICUgbmFtZQ0KPiArICAgICAgICAgICAgcmV0dXJuDQo+ICsN CkFkZCBleGNlcHRpb24gZm9yIGxvYWQgc2VjdGlvbiBmYWlsZWQuDQoNCj4gKyAgICAgICAgZm9y IHZpcnRfY29uZiBpbiB2aXJ0X2NvbmZzOg0KPiArICAgICAgICAgICAgdmlydF9jZmcgPSB7fQ0K PiArICAgICAgICAgICAgdmlydF9wYXJhbXMgPSBbXQ0KPiArICAgICAgICAgICAga2V5LCBjb25m aWcgPSB2aXJ0X2NvbmYNCj4gKyAgICAgICAgICAgIGNvbmZzID0gc2VsZi52aXJ0X2NvbmYubG9h ZF9jb25maWcoY29uZmlnKQ0KPiArICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiBjb25mczoNCj4g KyAgICAgICAgICAgICAgICB2aXJ0X3BhcmFtcy5hcHBlbmQoc2VsZi5sb2FkX3ZpcnRfcGFyYW0o Y29uZmlnKSkNCj4gKyAgICAgICAgICAgIHZpcnRfY2ZnW2tleV0gPSB2aXJ0X3BhcmFtcw0KPiAr ICAgICAgICAgICAgc2VsZi52aXJ0X2NmZ3MuYXBwZW5kKHZpcnRfY2ZnKQ0KPiArDQo+ICsgICAg ZGVmIGdldF92aXJ0X2NvbmZpZyhzZWxmKToNCj4gKyAgICAgICAgcmV0dXJuIHNlbGYudmlydF9j ZmdzDQo+ICsNCj4gKyAgICBkZWYgbG9hZF92aXJ0X3BhcmFtKHNlbGYsIGNvbmZpZyk6DQo+ICsg ICAgICAgIGNmZ19wYXJhbXMgPSBzZWxmLnZpcnRfY29uZi5sb2FkX3BhcmFtKGNvbmZpZykNCj4g KyAgICAgICAgcmV0dXJuIGNmZ19wYXJhbXMNCj4gKw0KPiArDQo+ICtjbGFzcyBQb3J0Q29uZihV c2VyQ29uZik6DQo+ICsNCj4gKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9jb25mPVBPUlRD T05GKToNCj4gKyAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IHBvcnRfY29uZg0KPiAgICAgICAg ICBzZWxmLnBvcnRzX2NmZyA9IHt9DQo+ICAgICAgICAgIHNlbGYucGNpX3JlZ2V4ID0gIihbXGRh LWZdezJ9OltcZGEtZl17Mn0uXGR7MX0pJCINCj4gICAgICAgICAgdHJ5Og0KPiAtICAgICAgICAg ICAgc2VsZi5wb3J0X2NvbmYgPSBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpDQo+IC0g ICAgICAgICAgICBzZWxmLnBvcnRfY29uZi5yZWFkKHNlbGYucG9ydF9jb25maWcpDQo+ICsgICAg ICAgICAgICBzZWxmLnBvcnRfY29uZiA9IFVzZXJDb25mKHNlbGYuY29uZmlnX2ZpbGUpDQo+ICAg ICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCj4gICAgICAgICAgICAgIHByaW50ICJGQUlM RUQgTE9BRElORyBQT1JUIENPTkZJRyEhISINCj4gKyAgICAgICAgICAgIHNlbGYucG9ydF9jb25m ID0gTm9uZQ0KPiANClRoZXJlJ3MgbmVlZCBvbmUgc3BlY2lhbCBleGNlcHRpb24gZm9yIGNvbmZp Z3VyYXRpb24gcGFyc2VkIGZhaWx1cmUuDQoNCj4gICAgICBkZWYgbG9hZF9wb3J0c19jb25maWco c2VsZiwgY3JiSVApOg0KPiAtICAgICAgICBwb3J0cyA9IFtdDQo+IC0gICAgICAgIGZvciBjcmIg aW4gc2VsZi5wb3J0X2NvbmYuc2VjdGlvbnMoKToNCj4gLSAgICAgICAgICAgIGlmIGNyYiAhPSBj cmJJUDoNCj4gLSAgICAgICAgICAgICAgICBjb250aW51ZQ0KPiAtICAgICAgICAgICAgcG9ydHMg PSBbcG9ydC5zdHJpcCgpDQo+IC0gICAgICAgICAgICAgICAgICAgICBmb3IgcG9ydCBpbiBzZWxm LnBvcnRfY29uZi5nZXQoY3JiLA0KPiAncG9ydHMnKS5zcGxpdCgnOycpXQ0KPiArICAgICAgICBz ZWxmLnBvcnRzX2NmZyA9IHt9DQo+ICsgICAgICAgIGlmIHNlbGYucG9ydF9jb25mIGlzIE5vbmU6 DQo+ICsgICAgICAgICAgICByZXR1cm4NCj4gKw0KPiArICAgICAgICBwb3J0cyA9IHNlbGYucG9y dF9jb25mLmxvYWRfc2VjdGlvbihjcmJJUCkNCj4gKyAgICAgICAgaWYgcG9ydHMgaXMgTm9uZToN Cj4gKyAgICAgICAgICAgIHJldHVybg0KPiArICAgICAgICBrZXksIGNvbmZpZyA9IHBvcnRzWzBd DQo+ICsgICAgICAgIGNvbmZzID0gc2VsZi5wb3J0X2NvbmYubG9hZF9jb25maWcoY29uZmlnKQ0K PiArDQo+ICsgICAgICAgIGZvciBjb25maWcgaW4gY29uZnM6DQo+ICsgICAgICAgICAgICBwb3J0 X3BhcmFtID0gc2VsZi5wb3J0X2NvbmYubG9hZF9wYXJhbShjb25maWcpDQo+IA0KPiAtICAgICAg ICBmb3IgcG9ydCBpbiBwb3J0czoNCj4gLSAgICAgICAgICAgIHBvcnRfY2ZnID0gc2VsZi5fX3Bh cnNlX3BvcnRfcGFyYW0ocG9ydCkNCj4gICAgICAgICAgICAgICMgY2hlY2sgcGNpIEJERiB2YWxp ZGl0eQ0KPiAtICAgICAgICAgICAgaWYgJ3BjaScgbm90IGluIHBvcnRfY2ZnOg0KPiArICAgICAg ICAgICAgaWYgJ3BjaScgbm90IGluIHBvcnRfcGFyYW06DQo+ICAgICAgICAgICAgICAgICAgcHJp bnQgIk5PVCBGT1VORCBDT05GSUcgRk9SIE5PIFBDSSBBRERSRVNTISEhIg0KPiAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlDQo+IC0gICAgICAgICAgICBtID0gcmUubWF0Y2goc2VsZi5wY2lfcmVn ZXgsIHBvcnRfY2ZnWydwY2knXSkNCj4gKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChzZWxmLnBj aV9yZWdleCwgcG9ydF9wYXJhbVsncGNpJ10pDQo+ICAgICAgICAgICAgICBpZiBtIGlzIE5vbmU6 DQo+ICAgICAgICAgICAgICAgICAgcHJpbnQgIklOVkFMSUQgQ09ORklHIEZPUiBOTyBQQ0kgQURE UkVTUyEhISINCj4gICAgICAgICAgICAgICAgICBjb250aW51ZQ0KPiANCj4gLSAgICAgICAgICAg IGtleXMgPSBwb3J0X2NmZy5rZXlzKCkNCj4gKyAgICAgICAgICAgIGtleXMgPSBwb3J0X3BhcmFt LmtleXMoKQ0KPiAgICAgICAgICAgICAga2V5cy5yZW1vdmUoJ3BjaScpDQo+IC0gICAgICAgICAg ICBzZWxmLnBvcnRzX2NmZ1twb3J0X2NmZ1sncGNpJ11dID0ge2tleTogcG9ydF9jZmdba2V5XSBm b3Iga2V5DQo+IGluIGtleXN9DQo+ICsgICAgICAgICAgICBzZWxmLnBvcnRzX2NmZ1twb3J0X3Bh cmFtWydwY2knXV0gPSB7DQo+ICsgICAgICAgICAgICAgICAga2V5OiBwb3J0X3BhcmFtW2tleV0g Zm9yIGtleSBpbiBrZXlzfQ0KPiArICAgICAgICAgICAgaWYgJ251bWEnIGluIHNlbGYucG9ydHNf Y2ZnW3BvcnRfcGFyYW1bJ3BjaSddXToNCj4gKyAgICAgICAgICAgICAgICBudW1hX3N0ciA9IHNl bGYucG9ydHNfY2ZnW3BvcnRfcGFyYW1bJ3BjaSddXVsnbnVtYSddDQo+ICsgICAgICAgICAgICAg ICAgc2VsZi5wb3J0c19jZmdbcG9ydF9wYXJhbVsncGNpJ11dWydudW1hJ10gPSBpbnQobnVtYV9z dHIpDQo+IA0KPiAgICAgIGRlZiBnZXRfcG9ydHNfY29uZmlnKHNlbGYpOg0KPiAgICAgICAgICBy ZXR1cm4gc2VsZi5wb3J0c19jZmcNCj4gQEAgLTg2LDIzICsxNzQsMzYgQEAgY2xhc3MgVXNlckNv bmYoKToNCj4gICAgICAgICAgZWxzZToNCj4gICAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KPiAN Cj4gLSAgICBkZWYgX19wYXJzZV9wb3J0X3BhcmFtKHNlbGYsIHBvcnQpOg0KPiAtICAgICAgICBw b3J0RGljdCA9IGRpY3QoKQ0KPiAtDQo+IC0gICAgICAgIGZvciBwYXJhbSBpbiBwb3J0LnNwbGl0 KCcsJyk6DQo+IC0gICAgICAgICAgICAoa2V5LCBfLCB2YWx1ZSkgPSBwYXJhbS5wYXJ0aXRpb24o Jz0nKQ0KPiAtICAgICAgICAgICAgaWYga2V5ID09ICdudW1hJzoNCj4gLSAgICAgICAgICAgICAg ICBwb3J0RGljdFtrZXldID0gaW50KHZhbHVlKQ0KPiAtICAgICAgICAgICAgZWxzZToNCj4gLSAg ICAgICAgICAgICAgICBwb3J0RGljdFtrZXldID0gdmFsdWUNCj4gLSAgICAgICAgcmV0dXJuIHBv cnREaWN0DQo+ICsNCj4gDQo+IA0KPiAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoNCj4gLSAg ICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iTG9hZCBEVFMg Y29uZmlndXJhdGlvbg0KPiBmaWxlcyIpDQo+IC0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAi LCAiLS1wb3J0Y29uZiIsIGRlZmF1bHQ9cG9ydGNvbmYpDQo+IC0gICAgcGFyc2VyLmFkZF9hcmd1 bWVudCgiLWMiLCAiLS1jcmJjb25mIiwgZGVmYXVsdD1jcmJjb25mKQ0KPiArICAgIHBhcnNlciA9 IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKA0KPiArICAgICAgICBkZXNjcmlwdGlvbj0iTG9hZCBE VFMgY29uZmlndXJhdGlvbiBmaWxlcyIpDQo+ICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAi LCAiLS1wb3J0Y29uZiIsIGRlZmF1bHQ9UE9SVENPTkYpDQo+ICsgICAgcGFyc2VyLmFkZF9hcmd1 bWVudCgiLWMiLCAiLS1jcmJjb25mIiwgZGVmYXVsdD1DUkJDT05GKQ0KPiArICAgIHBhcnNlci5h ZGRfYXJndW1lbnQoIi12IiwgIi0tdmlydGNvbmYiLCBkZWZhdWx0PVZJUlRDT05GKQ0KPiAgICAg IGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpDQo+IC0gICAgY29uZiA9IFVzZXJDb25mKCkNCj4g LSAgICBjb25mLmxvYWRfcG9ydHNfY29uZmlnKCcxOTIuMTY4LjEuMScpDQo+IC0gICAgY29uZi5j aGVja19wb3J0X2F2YWlsYWJsZSgnMDAwMDo4NjowMC4wJykNCj4gKw0KPiArICAgICMgbm90IGV4 aXN0ZWQgY29uZmlndXJhdGlvbiBmaWxlDQo+ICsgICAgVmlydENvbmYoJy90bXAvbm90LWV4aXN0 ZWQuY2ZnJykNCj4gKw0KPiArICAgICMgZXhhbXBsZSBmb3IgYmFzaWMgdXNlIGNvbmZpZ3VyYXRp b24gZmlsZQ0KPiArICAgIGNvbmYgPSBVc2VyQ29uZihQT1JUQ09ORikNCj4gKyAgICBmb3Igc2Vj dGlvbiBpbiBjb25mLmdldF9zZWN0aW9ucygpOg0KPiArICAgICAgICBpdGVtcyA9IGNvbmYubG9h ZF9zZWN0aW9uKHNlY3Rpb24pDQo+ICsgICAgICAgIGtleSwgdmFsdWUgPSBpdGVtc1swXQ0KPiAr ICAgICAgICBjb25mcyA9IGNvbmYubG9hZF9jb25maWcodmFsdWUpDQo+ICsgICAgICAgIGZvciBj b25maWcgaW4gY29uZnM6DQo+ICsgICAgICAgICAgICBjb25mLmxvYWRfcGFyYW0oY29uZmlnKQ0K PiArDQo+ICsgICAgIyBleGFtcGxlIGZvciBwb3J0IGNvbmZpZ3VyYXRpb24gZmlsZQ0KPiArICAg IHBvcnRjb25mID0gUG9ydENvbmYoUE9SVENPTkYpDQo+ICsgICAgcG9ydGNvbmYubG9hZF9wb3J0 c19jb25maWcoJ0RVVCBJUCcpDQo+ICsgICAgcHJpbnQgcG9ydGNvbmYuZ2V0X3BvcnRzX2NvbmZp ZygpDQo+ICsgICAgcG9ydGNvbmYuY2hlY2tfcG9ydF9hdmFpbGFibGUoJzg2OjAwLjAnKQ0KPiAr DQo+ICsgICAgIyBleGFtcGxlIGZvciBnbG9iYWwgdmlydHVhbGl6YXRpb24gY29uZmlndXJhdGlv biBmaWxlDQo+ICsgICAgdmlydGNvbmYgPSBWaXJ0Q29uZihWSVJUQ09ORikNCj4gKyAgICB2aXJ0 Y29uZi5sb2FkX3ZpcnRfY29uZmlnKCdMSUJWSVJUJykNCj4gKyAgICBwcmludCB2aXJ0Y29uZi5n ZXRfdmlydF9jb25maWcoKQ0KPiBkaWZmIC0tZ2l0IGEvZnJhbWV3b3JrL3NzaF9jb25uZWN0aW9u LnB5IGIvZnJhbWV3b3JrL3NzaF9jb25uZWN0aW9uLnB5DQo+IGluZGV4IDE4YTY1MTcuLjcyODZi MTQgMTAwNjQ0DQo+IC0tLSBhL2ZyYW1ld29yay9zc2hfY29ubmVjdGlvbi5weQ0KPiArKysgYi9m cmFtZXdvcmsvc3NoX2Nvbm5lY3Rpb24ucHkNCj4gQEAgLTYyLDYgKzYyLDExIEBAIGNsYXNzIFNT SENvbm5lY3Rpb24ob2JqZWN0KToNCj4gICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcob3V0KQ0K PiAgICAgICAgICByZXR1cm4gb3V0DQo+IA0KPiArICAgIGRlZiBnZXRfc2Vzc2lvbl9iZWZvcmUo c2VsZiwgdGltZW91dD0xNSk6DQo+ICsgICAgICAgIG91dCA9IHNlbGYuc2Vzc2lvbi5nZXRfc2Vz c2lvbl9iZWZvcmUodGltZW91dCkNCj4gKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcob3V0KQ0K PiArICAgICAgICByZXR1cm4gb3V0DQo+ICsNCg0KSSd2ZSBzZW50IG91dCB0aGlzIHBhdGNoLCBw bGVhc2UgbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gZ2FwIHRoZXJlLg0KWW91J2QgYmV0dGVyIHJlbW92 ZSB0aG9zZSBmcm9tIHlvdXIgcGF0Y2ggd29yay4NCg0KPiAgICAgIGRlZiBjbG9zZShzZWxmKToN Cj4gICAgICAgICAgc2VsZi5zZXNzaW9uLmNsb3NlKCkNCj4gDQo+IGRpZmYgLS1naXQgYS9mcmFt ZXdvcmsvc3NoX3BleHBlY3QucHkgYi9mcmFtZXdvcmsvc3NoX3BleHBlY3QucHkNCj4gaW5kZXgg NzM1ZGY0NC4uNDE5MzAyMCAxMDA2NDQNCj4gLS0tIGEvZnJhbWV3b3JrL3NzaF9wZXhwZWN0LnB5 DQo+ICsrKyBiL2ZyYW1ld29yay9zc2hfcGV4cGVjdC5weQ0KPiBAQCAtMiw3ICsyLDggQEAgaW1w b3J0IHRpbWUNCj4gIGltcG9ydCBwZXhwZWN0DQo+ICBpbXBvcnQgcHhzc2gNCj4gIGZyb20gZGVi dWdnZXIgaW1wb3J0IGlnbm9yZV9rZXlpbnRyLCBhd2FyZV9rZXlpbnRyDQo+IC1mcm9tIGV4Y2Vw dGlvbiBpbXBvcnQgVGltZW91dEV4Y2VwdGlvbiwgU1NIQ29ubmVjdGlvbkV4Y2VwdGlvbg0KPiAr ZnJvbSBleGNlcHRpb24gaW1wb3J0IFRpbWVvdXRFeGNlcHRpb24sIFNTSENvbm5lY3Rpb25FeGNl cHRpb24sDQo+IFNTSFNlc3Npb25EZWFkRXhjZXB0aW9uDQo+ICtmcm9tIHV0aWxzIGltcG9ydCBS RUQsIEdSRUVODQo+IA0KPiAgIiIiDQo+ICBNb2R1bGUgaGFuZGxlIHNzaCBzZXNzaW9ucyBiZXR3 ZWVuIHRlc3RlciBhbmQgRFVULg0KPiBAQCAtMTQsMTYgKzE1LDI4IEBAIEFzbG8gc3VwcG9ydCB0 cmFuc2ZlciBmaWxlcyB0byB0ZXN0ZXIgb3IgRFVULg0KPiAgY2xhc3MgU1NIUGV4cGVjdChvYmpl Y3QpOg0KPiANCj4gICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3 b3JkKToNCj4gLSAgICAgICAgc2VsZi5tYWdpY19wcm9tcHQgPSAiW01BR0lDIFBST01QVF0iDQo+ ICsgICAgICAgIHNlbGYubWFnaWNfcHJvbXB0ID0gIk1BR0lDIFBST01QVCINCj4gICAgICAgICAg dHJ5Og0KPiAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uID0gcHhzc2gucHhzc2goKQ0KPiAtICAg ICAgICAgICAgc2VsZi51c2VybmFtZSA9IHVzZXJuYW1lDQo+ICAgICAgICAgICAgICBzZWxmLmhv c3QgPSBob3N0DQo+ICsgICAgICAgICAgICBzZWxmLnVzZXJuYW1lID0gdXNlcm5hbWUNCj4gICAg ICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBwYXNzd29yZA0KPiAtICAgICAgICAgICAgc2VsZi5z ZXNzaW9uLmxvZ2luKHNlbGYuaG9zdCwgc2VsZi51c2VybmFtZSwNCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLnBhc3N3b3JkLCBvcmlnaW5hbF9wcm9tcHQ9J1skIz5dJykN Cj4gKyAgICAgICAgICAgIGlmICc6JyBpbiBob3N0Og0KPiArICAgICAgICAgICAgICAgIHNlbGYu aXAgPSBob3N0LnNwbGl0KCc6JylbMF0NCj4gKyAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBp bnQoaG9zdC5zcGxpdCgnOicpWzFdKQ0KPiArICAgICAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi5s b2dpbihzZWxmLmlwLCBzZWxmLnVzZXJuYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLnBhc3N3b3JkLCBvcmlnaW5hbF9wcm9tcHQ9J1skIz5dJywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1zZWxmLnBvcnQsIGxvZ2luX3Rp bWVvdXQ9MjApDQo+ICsgICAgICAgICAgICBlbHNlOg0KPiArICAgICAgICAgICAgICAgIHNlbGYu c2Vzc2lvbi5sb2dpbihzZWxmLmhvc3QsIHNlbGYudXNlcm5hbWUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFzc3dvcmQsIG9yaWdpbmFsX3Byb21wdD0nWyQj Pl0nKQ0KPiAgICAgICAgICAgICAgc2VsZi5zZW5kX2V4cGVjdCgnc3R0eSAtZWNobycsICcjICcs IHRpbWVvdXQ9MikNCj4gLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCj4gKyAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiwgZToNCj4gKyAgICAgICAgICAgIHByaW50IFJFRChlKQ0KPiArICAgICAg ICAgICAgaWYgZ2V0YXR0cihzZWxmLCAncG9ydCcsIE5vbmUpOg0KPiArICAgICAgICAgICAgICAg IHN1Z2dlc3Rpb24gPSAiXG5TdWdnZXNzaW9uOiBDaGVjayBpZiB0aGUgZmlyZXdhcmUgb24NCj4g WyAlcyBdICIgJSBcDQo+ICsgICAgICAgICAgICAgICAgICAgIHNlbGYuaXAgKyAiaXMgc3RvcGVk XG4iDQo+ICsgICAgICAgICAgICAgICAgcHJpbnQgR1JFRU4oc3VnZ2VzdGlvbikNCj4gICAgICAg ICAgICAgIHJhaXNlIFNTSENvbm5lY3Rpb25FeGNlcHRpb24oaG9zdCkNCj4gDQo+ICAgICAgZGVm IGluaXRfbG9nKHNlbGYsIGxvZ2dlciwgbmFtZSk6DQo+IEBAIC0zMyw3ICs0Niw3IEBAIGNsYXNz IFNTSFBleHBlY3Qob2JqZWN0KToNCj4gDQo+ICAgICAgZGVmIHNlbmRfZXhwZWN0X2Jhc2Uoc2Vs ZiwgY29tbWFuZCwgZXhwZWN0ZWQsIHRpbWVvdXQ9MTUpOg0KPiAgICAgICAgICBpZ25vcmVfa2V5 aW50cigpDQo+IC0gICAgICAgIHNlbGYuX19mbHVzaCgpICMgY2xlYXIgYnVmZmVyDQo+ICsgICAg ICAgIHNlbGYuX19mbHVzaCgpICAjIGNsZWFyIGJ1ZmZlcg0KPiAgICAgICAgICBzZWxmLnNlc3Np b24uUFJPTVBUID0gZXhwZWN0ZWQNCj4gICAgICAgICAgc2VsZi5fX3NlbmRsaW5lKGNvbW1hbmQp DQo+ICAgICAgICAgIHNlbGYuX19wcm9tcHQoY29tbWFuZCwgdGltZW91dCkNCj4gQEAgLTQ1LDcg KzU4LDcgQEAgY2xhc3MgU1NIUGV4cGVjdChvYmplY3QpOg0KPiAgICAgIGRlZiBzZW5kX2V4cGVj dChzZWxmLCBjb21tYW5kLCBleHBlY3RlZCwgdGltZW91dD0xNSwgdmVyaWZ5PUZhbHNlKToNCj4g ICAgICAgICAgcmV0ID0gc2VsZi5zZW5kX2V4cGVjdF9iYXNlKGNvbW1hbmQsIGV4cGVjdGVkLCB0 aW1lb3V0KQ0KPiAgICAgICAgICBpZiB2ZXJpZnk6DQo+IC0gICAgICAgICAgICByZXRfc3RhdHVz ID0gc2VsZi5zZW5kX2V4cGVjdF9iYXNlKCJlY2hvICQ/IiwgZXhwZWN0ZWQpDQo+ICsgICAgICAg ICAgICByZXRfc3RhdHVzID0gc2VsZi5zZW5kX2V4cGVjdF9iYXNlKCJlY2hvICQ/IiwgZXhwZWN0 ZWQsDQo+IHRpbWVvdXQpDQo+ICAgICAgICAgICAgICBpZiBub3QgaW50KHJldF9zdGF0dXMpOg0K PiAgICAgICAgICAgICAgICAgIHJldHVybiByZXQNCj4gICAgICAgICAgICAgIGVsc2U6DQo+IEBA IC01NCwyMSArNjcsNDQgQEAgY2xhc3MgU1NIUGV4cGVjdChvYmplY3QpOg0KPiAgICAgICAgICBl bHNlOg0KPiAgICAgICAgICAgICAgcmV0dXJuIHJldA0KPiANCj4gLSAgICBkZWYgX19mbHVzaChz ZWxmKToNCj4gKyAgICBkZWYgZ2V0X3Nlc3Npb25fYmVmb3JlKHNlbGYsIHRpbWVvdXQ9MTUpOg0K PiArICAgICAgICAiIiINCj4gKyAgICAgICAgR2V0IGFsbCBvdXRwdXQgYmVmb3JlIHRpbWVvdXQN Cj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGlnbm9yZV9rZXlpbnRyKCkNCj4gICAgICAgICAg c2VsZi5zZXNzaW9uLlBST01QVCA9IHNlbGYubWFnaWNfcHJvbXB0DQo+IC0gICAgICAgIHNlbGYu c2Vzc2lvbi5wcm9tcHQoMC4xKQ0KPiArICAgICAgICB0cnk6DQo+ICsgICAgICAgICAgICBzZWxm LnNlc3Npb24ucHJvbXB0KHRpbWVvdXQpDQo+ICsgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg ZToNCj4gKyAgICAgICAgICAgIHBhc3MNCj4gKw0KPiArICAgICAgICBhd2FyZV9rZXlpbnRyKCkN Cj4gKyAgICAgICAgYmVmb3JlID0gc2VsZi5nZXRfb3V0cHV0X2JlZm9yZSgpDQo+ICsgICAgICAg IHNlbGYuX19mbHVzaCgpDQo+ICsgICAgICAgIHJldHVybiBiZWZvcmUNCj4gKw0KPiArICAgIGRl ZiBfX2ZsdXNoKHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgQ2xlYXIgYWxsIHNl c3Npb24gYnVmZmVyDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBzZWxmLnNlc3Npb24uYnVm ZmVyID0gIiINCj4gKyAgICAgICAgc2VsZi5zZXNzaW9uLmJlZm9yZSA9ICIiDQo+IA0KPiAgICAg IGRlZiBfX3Byb21wdChzZWxmLCBjb21tYW5kLCB0aW1lb3V0KToNCj4gICAgICAgICAgaWYgbm90 IHNlbGYuc2Vzc2lvbi5wcm9tcHQodGltZW91dCk6DQo+ICAgICAgICAgICAgICByYWlzZSBUaW1l b3V0RXhjZXB0aW9uKGNvbW1hbmQsIHNlbGYuZ2V0X291dHB1dF9hbGwoKSkNCj4gDQo+ICAgICAg ZGVmIF9fc2VuZGxpbmUoc2VsZiwgY29tbWFuZCk6DQo+ICsgICAgICAgIGlmIG5vdCBzZWxmLmlz YWxpdmUoKToNCj4gKyAgICAgICAgICAgIHJhaXNlIFNTSFNlc3Npb25EZWFkRXhjZXB0aW9uKHNl bGYuaG9zdCkNCj4gICAgICAgICAgaWYgbGVuKGNvbW1hbmQpID09IDIgYW5kIGNvbW1hbmQuc3Rh cnRzd2l0aCgnXicpOg0KPiAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uLnNlbmRjb250cm9sKGNv bW1hbmRbMV0pDQo+ICAgICAgICAgIGVsc2U6DQo+ICAgICAgICAgICAgICBzZWxmLnNlc3Npb24u c2VuZGxpbmUoY29tbWFuZCkNCj4gDQo+ICAgICAgZGVmIGdldF9vdXRwdXRfYmVmb3JlKHNlbGYp Og0KPiArICAgICAgICBpZiBub3Qgc2VsZi5pc2FsaXZlKCk6DQo+ICsgICAgICAgICAgICByYWlz ZSBTU0hTZXNzaW9uRGVhZEV4Y2VwdGlvbihzZWxmLmhvc3QpDQo+ICAgICAgICAgIHNlbGYuc2Vz c2lvbi5mbHVzaCgpDQo+ICAgICAgICAgIGJlZm9yZSA9IHNlbGYuc2Vzc2lvbi5iZWZvcmUucnNw bGl0KCdcclxuJywgMSkNCj4gICAgICAgICAgaWYgYmVmb3JlWzBdID09ICJbUEVYUEVDVF0iOg0K PiBAQCAtMTAzLDcgKzEzOSwxMiBAQCBjbGFzcyBTU0hQZXhwZWN0KG9iamVjdCk6DQo+ICAgICAg ICAgICIiIg0KPiAgICAgICAgICBTZW5kcyBhIGxvY2FsIGZpbGUgdG8gYSByZW1vdGUgcGxhY2Uu DQo+ICAgICAgICAgICIiIg0KPiAtICAgICAgICBjb21tYW5kID0gJ3NjcCB7MH0gezF9QHsyfTp7 M30nLmZvcm1hdChzcmMsIHNlbGYudXNlcm5hbWUsDQo+IHNlbGYuaG9zdCwgZHN0KQ0KPiArICAg ICAgICBpZiAnOicgaW4gc2VsZi5ob3N0Og0KPiArICAgICAgICAgICAgY29tbWFuZCA9ICdzY3Ag LVAgezB9IC1vIE5vSG9zdEF1dGhlbnRpY2F0aW9uRm9yTG9jYWxob3N0PXllcw0KPiB7MX0gezJ9 QHszfTp7NH0nLmZvcm1hdCgNCj4gKyAgICAgICAgICAgICAgICBzdHIoc2VsZi5wb3J0KSwgc3Jj LCBzZWxmLnVzZXJuYW1lLCBzZWxmLmlwLCBkc3QpDQo+ICsgICAgICAgIGVsc2U6DQo+ICsgICAg ICAgICAgICBjb21tYW5kID0gJ3NjcCB7MH0gezF9QHsyfTp7M30nLmZvcm1hdCgNCj4gKyAgICAg ICAgICAgICAgICBzcmMsIHNlbGYudXNlcm5hbWUsIHNlbGYuaG9zdCwgZHN0KQ0KPiAgICAgICAg ICBpZiBwYXNzd29yZCA9PSAnJzoNCj4gICAgICAgICAgICAgIHNlbGYuX3NwYXduX3NjcChjb21t YW5kLCBzZWxmLnBhc3N3b3JkKQ0KPiAgICAgICAgICBlbHNlOg0KPiBkaWZmIC0tZ2l0IGEvZnJh bWV3b3JrL3V0aWxzLnB5IGIvZnJhbWV3b3JrL3V0aWxzLnB5DQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAuLjU3ZWI5ODgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9m cmFtZXdvcmsvdXRpbHMucHkNCj4gQEAgLTAsMCArMSw3NyBAQA0KPiArIyBCU0QgTElDRU5TRQ0K PiArIw0KPiArIyBDb3B5cmlnaHQoYykgMjAxMC0yMDE0IEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLg0KPiArIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArIw0KPiArIyBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQNCj4gKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQo+ICsjIGFyZSBtZXQ6DQo+ICsjDQo+ICsjICAgKiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodA0KPiArIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLg0KPiArIyAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gKyMgICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0K PiArIyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQ0KPiArIyAgICAgZGlzdHJpYnV0aW9uLg0KPiArIyAgICogTmVpdGhlciB0aGUg bmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KPiArIyAgICAg Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkDQo+ICsjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ICsjDQo+ICsjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCj4gKyMgIkFTIElT IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QNCj4gKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SDQo+ICsjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQo+ICsjIE9XTkVSIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LA0KPiArIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UDQo+ICsjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KPiArIyBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCj4g KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVA0KPiArIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCj4gKyMgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCj4gKw0K PiAraW1wb3J0IGpzb24gICAgICAgICAjIGpzb24gZm9ybWF0DQo+ICtpbXBvcnQgcmUNCj4gKw0K PiArDQo+ICtkZWYgUkVEKHRleHQpOg0KPiArICAgIHJldHVybiAiXHgxQlsiICsgIjMxOzFtIiAr IHN0cih0ZXh0KSArICJceDFCWyIgKyAiMG0iDQo+ICsNCj4gKw0KPiArZGVmIEJMVUUodGV4dCk6 DQo+ICsgICAgcmV0dXJuICJceDFCWyIgKyAiMzY7MW0iICsgc3RyKHRleHQpICsgIlx4MUJbIiAr ICIwbSINCj4gKw0KPiArDQo+ICtkZWYgR1JFRU4odGV4dCk6DQo+ICsgICAgcmV0dXJuICJceDFC WyIgKyAiMzI7MW0iICsgc3RyKHRleHQpICsgIlx4MUJbIiArICIwbSINCj4gKw0KPiArDQo+ICtk ZWYgcHByaW50KHNvbWVfZGljdCk6DQo+ICsgICAgIiIiDQo+ICsgICAgUHJpbnQgSlNPTiBmb3Jt YXQgZGljdGlvbmFyeSBvYmplY3QuDQo+ICsgICAgIiIiDQo+ICsgICAgcmV0dXJuIGpzb24uZHVt cHMoc29tZV9kaWN0LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpDQo+ICsNCj4gKw0KPiArZGVm IHJlZ2V4cChzLCB0b19tYXRjaCwgYWxsU3RyaW5nPUZhbHNlKToNCj4gKyAgICAiIiINCj4gKyAg ICBFbnN1cmUgdGhhdCB0aGUgcmUgYHRvX21hdGNoJyBvbmx5IGhhcyBvbmUgZ3JvdXAgaW4gaXQu DQo+ICsgICAgIiIiDQo+ICsNCj4gKyAgICBzY2FubmVyID0gcmUuY29tcGlsZSh0b19tYXRjaCwg cmUuRE9UQUxMKQ0KPiArICAgIGlmIGFsbFN0cmluZzoNCj4gKyAgICAgICAgcmV0dXJuIHNjYW5u ZXIuZmluZGFsbChzKQ0KPiArICAgIG0gPSBzY2FubmVyLnNlYXJjaChzKQ0KPiArICAgIGlmIG0g aXMgTm9uZToNCj4gKyAgICAgICAgcHJpbnQgUkVEKCJGYWlsZWQgdG8gbWF0Y2ggIiArIHRvX21h dGNoICsgIiBpbiB0aGUgc3RyaW5nICIgKyBzKQ0KPiArICAgICAgICByZXR1cm4gTm9uZQ0KPiAr ICAgIHJldHVybiBtLmdyb3VwKDEpDQo+ICsNCj4gKw0KPiArZGVmIGdldF9vYmpfZnVuY3Mob2Jq LCBmdW5jX25hbWVfcmVnZXgpOg0KPiArICAgICIiIg0KPiArICAgIFJldHVybiBmdW5jdGlvbiBs aXN0IHdoaWNoIG5hbWUgbWF0Y2hlZCByZWdleC4NCj4gKyAgICAiIiINCj4gKyAgICBmb3IgZnVu Y19uYW1lIGluIGRpcihvYmopOg0KPiArICAgICAgICBmdW5jID0gZ2V0YXR0cihvYmosIGZ1bmNf bmFtZSkNCj4gKyAgICAgICAgaWYgY2FsbGFibGUoZnVuYykgYW5kIHJlLm1hdGNoKGZ1bmNfbmFt ZV9yZWdleCwgZnVuYy5fX25hbWVfXyk6DQo+ICsgICAgICAgICAgICB5aWVsZCBmdW5jDQo+IC0t DQpUaGlzIGZ1bmN0aW9uIG5vdyB1c2VkIHRvIGZyZWUgcmVzb3VyY2Ugb2YgdmlydHVhbGl6YXRp b24gbWFjaGluZSwgSSB0aGluayBpdCdzIGJldHRlciB0byBjYWxsIGZyZWUgZnVuY3Rpb25zIGRp cmVjdGx5LiANCk1heWJlIHRoZXJlIHdpbGwgYmUgZGVwZW5kZW5jeSBvZiB0aGVzZSBmcmVlIGZ1 bmN0aW9ucy4gV2hhdCdzIHlvdXIgaWRlYSBhYm91dCBpdD8NCg0KPiAxLjkuMA0KDQo=