xiaomianao666

插件名:global_海角社区

Dec 4th, 2023
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_海角社区@base64://Ly8gPT1Vc2VyU2NyaXB0PT0NCi8vIEBuYW1lICAgICAgICAgICAgICDmtbfop5LnpL7ljLoNCi8vIEBob21lcGFnZSAgICAgICAgICBodHRwOi8vanN4bC5wcm8NCi8vIEB2ZXJzaW9uICAgICAgICAgICAxLjguMzENCi8vIEB1cGRhdGVEZXNjICAgICAgICDkv67lpI3nmbvlvZXpl67popjvvIzkvJjljJbljrvmj5DnpLoNCi8vIEBkZXNjcmlwdGlvbiAgICAgICDwn5Sl5YWN6LS555yL5LuY6LS56KeG6aKR77yM5p+l55yL5bCB56aB6LSm5Y+35Li76aG15biW5a2Q77yM5LiL6L296KeG6aKR77yM5aSN5Yi25pKt5pS+6ZO+5o6l77yM5YWN55m75b2VL+S/neWtmOi0puWPt+WvhueggeWFjei+k+WFpS/mjIHkuYXnmbvlvZXvvIzluJblrZDmmK/lkKbmnInop4bpopHlm77niYfmj5DnpLoo5qCH6aKY5YmN57yAKe+8jHZpcOaSreaUvui3r+e6v++8jOiHquWKqOWxleW8gOW4luWtkO+8jOWOu+W5v+WRiu+8jHZpcOagh+ivhg0KLy8gQGljb24gICAgICAgICAgICAgIGh0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9sb2dvL2hhaWppYW8ucG5nDQovLyBAbmFtZXNwYWNlICAgICAgICAg5rW36KeS56S+5Yy6DQovLyBAYXV0aG9yICAgICAgICAgICAgd3QNCi8vIEBpbmNsdWRlICAgICAgICAgICAqOi8vKi5oYWkqLiovKg0KLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly9oYWkqLiovKg0KLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly9oaiouKi8qDQovLyBAaW5jbHVkZSAgICAgICAgICAgL3Bvc3QvZGV0YWlscy8NCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vKi9wb3N0L2RldGFpbHMqDQovLyBAcmVxdWlyZSAgICAgICAgICAgaHR0cHM6Ly9jZG4uYm9vdGNkbi5uZXQvYWpheC9saWJzL2pxdWVyeS8zLjIuMS9qcXVlcnkubWluLmpzP2lkPTENCi8vIEByZXF1aXJlCQkJICBodHRwczovL2xpYi5iYW9taXR1LmNvbS9obHMuanMvMC4xNS4wLWFscGhhLjIvaGxzLm1pbi5qcz9pZD0xDQovLyBAcmVxdWlyZQkJCSAgaHR0cHM6Ly9saWIuYmFvbWl0dS5jb20vZHBsYXllci8xLjI1LjAvRFBsYXllci5taW4uanMNCi8vIEByZXF1aXJlCQkJICBodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvbWQ1L2NvZGUuanMNCi8vIEBjb25uZWN0CQkJICByZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tDQovLyBAY29ubmVjdAkJCSAgZmMtbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLm5leHQuYnNwYXBwLmNvbQ0KLy8gQHJ1bi1hdCAJCQkgIGRvY3VtZW50LXN0YXJ0DQovLyBAZ3JhbnQgICAgICAgICAgICAgdW5zYWZlV2luZG93DQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fYWRkU3R5bGUNCi8vIEBncmFudCAgICAgICAgICAgICBHTV9vcGVuSW5UYWINCi8vIEBncmFudCAgICAgICAgICAgICBHTV9nZXRWYWx1ZQ0KLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3NldFZhbHVlDQovLyBAZ3JhbnQgCQkJICBHTV9nZXRSZXNvdXJjZVRleHQNCi8vIEBncmFudCAgICAgICAgICAgICBHTV94bWxodHRwUmVxdWVzdA0KLy8gQHVwZGF0ZVVSTAkJICBodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvcmVsZWFzZS9oYWlqaWFvLnVzZXIuanMNCi8vIEBkb3dubG9hZFVSTAkJICBodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvcmVsZWFzZS9oYWlqaWFvLnVzZXIuanMNCi8vIEBjaGFyc2V0CQkgICAgICBVVEYtOA0KLy8gQGxpY2Vuc2UgICAgICAgICAgIE1JVA0KLy8gPT0vVXNlclNjcmlwdD09DQpjb25zdCB1dGlsID0gew0KCWplbmNvZGU6IChzLCBwbHVzKSA9PiB7DQoJCXJldHVybiBlbmNvZGUoSlNPTi5zdHJpbmdpZnkocywgYHV0Zi04YCksIHBsdXMpOw0KCX0sDQoNCglzaG93VGlwczogKGl0ZW0gPSB7fSkgPT4gew0KCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdibG9jaycpOw0KCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJJCgiI3d0LXRpcHMtYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOw0KCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3gnKS5lbXB0eSgpDQoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCcpLmFwcGVuZChgDQoJCQk8YnV0dG9uIGNsYXNzPSdjYW5jZWwnPuWPlua2iDwvYnV0dG9uPg0KCQkJPGJ1dHRvbiBjbGFzcz0nc3VibWl0Jz7noa7lrpo8L2J1dHRvbj4NCgkJYCkNCgkJaWYgKGl0ZW0udGl0bGUpICQoJyN3dC10aXBzLWJveCAuY29udGVudCcpLmh0bWwoaXRlbS50aXRsZSk7DQoJCWlmIChpdGVtLmRvdWJ0KSAkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLmNhbmNlbCcpLmNzcygnZGlzcGxheScsICdibG9jaycpOw0KCQlpZiAoaXRlbS5jb25maXJtKSAkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLnN1Ym1pdCcpLmh0bWwoaXRlbS5jb25maXJtKTsNCgkJJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5zdWJtaXQnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJCWlmIChpdGVtLnN1Y2Nlc3MpIGl0ZW0uc3VjY2Vzcyh0cnVlKTsNCgkJfSkNCgkJJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5jYW5jZWwnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJCWlmIChpdGVtLnN1Y2Nlc3MpIGl0ZW0uc3VjY2VzcyhmYWxzZSk7DQoJCX0pDQoJfSwNCgkNCgljb3B5VGV4dDogKHRleHQpID0+IHsNCgkJaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgd2luZG93LmlzU2VjdXJlQ29udGV4dCkgew0KCQkJcmV0dXJuIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpDQoJCX0gZWxzZSB7DQoJCQlpZiAoIWRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykpIHJldHVybiBQcm9taXNlLnJlamVjdCgpDQoJCQljb25zdCB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJykNCgkJCXRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJw0KCQkJdGV4dEFyZWEuc3R5bGUudG9wID0gdGV4dEFyZWEuc3R5bGUubGVmdCA9ICctMTAwdmgnDQoJCQl0ZXh0QXJlYS5zdHlsZS5vcGFjaXR5ID0gJzAnDQoJCQl0ZXh0QXJlYS52YWx1ZSA9IHRleHQNCgkJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpDQoJCQl0ZXh0QXJlYS5mb2N1cygpDQoJCQl0ZXh0QXJlYS5zZWxlY3QoKQ0KCQkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsNCgkJCQlkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpID8gcmVzb2x2ZSgpIDogcmVqZWN0KCkNCgkJCQl0ZXh0QXJlYS5yZW1vdmUoKQ0KCQkJfSkNCgkJfQ0KCX0sDQoNCglzaG93QW5kSGlkVGlwczogKG5hbWUsIG9wID0gJ3NldCcsIHZhbCA9IHRydWUpID0+IHsNCgkJbGV0IHRpcHMgPSBHTV9nZXRWYWx1ZSgnd3RfdGlwcycsIHt9KQ0KCQlpZiAoIXRpcHMpIHRpcHMgPSB7fQ0KCQlpZiAob3AgPT0gJ3NldCcpIHsNCgkJCXRpcHNbbmFtZV0gPSB2YWwNCgkJCUdNX3NldFZhbHVlKCd3dF90aXBzJywgdGlwcykNCgkJCWlmICh2YWwpICQoJy4nICsgbmFtZSkuYWRkQ2xhc3MoJ3RpcHMteXVhbicpDQoJCQllbHNlICQoJy4nICsgbmFtZSkucmVtb3ZlQ2xhc3MoJ3RpcHMteXVhbicpDQoJCQlyZXR1cm4gdHJ1ZQ0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIHRpcHNbbmFtZV0gPyB0cnVlIDogZmFsc2UNCgkJfQ0KCX0sDQoNCglhZGRMb2dpbjogKCkgPT4gew0KCQlpZiAoJCgnI3d0LWxvZ2luLWJveCcpLmxlbmd0aCA+IDApIHJldHVybjsNCgkJJCgnYm9keScpLmFwcGVuZChgDQoJCQk8ZGl2IGlkPSJ3dC1sb2dpbi1tYXNrIj48L2Rpdj4NCgkJCTxkaXYgaWQ9Ind0LWxvZ2luLWJveCI+DQoJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2Pg0KCQkJCTxkaXYgY2xhc3M9InRpdGxlIj7nmbvlvZXnoIE8L2Rpdj4NCgkJCQk8ZGl2IGNsYXNzPSJpbnB1dC1ib3giPg0KCQkJCQk8aW5wdXQgcGxhY2Vob2xkZXI9IueZu+W9leWQjuiEmuacrOeUn+aViCIvPg0KCQkJCQk8ZGl2IGNsYXNzPSJsb2dpbi1idG4iPg0KCQkJCQkJPGJ1dHRvbj7nmbvlvZU8L2J1dHRvbj4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBjbGFzcz0idG8taW5kZXgiIHN0eWxlPSJjb2xvcjogIzM2YjVjNTt0ZXh0LWFsaWduOiByaWdodDttYXJnaW4tcmlnaHQ6IDEwcHg7IGhlaWdodDogNTBweDtsaW5lLWhlaWdodDogNTBweDtmb250LXNpemU6IDEwcHg7Ij7ljrvojrflj5Yg77yfPC9kaXY+DQoJCQk8L2Rpdj4NCgkJYCkNCgkJR01fYWRkU3R5bGUoYA0KCQkJI3d0LWxvZ2luLW1hc2t7DQoJCQkJZGlzcGxheTogbm9uZTsNCgkJCQlwb3NpdGlvbjogZml4ZWQ7DQoJCQkJdG9wOiAwOw0KCQkJCWxlZnQ6IDA7DQoJCQkJcmlnaHQ6IDA7DQoJCQkJYm90dG9tOiAwOw0KCQkJCXotaW5kZXg6IDExMDAwOw0KCQkJCWJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggew0KCQkJCXBvc2l0aW9uOiBmaXhlZDsNCgkJCQltYXJnaW4tdG9wOiAzJTsNCgkJCQl0b3A6IDUwJTsNCgkJCQlsZWZ0OiA1MCU7DQoJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTsNCgkJCQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCgkJCQlwYWRkaW5nOiAzMHB4IDEwcHg7DQoJCQkJcGFkZGluZy1ib3R0b206IDA7DQoJCQkJYm9yZGVyLXJhZGl1czogMTBweDsNCgkJCQl6LWluZGV4OiAxMTAxMDsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLmNsb3Nlew0KCQkJCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgkJCQlyaWdodDogMHB4Ow0KCQkJCXRvcDogMHB4Ow0KCQkJCXdpZHRoOiA0MHB4Ow0KCQkJCWhlaWdodDogNDBweDsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyew0KCQkJCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgkJCQlsZWZ0OiA1MCU7DQoJCQkJdG9wOiA1MCU7DQoJCQkJY29udGVudDogJyc7DQoJCQkJd2lkdGg6IDE2cHg7DQoJCQkJaGVpZ2h0OiAycHg7DQoJCQkJYm9yZGVyLXJhZGl1czogMXB4Ow0KCQkJCWJhY2tncm91bmQtY29sb3I6ICMyMjI7DQoJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoNDVkZWcpOw0KCQkJfQ0KCQkJI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyLCN3dC1zZXQtYm94IC5jbG9zZTo6YWZ0ZXJ7DQoJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoLTQ1ZGVnKTsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLnRpdGxlew0KCQkJCWZvbnQtd2VpZ2h0OiA2MDA7DQoJCQkJZm9udC1zaXplOiAxNnB4Ow0KCQkJCWNvbG9yOiAjM2EzYTNhOw0KCQkJCXRleHQtYWxpZ246IGNlbnRlcjsNCgkJCQltYXJnaW4tYm90dG9tOiAyMHB4Ow0KCQkJfQ0KCQkJI3d0LWxvZ2luLWJveCAuaW5wdXQtYm94ew0KCQkJCWRpc3BsYXk6IGZsZXg7DQoJCQkJYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsNCgkJCQl3aWR0aDogMjMwcHg7DQoJCQkJaGVpZ2h0OiAzNXB4Ow0KCQkJCWJvcmRlci1yYWRpdXM6IDMwcHg7DQoJCQkJb3ZlcmZsb3c6IGhpZGRlbjsNCgkJCQlmb250LXNpemU6IDEycHg7DQoJCQl9DQoJCQkjd3QtbG9naW4tYm94IC5pbnB1dC1ib3ggaW5wdXR7DQoJCQkJd2lkdGg6IDEwMCU7DQoJCQkJaGVpZ2h0OiAxMDAlOw0KCQkJCXBhZGRpbmctbGVmdDogMTVweDsNCgkJCQlib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KCQkJCW91dGxpbmU6IG5vbmU7DQoJCQkJYm9yZGVyOiBub25lOw0KCQkJCWJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7DQoJCQkJZm9udC1zaXplOiAxMHB4Ow0KCQkJCWNvbG9yOiBibGFjazsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0bnsNCgkJCQl3aWR0aDogMTAwcHg7DQoJCQkJcGFkZGluZzogMnB4Ow0KCQkJfQ0KCQkJI3d0LWxvZ2luLWJveCAubG9naW4tYnRuIGJ1dHRvbnsNCgkJCQl3aWR0aDogMTAwJTsNCgkJCQloZWlnaHQ6IDEwMCU7DQoJCQkJYm9yZGVyLXJhZGl1czogMzBweDsNCgkJCQlib3JkZXI6IG5vbmU7DQoJCQkJY29sb3I6IHdoaXRlOw0KCQkJCXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQoJCQkJYmFja2dyb3VuZC1jb2xvcjogI2VjNDA3YTsNCgkJCX0NCgkJYCkNCgkJJCgiI3d0LWxvZ2luLW1hc2siKS5vbigiY2xpY2siLCAoKSA9PiB7DQoJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94JykNCgkJCSQoIiN3dC1sb2dpbi1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKQ0KCQl9KQ0KCQkkKCIjd3QtbG9naW4tYm94IC5jbG9zZSIpLm9uKCJjbGljayIsICgpID0+IHsNCgkJCSQoJyN3dC1sb2dpbi1tYXNrJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQ0KCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKQ0KCQkJJCgiI3d0LWxvZ2luLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpDQoJCX0pDQoJCSQoIiN3dC1sb2dpbi1ib3ggLnRvLWluZGV4Iikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJd2luZG93Lm9wZW4oc3VwZXJWaXAuX0NPTkZJR18uaG9tZVBhZ2UpDQoJCX0pDQoJCSQoIiN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b24iKS5vbigiY2xpY2siLCAoKSA9PiB7DQoJCQlpZiAoIXd0X2luaXRfY29kZSkgew0KCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQl0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2cNCgkJCQl9KTsNCgkJCQlyZXR1cm4NCgkJCX0NCgkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpDQoJCQkkKCIjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9uIikuYWRkQ2xhc3MoJ2J0bi1hbmltYScpDQoJCQlzZXRUaW1lb3V0KCgpID0+IHsNCgkJCQkkKCIjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9uIikucmVtb3ZlQ2xhc3MoJ2J0bi1hbmltYScpDQoJCQl9LCA1MDApDQoJCQljb25zdCBwd2QgPSAkKCIjd3QtbG9naW4tYm94IGlucHV0IikudmFsKCkNCgkJCWNvbnN0IG1kNWMgPSBtZDV4KCkNCgkJCWNvbnN0IGRtZDUgPSBtZDV4KG1kNWMsICdkZScpDQoJCQlpZiAoIXB3ZCB8fCBwd2QgIT0gZG1kNS5jb2RlKSB7DQoJCQkJc2V0VGltZW91dCgoKSA9PiB7DQoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQl0aXRsZTogJ+eZu+W9leeggemUmeivrycNCgkJCQkJfSkNCgkJCQl9LCAyNTAwKQ0KCQkJCXJldHVybg0KCQkJfQ0KCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCXNldFRpbWVvdXQoKCkgPT4gew0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6ICfor7fli7/lnKjmtbfop5LlubPlj7Dlj5Hooagg6ISa5pys44CB56C06Kej562J6KiA6K6677yM5piT5a+86Ie05Y2a5Li75LiN5pu05paw77yM5bmz5Y+w5L+u5aSN5ryP5rSe562J5b2x5ZONJyxzdWNjZXNzOiAoZSk9PnsNCgkJCQkJaWYoZSl7DQoJCQkJCQljb25zdCByZXMgPSB7DQoJCQkJCQkJYXZhdGFyOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ28vbG9nb193aGl0ZTEucG5nJywNCgkJCQkJCQlsb2dpbl9kYXRlOiBuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApLA0KCQkJCQkJCXRva2VuOiBtZDVjDQoJCQkJCQl9DQoJCQkJCQkkKCIjd3QtbXkgaW1nIikuYWRkQ2xhc3MoJ21hcmdpbi1sZWZ0JykNCgkJCQkJCSQoJyN3dC1teSBpbWcnKS5hdHRyKCdzcmMnLCByZXMuYXZhdGFyKQ0KCQkJCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJCQkkKCIjd3QtbG9naW4tYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpDQoJCQkJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykNCgkJCQkJCXN1cGVyVmlwLl9DT05GSUdfLnVzZXIgPSByZXMNCgkJCQkJCUdNX3NldFZhbHVlKCdqc3hsX3VzZXInLCByZXMpDQoJCQkJCQl3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkNCgkJCQkJfQ0KCQkJCX19KQ0KCQkJfSwgMjUwMCkNCgkJfSkNCgl9LA0KDQoJZmluZFRhcmdldEVsZW1lbnQ6ICh0YXJnZXRDb250YWluZXIsbWF4VHJ5VGltZT0zMCk9PiB7DQoJCWNvbnN0IGJvZHkgPSB3aW5kb3cuZG9jdW1lbnQ7DQoJCWxldCB0YWJDb250YWluZXI7DQoJCWxldCB0cnlUaW1lID0gMDsNCgkJbGV0IHN0YXJ0VGltZXN0YW1wOw0KCQlyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gew0KCQkJZnVuY3Rpb24gdHJ5RmluZEVsZW1lbnQodGltZXN0YW1wKSB7DQoJCQkJaWYgKCFzdGFydFRpbWVzdGFtcCkgew0KCQkJCQlzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsNCgkJCQl9DQoJCQkJY29uc3QgZWxhcHNlZFRpbWUgPSB0aW1lc3RhbXAgLSBzdGFydFRpbWVzdGFtcDsNCgkJCQlpZiAoZWxhcHNlZFRpbWUgPj0gNTAwKSB7DQoJCQkJCWNvbnNvbGUubG9nKCJmaW5kIGVsZW1lbnTvvJoiICsgdGFyZ2V0Q29udGFpbmVyICsgIu+8jHRoaXMiICsgdHJ5VGltZSArICJudW0iKQ0KCQkJCQl0YWJDb250YWluZXIgPSBib2R5LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0Q29udGFpbmVyKQ0KCQkJCQlpZiAodGFiQ29udGFpbmVyKSB7DQoJCQkJCQlyZXNvbHZlKHRhYkNvbnRhaW5lcikNCgkJCQkJfSBlbHNlIGlmICgrK3RyeVRpbWUgPT09IG1heFRyeVRpbWUpIHsNCgkJCQkJCXJlamVjdCgpDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcA0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICghdGFiQ29udGFpbmVyICYmIHRyeVRpbWUgPCBtYXhUcnlUaW1lKSB7DQoJCQkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSh0cnlGaW5kRWxlbWVudCk7DQoJCQkJfQ0KCQkJfQ0KCQkJcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRyeUZpbmRFbGVtZW50KTsNCgkJfSk7DQoJfSwNCg0KCXJlcGxhY2VFeGlzdFJlc291cmNlczogKGJvZHkpID0+IHsNCgkJbGV0IGF0dGFjaG1lbnRzID0gYm9keS5hdHRhY2htZW50czsNCgkJbGV0IGFsbF9pbWcgPSB7fTsNCgkJbGV0IGhhc192aWRlbyA9IC0xOw0KCQlsZXQgaGFzX2F1ZGlvID0gLTE7DQoJCWZvciAodmFyIGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHsNCgkJCXZhciBhdHRhID0gYXR0YWNobWVudHNbaV07DQoJCQlpZiAoYXR0YS5jYXRlZ29yeSA9PT0gJ2ltYWdlcycpIHsNCgkJCQlhbGxfaW1nW2F0dGEuaWRdID0gYXR0YS5yZW1vdGVVcmw7DQoJCQl9DQoJCQlpZiAoYXR0YS5jYXRlZ29yeSA9PT0gJ2F1ZGlvJykgew0KCQkJCWhhc19hdWRpbyA9IGk7DQoJCQkJcmV0dXJuIFtib2R5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGFzX2F1ZGlvXTsNCgkJCX0NCgkJCWlmIChhdHRhLmNhdGVnb3J5ID09PSAndmlkZW8nKSB7DQoJCQkJaGFzX3ZpZGVvID0gaTsNCgkJCQlyZXR1cm4gW2JvZHksIHVuZGVmaW5lZCwgaGFzX3ZpZGVvLCB1bmRlZmluZWRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBbYm9keSwgYWxsX2ltZywgaGFzX3ZpZGVvXTsNCgl9LA0KDQoJc2xlZXA6ICh0aW1lKSA9PiB7DQoJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHsNCgkJCXNldFRpbWVvdXQoKCkgPT4gew0KCQkJCXJlcygpDQoJCQl9LCB0aW1lKQ0KCQl9KQ0KCX0sDQoNCglnZXRNM3U4UGF0aDogKHVybCkgPT4gew0KCQlpZihsb2NhdGlvbi5ob3N0bmFtZSA9PSAnaGpkZjM5LmNvbScgJiYgIXVybC5zdGFydHNXaXRoKCdodHRwJykpIHVybCA9ICdodHRwczovL2hqYTQ1MC50b3AnICsgdXJsDQoJCXZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQoJCXJlcXVlc3Qub3BlbignR0VUJywgdXJsLCBmYWxzZSk7DQoJCXJlcXVlc3Quc2VuZChudWxsKTsNCgkJaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAyMDApIHsNCgkJCXJldHVybiB1cmw7DQoJCX0NCgkJbGV0IHRzX3BhdGggPSByZXF1ZXN0LnJlc3BvbnNlVGV4dC5zcGxpdCgnXG4nKVs2XTsNCgkJbGV0IHJlZyA9IHRzX3BhdGgubWF0Y2goLyhbXHdfXStfPylbXGRdKy50cy8pOw0KCQlyZXR1cm4gdHNfcGF0aC5yZXBsYWNlKHJlZ1swXSwgcmVnWzFdICsgJy5tM3U4JykNCgl9LA0KDQoJZ2V0VXNlckRpY3Q6IChpZCkgPT4gew0KCQl2YXIgdXJsID0gYGh0dHBzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9L2FwaS90b3BpYy9ub2RlL3RvcGljcz9wYWdlPTEmdXNlcklkPSR7aWR9JnR5cGU9MGA7DQoJCXZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQoJCXJlcXVlc3Qub3BlbignR0VUJywgdXJsLCBmYWxzZSk7DQoJCXJlcXVlc3Quc2VuZChudWxsKTsNCgkJaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAyMDApIHsNCgkJCXJldHVybiB7fTsNCgkJfQ0KCQlsZXQgcCA9IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQsIGB1dGYtOGApLmRhdGE7DQoJCXAgPSBKU09OLnBhcnNlKGRlY29kZShwLCBzdXBlclZpcCksIGB1dGYtOGApOw0KCQlsZXQgdG90YWwgPSBwLnBhZ2UudG90YWw7DQoJCWxldCB1aWQgPSAnJzsNCgkJaWYgKGByZXN1bHRzYCBpbiBwKSB7DQoJCQl1aWQgPSBwLnJlc3VsdHNbMF0udXNlci5uaWNrbmFtZTsNCgkJfQ0KCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gJyh1Keiiq+Wwgeemgei0puWPtycNCgkJcmV0dXJuIHsNCgkJCSdpc0Zhdm9yaXRlJzogZmFsc2UsDQoJCQknbGlrZUNvdW50JzogMTIsDQoJCQkndXNlcic6IHsNCgkJCQknaWQnOiBwYXJzZUludChpZCksDQoJCQkJJ25pY2tuYW1lJzogJ+iiq+Wwgeemgei0puWPtycsDQoJCQkJJ2F2YXRhcic6ICcwJywNCgkJCQknZGVzY3JpcHRpb24nOiBg6K+l6LSm5Y+35bey6KKr5bCB56aBYCwNCgkJCQkndG9waWNDb3VudCc6IHRvdGFsLA0KCQkJCSd2aWRlb0NvdW50JzogMCwNCgkJCQknY29tbWVudENvdW50JzogMzAzLA0KCQkJCSdmYW5zQ291bnQnOiA1NywNCgkJCQknZmF2b3JpdGVDb3VudCc6IDM5LA0KCQkJCSdzdGF0dXMnOiAwLA0KCQkJCSdzZXgnOiAxLA0KCQkJCSd2aXAnOiAwLA0KCQkJCSd2aXBFeHBpcmVzVGltZSc6ICcwMDAxLTAxLTAxIDAwOjAwOjAwJywNCgkJCQknY2VydGlmaWVkJzogZmFsc2UsDQoJCQkJJ2NlcnRWaWRlbyc6IGZhbHNlLA0KCQkJCSdjZXJ0UHJvZmVzc29yJzogZmFsc2UsDQoJCQkJJ2ZhbW91cyc6IGZhbHNlLA0KCQkJCSdmb3JiaWRkZW4nOiBmYWxzZSwNCgkJCQkndGFncyc6IG51bGwsDQoJCQkJJ3JvbGUnOiAwLA0KCQkJCSdwb3B1bGFyaXR5JzogMTAsDQoJCQkJJ2RpYW1vbmRDb25zdW1lJzogMCwNCgkJCQkndGl0bGUnOiB7DQoJCQkJCSdpZCc6IDAsDQoJCQkJCSduYW1lJzogJycsDQoJCQkJCSdjb25zdW1lJzogMCwNCgkJCQkJJ2NvbnN1bWVFbmQnOiAwLA0KCQkJCQknaWNvbic6IHAucmVzdWx0c1swXS51c2VyLnRpdGxlLmljb24NCgkJCQl9LA0KCQkJCSdmcmllbmRTdGF0dXMnOiBmYWxzZSwNCgkJCQkndm9pY2VTdGF0dXMnOiBmYWxzZSwNCgkJCQkndmlkZW9TdGF0dXMnOiBmYWxzZSwNCgkJCQkndm9pY2VNb25leVR5cGUnOiAwLA0KCQkJCSd2b2ljZUFtb3VudCc6IDAsDQoJCQkJJ3ZpZGVvTW9uZXlUeXBlJzogMCwNCgkJCQkndmlkZW9BbW91bnQnOiAwLA0KCQkJCSdkZXBvc2l0TW9uZXknOiAwDQoJCQl9DQoJCX0NCgl9LA0KDQoJbW9kaWZ5VXNlcjogKGRhdGEsIGlkKSA9PiB7DQoJCWlmIChkYXRhLmVycm9yQ29kZSA9PT0gMCkgew0KCQkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhLmRhdGEpID09ICdvYmplY3QnKSB7DQoJCQkJc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPSB0cnVlDQoJCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCB0aXRsZScpLmlubmVySFRNTCA9ICcodSknICsgZGF0YS5kYXRhLnVzZXIubmlja25hbWUNCgkJCX0gZWxzZSB7DQoJCQkJbGV0IGJvZHkgPSAnJw0KCQkJCXRyeSB7DQoJCQkJCWJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLmRhdGEsIHN1cGVyVmlwKSk7DQoJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQlib2R5ID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YS5kYXRhLCBzdXBlclZpcCwgdHJ1ZSkpOw0KCQkJCX0NCgkJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gJyh1KScgKyBib2R5LnVzZXIubmlja25hbWUNCgkJCX0NCgkJCXJldHVybiBkYXRhOw0KCQl9DQoJCWRhdGEuaXNFbmNyeXB0ZWQgPSB0cnVlOw0KCQlkYXRhLmVycm9yQ29kZSA9IDA7DQoJCWRhdGEuc3VjY2VzcyA9IHRydWU7DQoJCWRhdGEubWVzc2FnZSA9ICIiOw0KCQlsZXQgdWRpY3QgPSB1dGlsLmdldFVzZXJEaWN0KGlkKTsNCgkJZGF0YS5kYXRhID0gdXRpbC5qZW5jb2RlKHVkaWN0LCAncGx1cycpDQoJCXJldHVybiBkYXRhDQoJfSwNCg0KCW1vZGlmeURhdGE6IChkYXRhKSA9PiB7DQoJCWxldCBib2R5ID0gJycNCgkJbGV0IGlzUGx1cyA9IGZhbHNlDQoJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCB8fCB0eXBlb2YoZGF0YSkgPT0gJ29iamVjdCcpIHsNCgkJCXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID0gdHJ1ZQ0KCQkJYm9keSA9IGRhdGENCgkJfSBlbHNlIHsNCgkJCXRyeSB7DQoJCQkJYm9keSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSk7DQoJCQl9IGNhdGNoIChlKSB7DQoJCQkJYm9keSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwLCB0cnVlKSk7DQoJCQkJaXNQbHVzID0gdHJ1ZQ0KCQkJfQ0KCQl9DQoJCWlmICghYm9keSkgcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gJ251bGwnIDogJ1dXMDFWMk15U2tKUVZEQTknDQoJCWlmICgkLmlzRW1wdHlPYmplY3QoYm9keSkpIHJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/ICd7fScgOiAnV2xSTmQxQlJQVDA9Jw0KCQlzdXBlclZpcC5fQ09ORklHXy51c2VySWQgPSBib2R5LnVzZXIuaWQNCgkJaWYgKGJvZHkuYXR0YWNobWVudHMgJiYgYm9keS5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7DQoJCQlsZXQgdHlwZXMgPSBbXQ0KCQkJYm9keS5hdHRhY2htZW50cy5mb3JFYWNoKGl0ZW0gPT4gew0KCQkJCWlmIChpdGVtLmNhdGVnb3J5ID09ICd2aWRlbycgJiYgKCF0eXBlcy5pbmNsdWRlcygndmlkZW8nKSkpIHsNCgkJCQkJdHlwZXMucHVzaCgndmlkZW8nKQ0KCQkJCX0NCgkJCQlpZihpdGVtLmNhdGVnb3J5ID09ICd2aWRlbycgJiYgIWl0ZW0ucmVtb3RlVXJsKXsNCgkJCQkJbGV0IHVpZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VpZCcpDQoJCQkJCWxldCB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykNCgkJCQkJaWYoIXVpZCB8fCAhdG9rZW4pew0KCQkJCQkJdWlkID0gMTY5OTI3NTkzOTAxDQoJCQkJCQl0b2tlbiA9ICc3MDE0ODgxMTY0NTg0YjlkOGNjZjZiMmZlY2M0Mzc0NycNCgkJCQkJfQ0KCQkJCQkkLnBvc3Qoew0KCQkJCQkJdXJsOiBsb2NhdGlvbi5vcmlnaW4gKyAnL2FwaS9hdHRhY2htZW50JywNCgkJCQkJCWhlYWRlcnM6IHsNCgkJCQkJCQknWC1Vc2VyLUlkJzogdWlkLA0KCQkJCQkJCSdYLVVzZXItVG9rZW4nOiB0b2tlbg0KCQkJCQkJfSwNCgkJCQkJCWRhdGE6IEpTT04uc3RyaW5naWZ5KHsNCgkJCQkJCQlpZDogaXRlbS5pZCwNCgkJCQkJCQlyZXNvdXJjZV90eXBlOiAndG9waWMnLA0KCQkJCQkJCXJlc291cmNlX2lkOiBib2R5LnRvcGljSWQsDQoJCQkJCQkJbGluZTogJycNCgkJCQkJCX0pDQoJCQkJCX0pDQoJCQkJfQ0KCQkJCWlmIChpdGVtLmNhdGVnb3J5ID09ICdhdWRpbycgJiYgKCF0eXBlcy5pbmNsdWRlcygnYXVkaW8nKSkpIHR5cGVzLnB1c2goJ2F1ZGlvJykNCgkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAnaW1hZ2VzJyAmJiAoIXR5cGVzLmluY2x1ZGVzKCdpbWcnKSkpIHR5cGVzLnB1c2goJ2ltZycpDQoJCQl9KQ0KCQkJdHlwZXMgPSAnWycgKyB0eXBlcy5qb2luKCcgKyAnKSArICddJw0KCQkJYm9keS50aXRsZSA9ICh0eXBlcyArIGJvZHkudGl0bGUpDQoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyBib2R5LnRpdGxlIDogZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShib2R5LnRpdGxlKSkNCgkJfQ0KCQlsZXQgW25ib2R5LCByZXN0X2ltZywgaGFzX3ZpZGVvLCBoYXNfYXVkaW9dID0gdXRpbC5yZXBsYWNlRXhpc3RSZXNvdXJjZXMoYm9keSk7DQoJCWJvZHkgPSBuYm9keTsNCgkJaWYgKCdzYWxlJyBpbiBib2R5ICYmIGJvZHkuc2FsZSAhPT0gbnVsbCkgew0KCQkJYm9keS5zYWxlLmlzX2J1eSA9IHRydWU7DQoJCQlib2R5LnNhbGUuYnV5X2luZGV4ID0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqICg1MDAwIC0gMTAwMCArIDEpICsgMTAwMCwgMTApOw0KCQl9DQoJCWlmIChoYXNfdmlkZW8gPj0gMCB8fCBoYXNfYXVkaW8gPj0gMCkgew0KCQkJbGV0IGluc2VydERvbSA9ICcnDQoJCQlpZiAoaGFzX3ZpZGVvID49IDApIHsNCgkJCQlpZihib2R5LmF0dGFjaG1lbnRzW2hhc192aWRlb10ucmVtb3RlVXJsKXsNCgkJCQkJYm9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLnJlbW90ZVVybCA9IHV0aWwuZ2V0TTN1OFBhdGgoYm9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLnJlbW90ZVVybCk7DQoJCQkJCXRyeXsgYm9keS5jb250ZW50ID0gYm9keS5jb250ZW50LnJlcGxhY2UoYm9keS5jb250ZW50Lm1hdGNoKC88dmlkZW8gc3JjPSIoW14iXSspIi8pWzFdLGJvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5yZW1vdGVVcmwpfWNhdGNoKGUpe30NCgkJCQl9DQoJCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSBib2R5LmF0dGFjaG1lbnRzW2hhc192aWRlb10ucmVtb3RlVXJsDQoJCQkJaW5zZXJ0RG9tID0NCgkJCQkJYDxkaXY+PHZpZGVvIHN0eWxlPSJkaXNwbGF5Om5vbmUiIHNyYz0iJHtib2R5LmF0dGFjaG1lbnRzW2hhc192aWRlb10ucmVtb3RlVXJsfSIgZGF0YS1pZD0iJHtib2R5LmF0dGFjaG1lbnRzW2hhc192aWRlb10uaWR9Ij48L3ZpZGVvPjwvZGl2PmANCgkJCX0gZWxzZSB7DQoJCQkJaW5zZXJ0RG9tID0NCgkJCQkJYDxkaXYgc3R5bGU9Im1hcmdpbjogMjBweDsiPjxhdWRpbyBpZD0ic2hvd2F1ZGlvIiBzcmM9IiR7Ym9keS5hdHRhY2htZW50c1toYXNfYXVkaW9dLnJlbW90ZVVybH0iIGNvbnRyb2xzIGNvbnRyb2xzbGlzdD0ibm9kb3dubG9hZCI+PC9hdWRpbz48L2Rpdj5gDQoJCQl9DQoJCQl0cnkgew0KCQkJCWNvbnN0IHJlZ1JlcCA9IC9jbGFzcz0ic2VsbF9saW5lMiJcPlteXDxdKzxcL3NwYW4+Ly5leGVjKGJvZHkuY29udGVudClbMF0NCgkJCQlib2R5LmNvbnRlbnQgPSBib2R5LmNvbnRlbnQucmVwbGFjZSgnPHNwYW4gY2xhc3M9InNlbGwtYnRuIicsDQoJCQkJCSc8ZGl2IGlkPSJ3dC1yZXNvdXJjZXMtYm94Ij48ZGl2IGNsYXNzPSJzZWxsLWJ0biInKS5yZXBsYWNlKHJlZ1JlcCwgcmVnUmVwICsgaW5zZXJ0RG9tICsNCgkJCQkJJzwvZGl2PjwvZGl2PicpOw0KCQkJfSBjYXRjaCAoZSkgew0KCQkJCWJvZHkuY29udGVudCArPSBpbnNlcnREb20NCgkJCX0NCgkJCXJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/IGJvZHkgOiB1dGlsLmplbmNvZGUoYm9keSwgaXNQbHVzKTsNCgkJfQ0KCQlsZXQgZG9tX2VsZW1lbnRzID0gW10NCgkJZm9yIChjb25zdCBbaWQsIHNyY10gb2YgT2JqZWN0LmVudHJpZXMocmVzdF9pbWcpKSB7DQoJCQlkb21fZWxlbWVudHMucHVzaChgPGltZyBzcmM9IiR7c3JjfSIgZGF0YS1pZD0iJHtpZH0iLz5gKTsNCgkJfQ0KCQlsZXQgc2VsbGVkX2ltZyA9IGBbc2VsbF1gICsgJzxwPicgKyBkb21fZWxlbWVudHMuam9pbignPC9wPjxwPicpICsgJzwvcD4nICsgYFsvc2VsbF1gOw0KCQlsZXQgbmNvbnRlbnQgPSBib2R5LmNvbnRlbnQucmVwbGFjZSgvPHNwYW4gY2xhc3M9XCJzZWxsLWJ0blwiLio8XC9zcGFuPi8sIHNlbGxlZF9pbWcpOw0KCQlib2R5LmNvbnRlbnQgPSBuY29udGVudDsNCgkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gYm9keSA6IHV0aWwuamVuY29kZShib2R5LCBpc1BsdXMpOw0KCX0sDQoNCglmb3JtYXRUaXRsZTogKGRhdGEpID0+IHsNCgkJaWYgKCFkYXRhKSByZXR1cm4gZGF0YQ0KCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgfHwgdHlwZW9mKGRhdGEpID09ICdvYmplY3QnKSB7DQoJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUNCgkJfSBlbHNlIHsNCgkJCWRhdGEgPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLCBzdXBlclZpcCkpDQoJCX0NCgkJaWYgKCFkYXRhIHx8IGRhdGEgPT0gJ251bGwnKSByZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyAnbnVsbCcgOiAnV1cwMVYyTXlTa0pRVkRBOScNCgkJaWYgKCFkYXRhLnJlc3VsdHMpIHsNCgkJCWRhdGEucmVzdWx0cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpDQoJCQlkYXRhLmlzTGlzdCA9IHRydWUNCgkJfQ0KCQlkYXRhLnJlc3VsdHMuZm9yRWFjaChpdGVtID0+IHsNCgkJCWlmIChpdGVtLmF0dGFjaG1lbnRzICYmIGl0ZW0uYXR0YWNobWVudHMubGVuZ3RoID4gMCkgew0KCQkJCWxldCB0eXBlcyA9IFtdDQoJCQkJaWYgKGl0ZW0uaGFzVmlkZW8gJiYgIXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB0eXBlcy5wdXNoKCd2aWRlbycpDQoJCQkJaWYgKGl0ZW0uaGFzQXVkaW8gJiYgIXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB0eXBlcy5wdXNoKCdhdWRpbycpDQoJCQkJaWYgKGl0ZW0uaGFzUGljICYmICFzdXBlclZpcC5fQ09ORklHXy5oamVkZCkgdHlwZXMucHVzaCgnaW1nJykNCgkJCQlpZiAodHlwZXMubGVuZ3RoID4gMCkgew0KCQkJCQl0eXBlcyA9ICdbJyArIHR5cGVzLmpvaW4oJyArICcpICsgJ10nDQoJCQkJCWl0ZW0udGl0bGUgPSAodHlwZXMgKyBpdGVtLnRpdGxlKQ0KCQkJCX0gZWxzZSB7DQoJCQkJCWxldCBpbWdDb3VudCA9IDANCgkJCQkJaXRlbS5hdHRhY2htZW50cy5mb3JFYWNoKGl0ZW0gPT4gew0KCQkJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ3ZpZGVvJyAmJiAoIXR5cGVzLmluY2x1ZGVzKCd2aWRlbycpKSkgdHlwZXMucHVzaCgNCgkJCQkJCQkndmlkZW8nKQ0KCQkJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ2F1ZGlvJyAmJiAoIXR5cGVzLmluY2x1ZGVzKCdhdWRpbycpKSkgdHlwZXMucHVzaCgNCgkJCQkJCQknYXVkaW8nKQ0KCQkJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ2ltYWdlcycpIHsNCgkJCQkJCQlpZiAoIXR5cGVzLmluY2x1ZGVzKCdpbWcnKSkgdHlwZXMucHVzaCgnaW1nJykNCgkJCQkJCQlpbWdDb3VudCsrDQoJCQkJCQl9DQoJCQkJCX0pDQoJCQkJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCAmJiAoaW1nQ291bnQgPiAyKSAmJiAhdHlwZXMuaW5jbHVkZXMoJ3ZpZGVvJykpIHR5cGVzDQoJCQkJCQkucHVzaCgnPycpDQoJCQkJCWlmICh0eXBlcy5sZW5ndGggPiAwKSB7DQoJCQkJCQl0eXBlcyA9ICdbJyArIHR5cGVzLmpvaW4oJyArICcpICsgJ10nDQoJCQkJCQlpdGVtLnRpdGxlID0gKHR5cGVzICsgaXRlbS50aXRsZSkNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSkNCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB7DQoJCQlyZXR1cm4gZGF0YS5pc0xpc3QgPyBkYXRhLmlzTGlzdCA6IGRhdGENCgkJfSBlbHNlIHsNCgkJCXJldHVybiBkYXRhLmlzTGlzdCA/IHV0aWwuamVuY29kZShkYXRhLnJlc3VsdHMpIDogdXRpbC5qZW5jb2RlKGRhdGEpDQoJCX0NCgl9LA0KDQoJbGFzdGluZ1Rva2VuOiAoZGF0YSkgPT4gew0KCQlpZiAoIWRhdGEpIHJldHVybiBkYXRhOw0KCQlsZXQgaW5mbyA9ICcnDQoJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCB8fCB0eXBlb2YoZGF0YSkgPT0gJ29iamVjdCcpIHsNCgkJCXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID0gdHJ1ZQ0KCQkJaW5mbyA9IGRhdGENCgkJfSBlbHNlIHsNCgkJCWluZm8gPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLCBzdXBlclZpcCkpDQoJCX0NCgkJY29uc3QgdXNlciA9IGluZm8udXNlciA/IGluZm8udXNlciA6IGluZm8NCgkJdXNlci50aXRsZSA9IHsNCgkJCWlkOiA2LA0KCQkJbmFtZTogdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KCfnpZ7osaonKSksDQoJCQljb25zdW1lOiAxMDAwMDAwMCwNCgkJCWNvbnN1bWVFbmQ6IDAsDQoJCQlpY29uOiAiaHR0cHM6Ly9oanBpYy5oanBmZTEuY29tL2hqc3RvcmUvc3lzdGVtL25vZGUvdXNlcnRpdGxlNi5wbmc/dmVyPTE2NTQ1OTAyMzUiDQoJCX0NCgkJdXNlci52aXAgPSA0DQoJCXVzZXIuZmFtb3VzID0gdHJ1ZQ0KCQlyZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyBpbmZvIDogdXRpbC5qZW5jb2RlKGluZm8pDQoJfSwNCg0KCWZvcm1hdFZpZGVvOiAoZGF0YSkgPT4gew0KCQlpZiAoIWRhdGEpIHJldHVybiBkYXRhDQoJCWxldCB2aWRlbyA9ICcnDQoJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCB8fCB0eXBlb2YoZGF0YSkgPT0gJ29iamVjdCcpIHsNCgkJCXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID0gdHJ1ZQ0KCQkJdmlkZW8gPSBkYXRhDQoJCX0gZWxzZSB7DQoJCQl2aWRlbyA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSkNCgkJfQ0KCQl2aWRlby50eXBlID0gMQ0KCQl2aWRlby5hbW91bnQgPSAwDQoJCXZpZGVvLm1vbmV5X3R5cGUgPSAwDQoJCXZpZGVvLnZpcCA9IDANCgkJaWYgKHZpZGVvLnJlbW90ZVVybCAmJiAhdmlkZW8ucmVtb3RlVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkgew0KCQkJaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCd2aWRlb3BsYXknKSkgew0KCQkJCXZpZGVvLnJlbW90ZVVybCA9IHV0aWwuZ2V0TTN1OFBhdGgodmlkZW8ucmVtb3RlVXJsKQ0KCQkJCXN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsID0gdmlkZW8ucmVtb3RlVXJsDQoJCQl9IGVsc2Ugew0KCQkJCWlmIChzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybCkgdmlkZW8ucmVtb3RlVXJsID0gc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwNCgkJCQllbHNlIHsNCgkJCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSB1dGlsLmdldE0zdThQYXRoKHZpZGVvLnJlbW90ZVVybCkNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gdmlkZSA6IHV0aWwuamVuY29kZSh2aWRlbykNCgl9LA0KDQoJY2hlY2tVcGRhdGU6IChjaGVjaykgPT4gew0KCQljb25zdCBhdXRvVXBkYXRlZFZlcnNpb25EYXRlID0gR01fZ2V0VmFsdWUoJ2hhaWppYW9fYXV0b191cGRhdGVkX2RhdGUnLCAwKQ0KCQlpZiAoYXV0b1VwZGF0ZWRWZXJzaW9uRGF0ZSA+IERhdGUubm93KCkgJiYgIWNoZWNrKSByZXR1cm4gew0KCQkJY29kZTogLTEwMCwNCgkJCW1zZzogJ+ajgOa1i+abtOaWsOmikeeOh+mZkOWIticNCgkJfQ0KCQlpZiAoY2hlY2sgJiYgR01fZ2V0VmFsdWUoJ2hhaWppYW9fdXBkYXRlZF9uZXh0X2RhdGUnLCAwKSA+IERhdGUubm93KCkpIHJldHVybiB7DQoJCQljb2RlOiAtMjAwLA0KCQkJbXNnOiAn6K+35ZyoICcgKyBuZXcgRGF0ZShHTV9nZXRWYWx1ZSgnaGFpamlhb191cGRhdGVkX25leHRfZGF0ZScsIDApKS50b0xvY2FsZVN0cmluZygpICsgJyDlkI7lho3mo4Dmn6Xmm7TmlrAnDQoJCX0NCgkJR01fc2V0VmFsdWUoJ2hhaWppYW9fdXBkYXRlZF9uZXh0X2RhdGUnLCBEYXRlLm5vdygpICsgNjAwMDAwKQ0KCQljb25zdCBzY3JpcHQgPSBHTV9pbmZvDQoJCWlmICghc2NyaXB0KSByZXR1cm4gew0KCQkJY29kZTogLTMwMCwNCgkJCW1zZzogJ+iOt+WPlueJiOacrOWPt+Wksei0pScNCgkJfQ0KCQlsZXQgcmVzdWx0ID0gew0KCQkJY29kZTogMSwNCgkJCW1zZzogJ29rJw0KCQl9DQoJCXRyeSB7DQoJCQljb25zdCB3dF9oYWlqaWFvX2ZpcnN0X3VzZSA9IEdNX2dldFZhbHVlKCd3dF9oYWlqaWFvX2ZpcnN0X3VzZScsICcnKQ0KCQkJJC5hamF4U2V0dXAoew0KCQkJCWFzeW5jOiBmYWxzZQ0KCQkJfSk7DQoJCQkkLmdldCgnaHR0cHM6Ly9mYy1tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIubmV4dC5ic3BhcHAuY29tL2NvbW1vbi91cGRhdGVDaGVjaycsIHsNCgkJCQluYW1lOiAnaGFpamlhbycsDQoJCQkJdmVyc2lvbjogc2NyaXB0LnNjcmlwdC52ZXJzaW9uLA0KCQkJCXVzZV9kYXRlOiAod3RfaGFpamlhb19maXJzdF91c2UgPyB3dF9oYWlqaWFvX2ZpcnN0X3VzZSA6IERhdGUubm93KCkgKyAoTWF0aC5yb3VuZChNYXRoDQoJCQkJCS5yYW5kb20oKSAqIDg5OTk5OSArIDEwMDAwMCkgKyAnJykpDQoJCQl9LCBmdW5jdGlvbihyZXMpIHsNCgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19hdXRvX3VwZGF0ZWRfZGF0ZScsIERhdGUubm93KCkgKyAxODAwMDAwMCkNCgkJCQlpZiAocmVzLmNvZGUgIT0gMCkgcmVzdWx0ID0gew0KCQkJCQljb2RlOiAtNDAwLA0KCQkJCQltc2c6ICfojrflj5bniYjmnKzkv6Hmga/lpLHotKUnDQoJCQkJfQ0KCQkJCWlmICgocmVzLnVwZGF0ZV9tc2cgJiYgcmVzLmlzX3VwZGF0ZSkgfHwgcmVzLm1zZyB8fCByZXMubm90aWZ5X2FsbCkgew0KCQkJCQlsZXQgbXNnID0gJycNCgkJCQkJaWYgKHJlcy5ub3RpZnlfYWxsKSBtc2cgKz0gJzxwPi0gICcgKyByZXMubm90aWZ5X2FsbCArICc8cC8+Jw0KCQkJCQlpZiAocmVzLm1zZykgbXNnICs9ICc8cD4tICAnICsgcmVzLm1zZyArICc8cC8+Jw0KCQkJCQlpZiAocmVzLmlzX3VwZGF0ZSAmJiByZXMudXBkYXRlX21zZykgbXNnICs9IHJlcy51cGRhdGVfbXNnDQoJCQkJCWNvbnN0IGhpc3RvcnlOb3RpZnkgPSBHTV9nZXRWYWx1ZSgnaGFpamlhb19ub3RpZnknKQ0KCQkJCQlpZihjaGVjayB8fCAhaGlzdG9yeU5vdGlmeSB8fCBoaXN0b3J5Tm90aWZ5Lm1zZy5yZXBsYWNlKC9pZFw9XGQrLywnJykgIT0gbXNnLnJlcGxhY2UoL2lkXD1cZCsvLCcnKSl7DQoJCQkJCQl1dGlsLnNob3dOb3RpZnkoew0KCQkJCQkJCXRpdGxlOiBtc2csDQoJCQkJCQkJc3VjY2VzczogKCkgPT4gew0KCQkJCQkJCQlpZiAocmVzKSB7DQoJCQkJCQkJCQlzdXBlclZpcC5fQ09ORklHXy5zaG93Tm90aWZ5ID0gZmFsc2UNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0pDQoJCQkJCX0NCgkJCQkJaWYgKG1zZyAmJiBtc2cucmVwbGFjZSgvXHMqL2csICIiKS5sZW5ndGggPiAwKSBHTV9zZXRWYWx1ZSgnaGFpamlhb19ub3RpZnknLCB7DQoJCQkJCQlkYXRlOiBuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApLA0KCQkJCQkJbXNnDQoJCQkJCX0pDQoJCQkJCXV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X25vdGlmeV9oYWlqaWFvJykNCgkJCQl9DQoJCQkJaWYgKCFyZXMuaXNfdXBkYXRlKSByZXN1bHQgPSB7DQoJCQkJCWNvZGU6IC01MDAsDQoJCQkJCW1zZzogJ+W9k+WJjeeJiOacrCAnICsgc2NyaXB0LnNjcmlwdC52ZXJzaW9uICsgJyDlt7Lnu4/mmK/mnIDmlrDniYjmnKwnDQoJCQkJfQ0KCQkJfSkNCgkJCSQuYWpheFNldHVwKHsNCgkJCQlhc3luYzogdHJ1ZQ0KCQkJfSk7DQoJCX0gY2F0Y2ggKGUpIHt9DQoJCXJldHVybiByZXN1bHQNCgl9LA0KDQoJc2hvd05vdGlmeTogKGl0ZW0gPSB7fSkgPT4gew0KCQkkKCIjd3Qtbm90aWZ5LWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtbm90aWZ5LWJveCcpDQoJCSQoIiN3dC1ub3RpZnktYm94IikuYWRkQ2xhc3MoJ3Nob3ctbm90aWZ5LWJveCcpDQoJCWxldCB2ZXJzaW9uID0gR01faW5mbw0KCQl2ZXJzaW9uID0gdmVyc2lvbiA/IHZlcnNpb24uc2NyaXB0LnZlcnNpb24gOiAnJw0KCQljb25zdCB2ID0gL+W9k+WJjeiEmuacrOeJiOacrCAoXGRcLlxkXC5cZFwuezAsMX1cZHswLDJ9KS8uZXhlYyhpdGVtLnRpdGxlKQ0KCQlpZiAodikgaXRlbS50aXRsZSA9IGl0ZW0udGl0bGUucmVwbGFjZUFsbCh2WzFdLCB2ZXJzaW9uKQ0KCQlpZiAoaXRlbS50aXRsZSkgJCgnI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnQnKS5odG1sKGl0ZW0udGl0bGUgKyAodmVyc2lvbiA/DQoJCQknPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Y29sb3I6ICNjY2M7Zm9udC1zaXplOiAxMHB4O21hcmdpbi10b3A6IDEwcHg7Ij52ICcgKw0KCQkJdmVyc2lvbiArICc8L2Rpdj4nIDogJycpKQ0KCQlzdXBlclZpcC5fQ09ORklHXy5zaG93Tm90aWZ5ID0gdHJ1ZQ0KCQkkKCcjd3Qtbm90aWZ5LWJveCBhJykub24oJ2NsaWNrJywgKGUpID0+IHsNCgkJCWUuc3RvcFByb3BhZ2F0aW9uKCkNCgkJfSkNCgkJJCgnI3d0LW5vdGlmeS1ib3gnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkkKCIjd3Qtbm90aWZ5LWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LW5vdGlmeS1ib3gnKQ0KCQkJJCgiI3d0LW5vdGlmeS1ib3giKS5hZGRDbGFzcygnaGlkLW5vdGlmeS1ib3gnKQ0KCQkJc3VwZXJWaXAuX0NPTkZJR18uc2hvd05vdGlmeSA9IGZhbHNlDQoJCQlpZiAoaXRlbS5zdWNjZXNzKSBpdGVtLnN1Y2Nlc3ModHJ1ZSkNCgkJfSkNCgl9DQp9DQoNCmNvbnN0IHN1cGVyVmlwID0gKGZ1bmN0aW9uKCkgew0KCWNvbnN0IF9DT05GSUdfID0gew0KCQlpc01vYmlsZTogbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgNCgkJCS8oQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaSkvaSksDQoJCXZpcEJveElkOiAnd3QtdmlwLWp4LWJveCcgKyBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCksDQoJCWVuZE5hbWU6ICdhbk09JywNCgkJaW5pdEZhaWxNc2c6ICfmirHmrYnvvIzliJ3lp4vljJblpLHotKXvvIzor7flsJ3or5XliLfmlrDpobXpnaLmiJbmo4Dmn6XniYjmnKzmmK/lkKbmmK/mnIDmlrDniYjmnKzvvIzngrnlh7vmjqfliLbmnaHlloflj63mn6XnnIvlvZPliY3niYjmnKzlj7cnLA0KCQlob21lUGFnZTogJ2h0dHA6Ly9qc3hsLnBybycsDQoJCXNjcmlwdHM6IFsNCgkJCS8vIAl7DQoJCQkvLyAJaWNvbjogJ2h0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9sb2dvL3dhdGVybWFya19sb2dvLnBuZycsDQoJCQkvLyAJZGVzYzogJ+WQhOWkp+efreinhumikeW5s+WPsOinhumikS/lm77pm4blhY3otLnljrvmsLTljbDkuIvovb3vvIznpoHmraLkuIvovb3nmoTkuZ/og73kuIvovb0nDQoJCQkvLyB9LA0KCQkJew0KCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby92aWRlb19sb2dvLnBuZycsDQoJCQkJZGVzYzogJ+WQhOWkp+inhumikeW5s+WPsFZJUOinhumikeWFjei0ueeciycsDQoJCQkJdXJsOiAnaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvdmlkZW8udXNlcicNCgkJCX0sDQoJCQl7DQoJCQkJaWNvbjogJ2h0dHBzOi8vYmUudXhka2VsLmNvbS9zdGF0aWMvaW1hZ2VzL2luZGV4L2RtZGxvZzIucG5nJywNCgkJCQlkZXNjOiAn5YWN6LS555yL5LuY6LS555+t6KeG6aKR77yM572R56uZ5YaF5a655Y+v6IO95byV6LW35LiN6YCC77yM6K+36LCo5oWO5L2/55So44CCJywNCgkJCQl1cmw6ICdodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvcmVsZWFzZS85MXZpZGVvLnVzZXInDQoJCQl9LA0KCQkJew0KCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby9oYWlqaWFvLnBuZycsDQoJCQkJZGVzYzogJ+WFjei0ueeci+S7mOi0ueinhumikeWPiuWbvumbhu+8jOe9keermeWGheWuueWPr+iDveW8lei1t+S4jemAgu+8jOivt+iwqOaFjuS9v+eUqOOAgicsDQoJCQkJdXJsOiAnaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvaGFpamlhby51c2VyJw0KCQkJfSwNCgkJCXsNCgkJCQlpY29uOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ29fdHJhbnNwYXJlbnQucG5nJywNCgkJCQlkZXNjOiAn5YmN5b6A572R5Z2A6I635Y+W6ISa5pys5Zyw5Z2AJywNCgkJCQl1cmw6ICdqc3hsLnBybycsDQoJCQkJbXNnOiAn5oqx5q2J77yM572R56uZ5q2j5Zyo5bu66K6+5LitJw0KCQkJfQ0KCQldDQoJfQ0KCWNsYXNzIEJhc2VDb25zdW1lciB7DQoJCWNvbnN0cnVjdG9yKGJvZHkpIHsNCgkJCXRoaXMucGFyc2UgPSAoKSA9PiB7DQoJCQkJc2V0VGltZW91dCgoKSA9PiB7DQoJCQkJCXV0aWwuY2hlY2tVcGRhdGUoKQ0KCQkJCX0sIDEwMDApDQoJCQkJaWYgKF9DT05GSUdfLnVzZXIpIHRoaXMuaW50ZXJjZXB0SHR0cCgpDQoJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnYm9keScpLnRoZW4oY29udGFpbmVyID0+ew0KCQkJCQljb250YWluZXIuc3R5bGUub3ZlcmZsb3dZPSdhdXRvICFpbXBvcnRhbnQnOw0KCQkJCQl0aGlzLmdlbmVyYXRlRWxlbWVudChjb250YWluZXIpLnRoZW4oDQoJCQkJCQljb250YWluZXIgPT4gdGhpcy5iaW5kRXZlbnQoY29udGFpbmVyKSkNCgkJCQl9KQ0KCQkJfQ0KCQl9DQoNCgkJaW50ZXJjZXB0SHR0cCgpIHsNCgkJCWNvbnN0IG9yaWdpbk9wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjsNCgkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oXywgdXJsKSB7DQoJCQkJdGhpcy5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHsNCgkJCQkJd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpDQoJCQkJfQ0KCQkJCWlmICgvXC9hcGlcL2Jhbm5lclwvYmFubmVyX2xpc3QvLnRlc3QodXJsKSkgew0KCQkJCQl0aGlzLmFib3J0KCkNCgkJCQl9DQoJCQkJaWYgKC9cL2FwaVwvdG9waWNcL2hvdFwvdG9waWNzXD8vLnRlc3QodXJsKSkgew0KCQkJCQljb25zdCB4aHIgPSB0aGlzOzsNCgkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCSJyZXNwb25zZSINCgkJCQkJKS5nZXQ7DQoJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQl0cnkgew0KCQkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcubWhlYWRlci1zZWFjaCxpbnB1dFtwbGFjZWhvbGRlcj0i5pCc6LS077yM5pCc5Lq677yM5pCc5qCH562+Il0nKS50aGVuKHJlcyA9PnsNCgkJCQkJCQkJCXJlcy5vbmNsaWNrID0gZnVuY3Rpb24oKXsNCgkJCQkJCQkJCQlpZihsb2NhdGlvbi5ob3N0ID09ICdoamVkZC50b3AnKSB1dGlsLnNob3dUaXBzKHt0aXRsZTogJ+W9k+WJjea1t+inkuWcsOWdgOaQnOe0ouWKn+iDveaXoOazleato+W4uOS9v+eUqO+8jOivt+abtOaNouWFtuS7lua1t+inkuWcsOWdgOWGjeivlSd9KQ0KCQkJCQkJCQkJCQllbHNlIGlmKF9DT05GSUdfLmlzTW9iaWxlKSBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24ub3JpZ2luICsgJy9zZWFyY2g/c2VhcmNoPSc7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0pDQoJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRUaXRsZShyZXMuZGF0YSk7DQoJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOw0KCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOw0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL1wvYXBpXC90b3BpY1wvc2VhcmNoLy50ZXN0KHVybCkpIHsNCgkJCQkJOw0KCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkpLmdldDsNCgkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCQkJCXRyeSB7DQoJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRUaXRsZShyZXMuZGF0YSk7DQoJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOw0KCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOzsNCgkJCQkJCQkJY29uc29sZS5sb2coZSk7DQoJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJfQ0KCQkJCQkJfSwNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQkJaWYgKC9cL2FwaVwvdG9waWNcL1xkKy8udGVzdCh1cmwpKSB7DQoJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnLm1oZWFkZXItc2VhY2gsaW5wdXRbcGxhY2Vob2xkZXI9IuaQnOi0tO+8jOaQnOS6uu+8jOaQnOagh+etviJdJykudGhlbihyZXMgPT57DQoJCQkJCQkJCQlyZXMub25jbGljayA9IGZ1bmN0aW9uKCl7DQoJCQkJCQkJCQkJaWYobG9jYXRpb24uaG9zdCA9PSAnaGplZGQudG9wJykgdXRpbC5zaG93VGlwcyh7dGl0bGU6ICflvZPliY3mtbfop5LlnLDlnYDmkJzntKLlip/og73ml6Dms5XmraPluLjkvb/nlKjvvIzor7fmm7TmjaLlhbbku5bmtbfop5LlnLDlnYDlho3or5UnfSkNCgkJCQkJCQkJCQkJZWxzZSBpZihfQ09ORklHXy5pc01vYmlsZSkgbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLm9yaWdpbiArICcvc2VhcmNoP3NlYXJjaD0nOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9KQ0KCQkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcudXNlci1ib3gnKS50aGVuKHJlcz0+ew0KCQkJCQkJCQkJcmVzLm9uY2xpY2sgPSBmdW5jdGlvbigpe2xvY2F0aW9uLmhyZWY9bG9jYXRpb24ub3JpZ2luKycvdXNlci91c2VyaW5mbz91aWQ9JytzdXBlclZpcC5fQ09ORklHXy51c2VySWR9DQoJCQkJCQkJCX0pDQoJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5tb2RpZnlEYXRhKHJlcy5kYXRhKQ0KCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7DQoJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQlyZXR1cm4gcmVzdWx0Ow0KCQkJCQkJCX0NCgkJCQkJCX0sDQoJCQkJCX0pOw0KCQkJCX0NCg0KCQkJCWlmICgvXC9hcGlcL2F0dGFjaG1lbnQvLnRlc3QodXJsKSkgew0KCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkpLmdldDsNCgkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCQkJCXRyeSB7DQoJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCWlmKHJlcy5kYXRhKXsNCgkJCQkJCQkJCWNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShyZXMuZGF0YSwgc3VwZXJWaXApKQ0KCQkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFZpZGVvKHJlcy5kYXRhKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7DQoJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQlyZXR1cm4gcmVzdWx0Ow0KCQkJCQkJCX0NCgkJCQkJCX0sDQoJCQkJCX0pOw0KCQkJCX0NCg0KCQkJCWlmICgvXC9hcGlcL3RvcGljXC9hdHRcL1xkKy8udGVzdCh1cmwpKSB7DQoJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJCWNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGVjb2RlKHJlcy5kYXRhLCBzdXBlclZpcCkpDQoJCQkJCQkJCQlpZiAob2JqICYmIG9iai5sZW5ndGggPiAwICYmICd1cmwnIGluIG9ialswXSkgew0KCQkJCQkJCQkJCWxldCB1cmwgPSBvYmpbMF0udXJsLnJlcGxhY2UoJy9hcGkvYWRkcmVzcycsDQoJCQkJCQkJCQkJCSdodHRwczovL3RzMi5oamY1ZS5jb20vaGpzdG9yZScpDQoJCQkJCQkJCQkJaWYodXJsKQlfQ09ORklHXy52aWRlb1VybCA9IHVybA0KCQkJCQkJCQkJCQllbHNlIHVybCA9IF9DT05GSUdfLnZpZGVvVXJsDQoJCQkJCQkJCQkJZm9yKGxldCBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKyl7DQoJCQkJCQkJCQkJCW9ialtpXS51cmwgPSB1cmwNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuamVuY29kZShvYmopDQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpDQoJCQkJCQkJCX0NCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7DQoJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQlyZXR1cm4gcmVzdWx0Ow0KCQkJCQkJCX0NCgkJCQkJCX0sDQoJCQkJCX0pOw0KCQkJCX0NCg0KCQkJCWlmICgvXC9hcGlcL3RvcGljXC8obm9kZVwvKHRvcGljc3xuZXdzKXxpZG9sX2xpc3QpLy50ZXN0KHVybCkpIHsNCgkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCSJyZXNwb25zZSINCgkJCQkJKS5nZXQ7DQoJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQl0cnkgew0KCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuZm9ybWF0VGl0bGUocmVzLmRhdGEpDQoJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOw0KCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOw0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL1wvYXBpXC91c2VyXC8oaW5mb1wvKFxkKykpfGN1cnJlbnQvLmV4ZWModXJsKSkgew0KCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkpLmdldDsNCgkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCQkJCXRyeSB7DQoJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCWNvbnN0IHJlZ1JlcyA9IC9cL2FwaVwvdXNlclwvKGluZm9cLyhcZCspKXxjdXJyZW50Ly5leGVjKA0KCQkJCQkJCQkJdXJsKTsNCgkJCQkJCQkJY29uc3QgdWlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndWlkJyk7DQoJCQkJCQkJCWxldCBkYXRhDQoJCQkJCQkJCWlmIChyZWdSZXMubGVuZ3RoID4gMiAmJiAocmVnUmVzWzJdICYmIHJlZ1Jlc1syXSAhPSB1aWQpKSB7DQoJCQkJCQkJCQlsZXQgZnVybCA9IHhoci5yZXNwb25zZVVSTDsNCgkJCQkJCQkJCWxldCByID0gZnVybC5tYXRjaCgNCgkJCQkJCQkJCQkvXFcqKFx3KylcLih0b3B8Y29tfHBybylcL2FwaVwvdXNlclwvaW5mb1wvKFxkKykvKTsNCgkJCQkJCQkJCWRhdGEgPSB1dGlsLm1vZGlmeVVzZXIocmVzLCByWzJdKTsNCgkJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJCWRhdGEgPSByZXM7DQoJCQkJCQkJCQlkYXRhLmRhdGEgPSB1dGlsLmxhc3RpbmdUb2tlbihyZXMuZGF0YSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpOw0KCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOw0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL1wvYXBpXC91c2VyXC9uZXdzLy50ZXN0KHVybCkpIHsNCgkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCSJyZXNwb25zZSINCgkJCQkJKS5nZXQ7DQoJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQl0cnkgew0KCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoew0KCQkJCQkJCQkJImlzRW5jcnlwdGVkIjogdHJ1ZSwNCgkJCQkJCQkJCSJlcnJvckNvZGUiOiAwLA0KCQkJCQkJCQkJIm1lc3NhZ2UiOiAiIiwNCgkJCQkJCQkJCSJzdWNjZXNzIjogdHJ1ZSwNCgkJCQkJCQkJCSJkYXRhIjogIldsaHNTMlF4YkZoYVIzaEtZVzVCTTFOWE5VTmhSbTk1Vmxkc1VHRnJWbnBUVnpFMFkwZEtXR0pFUWtwaGJUazFWRlZPTTJGWFVraFBWRUphVmpOa2NGUXljRU5QVlhoRVUyNXNZVmRGTkhoWmEyaFRaV3RzY1dORVpFcGhNMmgzV1hwT1VtRlZPWFJPVkVacFVqTm5OVnBzUlRsUVVUMDkiDQoJCQkJCQkJCX0pOw0KCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOw0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZigvYXBpXC92aWRlb1wvdXNlcl9saXN0XD8vLnRlc3QodXJsKSl7DQoJCQkJCTtjb25zdCB4aHIgPSB0aGlzOw0KCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkpLmdldDsNCgkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCWdldDogKCkgPT4gewkJDQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsNCgkJCQkJCQkJCSJpc0VuY3J5cHRlZCI6IHRydWUsDQoJCQkJCQkJCQkiZXJyb3JDb2RlIjogMCwNCgkJCQkJCQkJCSJtZXNzYWdlIjogIiIsDQoJCQkJCQkJCQkic3VjY2VzcyI6IHRydWUsDQoJCQkJCQkJCQkiZGF0YSI6ICJXVzAxVjJNeVNrSlFWREE5Ig0KCQkJCQkJCQl9KTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJO2NvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQk7cmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL2FwaVwvbG9naW5cL3NpZ25pbi8udGVzdCh1cmwpKSB7DQoJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJaWYocmVzLnN1Y2Nlc3Mpew0KCQkJCQkJCQkJY29uc3QgdXNlcm5hbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtwbGFjZWhvbGRlcj0i6K+36L6T5YWl55So5oi35ZCNL+mCrueusSJdLGlucHV0W3BsYWNlaG9sZGVyPSLor7fovpPlhaXnlKjmiLflkI0iXScpLnZhbHVlDQoJCQkJCQkJCQljb25zdCBwd2QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJwYXNzd29yZCJdJykudmFsdWUNCgkJCQkJCQkJCWNvbnNvbGUubG9nKHVzZXJuYW1lKQ0KCQkJCQkJCQkJY29uc29sZS5sb2cocHdkKQ0KCQkJCQkJCQkJaWYodXNlcm5hbWUgJiYgcHdkKXsNCgkJCQkJCQkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb191c2VycHdkJyx7dXNlcm5hbWUscHdkfSkNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJy52YW4tZGlhbG9nX19jYW5jZWwsLmVsLWJ1dHRvbi0tc21hbGwnLDcpLnRoZW4ocmVzID0+ew0KCQkJCQkJCQkJCXJlcy5jbGljaygpDQoJCQkJCQkJCQl9KQ0KCQkJCQkJCQl9ZWxzZXsNCgkJCQkJCQkJCXV0aWwuc2hvd1RpcHMoe3RpdGxlOiByZXMubWVzc2FnZX0pDQoJCQkJCQkJCX0NCgkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmxhc3RpbmdUb2tlbihyZXMuZGF0YSk7DQoJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOw0KCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOw0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL2FwaVwvdmlkZW9cL2NoZWNrVmlkZW9DYW5QbGF5Ly50ZXN0KHVybCkpIHsNCgkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCSJyZXNwb25zZSINCgkJCQkJKS5nZXQ7DQoJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQl0cnkgew0KCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuZm9ybWF0VmlkZW8ocmVzLmRhdGEpOw0KCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJY29uc29sZS5sb2coZSk7DQoJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJfQ0KCQkJCQkJfSwNCgkJCQkJfSk7DQoJCQkJfTsNCgkJCQlvcmlnaW5PcGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7DQoJCQl9Ow0KCQl9DQoNCgkJZ2VuZXJhdGVFbGVtZW50KGNvbnRhaW5lcikgew0KCQkJR01fYWRkU3R5bGUoYA0KCQkJCUBmb250LWZhY2Ugew0KCQkJCSAgZm9udC1mYW1pbHk6ICdpY29uZm9udCc7ICAvKiBQcm9qZWN0IGlkIDM5MTM1NjEgKi8NCgkJCQkgIHNyYzogdXJsKCcvL2F0LmFsaWNkbi5jb20vdC9jL2ZvbnRfMzkxMzU2MV9jcGUxM2Z3Y2E4LndvZmYyP3Q9MTY5NjIxMDQ5MzY3MicpIGZvcm1hdCgnd29mZjInKSwNCgkJCQkgICAgICAgdXJsKCcvL2F0LmFsaWNkbi5jb20vdC9jL2ZvbnRfMzkxMzU2MV9jcGUxM2Z3Y2E4LndvZmY/dD0xNjk2MjEwNDkzNjcyJykgZm9ybWF0KCd3b2ZmJyksDQoJCQkJICAgICAgIHVybCgnLy9hdC5hbGljZG4uY29tL3QvYy9mb250XzM5MTM1NjFfY3BlMTNmd2NhOC50dGY/dD0xNjk2MjEwNDkzNjcyJykgZm9ybWF0KCd0cnVldHlwZScpOw0KCQkJCX0NCgkJCQkuaWNvbmZvbnQgew0KCQkJCSAgICBmb250LWZhbWlseTogImljb25mb250IiAhaW1wb3J0YW50Ow0KCQkJCSAgICBmb250LXNpemU6IDE2cHg7DQoJCQkJICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCgkJICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMCAhaW1wb3J0YW50Ow0KCQkJCSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCgkJCQkgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsNCgkJCQl9DQoJCQkJQGtleWZyYW1lcyBzaG93U2V0Qm94IHsNCgkJCQkJMCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTsNCgkJCQkJfQ0KCQkJCQk4MCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxLjEpOw0KCQkJCQl9DQoJCQkJCTEwMCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlAa2V5ZnJhbWVzIGhpZFNldEJveCB7DQoJCQkJCTAlIHsNCgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSk7DQoJCQkJCX0NCgkJCQkJODAlIHsNCgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMS4xKTsNCgkJCQkJfQ0KCQkJCQkxMDAlIHsNCgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJQGtleWZyYW1lcyBjb2xvckFuaW1hIHsNCgkJCQkJMCV7DQoJCQkJCQliYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwOw0KCQkJCQkJY29sb3I6ICM1ZDVkNWQ7DQoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOw0KCQkJCQl9DQoJCQkJCTUwJXsNCgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMS4xKTsNCgkJCQkJfQ0KCQkJCQkxMDAlew0KCQkJCQkJYmFja2dyb3VuZC1jb2xvcjogI2ZmNjAyMjs7DQoJCQkJCQljb2xvcjogd2hpdGU7DQoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCUBrZXlmcmFtZXMgc2hvd05vdGlmeUJveCB7DQoJCQkJCTAlIHsNCgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTEwMCUpIHNjYWxlKDApOw0KCQkJCQl9DQoJCQkJCTgwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEuMSk7DQoJCQkJCX0NCgkJCQkJMTAwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCUBrZXlmcmFtZXMgaGlkTm90aWZ5Qm94IHsNCgkJCQkJMCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwzNXB4KSBzY2FsZSgxLjEpOw0KCQkJCQl9DQoJCQkJCTgwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEpOw0KCQkJCQl9DQoJCQkJCTEwMCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtMTAwJSkgc2NhbGUoMCk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJQGtleWZyYW1lcyBzY2FsZSB7DQoJCQkJCTAlew0KCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxKTsNCgkJCQkJfQ0KCQkJCQk1MCV7DQoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEuMSk7DQoJCQkJCX0NCgkJCQkJMTAwJXsNCgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMSk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJQGtleWZyYW1lcyBjaXJjbGV0b2tMZWZ0IHsNCgkJCQkgICAgMCUsMTAwJSB7DQoJCQkJICAgICAgICBsZWZ0OiAwcHg7DQoJCQkJICAgICAgICB3aWR0aDogMTJweDsNCgkJCQkgICAgICAgIGhlaWdodDogMTJweDsNCgkJCQkgICAgICAgIHotaW5kZXg6IDA7DQoJCQkJICAgIH0NCgkJCQkgICAgMjUlIHsNCgkJCQkgICAgICAgIGhlaWdodDogMTVweDsNCgkJCQkgICAgICAgIHdpZHRoOiAxNXB4Ow0KCQkJCSAgICAgICAgei1pbmRleDogMTsNCgkJCQkgICAgICAgIGxlZnQ6IDhweDsNCgkJCQkgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkNCgkJCQkgICAgfQ0KCQkJCSAgICA1MCUgew0KCQkJCSAgICAgICAgd2lkdGg6IDEycHg7DQoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7DQoJCQkJICAgICAgICBsZWZ0OiAyMnB4Ow0KCQkJCSAgICB9DQoJCQkJICAgIDc1JSB7DQoJCQkJICAgICAgICB3aWR0aDogMTBweDsNCgkJCQkgICAgICAgIGhlaWdodDogMTBweDsNCgkJCQkgICAgICAgIGxlZnQ6IDhweDsNCgkJCQkgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkNCgkJCQkgICAgfQ0KCQkJCX0NCgkJCQlAa2V5ZnJhbWVzIGNpcmNsZXRva1JpZ2h0IHsNCgkJCQkgICAgMCUsMTAwJSB7DQoJCQkJICAgICAgICB0b3A6IDNweDsNCgkJCQkgICAgICAgIGxlZnQ6IDIycHg7DQoJCQkJICAgICAgICB3aWR0aDogMTJweDsNCgkJCQkgICAgICAgIGhlaWdodDogMTJweDsNCgkJCQkgICAgICAgIHotaW5kZXg6IDANCgkJCQkgICAgfQ0KCQkJCSAgICAyNSUgew0KCQkJCSAgICAgICAgaGVpZ2h0OiAxNXB4Ow0KCQkJCSAgICAgICAgd2lkdGg6IDE1cHg7DQoJCQkJICAgICAgICB6LWluZGV4OiAxOw0KCQkJCSAgICAgICAgbGVmdDogMjRweDsNCgkJCQkgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkNCgkJCQkgICAgfQ0KCQkJCSAgICA1MCUgew0KCQkJCSAgICAgICAgd2lkdGg6IDEycHg7DQoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7DQoJCQkJICAgICAgICBsZWZ0OiAwcHgNCgkJCQkgICAgfQ0KCQkJCSAgICA3NSUgew0KCQkJCSAgICAgICAgd2lkdGg6IDEwcHg7DQoJCQkJICAgICAgICBoZWlnaHQ6IDEwcHg7DQoJCQkJICAgICAgICBsZWZ0OiAyNHB4Ow0KCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQ0KCQkJCSAgICB9DQoJCQkJfQ0KCQkJCS5jb2xvci1hbmltYXsNCgkJCQkJYW5pbWF0aW9uOiBjb2xvckFuaW1hIC4zcyBlYXNlIDEgZm9yd2FyZHM7DQoJCQkJfQ0KCQkJCS5idG4tYW5pbWF7DQoJCQkJCWFuaW1hdGlvbjogc2NhbGUgLjNzIGVhc2UgMSBmb3J3YXJkczsNCgkJCQl9DQoJCQkJaHRtbCAudmFuLW92ZXJmbG93LWhpZGRlbixodG1sIGJvZHksLnZhbi1vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O30NCgkJCQkubG9naW4tYnRuOjphZnRlciwubG9naW4tZm9ybS1idXR0b246OmFmdGVye2NvbnRlbnQ6JyjlpoLmsqHlj43lupTvvIzlj6/og73otKblj7flr4bnoIHplJnor6/vvIzmiJbliLfmlrDpobXpnaLlho3or5UpJztjb2xvcjojZTkxZTYzO21hcmdpbi1sZWZ0OjVweDtmb250LXNpemU6IDEwcHg7fQ0KCQkJCS5lbC1tZXNzYWdlLC52YW4tdG9hc3QsLnYtbW9kYWwsLnB1YmxpY0NvbnRhaW5lciwuY29udGFpbmVyYWR2ZXJ0aXNpbmcsI2hvbWUgLmJ0bmJveCwjaG9tZSAuYWRkYm94LC50b3BiYW5tZXIsLmJhbm5lcmxpc3RzdHlsZSwuaXNoaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O3otaW5kZXg6LTk5OTk5ICFpbXBvcnRhbnQ7b3BhY2l0eTogMCFpbXBvcnRhbnQ7d2lkdGggOjAgIWltcG9ydGFudDt9DQoJCQkJI3d0LXJlc291cmNlcy1ib3h7Ym9yZGVyOiAxcHggZGFzaGVkICNlYzgxODE7YmFja2dyb3VuZDogI2ZmZjRmNDt9DQoJCQkJLnNlbGwtYnRue2JvcmRlcjpub25lICFpbXBvcnRhbnQ7bWFyZ2luLXRvcDoyMHB4O30NCgkJCQkubWFyZ2luLWxlZnR7IG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7fQ0KCQkJCS5zaG93LXNldC1ib3h7IGFuaW1hdGlvbjogc2hvd1NldEJveCAwLjNzIGVhc2UgMSBmb3J3YXJkczt9DQoJCQkJLmhpZC1zZXQtYm94eyBhbmltYXRpb246IGhpZFNldEJveCAwLjNzIGVhc2UgMSBmb3J3YXJkczt9DQoJCQkJLnNob3ctbm90aWZ5LWJveHsgYW5pbWF0aW9uOiBzaG93Tm90aWZ5Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30NCgkJCQkuaGlkLW5vdGlmeS1ib3h7IGFuaW1hdGlvbjogaGlkTm90aWZ5Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30NCgkJCQkjd3QtbG9hZGluZy1ib3h7ZGlzcGxheTogbm9uZTtwb3NpdGlvbjogZml4ZWQ7dG9wOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7Ym90dG9tOiAwO3otaW5kZXg6IDEwMDAwMDtiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwNGQ7fQ0KCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZ3twb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDM1cHg7aGVpZ2h0OiAxN3B4O3RvcDogNTAlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpO30NCgkJCQkjd3QtbG9hZGluZy1ib3ggLmxvYWRpbmc6OmJlZm9yZSwNCgkJCQkjd3QtbG9hZGluZy1ib3ggLmxvYWRpbmc6OmFmdGVye3Bvc2l0aW9uOiBhYnNvbHV0ZTtjb250ZW50OiAiIjt0b3A6IDNweDtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlNjBmO3dpZHRoOiAxNHB4O2hlaWdodDogMTRweDtib3JkZXItcmFkaXVzOiAyMHB4O21peC1ibGVuZC1tb2RlOiBtdWx0aXBseTthbmltYXRpb246IGNpcmNsZXRva0xlZnQgMS4ycyBsaW5lYXIgaW5maW5pdGU7fQ0KCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZzo6YWZ0ZXJ7YW5pbWF0aW9uOiBjaXJjbGV0b2tSaWdodCAxLjJzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kLWNvbG9yOiAjNGRlOGY0O30NCgkJCQkjd3QtbGVmdC1zaG93eyBwb3NpdGlvbjogZml4ZWQ7bGVmdDogMjBweDt0b3A6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7ei1pbmRleDogOTk5OTt0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO30NCgkJCQkjd3QtbGVmdC1zaG93IGkge2NvbG9yOiAjNWY1YjViO2ZvbnQtc2l6ZTogMjRweDtjb2xvcjogI0U5MUU2Mzt0ZXh0LXNoYWRvdzogI0U5MUU2MyAycHggMnB4IDEycHg7Zm9udC1zaXplOiAyNXB4O21hcmdpbi1sZWZ0OiAtMXB4O30NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH17DQoJCQkJCXBvc2l0aW9uOiBmaXhlZDsNCgkJCQkJdG9wOiA1MCU7DQoJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpOw0KCQkJCQlyaWdodDogMTBweDsNCgkJCQkJd2lkdGg6IDQ2cHg7DQoJCQkJCWJvcmRlci1yYWRpdXM6IDMwcHg7DQoJCQkJCWJhY2tncm91bmQ6IHJnYig2NCA2NCA2NCAvIDgxJSk7DQoJCQkJCWJveC1zaGFkb3c6IDFweCAxcHggOHB4IDFweCByZ2IoOTggOTkgOTkgLyAzNCUpOw0KCQkJCQl6LWluZGV4OiA5OTk5Ow0KCQkJCQl0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KCQkJCX0NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW17cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogNjBweDt9DQoJCQkJLnRpcHMteXVhbjo6YmVmb3JleyBwb3NpdGlvbjogYWJzb2x1dGU7IGNvbnRlbnQ6ICcnO3RvcDogMTJweDsgcmlnaHQ6IDZweDt3aWR0aDogOHB4O2hlaWdodDogOHB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY0NzU3O30NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW06bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2JvdHRvbTogMDtsZWZ0OiAyMi41JTtjb250ZW50OiAnJzt3aWR0aDogNTUlO2hlaWdodDogMnB4O2JhY2tncm91bmQtY29sb3I6ICNmZmY7fQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbSAuaWNvbmZvbnQsI3d0LSR7X0NPTkZJR18udmlwQm94SWR9IC5pdGVtIGltZ3twb3NpdGlvbjogYWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpfQ0KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlLCN3dC1zZXQtYm94IC5jbG9zZSwjd3Qtbm90aWZ5LWJveCAuY2xvc2V7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAwcHg7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O30NCgkJCQkjd3QtbG9naW4tYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1sb2dpbi1ib3ggLmNsb3NlOjphZnRlciwjd3Qtc2V0LWJveCAuY2xvc2U6OmJlZm9yZSwjd3Qtc2V0LWJveCAuY2xvc2U6OmFmdGVyLCN3dC1ub3RpZnktYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1ub3RpZnktYm94IC5jbG9zZTo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDUwJTt0b3A6IDUwJTtjb250ZW50OiAnJzt3aWR0aDogMTJweDtoZWlnaHQ6IDJweDtib3JkZXItcmFkaXVzOiAxcHg7YmFja2dyb3VuZC1jb2xvcjogIzZhNmE2YTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSg0NWRlZyk7dmlzaWJpbGl0eTogdmlzaWJsZTt9DQoJCQkJI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyLCN3dC1zZXQtYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LW5vdGlmeS1ib3ggLmNsb3NlOjphZnRlcnt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSgtNDVkZWcpO30NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLmFic29sdXRlLWNlbnRlcnsgcG9zaXRpb246IGFic29sdXRlO3RvcDogNTAlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTt9DQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teSBpbWd7IHdpZHRoOiAyOHB4O2hlaWdodDogMjhweDtib3JkZXItcmFkaXVzOiAzMHB4O21hcmdpbi1sZWZ0OiAycHg7dHJhbnN0aW9uOiBhbGwgMC4zcyBlYXNlO30NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gI3d0LW15LXNldCBpIHtjb2xvcjogd2hpdGU7Zm9udC1zaXplOiAyNHB4O3RleHQtc2hhZG93OiAycHggMnB4IDE0cHggI2ZmZmZmZjtmb250LWZhbWlseTogJ2ljb25mb250Jzt9DQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1jb3B5IGksI3d0LW15LWRvd24gaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjRweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxNXB4ICNmZmZmZmY7Zm9udC1mYW1pbHk6ICdpY29uZm9udCc7fQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAjd3QtbXktbm90aWZ5IGkge2NvbG9yOiB3aGl0ZTtmb250LXNpemU6IDIzcHg7cGFkZGluZzogMTBweCAxcHg7dGV4dC1zaGFkb3c6IDJweCAycHggMTJweCAjZmZmZmZmO30NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gI3d0LWhpZC1ib3ggaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjRweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxMnB4ICNmZmZmZmY7Zm9udC1zaXplOiAyNXB4O21hcmdpbi1sZWZ0OiAtMXB4O30NCgkJCQkud3QtcGxheWVyLWJ0bi1ib3ggLnBsYXllci1idG57IHBvc2l0aW9uOmFic29sdXRlO3RvcDo0MiU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOiAyMCV9DQoJCQkJLnd0LXBsYXllci1idG4tYm94IC50aXBzeyBwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAyMHB4O2xlZnQ6NTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtjb2xvcjogI0ZGQzEwNzt3aWR0aDogODAlO3RleHQtYWxpZ246IGNlbnRlcjtmb250LXNpemU6IDE1cHg7Zm9udC13ZWlnaHQ6IDUwMDt9DQoJCQkJI3d0LW1hc2stYm94LCN3dC1tYXhpbmRleC1tYXNre2Rpc3BsYXk6bm9uZTsgcG9zaXRpb246IGZpeGVkOyB0b3A6IDA7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBib3R0b206IDA7IHotaW5kZXg6IDEwMDAwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwNGQ7fQ0KCQkJCSN3dC1tYXhpbmRleC1tYXNre3otaW5kZXg6IDkwMDAwO2Rpc3BsYXk6bm9uZTt9DQoJCQkJI3d0LXNldC1ib3h7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NTAlO2xlZnQ6NTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JveC1zaGFkb3c6IDAgMTVweCAzMHB4IHJnYmEoMCwgMCwgMCwgLjE1KTtib3JkZXItcmFkaXVzOiAxMHB4O3otaW5kZXg6IDEwMDEwO3BhZGRpbmc6IDEwcHggMTVweDtwYWRkaW5nLXJpZ2h0OiA1cHg7Ym94LXNpemluZzogYm9yZGVyLWJveDt9DQoJCQkJI3d0LXNldC1ib3ggLnNlbGVjdGVkLWJveCAuc2VsZWN0ZWR7IGJhY2tncm91bmQtY29sb3I6ICNmZjYwMjI7Y29sb3I6IHdoaXRlO30NCgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVye2Rpc3BsYXk6IG5vbmU7bGV0dGVyLXNwYWNpbmc6IDFweDt9DQoJCQkJI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciAudXBkYXRle3RleHQtYWxpZ246IHJpZ2h0O2ZvbnQtc2l6ZTogMTBweDttYXJnaW4tcmlnaHQ6IDEwcHg7aGVpZ2h0OiAzMHB4O2xpbmUtaGVpZ2h0OiAzMHB4O2NvbG9yOiAjMjE5NkYzO30NCgkJCQkjd3Qtc2V0LWJveCAuaW5mby1ib3h7ZGlzcGxheTpmbGV4O2hlaWdodDogNTBweDthbGlnbi1pdGVtczogY2VudGVyO30NCgkJCQkjd3Qtc2V0LWJveCAuaW5mby1ib3ggLmF2YXRhci1ib3h7cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogMzZweDt3aWR0aDogMzZweDtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtib3JkZXItcmFkaXVzOiA3cHg7Ym94LXNoYWRvdzogcmdiKDE2NiAxNjYgMTY2IC8gMjAlKSAwcHggMXB4IDIwcHggMHB4O30NCgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3ggLnRpdGxle3RleHQtYWxpZ246IGNlbnRlcjtmb250LXdlaWdodDogNjAwO2ZvbnQtc2l6ZTogMTZweDtjb2xvcjogIzNhM2EzYTt9DQoJCQkJI3d0LXNldC1ib3ggLnVzZXItYm94IC5kZXNje2ZsZXg6IDg7Zm9udC1zaXplOiAxMHB4O2NvbG9yOiAjNWQ1ZDVkO21hcmdpbjogMCAxMHB4O30NCgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3ggLmF2YXRhcntwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6IDMwcHg7Ym9yZGVyLXJhZGl1czogN3B4O30NCgkJCQkjd3QtdGlwcy1ib3h7IHBvc2l0aW9uOmZpeGVkO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO3dpZHRoOiAyNDBweDttaW4taGVpZ2h0OjEzMHB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JvcmRlci1yYWRpdXM6MTBweDt6LWluZGV4OiA5NTAwMDtwYWRkaW5nOjEwcHggMTVweDt9DQoJCQkJI3d0LXRpcHMtYm94IC50aXRsZXtmb250LXNpemU6IDE2cHg7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtd2VpZ2h0OiA2MDA7fQ0KCQkJCSN3dC10aXBzLWJveCAuY29udGVudHt0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luOiAxNHB4IDA7Zm9udC1zaXplOiAxMnB4O2NvbG9yOiAjMmEyYTJhO2ZvbnQtd2VpZ2h0OiA1MDA7fQ0KCQkJCSN3dC10aXBzLWJveCAuY29udGVudCBwe2NvbG9yOiAjZmY0NzU3O3RleHQtYWxpZ246IGxlZnQ7fQ0KCQkJCSN3dC10aXBzLWJveCAuYnRuLWJveHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7fQ0KCQkJCSN3dC10aXBzLWJveCAuYnRuLWJveCBidXR0b257bWluLXdpZHRoOiA2MHB4O2hlaWdodDogMjhweDtiYWNrZ3JvdW5kLWNvbG9yOiAjZWM0MDdhO2JvcmRlci1yYWRpdXM6IDMwcHg7Y29sb3I6IHdoaXRlO2JvcmRlcjogbm9uZTtmb250LXNpemU6IDEycHg7fQ0KCQkJCSN3dC10aXBzLWJveCAuYnRuLWJveCAuY2FuY2Vse2Rpc3BsYXk6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogI2VlZTtjb2xvcjojMmEyYTJhfQ0KCQkJCSN3dC1ub3RpZnktYm94IHtwb3NpdGlvbjogZml4ZWQ7dG9wOiAyJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC0xMDAlKSBzY2FsZSgwKTt3aWR0aDogODAlO21pbi1oZWlnaHQ6IDc1cHg7bGV0dGVyLXNwYWNpbmc6IDFweDtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtjb2xvcjojMmEyYTJhO2JvcmRlci1yYWRpdXM6IDE1cHg7Ym94LXNoYWRvdzogMCAxNXB4IDMwcHggcmdiYSgwLCAwLCAwLCAuMTUpO3otaW5kZXg6IDk1MDAwO30NCgkJCQkjd3Qtbm90aWZ5LWJveCAudGl0bGV7IHRleHQtYWxpZ246IGNlbnRlcjtoZWlnaHQ6IDM1cHg7IGxpbmUtaGVpZ2h0OiAzNXB4O2ZvbnQtc2l6ZTogMTVweDtmb250LXdlaWdodDogNjAwOyBjb2xvcjogI0U5MUU2Mzt9DQoJCQkJI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnR7IGNvbG9yOiAjM2EzYTNhO3BhZGRpbmc6IDEwcHggMTVweDtmb250LXNpemU6IDEycHg7fQ0KCQkJCSN3dC1ub3RpZnktYm94IC5jb250ZW50IGF7Y29sb3I6ICMxRTg4RTU7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQ0KCQkJCSN3dC1ub3RpZnktYm94IC5jb250ZW50IHB7bWFyZ2luLWJvdHRvbTogNXB4O30NCgkJCQkud3QtcGxheWVyLWJ0bi1ib3h7IHBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3otaW5kZXg6IDk5OTg7YmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDRkO30NCgkJCQkjd3QtdmlkZW8tY29udGFpbmVye2Rpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOmZpeGVkO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO2JvdHRvbTogMDsgei1pbmRleDogOTk5ODtiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazt9DQoJCQkJI3d0LXZpZGVvLWNvbnRhaW5lciAud3QtdmlkZW97IHBvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTAwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7aGVpZ2h0OiAyNDBweDsgei1pbmRleDogOTk5OTt9DQoJCQkJI3d0LXZpZGVvLWNvbnRhaW5lciAud3QtdmlkZW8gdmlkZW97d2lkdGg6MTAwJTtoZWlnaHQ6IDEwMCU7fQ0KCQkJCS5kcGxheWVyLWNvbnRyb2xsZXJ7Ym90dG9tOiAzMHB4ICFpbXBvcnRhbnQ7fQ0KCQkJCS5tYWluLXBsYXllcntoZWlnaHQ6IDMwMHB4O30NCgkJCQkuZHBsYXllci5kcGxheWVyLWhpZGUtY29udHJvbGxlciAuZHBsYXllci1jb250cm9sbGVyeyBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwMCUpICFpbXBvcnRhbnQ7fQ0KCQkJCS53dC1jbG9zZS1idG57IGZvbnQtc2l6ZTogMTVweDtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA0MHB4O2xlZnQ6IDI1cHg7Y29sb3I6IHdoaXRlO30NCgkJCQlgKQ0KCQkJaWYgKF9DT05GSUdfLmlzTW9iaWxlKSB7DQoJCQkJR01fYWRkU3R5bGUoYA0KCQkgICAgICAgICAgICAjd3Qtc2V0LWJveCB7d2lkdGg6NzIlO30NCgkJICAgICAgICBgKTsNCgkJCX0NCgkJCWxldCBzY3JpcHRzID0gJyc7DQoJCQlfQ09ORklHXy5zY3JpcHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7DQoJCQkJc2NyaXB0cyArPSBgDQoJCQkJCTxkaXYgY2xhc3M9ImluZm8tYm94IiBkYXRhLWluZGV4PSIke2luZGV4fSI+DQoJCQkJCQk8ZGl2IGNsYXNzPSJhdmF0YXItYm94Ij4NCgkJCQkJCQk8aW1nIGNsYXNzPSJhdmF0YXIiIHNyYz0iJHtpdGVtLmljb259Ii8+DQoJCQkJCQk8L2Rpdj4NCgkJCQkJCTxkaXYgY2xhc3M9ImRlc2MiPg0KCQkJCQkJCTx0ZXh0PiR7aXRlbS5kZXNjfTwvdGV4dD4NCgkJCQkJCTwvZGl2Pg0KCQkJCQk8L2Rpdj4NCgkJCQlgOw0KCQkJfSkNCg0KCQkJJChjb250YWluZXIpLmFwcGVuZChgDQoJCSAgICAgICAgPGRpdiBpZD0id3QtJHtfQ09ORklHXy52aXBCb3hJZH0iPg0KCQkJCSAgICA8ZGl2IGlkPSJ3dC1teSIgY2xhc3M9Iml0ZW0gd3RfbXlfaGFpamlhbyI+DQoJCQkJCQk8aW1nIHNyYz0iaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL251bGxfc3F1YXJlLnBuZyI+PC9pbWc+DQoJCQkJICAgIDwvZGl2Pg0KCQkJCSAgICA8ZGl2IGlkPSJ3dC1teS1zZXQiIGNsYXNzPSJpdGVtIj4NCgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwNTs8L2k+DQoJCQkJICAgIDwvZGl2Pg0KCQkJCQk8ZGl2IGlkPSJ3dC1teS1jb3B5IiBjbGFzcz0iaXRlbSI+DQoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDc7PC9pPg0KCQkJCQk8L2Rpdj4NCgkJCQkJPGRpdiBpZD0id3QtbXktZG93biIgY2xhc3M9Iml0ZW0gd3RfbXlfZG93bl9oYWlqaWFvIj4NCgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwOTs8L2k+DQoJCQkJCTwvZGl2Pg0KCQkJCQk8ZGl2IGlkPSJ3dC1teS1ub3RpZnkiIGNsYXNzPSJpdGVtIHd0X215X25vdGlmeV9oYWlqaWFvIiBzdHlsZT0icGFkZGluZzogMCAxMXB4OyI+DQoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDg7PC9pPg0KCQkJCQk8L2Rpdj4NCgkJCQkgICAgPGRpdiBpZD0id3QtaGlkLWJveCIgY2xhc3M9Iml0ZW0iPg0KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA2OzwvaT4NCgkJCQkgICAgPC9kaXY+DQoJCQkgICAgPC9kaXY+DQoJCQkgICAgPGRpdiBpZD0id3QtbGVmdC1zaG93IiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGUoLTYwcHgsLTUwJSk7cGFkZGluZzogMTBweDsiPg0KCQkJCQk8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGU3MDQ7PC9pPg0KCQkJICAgIDwvZGl2Pg0KCQkJCTxkaXYgaWQ9Ind0LW1hc2stYm94Ij48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJ3dC1zZXQtYm94Ij4NCgkJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJsaW5lLWJveCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+DQoJCQkJCTwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJ1c2VyLWJveC1jb250YWluZXIiPg0KCQkJCQkJPGRpdiBjbGFzcz0idXNlci1ib3giPg0KCQkJCQkJCTxkaXYgY2xhc3M9InRpdGxlIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMTBweCI+5Y+K5pe26KGM5LmQ5bel5YW35bqTPC9kaXY+DQoJCQkJCQkJJHtzY3JpcHRzfQ0KCQkJCQkJCTxkaXYgY2xhc3M9InVwZGF0ZSI+5qOA5p+l5pu05pawPC9kaXY+DQoJCQkJCQk8L2Rpdj4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBpZD0id3QtbG9hZGluZy1ib3giPg0KCQkJCQk8ZGl2IGNsYXNzPSJsb2FkaW5nIj48L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJCQk8ZGl2IGlkPSJ3dC1tYXhpbmRleC1tYXNrIj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJ3dC10aXBzLWJveCI+DQoJCQkJCTxkaXYgY2xhc3M9InRpdGxlIj7mj5DnpLo8L2Rpdj4NCgkJCQkJPGRpdiBjbGFzcz0iY29udGVudCI+PC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9ImJ0bi1ib3giPg0KCQkJCQkJPGJ1dHRvbiBjbGFzcz0nY2FuY2VsJz7lj5bmtog8L2J1dHRvbj4NCgkJCQkJCTxidXR0b24gY2xhc3M9J3N1Ym1pdCc+56Gu5a6aPC9idXR0b24+DQoJCQkJCTwvZGl2Pg0KCQkJCTwvZGl2Pg0KCQkJCTxkaXYgaWQ9Ind0LW5vdGlmeS1ib3giPg0KCQkJCQk8ZGl2IGNsYXNzPSJjbG9zZSI+PC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9InRpdGxlIj7pgJrnn6U8L2Rpdj4NCgkJCQkJPGRpdiBjbGFzcz0iY29udGVudCI+PC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBpZD0id3QtdmlkZW8tY29udGFpbmVyIj4NCgkJCQkJPGRpdiBjbGFzcz0id3QtY2xvc2UtYnRuIj4NCgkJCQkJCTxpIGNsYXNzPSJ2YW4taWNvbiB2YW4taWNvbi1jbG9zZSI+PC9pPg0KCQkJCQkJPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OiA1cHg7Ij7pgIDlh7rmkq3mlL48L3NwYW4+DQoJCQkJCTwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJ3dC12aWRlbyI+DQoJCQkJCQk8dmlkZW8gaWQ9Ind0LXZpZGVvIiBjb250cm9scz48L3ZpZGVvPg0KCQkJCQk8L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJICAgIGApDQoJCQlpZiAoX0NPTkZJR18udXNlciAmJiBfQ09ORklHXy51c2VyLmF2YXRhcikgew0KCQkJCSQoIiN3dC1teSBpbWciKS5hZGRDbGFzcygnbWFyZ2luLWxlZnQnKQ0KCQkJCSQoJyN3dC1teSBpbWcnKS5hdHRyKCdzcmMnLCBfQ09ORklHXy51c2VyLmF2YXRhcikNCgkJCQlHTV9hZGRTdHlsZShgLmRldGFpbHMtYm9keSAudXNlci1ib3g6OmFmdGVye3Bvc2l0aW9uOiBhYnNvbHV0ZTtjb250ZW50OicnO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3otaW5kZXg6MTAwOy5taGVhZGVyLXNlYWNoOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7Y29udGVudDonJzt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4OjEwMDt9fWApDQoJCQl9DQoJCQlyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZShjb250YWluZXIpKTsNCgkJfQ0KDQoJCWJpbmRFdmVudChjb250YWluZXIpIHsNCgkJCWNvbnN0IHZpcEJveCA9ICQoYCN3dC0ke19DT05GSUdfLnZpcEJveElkfWApDQoJCQlpZiAoR01fZ2V0VmFsdWUoJ2hhaWppYW9faGlkX2NvbnRyb2xsZXInLCBudWxsKSkgew0KCQkJCXZpcEJveC5jc3MoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMTI1JSwgLTUwJSkiKQ0KCQkJCSQoJyN3dC1sZWZ0LXNob3cnKS5jc3MoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgLTUwJSkiKQ0KCQkJfQ0KCQkJDQoJCQl2aXBCb3guZmluZCgiI3d0LW15Iikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJCWlmIChfQ09ORklHXy51c2VyKSB7DQoJCQkJCSQoJyN3dC1tYXNrLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpDQoJCQkJCSQoIiN3dC1zZXQtYm94IC51c2VyLWJveC1jb250YWluZXIiKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsNCgkJCQkJJCgiI3d0LXNldC1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJCQkJJCgiI3d0LXNldC1ib3giKS5hZGRDbGFzcygnc2hvdy1zZXQtYm94Jyk7DQoJCQkJCSQoJyN3dC1zZXQtYm94IC51c2VyLWJveC1jb250YWluZXIgLm5pY2tuYW1lJykuaHRtbChfQ09ORklHXy51c2VyLm5pY2tuYW1lKQ0KCQkJCQl1dGlsLnNob3dBbmRIaWRUaXBzKCd3dF9teV9oYWlqaWFvJywgJ3NldCcsIGZhbHNlKQ0KCQkJCX0gZWxzZSB7DQoJCQkJCXV0aWwuYWRkTG9naW4oKTsNCgkJCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKQ0KCQkJCQkkKCIjd3QtbG9naW4tYm94IikucmVtb3ZlQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7DQoJCQkJCSQoIiN3dC1sb2dpbi1ib3giKS5hZGRDbGFzcygnc2hvdy1zZXQtYm94JykNCgkJCQkJaWYgKHdpbmRvdy53dF9pbml0X2NvZGUpIHsNCgkJCQkJCXRyeSB7DQoJCQkJCQkJJCgiI3d0LWxvZ2luLWJveCBpbnB1dCIpLnZhbChtZDV4KG1kNXgoKSwgJ2RlJykuY29kZSkNCgkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQl1dGlsLnNob3dUaXBzKHsNCgkJCQkJCQkJdGl0bGU6IF9DT05GSUdfLmluaXRGYWlsTXNnDQoJCQkJCQkJfSkNCgkJCQkJCX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSQuZ2V0U2NyaXB0KCdodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvbWQ1L2NvZGUuanMnLGZ1bmN0aW9uKHIscyl7DQoJCQkJCQkJaWYocyA9PSAnc3VjY2Vzcycpew0KCQkJCQkJCQkkKCIjd3QtbG9naW4tYm94IGlucHV0IikudmFsKG1kNXgobWQ1eCgpLCAnZGUnKS5jb2RlKQ0KCQkJCQkJCX0NCgkJCQkJCX0pDQoJCQkJCQlzZXRUaW1lb3V0KCgpPT57DQoJCQkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQkJCXRpdGxlOiBfQ09ORklHXy5pbml0RmFpbE1zZw0KCQkJCQkJCX0pDQoJCQkJCQl9LDUwMDApDQoJCQkJCX0NCgkJCQl9DQoJCQl9KQ0KDQoJCQkkKCIudXNlci1ib3gtY29udGFpbmVyIC51cGRhdGUiKS5vbigiY2xpY2siLCAoKSA9PiB7DQoJCQkJJC5hamF4U2V0dXAoew0KCQkJCQlhc3luYzogZmFsc2UNCgkJCQl9KTsNCgkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKQ0KCQkJCWNvbnN0IHJlcyA9IHV0aWwuY2hlY2tVcGRhdGUodHJ1ZSkNCgkJCQkkLmFqYXhTZXR1cCh7DQoJCQkJCWFzeW5jOiB0cnVlDQoJCQkJfSk7DQoJCQkJaWYgKHJlcy5jb2RlIDwgMCkgew0KCQkJCQl1dGlsLnNob3dUaXBzKHsNCgkJCQkJCXRpdGxlOiByZXMubXNnDQoJCQkJCX0pDQoJCQkJfQ0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCX0pDQoNCgkJCXZpcEJveC5maW5kKCIjd3QtbXktc2V0Iikub24oImNsaWNrIiwgYXN5bmMgKCkgPT4gew0KCQkJCWlmICghX0NPTkZJR18udXNlcikgew0KCQkJCQkkKCIjd3QtbXkiKS5jbGljaygpDQoJCQkJCXJldHVybg0KCQkJCX0NCg0KCQkJCWlmICghX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCQkJZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHsNCgkJCQkJCWF3YWl0IHV0aWwuc2xlZXAoMTAwMCkNCgkJCQkJCWlmIChfQ09ORklHXy52aWRlb1VybCkgew0KCQkJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQkJCQlicmVhaw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJaWYgKF9DT05GSUdfLnZpZGVvVXJsKSB7DQoJCQkJCSQoJyN3dC12aWRlby1jb250YWluZXInKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKQ0KCQkJCQlpZiAoX0NPTkZJR18uaXNNb2JpbGUgJiYgX0NPTkZJR18uaXNNb2JpbGVbMF0gPT0gJ2lQaG9uZScpIHsNCgkJCQkJCV9DT05GSUdfLmhsc19kcCA9IG5ldyBEUGxheWVyKHsNCgkJCQkJCQljb250YWluZXI6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dC12aWRlbyIpLA0KCQkJCQkJCXNjcmVlbnNob3Q6IHRydWUsDQoJCQkJCQkJdmlkZW86IHsNCgkJCQkJCQkJdXJsOiBfQ09ORklHXy52aWRlb1VybA0KCQkJCQkJCX0NCgkJCQkJCX0pDQoJCQkJCQlfQ09ORklHXy5obHNfZHAucGxheSgpDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQljb25zdCB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3dC12aWRlbycpDQoJCQkJCQlfQ09ORklHXy5obHNfZHAgPSBuZXcgSGxzKCkNCgkJCQkJCV9DT05GSUdfLmhsc19kcC5sb2FkU291cmNlKF9DT05GSUdfLnZpZGVvVXJsKQ0KCQkJCQkJX0NPTkZJR18uaGxzX2RwLmF0dGFjaE1lZGlhKHZpZGVvKQ0KCQkJCQkJX0NPTkZJR18uaGxzX2RwLm9uKEhscy5FdmVudHMuTUFOSUZFU1RfUEFSU0VELCBmdW5jdGlvbigpIHsNCgkJCQkJCQl2aWRlby5wbGF5KCkNCgkJCQkJCX0pDQoJCQkJCX0NCgkJCQl9DQoJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQ0KCQkJCWlmICghX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQl0aXRsZTogJ+inhumikeS4jeWtmOWcqCzor7flnKjop4bpopHpobXpnaLkvb/nlKgnDQoJCQkJCX0pDQoJCQkJfQ0KCQkJfSkNCg0KCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lciBkaXYnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7DQoJCQkJZS5zdG9wUHJvcGFnYXRpb24oKQ0KCQkJfSkNCg0KCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KCQkJCSQoJyN3dC12aWRlby1jb250YWluZXInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJaWYgKF9DT05GSUdfLmhsc19kcCkgX0NPTkZJR18uaGxzX2RwLmRlc3Ryb3koKQ0KCQkJfSkNCgkJCSQoJy53dC1jbG9zZS1idG4nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCgkJCQkkKCcjd3QtdmlkZW8tY29udGFpbmVyJykuY2xpY2soKQ0KCQkJfSkNCg0KCQkJdmlwQm94LmZpbmQoIiN3dC1teS1jb3B5Iikub24oImNsaWNrIiwgYXN5bmMgKCkgPT4gew0KCQkJCWlmICghX0NPTkZJR18udXNlcikgew0KCQkJCQkkKCIjd3QtbXkiKS5jbGljaygpDQoJCQkJCXJldHVybg0KCQkJCX0NCgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsKSB7DQoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpDQoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7DQoJCQkJCQlhd2FpdCB1dGlsLnNsZWVwKDEwMDApDQoJCQkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJCQkJYnJlYWsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJaWYgKCFfQ09ORklHXy52aWRlb1VybCkgew0KCQkJCQl1dGlsLnNob3dUaXBzKHsNCgkJCQkJCXRpdGxlOiAn6KeG6aKR5LiN5a2Y5ZyoLOivt+WcqOinhumikemhtemdouS9v+eUqCcNCgkJCQkJfSkNCgkJCQl9IGVsc2Ugew0KCQkJCQkJdXRpbC5jb3B5VGV4dChfQ09ORklHXy52aWRlb1VybCkudGhlbihyZXMgPT4gew0KCQkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQkJdGl0bGU6ICfop4bpopHlnLDlnYDlpI3liLbmiJDlip8nDQoJCQkJCQl9KQ0KCQkJCQl9KQ0KCQkJCX0NCgkJCX0pDQoNCgkJCXZpcEJveC5maW5kKCIjd3QtbXktZG93biIpLm9uKCJjbGljayIsIGFzeW5jICgpID0+IHsNCgkJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsNCgkJCQkJJCgiI3d0LW15IikuY2xpY2soKQ0KCQkJCQlyZXR1cm4NCgkJCQl9DQoJCQkJdXRpbC5zaG93QW5kSGlkVGlwcygnd3RfbXlfZG93bl9oYWlqaWFvJywgJ3NldCcsIGZhbHNlKQ0KCQkJCWlmICghX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCQkJZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHsNCgkJCQkJCWF3YWl0IHV0aWwuc2xlZXAoMTAwMCkNCgkJCQkJCWlmIChfQ09ORklHXy52aWRlb1VybCkgew0KCQkJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQkJCQlicmVhaw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsKSB7DQoJCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQkJdGl0bGU6ICfop4bpopHkuI3lrZjlnKgs6K+35Zyo6KeG6aKR6aG16Z2i5L2/55SoJw0KCQkJCQl9KQ0KCQkJCX0gZWxzZSB7DQoJCQkJCXdpbmRvdy5vcGVuKCdodHRwczovL3Rvb2xzLnRoYXR3aW5kLmNvbS90b29sL20zdThkb3dubG9hZGVyI20zdTg9JyArIF9DT05GSUdfLnZpZGVvVXJsKQ0KCQkJCX0NCgkJCX0pDQoNCgkJCXZpcEJveC5maW5kKCIjd3QtaGlkLWJveCIpLm9uKCJjbGljayIsICgpID0+IHsNCgkJCQl2aXBCb3guY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDEyNSUsIC01MCUpIik7DQoJCQkJJCgnI3d0LWxlZnQtc2hvdycpLmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCAtNTAlKSIpDQoJCQkJR01fc2V0VmFsdWUoJ2hhaWppYW9faGlkX2NvbnRyb2xsZXInLCAxKQ0KCQkJfSkNCg0KCQkJJCgnI3d0LWxlZnQtc2hvdycpLm9uKCdjbGljaycsICgpID0+IHsNCgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKC02MHB4LCAtNTAlKSIpOw0KCQkJCXZpcEJveC5jc3MoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgLTUwJSkiKQ0KCQkJCUdNX3NldFZhbHVlKCdoYWlqaWFvX2hpZF9jb250cm9sbGVyJywgJycpDQoJCQl9KQ0KDQoJCQkkKCcjd3QtbWFzay1ib3gnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkJJCgnI3d0LW1hc2stYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQ0KCQkJCSQoIiN3dC1zZXQtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOw0KCQkJCSQoIiN3dC1zZXQtYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykNCgkJCQlzZXRUaW1lb3V0KCgpID0+IHsNCgkJCQkJJCgiI3d0LXNldC1ib3ggLmxpbmUtYm94IikuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsNCgkJCQkJJCgiI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciIpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQl9LCA1MDApDQoJCQl9KQ0KDQoJCQkkKCcjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIC51c2VyLWJveCAuaW5mby1ib3gnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7DQoJCQkJbGV0IGluZGV4ID0gJycNCgkJCQl0cnkgew0KCQkJCQlpbmRleCA9IE51bWJlcihlLmN1cnJlbnRUYXJnZXQuYXR0cmlidXRlc1snZGF0YS1pbmRleCddLnZhbHVlKQ0KCQkJCX0gY2F0Y2ggKGUpIHt9DQoJCQkJaWYgKF9DT05GSUdfLnNjcmlwdHNbaW5kZXhdLm1zZykgew0KCQkJCQl1dGlsLnNob3dUaXBzKHsNCgkJCQkJCXRpdGxlOiBfQ09ORklHXy5zY3JpcHRzW2luZGV4XS5tc2cNCgkJCQkJfSkNCgkJCQkJcmV0dXJuDQoJCQkJfTsNCgkJCQlpZiAoaW5kZXggPj0gMCkgew0KCQkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9IF9DT05GSUdfLnNjcmlwdHNbaW5kZXhdLnVybCArICcuJyArIGF0b2IoX0NPTkZJR18NCgkJCQkJCS5lbmROYW1lKQ0KCQkJCX0gZWxzZSB7DQoJCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQkJdGl0bGU6ICfor7fliY3lvoDnvZHlnYDojrflj5bohJrmnKzlnLDlnYAnDQoJCQkJCX0pDQoJCQkJfQ0KCQkJfSkNCg0KCQkJJCgiI3d0LXNldC1ib3ggLmNsb3NlIikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJCSQoJyN3dC1tYXNrLWJveCcpLmNsaWNrKCkNCgkJCX0pDQoNCgkJCXZpcEJveC5maW5kKCIjd3QtbXktbm90aWZ5Iikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJCWlmIChfQ09ORklHXy5zaG93Tm90aWZ5KSB7DQoJCQkJCSQoJyN3dC1ub3RpZnktYm94JykuY2xpY2soKQ0KCQkJCX0gZWxzZSB7DQoJCQkJCWNvbnN0IG5vdGlmeSA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX25vdGlmeScsICcnKTsNCgkJCQkJaWYgKG5vdGlmeSAmJiAobm90aWZ5LmRhdGUgPT0gbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSkpIHsNCgkJCQkJCXV0aWwuc2hvd05vdGlmeSh7DQoJCQkJCQkJdGl0bGU6IG5vdGlmeS5tc2cNCgkJCQkJCX0pDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQl1dGlsLnNob3dOb3RpZnkoew0KCQkJCQkJCXRpdGxlOiAn6L+Y5rKh5pyJ6YCa55+l5L+h5oGvJw0KCQkJCQkJfSkNCgkJCQkJfTsNCgkJCQkJdXRpbC5zaG93QW5kSGlkVGlwcygnd3RfbXlfbm90aWZ5X2hhaWppYW8nLCAnc2V0JywgZmFsc2UpDQoJCQkJfQ0KCQkJfSkNCg0KCQkJbGV0IHRpcHMgPSBHTV9nZXRWYWx1ZSgnd3RfdGlwcycpDQoJCQlpZiAoIXRpcHMpIHRpcHMgPSB7fQ0KCQkJZm9yIChsZXQgaSBpbiB0aXBzKSB7DQoJCQkJaWYgKHRpcHNbaV0pICQoJy4nICsgaSkuYWRkQ2xhc3MoJ3RpcHMteXVhbicpDQoJCQl9DQoJCQlpZiAoISgnd3RfbXlfaGFpamlhbycgaW4gdGlwcykpIHV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X2hhaWppYW8nKQ0KCQkJaWYgKCEoJ3d0X215X2Rvd25faGFpamlhbycgaW4gdGlwcykpIHV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X2Rvd25faGFpamlhbycpDQoJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsNCgkJCQl1dGlsLmFkZExvZ2luKCkNCgkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcjd3QtbXknKS50aGVuKHJlcyA9PnsNCgkJCQkJc2V0VGltZW91dCgoKT0+ew0KCQkJCQkJcmVzLmNsaWNrKCkNCgkJCQkJfSwyNTAwKQ0KCQkJCX0pDQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gew0KCQlzdGFydDogKCkgPT4gew0KCQkJaWYobG9jYXRpb24uaG9zdCA9PSAnaGplZGQuY29tJykgbG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ2hqZWRkLmNvbScsJ2hqZWRkLnRvcCcpDQoJCQlpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09ICdoamVkZC50b3AnKSBfQ09ORklHXy5oamVkZCA9IHRydWUNCgkJCWNvbnN0IHd0X2hhaWppYW9fZmlyc3RfdXNlID0gR01fZ2V0VmFsdWUoJ3d0X2hhaWppYW9fZmlyc3RfdXNlJywgJycpDQoJCQlpZiAoIXd0X2hhaWppYW9fZmlyc3RfdXNlKSBHTV9zZXRWYWx1ZSgnd3RfaGFpamlhb19maXJzdF91c2UnLCBEYXRlLm5vdygpICsgKE1hdGgucm91bmQoTWF0aA0KCQkJCS5yYW5kb20oKSAqIDg5OTk5OSArIDEwMDAwMCkgKyAnJykpDQoJCQlfQ09ORklHXy51c2VyID0gR01fZ2V0VmFsdWUoJ2pzeGxfdXNlcicsICcnKQ0KCQkJaWYgKF9DT05GSUdfLnVzZXIpIHsNCgkJCQlpZiAoX0NPTkZJR18udXNlci5sb2dpbl9kYXRlICYmIChfQ09ORklHXy51c2VyLmxvZ2luX2RhdGUgIT0gbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLA0KCQkJCQkJMCkpKSB7DQoJCQkJCV9DT05GSUdfLnVzZXIgPSAnJw0KCQkJCQlHTV9zZXRWYWx1ZSgnanN4bF91c2VyJywgJycpDQoJCQkJfQ0KCQkJfQ0KCQkJY29uc3QgdG9rZW5zID0gZG9jdW1lbnQuY29va2llDQoJCQlpZih0b2tlbnMpew0KCQkJCXRva2Vucy5zcGxpdCgnOycpLmZvckVhY2goaXRlbSA9PnsNCgkJCQkJY29uc3QgYXJyID0gaXRlbS5zcGxpdCgnPScpDQoJCQkJCWlmKGFyci5sZW5ndGggPiAxICYmIChhcnJbMF0ucmVwbGFjZSgvXHMqL2csIiIpID09ICd1aWQnIHx8IGFyclswXS5yZXBsYWNlKC9ccyovZywiIikgPT0gJ3Rva2VuJykpew0KCQkJCQkJZG9jdW1lbnQuY29va2llID0gYXJyWzBdLnJlcGxhY2UoL1xzKi9nLCIiKSArICc9JyArIGFyclsxXS5yZXBsYWNlKC9ccyovZywiIikgKyc7cGF0aD0vO2V4cGlyZXM9JyArIG5ldyBEYXRlKERhdGUubm93KCkgKyAxMjk2MDAwMDAwKS50b0dNVFN0cmluZygpDQoJCQkJCQlzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGFyclswXS5yZXBsYWNlKC9ccyovZywiIiksYXJyWzFdLnJlcGxhY2UoL1xzKi9nLCIiKSkNCgkJCQkJfQ0KCQkJCX0pDQoJCQl9DQoJCQluZXcgQmFzZUNvbnN1bWVyKCkucGFyc2UoKQ0KCQl9LA0KCQlfQ09ORklHXw0KCX0NCn0pKCk7DQoNCihmdW5jdGlvbigpew0KCS8vIGlmICh1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQpIHsNCgkvLyAJYWxlcnQoJ+WtmOWcqOWkmuS4queJiOacrOa1t+inkuiEmuacrO+8jOivt+ajgOafpeWQjuWIoOmZpOS9jueJiOacrOiEmuacrOWGjeWIt+aWsOmhtemdou+8jOWmgui/mOaYr+WHuueOsOatpOaPkOmGkuivt+mAgOWHuua1j+iniOWZqOmHjeaWsOaJk+W8gOWIt+aWsOmhtemdou+8jOWmgui/mOacquino+WGs+ivt+iBlOezu+S9nOiAhVFRKDM1NTAyNzk1NTkp77yM5b6u5L+hKGpzeGxfMTk5N18p77yM6YKu566xKGpzeGwyMDIzQHFxLmNvbSknKQ0KCS8vIAlyZXR1cm4NCgkvLyB9DQoJdW5zYWZlV2luZG93Lnd0X2hhaWppYW9fc2NyaXB0ID0gdHJ1ZQ0KCWNvbnN0IG9sZGFkZCA9IEV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyDQoJY29uc3QgcGxheWVyQ2xpY2tzID0gWydzaG93LXZpZGVvLWJveCcsJ3ZpZGVvLXVybC1saXN0LWJ0bicsJ25vdmRlZGlvJ10NCgljb25zdCBwbGF5ZXJPYmogPSB7IHBjVXJsQ29udGFpbmVyOiAnLnZpZGVvLWRpdi1idG4nLG1vVXJsQ29udGFpbmVyOiAnLnNob3ctdmlkZW8tYm94JyxwY1BsYXllckNvbnRhaW5lcjogJy5ub3ZkZWRpbycsbW9QbGF5ZXJDb250YWluZXI6ICcuc2hvdy12aWRlby1ib3gnfQ0KCUV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uICguLi5hcmdzKXsNCgkJaWYoYXJnc1swXSA9PSAnY2xpY2snKXsNCgkJCWlmKHBsYXllckNsaWNrcy5pbmNsdWRlcyh0aGlzLmNsYXNzTmFtZSkpew0KCQkJCXRyeXsNCgkJCQkJbGV0IHVybCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vVXJsQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNVcmxDb250YWluZXIpLmRhdGFzZXQudXJsDQoJCQkJCWlmKCF1cmwgJiYgc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwpIHVybCA9IHN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsDQoJCQkJCWNvbnN0IHBsYXllciA9IGZ1bmN0aW9uKGUpew0KCQkJCQkJaWYoc3VwZXJWaXAuX0NPTkZJR18uaXNNb2JpbGUgJiYgc3VwZXJWaXAuX0NPTkZJR18uaXNNb2JpbGVbMF0gPT0gJ2lQaG9uZScpew0KCQkJCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vVXJsQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNVcmxDb250YWluZXIpLm91dGVySFRNTCA9IGA8ZGl2PjxkaXYgY2xhc3M9IiR7cGxheWVyT2JqLm1vVXJsQ29udGFpbmVyLnJlcGxhY2UoJy4nLCcnKSArICcgJyArIHBsYXllck9iai5wY1VybENvbnRhaW5lci5yZXBsYWNlKCcuJywnJyl9Ij48L2Rpdj48L2Rpdj5gDQoJCQkJCQkJR01fYWRkU3R5bGUoYA0KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItYmFyLXdyYXB7Ym90dG9tOiA2MHB4ICFpbXBvcnRhbnQ7fQ0KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItYmFye3Bvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O3RvcDogMHB4ICFpbXBvcnRhbnQ7fQ0KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gc3Zne3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDUwJTsgbGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgd2lkdGg6IDI1cHg7IGhlaWdodDogMjVweDt9DQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1jb250cm9sbGVye3BhZGRpbmc6IDAgMTBweCAhaW1wb3J0YW50O2JvdHRvbTogMTBweCAhaW1wb3J0YW50O30NCgkJCQkJCQkJJHtwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXJ9IC5kcGxheWVyLWljb25zLWxlZnR7ZGlzcGxheTogZmxleDtoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDt9DQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1pY29ucy1sZWZ0IC5kcGxheWVyLXBsYXktaWNvbntwb3NpdGlvbjogcmVsYXRpdmU7fQ0KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItaWNvbnMtbGVmdCAuZHBsYXllci10aW1le3doaXRlLXNwYWNlOiBpbml0aWFsICFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6IDIwcHg7fQ0KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItaWNvbnMtcmlnaHR7ZGlzcGxheTogZmxleDtoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtyaWdodDogNjBweCAhaW1wb3J0YW50O30NCgkJCQkJCQkJJHtwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXJ9IC5kcGxheWVyLWljb25zLXJpZ2h0IC5kcGxheWVyLXNldHRpbmd7cG9zaXRpb246IHJlbGF0aXZlO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXJpZ2h0OiAxNXB4O30NCgkJCQkJCQkJJHtwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXJ9IC5kcGxheWVyLWljb25zLXJpZ2h0IC5kcGxheWVyLXNldHRpbmcgLmRwbGF5ZXItc2V0dGluZy1pY29ue3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7bGVmdDogMDt9DQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1pY29ucy1yaWdodCAuZHBsYXllci1mdWxse3Bvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O30NCgkJCQkJCQkJJHtwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXJ9IC5kcGxheWVyLWljb25zLXJpZ2h0IC5kcGxheWVyLWZ1bGwgLmRwbGF5ZXItZnVsbC1pbi1pY29ue3Bvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O3RvcDogMCAhaW1wb3J0YW50O2xlZnQ6IDAgIWltcG9ydGFudDt9DQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1pY29ucy1yaWdodCAuZHBsYXllci1mdWxsIC5kcGxheWVyLWZ1bGwtaWNvbntwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwO2xlZnQ6IDU1cHg7fQ0KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItcGxheWVke2JhY2tncm91bmQ6IHJnYigxMDcsIDE3MCwgMjM3KSAhaW1wb3J0YW50O30NCgkJCQkJCQlgKQ0KCQkJCQkJCWNvbnN0IGhsc19kcCA9IG5ldyBEUGxheWVyKHsNCgkJCQkJCQkJY29udGFpbmVyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBsYXllck9iai5tb1BsYXllckNvbnRhaW5lcisnLCcrcGxheWVyT2JqLnBjUGxheWVyQ29udGFpbmVyKSwNCgkJCQkJCQkJc2NyZWVuc2hvdDogdHJ1ZSwNCgkJCQkJCQkJdmlkZW86IHsNCgkJCQkJCQkJCXVybA0KCQkJCQkJCQl9DQoJCQkJCQkJfSkNCgkJCQkJCQlobHNfZHAucGxheSgpDQoJCQkJCQl9ZWxzZXsNCgkJCQkJCQlpZihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHBsYXllci12aWRlbycpKSByZXR1cm4NCgkJCQkJCQljb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNQbGF5ZXJDb250YWluZXIpLm91dGVySFRNTA0KCQkJCQkJCWNvbnN0IHJlZ3MgPSBlbC5tYXRjaCgvPChbXiBdKykvKQ0KCQkJCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNQbGF5ZXJDb250YWluZXIpLm91dGVySFRNTCA9IGVsLnJlcGxhY2UoZWwubWF0Y2goLzxbXiBdKy8pLCc8dmlkZW8nKS5yZXBsYWNlKGVsLnN1YnN0cmluZyhlbC5sZW5ndGgtKHJlZ3NbMV0ubGVuZ3RoKzEpKSwndmlkZW8+JykNCgkJCQkJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBsYXllck9iai5tb1BsYXllckNvbnRhaW5lcisnLCcrcGxheWVyT2JqLnBjUGxheWVyQ29udGFpbmVyKS5zZXRBdHRyaWJ1dGUoJ2NvbnRyb2xzJyx0cnVlKQ0KCQkJCQkJCWNvbnN0IHBhZ2VfcGxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNQbGF5ZXJDb250YWluZXIpDQoJCQkJCQkJY29uc3QgaGxzX2RwID0gbmV3IEhscygpDQoJCQkJCQkJaGxzX2RwLmxvYWRTb3VyY2UodXJsKQ0KCQkJCQkJCWhsc19kcC5hdHRhY2hNZWRpYShwYWdlX3BsYXkpDQoJCQkJCQkJaGxzX2RwLm9uKEhscy5FdmVudHMuTUFOSUZFU1RfUEFSU0VELCBmdW5jdGlvbigpIHsNCgkJCQkJCQkJcGFnZV9wbGF5LnBsYXkoKQ0KCQkJCQkJCX0pDQoJCQkJCQl9DQoJCQkJCQllLnN0b3BQcm9wYWdhdGlvbigpDQoJCQkJCX0NCgkJCQkJaWYodXJsKXsNCgkJCQkJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQocGxheWVyT2JqLm1vVXJsQ29udGFpbmVyKS50aGVuKHJlcyA9PnsNCgkJCQkJCQkkKHJlcykuYXBwZW5kKGA8ZGl2IGNsYXNzPSJwbGF5ZXJfbWFza193dCIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3otaW5kZXg6MSI+PC9kaXY+YCkNCgkJCQkJCQkkKCcucGxheWVyX21hc2tfd3QnKS5vbignY2xpY2snLHBsYXllcikNCgkJCQkJCX0pDQoJCQkJCQlhcmdzWzFdID0gcGxheWVyDQoJCQkJCX0NCgkJCQl9Y2F0Y2goZSl7DQoJCQkJCWFyZ3NbMV0gPSBmdW5jdGlvbigpew0KCQkJCQkJdXRpbC5zaG93VGlwcyh7IHRpdGxlOiAn5Yqg6L295aSx6LSl77yM6K+35Yi35paw5YaN6K+VJ30pDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZih0aGlzLmNsYXNzTmFtZSA9PSAnbG9naW4tYnRuJyB8fCB0aGlzLmNsYXNzTmFtZSA9PSAnZWwtYnV0dG9uIGxvZ2luLWZvcm0tYnV0dG9uIGVsLWJ1dHRvbi0tcHJpbWFyeScpew0KCQkJCWNvbnN0IHVzZXIgPSBHTV9nZXRWYWx1ZSgnaGFpamlhb191c2VycHdkJywnJykNCgkJCQlpZih1c2VyKXsNCgkJCQkJY29uc3QgZSA9IG5ldyBFdmVudCgiaW5wdXQiKQ0KCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCdpbnB1dFtwbGFjZWhvbGRlcj0i6K+36L6T5YWl55So5oi35ZCNL+mCrueusSJdLGlucHV0W3BsYWNlaG9sZGVyPSLor7fovpPlhaXnlKjmiLflkI0iXScpLnRoZW4ocmVzID0+ew0KCQkJCQkJJChyZXMpLnZhbCh1c2VyLnVzZXJuYW1lKQ0KCQkJCQkJcmVzLmRpc3BhdGNoRXZlbnQoZSkNCgkJCQkJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJ2lucHV0W3R5cGU9InBhc3N3b3JkIl0nKS50aGVuKHJlcyA9PnsNCgkJCQkJCQkkKHJlcykudmFsKHVzZXIucHdkKQ0KCQkJCQkJCXJlcy5kaXNwYXRjaEV2ZW50KGUpDQoJCQkJCQl9KQ0KCQkJCQl9KQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlvbGRhZGQuY2FsbCh0aGlzLC4uLmFyZ3MpDQoJfQ0KCXN1cGVyVmlwLnN0YXJ0KCk7DQp9KSgpOw==
Add Comment
Please, Sign In to add comment